diff --git a/.gitignore b/.gitignore
index aa3f65077..ee2d1e325 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,6 +14,8 @@ tags
# Project-specific ignores
*.z64
+*.n64
+*.v64
*.sra
*.bin
*.elf
diff --git a/Jenkinsfile b/Jenkinsfile
index 29c3721b2..a627ead7c 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -99,7 +99,7 @@ pipeline {
branch 'master'
}
agent{
- label 'master'
+ label 'zeldaret_website'
}
steps {
unstash 'reports'
diff --git a/Makefile b/Makefile
index 75ad3a54c..892d0355b 100644
--- a/Makefile
+++ b/Makefile
@@ -90,7 +90,7 @@ OBJCOPY := $(MIPS_BINUTILS_PREFIX)objcopy
OBJDUMP := $(MIPS_BINUTILS_PREFIX)objdump
ASM_PROC := python3 tools/asm-processor/build.py
-ASM_PROC_FLAGS := --input-enc=utf-8 --output-enc=euc-jp
+ASM_PROC_FLAGS := --input-enc=utf-8 --output-enc=euc-jp --convert-statics=global-with-filename
IINC := -Iinclude -Isrc -Iassets -Ibuild -I.
@@ -210,7 +210,7 @@ build/src/libultra/rmon/%.o: OPTFLAGS := -O2
build/src/libultra/flash/%.o: OPTFLAGS := -g
build/src/libultra/flash/%.o: MIPS_VERSION := -mips1
-build/src/code/audio/%.o: OPTFLAGS := -O2
+build/src/audio/%.o: OPTFLAGS := -O2
build/assets/%.o: OPTFLAGS := -O1
build/assets/%.o: ASM_PROC_FLAGS :=
@@ -238,7 +238,7 @@ build/src/libultra/%.o: CC := $(CC_OLD)
build/src/libultra/voice/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC_OLD) -- $(AS) $(ASFLAGS) --
build/src/code/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC) -- $(AS) $(ASFLAGS) --
-build/src/code/audio/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC) -- $(AS) $(ASFLAGS) --
+build/src/audio/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC) -- $(AS) $(ASFLAGS) --
build/src/overlays/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC) -- $(AS) $(ASFLAGS) --
diff --git a/README.md b/README.md
index 9d746db2a..d94b47950 100644
--- a/README.md
+++ b/README.md
@@ -23,7 +23,7 @@ please be aware that the codebase could drastically change at any time. Also not
parts of the ROM may not be 'shiftable' yet, so modifying them could currently be difficult.
```
-This is a WIP **decompilation** of ***The Legend of Zelda: Majora's Mask***. The purpose of the project is to recreate a source code base for the game from scratch, using information found inside the game along with static and/or dynamic analysis. **It is not, and will not, produce a PC port.** For frequently asked questions, you can visit [our website](https://zelda64.dev/mm), and for more information you can get in touch with the team on our [Discord server](https://discord.zelda64.dev).
+This is a WIP **decompilation** of ***The Legend of Zelda: Majora's Mask***. The purpose of the project is to recreate a source code base for the game from scratch, using information found inside the game along with static and/or dynamic analysis. **It is not, and will not, produce a PC port.** For frequently asked questions, you can visit [our website](https://zelda64.dev/games/mm), and for more information you can get in touch with the team on our [Discord server](https://discord.zelda64.dev).
The only version currently supported is N64 US, but we intend to eventually support every retail version of the original game (i.e. not versions of MM3D, which is a totally different game).
diff --git a/assets/xml/code/debug_display.xml b/assets/xml/code/debug_display.xml
index c8ac659bc..7a25bbd0c 100644
--- a/assets/xml/code/debug_display.xml
+++ b/assets/xml/code/debug_display.xml
@@ -4,7 +4,7 @@
-
+
diff --git a/assets/xml/code/eff_footmark.xml b/assets/xml/code/eff_footmark.xml
new file mode 100644
index 000000000..2fae1fe16
--- /dev/null
+++ b/assets/xml/code/eff_footmark.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/interface/parameter_static.xml b/assets/xml/interface/parameter_static.xml
index e5e0808c0..a2ab9e0c5 100644
--- a/assets/xml/interface/parameter_static.xml
+++ b/assets/xml/interface/parameter_static.xml
@@ -119,13 +119,13 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/gameplay_dangeon_keep.xml b/assets/xml/objects/gameplay_dangeon_keep.xml
index e9acb308b..493290604 100644
--- a/assets/xml/objects/gameplay_dangeon_keep.xml
+++ b/assets/xml/objects/gameplay_dangeon_keep.xml
@@ -88,6 +88,6 @@
-
+
diff --git a/assets/xml/objects/gameplay_field_keep.xml b/assets/xml/objects/gameplay_field_keep.xml
index 596101814..eac855669 100644
--- a/assets/xml/objects/gameplay_field_keep.xml
+++ b/assets/xml/objects/gameplay_field_keep.xml
@@ -40,8 +40,8 @@
-
-
+
+
diff --git a/assets/xml/objects/gameplay_keep.xml b/assets/xml/objects/gameplay_keep.xml
index ca0aaeb3c..8a78a1709 100644
--- a/assets/xml/objects/gameplay_keep.xml
+++ b/assets/xml/objects/gameplay_keep.xml
@@ -12,7 +12,7 @@
-
+
@@ -20,8 +20,8 @@
-
-
+
+
@@ -30,7 +30,7 @@
-
+
@@ -38,11 +38,14 @@
-
+
+
-
+
+
+
@@ -784,7 +787,7 @@
-
+
@@ -881,14 +884,17 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -926,16 +932,16 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
+
@@ -1033,14 +1039,14 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -1116,28 +1122,31 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1145,8 +1154,8 @@
-
-
+
+
@@ -1214,18 +1223,23 @@
-
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -1442,27 +1456,30 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
@@ -1472,14 +1489,14 @@
-
+
-
+
diff --git a/assets/xml/objects/object_ah.xml b/assets/xml/objects/object_ah.xml
index 1bf479e86..71b031a01 100644
--- a/assets/xml/objects/object_ah.xml
+++ b/assets/xml/objects/object_ah.xml
@@ -1,9 +1,9 @@
-
-
-
-
+
+
+
+
diff --git a/assets/xml/objects/object_ahg.xml b/assets/xml/objects/object_ahg.xml
index 7eb4c7126..8233a5b27 100644
--- a/assets/xml/objects/object_ahg.xml
+++ b/assets/xml/objects/object_ahg.xml
@@ -1,53 +1,62 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_al.xml b/assets/xml/objects/object_al.xml
index db348868a..790ca3d8a 100644
--- a/assets/xml/objects/object_al.xml
+++ b/assets/xml/objects/object_al.xml
@@ -1,6 +1,6 @@
-
+
@@ -66,10 +66,10 @@
-
-
-
-
-
+
+
+
+
+
diff --git a/assets/xml/objects/object_am.xml b/assets/xml/objects/object_am.xml
index 1f738d39b..bec26eb3a 100644
--- a/assets/xml/objects/object_am.xml
+++ b/assets/xml/objects/object_am.xml
@@ -1,8 +1,8 @@
-
-
-
+
+
+
@@ -35,7 +35,7 @@
-
-
+
+
diff --git a/assets/xml/objects/object_an1.xml b/assets/xml/objects/object_an1.xml
index 2db214bd3..d0f5f73c5 100644
--- a/assets/xml/objects/object_an1.xml
+++ b/assets/xml/objects/object_an1.xml
@@ -1,16 +1,16 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -52,7 +52,7 @@
-
+
@@ -60,7 +60,7 @@
-
+
@@ -82,7 +82,7 @@
-
-
+
+
diff --git a/assets/xml/objects/object_an2.xml b/assets/xml/objects/object_an2.xml
index 3adcc27f7..a1785e5dd 100644
--- a/assets/xml/objects/object_an2.xml
+++ b/assets/xml/objects/object_an2.xml
@@ -1,12 +1,12 @@
-
+
-
-
-
-
+
+
+
+
diff --git a/assets/xml/objects/object_an3.xml b/assets/xml/objects/object_an3.xml
index 2d94b81b7..2fa21dadc 100644
--- a/assets/xml/objects/object_an3.xml
+++ b/assets/xml/objects/object_an3.xml
@@ -1,12 +1,12 @@
-
+
-
-
-
+
+
+
diff --git a/assets/xml/objects/object_an4.xml b/assets/xml/objects/object_an4.xml
index 57088a072..a6bb94e37 100644
--- a/assets/xml/objects/object_an4.xml
+++ b/assets/xml/objects/object_an4.xml
@@ -1,15 +1,15 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_and.xml b/assets/xml/objects/object_and.xml
index 00c8d7585..a076a1c07 100644
--- a/assets/xml/objects/object_and.xml
+++ b/assets/xml/objects/object_and.xml
@@ -1,6 +1,6 @@
-
+
@@ -68,12 +68,12 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_ani.xml b/assets/xml/objects/object_ani.xml
index 34fb49f0d..fb17e4e75 100644
--- a/assets/xml/objects/object_ani.xml
+++ b/assets/xml/objects/object_ani.xml
@@ -1,11 +1,11 @@
-
-
-
-
-
-
+
+
+
+
+
+
@@ -53,15 +53,15 @@
-
+
-
-
-
+
+
+
-
-
+
+
-
+
diff --git a/assets/xml/objects/object_astr_obj.xml b/assets/xml/objects/object_astr_obj.xml
index 7a87bd61b..233de785b 100644
--- a/assets/xml/objects/object_astr_obj.xml
+++ b/assets/xml/objects/object_astr_obj.xml
@@ -5,9 +5,9 @@
-
+
-
-
+
+
diff --git a/assets/xml/objects/object_bai.xml b/assets/xml/objects/object_bai.xml
index 813065876..419f37b29 100644
--- a/assets/xml/objects/object_bai.xml
+++ b/assets/xml/objects/object_bai.xml
@@ -1,7 +1,7 @@
-
-
+
+
@@ -48,6 +48,6 @@
-
+
diff --git a/assets/xml/objects/object_bal.xml b/assets/xml/objects/object_bal.xml
index 2cdfc5c3a..a31c0e29f 100644
--- a/assets/xml/objects/object_bal.xml
+++ b/assets/xml/objects/object_bal.xml
@@ -1,9 +1,9 @@
-
-
-
-
+
+
+
+
@@ -69,13 +69,13 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_bba.xml b/assets/xml/objects/object_bba.xml
index 0b22866e7..c3a5d0424 100644
--- a/assets/xml/objects/object_bba.xml
+++ b/assets/xml/objects/object_bba.xml
@@ -18,10 +18,10 @@
-
-
-
-
+
+
+
+
@@ -44,8 +44,8 @@
-
-
+
+
diff --git a/assets/xml/objects/object_bee.xml b/assets/xml/objects/object_bee.xml
index 8fcd930fa..ab9699e84 100644
--- a/assets/xml/objects/object_bee.xml
+++ b/assets/xml/objects/object_bee.xml
@@ -2,7 +2,7 @@
-
+
diff --git a/assets/xml/objects/object_bg.xml b/assets/xml/objects/object_bg.xml
index fe294cb33..272968b8d 100644
--- a/assets/xml/objects/object_bg.xml
+++ b/assets/xml/objects/object_bg.xml
@@ -1,8 +1,8 @@
-
-
-
+
+
+
@@ -52,11 +52,11 @@
-
-
-
-
-
+
+
+
+
+
diff --git a/assets/xml/objects/object_bh.xml b/assets/xml/objects/object_bh.xml
index 3e33fb739..b4cc95393 100644
--- a/assets/xml/objects/object_bh.xml
+++ b/assets/xml/objects/object_bh.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/assets/xml/objects/object_big_fwall.xml b/assets/xml/objects/object_big_fwall.xml
index f3f51a488..bb8b838be 100644
--- a/assets/xml/objects/object_big_fwall.xml
+++ b/assets/xml/objects/object_big_fwall.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/assets/xml/objects/object_bigicicle.xml b/assets/xml/objects/object_bigicicle.xml
index 3e1a7fd7e..f02767256 100644
--- a/assets/xml/objects/object_bigicicle.xml
+++ b/assets/xml/objects/object_bigicicle.xml
@@ -2,11 +2,11 @@
-
-
-
-
-
+
+
+
+
+
diff --git a/assets/xml/objects/object_bigokuta.xml b/assets/xml/objects/object_bigokuta.xml
index d8df44ddc..7c2928b23 100644
--- a/assets/xml/objects/object_bigokuta.xml
+++ b/assets/xml/objects/object_bigokuta.xml
@@ -1,10 +1,10 @@
-
-
-
-
-
+
+
+
+
+
diff --git a/assets/xml/objects/object_bigpo.xml b/assets/xml/objects/object_bigpo.xml
index 531a151c6..e10052e3c 100644
--- a/assets/xml/objects/object_bigpo.xml
+++ b/assets/xml/objects/object_bigpo.xml
@@ -1,14 +1,14 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
+
@@ -19,8 +19,8 @@
-
-
+
+
diff --git a/assets/xml/objects/object_bigslime.xml b/assets/xml/objects/object_bigslime.xml
index 84a6eec61..93c2ef807 100644
--- a/assets/xml/objects/object_bigslime.xml
+++ b/assets/xml/objects/object_bigslime.xml
@@ -1,30 +1,30 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -90,34 +90,34 @@
-
-
-
+
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
diff --git a/assets/xml/objects/object_bji.xml b/assets/xml/objects/object_bji.xml
index bef54b0e5..697ee565c 100644
--- a/assets/xml/objects/object_bji.xml
+++ b/assets/xml/objects/object_bji.xml
@@ -1,8 +1,8 @@
-
-
-
+
+
+
@@ -59,6 +59,6 @@
-
+
diff --git a/assets/xml/objects/object_bjt.xml b/assets/xml/objects/object_bjt.xml
index 27529206f..a4943f6ee 100644
--- a/assets/xml/objects/object_bjt.xml
+++ b/assets/xml/objects/object_bjt.xml
@@ -1,13 +1,12 @@
+
-
-
-
-
-
-
-
+
+
+
+
+
diff --git a/assets/xml/objects/object_boj.xml b/assets/xml/objects/object_boj.xml
index 20c661bb5..2eb08a1ef 100644
--- a/assets/xml/objects/object_boj.xml
+++ b/assets/xml/objects/object_boj.xml
@@ -1,20 +1,20 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -58,7 +58,7 @@
-
+
@@ -76,18 +76,18 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_bombf.xml b/assets/xml/objects/object_bombf.xml
index a0e5cdef3..f27d67bc1 100644
--- a/assets/xml/objects/object_bombf.xml
+++ b/assets/xml/objects/object_bombf.xml
@@ -1,8 +1,8 @@
-
-
-
+
+
+
diff --git a/assets/xml/objects/object_bombiwa.xml b/assets/xml/objects/object_bombiwa.xml
index 6dbcaf2b5..903d5bd40 100644
--- a/assets/xml/objects/object_bombiwa.xml
+++ b/assets/xml/objects/object_bombiwa.xml
@@ -2,26 +2,26 @@
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/assets/xml/objects/object_boss01.xml b/assets/xml/objects/object_boss01.xml
index 89cc97a7e..08730f034 100644
--- a/assets/xml/objects/object_boss01.xml
+++ b/assets/xml/objects/object_boss01.xml
@@ -1,189 +1,232 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_boss03.xml b/assets/xml/objects/object_boss03.xml
index da17bf406..f4def4991 100644
--- a/assets/xml/objects/object_boss03.xml
+++ b/assets/xml/objects/object_boss03.xml
@@ -46,7 +46,7 @@
-
+
diff --git a/assets/xml/objects/object_boss05.xml b/assets/xml/objects/object_boss05.xml
index 95bb16edd..9490dd878 100644
--- a/assets/xml/objects/object_boss05.xml
+++ b/assets/xml/objects/object_boss05.xml
@@ -1,7 +1,7 @@
-
-
+
+
@@ -25,9 +25,9 @@
-
-
-
+
+
+
@@ -73,9 +73,9 @@
-
-
-
-
+
+
+
+
diff --git a/assets/xml/objects/object_boss07.xml b/assets/xml/objects/object_boss07.xml
index 91234f758..ac2f9afc1 100644
--- a/assets/xml/objects/object_boss07.xml
+++ b/assets/xml/objects/object_boss07.xml
@@ -1,216 +1,270 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_boss_hakugin.xml b/assets/xml/objects/object_boss_hakugin.xml
index 3444dc041..7c7232ecf 100644
--- a/assets/xml/objects/object_boss_hakugin.xml
+++ b/assets/xml/objects/object_boss_hakugin.xml
@@ -1,82 +1,106 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_botihasira.xml b/assets/xml/objects/object_botihasira.xml
index 93c59f42f..0a2212760 100644
--- a/assets/xml/objects/object_botihasira.xml
+++ b/assets/xml/objects/object_botihasira.xml
@@ -1,11 +1,11 @@
-
+
-
+
diff --git a/assets/xml/objects/object_box.xml b/assets/xml/objects/object_box.xml
index 4413ecd7a..c0603a6cf 100644
--- a/assets/xml/objects/object_box.xml
+++ b/assets/xml/objects/object_box.xml
@@ -1,9 +1,9 @@
-
-
+
+
-
+
@@ -22,8 +22,8 @@
-
-
+
+
@@ -45,9 +45,9 @@
-
-
+
+
-
+
diff --git a/assets/xml/objects/object_bsb.xml b/assets/xml/objects/object_bsb.xml
index 81cdb9991..40bce73f2 100644
--- a/assets/xml/objects/object_bsb.xml
+++ b/assets/xml/objects/object_bsb.xml
@@ -1,27 +1,27 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -73,8 +73,8 @@
-
-
-
+
+
+
diff --git a/assets/xml/objects/object_bsmask.xml b/assets/xml/objects/object_bsmask.xml
index ea94aa89e..92e8148e9 100644
--- a/assets/xml/objects/object_bsmask.xml
+++ b/assets/xml/objects/object_bsmask.xml
@@ -3,10 +3,10 @@
-
-
-
-
+
+
+
+
@@ -18,7 +18,7 @@
-
+
diff --git a/assets/xml/objects/object_cha.xml b/assets/xml/objects/object_cha.xml
index 12835da1f..79b008353 100644
--- a/assets/xml/objects/object_cha.xml
+++ b/assets/xml/objects/object_cha.xml
@@ -1,7 +1,7 @@
-
-
+
+
diff --git a/assets/xml/objects/object_comb.xml b/assets/xml/objects/object_comb.xml
index df9359acc..d2b00b0dd 100644
--- a/assets/xml/objects/object_comb.xml
+++ b/assets/xml/objects/object_comb.xml
@@ -1,8 +1,8 @@
-
+
-
+
diff --git a/assets/xml/objects/object_crace_object.xml b/assets/xml/objects/object_crace_object.xml
index af0cb89e0..63dd9913d 100644
--- a/assets/xml/objects/object_crace_object.xml
+++ b/assets/xml/objects/object_crace_object.xml
@@ -4,6 +4,6 @@
-
+
diff --git a/assets/xml/objects/object_crow.xml b/assets/xml/objects/object_crow.xml
index 10fc23543..068ca790a 100644
--- a/assets/xml/objects/object_crow.xml
+++ b/assets/xml/objects/object_crow.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/assets/xml/objects/object_cs.xml b/assets/xml/objects/object_cs.xml
index fe614582b..cc9dfbe74 100644
--- a/assets/xml/objects/object_cs.xml
+++ b/assets/xml/objects/object_cs.xml
@@ -2,25 +2,25 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -90,8 +90,8 @@
-
-
-
+
+
+
diff --git a/assets/xml/objects/object_ctower_rot.xml b/assets/xml/objects/object_ctower_rot.xml
index 3a04c474e..044443c98 100644
--- a/assets/xml/objects/object_ctower_rot.xml
+++ b/assets/xml/objects/object_ctower_rot.xml
@@ -67,34 +67,34 @@
-
-
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
-
+
+
+
diff --git a/assets/xml/objects/object_d_hsblock.xml b/assets/xml/objects/object_d_hsblock.xml
index b43647dc3..ee61d0a54 100644
--- a/assets/xml/objects/object_d_hsblock.xml
+++ b/assets/xml/objects/object_d_hsblock.xml
@@ -1,10 +1,10 @@
-
-
-
-
+
+
+
+
diff --git a/assets/xml/objects/object_d_lift.xml b/assets/xml/objects/object_d_lift.xml
index 475f7fd3e..868eccd85 100644
--- a/assets/xml/objects/object_d_lift.xml
+++ b/assets/xml/objects/object_d_lift.xml
@@ -3,8 +3,8 @@
-
-
+
+
diff --git a/assets/xml/objects/object_dai.xml b/assets/xml/objects/object_dai.xml
index b547897f8..927e3f1e1 100644
--- a/assets/xml/objects/object_dai.xml
+++ b/assets/xml/objects/object_dai.xml
@@ -2,21 +2,21 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_daiku.xml b/assets/xml/objects/object_daiku.xml
index 17d8ddbf0..0152a6e7d 100644
--- a/assets/xml/objects/object_daiku.xml
+++ b/assets/xml/objects/object_daiku.xml
@@ -1,11 +1,11 @@
-
-
-
-
-
-
+
+
+
+
+
+
@@ -39,10 +39,10 @@
-
+
-
+
@@ -66,11 +66,11 @@
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_danpei_object.xml b/assets/xml/objects/object_danpei_object.xml
index 3f373a8ce..8e86f2f79 100644
--- a/assets/xml/objects/object_danpei_object.xml
+++ b/assets/xml/objects/object_danpei_object.xml
@@ -3,9 +3,9 @@
-
-
-
+
+
+
diff --git a/assets/xml/objects/object_dblue_object.xml b/assets/xml/objects/object_dblue_object.xml
index 8611c539b..08cb20ec3 100644
--- a/assets/xml/objects/object_dblue_object.xml
+++ b/assets/xml/objects/object_dblue_object.xml
@@ -4,17 +4,17 @@
-
+
-
+
-
+
@@ -25,22 +25,22 @@
-
+
-
-
+
+
-
+
@@ -50,17 +50,17 @@
-
+
-
+
-
+
diff --git a/assets/xml/objects/object_death.xml b/assets/xml/objects/object_death.xml
index 77d4ccd4a..7588c484a 100644
--- a/assets/xml/objects/object_death.xml
+++ b/assets/xml/objects/object_death.xml
@@ -1,17 +1,17 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
+
@@ -41,7 +41,7 @@
-
+
@@ -76,9 +76,9 @@
-
-
-
+
+
+
diff --git a/assets/xml/objects/object_dekubaba.xml b/assets/xml/objects/object_dekubaba.xml
index eb80e770b..053b82f61 100644
--- a/assets/xml/objects/object_dekubaba.xml
+++ b/assets/xml/objects/object_dekubaba.xml
@@ -1,27 +1,40 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_dekucity_obj.xml b/assets/xml/objects/object_dekucity_obj.xml
index 1d680965e..2d1da14a0 100644
--- a/assets/xml/objects/object_dekucity_obj.xml
+++ b/assets/xml/objects/object_dekucity_obj.xml
@@ -1,22 +1,22 @@
-
-
+
+
-
+
-
+
-
+
diff --git a/assets/xml/objects/object_delf.xml b/assets/xml/objects/object_delf.xml
index 39996c0f0..85f3138e1 100644
--- a/assets/xml/objects/object_delf.xml
+++ b/assets/xml/objects/object_delf.xml
@@ -1,82 +1,82 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_dhouse.xml b/assets/xml/objects/object_dhouse.xml
index dd95b8b98..a5894a4df 100644
--- a/assets/xml/objects/object_dhouse.xml
+++ b/assets/xml/objects/object_dhouse.xml
@@ -9,25 +9,25 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
diff --git a/assets/xml/objects/object_dinofos.xml b/assets/xml/objects/object_dinofos.xml
index 8db9c7c4a..435d60e95 100644
--- a/assets/xml/objects/object_dinofos.xml
+++ b/assets/xml/objects/object_dinofos.xml
@@ -1,13 +1,13 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -62,10 +62,10 @@
-
-
-
-
-
+
+
+
+
+
diff --git a/assets/xml/objects/object_dkjail_obj.xml b/assets/xml/objects/object_dkjail_obj.xml
index 219181c6d..d0d2775c3 100644
--- a/assets/xml/objects/object_dkjail_obj.xml
+++ b/assets/xml/objects/object_dkjail_obj.xml
@@ -1,9 +1,9 @@
-
+
-
+
diff --git a/assets/xml/objects/object_dmask.xml b/assets/xml/objects/object_dmask.xml
index a7b3874ec..29f245b1b 100644
--- a/assets/xml/objects/object_dmask.xml
+++ b/assets/xml/objects/object_dmask.xml
@@ -1,17 +1,17 @@
-
-
+
+
-
+
-
-
+
+
@@ -21,7 +21,7 @@
-
+
diff --git a/assets/xml/objects/object_dnk.xml b/assets/xml/objects/object_dnk.xml
index bec6ce45d..b085eed28 100644
--- a/assets/xml/objects/object_dnk.xml
+++ b/assets/xml/objects/object_dnk.xml
@@ -1,11 +1,11 @@
-
-
-
-
-
+
+
+
+
+
@@ -45,7 +45,7 @@
-
-
+
+
diff --git a/assets/xml/objects/object_dno.xml b/assets/xml/objects/object_dno.xml
index e1528989c..e5b3323dc 100644
--- a/assets/xml/objects/object_dno.xml
+++ b/assets/xml/objects/object_dno.xml
@@ -1,94 +1,106 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_dnq.xml b/assets/xml/objects/object_dnq.xml
index 63f27a6f8..4a21dbfef 100644
--- a/assets/xml/objects/object_dnq.xml
+++ b/assets/xml/objects/object_dnq.xml
@@ -1,88 +1,100 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_dnt.xml b/assets/xml/objects/object_dnt.xml
index 96b793849..9f3fcf996 100644
--- a/assets/xml/objects/object_dnt.xml
+++ b/assets/xml/objects/object_dnt.xml
@@ -1,25 +1,25 @@
-
-
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -85,7 +85,7 @@
-
+
diff --git a/assets/xml/objects/object_dodongo.xml b/assets/xml/objects/object_dodongo.xml
index 8de3f4653..cc9b41e25 100644
--- a/assets/xml/objects/object_dodongo.xml
+++ b/assets/xml/objects/object_dodongo.xml
@@ -1,15 +1,15 @@
-
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
@@ -59,9 +59,9 @@
-
-
-
+
+
+
diff --git a/assets/xml/objects/object_dor01.xml b/assets/xml/objects/object_dor01.xml
index 39c950680..9708d97c6 100644
--- a/assets/xml/objects/object_dor01.xml
+++ b/assets/xml/objects/object_dor01.xml
@@ -1,7 +1,7 @@
-
-
+
+
diff --git a/assets/xml/objects/object_dor02.xml b/assets/xml/objects/object_dor02.xml
index c60fa9ba9..3cc3d1411 100644
--- a/assets/xml/objects/object_dor02.xml
+++ b/assets/xml/objects/object_dor02.xml
@@ -1,7 +1,7 @@
-
-
+
+
diff --git a/assets/xml/objects/object_dor03.xml b/assets/xml/objects/object_dor03.xml
index 941fa6fcc..c7971db0c 100644
--- a/assets/xml/objects/object_dor03.xml
+++ b/assets/xml/objects/object_dor03.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/assets/xml/objects/object_dor04.xml b/assets/xml/objects/object_dor04.xml
index 394f5a6fe..4e78d9efe 100644
--- a/assets/xml/objects/object_dor04.xml
+++ b/assets/xml/objects/object_dor04.xml
@@ -1,7 +1,7 @@
-
-
+
+
diff --git a/assets/xml/objects/object_dora.xml b/assets/xml/objects/object_dora.xml
index ab4b09cf7..09732ba0a 100644
--- a/assets/xml/objects/object_dora.xml
+++ b/assets/xml/objects/object_dora.xml
@@ -1,17 +1,17 @@
-
+
-
-
-
-
+
+
+
+
-
-
+
+
diff --git a/assets/xml/objects/object_driftice.xml b/assets/xml/objects/object_driftice.xml
index 0ddb6e204..c380c09c1 100644
--- a/assets/xml/objects/object_driftice.xml
+++ b/assets/xml/objects/object_driftice.xml
@@ -5,7 +5,7 @@
-
-
+
+
diff --git a/assets/xml/objects/object_drs.xml b/assets/xml/objects/object_drs.xml
index 1b6c29597..ef9788fd5 100644
--- a/assets/xml/objects/object_drs.xml
+++ b/assets/xml/objects/object_drs.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/assets/xml/objects/object_ds2.xml b/assets/xml/objects/object_ds2.xml
index 1794c4bf8..0eb35db79 100644
--- a/assets/xml/objects/object_ds2.xml
+++ b/assets/xml/objects/object_ds2.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/assets/xml/objects/object_ds2n.xml b/assets/xml/objects/object_ds2n.xml
index 7e7d45f0c..da6ce5e87 100644
--- a/assets/xml/objects/object_ds2n.xml
+++ b/assets/xml/objects/object_ds2n.xml
@@ -65,7 +65,7 @@
-
+
diff --git a/assets/xml/objects/object_dt.xml b/assets/xml/objects/object_dt.xml
index 8b2a90217..3acf0c442 100644
--- a/assets/xml/objects/object_dt.xml
+++ b/assets/xml/objects/object_dt.xml
@@ -1,10 +1,10 @@
-
-
-
-
-
+
+
+
+
+
@@ -28,8 +28,8 @@
-
-
+
+
@@ -37,15 +37,15 @@
-
+
-
-
-
+
+
+
-
-
+
+
@@ -62,6 +62,6 @@
-
+
diff --git a/assets/xml/objects/object_dy_obj.xml b/assets/xml/objects/object_dy_obj.xml
index a64bc975b..91b9a55fb 100644
--- a/assets/xml/objects/object_dy_obj.xml
+++ b/assets/xml/objects/object_dy_obj.xml
@@ -1,15 +1,15 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
@@ -18,7 +18,7 @@
-
+
diff --git a/assets/xml/objects/object_efc_star_field.xml b/assets/xml/objects/object_efc_star_field.xml
index 72b7ef636..90ea17929 100644
--- a/assets/xml/objects/object_efc_star_field.xml
+++ b/assets/xml/objects/object_efc_star_field.xml
@@ -1,8 +1,8 @@
-
+
-
+
diff --git a/assets/xml/objects/object_efc_tw.xml b/assets/xml/objects/object_efc_tw.xml
index 709224f9d..a7ca81b55 100644
--- a/assets/xml/objects/object_efc_tw.xml
+++ b/assets/xml/objects/object_efc_tw.xml
@@ -4,7 +4,7 @@
-
+
diff --git a/assets/xml/objects/object_eg.xml b/assets/xml/objects/object_eg.xml
index 9cda7f0a3..26e5c86bc 100644
--- a/assets/xml/objects/object_eg.xml
+++ b/assets/xml/objects/object_eg.xml
@@ -1,106 +1,154 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_ending_obj.xml b/assets/xml/objects/object_ending_obj.xml
index ad13ce7b8..f8902e353 100644
--- a/assets/xml/objects/object_ending_obj.xml
+++ b/assets/xml/objects/object_ending_obj.xml
@@ -1,13 +1,13 @@
-
+
-
-
+
+
diff --git a/assets/xml/objects/object_f40_obj.xml b/assets/xml/objects/object_f40_obj.xml
index 59bff9d05..17e7210de 100644
--- a/assets/xml/objects/object_f40_obj.xml
+++ b/assets/xml/objects/object_f40_obj.xml
@@ -11,7 +11,7 @@
-
-
+
+
diff --git a/assets/xml/objects/object_f40_switch.xml b/assets/xml/objects/object_f40_switch.xml
index a5c823baa..7e7fb5b1c 100644
--- a/assets/xml/objects/object_f40_switch.xml
+++ b/assets/xml/objects/object_f40_switch.xml
@@ -1,8 +1,8 @@
-
-
-
+
+
+
diff --git a/assets/xml/objects/object_f52_obj.xml b/assets/xml/objects/object_f52_obj.xml
index f80b67696..697a5b100 100644
--- a/assets/xml/objects/object_f52_obj.xml
+++ b/assets/xml/objects/object_f52_obj.xml
@@ -1,16 +1,16 @@
-
-
+
+
-
-
+
+
-
+
diff --git a/assets/xml/objects/object_f53_obj.xml b/assets/xml/objects/object_f53_obj.xml
index 424d7c003..d93048a9d 100644
--- a/assets/xml/objects/object_f53_obj.xml
+++ b/assets/xml/objects/object_f53_obj.xml
@@ -1,13 +1,13 @@
-
+
-
+
diff --git a/assets/xml/objects/object_fall.xml b/assets/xml/objects/object_fall.xml
index 47fa1da70..04c1ff058 100644
--- a/assets/xml/objects/object_fall.xml
+++ b/assets/xml/objects/object_fall.xml
@@ -7,14 +7,14 @@
-->
-
+
-
+
-
-
-
- \
+
+
+
+
@@ -22,7 +22,7 @@
-
+
@@ -30,7 +30,7 @@
-
+
@@ -43,7 +43,7 @@
-
+
diff --git a/assets/xml/objects/object_fall2.xml b/assets/xml/objects/object_fall2.xml
index 25439a50a..12299ab74 100644
--- a/assets/xml/objects/object_fall2.xml
+++ b/assets/xml/objects/object_fall2.xml
@@ -4,7 +4,7 @@
moon's mouth, both used in the cutscene before warping to the moon.
-->
-
+
@@ -12,7 +12,7 @@
-
+
@@ -29,6 +29,6 @@
-
+
diff --git a/assets/xml/objects/object_famos.xml b/assets/xml/objects/object_famos.xml
index d12a94d66..186e2b59b 100644
--- a/assets/xml/objects/object_famos.xml
+++ b/assets/xml/objects/object_famos.xml
@@ -1,7 +1,7 @@
-
+
@@ -24,7 +24,7 @@
-
+
diff --git a/assets/xml/objects/object_fb.xml b/assets/xml/objects/object_fb.xml
index bb630781c..59ecaf9e5 100644
--- a/assets/xml/objects/object_fb.xml
+++ b/assets/xml/objects/object_fb.xml
@@ -1,10 +1,10 @@
-
-
-
-
-
+
+
+
+
+
diff --git a/assets/xml/objects/object_fbdemo_triforce.xml b/assets/xml/objects/object_fbdemo_triforce.xml
index a00c9bf13..ed23e36c3 100644
--- a/assets/xml/objects/object_fbdemo_triforce.xml
+++ b/assets/xml/objects/object_fbdemo_triforce.xml
@@ -1,7 +1,7 @@
-
-
+
+
diff --git a/assets/xml/objects/object_firefly.xml b/assets/xml/objects/object_firefly.xml
index 4c6aacd16..acdcedb1d 100644
--- a/assets/xml/objects/object_firefly.xml
+++ b/assets/xml/objects/object_firefly.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/assets/xml/objects/object_fish.xml b/assets/xml/objects/object_fish.xml
index f01639fbf..918c0eb5f 100644
--- a/assets/xml/objects/object_fish.xml
+++ b/assets/xml/objects/object_fish.xml
@@ -1,6 +1,6 @@
-
+
@@ -43,21 +43,21 @@
-
-
+
+
-
-
+
+
-
-
+
+
-
-
-
+
+
+
-
+
@@ -74,11 +74,11 @@
-
-
+
+
-
-
+
+
@@ -95,14 +95,14 @@
-
-
+
+
-
-
+
+
-
+
@@ -137,26 +137,26 @@
-
+
-
-
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
+
diff --git a/assets/xml/objects/object_flowerpot.xml b/assets/xml/objects/object_flowerpot.xml
index b6adc70d4..01d16b663 100644
--- a/assets/xml/objects/object_flowerpot.xml
+++ b/assets/xml/objects/object_flowerpot.xml
@@ -3,9 +3,9 @@
-
-
-
-
+
+
+
+
diff --git a/assets/xml/objects/object_fr.xml b/assets/xml/objects/object_fr.xml
index 0cd28760e..f7fa4354b 100644
--- a/assets/xml/objects/object_fr.xml
+++ b/assets/xml/objects/object_fr.xml
@@ -1,8 +1,8 @@
-
-
-
+
+
+
diff --git a/assets/xml/objects/object_fsn.xml b/assets/xml/objects/object_fsn.xml
index dd67874f0..37867dc32 100644
--- a/assets/xml/objects/object_fsn.xml
+++ b/assets/xml/objects/object_fsn.xml
@@ -57,15 +57,14 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -78,8 +77,8 @@
-
-
+
+
@@ -106,7 +105,7 @@
-
-
+
+
diff --git a/assets/xml/objects/object_fu.xml b/assets/xml/objects/object_fu.xml
index 19404f90e..fb41a85e8 100644
--- a/assets/xml/objects/object_fu.xml
+++ b/assets/xml/objects/object_fu.xml
@@ -1,7 +1,7 @@
-
-
+
+
diff --git a/assets/xml/objects/object_fu_kaiten.xml b/assets/xml/objects/object_fu_kaiten.xml
index 37a7ec4bc..ad277bb26 100644
--- a/assets/xml/objects/object_fu_kaiten.xml
+++ b/assets/xml/objects/object_fu_kaiten.xml
@@ -1,18 +1,18 @@
-
+
-
-
+
+
-
+
diff --git a/assets/xml/objects/object_fu_mato.xml b/assets/xml/objects/object_fu_mato.xml
index b28899f3c..bedf6906f 100644
--- a/assets/xml/objects/object_fu_mato.xml
+++ b/assets/xml/objects/object_fu_mato.xml
@@ -1,21 +1,21 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_funen.xml b/assets/xml/objects/object_funen.xml
index 5f8c18c3d..7a0410008 100644
--- a/assets/xml/objects/object_funen.xml
+++ b/assets/xml/objects/object_funen.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/assets/xml/objects/object_fusen.xml b/assets/xml/objects/object_fusen.xml
index 2e115b2b7..2ee47097a 100644
--- a/assets/xml/objects/object_fusen.xml
+++ b/assets/xml/objects/object_fusen.xml
@@ -1,8 +1,8 @@
-
-
+
+
-
+
diff --git a/assets/xml/objects/object_fwall.xml b/assets/xml/objects/object_fwall.xml
index 1bbb5d572..a4311c173 100644
--- a/assets/xml/objects/object_fwall.xml
+++ b/assets/xml/objects/object_fwall.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/assets/xml/objects/object_ge1.xml b/assets/xml/objects/object_ge1.xml
index ead4263dc..a9c930215 100644
--- a/assets/xml/objects/object_ge1.xml
+++ b/assets/xml/objects/object_ge1.xml
@@ -38,7 +38,7 @@
-
+
diff --git a/assets/xml/objects/object_gla.xml b/assets/xml/objects/object_gla.xml
index 7463cd2e0..757e652c9 100644
--- a/assets/xml/objects/object_gla.xml
+++ b/assets/xml/objects/object_gla.xml
@@ -1,73 +1,78 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_harfgibud.xml b/assets/xml/objects/object_harfgibud.xml
index 61e1fc457..99578e996 100644
--- a/assets/xml/objects/object_harfgibud.xml
+++ b/assets/xml/objects/object_harfgibud.xml
@@ -1,128 +1,131 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_ice_block.xml b/assets/xml/objects/object_ice_block.xml
index ba755d100..dd25c06d5 100644
--- a/assets/xml/objects/object_ice_block.xml
+++ b/assets/xml/objects/object_ice_block.xml
@@ -5,7 +5,7 @@
-
+
@@ -21,8 +21,8 @@
-
+
-
+
diff --git a/assets/xml/objects/object_kaizoku_obj.xml b/assets/xml/objects/object_kaizoku_obj.xml
index 6a7457e1c..9ae61accf 100644
--- a/assets/xml/objects/object_kaizoku_obj.xml
+++ b/assets/xml/objects/object_kaizoku_obj.xml
@@ -7,13 +7,13 @@
-
-
+
+
-
-
+
+
diff --git a/assets/xml/objects/object_kin2_obj.xml b/assets/xml/objects/object_kin2_obj.xml
index e0ae09106..d36766ee4 100644
--- a/assets/xml/objects/object_kin2_obj.xml
+++ b/assets/xml/objects/object_kin2_obj.xml
@@ -1,33 +1,51 @@
+
-
+
+
-
-
-
-
+
+
+
+
+
+
+
+
-
-
+
+
+
+
-
+
+
+
-
+
+
-
+
+
+
+
+
diff --git a/assets/xml/objects/object_kz.xml b/assets/xml/objects/object_kz.xml
index 55f980ad2..f500ba141 100644
--- a/assets/xml/objects/object_kz.xml
+++ b/assets/xml/objects/object_kz.xml
@@ -12,6 +12,7 @@
+
@@ -20,6 +21,7 @@
+
@@ -30,19 +32,21 @@
+
-
+
-
+
-
+
+
@@ -52,30 +56,32 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_link_boy.xml b/assets/xml/objects/object_link_boy.xml
index 68ec00737..2fe50d9bc 100644
--- a/assets/xml/objects/object_link_boy.xml
+++ b/assets/xml/objects/object_link_boy.xml
@@ -2,42 +2,45 @@
-
-
+
+
-
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
-
+
@@ -46,36 +49,38 @@
-
+
-
-
+
+
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_link_child.xml b/assets/xml/objects/object_link_child.xml
index 5ad903048..dd045c1d8 100644
--- a/assets/xml/objects/object_link_child.xml
+++ b/assets/xml/objects/object_link_child.xml
@@ -1,25 +1,28 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
@@ -29,37 +32,44 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
+
+
+
@@ -67,49 +77,51 @@
-
+
+
-
+
-
+
-
+
-
-
-
-
+
+
+
+
-
+
-
+
+
-
-
-
+
+
+
-
+
-
-
-
+
+
+
@@ -122,35 +134,60 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_link_goron.xml b/assets/xml/objects/object_link_goron.xml
index 39686b4f7..76017884e 100644
--- a/assets/xml/objects/object_link_goron.xml
+++ b/assets/xml/objects/object_link_goron.xml
@@ -1,8 +1,13 @@
-
+
+
+
+
+
-
+
+
@@ -17,26 +22,28 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -45,9 +52,9 @@
-
+
-
+
@@ -59,7 +66,7 @@
-
+
@@ -76,33 +83,36 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_link_nuts.xml b/assets/xml/objects/object_link_nuts.xml
index eb072c940..9247d3db4 100644
--- a/assets/xml/objects/object_link_nuts.xml
+++ b/assets/xml/objects/object_link_nuts.xml
@@ -1,23 +1,24 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -39,10 +40,10 @@
-
+
-
+
@@ -53,27 +54,28 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_link_zora.xml b/assets/xml/objects/object_link_zora.xml
index 9a973c56a..5833293b8 100644
--- a/assets/xml/objects/object_link_zora.xml
+++ b/assets/xml/objects/object_link_zora.xml
@@ -1,8 +1,22 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
@@ -15,24 +29,26 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -48,13 +64,13 @@
-
-
+
+
-
+
@@ -68,29 +84,31 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_nb.xml b/assets/xml/objects/object_nb.xml
index 511fddd6c..7ac63e118 100644
--- a/assets/xml/objects/object_nb.xml
+++ b/assets/xml/objects/object_nb.xml
@@ -1,46 +1,58 @@
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_ob.xml b/assets/xml/objects/object_ob.xml
index d2390fc39..aa95db9bc 100644
--- a/assets/xml/objects/object_ob.xml
+++ b/assets/xml/objects/object_ob.xml
@@ -3,7 +3,7 @@
-
+
@@ -18,16 +18,16 @@
-
-
+
+
-
-
-
+
+
+
diff --git a/assets/xml/objects/object_os_anime.xml b/assets/xml/objects/object_os_anime.xml
index 7957dd58d..379beff0a 100644
--- a/assets/xml/objects/object_os_anime.xml
+++ b/assets/xml/objects/object_os_anime.xml
@@ -12,11 +12,11 @@
-
-
-
-
-
+
+
+
+
+
diff --git a/assets/xml/objects/object_osn.xml b/assets/xml/objects/object_osn.xml
index dbcdb8473..d6109c717 100644
--- a/assets/xml/objects/object_osn.xml
+++ b/assets/xml/objects/object_osn.xml
@@ -1,117 +1,139 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_po_fusen.xml b/assets/xml/objects/object_po_fusen.xml
index a25c9d960..23bfbe075 100644
--- a/assets/xml/objects/object_po_fusen.xml
+++ b/assets/xml/objects/object_po_fusen.xml
@@ -1,32 +1,39 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_po_sisters.xml b/assets/xml/objects/object_po_sisters.xml
index e2e57a31a..cc00b50a1 100644
--- a/assets/xml/objects/object_po_sisters.xml
+++ b/assets/xml/objects/object_po_sisters.xml
@@ -3,68 +3,68 @@
-
+
-
+
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
diff --git a/assets/xml/objects/object_rz.xml b/assets/xml/objects/object_rz.xml
index d8740403a..9bf8961a9 100644
--- a/assets/xml/objects/object_rz.xml
+++ b/assets/xml/objects/object_rz.xml
@@ -1,13 +1,13 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_slime.xml b/assets/xml/objects/object_slime.xml
index f17633eff..c8516e45f 100644
--- a/assets/xml/objects/object_slime.xml
+++ b/assets/xml/objects/object_slime.xml
@@ -1,14 +1,17 @@
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_sth.xml b/assets/xml/objects/object_sth.xml
index b176cd8cc..53040ae05 100644
--- a/assets/xml/objects/object_sth.xml
+++ b/assets/xml/objects/object_sth.xml
@@ -1,42 +1,53 @@
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_test3.xml b/assets/xml/objects/object_test3.xml
index efd018995..678e11693 100644
--- a/assets/xml/objects/object_test3.xml
+++ b/assets/xml/objects/object_test3.xml
@@ -7,7 +7,8 @@
-
+
+
@@ -17,7 +18,16 @@
-
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_wf.xml b/assets/xml/objects/object_wf.xml
index b6c5b640d..0d8fdb68c 100644
--- a/assets/xml/objects/object_wf.xml
+++ b/assets/xml/objects/object_wf.xml
@@ -65,11 +65,11 @@
-
-
-
-
-
+
+
+
+
+
@@ -135,8 +135,8 @@
-
+
-
+
diff --git a/assets/xml/objects/object_zod.xml b/assets/xml/objects/object_zod.xml
index 2616dbcdf..45fb179cc 100644
--- a/assets/xml/objects/object_zod.xml
+++ b/assets/xml/objects/object_zod.xml
@@ -1,50 +1,72 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_zog.xml b/assets/xml/objects/object_zog.xml
index 1ede14ad2..8d9e6ebdb 100644
--- a/assets/xml/objects/object_zog.xml
+++ b/assets/xml/objects/object_zog.xml
@@ -16,7 +16,7 @@
-
+
diff --git a/assets/xml/overlays/ovl_En_Sth.xml b/assets/xml/overlays/ovl_En_Sth.xml
index 80393fc2d..a0d90d9e8 100644
--- a/assets/xml/overlays/ovl_En_Sth.xml
+++ b/assets/xml/overlays/ovl_En_Sth.xml
@@ -1,14 +1,15 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/overlays/ovl_En_Sth2.xml b/assets/xml/overlays/ovl_En_Sth2.xml
index 23140ad71..cd458db36 100644
--- a/assets/xml/overlays/ovl_En_Sth2.xml
+++ b/assets/xml/overlays/ovl_En_Sth2.xml
@@ -9,6 +9,6 @@
-
+
diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md
index 493486e79..2f4c9854a 100644
--- a/docs/CONTRIBUTING.md
+++ b/docs/CONTRIBUTING.md
@@ -14,7 +14,7 @@ Most discussions happen on our [Discord Server](https://discord.zelda64.dev) whe
- [Style Guide](STYLE.md) - Description of the project style that we ask contributors to adhere to.
- [Code Review Guidelines](REVIEWING.md) - These are the guidelines that reviewers will be using when reviewing your code. Good to be familiar with these before submitting your code.
-- [Zelda 64 Reverse Engineering Website](https://zelda64.dev/mm) - Our homepage, with FAQ and progress graph :chart_with_upwards_trend:.
+- [Zelda 64 Reverse Engineering Website](https://zelda64.dev/games/mm) - Our homepage, with FAQ and progress graph :chart_with_upwards_trend:.
- [MM decomp tutorial](tutorial/contents.md) Detailed tutorial for learning in general how decomp works and how to decompile a small, simple file.
- [Introduction to OOT decomp](https://github.com/zeldaret/oot/blob/master/docs/tutorial/contents.md) - The tutorial the MM one was based on. For OOT, but largely applicable to MM as well. Covers slightly different topics, including how to get your data OK with `vbindiff`.
- The `#resources` channel on the Discord contains many more links on specific details of decompiling IDO MIPS code.
diff --git a/docs/STYLE.md b/docs/STYLE.md
index 4ac0525db..0cf1d051b 100644
--- a/docs/STYLE.md
+++ b/docs/STYLE.md
@@ -122,7 +122,7 @@ Floats usually need an `f` on the end to match, or IDO will use doubles. Our flo
bar();
```
-**Exception**: After `Actor_MarkForDeath` or sometimes setting the action function, if it makes sense to do so (this expresses the finality a bit better).
+**Exception**: After `Actor_Kill` or sometimes setting the action function, if it makes sense to do so (this expresses the finality a bit better).
## Macros and enums
diff --git a/docs/tools.md b/docs/tools.md
index 0aba4fa47..5005f7f93 100644
--- a/docs/tools.md
+++ b/docs/tools.md
@@ -127,7 +127,7 @@ Gives the progress output that the website uses. Run for that warm glow.
### `tools/regconvert.py`
-Convert `mips2c`'s `gGameInfo->data[n]` output (or a raw offset) into the appropriate variable in the REG pages. Can also be run on a file to mass-convert them: run with `-h` for details.
+Convert `mips2c`'s `gRegEditor->data[n]` output (or a raw offset) into the appropriate variable in the REG pages. Can also be run on a file to mass-convert them: run with `-h` for details.
### `tools/rename_global_asm.py`
diff --git a/docs/tutorial/advanced_control_flow.md b/docs/tutorial/advanced_control_flow.md
index 3ad2a9d4f..43e9e6d46 100644
--- a/docs/tutorial/advanced_control_flow.md
+++ b/docs/tutorial/advanced_control_flow.md
@@ -26,7 +26,7 @@ void func_809527F8(EnMs* this, PlayState* play);
void func_809529AC(EnMs* this, PlayState* play);
void func_80952A1C(EnMs* this, PlayState* play);
-const ActorInit En_Ms_InitVars = {
+ActorInit En_Ms_InitVars = {
ACTOR_EN_MS,
ACTORCAT_NPC,
FLAGS,
@@ -67,7 +67,7 @@ void EnMs_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->actor, 0.015f);
this->actor.colChkInfo.mass = 0xFF;
this->actionFunc = func_80952734;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.velocity.y = 0.0f;
this->actor.gravity = -1.0f;
}
@@ -81,7 +81,7 @@ void EnMs_Destroy(Actor* thisx, PlayState* play) {
void func_80952734(EnMs* this, PlayState* play) {
s16 temp_v1 = this->actor.yawTowardsPlayer - this->actor.shape.rot.y;
- if (gSaveContext.save.inventory.items[10] == ITEM_NONE) {
+ if (gSaveContext.save.saveInfo.inventory.items[10] == ITEM_NONE) {
this->actor.textId = 0x92E;
} else {
this->actor.textId = 0x932;
@@ -107,13 +107,13 @@ void func_809529AC(EnMs* this, PlayState* play) {
func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, 0);
this->actionFunc = func_80952A1C;
} else {
- Actor_PickUp(&this->actor, play, 0x35, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
+ Actor_OfferGetItem(&this->actor, play, 0x35, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
}
}
void func_80952A1C(EnMs* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- func_80151938(play, 0x936U);
+ Message_ContinueTextbox(play, 0x936U);
this->actionFunc = func_809527F8;
} else {
func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, -1);
@@ -167,8 +167,8 @@ void func_809527F8(EnMs* this, PlayState* play) {
return;
}
if (Message_ShouldAdvance(play) != 0) {
- func_801477B4(play);
- Actor_PickUp((Actor *) this, play, 0x35, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
+ Message_CloseTextbox(play);
+ Actor_OfferGetItem((Actor *) this, play, 0x35, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
this->actionFunc = func_809529AC;
return;
}
@@ -182,23 +182,23 @@ void func_809527F8(EnMs* this, PlayState* play) {
}
func_8019F230();
- func_80151938(play, 0x934U);
+ Message_ContinueTextbox(play, 0x934U);
// Duplicate return node #17. Try simplifying control flow for better match
return;
}
- func_801477B4(play);
- if ((s32) gSaveContext.save.playerData.rupees < 0xA) {
+ Message_CloseTextbox(play);
+ if ((s32) gSaveContext.save.saveInfo.playerData.rupees < 0xA) {
play_sound(0x4806U);
- func_80151938(play, 0x935U);
+ Message_ContinueTextbox(play, 0x935U);
return;
}
- if ((s32) gSaveContext.save.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
+ if ((s32) gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
play_sound(0x4806U);
- func_80151938(play, 0x937U);
+ Message_ContinueTextbox(play, 0x937U);
return;
}
func_8019F208();
- Actor_PickUp((Actor *) this, play, 0x35, 90.0f, 10.0f);
+ Actor_OfferGetItem((Actor *) this, play, 0x35, 90.0f, 10.0f);
Rupees_ChangeBy(-0xA);
this->actionFunc = func_809529AC;
}
@@ -256,8 +256,8 @@ block_5:
if (Message_ShouldAdvance(play) == 0) {
goto block_17;
}
- func_801477B4(play);
- Actor_PickUp((Actor *) this, play, 0x35, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
+ Message_CloseTextbox(play);
+ Actor_OfferGetItem((Actor *) this, play, 0x35, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
this->actionFunc = func_809529AC;
return;
block_7:
@@ -273,29 +273,29 @@ block_7:
}
goto block_16;
block_11:
- func_801477B4(play);
- if ((s32) gSaveContext.save.playerData.rupees >= 0xA) {
+ Message_CloseTextbox(play);
+ if ((s32) gSaveContext.save.saveInfo.playerData.rupees >= 0xA) {
goto block_13;
}
play_sound(0x4806U);
- func_80151938(play, 0x935U);
+ Message_ContinueTextbox(play, 0x935U);
return;
block_13:
- if ((s32) gSaveContext.save.inventory.ammo[gItemSlots[0xA]] < 0x14) {
+ if ((s32) gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] < 0x14) {
goto block_15;
}
play_sound(0x4806U);
- func_80151938(play, 0x937U);
+ Message_ContinueTextbox(play, 0x937U);
return;
block_15:
func_8019F208();
- Actor_PickUp((Actor *) this, play, 0x35, 90.0f, 10.0f);
+ Actor_OfferGetItem((Actor *) this, play, 0x35, 90.0f, 10.0f);
Rupees_ChangeBy(-0xA);
this->actionFunc = func_809529AC;
return;
block_16:
func_8019F230();
- func_80151938(play, 0x934U);
+ Message_ContinueTextbox(play, 0x934U);
block_17:
return;
}
@@ -312,11 +312,11 @@ which in many ways looks worse: you can see why the use of gotos in code is stro
The simplest sort of block label to eliminate is one that is only used once, and where the corresponding goto jumps over a simple block of code with no extra internal control flow structure. There are two obvious examples of this here, the first being
```C
- if ((s32) gSaveContext.save.playerData.rupees >= 0xA) {
+ if ((s32) gSaveContext.save.saveInfo.playerData.rupees >= 0xA) {
goto block_13;
}
play_sound(0x4806U);
- func_80151938(play, 0x935U);
+ Message_ContinueTextbox(play, 0x935U);
return;
block_13:
```
@@ -324,9 +324,9 @@ block_13:
Currently, this says to jump over the code block `play_sound...` if the condition in the if is satisfied. In non-goto terms, this means that the block should be run if the condition is *not* satisfied. This also illustrates a general property of goto-only mode: you have to reverse the senses of all of the ifs. Therefore the appropriate approach is to swap the if round, put the code block inside, and remove the goto and the label:
```C
- if (gSaveContext.save.playerData.rupees < 0xA) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < 0xA) {
play_sound(0x4806U);
- func_80151938(play, 0x935U);
+ Message_ContinueTextbox(play, 0x935U);
return;
}
```
@@ -359,8 +359,8 @@ block_5:
if (Message_ShouldAdvance(play) == 0) {
goto block_17;
}
- func_801477B4(play);
- Actor_PickUp((Actor *) this, play, 0x35, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
+ Message_CloseTextbox(play);
+ Actor_OfferGetItem((Actor *) this, play, 0x35, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
this->actionFunc = func_809529AC;
return;
block_7:
@@ -376,27 +376,27 @@ block_7:
}
goto block_16;
block_11:
- func_801477B4(play);
+ Message_CloseTextbox(play);
- if (gSaveContext.save.playerData.rupees < 0xA) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < 0xA) {
play_sound(0x4806U);
- func_80151938(play, 0x935U);
+ Message_ContinueTextbox(play, 0x935U);
return;
}
- if (gSaveContext.save.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
+ if (gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
play_sound(0x4806U);
- func_80151938(play, 0x937U);
+ Message_ContinueTextbox(play, 0x937U);
return;
}
func_8019F208();
- Actor_PickUp((Actor *) this, play, 0x35, 90.0f, 10.0f);
+ Actor_OfferGetItem((Actor *) this, play, 0x35, 90.0f, 10.0f);
Rupees_ChangeBy(-0xA);
this->actionFunc = func_809529AC;
return;
block_16:
func_8019F230();
- func_80151938(play, 0x934U);
+ Message_ContinueTextbox(play, 0x934U);
block_17:
return;
}
@@ -428,8 +428,8 @@ block_5:
if (Message_ShouldAdvance(play) == 0) {
return;
}
- func_801477B4(play);
- Actor_PickUp((Actor *) this, play, 0x35, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
+ Message_CloseTextbox(play);
+ Actor_OfferGetItem((Actor *) this, play, 0x35, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
this->actionFunc = func_809529AC;
return;
block_7:
@@ -445,27 +445,27 @@ block_7:
}
goto block_16;
block_11:
- func_801477B4(play);
+ Message_CloseTextbox(play);
- if (gSaveContext.save.playerData.rupees < 0xA) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < 0xA) {
play_sound(0x4806U);
- func_80151938(play, 0x935U);
+ Message_ContinueTextbox(play, 0x935U);
return;
}
- if (gSaveContext.save.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
+ if (gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
play_sound(0x4806U);
- func_80151938(play, 0x937U);
+ Message_ContinueTextbox(play, 0x937U);
return;
}
func_8019F208();
- Actor_PickUp((Actor *) this, play, 0x35, 90.0f, 10.0f);
+ Actor_OfferGetItem((Actor *) this, play, 0x35, 90.0f, 10.0f);
Rupees_ChangeBy(-0xA);
this->actionFunc = func_809529AC;
return;
block_16:
func_8019F230();
- func_80151938(play, 0x934U);
+ Message_ContinueTextbox(play, 0x934U);
}
```
@@ -495,21 +495,21 @@ So let us rewrite the entire second half as a switch:
```C
switch (play->msgCtx.choiceIndex) {
case 0:
- func_801477B4(play);
+ Message_CloseTextbox(play);
- if (gSaveContext.save.playerData.rupees < 0xA) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < 0xA) {
play_sound(0x4806U);
- func_80151938(play, 0x935U);
+ Message_ContinueTextbox(play, 0x935U);
return;
}
- if (gSaveContext.save.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
+ if (gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
play_sound(0x4806U);
- func_80151938(play, 0x937U);
+ Message_ContinueTextbox(play, 0x937U);
return;
}
func_8019F208();
- Actor_PickUp((Actor *) this, play, 0x35, 90.0f, 10.0f);
+ Actor_OfferGetItem((Actor *) this, play, 0x35, 90.0f, 10.0f);
Rupees_ChangeBy(-0xA);
this->actionFunc = func_809529AC;
return;
@@ -518,7 +518,7 @@ So let us rewrite the entire second half as a switch:
case 1:
default:
func_8019F230();
- func_80151938(play, 0x934U);
+ Message_ContinueTextbox(play, 0x934U);
break;
}
```
@@ -531,17 +531,17 @@ There's a couple of other obvious things here:
```C
switch (play->msgCtx.choiceIndex) {
case 0:
- func_801477B4(play);
+ Message_CloseTextbox(play);
- if (gSaveContext.save.playerData.rupees < 0xA) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < 0xA) {
play_sound(0x4806U);
- func_80151938(play, 0x935U);
- } else if (gSaveContext.save.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
+ Message_ContinueTextbox(play, 0x935U);
+ } else if (gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
play_sound(0x4806U);
- func_80151938(play, 0x937U);
+ Message_ContinueTextbox(play, 0x937U);
} else {
func_8019F208();
- Actor_PickUp((Actor *) this, play, 0x35, 90.0f, 10.0f);
+ Actor_OfferGetItem((Actor *) this, play, 0x35, 90.0f, 10.0f);
Rupees_ChangeBy(-0xA);
this->actionFunc = func_809529AC;
}
@@ -550,7 +550,7 @@ There's a couple of other obvious things here:
case 1:
default:
func_8019F230();
- func_80151938(play, 0x934U);
+ Message_ContinueTextbox(play, 0x934U);
break;
}
```
@@ -588,25 +588,25 @@ block_5:
if (Message_ShouldAdvance(play) == 0) {
return;
}
- func_801477B4(play);
- Actor_PickUp((Actor *) this, play, 0x35, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
+ Message_CloseTextbox(play);
+ Actor_OfferGetItem((Actor *) this, play, 0x35, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
this->actionFunc = func_809529AC;
return;
block_7:
if (Message_ShouldAdvance(play) != 0) {
switch (play->msgCtx.choiceIndex) {
case 0:
- func_801477B4(play);
+ Message_CloseTextbox(play);
- if (gSaveContext.save.playerData.rupees < 0xA) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < 0xA) {
play_sound(0x4806U);
- func_80151938(play, 0x935U);
- } else if (gSaveContext.save.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
+ Message_ContinueTextbox(play, 0x935U);
+ } else if (gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
play_sound(0x4806U);
- func_80151938(play, 0x937U);
+ Message_ContinueTextbox(play, 0x937U);
} else {
func_8019F208();
- Actor_PickUp((Actor *) this, play, 0x35, 90.0f, 10.0f);
+ Actor_OfferGetItem((Actor *) this, play, 0x35, 90.0f, 10.0f);
Rupees_ChangeBy(-0xA);
this->actionFunc = func_809529AC;
}
@@ -615,7 +615,7 @@ block_7:
case 1:
default:
func_8019F230();
- func_80151938(play, 0x934U);
+ Message_ContinueTextbox(play, 0x934U);
break;
}
}
@@ -652,8 +652,8 @@ void func_809527F8(EnMs* this, PlayState* play) {
if (Message_ShouldAdvance(play) == 0) {
return;
}
- func_801477B4(play);
- Actor_PickUp((Actor *) this, play, 0x35, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
+ Message_CloseTextbox(play);
+ Actor_OfferGetItem((Actor *) this, play, 0x35, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
this->actionFunc = func_809529AC;
break;
@@ -661,17 +661,17 @@ void func_809527F8(EnMs* this, PlayState* play) {
if (Message_ShouldAdvance(play) != 0) {
switch (play->msgCtx.choiceIndex) {
case 0:
- func_801477B4(play);
+ Message_CloseTextbox(play);
- if (gSaveContext.save.playerData.rupees < 0xA) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < 0xA) {
play_sound(0x4806U);
- func_80151938(play, 0x935U);
- } else if (gSaveContext.save.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
+ Message_ContinueTextbox(play, 0x935U);
+ } else if (gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
play_sound(0x4806U);
- func_80151938(play, 0x937U);
+ Message_ContinueTextbox(play, 0x937U);
} else {
func_8019F208();
- Actor_PickUp((Actor *) this, play, 0x35, 90.0f, 10.0f);
+ Actor_OfferGetItem((Actor *) this, play, 0x35, 90.0f, 10.0f);
Rupees_ChangeBy(-0xA);
this->actionFunc = func_809529AC;
}
@@ -680,7 +680,7 @@ void func_809527F8(EnMs* this, PlayState* play) {
case 1:
default:
func_8019F230();
- func_80151938(play, 0x934U);
+ Message_ContinueTextbox(play, 0x934U);
break;
}
}
@@ -703,8 +703,8 @@ void func_809527F8(EnMs* this, PlayState* play) {
case 5:
if (Message_ShouldAdvance(play) != 0) {
- func_801477B4(play);
- Actor_PickUp((Actor *) this, play, 0x35, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
+ Message_CloseTextbox(play);
+ Actor_OfferGetItem((Actor *) this, play, 0x35, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
this->actionFunc = func_809529AC;
}
break;
@@ -713,17 +713,17 @@ void func_809527F8(EnMs* this, PlayState* play) {
if (Message_ShouldAdvance(play) != 0) {
switch (play->msgCtx.choiceIndex) {
case 0:
- func_801477B4(play);
+ Message_CloseTextbox(play);
- if (gSaveContext.save.playerData.rupees < 0xA) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < 0xA) {
play_sound(0x4806U);
- func_80151938(play, 0x935U);
- } else if (gSaveContext.save.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
+ Message_ContinueTextbox(play, 0x935U);
+ } else if (gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
play_sound(0x4806U);
- func_80151938(play, 0x937U);
+ Message_ContinueTextbox(play, 0x937U);
} else {
func_8019F208();
- Actor_PickUp((Actor *) this, play, 0x35, 90.0f, 10.0f);
+ Actor_OfferGetItem((Actor *) this, play, 0x35, 90.0f, 10.0f);
Rupees_ChangeBy(-0xA);
this->actionFunc = func_809529AC;
}
@@ -732,7 +732,7 @@ void func_809527F8(EnMs* this, PlayState* play) {
case 1:
default:
func_8019F230();
- func_80151938(play, 0x934U);
+ Message_ContinueTextbox(play, 0x934U);
break;
}
}
diff --git a/docs/tutorial/beginning_decomp.md b/docs/tutorial/beginning_decomp.md
index eadfa9adc..591f12a2b 100644
--- a/docs/tutorial/beginning_decomp.md
+++ b/docs/tutorial/beginning_decomp.md
@@ -27,7 +27,7 @@ void EnRecepgirl_Draw(Actor* thisx, PlayState* play);
// --------------- 4 ---------------
#if 0
-const ActorInit En_Recepgirl_InitVars = {
+ActorInit En_Recepgirl_InitVars = {
ACTOR_EN_RECEPGIRL,
ACTORCAT_NPC,
FLAGS,
@@ -122,8 +122,6 @@ typedef struct EnRecepgirl {
/* 0x02AC */ char unk_2AC[0x8];
} EnRecepgirl; // size = 0x2B4
-extern const ActorInit En_Recepgirl_InitVars;
-
#endif // Z_EN_RECEPGIRL_H
```
@@ -337,7 +335,7 @@ For now, we do not want to consider the data that mips2c has kindly imported for
```C
#if 0
-const ActorInit En_Recepgirl_InitVars = {
+ActorInit En_Recepgirl_InitVars = {
ACTOR_EN_RECEPGIRL,
ACTORCAT_NPC,
FLAGS,
diff --git a/docs/tutorial/data.md b/docs/tutorial/data.md
index 0a19113e4..6884ebb12 100644
--- a/docs/tutorial/data.md
+++ b/docs/tutorial/data.md
@@ -43,7 +43,7 @@ Once we have decompiled enough things to know what the data is, we can import it
```C
#if 0
-const ActorInit En_Recepgirl_InitVars = {
+ActorInit En_Recepgirl_InitVars = {
ACTOR_EN_RECEPGIRL,
ACTORCAT_NPC,
FLAGS,
@@ -99,7 +99,7 @@ endseg
Next remove all the externs, and uncomment their corresponding commented data:
```C
-const ActorInit En_Recepgirl_InitVars = {
+ActorInit En_Recepgirl_InitVars = {
ACTOR_EN_RECEPGIRL,
ACTORCAT_NPC,
FLAGS,
@@ -139,7 +139,7 @@ As we'd expect, of course: we didn't fulfil our promise that they were defined e
For actors which have yet to be decompiled, this is mitigated by use of the file `undefined_syms.txt`, which feeds the linker the raw addresses to use as the symbol definitions. However, we want to replace these segmented addresses with proper object symbols whenever possible. In `En_Recepgirl_InitVars`, we can see that this actor uses the object `OBJECT_BG`:
```c
-const ActorInit En_Recepgirl_InitVars = {
+ActorInit En_Recepgirl_InitVars = {
ACTOR_EN_RECEPGIRL,
ACTORCAT_NPC,
FLAGS,
diff --git a/docs/tutorial/documenting.md b/docs/tutorial/documenting.md
index 2e98e1efd..71f3347e3 100644
--- a/docs/tutorial/documenting.md
+++ b/docs/tutorial/documenting.md
@@ -48,7 +48,7 @@ void func_80C1019C(EnRecepgirl* this, PlayState* play);
void func_80C10290(EnRecepgirl* this);
void func_80C102D4(EnRecepgirl* this, PlayState* play);
-const ActorInit En_Recepgirl_InitVars = {
+ActorInit En_Recepgirl_InitVars = {
ACTOR_EN_RECEPGIRL,
ACTORCAT_NPC,
FLAGS,
@@ -185,7 +185,7 @@ void func_80C102D4(EnRecepgirl* this, PlayState* play) {
if (this->actor.textId == 0x2AD9) {
Flags_SetSwitch(play, this->actor.params);
Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_00AD98, 10.0f);
- if ((gSaveContext.save.weekEventReg[63] & 0x80)) {
+ if ((gSaveContext.save.saveInfo.weekEventReg[63] & 0x80)) {
this->actor.textId = 0x2ADF;
} else {
this->actor.textId = 0x2ADA;
@@ -203,7 +203,7 @@ void func_80C102D4(EnRecepgirl* this, PlayState* play) {
this->actor.textId = 0x2AE0;
}
}
- func_80151938(play, this->actor.textId);
+ Message_ContinueTextbox(play, this->actor.textId);
}
}
@@ -316,7 +316,7 @@ So it is used as an index into the array `D_80C106B0`, and the element with that
As we discussed last time, `D_80C106B0` is an array of [segmented pointers](data.md#segmented-pointers). Since they are in segment `6`, they are in the actor's object file. Which object? The InitVars tell us: namely,
```C
-const ActorInit En_Recepgirl_InitVars = {
+ActorInit En_Recepgirl_InitVars = {
ACTOR_EN_RECEPGIRL,
ACTORCAT_NPC,
FLAGS,
@@ -327,17 +327,13 @@ the fourth element is the object (it is actually an enum, but the file itself ha
## Z64Utils
-The latest release of Z64Utils can be downloaded from [https://github.com/Random06457/Z64Utils/releases]. To use it with MM, you also need a json file to fill in the file names: the latest version can be obtained from [https://github.com/Random06457/Z64Utils-Config]. It should work on Wine. Some graphics cards don't love it, but the 3D graphical part is only required for skeleton and animations.
+The latest release of Z64Utils can be downloaded from [https://github.com/zeldaret/Z64Utils/releases]. It should work on Wine. Some graphics cards don't love it, but the 3D graphical part is only required for skeleton and animations.
Having downloaded and unzipped it, open the baserom file. This will populate the main window with a list:

-Search for the object file, right-click and select "Open in Object Analyzer". It will ask you to choose a segment: this is the segment that the file is put on, and allows Z64Utils to resolve the segmented addresses it references into symbols. The json already knows it should be segment `6`, so just click okay. This will open this window:
-
-
-
-Go to "Analysis -> Find Dlists" and press OK (the defaults are usually fine). This will automatically search for displaylists in the object, which are a sufficiently distinctive format to be easy to find. We want to see the other stuff in the object too, so also do "Analysis -> Analyze Dlists". This will populate the window with even more stuff:
+Search for the object file, then either double-click it or right-click it and select "Open in Object Analyzer" to open it. It will ask you to choose a segment: this is the segment that the file is put on, and allows Z64Utils to resolve the segmented addresses it references into symbols. The json already knows it should be segment `6`, so just click okay. This will open this window; displaylists and other data will automatically be analyzed when the object is opened:

@@ -347,7 +343,7 @@ We will talk about what all these types of data are next time, but for now, all
static void* D_80C106B0[4] = { object_bg_Tex_00F8F0, object_bg_Tex_00FCF0, object_bg_Tex_0100F0, object_bg_Tex_00FCF0 };
```
-actually are. We know they are set on segment 8, so we need to find where the skeleton uses them. We know from `object_bg_Skel_011B60` that this is at `0x06011B60`, so scroll down to it, right-click on it, and choose "Open in Skeleton Viewer". Pick an animation that we know it uses (sometimes Z64Utils misidentifies other things for animations), such as `object_bg_Anim_000968`, and you will get this error:
+actually are. We know they are set on segment 8, so we need to find where the skeleton uses them. We know from `object_bg_Skel_011B60` that this is at `0x06011B60`, so scroll down to it and either double-click on it or right-click on it and choose "Open in Skeleton Viewer". Pick an animation that we know it uses (sometimes Z64Utils misidentifies other things for animations), such as `object_bg_Anim_000968`, and you will get this error:

@@ -447,7 +443,7 @@ void EnRecepgirl_UnkLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
}
```
-It is used to do a rotation of whatever limb `5` is. (The `+=` is because `rot->x` is the base rotation of the limb, and we have to add the same thing to it every frame to keep the angle changed and constant.) We can use Z64Utils to : setting segment `8` to one of what we know now are the eye textures, we can view the model in the skeleton viewer. The limb numbers in the object are one smaller than those in the actor (the root limb is only a concept for the code, not the object), so we find limb 4:
+It is used to do a rotation of whatever limb `5` is. (The `+=` is because `rot->x` is the base rotation of the limb, and we have to add the same thing to it every frame to keep the angle changed and constant.) We can use Z64Utils to figure this out: setting segment `8` to one of what we know now are the eye textures, we can view the model in the skeleton viewer. The limb numbers in the object are one smaller than those in the actor (the root limb is only a concept for the code, not the object), so we find limb 4:

@@ -520,7 +516,7 @@ void func_80C102D4(EnRecepgirl* this, PlayState* play) {
if (this->actor.textId == 0x2AD9) { // "Welcome..."
Flags_SetSwitch(play, this->actor.params);
Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_00AD98, 10.0f);
- if (gSaveContext.save.weekEventReg[63] & 0x80) { // showed Couple's Mask to meeting
+ if (gSaveContext.save.saveInfo.weekEventReg[63] & 0x80) { // showed Couple's Mask to meeting
this->actor.textId = 0x2ADF; // Mayor's office is on the left (meeting ended)
} else {
this->actor.textId = 0x2ADA; // Mayor's office is on the left (meeting ongoing)
@@ -540,7 +536,7 @@ void func_80C102D4(EnRecepgirl* this, PlayState* play) {
this->actor.textId = 0x2AE0; // drawing room on the right, don't go in without an appointment
}
}
- func_80151938(play, this->actor.textId);
+ Message_ContinueTextbox(play, this->actor.textId);
}
}
```
diff --git a/docs/tutorial/images/z64utils_object_analyzer.png b/docs/tutorial/images/z64utils_object_analyzer.png
deleted file mode 100644
index 7a6adec3d..000000000
Binary files a/docs/tutorial/images/z64utils_object_analyzer.png and /dev/null differ
diff --git a/docs/tutorial/introduction.md b/docs/tutorial/introduction.md
index 2115faace..aba8beede 100644
--- a/docs/tutorial/introduction.md
+++ b/docs/tutorial/introduction.md
@@ -27,7 +27,7 @@ glabel func_809529AC
/* 0003D8 809529F8 C484009C */ lwc1 $f4, 0x9c($a0)
/* 0003DC 809529FC 8C870098 */ lw $a3, 0x98($a0)
/* 0003E0 80952A00 24060035 */ addiu $a2, $zero, 0x35
-/* 0003E4 80952A04 0C02E287 */ jal Actor_PickUp
+/* 0003E4 80952A04 0C02E287 */ jal Actor_OfferGetItem
/* 0003E8 80952A08 E7A40010 */ swc1 $f4, 0x10($sp)
.L80952A0C:
/* 0003EC 80952A0C 8FBF001C */ lw $ra, 0x1c($sp)
@@ -46,7 +46,7 @@ void func_809529AC(EnMs* this, PlayState* play) {
func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, 0);
this->actionFunc = func_80952A1C;
} else {
- Actor_PickUp(&this->actor, play, 0x35, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
+ Actor_OfferGetItem(&this->actor, play, 0x35, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
}
}
```
diff --git a/docs/tutorial/object_decomp.md b/docs/tutorial/object_decomp.md
index 90ed70405..2406b715d 100644
--- a/docs/tutorial/object_decomp.md
+++ b/docs/tutorial/object_decomp.md
@@ -111,7 +111,7 @@ If in doubt, look at completed objects in the repo, and if still in doubt, ask.
We are very fortunate that several nice tools have been written recently that are excellent for documenting asset files:
-- [Z64Utils](https://github.com/Random06457/Z64Utils/releases), for looking at displaylists, textures they reference, the skeleton, animations, etc.
+- [Z64Utils](https://github.com/zeldaret/Z64Utils/releases), for looking at displaylists, textures they reference, the skeleton, animations, etc.
- [Texture64](https://github.com/queueRAM/Texture64/releases), for looking at textures in all the common N64 formats (needed since Z64Utils cannot interpret textures not explicitly referenced in displaylists currently)
## Building and investigative modding
diff --git a/docs/tutorial/object_decomp_example.md b/docs/tutorial/object_decomp_example.md
index f4030be5b..829dbb917 100644
--- a/docs/tutorial/object_decomp_example.md
+++ b/docs/tutorial/object_decomp_example.md
@@ -6,11 +6,11 @@ Let's take a look at `object_dns`, which is a pretty typical NPC object. It's us
## Step 1: Naming the skeleton and limbs
-We already went through the steps of opening an object file in Z64Utils in the [documenting step](documenting.md#z64utils), but we'll do it in more detail here. First, search for the object file, then right-click and select "Open in Object Analyzer". It will ask you to choose a segment: this is the segment that the file is put on, and allows Z64Utils to resolve the segmented addresses it references into symbols. The json already knows it should be segment 6, so just click OK.
+We already went through the steps of opening an object file in Z64Utils in the [documenting step](documenting.md#z64utils), but we'll do it in more detail here. First, search for the object file, then either double-click on it or right-click it and select "Open in Object Analyzer". It will ask you to choose a segment: this is the segment that the file is put on, and allows Z64Utils to resolve the segmented addresses it references into symbols. The json already knows it should be segment 6, so just click OK.

-In the resulting window, go to "Analysis -> Find Dlists" and press OK (the defaults are usually fine). This will only find display lists, so to find everything else in the obect, do "Analysis -> Analyze Dlists". We're looking for the skeleton, so scroll down to the SkeletonHeader, right-click it, and select "Open in Skeleton Viewer":
+In the resulting window, you'll see displaylists, textures, and other assets. We're looking for the skeleton, so scroll down to the SkeletonHeader, then either double-click on it or right-click it and select "Open in Skeleton Viewer":

@@ -186,7 +186,7 @@ For some actors, there may be a few other things left to name that are directly
gSPDisplayList(POLY_OPA_DISP++, &D_06002C48);
```
-In Z64Utils, scroll to find this display list, then right-click and select "Open in Dlist Viewer":
+In Z64Utils, scroll to find this display list, then either double-click it or right-click it and select "Open in Dlist Viewer":

diff --git a/docs/tutorial/other_functions.md b/docs/tutorial/other_functions.md
index 1c8ba6b5b..f73902ca5 100644
--- a/docs/tutorial/other_functions.md
+++ b/docs/tutorial/other_functions.md
@@ -334,7 +334,7 @@ void func_80C102D4(EnRecepgirl* this, PlayState* play) {
this->actor.textId = 0x2AE0;
}
}
- func_80151938(play, this->actor.textId);
+ Message_ContinueTextbox(play, this->actor.textId);
}
}
```
@@ -392,7 +392,7 @@ void func_80C102D4(EnRecepgirl* this, PlayState* play) {
this->actor.textId = 0x2AE0;
}
}
- func_80151938(play, this->actor.textId);
+ Message_ContinueTextbox(play, this->actor.textId);
}
}
```
@@ -404,7 +404,7 @@ There remains one thing we need to fix before trying to compile it, namely `*(&g
/* 0x0F5C */ u32 regionsVisited; // "area_arrival"
```
-so it's somewhere in `weekEventReg`. `0xF37 - 0xEF8 = 0x3F = 63`, and it's a byte array, so the access is actually `gSaveContext.save.weekEventReg[63] & 0x80`. Now it will compile. We also don't use `!= 0` for flag comparisons: just `if (gSaveContext.save.weekEventReg[63] & 0x80)` will do.
+so it's somewhere in `weekEventReg`. `0xF37 - 0xEF8 = 0x3F = 63`, and it's a byte array, so the access is actually `gSaveContext.save.saveInfo.weekEventReg[63] & 0x80`. Now it will compile. We also don't use `!= 0` for flag comparisons: just `if (gSaveContext.save.saveInfo.weekEventReg[63] & 0x80)` will do.
Running `./diff.py -mwo3 func_80C102D4` and scrolling down, we discover that this doesn't match!
diff --git a/format.py b/format.py
index 5b3cd3158..5e2c29feb 100755
--- a/format.py
+++ b/format.py
@@ -52,7 +52,7 @@ def get_tidy_version(tidy_executable: str):
CLANG_FORMAT = get_clang_executable([f"clang-format-{CLANG_VER}"])
if CLANG_FORMAT is None:
- sys.exit(f"Error: clang-format-{CLANG_VER} found")
+ sys.exit(f"Error: clang-format-{CLANG_VER} not found")
CLANG_TIDY = get_clang_executable([f"clang-tidy-{CLANG_VER}", "clang-tidy"])
if CLANG_TIDY is None:
diff --git a/include/PR/gbi.h b/include/PR/gbi.h
index 632ca3caf..3ba8748b0 100644
--- a/include/PR/gbi.h
+++ b/include/PR/gbi.h
@@ -2599,11 +2599,11 @@ _DW({ \
gsSPLoadUcodeEx((uc_start), (uc_dstart), SP_UCODE_DATA_SIZE)
#define gSPLoadUcodeL(pkt, ucode) \
- gSPLoadUcode((pkt), OS_K0_TO_PHYSICAL(#ucode##TextStart), \
- OS_K0_TO_PHYSICAL(#ucode##DataStart))
+ gSPLoadUcode((pkt), OS_K0_TO_PHYSICAL(&ucode##TextStart), \
+ OS_K0_TO_PHYSICAL(&ucode##DataStart))
#define gsSPLoadUcodeL(ucode) \
- gsSPLoadUcode(OS_K0_TO_PHYSICAL(#ucode##TextStart), \
- OS_K0_TO_PHYSICAL(#ucode##DataStart))
+ gsSPLoadUcode(OS_K0_TO_PHYSICAL(&ucode##TextStart), \
+ OS_K0_TO_PHYSICAL(&ucode##DataStart))
#endif
#ifdef F3DEX_GBI_2
@@ -4082,7 +4082,7 @@ _DW({ \
#define gDPLoadTextureTile(pkt, timg, fmt, siz, width, height, \
uls, ult, lrs, lrt, pal, \
cms, cmt, masks, maskt, shifts, shiftt) \
-{ \
+_DW({ \
gDPSetTextureImage(pkt, fmt, siz, width, timg); \
gDPSetTile(pkt, fmt, siz, \
(((((lrs)-(uls)+1) * siz##_TILE_BYTES)+7)>>3), 0, \
@@ -4104,7 +4104,7 @@ _DW({ \
(ult)<>3), tmem, \
@@ -4154,7 +4154,7 @@ _DW({ \
(ult)<= 201112L) /* C11 */
+#define ALIGNOF(x) _Alignof(x)
+#else /* __GNUC__ */
+#define ALIGNOF(x) __alignof__(x)
+#endif
+
+#define ALIGN_MASK(n) (~((n) - 1))
+
+#define ALIGNOF_MASK(x) ALIGN_MASK(ALIGNOF(x))
+
+#endif
diff --git a/include/audiothread_cmd.h b/include/audiothread_cmd.h
new file mode 100644
index 000000000..c9e6703dc
--- /dev/null
+++ b/include/audiothread_cmd.h
@@ -0,0 +1,644 @@
+#ifndef AUDIOTHREAD_CMD_H
+#define AUDIOTHREAD_CMD_H
+
+/**
+ * Audio thread commands to safely transfer information/requests/data
+ * from the external graph thread to the internal audio thread
+ */
+
+typedef enum {
+ // Channel Commands
+ /* 0x00 */ AUDIOCMD_OP_NOOP,
+ /* 0x01 */ AUDIOCMD_OP_CHANNEL_SET_VOL_SCALE,
+ /* 0x02 */ AUDIOCMD_OP_CHANNEL_SET_VOL,
+ /* 0x03 */ AUDIOCMD_OP_CHANNEL_SET_PAN,
+ /* 0x04 */ AUDIOCMD_OP_CHANNEL_SET_FREQ_SCALE,
+ /* 0x05 */ AUDIOCMD_OP_CHANNEL_SET_REVERB_VOLUME,
+ /* 0x06 */ AUDIOCMD_OP_CHANNEL_SET_IO,
+ /* 0x07 */ AUDIOCMD_OP_CHANNEL_SET_PAN_WEIGHT,
+ /* 0x08 */ AUDIOCMD_OP_CHANNEL_SET_MUTE,
+ /* 0x09 */ AUDIOCMD_OP_CHANNEL_SET_MUTE_FLAGS,
+ /* 0x0A */ AUDIOCMD_OP_CHANNEL_SET_VIBRATO_DEPTH,
+ /* 0x0B */ AUDIOCMD_OP_CHANNEL_SET_VIBRATO_RATE,
+ /* 0x0C */ AUDIOCMD_OP_CHANNEL_SET_COMB_FILTER_SIZE,
+ /* 0x0D */ AUDIOCMD_OP_CHANNEL_SET_COMB_FILTER_GAIN,
+ /* 0x0E */ AUDIOCMD_OP_CHANNEL_SET_STEREO,
+ /* 0x0F */ AUDIOCMD_OP_CHANNEL_SET_SET_START_POS,
+ /* 0x10 */ AUDIOCMD_OP_CHANNEL_SET_SFX_STATE,
+ /* 0x11 */ AUDIOCMD_OP_CHANNEL_SET_REVERB_INDEX,
+ /* 0x12 */ AUDIOCMD_OP_CHANNEL_SET_SURROUND_EFFECT_INDEX,
+ /* 0x13 */ AUDIOCMD_OP_CHANNEL_SET_FILTER,
+ /* 0x14 */ AUDIOCMD_OP_CHANNEL_SET_GAIN,
+ // SeqPlayer Commands
+ /* 0x41 */ AUDIOCMD_OP_SEQPLAYER_FADE_VOLUME_SCALE = 0x41,
+ /* 0x46 */ AUDIOCMD_OP_SEQPLAYER_SET_IO = 0x46,
+ /* 0x47 */ AUDIOCMD_OP_SEQPLAYER_SET_TEMPO,
+ /* 0x48 */ AUDIOCMD_OP_SEQPLAYER_SET_TRANSPOSITION,
+ /* 0x49 */ AUDIOCMD_OP_SEQPLAYER_CHANGE_TEMPO,
+ /* 0x4A */ AUDIOCMD_OP_SEQPLAYER_FADE_TO_SET_VOLUME,
+ /* 0x4B */ AUDIOCMD_OP_SEQPLAYER_FADE_TO_SCALED_VOLUME,
+ /* 0x4C */ AUDIOCMD_OP_SEQPLAYER_RESET_VOLUME,
+ /* 0x4D */ AUDIOCMD_OP_SEQPLAYER_SET_BEND,
+ /* 0x4E */ AUDIOCMD_OP_SEQPLAYER_CHANGE_TEMPO_TICKS,
+ // Global Commands
+ /* 0x81 */ AUDIOCMD_OP_GLOBAL_SYNC_LOAD_SEQ_PARTS = 0x81,
+ /* 0x82 */ AUDIOCMD_OP_GLOBAL_INIT_SEQPLAYER,
+ /* 0x83 */ AUDIOCMD_OP_GLOBAL_DISABLE_SEQPLAYER,
+ /* 0x85 */ AUDIOCMD_OP_GLOBAL_INIT_SEQPLAYER_SKIP_TICKS = 0x85,
+ /* 0x90 */ AUDIOCMD_OP_GLOBAL_SET_CHANNEL_MASK = 0x90,
+ /* 0xE0 */ AUDIOCMD_OP_GLOBAL_SET_DRUM_FONT = 0xE0,
+ /* 0xE1 */ AUDIOCMD_OP_GLOBAL_SET_SFX_FONT,
+ /* 0xE2 */ AUDIOCMD_OP_GLOBAL_SET_INSTRUMENT_FONT,
+ /* 0xE3 */ AUDIOCMD_OP_GLOBAL_POP_PERSISTENT_CACHE,
+ /* 0xE4 */ AUDIOCMD_OP_GLOBAL_SET_CUSTOM_FUNCTION, // TODO: check
+ /* 0xE5 */ AUDIOCMD_OP_GLOBAL_E5, // TODO: check
+ /* 0xE6 */ AUDIOCMD_OP_GLOBAL_SET_REVERB_DATA,
+ /* 0xF0 */ AUDIOCMD_OP_GLOBAL_SET_SOUND_MODE = 0xF0,
+ /* 0xF1 */ AUDIOCMD_OP_GLOBAL_MUTE,
+ /* 0xF2 */ AUDIOCMD_OP_GLOBAL_UNMUTE,
+ /* 0xF3 */ AUDIOCMD_OP_GLOBAL_SYNC_LOAD_INSTRUMENT,
+ /* 0xF4 */ AUDIOCMD_OP_GLOBAL_ASYNC_LOAD_SAMPLE_BANK,
+ /* 0xF5 */ AUDIOCMD_OP_GLOBAL_ASYNC_LOAD_FONT,
+ /* 0xF6 */ AUDIOCMD_OP_GLOBAL_DISCARD_SEQ_FONTS,
+ /* 0xF8 */ AUDIOCMD_OP_GLOBAL_STOP_AUDIOCMDS = 0xF8,
+ /* 0xF9 */ AUDIOCMD_OP_GLOBAL_RESET_AUDIO_HEAP,
+ /* 0xFA */ AUDIOCMD_OP_GLOBAL_NOOP_1, // used but no code exists for it
+ /* 0xFB */ AUDIOCMD_OP_GLOBAL_SET_CUSTOM_UPDATE_FUNCTION,
+ /* 0xFC */ AUDIOCMD_OP_GLOBAL_ASYNC_LOAD_SEQ,
+ /* 0xFD */ AUDIOCMD_OP_GLOBAL_NOOP_2, // used but no code exists for it
+ /* 0xFE */ AUDIOCMD_OP_GLOBAL_DISABLE_ALL_SEQPLAYERS
+} AudioThreadCmdOp;
+
+#define AUDIO_MK_CMD(b0, b1, b2, b3) (_SHIFTL(b0, 24, 8) | _SHIFTL(b1, 16, 8) | _SHIFTL(b2, 8, 8) | _SHIFTL(b3, 0, 8))
+
+#define AUDIOCMD_ALL_SEQPLAYERS 0xFF
+// Pass to a AUDIOCMD_CHANNEL_ command in place of a channelIndex to try and apply to all channels.
+// Then uses `threadCmdChannelMask` to determine which channels to apply the command to.
+#define AUDIOCMD_ALL_CHANNELS 0xFF
+
+// ==== Audio Thread Channel Commands ====
+
+/**
+ * Set the volumeScale on a given channel
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param channelIndex the index of the channel to modify
+ * @param volumeScale (f32) the volume scale for the sequence. No change in volume is 1.0f
+ */
+#define AUDIOCMD_CHANNEL_SET_VOL_SCALE(seqPlayerIndex, channelIndex, volumeScale) \
+ AudioThread_QueueCmdF32(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_VOL_SCALE, seqPlayerIndex, channelIndex, 0), \
+ volumeScale)
+
+/**
+ * Set the volume on a given channel
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param channelIndex the index of the channel to modify
+ * @param volume (f32) the target volume for the sequence. Default volume is 1.0f
+ */
+#define AUDIOCMD_CHANNEL_SET_VOL(seqPlayerIndex, channelIndex, volume) \
+ AudioThread_QueueCmdF32(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_VOL, seqPlayerIndex, channelIndex, 0), volume)
+
+/**
+ * Set the pan
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param channelIndex the index of the channel to modify
+ * @param pan (s8) the pan applied to the channel
+ */
+#define AUDIOCMD_CHANNEL_SET_PAN(seqPlayerIndex, channelIndex, pan) \
+ AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_PAN, seqPlayerIndex, channelIndex, 0), pan)
+
+/**
+ * Set frequency scale
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param channelIndex the index of the channel to modify
+ * @param freqScale (f32) the scaling factor to shift the pitch.
+ */
+#define AUDIOCMD_CHANNEL_SET_FREQ_SCALE(seqPlayerIndex, channelIndex, freqScale) \
+ AudioThread_QueueCmdF32(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_FREQ_SCALE, seqPlayerIndex, channelIndex, 0), \
+ freqScale)
+
+/**
+ * Set reverb volume
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param channelIndex the index of the channel to modify
+ * @param reverbVolume (s8) volume to set the reverb to (dry/wet mix)
+ */
+#define AUDIOCMD_CHANNEL_SET_REVERB_VOLUME(seqPlayerIndex, channelIndex, reverbVolume) \
+ AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_REVERB_VOLUME, seqPlayerIndex, channelIndex, 0), \
+ reverbVolume)
+
+/**
+ * Write a value that can be read as input directly by the sequence itself. This will be set to the channel
+ * ioPort, which will only affect a single channel
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to write the input to
+ * @param channelIndex the index of the channel to write the input to
+ * @param ioPort the index of the array to store the input-output value
+ * @param ioData (s8) the value that's written to the input-output array
+ */
+#define AUDIOCMD_CHANNEL_SET_IO(seqPlayerIndex, channelIndex, ioPort, ioData) \
+ AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_IO, seqPlayerIndex, channelIndex, ioPort), ioData)
+
+/**
+ * Set the proportion of pan that comes from the channel
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param channelIndex the index of the channel to modify
+ * @param panChannelWeight (u8) proportion of pan that comes from the channel.
+ * Set to 0 for layer-only, and 128 for channel-only.
+ */
+#define AUDIOCMD_CHANNEL_SET_PAN_WEIGHT(seqPlayerIndex, channelIndex, panChannelWeight) \
+ AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_PAN_WEIGHT, seqPlayerIndex, channelIndex, 0), \
+ panChannelWeight)
+
+/**
+ * Mute a specified channel. How a muted channel behaves will depend on channel mute flags
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param channelIndex the index of the channel to modify
+ * @param muted (s8) set true to mute
+ */
+#define AUDIOCMD_CHANNEL_SET_MUTE(seqPlayerIndex, channelIndex, muted) \
+ AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_MUTE, seqPlayerIndex, channelIndex, 0), muted)
+
+/**
+ * Set the muteFlags for a specified channel
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param channelIndex the index of the channel to modify
+ * @param muteFlags (s8) Affected how a muted channel behaves. See `MUTE_BEHAVIOR_` macros
+ */
+#define AUDIOCMD_CHANNEL_SET_MUTE_FLAGS(seqPlayerIndex, channelIndex, muteFlags) \
+ AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_MUTE_FLAGS, seqPlayerIndex, channelIndex, 0), muteFlags)
+
+/**
+ * Set the vibrato depth (magnitude/amplitude/extent)
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param channelIndex the index of the channel to modify
+ * @param vibratoDepthTarget (s8) the vibrato depth scaled down by 1/8th
+ */
+#define AUDIOCMD_CHANNEL_SET_VIBRATO_DEPTH(seqPlayerIndex, channelIndex, vibratoDepthTarget) \
+ AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_VIBRATO_DEPTH, seqPlayerIndex, channelIndex, 0), \
+ vibratoDepthTarget)
+
+/**
+ * Set the vibrato rate (freq/pitch)
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param channelIndex the index of the channel to modify
+ * @param vibratoRateTarget (s8) the vibrato rate scaled down by 1/32nd
+ */
+#define AUDIOCMD_CHANNEL_SET_VIBRATO_RATE(seqPlayerIndex, channelIndex, vibratoRateTarget) \
+ AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_VIBRATO_RATE, seqPlayerIndex, channelIndex, 0), \
+ vibratoRateTarget)
+
+/**
+ * Set the comb filter size
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param channelIndex the index of the channel to modify
+ * @param combFilterSize (s8) delay number of sample bytes to offset and add back to itself
+ */
+#define AUDIOCMD_CHANNEL_SET_COMB_FILTER_SIZE(seqPlayerIndex, channelIndex, combFilterSize) \
+ AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_COMB_FILTER_SIZE, seqPlayerIndex, channelIndex, 0), \
+ combFilterSize)
+
+/**
+ * Set the comb filter gain
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param channelIndex the index of the channel to modify
+ * @param combFilterGain (u16) strength of the signal added back to itself
+ */
+#define AUDIOCMD_CHANNEL_SET_COMB_FILTER_GAIN(seqPlayerIndex, channelIndex, combFilterGain) \
+ AudioThread_QueueCmdU16(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_COMB_FILTER_GAIN, seqPlayerIndex, channelIndex, 0), \
+ combFilterGain)
+
+/**
+ * Set the stereo bits
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param channelIndex the index of the channel to modify
+ * @param stereoData (s8) bit-packed stereo information. See `StereoData`
+ */
+#define AUDIOCMD_CHANNEL_SET_STEREO(seqPlayerIndex, channelIndex, stereoData) \
+ AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_STEREO, seqPlayerIndex, channelIndex, 0), stereoData)
+
+/**
+ * Set the start position of a sample.
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param channelIndex the index of the seqPlayer to modify
+ * @param startSamplePos
+ */
+#define AUDIOCMD_CHANNEL_SET_SET_START_POS(seqPlayerIndex, channelIndex, startSamplePos) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_SET_START_POS, seqPlayerIndex, channelIndex, 0), \
+ startSamplePos)
+
+/**
+ * Set the address of the sfxState to read from.
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param channelIndex the index of the seqPlayer to modify
+ * @param sfxState
+ */
+#define AUDIOCMD_CHANNEL_SET_SFX_STATE(seqPlayerIndex, channelIndex, sfxState) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_SFX_STATE, seqPlayerIndex, channelIndex, 0), sfxState)
+
+/**
+ * Set the reverb index.
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param channelIndex the index of the seqPlayer to modify
+ * @param reverbIndex
+ */
+#define AUDIOCMD_CHANNEL_SET_REVERB_INDEX(seqPlayerIndex, channelIndex, reverbIndex) \
+ AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_REVERB_INDEX, seqPlayerIndex, channelIndex, 0), \
+ reverbIndex)
+
+/**
+ * Set the surround effect index.
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param channelIndex the index of the seqPlayer to modify
+ * @param surroundEffectIndex
+ */
+#define AUDIOCMD_CHANNEL_SET_SURROUND_EFFECT_INDEX(seqPlayerIndex, channelIndex, surroundEffectIndex) \
+ AudioThread_QueueCmdS8( \
+ AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_SURROUND_EFFECT_INDEX, seqPlayerIndex, channelIndex, 0), \
+ surroundEffectIndex)
+
+/**
+ * Set a filter.
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param channelIndex the index of the seqPlayer to modify
+ * @param filterCutoff
+ * @param filter
+ */
+#define AUDIOCMD_CHANNEL_SET_FILTER(seqPlayerIndex, channelIndex, filterCutoff, filter) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_FILTER, seqPlayerIndex, channelIndex, filterCutoff), \
+ filter)
+
+/**
+ * Set the gain.
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param channelIndex the index of the seqPlayer to modify
+ * @param gain
+ */
+#define AUDIOCMD_CHANNEL_SET_GAIN(seqPlayerIndex, channelIndex, gain) \
+ AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_CHANNEL_SET_GAIN, seqPlayerIndex, channelIndex, 0), gain)
+
+// ==== Audio Thread SeqPlayer Commands ====
+
+/**
+ * Set the fade volume scale
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param fadeVolumeScale (f32) multiplicative scaling factor to apply to volume
+ */
+#define AUDIOCMD_SEQPLAYER_FADE_VOLUME_SCALE(seqPlayerIndex, fadeVolumeScale) \
+ AudioThread_QueueCmdF32(AUDIO_MK_CMD(AUDIOCMD_OP_SEQPLAYER_FADE_VOLUME_SCALE, seqPlayerIndex, 0, 0), \
+ fadeVolumeScale)
+
+/**
+ * Write a value that can be read as input directly by the sequence itself. This will be set to the global
+ * ioPort, which can affect the entire sequence
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to write the input to
+ * @param ioPort the index of the array to store the input-output value
+ * @param ioData (s8) the value that's written to the input-output array
+ */
+#define AUDIOCMD_SEQPLAYER_SET_IO(seqPlayerIndex, ioPort, ioData) \
+ AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_SEQPLAYER_SET_IO, seqPlayerIndex, 0, ioPort), ioData)
+
+/**
+ * Set the tempo (bpm) of a sequence on a given seqPlayer
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param tempo (s32) the tempo for the sequence, in bpm
+ */
+#define AUDIOCMD_SEQPLAYER_SET_TEMPO(seqPlayerIndex, tempo) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_SEQPLAYER_SET_TEMPO, seqPlayerIndex, 0, 0), tempo)
+
+/**
+ * Set the transposition
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param transposition (s8) the number of semitones to increase or decrease by for all notes on the seqPlayer
+ */
+#define AUDIOCMD_SEQPLAYER_SET_TRANSPOSITION(seqPlayerIndex, transposition) \
+ AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_SEQPLAYER_SET_TRANSPOSITION, seqPlayerIndex, 0, 0), transposition)
+
+/**
+ * Set tempoChange in bpm
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param tempoChange (s32) difference in tempo to change, in bpm
+ */
+#define AUDIOCMD_SEQPLAYER_CHANGE_TEMPO(seqPlayerIndex, tempoChange) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_SEQPLAYER_CHANGE_TEMPO, seqPlayerIndex, 0, 0), tempoChange)
+
+/**
+ * Set tempoChange in ticks per minute
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param tempoChange (s32) difference in tempo to change, in ticks per minute
+ */
+#define AUDIOCMD_SEQPLAYER_CHANGE_TEMPO_TICKS(seqPlayerIndex, tempoChange) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_SEQPLAYER_CHANGE_TEMPO_TICKS, seqPlayerIndex, 0, 0), tempoChange)
+
+/**
+ * Fade the volume to the target volume requested in the command
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param fadeVolume target volume to fade to
+ * @param fadeTimer (s32) number of ticks to fade to `fadeVolume`
+ */
+#define AUDIOCMD_SEQPLAYER_FADE_TO_SET_VOLUME(seqPlayerIndex, fadeVolume, fadeTimer) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_SEQPLAYER_FADE_TO_SET_VOLUME, seqPlayerIndex, fadeVolume, 0), \
+ fadeTimer)
+
+/**
+ * Fade the volume to the current volume scaled by a scale factor
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param fadeVolumeScale scaling factor to apply to volume to get the targetVolume
+ * @param fadeTimer (s32) number of ticks to fade to `targetVolume`
+ */
+#define AUDIOCMD_SEQPLAYER_FADE_TO_SCALED_VOLUME(seqPlayerIndex, fadeVolumeScale, fadeTimer) \
+ AudioThread_QueueCmdS32( \
+ AUDIO_MK_CMD(AUDIOCMD_OP_SEQPLAYER_FADE_TO_SCALED_VOLUME, seqPlayerIndex, fadeVolumeScale, 0), fadeTimer)
+
+/**
+ * Reset to the default volume of the seqPlayer
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param fadeTimer (s32) number of ticks to fade the sequence back to its default volume
+ */
+#define AUDIOCMD_SEQPLAYER_RESET_VOLUME(seqPlayerIndex, fadeTimer) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_SEQPLAYER_RESET_VOLUME, seqPlayerIndex, 0, 0), fadeTimer)
+
+/**
+ * Set the bend
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param bend (f32) ratio relative to 1.0f to scale channel frequencies by
+ */
+#define AUDIOCMD_SEQPLAYER_SET_BEND(seqPlayerIndex, bend) \
+ AudioThread_QueueCmdF32(AUDIO_MK_CMD(AUDIOCMD_OP_SEQPLAYER_SET_BEND, seqPlayerIndex, 0, 0), bend)
+
+// ==== Audio Thread Global Commands ====
+
+/**
+ * Synchronously load a sequence in parts
+ *
+ * @param seqId the id of the sequence to load, see `SeqId`
+ * @param flags set `& 1` to load the sequence, set `& 2` to load the soundfonts
+ * @param data
+ */
+#define AUDIOCMD_GLOBAL_SYNC_LOAD_SEQ_PARTS(seqId, flags, data) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_SYNC_LOAD_SEQ_PARTS, 0, seqId, flags), data)
+
+/**
+ * Synchronously initialize a sequence player
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param seqId the id of the sequence to play, see `SeqId`
+ * @param fadeInTimer (s32) number of ticks to fade in the sequence to the requested volume
+ */
+#define AUDIOCMD_GLOBAL_INIT_SEQPLAYER(seqPlayerIndex, seqId, fadeInTimer) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_INIT_SEQPLAYER, seqPlayerIndex, seqId, 0), fadeInTimer)
+
+/**
+ * Disable a sequence player
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param fadeOutTimer (s32) number of ticks to fade out the sequence
+ */
+#define AUDIOCMD_GLOBAL_DISABLE_SEQPLAYER(seqPlayerIndex, fadeOutTimer) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_DISABLE_SEQPLAYER, seqPlayerIndex, 0, 0), fadeOutTimer)
+
+/**
+ * Synchronously initialize a sequence player and skip ticks,
+ * allowing the sequence to start somewhere other than the beginning of the sequences
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param seqId the id of the sequence to play, see `SeqId`
+ * @param skipTicks (s32) number of ticks to skip before starting the sequence
+ */
+#define AUDIOCMD_GLOBAL_INIT_SEQPLAYER_SKIP_TICKS(seqPlayerIndex, seqId, skipTicks) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_INIT_SEQPLAYER_SKIP_TICKS, seqPlayerIndex, seqId, 0), \
+ skipTicks)
+
+/**
+ * When processing an audio thread channel command on all channels, set which channels to process
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param threadCmdChannelMask (u16) bitfield for 16 channels. Turn bit on to allow audio thread commands of type
+ * "Channel" to process that channel with `AUDIOCMD_ALL_CHANNELS` set.
+ */
+#define AUDIOCMD_GLOBAL_SET_CHANNEL_MASK(seqPlayerIndex, threadCmdChannelMask) \
+ AudioThread_QueueCmdU16(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_SET_CHANNEL_MASK, seqPlayerIndex, 0, 0), \
+ threadCmdChannelMask)
+
+/**
+ * Set a drum ptr within a soundfont
+ *
+ * @param fontId the id of the soundfont to set the drum in
+ * @param drumId the id of the drum to set
+ * @param drumPtr (s32) the ptr to the `Drum` struct
+ */
+#define AUDIOCMD_GLOBAL_SET_DRUM_FONT(fontId, drumId, drumPtr) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_SET_DRUM_FONT, 0, fontId, drumId), drumPtr)
+
+/**
+ * Set a soundeffect ptr within a soundfont
+ *
+ * @param fontId the id of the soundfont to set the sound effect in
+ * @param soundEffectId the id of the sound effect to set
+ * @param soundEffectPtr (s32) the ptr to the `SoundEffect` struct
+ */
+#define AUDIOCMD_GLOBAL_SET_SFX_FONT(fontId, soundEffectId, soundEffectPtr) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_SET_SFX_FONT, 0, fontId, soundEffectId), soundEffectPtr)
+
+/**
+ * Set an instrument ptr within a soundfont
+ *
+ * @param fontId the id of the soundfont to set the instrument in
+ * @param instId the id of the instrument to set
+ * @param instPtr (s32) the ptr to the `Instrument` struct
+ */
+#define AUDIOCMD_GLOBAL_SET_INSTRUMENT_FONT(fontId, instId, instPtr) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_SET_INSTRUMENT_FONT, 0, fontId, instId), instPtr)
+
+/**
+ * Pop the persistent cache of the specified table
+ *
+ * @param tableType (s32) see the `SampleBankTableType` enum
+ */
+#define AUDIOCMD_GLOBAL_POP_PERSISTENT_CACHE(tableType) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_POP_PERSISTENT_CACHE, 0, 0, 0), tableType)
+
+/**
+ * Set a custom function.
+ *
+ * @param functionType
+ * @param functionPtr
+ */
+#define AUDIOCMD_GLOBAL_SET_CUSTOM_FUNCTION(functionType, functionPtr) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_SET_CUSTOM_FUNCTION, 0, 0, functionType), functionPtr)
+
+/**
+ * Do something related to the unloaded-type audio data in the heap.
+ *
+ * @param tableType
+ * @param id
+ * @param type
+ * @param data
+ */
+#define AUDIOCMD_GLOBAL_E5(tableType, id, type, data) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_E5, tableType, id, type), data)
+
+/**
+ * Set reverb data.
+ *
+ * @param reverbIndex
+ * @param dataType
+ * @param data
+ */
+#define AUDIOCMD_GLOBAL_SET_REVERB_DATA(reverbIndex, dataType, data) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_SET_REVERB_DATA, dataType, reverbIndex, 0), data)
+
+/**
+ * Change the sound mode of audio
+ *
+ * @param soundMode (s32) see the `SoundMode` enum
+ */
+#define AUDIOCMD_GLOBAL_SET_SOUND_MODE(soundMode) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_SET_SOUND_MODE, 0, 0, 0), soundMode)
+
+/**
+ * Mute a sequence player
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ */
+#define AUDIOCMD_GLOBAL_MUTE(seqPlayerIndex) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_MUTE, seqPlayerIndex, 0, 0), 0)
+
+/**
+ * Unmute a sequence player
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param restart (s32) if set to 1, then notes with the `MUTE_FLAGS_STOP_SAMPLES` flag set are marked as finished
+ */
+#define AUDIOCMD_GLOBAL_UNMUTE(seqPlayerIndex, restart) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_UNMUTE, seqPlayerIndex, 0, 0), restart)
+
+/**
+ * Synchronously load an instrument
+ *
+ * @param fontId the id of the soundfont to load
+ * @param instId If below 0x7F, the id of the instrument to use. If equal to 0x7F, load the drum using the drumId
+ * @param drumId the id of the drum to use
+ */
+#define AUDIOCMD_GLOBAL_SYNC_LOAD_INSTRUMENT(fontId, instId, drumId) \
+ AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_SYNC_LOAD_INSTRUMENT, fontId, instId, drumId), 0)
+
+/**
+ * Asynchronously load a sample bank
+ *
+ * @param sampleBankId the id of the samplebank to load
+ * @param retData return data from `externalLoadQueue`
+ */
+#define AUDIOCMD_GLOBAL_ASYNC_LOAD_SAMPLE_BANK(sampleBankId, retData) \
+ AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_ASYNC_LOAD_SAMPLE_BANK, sampleBankId, 0, retData), 0)
+
+/**
+ * Asynchronously load a font
+ *
+ * @param fontId the id of the soundfont to load
+ * @param retData return data from `externalLoadQueue`
+ */
+#define AUDIOCMD_GLOBAL_ASYNC_LOAD_FONT(fontId, retData) \
+ AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_ASYNC_LOAD_FONT, fontId, 20, retData), 0)
+
+/**
+ * Discard sequence fonts
+ *
+ * @param seqId the id of the sequence to discard, see `SeqId`
+ */
+#define AUDIOCMD_GLOBAL_DISCARD_SEQ_FONTS(seqId) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_DISCARD_SEQ_FONTS, 0, seqId, 0), 0)
+
+/**
+ * Stop processing all audio thread commands
+ */
+#define AUDIOCMD_GLOBAL_STOP_AUDIOCMDS() \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_STOP_AUDIOCMDS, 0, 0, 0), 0)
+
+/**
+ * Reset Audio Heap
+ *
+ * @param specId (s32) index for the audio specifications to set high-level audio parameters
+ */
+#define AUDIOCMD_GLOBAL_RESET_AUDIO_HEAP(specId) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_RESET_AUDIO_HEAP, 0, 0, 0), specId)
+
+/**
+ * No Operation. No code exists for this OP
+ *
+ * @param arg0 No info
+ * @param arg1 No info
+ * @param arg2 No info
+ * @param data (s32) No info
+ */
+#define AUDIOCMD_GLOBAL_NOOP_1(arg0, arg1, arg2, data) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_NOOP_1, arg0, arg1, arg2), data)
+
+/**
+ * Set a custom function that runs every audio thread update, see `AudioCustomUpdateFunction`
+ *
+ * @param functionPtr (s32) address of the function to run once every audio frame
+ */
+#define AUDIOCMD_GLOBAL_SET_CUSTOM_UPDATE_FUNCTION(functionPtr) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_SET_CUSTOM_UPDATE_FUNCTION, 0, 0, 0), functionPtr)
+
+/**
+ * Asynchronously load a sequence
+ *
+ * @param seqId the id of the sequence to load, see `SeqId`
+ * @param retData return data from `externalLoadQueue`
+ */
+#define AUDIOCMD_GLOBAL_ASYNC_LOAD_SEQ(seqId, retData) \
+ AudioThread_QueueCmdS8(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_ASYNC_LOAD_SEQ, seqId, 0, retData), 0)
+
+/**
+ * No Operation. No code exists for this OP
+ *
+ * @param arg0 No info
+ * @param arg1 No info
+ * @param arg2 No info
+ * @param data (s32) No info
+ */
+#define AUDIOCMD_GLOBAL_NOOP_2(arg0, arg1, arg2, data) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_NOOP_2, arg0, arg1, arg2), data)
+
+/**
+ * Disable all sequence players
+ *
+ * @param flags (s32) Set `AUDIO_NOTE_RELEASE` to discard all sequences.
+ *
+ * @note Also set `AUDIO_NOTE_SAMPLE_NOTES` will also only discard sampled notes, but the sequences are disabled anyway.
+ * Not setting `AUDIO_NOTE_RELEASE` should make this command useless
+ */
+#define AUDIOCMD_GLOBAL_DISABLE_ALL_SEQPLAYERS(flags) \
+ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_DISABLE_ALL_SEQPLAYERS, 0, 0, 0), flags)
+
+#endif
diff --git a/include/buffers.h b/include/buffers.h
new file mode 100644
index 000000000..72615a717
--- /dev/null
+++ b/include/buffers.h
@@ -0,0 +1,20 @@
+#ifndef BUFFERS_H
+#define BUFFERS_H
+
+#include "z64.h"
+#include "macros.h"
+#include "stack.h"
+
+
+extern u8 gGfxSPTaskYieldBuffer[OS_YIELD_DATA_SIZE];
+extern STACK(gGfxSPTaskStack, 0x400);
+extern GfxPool gGfxPools[2];
+extern u8 gAudioHeap[0x138000];
+extern u8 gSystemHeap[];
+
+extern u8 gPictoPhotoI8[PICTO_PHOTO_SIZE];
+extern u8 D_80784600[0x56200];
+extern u16 gFramebuffer0[SCREEN_HEIGHT][SCREEN_WIDTH];
+
+
+#endif
diff --git a/include/color.h b/include/color.h
index b0b4d2cb0..b49ab8d78 100644
--- a/include/color.h
+++ b/include/color.h
@@ -51,4 +51,26 @@ typedef union {
u16 rgba;
} Color_RGBA16;
+typedef union {
+ struct {
+ u32 r : 5;
+ u32 g : 5;
+ u32 b : 5;
+ u32 a : 1;
+ };
+ u16 rgba;
+} Color_RGBA16_2;
+
+typedef union{
+ struct {
+ u32 r : 3;
+ u32 g : 3;
+ u32 b : 3;
+ u32 a : 5;
+ };
+ u16 rgba;
+} Color_RGBA14;
+
+#define RGBA8(r, g, b, a) ((((r) & 0xFF) << 24) | (((g) & 0xFF) << 16) | (((b) & 0xFF) << 8) | (((a) & 0xFF) << 0))
+
#endif
diff --git a/include/functions.h b/include/functions.h
index f238824d5..690558f38 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -122,11 +122,6 @@ s8 PadUtils_GetRelYImpl(Input* input);
s8 PadUtils_GetRelX(Input* input);
s8 PadUtils_GetRelY(Input* input);
void PadUtils_UpdateRelXY(Input* input);
-void StackCheck_Init(StackEntry* entry, void* stackTop, void* stackBottom, u32 initValue, s32 minSpace, const char* name);
-void StackCheck_Cleanup(StackEntry* entry);
-StackStatus StackCheck_GetState(StackEntry* entry);
-u32 StackCheck_CheckAll(void);
-u32 StackCheck_Check(StackEntry* entry);
void MtxConv_F2L(Mtx* mtx, MtxF* mf);
void MtxConv_L2F(MtxF* mtx, Mtx* mf);
@@ -164,7 +159,7 @@ f64 func_80086CEC(f64 param_1);
s32 func_80086CF8(f32 param_1);
s32 func_80086D08(f64 param_1);
// void func_80086D18(void);
-// void func_80086D24(void);
+f64 func_80086D24(f64);
s32 func_80086D30(f32 param_1);
s32 func_80086D40(f64 param_1);
// void func_80086D50(void);
@@ -318,7 +313,7 @@ OSTime __osInsertTimer(OSTimer* t);
// void __osVoiceContRead36(void);
s32 __osSpDeviceBusy(void);
s32 __osSiDeviceBusy(void);
-// void guMtxIdent(void);
+void guMtxIdent(Mtx* mtx);
s32 osJamMesg(OSMesgQueue* mq, OSMesg msg, s32 flag);
void osSetThreadPri(OSThread* t, OSPri p);
OSPri osGetThreadPri(OSThread* t);
@@ -473,7 +468,7 @@ void func_800AE5A0(PlayState* play);
void func_800AE5E4(PlayState* play, Color_RGBA8* color, s16 arg2, s16 arg3);
void func_800AE778(PlayState* play, Color_RGBA8* color, s16 arg2, s16 arg3);
void func_800AE8EC(PlayState* play);
-void func_800AE930(CollisionContext* colCtx, EffectTireMark* this, Vec3f* pos, f32 arg3, s16 arg4, CollisionPoly* colPoly, s32 arg6);
+void func_800AE930(CollisionContext* colCtx, EffectTireMark* this, Vec3f* pos, f32 arg3, s16 angle, CollisionPoly* colPoly, s32 bgId);
void func_800AEF44(EffectTireMark* this);
void EffectTireMark_Init(void* thisx, void* initParamsx);
void EffectTireMark_Destroy(void* thisx);
@@ -549,24 +544,24 @@ void EffectSsDtBubble_SpawnCustomColor(PlayState* play, Vec3f* pos, Vec3f* veloc
void EffectSsHahen_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 flags, s16 scale, s16 objId, s16 life, Gfx* dList);
void EffectSsHahen_SpawnBurst(PlayState* play, Vec3f* pos, f32 burstScale, s16 flags, s16 scale, s16 randScaleRange, s16 count, s16 objId, s16 life, Gfx* dList);
// void func_800B2364(void);
-// void EffectSsStick_Spawn(UNK_TYPE4 uParm1, UNK_PTR puParm2, UNK_TYPE2 uParm3);
+void EffectSsStick_Spawn(PlayState* play, Vec3f* pos, s16 yaw);
// void EffectSsSibuki_Spawn(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7);
void EffectSsSibuki_SpawnBurst(PlayState* play, Vec3f* pos);
void EffectSsStone1_Spawn(PlayState* play, Vec3f* pos, s32 reg0);
void EffectSsHitmark_SpawnFixedScale(PlayState* play, s32 type, Vec3f* pos);
void EffectSsHitmark_SpawnCustomScale(PlayState* play, s32 type, s16 scale, Vec3f* pos);
void EffectSsFhgFlash_SpawnShock(PlayState* play, Actor* actor, Vec3f* pos, s16 scale, u8 params);
-// void EffectSsKFire_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE2 param_5, UNK_TYPE1 param_6);
+void EffectSsKFire_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scaleMax, u8 type);
void EffectSsSolderSrchBall_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16* playerDetected, s16 flags);
void EffectSsKakera_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* arg3, s16 gravity, s16 arg5, s16 arg6, s16 arg7, s16 arg8, s16 scale, s16 arg10, s16 arg11, s32 life, s16 colorIdx, s16 objId, Gfx* dList);
// void EffectSsIcePiece_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, UNK_TYPE4 uParm3, Vec3f* pzParm4, Vec3f* param_5, UNK_TYPE4 param_6);
-// void EffectSsIcePiece_SpawnBurst(void);
+void EffectSsIcePiece_SpawnBurst(PlayState* play, Vec3f* refPos, f32 scale);
void func_800B2B44(PlayState* play, Actor* actor, Vec3f* pos, f32 scale);
// void func_800B2B7C(void);
void EffectSsEnIce_Spawn(PlayState* play, Vec3f* pos, f32 scale, Vec3f* velocity, Vec3f* accel, Color_RGBA8* primColor, Color_RGBA8* envColor, s32 life);
// void EffectSsFireTail_Spawn(UNK_TYPE4 uParm1, UNK_TYPE4 uParm2, Vec3f* pzParm3, UNK_TYPE4 uParm4, Vec3f* param_5, UNK_TYPE2 param_6, Color_RGBA8* param_7, Color_RGBA8* param_8, UNK_TYPE2 param_9, UNK_TYPE2 param_10, UNK_TYPE4 param_11);
// void EffectSsFireTail_SpawnFlame(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE4 param_6);
-// void EffectSsFireTail_SpawnFlameOnPlayer(void);
+void EffectSsFireTail_SpawnFlameOnPlayer(PlayState* play, f32 scale, s16 bodyPart, f32 colorIntensity);
void EffectSsEnFire_SpawnVec3f(PlayState* play, Actor* actor, Vec3f* pos, s16 scale, s16 params, s16 flags, s16 bodyPart);
// void EffectSsEnFire_SpawnVec3s(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7);
void EffectSsExtra_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scoreIdx);
@@ -614,12 +609,12 @@ void Flags_SetCollectible(PlayState* play, s32 flag);
void TitleCard_InitBossName(GameState* gameState, TitleCardContext* titleCtx, TexturePtr texture, s16 x, s16 y, u8 width, u8 height);
-s32 func_800B648C(PlayState* play, s32 arg1, s32 arg2, f32 arg3, Vec3f* arg4);
+s32 func_800B648C(PlayState* play, s32 arg1, s32 timer, f32 arg3, Vec3f* arg4);
f32 func_800B64FC(PlayState* play, f32 arg1, Vec3f* arg2, u32* arg3);
void* func_800B6584(PlayState* play, s16 id, void* arg2, size_t size);
void* func_800B6608(PlayState* play, s16 id);
void* func_800B6680(PlayState* play, s16 id);
-void Actor_MarkForDeath(Actor* actor);
+void Actor_Kill(Actor* actor);
void Actor_SetWorldToHome(Actor* actor);
void Actor_SetFocus(Actor* actor, f32 height);
void Actor_SetWorldRotToShape(Actor* actor);
@@ -635,16 +630,16 @@ void Actor_MoveWithoutGravity(Actor* actor);
void Actor_UpdateVelocityWithoutGravityReverse(Actor* actor);
void Actor_MoveWithoutGravityReverse(Actor* actor);
void Actor_SetSpeeds(Actor* actor, f32 speed);
-s16 Actor_YawBetweenActors(Actor* from, Actor* to);
-s16 Actor_YawBetweenActorsTop(Actor* from, Actor* to);
-s16 Actor_YawToPoint(Actor* actor, Vec3f* point);
-s16 Actor_PitchBetweenActors(Actor* from, Actor* to);
-s16 Actor_PitchBetweenActorsTop(Actor* from, Actor* to);
-s16 Actor_PitchToPoint(Actor* actor, Vec3f* point);
-f32 Actor_DistanceBetweenActors(Actor* actor1, Actor* actor2);
-f32 Actor_DistanceToPoint(Actor* actor, Vec3f* point);
-f32 Actor_XZDistanceBetweenActors(Actor* actor1, Actor* actor2);
-f32 Actor_XZDistanceToPoint(Actor* actor, Vec3f* point);
+s16 Actor_WorldYawTowardActor(Actor* actorA, Actor* actorB);
+s16 Actor_FocusYawTowardActor(Actor* actorA, Actor* actorB);
+s16 Actor_WorldYawTowardPoint(Actor* actor, Vec3f* refPoint);
+s16 Actor_WorldPitchTowardActor(Actor* actorA, Actor* actorB);
+s16 Actor_FocusPitchTowardActor(Actor* actorA, Actor* actorB);
+s16 Actor_WorldPitchTowardPoint(Actor* actor, Vec3f* refPoint);
+f32 Actor_WorldDistXYZToActor(Actor* actorA, Actor* actorB);
+f32 Actor_WorldDistXYZToPoint(Actor* actor, Vec3f* refPoint);
+f32 Actor_WorldDistXZToActor(Actor* actorA, Actor* actorB);
+f32 Actor_WorldDistXZToPoint(Actor* actor, Vec3f* refPoint);
void Actor_OffsetOfPointInActorCoords(Actor* actor, Vec3f* offset, Vec3f* point);
f32 Actor_HeightDiff(Actor* actor1, Actor* actor2);
void func_800B6F20(PlayState* play, Input* input, f32 magnitude, s16 baseYaw);
@@ -656,7 +651,7 @@ s32 func_800B715C(PlayState* play);
void Actor_SetCameraHorseSetting(PlayState* play, Player* player);
void Actor_MountHorse(PlayState* play, Player* player, Actor* horse);
s32 func_800B724C(PlayState* play, Actor* actor, u8 csMode);
-u32 func_800B7298(PlayState* play, Actor* actor, u8 csMode);
+s32 func_800B7298(PlayState* play, Actor* actor, u8 csMode);
void func_800B72F8(DynaPolyActor* dyna, f32 extraPushForce, s16 yRotation);
s32 Player_IsFacingActor(Actor* actor, s16 maxAngleDiff, PlayState* play);
@@ -666,8 +661,8 @@ s32 Actor_ActorAIsFacingActorB(Actor* actorA, Actor* actorB, s16 maxAngleDiff);
s32 Actor_IsFacingAndNearPlayer(Actor* actor, f32 range, s16 maxAngleDiff);
s32 Actor_ActorAIsFacingAndNearActorB(Actor* actorA, Actor* actorB, f32 range, s16 maxAngleDiff);
-void func_800B75A0(CollisionPoly* poly, Vec3f* normal, s16* azimuth);
-void Actor_UpdateBgCheckInfo(PlayState* play, Actor* actor, f32 wallCheckHeight, f32 wallCheckRadius, f32 ceilingCheckHeight, u32 flags);
+void Actor_GetSlopeDirection(CollisionPoly* floorPoly, Vec3f* slopeNormal, s16* downwardSlopeYaw);
+void Actor_UpdateBgCheckInfo(PlayState* play, Actor* actor, f32 wallCheckHeight, f32 wallCheckRadius, f32 ceilingCheckHeight, u32 updBgCheckInfoFlags);
Hilite* Hilite_DrawOpa(Vec3f* object, Vec3f* eye, Vec3f* lightDir, GraphicsContext* gfxCtx);
void func_800B8050(Actor* actor, PlayState* play, s32 flag);
void func_800B8118(Actor* actor, PlayState* play, s32 flag);
@@ -677,13 +672,13 @@ PosRot* Actor_GetWorldPosShapeRot(PosRot* dest, Actor* actor);
s32 func_800B83F8(Actor* actor, Player* player, s32 flag);
s32 Actor_ProcessTalkRequest(Actor* actor, GameState* gameState);
-s32 func_800B8500(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, PlayerActionParam exchangeItemId);
-s32 func_800B85E0(Actor* actor, PlayState* play, f32 radius, PlayerActionParam exchangeItemId);
+s32 func_800B8500(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, PlayerItemAction exchangeItemId);
+s32 func_800B85E0(Actor* actor, PlayState* play, f32 radius, PlayerItemAction exchangeItemId);
s32 func_800B8614(Actor* actor, PlayState* play, f32 radius);
s32 func_800B863C(Actor* actor, PlayState* play);
s32 Actor_TextboxIsClosing(Actor* actor, PlayState* play);
s32 Actor_ChangeFocus(Actor* actor1, PlayState* play, Actor* actor2);
-s32 Player_GetExchangeItemId(PlayState* play);
+PlayerItemAction Player_GetExchangeItemId(PlayState* play);
s32 func_800B8718(Actor* actor, GameState* gameState);
s32 func_800B874C(Actor* actor, PlayState* play, f32 xzRange, f32 yRange);
s32 func_800B8804(Actor* actor, PlayState* play, f32 xzRange);
@@ -691,13 +686,13 @@ s32 func_800B886C(Actor* actor, PlayState* play);
void Actor_GetScreenPos(PlayState* play, Actor* actor, s16* x, s16* y);
s32 Actor_OnScreen(PlayState* play, Actor* actor);
s32 Actor_HasParent(Actor* actor, PlayState* play);
-s32 Actor_PickUp(Actor* actor, PlayState* play, s32 getItemId, f32 xzRange, f32 yRange);
-s32 Actor_PickUpNearby(Actor* actor, PlayState* play, s32 getItemId);
-s32 Actor_LiftActor(Actor* actor, PlayState* play);
-s32 Actor_PickUpFar(Actor* actor, PlayState* play, s32 getItemId);
+s32 Actor_OfferGetItem(Actor* actor, PlayState* play, GetItemId getItemId, f32 xzRange, f32 yRange);
+s32 Actor_OfferGetItemNearby(Actor* actor, PlayState* play, GetItemId getItemId);
+s32 Actor_OfferCarry(Actor* actor, PlayState* play);
+s32 Actor_OfferGetItemFar(Actor* actor, PlayState* play, GetItemId getItemId);
s32 Actor_HasNoParent(Actor* actor, PlayState* play);
void func_800B8C20(Actor* actorA, Actor* actorB, PlayState* play);
-void func_800B8C50(Actor* actor, PlayState* play);
+void Actor_SetClosestSecretDistance(Actor* actor, PlayState* play);
s32 Actor_HasRider(PlayState* play, Actor* horse);
s32 Actor_SetRideActor(PlayState* play, Actor* horse, s32 mountSide);
s32 Actor_HasNoRider(PlayState* play, Actor* horse);
@@ -706,8 +701,8 @@ void func_800B8D50(PlayState* play, Actor* actor, f32 arg2, s16 yaw, f32 arg4, u
void func_800B8D98(PlayState* play, Actor* actor, f32 arg2, s16 arg3, f32 arg4);
void func_800B8DD4(PlayState* play, Actor* actor, f32 arg2, s16 arg3, f32 arg4, u32 arg5);
void func_800B8E1C(PlayState* play, Actor* actor, f32 arg2, s16 arg3, f32 arg4);
-void func_800B8E58(Player* player, u16 sfxId);
-void Actor_PlaySfxAtPos(Actor* actor, u16 sfxId);
+void Player_PlaySfx(Player* player, u16 sfxId);
+void Actor_PlaySfx(Actor* actor, u16 sfxId);
void func_800B8EF4(PlayState* play, Actor* actor);
void func_800B8F98(Actor* actor, u16 sfxId);
void func_800B8FC0(Actor* actor, u16 sfxId);
@@ -716,44 +711,44 @@ void func_800B9010(Actor* actor, u16 sfxId);
void func_800B9038(Actor* actor, s32 timer);
void func_800B9084(Actor* actor);
void func_800B9098(Actor* actor);
-s32 func_800B90AC(PlayState* play, Actor* actor, CollisionPoly* polygon, s32 bgId, s32 arg4);
+s32 func_800B90AC(PlayState* play, Actor* actor, CollisionPoly* polygon, s32 bgId, Vec3f* arg4);
void Actor_DeactivateLens(PlayState* play);
-void func_800B9120(ActorContext* actorCtx);
+void Actor_InitHalfDaysBit(ActorContext* actorCtx);
void Actor_InitContext(PlayState* play, ActorContext* actorCtx, ActorEntry* actorEntry);
void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx);
-s32 Actor_RecordUndrawnActor(PlayState* play, Actor* actor);
+s32 Actor_AddToLensActors(PlayState* play, Actor* actor);
void Actor_DrawAll(PlayState* play, ActorContext* actorCtx);
-void func_800BA6FC(PlayState* play, ActorContext* actorCtx);
+void Actor_KillAllWithMissingObject(PlayState* play, ActorContext* actorCtx);
void func_800BA798(PlayState* play, ActorContext* actorCtx);
void Actor_CleanupContext(ActorContext* actorCtx, PlayState* play);
Actor* Actor_Spawn(ActorContext* actorCtx, PlayState* play, s16 actorId, f32 posX, f32 posY, f32 posZ, s16 rotX, s16 rotY, s16 rotZ, s32 params);
-Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, PlayState* play, s16 index, f32 x, f32 y, f32 z, s16 rotX, s16 rotY, s16 rotZ, s32 params, u32 cutscene, s32 arg11, Actor* parent);
+Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, PlayState* play, s16 index, f32 x, f32 y, f32 z, s16 rotX, s16 rotY, s16 rotZ, s32 params, u32 csId, u32 halfDaysBits, Actor* parent);
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);
-void Actor_SpawnBodyParts(Actor* actor, PlayState* play, s32 arg2, Gfx** dList);
+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);
void func_800BC154(PlayState* play, ActorContext* actorCtx, Actor* actor, u8 actorCategory);
-s32 func_800BC188(s32 index);
-Actor* func_800BC270(PlayState* play, Actor* actor, f32 arg2, s32 arg3);
-Actor* func_800BC444(PlayState* play, Actor* actor, f32 arg2);
+u32 Actor_GetArrowDmgFlags(s32 params);
+Actor* func_800BC270(PlayState* play, Actor* actor, f32 distance, u32 dmgFlags);
+Actor* func_800BC444(PlayState* play, Actor* actor, f32 distance);
s16 Actor_TestFloorInDirection(Actor* actor, PlayState* play, f32 distance, s16 angle);
s32 Actor_IsTargeted(PlayState* play, Actor* actor);
s32 Actor_OtherIsTargeted(PlayState* play, Actor* actor);
-void func_800BC620(Vec3f* arg0, Vec3f* arg1, u8 alpha, PlayState* play);
+void func_800BC620(Vec3f* pos, Vec3f* scale, u8 alpha, PlayState* play);
void Actor_AddQuake(PlayState* play, s16 verticalMag, s16 countdown);
void Actor_AddQuakeWithSpeed(PlayState* play, s16 verticalMag, s16 countdown, s16 speed);
void func_800BC848(Actor* actor, PlayState* play, s16 y, s16 countdown);
void Actor_DrawDoorLock(PlayState* play, s32 frame, s32 type);
-void Actor_SetColorFilter(Actor* actor, u16 colorFlag, u16 colorIntensityMax, u16 xluFlag, u16 duration);
+void Actor_SetColorFilter(Actor* actor, u16 colorFlag, u16 colorIntensityMax, u16 bufFlag, u16 duration);
Hilite* func_800BCBF4(Vec3f* arg0, PlayState* play);
Hilite* func_800BCC68(Vec3f* arg0, PlayState* play);
void Actor_GetClosestPosOnPath(Vec3s* points, s32 numPoints, Vec3f* srcPos, Vec3f* dstPos, s32 isPathLoop);
-s32 func_800BD2B4(PlayState* play, Actor* actor, s16* arg2, f32 arg3, u16 (*textIdCallback)(PlayState*, Actor*), s16 (*arg5)(PlayState*, Actor*));
-void func_800BD888(Actor* actor, struct_800BD888_arg1* arg1, s16 arg2, s16 arg3);
+s32 Npc_UpdateTalking(PlayState* play, Actor* actor, s16* talkState, f32 interactRange, NpcGetTextIdFunc getTextId, NpcUpdateTalkStateFunc updateTalkState);
+void Npc_TrackPoint(Actor* actor, NpcInteractInfo* interactInfo, s16 presetIndex, s16 trackingMode);
void func_800BD9E0(PlayState* play, SkelAnime* skelAnime, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, Actor* actor, s16 alpha);
void func_800BDAA0(PlayState* play, SkelAnime* skelAnime, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, Actor* actor, s16 alpha);
void Actor_ChangeAnimationByInfo(SkelAnime* skelAnime, AnimationInfo* animationInfo, s32 animIndex);
@@ -767,7 +762,7 @@ s32 func_800BE184(PlayState* play, Actor* actor, f32 xzDist, s16 arg3, s16 arg4,
u8 Actor_ApplyDamage(Actor* actor);
void Actor_SetDropFlag(Actor* actor, ColliderInfo* colInfo);
void Actor_SetDropFlagJntSph(Actor* actor, ColliderJntSph* jntSphere);
-void func_800BE33C(Vec3f* arg0, Vec3f* arg1, Vec3s* arg2, s32 arg3);
+void func_800BE33C(Vec3f* arg0, Vec3f* arg1, Vec3s* dst, s32 arg3);
void func_800BE3D0(Actor* actor, s16 angle, Vec3s* arg2);
void func_800BE504(Actor* actor, ColliderCylinder* collider);
void func_800BE568(Actor* actor, ColliderSphere* collider);
@@ -776,299 +771,32 @@ s32 Actor_IsSmallChest(struct EnBox* chest);
void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 limbPosCount, f32 effectScale, f32 frozenSteamScale, f32 effectAlpha, u8 type);
void Actor_SpawnIceEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s32 limbPosCount, s32 effectsPerLimb, f32 scale, f32 scaleRange);
-void ActorOverlayTable_FaultPrint(void* arg0, void* arg1);
-void* ActorOverlayTable_FaultAddrConv(void* arg0, void* arg1);
+void ActorOverlayTable_FaultClient(void* arg0, void* arg1);
+void* ActorOverlayTable_FaultAddrConv(void* address, void* param);
void ActorOverlayTable_Init(void);
void ActorOverlayTable_Cleanup(void);
-void SSNode_SetValue(SSNode* node, s16* polyIndex, u16 next);
-void SSList_SetNull(SSList* ssList);
-void SSNodeList_SetSSListHead(SSNodeList* list, SSList* ssList, s16* polyIndex);
-void DynaSSNodeList_SetSSListHead(DynaSSNodeList* list, SSList* ssList, s16* polyIndex);
-void DynaSSNodeList_Init(PlayState* play, DynaSSNodeList* list);
-void DynaSSNodeList_Alloc(PlayState* play, DynaSSNodeList* list, u32 numNodes);
-void DynaSSNodeList_ResetCount(DynaSSNodeList* list);
-u16 DynaSSNodeList_GetNextNodeIdx(DynaSSNodeList* list);
-void BgCheck_Vec3sToVec3f(Vec3s* src, Vec3f* dest);
-void BgCheck_Vec3fToVec3s(Vec3s* dest, Vec3f* src);
-f32 func_800BFD84(CollisionPoly *poly, f32 arg1, f32 arg2);
-s32 func_800BFDEC(CollisionPoly* polyA, CollisionPoly* polyB, u32* outVtxId0, u32* outVtxId1);
-s16 CollisionPoly_GetMinY(CollisionPoly* poly, Vec3s* vertices);
-void CollisionPoly_GetNormalF(CollisionPoly* poly, f32* nx, f32* ny, f32* nz);
-void func_800C0094(CollisionPoly* poly, f32 tx, f32 ty, f32 tz, MtxF* dest);
-f32 CollisionPoly_GetPointDistanceFromPlane(CollisionPoly* poly, Vec3f* point);
-void CollisionPoly_GetVerticesByBgId(CollisionPoly* poly, s32 bgId, CollisionContext* colCtx, Vec3f* dest);
-s32 CollisionPoly_SphVsPoly(CollisionPoly* poly, Vec3s* vtxList, Vec3f* center, f32 radius);
-void StaticLookup_AddPolyToSSList(CollisionContext* colCtx, SSList* ssList, CollisionPoly* polyList, Vec3s* vtxList, s16 polyId);
-void StaticLookup_AddPoly(StaticLookup* lookup, CollisionContext* colCtx, CollisionPoly* polyList, Vec3s* vtxList, s16 index);
-void BgCheck_GetSubdivisionMinBounds(CollisionContext* colCtx, Vec3f* pos, s32* sx, s32* sy, s32* sz);
-void BgCheck_GetSubdivisionMaxBounds(CollisionContext* colCtx, Vec3f* pos, s32* sx, s32* sy, s32* sz);
-void BgCheck_GetPolySubdivisionBounds(CollisionContext* colCtx, Vec3s* vtxList, CollisionPoly* polyList, s32* subdivMinX, s32* subdivMinY, s32* subdivMinZ, s32* subdivMaxX, s32* subdivMaxY, s32* subdivMaxZ, s16 polyId);
-s32 BgCheck_PolyIntersectsSubdivision(Vec3f* min, Vec3f* max, CollisionPoly* polyList, Vec3s* vtxList, s16 polyId);
-u32 BgCheck_InitStaticLookup(CollisionContext* colCtx, PlayState* play, StaticLookup* lookupTbl);
-s32 BgCheck_IsSmallMemScene(PlayState* play);
-s32 BgCheck_TryGetCustomMemsize(s32 sceneId, u32* memSize);
-void BgCheck_SetSubdivisionDimension(f32 min, s32 subdivAmount, f32* max, f32* subdivLength, f32* subdivLengthInv);
-s32 BgCheck_GetSpecialSceneMaxObjects(PlayState* play, s32* maxNodes, s32* maxPolygons, s32* maxVertices);
-void BgCheck_Allocate(CollisionContext* colCtx, PlayState* play, CollisionHeader* colHeader);
-void BgCheck_SetContextFlags(CollisionContext* colCtx, u32 flags);
-void BgCheck_UnsetContextFlags(CollisionContext* colCtx, u32 flags);
-CollisionHeader* BgCheck_GetCollisionHeader(CollisionContext* colCtx, s32 bgId);
-f32 BgCheck_RaycastFloorImpl(PlayState* play, CollisionContext* colCtx, u16 xpFlags, CollisionPoly** outPoly, s32* outBgId, Vec3f* pos, Actor* actor, u32 arg7, f32 checkDist, s32 arg9);
-f32 BgCheck_CameraRaycastFloor1(CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos);
-f32 BgCheck_EntityRaycastFloor1(CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos);
-f32 BgCheck_EntityRaycastFloor2(PlayState* play, CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos);
-f32 BgCheck_EntityRaycastFloor2_1(PlayState* play, CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos);
-f32 BgCheck_EntityRaycastFloor3(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Vec3f* pos);
-f32 BgCheck_EntityRaycastFloor5(CollisionContext* colCtx, CollisionPoly** outPoly, s32* outBgId, Actor* actor, Vec3f* pos);
-f32 BgCheck_EntityRaycastFloor5_2(PlayState* play, CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos);
-f32 BgCheck_EntityRaycastFloor5_3(PlayState* play, CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos);
-f32 BgCheck_EntityRaycastFloor6(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos, f32 checkDist);
-f32 BgCheck_EntityRaycastFloor7(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos);
-f32 BgCheck_AnyRaycastFloor1(CollisionContext* colCtx, CollisionPoly* outPoly, Vec3f* pos);
-f32 BgCheck_AnyRaycastFloor2(CollisionContext* colCtx, CollisionPoly* outPoly, s32* bgId, Vec3f* pos);
-f32 BgCheck_CameraRaycastFloor2(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Vec3f* pos);
-f32 BgCheck_EntityRaycastFloor8(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos);
-f32 BgCheck_EntityRaycastFloor9(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Vec3f* pos);
-s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, Actor* actor, f32 checkHeight, u8 argA);
-s32 BgCheck_EntitySphVsWall1(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, f32 checkHeight);
-s32 BgCheck_EntitySphVsWall2(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, f32 checkHeight);
-s32 BgCheck_EntitySphVsWall3(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, Actor* actor, f32 checkHeight);
-s32 BgCheck_EntitySphVsWall4(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, Actor* actor, f32 checkHeight);
-s32 BgCheck_CheckCeilingImpl(CollisionContext* colCtx, u16 xpFlags, f32* outY, Vec3f* pos, f32 checkHeight, CollisionPoly** outPoly, s32* outBgId, Actor* actor);
-s32 BgCheck_AnyCheckCeiling(CollisionContext* colCtx, f32* outY, Vec3f* pos, f32 checkHeight);
-s32 BgCheck_EntityCheckCeiling(CollisionContext* colCtx, f32* outY, Vec3f* pos, f32 checkHeight, CollisionPoly** outPoly, s32* outBgId, Actor* actor);
-s32 BgCheck_CameraLineTest1(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId);
-s32 BgCheck_CameraLineTest2(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId);
-s32 BgCheck_EntityLineTest1(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId);
-s32 BgCheck_EntityLineTest2(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId, Actor* actor);
-s32 BgCheck_EntityLineTest3(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId, Actor* actor, f32 checkDist);
-s32 BgCheck_ProjectileLineTest(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId);
-s32 BgCheck_AnyLineTest1(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkOneFace);
-s32 BgCheck_AnyLineTest2(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace);
-s32 BgCheck_AnyLineTest3(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId);
-s32 BgCheck_SphVsFirstPolyImpl(CollisionContext* colCtx, u16 xpFlags, CollisionPoly** outPoly, s32* outBgId, Vec3f* center, f32 radius, Actor* actor, u16 bciFlags);
-s32 BgCheck_SphVsFirstPoly(CollisionContext* colCtx, Vec3f* center, f32 radius);
-s32 BgCheck_SphVsFirstWall(CollisionContext* colCtx, Vec3f* center, f32 radius);
-void SSNodeList_Init(SSNodeList* this);
-void SSNodeList_Alloc(PlayState* play, SSNodeList* this, s32 tblMax, s32 numPolys);
-SSNode* SSNodeList_GetNextNode(SSNodeList* this);
-u16 SSNodeList_GetNextNodeIdx(SSNodeList* this);
-void ScaleRotPos_Init(ScaleRotPos* srp);
-void ScaleRotPos_SetValue(ScaleRotPos* srp, Vec3f* scale, Vec3s* rot, Vec3f* pos);
-s32 ScaleRotPos_IsEqual(ScaleRotPos* a, ScaleRotPos* b);
-void DynaLookup_ResetLists(DynaLookup* dynaLookup);
-void DynaLookup_Reset(DynaLookup* dynaLookup);
-void DynaLookup_ResetVtxStartIndex(u16* vtxStartIndex);
-void DynaLookup_ResetWaterBoxStartIndex(u16* waterBoxStartIndex);
-void BgActor_Init(PlayState* play, BgActor* bgActor);
-void BgActor_SetActor(BgActor* bgActor, Actor* actor, CollisionHeader* colHeader);
-s32 BgActor_IsTransformUnchanged(BgActor* bgActor);
-void DynaPoly_NullPolyList(CollisionPoly** polyList);
-void DynaPoly_AllocPolyList(PlayState* play, CollisionPoly** polyList, s32 numPolys);
-void DynaPoly_NullVtxList(Vec3s** vtxList);
-void DynaPoly_AllocVtxList(PlayState* play, Vec3s** vtxList, s32 numVtx);
-void DynaPoly_InitWaterBoxList(DynaWaterBoxList* waterBoxList);
-void DynaPoly_AllocWaterBoxList(PlayState* play, DynaWaterBoxList* waterBoxList, s32 numWaterBoxes);
-void DynaPoly_SetBgActorPrevTransform(PlayState* play, BgActor* bgActor);
-s32 DynaPoly_IsBgIdBgActor(s32 bgId);
-void DynaPoly_Init(PlayState* play, DynaCollisionContext* dyna);
-void DynaPoly_Alloc(PlayState* play, DynaCollisionContext* dyna);
-s32 DynaPoly_SetBgActor(PlayState* play, DynaCollisionContext* dyna, Actor* actor, CollisionHeader* colHeader);
-DynaPolyActor* DynaPoly_GetActor(CollisionContext* colCtx, s32 bgId);
-void func_800C62BC(PlayState* play, DynaCollisionContext* dyna, s32 bgId);
-void func_800C6314(PlayState* play, DynaCollisionContext* dyna, s32 bgId);
-void func_800C636C(PlayState* play, DynaCollisionContext* dyna, s32 bgId);
-void func_800C63C4(PlayState* play, DynaCollisionContext* dyna, s32 bgId);
-void func_800C641C(PlayState* play, DynaCollisionContext* dyna, s32 bgId);
-void func_800C6474(PlayState* play, DynaCollisionContext* dyna, s32 bgId);
-void func_800C6554(PlayState* play, DynaCollisionContext* dyna);
-void DynaPoly_DeleteBgActor(PlayState* play, DynaCollisionContext* dyna, s32 bgId);
-void BgCheck_CalcWaterboxDimensions(Vec3f* minPos, Vec3f* maxXPos, Vec3f* maxZPos, Vec3s* minPosOut, s16* xLength, s16* zLength);
-void DynaPoly_ExpandSRT(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s32* vtxStartIndex, s32* polyStartIndex, s32* waterBoxStartIndex);
-void BgCheck_ResetFlagsIfLoadedActor(PlayState* play, DynaCollisionContext* dyna, Actor* actor);
-void DynaPoly_Setup(PlayState* play, DynaCollisionContext* dyna);
-void func_800C756C(DynaCollisionContext* dyna, s32* numPolygons, s32* numVertices, s32* numWaterBoxes);
-void DynaPoly_UpdateBgActorTransforms(PlayState* play, DynaCollisionContext* dyna);
-void CollisionHeader_SegmentedToVirtual(CollisionHeader* colHeader);
-void CollisionHeader_GetVirtual(CollisionHeader* colHeader, CollisionHeader** dest);
-void BgCheck_InitCollisionHeaders(CollisionContext* colCtx, PlayState* play);
-
-u32 SurfaceType_GetBgCamIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u16 BgCheck_GetBgCamSettingImpl(CollisionContext* colCtx, u32 bgCamIndex, s32 bgId);
-u16 BgCheck_GetBgCamSetting(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u16 BgCheck_GetBgCamCountImpl(CollisionContext* colCtx, u32 bgCamIndex, s32 bgId);
-u16 BgCheck_GetBgCamCount(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-Vec3s* BgCheck_GetBgCamFuncDataImpl(CollisionContext* colCtx, s32 bgCamIndex, s32 bgId);
-Vec3s* BgCheck_GetBgCamFuncData(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-
-u32 SurfaceType_GetSceneExitIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 func_800C99D4(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 func_800C99FC(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 func_800C9A24(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-s32 func_800C9A4C(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-s32 func_800C9A7C(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-s32 func_800C9AB0(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-s32 func_800C9AE4(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 func_800C9B18(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 func_800C9B40(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 func_800C9B68(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 SurfaceType_IsHorseBlocked(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 func_800C9BB8(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u16 SurfaceType_GetSfx(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-s32 func_800C9C24(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId, s32 arg3);
-u32 SurfaceType_GetSlope(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 SurfaceType_GetLightSettingIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 SurfaceType_GetEcho(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 SurfaceType_IsHookshotSurface(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-s32 SurfaceType_IsIgnoredByEntities(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-s32 SurfaceType_IsIgnoredByProjectiles(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-s32 SurfaceType_IsFloorConveyor(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-s32 func_800C9DDC(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 SurfaceType_GetConveyorSpeed(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 SurfaceType_GetConveyorDirection(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-u32 SurfaceType_IsWallDamage(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-s32 WaterBox_GetSurfaceImpl(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox, s32* bgId);
-s32 WaterBox_GetSurface1(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox);
-s32 WaterBox_GetSurface1_2(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox);
-s32 WaterBox_GetSurface2(PlayState* play, CollisionContext* colCtx, Vec3f* pos, f32 surfaceCheckDist, WaterBox** outWaterBox, s32* bgId);
-f32 func_800CA568(CollisionContext* colCtx, s32 waterBoxId, s32 bgId);
-u16 WaterBox_GetBgCamSetting(CollisionContext* colCtx, WaterBox* waterBox, s32 bgId);
-void WaterBox_GetSceneBgCamSetting(CollisionContext* colCtx, WaterBox* waterBox);
-u32 WaterBox_GetLightSettingIndex(CollisionContext* colCtx, WaterBox* waterBox);
-s32 func_800CA6F0(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox, s32* bgId);
-s32 func_800CA9D0(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox);
-s32 func_800CAA14(CollisionPoly* polyA, CollisionPoly* polyB, Vec3f* pointA, Vec3f* pointB, Vec3f* closestPoint);
-void BgCheck2_UpdateActorPosition(CollisionContext* colCtx, s32 bgId, Actor* actor);
-void BgCheck2_UpdateActorYRotation(CollisionContext* colCtx, s32 bgId, Actor* actor);
-void BgCheck2_AttachToMesh(CollisionContext* colCtx, Actor* actor, s32 bgId);
-u32 BgCheck2_UpdateActorAttachedToMesh(CollisionContext* colCtx, s32 bgId, Actor* actor);
-void DynaPolyActor_Init(DynaPolyActor* dynaActor, s32 flags);
+void DynaPolyActor_UpdateCarriedActorPos(CollisionContext* colCtx, s32 bgId, Actor* carriedActor);
+void DynaPolyActor_UpdateCarriedActorRotY(CollisionContext* colCtx, s32 bgId, Actor* carriedActor);
+void DynaPolyActor_AttachCarriedActor(CollisionContext* colCtx, Actor* carriedActor, s32 bgId);
+u32 DynaPolyActor_TransformCarriedActor(CollisionContext* colCtx, s32 bgId, Actor* carriedActor);
+void DynaPolyActor_Init(DynaPolyActor* dynaActor, s32 transformFlags);
void DynaPolyActor_LoadMesh(PlayState* play, DynaPolyActor* dynaActor, CollisionHeader* meshHeader);
-void DynaPolyActor_ResetState(DynaPolyActor* dynaActor);
-void DynaPolyActor_SetRidingFallingState(DynaPolyActor* dynaActor);
-void DynaPolyActor_SetRidingMovingState(DynaPolyActor* dynaActor);
-void DynaPolyActor_SetRidingMovingStateByIndex(CollisionContext* colCtx, s32 bgId);
-void DynaPolyActor_SetRidingRotatingState(DynaPolyActor* dynaActor);
-void DynaPolyActor_SetRidingRotatingStateByIndex(CollisionContext* colCtx, s32 bgId);
-void DynaPolyActor_SetSwitchPressedState(DynaPolyActor* dynaActor);
-void DynaPolyActor_SetHeavySwitchPressedState(DynaPolyActor* dynaActor);
-s32 DynaPolyActor_IsInRidingFallingState(DynaPolyActor* dynaActor);
-s32 DynaPolyActor_IsInRidingMovingState(DynaPolyActor* dynaActor);
-s32 DynaPolyActor_IsInRidingRotatingState(DynaPolyActor* dynaActor);
-s32 DynaPolyActor_IsInSwitchPressedState(DynaPolyActor* dynaActor);
-s32 DynaPolyActor_IsInHeavySwitchPressedState(DynaPolyActor* dynaActor);
+void DynaPolyActor_UnsetAllInteractFlags(DynaPolyActor* dynaActor);
+void DynaPolyActor_SetActorOnTop(DynaPolyActor* dynaActor);
+void DynaPolyActor_SetPlayerOnTop(DynaPolyActor* dynaActor);
+void DynaPoly_SetPlayerOnTop(CollisionContext* colCtx, s32 bgId);
+void DynaPolyActor_SetPlayerAbove(DynaPolyActor* dynaActor);
+void DynaPoly_SetPlayerAbove(CollisionContext* colCtx, s32 bgId);
+void DynaPolyActor_SetActorOnSwitch(DynaPolyActor* dynaActor);
+void DynaPolyActor_SetActorOnHeavySwitch(DynaPolyActor* dynaActor);
+s32 DynaPolyActor_IsActorOnTop(DynaPolyActor* dynaActor);
+s32 DynaPolyActor_IsPlayerOnTop(DynaPolyActor* dynaActor);
+s32 DynaPolyActor_IsPlayerAbove(DynaPolyActor* dynaActor);
+s32 DynaPolyActor_IsSwitchPressed(DynaPolyActor* dynaActor);
+s32 DynaPolyActor_IsHeavySwitchPressed(DynaPolyActor* dynaActor);
s32 DynaPolyActor_ValidateMove(PlayState* play, DynaPolyActor* dynaActor, s16 startRadius, s16 endRadius, s16 startHeight);
-// void func_800CBC84(void);
-// void func_800CBFA4(void);
-// void func_800CC000(void);
-// void func_800CC128(void);
-// void func_800CC1C4(void);
-// void func_800CC260(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE2 param_6);
-// void func_800CC488(void);
-// void func_800CC56C(void);
-// void func_800CC5C8(void);
-// void Camera_GetBgCamOrActorCsCamSetting(void);
-// void Camera_GetBgCamOrActorCsCamFuncData(void);
-// void Camera_GetBgCamIndex(void);
-// void Camera_GetWaterBoxBgCamSetting(void);
-// void func_800CC938(void);
-// void func_800CC958(void);
-// void func_800CC9C0(void);
-// void func_800CCCEC(void);
-// void func_800CD04C(void);
-// void func_800CD288(void);
-// void func_800CD2E0(void);
-// void func_800CD2F0(void);
-// void func_800CD3E4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
-// void func_800CD44C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5);
-// void func_800CD634(void);
-// void func_800CD6CC(void);
-// void func_800CD6F8(void);
-// void func_800CD834(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
-// void func_800CDA14(void);
-// void func_800CDB6C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE2 param_6);
-// void func_800CDE6C(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_TYPE2 param_8);
-// void func_800CE2B8(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_TYPE2 param_9);
-// void func_800CE5E0(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5);
-// void func_800CE79C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5);
-// void func_800CE930(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5);
-// void func_800CEAD8(void);
-// void func_800CEC38(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
-// void func_800CED90(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);
-s32 Camera_ModeNop(Camera* camera);
-s32 Camera_ModeNORM1(Camera* camera);
-s32 Camera_ModeNORM2(Camera* camera);
-s32 Camera_ModeNORM3(Camera* camera);
-s32 Camera_ModeNORM4(Camera* camera);
-s32 Camera_ModeNORM0(Camera* camera);
-s32 Camera_ModePARA1(Camera* camera);
-s32 Camera_ModePARA2(Camera* camera);
-s32 Camera_ModePARA3(Camera* camera);
-s32 Camera_ModePARA4(Camera* camera);
-s32 Camera_ModePARA0(Camera* camera);
-s32 Camera_ModeJUMP1(Camera* camera);
-s32 Camera_ModeJUMP2(Camera* camera);
-s32 Camera_ModeJUMP3(Camera* camera);
-s32 Camera_ModeJUMP4(Camera* camera);
-s32 Camera_ModeJUMP0(Camera* camera);
-s32 Camera_ModeBATT1(Camera* camera);
-s32 Camera_ModeBATT2(Camera* camera);
-s32 Camera_ModeBATT3(Camera* camera);
-s32 Camera_ModeBATT4(Camera* camera);
-s32 Camera_ModeBATT0(Camera* camera);
-s32 Camera_ModeKEEP1(Camera* camera);
-s32 Camera_ModeKEEP2(Camera* camera);
-s32 Camera_ModeKEEP3(Camera* camera);
-s32 Camera_ModeKEEP4(Camera* camera);
-// void func_800D7C44(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE1 param_5, UNK_TYPE1 param_6, UNK_TYPE1 param_7, UNK_TYPE1 param_8, UNK_TYPE1 param_9, UNK_TYPE1 param_10, UNK_TYPE2 param_11, UNK_TYPE2 param_12);
-s32 Camera_ModeKEEP0(Camera* camera);
-s32 Camera_ModeFIXD1(Camera* camera);
-s32 Camera_ModeFIXD2(Camera* camera);
-s32 Camera_ModeFIXD3(Camera* camera);
-s32 Camera_ModeFIXD4(Camera* camera);
-s32 Camera_ModeFIXD0(Camera* camera);
-s32 Camera_ModeSUBJ1(Camera* camera);
-s32 Camera_ModeSUBJ2(Camera* camera);
-s32 Camera_ModeSUBJ3(Camera* camera);
-s32 Camera_ModeSUBJ4(Camera* camera);
-s32 Camera_ModeSUBJ0(Camera* camera);
-s32 Camera_ModeDATA0(Camera* camera);
-s32 Camera_ModeDATA1(Camera* camera);
-s32 Camera_ModeDATA2(Camera* camera);
-s32 Camera_ModeDATA3(Camera* camera);
-s32 Camera_ModeDATA4(Camera* camera);
-s32 Camera_ModeUNIQ1(Camera* camera);
-s32 Camera_ModeUNIQ2(Camera* camera);
-s32 Camera_ModeUNIQ3(Camera* camera);
-s32 Camera_ModeUNIQ4(Camera* camera);
-s32 Camera_ModeUNIQ5(Camera* camera);
-s32 Camera_ModeUNIQ0(Camera* camera);
-s32 Camera_ModeUNIQ6(Camera* camera);
-s32 Camera_ModeUNIQ7(Camera* camera);
-s32 Camera_ModeUNIQ8(Camera* camera);
-s32 Camera_ModeUNIQ9(Camera* camera);
-s32 Camera_ModeDEMO1(Camera* camera);
-s32 Camera_ModeDEMO2(Camera* camera);
-s32 Camera_ModeDEMO3(Camera* camera);
-s32 Camera_ModeDEMO4(Camera* camera);
-s32 Camera_ModeDEMO5(Camera* camera);
-s32 Camera_ModeDEMO6(Camera* camera);
-s32 Camera_ModeDEMO7(Camera* camera);
-s32 Camera_ModeDEMO8(Camera* camera);
-s32 Camera_ModeDEMO9(Camera* camera);
-s32 Camera_ModeDEMO0(Camera* camera);
-s32 Camera_ModeSPEC0(Camera* camera);
-s32 Camera_ModeSPEC1(Camera* camera);
-s32 Camera_ModeSPEC2(Camera* camera);
-s32 Camera_ModeSPEC3(Camera* camera);
-s32 Camera_ModeSPEC4(Camera* camera);
-s32 Camera_ModeSPEC5(Camera* camera);
-s32 Camera_ModeSPEC6(Camera* camera);
-s32 Camera_ModeSPEC7(Camera* camera);
-s32 Camera_ModeSPEC8(Camera* camera);
-s32 Camera_ModeSPEC9(Camera* camera);
Camera* Camera_Alloc(View* view, CollisionContext* bg, PlayState* play);
void Camera_Free(Camera* camera);
void Camera_Init(Camera* camera, View* view, CollisionContext* bg, PlayState* play);
@@ -1084,10 +812,10 @@ Vec3s* Camera_Update(Vec3s* param_1, Camera* camera);
// void func_800DF498(void);
u32 Camera_SetMode(Camera* camera, s16 mode, s8 param_3);
s32 Camera_ChangeMode(Camera* camera, s16 mode);
-// void func_800DF86C(void);
+s32 func_800DF86C(Camera* camera, s16 arg1);
// void func_800DF8EC(void);
s32 Camera_ChangeSetting(Camera* camera, s16 setting);
-u32 Camera_ChangeDataIdx(Camera* camera, u32 camDataIdx);
+s32 Camera_ChangeDataIdx(Camera* camera, s32 camDataIdx);
// void func_800DFC1C(void);
// void func_800DFC40(void);
s32 Camera_GetInputDirYaw(Camera* camera);
@@ -1097,22 +825,23 @@ s16 Camera_GetCamDirYaw(Camera* camera);
void Camera_AddQuake(Camera* camera, s32 arg1, s16 y, s32 countdown);
s32 Camera_SetViewParam(Camera* camera, s32 viewFlag, void* param);
// UNK_TYPE4 func_800DFEF0(s32 param_1, u16 param_2);
-// UNK_TYPE4 func_800DFF18(Camera* iParm1, UNK_TYPE2 uParm2);
+void func_800DFF18(Camera* camera, s32 arg1);
// UNK_TYPE4 func_800DFF34(s32 param_1);
// UNK_TYPE4 func_800DFF44(void);
s16 Camera_SetFlags(Camera* iParm1, s16 flags);
s16 Camera_ClearFlags(Camera* camera, s16 flags);
-s32 Camera_ChangeDoorCam(Camera* camera, Actor* doorActor, s16 bgCamDataId, f32 arg3, s16 timer1, s16 timer2, s16 timer3);
+s32 Camera_ChangeDoorCam(Camera* camera, Actor* doorActor, s16 bgCamIndex, f32 arg3, s16 timer1, s16 timer2, s16 timer3);
s32 Camera_Copy(Camera* dstCamera, Camera* srcCamera);
// UNK_TYPE4 func_800E01AC(void);
Vec3f* Camera_GetQuakeOffset(Vec3f* dst, Camera* camera);
// void func_800E01DC(s32 param_1, u32 param_2, UNK_TYPE4 param_3, UNK_TYPE4 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6);
// UNK_TYPE4 func_800E0228(void);
-// void func_800E0238(void);
+void func_800E0238(Camera* camera);
void Camera_SetToTrackActor(Camera* camera, Actor* actor);
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);
@@ -1334,81 +1063,17 @@ s32 Actor_TrackPoint(Actor* actor, Vec3f* target, Vec3s* headRot, Vec3s* torsoRo
s32 Actor_TrackPlayerSetFocusHeight(PlayState* play, Actor* actor, Vec3s* headRot, Vec3s* torsoRot, f32 focusHeight);
s32 Actor_TrackPlayer(PlayState* play, Actor* actor, Vec3s* headRot, Vec3s* torsoRot, Vec3f focusPos);
void SaveContext_Init(void);
-void GameInfo_Init(void);
-// void DebugDisplay_Init(void);
-DebugDispObject* DebugDisplay_AddObject(f32 posX, f32 posY, f32 posZ, s16 rotX, s16 rotY, s16 rotZ, f32 scaleX, f32 scaleY, f32 scaleZ, u8 red, u8 green, u8 blue, u8 alpha, s16 type, GraphicsContext* gfxCtx);
-// void func_800E9C90(void);
-// void func_800E9CA0(s32 param_1, UNK_TYPE1 param_2, s8* param_3);
-// void func_800E9CFC(void);
-// void func_800E9DBC(void);
-// void func_800E9E94(void);
-void func_800E9F78(GraphicsContext* gfxCtx);
-
-void Cutscene_Init(PlayState* play, CutsceneContext* csCtx);
-void Cutscene_Start(PlayState* play, CutsceneContext* csCtx);
-void Cutscene_End(PlayState* play, CutsceneContext* csCtx);
-void Cutscene_Update1(PlayState* play, CutsceneContext* csCtx);
-void Cutscene_Update2(PlayState* play, CutsceneContext* csCtx);
-void func_800EDBE0(PlayState* play);
-void func_800EDDB0(PlayState* play);
-void Cutscene_LoadCutsceneData(PlayState* play, u8 csIndex);
-void Cutscene_ActorTranslate(Actor* actor, PlayState* play, s32 actorActionIndex);
-void Cutscene_ActorTranslateAndYaw(Actor* actor, PlayState* play, s32 actorActionIndex);
-void Cutscene_ActorTranslateAndYawSmooth(Actor* actor, PlayState* play, s32 actorActionIndex);
-void Cutscene_ActorTranslateXZAndYawSmooth(Actor* actor, PlayState* play, s32 actorActionIndex);
-s32 Cutscene_GetSceneLayer(PlayState* play);
-s32 Cutscene_GetActorActionIndex(PlayState* play, u16 actorActionCmd);
-s32 Cutscene_CheckActorAction(PlayState* play, u16 actorActionCmd);
-u8 Cutscene_IsPlaying(PlayState* play);
void GetItem_Draw(PlayState* play, s16 drawId);
-void EffFootmark_Init(PlayState* play);
-void EffFootmark_Add(PlayState* play, MtxF* displayMatrix, Actor* actor, u8 id, Vec3f* location, u16 size, u8 red, u8 green, u8 blue, u16 alpha, u16 alphaChange, u16 fadeoutDelay);
-void EffFootmark_Update(PlayState* play);
-void EffFootmark_Draw(PlayState* play);
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 ElfMessage_GetFirstCycleHint(PlayState* play);
+u16 QuestHint_GetTatlTextId(PlayState* play);
u16 Text_GetFaceReaction(PlayState* play, u32 reactionSet);
-void EnvFlags_UnsetAll(PlayState* play);
-void EnvFlags_Set(PlayState* play, s16 flag);
-void EnvFlags_Unset(PlayState* play, s16 flag);
-s32 EnvFlags_Get(PlayState* play, s16 flag);
-s16 func_800F1460(s16 param_1);
-ActorCutscene* ActorCutscene_GetCutsceneImpl(s16 index);
-void ActorCutscene_Init(PlayState* play, ActorCutscene* cutscenes, s32 num);
-void func_800F15D8(Camera* camera);
-// void ActorCutscene_ClearWaiting(void);
-// void ActorCutscene_ClearNextCutscenes(void);
-// void ActorCutscene_MarkNextCutscenes(void);
-// void ActorCutscene_End(void);
-// void ActorCutscene_Update(void);
-void ActorCutscene_SetIntentToPlay(s16 index);
-s16 ActorCutscene_GetCanPlayNext(s16 index);
-s16 ActorCutscene_StartAndSetUnkLinkFields(s16 index, Actor* actor);
-s16 ActorCutscene_StartAndSetFlag(s16 index, Actor* actor);
-s16 ActorCutscene_Start(s16 index, Actor* actor);
-s16 ActorCutscene_Stop(s16 index);
-s16 ActorCutscene_GetCurrentIndex(void);
-ActorCutscene* ActorCutscene_GetCutscene(s16 index);
-s16 ActorCutscene_GetAdditionalCutscene(s16 index);
-s16 ActorCutscene_GetLength(s16 index);
-s32 func_800F2138(s32 arg0);
-s32 func_800F2178(s16 arg0);
-s16 ActorCutscene_GetCurrentSubCamId(s16 index);
-s16 func_800F21CC(void);
-s32 func_800F22C4(s16 param_1, Actor* actor);
-void ActorCutscene_SetReturnCamera(s16 index);
-void FireObj_SetPosition(FireObj* fire, Vec3f* pos);
-void FireObj_Draw(PlayState* play, FireObj* fire);
-void FireObj_Init(PlayState* play, FireObj* fire, FireObjInitParams* init, Actor* actor);
-void FireObj_Destroy(PlayState* play, FireObj* fire);
-void FireObj_SetState2(FireObj* fire, f32 dynamicSizeStep, u8 newState);
-void FireObj_Update(PlayState* play, FireObj* fire, Actor* actor);
+
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);
@@ -1431,13 +1096,13 @@ void Font_LoadMessageBoxEndIcon(Font* font, u16 icon);
void Font_LoadOrderedFont(Font* font);
// void func_800F5090(void);
// void func_800F50D4(void);
-void Kankyo_Init(PlayState* play, EnvironmentContext* envCtx);
+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);
// void func_800F5B10(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5);
-// void func_800F5CD0(void);
+void Environment_UpdateSkybox(u8 skyboxId, EnvironmentContext* envCtx, SkyboxContext* skyboxCtx);
void func_800F6834(PlayState* play, s32 waterLightsIndex);
-// void func_800F694C(void);
+void func_800F694C(PlayState* play);
// void func_800F6A04(void);
// void func_800F6A40(void);
// void func_800F6AB8(void);
@@ -1450,13 +1115,15 @@ void func_800F6FF8(PlayState* play, EnvironmentContext* envCtx, LightContext* li
// void func_800F88C4(void);
// void func_800F8970(void);
// void func_800F8A9C(void);
-// void func_800F8CD4(PlayState* play, EnvironmentContext* envCtx, LightContext* lightCtx, s32 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6);
+void Environment_Update(PlayState* play, EnvironmentContext* envCtx, LightContext* lightCtx,
+ PauseContext* pauseCtx, MessageContext* msgCtx, GameOverContext* gameOverCtx,
+ GraphicsContext* gfxCtx);
// void func_800F8D84(void);
-// void func_800F9728(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);
+void Environment_DrawSunLensFlare(PlayState* play, EnvironmentContext* envCtx, View* view, GraphicsContext* gfxCtx, Vec3f pos);
void func_800F9824(PlayState* play, EnvironmentContext* envCtx, View* view, GraphicsContext* gfxCtx, Vec3f vec, f32 arg5, f32 arg6, s8 arg7, s8 arg8);
// void func_800FA39C(void);
// void func_800FA3C4(void);
-// void func_800FA9FC(void);
+void Environment_DrawRain(PlayState* play, View* view, GraphicsContext* gfxCtx);
void func_800FAAB4(PlayState* play, u8 arg1);
// void func_800FAC20(void);
// void func_800FAF74(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE1 param_5);
@@ -1465,13 +1132,13 @@ void Environment_AddLightningBolts(PlayState* play, u8 num);
// void func_800FB388(void);
void func_800FB758(PlayState* play);
// void func_800FB9B4(void);
-// void func_800FBCBC(void);
+void Environment_DrawCustomLensFlare(PlayState* play);
void Kankyo_InitGameOverLights(PlayState* play);
void Kankyo_FadeInGameOverLights(PlayState* play);
void Kankyo_FadeOutGameOverLights(PlayState* play);
// void func_800FC3DC(void);
-void func_800FC444(GraphicsContext* gfxCtx, u8 arg1, u8 arg2, u8 arg3, u8 arg4, UNK_TYPE arg5);
-// void func_800FC64C(void);
+void Environment_FillScreen(GraphicsContext* gfxCtx, u8 red, u8 green, u8 blue, u8 alpha, u8 drawFlags);
+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);
@@ -1482,20 +1149,20 @@ void func_800FD698(PlayState* play, s16 arg1, s16 arg2, f32 arg3);
// void reset_days_elapsed(void);
// u32 get_current_day(void);
void func_800FD750(u16 seqId);
-// void func_800FD768(void);
+s32 func_800FD768(void);
void func_800FD78C(PlayState* play);
void func_800FD858(PlayState* play);
void func_800FD928(s32 param_1);
// void func_800FD980(void);
// void func_800FDAF8(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
// void func_800FDC94(void);
-// void func_800FE390(void);
-// void func_800FE3E0(void);
-void func_800FE484(void);
-void func_800FE498(void);
-// void func_800FE4A8(void);
+void func_800FE390(PlayState* play);
+void func_800FE3E0(PlayState* play);
+void Environment_StopTime(void);
+void Environment_StartTime(void);
+u8 Environment_IsTimeStopped(void);
u32 func_800FE4B8(PlayState* play);
-// void func_800FE590(void);
+s32 func_800FE590(PlayState* play);
// void func_800FE5D0(void);
// UNK_TYPE4 func_800FE610(void);
u32 func_800FE620(PlayState* play);
@@ -1600,11 +1267,11 @@ void Lights_BindPointWithReference(Lights* lights, LightParams* params, Vec3f* p
void Lights_BindPoint(Lights* lights, LightParams* params, PlayState* play);
void Lights_BindDirectional(Lights* lights, LightParams* params, void* unused);
void Lights_BindAll(Lights* lights, LightNode* listHead, Vec3f* refPos, PlayState* play);
-LightNode* Lights_FindBufSlot();
+LightNode* Lights_FindBufSlot(void);
void Lights_FreeNode(LightNode* light);
void LightContext_Init(PlayState* play, LightContext* lightCtx);
void LightContext_SetAmbientColor(LightContext* lightCtx, u8 r, u8 g, u8 b);
-void func_80102544(LightContext* lightCtx, u8 a1, u8 a2, u8 a3, s16 numLights, s16 sp16);
+void LightContext_SetFog(LightContext* lightCtx, u8 r, u8 g, u8 b, s16 near, s16 far);
Lights* LightContext_NewLights(LightContext* lightCtx, GraphicsContext* gfxCtx);
void LightContext_InitList(PlayState* play, LightContext* lightCtx);
void LightContext_DestroyList(PlayState* play, LightContext* lightCtx);
@@ -1622,7 +1289,7 @@ void* ZeldaArena_Calloc(u32 num, size_t size);
void ZeldaArena_GetSizes(size_t* outMaxFree, size_t* outFree, size_t* outAlloc);
s32 ZeldaArena_Check();
void ZeldaArena_Init(void* start, size_t size);
-void ZeldaArena_Cleanup();
+void ZeldaArena_Cleanup(void);
u8 ZeldaArena_IsInitialized();
// void func_80102E40(void);
// void func_80102E90(void);
@@ -1664,7 +1331,7 @@ void func_80106644(PlayState* play, s16 arg1, s16 arg2, s16 arg3);
// void func_8010683C(void);
// void func_801068B4(void);
// void func_801068D8(void);
-// void func_801068FC(void);
+void* func_801068FC(PlayState* play, void* arg1, size_t size);
// void func_80106BEC(void);
// void func_80106D08(void);
// void func_80106D5C(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);
@@ -1677,7 +1344,7 @@ void func_80108AF8(PlayState* play);
s32 func_801090B0(s32 arg0);
s32 func_80109124(s16 arg0);
// void func_801091F0(void);
-// void func_80109428(void);
+void func_80109428(PlayState* play);
// void func_801094A0(void);
// void func_801094C8(void);
// void func_801094F8(void);
@@ -1729,9 +1396,9 @@ s32 func_8010A0A4(PlayState* play);
void Minimap_SavePlayerRoomInitInfo(PlayState* play);
void Map_InitRoomData(PlayState* play, s16 room);
void Map_Destroy(PlayState* play);
-// void Map_Init(PlayState* play);
-// void Minimap_Draw(PlayState* play);
-// void Map_Update(PlayState* play);
+void Map_Init(PlayState* play);
+void Minimap_Draw(PlayState* play);
+void Map_Update(PlayState* play);
// void func_8010A760(void);
// void func_8010A7CC(void);
// void func_8010A814(void);
@@ -1783,7 +1450,7 @@ void Map_Destroy(PlayState* play);
// void func_8010BEBC(void);
// void func_8010BEF0(void);
// void func_8010BF24(void);
-s32 func_8010BF58(Actor* actor, PlayState* play, s32* param_3, UNK_PTR param_4, s32* param_5);
+s32 func_8010BF58(Actor* actor, PlayState* play, void* param_3, UNK_PTR param_4, s32* param_5);
void Nmi_Init(void);
void Nmi_SetPrenmiStart(void);
// s32 Nmi_GetPrenmiHasStarted(void);
@@ -1806,27 +1473,23 @@ Vec3f* OLib_Vec3fDiffDegF(Vec3f* dest, Vec3f* a, Vec3f* b);
Vec3s* OLib_Vec3fDiffBinAng(Vec3s* dest, Vec3f* a, Vec3f* b);
void OLib_DbCameraVec3fDiff(PosRot* a, Vec3f* b, Vec3f* dest, s16 mode);
void OLib_DbCameraVec3fSum(PosRot* a, Vec3f* b, Vec3f* dest, s16 mode);
-Gfx* func_8010CB80(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy);
-Gfx* func_8010CD98(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy);
-// void func_8010CFBC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9, UNK_TYPE2 param_10, UNK_TYPE2 param_11, UNK_TYPE2 param_12, UNK_TYPE2 param_13, UNK_TYPE2 param_14);
-// void func_8010D2D4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9, UNK_TYPE2 param_10, UNK_TYPE2 param_11);
-// void func_8010D480(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9, UNK_TYPE2 param_10, UNK_TYPE2 param_11, UNK_TYPE2 param_12, UNK_TYPE2 param_13, UNK_TYPE2 param_14, UNK_TYPE4 param_15, UNK_TYPE4 param_16);
-Gfx* func_8010D7D0(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy);
-// void func_8010D9F4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9, UNK_TYPE4 param_10, UNK_TYPE4 param_11, UNK_TYPE4 param_12, UNK_TYPE2 param_13, UNK_TYPE2 param_14);
-Gfx* func_8010DC58(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, u16 i);
-Gfx* func_8010DE38(Gfx* gfx, TexturePtr texture, s32 fmt, s16 textureWidth, s16 textureHeight, u16 point);
-// void func_8010E028(void);
+
+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 func_8010EE74(PlayState* play, s32 day);
+void Interface_NewDay(PlayState* play, s32 day);
void Interface_SetHudVisibility(u16 hudVisibility);
-// void func_80110038(void);
-// void func_80111CB4(void);
-// void func_801129E4(void);
-void func_80112AFC(PlayState* play);
+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 func_80112C0C(void);
+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);
@@ -1838,12 +1501,10 @@ 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_801153C8(void);
-// void func_80115428(void);
-void func_8011552C(PlayState* play, s16 arg1);
-// void func_801155B4(void);
-// void func_80115764(void);
-void func_80115844(PlayState* play, s16 param_2);
+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);
@@ -1851,43 +1512,23 @@ 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 func_80116FD8(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
-// void func_801170B8(void);
-// void func_80117100(void);
-// void func_80117A20(void);
-// void func_80117BD0(void);
-// void func_80118084(void);
-// void func_80118890(void);
-// void func_80118BA4(void);
-// void func_80119030(void);
-// void func_80119610(void);
-void func_8011B4E0(PlayState* play, s32 arg1);
-// void func_8011B5C0(void);
-// void func_8011B9E0(void);
-// void func_8011BF70(void);
-// void func_8011C4C4(void);
+void Interface_SetPerfectLetters(PlayState* play, s16 perfectLettersType);
void Interface_StartMoonCrash(PlayState* play);
-// void func_8011E730(void);
-// void func_8011F0E0(UNK_TYPE4 ctxt);
-// void func_80120F90(void);
-// void func_80121000(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_TYPE1 param_8, UNK_TYPE1 param_9, UNK_TYPE1 param_10, UNK_TYPE4 param_11, UNK_TYPE4 param_12, UNK_TYPE4 param_13, UNK_TYPE4 param_14);
-// void func_80121064(void);
-// void func_801210E0(void);
+void Interface_Draw(PlayState* play);
+void Interface_Update(PlayState* play);
void Interface_Destroy(PlayState* play);
-void func_80121FC4(PlayState* play);
+void Interface_Init(PlayState* play);
+
Path* Path_GetByIndex(PlayState* play, s16 index, s16 max);
f32 Path_OrientAndGetDistSq(Actor* actor, Path* path, s16 waypoint, s16* yaw);
void Path_CopyLastPoint(Path* path, Vec3f* dest);
-void FrameAdvance_Init(FrameAdvanceContext* frameAdvCtx);
-s32 FrameAdvance_Update(FrameAdvanceContext* frameAdvCtx, Input* input);
-
s32 func_801226E0(PlayState* play, s32 arg1);
s32 func_80122744(PlayState* play, struct_80122744_arg1* arg1, u32 arg2, Vec3s* arg3);
s32 func_80122760(PlayState* play, struct_80122744_arg1* arg1, f32 arg2);
void func_80122868(PlayState* play, Player* player);
void func_801229A0(PlayState* play, Player* player);
-void func_801229EC(UNK_TYPE arg0, UNK_TYPE arg1);
+void func_801229EC(Actor* thisx, PlayState* play);
void func_801229FC(Player* player);
void func_80122BA4(PlayState* play, struct_80122D44_arg1* arg1, s32 arg2, s32 alpha);
void func_80122C20(PlayState* play, struct_80122D44_arg1* arg1);
@@ -1898,7 +1539,7 @@ void func_80122F28(Player* player);
s32 func_80122F9C(PlayState* play);
s32 func_80122FCC(PlayState* play);
void func_8012300C(PlayState* play, s32 arg1);
-void func_8012301C(Player* player, PlayState* play2);
+void func_8012301C(Actor* thisx, PlayState* play2);
void func_80123140(PlayState* play, Player* player);
s32 Player_InBlockingCsMode(PlayState* play, Player* player);
s32 Player_InCsMode(PlayState* play);
@@ -1908,15 +1549,15 @@ s32 func_80123448(PlayState* play);
s32 Player_IsGoronOrDeku(Player* player);
s32 func_801234D4(PlayState* play);
s32 func_80123590(PlayState* play, Actor* actor);
-s32 func_8012364C(PlayState* play, Player* player, s32 arg2);
-s32 func_80123810(PlayState* play);
-s32 Player_ActionToModelGroup(Player* player, s32 actionParam);
-void func_801239AC(Player* player);
-void Player_SetModels(Player* player, s32 modelGroup);
-void Player_SetModelGroup(Player* player, s32 modelGroup);
+ItemId func_8012364C(PlayState* play, Player* player, s32 arg2);
+PlayerItemAction func_80123810(PlayState* play);
+PlayerModelGroup Player_ActionToModelGroup(Player* player, PlayerItemAction itemAction);
+void Player_SetModelsForHoldingShield(Player* player);
+void Player_SetModels(Player* player, PlayerModelGroup modelGroup);
+void Player_SetModelGroup(Player* player, PlayerModelGroup modelGroup);
void func_80123C58(Player* player);
void Player_SetEquipmentData(PlayState* play, Player* player);
-void func_80123D50(PlayState* play, Player* player, s32 itemId, s32 actionParam);
+void Player_UpdateBottleHeld(PlayState* play, Player* player, ItemId itemId, PlayerItemAction itemAction);
void func_80123DA4(Player* player);
void func_80123DC0(Player* player);
void func_80123E90(PlayState* play, Actor* actor);
@@ -1929,34 +1570,34 @@ s32 Player_HasMirrorShieldEquipped(PlayState* play);
s32 Player_IsHoldingMirrorShield(PlayState* play);
s32 Player_IsHoldingHookshot(Player* player);
s32 func_801240DC(Player* player);
-s32 func_80124110(Player* player, s32 actionParam);
-s32 func_80124148(Player* player);
-s32 Player_ActionToMeleeWeapon(s32 actionParam);
-s32 Player_GetMeleeWeaponHeld(Player* player);
+PlayerBButtonSword Player_BButtonSwordFromIA(Player* player, PlayerItemAction itemAction);
+PlayerBButtonSword Player_GetHeldBButtonSword(Player* player);
+PlayerMeleeWeapon Player_MeleeWeaponFromIA(PlayerItemAction itemAction);
+PlayerMeleeWeapon Player_GetMeleeWeaponHeld(Player* player);
s32 Player_IsHoldingTwoHandedWeapon(Player* player);
-s32 Player_ActionToBottle(Player* player, s32 actionParam);
-s32 Player_GetBottleHeld(Player* Player);
-s32 Player_ActionToExplosive(Player* player, s32 actionParam);
-s32 Player_GetExplosiveHeld(Player* player);
-s32 func_80124278(Actor* actor, s32 actionParam);
+PlayerBottle Player_BottleFromIA(Player* player, PlayerItemAction itemAction);
+PlayerBottle Player_GetBottleHeld(Player* Player);
+PlayerExplosive Player_ExplosiveFromIA(Player* player, PlayerItemAction itemAction);
+PlayerExplosive Player_GetExplosiveHeld(Player* player);
+PlayerSword Player_SwordFromIA(Player* player, PlayerItemAction itemAction);
s32 func_801242B4(Player* player);
-s32 Player_GetEnvTimerType(PlayState* play);
-void func_80124420(Player* player);
+s32 Player_GetEnvironmentalHazard(PlayState* play);
+void Player_UpdateBunnyEars(Player* player);
void func_80124618(struct_80124618 arg0[], f32 curFrame, Vec3f* arg2);
-void func_801246F4(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, s32 lod, s32 tunic, s32 boots, s32 face, OverrideLimbDrawFlex overrideLimbDraw, PostLimbDrawFlex postLimbDraw, Actor* actor);
+void Player_DrawImpl(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, s32 lod, PlayerTransformation playerForm, s32 boots, s32 face, OverrideLimbDrawFlex overrideLimbDraw, PostLimbDrawFlex postLimbDraw, Actor* actor);
void func_80125318(Vec3f* arg0, Vec3s* arg1);
void Player_DrawZoraShield(PlayState* play, Player* player);
void func_80125500(PlayState* play, Player* player, s32 limbIndex, Vec3f* pos, Vec3s* rot);
-s32 func_80125D4C(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* actor);
-s32 func_801262C8(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* actor);
-s32 func_801263FC(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx);
-s32 func_80126440(PlayState* play, ColliderQuad* collider, WeaponInfo* weaponInfo, Vec3f* arg3, Vec3f* arg4);
+s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* actor);
+s32 Player_OverrideLimbDrawGameplayFirstPerson(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* actor);
+s32 Player_OverrideLimbDrawGameplayCrawling(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx);
+s32 func_80126440(PlayState* play, ColliderQuad* collider, WeaponInfo* weaponInfo, Vec3f* newTip, Vec3f* newBase);
void Player_DrawGetItem(PlayState* play, Player* player);
void func_80126B8C(PlayState* play, Player* player);
s32 func_80127438(PlayState* play, Player* player, s32 currentMask);
s32 func_80128640(PlayState* play, Player* player, Gfx* dlist);
-void func_80128B74(PlayState* play, Player* player, s32 limbIndex);
-void func_80128BD0(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dList2, Vec3s* rot, Actor* actor);
+void Player_SetFeetPos(PlayState* play, Player* player, s32 limbIndex);
+void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dList2, Vec3s* rot, Actor* actor);
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);
@@ -2038,19 +1679,14 @@ Gfx* Gfx_PrimColor(GraphicsContext* gfxCtx, s32 lodfrac, s32 r, s32 g, s32 b, s3
void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g, u8 b);
void func_8012D374(GraphicsContext* gfxCtx, u8 r, u8 g, u8 b);
void func_8012D40C(f32* param_1, f32* param_2, s16* param_3);
-void Room_nop8012D510(PlayState* play, Room* room, UNK_PTR param_3, UNK_TYPE1 param_4);
-void Room_DrawType3Mesh(PlayState* play, Room* room, u32 flags);
-void Room_DrawType0Mesh(PlayState* play, Room* room, u32 flags);
-void Room_DrawType2Mesh(PlayState* play, Room* room, u32 flags);
-void func_8012DEE8(PlayState* play, Room* room, u32 flags);
-u32 func_8012E254(s32 param_1, PlayState* play);
-void func_8012E32C(PlayState* play, Room* room, u32 flags);
-void Room_DrawType1Mesh(PlayState* play, Room* room, u32 flags);
+
+void Room_Noop(PlayState* play, Room* room, Input* input, s32 arg3);
void Room_Init(PlayState* play, RoomContext* roomCtx);
-u32 Room_AllocateAndLoad(PlayState* play, RoomContext* roomCtx);
+size_t Room_AllocateAndLoad(PlayState* play, RoomContext* roomCtx);
s32 Room_StartRoomTransition(PlayState* play, RoomContext* roomCtx, s32 index);
s32 Room_HandleLoadCallbacks(PlayState* play, RoomContext* roomCtx);
void Room_Draw(PlayState* play, Room* room, u32 flags);
+
void func_8012EBF8(PlayState* play, RoomContext* roomCtx);
s32 Inventory_GetBtnBItem(PlayState* play);
void Inventory_ChangeEquipment(s16 value);
@@ -2069,43 +1705,43 @@ 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_HeaderCmdSpawnList(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmdActorList(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmdActorCutsceneCamList(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmdColHeader(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmdRoomList(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmdEntranceList(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmdSpecialFiles(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmdRoomBehavior(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmdMesh(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmdObjectList(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmdLightList(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmdPathList(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmdTransiActorList(PlayState* play, SceneCmd* cmd);
+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 Door_InitContext(GameState* gameState, DoorContext* doorCtx);
-void Scene_HeaderCmdEnvLightSettings(PlayState* play, SceneCmd* cmd);
+void Scene_CommandEnvLightSettings(PlayState* play, SceneCmd* cmd);
void Scene_LoadAreaTextures(PlayState* play, s32 fileIndex);
-void Scene_HeaderCmdSkyboxSettings(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmdSkyboxDisables(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmdTimeSettings(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmdWindSettings(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmdExitList(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmd09(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmdSoundSettings(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmdEchoSetting(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmdAltHeaderList(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmdCutsceneList(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmdActorCutsceneList(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmdMiniMap(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmd1D(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmdMiniMapCompassInfo(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmdSetRegionVisitedFlag(PlayState* play, SceneCmd* cmd);
-void Scene_HeaderCmdAnimatedMaterials(PlayState* play, SceneCmd* cmd);
+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_ProcessHeader(PlayState* play, SceneCmd* header);
+s32 Scene_ExecuteCommands(PlayState* play, SceneCmd* sceneCmd);
u16 Entrance_Create(s32 scene, s32 spawn, s32 layer);
u16 Entrance_CreateFromSpawn(s32 spawn);
-void Scene_ExecuteDrawConfig(PlayState* play);
+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);
@@ -2146,96 +1782,9 @@ 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);
-void SkelAnime_DrawLimbLod(PlayState* play, s32 limbIndex, void** skeleton, Vec3s* jointTable, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, Actor* actor, s32 lod);
-void SkelAnime_DrawLod(PlayState* play, void** skeleton, Vec3s* jointTable, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, Actor* actor, s32 lod);
-void SkelAnime_DrawFlexLimbLod(PlayState* play, s32 limbIndex, void** skeleton, Vec3s* jointTable, OverrideLimbDrawFlex overrideLimbDraw, PostLimbDrawFlex postLimbDraw, Actor* actor, s32 lod, Mtx** mtx);
-void SkelAnime_DrawFlexLod(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, OverrideLimbDrawFlex overrideLimbDraw, PostLimbDrawFlex postLimbDraw, Actor* actor, s32 lod);
-void SkelAnime_DrawLimbOpa(PlayState* play, s32 limbIndex, void** skeleton, Vec3s* jointTable, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, Actor* actor);
-void SkelAnime_DrawOpa(PlayState* play, void** skeleton, Vec3s* jointTable, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, Actor* actor);
-void SkelAnime_DrawFlexLimbOpa(PlayState* play, s32 limbIndex, void** skeleton, Vec3s* jointTable, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, Actor* actor, Mtx** limbMatricies);
-void SkelAnime_DrawFlexOpa(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, Actor* actor);
-void SkelAnime_DrawTransformFlexLimbOpa(PlayState* play, s32 limbIndex, void** skeleton, Vec3s* jointTable, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, TransformLimbDrawOpa transformLimbDraw, Actor* actor, Mtx** mtx);
-void SkelAnime_DrawTransformFlexOpa(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, TransformLimbDrawOpa transformLimbDraw, Actor* actor);
-void SkelAnime_GetFrameData(AnimationHeader* animation, s32 frame, s32 limbCount, Vec3s* frameTable);
-s16 Animation_GetLength(void* animation);
-s16 Animation_GetLastFrame(void* animation);
-Gfx* SkelAnime_DrawLimb(PlayState* play, s32 limbIndex, void** skeleton, Vec3s* jointTable, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, Actor* actor, Gfx* gfx);
-Gfx* SkelAnime_Draw(PlayState* play, void** skeleton, Vec3s* jointTable, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, Actor* actor, Gfx* gfx);
-Gfx* SkelAnime_DrawFlexLimb(PlayState* play, s32 limbIndex, void** skeleton, Vec3s* jointTable, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, Actor* actor, Mtx** mtx, Gfx* gfx);
-Gfx* SkelAnime_DrawFlex(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, Actor* actor, Gfx* gfx);
-s16 SkelAnime_GetFrameDataLegacy(LegacyAnimationHeader* animation, s32 frame, Vec3s* frameTable);
-s16 Animation_GetLimbCount2(LegacyAnimationHeader* animation);
-s16 Animation_GetLength2(LegacyAnimationHeader* animation);
-s16 Animation_GetLastFrame2(LegacyAnimationHeader* animation);
-void SkelAnime_InterpFrameTable(s32 limbCount, Vec3s* dst, Vec3s* start, Vec3s* target, f32 weight);
-void AnimationContext_Reset(AnimationContext* animationCtx);
-void AnimationContext_SetNextQueue(PlayState* play);
-void AnimationContext_DisableQueue(PlayState* play);
-AnimationEntry* AnimationContext_AddEntry(AnimationContext* animationCtx, AnimationType type);
-void AnimationContext_SetLoadFrame(PlayState* play, LinkAnimationHeader* animation, s32 frame, s32 limbCount, Vec3s* frameTable);
-void AnimationContext_SetCopyAll(PlayState* play, s32 vecCount, Vec3s* dst, Vec3s* src);
-void AnimationContext_SetInterp(PlayState* play, s32 vecCount, Vec3s* base, Vec3s* mod, f32 weight);
-void AnimationContext_SetCopyTrue(PlayState* play, s32 vecCount, Vec3s* dst, Vec3s* src, u8* copyFlag);
-void AnimationContext_SetCopyFalse(PlayState* play, s32 vecCount, Vec3s* dst, Vec3s* src, u8* copyFlag);
-void AnimationContext_SetMoveActor(PlayState* play, Actor* actor, SkelAnime* skelAnime, f32 arg3);
-void AnimationContext_LoadFrame(PlayState* play, AnimationEntryData* data);
-void AnimationContext_CopyAll(PlayState* play, AnimationEntryData* data);
-void AnimationContext_Interp(PlayState* play, AnimationEntryData* data);
-void AnimationContext_CopyTrue(PlayState* play, AnimationEntryData* data);
-void AnimationContext_CopyFalse(PlayState* play, AnimationEntryData* data);
-void AnimationContext_MoveActor(PlayState* play, AnimationEntryData* data);
-void AnimationContext_Update(PlayState* play, AnimationContext* animationCtx);
-void SkelAnime_InitLink(PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeader* skeletonHeaderSeg, LinkAnimationHeader* animation, s32 flags, Vec3s* jointTable, Vec3s* morphTable, s32 limbBufCount);
-void LinkAnimation_SetUpdateFunction(SkelAnime* skelAnime);
-s32 LinkAnimation_Update(PlayState* play, SkelAnime* skelAnime);
-s32 LinkAnimation_Morph(PlayState* play, SkelAnime* skelAnime);
-void LinkAnimation_AnimateFrame(PlayState* play, SkelAnime* skelAnime);
-s32 LinkAnimation_Loop(PlayState* play, SkelAnime* skelAnime);
-s32 LinkAnimation_Once(PlayState* play, SkelAnime* skelAnime);
-void Animation_SetMorph(PlayState* play, SkelAnime* skelAnime, f32 morphFrames);
-void LinkAnimation_Change(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation, f32 playSpeed, f32 startFrame, f32 endFrame, u8 mode, f32 morphFrames);
-void LinkAnimation_PlayOnce(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation);
-void LinkAnimation_PlayOnceSetSpeed(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation, f32 playSpeed);
-void LinkAnimation_PlayLoop(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation);
-void LinkAnimation_PlayLoopSetSpeed(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation, f32 playSpeed);
-void LinkAnimation_CopyJointToMorph(PlayState* play, SkelAnime* skelAnime);
-void LinkAnimation_CopyMorphToJoint(PlayState* play, SkelAnime* skelAnime);
-void LinkAnimation_LoadToMorph(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation, f32 frame);
-void LinkAnimation_LoadToJoint(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation, f32 frame);
-void LinkAnimation_InterpJointMorph(PlayState* play, SkelAnime* skelAnime, f32 weight);
-void LinkAnimation_BlendToJoint(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation1, f32 frame1, LinkAnimationHeader* animation2, f32 frame2, f32 blendWeight, Vec3s* blendTable);
-void LinkAnimation_BlendToMorph(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation1, f32 frame1, LinkAnimationHeader* animation2, f32 frame2, f32 blendWeight, Vec3s* blendTable);
-void LinkAnimation_EndLoop(SkelAnime* skelAnime);
-s32 Animation_OnFrameImpl(SkelAnime* skelAnime, f32 frame, f32 updateRate);
-s32 LinkAnimation_OnFrame(SkelAnime* skelAnime, f32 frame);
-void SkelAnime_Init(PlayState* play, SkelAnime* skelAnime, SkeletonHeader* skeletonHeaderSeg, AnimationHeader* animation, Vec3s* jointTable, Vec3s* morphTable, s32 limbCount);
-void SkelAnime_InitFlex(PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeader* skeletonHeaderSeg, AnimationHeader* animation, Vec3s* jointTable, Vec3s* morphTable, s32 limbCount);
-void SkelAnime_InitSkin(GameState* gameState, SkelAnime* skelAnime, SkeletonHeader* skeletonHeaderSeg, AnimationHeader* animation);
-void SkelAnime_SetUpdate(SkelAnime* skelAnime);
-s32 SkelAnime_Update(SkelAnime* skelAnime);
-s32 SkelAnime_Morph(SkelAnime* skelAnime);
-s32 SkelAnime_MorphTaper(SkelAnime* skelAnime);
-void SkelAnime_AnimateFrame(SkelAnime* skelAnime);
-s32 SkelAnime_LoopFull(SkelAnime* skelAnime);
-s32 SkelAnime_LoopPartial(SkelAnime* skelAnime);
-s32 SkelAnime_Once(SkelAnime* skelAnime);
-void Animation_ChangeImpl(SkelAnime* skelAnime, AnimationHeader* animation, f32 playSpeed, f32 startFrame, f32 endFrame, u8 mode, f32 morphFrames, s8 taper);
-void Animation_Change(SkelAnime* skelAnime, AnimationHeader* animation, f32 playSpeed, f32 startFrame, f32 endFrame, u8 mode, f32 morphFrames);
-void Animation_PlayOnce(SkelAnime* skelAnime, AnimationHeader* animation);
-void Animation_MorphToPlayOnce(SkelAnime* skelAnime, AnimationHeader* animation, f32 morphFrames);
-void Animation_PlayOnceSetSpeed(SkelAnime* skelAnime, AnimationHeader* animation, f32 playSpeed);
-void Animation_PlayLoop(SkelAnime* skelAnime, AnimationHeader* animation);
-void Animation_MorphToLoop(SkelAnime* skelAnime, AnimationHeader* animation, f32 morphFrames);
-void Animation_PlayLoopSetSpeed(SkelAnime* skelAnime, AnimationHeader* animation, f32 playSpeed);
-void Animation_EndLoop(SkelAnime* skelAnime);
-void Animation_Reverse(SkelAnime* skelAnime);
-void SkelAnime_CopyFrameTableTrue(SkelAnime* skelAnime, Vec3s* dst, Vec3s* src, u8* copyFlag);
-void SkelAnime_CopyFrameTableFalse(SkelAnime* skelAnime, Vec3s* dst, Vec3s* src, u8* copyFlag);
-void SkelAnime_UpdateTranslation(SkelAnime* skelAnime, Vec3f* diff, s16 angle);
-s32 Animation_OnFrame(SkelAnime* skelAnime, f32 frame);
-void SkelAnime_Free(SkelAnime* skelAnime, PlayState* play);
-void SkelAnime_CopyFrameTable(SkelAnime* skelAnime, Vec3s* dst, Vec3s* src);
+
void SkinMatrix_Vec3fMtxFMultXYZW(MtxF* mf, Vec3f* src, Vec3f* xyzDest, f32* wDest);
void SkinMatrix_Vec3fMtxFMultXYZ(MtxF* mf, Vec3f* src, Vec3f* dest);
void SkinMatrix_MtxFMtxFMult(MtxF* mfB, MtxF* mfA, MtxF* dest);
@@ -2272,40 +1821,32 @@ void func_80140900(void* arg0);
void func_80140CE0(void* arg0);
void func_80140D04(void* arg0);
void func_80140D10(void* arg0, Gfx** gfx, u32 arg2);
-void func_80140E80(void* param_1);
-// void func_80140EA0(void);
+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(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_8014116C(Gfx** gfxP, u16* arg1, u16* arg2, 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);
// void func_80141678(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
-// void func_80141778(void);
+void func_80141778(Struct_80140E80* arg0, Gfx** gfxp, void* unk_18E60, GraphicsContext* gfxCtx);
void VisMono_Init(VisMono* this);
void VisMono_Destroy(VisMono* this);
// void VisMono_DesaturateTLUT(u16* tlut);
// void VisMono_DesaturateDList(Gfx* gfx);
void VisMono_Draw(VisMono* this, Gfx** gfxp);
// void VisMono_DrawOld(VisMono* this);
-void func_801420C0(void* arg0);
-void func_801420F4(void* arg0);
-void func_80142100(void* arg0, Gfx** gfx, u32 arg2);
-s32 func_80142440(SkyboxContext* skyboxCtx, Vtx* vtx, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6, s32 arg7, s32 arg8);
-void func_80143148(SkyboxContext* skyboxCtx, s32 arg1);
-void func_801431E8(GameState* gameState, SkyboxContext* skyboxCtx, s16 skyType);
-void func_80143324(PlayState* play, SkyboxContext* skyboxCtx, s16 skyType);
-void func_801434E4(GameState* gameState, SkyboxContext* skyboxCtx, s16 skyType);
-Mtx* SkyboxDraw_UpdateMatrix(SkyboxContext* skyboxCtx, f32 x, f32 y, f32 z);
-void SkyboxDraw_SetColors(SkyboxContext* skyboxCtx, u8 primR, u8 primG, u8 primB, u8 envR, u8 envG, u8 envB);
-void SkyboxDraw_Draw(SkyboxContext* skyboxCtx, GraphicsContext* gfxCtx, s16 skyboxId, s16 blend, f32 x, f32 y, f32 z);
-void SkyboxDraw_Noop(SkyboxContext* skyboxCtx);
+
+void VisZbuf_Init(VisZbuf* this);
+void VisZbuf_Destroy(VisZbuf* this);
+void VisZbuf_Draw(VisZbuf* this, Gfx** gfxP, void* zbuffer);
// void func_80147520(void);
void func_80147564(PlayState* play);
s32 Message_ShouldAdvance(PlayState* play);
s32 Message_ShouldAdvanceSilent(PlayState* play);
-void func_801477B4(PlayState* play);
+void Message_CloseTextbox(PlayState* play);
void func_80147818(PlayState* play, UNK_PTR puParm2, UNK_TYPE4 uParm3, UNK_TYPE4 uParm4);
// void func_80147F18(PlayState* play, UNK_PTR puParm2, UNK_TYPE4 uParm3, UNK_TYPE4 uParm4);
// void func_80148558(PlayState* play, UNK_PTR puParm2, UNK_TYPE4 uParm3, UNK_TYPE4 uParm4);
@@ -2334,7 +1875,7 @@ void func_80150A84(PlayState* play);
void func_80150D08(PlayState* play, u32 uParm2);
void func_801514B0(PlayState* play, u16 arg1, u8 arg2);
void Message_StartTextbox(PlayState* play, u16 textId, Actor* Actor);
-void func_80151938(PlayState* play, u16 textId);
+void Message_ContinueTextbox(PlayState* play, u16 textId);
void func_80151A68(PlayState* play, u16 textId);
void func_80151BB4(PlayState* play, u8 arg1);
// void func_80151C9C(void);
@@ -2351,8 +1892,8 @@ u8 Message_GetState(MessageContext* msgCtx);
// void func_80153E7C(void);
// void func_80153EF0(void);
void func_801541D4(PlayState* play, Gfx** gfxp);
-// void func_80156758(void);
-void func_8015680C(PlayState* play);
+void Message_Draw(PlayState* play);
+void Message_Update(PlayState* play);
void func_801586A4(PlayState* play);
void Message_Init(PlayState* play);
void Message_FindMessageNES(PlayState* play, u16 textId);
@@ -2370,32 +1911,11 @@ void Message_FindCreditsMessage(PlayState* play, u16 textId);
void func_8015E7EC(PlayState* play, UNK_PTR puParm2);
// void func_8015F8A8(UNK_TYPE4 ctxt);
-// void func_80161180(void);
-s32 func_8016119C(Camera* camera, DbCameraUnkStruct* arg1);
-// void func_8016122C(void);
-// void func_801612B8(void);
-s32 func_80161998(u8* cmd, DbCameraUnkStruct* arg1);
-// s32 func_80161BAC(void);
-void func_80161BE0(s16 arg0);
-void func_80161C0C(void);
-// void func_80161C20(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_80161E4C(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_801620CC(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_8016237C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE1 param_5, UNK_TYPE4 param_6);
-// void func_801623E4(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_801624EC(void);
-// void func_8016253C(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_801629BC(void);
-// void func_80162A50(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_80162FF8(void);
-// void func_801631DC(void);
-// void func_80163334(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_80163660(void);
-void* KaleidoManager_FaultAddrConvFunc(void* address, void* param);
+void* KaleidoManager_FaultAddrConv(void* address, void* param);
void KaleidoManager_LoadOvl(KaleidoMgrOverlay* ovl);
void KaleidoManager_ClearOvl(KaleidoMgrOverlay* ovl);
void KaleidoManager_Init(PlayState* play);
-void KaleidoManager_Destroy();
+void KaleidoManager_Destroy(void);
void* KaleidoManager_GetRamAddr(void* vram);
void KaleidoScopeCall_LoadPlayer(void);
void KaleidoScopeCall_Init(PlayState* play);
@@ -2404,23 +1924,20 @@ void KaleidoScopeCall_Update(PlayState* play);
void KaleidoScopeCall_Draw(PlayState* play);
void Transition_Init(TransitionContext* transitionCtx);
void Transition_Destroy(TransitionContext* transitionCtx);
-// void func_80163DC0(void);
-// void func_8016418C(void);
-// void func_8016424C(void);
-// void func_801642D8(void);
-// void func_80164438(void);
-// void func_8016454C(void);
-// void func_80164678(void);
-// void func_801647AC(void);
-// UNK_TYPE4 func_801647B8(void);
-// void TransitionFade_Start(void);
-void* TransitionFade_Init(void* param_1);
-// void TransitionFade_Destroy(void);
-// void TransitionFade_Update(void);
-// void TransitionFade_Draw(void);
-// void TransitionFade_IsDone(void);
-// void TransitionFade_SetColor(void);
-// void TransitionFade_SetType(void);
+
+void TransitionTile_Destroy(TransitionTile* this);
+TransitionTile* TransitionTile_Init(TransitionTile* this, s32 cols, s32 rows);
+void TransitionTile_Draw(TransitionTile* this, Gfx** gfxP);
+void TransitionTile_Update(TransitionTile* this);
+
+void TransitionFade_Start(void* thisx);
+void* TransitionFade_Init(void* thisx);
+void TransitionFade_Destroy(void* thisx);
+void TransitionFade_Update(void* thisx, s32 updateRate);
+void TransitionFade_Draw(void* thisx, Gfx** gfxP);
+s32 TransitionFade_IsDone(void* thisx);
+void TransitionFade_SetColor(void* thisx, u32 color);
+void TransitionFade_SetType(void* thisx, s32 type);
void TransitionOverlay_ClearLoadInfo(TransitionOverlay *overlayEntry);
void TransitionOverlay_SetSegment(TransitionOverlay *overlayEntry, void* vramStart, void* vramEnd, uintptr_t vromStart, uintptr_t vromEnd);
void TransitionCircle_Start(void* thisx);
@@ -2429,8 +1946,7 @@ void TransitionCircle_Destroy(void* thisx);
void TransitionCircle_Update(void* thisx);
void TransitionCircle_SetColor(void* thisx, u32 color);
void TransitionCircle_SetType(void* thisx, s32 type);
-void TransitionCircle_LoadAndSetTexture(Gfx** gfxp, TexturePtr texture, s32 fmt, s32 arg3, s32 masks, s32 maskt,
- f32 arg6);
+void TransitionCircle_LoadAndSetTexture(Gfx** gfxp, TexturePtr texture, s32 fmt, s32 arg3, s32 masks, s32 maskt, f32 arg6);
void TransitionCircle_Draw(void* thisx, Gfx** gfxp);
s32 TransitionCircle_IsDone(void* thisx);
void* TransitionOverlay_VramToRam(TransitionOverlay *overlayEntry, void* vramAddr);
@@ -2439,39 +1955,26 @@ s32 TransitionOverlay_Load(TransitionOverlay *overlayEntry);
s32 TransitionOverlay_Free(TransitionOverlay *overlayEntry);
void func_80165438(UNK_PTR param_1);
// void func_80165444(s32 param_1, UNK_TYPE4 param_2, UNK_TYPE4 param_3, UNK_TYPE4 param_4, UNK_TYPE4 param_5);
-// void func_80165460(void);
-// void func_80165608(void);
-// void func_80165630(void);
-void func_80165658(u32 arg0);
-void func_8016566C(u32 arg0);
-void func_80165690(void);
-// void func_801656A4(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);
-// void func_80165DCC(void);
-// void func_80165DF0(void);
-// void func_80165E1C(void);
-// void func_80165E7C(void);
-// void func_80165EC0(void);
-// void func_80166060(void);
-Gfx* func_801660B8(PlayState* play, Gfx* gfx);
+
+void Play_SetMotionBlurAlpha(u32 alpha);
+void Play_EnableMotionBlur(u32 alpha);
+void Play_DisableMotionBlur(void);
+void Play_SetMotionBlurPriorityAlpha(u32 alpha);
+void Play_EnableMotionBlurPriority(u32 alpha);
+void Play_DisableMotionBlurPriority(void);
+void Play_TriggerPictoPhoto(void);
+Gfx* Play_SetFog(PlayState* this, Gfx* gfx);
void Play_Destroy(GameState* thisx);
-// void func_801663C4(void);
-// void func_80166644(void);
-// void func_801668B4(void);
-void func_80166968(PlayState* play, Camera* camera);
-void func_80166B30(PlayState* play);
-void Play_Update(PlayState* play);
-void func_80167DE4(PlayState* play);
-// void func_80167F0C(void);
-void Play_Draw(PlayState* play);
-void func_80168DAC(PlayState* play);
-void Play_Main(PlayState* play);
+void Play_CompressI8ToI5(void* srcI8, void* destI5, size_t size);
+void Play_DecompressI5ToI8(void* srcI5, void* destI8, size_t size);
+void Play_Update(PlayState* this);
+void Play_Draw(PlayState* this);
+void Play_Main(GameState* thisx);
s32 Play_InCsMode(PlayState* this);
-f32 func_80169100(PlayState* play, MtxF* mtx, CollisionPoly** arg2, s32* arg3, Vec3f* feetPosPtr);
-void func_801691F0(PlayState* play, MtxF* mtx, Vec3f* arg2);
-void* Play_LoadScene(PlayState* play, RomFile* entry);
-void func_8016927C(PlayState* play, s16 sParm2);
-// void func_801692C4(PlayState* play, UNK_TYPE1 uParm2);
-// void Play_SceneInit(PlayState* play, s32 sceneIndex, UNK_TYPE1 param_3);
+f32 Play_GetFloorSurfaceImpl(PlayState* this, MtxF* mtx, CollisionPoly** poly, s32* bgId, Vec3f* pos);
+void Play_GetFloorSurface(PlayState* this, MtxF* mtx, Vec3f* pos);
+void* Play_LoadFile(PlayState* this, RomFile* entry);
+void Play_InitEnvironment(PlayState* this, s16 skyboxId);
void Play_GetScreenPos(PlayState* this, Vec3f* worldPos, Vec3f* screenPos);
s16 Play_CreateSubCamera(PlayState* this);
s16 Play_GetActiveCamId(PlayState* this);
@@ -2495,14 +1998,15 @@ void Play_SetupRespawnPoint(GameState* thisx, s32 respawnMode, s32 playerParams)
void func_80169EFC(GameState* thisx);
void func_80169F78(GameState* thisx);
void func_80169FDC(GameState* thisx);
-s32 func_80169FFC(GameState* thisx);
+s32 Play_CamIsNotFixed(GameState* thisx);
s32 FrameAdvance_IsEnabled(GameState* thisx);
s32 func_8016A02C(GameState* thisx, Actor* actor, s16* yaw);
s32 Play_IsUnderwater(PlayState* this, Vec3f* pos);
s32 Play_IsDebugCamEnabled(void);
-void Play_AssignPlayerActorCsIdsFromScene(GameState* thisx, s32 startActorCsId);
-void func_8016A268(GameState* gameState, s16 arg1, u8 arg2, u8 arg3, u8 arg4, u8 arg5);
-void Play_Init(GameState* gameState);
+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);
@@ -2511,11 +2015,11 @@ void Play_Init(GameState* gameState);
// void func_8016CD4C(void);
// void func_8016E40C(void);
// void func_8016EA90(void);
-// void func_8016F1A8(void);
+void BombersNotebook_Draw(BombersNotebook* this, GraphicsContext* gfxCtx);
// void func_8016F4EC(void);
-void func_8016F5A8(PlayState* play, s8* pcParm2, Input* iParm3);
-// void func_8016FC78(void);
-// void func_8016FC98(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);
@@ -2542,36 +2046,8 @@ void PreRender_ApplyFiltersSlowlyInit(PreRender* this);
void PreRender_ApplyFiltersSlowlyDestroy(PreRender* this);
void func_801720C4(PreRender* this);
void func_801720FC(PreRenderParams* params, Gfx** gfxp);
-void func_80172758(Gfx** gfxp, void* timg, void* tlut, u16 width, u16 height, u8 fmt, u8 siz, u16 tt, u16 arg8, f32 x, f32 y, f32 xScale, f32 yScale, u32 flags);
-void THGA_Ct(TwoHeadGfxArena* thga, Gfx* start, size_t size);
-void THGA_Dt(TwoHeadGfxArena* thga);
-u32 THGA_IsCrash(TwoHeadGfxArena* thga);
-void THGA_Init(TwoHeadGfxArena* thga);
-s32 THGA_GetSize(TwoHeadGfxArena* thga);
-Gfx* THGA_GetHead(TwoHeadGfxArena* thga);
-void THGA_SetHead(TwoHeadGfxArena* thga, Gfx* start);
-Gfx* THGA_GetTail(TwoHeadGfxArena* thga);
-Gfx* THGA_AllocStartArray8(TwoHeadGfxArena* thga, u32 count);
-Gfx* THGA_AllocStart8(TwoHeadGfxArena* thga);
-Gfx* THGA_AllocStart8Wrapper(TwoHeadGfxArena* thga);
-Gfx* THGA_AllocEnd(TwoHeadGfxArena* thga, size_t size);
-Gfx* THGA_AllocEndArray64(TwoHeadGfxArena* thga, u32 count);
-Gfx* THGA_AllocEnd64(TwoHeadGfxArena* thga);
-Gfx* THGA_AllocEndArray16(TwoHeadGfxArena* thga, u32 count);
-Gfx* THGA_AllocEnd16(TwoHeadGfxArena* thga);
-void* THA_GetHead(TwoHeadArena* tha);
-void THA_SetHead(TwoHeadArena* tha, void* start);
-void* THA_GetTail(TwoHeadArena* tha);
-void* THA_AllocStart(TwoHeadArena* tha, size_t size);
-void* THA_AllocStart1(TwoHeadArena* tha);
-void* THA_AllocEnd(TwoHeadArena* tha, size_t size);
-void* THA_AllocEndAlign16(TwoHeadArena* tha, size_t size);
-void* THA_AllocEndAlign(TwoHeadArena* tha, size_t size, u32 mask);
-s32 THA_GetSize(TwoHeadArena* tha);
-u32 THA_IsCrash(TwoHeadArena* tha);
-void THA_Init(TwoHeadArena* tha);
-void THA_Ct(TwoHeadArena* tha, void* ptr, size_t size);
-void THA_Dt(TwoHeadArena* tha);
+void Prerender_DrawBackground2D(Gfx** gfxp, void* timg, void* tlut, u16 width, u16 height, u8 fmt, u8 siz, u16 tt, u16 arg8, f32 x, f32 y, f32 xScale, f32 yScale, u32 flags);
+
void AudioMgr_StopAllSfxExceptSystem(void);
void func_80172C30(AudioMgr* audioMgr);
void AudioMgr_HandleRetrace(AudioMgr* audioMgr);
@@ -2582,7 +2058,7 @@ void AudioMgr_Init(AudioMgr* audioMgr, void* stack, OSPri pri, OSId id, SchedCon
void Game_UpdateFramerateVariables(s32 divisor);
void Game_SetFramerateDivisor(GameState* gameState, s32 divisor);
-void GameState_SetFBFilter(Gfx** gfx, u32 arg1);
+void GameState_SetFBFilter(Gfx** gfx, void* zbuffer);
void Game_Nop80173534(GameState* gameState);
void GameState_Draw(GameState* gameState, GraphicsContext* gfxCtx);
void GameState_SetFrameBuffer(GraphicsContext* gfxCtx);
@@ -2608,7 +2084,7 @@ void Graph_FaultClient(void);
void Graph_InitTHGA(TwoHeadGfxArena* arena, Gfx* buffer, s32 size);
void Graph_SetNextGfxPool(GraphicsContext* gfxCtx);
GameStateOverlay* Graph_GetNextGameState(GameState* gameState);
-void* Graph_FaultAddrConvFunc(void* address, void* param);
+void* Graph_FaultAddrConv(void* address, void* param);
void Graph_Init(GraphicsContext* gfxCtx);
void Graph_Destroy(GraphicsContext* gfxCtx);
void Graph_TaskSet00(GraphicsContext* gfxCtx, GameState* gameState);
@@ -2681,24 +2157,22 @@ void SpeedMeter_DrawTimeEntries(void* displayList, GraphicsContext* gfxCtx);
// void func_80177A84(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9);
//void func_80177AC8(void);
void SpeedMeter_DrawAllocEntries(void* displayList, GraphicsContext* gfxCtx, GameState* gameState);
-void func_801780F0(Mtx* param_1, f32 param_2, f32 param_3, f32 param_4, f32 param_5, f32 param_6, f32 param_7);
-// void func_801781EC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
-void func_8017842C(MtxF* arg0, f32 arg1, f32 arg2, f32 arg3, s16 arg4, f32 arg5, f32 arg6, f32 arg7, f32 arg8, f32 arg9, f32 arg10);
-// void func_80178750(void);
-// void func_80178818(void);
+
+void Mtx_SetTranslateScaleMtx(Mtx* mtx, f32 scaleX, f32 scaleY, f32 scaleZ, f32 translateX, f32 translateY, f32 translateZ);
+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);
-u32 SysCfb_GetFbPtr(s32 index);
-u32 SysCfb_GetZBuffer(void);
+void* SysCfb_GetFbPtr(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 func_80178AC0(void);
-// void func_80178C80(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
-// void func_80178D7C(void);
-// void func_80178DAC(void);
-// void func_80178E3C(void);
-// void func_80178E7C(void);
+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);
// void Check_WriteI4Pixel(u16* buffer, u32 x, u32 y, u32 value);
// void Check_DrawI4Texture(u16* buffer, u32 x, u32 y, u32 width, u32 height, u8* texture);
@@ -2809,11 +2283,10 @@ 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);
-u16 Math_GetAtan2Tbl(f32 y, f32 x);
s16 Math_Atan2S(f32 y, f32 x);
f32 Math_Atan2F(f32 y, f32 x);
-s16 Math_FAtan2F(f32 adjacent, f32 opposite);
-f32 Math_Acot2F(f32 adjacent, f32 opposite);
+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);
@@ -2862,10 +2335,7 @@ void func_8018450C(PlayState* play, SkeletonInfo* skeleton, Mtx* mtx, OverrideKe
// void func_801850A0(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);
// 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 Slowly_Main(SlowlyTask* slowly);
-//void Slowly_ThreadEntry(SlowlyTask* slowly);
-void Slowly_Start(SlowlyTask* slowly, void* stack, void (*callback)(), void* callbackArg0, void* callbackArg1);
-void Slowly_Stop(SlowlyTask* slowly);
+
// void func_801857C0(void);
// char* func_801857D0(void);
// void func_80185864(void);
@@ -2949,39 +2419,18 @@ void AudioLoad_ScriptLoad(s32 tableType, s32 id, s8* isDone);
void AudioLoad_ProcessScriptLoads(void);
void AudioLoad_InitScriptLoads(void);
-AudioTask* func_80192BE0(void);
-// void func_80192C00(void);
-// void func_8019319C(void);
-// void func_801936D8(void);
-// void func_8019372C(void);
-// void func_80193774(void);
-// void func_8019380C(void);
-// void func_80193858(void);
+AudioTask* AudioThread_Update(void);
+void AudioThread_QueueCmdF32(u32 opArgs, f32 data);
void AudioThread_QueueCmdS32(u32 opArgs, s32 data);
void AudioThread_QueueCmdS8(u32 opArgs, s8 data);
-// void func_801938D0(void);
+void AudioThread_QueueCmdU16(u32 opArgs, u16 data);
s32 AudioThread_ScheduleProcessCmds(void);
-// void func_80193990(void);
-// void func_801939A8(void);
-// void func_80193AEC(void);
-// void func_80193BA0(void);
-// void func_80193C04(void);
-// void func_80193C5C(void);
-// void func_80193CB4(void);
-// void func_80193D08(void);
-// void func_80193DA4(void);
-// void func_80193E6C(void);
-// void func_80193EA8(void);
-// void func_80194080(void);
-// void func_80194304(void);
-// void func_80194328(void);
-// void func_8019435C(void);
-// void func_8019439C(void);
-// void func_801943D0(void);
-// void func_8019440C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
-// void func_80194528(void);
-// void func_80194548(void);
-// void func_80194568(void);
+u32 AudioThread_GetExternalLoadQueueMsg(u32* retMsg);
+u8* AudioThread_GetFontsForSequence(s32 seqId, u32* outNumFonts);
+s32 func_80193C5C(void);
+s32 AudioThread_ResetAudioHeap(s32 specId);
+void AudioThread_PreNMIInternal(void);
+s32 AudioThread_GetEnabledNotesCount(void);
u32 AudioThread_NextRandom(void);
void AudioThread_InitMesgQueues(void);
@@ -3015,16 +2464,16 @@ void AudioEffects_NotePortamentoInit(Note* note);
void AudioEffects_AdsrInit(AdsrState* adsr, EnvelopePoint* envelope, s16* volOut);
f32 AudioEffects_AdsrUpdate(AdsrState* adsr);
-void AudioSeq_SequenceChannelDisable(SequenceChannel* channel);
-void AudioSeq_SequencePlayerDisableAsFinished(SequencePlayer* seqPlayer);
-void AudioSeq_SequencePlayerDisable(SequencePlayer* seqPlayer);
-void AudioSeq_AudioListPushBack(AudioListItem* list, AudioListItem* item);
-void* AudioSeq_AudioListPopBack(AudioListItem* list);
-void AudioSeq_ProcessSequences(s32 arg0);
-void AudioSeq_SkipForwardSequence(SequencePlayer* seqPlayer);
-void AudioSeq_ResetSequencePlayer(SequencePlayer* seqPlayer);
-void AudioSeq_InitSequencePlayerChannels(s32 playerIndex);
-void AudioSeq_InitSequencePlayers(void);
+void AudioScript_SequenceChannelDisable(SequenceChannel* channel);
+void AudioScript_SequencePlayerDisableAsFinished(SequencePlayer* seqPlayer);
+void AudioScript_SequencePlayerDisable(SequencePlayer* seqPlayer);
+void AudioScript_AudioListPushBack(AudioListItem* list, AudioListItem* item);
+void* AudioScript_AudioListPopBack(AudioListItem* list);
+void AudioScript_ProcessSequences(s32 arg0);
+void AudioScript_SkipForwardSequence(SequencePlayer* seqPlayer);
+void AudioScript_ResetSequencePlayer(SequencePlayer* seqPlayer);
+void AudioScript_InitSequencePlayerChannels(s32 seqPlayerIndex);
+void AudioScript_InitSequencePlayers(void);
void func_8019AE40(s32 param_1, s32 param_2, u32 param_3, s32 param_4);
void func_8019AEC0(UNK_PTR param_1, UNK_PTR param_2);
@@ -3037,17 +2486,16 @@ void AudioOcarina_StartDefault(u32 ocarinaFlags);
u8 func_8019B5AC(void);
void AudioOcarina_ResetAndReadInput(void);
void AudioOcarina_SetOcarinaDisableTimer(u8 unused, u8 timer);
-u32 AudioOcarina_SetInstrument(u8 ocarinaInstrumentId);
+void AudioOcarina_SetInstrument(u8 ocarinaInstrumentId);
void AudioOcarina_SetPlaybackSong(s8 songIndexPlusOne, u8 playbackState);
void AudioOcarina_SetRecordingState(u8 recordingState);
OcarinaStaff* AudioOcarina_GetRecordingStaff(void);
OcarinaStaff* AudioOcarina_GetPlayingStaff(void);
OcarinaStaff* AudioOcarina_GetPlaybackStaff(void);
void AudioOcarina_TerminaWallGenerateNotes(void);
-void AudioOcarina_PlayLongScarecrowAfterCredits(void);
+void AudioOcarina_PlayLongScarecrowSong(void);
void Audio_Update(void);
-// void func_8019E110(void);
void AudioSfx_SetProperties(u8 bankId, u8 entryIndex, u8 channelIndex);
void play_sound(u16 sfxId);
void func_8019F128(u16 sfxId);
@@ -3059,19 +2507,19 @@ void func_8019F420(Vec3f* pos, u16 sfxId);
void func_8019F4AC(Vec3f* pos, u16 sfxId);
void func_8019F540(s8 arg0);
void AudioSfx_LowerSfxSettingsReverb(Vec3f* pos, s8 isReverbLowered);
-// void func_8019F5AC(void);
-// void func_8019F638(void);
-// void func_8019F780(void);
+f32 func_8019F5AC(f32 arg0);
+void func_8019F638(Vec3f* arg0, u16 sfxId, f32 arg2);
+void func_8019F780(Vec3f* arg0, u16 sfxId, f32 arg2);
// void func_8019F7D8(void);
-// void func_8019F830(void);
+void func_8019F830(Vec3f* arg0, u16 arg1);
void func_8019F88C(Vec3f* arg0, u16 sfxId, UNK_TYPE arg2);
void func_8019F900(Vec3f* pos, u8 chargeLevel);
// void func_8019FA18(void);
void func_8019FAD8(Vec3f* param_1, u16 sfxId, f32 param_3);
void func_8019FB0C(Vec3f* arg0, u16 sfxId, f32 arg2, s32 arg3);
void func_8019FC20(Vec3f* pos, u16 sfxId);
-// void func_8019FCB8(void);
-// void func_8019FD90(void);
+void func_8019FCB8(Vec3f* arg0, u16 arg1, f32 arg2);
+void func_8019FD90(s8 arg0, s8 arg1);
void func_8019FDC8(UNK_PTR arg0, u16 sfxId, UNK_TYPE arg2);
// void func_8019FE1C(void);
void func_8019FE74(f32* arg0, f32 arg1, s32 arg2);
@@ -3081,10 +2529,10 @@ void Audio_PlaySfxForRiver(Vec3f* pos, f32 freqScale);
// void Audio_PlaySfxForWaterfall(void);
// void Audio_StepFreqLerp(void);
void func_801A0124(Vec3f* pos, u8 arg1);
-// void func_801A0184(void);
-// void func_801A01C4(void);
+void Audio_SetBgmVolumeOff(void);
+void Audio_SetBgmVolumeOn(void);
void func_801A0204(s8 seqId);
-void func_801A0238(s32 arg0, s32 arg1);
+void Audio_SetMainBgmVolume(u8 targetVolume, u8 volumeFadeTimer);
// void Audio_SetGanonsTowerBgmVolumeLevel(void);
// void Audio_SetGanonsTowerBgmVolume(void);
// void Audio_UpdateRiverSoundVolumes(void);
@@ -3114,12 +2562,9 @@ void func_801A1FB4(u8 playerIndex, Vec3f* pos, u16 seqId, f32 maxDist);
void func_801A246C(u8 param_1, u8 param_2);
void Audio_PlayMorningSceneSequence(u16 seqId, u8 dayMinusOne);
void Audio_PlaySceneSequence(u16 seqId, u8 dayMinusOne);
-// void func_801A27E8(void);
-// void func_801A281C(void);
-void func_801A29D4(UNK_TYPE arg0, f32 arg1, UNK_TYPE arg2);
-void func_801A2BB8(s32 seqId);
-void func_801A2C20(void);
-// void func_801A2C44(void);
+void Audio_SetSeqTempoAndFreq(u8 seqPlayerIndex, f32 freqTempoScale, u8 duration);
+void Audio_PlaySubBgm(u16 seqId);
+void Audio_StopSubBgm(void);
void Audio_PlaySequenceInCutscene(u16 seqId);
void Audio_StopSequenceInCutscene(u16 seqId);
s32 Audio_IsSequencePlaying(u8 seqId);
@@ -3130,7 +2575,7 @@ void Audio_RestorePrevBgm(void);
void Audio_PlayFanfare(u16 seqId);
// void func_801A312C(void);
void func_801A31EC(u16 seqId, s8 arg1, u8 arg2);
-void Audio_PlaySequenceWithSeqPlayerIO(s8 playerIndex, u16 seqId, u8 fadeInDuration, s8 ioPort, u8 ioData);
+void Audio_PlaySequenceWithSeqPlayerIO(s8 seqPlayerIndex, u16 seqId, u8 fadeInDuration, s8 ioPort, u8 ioData);
void Audio_SetSequenceMode(u8 seqMode);
void Audio_UpdateEnemyBgmVolume(f32 dist);
u8 func_801A3950(s32 playerIndex, s32 isChannelIOSet);
@@ -3141,18 +2586,18 @@ void func_801A3AEC(s32 arg0);
void func_801A3B48(UNK_TYPE arg0);
// void func_801A3B90(void);
void func_801A3CD8(s8 param_1);
-// void func_801A3CF4(void);
+void func_801A3CF4(s8 arg0);
void func_801A3D98(s8 audioSetting);
-// void func_801A3E38(void);
-// void func_801A3EC0(void);
+void func_801A3E38(u8 arg0);
+void func_801A3EC0(u8 arg0);
void Audio_SetCutsceneFlag(s8 flag);
// void func_801A3F6C(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_801A3FB4(void);
// void func_801A3FFC(UNK_TYPE1 param_1);
void Audio_SetSpec(u32 specId);
void func_801A4058(UNK_TYPE arg0);
-// void func_801A41C8(void);
-// void func_801A41F8(void);
+void func_801A41C8(s32 arg0);
+void func_801A41F8(UNK_TYPE arg0);
// void func_801A429C(void);
// void func_801A42C8(void);
// void func_801A4324(void);
@@ -3160,23 +2605,20 @@ void func_801A4058(UNK_TYPE arg0);
void Audio_SetSfxVolumeExceptSystemAndOcarinaBanks(u8 arg0);
void func_801A4428(u8 reverbIndex);
void Audio_PreNMI(void);
-// void Audio_ResetRequestedSceneSeqId(void);
-// void func_801A44D4(void);
s32 func_801A46F8(void);
void func_801A4748(Vec3f* pos, u16 sfxId);
void func_801A479C(Vec3f* arg0, u16 sfxId, s32 arg2);
void Audio_SetAmbienceChannelIO(u8 channelIndexRange, u8 ioPort, u8 ioData);
void Audio_PlayAmbience(u8 ambienceId);
void Audio_Init(void);
-void func_801A4D00(void);
-// void func_801A4D50(void);
-// void func_801A4DA4(void);
-// void func_801A4DF4(void);
-// void func_801A4E64(void);
+void Audio_InitSound(void);
+void Audio_ResetForAudioHeapStep3(void);
+void Audio_ResetForAudioHeapStep2(void);
+void Audio_ResetForAudioHeapStep1(s32 specId);
// void func_801A4EB0(void);
// void func_801A4EB8(void);
-// void func_801A4FD8(void);
+void func_801A4FD8(void);
void func_801A5080(u16 arg0);
u16 func_801A5100(void);
void func_801A5118(void);
@@ -3190,7 +2632,7 @@ UNK_TYPE func_801A51F0(UNK_TYPE arg0);
// void func_801A54D0(void);
// void func_801A5680(void);
// void func_801A5808(void);
-// void func_801A5A10(void);
+void AudioVoice_ResetData(void);
// void func_801A5A1C(void);
void AudioSfx_MuteBanks(u16 muteMask);
@@ -3209,24 +2651,19 @@ void AudioSfx_ProcessActiveSfx(void);
u8 AudioSfx_IsPlaying(u32 sfxId);
void AudioSfx_Reset(void);
-void Audio_StartSequence(u8 playerIndex, u8 seqId, u8 seqArgs, u16 fadeTimer);
-void Audio_StopSequence(u8 playerIndex, u16 fadeTimer);
-// void func_801A7D84(void);
-void Audio_QueueSeqCmd(u32 cmd);
-void func_801A89D0(void);
-u16 Audio_GetActiveSequence(u8 playerIndex);
-s32 func_801A8ABC(u32 cmdVal, u32 cmdMask);
-void Audio_SetVolumeScale(u8 playerIndex, u8 scaleIndex, u8 targetVol, u8 volFadeTimer);
-void func_801A8D5C(void);
-// void func_801A8E90(void);
-u8 func_801A9768(void);
-u8 func_801A982C(void);
-// void func_801A99B8(void);
-// void func_801A9A74(void);
+void AudioSeq_StartSequence(u8 seqPlayerIndex, u8 seqId, u8 seqArgs, u16 fadeInDuration);
+void AudioSeq_StopSequence(u8 seqPlayerIndex, u16 fadeOutDuration);
+void AudioSeq_QueueSeqCmd(u32 cmd);
+void AudioSeq_ProcessSeqCmds(void);
+u16 AudioSeq_GetActiveSeqId(u8 seqPlayerIndex);
+s32 AudioSeq_IsSeqCmdNotQueued(u32 cmdVal, u32 cmdMask);
+void AudioSeq_SetVolumeScale(u8 seqPlayerIndex, u8 scaleIndex, u8 targetVol, u8 volFadeTimer);
+void AudioSeq_UpdateActiveSequences(void);
+u8 AudioSeq_UpdateAudioHeapReset(void);
+u8 AudioSeq_ResetReverb(void);
+void AudioSeq_ResetActiveSequences(void);
+void AudioSeq_ResetActiveSequencesAndVolume(void);
-void GameOver_Init(PlayState* play);
-void GameOver_FadeLights(PlayState* play);
-void GameOver_Update(PlayState* play);
-void func_801AAAA0(PlayState* play);
+void Regs_InitData(PlayState* play);
#endif
diff --git a/include/initvars.h b/include/initvars.h
index 4de39757c..554b0ff5d 100644
--- a/include/initvars.h
+++ b/include/initvars.h
@@ -1,615 +1,6 @@
#ifndef _INITVARS_H_
#define _INITVARS_H_
-extern EffectSsInit Effect_Ss_Dust_InitVars;
-extern EffectSsInit Effect_Ss_Kirakira_InitVars;
-extern EffectSsInit Effect_Ss_Bomb2_InitVars;
-extern EffectSsInit Effect_Ss_Blast_InitVars;
-extern EffectSsInit Effect_Ss_G_Spk_InitVars;
-extern EffectSsInit Effect_Ss_D_Fire_InitVars;
-extern EffectSsInit Effect_Ss_Bubble_InitVars;
-extern EffectSsInit Effect_Ss_G_Ripple_InitVars;
-extern EffectSsInit Effect_Ss_G_Splash_InitVars;
-extern EffectSsInit Effect_Ss_G_Fire_InitVars;
-extern EffectSsInit Effect_Ss_Lightning_InitVars;
-extern EffectSsInit Effect_Ss_Dt_Bubble_InitVars;
-extern EffectSsInit Effect_Ss_Hahen_InitVars;
-extern EffectSsInit Effect_Ss_Stick_InitVars;
-extern EffectSsInit Effect_Ss_Sibuki_InitVars;
-extern EffectSsInit Effect_Ss_Stone1_InitVars;
-extern EffectSsInit Effect_Ss_Hitmark_InitVars;
-extern EffectSsInit Effect_Ss_Fhg_Flash_InitVars;
-extern EffectSsInit Effect_Ss_K_Fire_InitVars;
-extern EffectSsInit Effect_Ss_Solder_Srch_Ball_InitVars;
-extern EffectSsInit Effect_Ss_Kakera_InitVars;
-extern EffectSsInit Effect_Ss_Ice_Piece_InitVars;
-extern EffectSsInit Effect_Ss_En_Ice_InitVars;
-extern EffectSsInit Effect_Ss_Fire_Tail_InitVars;
-extern EffectSsInit Effect_Ss_En_Fire_InitVars;
-extern EffectSsInit Effect_Ss_Extra_InitVars;
-extern EffectSsInit Effect_Ss_Dead_Db_InitVars;
-extern EffectSsInit Effect_Ss_Dead_Dd_InitVars;
-extern EffectSsInit Effect_Ss_Dead_Ds_InitVars;
-extern EffectSsInit Effect_Ss_Ice_Smoke_InitVars;
-extern EffectSsInit Effect_En_Ice_Block_InitVars;
-extern EffectSsInit Effect_Ss_Sbn_InitVars;
-
-extern ActorInit Player_InitVars;
-extern ActorInit Arms_Hook_InitVars;
-extern ActorInit Arrow_Fire_InitVars;
-extern ActorInit Arrow_Ice_InitVars;
-extern ActorInit Arrow_Light_InitVars;
-extern ActorInit Bg_Astr_Bombwall_InitVars;
-extern ActorInit Bg_Botihasira_InitVars;
-extern ActorInit Bg_Breakwall_InitVars;
-extern ActorInit Bg_Crace_Movebg_InitVars;
-extern ActorInit Bg_Ctower_Gear_InitVars;
-extern ActorInit Bg_Ctower_Rot_InitVars;
-extern ActorInit Bg_Danpei_Movebg_InitVars;
-extern ActorInit Bg_Dblue_Balance_InitVars;
-extern ActorInit Bg_Dblue_Elevator_InitVars;
-extern ActorInit Bg_Dblue_Movebg_InitVars;
-extern ActorInit Bg_Dblue_Waterfall_InitVars;
-extern ActorInit Bg_Dkjail_Ivy_InitVars;
-extern ActorInit Bg_Dy_Yoseizo_InitVars;
-extern ActorInit Bg_F40_Block_InitVars;
-extern ActorInit Bg_F40_Flift_InitVars;
-extern ActorInit Bg_F40_Switch_InitVars;
-extern ActorInit Bg_F40_Swlift_InitVars;
-extern ActorInit Bg_Fire_Wall_InitVars;
-extern ActorInit Bg_Fu_Kaiten_InitVars;
-extern ActorInit Bg_Fu_Mizu_InitVars;
-extern ActorInit Bg_Goron_Oyu_InitVars;
-extern ActorInit Bg_Haka_Bombwall_InitVars;
-extern ActorInit Bg_Haka_Curtain_InitVars;
-extern ActorInit Bg_Haka_Tomb_InitVars;
-extern ActorInit Bg_Hakugin_Bombwall_InitVars;
-extern ActorInit Bg_Hakugin_Elvpole_InitVars;
-extern ActorInit Bg_Hakugin_Post_InitVars;
-extern ActorInit Bg_Hakugin_Switch_InitVars;
-extern ActorInit Bg_Icefloe_InitVars;
-extern ActorInit Bg_Icicle_InitVars;
-extern ActorInit Bg_Ikana_Block_InitVars;
-extern ActorInit Bg_Ikana_Bombwall_InitVars;
-extern ActorInit Bg_Ikana_Dharma_InitVars;
-extern ActorInit Bg_Ikana_Mirror_InitVars;
-extern ActorInit Bg_Ikana_Ray_InitVars;
-extern ActorInit Bg_Ikana_Rotaryroom_InitVars;
-extern ActorInit Bg_Ikana_Shutter_InitVars;
-extern ActorInit Bg_Ikninside_InitVars;
-extern ActorInit Bg_Iknin_Susceil_InitVars;
-extern ActorInit Bg_Iknv_Doukutu_InitVars;
-extern ActorInit Bg_Iknv_Obj_InitVars;
-extern ActorInit Bg_Ingate_InitVars;
-extern ActorInit Bg_Inibs_Movebg_InitVars;
-extern ActorInit Bg_Keikoku_Saku_InitVars;
-extern ActorInit Bg_Keikoku_Spr_InitVars;
-extern ActorInit Bg_Kin2_Bombwall_InitVars;
-extern ActorInit Bg_Kin2_Fence_InitVars;
-extern ActorInit Bg_Kin2_Picture_InitVars;
-extern ActorInit Bg_Kin2_Shelf_InitVars;
-extern ActorInit Bg_Ladder_InitVars;
-extern ActorInit Bg_Last_Bwall_InitVars;
-extern ActorInit Bg_Lbfshot_InitVars;
-extern ActorInit Bg_Lotus_InitVars;
-extern ActorInit Bg_Market_Step_InitVars;
-extern ActorInit Bg_Mbar_Chair_InitVars;
-extern ActorInit Bg_Numa_Hana_InitVars;
-extern ActorInit Bg_Open_Shutter_InitVars;
-extern ActorInit Bg_Open_Spot_InitVars;
-extern ActorInit Bg_Sinkai_Kabe_InitVars;
-extern ActorInit Bg_Spdweb_InitVars;
-extern ActorInit Bg_Spout_Fire_InitVars;
-extern ActorInit Bg_Tobira01_InitVars;
-extern ActorInit Bg_Umajump_InitVars;
-extern ActorInit Boss_01_InitVars;
-extern ActorInit Boss_02_InitVars;
-extern ActorInit Boss_03_InitVars;
-extern ActorInit Boss_04_InitVars;
-extern ActorInit Boss_05_InitVars;
-extern ActorInit Boss_06_InitVars;
-extern ActorInit Boss_07_InitVars;
-extern ActorInit Boss_Hakugin_InitVars;
-extern ActorInit Demo_Effect_InitVars;
-extern ActorInit Demo_Getitem_InitVars;
-extern ActorInit Demo_Kankyo_InitVars;
-extern ActorInit Demo_Moonend_InitVars;
-extern ActorInit Demo_Shd_InitVars;
-extern ActorInit Demo_Syoten_InitVars;
-extern ActorInit Demo_Tre_Lgt_InitVars;
-extern ActorInit Dm_Ah_InitVars;
-extern ActorInit Dm_Al_InitVars;
-extern ActorInit Dm_An_InitVars;
-extern ActorInit Dm_Bal_InitVars;
-extern ActorInit Dm_Char00_InitVars;
-extern ActorInit Dm_Char01_InitVars;
-extern ActorInit Dm_Char02_InitVars;
-extern ActorInit Dm_Char03_InitVars;
-extern ActorInit Dm_Char04_InitVars;
-extern ActorInit Dm_Char05_InitVars;
-extern ActorInit Dm_Char06_InitVars;
-extern ActorInit Dm_Char07_InitVars;
-extern ActorInit Dm_Char08_InitVars;
-extern ActorInit Dm_Char09_InitVars;
-extern ActorInit Dm_Gm_InitVars;
-extern ActorInit Dm_Hina_InitVars;
-extern ActorInit Dm_Nb_InitVars;
-extern ActorInit Dm_Opstage_InitVars;
-extern ActorInit Dm_Ravine_InitVars;
-extern ActorInit Dm_Sa_InitVars;
-extern ActorInit Dm_Statue_InitVars;
-extern ActorInit Dm_Stk_InitVars;
-extern ActorInit Dm_Tag_InitVars;
-extern ActorInit Dm_Tsg_InitVars;
-extern ActorInit Dm_Zl_InitVars;
-extern ActorInit Door_Ana_InitVars;
-extern ActorInit Door_Shutter_InitVars;
-extern ActorInit Door_Spiral_InitVars;
-extern ActorInit Door_Warp1_InitVars;
-extern ActorInit Eff_Change_InitVars;
-extern ActorInit Eff_Dust_InitVars;
-extern ActorInit Eff_Kamejima_Wave_InitVars;
-extern ActorInit Eff_Lastday_InitVars;
-extern ActorInit Eff_Stk_InitVars;
-extern ActorInit Eff_Zoraband_InitVars;
-extern ActorInit Elf_Msg_InitVars;
-extern ActorInit Elf_Msg2_InitVars;
-extern ActorInit Elf_Msg3_InitVars;
-extern ActorInit Elf_Msg4_InitVars;
-extern ActorInit Elf_Msg5_InitVars;
-extern ActorInit Elf_Msg6_InitVars;
-extern ActorInit En_Ah_InitVars;
-extern ActorInit En_Akindonuts_InitVars;
-extern ActorInit En_Al_InitVars;
-extern ActorInit En_Am_InitVars;
-extern ActorInit En_An_InitVars;
-extern ActorInit En_And_InitVars;
-extern ActorInit En_Ani_InitVars;
-extern ActorInit En_Aob_01_InitVars;
-extern ActorInit En_Arrow_InitVars;
-extern ActorInit En_Attack_Niw_InitVars;
-extern ActorInit En_Az_InitVars;
-extern ActorInit En_Baba_InitVars;
-extern ActorInit En_Baguo_InitVars;
-extern ActorInit En_Baisen_InitVars;
-extern ActorInit En_Bal_InitVars;
-extern ActorInit En_Bat_InitVars;
-extern ActorInit En_Bb_InitVars;
-extern ActorInit En_Bba_01_InitVars;
-extern ActorInit En_Bbfall_InitVars;
-extern ActorInit En_Bee_InitVars;
-extern ActorInit En_Bh_InitVars;
-extern ActorInit En_Bigokuta_InitVars;
-extern ActorInit En_Bigpamet_InitVars;
-extern ActorInit En_Bigpo_InitVars;
-extern ActorInit En_Bigslime_InitVars;
-extern ActorInit En_Bji_01_InitVars;
-extern ActorInit En_Bjt_InitVars;
-extern ActorInit En_Boj_01_InitVars;
-extern ActorInit En_Boj_02_InitVars;
-extern ActorInit En_Boj_03_InitVars;
-extern ActorInit En_Boj_04_InitVars;
-extern ActorInit En_Boj_05_InitVars;
-extern ActorInit En_Bom_InitVars;
-extern ActorInit En_Bombal_InitVars;
-extern ActorInit En_Bombers_InitVars;
-extern ActorInit En_Bombers2_InitVars;
-extern ActorInit En_Bombf_InitVars;
-extern ActorInit En_Bomjima_InitVars;
-extern ActorInit En_Bomjimb_InitVars;
-extern ActorInit En_Bom_Bowl_Man_InitVars;
-extern ActorInit En_Bom_Chu_InitVars;
-extern ActorInit En_Boom_InitVars;
-extern ActorInit En_Box_InitVars;
-extern ActorInit En_Bsb_InitVars;
-extern ActorInit En_Bu_InitVars;
-extern ActorInit En_Bubble_InitVars;
-extern ActorInit En_Butte_InitVars;
-extern ActorInit En_Cha_InitVars;
-extern ActorInit En_Clear_Tag_InitVars;
-extern ActorInit En_Cne_01_InitVars;
-extern ActorInit En_Col_Man_InitVars;
-extern ActorInit En_Cow_InitVars;
-extern ActorInit En_Crow_InitVars;
-extern ActorInit En_Dai_InitVars;
-extern ActorInit En_Daiku_InitVars;
-extern ActorInit En_Daiku2_InitVars;
-extern ActorInit En_Death_InitVars;
-extern ActorInit En_Dekubaba_InitVars;
-extern ActorInit En_Dekunuts_InitVars;
-extern ActorInit En_Demo_heishi_InitVars;
-extern ActorInit En_Dg_InitVars;
-extern ActorInit En_Dinofos_InitVars;
-extern ActorInit En_Dnb_InitVars;
-extern ActorInit En_Dnh_InitVars;
-extern ActorInit En_Dnk_InitVars;
-extern ActorInit En_Dno_InitVars;
-extern ActorInit En_Dnp_InitVars;
-extern ActorInit En_Dnq_InitVars;
-extern ActorInit En_Dns_InitVars;
-extern ActorInit En_Dodongo_InitVars;
-extern ActorInit En_Door_InitVars;
-extern ActorInit En_Door_Etc_InitVars;
-extern ActorInit En_Dragon_InitVars;
-extern ActorInit En_Drs_InitVars;
-extern ActorInit En_Ds2n_InitVars;
-extern ActorInit En_Dt_InitVars;
-extern ActorInit En_Dy_Extra_InitVars;
-extern ActorInit En_Egblock_InitVars;
-extern ActorInit En_Egol_InitVars;
-extern ActorInit En_Elf_InitVars;
-extern ActorInit En_Elfbub_InitVars;
-extern ActorInit En_Elfgrp_InitVars;
-extern ActorInit En_Elforg_InitVars;
-extern ActorInit En_Encount1_InitVars;
-extern ActorInit En_Encount2_InitVars;
-extern ActorInit En_Encount3_InitVars;
-extern ActorInit En_Encount4_InitVars;
-extern ActorInit En_Ending_Hero_InitVars;
-extern ActorInit En_Ending_Hero2_InitVars;
-extern ActorInit En_Ending_Hero3_InitVars;
-extern ActorInit En_Ending_Hero4_InitVars;
-extern ActorInit En_Ending_Hero5_InitVars;
-extern ActorInit En_Ending_Hero6_InitVars;
-extern ActorInit En_Estone_InitVars;
-extern ActorInit En_Fall_InitVars;
-extern ActorInit En_Fall2_InitVars;
-extern ActorInit En_Famos_InitVars;
-extern ActorInit En_Fg_InitVars;
-extern ActorInit En_Firefly_InitVars;
-extern ActorInit En_Firefly2_InitVars;
-extern ActorInit En_Fire_Rock_InitVars;
-extern ActorInit En_Fish_InitVars;
-extern ActorInit En_Fishing_InitVars;
-extern ActorInit En_Fish2_InitVars;
-extern ActorInit En_Floormas_InitVars;
-extern ActorInit En_Fr_InitVars;
-extern ActorInit En_Fsn_InitVars;
-extern ActorInit En_Fu_InitVars;
-extern ActorInit En_Fu_Kago_InitVars;
-extern ActorInit En_Fu_Mato_InitVars;
-extern ActorInit En_Fz_InitVars;
-extern ActorInit En_Gakufu_InitVars;
-extern ActorInit En_Gamelupy_InitVars;
-extern ActorInit En_Gb2_InitVars;
-extern ActorInit En_Ge1_InitVars;
-extern ActorInit En_Ge2_InitVars;
-extern ActorInit En_Ge3_InitVars;
-extern ActorInit En_Geg_InitVars;
-extern ActorInit En_Gg_InitVars;
-extern ActorInit En_Gg2_InitVars;
-extern ActorInit En_Giant_InitVars;
-extern ActorInit En_Ginko_Man_InitVars;
-extern ActorInit En_GirlA_InitVars;
-extern ActorInit En_Gk_InitVars;
-extern ActorInit En_Gm_InitVars;
-extern ActorInit En_Go_InitVars;
-extern ActorInit En_Goroiwa_InitVars;
-extern ActorInit En_Grasshopper_InitVars;
-extern ActorInit En_Gs_InitVars;
-extern ActorInit En_Guard_Nuts_InitVars;
-extern ActorInit En_Guruguru_InitVars;
-extern ActorInit En_Hakurock_InitVars;
-extern ActorInit En_Hanabi_InitVars;
-extern ActorInit En_Hata_InitVars;
-extern ActorInit En_Heishi_InitVars;
-extern ActorInit En_Hg_InitVars;
-extern ActorInit En_Hgo_InitVars;
-extern ActorInit En_Hidden_Nuts_InitVars;
-extern ActorInit En_Hint_Skb_InitVars;
-extern ActorInit En_Hit_Tag_InitVars;
-extern ActorInit En_Holl_InitVars;
-extern ActorInit En_Honotrap_InitVars;
-extern ActorInit En_Horse_InitVars;
-extern ActorInit En_Horse_Game_Check_InitVars;
-extern ActorInit En_Horse_Link_Child_InitVars;
-extern ActorInit En_Hs_InitVars;
-extern ActorInit En_Hs2_InitVars;
-extern ActorInit En_Ig_InitVars;
-extern ActorInit En_Ik_InitVars;
-extern ActorInit En_In_InitVars;
-extern ActorInit En_Insect_InitVars;
-extern ActorInit En_Invadepoh_InitVars;
-extern ActorInit En_Invadepoh_Demo_InitVars;
-extern ActorInit En_Invisible_Ruppe_InitVars;
-extern ActorInit En_Ishi_InitVars;
-extern ActorInit En_Item00_InitVars;
-extern ActorInit En_Ja_InitVars;
-extern ActorInit En_Jc_Mato_InitVars;
-extern ActorInit En_Jg_InitVars;
-extern ActorInit En_Jgame_Tsn_InitVars;
-extern ActorInit En_Js_InitVars;
-extern ActorInit En_Jso_InitVars;
-extern ActorInit En_Jso2_InitVars;
-extern ActorInit En_Kaizoku_InitVars;
-extern ActorInit En_Kakasi_InitVars;
-extern ActorInit En_Kame_InitVars;
-extern ActorInit En_Kanban_InitVars;
-extern ActorInit En_Karebaba_InitVars;
-extern ActorInit En_Kbt_InitVars;
-extern ActorInit En_Kendo_Js_InitVars;
-extern ActorInit En_Kgy_InitVars;
-extern ActorInit En_Kitan_InitVars;
-extern ActorInit En_Knight_InitVars;
-extern ActorInit En_Kujiya_InitVars;
-extern ActorInit En_Kusa_InitVars;
-extern ActorInit En_Kusa2_InitVars;
-extern ActorInit En_Lift_Nuts_InitVars;
-extern ActorInit En_Light_InitVars;
-extern ActorInit En_Look_Nuts_InitVars;
-extern ActorInit En_Ma4_InitVars;
-extern ActorInit En_Mag_InitVars;
-extern ActorInit En_Maruta_InitVars;
-extern ActorInit En_Ma_Yto_InitVars;
-extern ActorInit En_Ma_Yts_InitVars;
-extern ActorInit En_Minideath_InitVars;
-extern ActorInit En_Minifrog_InitVars;
-extern ActorInit En_Minislime_InitVars;
-extern ActorInit En_Mk_InitVars;
-extern ActorInit En_Mkk_InitVars;
-extern ActorInit En_Mm_InitVars;
-extern ActorInit En_Mm2_InitVars;
-extern ActorInit En_Mm3_InitVars;
-extern ActorInit En_Mnk_InitVars;
-extern ActorInit En_Ms_InitVars;
-extern ActorInit En_Mt_tag_InitVars;
-extern ActorInit En_Mushi2_InitVars;
-extern ActorInit En_Muto_InitVars;
-extern ActorInit En_M_Fire1_InitVars;
-extern ActorInit En_M_Thunder_InitVars;
-extern ActorInit En_Nb_InitVars;
-extern ActorInit En_Neo_Reeba_InitVars;
-extern ActorInit En_Nimotsu_InitVars;
-extern ActorInit En_Niw_InitVars;
-extern ActorInit En_Nnh_InitVars;
-extern ActorInit En_Nutsball_InitVars;
-extern ActorInit En_Nwc_InitVars;
-extern ActorInit En_Okarina_Effect_InitVars;
-extern ActorInit En_Okarina_Tag_InitVars;
-extern ActorInit En_Okuta_InitVars;
-extern ActorInit En_Onpuman_InitVars;
-extern ActorInit En_Osk_InitVars;
-extern ActorInit En_Osn_InitVars;
-extern ActorInit En_Ossan_InitVars;
-extern ActorInit En_Ot_InitVars;
-extern ActorInit En_Owl_InitVars;
-extern ActorInit En_Pamera_InitVars;
-extern ActorInit En_Pametfrog_InitVars;
-extern ActorInit En_Paper_InitVars;
-extern ActorInit En_Part_InitVars;
-extern ActorInit En_Peehat_InitVars;
-extern ActorInit En_Pm_InitVars;
-extern ActorInit En_Poh_InitVars;
-extern ActorInit En_Po_Composer_InitVars;
-extern ActorInit En_Po_Fusen_InitVars;
-extern ActorInit En_Po_Sisters_InitVars;
-extern ActorInit En_Pp_InitVars;
-extern ActorInit En_Pr_InitVars;
-extern ActorInit En_Pr2_InitVars;
-extern ActorInit En_Prz_InitVars;
-extern ActorInit En_Pst_InitVars;
-extern ActorInit En_Racedog_InitVars;
-extern ActorInit En_Raf_InitVars;
-extern ActorInit En_Railgibud_InitVars;
-extern ActorInit En_Rail_Skb_InitVars;
-extern ActorInit En_Rat_InitVars;
-extern ActorInit En_Rd_InitVars;
-extern ActorInit En_Recepgirl_InitVars;
-extern ActorInit En_Rg_InitVars;
-extern ActorInit En_River_Sound_InitVars;
-extern ActorInit En_Rr_InitVars;
-extern ActorInit En_Rsn_InitVars;
-extern ActorInit En_Ru_InitVars;
-extern ActorInit En_Ruppecrow_InitVars;
-extern ActorInit En_Rz_InitVars;
-extern ActorInit En_Sb_InitVars;
-extern ActorInit En_Scopecoin_InitVars;
-extern ActorInit En_Scopecrow_InitVars;
-extern ActorInit En_Scopenuts_InitVars;
-extern ActorInit En_Sc_Ruppe_InitVars;
-extern ActorInit En_Sda_InitVars;
-extern ActorInit En_Sekihi_InitVars;
-extern ActorInit En_Sellnuts_InitVars;
-extern ActorInit En_Shn_InitVars;
-extern ActorInit En_Si_InitVars;
-extern ActorInit En_Skb_InitVars;
-extern ActorInit En_Slime_InitVars;
-extern ActorInit En_Snowman_InitVars;
-extern ActorInit En_Snowwd_InitVars;
-extern ActorInit En_Sob1_InitVars;
-extern ActorInit En_Ssh_InitVars;
-extern ActorInit En_St_InitVars;
-extern ActorInit En_Sth_InitVars;
-extern ActorInit En_Sth2_InitVars;
-extern ActorInit En_Stone_heishi_InitVars;
-extern ActorInit En_Stop_heishi_InitVars;
-extern ActorInit En_Stream_InitVars;
-extern ActorInit En_Suttari_InitVars;
-extern ActorInit En_Sw_InitVars;
-extern ActorInit En_Syateki_Crow_InitVars;
-extern ActorInit En_Syateki_Dekunuts_InitVars;
-extern ActorInit En_Syateki_Man_InitVars;
-extern ActorInit En_Syateki_Okuta_InitVars;
-extern ActorInit En_Syateki_Wf_InitVars;
-extern ActorInit En_S_Goro_InitVars;
-extern ActorInit En_Tab_InitVars;
-extern ActorInit En_Tag_Obj_InitVars;
-extern ActorInit En_Takaraya_InitVars;
-extern ActorInit En_Talk_InitVars;
-extern ActorInit En_Talk_Gibud_InitVars;
-extern ActorInit En_Tanron1_InitVars;
-extern ActorInit En_Tanron2_InitVars;
-extern ActorInit En_Tanron3_InitVars;
-extern ActorInit En_Tanron4_InitVars;
-extern ActorInit En_Tanron5_InitVars;
-extern ActorInit En_Tanron6_InitVars;
-extern ActorInit En_Test_InitVars;
-extern ActorInit En_Test2_InitVars;
-extern ActorInit En_Test3_InitVars;
-extern ActorInit En_Test4_InitVars;
-extern ActorInit En_Test5_InitVars;
-extern ActorInit En_Test6_InitVars;
-extern ActorInit En_Test7_InitVars;
-extern ActorInit En_Tg_InitVars;
-extern ActorInit En_Thiefbird_InitVars;
-extern ActorInit En_Time_Tag_InitVars;
-extern ActorInit En_Tite_InitVars;
-extern ActorInit En_Tk_InitVars;
-extern ActorInit En_Torch_InitVars;
-extern ActorInit En_Torch2_InitVars;
-extern ActorInit En_Toto_InitVars;
-extern ActorInit En_Trt_InitVars;
-extern ActorInit En_Trt2_InitVars;
-extern ActorInit En_Tru_InitVars;
-extern ActorInit En_Tru_Mt_InitVars;
-extern ActorInit En_Tsn_InitVars;
-extern ActorInit En_Tubo_Trap_InitVars;
-extern ActorInit En_Twig_InitVars;
-extern ActorInit En_Viewer_InitVars;
-extern ActorInit En_Vm_InitVars;
-extern ActorInit En_Wallmas_InitVars;
-extern ActorInit En_Warp_tag_InitVars;
-extern ActorInit En_Warp_Uzu_InitVars;
-extern ActorInit En_Water_Effect_InitVars;
-extern ActorInit En_Wdhand_InitVars;
-extern ActorInit En_Weather_Tag_InitVars;
-extern ActorInit En_Wf_InitVars;
-extern ActorInit En_Wiz_InitVars;
-extern ActorInit En_Wiz_Brock_InitVars;
-extern ActorInit En_Wiz_Fire_InitVars;
-extern ActorInit En_Wood02_InitVars;
-extern ActorInit En_Yb_InitVars;
-extern ActorInit En_Zl1_InitVars;
-extern ActorInit En_Zl4_InitVars;
-extern ActorInit En_Zo_InitVars;
-extern ActorInit En_Zob_InitVars;
-extern ActorInit En_Zod_InitVars;
-extern ActorInit En_Zog_InitVars;
-extern ActorInit En_Zoraegg_InitVars;
-extern ActorInit En_Zos_InitVars;
-extern ActorInit En_Zot_InitVars;
-extern ActorInit En_Zov_InitVars;
-extern ActorInit En_Zow_InitVars;
-extern ActorInit Item_B_Heart_InitVars;
-extern ActorInit Item_Etcetera_InitVars;
-extern ActorInit Item_Inbox_InitVars;
-extern ActorInit Mir_Ray_InitVars;
-extern ActorInit Mir_Ray2_InitVars;
-extern ActorInit Mir_Ray3_InitVars;
-extern ActorInit Object_Kankyo_InitVars;
-extern ActorInit Obj_Aqua_InitVars;
-extern ActorInit Obj_Armos_InitVars;
-extern ActorInit Obj_Bean_InitVars;
-extern ActorInit Obj_Bell_InitVars;
-extern ActorInit Obj_Bigicicle_InitVars;
-extern ActorInit Obj_Blockstop_InitVars;
-extern ActorInit Obj_Boat_InitVars;
-extern ActorInit Obj_Bombiwa_InitVars;
-extern ActorInit Obj_Boyo_InitVars;
-extern ActorInit Obj_Chan_InitVars;
-extern ActorInit Obj_Chikuwa_InitVars;
-extern ActorInit Obj_Comb_InitVars;
-extern ActorInit Obj_Danpeilift_InitVars;
-extern ActorInit Obj_Demo_InitVars;
-extern ActorInit Obj_Dhouse_InitVars;
-extern ActorInit Obj_Dinner_InitVars;
-extern ActorInit Obj_Dora_InitVars;
-extern ActorInit Obj_Dowsing_InitVars;
-extern ActorInit Obj_Driftice_InitVars;
-extern ActorInit Obj_Ending_InitVars;
-extern ActorInit Obj_Entotu_InitVars;
-extern ActorInit Obj_Etcetera_InitVars;
-extern ActorInit Obj_Fireshield_InitVars;
-extern ActorInit Obj_Flowerpot_InitVars;
-extern ActorInit Obj_Funen_InitVars;
-extern ActorInit Obj_Ghaka_InitVars;
-extern ActorInit Obj_Grass_InitVars;
-extern ActorInit Obj_Grass_Carry_InitVars;
-extern ActorInit Obj_Grass_Unit_InitVars;
-extern ActorInit Obj_Hakaisi_InitVars;
-extern ActorInit Obj_Hamishi_InitVars;
-extern ActorInit Obj_Hana_InitVars;
-extern ActorInit Obj_Hariko_InitVars;
-extern ActorInit Obj_Hgdoor_InitVars;
-extern ActorInit Obj_Hsblock_InitVars;
-extern ActorInit Obj_HsStump_InitVars;
-extern ActorInit Obj_Hugebombiwa_InitVars;
-extern ActorInit Obj_Hunsui_InitVars;
-extern ActorInit Obj_Iceblock_InitVars;
-extern ActorInit Obj_Ice_Poly_InitVars;
-extern ActorInit Obj_Jgame_Light_InitVars;
-extern ActorInit Obj_Jg_Gakki_InitVars;
-extern ActorInit Obj_Kendo_Kanban_InitVars;
-extern ActorInit Obj_Kepn_Koya_InitVars;
-extern ActorInit Obj_Kibako_InitVars;
-extern ActorInit Obj_Kibako2_InitVars;
-extern ActorInit Obj_Kinoko_InitVars;
-extern ActorInit Obj_Kzsaku_InitVars;
-extern ActorInit Obj_Lift_InitVars;
-extern ActorInit Obj_Lightblock_InitVars;
-extern ActorInit Obj_Lightswitch_InitVars;
-extern ActorInit Obj_Lupygamelift_InitVars;
-extern ActorInit Obj_Makekinsuta_InitVars;
-extern ActorInit Obj_Makeoshihiki_InitVars;
-extern ActorInit Obj_Milk_Bin_InitVars;
-extern ActorInit Obj_Mine_InitVars;
-extern ActorInit Obj_Moon_Stone_InitVars;
-extern ActorInit Obj_Mure_InitVars;
-extern ActorInit Obj_Mure2_InitVars;
-extern ActorInit Obj_Mure3_InitVars;
-extern ActorInit Obj_Mu_Pict_InitVars;
-extern ActorInit Obj_Nozoki_InitVars;
-extern ActorInit Obj_Ocarinalift_InitVars;
-extern ActorInit Obj_Oshihiki_InitVars;
-extern ActorInit Obj_Purify_InitVars;
-extern ActorInit Obj_Pzlblock_InitVars;
-extern ActorInit Obj_Raillift_InitVars;
-extern ActorInit Obj_Roomtimer_InitVars;
-extern ActorInit Obj_Rotlift_InitVars;
-extern ActorInit Obj_Shutter_InitVars;
-extern ActorInit Obj_Skateblock_InitVars;
-extern ActorInit Obj_Smork_InitVars;
-extern ActorInit Obj_Snowball_InitVars;
-extern ActorInit Obj_Snowball2_InitVars;
-extern ActorInit Obj_Sound_InitVars;
-extern ActorInit Obj_Spidertent_InitVars;
-extern ActorInit Obj_Spinyroll_InitVars;
-extern ActorInit Obj_Switch_InitVars;
-extern ActorInit Obj_Swprize_InitVars;
-extern ActorInit Obj_Syokudai_InitVars;
-extern ActorInit Obj_Takaraya_Wall_InitVars;
-extern ActorInit Obj_Taru_InitVars;
-extern ActorInit Obj_Toge_InitVars;
-extern ActorInit Obj_Tokeidai_InitVars;
-extern ActorInit Obj_Tokei_Step_InitVars;
-extern ActorInit Obj_Tokei_Tobira_InitVars;
-extern ActorInit Obj_Tokei_Turret_InitVars;
-extern ActorInit Obj_Toudai_InitVars;
-extern ActorInit Obj_Tree_InitVars;
-extern ActorInit Obj_Tsubo_InitVars;
-extern ActorInit Obj_Um_InitVars;
-extern ActorInit Obj_Usiyane_InitVars;
-extern ActorInit Obj_Visiblock_InitVars;
-extern ActorInit Obj_Vspinyroll_InitVars;
-extern ActorInit Obj_Warpstone_InitVars;
-extern ActorInit Obj_Wind_InitVars;
-extern ActorInit Obj_Wturn_InitVars;
-extern ActorInit Obj_Y2lift_InitVars;
-extern ActorInit Obj_Y2shutter_InitVars;
-extern ActorInit Obj_Yado_InitVars;
-extern ActorInit Obj_Yasi_InitVars;
-extern ActorInit Oceff_Spot_InitVars;
-extern ActorInit Oceff_Storm_InitVars;
-extern ActorInit Oceff_Wipe_InitVars;
-extern ActorInit Oceff_Wipe2_InitVars;
-extern ActorInit Oceff_Wipe3_InitVars;
-extern ActorInit Oceff_Wipe4_InitVars;
-extern ActorInit Oceff_Wipe5_InitVars;
-extern ActorInit Oceff_Wipe6_InitVars;
-extern ActorInit Oceff_Wipe7_InitVars;
-extern ActorInit Shot_Sun_InitVars;
-extern ActorInit TG_Sw_InitVars;
-
extern TransitionInit TransitionFade_InitVars;
extern TransitionInit TransitionTriforce_InitVars;
extern TransitionInit TransitionWipe1_InitVars;
diff --git a/include/macros.h b/include/macros.h
index ad963153f..70e07259f 100644
--- a/include/macros.h
+++ b/include/macros.h
@@ -47,17 +47,20 @@
#define CLOCK_TIME_MINUTE (CLOCK_TIME(0, 1))
#define DAY_LENGTH (CLOCK_TIME(24, 0))
+#define TIME_TO_HOURS_F(time) ((time) * (24.0f / 0x10000))
#define TIME_TO_MINUTES_F(time) ((time) * ((24.0f * 60.0f) / 0x10000)) // 0.021972656f
-#define CLOCK_TIME_F(hr, min) (((hr) * 60.0f + (min)) * (0x10000 / (24.0f * 60.0f)))
-
#define TIME_TO_MINUTES_ALT_F(time) ((time) / (0x10000 / (24.0f * 60.0f)))
+#define TIME_TO_SECONDS_F(time) ((time) * ((24.0f * 60.0f * 60.0f) / 0x10000))
+
+#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 CAPACITY(upg, value) gUpgradeCapacities[upg][value]
#define CUR_CAPACITY(upg) CAPACITY(upg, CUR_UPG_VALUE(upg))
// To be used with `Magic_Add`, but ensures enough magic is added to fill the magic bar to capacity
-#define MAGIC_FILL_TO_CAPACITY (((void)0, gSaveContext.magicFillTarget) + (gSaveContext.save.playerData.isDoubleMagicAcquired + 1) * MAGIC_NORMAL_METER)
+#define MAGIC_FILL_TO_CAPACITY (((void)0, gSaveContext.magicFillTarget) + (gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired + 1) * MAGIC_NORMAL_METER)
#define CONTROLLER1(gameState) (&(gameState)->input[0])
#define CONTROLLER2(gameState) (&(gameState)->input[1])
@@ -69,6 +72,11 @@
#define CHECK_FLAG_ALL(flags, mask) (((flags) & (mask)) == (mask))
+#define ALIGN8(val) (((val) + 7) & ~7)
+#define ALIGN16(val) (((val) + 0xF) & ~0xF)
+#define ALIGN64(val) (((val) + 0x3F) & ~0x3F)
+#define ALIGN256(val) (((val) + 0xFF) & ~0xFF)
+
extern GraphicsContext* __gfxCtx;
#define WORK_DISP __gfxCtx->work.p
@@ -106,7 +114,7 @@ extern GraphicsContext* __gfxCtx;
#define VTX_T(x, y, z, s, t, cr, cg, cb, a) \
{ { x, y, z }, 0, { s, t }, { cr, cg, cb, a }, }
-#define GRAPH_ALLOC(gfxCtx, size) ((void*)((gfxCtx)->polyOpa.d = (Gfx*)((u8*)(gfxCtx)->polyOpa.d - (size))))
+#define GRAPH_ALLOC(gfxCtx, size) ((void*)((gfxCtx)->polyOpa.d = (Gfx*)((u8*)(gfxCtx)->polyOpa.d - ALIGN16(size))))
// Custom gbi macro
#define gDPSetTileCustom(pkt, fmt, siz, width, height, pal, cms, cmt, masks, maskt, shifts, shiftt) \
@@ -123,11 +131,6 @@ extern GraphicsContext* __gfxCtx;
} \
(void)0
-#define ALIGN8(val) (((val) + 7) & ~7)
-#define ALIGN16(val) (((val) + 0xF) & ~0xF)
-#define ALIGN64(val) (((val) + 0x3F) & ~0x3F)
-#define ALIGN256(val) (((val) + 0xFF) & ~0xFF)
-
#define SQ(x) ((x) * (x))
#define ABS(x) ((x) >= 0 ? (x) : -(x))
#define ABS_ALT(x) ((x) < 0 ? -(x) : (x))
@@ -137,22 +140,21 @@ extern GraphicsContext* __gfxCtx;
#define CLAMP_MAX(x, max) ((x) > (max) ? (max) : (x))
#define CLAMP_MIN(x, min) ((x) < (min) ? (min) : (x))
+#define RGBA16_GET_R(pixel) (((pixel) >> 11) & 0x1F)
+#define RGBA16_GET_G(pixel) (((pixel) >> 6) & 0x1F)
+#define RGBA16_GET_B(pixel) (((pixel) >> 1) & 0x1F)
+
#define ROUND(x) (s32)(((x) >= 0.0) ? ((x) + 0.5) : ((x) - 0.5))
-#define SWAP(type, a, b) \
- { \
- type _temp = (a); \
- (a) = (b); \
- (b) = _temp; \
- }
+#define SWAP(type, a, b) \
+ { \
+ type _temp = (a); \
+ (a) = (b); \
+ (b) = _temp; \
+ } \
+ (void)0
#define OVERLAY_RELOCATION_OFFSET(overlayEntry) ((uintptr_t)((overlayEntry)->vramStart) - (uintptr_t)((overlayEntry)->loadedRamAddr))
#define VRAM_PTR_SIZE(entry) ((uintptr_t)((entry)->vramEnd) - (uintptr_t)((entry)->vramStart))
-#ifdef __GNUC__
-#define ALIGNED8 __attribute__ ((aligned (8)))
-#else
-#define ALIGNED8
-#endif
-
#endif // MACROS_H
diff --git a/include/regs.h b/include/regs.h
index 4ad6acbfb..112a00239 100644
--- a/include/regs.h
+++ b/include/regs.h
@@ -4,13 +4,28 @@
#ifndef REGS_H
#define REGS_H
+#include "ultra64.h"
+
#define REG_GROUPS 29 // number of REG groups, i.e. REG, SREG, OREG, etc.
#define REG_PAGES 6
#define REG_PER_PAGE 16
#define REG_PER_GROUP REG_PAGES * REG_PER_PAGE
-/* We probably want a better name for gGameInfo based on OoT discussions */
-#define BASE_REG(n, r) gGameInfo->data[n * REG_PER_GROUP + r]
+typedef struct RegEditor {
+ /* 0x00 */ u8 regPage; // 0: no page selected (reg editor is not active); 1: first page; `REG_PAGES`: last page
+ /* 0x01 */ u8 regGroup; // Indexed from 0 to `REG_GROUPS`-1. Each group has its own character to identify it.
+ /* 0x02 */ u8 regCur; // Selected reg, indexed from 0 as the page start
+ /* 0x03 */ u8 dPadInputPrev;
+ /* 0x04 */ u32 inputRepeatTimer;
+ /* 0x08 */ UNK_TYPE1 pad_08[0xC];
+ /* 0x14 */ s16 data[REG_GROUPS * REG_PER_GROUP]; // Accessed through *REG macros
+} RegEditor; // size = 0x15D4
+
+void Regs_Init(void);
+
+extern RegEditor* gRegEditor;
+
+#define BASE_REG(n, r) (gRegEditor->data[n * REG_PER_GROUP + r])
#define REG(r) BASE_REG(0, r)
#define SREG(r) BASE_REG(1, r)
@@ -42,14 +57,50 @@
#define kREG(r) BASE_REG(27, r)
#define bREG(r) BASE_REG(28, r)
-/* TODO: Actually confirm these, in case of miss-match it's at least a simple list to `sed` */
-#define R_ENABLE_ARENA_DBG SREG(0) // Same as OoT
+/* TODO: There are still a few OoT defines here that need confirmation */
+
+#define R_TIME_SPEED REG(15)
#define R_RUN_SPEED_LIMIT REG(45)
+
+#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_PAUSE_MENU_MODE SREG(94)
-#define R_PAUSE_WORLD_MAP_YAW YREG(24)
-#define R_PAUSE_WORLD_MAP_Y_OFFSET YREG(25)
-#define R_PAUSE_WORLD_MAP_DEPTH YREG(26)
+#define R_FB_FILTER_TYPE SREG(80)
+#define R_FB_FILTER_PRIM_COLOR(c) SREG(81 + c)
+#define R_FB_FILTER_A SREG(84)
+#define R_FB_FILTER_ENV_COLOR(c) SREG(85 + c)
+#define R_PICTO_PHOTO_STATE SREG(89)
+#define R_MOTION_BLUR_ALPHA SREG(90)
+#define R_MOTION_BLUR_ENABLED SREG(91)
+#define R_MOTION_BLUR_PRIORITY_ALPHA SREG(92)
+#define R_MOTION_BLUR_PRIORITY_ENABLED SREG(93)
+#define R_PAUSE_BG_PRERENDER_STATE SREG(94)
+
+#define R_PLAY_FILL_SCREEN_ON MREG(64)
+#define R_PLAY_FILL_SCREEN_R MREG(65)
+#define R_PLAY_FILL_SCREEN_G MREG(66)
+#define R_PLAY_FILL_SCREEN_B MREG(67)
+#define R_PLAY_FILL_SCREEN_ALPHA MREG(68)
+
+#define R_PAUSE_WORLD_MAP_YAW YREG(24)
+#define R_PAUSE_WORLD_MAP_Y_OFFSET YREG(25)
+#define R_PAUSE_WORLD_MAP_DEPTH YREG(26)
+#define R_PICTO_FOCUS_BORDER_TOPLEFT_X YREG(32)
+#define R_PICTO_FOCUS_BORDER_TOPLEFT_Y YREG(33)
+#define R_PICTO_FOCUS_BORDER_TOPRIGHT_X YREG(34)
+#define R_PICTO_FOCUS_BORDER_TOPRIGHT_Y YREG(35)
+#define R_PICTO_FOCUS_BORDER_BOTTOMLEFT_X YREG(36)
+#define R_PICTO_FOCUS_BORDER_BOTTOMLEFT_Y YREG(37)
+#define R_PICTO_FOCUS_BORDER_BOTTOMRIGHT_X YREG(38)
+#define R_PICTO_FOCUS_BORDER_BOTTOMRIGHT_Y YREG(39)
+#define R_PICTO_FOCUS_ICON_X YREG(40)
+#define R_PICTO_FOCUS_ICON_Y YREG(41)
+#define R_PICTO_FOCUS_TEXT_X YREG(42)
+#define R_PICTO_FOCUS_TEXT_Y YREG(43)
+#define R_PAUSE_DBG_QUEST_CURSOR_ON YREG(69)
+#define R_PAUSE_DBG_QUEST_CURSOR_X YREG(70)
+#define R_PAUSE_DBG_QUEST_CURSOR_Y YREG(71)
+
#define R_MAGIC_FILL_COLOR(i) ZREG(0 + i)
#define R_C_BTN_COLOR(i) ZREG(39 + i)
#define R_B_BTN_COLOR(i) ZREG(43 + i)
@@ -66,20 +117,34 @@
#define R_ITEM_ICON_X(i) ZREG(82 + i)
#define R_ITEM_ICON_Y(i) ZREG(86 + i)
#define R_ITEM_ICON_DD(i) ZREG(90 + i)
-#define R_A_BTN_Y XREG(16)
-#define R_A_BTN_X XREG(17)
-#define R_A_ICON_Y XREG(19)
-#define R_A_ICON_X XREG(20)
-#define R_A_BTN_COLOR(i) XREG(22 + i)
-#define R_MAGIC_CONSUME_TIMER_GIANTS_MASK XREG(41)
-#define R_PAUSE_DBG_MAP_CLOUD_ON XREG(50)
-#define R_PAUSE_DBG_MAP_CLOUD_X XREG(52)
-#define R_PAUSE_DBG_MAP_CLOUD_Y XREG(53)
-#define R_MOON_CRASH_TIMER_Y XREG(80)
-#define R_MOON_CRASH_TIMER_X XREG(81)
-#define R_PAUSE_OWLWARP_ALPHA XREG(87)
-#define R_REVERSE_FLOOR_INDEX XREG(94)
-#define R_MINIMAP_DISABLED XREG(95)
+
+#define R_MAGIC_DBG_SET_UPGRADE XREG(4)
+#define R_A_BTN_Y XREG(16)
+#define R_A_BTN_X XREG(17)
+#define R_A_ICON_Y XREG(19)
+#define R_A_ICON_X XREG(20)
+#define R_A_BTN_COLOR(i) XREG(22 + i)
+#define R_A_BTN_Y_OFFSET XREG(31)
+#define R_MAGIC_CONSUME_TIMER_GIANTS_MASK XREG(41)
+#define R_THREE_DAY_CLOCK_Y_POS XREG(43)
+#define R_THREE_DAY_CLOCK_SUN_MOON_CUTOFF XREG(44)
+#define R_THREE_DAY_CLOCK_HOUR_DIGIT_CUTOFF XREG(45)
+#define R_PAUSE_DBG_MAP_CLOUD_ON XREG(50)
+#define R_PAUSE_DBG_MAP_CLOUD_X XREG(52)
+#define R_PAUSE_DBG_MAP_CLOUD_Y XREG(53)
+#define R_MOON_CRASH_TIMER_Y XREG(80)
+#define R_MOON_CRASH_TIMER_X XREG(81)
+#define R_PAUSE_OWLWARP_ALPHA XREG(87)
+#define R_STORY_FILL_SCREEN_ALPHA XREG(91)
+#define R_REVERSE_FLOOR_INDEX XREG(94)
+#define R_MINIMAP_DISABLED XREG(95)
+
+#define R_TRANS_FADE_FLASH_ALPHA_STEP iREG(50) // Set to a negative number to start the flash
+#define R_ROOM_CULL_DEBUG_MODE iREG(86)
+#define R_ROOM_CULL_NUM_ENTRIES iREG(87)
+#define R_ROOM_CULL_USED_ENTRIES iREG(88)
+#define R_ROOM_CULL_DEBUG_TARGET iREG(89)
+
#define R_B_LABEL_DD WREG(0)
#define R_OW_MINIMAP_X WREG(29)
#define R_OW_MINIMAP_Y WREG(30)
@@ -87,6 +152,7 @@
#define R_B_LABEL_Y(i) WREG(43 + i)
#define R_DGN_MINIMAP_X WREG(68)
#define R_DGN_MINIMAP_Y WREG(69)
+
#define R_MAP_INDEX VREG(11)
#define R_MAP_TEX_INDEX_BASE VREG(12)
#define R_MAP_TEX_INDEX VREG(13)
@@ -100,9 +166,7 @@
#define R_ITEM_ICON_WIDTH(i) VREG(76 + i)
#define R_ITEM_BTN_WIDTH(i) VREG(80 + i)
-#define R_FB_FILTER_TYPE SREG(80)
-#define R_FB_FILTER_PRIM_COLOR(c) SREG(81 + c)
-#define R_FB_FILTER_A SREG(84)
-#define R_FB_FILTER_ENV_COLOR(c) SREG(85 + c)
+// Name inferred from OoT. Set to true to manually set play->csCtx.script
+#define R_USE_DEBUG_CUTSCENE dREG(95)
#endif
diff --git a/include/segment_symbols.h b/include/segment_symbols.h
index 1339c879c..79601bc93 100644
--- a/include/segment_symbols.h
+++ b/include/segment_symbols.h
@@ -53,7 +53,9 @@ 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(schedule_static)
DECLARE_ROM_SEGMENT(story_static)
@@ -76,1081 +78,31 @@ DECLARE_OVERLAY_SEGMENT(daytelop)
DECLARE_OVERLAY_SEGMENT(kaleido_scope)
DECLARE_OVERLAY_SEGMENT(player_actor)
-DECLARE_OVERLAY_SEGMENT(En_Test)
-DECLARE_OVERLAY_SEGMENT(En_GirlA)
-DECLARE_OVERLAY_SEGMENT(En_Part)
-DECLARE_OVERLAY_SEGMENT(En_Light)
-DECLARE_OVERLAY_SEGMENT(En_Door)
-DECLARE_OVERLAY_SEGMENT(En_Box)
-DECLARE_OVERLAY_SEGMENT(En_Pametfrog)
-DECLARE_OVERLAY_SEGMENT(En_Okuta)
-DECLARE_OVERLAY_SEGMENT(En_Bom)
-DECLARE_OVERLAY_SEGMENT(En_Wallmas)
-DECLARE_OVERLAY_SEGMENT(En_Dodongo)
-DECLARE_OVERLAY_SEGMENT(En_Firefly)
-DECLARE_OVERLAY_SEGMENT(En_Horse)
-DECLARE_OVERLAY_SEGMENT(En_Arrow)
-DECLARE_OVERLAY_SEGMENT(En_Elf)
-DECLARE_OVERLAY_SEGMENT(En_Niw)
-DECLARE_OVERLAY_SEGMENT(En_Tite)
-DECLARE_OVERLAY_SEGMENT(En_Peehat)
-DECLARE_OVERLAY_SEGMENT(En_Holl)
-DECLARE_OVERLAY_SEGMENT(En_Dinofos)
-DECLARE_OVERLAY_SEGMENT(En_Hata)
-DECLARE_OVERLAY_SEGMENT(En_Zl1)
-DECLARE_OVERLAY_SEGMENT(En_Viewer)
-DECLARE_OVERLAY_SEGMENT(En_Bubble)
-DECLARE_OVERLAY_SEGMENT(Door_Shutter)
-DECLARE_OVERLAY_SEGMENT(En_Boom)
-DECLARE_OVERLAY_SEGMENT(En_Torch2)
-DECLARE_OVERLAY_SEGMENT(En_Minifrog)
-DECLARE_OVERLAY_SEGMENT(En_St)
-DECLARE_OVERLAY_SEGMENT(Obj_Wturn)
-DECLARE_OVERLAY_SEGMENT(En_River_Sound)
-DECLARE_OVERLAY_SEGMENT(En_Ossan)
-DECLARE_OVERLAY_SEGMENT(En_Famos)
-DECLARE_OVERLAY_SEGMENT(En_Bombf)
-DECLARE_OVERLAY_SEGMENT(En_Am)
-DECLARE_OVERLAY_SEGMENT(En_Dekubaba)
-DECLARE_OVERLAY_SEGMENT(En_M_Fire1)
-DECLARE_OVERLAY_SEGMENT(En_M_Thunder)
-DECLARE_OVERLAY_SEGMENT(Bg_Breakwall)
-DECLARE_OVERLAY_SEGMENT(Door_Warp1)
-DECLARE_OVERLAY_SEGMENT(Obj_Syokudai)
-DECLARE_OVERLAY_SEGMENT(Item_B_Heart)
-DECLARE_OVERLAY_SEGMENT(En_Dekunuts)
-DECLARE_OVERLAY_SEGMENT(En_Bbfall)
-DECLARE_OVERLAY_SEGMENT(Arms_Hook)
-DECLARE_OVERLAY_SEGMENT(En_Bb)
-DECLARE_OVERLAY_SEGMENT(Bg_Keikoku_Spr)
-DECLARE_OVERLAY_SEGMENT(En_Wood02)
-DECLARE_OVERLAY_SEGMENT(En_Death)
-DECLARE_OVERLAY_SEGMENT(En_Minideath)
-DECLARE_OVERLAY_SEGMENT(En_Vm)
-DECLARE_OVERLAY_SEGMENT(Demo_Effect)
-DECLARE_OVERLAY_SEGMENT(Demo_Kankyo)
-DECLARE_OVERLAY_SEGMENT(En_Floormas)
-DECLARE_OVERLAY_SEGMENT(En_Rd)
-DECLARE_OVERLAY_SEGMENT(Bg_F40_Flift)
-DECLARE_OVERLAY_SEGMENT(Obj_Mure)
-DECLARE_OVERLAY_SEGMENT(En_Sw)
-DECLARE_OVERLAY_SEGMENT(Object_Kankyo)
-DECLARE_OVERLAY_SEGMENT(En_Horse_Link_Child)
-DECLARE_OVERLAY_SEGMENT(Door_Ana)
-DECLARE_OVERLAY_SEGMENT(En_Encount1)
-DECLARE_OVERLAY_SEGMENT(Demo_Tre_Lgt)
-DECLARE_OVERLAY_SEGMENT(En_Encount2)
-DECLARE_OVERLAY_SEGMENT(En_Fire_Rock)
-DECLARE_OVERLAY_SEGMENT(Bg_Ctower_Rot)
-DECLARE_OVERLAY_SEGMENT(Mir_Ray)
-DECLARE_OVERLAY_SEGMENT(En_Sb)
-DECLARE_OVERLAY_SEGMENT(En_Bigslime)
-DECLARE_OVERLAY_SEGMENT(En_Karebaba)
-DECLARE_OVERLAY_SEGMENT(En_In)
-DECLARE_OVERLAY_SEGMENT(En_Bom_Chu)
-DECLARE_OVERLAY_SEGMENT(En_Horse_Game_Check)
-DECLARE_OVERLAY_SEGMENT(En_Rr)
-DECLARE_OVERLAY_SEGMENT(En_Fr)
-DECLARE_OVERLAY_SEGMENT(En_Fishing)
-DECLARE_OVERLAY_SEGMENT(Obj_Oshihiki)
-DECLARE_OVERLAY_SEGMENT(Eff_Dust)
-DECLARE_OVERLAY_SEGMENT(Bg_Umajump)
-DECLARE_OVERLAY_SEGMENT(En_Insect)
-DECLARE_OVERLAY_SEGMENT(En_Butte)
-DECLARE_OVERLAY_SEGMENT(En_Fish)
-DECLARE_OVERLAY_SEGMENT(Item_Etcetera)
-DECLARE_OVERLAY_SEGMENT(Arrow_Fire)
-DECLARE_OVERLAY_SEGMENT(Arrow_Ice)
-DECLARE_OVERLAY_SEGMENT(Arrow_Light)
-DECLARE_OVERLAY_SEGMENT(Obj_Kibako)
-DECLARE_OVERLAY_SEGMENT(Obj_Tsubo)
-DECLARE_OVERLAY_SEGMENT(En_Ik)
-DECLARE_OVERLAY_SEGMENT(Demo_Shd)
-DECLARE_OVERLAY_SEGMENT(En_Dns)
-DECLARE_OVERLAY_SEGMENT(Elf_Msg)
-DECLARE_OVERLAY_SEGMENT(En_Honotrap)
-DECLARE_OVERLAY_SEGMENT(En_Tubo_Trap)
-DECLARE_OVERLAY_SEGMENT(Obj_Ice_Poly)
-DECLARE_OVERLAY_SEGMENT(En_Fz)
-DECLARE_OVERLAY_SEGMENT(En_Kusa)
-DECLARE_OVERLAY_SEGMENT(Obj_Bean)
-DECLARE_OVERLAY_SEGMENT(Obj_Bombiwa)
-DECLARE_OVERLAY_SEGMENT(Obj_Switch)
-DECLARE_OVERLAY_SEGMENT(Obj_Lift)
-DECLARE_OVERLAY_SEGMENT(Obj_Hsblock)
-DECLARE_OVERLAY_SEGMENT(En_Okarina_Tag)
-DECLARE_OVERLAY_SEGMENT(En_Goroiwa)
-DECLARE_OVERLAY_SEGMENT(En_Daiku)
-DECLARE_OVERLAY_SEGMENT(En_Nwc)
-DECLARE_OVERLAY_SEGMENT(Item_Inbox)
-DECLARE_OVERLAY_SEGMENT(En_Ge1)
-DECLARE_OVERLAY_SEGMENT(Obj_Blockstop)
-DECLARE_OVERLAY_SEGMENT(En_Sda)
-DECLARE_OVERLAY_SEGMENT(En_Clear_Tag)
-DECLARE_OVERLAY_SEGMENT(En_Gm)
-DECLARE_OVERLAY_SEGMENT(En_Ms)
-DECLARE_OVERLAY_SEGMENT(En_Hs)
-DECLARE_OVERLAY_SEGMENT(Bg_Ingate)
-DECLARE_OVERLAY_SEGMENT(En_Kanban)
-DECLARE_OVERLAY_SEGMENT(En_Attack_Niw)
-DECLARE_OVERLAY_SEGMENT(En_Mk)
-DECLARE_OVERLAY_SEGMENT(En_Owl)
-DECLARE_OVERLAY_SEGMENT(En_Ishi)
-DECLARE_OVERLAY_SEGMENT(Obj_Hana)
-DECLARE_OVERLAY_SEGMENT(Obj_Lightswitch)
-DECLARE_OVERLAY_SEGMENT(Obj_Mure2)
-DECLARE_OVERLAY_SEGMENT(En_Fu)
-DECLARE_OVERLAY_SEGMENT(En_Stream)
-DECLARE_OVERLAY_SEGMENT(En_Mm)
-DECLARE_OVERLAY_SEGMENT(En_Weather_Tag)
-DECLARE_OVERLAY_SEGMENT(En_Ani)
-DECLARE_OVERLAY_SEGMENT(En_Js)
-DECLARE_OVERLAY_SEGMENT(En_Okarina_Effect)
-DECLARE_OVERLAY_SEGMENT(En_Mag)
-DECLARE_OVERLAY_SEGMENT(Elf_Msg2)
-DECLARE_OVERLAY_SEGMENT(Bg_F40_Swlift)
-DECLARE_OVERLAY_SEGMENT(En_Kakasi)
-DECLARE_OVERLAY_SEGMENT(Obj_Makeoshihiki)
-DECLARE_OVERLAY_SEGMENT(Oceff_Spot)
-DECLARE_OVERLAY_SEGMENT(En_Torch)
-DECLARE_OVERLAY_SEGMENT(Shot_Sun)
-DECLARE_OVERLAY_SEGMENT(Obj_Roomtimer)
-DECLARE_OVERLAY_SEGMENT(En_Ssh)
-DECLARE_OVERLAY_SEGMENT(Oceff_Wipe)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_Dust)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_Kirakira)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_Bomb2)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_Blast)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_G_Spk)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_D_Fire)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_Bubble)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_G_Ripple)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_G_Splash)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_G_Fire)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_Lightning)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_Dt_Bubble)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_Hahen)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_Stick)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_Sibuki)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_Stone1)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_Hitmark)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_Fhg_Flash)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_K_Fire)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_Solder_Srch_Ball)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_Kakera)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_Ice_Piece)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_En_Ice)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_Fire_Tail)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_En_Fire)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_Extra)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_Dead_Db)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_Dead_Dd)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_Dead_Ds)
-DECLARE_OVERLAY_SEGMENT(Oceff_Storm)
-DECLARE_OVERLAY_SEGMENT(Obj_Demo)
-DECLARE_OVERLAY_SEGMENT(En_Minislime)
-DECLARE_OVERLAY_SEGMENT(En_Nutsball)
-DECLARE_OVERLAY_SEGMENT(Oceff_Wipe2)
-DECLARE_OVERLAY_SEGMENT(Oceff_Wipe3)
-DECLARE_OVERLAY_SEGMENT(En_Dg)
-DECLARE_OVERLAY_SEGMENT(En_Si)
-DECLARE_OVERLAY_SEGMENT(Obj_Comb)
-DECLARE_OVERLAY_SEGMENT(Obj_Kibako2)
-DECLARE_OVERLAY_SEGMENT(En_Hs2)
-DECLARE_OVERLAY_SEGMENT(Obj_Mure3)
-DECLARE_OVERLAY_SEGMENT(En_Tg)
-DECLARE_OVERLAY_SEGMENT(En_Wf)
-DECLARE_OVERLAY_SEGMENT(En_Skb)
-DECLARE_OVERLAY_SEGMENT(En_Gs)
-DECLARE_OVERLAY_SEGMENT(Obj_Sound)
-DECLARE_OVERLAY_SEGMENT(En_Crow)
-DECLARE_OVERLAY_SEGMENT(En_Cow)
-DECLARE_OVERLAY_SEGMENT(Oceff_Wipe4)
-DECLARE_OVERLAY_SEGMENT(En_Zo)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_Ice_Smoke)
-DECLARE_OVERLAY_SEGMENT(Obj_Makekinsuta)
-DECLARE_OVERLAY_SEGMENT(En_Ge3)
-DECLARE_OVERLAY_SEGMENT(Obj_Hamishi)
-DECLARE_OVERLAY_SEGMENT(En_Zl4)
-DECLARE_OVERLAY_SEGMENT(En_Mm2)
-DECLARE_OVERLAY_SEGMENT(Door_Spiral)
-DECLARE_OVERLAY_SEGMENT(Obj_Pzlblock)
-DECLARE_OVERLAY_SEGMENT(Obj_Toge)
-DECLARE_OVERLAY_SEGMENT(Obj_Armos)
-DECLARE_OVERLAY_SEGMENT(Obj_Boyo)
-DECLARE_OVERLAY_SEGMENT(En_Grasshopper)
-DECLARE_OVERLAY_SEGMENT(Obj_Grass)
-DECLARE_OVERLAY_SEGMENT(Obj_Grass_Carry)
-DECLARE_OVERLAY_SEGMENT(Obj_Grass_Unit)
-DECLARE_OVERLAY_SEGMENT(Bg_Fire_Wall)
-DECLARE_OVERLAY_SEGMENT(En_Bu)
-DECLARE_OVERLAY_SEGMENT(En_Encount3)
-DECLARE_OVERLAY_SEGMENT(En_Jso)
-DECLARE_OVERLAY_SEGMENT(Obj_Chikuwa)
-DECLARE_OVERLAY_SEGMENT(En_Knight)
-DECLARE_OVERLAY_SEGMENT(En_Warp_tag)
-DECLARE_OVERLAY_SEGMENT(En_Aob_01)
-DECLARE_OVERLAY_SEGMENT(En_Boj_01)
-DECLARE_OVERLAY_SEGMENT(En_Boj_02)
-DECLARE_OVERLAY_SEGMENT(En_Boj_03)
-DECLARE_OVERLAY_SEGMENT(En_Encount4)
-DECLARE_OVERLAY_SEGMENT(En_Bom_Bowl_Man)
-DECLARE_OVERLAY_SEGMENT(En_Syateki_Man)
-DECLARE_OVERLAY_SEGMENT(Bg_Icicle)
-DECLARE_OVERLAY_SEGMENT(En_Syateki_Crow)
-DECLARE_OVERLAY_SEGMENT(En_Boj_04)
-DECLARE_OVERLAY_SEGMENT(En_Cne_01)
-DECLARE_OVERLAY_SEGMENT(En_Bba_01)
-DECLARE_OVERLAY_SEGMENT(En_Bji_01)
-DECLARE_OVERLAY_SEGMENT(Bg_Spdweb)
-DECLARE_OVERLAY_SEGMENT(En_Mt_tag)
-DECLARE_OVERLAY_SEGMENT(Boss_01)
-DECLARE_OVERLAY_SEGMENT(Boss_02)
-DECLARE_OVERLAY_SEGMENT(Boss_03)
-DECLARE_OVERLAY_SEGMENT(Boss_04)
-DECLARE_OVERLAY_SEGMENT(Boss_05)
-DECLARE_OVERLAY_SEGMENT(Boss_06)
-DECLARE_OVERLAY_SEGMENT(Boss_07)
-DECLARE_OVERLAY_SEGMENT(Bg_Dy_Yoseizo)
-DECLARE_OVERLAY_SEGMENT(En_Boj_05)
-DECLARE_OVERLAY_SEGMENT(En_Sob1)
-DECLARE_OVERLAY_SEGMENT(En_Go)
-DECLARE_OVERLAY_SEGMENT(En_Raf)
-DECLARE_OVERLAY_SEGMENT(Obj_Funen)
-DECLARE_OVERLAY_SEGMENT(Obj_Raillift)
-DECLARE_OVERLAY_SEGMENT(Bg_Numa_Hana)
-DECLARE_OVERLAY_SEGMENT(Obj_Flowerpot)
-DECLARE_OVERLAY_SEGMENT(Obj_Spinyroll)
-DECLARE_OVERLAY_SEGMENT(Dm_Hina)
-DECLARE_OVERLAY_SEGMENT(En_Syateki_Wf)
-DECLARE_OVERLAY_SEGMENT(Obj_Skateblock)
-DECLARE_OVERLAY_SEGMENT(Effect_En_Ice_Block)
-DECLARE_OVERLAY_SEGMENT(Obj_Iceblock)
-DECLARE_OVERLAY_SEGMENT(En_Bigpamet)
-DECLARE_OVERLAY_SEGMENT(Bg_Dblue_Movebg)
-DECLARE_OVERLAY_SEGMENT(En_Syateki_Dekunuts)
-DECLARE_OVERLAY_SEGMENT(Elf_Msg3)
-DECLARE_OVERLAY_SEGMENT(En_Fg)
-DECLARE_OVERLAY_SEGMENT(Dm_Ravine)
-DECLARE_OVERLAY_SEGMENT(Dm_Sa)
-DECLARE_OVERLAY_SEGMENT(En_Slime)
-DECLARE_OVERLAY_SEGMENT(En_Pr)
-DECLARE_OVERLAY_SEGMENT(Obj_Toudai)
-DECLARE_OVERLAY_SEGMENT(Obj_Entotu)
-DECLARE_OVERLAY_SEGMENT(Obj_Bell)
-DECLARE_OVERLAY_SEGMENT(En_Syateki_Okuta)
-DECLARE_OVERLAY_SEGMENT(Obj_Shutter)
-DECLARE_OVERLAY_SEGMENT(Dm_Zl)
-DECLARE_OVERLAY_SEGMENT(En_Ru)
-DECLARE_OVERLAY_SEGMENT(En_Elfgrp)
-DECLARE_OVERLAY_SEGMENT(Dm_Tsg)
-DECLARE_OVERLAY_SEGMENT(En_Baguo)
-DECLARE_OVERLAY_SEGMENT(Obj_Vspinyroll)
-DECLARE_OVERLAY_SEGMENT(Obj_Smork)
-DECLARE_OVERLAY_SEGMENT(En_Test2)
-DECLARE_OVERLAY_SEGMENT(En_Test3)
-DECLARE_OVERLAY_SEGMENT(En_Test4)
-DECLARE_OVERLAY_SEGMENT(En_Bat)
-DECLARE_OVERLAY_SEGMENT(En_Sekihi)
-DECLARE_OVERLAY_SEGMENT(En_Wiz)
-DECLARE_OVERLAY_SEGMENT(En_Wiz_Brock)
-DECLARE_OVERLAY_SEGMENT(En_Wiz_Fire)
-DECLARE_OVERLAY_SEGMENT(Eff_Change)
-DECLARE_OVERLAY_SEGMENT(Dm_Statue)
-DECLARE_OVERLAY_SEGMENT(Obj_Fireshield)
-DECLARE_OVERLAY_SEGMENT(Bg_Ladder)
-DECLARE_OVERLAY_SEGMENT(En_Mkk)
-DECLARE_OVERLAY_SEGMENT(Demo_Getitem)
-DECLARE_OVERLAY_SEGMENT(En_Dnb)
-DECLARE_OVERLAY_SEGMENT(En_Dnh)
-DECLARE_OVERLAY_SEGMENT(En_Dnk)
-DECLARE_OVERLAY_SEGMENT(En_Dnq)
-DECLARE_OVERLAY_SEGMENT(Bg_Keikoku_Saku)
-DECLARE_OVERLAY_SEGMENT(Obj_Hugebombiwa)
-DECLARE_OVERLAY_SEGMENT(En_Firefly2)
-DECLARE_OVERLAY_SEGMENT(En_Rat)
-DECLARE_OVERLAY_SEGMENT(En_Water_Effect)
-DECLARE_OVERLAY_SEGMENT(En_Kusa2)
-DECLARE_OVERLAY_SEGMENT(Bg_Spout_Fire)
-DECLARE_OVERLAY_SEGMENT(En_Dy_Extra)
-DECLARE_OVERLAY_SEGMENT(En_Bal)
-DECLARE_OVERLAY_SEGMENT(En_Ginko_Man)
-DECLARE_OVERLAY_SEGMENT(En_Warp_Uzu)
-DECLARE_OVERLAY_SEGMENT(Obj_Driftice)
-DECLARE_OVERLAY_SEGMENT(En_Look_Nuts)
-DECLARE_OVERLAY_SEGMENT(En_Mushi2)
-DECLARE_OVERLAY_SEGMENT(En_Fall)
-DECLARE_OVERLAY_SEGMENT(En_Mm3)
-DECLARE_OVERLAY_SEGMENT(Bg_Crace_Movebg)
-DECLARE_OVERLAY_SEGMENT(En_Dno)
-DECLARE_OVERLAY_SEGMENT(En_Pr2)
-DECLARE_OVERLAY_SEGMENT(En_Prz)
-DECLARE_OVERLAY_SEGMENT(En_Jso2)
-DECLARE_OVERLAY_SEGMENT(Obj_Etcetera)
-DECLARE_OVERLAY_SEGMENT(En_Egol)
-DECLARE_OVERLAY_SEGMENT(Obj_Mine)
-DECLARE_OVERLAY_SEGMENT(Obj_Purify)
-DECLARE_OVERLAY_SEGMENT(En_Tru)
-DECLARE_OVERLAY_SEGMENT(En_Trt)
-DECLARE_OVERLAY_SEGMENT(En_Test5)
-DECLARE_OVERLAY_SEGMENT(En_Test6)
-DECLARE_OVERLAY_SEGMENT(En_Az)
-DECLARE_OVERLAY_SEGMENT(En_Estone)
-DECLARE_OVERLAY_SEGMENT(Bg_Hakugin_Post)
-DECLARE_OVERLAY_SEGMENT(Dm_Opstage)
-DECLARE_OVERLAY_SEGMENT(Dm_Stk)
-DECLARE_OVERLAY_SEGMENT(Dm_Char00)
-DECLARE_OVERLAY_SEGMENT(Dm_Char01)
-DECLARE_OVERLAY_SEGMENT(Dm_Char02)
-DECLARE_OVERLAY_SEGMENT(Dm_Char03)
-DECLARE_OVERLAY_SEGMENT(Dm_Char04)
-DECLARE_OVERLAY_SEGMENT(Dm_Char05)
-DECLARE_OVERLAY_SEGMENT(Dm_Char06)
-DECLARE_OVERLAY_SEGMENT(Dm_Char07)
-DECLARE_OVERLAY_SEGMENT(Dm_Char08)
-DECLARE_OVERLAY_SEGMENT(Dm_Char09)
-DECLARE_OVERLAY_SEGMENT(Obj_Tokeidai)
-DECLARE_OVERLAY_SEGMENT(En_Mnk)
-DECLARE_OVERLAY_SEGMENT(En_Egblock)
-DECLARE_OVERLAY_SEGMENT(En_Guard_Nuts)
-DECLARE_OVERLAY_SEGMENT(Bg_Hakugin_Bombwall)
-DECLARE_OVERLAY_SEGMENT(Obj_Tokei_Tobira)
-DECLARE_OVERLAY_SEGMENT(Bg_Hakugin_Elvpole)
-DECLARE_OVERLAY_SEGMENT(En_Ma4)
-DECLARE_OVERLAY_SEGMENT(En_Twig)
-DECLARE_OVERLAY_SEGMENT(En_Po_Fusen)
-DECLARE_OVERLAY_SEGMENT(En_Door_Etc)
-DECLARE_OVERLAY_SEGMENT(En_Bigokuta)
-DECLARE_OVERLAY_SEGMENT(Bg_Icefloe)
+#define DEFINE_ACTOR(name, _enumValue, _allocType, _debugName) DECLARE_OVERLAY_SEGMENT(name)
+#define DEFINE_ACTOR_INTERNAL(_name, _enumValue, _allocType, _debugName)
+#define DEFINE_ACTOR_UNSET(_enumValue)
+
+#include "tables/actor_table.h"
+
+#undef DEFINE_ACTOR
+#undef DEFINE_ACTOR_INTERNAL
+#undef DEFINE_ACTOR_UNSET
+
DECLARE_OVERLAY_SEGMENT(fbdemo_triforce)
DECLARE_OVERLAY_SEGMENT(fbdemo_wipe1)
DECLARE_OVERLAY_SEGMENT(fbdemo_wipe3)
DECLARE_OVERLAY_SEGMENT(fbdemo_wipe4)
DECLARE_OVERLAY_SEGMENT(fbdemo_wipe5)
-DECLARE_OVERLAY_SEGMENT(Effect_Ss_Sbn)
-DECLARE_OVERLAY_SEGMENT(Obj_Ocarinalift)
-DECLARE_OVERLAY_SEGMENT(En_Time_Tag)
-DECLARE_OVERLAY_SEGMENT(Bg_Open_Shutter)
-DECLARE_OVERLAY_SEGMENT(Bg_Open_Spot)
-DECLARE_OVERLAY_SEGMENT(Bg_Fu_Kaiten)
-DECLARE_OVERLAY_SEGMENT(Obj_Aqua)
-DECLARE_OVERLAY_SEGMENT(En_Elforg)
-DECLARE_OVERLAY_SEGMENT(En_Elfbub)
-DECLARE_OVERLAY_SEGMENT(En_Fu_Mato)
-DECLARE_OVERLAY_SEGMENT(En_Fu_Kago)
-DECLARE_OVERLAY_SEGMENT(En_Osn)
-DECLARE_OVERLAY_SEGMENT(Bg_Ctower_Gear)
-DECLARE_OVERLAY_SEGMENT(En_Trt2)
-DECLARE_OVERLAY_SEGMENT(Obj_Tokei_Step)
-DECLARE_OVERLAY_SEGMENT(Bg_Lotus)
-DECLARE_OVERLAY_SEGMENT(En_Kame)
-DECLARE_OVERLAY_SEGMENT(Obj_Takaraya_Wall)
-DECLARE_OVERLAY_SEGMENT(Bg_Fu_Mizu)
-DECLARE_OVERLAY_SEGMENT(En_Sellnuts)
-DECLARE_OVERLAY_SEGMENT(Bg_Dkjail_Ivy)
-DECLARE_OVERLAY_SEGMENT(Obj_Visiblock)
-DECLARE_OVERLAY_SEGMENT(En_Takaraya)
-DECLARE_OVERLAY_SEGMENT(En_Tsn)
-DECLARE_OVERLAY_SEGMENT(En_Ds2n)
-DECLARE_OVERLAY_SEGMENT(En_Fsn)
-DECLARE_OVERLAY_SEGMENT(En_Shn)
-DECLARE_OVERLAY_SEGMENT(En_Stop_heishi)
-DECLARE_OVERLAY_SEGMENT(Obj_Bigicicle)
-DECLARE_OVERLAY_SEGMENT(En_Lift_Nuts)
-DECLARE_OVERLAY_SEGMENT(En_Tk)
-DECLARE_OVERLAY_SEGMENT(Bg_Market_Step)
-DECLARE_OVERLAY_SEGMENT(Obj_Lupygamelift)
-DECLARE_OVERLAY_SEGMENT(En_Test7)
-DECLARE_OVERLAY_SEGMENT(Obj_Lightblock)
-DECLARE_OVERLAY_SEGMENT(Mir_Ray2)
-DECLARE_OVERLAY_SEGMENT(En_Wdhand)
-DECLARE_OVERLAY_SEGMENT(En_Gamelupy)
-DECLARE_OVERLAY_SEGMENT(Bg_Danpei_Movebg)
-DECLARE_OVERLAY_SEGMENT(En_Snowwd)
-DECLARE_OVERLAY_SEGMENT(En_Pm)
-DECLARE_OVERLAY_SEGMENT(En_Gakufu)
-DECLARE_OVERLAY_SEGMENT(Elf_Msg4)
-DECLARE_OVERLAY_SEGMENT(Elf_Msg5)
-DECLARE_OVERLAY_SEGMENT(En_Col_Man)
-DECLARE_OVERLAY_SEGMENT(En_Talk_Gibud)
-DECLARE_OVERLAY_SEGMENT(En_Giant)
-DECLARE_OVERLAY_SEGMENT(Obj_Snowball)
-DECLARE_OVERLAY_SEGMENT(Boss_Hakugin)
-DECLARE_OVERLAY_SEGMENT(En_Gb2)
-DECLARE_OVERLAY_SEGMENT(En_Onpuman)
-DECLARE_OVERLAY_SEGMENT(Bg_Tobira01)
-DECLARE_OVERLAY_SEGMENT(En_Tag_Obj)
-DECLARE_OVERLAY_SEGMENT(Obj_Dhouse)
-DECLARE_OVERLAY_SEGMENT(Obj_Hakaisi)
-DECLARE_OVERLAY_SEGMENT(Bg_Hakugin_Switch)
-DECLARE_OVERLAY_SEGMENT(En_Snowman)
-DECLARE_OVERLAY_SEGMENT(TG_Sw)
-DECLARE_OVERLAY_SEGMENT(En_Po_Sisters)
-DECLARE_OVERLAY_SEGMENT(En_Pp)
-DECLARE_OVERLAY_SEGMENT(En_Hakurock)
-DECLARE_OVERLAY_SEGMENT(En_Hanabi)
-DECLARE_OVERLAY_SEGMENT(Obj_Dowsing)
-DECLARE_OVERLAY_SEGMENT(Obj_Wind)
-DECLARE_OVERLAY_SEGMENT(En_Racedog)
-DECLARE_OVERLAY_SEGMENT(En_Kendo_Js)
-DECLARE_OVERLAY_SEGMENT(Bg_Botihasira)
-DECLARE_OVERLAY_SEGMENT(En_Fish2)
-DECLARE_OVERLAY_SEGMENT(En_Pst)
-DECLARE_OVERLAY_SEGMENT(En_Poh)
-DECLARE_OVERLAY_SEGMENT(Obj_Spidertent)
-DECLARE_OVERLAY_SEGMENT(En_Zoraegg)
-DECLARE_OVERLAY_SEGMENT(En_Kbt)
-DECLARE_OVERLAY_SEGMENT(En_Gg)
-DECLARE_OVERLAY_SEGMENT(En_Maruta)
-DECLARE_OVERLAY_SEGMENT(Obj_Snowball2)
-DECLARE_OVERLAY_SEGMENT(En_Gg2)
-DECLARE_OVERLAY_SEGMENT(Obj_Ghaka)
-DECLARE_OVERLAY_SEGMENT(En_Dnp)
-DECLARE_OVERLAY_SEGMENT(En_Dai)
-DECLARE_OVERLAY_SEGMENT(Bg_Goron_Oyu)
-DECLARE_OVERLAY_SEGMENT(En_Kgy)
-DECLARE_OVERLAY_SEGMENT(En_Invadepoh)
-DECLARE_OVERLAY_SEGMENT(En_Gk)
-DECLARE_OVERLAY_SEGMENT(En_An)
-DECLARE_OVERLAY_SEGMENT(En_Bee)
-DECLARE_OVERLAY_SEGMENT(En_Ot)
-DECLARE_OVERLAY_SEGMENT(En_Dragon)
-DECLARE_OVERLAY_SEGMENT(Obj_Dora)
-DECLARE_OVERLAY_SEGMENT(En_Bigpo)
-DECLARE_OVERLAY_SEGMENT(Obj_Kendo_Kanban)
-DECLARE_OVERLAY_SEGMENT(Obj_Hariko)
-DECLARE_OVERLAY_SEGMENT(En_Sth)
-DECLARE_OVERLAY_SEGMENT(Bg_Sinkai_Kabe)
-DECLARE_OVERLAY_SEGMENT(Bg_Haka_Curtain)
-DECLARE_OVERLAY_SEGMENT(Bg_Kin2_Bombwall)
-DECLARE_OVERLAY_SEGMENT(Bg_Kin2_Fence)
-DECLARE_OVERLAY_SEGMENT(Bg_Kin2_Picture)
-DECLARE_OVERLAY_SEGMENT(Bg_Kin2_Shelf)
-DECLARE_OVERLAY_SEGMENT(En_Rail_Skb)
-DECLARE_OVERLAY_SEGMENT(En_Jg)
-DECLARE_OVERLAY_SEGMENT(En_Tru_Mt)
-DECLARE_OVERLAY_SEGMENT(Obj_Um)
-DECLARE_OVERLAY_SEGMENT(En_Neo_Reeba)
-DECLARE_OVERLAY_SEGMENT(Bg_Mbar_Chair)
-DECLARE_OVERLAY_SEGMENT(Bg_Ikana_Block)
-DECLARE_OVERLAY_SEGMENT(Bg_Ikana_Mirror)
-DECLARE_OVERLAY_SEGMENT(Bg_Ikana_Rotaryroom)
-DECLARE_OVERLAY_SEGMENT(Bg_Dblue_Balance)
-DECLARE_OVERLAY_SEGMENT(Bg_Dblue_Waterfall)
-DECLARE_OVERLAY_SEGMENT(En_Kaizoku)
-DECLARE_OVERLAY_SEGMENT(En_Ge2)
-DECLARE_OVERLAY_SEGMENT(En_Ma_Yts)
-DECLARE_OVERLAY_SEGMENT(En_Ma_Yto)
-DECLARE_OVERLAY_SEGMENT(Obj_Tokei_Turret)
-DECLARE_OVERLAY_SEGMENT(Bg_Dblue_Elevator)
-DECLARE_OVERLAY_SEGMENT(Obj_Warpstone)
-DECLARE_OVERLAY_SEGMENT(En_Zog)
-DECLARE_OVERLAY_SEGMENT(Obj_Rotlift)
-DECLARE_OVERLAY_SEGMENT(Obj_Jg_Gakki)
-DECLARE_OVERLAY_SEGMENT(Bg_Inibs_Movebg)
-DECLARE_OVERLAY_SEGMENT(En_Zot)
-DECLARE_OVERLAY_SEGMENT(Obj_Tree)
-DECLARE_OVERLAY_SEGMENT(Obj_Y2lift)
-DECLARE_OVERLAY_SEGMENT(Obj_Y2shutter)
-DECLARE_OVERLAY_SEGMENT(Obj_Boat)
-DECLARE_OVERLAY_SEGMENT(Obj_Taru)
-DECLARE_OVERLAY_SEGMENT(Obj_Hunsui)
-DECLARE_OVERLAY_SEGMENT(En_Jc_Mato)
-DECLARE_OVERLAY_SEGMENT(Mir_Ray3)
-DECLARE_OVERLAY_SEGMENT(En_Zob)
-DECLARE_OVERLAY_SEGMENT(Elf_Msg6)
-DECLARE_OVERLAY_SEGMENT(Obj_Nozoki)
-DECLARE_OVERLAY_SEGMENT(En_Toto)
-DECLARE_OVERLAY_SEGMENT(En_Railgibud)
-DECLARE_OVERLAY_SEGMENT(En_Baba)
-DECLARE_OVERLAY_SEGMENT(En_Suttari)
-DECLARE_OVERLAY_SEGMENT(En_Zod)
-DECLARE_OVERLAY_SEGMENT(En_Kujiya)
-DECLARE_OVERLAY_SEGMENT(En_Geg)
-DECLARE_OVERLAY_SEGMENT(Obj_Kinoko)
-DECLARE_OVERLAY_SEGMENT(Obj_Yasi)
-DECLARE_OVERLAY_SEGMENT(En_Tanron1)
-DECLARE_OVERLAY_SEGMENT(En_Tanron2)
-DECLARE_OVERLAY_SEGMENT(En_Tanron3)
-DECLARE_OVERLAY_SEGMENT(Obj_Chan)
-DECLARE_OVERLAY_SEGMENT(En_Zos)
-DECLARE_OVERLAY_SEGMENT(En_S_Goro)
-DECLARE_OVERLAY_SEGMENT(En_Nb)
-DECLARE_OVERLAY_SEGMENT(En_Ja)
-DECLARE_OVERLAY_SEGMENT(Bg_F40_Block)
-DECLARE_OVERLAY_SEGMENT(Bg_F40_Switch)
-DECLARE_OVERLAY_SEGMENT(En_Po_Composer)
-DECLARE_OVERLAY_SEGMENT(En_Guruguru)
-DECLARE_OVERLAY_SEGMENT(Oceff_Wipe5)
-DECLARE_OVERLAY_SEGMENT(En_Stone_heishi)
-DECLARE_OVERLAY_SEGMENT(Oceff_Wipe6)
-DECLARE_OVERLAY_SEGMENT(En_Scopenuts)
-DECLARE_OVERLAY_SEGMENT(En_Scopecrow)
-DECLARE_OVERLAY_SEGMENT(Oceff_Wipe7)
-DECLARE_OVERLAY_SEGMENT(Eff_Kamejima_Wave)
-DECLARE_OVERLAY_SEGMENT(En_Hg)
-DECLARE_OVERLAY_SEGMENT(En_Hgo)
-DECLARE_OVERLAY_SEGMENT(En_Zov)
-DECLARE_OVERLAY_SEGMENT(En_Ah)
-DECLARE_OVERLAY_SEGMENT(Obj_Hgdoor)
-DECLARE_OVERLAY_SEGMENT(Bg_Ikana_Bombwall)
-DECLARE_OVERLAY_SEGMENT(Bg_Ikana_Ray)
-DECLARE_OVERLAY_SEGMENT(Bg_Ikana_Shutter)
-DECLARE_OVERLAY_SEGMENT(Bg_Haka_Bombwall)
-DECLARE_OVERLAY_SEGMENT(Bg_Haka_Tomb)
-DECLARE_OVERLAY_SEGMENT(En_Sc_Ruppe)
-DECLARE_OVERLAY_SEGMENT(Bg_Iknv_Doukutu)
-DECLARE_OVERLAY_SEGMENT(Bg_Iknv_Obj)
-DECLARE_OVERLAY_SEGMENT(En_Pamera)
-DECLARE_OVERLAY_SEGMENT(Obj_HsStump)
-DECLARE_OVERLAY_SEGMENT(En_Hidden_Nuts)
-DECLARE_OVERLAY_SEGMENT(En_Zow)
-DECLARE_OVERLAY_SEGMENT(En_Talk)
-DECLARE_OVERLAY_SEGMENT(En_Al)
-DECLARE_OVERLAY_SEGMENT(En_Tab)
-DECLARE_OVERLAY_SEGMENT(En_Nimotsu)
-DECLARE_OVERLAY_SEGMENT(En_Hit_Tag)
-DECLARE_OVERLAY_SEGMENT(En_Ruppecrow)
-DECLARE_OVERLAY_SEGMENT(En_Tanron4)
-DECLARE_OVERLAY_SEGMENT(En_Tanron5)
-DECLARE_OVERLAY_SEGMENT(En_Tanron6)
-DECLARE_OVERLAY_SEGMENT(En_Daiku2)
-DECLARE_OVERLAY_SEGMENT(En_Muto)
-DECLARE_OVERLAY_SEGMENT(En_Baisen)
-DECLARE_OVERLAY_SEGMENT(En_Heishi)
-DECLARE_OVERLAY_SEGMENT(En_Demo_heishi)
-DECLARE_OVERLAY_SEGMENT(En_Dt)
-DECLARE_OVERLAY_SEGMENT(En_Cha)
-DECLARE_OVERLAY_SEGMENT(Obj_Dinner)
-DECLARE_OVERLAY_SEGMENT(Eff_Lastday)
-DECLARE_OVERLAY_SEGMENT(Bg_Ikana_Dharma)
-DECLARE_OVERLAY_SEGMENT(En_Akindonuts)
-DECLARE_OVERLAY_SEGMENT(Eff_Stk)
-DECLARE_OVERLAY_SEGMENT(En_Ig)
-DECLARE_OVERLAY_SEGMENT(En_Rg)
-DECLARE_OVERLAY_SEGMENT(En_Osk)
-DECLARE_OVERLAY_SEGMENT(En_Sth2)
-DECLARE_OVERLAY_SEGMENT(En_Yb)
-DECLARE_OVERLAY_SEGMENT(En_Rz)
-DECLARE_OVERLAY_SEGMENT(En_Scopecoin)
-DECLARE_OVERLAY_SEGMENT(En_Bjt)
-DECLARE_OVERLAY_SEGMENT(En_Bomjima)
-DECLARE_OVERLAY_SEGMENT(En_Bomjimb)
-DECLARE_OVERLAY_SEGMENT(En_Bombers)
-DECLARE_OVERLAY_SEGMENT(En_Bombers2)
-DECLARE_OVERLAY_SEGMENT(En_Bombal)
-DECLARE_OVERLAY_SEGMENT(Obj_Moon_Stone)
-DECLARE_OVERLAY_SEGMENT(Obj_Mu_Pict)
-DECLARE_OVERLAY_SEGMENT(Bg_Ikninside)
-DECLARE_OVERLAY_SEGMENT(Eff_Zoraband)
-DECLARE_OVERLAY_SEGMENT(Obj_Kepn_Koya)
-DECLARE_OVERLAY_SEGMENT(Obj_Usiyane)
-DECLARE_OVERLAY_SEGMENT(En_Nnh)
-DECLARE_OVERLAY_SEGMENT(Obj_Kzsaku)
-DECLARE_OVERLAY_SEGMENT(Obj_Milk_Bin)
-DECLARE_OVERLAY_SEGMENT(En_Kitan)
-DECLARE_OVERLAY_SEGMENT(Bg_Astr_Bombwall)
-DECLARE_OVERLAY_SEGMENT(Bg_Iknin_Susceil)
-DECLARE_OVERLAY_SEGMENT(En_Bsb)
-DECLARE_OVERLAY_SEGMENT(En_Recepgirl)
-DECLARE_OVERLAY_SEGMENT(En_Thiefbird)
-DECLARE_OVERLAY_SEGMENT(En_Jgame_Tsn)
-DECLARE_OVERLAY_SEGMENT(Obj_Jgame_Light)
-DECLARE_OVERLAY_SEGMENT(Obj_Yado)
-DECLARE_OVERLAY_SEGMENT(Demo_Syoten)
-DECLARE_OVERLAY_SEGMENT(Demo_Moonend)
-DECLARE_OVERLAY_SEGMENT(Bg_Lbfshot)
-DECLARE_OVERLAY_SEGMENT(Bg_Last_Bwall)
-DECLARE_OVERLAY_SEGMENT(En_And)
-DECLARE_OVERLAY_SEGMENT(En_Invadepoh_Demo)
-DECLARE_OVERLAY_SEGMENT(Obj_Danpeilift)
-DECLARE_OVERLAY_SEGMENT(En_Fall2)
-DECLARE_OVERLAY_SEGMENT(Dm_Al)
-DECLARE_OVERLAY_SEGMENT(Dm_An)
-DECLARE_OVERLAY_SEGMENT(Dm_Ah)
-DECLARE_OVERLAY_SEGMENT(Dm_Nb)
-DECLARE_OVERLAY_SEGMENT(En_Drs)
-DECLARE_OVERLAY_SEGMENT(En_Ending_Hero)
-DECLARE_OVERLAY_SEGMENT(Dm_Bal)
-DECLARE_OVERLAY_SEGMENT(En_Paper)
-DECLARE_OVERLAY_SEGMENT(En_Hint_Skb)
-DECLARE_OVERLAY_SEGMENT(Dm_Tag)
-DECLARE_OVERLAY_SEGMENT(En_Bh)
-DECLARE_OVERLAY_SEGMENT(En_Ending_Hero2)
-DECLARE_OVERLAY_SEGMENT(En_Ending_Hero3)
-DECLARE_OVERLAY_SEGMENT(En_Ending_Hero4)
-DECLARE_OVERLAY_SEGMENT(En_Ending_Hero5)
-DECLARE_OVERLAY_SEGMENT(En_Ending_Hero6)
-DECLARE_OVERLAY_SEGMENT(Dm_Gm)
-DECLARE_OVERLAY_SEGMENT(Obj_Swprize)
-DECLARE_OVERLAY_SEGMENT(En_Invisible_Ruppe)
-DECLARE_OVERLAY_SEGMENT(Obj_Ending)
-DECLARE_OVERLAY_SEGMENT(En_Rsn)
-DECLARE_ROM_SEGMENT(gameplay_keep)
-DECLARE_ROM_SEGMENT(gameplay_field_keep)
-DECLARE_ROM_SEGMENT(gameplay_dangeon_keep)
-DECLARE_ROM_SEGMENT(object_link_boy)
-DECLARE_ROM_SEGMENT(object_link_child)
-DECLARE_ROM_SEGMENT(object_link_goron)
-DECLARE_ROM_SEGMENT(object_link_zora)
-DECLARE_ROM_SEGMENT(object_link_nuts)
-DECLARE_ROM_SEGMENT(object_mask_ki_tan)
-DECLARE_ROM_SEGMENT(object_mask_rabit)
-DECLARE_ROM_SEGMENT(object_mask_skj)
-DECLARE_ROM_SEGMENT(object_mask_truth)
-DECLARE_ROM_SEGMENT(object_mask_gibudo)
-DECLARE_ROM_SEGMENT(object_mask_json)
-DECLARE_ROM_SEGMENT(object_mask_kerfay)
-DECLARE_ROM_SEGMENT(object_mask_bigelf)
-DECLARE_ROM_SEGMENT(object_mask_kyojin)
-DECLARE_ROM_SEGMENT(object_mask_romerny)
-DECLARE_ROM_SEGMENT(object_mask_posthat)
-DECLARE_ROM_SEGMENT(object_mask_zacho)
-DECLARE_ROM_SEGMENT(object_mask_stone)
-DECLARE_ROM_SEGMENT(object_mask_bree)
-DECLARE_ROM_SEGMENT(object_mask_gero)
-DECLARE_ROM_SEGMENT(object_mask_yofukasi)
-DECLARE_ROM_SEGMENT(object_mask_meoto)
-DECLARE_ROM_SEGMENT(object_mask_dancer)
-DECLARE_ROM_SEGMENT(object_mask_bakuretu)
-DECLARE_ROM_SEGMENT(object_mask_bu_san)
-DECLARE_ROM_SEGMENT(object_mask_goron)
-DECLARE_ROM_SEGMENT(object_mask_zora)
-DECLARE_ROM_SEGMENT(object_mask_nuts)
-DECLARE_ROM_SEGMENT(object_mask_boy)
-DECLARE_ROM_SEGMENT(object_box)
-DECLARE_ROM_SEGMENT(object_okuta)
-DECLARE_ROM_SEGMENT(object_wallmaster)
-DECLARE_ROM_SEGMENT(object_dy_obj)
-DECLARE_ROM_SEGMENT(object_firefly)
-DECLARE_ROM_SEGMENT(object_dodongo)
-DECLARE_ROM_SEGMENT(object_niw)
-DECLARE_ROM_SEGMENT(object_tite)
-DECLARE_ROM_SEGMENT(object_ph)
-DECLARE_ROM_SEGMENT(object_dinofos)
-DECLARE_ROM_SEGMENT(object_zl1)
-DECLARE_ROM_SEGMENT(object_bubble)
-DECLARE_ROM_SEGMENT(object_test3)
-DECLARE_ROM_SEGMENT(object_famos)
-DECLARE_ROM_SEGMENT(object_st)
-DECLARE_ROM_SEGMENT(object_thiefbird)
-DECLARE_ROM_SEGMENT(object_bombf)
-DECLARE_ROM_SEGMENT(object_am)
-DECLARE_ROM_SEGMENT(object_dekubaba)
-DECLARE_ROM_SEGMENT(object_warp1)
-DECLARE_ROM_SEGMENT(object_b_heart)
-DECLARE_ROM_SEGMENT(object_dekunuts)
-DECLARE_ROM_SEGMENT(object_bb)
-DECLARE_ROM_SEGMENT(object_death)
-DECLARE_ROM_SEGMENT(object_hata)
-DECLARE_ROM_SEGMENT(object_wood02)
-DECLARE_ROM_SEGMENT(object_trap)
-DECLARE_ROM_SEGMENT(object_vm)
-DECLARE_ROM_SEGMENT(object_efc_star_field)
-DECLARE_ROM_SEGMENT(object_rd)
-DECLARE_ROM_SEGMENT(object_yukimura_obj)
-DECLARE_ROM_SEGMENT(object_horse_link_child)
-DECLARE_ROM_SEGMENT(object_syokudai)
-DECLARE_ROM_SEGMENT(object_efc_tw)
-DECLARE_ROM_SEGMENT(object_gi_key)
-DECLARE_ROM_SEGMENT(object_mir_ray)
-DECLARE_ROM_SEGMENT(object_ctower_rot)
-DECLARE_ROM_SEGMENT(object_bdoor)
-DECLARE_ROM_SEGMENT(object_sb)
-DECLARE_ROM_SEGMENT(object_gi_melody)
-DECLARE_ROM_SEGMENT(object_gi_heart)
-DECLARE_ROM_SEGMENT(object_gi_compass)
-DECLARE_ROM_SEGMENT(object_gi_bosskey)
-DECLARE_ROM_SEGMENT(object_gi_nuts)
-DECLARE_ROM_SEGMENT(object_gi_hearts)
-DECLARE_ROM_SEGMENT(object_gi_arrowcase)
-DECLARE_ROM_SEGMENT(object_gi_bombpouch)
-DECLARE_ROM_SEGMENT(object_in)
-DECLARE_ROM_SEGMENT(object_os_anime)
-DECLARE_ROM_SEGMENT(object_gi_bottle)
-DECLARE_ROM_SEGMENT(object_gi_stick)
-DECLARE_ROM_SEGMENT(object_gi_map)
-DECLARE_ROM_SEGMENT(object_oF1d_map)
-DECLARE_ROM_SEGMENT(object_ru2)
-DECLARE_ROM_SEGMENT(object_gi_magicpot)
-DECLARE_ROM_SEGMENT(object_gi_bomb_1)
-DECLARE_ROM_SEGMENT(object_ma2)
-DECLARE_ROM_SEGMENT(object_gi_purse)
-DECLARE_ROM_SEGMENT(object_rr)
-DECLARE_ROM_SEGMENT(object_gi_arrow)
-DECLARE_ROM_SEGMENT(object_gi_bomb_2)
-DECLARE_ROM_SEGMENT(object_gi_shield_2)
-DECLARE_ROM_SEGMENT(object_gi_hookshot)
-DECLARE_ROM_SEGMENT(object_gi_ocarina)
-DECLARE_ROM_SEGMENT(object_gi_milk)
-DECLARE_ROM_SEGMENT(object_ma1)
-DECLARE_ROM_SEGMENT(object_ny)
-DECLARE_ROM_SEGMENT(object_fr)
-DECLARE_ROM_SEGMENT(object_gi_bow)
-DECLARE_ROM_SEGMENT(object_gi_glasses)
-DECLARE_ROM_SEGMENT(object_gi_liquid)
-DECLARE_ROM_SEGMENT(object_ani)
-DECLARE_ROM_SEGMENT(object_gi_shield_3)
-DECLARE_ROM_SEGMENT(object_gi_bean)
-DECLARE_ROM_SEGMENT(object_gi_fish)
-DECLARE_ROM_SEGMENT(object_gi_longsword)
-DECLARE_ROM_SEGMENT(object_zo)
-DECLARE_ROM_SEGMENT(object_umajump)
-DECLARE_ROM_SEGMENT(object_mastergolon)
-DECLARE_ROM_SEGMENT(object_masterzoora)
-DECLARE_ROM_SEGMENT(object_aob)
-DECLARE_ROM_SEGMENT(object_ik)
-DECLARE_ROM_SEGMENT(object_ahg)
-DECLARE_ROM_SEGMENT(object_cne)
-DECLARE_ROM_SEGMENT(object_bji)
-DECLARE_ROM_SEGMENT(object_bba)
-DECLARE_ROM_SEGMENT(object_an1)
-DECLARE_ROM_SEGMENT(object_boj)
-DECLARE_ROM_SEGMENT(object_fz)
-DECLARE_ROM_SEGMENT(object_bob)
-DECLARE_ROM_SEGMENT(object_ge1)
-DECLARE_ROM_SEGMENT(object_yabusame_point)
-DECLARE_ROM_SEGMENT(object_d_hsblock)
-DECLARE_ROM_SEGMENT(object_d_lift)
-DECLARE_ROM_SEGMENT(object_mamenoki)
-DECLARE_ROM_SEGMENT(object_goroiwa)
-DECLARE_ROM_SEGMENT(object_toryo)
-DECLARE_ROM_SEGMENT(object_daiku)
-DECLARE_ROM_SEGMENT(object_nwc)
-DECLARE_ROM_SEGMENT(object_gm)
-DECLARE_ROM_SEGMENT(object_ms)
-DECLARE_ROM_SEGMENT(object_hs)
-DECLARE_ROM_SEGMENT(object_lightswitch)
-DECLARE_ROM_SEGMENT(object_kusa)
-DECLARE_ROM_SEGMENT(object_tsubo)
-DECLARE_ROM_SEGMENT(object_kanban)
-DECLARE_ROM_SEGMENT(object_owl)
-DECLARE_ROM_SEGMENT(object_mk)
-DECLARE_ROM_SEGMENT(object_fu)
-DECLARE_ROM_SEGMENT(object_gi_ki_tan_mask)
-DECLARE_ROM_SEGMENT(object_gi_mask18)
-DECLARE_ROM_SEGMENT(object_gi_rabit_mask)
-DECLARE_ROM_SEGMENT(object_gi_truth_mask)
-DECLARE_ROM_SEGMENT(object_stream)
-DECLARE_ROM_SEGMENT(object_mm)
-DECLARE_ROM_SEGMENT(object_js)
-DECLARE_ROM_SEGMENT(object_cs)
-DECLARE_ROM_SEGMENT(object_gi_soldout)
-DECLARE_ROM_SEGMENT(object_mag)
-DECLARE_ROM_SEGMENT(object_gi_golonmask)
-DECLARE_ROM_SEGMENT(object_gi_zoramask)
-DECLARE_ROM_SEGMENT(object_ka)
-DECLARE_ROM_SEGMENT(object_zg)
-DECLARE_ROM_SEGMENT(object_gi_m_arrow)
-DECLARE_ROM_SEGMENT(object_ds2)
-DECLARE_ROM_SEGMENT(object_fish)
-DECLARE_ROM_SEGMENT(object_gi_sutaru)
-DECLARE_ROM_SEGMENT(object_ssh)
-DECLARE_ROM_SEGMENT(object_bigslime)
-DECLARE_ROM_SEGMENT(object_bg)
-DECLARE_ROM_SEGMENT(object_bombiwa)
-DECLARE_ROM_SEGMENT(object_hintnuts)
-DECLARE_ROM_SEGMENT(object_rs)
-DECLARE_ROM_SEGMENT(object_gla)
-DECLARE_ROM_SEGMENT(object_geldb)
-DECLARE_ROM_SEGMENT(object_dog)
-DECLARE_ROM_SEGMENT(object_kibako2)
-DECLARE_ROM_SEGMENT(object_dns)
-DECLARE_ROM_SEGMENT(object_dnk)
-DECLARE_ROM_SEGMENT(object_gi_insect)
-DECLARE_ROM_SEGMENT(object_gi_ghost)
-DECLARE_ROM_SEGMENT(object_gi_soul)
-DECLARE_ROM_SEGMENT(object_f40_obj)
-DECLARE_ROM_SEGMENT(object_gi_rupy)
-DECLARE_ROM_SEGMENT(object_po_composer)
-DECLARE_ROM_SEGMENT(object_mu)
-DECLARE_ROM_SEGMENT(object_wf)
-DECLARE_ROM_SEGMENT(object_skb)
-DECLARE_ROM_SEGMENT(object_gs)
-DECLARE_ROM_SEGMENT(object_ps)
-DECLARE_ROM_SEGMENT(object_omoya_obj)
-DECLARE_ROM_SEGMENT(object_crow)
-DECLARE_ROM_SEGMENT(object_cow)
-DECLARE_ROM_SEGMENT(object_gi_sword_1)
-DECLARE_ROM_SEGMENT(object_zl4)
-DECLARE_ROM_SEGMENT(object_grasshopper)
-DECLARE_ROM_SEGMENT(object_boyo)
-DECLARE_ROM_SEGMENT(object_fwall)
-DECLARE_ROM_SEGMENT(object_jso)
-DECLARE_ROM_SEGMENT(object_knight)
-DECLARE_ROM_SEGMENT(object_icicle)
-DECLARE_ROM_SEGMENT(object_spdweb)
-DECLARE_ROM_SEGMENT(object_boss01)
-DECLARE_ROM_SEGMENT(object_boss02)
-DECLARE_ROM_SEGMENT(object_boss03)
-DECLARE_ROM_SEGMENT(object_boss04)
-DECLARE_ROM_SEGMENT(object_boss05)
-DECLARE_ROM_SEGMENT(object_boss07)
-DECLARE_ROM_SEGMENT(object_raf)
-DECLARE_ROM_SEGMENT(object_funen)
-DECLARE_ROM_SEGMENT(object_raillift)
-DECLARE_ROM_SEGMENT(object_numa_obj)
-DECLARE_ROM_SEGMENT(object_flowerpot)
-DECLARE_ROM_SEGMENT(object_spinyroll)
-DECLARE_ROM_SEGMENT(object_ice_block)
-DECLARE_ROM_SEGMENT(object_keikoku_demo)
-DECLARE_ROM_SEGMENT(object_slime)
-DECLARE_ROM_SEGMENT(object_pr)
-DECLARE_ROM_SEGMENT(object_f52_obj)
-DECLARE_ROM_SEGMENT(object_f53_obj)
-DECLARE_ROM_SEGMENT(object_kibako)
-DECLARE_ROM_SEGMENT(object_sek)
-DECLARE_ROM_SEGMENT(object_gmo)
-DECLARE_ROM_SEGMENT(object_bat)
-DECLARE_ROM_SEGMENT(object_sekihil)
-DECLARE_ROM_SEGMENT(object_sekihig)
-DECLARE_ROM_SEGMENT(object_sekihin)
-DECLARE_ROM_SEGMENT(object_sekihiz)
-DECLARE_ROM_SEGMENT(object_wiz)
-DECLARE_ROM_SEGMENT(object_ladder)
-DECLARE_ROM_SEGMENT(object_mkk)
-DECLARE_ROM_SEGMENT(object_keikoku_obj)
-DECLARE_ROM_SEGMENT(object_sichitai_obj)
-DECLARE_ROM_SEGMENT(object_dekucity_ana_obj)
-DECLARE_ROM_SEGMENT(object_rat)
-DECLARE_ROM_SEGMENT(object_water_effect)
-DECLARE_ROM_SEGMENT(object_dblue_object)
-DECLARE_ROM_SEGMENT(object_bal)
-DECLARE_ROM_SEGMENT(object_warp_uzu)
-DECLARE_ROM_SEGMENT(object_driftice)
-DECLARE_ROM_SEGMENT(object_fall)
-DECLARE_ROM_SEGMENT(object_hanareyama_obj)
-DECLARE_ROM_SEGMENT(object_crace_object)
-DECLARE_ROM_SEGMENT(object_dno)
-DECLARE_ROM_SEGMENT(object_obj_tokeidai)
-DECLARE_ROM_SEGMENT(object_eg)
-DECLARE_ROM_SEGMENT(object_tru)
-DECLARE_ROM_SEGMENT(object_trt)
-DECLARE_ROM_SEGMENT(object_hakugin_obj)
-DECLARE_ROM_SEGMENT(object_horse_game_check)
-DECLARE_ROM_SEGMENT(object_stk)
-DECLARE_ROM_SEGMENT(object_mnk)
-DECLARE_ROM_SEGMENT(object_gi_bottle_red)
-DECLARE_ROM_SEGMENT(object_tokei_tobira)
-DECLARE_ROM_SEGMENT(object_az)
-DECLARE_ROM_SEGMENT(object_twig)
-DECLARE_ROM_SEGMENT(object_dekucity_obj)
-DECLARE_ROM_SEGMENT(object_po_fusen)
-DECLARE_ROM_SEGMENT(object_racetsubo)
-DECLARE_ROM_SEGMENT(object_ha)
-DECLARE_ROM_SEGMENT(object_bigokuta)
-DECLARE_ROM_SEGMENT(object_open_obj)
-DECLARE_ROM_SEGMENT(object_fu_kaiten)
-DECLARE_ROM_SEGMENT(object_fu_mato)
-DECLARE_ROM_SEGMENT(object_mtoride)
-DECLARE_ROM_SEGMENT(object_osn)
-DECLARE_ROM_SEGMENT(object_tokei_step)
-DECLARE_ROM_SEGMENT(object_lotus)
-DECLARE_ROM_SEGMENT(object_tl)
-DECLARE_ROM_SEGMENT(object_dkjail_obj)
-DECLARE_ROM_SEGMENT(object_visiblock)
-DECLARE_ROM_SEGMENT(object_tsn)
-DECLARE_ROM_SEGMENT(object_ds2n)
-DECLARE_ROM_SEGMENT(object_fsn)
-DECLARE_ROM_SEGMENT(object_shn)
-DECLARE_ROM_SEGMENT(object_bigicicle)
-DECLARE_ROM_SEGMENT(object_gi_bottle_15)
-DECLARE_ROM_SEGMENT(object_tk)
-DECLARE_ROM_SEGMENT(object_market_obj)
-DECLARE_ROM_SEGMENT(object_gi_reserve00)
-DECLARE_ROM_SEGMENT(object_gi_reserve01)
-DECLARE_ROM_SEGMENT(object_lightblock)
-DECLARE_ROM_SEGMENT(object_takaraya_objects)
-DECLARE_ROM_SEGMENT(object_wdhand)
-DECLARE_ROM_SEGMENT(object_sdn)
-DECLARE_ROM_SEGMENT(object_snowwd)
-DECLARE_ROM_SEGMENT(object_giant)
-DECLARE_ROM_SEGMENT(object_comb)
-DECLARE_ROM_SEGMENT(object_hana)
-DECLARE_ROM_SEGMENT(object_boss_hakugin)
-DECLARE_ROM_SEGMENT(object_meganeana_obj)
-DECLARE_ROM_SEGMENT(object_gi_nutsmask)
-DECLARE_ROM_SEGMENT(object_stk2)
-DECLARE_ROM_SEGMENT(object_spot11_obj)
-DECLARE_ROM_SEGMENT(object_danpei_object)
-DECLARE_ROM_SEGMENT(object_dhouse)
-DECLARE_ROM_SEGMENT(object_hakaisi)
-DECLARE_ROM_SEGMENT(object_po)
-DECLARE_ROM_SEGMENT(object_snowman)
-DECLARE_ROM_SEGMENT(object_po_sisters)
-DECLARE_ROM_SEGMENT(object_pp)
-DECLARE_ROM_SEGMENT(object_goronswitch)
-DECLARE_ROM_SEGMENT(object_delf)
-DECLARE_ROM_SEGMENT(object_botihasira)
-DECLARE_ROM_SEGMENT(object_gi_bigbomb)
-DECLARE_ROM_SEGMENT(object_pst)
-DECLARE_ROM_SEGMENT(object_bsmask)
-DECLARE_ROM_SEGMENT(object_spidertent)
-DECLARE_ROM_SEGMENT(object_zoraegg)
-DECLARE_ROM_SEGMENT(object_kbt)
-DECLARE_ROM_SEGMENT(object_gg)
-DECLARE_ROM_SEGMENT(object_maruta)
-DECLARE_ROM_SEGMENT(object_ghaka)
-DECLARE_ROM_SEGMENT(object_oyu)
-DECLARE_ROM_SEGMENT(object_dnq)
-DECLARE_ROM_SEGMENT(object_dai)
-DECLARE_ROM_SEGMENT(object_kgy)
-DECLARE_ROM_SEGMENT(object_fb)
-DECLARE_ROM_SEGMENT(object_taisou)
-DECLARE_ROM_SEGMENT(object_gk)
-DECLARE_ROM_SEGMENT(object_haka_obj)
-DECLARE_ROM_SEGMENT(object_dnt)
-DECLARE_ROM_SEGMENT(object_yukiyama)
-DECLARE_ROM_SEGMENT(object_icefloe)
-DECLARE_ROM_SEGMENT(object_gi_gold_dust)
-DECLARE_ROM_SEGMENT(object_gi_bottle_16)
-DECLARE_ROM_SEGMENT(object_gi_bottle_22)
-DECLARE_ROM_SEGMENT(object_bee)
-DECLARE_ROM_SEGMENT(object_ot)
-DECLARE_ROM_SEGMENT(object_utubo)
-DECLARE_ROM_SEGMENT(object_dora)
-DECLARE_ROM_SEGMENT(object_gi_loach)
-DECLARE_ROM_SEGMENT(object_gi_seahorse)
-DECLARE_ROM_SEGMENT(object_bigpo)
-DECLARE_ROM_SEGMENT(object_hariko)
-DECLARE_ROM_SEGMENT(object_dnj)
-DECLARE_ROM_SEGMENT(object_sinkai_kabe)
-DECLARE_ROM_SEGMENT(object_kin2_obj)
-DECLARE_ROM_SEGMENT(object_ishi)
-DECLARE_ROM_SEGMENT(object_hakugin_demo)
-DECLARE_ROM_SEGMENT(object_jg)
-DECLARE_ROM_SEGMENT(object_gi_sword_2)
-DECLARE_ROM_SEGMENT(object_gi_sword_3)
-DECLARE_ROM_SEGMENT(object_gi_sword_4)
-DECLARE_ROM_SEGMENT(object_um)
-DECLARE_ROM_SEGMENT(object_rb)
-DECLARE_ROM_SEGMENT(object_mbar_obj)
-DECLARE_ROM_SEGMENT(object_ikana_obj)
-DECLARE_ROM_SEGMENT(object_kz)
-DECLARE_ROM_SEGMENT(object_tokei_turret)
-DECLARE_ROM_SEGMENT(object_zog)
-DECLARE_ROM_SEGMENT(object_rotlift)
-DECLARE_ROM_SEGMENT(object_posthouse_obj)
-DECLARE_ROM_SEGMENT(object_gi_mask09)
-DECLARE_ROM_SEGMENT(object_gi_mask14)
-DECLARE_ROM_SEGMENT(object_gi_mask15)
-DECLARE_ROM_SEGMENT(object_inibs_object)
-DECLARE_ROM_SEGMENT(object_tree)
-DECLARE_ROM_SEGMENT(object_kaizoku_obj)
-DECLARE_ROM_SEGMENT(object_gi_reserve_b_00)
-DECLARE_ROM_SEGMENT(object_gi_reserve_c_00)
-DECLARE_ROM_SEGMENT(object_zob)
-DECLARE_ROM_SEGMENT(object_milkbar)
-DECLARE_ROM_SEGMENT(object_dmask)
-DECLARE_ROM_SEGMENT(object_gi_reserve_c_01)
-DECLARE_ROM_SEGMENT(object_zod)
-DECLARE_ROM_SEGMENT(object_kumo30)
-DECLARE_ROM_SEGMENT(object_obj_yasi)
-DECLARE_ROM_SEGMENT(object_tanron1)
-DECLARE_ROM_SEGMENT(object_tanron2)
-DECLARE_ROM_SEGMENT(object_tanron3)
-DECLARE_ROM_SEGMENT(object_gi_magicmushroom)
-DECLARE_ROM_SEGMENT(object_obj_chan)
-DECLARE_ROM_SEGMENT(object_gi_mask10)
-DECLARE_ROM_SEGMENT(object_zos)
-DECLARE_ROM_SEGMENT(object_an2)
-DECLARE_ROM_SEGMENT(object_an3)
-DECLARE_ROM_SEGMENT(object_f40_switch)
-DECLARE_ROM_SEGMENT(object_lodmoon)
-DECLARE_ROM_SEGMENT(object_tro)
-DECLARE_ROM_SEGMENT(object_gi_mask12)
-DECLARE_ROM_SEGMENT(object_gi_mask23)
-DECLARE_ROM_SEGMENT(object_gi_bottle_21)
-DECLARE_ROM_SEGMENT(object_gi_camera)
-DECLARE_ROM_SEGMENT(object_kamejima)
-DECLARE_ROM_SEGMENT(object_nb)
-DECLARE_ROM_SEGMENT(object_harfgibud)
-DECLARE_ROM_SEGMENT(object_zov)
-DECLARE_ROM_SEGMENT(object_ah)
-DECLARE_ROM_SEGMENT(object_hgdoor)
-DECLARE_ROM_SEGMENT(object_dor01)
-DECLARE_ROM_SEGMENT(object_dor02)
-DECLARE_ROM_SEGMENT(object_dor03)
-DECLARE_ROM_SEGMENT(object_dor04)
-DECLARE_ROM_SEGMENT(object_last_obj)
-DECLARE_ROM_SEGMENT(object_redead_obj)
-DECLARE_ROM_SEGMENT(object_ikninside_obj)
-DECLARE_ROM_SEGMENT(object_iknv_obj)
-DECLARE_ROM_SEGMENT(object_pamera)
-DECLARE_ROM_SEGMENT(object_hsstump)
-DECLARE_ROM_SEGMENT(object_zm)
-DECLARE_ROM_SEGMENT(object_al)
-DECLARE_ROM_SEGMENT(object_tab)
-DECLARE_ROM_SEGMENT(object_secom_obj)
-DECLARE_ROM_SEGMENT(object_dt)
-DECLARE_ROM_SEGMENT(object_gi_mask03)
-DECLARE_ROM_SEGMENT(object_cha)
-DECLARE_ROM_SEGMENT(object_obj_dinner)
-DECLARE_ROM_SEGMENT(object_gi_reserve_b_01)
-DECLARE_ROM_SEGMENT(object_lastday)
-DECLARE_ROM_SEGMENT(object_bai)
-DECLARE_ROM_SEGMENT(object_ikn_demo)
-DECLARE_ROM_SEGMENT(object_gi_fieldmap)
-DECLARE_ROM_SEGMENT(object_big_fwall)
-DECLARE_ROM_SEGMENT(object_hunsui)
-DECLARE_ROM_SEGMENT(object_uch)
-DECLARE_ROM_SEGMENT(object_tanron4)
-DECLARE_ROM_SEGMENT(object_tanron5)
-DECLARE_ROM_SEGMENT(object_in2)
-DECLARE_ROM_SEGMENT(object_yb)
-DECLARE_ROM_SEGMENT(object_rz)
-DECLARE_ROM_SEGMENT(object_bjt)
-DECLARE_ROM_SEGMENT(object_taru)
-DECLARE_ROM_SEGMENT(object_moonston)
-DECLARE_ROM_SEGMENT(object_gi_schedule)
-DECLARE_ROM_SEGMENT(object_gi_stonemask)
-DECLARE_ROM_SEGMENT(object_zoraband)
-DECLARE_ROM_SEGMENT(object_kepn_koya)
-DECLARE_ROM_SEGMENT(object_obj_usiyane)
-DECLARE_ROM_SEGMENT(object_gi_mask05)
-DECLARE_ROM_SEGMENT(object_gi_mask11)
-DECLARE_ROM_SEGMENT(object_gi_mask20)
-DECLARE_ROM_SEGMENT(object_nnh)
-DECLARE_ROM_SEGMENT(object_kzsaku)
-DECLARE_ROM_SEGMENT(object_obj_milk_bin)
-DECLARE_ROM_SEGMENT(object_random_obj)
-DECLARE_ROM_SEGMENT(object_kujiya)
-DECLARE_ROM_SEGMENT(object_kitan)
-DECLARE_ROM_SEGMENT(object_gi_mask06)
-DECLARE_ROM_SEGMENT(object_gi_mask16)
-DECLARE_ROM_SEGMENT(object_astr_obj)
-DECLARE_ROM_SEGMENT(object_bsb)
-DECLARE_ROM_SEGMENT(object_fall2)
-DECLARE_ROM_SEGMENT(object_sth)
-DECLARE_ROM_SEGMENT(object_gi_mssa)
-DECLARE_ROM_SEGMENT(object_smtower)
-DECLARE_ROM_SEGMENT(object_gi_mask21)
-DECLARE_ROM_SEGMENT(object_yado_obj)
-DECLARE_ROM_SEGMENT(object_syoten)
-DECLARE_ROM_SEGMENT(object_moonend)
-DECLARE_ROM_SEGMENT(object_ob)
-DECLARE_ROM_SEGMENT(object_gi_bottle_04)
-DECLARE_ROM_SEGMENT(object_and)
-DECLARE_ROM_SEGMENT(object_obj_danpeilift)
-DECLARE_ROM_SEGMENT(object_drs)
-DECLARE_ROM_SEGMENT(object_msmo)
-DECLARE_ROM_SEGMENT(object_an4)
-DECLARE_ROM_SEGMENT(object_wdor01)
-DECLARE_ROM_SEGMENT(object_wdor02)
-DECLARE_ROM_SEGMENT(object_wdor03)
-DECLARE_ROM_SEGMENT(object_wdor04)
-DECLARE_ROM_SEGMENT(object_wdor05)
-DECLARE_ROM_SEGMENT(object_stk3)
-DECLARE_ROM_SEGMENT(object_kinsta1_obj)
-DECLARE_ROM_SEGMENT(object_kinsta2_obj)
-DECLARE_ROM_SEGMENT(object_bh)
-DECLARE_ROM_SEGMENT(object_gi_mask17)
-DECLARE_ROM_SEGMENT(object_gi_mask22)
-DECLARE_ROM_SEGMENT(object_lbfshot)
-DECLARE_ROM_SEGMENT(object_fusen)
-DECLARE_ROM_SEGMENT(object_ending_obj)
-DECLARE_ROM_SEGMENT(object_gi_mask13)
+#define DEFINE_OBJECT(name, _enumValue) DECLARE_ROM_SEGMENT(name)
+#define DEFINE_OBJECT_UNSET(_enumValue)
+#define DEFINE_OBJECT_SIZE_ZERO(_name, _enumValue)
+
+#include "tables/object_table.h"
+
+#undef DEFINE_OBJECT
+#undef DEFINE_OBJECT_UNSET
+#undef DEFINE_OBJECT_SIZE_ZERO
DECLARE_ROM_SEGMENT(scene_texture_01)
DECLARE_ROM_SEGMENT(scene_texture_02)
@@ -1682,4 +634,5 @@ DECLARE_ROM_SEGMENT(KAKUSIANA_room_13)
DECLARE_ROM_SEGMENT(KAKUSIANA_room_14)
DECLARE_ROM_SEGMENT(bump_texture_static)
+
#endif
diff --git a/include/seqcmd.h b/include/seqcmd.h
new file mode 100644
index 000000000..a7db69dad
--- /dev/null
+++ b/include/seqcmd.h
@@ -0,0 +1,521 @@
+#ifndef SEQCMD_H
+#define SEQCMD_H
+
+// ==== Primary commands ====
+
+#define SEQCMD_OP_MASK 0xF0000000
+#define SEQCMD_ASYNC_ACTIVE 0x8000000
+#define SEQCMD_SEQPLAYER_MASK 0x7000000
+#define SEQCMD_SEQID_MASK 0xFF // Only applies to certain seqcmds
+
+typedef enum {
+ /* 0x0 */ SEQCMD_OP_PLAY_SEQUENCE,
+ /* 0x1 */ SEQCMD_OP_STOP_SEQUENCE,
+ /* 0x2 */ SEQCMD_OP_QUEUE_SEQUENCE,
+ /* 0x3 */ SEQCMD_OP_UNQUEUE_SEQUENCE,
+ /* 0x4 */ SEQCMD_OP_SET_SEQPLAYER_VOLUME,
+ /* 0x5 */ SEQCMD_OP_SET_SEQPLAYER_FREQ,
+ /* 0x6 */ SEQCMD_OP_SET_CHANNEL_VOLUME,
+ /* 0x7 */ SEQCMD_OP_SET_SEQPLAYER_IO,
+ /* 0x8 */ SEQCMD_OP_SET_CHANNEL_IO,
+ /* 0x9 */ SEQCMD_OP_SET_CHANNEL_IO_DISABLE_MASK,
+ /* 0xA */ SEQCMD_OP_SET_CHANNEL_DISABLE_MASK,
+ /* 0xB */ SEQCMD_OP_TEMPO_CMD,
+ /* 0xC */ SEQCMD_OP_SETUP_CMD,
+ /* 0xD */ SEQCMD_OP_SET_CHANNEL_FREQ,
+ /* 0xE */ SEQCMD_OP_GLOBAL_CMD,
+ /* 0xF */ SEQCMD_OP_RESET_AUDIO_HEAP
+} SeqCmdOp;
+
+// ==== Secondary commands ====
+
+// Subset of `SEQCMD_OP_TEMPO_CMD`
+typedef enum {
+ /* 0x0 */ SEQCMD_SUB_OP_TEMPO_SET,
+ /* 0x1 */ SEQCMD_SUB_OP_TEMPO_SPEED_UP,
+ /* 0x2 */ SEQCMD_SUB_OP_TEMPO_SLOW_DOWN,
+ /* 0x3 */ SEQCMD_SUB_OP_TEMPO_SCALE,
+ /* 0x4 */ SEQCMD_SUB_OP_TEMPO_RESET
+} SeqCmdTempoCmdOp;
+
+// Subset of `SEQCMD_OP_SETUP_CMD`
+typedef enum {
+ /* 0x0 */ SEQCMD_SUB_OP_SETUP_RESTORE_SEQPLAYER_VOLUME,
+ /* 0x1 */ SEQCMD_SUB_OP_SETUP_SEQ_UNQUEUE,
+ /* 0x2 */ SEQCMD_SUB_OP_SETUP_RESTART_SEQ,
+ /* 0x3 */ SEQCMD_SUB_OP_SETUP_TEMPO_SCALE,
+ /* 0x4 */ SEQCMD_SUB_OP_SETUP_TEMPO_RESET,
+ /* 0x5 */ SEQCMD_SUB_OP_SETUP_PLAY_SEQ,
+ /* 0x6 */ SEQCMD_SUB_OP_SETUP_SET_FADE_TIMER,
+ /* 0x7 */ SEQCMD_SUB_OP_SETUP_RESTORE_SEQPLAYER_VOLUME_IF_QUEUED,
+ /* 0x8 */ SEQCMD_SUB_OP_SETUP_RESTORE_SEQPLAYER_VOLUME_WITH_SCALE_INDEX,
+ /* 0x9 */ SEQCMD_SUB_OP_SETUP_SET_CHANNEL_DISABLE_MASK,
+ /* 0xA */ SEQCMD_SUB_OP_SETUP_SET_SEQPLAYER_FREQ,
+ /* 0xE */ SEQCMD_SUB_OP_SETUP_POP_PERSISTENT_CACHE = 0xE,
+ /* 0xF */ SEQCMD_SUB_OP_SETUP_RESET_SETUP_CMDS
+} SeqCmdSetupCmdOp;
+
+// Subset of `SEQCMD_OP_GLOBAL_CMD`
+typedef enum {
+ /* 0x0 */ SEQCMD_SUB_OP_GLOBAL_SET_SOUND_MODE,
+ /* 0x1 */ SEQCMD_SUB_OP_GLOBAL_DISABLE_NEW_SEQUENCES,
+ /* 0x2 */ SEQCMD_SUB_OP_GLOBAL_DISABLE_NEW_SEQUENCES_2
+} SeqCmdSubCmdOp;
+
+// ==== Audio Sequence Primary Commands ====
+
+/**
+ * Play a sequence on a given seqPlayer
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to play the sequence
+ * @param fadeInDuration effect will depend on seqArg. See below
+ * @param seqArg no effect: < 0x7F, skip ticks: = 0x7F, play after loading asynchronously: >= 0x80 (see note)
+ * @param seqId the id of the sequence to play, see `SeqId`
+ *
+ * @note seqArg will also be stored in gActiveSeqs.seqId, any check against that seqId must also include seqArg.
+ * seqArg = 0x7F will interpret the duration as the number of ticks to skip.
+ * seqArg >= 0x80 load the soundFont asynchronously, will only start playing once loaded.
+ */
+#define SEQCMD_PLAY_SEQUENCE(seqPlayerIndex, fadeInDuration, seqId) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_PLAY_SEQUENCE << 28) | ((seqPlayerIndex) << 24) | ((u32)(fadeInDuration) << 16) | \
+ (u32)(seqId))
+
+/**
+ * Stop a sequence on a given seqPlayer
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to stop the sequence
+ * @param fadeOutDuration duration the sequence will fade out over
+ *
+ * @note the 0xFF in the command is not read from at all, but is common in all Stop SeqPlayer Commands
+ */
+#define SEQCMD_STOP_SEQUENCE(seqPlayerIndex, fadeOutDuration) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_STOP_SEQUENCE << 28) | 0xFF | ((u8)(seqPlayerIndex) << 24) | \
+ ((fadeOutDuration) << 16))
+
+/**
+ * Add a sequence to a queue of sequences associated with a given seqPlayer.
+ * If the sequence is first in queue, play the sequence
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to queue the sequence
+ * @param fadeInDuration if the sequence is played, duration the sequence will fade in over
+ * @param priority priority in the queue. The highest valued priority will be queued to play first. Also used as `seqArg`.
+ * @param seqId the id of the sequence to play, see `SeqId`
+ *
+ * @note for the next sequence in the queue to play, the current sequence must be unqueued with the unqueue command
+ * @note for a priority >= 0x7F, similar effects happen as `seqArg` in the play sequence command
+ */
+#define SEQCMD_QUEUE_SEQUENCE(seqPlayerIndex, fadeInDuration, priority, seqId) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_QUEUE_SEQUENCE << 28) | ((u8)(seqPlayerIndex) << 24) | \
+ ((u8)(fadeInDuration) << 16) | ((u8)(priority) << 8) | (u8)(seqId))
+
+/**
+ * Remove a sequence from a queue of sequences associated with a given seqPlayer.
+ * If the sequence is first in queue, stop the sequence, and play the next one in queue if any
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to queue the sequence
+ * @param fadeInDuration if the sequence is stopped, duration the sequence will fade out over, and duration the next seq will fade in over
+ * @param seqId the id of the sequence to remove, see `SeqId`
+ *
+ * @note for the next sequence in the queue to play, the current sequence must be unqueued with this command
+ */
+#define SEQCMD_UNQUEUE_SEQUENCE(seqPlayerIndex, fadeOutInDuration, seqId) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_UNQUEUE_SEQUENCE << 28) | ((u32)(seqPlayerIndex) << 24) | \
+ ((u8)(fadeOutInDuration) << 16) | (u32)(seqId))
+
+/**
+ * Set the volume of an entire sequence on a given seqPlayer. Fade to the volume over a specified duration
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param duration duration to transition to the volume
+ * @param volume the target volume for the sequence. Ranged from 0-0xFF, with 0x7F mapping to 1.0f
+ */
+#define SEQCMD_SET_SEQPLAYER_VOLUME(seqPlayerIndex, duration, volume) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_SET_SEQPLAYER_VOLUME << 28) | ((u32)(seqPlayerIndex) << 24) | \
+ ((u32)(duration) << 16) | (volume))
+
+/**
+ * Scale the frequency of every channel on a given seqPlayer over a specified duration.
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param duration duration to transition to the frequency
+ * @param freqScale the scaling factor to shift the pitch. Ranged from 0-0xFFFF, with 1000 mapping to 1.0f
+ *
+ * @note 2000 will double the frequency (raise an octave), 500 will halve the frequency (lower an octave).
+ * Cannot be used with `SEQCMD_SET_CHANNEL_FREQ` as they will overwrite one another.
+ */
+#define SEQCMD_SET_SEQPLAYER_FREQ(seqPlayerIndex, duration, freqScale) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_SET_SEQPLAYER_FREQ << 28) | (u32)((seqPlayerIndex) << 24) | \
+ ((u32)((duration) << 16)) | (u16)(freqScale))
+
+/**
+ * Scale the frequency of a specific channel on a given seqPlayer over a specified duration
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param channelIndex the index of the channel to modify
+ * @param duration duration to transition to the frequency
+ * @param freqScale the scaling factor to shift the pitch. Ranged from 0-0xFFF, with 1000 mapping to 1.0f
+ *
+ * @note a frequency of 2000 will double the frequency (raise an octave), 500 will halve the frequency (lower an
+ * octave). Cannot be used with `SEQCMD_SET_SEQPLAYER_FREQ` as they will overwrite one another.
+ */
+#define SEQCMD_SET_CHANNEL_FREQ(seqPlayerIndex, channelIndex, duration, freqScale) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_SET_CHANNEL_FREQ << 28) | ((u8)(seqPlayerIndex) << 24) | ((duration) << 16) | \
+ ((channelIndex) << 12) | (freqScale))
+
+/**
+ * Set the volume of a specific channel on a given seqPlayer. Fade to the volume over a specified duration
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param channelIndex the index of the channel to modify
+ * @param duration duration to transition to the volume
+ * @param volume the target volume for the sequence. Ranged from 0-0xFF, with 0x7F mapping to 1.0f
+ */
+#define SEQCMD_SET_CHANNEL_VOLUME(seqPlayerIndex, channelIndex, duration, volume) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_SET_CHANNEL_VOLUME << 28) | ((u32)(seqPlayerIndex) << 24) | \
+ ((u32)(duration) << 16) | ((u32)(channelIndex) << 8) | (volume))
+
+/**
+ * Write a value that can be read as input directly by the sequence itself. This will be set to the global
+ * ioPort, which can affect the entire sequence.
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to write the input to
+ * @param ioPort the index of the array to store the input-output value
+ * @param ioData the value s8 that's written to the input-output array
+ *
+ * @note Each seqPlayer has 8 global ioPorts indexed 0-7.
+ * ioPort 0 and 1 are read-only-once, and will reset after being read by the sequence.
+ * ioPort 2-7 can be read multiple times.
+ */
+#define SEQCMD_SET_SEQPLAYER_IO(seqPlayerIndex, ioPort, ioData) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_SET_SEQPLAYER_IO << 28) | ((u32)(seqPlayerIndex) << 24) | ((u32)(ioPort) << 16) | \
+ (u32)(ioData))
+
+/**
+ * Write a value that can be read as input directly by the sequence itself. This will be set to the channel
+ * ioPort, which will only affect a single channel.
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to write the input to
+ * @param channelIndex the index of the channel to write the input to
+ * @param ioPort the index of the array to store the input-output value
+ * @param ioData the value s8 that's written to the input-output array
+ *
+ * @note Each channel has 8 channel ioPorts indexed 0-7.
+ * ioPort 0 and 1 are read-only-once, and will reset after being read by the sequence.
+ * ioPort 2-7 can be read multiple times.
+ */
+#define SEQCMD_SET_CHANNEL_IO(seqPlayerIndex, channelIndex, ioPort, ioData) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_SET_CHANNEL_IO << 28) | ((u32)(seqPlayerIndex) << 24) | ((u32)(ioPort) << 16) | \
+ ((u32)(channelIndex) << 8) | (u32)(ioData))
+
+/**
+ * Disable (or reenable) specific channels from receiving input set by `SEQCMD_SET_CHANNEL_IO`
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param channelMask a 16 bit mask where each bit maps to a channel. Bitflag on to disable
+ *
+ * @note using Audio_QueueCmdS8 0x06 will bypass this channelMask
+ */
+#define SEQCMD_SET_CHANNEL_IO_DISABLE_MASK(seqPlayerIndex, channelMask) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_SET_CHANNEL_IO_DISABLE_MASK << 28) | ((u8)(seqPlayerIndex) << 24) | \
+ (u16)(channelMask))
+
+/**
+ * Disable (or reenable) specific channels
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param channelMask a 16 bit mask where each bit maps to a channel. Bitflag on to disable
+ */
+#define SEQCMD_SET_CHANNEL_DISABLE_MASK(seqPlayerIndex, channelMask) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_SET_CHANNEL_DISABLE_MASK << 28) | ((u32)(seqPlayerIndex) << 24) | \
+ (u32)(channelMask))
+
+// ==== Audio Sequence Tempo Commands ====
+
+/**
+ * Set the absolute tempo of a sequence on a given seqPlayer, fading over a specified duration
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param duration duration to transition to the tempo
+ * @param tempoTarget the target tempo for the sequence
+ *
+ * @note the absolute tempo is constrained to a maximum of 300
+ */
+#define SEQCMD_SET_TEMPO(seqPlayerIndex, duration, tempoTarget) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_TEMPO_CMD << 28) | (SEQCMD_SUB_OP_TEMPO_SET << 12) | \
+ ((u8)(seqPlayerIndex) << 24) | ((u8)(duration) << 16) | (u8)(tempoTarget))
+
+/**
+ * Increase the tempo of a sequence by a relative value on a given seqPlayer over a specified duration
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param duration duration to transition to the tempo
+ * @param tempoIncrease the change to add to the current tempo
+ *
+ * @note the absolute tempo is constrained to a maximum of 300
+ */
+#define SEQCMD_SPEED_UP_TEMPO(seqPlayerIndex, duration, tempoIncrease) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_TEMPO_CMD << 28) | (SEQCMD_SUB_OP_TEMPO_SPEED_UP << 12) | \
+ ((u8)(seqPlayerIndex) << 24) | ((u8)(duration) << 16) | (u16)(tempoIncrease))
+
+/**
+ * Decrease the tempo of a sequence by a relative value on a given seqPlayer over a specified duration
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param duration duration to transition to the tempo
+ * @param tempoDecrease the change to subtract to the current tempo
+ *
+ * @note the absolute tempo is constrained to a maximum of 300
+ */
+#define SEQCMD_SLOW_DOWN_TEMPO(seqPlayerIndex, duration, tempoDecrease) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_TEMPO_CMD << 28) | (SEQCMD_SUB_OP_TEMPO_SLOW_DOWN << 12) | \
+ ((u8)(seqPlayerIndex) << 24) | ((u8)(duration) << 16) | (u16)(tempoDecrease))
+
+/**
+ * Scale the tempo of a sequence by a multiplicative value on a given seqPlayer over a specified duration
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param duration duration to transition to the tempo
+ * @param tempoScale the scaling factor of the tempo, relative to 100
+ *
+ * @note a tempoScale of 200 will go double-time, 50 will go half-time.
+ * the absolute tempo is constrained to a maximum of 300
+ */
+#define SEQCMD_SCALE_TEMPO(seqPlayerIndex, duration, tempoScale) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_TEMPO_CMD << 28) | (SEQCMD_SUB_OP_TEMPO_SCALE << 12) | ((u8)(seqPlayerIndex) << 24) | \
+ ((u8)(duration) << 16) | (u16)(tempoScale))
+
+/**
+ * Reset the tempo of a sequence to the original tempo on a given seqPlayer over a specified duration
+ *
+ * @param seqPlayerIndex the index of the seqPlayer to modify
+ * @param duration duration to transition to the tempo
+ */
+#define SEQCMD_RESET_TEMPO(seqPlayerIndex, duration) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_TEMPO_CMD << 28) | (SEQCMD_SUB_OP_TEMPO_RESET << 12) | ((u8)(seqPlayerIndex) << 24) | \
+ ((u8)(duration) << 16))
+
+/**
+ * ==== Audio Sequence Setup Commands ====
+ *
+ * The setup commands are designed to wait to be executed.
+ * Up to 8 commands can be queued per `seqPlayerIndex`.
+ * These commands will only execute once that `seqPlayerIndex` is finished playing and is no longer enabled.
+ * They will often target a different player (`targetSeqPlayerIndex`) but not always.
+ */
+
+/**
+ * Setup a request to restore a volume on target seqPlayer once a setup seqPlayer is finished playing and disabled
+ *
+ * @param setupSeqPlayerIndex the index of the seqPlayer to wait for to be disabled
+ * @param targetSeqPlayerIndex the index of the seqPlayer to modify
+ * @param duration duration to transition to the volume
+ */
+#define SEQCMD_SETUP_RESTORE_SEQPLAYER_VOLUME(setupSeqPlayerIndex, targetSeqPlayerIndex, duration) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_SETUP_CMD << 28) | (SEQCMD_SUB_OP_SETUP_RESTORE_SEQPLAYER_VOLUME << 20) | \
+ ((u8)(setupSeqPlayerIndex) << 24) | ((u8)(targetSeqPlayerIndex) << 16) | (u8)(duration))
+
+/**
+ * Setup a request to unqueue a seqPlayer once that same setup seqPlayer is finished playing and disabled
+ *
+ * @param setupSeqPlayerIndex the index of the seqPlayer to unqueue once the same seqPlayer is disabled
+ *
+ * @bug this command was misimplemented and fails to unqueue. The command relies on `gActiveSeqs.seqId` for
+ * unqueueing, but seqId is reset before being used to unqueue. A simple fix is to unqueue based on
+ * `gActiveSeqs.prevSeqId` instead.
+ */
+#define SEQCMD_SETUP_UNQUEUE_SEQUENCE(setupSeqPlayerIndex) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_SETUP_CMD << 28) | (SEQCMD_SUB_OP_SETUP_SEQ_UNQUEUE << 20) | \
+ ((u8)(setupSeqPlayerIndex) << 24))
+
+/**
+ * Setup a request to restart and play an active sequence currently playing on a target seqPlayer
+ * once a setup seqPlayer is finished playing and disabled
+ *
+ * @param setupSeqPlayerIndex the index of the seqPlayer to wait for to be disabled
+ * @param targetSeqPlayerIndex the index of the seqPlayer to restart its active sequence
+ */
+#define SEQCMD_SETUP_RESTART_SEQUENCE(setupSeqPlayerIndex, targetSeqPlayerIndex) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_SETUP_CMD << 28) | (SEQCMD_SUB_OP_SETUP_RESTART_SEQ << 20) | \
+ ((u8)(setupSeqPlayerIndex) << 24) | ((u8)(targetSeqPlayerIndex) << 16))
+
+/**
+ * Setup a request to scale the tempo of a sequence by a multiplicative value on a target seqPlayer
+ * once a setup seqPlayer is finished playing and disabled
+ *
+ * @param setupSeqPlayerIndex the index of the seqPlayer to wait for to be disabled
+ * @param targetSeqPlayerIndex the index of the seqPlayer to modify
+ * @param duration duration to transition to the tempo
+ * @param tempoScale the scaling factor of the tempo, relative to 100
+ *
+ * @note a tempoScale of 200 will go double-time, 50 will go half-time.
+ * the absolute tempo is constrained to a maximum of 300
+ */
+#define SEQCMD_SETUP_SCALE_TEMPO(setupSeqPlayerIndex, targetSeqPlayerIndex, duration, tempoScale) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_SETUP_CMD << 28) | (SEQCMD_SUB_OP_SETUP_TEMPO_SCALE << 20) | \
+ ((u8)(setupSeqPlayerIndex) << 24) | ((u8)(targetSeqPlayerIndex) << 16) | \
+ ((u8)(duration) << 8) | (u8)(tempoScale))
+
+/**
+ * Setup a request to reset the tempo of a sequence to the original tempo on a target seqPlayer
+ * once a setup seqPlayer is finished playing and disabled
+ *
+ * @param setupSeqPlayerIndex the index of the seqPlayer to wait for to be disabled
+ * @param targetSeqPlayerIndex the index of the seqPlayer to modify
+ * @param duration duration to transition to the tempo
+ */
+#define SEQCMD_SETUP_RESET_TEMPO(setupSeqPlayerIndex, targetSeqPlayerIndex, duration) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_SETUP_CMD << 28) | (SEQCMD_SUB_OP_SETUP_TEMPO_RESET << 20) | \
+ ((u8)(setupSeqPlayerIndex) << 24) | ((u8)(targetSeqPlayerIndex) << 16) | (u8)(duration))
+
+/**
+ * Setup a request to play a sequence on a target seqPlayer once a setup seqPlayer is finished playing and disabled.
+ * This command is optionally paired with `SEQCMD_SETUP_SET_FADE_IN_TIMER` to set the fade in duration
+ *
+ * @param setupSeqPlayerIndex the index of the seqPlayer to wait for to be disabled
+ * @param targetSeqPlayerIndex the index of the seqPlayer to play the sequence
+ * @param seqId the id of the sequence to play, see `SeqId`
+ */
+#define SEQCMD_SETUP_PLAY_SEQUENCE(setupSeqPlayerIndex, targetSeqPlayerIndex, seqId) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_SETUP_CMD << 28) | (SEQCMD_SUB_OP_SETUP_PLAY_SEQ << 20) | \
+ ((u8)(setupSeqPlayerIndex) << 24) | ((u8)(targetSeqPlayerIndex) << 16) | (u16)(seqId))
+
+/**
+ * This command is an optional command before `SEQCMD_SETUP_PLAY_SEQUENCE` to set the fade in duration
+ * (see cmd above)
+ *
+ * @param targetSeqPlayerIndex the index of the seqPlayer to play the sequence
+ * @param fadeInDuration duration the sequence will fade in over
+ */
+#define SEQCMD_SETUP_SET_FADE_IN_TIMER(targetSeqPlayerIndex, fadeInDuration) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_SETUP_CMD << 28) | (SEQCMD_SUB_OP_SETUP_SET_FADE_TIMER << 20) | \
+ ((u8)(targetSeqPlayerIndex) << 24) | ((u8)(fadeInDuration) << 8))
+
+/**
+ * Setup a request to restore a volume on target seqPlayer once a setup seqPlayer is finished playing and disabled.
+ * Specifically, it will only restore volume if the number of queued requests on the setup seqPlayer matches
+ * the number of sequences queued
+ *
+ * @param setupSeqPlayerIndex the index of the seqPlayer to wait for to be disabled
+ * @param targetSeqPlayerIndex the index of the seqPlayer to modify
+ * @param duration duration to transition to the volume
+ * @param numSeqRequests the number of sequence requests queued that must match the actual number of sequence requests
+ */
+#define SEQCMD_SETUP_RESTORE_SEQPLAYER_VOLUME_IF_QUEUED(setupSeqPlayerIndex, targetSeqPlayerIndex, duration, \
+ numSeqRequests) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_SETUP_CMD << 28) | \
+ (SEQCMD_SUB_OP_SETUP_RESTORE_SEQPLAYER_VOLUME_IF_QUEUED << 20) | \
+ ((u8)(setupSeqPlayerIndex) << 24) | ((u8)(targetSeqPlayerIndex) << 16) | \
+ ((u8)(duration) << 8) | (u8)(numSeqRequests))
+
+/**
+ * Setup a request to restore a volume on target seqPlayer once a setup seqPlayer is finished playing and disabled.
+ * Allows `scaleIndex` to be specified.
+ *
+ * @param setupSeqPlayerIndex the index of the seqPlayer to wait for to be disabled
+ * @param targetSeqPlayerIndex the index of the seqPlayer to modify
+ * @param scaleIndex the scale index of a seqPlayer
+ * @param duration duration to transition to the volume
+ */
+#define SEQCMD_SETUP_RESTORE_SEQPLAYER_VOLUME_WITH_SCALE_INDEX(setupSeqPlayerIndex, targetSeqPlayerIndex, scaleIndex, \
+ duration) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_SETUP_CMD << 28) | \
+ (SEQCMD_SUB_OP_SETUP_RESTORE_SEQPLAYER_VOLUME_WITH_SCALE_INDEX << 20) | \
+ ((u8)(setupSeqPlayerIndex) << 24) | ((u8)(targetSeqPlayerIndex) << 16) | \
+ ((u8)(scaleIndex) << 8) | (u8)(duration))
+
+/**
+ * Setup a request to disable (or reenable) specific channels on a target seqPlayer
+ * once a setup seqPlayer is finished playing and disabled.
+ *
+ * @param setupSeqPlayerIndex the index of the seqPlayer to wait for to be disabled
+ * @param targetSeqPlayerIndex the index of the seqPlayer to modify
+ * @param channelMask a 16 bit mask where each bit maps to a channel. Bitflag on to disable
+ */
+#define SEQCMD_SETUP_SET_CHANNEL_DISABLE_MASK(setupSeqPlayerIndex, targetSeqPlayerIndex, channelMask) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_SETUP_CMD << 28) | (SEQCMD_SUB_OP_SETUP_SET_CHANNEL_DISABLE_MASK << 20) | \
+ ((u8)(setupSeqPlayerIndex) << 24) | ((u8)(targetSeqPlayerIndex) << 16) | (u16)(channelMask))
+
+/**
+ * Queue a request to scale the frequency of an entire sequence on a target seqPlayer
+ * once a setup seqPlayer is finished playing and disabled.
+ *
+ * @param setupSeqPlayerIndex the index of the seqPlayer to wait for to be disabled
+ * @param targetSeqPlayerIndex the index of the seqPlayer to modify
+ * @param duration duration to transition to the frequency
+ * @param freqScale the scaling factor to shift the pitch. Ranged from 0-0xFF, with 100 mapping to 1.0f
+ *
+ * @note The base value for frequency, 100, is 10 times smaller than other frequency commands.
+ * 200 will double the frequency (raise an octave), 50 will halve the frequency (lower an octave).
+ */
+#define SEQCMD_SETUP_SET_SEQPLAYER_FREQ(setupSeqPlayerIndex, targetSeqPlayerIndex, duration, freqScale) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_SETUP_CMD << 28) | (SEQCMD_SUB_OP_SETUP_SET_SEQPLAYER_FREQ << 20) | \
+ ((u8)(setupSeqPlayerIndex) << 24) | ((u8)(targetSeqPlayerIndex) << 16) | \
+ ((u8)(duration) << 8) | (u8)(freqScale))
+
+/**
+ * Queue a request to discard audio data by popping an entry from the persistent caches on the audio heap,
+ * once a setup seqPlayer is finished playing and disabled.
+ *
+ * @param setupSeqPlayerIndex the index of the seqPlayer to wait for to be disabled
+ * @param tableTypeFlag All tables with the flag `(tableTypeFlag & (1 << tableType))` will be discarded. Specifically:
+ * `(tableTypeFlag & 1)` will discard the `SEQUENCE_TABLE`
+ * `(tableTypeFlag & 2)` will discard the `FONT_TABLE`
+ * `(tableTypeFlag & 4)` will discard the `SAMPLE_TABLE`
+ */
+#define SEQCMD_SETUP_POP_PERSISTENT_CACHE(setupSeqPlayerIndex, tableTypeFlag) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_SETUP_CMD << 28) | (SEQCMD_SUB_OP_SETUP_POP_PERSISTENT_CACHE << 20) | \
+ ((u8)(setupSeqPlayerIndex) << 24) | ((u8)tableTypeFlag))
+
+/**
+ * Discard all setup command requests on a seqPlayerIndex by resetting the setup command queue
+ *
+ * @param setupSeqPlayerIndex the index of the seqPlayer to disable all setup commands
+ */
+#define SEQCMD_RESET_SETUP_CMDS(setupSeqPlayerIndex) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_SETUP_CMD << 28) | (SEQCMD_SUB_OP_SETUP_RESET_SETUP_CMDS << 20) | \
+ ((u8)(setupSeqPlayerIndex) << 24))
+
+/**
+ * ==== Audio Sequence Global Commands ====
+ *
+ * The global commands will apply to the entire audio system and all 4 sequence players
+ */
+
+/**
+ * Change the sound mode of audio
+ *
+ * @param soundMode see the `SoundMode` enum
+ */
+#define SEQCMD_SET_SOUND_MODE(soundMode) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_GLOBAL_CMD << 28) | (SEQCMD_SUB_OP_GLOBAL_SET_SOUND_MODE << 8) | (soundMode))
+
+/**
+ * Disable (or reenable) new sequences from starting
+ *
+ * @param isDisabled true to disable, false to enable
+ *
+ * @note this does not disable the sfx player
+ */
+#define SEQCMD_DISABLE_PLAY_SEQUENCES(isDisabled) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_GLOBAL_CMD << 28) | (SEQCMD_SUB_OP_GLOBAL_DISABLE_NEW_SEQUENCES << 8) | \
+ (u16)(isDisabled))
+
+#define SEQCMD_DISABLE_PLAY_SEQUENCES_2(isDisabled) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_GLOBAL_CMD << 28) | (SEQCMD_SUB_OP_GLOBAL_DISABLE_NEW_SEQUENCES_2 << 8) | \
+ (u16)(isDisabled))
+
+/**
+ * Restart the audio heap with the specified settings
+ *
+ * @param fadeReverb bitmask for reverb indices indicating which reverbs to fade leading into audio heap reset
+ * @param sfxChannelLayout index for different mappings between the 7 banks and the 16 channels
+ * @param specId index for the audio specifications to set high-level audio parameters
+ *
+ * @note: For sfxChannelLayout, There are 4 possible layouts indexed by 0-3.
+ * However, only index 0 is properly implemented. Other indices lead to bugs and softlocks.
+ */
+#define SEQCMD_RESET_AUDIO_HEAP(fadeReverb, sfxChannelLayout, specId) \
+ AudioSeq_QueueSeqCmd((SEQCMD_OP_RESET_AUDIO_HEAP << 28) | ((u8)(fadeReverb) << 16) | \
+ ((u8)(sfxChannelLayout) << 8) | (u8)(specId))
+
+#endif
diff --git a/include/sequence.h b/include/sequence.h
index 857609d4b..d8a9cd95a 100644
--- a/include/sequence.h
+++ b/include/sequence.h
@@ -1,8 +1,6 @@
#ifndef SEQUENCE_H
#define SEQUENCE_H
-#define NA_BGM_STOP 0x100000FF
-
#define NA_BGM_GENERAL_SFX 0x00 // General Sound Effects
#define NA_BGM_AMBIENCE 0x01 // Ambient background noises
#define NA_BGM_TERMINA_FIELD 0x02 // Termina Field
@@ -133,12 +131,15 @@
#define NA_BGM_END_CREDITS_2 0x82 // The End/Credits II "STAFFROLL2"
#define NA_BGM_DISABLED 0xFFFF
+#define SEQ_FLAG_ASYNC 0x8000
+
typedef enum {
/* 0 */ SEQ_PLAYER_BGM_MAIN,
/* 1 */ SEQ_PLAYER_FANFARE,
/* 2 */ SEQ_PLAYER_SFX,
/* 3 */ SEQ_PLAYER_BGM_SUB,
/* 4 */ SEQ_PLAYER_AMBIENCE,
+ /* 5 */ SEQ_PLAYER_MAX,
/* 0xFF */ SEQ_PLAYER_INVALID = 0xFF
} SequencePlayerId;
@@ -160,6 +161,14 @@ typedef enum {
/* 0x7 */ CHANNEL_IO_PORT_7
} ChannelIOPort;
+typedef enum {
+ /* 0 */ VOL_SCALE_INDEX_BGM_MAIN,
+ /* 1 */ VOL_SCALE_INDEX_FANFARE,
+ /* 2 */ VOL_SCALE_INDEX_SFX,
+ /* 3 */ VOL_SCALE_INDEX_BGM_SUB,
+ /* 4 */ VOL_SCALE_INDEX_MAX
+} VolumeScaleIndex; // May be worth using SequencePlayerId instead
+
typedef enum {
/* 0x0 */ AMBIENCE_CHANNEL_STREAM_0,
/* 0x1 */ AMBIENCE_CHANNEL_CRITTER_0,
@@ -174,7 +183,7 @@ typedef enum {
/* 0xD */ AMBIENCE_CHANNEL_SOUND_MODE,
/* 0xE */ AMBIENCE_CHANNEL_RAIN,
/* 0xF */ AMBIENCE_CHANNEL_LIGHTNING
-} AmbienceChannelIndex; // playerIndex = SEQ_PLAYER_AMBIENCE
+} AmbienceChannelIndex; // seqPlayerIndex = SEQ_PLAYER_AMBIENCE
typedef enum {
/* 0x00 */ AMBIENCE_ID_00,
@@ -198,7 +207,7 @@ typedef enum {
/* 0x12 */ AMBIENCE_ID_12,
/* 0x13 */ AMBIENCE_ID_13,
/* 0xFF */ AMBIENCE_ID_DISABLED = 0xFF
-} AmbienceId; // playerIndex = SEQ_PLAYER_AMBIENCE
+} AmbienceId; // seqPlayerIndex = SEQ_PLAYER_AMBIENCE
typedef enum {
/* 0x00 */ AMBIENCE_STREAM_0,
diff --git a/include/sfx.h b/include/sfx.h
index 33c79abf4..b55fbb357 100644
--- a/include/sfx.h
+++ b/include/sfx.h
@@ -16,6 +16,8 @@
#define SFX_FLAG_MASK 0xC00
#define SFX_FLAG 0x800
+#define NA_SE_NONE 0
+
// ------------ PLAYER ------------
#define NA_SE_PL_WALK_GROUND 0x800
diff --git a/include/slowly.h b/include/slowly.h
new file mode 100644
index 000000000..b91d652d9
--- /dev/null
+++ b/include/slowly.h
@@ -0,0 +1,31 @@
+#ifndef SLOWLY_H
+#define SLOWLY_H
+
+#include "ultra64.h"
+
+#define SLOWLY_STATUS_DONE (1 << 0)
+#define SLOWLY_STATUS_STARTED (1 << 1)
+
+typedef void (*SlowlyCallbackZero)(void);
+typedef void (*SlowlyCallbackOne)(void*);
+typedef void (*SlowlyCallbackTwo)(void*, void*);
+
+typedef union {
+ SlowlyCallbackZero zero;
+ SlowlyCallbackOne one;
+ SlowlyCallbackTwo two;
+} SlowlyCallback; // size = 0x4
+
+typedef struct {
+ /* 0x000 */ OSThread thread;
+ /* 0x1B0 */ u8 argCount;
+ /* 0x1B1 */ u8 status;
+ /* 0x1B4 */ SlowlyCallback callback;
+ /* 0x1B8 */ void* arg0;
+ /* 0x1BC */ void* arg1;
+} SlowlyMgr; // size = 0x1C0
+
+void Slowly_Init(SlowlyMgr* slowly, void* stack, SlowlyCallbackTwo callback, void* arg0, void* arg1);
+void Slowly_Destroy(SlowlyMgr* slowly);
+
+#endif
diff --git a/include/stack.h b/include/stack.h
new file mode 100644
index 000000000..3667862cb
--- /dev/null
+++ b/include/stack.h
@@ -0,0 +1,12 @@
+#ifndef STACK_H
+#define STACK_H
+
+#include "alignment.h"
+
+#define STACK(stack, size) \
+ u64 stack[ALIGN8(size) / sizeof(u64)]
+
+#define STACK_TOP(stack) \
+ ((u8*)(stack) + sizeof(stack))
+
+#endif
diff --git a/include/stackcheck.h b/include/stackcheck.h
new file mode 100644
index 000000000..aeb55df28
--- /dev/null
+++ b/include/stackcheck.h
@@ -0,0 +1,26 @@
+#ifndef STACKCHECK_H
+#define STACKCHECK_H
+
+#include "ultra64.h"
+
+typedef enum StackStatus {
+ /* 0 */ STACK_STATUS_OK,
+ /* 1 */ STACK_STATUS_WARNING,
+ /* 2 */ STACK_STATUS_OVERFLOW
+} StackStatus;
+
+typedef struct StackEntry {
+ /* 0x00 */ struct StackEntry* next;
+ /* 0x04 */ struct StackEntry* prev;
+ /* 0x08 */ void* head;
+ /* 0x0C */ void* tail;
+ /* 0x10 */ u32 initValue;
+ /* 0x14 */ s32 minSpace;
+ /* 0x18 */ const char* name;
+} StackEntry; // size = 0x1C
+
+void StackCheck_Init(StackEntry* entry, void* stackBottom, void* stackTop, u32 initValue, s32 minSpace, const char* name);
+void StackCheck_Cleanup(StackEntry* entry);
+u32 StackCheck_Check(StackEntry* entry);
+
+#endif
diff --git a/include/tables/actor_table.h b/include/tables/actor_table.h
new file mode 100644
index 000000000..9019e2b80
--- /dev/null
+++ b/include/tables/actor_table.h
@@ -0,0 +1,703 @@
+/**
+ * Actor Table
+ *
+ * DEFINE_ACTOR should be used for normal actors
+ * - Argument 0: Name of the actor overlay segment in the spec (without the ovl_ part)
+ * - Argument 1: Enum value for this actor
+ * - Argument 2: Allocation type (normal, permanent or absolute)
+ * - Argument 3: Actor name, as a string (used for debug prints)
+ *
+ * DEFINE_ACTOR_INTERNAL should be used for actors that aren't an overlay, with the same arguments as DEFINE_ACTOR
+ *
+ * DEFINE_ACTOR_UNSET is needed to define empty entries from the original game
+ */
+/* 0x000 */ DEFINE_ACTOR_INTERNAL(Player, ACTOR_PLAYER, ALLOCTYPE_NORMAL, "Player")
+/* 0x001 */ DEFINE_ACTOR(En_Test, ACTOR_EN_TEST, ALLOCTYPE_NORMAL, "En_Test")
+/* 0x002 */ DEFINE_ACTOR(En_GirlA, ACTOR_EN_GIRLA, ALLOCTYPE_NORMAL, "En_GirlA")
+/* 0x003 */ DEFINE_ACTOR(En_Part, ACTOR_EN_PART, ALLOCTYPE_NORMAL, "En_Part")
+/* 0x004 */ DEFINE_ACTOR(En_Light, ACTOR_EN_LIGHT, ALLOCTYPE_NORMAL, "En_Light")
+/* 0x005 */ DEFINE_ACTOR(En_Door, ACTOR_EN_DOOR, ALLOCTYPE_PERMANENT, "En_Door")
+/* 0x006 */ DEFINE_ACTOR(En_Box, ACTOR_EN_BOX, ALLOCTYPE_NORMAL, "En_Box")
+/* 0x007 */ DEFINE_ACTOR(En_Pametfrog, ACTOR_EN_PAMETFROG, ALLOCTYPE_NORMAL, "En_Pametfrog")
+/* 0x008 */ DEFINE_ACTOR(En_Okuta, ACTOR_EN_OKUTA, ALLOCTYPE_NORMAL, "En_Okuta")
+/* 0x009 */ DEFINE_ACTOR(En_Bom, ACTOR_EN_BOM, ALLOCTYPE_PERMANENT, "En_Bom")
+/* 0x00A */ DEFINE_ACTOR(En_Wallmas, ACTOR_EN_WALLMAS, ALLOCTYPE_NORMAL, "En_Wallmas")
+/* 0x00B */ DEFINE_ACTOR(En_Dodongo, ACTOR_EN_DODONGO, ALLOCTYPE_NORMAL, "En_Dodongo")
+/* 0x00C */ DEFINE_ACTOR(En_Firefly, ACTOR_EN_FIREFLY, ALLOCTYPE_NORMAL, "En_Firefly")
+/* 0x00D */ DEFINE_ACTOR(En_Horse, ACTOR_EN_HORSE, ALLOCTYPE_NORMAL, "En_Horse")
+/* 0x00E */ DEFINE_ACTOR_INTERNAL(En_Item00, ACTOR_EN_ITEM00, ALLOCTYPE_NORMAL, "En_Item00")
+/* 0x00F */ DEFINE_ACTOR(En_Arrow, ACTOR_EN_ARROW, ALLOCTYPE_PERMANENT, "En_Arrow")
+/* 0x010 */ DEFINE_ACTOR(En_Elf, ACTOR_EN_ELF, ALLOCTYPE_NORMAL, "En_Elf")
+/* 0x011 */ DEFINE_ACTOR(En_Niw, ACTOR_EN_NIW, ALLOCTYPE_NORMAL, "En_Niw")
+/* 0x012 */ DEFINE_ACTOR(En_Tite, ACTOR_EN_TITE, ALLOCTYPE_NORMAL, "En_Tite")
+/* 0x013 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_13)
+/* 0x014 */ DEFINE_ACTOR(En_Peehat, ACTOR_EN_PEEHAT, ALLOCTYPE_NORMAL, "En_Peehat")
+/* 0x015 */ DEFINE_ACTOR(En_Butte, ACTOR_EN_BUTTE, ALLOCTYPE_NORMAL, "En_Butte")
+/* 0x016 */ DEFINE_ACTOR(En_Insect, ACTOR_EN_INSECT, ALLOCTYPE_NORMAL, "En_Insect")
+/* 0x017 */ DEFINE_ACTOR(En_Fish, ACTOR_EN_FISH, ALLOCTYPE_NORMAL, "En_Fish")
+/* 0x018 */ DEFINE_ACTOR(En_Holl, ACTOR_EN_HOLL, ALLOCTYPE_PERMANENT, "En_Holl")
+/* 0x019 */ DEFINE_ACTOR(En_Dinofos, ACTOR_EN_DINOFOS, ALLOCTYPE_NORMAL, "En_Dinofos")
+/* 0x01A */ DEFINE_ACTOR(En_Hata, ACTOR_EN_HATA, ALLOCTYPE_NORMAL, "En_Hata")
+/* 0x01B */ DEFINE_ACTOR(En_Zl1, ACTOR_EN_ZL1, ALLOCTYPE_NORMAL, "En_Zl1")
+/* 0x01C */ DEFINE_ACTOR(En_Viewer, ACTOR_EN_VIEWER, ALLOCTYPE_NORMAL, "En_Viewer")
+/* 0x01D */ DEFINE_ACTOR(En_Bubble, ACTOR_EN_BUBBLE, ALLOCTYPE_NORMAL, "En_Bubble")
+/* 0x01E */ DEFINE_ACTOR(Door_Shutter, ACTOR_DOOR_SHUTTER, ALLOCTYPE_PERMANENT, "Door_Shutter")
+/* 0x01F */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_1F)
+/* 0x020 */ DEFINE_ACTOR(En_Boom, ACTOR_EN_BOOM, ALLOCTYPE_PERMANENT, "En_Boom")
+/* 0x021 */ DEFINE_ACTOR(En_Torch2, ACTOR_EN_TORCH2, ALLOCTYPE_NORMAL, "En_Torch2")
+/* 0x022 */ DEFINE_ACTOR(En_Minifrog, ACTOR_EN_MINIFROG, ALLOCTYPE_NORMAL, "En_Minifrog")
+/* 0x023 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_23)
+/* 0x024 */ DEFINE_ACTOR(En_St, ACTOR_EN_ST, ALLOCTYPE_NORMAL, "En_St")
+/* 0x025 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_25)
+/* 0x026 */ DEFINE_ACTOR_INTERNAL(En_A_Obj, ACTOR_EN_A_OBJ, ALLOCTYPE_NORMAL, "En_A_Obj")
+/* 0x027 */ DEFINE_ACTOR(Obj_Wturn, ACTOR_OBJ_WTURN, ALLOCTYPE_NORMAL, "Obj_Wturn")
+/* 0x028 */ DEFINE_ACTOR(En_River_Sound, ACTOR_EN_RIVER_SOUND, ALLOCTYPE_NORMAL, "En_River_Sound")
+/* 0x029 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_29)
+/* 0x02A */ DEFINE_ACTOR(En_Ossan, ACTOR_EN_OSSAN, ALLOCTYPE_NORMAL, "En_Ossan")
+/* 0x02B */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_2B)
+/* 0x02C */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_2C)
+/* 0x02D */ DEFINE_ACTOR(En_Famos, ACTOR_EN_FAMOS, ALLOCTYPE_NORMAL, "En_Famos")
+/* 0x02E */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_2E)
+/* 0x02F */ DEFINE_ACTOR(En_Bombf, ACTOR_EN_BOMBF, ALLOCTYPE_NORMAL, "En_Bombf")
+/* 0x030 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_30)
+/* 0x031 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_31)
+/* 0x032 */ DEFINE_ACTOR(En_Am, ACTOR_EN_AM, ALLOCTYPE_NORMAL, "En_Am")
+/* 0x033 */ DEFINE_ACTOR(En_Dekubaba, ACTOR_EN_DEKUBABA, ALLOCTYPE_NORMAL, "En_Dekubaba")
+/* 0x034 */ DEFINE_ACTOR(En_M_Fire1, ACTOR_EN_M_FIRE1, ALLOCTYPE_PERMANENT, "En_M_Fire1")
+/* 0x035 */ DEFINE_ACTOR(En_M_Thunder, ACTOR_EN_M_THUNDER, ALLOCTYPE_PERMANENT, "En_M_Thunder")
+/* 0x036 */ DEFINE_ACTOR(Bg_Breakwall, ACTOR_BG_BREAKWALL, ALLOCTYPE_NORMAL, "Bg_Breakwall")
+/* 0x037 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_37)
+/* 0x038 */ DEFINE_ACTOR(Door_Warp1, ACTOR_DOOR_WARP1, ALLOCTYPE_NORMAL, "Door_Warp1")
+/* 0x039 */ DEFINE_ACTOR(Obj_Syokudai, ACTOR_OBJ_SYOKUDAI, ALLOCTYPE_NORMAL, "Obj_Syokudai")
+/* 0x03A */ DEFINE_ACTOR(Item_B_Heart, ACTOR_ITEM_B_HEART, ALLOCTYPE_NORMAL, "Item_B_Heart")
+/* 0x03B */ DEFINE_ACTOR(En_Dekunuts, ACTOR_EN_DEKUNUTS, ALLOCTYPE_NORMAL, "En_Dekunuts")
+/* 0x03C */ DEFINE_ACTOR(En_Bbfall, ACTOR_EN_BBFALL, ALLOCTYPE_NORMAL, "En_Bbfall")
+/* 0x03D */ DEFINE_ACTOR(Arms_Hook, ACTOR_ARMS_HOOK, ALLOCTYPE_PERMANENT, "Arms_Hook")
+/* 0x03E */ DEFINE_ACTOR(En_Bb, ACTOR_EN_BB, ALLOCTYPE_NORMAL, "En_Bb")
+/* 0x03F */ DEFINE_ACTOR(Bg_Keikoku_Spr, ACTOR_BG_KEIKOKU_SPR, ALLOCTYPE_NORMAL, "Bg_Keikoku_Spr")
+/* 0x040 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_40)
+/* 0x041 */ DEFINE_ACTOR(En_Wood02, ACTOR_EN_WOOD02, ALLOCTYPE_NORMAL, "En_Wood02")
+/* 0x042 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_42)
+/* 0x043 */ DEFINE_ACTOR(En_Death, ACTOR_EN_DEATH, ALLOCTYPE_NORMAL, "En_Death")
+/* 0x044 */ DEFINE_ACTOR(En_Minideath, ACTOR_EN_MINIDEATH, ALLOCTYPE_NORMAL, "En_Minideath")
+/* 0x045 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_45)
+/* 0x046 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_46)
+/* 0x047 */ DEFINE_ACTOR(En_Vm, ACTOR_EN_VM, ALLOCTYPE_NORMAL, "En_Vm")
+/* 0x048 */ DEFINE_ACTOR(Demo_Effect, ACTOR_DEMO_EFFECT, ALLOCTYPE_NORMAL, "Demo_Effect")
+/* 0x049 */ DEFINE_ACTOR(Demo_Kankyo, ACTOR_DEMO_KANKYO, ALLOCTYPE_NORMAL, "Demo_Kankyo")
+/* 0x04A */ DEFINE_ACTOR(En_Floormas, ACTOR_EN_FLOORMAS, ALLOCTYPE_NORMAL, "En_Floormas")
+/* 0x04B */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_4B)
+/* 0x04C */ DEFINE_ACTOR(En_Rd, ACTOR_EN_RD, ALLOCTYPE_NORMAL, "En_Rd")
+/* 0x04D */ DEFINE_ACTOR(Bg_F40_Flift, ACTOR_BG_F40_FLIFT, ALLOCTYPE_NORMAL, "Bg_F40_Flift")
+/* 0x04E */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_4E)
+/* 0x04F */ DEFINE_ACTOR(Obj_Mure, ACTOR_OBJ_MURE, ALLOCTYPE_NORMAL, "Obj_Mure")
+/* 0x050 */ DEFINE_ACTOR(En_Sw, ACTOR_EN_SW, ALLOCTYPE_NORMAL, "En_Sw")
+/* 0x051 */ DEFINE_ACTOR(Object_Kankyo, ACTOR_OBJECT_KANKYO, ALLOCTYPE_NORMAL, "Object_Kankyo")
+/* 0x052 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_52)
+/* 0x053 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_53)
+/* 0x054 */ DEFINE_ACTOR(En_Horse_Link_Child, ACTOR_EN_HORSE_LINK_CHILD, ALLOCTYPE_NORMAL, "En_Horse_Link_Child")
+/* 0x055 */ DEFINE_ACTOR(Door_Ana, ACTOR_DOOR_ANA, ALLOCTYPE_NORMAL, "Door_Ana")
+/* 0x056 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_56)
+/* 0x057 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_57)
+/* 0x058 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_58)
+/* 0x059 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_59)
+/* 0x05A */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_5A)
+/* 0x05B */ DEFINE_ACTOR(En_Encount1, ACTOR_EN_ENCOUNT1, ALLOCTYPE_NORMAL, "En_Encount1")
+/* 0x05C */ DEFINE_ACTOR(Demo_Tre_Lgt, ACTOR_DEMO_TRE_LGT, ALLOCTYPE_NORMAL, "Demo_Tre_Lgt")
+/* 0x05D */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_5D)
+/* 0x05E */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_5E)
+/* 0x05F */ DEFINE_ACTOR(En_Encount2, ACTOR_EN_ENCOUNT2, ALLOCTYPE_NORMAL, "En_Encount2")
+/* 0x060 */ DEFINE_ACTOR(En_Fire_Rock, ACTOR_EN_FIRE_ROCK, ALLOCTYPE_NORMAL, "En_Fire_Rock")
+/* 0x061 */ DEFINE_ACTOR(Bg_Ctower_Rot, ACTOR_BG_CTOWER_ROT, ALLOCTYPE_NORMAL, "Bg_Ctower_Rot")
+/* 0x062 */ DEFINE_ACTOR(Mir_Ray, ACTOR_MIR_RAY, ALLOCTYPE_NORMAL, "Mir_Ray")
+/* 0x063 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_63)
+/* 0x064 */ DEFINE_ACTOR(En_Sb, ACTOR_EN_SB, ALLOCTYPE_NORMAL, "En_Sb")
+/* 0x065 */ DEFINE_ACTOR(En_Bigslime, ACTOR_EN_BIGSLIME, ALLOCTYPE_NORMAL, "En_Bigslime")
+/* 0x066 */ DEFINE_ACTOR(En_Karebaba, ACTOR_EN_KAREBABA, ALLOCTYPE_NORMAL, "En_Karebaba")
+/* 0x067 */ DEFINE_ACTOR(En_In, ACTOR_EN_IN, ALLOCTYPE_NORMAL, "En_In")
+/* 0x068 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_68)
+/* 0x069 */ DEFINE_ACTOR(En_Ru, ACTOR_EN_RU, ALLOCTYPE_NORMAL, "En_Ru")
+/* 0x06A */ DEFINE_ACTOR(En_Bom_Chu, ACTOR_EN_BOM_CHU, ALLOCTYPE_PERMANENT, "En_Bom_Chu")
+/* 0x06B */ DEFINE_ACTOR(En_Horse_Game_Check, ACTOR_EN_HORSE_GAME_CHECK, ALLOCTYPE_NORMAL, "En_Horse_Game_Check")
+/* 0x06C */ DEFINE_ACTOR(En_Rr, ACTOR_EN_RR, ALLOCTYPE_NORMAL, "En_Rr")
+/* 0x06D */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_6D)
+/* 0x06E */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_6E)
+/* 0x06F */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_6F)
+/* 0x070 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_70)
+/* 0x071 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_71)
+/* 0x072 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_72)
+/* 0x073 */ DEFINE_ACTOR(En_Fr, ACTOR_EN_FR, ALLOCTYPE_NORMAL, "En_Fr")
+/* 0x074 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_74)
+/* 0x075 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_75)
+/* 0x076 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_76)
+/* 0x077 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_77)
+/* 0x078 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_78)
+/* 0x079 */ DEFINE_ACTOR(En_Fishing, ACTOR_EN_FISHING, ALLOCTYPE_NORMAL, "En_Fishing")
+/* 0x07A */ DEFINE_ACTOR(Obj_Oshihiki, ACTOR_OBJ_OSHIHIKI, ALLOCTYPE_NORMAL, "Obj_Oshihiki")
+/* 0x07B */ DEFINE_ACTOR(Eff_Dust, ACTOR_EFF_DUST, ALLOCTYPE_NORMAL, "Eff_Dust")
+/* 0x07C */ DEFINE_ACTOR(Bg_Umajump, ACTOR_BG_UMAJUMP, ALLOCTYPE_NORMAL, "Bg_Umajump")
+/* 0x07D */ DEFINE_ACTOR(Arrow_Fire, ACTOR_ARROW_FIRE, ALLOCTYPE_ABSOLUTE, "Arrow_Fire")
+/* 0x07E */ DEFINE_ACTOR(Arrow_Ice, ACTOR_ARROW_ICE, ALLOCTYPE_ABSOLUTE, "Arrow_Ice")
+/* 0x07F */ DEFINE_ACTOR(Arrow_Light, ACTOR_ARROW_LIGHT, ALLOCTYPE_ABSOLUTE, "Arrow_Light")
+/* 0x080 */ DEFINE_ACTOR(Item_Etcetera, ACTOR_ITEM_ETCETERA, ALLOCTYPE_NORMAL, "Item_Etcetera")
+/* 0x081 */ DEFINE_ACTOR(Obj_Kibako, ACTOR_OBJ_KIBAKO, ALLOCTYPE_NORMAL, "Obj_Kibako")
+/* 0x082 */ DEFINE_ACTOR(Obj_Tsubo, ACTOR_OBJ_TSUBO, ALLOCTYPE_NORMAL, "Obj_Tsubo")
+/* 0x083 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_83)
+/* 0x084 */ DEFINE_ACTOR(En_Ik, ACTOR_EN_IK, ALLOCTYPE_NORMAL, "En_Ik")
+/* 0x085 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_85)
+/* 0x086 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_86)
+/* 0x087 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_87)
+/* 0x088 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_88)
+/* 0x089 */ DEFINE_ACTOR(Demo_Shd, ACTOR_DEMO_SHD, ALLOCTYPE_NORMAL, "Demo_Shd")
+/* 0x08A */ DEFINE_ACTOR(En_Dns, ACTOR_EN_DNS, ALLOCTYPE_NORMAL, "En_Dns")
+/* 0x08B */ DEFINE_ACTOR(Elf_Msg, ACTOR_ELF_MSG, ALLOCTYPE_NORMAL, "Elf_Msg")
+/* 0x08C */ DEFINE_ACTOR(En_Honotrap, ACTOR_EN_HONOTRAP, ALLOCTYPE_NORMAL, "En_Honotrap")
+/* 0x08D */ DEFINE_ACTOR(En_Tubo_Trap, ACTOR_EN_TUBO_TRAP, ALLOCTYPE_NORMAL, "En_Tubo_Trap")
+/* 0x08E */ DEFINE_ACTOR(Obj_Ice_Poly, ACTOR_OBJ_ICE_POLY, ALLOCTYPE_NORMAL, "Obj_Ice_Poly")
+/* 0x08F */ DEFINE_ACTOR(En_Fz, ACTOR_EN_FZ, ALLOCTYPE_NORMAL, "En_Fz")
+/* 0x090 */ DEFINE_ACTOR(En_Kusa, ACTOR_EN_KUSA, ALLOCTYPE_NORMAL, "En_Kusa")
+/* 0x091 */ DEFINE_ACTOR(Obj_Bean, ACTOR_OBJ_BEAN, ALLOCTYPE_NORMAL, "Obj_Bean")
+/* 0x092 */ DEFINE_ACTOR(Obj_Bombiwa, ACTOR_OBJ_BOMBIWA, ALLOCTYPE_NORMAL, "Obj_Bombiwa")
+/* 0x093 */ DEFINE_ACTOR(Obj_Switch, ACTOR_OBJ_SWITCH, ALLOCTYPE_NORMAL, "Obj_Switch")
+/* 0x094 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_94)
+/* 0x095 */ DEFINE_ACTOR(Obj_Lift, ACTOR_OBJ_LIFT, ALLOCTYPE_NORMAL, "Obj_Lift")
+/* 0x096 */ DEFINE_ACTOR(Obj_Hsblock, ACTOR_OBJ_HSBLOCK, ALLOCTYPE_NORMAL, "Obj_Hsblock")
+/* 0x097 */ DEFINE_ACTOR(En_Okarina_Tag, ACTOR_EN_OKARINA_TAG, ALLOCTYPE_NORMAL, "En_Okarina_Tag")
+/* 0x098 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_98)
+/* 0x099 */ DEFINE_ACTOR(En_Goroiwa, ACTOR_EN_GOROIWA, ALLOCTYPE_NORMAL, "En_Goroiwa")
+/* 0x09A */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_9A)
+/* 0x09B */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_9B)
+/* 0x09C */ DEFINE_ACTOR(En_Daiku, ACTOR_EN_DAIKU, ALLOCTYPE_NORMAL, "En_Daiku")
+/* 0x09D */ DEFINE_ACTOR(En_Nwc, ACTOR_EN_NWC, ALLOCTYPE_NORMAL, "En_Nwc")
+/* 0x09E */ DEFINE_ACTOR(Item_Inbox, ACTOR_ITEM_INBOX, ALLOCTYPE_NORMAL, "Item_Inbox")
+/* 0x09F */ DEFINE_ACTOR(En_Ge1, ACTOR_EN_GE1, ALLOCTYPE_NORMAL, "En_Ge1")
+/* 0x0A0 */ DEFINE_ACTOR(Obj_Blockstop, ACTOR_OBJ_BLOCKSTOP, ALLOCTYPE_NORMAL, "Obj_Blockstop")
+/* 0x0A1 */ DEFINE_ACTOR(En_Sda, ACTOR_EN_SDA, ALLOCTYPE_NORMAL, "En_Sda")
+/* 0x0A2 */ DEFINE_ACTOR(En_Clear_Tag, ACTOR_EN_CLEAR_TAG, ALLOCTYPE_NORMAL, "En_Clear_Tag")
+/* 0x0A3 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_A3)
+/* 0x0A4 */ DEFINE_ACTOR(En_Gm, ACTOR_EN_GM, ALLOCTYPE_NORMAL, "En_Gm")
+/* 0x0A5 */ DEFINE_ACTOR(En_Ms, ACTOR_EN_MS, ALLOCTYPE_NORMAL, "En_Ms")
+/* 0x0A6 */ DEFINE_ACTOR(En_Hs, ACTOR_EN_HS, ALLOCTYPE_NORMAL, "En_Hs")
+/* 0x0A7 */ DEFINE_ACTOR(Bg_Ingate, ACTOR_BG_INGATE, ALLOCTYPE_NORMAL, "Bg_Ingate")
+/* 0x0A8 */ DEFINE_ACTOR(En_Kanban, ACTOR_EN_KANBAN, ALLOCTYPE_NORMAL, "En_Kanban")
+/* 0x0A9 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_A9)
+/* 0x0AA */ DEFINE_ACTOR(En_Attack_Niw, ACTOR_EN_ATTACK_NIW, ALLOCTYPE_NORMAL, "En_Attack_Niw")
+/* 0x0AB */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_AB)
+/* 0x0AC */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_AC)
+/* 0x0AD */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_AD)
+/* 0x0AE */ DEFINE_ACTOR(En_Mk, ACTOR_EN_MK, ALLOCTYPE_NORMAL, "En_Mk")
+/* 0x0AF */ DEFINE_ACTOR(En_Owl, ACTOR_EN_OWL, ALLOCTYPE_NORMAL, "En_Owl")
+/* 0x0B0 */ DEFINE_ACTOR(En_Ishi, ACTOR_EN_ISHI, ALLOCTYPE_NORMAL, "En_Ishi")
+/* 0x0B1 */ DEFINE_ACTOR(Obj_Hana, ACTOR_OBJ_HANA, ALLOCTYPE_NORMAL, "Obj_Hana")
+/* 0x0B2 */ DEFINE_ACTOR(Obj_Lightswitch, ACTOR_OBJ_LIGHTSWITCH, ALLOCTYPE_NORMAL, "Obj_Lightswitch")
+/* 0x0B3 */ DEFINE_ACTOR(Obj_Mure2, ACTOR_OBJ_MURE2, ALLOCTYPE_NORMAL, "Obj_Mure2")
+/* 0x0B4 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_B4)
+/* 0x0B5 */ DEFINE_ACTOR(En_Fu, ACTOR_EN_FU, ALLOCTYPE_NORMAL, "En_Fu")
+/* 0x0B6 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_B6)
+/* 0x0B7 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_B7)
+/* 0x0B8 */ DEFINE_ACTOR(En_Stream, ACTOR_EN_STREAM, ALLOCTYPE_NORMAL, "En_Stream")
+/* 0x0B9 */ DEFINE_ACTOR(En_Mm, ACTOR_EN_MM, ALLOCTYPE_NORMAL, "En_Mm")
+/* 0x0BA */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_BA)
+/* 0x0BB */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_BB)
+/* 0x0BC */ DEFINE_ACTOR(En_Weather_Tag, ACTOR_EN_WEATHER_TAG, ALLOCTYPE_NORMAL, "En_Weather_Tag")
+/* 0x0BD */ DEFINE_ACTOR(En_Ani, ACTOR_EN_ANI, ALLOCTYPE_NORMAL, "En_Ani")
+/* 0x0BE */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_BE)
+/* 0x0BF */ DEFINE_ACTOR(En_Js, ACTOR_EN_JS, ALLOCTYPE_NORMAL, "En_Js")
+/* 0x0C0 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_C0)
+/* 0x0C1 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_C1)
+/* 0x0C2 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_C2)
+/* 0x0C3 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_C3)
+/* 0x0C4 */ DEFINE_ACTOR(En_Okarina_Effect, ACTOR_EN_OKARINA_EFFECT, ALLOCTYPE_NORMAL, "En_Okarina_Effect")
+/* 0x0C5 */ DEFINE_ACTOR(En_Mag, ACTOR_EN_MAG, ALLOCTYPE_NORMAL, "En_Mag")
+/* 0x0C6 */ DEFINE_ACTOR(Elf_Msg2, ACTOR_ELF_MSG2, ALLOCTYPE_NORMAL, "Elf_Msg2")
+/* 0x0C7 */ DEFINE_ACTOR(Bg_F40_Swlift, ACTOR_BG_F40_SWLIFT, ALLOCTYPE_NORMAL, "Bg_F40_Swlift")
+/* 0x0C8 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_C8)
+/* 0x0C9 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_C9)
+/* 0x0CA */ DEFINE_ACTOR(En_Kakasi, ACTOR_EN_KAKASI, ALLOCTYPE_NORMAL, "En_Kakasi")
+/* 0x0CB */ DEFINE_ACTOR(Obj_Makeoshihiki, ACTOR_OBJ_MAKEOSHIHIKI, ALLOCTYPE_NORMAL, "Obj_Makeoshihiki")
+/* 0x0CC */ DEFINE_ACTOR(Oceff_Spot, ACTOR_OCEFF_SPOT, ALLOCTYPE_ABSOLUTE, "Oceff_Spot")
+/* 0x0CD */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_CD)
+/* 0x0CE */ DEFINE_ACTOR(En_Torch, ACTOR_EN_TORCH, ALLOCTYPE_NORMAL, "En_Torch")
+/* 0x0CF */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_CF)
+/* 0x0D0 */ DEFINE_ACTOR(Shot_Sun, ACTOR_SHOT_SUN, ALLOCTYPE_NORMAL, "Shot_Sun")
+/* 0x0D1 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_D1)
+/* 0x0D2 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_D2)
+/* 0x0D3 */ DEFINE_ACTOR(Obj_Roomtimer, ACTOR_OBJ_ROOMTIMER, ALLOCTYPE_NORMAL, "Obj_Roomtimer")
+/* 0x0D4 */ DEFINE_ACTOR(En_Ssh, ACTOR_EN_SSH, ALLOCTYPE_NORMAL, "En_Ssh")
+/* 0x0D5 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_D5)
+/* 0x0D6 */ DEFINE_ACTOR(Oceff_Wipe, ACTOR_OCEFF_WIPE, ALLOCTYPE_ABSOLUTE, "Oceff_Wipe")
+/* 0x0D7 */ DEFINE_ACTOR(Oceff_Storm, ACTOR_OCEFF_STORM, ALLOCTYPE_ABSOLUTE, "Oceff_Storm")
+/* 0x0D8 */ DEFINE_ACTOR(Obj_Demo, ACTOR_OBJ_DEMO, ALLOCTYPE_NORMAL, "Obj_Demo")
+/* 0x0D9 */ DEFINE_ACTOR(En_Minislime, ACTOR_EN_MINISLIME, ALLOCTYPE_NORMAL, "En_Minislime")
+/* 0x0DA */ DEFINE_ACTOR(En_Nutsball, ACTOR_EN_NUTSBALL, ALLOCTYPE_NORMAL, "En_Nutsball")
+/* 0x0DB */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_DB)
+/* 0x0DC */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_DC)
+/* 0x0DD */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_DD)
+/* 0x0DE */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_DE)
+/* 0x0DF */ DEFINE_ACTOR(Oceff_Wipe2, ACTOR_OCEFF_WIPE2, ALLOCTYPE_ABSOLUTE, "Oceff_Wipe2")
+/* 0x0E0 */ DEFINE_ACTOR(Oceff_Wipe3, ACTOR_OCEFF_WIPE3, ALLOCTYPE_ABSOLUTE, "Oceff_Wipe3")
+/* 0x0E1 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_E1)
+/* 0x0E2 */ DEFINE_ACTOR(En_Dg, ACTOR_EN_DG, ALLOCTYPE_NORMAL, "En_Dg")
+/* 0x0E3 */ DEFINE_ACTOR(En_Si, ACTOR_EN_SI, ALLOCTYPE_NORMAL, "En_Si")
+/* 0x0E4 */ DEFINE_ACTOR(Obj_Comb, ACTOR_OBJ_COMB, ALLOCTYPE_NORMAL, "Obj_Comb")
+/* 0x0E5 */ DEFINE_ACTOR(Obj_Kibako2, ACTOR_OBJ_KIBAKO2, ALLOCTYPE_NORMAL, "Obj_Kibako2")
+/* 0x0E6 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_E6)
+/* 0x0E7 */ DEFINE_ACTOR(En_Hs2, ACTOR_EN_HS2, ALLOCTYPE_NORMAL, "En_Hs2")
+/* 0x0E8 */ DEFINE_ACTOR(Obj_Mure3, ACTOR_OBJ_MURE3, ALLOCTYPE_NORMAL, "Obj_Mure3")
+/* 0x0E9 */ DEFINE_ACTOR(En_Tg, ACTOR_EN_TG, ALLOCTYPE_NORMAL, "En_Tg")
+/* 0x0EA */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_EA)
+/* 0x0EB */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_EB)
+/* 0x0EC */ DEFINE_ACTOR(En_Wf, ACTOR_EN_WF, ALLOCTYPE_NORMAL, "En_Wf")
+/* 0x0ED */ DEFINE_ACTOR(En_Skb, ACTOR_EN_SKB, ALLOCTYPE_NORMAL, "En_Skb")
+/* 0x0EE */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_EE)
+/* 0x0EF */ DEFINE_ACTOR(En_Gs, ACTOR_EN_GS, ALLOCTYPE_NORMAL, "En_Gs")
+/* 0x0F0 */ DEFINE_ACTOR(Obj_Sound, ACTOR_OBJ_SOUND, ALLOCTYPE_NORMAL, "Obj_Sound")
+/* 0x0F1 */ DEFINE_ACTOR(En_Crow, ACTOR_EN_CROW, ALLOCTYPE_NORMAL, "En_Crow")
+/* 0x0F2 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_F2)
+/* 0x0F3 */ DEFINE_ACTOR(En_Cow, ACTOR_EN_COW, ALLOCTYPE_NORMAL, "En_Cow")
+/* 0x0F4 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_F4)
+/* 0x0F5 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_F5)
+/* 0x0F6 */ DEFINE_ACTOR(Oceff_Wipe4, ACTOR_OCEFF_WIPE4, ALLOCTYPE_ABSOLUTE, "Oceff_Wipe4")
+/* 0x0F7 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_F7)
+/* 0x0F8 */ DEFINE_ACTOR(En_Zo, ACTOR_EN_ZO, ALLOCTYPE_NORMAL, "En_Zo")
+/* 0x0F9 */ DEFINE_ACTOR(Obj_Makekinsuta, ACTOR_OBJ_MAKEKINSUTA, ALLOCTYPE_NORMAL, "Obj_Makekinsuta")
+/* 0x0FA */ DEFINE_ACTOR(En_Ge3, ACTOR_EN_GE3, ALLOCTYPE_NORMAL, "En_Ge3")
+/* 0x0FB */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_FB)
+/* 0x0FC */ DEFINE_ACTOR(Obj_Hamishi, ACTOR_OBJ_HAMISHI, ALLOCTYPE_NORMAL, "Obj_Hamishi")
+/* 0x0FD */ DEFINE_ACTOR(En_Zl4, ACTOR_EN_ZL4, ALLOCTYPE_NORMAL, "En_Zl4")
+/* 0x0FE */ DEFINE_ACTOR(En_Mm2, ACTOR_EN_MM2, ALLOCTYPE_NORMAL, "En_Mm2")
+/* 0x0FF */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_FF)
+/* 0x100 */ DEFINE_ACTOR(Door_Spiral, ACTOR_DOOR_SPIRAL, ALLOCTYPE_PERMANENT, "Door_Spiral")
+/* 0x101 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_101)
+/* 0x102 */ DEFINE_ACTOR(Obj_Pzlblock, ACTOR_OBJ_PZLBLOCK, ALLOCTYPE_NORMAL, "Obj_Pzlblock")
+/* 0x103 */ DEFINE_ACTOR(Obj_Toge, ACTOR_OBJ_TOGE, ALLOCTYPE_NORMAL, "Obj_Toge")
+/* 0x104 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_104)
+/* 0x105 */ DEFINE_ACTOR(Obj_Armos, ACTOR_OBJ_ARMOS, ALLOCTYPE_NORMAL, "Obj_Armos")
+/* 0x106 */ DEFINE_ACTOR(Obj_Boyo, ACTOR_OBJ_BOYO, ALLOCTYPE_NORMAL, "Obj_Boyo")
+/* 0x107 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_107)
+/* 0x108 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_108)
+/* 0x109 */ DEFINE_ACTOR(En_Grasshopper, ACTOR_EN_GRASSHOPPER, ALLOCTYPE_NORMAL, "En_Grasshopper")
+/* 0x10A */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_10A)
+/* 0x10B */ DEFINE_ACTOR(Obj_Grass, ACTOR_OBJ_GRASS, ALLOCTYPE_NORMAL, "Obj_Grass")
+/* 0x10C */ DEFINE_ACTOR(Obj_Grass_Carry, ACTOR_OBJ_GRASS_CARRY, ALLOCTYPE_NORMAL, "Obj_Grass_Carry")
+/* 0x10D */ DEFINE_ACTOR(Obj_Grass_Unit, ACTOR_OBJ_GRASS_UNIT, ALLOCTYPE_NORMAL, "Obj_Grass_Unit")
+/* 0x10E */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_10E)
+/* 0x10F */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_10F)
+/* 0x110 */ DEFINE_ACTOR(Bg_Fire_Wall, ACTOR_BG_FIRE_WALL, ALLOCTYPE_NORMAL, "Bg_Fire_Wall")
+/* 0x111 */ DEFINE_ACTOR(En_Bu, ACTOR_EN_BU, ALLOCTYPE_NORMAL, "En_Bu")
+/* 0x112 */ DEFINE_ACTOR(En_Encount3, ACTOR_EN_ENCOUNT3, ALLOCTYPE_NORMAL, "En_Encount3")
+/* 0x113 */ DEFINE_ACTOR(En_Jso, ACTOR_EN_JSO, ALLOCTYPE_NORMAL, "En_Jso")
+/* 0x114 */ DEFINE_ACTOR(Obj_Chikuwa, ACTOR_OBJ_CHIKUWA, ALLOCTYPE_NORMAL, "Obj_Chikuwa")
+/* 0x115 */ DEFINE_ACTOR(En_Knight, ACTOR_EN_KNIGHT, ALLOCTYPE_NORMAL, "En_Knight")
+/* 0x116 */ DEFINE_ACTOR(En_Warp_tag, ACTOR_EN_WARP_TAG, ALLOCTYPE_NORMAL, "En_Warp_tag")
+/* 0x117 */ DEFINE_ACTOR(En_Aob_01, ACTOR_EN_AOB_01, ALLOCTYPE_NORMAL, "En_Aob_01")
+/* 0x118 */ DEFINE_ACTOR(En_Boj_01, ACTOR_EN_BOJ_01, ALLOCTYPE_NORMAL, "En_Boj_01")
+/* 0x119 */ DEFINE_ACTOR(En_Boj_02, ACTOR_EN_BOJ_02, ALLOCTYPE_NORMAL, "En_Boj_02")
+/* 0x11A */ DEFINE_ACTOR(En_Boj_03, ACTOR_EN_BOJ_03, ALLOCTYPE_NORMAL, "En_Boj_03")
+/* 0x11B */ DEFINE_ACTOR(En_Encount4, ACTOR_EN_ENCOUNT4, ALLOCTYPE_NORMAL, "En_Encount4")
+/* 0x11C */ DEFINE_ACTOR(En_Bom_Bowl_Man, ACTOR_EN_BOM_BOWL_MAN, ALLOCTYPE_NORMAL, "En_Bom_Bowl_Man")
+/* 0x11D */ DEFINE_ACTOR(En_Syateki_Man, ACTOR_EN_SYATEKI_MAN, ALLOCTYPE_NORMAL, "En_Syateki_Man")
+/* 0x11E */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_11E)
+/* 0x11F */ DEFINE_ACTOR(Bg_Icicle, ACTOR_BG_ICICLE, ALLOCTYPE_NORMAL, "Bg_Icicle")
+/* 0x120 */ DEFINE_ACTOR(En_Syateki_Crow, ACTOR_EN_SYATEKI_CROW, ALLOCTYPE_NORMAL, "En_Syateki_Crow")
+/* 0x121 */ DEFINE_ACTOR(En_Boj_04, ACTOR_EN_BOJ_04, ALLOCTYPE_NORMAL, "En_Boj_04")
+/* 0x122 */ DEFINE_ACTOR(En_Cne_01, ACTOR_EN_CNE_01, ALLOCTYPE_NORMAL, "En_Cne_01")
+/* 0x123 */ DEFINE_ACTOR(En_Bba_01, ACTOR_EN_BBA_01, ALLOCTYPE_NORMAL, "En_Bba_01")
+/* 0x124 */ DEFINE_ACTOR(En_Bji_01, ACTOR_EN_BJI_01, ALLOCTYPE_NORMAL, "En_Bji_01")
+/* 0x125 */ DEFINE_ACTOR(Bg_Spdweb, ACTOR_BG_SPDWEB, ALLOCTYPE_NORMAL, "Bg_Spdweb")
+/* 0x126 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_126)
+/* 0x127 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_127)
+/* 0x128 */ DEFINE_ACTOR(En_Mt_tag, ACTOR_EN_MT_TAG, ALLOCTYPE_NORMAL, "En_Mt_tag")
+/* 0x129 */ DEFINE_ACTOR(Boss_01, ACTOR_BOSS_01, ALLOCTYPE_NORMAL, "Boss_01")
+/* 0x12A */ DEFINE_ACTOR(Boss_02, ACTOR_BOSS_02, ALLOCTYPE_NORMAL, "Boss_02")
+/* 0x12B */ DEFINE_ACTOR(Boss_03, ACTOR_BOSS_03, ALLOCTYPE_NORMAL, "Boss_03")
+/* 0x12C */ DEFINE_ACTOR(Boss_04, ACTOR_BOSS_04, ALLOCTYPE_NORMAL, "Boss_04")
+/* 0x12D */ DEFINE_ACTOR(Boss_05, ACTOR_BOSS_05, ALLOCTYPE_NORMAL, "Boss_05")
+/* 0x12E */ DEFINE_ACTOR(Boss_06, ACTOR_BOSS_06, ALLOCTYPE_NORMAL, "Boss_06")
+/* 0x12F */ DEFINE_ACTOR(Boss_07, ACTOR_BOSS_07, ALLOCTYPE_NORMAL, "Boss_07")
+/* 0x130 */ DEFINE_ACTOR(Bg_Dy_Yoseizo, ACTOR_BG_DY_YOSEIZO, ALLOCTYPE_NORMAL, "Bg_Dy_Yoseizo")
+/* 0x131 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_131)
+/* 0x132 */ DEFINE_ACTOR(En_Boj_05, ACTOR_EN_BOJ_05, ALLOCTYPE_NORMAL, "En_Boj_05")
+/* 0x133 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_133)
+/* 0x134 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_134)
+/* 0x135 */ DEFINE_ACTOR(En_Sob1, ACTOR_EN_SOB1, ALLOCTYPE_NORMAL, "En_Sob1")
+/* 0x136 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_136)
+/* 0x137 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_137)
+/* 0x138 */ DEFINE_ACTOR(En_Go, ACTOR_EN_GO, ALLOCTYPE_NORMAL, "En_Go")
+/* 0x139 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_139)
+/* 0x13A */ DEFINE_ACTOR(En_Raf, ACTOR_EN_RAF, ALLOCTYPE_NORMAL, "En_Raf")
+/* 0x13B */ DEFINE_ACTOR(Obj_Funen, ACTOR_OBJ_FUNEN, ALLOCTYPE_NORMAL, "Obj_Funen")
+/* 0x13C */ DEFINE_ACTOR(Obj_Raillift, ACTOR_OBJ_RAILLIFT, ALLOCTYPE_NORMAL, "Obj_Raillift")
+/* 0x13D */ DEFINE_ACTOR(Bg_Numa_Hana, ACTOR_BG_NUMA_HANA, ALLOCTYPE_NORMAL, "Bg_Numa_Hana")
+/* 0x13E */ DEFINE_ACTOR(Obj_Flowerpot, ACTOR_OBJ_FLOWERPOT, ALLOCTYPE_NORMAL, "Obj_Flowerpot")
+/* 0x13F */ DEFINE_ACTOR(Obj_Spinyroll, ACTOR_OBJ_SPINYROLL, ALLOCTYPE_NORMAL, "Obj_Spinyroll")
+/* 0x140 */ DEFINE_ACTOR(Dm_Hina, ACTOR_DM_HINA, ALLOCTYPE_NORMAL, "Dm_Hina")
+/* 0x141 */ DEFINE_ACTOR(En_Syateki_Wf, ACTOR_EN_SYATEKI_WF, ALLOCTYPE_NORMAL, "En_Syateki_Wf")
+/* 0x142 */ DEFINE_ACTOR(Obj_Skateblock, ACTOR_OBJ_SKATEBLOCK, ALLOCTYPE_NORMAL, "Obj_Skateblock")
+/* 0x143 */ DEFINE_ACTOR(Obj_Iceblock, ACTOR_OBJ_ICEBLOCK, ALLOCTYPE_NORMAL, "Obj_Iceblock")
+/* 0x144 */ DEFINE_ACTOR(En_Bigpamet, ACTOR_EN_BIGPAMET, ALLOCTYPE_NORMAL, "En_Bigpamet")
+/* 0x145 */ DEFINE_ACTOR(En_Syateki_Dekunuts, ACTOR_EN_SYATEKI_DEKUNUTS, ALLOCTYPE_NORMAL, "En_Syateki_Dekunuts")
+/* 0x146 */ DEFINE_ACTOR(Elf_Msg3, ACTOR_ELF_MSG3, ALLOCTYPE_NORMAL, "Elf_Msg3")
+/* 0x147 */ DEFINE_ACTOR(En_Fg, ACTOR_EN_FG, ALLOCTYPE_NORMAL, "En_Fg")
+/* 0x148 */ DEFINE_ACTOR(Dm_Ravine, ACTOR_DM_RAVINE, ALLOCTYPE_NORMAL, "Dm_Ravine")
+/* 0x149 */ DEFINE_ACTOR(Dm_Sa, ACTOR_DM_SA, ALLOCTYPE_NORMAL, "Dm_Sa")
+/* 0x14A */ DEFINE_ACTOR(En_Slime, ACTOR_EN_SLIME, ALLOCTYPE_NORMAL, "En_Slime")
+/* 0x14B */ DEFINE_ACTOR(En_Pr, ACTOR_EN_PR, ALLOCTYPE_NORMAL, "En_Pr")
+/* 0x14C */ DEFINE_ACTOR(Obj_Toudai, ACTOR_OBJ_TOUDAI, ALLOCTYPE_NORMAL, "Obj_Toudai")
+/* 0x14D */ DEFINE_ACTOR(Obj_Entotu, ACTOR_OBJ_ENTOTU, ALLOCTYPE_NORMAL, "Obj_Entotu")
+/* 0x14E */ DEFINE_ACTOR(Obj_Bell, ACTOR_OBJ_BELL, ALLOCTYPE_NORMAL, "Obj_Bell")
+/* 0x14F */ DEFINE_ACTOR(En_Syateki_Okuta, ACTOR_EN_SYATEKI_OKUTA, ALLOCTYPE_NORMAL, "En_Syateki_Okuta")
+/* 0x150 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_150)
+/* 0x151 */ DEFINE_ACTOR(Obj_Shutter, ACTOR_OBJ_SHUTTER, ALLOCTYPE_NORMAL, "Obj_Shutter")
+/* 0x152 */ DEFINE_ACTOR(Dm_Zl, ACTOR_DM_ZL, ALLOCTYPE_NORMAL, "Dm_Zl")
+/* 0x153 */ DEFINE_ACTOR(En_Elfgrp, ACTOR_EN_ELFGRP, ALLOCTYPE_NORMAL, "En_Elfgrp")
+/* 0x154 */ DEFINE_ACTOR(Dm_Tsg, ACTOR_DM_TSG, ALLOCTYPE_NORMAL, "Dm_Tsg")
+/* 0x155 */ DEFINE_ACTOR(En_Baguo, ACTOR_EN_BAGUO, ALLOCTYPE_NORMAL, "En_Baguo")
+/* 0x156 */ DEFINE_ACTOR(Obj_Vspinyroll, ACTOR_OBJ_VSPINYROLL, ALLOCTYPE_NORMAL, "Obj_Vspinyroll")
+/* 0x157 */ DEFINE_ACTOR(Obj_Smork, ACTOR_OBJ_SMORK, ALLOCTYPE_NORMAL, "Obj_Smork")
+/* 0x158 */ DEFINE_ACTOR(En_Test2, ACTOR_EN_TEST2, ALLOCTYPE_NORMAL, "En_Test2")
+/* 0x159 */ DEFINE_ACTOR(En_Test3, ACTOR_EN_TEST3, ALLOCTYPE_NORMAL, "En_Test3")
+/* 0x15A */ DEFINE_ACTOR(En_Test4, ACTOR_EN_TEST4, ALLOCTYPE_NORMAL, "En_Test4")
+/* 0x15B */ DEFINE_ACTOR(En_Bat, ACTOR_EN_BAT, ALLOCTYPE_NORMAL, "En_Bat")
+/* 0x15C */ DEFINE_ACTOR(En_Sekihi, ACTOR_EN_SEKIHI, ALLOCTYPE_NORMAL, "En_Sekihi")
+/* 0x15D */ DEFINE_ACTOR(En_Wiz, ACTOR_EN_WIZ, ALLOCTYPE_NORMAL, "En_Wiz")
+/* 0x15E */ DEFINE_ACTOR(En_Wiz_Brock, ACTOR_EN_WIZ_BROCK, ALLOCTYPE_NORMAL, "En_Wiz_Brock")
+/* 0x15F */ DEFINE_ACTOR(En_Wiz_Fire, ACTOR_EN_WIZ_FIRE, ALLOCTYPE_NORMAL, "En_Wiz_Fire")
+/* 0x160 */ DEFINE_ACTOR(Eff_Change, ACTOR_EFF_CHANGE, ALLOCTYPE_NORMAL, "Eff_Change")
+/* 0x161 */ DEFINE_ACTOR(Dm_Statue, ACTOR_DM_STATUE, ALLOCTYPE_NORMAL, "Dm_Statue")
+/* 0x162 */ DEFINE_ACTOR(Obj_Fireshield, ACTOR_OBJ_FIRESHIELD, ALLOCTYPE_NORMAL, "Obj_Fireshield")
+/* 0x163 */ DEFINE_ACTOR(Bg_Ladder, ACTOR_BG_LADDER, ALLOCTYPE_NORMAL, "Bg_Ladder")
+/* 0x164 */ DEFINE_ACTOR(En_Mkk, ACTOR_EN_MKK, ALLOCTYPE_NORMAL, "En_Mkk")
+/* 0x165 */ DEFINE_ACTOR(Demo_Getitem, ACTOR_DEMO_GETITEM, ALLOCTYPE_NORMAL, "Demo_Getitem")
+/* 0x166 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_166)
+/* 0x167 */ DEFINE_ACTOR(En_Dnb, ACTOR_EN_DNB, ALLOCTYPE_NORMAL, "En_Dnb")
+/* 0x168 */ DEFINE_ACTOR(En_Dnh, ACTOR_EN_DNH, ALLOCTYPE_NORMAL, "En_Dnh")
+/* 0x169 */ DEFINE_ACTOR(En_Dnk, ACTOR_EN_DNK, ALLOCTYPE_NORMAL, "En_Dnk")
+/* 0x16A */ DEFINE_ACTOR(En_Dnq, ACTOR_EN_DNQ, ALLOCTYPE_NORMAL, "En_Dnq")
+/* 0x16B */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_16B)
+/* 0x16C */ DEFINE_ACTOR(Bg_Keikoku_Saku, ACTOR_BG_KEIKOKU_SAKU, ALLOCTYPE_NORMAL, "Bg_Keikoku_Saku")
+/* 0x16D */ DEFINE_ACTOR(Obj_Hugebombiwa, ACTOR_OBJ_HUGEBOMBIWA, ALLOCTYPE_NORMAL, "Obj_Hugebombiwa")
+/* 0x16E */ DEFINE_ACTOR(En_Firefly2, ACTOR_EN_FIREFLY2, ALLOCTYPE_NORMAL, "En_Firefly2")
+/* 0x16F */ DEFINE_ACTOR(En_Rat, ACTOR_EN_RAT, ALLOCTYPE_NORMAL, "En_Rat")
+/* 0x170 */ DEFINE_ACTOR(En_Water_Effect, ACTOR_EN_WATER_EFFECT, ALLOCTYPE_NORMAL, "En_Water_Effect")
+/* 0x171 */ DEFINE_ACTOR(En_Kusa2, ACTOR_EN_KUSA2, ALLOCTYPE_NORMAL, "En_Kusa2")
+/* 0x172 */ DEFINE_ACTOR(Bg_Spout_Fire, ACTOR_BG_SPOUT_FIRE, ALLOCTYPE_NORMAL, "Bg_Spout_Fire")
+/* 0x173 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_173)
+/* 0x174 */ DEFINE_ACTOR(Bg_Dblue_Movebg, ACTOR_BG_DBLUE_MOVEBG, ALLOCTYPE_NORMAL, "Bg_Dblue_Movebg")
+/* 0x175 */ DEFINE_ACTOR(En_Dy_Extra, ACTOR_EN_DY_EXTRA, ALLOCTYPE_NORMAL, "En_Dy_Extra")
+/* 0x176 */ DEFINE_ACTOR(En_Bal, ACTOR_EN_BAL, ALLOCTYPE_NORMAL, "En_Bal")
+/* 0x177 */ DEFINE_ACTOR(En_Ginko_Man, ACTOR_EN_GINKO_MAN, ALLOCTYPE_NORMAL, "En_Ginko_Man")
+/* 0x178 */ DEFINE_ACTOR(En_Warp_Uzu, ACTOR_EN_WARP_UZU, ALLOCTYPE_NORMAL, "En_Warp_Uzu")
+/* 0x179 */ DEFINE_ACTOR(Obj_Driftice, ACTOR_OBJ_DRIFTICE, ALLOCTYPE_NORMAL, "Obj_Driftice")
+/* 0x17A */ DEFINE_ACTOR(En_Look_Nuts, ACTOR_EN_LOOK_NUTS, ALLOCTYPE_NORMAL, "En_Look_Nuts")
+/* 0x17B */ DEFINE_ACTOR(En_Mushi2, ACTOR_EN_MUSHI2, ALLOCTYPE_NORMAL, "En_Mushi2")
+/* 0x17C */ DEFINE_ACTOR(En_Fall, ACTOR_EN_FALL, ALLOCTYPE_NORMAL, "En_Fall")
+/* 0x17D */ DEFINE_ACTOR(En_Mm3, ACTOR_EN_MM3, ALLOCTYPE_NORMAL, "En_Mm3")
+/* 0x17E */ DEFINE_ACTOR(Bg_Crace_Movebg, ACTOR_BG_CRACE_MOVEBG, ALLOCTYPE_NORMAL, "Bg_Crace_Movebg")
+/* 0x17F */ DEFINE_ACTOR(En_Dno, ACTOR_EN_DNO, ALLOCTYPE_NORMAL, "En_Dno")
+/* 0x180 */ DEFINE_ACTOR(En_Pr2, ACTOR_EN_PR2, ALLOCTYPE_NORMAL, "En_Pr2")
+/* 0x181 */ DEFINE_ACTOR(En_Prz, ACTOR_EN_PRZ, ALLOCTYPE_NORMAL, "En_Prz")
+/* 0x182 */ DEFINE_ACTOR(En_Jso2, ACTOR_EN_JSO2, ALLOCTYPE_NORMAL, "En_Jso2")
+/* 0x183 */ DEFINE_ACTOR(Obj_Etcetera, ACTOR_OBJ_ETCETERA, ALLOCTYPE_NORMAL, "Obj_Etcetera")
+/* 0x184 */ DEFINE_ACTOR(En_Egol, ACTOR_EN_EGOL, ALLOCTYPE_NORMAL, "En_Egol")
+/* 0x185 */ DEFINE_ACTOR(Obj_Mine, ACTOR_OBJ_MINE, ALLOCTYPE_NORMAL, "Obj_Mine")
+/* 0x186 */ DEFINE_ACTOR(Obj_Purify, ACTOR_OBJ_PURIFY, ALLOCTYPE_NORMAL, "Obj_Purify")
+/* 0x187 */ DEFINE_ACTOR(En_Tru, ACTOR_EN_TRU, ALLOCTYPE_NORMAL, "En_Tru")
+/* 0x188 */ DEFINE_ACTOR(En_Trt, ACTOR_EN_TRT, ALLOCTYPE_NORMAL, "En_Trt")
+/* 0x189 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_189)
+/* 0x18A */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_18A)
+/* 0x18B */ DEFINE_ACTOR(En_Test5, ACTOR_EN_TEST5, ALLOCTYPE_NORMAL, "En_Test5")
+/* 0x18C */ DEFINE_ACTOR(En_Test6, ACTOR_EN_TEST6, ALLOCTYPE_NORMAL, "En_Test6")
+/* 0x18D */ DEFINE_ACTOR(En_Az, ACTOR_EN_AZ, ALLOCTYPE_NORMAL, "En_Az")
+/* 0x18E */ DEFINE_ACTOR(En_Estone, ACTOR_EN_ESTONE, ALLOCTYPE_NORMAL, "En_Estone")
+/* 0x18F */ DEFINE_ACTOR(Bg_Hakugin_Post, ACTOR_BG_HAKUGIN_POST, ALLOCTYPE_NORMAL, "Bg_Hakugin_Post")
+/* 0x190 */ DEFINE_ACTOR(Dm_Opstage, ACTOR_DM_OPSTAGE, ALLOCTYPE_NORMAL, "Dm_Opstage")
+/* 0x191 */ DEFINE_ACTOR(Dm_Stk, ACTOR_DM_STK, ALLOCTYPE_NORMAL, "Dm_Stk")
+/* 0x192 */ DEFINE_ACTOR(Dm_Char00, ACTOR_DM_CHAR00, ALLOCTYPE_NORMAL, "Dm_Char00")
+/* 0x193 */ DEFINE_ACTOR(Dm_Char01, ACTOR_DM_CHAR01, ALLOCTYPE_NORMAL, "Dm_Char01")
+/* 0x194 */ DEFINE_ACTOR(Dm_Char02, ACTOR_DM_CHAR02, ALLOCTYPE_NORMAL, "Dm_Char02")
+/* 0x195 */ DEFINE_ACTOR(Dm_Char03, ACTOR_DM_CHAR03, ALLOCTYPE_NORMAL, "Dm_Char03")
+/* 0x196 */ DEFINE_ACTOR(Dm_Char04, ACTOR_DM_CHAR04, ALLOCTYPE_NORMAL, "Dm_Char04")
+/* 0x197 */ DEFINE_ACTOR(Dm_Char05, ACTOR_DM_CHAR05, ALLOCTYPE_NORMAL, "Dm_Char05")
+/* 0x198 */ DEFINE_ACTOR(Dm_Char06, ACTOR_DM_CHAR06, ALLOCTYPE_NORMAL, "Dm_Char06")
+/* 0x199 */ DEFINE_ACTOR(Dm_Char07, ACTOR_DM_CHAR07, ALLOCTYPE_NORMAL, "Dm_Char07")
+/* 0x19A */ DEFINE_ACTOR(Dm_Char08, ACTOR_DM_CHAR08, ALLOCTYPE_NORMAL, "Dm_Char08")
+/* 0x19B */ DEFINE_ACTOR(Dm_Char09, ACTOR_DM_CHAR09, ALLOCTYPE_NORMAL, "Dm_Char09")
+/* 0x19C */ DEFINE_ACTOR(Obj_Tokeidai, ACTOR_OBJ_TOKEIDAI, ALLOCTYPE_NORMAL, "Obj_Tokeidai")
+/* 0x19D */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_19D)
+/* 0x19E */ DEFINE_ACTOR(En_Mnk, ACTOR_EN_MNK, ALLOCTYPE_NORMAL, "En_Mnk")
+/* 0x19F */ DEFINE_ACTOR(En_Egblock, ACTOR_EN_EGBLOCK, ALLOCTYPE_NORMAL, "En_Egblock")
+/* 0x1A0 */ DEFINE_ACTOR(En_Guard_Nuts, ACTOR_EN_GUARD_NUTS, ALLOCTYPE_NORMAL, "En_Guard_Nuts")
+/* 0x1A1 */ DEFINE_ACTOR(Bg_Hakugin_Bombwall, ACTOR_BG_HAKUGIN_BOMBWALL, ALLOCTYPE_NORMAL, "Bg_Hakugin_Bombwall")
+/* 0x1A2 */ DEFINE_ACTOR(Obj_Tokei_Tobira, ACTOR_OBJ_TOKEI_TOBIRA, ALLOCTYPE_NORMAL, "Obj_Tokei_Tobira")
+/* 0x1A3 */ DEFINE_ACTOR(Bg_Hakugin_Elvpole, ACTOR_BG_HAKUGIN_ELVPOLE, ALLOCTYPE_NORMAL, "Bg_Hakugin_Elvpole")
+/* 0x1A4 */ DEFINE_ACTOR(En_Ma4, ACTOR_EN_MA4, ALLOCTYPE_NORMAL, "En_Ma4")
+/* 0x1A5 */ DEFINE_ACTOR(En_Twig, ACTOR_EN_TWIG, ALLOCTYPE_NORMAL, "En_Twig")
+/* 0x1A6 */ DEFINE_ACTOR(En_Po_Fusen, ACTOR_EN_PO_FUSEN, ALLOCTYPE_NORMAL, "En_Po_Fusen")
+/* 0x1A7 */ DEFINE_ACTOR(En_Door_Etc, ACTOR_EN_DOOR_ETC, ALLOCTYPE_NORMAL, "En_Door_Etc")
+/* 0x1A8 */ DEFINE_ACTOR(En_Bigokuta, ACTOR_EN_BIGOKUTA, ALLOCTYPE_NORMAL, "En_Bigokuta")
+/* 0x1A9 */ DEFINE_ACTOR(Bg_Icefloe, ACTOR_BG_ICEFLOE, ALLOCTYPE_NORMAL, "Bg_Icefloe")
+/* 0x1AA */ DEFINE_ACTOR(Obj_Ocarinalift, ACTOR_OBJ_OCARINALIFT, ALLOCTYPE_NORMAL, "Obj_Ocarinalift")
+/* 0x1AB */ DEFINE_ACTOR(En_Time_Tag, ACTOR_EN_TIME_TAG, ALLOCTYPE_NORMAL, "En_Time_Tag")
+/* 0x1AC */ DEFINE_ACTOR(Bg_Open_Shutter, ACTOR_BG_OPEN_SHUTTER, ALLOCTYPE_NORMAL, "Bg_Open_Shutter")
+/* 0x1AD */ DEFINE_ACTOR(Bg_Open_Spot, ACTOR_BG_OPEN_SPOT, ALLOCTYPE_NORMAL, "Bg_Open_Spot")
+/* 0x1AE */ DEFINE_ACTOR(Bg_Fu_Kaiten, ACTOR_BG_FU_KAITEN, ALLOCTYPE_NORMAL, "Bg_Fu_Kaiten")
+/* 0x1AF */ DEFINE_ACTOR(Obj_Aqua, ACTOR_OBJ_AQUA, ALLOCTYPE_NORMAL, "Obj_Aqua")
+/* 0x1B0 */ DEFINE_ACTOR(En_Elforg, ACTOR_EN_ELFORG, ALLOCTYPE_NORMAL, "En_Elforg")
+/* 0x1B1 */ DEFINE_ACTOR(En_Elfbub, ACTOR_EN_ELFBUB, ALLOCTYPE_NORMAL, "En_Elfbub")
+/* 0x1B2 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_1B2)
+/* 0x1B3 */ DEFINE_ACTOR(En_Fu_Mato, ACTOR_EN_FU_MATO, ALLOCTYPE_NORMAL, "En_Fu_Mato")
+/* 0x1B4 */ DEFINE_ACTOR(En_Fu_Kago, ACTOR_EN_FU_KAGO, ALLOCTYPE_NORMAL, "En_Fu_Kago")
+/* 0x1B5 */ DEFINE_ACTOR(En_Osn, ACTOR_EN_OSN, ALLOCTYPE_NORMAL, "En_Osn")
+/* 0x1B6 */ DEFINE_ACTOR(Bg_Ctower_Gear, ACTOR_BG_CTOWER_GEAR, ALLOCTYPE_NORMAL, "Bg_Ctower_Gear")
+/* 0x1B7 */ DEFINE_ACTOR(En_Trt2, ACTOR_EN_TRT2, ALLOCTYPE_NORMAL, "En_Trt2")
+/* 0x1B8 */ DEFINE_ACTOR(Obj_Tokei_Step, ACTOR_OBJ_TOKEI_STEP, ALLOCTYPE_NORMAL, "Obj_Tokei_Step")
+/* 0x1B9 */ DEFINE_ACTOR(Bg_Lotus, ACTOR_BG_LOTUS, ALLOCTYPE_NORMAL, "Bg_Lotus")
+/* 0x1BA */ DEFINE_ACTOR(En_Kame, ACTOR_EN_KAME, ALLOCTYPE_NORMAL, "En_Kame")
+/* 0x1BB */ DEFINE_ACTOR(Obj_Takaraya_Wall, ACTOR_OBJ_TAKARAYA_WALL, ALLOCTYPE_NORMAL, "Obj_Takaraya_Wall")
+/* 0x1BC */ DEFINE_ACTOR(Bg_Fu_Mizu, ACTOR_BG_FU_MIZU, ALLOCTYPE_NORMAL, "Bg_Fu_Mizu")
+/* 0x1BD */ DEFINE_ACTOR(En_Sellnuts, ACTOR_EN_SELLNUTS, ALLOCTYPE_NORMAL, "En_Sellnuts")
+/* 0x1BE */ DEFINE_ACTOR(Bg_Dkjail_Ivy, ACTOR_BG_DKJAIL_IVY, ALLOCTYPE_NORMAL, "Bg_Dkjail_Ivy")
+/* 0x1BF */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_1BF)
+/* 0x1C0 */ DEFINE_ACTOR(Obj_Visiblock, ACTOR_OBJ_VISIBLOCK, ALLOCTYPE_NORMAL, "Obj_Visiblock")
+/* 0x1C1 */ DEFINE_ACTOR(En_Takaraya, ACTOR_EN_TAKARAYA, ALLOCTYPE_NORMAL, "En_Takaraya")
+/* 0x1C2 */ DEFINE_ACTOR(En_Tsn, ACTOR_EN_TSN, ALLOCTYPE_NORMAL, "En_Tsn")
+/* 0x1C3 */ DEFINE_ACTOR(En_Ds2n, ACTOR_EN_DS2N, ALLOCTYPE_NORMAL, "En_Ds2n")
+/* 0x1C4 */ DEFINE_ACTOR(En_Fsn, ACTOR_EN_FSN, ALLOCTYPE_NORMAL, "En_Fsn")
+/* 0x1C5 */ DEFINE_ACTOR(En_Shn, ACTOR_EN_SHN, ALLOCTYPE_NORMAL, "En_Shn")
+/* 0x1C6 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_1C6)
+/* 0x1C7 */ DEFINE_ACTOR(En_Stop_heishi, ACTOR_EN_STOP_HEISHI, ALLOCTYPE_NORMAL, "En_Stop_heishi")
+/* 0x1C8 */ DEFINE_ACTOR(Obj_Bigicicle, ACTOR_OBJ_BIGICICLE, ALLOCTYPE_NORMAL, "Obj_Bigicicle")
+/* 0x1C9 */ DEFINE_ACTOR(En_Lift_Nuts, ACTOR_EN_LIFT_NUTS, ALLOCTYPE_NORMAL, "En_Lift_Nuts")
+/* 0x1CA */ DEFINE_ACTOR(En_Tk, ACTOR_EN_TK, ALLOCTYPE_NORMAL, "En_Tk")
+/* 0x1CB */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_1CB)
+/* 0x1CC */ DEFINE_ACTOR(Bg_Market_Step, ACTOR_BG_MARKET_STEP, ALLOCTYPE_NORMAL, "Bg_Market_Step")
+/* 0x1CD */ DEFINE_ACTOR(Obj_Lupygamelift, ACTOR_OBJ_LUPYGAMELIFT, ALLOCTYPE_NORMAL, "Obj_Lupygamelift")
+/* 0x1CE */ DEFINE_ACTOR(En_Test7, ACTOR_EN_TEST7, ALLOCTYPE_NORMAL, "En_Test7")
+/* 0x1CF */ DEFINE_ACTOR(Obj_Lightblock, ACTOR_OBJ_LIGHTBLOCK, ALLOCTYPE_NORMAL, "Obj_Lightblock")
+/* 0x1D0 */ DEFINE_ACTOR(Mir_Ray2, ACTOR_MIR_RAY2, ALLOCTYPE_NORMAL, "Mir_Ray2")
+/* 0x1D1 */ DEFINE_ACTOR(En_Wdhand, ACTOR_EN_WDHAND, ALLOCTYPE_NORMAL, "En_Wdhand")
+/* 0x1D2 */ DEFINE_ACTOR(En_Gamelupy, ACTOR_EN_GAMELUPY, ALLOCTYPE_NORMAL, "En_Gamelupy")
+/* 0x1D3 */ DEFINE_ACTOR(Bg_Danpei_Movebg, ACTOR_BG_DANPEI_MOVEBG, ALLOCTYPE_NORMAL, "Bg_Danpei_Movebg")
+/* 0x1D4 */ DEFINE_ACTOR(En_Snowwd, ACTOR_EN_SNOWWD, ALLOCTYPE_NORMAL, "En_Snowwd")
+/* 0x1D5 */ DEFINE_ACTOR(En_Pm, ACTOR_EN_PM, ALLOCTYPE_NORMAL, "En_Pm")
+/* 0x1D6 */ DEFINE_ACTOR(En_Gakufu, ACTOR_EN_GAKUFU, ALLOCTYPE_NORMAL, "En_Gakufu")
+/* 0x1D7 */ DEFINE_ACTOR(Elf_Msg4, ACTOR_ELF_MSG4, ALLOCTYPE_NORMAL, "Elf_Msg4")
+/* 0x1D8 */ DEFINE_ACTOR(Elf_Msg5, ACTOR_ELF_MSG5, ALLOCTYPE_NORMAL, "Elf_Msg5")
+/* 0x1D9 */ DEFINE_ACTOR(En_Col_Man, ACTOR_EN_COL_MAN, ALLOCTYPE_NORMAL, "En_Col_Man")
+/* 0x1DA */ DEFINE_ACTOR(En_Talk_Gibud, ACTOR_EN_TALK_GIBUD, ALLOCTYPE_NORMAL, "En_Talk_Gibud")
+/* 0x1DB */ DEFINE_ACTOR(En_Giant, ACTOR_EN_GIANT, ALLOCTYPE_NORMAL, "En_Giant")
+/* 0x1DC */ DEFINE_ACTOR(Obj_Snowball, ACTOR_OBJ_SNOWBALL, ALLOCTYPE_NORMAL, "Obj_Snowball")
+/* 0x1DD */ DEFINE_ACTOR(Boss_Hakugin, ACTOR_BOSS_HAKUGIN, ALLOCTYPE_NORMAL, "Boss_Hakugin")
+/* 0x1DE */ DEFINE_ACTOR(En_Gb2, ACTOR_EN_GB2, ALLOCTYPE_NORMAL, "En_Gb2")
+/* 0x1DF */ DEFINE_ACTOR(En_Onpuman, ACTOR_EN_ONPUMAN, ALLOCTYPE_NORMAL, "En_Onpuman")
+/* 0x1E0 */ DEFINE_ACTOR(Bg_Tobira01, ACTOR_BG_TOBIRA01, ALLOCTYPE_NORMAL, "Bg_Tobira01")
+/* 0x1E1 */ DEFINE_ACTOR(En_Tag_Obj, ACTOR_EN_TAG_OBJ, ALLOCTYPE_NORMAL, "En_Tag_Obj")
+/* 0x1E2 */ DEFINE_ACTOR(Obj_Dhouse, ACTOR_OBJ_DHOUSE, ALLOCTYPE_NORMAL, "Obj_Dhouse")
+/* 0x1E3 */ DEFINE_ACTOR(Obj_Hakaisi, ACTOR_OBJ_HAKAISI, ALLOCTYPE_NORMAL, "Obj_Hakaisi")
+/* 0x1E4 */ DEFINE_ACTOR(Bg_Hakugin_Switch, ACTOR_BG_HAKUGIN_SWITCH, ALLOCTYPE_NORMAL, "Bg_Hakugin_Switch")
+/* 0x1E5 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_1E5)
+/* 0x1E6 */ DEFINE_ACTOR(En_Snowman, ACTOR_EN_SNOWMAN, ALLOCTYPE_NORMAL, "En_Snowman")
+/* 0x1E7 */ DEFINE_ACTOR(TG_Sw, ACTOR_TG_SW, ALLOCTYPE_NORMAL, "TG_Sw")
+/* 0x1E8 */ DEFINE_ACTOR(En_Po_Sisters, ACTOR_EN_PO_SISTERS, ALLOCTYPE_NORMAL, "En_Po_Sisters")
+/* 0x1E9 */ DEFINE_ACTOR(En_Pp, ACTOR_EN_PP, ALLOCTYPE_NORMAL, "En_Pp")
+/* 0x1EA */ DEFINE_ACTOR(En_Hakurock, ACTOR_EN_HAKUROCK, ALLOCTYPE_NORMAL, "En_Hakurock")
+/* 0x1EB */ DEFINE_ACTOR(En_Hanabi, ACTOR_EN_HANABI, ALLOCTYPE_NORMAL, "En_Hanabi")
+/* 0x1EC */ DEFINE_ACTOR(Obj_Dowsing, ACTOR_OBJ_DOWSING, ALLOCTYPE_NORMAL, "Obj_Dowsing")
+/* 0x1ED */ DEFINE_ACTOR(Obj_Wind, ACTOR_OBJ_WIND, ALLOCTYPE_NORMAL, "Obj_Wind")
+/* 0x1EE */ DEFINE_ACTOR(En_Racedog, ACTOR_EN_RACEDOG, ALLOCTYPE_NORMAL, "En_Racedog")
+/* 0x1EF */ DEFINE_ACTOR(En_Kendo_Js, ACTOR_EN_KENDO_JS, ALLOCTYPE_NORMAL, "En_Kendo_Js")
+/* 0x1F0 */ DEFINE_ACTOR(Bg_Botihasira, ACTOR_BG_BOTIHASIRA, ALLOCTYPE_NORMAL, "Bg_Botihasira")
+/* 0x1F1 */ DEFINE_ACTOR(En_Fish2, ACTOR_EN_FISH2, ALLOCTYPE_NORMAL, "En_Fish2")
+/* 0x1F2 */ DEFINE_ACTOR(En_Pst, ACTOR_EN_PST, ALLOCTYPE_NORMAL, "En_Pst")
+/* 0x1F3 */ DEFINE_ACTOR(En_Poh, ACTOR_EN_POH, ALLOCTYPE_NORMAL, "En_Poh")
+/* 0x1F4 */ DEFINE_ACTOR(Obj_Spidertent, ACTOR_OBJ_SPIDERTENT, ALLOCTYPE_NORMAL, "Obj_Spidertent")
+/* 0x1F5 */ DEFINE_ACTOR(En_Zoraegg, ACTOR_EN_ZORAEGG, ALLOCTYPE_NORMAL, "En_Zoraegg")
+/* 0x1F6 */ DEFINE_ACTOR(En_Kbt, ACTOR_EN_KBT, ALLOCTYPE_NORMAL, "En_Kbt")
+/* 0x1F7 */ DEFINE_ACTOR(En_Gg, ACTOR_EN_GG, ALLOCTYPE_NORMAL, "En_Gg")
+/* 0x1F8 */ DEFINE_ACTOR(En_Maruta, ACTOR_EN_MARUTA, ALLOCTYPE_NORMAL, "En_Maruta")
+/* 0x1F9 */ DEFINE_ACTOR(Obj_Snowball2, ACTOR_OBJ_SNOWBALL2, ALLOCTYPE_NORMAL, "Obj_Snowball2")
+/* 0x1FA */ DEFINE_ACTOR(En_Gg2, ACTOR_EN_GG2, ALLOCTYPE_NORMAL, "En_Gg2")
+/* 0x1FB */ DEFINE_ACTOR(Obj_Ghaka, ACTOR_OBJ_GHAKA, ALLOCTYPE_NORMAL, "Obj_Ghaka")
+/* 0x1FC */ DEFINE_ACTOR(En_Dnp, ACTOR_EN_DNP, ALLOCTYPE_NORMAL, "En_Dnp")
+/* 0x1FD */ DEFINE_ACTOR(En_Dai, ACTOR_EN_DAI, ALLOCTYPE_NORMAL, "En_Dai")
+/* 0x1FE */ DEFINE_ACTOR(Bg_Goron_Oyu, ACTOR_BG_GORON_OYU, ALLOCTYPE_NORMAL, "Bg_Goron_Oyu")
+/* 0x1FF */ DEFINE_ACTOR(En_Kgy, ACTOR_EN_KGY, ALLOCTYPE_NORMAL, "En_Kgy")
+/* 0x200 */ DEFINE_ACTOR(En_Invadepoh, ACTOR_EN_INVADEPOH, ALLOCTYPE_NORMAL, "En_Invadepoh")
+/* 0x201 */ DEFINE_ACTOR(En_Gk, ACTOR_EN_GK, ALLOCTYPE_NORMAL, "En_Gk")
+/* 0x202 */ DEFINE_ACTOR(En_An, ACTOR_EN_AN, ALLOCTYPE_NORMAL, "En_An")
+/* 0x203 */ DEFINE_ACTOR_UNSET(ACTOR_UNSET_203)
+/* 0x204 */ DEFINE_ACTOR(En_Bee, ACTOR_EN_BEE, ALLOCTYPE_NORMAL, "En_Bee")
+/* 0x205 */ DEFINE_ACTOR(En_Ot, ACTOR_EN_OT, ALLOCTYPE_NORMAL, "En_Ot")
+/* 0x206 */ DEFINE_ACTOR(En_Dragon, ACTOR_EN_DRAGON, ALLOCTYPE_NORMAL, "En_Dragon")
+/* 0x207 */ DEFINE_ACTOR(Obj_Dora, ACTOR_OBJ_DORA, ALLOCTYPE_NORMAL, "Obj_Dora")
+/* 0x208 */ DEFINE_ACTOR(En_Bigpo, ACTOR_EN_BIGPO, ALLOCTYPE_NORMAL, "En_Bigpo")
+/* 0x209 */ DEFINE_ACTOR(Obj_Kendo_Kanban, ACTOR_OBJ_KENDO_KANBAN, ALLOCTYPE_NORMAL, "Obj_Kendo_Kanban")
+/* 0x20A */ DEFINE_ACTOR(Obj_Hariko, ACTOR_OBJ_HARIKO, ALLOCTYPE_NORMAL, "Obj_Hariko")
+/* 0x20B */ DEFINE_ACTOR(En_Sth, ACTOR_EN_STH, ALLOCTYPE_NORMAL, "En_Sth")
+/* 0x20C */ DEFINE_ACTOR(Bg_Sinkai_Kabe, ACTOR_BG_SINKAI_KABE, ALLOCTYPE_NORMAL, "Bg_Sinkai_Kabe")
+/* 0x20D */ DEFINE_ACTOR(Bg_Haka_Curtain, ACTOR_BG_HAKA_CURTAIN, ALLOCTYPE_NORMAL, "Bg_Haka_Curtain")
+/* 0x20E */ DEFINE_ACTOR(Bg_Kin2_Bombwall, ACTOR_BG_KIN2_BOMBWALL, ALLOCTYPE_NORMAL, "Bg_Kin2_Bombwall")
+/* 0x20F */ DEFINE_ACTOR(Bg_Kin2_Fence, ACTOR_BG_KIN2_FENCE, ALLOCTYPE_NORMAL, "Bg_Kin2_Fence")
+/* 0x210 */ DEFINE_ACTOR(Bg_Kin2_Picture, ACTOR_BG_KIN2_PICTURE, ALLOCTYPE_NORMAL, "Bg_Kin2_Picture")
+/* 0x211 */ DEFINE_ACTOR(Bg_Kin2_Shelf, ACTOR_BG_KIN2_SHELF, ALLOCTYPE_NORMAL, "Bg_Kin2_Shelf")
+/* 0x212 */ DEFINE_ACTOR(En_Rail_Skb, ACTOR_EN_RAIL_SKB, ALLOCTYPE_NORMAL, "En_Rail_Skb")
+/* 0x213 */ DEFINE_ACTOR(En_Jg, ACTOR_EN_JG, ALLOCTYPE_NORMAL, "En_Jg")
+/* 0x214 */ DEFINE_ACTOR(En_Tru_Mt, ACTOR_EN_TRU_MT, ALLOCTYPE_NORMAL, "En_Tru_Mt")
+/* 0x215 */ DEFINE_ACTOR(Obj_Um, ACTOR_OBJ_UM, ALLOCTYPE_NORMAL, "Obj_Um")
+/* 0x216 */ DEFINE_ACTOR(En_Neo_Reeba, ACTOR_EN_NEO_REEBA, ALLOCTYPE_NORMAL, "En_Neo_Reeba")
+/* 0x217 */ DEFINE_ACTOR(Bg_Mbar_Chair, ACTOR_BG_MBAR_CHAIR, ALLOCTYPE_NORMAL, "Bg_Mbar_Chair")
+/* 0x218 */ DEFINE_ACTOR(Bg_Ikana_Block, ACTOR_BG_IKANA_BLOCK, ALLOCTYPE_NORMAL, "Bg_Ikana_Block")
+/* 0x219 */ DEFINE_ACTOR(Bg_Ikana_Mirror, ACTOR_BG_IKANA_MIRROR, ALLOCTYPE_NORMAL, "Bg_Ikana_Mirror")
+/* 0x21A */ DEFINE_ACTOR(Bg_Ikana_Rotaryroom, ACTOR_BG_IKANA_ROTARYROOM, ALLOCTYPE_NORMAL, "Bg_Ikana_Rotaryroom")
+/* 0x21B */ DEFINE_ACTOR(Bg_Dblue_Balance, ACTOR_BG_DBLUE_BALANCE, ALLOCTYPE_NORMAL, "Bg_Dblue_Balance")
+/* 0x21C */ DEFINE_ACTOR(Bg_Dblue_Waterfall, ACTOR_BG_DBLUE_WATERFALL, ALLOCTYPE_NORMAL, "Bg_Dblue_Waterfall")
+/* 0x21D */ DEFINE_ACTOR(En_Kaizoku, ACTOR_EN_KAIZOKU, ALLOCTYPE_NORMAL, "En_Kaizoku")
+/* 0x21E */ DEFINE_ACTOR(En_Ge2, ACTOR_EN_GE2, ALLOCTYPE_NORMAL, "En_Ge2")
+/* 0x21F */ DEFINE_ACTOR(En_Ma_Yts, ACTOR_EN_MA_YTS, ALLOCTYPE_NORMAL, "En_Ma_Yts")
+/* 0x220 */ DEFINE_ACTOR(En_Ma_Yto, ACTOR_EN_MA_YTO, ALLOCTYPE_NORMAL, "En_Ma_Yto")
+/* 0x221 */ DEFINE_ACTOR(Obj_Tokei_Turret, ACTOR_OBJ_TOKEI_TURRET, ALLOCTYPE_NORMAL, "Obj_Tokei_Turret")
+/* 0x222 */ DEFINE_ACTOR(Bg_Dblue_Elevator, ACTOR_BG_DBLUE_ELEVATOR, ALLOCTYPE_NORMAL, "Bg_Dblue_Elevator")
+/* 0x223 */ DEFINE_ACTOR(Obj_Warpstone, ACTOR_OBJ_WARPSTONE, ALLOCTYPE_NORMAL, "Obj_Warpstone")
+/* 0x224 */ DEFINE_ACTOR(En_Zog, ACTOR_EN_ZOG, ALLOCTYPE_NORMAL, "En_Zog")
+/* 0x225 */ DEFINE_ACTOR(Obj_Rotlift, ACTOR_OBJ_ROTLIFT, ALLOCTYPE_NORMAL, "Obj_Rotlift")
+/* 0x226 */ DEFINE_ACTOR(Obj_Jg_Gakki, ACTOR_OBJ_JG_GAKKI, ALLOCTYPE_NORMAL, "Obj_Jg_Gakki")
+/* 0x227 */ DEFINE_ACTOR(Bg_Inibs_Movebg, ACTOR_BG_INIBS_MOVEBG, ALLOCTYPE_NORMAL, "Bg_Inibs_Movebg")
+/* 0x228 */ DEFINE_ACTOR(En_Zot, ACTOR_EN_ZOT, ALLOCTYPE_NORMAL, "En_Zot")
+/* 0x229 */ DEFINE_ACTOR(Obj_Tree, ACTOR_OBJ_TREE, ALLOCTYPE_NORMAL, "Obj_Tree")
+/* 0x22A */ DEFINE_ACTOR(Obj_Y2lift, ACTOR_OBJ_Y2LIFT, ALLOCTYPE_NORMAL, "Obj_Y2lift")
+/* 0x22B */ DEFINE_ACTOR(Obj_Y2shutter, ACTOR_OBJ_Y2SHUTTER, ALLOCTYPE_NORMAL, "Obj_Y2shutter")
+/* 0x22C */ DEFINE_ACTOR(Obj_Boat, ACTOR_OBJ_BOAT, ALLOCTYPE_NORMAL, "Obj_Boat")
+/* 0x22D */ DEFINE_ACTOR(Obj_Taru, ACTOR_OBJ_TARU, ALLOCTYPE_NORMAL, "Obj_Taru")
+/* 0x22E */ DEFINE_ACTOR(Obj_Hunsui, ACTOR_OBJ_HUNSUI, ALLOCTYPE_NORMAL, "Obj_Hunsui")
+/* 0x22F */ DEFINE_ACTOR(En_Jc_Mato, ACTOR_EN_JC_MATO, ALLOCTYPE_NORMAL, "En_Jc_Mato")
+/* 0x230 */ DEFINE_ACTOR(Mir_Ray3, ACTOR_MIR_RAY3, ALLOCTYPE_NORMAL, "Mir_Ray3")
+/* 0x231 */ DEFINE_ACTOR(En_Zob, ACTOR_EN_ZOB, ALLOCTYPE_NORMAL, "En_Zob")
+/* 0x232 */ DEFINE_ACTOR(Elf_Msg6, ACTOR_ELF_MSG6, ALLOCTYPE_NORMAL, "Elf_Msg6")
+/* 0x233 */ DEFINE_ACTOR(Obj_Nozoki, ACTOR_OBJ_NOZOKI, ALLOCTYPE_NORMAL, "Obj_Nozoki")
+/* 0x234 */ DEFINE_ACTOR(En_Toto, ACTOR_EN_TOTO, ALLOCTYPE_NORMAL, "En_Toto")
+/* 0x235 */ DEFINE_ACTOR(En_Railgibud, ACTOR_EN_RAILGIBUD, ALLOCTYPE_NORMAL, "En_Railgibud")
+/* 0x236 */ DEFINE_ACTOR(En_Baba, ACTOR_EN_BABA, ALLOCTYPE_NORMAL, "En_Baba")
+/* 0x237 */ DEFINE_ACTOR(En_Suttari, ACTOR_EN_SUTTARI, ALLOCTYPE_NORMAL, "En_Suttari")
+/* 0x238 */ DEFINE_ACTOR(En_Zod, ACTOR_EN_ZOD, ALLOCTYPE_NORMAL, "En_Zod")
+/* 0x239 */ DEFINE_ACTOR(En_Kujiya, ACTOR_EN_KUJIYA, ALLOCTYPE_NORMAL, "En_Kujiya")
+/* 0x23A */ DEFINE_ACTOR(En_Geg, ACTOR_EN_GEG, ALLOCTYPE_NORMAL, "En_Geg")
+/* 0x23B */ DEFINE_ACTOR(Obj_Kinoko, ACTOR_OBJ_KINOKO, ALLOCTYPE_NORMAL, "Obj_Kinoko")
+/* 0x23C */ DEFINE_ACTOR(Obj_Yasi, ACTOR_OBJ_YASI, ALLOCTYPE_NORMAL, "Obj_Yasi")
+/* 0x23D */ DEFINE_ACTOR(En_Tanron1, ACTOR_EN_TANRON1, ALLOCTYPE_NORMAL, "En_Tanron1")
+/* 0x23E */ DEFINE_ACTOR(En_Tanron2, ACTOR_EN_TANRON2, ALLOCTYPE_NORMAL, "En_Tanron2")
+/* 0x23F */ DEFINE_ACTOR(En_Tanron3, ACTOR_EN_TANRON3, ALLOCTYPE_NORMAL, "En_Tanron3")
+/* 0x240 */ DEFINE_ACTOR(Obj_Chan, ACTOR_OBJ_CHAN, ALLOCTYPE_NORMAL, "Obj_Chan")
+/* 0x241 */ DEFINE_ACTOR(En_Zos, ACTOR_EN_ZOS, ALLOCTYPE_NORMAL, "En_Zos")
+/* 0x242 */ DEFINE_ACTOR(En_S_Goro, ACTOR_EN_S_GORO, ALLOCTYPE_NORMAL, "En_S_Goro")
+/* 0x243 */ DEFINE_ACTOR(En_Nb, ACTOR_EN_NB, ALLOCTYPE_NORMAL, "En_Nb")
+/* 0x244 */ DEFINE_ACTOR(En_Ja, ACTOR_EN_JA, ALLOCTYPE_NORMAL, "En_Ja")
+/* 0x245 */ DEFINE_ACTOR(Bg_F40_Block, ACTOR_BG_F40_BLOCK, ALLOCTYPE_NORMAL, "Bg_F40_Block")
+/* 0x246 */ DEFINE_ACTOR(Bg_F40_Switch, ACTOR_BG_F40_SWITCH, ALLOCTYPE_NORMAL, "Bg_F40_Switch")
+/* 0x247 */ DEFINE_ACTOR(En_Po_Composer, ACTOR_EN_PO_COMPOSER, ALLOCTYPE_NORMAL, "En_Po_Composer")
+/* 0x248 */ DEFINE_ACTOR(En_Guruguru, ACTOR_EN_GURUGURU, ALLOCTYPE_NORMAL, "En_Guruguru")
+/* 0x249 */ DEFINE_ACTOR(Oceff_Wipe5, ACTOR_OCEFF_WIPE5, ALLOCTYPE_ABSOLUTE, "Oceff_Wipe5")
+/* 0x24A */ DEFINE_ACTOR(En_Stone_heishi, ACTOR_EN_STONE_HEISHI, ALLOCTYPE_NORMAL, "En_Stone_heishi")
+/* 0x24B */ DEFINE_ACTOR(Oceff_Wipe6, ACTOR_OCEFF_WIPE6, ALLOCTYPE_ABSOLUTE, "Oceff_Wipe6")
+/* 0x24C */ DEFINE_ACTOR(En_Scopenuts, ACTOR_EN_SCOPENUTS, ALLOCTYPE_NORMAL, "En_Scopenuts")
+/* 0x24D */ DEFINE_ACTOR(En_Scopecrow, ACTOR_EN_SCOPECROW, ALLOCTYPE_NORMAL, "En_Scopecrow")
+/* 0x24E */ DEFINE_ACTOR(Oceff_Wipe7, ACTOR_OCEFF_WIPE7, ALLOCTYPE_ABSOLUTE, "Oceff_Wipe7")
+/* 0x24F */ DEFINE_ACTOR(Eff_Kamejima_Wave, ACTOR_EFF_KAMEJIMA_WAVE, ALLOCTYPE_NORMAL, "Eff_Kamejima_Wave")
+/* 0x250 */ DEFINE_ACTOR(En_Hg, ACTOR_EN_HG, ALLOCTYPE_NORMAL, "En_Hg")
+/* 0x251 */ DEFINE_ACTOR(En_Hgo, ACTOR_EN_HGO, ALLOCTYPE_NORMAL, "En_Hgo")
+/* 0x252 */ DEFINE_ACTOR(En_Zov, ACTOR_EN_ZOV, ALLOCTYPE_NORMAL, "En_Zov")
+/* 0x253 */ DEFINE_ACTOR(En_Ah, ACTOR_EN_AH, ALLOCTYPE_NORMAL, "En_Ah")
+/* 0x254 */ DEFINE_ACTOR(Obj_Hgdoor, ACTOR_OBJ_HGDOOR, ALLOCTYPE_NORMAL, "Obj_Hgdoor")
+/* 0x255 */ DEFINE_ACTOR(Bg_Ikana_Bombwall, ACTOR_BG_IKANA_BOMBWALL, ALLOCTYPE_NORMAL, "Bg_Ikana_Bombwall")
+/* 0x256 */ DEFINE_ACTOR(Bg_Ikana_Ray, ACTOR_BG_IKANA_RAY, ALLOCTYPE_NORMAL, "Bg_Ikana_Ray")
+/* 0x257 */ DEFINE_ACTOR(Bg_Ikana_Shutter, ACTOR_BG_IKANA_SHUTTER, ALLOCTYPE_NORMAL, "Bg_Ikana_Shutter")
+/* 0x258 */ DEFINE_ACTOR(Bg_Haka_Bombwall, ACTOR_BG_HAKA_BOMBWALL, ALLOCTYPE_NORMAL, "Bg_Haka_Bombwall")
+/* 0x259 */ DEFINE_ACTOR(Bg_Haka_Tomb, ACTOR_BG_HAKA_TOMB, ALLOCTYPE_NORMAL, "Bg_Haka_Tomb")
+/* 0x25A */ DEFINE_ACTOR(En_Sc_Ruppe, ACTOR_EN_SC_RUPPE, ALLOCTYPE_NORMAL, "En_Sc_Ruppe")
+/* 0x25B */ DEFINE_ACTOR(Bg_Iknv_Doukutu, ACTOR_BG_IKNV_DOUKUTU, ALLOCTYPE_NORMAL, "Bg_Iknv_Doukutu")
+/* 0x25C */ DEFINE_ACTOR(Bg_Iknv_Obj, ACTOR_BG_IKNV_OBJ, ALLOCTYPE_NORMAL, "Bg_Iknv_Obj")
+/* 0x25D */ DEFINE_ACTOR(En_Pamera, ACTOR_EN_PAMERA, ALLOCTYPE_NORMAL, "En_Pamera")
+/* 0x25E */ DEFINE_ACTOR(Obj_HsStump, ACTOR_OBJ_HSSTUMP, ALLOCTYPE_NORMAL, "Obj_HsStump")
+/* 0x25F */ DEFINE_ACTOR(En_Hidden_Nuts, ACTOR_EN_HIDDEN_NUTS, ALLOCTYPE_NORMAL, "En_Hidden_Nuts")
+/* 0x260 */ DEFINE_ACTOR(En_Zow, ACTOR_EN_ZOW, ALLOCTYPE_NORMAL, "En_Zow")
+/* 0x261 */ DEFINE_ACTOR(En_Talk, ACTOR_EN_TALK, ALLOCTYPE_NORMAL, "En_Talk")
+/* 0x262 */ DEFINE_ACTOR(En_Al, ACTOR_EN_AL, ALLOCTYPE_NORMAL, "En_Al")
+/* 0x263 */ DEFINE_ACTOR(En_Tab, ACTOR_EN_TAB, ALLOCTYPE_NORMAL, "En_Tab")
+/* 0x264 */ DEFINE_ACTOR(En_Nimotsu, ACTOR_EN_NIMOTSU, ALLOCTYPE_NORMAL, "En_Nimotsu")
+/* 0x265 */ DEFINE_ACTOR(En_Hit_Tag, ACTOR_EN_HIT_TAG, ALLOCTYPE_NORMAL, "En_Hit_Tag")
+/* 0x266 */ DEFINE_ACTOR(En_Ruppecrow, ACTOR_EN_RUPPECROW, ALLOCTYPE_NORMAL, "En_Ruppecrow")
+/* 0x267 */ DEFINE_ACTOR(En_Tanron4, ACTOR_EN_TANRON4, ALLOCTYPE_NORMAL, "En_Tanron4")
+/* 0x268 */ DEFINE_ACTOR(En_Tanron5, ACTOR_EN_TANRON5, ALLOCTYPE_NORMAL, "En_Tanron5")
+/* 0x269 */ DEFINE_ACTOR(En_Tanron6, ACTOR_EN_TANRON6, ALLOCTYPE_NORMAL, "En_Tanron6")
+/* 0x26A */ DEFINE_ACTOR(En_Daiku2, ACTOR_EN_DAIKU2, ALLOCTYPE_NORMAL, "En_Daiku2")
+/* 0x26B */ DEFINE_ACTOR(En_Muto, ACTOR_EN_MUTO, ALLOCTYPE_NORMAL, "En_Muto")
+/* 0x26C */ DEFINE_ACTOR(En_Baisen, ACTOR_EN_BAISEN, ALLOCTYPE_NORMAL, "En_Baisen")
+/* 0x26D */ DEFINE_ACTOR(En_Heishi, ACTOR_EN_HEISHI, ALLOCTYPE_NORMAL, "En_Heishi")
+/* 0x26E */ DEFINE_ACTOR(En_Demo_heishi, ACTOR_EN_DEMO_HEISHI, ALLOCTYPE_NORMAL, "En_Demo_heishi")
+/* 0x26F */ DEFINE_ACTOR(En_Dt, ACTOR_EN_DT, ALLOCTYPE_NORMAL, "En_Dt")
+/* 0x270 */ DEFINE_ACTOR(En_Cha, ACTOR_EN_CHA, ALLOCTYPE_NORMAL, "En_Cha")
+/* 0x271 */ DEFINE_ACTOR(Obj_Dinner, ACTOR_OBJ_DINNER, ALLOCTYPE_NORMAL, "Obj_Dinner")
+/* 0x272 */ DEFINE_ACTOR(Eff_Lastday, ACTOR_EFF_LASTDAY, ALLOCTYPE_NORMAL, "Eff_Lastday")
+/* 0x273 */ DEFINE_ACTOR(Bg_Ikana_Dharma, ACTOR_BG_IKANA_DHARMA, ALLOCTYPE_NORMAL, "Bg_Ikana_Dharma")
+/* 0x274 */ DEFINE_ACTOR(En_Akindonuts, ACTOR_EN_AKINDONUTS, ALLOCTYPE_NORMAL, "En_Akindonuts")
+/* 0x275 */ DEFINE_ACTOR(Eff_Stk, ACTOR_EFF_STK, ALLOCTYPE_NORMAL, "Eff_Stk")
+/* 0x276 */ DEFINE_ACTOR(En_Ig, ACTOR_EN_IG, ALLOCTYPE_NORMAL, "En_Ig")
+/* 0x277 */ DEFINE_ACTOR(En_Rg, ACTOR_EN_RG, ALLOCTYPE_NORMAL, "En_Rg")
+/* 0x278 */ DEFINE_ACTOR(En_Osk, ACTOR_EN_OSK, ALLOCTYPE_NORMAL, "En_Osk")
+/* 0x279 */ DEFINE_ACTOR(En_Sth2, ACTOR_EN_STH2, ALLOCTYPE_NORMAL, "En_Sth2")
+/* 0x27A */ DEFINE_ACTOR(En_Yb, ACTOR_EN_YB, ALLOCTYPE_NORMAL, "En_Yb")
+/* 0x27B */ DEFINE_ACTOR(En_Rz, ACTOR_EN_RZ, ALLOCTYPE_NORMAL, "En_Rz")
+/* 0x27C */ DEFINE_ACTOR(En_Scopecoin, ACTOR_EN_SCOPECOIN, ALLOCTYPE_NORMAL, "En_Scopecoin")
+/* 0x27D */ DEFINE_ACTOR(En_Bjt, ACTOR_EN_BJT, ALLOCTYPE_NORMAL, "En_Bjt")
+/* 0x27E */ DEFINE_ACTOR(En_Bomjima, ACTOR_EN_BOMJIMA, ALLOCTYPE_NORMAL, "En_Bomjima")
+/* 0x27F */ DEFINE_ACTOR(En_Bomjimb, ACTOR_EN_BOMJIMB, ALLOCTYPE_NORMAL, "En_Bomjimb")
+/* 0x280 */ DEFINE_ACTOR(En_Bombers, ACTOR_EN_BOMBERS, ALLOCTYPE_NORMAL, "En_Bombers")
+/* 0x281 */ DEFINE_ACTOR(En_Bombers2, ACTOR_EN_BOMBERS2, ALLOCTYPE_NORMAL, "En_Bombers2")
+/* 0x282 */ DEFINE_ACTOR(En_Bombal, ACTOR_EN_BOMBAL, ALLOCTYPE_NORMAL, "En_Bombal")
+/* 0x283 */ DEFINE_ACTOR(Obj_Moon_Stone, ACTOR_OBJ_MOON_STONE, ALLOCTYPE_NORMAL, "Obj_Moon_Stone")
+/* 0x284 */ DEFINE_ACTOR(Obj_Mu_Pict, ACTOR_OBJ_MU_PICT, ALLOCTYPE_NORMAL, "Obj_Mu_Pict")
+/* 0x285 */ DEFINE_ACTOR(Bg_Ikninside, ACTOR_BG_IKNINSIDE, ALLOCTYPE_NORMAL, "Bg_Ikninside")
+/* 0x286 */ DEFINE_ACTOR(Eff_Zoraband, ACTOR_EFF_ZORABAND, ALLOCTYPE_NORMAL, "Eff_Zoraband")
+/* 0x287 */ DEFINE_ACTOR(Obj_Kepn_Koya, ACTOR_OBJ_KEPN_KOYA, ALLOCTYPE_NORMAL, "Obj_Kepn_Koya")
+/* 0x288 */ DEFINE_ACTOR(Obj_Usiyane, ACTOR_OBJ_USIYANE, ALLOCTYPE_NORMAL, "Obj_Usiyane")
+/* 0x289 */ DEFINE_ACTOR(En_Nnh, ACTOR_EN_NNH, ALLOCTYPE_NORMAL, "En_Nnh")
+/* 0x28A */ DEFINE_ACTOR(Obj_Kzsaku, ACTOR_OBJ_KZSAKU, ALLOCTYPE_NORMAL, "Obj_Kzsaku")
+/* 0x28B */ DEFINE_ACTOR(Obj_Milk_Bin, ACTOR_OBJ_MILK_BIN, ALLOCTYPE_NORMAL, "Obj_Milk_Bin")
+/* 0x28C */ DEFINE_ACTOR(En_Kitan, ACTOR_EN_KITAN, ALLOCTYPE_NORMAL, "En_Kitan")
+/* 0x28D */ DEFINE_ACTOR(Bg_Astr_Bombwall, ACTOR_BG_ASTR_BOMBWALL, ALLOCTYPE_NORMAL, "Bg_Astr_Bombwall")
+/* 0x28E */ DEFINE_ACTOR(Bg_Iknin_Susceil, ACTOR_BG_IKNIN_SUSCEIL, ALLOCTYPE_NORMAL, "Bg_Iknin_Susceil")
+/* 0x28F */ DEFINE_ACTOR(En_Bsb, ACTOR_EN_BSB, ALLOCTYPE_NORMAL, "En_Bsb")
+/* 0x290 */ DEFINE_ACTOR(En_Recepgirl, ACTOR_EN_RECEPGIRL, ALLOCTYPE_NORMAL, "En_Recepgirl")
+/* 0x291 */ DEFINE_ACTOR(En_Thiefbird, ACTOR_EN_THIEFBIRD, ALLOCTYPE_NORMAL, "En_Thiefbird")
+/* 0x292 */ DEFINE_ACTOR(En_Jgame_Tsn, ACTOR_EN_JGAME_TSN, ALLOCTYPE_NORMAL, "En_Jgame_Tsn")
+/* 0x293 */ DEFINE_ACTOR(Obj_Jgame_Light, ACTOR_OBJ_JGAME_LIGHT, ALLOCTYPE_NORMAL, "Obj_Jgame_Light")
+/* 0x294 */ DEFINE_ACTOR(Obj_Yado, ACTOR_OBJ_YADO, ALLOCTYPE_NORMAL, "Obj_Yado")
+/* 0x295 */ DEFINE_ACTOR(Demo_Syoten, ACTOR_DEMO_SYOTEN, ALLOCTYPE_NORMAL, "Demo_Syoten")
+/* 0x296 */ DEFINE_ACTOR(Demo_Moonend, ACTOR_DEMO_MOONEND, ALLOCTYPE_NORMAL, "Demo_Moonend")
+/* 0x297 */ DEFINE_ACTOR(Bg_Lbfshot, ACTOR_BG_LBFSHOT, ALLOCTYPE_NORMAL, "Bg_Lbfshot")
+/* 0x298 */ DEFINE_ACTOR(Bg_Last_Bwall, ACTOR_BG_LAST_BWALL, ALLOCTYPE_NORMAL, "Bg_Last_Bwall")
+/* 0x299 */ DEFINE_ACTOR(En_And, ACTOR_EN_AND, ALLOCTYPE_NORMAL, "En_And")
+/* 0x29A */ DEFINE_ACTOR(En_Invadepoh_Demo, ACTOR_EN_INVADEPOH_DEMO, ALLOCTYPE_NORMAL, "En_Invadepoh_Demo")
+/* 0x29B */ DEFINE_ACTOR(Obj_Danpeilift, ACTOR_OBJ_DANPEILIFT, ALLOCTYPE_NORMAL, "Obj_Danpeilift")
+/* 0x29C */ DEFINE_ACTOR(En_Fall2, ACTOR_EN_FALL2, ALLOCTYPE_NORMAL, "En_Fall2")
+/* 0x29D */ DEFINE_ACTOR(Dm_Al, ACTOR_DM_AL, ALLOCTYPE_NORMAL, "Dm_Al")
+/* 0x29E */ DEFINE_ACTOR(Dm_An, ACTOR_DM_AN, ALLOCTYPE_NORMAL, "Dm_An")
+/* 0x29F */ DEFINE_ACTOR(Dm_Ah, ACTOR_DM_AH, ALLOCTYPE_NORMAL, "Dm_Ah")
+/* 0x2A0 */ DEFINE_ACTOR(Dm_Nb, ACTOR_DM_NB, ALLOCTYPE_NORMAL, "Dm_Nb")
+/* 0x2A1 */ DEFINE_ACTOR(En_Drs, ACTOR_EN_DRS, ALLOCTYPE_NORMAL, "En_Drs")
+/* 0x2A2 */ DEFINE_ACTOR(En_Ending_Hero, ACTOR_EN_ENDING_HERO, ALLOCTYPE_NORMAL, "En_Ending_Hero")
+/* 0x2A3 */ DEFINE_ACTOR(Dm_Bal, ACTOR_DM_BAL, ALLOCTYPE_NORMAL, "Dm_Bal")
+/* 0x2A4 */ DEFINE_ACTOR(En_Paper, ACTOR_EN_PAPER, ALLOCTYPE_NORMAL, "En_Paper")
+/* 0x2A5 */ DEFINE_ACTOR(En_Hint_Skb, ACTOR_EN_HINT_SKB, ALLOCTYPE_NORMAL, "En_Hint_Skb")
+/* 0x2A6 */ DEFINE_ACTOR(Dm_Tag, ACTOR_DM_TAG, ALLOCTYPE_NORMAL, "Dm_Tag")
+/* 0x2A7 */ DEFINE_ACTOR(En_Bh, ACTOR_EN_BH, ALLOCTYPE_NORMAL, "En_Bh")
+/* 0x2A8 */ DEFINE_ACTOR(En_Ending_Hero2, ACTOR_EN_ENDING_HERO2, ALLOCTYPE_NORMAL, "En_Ending_Hero2")
+/* 0x2A9 */ DEFINE_ACTOR(En_Ending_Hero3, ACTOR_EN_ENDING_HERO3, ALLOCTYPE_NORMAL, "En_Ending_Hero3")
+/* 0x2AA */ DEFINE_ACTOR(En_Ending_Hero4, ACTOR_EN_ENDING_HERO4, ALLOCTYPE_NORMAL, "En_Ending_Hero4")
+/* 0x2AB */ DEFINE_ACTOR(En_Ending_Hero5, ACTOR_EN_ENDING_HERO5, ALLOCTYPE_NORMAL, "En_Ending_Hero5")
+/* 0x2AC */ DEFINE_ACTOR(En_Ending_Hero6, ACTOR_EN_ENDING_HERO6, ALLOCTYPE_NORMAL, "En_Ending_Hero6")
+/* 0x2AD */ DEFINE_ACTOR(Dm_Gm, ACTOR_DM_GM, ALLOCTYPE_NORMAL, "Dm_Gm")
+/* 0x2AE */ DEFINE_ACTOR(Obj_Swprize, ACTOR_OBJ_SWPRIZE, ALLOCTYPE_NORMAL, "Obj_Swprize")
+/* 0x2AF */ DEFINE_ACTOR(En_Invisible_Ruppe, ACTOR_EN_INVISIBLE_RUPPE, ALLOCTYPE_NORMAL, "En_Invisible_Ruppe")
+/* 0x2B0 */ DEFINE_ACTOR(Obj_Ending, ACTOR_OBJ_ENDING, ALLOCTYPE_NORMAL, "Obj_Ending")
+/* 0x2B1 */ DEFINE_ACTOR(En_Rsn, ACTOR_EN_RSN, ALLOCTYPE_NORMAL, "En_Rsn")
diff --git a/include/tables/effect_ss_table.h b/include/tables/effect_ss_table.h
new file mode 100644
index 000000000..c51847995
--- /dev/null
+++ b/include/tables/effect_ss_table.h
@@ -0,0 +1,48 @@
+/**
+ * Effect Soft Sprite Table
+ *
+ * DEFINE_EFFECT_SS should be used for normal effects soft sprites
+ * - Argument 0: Name of the effect (without the ovl_ part)
+ * - Argument 1: Enum value for this effect
+ *
+ * DEFINE_EFFECT_SS_UNSET is needed to define empty entries from the original game
+ */
+/* 0x00 */ DEFINE_EFFECT_SS(Effect_Ss_Dust, EFFECT_SS_DUST)
+/* 0x01 */ DEFINE_EFFECT_SS(Effect_Ss_Kirakira, EFFECT_SS_KIRAKIRA)
+/* 0x02 */ DEFINE_EFFECT_SS_UNSET(EFFECT_SS_UNSET_02)
+/* 0x03 */ DEFINE_EFFECT_SS(Effect_Ss_Bomb2, EFFECT_SS_BOMB2)
+/* 0x04 */ DEFINE_EFFECT_SS(Effect_Ss_Blast, EFFECT_SS_BLAST)
+/* 0x05 */ DEFINE_EFFECT_SS(Effect_Ss_G_Spk, EFFECT_SS_G_SPK)
+/* 0x06 */ DEFINE_EFFECT_SS(Effect_Ss_D_Fire, EFFECT_SS_D_FIRE)
+/* 0x07 */ DEFINE_EFFECT_SS(Effect_Ss_Bubble, EFFECT_SS_BUBBLE)
+/* 0x08 */ DEFINE_EFFECT_SS_UNSET(EFFECT_SS_UNSET_08)
+/* 0x09 */ DEFINE_EFFECT_SS(Effect_Ss_G_Ripple, EFFECT_SS_G_RIPPLE)
+/* 0x0A */ DEFINE_EFFECT_SS(Effect_Ss_G_Splash, EFFECT_SS_G_SPLASH)
+/* 0x0B */ DEFINE_EFFECT_SS_UNSET(EFFECT_SS_UNSET_0B)
+/* 0x0C */ DEFINE_EFFECT_SS(Effect_Ss_G_Fire, EFFECT_SS_G_FIRE)
+/* 0x0D */ DEFINE_EFFECT_SS(Effect_Ss_Lightning, EFFECT_SS_LIGHTNING)
+/* 0x0E */ DEFINE_EFFECT_SS(Effect_Ss_Dt_Bubble, EFFECT_SS_DT_BUBBLE)
+/* 0x0F */ DEFINE_EFFECT_SS(Effect_Ss_Hahen, EFFECT_SS_HAHEN)
+/* 0x10 */ DEFINE_EFFECT_SS(Effect_Ss_Stick, EFFECT_SS_STICK)
+/* 0x11 */ DEFINE_EFFECT_SS(Effect_Ss_Sibuki, EFFECT_SS_SIBUKI)
+/* 0x12 */ DEFINE_EFFECT_SS_UNSET(EFFECT_SS_UNSET_12)
+/* 0x13 */ DEFINE_EFFECT_SS_UNSET(EFFECT_SS_UNSET_13)
+/* 0x14 */ DEFINE_EFFECT_SS(Effect_Ss_Stone1, EFFECT_SS_STONE1)
+/* 0x15 */ DEFINE_EFFECT_SS(Effect_Ss_Hitmark, EFFECT_SS_HITMARK)
+/* 0x16 */ DEFINE_EFFECT_SS(Effect_Ss_Fhg_Flash, EFFECT_SS_FHG_FLASH)
+/* 0x17 */ DEFINE_EFFECT_SS(Effect_Ss_K_Fire, EFFECT_SS_K_FIRE)
+/* 0x18 */ DEFINE_EFFECT_SS(Effect_Ss_Solder_Srch_Ball, EFFECT_SS_SOLDER_SRCH_BALL)
+/* 0x19 */ DEFINE_EFFECT_SS(Effect_Ss_Kakera, EFFECT_SS_KAKERA)
+/* 0x1A */ DEFINE_EFFECT_SS(Effect_Ss_Ice_Piece, EFFECT_SS_ICE_PIECE)
+/* 0x1B */ DEFINE_EFFECT_SS(Effect_Ss_En_Ice, EFFECT_SS_EN_ICE)
+/* 0x1C */ DEFINE_EFFECT_SS(Effect_Ss_Fire_Tail, EFFECT_SS_FIRE_TAIL)
+/* 0x1D */ DEFINE_EFFECT_SS(Effect_Ss_En_Fire, EFFECT_SS_EN_FIRE)
+/* 0x1E */ DEFINE_EFFECT_SS(Effect_Ss_Extra, EFFECT_SS_EXTRA)
+/* 0x1F */ DEFINE_EFFECT_SS_UNSET(EFFECT_SS_UNSET_1F)
+/* 0x20 */ DEFINE_EFFECT_SS(Effect_Ss_Dead_Db, EFFECT_SS_DEAD_DB)
+/* 0x21 */ DEFINE_EFFECT_SS(Effect_Ss_Dead_Dd, EFFECT_SS_DEAD_DD)
+/* 0x22 */ DEFINE_EFFECT_SS(Effect_Ss_Dead_Ds, EFFECT_SS_DEAD_DS)
+/* 0x23 */ DEFINE_EFFECT_SS_UNSET(EFFECT_SS_UNSET_23)
+/* 0x24 */ DEFINE_EFFECT_SS(Effect_Ss_Ice_Smoke, EFFECT_SS_ICE_SMOKE)
+/* 0x25 */ DEFINE_EFFECT_SS(Effect_En_Ice_Block, EFFECT_EN_ICE_BLOCK)
+/* 0x26 */ DEFINE_EFFECT_SS(Effect_Ss_Sbn, EFFECT_SS_SBN)
diff --git a/include/tables/object_table.h b/include/tables/object_table.h
new file mode 100644
index 000000000..61175c118
--- /dev/null
+++ b/include/tables/object_table.h
@@ -0,0 +1,659 @@
+/**
+ * Object Table
+ *
+ * DEFINE_OBJECT should be used for normal objects
+ * - Argument 0: Name of the object segment in spec
+ * - Argument 1: Enum value for this object
+ *
+ * DEFINE_OBJECT_UNSET and DEFINE_OBJECT_SIZE_ZERO are needed to define empty entries from the original game
+ *
+ * DEFINE_OBJECT_UNSET is used to declare a placeholder enum value which maps to an entry with zeroes in `gObjectTable`
+ * - Argument 0: Enum value for this object
+ *
+ * DEFINE_OBJECT_SIZE_ZERO is used to declare a placeholder enum value which maps to a zero-size entry in `gObjectTable`, with no corresponding segment in the rom.
+ * - Argument 0: Name of the object segment in spec
+ * - Argument 1: Enum value for this object
+ */
+/* 0x000 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_0)
+/* 0x001 */ DEFINE_OBJECT(gameplay_keep, GAMEPLAY_KEEP)
+/* 0x002 */ DEFINE_OBJECT(gameplay_field_keep, GAMEPLAY_FIELD_KEEP)
+/* 0x003 */ DEFINE_OBJECT(gameplay_dangeon_keep, GAMEPLAY_DANGEON_KEEP)
+/* 0x004 */ DEFINE_OBJECT(object_nb, OBJECT_NB)
+/* 0x005 */ DEFINE_OBJECT(object_okuta, OBJECT_OKUTA)
+/* 0x006 */ DEFINE_OBJECT(object_crow, OBJECT_CROW)
+/* 0x007 */ DEFINE_OBJECT(object_ah, OBJECT_AH)
+/* 0x008 */ DEFINE_OBJECT(object_dy_obj, OBJECT_DY_OBJ)
+/* 0x009 */ DEFINE_OBJECT(object_wallmaster, OBJECT_WALLMASTER)
+/* 0x00A */ DEFINE_OBJECT(object_dodongo, OBJECT_DODONGO)
+/* 0x00B */ DEFINE_OBJECT(object_firefly, OBJECT_FIREFLY)
+/* 0x00C */ DEFINE_OBJECT(object_box, OBJECT_BOX)
+/* 0x00D */ DEFINE_OBJECT(object_al, OBJECT_AL)
+/* 0x00E */ DEFINE_OBJECT(object_bubble, OBJECT_BUBBLE)
+/* 0x00F */ DEFINE_OBJECT(object_niw, OBJECT_NIW)
+/* 0x010 */ DEFINE_OBJECT(object_link_boy, OBJECT_LINK_BOY)
+/* 0x011 */ DEFINE_OBJECT(object_link_child, OBJECT_LINK_CHILD)
+/* 0x012 */ DEFINE_OBJECT(object_tite, OBJECT_TITE)
+/* 0x013 */ DEFINE_OBJECT(object_tab, OBJECT_TAB)
+/* 0x014 */ DEFINE_OBJECT(object_ph, OBJECT_PH)
+/* 0x015 */ DEFINE_OBJECT(object_and, OBJECT_AND)
+/* 0x016 */ DEFINE_OBJECT(object_msmo, OBJECT_MSMO)
+/* 0x017 */ DEFINE_OBJECT(object_dinofos, OBJECT_DINOFOS)
+/* 0x018 */ DEFINE_OBJECT(object_drs, OBJECT_DRS)
+/* 0x019 */ DEFINE_OBJECT(object_zl1, OBJECT_ZL1)
+/* 0x01A */ DEFINE_OBJECT(object_an4, OBJECT_AN4)
+/* 0x01B */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_1B)
+/* 0x01C */ DEFINE_OBJECT(object_test3, OBJECT_TEST3)
+/* 0x01D */ DEFINE_OBJECT(object_famos, OBJECT_FAMOS)
+/* 0x01E */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_1E)
+/* 0x01F */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_1F)
+/* 0x020 */ DEFINE_OBJECT(object_st, OBJECT_ST)
+/* 0x021 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_21)
+/* 0x022 */ DEFINE_OBJECT(object_thiefbird, OBJECT_THIEFBIRD)
+/* 0x023 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_23)
+/* 0x024 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_24)
+/* 0x025 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_25)
+/* 0x026 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_26)
+/* 0x027 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_27)
+/* 0x028 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_28)
+/* 0x029 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_29)
+/* 0x02A */ DEFINE_OBJECT(object_bombf, OBJECT_BOMBF)
+/* 0x02B */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_2B)
+/* 0x02C */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_2C)
+/* 0x02D */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_2D)
+/* 0x02E */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_2E)
+/* 0x02F */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_2F)
+/* 0x030 */ DEFINE_OBJECT(object_am, OBJECT_AM)
+/* 0x031 */ DEFINE_OBJECT(object_dekubaba, OBJECT_DEKUBABA)
+/* 0x032 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_32)
+/* 0x033 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_33)
+/* 0x034 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_34)
+/* 0x035 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_35)
+/* 0x036 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_36)
+/* 0x037 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_37)
+/* 0x038 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_38)
+/* 0x039 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_39)
+/* 0x03A */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_3A)
+/* 0x03B */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_3B)
+/* 0x03C */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_3C)
+/* 0x03D */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_3D)
+/* 0x03E */ DEFINE_OBJECT(object_warp1, OBJECT_WARP1)
+/* 0x03F */ DEFINE_OBJECT(object_b_heart, OBJECT_B_HEART)
+/* 0x040 */ DEFINE_OBJECT(object_dekunuts, OBJECT_DEKUNUTS)
+/* 0x041 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_41)
+/* 0x042 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_42)
+/* 0x043 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_43)
+/* 0x044 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_44)
+/* 0x045 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_45)
+/* 0x046 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_46)
+/* 0x047 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_47)
+/* 0x048 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_48)
+/* 0x049 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_49)
+/* 0x04A */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_4A)
+/* 0x04B */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_4B)
+/* 0x04C */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_4C)
+/* 0x04D */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_4D)
+/* 0x04E */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_4E)
+/* 0x04F */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_4F)
+/* 0x050 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_50)
+/* 0x051 */ DEFINE_OBJECT(object_bb, OBJECT_BB)
+/* 0x052 */ DEFINE_OBJECT(object_death, OBJECT_DEATH)
+/* 0x053 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_53)
+/* 0x054 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_54)
+/* 0x055 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_55)
+/* 0x056 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_56)
+/* 0x057 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_57)
+/* 0x058 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_58)
+/* 0x059 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_59)
+/* 0x05A */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_5A)
+/* 0x05B */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_5B)
+/* 0x05C */ DEFINE_OBJECT(object_f40_obj, OBJECT_F40_OBJ)
+/* 0x05D */ DEFINE_OBJECT(object_po_composer, OBJECT_PO_COMPOSER)
+/* 0x05E */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_5E)
+/* 0x05F */ DEFINE_OBJECT(object_hata, OBJECT_HATA)
+/* 0x060 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_60)
+/* 0x061 */ DEFINE_OBJECT(object_wood02, OBJECT_WOOD02)
+/* 0x062 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_62)
+/* 0x063 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_63)
+/* 0x064 */ DEFINE_OBJECT(object_trap, OBJECT_TRAP)
+/* 0x065 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_65)
+/* 0x066 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_66)
+/* 0x067 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_67)
+/* 0x068 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_68)
+/* 0x069 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_69)
+/* 0x06A */ DEFINE_OBJECT(object_vm, OBJECT_VM)
+/* 0x06B */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_6B)
+/* 0x06C */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_6C)
+/* 0x06D */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_6D)
+/* 0x06E */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_6E)
+/* 0x06F */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_6F)
+/* 0x070 */ DEFINE_OBJECT(object_efc_star_field, OBJECT_EFC_STAR_FIELD)
+/* 0x071 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_71)
+/* 0x072 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_72)
+/* 0x073 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_73)
+/* 0x074 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_74)
+/* 0x075 */ DEFINE_OBJECT(object_rd, OBJECT_RD)
+/* 0x076 */ DEFINE_OBJECT(object_yukimura_obj, OBJECT_YUKIMURA_OBJ)
+/* 0x077 */ DEFINE_OBJECT_UNSET(OBJECT_HEAVY_OBJECT)
+/* 0x078 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_78)
+/* 0x079 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_79)
+/* 0x07A */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_7A)
+/* 0x07B */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_7B)
+/* 0x07C */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_7C)
+/* 0x07D */ DEFINE_OBJECT(object_horse_link_child, OBJECT_HORSE_LINK_CHILD)
+/* 0x07E */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_7E)
+/* 0x07F */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_7F)
+/* 0x080 */ DEFINE_OBJECT(object_syokudai, OBJECT_SYOKUDAI)
+/* 0x081 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_81)
+/* 0x082 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_82)
+/* 0x083 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_83)
+/* 0x084 */ DEFINE_OBJECT(object_efc_tw, OBJECT_EFC_TW)
+/* 0x085 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_85)
+/* 0x086 */ DEFINE_OBJECT(object_gi_key, OBJECT_GI_KEY)
+/* 0x087 */ DEFINE_OBJECT(object_mir_ray, OBJECT_MIR_RAY)
+/* 0x088 */ DEFINE_OBJECT(object_ctower_rot, OBJECT_CTOWER_ROT)
+/* 0x089 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_89)
+/* 0x08A */ DEFINE_OBJECT(object_bdoor, OBJECT_BDOOR)
+/* 0x08B */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_8B)
+/* 0x08C */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_8C)
+/* 0x08D */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_8D)
+/* 0x08E */ DEFINE_OBJECT(object_sb, OBJECT_SB)
+/* 0x08F */ DEFINE_OBJECT(object_gi_melody, OBJECT_GI_MELODY)
+/* 0x090 */ DEFINE_OBJECT(object_gi_heart, OBJECT_GI_HEART)
+/* 0x091 */ DEFINE_OBJECT(object_gi_compass, OBJECT_GI_COMPASS)
+/* 0x092 */ DEFINE_OBJECT(object_gi_bosskey, OBJECT_GI_BOSSKEY)
+/* 0x093 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_93)
+/* 0x094 */ DEFINE_OBJECT(object_gi_nuts, OBJECT_GI_NUTS)
+/* 0x095 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_95)
+/* 0x096 */ DEFINE_OBJECT(object_gi_hearts, OBJECT_GI_HEARTS)
+/* 0x097 */ DEFINE_OBJECT(object_gi_arrowcase, OBJECT_GI_ARROWCASE)
+/* 0x098 */ DEFINE_OBJECT(object_gi_bombpouch, OBJECT_GI_BOMBPOUCH)
+/* 0x099 */ DEFINE_OBJECT(object_in, OBJECT_IN)
+/* 0x09A */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_9A)
+/* 0x09B */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_9B)
+/* 0x09C */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_9C)
+/* 0x09D */ DEFINE_OBJECT(object_os_anime, OBJECT_OS_ANIME)
+/* 0x09E */ DEFINE_OBJECT(object_gi_bottle, OBJECT_GI_BOTTLE)
+/* 0x09F */ DEFINE_OBJECT(object_gi_stick, OBJECT_GI_STICK)
+/* 0x0A0 */ DEFINE_OBJECT(object_gi_map, OBJECT_GI_MAP)
+/* 0x0A1 */ DEFINE_OBJECT(object_oF1d_map, OBJECT_OF1D_MAP)
+/* 0x0A2 */ DEFINE_OBJECT(object_ru2, OBJECT_RU2)
+/* 0x0A3 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_A3)
+/* 0x0A4 */ DEFINE_OBJECT(object_gi_magicpot, OBJECT_GI_MAGICPOT)
+/* 0x0A5 */ DEFINE_OBJECT(object_gi_bomb_1, OBJECT_GI_BOMB_1)
+/* 0x0A6 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_A6)
+/* 0x0A7 */ DEFINE_OBJECT(object_ma2, OBJECT_MA2)
+/* 0x0A8 */ DEFINE_OBJECT(object_gi_purse, OBJECT_GI_PURSE)
+/* 0x0A9 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_A9)
+/* 0x0AA */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_AA)
+/* 0x0AB */ DEFINE_OBJECT(object_rr, OBJECT_RR)
+/* 0x0AC */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_AC)
+/* 0x0AD */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_AD)
+/* 0x0AE */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_AE)
+/* 0x0AF */ DEFINE_OBJECT(object_gi_arrow, OBJECT_GI_ARROW)
+/* 0x0B0 */ DEFINE_OBJECT(object_gi_bomb_2, OBJECT_GI_BOMB_2)
+/* 0x0B1 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_B1)
+/* 0x0B2 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_B2)
+/* 0x0B3 */ DEFINE_OBJECT(object_gi_shield_2, OBJECT_GI_SHIELD_2)
+/* 0x0B4 */ DEFINE_OBJECT(object_gi_hookshot, OBJECT_GI_HOOKSHOT)
+/* 0x0B5 */ DEFINE_OBJECT(object_gi_ocarina, OBJECT_GI_OCARINA)
+/* 0x0B6 */ DEFINE_OBJECT(object_gi_milk, OBJECT_GI_MILK)
+/* 0x0B7 */ DEFINE_OBJECT(object_ma1, OBJECT_MA1)
+/* 0x0B8 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_B8)
+/* 0x0B9 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_B9)
+/* 0x0BA */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_BA)
+/* 0x0BB */ DEFINE_OBJECT(object_ny, OBJECT_NY)
+/* 0x0BC */ DEFINE_OBJECT(object_fr, OBJECT_FR)
+/* 0x0BD */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_BD)
+/* 0x0BE */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_BE)
+/* 0x0BF */ DEFINE_OBJECT(object_gi_bow, OBJECT_GI_BOW)
+/* 0x0C0 */ DEFINE_OBJECT(object_gi_glasses, OBJECT_GI_GLASSES)
+/* 0x0C1 */ DEFINE_OBJECT(object_gi_liquid, OBJECT_GI_LIQUID)
+/* 0x0C2 */ DEFINE_OBJECT(object_ani, OBJECT_ANI)
+/* 0x0C3 */ DEFINE_OBJECT(object_gi_shield_3, OBJECT_GI_SHIELD_3)
+/* 0x0C4 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_C4)
+/* 0x0C5 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_C5)
+/* 0x0C6 */ DEFINE_OBJECT(object_gi_bean, OBJECT_GI_BEAN)
+/* 0x0C7 */ DEFINE_OBJECT(object_gi_fish, OBJECT_GI_FISH)
+/* 0x0C8 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_C8)
+/* 0x0C9 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_C9)
+/* 0x0CA */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_CA)
+/* 0x0CB */ DEFINE_OBJECT(object_gi_longsword, OBJECT_GI_LONGSWORD)
+/* 0x0CC */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_CC)
+/* 0x0CD */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_CD)
+/* 0x0CE */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_CE)
+/* 0x0CF */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_CF)
+/* 0x0D0 */ DEFINE_OBJECT(object_zo, OBJECT_ZO)
+/* 0x0D1 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_D1)
+/* 0x0D2 */ DEFINE_OBJECT(object_umajump, OBJECT_UMAJUMP)
+/* 0x0D3 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_D3)
+/* 0x0D4 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_D4)
+/* 0x0D5 */ DEFINE_OBJECT(object_mastergolon, OBJECT_MASTERGOLON)
+/* 0x0D6 */ DEFINE_OBJECT(object_masterzoora, OBJECT_MASTERZOORA)
+/* 0x0D7 */ DEFINE_OBJECT(object_aob, OBJECT_AOB)
+/* 0x0D8 */ DEFINE_OBJECT(object_ik, OBJECT_IK)
+/* 0x0D9 */ DEFINE_OBJECT(object_ahg, OBJECT_AHG)
+/* 0x0DA */ DEFINE_OBJECT(object_cne, OBJECT_CNE)
+/* 0x0DB */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_DB)
+/* 0x0DC */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_DC)
+/* 0x0DD */ DEFINE_OBJECT(object_an3, OBJECT_AN3)
+/* 0x0DE */ DEFINE_OBJECT(object_bji, OBJECT_BJI)
+/* 0x0DF */ DEFINE_OBJECT(object_bba, OBJECT_BBA)
+/* 0x0E0 */ DEFINE_OBJECT(object_an2, OBJECT_AN2)
+/* 0x0E1 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_E1)
+/* 0x0E2 */ DEFINE_OBJECT(object_an1, OBJECT_AN1)
+/* 0x0E3 */ DEFINE_OBJECT(object_boj, OBJECT_BOJ)
+/* 0x0E4 */ DEFINE_OBJECT(object_fz, OBJECT_FZ)
+/* 0x0E5 */ DEFINE_OBJECT(object_bob, OBJECT_BOB)
+/* 0x0E6 */ DEFINE_OBJECT(object_ge1, OBJECT_GE1)
+/* 0x0E7 */ DEFINE_OBJECT(object_yabusame_point, OBJECT_YABUSAME_POINT)
+/* 0x0E8 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_E8)
+/* 0x0E9 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_E9)
+/* 0x0EA */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_EA)
+/* 0x0EB */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_EB)
+/* 0x0EC */ DEFINE_OBJECT(object_d_hsblock, OBJECT_D_HSBLOCK)
+/* 0x0ED */ DEFINE_OBJECT(object_d_lift, OBJECT_D_LIFT)
+/* 0x0EE */ DEFINE_OBJECT(object_mamenoki, OBJECT_MAMENOKI)
+/* 0x0EF */ DEFINE_OBJECT(object_goroiwa, OBJECT_GOROIWA)
+/* 0x0F0 */ DEFINE_OBJECT(object_toryo, OBJECT_TORYO)
+/* 0x0F1 */ DEFINE_OBJECT(object_daiku, OBJECT_DAIKU)
+/* 0x0F2 */ DEFINE_OBJECT(object_nwc, OBJECT_NWC)
+/* 0x0F3 */ DEFINE_OBJECT(object_gm, OBJECT_GM)
+/* 0x0F4 */ DEFINE_OBJECT(object_ms, OBJECT_MS)
+/* 0x0F5 */ DEFINE_OBJECT(object_hs, OBJECT_HS)
+/* 0x0F6 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_F6)
+/* 0x0F7 */ DEFINE_OBJECT(object_lightswitch, OBJECT_LIGHTSWITCH)
+/* 0x0F8 */ DEFINE_OBJECT(object_kusa, OBJECT_KUSA)
+/* 0x0F9 */ DEFINE_OBJECT(object_tsubo, OBJECT_TSUBO)
+/* 0x0FA */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_FA)
+/* 0x0FB */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_FB)
+/* 0x0FC */ DEFINE_OBJECT(object_kanban, OBJECT_KANBAN)
+/* 0x0FD */ DEFINE_OBJECT(object_owl, OBJECT_OWL)
+/* 0x0FE */ DEFINE_OBJECT(object_mk, OBJECT_MK)
+/* 0x0FF */ DEFINE_OBJECT(object_fu, OBJECT_FU)
+/* 0x100 */ DEFINE_OBJECT(object_gi_ki_tan_mask, OBJECT_GI_KI_TAN_MASK)
+/* 0x101 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_101)
+/* 0x102 */ DEFINE_OBJECT(object_gi_mask18, OBJECT_GI_MASK18)
+/* 0x103 */ DEFINE_OBJECT(object_gi_rabit_mask, OBJECT_GI_RABIT_MASK)
+/* 0x104 */ DEFINE_OBJECT(object_gi_truth_mask, OBJECT_GI_TRUTH_MASK)
+/* 0x105 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_105)
+/* 0x106 */ DEFINE_OBJECT(object_stream, OBJECT_STREAM)
+/* 0x107 */ DEFINE_OBJECT(object_mm, OBJECT_MM)
+/* 0x108 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_108)
+/* 0x109 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_109)
+/* 0x10A */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_10A)
+/* 0x10B */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_10B)
+/* 0x10C */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_10C)
+/* 0x10D */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_10D)
+/* 0x10E */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_10E)
+/* 0x10F */ DEFINE_OBJECT(object_js, OBJECT_JS)
+/* 0x110 */ DEFINE_OBJECT(object_cs, OBJECT_CS)
+/* 0x111 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_111)
+/* 0x112 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_112)
+/* 0x113 */ DEFINE_OBJECT(object_gi_soldout, OBJECT_GI_SOLDOUT)
+/* 0x114 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_114)
+/* 0x115 */ DEFINE_OBJECT(object_mag, OBJECT_MAG)
+/* 0x116 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_116)
+/* 0x117 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_117)
+/* 0x118 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_118)
+/* 0x119 */ DEFINE_OBJECT(object_gi_golonmask, OBJECT_GI_GOLONMASK)
+/* 0x11A */ DEFINE_OBJECT(object_gi_zoramask, OBJECT_GI_ZORAMASK)
+/* 0x11B */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_11B)
+/* 0x11C */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_11C)
+/* 0x11D */ DEFINE_OBJECT(object_ka, OBJECT_KA)
+/* 0x11E */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_11E)
+/* 0x11F */ DEFINE_OBJECT(object_zg, OBJECT_ZG)
+/* 0x120 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_120)
+/* 0x121 */ DEFINE_OBJECT(object_gi_m_arrow, OBJECT_GI_M_ARROW)
+/* 0x122 */ DEFINE_OBJECT(object_ds2, OBJECT_DS2)
+/* 0x123 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_123)
+/* 0x124 */ DEFINE_OBJECT(object_fish, OBJECT_FISH)
+/* 0x125 */ DEFINE_OBJECT(object_gi_sutaru, OBJECT_GI_SUTARU)
+/* 0x126 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_126)
+/* 0x127 */ DEFINE_OBJECT(object_ssh, OBJECT_SSH)
+/* 0x128 */ DEFINE_OBJECT(object_bigslime, OBJECT_BIGSLIME)
+/* 0x129 */ DEFINE_OBJECT(object_bg, OBJECT_BG)
+/* 0x12A */ DEFINE_OBJECT(object_bombiwa, OBJECT_BOMBIWA)
+/* 0x12B */ DEFINE_OBJECT(object_hintnuts, OBJECT_HINTNUTS)
+/* 0x12C */ DEFINE_OBJECT(object_rs, OBJECT_RS)
+/* 0x12D */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_12D)
+/* 0x12E */ DEFINE_OBJECT(object_gla, OBJECT_GLA)
+/* 0x12F */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_12F)
+/* 0x130 */ DEFINE_OBJECT(object_geldb, OBJECT_GELDB)
+/* 0x131 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_131)
+/* 0x132 */ DEFINE_OBJECT(object_dog, OBJECT_DOG)
+/* 0x133 */ DEFINE_OBJECT(object_kibako2, OBJECT_KIBAKO2)
+/* 0x134 */ DEFINE_OBJECT(object_dns, OBJECT_DNS)
+/* 0x135 */ DEFINE_OBJECT(object_dnk, OBJECT_DNK)
+/* 0x136 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_136)
+/* 0x137 */ DEFINE_OBJECT(object_gi_insect, OBJECT_GI_INSECT)
+/* 0x138 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_138)
+/* 0x139 */ DEFINE_OBJECT(object_gi_ghost, OBJECT_GI_GHOST)
+/* 0x13A */ DEFINE_OBJECT(object_gi_soul, OBJECT_GI_SOUL)
+/* 0x13B */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_13B)
+/* 0x13C */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_13C)
+/* 0x13D */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_13D)
+/* 0x13E */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_13E)
+/* 0x13F */ DEFINE_OBJECT(object_gi_rupy, OBJECT_GI_RUPY)
+/* 0x140 */ DEFINE_OBJECT(object_mu, OBJECT_MU)
+/* 0x141 */ DEFINE_OBJECT(object_wf, OBJECT_WF)
+/* 0x142 */ DEFINE_OBJECT(object_skb, OBJECT_SKB)
+/* 0x143 */ DEFINE_OBJECT(object_gs, OBJECT_GS)
+/* 0x144 */ DEFINE_OBJECT(object_ps, OBJECT_PS)
+/* 0x145 */ DEFINE_OBJECT(object_omoya_obj, OBJECT_OMOYA_OBJ)
+/* 0x146 */ DEFINE_OBJECT(object_cow, OBJECT_COW)
+/* 0x147 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_147)
+/* 0x148 */ DEFINE_OBJECT(object_gi_sword_1, OBJECT_GI_SWORD_1)
+/* 0x149 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_149)
+/* 0x14A */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_14A)
+/* 0x14B */ DEFINE_OBJECT(object_zl4, OBJECT_ZL4)
+/* 0x14C */ DEFINE_OBJECT(object_link_goron, OBJECT_LINK_GORON)
+/* 0x14D */ DEFINE_OBJECT(object_link_zora, OBJECT_LINK_ZORA)
+/* 0x14E */ DEFINE_OBJECT(object_grasshopper, OBJECT_GRASSHOPPER)
+/* 0x14F */ DEFINE_OBJECT(object_boyo, OBJECT_BOYO)
+/* 0x150 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_150)
+/* 0x151 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_151)
+/* 0x152 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_152)
+/* 0x153 */ DEFINE_OBJECT(object_fwall, OBJECT_FWALL)
+/* 0x154 */ DEFINE_OBJECT(object_link_nuts, OBJECT_LINK_NUTS)
+/* 0x155 */ DEFINE_OBJECT(object_jso, OBJECT_JSO)
+/* 0x156 */ DEFINE_OBJECT(object_knight, OBJECT_KNIGHT)
+/* 0x157 */ DEFINE_OBJECT(object_icicle, OBJECT_ICICLE)
+/* 0x158 */ DEFINE_OBJECT(object_spdweb, OBJECT_SPDWEB)
+/* 0x159 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_159)
+/* 0x15A */ DEFINE_OBJECT(object_boss01, OBJECT_BOSS01)
+/* 0x15B */ DEFINE_OBJECT(object_boss02, OBJECT_BOSS02)
+/* 0x15C */ DEFINE_OBJECT(object_boss03, OBJECT_BOSS03)
+/* 0x15D */ DEFINE_OBJECT(object_boss04, OBJECT_BOSS04)
+/* 0x15E */ DEFINE_OBJECT(object_boss05, OBJECT_BOSS05)
+/* 0x15F */ DEFINE_OBJECT_SIZE_ZERO(object_boss07, OBJECT_UNSET_15F) // unused duplicate with size 0
+/* 0x160 */ DEFINE_OBJECT(object_boss07, OBJECT_BOSS07)
+/* 0x161 */ DEFINE_OBJECT(object_raf, OBJECT_RAF)
+/* 0x162 */ DEFINE_OBJECT(object_funen, OBJECT_FUNEN)
+/* 0x163 */ DEFINE_OBJECT(object_raillift, OBJECT_RAILLIFT)
+/* 0x164 */ DEFINE_OBJECT(object_numa_obj, OBJECT_NUMA_OBJ)
+/* 0x165 */ DEFINE_OBJECT(object_flowerpot, OBJECT_FLOWERPOT)
+/* 0x166 */ DEFINE_OBJECT(object_spinyroll, OBJECT_SPINYROLL)
+/* 0x167 */ DEFINE_OBJECT(object_ice_block, OBJECT_ICE_BLOCK)
+/* 0x168 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_168)
+/* 0x169 */ DEFINE_OBJECT(object_keikoku_demo, OBJECT_KEIKOKU_DEMO)
+/* 0x16A */ DEFINE_OBJECT(object_slime, OBJECT_SLIME)
+/* 0x16B */ DEFINE_OBJECT(object_pr, OBJECT_PR)
+/* 0x16C */ DEFINE_OBJECT(object_f52_obj, OBJECT_F52_OBJ)
+/* 0x16D */ DEFINE_OBJECT(object_f53_obj, OBJECT_F53_OBJ)
+/* 0x16E */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_16E)
+/* 0x16F */ DEFINE_OBJECT(object_kibako, OBJECT_KIBAKO)
+/* 0x170 */ DEFINE_OBJECT(object_sek, OBJECT_SEK)
+/* 0x171 */ DEFINE_OBJECT(object_gmo, OBJECT_GMO)
+/* 0x172 */ DEFINE_OBJECT(object_bat, OBJECT_BAT)
+/* 0x173 */ DEFINE_OBJECT(object_sekihil, OBJECT_SEKIHIL)
+/* 0x174 */ DEFINE_OBJECT(object_sekihig, OBJECT_SEKIHIG)
+/* 0x175 */ DEFINE_OBJECT(object_sekihin, OBJECT_SEKIHIN)
+/* 0x176 */ DEFINE_OBJECT(object_sekihiz, OBJECT_SEKIHIZ)
+/* 0x177 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_177)
+/* 0x178 */ DEFINE_OBJECT(object_wiz, OBJECT_WIZ)
+/* 0x179 */ DEFINE_OBJECT(object_ladder, OBJECT_LADDER)
+/* 0x17A */ DEFINE_OBJECT(object_mkk, OBJECT_MKK)
+/* 0x17B */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_17B)
+/* 0x17C */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_17C)
+/* 0x17D */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_17D)
+/* 0x17E */ DEFINE_OBJECT(object_keikoku_obj, OBJECT_KEIKOKU_OBJ)
+/* 0x17F */ DEFINE_OBJECT(object_sichitai_obj, OBJECT_SICHITAI_OBJ)
+/* 0x180 */ DEFINE_OBJECT(object_dekucity_ana_obj, OBJECT_DEKUCITY_ANA_OBJ)
+/* 0x181 */ DEFINE_OBJECT(object_rat, OBJECT_RAT)
+/* 0x182 */ DEFINE_OBJECT(object_water_effect, OBJECT_WATER_EFFECT)
+/* 0x183 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_183)
+/* 0x184 */ DEFINE_OBJECT(object_dblue_object, OBJECT_DBLUE_OBJECT)
+/* 0x185 */ DEFINE_OBJECT(object_bal, OBJECT_BAL)
+/* 0x186 */ DEFINE_OBJECT(object_warp_uzu, OBJECT_WARP_UZU)
+/* 0x187 */ DEFINE_OBJECT(object_driftice, OBJECT_DRIFTICE)
+/* 0x188 */ DEFINE_OBJECT(object_fall, OBJECT_FALL)
+/* 0x189 */ DEFINE_OBJECT(object_hanareyama_obj, OBJECT_HANAREYAMA_OBJ)
+/* 0x18A */ DEFINE_OBJECT(object_crace_object, OBJECT_CRACE_OBJECT)
+/* 0x18B */ DEFINE_OBJECT(object_dno, OBJECT_DNO)
+/* 0x18C */ DEFINE_OBJECT(object_obj_tokeidai, OBJECT_OBJ_TOKEIDAI)
+/* 0x18D */ DEFINE_OBJECT(object_eg, OBJECT_EG)
+/* 0x18E */ DEFINE_OBJECT(object_tru, OBJECT_TRU)
+/* 0x18F */ DEFINE_OBJECT(object_trt, OBJECT_TRT)
+/* 0x190 */ DEFINE_OBJECT(object_hakugin_obj, OBJECT_HAKUGIN_OBJ)
+/* 0x191 */ DEFINE_OBJECT(object_horse_game_check, OBJECT_HORSE_GAME_CHECK)
+/* 0x192 */ DEFINE_OBJECT(object_stk, OBJECT_STK)
+/* 0x193 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_193)
+/* 0x194 */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_194)
+/* 0x195 */ DEFINE_OBJECT(object_mnk, OBJECT_MNK)
+/* 0x196 */ DEFINE_OBJECT(object_gi_bottle_red, OBJECT_GI_BOTTLE_RED)
+/* 0x197 */ DEFINE_OBJECT(object_tokei_tobira, OBJECT_TOKEI_TOBIRA)
+/* 0x198 */ DEFINE_OBJECT(object_az, OBJECT_AZ)
+/* 0x199 */ DEFINE_OBJECT(object_twig, OBJECT_TWIG)
+/* 0x19A */ DEFINE_OBJECT(object_dekucity_obj, OBJECT_DEKUCITY_OBJ)
+/* 0x19B */ DEFINE_OBJECT(object_po_fusen, OBJECT_PO_FUSEN)
+/* 0x19C */ DEFINE_OBJECT(object_racetsubo, OBJECT_RACETSUBO)
+/* 0x19D */ DEFINE_OBJECT(object_ha, OBJECT_HA)
+/* 0x19E */ DEFINE_OBJECT(object_bigokuta, OBJECT_BIGOKUTA)
+/* 0x19F */ DEFINE_OBJECT(object_open_obj, OBJECT_OPEN_OBJ)
+/* 0x1A0 */ DEFINE_OBJECT(object_fu_kaiten, OBJECT_FU_KAITEN)
+/* 0x1A1 */ DEFINE_OBJECT(object_fu_mato, OBJECT_FU_MATO)
+/* 0x1A2 */ DEFINE_OBJECT(object_mtoride, OBJECT_MTORIDE)
+/* 0x1A3 */ DEFINE_OBJECT(object_osn, OBJECT_OSN)
+/* 0x1A4 */ DEFINE_OBJECT(object_tokei_step, OBJECT_TOKEI_STEP)
+/* 0x1A5 */ DEFINE_OBJECT(object_lotus, OBJECT_LOTUS)
+/* 0x1A6 */ DEFINE_OBJECT(object_tl, OBJECT_TL)
+/* 0x1A7 */ DEFINE_OBJECT(object_dkjail_obj, OBJECT_DKJAIL_OBJ)
+/* 0x1A8 */ DEFINE_OBJECT(object_visiblock, OBJECT_VISIBLOCK)
+/* 0x1A9 */ DEFINE_OBJECT(object_tsn, OBJECT_TSN)
+/* 0x1AA */ DEFINE_OBJECT(object_ds2n, OBJECT_DS2N)
+/* 0x1AB */ DEFINE_OBJECT(object_fsn, OBJECT_FSN)
+/* 0x1AC */ DEFINE_OBJECT(object_shn, OBJECT_SHN)
+/* 0x1AD */ DEFINE_OBJECT(object_bigicicle, OBJECT_BIGICICLE)
+/* 0x1AE */ DEFINE_OBJECT(object_gi_bottle_15, OBJECT_GI_BOTTLE_15)
+/* 0x1AF */ DEFINE_OBJECT(object_tk, OBJECT_TK)
+/* 0x1B0 */ DEFINE_OBJECT(object_market_obj, OBJECT_MARKET_OBJ)
+/* 0x1B1 */ DEFINE_OBJECT(object_gi_reserve00, OBJECT_GI_RESERVE00)
+/* 0x1B2 */ DEFINE_OBJECT(object_gi_reserve01, OBJECT_GI_RESERVE01)
+/* 0x1B3 */ DEFINE_OBJECT(object_lightblock, OBJECT_LIGHTBLOCK)
+/* 0x1B4 */ DEFINE_OBJECT(object_takaraya_objects, OBJECT_TAKARAYA_OBJECTS)
+/* 0x1B5 */ DEFINE_OBJECT(object_wdhand, OBJECT_WDHAND)
+/* 0x1B6 */ DEFINE_OBJECT(object_sdn, OBJECT_SDN)
+/* 0x1B7 */ DEFINE_OBJECT(object_snowwd, OBJECT_SNOWWD)
+/* 0x1B8 */ DEFINE_OBJECT(object_giant, OBJECT_GIANT)
+/* 0x1B9 */ DEFINE_OBJECT(object_comb, OBJECT_COMB)
+/* 0x1BA */ DEFINE_OBJECT(object_hana, OBJECT_HANA)
+/* 0x1BB */ DEFINE_OBJECT(object_boss_hakugin, OBJECT_BOSS_HAKUGIN)
+/* 0x1BC */ DEFINE_OBJECT(object_meganeana_obj, OBJECT_MEGANEANA_OBJ)
+/* 0x1BD */ DEFINE_OBJECT(object_gi_nutsmask, OBJECT_GI_NUTSMASK)
+/* 0x1BE */ DEFINE_OBJECT(object_stk2, OBJECT_STK2)
+/* 0x1BF */ DEFINE_OBJECT(object_spot11_obj, OBJECT_SPOT11_OBJ)
+/* 0x1C0 */ DEFINE_OBJECT(object_danpei_object, OBJECT_DANPEI_OBJECT)
+/* 0x1C1 */ DEFINE_OBJECT(object_dhouse, OBJECT_DHOUSE)
+/* 0x1C2 */ DEFINE_OBJECT(object_hakaisi, OBJECT_HAKAISI)
+/* 0x1C3 */ DEFINE_OBJECT(object_po, OBJECT_PO)
+/* 0x1C4 */ DEFINE_OBJECT(object_snowman, OBJECT_SNOWMAN)
+/* 0x1C5 */ DEFINE_OBJECT(object_po_sisters, OBJECT_PO_SISTERS)
+/* 0x1C6 */ DEFINE_OBJECT(object_pp, OBJECT_PP)
+/* 0x1C7 */ DEFINE_OBJECT(object_goronswitch, OBJECT_GORONSWITCH)
+/* 0x1C8 */ DEFINE_OBJECT(object_delf, OBJECT_DELF)
+/* 0x1C9 */ DEFINE_OBJECT(object_botihasira, OBJECT_BOTIHASIRA)
+/* 0x1CA */ DEFINE_OBJECT(object_gi_bigbomb, OBJECT_GI_BIGBOMB)
+/* 0x1CB */ DEFINE_OBJECT(object_pst, OBJECT_PST)
+/* 0x1CC */ DEFINE_OBJECT(object_bsmask, OBJECT_BSMASK)
+/* 0x1CD */ DEFINE_OBJECT(object_spidertent, OBJECT_SPIDERTENT)
+/* 0x1CE */ DEFINE_OBJECT(object_zoraegg, OBJECT_ZORAEGG)
+/* 0x1CF */ DEFINE_OBJECT(object_kbt, OBJECT_KBT)
+/* 0x1D0 */ DEFINE_OBJECT(object_gg, OBJECT_GG)
+/* 0x1D1 */ DEFINE_OBJECT(object_maruta, OBJECT_MARUTA)
+/* 0x1D2 */ DEFINE_OBJECT(object_ghaka, OBJECT_GHAKA)
+/* 0x1D3 */ DEFINE_OBJECT(object_oyu, OBJECT_OYU)
+/* 0x1D4 */ DEFINE_OBJECT(object_dnq, OBJECT_DNQ)
+/* 0x1D5 */ DEFINE_OBJECT(object_dai, OBJECT_DAI)
+/* 0x1D6 */ DEFINE_OBJECT(object_kgy, OBJECT_KGY)
+/* 0x1D7 */ DEFINE_OBJECT(object_fb, OBJECT_FB)
+/* 0x1D8 */ DEFINE_OBJECT(object_taisou, OBJECT_TAISOU)
+/* 0x1D9 */ DEFINE_OBJECT(object_mask_bu_san, OBJECT_MASK_BU_SAN)
+/* 0x1DA */ DEFINE_OBJECT(object_mask_ki_tan, OBJECT_MASK_KI_TAN)
+/* 0x1DB */ DEFINE_OBJECT(object_mask_rabit, OBJECT_MASK_RABIT)
+/* 0x1DC */ DEFINE_OBJECT(object_mask_skj, OBJECT_MASK_SKJ)
+/* 0x1DD */ DEFINE_OBJECT(object_mask_bakuretu, OBJECT_MASK_BAKURETU)
+/* 0x1DE */ DEFINE_OBJECT(object_mask_truth, OBJECT_MASK_TRUTH)
+/* 0x1DF */ DEFINE_OBJECT(object_gk, OBJECT_GK)
+/* 0x1E0 */ DEFINE_OBJECT(object_haka_obj, OBJECT_HAKA_OBJ)
+/* 0x1E1 */ DEFINE_OBJECT(object_mask_goron, OBJECT_MASK_GORON)
+/* 0x1E2 */ DEFINE_OBJECT(object_mask_zora, OBJECT_MASK_ZORA)
+/* 0x1E3 */ DEFINE_OBJECT(object_mask_nuts, OBJECT_MASK_NUTS)
+/* 0x1E4 */ DEFINE_OBJECT(object_mask_boy, OBJECT_MASK_BOY)
+/* 0x1E5 */ DEFINE_OBJECT(object_dnt, OBJECT_DNT)
+/* 0x1E6 */ DEFINE_OBJECT(object_yukiyama, OBJECT_YUKIYAMA)
+/* 0x1E7 */ DEFINE_OBJECT(object_icefloe, OBJECT_ICEFLOE)
+/* 0x1E8 */ DEFINE_OBJECT(object_gi_gold_dust, OBJECT_GI_GOLD_DUST)
+/* 0x1E9 */ DEFINE_OBJECT(object_gi_bottle_16, OBJECT_GI_BOTTLE_16)
+/* 0x1EA */ DEFINE_OBJECT(object_gi_bottle_22, OBJECT_GI_BOTTLE_22)
+/* 0x1EB */ DEFINE_OBJECT(object_bee, OBJECT_BEE)
+/* 0x1EC */ DEFINE_OBJECT(object_ot, OBJECT_OT)
+/* 0x1ED */ DEFINE_OBJECT(object_utubo, OBJECT_UTUBO)
+/* 0x1EE */ DEFINE_OBJECT(object_dora, OBJECT_DORA)
+/* 0x1EF */ DEFINE_OBJECT(object_gi_loach, OBJECT_GI_LOACH)
+/* 0x1F0 */ DEFINE_OBJECT(object_gi_seahorse, OBJECT_GI_SEAHORSE)
+/* 0x1F1 */ DEFINE_OBJECT(object_bigpo, OBJECT_BIGPO)
+/* 0x1F2 */ DEFINE_OBJECT(object_hariko, OBJECT_HARIKO)
+/* 0x1F3 */ DEFINE_OBJECT(object_dnj, OBJECT_DNJ)
+/* 0x1F4 */ DEFINE_OBJECT(object_sinkai_kabe, OBJECT_SINKAI_KABE)
+/* 0x1F5 */ DEFINE_OBJECT(object_kin2_obj, OBJECT_KIN2_OBJ)
+/* 0x1F6 */ DEFINE_OBJECT(object_ishi, OBJECT_ISHI)
+/* 0x1F7 */ DEFINE_OBJECT(object_hakugin_demo, OBJECT_HAKUGIN_DEMO)
+/* 0x1F8 */ DEFINE_OBJECT(object_jg, OBJECT_JG)
+/* 0x1F9 */ DEFINE_OBJECT(object_gi_sword_2, OBJECT_GI_SWORD_2)
+/* 0x1FA */ DEFINE_OBJECT(object_gi_sword_3, OBJECT_GI_SWORD_3)
+/* 0x1FB */ DEFINE_OBJECT(object_gi_sword_4, OBJECT_GI_SWORD_4)
+/* 0x1FC */ DEFINE_OBJECT(object_um, OBJECT_UM)
+/* 0x1FD */ DEFINE_OBJECT(object_mask_gibudo, OBJECT_MASK_GIBUDO)
+/* 0x1FE */ DEFINE_OBJECT(object_mask_json, OBJECT_MASK_JSON)
+/* 0x1FF */ DEFINE_OBJECT(object_mask_kerfay, OBJECT_MASK_KERFAY)
+/* 0x200 */ DEFINE_OBJECT(object_mask_bigelf, OBJECT_MASK_BIGELF)
+/* 0x201 */ DEFINE_OBJECT(object_rb, OBJECT_RB)
+/* 0x202 */ DEFINE_OBJECT(object_mbar_obj, OBJECT_MBAR_OBJ)
+/* 0x203 */ DEFINE_OBJECT(object_ikana_obj, OBJECT_IKANA_OBJ)
+/* 0x204 */ DEFINE_OBJECT(object_kz, OBJECT_KZ)
+/* 0x205 */ DEFINE_OBJECT(object_tokei_turret, OBJECT_TOKEI_TURRET)
+/* 0x206 */ DEFINE_OBJECT(object_zog, OBJECT_ZOG)
+/* 0x207 */ DEFINE_OBJECT(object_rotlift, OBJECT_ROTLIFT)
+/* 0x208 */ DEFINE_OBJECT(object_posthouse_obj, OBJECT_POSTHOUSE_OBJ)
+/* 0x209 */ DEFINE_OBJECT(object_gi_mask09, OBJECT_GI_MASK09)
+/* 0x20A */ DEFINE_OBJECT(object_gi_mask14, OBJECT_GI_MASK14)
+/* 0x20B */ DEFINE_OBJECT(object_gi_mask15, OBJECT_GI_MASK15)
+/* 0x20C */ DEFINE_OBJECT(object_inibs_object, OBJECT_INIBS_OBJECT)
+/* 0x20D */ DEFINE_OBJECT(object_tree, OBJECT_TREE)
+/* 0x20E */ DEFINE_OBJECT(object_kaizoku_obj, OBJECT_KAIZOKU_OBJ)
+/* 0x20F */ DEFINE_OBJECT(object_gi_reserve_b_00, OBJECT_GI_RESERVE_B_00)
+/* 0x210 */ DEFINE_OBJECT(object_gi_reserve_c_00, OBJECT_GI_RESERVE_C_00)
+/* 0x211 */ DEFINE_OBJECT(object_zob, OBJECT_ZOB)
+/* 0x212 */ DEFINE_OBJECT(object_milkbar, OBJECT_MILKBAR)
+/* 0x213 */ DEFINE_OBJECT(object_dmask, OBJECT_DMASK)
+/* 0x214 */ DEFINE_OBJECT(object_mask_kyojin, OBJECT_MASK_KYOJIN)
+/* 0x215 */ DEFINE_OBJECT(object_gi_reserve_c_01, OBJECT_GI_RESERVE_C_01)
+/* 0x216 */ DEFINE_OBJECT(object_zod, OBJECT_ZOD)
+/* 0x217 */ DEFINE_OBJECT(object_kumo30, OBJECT_KUMO30)
+/* 0x218 */ DEFINE_OBJECT(object_obj_yasi, OBJECT_OBJ_YASI)
+/* 0x219 */ DEFINE_OBJECT(object_mask_romerny, OBJECT_MASK_ROMERNY)
+/* 0x21A */ DEFINE_OBJECT(object_tanron1, OBJECT_TANRON1)
+/* 0x21B */ DEFINE_OBJECT(object_tanron2, OBJECT_TANRON2)
+/* 0x21C */ DEFINE_OBJECT(object_tanron3, OBJECT_TANRON3)
+/* 0x21D */ DEFINE_OBJECT(object_gi_magicmushroom, OBJECT_GI_MAGICMUSHROOM)
+/* 0x21E */ DEFINE_OBJECT(object_obj_chan, OBJECT_OBJ_CHAN)
+/* 0x21F */ DEFINE_OBJECT(object_gi_mask10, OBJECT_GI_MASK10)
+/* 0x220 */ DEFINE_OBJECT(object_zos, OBJECT_ZOS)
+/* 0x221 */ DEFINE_OBJECT(object_mask_posthat, OBJECT_MASK_POSTHAT)
+/* 0x222 */ DEFINE_OBJECT(object_f40_switch, OBJECT_F40_SWITCH)
+/* 0x223 */ DEFINE_OBJECT(object_lodmoon, OBJECT_LODMOON)
+/* 0x224 */ DEFINE_OBJECT(object_tro, OBJECT_TRO)
+/* 0x225 */ DEFINE_OBJECT(object_gi_mask12, OBJECT_GI_MASK12)
+/* 0x226 */ DEFINE_OBJECT(object_gi_mask23, OBJECT_GI_MASK23)
+/* 0x227 */ DEFINE_OBJECT(object_gi_bottle_21, OBJECT_GI_BOTTLE_21)
+/* 0x228 */ DEFINE_OBJECT(object_gi_camera, OBJECT_GI_CAMERA)
+/* 0x229 */ DEFINE_OBJECT(object_kamejima, OBJECT_KAMEJIMA)
+/* 0x22A */ DEFINE_OBJECT(object_harfgibud, OBJECT_HARFGIBUD)
+/* 0x22B */ DEFINE_OBJECT(object_zov, OBJECT_ZOV)
+/* 0x22C */ DEFINE_OBJECT(object_hgdoor, OBJECT_HGDOOR)
+/* 0x22D */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_22D)
+/* 0x22E */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_22E)
+/* 0x22F */ DEFINE_OBJECT_UNSET(OBJECT_UNSET_22F)
+/* 0x230 */ DEFINE_OBJECT(object_dor01, OBJECT_DOR01)
+/* 0x231 */ DEFINE_OBJECT(object_dor02, OBJECT_DOR02)
+/* 0x232 */ DEFINE_OBJECT(object_dor03, OBJECT_DOR03)
+/* 0x233 */ DEFINE_OBJECT(object_dor04, OBJECT_DOR04)
+/* 0x234 */ DEFINE_OBJECT(object_last_obj, OBJECT_LAST_OBJ)
+/* 0x235 */ DEFINE_OBJECT(object_redead_obj, OBJECT_REDEAD_OBJ)
+/* 0x236 */ DEFINE_OBJECT(object_ikninside_obj, OBJECT_IKNINSIDE_OBJ)
+/* 0x237 */ DEFINE_OBJECT(object_iknv_obj, OBJECT_IKNV_OBJ)
+/* 0x238 */ DEFINE_OBJECT(object_pamera, OBJECT_PAMERA)
+/* 0x239 */ DEFINE_OBJECT(object_hsstump, OBJECT_HSSTUMP)
+/* 0x23A */ DEFINE_OBJECT(object_zm, OBJECT_ZM)
+/* 0x23B */ DEFINE_OBJECT(object_big_fwall, OBJECT_BIG_FWALL)
+/* 0x23C */ DEFINE_OBJECT(object_secom_obj, OBJECT_SECOM_OBJ)
+/* 0x23D */ DEFINE_OBJECT(object_hunsui, OBJECT_HUNSUI)
+/* 0x23E */ DEFINE_OBJECT(object_uch, OBJECT_UCH)
+/* 0x23F */ DEFINE_OBJECT(object_tanron4, OBJECT_TANRON4)
+/* 0x240 */ DEFINE_OBJECT(object_tanron5, OBJECT_TANRON5)
+/* 0x241 */ DEFINE_OBJECT(object_dt, OBJECT_DT)
+/* 0x242 */ DEFINE_OBJECT(object_gi_mask03, OBJECT_GI_MASK03)
+/* 0x243 */ DEFINE_OBJECT(object_cha, OBJECT_CHA)
+/* 0x244 */ DEFINE_OBJECT(object_obj_dinner, OBJECT_OBJ_DINNER)
+/* 0x245 */ DEFINE_OBJECT(object_gi_reserve_b_01, OBJECT_GI_RESERVE_B_01)
+/* 0x246 */ DEFINE_OBJECT(object_lastday, OBJECT_LASTDAY)
+/* 0x247 */ DEFINE_OBJECT(object_bai, OBJECT_BAI)
+/* 0x248 */ DEFINE_OBJECT(object_in2, OBJECT_IN2)
+/* 0x249 */ DEFINE_OBJECT(object_ikn_demo, OBJECT_IKN_DEMO)
+/* 0x24A */ DEFINE_OBJECT(object_yb, OBJECT_YB)
+/* 0x24B */ DEFINE_OBJECT(object_rz, OBJECT_RZ)
+/* 0x24C */ DEFINE_OBJECT(object_mask_zacho, OBJECT_MASK_ZACHO)
+/* 0x24D */ DEFINE_OBJECT(object_gi_fieldmap, OBJECT_GI_FIELDMAP)
+/* 0x24E */ DEFINE_OBJECT(object_mask_stone, OBJECT_MASK_STONE)
+/* 0x24F */ DEFINE_OBJECT(object_bjt, OBJECT_BJT)
+/* 0x250 */ DEFINE_OBJECT(object_taru, OBJECT_TARU)
+/* 0x251 */ DEFINE_OBJECT(object_moonston, OBJECT_MOONSTON)
+/* 0x252 */ DEFINE_OBJECT(object_mask_bree, OBJECT_MASK_BREE)
+/* 0x253 */ DEFINE_OBJECT(object_gi_schedule, OBJECT_GI_SCHEDULE)
+/* 0x254 */ DEFINE_OBJECT(object_gi_stonemask, OBJECT_GI_STONEMASK)
+/* 0x255 */ DEFINE_OBJECT(object_zoraband, OBJECT_ZORABAND)
+/* 0x256 */ DEFINE_OBJECT(object_kepn_koya, OBJECT_KEPN_KOYA)
+/* 0x257 */ DEFINE_OBJECT(object_obj_usiyane, OBJECT_OBJ_USIYANE)
+/* 0x258 */ DEFINE_OBJECT(object_gi_mask05, OBJECT_GI_MASK05)
+/* 0x259 */ DEFINE_OBJECT(object_gi_mask11, OBJECT_GI_MASK11)
+/* 0x25A */ DEFINE_OBJECT(object_gi_mask20, OBJECT_GI_MASK20)
+/* 0x25B */ DEFINE_OBJECT(object_nnh, OBJECT_NNH)
+/* 0x25C */ DEFINE_OBJECT(object_mask_gero, OBJECT_MASK_GERO)
+/* 0x25D */ DEFINE_OBJECT(object_mask_yofukasi, OBJECT_MASK_YOFUKASI)
+/* 0x25E */ DEFINE_OBJECT(object_mask_meoto, OBJECT_MASK_MEOTO)
+/* 0x25F */ DEFINE_OBJECT(object_mask_dancer, OBJECT_MASK_DANCER)
+/* 0x260 */ DEFINE_OBJECT(object_kzsaku, OBJECT_KZSAKU)
+/* 0x261 */ DEFINE_OBJECT(object_obj_milk_bin, OBJECT_OBJ_MILK_BIN)
+/* 0x262 */ DEFINE_OBJECT(object_random_obj, OBJECT_RANDOM_OBJ)
+/* 0x263 */ DEFINE_OBJECT(object_kujiya, OBJECT_KUJIYA)
+/* 0x264 */ DEFINE_OBJECT(object_kitan, OBJECT_KITAN)
+/* 0x265 */ DEFINE_OBJECT(object_gi_mask06, OBJECT_GI_MASK06)
+/* 0x266 */ DEFINE_OBJECT(object_gi_mask16, OBJECT_GI_MASK16)
+/* 0x267 */ DEFINE_OBJECT(object_astr_obj, OBJECT_ASTR_OBJ)
+/* 0x268 */ DEFINE_OBJECT(object_bsb, OBJECT_BSB)
+/* 0x269 */ DEFINE_OBJECT(object_fall2, OBJECT_FALL2)
+/* 0x26A */ DEFINE_OBJECT(object_sth, OBJECT_STH)
+/* 0x26B */ DEFINE_OBJECT(object_gi_mssa, OBJECT_GI_MSSA)
+/* 0x26C */ DEFINE_OBJECT(object_smtower, OBJECT_SMTOWER)
+/* 0x26D */ DEFINE_OBJECT(object_gi_mask21, OBJECT_GI_MASK21)
+/* 0x26E */ DEFINE_OBJECT(object_yado_obj, OBJECT_YADO_OBJ)
+/* 0x26F */ DEFINE_OBJECT(object_syoten, OBJECT_SYOTEN)
+/* 0x270 */ DEFINE_OBJECT(object_moonend, OBJECT_MOONEND)
+/* 0x271 */ DEFINE_OBJECT(object_ob, OBJECT_OB)
+/* 0x272 */ DEFINE_OBJECT(object_gi_bottle_04, OBJECT_GI_BOTTLE_04)
+/* 0x273 */ DEFINE_OBJECT(object_obj_danpeilift, OBJECT_OBJ_DANPEILIFT)
+/* 0x274 */ DEFINE_OBJECT(object_wdor01, OBJECT_WDOR01)
+/* 0x275 */ DEFINE_OBJECT(object_wdor02, OBJECT_WDOR02)
+/* 0x276 */ DEFINE_OBJECT(object_wdor03, OBJECT_WDOR03)
+/* 0x277 */ DEFINE_OBJECT(object_stk3, OBJECT_STK3)
+/* 0x278 */ DEFINE_OBJECT(object_kinsta1_obj, OBJECT_KINSTA1_OBJ)
+/* 0x279 */ DEFINE_OBJECT(object_kinsta2_obj, OBJECT_KINSTA2_OBJ)
+/* 0x27A */ DEFINE_OBJECT(object_bh, OBJECT_BH)
+/* 0x27B */ DEFINE_OBJECT(object_wdor04, OBJECT_WDOR04)
+/* 0x27C */ DEFINE_OBJECT(object_wdor05, OBJECT_WDOR05)
+/* 0x27D */ DEFINE_OBJECT(object_gi_mask17, OBJECT_GI_MASK17)
+/* 0x27E */ DEFINE_OBJECT(object_gi_mask22, OBJECT_GI_MASK22)
+/* 0x27F */ DEFINE_OBJECT(object_lbfshot, OBJECT_LBFSHOT)
+/* 0x280 */ DEFINE_OBJECT(object_fusen, OBJECT_FUSEN)
+/* 0x281 */ DEFINE_OBJECT(object_ending_obj, OBJECT_ENDING_OBJ)
+/* 0x282 */ DEFINE_OBJECT(object_gi_mask13, OBJECT_GI_MASK13)
diff --git a/include/tha.h b/include/tha.h
new file mode 100644
index 000000000..805d421f9
--- /dev/null
+++ b/include/tha.h
@@ -0,0 +1,28 @@
+#ifndef THA_H
+#define THA_H
+
+#include "ultra64.h"
+#include "libc/stdint.h"
+
+typedef struct TwoHeadArena {
+ /* 0x0 */ size_t size;
+ /* 0x4 */ void* start;
+ /* 0x8 */ void* head;
+ /* 0xC */ void* tail;
+} TwoHeadArena; // size = 0x10
+
+void* THA_GetHead(TwoHeadArena* tha);
+void THA_SetHead(TwoHeadArena* tha, void* newHead);
+void* THA_GetTail(TwoHeadArena* tha);
+void* THA_AllocHead(TwoHeadArena* tha, size_t size);
+void* THA_AllocHeadByte(TwoHeadArena* tha);
+void* THA_AllocTail(TwoHeadArena* tha, size_t size);
+void* THA_AllocTailAlign16(TwoHeadArena* tha, size_t size);
+void* THA_AllocTailAlign(TwoHeadArena* tha, size_t size, uintptr_t mask);
+s32 THA_GetRemaining(TwoHeadArena* tha);
+u32 THA_IsCrash(TwoHeadArena* tha);
+void THA_Reset(TwoHeadArena* tha);
+void THA_Init(TwoHeadArena* tha, void* start, size_t size);
+void THA_Destroy(TwoHeadArena* tha);
+
+#endif
diff --git a/include/thga.h b/include/thga.h
new file mode 100644
index 000000000..351c36407
--- /dev/null
+++ b/include/thga.h
@@ -0,0 +1,33 @@
+#ifndef THGA_H
+#define THGA_H
+
+#include "tha.h"
+
+typedef union TwoHeadGfxArena {
+ struct { // Same as TwoHeadArena, with different types and field names for the head and tail pointers
+ /* 0x0 */ size_t size;
+ /* 0x4 */ void* start;
+ /* 0x8 */ Gfx* p;
+ /* 0xC */ void* d;
+ };
+ /* 0x0 */ TwoHeadArena tha;
+} TwoHeadGfxArena; // size = 0x10
+
+void THGA_Init(TwoHeadGfxArena* thga, void* start, size_t size);
+void THGA_Destroy(TwoHeadGfxArena* thga);
+u32 THGA_IsCrash(TwoHeadGfxArena* thga);
+void THGA_Reset(TwoHeadGfxArena* thga);
+s32 THGA_GetRemaining(TwoHeadGfxArena* thga);
+Gfx* THGA_GetHead(TwoHeadGfxArena* thga);
+void THGA_SetHead(TwoHeadGfxArena* thga, Gfx* newHead);
+void* THGA_GetTail(TwoHeadGfxArena* thga);
+Gfx* THGA_AllocDisplayList(TwoHeadGfxArena* thga, size_t num);
+Gfx* THGA_AllocGfx(TwoHeadGfxArena* thga);
+Gfx* THGA_AllocGfx2(TwoHeadGfxArena* thga);
+void* THGA_AllocTail(TwoHeadGfxArena* thga, size_t size);
+Mtx* THGA_AllocMtxArray(TwoHeadGfxArena* thga, size_t num);
+Mtx* THGA_AllocMtx(TwoHeadGfxArena* thga);
+Vtx* THGA_AllocVtxArray(TwoHeadGfxArena* thga, size_t num);
+Vtx* THGA_AllocVtx(TwoHeadGfxArena* thga);
+
+#endif
diff --git a/include/ultra64.h b/include/ultra64.h
index 6ffb26ff6..ad2bc2463 100644
--- a/include/ultra64.h
+++ b/include/ultra64.h
@@ -14,6 +14,7 @@
#include "ultra64/rdp.h"
#include "ultra64/rsp.h"
#include "ultra64/r4300.h"
+#include "ultra64/ucode.h"
#include "ultra64/vi.h"
#endif
diff --git a/include/ultra64/message.h b/include/ultra64/message.h
index a049ae363..de0c39b83 100644
--- a/include/ultra64/message.h
+++ b/include/ultra64/message.h
@@ -1,5 +1,5 @@
-#ifndef _ULTRA64_MESSAGE_H_
-#define _ULTRA64_MESSAGE_H_
+#ifndef ULTRA64_MESSAGE_H
+#define ULTRA64_MESSAGE_H
#include "ultra64/thread.h"
diff --git a/include/ultra64/thread.h b/include/ultra64/thread.h
index f3cd68890..62cbdcd1b 100644
--- a/include/ultra64/thread.h
+++ b/include/ultra64/thread.h
@@ -54,16 +54,16 @@ typedef struct {
} __OSThreadprofile; // size = 0x10
typedef struct OSThread {
- /*0x00*/ struct OSThread* next;
- /*0x04*/ OSPri priority;
- /*0x08*/ struct OSThread** queue;
- /*0x0C*/ struct OSThread* tlnext;
- /*0x10*/ u16 state;
- /*0x12*/ u16 flags;
- /*0x14*/ OSId id;
- /*0x18*/ s32 fp;
- /*0x1C*/ __OSThreadprofile* thprof;
- /*0x20*/ __OSThreadContext context;
+ /* 0x00 */ struct OSThread* next;
+ /* 0x04 */ OSPri priority;
+ /* 0x08 */ struct OSThread** queue;
+ /* 0x0C */ struct OSThread* tlnext;
+ /* 0x10 */ u16 state;
+ /* 0x12 */ u16 flags;
+ /* 0x14 */ OSId id;
+ /* 0x18 */ s32 fp;
+ /* 0x1C */ __OSThreadprofile* thprof;
+ /* 0x20 */ __OSThreadContext context;
} OSThread; // size = 0x1B0
#endif
diff --git a/include/ultra64/ucode.h b/include/ultra64/ucode.h
new file mode 100644
index 000000000..8a1d89037
--- /dev/null
+++ b/include/ultra64/ucode.h
@@ -0,0 +1,31 @@
+#ifndef ULTRA64_UCODE_H
+#define ULTRA64_UCODE_H
+
+#include "PR/ultratypes.h"
+
+#define SP_DRAM_STACK_SIZE8 0x400
+#define SP_DRAM_STACK_SIZE64 (SP_DRAM_STACK_SIZE8 >> 3)
+
+#define SP_UCODE_SIZE 0x1000
+
+#define SP_UCODE_DATA_SIZE 0x800
+
+extern u64 rspbootTextStart[];
+extern u64 rspbootTextEnd[];
+
+extern u64 aspMainTextStart[];
+extern u64 aspMainTextEnd[];
+extern u64 aspMainDataStart[];
+extern u64 aspMainDataEnd[];
+
+extern u64 gspF3DZEX2_NoN_PosLight_fifoTextStart[];
+extern u64 gspF3DZEX2_NoN_PosLight_fifoTextEnd[];
+extern u64 gspF3DZEX2_NoN_PosLight_fifoDataStart[];
+extern u64 gspF3DZEX2_NoN_PosLight_fifoDataEnd[];
+
+extern u64 gspS2DEX2_fifoTextStart[];
+extern u64 gspS2DEX2_fifoTextEnd[];
+extern u64 gspS2DEX2_fifoDataStart[];
+extern u64 gspS2DEX2_fifoDataEnd[];
+
+#endif
diff --git a/include/variables.h b/include/variables.h
index e865f890e..f3d668b2b 100644
--- a/include/variables.h
+++ b/include/variables.h
@@ -1,5 +1,5 @@
-#ifndef _VARIABLES_H_
-#define _VARIABLES_H_
+#ifndef VARIABLES_H
+#define VARIABLES_H
#include "z64.h"
#include "segment_symbols.h"
@@ -37,8 +37,7 @@ extern FaultDrawer* sFaultDrawContext;
extern FaultDrawer sFaultDrawerDefault;
extern s32 gLoadLogSeverity;
extern s32 gLoad2LogSeverity;
-extern StackEntry* sStackInfoListStart;
-extern StackEntry* sStackInfoListEnd;
+
// extern UNK_TYPE1 sGfxPrintFontTLUT;
// extern UNK_TYPE1 sGfxPrintRainbowTLUT;
// extern UNK_TYPE1 sGfxPrintRainbowData;
@@ -282,43 +281,24 @@ extern f64 D_800994C8;
extern char gBuildTeam[];
extern char gBuildDate[];
extern char gBuildMakeOption[];
-// extern StackEntry sBootThreadInfo;
-// extern OSThread sIdleThread;
-// extern u8 sIdleThreadStack[0x400];
-// extern StackEntry sIdleThreadInfo;
-// extern u8 sBootThreadStack[0x400];
+
extern IrqMgr gIrqMgr;
-// extern u8 sIrqMgrStack[0x500];
-// extern StackEntry sIrqMgrStackInfo;
-// extern OSThread gMainThread;
-// extern u8 sMainStack[0x900];
-// extern StackEntry sMainStackInfo;
-// extern OSMesg sPiMgrCmdBuff[50];
-// extern OSMesgQueue gPiMgrCmdQ;
+
extern OSViMode gViConfigMode;
extern u8 D_8009B290;
-extern StackEntry sDmaMgrStackInfo;
-extern u16 numDmaEntries;
-extern OSMesgQueue sDmaMgrMsgQueue;
-extern OSMesg sDmaMgrMsgs[32];
-extern OSThread sDmaMgrThread;
-extern u8 sDmaMgrStack[0x500];
+
extern u8 sYaz0DataBuffer[0x400];
extern u8* sYaz0CurDataEnd;
extern u32 sYaz0CurRomStart;
extern u32 sYaz0CurSize;
extern u8* sYaz0MaxPtr;
-extern u8* D_8009BE20;
+extern void* gYaz0DecompressDstEnd;
// extern UNK_TYPE4 D_8009BE30;
// extern UNK_TYPE4 D_8009BE34;
// extern FaultClient romInfoFaultClient;
-extern FaultThreadStruct* sFaultContext;
-extern f32 D_8009BE54;
-extern u32 faultCustomOptions;
-extern u32 faultCopyToLog;
-extern u8 sFaultStack[0x600];
-extern StackEntry sFaultThreadInfo;
+
extern FaultThreadStruct gFaultStruct;
+
extern FaultDrawer sFaultDrawerStruct;
// extern UNK_TYPE4 D_8009CD10;
extern u32 sRandFloat;
@@ -333,10 +313,7 @@ extern UNK_TYPE1 D_8009CF60;
extern OSThread __osThreadSave;
extern OSPiHandle D_8009D130;
extern OSPiHandle D_8009D1A8;
-// extern OSThread D_8009D220;
-// extern u8 piManagerStack[0x1000];
-// extern OSMesgQueue D_8009E3D0;
-// extern OSMesg D_8009E3E8[1];
+
extern OSMesg D_8009E3F0[1];
extern OSMesgQueue __osPiAccessQueue;
extern __OSInode __osPfsInodeCache;
@@ -348,20 +325,11 @@ extern u32 __osViIntrCount;
extern u32 __osTimerCounter;
extern OSPifRam __osPfsPifRam;
extern OSPiHandle CartRomHandle;
-extern OSThread viThread;
-extern u8 viThreadStack[0x1000];
-extern OSMesgQueue viEventQueue;
-// extern OSMesg viEventBuf[5];
-// extern OSIoMesg viRetraceMsg;
-// extern OSIoMesg viCounterMsg;
-extern u16 viRetrace;
+
extern DmaEntry dmadata[1568];
// extern UNK_TYPE1 D_80186028;
extern u64 aspMainTextStart[];
-extern ActorInit En_A_Obj_InitVars;
-extern ColliderCylinderInit enAObjCylinderInit;
-extern InitChainEntry enAObjInitVar;
-extern Gfx* enAObjDisplayLists[2];
+
extern u8 sDropTable[DROP_TABLE_SIZE * DROP_TABLE_NUMBER];
extern u8 sDropTableAmounts[DROP_TABLE_SIZE * DROP_TABLE_NUMBER];
extern s32 D_801AE194[32];
@@ -409,416 +377,13 @@ extern EffectSsOverlay gParticleOverlayTable[39];
// extern s32 sEntryIndex;
// extern u32 sCurrentBit;
// extern s32 sTimer;
-extern f32 actorMovementScale;
-extern TargetRangeParams gTargetRanges[];
-extern s16 D_801AED48[8];
-// extern UNK_TYPE4 D_801AED58;
-extern Color_RGBA8 actorDefaultHitColor;
-// extern UNK_TYPE1 D_801AED8C;
-// extern UNK_TYPE4 D_801AED98;
-// extern UNK_TYPE4 D_801AEDA4;
-// extern UNK_TYPE1 D_801AEDB0;
-// extern UNK_TYPE4 D_801AEDD4;
-// extern UNK_TYPE4 D_801AEE28;
-// extern UNK_TYPE4 D_801AEE30;
-// extern UNK_TYPE4 D_801AEE38;
-// extern UNK_TYPE2 D_801AEE4C;
-extern Gfx D_801AEF88[];
-extern Gfx D_801AEFA0[];
-// extern UNK_TYPE1 D_801AEFB8;
-// extern UNK_TYPE1 D_801AEFBC;
-// extern UNK_TYPE1 D_801AEFC0;
+
extern ActorOverlay gActorOverlayTable[ACTOR_ID_MAX];
-extern s32 gMaxActorId;
+extern ActorId gMaxActorId;
extern BgCheckSceneSubdivisionEntry sSceneSubdivisionList[];
extern BgSpecialSceneMaxObjects sCustomDynapolyMem[];
// extern UNK_TYPE1 D_801B4708;
-// extern UNK_TYPE1 D_801B4710;
-// extern UNK_TYPE1 D_801B4738;
-// extern UNK_TYPE1 D_801B4768;
-// extern UNK_TYPE1 D_801B4798;
-// extern UNK_TYPE1 D_801B47CC;
-// extern UNK_TYPE1 D_801B47F0;
-// extern UNK_TYPE1 D_801B4824;
-// extern UNK_TYPE1 D_801B4848;
-// extern UNK_TYPE1 D_801B486C;
-// extern UNK_TYPE1 D_801B4890;
-// extern UNK_TYPE1 D_801B48B0;
-// extern UNK_TYPE1 D_801B48D4;
-// extern UNK_TYPE1 D_801B48F8;
-// extern UNK_TYPE1 D_801B491C;
-// extern UNK_TYPE1 D_801B4944;
-// extern UNK_TYPE1 D_801B4974;
-// extern UNK_TYPE1 D_801B49A4;
-// extern UNK_TYPE1 D_801B49D4;
-// extern UNK_TYPE1 D_801B4A04;
-// extern UNK_TYPE1 D_801B4A34;
-// extern UNK_TYPE1 D_801B4A5C;
-// extern UNK_TYPE1 D_801B4A8C;
-// extern UNK_TYPE1 D_801B4ABC;
-// extern UNK_TYPE1 D_801B4AE0;
-// extern UNK_TYPE1 D_801B4B08;
-// extern UNK_TYPE1 D_801B4B38;
-// extern UNK_TYPE1 D_801B4B60;
-// extern UNK_TYPE1 D_801B4B90;
-// extern UNK_TYPE1 D_801B4BB8;
-// extern UNK_TYPE1 D_801B4BDC;
-// extern UNK_TYPE1 D_801B4C04;
-// extern UNK_TYPE1 D_801B4C34;
-// extern UNK_TYPE1 D_801B4C5C;
-// extern UNK_TYPE1 D_801B4C84;
-// extern UNK_TYPE1 D_801B4CAC;
-// extern UNK_TYPE1 D_801B4CD4;
-// extern UNK_TYPE1 D_801B4CFC;
-// extern UNK_TYPE1 D_801B4D24;
-// extern UNK_TYPE1 D_801B4D34;
-// extern UNK_TYPE1 D_801B4D44;
-// extern UNK_TYPE1 D_801B4D68;
-// extern UNK_TYPE1 D_801B4D8C;
-// extern UNK_TYPE1 D_801B4DB0;
-// extern UNK_TYPE1 D_801B4DD4;
-// extern UNK_TYPE1 D_801B4DF8;
-// extern UNK_TYPE1 D_801B4E2C;
-// extern UNK_TYPE1 D_801B4E5C;
-// extern UNK_TYPE1 D_801B4E90;
-// extern UNK_TYPE1 D_801B4EB4;
-// extern UNK_TYPE1 D_801B4ED8;
-// extern UNK_TYPE1 D_801B4EDC;
-// extern UNK_TYPE1 D_801B4EE4;
-// extern UNK_TYPE1 D_801B4EF0;
-// extern UNK_TYPE1 D_801B4EF4;
-// extern UNK_TYPE1 D_801B4EF8;
-// extern UNK_TYPE1 D_801B4F20;
-// extern UNK_TYPE1 D_801B4F50;
-// extern UNK_TYPE1 D_801B4F78;
-// extern UNK_TYPE1 D_801B4FA0;
-// extern UNK_TYPE1 D_801B4FC8;
-// extern UNK_TYPE1 D_801B4FF0;
-// extern UNK_TYPE1 D_801B5018;
-// extern UNK_TYPE1 D_801B5034;
-// extern UNK_TYPE1 D_801B5050;
-// extern UNK_TYPE1 D_801B506C;
-// extern UNK_TYPE1 D_801B507C;
-// extern UNK_TYPE1 D_801B5094;
-// extern UNK_TYPE1 D_801B50BC;
-// extern UNK_TYPE1 D_801B50EC;
-// extern UNK_TYPE1 D_801B511C;
-// extern UNK_TYPE1 D_801B5150;
-// extern UNK_TYPE1 D_801B5180;
-// extern UNK_TYPE1 D_801B51A8;
-// extern UNK_TYPE1 D_801B51D8;
-// extern UNK_TYPE1 D_801B51FC;
-// extern UNK_TYPE1 D_801B5220;
-// extern UNK_TYPE1 D_801B5250;
-// extern UNK_TYPE1 D_801B5280;
-// extern UNK_TYPE1 D_801B52B0;
-// extern UNK_TYPE1 D_801B52E0;
-// extern UNK_TYPE1 D_801B5308;
-// extern UNK_TYPE1 D_801B5338;
-// extern UNK_TYPE1 D_801B535C;
-// extern UNK_TYPE1 D_801B5380;
-// extern UNK_TYPE1 D_801B53A4;
-// extern UNK_TYPE1 D_801B53C8;
-// extern UNK_TYPE1 D_801B53EC;
-// extern UNK_TYPE1 D_801B5410;
-// extern UNK_TYPE1 D_801B5434;
-// extern UNK_TYPE1 D_801B5458;
-// extern UNK_TYPE1 D_801B547C;
-// extern UNK_TYPE1 D_801B54A0;
-// extern UNK_TYPE1 D_801B54C4;
-// extern UNK_TYPE1 D_801B54E8;
-// extern UNK_TYPE1 D_801B550C;
-// extern UNK_TYPE1 D_801B5530;
-// extern UNK_TYPE1 D_801B5554;
-// extern UNK_TYPE1 D_801B5578;
-// extern UNK_TYPE1 D_801B559C;
-// extern UNK_TYPE1 D_801B55C0;
-// extern UNK_TYPE1 D_801B55E4;
-// extern UNK_TYPE1 D_801B5608;
-// extern UNK_TYPE1 D_801B562C;
-// extern UNK_TYPE1 D_801B5650;
-// extern UNK_TYPE1 D_801B5674;
-// extern UNK_TYPE1 D_801B5698;
-// extern UNK_TYPE1 D_801B56BC;
-// extern UNK_TYPE1 D_801B56E0;
-// extern UNK_TYPE1 D_801B5704;
-// extern UNK_TYPE1 D_801B5728;
-// extern UNK_TYPE1 D_801B574C;
-// extern UNK_TYPE1 D_801B5770;
-// extern UNK_TYPE1 D_801B577C;
-// extern UNK_TYPE1 D_801B57A4;
-// extern UNK_TYPE1 D_801B57CC;
-// extern UNK_TYPE1 D_801B57F4;
-// extern UNK_TYPE1 D_801B5824;
-// extern UNK_TYPE1 D_801B5834;
-// extern UNK_TYPE1 D_801B5844;
-// extern UNK_TYPE1 D_801B5864;
-// extern UNK_TYPE1 D_801B5884;
-// extern UNK_TYPE1 D_801B58A0;
-// extern UNK_TYPE1 D_801B58BC;
-// extern UNK_TYPE1 D_801B58D8;
-// extern UNK_TYPE1 D_801B58F4;
-// extern UNK_TYPE1 D_801B5904;
-// extern UNK_TYPE1 D_801B5928;
-// extern UNK_TYPE1 D_801B5950;
-// extern UNK_TYPE1 D_801B5978;
-// extern UNK_TYPE1 D_801B59A8;
-// extern UNK_TYPE1 D_801B59D0;
-// extern UNK_TYPE1 D_801B59F4;
-// extern UNK_TYPE1 D_801B5A00;
-// extern UNK_TYPE1 D_801B5A0C;
-// extern UNK_TYPE1 D_801B5A30;
-// extern UNK_TYPE1 D_801B5A64;
-// extern UNK_TYPE1 D_801B5A94;
-// extern UNK_TYPE1 D_801B5ABC;
-// extern UNK_TYPE1 D_801B5AF0;
-// extern UNK_TYPE1 D_801B5B18;
-// extern UNK_TYPE1 D_801B5B40;
-// extern UNK_TYPE1 D_801B5B70;
-// extern UNK_TYPE1 D_801B5B98;
-// extern UNK_TYPE1 D_801B5BC8;
-// extern UNK_TYPE1 D_801B5BFC;
-// extern UNK_TYPE1 D_801B5C30;
-// extern UNK_TYPE1 D_801B5C58;
-// extern UNK_TYPE1 D_801B5C80;
-// extern UNK_TYPE1 D_801B5CB0;
-// extern UNK_TYPE1 D_801B5CCC;
-// extern UNK_TYPE1 D_801B5CE8;
-// extern UNK_TYPE1 D_801B5D10;
-// extern UNK_TYPE1 D_801B5D40;
-// extern UNK_TYPE1 D_801B5D74;
-// extern UNK_TYPE1 D_801B5D9C;
-// extern UNK_TYPE1 D_801B5DC4;
-// extern UNK_TYPE1 D_801B5DD4;
-// extern UNK_TYPE1 D_801B5DFC;
-// extern UNK_TYPE1 D_801B5E2C;
-// extern UNK_TYPE1 D_801B5E48;
-// extern UNK_TYPE1 D_801B5E64;
-// extern UNK_TYPE1 D_801B5E8C;
-// extern UNK_TYPE1 D_801B5EB4;
-// extern UNK_TYPE1 D_801B5EDC;
-// extern UNK_TYPE1 D_801B5F0C;
-// extern UNK_TYPE1 D_801B5F34;
-// extern UNK_TYPE1 D_801B5F5C;
-// extern UNK_TYPE1 D_801B5F8C;
-// extern UNK_TYPE1 D_801B5FB0;
-// extern UNK_TYPE1 D_801B5FD4;
-// extern UNK_TYPE1 D_801B5FF8;
-// extern UNK_TYPE1 D_801B601C;
-// extern UNK_TYPE1 D_801B6044;
-// extern UNK_TYPE1 D_801B6074;
-// extern UNK_TYPE1 D_801B60A4;
-// extern UNK_TYPE1 D_801B60D8;
-// extern UNK_TYPE1 D_801B610C;
-// extern UNK_TYPE1 D_801B6130;
-// extern UNK_TYPE1 D_801B6154;
-// extern UNK_TYPE1 D_801B617C;
-// extern UNK_TYPE1 D_801B61AC;
-// extern UNK_TYPE1 D_801B61DC;
-// extern UNK_TYPE1 D_801B620C;
-// extern UNK_TYPE1 D_801B623C;
-// extern UNK_TYPE1 D_801B626C;
-// extern UNK_TYPE1 D_801B6294;
-// extern UNK_TYPE1 D_801B62C4;
-// extern UNK_TYPE1 D_801B62F4;
-// extern UNK_TYPE1 D_801B631C;
-// extern UNK_TYPE1 D_801B634C;
-// extern UNK_TYPE1 D_801B6374;
-// extern UNK_TYPE1 D_801B63A4;
-// extern UNK_TYPE1 D_801B63CC;
-// extern UNK_TYPE1 D_801B63FC;
-// extern UNK_TYPE1 D_801B6418;
-// extern UNK_TYPE1 D_801B6434;
-// extern UNK_TYPE1 D_801B645C;
-// extern UNK_TYPE1 D_801B648C;
-// extern UNK_TYPE1 D_801B64B4;
-// extern UNK_TYPE1 D_801B64D8;
-// extern UNK_TYPE1 D_801B64FC;
-// extern UNK_TYPE1 D_801B652C;
-// extern UNK_TYPE1 D_801B655C;
-// extern UNK_TYPE1 D_801B6584;
-// extern UNK_TYPE1 D_801B65AC;
-// extern UNK_TYPE1 D_801B65DC;
-// extern UNK_TYPE1 D_801B660C;
-// extern UNK_TYPE1 D_801B6640;
-// extern UNK_TYPE1 D_801B6674;
-// extern UNK_TYPE1 D_801B6698;
-// extern UNK_TYPE1 D_801B66C0;
-// extern UNK_TYPE1 D_801B66E8;
-// extern UNK_TYPE1 D_801B6710;
-// extern UNK_TYPE1 D_801B6740;
-// extern UNK_TYPE1 D_801B6774;
-// extern UNK_TYPE1 D_801B679C;
-// extern UNK_TYPE1 D_801B67C4;
-// extern UNK_TYPE1 D_801B67EC;
-// extern UNK_TYPE1 D_801B681C;
-// extern UNK_TYPE1 D_801B684C;
-// extern UNK_TYPE1 D_801B6880;
-// extern UNK_TYPE1 D_801B68A8;
-// extern UNK_TYPE1 D_801B68D0;
-// extern UNK_TYPE1 D_801B68F8;
-// extern UNK_TYPE1 D_801B692C;
-// extern UNK_TYPE1 D_801B6954;
-// extern UNK_TYPE1 D_801B697C;
-// extern UNK_TYPE1 D_801B69A4;
-// extern UNK_TYPE1 D_801B69CC;
-// extern UNK_TYPE1 D_801B69FC;
-// extern UNK_TYPE1 D_801B6A30;
-// extern UNK_TYPE1 D_801B6A58;
-// extern UNK_TYPE1 D_801B6A80;
-// extern UNK_TYPE1 D_801B6AA8;
-// extern UNK_TYPE1 D_801B6AD0;
-// extern UNK_TYPE1 D_801B6AF8;
-// extern UNK_TYPE1 D_801B6B28;
-// extern UNK_TYPE1 D_801B6B50;
-// extern UNK_TYPE1 D_801B6B78;
-// extern UNK_TYPE1 D_801B6BA0;
-// extern UNK_TYPE1 D_801B6BC8;
-// extern UNK_TYPE1 D_801B6BF0;
-// extern UNK_TYPE1 D_801B6C18;
-// extern UNK_TYPE1 D_801B6C48;
-// extern UNK_TYPE1 D_801B6C70;
-// extern UNK_TYPE1 D_801B6C98;
-// extern UNK_TYPE1 D_801B6CC0;
-// extern UNK_TYPE1 D_801B6CF0;
-// extern UNK_TYPE1 D_801B6D24;
-// extern UNK_TYPE1 D_801B6D4C;
-// extern UNK_TYPE1 D_801B6D74;
-// extern UNK_TYPE1 D_801B6D90;
-// extern UNK_TYPE1 D_801B6DB8;
-// extern UNK_TYPE1 D_801B6DE0;
-// extern UNK_TYPE1 D_801B6E08;
-// extern UNK_TYPE1 D_801B6E30;
-// extern UNK_TYPE1 D_801B6E58;
-// extern UNK_TYPE1 D_801B6E80;
-// extern UNK_TYPE1 D_801B6EA8;
-// extern UNK_TYPE1 D_801B6ED0;
-// extern UNK_TYPE1 D_801B6EF8;
-// extern UNK_TYPE1 D_801B6F20;
-// extern UNK_TYPE1 D_801B6F50;
-// extern UNK_TYPE1 D_801B6F78;
-// extern UNK_TYPE1 D_801B6FA0;
-// extern UNK_TYPE1 D_801B6FB0;
-// extern UNK_TYPE1 D_801B6FD8;
-// extern UNK_TYPE1 D_801B7008;
-// extern UNK_TYPE1 D_801B703C;
-// extern UNK_TYPE1 D_801B7064;
-// extern UNK_TYPE1 D_801B708C;
-// extern UNK_TYPE1 D_801B70BC;
-// extern UNK_TYPE1 D_801B70E4;
-// extern UNK_TYPE1 D_801B7114;
-// extern UNK_TYPE1 D_801B7148;
-// extern UNK_TYPE1 D_801B7170;
-// extern UNK_TYPE1 D_801B71A0;
-// extern UNK_TYPE1 D_801B71D4;
-// extern UNK_TYPE1 D_801B7204;
-// extern UNK_TYPE1 D_801B7210;
-// extern UNK_TYPE1 D_801B7244;
-// extern UNK_TYPE1 D_801B7278;
-// extern UNK_TYPE1 D_801B729C;
-// extern UNK_TYPE1 D_801B72C0;
-// extern UNK_TYPE1 D_801B72E4;
-// extern UNK_TYPE1 D_801B7308;
-// extern UNK_TYPE1 D_801B732C;
-// extern UNK_TYPE1 D_801B7354;
-// extern UNK_TYPE1 D_801B7384;
-// extern UNK_TYPE1 D_801B73AC;
-// extern UNK_TYPE1 D_801B73D4;
-// extern UNK_TYPE1 D_801B74C4;
-// extern UNK_TYPE1 D_801B759C;
-// extern UNK_TYPE1 D_801B75F4;
-// extern UNK_TYPE1 D_801B767C;
-// extern UNK_TYPE1 D_801B7684;
-// extern UNK_TYPE1 D_801B768C;
-// extern UNK_TYPE1 D_801B7694;
-// extern UNK_TYPE1 D_801B769C;
-// extern UNK_TYPE1 D_801B76A4;
-// extern UNK_TYPE1 D_801B76AC;
-// extern UNK_TYPE1 D_801B777C;
-// extern UNK_TYPE1 D_801B784C;
-// extern UNK_TYPE1 D_801B791C;
-// extern UNK_TYPE1 D_801B7984;
-// extern UNK_TYPE1 D_801B79EC;
-// extern UNK_TYPE1 D_801B79F4;
-// extern UNK_TYPE1 D_801B7AE4;
-// extern UNK_TYPE1 D_801B7B14;
-// extern UNK_TYPE1 D_801B7B44;
-// extern UNK_TYPE1 D_801B7B74;
-// extern UNK_TYPE1 D_801B7BA4;
-// extern UNK_TYPE1 D_801B7BAC;
-// extern UNK_TYPE1 D_801B7BDC;
-// extern UNK_TYPE1 D_801B7C0C;
-// extern UNK_TYPE1 D_801B7C3C;
-// extern UNK_TYPE1 D_801B7C44;
-// extern UNK_TYPE1 D_801B7C54;
-// extern UNK_TYPE1 D_801B7C5C;
-// extern UNK_TYPE1 D_801B7C64;
-// extern UNK_TYPE1 D_801B7D34;
-// extern UNK_TYPE1 D_801B7D3C;
-// extern UNK_TYPE1 D_801B7D44;
-// extern UNK_TYPE1 D_801B7D4C;
-// extern UNK_TYPE1 D_801B7D54;
-// extern UNK_TYPE1 D_801B7D5C;
-// extern UNK_TYPE1 D_801B7D64;
-// extern UNK_TYPE1 D_801B7DCC;
-// extern UNK_TYPE1 D_801B7DD4;
-// extern UNK_TYPE1 D_801B7E3C;
-// extern UNK_TYPE1 D_801B7F0C;
-// extern UNK_TYPE1 D_801B7F14;
-// extern UNK_TYPE1 D_801B7F1C;
-// extern UNK_TYPE1 D_801B7F24;
-// extern UNK_TYPE1 D_801B7F2C;
-// extern UNK_TYPE1 D_801B7F34;
-// extern UNK_TYPE1 D_801B7F3C;
-// extern UNK_TYPE1 D_801B7FAC;
-// extern UNK_TYPE1 D_801B807C;
-// extern UNK_TYPE1 D_801B8084;
-// extern UNK_TYPE1 D_801B8154;
-// extern UNK_TYPE1 D_801B8224;
-// extern UNK_TYPE1 D_801B82F4;
-// extern UNK_TYPE1 D_801B82FC;
-// extern UNK_TYPE1 D_801B8304;
-// extern UNK_TYPE1 D_801B83D4;
-// extern UNK_TYPE1 D_801B83DC;
-// extern UNK_TYPE1 D_801B8434;
-// extern UNK_TYPE1 D_801B843C;
-// extern UNK_TYPE1 D_801B8444;
-// extern UNK_TYPE1 D_801B8514;
-// extern UNK_TYPE1 D_801B85E4;
-// extern UNK_TYPE1 D_801B8664;
-// extern UNK_TYPE1 D_801B8754;
-// extern UNK_TYPE1 D_801B875C;
-// extern UNK_TYPE1 D_801B87C4;
-// extern UNK_TYPE1 D_801B8894;
-// extern UNK_TYPE1 D_801B8964;
-// extern UNK_TYPE1 D_801B8A34;
-// extern UNK_TYPE1 D_801B8B04;
-// extern UNK_TYPE1 D_801B8BD4;
-// extern UNK_TYPE1 D_801B8CAC;
-// extern UNK_TYPE1 D_801B8CB4;
-// extern UNK_TYPE1 D_801B8D8C;
-// extern UNK_TYPE1 D_801B8E5C;
-// extern UNK_TYPE1 D_801B8F2C;
-// extern UNK_TYPE1 D_801B8F34;
-// extern UNK_TYPE1 D_801B900C;
-// extern UNK_TYPE1 D_801B90D4;
-// extern UNK_TYPE1 D_801B91A4;
-// extern UNK_TYPE1 D_801B91AC;
-// extern UNK_TYPE1 D_801B927C;
-// extern UNK_TYPE1 D_801B9354;
-// extern UNK_TYPE1 D_801B9424;
-// extern UNK_TYPE1 D_801B94F4;
-// extern UNK_TYPE1 D_801B95C4;
-// extern UNK_TYPE1 D_801B95CC;
-// extern UNK_TYPE1 D_801B969C;
-// extern UNK_TYPE1 D_801B976C;
-// extern UNK_TYPE1 D_801B979C;
-// extern CameraStateParams cameraStates[91];
-// extern UNK_TYPE1 D_801B9CE2;
-// extern UNK_PTR D_801B9CE4;
-// extern camera_update_func cameraUpdateFuncs[71];
-// extern UNK_TYPE2 D_801B9E04;
-// extern UNK_TYPE4 D_801B9E08;
+
// extern UNK_TYPE4 D_801B9E0C;
// extern UNK_TYPE4 D_801B9E10;
// extern UNK_TYPE4 D_801B9E14;
@@ -833,8 +398,8 @@ extern BgSpecialSceneMaxObjects sCustomDynapolyMem[];
// extern UNK_TYPE1 D_801B9E84;
// extern UNK_TYPE4 D_801B9EB4;
// extern UNK_TYPE4 D_801B9ED4;
-// extern UNK_TYPE4 D_801B9F04;
-// extern UNK_TYPE2 D_801B9F0C;
+// extern UNK_TYPE4 sEarthquakeFreq;
+// extern UNK_TYPE2 sEarthquakeTimer;
extern UNK_TYPE4 D_801B9F10;
extern DamageTable sDamageTablePresets[23];
extern f32 damageMultipliers[16];
@@ -866,24 +431,11 @@ extern EffectShieldParticleInit shieldParticleInitWood;
// extern UNK_TYPE2 D_801BB0FC;
// extern UNK_TYPE1 D_801BB100;
-extern u8 D_801BB12C;
+extern u8 gOpeningEntranceIndex;
-// extern UNK_TYPE1 D_801BC210;
-extern Gfx D_801BC240[9];
-extern Gfx D_801BC288[3];
-// extern UNK_TYPE1 D_801BC41E;
-extern ActorCutscene actorCutscenesGlobalCutscenes[8];
-extern s16 actorCutsceneCurrent;
-extern s16 actorCutsceneCurrentLength;
-extern s16 actorCutsceneEnding;
-extern s16 actorCutsceneCurrentCamera;
-extern Actor* actorCutsceneCurrentCutsceneActor;
-// extern UNK_TYPE4 actorCutsceneStartMethod;
-extern PlayState* actorCutscenesPlayState;
-extern s16 actorCutsceneReturnCamera;
-extern s16 D_801BD8C6;
+extern ActorCutscene sGlobalCutsceneList[8];
extern GameStateOverlay gGameStateOverlayTable[];
-extern s32 graphNumGameStates;
+extern s32 gGraphNumGameStates;
// extern UNK_TYPE2 D_801BDA70;
// extern UNK_TYPE2 D_801BDA74;
// extern UNK_TYPE2 D_801BDA78;
@@ -1018,287 +570,17 @@ extern UNK_PTR D_801BEC14;
// extern UNK_TYPE2 D_801BF5B0;
extern UNK_PTR D_801BF5C0;
// extern UNK_TYPE1 D_801BF68C;
-// extern UNK_TYPE1 D_801BF6C0;
-// extern UNK_TYPE1 D_801BF79E;
-// extern UNK_TYPE2 D_801BF884;
-// extern UNK_TYPE2 D_801BF888;
-// extern UNK_TYPE2 D_801BF88C;
-// extern UNK_TYPE2 D_801BF890;
-// extern UNK_TYPE2 D_801BF898;
-// extern UNK_TYPE2 D_801BF89C;
-// extern UNK_TYPE2 sMagicMeterOutlinePrimRed;
-// extern UNK_TYPE2 sMagicMeterOutlinePrimGreen;
-// extern UNK_TYPE2 sMagicMeterOutlinePrimBlue;
-// extern UNK_TYPE2 sMagicBorderRatio;
-// extern UNK_TYPE2 sMagicBorderStep;
-// extern UNK_TYPE2 sEnvTimerType;
-// extern UNK_TYPE2 sEnvTimerActive;
-// extern UNK_TYPE2 sPostmanBunnyHoodState;
-// extern UNK_TYPE4 sTimerPausedOsTime;
-// extern UNK_TYPE4 sBottleTimerPausedOsTime;
-// extern UNK_TYPE4 D_801BF8F4;
-// extern UNK_TYPE4 D_801BF8F8;
-// extern UNK_TYPE4 D_801BF8FC;
-// extern UNK_TYPE4 D_801BF930;
-// extern UNK_TYPE4 D_801BF934;
-// extern UNK_TYPE1 sIsTimerPaused;
-// extern UNK_TYPE1 D_801BF96A;
-// extern UNK_TYPE1 sIsBottleTimerPaused;
-// extern UNK_TYPE1 D_801BF96E;
-// extern UNK_TYPE2 sTimerId;
-// extern UNK_TYPE1 D_801BF972;
-// extern UNK_TYPE2 D_801BF974;
-// extern UNK_TYPE2 D_801BF978;
-// extern UNK_TYPE2 D_801BF97C;
-// extern UNK_TYPE4 D_801BF980;
-// extern UNK_TYPE1 D_801BF988;
-// extern UNK_TYPE1 D_801BF998;
-// extern UNK_TYPE2 D_801BF9B0;
-// extern UNK_TYPE1 D_801BF9B4;
-// extern UNK_TYPE1 D_801BF9BC;
-// extern UNK_TYPE1 D_801BF9C4;
-// extern UNK_TYPE1 D_801BF9C8;
-// extern UNK_TYPE1 D_801BF9CC;
-// extern UNK_TYPE2 D_801BF9D4;
-// extern UNK_TYPE2 D_801BF9D6;
-// extern UNK_TYPE2 D_801BF9D8;
-// extern UNK_TYPE2 D_801BF9DA;
-// extern UNK_TYPE2 D_801BF9DC;
-// extern UNK_TYPE2 D_801BF9DE;
-// extern UNK_TYPE2 D_801BF9E0;
-// extern UNK_TYPE2 D_801BF9E2;
-// extern UNK_TYPE2 D_801BF9E4;
-// extern UNK_TYPE2 D_801BF9E6;
-// extern UNK_TYPE2 D_801BF9E8;
-// extern UNK_TYPE2 D_801BF9EA;
-// extern UNK_TYPE2 D_801BF9EC;
-// extern UNK_TYPE2 D_801BF9F0;
-// extern UNK_TYPE2 D_801BF9F4;
-// extern UNK_TYPE2 D_801BF9F8;
-// extern UNK_TYPE2 D_801BF9FC;
-// extern UNK_TYPE2 D_801BFA00;
-// extern UNK_TYPE2 D_801BFA04;
-// extern UNK_TYPE2 D_801BFA1C;
-// extern UNK_TYPE2 D_801BFA34;
-// extern UNK_TYPE2 D_801BFA4C;
-// extern UNK_TYPE2 D_801BFA64;
-// extern UNK_TYPE2 D_801BFA74;
-// extern UNK_TYPE4 sPostmanTimerInputBtnAPressed;
-// extern UNK_TYPE1 D_801BFAB0;
-// extern UNK_TYPE1 D_801BFAB8;
-// extern UNK_TYPE1 D_801BFAC4;
-// extern UNK_TYPE1 D_801BFACC;
-// extern UNK_TYPE1 D_801BFAD4;
-// extern UNK_TYPE2 D_801BFAF4;
-// extern UNK_TYPE2 D_801BFAF6;
-// extern UNK_TYPE2 D_801BFAF8;
-// extern UNK_TYPE2 D_801BFAFA;
-// extern UNK_TYPE1 D_801BFAFC;
-// extern UNK_TYPE1 D_801BFB04;
-// extern UNK_TYPE1 D_801BFB0C;
-// extern UNK_TYPE1 D_801BFB14;
-// extern UNK_TYPE1 D_801BFB1C;
-// extern UNK_TYPE1 D_801BFB24;
-// extern UNK_TYPE2 D_801BFB2C;
-// extern UNK_TYPE2 D_801BFB30;
-// extern UNK_TYPE2 D_801BFB34;
-// extern UNK_TYPE1 D_801BFB38;
-// extern UNK_TYPE1 D_801BFB6C;
-// extern UNK_TYPE2 D_801BFBCC;
-// extern UNK_TYPE2 D_801BFBD0;
-// extern UNK_TYPE2 D_801BFBD4;
-// extern UNK_TYPE2 D_801BFBD8;
-// extern UNK_TYPE2 D_801BFBDC;
-// extern UNK_TYPE2 D_801BFBE0;
-// extern UNK_TYPE2 D_801BFBE4;
-// extern UNK_TYPE2 D_801BFBE8;
-// extern UNK_TYPE1 D_801BFBEC;
-// extern UNK_TYPE1 D_801BFBF0;
-// extern UNK_TYPE1 D_801BFBF4;
-// extern UNK_TYPE1 D_801BFBF8;
-// extern UNK_TYPE1 D_801BFBFC;
-// extern UNK_TYPE1 D_801BFC00;
-// extern UNK_TYPE1 D_801BFC04;
-// extern UNK_TYPE1 D_801BFC08;
-// extern UNK_TYPE1 D_801BFC0C;
-// extern UNK_TYPE1 D_801BFC10;
-// extern UNK_TYPE1 D_801BFC14;
-// extern UNK_TYPE1 D_801BFC40;
-// extern UNK_TYPE2 D_801BFC50;
-// extern UNK_TYPE2 D_801BFC60;
-// extern UNK_TYPE2 D_801BFC62;
-// extern UNK_TYPE2 D_801BFC64;
-// extern UNK_TYPE2 D_801BFC6C;
-// extern UNK_TYPE2 D_801BFC7C;
-// extern UNK_TYPE1 D_801BFC8C;
-// extern UNK_TYPE2 D_801BFC98;
-// extern UNK_TYPE2 D_801BFCA8;
-// extern UNK_TYPE1 D_801BFCB8;
-// extern UNK_TYPE4 D_801BFCC4;
-// extern UNK_TYPE2 sTimerStateTimer;
-// extern UNK_TYPE2 sTimerDigits;
-// extern UNK_TYPE2 D_801BFCEA;
-// extern UNK_TYPE2 D_801BFCEC;
-// extern UNK_TYPE2 D_801BFCEE;
-// extern UNK_TYPE2 D_801BFCF0;
-// extern UNK_TYPE2 D_801BFCF2;
-// extern UNK_TYPE2 D_801BFCF4;
-// extern UNK_TYPE2 sTimerBeepSfxSeconds;
-// extern UNK_TYPE2 D_801BFCFC;
-// extern UNK_TYPE2 D_801BFD0C;
-// extern UNK_TYPE1 D_801BFD1C;
-// extern UNK_TYPE1 D_801BFD24;
-// extern UNK_TYPE1 D_801BFD2C;
-// extern UNK_TYPE1 D_801BFD40;
-// extern UNK_TYPE1 D_801BFD54;
-// extern UNK_TYPE1 D_801BFD64;
-// extern UNK_TYPE2 D_801BFD6C;
-// extern UNK_TYPE1 D_801BFD84;
-// extern UNK_TYPE1 D_801BFD8C;
-// extern UNK_TYPE1 D_801BFD94;
-// extern UNK_TYPE2 D_801BFD98;
-// extern UNK_TYPE1 D_801BFDD0;
-// extern UNK_TYPE1 D_801BFE00;
-// extern UNK_TYPE1 D_801BFE14;
-// extern UNK_TYPE2 D_801BFF34;
-// extern UNK_TYPE1 D_801BFF90;
-extern u8 gPlayerModelTypes[][5];
-// extern UNK_TYPE1 D_801BFFFC;
-// extern UNK_TYPE1 D_801C0024;
-// extern UNK_TYPE1 D_801C0034;
-// extern UNK_TYPE1 D_801C005C;
-// extern UNK_TYPE1 D_801C0084;
-// extern UNK_TYPE1 D_801C00AC;
-// extern UNK_TYPE1 D_801C00BC;
-// extern UNK_TYPE1 D_801C00D4;
-// extern UNK_TYPE1 D_801C00EC;
-// extern UNK_TYPE1 D_801C0114;
-// extern UNK_TYPE1 D_801C013C;
-// extern UNK_TYPE1 D_801C0164;
-// extern UNK_TYPE1 D_801C018C;
-// extern UNK_TYPE1 D_801C01A4;
-// extern UNK_TYPE1 D_801C01CC;
-// extern UNK_TYPE1 D_801C01F4;
-// extern UNK_TYPE1 D_801C021C;
-// extern UNK_TYPE1 D_801C0244;
-// extern UNK_TYPE1 D_801C026C;
-// extern UNK_TYPE1 D_801C0294;
-// extern UNK_TYPE1 D_801C02A8;
-// extern UNK_TYPE1 D_801C02BC;
-// extern UNK_TYPE1 D_801C02D0;
-// extern UNK_TYPE1 D_801C02E4;
-// extern UNK_TYPE1 D_801C0340;
-// extern UNK_TYPE1 D_801C0368;
-// extern UNK_TYPE1 D_801C03A0;
-// extern UNK_TYPE1 D_801C03C0;
-// extern UNK_TYPE1 D_801C03E0;
-// extern UNK_TYPE1 D_801C0410;
-// extern UNK_TYPE1 D_801C0428;
-// extern UNK_TYPE1 D_801C0460;
-// extern UNK_TYPE1 D_801C0490;
-// extern UNK_TYPE1 D_801C0510;
-// extern UNK_TYPE1 D_801C0538;
-// extern UNK_TYPE1 D_801C0560;
-// extern UNK_TYPE1 D_801C0580;
-// extern UNK_TYPE1 D_801C05A8;
-// extern UNK_TYPE1 D_801C05C8;
-// extern UNK_TYPE1 D_801C05D8;
-// extern UNK_TYPE1 D_801C05F0;
-// extern UNK_TYPE1 D_801C0608;
-// extern UNK_TYPE1 D_801C0628;
-// extern UNK_TYPE1 D_801C0678;
-// extern UNK_TYPE1 D_801C0698;
-// extern UNK_TYPE1 D_801C06B8;
-// extern UNK_TYPE1 D_801C06E0;
-// extern UNK_TYPE1 D_801C06F8;
-// extern UNK_TYPE1 D_801C0718;
-// extern UNK_TYPE1 D_801C0730;
-// extern UNK_TYPE1 D_801C0740;
-// extern UNK_TYPE1 D_801C0750;
-// extern UNK_TYPE1 D_801C0778;
-// extern UNK_TYPE1 D_801C0784;
-// extern UNK_TYPE1 D_801C07AC;
-// extern UNK_TYPE1 D_801C07C0;
-// extern UNK_TYPE1 D_801C07F0;
-// extern UNK_TYPE1 D_801C0820;
-// extern UNK_TYPE1 D_801C0838;
-extern Gfx D_801C0850[];
-// extern UNK_TYPE1 D_801C0860;
-extern UNK_PTR D_801C0870;
-// extern UNK_TYPE1 D_801C0890;
-// extern UNK_TYPE1 D_801C08A0;
-// extern UNK_TYPE1 D_801C08C0;
-// extern UNK_TYPE1 D_801C08FC;
-// extern UNK_TYPE1 D_801C0910;
-// extern UNK_TYPE1 D_801C0924;
-// extern UNK_TYPE1 D_801C0938;
-// extern UNK_TYPE1 D_801C094C;
-// extern UNK_TYPE4 D_801C0958;
-extern UNK_PTR D_801C095C;
-// extern UNK_TYPE1 D_801C0964;
-// extern UNK_TYPE1 D_801C096C;
-// extern UNK_TYPE1 D_801C0970;
-// extern UNK_TYPE4 D_801C0994;
-// extern UNK_TYPE1 D_801C09B8;
-// extern UNK_TYPE1 D_801C09DC;
-// extern UNK_TYPE1 D_801C0A00;
-// extern UNK_TYPE1 D_801C0A24;
-// extern UNK_TYPE1 D_801C0A48;
-// extern UNK_TYPE1 D_801C0A6C;
-// extern UNK_TYPE1 D_801C0A90;
-// extern UNK_TYPE1 D_801C0AB4;
-// extern UNK_TYPE1 D_801C0ABC;
-// extern UNK_TYPE1 D_801C0AC4;
-// extern UNK_TYPE1 D_801C0ADC;
-extern UNK_PTR D_801C0AF4;
-extern UNK_PTR D_801C0AFC;
-extern UNK_PTR D_801C0B04;
-extern UNK_PTR D_801C0B0C;
-// extern UNK_TYPE1 D_801C0B14;
-// extern UNK_TYPE1 D_801C0B1C;
-// extern UNK_TYPE1 D_801C0B20;
-// extern UNK_TYPE1 D_801C0B90;
-// extern UNK_TYPE4 D_801C0BA8;
-// extern UNK_TYPE1 D_801C0BB4;
-// extern UNK_TYPE1 D_801C0BC0;
-// extern UNK_TYPE1 D_801C0BD0;
-// extern UNK_TYPE4 D_801C0BE0;
-// extern UNK_TYPE4 D_801C0BEC;
-// extern UNK_TYPE1 D_801C0BF8;
-// extern UNK_TYPE1 D_801C0BFC;
-// extern UNK_TYPE1 D_801C0C00;
-// extern UNK_TYPE4 D_801C0C0C;
-// extern UNK_TYPE1 D_801C0C30;
-// extern UNK_TYPE1 D_801C0C54;
-// extern UNK_TYPE1 D_801C0CA8;
-// extern UNK_TYPE4 D_801C0CE8;
-// extern UNK_TYPE1 D_801C0D24;
-// extern UNK_TYPE1 D_801C0D60;
-// extern UNK_TYPE1 D_801C0D6C;
-// extern UNK_TYPE1 D_801C0D78;
-// extern UNK_TYPE4 D_801C0D94;
-// extern UNK_TYPE4 D_801C0D98;
-// extern UNK_TYPE4 D_801C0D9C;
-// extern UNK_TYPE4 D_801C0DA0;
-// extern UNK_TYPE1 D_801C0DA8;
-// extern UNK_TYPE1 D_801C0DD8;
-// extern UNK_TYPE1 D_801C0DE4;
-// extern UNK_TYPE4 D_801C0DF0;
-// extern UNK_TYPE1 D_801C0E04;
-// extern UNK_TYPE4 D_801C0E2C;
-// extern UNK_TYPE4 D_801C0E40;
-// extern UNK_TYPE1 D_801C0E7C;
-// extern UNK_TYPE1 D_801C0E94;
-// extern UNK_TYPE1 D_801C0EA0;
-// extern UNK_TYPE1 D_801C0EAC;
-// extern UNK_TYPE1 D_801C0EB8;
+extern FlexSkeletonHeader* gPlayerSkeletons[PLAYER_FORM_MAX];
+extern PlayerModelIndices gPlayerModelTypes[];
+extern struct_80124618 D_801C03A0[];
+extern struct_80124618 D_801C0490[];
+extern Gfx gCullBackDList[];
+extern Gfx gCullFrontDList[];
extern Gfx sSetupDL[438];
extern Gfx sFillSetupDL[12];
extern Gfx gEmptyDL[1];
-extern Vec3f D_801C1D10;
-extern room_draw_func roomDrawFuncs[4];
extern u32 gBitFlags[32];
extern u16 gEquipMasks[];
extern u16 gEquipNegMasks[];
@@ -1309,13 +591,16 @@ extern u8 gUpgradeShifts[8];
extern u16 gUpgradeCapacities[][4];
extern u32 gGsFlagsMask[];
extern u32 gGsFlagsShift[];
-extern void* gItemIcons[];
+extern TexturePtr gItemIcons[];
extern u8 gItemSlots[];
extern s16 gItemPrices[];
extern u16 gSceneIdsPerRegion[11][27];
-extern u32 D_801C2410[];
-extern s16 gPlayerFormObjectIndices[8];
-extern RomFile gObjectTable[643];
+extern u8 gPlayerFormItemRestrictions[PLAYER_FORM_MAX][114];
+
+extern s16 gPlayerFormObjectIndices[PLAYER_FORM_MAX];
+extern ObjectId gObjectTableSize;
+extern RomFile gObjectTable[OBJECT_ID_MAX];
+
extern SceneTableEntry gSceneTable[];
extern UNK_PTR D_801C5C50;
// extern UNK_TYPE1 D_801C5C9C;
@@ -1324,13 +609,6 @@ extern UNK_PTR D_801C5CB0;
// extern UNK_TYPE1 D_801C5DE0;
// extern UNK_TYPE1 D_801C5DF0;
// extern UNK_TYPE1 D_801C5E00;
-extern s32 D_801C5E30[]; // D_801C5E30
-extern u16 D_801C5E48[]; // D_801C5E48
-extern s32 D_801C5E88[]; // D_801C5E88
-extern s32 D_801C5E9C[]; // D_801C5E9C
-extern s32 D_801C5EB0[]; // D_801C5EB0
-extern s16 D_801C5EC4[]; // D_801C5EC4
-extern struct_801C5F44 D_801C5F44[]; // D_801C5F44
// extern UNK_TYPE1 D_801C6A70;
// extern UNK_TYPE2 D_801C6A74;
@@ -1342,7 +620,7 @@ extern struct_801C5F44 D_801C5F44[]; // D_801C5F44
// extern UNK_TYPE2 D_801C6A8C;
// extern UNK_TYPE2 D_801C6A90;
// extern UNK_TYPE2 D_801C6A94;
-// extern UNK_TYPE1 D_801C6A98;
+extern u8 D_801C6A98[5][5];
// extern UNK_TYPE1 D_801C6AB8;
// extern UNK_TYPE1 D_801C6B28;
// extern UNK_TYPE1 D_801CED40;
@@ -1358,7 +636,7 @@ extern struct_801C5F44 D_801C5F44[]; // D_801C5F44
extern u8 D_801CFC98;
extern s16 D_801CFCA4[9];
// extern UNK_TYPE2 D_801CFCAC;
-// extern UNK_TYPE1 D_801CFCB8;
+extern s16 gOcarinaSongItemMap[];
// extern UNK_TYPE2 D_801CFCD8;
// extern UNK_TYPE2 D_801CFCE4;
// extern UNK_TYPE2 D_801CFCF0;
@@ -1471,13 +749,12 @@ extern KaleidoMgrOverlay* gKaleidoMgrCurOvl;
// extern UNK_TYPE4 D_801D0BB0;
// extern UNK_TYPE1 D_801D0C80;
// extern UNK_TYPE1 D_801D0CB0;
-extern Gfx D_801D0D00[];
extern s32 gDbgCamEnabled;
// extern UNK_TYPE1 D_801D0D54;
-// extern UNK_TYPE2 D_801D0D58;
-// extern UNK_TYPE2 D_801D0D5C;
+// extern UNK_TYPE2 sQuakeIndex;
+// extern UNK_TYPE2 sIsCameraUnderwater;
extern Input* D_801D0D60;
-// extern UNK_TYPE2 D_801D0D64;
+// extern UNK_TYPE2 sPlayerCsIdToCsCamId;
// extern UNK_TYPE1 D_801D0D7A;
// extern UNK_TYPE1 D_801D0D80;
// extern UNK_TYPE1 D_801D11F4;
@@ -1571,16 +848,11 @@ extern f32 gDefaultPanVolume[];
// extern UNK_TYPE1 D_801D5FD4;
extern UNK_PTR D_801D5FE0;
// extern UNK_TYPE1 D_801D5FE4;
-extern s32 gAudioContextInitalized;
+extern s32 gAudioCtxInitalized;
// extern UNK_TYPE4 D_801D5FEC;
-// extern UNK_TYPE4 D_801D5FF0;
-// extern UNK_TYPE4 D_801D5FF4;
-// extern UNK_TYPE1 D_801D5FF8;
-// extern UNK_TYPE4 D_801D5FFC;
-extern UNK_PTR D_801D6000;
// extern UNK_TYPE4 D_801D6190;
// extern UNK_TYPE4 D_801D6194;
-// extern UNK_TYPE1 D_801D6200;
+extern u8 D_801D6200[0x400];
extern u8 gIsLargeSfxBank[7];
extern u8 D_801D6608[7];
extern u8 gChannelsPerBank[4][7];
@@ -1712,14 +984,9 @@ extern u8 gSfxChannelLayout;
extern Vec3f gSfxDefaultPos;
extern f32 gSfxDefaultFreqAndVolScale;
extern s8 gSfxDefaultReverb;
-// extern UNK_TYPE1 D_801DB4C0;
-// extern UNK_TYPE1 D_801DB4C4;
-// extern UNK_TYPE1 D_801DB4C8;
-// extern UNK_TYPE1 D_801DB4CC;
extern u8 gAudioSpecId;
-// extern UNK_TYPE1 D_801DB4D8;
-// extern UNK_TYPE4 D_801DB4DC;
-extern ReverbSettings* gReverbSettingsTable[];
+extern u8 gAudioHeapResetState;
+extern ReverbSettings* gReverbSettingsTable[10];
extern AudioSpec gAudioSpecs[21];
// rodata
@@ -2957,7 +2224,6 @@ extern u8 gSoundFontTable[];
extern u8 gSequenceFontTable[];
extern u8 gSequenceTable[];
extern u8 gSampleBankTable[];
-extern u64 aspMainDataStart[];
// bss
// extern UNK_TYPE1 D_801ED890;
@@ -2976,13 +2242,13 @@ extern f32 D_801ED8D0;
// extern UNK_TYPE1 D_801ED8DC;
extern Mtx D_801ED8E0;
// extern UNK_TYPE1 D_801ED920;
-extern FaultClient D_801ED930;
-extern FaultAddrConvClient D_801ED940;
+extern FaultClient sActorOverlayTableFaultClient;
+extern FaultAddrConvClient sActorOverlayTableFaultAddrConvClient;
extern char D_801ED950[80];
extern char D_801ED9A0[80];
extern Vec3f D_801ED9F0[3];
extern Vec3f D_801EDA18[3];
-extern MtxF D_801EDA40;
+extern MtxF sModelToWorldMtxF;
extern Vec3f D_801EDA80[3];
extern char D_801EDAA8[80];
extern char D_801EDAF8[80];
@@ -2995,27 +2261,17 @@ extern TriNorm D_801EDBB0;
// extern UNK_TYPE1 D_801EDBD8;
// extern UNK_TYPE1 D_801EDBDC;
// extern UNK_TYPE1 D_801EDBE0;
-extern s16 D_801EDBF0;
-// extern UNK_TYPE1 D_801EDBF4;
-// extern UNK_TYPE1 D_801EDBF8;
-// extern UNK_TYPE1 D_801EDC00;
-// extern UNK_TYPE1 D_801EDC04;
-// extern UNK_TYPE1 D_801EDC08;
-// extern UNK_TYPE1 D_801EDC0C;
-// extern UNK_TYPE1 D_801EDC10;
-// extern UNK_TYPE1 D_801EDC14;
-// extern UNK_TYPE1 D_801EDC28;
-// extern UNK_TYPE1 D_801EDC30;
-// extern UNK_TYPE1 D_801EDC8C;
-// extern UNK_TYPE1 D_801EDC90;
-// extern UNK_TYPE1 D_801EDC92;
-// extern UNK_TYPE1 D_801EDC94;
-// extern UNK_TYPE1 D_801EDC96;
-// extern UNK_TYPE1 D_801EDDD0;
-// extern UNK_TYPE1 D_801EDDD4;
-// extern UNK_TYPE1 D_801EDDD8;
-// extern UNK_TYPE1 D_801EDDE0;
-// extern UNK_TYPE1 D_801EDDF0;
+
+// extern s16 D_801EDBF0;
+// extern f32 D_801EDBF4;
+// extern f32 D_801EDBF8;
+// extern CameraCollision D_801EDC00;
+// extern PlayState* sCamPlayState;
+// extern SwingAnimation D_801EDC30[4];
+// extern Vec3f D_801EDDD0;
+// extern Vec3f D_801EDDE0;
+// extern Vec3f D_801EDDF0;
+
extern Vec3f D_801EDE00;
extern Vec3f D_801EDE10;
extern Vec3f D_801EDE20;
@@ -3063,20 +2319,20 @@ extern SaveContext gSaveContext;
// extern UNK_TYPE1 D_801F3F42;
// extern UNK_TYPE1 D_801F3F4A;
// extern UNK_TYPE1 D_801F3F5A;
-extern GameInfo* gGameInfo;
+
// extern UNK_TYPE1 D_801F3F80;
// extern UNK_TYPE1 D_801F3F83;
// extern UNK_TYPE1 D_801F48C8;
extern UNK_TYPE D_801F4DDC;
-extern u8 D_801F4DE0;
-extern s16 D_801F4DE2;
+extern u8 gDisablePlayerCsModeStartPos;
+extern s16 gDungeonBossWarpSceneId;
-extern ActorCutscene* actorCutscenes;
-extern s16 actorCutsceneCount;
-extern u8 actorCutsceneWaiting[16];
+extern ActorCutscene* sSceneCutsceneList;
+extern s16 sSceneCutsceneCount;
+extern u8 sWaitingCutsceneList[16];
// extern UNK_TYPE1 D_801F4E08;
-extern u8 actorCutsceneNextCutscenes[16];
+extern u8 sNextCutsceneList[16];
// extern UNK_TYPE1 D_801F4E20;
extern u8 D_801F4E30;
// extern UNK_TYPE1 D_801F4E31;
@@ -3135,18 +2391,7 @@ extern s16 D_801F4E7A;
// extern UNK_TYPE1 D_801F57B4;
// extern UNK_TYPE1 D_801F5834;
// extern NmiBuff* gNMIBuffer;
-// extern UNK_TYPE1 sPostmanTimerInput;
-// extern UNK_TYPE1 D_801F58B0;
-// extern UNK_TYPE1 D_801F59AC;
-// extern UNK_TYPE1 D_801F59B0;
-// extern UNK_TYPE1 D_801F59C8;
-// extern UNK_TYPE1 D_801F59D0;
-// extern UNK_TYPE1 D_801F59DC;
-// extern UNK_TYPE1 D_801F59E0;
-// extern UNK_TYPE1 D_801F59E4;
-// extern UNK_TYPE1 D_801F59E8;
-// extern UNK_TYPE1 D_801F59F4;
-// extern UNK_TYPE1 D_801F59F8;
+
// extern UNK_TYPE1 sSkyboxDrawMatrix;
// extern UNK_TYPE1 D_801F6AF0;
// extern UNK_TYPE1 D_801F6AF2;
@@ -3165,31 +2410,26 @@ extern s16 D_801F4E7A;
// extern UNK_TYPE1 D_801F6B1E;
// extern UNK_TYPE1 D_801F6B20;
// extern UNK_TYPE1 D_801F6B22;
-// extern UNK_TYPE4 D_801F6B50;
+// extern UNK_TYPE4 sCurCsCamera;
// extern UNK_TYPE1 D_801F6B58;
extern void (*sKaleidoScopeUpdateFunc)(PlayState* play);
extern void (*sKaleidoScopeDrawFunc)(PlayState* play);
-extern FaultAddrConvClient sKaleidoAreaFaultClient;
-// extern UNK_TYPE1 D_801F6C10;
+extern FaultAddrConvClient sKaleidoMgrFaultAddrConvClient;
+extern s16 sTransitionFillTimer;
extern Input D_801F6C18;
-// extern UNK_TYPE1 D_801F6C30;
-// extern UNK_TYPE1 D_801F6D0C;
-extern UNK_TYPE4 D_801F6D10;
-// extern UNK_TYPE1 D_801F6D18;
-extern Color_RGBA8 D_801F6D30;
-// extern UNK_TYPE1 D_801F6D38;
-// extern UNK_TYPE4 D_801F6D4C;
-// extern UNK_TYPE1 D_801F6D50;
-extern u8 D_801F6DFC;
-// extern UNK_TYPE1 D_801F6DFD;
-extern SlowlyTask D_801F6E00;
-extern s32 D_801F6FC0;
-extern StackEntry slowlyStackEntry;
-extern u8 slowlyStack[0x1000];
-extern UNK_TYPE1 D_801F7FE8;
+extern TransitionTile sTransitionTile;
+extern s32 gTransitionTileState;
+extern VisMono sVisMono;
+extern Color_RGBA8_u32 gVisMonoColor;
+extern Struct_80140E80 D_801F6D38;
+extern Struct_80140E80* D_801F6D4C;
+extern BombersNotebook sBombersNotebook;
+extern u8 sBombersNotebookOpen;
+extern u8 sMotionBlurStatus;
+
extern UNK_TYPE1 D_801F7FF0;
extern struct_801F8010 D_801F8010;
-extern struct_801F8020 D_801F8020;
+extern VisZbuf sVisZbuf;
extern VisMono sMonoColors;
extern UNK_TYPE1 D_801F8048;
extern FaultAddrConvClient sGraphFaultAddrConvClient;
@@ -3197,24 +2437,13 @@ extern FaultClient sGraphFaultClient;
extern GfxMasterList* gGfxMasterDL;
extern CfbInfo sGraphCfbInfos[3];
extern OSTime sGraphTaskStartTime;
-extern OSMesgQueue sSiIntMsgQ;
-extern OSMesg sSiIntMsgBuf[1];
+
extern u32 gSegments[NUM_SEGMENTS];
extern SchedContext gSchedContext;
-extern IrqMgrClient irqClient;
-extern OSMesgQueue irqMgrMsgQ;
-extern OSMesg irqMgrMsgBuf[60];
-extern OSThread sGraphThread;
-extern u8 sGraphStack[6144];
-extern u8 schedStack[1536];
-extern u8 audioStack[2048];
-extern u8 padmgrStack[1280];
-extern StackEntry sGraphStackInfo;
-extern StackEntry schedStackEntry;
-extern StackEntry audioStackEntry;
-extern StackEntry padmgrStackEntry;
-extern AudioMgr audioContext;
-extern PadMgr D_801FB620;
+
+extern OSThread gGraphThread;
+extern PadMgr gPadMgr;
+
extern FaultClient sSchedFaultClient;
extern OSTime sRSPGFXStartTime;
extern OSTime sRSPAudioStartTime;
@@ -3255,8 +2484,7 @@ extern UNK_TYPE2 D_801FBBCC;
extern UNK_TYPE2 D_801FBBCE;
// extern UNK_TYPE1 D_801FBBD0;
// extern UNK_TYPE1 D_801FBBD2;
-// extern UNK_TYPE1 D_801FBBD4;
-// extern UNK_TYPE1 D_801FBBE0;
+extern u8 D_801FBBD4;
extern Vec3f D_801FBBF0;
extern LineSegment Math3D_ColSphereTri_line;
extern Vec3f Math3D_ColSphereTri_point;
@@ -3331,15 +2559,7 @@ extern Vec3f D_801FBDA4;
extern Vec3f D_801FBDE8;
extern MtxF* sMatrixStack;
extern MtxF* sCurrentMatrix;
-// extern UNK_TYPE1 D_801FBE10;
-// extern UNK_TYPE1 D_801FBE28;
-// extern UNK_TYPE1 D_801FBE2C;
-// extern UNK_TYPE4 D_801FBE30;
-extern u8 sys_flashromStack[0x1000];
-extern StackEntry sys_flashromStackEntry;
-extern OSThread sys_flashromOSThread;
-extern s80185D40 D_801FD008;
-extern OSMesg D_801FD034;
+
extern s32 D_801FD120;
// extern UNK_TYPE1 D_801FD140;
// extern UNK_TYPE1 D_801FD158;
@@ -3434,54 +2654,19 @@ extern s32 D_801FD120;
// extern UNK_TYPE1 D_801FD5E8;
// extern UNK_TYPE1 D_801FD608;
// extern UNK_TYPE1 D_801FD610;
-// extern UNK_TYPE1 sSfxPlayerBank;
-// extern UNK_TYPE1 sSfxItemBank;
-// extern UNK_TYPE1 sSfxEnvironmentBank;
-// extern UNK_TYPE1 sSfxEnemyBank;
-// extern UNK_TYPE1 sSfxSystemBank;
-// extern UNK_TYPE1 sSfxOcarinaBank;
-// extern UNK_TYPE1 sSfxVoiceBank;
-// extern SfxRequest sSfxRequests[0x100];
-// extern UNK_TYPE1 sSfxBankListEnd;
-// extern UNK_TYPE1 sSfxBankFreeListStart;
-// extern UNK_TYPE1 sSfxBankUnused;
extern ActiveSfx gActiveSfx[7][3];
-// extern UNK_TYPE1 sCurSfxPlayerChannelIndex;
-// extern UNK_TYPE1 gSfxBankMuted;
-// extern UNK_TYPE1 sUnusedBankLerp;
-// extern UNK_TYPE1 D_801FFD00;
-// extern UNK_TYPE1 D_801FFD34;
-// extern UNK_TYPE1 D_801FFD40;
-// extern UNK_TYPE1 D_80200000;
-// extern UNK_TYPE1 D_80200002;
-// extern UNK_TYPE1 D_80200004;
-// extern UNK_TYPE1 D_80200008;
-// extern UNK_TYPE1 D_8020001E;
-// extern UNK_TYPE1 D_802000C9;
-// extern UNK_TYPE1 D_802000D4;
+extern SeqRequest sSeqRequests[][5];
+extern u8 sNumSeqRequests[5];
+extern u32 sAudioSeqCmds[0xB0];
extern ActiveSequence gActiveSeqs[];
-// extern UNK_TYPE1 D_8020034A;
-// extern UNK_TYPE1 D_80200B88;
-// extern UNK_TYPE1 D_80200BBA;
-// extern UNK_TYPE1 D_80200BCC;
-// extern UNK_TYPE1 D_80200BCE;
-// extern UNK_TYPE1 D_80200BD0;
-extern AudioContext gAudioContext; // at 0x80200C70
-extern void (*gCustomAudioUpdateFunction)(void);
-extern u32 (*gCustomAudioSeqFunction)(s8 value, SequenceChannel* channel);
-extern s32 (*gCustomAudioReverbFunction)(Sample*, s32, s8, s32);
-extern Acmd* (*gCustomAudioSynthFunction)(Acmd*, s32, s32);
-
-// post-code buffers
-extern u8 gGfxSPTaskYieldBuffer[OS_YIELD_DATA_SIZE];
-extern u8 gGfxSPTaskStack[0x400];
-extern GfxPool gGfxPools[2];
-extern u8 gAudioHeap[0x138000];
-extern u8 gSystemHeap[UNK_SIZE];
-
-extern u8 D_80780000[0x4600];
-extern u8 D_80784600[0x56200];
-extern u16 gFramebuffer0[SCREEN_HEIGHT][SCREEN_WIDTH];
+extern u8 sResetAudioHeapTimer;
+extern u16 sResetAudioHeapFadeReverbVolume;
+extern u16 sResetAudioHeapFadeReverbVolumeStep;
+extern AudioContext gAudioCtx; // at 0x80200C70
+extern AudioCustomUpdateFunction gAudioCustomUpdateFunction;
+extern AudioCustomSeqFunction gAudioCustomSeqFunction;
+extern AudioCustomReverbFunction gAudioCustomReverbFunction;
+extern AudioCustomSynthFunction gAudioCustomSynthFunction;
// other segments
extern GfxMasterList D_0E000000;
diff --git a/include/z64.h b/include/z64.h
index b18ab8d86..50405690f 100644
--- a/include/z64.h
+++ b/include/z64.h
@@ -20,13 +20,17 @@
#include "color.h"
#include "ichain.h"
#include "sequence.h"
+#include "seqcmd.h"
#include "sfx.h"
#include "message_data_static.h"
#include "gfxprint.h"
#include "sys_matrix.h"
+#include "tha.h"
+#include "thga.h"
#include "z64actor.h"
#include "z64animation.h"
+#include "z64animation_legacy.h"
#include "z64audio.h"
#include "z64bgcheck.h"
#include "z64camera.h"
@@ -34,7 +38,11 @@
#include "z64curve.h"
#include "z64cutscene.h"
#include "z64dma.h"
+#include "z64eff_footmark.h"
#include "z64effect.h"
+#include "z64frameadvance.h"
+#include "z64game_over.h"
+#include "z64interface.h"
#include "z64item.h"
#include "z64light.h"
#include "z64map.h"
@@ -47,6 +55,7 @@
#include "z64scene.h"
#include "z64schedule.h"
#include "z64skin.h"
+#include "z64skybox.h"
#include "z64subs.h"
#include "z64transition.h"
#include "z64view.h"
@@ -78,19 +87,6 @@ typedef enum {
/* 4 */ EQUIP_SLOT_A
} EquipSlot;
-typedef struct {
- /* 0x0 */ s16 priority; // Lower means higher priority. -1 means it ignores priority
- /* 0x2 */ s16 length;
- /* 0x4 */ s16 csCamSceneDataId; // Index of CsCameraEntry to use. Negative indices use sGlobalCamDataSettings. Indices 0 and above use CsCameraEntry from scene
- /* 0x6 */ s16 unk6;
- /* 0x8 */ s16 additionalCutscene;
- /* 0xA */ u8 sound;
- /* 0xB */ u8 unkB;
- /* 0xC */ s16 unkC;
- /* 0xE */ u8 unkE;
- /* 0xF */ u8 letterboxSize;
-} ActorCutscene; // size = 0x10
-
typedef struct {
/* 0x0 */ s8 segment;
/* 0x2 */ s16 type;
@@ -111,91 +107,6 @@ typedef struct {
/* 0x8 */ void* end;
} PolygonType2; // size = 0xC
-typedef struct {
- /* 0x0 */ s16 func;
- /* 0x2 */ UNK_TYPE1 pad2[0x6];
-} CameraModeParams; // size = 0x8
-
-typedef struct {
- /* 0x0 */ u32 validModes;
- /* 0x4 */ UNK_TYPE1 pad4[0x4];
- /* 0x8 */ CameraModeParams* modes;
-} CameraStateParams; // size = 0xC
-
-typedef struct {
- /* 0x0 */ s16 x;
- /* 0x2 */ s16 y;
- /* 0x4 */ s16 z;
- /* 0x6 */ s16 reserved;
- /* 0x8 */ s16 s;
- /* 0xA */ s16 t;
- /* 0xC */ s8 r;
- /* 0xD */ s8 g;
- /* 0xE */ s8 b;
- /* 0xF */ s8 a;
-} F3DVertexColor; // size = 0x10
-
-typedef struct {
- /* 0x0 */ s16 x;
- /* 0x2 */ s16 y;
- /* 0x4 */ s16 z;
- /* 0x6 */ s16 reserved;
- /* 0x8 */ s16 s;
- /* 0xA */ s16 t;
- /* 0xC */ s8 normalX;
- /* 0xD */ s8 normalY;
- /* 0xE */ s8 normalZ;
- /* 0xF */ s8 a;
-} F3DVertexNormal; // size = 0x10
-
-typedef struct {
- /* 0x0 */ f32 size;
- /* 0x4 */ f32 dynamicSizeStep;
- /* 0x8 */ u8 state;
- /* 0x9 */ u8 sizeGrowsCos2;
- /* 0xA */ u8 colorsIndex;
- /* 0xB */ u8 flags;
- /* 0xC */ u8 lightParamsIndex;
-} FireObjInitParams; // size = 0x10
-
-typedef struct FireObjColors {
- /* 0x0 */ Color_RGBA8 primColor;
- /* 0x4 */ u8 lod;
- /* 0x5 */ Color_RGB8 envColor;
-} FireObjColors; // size = 0x8
-
-typedef struct FireObjLightParams {
- /* 0x0 */ s16 radius;
- /* 0x2 */ Color_RGB8 color;
- /* 0x5 */ Color_RGB8 maxColorAdj;
-} FireObjLightParams; // size = 0x8
-
-// Game Info aka. Static Context
-// Data normally accessed through REG macros (see regs.h)
-typedef struct {
- /* 0x00 */ u8 unk_00; // regPage;? // 1 is first page
- /* 0x01 */ u8 unk_01; // regGroup;? // "register" group (R, RS, RO, RP etc.)
- /* 0x02 */ u8 unk_02; // regCur;? // selected register within page
- /* 0x03 */ u8 unk_03; // dpadLast;?
- /* 0x04 */ u32 unk_04; // repeat;?
- /* 0x08 */ UNK_TYPE1 pad_08[0xC];
- /* 0x14 */ s16 data[REG_GROUPS * REG_PER_GROUP]; // 0xAE0 entries
-} GameInfo; // size = 0x15D4
-
-typedef struct {
- /* 0x0 */ u32 size;
- /* 0x4 */ void* bufp;
- /* 0x8 */ void* head;
- /* 0xC */ void* tail;
-} TwoHeadArena; // size = 0x10
-
-typedef struct {
- /* 0x0 */ u32 size;
- /* 0x4 */ Gfx* bufp;
- /* 0x8 */ Gfx* p;
- /* 0xC */ Gfx* d;
-} TwoHeadGfxArena; // size = 0x10
-
typedef struct {
/* 0x000 */ Gfx taskStart[9];
/* 0x048 */ Gfx clearZBuffer[8]; // original name: clear_zb_dl
@@ -255,9 +166,9 @@ typedef struct GraphicsContext {
/* 0x2E4 */ u32 viConfigFeatures;
/* 0x2E8 */ char unk_2E8[0x2];
/* 0x2EA */ u8 updateViMode;
- /* 0x2EB */ u8 framebufferIdx;
+ /* 0x2EB */ u8 framebufferIndex;
/* 0x2EC */ void (*callback)(struct GraphicsContext*, u32);
- /* 0x2F0 */ u32 callbackParam;
+ /* 0x2F0 */ u32 callbackArg;
/* 0x2F4 */ f32 xScale;
/* 0x2F8 */ f32 yScale;
/* 0x2FC */ GfxMasterList* masterList;
@@ -286,27 +197,6 @@ typedef struct {
/* 0x10 */ OSTime resetTime;
} NmiBuff; // size >= 0x18
-typedef void(*osCreateThread_func)(void*);
-
-typedef enum {
- SLOWLY_CALLBACK_NO_ARGS,
- SLOWLY_CALLBACK_ONE_ARG,
- SLOWLY_CALLBACK_TWO_ARGS
-} SlowlyCallbackArgCount;
-
-typedef struct {
- /* 0x000 */ OSThread thread;
- /* 0x1B0 */ u8 callbackArgCount;
- /* 0x1B1 */ u8 status;
- /* 0x1B4 */ union {
- void (*callback0)(void);
- void (*callback1)(void*);
- void (*callback2)(void*, void*);
- };
- /* 0x1B8 */ void* callbackArg0;
- /* 0x1BC */ void* callbackArg1;
-} SlowlyTask; // size = 0x1C0
-
typedef struct {
/* 0x00 */ int unk0;
/* 0x04 */ void* unk4;
@@ -316,41 +206,6 @@ typedef struct {
/* 0x14 */ OSMesgQueue unk14;
} s80185D40; // size = 0x2C
-typedef struct {
- /* 0x00 */ u32 unk0;
- /* 0x04 */ u8 unk4;
- /* 0x05 */ u8 unk5;
- /* 0x06 */ u8 unk6;
- /* 0x07 */ UNK_TYPE1 pad7[0x2];
- /* 0x09 */ u8 unk9;
- /* 0x0A */ UNK_TYPE1 padA[0x2];
- /* 0x0C */ u32 unkC;
- /* 0x10 */ u16 unk10;
- /* 0x12 */ u16 unk12;
- /* 0x14 */ u16 unk14;
- /* 0x16 */ UNK_TYPE1 pad16[0x2];
- /* 0x18 */ u32 unk18;
- /* 0x1C */ u32 unk1C;
- /* 0x20 */ u32 unk20;
- /* 0x24 */ u32 unk24;
- /* 0x28 */ u32 unk28;
- /* 0x2C */ u32 unk2C;
- /* 0x30 */ u32 unk30;
- /* 0x34 */ u32 unk34;
-} s8018CFAC; // size = 0x38
-
-typedef struct {
- /* 0x00 */ Vec3f unk0;
- /* 0x0C */ Vec3f unkC;
- /* 0x18 */ s16 unk18;
- /* 0x1A */ s16 unk1A;
-} s80874650; // size = 0x1C
-
-typedef union {
- F3DVertexColor color;
- F3DVertexNormal normal;
-} F3DVertex; // size = 0x10
-
// End of RDRAM without the Expansion Pak installed
#define NORMAL_RDRAM_END 0x80400000
// End of RDRAM with the Expansion Pak installed
@@ -397,10 +252,10 @@ typedef struct {
/* 0x000 */ View view;
/* 0x168 */ u8* iconItemSegment;
/* 0x16C */ u8* iconItem24Segment;
- /* 0x170 */ u8* unk_170;
- /* 0x174 */ u8* unk_174;
- /* 0x178 */ u8* unk_178;
- /* 0x17C */ u8* unk_17C;
+ /* 0x170 */ u8* iconItemAltSegment;
+ /* 0x174 */ u8* iconItemLangSegment;
+ /* 0x178 */ u8* nameSegment;
+ /* 0x17C */ u8* iconItemVtxSegment;
/* 0x180 */ Vtx* itemPageVtx;
/* 0x184 */ Vtx* mapPageVtx;
/* 0x188 */ Vtx* questPageVtx;
@@ -413,24 +268,24 @@ typedef struct {
/* 0x1A4 */ Vtx* unk_1A4;
/* 0x1A8 */ Vtx* cursorVtx;
/* 0x1AC */ OcarinaStaff* ocarinaStaff;
- /* 0x1B0 */ DmaRequest unk_1B0;
+ /* 0x1B0 */ UNK_TYPE1 unk_1B0[0x20];
/* 0x1D0 */ OSMesgQueue loadQueue;
/* 0x1E8 */ OSMesg loadMsg;
/* 0x1EC */ u16 state;
/* 0x1EE */ u16 debugEditor;
- /* 0x1F0 */ u8 unk_1F0;
+ /* 0x1F0 */ u8 bombersNotebookOpen;
/* 0x1F4 */ Vec3f eye;
- /* 0x200 */ u16 unk_200;
- /* 0x202 */ u16 mode;
+ /* 0x200 */ u16 mainState;
+ /* 0x202 */ u16 nextPageMode; // (2 * prev pageIndex) + (scroll left ? 1 : 0)
/* 0x204 */ u16 pageIndex;
- /* 0x206 */ u16 unk_206;
- /* 0x208 */ u16 unk_208;
+ /* 0x206 */ u16 switchPageTimer;
+ /* 0x208 */ u16 savePromptState;
/* 0x20C */ f32 unk_20C;
- /* 0x210 */ f32 unk_210;
- /* 0x214 */ f32 unk_214;
- /* 0x218 */ f32 unk_218;
- /* 0x21C */ f32 unk_21C;
- /* 0x220 */ f32 unk_220;
+ /* 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
+ /* 0x21C */ f32 maskPageRoll; // rotation (-z) of the mask page into the screen
+ /* 0x220 */ f32 roll;
/* 0x224 */ u16 alpha;
/* 0x226 */ s16 offsetY;
/* 0x228 */ UNK_TYPE1 unk_228[0x8];
@@ -442,7 +297,7 @@ typedef struct {
/* 0x256 */ s16 unk_256; // Uses DungeonItem enum
/* 0x258 */ s16 cursorSpecialPos;
/* 0x25A */ s16 pageSwitchTimer;
- /* 0x25C */ u16 unk_25C;
+ /* 0x25C */ u16 namedItem;
/* 0x25E */ u16 cursorItem[5];
/* 0x268 */ u16 cursorSlot[5];
/* 0x272 */ u16 equipTargetItem;
@@ -451,7 +306,7 @@ typedef struct {
/* 0x278 */ s16 equipAnimX;
/* 0x27A */ s16 equipAnimY;
/* 0x27C */ s16 equipAnimAlpha;
- /* 0x27E */ s16 unk_27E;
+ /* 0x27E */ s16 infoPanelOffsetY;
/* 0x280 */ u16 unk_280;
/* 0x282 */ u16 nameColorSet;
/* 0x284 */ s16 cursorColorSet;
@@ -463,119 +318,19 @@ typedef struct {
/* 0x298 */ f32 unk_298;
/* 0x29C */ s16 promptChoice; // save/continue choice: 0 = yes; 4 = no
/* 0x29E */ s16 promptAlpha;
- /* 0x2A0 */ s16 unk_2A0;
+ /* 0x2A0 */ s16 ocarinaSongIndex;
/* 0x2A2 */ u8 worldMapPoints[20];
- /* 0x2B6 */ u8 unk_2B6;
- /* 0x2B7 */ u8 unk_2B7;
- /* 0x2B8 */ u8 unk_2B8;
+ /* 0x2B6 */ u8 unk_2B6; // unused red?
+ /* 0x2B7 */ u8 unk_2B7; // unused green?
+ /* 0x2B8 */ u8 unk_2B8; // unused blue?
/* 0x2B9 */ u8 itemDescriptionOn; // helpful description of item given through a message box
/* 0x2BA */ s16 equipAnimScale; // scale of item icon while moving being equipped to c-button
/* 0x2BC */ s16 equipAnimShrinkRate; // rate the scale is shrinking for the item icon while moving being equipped to c-button
- /* 0x2BE */ s16 unk_2BE[5];
+ /* 0x2BE */ s16 ocarinaButtonsY[5];
/* 0x2C8 */ u16 unk_2C8; // Uses PauseMenuPage enum for Owl Warp. Never set.
- /* 0x2CA */ s16 unk_2CA; // Uses OwlStatueId enum for Owl Warp. Never set.
+ /* 0x2CA */ s16 unk_2CA; // Uses OwlWarpId enum for Owl Warp. Never set.
} PauseContext; // size = 0x2D0
-typedef struct {
- /* 0x000 */ View view;
- /* 0x168 */ Vtx* actionVtx;
- /* 0x16C */ Vtx* beatingHeartVtx;
- /* 0x170 */ u8* parameterSegment;
- /* 0x174 */ u8* doActionSegment;
- /* 0x178 */ u8* iconItemSegment;
- /* 0x17C */ u8* mapSegment;
- /* 0x180 */ u8* unk_180;
- /* 0x184 */ DmaRequest dmaRequest_184;
- /* 0x1A4 */ DmaRequest dmaRequest_1A4;
- /* 0x1C4 */ DmaRequest dmaRequest_1C4;
- /* 0x1E4 */ OSMesgQueue loadQueue;
- /* 0x1FC */ OSMesg loadMsg;
- /* 0x200 */ Viewport viewport;
- /* 0x210 */ s16 unk_210;
- /* 0x212 */ u16 unk_212;
- /* 0x214 */ u16 unk_214;
- /* 0x218 */ f32 unk_218;
- /* 0x21C */ s16 unk_21C;
- /* 0x21E */ s16 bButtonDoAction;
- /* 0x220 */ s16 unk_220;
- /* 0x222 */ s16 unk_222;
- /* 0x224 */ s16 unk_224;
- /* 0x226 */ s16 lifeColorChange;
- /* 0x228 */ s16 lifeColorChangeDirection;
- /* 0x22A */ s16 beatingHeartPrim[3];
- /* 0x230 */ s16 beatingHeartEnv[3];
- /* 0x236 */ s16 heartsPrimR[2];
- /* 0x23A */ s16 heartsPrimG[2];
- /* 0x23E */ s16 heartsPrimB[2];
- /* 0x242 */ s16 heartsEnvR[2];
- /* 0x246 */ s16 heartsEnvG[2];
- /* 0x24A */ s16 heartsEnvB[2];
- /* 0x24E */ s16 health;
- /* 0x250 */ s16 unkTimer;
- /* 0x252 */ s16 lifeSizeChange;
- /* 0x254 */ s16 lifeSizeChangeDirection; // 1 means shrinking, 0 growing
- /* 0x256 */ s16 unk_256;
- /* 0x258 */ s16 magicConsumptionTimer; // For certain magic states, 1 unit of magic is consumed every time the timer reaches 0
- /* 0x25A */ u8 numHorseBoosts;
- /* 0x25C */ u16 unk_25C;
- /* 0x25E */ u16 unk_25E;
- /* 0x260 */ u16 hbaAmmo;
- /* 0x262 */ u16 unk_262;
- /* 0x264 */ s16 unk_264;
- /* 0x266 */ s16 aAlpha;
- /* 0x268 */ s16 bAlpha;
- /* 0x26A */ s16 cLeftAlpha;
- /* 0x26C */ s16 cDownAlpha;
- /* 0x26E */ s16 cRightAlpha;
- /* 0x270 */ s16 healthAlpha;
- /* 0x272 */ s16 magicAlpha;
- /* 0x274 */ s16 minimapAlpha;
- /* 0x276 */ s16 startAlpha;
- /* 0x278 */ s16 unk_278;
- /* 0x27A */ s16 dungeonOrBossAreaMapIndex;
- /* 0x27C */ s16 mapRoomNum;
- /* 0x27E */ u8 unk_27E;
- /* 0x27F */ u8 unk_27F;
- /* 0x280 */ u8 unk_280;
- /* 0x282 */ s16 unk_282;
- /* 0x284 */ s16 unk_284;
- /* 0x286 */ s16 unk_286;
- /* 0x288 */ s16 unk_288;
- /* 0x28A */ s16 unk_28A[8];
- /* 0x29A */ u16 unk_29A[8];
- /* 0x2AA */ s16 unk_2AA[8];
- /* 0x2BC */ f32 unk_2BC[8];
- /* 0x2DC */ f32 unk_2DC[8];
- /* 0x2FC */ s16 unk_2FC[4];
- /* 0x304 */ s16 unk_304;
- /* 0x306 */ s16 unk_306;
- /* 0x308 */ s16 unk_308;
- /* 0x30A */ s16 unk_30A;
- /* 0x30C */ s16 unk_30C;
- struct {
- /* 0x30E */ u8 unk_30E; // "h_gauge"
- /* 0x30F */ u8 bButton;
- /* 0x310 */ u8 aButton;
- /* 0x311 */ u8 tradeItems;
- /* 0x312 */ u8 unk_312;
- /* 0x313 */ u8 unk_313;
- /* 0x314 */ u8 unk_314;
- /* 0x315 */ u8 songOfSoaring;
- /* 0x316 */ u8 songOfStorms;
- /* 0x317 */ u8 unk_317;
- /* 0x318 */ u8 pictographBox;
- /* 0x319 */ u8 all; // "another"; enables all item restrictions
- } restrictions; // size = 0xC
- /* 0x31A */ u8 unk_31A;
- /* 0x31B */ u8 unk_31B;
- /* 0x31C */ u8 unk_31C;
- /* 0x320 */ OSMesgQueue unk_320;
- /* 0x338 */ OSMesg unk_338;
- /* 0x33C */ void* unk_33C;
- /* 0x340 */ u32 unk_340;
- /* 0x344 */ u32 unk_344;
-} InterfaceContext; // size = 0x348
-
typedef struct {
/* 0x00 */ void* loadedRamAddr;
/* 0x04 */ uintptr_t vromStart;
@@ -594,10 +349,8 @@ typedef enum {
typedef struct {
/* 0x00 */ u16 unk_0;
- /* 0x02 */ u16 timeIncrement;
- /* 0x04 */ f32 unk_4;
- /* 0x08 */ f32 unk_8;
- /* 0x0C */ f32 unk_C;
+ /* 0x02 */ u16 sceneTimeSpeed;
+ /* 0x04 */ Vec3f sunPos;
/* 0x10 */ u8 unk_10;
/* 0x11 */ u8 unk_11;
/* 0x12 */ u8 unk_12;
@@ -646,44 +399,14 @@ typedef struct {
/* 0xE5 */ u8 fillScreen;
/* 0xE6 */ u8 screenFillColor[4];
/* 0xEA */ u8 sandstormState;
- /* 0xEB */ u8 unk_EB;
- /* 0xEC */ u8 unk_EC;
+ /* 0xEB */ u8 sandstormPrimA;
+ /* 0xEC */ u8 sandstormEnvA;
/* 0xED */ u8 unk_ED;
/* 0xEE */ u8 unk_EE[4];
/* 0xF2 */ u8 unk_F2[8]; // [3] is used by both DemoKankyo and ObjectKankyo effect count
/* 0xFA */ u8 unk_FA[4];
} EnvironmentContext; // size = 0x100
-typedef struct {
- /* 0x000 */ View view;
- /* 0x168 */ void* skyboxStaticSegment[4];
- /* 0x178 */ void* skyboxPaletteStaticSegment;
- /* 0x17C */ Gfx* dListBuf;
- /* 0x180 */ Gfx* roomDL;
- /* 0x184 */ Vtx* roomVtx;
- /* 0x188 */ DmaRequest unk188;
- /* 0x1A8 */ DmaRequest unk1A8;
- /* 0x1C8 */ DmaRequest unk1C8;
- /* 0x1E8 */ OSMesgQueue loadQueue;
- /* 0x200 */ OSMesg loadMsg;
- /* 0x204 */ s16 skyboxShouldDraw;
- /* 0x208 */ f32 rotX;
- /* 0x20C */ f32 rotY;
- /* 0x210 */ f32 rotZ;
- /* 0x214 */ Vec3f eye;
- /* 0x220 */ s16 angle;
- /* 0x222 */ u8 primR;
- /* 0x223 */ u8 primG;
- /* 0x224 */ u8 primB;
- /* 0x225 */ u8 envR;
- /* 0x226 */ u8 envG;
- /* 0x227 */ u8 envB;
-} SkyboxContext; // size = 0x228
-
-typedef enum {
- /* 0x05 */ SKYBOX_CUTSCENE_MAP = 5
-} SkyboxId;
-
typedef struct ListAlloc {
/* 0x0 */ struct ListAlloc* prev;
/* 0x4 */ struct ListAlloc* next;
@@ -731,64 +454,6 @@ typedef struct {
/* 0x24 */ u32 flags;
} PreRenderParams; // size = 0x28
-#define TRANS_TRIGGER_OFF 0 // transition is not active
-#define TRANS_TRIGGER_START 20 // start transition (exiting an area)
-#define TRANS_TRIGGER_END -20 // transition is ending (arriving in a new area)
-
-typedef enum {
- /* 0 */ TRANS_MODE_OFF,
- /* 1 */ TRANS_MODE_01,
- /* 2 */ TRANS_MODE_02,
- /* 3 */ TRANS_MODE_03,
- /* 4 */ TRANS_MODE_04,
- /* 5 */ TRANS_MODE_05,
- /* 6 */ TRANS_MODE_06,
- /* 7 */ TRANS_MODE_07,
- /* 8 */ TRANS_MODE_08,
- /* 9 */ TRANS_MODE_09,
- /* 10 */ TRANS_MODE_10,
- /* 11 */ TRANS_MODE_11,
- /* 12 */ TRANS_MODE_12,
- /* 13 */ TRANS_MODE_13,
- /* 14 */ TRANS_MODE_14,
- /* 15 */ TRANS_MODE_15,
- /* 16 */ TRANS_MODE_16,
- /* 17 */ TRANS_MODE_17
-} TransitionMode;
-
-typedef enum {
- /* 0 */ TRANS_TYPE_00,
- /* 1 */ TRANS_TYPE_01,
- /* 2 */ TRANS_TYPE_02,
- /* 3 */ TRANS_TYPE_03,
- /* 4 */ TRANS_TYPE_04,
- /* 5 */ TRANS_TYPE_05,
- /* 6 */ TRANS_TYPE_06,
- /* 7 */ TRANS_TYPE_07,
- /* 8 */ TRANS_TYPE_08,
- /* 9 */ TRANS_TYPE_09,
- /* 10 */ TRANS_TYPE_10,
- /* 11 */ TRANS_TYPE_11,
- /* 12 */ TRANS_TYPE_12,
- /* 13 */ TRANS_TYPE_13,
- /* 14 */ TRANS_TYPE_14,
- /* 15 */ TRANS_TYPE_15,
- /* 16 */ TRANS_TYPE_16,
- /* 17 */ TRANS_TYPE_17,
- /* 18 */ TRANS_TYPE_18,
- /* 19 */ TRANS_TYPE_19,
- /* 20 */ TRANS_TYPE_20,
- /* 21 */ TRANS_TYPE_21,
- /* 64 */ TRANS_TYPE_64 = 64,
- /* 70 */ TRANS_TYPE_70 = 70,
- /* 72 */ TRANS_TYPE_72 = 72,
- /* 73 */ TRANS_TYPE_73,
- /* 80 */ TRANS_TYPE_80 = 80,
- /* 86 */ TRANS_TYPE_86 = 86
-} TransitionType;
-
-#define TRANS_NEXT_TYPE_DEFAULT 0xFF
-
typedef struct FaultAddrConvClient {
/* 0x0 */ struct FaultAddrConvClient* next;
/* 0x4 */ void* (*callback)(void*, void*);
@@ -820,10 +485,6 @@ typedef struct {
/* 0x844 */ void* fb;
} FaultThreadStruct; // size = 0x848
-typedef struct FireObj FireObj;
-
-typedef struct FireObjLight FireObjLight;
-
struct GameState;
typedef void (*GameStateFunc)(struct GameState* gameState);
@@ -872,22 +533,13 @@ typedef struct GameState {
/* 0xA3 */ u8 unk_A3;
} GameState; // size = 0xA4
-typedef struct {
- /* 0x00 */ u32 resetting;
- /* 0x04 */ u32 resetCount;
- /* 0x08 */ OSTime duration;
- /* 0x10 */ OSTime resetTime;
-} PreNmiBuff; // size = 0x18 (actually osAppNmiBuffer is 0x40 bytes large but the rest is unused)
+struct PlayState;
-typedef struct PlayState PlayState;
-
-typedef s32 (*ColChkResetFunc)(PlayState*, Collider*);
-typedef void (*ColChkBloodFunc)(PlayState*, Collider*, Vec3f*);
-typedef void (*ColChkApplyFunc)(PlayState*, CollisionCheckContext*, Collider*);
-typedef void (*ColChkVsFunc)(PlayState*, CollisionCheckContext*, Collider*, Collider*);
-typedef s32 (*ColChkLineFunc)(PlayState*, CollisionCheckContext*, Collider*, Vec3f*, Vec3f*);
-
-typedef void(*room_draw_func)(PlayState* play, Room* room, u32 flags);
+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 */ u8 controllers; // bit 0 is set if controller 1 is plugged in, etc.
@@ -912,28 +564,6 @@ typedef struct {
/* 0x47F */ UNK_TYPE1 pad47F[0x1];
} PadMgr; // size = 0x480
-typedef struct StackEntry {
- /* 0x00 */ struct StackEntry* next;
- /* 0x04 */ struct StackEntry* prev;
- /* 0x08 */ u32 head;
- /* 0x0C */ u32 tail;
- /* 0x10 */ u32 initValue;
- /* 0x14 */ s32 minSpace;
- /* 0x18 */ const char* name;
-} StackEntry; // size = 0x1C
-
-typedef enum {
- STACK_STATUS_OK = 0,
- STACK_STATUS_WARNING = 1,
- STACK_STATUS_OVERFLOW = 2
-} StackStatus;
-
-struct FireObjLight {
- /* 0x00 */ LightNode* light;
- /* 0x04 */ LightInfo lightInfo;
- /* 0x12 */ u8 lightParamsIndex;
-}; // size = 0x14
-
#define OS_SC_RETRACE_MSG 1
#define OS_SC_DONE_MSG 2
#define OS_SC_NMI_MSG 3 // name is made up, 3 is OS_SC_RDP_DONE_MSG in the original sched.c
@@ -954,69 +584,12 @@ typedef struct {
/* 0x130 */ OSThread thread;
} AudioMgr; // size = 0x2E0
-typedef struct {
- /* 0x00 */ MtxF displayMatrix;
- /* 0x40 */ Actor* actor;
- /* 0x44 */ Vec3f location;
- /* 0x50 */ u8 flags; // bit 0 - footmark fades out
- /* 0x51 */ u8 id;
- /* 0x52 */ u8 red;
- /* 0x53 */ u8 blue;
- /* 0x54 */ u8 green;
- /* 0x55 */ UNK_TYPE1 pad55[0x1];
- /* 0x56 */ u16 alpha;
- /* 0x58 */ u16 alphaChange;
- /* 0x5A */ u16 size;
- /* 0x5C */ u16 fadeoutDelay;
- /* 0x5E */ u16 age;
-} EffFootmark; // size = 0x60
-
-struct FireObj {
- /* 0x00 */ Vec3f position;
- /* 0x0C */ f32 size;
- /* 0x10 */ f32 sizeInv;
- /* 0x14 */ f32 xScale;
- /* 0x18 */ f32 yScale;
- /* 0x1C */ f32 dynamicSize;
- /* 0x20 */ f32 dynamicSizeStep;
- /* 0x24 */ u8 state; // 0 - growing, 1 - shrinking, 2 - fully lit, 3 - not lit
- /* 0x25 */ u8 sizeGrowsCos2;
- /* 0x26 */ u8 unk26;
- /* 0x27 */ u8 colorsIndex;
- /* 0x28 */ u8 flags; // bit 0 - ?, bit 1 - ?
- /* 0x29 */ UNK_TYPE1 pad29[0x1];
- /* 0x2A */ s16 ignitionDelay;
- /* 0x2C */ ColliderCylinder collision;
- /* 0x78 */ FireObjLight light;
-}; // size = 0x8B
-
typedef struct {
/* 0x0 */ u8 seqId;
/* 0x1 */ u8 ambienceId;
} SequenceContext; // size = 0x2
-typedef struct {
- /* 0x0 */ s32 enabled;
- /* 0x4 */ s32 timer;
-} FrameAdvanceContext; // size = 0x8
-
-typedef enum {
- /* 0 */ GAMEOVER_INACTIVE,
- /* 1 */ GAMEOVER_DEATH_START,
- /* 2 */ GAMEOVER_DEATH_WAIT_GROUND, // wait for player to fall and hit the ground
- /* 3 */ GAMEOVER_DEATH_FADE_OUT, // wait before fading out
- /* 20 */ GAMEOVER_REVIVE_START = 20,
- /* 21 */ GAMEOVER_REVIVE_RUMBLE,
- /* 22 */ GAMEOVER_REVIVE_WAIT_GROUND, // wait for player to fall and hit the ground
- /* 23 */ GAMEOVER_REVIVE_WAIT_FAIRY, // wait for the fairy to rise all the way up out of player's body
- /* 24 */ GAMEOVER_REVIVE_FADE_OUT // fade out the game over lights as player is revived and gets back up
-} GameOverState;
-
-typedef struct {
- /* 0x0 */ u16 state;
-} GameOverContext; // size = 0x2
-
-struct PlayState {
+typedef struct PlayState {
/* 0x00000 */ GameState state;
/* 0x000A4 */ s16 sceneId;
/* 0x000A6 */ u8 sceneConfig;
@@ -1058,17 +631,17 @@ struct PlayState {
/* 0x18784 */ s32 (*damagePlayer)(struct PlayState* play, s32 damage);
/* 0x18788 */ void (*talkWithPlayer)(struct PlayState* play, Actor* actor);
/* 0x1878C */ void (*unk_1878C)(struct PlayState* play);
- /* 0x18790 */ void (*unk_18790)(struct PlayState* play, s16 arg1, Actor* actor);
- /* 0x18794 */ s32 (*unk_18794)(struct PlayState* play, Player* player, s32 arg2, s32 arg3);
- /* 0x18798 */ s32 (*setPlayerTalkAnim)(struct PlayState* play, void* talkAnim, s32 arg2);
- /* 0x1879C */ s16 playerActorCsIds[10];
+ /* 0x18790 */ void (*unk_18790)(struct PlayState* play, s16 arg1);
+ /* 0x18794 */ PlayerItemAction (*unk_18794)(struct PlayState* play, Player* player, ItemId itemId);
+ /* 0x18798 */ s32 (*setPlayerTalkAnim)(struct PlayState* play, PlayerAnimationHeader* talkAnim, AnimationMode animMode);
+ /* 0x1879C */ s16 playerCsIds[PLAYER_CS_ID_MAX];
/* 0x187B0 */ MtxF viewProjectionMtxF;
- /* 0x187F0 */ Vec3f unk_187F0;
+ /* 0x187F0 */ Vec3f projectionMtxFDiagonal;
/* 0x187FC */ MtxF billboardMtxF;
/* 0x1883C */ Mtx* billboardMtx;
/* 0x18840 */ u32 gameplayFrames;
- /* 0x18844 */ u8 unk_18844;
- /* 0x18845 */ u8 unk_18845;
+ /* 0x18844 */ u8 unk_18844; // bool
+ /* 0x18845 */ u8 haltAllActors;
/* 0x18846 */ s16 numSetupActors;
/* 0x18848 */ u8 numRooms;
/* 0x1884C */ RomFile* roomList;
@@ -1078,12 +651,12 @@ struct PlayState {
/* 0x1885C */ EntranceEntry* setupEntranceList;
/* 0x18860 */ u16* setupExitList;
/* 0x18864 */ Path* setupPathList;
- /* 0x18868 */ void* unk_18868;
+ /* 0x18868 */ void* naviQuestHints; // leftover from OoT, system which processes this is removed
/* 0x1886C */ AnimatedMaterial* sceneMaterialAnims;
/* 0x18870 */ void* specialEffects;
- /* 0x18874 */ u8 skyboxId;
+ /* 0x18874 */ u8 skyboxId; // @see SkyboxId enum
/* 0x18875 */ s8 transitionTrigger; // "fade_direction"
- /* 0x18876 */ s16 unk_18876;
+ /* 0x18876 */ s16 worldCoverAlpha;
/* 0x18878 */ s16 bgCoverAlpha;
/* 0x1887A */ u16 nextEntrance;
/* 0x1887C */ s8 unk_1887C; // shootingGalleryStatus?
@@ -1092,38 +665,57 @@ struct PlayState {
/* 0x1887F */ u8 transitionType; // fadeTransition
/* 0x18880 */ u8 unk_18880;
/* 0x18884 */ CollisionCheckContext colChkCtx;
- /* 0x18B20 */ u16 envFlags[20];
+ /* 0x18B20 */ u16 cutsceneFlags[20];
/* 0x18B48 */ u8 curSpawn;
/* 0x18B49 */ u8 unk_18B49;
/* 0x18B4A */ u8 transitionMode;
/* 0x18B4C */ PreRender pauseBgPreRender;
- /* 0x18B9C */ char unk_18B9C[0x2B8];
+ /* 0x18B9C */ char unk_18B9C[0x54];
+ /* 0x18BF0 */ TransitionContext transitionCtx;
+ /* 0x18E48 */ TransitionFade unk_18E48;
/* 0x18E54 */ SceneTableEntry* loadedScene;
- /* 0x18E58 */ char unk_18E58[0x10];
- /* 0x18E68 */ s32 unk_18E68;
+ /* 0x18E58 */ void* unk_18E58;
+ /* 0x18E5C */ TexturePtr pictoPhotoI8;
+ /* 0x18E60 */ void* unk_18E60;
+ /* 0x18E64 */ void* unk_18E64;
+ /* 0x18E68 */ void* unk_18E68; // framebuffer related to Lens of Truth
/* 0x18E6C */ char unk_18E6C[0x3EC];
-}; // size = 0x19258
+} PlayState; // size = 0x19258
typedef struct {
- /* 0x00 */ s32 unk0;
- /* 0x04 */ s32 unk4;
- /* 0x08 */ s32 unk8;
- /* 0x0C */ s32 unkC;
- /* 0x10 */ s32 unk10;
-} struct_801C5F44; // size = 0x14
+ /* 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,
+ /* 2 */ PICTO_PHOTO_STATE_PROCESS,
+ /* 3 */ PICTO_PHOTO_STATE_READY
+} PictoPhotoState;
-// From OoT's struct_80034A14_arg1
typedef struct {
- /* 0x00 */ s16 unk_00;
- /* 0x02 */ s16 unk_02;
- /* 0x04 */ s16 unk_04;
- /* 0x06 */ s16 unk_06;
- /* 0x08 */ Vec3s unk_08;
- /* 0x0E */ Vec3s unk_0E;
- /* 0x14 */ f32 unk_14;
- /* 0x18 */ Vec3f unk_18; // Usually setted to Player's position or Player's focus
- /* 0x24 */ s16 unk_24;
-} struct_800BD888_arg1; // size = 0x28
+ /* 0x00 */ u8 mode;
+ /* 0x04 */ f32 scale;
+ /* 0x08 */ f32 lodProportion; // expected to be between 0.0f and 1.0f
+ /* 0x0C */ Color_RGBA8_u32 primColor;
+ /* 0x10 */ Color_RGBA8_u32 envColor;
+} Struct_80140E80; // size = 0x14
typedef struct {
/* 0x0 */ u32 type;
@@ -1135,9 +727,9 @@ typedef struct {
typedef struct {
/* 0x0 */ u32 useRgba;
/* 0x4 */ u32 setScissor;
- /* 0x8 */ Color_RGBA8 primColor;
- /* 0xC */ Color_RGBA8 envColor;
-} struct_801F8020; // size = 0x10
+ /* 0x8 */ Color_RGBA8_u32 primColor;
+ /* 0xC */ Color_RGBA8_u32 envColor;
+} VisZbuf; // size = 0x10
typedef struct {
/* 0x00 */ u32 unk_00;
@@ -1148,21 +740,6 @@ typedef struct {
/* 0x14 */ Gfx* dList;
} VisMono; // size = 0x18
-typedef struct DebugDispObject {
- /* 0x00 */ Vec3f pos;
- /* 0x0C */ Vec3s rot;
- /* 0x14 */ Vec3f scale;
- /* 0x20 */ Color_RGBA8 color;
- /* 0x24 */ s16 type;
- /* 0x28 */ struct DebugDispObject* next;
- /* 0x2C */ s32 pad; //Padding not in the OOT version
-} DebugDispObject; // size = 0x30
-
-typedef struct {
- /* 0x0 */ f32 rangeSq;
- /* 0x4 */ f32 leashScale;
-} TargetRangeParams; // size = 0x8
-
typedef struct {
/* 0x0 */ u8* value;
/* 0x4 */ const char* name;
@@ -1207,35 +784,4 @@ enum fram_mode {
FRAM_MODE_STATUS
};
-typedef struct {
- /* 0x00 */ UNK_TYPE1 unk_00[0x14];
- /* 0x14 */ s16 unk_14;
- /* 0x16 */ s16 unk_16;
- /* 0x18 */ s16 unk_18;
- /* 0x1A */ UNK_TYPE1 unk_1A[0x3];
- /* 0x0C */ u8 unk_1D;
- /* 0x1E */ UNK_TYPE1 unk_1E[0xC];
- /* 0x2A */ s16 unk_2A;
- /* 0x1E */ UNK_TYPE1 unk_2C[0x1];
- /* 0x2D */ u8 unk_2D;
- /* 0x2E */ UNK_TYPE1 unk_2E[2];
-} DbCameraUnkSubStruct; // size = 0x30
-
-typedef struct {
- /* 0x00 */ s16 unk_00;
- /* 0x02 */ s16 unk_02;
- /* 0x04 */ s16 unk_04;
- /* 0x06 */ s16 unk_06;
- /* 0x08 */ s16 unk_08;
- /* 0x0A */ s16 unk_0A;
- /* 0x0C */ s16 unk_0C;
- /* 0x0E */ UNK_TYPE1 unk_0E[0x02];
- /* 0x10 */ DbCameraUnkSubStruct unk_10;
- /* 0x40 */ DbCameraUnkSubStruct unk_40;
- /* 0x70 */ UNK_PTR unk_70;
- /* 0x74 */ UNK_PTR unk_74;
- /* 0x78 */ UNK_PTR unk_78;
- /* 0x7C */ Camera* camera;
-} DbCameraUnkStruct; // size = 0x80
-
#endif
diff --git a/include/z64actor.h b/include/z64actor.h
index f1c33783a..7cc4275ac 100644
--- a/include/z64actor.h
+++ b/include/z64actor.h
@@ -19,8 +19,11 @@ struct Lights;
struct CollisionPoly;
struct EnBox;
+struct EnTorch2;
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 {
/* 0x00 */ Vec3f pos;
@@ -98,13 +101,13 @@ typedef struct {
/* 0x1C */ ActorFunc draw;
} ActorInit; // size = 0x20
-typedef enum {
- ALLOCTYPE_NORMAL,
- ALLOCTYPE_ABSOLUTE,
- ALLOCTYPE_PERMANENT
+typedef enum AllocType {
+ /* 0 */ ALLOCTYPE_NORMAL,
+ /* 1 */ ALLOCTYPE_ABSOLUTE,
+ /* 2 */ ALLOCTYPE_PERMANENT
} AllocType;
-typedef struct {
+typedef struct ActorOverlay {
/* 0x00 */ uintptr_t vromStart;
/* 0x04 */ uintptr_t vromEnd;
/* 0x08 */ void* vramStart;
@@ -131,6 +134,35 @@ typedef struct {
/* 0x18 */ Vec3f feetPos[2]; // Update by using `Actor_SetFeetPos` in PostLimbDrawOpa
} ActorShape; // size = 0x30
+// Flags for bgCheckFlags
+#define BGCHECKFLAG_GROUND (1 << 0) // Standing on the ground
+#define BGCHECKFLAG_GROUND_TOUCH (1 << 1) // Has touched the ground (only active for 1 frame)
+#define BGCHECKFLAG_GROUND_LEAVE (1 << 2) // Has left the ground (only active for 1 frame)
+#define BGCHECKFLAG_WALL (1 << 3) // Touching a wall
+#define BGCHECKFLAG_CEILING (1 << 4) // Touching a ceiling
+#define BGCHECKFLAG_WATER (1 << 5) // In water
+#define BGCHECKFLAG_WATER_TOUCH (1 << 6) // Has touched water (reset when leaving water)
+#define BGCHECKFLAG_GROUND_STRICT (1 << 7) // Similar to BGCHECKFLAG_GROUND but with no velocity check and is cleared every frame
+#define BGCHECKFLAG_CRUSHED (1 << 8) // Crushed between a floor and ceiling (triggers a void for player)
+#define BGCHECKFLAG_PLAYER_WALL_INTERACT (1 << 9) // Only set/used by player, related to interacting with walls
+#define BGCHECKFLAG_PLAYER_400 (1 << 10) //
+#define BGCHECKFLAG_PLAYER_800 (1 << 11) //
+#define BGCHECKFLAG_PLAYER_1000 (1 << 12) //
+
+// Flags for Actor_UpdateBgCheckInfo
+#define UPDBGCHECKINFO_FLAG_1 (1 << 0) // check wall
+#define UPDBGCHECKINFO_FLAG_2 (1 << 1) // check ceiling
+#define UPDBGCHECKINFO_FLAG_4 (1 << 2) // check floor and water
+#define UPDBGCHECKINFO_FLAG_8 (1 << 3)
+#define UPDBGCHECKINFO_FLAG_10 (1 << 4)
+#define UPDBGCHECKINFO_FLAG_20 (1 << 5) // unused
+#define UPDBGCHECKINFO_FLAG_40 (1 << 6) // disable water ripples
+#define UPDBGCHECKINFO_FLAG_80 (1 << 7)
+#define UPDBGCHECKINFO_FLAG_100 (1 << 8)
+#define UPDBGCHECKINFO_FLAG_200 (1 << 9)
+#define UPDBGCHECKINFO_FLAG_400 (1 << 10) // check water
+#define UPDBGCHECKINFO_FLAG_800 (1 << 11)
+
typedef struct Actor {
/* 0x000 */ s16 id; // Actor ID
/* 0x002 */ u8 category; // Actor category. Refer to the corresponding enum for values
@@ -140,16 +172,16 @@ typedef struct Actor {
/* 0x01C */ s16 params; // Configurable variable set by the actor's spawn data; original name: "args_data"
/* 0x01E */ s8 objBankIndex; // Object bank index of the actor's object dependency; original name: "bank"
/* 0x01F */ s8 targetMode; // Controls how far the actor can be targeted from and how far it can stay locked on
- /* 0x020 */ s16 unk20;
+ /* 0x020 */ s16 halfDaysBits; // Bitmask indicating which half-days this actor is allowed to not be killed(?) (TODO: not sure how to word this). If the current halfDayBit is not part of this mask then the actor is killed when spawning the setup actors
/* 0x024 */ PosRot world; // Position/rotation in the world
- /* 0x038 */ s8 cutscene;
+ /* 0x038 */ s8 csId; // ActorCutscene index, see `CutsceneId`
/* 0x039 */ u8 audioFlags; // Another set of flags? Seems related to sfx or bgm
/* 0x03C */ PosRot focus; // Target reticle focuses on this position. For player this represents head pos and rot
/* 0x050 */ u16 sfxId; // Id of sound effect to play. Plays when value is set, then is cleared the following update cycle
/* 0x054 */ f32 targetArrowOffset; // Height offset of the target arrow relative to `focus` position
/* 0x058 */ Vec3f scale; // Scale of the actor in each axis
/* 0x064 */ Vec3f velocity; // Velocity of the actor in each axis
- /* 0x070 */ f32 speedXZ; // How fast the actor is traveling along the XZ plane
+ /* 0x070 */ f32 speed; // Context dependent speed value. Can be used for XZ or XYZ depending on which move function is used
/* 0x074 */ f32 gravity; // Acceleration due to gravity. Value is added to Y velocity every frame
/* 0x078 */ f32 terminalVelocity; // Sets the lower bounds cap on velocity along the Y axis
/* 0x07C */ struct CollisionPoly* wallPoly; // Wall polygon the actor is touching
@@ -159,7 +191,7 @@ typedef struct Actor {
/* 0x086 */ s16 wallYaw; // Y rotation of the wall polygon the actor is touching
/* 0x088 */ f32 floorHeight; // Y position of the floor polygon directly below the actor
/* 0x08C */ f32 depthInWater; // Directed distance to the surface of active waterbox. Negative value means water is below.
- /* 0x090 */ u16 bgCheckFlags; // See comments below actor struct for wip docs. TODO: macros for these flags
+ /* 0x090 */ u16 bgCheckFlags; // Flags indicating how the actor is interacting with collision
/* 0x092 */ s16 yawTowardsPlayer; // Y rotation difference between the actor and the player
/* 0x094 */ f32 xyzDistToPlayerSq; // Squared distance between the actor and the player in the x,y,z axis
/* 0x098 */ f32 xzDistToPlayer; // Distance between the actor and the player in the XZ plane
@@ -197,19 +229,14 @@ typedef enum {
/* 1 */ FOOT_RIGHT
} ActorFootIndex;
-/**
- * BgCheckFlags WIP documentation (logical masks):
- * 0x001 : Standing on the ground
- * 0x002 : Has touched the ground (only active for 1 frame)
- * 0x004 : Has left the ground (only active for 1 frame)
- * 0x008 : Touching a wall
- * 0x010 : Touching a ceiling
- * 0x020 : On or below water surface
- * 0x040 : Has touched water (actor is responsible for unsetting this the frame it touches the water)
- * 0x080 : Similar to & 0x1 but with no velocity check and is cleared every frame
- * 0x100 : Crushed between a floor and ceiling (triggers a void for player)
- * 0x200 : Unknown (only set/used by player so far)
- */
+#define DYNA_TRANSFORM_POS (1 << 0) // Position of the actors on top follows the dynapoly actor's movement.
+#define DYNA_TRANSFORM_ROT_Y (1 << 1) // The Y rotation of the actors on top follows the dynapoly actor's Y rotation.
+
+#define DYNA_INTERACT_ACTOR_ON_TOP (1 << 0) // There is an actor standing on the collision of the dynapoly actor
+#define DYNA_INTERACT_PLAYER_ON_TOP (1 << 1) // The player actor is standing on the collision of the dynapoly actor
+#define DYNA_INTERACT_PLAYER_ABOVE (1 << 2) // The player is directly above the collision of the dynapoly actor (any distance above)
+#define DYNA_INTERACT_ACTOR_ON_SWITCH (1 << 3) // Like the ACTOR_ON_TOP flag but only actors with ACTOR_FLAG_CAN_PRESS_SWITCH
+#define DYNA_INTERACT_ACTOR_ON_HEAVY_SWITCH (1 << 4) // Like the ACTOR_ON_TOP flag but only actors with ACTOR_FLAG_CAN_PRESS_HEAVY_SWITCH
typedef struct {
/* 0x000 */ Actor actor;
@@ -217,14 +244,12 @@ typedef struct {
/* 0x148 */ f32 pushForce;
/* 0x14C */ f32 unk14C;
/* 0x150 */ s16 yRotation;
- /* 0x152 */ u16 unk152;
- /* 0x154 */ u32 flags;
- /* 0x158 */ u8 stateFlags;
- /* 0x15A */ s16 pad15A;
+ /* 0x154 */ u32 transformFlags;
+ /* 0x158 */ u8 interactFlags;
} DynaPolyActor; // size = 0x15C
-typedef enum {
+typedef enum Item00Type {
/* 0x00 */ ITEM00_RUPEE_GREEN,
/* 0x01 */ ITEM00_RUPEE_BLUE,
/* 0x02 */ ITEM00_RUPEE_RED,
@@ -288,8 +313,17 @@ typedef struct EnAObj {
/* 0x000 */ Actor actor;
/* 0x144 */ EnAObjActionFunc actionFunc;
/* 0x148 */ ColliderCylinder collision;
- /* 0x194 */ UNK_TYPE1 pad194[0x14];
-} EnAObj; // size = 0x1A8
+} EnAObj; // size = 0x194
+
+typedef enum {
+ /* 0 */ AOBJ_SIGNPOST_OBLONG,
+ /* 1 */ AOBJ_SIGNPOST_ARROW,
+} AObjType;
+
+#define AOBJ_GET_TEXTID(thisx) ((((thisx)->params >> 8) & 0xFF) | 0x300)
+#define AOBJ_GET_TYPE(thisx) (((thisx)->params & 0xFF) - 9)
+
+#define AOBJ_PARAMS(textId, type) ((((textId - 0x300) & 0xFF) << 8) | (type + 9))
typedef enum {
/* 0x00 */ ACTORCAT_SWITCH,
@@ -309,7 +343,7 @@ typedef enum {
#define ACTORCTX_FLAG_0 (1 << 0)
#define ACTORCTX_FLAG_1 (1 << 1)
-#define ACTORCTX_FLAG_2 (1 << 2)
+#define ACTORCTX_FLAG_PICTO_BOX_ON (1 << 2)
#define ACTORCTX_FLAG_3 (1 << 3)
#define ACTORCTX_FLAG_4 (1 << 4)
#define ACTORCTX_FLAG_5 (1 << 5)
@@ -355,6 +389,13 @@ typedef struct {
/* 0xE */ s16 intensity;
} TitleCardContext; // size = 0x10
+typedef struct ActorContext_unk_1F4 {
+ /* 0x00 */ u8 unk_00;
+ /* 0x01 */ u8 timer;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ Vec3f unk_08;
+} ActorContext_unk_1F4; // size = 0x14
+
typedef struct ActorContext_unk_20C {
/* 0x0 */ s16 id;
/* 0x2 */ s8 isDynamicallyInitialised;
@@ -375,9 +416,31 @@ typedef struct ActorListEntry {
/* 0x8 */ s32 unk_08;
} ActorListEntry; // size = 0xC
+typedef enum {
+ /* 0 */ LENS_MODE_HIDE_ACTORS, // lens actors are visible by default, and hidden by using lens (for example, fake walls)
+ /* 1 */ LENS_MODE_SHOW_ACTORS // lens actors are invisible by default, and shown by using lens (for example, invisible enemies)
+} LensMode;
+
+#define LENS_ACTOR_MAX 32
+
// Target size when activated
#define LENS_MASK_ACTIVE_SIZE 100
+#define HALFDAYBIT_DAY0_DAWN (1 << 9)
+#define HALFDAYBIT_DAY0_NIGHT (1 << 8)
+#define HALFDAYBIT_DAY1_DAWN (1 << 7)
+#define HALFDAYBIT_DAY1_NIGHT (1 << 6)
+#define HALFDAYBIT_DAY2_DAWN (1 << 5)
+#define HALFDAYBIT_DAY2_NIGHT (1 << 4)
+#define HALFDAYBIT_DAY3_DAWN (1 << 3)
+#define HALFDAYBIT_DAY3_NIGHT (1 << 2)
+#define HALFDAYBIT_DAY4_DAWN (1 << 1)
+#define HALFDAYBIT_DAY4_NIGHT (1 << 0)
+
+#define HALFDAYBIT_DAWNS (HALFDAYBIT_DAY0_DAWN | HALFDAYBIT_DAY1_DAWN | HALFDAYBIT_DAY2_DAWN | HALFDAYBIT_DAY3_DAWN | HALFDAYBIT_DAY4_DAWN)
+#define HALFDAYBIT_NIGHTS (HALFDAYBIT_DAY0_NIGHT | HALFDAYBIT_DAY1_NIGHT | HALFDAYBIT_DAY2_NIGHT | HALFDAYBIT_DAY3_NIGHT | HALFDAYBIT_DAY4_NIGHT)
+#define HALFDAYBIT_ALL (HALFDAYBIT_DAWNS | HALFDAYBIT_NIGHTS)
+
typedef struct ActorContext {
/* 0x000 */ u8 freezeFlashTimer;
/* 0x001 */ UNK_TYPE1 pad1;
@@ -387,24 +450,20 @@ typedef struct ActorContext {
/* 0x005 */ u8 flags;
/* 0x006 */ UNK_TYPE1 pad6[0x5];
/* 0x00B */ s8 lensActorsDrawn;
- /* 0x00C */ s16 unkC;
+ /* 0x00C */ s16 halfDaysBit; // A single bit indicating the current half-day. It is one of HALFDAYBIT_DAYX_ macro values
/* 0x00E */ u8 totalLoadedActors;
- /* 0x00F */ u8 undrawnActorCount;
+ /* 0x00F */ u8 numLensActors;
/* 0x010 */ ActorListEntry actorLists[ACTORCAT_MAX];
- /* 0x0A0 */ Actor* undrawnActors[32]; // Records the first 32 actors drawn each frame
+ /* 0x0A0 */ Actor* lensActors[LENS_ACTOR_MAX]; // Draws up to LENS_ACTOR_MAX number of invisible actors
/* 0x120 */ TargetContext targetContext;
/* 0x1B8 */ ActorContextSceneFlags sceneFlags;
/* 0x1E4 */ TitleCardContext titleCtxt;
- /* 0x1F4 */ u8 unk1F4;
- /* 0x1F5 */ u8 unk1F5;
- /* 0x1F6 */ UNK_TYPE1 pad1F6[0x2];
- /* 0x1F8 */ f32 unk1F8;
- /* 0x1FC */ Vec3f unk1FC;
+ /* 0x1F4 */ ActorContext_unk_1F4 unk_1F4;
/* 0x208 */ UNK_TYPE1 unk_208[0x4];
/* 0x20C */ ActorContext_unk_20C unk_20C[8];
/* 0x24C */ UNK_TYPE1 unk_24C[0x4];
/* 0x250 */ void* absoluteSpace; // Space used to allocate actor overlays of alloc type ALLOCTYPE_ABSOLUTE
- /* 0x254 */ u32 unk254[5];
+ /* 0x254 */ struct EnTorch2* elegyShells[5]; // PLAYER_FORM_MAX
/* 0x268 */ u8 unk268;
/* 0x269 */ UNK_TYPE1 pad269[0x3];
/* 0x26C */ Input unk_26C;
@@ -422,699 +481,19 @@ typedef enum {
/* 32 */ ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_LARGE
} ActorDrawDamageEffectType;
-typedef enum {
- /* 0x000 */ ACTOR_PLAYER,
- /* 0x001 */ ACTOR_EN_TEST,
- /* 0x002 */ ACTOR_EN_GIRLA,
- /* 0x003 */ ACTOR_EN_PART,
- /* 0x004 */ ACTOR_EN_LIGHT,
- /* 0x005 */ ACTOR_EN_DOOR,
- /* 0x006 */ ACTOR_EN_BOX,
- /* 0x007 */ ACTOR_EN_PAMETFROG,
- /* 0x008 */ ACTOR_EN_OKUTA,
- /* 0x009 */ ACTOR_EN_BOM,
- /* 0x00A */ ACTOR_EN_WALLMAS,
- /* 0x00B */ ACTOR_EN_DODONGO,
- /* 0x00C */ ACTOR_EN_FIREFLY,
- /* 0x00D */ ACTOR_EN_HORSE,
- /* 0x00E */ ACTOR_EN_ITEM00,
- /* 0x00F */ ACTOR_EN_ARROW,
- /* 0x010 */ ACTOR_EN_ELF,
- /* 0x011 */ ACTOR_EN_NIW,
- /* 0x012 */ ACTOR_EN_TITE,
- /* 0x013 */ ACTOR_UNSET_13,
- /* 0x014 */ ACTOR_EN_PEEHAT,
- /* 0x015 */ ACTOR_EN_BUTTE,
- /* 0x016 */ ACTOR_EN_INSECT,
- /* 0x017 */ ACTOR_EN_FISH,
- /* 0x018 */ ACTOR_EN_HOLL,
- /* 0x019 */ ACTOR_EN_DINOFOS,
- /* 0x01A */ ACTOR_EN_HATA,
- /* 0x01B */ ACTOR_EN_ZL1,
- /* 0x01C */ ACTOR_EN_VIEWER,
- /* 0x01D */ ACTOR_EN_BUBBLE,
- /* 0x01E */ ACTOR_DOOR_SHUTTER,
- /* 0x01F */ ACTOR_UNSET_1F,
- /* 0x020 */ ACTOR_EN_BOOM,
- /* 0x021 */ ACTOR_EN_TORCH2,
- /* 0x022 */ ACTOR_EN_MINIFROG,
- /* 0x023 */ ACTOR_UNSET_23,
- /* 0x024 */ ACTOR_EN_ST,
- /* 0x025 */ ACTOR_UNSET_25,
- /* 0x026 */ ACTOR_EN_A_OBJ,
- /* 0x027 */ ACTOR_OBJ_WTURN,
- /* 0x028 */ ACTOR_EN_RIVER_SOUND,
- /* 0x029 */ ACTOR_UNSET_29,
- /* 0x02A */ ACTOR_EN_OSSAN,
- /* 0x02B */ ACTOR_UNSET_2B,
- /* 0x02C */ ACTOR_UNSET_2C,
- /* 0x02D */ ACTOR_EN_FAMOS,
- /* 0x02E */ ACTOR_UNSET_2E,
- /* 0x02F */ ACTOR_EN_BOMBF,
- /* 0x030 */ ACTOR_UNSET_30,
- /* 0x031 */ ACTOR_UNSET_31,
- /* 0x032 */ ACTOR_EN_AM,
- /* 0x033 */ ACTOR_EN_DEKUBABA,
- /* 0x034 */ ACTOR_EN_M_FIRE1,
- /* 0x035 */ ACTOR_EN_M_THUNDER,
- /* 0x036 */ ACTOR_BG_BREAKWALL,
- /* 0x037 */ ACTOR_UNSET_37,
- /* 0x038 */ ACTOR_DOOR_WARP1,
- /* 0x039 */ ACTOR_OBJ_SYOKUDAI,
- /* 0x03A */ ACTOR_ITEM_B_HEART,
- /* 0x03B */ ACTOR_EN_DEKUNUTS,
- /* 0x03C */ ACTOR_EN_BBFALL,
- /* 0x03D */ ACTOR_ARMS_HOOK,
- /* 0x03E */ ACTOR_EN_BB,
- /* 0x03F */ ACTOR_BG_KEIKOKU_SPR,
- /* 0x040 */ ACTOR_UNSET_40,
- /* 0x041 */ ACTOR_EN_WOOD02,
- /* 0x042 */ ACTOR_UNSET_42,
- /* 0x043 */ ACTOR_EN_DEATH,
- /* 0x044 */ ACTOR_EN_MINIDEATH,
- /* 0x045 */ ACTOR_UNSET_45,
- /* 0x046 */ ACTOR_UNSET_46,
- /* 0x047 */ ACTOR_EN_VM,
- /* 0x048 */ ACTOR_DEMO_EFFECT,
- /* 0x049 */ ACTOR_DEMO_KANKYO,
- /* 0x04A */ ACTOR_EN_FLOORMAS,
- /* 0x04B */ ACTOR_UNSET_4B,
- /* 0x04C */ ACTOR_EN_RD,
- /* 0x04D */ ACTOR_BG_F40_FLIFT,
- /* 0x04E */ ACTOR_UNSET_4E,
- /* 0x04F */ ACTOR_OBJ_MURE,
- /* 0x050 */ ACTOR_EN_SW,
- /* 0x051 */ ACTOR_OBJECT_KANKYO,
- /* 0x052 */ ACTOR_UNSET_52,
- /* 0x053 */ ACTOR_UNSET_53,
- /* 0x054 */ ACTOR_EN_HORSE_LINK_CHILD,
- /* 0x055 */ ACTOR_DOOR_ANA,
- /* 0x056 */ ACTOR_UNSET_56,
- /* 0x057 */ ACTOR_UNSET_57,
- /* 0x058 */ ACTOR_UNSET_58,
- /* 0x059 */ ACTOR_UNSET_59,
- /* 0x05A */ ACTOR_UNSET_5A,
- /* 0x05B */ ACTOR_EN_ENCOUNT1,
- /* 0x05C */ ACTOR_DEMO_TRE_LGT,
- /* 0x05D */ ACTOR_UNSET_5D,
- /* 0x05E */ ACTOR_UNSET_5E,
- /* 0x05F */ ACTOR_EN_ENCOUNT2,
- /* 0x060 */ ACTOR_EN_FIRE_ROCK,
- /* 0x061 */ ACTOR_BG_CTOWER_ROT,
- /* 0x062 */ ACTOR_MIR_RAY,
- /* 0x063 */ ACTOR_UNSET_63,
- /* 0x064 */ ACTOR_EN_SB,
- /* 0x065 */ ACTOR_EN_BIGSLIME,
- /* 0x066 */ ACTOR_EN_KAREBABA,
- /* 0x067 */ ACTOR_EN_IN,
- /* 0x068 */ ACTOR_UNSET_68,
- /* 0x069 */ ACTOR_EN_RU,
- /* 0x06A */ ACTOR_EN_BOM_CHU,
- /* 0x06B */ ACTOR_EN_HORSE_GAME_CHECK,
- /* 0x06C */ ACTOR_EN_RR,
- /* 0x06D */ ACTOR_UNSET_6D,
- /* 0x06E */ ACTOR_UNSET_6E,
- /* 0x06F */ ACTOR_UNSET_6F,
- /* 0x070 */ ACTOR_UNSET_70,
- /* 0x071 */ ACTOR_UNSET_71,
- /* 0x072 */ ACTOR_UNSET_72,
- /* 0x073 */ ACTOR_EN_FR,
- /* 0x074 */ ACTOR_UNSET_74,
- /* 0x075 */ ACTOR_UNSET_75,
- /* 0x076 */ ACTOR_UNSET_76,
- /* 0x077 */ ACTOR_UNSET_77,
- /* 0x078 */ ACTOR_UNSET_78,
- /* 0x079 */ ACTOR_EN_FISHING,
- /* 0x07A */ ACTOR_OBJ_OSHIHIKI,
- /* 0x07B */ ACTOR_EFF_DUST,
- /* 0x07C */ ACTOR_BG_UMAJUMP,
- /* 0x07D */ ACTOR_ARROW_FIRE,
- /* 0x07E */ ACTOR_ARROW_ICE,
- /* 0x07F */ ACTOR_ARROW_LIGHT,
- /* 0x080 */ ACTOR_ITEM_ETCETERA,
- /* 0x081 */ ACTOR_OBJ_KIBAKO,
- /* 0x082 */ ACTOR_OBJ_TSUBO,
- /* 0x083 */ ACTOR_UNSET_83,
- /* 0x084 */ ACTOR_EN_IK,
- /* 0x085 */ ACTOR_UNSET_85,
- /* 0x086 */ ACTOR_UNSET_86,
- /* 0x087 */ ACTOR_UNSET_87,
- /* 0x088 */ ACTOR_UNSET_88,
- /* 0x089 */ ACTOR_DEMO_SHD,
- /* 0x08A */ ACTOR_EN_DNS,
- /* 0x08B */ ACTOR_ELF_MSG,
- /* 0x08C */ ACTOR_EN_HONOTRAP,
- /* 0x08D */ ACTOR_EN_TUBO_TRAP,
- /* 0x08E */ ACTOR_OBJ_ICE_POLY,
- /* 0x08F */ ACTOR_EN_FZ,
- /* 0x090 */ ACTOR_EN_KUSA,
- /* 0x091 */ ACTOR_OBJ_BEAN,
- /* 0x092 */ ACTOR_OBJ_BOMBIWA,
- /* 0x093 */ ACTOR_OBJ_SWITCH,
- /* 0x094 */ ACTOR_UNSET_94,
- /* 0x095 */ ACTOR_OBJ_LIFT,
- /* 0x096 */ ACTOR_OBJ_HSBLOCK,
- /* 0x097 */ ACTOR_EN_OKARINA_TAG,
- /* 0x098 */ ACTOR_UNSET_98,
- /* 0x099 */ ACTOR_EN_GOROIWA,
- /* 0x09A */ ACTOR_UNSET_9A,
- /* 0x09B */ ACTOR_UNSET_9B,
- /* 0x09C */ ACTOR_EN_DAIKU,
- /* 0x09D */ ACTOR_EN_NWC,
- /* 0x09E */ ACTOR_ITEM_INBOX,
- /* 0x09F */ ACTOR_EN_GE1,
- /* 0x0A0 */ ACTOR_OBJ_BLOCKSTOP,
- /* 0x0A1 */ ACTOR_EN_SDA,
- /* 0x0A2 */ ACTOR_EN_CLEAR_TAG,
- /* 0x0A3 */ ACTOR_UNSET_A3,
- /* 0x0A4 */ ACTOR_EN_GM,
- /* 0x0A5 */ ACTOR_EN_MS,
- /* 0x0A6 */ ACTOR_EN_HS,
- /* 0x0A7 */ ACTOR_BG_INGATE,
- /* 0x0A8 */ ACTOR_EN_KANBAN,
- /* 0x0A9 */ ACTOR_UNSET_A9,
- /* 0x0AA */ ACTOR_EN_ATTACK_NIW,
- /* 0x0AB */ ACTOR_UNSET_AB,
- /* 0x0AC */ ACTOR_UNSET_AC,
- /* 0x0AD */ ACTOR_UNSET_AD,
- /* 0x0AE */ ACTOR_EN_MK,
- /* 0x0AF */ ACTOR_EN_OWL,
- /* 0x0B0 */ ACTOR_EN_ISHI,
- /* 0x0B1 */ ACTOR_OBJ_HANA,
- /* 0x0B2 */ ACTOR_OBJ_LIGHTSWITCH,
- /* 0x0B3 */ ACTOR_OBJ_MURE2,
- /* 0x0B4 */ ACTOR_UNSET_B4,
- /* 0x0B5 */ ACTOR_EN_FU,
- /* 0x0B6 */ ACTOR_UNSET_B6,
- /* 0x0B7 */ ACTOR_UNSET_B7,
- /* 0x0B8 */ ACTOR_EN_STREAM,
- /* 0x0B9 */ ACTOR_EN_MM,
- /* 0x0BA */ ACTOR_UNSET_BA,
- /* 0x0BB */ ACTOR_UNSET_BB,
- /* 0x0BC */ ACTOR_EN_WEATHER_TAG,
- /* 0x0BD */ ACTOR_EN_ANI,
- /* 0x0BE */ ACTOR_UNSET_BE,
- /* 0x0BF */ ACTOR_EN_JS,
- /* 0x0C0 */ ACTOR_UNSET_C0,
- /* 0x0C1 */ ACTOR_UNSET_C1,
- /* 0x0C2 */ ACTOR_UNSET_C2,
- /* 0x0C3 */ ACTOR_UNSET_C3,
- /* 0x0C4 */ ACTOR_EN_OKARINA_EFFECT,
- /* 0x0C5 */ ACTOR_EN_MAG,
- /* 0x0C6 */ ACTOR_ELF_MSG2,
- /* 0x0C7 */ ACTOR_BG_F40_SWLIFT,
- /* 0x0C8 */ ACTOR_UNSET_C8,
- /* 0x0C9 */ ACTOR_UNSET_C9,
- /* 0x0CA */ ACTOR_EN_KAKASI,
- /* 0x0CB */ ACTOR_OBJ_MAKEOSHIHIKI,
- /* 0x0CC */ ACTOR_OCEFF_SPOT,
- /* 0x0CD */ ACTOR_UNSET_CD,
- /* 0x0CE */ ACTOR_EN_TORCH,
- /* 0x0CF */ ACTOR_UNSET_CF,
- /* 0x0D0 */ ACTOR_SHOT_SUN,
- /* 0x0D1 */ ACTOR_UNSET_D1,
- /* 0x0D2 */ ACTOR_UNSET_D2,
- /* 0x0D3 */ ACTOR_OBJ_ROOMTIMER,
- /* 0x0D4 */ ACTOR_EN_SSH,
- /* 0x0D5 */ ACTOR_UNSET_D5,
- /* 0x0D6 */ ACTOR_OCEFF_WIPE,
- /* 0x0D7 */ ACTOR_OCEFF_STORM,
- /* 0x0D8 */ ACTOR_OBJ_DEMO,
- /* 0x0D9 */ ACTOR_EN_MINISLIME,
- /* 0x0DA */ ACTOR_EN_NUTSBALL,
- /* 0x0DB */ ACTOR_UNSET_DB,
- /* 0x0DC */ ACTOR_UNSET_DC,
- /* 0x0DD */ ACTOR_UNSET_DD,
- /* 0x0DE */ ACTOR_UNSET_DE,
- /* 0x0DF */ ACTOR_OCEFF_WIPE2,
- /* 0x0E0 */ ACTOR_OCEFF_WIPE3,
- /* 0x0E1 */ ACTOR_UNSET_E1,
- /* 0x0E2 */ ACTOR_EN_DG,
- /* 0x0E3 */ ACTOR_EN_SI,
- /* 0x0E4 */ ACTOR_OBJ_COMB,
- /* 0x0E5 */ ACTOR_OBJ_KIBAKO2,
- /* 0x0E6 */ ACTOR_UNSET_E6,
- /* 0x0E7 */ ACTOR_EN_HS2,
- /* 0x0E8 */ ACTOR_OBJ_MURE3,
- /* 0x0E9 */ ACTOR_EN_TG,
- /* 0x0EA */ ACTOR_UNSET_EA,
- /* 0x0EB */ ACTOR_UNSET_EB,
- /* 0x0EC */ ACTOR_EN_WF,
- /* 0x0ED */ ACTOR_EN_SKB,
- /* 0x0EE */ ACTOR_UNSET_EE,
- /* 0x0EF */ ACTOR_EN_GS,
- /* 0x0F0 */ ACTOR_OBJ_SOUND,
- /* 0x0F1 */ ACTOR_EN_CROW,
- /* 0x0F2 */ ACTOR_UNSET_F2,
- /* 0x0F3 */ ACTOR_EN_COW,
- /* 0x0F4 */ ACTOR_UNSET_F4,
- /* 0x0F5 */ ACTOR_UNSET_F5,
- /* 0x0F6 */ ACTOR_OCEFF_WIPE4,
- /* 0x0F7 */ ACTOR_UNSET_F7,
- /* 0x0F8 */ ACTOR_EN_ZO,
- /* 0x0F9 */ ACTOR_OBJ_MAKEKINSUTA,
- /* 0x0FA */ ACTOR_EN_GE3,
- /* 0x0FB */ ACTOR_UNSET_FB,
- /* 0x0FC */ ACTOR_OBJ_HAMISHI,
- /* 0x0FD */ ACTOR_EN_ZL4,
- /* 0x0FE */ ACTOR_EN_MM2,
- /* 0x0FF */ ACTOR_UNSET_FF,
- /* 0x100 */ ACTOR_DOOR_SPIRAL,
- /* 0x101 */ ACTOR_UNSET_101,
- /* 0x102 */ ACTOR_OBJ_PZLBLOCK,
- /* 0x103 */ ACTOR_OBJ_TOGE,
- /* 0x104 */ ACTOR_UNSET_104,
- /* 0x105 */ ACTOR_OBJ_ARMOS,
- /* 0x106 */ ACTOR_OBJ_BOYO,
- /* 0x107 */ ACTOR_UNSET_107,
- /* 0x108 */ ACTOR_UNSET_108,
- /* 0x109 */ ACTOR_EN_GRASSHOPPER,
- /* 0x10A */ ACTOR_UNSET_10A,
- /* 0x10B */ ACTOR_OBJ_GRASS,
- /* 0x10C */ ACTOR_OBJ_GRASS_CARRY,
- /* 0x10D */ ACTOR_OBJ_GRASS_UNIT,
- /* 0x10E */ ACTOR_UNSET_10E,
- /* 0x10F */ ACTOR_UNSET_10F,
- /* 0x110 */ ACTOR_BG_FIRE_WALL,
- /* 0x111 */ ACTOR_EN_BU,
- /* 0x112 */ ACTOR_EN_ENCOUNT3,
- /* 0x113 */ ACTOR_EN_JSO,
- /* 0x114 */ ACTOR_OBJ_CHIKUWA,
- /* 0x115 */ ACTOR_EN_KNIGHT,
- /* 0x116 */ ACTOR_EN_WARP_TAG,
- /* 0x117 */ ACTOR_EN_AOB_01,
- /* 0x118 */ ACTOR_EN_BOJ_01,
- /* 0x119 */ ACTOR_EN_BOJ_02,
- /* 0x11A */ ACTOR_EN_BOJ_03,
- /* 0x11B */ ACTOR_EN_ENCOUNT4,
- /* 0x11C */ ACTOR_EN_BOM_BOWL_MAN,
- /* 0x11D */ ACTOR_EN_SYATEKI_MAN,
- /* 0x11E */ ACTOR_UNSET_11E,
- /* 0x11F */ ACTOR_BG_ICICLE,
- /* 0x120 */ ACTOR_EN_SYATEKI_CROW,
- /* 0x121 */ ACTOR_EN_BOJ_04,
- /* 0x122 */ ACTOR_EN_CNE_01,
- /* 0x123 */ ACTOR_EN_BBA_01,
- /* 0x124 */ ACTOR_EN_BJI_01,
- /* 0x125 */ ACTOR_BG_SPDWEB,
- /* 0x126 */ ACTOR_UNSET_126,
- /* 0x127 */ ACTOR_UNSET_127,
- /* 0x128 */ ACTOR_EN_MT_TAG,
- /* 0x129 */ ACTOR_BOSS_01,
- /* 0x12A */ ACTOR_BOSS_02,
- /* 0x12B */ ACTOR_BOSS_03,
- /* 0x12C */ ACTOR_BOSS_04,
- /* 0x12D */ ACTOR_BOSS_05,
- /* 0x12E */ ACTOR_BOSS_06,
- /* 0x12F */ ACTOR_BOSS_07,
- /* 0x130 */ ACTOR_BG_DY_YOSEIZO,
- /* 0x131 */ ACTOR_UNSET_131,
- /* 0x132 */ ACTOR_EN_BOJ_05,
- /* 0x133 */ ACTOR_UNSET_133,
- /* 0x134 */ ACTOR_UNSET_134,
- /* 0x135 */ ACTOR_EN_SOB1,
- /* 0x136 */ ACTOR_UNSET_136,
- /* 0x137 */ ACTOR_UNSET_137,
- /* 0x138 */ ACTOR_EN_GO,
- /* 0x139 */ ACTOR_UNSET_139,
- /* 0x13A */ ACTOR_EN_RAF,
- /* 0x13B */ ACTOR_OBJ_FUNEN,
- /* 0x13C */ ACTOR_OBJ_RAILLIFT,
- /* 0x13D */ ACTOR_BG_NUMA_HANA,
- /* 0x13E */ ACTOR_OBJ_FLOWERPOT,
- /* 0x13F */ ACTOR_OBJ_SPINYROLL,
- /* 0x140 */ ACTOR_DM_HINA,
- /* 0x141 */ ACTOR_EN_SYATEKI_WF,
- /* 0x142 */ ACTOR_OBJ_SKATEBLOCK,
- /* 0x143 */ ACTOR_OBJ_ICEBLOCK,
- /* 0x144 */ ACTOR_EN_BIGPAMET,
- /* 0x145 */ ACTOR_EN_SYATEKI_DEKUNUTS,
- /* 0x146 */ ACTOR_ELF_MSG3,
- /* 0x147 */ ACTOR_EN_FG,
- /* 0x148 */ ACTOR_DM_RAVINE,
- /* 0x149 */ ACTOR_DM_SA,
- /* 0x14A */ ACTOR_EN_SLIME,
- /* 0x14B */ ACTOR_EN_PR,
- /* 0x14C */ ACTOR_OBJ_TOUDAI,
- /* 0x14D */ ACTOR_OBJ_ENTOTU,
- /* 0x14E */ ACTOR_OBJ_BELL,
- /* 0x14F */ ACTOR_EN_SYATEKI_OKUTA,
- /* 0x150 */ ACTOR_UNSET_150,
- /* 0x151 */ ACTOR_OBJ_SHUTTER,
- /* 0x152 */ ACTOR_DM_ZL,
- /* 0x153 */ ACTOR_EN_ELFGRP,
- /* 0x154 */ ACTOR_DM_TSG,
- /* 0x155 */ ACTOR_EN_BAGUO,
- /* 0x156 */ ACTOR_OBJ_VSPINYROLL,
- /* 0x157 */ ACTOR_OBJ_SMORK,
- /* 0x158 */ ACTOR_EN_TEST2,
- /* 0x159 */ ACTOR_EN_TEST3,
- /* 0x15A */ ACTOR_EN_TEST4,
- /* 0x15B */ ACTOR_EN_BAT,
- /* 0x15C */ ACTOR_EN_SEKIHI,
- /* 0x15D */ ACTOR_EN_WIZ,
- /* 0x15E */ ACTOR_EN_WIZ_BROCK,
- /* 0x15F */ ACTOR_EN_WIZ_FIRE,
- /* 0x160 */ ACTOR_EFF_CHANGE,
- /* 0x161 */ ACTOR_DM_STATUE,
- /* 0x162 */ ACTOR_OBJ_FIRESHIELD,
- /* 0x163 */ ACTOR_BG_LADDER,
- /* 0x164 */ ACTOR_EN_MKK,
- /* 0x165 */ ACTOR_DEMO_GETITEM,
- /* 0x166 */ ACTOR_UNSET_166,
- /* 0x167 */ ACTOR_EN_DNB,
- /* 0x168 */ ACTOR_EN_DNH,
- /* 0x169 */ ACTOR_EN_DNK,
- /* 0x16A */ ACTOR_EN_DNQ,
- /* 0x16B */ ACTOR_UNSET_16B,
- /* 0x16C */ ACTOR_BG_KEIKOKU_SAKU,
- /* 0x16D */ ACTOR_OBJ_HUGEBOMBIWA,
- /* 0x16E */ ACTOR_EN_FIREFLY2,
- /* 0x16F */ ACTOR_EN_RAT,
- /* 0x170 */ ACTOR_EN_WATER_EFFECT,
- /* 0x171 */ ACTOR_EN_KUSA2,
- /* 0x172 */ ACTOR_BG_SPOUT_FIRE,
- /* 0x173 */ ACTOR_UNSET_173,
- /* 0x174 */ ACTOR_BG_DBLUE_MOVEBG,
- /* 0x175 */ ACTOR_EN_DY_EXTRA,
- /* 0x176 */ ACTOR_EN_BAL,
- /* 0x177 */ ACTOR_EN_GINKO_MAN,
- /* 0x178 */ ACTOR_EN_WARP_UZU,
- /* 0x179 */ ACTOR_OBJ_DRIFTICE,
- /* 0x17A */ ACTOR_EN_LOOK_NUTS,
- /* 0x17B */ ACTOR_EN_MUSHI2,
- /* 0x17C */ ACTOR_EN_FALL,
- /* 0x17D */ ACTOR_EN_MM3,
- /* 0x17E */ ACTOR_BG_CRACE_MOVEBG,
- /* 0x17F */ ACTOR_EN_DNO,
- /* 0x180 */ ACTOR_EN_PR2,
- /* 0x181 */ ACTOR_EN_PRZ,
- /* 0x182 */ ACTOR_EN_JSO2,
- /* 0x183 */ ACTOR_OBJ_ETCETERA,
- /* 0x184 */ ACTOR_EN_EGOL,
- /* 0x185 */ ACTOR_OBJ_MINE,
- /* 0x186 */ ACTOR_OBJ_PURIFY,
- /* 0x187 */ ACTOR_EN_TRU,
- /* 0x188 */ ACTOR_EN_TRT,
- /* 0x189 */ ACTOR_UNSET_189,
- /* 0x18A */ ACTOR_UNSET_18A,
- /* 0x18B */ ACTOR_EN_TEST5,
- /* 0x18C */ ACTOR_EN_TEST6,
- /* 0x18D */ ACTOR_EN_AZ,
- /* 0x18E */ ACTOR_EN_ESTONE,
- /* 0x18F */ ACTOR_BG_HAKUGIN_POST,
- /* 0x190 */ ACTOR_DM_OPSTAGE,
- /* 0x191 */ ACTOR_DM_STK,
- /* 0x192 */ ACTOR_DM_CHAR00,
- /* 0x193 */ ACTOR_DM_CHAR01,
- /* 0x194 */ ACTOR_DM_CHAR02,
- /* 0x195 */ ACTOR_DM_CHAR03,
- /* 0x196 */ ACTOR_DM_CHAR04,
- /* 0x197 */ ACTOR_DM_CHAR05,
- /* 0x198 */ ACTOR_DM_CHAR06,
- /* 0x199 */ ACTOR_DM_CHAR07,
- /* 0x19A */ ACTOR_DM_CHAR08,
- /* 0x19B */ ACTOR_DM_CHAR09,
- /* 0x19C */ ACTOR_OBJ_TOKEIDAI,
- /* 0x19D */ ACTOR_UNSET_19D,
- /* 0x19E */ ACTOR_EN_MNK,
- /* 0x19F */ ACTOR_EN_EGBLOCK,
- /* 0x1A0 */ ACTOR_EN_GUARD_NUTS,
- /* 0x1A1 */ ACTOR_BG_HAKUGIN_BOMBWALL,
- /* 0x1A2 */ ACTOR_OBJ_TOKEI_TOBIRA,
- /* 0x1A3 */ ACTOR_BG_HAKUGIN_ELVPOLE,
- /* 0x1A4 */ ACTOR_EN_MA4,
- /* 0x1A5 */ ACTOR_EN_TWIG,
- /* 0x1A6 */ ACTOR_EN_PO_FUSEN,
- /* 0x1A7 */ ACTOR_EN_DOOR_ETC,
- /* 0x1A8 */ ACTOR_EN_BIGOKUTA,
- /* 0x1A9 */ ACTOR_BG_ICEFLOE,
- /* 0x1AA */ ACTOR_OBJ_OCARINALIFT,
- /* 0x1AB */ ACTOR_EN_TIME_TAG,
- /* 0x1AC */ ACTOR_BG_OPEN_SHUTTER,
- /* 0x1AD */ ACTOR_BG_OPEN_SPOT,
- /* 0x1AE */ ACTOR_BG_FU_KAITEN,
- /* 0x1AF */ ACTOR_OBJ_AQUA,
- /* 0x1B0 */ ACTOR_EN_ELFORG,
- /* 0x1B1 */ ACTOR_EN_ELFBUB,
- /* 0x1B2 */ ACTOR_UNSET_1B2,
- /* 0x1B3 */ ACTOR_EN_FU_MATO,
- /* 0x1B4 */ ACTOR_EN_FU_KAGO,
- /* 0x1B5 */ ACTOR_EN_OSN,
- /* 0x1B6 */ ACTOR_BG_CTOWER_GEAR,
- /* 0x1B7 */ ACTOR_EN_TRT2,
- /* 0x1B8 */ ACTOR_OBJ_TOKEI_STEP,
- /* 0x1B9 */ ACTOR_BG_LOTUS,
- /* 0x1BA */ ACTOR_EN_KAME,
- /* 0x1BB */ ACTOR_OBJ_TAKARAYA_WALL,
- /* 0x1BC */ ACTOR_BG_FU_MIZU,
- /* 0x1BD */ ACTOR_EN_SELLNUTS,
- /* 0x1BE */ ACTOR_BG_DKJAIL_IVY,
- /* 0x1BF */ ACTOR_UNSET_1BF,
- /* 0x1C0 */ ACTOR_OBJ_VISIBLOCK,
- /* 0x1C1 */ ACTOR_EN_TAKARAYA,
- /* 0x1C2 */ ACTOR_EN_TSN,
- /* 0x1C3 */ ACTOR_EN_DS2N,
- /* 0x1C4 */ ACTOR_EN_FSN,
- /* 0x1C5 */ ACTOR_EN_SHN,
- /* 0x1C6 */ ACTOR_UNSET_1C6,
- /* 0x1C7 */ ACTOR_EN_STOP_HEISHI,
- /* 0x1C8 */ ACTOR_OBJ_BIGICICLE,
- /* 0x1C9 */ ACTOR_EN_LIFT_NUTS,
- /* 0x1CA */ ACTOR_EN_TK,
- /* 0x1CB */ ACTOR_UNSET_1CB,
- /* 0x1CC */ ACTOR_BG_MARKET_STEP,
- /* 0x1CD */ ACTOR_OBJ_LUPYGAMELIFT,
- /* 0x1CE */ ACTOR_EN_TEST7,
- /* 0x1CF */ ACTOR_OBJ_LIGHTBLOCK,
- /* 0x1D0 */ ACTOR_MIR_RAY2,
- /* 0x1D1 */ ACTOR_EN_WDHAND,
- /* 0x1D2 */ ACTOR_EN_GAMELUPY,
- /* 0x1D3 */ ACTOR_BG_DANPEI_MOVEBG,
- /* 0x1D4 */ ACTOR_EN_SNOWWD,
- /* 0x1D5 */ ACTOR_EN_PM,
- /* 0x1D6 */ ACTOR_EN_GAKUFU,
- /* 0x1D7 */ ACTOR_ELF_MSG4,
- /* 0x1D8 */ ACTOR_ELF_MSG5,
- /* 0x1D9 */ ACTOR_EN_COL_MAN,
- /* 0x1DA */ ACTOR_EN_TALK_GIBUD,
- /* 0x1DB */ ACTOR_EN_GIANT,
- /* 0x1DC */ ACTOR_OBJ_SNOWBALL,
- /* 0x1DD */ ACTOR_BOSS_HAKUGIN,
- /* 0x1DE */ ACTOR_EN_GB2,
- /* 0x1DF */ ACTOR_EN_ONPUMAN,
- /* 0x1E0 */ ACTOR_BG_TOBIRA01,
- /* 0x1E1 */ ACTOR_EN_TAG_OBJ,
- /* 0x1E2 */ ACTOR_OBJ_DHOUSE,
- /* 0x1E3 */ ACTOR_OBJ_HAKAISI,
- /* 0x1E4 */ ACTOR_BG_HAKUGIN_SWITCH,
- /* 0x1E5 */ ACTOR_UNSET_1E5,
- /* 0x1E6 */ ACTOR_EN_SNOWMAN,
- /* 0x1E7 */ ACTOR_TG_SW,
- /* 0x1E8 */ ACTOR_EN_PO_SISTERS,
- /* 0x1E9 */ ACTOR_EN_PP,
- /* 0x1EA */ ACTOR_EN_HAKUROCK,
- /* 0x1EB */ ACTOR_EN_HANABI,
- /* 0x1EC */ ACTOR_OBJ_DOWSING,
- /* 0x1ED */ ACTOR_OBJ_WIND,
- /* 0x1EE */ ACTOR_EN_RACEDOG,
- /* 0x1EF */ ACTOR_EN_KENDO_JS,
- /* 0x1F0 */ ACTOR_BG_BOTIHASIRA,
- /* 0x1F1 */ ACTOR_EN_FISH2,
- /* 0x1F2 */ ACTOR_EN_PST,
- /* 0x1F3 */ ACTOR_EN_POH,
- /* 0x1F4 */ ACTOR_OBJ_SPIDERTENT,
- /* 0x1F5 */ ACTOR_EN_ZORAEGG,
- /* 0x1F6 */ ACTOR_EN_KBT,
- /* 0x1F7 */ ACTOR_EN_GG,
- /* 0x1F8 */ ACTOR_EN_MARUTA,
- /* 0x1F9 */ ACTOR_OBJ_SNOWBALL2,
- /* 0x1FA */ ACTOR_EN_GG2,
- /* 0x1FB */ ACTOR_OBJ_GHAKA,
- /* 0x1FC */ ACTOR_EN_DNP,
- /* 0x1FD */ ACTOR_EN_DAI,
- /* 0x1FE */ ACTOR_BG_GORON_OYU,
- /* 0x1FF */ ACTOR_EN_KGY,
- /* 0x200 */ ACTOR_EN_INVADEPOH,
- /* 0x201 */ ACTOR_EN_GK,
- /* 0x202 */ ACTOR_EN_AN,
- /* 0x203 */ ACTOR_UNSET_203,
- /* 0x204 */ ACTOR_EN_BEE,
- /* 0x205 */ ACTOR_EN_OT,
- /* 0x206 */ ACTOR_EN_DRAGON,
- /* 0x207 */ ACTOR_OBJ_DORA,
- /* 0x208 */ ACTOR_EN_BIGPO,
- /* 0x209 */ ACTOR_OBJ_KENDO_KANBAN,
- /* 0x20A */ ACTOR_OBJ_HARIKO,
- /* 0x20B */ ACTOR_EN_STH,
- /* 0x20C */ ACTOR_BG_SINKAI_KABE,
- /* 0x20D */ ACTOR_BG_HAKA_CURTAIN,
- /* 0x20E */ ACTOR_BG_KIN2_BOMBWALL,
- /* 0x20F */ ACTOR_BG_KIN2_FENCE,
- /* 0x210 */ ACTOR_BG_KIN2_PICTURE,
- /* 0x211 */ ACTOR_BG_KIN2_SHELF,
- /* 0x212 */ ACTOR_EN_RAIL_SKB,
- /* 0x213 */ ACTOR_EN_JG,
- /* 0x214 */ ACTOR_EN_TRU_MT,
- /* 0x215 */ ACTOR_OBJ_UM,
- /* 0x216 */ ACTOR_EN_NEO_REEBA,
- /* 0x217 */ ACTOR_BG_MBAR_CHAIR,
- /* 0x218 */ ACTOR_BG_IKANA_BLOCK,
- /* 0x219 */ ACTOR_BG_IKANA_MIRROR,
- /* 0x21A */ ACTOR_BG_IKANA_ROTARYROOM,
- /* 0x21B */ ACTOR_BG_DBLUE_BALANCE,
- /* 0x21C */ ACTOR_BG_DBLUE_WATERFALL,
- /* 0x21D */ ACTOR_EN_KAIZOKU,
- /* 0x21E */ ACTOR_EN_GE2,
- /* 0x21F */ ACTOR_EN_MA_YTS,
- /* 0x220 */ ACTOR_EN_MA_YTO,
- /* 0x221 */ ACTOR_OBJ_TOKEI_TURRET,
- /* 0x222 */ ACTOR_BG_DBLUE_ELEVATOR,
- /* 0x223 */ ACTOR_OBJ_WARPSTONE,
- /* 0x224 */ ACTOR_EN_ZOG,
- /* 0x225 */ ACTOR_OBJ_ROTLIFT,
- /* 0x226 */ ACTOR_OBJ_JG_GAKKI,
- /* 0x227 */ ACTOR_BG_INIBS_MOVEBG,
- /* 0x228 */ ACTOR_EN_ZOT,
- /* 0x229 */ ACTOR_OBJ_TREE,
- /* 0x22A */ ACTOR_OBJ_Y2LIFT,
- /* 0x22B */ ACTOR_OBJ_Y2SHUTTER,
- /* 0x22C */ ACTOR_OBJ_BOAT,
- /* 0x22D */ ACTOR_OBJ_TARU,
- /* 0x22E */ ACTOR_OBJ_HUNSUI,
- /* 0x22F */ ACTOR_EN_JC_MATO,
- /* 0x230 */ ACTOR_MIR_RAY3,
- /* 0x231 */ ACTOR_EN_ZOB,
- /* 0x232 */ ACTOR_ELF_MSG6,
- /* 0x233 */ ACTOR_OBJ_NOZOKI,
- /* 0x234 */ ACTOR_EN_TOTO,
- /* 0x235 */ ACTOR_EN_RAILGIBUD,
- /* 0x236 */ ACTOR_EN_BABA,
- /* 0x237 */ ACTOR_EN_SUTTARI,
- /* 0x238 */ ACTOR_EN_ZOD,
- /* 0x239 */ ACTOR_EN_KUJIYA,
- /* 0x23A */ ACTOR_EN_GEG,
- /* 0x23B */ ACTOR_OBJ_KINOKO,
- /* 0x23C */ ACTOR_OBJ_YASI,
- /* 0x23D */ ACTOR_EN_TANRON1,
- /* 0x23E */ ACTOR_EN_TANRON2,
- /* 0x23F */ ACTOR_EN_TANRON3,
- /* 0x240 */ ACTOR_OBJ_CHAN,
- /* 0x241 */ ACTOR_EN_ZOS,
- /* 0x242 */ ACTOR_EN_S_GORO,
- /* 0x243 */ ACTOR_EN_NB,
- /* 0x244 */ ACTOR_EN_JA,
- /* 0x245 */ ACTOR_BG_F40_BLOCK,
- /* 0x246 */ ACTOR_BG_F40_SWITCH,
- /* 0x247 */ ACTOR_EN_PO_COMPOSER,
- /* 0x248 */ ACTOR_EN_GURUGURU,
- /* 0x249 */ ACTOR_OCEFF_WIPE5,
- /* 0x24A */ ACTOR_EN_STONE_HEISHI,
- /* 0x24B */ ACTOR_OCEFF_WIPE6,
- /* 0x24C */ ACTOR_EN_SCOPENUTS,
- /* 0x24D */ ACTOR_EN_SCOPECROW,
- /* 0x24E */ ACTOR_OCEFF_WIPE7,
- /* 0x24F */ ACTOR_EFF_KAMEJIMA_WAVE,
- /* 0x250 */ ACTOR_EN_HG,
- /* 0x251 */ ACTOR_EN_HGO,
- /* 0x252 */ ACTOR_EN_ZOV,
- /* 0x253 */ ACTOR_EN_AH,
- /* 0x254 */ ACTOR_OBJ_HGDOOR,
- /* 0x255 */ ACTOR_BG_IKANA_BOMBWALL,
- /* 0x256 */ ACTOR_BG_IKANA_RAY,
- /* 0x257 */ ACTOR_BG_IKANA_SHUTTER,
- /* 0x258 */ ACTOR_BG_HAKA_BOMBWALL,
- /* 0x259 */ ACTOR_BG_HAKA_TOMB,
- /* 0x25A */ ACTOR_EN_SC_RUPPE,
- /* 0x25B */ ACTOR_BG_IKNV_DOUKUTU,
- /* 0x25C */ ACTOR_BG_IKNV_OBJ,
- /* 0x25D */ ACTOR_EN_PAMERA,
- /* 0x25E */ ACTOR_OBJ_HSSTUMP,
- /* 0x25F */ ACTOR_EN_HIDDEN_NUTS,
- /* 0x260 */ ACTOR_EN_ZOW,
- /* 0x261 */ ACTOR_EN_TALK,
- /* 0x262 */ ACTOR_EN_AL,
- /* 0x263 */ ACTOR_EN_TAB,
- /* 0x264 */ ACTOR_EN_NIMOTSU,
- /* 0x265 */ ACTOR_EN_HIT_TAG,
- /* 0x266 */ ACTOR_EN_RUPPECROW,
- /* 0x267 */ ACTOR_EN_TANRON4,
- /* 0x268 */ ACTOR_EN_TANRON5,
- /* 0x269 */ ACTOR_EN_TANRON6,
- /* 0x26A */ ACTOR_EN_DAIKU2,
- /* 0x26B */ ACTOR_EN_MUTO,
- /* 0x26C */ ACTOR_EN_BAISEN,
- /* 0x26D */ ACTOR_EN_HEISHI,
- /* 0x26E */ ACTOR_EN_DEMO_HEISHI,
- /* 0x26F */ ACTOR_EN_DT,
- /* 0x270 */ ACTOR_EN_CHA,
- /* 0x271 */ ACTOR_OBJ_DINNER,
- /* 0x272 */ ACTOR_EFF_LASTDAY,
- /* 0x273 */ ACTOR_BG_IKANA_DHARMA,
- /* 0x274 */ ACTOR_EN_AKINDONUTS,
- /* 0x275 */ ACTOR_EFF_STK,
- /* 0x276 */ ACTOR_EN_IG,
- /* 0x277 */ ACTOR_EN_RG,
- /* 0x278 */ ACTOR_EN_OSK,
- /* 0x279 */ ACTOR_EN_STH2,
- /* 0x27A */ ACTOR_EN_YB,
- /* 0x27B */ ACTOR_EN_RZ,
- /* 0x27C */ ACTOR_EN_SCOPECOIN,
- /* 0x27D */ ACTOR_EN_BJT,
- /* 0x27E */ ACTOR_EN_BOMJIMA,
- /* 0x27F */ ACTOR_EN_BOMJIMB,
- /* 0x280 */ ACTOR_EN_BOMBERS,
- /* 0x281 */ ACTOR_EN_BOMBERS2,
- /* 0x282 */ ACTOR_EN_BOMBAL,
- /* 0x283 */ ACTOR_OBJ_MOON_STONE,
- /* 0x284 */ ACTOR_OBJ_MU_PICT,
- /* 0x285 */ ACTOR_BG_IKNINSIDE,
- /* 0x286 */ ACTOR_EFF_ZORABAND,
- /* 0x287 */ ACTOR_OBJ_KEPN_KOYA,
- /* 0x288 */ ACTOR_OBJ_USIYANE,
- /* 0x289 */ ACTOR_EN_NNH,
- /* 0x28A */ ACTOR_OBJ_KZSAKU,
- /* 0x28B */ ACTOR_OBJ_MILK_BIN,
- /* 0x28C */ ACTOR_EN_KITAN,
- /* 0x28D */ ACTOR_BG_ASTR_BOMBWALL,
- /* 0x28E */ ACTOR_BG_IKNIN_SUSCEIL,
- /* 0x28F */ ACTOR_EN_BSB,
- /* 0x290 */ ACTOR_EN_RECEPGIRL,
- /* 0x291 */ ACTOR_EN_THIEFBIRD,
- /* 0x292 */ ACTOR_EN_JGAME_TSN,
- /* 0x293 */ ACTOR_OBJ_JGAME_LIGHT,
- /* 0x294 */ ACTOR_OBJ_YADO,
- /* 0x295 */ ACTOR_DEMO_SYOTEN,
- /* 0x296 */ ACTOR_DEMO_MOONEND,
- /* 0x297 */ ACTOR_BG_LBFSHOT,
- /* 0x298 */ ACTOR_BG_LAST_BWALL,
- /* 0x299 */ ACTOR_EN_AND,
- /* 0x29A */ ACTOR_EN_INVADEPOH_DEMO,
- /* 0x29B */ ACTOR_OBJ_DANPEILIFT,
- /* 0x29C */ ACTOR_EN_FALL2,
- /* 0x29D */ ACTOR_DM_AL,
- /* 0x29E */ ACTOR_DM_AN,
- /* 0x29F */ ACTOR_DM_AH,
- /* 0x2A0 */ ACTOR_DM_NB,
- /* 0x2A1 */ ACTOR_EN_DRS,
- /* 0x2A2 */ ACTOR_EN_ENDING_HERO,
- /* 0x2A3 */ ACTOR_DM_BAL,
- /* 0x2A4 */ ACTOR_EN_PAPER,
- /* 0x2A5 */ ACTOR_EN_HINT_SKB,
- /* 0x2A6 */ ACTOR_DM_TAG,
- /* 0x2A7 */ ACTOR_EN_BH,
- /* 0x2A8 */ ACTOR_EN_ENDING_HERO2,
- /* 0x2A9 */ ACTOR_EN_ENDING_HERO3,
- /* 0x2AA */ ACTOR_EN_ENDING_HERO4,
- /* 0x2AB */ ACTOR_EN_ENDING_HERO5,
- /* 0x2AC */ ACTOR_EN_ENDING_HERO6,
- /* 0x2AD */ ACTOR_DM_GM,
- /* 0x2AE */ ACTOR_OBJ_SWPRIZE,
- /* 0x2AF */ ACTOR_EN_INVISIBLE_RUPPE,
- /* 0x2B0 */ ACTOR_OBJ_ENDING,
- /* 0x2B1 */ ACTOR_EN_RSN,
+
+#define DEFINE_ACTOR(_name, enumValue, _allocType, _debugName) enumValue,
+#define DEFINE_ACTOR_INTERNAL(_name, enumValue, _allocType, _debugName) enumValue,
+#define DEFINE_ACTOR_UNSET(enumValue) enumValue,
+
+typedef enum ActorId {
+ #include "tables/actor_table.h"
/* 0x2B2 */ ACTOR_ID_MAX // originally "ACTOR_DLF_MAX"
-} ActorID;
+} ActorId;
+
+#undef DEFINE_ACTOR
+#undef DEFINE_ACTOR_INTERNAL
+#undef DEFINE_ACTOR_UNSET
typedef enum {
/* 0 */ DOORLOCK_NORMAL,
@@ -1137,10 +516,10 @@ typedef enum {
#define ACTOR_FLAG_20 (1 << 5)
//
#define ACTOR_FLAG_40 (1 << 6)
-// Invisible
-#define ACTOR_FLAG_80 (1 << 7)
-// Related to talk
-#define ACTOR_FLAG_100 (1 << 8)
+// hidden or revealed by Lens of Truth (depending on room lensMode)
+#define ACTOR_FLAG_REACT_TO_LENS (1 << 7)
+// Player has requested to talk to the actor; Player uses this flag differently than every other actor
+#define ACTOR_FLAG_TALK_REQUESTED (1 << 8)
//
#define ACTOR_FLAG_200 (1 << 9)
//
@@ -1157,8 +536,8 @@ typedef enum {
#define ACTOR_FLAG_8000 (1 << 15)
//
#define ACTOR_FLAG_10000 (1 << 16)
-//
-#define ACTOR_FLAG_20000 (1 << 17)
+// actor can press and hold down heavy switches
+#define ACTOR_FLAG_CAN_PRESS_HEAVY_SWITCH (1 << 17)
//
#define ACTOR_FLAG_40000 (1 << 18)
//
@@ -1175,10 +554,10 @@ typedef enum {
#define ACTOR_FLAG_1000000 (1 << 24)
//
#define ACTOR_FLAG_2000000 (1 << 25)
-//
-#define ACTOR_FLAG_4000000 (1 << 26)
-//
-#define ACTOR_FLAG_8000000 (1 << 27)
+// actor can press and hold down switches
+#define ACTOR_FLAG_CAN_PRESS_SWITCH (1 << 26)
+// Prevents locking on with Z targeting an actor even if Tatl is floating over it
+#define ACTOR_FLAG_CANT_LOCK_ON (1 << 27)
//
#define ACTOR_FLAG_10000000 (1 << 28)
//
@@ -1188,6 +567,25 @@ typedef enum {
//
#define ACTOR_FLAG_80000000 (1 << 31)
+#define DROPFLAG_NONE (0)
+#define DROPFLAG_1 (1 << 0)
+#define DROPFLAG_2 (1 << 1)
+#define DROPFLAG_20 (1 << 5)
+
+#define COLORFILTER_GET_COLORFLAG(colorFilterParams) ((colorFilterParams) & 0xC000)
+#define COLORFILTER_GET_COLORINTENSITY(colorFilterParams) (((colorFilterParams) & 0x1F00) >> 5)
+#define COLORFILTER_GET_DURATION(colorFilterParams) ((colorFilterParams) & 0xFF)
+
+#define COLORFILTER_COLORFLAG_NONE 0xC000
+#define COLORFILTER_COLORFLAG_GRAY 0x8000
+#define COLORFILTER_COLORFLAG_RED 0x4000
+#define COLORFILTER_COLORFLAG_BLUE 0x0000
+
+#define COLORFILTER_INTENSITY_FLAG 0x8000
+
+#define COLORFILTER_BUFFLAG_XLU 0x2000
+#define COLORFILTER_BUFFLAG_OPA 0x0000
+
typedef enum {
/* 0x00 */ CLEAR_TAG_SMALL_EXPLOSION,
/* 0x01 */ CLEAR_TAG_LARGE_EXPLOSION,
@@ -1303,4 +701,41 @@ typedef enum {
/* 0xFF */ TATL_HINT_ID_NONE = 0xFF
} TatlHintId;
+typedef struct TargetRangeParams {
+ /* 0x0 */ f32 rangeSq;
+ /* 0x4 */ f32 leashScale;
+} TargetRangeParams; // size = 0x8
+
+typedef enum NpcTalkState {
+ /* 0 */ NPC_TALK_STATE_IDLE, // NPC not currently talking to player
+ /* 1 */ NPC_TALK_STATE_TALKING, // NPC is currently talking to player
+ /* 2 */ NPC_TALK_STATE_ACTION, // An NPC-defined action triggered in the conversation
+ /* 3 */ NPC_TALK_STATE_ITEM_GIVEN // NPC finished giving an item and text box is done
+} NpcTalkState;
+
+typedef enum NpcTrackingMode {
+ /* 0 */ NPC_TRACKING_PLAYER_AUTO_TURN, // Determine tracking mode based on player position, see Npc_UpdateAutoTurn
+ /* 1 */ NPC_TRACKING_NONE, // Don't track the target (usually the player)
+ /* 2 */ NPC_TRACKING_HEAD_AND_TORSO, // Track target by turning the head and the torso
+ /* 3 */ NPC_TRACKING_HEAD, // Track target by turning the head
+ /* 4 */ NPC_TRACKING_FULL_BODY // Track target by turning the body, torso and head
+} NpcTrackingMode;
+
+typedef struct NpcInteractInfo {
+ /* 0x00 */ s16 talkState;
+ /* 0x02 */ s16 trackingMode;
+ /* 0x04 */ s16 autoTurnTimer;
+ /* 0x06 */ s16 autoTurnState;
+ /* 0x08 */ Vec3s headRot;
+ /* 0x0E */ Vec3s torsoRot;
+ /* 0x14 */ f32 yOffset; // Y position offset to add to actor position when calculating angle to target
+ /* 0x18 */ Vec3f trackPos;
+ /* 0x24 */ UNK_TYPE1 unk_24[0x4];
+} NpcInteractInfo; // size = 0x28
+
+extern TargetRangeParams gTargetRanges[];
+extern s16 D_801AED48[8];
+extern Gfx D_801AEF88[];
+extern Gfx D_801AEFA0[];
+
#endif
diff --git a/include/z64animation.h b/include/z64animation.h
index b697dbfdf..44c35312d 100644
--- a/include/z64animation.h
+++ b/include/z64animation.h
@@ -1,5 +1,5 @@
-#ifndef Z64_ANIMATION_H
-#define Z64_ANIMATION_H
+#ifndef Z64ANIMATION_H
+#define Z64ANIMATION_H
#include "PR/ultratypes.h"
#include "PR/gbi.h"
@@ -9,27 +9,27 @@
struct PlayState;
struct Actor;
struct SkelAnime;
+struct PlayerAnimationFrame;
-#define LINK_ANIMETION_OFFSET(addr, offset) \
- (SEGMENT_ROM_START(link_animetion) + ((u32)addr & 0xFFFFFF) + ((u32)offset))
#define LIMB_DONE 0xFF
-#define ANIMATION_ENTRY_MAX 50
+#define ANIM_FLAG_1 (1 << 0)
#define ANIM_FLAG_UPDATEY (1 << 1)
+#define ANIM_FLAG_4 (1 << 2)
#define ANIM_FLAG_NOMOVE (1 << 4)
-typedef enum {
+typedef enum AnimationMode {
/* 0 */ ANIMMODE_LOOP,
/* 1 */ ANIMMODE_LOOP_INTERP,
/* 2 */ ANIMMODE_ONCE,
/* 3 */ ANIMMODE_ONCE_INTERP,
/* 4 */ ANIMMODE_LOOP_PARTIAL,
/* 5 */ ANIMMODE_LOOP_PARTIAL_INTERP
-} AnimationModes;
+} AnimationMode;
-typedef enum {
+typedef enum {
/* -1 */ ANIMTAPER_DECEL = -1,
- /* 0 */ ANIMTAPER_NONE,
+ /* 0 */ ANIMTAPER_NONE,
/* 1 */ ANIMTAPER_ACCEL
} AnimationTapers;
@@ -79,35 +79,19 @@ typedef struct {
/* 0xC */ u16 staticIndexMax;
} AnimationHeader; // size = 0x10
-typedef struct {
- /* 0x00 */ s16 xMax;
- /* 0x02 */ s16 x;
- /* 0x04 */ s16 yMax;
- /* 0x06 */ s16 y;
- /* 0x08 */ s16 zMax;
- /* 0x10 */ s16 z;
-} JointKey; // size = 0x12
-
-typedef struct {
- /* 0x0 */ s16 frameCount;
- /* 0x2 */ s16 limbCount;
- /* 0x4 */ s16* frameData;
- /* 0x8 */ JointKey* jointKey;
-} LegacyAnimationHeader; // size = 0xC
-
typedef enum {
- ANIMATION_LINKANIMETION,
- ANIMENTRY_COPYALL,
- ANIMENTRY_INTERP,
- ANIMENTRY_COPYTRUE,
- ANIMENTRY_COPYFALSE,
- ANIMENTRY_MOVEACTOR
+ /* 0 */ ANIMATION_LINKANIMETION,
+ /* 1 */ ANIMENTRY_COPYALL,
+ /* 2 */ ANIMENTRY_INTERP,
+ /* 3 */ ANIMENTRY_COPYTRUE,
+ /* 4 */ ANIMENTRY_COPYFALSE,
+ /* 5 */ ANIMENTRY_MOVEACTOR
} AnimationType;
typedef struct {
/* 0x00 */ DmaRequest req;
/* 0x20 */ OSMesgQueue msgQueue;
- /* 0x38 */ OSMesg msg;
+ /* 0x38 */ OSMesg msg[1];
} AnimEntryLoadFrame; // size = 0x3C
typedef struct {
@@ -163,13 +147,16 @@ typedef struct {
typedef struct AnimationContext {
/* 0x000 */ s16 animationCount;
- /* 0x004 */ AnimationEntry entries[ANIMATION_ENTRY_MAX];
+ /* 0x004 */ AnimationEntry entries[50];
} AnimationContext; // size = 0xC84
typedef struct {
/* 0x0 */ AnimationHeaderCommon common;
- /* 0x4 */ u32 segment;
-} LinkAnimationHeader; // size = 0x8
+ /* 0x4 */ union {
+ void* segmentVoid;
+ struct PlayerAnimationFrame* linkAnimSegment;
+ };
+} PlayerAnimationHeader; // size = 0x8
typedef struct SkelAnime {
/* 0x00 */ u8 limbCount; // Number of limbs in the skeleton
@@ -177,7 +164,7 @@ typedef struct SkelAnime {
/* 0x02 */ u8 dListCount; // Number of display lists in a flexible skeleton
/* 0x03 */ s8 taper; // Tapering to use when morphing between animations. Only used by Door_Warp1.
/* 0x04 */ void** skeleton; // An array of pointers to limbs. Can be StandardLimb, LodLimb, or SkinLimb.
- /* 0x08 */ void* animation; // Can be an AnimationHeader or LinkAnimationHeader.
+ /* 0x08 */ void* animation; // Can be an AnimationHeader or PlayerAnimationHeader.
/* 0x0C */ f32 startFrame; // In mode 4, start of partial loop.
/* 0x10 */ f32 endFrame; // In mode 2, Update returns true when curFrame is equal to this. In mode 4, end of partial loop.
/* 0x14 */ f32 animLength; // Total number of frames in the current animation's file.
@@ -189,10 +176,10 @@ typedef struct SkelAnime {
/* 0x2C */ f32 morphRate; // Reciprocal of the number of frames in the morph
/* 0x30 */ union {
s32 (*normal)(struct SkelAnime*);// Can be Loop, Partial loop, Play once, Morph, or Tapered morph
- s32 (*link)(struct PlayState*, struct SkelAnime*); // Loop, Play once, and Morph
+ s32 (*player)(struct PlayState*, struct SkelAnime*); // Loop, Play once, and Morph
} update;
- /* 0x34 */ s8 initFlags; // Flags used when initializing Link's skeleton
- /* 0x35 */ u8 moveFlags; // Flags used for animations that move the actor in worldspace.
+ /* 0x34 */ s8 initFlags; // Flags used when initializing Player's skeleton
+ /* 0x35 */ u8 moveFlags; // Flags used for animations that move the actor in worldspace.
/* 0x36 */ s16 prevRot; // Previous rotation in worldspace.
/* 0x38 */ Vec3s prevTransl; // Previous modelspace translation.
/* 0x3E */ Vec3s baseTransl; // Base modelspace translation.
@@ -222,8 +209,6 @@ typedef void (*TransformLimbDraw)(struct PlayState* play, s32 limbIndex, struct
typedef void (*AnimationEntryCallback)(struct PlayState*, AnimationEntryData*);
-extern u32 link_animetion_segment;
-
typedef struct {
/* 0x00 */ AnimationHeader* animation;
/* 0x04 */ f32 playSpeed;
@@ -318,4 +303,68 @@ typedef s32 (*OverrideKeyframeDrawScaled)(struct PlayState* play, SkeletonInfo*
typedef void (*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);
+void SkelAnime_DrawFlexLod(struct PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, OverrideLimbDrawFlex overrideLimbDraw, PostLimbDrawFlex postLimbDraw, struct Actor* actor, s32 lod);
+void SkelAnime_DrawOpa(struct PlayState* play, void** skeleton, Vec3s* jointTable, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, struct Actor* actor);
+void SkelAnime_DrawFlexOpa(struct PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, struct Actor* actor);
+void SkelAnime_DrawTransformFlexOpa(struct PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, TransformLimbDrawOpa transformLimbDraw, struct Actor* actor);
+s16 Animation_GetLastFrame(void* animation);
+Gfx* SkelAnime_Draw(struct PlayState* play, void** skeleton, Vec3s* jointTable, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, struct Actor* actor, Gfx* gfx);
+Gfx* SkelAnime_DrawFlex(struct PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, struct Actor* actor, Gfx* gfx);
+
+void AnimationContext_Reset(AnimationContext* animationCtx);
+void AnimationContext_SetNextQueue(struct PlayState* play);
+void AnimationContext_DisableQueue(struct PlayState* play);
+void AnimationContext_SetLoadFrame(struct PlayState* play, PlayerAnimationHeader* animation, s32 frame, s32 limbCount, Vec3s* frameTable);
+void AnimationContext_SetCopyAll(struct PlayState* play, s32 vecCount, Vec3s* dst, Vec3s* src);
+void AnimationContext_SetInterp(struct PlayState* play, s32 vecCount, Vec3s* base, Vec3s* mod, f32 weight);
+void AnimationContext_SetCopyTrue(struct PlayState* play, s32 vecCount, Vec3s* dst, Vec3s* src, u8* copyFlag);
+void AnimationContext_SetCopyFalse(struct PlayState* play, s32 vecCount, Vec3s* dst, Vec3s* src, u8* copyFlag);
+void AnimationContext_SetMoveActor(struct PlayState* play, struct Actor* actor, SkelAnime* skelAnime, f32 arg3);
+
+void AnimationContext_Update(struct PlayState* play, AnimationContext* animationCtx);
+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 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);
+void PlayerAnimation_PlayOnceSetSpeed(struct PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation, f32 playSpeed);
+void PlayerAnimation_PlayLoop(struct PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation);
+void PlayerAnimation_PlayLoopSetSpeed(struct PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation, f32 playSpeed);
+void PlayerAnimation_CopyJointToMorph(struct PlayState* play, SkelAnime* skelAnime);
+void PlayerAnimation_CopyMorphToJoint(struct PlayState* play, SkelAnime* skelAnime);
+void PlayerAnimation_LoadToMorph(struct PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation, f32 frame);
+void PlayerAnimation_LoadToJoint(struct PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation, f32 frame);
+void PlayerAnimation_InterpJointMorph(struct PlayState* play, SkelAnime* skelAnime, f32 weight);
+void PlayerAnimation_BlendToJoint(struct PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation1, f32 frame1, PlayerAnimationHeader* animation2, f32 frame2, f32 blendWeight, void* blendTableBuffer);
+void PlayerAnimation_BlendToMorph(struct PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation1, f32 frame1, PlayerAnimationHeader* animation2, f32 frame2, f32 blendWeight, void* blendTableBuffer);
+void PlayerAnimation_EndLoop(SkelAnime* skelAnime);
+s32 PlayerAnimation_OnFrame(SkelAnime* skelAnime, f32 frame);
+
+void SkelAnime_Init(struct PlayState* play, SkelAnime* skelAnime, SkeletonHeader* skeletonHeaderSeg, AnimationHeader* animation, Vec3s* jointTable, Vec3s* morphTable, s32 limbCount);
+void SkelAnime_InitFlex(struct PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeader* skeletonHeaderSeg, AnimationHeader* animation, Vec3s* jointTable, Vec3s* morphTable, s32 limbCount);
+void SkelAnime_InitSkin(struct GameState* gameState, SkelAnime* skelAnime, SkeletonHeader* skeletonHeaderSeg, AnimationHeader* animation);
+
+s32 SkelAnime_Update(SkelAnime* skelAnime);
+void Animation_ChangeImpl(SkelAnime* skelAnime, AnimationHeader* animation, f32 playSpeed, f32 startFrame, f32 endFrame, u8 mode, f32 morphFrames, s8 taper);
+void Animation_Change(SkelAnime* skelAnime, AnimationHeader* animation, f32 playSpeed, f32 startFrame, f32 endFrame, u8 mode, f32 morphFrames);
+void Animation_PlayOnce(SkelAnime* skelAnime, AnimationHeader* animation);
+void Animation_MorphToPlayOnce(SkelAnime* skelAnime, AnimationHeader* animation, f32 morphFrames);
+void Animation_PlayOnceSetSpeed(SkelAnime* skelAnime, AnimationHeader* animation, f32 playSpeed);
+void Animation_PlayLoop(SkelAnime* skelAnime, AnimationHeader* animation);
+void Animation_MorphToLoop(SkelAnime* skelAnime, AnimationHeader* animation, f32 morphFrames);
+void Animation_PlayLoopSetSpeed(SkelAnime* skelAnime, AnimationHeader* animation, f32 playSpeed);
+void Animation_EndLoop(SkelAnime* skelAnime);
+void Animation_Reverse(SkelAnime* skelAnime);
+void SkelAnime_CopyFrameTableTrue(SkelAnime* skelAnime, Vec3s* dst, Vec3s* src, u8* copyFlag);
+void SkelAnime_CopyFrameTableFalse(SkelAnime* skelAnime, Vec3s* dst, Vec3s* src, u8* copyFlag);
+void SkelAnime_UpdateTranslation(SkelAnime* skelAnime, Vec3f* diff, s16 angle);
+s32 Animation_OnFrame(SkelAnime* skelAnime, f32 frame);
+void SkelAnime_Free(SkelAnime* skelAnime, struct PlayState* play);
+
+// ZAPD compatibility typedefs
+// TODO: Remove when ZAPD adds support for them
+typedef PlayerAnimationHeader LinkAnimationHeader;
+
#endif
diff --git a/include/z64animation_legacy.h b/include/z64animation_legacy.h
new file mode 100644
index 000000000..238939f74
--- /dev/null
+++ b/include/z64animation_legacy.h
@@ -0,0 +1,36 @@
+#ifndef Z64_ANIMATION_LEGACY_H
+#define Z64_ANIMATION_LEGACY_H
+
+#include "ultra64.h"
+#include "z64math.h"
+
+typedef struct LegacyLimb {
+ /* 0x00 */ Gfx* dList;
+ /* 0x04 */ Vec3f trans;
+ /* 0x10 */ Vec3s rot;
+ /* 0x18 */ struct LegacyLimb* sibling;
+ /* 0x1C */ struct LegacyLimb* child;
+} LegacyLimb; // size = 0x20
+
+typedef struct {
+ /* 0x00 */ s16 xMax;
+ /* 0x02 */ s16 x;
+ /* 0x04 */ s16 yMax;
+ /* 0x06 */ s16 y;
+ /* 0x08 */ s16 zMax;
+ /* 0x10 */ s16 z;
+} LegacyJointKey; // size = 0x12
+
+typedef struct {
+ /* 0x0 */ s16 frameCount;
+ /* 0x2 */ s16 limbCount;
+ /* 0x4 */ s16* frameData;
+ /* 0x8 */ LegacyJointKey* jointKey;
+} LegacyAnimationHeader; // size = 0xC
+
+s16 SkelAnime_GetFrameDataLegacy(LegacyAnimationHeader* animation, s32 frame, Vec3s* frameTable);
+s16 Animation_GetLimbCountLegacy(LegacyAnimationHeader* animation);
+s16 Animation_GetLengthLegacy(LegacyAnimationHeader* animation);
+s16 Animation_GetLastFrameLegacy(LegacyAnimationHeader* animation);
+
+#endif
diff --git a/include/z64audio.h b/include/z64audio.h
index 264e8d9e3..a37760566 100644
--- a/include/z64audio.h
+++ b/include/z64audio.h
@@ -1,26 +1,41 @@
-#ifndef Z64_AUDIO_H
-#define Z64_AUDIO_H
+#ifndef Z64AUDIO_H
+#define Z64AUDIO_H
-#define AUDIO_MK_CMD(b0,b1,b2,b3) ((((b0) & 0xFF) << 0x18) | (((b1) & 0xFF) << 0x10) | (((b2) & 0xFF) << 0x8) | (((b3) & 0xFF) << 0))
+#include "audiothread_cmd.h"
#define NO_LAYER ((SequenceLayer*)(-1))
#define TATUMS_PER_BEAT 48
-#define IS_SEQUENCE_CHANNEL_VALID(ptr) ((uintptr_t)(ptr) != (uintptr_t)&gAudioContext.sequenceChannelNone)
+#define IS_SEQUENCE_CHANNEL_VALID(ptr) ((uintptr_t)(ptr) != (uintptr_t)&gAudioCtx.sequenceChannelNone)
#define SEQ_NUM_CHANNELS 16
#define SEQ_IO_VAL_NONE -1
+typedef enum {
+ /* 0 */ AUDIO_HEAP_RESET_STATE_NONE,
+ /* 1 */ AUDIO_HEAP_RESET_STATE_RESETTING,
+ /* 2 */ AUDIO_HEAP_RESET_STATE_RESETTING_ALT // Never set to
+} AudioHeapResetState;
+
+typedef enum {
+ /* 0x00 */ AUDIO_CUSTOM_FUNCTION_SEQ_0,
+ /* 0x01 */ AUDIO_CUSTOM_FUNCTION_SEQ_1,
+ /* 0x02 */ AUDIO_CUSTOM_FUNCTION_SEQ_2,
+ /* 0x03 */ AUDIO_CUSTOM_FUNCTION_SEQ_3,
+ /* 0xFE */ AUDIO_CUSTOM_FUNCTION_SYNTH = 0xFE,
+ /* 0xFF */ AUDIO_CUSTOM_FUNCTION_REVERB
+} AudioCustomFunctions;
+
typedef enum {
/* 0 */ SEQPLAYER_STATE_0,
- /* 1 */ SEQPLAYER_STATE_1, // Fading in
- /* 2 */ SEQPLAYER_STATE_2 // Fading out
+ /* 1 */ SEQPLAYER_STATE_FADE_IN,
+ /* 2 */ SEQPLAYER_STATE_FADE_OUT
} SeqPlayerState;
#define MAX_CHANNELS_PER_BANK 3
-#define MUTE_FLAGS_3 (1 << 3) // prevent further noteSubEus from playing
-#define MUTE_FLAGS_4 (1 << 4) // stop something in seqLayer scripts
+#define MUTE_FLAGS_STOP_SAMPLES (1 << 3) // prevent further noteSubEus from playing
+#define MUTE_FLAGS_STOP_LAYER (1 << 4) // stop something in seqLayer scripts
#define MUTE_FLAGS_SOFTEN (1 << 5) // lower volume, by default to half
#define MUTE_FLAGS_STOP_NOTES (1 << 6) // prevent further notes from playing
#define MUTE_FLAGS_STOP_SCRIPT (1 << 7) // stop processing sequence/channel scripts
@@ -58,6 +73,10 @@ typedef enum {
#define REVERB_INDEX_NONE -1
+// To be used with AudioThread_CountAndReleaseNotes()
+#define AUDIO_NOTE_RELEASE (1 << 0)
+#define AUDIO_NOTE_SAMPLE_NOTES (1 << 1)
+
typedef enum {
/* 0 */ REVERB_DATA_TYPE_SETTINGS, // Reverb Settings (Init)
/* 1 */ REVERB_DATA_TYPE_DELAY, // Reverb Delay (numSamples)
@@ -353,11 +372,11 @@ typedef struct {
/* 0x007 */ s8 playerIndex;
/* 0x008 */ u16 tempo; // tatums per minute
/* 0x00A */ u16 tempoAcc;
- /* 0x00C */ s16 unk_0C;
+ /* 0x00C */ s16 tempoChange;
/* 0x00E */ s16 transposition;
/* 0x010 */ u16 delay;
/* 0x012 */ u16 fadeTimer;
- /* 0x014 */ u16 fadeTimerUnkEu;
+ /* 0x014 */ u16 storedFadeTimer;
/* 0x016 */ u16 unk_16;
/* 0x018 */ u8* seqData;
/* 0x01C */ f32 fadeVolume;
@@ -374,8 +393,8 @@ typedef struct {
/* 0x09C */ NotePool notePool;
/* 0x0DC */ s32 skipTicks;
/* 0x0E0 */ u32 scriptCounter;
- /* 0x0E4 */ char unk_E4[0x74]; // unused struct members for sequence/sound font dma management, according to sm64 decomp
- /* 0x158 */ s8 soundScriptIO[8];
+ /* 0x0E4 */ UNK_TYPE1 unk_E4[0x74]; // unused struct members for sequence/sound font dma management, according to sm64 decomp
+ /* 0x158 */ s8 seqScriptIO[8];
} SequencePlayer; // size = 0x160
typedef struct {
@@ -387,7 +406,7 @@ typedef struct {
typedef struct {
union {
struct {
- /* 0x00 */ u8 unk_0b80 : 1;
+ /* 0x00 */ u8 unused : 1;
/* 0x00 */ u8 hang : 1;
/* 0x00 */ u8 decay : 1;
/* 0x00 */ u8 release : 1;
@@ -402,7 +421,7 @@ typedef struct {
/* 0x0C */ f32 fadeOutVel;
/* 0x10 */ f32 current;
/* 0x14 */ f32 target;
- /* 0x18 */ char unk_18[4];
+ /* 0x18 */ UNK_TYPE1 unk_18[4];
/* 0x1C */ EnvelopePoint* envelope;
} AdsrState; // size = 0x20
@@ -434,11 +453,11 @@ typedef struct {
typedef struct VibratoSubStruct {
/* 0x0 */ u16 vibratoRateStart;
- /* 0x2 */ u16 vibratoExtentStart;
+ /* 0x2 */ u16 vibratoDepthStart;
/* 0x4 */ u16 vibratoRateTarget;
- /* 0x6 */ u16 vibratoExtentTarget;
+ /* 0x6 */ u16 vibratoDepthTarget;
/* 0x8 */ u16 vibratoRateChangeDelay;
- /* 0xA */ u16 vibratoExtentChangeDelay;
+ /* 0xA */ u16 vibratoDepthChangeDelay;
/* 0xC */ u16 vibratoDelay;
} VibratoSubStruct; // size = 0xE
@@ -447,7 +466,7 @@ typedef struct SequenceChannel {
/* 0x00 */ u8 enabled : 1;
/* 0x00 */ u8 finished : 1;
/* 0x00 */ u8 stopScript : 1;
- /* 0x00 */ u8 stopSomething2 : 1; // sets SequenceLayer.stopSomething
+ /* 0x00 */ u8 muted : 1; // sets SequenceLayer.muted
/* 0x00 */ u8 hasInstrument : 1;
/* 0x00 */ u8 stereoHeadsetEffects : 1;
/* 0x00 */ u8 largeNotes : 1; // notes specify duration and velocity
@@ -475,7 +494,7 @@ typedef struct SequenceChannel {
/* 0x0E */ u8 gateTimeRandomVariance;
/* 0x0F */ u8 combFilterSize;
/* 0x10 */ u8 surroundEffectIndex;
- /* 0x11 */ u8 unk_11;
+ /* 0x11 */ u8 channelIndex;
/* 0x12 */ VibratoSubStruct vibrato;
/* 0x20 */ u16 delay;
/* 0x22 */ u16 combFilterGain;
@@ -497,7 +516,7 @@ typedef struct SequenceChannel {
/* 0x64 */ SeqScriptState scriptState;
/* 0x80 */ AdsrSettings adsr;
/* 0x88 */ NotePool notePool;
- /* 0xC8 */ s8 soundScriptIO[8]; // bridge between sound script and audio lib, "io ports"
+ /* 0xC8 */ s8 seqScriptIO[8]; // bridge between sound script and audio lib, "io ports"
/* 0xD0 */ u8* sfxState; // SfxChannelState
/* 0xD4 */ s16* filter;
/* 0xD8 */ StereoData stereoData;
@@ -509,7 +528,7 @@ typedef struct SequenceChannel {
typedef struct SequenceLayer {
/* 0x00 */ u8 enabled : 1;
/* 0x00 */ u8 finished : 1;
- /* 0x00 */ u8 stopSomething : 1;
+ /* 0x00 */ u8 muted : 1;
/* 0x00 */ u8 continuousNotes : 1; // keep the same note for consecutive notes with the same sound
/* 0x00 */ u8 bit3 : 1; // "loaded"?
/* 0x00 */ u8 ignoreDrumPan : 1;
@@ -605,11 +624,11 @@ typedef struct {
/* 0x00 */ struct VibratoSubStruct* vibSubStruct; // Something else?
/* 0x04 */ u32 time;
/* 0x08 */ s16* curve;
- /* 0x0C */ f32 extent;
+ /* 0x0C */ f32 depth;
/* 0x10 */ f32 rate;
/* 0x14 */ u8 active;
/* 0x16 */ u16 rateChangeTimer;
- /* 0x18 */ u16 extentChangeTimer;
+ /* 0x18 */ u16 depthChangeTimer;
/* 0x1A */ u16 delay;
} VibratoState; // size = 0x1C
@@ -984,7 +1003,7 @@ typedef struct {
/* 0x28B0 */ s32 sampleDmaBufSize;
/* 0x28B4 */ s32 maxAudioCmds;
/* 0x28B8 */ s32 numNotes;
- /* 0x2898 */ s16 tempoInternalToExternal;
+ /* 0x2898 */ s16 maxTempo;
/* 0x28BE */ s8 soundMode;
/* 0x28C0 */ s32 totalTaskCount; // The total number of times the top-level function on the audio thread is run since the last audio reset
/* 0x28C4 */ s32 curAudioFrameDmaCount;
@@ -997,13 +1016,13 @@ typedef struct {
/* 0x2980 */ f32 unk_2960;
/* 0x2984*/ s32 refreshRate;
/* 0x2988 */ s16* aiBuffers[3]; // Pointers to the audio buffer allocated on the initPool contained in the audio heap. Stores fully processed digital audio before transferring to the audio interface (AI)
- /* 0x2994 */ s16 aiBufNumSamples[3]; // Number of samples to transfer to the audio interface buffer
+ /* 0x2994 */ s16 numSamplesPerFrame[3]; // Number of samples to transfer to the audio interface buffer
/* 0x299C */ u32 audioRandom;
/* 0x29A0 */ s32 audioErrorFlags;
/* 0x29A4 */ volatile u32 resetTimer;
- /* 0x29A8 */ u32 (*unk_29A8[4])(s8 value, SequenceChannel* channel);
+ /* 0x29A8 */ u32 (*customSeqFunctions[4])(s8 value, SequenceChannel* channel);
/* 0x29B8 */ s8 unk_29B8;
- /* 0x29BC */ s32 unk_29BC; // sMaxAbiCmdCnt
+ /* 0x29BC */ s32 numAbiCmdsMax; // sMaxAbiCmdCnt
/* 0x29C0 */ AudioAllocPool sessionPool; // A sub-pool to main pool, contains all sub-pools and data that changes every audio reset
/* 0x29D0 */ AudioAllocPool externalPool; // pool allocated on an external device. Never used in game
/* 0x29E0 */ AudioAllocPool initPool; // A sub-pool to the main pool, contains all sub-pools and data that persists every audio reset
@@ -1027,7 +1046,7 @@ typedef struct {
/* 0x4398 */ u8 fontLoadStatus[0x30];
/* 0x43C8 */ u8 seqLoadStatus[0x80];
/* 0x4448 */ volatile u8 resetStatus;
- /* 0x4449 */ u8 audioResetSpecIdToLoad;
+ /* 0x4449 */ u8 specId;
/* 0x444C */ s32 audioResetFadeOutFramesLeft;
/* 0x4450 */ f32* adsrDecayTable; // A table on the audio heap that stores decay rates used for ADSR
/* 0x4454 */ u8* audioHeap;
@@ -1039,21 +1058,21 @@ typedef struct {
/* 0x7924 */ s32 sampleStateOffset; // Start of the list of sample states for this update. Resets after each audio frame.
/* 0x7928 */ AudioListItem layerFreeList;
/* 0x7938 */ NotePool noteFreeLists;
- /* 0x7978 */ u8 cmdWritePos;
- /* 0x7979 */ u8 cmdReadPos;
- /* 0x797A */ u8 cmdQueueFinished;
- /* 0x797C */ u16 activeChannelsFlags[5]; // bit-packed for 16 channels. Only channels with bit turned on will be processed
+ /* 0x7978 */ u8 threadCmdWritePos;
+ /* 0x7979 */ u8 threadCmdReadPos;
+ /* 0x797A */ u8 threadCmdQueueFinished;
+ /* 0x797C */ u16 threadCmdChannelMask[5]; // bit-packed for 16 channels. When processing an audio thread channel command on all channels, only process channels with their bit set.
/* 0x7988 */ OSMesgQueue* audioResetQueueP;
/* 0x798C */ OSMesgQueue* taskStartQueueP;
- /* 0x7990 */ OSMesgQueue* cmdProcQueueP;
+ /* 0x7990 */ OSMesgQueue* threadCmdProcQueueP;
/* 0x7994 */ OSMesgQueue taskStartQueue;
- /* 0x79AC */ OSMesgQueue cmdProcQueue;
+ /* 0x79AC */ OSMesgQueue threadCmdProcQueue;
/* 0x79C4 */ OSMesgQueue audioResetQueue;
/* 0x79DC */ OSMesg taskStartMsgs[1];
/* 0x79E0 */ OSMesg audioResetMesgs[1];
- /* 0x79E4 */ OSMesg cmdProcMsgs[4];
- /* 0x79F4 */ AudioCmd cmdBuf[0x100]; // Audio commands used to transfer audio requests from the graph thread to the audio thread
- /* 0x81F4 */ char unk_81F4[4];
+ /* 0x79E4 */ OSMesg threadCmdProcMsgBuf[4];
+ /* 0x79F4 */ AudioCmd threadCmdBuf[0x100]; // Audio commands used to transfer audio requests from the graph thread to the audio thread
+ /* 0x81F4 */ UNK_TYPE1 unk_81F4[4];
} AudioContext; // size = 0x81F8
typedef struct {
@@ -1077,50 +1096,50 @@ typedef struct {
} AudioHeapInitSizes; // size = 0xC
typedef struct {
- /* 0x00 */ f32 unk_00;
- /* 0x04 */ f32 unk_04;
- /* 0x08 */ f32 unk_08;
- /* 0x0C */ f32 unk_10;
- /* 0x10 */ f32 unk_14;
- /* 0x14 */ f32 unk_18;
- /* 0x18 */ u16 unk_0C;
- /* 0x1A */ u16 unk_1C;
-} unk_50_s; // size = 0x1C
+ /* 0x00 */ f32 volCur;
+ /* 0x04 */ f32 volTarget;
+ /* 0x08 */ f32 volStep;
+ /* 0x0C */ f32 freqScaleCur;
+ /* 0x10 */ f32 freqScaleTarget;
+ /* 0x14 */ f32 freqScaleStep;
+ /* 0x18 */ u16 volTimer;
+ /* 0x1A */ u16 freqScaleTimer;
+} ActiveSequenceChannelData; // size = 0x1C
typedef struct {
- /* 0x000 */ unk_50_s unk_50[0x10];
+ /* 0x000 */ ActiveSequenceChannelData channelData[SEQ_NUM_CHANNELS];
/* 0x1C0 */ f32 volCur;
/* 0x1C4 */ f32 volTarget;
- /* 0x1C8 */ f32 unk_08;
- /* 0x1CC */ u32 unk_14;
- /* 0x1D0 */ f32 unk_1C;
- /* 0x1D4 */ f32 unk_20;
- /* 0x1D8 */ f32 unk_24;
- /* 0x1DC */ u32 unk_2C[8];
- /* 0x1FC */ u32 unk_25C;
- /* 0x200 */ u16 unk_0C;
- /* 0x202 */ u16 unk_18;
- /* 0x204 */ u16 unk_28;
- /* 0x206 */ u16 unk_250;
- /* 0x208 */ u16 unk_252;
+ /* 0x1C8 */ f32 volStep;
+ /* 0x1CC */ u32 tempoCmd;
+ /* 0x1D0 */ f32 tempoCur;
+ /* 0x1D4 */ f32 tempoTarget;
+ /* 0x1D8 */ f32 tempoStep;
+ /* 0x1DC */ u32 setupCmd[8]; // setup commands
+ /* 0x1FC */ u32 startAsyncSeqCmd; // temporarily stores the seqCmd used in SEQCMD_PLAY_SEQUENCE, to be called again once the font is reloaded in
+ /* 0x200 */ u16 volTimer;
+ /* 0x202 */ u16 tempoOriginal;
+ /* 0x204 */ u16 tempoTimer;
+ /* 0x206 */ u16 freqScaleChannelFlags;
+ /* 0x208 */ u16 volChannelFlags;
/* 0x20A */ u16 seqId;
- /* 0x20C */ u16 unk_256;
- /* 0x20E */ u16 unk_258;
- /* 0x210 */ u8 unk_260;
- /* 0x211 */ u8 unk_261[0x1];
- /* 0x212 */ u8 volScales[0x4];
+ /* 0x20C */ u16 prevSeqId; // last seqId played on a player
+ /* 0x20E */ u16 channelPortMask;
+ /* 0x210 */ u8 isWaitingForFonts;
+ /* 0x211 */ u8 fontId;
+ /* 0x212 */ u8 volScales[VOL_SCALE_INDEX_MAX];
/* 0x216 */ u8 volFadeTimer;
/* 0x217 */ u8 fadeVolUpdate;
- /* 0x218 */ u8 unk_4C;
- /* 0x219 */ u8 unk_4D;
- /* 0x21A */ u8 unk_4E;
- /* 0x21B */ u8 unk_21B;
+ /* 0x218 */ u8 setupCmdTimer;
+ /* 0x219 */ u8 setupCmdNum; // number of setup commands
+ /* 0x21A */ u8 setupFadeTimer;
+ /* 0x21B */ u8 isSeqPlayerInit;
} ActiveSequence; // size = 0x21C
typedef struct {
- /* 0x0 */ u8 unk_0;
- /* 0x1 */ u8 unk_1; // importance?
-} Struct_8016E320; // size = 0x02
+ /* 0x0 */ u8 seqId;
+ /* 0x1 */ u8 priority;
+} SeqRequest; // size = 0x02
typedef enum {
/* 0 */ BANK_PLAYER,
@@ -1255,4 +1274,9 @@ typedef struct {
/* 0x2 */ u16 params;
} SfxParams; // size = 0x4
+typedef void (*AudioCustomUpdateFunction)(void);
+typedef u32 (*AudioCustomSeqFunction)(s8 value, SequenceChannel* channel);
+typedef s32 (*AudioCustomReverbFunction)(Sample*, s32, s8, s32);
+typedef Acmd* (*AudioCustomSynthFunction)(Acmd*, s32, s32);
+
#endif
diff --git a/include/z64bgcheck.h b/include/z64bgcheck.h
index c2a9bab7c..a5effefca 100644
--- a/include/z64bgcheck.h
+++ b/include/z64bgcheck.h
@@ -1,5 +1,5 @@
-#ifndef Z64_BGCHECK_H
-#define Z64_BGCHECK_H
+#ifndef Z64BGCHECK_H
+#define Z64BGCHECK_H
struct PlayState;
struct Actor;
@@ -48,11 +48,6 @@ struct DynaPolyActor;
#define COLPOLY_IGNORE_ENTITY (1 << 1)
#define COLPOLY_IGNORE_PROJECTILES (1 << 2)
-// Surface Types
-#define COLPOLY_SURFACE_GROUND 0
-#define COLPOLY_SURFACE_SAND 1
-#define COLPOLY_SURFACE_SNOW 14
-
// CollisionContext flags
#define BGCHECK_FLAG_REVERSE_CONVEYOR_FLOW 1
@@ -96,7 +91,10 @@ typedef struct {
/* 0x00 */ Vec3s pos;
/* 0x06 */ Vec3s rot;
/* 0x0C */ s16 fov;
- /* 0x0E */ s16 unk_0E;
+ /* 0x0E */ union {
+ s16 roomImageOverrideBgCamIndex;
+ s16 unk_0E;
+ };
/* 0x10 */ s16 unk_10;
} BgCamFuncData; // size = 0x12
@@ -108,9 +106,123 @@ typedef struct {
// 0x0008_0000 = ?
// 0x0007_E000 = room index, 0x3F = all rooms
// 0x0000_1F00 = lighting setting index
- // 0x0000_00FF = CamData index
+ // 0x0000_00FF = bgCam index
} WaterBox; // size = 0x10
+typedef enum FloorType {
+ /* 0 */ FLOOR_TYPE_0,
+ /* 1 */ FLOOR_TYPE_1,
+ /* 2 */ FLOOR_TYPE_2,
+ /* 3 */ FLOOR_TYPE_3,
+ /* 4 */ FLOOR_TYPE_4,
+ /* 5 */ FLOOR_TYPE_5,
+ /* 6 */ FLOOR_TYPE_6,
+ /* 7 */ FLOOR_TYPE_7,
+ /* 8 */ FLOOR_TYPE_8,
+ /* 9 */ FLOOR_TYPE_9,
+ /* 10 */ FLOOR_TYPE_10,
+ /* 11 */ FLOOR_TYPE_11,
+ /* 12 */ FLOOR_TYPE_12,
+ /* 13 */ FLOOR_TYPE_13,
+ /* 14 */ FLOOR_TYPE_14,
+ /* 15 */ FLOOR_TYPE_15
+} FloorType;
+
+typedef enum WallType {
+ /* 0 */ WALL_TYPE_0,
+ /* 1 */ WALL_TYPE_1,
+ /* 2 */ WALL_TYPE_2,
+ /* 3 */ WALL_TYPE_3,
+ /* 4 */ WALL_TYPE_4,
+ /* 5 */ WALL_TYPE_5,
+ /* 6 */ WALL_TYPE_6,
+ /* 7 */ WALL_TYPE_7,
+ /* 8 */ WALL_TYPE_8,
+ /* 9 */ WALL_TYPE_9,
+ /* 10 */ WALL_TYPE_10,
+ /* 11 */ WALL_TYPE_11,
+ /* 12 */ WALL_TYPE_12,
+ /* 32 */ WALL_TYPE_MAX = 32
+} WallType;
+
+#define WALL_FLAG_0 (1 << 0)
+#define WALL_FLAG_1 (1 << 1)
+#define WALL_FLAG_2 (1 << 2)
+#define WALL_FLAG_3 (1 << 3)
+#define WALL_FLAG_4 (1 << 4)
+#define WALL_FLAG_5 (1 << 5)
+#define WALL_FLAG_6 (1 << 6)
+
+// SurfaceType can leave footsteps imprints in the material
+#define MATERIAL_PROPERTY_SOFT_IMPRINT (1 << 0)
+
+typedef enum FloorProperty {
+ /* 0 */ FLOOR_PROPERTY_0,
+ /* 1 */ FLOOR_PROPERTY_1,
+ /* 2 */ FLOOR_PROPERTY_2,
+ /* 5 */ FLOOR_PROPERTY_5 = 5,
+ /* 6 */ FLOOR_PROPERTY_6,
+ /* 7 */ FLOOR_PROPERTY_7,
+ /* 8 */ FLOOR_PROPERTY_8,
+ /* 9 */ FLOOR_PROPERTY_9,
+ /* 11 */ FLOOR_PROPERTY_11 = 11,
+ /* 12 */ FLOOR_PROPERTY_12,
+ /* 13 */ FLOOR_PROPERTY_13
+} FloorProperty;
+
+typedef enum SurfaceSfxOffset {
+ /* 0 */ SURFACE_SFX_OFFSET_DIRT,
+ /* 1 */ SURFACE_SFX_OFFSET_SAND,
+ /* 2 */ SURFACE_SFX_OFFSET_STONE,
+ /* 3 */ SURFACE_SFX_OFFSET_DIRT_SHALLOW,
+ /* 4 */ SURFACE_SFX_OFFSET_WATER_SHALLOW,
+ /* 5 */ SURFACE_SFX_OFFSET_WATER_DEEP,
+ /* 6 */ SURFACE_SFX_OFFSET_TALL_GRASS,
+ /* 7 */ SURFACE_SFX_OFFSET_LAVA, // MAGMA?
+ /* 8 */ SURFACE_SFX_OFFSET_GRASS,
+ /* 9 */ SURFACE_SFX_OFFSET_CARPET,
+ /* 10 */ SURFACE_SFX_OFFSET_WOOD,
+ /* 11 */ SURFACE_SFX_OFFSET_BRIDGE, // WOOD_PLANK?
+ /* 12 */ SURFACE_SFX_OFFSET_VINE, // METAL?
+ /* 13 */ SURFACE_SFX_OFFSET_DIRT_DEEP,
+ /* 14 */ SURFACE_SFX_OFFSET_SNOW,
+ /* 15 */ SURFACE_SFX_OFFSET_ICE
+} SurfaceSfxOffset;
+
+typedef enum SurfaceMaterial {
+ /* 0 */ SURFACE_MATERIAL_DIRT,
+ /* 1 */ SURFACE_MATERIAL_SAND,
+ /* 2 */ SURFACE_MATERIAL_STONE,
+ /* 3 */ SURFACE_MATERIAL_DIRT_SHALLOW,
+ /* 4 */ SURFACE_MATERIAL_WATER_SHALLOW,
+ /* 5 */ SURFACE_MATERIAL_WATER_DEEP,
+ /* 6 */ SURFACE_MATERIAL_TALL_GRASS,
+ /* 7 */ SURFACE_MATERIAL_LAVA, // MAGMA?
+ /* 8 */ SURFACE_MATERIAL_GRASS,
+ /* 9 */ SURFACE_MATERIAL_BRIDGE, // WOOD_PLANK?
+ /* 10 */ SURFACE_MATERIAL_WOOD,
+ /* 11 */ SURFACE_MATERIAL_DIRT_SOFT,
+ /* 12 */ SURFACE_MATERIAL_ICE,
+ /* 13 */ SURFACE_MATERIAL_CARPET,
+ /* 14 */ SURFACE_MATERIAL_SNOW,
+ /* 15 */ SURFACE_MATERIAL_MAX
+} SurfaceMaterial;
+
+typedef enum FloorEffect {
+ /* 0 */ FLOOR_EFFECT_0,
+ /* 1 */ FLOOR_EFFECT_1,
+ /* 2 */ FLOOR_EFFECT_2,
+ /* 3 */ FLOOR_EFFECT_3
+} FloorEffect;
+
+typedef enum ConveyorSpeed {
+ /* 0 */ CONVEYOR_SPEED_DISABLED,
+ /* 1 */ CONVEYOR_SPEED_SLOW,
+ /* 2 */ CONVEYOR_SPEED_MEDIUM,
+ /* 3 */ CONVEYOR_SPEED_FAST,
+ /* 4 */ CONVEYOR_SPEED_MAX
+} ConveyorSpeed;
+
typedef struct {
/* 0x0 */ u32 data[2];
@@ -122,7 +234,7 @@ typedef struct {
// 0x001C_0000 = ?
// 0x0003_E000 = ?
// 0x0000_1F00 = scene exit index
- // 0x0000_00FF = CamData index
+ // 0x0000_00FF = bgCam index
// Word 1
// 0x0800_0000 = wall damage
// 0x07E0_0000 = conveyor direction
@@ -202,10 +314,16 @@ typedef struct {
/* 0x60 */ f32 maxY;
} BgActor; // size = 0x64
+#define BGACTOR_IN_USE (1 << 0) // The bgActor entry is in use
+#define BGACTOR_1 (1 << 1)
+#define BGACTOR_COLLISION_DISABLED (1 << 2) // The collision of the bgActor is disabled
+#define BGACTOR_CEILING_COLLISION_DISABLED (1 << 3) // The ceiling collision of the bgActor is ignored
+#define BGACTOR_FLOOR_COLLISION_DISABLED (1 << 5) // The floor collision of the bgActor is ignored
+
typedef struct {
/* 0x0000 */ u8 bitFlag;
/* 0x0004 */ BgActor bgActors[BG_ACTOR_MAX];
- /* 0x138C */ u16 bgActorFlags[BG_ACTOR_MAX]; // bit 0 - Is mesh active
+ /* 0x138C */ u16 bgActorFlags[BG_ACTOR_MAX];
/* 0x13F0 */ CollisionPoly* polyList;
/* 0x13F4 */ Vec3s* vtxList;
/* 0x13F8 */ DynaWaterBoxList waterBoxList;
@@ -216,14 +334,14 @@ typedef struct {
} DynaCollisionContext; // size = 0x1418
typedef struct {
- /* 0x00 */ CollisionHeader* colHeader; // scene's static collision
- /* 0x04 */ Vec3f minBounds; // minimum coordinates of collision bounding box
- /* 0x10 */ Vec3f maxBounds; // maximum coordinates of collision bounding box
- /* 0x1C */ Vec3i subdivAmount; // x, y, z subdivisions of the scene's static collision
- /* 0x28 */ Vec3f subdivLength; // x, y, z subdivision worldspace lengths
- /* 0x34 */ Vec3f subdivLengthInv; // inverse of subdivision length
- /* 0x40 */ StaticLookup* lookupTbl; // 3d array of length subdivAmount
- /* 0x44 */ SSNodeList polyNodes;
+ /* 0x0000 */ CollisionHeader* colHeader; // scene's static collision
+ /* 0x0004 */ Vec3f minBounds; // minimum coordinates of collision bounding box
+ /* 0x0010 */ Vec3f maxBounds; // maximum coordinates of collision bounding box
+ /* 0x001C */ Vec3i subdivAmount; // x, y, z subdivisions of the scene's static collision
+ /* 0x0028 */ Vec3f subdivLength; // x, y, z subdivision worldspace lengths
+ /* 0x0034 */ Vec3f subdivLengthInv; // inverse of subdivision length
+ /* 0x0040 */ StaticLookup* lookupTbl; // 3d array of length subdivAmount
+ /* 0x0044 */ SSNodeList polyNodes;
/* 0x0050 */ DynaCollisionContext dyna;
/* 0x1468 */ u32 memSize; // Size of all allocated memory plus CollisionContext
/* 0x146C */ u32 flags; // bit 0 reverses conveyor direction (i.e. water flow in Great Bay Temple)
@@ -314,4 +432,162 @@ typedef struct {
/* 0x8 */ s32 nodeListMax; // if -1, dynamically compute max nodes
} BgCheckSceneSubdivisionEntry; // size = 0xC
+void SSNode_SetValue(SSNode* node, s16* polyIndex, u16 next);
+void SSList_SetNull(SSList* ssList);
+void SSNodeList_SetSSListHead(SSNodeList* list, SSList* ssList, s16* polyIndex);
+void DynaSSNodeList_SetSSListHead(DynaSSNodeList* list, SSList* ssList, s16* polyIndex);
+void DynaSSNodeList_Init(struct PlayState* play, DynaSSNodeList* list);
+void DynaSSNodeList_Alloc(struct PlayState* play, DynaSSNodeList* list, u32 numNodes);
+void DynaSSNodeList_ResetCount(DynaSSNodeList* list);
+u16 DynaSSNodeList_GetNextNodeIdx(DynaSSNodeList* list);
+void BgCheck_Vec3sToVec3f(Vec3s* src, Vec3f* dest);
+void BgCheck_Vec3fToVec3s(Vec3s* dest, Vec3f* src);
+f32 func_800BFD84(CollisionPoly *poly, f32 arg1, f32 arg2);
+s32 func_800BFDEC(CollisionPoly* polyA, CollisionPoly* polyB, u32* outVtxId0, u32* outVtxId1);
+s16 CollisionPoly_GetMinY(CollisionPoly* poly, Vec3s* vertices);
+void CollisionPoly_GetNormalF(CollisionPoly* poly, f32* nx, f32* ny, f32* nz);
+void func_800C0094(CollisionPoly* poly, f32 tx, f32 ty, f32 tz, MtxF* dest);
+f32 CollisionPoly_GetPointDistanceFromPlane(CollisionPoly* poly, Vec3f* point);
+void CollisionPoly_GetVerticesByBgId(CollisionPoly* poly, s32 bgId, CollisionContext* colCtx, Vec3f* dest);
+s32 CollisionPoly_SphVsPoly(CollisionPoly* poly, Vec3s* vtxList, Vec3f* center, f32 radius);
+void StaticLookup_AddPolyToSSList(CollisionContext* colCtx, SSList* ssList, CollisionPoly* polyList, Vec3s* vtxList, s16 polyId);
+void StaticLookup_AddPoly(StaticLookup* lookup, CollisionContext* colCtx, CollisionPoly* polyList, Vec3s* vtxList, s16 index);
+void BgCheck_GetSubdivisionMinBounds(CollisionContext* colCtx, Vec3f* pos, s32* sx, s32* sy, s32* sz);
+void BgCheck_GetSubdivisionMaxBounds(CollisionContext* colCtx, Vec3f* pos, s32* sx, s32* sy, s32* sz);
+void BgCheck_GetPolySubdivisionBounds(CollisionContext* colCtx, Vec3s* vtxList, CollisionPoly* polyList, s32* subdivMinX, s32* subdivMinY, s32* subdivMinZ, s32* subdivMaxX, s32* subdivMaxY, s32* subdivMaxZ, s16 polyId);
+s32 BgCheck_PolyIntersectsSubdivision(Vec3f* min, Vec3f* max, CollisionPoly* polyList, Vec3s* vtxList, s16 polyId);
+u32 BgCheck_InitStaticLookup(CollisionContext* colCtx, struct PlayState* play, StaticLookup* lookupTbl);
+s32 BgCheck_IsSmallMemScene(struct PlayState* play);
+s32 BgCheck_TryGetCustomMemsize(s32 sceneId, u32* memSize);
+void BgCheck_SetSubdivisionDimension(f32 min, s32 subdivAmount, f32* max, f32* subdivLength, f32* subdivLengthInv);
+s32 BgCheck_GetSpecialSceneMaxObjects(struct PlayState* play, s32* maxNodes, s32* maxPolygons, s32* maxVertices);
+void BgCheck_Allocate(CollisionContext* colCtx, struct PlayState* play, CollisionHeader* colHeader);
+void BgCheck_SetContextFlags(CollisionContext* colCtx, u32 flags);
+void BgCheck_UnsetContextFlags(CollisionContext* colCtx, u32 flags);
+CollisionHeader* BgCheck_GetCollisionHeader(CollisionContext* colCtx, s32 bgId);
+f32 BgCheck_RaycastFloorImpl(struct PlayState* play, CollisionContext* colCtx, u16 xpFlags, CollisionPoly** outPoly, s32* outBgId, Vec3f* pos, Actor* actor, u32 arg7, f32 checkDist, s32 arg9);
+f32 BgCheck_CameraRaycastFloor1(CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos);
+f32 BgCheck_EntityRaycastFloor1(CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos);
+f32 BgCheck_EntityRaycastFloor2(struct PlayState* play, CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos);
+f32 BgCheck_EntityRaycastFloor2_1(struct PlayState* play, CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos);
+f32 BgCheck_EntityRaycastFloor3(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Vec3f* pos);
+f32 BgCheck_EntityRaycastFloor5(CollisionContext* colCtx, CollisionPoly** outPoly, s32* outBgId, Actor* actor, Vec3f* pos);
+f32 BgCheck_EntityRaycastFloor5_2(struct PlayState* play, CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos);
+f32 BgCheck_EntityRaycastFloor5_3(struct PlayState* play, CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos);
+f32 BgCheck_EntityRaycastFloor6(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos, f32 checkDist);
+f32 BgCheck_EntityRaycastFloor7(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos);
+f32 BgCheck_AnyRaycastFloor1(CollisionContext* colCtx, CollisionPoly* outPoly, Vec3f* pos);
+f32 BgCheck_AnyRaycastFloor2(CollisionContext* colCtx, CollisionPoly* outPoly, s32* bgId, Vec3f* pos);
+f32 BgCheck_CameraRaycastFloor2(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Vec3f* pos);
+f32 BgCheck_EntityRaycastFloor8(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos);
+f32 BgCheck_EntityRaycastFloor9(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Vec3f* pos);
+s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, Actor* actor, f32 checkHeight, u8 argA);
+s32 BgCheck_EntitySphVsWall1(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, f32 checkHeight);
+s32 BgCheck_EntitySphVsWall2(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, f32 checkHeight);
+s32 BgCheck_EntitySphVsWall3(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, Actor* actor, f32 checkHeight);
+s32 BgCheck_EntitySphVsWall4(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, Actor* actor, f32 checkHeight);
+s32 BgCheck_CheckCeilingImpl(CollisionContext* colCtx, u16 xpFlags, f32* outY, Vec3f* pos, f32 checkHeight, CollisionPoly** outPoly, s32* outBgId, Actor* actor);
+s32 BgCheck_AnyCheckCeiling(CollisionContext* colCtx, f32* outY, Vec3f* pos, f32 checkHeight);
+s32 BgCheck_EntityCheckCeiling(CollisionContext* colCtx, f32* outY, Vec3f* pos, f32 checkHeight, CollisionPoly** outPoly, s32* outBgId, Actor* actor);
+s32 BgCheck_CameraLineTest1(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId);
+s32 BgCheck_CameraLineTest2(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId);
+s32 BgCheck_EntityLineTest1(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId);
+s32 BgCheck_EntityLineTest2(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId, Actor* actor);
+s32 BgCheck_EntityLineTest3(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId, Actor* actor, f32 checkDist);
+s32 BgCheck_ProjectileLineTest(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId);
+s32 BgCheck_AnyLineTest1(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkOneFace);
+s32 BgCheck_AnyLineTest2(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace);
+s32 BgCheck_AnyLineTest3(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId);
+s32 BgCheck_SphVsFirstPolyImpl(CollisionContext* colCtx, u16 xpFlags, CollisionPoly** outPoly, s32* outBgId, Vec3f* center, f32 radius, Actor* actor, u16 bciFlags);
+s32 BgCheck_SphVsFirstPoly(CollisionContext* colCtx, Vec3f* center, f32 radius);
+s32 BgCheck_SphVsFirstWall(CollisionContext* colCtx, Vec3f* center, f32 radius);
+void SSNodeList_Init(SSNodeList* this);
+void SSNodeList_Alloc(struct PlayState* play, SSNodeList* this, s32 tblMax, s32 numPolys);
+SSNode* SSNodeList_GetNextNode(SSNodeList* this);
+u16 SSNodeList_GetNextNodeIdx(SSNodeList* this);
+void ScaleRotPos_Init(ScaleRotPos* srp);
+void ScaleRotPos_SetValue(ScaleRotPos* srp, Vec3f* scale, Vec3s* rot, Vec3f* pos);
+s32 ScaleRotPos_IsEqual(ScaleRotPos* a, ScaleRotPos* b);
+void DynaLookup_ResetLists(DynaLookup* dynaLookup);
+void DynaLookup_Reset(DynaLookup* dynaLookup);
+void DynaLookup_ResetVtxStartIndex(u16* vtxStartIndex);
+void DynaLookup_ResetWaterBoxStartIndex(u16* waterBoxStartIndex);
+void BgActor_Init(struct PlayState* play, BgActor* bgActor);
+void BgActor_SetActor(BgActor* bgActor, Actor* actor, CollisionHeader* colHeader);
+s32 BgActor_IsTransformUnchanged(BgActor* bgActor);
+void DynaPoly_NullPolyList(CollisionPoly** polyList);
+void DynaPoly_AllocPolyList(struct PlayState* play, CollisionPoly** polyList, s32 numPolys);
+void DynaPoly_NullVtxList(Vec3s** vtxList);
+void DynaPoly_AllocVtxList(struct PlayState* play, Vec3s** vtxList, s32 numVtx);
+void DynaPoly_InitWaterBoxList(DynaWaterBoxList* waterBoxList);
+void DynaPoly_AllocWaterBoxList(struct PlayState* play, DynaWaterBoxList* waterBoxList, s32 numWaterBoxes);
+void DynaPoly_SetBgActorPrevTransform(struct PlayState* play, BgActor* bgActor);
+s32 DynaPoly_IsBgIdBgActor(s32 bgId);
+void DynaPoly_Init(struct PlayState* play, DynaCollisionContext* dyna);
+void DynaPoly_Alloc(struct PlayState* play, DynaCollisionContext* dyna);
+s32 DynaPoly_SetBgActor(struct PlayState* play, DynaCollisionContext* dyna, Actor* actor, CollisionHeader* colHeader);
+DynaPolyActor* DynaPoly_GetActor(CollisionContext* colCtx, s32 bgId);
+void DynaPoly_DisableCollision(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId);
+void DynaPoly_EnableCollision(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId);
+void DynaPoly_DisableCeilingCollision(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId);
+void DynaPoly_EnableCeilingCollision(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId);
+void DynaPoly_DisableFloorCollision(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId);
+void DynaPoly_EnableFloorCollision(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId);
+void DynaPoly_InvalidateLookup(struct PlayState* play, DynaCollisionContext* dyna);
+void DynaPoly_DeleteBgActor(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId);
+void BgCheck_CalcWaterboxDimensions(Vec3f* minPos, Vec3f* maxXPos, Vec3f* maxZPos, Vec3s* minPosOut, s16* xLength, s16* zLength);
+void DynaPoly_AddBgActorToLookup(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId, s32* vtxStartIndex, s32* polyStartIndex, s32* waterBoxStartIndex);
+void DynaPoly_UnsetAllInteractFlags(struct PlayState* play, DynaCollisionContext* dyna, Actor* actor);
+void DynaPoly_UpdateContext(struct PlayState* play, DynaCollisionContext* dyna);
+void func_800C756C(DynaCollisionContext* dyna, s32* numPolygons, s32* numVertices, s32* numWaterBoxes);
+void DynaPoly_UpdateBgActorTransforms(struct PlayState* play, DynaCollisionContext* dyna);
+void CollisionHeader_SegmentedToVirtual(CollisionHeader* colHeader);
+void CollisionHeader_GetVirtual(CollisionHeader* colHeader, CollisionHeader** dest);
+void BgCheck_InitCollisionHeaders(CollisionContext* colCtx, struct PlayState* play);
+
+u32 SurfaceType_GetBgCamIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+u16 BgCheck_GetBgCamSettingImpl(CollisionContext* colCtx, u32 bgCamIndex, s32 bgId);
+u16 BgCheck_GetBgCamSetting(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+u16 BgCheck_GetBgCamCountImpl(CollisionContext* colCtx, u32 bgCamIndex, s32 bgId);
+u16 BgCheck_GetBgCamCount(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+Vec3s* BgCheck_GetBgCamFuncDataImpl(CollisionContext* colCtx, s32 bgCamIndex, s32 bgId);
+Vec3s* BgCheck_GetBgCamFuncData(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+
+u32 SurfaceType_GetSceneExitIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+FloorType SurfaceType_GetFloorType(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+u32 func_800C99FC(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+s32 SurfaceType_GetWallFlags(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+s32 SurfaceType_CheckWallFlag0(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+s32 SurfaceType_CheckWallFlag1(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+s32 SurfaceType_CheckWallFlag2(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+FloorProperty SurfaceType_GetFloorProperty2(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+FloorProperty SurfaceType_GetFloorProperty(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+u32 SurfaceType_IsSoft(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+u32 SurfaceType_IsHorseBlocked(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+SurfaceMaterial SurfaceType_GetMaterial(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+u16 SurfaceType_GetSfxOffset(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+s32 SurfaceType_HasMaterialProperty(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId, s32 propertyType);
+FloorEffect SurfaceType_GetFloorEffect(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+u32 SurfaceType_GetLightSettingIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+u32 SurfaceType_GetEcho(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+u32 SurfaceType_IsHookshotSurface(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+s32 SurfaceType_IsIgnoredByEntities(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+s32 SurfaceType_IsIgnoredByProjectiles(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+s32 SurfaceType_IsFloorConveyor(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+s32 func_800C9DDC(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+ConveyorSpeed SurfaceType_GetConveyorSpeed(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+u32 SurfaceType_GetConveyorDirection(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+u32 SurfaceType_IsWallDamage(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+s32 WaterBox_GetSurfaceImpl(struct PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox, s32* bgId);
+s32 WaterBox_GetSurface1(struct PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox);
+s32 WaterBox_GetSurface1_2(struct PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox);
+s32 WaterBox_GetSurface2(struct PlayState* play, CollisionContext* colCtx, Vec3f* pos, f32 surfaceCheckDist, WaterBox** outWaterBox, s32* bgId);
+f32 func_800CA568(CollisionContext* colCtx, s32 waterBoxId, s32 bgId);
+u16 WaterBox_GetBgCamSetting(CollisionContext* colCtx, WaterBox* waterBox, s32 bgId);
+void WaterBox_GetSceneBgCamSetting(CollisionContext* colCtx, WaterBox* waterBox);
+u32 WaterBox_GetLightSettingIndex(CollisionContext* colCtx, WaterBox* waterBox);
+s32 func_800CA6F0(struct PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox, s32* bgId);
+s32 func_800CA9D0(struct PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox);
+s32 func_800CAA14(CollisionPoly* polyA, CollisionPoly* polyB, Vec3f* pointA, Vec3f* pointB, Vec3f* closestPoint);
+
#endif
diff --git a/include/z64camera.h b/include/z64camera.h
index e3b3a4483..3205496e7 100644
--- a/include/z64camera.h
+++ b/include/z64camera.h
@@ -2,6 +2,7 @@
#define Z64CAMERA_H
#include "ultra64.h"
+#include "z64save.h"
// these two angle conversion macros are slightly inaccurate
#define CAM_DEG_TO_BINANG(degrees) (s16)((degrees) * ((f32)0xFFFF / 360) + .5f)
@@ -16,6 +17,72 @@
#define SUB_CAM_ID_DONE 0 // Used in some actors for variables holding sub camera IDs to indicate "subcam is finished"
+#define CAM_HUD_VISIBILITY_SHIFT 8
+#define CAM_HUD_VISIBILITY_MASK (0x0F00)
+#define CAM_HUD_VISIBILITY(hudVisibility) (((hudVisibility) & 0xF) << CAM_HUD_VISIBILITY_SHIFT)
+
+#define CAM_HUD_VISIBILITY_ALL \
+ CAM_HUD_VISIBILITY(0) // HUD_VISIBILITY_ALL
+#define CAM_HUD_VISIBILITY_NONE \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_NONE)
+#define CAM_HUD_VISIBILITY_NONE_ALT \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_NONE_ALT)
+#define CAM_HUD_VISIBILITY_HEARTS_WITH_OVERWRITE \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_HEARTS_WITH_OVERWRITE)
+#define CAM_HUD_VISIBILITY_A \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_A)
+#define CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE)
+#define CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE)
+#define CAM_HUD_VISIBILITY_ALL_NO_MINIMAP_W_DISABLED \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_ALL_NO_MINIMAP_W_DISABLED)
+#define CAM_HUD_VISIBILITY_B \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_B)
+#define CAM_HUD_VISIBILITY_HEARTS_MAGIC \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_HEARTS_MAGIC)
+#define CAM_HUD_VISIBILITY_B_ALT \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_B_ALT)
+#define CAM_HUD_VISIBILITY_HEARTS \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_HEARTS)
+#define CAM_HUD_VISIBILITY_A_B_MINIMAP \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_A_B_MINIMAP)
+#define CAM_HUD_VISIBILITY_HEARTS_MAGIC_WITH_OVERWRITE \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_HEARTS_MAGIC_WITH_OVERWRITE)
+#define CAM_HUD_VISIBILITY_HEARTS_MAGIC_C \
+ CAM_HUD_VISIBILITY(HUD_VISIBILITY_HEARTS_MAGIC_C)
+// HUD_VISIBILITY_ALL_NO_MINIMAP and above can not be set using `CAM_HUD_VISIBILITY`
+#define CAM_HUD_VISIBILITY_IGNORE \
+ CAM_HUD_VISIBILITY(0xF)
+
+/**
+ * letterboxFlag: determines the size of the letter-box window. See CAM_LETTERBOX_* enums.
+ * Can also add on the flag ( | CAM_LETTERBOX_INSTANT) to make the size change immediately
+ * hudVisibility: hides certain hud icons
+ * - A value of 0 in camera is translated to a hudVisibility of 50,
+ * which is the value to restore all hud icons to the screen (CAM_HUD_VISIBILITY_ALL)
+ * - A value of 0xF in camera results in no change in the hudVisibility (CAM_HUD_VISIBILITY_IGNORE)
+ * funcFlags: Custom flags for functions
+ */
+#define CAM_INTERFACE_FLAGS(letterboxFlag, hudVisibility, funcFlags) \
+ (((letterboxFlag) & CAM_LETTERBOX_MASK) | (hudVisibility) | ((funcFlags) & 0xFF))
+
+// Shrinking the window from the top and bottom with black borders (letterboxing)
+#define CAM_LETTERBOX_MASK 0xF000
+
+#define CAM_LETTERBOX_SIZE_MASK 0x7000
+#define CAM_LETTERBOX_NONE 0x0000
+// small/medium/large black borders
+#define CAM_LETTERBOX_SMALL 0x1000
+#define CAM_LETTERBOX_MEDIUM 0x2000
+#define CAM_LETTERBOX_LARGE 0x3000
+#define CAM_LETTERBOX_NONE_4 0x4000
+
+#define CAM_LETTERBOX_INSTANT 0x8000 // Bit to determine whether to set the current value directly (on), or to set the size target (off)
+
+#define CAM_LETTERBOX_IGNORE 0xF000 // No change in letterbox size, keep the previous size
+
+
// Camera behaviorFlags. Flags specifically for settings, modes, and bgCam
// Used to store current state, only CAM_BEHAVIOR_SETTING_1 and CAM_BEHAVIOR_BG_2 are read from and used in logic
// Setting (0x1, 0x10)
@@ -280,9 +347,9 @@ typedef enum {
/* 0x04 */ CAM_DATA_04,
/* 0x05 */ CAM_DATA_05,
/* 0x06 */ CAM_DATA_06,
- /* 0x07 */ CAM_DATA_07,
+ /* 0x07 */ CAM_DATA_FOV,
/* 0x08 */ CAM_DATA_08,
- /* 0x09 */ CAM_DATA_09,
+ /* 0x09 */ CAM_DATA_INTERFACE_FLAGS,
/* 0x0A */ CAM_DATA_10,
/* 0x0B */ CAM_DATA_11,
/* 0x0C */ CAM_DATA_12,
@@ -297,31 +364,1188 @@ typedef enum {
/* 0x15 */ CAM_DATA_21,
} CameraDataType;
-typedef struct {
- /* 0x0 */ s16 val;
- /* 0x2 */ s16 param;
-} CameraModeValue; // size = 0x4
-
-typedef struct {
- /* 0x0 */ s16 funcId;
- /* 0x2 */ s16 numValues;
- /* 0x4 */ CameraModeValue* values;
-} CameraMode; // size = 0x8
-
-/**
- * Flags:
- * (flags & 0xF): Priority (lower value has higher priority)
- * (flags & 0x40000000): Store previous setting and bgCamData, also ignores water checks
- * (flags & 0x80000000): Set camera setting based on bg/scene data and reset action function state
+/*================================
+ * MISC DATA
+ *================================
*/
+
+// Camera Collision Check
typedef struct {
- /* 0x0 */ u32 validModes;
- /* 0x4 */ u32 flags;
- /* 0x8 */ CameraMode* cameraModes;
-} CameraSetting; // size = 0xC
+ /* 0x00 */ Vec3f pos;
+ /* 0x0C */ Vec3f norm;
+ /* 0x18 */ CollisionPoly* poly;
+ /* 0x1C */ VecSph sphNorm;
+ /* 0x24 */ s32 bgId;
+} CameraCollision; // size = 0x28
+
+typedef struct {
+ /* 0x00 */ Vec3f collisionClosePoint;
+ /* 0x0C */ CameraCollision atEyeColChk;
+ /* 0x34 */ CameraCollision eyeAtColChk;
+ /* 0x5C */ f32 swingUpdateRate;
+ /* 0x60 */ s16 pitch;
+ /* 0x62 */ s16 yaw;
+ /* 0x64 */ s16 unk_64;
+ /* 0x66 */ s16 timer; // startSwingTimer
+} SwingAnimation; // size = 0x68
+
+
+/*================================
+ * Camera Update-Function Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_INTERFACE_FLAGS(interfaceFlags) \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+
+/*================================
+ * Camera_Normal1() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_NORM1(yOffset, data01, data02, pitchTarget, eyeStepScale, posStepScale, yawDiffRange, fov, data08, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { pitchTarget, CAM_DATA_03 }, \
+ { eyeStepScale, CAM_DATA_04 }, \
+ { posStepScale, CAM_DATA_05 }, \
+ { yawDiffRange, CAM_DATA_06 }, \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00; // yOffset
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14; // attenuationYawDiffRange
+ /* 0x18 */ f32 unk_18; // fovTarget
+ /* 0x1C */ f32 unk_1C;
+ /* 0x20 */ s16 unk_20; // pitchTarget
+ /* 0x22 */ s16 interfaceFlags;
+} Normal1ReadOnlyData; // size = 0x24
+
+typedef struct {
+ /* 0x00 */ f32 unk_00; // yPos
+ /* 0x04 */ f32 unk_04; // xzSpeed
+ /* 0x08 */ s16 unk_08;
+ /* 0x0A */ s16 unk_0A; // angle
+ /* 0x0C */ s16 unk_0C; // flags (May be s32)
+ /* 0x0E */ s16 unk_0E;
+ /* 0x10 */ f32 unk_10; // set to float
+} Normal1ReadWriteData; // size = 0x14
+
+typedef struct {
+ /* 0x00 */ Normal1ReadOnlyData roData;
+ /* 0x24 */ Normal1ReadWriteData rwData;
+} Normal1; // size = 0x38
+
+#define NORMAL1_FLAG_0 (1 << 0)
+#define NORMAL1_FLAG_1 (1 << 1)
+#define NORMAL1_FLAG_2 (1 << 2)
+#define NORMAL1_FLAG_3 (1 << 3)
+#define NORMAL1_FLAG_4 (1 << 4)
+#define NORMAL1_FLAG_5 (1 << 5)
+#define NORMAL1_FLAG_6 (1 << 6)
+#define NORMAL1_FLAG_7 (1 << 7)
+
+
+/*================================
+ * Camera_Normal2() Data
+ *================================
+ */
+
+// Unused Camera RemoteBomb Setting
+
+#define CAM_FUNCDATA_NORM2(yOffset, data01, data02, pitchTarget, data04, fov, data08, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { pitchTarget, CAM_DATA_03 }, \
+ { data04, CAM_DATA_04 }, \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+#define NORMAL2_FLAG_1 (1 << 1)
+
+
+/*================================
+ * Camera_Normal3() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_NORM3(yOffset, data01, data02, pitchTarget, eyeStepScale, posStepScale, fov, data08, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { pitchTarget, CAM_DATA_03 }, \
+ { eyeStepScale, CAM_DATA_04 }, \
+ { posStepScale, CAM_DATA_05 }, \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 yOffset;
+ /* 0x04 */ f32 distMin;
+ /* 0x08 */ f32 distMax;
+ /* 0x0C */ f32 yawUpdateRateInv;
+ /* 0x10 */ f32 pitchUpdateRateInv;
+ /* 0x14 */ f32 fovTarget;
+ /* 0x18 */ f32 maxAtLERPScale;
+ /* 0x1C */ s16 pitchTarget;
+ /* 0x1E */ s16 interfaceFlags;
+} Normal3ReadOnlyData; // size = 0x20
+
+typedef struct {
+ /* 0x00 */ f32 isZero; // set but unused
+ /* 0x04 */ f32 yPosOffset;
+ /* 0x08 */ s16 curPitch;
+ /* 0x0A */ s16 yawUpdateRate;
+ /* 0x0C */ s16 yawTimer;
+ /* 0x0E */ s16 distTimer;
+ /* 0x10 */ s16 flag;
+ /* 0x12 */ s16 is1200; // set but unused
+} Normal3ReadWriteData; // size = 0x14
+
+typedef struct {
+ /* 0x00 */ Normal3ReadOnlyData roData;
+ /* 0x20 */ Normal3ReadWriteData rwData;
+} Normal3; // size = 0x34
+
+#define NORMAL3_FLAG_1 (1 << 1)
+#define NORMAL3_FLAG_5 (1 << 5)
+#define NORMAL3_FLAG_6 (1 << 6)
+#define NORMAL3_FLAG_7 (1 << 7)
+
+
+/*================================
+ * Camera_Normal0() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_NORM0(yOffset, data01, data02, data21, data04, yawDiffRange, fov, data08, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { data21, CAM_DATA_21 }, \
+ { data04, CAM_DATA_04 }, \
+ { yawDiffRange, CAM_DATA_06 }, \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ s16 unk_1C;
+ /* 0x1E */ s16 interfaceFlags;
+} Normal0ReadOnlyData; // size = 0x20
+
+typedef struct {
+ /* 0x00 */ Vec3f unk_00;
+ /* 0x0C */ Vec3f unk_0C;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ f32 unk_1C;
+ /* 0x20 */ s16 unk_20;
+ /* 0x22 */ s16 unk_22;
+ /* 0x24 */ f32 unk_24;
+ /* 0x28 */ f32 unk_28;
+ /* 0x2C */ s16 unk_2C;
+} Normal0ReadWriteData; // size = 0x30
+
+typedef struct {
+ /* 0x00 */ Normal0ReadOnlyData roData;
+ /* 0x20 */ Normal0ReadWriteData rwData;
+} Normal0; // size = 0x50
+
+#define NORMAL0_FLAG_0 (1 << 0)
+#define NORMAL0_FLAG_2 (1 << 2)
+#define NORMAL0_FLAG_4 (1 << 4)
+#define NORMAL0_FLAG_7 (1 << 7)
+
+
+/*================================
+ * Camera_Parallel1() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_PARA1(yOffset, data01, data02, pitchTarget, data10, data04, data05, fov, data08, interfaceFlags, data11, data12) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { pitchTarget, CAM_DATA_03 }, \
+ { data10, CAM_DATA_10 }, \
+ { data04, CAM_DATA_04 }, \
+ { data05, CAM_DATA_05 }, \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }, \
+ { data11, CAM_DATA_11 }, \
+ { data12, CAM_DATA_12 }
+
+// Same as above but with extra unused entry
+#define CAM_FUNCDATA_PARA1_ALT(yOffset, data01, data02, pitchTarget, data10, data04, data05, fov, data08, interfaceFlags, data11, data12, data18) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { pitchTarget, CAM_DATA_03 }, \
+ { data10, CAM_DATA_10 }, \
+ { data04, CAM_DATA_04 }, \
+ { data05, CAM_DATA_05 }, \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }, \
+ { data11, CAM_DATA_11 }, \
+ { data12, CAM_DATA_12 }, \
+ { data18, CAM_DATA_18 }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ f32 unk_1C;
+ /* 0x20 */ s16 unk_20;
+ /* 0x22 */ s16 unk_22;
+ /* 0x24 */ s16 unk_24;
+ /* 0x26 */ s16 interfaceFlags;
+} Parallel1ReadOnlyData; // size = 0x28
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 timer1;
+ /* 0x10 */ Vec3f unk_10;
+ /* 0x1C */ s16 unk_1C;
+ /* 0x1E */ s16 unk_1E;
+ /* 0x20 */ s16 unk_20;
+ /* 0x22 */ s16 timer2;
+ /* 0x24 */ s16 timer3;
+ /* 0x26 */ s16 unk_26;
+} Parallel1ReadWriteData; // size = 0x28
+
+typedef struct {
+ /* 0x00 */ Parallel1ReadOnlyData roData;
+ /* 0x28 */ Parallel1ReadWriteData rwData;
+} Parallel1; // size = 0x50
+
+#define PARALLEL1_FLAG_0 (1 << 0)
+#define PARALLEL1_FLAG_1 (1 << 1)
+#define PARALLEL1_FLAG_2 (1 << 2)
+#define PARALLEL1_FLAG_3 (1 << 3)
+#define PARALLEL1_FLAG_4 (1 << 4)
+#define PARALLEL1_FLAG_5 (1 << 5)
+#define PARALLEL1_FLAG_6 (1 << 6)
+#define PARALLEL1_FLAG_7 (1 << 7)
+
+
+/*================================
+ * Camera_Parallel2() Data
+ *================================
+ */
+
+// Unused Camera Maze Setting
+
+#define CAM_FUNCDATA_PARA2(yOffset, data02, data01, pitchTarget, data04, fov, data08, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { data02, CAM_DATA_02 }, \
+ { data01, CAM_DATA_01 }, \
+ { pitchTarget, CAM_DATA_03 }, \
+ { data04, CAM_DATA_04 }, \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+#define PARALLEL2_FLAG_1 (1 << 1)
+
+
+/*================================
+ * Camera_Jump2() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_JUMP2(yOffset, data01, data02, data20, data04, data05, fov, data08, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { data20, CAM_DATA_20 }, \
+ { data04, CAM_DATA_04 }, \
+ { data05, CAM_DATA_05 }, \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ f32 unk_1C;
+ /* 0x20 */ s16 interfaceFlags;
+} Jump2ReadOnlyData; // size = 0x24
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ s16 unk_04;
+ /* 0x06 */ s16 unk_06;
+ /* 0x08 */ s16 unk_08;
+ /* 0x0A */ s16 unk_0A;
+ /* 0x0C */ s16 timer;
+ /* 0x0E */ s16 unk_0E;
+ /* 0x10 */ s32 unk_10; // unused?
+ /* 0x1C */ s16 unk_1C;
+} Jump2ReadWriteData; // size = 0x20
+
+typedef struct {
+ /* 0x00 */ Jump2ReadOnlyData roData;
+ /* 0x24 */ Jump2ReadWriteData rwData;
+} Jump2; // size = 0x44
+
+#define JUMP2_FLAG_1 (1 << 1)
+#define JUMP2_FLAG_2 (1 << 2)
+
+
+/*================================
+ * Camera_Jump3() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_JUMP3(yOffset, data01, data02, pitchTarget, data04, data05, yawDiffRange, fov, data08, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { pitchTarget, CAM_DATA_03 }, \
+ { data04, CAM_DATA_04 }, \
+ { data05, CAM_DATA_05 }, \
+ { yawDiffRange, CAM_DATA_06 }, \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00; // yOffset
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14; // attenuationYawDiffRange
+ /* 0x18 */ f32 unk_18; // fovTarget
+ /* 0x1C */ f32 unk_1C;
+ /* 0x20 */ s16 unk_20;
+ /* 0x22 */ s16 interfaceFlags;
+} Jump3ReadOnlyData; // size = 0x24
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ s16 unk_04;
+ /* 0x06 */ s16 unk_06;
+ /* 0x08 */ s16 timer1;
+ /* 0x0A */ s16 unk_0A;
+ /* 0x0C */ s32 timer2;
+ /* 0x10 */ s16 unk_10;
+ /* 0x12 */ s16 unk_12;
+ /* 0x1C */ s16 unk_1C;
+} Jump3ReadWriteData; // size = 0x20
+
+typedef struct {
+ /* 0x00 */ Jump3ReadOnlyData roData; // yOffset
+ /* 0x24 */ Jump3ReadWriteData rwData;
+} Jump3; // size = 0x44
+
+#define JUMP3_FLAG_0 (1 << 0)
+#define JUMP3_FLAG_2 (1 << 2)
+#define JUMP3_FLAG_3 (1 << 3)
+#define JUMP3_FLAG_4 (1 << 4)
+#define JUMP3_FLAG_5 (1 << 5)
+#define JUMP3_FLAG_6 (1 << 6)
+#define JUMP3_FLAG_7 (1 << 7)
+
+
+/*================================
+ * Camera_Battle1() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_BATT1(yOffset, data01, data02, data13, data14, data15, data16, data17, fov, data08, interfaceFlags, data11, data18) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { data13, CAM_DATA_13 }, \
+ { data14, CAM_DATA_14 }, \
+ { data15, CAM_DATA_15 }, \
+ { data16, CAM_DATA_16 }, \
+ { data17, CAM_DATA_17 }, \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }, \
+ { data11, CAM_DATA_11 }, \
+ { data18, CAM_DATA_18 }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ f32 unk_1C;
+ /* 0x20 */ f32 unk_20;
+ /* 0x24 */ f32 unk_24;
+ /* 0x28 */ f32 unk_28;
+ /* 0x2C */ f32 unk_2C;
+ /* 0x30 */ s16 interfaceFlags;
+} Battle1ReadOnlyData; // size = 0x34
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ Actor* unk_08; // targe3t
+ /* 0x0C */ s32 unk_0C; // unused?
+ /* 0x10 */ s16 unk_10;
+ /* 0x12 */ s16 unk_12;
+ /* 0x14 */ s16 unk_14;
+ /* 0x16 */ s16 unk_16;
+ /* 0x18 */ s16 unk_18;
+ /* 0x1A */ s16 unk_1A;
+} Battle1ReadWriteData; // size = 0x1C
+
+typedef struct {
+ /* 0x00 */ Battle1ReadOnlyData roData;
+ /* 0x24 */ Battle1ReadWriteData rwData;
+} Battle1; // size = 0x50
+
+#define BATTLE1_FLAG_0 (1 << 0)
+#define BATTLE1_FLAG_1 (1 << 1)
+#define BATTLE1_FLAG_4 (1 << 4)
+#define BATTLE1_FLAG_7 (1 << 7)
+
+
+/*================================
+ * Camera_KeepOn1() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_KEEP1(yOffset, data01, data02, data13, data14, data15, data16, data17, fov, data08, interfaceFlags, data11) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { data13, CAM_DATA_13 }, \
+ { data14, CAM_DATA_14 }, \
+ { data15, CAM_DATA_15 }, \
+ { data16, CAM_DATA_16 }, \
+ { data17, CAM_DATA_17 }, \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }, \
+ { data11, CAM_DATA_11 }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ f32 unk_1C;
+ /* 0x20 */ f32 unk_20;
+ /* 0x24 */ f32 unk_24;
+ /* 0x28 */ f32 unk_28;
+ /* 0x2C */ s16 interfaceFlags;
+} KeepOn1ReadOnlyData; // size = 0x30
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ Actor* unk_0C;
+ /* 0x10 */ s16 unk_10;
+ /* 0x12 */ s16 unk_12;
+ /* 0x14 */ s16 unk_14;
+ /* 0x16 */ s16 unk_16;
+ /* 0x18 */ s16 unk_18;
+} KeepOn1ReadWriteData; // size = 0x1C
+
+typedef struct {
+ /* 0x00 */ KeepOn1ReadOnlyData roData;
+ /* 0x30 */ KeepOn1ReadWriteData rwData;
+} KeepOn1; // size = 0x4C
+
+#define KEEPON1_FLAG_0 (1 << 0)
+#define KEEPON1_FLAG_1 (1 << 1)
+#define KEEPON1_FLAG_4 (1 << 4)
+#define KEEPON1_FLAG_7 (1 << 7)
+
+
+/*================================
+ * Camera_KeepOn3() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_KEEP3(yOffset, data01, data02, data13, data14, data15, data16, data17, fov, data08, timer, interfaceFlags, data18) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { data13, CAM_DATA_13 }, \
+ { data14, CAM_DATA_14 }, \
+ { data15, CAM_DATA_15 }, \
+ { data16, CAM_DATA_16 }, \
+ { data17, CAM_DATA_17 }, \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { timer, CAM_DATA_04 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }, \
+ { data18, CAM_DATA_18 }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ f32 unk_1C;
+ /* 0x20 */ f32 unk_20;
+ /* 0x24 */ f32 unk_24;
+ /* 0x28 */ f32 unk_28;
+ /* 0x2C */ s16 timer; // initial timer, stored at twice the value used in code
+ /* 0x2E */ s16 interfaceFlags;
+} KeepOn3ReadOnlyData; // size = 0x30
+
+typedef struct {
+ /* 0x00 */ f32 unk_00; // Vec3f?
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ Actor* unk_0C;
+ /* 0x10 */ Vec3f unk_10;
+ /* 0x1C */ s16 timer;
+} KeepOn3ReadWriteData; // size = 0x20
+
+typedef struct {
+ /* 0x00 */ KeepOn3ReadOnlyData roData;
+ /* 0x30 */ KeepOn3ReadWriteData rwData;
+} KeepOn3; // size = 0x50
+
+#define KEEPON3_FLAG_5 (1 << 5)
+#define KEEPON3_FLAG_6 (1 << 6)
+#define KEEPON3_FLAG_7 (1 << 7)
+
+
+/*================================
+ * Camera_KeepOn4() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_KEEP4(yOffset, data01, pitchTarget, data10, data18, fov, interfaceFlags, data04, timer) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { pitchTarget, CAM_DATA_03 }, \
+ { data10, CAM_DATA_10 }, \
+ { data18, CAM_DATA_18 }, \
+ { fov, CAM_DATA_FOV }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }, \
+ { data04, CAM_DATA_04 }, \
+ { timer, CAM_DATA_12 }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ s16 interfaceFlags;
+ /* 0x1E */ s16 timer;
+} KeepOn4ReadOnlyData; // size = 0x20
+
+typedef struct {
+ /* 0x00 */ f32 unk_00; // Vec3f?
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ Actor* unk_0C;
+ /* 0x10 */ s16 unk_10;
+ /* 0x12 */ s16 unk_12;
+ /* 0x14 */ s16 timer;
+ /* 0x16 */ s16 unk_16;
+ /* 0x18 */ s16 unk_18;
+} KeepOn4ReadWriteData; // size = 0x1C
+
+typedef struct {
+ /* 0x00 */ KeepOn4ReadOnlyData roData;
+ /* 0x20 */ KeepOn4ReadWriteData rwData;
+} KeepOn4; // size = 0x3C
+
+#define KEEPON4_FLAG_1 (1 << 1)
+#define KEEPON4_FLAG_2 (1 << 2)
+#define KEEPON4_FLAG_3 (1 << 3)
+#define KEEPON4_FLAG_6 (1 << 6)
+
+
+/*================================
+ * Camera_Fixed1() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_FIXD1(yOffset, data04, fov, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { data04, CAM_DATA_04 }, \
+ { fov, CAM_DATA_FOV }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 fov;
+ /* 0x0C */ s16 interfaceFlags;
+} Fixed1ReadOnlyData; // size = 0x10
+
+typedef struct {
+ /* 0x00 */ PosRot eyePosRotTarget;
+ /* 0x14 */ s16 fov;
+ /* 0x18 */ Actor* focalActor;
+} Fixed1ReadWriteData; // size = 0x1C
+
+typedef struct {
+ /* 0x00 */ Fixed1ReadOnlyData roData;
+ /* 0x10 */ Fixed1ReadWriteData rwData;
+} Fixed1; // size = 0x2C
+
+#define FIXED1_FLAG_4 (1 << 4)
+
+
+/*================================
+ * Camera_Fixed2() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_FIXD2(yOffset, data01, data02, data04, data05, fov, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { data04, CAM_DATA_04 }, \
+ { data05, CAM_DATA_05 }, \
+ { fov, CAM_DATA_FOV }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14;
+ /* 0x18 */ s16 interfaceFlags;
+} Fixed2ReadOnlyData; // size = 0x1C
+
+typedef struct {
+ /* 0x00 */ Vec3f unk_00;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ s16 unk_1C;
+} Fixed2ReadWriteData; // size = 0x20
+
+typedef struct {
+ /* 0x00 */ Fixed2ReadOnlyData roData;
+ /* 0x1C */ Fixed2ReadWriteData rwData;
+} Fixed2; // size = 0x3C
+
+#define FIXED2_FLAG_0 (1 << 0)
+#define FIXED2_FLAG_1 (1 << 1)
+#define FIXED2_FLAG_2 (1 << 2)
+#define FIXED2_FLAG_3 (1 << 3)
+#define FIXED2_FLAG_4 (1 << 4)
+#define FIXED2_FLAG_5 (1 << 5)
+#define FIXED2_FLAG_6 (1 << 6)
+#define FIXED2_FLAG_7 (1 << 7)
+
+
+/*================================
+ * Camera_Fixed3() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_FIXD3(interfaceFlags) \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+
+/*================================
+ * Camera_Subject1() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_SUBJ1(yOffset, data01, data02, data04, data19, data17, data18, fov, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { data02, CAM_DATA_02 }, \
+ { data04, CAM_DATA_04 }, \
+ { data19, CAM_DATA_19 }, \
+ { data17, CAM_DATA_17 }, \
+ { data18, CAM_DATA_18 }, \
+ { fov, CAM_DATA_FOV }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ f32 unk_1C;
+ /* 0x20 */ s16 interfaceFlags;
+} Subject1ReadOnlyData; // size = 0x24
+
+typedef struct {
+ /* 0x0 */ f32 unk_00;
+ /* 0x4 */ s16 unk_04; // yaw
+ /* 0x6 */ s16 unk_06; // pitch
+ /* 0x8 */ s16 timer;
+} Subject1ReadWriteData; // size = 0xC
+
+typedef struct {
+ /* 0x00 */ Subject1ReadOnlyData roData;
+ /* 0x24 */ Subject1ReadWriteData rwData;
+} Subject1; // size = 0x30
+
+#define SUBJECT1_FLAG_4 (1 << 4)
+
+
+/*================================
+ * Camera_Unique2() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_UNIQ2(yOffset, data01, fov, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { data01, CAM_DATA_01 }, \
+ { fov, CAM_DATA_FOV }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ f32 unk_04;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ s16 interfaceFlags;
+} Unique2ReadOnlyData; // size = 0x14
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ s16 unk_04;
+} Unique2ReadWriteData; // size = 0x8
+
+typedef struct {
+ /* 0x00 */ Unique2ReadOnlyData roData;
+ /* 0x14 */ Unique2ReadWriteData rwData;
+} Unique2; // size = 0x1C
+
+#define UNIQUE2_FLAG_0 (1 << 0)
+#define UNIQUE2_FLAG_1 (1 << 1)
+#define UNIQUE2_FLAG_4 (1 << 4)
+#define UNIQUE2_FLAG_5 (1 << 5)
+
+
+/*================================
+ * Camera_Unique0() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_UNIQ0(yOffset, data04, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { data04, CAM_DATA_04 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x0 */ f32 unk_00;
+ /* 0x4 */ f32 unk_04;
+ /* 0x8 */ s16 interfaceFlags;
+} Unique0ReadOnlyData; // size = 0xC
+
+typedef struct {
+ /* 0x00 */ Vec3f unk_00;
+ /* 0x0C */ Vec3f unk_0C;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ Vec3f unk_1C;
+ /* 0x28 */ Vec3f unk_28;
+ /* 0x34 */ Vec3s unk_34;
+ /* 0x3A */ s16 unk_3A;
+ /* 0x3C */ s16 timer;
+ /* 0x3E */ s16 unk_3E;
+} Unique0ReadWriteData; // size = 0x40
+
+typedef struct {
+ /* 0x00 */ Unique0ReadOnlyData roData;
+ /* 0x0C */ Unique0ReadWriteData rwData;
+} Unique0; // size = 0x4C
+
+#define UNIQUE0_FLAG_0 (1 << 0)
+#define UNIQUE0_FLAG_1 (1 << 1)
+#define UNIQUE0_FLAG_4 (1 << 4)
+
+
+/*================================
+ * Camera_Unique6() Data
+ *================================
+ */
+
+typedef struct {
+ /* 0x00 */ s16 interfaceFlags;
+} Unique6ReadOnlyData; // size = 0x4
+
+typedef struct {
+ /* 0x00 */ Unique6ReadOnlyData roData;
+} Unique6; // size = 0x4
+
+#define UNIQUE6_FLAG_0 (1 << 0)
+
+
+/*================================
+ * Camera_Unique7() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_UNIQ7(fov, interfaceFlags) \
+ { fov, CAM_DATA_FOV }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+
+/*================================
+ * Camera_Demo1() Data
+ *================================
+ */
+
+typedef struct {
+ /* 0x00 */ s16 interfaceFlags;
+} Demo1ReadOnlyData; // size = 0x4
+
+typedef struct {
+ /* 0x00 */ Vec3f unk_00;
+ /* 0x0C */ VecSph unk_0C;
+ /* 0x14 */ VecSph unk_14;
+ /* 0x1C */ s16 unk_1C;
+} Demo1ReadWriteData; // size = 0x20
+
+typedef struct {
+ /* 0x00 */ Demo1ReadOnlyData roData;
+ /* 0x04 */ Demo1ReadWriteData rwData;
+} Demo1; // size = 0x24
+
+
+/*================================
+ * Camera_Demo2() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_DEMO2(fov, data08, interfaceFlags) \
+ { fov, CAM_DATA_FOV }, \
+ { data08, CAM_DATA_08 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 fov;
+ /* 0x04 */ f32 unk_04; // unused
+ /* 0x08 */ s16 interfaceFlags;
+} Demo2ReadOnlyData; // size = 0xC
+
+typedef struct {
+ /* 0x00 */ Vec3f initialAt;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ s16 animFrame;
+ /* 0x12 */ s16 yawDir;
+} Demo2ReadWriteData; // size = 0x14
+
+typedef struct {
+ /* 0x08 */ Demo2ReadOnlyData roData;
+ /* 0x0C */ Demo2ReadWriteData rwData;
+} Demo2; // size = 0x20
+
+
+/*================================
+ * Camera_Demo3() Data
+ *================================
+ */
+
+typedef struct {
+ /* 0x00 */ s16 interfaceFlags;
+} Demo3ReadOnlyData; // size = 0x4
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ s16 unk_04;
+ /* 0x06 */ s16 timer;
+} Demo3ReadWriteData; // size = 0x8
+
+typedef struct {
+ /* 0x00 */ Demo3ReadOnlyData roData;
+ /* 0x04 */ Demo3ReadWriteData rwData;
+} Demo3; // size = 0xC
+
+
+/*================================
+ * Camera_Demo4() Data
+ *================================
+ */
+
+typedef struct {
+ /* 0x00 */ s16 interfaceFlags;
+} Demo4ReadOnlyData; // size = 0x4
+
+typedef struct {
+ /* 0x00 */ Vec3f unk_00;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14;
+ /* 0x18 */ VecSph unk_18;
+ /* 0x20 */ s16 unk_20;
+ /* 0x22 */ s16 timer;
+} Demo4ReadWriteData; // size = 0x24
+
+typedef struct {
+ /* 0x00 */ Demo4ReadOnlyData roData;
+ /* 0x04 */ Demo4ReadWriteData rwData;
+} Demo4; // size = 0x28
+
+
+/*================================
+ * Camera_Demo5() Data
+ *================================
+ */
+
+typedef struct {
+ /* 0x00 */ s16 interfaceFlags;
+} Demo5ReadOnlyData; // size = 0x4
+
+typedef struct {
+ /* 0x00 */ Vec3f unk_00;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ f32 unk_10;
+ /* 0x14 */ f32 unk_14;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ VecSph unk_1C;
+ /* 0x24 */ s16 unk_24;
+ /* 0x26 */ s16 timer;
+} Demo5ReadWriteData; // size = 0x28
+
+typedef struct {
+ /* 0x00 */ Demo5ReadOnlyData roData;
+ /* 0x04 */ Demo5ReadWriteData rwData;
+} Demo5; // size = 0x2C
+
+
+/*================================
+ * Camera_Demo0() Data
+ *================================
+ */
+
+typedef struct {
+ /* 0x00 */ s16 interfaceFlags;
+} Demo0ReadOnlyData; // size = 0x4
+
+typedef struct {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ VecSph subAtToEye;
+ /* 0x0C */ VecSph atToEye;
+ /* 0x14 */ s16 unk_14;
+ /* 0x16 */ s16 unk_16;
+ /* 0x18 */ s16 unk_18;
+ /* 0x1A */ s16 timer;
+} Demo0ReadWriteData; // size = 0x1C
+
+typedef struct {
+ /* 0x00 */ Demo0ReadOnlyData roData;
+ /* 0x04 */ Demo0ReadWriteData rwData;
+} Demo0; // size = 0x20
+
+
+/*================================
+ * Camera_Special5() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_SPEC5(yOffset, eyeDist, minDistForRot, fov, atMaxLERPScale, timerInit, pitch, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { eyeDist, CAM_DATA_01 }, \
+ { minDistForRot, CAM_DATA_02 }, \
+ { fov, CAM_DATA_03 }, \
+ { atMaxLERPScale, CAM_DATA_FOV }, \
+ { timerInit, CAM_DATA_08 }, \
+ { pitch, CAM_DATA_12 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 yOffset;
+ /* 0x04 */ f32 eyeDist;
+ /* 0x08 */ f32 minDistForRot;
+ /* 0x0C */ f32 fovTarget;
+ /* 0x10 */ f32 atMaxLERPScale;
+ /* 0x14 */ s16 timerInit;
+ /* 0x16 */ s16 pitch;
+ /* 0x18 */ s16 interfaceFlags;
+} Special5ReadOnlyData; // size = 0x1C
+
+typedef struct {
+ /* 0x00 */ s16 animTimer;
+} Special5ReadWriteData; // size = 0x4
+
+typedef struct {
+ /* 0x00 */ Special5ReadOnlyData roData;
+ /* 0x1C */ Special5ReadWriteData rwData;
+} Special5; // size = 0x20
+
+
+/*================================
+ * DOOR Data
+ *================================
+ */
+
+// For functions that deal with doors, an extra struct is added to the paramData
+
+typedef struct {
+ /* 0x00 */ Actor* doorActor;
+ /* 0x04 */ s16 bgCamIndex;
+ /* 0x06 */ union {
+ Vec3s eye; // position of the camera while exiting a spiral staircase
+ struct {
+ s16 timer1; // timer while camera is fixed in front of the door
+ s16 timer2; // timer while camera is behind the door looking at player
+ s16 timer3; // timer while camera turns around to face forward
+ };
+ };
+} DoorParams; // size = 0xC
+
+#define CAM_GET_DOOR_PARAMS(type) &((type*)camera->paramData)->doorParams
+
+
+/*================================
+ * Camera_Special8() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_SPEC8(yOffset, eyeStepScale, posStepScale, fov, spiralDoorCsLength, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { eyeStepScale, CAM_DATA_04 }, \
+ { posStepScale, CAM_DATA_05 }, \
+ { fov, CAM_DATA_FOV }, \
+ { spiralDoorCsLength, CAM_DATA_12 }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 yOffset;
+ /* 0x04 */ f32 eyeStepScale;
+ /* 0x08 */ f32 posStepScale;
+ /* 0x0C */ f32 fov;
+ /* 0x10 */ s16 spiralDoorCsLength;
+ /* 0x12 */ s16 interfaceFlags;
+} Special8ReadOnlyData; // size = 0x14
+
+typedef struct {
+ /* 0x00 */ Vec3f eye;
+ /* 0x0C */ s16 spiralDoorCsFrame; // 1/5th of the length of the cutscene
+ /* 0x0E */ s16 fov;
+} Special8ReadWriteData; // size = 0x10
+
+typedef struct {
+ /* 0x00 */ Special8ReadOnlyData roData;
+ /* 0x14 */ Special8ReadWriteData rwData;
+} Special8; // size = 0x24
+
+#define SPECIAL8_FLAG_0 (1 << 0)
+#define SPECIAL8_FLAG_3 (1 << 3)
+
+
+/*================================
+ * Camera_Special9() Data
+ *================================
+ */
+
+#define CAM_FUNCDATA_SPEC9(yOffset, fov, interfaceFlags) \
+ { yOffset, CAM_DATA_00 }, \
+ { fov, CAM_DATA_FOV }, \
+ { interfaceFlags, CAM_DATA_INTERFACE_FLAGS }
+
+typedef struct {
+ /* 0x00 */ f32 yOffset;
+ /* 0x04 */ f32 fov;
+ /* 0x08 */ s16 interfaceFlags;
+} Special9ReadOnlyData; // size = 0xC
+
+typedef struct {
+ /* 0x00 */ s16 unk_00;
+} Special9ReadWriteData; // size = 0x4
+
+typedef struct {
+ /* 0x00 */ Special9ReadOnlyData roData;
+ /* 0x0C */ Special9ReadWriteData rwData;
+} Special9; // size = 0x10
+
+#define SPECIAL9_FLAG_0 (1 << 0)
+#define SPECIAL9_FLAG_1 (1 << 1)
+#define SPECIAL9_FLAG_3 (1 << 3)
+
+typedef union {
+ Normal1 norm1;
+ Normal3 norm3;
+ Normal0 norm0;
+ Parallel1 para1;
+ Jump2 jump2;
+ Jump3 jump3;
+ Battle1 batt1;
+ KeepOn1 keep1;
+ KeepOn3 keep3;
+ KeepOn4 keep4;
+ Fixed1 fixd1;
+ Fixed2 fixd2;
+ Subject1 subj1;
+ Unique2 uniq2;
+ Unique0 uniq0;
+ Unique6 uniq6;
+ Demo1 demo1;
+ Demo2 demo2;
+ Demo3 demo3;
+ Demo4 demo4;
+ Demo5 demo5;
+ Demo0 demo0;
+ Special5 spec5;
+ struct {
+ /* 0x0 */ DoorParams doorParams;
+ /* 0xC */ union {
+ Special8 spec8;
+ Special9 spec9;
+ };
+ };
+} CamParamData; // size = 0x50
+
+/*================================
+ * MAIN CAMERA STRUCT
+ *================================
+ */
typedef struct Camera {
- /* 0x000 */ u8 paramData[0x50]; // function Data, acts like a heap that's reset every time a new action function is switched to
+ /* 0x000 */ CamParamData paramData; // update function data that's reset every time a new update function is switched to
/* 0x050 */ Vec3f at;
/* 0x05C */ Vec3f eye;
/* 0x068 */ Vec3f up;
diff --git a/include/z64collision_check.h b/include/z64collision_check.h
index 434b74a3a..e5032584c 100644
--- a/include/z64collision_check.h
+++ b/include/z64collision_check.h
@@ -1,5 +1,5 @@
-#ifndef _Z_COLLISION_CHECK_H_
-#define _Z_COLLISION_CHECK_H_
+#ifndef Z64COLLISION_CHECK_H
+#define Z64COLLISION_CHECK_H
#include "PR/ultratypes.h"
#include "z64math.h"
@@ -283,16 +283,16 @@ typedef enum {
} ColChkMassType;
typedef enum {
- /* 0 */ COLTYPE_HIT0, // Blue blood, white hitmark
- /* 1 */ COLTYPE_HIT1, // No blood, dust hitmark
- /* 2 */ COLTYPE_HIT2, // Green blood, dust hitmark
- /* 3 */ COLTYPE_HIT3, // No blood, white hitmark
- /* 4 */ COLTYPE_HIT4, // Water burst, no hitmark
- /* 5 */ COLTYPE_HIT5, // No blood, red hitmark
- /* 6 */ COLTYPE_HIT6, // Green blood, white hitmark
- /* 7 */ COLTYPE_HIT7, // Red blood, white hitmark
- /* 8 */ COLTYPE_HIT8, // Blue blood, red hitmark
- /* 9 */ COLTYPE_METAL,
+ /* 0 */ COLTYPE_HIT0, // Blue blood, white hitmark
+ /* 1 */ COLTYPE_HIT1, // No blood, dust hitmark
+ /* 2 */ COLTYPE_HIT2, // Green blood, dust hitmark
+ /* 3 */ COLTYPE_HIT3, // No blood, white hitmark
+ /* 4 */ COLTYPE_HIT4, // Water burst, no hitmark
+ /* 5 */ COLTYPE_HIT5, // No blood, red hitmark
+ /* 6 */ COLTYPE_HIT6, // Green blood, white hitmark
+ /* 7 */ COLTYPE_HIT7, // Red blood, white hitmark
+ /* 8 */ COLTYPE_HIT8, // Blue blood, red hitmark
+ /* 9 */ COLTYPE_METAL,
/* 10 */ COLTYPE_NONE,
/* 11 */ COLTYPE_WOOD,
/* 12 */ COLTYPE_HARD,
diff --git a/include/z64curve.h b/include/z64curve.h
index f4923e3bf..77174be5e 100644
--- a/include/z64curve.h
+++ b/include/z64curve.h
@@ -1,5 +1,5 @@
-#ifndef Z64_CURVE_H
-#define Z64_CURVE_H
+#ifndef Z64CURVE_H
+#define Z64CURVE_H
#include "PR/ultratypes.h"
#include "z64math.h"
diff --git a/include/z64cutscene.h b/include/z64cutscene.h
index f4cc10802..1fc32be28 100644
--- a/include/z64cutscene.h
+++ b/include/z64cutscene.h
@@ -4,158 +4,575 @@
#include "ultra64.h"
#include "unk.h"
-typedef struct {
- /* 0x0 */ s8 continueFlag;
- /* 0x1 */ s8 cameraRoll;
- /* 0x2 */ u16 nextPointFrame;
- /* 0x4 */ f32 viewAngle; // in degrees
- /* 0x8 */ Vec3s pos;
-} CutsceneCameraPoint; // size = 0x10
-typedef struct {
- /* 0x00 */ Vec3f at;
- /* 0x0C */ Vec3f eye;
- /* 0x18 */ s16 roll;
- /* 0x1A */ s16 fov;
-} CutsceneCameraAngle; // size = 0x1C
-
-typedef struct {
- /* 0x0 */ CutsceneCameraPoint* atPoints;
- /* 0x4 */ CutsceneCameraPoint* eyePoints;
- /* 0x8 */ s16 relativeToPlayer;
-} CutsceneCameraMove; // size = 0xC
-
-typedef struct {
- /* 0x00 */ u16 action; // "dousa"
- /* 0x02 */ u16 startFrame;
- /* 0x04 */ u16 endFrame;
- union {
- /* 0x06 */ Vec3s rot;
- /* 0x06 */ Vec3us urot;
+typedef union {
+ struct {
+ /* 0x00 */ u16 id; // "dousa"
+ /* 0x02 */ u16 startFrame;
+ /* 0x04 */ u16 endFrame;
+ /* 0x06 */ Vec3us rot;
+ /* 0x0C */ Vec3i startPos;
+ /* 0x18 */ Vec3i endPos;
+ /* 0x24 */ Vec3f normal;
};
- /* 0x0C */ Vec3i startPos;
- /* 0x18 */ Vec3i endPos;
- /* 0x24 */ Vec3f normal;
-} CsCmdActorAction; // size = 0x30
+ s32 _words[12];
+} CsCmdActorCue; // size = 0x30
-typedef struct {
- /* 0x0 */ u16 base;
- /* 0x2 */ u16 startFrame;
- /* 0x4 */ u16 endFrame;
- /* 0x6 */ u16 unk_06;
-} CsCmdBase; // size = 0x8
+typedef union {
+ struct {
+ /* 0x0 */ u16 type;
+ /* 0x2 */ u16 startFrame;
+ /* 0x4 */ u16 endFrame;
+ };
+ s32 _words[2];
+} CsCmdMisc; // size = 0x30
-typedef struct {
- /* 0x0 */ u16 unk0;
- /* 0x2 */ u16 startFrame;
- /* 0x4 */ u16 endFrame;
- /* 0x6 */ u8 hour;
- /* 0x7 */ u8 minute;
- /* 0x8 */ UNK_TYPE1 unk_08[0x04];
-} CsCmdDayTime; // size = 0xC
+typedef union {
+ struct {
+ /* 0x0 */ u16 unused0;
+ /* 0x2 */ u16 startFrame;
+ /* 0x4 */ u16 endFrame; // unused
+ /* 0x6 */ u8 hour;
+ /* 0x7 */ u8 minute;
+ };
+ s32 _words[3];
+} CsCmdTime; // size = 0xC
-typedef struct {
- /* 0x0 */ u16 setting;
- /* 0x2 */ u16 startFrame;
- /* 0x4 */ u16 endFrame;
- /* 0x6 */ u16 unk_06;
-} CsCmdEnvLighting; // size = 0x8
+typedef union {
+ struct {
+ /* 0x0 */ u16 settingPlusOne;
+ /* 0x2 */ u16 startFrame;
+ /* 0x4 */ u16 endFrame; // unused
+ };
+ s32 _words[2];
+} CsCmdLightSetting; // size = 0x8
-typedef struct {
- /* 0x0 */ u16 sequence;
- /* 0x2 */ u16 startFrame;
- /* 0x4 */ u16 endFrame;
- /* 0x6 */ u16 unk_06;
-} CsCmdSequenceChange; // size = 0x8
+typedef union {
+ struct {
+ /* 0x0 */ u16 seqIdPlusOne;
+ /* 0x2 */ u16 startFrame;
+ /* 0x4 */ u16 endFrame;
+ };
+ s32 _words[2];
+} CsCmdStartSeq; // size = 0x8
-typedef struct {
- /* 0x0 */ u16 type;
- /* 0x2 */ u16 startFrame;
- /* 0x4 */ u16 endFrame;
- /* 0x6 */ u16 unk_06;
- /* 0x8 */ u32 unk_08;
-} CsCmdSequenceFade; // size = 0xC
+typedef union {
+ struct {
+ /* 0x0 */ u16 seqIdPlusOne;
+ /* 0x2 */ u16 startFrame;
+ /* 0x4 */ u16 endFrame;
+ };
+ s32 _words[2];
+} CsCmdStopSeq; // size = 0x8
-typedef struct {
- /* 0x0 */ u16 base;
- /* 0x2 */ u16 startFrame;
- /* 0x4 */ u16 endFrame;
- /* 0x6 */ u16 type;
- /* 0x8 */ u16 textId1;
- /* 0xA */ u16 textId2;
-} CsCmdTextbox; // size = 0xC
+typedef union {
+ struct {
+ /* 0x0 */ u16 seqPlayer;
+ /* 0x2 */ u16 startFrame;
+ /* 0x4 */ u16 endFrame;
+ };
+ s32 _words[3];
+} CsCmdFadeOutSeq; // size = 0xC
typedef enum {
- /* -1 */ CS_TEXTBOX_TYPE_NONE = -1,
- /* 0 */ CS_TEXTBOX_TYPE_DEFAULT,
- /* 1 */ CS_TEXTBOX_TYPE_1,
- /* 2 */ CS_TEXTBOX_TYPE_LEARN_SONG,
- /* 3 */ CS_TEXTBOX_TYPE_3,
- /* 4 */ CS_TEXTBOX_TYPE_BOSSES_REMAINS,
- /* 5 */ CS_TEXTBOX_TYPE_ALL_NORMAL_MASKS
-} CutsceneTextboxType;
+ /* 1 */ CS_FADE_OUT_BGM_MAIN = 1,
+ /* 2 */ CS_FADE_OUT_FANFARE
+} CutsceneFadeOutSeqPlayer;
-typedef struct {
- /* 0x0 */ u16 type;
- /* 0x2 */ u16 startFrame;
- /* 0x4 */ u16 endFrame;
- /* 0x6 */ u8 intensity;
- /* 0x7 */ u8 decayTimer;
- /* 0x8 */ u8 decayStep;
- /* 0x9 */ UNK_TYPE1 pad9[0x3];
+typedef union {
+ struct {
+ /* 0x0 */ u16 unused0;
+ /* 0x2 */ u16 startFrame;
+ /* 0x4 */ u16 endFrame; // unused
+ };
+ s32 _words[2];
+} CsCmdStartAmbience; // size = 0x8
+
+typedef union {
+ struct {
+ /* 0x0 */ u16 unused0;
+ /* 0x2 */ u16 startFrame;
+ /* 0x4 */ u16 endFrame;
+ };
+ s32 _words[2];
+} CsCmdFadeOutAmbience; // size = 0x8
+
+typedef union {
+ struct {
+ /* 0x0 */ u16 type;
+ /* 0x2 */ u16 startFrame;
+ /* 0x4 */ u16 endFrame; // unused
+ };
+ s32 _words[2];
+} CsCmdModifySeq; // size = 0x8
+
+typedef enum {
+ /* 1 */ CS_MOD_SEQ_0 = 1,
+ /* 2 */ CS_MOD_SEQ_1,
+ /* 3 */ CS_MOD_SEQ_2,
+ /* 4 */ CS_MOD_AMBIENCE_0,
+ /* 5 */ CS_MOD_AMBIENCE_1,
+ /* 6 */ CS_MOD_AMBIENCE_2,
+ /* 7 */ CS_MOD_SEQ_STORE,
+ /* 8 */ CS_MOD_SEQ_RESTORE
+} CsModifySeqType;
+
+typedef union {
+ struct {
+ /* 0x0 */ u16 type;
+ /* 0x2 */ u16 startFrame;
+ /* 0x4 */ u16 endFrame; // unused
+ };
+ s32 _words[2];
+} CsCmdDestination; // size = 0x8
+
+typedef enum {
+ /* 1 */ CS_DESTINATION_DEFAULT = 1,
+ /* 2 */ CS_DESTINATION_BOSS_WARP
+} CsDestinationType;
+
+typedef union {
+ struct {
+ /* 0x0 */ u16 type;
+ /* 0x2 */ u16 startFrame;
+ /* 0x4 */ u16 endFrame; // unused
+ };
+ s32 _words[2];
+} CsCmdChooseCreditsScene; // size = 0x8
+
+typedef enum {
+ /* 1 */ CS_CREDITS_DESTINATION = CS_DESTINATION_DEFAULT,
+ /* 2 */ CS_CREDITS_MASK_KAMARO,
+ /* 3 */ CS_CREDITS_MASK_GREAT_FAIRY,
+ /* 4 */ CS_CREDITS_MASK_ROMANI,
+ /* 5 */ CS_CREDITS_MASK_BLAST,
+ /* 6 */ CS_CREDITS_MASK_CIRCUS_LEADER,
+ /* 7 */ CS_CREDITS_MASK_BREMEN,
+ /* 8 */ CS_CREDITS_IKANA,
+ /* 9 */ CS_CREDITS_MASK_COUPLE,
+ /* 10 */ CS_CREDITS_MASK_BUNNY,
+ /* 11 */ CS_CREDITS_MASK_POSTMAN
+} CsChooseCreditsSceneType;
+
+typedef union {
+ struct {
+ /* 0x0 */ u16 type;
+ /* 0x2 */ u16 startFrame;
+ /* 0x4 */ u16 endFrame;
+ };
+ s32 _words[2];
+} CsCmdMotionBlur; // size = 0x8
+
+typedef enum {
+ /* 1 */ CS_MOTION_BLUR_ENABLE = 1, // enable instantly
+ /* 2 */ CS_MOTION_BLUR_DISABLE // disable gradually
+} CsMotionBlurType;
+
+typedef union {
+ struct {
+ /* 0x0 */ u16 unused0;
+ /* 0x2 */ u16 startFrame;
+ /* 0x4 */ u16 endFrame; // unused
+ };
+ s32 _words[2];
+} CsCmdSfxReverbIndexTo2; // size = 0x8
+
+typedef union {
+ struct {
+ /* 0x0 */ u16 unused0;
+ /* 0x2 */ u16 startFrame;
+ /* 0x4 */ u16 endFrame; // unused
+ };
+ s32 _words[2];
+} CsCmdSfxReverbIndexTo1; // size = 0x8
+
+typedef union {
+ struct {
+ /* 0x0 */ u16 type;
+ /* 0x2 */ u16 startFrame;
+ /* 0x4 */ u16 endFrame;
+ };
+ s32 _words[2];
+} CsCmdTransition; // size = 0x8
+
+typedef enum {
+ /* 1 */ CS_TRANS_GRAY_FILL_IN = 1, // has hardcoded sounds for some scenes
+ /* 2 */ CS_TRANS_BLUE_FILL_IN,
+ /* 3 */ CS_TRANS_RED_FILL_OUT,
+ /* 4 */ CS_TRANS_GREEN_FILL_OUT,
+ /* 5 */ CS_TRANS_GRAY_FILL_OUT,
+ /* 6 */ CS_TRANS_BLUE_FILL_OUT,
+ /* 7 */ CS_TRANS_RED_FILL_IN,
+ /* 8 */ CS_TRANS_GREEN_FILL_IN,
+ /* 9 */ CS_TRANS_TRIGGER_INSTANCE, // used with `TRANS_MODE_INSTANCE_WAIT`
+ /* 10 */ CS_TRANS_BLACK_FILL_OUT,
+ /* 11 */ CS_TRANS_BLACK_FILL_IN,
+ /* 12 */ CS_TRANS_GRAY_TO_BLACK,
+ /* 13 */ CS_TRANS_BLACK_TO_GRAY
+} CutsceneTransitionType;
+
+typedef union {
+ struct {
+ /* 0x0 */ u16 textId; // can also be an ocarina action for `CS_TEXT_OCARINA_ACTION`
+ /* 0x2 */ u16 startFrame;
+ /* 0x4 */ u16 endFrame;
+ /* 0x6 */ u16 type;
+ /* 0x8 */ u16 altTextId1;
+ /* 0xA */ u16 altTextId2;
+ };
+ s32 _words[3];
+} CsCmdText; // size = 0xC
+
+typedef enum {
+ /* -1 */ CS_TEXT_TYPE_NONE = -1,
+ /* 0 */ CS_TEXT_TYPE_DEFAULT,
+ /* 1 */ CS_TEXT_TYPE_1,
+ /* 2 */ CS_TEXT_OCARINA_ACTION,
+ /* 3 */ CS_TEXT_TYPE_3,
+ /* 4 */ CS_TEXT_TYPE_BOSSES_REMAINS, // use `altText1` in the Giant Cutscene if all remains are already obtained
+ /* 5 */ CS_TEXT_TYPE_ALL_NORMAL_MASKS
+} CutsceneTextType;
+
+typedef union {
+ struct {
+ /* 0x0 */ u16 type;
+ /* 0x2 */ u16 startFrame;
+ /* 0x4 */ u16 endFrame;
+ /* 0x6 */ u8 intensity;
+ /* 0x7 */ u8 decayTimer;
+ /* 0x8 */ u8 decayStep;
+ };
+ s32 _words[3];
} CsCmdRumble; // size = 0xC
-typedef struct {
- /* 0x0 */ u16 unk0;
- /* 0x2 */ u16 startFrame;
- /* 0x4 */ u16 endFrame;
- /* 0x6 */ Color_RGB8 color;
- /* 0x9 */ UNK_TYPE1 pad9[0x3];
-} CsCmdFadeScreen; // size = 0xC
+typedef enum {
+ /* 1 */ CS_RUMBLE_ONCE = 1, // rumble once when startFrame is reached
+ /* 2 */ CS_RUMBLE_PULSE // rumble every 64 frames between startFrame and endFrame
+} CutsceneRumbleType;
+
+typedef union {
+ struct {
+ /* 0x0 */ u16 type;
+ /* 0x2 */ u16 startFrame;
+ /* 0x4 */ u16 endFrame;
+ /* 0x6 */ Color_RGB8 color;
+ };
+ s32 _words[3];
+} CsCmdTransitionGeneral; // size = 0xC
typedef enum {
- /* 0 */ CS_STATE_0,
- /* 1 */ CS_STATE_1,
- /* 2 */ CS_STATE_2,
- /* 3 */ CS_STATE_3,
- /* 4 */ CS_STATE_4
+ /* 1 */ CS_TRANS_GENERAL_FILL_IN = 1,
+ /* 2 */ CS_TRANS_GENERAL_FILL_OUT
+} CsTransitionGeneralType;
+
+typedef union {
+ struct {
+ /* 0x0 */ u16 giveTatl;
+ /* 0x2 */ u16 startFrame;
+ /* 0x4 */ u16 endFrame; // unused
+ };
+ s32 _words[2];
+} CsCmdGiveTatl; // size = 0x8
+
+typedef enum {
+ /* 0 */ CS_STATE_IDLE,
+ /* 1 */ CS_STATE_START,
+ /* 2 */ CS_STATE_RUN,
+ /* 3 */ CS_STATE_STOP,
+ /* 4 */ CS_STATE_RUN_UNSTOPPABLE
} CutsceneState;
+typedef union {
+ struct {
+ /* 0x0 */ u16 unused0;
+ /* 0x2 */ u16 startFrame;
+ /* 0x4 */ u16 endFrame; // unused
+ };
+ s32 _words[2];
+} CsCmdUnimplemented; // size = 0x8
+
typedef enum {
- /* 0x00A */ CS_CMD_TEXTBOX = 0xA,
- /* 0x05A */ CS_CMD_CAMERA = 0x5A,
- /* 0x096 */ CS_CMD_MISC = 0x96,
- /* 0x097 */ CS_CMD_SET_LIGHTING,
- /* 0x098 */ CS_CMD_SCENE_TRANS_FX,
- /* 0x099 */ CS_CMD_MOTIONBLUR,
- /* 0x09A */ CS_CMD_GIVETATL,
- /* 0x09B */ CS_CMD_FADESCREEN,
- /* 0x09C */ CS_CMD_FADESEQ,
- /* 0x09D */ CS_CMD_SETTIME,
- /* 0x0C8 */ CS_CMD_SET_PLAYER_ACTION = 0xC8,
- /* 0x0FA */ CS_CMD_UNK_FA = 0xFA,
- /* 0x0FE */ CS_CMD_UNK_FE = 0xFE,
- /* 0x0FF */ CS_CMD_UNK_FF,
- /* 0x100 */ CS_CMD_UNK_100,
- /* 0x101 */ CS_CMD_UNK_101,
- /* 0x102 */ CS_CMD_UNK_102,
- /* 0x103 */ CS_CMD_UNK_103,
- /* 0x104 */ CS_CMD_UNK_104,
- /* 0x105 */ CS_CMD_UNK_105,
- /* 0x108 */ CS_CMD_UNK_108 = 0x108,
- /* 0x109 */ CS_CMD_UNK_109,
- /* 0x12C */ CS_CMD_PLAYSEQ = 0x12C,
- /* 0x12D */ CS_CMD_STOPSEQ,
- /* 0x12E */ CS_CMD_PLAYAMBIENCE,
- /* 0x12F */ CS_CMD_FADEAMBIENCE,
- /* 0x130 */ CS_CMD_130,
- /* 0x131 */ CS_CMD_131,
- /* 0x132 */ CS_CMD_132,
- /* 0x15E */ CS_CMD_TERMINATOR = 0x15E,
+ /* 0x00A */ CS_CMD_TEXT = 10,
+ /* 0x05A */ CS_CMD_CAMERA_SPLINE = 90,
+ /* 0x064 */ CS_CMD_ACTOR_CUE_100 = 100,
+ /* 0x065 */ CS_CMD_ACTOR_CUE_101,
+ /* 0x066 */ CS_CMD_ACTOR_CUE_102,
+ /* 0x067 */ CS_CMD_ACTOR_CUE_103,
+ /* 0x068 */ CS_CMD_ACTOR_CUE_104,
+ /* 0x069 */ CS_CMD_ACTOR_CUE_105,
+ /* 0x06A */ CS_CMD_ACTOR_CUE_106,
+ /* 0x06B */ CS_CMD_ACTOR_CUE_107,
+ /* 0x06C */ CS_CMD_ACTOR_CUE_108,
+ /* 0x06D */ CS_CMD_ACTOR_CUE_109,
+ /* 0x06E */ CS_CMD_ACTOR_CUE_110,
+ /* 0x06F */ CS_CMD_ACTOR_CUE_111,
+ /* 0x070 */ CS_CMD_ACTOR_CUE_112,
+ /* 0x071 */ CS_CMD_ACTOR_CUE_113,
+ /* 0x072 */ CS_CMD_ACTOR_CUE_114,
+ /* 0x073 */ CS_CMD_ACTOR_CUE_115,
+ /* 0x074 */ CS_CMD_ACTOR_CUE_116,
+ /* 0x075 */ CS_CMD_ACTOR_CUE_117,
+ /* 0x076 */ CS_CMD_ACTOR_CUE_118,
+ /* 0x077 */ CS_CMD_ACTOR_CUE_119,
+ /* 0x078 */ CS_CMD_ACTOR_CUE_120,
+ /* 0x079 */ CS_CMD_ACTOR_CUE_121,
+ /* 0x07A */ CS_CMD_ACTOR_CUE_122,
+ /* 0x07B */ CS_CMD_ACTOR_CUE_123,
+ /* 0x07C */ CS_CMD_ACTOR_CUE_124,
+ /* 0x07D */ CS_CMD_ACTOR_CUE_125,
+ /* 0x07E */ CS_CMD_ACTOR_CUE_126,
+ /* 0x07F */ CS_CMD_ACTOR_CUE_127,
+ /* 0x080 */ CS_CMD_ACTOR_CUE_128,
+ /* 0x081 */ CS_CMD_ACTOR_CUE_129,
+ /* 0x082 */ CS_CMD_ACTOR_CUE_130,
+ /* 0x083 */ CS_CMD_ACTOR_CUE_131,
+ /* 0x084 */ CS_CMD_ACTOR_CUE_132,
+ /* 0x085 */ CS_CMD_ACTOR_CUE_133,
+ /* 0x086 */ CS_CMD_ACTOR_CUE_134,
+ /* 0x087 */ CS_CMD_ACTOR_CUE_135,
+ /* 0x088 */ CS_CMD_ACTOR_CUE_136,
+ /* 0x089 */ CS_CMD_ACTOR_CUE_137,
+ /* 0x08A */ CS_CMD_ACTOR_CUE_138,
+ /* 0x08B */ CS_CMD_ACTOR_CUE_139,
+ /* 0x08C */ CS_CMD_ACTOR_CUE_140,
+ /* 0x08D */ CS_CMD_ACTOR_CUE_141,
+ /* 0x08E */ CS_CMD_ACTOR_CUE_142,
+ /* 0x08F */ CS_CMD_ACTOR_CUE_143,
+ /* 0x090 */ CS_CMD_ACTOR_CUE_144,
+ /* 0x091 */ CS_CMD_ACTOR_CUE_145,
+ /* 0x092 */ CS_CMD_ACTOR_CUE_146,
+ /* 0x093 */ CS_CMD_ACTOR_CUE_147,
+ /* 0x094 */ CS_CMD_ACTOR_CUE_148,
+ /* 0x095 */ CS_CMD_ACTOR_CUE_149,
+ /* 0x096 */ CS_CMD_MISC,
+ /* 0x097 */ CS_CMD_LIGHT_SETTING,
+ /* 0x098 */ CS_CMD_TRANSITION,
+ /* 0x099 */ CS_CMD_MOTION_BLUR,
+ /* 0x09A */ CS_CMD_GIVE_TATL,
+ /* 0x09B */ CS_CMD_TRANSITION_GENERAL,
+ /* 0x09C */ CS_CMD_FADE_OUT_SEQ,
+ /* 0x09D */ CS_CMD_TIME,
+ /* 0x0C8 */ CS_CMD_PLAYER_CUE = 200,
+ /* 0x0C9 */ CS_CMD_ACTOR_CUE_201,
+ /* 0x0FA */ CS_CMD_UNK_DATA_FA = 0xFA,
+ /* 0x0FE */ CS_CMD_UNK_DATA_FE = 0xFE,
+ /* 0x0FF */ CS_CMD_UNK_DATA_FF,
+ /* 0x100 */ CS_CMD_UNK_DATA_100,
+ /* 0x101 */ CS_CMD_UNK_DATA_101,
+ /* 0x102 */ CS_CMD_UNK_DATA_102,
+ /* 0x103 */ CS_CMD_UNK_DATA_103,
+ /* 0x104 */ CS_CMD_UNK_DATA_104,
+ /* 0x105 */ CS_CMD_UNK_DATA_105,
+ /* 0x108 */ CS_CMD_UNK_DATA_108 = 0x108,
+ /* 0x109 */ CS_CMD_UNK_DATA_109,
+ /* 0x12C */ CS_CMD_START_SEQ = 300,
+ /* 0x12D */ CS_CMD_STOP_SEQ,
+ /* 0x12E */ CS_CMD_START_AMBIENCE,
+ /* 0x12F */ CS_CMD_FADE_OUT_AMBIENCE,
+ /* 0x130 */ CS_CMD_SFX_REVERB_INDEX_2,
+ /* 0x131 */ CS_CMD_SFX_REVERB_INDEX_1,
+ /* 0x132 */ CS_CMD_MODIFY_SEQ,
+ /* 0x15E */ CS_CMD_DESTINATION = 350,
/* 0x15F */ CS_CMD_CHOOSE_CREDITS_SCENES,
- /* 0x190 */ CS_CMD_RUMBLE = 0x190
+ /* 0x190 */ CS_CMD_RUMBLE = 400,
+ /* 0x1C2 */ CS_CMD_ACTOR_CUE_450 = 450,
+ /* 0x1C3 */ CS_CMD_ACTOR_CUE_451,
+ /* 0x1C4 */ CS_CMD_ACTOR_CUE_452,
+ /* 0x1C5 */ CS_CMD_ACTOR_CUE_453,
+ /* 0x1C6 */ CS_CMD_ACTOR_CUE_454,
+ /* 0x1C7 */ CS_CMD_ACTOR_CUE_455,
+ /* 0x1C8 */ CS_CMD_ACTOR_CUE_456,
+ /* 0x1C9 */ CS_CMD_ACTOR_CUE_457,
+ /* 0x1CA */ CS_CMD_ACTOR_CUE_458,
+ /* 0x1CB */ CS_CMD_ACTOR_CUE_459,
+ /* 0x1CC */ CS_CMD_ACTOR_CUE_460,
+ /* 0x1CD */ CS_CMD_ACTOR_CUE_461,
+ /* 0x1CE */ CS_CMD_ACTOR_CUE_462,
+ /* 0x1CF */ CS_CMD_ACTOR_CUE_463,
+ /* 0x1D0 */ CS_CMD_ACTOR_CUE_464,
+ /* 0x1D1 */ CS_CMD_ACTOR_CUE_465,
+ /* 0x1D2 */ CS_CMD_ACTOR_CUE_466,
+ /* 0x1D3 */ CS_CMD_ACTOR_CUE_467,
+ /* 0x1D4 */ CS_CMD_ACTOR_CUE_468,
+ /* 0x1D5 */ CS_CMD_ACTOR_CUE_469,
+ /* 0x1D6 */ CS_CMD_ACTOR_CUE_470,
+ /* 0x1D7 */ CS_CMD_ACTOR_CUE_471,
+ /* 0x1D8 */ CS_CMD_ACTOR_CUE_472,
+ /* 0x1D9 */ CS_CMD_ACTOR_CUE_473,
+ /* 0x1DA */ CS_CMD_ACTOR_CUE_474,
+ /* 0x1DB */ CS_CMD_ACTOR_CUE_475,
+ /* 0x1DC */ CS_CMD_ACTOR_CUE_476,
+ /* 0x1DD */ CS_CMD_ACTOR_CUE_477,
+ /* 0x1DE */ CS_CMD_ACTOR_CUE_478,
+ /* 0x1DF */ CS_CMD_ACTOR_CUE_479,
+ /* 0x1E0 */ CS_CMD_ACTOR_CUE_480,
+ /* 0x1E1 */ CS_CMD_ACTOR_CUE_481,
+ /* 0x1E2 */ CS_CMD_ACTOR_CUE_482,
+ /* 0x1E3 */ CS_CMD_ACTOR_CUE_483,
+ /* 0x1E4 */ CS_CMD_ACTOR_CUE_484,
+ /* 0x1E5 */ CS_CMD_ACTOR_CUE_485,
+ /* 0x1E6 */ CS_CMD_ACTOR_CUE_486,
+ /* 0x1E7 */ CS_CMD_ACTOR_CUE_487,
+ /* 0x1E8 */ CS_CMD_ACTOR_CUE_488,
+ /* 0x1E9 */ CS_CMD_ACTOR_CUE_489,
+ /* 0x1EA */ CS_CMD_ACTOR_CUE_490,
+ /* 0x1EB */ CS_CMD_ACTOR_CUE_491,
+ /* 0x1EC */ CS_CMD_ACTOR_CUE_492,
+ /* 0x1ED */ CS_CMD_ACTOR_CUE_493,
+ /* 0x1EE */ CS_CMD_ACTOR_CUE_494,
+ /* 0x1EF */ CS_CMD_ACTOR_CUE_495,
+ /* 0x1F0 */ CS_CMD_ACTOR_CUE_496,
+ /* 0x1F1 */ CS_CMD_ACTOR_CUE_497,
+ /* 0x1F2 */ CS_CMD_ACTOR_CUE_498,
+ /* 0x1F3 */ CS_CMD_ACTOR_CUE_499,
+ /* 0x1F4 */ CS_CMD_ACTOR_CUE_500,
+ /* 0x1F5 */ CS_CMD_ACTOR_CUE_501,
+ /* 0x1F6 */ CS_CMD_ACTOR_CUE_502,
+ /* 0x1F7 */ CS_CMD_ACTOR_CUE_503,
+ /* 0x1F8 */ CS_CMD_ACTOR_CUE_504,
+ /* 0x1F9 */ CS_CMD_ACTOR_CUE_505,
+ /* 0x1FA */ CS_CMD_ACTOR_CUE_506,
+ /* 0x1FB */ CS_CMD_ACTOR_CUE_507,
+ /* 0x1FC */ CS_CMD_ACTOR_CUE_508,
+ /* 0x1FD */ CS_CMD_ACTOR_CUE_509,
+ /* 0x1FE */ CS_CMD_ACTOR_CUE_510,
+ /* 0x1FF */ CS_CMD_ACTOR_CUE_511,
+ /* 0x200 */ CS_CMD_ACTOR_CUE_512,
+ /* 0x201 */ CS_CMD_ACTOR_CUE_513,
+ /* 0x202 */ CS_CMD_ACTOR_CUE_514,
+ /* 0x203 */ CS_CMD_ACTOR_CUE_515,
+ /* 0x204 */ CS_CMD_ACTOR_CUE_516,
+ /* 0x205 */ CS_CMD_ACTOR_CUE_517,
+ /* 0x206 */ CS_CMD_ACTOR_CUE_518,
+ /* 0x207 */ CS_CMD_ACTOR_CUE_519,
+ /* 0x208 */ CS_CMD_ACTOR_CUE_520,
+ /* 0x209 */ CS_CMD_ACTOR_CUE_521,
+ /* 0x20A */ CS_CMD_ACTOR_CUE_522,
+ /* 0x20B */ CS_CMD_ACTOR_CUE_523,
+ /* 0x20C */ CS_CMD_ACTOR_CUE_524,
+ /* 0x20D */ CS_CMD_ACTOR_CUE_525,
+ /* 0x20E */ CS_CMD_ACTOR_CUE_526,
+ /* 0x20F */ CS_CMD_ACTOR_CUE_527,
+ /* 0x210 */ CS_CMD_ACTOR_CUE_528,
+ /* 0x211 */ CS_CMD_ACTOR_CUE_529,
+ /* 0x212 */ CS_CMD_ACTOR_CUE_530,
+ /* 0x213 */ CS_CMD_ACTOR_CUE_531,
+ /* 0x214 */ CS_CMD_ACTOR_CUE_532,
+ /* 0x215 */ CS_CMD_ACTOR_CUE_533,
+ /* 0x216 */ CS_CMD_ACTOR_CUE_534,
+ /* 0x217 */ CS_CMD_ACTOR_CUE_535,
+ /* 0x218 */ CS_CMD_ACTOR_CUE_536,
+ /* 0x219 */ CS_CMD_ACTOR_CUE_537,
+ /* 0x21A */ CS_CMD_ACTOR_CUE_538,
+ /* 0x21B */ CS_CMD_ACTOR_CUE_539,
+ /* 0x21C */ CS_CMD_ACTOR_CUE_540,
+ /* 0x21D */ CS_CMD_ACTOR_CUE_541,
+ /* 0x21E */ CS_CMD_ACTOR_CUE_542,
+ /* 0x21F */ CS_CMD_ACTOR_CUE_543,
+ /* 0x220 */ CS_CMD_ACTOR_CUE_544,
+ /* 0x221 */ CS_CMD_ACTOR_CUE_545,
+ /* 0x222 */ CS_CMD_ACTOR_CUE_546,
+ /* 0x223 */ CS_CMD_ACTOR_CUE_547,
+ /* 0x224 */ CS_CMD_ACTOR_CUE_548,
+ /* 0x225 */ CS_CMD_ACTOR_CUE_549,
+ /* 0x226 */ CS_CMD_ACTOR_CUE_550,
+ /* 0x227 */ CS_CMD_ACTOR_CUE_551,
+ /* 0x228 */ CS_CMD_ACTOR_CUE_552,
+ /* 0x229 */ CS_CMD_ACTOR_CUE_553,
+ /* 0x22A */ CS_CMD_ACTOR_CUE_554,
+ /* 0x22B */ CS_CMD_ACTOR_CUE_555,
+ /* 0x22C */ CS_CMD_ACTOR_CUE_556,
+ /* 0x22D */ CS_CMD_ACTOR_CUE_557,
+ /* 0x22E */ CS_CMD_ACTOR_CUE_558,
+ /* 0x22F */ CS_CMD_ACTOR_CUE_559,
+ /* 0x230 */ CS_CMD_ACTOR_CUE_560,
+ /* 0x231 */ CS_CMD_ACTOR_CUE_561,
+ /* 0x232 */ CS_CMD_ACTOR_CUE_562,
+ /* 0x233 */ CS_CMD_ACTOR_CUE_563,
+ /* 0x234 */ CS_CMD_ACTOR_CUE_564,
+ /* 0x235 */ CS_CMD_ACTOR_CUE_565,
+ /* 0x236 */ CS_CMD_ACTOR_CUE_566,
+ /* 0x237 */ CS_CMD_ACTOR_CUE_567,
+ /* 0x238 */ CS_CMD_ACTOR_CUE_568,
+ /* 0x239 */ CS_CMD_ACTOR_CUE_569,
+ /* 0x23A */ CS_CMD_ACTOR_CUE_570,
+ /* 0x23B */ CS_CMD_ACTOR_CUE_571,
+ /* 0x23C */ CS_CMD_ACTOR_CUE_572,
+ /* 0x23D */ CS_CMD_ACTOR_CUE_573,
+ /* 0x23E */ CS_CMD_ACTOR_CUE_574,
+ /* 0x23F */ CS_CMD_ACTOR_CUE_575,
+ /* 0x240 */ CS_CMD_ACTOR_CUE_576,
+ /* 0x241 */ CS_CMD_ACTOR_CUE_577,
+ /* 0x242 */ CS_CMD_ACTOR_CUE_578,
+ /* 0x243 */ CS_CMD_ACTOR_CUE_579,
+ /* 0x244 */ CS_CMD_ACTOR_CUE_580,
+ /* 0x245 */ CS_CMD_ACTOR_CUE_581,
+ /* 0x246 */ CS_CMD_ACTOR_CUE_582,
+ /* 0x247 */ CS_CMD_ACTOR_CUE_583,
+ /* 0x248 */ CS_CMD_ACTOR_CUE_584,
+ /* 0x249 */ CS_CMD_ACTOR_CUE_585,
+ /* 0x24A */ CS_CMD_ACTOR_CUE_586,
+ /* 0x24B */ CS_CMD_ACTOR_CUE_587,
+ /* 0x24C */ CS_CMD_ACTOR_CUE_588,
+ /* 0x24D */ CS_CMD_ACTOR_CUE_589,
+ /* 0x24E */ CS_CMD_ACTOR_CUE_590,
+ /* 0x24F */ CS_CMD_ACTOR_CUE_591,
+ /* 0x250 */ CS_CMD_ACTOR_CUE_592,
+ /* 0x251 */ CS_CMD_ACTOR_CUE_593,
+ /* 0x252 */ CS_CMD_ACTOR_CUE_594,
+ /* 0x253 */ CS_CMD_ACTOR_CUE_595,
+ /* 0x254 */ CS_CMD_ACTOR_CUE_596,
+ /* 0x255 */ CS_CMD_ACTOR_CUE_597,
+ /* 0x256 */ CS_CMD_ACTOR_CUE_598,
+ /* 0x257 */ CS_CMD_ACTOR_CUE_599,
+ /* -2 */ CS_CMD_ACTOR_CUE_POST_PROCESS = 0xFFFFFFFE,
+ /* -1 */ CS_CAM_STOP // OoT Remnant
} CutsceneCmd;
+typedef enum {
+ /* 0x00 */ CS_MISC_UNIMPLEMENTED_0,
+ /* 0x01 */ CS_MISC_RAIN,
+ /* 0x02 */ CS_MISC_LIGHTNING,
+ /* 0x03 */ CS_MISC_LIFT_FOG,
+ /* 0x04 */ CS_MISC_CLOUDY_SKY,
+ /* 0x05 */ CS_MISC_STOP_CUTSCENE,
+ /* 0x06 */ CS_MISC_UNIMPLEMENTED_6,
+ /* 0x07 */ CS_MISC_SHOW_TITLE_CARD,
+ /* 0x08 */ CS_MISC_EARTHQUAKE_MEDIUM,
+ /* 0x09 */ CS_MISC_EARTHQUAKE_STOP,
+ /* 0x0A */ CS_MISC_VISMONO_BLACK_AND_WHITE,
+ /* 0x0B */ CS_MISC_VISMONO_SEPIA,
+ /* 0x0C */ CS_MISC_HIDE_ROOM,
+ /* 0x0D */ CS_MISC_RED_PULSATING_LIGHTS,
+ /* 0x0E */ CS_MISC_HALT_ALL_ACTORS,
+ /* 0x0F */ CS_MISC_RESUME_ALL_ACTORS,
+ /* 0x10 */ CS_MISC_SANDSTORM_FILL,
+ /* 0x11 */ CS_MISC_SUNSSONG_START,
+ /* 0x12 */ CS_MISC_FREEZE_TIME,
+ /* 0x13 */ CS_MISC_LONG_SCARECROW_SONG,
+ /* 0x14 */ CS_MISC_SET_CSFLAG_3,
+ /* 0x15 */ CS_MISC_SET_CSFLAG_4,
+ /* 0x16 */ CS_MISC_PLAYER_FORM_DEKU,
+ /* 0x17 */ CS_MISC_ENABLE_PLAYER_REFLECTION,
+ /* 0x18 */ CS_MISC_DISABLE_PLAYER_REFLECTION,
+ /* 0x19 */ CS_MISC_PLAYER_FORM_HUMAN,
+ /* 0x1A */ CS_MISC_EARTHQUAKE_STRONG,
+ /* 0x1B */ CS_MISC_DEST_MOON_CRASH_FIRE_WALL,
+ /* 0x1C */ CS_MISC_MOON_CRASH_SKYBOX,
+ /* 0x1D */ CS_MISC_PLAYER_FORM_RESTORED,
+ /* 0x1E */ CS_MISC_DISABLE_PLAYER_CSMODE_START_POS,
+ /* 0x1F */ CS_MISC_ENABLE_PLAYER_CSMODE_START_POS,
+ /* 0x20 */ CS_MISC_UNIMPLEMENTED_20,
+ /* 0x21 */ CS_MISC_SAVE_ENTER_CLOCK_TOWN,
+ /* 0x22 */ CS_MISC_RESET_SAVE_FROM_MOON_CRASH,
+ /* 0x23 */ CS_MISC_TIME_ADVANCE,
+ /* 0x24 */ CS_MISC_EARTHQUAKE_WEAK,
+ /* 0x25 */ CS_MISC_UNIMPLEMENTED_25,
+ /* 0x26 */ CS_MISC_DAWN_OF_A_NEW_DAY,
+ /* 0x27 */ CS_MISC_PLAYER_FORM_ZORA,
+ /* 0x28 */ CS_MISC_FINALE
+} CutsceneMiscType;
+
typedef union CutsceneData {
s32 i;
f32 f;
@@ -163,29 +580,291 @@ typedef union CutsceneData {
s8 b[4];
} CutsceneData;
-typedef struct {
- /* 0x0 */ CutsceneData* segmentedData;
- /* 0x4 */ s16 nextEntrance;
- /* 0x6 */ u8 unk6;
- /* 0x7 */ u8 unk7; // a weekEventReg bitpack?
-} CutsceneEntry; // size = 0x8
+#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
+#define CS_SPAWN_FLAG_ALWAYS 0xFE
+// Trigger the scripted cutscene once upon the specified spawn if `weekEventFlags` is not set. Set `weekEventFlags` after the cutscene.
+//! @note Despite there being more than `0x1F` indices for weekEventFlags, this u8 flag entry can only check weekEventFlags with indices [0 - 0x1F]
+#define CS_SPAWN_FLAG_ONCE(weekEventFlag) ((((weekEventFlag) & 0x1F00) >> 5) | BIT_FLAG_TO_SHIFT((weekEventFlag) & 0xFF))
+
+#define CHECK_CS_SPAWN_FLAG_WEEKEVENTREG(spawnFlags) (GET_WEEKEVENTREG((spawnFlags) / 8) & (1 << ((spawnFlags) % 8)))
+#define SET_CS_SPAWN_FLAG_WEEKEVENTREG(spawnFlags) (WEEKEVENTREG((spawnFlags) / 8) = GET_WEEKEVENTREG((spawnFlags) / 8) | (1 << ((spawnFlags) % 8)))
+
typedef struct {
- /* 0x00 */ u8 sceneCsCount;
- /* 0x04 */ CutsceneData* csData;
- /* 0x08 */ u8 state;
- /* 0x0C */ f32 unk_0C;
- /* 0x10 */ u16 frames;
- /* 0x12 */ u16 currentCsIndex;
- /* 0x14 */ s32 subCamId;
- /* 0x18 */ u16 unk_18;
- /* 0x1A */ u8 unk_1A;
- /* 0x1B */ u8 unk_1B;
- /* 0x1C */ CutsceneCameraPoint* atPoints;
- /* 0x20 */ CutsceneCameraPoint* eyePoints;
- /* 0x24 */ CsCmdActorAction* playerAction;
- /* 0x28 */ CsCmdActorAction* actorActions[10]; // "npcdemopnt"
- /* 0x50 */ CutsceneEntry* sceneCsList;
+ /* 0x0 */ CutsceneData* script;
+ /* 0x4 */ s16 nextEntrance;
+ /* 0x6 */ u8 spawn;
+ /* 0x7 */ u8 spawnFlags; // See `CS_SPAWN_FLAG_`
+} CutsceneScriptEntry; // size = 0x8
+
+// ZAPD compatibility typedefs
+// TODO: Remove when ZAPD adds support for them
+typedef CutsceneScriptEntry CutsceneEntry;
+
+typedef struct {
+ /* 0x00 */ u8 scriptListCount;
+ /* 0x04 */ CutsceneData* script;
+ /* 0x08 */ u8 state;
+ /* 0x0C */ f32 timer;
+ /* 0x10 */ u16 curFrame;
+ /* 0x12 */ u16 scriptIndex;
+ /* 0x14 */ s32 subCamId;
+ /* 0x18 */ u16 camEyeSplinePointsAppliedFrame; // Remnant of OoT. Set but never used.
+ /* 0x1C */ UNK_TYPE1 unk_1C[0xA]; // Remnant of cam data from OoT
+ /* 0x24 */ CsCmdActorCue* playerCue;
+ /* 0x28 */ CsCmdActorCue* actorCues[10]; // "npcdemopnt"
+ /* 0x50 */ CutsceneScriptEntry* scriptList;
} CutsceneContext; // size = 0x54
+/* Actor Cutscenes, which encompasses all cutscenes */
+
+typedef struct {
+ /* 0x00 */ s16 priority; // Lower means higher priority. -1 means it ignores priority
+ /* 0x02 */ s16 length;
+ /* 0x04 */ s16 csCamId; // Index of CsCameraEntry to use. Negative indices use sGlobalCamDataSettings. Indices 0 and above use CsCameraEntry from a sceneLayer
+ /* 0x06 */ s16 scriptIndex;
+ /* 0x08 */ s16 additionalCsId;
+ /* 0x0A */ u8 endSfx;
+ /* 0x0B */ u8 customValue; // 0 - 99: actor-specific custom value. 100+: spawn. 255: none
+ /* 0x0C */ s16 hudVisibility;
+ /* 0x0E */ u8 endCam;
+ /* 0x0F */ u8 letterboxSize;
+} ActorCutscene; // size = 0x10
+// TODO: rename `ActorCutscene` to `CutsceneEntry` once ZAPD uses `CutsceneScriptEntry`
+// typedef CutsceneEntry ActorCutscene;
+
+typedef enum {
+ /* -1 */ CS_ID_NONE = -1,
+ // CsId's 0 - 119 are sceneLayer-specific and index `ActorCutscene`
+ /* 0x78 */ CS_ID_GLOBAL_78 = 120,
+ /* 0x79 */ CS_ID_GLOBAL_79,
+ /* 0x7A */ CS_ID_GLOBAL_7A,
+ /* 0x7B */ CS_ID_GLOBAL_ELEGY,
+ /* 0x7C */ CS_ID_GLOBAL_TALK,
+ /* 0x7D */ CS_ID_GLOBAL_DOOR,
+ /* 0x7E */ CS_ID_GLOBAL_RETURN_TO_CAM, // smoothly return to the previous camera
+ /* 0x7F */ CS_ID_GLOBAL_END
+} CutsceneId;
+
+typedef enum {
+ /* 0 */ PLAYER_CS_ID_ITEM_OCARINA,
+ /* 1 */ PLAYER_CS_ID_ITEM_GET,
+ /* 2 */ PLAYER_CS_ID_ITEM_BOTTLE,
+ /* 3 */ PLAYER_CS_ID_ITEM_SHOW,
+ /* 4 */ PLAYER_CS_ID_WARP_PAD_MOON,
+ /* 5 */ PLAYER_CS_ID_MASK_TRANSFORMATION,
+ /* 6 */ PLAYER_CS_ID_DEATH,
+ /* 7 */ PLAYER_CS_ID_REVIVE,
+ /* 8 */ PLAYER_CS_ID_SONG_WARP, // Song of Time and Song of Soaring
+ /* 9 */ PLAYER_CS_ID_WARP_PAD_ENTRANCE,
+ /* 10 */ PLAYER_CS_ID_MAX
+} PlayerCsId;
+
+#define CS_SCRIPT_ID_NONE -1
+
+typedef enum {
+ // global (see sGlobalCamDataSettings)
+ /* -25 */ CS_CAM_ID_GLOBAL_ELEGY = -25, // CAM_SET_ELEGY_SHELL
+ /* -24 */ CS_CAM_ID_GLOBAL_SIDED, // CAM_SET_SIDED
+ /* -23 */ CS_CAM_ID_GLOBAL_BOAT_CRUISE, // CAM_SET_BOAT_CRUISE
+ /* -22 */ CS_CAM_ID_GLOBAL_N16, // CAM_SET_NONE
+ /* -21 */ CS_CAM_ID_GLOBAL_SUBJECTD, // CAM_SET_SUBJECTD
+ /* -20 */ CS_CAM_ID_GLOBAL_NORMALD, // CAM_SET_NORMALD
+ /* -19 */ CS_CAM_ID_GLOBAL_N13, // CAM_SET_NONE
+ /* -18 */ CS_CAM_ID_GLOBAL_N12, // CAM_SET_NONE
+ /* -17 */ CS_CAM_ID_GLOBAL_N11, // CAM_SET_NONE
+ /* -16 */ CS_CAM_ID_GLOBAL_WARP_PAD_ENTRANCE, // CAM_SET_WARP_PAD_ENTRANCE
+ /* -15 */ CS_CAM_ID_GLOBAL_ATTENTION, // CAM_SET_ATTENTION
+ /* -14 */ CS_CAM_ID_GLOBAL_CONNECT, // CAM_SET_CONNECT0
+ /* -13 */ CS_CAM_ID_GLOBAL_REMOTE_BOMB, // CAM_SET_REMOTEBOMB
+ /* -12 */ CS_CAM_ID_GLOBAL_N0C, // CAM_SET_NONE
+ /* -11 */ CS_CAM_ID_GLOBAL_MASK_TRANSFORMATION, // CAM_SET_MASK_TRANSFORMATION
+ /* -10 */ CS_CAM_ID_GLOBAL_LONG_CHEST_OPENING, // CAM_SET_LONG_CHEST_OPENING
+ /* -9 */ CS_CAM_ID_GLOBAL_REVIVE, // CAM_SET_REBIRTH
+ /* -8 */ CS_CAM_ID_GLOBAL_DEATH, // CAM_SET_DEATH
+ /* -7 */ CS_CAM_ID_GLOBAL_WARP_PAD_MOON, // CAM_SET_WARP_PAD_MOON
+ /* -6 */ CS_CAM_ID_GLOBAL_SONG_WARP, // CAM_SET_NAVI
+ /* -5 */ CS_CAM_ID_GLOBAL_ITEM_SHOW, // CAM_SET_ITEM3
+ /* -4 */ CS_CAM_ID_GLOBAL_ITEM_BOTTLE, // CAM_SET_ITEM2
+ /* -3 */ CS_CAM_ID_GLOBAL_ITEM_OCARINA, // CAM_SET_ITEM1
+ /* -2 */ CS_CAM_ID_GLOBAL_ITEM_GET, // CAM_SET_ITEM0
+ /* -1 */ CS_CAM_ID_NONE
+ // CamCsId's 0+ are sceneLayer-specific and index `ActorCsCamInfo`
+} CutsceneCamId;
+
+typedef enum {
+ /* -1 */ CS_HUD_VISIBILITY_ALL_ALT = -1,
+ /* 0 */ CS_HUD_VISIBILITY_NONE,
+ /* 1 */ CS_HUD_VISIBILITY_ALL,
+ /* 2 */ CS_HUD_VISIBILITY_A_HEARTS_MAGIC,
+ /* 3 */ CS_HUD_VISIBILITY_C_HEARTS_MAGIC,
+ /* 4 */ CS_HUD_VISIBILITY_ALL_NO_MINIMAP,
+ /* 5 */ CS_HUD_VISIBILITY_A_B_C,
+ /* 6 */ CS_HUD_VISIBILITY_B_MINIMAP,
+ /* 7 */ CS_HUD_VISIBILITY_A
+} CutsceneHudVisibility;
+
+typedef enum {
+ /* 0 */ CS_END_SFX_NONE,
+ /* 1 */ CS_END_SFX_TRE_BOX_APPEAR,
+ /* 2 */ CS_END_SFX_CORRECT_CHIME,
+ /* 255 */ CS_END_SFX_NONE_ALT = 0xFF
+} CutsceneEndSfx;
+
+typedef enum {
+ /* 0 */ CS_END_CAM_0,
+ /* 1 */ CS_END_CAM_1,
+ /* 2 */ CS_END_CAM_SMOOTH
+} CutsceneEndCam;
+
+/* Cutscene Camera Spline Scripts */
+
+typedef struct {
+ /* 0x0 */ s16 numEntries;
+ /* 0x2 */ s16 unk_02; // unused
+ /* 0x4 */ s16 unk_04; // unused
+ /* 0x6 */ s16 duration; // total duration
+} CsCmdCamSpline; // size = 0x8
+
+// Both camAt and camEye
+typedef struct {
+ /* 0x0 */ u8 interpType; // see `CutsceneCamInterpType`
+ /* 0x1 */ u8 weight; // for certain types of interpTypes, shifts the weight to certain points. Default is 100.
+ /* 0x2 */ s16 duration; // duration of current point
+ /* 0x4 */ Vec3s pos;
+ /* 0xA */ s16 relativeTo; // see `CutsceneCamRelativeTo`
+} CsCmdCamPoint; // size = 0xC
+
+typedef enum {
+ /* 0 */ CS_CAM_INTERP_0,
+ /* 1 */ CS_CAM_INTERP_1,
+ /* 2 */ CS_CAM_INTERP_2,
+ /* 3 */ CS_CAM_INTERP_3,
+ /* 4 */ CS_CAM_INTERP_4,
+ /* 5 */ CS_CAM_INTERP_5,
+ /* 6 */ CS_CAM_INTERP_6,
+ /* 7 */ CS_CAM_INTERP_7
+} CutsceneCamInterpType;
+
+typedef enum {
+ /* 0 */ CS_CAM_REL_0,
+ /* 1 */ CS_CAM_REL_1,
+ /* 2 */ CS_CAM_REL_2,
+ /* 3 */ CS_CAM_REL_3,
+ /* 4 */ CS_CAM_REL_4,
+ /* 5 */ CS_CAM_REL_5
+} CutsceneCamRelativeTo;
+
+
+// Roll and Fov Data
+typedef struct {
+ /* 0x0 */ s16 unused0; // unused
+ /* 0x2 */ s16 roll;
+ /* 0x4 */ s16 fov;
+ /* 0x6 */ s16 unused1; // unused
+} CsCmdCamMisc; // size = 0x8
+
+typedef struct {
+ /* 0x00 */ Vec3f unk_00;
+ /* 0x0C */ Vec3f unk_0C;
+ /* 0x18 */ f32 unk_18;
+ /* 0x1C */ f32 unk_1C;
+ /* 0x2A */ f32 unk_20;
+ /* 0x24 */ s16 unk_24;
+ /* 0x26 */ s16 unk_26;
+ /* 0x28 */ s16 unk_28;
+ /* 0x2A */ s16 numEntries;
+ /* 0x1E */ u8 curPoint;
+ /* 0x2D */ u8 unk_2D;
+ /* 0x2E */ UNK_TYPE1 unk_2E[2];
+} CutsceneCameraInterp; // size = 0x30
+
+typedef struct {
+ /* 0x00 */ s16 splineIndex;
+ /* 0x02 */ s16 cmdIndex;
+ /* 0x04 */ s16 splineNeedsInit;
+ /* 0x06 */ s16 state;
+ /* 0x08 */ s16 nextSplineTimer;
+ /* 0x0A */ s16 updateSplineTimer;
+ /* 0x0C */ s16 duration; // Duration of the current spline
+ /* 0x10 */ CutsceneCameraInterp eyeInterp;
+ /* 0x40 */ CutsceneCameraInterp atInterp;
+ /* 0x70 */ CsCmdCamPoint* atCmd;
+ /* 0x74 */ CsCmdCamPoint* eyeCmd;
+ /* 0x78 */ CsCmdCamMisc* miscCmd;
+ /* 0x7C */ Camera* camera;
+} CutsceneCamera; // size = 0x80
+
+typedef enum {
+ /* 0 */ CS_CAM_STATE_UPDATE_ALL, // Update spline and next spline timer
+ /* 0 */ CS_CAM_STATE_UPDATE_SPLINE, // Update spline, do not advance next spline timer
+ /* 0 */ CS_CAM_STATE_PAUSE, // No updates
+ /* 0 */ CS_CAM_STATE_DONE_SPLINE, // Finished the current spline, ready for the next one
+ /* 0 */ CS_CAM_STATE_DONE = 999 // Finished all the splines.
+} CutsceneCameraState;
+
+// OoT Remnant
+#define CS_CAM_DATA_NOT_APPLIED 0xFFFF
+
+void Cutscene_InitContext(struct PlayState* play, CutsceneContext* csCtx);
+void Cutscene_StartManual(struct PlayState* play, CutsceneContext* csCtx);
+void Cutscene_StopManual(struct PlayState* play, CutsceneContext* csCtx);
+void Cutscene_UpdateManual(struct PlayState* play, CutsceneContext* csCtx);
+void Cutscene_UpdateScripted(struct PlayState* play, CutsceneContext* csCtx);
+void Cutscene_HandleEntranceTriggers(struct PlayState* play);
+void func_800EDDB0(struct PlayState* play);
+void Cutscene_StartScripted(struct PlayState* play, u8 scriptIndex);
+void Cutscene_ActorTranslate(Actor* actor, struct PlayState* play, s32 cueChannel);
+void Cutscene_ActorTranslateAndYaw(Actor* actor, struct PlayState* play, s32 cueChannel);
+void Cutscene_ActorTranslateAndYawSmooth(Actor* actor, struct PlayState* play, s32 cueChannel);
+void Cutscene_ActorTranslateXZAndYawSmooth(Actor* actor, struct PlayState* play, s32 cueChannel);
+s32 Cutscene_GetSceneLayer(struct PlayState* play);
+s32 Cutscene_GetCueChannel(struct PlayState* play, u16 cueType);
+s32 Cutscene_IsCueInChannel(struct PlayState* play, u16 cueType);
+u8 Cutscene_IsPlaying(struct PlayState* play);
+
+void CutsceneManager_Init(struct PlayState* play, ActorCutscene* cutsceneList, s16 numEntries);
+void CutsceneManager_StoreCamera(Camera* camera);
+void CutsceneManager_ClearWaiting(void);
+s16 CutsceneManager_Update(void);
+void CutsceneManager_Queue(s16 csId);
+s16 CutsceneManager_IsNext(s16 csId);
+s16 CutsceneManager_StartWithPlayerCs(s16 csId, Actor* actor);
+s16 CutsceneManager_StartWithPlayerCsAndSetFlag(s16 csId, Actor* actor);
+s16 CutsceneManager_Start(s16 csId, Actor* actor);
+s16 CutsceneManager_Stop(s16 csId);
+s16 CutsceneManager_GetCurrentCsId(void);
+ActorCutscene* CutsceneManager_GetCutsceneEntry(s16 csId);
+s16 CutsceneManager_GetAdditionalCsId(s16 csId);
+s16 CutsceneManager_GetLength(s16 csId);
+s16 CutsceneManager_GetCutsceneScriptIndex(s16 csId);
+s16 CutsceneManager_GetCutsceneCustomValue(s16 csId);
+s16 CutsceneManager_GetCurrentSubCamId(s16 csId);
+s16 CutsceneManager_FindEntranceCsId(void);
+s32 func_800F22C4(s16 csId, Actor* actor);
+void CutsceneManager_SetReturnCamera(s16 camId);
+
+s32 CutsceneCamera_Init(Camera* camera, CutsceneCamera* csCamera);
+s32 CutsceneCamera_UpdateSplines(u8* script, CutsceneCamera* csCamera);
+void CutsceneCamera_SetState(s16 state);
+void CutsceneCamera_Reset(void);
+
+void CutsceneFlags_UnsetAll(struct PlayState* play);
+void CutsceneFlags_Set(struct PlayState* play, s16 flag);
+void CutsceneFlags_Unset(struct PlayState* play, s16 flag);
+s32 CutsceneFlags_Get(struct PlayState* play, s16 flag);
+
#endif
diff --git a/include/z64cutscene_commands.h b/include/z64cutscene_commands.h
index 1ab6533ac..50e1ce451 100644
--- a/include/z64cutscene_commands.h
+++ b/include/z64cutscene_commands.h
@@ -5,13 +5,19 @@
#include "z64cutscene.h"
/**
+ * Cutscene scripts are arrays of `CutsceneData` words, including bit-packed integers and floats.
+ */
+
+/**
+ * Marks the beginning of a cutscene script.
+ *
* ARGS
- * s32 totalEntries (e), s32 endFrame (n)
+ * s32 totalEntries (e), s32 frameCount (n)
* FORMAT
* eeeeeeee nnnnnnnn
* size = 0x8
*/
-#define CS_BEGIN_CUTSCENE(totalEntries, endFrame) { CMD_W(totalEntries) }, { CMD_W(endFrame) }
+#define CS_BEGIN_CUTSCENE(totalEntries, frameCount) { CMD_W(totalEntries) }, { CMD_W(frameCount) }
/**
@@ -21,83 +27,83 @@
* 0000000A eeeeeeee
* size = 0x8
*/
-#define CS_TEXT_LIST(entries) { CS_CMD_TEXTBOX }, { CMD_W(entries) }
+#define CS_TEXT_LIST(entries) { CS_CMD_TEXT }, { CMD_W(entries) }
/**
* ARGS
- * s16 messageId (i), s16 startFrame (s), s16 endFrame (e), s16 type (o),
+ * s16 textId (i), s16 startFrame (s), s16 endFrame (e), s16 type (o),
* s16 topOptionBranch (y), s16 bottomOptionBranch (n)
* FORMAT
* iiiissss eeeeoooo yyyynnnn
* size = 0xC
*/
-#define CS_TEXT_DISPLAY_TEXTBOX(messageId, startFrame, endFrame, type, topOptionBranch, bottomOptionBranch) \
- { CMD_HH(messageId, startFrame) }, { CMD_HH(endFrame, type) }, { CMD_HH(topOptionBranch, bottomOptionBranch) }
+#define CS_TEXT(textId, startFrame, endFrame, type, topOptionBranch, bottomOptionBranch) \
+ { CMD_HH(textId, startFrame) }, { CMD_HH(endFrame, type) }, { CMD_HH(topOptionBranch, bottomOptionBranch) }
/**
* ARGS
- * s16 messageId (i), s16 startFrame (s), s16 endFrame (e),
+ * s16 textId (i), s16 startFrame (s), s16 endFrame (e),
* s16 topOptionBranch (y), s16 bottomOptionBranch (n)
* FORMAT
* iiiissss eeee0000 yyyynnnn
* size = 0xC
*/
-#define CS_TEXT_DEFAULT(messageId, startFrame, endFrame, topOptionBranch, bottomOptionBranch) \
- CS_TEXT_DISPLAY_TEXTBOX(messageId, startFrame, endFrame, CS_TEXTBOX_TYPE_DEFAULT, topOptionBranch, bottomOptionBranch)
+#define CS_TEXT_DEFAULT(textId, startFrame, endFrame, topOptionBranch, bottomOptionBranch) \
+ CS_TEXT(textId, startFrame, endFrame, CS_TEXT_TYPE_DEFAULT, topOptionBranch, bottomOptionBranch)
/**
* ARGS
- * s16 messageId (i), s16 startFrame (s), s16 endFrame (e),
+ * s16 textId (i), s16 startFrame (s), s16 endFrame (e),
* s16 topOptionBranch (y), s16 bottomOptionBranch (n)
* FORMAT
* iiiissss eeee0001 yyyynnnn
* size = 0xC
*/
-#define CS_TEXT_TYPE_1(messageId, startFrame, endFrame, topOptionBranch, bottomOptionBranch) \
- CS_TEXT_DISPLAY_TEXTBOX(messageId, startFrame, endFrame, CS_TEXTBOX_TYPE_1, topOptionBranch, bottomOptionBranch)
+#define CS_TEXT_TYPE_1(textId, startFrame, endFrame, topOptionBranch, bottomOptionBranch) \
+ CS_TEXT(textId, startFrame, endFrame, CS_TEXT_TYPE_1, topOptionBranch, bottomOptionBranch)
/**
* ARGS
- * s16 ocarinaSongAction (o), s16 startFrame (s), s16 endFrame (e), s16 messageId (i)
+ * s16 ocarinaSongAction (o), s16 startFrame (s), s16 endFrame (e), s16 textId (i)
* FORMAT
* oooossss eeee0002 iiiiFFFF
* size = 0xC
*/
-#define CS_TEXT_LEARN_SONG(ocarinaSongAction, startFrame, endFrame, messageId) \
- CS_TEXT_DISPLAY_TEXTBOX(ocarinaSongAction, startFrame, endFrame, CS_TEXTBOX_TYPE_LEARN_SONG, messageId, 0xFFFF)
+#define CS_TEXT_OCARINA_ACTION(ocarinaSongAction, startFrame, endFrame, textId) \
+ CS_TEXT(ocarinaSongAction, startFrame, endFrame, CS_TEXT_OCARINA_ACTION, textId, 0xFFFF)
/**
* ARGS
- * s16 messageId (i), s16 startFrame (s), s16 endFrame (e),
+ * s16 textId (i), s16 startFrame (s), s16 endFrame (e),
* s16 topOptionBranch (y), s16 bottomOptionBranch (n)
* FORMAT
* iiiissss eeee0003 yyyynnnn
* size = 0xC
*/
-#define CS_TEXT_TYPE_3(messageId, startFrame, endFrame, topOptionBranch, bottomOptionBranch) \
- CS_TEXT_DISPLAY_TEXTBOX(messageId, startFrame, endFrame, CS_TEXTBOX_TYPE_3, topOptionBranch, bottomOptionBranch)
+#define CS_TEXT_TYPE_3(textId, startFrame, endFrame, topOptionBranch, bottomOptionBranch) \
+ CS_TEXT(textId, startFrame, endFrame, CS_TEXT_TYPE_3, topOptionBranch, bottomOptionBranch)
/**
- * If Player has all 4 bosses' remains then alternativeMessageId is used, otherwise defaultMessageId is used
+ * If Player has all 4 bosses' remains then alternativeTextId is used, otherwise defaultTextId is used
* ARGS
- * s16 defaultMessageId (d), s16 startFrame (s), s16 endFrame (e), s16 alternativeMessageId (a)
+ * s16 defaultTextId (d), s16 startFrame (s), s16 endFrame (e), s16 alternativeTextId (a)
* FORMAT
* ddddssss eeee0004 aaaaFFFF
* size = 0xC
*/
-#define CS_TEXT_BOSSES_REMAINS(defaultMessageId, startFrame, endFrame, alternativeMessageId) \
- CS_TEXT_DISPLAY_TEXTBOX(defaultMessageId, startFrame, endFrame, CS_TEXTBOX_TYPE_BOSSES_REMAINS, alternativeMessageId, 0xFFFF)
+#define CS_TEXT_BOSSES_REMAINS(defaultTextId, startFrame, endFrame, alternativeTextId) \
+ CS_TEXT(defaultTextId, startFrame, endFrame, CS_TEXT_TYPE_BOSSES_REMAINS, alternativeTextId, 0xFFFF)
/**
- * If Player has every non-transformation mask then alternativeMessageId is used, otherwise defaultMessageId is used
+ * If Player has every non-transformation mask then alternativeTextId is used, otherwise defaultTextId is used
* ARGS
- * s16 defaultMessageId (d), s16 startFrame (s), s16 endFrame (e), s16 alternativeMessageId (a)
+ * s16 defaultTextId (d), s16 startFrame (s), s16 endFrame (e), s16 alternativeTextId (a)
* FORMAT
* ddddssss eeee0005 aaaaFFFF
* size = 0xC
*/
-#define CS_TEXT_ALL_NORMAL_MASKS(defaultMessageId, startFrame, endFrame, alternativeMessageId) \
- CS_TEXT_DISPLAY_TEXTBOX(defaultMessageId, startFrame, endFrame, CS_TEXTBOX_TYPE_ALL_NORMAL_MASKS, alternativeMessageId, 0xFFFF)
+#define CS_TEXT_ALL_NORMAL_MASKS(defaultTextId, startFrame, endFrame, alternativeTextId) \
+ CS_TEXT(defaultTextId, startFrame, endFrame, CS_TEXT_TYPE_ALL_NORMAL_MASKS, alternativeTextId, 0xFFFF)
/**
* ARGS
@@ -107,22 +113,57 @@
* size = 0xC
*/
#define CS_TEXT_NONE(startFrame, endFrame) \
- CS_TEXT_DISPLAY_TEXTBOX(0xFFFF, startFrame, endFrame, CS_TEXTBOX_TYPE_NONE, 0xFFFF, 0xFFFF)
+ CS_TEXT(0xFFFF, startFrame, endFrame, CS_TEXT_TYPE_NONE, 0xFFFF, 0xFFFF)
/**
* ARGS
- * s32 entries (e)
+ * s32 numBytes (b)
* FORMAT
- * 0000005A eeeeeeee
+ * 0000005A bbbbbbbb
* size = 0x8
*/
-#define CS_CAMERA_LIST(entries) { CS_CMD_CAMERA }, { CMD_W(entries) }
+#define CS_CAM_SPLINE_LIST(numBytes) { CS_CMD_CAMERA_SPLINE }, { CMD_W(numBytes) }
-// TODO: Camera command macros. Requieres func_80161998 being decomped
+/**
+ * ARGS
+ * s16 numEntries (e), s16 duration (d)
+ * FORMAT
+ * Capital U is Unused
+ * eeeeUUUU UUUUdddd
+ * size = 0x8
+ */
+#define CS_CAM_SPLINE(numEntries, unused0, unused1, duration) \
+ { CMD_HH(numEntries, unused0) }, { CMD_HH(unused1, duration) }
+
+/**
+ * ARGS
+ * u8 interpType (i), u8 weight (2), s16 duration (d), Vec3s pos (x/y/z), s16 relativeTo (r)
+ * FORMAT
+ * ii22dddd xxxxyyyy zzzzrrrr
+ * size = 0xC
+ */
+#define CS_CAM_POINT(interpType, weight, duration, posX, posY, posZ, relativeTo) \
+ { CMD_BBH(interpType, weight, duration) }, { CMD_HH(posX, posY) }, { CMD_HH(posZ, relativeTo) }
+
+/**
+ * ARGS
+ * s16 roll (r), s16 fov (f)
+ * FORMAT
+ * Capital U is Unused
+ * UUUUrrrr ffffUUUU
+ * size = 0x8
+ */
+#define CS_CAM_MISC(unused0, roll, fov, unused1) \
+ { CMD_HH(unused0, roll) }, { CMD_HH(fov, unused1) }
+
+// First half-word is read from as `numEntries` in `CS_CAM_SPLINE()`
+#define CS_CAM_END() { CMD_HH(0xFFFF, 4) }
/**
+ * Declares a list of `CS_MISC` entries.
+ *
* ARGS
* s32 entries (e)
* FORMAT
@@ -132,36 +173,46 @@
#define CS_MISC_LIST(entries) { CS_CMD_MISC }, { CMD_W(entries) }
/**
+ * Various miscellaneous commands.
+ * @see `CutsceneMiscType` enum for the different types of commands.
+ * @note setting `endFrame` to same value as `startFrame` will not behave as expected.
+ * For commands that only need to last one frame, set `endFrame` to `startFrame + 1`.
+ *
* ARGS
- * s16 unk (u), s16 startFrame (s), s16 endFrame (e)
+ * s16 type (t), s16 startFrame (s), s16 endFrame (e)
* FORMAT
* Capital U is Unused
- * uuuussss eeeeUUUU
- * size = 0x08
+ * ttttssss eeeeUUUU
+ * size = 0x8
*/
-#define CS_MISC(unk, startFrame, endFrame, unk_06) \
- { CMD_HH(unk, startFrame) }, { CMD_HH(endFrame, unk_06) }
+#define CS_MISC(type, startFrame, endFrame, unused0) \
+ { CMD_HH(type, startFrame) }, { CMD_HH(endFrame, unused0) }
/**
+ * Declares a list of `CS_LIGHT_SETTING` entries.
+ *
* ARGS
* s32 entries (e)
* FORMAT
* 00000097 eeeeeeee
* size = 0x8
*/
-#define CS_LIGHTING_LIST(entries) { CS_CMD_SET_LIGHTING }, { CMD_W(entries) }
+#define CS_LIGHT_SETTING_LIST(entries) { CS_CMD_LIGHT_SETTING }, { CMD_W(entries) }
/**
+ * Changes the environment lights to the specified setting.
+ * The lighting change will take place immediately with no blending.
+ *
* ARGS
- * s16 setting (m), s16 startFrame (s), s16 endFrame (e)
+ * s16 setting (t), s16 startFrame (s), s16 endFrame (e)
* FORMAT
* Capital U is Unused
- * mmmmssss eeeeUUUU
- * size = 0x08
+ * ttttssss eeeeUUUU
+ * size = 0x8
*/
-#define CS_LIGHTING(setting, startFrame, endFrame) \
- { CMD_HH(setting, startFrame) }, { CMD_HH(endFrame, endFrame) }
+#define CS_LIGHT_SETTING(lightSetting, startFrame, endFrame) \
+ { CMD_BBH(0, (lightSetting + 1), startFrame) }, { CMD_HH(endFrame, endFrame) }
/**
@@ -171,18 +222,18 @@
* 00000098 eeeeeeee
* size = 0x8
*/
-#define CS_SCENE_TRANS_FX_LIST(entries) { CS_CMD_SCENE_TRANS_FX }, { CMD_W(entries) }
+#define CS_TRANSITION_LIST(entries) { CS_CMD_TRANSITION }, { CMD_W(entries) }
/**
* ARGS
- * s16 transitionType (m), s16 startFrame (s), s16 endFrame (e)
+ * s16 type (t), s16 startFrame (s), s16 endFrame (e)
* FORMAT
* Capital U is Unused
- * mmmmssss eeeeUUUU
- * size = 0x08
+ * ttttssss eeeeUUUU
+ * size = 0x8
*/
-#define CS_SCENE_TRANS_FX(transitionType, startFrame, endFrame) \
- { CMD_HH(transitionType, startFrame) }, { CMD_HH(endFrame, endFrame) }
+#define CS_TRANSITION(type, startFrame, endFrame) \
+ { CMD_HH(type, startFrame) }, { CMD_HH(endFrame, endFrame) }
/**
@@ -190,20 +241,20 @@
* s32 entries (e)
* FORMAT
* 00000099 eeeeeeee
- * size = 0x08
+ * size = 0x8
*/
-#define CS_MOTIONBLUR_LIST(entries) { CS_CMD_MOTIONBLUR }, { CMD_W(entries) }
+#define CS_MOTION_BLUR_LIST(entries) { CS_CMD_MOTION_BLUR }, { CMD_W(entries) }
/**
* ARGS
- * s16 base (m), s16 startFrame (s), s16 endFrame (e)
+ * s16 type (t), s16 startFrame (s), s16 endFrame (e)
* FORMAT
* Capital U is Unused
- * mmmmssss eeeeUUUU
- * size = 0x08
+ * ttttssss eeeeUUUU
+ * size = 0x8
*/
-#define CS_MOTIONBLUR(base, startFrame, endFrame) \
- { CMD_HH(base, startFrame) }, { CMD_HH(endFrame, endFrame) }
+#define CS_MOTION_BLUR(type, startFrame, endFrame) \
+ { CMD_HH(type, startFrame) }, { CMD_HH(endFrame, endFrame) }
/**
@@ -213,18 +264,18 @@
* 0000009A eeeeeeee
* size = 0x8
*/
-#define CS_GIVETATL_LIST(entries) { CS_CMD_GIVETATL }, { CMD_W(entries) }
+#define CS_GIVE_TATL_LIST(entries) { CS_CMD_GIVE_TATL }, { CMD_W(entries) }
/**
* ARGS
- * s16 base (m), s16 startFrame (s), s16 endFrame (e)
+ * s16 giveTatl (t), s16 startFrame (s), s16 endFrame (e)
* FORMAT
* Capital U is Unused
- * mmmmssss eeeeUUUU
- * size = 0x08
+ * ttttssss eeeeUUUU
+ * size = 0x8
*/
-#define CS_GIVETATL(base, startFrame, endFrame) \
- { CMD_HH(base, startFrame) }, { CMD_HH(endFrame, endFrame) }
+#define CS_GIVE_TATL(giveTatl, startFrame, endFrame) \
+ { CMD_HH(giveTatl, startFrame) }, { CMD_HH(endFrame, endFrame) }
/**
@@ -234,75 +285,66 @@
* 0000009B eeeeeeee
* size = 0x8
*/
-#define CS_FADESCREEN_LIST(entries) { CS_CMD_FADESCREEN }, { CMD_W(entries) }
+#define CS_TRANSITION_GENERAL_LIST(entries) { CS_CMD_TRANSITION_GENERAL }, { CMD_W(entries) }
/**
* ARGS
- * s16 base (m), s16 startFrame (s), s16 endFrame (e),
+ * s16 type (t), s16 startFrame (s), s16 endFrame (e),
* u8 red (r), u8 green (g), blue (b)
* FORMAT
* Capital U is Unused
- * mmmmssss eeeerrgg bbUUUUUU
+ * ttttssss eeeerrgg bbUUUUUU
* size = 0x0C
*/
-#define CS_FADESCREEN(base, startFrame, endFrame, red, green, blue) \
- { CMD_HH(base, startFrame) }, { CMD_HBB(endFrame, red, green) }, { CMD_BBBB(blue, 0, 0, 0) }
-
-
-/**
- * ARGS
- * s32 entries (e)
- * FORMAT
- * 0000009C eeeeeeee
- * size = 0x8
- */
-#define CS_FADESEQ_LIST(entries) { CS_CMD_FADESEQ }, { CMD_W(entries) }
-
-/**
- * ARGS
- * s16 base (m), s16 startFrame (s), s16 endFrame (e)
- * FORMAT
- * Capital U is Unused
- * mmmmssss eeeeUUUU UUUUUUUU
- * size = 0x0C
- */
-#define CS_FADESEQ(base, startFrame, endFrame) \
- { CMD_HH(base, startFrame) }, { CMD_HH(endFrame, 0) }, { CMD_W(0) }
+#define CS_TRANSITION_GENERAL(type, startFrame, endFrame, red, green, blue) \
+ { CMD_HH(type, startFrame) }, { CMD_HBB(endFrame, red, green) }, { CMD_BBBB(blue, 0, 0, 0) }
/**
+ * Declares a list of `CS_TIME` entries.
+ *
* ARGS
* s32 entries (e)
* FORMAT
* 0000009D eeeeeeee
* size = 0x8
*/
-#define CS_TIME_LIST(entries) { CS_CMD_SETTIME }, { CMD_W(entries) }
+#define CS_TIME_LIST(entries) { CS_CMD_TIME }, { CMD_W(entries) }
/**
+ * Sets the time of day.
+ * Both the day time and skybox time are set by this command.
+ * @note `endFrame` is not used in the implementation of the command, so its value does not matter
+ *
* ARGS
- * s16 unk (u), s16 startFrame (s), s16 endFrame (e), s8 hour (h), s8 min (m)
+ * s16 startFrame (s), s16 endFrame (e), s8 hour (h), s8 min (m)
* FORMAT
* Capital U is Unused
- * uuuussss eeeehhmm UUUUUUUU
+ * UUUUssss eeeehhmm UUUUUUUU
* size = 0xC
*/
-#define CS_TIME(unk, startFrame, endFrame, hour, min, unused) \
- { CMD_HH(unk, startFrame) }, { CMD_HBB(endFrame, hour, min) }, { CMD_W(unused) }
+#define CS_TIME(unused0, startFrame, endFrame, hour, min) \
+ { CMD_HH(unused0, startFrame) }, { CMD_HBB(endFrame, hour, min) }, { CMD_W(0) }
/**
+ * Declares a list of `CS_ACTOR_CUE` entries.
+ *
* ARGS
* s32 cmdType (c), s32 entries (e)
* FORMAT
* cccccccc eeeeeeee
* size = 0x8
*/
-#define CS_ACTOR_ACTION_LIST(cmdType, entries) { CMD_W(cmdType) }, { CMD_W(entries) }
+#define CS_ACTOR_CUE_LIST(cmdType, entries) { CMD_W(cmdType) }, { CMD_W(entries) }
/**
+ * Defines a cue that an actor can listen for.
+ * The actor can choose whether or not to use the position and rotation data supplied to it.
+ * The cue `id` is a number that has an actor-specific meaning.
+ *
* ARGS
- * s16 npcAction (a), s16 startFrame (s), s16 endFrame (e),
+ * s16 id (a), s16 startFrame (s), s16 endFrame (e),
* s16 rotX (u), s16 rotY (v), s16 rotZ (w),
* s32 startX (i), s32 startY (j), s32 startZ (k),
* s32 endX (l), s32 endY (m), s32 endZ (n),
@@ -311,25 +353,29 @@
* aaaassss eeeeuuuu vvvvwwww iiiiiiii jjjjjjjj kkkkkkkk llllllll mmmmmmmm nnnnnnnn xxxxxxxx yyyyyyyy zzzzzzzz
* size = 0x30
*/
-#define CS_ACTOR_ACTION(npcAction, startFrame, endFrame, rotX, rotY, rotZ, startX, startY, startZ, endX, endY, endZ, normX, normY, normZ) \
- { CMD_HH(npcAction, startFrame) }, { CMD_HH(endFrame, rotX) }, { CMD_HH(rotY, rotZ) }, \
+#define CS_ACTOR_CUE(id, startFrame, endFrame, rotX, rotY, rotZ, startX, startY, startZ, endX, endY, endZ, normX, normY, normZ) \
+ { CMD_HH(id, startFrame) }, { CMD_HH(endFrame, rotX) }, { CMD_HH(rotY, rotZ) }, \
{ CMD_W(startX) }, { CMD_W(startY) }, { CMD_W(startZ) }, \
{ CMD_W(endX) }, { CMD_W(endY) }, { CMD_W(endZ) }, \
{ CMD_F(normX) }, { CMD_F(normY) }, { CMD_F(normZ) }
/**
+ * Declares a list of `CS_PLAYER_CUE` entries.
+ *
* ARGS
* s32 cmdType (c), s32 entries (e)
* FORMAT
* 000000C8 eeeeeeee
* size = 0x8
*/
-#define CS_PLAYER_ACTION_LIST(entries) { CS_CMD_SET_PLAYER_ACTION }, { CMD_W(entries) }
+#define CS_PLAYER_CUE_LIST(entries) { CS_CMD_PLAYER_CUE }, { CMD_W(entries) }
/**
+ * A player cue is the same as `CS_ACTOR_CUE` but is specifically for player.
+ *
* ARGS
- * s16 playerAction (a), s16 startFrame (s), s16 endFrame (e),
+ * s16 id (a), s16 startFrame (s), s16 endFrame (e),
* s16 rotX (u), s16 rotY (v), s16 rotZ (w),
* s32 startX (i), s32 startY (j), s32 startZ (k),
* s32 endX (l), s32 endY (m), s32 endZ (n),
@@ -338,113 +384,87 @@
* aaaassss eeeeuuuu vvvvwwww iiiiiiii jjjjjjjj kkkkkkkk llllllll mmmmmmmm nnnnnnnn xxxxxxxx yyyyyyyy zzzzzzzz
* size = 0x30
*/
-#define CS_PLAYER_ACTION(playerAction, startFrame, endFrame, rotX, rotY, rotZ, startX, startY, startZ, endX, endY, endZ, normX, normY, normZ) \
- CS_ACTOR_ACTION(playerAction, startFrame, endFrame, rotX, rotY, rotZ, startX, startY, startZ, endX, endY, endZ, normX, normY, normZ)
+#define CS_PLAYER_CUE(id, startFrame, endFrame, rotX, rotY, rotZ, startX, startY, startZ, endX, endY, endZ, normX, normY, normZ) \
+ CS_ACTOR_CUE(id, startFrame, endFrame, rotX, rotY, rotZ, startX, startY, startZ, endX, endY, endZ, normX, normY, normZ)
/**
+ * Declares a list of `CS_START_SEQ` entries.
+ *
* ARGS
* s32 entries (e)
* FORMAT
* 0000012C eeeeeeee
* size = 0x8
*/
-#define CS_PLAYSEQ_LIST(entries) { CS_CMD_PLAYSEQ }, { CMD_W(entries) }
+#define CS_START_SEQ_LIST(entries) \
+ { CS_CMD_START_SEQ }, { CMD_W(entries) }
/**
+ * Starts a sequence at the specified time.
+ * @note `endFrame` is not used in the implementation of the command, so its value does not matter
+ *
* ARGS
- * s16 base (m), s16 startFrame (s), s16 endFrame (e)
+ * s16 seqId (i), s16 startFrame (s), s16 endFrame (e)
* FORMAT
* Capital U is Unused
- * mmmmssss eeeeUUUU
- * size = 0x08
- */
-#define CS_PLAYSEQ(sequence, startFrame, endFrame) \
- { CMD_HH(sequence, startFrame) }, { CMD_HH(endFrame, endFrame) }
-
-
-/**
- * ARGS
- * s32 entries (e)
- * FORMAT
- * 00000130 eeeeeeee
+ * iiiissss eeeeUUUU
* size = 0x8
*/
-#define CS_SCENE_UNK_130_LIST(entries) { CS_CMD_130 }, { CMD_W(entries) }
-
-/**
- * ARGS
- * s16 base (m), s16 startFrame (s), s16 endFrame (e)
- * FORMAT
- * Capital U is Unused
- * mmmmssss eeeeUUUU
- * size = 0x30
- */
-#define CS_SCENE_UNK_130(base, startFrame, endFrame, unk_06) \
- { CMD_HH(base, startFrame) }, { CMD_HH(endFrame, unk_06) }
-
-
-/**
- * ARGS
- * s32 entries (e)
- * FORMAT
- * 00000131 eeeeeeee
- * size = 0x8
- */
-#define CS_SCENE_UNK_131_LIST(entries) { CS_CMD_131 }, { CMD_W(entries) }
-
-/**
- * ARGS
- * s16 base (m), s16 startFrame (s), s16 endFrame (e)
- * FORMAT
- * Capital U is Unused
- * mmmmssss eeeeUUUU
- * size = 0x08
- */
-#define CS_SCENE_UNK_131(base, startFrame, endFrame, unk_06) \
- { CMD_HH(base, startFrame) }, { CMD_HH(endFrame, unk_06) }
-
-
-/**
- * ARGS
- * s32 entries (e)
- * FORMAT
- * 00000132 eeeeeeee
- * size = 0x8
- */
-#define CS_SCENE_UNK_132_LIST(entries) { CS_CMD_132 }, { CMD_W(entries) }
-
-/**
- * ARGS
- * s16 base (m), s16 startFrame (s), s16 endFrame (e)
- * FORMAT
- * Capital U is Unused
- * mmmmssss eeeeUUUU
- * size = 0x08
- */
-#define CS_SCENE_UNK_132(base, startFrame, endFrame) \
- { CMD_HH(base, startFrame) }, { CMD_HH(endFrame, endFrame) }
+#define CS_START_SEQ(seqId, startFrame, endFrame) \
+ { CMD_HH((seqId + 1), startFrame) }, { CMD_HH(endFrame, endFrame) }
/**
+ * Declares a list of `CS_STOP_SEQ` entries.
+ *
* ARGS
* s32 entries (e)
* FORMAT
* 00000133 eeeeeeee
* size = 0x8
*/
-#define CS_STOPSEQ_LIST(entries) { CS_CMD_STOPSEQ }, { CMD_W(entries) }
+#define CS_STOP_SEQ_LIST(entries) { CS_CMD_STOP_SEQ }, { CMD_W(entries) }
/**
+ * Stops a sequence at the specified time.
+ *
* ARGS
- * s16 base (m), s16 startFrame (s), s16 endFrame (e)
+ * s16 seqId (i), s16 startFrame (s), s16 endFrame (e)
* FORMAT
* Capital U is Unused
- * mmmmssss eeeeUUUU
- * size = 0x08
+ * iiiissss eeeeUUUU
+ * size = 0x8
*/
-#define CS_STOPSEQ(base, startFrame, endFrame, unk_06) \
- { CMD_HH(base, startFrame) }, { CMD_HH(endFrame, unk_06) }
+#define CS_STOP_SEQ(seqId, startFrame, endFrame, unk_06) \
+ { CMD_HH((seqId + 1), startFrame) }, { CMD_HH(endFrame, unk_06) }
+
+
+/**
+ * Stops a sequence at the specified time.
+ * @note `endFrame` is not used in the implementation of the command, so its value does not matter
+ *
+ * ARGS
+ * s32 entries (e)
+ * FORMAT
+ * 0000009C eeeeeeee
+ * size = 0x8
+ */
+#define CS_FADE_OUT_SEQ_LIST(entries) { CS_CMD_FADE_OUT_SEQ }, { CMD_W(entries) }
+
+/**
+ * Fade out the sequence that is playing on the specified sequence player, over the specified frame range.
+ * @see `CutsceneFadeOutSeqPlayer`
+ *
+ * ARGS
+ * s16 seqPlayer (p), s16 startFrame (s), s16 endFrame (e)
+ * FORMAT
+ * Capital U is Unused
+ * ppppssss eeeeUUUU UUUUUUUU
+ * size = 0x0C
+ */
+#define CS_FADE_OUT_SEQ(seqPlayer, startFrame, endFrame) \
+ { CMD_HH(seqPlayer, startFrame) }, { CMD_HH(endFrame, 0) }, { CMD_W(0) }
/**
@@ -454,18 +474,18 @@
* 00000134 eeeeeeee
* size = 0x8
*/
-#define CS_PLAYAMBIENCE_LIST(entries) { CS_CMD_PLAYAMBIENCE }, { CMD_W(entries) }
+#define CS_START_AMBIENCE_LIST(entries) { CS_CMD_START_AMBIENCE }, { CMD_W(entries) }
/**
* ARGS
- * s16 base (m), s16 startFrame (s), s16 endFrame (e)
+ * s16 startFrame (s), s16 endFrame (e)
* FORMAT
* Capital U is Unused
- * mmmmssss eeeeUUUU
- * size = 0x08
+ * UUUUssss eeeeUUUU
+ * size = 0x8
*/
-#define CS_PLAYAMBIENCE(base, startFrame, endFrame, unk_06) \
- { CMD_HH(base, startFrame) }, { CMD_HH(endFrame, unk_06) }
+#define CS_START_AMBIENCE(unused0, startFrame, endFrame) \
+ { CMD_HH(unused0, startFrame) }, { CMD_HH(endFrame, 0) }
/**
@@ -475,39 +495,106 @@
* 00000135 eeeeeeee
* size = 0x8
*/
-#define CS_FADEAMBIENCE_LIST(entries) { CS_CMD_FADEAMBIENCE }, { CMD_W(entries) }
+#define CS_FADE_OUT_AMBIENCE_LIST(entries) { CS_CMD_FADE_OUT_AMBIENCE }, { CMD_W(entries) }
/**
* ARGS
- * s16 base (m), s16 startFrame (s), s16 endFrame (e)
+ * s16 startFrame (s), s16 endFrame (e)
* FORMAT
* Capital U is Unused
- * mmmmssss eeeeUUUU
- * size = 0x08
+ * UUUUssss eeeeUUUU
+ * size = 0x8
*/
-#define CS_FADEAMBIENCE(base, startFrame, endFrame, unk_06) \
- { CMD_HH(base, startFrame) }, { CMD_HH(endFrame, unk_06) }
+#define CS_FADE_OUT_AMBIENCE(unused0, startFrame, endFrame) \
+ { CMD_HH(unused0, startFrame) }, { CMD_HH(endFrame, 0) }
/**
* ARGS
* s32 entries (e)
* FORMAT
- * 0000015E eeeeeeee
+ * 00000132 eeeeeeee
* size = 0x8
*/
-#define CS_TERMINATOR_LIST(entries) { CS_CMD_TERMINATOR }, { CMD_W(entries) }
+#define CS_MODIFY_SEQ_LIST(entries) { CS_CMD_MODIFY_SEQ }, { CMD_W(entries) }
/**
* ARGS
- * s16 base (m), s16 startFrame (s), s16 endFrame (e)
+ * s16 type (t), s16 startFrame (s), s16 endFrame (e)
* FORMAT
* Capital U is Unused
- * mmmmssss eeeeUUUU
- * size = 0x08
+ * ttttssss eeeeUUUU
+ * size = 0x8
*/
-#define CS_TERMINATOR(base, startFrame, endFrame) \
- { CMD_HH(base, startFrame) }, { CMD_HH(endFrame, endFrame) }
+#define CS_MODIFY_SEQ(type, startFrame, endFrame) \
+ { CMD_HH(type, startFrame) }, { CMD_HH(endFrame, endFrame) }
+
+
+/**
+ * ARGS
+ * s32 entries (e)
+ * FORMAT
+ * 00000130 eeeeeeee
+ * size = 0x8
+ */
+#define CS_SFX_REVERB_INDEX_2_LIST(entries) { CS_CMD_SFX_REVERB_INDEX_2 }, { CMD_W(entries) }
+
+/**
+ * ARGS
+ * s16 startFrame (s), s16 endFrame (e)
+ * FORMAT
+ * Capital U is Unused
+ * UUUUssss eeeeUUUU
+ * size = 0x30
+ */
+#define CS_SFX_REVERB_INDEX_2(unused0, startFrame, endFrame) \
+ { CMD_HH(unused0, startFrame) }, { CMD_HH(endFrame, 0) }
+
+
+/**
+ * ARGS
+ * s32 entries (e)
+ * FORMAT
+ * 00000131 eeeeeeee
+ * size = 0x8
+ */
+#define CS_SFX_REVERB_INDEX_1_LIST(entries) { CS_CMD_SFX_REVERB_INDEX_1 }, { CMD_W(entries) }
+
+/**
+ * ARGS
+ * s16 startFrame (s), s16 endFrame (e)
+ * FORMAT
+ * Capital U is Unused
+ * UUUUssss eeeeUUUU
+ * size = 0x8
+ */
+#define CS_SFX_REVERB_INDEX_1(unused0, startFrame, endFrame) \
+ { CMD_HH(unused0, startFrame) }, { CMD_HH(endFrame, 0) }
+
+
+/**
+ * Declares a list of `CS_DESTINATION` entries.
+ *
+ * ARGS
+ * s32 entries (e)
+ * FORMAT
+ * 0000015E eeeeeeee
+ * size = 0x8
+ */
+#define CS_DESTINATION_LIST(entries) { CS_CMD_DESTINATION }, { CMD_W(entries) }
+
+/**
+ * Sends the player to a new destination using the entry defined in `CutsceneScriptEntry`.
+ *
+ * ARGS
+ * s16 type (t), s16 startFrame (s), s16 endFrame (e)
+ * FORMAT
+ * Capital U is Unused
+ * ttttssss eeeeUUUU
+ * size = 0x8
+ */
+#define CS_DESTINATION(type, startFrame, endFrame) \
+ { CMD_HH(type, startFrame) }, { CMD_HH(endFrame, endFrame) }
/**
@@ -521,14 +608,14 @@
/**
* ARGS
- * s16 base (m), s16 startFrame (s), s16 endFrame (e)
+ * s16 type (t), s16 startFrame (s), s16 endFrame (e)
* FORMAT
* Capital U is Unused
- * mmmmssss eeeeUUUU
- * size = 0x08
+ * ttttssss eeeeUUUU
+ * size = 0x8
*/
-#define CS_CHOOSE_CREDITS_SCENES(base, startFrame, endFrame) \
- { CMD_HH(base, startFrame) }, { CMD_HH(endFrame, endFrame) }
+#define CS_CHOOSE_CREDITS_SCENES(type, startFrame, endFrame) \
+ { CMD_HH(type, startFrame) }, { CMD_HH(endFrame, endFrame) }
/**
@@ -542,14 +629,14 @@
/**
* ARGS
- * s16 base (m), s16 startFrame (s), s16 endFrame (e)
+ * s16 type (t), s16 startFrame (s), s16 endFrame (e)
* FORMAT
* Capital U is Unused
- * mmmmssss eeeeUUUU
- * size = 0x08
+ * ttttssss eeeeUUUU
+ * size = 0x8
*/
-#define CS_RUMBLE(base, startFrame, endFrame, intensity, decayTimer, decayStep) \
- { CMD_HH(base, startFrame) }, { CMD_HBB(endFrame, intensity, decayTimer) }, { CMD_BBBB(decayStep, 0, 0, 0) }
+#define CS_RUMBLE(type, startFrame, endFrame, intensity, decayTimer, decayStep) \
+ { CMD_HH(type, startFrame) }, { CMD_HBB(endFrame, intensity, decayTimer) }, { CMD_BBBB(decayStep, 0, 0, 0) }
/**
@@ -563,14 +650,14 @@
/**
* ARGS
- * s16 base (m), s16 startFrame (s), s16 endFrame (e)
+ * s16 startFrame (s), s16 endFrame (e)
* FORMAT
* Capital U is Unused
- * mmmmssss eeeeUUUU
- * size = 0x08
+ * UUUUssss eeeeUUUU
+ * size = 0x8
*/
-#define CS_UNK_DATA(base, startFrame, endFrame, unk_06) \
- { CMD_HH(base, startFrame) }, { CMD_HH(endFrame, unk_06) }
+#define CS_UNK_DATA(unused0, startFrame, endFrame, unk_06) \
+ { CMD_HH(unused0, startFrame) }, { CMD_HH(endFrame, unk_06) }
/**
@@ -578,4 +665,47 @@
*/
#define CS_END() { CMD_W(0xFFFFFFFF) }
+// TODO: Fix ZAPD and delete these
+#define CS_ACTOR_ACTION_LIST CS_ACTOR_CUE_LIST
+#define CS_ACTOR_ACTION CS_ACTOR_CUE
+#define CS_PLAYER_ACTION_LIST CS_PLAYER_CUE_LIST
+#define CS_PLAYER_ACTION CS_PLAYER_CUE
+#define CS_LIGHTING_LIST CS_LIGHT_SETTING_LIST
+#define CS_CAMERA_LIST CS_CAM_SPLINE_LIST
+#define CS_TEXT_DISPLAY_TEXTBOX CS_TEXT
+#define CS_TEXT_LEARN_SONG CS_TEXT_OCARINA_ACTION
+#define CS_SCENE_TRANS_FX_LIST CS_TRANSITION_LIST
+#define CS_SCENE_TRANS_FX CS_TRANSITION
+#define CS_GIVETATL_LIST CS_GIVE_TATL_LIST
+#define CS_GIVETATL CS_GIVE_TATL
+#define CS_PLAYSEQ_LIST CS_START_SEQ_LIST
+#define CS_STOPSEQ_LIST CS_STOP_SEQ_LIST
+#define CS_FADESEQ_LIST CS_FADE_OUT_SEQ_LIST
+#define CS_FADESEQ CS_FADE_OUT_SEQ
+#define CS_PLAYAMBIENCE_LIST CS_START_AMBIENCE_LIST
+#define CS_PLAYAMBIENCE CS_START_AMBIENCE
+#define CS_FADEAMBIENCE_LIST CS_FADE_OUT_AMBIENCE_LIST
+#define CS_FADEAMBIENCE CS_FADE_OUT_AMBIENCE
+#define CS_SCENE_UNK_130_LIST CS_SFX_REVERB_INDEX_2_LIST
+#define CS_SCENE_UNK_130 CS_SFX_REVERB_INDEX_2
+#define CS_SCENE_UNK_131_LIST CS_SFX_REVERB_INDEX_1_LIST
+#define CS_SCENE_UNK_131 CS_SFX_REVERB_INDEX_1
+#define CS_SCENE_UNK_132_LIST CS_MODIFY_SEQ_LIST
+#define CS_SCENE_UNK_132 CS_MODIFY_SEQ
+#define CS_MOTIONBLUR_LIST CS_MOTION_BLUR_LIST
+#define CS_MOTIONBLUR CS_MOTION_BLUR
+#define CS_FADESCREEN_LIST CS_TRANSITION_GENERAL_LIST
+#define CS_FADESCREEN CS_TRANSITION_GENERAL
+#define CS_TERMINATOR_LIST CS_DESTINATION_LIST
+#define CS_TERMINATOR CS_DESTINATION
+
+#define CS_PLAYSEQ(seqId, startFrame, endFrame) \
+CS_START_SEQ((seqId)-1, startFrame, endFrame)
+
+#define CS_STOPSEQ(seqId, startFrame, endFrame, unk_06) \
+CS_STOP_SEQ((seqId)-1, startFrame, endFrame, unk_06)
+
+#define CS_LIGHTING(lightSetting, startFrame, endFrame) \
+CS_LIGHT_SETTING((lightSetting)-1, startFrame, endFrame)
+
#endif
diff --git a/include/z64debug_display.h b/include/z64debug_display.h
new file mode 100644
index 000000000..885a3839c
--- /dev/null
+++ b/include/z64debug_display.h
@@ -0,0 +1,25 @@
+#ifndef Z64DEBUG_DISPLAY_H
+#define Z64DEBUG_DISPLAY_H
+
+#include "color.h"
+#include "ultra64.h"
+#include "z64math.h"
+
+struct GraphicsContext;
+struct PlayState;
+
+typedef struct DebugDispObject {
+ /* 0x00 */ Vec3f pos;
+ /* 0x0C */ Vec3s rot;
+ /* 0x14 */ Vec3f scale;
+ /* 0x20 */ Color_RGBA8 color;
+ /* 0x24 */ s16 type;
+ /* 0x28 */ struct DebugDispObject* next;
+ /* 0x2C */ s32 pad; // Padding is not in the OoT version
+} DebugDispObject; // size = 0x30
+
+DebugDispObject* DebugDisplay_Init(void);
+void DebugDisplay_DrawObjects(struct PlayState* play);
+DebugDispObject* DebugDisplay_AddObject(f32 posX, f32 posY, f32 posZ, s16 rotX, s16 rotY, s16 rotZ, f32 scaleX, f32 scaleY, f32 scaleZ, u8 red, u8 green, u8 blue, u8 alpha, s16 type, struct GraphicsContext* gfxCtx);
+
+#endif
diff --git a/include/z64debug_text.h b/include/z64debug_text.h
new file mode 100644
index 000000000..65595f99e
--- /dev/null
+++ b/include/z64debug_text.h
@@ -0,0 +1,36 @@
+#ifndef Z64DEBUG_TEXT_H
+#define Z64DEBUG_TEXT_H
+
+#include "ultra64.h"
+
+struct GraphicsContext;
+
+typedef enum {
+ /* 0 */ DEBUG_TEXT_BLACK,
+ /* 1 */ DEBUG_TEXT_BLUE,
+ /* 2 */ DEBUG_TEXT_RED,
+ /* 3 */ DEBUG_TEXT_PURPLE,
+ /* 4 */ DEBUG_TEXT_GREEN,
+ /* 5 */ DEBUG_TEXT_CYAN,
+ /* 6 */ DEBUG_TEXT_YELLOW,
+ /* 7 */ DEBUG_TEXT_WHITE
+} DebugTextColor;
+
+typedef enum {
+ /* 0 */ DEBUG_CAM_TEXT_YELLOW,
+ /* 1 */ DEBUG_CAM_TEXT_PEACH,
+ /* 2 */ DEBUG_CAM_TEXT_BROWN,
+ /* 3 */ DEBUG_CAM_TEXT_ORANGE,
+ /* 4 */ DEBUG_CAM_TEXT_GOLD,
+ /* 5 */ DEBUG_CAM_TEXT_WHITE,
+ /* 6 */ DEBUG_CAM_TEXT_BLUE,
+ /* 7 */ DEBUG_CAM_TEXT_GREEN
+} DebugCamTextColor;
+
+void Debug_ClearTextDrawFlags(void);
+void Debug_ScreenText(s32 index, s32 colorIndex, const char* text);
+void DebugCamera_ScreenText(u8 x, u8 y, u8 colorIndex, const char* text);
+void Debug_DrawText(struct GraphicsContext* gfxCtx);
+
+
+#endif
diff --git a/include/z64dma.h b/include/z64dma.h
index 92c0227f3..964be9c59 100644
--- a/include/z64dma.h
+++ b/include/z64dma.h
@@ -1,5 +1,5 @@
-#ifndef _Z64_DMA_H_
-#define _Z64_DMA_H_
+#ifndef Z64DMA_H
+#define Z64DMA_H
#include "ultra64.h"
diff --git a/include/z64eff_footmark.h b/include/z64eff_footmark.h
new file mode 100644
index 000000000..6d5fe3026
--- /dev/null
+++ b/include/z64eff_footmark.h
@@ -0,0 +1,33 @@
+#ifndef Z64EFF_FOOTMARK_H
+#define Z64EFF_FOOTMARK_H
+
+#include "ultra64.h"
+#include "z64math.h"
+
+struct PlayState;
+struct Actor;
+
+typedef struct EffFootmark {
+ /* 0x00 */ MtxF mf;
+ /* 0x40 */ struct Actor* actor;
+ /* 0x44 */ Vec3f pos;
+ /* 0x50 */ u8 flags; // bit 0 - footmark fades out
+ /* 0x51 */ u8 id;
+ /* 0x52 */ u8 red;
+ /* 0x53 */ u8 blue;
+ /* 0x54 */ u8 green;
+ /* 0x56 */ u16 alpha;
+ /* 0x58 */ u16 alphaChange;
+ /* 0x5A */ u16 size;
+ /* 0x5C */ u16 fadeOutDelay;
+ /* 0x5E */ u16 age;
+} EffFootmark; // size = 0x60
+
+#define FOOTMARK_FLAG_1 (1 << 0)
+
+void EffFootmark_Init(struct PlayState* play);
+void EffFootmark_Add(struct PlayState* play, MtxF* mf, struct Actor* actor, u8 id, Vec3f* pos, u16 size, u8 red, u8 green, u8 blue, u16 alpha, u16 alphaChange, u16 fadeOutDelay);
+void EffFootmark_Update(struct PlayState* play);
+void EffFootmark_Draw(struct PlayState* play);
+
+#endif
diff --git a/include/z64effect.h b/include/z64effect.h
index 727bf04d2..d6ab8b3b5 100644
--- a/include/z64effect.h
+++ b/include/z64effect.h
@@ -1,7 +1,8 @@
-#ifndef _Z64EFFECT_H_
-#define _Z64EFFECT_H_
+#ifndef Z64EFFECT_H
+#define Z64EFFECT_H
#include "PR/ultratypes.h"
+#include "libc/stdint.h"
#include "color.h"
#include "z64light.h"
#include "z64math.h"
@@ -9,6 +10,8 @@
struct GraphicsContext;
struct PlayState;
+struct Actor;
+struct CollisionPoly;
#define SPARK_COUNT 3
#define BLURE_COUNT 25
@@ -181,7 +184,7 @@ typedef struct {
/* 0x08 */ Vec3s p2;
/* 0x0E */ s16 life;
/* 0x10 */ UNK_TYPE1 pad10[0x4];
- /* 0x14 */ CollisionPoly* colPoly;
+ /* 0x14 */ struct CollisionPoly* colPoly;
} EffectTireMarkElement; // size = 0x18
typedef struct {
@@ -265,7 +268,7 @@ typedef struct EffectSs {
/* 0x28 */ EffectSsDrawFunc draw;
/* 0x2C */ Vec3f vec;
/* 0x38 */ void* gfx;
- /* 0x3C */ Actor* actor;
+ /* 0x3C */ struct Actor* actor;
/* 0x40 */ s16 regs[13]; // These are particle-specific
/* 0x5A */ u16 flags; // bit 0: set if this entry is not considered free on a priority tie bit 1: ? bit 2: ?
/* 0x5C */ s16 life; // -1 means this entry is free
@@ -279,47 +282,15 @@ typedef struct {
/* 0x8 */ s32 size;
} EffectSsInfo; // size = 0xC
-typedef enum {
- /* 0x00 */ EFFECT_SS_DUST,
- /* 0x01 */ EFFECT_SS_KIRAKIRA,
- /* 0x02 */ EFFECT_SS_UNSET_02, // Deleted
- /* 0x03 */ EFFECT_SS_BOMB2,
- /* 0x04 */ EFFECT_SS_BLAST,
- /* 0x05 */ EFFECT_SS_G_SPK,
- /* 0x06 */ EFFECT_SS_D_FIRE,
- /* 0x07 */ EFFECT_SS_BUBBLE,
- /* 0x08 */ EFFECT_SS_UNSET_08, // Deleted
- /* 0x09 */ EFFECT_SS_G_RIPPLE,
- /* 0x0A */ EFFECT_SS_G_SPLASH,
- /* 0x0B */ EFFECT_SS_UNSET_0B,
- /* 0x0C */ EFFECT_SS_G_FIRE,
- /* 0x0D */ EFFECT_SS_LIGHTNING,
- /* 0x0E */ EFFECT_SS_DT_BUBBLE,
- /* 0x0F */ EFFECT_SS_HAHEN,
- /* 0x10 */ EFFECT_SS_STICK,
- /* 0x11 */ EFFECT_SS_SIBUKI,
- /* 0x12 */ EFFECT_SS_UNSET_12, // Deleted
- /* 0x13 */ EFFECT_SS_UNSET_13, // Deleted
- /* 0x14 */ EFFECT_SS_STONE1,
- /* 0x15 */ EFFECT_SS_HITMARK,
- /* 0x16 */ EFFECT_SS_FHG_FLASH,
- /* 0x17 */ EFFECT_SS_K_FIRE,
- /* 0x18 */ EFFECT_SS_SOLDER_SRCH_BALL,
- /* 0x19 */ EFFECT_SS_KAKERA,
- /* 0x1A */ EFFECT_SS_ICE_PIECE,
- /* 0x1B */ EFFECT_SS_EN_ICE,
- /* 0x1C */ EFFECT_SS_FIRE_TAIL,
- /* 0x1D */ EFFECT_SS_EN_FIRE,
- /* 0x1E */ EFFECT_SS_EXTRA,
- /* 0x1F */ EFFECT_SS_UNSET_1F, // Deleted
- /* 0x20 */ EFFECT_SS_DEAD_DB,
- /* 0x21 */ EFFECT_SS_DEAD_DD,
- /* 0x22 */ EFFECT_SS_DEAD_DS,
- /* 0x23 */ EFFECT_SS_UNSET_23, // Deleted
- /* 0x24 */ EFFECT_SS_ICE_SMOKE,
- /* 0x25 */ EFFECT_EN_ICE_BLOCK,
- /* 0x26 */ EFFECT_SS_SBN,
+#define DEFINE_EFFECT_SS(_name, enumValue) enumValue,
+#define DEFINE_EFFECT_SS_UNSET(enumValue) enumValue,
+
+typedef enum EffectSsType {
+ #include "tables/effect_ss_table.h"
/* 0x27 */ EFFECT_SS_MAX
} EffectSsType;
+#undef DEFINE_EFFECT_SS
+#undef DEFINE_EFFECT_SS_UNSET
+
#endif
diff --git a/include/z64frameadvance.h b/include/z64frameadvance.h
new file mode 100644
index 000000000..c0feaed59
--- /dev/null
+++ b/include/z64frameadvance.h
@@ -0,0 +1,16 @@
+#ifndef Z64FRAMEADVANCE_H
+#define Z64FRAMEADVANCE_H
+
+#include "ultra64.h"
+#include "io/controller.h"
+
+typedef struct FrameAdvanceContext {
+ /* 0x0 */ s32 enabled;
+ /* 0x4 */ s32 timer;
+} FrameAdvanceContext; // size = 0x8
+
+
+void FrameAdvance_Init(FrameAdvanceContext* frameAdvCtx);
+s32 FrameAdvance_Update(FrameAdvanceContext* frameAdvCtx, Input* input);
+
+#endif
diff --git a/include/z64game_over.h b/include/z64game_over.h
new file mode 100644
index 000000000..240efdf41
--- /dev/null
+++ b/include/z64game_over.h
@@ -0,0 +1,30 @@
+#ifndef Z64GAME_OVER_H
+#define Z64GAME_OVER_H
+
+#include "ultra64.h"
+
+struct PlayState;
+
+
+typedef enum GameOverState {
+ /* 0 */ GAMEOVER_INACTIVE,
+ /* 1 */ GAMEOVER_DEATH_START,
+ /* 2 */ GAMEOVER_DEATH_WAIT_GROUND, // wait for player to fall and hit the ground
+ /* 3 */ GAMEOVER_DEATH_FADE_OUT, // wait before fading out
+ /* 20 */ GAMEOVER_REVIVE_START = 20,
+ /* 21 */ GAMEOVER_REVIVE_RUMBLE,
+ /* 22 */ GAMEOVER_REVIVE_WAIT_GROUND, // wait for player to fall and hit the ground
+ /* 23 */ GAMEOVER_REVIVE_WAIT_FAIRY, // wait for the fairy to rise all the way up out of player's body
+ /* 24 */ GAMEOVER_REVIVE_FADE_OUT // fade out the game over lights as player is revived and gets back up
+} GameOverState;
+
+typedef struct GameOverContext {
+ /* 0x0 */ u16 state;
+} GameOverContext; // size = 0x2
+
+
+void GameOver_Init(struct PlayState* play);
+void GameOver_FadeLights(struct PlayState* play);
+void GameOver_Update(struct PlayState* play);
+
+#endif
diff --git a/include/z64interface.h b/include/z64interface.h
new file mode 100644
index 000000000..e01baa425
--- /dev/null
+++ b/include/z64interface.h
@@ -0,0 +1,216 @@
+#ifndef Z64INTERFACE_H
+#define Z64INTERFACE_H
+
+#include "ultra64.h"
+#include "z64view.h"
+
+typedef enum {
+ /* 0 */ A_BTN_STATE_0,
+ /* 1 */ A_BTN_STATE_1,
+ /* 2 */ A_BTN_STATE_2,
+ /* 3 */ A_BTN_STATE_3,
+ /* 4 */ A_BTN_STATE_4
+} AButtonState;
+
+typedef enum {
+ /* 0x00 */ DO_ACTION_ATTACK,
+ /* 0x01 */ DO_ACTION_CHECK,
+ /* 0x02 */ DO_ACTION_ENTER,
+ /* 0x03 */ DO_ACTION_RETURN,
+ /* 0x04 */ DO_ACTION_OPEN,
+ /* 0x05 */ DO_ACTION_JUMP,
+ /* 0x06 */ DO_ACTION_DECIDE,
+ /* 0x07 */ DO_ACTION_DIVE,
+ /* 0x08 */ DO_ACTION_FASTER,
+ /* 0x09 */ DO_ACTION_THROW,
+ /* 0x0A */ DO_ACTION_NONE, // in do_action_static, the texture at this position is NAVI, however this value is in practice the "No Action" value
+ /* 0x0B */ DO_ACTION_CLIMB,
+ /* 0x0C */ DO_ACTION_DROP,
+ /* 0x0D */ DO_ACTION_DOWN,
+ /* 0x0E */ DO_ACTION_QUIT,
+ /* 0x0F */ DO_ACTION_SPEAK,
+ /* 0x10 */ DO_ACTION_NEXT,
+ /* 0x11 */ DO_ACTION_GRAB,
+ /* 0x12 */ DO_ACTION_STOP,
+ /* 0x13 */ DO_ACTION_PUTAWAY,
+ /* 0x14 */ DO_ACTION_REEL,
+ /* 0x15 */ DO_ACTION_INFO,
+ /* 0x16 */ DO_ACTION_WARP,
+ /* 0x17 */ DO_ACTION_SNAP,
+ /* 0x18 */ DO_ACTION_EXPLODE,
+ /* 0x19 */ DO_ACTION_DANCE,
+ /* 0x1A */ DO_ACTION_MARCH,
+ /* 0x1B */ DO_ACTION_1,
+ /* 0x1C */ DO_ACTION_2,
+ /* 0x1D */ DO_ACTION_3,
+ /* 0x1E */ DO_ACTION_4,
+ /* 0x1F */ DO_ACTION_5,
+ /* 0x20 */ DO_ACTION_6,
+ /* 0x21 */ DO_ACTION_7,
+ /* 0x22 */ DO_ACTION_8,
+ /* 0x23 */ DO_ACTION_CURL,
+ /* 0x24 */ DO_ACTION_SURFACE,
+ /* 0x25 */ DO_ACTION_SWIM,
+ /* 0x26 */ DO_ACTION_PUNCH,
+ /* 0x27 */ DO_ACTION_POUND,
+ /* 0x28 */ DO_ACTION_HOOK,
+ /* 0x29 */ DO_ACTION_SHOOT,
+ /* 0x2A */ DO_ACTION_MAX
+} DoAction;
+
+typedef enum {
+ /* 0 */ MINIGAME_STATE_NONE,
+ /* 1 */ MINIGAME_STATE_COUNTDOWN_SETUP_3,
+ /* 2 */ MINIGAME_STATE_COUNTDOWN_3,
+ /* 3 */ MINIGAME_STATE_COUNTDOWN_SETUP_2,
+ /* 4 */ MINIGAME_STATE_COUNTDOWN_2,
+ /* 5 */ MINIGAME_STATE_COUNTDOWN_SETUP_1,
+ /* 6 */ MINIGAME_STATE_COUNTDOWN_1,
+ /* 7 */ MINIGAME_STATE_COUNTDOWN_SETUP_GO,
+ /* 8 */ MINIGAME_STATE_COUNTDOWN_GO,
+ /* 20 */ MINIGAME_STATE_NO_COUNTDOWN_SETUP = 20,
+ /* 21 */ MINIGAME_STATE_NO_COUNTDOWN,
+ /* 30 */ MINIGAME_STATE_PLAYING = 30
+} MinigameState;
+
+typedef enum {
+ /* 0 */ PERFECT_LETTERS_TYPE_OFF,
+ /* 1 */ PERFECT_LETTERS_TYPE_1,
+ /* 2 */ PERFECT_LETTERS_TYPE_2,
+ /* 3 */ PERFECT_LETTERS_TYPE_3
+} PerfectLettersType;
+
+typedef enum {
+ /* 0 */ PERFECT_LETTERS_STATE_OFF,
+ /* 1 */ PERFECT_LETTERS_STATE_INIT,
+ /* 2 */ PERFECT_LETTERS_STATE_ENTER,
+ /* 3 */ PERFECT_LETTERS_STATE_STATIONARY, // Display for type 1
+ /* 4 */ PERFECT_LETTERS_STATE_SPREAD, // Exit for type 1
+ /* 5 */ PERFECT_LETTERS_STATE_DISPLAY,
+ /* 6 */ PERFECT_LETTERS_STATE_EXIT
+} PerfectLettersState;
+
+#define PERFECT_LETTERS_NUM_LETTERS 8
+#define PERFECT_LETTERS_ANGLE_PER_LETTER (0x10000 / PERFECT_LETTERS_NUM_LETTERS)
+
+typedef enum {
+ /* 0 */ STORY_DMA_IDLE,
+ /* 1 */ STORY_DMA_LOADING,
+ /* 2 */ STORY_DMA_DONE
+} StoryLoadStatus;
+
+typedef enum {
+ /* 0 */ STORY_STATE_OFF,
+ /* 1 */ STORY_STATE_INIT,
+ /* 2 */ STORY_STATE_IDLE,
+ /* 3 */ STORY_STATE_DESTROY,
+ /* 4 */ STORY_STATE_SETUP_IDLE,
+ /* 5 */ STORY_STATE_FADE_OUT,
+ /* 6 */ STORY_STATE_FADE_IN
+} StoryState;
+
+typedef enum {
+ /* 0 */ STORY_TYPE_MASK_FESTIVAL,
+ /* 1 */ STORY_TYPE_GIANTS_LEAVING
+} StoryType;
+
+typedef struct {
+ /* 0x000 */ View view;
+ /* 0x168 */ Vtx* actionVtx;
+ /* 0x16C */ Vtx* beatingHeartVtx;
+ /* 0x170 */ u8* parameterSegment;
+ /* 0x174 */ u8* doActionSegment;
+ /* 0x178 */ u8* iconItemSegment;
+ /* 0x17C */ u8* mapSegment;
+ /* 0x180 */ u8* unk_180; // unused segment?
+ /* 0x184 */ DmaRequest dmaRequest;
+ /* 0x1A4 */ UNK_TYPE1 unk_1A4[0x40]; // likely 2 DmaRequest
+ /* 0x1E4 */ OSMesgQueue loadQueue;
+ /* 0x1FC */ OSMesg loadMsg;
+ /* 0x200 */ Viewport viewport;
+ /* 0x210 */ s16 aButtonState;
+ /* 0x212 */ u16 unk_212;
+ /* 0x214 */ u16 aButtonDoAction;
+ /* 0x218 */ f32 aButtonRoll;
+ /* 0x21C */ s16 unk_21C;
+ /* 0x21E */ s16 bButtonDoAction;
+ /* 0x220 */ s16 tatlCalling;
+ /* 0x222 */ s16 unk_222;
+ /* 0x224 */ s16 unk_224;
+ /* 0x226 */ s16 lifeColorChange;
+ /* 0x228 */ s16 lifeColorChangeDirection;
+ /* 0x22A */ s16 beatingHeartPrim[3];
+ /* 0x230 */ s16 beatingHeartEnv[3];
+ /* 0x236 */ s16 heartsPrimR[2];
+ /* 0x23A */ s16 heartsPrimG[2];
+ /* 0x23E */ s16 heartsPrimB[2];
+ /* 0x242 */ s16 heartsEnvR[2];
+ /* 0x246 */ s16 heartsEnvG[2];
+ /* 0x24A */ s16 heartsEnvB[2];
+ /* 0x24E */ s16 health;
+ /* 0x250 */ s16 healthTimer;
+ /* 0x252 */ s16 lifeSizeChange;
+ /* 0x254 */ s16 lifeSizeChangeDirection; // 1 means shrinking, 0 growing
+ /* 0x256 */ s16 unk_256;
+ /* 0x258 */ s16 magicConsumptionTimer; // For certain magic states, 1 unit of magic is consumed every time the timer reaches 0
+ /* 0x25A */ u8 numHorseBoosts;
+ /* 0x25C */ u16 minigamePoints; // Points to add to the minigame score. Reset to 0 every frame.
+ /* 0x25E */ u16 minigameHiddenPoints; // Points to add to the secondary set of minigame points not displayed. Reset to 0 every frame.
+ /* 0x260 */ u16 minigameAmmo;
+ /* 0x262 */ u16 minigameUnusedPoints; // Associated with other minigame points, unused
+ /* 0x264 */ s16 screenFillAlpha;
+ /* 0x266 */ s16 aAlpha;
+ /* 0x268 */ s16 bAlpha;
+ /* 0x26A */ s16 cLeftAlpha;
+ /* 0x26C */ s16 cDownAlpha;
+ /* 0x26E */ s16 cRightAlpha;
+ /* 0x270 */ s16 healthAlpha;
+ /* 0x272 */ s16 magicAlpha;
+ /* 0x274 */ s16 minimapAlpha;
+ /* 0x276 */ s16 startAlpha;
+ /* 0x278 */ s16 unk_278;
+ /* 0x27A */ s16 dungeonOrBossAreaMapIndex;
+ /* 0x27C */ s16 mapRoomNum;
+ /* 0x27E */ u8 unk_27E;
+ /* 0x27F */ u8 unk_27F;
+ /* 0x280 */ u8 minigameState;
+ /* 0x282 */ s16 minigameCountdownAlpha;
+ /* 0x284 */ s16 minigameCountdownScale;
+ /* 0x286 */ s16 perfectLettersOn;
+ /* 0x288 */ s16 perfectLettersType;
+ /* 0x28A */ s16 perfectLettersState[PERFECT_LETTERS_NUM_LETTERS];
+ /* 0x29A */ u16 perfectLettersAngles[PERFECT_LETTERS_NUM_LETTERS]; // Angle that follows the projectory of an ellipse
+ /* 0x2AA */ s16 perfectLettersOffsetX[PERFECT_LETTERS_NUM_LETTERS];
+ /* 0x2BC */ f32 perfectLettersSemiAxisX[PERFECT_LETTERS_NUM_LETTERS];
+ /* 0x2DC */ f32 perfectLettersSemiAxisY[PERFECT_LETTERS_NUM_LETTERS];
+ /* 0x2FC */ s16 perfectLettersPrimColor[4];
+ /* 0x304 */ s16 perfectLettersCount;
+ /* 0x306 */ s16 perfectLettersUnused;
+ /* 0x308 */ s16 perfectLettersColorIndex;
+ /* 0x30A */ s16 perfectLettersColorTimer;
+ /* 0x30C */ s16 perfectLettersTimer;
+ struct {
+ /* 0x30E */ u8 hGauge;
+ /* 0x30F */ u8 bButton;
+ /* 0x310 */ u8 aButton;
+ /* 0x311 */ u8 tradeItems; // Includes deed trade quest, anju/kafei trade quest, bottles, and ocarina
+ /* 0x312 */ u8 songOfTime;
+ /* 0x313 */ u8 songOfDoubleTime;
+ /* 0x314 */ u8 invSongOfTime;
+ /* 0x315 */ u8 songOfSoaring;
+ /* 0x316 */ u8 songOfStorms;
+ /* 0x317 */ u8 masks;
+ /* 0x318 */ u8 pictoBox;
+ /* 0x319 */ u8 all; // "another"; enables all item restrictions
+ } restrictions; // size = 0xC
+ /* 0x31A */ u8 storyState;
+ /* 0x31B */ u8 storyType;
+ /* 0x31C */ u8 storyDmaStatus;
+ /* 0x320 */ OSMesgQueue storyMsgQueue;
+ /* 0x338 */ OSMesg storyMsgBuf;
+ /* 0x33C */ u8* storySegment;
+ /* 0x340 */ uintptr_t storyAddr;
+ /* 0x344 */ size_t storySize;
+} InterfaceContext; // size = 0x348
+
+#endif
diff --git a/include/z64item.h b/include/z64item.h
index 7c6b719ca..d1d36ebba 100644
--- a/include/z64item.h
+++ b/include/z64item.h
@@ -1,5 +1,5 @@
-#ifndef _Z64ITEM_H_
-#define _Z64ITEM_H_
+#ifndef Z64ITEM_H
+#define Z64ITEM_H
#define DROP_TABLE_SIZE 16
#define DROP_TABLE_NUMBER 17
@@ -9,7 +9,8 @@
typedef enum {
/* 0 */ EQUIP_TYPE_SWORD,
/* 1 */ EQUIP_TYPE_SHIELD,
- /* 2 */ EQUIP_TYPE_MAX
+ /* 2 */ EQUIP_TYPE_TUNIC, // Remnant of OoT
+ /* 3 */ EQUIP_TYPE_MAX
} EquipmentType;
typedef enum {
@@ -28,6 +29,14 @@ typedef enum {
/* 3 */ EQUIP_VALUE_SHIELD_MAX
} EquipValueShield;
+typedef enum {
+ /* 0 */ EQUIP_VALUE_TUNIC_NONE,
+ /* 1 */ EQUIP_VALUE_TUNIC_KOKIRI,
+ /* 2 */ EQUIP_VALUE_TUNIC_GORON,
+ /* 3 */ EQUIP_VALUE_TUNIC_ZORA,
+ /* 4 */ EQUIP_VALUE_TUNIC_MAX
+} EquipValueTunic; // Remnant of OoT
+
typedef enum {
/* 0 */ UPG_QUIVER,
/* 1 */ UPG_BOMB_BAG,
@@ -40,7 +49,7 @@ typedef enum {
} UpgradeType;
typedef enum {
- /* 0x00 */ QUEST_REMAINS_ODOWLA,
+ /* 0x00 */ QUEST_REMAINS_ODOLWA,
/* 0x01 */ QUEST_REMAINS_GOHT,
/* 0x02 */ QUEST_REMAINS_GYORG,
/* 0x03 */ QUEST_REMAINS_TWINMOLD,
@@ -59,8 +68,12 @@ typedef enum {
/* 0x10 */ QUEST_SONG_STORMS,
/* 0x11 */ QUEST_SONG_SUN,
/* 0x12 */ QUEST_BOMBERS_NOTEBOOK, // Obtained Bombers Notebook
- /* 0x13 */ QUEST_SKULL_TOKEN,
- /* 0x18 */ QUEST_SONG_LULLABY_INTRO = 0x18,
+ /* 0x13 */ QUEST_QUIVER,
+ /* 0x14 */ QUEST_BOMB_BAG,
+ /* 0x15 */ QUEST_SKULL_TOKEN,
+ /* 0x16 */ QUEST_HEART_PIECE, // for `pauseCtx->cursorPoint[PAUSE_QUEST]`
+ /* 0x17 */ QUEST_17, // Used in a conditional for quest cursors
+ /* 0x18 */ QUEST_SONG_LULLABY_INTRO,
/* 0x19 */ QUEST_PICTOGRAPH, // A photo from the pictograph box is saved
/* 0x1C */ QUEST_HEART_PIECE_COUNT = 0x1C
} QuestItem;
@@ -130,7 +143,7 @@ typedef enum {
/* 0xFF */ SLOT_NONE = 0xFF
} InventorySlot;
-typedef enum {
+typedef enum ItemId {
/* 0x00 */ ITEM_OCARINA,
/* 0x01 */ ITEM_BOW,
/* 0x02 */ ITEM_ARROW_FIRE,
@@ -244,7 +257,9 @@ typedef enum {
/* 0x6E */ ITEM_SKULL_TOKEN,
/* 0x6F */ ITEM_HEART_CONTAINER,
/* 0x70 */ ITEM_HEART_PIECE,
- /* 0x73 */ ITEM_SONG_LULLABY_INTRO = 0x73,
+ /* 0x71 */ ITEM_71,
+ /* 0x72 */ ITEM_72,
+ /* 0x73 */ ITEM_SONG_LULLABY_INTRO,
/* 0x74 */ ITEM_KEY_BOSS,
/* 0x75 */ ITEM_COMPASS,
/* 0x76 */ ITEM_DUNGEON_MAP,
@@ -293,17 +308,19 @@ typedef enum {
/* 0xA1 */ ITEM_GOLD_DUST_2,
/* 0xA2 */ ITEM_HYLIAN_LOACH_2,
/* 0xA3 */ ITEM_SEAHORSE_CAUGHT,
- /* 0xF0 */ ITEM_F0 = 0xF0,
- /* 0xF1 */ ITEM_F1,
- /* 0xF2 */ ITEM_F2,
- /* 0xFD */ ITEM_FD = 0xFD,
+ /* 0xF0 */ ITEM_F0 = 0xF0, // PLAYER_MASK_BLAST
+ /* 0xF1 */ ITEM_F1, // PLAYER_MASK_BREMEN
+ /* 0xF2 */ ITEM_F2, // PLAYER_MASK_KAMARO
+ /* 0xFC */ ITEM_FC = 0xFC,
+ /* 0xFD */ ITEM_FD,
+ /* 0xFE */ ITEM_FE,
/* 0xFF */ ITEM_NONE = 0xFF
} ItemId;
#define BOTTLE_FIRST 0
#define BOTTLE_MAX 6
-typedef enum {
+typedef enum GetItemId {
/* 0x00 */ GI_NONE,
/* 0x01 */ GI_RUPEE_GREEN,
/* 0x02 */ GI_RUPEE_BLUE,
@@ -358,7 +375,8 @@ typedef enum {
/* 0x3D */ GI_KEY_BOSS,
/* 0x3E */ GI_MAP,
/* 0x3F */ GI_COMPASS,
- /* 0x41 */ GI_HOOKSHOT = 0x41,
+ /* 0x40 */ GI_40,
+ /* 0x41 */ GI_HOOKSHOT,
/* 0x42 */ GI_LENS,
/* 0x43 */ GI_PICTO_BOX,
/* 0x4C */ GI_OCARINA = 0x4C,
@@ -387,9 +405,13 @@ typedef enum {
/* 0x69 */ GI_ZORA_EGG,
/* 0x6A */ GI_GOLD_DUST,
/* 0x6B */ GI_MUSHROOM,
- /* 0x6E */ GI_SEAHORSE = 0x6E,
+ /* 0x6C */ GI_6C,
+ /* 0x6D */ GI_6D,
+ /* 0x6E */ GI_SEAHORSE,
/* 0x6F */ GI_CHATEAU_BOTTLE,
- /* 0x76 */ GI_ICE_TRAP = 0x76,
+ /* 0x70 */ GI_HYLIAN_LOACH,
+ /* 0x75 */ GI_75 = 0x75,
+ /* 0x76 */ GI_ICE_TRAP,
/* 0x78 */ GI_MASK_DEKU = 0x78,
/* 0x79 */ GI_MASK_GORON,
/* 0x7A */ GI_MASK_ZORA,
@@ -417,7 +439,7 @@ typedef enum {
/* 0x91 */ GI_CHATEAU = 0x91,
/* 0x92 */ GI_MILK,
/* 0x93 */ GI_GOLD_DUST_2,
- /* 0x94 */ GI_HYLIAN_LOACH, // Unused bottled eel
+ /* 0x94 */ GI_HYLIAN_LOACH_2, // Unused bottled eel
/* 0x95 */ GI_SEAHORSE_CAUGHT,
/* 0x96 */ GI_MOON_TEAR,
/* 0x97 */ GI_DEED_LAND,
@@ -431,7 +453,14 @@ typedef enum {
/* 0x9F */ GI_SHIELD_HERO_STOLEN, // Code that treats this as hero's shield is unused, implied as intended to be stolen
/* 0xA0 */ GI_ROOM_KEY,
/* 0xA1 */ GI_LETTER_TO_MAMA,
- /* 0xA9 */ GI_BOTTLE_STOLEN = 0xA9, // buy back stolen bottle
+ /* 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, // buy back stolen bottle
/* 0xAA */ GI_LETTER_TO_KAFEI,
/* 0xAB */ GI_PENDANT_OF_MEMORIES,
/* 0xB4 */ GI_TINGLE_MAP_CLOCK_TOWN = 0xB4,
@@ -443,7 +472,8 @@ typedef enum {
/* 0xBA */ GI_MAX
} GetItemId;
-typedef enum {
+typedef enum GetItemDrawId {
+ /* -1 */ GID_NONE = -1,
/* 0x00 */ GID_BOTTLE,
/* 0x01 */ GID_KEY_SMALL,
/* 0x02 */ GID_MASK_KAMARO,
diff --git a/include/z64jpeg.h b/include/z64jpeg.h
index 38183bfa9..60797af98 100644
--- a/include/z64jpeg.h
+++ b/include/z64jpeg.h
@@ -1,5 +1,5 @@
-#ifndef Z64_JPEG_H
-#define Z64_JPEG_H
+#ifndef Z64JPEG_H
+#define Z64JPEG_H
#include "PR/ultratypes.h"
#include "ultra64/message.h"
diff --git a/include/z64light.h b/include/z64light.h
index df7c1b4fa..706df2f4d 100644
--- a/include/z64light.h
+++ b/include/z64light.h
@@ -1,9 +1,13 @@
-#ifndef _Z64LIGHT_H_
-#define _Z64LIGHT_H_
+#ifndef Z64LIGHT_H
+#define Z64LIGHT_H
#include "ultra64.h"
#include "PR/gbi.h"
#include "color.h"
+#include "z64math.h"
+
+struct PlayState;
+
typedef struct {
/* 0x00 */ u8 ambientColor[3];
@@ -12,8 +16,8 @@ typedef struct {
/* 0x09 */ s8 diffusePos2[3];
/* 0x0C */ u8 diffuseColor[3];
/* 0x0F */ u8 fogColor[3];
- /* 0x12 */ u16 fogNear;
- /* 0x14 */ u16 fogFar;
+ /* 0x12 */ s16 fogNear;
+ /* 0x14 */ s16 zFar;
} LightSettings; // size = 0x16
typedef struct {
@@ -22,7 +26,7 @@ typedef struct {
/* 0x0C */ s16 diffuseColor2[3];
/* 0x12 */ s16 fogColor[3];
/* 0x18 */ s16 fogNear;
- /* 0x1A */ s16 fogFar;
+ /* 0x1A */ s16 zFar;
} EnvLightSettings; // size = 0x1C
typedef struct {
@@ -74,11 +78,9 @@ typedef struct LightsBuffer {
typedef struct LightContext {
/* 0x0 */ LightNode* listHead;
/* 0x4 */ Color_RGB8 ambient;
- /* 0x7 */ u8 unk7;
- /* 0x8 */ u8 unk8;
- /* 0x9 */ u8 unk9;
- /* 0xA */ s16 unkA;
- /* 0xC */ s16 unkC;
+ /* 0x7 */ Color_RGB8 fogColor;
+ /* 0xA */ s16 fogNear; // how close until fog starts taking effect. range 0 - 996
+ /* 0xC */ s16 zFar; // draw distance. range 0 - 12800
} LightContext; // size = 0x10
typedef enum LightType {
diff --git a/include/z64math.h b/include/z64math.h
index 323042b15..d47a01a64 100644
--- a/include/z64math.h
+++ b/include/z64math.h
@@ -104,20 +104,38 @@ typedef struct {
#define LERPWEIGHT(val, prev, next) (((val) - (prev)) / ((next) - (prev)))
#define F32_LERPWEIGHT(val, prev, next) (((f32)(val) - (f32)(prev)) / ((f32)(next) - (f32)(prev)))
-#define VEC3F_LERPIMPDST(dst, v0, v1, t){ \
- (dst)->x = (v0)->x + (((v1)->x - (v0)->x) * t); \
- (dst)->y = (v0)->y + (((v1)->y - (v0)->y) * t); \
- (dst)->z = (v0)->z + (((v1)->z - (v0)->z) * t); \
-}
+#define VEC3F_LERPIMPDST(dst, v0, v1, t) \
+ { \
+ (dst)->x = (v0)->x + (((v1)->x - (v0)->x) * t); \
+ (dst)->y = (v0)->y + (((v1)->y - (v0)->y) * t); \
+ (dst)->z = (v0)->z + (((v1)->z - (v0)->z) * t); \
+ } \
+ (void)0
#define IS_ZERO(f) (fabsf(f) < 0.008f)
+// Casting a float to an integer, when the float value is larger than what the integer type can hold,
+// leads to undefined behavior. For example (f32)0x8000 doesn't fit in a s16, so it cannot be cast to s16.
+// This isn't an issue with IDO, but is one with for example GCC.
+// A partial workaround is to cast to s32 then s16, hoping all binang values used will fit a s32.
+#define TRUNCF_BINANG(f) (s16)(s32)(f)
+
// Angle conversion macros
-#define DEG_TO_BINANG(degrees) (s16)((degrees) * (0x8000 / 180.0f))
-#define RADF_TO_BINANG(radf) (s16)((radf) * (0x8000 / M_PI))
-#define RADF_TO_DEGF(radf) ((radf) * (180.0f / M_PI))
-#define DEGF_TO_RADF(degf) ((degf) * (M_PI / 180.0f))
-#define BINANG_TO_RAD(binang) (((f32)binang / 0x8000) * M_PI)
+#define DEG_TO_RAD(degrees) ((degrees) * (M_PI / 180.0f))
+#define DEG_TO_BINANG(degrees) TRUNCF_BINANG((degrees) * (0x8000 / 180.0f))
+#define DEG_TO_BINANG_ALT(degrees) TRUNCF_BINANG(((degrees) / 180.0f) * 0x8000)
+#define DEG_TO_BINANG_ALT2(degrees) TRUNCF_BINANG(((degrees) * 0x10000) / 360.0f)
+#define DEG_TO_BINANG_ALT3(degrees) ((degrees) * (0x8000 / 180.0f))
+
+#define RAD_TO_DEG(radians) ((radians) * (180.0f / M_PI))
+#define RAD_TO_BINANG(radians) TRUNCF_BINANG((radians) * (0x8000 / M_PI))
+#define RAD_TO_BINANG_ALT(radians) TRUNCF_BINANG(((radians) / M_PI) * 0x8000)
+#define RAD_TO_BINANG_ALT2(radians) TRUNCF_BINANG(((radians) * 0x8000) / M_PI)
+
+#define BINANG_TO_DEG(binang) ((f32)(binang) * (180.0f / 0x8000))
+#define BINANG_TO_RAD(binang) ((f32)(binang) * (M_PI / 0x8000))
+#define BINANG_TO_RAD_ALT(binang) (((f32)(binang) / 0x8000) * M_PI)
+#define BINANG_TO_RAD_ALT2(binang) (((f32)(binang) * M_PI) / 0x8000)
// Angle arithmetic macros
#define BINANG_ROT180(angle) ((s16)(angle + 0x8000))
diff --git a/include/z64message.h b/include/z64message.h
index 590074339..2b0387045 100644
--- a/include/z64message.h
+++ b/include/z64message.h
@@ -34,7 +34,7 @@ typedef enum TextState {
#define FONT_CHAR_TEX_WIDTH 16
#define FONT_CHAR_TEX_HEIGHT 16
-//! @TODO: Make this use `sizeof(AnyFontTextureSymbol)`
+//! TODO: Make this use `sizeof(AnyFontTextureSymbol)`
#define FONT_CHAR_TEX_SIZE ((16 * 16) / 2) // 16x16 I4 texture
// TODO: should Font be in its own header or is it fine to have it here?
@@ -67,7 +67,7 @@ typedef struct MessageContext {
/* 0x00168 */ Font font;
/* 0x11EF8 */ UNK_PTR unk11EF8;
/* 0x11EFC */ UNK_TYPE1 unk11EFC[0x4];
- /* 0x11F00 */ struct OcarinaStaff* unk11F00;
+ /* 0x11F00 */ struct OcarinaStaff* ocarinaStaff;
/* 0x11F04 */ u16 currentTextId;
/* 0x11F06 */ UNK_TYPE1 unk11F06[0x2];
/* 0x11F08 */ u16 unk11F08;
@@ -160,7 +160,8 @@ typedef struct MessageContext {
/* 0x120A4 */ s16 unk120A4[6];
/* 0x120B0 */ u8 unk120B0;
/* 0x120B1 */ u8 unk120B1;
- /* 0x120B2 */ u8 unk120B2[0xC];
+ /* 0x120B2 */ u8 unk120B2[0xA];
+ /* 0x120BC */ u16 unk_120BC;
/* 0x120BE */ s16 unk120BE;
/* 0x120C0 */ s16 unk120C0;
/* 0x120C2 */ s16 unk120C2;
diff --git a/include/z64object.h b/include/z64object.h
index 306f84ebd..712826815 100644
--- a/include/z64object.h
+++ b/include/z64object.h
@@ -1,5 +1,5 @@
-#ifndef _Z64OBJECT_H_
-#define _Z64OBJECT_H_
+#ifndef Z64OBJECT_H
+#define Z64OBJECT_H
#define OBJECT_SPACE_SIZE_DEFAULT 1413120
#define OBJECT_SPACE_SIZE_CLOCK_TOWN 1566720
@@ -8,651 +8,17 @@
#define OBJECT_EXCHANGE_BANK_MAX 35
-typedef enum {
- /* 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_DNO,
- /* 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_DNQ,
- /* 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_DNJ,
- /* 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,
+#define DEFINE_OBJECT(_name, enumValue) enumValue,
+#define DEFINE_OBJECT_UNSET(enumValue) enumValue,
+#define DEFINE_OBJECT_SIZE_ZERO(_name, enumValue) enumValue,
+
+typedef enum ObjectId {
+ #include "tables/object_table.h"
/* 0x283 */ OBJECT_ID_MAX
-} ObjectID;
+} ObjectId;
+
+#undef DEFINE_OBJECT
+#undef DEFINE_OBJECT_UNSET
+#undef DEFINE_OBJECT_SIZE_ZERO
#endif
diff --git a/include/z64ocarina.h b/include/z64ocarina.h
index 597580388..3bb99cd62 100644
--- a/include/z64ocarina.h
+++ b/include/z64ocarina.h
@@ -82,7 +82,7 @@ typedef enum {
/* 13 */ OCARINA_INSTRUMENT_PIANO,
/* 14 */ OCARINA_INSTRUMENT_BASS_GUITAR,
/* 15 */ OCARINA_INSTRUMENT_BABY_SINGING,
- /* 16 */ OCARINA_INSTRUMENT_AMPLIFIED_GUITAR // Related to (gSaveContext.weekEventReg[41] & 0x20)
+ /* 16 */ OCARINA_INSTRUMENT_AMPLIFIED_GUITAR // Related to WEEKEVENTREG_41_20
} OcarinaInstrumentId;
typedef enum {
diff --git a/include/z64player.h b/include/z64player.h
index 2f101b558..54894893f 100644
--- a/include/z64player.h
+++ b/include/z64player.h
@@ -1,19 +1,20 @@
#ifndef Z64PLAYER_H
#define Z64PLAYER_H
-#include "z64actor.h"
+#include "alignment.h"
#include "os.h"
+#include "z64actor.h"
struct Player;
-typedef enum {
+typedef enum PlayerShield {
/* 0 */ PLAYER_SHIELD_NONE,
/* 1 */ PLAYER_SHIELD_HEROS_SHIELD,
/* 2 */ PLAYER_SHIELD_MIRROR_SHIELD,
/* 3 */ PLAYER_SHIELD_MAX
} PlayerShield;
-typedef enum {
+typedef enum PlayerBoots {
/* 0 */ PLAYER_BOOTS_FIERCE_DEITY,
/* 1 */ PLAYER_BOOTS_HYLIAN,
/* 2 */ PLAYER_BOOTS_GIANT,
@@ -21,10 +22,11 @@ typedef enum {
/* 4 */ PLAYER_BOOTS_ZORA_LAND,
/* 5 */ PLAYER_BOOTS_ZORA_UNDERWATER,
/* 6 */ PLAYER_BOOTS_GORON,
- /* 7 */ PLAYER_BOOTS_MAX
+ /* 7 */ PLAYER_BOOTS_7,
+ /* 8 */ PLAYER_BOOTS_MAX
} PlayerBoots;
-typedef enum {
+typedef enum PlayerStrength {
/* 0 */ PLAYER_STRENGTH_DEKU,
/* 1 */ PLAYER_STRENGTH_HUMAN,
/* 2 */ PLAYER_STRENGTH_ZORA,
@@ -32,7 +34,7 @@ typedef enum {
/* 4 */ PLAYER_STRENGTH_MAX
} PlayerStrength;
-typedef enum {
+typedef enum PlayerTransformation {
/* 0 */ PLAYER_FORM_FIERCE_DEITY,
/* 1 */ PLAYER_FORM_GORON,
/* 2 */ PLAYER_FORM_ZORA,
@@ -41,7 +43,7 @@ typedef enum {
/* 5 */ PLAYER_FORM_MAX
} PlayerTransformation;
-typedef enum {
+typedef enum PlayerMask {
/* 0x00 */ PLAYER_MASK_NONE,
/* 0x01 */ PLAYER_MASK_TRUTH,
/* 0x02 */ PLAYER_MASK_KAFEIS_MASK,
@@ -71,94 +73,182 @@ typedef enum {
} PlayerMask;
typedef enum {
- /* 0 */ PLAYER_ENV_TIMER_NONE,
- /* 1 */ PLAYER_ENV_TIMER_HOTROOM,
- /* 2 */ PLAYER_ENV_TIMER_UNDERWATER_FLOOR,
- /* 3 */ PLAYER_ENV_TIMER_SWIMMING,
- /* 4 */ PLAYER_ENV_TIMER_UNDERWATER_FREE
-} PlayerEnvTimerType;
+ /* 0 */ PLAYER_ENV_HAZARD_NONE,
+ /* 1 */ PLAYER_ENV_HAZARD_HOTROOM,
+ /* 2 */ PLAYER_ENV_HAZARD_UNDERWATER_FLOOR,
+ /* 3 */ PLAYER_ENV_HAZARD_SWIMMING,
+ /* 4 */ PLAYER_ENV_HAZARD_UNDERWATER_FREE
+} PlayerEnvHazard;
-typedef enum PlayerActionParam {
- /* -1 */ PLAYER_AP_MINUS1 = -1,
- /* 0x00 */ PLAYER_AP_NONE,
- /* 0x01 */ PLAYER_AP_LAST_USED,
- /* 0x02 */ PLAYER_AP_FISHING_ROD,
- /* 0x03 */ PLAYER_AP_SWORD_KOKIRI,
- /* 0x04 */ PLAYER_AP_SWORD_RAZOR,
- /* 0x05 */ PLAYER_AP_SWORD_GILDED,
- /* 0x06 */ PLAYER_AP_SWORD_GREAT_FAIRY,
- /* 0x07 */ PLAYER_AP_STICK,
- /* 0x08 */ PLAYER_AP_ZORA_FINS,
- /* 0x09 */ PLAYER_AP_BOW,
- /* 0x0A */ PLAYER_AP_BOW_FIRE,
- /* 0x0B */ PLAYER_AP_BOW_ICE,
- /* 0x0C */ PLAYER_AP_BOW_LIGHT,
- /* 0x0D */ PLAYER_AP_HOOKSHOT,
- /* 0x0E */ PLAYER_AP_BOMB,
- /* 0x0F */ PLAYER_AP_POWDER_KEG,
- /* 0x10 */ PLAYER_AP_BOMBCHU,
- /* 0x12 */ PLAYER_AP_NUT = 0x12,
- /* 0x13 */ PLAYER_AP_PICTO_BOX,
- /* 0x14 */ PLAYER_AP_OCARINA,
- /* 0x15 */ PLAYER_AP_BOTTLE,
- /* 0x16 */ PLAYER_AP_BOTTLE_FISH,
- /* 0x17 */ PLAYER_AP_BOTTLE_SPRING_WATER,
- /* 0x18 */ PLAYER_AP_BOTTLE_HOT_SPRING_WATER,
- /* 0x19 */ PLAYER_AP_BOTTLE_ZORA_EGG,
- /* 0x1A */ PLAYER_AP_BOTTLE_DEKU_PRINCESS,
- /* 0x1B */ PLAYER_AP_BOTTLE_GOLD_DUST,
- /* 0x1D */ PLAYER_AP_BOTTLE_SEAHORSE = 0x1D,
- /* 0x1E */ PLAYER_AP_BOTTLE_MUSHROOM,
- /* 0x1F */ PLAYER_AP_BOTTLE_HYLIAN_LOACH,
- /* 0x20 */ PLAYER_AP_BOTTLE_BUG,
- /* 0x21 */ PLAYER_AP_BOTTLE_POE,
- /* 0x22 */ PLAYER_AP_BOTTLE_BIG_POE,
- /* 0x23 */ PLAYER_AP_BOTTLE_POTION_RED,
- /* 0x24 */ PLAYER_AP_BOTTLE_POTION_BLUE,
- /* 0x25 */ PLAYER_AP_BOTTLE_POTION_GREEN,
- /* 0x26 */ PLAYER_AP_BOTTLE_MILK,
- /* 0x27 */ PLAYER_AP_BOTTLE_MILK_HALF,
- /* 0x28 */ PLAYER_AP_BOTTLE_CHATEAU,
- /* 0x29 */ PLAYER_AP_BOTTLE_FAIRY,
- /* 0x2A */ PLAYER_AP_MOON_TEAR,
- /* 0x2B */ PLAYER_AP_DEED_LAND,
- /* 0x2C */ PLAYER_AP_ROOM_KEY,
- /* 0x2D */ PLAYER_AP_LETTER_TO_KAFEI,
- /* 0x2E */ PLAYER_AP_MAGIC_BEANS,
- /* 0x2F */ PLAYER_AP_DEED_SWAMP,
- /* 0x30 */ PLAYER_AP_DEED_MOUNTAIN,
- /* 0x31 */ PLAYER_AP_DEED_OCEAN,
- /* 0x33 */ PLAYER_AP_LETTER_MAMA = 0x33,
- /* 0x36 */ PLAYER_AP_PENDANT_OF_MEMORIES = 0x36,
- /* 0x3A */ PLAYER_AP_MASK_TRUTH = 0x3A,
- /* 0x3B */ PLAYER_AP_MASK_KAFEIS_MASK,
- /* 0x3C */ PLAYER_AP_MASK_ALL_NIGHT,
- /* 0x3D */ PLAYER_AP_MASK_BUNNY,
- /* 0x3E */ PLAYER_AP_MASK_KEATON,
- /* 0x3F */ PLAYER_AP_MASK_GARO,
- /* 0x40 */ PLAYER_AP_MASK_ROMANI,
- /* 0x41 */ PLAYER_AP_MASK_CIRCUS_LEADER,
- /* 0x42 */ PLAYER_AP_MASK_POSTMAN,
- /* 0x43 */ PLAYER_AP_MASK_COUPLE,
- /* 0x44 */ PLAYER_AP_MASK_GREAT_FAIRY,
- /* 0x45 */ PLAYER_AP_MASK_GIBDO,
- /* 0x46 */ PLAYER_AP_MASK_DON_GERO,
- /* 0x47 */ PLAYER_AP_MASK_KAMARO,
- /* 0x48 */ PLAYER_AP_MASK_CAPTAIN,
- /* 0x49 */ PLAYER_AP_MASK_STONE,
- /* 0x4A */ PLAYER_AP_MASK_BREMEN,
- /* 0x4B */ PLAYER_AP_MASK_BLAST,
- /* 0x4C */ PLAYER_AP_MASK_SCENTS,
- /* 0x4D */ PLAYER_AP_MASK_GIANT,
- /* 0x4E */ PLAYER_AP_MASK_FIERCE_DEITY,
- /* 0x4F */ PLAYER_AP_MASK_GORON,
- /* 0x50 */ PLAYER_AP_MASK_ZORA,
- /* 0x51 */ PLAYER_AP_MASK_DEKU,
- /* 0x52 */ PLAYER_AP_LENS,
- /* 0xFD */ PLAYER_AP_MAX = 0xFD
-} PlayerActionParam;
+typedef enum PlayerItemAction {
+ /* -1 */ PLAYER_IA_MINUS1 = -1,
+ /* 0x00 */ PLAYER_IA_NONE,
+ /* 0x01 */ PLAYER_IA_LAST_USED,
+ /* 0x02 */ PLAYER_IA_FISHING_ROD,
+ /* 0x03 */ PLAYER_IA_SWORD_MIN,
+ /* 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,
+ /* 0x07 */ PLAYER_IA_STICK,
+ /* 0x08 */ PLAYER_IA_ZORA_FINS,
+ /* 0x09 */ PLAYER_IA_BOW,
+ /* 0x0A */ PLAYER_IA_BOW_FIRE,
+ /* 0x0B */ PLAYER_IA_BOW_ICE,
+ /* 0x0C */ PLAYER_IA_BOW_LIGHT,
+ /* 0x0D */ PLAYER_IA_HOOKSHOT,
+ /* 0x0E */ PLAYER_IA_EXPLOSIVE_MIN,
+ /* 0x0E */ PLAYER_IA_BOMB = PLAYER_IA_EXPLOSIVE_MIN,
+ /* 0x0F */ PLAYER_IA_POWDER_KEG,
+ /* 0x10 */ PLAYER_IA_BOMBCHU,
+ /* 0x11 */ PLAYER_IA_11,
+ /* 0x12 */ PLAYER_IA_NUT,
+ /* 0x13 */ PLAYER_IA_PICTO_BOX,
+ /* 0x14 */ PLAYER_IA_OCARINA,
+ /* 0x15 */ PLAYER_IA_BOTTLE_MIN,
+ /* 0x15 */ PLAYER_IA_BOTTLE_EMPTY = PLAYER_IA_BOTTLE_MIN,
+ /* 0x16 */ PLAYER_IA_BOTTLE_FISH,
+ /* 0x17 */ PLAYER_IA_BOTTLE_SPRING_WATER,
+ /* 0x18 */ PLAYER_IA_BOTTLE_HOT_SPRING_WATER,
+ /* 0x19 */ PLAYER_IA_BOTTLE_ZORA_EGG,
+ /* 0x1A */ PLAYER_IA_BOTTLE_DEKU_PRINCESS,
+ /* 0x1B */ PLAYER_IA_BOTTLE_GOLD_DUST,
+ /* 0x1C */ PLAYER_IA_BOTTLE_1C,
+ /* 0x1D */ PLAYER_IA_BOTTLE_SEAHORSE,
+ /* 0x1E */ PLAYER_IA_BOTTLE_MUSHROOM,
+ /* 0x1F */ PLAYER_IA_BOTTLE_HYLIAN_LOACH,
+ /* 0x20 */ PLAYER_IA_BOTTLE_BUG,
+ /* 0x21 */ PLAYER_IA_BOTTLE_POE,
+ /* 0x22 */ PLAYER_IA_BOTTLE_BIG_POE,
+ /* 0x23 */ PLAYER_IA_BOTTLE_POTION_RED,
+ /* 0x24 */ PLAYER_IA_BOTTLE_POTION_BLUE,
+ /* 0x25 */ PLAYER_IA_BOTTLE_POTION_GREEN,
+ /* 0x26 */ PLAYER_IA_BOTTLE_MILK,
+ /* 0x27 */ PLAYER_IA_BOTTLE_MILK_HALF,
+ /* 0x28 */ PLAYER_IA_BOTTLE_CHATEAU,
+ /* 0x29 */ PLAYER_IA_BOTTLE_FAIRY,
+ /* 0x2A */ PLAYER_IA_MOON_TEAR,
+ /* 0x2B */ PLAYER_IA_DEED_LAND,
+ /* 0x2C */ PLAYER_IA_ROOM_KEY,
+ /* 0x2D */ PLAYER_IA_LETTER_TO_KAFEI,
+ /* 0x2E */ PLAYER_IA_MAGIC_BEANS,
+ /* 0x2F */ PLAYER_IA_DEED_SWAMP,
+ /* 0x30 */ PLAYER_IA_DEED_MOUNTAIN,
+ /* 0x31 */ PLAYER_IA_DEED_OCEAN,
+ /* 0x32 */ PLAYER_IA_32,
+ /* 0x33 */ PLAYER_IA_LETTER_MAMA,
+ /* 0x34 */ PLAYER_IA_34,
+ /* 0x35 */ PLAYER_IA_35,
+ /* 0x36 */ PLAYER_IA_PENDANT_OF_MEMORIES,
+ /* 0x37 */ PLAYER_IA_37,
+ /* 0x38 */ PLAYER_IA_38,
+ /* 0x39 */ PLAYER_IA_39,
+ /* 0x3A */ PLAYER_IA_MASK_TRUTH,
+ /* 0x3B */ PLAYER_IA_MASK_KAFEIS_MASK,
+ /* 0x3C */ PLAYER_IA_MASK_ALL_NIGHT,
+ /* 0x3D */ PLAYER_IA_MASK_BUNNY,
+ /* 0x3E */ PLAYER_IA_MASK_KEATON,
+ /* 0x3F */ PLAYER_IA_MASK_GARO,
+ /* 0x40 */ PLAYER_IA_MASK_ROMANI,
+ /* 0x41 */ PLAYER_IA_MASK_CIRCUS_LEADER,
+ /* 0x42 */ PLAYER_IA_MASK_POSTMAN,
+ /* 0x43 */ PLAYER_IA_MASK_COUPLE,
+ /* 0x44 */ PLAYER_IA_MASK_GREAT_FAIRY,
+ /* 0x45 */ PLAYER_IA_MASK_GIBDO,
+ /* 0x46 */ PLAYER_IA_MASK_DON_GERO,
+ /* 0x47 */ PLAYER_IA_MASK_KAMARO,
+ /* 0x48 */ PLAYER_IA_MASK_CAPTAIN,
+ /* 0x49 */ PLAYER_IA_MASK_STONE,
+ /* 0x4A */ PLAYER_IA_MASK_BREMEN,
+ /* 0x4B */ PLAYER_IA_MASK_BLAST,
+ /* 0x4C */ PLAYER_IA_MASK_SCENTS,
+ /* 0x4D */ PLAYER_IA_MASK_GIANT,
+ /* 0x4E */ PLAYER_IA_MASK_FIERCE_DEITY,
+ /* 0x4F */ PLAYER_IA_MASK_GORON,
+ /* 0x50 */ PLAYER_IA_MASK_ZORA,
+ /* 0x51 */ PLAYER_IA_MASK_DEKU,
+ /* 0x52 */ PLAYER_IA_LENS,
+ /* 0x53 */ PLAYER_IA_MAX
+} PlayerItemAction;
-typedef enum {
+// Relies on B swords related item actions to be contiguous
+#define GET_B_SWORD_FROM_IA(itemAction) ((itemAction) - PLAYER_IA_SWORD_MIN + 1)
+
+typedef enum PlayerBButtonSword {
+ /* 0 */ PLAYER_B_SWORD_NONE,
+ /* 1 */ PLAYER_B_SWORD_KOKIRI = GET_B_SWORD_FROM_IA(PLAYER_IA_SWORD_KOKIRI),
+ /* 2 */ PLAYER_B_SWORD_RAZOR = GET_B_SWORD_FROM_IA(PLAYER_IA_SWORD_RAZOR),
+ /* 3 */ PLAYER_B_SWORD_GILDED = GET_B_SWORD_FROM_IA(PLAYER_IA_SWORD_GILDED),
+ /* 4 */ PLAYER_B_SWORD_MAX
+} PlayerBButtonSword;
+
+// Relies on melee weapon related item actions to be contiguous
+#define GET_MELEE_WEAPON_FROM_IA(itemAction) ((itemAction) - PLAYER_IA_SWORD_MIN + 1)
+
+typedef enum PlayerMeleeWeapon {
+ /* 0 */ PLAYER_MELEEWEAPON_NONE,
+ /* 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),
+ /* 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 bottle-related item actions to be contiguous
+#define GET_BOTTLE_FROM_IA(itemAction) ((itemAction) - PLAYER_IA_BOTTLE_MIN)
+
+typedef enum PlayerBottle {
+ /* -1 */ PLAYER_BOTTLE_NONE = -1,
+ /* 0 */ PLAYER_BOTTLE_EMPTY = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_EMPTY),
+ /* 1 */ PLAYER_BOTTLE_FISH = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_FISH),
+ /* 2 */ PLAYER_BOTTLE_SPRING_WATER = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_SPRING_WATER),
+ /* 3 */ PLAYER_BOTTLE_HOT_SPRING_WATER = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_HOT_SPRING_WATER),
+ /* 4 */ PLAYER_BOTTLE_ZORA_EGG = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_ZORA_EGG),
+ /* 5 */ PLAYER_BOTTLE_DEKU_PRINCESS = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_DEKU_PRINCESS),
+ /* 6 */ PLAYER_BOTTLE_GOLD_DUST = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_GOLD_DUST),
+ /* 7 */ PLAYER_BOTTLE_1C = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_1C),
+ /* 8 */ PLAYER_BOTTLE_SEAHORSE = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_SEAHORSE),
+ /* 9 */ PLAYER_BOTTLE_MUSHROOM = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_MUSHROOM),
+ /* 10 */ PLAYER_BOTTLE_HYLIAN_LOACH = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_HYLIAN_LOACH),
+ /* 11 */ PLAYER_BOTTLE_BUG = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_BUG),
+ /* 12 */ PLAYER_BOTTLE_POE = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_POE),
+ /* 13 */ PLAYER_BOTTLE_BIG_POE = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_BIG_POE),
+ /* 14 */ PLAYER_BOTTLE_POTION_RED = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_POTION_RED),
+ /* 15 */ PLAYER_BOTTLE_POTION_BLUE = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_POTION_BLUE),
+ /* 16 */ PLAYER_BOTTLE_POTION_GREEN = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_POTION_GREEN),
+ /* 17 */ PLAYER_BOTTLE_MILK = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_MILK),
+ /* 18 */ PLAYER_BOTTLE_MILK_HALF = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_MILK_HALF),
+ /* 19 */ PLAYER_BOTTLE_CHATEAU = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_CHATEAU),
+ /* 20 */ PLAYER_BOTTLE_FAIRY = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_FAIRY),
+ /* 21 */ PLAYER_BOTTLE_MAX
+} PlayerBottle;
+
+// Relies on explosive-related item actions to be contiguous
+#define GET_EXPLOSIVE_FROM_IA(itemAction) ((itemAction) - PLAYER_IA_EXPLOSIVE_MIN)
+
+typedef enum PlayerExplosive {
+ /* -1 */ PLAYER_EXPLOSIVE_NONE = -1,
+ /* 0 */ PLAYER_EXPLOSIVE_BOMB = GET_EXPLOSIVE_FROM_IA(PLAYER_IA_BOMB),
+ /* 1 */ PLAYER_EXPLOSIVE_POWDER_KEG = GET_EXPLOSIVE_FROM_IA(PLAYER_IA_POWDER_KEG),
+ /* 2 */ PLAYER_EXPLOSIVE_BOMBCHU = GET_EXPLOSIVE_FROM_IA(PLAYER_IA_BOMBCHU),
+ /* 3 */ PLAYER_EXPLOSIVE_MAX
+} PlayerExplosive;
+
+// Relies on sword item actions to be contiguous
+#define GET_SWORD_FROM_IA(itemAction) ((itemAction) - PLAYER_IA_SWORD_MIN)
+
+typedef enum PlayerSword {
+ /* -1 */ PLAYER_SWORD_NONE = -1,
+ /* 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),
+ /* 4 */ PLAYER_SWORD_MAX
+} PlayerSword;
+
+typedef enum PlayerMeleeWeaponAnimation {
/* 0 */ PLAYER_MWA_FORWARD_SLASH_1H, // Vertical one-handed slash
/* 1 */ PLAYER_MWA_FORWARD_SLASH_2H, // Vertical two-handed slash
/* 2 */ PLAYER_MWA_FORWARD_COMBO_1H, // Third vertical one-handed slash
@@ -175,6 +265,7 @@ typedef enum {
/* 13 */ PLAYER_MWA_STAB_2H, // Targeted two-handed stab
/* 14 */ PLAYER_MWA_STAB_COMBO_1H, // Third targeted one-handed stab
/* 15 */ PLAYER_MWA_STAB_COMBO_2H, // Third targeted two-handed stab
+ // These animations result in double damage
/* 16 */ PLAYER_MWA_FLIPSLASH_START, // unused
/* 17 */ PLAYER_MWA_JUMPSLASH_START, // Start of jumpslash
/* 18 */ PLAYER_MWA_ZORA_JUMPKICK_START, // Start of Zora jump attack
@@ -196,41 +287,217 @@ typedef enum {
/* 34 */ PLAYER_MWA_MAX
} PlayerMeleeWeaponAnimation;
-typedef struct {
- /* 0x00 */ f32 unk_00;
- /* 0x04 */ f32 unk_04;
+typedef enum PlayerDoorType {
+ /* -1 */ PLAYER_DOORTYPE_TALKING = -1, // Displays a message instead of opening
+ /* 0 */ PLAYER_DOORTYPE_NONE,
+ /* 1 */ PLAYER_DOORTYPE_HANDLE,
+ /* 2 */ PLAYER_DOORTYPE_SLIDING,
+ /* 3 */ PLAYER_DOORTYPE_FAKE, // Unused? OoT leftover (?)
+ /* 4 */ PLAYER_DOORTYPE_STAIRCASE,
+ /* 5 */ PLAYER_DOORTYPE_PROXIMITY
+} PlayerDoorType;
+
+typedef enum PlayerAnimType {
+ /* 0 */ PLAYER_ANIMTYPE_DEFAULT, // DEFAULT
+ /* 1 */ PLAYER_ANIMTYPE_1,
+ /* 2 */ PLAYER_ANIMTYPE_2,
+ /* 3 */ PLAYER_ANIMTYPE_3, // Two hand weapon
+ /* 4 */ PLAYER_ANIMTYPE_4,
+ /* 5 */ PLAYER_ANIMTYPE_5,
+ /* 6 */ PLAYER_ANIMTYPE_MAX
+} PlayerAnimType;
+
+typedef enum PlayerModelType {
+ // left hand
+ /* 0 */ PLAYER_MODELTYPE_LH_OPEN,
+ /* 1 */ PLAYER_MODELTYPE_LH_CLOSED,
+ /* 2 */ PLAYER_MODELTYPE_LH_ONE_HAND_SWORD,
+ /* 3 */ PLAYER_MODELTYPE_LH_TWO_HAND_SWORD,
+ /* 4 */ PLAYER_MODELTYPE_LH_4,
+ /* 5 */ PLAYER_MODELTYPE_LH_BOTTLE,
+ // right hand
+ /* 6 */ PLAYER_MODELTYPE_RH_OPEN,
+ /* 7 */ PLAYER_MODELTYPE_RH_CLOSED,
+ /* 8 */ PLAYER_MODELTYPE_RH_SHIELD,
+ /* 9 */ PLAYER_MODELTYPE_RH_BOW,
+ /* 10 */ PLAYER_MODELTYPE_RH_INSTRUMENT,
+ /* 11 */ PLAYER_MODELTYPE_RH_HOOKSHOT,
+ // sheath
+ /* 12 */ PLAYER_MODELTYPE_SHEATH_12,
+ /* 13 */ PLAYER_MODELTYPE_SHEATH_13,
+ /* 14 */ PLAYER_MODELTYPE_SHEATH_14,
+ /* 15 */ PLAYER_MODELTYPE_SHEATH_15,
+ // waist
+ /* 16 */ PLAYER_MODELTYPE_WAIST,
+ /* 17 */ PLAYER_MODELTYPE_17, // NULL?
+ /* 18 */ PLAYER_MODELTYPE_MAX,
+ /* 255 */ PLAYER_MODELTYPE_RH_FF = 0xFF // disable shield collider, cutscene-specific
+} PlayerModelType;
+
+typedef struct PlayerModelIndices {
+ /* 0x0 */ u8 modelAnimType; // PlayerAnimType enum
+ /* 0x1 */ u8 leftHandType; // PlayerModelType enum
+ /* 0x2 */ u8 rightHandType; // PlayerModelType enum
+ /* 0x3 */ u8 sheathType; // PlayerModelType enum
+ /* 0x4 */ u8 waistType; // PlayerModelType enum
+} PlayerModelIndices; // size = 0x5
+
+typedef enum PlayerModelGroup {
+ /* 0 */ PLAYER_MODELGROUP_0,
+ /* 1 */ PLAYER_MODELGROUP_1,
+ /* 2 */ PLAYER_MODELGROUP_ONE_HAND_SWORD,
+ /* 3 */ PLAYER_MODELGROUP_DEFAULT, // non-specific models, for items that don't have particular link models
+ /* 4 */ PLAYER_MODELGROUP_4,
+ /* 5 */ PLAYER_MODELGROUP_TWO_HAND_SWORD,
+ /* 6 */ PLAYER_MODELGROUP_BOW,
+ /* 7 */ PLAYER_MODELGROUP_EXPLOSIVES,
+ /* 8 */ PLAYER_MODELGROUP_8,
+ /* 9 */ PLAYER_MODELGROUP_HOOKSHOT,
+ /* 10 */ PLAYER_MODELGROUP_STICK,
+ /* 11 */ PLAYER_MODELGROUP_INSTRUMENT,
+ /* 12 */ PLAYER_MODELGROUP_BOTTLE,
+ /* 13 */ PLAYER_MODELGROUP_13,
+ /* 14 */ PLAYER_MODELGROUP_ZORA_FINS,
+ /* 15 */ PLAYER_MODELGROUP_MAX
+} PlayerModelGroup;
+
+typedef enum PlayerEyeIndex {
+ /* 0 */ PLAYER_EYES_OPEN,
+ /* 1 */ PLAYER_EYES_HALF,
+ /* 2 */ PLAYER_EYES_CLOSED,
+ /* 3 */ PLAYER_EYES_ROLL_RIGHT,
+ /* 4 */ PLAYER_EYES_ROLL_LEFT,
+ /* 5 */ PLAYER_EYES_ROLL_UP,
+ /* 6 */ PLAYER_EYES_ROLL_DOWN,
+ /* 7 */ PLAYER_EYES_7,
+ /* 8 */ PLAYER_EYES_MAX
+} PlayerEyeIndex;
+
+typedef enum PlayerMouthIndex {
+ /* 0 */ PLAYER_MOUTH_CLOSED,
+ /* 1 */ PLAYER_MOUTH_TEETH,
+ /* 2 */ PLAYER_MOUTH_ANGRY,
+ /* 3 */ PLAYER_MOUTH_HAPPY,
+ /* 4 */ PLAYER_MOUTH_MAX
+} PlayerMouthIndex;
+
+typedef enum PlayerFacialExpression {
+ /* 0 */ PLAYER_FACE_0,
+ /* 1 */ PLAYER_FACE_1,
+ /* 2 */ PLAYER_FACE_2,
+ /* 3 */ PLAYER_FACE_3,
+ /* 4 */ PLAYER_FACE_4,
+ /* 5 */ PLAYER_FACE_5,
+ /* 6 */ PLAYER_FACE_6,
+ /* 7 */ PLAYER_FACE_7,
+ /* 8 */ PLAYER_FACE_8,
+ /* 9 */ PLAYER_FACE_9,
+ /* 10 */ PLAYER_FACE_10,
+ /* 11 */ PLAYER_FACE_11,
+ /* 12 */ PLAYER_FACE_12,
+ /* 13 */ PLAYER_FACE_13,
+ /* 14 */ PLAYER_FACE_14,
+ /* 15 */ PLAYER_FACE_15
+} PlayerFacialExpression;
+
+typedef enum PlayerLimb {
+ /* 0x00 */ PLAYER_LIMB_NONE,
+ /* 0x01 */ PLAYER_LIMB_ROOT,
+ /* 0x02 */ PLAYER_LIMB_WAIST,
+ /* 0x03 */ PLAYER_LIMB_LOWER_ROOT,
+ /* 0x04 */ PLAYER_LIMB_RIGHT_THIGH,
+ /* 0x05 */ PLAYER_LIMB_RIGHT_SHIN,
+ /* 0x06 */ PLAYER_LIMB_RIGHT_FOOT,
+ /* 0x07 */ PLAYER_LIMB_LEFT_THIGH,
+ /* 0x08 */ PLAYER_LIMB_LEFT_SHIN,
+ /* 0x09 */ PLAYER_LIMB_LEFT_FOOT,
+ /* 0x0A */ PLAYER_LIMB_UPPER_ROOT,
+ /* 0x0B */ PLAYER_LIMB_HEAD,
+ /* 0x0C */ PLAYER_LIMB_HAT,
+ /* 0x0D */ PLAYER_LIMB_COLLAR,
+ /* 0x0E */ PLAYER_LIMB_LEFT_SHOULDER,
+ /* 0x0F */ PLAYER_LIMB_LEFT_FOREARM,
+ /* 0x10 */ PLAYER_LIMB_LEFT_HAND,
+ /* 0x11 */ PLAYER_LIMB_RIGHT_SHOULDER,
+ /* 0x12 */ PLAYER_LIMB_RIGHT_FOREARM,
+ /* 0x13 */ PLAYER_LIMB_RIGHT_HAND,
+ /* 0x14 */ PLAYER_LIMB_SHEATH,
+ /* 0x15 */ PLAYER_LIMB_TORSO,
+ /* 0x16 */ PLAYER_LIMB_MAX
+} PlayerLimb;
+
+typedef enum PlayerBodyPart {
+ /* 0x00 */ PLAYER_BODYPART_WAIST, // PLAYER_LIMB_WAIST
+ /* 0x01 */ PLAYER_BODYPART_RIGHT_THIGH, // PLAYER_LIMB_RIGHT_THIGH
+ /* 0x02 */ PLAYER_BODYPART_RIGHT_SHIN, // PLAYER_LIMB_RIGHT_SHIN
+ /* 0x03 */ PLAYER_BODYPART_RIGHT_FOOT, // PLAYER_LIMB_RIGHT_FOOT
+ /* 0x04 */ PLAYER_BODYPART_LEFT_THIGH, // PLAYER_LIMB_LEFT_THIGH
+ /* 0x05 */ PLAYER_BODYPART_LEFT_SHIN, // PLAYER_LIMB_LEFT_SHIN
+ /* 0x06 */ PLAYER_BODYPART_LEFT_FOOT, // PLAYER_LIMB_LEFT_FOOT
+ /* 0x07 */ PLAYER_BODYPART_HEAD, // PLAYER_LIMB_HEAD
+ /* 0x08 */ PLAYER_BODYPART_HAT, // PLAYER_LIMB_HAT
+ /* 0x09 */ PLAYER_BODYPART_COLLAR, // PLAYER_LIMB_COLLAR
+ /* 0x0A */ PLAYER_BODYPART_LEFT_SHOULDER, // PLAYER_LIMB_LEFT_SHOULDER
+ /* 0x0B */ PLAYER_BODYPART_LEFT_FOREARM, // PLAYER_LIMB_LEFT_FOREARM
+ /* 0x0C */ PLAYER_BODYPART_LEFT_HAND, // PLAYER_LIMB_LEFT_HAND
+ /* 0x0D */ PLAYER_BODYPART_RIGHT_SHOULDER, // PLAYER_LIMB_R_SHOULDER
+ /* 0x0E */ PLAYER_BODYPART_RIGHT_FOREARM, // PLAYER_LIMB_R_FOREARM
+ /* 0x0F */ PLAYER_BODYPART_RIGHT_HAND, // PLAYER_LIMB_R_HAND
+ /* 0x10 */ PLAYER_BODYPART_SHEATH, // PLAYER_LIMB_SHEATH
+ /* 0x11 */ PLAYER_BODYPART_TORSO, // PLAYER_LIMB_TORSO
+ /* 0x12 */ PLAYER_BODYPART_MAX
+} PlayerBodyPart;
+
+typedef struct PlayerAnimationFrame {
+ /* 0x000 */ Vec3s frameTable[PLAYER_LIMB_MAX];
+ /* 0x108 */ s16 appearanceInfo; // bitpack containing the face and hands info
+} PlayerAnimationFrame; // size = 0x10A
+
+#define PLAYER_LIMB_BUF_SIZE (ALIGN16(sizeof(PlayerAnimationFrame)) + 0xF)
+
+#define GET_APPEARANCE_FROM_JOINT_TABLE(jointTable) (((PlayerAnimationFrame *)(jointTable))->appearanceInfo)
+#define GET_EYE_INDEX_FROM_JOINT_TABLE(jointTable) ((GET_APPEARANCE_FROM_JOINT_TABLE(jointTable) & 0xF) - 1)
+#define GET_MOUTH_INDEX_FROM_JOINT_TABLE(jointTable) (((GET_APPEARANCE_FROM_JOINT_TABLE(jointTable) >> 4) & 0xF) - 1)
+
+// Note the returned value from this macro needs to be shifted
+#define GET_LEFT_HAND_INDEX_FROM_JOINT_TABLE(jointTable) (GET_APPEARANCE_FROM_JOINT_TABLE(jointTable) & 0xF000)
+#define GET_RIGHT_HAND_INDEX_FROM_JOINT_TABLE(jointTable) (GET_APPEARANCE_FROM_JOINT_TABLE(jointTable) & 0x0F00)
+
+typedef struct PlayerAgeProperties {
+ /* 0x00 */ f32 unk_00; // ceilingCheckHeight?
+ /* 0x04 */ f32 shadowScale;
/* 0x08 */ f32 unk_08;
/* 0x0C */ f32 unk_0C;
/* 0x10 */ f32 unk_10;
- /* 0x14 */ f32 unk_14;
- /* 0x18 */ f32 unk_18;
- /* 0x1C */ f32 unk_1C;
- /* 0x20 */ f32 unk_20;
- /* 0x24 */ f32 unk_24;
- /* 0x28 */ f32 unk_28;
- /* 0x2C */ f32 unk_2C;
- /* 0x30 */ f32 unk_30;
+ /* 0x14 */ f32 unk_14; // compared to wallHeight
+ /* 0x18 */ f32 unk_18; // compared to wallHeight
+ /* 0x1C */ f32 unk_1C; // compared to wallHeight
+ /* 0x20 */ f32 unk_20; // unused?
+ /* 0x24 */ f32 unk_24; // water stuff // depthInWater
+ /* 0x28 */ f32 unk_28; // water stuff // depthInWater
+ /* 0x2C */ f32 unk_2C; // water stuff // depthInWater
+ /* 0x30 */ f32 unk_30; // water stuff // depthInWater
/* 0x34 */ f32 unk_34;
- /* 0x38 */ f32 unk_38;
+ /* 0x38 */ f32 unk_38; // wallCheckHeight?
/* 0x3C */ f32 unk_3C;
/* 0x40 */ f32 unk_40;
/* 0x44 */ Vec3s unk_44;
/* 0x4A */ Vec3s unk_4A[4];
/* 0x62 */ Vec3s unk_62[4];
/* 0x7A */ Vec3s unk_7A[4];
- /* 0x92 */ u16 unk_92;
- /* 0x94 */ u16 unk_94;
+ /* 0x92 */ u16 voiceSfxIdOffset;
+ /* 0x94 */ u16 surfaceSfxIdOffset;
/* 0x98 */ f32 unk_98;
/* 0x9C */ f32 unk_9C;
- /* 0xA0 */ LinkAnimationHeader* unk_A0;
- /* 0xA4 */ LinkAnimationHeader* unk_A4;
- /* 0xA8 */ LinkAnimationHeader* unk_A8;
- /* 0xAC */ LinkAnimationHeader* unk_AC;
- /* 0xB0 */ LinkAnimationHeader* unk_B0;
- /* 0xB4 */ LinkAnimationHeader* unk_B4[4];
- /* 0xC4 */ LinkAnimationHeader* unk_C4[2];
- /* 0xCC */ LinkAnimationHeader* unk_CC[2];
- /* 0xD4 */ LinkAnimationHeader* unk_D4[2];
+ /* 0xA0 */ PlayerAnimationHeader* unk_A0;
+ /* 0xA4 */ PlayerAnimationHeader* unk_A4;
+ /* 0xA8 */ PlayerAnimationHeader* unk_A8;
+ /* 0xAC */ PlayerAnimationHeader* unk_AC;
+ /* 0xB0 */ PlayerAnimationHeader* unk_B0;
+ /* 0xB4 */ PlayerAnimationHeader* unk_B4[4];
+ /* 0xC4 */ PlayerAnimationHeader* unk_C4[2];
+ /* 0xCC */ PlayerAnimationHeader* unk_CC[2];
+ /* 0xD4 */ PlayerAnimationHeader* unk_D4[2];
} PlayerAgeProperties; // size = 0xDC
typedef struct {
@@ -240,12 +507,9 @@ typedef struct {
} WeaponInfo; // size = 0x1C
-typedef void (*PlayerFuncD58)(struct PlayState*, struct Player*);
-
typedef struct {
/* 0x00 */ u8 unk_00;
/* 0x01 */ u8 alpha;
- /* 0x02 */ char unk_02[2]; // probably alignment padding
/* 0x04 */ MtxF mf;
} struct_80122D44_arg1_unk_04; // size = 0x44
@@ -264,6 +528,151 @@ typedef struct struct_80122744_arg1 {
/* 0x4 */ Vec3s* unk_04;
} struct_80122744_arg1; // size = 0x8
+typedef enum PlayerCsMode {
+ /* 0x00 */ PLAYER_CSMODE_0,
+ /* 0x01 */ PLAYER_CSMODE_1,
+ /* 0x02 */ PLAYER_CSMODE_2,
+ /* 0x03 */ PLAYER_CSMODE_3,
+ /* 0x04 */ PLAYER_CSMODE_4,
+ /* 0x05 */ PLAYER_CSMODE_5,
+ /* 0x06 */ PLAYER_CSMODE_END,
+ /* 0x07 */ PLAYER_CSMODE_WAIT,
+ /* 0x08 */ PLAYER_CSMODE_8,
+ /* 0x09 */ PLAYER_CSMODE_9,
+ /* 0x0A */ PLAYER_CSMODE_10,
+ /* 0x0B */ PLAYER_CSMODE_11,
+ /* 0x0C */ PLAYER_CSMODE_12,
+ /* 0x0D */ PLAYER_CSMODE_13,
+ /* 0x0E */ PLAYER_CSMODE_14,
+ /* 0x0F */ PLAYER_CSMODE_15,
+ /* 0x10 */ PLAYER_CSMODE_16,
+ /* 0x11 */ PLAYER_CSMODE_17,
+ /* 0x12 */ PLAYER_CSMODE_18,
+ /* 0x13 */ PLAYER_CSMODE_19,
+ /* 0x14 */ PLAYER_CSMODE_20,
+ /* 0x15 */ PLAYER_CSMODE_21,
+ /* 0x16 */ PLAYER_CSMODE_22,
+ /* 0x17 */ PLAYER_CSMODE_23,
+ /* 0x18 */ PLAYER_CSMODE_24,
+ /* 0x19 */ PLAYER_CSMODE_25,
+ /* 0x1A */ PLAYER_CSMODE_26,
+ /* 0x1B */ PLAYER_CSMODE_27,
+ /* 0x1C */ PLAYER_CSMODE_28,
+ /* 0x1D */ PLAYER_CSMODE_29,
+ /* 0x1E */ PLAYER_CSMODE_30,
+ /* 0x1F */ PLAYER_CSMODE_31,
+ /* 0x20 */ PLAYER_CSMODE_32,
+ /* 0x21 */ PLAYER_CSMODE_33,
+ /* 0x22 */ PLAYER_CSMODE_34,
+ /* 0x23 */ PLAYER_CSMODE_35,
+ /* 0x24 */ PLAYER_CSMODE_36,
+ /* 0x25 */ PLAYER_CSMODE_37,
+ /* 0x26 */ PLAYER_CSMODE_38,
+ /* 0x27 */ PLAYER_CSMODE_39,
+ /* 0x28 */ PLAYER_CSMODE_40,
+ /* 0x29 */ PLAYER_CSMODE_41,
+ /* 0x2A */ PLAYER_CSMODE_42,
+ /* 0x2B */ PLAYER_CSMODE_43,
+ /* 0x2C */ PLAYER_CSMODE_44,
+ /* 0x2D */ PLAYER_CSMODE_45,
+ /* 0x2E */ PLAYER_CSMODE_46,
+ /* 0x2F */ PLAYER_CSMODE_47,
+ /* 0x30 */ PLAYER_CSMODE_48,
+ /* 0x31 */ PLAYER_CSMODE_49,
+ /* 0x32 */ PLAYER_CSMODE_50,
+ /* 0x33 */ PLAYER_CSMODE_51,
+ /* 0x34 */ PLAYER_CSMODE_52,
+ /* 0x35 */ PLAYER_CSMODE_53,
+ /* 0x36 */ PLAYER_CSMODE_54,
+ /* 0x37 */ PLAYER_CSMODE_55,
+ /* 0x38 */ PLAYER_CSMODE_56,
+ /* 0x39 */ PLAYER_CSMODE_57,
+ /* 0x3A */ PLAYER_CSMODE_58,
+ /* 0x3B */ PLAYER_CSMODE_59,
+ /* 0x3C */ PLAYER_CSMODE_60,
+ /* 0x3D */ PLAYER_CSMODE_61,
+ /* 0x3E */ PLAYER_CSMODE_62,
+ /* 0x3F */ PLAYER_CSMODE_63,
+ /* 0x40 */ PLAYER_CSMODE_64,
+ /* 0x41 */ PLAYER_CSMODE_65,
+ /* 0x42 */ PLAYER_CSMODE_66,
+ /* 0x43 */ PLAYER_CSMODE_67,
+ /* 0x44 */ PLAYER_CSMODE_68,
+ /* 0x45 */ PLAYER_CSMODE_69,
+ /* 0x46 */ PLAYER_CSMODE_70,
+ /* 0x47 */ PLAYER_CSMODE_71,
+ /* 0x48 */ PLAYER_CSMODE_72,
+ /* 0x49 */ PLAYER_CSMODE_73,
+ /* 0x4A */ PLAYER_CSMODE_74,
+ /* 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,
+ /* 0x53 */ PLAYER_CSMODE_83,
+ /* 0x54 */ PLAYER_CSMODE_84,
+ /* 0x55 */ PLAYER_CSMODE_85,
+ /* 0x56 */ PLAYER_CSMODE_86,
+ /* 0x57 */ PLAYER_CSMODE_87,
+ /* 0x58 */ PLAYER_CSMODE_88,
+ /* 0x59 */ PLAYER_CSMODE_89,
+ /* 0x5A */ PLAYER_CSMODE_90,
+ /* 0x5B */ PLAYER_CSMODE_91,
+ /* 0x5C */ PLAYER_CSMODE_92,
+ /* 0x5D */ PLAYER_CSMODE_93,
+ /* 0x5E */ PLAYER_CSMODE_94,
+ /* 0x5F */ PLAYER_CSMODE_95,
+ /* 0x60 */ PLAYER_CSMODE_96,
+ /* 0x61 */ PLAYER_CSMODE_97,
+ /* 0x62 */ PLAYER_CSMODE_98,
+ /* 0x63 */ PLAYER_CSMODE_99,
+ /* 0x64 */ PLAYER_CSMODE_100,
+ /* 0x65 */ PLAYER_CSMODE_101,
+ /* 0x66 */ PLAYER_CSMODE_102,
+ /* 0x67 */ PLAYER_CSMODE_103,
+ /* 0x68 */ PLAYER_CSMODE_104,
+ /* 0x69 */ PLAYER_CSMODE_105,
+ /* 0x6A */ PLAYER_CSMODE_106,
+ /* 0x6B */ PLAYER_CSMODE_107,
+ /* 0x6C */ PLAYER_CSMODE_108,
+ /* 0x6D */ PLAYER_CSMODE_109,
+ /* 0x6E */ PLAYER_CSMODE_110,
+ /* 0x6F */ PLAYER_CSMODE_111,
+ /* 0x70 */ PLAYER_CSMODE_112,
+ /* 0x71 */ PLAYER_CSMODE_113,
+ /* 0x72 */ PLAYER_CSMODE_114,
+ /* 0x73 */ PLAYER_CSMODE_115,
+ /* 0x74 */ PLAYER_CSMODE_116,
+ /* 0x75 */ PLAYER_CSMODE_117,
+ /* 0x76 */ PLAYER_CSMODE_118,
+ /* 0x77 */ PLAYER_CSMODE_119,
+ /* 0x78 */ PLAYER_CSMODE_120,
+ /* 0x79 */ PLAYER_CSMODE_121,
+ /* 0x7A */ PLAYER_CSMODE_122,
+ /* 0x7B */ PLAYER_CSMODE_123,
+ /* 0x7C */ PLAYER_CSMODE_124,
+ /* 0x7D */ PLAYER_CSMODE_125,
+ /* 0x7E */ PLAYER_CSMODE_126,
+ /* 0x7F */ PLAYER_CSMODE_127,
+ /* 0x80 */ PLAYER_CSMODE_128,
+ /* 0x81 */ PLAYER_CSMODE_129,
+ /* 0x82 */ PLAYER_CSMODE_130,
+ /* 0x83 */ PLAYER_CSMODE_131,
+ /* 0x84 */ PLAYER_CSMODE_132,
+ /* 0x85 */ PLAYER_CSMODE_133,
+ /* 0x86 */ PLAYER_CSMODE_134,
+ /* 0x87 */ PLAYER_CSMODE_135,
+ /* 0x88 */ PLAYER_CSMODE_136,
+ /* 0x89 */ PLAYER_CSMODE_137,
+ /* 0x8A */ PLAYER_CSMODE_138,
+ /* 0x8B */ PLAYER_CSMODE_139,
+ /* 0x8C */ PLAYER_CSMODE_MAX
+} PlayerCsMode;
+
+
//
#define PLAYER_STATE1_1 (1 << 0)
//
@@ -272,7 +681,7 @@ typedef struct struct_80122744_arg1 {
#define PLAYER_STATE1_4 (1 << 2)
//
#define PLAYER_STATE1_8 (1 << 3)
-//
+// Zora electric shield
#define PLAYER_STATE1_10 (1 << 4)
//
#define PLAYER_STATE1_20 (1 << 5)
@@ -326,7 +735,7 @@ typedef struct struct_80122744_arg1 {
#define PLAYER_STATE1_20000000 (1 << 29)
//
#define PLAYER_STATE1_40000000 (1 << 30)
-//
+// Related to exit a grotto
#define PLAYER_STATE1_80000000 (1 << 31)
@@ -388,15 +797,15 @@ typedef struct struct_80122744_arg1 {
#define PLAYER_STATE2_8000000 (1 << 27)
//
#define PLAYER_STATE2_10000000 (1 << 28)
-//
+// Disable drawing player
#define PLAYER_STATE2_20000000 (1 << 29)
-//
+// Lunge: small forward boost at the end of certain attack animations
#define PLAYER_STATE2_40000000 (1 << 30)
-//
+// Void-out
#define PLAYER_STATE2_80000000 (1 << 31)
-//
+// Ignores collision with floor?
#define PLAYER_STATE3_1 (1 << 0)
//
#define PLAYER_STATE3_2 (1 << 1)
@@ -412,7 +821,7 @@ typedef struct struct_80122744_arg1 {
#define PLAYER_STATE3_40 (1 << 6)
//
#define PLAYER_STATE3_80 (1 << 7)
-//
+// Related to form Deku
#define PLAYER_STATE3_100 (1 << 8)
//
#define PLAYER_STATE3_200 (1 << 9)
@@ -420,25 +829,25 @@ typedef struct struct_80122744_arg1 {
#define PLAYER_STATE3_400 (1 << 10)
//
#define PLAYER_STATE3_800 (1 << 11)
-//
+// goron curled
#define PLAYER_STATE3_1000 (1 << 12)
//
#define PLAYER_STATE3_2000 (1 << 13)
//
#define PLAYER_STATE3_4000 (1 << 14)
-//
+// Swimming Zora
#define PLAYER_STATE3_8000 (1 << 15)
//
#define PLAYER_STATE3_10000 (1 << 16)
//
#define PLAYER_STATE3_20000 (1 << 17)
-//
+// Related to form Deku
#define PLAYER_STATE3_40000 (1 << 18)
//
#define PLAYER_STATE3_80000 (1 << 19)
//
#define PLAYER_STATE3_100000 (1 << 20)
-//
+// Deku hopping?
#define PLAYER_STATE3_200000 (1 << 21)
//
#define PLAYER_STATE3_400000 (1 << 22)
@@ -462,24 +871,52 @@ typedef struct struct_80122744_arg1 {
#define PLAYER_STATE3_80000000 (1 << 31)
+#define PLAYER_GET_INITMODE(thisx) (((thisx)->params & 0xF00) >> 8)
+
+typedef enum PlayerInitMode {
+ /* 0x0 */ PLAYER_INITMODE_0,
+ /* 0x1 */ PLAYER_INITMODE_1, // Spawning after pulling/putting-back Master sword // OoT leftover
+ /* 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 */ PLAYER_INITMODE_8,
+ /* 0x9 */ PLAYER_INITMODE_9,
+ /* 0xA */ PLAYER_INITMODE_A,
+ /* 0xB */ PLAYER_INITMODE_B,
+ /* 0xC */ PLAYER_INITMODE_TELESCOPE,
+ /* 0xD */ PLAYER_INITMODE_D,
+ /* 0xE */ PLAYER_INITMODE_E,
+ /* 0xF */ PLAYER_INITMODE_F
+} PlayerInitMode;
+
+#define PLAYER_PARAMS(startBgCamIndex, initMode) ((startBgCamIndex & 0xFF) | ((initMode & 0xF) << 8))
+
+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);
+
+
typedef struct Player {
/* 0x000 */ Actor actor;
/* 0x144 */ s8 currentShield;
/* 0x145 */ s8 currentBoots;
/* 0x146 */ s8 heldItemButton;
- /* 0x147 */ s8 itemActionParam;
- /* 0x148 */ u8 heldItemId;
+ /* 0x147 */ s8 heldItemAction; // PlayerItemAction enum
+ /* 0x148 */ u8 heldItemId; // ItemId enum
/* 0x149 */ s8 prevBoots;
- /* 0x14A */ s8 heldItemActionParam;
- /* 0x14B */ u8 transformation;
- /* 0x14C */ u8 modelGroup;
+ /* 0x14A */ s8 itemAction; // PlayerItemAction enum
+ /* 0x14B */ u8 transformation; // PlayerTransformation enum
+ /* 0x14C */ u8 modelGroup; // PlayerModelGroup enum
/* 0x14D */ u8 nextModelGroup;
/* 0x14E */ s8 unk_14E;
- /* 0x14F */ u8 modelAnimType;
+ /* 0x14F */ u8 modelAnimType; // PlayerAnimType enum
/* 0x150 */ u8 leftHandType;
/* 0x151 */ u8 rightHandType;
/* 0x152 */ u8 sheathType;
- /* 0x153 */ u8 currentMask;
+ /* 0x153 */ u8 currentMask; // PlayerMask enum
/* 0x154 */ s8 unk_154;
/* 0x155 */ u8 prevMask;
/* 0x158 */ Gfx** rightHandDLists;
@@ -529,44 +966,50 @@ typedef struct Player {
/* 0x350 */ PosRot leftHandWorld;
/* 0x364 */ Actor* rightHandActor;
/* 0x368 */ PosRot rightHandWorld;
- /* 0x37C */ s8 doorType;
+ /* 0x37C */ s8 doorType; // PlayerDoorType enum
/* 0x37D */ s8 doorDirection;
/* 0x37E */ s8 doorTimer;
/* 0x37F */ s8 doorNext; // used with spiral staircase
/* 0x380 */ Actor* doorActor;
- /* 0x384 */ s16 getItemId;
+ /* 0x384 */ s16 getItemId; // GetItemId enum
/* 0x386 */ u16 getItemDirection;
/* 0x388 */ Actor* interactRangeActor;
/* 0x38C */ s8 mountSide;
/* 0x390 */ Actor* rideActor;
- /* 0x394 */ u8 csMode;
- /* 0x395 */ u8 unk_395; // prevCsMode?
- /* 0x396 */ u8 unk_396;
- /* 0x397 */ u8 unk_397;
+ /* 0x394 */ u8 csMode; // PlayerCsMode enum
+ /* 0x395 */ u8 prevCsMode; // PlayerCsMode enum
+ /* 0x396 */ u8 unk_396; // currentActorActionId?
+ /* 0x397 */ u8 unk_397; // PlayerDoorType enum
/* 0x398 */ Actor* unk_398;
- /* 0x39C */ s16 unk_39C;
- /* 0x39E */ s16 unk_39E;
+ /* 0x39C */ UNK_TYPE1 unk_39C[0x4];
/* 0x3A0 */ Vec3f unk_3A0;
/* 0x3AC */ Vec3f unk_3AC;
/* 0x3B8 */ u16 unk_3B8;
/* 0x3BA */ s16 unk_3BA;
- /* 0x3BC */ s16 unk_3BC;
+ /* 0x3BC */ s16 subCamId;
/* 0x3BE */ char unk_3BE[2];
/* 0x3C0 */ Vec3f unk_3C0;
/* 0x3CC */ s16 unk_3CC;
/* 0x3CE */ s8 unk_3CE;
/* 0x3CF */ u8 unk_3CF;
/* 0x3D0 */ struct_80122D44_arg1 unk_3D0;
- /* 0x404 */ UNK_TYPE1 unk_404[0x34];
+ /* 0x4E4 */ UNK_TYPE1 unk_4E4[0x20];
+ /* 0x504 */ LightNode* lightNode;
+ /* 0x508 */ LightInfo lightInfo;
/* 0x518 */ ColliderCylinder cylinder;
/* 0x564 */ ColliderQuad meleeWeaponQuads[2];
/* 0x664 */ ColliderQuad shieldQuad;
/* 0x6E4 */ ColliderCylinder shieldCylinder;
- /* 0x730 */ Actor* unk_730;
+ /* 0x730 */ Actor* targetedActor; // Z/L-Targeted actor
/* 0x734 */ char unk_734[4];
/* 0x738 */ s32 unk_738;
/* 0x73C */ s32 meleeWeaponEffectIndex[3];
- /* 0x748 */ char unk_748[0x320];
+ /* 0x748 */ PlayerActionFunc actionFunc;
+ /* 0x74C */ u8 jointTableBuffer[PLAYER_LIMB_BUF_SIZE];
+ /* 0x7EB */ u8 morphTableBuffer[PLAYER_LIMB_BUF_SIZE];
+ /* 0x88A */ u8 blendTableBuffer[PLAYER_LIMB_BUF_SIZE];
+ /* 0x929 */ u8 unk_929[PLAYER_LIMB_BUF_SIZE];
+ /* 0x9C8 */ u8 unk_9C8[PLAYER_LIMB_BUF_SIZE];
/* 0xA68 */ PlayerAgeProperties* ageProperties; // repurposed as "transformation properties"?
/* 0xA6C */ u32 stateFlags1;
/* 0xA70 */ u32 stateFlags2;
@@ -575,30 +1018,30 @@ typedef struct Player {
/* 0xA7C */ Actor* boomerangActor;
/* 0xA80 */ Actor* tatlActor;
/* 0xA84 */ s16 tatlTextId;
- /* 0xA86 */ s8 unk_A86;
- /* 0xA87 */ s8 exchangeItemId;
- /* 0xA88 */ Actor* targetActor;
- /* 0xA8C */ f32 targetActorDistance;
+ /* 0xA86 */ s8 csId;
+ /* 0xA87 */ s8 exchangeItemId; // PlayerItemAction enum
+ /* 0xA88 */ Actor* talkActor;
+ /* 0xA8C */ f32 talkActorDistance;
/* 0xA90 */ Actor* unk_A90;
/* 0xA94 */ f32 unk_A94;
/* 0xA98 */ Actor* unk_A98;
- /* 0xA9C */ f32 unk_A9C;
- /* 0xAA0 */ f32 unk_AA0;
+ /* 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;
- /* 0xAA6 */ u16 unk_AA6;
+ /* 0xAA6 */ u16 unk_AA6; // flags of some kind
/* 0xAA8 */ s16 unk_AA8;
/* 0xAAA */ s16 unk_AAA;
- /* 0xAAC */ Vec3s unk_AAC;
- /* 0xAB2 */ Vec3s unk_AB2;
+ /* 0xAAC */ Vec3s headLimbRot;
+ /* 0xAB2 */ Vec3s upperLimbRot;
/* 0xAB8 */ f32 unk_AB8;
/* 0xABC */ f32 unk_ABC;
/* 0xAC0 */ f32 unk_AC0;
- /* 0xAC4 */ void* unk_AC4;
+ /* 0xAC4 */ PlayerFuncAC4 unk_AC4;
/* 0xAC8 */ f32 unk_AC8;
/* 0xACC */ s16 unk_ACC;
/* 0xACE */ s8 unk_ACE;
- /* 0xACF */ u8 unk_ACF;
+ /* 0xACF */ u8 putAwayCountdown; // Frames to wait before showing "Put Away" on A
/* 0xAD0 */ f32 linearVelocity;
/* 0xAD4 */ s16 currentYaw;
/* 0xAD6 */ s16 targetYaw;
@@ -608,15 +1051,19 @@ typedef struct Player {
/* 0xADC */ s8 unk_ADC;
/* 0xADD */ s8 unk_ADD;
/* 0xADE */ u8 unk_ADE;
- /* 0xADF */ s8 unk_ADF[4];
- /* 0xAE3 */ s8 unk_AE3[4];
+ /* 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
/* 0xAE8 */ s16 unk_AE8; // multipurpose timer
/* 0xAEC */ f32 unk_AEC;
- /* 0xAF0 */ Vec3f unk_AF0[2];
- /* 0xB08 */ f32 unk_B08[8];
+ /* 0xAF0 */ union { // TODO: this may be an union of two structs
+ Vec3f unk_AF0[2];
+ f32 arr_AF0[6];
+ };
+ /* 0xB08 */ f32 unk_B08[2]; // TODO: Investigate if this member actually is an array
+ /* 0xB10 */ f32 unk_B10[6];
/* 0xB28 */ s16 unk_B28; //Burning stick timer?
- /* 0xB2A */ s8 unk_B2A;
+ /* 0xB2A */ s8 getItemDrawIdPlusOne;
/* 0xB2B */ s8 unk_B2B;
/* 0xB2C */ f32 windSpeed;
/* 0xB30 */ s16 windAngleX;
@@ -630,24 +1077,24 @@ typedef struct Player {
/* 0xB4C */ s16 unk_B4C;
/* 0xB4E */ s16 unk_B4E;
/* 0xB50 */ f32 unk_B50;
- /* 0xB54 */ f32 unk_B54;
- /* 0xB58 */ f32 unk_B58;
+ /* 0xB54 */ f32 wallHeight; // height used to determine whether link can climb or grab a ledge at the top
+ /* 0xB58 */ f32 wallDistance; // distance to the colliding wall plane
/* 0xB5C */ u8 unk_B5C;
/* 0xB5D */ u8 unk_B5D;
/* 0xB5E */ u8 unk_B5E;
/* 0xB5F */ u8 unk_B5F;
- /* 0xB60 */ u16 unk_B60; // blast mask timer?
+ /* 0xB60 */ u16 blastMaskTimer;
/* 0xB62 */ s16 unk_B62;
/* 0xB64 */ u8 unk_B64;
- /* 0xB65 */ u8 unk_B65;
+ /* 0xB65 */ u8 shockTimer;
/* 0xB66 */ u8 unk_B66;
- /* 0xB67 */ u8 unk_B67; // deku hop timer?
- /* 0xB68 */ s16 unk_B68;
- /* 0xB6A */ s16 unk_B6A;
+ /* 0xB67 */ u8 unk_B67; // deku remaining hops counter
+ /* 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;
/* 0xB6E */ s16 unk_B6E;
/* 0xB70 */ s16 unk_B70;
- /* 0xB72 */ u16 unk_B72; // floor type?
+ /* 0xB72 */ u16 floorSfxOffset;
/* 0xB74 */ u8 unk_B74;
/* 0xB75 */ u8 unk_B75;
/* 0xB76 */ s16 unk_B76;
@@ -655,8 +1102,7 @@ typedef struct Player {
/* 0xB7C */ f32 unk_B7C;
/* 0xB80 */ f32 unk_B80;
/* 0xB84 */ s16 unk_B84;
- /* 0xB86 */ s16 unk_B86;
- /* 0xB88 */ s16 unk_B88;
+ /* 0xB86 */ s16 unk_B86[2]; // unknown length
/* 0xB8A */ s16 unk_B8A;
/* 0xB8C */ s16 unk_B8C;
/* 0xB8E */ s16 unk_B8E;
@@ -665,11 +1111,11 @@ typedef struct Player {
/* 0xB94 */ s16 unk_B94;
/* 0xB96 */ s16 unk_B96;
/* 0xB98 */ WeaponInfo meleeWeaponInfo[3];
- /* 0xBEC */ Vec3f bodyPartsPos[18];
+ /* 0xBEC */ Vec3f bodyPartsPos[PLAYER_BODYPART_MAX];
/* 0xCC4 */ MtxF mf_CC4;
/* 0xD04 */ MtxF shieldMf;
/* 0xD44 */ u8 isBurning;
- /* 0xD45 */ u8 flameTimers[18]; // one flame per body part
+ /* 0xD45 */ u8 flameTimers[PLAYER_BODYPART_MAX]; // one flame per body part
/* 0xD57 */ u8 unk_D57;
/* 0xD58 */ PlayerFuncD58 unk_D58;
/* 0xD5C */ s8 invincibilityTimer; // prevents damage when nonzero (positive = visible, counts towards zero each frame)
@@ -678,7 +1124,7 @@ typedef struct Player {
/* 0xD5F */ u8 unk_D5F;
/* 0xD60 */ f32 unk_D60;
/* 0xD64 */ s16 unk_D64;
- /* 0xD66 */ u16 unk_D66;
+ /* 0xD66 */ u16 unk_D66; // sfx
/* 0xD68 */ s16 unk_D68;
/* 0xD6A */ s8 unk_D6A;
/* 0xD6B */ u8 unk_D6B;
diff --git a/include/z64quake.h b/include/z64quake.h
index a1272941d..f0bd401fc 100644
--- a/include/z64quake.h
+++ b/include/z64quake.h
@@ -47,9 +47,9 @@ s32 Quake_NumActiveQuakes(void);
void Quake_Init(void);
#define DISTORTION_TYPE_0 (1 << 0)
-#define DISTORTION_TYPE_2 (1 << 2)
-#define DISTORTION_TYPE_3 (1 << 3)
-#define DISTORTION_TYPE_4 (1 << 4)
+#define DISTORTION_TYPE_NON_ZORA_SWIMMING (1 << 2)
+#define DISTORTION_TYPE_ZORA_SWIMMING (1 << 3)
+#define DISTORTION_TYPE_UNDERWATER_ENTRY (1 << 4)
#define DISTORTION_TYPE_5 (1 << 5)
#define DISTORTION_TYPE_6 (1 << 6)
#define DISTORTION_TYPE_7 (1 << 7)
diff --git a/include/z64save.h b/include/z64save.h
index fa65031eb..1f59fea01 100644
--- a/include/z64save.h
+++ b/include/z64save.h
@@ -55,6 +55,14 @@ typedef enum {
#define MAGIC_NORMAL_METER 0x30
#define MAGIC_DOUBLE_METER (2 * MAGIC_NORMAL_METER)
+// See `R_MAGIC_DBG_SET_UPGRADE`
+#define MAGIC_DBG_SET_UPGRADE_NO_ACTION 0
+#define MAGIC_DBG_SET_UPGRADE_NORMAL_METER -1
+#define MAGIC_DBG_SET_UPGRADE_DOUBLE_METER 1
+
+#define ENV_HAZARD_TEXT_TRIGGER_HOTROOM (1 << 0)
+#define ENV_HAZARD_TEXT_TRIGGER_UNDERWATER (1 << 1)
+
#define SECONDS_TO_TIMER(seconds) ((seconds) * 100)
#define OSTIME_TO_TIMER(osTime) ((osTime) * 64 / 3000 / 10000)
@@ -69,7 +77,7 @@ typedef enum {
/* 2 */ TIMER_ID_2,
/* 3 */ TIMER_ID_MOON_CRASH, // timer used for mooncrash on the clocktower roof
/* 4 */ TIMER_ID_MINIGAME_2, // minigame timer
- /* 5 */ TIMER_ID_ENV, // environmental timer (underwater or hot room)
+ /* 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,
@@ -89,7 +97,7 @@ typedef enum {
/* 5 */ TIMER_STATE_STOP,
/* 6 */ TIMER_STATE_6, // like `TIMER_STATE_STOP` but with extra minigame checks
/* 7 */ TIMER_STATE_7, // stopped but still update `timerCurTimes`
- /* 8 */ TIMER_STATE_ENV_START,
+ /* 8 */ TIMER_STATE_ENV_HAZARD_START,
/* 9 */ TIMER_STATE_ALT_START,
/* 10 */ TIMER_STATE_10, // precursor to `TIMER_STATE_ALT_COUNTING`
/* 11 */ TIMER_STATE_ALT_COUNTING,
@@ -105,6 +113,12 @@ typedef enum {
/* 1 */ BOTTLE_TIMER_STATE_COUNTING
} BottleTimerState;
+typedef enum {
+ /* 0 */ MINIGAME_STATUS_INACTIVE,
+ /* 1 */ MINIGAME_STATUS_ACTIVE,
+ /* 3 */ MINIGAME_STATUS_END = 3
+} MinigameStatus;
+
typedef enum {
/* 0 */ HUD_VISIBILITY_IDLE,
/* 1 */ HUD_VISIBILITY_NONE,
@@ -133,6 +147,15 @@ typedef enum {
/* 52 */ HUD_VISIBILITY_NONE_INSTANT = 52
} HudVisibility;
+#define PICTO_PHOTO_WIDTH 160
+#define PICTO_PHOTO_HEIGHT 112
+
+#define PICTO_PHOTO_TOPLEFT_X ((SCREEN_WIDTH - PICTO_PHOTO_WIDTH) / 2)
+#define PICTO_PHOTO_TOPLEFT_Y ((SCREEN_HEIGHT - PICTO_PHOTO_HEIGHT) / 2)
+
+#define PICTO_PHOTO_SIZE (PICTO_PHOTO_WIDTH * PICTO_PHOTO_HEIGHT)
+#define PICTO_PHOTO_COMPRESSED_SIZE (PICTO_PHOTO_SIZE * 5 / 8)
+
typedef struct SramContext {
/* 0x00 */ u8* readBuff;
/* 0x04 */ u8 *saveBuf;
@@ -229,68 +252,72 @@ typedef struct SavePlayerData {
/* 0x26 */ s16 savedSceneId; // "scene_data_ID"
} SavePlayerData; // size = 0x28
+typedef struct SaveInfo {
+ /* 0x000 */ SavePlayerData playerData;
+ /* 0x028 */ ItemEquips equips;
+ /* 0x04C */ Inventory inventory;
+ /* 0x0D4 */ PermanentSceneFlags permanentSceneFlags[120];
+ /* 0xDF4 */ UNK_TYPE1 unk_DF4[0x54];
+ /* 0xE48 */ u32 dekuPlaygroundHighScores[3];
+ /* 0xE54 */ u32 pictoFlags0; // Flags set by `PictoActor`s if pictograph is valid
+ /* 0xE58 */ u32 pictoFlags1; // Flags set by Snap_ValidatePictograph() to record errors; volatile since that function is run many times in succession
+ /* 0xE5C */ u32 unk_E5C;
+ /* 0xE60 */ u32 unk_E60;
+ /* 0xE64 */ u32 unk_E64[7]; // Invadepoh flags
+ /* 0xE80 */ u32 scenesVisible[7]; // tingle maps and clouded regions on pause map. Stores scenes bitwise for up to 224 scenes even though there are not that many scenes
+ /* 0xE9C */ u32 skullTokenCount; // upper 16 bits store Swamp skulls, lower 16 bits store Ocean skulls
+ /* 0xEA0 */ u32 unk_EA0; // Gossic stone heart piece flags
+ /* 0xEA4 */ u32 unk_EA4;
+ /* 0xEA8 */ u32 unk_EA8[2]; // Related to blue warps
+ /* 0xEB0 */ u32 stolenItems; // Items stolen by Takkuri and given to Curiosity Shop Man
+ /* 0xEB4 */ u32 unk_EB4;
+ /* 0xEB8 */ u32 bankRupees;
+ /* 0xEBC */ u32 unk_EBC;
+ /* 0xEC0 */ u32 unk_EC0; // Fishing flags
+ /* 0xEC4 */ u32 unk_EC4;
+ /* 0xEC8 */ u32 horseBackBalloonHighScore;
+ /* 0xECC */ u32 lotteryCodeGuess; // Lottery code chosen by player (only uses lower three hex digits)
+ /* 0xED0 */ u32 shootingGalleryHighScores; // High scores for both shooting galleries. Town uses lower 16 bits, Swamp uses higher 16 bits.
+ /* 0xED4 */ u8 weekEventReg[100]; // "week_event_reg"
+ /* 0xF38 */ u32 regionsVisited; // "area_arrival"
+ /* 0xF3C */ u32 worldMapCloudVisibility; // "cloud_clear"
+ /* 0xF40 */ u8 unk_F40; // "oca_rec_flag" has scarecrows song
+ /* 0xF41 */ u8 unk_F41; // "oca_rec_flag8" scarecrows song set?
+ /* 0xF42 */ u8 scarecrowSpawnSong[128];
+ /* 0xFC2 */ s8 bombersCaughtNum; // "aikotoba_index"
+ /* 0xFC3 */ s8 bombersCaughtOrder[5]; // "aikotoba_table"
+ /* 0xFC8 */ s8 lotteryCodes[3][3]; // "numbers_table", Preset lottery codes
+ /* 0xFD1 */ s8 spiderHouseMaskOrder[6]; // "kinsta_color_table"
+ /* 0xFD7 */ s8 bomberCode[5]; // "bombers_aikotoba_table"
+ /* 0xFDC */ HorseData horseData;
+ /* 0xFE6 */ u16 checksum; // "check_sum"
+} SaveInfo; // size = 0xFE8
+
typedef struct Save {
- /* 0x0000 */ u32 entrance; // "scene_no"
- /* 0x0004 */ u8 equippedMask; // "player_mask"
- /* 0x0005 */ u8 isFirstCycle; // "opening_flag"
- /* 0x0006 */ u8 unk_06;
- /* 0x0007 */ u8 linkAge; // "link_age"
- /* 0x0008 */ s32 cutscene; // "day_time"
- /* 0x000C */ u16 time; // "zelda_time"
- /* 0x000E */ u16 owlSaveLocation;
- /* 0x0010 */ s32 isNight; // "asahiru_fg"
- /* 0x0014 */ s32 daySpeed; // "change_zelda_time"
- /* 0x0018 */ s32 day; // "totalday"
- /* 0x001C */ s32 daysElapsed; // "eventday"
- /* 0x0020 */ u8 playerForm; // "player_character"
- /* 0x0021 */ u8 snowheadCleared; // "spring_flag"
- /* 0x0022 */ u8 hasTatl; // "bell_flag"
- /* 0x0023 */ u8 isOwlSave;
- /* 0x0024 */ SavePlayerData playerData;
- /* 0x004C */ ItemEquips equips;
- /* 0x0070 */ Inventory inventory;
- /* 0x00F8 */ PermanentSceneFlags permanentSceneFlags[120];
- /* 0x0E18 */ u8 unk_E18[0x54];
- /* 0x0E6C */ u32 dekuPlaygroundHighScores[3];
- /* 0x0E78 */ u32 pictoFlags0; // Flags set by `PictoActor`s if pictograph is valid
- /* 0x0E7C */ u32 pictoFlags1; // Flags set by Snap_ValidatePictograph() to record errors; volatile since that function is run many times in succession
- /* 0x0E80 */ u32 unk_E80;
- /* 0x0E84 */ u32 unk_E84;
- /* 0x0E88 */ u32 unk_E88[7]; // Invadepoh flags
- /* 0x0EA4 */ u32 scenesVisible[7]; // tingle maps and clouded regions on pause map. Stores scenes bitwise for up to 224 scenes even though there are not that many scenes
- /* 0x0EC0 */ u32 skullTokenCount; // upper 16 bits store Swamp skulls, lower 16 bits store Ocean skulls
- /* 0x0EC4 */ u32 unk_EC4; // Gossic stone heart piece flags
- /* 0x0EC8 */ u32 unk_EC8;
- /* 0x0ECC */ u32 unk_ECC[2]; // Related to blue warps
- /* 0x0ED4 */ u32 stolenItems; // Items stolen by Takkuri and given to Curiosity Shop Man
- /* 0x0ED8 */ u32 unk_DD8;
- /* 0x0EDC */ u32 bankRupees;
- /* 0x0EE0 */ u32 unk_EE0;
- /* 0x0EE4 */ u32 unk_EE4; // Fishing flags
- /* 0x0EE8 */ u32 unk_EE8;
- /* 0x0EEC */ u32 horseBackBalloonHighScore;
- /* 0x0EF0 */ u32 lotteryCodeGuess; // Lottery code chosen by player (only uses lower three hex digits)
- /* 0x0EF4 */ u32 shootingGalleryHighScores; // High scores for both shooting galleries. Town uses lower 16 bits, Swamp uses higher 16 bits.
- /* 0x0EF8 */ u8 weekEventReg[100]; // "week_event_reg"
- /* 0x0F5C */ u32 regionsVisited; // "area_arrival"
- /* 0x0F60 */ u32 worldMapCloudVisibility; // "cloud_clear"
- /* 0x0F64 */ u8 unk_F64; // "oca_rec_flag" has scarecrows song
- /* 0x0F65 */ u8 unk_F65; // "oca_rec_flag8" scarecrows song set?
- /* 0x0F66 */ u8 scarecrowSpawnSong[128];
- /* 0x0FE6 */ s8 bombersCaughtNum; // "aikotoba_index"
- /* 0x0FE7 */ s8 bombersCaughtOrder[5]; // "aikotoba_table"
- /* 0x0FEC */ s8 lotteryCodes[3][3]; // "numbers_table", Preset lottery codes
- /* 0x0FF5 */ s8 spiderHouseMaskOrder[6]; // "kinsta_color_table"
- /* 0x0FFB */ s8 bomberCode[5]; // "bombers_aikotoba_table"
- /* 0x1000 */ HorseData horseData;
- /* 0x100A */ u16 checksum; // "check_sum"
+ /* 0x00 */ s32 entrance; // "scene_no"
+ /* 0x04 */ u8 equippedMask; // "player_mask"
+ /* 0x05 */ u8 isFirstCycle; // "opening_flag"
+ /* 0x06 */ u8 unk_06;
+ /* 0x07 */ u8 linkAge; // "link_age"
+ /* 0x08 */ s32 cutsceneIndex; // "day_time"
+ /* 0x0C */ u16 time; // "zelda_time"
+ /* 0x0E */ u16 owlSaveLocation;
+ /* 0x10 */ s32 isNight; // "asahiru_fg"
+ /* 0x14 */ s32 timeSpeedOffset; // "change_zelda_time"
+ /* 0x18 */ s32 day; // "totalday"
+ /* 0x1C */ s32 daysElapsed; // "eventday"
+ /* 0x20 */ u8 playerForm; // "player_character"
+ /* 0x21 */ u8 snowheadCleared; // "spring_flag"
+ /* 0x22 */ u8 hasTatl; // "bell_flag"
+ /* 0x23 */ u8 isOwlSave;
+ /* 0x24 */ SaveInfo saveInfo;
} Save; // size = 0x100C
typedef struct SaveContext {
/* 0x0000 */ Save save;
/* 0x100C */ u8 eventInf[8]; // "event_inf"
/* 0x1014 */ u8 unk_1014; // "stone_set_flag"
- /* 0x1015 */ u8 unk_1015;
+ /* 0x1015 */ u8 bButtonStatus;
/* 0x1016 */ u16 jinxTimer;
/* 0x1018 */ s16 rupeeAccumulator; // "lupy_udct"
/* 0x101A */ u8 bottleTimerStates[BOTTLE_MAX]; // See the `BottleTimerState` enum. "bottle_status"
@@ -298,7 +325,7 @@ typedef struct SaveContext {
/* 0x1050 */ u64 bottleTimerTimeLimits[BOTTLE_MAX]; // The original total time given before the timer expires, in centiseconds (1/100th sec). "bottle_sub"
/* 0x1080 */ u64 bottleTimerCurTimes[BOTTLE_MAX]; // The remaining time left before the timer expires, in centiseconds (1/100th sec). "bottle_time"
/* 0x10B0 */ OSTime bottleTimerPausedOsTimes[BOTTLE_MAX]; // The cumulative osTime spent with the timer paused. "bottle_stop_time"
- /* 0x10E0 */ u64 pictoPhoto[1400]; // buffer containing the pictograph photo
+ /* 0x10E0 */ u8 pictoPhotoI5[PICTO_PHOTO_COMPRESSED_SIZE]; // buffer containing the pictograph photo, compressed to I5 from I8
/* 0x3CA0 */ s32 fileNum; // "file_no"
/* 0x3CA4 */ s16 powderKegTimer; // "big_bom_timer"
/* 0x3CA6 */ u8 unk_3CA6;
@@ -311,8 +338,8 @@ typedef struct SaveContext {
/* 0x3DB8 */ u16 entranceSound; // "player_wipe_door_SE"
/* 0x3DBA */ u8 unk_3DBA; // "player_wipe_item"
/* 0x3DBB */ u8 unk_3DBB; // "next_walk"
- /* 0x3DBC */ u16 dogParams; // "dog_flag"
- /* 0x3DBE */ u8 textTriggerFlags; // "guide_status"
+ /* 0x3DBC */ s16 dogParams; // "dog_flag"
+ /* 0x3DBE */ u8 envHazardTextTriggerFlags; // "guide_status"
/* 0x3DBF */ u8 showTitleCard; // "name_display"
/* 0x3DC0 */ s16 unk_3DC0; // "shield_magic_timer"
/* 0x3DC2 */ u8 unk_3DC2; // "pad1"
@@ -343,9 +370,9 @@ typedef struct SaveContext {
/* 0x3F32 */ s16 magicToConsume; // accumulated magic that is requested to be consumed "magic_used"
/* 0x3F34 */ s16 magicToAdd; // accumulated magic that is requested to be added "magic_recovery"
/* 0x3F36 */ u16 mapIndex; // "scene_ID"
- /* 0x3F38 */ u16 minigameState; // "yabusame_mode"
+ /* 0x3F38 */ u16 minigameStatus; // "yabusame_mode"
/* 0x3F3A */ u16 minigameScore; // "yabusame_total"
- /* 0x3F3C */ u16 unk_3F3C; // "yabusame_out_ct"
+ /* 0x3F3C */ u16 minigameHiddenScore; // "yabusame_out_ct"
/* 0x3F3E */ u8 unk_3F3E; // "no_save"
/* 0x3F3F */ u8 unk_3F3F; // "flash_flag"
/* 0x3F40 */ SaveOptions options;
@@ -383,6 +410,14 @@ typedef enum SunsSongState {
/* 3 */ SUNSSONG_SPECIAL // time does not advance, but signals the song was played. used for freezing redeads
} SunsSongState;
+typedef enum {
+ /* 0 */ GAMEMODE_NORMAL,
+ /* 1 */ GAMEMODE_TITLE_SCREEN,
+ /* 2 */ GAMEMODE_FILE_SELECT,
+ /* 3 */ GAMEMODE_END_CREDITS,
+ /* 4 */ GAMEMODE_OWL_SAVE
+} GameMode;
+
// linkAge still exists in MM, but is always set to 0 (always adult)
// There are remnants of these macros from OOT, but they are essentially useless
#define LINK_IS_CHILD (gSaveContext.save.linkAge == 1)
@@ -390,46 +425,57 @@ typedef enum SunsSongState {
#define CURRENT_DAY (((void)0, gSaveContext.save.day) % 5)
+// The day begins at CLOCK_TIME(6, 0) so it must be offset.
+#define TIME_UNTIL_MOON_CRASH \
+ ((4 - CURRENT_DAY) * DAY_LENGTH - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0)));
+#define TIME_UNTIL_NEW_DAY (DAY_LENGTH - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0)));
+
+#define GET_PLAYER_FORM ((void)0, gSaveContext.save.playerForm)
+
#define SLOT(item) gItemSlots[item]
-#define AMMO(item) gSaveContext.save.inventory.ammo[SLOT(item)]
-#define INV_CONTENT(item) gSaveContext.save.inventory.items[SLOT(item)]
-#define GET_INV_CONTENT(item) ((void)0, gSaveContext.save.inventory.items)[SLOT(item)]
+#define AMMO(item) gSaveContext.save.saveInfo.inventory.ammo[SLOT(item)]
+#define INV_CONTENT(item) gSaveContext.save.saveInfo.inventory.items[SLOT(item)]
+#define GET_INV_CONTENT(item) ((void)0, gSaveContext.save.saveInfo.inventory.items)[SLOT(item)]
#define CUR_FORM ((gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) ? 0 : gSaveContext.save.playerForm)
-#define GET_SAVE_EQUIPS_EQUIPMENT ((void)0, gSaveContext.save.equips.equipment)
-#define GET_SAVE_INVENTORY_UPGRADES ((void)0, gSaveContext.save.inventory.upgrades)
-#define GET_SAVE_INVENTORY_QUEST_ITEMS ((void)0, gSaveContext.save.inventory.questItems)
+#define GET_SAVE_EQUIPS_EQUIPMENT ((void)0, gSaveContext.save.saveInfo.equips.equipment)
+#define GET_SAVE_INVENTORY_UPGRADES ((void)0, gSaveContext.save.saveInfo.inventory.upgrades)
+#define GET_SAVE_INVENTORY_QUEST_ITEMS ((void)0, gSaveContext.save.saveInfo.inventory.questItems)
#define GET_CUR_EQUIP_VALUE(equip) ((GET_SAVE_EQUIPS_EQUIPMENT & gEquipMasks[equip]) >> gEquipShifts[equip])
-#define CUR_UPG_VALUE(upg) ((gSaveContext.save.inventory.upgrades & gUpgradeMasks[upg]) >> gUpgradeShifts[upg])
+#define CUR_UPG_VALUE(upg) ((gSaveContext.save.saveInfo.inventory.upgrades & gUpgradeMasks[upg]) >> gUpgradeShifts[upg])
#define GET_CUR_UPG_VALUE(upg) ((GET_SAVE_INVENTORY_UPGRADES & gUpgradeMasks[upg]) >> gUpgradeShifts[upg])
-#define SET_EQUIP_VALUE(equip, value) (gSaveContext.save.equips.equipment = ((GET_SAVE_EQUIPS_EQUIPMENT & gEquipNegMasks[equip]) | (u16)((u16)(value) << gEquipShifts[equip])))
+#define SET_EQUIP_VALUE(equip, value) (gSaveContext.save.saveInfo.equips.equipment = ((GET_SAVE_EQUIPS_EQUIPMENT & gEquipNegMasks[equip]) | (u16)((u16)(value) << gEquipShifts[equip])))
-#define BUTTON_ITEM_EQUIP(form, button) (gSaveContext.save.equips.buttonItems[form][button])
+#define BUTTON_ITEM_EQUIP(form, button) (gSaveContext.save.saveInfo.equips.buttonItems[form][button])
#define CUR_FORM_EQUIP(button) BUTTON_ITEM_EQUIP(CUR_FORM, button)
-#define C_SLOT_EQUIP(form, button) (gSaveContext.save.equips.cButtonSlots[form][button])
+#define C_SLOT_EQUIP(form, button) (gSaveContext.save.saveInfo.equips.cButtonSlots[form][button])
#define CHECK_QUEST_ITEM(item) (GET_SAVE_INVENTORY_QUEST_ITEMS & gBitFlags[item])
-#define SET_QUEST_ITEM(item) (gSaveContext.save.inventory.questItems = (GET_SAVE_INVENTORY_QUEST_ITEMS | gBitFlags[item]))
-#define REMOVE_QUEST_ITEM(item) (gSaveContext.save.inventory.questItems = (GET_SAVE_INVENTORY_QUEST_ITEMS & (-1 - gBitFlags[item])))
+#define SET_QUEST_ITEM(item) (gSaveContext.save.saveInfo.inventory.questItems = (GET_SAVE_INVENTORY_QUEST_ITEMS | gBitFlags[item]))
+#define REMOVE_QUEST_ITEM(item) (gSaveContext.save.saveInfo.inventory.questItems = (GET_SAVE_INVENTORY_QUEST_ITEMS & (-1 - gBitFlags[item])))
#define GET_QUEST_HEART_PIECE_COUNT ((GET_SAVE_INVENTORY_QUEST_ITEMS & 0xF0000000) >> QUEST_HEART_PIECE_COUNT)
#define EQ_MAX_QUEST_HEART_PIECE_COUNT ((GET_SAVE_INVENTORY_QUEST_ITEMS & 0xF0000000) == (4 << QUEST_HEART_PIECE_COUNT))
#define LEQ_MAX_QUEST_HEART_PIECE_COUNT ((GET_SAVE_INVENTORY_QUEST_ITEMS & 0xF0000000) <= (4 << QUEST_HEART_PIECE_COUNT))
-#define INCREMENT_QUEST_HEART_PIECE_COUNT (gSaveContext.save.inventory.questItems += (1 << QUEST_HEART_PIECE_COUNT))
-#define DECREMENT_QUEST_HEART_PIECE_COUNT (gSaveContext.save.inventory.questItems -= (1 << QUEST_HEART_PIECE_COUNT))
-#define RESET_HEART_PIECE_COUNT (gSaveContext.save.inventory.questItems ^= (4 << QUEST_HEART_PIECE_COUNT))
+#define INCREMENT_QUEST_HEART_PIECE_COUNT (gSaveContext.save.saveInfo.inventory.questItems += (1 << QUEST_HEART_PIECE_COUNT))
+#define DECREMENT_QUEST_HEART_PIECE_COUNT (gSaveContext.save.saveInfo.inventory.questItems -= (1 << QUEST_HEART_PIECE_COUNT))
+#define RESET_HEART_PIECE_COUNT (gSaveContext.save.saveInfo.inventory.questItems ^= (4 << QUEST_HEART_PIECE_COUNT))
-#define CHECK_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.save.inventory.dungeonItems[(void)0, dungeonIndex] & gBitFlags[item])
-#define SET_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.save.inventory.dungeonItems[(void)0, dungeonIndex] |= (u8)gBitFlags[item])
-#define DUNGEON_KEY_COUNT(dungeonIndex) (gSaveContext.save.inventory.dungeonKeys[(void)0, dungeonIndex])
+#define CHECK_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.save.saveInfo.inventory.dungeonItems[(void)0, dungeonIndex] & gBitFlags[item])
+#define SET_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.save.saveInfo.inventory.dungeonItems[(void)0, dungeonIndex] |= (u8)gBitFlags[item])
+#define DUNGEON_KEY_COUNT(dungeonIndex) (gSaveContext.save.saveInfo.inventory.dungeonKeys[(void)0, dungeonIndex])
#define GET_CUR_FORM_BTN_ITEM(btn) ((u8)((btn) == EQUIP_SLOT_B ? BUTTON_ITEM_EQUIP(CUR_FORM, btn) : BUTTON_ITEM_EQUIP(0, btn)))
#define GET_CUR_FORM_BTN_SLOT(btn) ((u8)((btn) == EQUIP_SLOT_B ? C_SLOT_EQUIP(CUR_FORM, btn) : C_SLOT_EQUIP(0, btn)))
+#define C_BTN_ITEM(btn) \
+ ((gSaveContext.buttonStatus[(btn)] != BTN_DISABLED) \
+ ? BUTTON_ITEM_EQUIP(0, (btn)) \
+ : ((gSaveContext.hudVisibility == HUD_VISIBILITY_A_B_C) ? BUTTON_ITEM_EQUIP(0, (btn)) : ITEM_NONE))
#define SET_CUR_FORM_BTN_ITEM(btn, item) \
if ((btn) == EQUIP_SLOT_B) { \
@@ -449,18 +495,1072 @@ typedef enum SunsSongState {
#define STOLEN_ITEM_NONE (0)
-#define STOLEN_ITEM_1 ((gSaveContext.save.stolenItems & 0xFF000000) >> 0x18)
-#define STOLEN_ITEM_2 ((gSaveContext.save.stolenItems & 0x00FF0000) >> 0x10)
+#define STOLEN_ITEM_1 ((gSaveContext.save.saveInfo.stolenItems & 0xFF000000) >> 0x18)
+#define STOLEN_ITEM_2 ((gSaveContext.save.saveInfo.stolenItems & 0x00FF0000) >> 0x10)
#define SET_STOLEN_ITEM_1(itemId) \
- (gSaveContext.save.stolenItems = (gSaveContext.save.stolenItems & ~0xFF000000) | ((itemId & 0xFF) << 0x18))
+ (gSaveContext.save.saveInfo.stolenItems = (gSaveContext.save.saveInfo.stolenItems & ~0xFF000000) | ((itemId & 0xFF) << 0x18))
#define SET_STOLEN_ITEM_2(itemId) \
- (gSaveContext.save.stolenItems = (gSaveContext.save.stolenItems & ~0x00FF0000) | ((itemId & 0xFF) << 0x10))
+ (gSaveContext.save.saveInfo.stolenItems = (gSaveContext.save.saveInfo.stolenItems & ~0x00FF0000) | ((itemId & 0xFF) << 0x10))
+
+#define GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() ((s32)(gSaveContext.save.saveInfo.shootingGalleryHighScores & 0xFFFF))
+#define GET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE() ((s32)((gSaveContext.save.saveInfo.shootingGalleryHighScores & 0xFFFF0000) >> 0x10))
+#define SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(score) (gSaveContext.save.saveInfo.shootingGalleryHighScores = (gSaveContext.save.saveInfo.shootingGalleryHighScores & 0xFFFF0000) | ((u16)(score)))
+#define SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(score) (gSaveContext.save.saveInfo.shootingGalleryHighScores = ((gSaveContext.save.saveInfo.shootingGalleryHighScores) & 0xFFFF) | ((u16)(score) << 0x10))
+
+/**
+ * gSaveContext.save.saveInfo.weekEventReg
+ */
+
+#define PACK_WEEKEVENTREG_FLAG(index, mask) (((index) << 8) | (mask))
+
+#define WEEKEVENTREG_00_01 PACK_WEEKEVENTREG_FLAG(0, 0x01)
+
+/* Entrance cutscenes watched */
+
+#define WEEKEVENTREG_ENTERED_TERMINA_FIELD PACK_WEEKEVENTREG_FLAG(0, 0x02)
+#define WEEKEVENTREG_ENTERED_IKANA_GRAVEYARD PACK_WEEKEVENTREG_FLAG(0, 0x04)
+#define WEEKEVENTREG_ENTERED_ROMANI_RANCH PACK_WEEKEVENTREG_FLAG(0, 0x08)
+#define WEEKEVENTREG_ENTERED_GORMAN_TRACK PACK_WEEKEVENTREG_FLAG(0, 0x10)
+#define WEEKEVENTREG_ENTERED_MOUNTAIN_VILLAGE_WINTER PACK_WEEKEVENTREG_FLAG(0, 0x20)
+#define WEEKEVENTREG_ENTERED_GORON_SHRINE PACK_WEEKEVENTREG_FLAG(0, 0x40)
+#define WEEKEVENTREG_ENTERED_SNOWHEAD PACK_WEEKEVENTREG_FLAG(0, 0x80)
+#define WEEKEVENTREG_ENTERED_SOUTHERN_SWAMP_POISONED PACK_WEEKEVENTREG_FLAG(1, 0x01)
+#define WEEKEVENTREG_ENTERED_WOODFALL PACK_WEEKEVENTREG_FLAG(1, 0x02)
+#define WEEKEVENTREG_ENTERED_DEKU_PALACE PACK_WEEKEVENTREG_FLAG(1, 0x04)
+#define WEEKEVENTREG_ENTERED_GREAT_BAY_COAST PACK_WEEKEVENTREG_FLAG(1, 0x08)
+#define WEEKEVENTREG_ENTERED_PIRATES_FORTRESS PACK_WEEKEVENTREG_FLAG(1, 0x10)
+#define WEEKEVENTREG_ENTERED_ZORA_HALL PACK_WEEKEVENTREG_FLAG(1, 0x20)
+#define WEEKEVENTREG_ENTERED_WATERFALL_RAPIDS PACK_WEEKEVENTREG_FLAG(1, 0x40)
+#define WEEKEVENTREG_ENTERED_IKANA_CANYON PACK_WEEKEVENTREG_FLAG(1, 0x80)
+// Attached to the scene but unused. Entrance cutscene is instead triggered by `ACTOR_OBJ_DEMO`
+#define WEEKEVENTREG_ENTERED_IKANA_CASTLE PACK_WEEKEVENTREG_FLAG(2, 0x01)
+#define WEEKEVENTREG_ENTERED_STONE_TOWER PACK_WEEKEVENTREG_FLAG(2, 0x02)
+#define WEEKEVENTREG_ENTERED_STONE_TOWER_INVERTED PACK_WEEKEVENTREG_FLAG(2, 0x04)
+#define WEEKEVENTREG_ENTERED_EAST_CLOCK_TOWN PACK_WEEKEVENTREG_FLAG(2, 0x08)
+#define WEEKEVENTREG_ENTERED_WEST_CLOCK_TOWN PACK_WEEKEVENTREG_FLAG(2, 0x10)
+#define WEEKEVENTREG_ENTERED_NORTH_CLOCK_TOWN PACK_WEEKEVENTREG_FLAG(2, 0x20)
+#define WEEKEVENTREG_ENTERED_WOODFALL_TEMPLE PACK_WEEKEVENTREG_FLAG(2, 0x40)
+#define WEEKEVENTREG_ENTERED_SNOWHEAD_TEMPLE PACK_WEEKEVENTREG_FLAG(2, 0x80)
+// Attached to the scene but unused. Entrance cutscene is instead triggered by `ACTOR_OBJ_DEMO`
+#define WEEKEVENTREG_ENTERED_PIRATES_FORTRESS_EXTERIOR PACK_WEEKEVENTREG_FLAG(3, 0x01)
+#define WEEKEVENTREG_ENTERED_STONE_TOWER_TEMPLE PACK_WEEKEVENTREG_FLAG(3, 0x02)
+#define WEEKEVENTREG_ENTERED_STONE_TOWER_TEMPLE_INVERTED PACK_WEEKEVENTREG_FLAG(3, 0x04)
+// Unused as no cutscene is attached to this script
+#define WEEKEVENTREG_ENTERED_THE_MOON PACK_WEEKEVENTREG_FLAG(3, 0x08)
+#define WEEKEVENTREG_ENTERED_MOON_DEKU_TRIAL PACK_WEEKEVENTREG_FLAG(3, 0x10)
+#define WEEKEVENTREG_ENTERED_MOON_GORON_TRIAL PACK_WEEKEVENTREG_FLAG(3, 0x20)
+#define WEEKEVENTREG_ENTERED_MOON_ZORA_TRIAL PACK_WEEKEVENTREG_FLAG(3, 0x40)
+
+#define WEEKEVENTREG_03_80 PACK_WEEKEVENTREG_FLAG(3, 0x80)
+#define WEEKEVENTREG_04_01 PACK_WEEKEVENTREG_FLAG(4, 0x01)
+#define WEEKEVENTREG_04_02 PACK_WEEKEVENTREG_FLAG(4, 0x02)
+#define WEEKEVENTREG_04_04 PACK_WEEKEVENTREG_FLAG(4, 0x04)
+#define WEEKEVENTREG_04_08 PACK_WEEKEVENTREG_FLAG(4, 0x08)
+#define WEEKEVENTREG_04_10 PACK_WEEKEVENTREG_FLAG(4, 0x10)
+#define WEEKEVENTREG_04_20 PACK_WEEKEVENTREG_FLAG(4, 0x20)
+#define WEEKEVENTREG_04_40 PACK_WEEKEVENTREG_FLAG(4, 0x40)
+#define WEEKEVENTREG_04_80 PACK_WEEKEVENTREG_FLAG(4, 0x80)
+#define WEEKEVENTREG_05_01 PACK_WEEKEVENTREG_FLAG(5, 0x01)
+#define WEEKEVENTREG_05_02 PACK_WEEKEVENTREG_FLAG(5, 0x02)
+#define WEEKEVENTREG_05_04 PACK_WEEKEVENTREG_FLAG(5, 0x04)
+#define WEEKEVENTREG_05_08 PACK_WEEKEVENTREG_FLAG(5, 0x08)
+#define WEEKEVENTREG_05_10 PACK_WEEKEVENTREG_FLAG(5, 0x10)
+#define WEEKEVENTREG_05_20 PACK_WEEKEVENTREG_FLAG(5, 0x20)
+#define WEEKEVENTREG_05_40 PACK_WEEKEVENTREG_FLAG(5, 0x40)
+#define WEEKEVENTREG_05_80 PACK_WEEKEVENTREG_FLAG(5, 0x80)
+#define WEEKEVENTREG_06_01 PACK_WEEKEVENTREG_FLAG(6, 0x01)
+#define WEEKEVENTREG_06_02 PACK_WEEKEVENTREG_FLAG(6, 0x02)
+#define WEEKEVENTREG_06_04 PACK_WEEKEVENTREG_FLAG(6, 0x04)
+#define WEEKEVENTREG_06_08 PACK_WEEKEVENTREG_FLAG(6, 0x08)
+#define WEEKEVENTREG_06_10 PACK_WEEKEVENTREG_FLAG(6, 0x10)
+#define WEEKEVENTREG_06_20 PACK_WEEKEVENTREG_FLAG(6, 0x20)
+#define WEEKEVENTREG_06_40 PACK_WEEKEVENTREG_FLAG(6, 0x40)
+#define WEEKEVENTREG_06_80 PACK_WEEKEVENTREG_FLAG(6, 0x80)
+#define WEEKEVENTREG_07_01 PACK_WEEKEVENTREG_FLAG(7, 0x01)
+#define WEEKEVENTREG_07_02 PACK_WEEKEVENTREG_FLAG(7, 0x02)
+#define WEEKEVENTREG_07_04 PACK_WEEKEVENTREG_FLAG(7, 0x04)
+#define WEEKEVENTREG_07_08 PACK_WEEKEVENTREG_FLAG(7, 0x08)
+#define WEEKEVENTREG_07_10 PACK_WEEKEVENTREG_FLAG(7, 0x10)
+#define WEEKEVENTREG_07_20 PACK_WEEKEVENTREG_FLAG(7, 0x20)
+#define WEEKEVENTREG_07_40 PACK_WEEKEVENTREG_FLAG(7, 0x40)
+
+// Entrance cutscene watched to the prison where the deku princess is kept. Also set in door_warp1.c
+#define WEEKEVENTREG_ENTERED_WOODFALL_TEMPLE_PRISON PACK_WEEKEVENTREG_FLAG(7, 0x80)
+
+// Related to Honey & Darling minigame
+#define WEEKEVENTREG_08_01 PACK_WEEKEVENTREG_FLAG(8, 0x01)
+#define WEEKEVENTREG_08_02 PACK_WEEKEVENTREG_FLAG(8, 0x02)
+#define WEEKEVENTREG_08_04 PACK_WEEKEVENTREG_FLAG(8, 0x04)
+#define WEEKEVENTREG_08_08 PACK_WEEKEVENTREG_FLAG(8, 0x08)
+#define WEEKEVENTREG_08_10 PACK_WEEKEVENTREG_FLAG(8, 0x10)
+#define WEEKEVENTREG_08_20 PACK_WEEKEVENTREG_FLAG(8, 0x20)
+
+// Related to final hours
+#define WEEKEVENTREG_08_40 PACK_WEEKEVENTREG_FLAG(8, 0x40)
+
+#define WEEKEVENTREG_08_80 PACK_WEEKEVENTREG_FLAG(8, 0x80)
+#define WEEKEVENTREG_09_01 PACK_WEEKEVENTREG_FLAG(9, 0x01)
+#define WEEKEVENTREG_09_02 PACK_WEEKEVENTREG_FLAG(9, 0x02)
+#define WEEKEVENTREG_09_04 PACK_WEEKEVENTREG_FLAG(9, 0x04)
+#define WEEKEVENTREG_09_08 PACK_WEEKEVENTREG_FLAG(9, 0x08)
+#define WEEKEVENTREG_09_10 PACK_WEEKEVENTREG_FLAG(9, 0x10)
+#define WEEKEVENTREG_09_20 PACK_WEEKEVENTREG_FLAG(9, 0x20)
+#define WEEKEVENTREG_09_40 PACK_WEEKEVENTREG_FLAG(9, 0x40)
+#define WEEKEVENTREG_09_80 PACK_WEEKEVENTREG_FLAG(9, 0x80)
+#define WEEKEVENTREG_10_01 PACK_WEEKEVENTREG_FLAG(10, 0x01)
+#define WEEKEVENTREG_10_02 PACK_WEEKEVENTREG_FLAG(10, 0x02)
+#define WEEKEVENTREG_10_04 PACK_WEEKEVENTREG_FLAG(10, 0x04)
+#define WEEKEVENTREG_10_08 PACK_WEEKEVENTREG_FLAG(10, 0x08)
+#define WEEKEVENTREG_10_10 PACK_WEEKEVENTREG_FLAG(10, 0x10)
+#define WEEKEVENTREG_10_20 PACK_WEEKEVENTREG_FLAG(10, 0x20)
+#define WEEKEVENTREG_10_40 PACK_WEEKEVENTREG_FLAG(10, 0x40)
+#define WEEKEVENTREG_10_80 PACK_WEEKEVENTREG_FLAG(10, 0x80)
+#define WEEKEVENTREG_11_01 PACK_WEEKEVENTREG_FLAG(11, 0x01)
+#define WEEKEVENTREG_11_02 PACK_WEEKEVENTREG_FLAG(11, 0x02)
+#define WEEKEVENTREG_11_04 PACK_WEEKEVENTREG_FLAG(11, 0x04)
+#define WEEKEVENTREG_11_08 PACK_WEEKEVENTREG_FLAG(11, 0x08)
+#define WEEKEVENTREG_11_10 PACK_WEEKEVENTREG_FLAG(11, 0x10)
+#define WEEKEVENTREG_11_20 PACK_WEEKEVENTREG_FLAG(11, 0x20)
+#define WEEKEVENTREG_11_40 PACK_WEEKEVENTREG_FLAG(11, 0x40)
+#define WEEKEVENTREG_11_80 PACK_WEEKEVENTREG_FLAG(11, 0x80)
+
+// woodfall temple wood flower opened
+#define WEEKEVENTREG_12_01 PACK_WEEKEVENTREG_FLAG(12, 0x01)
+
+#define WEEKEVENTREG_12_02 PACK_WEEKEVENTREG_FLAG(12, 0x02)
+#define WEEKEVENTREG_12_04 PACK_WEEKEVENTREG_FLAG(12, 0x04)
+#define WEEKEVENTREG_12_08 PACK_WEEKEVENTREG_FLAG(12, 0x08)
+#define WEEKEVENTREG_12_10 PACK_WEEKEVENTREG_FLAG(12, 0x10)
+#define WEEKEVENTREG_12_20 PACK_WEEKEVENTREG_FLAG(12, 0x20)
+#define WEEKEVENTREG_12_40 PACK_WEEKEVENTREG_FLAG(12, 0x40)
+#define WEEKEVENTREG_12_80 PACK_WEEKEVENTREG_FLAG(12, 0x80)
+#define WEEKEVENTREG_13_01 PACK_WEEKEVENTREG_FLAG(13, 0x01)
+#define WEEKEVENTREG_13_02 PACK_WEEKEVENTREG_FLAG(13, 0x02)
+#define WEEKEVENTREG_13_04 PACK_WEEKEVENTREG_FLAG(13, 0x04)
+#define WEEKEVENTREG_13_08 PACK_WEEKEVENTREG_FLAG(13, 0x08)
+#define WEEKEVENTREG_13_10 PACK_WEEKEVENTREG_FLAG(13, 0x10)
+
+// This flag marks that the player has finished the Oceanside Spider House and has exited.
+// Used to identify if EnSth should be moved deeper into the house.
+// This does NOT flag:
+// A) that the player has completed the house (Inventory_GetSkullTokenCount(play->sceneId))
+// B) that the player has collected a reward (WEEKEVENTREG_OCEANSIDE_SPIDER_HOUSE_COLLECTED_REWARD)
+// C) that the player has collected the wallet (WEEKEVENTREG_RECEIVED_OCEANSIDE_WALLET_UPGRADE)
+#define WEEKEVENTREG_OCEANSIDE_SPIDER_HOUSE_BUYER_MOVED_IN PACK_WEEKEVENTREG_FLAG(13, 0x20)
+
+#define WEEKEVENTREG_RECEIVED_OCEANSIDE_WALLET_UPGRADE PACK_WEEKEVENTREG_FLAG(13, 0x40)
+// You only get a wallet if completed on Day 1: repeat gets silver rupee, other days get less
+#define WEEKEVENTREG_OCEANSIDE_SPIDER_HOUSE_COLLECTED_REWARD PACK_WEEKEVENTREG_FLAG(13, 0x80)
+
+// PlayedMilkMinigame
+// Attempted Cremia Cart Ride
+#define WEEKEVENTREG_14_01 PACK_WEEKEVENTREG_FLAG(14, 0x01)
+
+#define WEEKEVENTREG_14_02 PACK_WEEKEVENTREG_FLAG(14, 0x02)
+#define WEEKEVENTREG_14_04 PACK_WEEKEVENTREG_FLAG(14, 0x04)
+#define WEEKEVENTREG_DRANK_CHATEAU_ROMANI PACK_WEEKEVENTREG_FLAG(14, 0x08)
+#define WEEKEVENTREG_14_10 PACK_WEEKEVENTREG_FLAG(14, 0x10)
+#define WEEKEVENTREG_14_20 PACK_WEEKEVENTREG_FLAG(14, 0x20)
+#define WEEKEVENTREG_14_40 PACK_WEEKEVENTREG_FLAG(14, 0x40)
+#define WEEKEVENTREG_14_80 PACK_WEEKEVENTREG_FLAG(14, 0x80)
+#define WEEKEVENTREG_15_01 PACK_WEEKEVENTREG_FLAG(15, 0x01)
+#define WEEKEVENTREG_15_02 PACK_WEEKEVENTREG_FLAG(15, 0x02)
+#define WEEKEVENTREG_15_04 PACK_WEEKEVENTREG_FLAG(15, 0x04)
+#define WEEKEVENTREG_15_08 PACK_WEEKEVENTREG_FLAG(15, 0x08)
+#define WEEKEVENTREG_15_10 PACK_WEEKEVENTREG_FLAG(15, 0x10)
+#define WEEKEVENTREG_15_20 PACK_WEEKEVENTREG_FLAG(15, 0x20)
+#define WEEKEVENTREG_15_40 PACK_WEEKEVENTREG_FLAG(15, 0x40)
+#define WEEKEVENTREG_15_80 PACK_WEEKEVENTREG_FLAG(15, 0x80)
+#define WEEKEVENTREG_16_01 PACK_WEEKEVENTREG_FLAG(16, 0x01)
+#define WEEKEVENTREG_16_02 PACK_WEEKEVENTREG_FLAG(16, 0x02)
+#define WEEKEVENTREG_16_04 PACK_WEEKEVENTREG_FLAG(16, 0x04)
+#define WEEKEVENTREG_16_08 PACK_WEEKEVENTREG_FLAG(16, 0x08)
+#define WEEKEVENTREG_16_10 PACK_WEEKEVENTREG_FLAG(16, 0x10)
+#define WEEKEVENTREG_16_20 PACK_WEEKEVENTREG_FLAG(16, 0x20)
+#define WEEKEVENTREG_16_40 PACK_WEEKEVENTREG_FLAG(16, 0x40)
+#define WEEKEVENTREG_16_80 PACK_WEEKEVENTREG_FLAG(16, 0x80)
+#define WEEKEVENTREG_17_01 PACK_WEEKEVENTREG_FLAG(17, 0x01)
+#define WEEKEVENTREG_17_02 PACK_WEEKEVENTREG_FLAG(17, 0x02)
+#define WEEKEVENTREG_17_04 PACK_WEEKEVENTREG_FLAG(17, 0x04)
+#define WEEKEVENTREG_17_08 PACK_WEEKEVENTREG_FLAG(17, 0x08)
+#define WEEKEVENTREG_17_10 PACK_WEEKEVENTREG_FLAG(17, 0x10)
+#define WEEKEVENTREG_17_20 PACK_WEEKEVENTREG_FLAG(17, 0x20)
+#define WEEKEVENTREG_17_40 PACK_WEEKEVENTREG_FLAG(17, 0x40)
+#define WEEKEVENTREG_17_80 PACK_WEEKEVENTREG_FLAG(17, 0x80)
+#define WEEKEVENTREG_18_01 PACK_WEEKEVENTREG_FLAG(18, 0x01)
+#define WEEKEVENTREG_18_02 PACK_WEEKEVENTREG_FLAG(18, 0x02)
+#define WEEKEVENTREG_18_04 PACK_WEEKEVENTREG_FLAG(18, 0x04)
+#define WEEKEVENTREG_18_08 PACK_WEEKEVENTREG_FLAG(18, 0x08)
+#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)
+#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)
+#define WEEKEVENTREG_19_08 PACK_WEEKEVENTREG_FLAG(19, 0x08)
+#define WEEKEVENTREG_19_10 PACK_WEEKEVENTREG_FLAG(19, 0x10)
+#define WEEKEVENTREG_19_20 PACK_WEEKEVENTREG_FLAG(19, 0x20)
+#define WEEKEVENTREG_19_40 PACK_WEEKEVENTREG_FLAG(19, 0x40)
+#define WEEKEVENTREG_19_80 PACK_WEEKEVENTREG_FLAG(19, 0x80)
+#define WEEKEVENTREG_20_01 PACK_WEEKEVENTREG_FLAG(20, 0x01)
+
+// woodfall temple purification cutscene watched
+#define WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE PACK_WEEKEVENTREG_FLAG(20, 0x02)
+
+#define WEEKEVENTREG_20_04 PACK_WEEKEVENTREG_FLAG(20, 0x04)
+#define WEEKEVENTREG_20_08 PACK_WEEKEVENTREG_FLAG(20, 0x08)
+#define WEEKEVENTREG_20_10 PACK_WEEKEVENTREG_FLAG(20, 0x10)
+#define WEEKEVENTREG_20_20 PACK_WEEKEVENTREG_FLAG(20, 0x20)
+#define WEEKEVENTREG_20_40 PACK_WEEKEVENTREG_FLAG(20, 0x40)
+#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)
+#define WEEKEVENTREG_21_10 PACK_WEEKEVENTREG_FLAG(21, 0x10)
+#define WEEKEVENTREG_21_20 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_22_02 PACK_WEEKEVENTREG_FLAG(22, 0x02)
+#define WEEKEVENTREG_22_04 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)
+#define WEEKEVENTREG_22_40 PACK_WEEKEVENTREG_FLAG(22, 0x40)
+#define WEEKEVENTREG_22_80 PACK_WEEKEVENTREG_FLAG(22, 0x80)
+#define WEEKEVENTREG_23_01 PACK_WEEKEVENTREG_FLAG(23, 0x01)
+#define WEEKEVENTREG_23_02 PACK_WEEKEVENTREG_FLAG(23, 0x02)
+#define WEEKEVENTREG_23_04 PACK_WEEKEVENTREG_FLAG(23, 0x04)
+#define WEEKEVENTREG_23_08 PACK_WEEKEVENTREG_FLAG(23, 0x08)
+#define WEEKEVENTREG_23_10 PACK_WEEKEVENTREG_FLAG(23, 0x10)
+#define WEEKEVENTREG_23_20 PACK_WEEKEVENTREG_FLAG(23, 0x20)
+#define WEEKEVENTREG_23_40 PACK_WEEKEVENTREG_FLAG(23, 0x40)
+#define WEEKEVENTREG_23_80 PACK_WEEKEVENTREG_FLAG(23, 0x80)
+#define WEEKEVENTREG_24_01 PACK_WEEKEVENTREG_FLAG(24, 0x01)
+#define WEEKEVENTREG_24_02 PACK_WEEKEVENTREG_FLAG(24, 0x02)
+#define WEEKEVENTREG_24_04 PACK_WEEKEVENTREG_FLAG(24, 0x04)
+#define WEEKEVENTREG_24_08 PACK_WEEKEVENTREG_FLAG(24, 0x08)
+
+// The player has already talked as a Goron at least once to Goron elder
+#define WEEKEVENTREG_24_10 PACK_WEEKEVENTREG_FLAG(24, 0x10)
+
+// The player has already talked as a non-Goron at least once
+#define WEEKEVENTREG_24_20 PACK_WEEKEVENTREG_FLAG(24, 0x20)
+
+#define WEEKEVENTREG_24_40 PACK_WEEKEVENTREG_FLAG(24, 0x40)
+
+// The player has talked to the Goron Child at least once
+#define WEEKEVENTREG_24_80 PACK_WEEKEVENTREG_FLAG(24, 0x80)
+
+#define WEEKEVENTREG_25_01 PACK_WEEKEVENTREG_FLAG(25, 0x01)
+#define WEEKEVENTREG_25_02 PACK_WEEKEVENTREG_FLAG(25, 0x02)
+#define WEEKEVENTREG_25_04 PACK_WEEKEVENTREG_FLAG(25, 0x04)
+
+// breman mask was already used
+#define WEEKEVENTREG_25_08 PACK_WEEKEVENTREG_FLAG(25, 0x08)
+
+#define WEEKEVENTREG_25_10 PACK_WEEKEVENTREG_FLAG(25, 0x10)
+#define WEEKEVENTREG_25_20 PACK_WEEKEVENTREG_FLAG(25, 0x20)
+#define WEEKEVENTREG_25_40 PACK_WEEKEVENTREG_FLAG(25, 0x40)
+#define WEEKEVENTREG_25_80 PACK_WEEKEVENTREG_FLAG(25, 0x80)
+#define WEEKEVENTREG_26_01 PACK_WEEKEVENTREG_FLAG(26, 0x01)
+#define WEEKEVENTREG_26_02 PACK_WEEKEVENTREG_FLAG(26, 0x02)
+#define WEEKEVENTREG_26_04 PACK_WEEKEVENTREG_FLAG(26, 0x04)
+#define WEEKEVENTREG_26_08 PACK_WEEKEVENTREG_FLAG(26, 0x08)
+#define WEEKEVENTREG_26_10 PACK_WEEKEVENTREG_FLAG(26, 0x10)
+#define WEEKEVENTREG_26_20 PACK_WEEKEVENTREG_FLAG(26, 0x20)
+#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_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)
+#define WEEKEVENTREG_28_02 PACK_WEEKEVENTREG_FLAG(28, 0x02)
+#define WEEKEVENTREG_28_04 PACK_WEEKEVENTREG_FLAG(28, 0x04)
+#define WEEKEVENTREG_28_08 PACK_WEEKEVENTREG_FLAG(28, 0x08)
+#define WEEKEVENTREG_28_10 PACK_WEEKEVENTREG_FLAG(28, 0x10)
+#define WEEKEVENTREG_28_20 PACK_WEEKEVENTREG_FLAG(28, 0x20)
+#define WEEKEVENTREG_28_40 PACK_WEEKEVENTREG_FLAG(28, 0x40)
+#define WEEKEVENTREG_28_80 PACK_WEEKEVENTREG_FLAG(28, 0x80)
+#define WEEKEVENTREG_29_01 PACK_WEEKEVENTREG_FLAG(29, 0x01)
+#define WEEKEVENTREG_29_02 PACK_WEEKEVENTREG_FLAG(29, 0x02)
+#define WEEKEVENTREG_29_04 PACK_WEEKEVENTREG_FLAG(29, 0x04)
+#define WEEKEVENTREG_29_08 PACK_WEEKEVENTREG_FLAG(29, 0x08)
+#define WEEKEVENTREG_29_10 PACK_WEEKEVENTREG_FLAG(29, 0x10)
+#define WEEKEVENTREG_29_20 PACK_WEEKEVENTREG_FLAG(29, 0x20)
+#define WEEKEVENTREG_29_40 PACK_WEEKEVENTREG_FLAG(29, 0x40)
+#define WEEKEVENTREG_29_80 PACK_WEEKEVENTREG_FLAG(29, 0x80)
+#define WEEKEVENTREG_30_01 PACK_WEEKEVENTREG_FLAG(30, 0x01)
+#define WEEKEVENTREG_30_02 PACK_WEEKEVENTREG_FLAG(30, 0x02)
+#define WEEKEVENTREG_30_04 PACK_WEEKEVENTREG_FLAG(30, 0x04)
+#define WEEKEVENTREG_30_08 PACK_WEEKEVENTREG_FLAG(30, 0x08)
+#define WEEKEVENTREG_30_10 PACK_WEEKEVENTREG_FLAG(30, 0x10)
+#define WEEKEVENTREG_30_20 PACK_WEEKEVENTREG_FLAG(30, 0x20)
+#define WEEKEVENTREG_30_40 PACK_WEEKEVENTREG_FLAG(30, 0x40)
+#define WEEKEVENTREG_30_80 PACK_WEEKEVENTREG_FLAG(30, 0x80)
+#define WEEKEVENTREG_31_01 PACK_WEEKEVENTREG_FLAG(31, 0x01)
+#define WEEKEVENTREG_31_02 PACK_WEEKEVENTREG_FLAG(31, 0x02)
+
+// Unconfirmed: "Tatl's Second Cycle Text?"
+#define WEEKEVENTREG_31_04 PACK_WEEKEVENTREG_FLAG(31, 0x04)
+
+#define WEEKEVENTREG_31_08 PACK_WEEKEVENTREG_FLAG(31, 0x08)
+#define WEEKEVENTREG_31_10 PACK_WEEKEVENTREG_FLAG(31, 0x10)
+#define WEEKEVENTREG_31_20 PACK_WEEKEVENTREG_FLAG(31, 0x20)
+
+//! @note: entrance cutscenes defined in `CutsceneEntry` can not use
+//! any of the below weekEventFlags due to bitpacking
+
+// Cremia asked the player to accompany her to town
+#define WEEKEVENTREG_31_40 PACK_WEEKEVENTREG_FLAG(31, 0x40)
+// Player is playing the Milk Run
+#define WEEKEVENTREG_31_80 PACK_WEEKEVENTREG_FLAG(31, 0x80)
+
+#define WEEKEVENTREG_32_01 PACK_WEEKEVENTREG_FLAG(32, 0x01)
+#define WEEKEVENTREG_32_02 PACK_WEEKEVENTREG_FLAG(32, 0x02)
+#define WEEKEVENTREG_32_04 PACK_WEEKEVENTREG_FLAG(32, 0x04)
+#define WEEKEVENTREG_32_08 PACK_WEEKEVENTREG_FLAG(32, 0x08)
+#define WEEKEVENTREG_32_10 PACK_WEEKEVENTREG_FLAG(32, 0x10)
+#define WEEKEVENTREG_32_20 PACK_WEEKEVENTREG_FLAG(32, 0x20)
+
+// Woodfall Temple Frog Returned
+#define WEEKEVENTREG_32_40 PACK_WEEKEVENTREG_FLAG(32, 0x40)
+// Great Bay Temple Frog Returned
+#define WEEKEVENTREG_32_80 PACK_WEEKEVENTREG_FLAG(32, 0x80)
+// Southern Swamp Frog Returned
+#define WEEKEVENTREG_33_01 PACK_WEEKEVENTREG_FLAG(33, 0x01)
+// Laundry Pool Frog Returned
+#define WEEKEVENTREG_33_02 PACK_WEEKEVENTREG_FLAG(33, 0x02)
+
+#define WEEKEVENTREG_33_04 PACK_WEEKEVENTREG_FLAG(33, 0x04)
+#define WEEKEVENTREG_33_08 PACK_WEEKEVENTREG_FLAG(33, 0x08)
+#define WEEKEVENTREG_33_10 PACK_WEEKEVENTREG_FLAG(33, 0x10)
+#define WEEKEVENTREG_33_20 PACK_WEEKEVENTREG_FLAG(33, 0x20)
+#define WEEKEVENTREG_33_40 PACK_WEEKEVENTREG_FLAG(33, 0x40)
+
+// Mountain village is unfrozen
+#define WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE PACK_WEEKEVENTREG_FLAG(33, 0x80)
+// Spoken to MINIFROG_YELLOW
+#define WEEKEVENTREG_34_01 PACK_WEEKEVENTREG_FLAG(34, 0x01)
+
+#define WEEKEVENTREG_34_02 PACK_WEEKEVENTREG_FLAG(34, 0x02)
+#define WEEKEVENTREG_34_04 PACK_WEEKEVENTREG_FLAG(34, 0x04)
+#define WEEKEVENTREG_SWAMP_SPIDER_HOUSE_TALKED PACK_WEEKEVENTREG_FLAG(34, 0x08)
+#define WEEKEVENTREG_34_10 PACK_WEEKEVENTREG_FLAG(34, 0x10)
+#define WEEKEVENTREG_34_20 PACK_WEEKEVENTREG_FLAG(34, 0x20)
+#define WEEKEVENTREG_RECEIVED_MASK_OF_TRUTH PACK_WEEKEVENTREG_FLAG(34, 0x40)
+
+// Cremia did Milk Run alone. Player didn't interact or didn't accept the ride
+#define WEEKEVENTREG_34_80 PACK_WEEKEVENTREG_FLAG(34, 0x80)
+
+#define WEEKEVENTREG_35_01 PACK_WEEKEVENTREG_FLAG(35, 0x01)
+#define WEEKEVENTREG_35_02 PACK_WEEKEVENTREG_FLAG(35, 0x02)
+#define WEEKEVENTREG_35_04 PACK_WEEKEVENTREG_FLAG(35, 0x04)
+#define WEEKEVENTREG_35_08 PACK_WEEKEVENTREG_FLAG(35, 0x08)
+#define WEEKEVENTREG_35_10 PACK_WEEKEVENTREG_FLAG(35, 0x10)
+#define WEEKEVENTREG_35_20 PACK_WEEKEVENTREG_FLAG(35, 0x20)
+#define WEEKEVENTREG_35_40 PACK_WEEKEVENTREG_FLAG(35, 0x40)
+
+// Obtained Heart Piece from Five Frogs of the Frog Choir
+#define WEEKEVENTREG_35_80 PACK_WEEKEVENTREG_FLAG(35, 0x80)
+
+#define WEEKEVENTREG_36_01 PACK_WEEKEVENTREG_FLAG(36, 0x01)
+#define WEEKEVENTREG_36_02 PACK_WEEKEVENTREG_FLAG(36, 0x02)
+#define WEEKEVENTREG_36_04 PACK_WEEKEVENTREG_FLAG(36, 0x04)
+#define WEEKEVENTREG_36_08 PACK_WEEKEVENTREG_FLAG(36, 0x08)
+#define WEEKEVENTREG_36_10 PACK_WEEKEVENTREG_FLAG(36, 0x10)
+#define WEEKEVENTREG_36_20 PACK_WEEKEVENTREG_FLAG(36, 0x20)
+#define WEEKEVENTREG_36_40 PACK_WEEKEVENTREG_FLAG(36, 0x40)
+#define WEEKEVENTREG_36_80 PACK_WEEKEVENTREG_FLAG(36, 0x80)
+#define WEEKEVENTREG_37_01 PACK_WEEKEVENTREG_FLAG(37, 0x01)
+#define WEEKEVENTREG_37_02 PACK_WEEKEVENTREG_FLAG(37, 0x02)
+#define WEEKEVENTREG_37_04 PACK_WEEKEVENTREG_FLAG(37, 0x04)
+#define WEEKEVENTREG_37_08 PACK_WEEKEVENTREG_FLAG(37, 0x08)
+#define WEEKEVENTREG_37_10 PACK_WEEKEVENTREG_FLAG(37, 0x10)
+#define WEEKEVENTREG_37_20 PACK_WEEKEVENTREG_FLAG(37, 0x20)
+#define WEEKEVENTREG_37_40 PACK_WEEKEVENTREG_FLAG(37, 0x40)
+#define WEEKEVENTREG_37_80 PACK_WEEKEVENTREG_FLAG(37, 0x80)
+#define WEEKEVENTREG_38_01 PACK_WEEKEVENTREG_FLAG(38, 0x01)
+#define WEEKEVENTREG_38_02 PACK_WEEKEVENTREG_FLAG(38, 0x02)
+#define WEEKEVENTREG_38_04 PACK_WEEKEVENTREG_FLAG(38, 0x04)
+#define WEEKEVENTREG_38_08 PACK_WEEKEVENTREG_FLAG(38, 0x08)
+#define WEEKEVENTREG_38_10 PACK_WEEKEVENTREG_FLAG(38, 0x10)
+#define WEEKEVENTREG_38_20 PACK_WEEKEVENTREG_FLAG(38, 0x20)
+#define WEEKEVENTREG_38_40 PACK_WEEKEVENTREG_FLAG(38, 0x40)
+#define WEEKEVENTREG_38_80 PACK_WEEKEVENTREG_FLAG(38, 0x80)
+#define WEEKEVENTREG_39_01 PACK_WEEKEVENTREG_FLAG(39, 0x01)
+#define WEEKEVENTREG_39_02 PACK_WEEKEVENTREG_FLAG(39, 0x02)
+#define WEEKEVENTREG_39_04 PACK_WEEKEVENTREG_FLAG(39, 0x04)
+#define WEEKEVENTREG_39_08 PACK_WEEKEVENTREG_FLAG(39, 0x08)
+#define WEEKEVENTREG_39_10 PACK_WEEKEVENTREG_FLAG(39, 0x10)
+#define WEEKEVENTREG_39_20 PACK_WEEKEVENTREG_FLAG(39, 0x20)
+#define WEEKEVENTREG_39_40 PACK_WEEKEVENTREG_FLAG(39, 0x40)
+#define WEEKEVENTREG_39_80 PACK_WEEKEVENTREG_FLAG(39, 0x80)
+#define WEEKEVENTREG_40_01 PACK_WEEKEVENTREG_FLAG(40, 0x01)
+#define WEEKEVENTREG_40_02 PACK_WEEKEVENTREG_FLAG(40, 0x02)
+#define WEEKEVENTREG_40_04 PACK_WEEKEVENTREG_FLAG(40, 0x04)
+#define WEEKEVENTREG_40_08 PACK_WEEKEVENTREG_FLAG(40, 0x08)
+#define WEEKEVENTREG_40_10 PACK_WEEKEVENTREG_FLAG(40, 0x10)
+#define WEEKEVENTREG_40_20 PACK_WEEKEVENTREG_FLAG(40, 0x20)
+#define WEEKEVENTREG_40_40 PACK_WEEKEVENTREG_FLAG(40, 0x40)
+#define WEEKEVENTREG_40_80 PACK_WEEKEVENTREG_FLAG(40, 0x80)
+#define WEEKEVENTREG_41_01 PACK_WEEKEVENTREG_FLAG(41, 0x01)
+#define WEEKEVENTREG_41_02 PACK_WEEKEVENTREG_FLAG(41, 0x02)
+#define WEEKEVENTREG_41_04 PACK_WEEKEVENTREG_FLAG(41, 0x04)
+#define WEEKEVENTREG_41_08 PACK_WEEKEVENTREG_FLAG(41, 0x08)
+#define WEEKEVENTREG_41_10 PACK_WEEKEVENTREG_FLAG(41, 0x10)
+#define WEEKEVENTREG_41_20 PACK_WEEKEVENTREG_FLAG(41, 0x20)
+#define WEEKEVENTREG_41_40 PACK_WEEKEVENTREG_FLAG(41, 0x40)
+#define WEEKEVENTREG_41_80 PACK_WEEKEVENTREG_FLAG(41, 0x80)
+#define WEEKEVENTREG_42_01 PACK_WEEKEVENTREG_FLAG(42, 0x01)
+#define WEEKEVENTREG_42_02 PACK_WEEKEVENTREG_FLAG(42, 0x02)
+#define WEEKEVENTREG_42_04 PACK_WEEKEVENTREG_FLAG(42, 0x04)
+#define WEEKEVENTREG_42_08 PACK_WEEKEVENTREG_FLAG(42, 0x08)
+#define WEEKEVENTREG_42_10 PACK_WEEKEVENTREG_FLAG(42, 0x10)
+#define WEEKEVENTREG_42_20 PACK_WEEKEVENTREG_FLAG(42, 0x20)
+#define WEEKEVENTREG_42_40 PACK_WEEKEVENTREG_FLAG(42, 0x40)
+#define WEEKEVENTREG_42_80 PACK_WEEKEVENTREG_FLAG(42, 0x80)
+#define WEEKEVENTREG_43_01 PACK_WEEKEVENTREG_FLAG(43, 0x01)
+#define WEEKEVENTREG_43_02 PACK_WEEKEVENTREG_FLAG(43, 0x02)
+#define WEEKEVENTREG_43_04 PACK_WEEKEVENTREG_FLAG(43, 0x04)
+#define WEEKEVENTREG_43_08 PACK_WEEKEVENTREG_FLAG(43, 0x08)
+#define WEEKEVENTREG_43_10 PACK_WEEKEVENTREG_FLAG(43, 0x10)
+#define WEEKEVENTREG_43_20 PACK_WEEKEVENTREG_FLAG(43, 0x20)
+#define WEEKEVENTREG_43_40 PACK_WEEKEVENTREG_FLAG(43, 0x40)
+#define WEEKEVENTREG_43_80 PACK_WEEKEVENTREG_FLAG(43, 0x80)
+#define WEEKEVENTREG_44_01 PACK_WEEKEVENTREG_FLAG(44, 0x01)
+#define WEEKEVENTREG_44_02 PACK_WEEKEVENTREG_FLAG(44, 0x02)
+#define WEEKEVENTREG_44_04 PACK_WEEKEVENTREG_FLAG(44, 0x04)
+#define WEEKEVENTREG_44_08 PACK_WEEKEVENTREG_FLAG(44, 0x08)
+#define WEEKEVENTREG_44_10 PACK_WEEKEVENTREG_FLAG(44, 0x10)
+#define WEEKEVENTREG_44_20 PACK_WEEKEVENTREG_FLAG(44, 0x20)
+#define WEEKEVENTREG_44_40 PACK_WEEKEVENTREG_FLAG(44, 0x40)
+#define WEEKEVENTREG_44_80 PACK_WEEKEVENTREG_FLAG(44, 0x80)
+#define WEEKEVENTREG_45_01 PACK_WEEKEVENTREG_FLAG(45, 0x01)
+#define WEEKEVENTREG_45_02 PACK_WEEKEVENTREG_FLAG(45, 0x02)
+#define WEEKEVENTREG_45_04 PACK_WEEKEVENTREG_FLAG(45, 0x04)
+#define WEEKEVENTREG_45_08 PACK_WEEKEVENTREG_FLAG(45, 0x08)
+#define WEEKEVENTREG_45_10 PACK_WEEKEVENTREG_FLAG(45, 0x10)
+#define WEEKEVENTREG_45_20 PACK_WEEKEVENTREG_FLAG(45, 0x20)
+#define WEEKEVENTREG_45_40 PACK_WEEKEVENTREG_FLAG(45, 0x40)
+#define WEEKEVENTREG_45_80 PACK_WEEKEVENTREG_FLAG(45, 0x80)
+#define WEEKEVENTREG_46_01 PACK_WEEKEVENTREG_FLAG(46, 0x01)
+#define WEEKEVENTREG_46_02 PACK_WEEKEVENTREG_FLAG(46, 0x02)
+#define WEEKEVENTREG_46_04 PACK_WEEKEVENTREG_FLAG(46, 0x04)
+#define WEEKEVENTREG_46_08 PACK_WEEKEVENTREG_FLAG(46, 0x08)
+#define WEEKEVENTREG_46_10 PACK_WEEKEVENTREG_FLAG(46, 0x10)
+#define WEEKEVENTREG_46_20 PACK_WEEKEVENTREG_FLAG(46, 0x20)
+#define WEEKEVENTREG_46_40 PACK_WEEKEVENTREG_FLAG(46, 0x40)
+#define WEEKEVENTREG_46_80 PACK_WEEKEVENTREG_FLAG(46, 0x80)
+#define WEEKEVENTREG_47_01 PACK_WEEKEVENTREG_FLAG(47, 0x01)
+#define WEEKEVENTREG_47_02 PACK_WEEKEVENTREG_FLAG(47, 0x02)
+#define WEEKEVENTREG_47_04 PACK_WEEKEVENTREG_FLAG(47, 0x04)
+#define WEEKEVENTREG_47_08 PACK_WEEKEVENTREG_FLAG(47, 0x08)
+#define WEEKEVENTREG_47_10 PACK_WEEKEVENTREG_FLAG(47, 0x10)
+#define WEEKEVENTREG_47_20 PACK_WEEKEVENTREG_FLAG(47, 0x20)
+#define WEEKEVENTREG_47_40 PACK_WEEKEVENTREG_FLAG(47, 0x40)
+#define WEEKEVENTREG_47_80 PACK_WEEKEVENTREG_FLAG(47, 0x80)
+#define WEEKEVENTREG_48_01 PACK_WEEKEVENTREG_FLAG(48, 0x01)
+#define WEEKEVENTREG_48_02 PACK_WEEKEVENTREG_FLAG(48, 0x02)
+#define WEEKEVENTREG_48_04 PACK_WEEKEVENTREG_FLAG(48, 0x04)
+#define WEEKEVENTREG_48_08 PACK_WEEKEVENTREG_FLAG(48, 0x08)
+#define WEEKEVENTREG_48_10 PACK_WEEKEVENTREG_FLAG(48, 0x10)
+#define WEEKEVENTREG_48_20 PACK_WEEKEVENTREG_FLAG(48, 0x20)
+#define WEEKEVENTREG_48_40 PACK_WEEKEVENTREG_FLAG(48, 0x40)
+#define WEEKEVENTREG_48_80 PACK_WEEKEVENTREG_FLAG(48, 0x80)
+#define WEEKEVENTREG_49_01 PACK_WEEKEVENTREG_FLAG(49, 0x01)
+#define WEEKEVENTREG_49_02 PACK_WEEKEVENTREG_FLAG(49, 0x02)
+#define WEEKEVENTREG_49_04 PACK_WEEKEVENTREG_FLAG(49, 0x04)
+#define WEEKEVENTREG_49_08 PACK_WEEKEVENTREG_FLAG(49, 0x08)
+#define WEEKEVENTREG_49_10 PACK_WEEKEVENTREG_FLAG(49, 0x10)
+#define WEEKEVENTREG_49_20 PACK_WEEKEVENTREG_FLAG(49, 0x20)
+#define WEEKEVENTREG_49_40 PACK_WEEKEVENTREG_FLAG(49, 0x40)
+#define WEEKEVENTREG_49_80 PACK_WEEKEVENTREG_FLAG(49, 0x80)
+#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_50_10 PACK_WEEKEVENTREG_FLAG(50, 0x10)
+#define WEEKEVENTREG_50_20 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_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_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)
+// Lose Milk Run minigame
+#define WEEKEVENTREG_52_02 PACK_WEEKEVENTREG_FLAG(52, 0x02)
+
+#define WEEKEVENTREG_52_04 PACK_WEEKEVENTREG_FLAG(52, 0x04)
+#define WEEKEVENTREG_52_08 PACK_WEEKEVENTREG_FLAG(52, 0x08)
+#define WEEKEVENTREG_52_10 PACK_WEEKEVENTREG_FLAG(52, 0x10)
+
+// cleared Stone Tower Temple
+#define WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE PACK_WEEKEVENTREG_FLAG(52, 0x20)
+
+#define WEEKEVENTREG_52_40 PACK_WEEKEVENTREG_FLAG(52, 0x40)
+#define WEEKEVENTREG_52_80 PACK_WEEKEVENTREG_FLAG(52, 0x80)
+#define WEEKEVENTREG_53_01 PACK_WEEKEVENTREG_FLAG(53, 0x01)
+#define WEEKEVENTREG_53_02 PACK_WEEKEVENTREG_FLAG(53, 0x02)
+#define WEEKEVENTREG_53_04 PACK_WEEKEVENTREG_FLAG(53, 0x04)
+#define WEEKEVENTREG_53_08 PACK_WEEKEVENTREG_FLAG(53, 0x08)
+#define WEEKEVENTREG_53_10 PACK_WEEKEVENTREG_FLAG(53, 0x10)
+#define WEEKEVENTREG_53_20 PACK_WEEKEVENTREG_FLAG(53, 0x20)
+#define WEEKEVENTREG_53_40 PACK_WEEKEVENTREG_FLAG(53, 0x40)
+#define WEEKEVENTREG_53_80 PACK_WEEKEVENTREG_FLAG(53, 0x80)
+#define WEEKEVENTREG_54_01 PACK_WEEKEVENTREG_FLAG(54, 0x01)
+#define WEEKEVENTREG_54_02 PACK_WEEKEVENTREG_FLAG(54, 0x02)
+#define WEEKEVENTREG_54_04 PACK_WEEKEVENTREG_FLAG(54, 0x04)
+#define WEEKEVENTREG_54_08 PACK_WEEKEVENTREG_FLAG(54, 0x08)
+#define WEEKEVENTREG_54_10 PACK_WEEKEVENTREG_FLAG(54, 0x10)
+#define WEEKEVENTREG_54_20 PACK_WEEKEVENTREG_FLAG(54, 0x20)
+#define WEEKEVENTREG_54_40 PACK_WEEKEVENTREG_FLAG(54, 0x40)
+#define WEEKEVENTREG_54_80 PACK_WEEKEVENTREG_FLAG(54, 0x80)
+#define WEEKEVENTREG_55_01 PACK_WEEKEVENTREG_FLAG(55, 0x01)
+
+// Unconfirmed: "Link the Goron Claims His Reservation: 4:30 PM"
+#define WEEKEVENTREG_55_02 PACK_WEEKEVENTREG_FLAG(55, 0x02)
+
+#define WEEKEVENTREG_55_04 PACK_WEEKEVENTREG_FLAG(55, 0x04)
+#define WEEKEVENTREG_55_08 PACK_WEEKEVENTREG_FLAG(55, 0x08)
+#define WEEKEVENTREG_55_10 PACK_WEEKEVENTREG_FLAG(55, 0x10)
+#define WEEKEVENTREG_55_20 PACK_WEEKEVENTREG_FLAG(55, 0x20)
+#define WEEKEVENTREG_55_40 PACK_WEEKEVENTREG_FLAG(55, 0x40)
+
+// Gyorg has been defeated
+#define WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE PACK_WEEKEVENTREG_FLAG(55, 0x80)
+
+#define WEEKEVENTREG_56_01 PACK_WEEKEVENTREG_FLAG(56, 0x01)
+#define WEEKEVENTREG_56_02 PACK_WEEKEVENTREG_FLAG(56, 0x02)
+#define WEEKEVENTREG_56_04 PACK_WEEKEVENTREG_FLAG(56, 0x04)
+#define WEEKEVENTREG_56_08 PACK_WEEKEVENTREG_FLAG(56, 0x08)
+#define WEEKEVENTREG_56_10 PACK_WEEKEVENTREG_FLAG(56, 0x10)
+#define WEEKEVENTREG_56_20 PACK_WEEKEVENTREG_FLAG(56, 0x20)
+#define WEEKEVENTREG_56_40 PACK_WEEKEVENTREG_FLAG(56, 0x40)
+#define WEEKEVENTREG_56_80 PACK_WEEKEVENTREG_FLAG(56, 0x80)
+#define WEEKEVENTREG_57_01 PACK_WEEKEVENTREG_FLAG(57, 0x01)
+#define WEEKEVENTREG_57_02 PACK_WEEKEVENTREG_FLAG(57, 0x02)
+#define WEEKEVENTREG_57_04 PACK_WEEKEVENTREG_FLAG(57, 0x04)
+#define WEEKEVENTREG_57_08 PACK_WEEKEVENTREG_FLAG(57, 0x08)
+#define WEEKEVENTREG_57_10 PACK_WEEKEVENTREG_FLAG(57, 0x10)
+#define WEEKEVENTREG_57_20 PACK_WEEKEVENTREG_FLAG(57, 0x20)
+#define WEEKEVENTREG_57_40 PACK_WEEKEVENTREG_FLAG(57, 0x40)
+#define WEEKEVENTREG_57_80 PACK_WEEKEVENTREG_FLAG(57, 0x80)
+#define WEEKEVENTREG_58_01 PACK_WEEKEVENTREG_FLAG(58, 0x01)
+#define WEEKEVENTREG_58_02 PACK_WEEKEVENTREG_FLAG(58, 0x02)
+#define WEEKEVENTREG_58_04 PACK_WEEKEVENTREG_FLAG(58, 0x04)
+#define WEEKEVENTREG_58_08 PACK_WEEKEVENTREG_FLAG(58, 0x08)
+#define WEEKEVENTREG_58_10 PACK_WEEKEVENTREG_FLAG(58, 0x10)
+#define WEEKEVENTREG_58_20 PACK_WEEKEVENTREG_FLAG(58, 0x20)
+#define WEEKEVENTREG_58_40 PACK_WEEKEVENTREG_FLAG(58, 0x40)
+#define WEEKEVENTREG_58_80 PACK_WEEKEVENTREG_FLAG(58, 0x80)
+#define WEEKEVENTREG_59_01 PACK_WEEKEVENTREG_FLAG(59, 0x01)
+#define WEEKEVENTREG_59_02 PACK_WEEKEVENTREG_FLAG(59, 0x02)
+
+// Unconfirmed: "Entered South Clock Town"
+#define WEEKEVENTREG_59_04 PACK_WEEKEVENTREG_FLAG(59, 0x04)
+
+#define WEEKEVENTREG_59_08 PACK_WEEKEVENTREG_FLAG(59, 0x08)
+#define WEEKEVENTREG_59_10 PACK_WEEKEVENTREG_FLAG(59, 0x10)
+#define WEEKEVENTREG_59_20 PACK_WEEKEVENTREG_FLAG(59, 0x20)
+#define WEEKEVENTREG_59_40 PACK_WEEKEVENTREG_FLAG(59, 0x40)
+#define WEEKEVENTREG_59_80 PACK_WEEKEVENTREG_FLAG(59, 0x80)
+#define WEEKEVENTREG_60_01 PACK_WEEKEVENTREG_FLAG(60, 0x01)
+#define WEEKEVENTREG_60_02 PACK_WEEKEVENTREG_FLAG(60, 0x02)
+#define WEEKEVENTREG_60_04 PACK_WEEKEVENTREG_FLAG(60, 0x04)
+#define WEEKEVENTREG_60_08 PACK_WEEKEVENTREG_FLAG(60, 0x08)
+#define WEEKEVENTREG_60_10 PACK_WEEKEVENTREG_FLAG(60, 0x10)
+#define WEEKEVENTREG_60_20 PACK_WEEKEVENTREG_FLAG(60, 0x20)
+#define WEEKEVENTREG_60_40 PACK_WEEKEVENTREG_FLAG(60, 0x40)
+#define WEEKEVENTREG_60_80 PACK_WEEKEVENTREG_FLAG(60, 0x80)
+#define WEEKEVENTREG_61_01 PACK_WEEKEVENTREG_FLAG(61, 0x01)
+#define WEEKEVENTREG_61_02 PACK_WEEKEVENTREG_FLAG(61, 0x02)
+#define WEEKEVENTREG_61_04 PACK_WEEKEVENTREG_FLAG(61, 0x04)
+#define WEEKEVENTREG_61_08 PACK_WEEKEVENTREG_FLAG(61, 0x08)
+#define WEEKEVENTREG_61_10 PACK_WEEKEVENTREG_FLAG(61, 0x10)
+#define WEEKEVENTREG_61_20 PACK_WEEKEVENTREG_FLAG(61, 0x20)
+#define WEEKEVENTREG_61_40 PACK_WEEKEVENTREG_FLAG(61, 0x40)
+#define WEEKEVENTREG_61_80 PACK_WEEKEVENTREG_FLAG(61, 0x80)
+#define WEEKEVENTREG_62_01 PACK_WEEKEVENTREG_FLAG(62, 0x01)
+#define WEEKEVENTREG_62_02 PACK_WEEKEVENTREG_FLAG(62, 0x02)
+#define WEEKEVENTREG_62_04 PACK_WEEKEVENTREG_FLAG(62, 0x04)
+#define WEEKEVENTREG_62_08 PACK_WEEKEVENTREG_FLAG(62, 0x08)
+#define WEEKEVENTREG_62_10 PACK_WEEKEVENTREG_FLAG(62, 0x10)
+#define WEEKEVENTREG_62_20 PACK_WEEKEVENTREG_FLAG(62, 0x20)
+#define WEEKEVENTREG_62_40 PACK_WEEKEVENTREG_FLAG(62, 0x40)
+#define WEEKEVENTREG_62_80 PACK_WEEKEVENTREG_FLAG(62, 0x80)
+
+// See `EnTimeTag_KickOut_WaitForTime` and `EnTimeTag_KickOut_WaitForTrigger`
+#define WEEKEVENTREG_KICKOUT_WAIT PACK_WEEKEVENTREG_FLAG(63, 0x01)
+// See `EnTimeTag_KickOut_WaitForTime` and `EnTimeTag_KickOut_WaitForTrigger`
+#define WEEKEVENTREG_KICKOUT_TIME_PASSED PACK_WEEKEVENTREG_FLAG(63, 0x02)
+
+#define WEEKEVENTREG_63_04 PACK_WEEKEVENTREG_FLAG(63, 0x04)
+#define WEEKEVENTREG_63_08 PACK_WEEKEVENTREG_FLAG(63, 0x08)
+#define WEEKEVENTREG_63_10 PACK_WEEKEVENTREG_FLAG(63, 0x10)
+#define WEEKEVENTREG_63_20 PACK_WEEKEVENTREG_FLAG(63, 0x20)
+#define WEEKEVENTREG_63_40 PACK_WEEKEVENTREG_FLAG(63, 0x40)
+
+// showed Couple's Mask to meeting
+#define WEEKEVENTREG_63_80 PACK_WEEKEVENTREG_FLAG(63, 0x80)
+
+#define WEEKEVENTREG_64_01 PACK_WEEKEVENTREG_FLAG(64, 0x01)
+#define WEEKEVENTREG_64_02 PACK_WEEKEVENTREG_FLAG(64, 0x02)
+#define WEEKEVENTREG_64_04 PACK_WEEKEVENTREG_FLAG(64, 0x04)
+#define WEEKEVENTREG_64_08 PACK_WEEKEVENTREG_FLAG(64, 0x08)
+#define WEEKEVENTREG_64_10 PACK_WEEKEVENTREG_FLAG(64, 0x10)
+#define WEEKEVENTREG_64_20 PACK_WEEKEVENTREG_FLAG(64, 0x20)
+#define WEEKEVENTREG_64_40 PACK_WEEKEVENTREG_FLAG(64, 0x40)
+#define WEEKEVENTREG_64_80 PACK_WEEKEVENTREG_FLAG(64, 0x80)
+#define WEEKEVENTREG_65_01 PACK_WEEKEVENTREG_FLAG(65, 0x01)
+#define WEEKEVENTREG_65_02 PACK_WEEKEVENTREG_FLAG(65, 0x02)
+#define WEEKEVENTREG_65_04 PACK_WEEKEVENTREG_FLAG(65, 0x04)
+#define WEEKEVENTREG_65_08 PACK_WEEKEVENTREG_FLAG(65, 0x08)
+#define WEEKEVENTREG_65_10 PACK_WEEKEVENTREG_FLAG(65, 0x10)
+#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)
+#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)
+#define WEEKEVENTREG_73_04 PACK_WEEKEVENTREG_FLAG(73, 0x04)
+#define WEEKEVENTREG_73_08 PACK_WEEKEVENTREG_FLAG(73, 0x08)
+
+// Unconfirmed: "Bombers Hide & Seek started on Day 1?"
+#define WEEKEVENTREG_73_10 PACK_WEEKEVENTREG_FLAG(73, 0x10)
+
+#define WEEKEVENTREG_73_20 PACK_WEEKEVENTREG_FLAG(73, 0x20)
+#define WEEKEVENTREG_73_40 PACK_WEEKEVENTREG_FLAG(73, 0x40)
+#define WEEKEVENTREG_73_80 PACK_WEEKEVENTREG_FLAG(73, 0x80)
+#define WEEKEVENTREG_74_01 PACK_WEEKEVENTREG_FLAG(74, 0x01)
+#define WEEKEVENTREG_74_02 PACK_WEEKEVENTREG_FLAG(74, 0x02)
+#define WEEKEVENTREG_74_04 PACK_WEEKEVENTREG_FLAG(74, 0x04)
+#define WEEKEVENTREG_74_08 PACK_WEEKEVENTREG_FLAG(74, 0x08)
+#define WEEKEVENTREG_74_10 PACK_WEEKEVENTREG_FLAG(74, 0x10)
+#define WEEKEVENTREG_74_20 PACK_WEEKEVENTREG_FLAG(74, 0x20)
+#define WEEKEVENTREG_74_40 PACK_WEEKEVENTREG_FLAG(74, 0x40)
+#define WEEKEVENTREG_74_80 PACK_WEEKEVENTREG_FLAG(74, 0x80)
+#define WEEKEVENTREG_75_01 PACK_WEEKEVENTREG_FLAG(75, 0x01)
+#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_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)
+#define WEEKEVENTREG_76_01 PACK_WEEKEVENTREG_FLAG(76, 0x01)
+#define WEEKEVENTREG_76_02 PACK_WEEKEVENTREG_FLAG(76, 0x02)
+#define WEEKEVENTREG_76_04 PACK_WEEKEVENTREG_FLAG(76, 0x04)
+#define WEEKEVENTREG_76_08 PACK_WEEKEVENTREG_FLAG(76, 0x08)
+#define WEEKEVENTREG_76_10 PACK_WEEKEVENTREG_FLAG(76, 0x10)
+#define WEEKEVENTREG_76_20 PACK_WEEKEVENTREG_FLAG(76, 0x20)
+#define WEEKEVENTREG_76_40 PACK_WEEKEVENTREG_FLAG(76, 0x40)
+#define WEEKEVENTREG_76_80 PACK_WEEKEVENTREG_FLAG(76, 0x80)
+#define WEEKEVENTREG_77_01 PACK_WEEKEVENTREG_FLAG(77, 0x01)
+#define WEEKEVENTREG_77_02 PACK_WEEKEVENTREG_FLAG(77, 0x02)
+#define WEEKEVENTREG_77_04 PACK_WEEKEVENTREG_FLAG(77, 0x04)
+#define WEEKEVENTREG_77_08 PACK_WEEKEVENTREG_FLAG(77, 0x08)
+#define WEEKEVENTREG_77_10 PACK_WEEKEVENTREG_FLAG(77, 0x10)
+#define WEEKEVENTREG_77_20 PACK_WEEKEVENTREG_FLAG(77, 0x20)
+#define WEEKEVENTREG_77_40 PACK_WEEKEVENTREG_FLAG(77, 0x40)
+
+// The player has heard the Goron Shrine cheer as a Goron at least once.
+#define WEEKEVENTREG_77_80 PACK_WEEKEVENTREG_FLAG(77, 0x80)
+
+#define WEEKEVENTREG_78_01 PACK_WEEKEVENTREG_FLAG(78, 0x01)
+#define WEEKEVENTREG_78_02 PACK_WEEKEVENTREG_FLAG(78, 0x02)
+#define WEEKEVENTREG_78_04 PACK_WEEKEVENTREG_FLAG(78, 0x04)
+#define WEEKEVENTREG_78_08 PACK_WEEKEVENTREG_FLAG(78, 0x08)
+#define WEEKEVENTREG_78_10 PACK_WEEKEVENTREG_FLAG(78, 0x10)
+#define WEEKEVENTREG_78_20 PACK_WEEKEVENTREG_FLAG(78, 0x20)
+#define WEEKEVENTREG_78_40 PACK_WEEKEVENTREG_FLAG(78, 0x40)
+#define WEEKEVENTREG_78_80 PACK_WEEKEVENTREG_FLAG(78, 0x80)
+#define WEEKEVENTREG_79_01 PACK_WEEKEVENTREG_FLAG(79, 0x01)
+#define WEEKEVENTREG_79_02 PACK_WEEKEVENTREG_FLAG(79, 0x02)
+#define WEEKEVENTREG_79_04 PACK_WEEKEVENTREG_FLAG(79, 0x04)
+#define WEEKEVENTREG_79_08 PACK_WEEKEVENTREG_FLAG(79, 0x08)
+#define WEEKEVENTREG_79_10 PACK_WEEKEVENTREG_FLAG(79, 0x10)
+#define WEEKEVENTREG_79_20 PACK_WEEKEVENTREG_FLAG(79, 0x20)
+#define WEEKEVENTREG_79_40 PACK_WEEKEVENTREG_FLAG(79, 0x40)
+#define WEEKEVENTREG_79_80 PACK_WEEKEVENTREG_FLAG(79, 0x80)
+#define WEEKEVENTREG_80_01 PACK_WEEKEVENTREG_FLAG(80, 0x01)
+#define WEEKEVENTREG_80_02 PACK_WEEKEVENTREG_FLAG(80, 0x02)
+#define WEEKEVENTREG_80_04 PACK_WEEKEVENTREG_FLAG(80, 0x04)
+
+// Aveil has spotted Player
+#define WEEKEVENTREG_80_08 PACK_WEEKEVENTREG_FLAG(80, 0x08)
+
+#define WEEKEVENTREG_80_10 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)
+#define WEEKEVENTREG_81_01 PACK_WEEKEVENTREG_FLAG(81, 0x01)
+#define WEEKEVENTREG_81_02 PACK_WEEKEVENTREG_FLAG(81, 0x02)
+#define WEEKEVENTREG_81_04 PACK_WEEKEVENTREG_FLAG(81, 0x04)
+#define WEEKEVENTREG_81_08 PACK_WEEKEVENTREG_FLAG(81, 0x08)
+#define WEEKEVENTREG_81_10 PACK_WEEKEVENTREG_FLAG(81, 0x10)
+#define WEEKEVENTREG_81_20 PACK_WEEKEVENTREG_FLAG(81, 0x20)
+#define WEEKEVENTREG_81_40 PACK_WEEKEVENTREG_FLAG(81, 0x40)
+#define WEEKEVENTREG_81_80 PACK_WEEKEVENTREG_FLAG(81, 0x80)
+#define WEEKEVENTREG_82_01 PACK_WEEKEVENTREG_FLAG(82, 0x01)
+#define WEEKEVENTREG_82_02 PACK_WEEKEVENTREG_FLAG(82, 0x02)
+
+// check if already healed Kamaro the Dancing Ghost
+#define WEEKEVENTREG_82_04 PACK_WEEKEVENTREG_FLAG(82, 0x04)
+
+// Related to Swordsman's log minigame
+#define WEEKEVENTREG_82_08 PACK_WEEKEVENTREG_FLAG(82, 0x08)
+#define WEEKEVENTREG_82_10 PACK_WEEKEVENTREG_FLAG(82, 0x10)
+#define WEEKEVENTREG_82_20 PACK_WEEKEVENTREG_FLAG(82, 0x20)
+#define WEEKEVENTREG_82_40 PACK_WEEKEVENTREG_FLAG(82, 0x40)
+#define WEEKEVENTREG_82_80 PACK_WEEKEVENTREG_FLAG(82, 0x80)
+#define WEEKEVENTREG_83_01 PACK_WEEKEVENTREG_FLAG(83, 0x01)
+
+// Knocked the Gerudo beehive down
+#define WEEKEVENTREG_83_02 PACK_WEEKEVENTREG_FLAG(83, 0x02)
+
+#define WEEKEVENTREG_83_04 PACK_WEEKEVENTREG_FLAG(83, 0x04)
+#define WEEKEVENTREG_83_08 PACK_WEEKEVENTREG_FLAG(83, 0x08)
+#define WEEKEVENTREG_83_10 PACK_WEEKEVENTREG_FLAG(83, 0x10)
+#define WEEKEVENTREG_83_20 PACK_WEEKEVENTREG_FLAG(83, 0x20)
+#define WEEKEVENTREG_83_40 PACK_WEEKEVENTREG_FLAG(83, 0x40)
+#define WEEKEVENTREG_83_80 PACK_WEEKEVENTREG_FLAG(83, 0x80)
+#define WEEKEVENTREG_84_01 PACK_WEEKEVENTREG_FLAG(84, 0x01)
+#define WEEKEVENTREG_84_02 PACK_WEEKEVENTREG_FLAG(84, 0x02)
+#define WEEKEVENTREG_84_04 PACK_WEEKEVENTREG_FLAG(84, 0x04)
+#define WEEKEVENTREG_84_08 PACK_WEEKEVENTREG_FLAG(84, 0x08)
+#define WEEKEVENTREG_84_10 PACK_WEEKEVENTREG_FLAG(84, 0x10)
+
+// Unconfirmed: "Obtained Fierce Deity's Mask?"
+// Also related to moon child
+#define WEEKEVENTREG_84_20 PACK_WEEKEVENTREG_FLAG(84, 0x20)
+
+#define WEEKEVENTREG_84_40 PACK_WEEKEVENTREG_FLAG(84, 0x40)
+#define WEEKEVENTREG_84_80 PACK_WEEKEVENTREG_FLAG(84, 0x80)
+#define WEEKEVENTREG_85_01 PACK_WEEKEVENTREG_FLAG(85, 0x01)
+
+// Unconfirmed: "Bombers Hide & Seek in Progress"
+#define WEEKEVENTREG_85_02 PACK_WEEKEVENTREG_FLAG(85, 0x02)
+
+#define WEEKEVENTREG_85_04 PACK_WEEKEVENTREG_FLAG(85, 0x04)
+#define WEEKEVENTREG_85_08 PACK_WEEKEVENTREG_FLAG(85, 0x08)
+#define WEEKEVENTREG_85_10 PACK_WEEKEVENTREG_FLAG(85, 0x10)
+#define WEEKEVENTREG_85_20 PACK_WEEKEVENTREG_FLAG(85, 0x20)
+#define WEEKEVENTREG_85_40 PACK_WEEKEVENTREG_FLAG(85, 0x40)
+
+// Unconfirmed: "Postman showing priority mail to Madame"
+#define WEEKEVENTREG_85_80 PACK_WEEKEVENTREG_FLAG(85, 0x80)
+
+#define WEEKEVENTREG_86_01 PACK_WEEKEVENTREG_FLAG(86, 0x01)
+#define WEEKEVENTREG_86_02 PACK_WEEKEVENTREG_FLAG(86, 0x02)
+#define WEEKEVENTREG_86_04 PACK_WEEKEVENTREG_FLAG(86, 0x04)
+#define WEEKEVENTREG_86_08 PACK_WEEKEVENTREG_FLAG(86, 0x08)
+#define WEEKEVENTREG_86_10 PACK_WEEKEVENTREG_FLAG(86, 0x10)
+#define WEEKEVENTREG_86_20 PACK_WEEKEVENTREG_FLAG(86, 0x20)
+#define WEEKEVENTREG_86_40 PACK_WEEKEVENTREG_FLAG(86, 0x40)
+#define WEEKEVENTREG_86_80 PACK_WEEKEVENTREG_FLAG(86, 0x80)
+#define WEEKEVENTREG_87_01 PACK_WEEKEVENTREG_FLAG(87, 0x01)
+#define WEEKEVENTREG_87_02 PACK_WEEKEVENTREG_FLAG(87, 0x02)
+#define WEEKEVENTREG_87_04 PACK_WEEKEVENTREG_FLAG(87, 0x04)
+#define WEEKEVENTREG_87_08 PACK_WEEKEVENTREG_FLAG(87, 0x08)
+#define WEEKEVENTREG_87_10 PACK_WEEKEVENTREG_FLAG(87, 0x10)
+#define WEEKEVENTREG_87_20 PACK_WEEKEVENTREG_FLAG(87, 0x20)
+#define WEEKEVENTREG_87_40 PACK_WEEKEVENTREG_FLAG(87, 0x40)
+#define WEEKEVENTREG_87_80 PACK_WEEKEVENTREG_FLAG(87, 0x80)
+#define WEEKEVENTREG_88_01 PACK_WEEKEVENTREG_FLAG(88, 0x01)
+#define WEEKEVENTREG_88_02 PACK_WEEKEVENTREG_FLAG(88, 0x02)
+#define WEEKEVENTREG_88_04 PACK_WEEKEVENTREG_FLAG(88, 0x04)
+#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)
+
+// Unconfirmed: "Postman has delivered priority mail"
+#define WEEKEVENTREG_89_08 PACK_WEEKEVENTREG_FLAG(89, 0x08)
+
+#define WEEKEVENTREG_89_10 PACK_WEEKEVENTREG_FLAG(89, 0x10)
+#define WEEKEVENTREG_89_20 PACK_WEEKEVENTREG_FLAG(89, 0x20)
+
+// Unconfirmed: "Postman is about to flee"
+#define WEEKEVENTREG_89_40 PACK_WEEKEVENTREG_FLAG(89, 0x40)
+
+#define WEEKEVENTREG_89_80 PACK_WEEKEVENTREG_FLAG(89, 0x80)
+
+// Unconfirmed: "Postman fleeing town"
+#define WEEKEVENTREG_90_01 PACK_WEEKEVENTREG_FLAG(90, 0x01)
+
+#define WEEKEVENTREG_90_02 PACK_WEEKEVENTREG_FLAG(90, 0x02)
+#define WEEKEVENTREG_90_04 PACK_WEEKEVENTREG_FLAG(90, 0x04)
+#define WEEKEVENTREG_90_08 PACK_WEEKEVENTREG_FLAG(90, 0x08)
+#define WEEKEVENTREG_90_10 PACK_WEEKEVENTREG_FLAG(90, 0x10)
+
+// Related to Fishermans's jumping minigame
+#define WEEKEVENTREG_90_20 PACK_WEEKEVENTREG_FLAG(90, 0x20)
+#define WEEKEVENTREG_90_40 PACK_WEEKEVENTREG_FLAG(90, 0x40)
+#define WEEKEVENTREG_90_80 PACK_WEEKEVENTREG_FLAG(90, 0x80)
+#define WEEKEVENTREG_91_01 PACK_WEEKEVENTREG_FLAG(91, 0x01)
+#define WEEKEVENTREG_91_02 PACK_WEEKEVENTREG_FLAG(91, 0x02)
+#define WEEKEVENTREG_91_04 PACK_WEEKEVENTREG_FLAG(91, 0x04)
+#define WEEKEVENTREG_91_08 PACK_WEEKEVENTREG_FLAG(91, 0x08)
+#define WEEKEVENTREG_91_10 PACK_WEEKEVENTREG_FLAG(91, 0x10)
+#define WEEKEVENTREG_91_20 PACK_WEEKEVENTREG_FLAG(91, 0x20)
+#define WEEKEVENTREG_91_40 PACK_WEEKEVENTREG_FLAG(91, 0x40)
+#define WEEKEVENTREG_91_80 PACK_WEEKEVENTREG_FLAG(91, 0x80)
+
+// RACE_FLAGS
+//#define WEEKEVENTREG_92_01 PACK_WEEKEVENTREG_FLAG(92, 0x01)
+//#define WEEKEVENTREG_92_02 PACK_WEEKEVENTREG_FLAG(92, 0x02)
+//#define WEEKEVENTREG_92_04 PACK_WEEKEVENTREG_FLAG(92, 0x04)
+
+#define WEEKEVENTREG_92_08 PACK_WEEKEVENTREG_FLAG(92, 0x08)
+#define WEEKEVENTREG_92_10 PACK_WEEKEVENTREG_FLAG(92, 0x10)
+#define WEEKEVENTREG_92_20 PACK_WEEKEVENTREG_FLAG(92, 0x20)
+#define WEEKEVENTREG_92_40 PACK_WEEKEVENTREG_FLAG(92, 0x40)
+#define WEEKEVENTREG_92_80 PACK_WEEKEVENTREG_FLAG(92, 0x80)
+#define WEEKEVENTREG_93_01 PACK_WEEKEVENTREG_FLAG(93, 0x01)
+#define WEEKEVENTREG_93_02 PACK_WEEKEVENTREG_FLAG(93, 0x02)
+#define WEEKEVENTREG_93_04 PACK_WEEKEVENTREG_FLAG(93, 0x04)
+#define WEEKEVENTREG_93_08 PACK_WEEKEVENTREG_FLAG(93, 0x08)
+#define WEEKEVENTREG_93_10 PACK_WEEKEVENTREG_FLAG(93, 0x10)
+#define WEEKEVENTREG_93_20 PACK_WEEKEVENTREG_FLAG(93, 0x20)
+#define WEEKEVENTREG_93_40 PACK_WEEKEVENTREG_FLAG(93, 0x40)
+#define WEEKEVENTREG_93_80 PACK_WEEKEVENTREG_FLAG(93, 0x80)
+#define WEEKEVENTREG_94_01 PACK_WEEKEVENTREG_FLAG(94, 0x01)
+#define WEEKEVENTREG_94_02 PACK_WEEKEVENTREG_FLAG(94, 0x02)
+#define WEEKEVENTREG_94_04 PACK_WEEKEVENTREG_FLAG(94, 0x04)
+#define WEEKEVENTREG_94_08 PACK_WEEKEVENTREG_FLAG(94, 0x08)
+#define WEEKEVENTREG_94_10 PACK_WEEKEVENTREG_FLAG(94, 0x10)
+#define WEEKEVENTREG_94_20 PACK_WEEKEVENTREG_FLAG(94, 0x20)
+#define WEEKEVENTREG_94_40 PACK_WEEKEVENTREG_FLAG(94, 0x40)
+#define WEEKEVENTREG_94_80 PACK_WEEKEVENTREG_FLAG(94, 0x80)
+#define WEEKEVENTREG_95_01 PACK_WEEKEVENTREG_FLAG(95, 0x01)
+#define WEEKEVENTREG_95_02 PACK_WEEKEVENTREG_FLAG(95, 0x02)
+#define WEEKEVENTREG_95_04 PACK_WEEKEVENTREG_FLAG(95, 0x04)
+#define WEEKEVENTREG_95_08 PACK_WEEKEVENTREG_FLAG(95, 0x08)
+#define WEEKEVENTREG_95_10 PACK_WEEKEVENTREG_FLAG(95, 0x10)
+#define WEEKEVENTREG_95_20 PACK_WEEKEVENTREG_FLAG(95, 0x20)
+#define WEEKEVENTREG_95_40 PACK_WEEKEVENTREG_FLAG(95, 0x40)
+#define WEEKEVENTREG_95_80 PACK_WEEKEVENTREG_FLAG(95, 0x80)
+#define WEEKEVENTREG_96_01 PACK_WEEKEVENTREG_FLAG(96, 0x01)
+#define WEEKEVENTREG_96_02 PACK_WEEKEVENTREG_FLAG(96, 0x02)
+#define WEEKEVENTREG_96_04 PACK_WEEKEVENTREG_FLAG(96, 0x04)
+#define WEEKEVENTREG_96_08 PACK_WEEKEVENTREG_FLAG(96, 0x08)
+#define WEEKEVENTREG_96_10 PACK_WEEKEVENTREG_FLAG(96, 0x10)
+#define WEEKEVENTREG_96_20 PACK_WEEKEVENTREG_FLAG(96, 0x20)
+#define WEEKEVENTREG_96_40 PACK_WEEKEVENTREG_FLAG(96, 0x40)
+#define WEEKEVENTREG_96_80 PACK_WEEKEVENTREG_FLAG(96, 0x80)
+#define WEEKEVENTREG_97_01 PACK_WEEKEVENTREG_FLAG(97, 0x01)
+#define WEEKEVENTREG_97_02 PACK_WEEKEVENTREG_FLAG(97, 0x02)
+#define WEEKEVENTREG_97_04 PACK_WEEKEVENTREG_FLAG(97, 0x04)
+#define WEEKEVENTREG_97_08 PACK_WEEKEVENTREG_FLAG(97, 0x08)
+#define WEEKEVENTREG_97_10 PACK_WEEKEVENTREG_FLAG(97, 0x10)
+#define WEEKEVENTREG_97_20 PACK_WEEKEVENTREG_FLAG(97, 0x20)
+#define WEEKEVENTREG_97_40 PACK_WEEKEVENTREG_FLAG(97, 0x40)
+#define WEEKEVENTREG_97_80 PACK_WEEKEVENTREG_FLAG(97, 0x80)
+#define WEEKEVENTREG_98_01 PACK_WEEKEVENTREG_FLAG(98, 0x01)
+#define WEEKEVENTREG_98_02 PACK_WEEKEVENTREG_FLAG(98, 0x02)
+#define WEEKEVENTREG_98_04 PACK_WEEKEVENTREG_FLAG(98, 0x04)
+#define WEEKEVENTREG_98_08 PACK_WEEKEVENTREG_FLAG(98, 0x08)
+#define WEEKEVENTREG_98_10 PACK_WEEKEVENTREG_FLAG(98, 0x10)
+#define WEEKEVENTREG_98_20 PACK_WEEKEVENTREG_FLAG(98, 0x20)
+#define WEEKEVENTREG_98_40 PACK_WEEKEVENTREG_FLAG(98, 0x40)
+#define WEEKEVENTREG_98_80 PACK_WEEKEVENTREG_FLAG(98, 0x80)
+#define WEEKEVENTREG_99_01 PACK_WEEKEVENTREG_FLAG(99, 0x01)
+#define WEEKEVENTREG_99_02 PACK_WEEKEVENTREG_FLAG(99, 0x02)
+#define WEEKEVENTREG_99_04 PACK_WEEKEVENTREG_FLAG(99, 0x04)
+#define WEEKEVENTREG_99_08 PACK_WEEKEVENTREG_FLAG(99, 0x08)
+#define WEEKEVENTREG_99_10 PACK_WEEKEVENTREG_FLAG(99, 0x10)
+#define WEEKEVENTREG_99_20 PACK_WEEKEVENTREG_FLAG(99, 0x20)
+#define WEEKEVENTREG_99_40 PACK_WEEKEVENTREG_FLAG(99, 0x40)
+#define WEEKEVENTREG_99_80 PACK_WEEKEVENTREG_FLAG(99, 0x80)
+
+#define WEEKEVENTREG(index) (gSaveContext.save.saveInfo.weekEventReg[(index)])
+#define GET_WEEKEVENTREG(index) ((void)0, WEEKEVENTREG(index))
+
+#define CHECK_WEEKEVENTREG(flag) (WEEKEVENTREG((flag) >> 8) & ((flag) & 0xFF))
+#define CHECK_WEEKEVENTREG_ALT(flag) (GET_WEEKEVENTREG((flag) >> 8) & ((flag) & 0xFF))
+#define SET_WEEKEVENTREG(flag) (WEEKEVENTREG((flag) >> 8) = GET_WEEKEVENTREG((flag) >> 8) | ((flag) & 0xFF))
+#define CLEAR_WEEKEVENTREG(flag) (WEEKEVENTREG((flag) >> 8) = GET_WEEKEVENTREG((flag) >> 8) & (u8)~((flag) & 0xFF))
+
+#define WEEKEVENTREG_RACE_FLAG_END 0
+#define WEEKEVENTREG_RACE_FLAG_START 1
+#define WEEKEVENTREG_RACE_FLAG_2 2
+#define WEEKEVENTREG_RACE_FLAG_3 3
+#define WEEKEVENTREG_RACE_FLAG_4 4
+#define WEEKEVENTREG_RACE_FLAGS 7
+
+#define GET_WEEKEVENTREG_RACE_FLAGS (WEEKEVENTREG(92) & WEEKEVENTREG_RACE_FLAGS)
+
+#define SET_WEEKEVENTREG_RACE_FLAGS(flag) \
+ { \
+ WEEKEVENTREG(92) &= (u8)~WEEKEVENTREG_RACE_FLAGS; \
+ WEEKEVENTREG(92) = WEEKEVENTREG(92) | (u8)((WEEKEVENTREG(92) & ~WEEKEVENTREG_RACE_FLAGS) | (flag)); \
+ } \
+ (void)0
+
+/**
+ * gSaveContext.eventInf
+ */
+
+#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
+#define EVENTINF_10 0x10
+#define EVENTINF_11 0x11
+#define EVENTINF_12 0x12
+#define EVENTINF_13 0x13
+#define EVENTINF_14 0x14
+#define EVENTINF_15 0x15
+#define EVENTINF_16 0x16
+#define EVENTINF_17 0x17
+#define EVENTINF_20 0x20
+#define EVENTINF_21 0x21
+#define EVENTINF_22 0x22
+#define EVENTINF_23 0x23
+#define EVENTINF_24 0x24
+#define EVENTINF_25 0x25
+#define EVENTINF_26 0x26
+#define EVENTINF_27 0x27
+#define EVENTINF_30 0x30
+
+// EVENTINF_31 is used to track if Player is within range of EnGakufu (2D Song Buttons Appearing on Wall)
+#define EVENTINF_31 0x31
+// EVENTINF_32 is used to track if Player has played the notes of EnGakufu (2D Song Buttons Appearing on Wall)
+#define EVENTINF_32 0x32
+
+#define EVENTINF_33 0x33
+
+// Related to Deku playground minigame
+#define EVENTINF_34 0x34
+#define EVENTINF_35 0x35
+#define EVENTINF_36 0x36
+#define EVENTINF_37 0x37
+#define EVENTINF_40 0x40
+
+// Related to swamp boat (non-minigame)?
+#define EVENTINF_41 0x41
+#define EVENTINF_42 0x42
+#define EVENTINF_43 0x43
+#define EVENTINF_44 0x44
+#define EVENTINF_45 0x45
+#define EVENTINF_46 0x46
+#define EVENTINF_47 0x47
+#define EVENTINF_50 0x50
+#define EVENTINF_51 0x51
+#define EVENTINF_52 0x52
+#define EVENTINF_53 0x53
+#define EVENTINF_54 0x54
+#define EVENTINF_55 0x55
+
+// Enabled when Gyorg's intro cutscene has been watched
+#define EVENTINF_56 0x56
+
+#define EVENTINF_57 0x57
+#define EVENTINF_60 0x60
+#define EVENTINF_61 0x61
+#define EVENTINF_62 0x62
+#define EVENTINF_63 0x63
+#define EVENTINF_64 0x64
+#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
+#define EVENTINF_75 0x75
+#define EVENTINF_76 0x76
+#define EVENTINF_77 0x77
+
+#define CHECK_EVENTINF(flag) (gSaveContext.eventInf[(flag) >> 4] & (1 << ((flag) & 0xF)))
+#define SET_EVENTINF(flag) (gSaveContext.eventInf[(flag) >> 4] |= (1 << ((flag) & 0xF)))
+#define CLEAR_EVENTINF(flag) (gSaveContext.eventInf[(flag) >> 4] &= (u8)~(1 << ((flag) & 0xF)))
+#define CLEAR_EVENTINF_ALT(flag) (gSaveContext.eventInf[(flag) >> 4] &= ~(1 << ((flag) & 0xF)))
-#define GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() ((s32)(gSaveContext.save.shootingGalleryHighScores & 0xFFFF))
-#define GET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE() ((s32)((gSaveContext.save.shootingGalleryHighScores & 0xFFFF0000) >> 0x10))
-#define SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(score) (gSaveContext.save.shootingGalleryHighScores = (gSaveContext.save.shootingGalleryHighScores & 0xFFFF0000) | ((u16)(score)))
-#define SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(score) (gSaveContext.save.shootingGalleryHighScores = ((gSaveContext.save.shootingGalleryHighScores) & 0xFFFF) | ((u16)(score) << 0x10))
typedef enum {
/* 0 */ DUNGEON_INDEX_WOODFALL_TEMPLE,
@@ -476,7 +1576,7 @@ void Sram_IncrementDay(void);
u16 Sram_CalcChecksum(void* data, size_t count);
void Sram_InitNewSave(void);
void Sram_InitDebugSave(void);
-void func_80144A94(SramContext* sramCtx);
+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);
@@ -498,10 +1598,8 @@ void func_80147198(SramContext* sramCtx);
extern s32 D_801C6798[];
extern u8 gAmmoItems[];
extern s32 D_801C67C8[];
-extern s32 D_801C67E8[];
extern s32 D_801C67F0[];
extern s32 D_801C6818[];
-extern s32 D_801C6838[];
extern s32 D_801C6840[];
extern s32 D_801C6850[];
diff --git a/include/z64scene.h b/include/z64scene.h
index bb82574f8..c31b7ce58 100644
--- a/include/z64scene.h
+++ b/include/z64scene.h
@@ -13,6 +13,9 @@ typedef struct {
/* 0x4 */ uintptr_t vromEnd;
} RomFile; // size = 0x8
+#define ROOM_DRAW_OPA (1 << 0)
+#define ROOM_DRAW_XLU (1 << 1)
+
typedef struct {
/* 0x0 */ u8 code;
/* 0x1 */ u8 data1;
@@ -67,7 +70,7 @@ typedef struct {
typedef struct {
/* 0x0 */ u8 code;
- /* 0x1 */ u8 cUpElfMsgNum;
+ /* 0x1 */ u8 naviQuestHintFileId;
/* 0x4 */ u32 subKeepIndex;
} SCmdSpecialFiles; // size = 0x8
@@ -119,7 +122,7 @@ typedef struct {
/* 0x2 */ UNK_TYPE1 pad2[2];
/* 0x4 */ u8 hour;
/* 0x5 */ u8 min;
- /* 0x6 */ u8 unk6;
+ /* 0x6 */ u8 timeSpeed;
} SCmdTimeSettings; // size = 0x7
typedef struct {
@@ -174,9 +177,9 @@ typedef struct {
typedef struct {
/* 0x0 */ u8 code;
- /* 0x1 */ u8 sceneCsCount;
+ /* 0x1 */ u8 scriptListCount;
/* 0x4 */ void* segment;
-} SCmdCutsceneList; // size = 0x8
+} SCmdCsScriptList; // size = 0x8
typedef struct {
/* 0x0 */ u8 code;
@@ -199,7 +202,7 @@ typedef struct {
/* 0x0 */ u8 code;
/* 0x1 */ u8 num;
/* 0x4 */ void* segment;
-} SCmdCutsceneActorList; // size = 0x8
+} SCmdCutsceneList; // size = 0x8
typedef struct {
/* 0x0 */ u8 code;
@@ -213,58 +216,132 @@ typedef struct {
/* 0x4 */ void* segment;
} SCmdMinimapChests; // size = 0x8
-typedef struct {
- /* 0x0 */ Gfx* opaqueDl;
- /* 0x4 */ Gfx* translucentDl;
-} RoomMeshType0Params; // size = 0x8
-
-// Fields TODO
-typedef struct {
- /* 0x0 */ u8 type;
- /* 0x1 */ u8 format; // 1 = single, 2 = multi
-} RoomMeshType1; // size = 0x2
-
-// Size TODO
-typedef struct {
- /* 0x0 */ UNK_TYPE1 pad0[0x10];
-} RoomMeshType1Params; // size = 0x10
-
-typedef struct {
- /* 0x0 */ UNK_TYPE1 pad0[0x10];
-} RoomMeshType2Params; // size = 0x10
+typedef enum {
+ /* 0 */ ROOM_SHAPE_TYPE_NORMAL,
+ /* 1 */ ROOM_SHAPE_TYPE_IMAGE,
+ /* 2 */ ROOM_SHAPE_TYPE_CULLABLE,
+ /* 3 */ ROOM_SHAPE_TYPE_NONE,
+ /* 4 */ ROOM_SHAPE_TYPE_MAX
+} RoomShapeType;
typedef struct {
/* 0x0 */ u8 type;
- /* 0x1 */ u8 count;
- /* 0x2 */ UNK_TYPE1 pad2[0x2];
- /* 0x4 */ RoomMeshType0Params* paramsStart;
- /* 0x8 */ RoomMeshType0Params* paramsEnd;
-} RoomMeshType0; // size = 0xC
+} RoomShapeBase; // size = 0x1
typedef struct {
- /* 0x0 */ u8 type;
- /* 0x1 */ u8 count;
- /* 0x2 */ UNK_TYPE1 pad2[0x2];
- /* 0x4 */ RoomMeshType2Params* paramsStart;
- /* 0x8 */ RoomMeshType2Params* paramsEnd;
-} RoomMeshType2; // size = 0xC
+ /* 0x0 */ Gfx* opa;
+ /* 0x4 */ Gfx* xlu;
+} RoomShapeDListsEntry; // size = 0x8
+
+typedef struct {
+ /* 0x0 */ RoomShapeBase base;
+ /* 0x1 */ u8 numEntries;
+ /* 0x4 */ RoomShapeDListsEntry* entries;
+ /* 0x8 */ RoomShapeDListsEntry* entriesEnd;
+} RoomShapeNormal; // size = 0xC
+
+typedef enum {
+ /* 1 */ ROOM_SHAPE_IMAGE_AMOUNT_SINGLE = 1,
+ /* 2 */ ROOM_SHAPE_IMAGE_AMOUNT_MULTI
+} RoomShapeImageAmountType;
+
+typedef struct {
+ /* 0x0 */ RoomShapeBase base;
+ /* 0x1 */ u8 amountType; // uses `RoomShapeImageAmountType`
+ /* 0x4 */ RoomShapeDListsEntry* entry;
+} RoomShapeImageBase; // size = 0x8
+
+typedef struct {
+ /* 0x00 */ RoomShapeImageBase base;
+ /* 0x08 */ void* source;
+ /* 0x0C */ u32 unk_0C;
+ /* 0x10 */ void* tlut;
+ /* 0x14 */ u16 width;
+ /* 0x16 */ u16 height;
+ /* 0x18 */ u8 fmt;
+ /* 0x19 */ u8 siz;
+ /* 0x1A */ u16 tlutMode;
+ /* 0x1C */ u16 tlutCount;
+} RoomShapeImageSingle; // size = 0x20
+
+typedef struct {
+ /* 0x00 */ u16 unk_00;
+ /* 0x02 */ u8 bgCamIndex; // the bg cam index this entry is for
+ /* 0x04 */ void* source;
+ /* 0x08 */ u32 unk_0C;
+ /* 0x0C */ void* tlut;
+ /* 0x10 */ u16 width;
+ /* 0x12 */ u16 height;
+ /* 0x14 */ u8 fmt;
+ /* 0x15 */ u8 siz;
+ /* 0x16 */ u16 tlutMode;
+ /* 0x18 */ u16 tlutCount;
+} RoomShapeImageMultiBgEntry; // size = 0x1C
+
+typedef struct {
+ /* 0x0 */ RoomShapeImageBase base;
+ /* 0x8 */ u8 numBackgrounds;
+ /* 0xC */ RoomShapeImageMultiBgEntry* backgrounds;
+} RoomShapeImageMulti; // size = 0x10
+
+typedef struct {
+ /* 0x0 */ Vec3s boundsSphereCenter;
+ /* 0x6 */ s16 boundsSphereRadius;
+ /* 0x8 */ Gfx* opa;
+ /* 0xC */ Gfx* xlu;
+} RoomShapeCullableEntry; // size = 0x10
+
+typedef struct {
+ /* 0x0 */ RoomShapeBase base;
+ /* 0x1 */ u8 numEntries;
+ /* 0x4 */ RoomShapeCullableEntry* entries;
+ /* 0x8 */ RoomShapeCullableEntry* entriesEnd;
+} RoomShapeCullable; // size = 0xC
typedef union {
- RoomMeshType0 type0;
- RoomMeshType1 type1;
- RoomMeshType2 type2;
-} RoomMesh; // size = 0xC
+ RoomShapeBase base;
+ RoomShapeNormal normal;
+ union {
+ RoomShapeImageBase base;
+ RoomShapeImageSingle single;
+ RoomShapeImageMulti multi;
+ } image;
+ RoomShapeCullable cullable;
+} RoomShape; // "Ground Shape"
+
+// TODO: update ZAPD
+#define SCENE_CMD_MESH SCENE_CMD_ROOM_SHAPE
+
+// TODO: Check which ones don't exist
+typedef enum {
+ /* 0 */ ROOM_BEHAVIOR_TYPE1_0,
+ /* 1 */ ROOM_BEHAVIOR_TYPE1_1,
+ /* 2 */ ROOM_BEHAVIOR_TYPE1_2,
+ /* 3 */ ROOM_BEHAVIOR_TYPE1_3, // unused
+ /* 4 */ ROOM_BEHAVIOR_TYPE1_4,
+ /* 5 */ ROOM_BEHAVIOR_TYPE1_5
+} RoomBehaviorType1;
+
+typedef enum {
+ /* 0 */ ROOM_BEHAVIOR_TYPE2_0,
+ /* 1 */ ROOM_BEHAVIOR_TYPE2_1,
+ /* 2 */ ROOM_BEHAVIOR_TYPE2_2,
+ /* 3 */ ROOM_BEHAVIOR_TYPE2_HOT,
+ /* 4 */ ROOM_BEHAVIOR_TYPE2_4,
+ /* 5 */ ROOM_BEHAVIOR_TYPE2_5,
+ /* 6 */ ROOM_BEHAVIOR_TYPE2_6
+} RoomBehaviorType2;
typedef struct {
/* 0x00 */ s8 num;
/* 0x01 */ u8 unk1;
- /* 0x02 */ u8 unk2; // 3: Room is hot
- /* 0x03 */ u8 unk3;
+ /* 0x02 */ u8 behaviorType2;
+ /* 0x03 */ u8 behaviorType1;
/* 0x04 */ s8 echo;
- /* 0x05 */ u8 unk5;
+ /* 0x05 */ u8 lensMode;
/* 0x06 */ u8 enablePosLights;
/* 0x07 */ UNK_TYPE1 pad7[0x1];
- /* 0x08 */ RoomMesh* mesh;
+ /* 0x08 */ RoomShape* roomShape;
/* 0x0C */ void* segment;
/* 0x10 */ UNK_TYPE1 pad10[0x4];
} Room; // size = 0x14
@@ -274,7 +351,7 @@ typedef struct {
/* 0x14 */ Room prevRoom;
/* 0x28 */ void* roomMemPages[2]; // In a scene with transitions, roomMemory is split between two pages that toggle each transition. This is one continuous range, as the second page allocates from the end
/* 0x30 */ u8 activeMemPage; // 0 - First page in memory, 1 - Second page
- /* 0x31 */ s8 unk31;
+ /* 0x31 */ s8 status;
/* 0x32 */ UNK_TYPE1 pad32[0x2];
/* 0x34 */ void* activeRoomVram;
/* 0x38 */ DmaRequest dmaRequest;
@@ -286,15 +363,17 @@ typedef struct {
/* 0x7A */ UNK_TYPE2 unk7A[3];
} RoomContext; // size = 0x80
-typedef struct {
+typedef void(*RoomDrawHandler)(struct PlayState* play, Room* room, u32 flags);
+
+typedef struct TransitionActorEntry {
struct {
s8 room; // Room to switch to
- s8 bgCamDataId; // How the camera reacts during the transition. -2 for spiral staircase. -1 for generic door. 0+ will index scene CamData
+ s8 bgCamIndex; // How the camera reacts during the transition. -2 for spiral staircase. -1 for generic door. 0+ will index scene CamData
} /* 0x0 */ sides[2]; // 0 = front, 1 = back
- /* 0x4 */ s16 id;
+ /* 0x4 */ s16 id;
/* 0x6 */ Vec3s pos;
- /* 0xC */ s16 rotY;
- /* 0xE */ u16 params;
+ /* 0xC */ s16 rotY;
+ /* 0xE */ u16 params;
} TransitionActorEntry; // size = 0x10
typedef struct {
@@ -341,6 +420,7 @@ typedef struct {
/* 0xA */ u8 unk_A;
/* 0xB */ u8 drawConfig;
/* 0xC */ u8 unk_C;
+ /* 0xD */ u8 unk_D;
} SceneTableEntry; // size = 0x10
typedef struct {
@@ -389,77 +469,6 @@ typedef struct {
/* 0x00C */ ObjectStatus status[OBJECT_EXCHANGE_BANK_MAX];
} ObjectContext; // size = 0x958
-typedef struct {
- /* 0x0 */ u8 headerType;
-} MeshHeaderBase; // size = 0x1
-
-typedef struct {
- /* 0x0 */ MeshHeaderBase base;
- /* 0x1 */ u8 numEntries;
- /* 0x4 */ u32 dListStart;
- /* 0x8 */ u32 dListEnd;
-} MeshHeader0; // size = 0xC
-
-typedef struct {
- /* 0x0 */ u32 opaqueDList;
- /* 0x4 */ u32 translucentDList;
-} MeshEntry0; // size = 0x8
-
-typedef struct {
- /* 0x0 */ MeshHeaderBase base;
- /* 0x1 */ u8 format;
- /* 0x4 */ u32 entryRecord;
-} MeshHeader1Base; // size = 0x8
-
-typedef struct {
- /* 0x00 */ MeshHeader1Base base;
- /* 0x08 */ u32 imagePtr;
- /* 0x0C */ u32 unknown;
- /* 0x10 */ u32 unknown2;
- /* 0x14 */ u16 bgWidth;
- /* 0x16 */ u16 bgHeight;
- /* 0x18 */ u8 imageFormat;
- /* 0x19 */ u8 imageSize;
- /* 0x1A */ u16 imagePal;
- /* 0x1C */ u16 imageFlip;
-} MeshHeader1Single; // size = 0x20
-
-typedef struct {
- /* 0x0 */ MeshHeader1Base base;
- /* 0x8 */ u8 bgCnt;
- /* 0xC */ u32 bgRecordPtr;
-} MeshHeader1Multi; // size = 0x10
-
-typedef struct {
- /* 0x00 */ u16 unknown;
- /* 0x02 */ s8 bgID;
- /* 0x04 */ u32 imagePtr;
- /* 0x08 */ u32 unknown2;
- /* 0x0C */ u32 unknown3;
- /* 0x10 */ u16 bgWidth;
- /* 0x12 */ u16 bgHeight;
- /* 0x14 */ u8 imageFmt;
- /* 0x15 */ u8 imageSize;
- /* 0x16 */ u16 imagePal;
- /* 0x18 */ u16 imageFlip;
-} BackgroundRecord; // size = 0x1C
-
-typedef struct {
- /* 0x0 */ s16 playerXMax;
- /* 0x2 */ s16 playerZMax;
- /* 0x4 */ s16 playerXMin;
- /* 0x6 */ s16 playerZMin;
- /* 0x8 */ u32 opaqueDList;
- /* 0xC */ u32 translucentDList;
-} MeshEntry2; // size = 0x10
-
-typedef struct {
- /* 0x0 */ MeshHeaderBase base;
- /* 0x1 */ u8 numEntries;
- /* 0x4 */ u32 dListStart;
- /* 0x8 */ u32 dListEnd;
-} MeshHeader2; // size = 0xC
-
typedef struct {
/* 0x0 */ u8 count; // number of points in the path
/* 0x1 */ u8 unk1;
@@ -477,7 +486,7 @@ typedef struct {
typedef struct {
/* 0x0 */ MinimapEntry* entry;
- /* 0x4 */ UNK_TYPE unk4;
+ /* 0x4 */ s16 unk4;
} MinimapList; // size = 0x8
typedef struct {
@@ -522,11 +531,11 @@ typedef union {
/* Command: 0x14 */ SCmdEndMarker endMarker;
/* Command: 0x15 */ SCmdSoundSettings soundSettings;
/* Command: 0x16 */ SCmdEchoSettings echoSettings;
- /* Command: 0x17 */ SCmdCutsceneList cutsceneList;
+ /* Command: 0x17 */ SCmdCsScriptList scriptList;
/* Command: 0x18 */ SCmdAltHeaders altHeaders;
/* Command: 0x19 */ SCmdRegionVisited regionVisited;
/* Command: 0x1A */ SCmdTextureAnimations textureAnimations;
- /* Command: 0x1B */ SCmdCutsceneActorList cutsceneActorList;
+ /* Command: 0x1B */ SCmdCutsceneList cutsceneList;
/* Command: 0x1C */ SCmdMinimapSettings minimapSettings;
/* Command: 0x1D */ // Unused
/* Command: 0x1E */ SCmdMinimapChests minimapChests;
@@ -813,6 +822,15 @@ typedef enum {
*/
#define ENTRANCE(scene, spawn) ((((ENTR_SCENE_##scene) & 0x7F) << 9) | (((spawn) & 0x1F) << 4))
+/*
+* Entrances used in cutscene destination. Includes scene layer that's immediately applied to `nextCutsceneIndex` and removed.
+* See `CutsceneScriptEntry.nextEntrance`
+* 0xFE00: Index into sSceneEntranceTable (Scene)
+* 0x01F0: Index into the scenes specific entrance table (Spawn)
+* 0x000F: Index into the specific entrance table (Layer)
+*/
+#define CS_ENTRANCE(scene, spawn, layer) ((((ENTR_SCENE_##scene) & 0x7F) << 9) | (((spawn) & 0x1F) << 4) | ((layer) & 0xF))
+
// SceneTableEntry draw configs
typedef enum {
/* 0 */ SCENE_DRAW_CFG_DEFAULT,
@@ -825,6 +843,14 @@ typedef enum {
/* 7 */ SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP
} SceneDrawConfigIds;
+// TODO: make ZAPD use this enum for `SCENE_CMD_SPECIAL_FILES`
+// Leftover from OoT
+typedef enum {
+ /* 0 */ NAVI_QUEST_HINTS_NONE,
+ /* 1 */ NAVI_QUEST_HINTS_OVERWORLD,
+ /* 2 */ NAVI_QUEST_HINTS_DUNGEON
+} NaviQuestHintFileId;
+
// SceneTableEntry commands
typedef enum {
/* 0x00 */ SCENE_CMD_ID_SPAWN_LIST,
@@ -837,7 +863,7 @@ typedef enum {
/* 0x07 */ SCENE_CMD_ID_SPECIAL_FILES,
/* 0x08 */ SCENE_CMD_ID_ROOM_BEHAVIOR,
/* 0x09 */ SCENE_CMD_ID_UNK_09,
- /* 0x0A */ SCENE_CMD_ID_MESH,
+ /* 0x0A */ SCENE_CMD_ID_ROOM_SHAPE,
/* 0x0B */ SCENE_CMD_ID_OBJECT_LIST,
/* 0x0C */ SCENE_CMD_ID_LIGHT_LIST,
/* 0x0D */ SCENE_CMD_ID_PATH_LIST,
@@ -850,7 +876,7 @@ typedef enum {
/* 0x14 */ SCENE_CMD_ID_END,
/* 0x15 */ SCENE_CMD_ID_SOUND_SETTINGS,
/* 0x16 */ SCENE_CMD_ID_ECHO_SETTINGS,
- /* 0x17 */ SCENE_CMD_ID_CUTSCENE_LIST,
+ /* 0x17 */ SCENE_CMD_ID_CUTSCENE_SCRIPT_LIST,
/* 0x18 */ SCENE_CMD_ID_ALTERNATE_HEADER_LIST,
/* 0x19 */ SCENE_CMD_ID_SET_REGION_VISITED,
/* 0x1A */ SCENE_CMD_ID_ANIMATED_MATERIAL_LIST,
@@ -882,8 +908,8 @@ typedef enum {
#define SCENE_CMD_ENTRANCE_LIST(entranceList) \
{ SCENE_CMD_ID_ENTRANCE_LIST, 0, CMD_PTR(entranceList) }
-#define SCENE_CMD_SPECIAL_FILES(elfMessageFile, keepObjectId) \
- { SCENE_CMD_ID_SPECIAL_FILES, elfMessageFile, CMD_W(keepObjectId) }
+#define SCENE_CMD_SPECIAL_FILES(naviQuestHintFileId, keepObjectId) \
+ { SCENE_CMD_ID_SPECIAL_FILES, naviQuestHintFileId, CMD_W(keepObjectId) }
#define SCENE_CMD_ROOM_BEHAVIOR(curRoomUnk3, curRoomUnk2, curRoomUnk5, msgCtxunk12044, enablePosLights, \
kankyoContextUnkE2) \
@@ -896,8 +922,8 @@ typedef enum {
#define SCENE_CMD_UNK_09() \
{ SCENE_CMD_ID_UNK_09, 0, CMD_W(0) }
-#define SCENE_CMD_MESH(meshHeader) \
- { SCENE_CMD_ID_MESH, 0, CMD_PTR(meshHeader) }
+#define SCENE_CMD_ROOM_SHAPE(roomShape) \
+ { SCENE_CMD_ID_ROOM_SHAPE, 0, CMD_PTR(roomShape) }
#define SCENE_CMD_OBJECT_LIST(numObjects, objectList) \
{ SCENE_CMD_ID_OBJECT_LIST, numObjects, CMD_PTR(objectList) }
@@ -935,21 +961,20 @@ typedef enum {
#define SCENE_CMD_ECHO_SETTINGS(echo) \
{ SCENE_CMD_ID_ECHO_SETTINGS, 0, CMD_BBBB(0, 0, 0, echo) }
-#define SCENE_CMD_CUTSCENE_LIST(numCutscene, cutsceneList) \
- { SCENE_CMD_ID_CUTSCENE_LIST, numCutscene, CMD_PTR(cutsceneList) }
+#define SCENE_CMD_CUTSCENE_SCRIPT_LIST(numEntries, scriptList) \
+ { SCENE_CMD_ID_CUTSCENE_SCRIPT_LIST, numEntries, CMD_PTR(scriptList) }
#define SCENE_CMD_ALTERNATE_HEADER_LIST(alternateHeaderList) \
{ SCENE_CMD_ID_ALTERNATE_HEADER_LIST, 0, CMD_PTR(alternateHeaderList) }
-#define SCENE_CMD_MISC_SETTINGS SCENE_CMD_SET_REGION_VISITED // TODO: ZAPD Capatability
#define SCENE_CMD_SET_REGION_VISITED() \
{ SCENE_CMD_ID_SET_REGION_VISITED, 0, CMD_W(0) }
#define SCENE_CMD_ANIMATED_MATERIAL_LIST(matAnimList) \
{ SCENE_CMD_ID_ANIMATED_MATERIAL_LIST, 0, CMD_PTR(matAnimList) }
-#define SCENE_CMD_ACTOR_CUTSCENE_LIST(actorCutsceneCount, actorCutsceneList) \
- { SCENE_CMD_ID_ACTOR_CUTSCENE_LIST, actorCutsceneCount, CMD_PTR(actorCutsceneList) }
+#define SCENE_CMD_ACTOR_CUTSCENE_LIST(numEntries, actorCutsceneList) \
+ { SCENE_CMD_ID_ACTOR_CUTSCENE_LIST, numEntries, CMD_PTR(actorCutsceneList) }
#define SCENE_CMD_MINIMAP_INFO(minimapInfo) \
{ SCENE_CMD_ID_MINIMAP_INFO, 0, CMD_PTR(minimapInfo) }
@@ -957,4 +982,8 @@ typedef enum {
#define SCENE_CMD_MINIMAP_COMPASS_ICON_INFO(compassIconCount, compassIconInfo) \
{ SCENE_CMD_ID_MINIMAP_COMPASS_ICON_INFO, compassIconCount, CMD_PTR(compassIconInfo) }
+ // TODO: ZAPD Capatability
+#define SCENE_CMD_MISC_SETTINGS SCENE_CMD_SET_REGION_VISITED
+#define SCENE_CMD_CUTSCENE_LIST SCENE_CMD_CUTSCENE_SCRIPT_LIST
+
#endif
diff --git a/include/z64schedule.h b/include/z64schedule.h
index 69906e584..f3a703f3c 100644
--- a/include/z64schedule.h
+++ b/include/z64schedule.h
@@ -28,7 +28,7 @@
*/
// Macro to convert the time format used in the save struct into the format used in Schedule
-#define SCHEDULE_CONVERT_TIME(time) ((time) - 0x10000 / 360 * 90)
+#define SCHEDULE_CONVERT_TIME(time) ((u16)((time) - 0x10000 / 360 * 90))
#define SCHEDULE_TIME_NOW SCHEDULE_CONVERT_TIME(gSaveContext.save.time)
typedef enum {
@@ -196,11 +196,11 @@ typedef struct {
#define SCHEDULE_PACK_S16(val) \
((val) >> 8) & 0xFF, (val) & 0xFF
-#define SCHEDULE_CMD_CHECK_FLAG_S(index, mask, offset) \
- SCHEDULE_CMD_ID_CHECK_FLAG_S, (index), (mask), (offset)
+#define SCHEDULE_CMD_CHECK_FLAG_S(flag, offset) \
+ SCHEDULE_CMD_ID_CHECK_FLAG_S, SCHEDULE_PACK_S16(flag), (offset)
-#define SCHEDULE_CMD_CHECK_FLAG_L(index, mask, offset) \
- SCHEDULE_CMD_ID_CHECK_FLAG_L, (index), (mask), SCHEDULE_PACK_S16(offset)
+#define SCHEDULE_CMD_CHECK_FLAG_L(flag, offset) \
+ SCHEDULE_CMD_ID_CHECK_FLAG_L, SCHEDULE_PACK_S16(flag), SCHEDULE_PACK_S16(offset)
#define SCHEDULE_CMD_CHECK_TIME_RANGE_S(startHr, startMin, endHr, endMin, offset) \
SCHEDULE_CMD_ID_CHECK_TIME_RANGE_S, (startHr), (startMin), (endHr), (endMin), (offset)
diff --git a/include/z64shrink_window.h b/include/z64shrink_window.h
index 2742fb602..bff11b939 100644
--- a/include/z64shrink_window.h
+++ b/include/z64shrink_window.h
@@ -18,6 +18,6 @@ s32 ShrinkWindow_Pillarbox_GetSize(void);
void ShrinkWindow_Init(void);
void ShrinkWindow_Destroy(void);
void ShrinkWindow_Update(s32 framerateDivisor);
-void ShrinkWindow_Draw(GraphicsContext* gfxCtx);
+void ShrinkWindow_Draw(struct GraphicsContext* gfxCtx);
#endif
diff --git a/include/z64skin.h b/include/z64skin.h
index 360e265e6..a9e2ebc01 100644
--- a/include/z64skin.h
+++ b/include/z64skin.h
@@ -1,5 +1,5 @@
-#ifndef Z64_SKIN_H
-#define Z64_SKIN_H
+#ifndef Z64SKIN_H
+#define Z64SKIN_H
#include "z64animation.h"
diff --git a/include/z64skybox.h b/include/z64skybox.h
new file mode 100644
index 000000000..0a981d23e
--- /dev/null
+++ b/include/z64skybox.h
@@ -0,0 +1,62 @@
+#ifndef Z64SKYBOX_H
+#define Z64SKYBOX_H
+
+#include "PR/ultratypes.h"
+#include "PR/gbi.h"
+#include "color.h"
+
+#include "z64dma.h"
+#include "z64math.h"
+#include "z64view.h"
+
+struct GraphicsContext;
+struct GameState;
+struct PlayState;
+
+typedef enum SkyboxId {
+ /* 0 */ SKYBOX_NONE,
+ /* 1 */ SKYBOX_NORMAL_SKY,
+ /* 2 */ SKYBOX_2,
+ /* 3 */ SKYBOX_3,
+ /* 5 */ SKYBOX_CUTSCENE_MAP = 5
+} SkyboxId;
+
+typedef struct SkyboxContext {
+ /* 0x000 */ View view;
+ /* 0x168 */ void* staticSegments[4];
+ /* 0x178 */ void* paletteStaticSegment;
+ /* 0x17C */ Gfx (*dListBuf)[150];
+ /* 0x180 */ Gfx* roomDL;
+ /* 0x184 */ Vtx* roomVtx;
+ /* 0x188 */ DmaRequest unk188;
+ /* 0x1A8 */ DmaRequest unk1A8;
+ /* 0x1C8 */ DmaRequest unk1C8;
+ /* 0x1E8 */ OSMesgQueue loadQueue;
+ /* 0x200 */ OSMesg loadMsg;
+ /* 0x204 */ s16 skyboxShouldDraw;
+ /* 0x208 */ Vec3f rot;
+ /* 0x214 */ Vec3f eye;
+ /* 0x220 */ s16 angle;
+ /* 0x222 */ Color_RGB8 prim;
+ /* 0x225 */ Color_RGB8 env;
+} SkyboxContext; // size = 0x228
+
+typedef struct struct_801C5F44 {
+ /* 0x00 */ s32 unk0;
+ /* 0x04 */ s32 unk4;
+ /* 0x08 */ s32 unk8;
+ /* 0x0C */ s32 unkC;
+ /* 0x10 */ s32 unk10;
+} struct_801C5F44; // size = 0x14
+
+s32 func_80142440(SkyboxContext* skyboxCtx, Vtx* roomVtx, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6, s32 arg7, s32 arg8);
+void func_80143148(SkyboxContext* skyboxCtx, s32 arg1);
+void Skybox_Setup(struct GameState* gameState, SkyboxContext* skyboxCtx, s16 skyboxId);
+void func_80143324(struct PlayState* play, SkyboxContext* skyboxCtx, s16 skyboxId);
+void Skybox_Init(struct GameState* gameState, SkyboxContext* skyboxCtx, s16 skyboxId);
+Mtx* Skybox_UpdateMatrix(SkyboxContext* skyboxCtx, f32 x, f32 y, f32 z);
+void Skybox_SetColors(SkyboxContext* skyboxCtx, u8 primR, u8 primG, u8 primB, u8 envR, u8 envG, u8 envB);
+void Skybox_Draw(SkyboxContext* skyboxCtx, struct GraphicsContext* gfxCtx, s16 skyboxId, s16 blend, f32 x, f32 y, f32 z);
+void Skybox_Update(SkyboxContext* skyboxCtx);
+
+#endif
diff --git a/include/z64snap.h b/include/z64snap.h
index fb3f86186..8bec78c3d 100644
--- a/include/z64snap.h
+++ b/include/z64snap.h
@@ -1,5 +1,5 @@
-#ifndef Z64_SNAP_H
-#define Z64_SNAP_H
+#ifndef Z64SNAP_H
+#define Z64SNAP_H
#include "PR/ultratypes.h"
#include "z64actor.h"
@@ -11,36 +11,36 @@ typedef struct {
/* 0x144 */ PictoValidationFunc validationFunc;
} PictoActor;
-// Picto box flags
+// Picto validation flags
typedef enum {
// Used externally, set and read by actors
- /* 0x00 */ PICTOGRAPH_0,
- /* 0x01 */ PICTOGRAPH_IN_SWAMP,
- /* 0x02 */ PICTOGRAPH_MONKEY,
- /* 0x03 */ PICTOGRAPH_BIG_OCTO,
- /* 0x04 */ PICTOGRAPH_LULU_HEAD,
- /* 0x05 */ PICTOGRAPH_LULU_RIGHT_ARM,
- /* 0x06 */ PICTOGRAPH_LULU_LEFT_ARM, // Need all three of these to qualify as a good picture
- /* 0x07 */ PICTOGRAPH_SCARECROW,
- /* 0x08 */ PICTOGRAPH_TINGLE,
- /* 0x09 */ PICTOGRAPH_PIRATE_GOOD,
- /* 0x0A */ PICTOGRAPH_DEKU_KING,
- /* 0x0B */ PICTOGRAPH_PIRATE_TOO_FAR, // overlaps with PICTOGRAPH_PIRATE_GOOD, but that is checked first
+ /* 0x00 */ PICTO_VALID_0,
+ /* 0x01 */ PICTO_VALID_IN_SWAMP,
+ /* 0x02 */ PICTO_VALID_MONKEY,
+ /* 0x03 */ PICTO_VALID_BIG_OCTO,
+ /* 0x04 */ PICTO_VALID_LULU_HEAD,
+ /* 0x05 */ PICTO_VALID_LULU_RIGHT_ARM,
+ /* 0x06 */ PICTO_VALID_LULU_LEFT_ARM, // Need all three of these to qualify as a good picture
+ /* 0x07 */ PICTO_VALID_SCARECROW,
+ /* 0x08 */ PICTO_VALID_TINGLE,
+ /* 0x09 */ PICTO_VALID_PIRATE_GOOD,
+ /* 0x0A */ PICTO_VALID_DEKU_KING,
+ /* 0x0B */ PICTO_VALID_PIRATE_TOO_FAR, // overlaps with PICTO_VALID_PIRATE_GOOD, but that is checked first
// Used internally, test for failures of position, angle etc.
- /* 0x3B */ PICTOGRAPH_BEHIND_COLLISION = 0x3B,
- /* 0x3C */ PICTOGRAPH_BEHIND_BG,
- /* 0x3D */ PICTOGRAPH_NOT_IN_VIEW,
- /* 0x3E */ PICTOGRAPH_BAD_ANGLE,
- /* 0x3F */ PICTOGRAPH_BAD_DISTANCE
-} PictographFlag;
+ /* 0x3B */ PICTO_VALID_BEHIND_COLLISION = 0x3B,
+ /* 0x3C */ PICTO_VALID_BEHIND_BG,
+ /* 0x3D */ PICTO_VALID_NOT_IN_VIEW,
+ /* 0x3E */ PICTO_VALID_BAD_ANGLE,
+ /* 0x3F */ PICTO_VALID_BAD_DISTANCE
+} PictoValidFlag;
-// The following macros are subject to renaming once the capture system is better understood
-#define PICTO_RESOLUTION_HORIZONTAL 150
-#define PICTO_RESOLUTION_VERTICAL 105
-#define PICTO_CAPTURE_REGION_TOPLEFT_X ((SCREEN_WIDTH - PICTO_RESOLUTION_HORIZONTAL) / 2)
-#define PICTO_CAPTURE_REGION_TOPLEFT_Y ((SCREEN_HEIGHT - PICTO_RESOLUTION_VERTICAL) / 2)
+// The subregion of the picto photo that will set the flag for an actor being in the photo
+#define PICTO_VALID_WIDTH 150
+#define PICTO_VALID_HEIGHT 105
+#define PICTO_VALID_TOPLEFT_X ((SCREEN_WIDTH - PICTO_VALID_WIDTH) / 2)
+#define PICTO_VALID_TOPLEFT_Y ((SCREEN_HEIGHT - PICTO_VALID_HEIGHT) / 2)
s32 Snap_RecordPictographedActors(PlayState* play);
void Snap_SetFlag(s32 flag);
diff --git a/include/z64subs.h b/include/z64subs.h
index ca90cb232..ad2b7044f 100644
--- a/include/z64subs.h
+++ b/include/z64subs.h
@@ -11,12 +11,12 @@ extern Vec3f gOneVec3f;
#define SUBS_TIME_PATHING_ORDER 3
typedef enum {
- /* 0 */ SUBS_CUTSCENE_SET_UNK_LINK_FIELDS,
+ /* 0 */ SUBS_CUTSCENE_WITH_PLAYER,
/* 1 */ SUBS_CUTSCENE_NORMAL,
- /* 2 */ SUBS_CUTSCENE_SET_FLAG
+ /* 2 */ SUBS_CUTSCENE_WITH_PLAYER_SET_FLAG
} SubSCutsceneType;
-//! @TODO: rename based on func_8013E748 and func_800B8500
+//! TODO: rename based on func_8013E748 and func_800B8500
typedef s32 (*func_8013E748_VerifyFunc)(struct PlayState*, Actor*, void*);
typedef s32 (*VerifyActor)(struct PlayState*, Actor*, Actor*, void*);
@@ -153,8 +153,8 @@ s32 SubS_ActorPathing_SetNextPoint(struct PlayState* play, ActorPathing* actorPa
void SubS_ChangeAnimationBySpeedInfo(SkelAnime* skelAnime, AnimationSpeedInfo* animationInfo, s32 nextAnimIndex, s32* curAnimIndex);
-s32 SubS_StartActorCutscene(Actor* actor, s16 nextCutscene, s16 curCutscene, s32 type);
-s32 SubS_FillCutscenesList(Actor* actor, s16 cutscenes[], s16 numCutscenes);
+s32 SubS_StartCutscene(Actor* actor, s16 nextCsId, s16 curCsId, s32 type);
+s32 SubS_FillCutscenesList(Actor* actor, s16 csIdList[], s16 numCutscenes);
void SubS_ConstructPlane(Vec3f* point, Vec3f* unitVec, Vec3s* rot, Plane* plane);
s32 SubS_LineSegVsPlane(Vec3f* point, Vec3s* rot, Vec3f* unitVec, Vec3f* linePointA, Vec3f* linePointB, Vec3f* intersect);
diff --git a/include/z64transition.h b/include/z64transition.h
index 45178ba8e..741f344d7 100644
--- a/include/z64transition.h
+++ b/include/z64transition.h
@@ -1,7 +1,39 @@
-#ifndef _Z64_TRANSITION_H_
-#define _Z64_TRANSITION_H_
+#ifndef Z64TRANSITION_H
+#define Z64TRANSITION_H
#include "ultra64.h"
+#include "overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.h"
+#include "overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.h"
+#include "overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h"
+#include "overlays/fbdemos/ovl_fbdemo_wipe4/z_fbdemo_wipe4.h"
+#include "overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.h"
+
+typedef enum {
+ /* 0 */ TRANS_TILE_OFF, // Inactive, do nothing
+ /* 1 */ TRANS_TILE_SETUP, // Save the necessary buffers
+ /* 2 */ TRANS_TILE_PROCESS, // Initialize the transition
+ /* 3 */ TRANS_TILE_READY // The transition is ready, so will update and draw each frame
+} TransitionTileState;
+
+typedef struct {
+ /* 0x0 */ f32 x;
+ /* 0x4 */ f32 y;
+} TransitionTileVtxData; // size = 0x8
+
+typedef struct {
+ /* 0x00 */ s32 cols;
+ /* 0x04 */ s32 rows;
+ /* 0x08 */ s32 frame;
+ /* 0x0C */ TransitionTileVtxData* vtxData;
+ /* 0x10 */ Vtx* vtxFrame1;
+ /* 0x14 */ Vtx* vtxFrame2;
+ /* 0x18 */ Mtx projection;
+ /* 0x58 */ Mtx modelView;
+ /* 0x98 */ Mtx unk_98;
+ /* 0xD8 */ Gfx* gfx; // "gfxtbl"
+ /* 0xDC */ u16* zBuffer;
+} TransitionTile; // size = 0xE0
+
#define TC_SET_PARAMS (1 << 7)
@@ -32,31 +64,21 @@ typedef struct {
/* 0x14 */ TransitionInit* initInfo;
/* 0x18 */ size_t size;
} TransitionOverlay;
-
-typedef struct {
- /* 0x000 */ s16 transitionType;
- /* 0x002 */ s8 fbdemoType;
- /* 0x003 */ char unk_003[0x22B];
- /* 0x230 */ void* (*init)(void* transition);
- /* 0x234 */ void (*destroy)(void* transition);
- /* 0x238 */ void (*update)(void* transition, s32 updateRate);
- /* 0x23C */ void (*draw)(void* transition, Gfx** gfxP);
- /* 0x240 */ void (*start)(void* transition);
- /* 0x244 */ void (*setType)(void* transition, s32 type);
- /* 0x248 */ void (*setColor)(void* transition, u32 color);
- /* 0x24C */ void (*setEnvColor)(void* transition, u32 color);
- /* 0x250 */ s32 (*isDone)(void* transition);
- /* 0x254 */ char unk_254[0x4];
-} TransitionContext; // size = 0x258
-
-typedef struct {
- /* 0x0 */ char unk_0[0xC];
-} TransitionFade; // size = 0xC
typedef enum {
- /* 0 */ TRANSITION_CIRCLE_IN,
- /* 1 */ TRANSITION_CIRCLE_OUT,
-} TransitionCircleDirection;
+ /* 1 */ TRANS_INSTANCE_TYPE_FILL_OUT = 1,
+ /* 2 */ TRANS_INSTANCE_TYPE_FILL_IN,
+} TransitionInstanceType;
+
+#define TRANS_INSTANCE_TYPE_FADE_FLASH 3
+
+typedef struct {
+ /* 0x0 */ u8 type;
+ /* 0x1 */ u8 isDone;
+ /* 0x2 */ u8 direction;
+ /* 0x4 */ Color_RGBA8_u32 color;
+ /* 0x8 */ u16 timer;
+} TransitionFade; // size = 0xC
#define FBDEMO_CIRCLE_GET_MASK_TYPE(type) (type & 1)
@@ -76,4 +98,108 @@ typedef struct {
/* 0x1F */ s8 unk_1F; // Set to 0 and never used
} TransitionCircle; // size = 0x20
+#define TRANS_TRIGGER_OFF 0 // transition is not active
+#define TRANS_TRIGGER_START 20 // start transition (exiting an area)
+#define TRANS_TRIGGER_END -20 // transition is ending (arriving in a new area)
+
+typedef enum {
+ /* 0 */ TRANS_MODE_OFF,
+ /* 1 */ TRANS_MODE_SETUP,
+ /* 2 */ TRANS_MODE_INSTANCE_INIT,
+ /* 3 */ TRANS_MODE_INSTANCE_RUNNING,
+ /* 4 */ TRANS_MODE_FILL_WHITE_INIT,
+ /* 5 */ TRANS_MODE_FILL_IN,
+ /* 6 */ TRANS_MODE_FILL_OUT,
+ /* 7 */ TRANS_MODE_FILL_BROWN_INIT,
+ /* 8 */ TRANS_MODE_08, // unused
+ /* 9 */ TRANS_MODE_09, // unused
+ /* 10 */ TRANS_MODE_INSTANT,
+ /* 11 */ TRANS_MODE_INSTANCE_WAIT,
+ /* 12 */ TRANS_MODE_SANDSTORM_INIT,
+ /* 13 */ TRANS_MODE_SANDSTORM,
+ /* 14 */ TRANS_MODE_SANDSTORM_END_INIT,
+ /* 15 */ TRANS_MODE_SANDSTORM_END,
+ /* 16 */ TRANS_MODE_CS_BLACK_FILL_INIT,
+ /* 17 */ TRANS_MODE_CS_BLACK_FILL
+} TransitionMode;
+
+#define TRANS_TYPE_WIPE4 (1 << 5)
+#define TRANS_TYPE_WIPE3 (1 << 6)
+#define TRANS_TYPE_SET_PARAMS (1 << 7)
+
+typedef enum {
+ /* 0 */ TRANS_TYPE_WIPE,
+ /* 1 */ TRANS_TYPE_TRIFORCE,
+ /* 2 */ TRANS_TYPE_FADE_BLACK,
+ /* 3 */ TRANS_TYPE_FADE_WHITE,
+ /* 4 */ TRANS_TYPE_FADE_BLACK_FAST,
+ /* 5 */ TRANS_TYPE_FADE_WHITE_FAST,
+ /* 6 */ TRANS_TYPE_FADE_BLACK_SLOW,
+ /* 7 */ TRANS_TYPE_FADE_WHITE_SLOW,
+ /* 8 */ TRANS_TYPE_WIPE_FAST,
+ /* 9 */ TRANS_TYPE_FILL_WHITE_FAST, // Not actually fast due to bug in Play_UpdateTransition
+ /* 10 */ TRANS_TYPE_FILL_WHITE,
+ /* 11 */ TRANS_TYPE_INSTANT,
+ /* 12 */ TRANS_TYPE_FILL_BROWN,
+ /* 13 */ TRANS_TYPE_FADE_WHITE_CS_DELAYED,
+ /* 14 */ TRANS_TYPE_SANDSTORM_PERSIST,
+ /* 15 */ TRANS_TYPE_SANDSTORM_END,
+ /* 16 */ TRANS_TYPE_CS_BLACK_FILL,
+ /* 17 */ TRANS_TYPE_FADE_WHITE_INSTANT,
+ /* 18 */ TRANS_TYPE_FADE_GREEN,
+ /* 19 */ TRANS_TYPE_FADE_BLUE,
+ /* 20 */ TRANS_TYPE_FADE_DYNAMIC, // Chooses Black or White based on time of day
+ /* 21 */ TRANS_TYPE_CIRCLE,
+ /* 22 */ TRANS_TYPE_WIPE5,
+ // transition types 23 - 31 are unused
+ // transition types 32 - 39 are Wipe4 TODO needs macro
+ /* 38 */ TRANS_TYPE_38 = 38,
+ // transition types 40 - 63 are unused
+ // transition types 64 - 127 are Wipe3 TODO needs macro
+ /* 64 */ TRANS_TYPE_64 = 64,
+ /* 70 */ TRANS_TYPE_70 = 70,
+ /* 72 */ TRANS_TYPE_72 = 72,
+ /* 73 */ TRANS_TYPE_73,
+ /* 80 */ TRANS_TYPE_80 = 80,
+ /* 86 */ TRANS_TYPE_86 = 86
+} TransitionType;
+
+typedef enum {
+ /* 0 */ FBDEMO_FADE,
+ /* 1 */ FBDEMO_TRIFORCE,
+ /* 2 */ FBDEMO_WIPE1,
+ /* 3 */ FBDEMO_WIPE3,
+ /* 4 */ FBDEMO_WIPE4,
+ /* 5 */ FBDEMO_CIRCLE,
+ /* 6 */ FBDEMO_WIPE5
+} FbDemoType;
+
+#define TRANS_NEXT_TYPE_DEFAULT 0xFF
+
+typedef struct {
+ /* 0x000 */ s16 transitionType;
+ /* 0x002 */ s8 fbdemoType;
+ /* 0x003 */ char unk_003[0x5];
+ /* 0x008 */ union {
+ TransitionFade fade;
+ TransitionCircle circle;
+ TransitionTriforce triforce;
+ TransitionWipe1 wipe1;
+ TransitionWipe3 wipe3;
+ TransitionWipe4 wipe4;
+ TransitionWipe5 wipe5;
+ } instanceData;
+ /* 0x220 */ char unk_220[0x10];
+ /* 0x230 */ void* (*init)(void* transition);
+ /* 0x234 */ void (*destroy)(void* transition);
+ /* 0x238 */ void (*update)(void* transition, s32 updateRate);
+ /* 0x23C */ void (*draw)(void* transition, Gfx** gfxP);
+ /* 0x240 */ void (*start)(void* transition);
+ /* 0x244 */ void (*setType)(void* transition, s32 type);
+ /* 0x248 */ void (*setColor)(void* transition, u32 color);
+ /* 0x24C */ void (*setEnvColor)(void* transition, u32 color);
+ /* 0x250 */ s32 (*isDone)(void* transition);
+ /* 0x254 */ char unk_254[0x4];
+} TransitionContext; // size = 0x258
+
#endif
diff --git a/include/z_en_hy_code.h b/include/z_en_hy_code.h
index 0620d35a0..1a2b7847e 100644
--- a/include/z_en_hy_code.h
+++ b/include/z_en_hy_code.h
@@ -1,5 +1,5 @@
-#ifndef Z_EN_HY_CODE_H
-#define Z_EN_HY_CODE_H
+#ifndef Z64ENHY_CODE_H
+#define Z64ENHY_CODE_H
#include "global.h"
#include "overlays/actors/ovl_En_Door/z_en_door.h"
diff --git a/include/z_fireobj.h b/include/z_fireobj.h
new file mode 100644
index 000000000..7bd58d80a
--- /dev/null
+++ b/include/z_fireobj.h
@@ -0,0 +1,77 @@
+#ifndef Z_FIREOBJ_H
+#define Z_FIREOBJ_H
+
+#include "ultra64.h"
+#include "color.h"
+#include "z64collision_check.h"
+#include "z64light.h"
+#include "z64math.h"
+
+struct PlayState;
+struct Actor;
+
+
+typedef struct FireObjInitParams {
+ /* 0x0 */ f32 size;
+ /* 0x4 */ f32 dynamicSizeStep;
+ /* 0x8 */ u8 state;
+ /* 0x9 */ u8 sizeGrowsCos2;
+ /* 0xA */ u8 colorsIndex;
+ /* 0xB */ u8 flags;
+ /* 0xC */ u8 lightParamsIndex;
+} FireObjInitParams; // size = 0x10
+
+typedef struct FireObjColors {
+ /* 0x0 */ Color_RGBA8 primColor;
+ /* 0x4 */ u8 lod;
+ /* 0x5 */ Color_RGB8 envColor;
+} FireObjColors; // size = 0x8
+
+typedef struct FireObjLightParams {
+ /* 0x0 */ s16 radius;
+ /* 0x2 */ Color_RGB8 color;
+ /* 0x5 */ Color_RGB8 maxColorAdj;
+} FireObjLightParams; // size = 0x8
+
+typedef struct FireObjLight {
+ /* 0x00 */ LightNode* light;
+ /* 0x04 */ LightInfo lightInfo;
+ /* 0x12 */ u8 lightParamsIndex;
+} FireObjLight; // size = 0x14
+
+typedef struct FireObj {
+ /* 0x00 */ Vec3f position;
+ /* 0x0C */ f32 size;
+ /* 0x10 */ f32 sizeInv;
+ /* 0x14 */ f32 xScale;
+ /* 0x18 */ f32 yScale;
+ /* 0x1C */ f32 dynamicSize;
+ /* 0x20 */ f32 dynamicSizeStep;
+ /* 0x24 */ u8 state; // @see FireState enum
+ /* 0x25 */ u8 sizeGrowsCos2;
+ /* 0x26 */ u8 timer;
+ /* 0x27 */ u8 colorsIndex;
+ /* 0x28 */ u8 flags; // @see FIRE_FLAG_
+ /* 0x2A */ s16 ignitionDelay;
+ /* 0x2C */ ColliderCylinder collision;
+ /* 0x78 */ FireObjLight light;
+} FireObj; // size = 0x8B
+
+typedef enum FireState {
+ /* 0 */ FIRE_STATE_GROWING,
+ /* 1 */ FIRE_STATE_SHRINKING,
+ /* 2 */ FIRE_STATE_FULLY_LIT,
+ /* 3 */ FIRE_STATE_NOT_LIT,
+} FireState;
+
+#define FIRE_FLAG_WATER_EXTINGUISHABLE (1 << 0)
+#define FIRE_FLAG_INTERACT_STICK (1 << 1)
+
+void FireObj_SetPosition(FireObj* fire, Vec3f* pos);
+void FireObj_Draw(struct PlayState* play, FireObj* fire);
+void FireObj_Init(struct PlayState* play, FireObj* fire, FireObjInitParams* init, struct Actor* actor);
+void FireObj_Destroy(struct PlayState* play, FireObj* fire);
+void FireObj_SetState2(FireObj* fire, f32 dynamicSizeStep, u8 newState);
+void FireObj_Update(struct PlayState* play, FireObj* fire, struct Actor* actor);
+
+#endif
diff --git a/include/z_prenmi.h b/include/z_prenmi.h
index 1aa1e6f99..04c3f5f16 100644
--- a/include/z_prenmi.h
+++ b/include/z_prenmi.h
@@ -1,5 +1,5 @@
-#ifndef Z64_PRENMI_H
-#define Z64_PRENMI_H
+#ifndef Z64PRENMI_H
+#define Z64PRENMI_H
#include "global.h"
diff --git a/include/z_title_setup.h b/include/z_title_setup.h
index 41e3f52f8..3b299af97 100644
--- a/include/z_title_setup.h
+++ b/include/z_title_setup.h
@@ -1,5 +1,5 @@
-#ifndef Z64_TITLE_SETUP_H
-#define Z64_TITLE_SETUP_H
+#ifndef Z64TITLE_SETUP_H
+#define Z64TITLE_SETUP_H
#include "global.h"
diff --git a/requirements.txt b/requirements.txt
index d410bc853..6b391b170 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -5,6 +5,9 @@ colorama>=0.4.3
# disasm
rabbitizer>=1.0.0,<2.0.0
+# Compression
+pyelftools>=0.26
+
# diff
watchdog>=0.10.2
argcomplete
diff --git a/spec b/spec
index a59e3f0f4..455822823 100644
--- a/spec
+++ b/spec
@@ -424,11 +424,10 @@ beginseg
name "code"
compress
after "dmadata"
- include "build/src/code/z_en_a_keep.o"
include "build/data/code/aspMain.data.o"
include "build/data/code/gspS2DEX2.fifo.data.o"
include "build/data/code/njpgdspMain.data.o"
- include "build/data/code/code_801ADE60.data.o"
+ include "build/src/code/z_en_a_keep.o"
include "build/data/code/code_801E3FA0.bss.o"
include "build/src/code/z_en_item00.o"
include "build/src/code/z_eff_blure.o"
@@ -451,8 +450,6 @@ beginseg
include "build/src/code/z_bg_collect.o"
include "build/src/code/z_bg_item.o"
include "build/src/code/z_camera.o"
- include "build/data/code/z_camera.data.o"
- include "build/data/code/z_camera.bss.o"
include "build/src/code/z_collision_btltbls.o"
pad_text
include "build/src/code/z_collision_check.o"
@@ -461,12 +458,9 @@ beginseg
include "build/src/code/z_debug.o"
include "build/src/code/z_debug_display.o"
include "build/src/code/z_debug_mode.o"
- include "build/data/code/z_debug_mode.data.o"
- include "build/data/code/z_debug_mode.bss.o"
include "build/src/code/z_demo.o"
include "build/src/code/z_draw.o"
include "build/src/code/z_eff_footmark.o"
- include "build/data/code/z_eff_footmark.data.o"
include "build/src/code/z_sound_source.o"
include "build/src/code/z_elf_message.o"
include "build/src/code/z_en_hy_code.o"
@@ -476,7 +470,6 @@ beginseg
include "build/data/code/z_eventmgr.bss.o"
include "build/src/code/z_fcurve_data.o"
include "build/src/code/z_fcurve_data_skelanime.o"
- include "build/data/code/code_801BD830.data.o"
include "build/src/code/z_fireobj.o"
include "build/src/code/z_game_dlftbls.o"
include "build/src/code/z_horse.o"
@@ -506,19 +499,16 @@ beginseg
include "build/src/code/z_path.o"
include "build/src/code/z_pause.o"
include "build/src/code/z_player_lib.o"
- include "build/data/code/z_player_lib.data.o"
- include "build/data/code/z_player_lib.bss.o"
include "build/src/code/z_prenmi.o"
include "build/src/code/z_quake.o"
include "build/src/code/z_rcp.o"
pad_text
include "build/src/code/z_room.o"
- include "build/data/code/z_room.data.o"
include "build/src/code/code_8012EC80.o"
pad_text
include "build/data/code/code_801C2410.data.o"
include "build/src/code/z_scene.o"
- include "build/data/code/code_801C2730.data.o"
+ include "build/src/code/object_table.o"
include "build/src/code/z_scene_proc.o"
include "build/src/code/z_scene_table.o"
include "build/src/code/z_schedule.o"
@@ -532,10 +522,11 @@ beginseg
include "build/src/code/z_rumble.o"
include "build/src/code/z_view.o"
include "build/src/code/z_vimode.o"
- include "build/data/code/z_vimode.data.o"
+ include "build/src/code/code_80140CE0.o"
+ include "build/data/code/code_80140CE0.data.o"
include "build/src/code/code_80140E80.o"
include "build/src/code/z_vismono.o"
- include "build/src/code/code_801420C0.o"
+ include "build/src/code/z_viszbuf.o"
include "build/src/code/z_vr_box.o"
include "build/src/code/z_vr_box_draw.o"
include "build/src/code/z_sram_NES.o"
@@ -547,27 +538,24 @@ beginseg
include "build/src/code/z_message_staff.o"
include "build/src/code/z_player_call.o"
include "build/src/code/z_shrink_window.o"
- include "build/src/code/db_camera.o"
- include "build/data/code/db_camera.bss.o"
+ include "build/src/code/cutscene_camera.o"
+ include "build/data/code/cutscene_camera.bss.o"
include "build/src/code/z_kaleido_manager.o"
include "build/src/code/z_kaleido_scope_call.o"
include "build/src/code/z_fbdemo_dlftbls.o"
include "build/src/code/z_fbdemo.o"
- include "build/data/code/z_fbdemo.data.o"
include "build/src/code/z_fbdemo_fade.o"
include "build/src/code/z_fbdemo_circle.o"
include "build/src/code/z_overlay.o"
include "build/src/code/z_play.o"
- include "build/data/code/z_play.data.o"
- include "build/data/code/z_play.bss.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"
include "build/src/code/TwoHeadArena.o"
- include "build/src/code/code_80172BC0.o"
- include "build/src/code/audioMgr.o"
+ include "build/src/code/audio_stop_all_sfx.o"
+ include "build/src/code/audio_thread_manager.o"
include "build/src/code/title_setup.o"
include "build/src/code/game.o"
include "build/data/code/game.bss.o"
@@ -584,9 +572,10 @@ beginseg
include "build/src/code/speed_meter.o"
include "build/data/code/speed_meter.data.o"
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/data/code/sys_cmpdma.bss.o"
include "build/src/code/sys_initial_check.o"
include "build/src/code/sys_math.o"
include "build/src/code/sys_math3d.o"
@@ -607,35 +596,33 @@ beginseg
pad_text
pad_text
pad_text
- include "build/src/code/audio/audio_data.o"
- include "build/src/code/audio/audio_synthesis.o"
- include "build/src/code/audio/audio_heap.o"
+ include "build/src/audio/lib/data.o"
+ include "build/src/audio/lib/synthesis.o"
+ include "build/src/audio/lib/heap.o"
include "build/data/code/audio_heap.bss.o"
- include "build/src/code/audio/audio_load.o"
- include "build/src/code/audio/code_80192BE0.o"
- include "build/data/code/code_80192BE0.data.o"
- include "build/src/code/audio/audio_dcache.o"
- include "build/src/code/audio/aisetnextbuf.o"
- include "build/src/code/audio/audio_playback.o"
- include "build/src/code/audio/audio_effects.o"
- include "build/src/code/audio/audio_seqplayer.o"
+ include "build/src/audio/lib/load.o"
+ include "build/src/audio/lib/thread.o"
+ include "build/src/audio/lib/dcache.o"
+ include "build/src/audio/lib/aisetnextbuf.o"
+ include "build/src/audio/lib/playback.o"
+ include "build/src/audio/lib/effects.o"
+ include "build/src/audio/lib/seqplayer.o"
include "build/data/code/audio_dramStack.data.o"
include "build/asm/code/code_8019AE40.text.o" // handwritten
pad_text
include "build/asm/code/code_8019AEC0.text.o" // handwritten
- include "build/src/code/audio/code_8019AF00.o"
- include "build/src/code/audio/code_801A4EB0.o"
- include "build/data/code/code_801A4EB0.data.o"
- include "build/src/code/audio/code_801A51F0.o"
- include "build/data/code/code_801A51F0.data.o"
- include "build/data/code/code_801A51F0.bss.o"
+ include "build/src/audio/code_8019AF00.o"
+ include "build/src/audio/voice_external.o"
+ include "build/data/code/voice_external.data.o"
+ include "build/src/audio/voice_internal.o"
+ include "build/data/code/voice_internal.data.o"
+ include "build/data/code/voice_internal.bss.o"
pad_text
- include "build/src/code/audio/audio_sfx_params.o"
- include "build/src/code/audio/code_801A5BD0.o"
- include "build/src/code/audio/code_801A7B10.o"
- include "build/data/code/code_801A7B10.data.o"
- include "build/data/code/code_801A7B10.bss.o"
- include "build/src/code/audio/audio_init_params.o"
+ include "build/src/audio/sfx_params.o"
+ include "build/src/audio/sfx.o"
+ include "build/src/audio/sequence.o"
+ include "build/data/code/sequence.bss.o"
+ include "build/src/audio/session_config.o"
include "build/src/code/jpegutils.o"
include "build/src/code/jpegdecoder.o"
include_data_with_rodata "build/src/code/z_game_over.o"
@@ -969,8 +956,7 @@ beginseg
name "ovl_En_Dekubaba"
compress
include "build/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.o"
- include "build/data/ovl_En_Dekubaba/ovl_En_Dekubaba.data.o"
- include "build/data/ovl_En_Dekubaba/ovl_En_Dekubaba.reloc.o"
+ include "build/src/overlays/actors/ovl_En_Dekubaba/ovl_En_Dekubaba_reloc.o"
endseg
beginseg
@@ -1012,7 +998,8 @@ beginseg
name "ovl_Item_B_Heart"
compress
include "build/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.o"
- include "build/src/overlays/actors/ovl_Item_B_Heart/ovl_Item_B_Heart_reloc.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"
endseg
beginseg
@@ -1047,7 +1034,8 @@ beginseg
name "ovl_Bg_Keikoku_Spr"
compress
include "build/src/overlays/actors/ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.o"
- include "build/src/overlays/actors/ovl_Bg_Keikoku_Spr/ovl_Bg_Keikoku_Spr_reloc.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"
endseg
beginseg
@@ -1198,11 +1186,7 @@ beginseg
name "ovl_Mir_Ray"
compress
include "build/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.o"
-#ifdef NON_MATCHING
include "build/src/overlays/actors/ovl_Mir_Ray/ovl_Mir_Ray_reloc.o"
-#else
- include "build/data/ovl_Mir_Ray/ovl_Mir_Ray.reloc.o"
-#endif
endseg
beginseg
@@ -1987,8 +1971,7 @@ beginseg
name "ovl_En_Si"
compress
include "build/src/overlays/actors/ovl_En_Si/z_en_si.o"
- include "build/data/ovl_En_Si/ovl_En_Si.data.o"
- include "build/data/ovl_En_Si/ovl_En_Si.reloc.o"
+ include "build/src/overlays/actors/ovl_En_Si/ovl_En_Si_reloc.o"
endseg
beginseg
@@ -2131,7 +2114,8 @@ beginseg
name "ovl_Door_Spiral"
compress
include "build/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.o"
- include "build/src/overlays/actors/ovl_Door_Spiral/ovl_Door_Spiral_reloc.o"
+ include "build/data/ovl_Door_Spiral/ovl_Door_Spiral.data.o"
+ include "build/data/ovl_Door_Spiral/ovl_Door_Spiral.reloc.o"
endseg
beginseg
@@ -2159,7 +2143,8 @@ beginseg
name "ovl_Obj_Boyo"
compress
include "build/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.o"
- include "build/src/overlays/actors/ovl_Obj_Boyo/ovl_Obj_Boyo_reloc.o"
+ include "build/data/ovl_Obj_Boyo/ovl_Obj_Boyo.data.o"
+ include "build/data/ovl_Obj_Boyo/ovl_Obj_Boyo.reloc.o"
endseg
beginseg
@@ -2276,8 +2261,7 @@ beginseg
name "ovl_En_Encount4"
compress
include "build/src/overlays/actors/ovl_En_Encount4/z_en_encount4.o"
- include "build/data/ovl_En_Encount4/ovl_En_Encount4.data.o"
- include "build/data/ovl_En_Encount4/ovl_En_Encount4.reloc.o"
+ include "build/src/overlays/actors/ovl_En_Encount4/ovl_En_Encount4_reloc.o"
endseg
beginseg
@@ -2573,9 +2557,7 @@ beginseg
name "ovl_En_Slime"
compress
include "build/src/overlays/actors/ovl_En_Slime/z_en_slime.o"
- include "build/data/ovl_En_Slime/ovl_En_Slime.data.o"
- include "build/data/ovl_En_Slime/ovl_En_Slime.bss.o"
- include "build/data/ovl_En_Slime/ovl_En_Slime.reloc.o"
+ include "build/src/overlays/actors/ovl_En_Slime/ovl_En_Slime_reloc.o"
endseg
beginseg
@@ -2681,9 +2663,7 @@ beginseg
name "ovl_En_Test3"
compress
include "build/src/overlays/actors/ovl_En_Test3/z_en_test3.o"
- include "build/data/ovl_En_Test3/ovl_En_Test3.data.o"
- include "build/data/ovl_En_Test3/ovl_En_Test3.bss.o"
- include "build/data/ovl_En_Test3/ovl_En_Test3.reloc.o"
+ include "build/src/overlays/actors/ovl_En_Test3/ovl_En_Test3_reloc.o"
endseg
beginseg
@@ -2959,8 +2939,7 @@ beginseg
name "ovl_En_Egol"
compress
include "build/src/overlays/actors/ovl_En_Egol/z_en_egol.o"
- include "build/data/ovl_En_Egol/ovl_En_Egol.data.o"
- include "build/data/ovl_En_Egol/ovl_En_Egol.reloc.o"
+ include "build/src/overlays/actors/ovl_En_Egol/ovl_En_Egol_reloc.o"
endseg
beginseg
@@ -3022,8 +3001,7 @@ beginseg
name "ovl_En_Estone"
compress
include "build/src/overlays/actors/ovl_En_Estone/z_en_estone.o"
- include "build/data/ovl_En_Estone/ovl_En_Estone.data.o"
- include "build/data/ovl_En_Estone/ovl_En_Estone.reloc.o"
+ include "build/src/overlays/actors/ovl_En_Estone/ovl_En_Estone_reloc.o"
endseg
beginseg
@@ -3136,8 +3114,7 @@ beginseg
name "ovl_En_Egblock"
compress
include "build/src/overlays/actors/ovl_En_Egblock/z_en_egblock.o"
- include "build/data/ovl_En_Egblock/ovl_En_Egblock.data.o"
- include "build/data/ovl_En_Egblock/ovl_En_Egblock.reloc.o"
+ include "build/src/overlays/actors/ovl_En_Egblock/ovl_En_Egblock_reloc.o"
endseg
beginseg
@@ -3246,8 +3223,7 @@ beginseg
name "ovl_fbdemo_wipe5"
compress
include "build/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.o"
- include "build/data/ovl_fbdemo_wipe5/ovl_fbdemo_wipe5.data.o"
- include "build/data/ovl_fbdemo_wipe5/ovl_fbdemo_wipe5.reloc.o"
+ include "build/src/overlays/fbdemos/ovl_fbdemo_wipe5/ovl_fbdemo_wipe5_reloc.o"
endseg
beginseg
@@ -3359,7 +3335,8 @@ beginseg
name "ovl_Bg_Lotus"
compress
include "build/src/overlays/actors/ovl_Bg_Lotus/z_bg_lotus.o"
- include "build/src/overlays/actors/ovl_Bg_Lotus/ovl_Bg_Lotus_reloc.o"
+ include "build/data/ovl_Bg_Lotus/ovl_Bg_Lotus.data.o"
+ include "build/data/ovl_Bg_Lotus/ovl_Bg_Lotus.reloc.o"
endseg
beginseg
@@ -3396,8 +3373,7 @@ beginseg
name "ovl_Bg_Dkjail_Ivy"
compress
include "build/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.o"
- include "build/data/ovl_Bg_Dkjail_Ivy/ovl_Bg_Dkjail_Ivy.data.o"
- include "build/data/ovl_Bg_Dkjail_Ivy/ovl_Bg_Dkjail_Ivy.reloc.o"
+ include "build/src/overlays/actors/ovl_Bg_Dkjail_Ivy/ovl_Bg_Dkjail_Ivy_reloc.o"
endseg
beginseg
@@ -3447,8 +3423,7 @@ beginseg
name "ovl_En_Stop_heishi"
compress
include "build/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.o"
- include "build/data/ovl_En_Stop_heishi/ovl_En_Stop_heishi.data.o"
- include "build/data/ovl_En_Stop_heishi/ovl_En_Stop_heishi.reloc.o"
+ include "build/src/overlays/actors/ovl_En_Stop_heishi/ovl_En_Stop_heishi_reloc.o"
endseg
beginseg
@@ -3462,8 +3437,7 @@ beginseg
name "ovl_En_Lift_Nuts"
compress
include "build/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.o"
- include "build/data/ovl_En_Lift_Nuts/ovl_En_Lift_Nuts.data.o"
- include "build/data/ovl_En_Lift_Nuts/ovl_En_Lift_Nuts.reloc.o"
+ include "build/src/overlays/actors/ovl_En_Lift_Nuts/ovl_En_Lift_Nuts_reloc.o"
endseg
beginseg
@@ -3621,7 +3595,8 @@ beginseg
name "ovl_Bg_Tobira01"
compress
include "build/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.o"
- include "build/src/overlays/actors/ovl_Bg_Tobira01/ovl_Bg_Tobira01_reloc.o"
+ include "build/data/ovl_Bg_Tobira01/ovl_Bg_Tobira01.data.o"
+ include "build/data/ovl_Bg_Tobira01/ovl_Bg_Tobira01.reloc.o"
endseg
beginseg
@@ -3945,8 +3920,7 @@ beginseg
name "ovl_Bg_Kin2_Picture"
compress
include "build/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.o"
- include "build/data/ovl_Bg_Kin2_Picture/ovl_Bg_Kin2_Picture.data.o"
- include "build/data/ovl_Bg_Kin2_Picture/ovl_Bg_Kin2_Picture.reloc.o"
+ include "build/src/overlays/actors/ovl_Bg_Kin2_Picture/ovl_Bg_Kin2_Picture_reloc.o"
endseg
beginseg
@@ -4037,16 +4011,14 @@ beginseg
name "ovl_En_Kaizoku"
compress
include "build/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.o"
- include "build/data/ovl_En_Kaizoku/ovl_En_Kaizoku.data.o"
- include "build/data/ovl_En_Kaizoku/ovl_En_Kaizoku.reloc.o"
+ include "build/src/overlays/actors/ovl_En_Kaizoku/ovl_En_Kaizoku_reloc.o"
endseg
beginseg
name "ovl_En_Ge2"
compress
include "build/src/overlays/actors/ovl_En_Ge2/z_en_ge2.o"
- include "build/data/ovl_En_Ge2/ovl_En_Ge2.data.o"
- include "build/data/ovl_En_Ge2/ovl_En_Ge2.reloc.o"
+ include "build/src/overlays/actors/ovl_En_Ge2/ovl_En_Ge2_reloc.o"
endseg
beginseg
@@ -4138,8 +4110,7 @@ beginseg
name "ovl_Obj_Y2shutter"
compress
include "build/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.o"
- include "build/data/ovl_Obj_Y2shutter/ovl_Obj_Y2shutter.data.o"
- include "build/data/ovl_Obj_Y2shutter/ovl_Obj_Y2shutter.reloc.o"
+ include "build/src/overlays/actors/ovl_Obj_Y2shutter/ovl_Obj_Y2shutter_reloc.o"
endseg
beginseg
@@ -4174,11 +4145,7 @@ beginseg
name "ovl_Mir_Ray3"
compress
include "build/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.o"
-#ifdef NON_MATCHING
include "build/src/overlays/actors/ovl_Mir_Ray3/ovl_Mir_Ray3_reloc.o"
-#else
- include "build/data/ovl_Mir_Ray3/ovl_Mir_Ray3.reloc.o"
-#endif
endseg
beginseg
@@ -4234,8 +4201,7 @@ beginseg
name "ovl_En_Zod"
compress
include "build/src/overlays/actors/ovl_En_Zod/z_en_zod.o"
- include "build/data/ovl_En_Zod/ovl_En_Zod.data.o"
- include "build/data/ovl_En_Zod/ovl_En_Zod.reloc.o"
+ include "build/src/overlays/actors/ovl_En_Zod/ovl_En_Zod_reloc.o"
endseg
beginseg
@@ -4312,8 +4278,7 @@ beginseg
name "ovl_En_Nb"
compress
include "build/src/overlays/actors/ovl_En_Nb/z_en_nb.o"
- include "build/data/ovl_En_Nb/ovl_En_Nb.data.o"
- include "build/data/ovl_En_Nb/ovl_En_Nb.reloc.o"
+ include "build/src/overlays/actors/ovl_En_Nb/ovl_En_Nb_reloc.o"
endseg
beginseg
@@ -4440,11 +4405,7 @@ beginseg
name "ovl_Bg_Ikana_Bombwall"
compress
include "build/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.o"
-#ifdef NON_MATCHING
include "build/src/overlays/actors/ovl_Bg_Ikana_Bombwall/ovl_Bg_Ikana_Bombwall_reloc.o"
-#else
- include "build/data/ovl_Bg_Ikana_Bombwall/ovl_Bg_Ikana_Bombwall.reloc.o"
-#endif
endseg
beginseg
@@ -4465,11 +4426,7 @@ beginseg
name "ovl_Bg_Haka_Bombwall"
compress
include "build/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.o"
- #ifdef NON_MATCHING
- include "build/src/overlays/actors/ovl_Bg_Haka_Bombwall/ovl_Bg_Haka_Bombwall_reloc.o"
- #else
- include "build/data/ovl_Bg_Haka_Bombwall/ovl_Bg_Haka_Bombwall.reloc.o"
- #endif
+ include "build/src/overlays/actors/ovl_Bg_Haka_Bombwall/ovl_Bg_Haka_Bombwall_reloc.o"
endseg
beginseg
@@ -4716,8 +4673,7 @@ beginseg
name "ovl_En_Rz"
compress
include "build/src/overlays/actors/ovl_En_Rz/z_en_rz.o"
- include "build/data/ovl_En_Rz/ovl_En_Rz.data.o"
- include "build/data/ovl_En_Rz/ovl_En_Rz.reloc.o"
+ include "build/src/overlays/actors/ovl_En_Rz/ovl_En_Rz_reloc.o"
endseg
beginseg
diff --git a/src/code/audio/code_8019AF00.c b/src/audio/code_8019AF00.c
similarity index 92%
rename from src/code/audio/code_8019AF00.c
rename to src/audio/code_8019AF00.c
index 6d1468d82..d107e65b7 100644
--- a/src/code/audio/code_8019AF00.c
+++ b/src/audio/code_8019AF00.c
@@ -70,7 +70,7 @@ s32 Audio_SetGanonsTowerBgmVolume(u8 targetVolume);
void Audio_StartMorningSceneSequence(u16 seqId);
void Audio_StartSceneSequence(u16 seqId);
-void Audio_PlaySequenceWithSeqPlayerIO(s8 playerIndex, u16 seqId, u8 fadeInDuration, s8 ioPort, u8 ioData);
+void Audio_PlaySequenceWithSeqPlayerIO(s8 seqPlayerIndex, u16 seqId, u8 fadeInDuration, s8 ioPort, u8 ioData);
void func_801A4428(u8 reverbIndex);
void func_801A3038(void);
void Audio_PlayAmbience(u8 ambienceId);
@@ -2640,7 +2640,7 @@ void AudioOcarina_PlayControllerInput(u8 isOcarinaSfxSuppressedWhenCancelled) {
// Add vibrato of the ocarina note based on the x control stick
sCurOcarinaVibrato = ABS_ALT(sOcarinaInputStickRel.x) >> 2;
// Sets vibrato to io port 6
- AudioThread_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | SFX_CHANNEL_OCARINA << 8 | 6, sCurOcarinaVibrato);
+ AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, SFX_CHANNEL_OCARINA, 6, sCurOcarinaVibrato);
} else {
// no bending or vibrato for recording state OCARINA_RECORD_SCARECROW_SPAWN
sCurOcarinaBendIndex = 0;
@@ -2652,10 +2652,9 @@ void AudioOcarina_PlayControllerInput(u8 isOcarinaSfxSuppressedWhenCancelled) {
if ((sCurOcarinaPitch != OCARINA_PITCH_NONE) && (sPrevOcarinaPitch != sCurOcarinaPitch)) {
// Sets ocarina instrument Id to io port 7, which is used
// as an index in seq 0 to get the true instrument Id
- AudioThread_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | SFX_CHANNEL_OCARINA << 8 | 7,
- sOcarinaInstrumentId - 1);
+ AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, SFX_CHANNEL_OCARINA, 7, sOcarinaInstrumentId - 1);
// Sets pitch to io port 5
- AudioThread_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | SFX_CHANNEL_OCARINA << 8 | 5, sCurOcarinaPitch);
+ AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, SFX_CHANNEL_OCARINA, 5, sCurOcarinaPitch);
AudioSfx_PlaySfx(NA_SE_OC_OCARINA, &gSfxDefaultPos, 4, &sCurOcarinaBendFreq, &sDefaultOcarinaVolume,
&gSfxDefaultReverb);
} else if ((sPrevOcarinaPitch != OCARINA_PITCH_NONE) && (sCurOcarinaPitch == OCARINA_PITCH_NONE) &&
@@ -2733,10 +2732,9 @@ void AudioOcarina_SetOcarinaDisableTimer(u8 unused, u8 timer) {
sOcarinaUnused = unused;
}
-u32 AudioOcarina_SetInstrument(u8 ocarinaInstrumentId) {
+void AudioOcarina_SetInstrument(u8 ocarinaInstrumentId) {
if ((sOcarinaInstrumentId != ocarinaInstrumentId) || (ocarinaInstrumentId == OCARINA_INSTRUMENT_DEFAULT)) {
- Audio_QueueSeqCmd(0x80000000 | ((u32)(SEQ_PLAYER_SFX) << 24) | ((u32)(1) << 16) |
- ((u32)(SFX_CHANNEL_OCARINA) << 8) | (u32)(ocarinaInstrumentId));
+ SEQCMD_SET_CHANNEL_IO(SEQ_PLAYER_SFX, SFX_CHANNEL_OCARINA, 1, ocarinaInstrumentId);
sOcarinaInstrumentId = ocarinaInstrumentId;
if (ocarinaInstrumentId == OCARINA_INSTRUMENT_OFF) {
@@ -2862,7 +2860,7 @@ void AudioOcarina_PlaybackSong(void) {
// Update vibrato
sNotePlaybackVibrato = sPlaybackSong[sPlaybackNotePos].vibrato;
// Sets vibrato to io port 6
- AudioThread_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | SFX_CHANNEL_OCARINA << 8 | 6, sNotePlaybackVibrato);
+ AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, SFX_CHANNEL_OCARINA, 6, sNotePlaybackVibrato);
// Update bend
if (sNotePlaybackBend != sPlaybackSong[sPlaybackNotePos].bend) {
@@ -2892,10 +2890,9 @@ void AudioOcarina_PlaybackSong(void) {
sPlaybackStaffPos++;
// Sets ocarina instrument Id to io port 7, which is used
// as an index in seq 0 to get the true instrument Id
- AudioThread_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | SFX_CHANNEL_OCARINA << 8 | 7,
- sOcarinaInstrumentId - 1);
- AudioThread_QueueCmdS8(0x6 << 24 | SEQ_PLAYER_SFX << 16 | SFX_CHANNEL_OCARINA << 8 | 5,
- sPlaybackPitch & OCARINA_BUTTON_MASK_PITCH);
+ AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, SFX_CHANNEL_OCARINA, 7, sOcarinaInstrumentId - 1);
+ AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, SFX_CHANNEL_OCARINA, 5,
+ sPlaybackPitch & OCARINA_BUTTON_MASK_PITCH);
AudioSfx_PlaySfx(NA_SE_OC_OCARINA, &gSfxDefaultPos, 4, &sRelativeNotePlaybackBend,
&sRelativeNotePlaybackVolume, &gSfxDefaultReverb);
} else {
@@ -3305,13 +3302,16 @@ s32 AudioOcarina_MemoryGameNextNote(void) {
sOcarinaSongNotes[OCARINA_SONG_MEMORY_GAME][sOcarinaMemoryGameAppendPos].length = 0;
sOcarinaSongNotes[OCARINA_SONG_MEMORY_GAME][sOcarinaMemoryGameAppendPos + 1].pitch = OCARINA_PITCH_NONE;
sOcarinaSongNotes[OCARINA_SONG_MEMORY_GAME][sOcarinaMemoryGameAppendPos + 1].length = 0;
+
+ //! FAKE:
if (1) {}
+
return false;
}
#undef OCARINA_SONG_MEMORY_GAME
void AudioOcarina_Update(void) {
- sOcarinaUpdateTaskStart = gAudioContext.totalTaskCount;
+ sOcarinaUpdateTaskStart = gAudioCtx.totalTaskCount;
if (sOcarinaInstrumentId != OCARINA_INSTRUMENT_OFF) {
if (sIsOcarinaInputEnabled == true) {
AudioOcarina_ReadControllerInput();
@@ -3357,7 +3357,7 @@ void AudioOcarina_Update(void) {
#define OCARINA_INSTRUMENT_OOT_MAX 7
-void AudioOcarina_PlayLongScarecrowAfterCredits(void) {
+void AudioOcarina_PlayLongScarecrowSong(void) {
static u8 sScarecrowAfterCreditsState = 0;
static u8 sScarecrowAfterCreditsIntrumentId = OCARINA_INSTRUMENT_DEFAULT;
static u16 sScarecrowAfterCreditsTimer = 1200;
@@ -3399,9 +3399,9 @@ u8 sRequestCustomSequence = false;
void AudioOcarina_SetCustomSequence(void) {
// Never passes true as sRequestCustomSequence is never set true
- if (sRequestCustomSequence && gAudioContext.seqPlayers[SEQ_PLAYER_FANFARE].enabled &&
- ((u8)gAudioContext.seqPlayers[SEQ_PLAYER_FANFARE].soundScriptIO[0] == (u8)SEQ_IO_VAL_NONE)) {
- gAudioContext.seqPlayers[SEQ_PLAYER_FANFARE].seqData = sCustomSequenceScript;
+ if (sRequestCustomSequence && gAudioCtx.seqPlayers[SEQ_PLAYER_FANFARE].enabled &&
+ ((u8)gAudioCtx.seqPlayers[SEQ_PLAYER_FANFARE].seqScriptIO[0] == (u8)SEQ_IO_VAL_NONE)) {
+ gAudioCtx.seqPlayers[SEQ_PLAYER_FANFARE].seqData = sCustomSequenceScript;
sRequestCustomSequence = false;
}
}
@@ -3409,8 +3409,7 @@ void AudioOcarina_SetCustomSequence(void) {
// Called by unused function
void AudioOcarina_PlayCustomSequence(void) {
sRequestCustomSequence = true;
- Audio_QueueSeqCmd(0x00000000 | ((u32)(SEQ_PLAYER_FANFARE) << 24) | ((u32)(0) << 0x10) |
- (u32)(NA_BGM_DUNGEON_APPEAR));
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_FANFARE, 0, NA_BGM_DUNGEON_APPEAR);
}
// Unused
@@ -3588,8 +3587,7 @@ s32 AudioOcarina_CreateCustomSequence(void) {
void AudioOcarina_ResetInstrument(void) {
if (sOcarinaInstrumentId != OCARINA_INSTRUMENT_OFF) {
- Audio_QueueSeqCmd(0x80000000 | ((u32)(SEQ_PLAYER_SFX) << 24) | ((u32)(1) << 16) |
- ((u32)(SFX_CHANNEL_OCARINA) << 8) | (u32)(0));
+ SEQCMD_SET_CHANNEL_IO(SEQ_PLAYER_SFX, SFX_CHANNEL_OCARINA, 1, 0);
sOcarinaInstrumentId = OCARINA_INSTRUMENT_OFF;
AudioOcarina_ResetAndMute();
}
@@ -3631,7 +3629,7 @@ void Audio_Noop3(void) {
}
void Audio_Update(void) {
- if ((func_801A9768() == 0) && (func_801A982C() == 0)) {
+ if ((AudioSeq_UpdateAudioHeapReset() == 0) && !AudioSeq_ResetReverb()) {
AudioOcarina_SetCustomSequence();
AudioOcarina_Update();
func_801A5118();
@@ -3648,9 +3646,9 @@ void Audio_Update(void) {
func_801A1290();
Audio_ResetRequestedSceneSeqId();
AudioSfx_ProcessRequests();
- func_801A89D0();
+ AudioSeq_ProcessSeqCmds();
AudioSfx_ProcessActiveSfx();
- func_801A8D5C();
+ AudioSeq_UpdateActiveSequences();
AudioSfx_ProcessSfxSettings();
AudioThread_ScheduleProcessCmds();
}
@@ -3662,7 +3660,14 @@ void Audio_Noop4(s32 arg0) {
void Audio_Noop5(s32 arg0, s32 arg1) {
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_8019E110.s")
+/**
+ * Queues a bgm sequence directly to the internal audio queue system.
+ * Skips the external audio command process
+ * Unused
+ */
+void Audio_PlayMainBgm(s8 seqId) {
+ AUDIOCMD_GLOBAL_INIT_SEQPLAYER(SEQ_PLAYER_BGM_MAIN, (u8)seqId, 1);
+}
f32 AudioSfx_ComputeVolume(u8 bankId, u8 entryIndex) {
SfxBankEntry* bankEntry = &gSfxBanks[bankId][entryIndex];
@@ -3753,9 +3758,9 @@ s8 AudioSfx_ComputeReverb(u8 bankId, u8 entryIndex, u8 channelIndex) {
}
}
- if (IS_SEQUENCE_CHANNEL_VALID(gAudioContext.seqPlayers[SEQ_PLAYER_SFX].channels[channelIndex])) {
- scriptAdd = gAudioContext.seqPlayers[SEQ_PLAYER_SFX].channels[channelIndex]->soundScriptIO[1];
- if (gAudioContext.seqPlayers[SEQ_PLAYER_SFX].channels[channelIndex]->soundScriptIO[1] <= SEQ_IO_VAL_NONE) {
+ if (IS_SEQUENCE_CHANNEL_VALID(gAudioCtx.seqPlayers[SEQ_PLAYER_SFX].channels[channelIndex])) {
+ scriptAdd = gAudioCtx.seqPlayers[SEQ_PLAYER_SFX].channels[channelIndex]->seqScriptIO[1];
+ if (gAudioCtx.seqPlayers[SEQ_PLAYER_SFX].channels[channelIndex]->seqScriptIO[1] <= SEQ_IO_VAL_NONE) {
scriptAdd = 0;
}
}
@@ -3815,7 +3820,7 @@ f32 AudioSfx_ComputeFreqScale(u8 bankId, u8 entryIndex) {
f32 freq = 1.0f;
if (entry->sfxParams & SFX_PARAM_RAND_FREQ_LOWER) {
- freq = 1.0f - ((gAudioContext.audioRandom & 0xF) / 192.0f);
+ freq = 1.0f - ((gAudioCtx.audioRandom & 0xF) / 192.0f);
}
switch (bankId) {
@@ -3850,7 +3855,7 @@ f32 AudioSfx_ComputeFreqScale(u8 bankId, u8 entryIndex) {
}
if ((applyRandScaling == true) && !(entry->sfxParams & SFX_PARAM_RAND_FREQ_SCALE)) {
- freq *= 1.0293 - ((gAudioContext.audioRandom & 0xF) / 144.0f);
+ freq *= 1.0293 - ((gAudioCtx.audioRandom & 0xF) / 144.0f);
}
dist = entry->dist;
@@ -4051,8 +4056,8 @@ void AudioSfx_SetProperties(u8 bankId, u8 entryIndex, u8 channelIndex) {
//! FAKE:
if (1) {}
- // CHAN_UPD_SCRIPT_IO (slot 2, sets volume)
- AudioThread_QueueCmdS8((0x6 << 24) | (SEQ_PLAYER_SFX << 16) | (channelIndex << 8) | 2, volumeS8);
+ // ioPort 2, sets volume
+ AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, channelIndex, 2, volumeS8);
if (sSfxChannelState[channelIndex].reverb != reverb) {
sSfxChannelState[channelIndex].reverb = reverb;
@@ -4292,13 +4297,23 @@ f32 sBigBellsVolume[8] = {
};
#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A0124.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A0184.s")
+void Audio_SetBgmVolumeOff(void) {
+ AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_FANFARE, 0, 10);
+ AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_SUB, VOL_SCALE_INDEX_FANFARE, 0, 10);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A01C4.s")
+void Audio_SetBgmVolumeOn(void) {
+ AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_FANFARE, 0x7F, 3);
+ AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_SUB, VOL_SCALE_INDEX_FANFARE, 0x7F, 3);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A0204.s")
+void func_801A0204(s8 seqId) {
+ AUDIOCMD_SEQPLAYER_SET_IO(SEQ_PLAYER_BGM_MAIN, 2, (u8)seqId);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A0238.s")
+void Audio_SetMainBgmVolume(u8 targetVolume, u8 volumeFadeTimer) {
+ AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_BGM_MAIN, targetVolume, volumeFadeTimer);
+}
/**
* Unused remnant from OoT's EnRiverSound
@@ -4307,16 +4322,16 @@ f32 sBigBellsVolume[8] = {
*/
void Audio_SetGanonsTowerBgmVolumeLevel(u8 ganonsTowerLevel) {
u8 channelIndex;
- s8 pan = 0;
+ s8 panChannelWeight = 0;
// Ganondorfs's Lair
if (ganonsTowerLevel == 0) {
- pan = 0x7F;
+ // Pan comes entirely from the SequenceChannel
+ panChannelWeight = 0x7F;
}
- for (channelIndex = 0; channelIndex < 16; channelIndex++) {
- // CHAN_UPD_PAN_UNSIGNED
- AudioThread_QueueCmdS8(((u8)(u32)channelIndex << 8) | 0x7000000, pan);
+ for (channelIndex = 0; channelIndex < SEQ_NUM_CHANNELS; channelIndex++) {
+ AUDIOCMD_CHANNEL_SET_PAN_WEIGHT(SEQ_PLAYER_BGM_MAIN, channelIndex, panChannelWeight);
}
// Lowest room in Ganon's Tower (Entrance Room)
@@ -4340,7 +4355,7 @@ s32 Audio_SetGanonsTowerBgmVolume(u8 targetVolume) {
if (sGanonsTowerVol != targetVolume) {
// Sets the volume
- Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, 0, targetVolume, 2);
+ AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_BGM_MAIN, targetVolume, 2);
// Sets the filter cutoff of the form (lowPassFilterCutoff << 4) | (highPassFilter & 0xF). highPassFilter is
// always set to 0
@@ -4352,31 +4367,26 @@ s32 Audio_SetGanonsTowerBgmVolume(u8 targetVolume) {
lowPassFilterCutoff = (((targetVolume - 0x40) >> 2) + 1) << 4;
}
- Audio_QueueSeqCmd((8 << 28) | ((u8)(SEQ_PLAYER_BGM_MAIN) << 24) | ((u8)(4) << 16) | ((u8)(15) << 8) |
- (u8)(lowPassFilterCutoff));
+ SEQCMD_SET_CHANNEL_IO(SEQ_PLAYER_BGM_MAIN, 15, 4, lowPassFilterCutoff);
// Sets the reverb
- for (channelIndex = 0; channelIndex < ARRAY_COUNT(gAudioContext.seqPlayers[SEQ_PLAYER_BGM_MAIN].channels);
+ for (channelIndex = 0; channelIndex < ARRAY_COUNT(gAudioCtx.seqPlayers[SEQ_PLAYER_BGM_MAIN].channels);
channelIndex++) {
- if (&gAudioContext.sequenceChannelNone !=
- gAudioContext.seqPlayers[SEQ_PLAYER_BGM_MAIN].channels[channelIndex]) {
- // soundScriptIO[5] was set to 0x40 in channels 0, 1, and 4 (BGM no longer in OoT)
- if ((u8)gAudioContext.seqPlayers[SEQ_PLAYER_BGM_MAIN].channels[channelIndex]->soundScriptIO[5] !=
+ if (&gAudioCtx.sequenceChannelNone != gAudioCtx.seqPlayers[SEQ_PLAYER_BGM_MAIN].channels[channelIndex]) {
+ // seqScriptIO[5] was originally set to 0x40 in channels 0, 1, and 4 by OoT's Ganon's Tower BGM,
+ // which was removed in MM
+ if ((u8)gAudioCtx.seqPlayers[SEQ_PLAYER_BGM_MAIN].channels[channelIndex]->seqScriptIO[5] !=
(u8)SEQ_IO_VAL_NONE) {
// Higher volume leads to lower reverb
- reverb =
- (((u16)gAudioContext.seqPlayers[SEQ_PLAYER_BGM_MAIN].channels[channelIndex]->soundScriptIO[5] -
- targetVolume) +
- 0x7F);
+ reverb = (((u16)gAudioCtx.seqPlayers[SEQ_PLAYER_BGM_MAIN].channels[channelIndex]->seqScriptIO[5] -
+ targetVolume) +
+ 0x7F);
if (reverb > 0x7F) {
reverb = 0x7F;
}
- // CHAN_UPD_REVERB
- AudioThread_QueueCmdS8(_SHIFTL(5, 24, 8) | _SHIFTL(SEQ_PLAYER_BGM_MAIN, 16, 8) |
- _SHIFTL(channelIndex, 8, 8),
- (u8)reverb);
+ AUDIOCMD_CHANNEL_SET_REVERB_VOLUME(SEQ_PLAYER_BGM_MAIN, channelIndex, (u8)reverb);
}
}
}
@@ -4405,14 +4415,14 @@ void Audio_UpdateRiverSoundVolumes(void) {
if (sRiverSoundMainBgmLower == true) {
if (sRiverSoundMainBgmCurrentVol != sRiverSoundMainBgmVol) {
// lowers the volume for 1 frame
- Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, 0, sRiverSoundMainBgmVol, 10);
+ AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_BGM_MAIN, sRiverSoundMainBgmVol, 10);
sRiverSoundMainBgmCurrentVol = sRiverSoundMainBgmVol;
sRiverSoundMainBgmRestore = true;
}
sRiverSoundMainBgmLower = false;
} else if ((sRiverSoundMainBgmRestore == true) && !sAudioIsWindowOpen) {
// restores the volume every frame
- Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, 0, 0x7F, 10);
+ AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_BGM_MAIN, 0x7F, 10);
sRiverSoundMainBgmCurrentVol = 0x7F;
sRiverSoundMainBgmRestore = false;
}
@@ -4447,9 +4457,7 @@ void AudioSfx_SetChannelIO(Vec3f* pos, u16 sfxId, u8 ioData) {
if (entryIndex != 0xFF) {
if ((sfxId == gSfxBanks[bankId][entryIndex].sfxId) && (&pos->x == gSfxBanks[bankId][entryIndex].posX)) {
- AudioThread_QueueCmdS8(_SHIFTL(6, 24, 8) | _SHIFTL(SEQ_PLAYER_SFX, 16, 8) |
- _SHIFTL(channelIndex, 8, 8) | _SHIFTL(6, 0, 8),
- ioData);
+ AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, channelIndex, 6, ioData);
}
}
channelIndex++;
@@ -4496,11 +4504,10 @@ void func_801A09D4(Vec3f* pos, f32 xzDistToPlayer) {
volumeRel = ((1.0f - ((sRiverSoundXZDistToPlayer - 120.0f) / 280.0f)) * 0.9f) + 0.1f;
}
- for (channelIndex = 0; channelIndex < 16; channelIndex++) {
+ for (channelIndex = 0; channelIndex < SEQ_NUM_CHANNELS; channelIndex++) {
if (channelIndex != 9) {
- Audio_QueueSeqCmd(((u32)(6) << 28) | ((u32)(SEQ_PLAYER_BGM_MAIN) << 24) | ((u32)(2) << 16) |
- ((u32)(channelIndex) << 8) | ((u8)(127.0f * volumeRel)));
- AudioThread_QueueCmdS8(0x03000000 | ((u8)((u32)channelIndex) << 8), pan);
+ SEQCMD_SET_CHANNEL_VOLUME(SEQ_PLAYER_BGM_MAIN, channelIndex, 2, (u8)(127.0f * volumeRel));
+ AUDIOCMD_CHANNEL_SET_PAN(SEQ_PLAYER_BGM_MAIN, channelIndex, pan);
}
}
}
@@ -4535,8 +4542,8 @@ void Audio_SplitBgmChannels(s8 volumeSplit) {
u8 i;
u8 channelIndex;
- if ((Audio_GetActiveSequence(SEQ_PLAYER_FANFARE) == NA_BGM_DISABLED) &&
- (Audio_GetActiveSequence(SEQ_PLAYER_BGM_SUB) != NA_BGM_ROMANI_RANCH)) {
+ if ((AudioSeq_GetActiveSeqId(SEQ_PLAYER_FANFARE) == NA_BGM_DISABLED) &&
+ (AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_SUB) != NA_BGM_ROMANI_RANCH)) {
for (i = 0; i < ARRAY_COUNT(sBgmPlayers); i++) {
if (i == 0) {
// Main Bgm SeqPlayer
@@ -4556,7 +4563,7 @@ void Audio_SplitBgmChannels(s8 volumeSplit) {
channelBits = 0;
for (channelIndex = 0; channelIndex < SEQ_NUM_CHANNELS; channelIndex++) {
- if (gAudioContext.seqPlayers[sBgmPlayers[i]].channels[channelIndex]->notePriority < notePriority) {
+ if (gAudioCtx.seqPlayers[sBgmPlayers[i]].channels[channelIndex]->notePriority < notePriority) {
// If the note currently playing in the channel is a high enough priority,
// then keep the channel on by setting a channelBit
// If this condition fails, then the channel will be shut off
@@ -4564,7 +4571,7 @@ void Audio_SplitBgmChannels(s8 volumeSplit) {
}
}
- Audio_QueueSeqCmd(0xA0000000 | ((u32)(sBgmPlayers[i]) << 24) | ((u32)(channelBits)));
+ SEQCMD_SET_CHANNEL_DISABLE_MASK(sBgmPlayers[i], channelBits);
}
}
}
@@ -4643,8 +4650,8 @@ void Audio_PlaySariaBgm(Vec3f* pos, u16 seqId, u16 distMax) {
Audio_SplitBgmChannels(targetVolume);
}
- Audio_SetVolumeScale(SEQ_PLAYER_BGM_SUB, 3, targetVolume, 0);
- Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, 3, 0x7F - targetVolume, 0);
+ AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_SUB, VOL_SCALE_INDEX_BGM_SUB, targetVolume, 0);
+ AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_BGM_SUB, 0x7F - targetVolume, 0);
}
/**
@@ -4658,12 +4665,12 @@ void Audio_ClearSariaBgm2(void) {
void Audio_PlayMorningSceneSequence(u16 seqId, u8 dayMinusOne) {
Audio_StartMorningSceneSequence(seqId);
- Audio_QueueSeqCmd(0x70000000 | ((u32)(SEQ_PLAYER_BGM_MAIN) << 24) | ((u32)(4) << 0x10) | (u32)(dayMinusOne));
+ SEQCMD_SET_SEQPLAYER_IO(SEQ_PLAYER_BGM_MAIN, 4, dayMinusOne);
}
void Audio_StartMorningSceneSequence(u16 seqId) {
if (seqId != NA_BGM_AMBIENCE) {
- Audio_QueueSeqCmd(0x100000FF | ((u8)(SEQ_PLAYER_AMBIENCE) << 24) | ((0) << 16));
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_AMBIENCE, 0);
Audio_StartSceneSequence(seqId);
Audio_PlaySequenceWithSeqPlayerIO(SEQ_PLAYER_BGM_MAIN, seqId, 0, 0, 1);
} else {
@@ -4677,8 +4684,7 @@ void Audio_PlaySceneSequence(u16 seqId, u8 dayMinusOne) {
Audio_PlayAmbience(AMBIENCE_ID_08);
} else if ((seqId != NA_BGM_FINAL_HOURS) || (sPrevMainBgmSeqId == NA_BGM_DISABLED)) {
Audio_StartSceneSequence(seqId);
- Audio_QueueSeqCmd(0x70000000 | ((u32)(SEQ_PLAYER_BGM_MAIN) << 24) | ((u32)(4) << 0x10) |
- (u32)(dayMinusOne));
+ SEQCMD_SET_SEQPLAYER_IO(SEQ_PLAYER_BGM_MAIN, 4, dayMinusOne);
}
sRequestedSceneSeqId = seqId;
}
@@ -4718,12 +4724,12 @@ void Audio_StartSceneSequence(u16 seqId) {
}
void Audio_UpdateSceneSequenceResumePoint(void) {
- u16 seqId = Audio_GetActiveSequence(SEQ_PLAYER_BGM_MAIN);
+ u16 seqId = AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN);
if ((seqId != NA_BGM_DISABLED) && (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_RESUME)) {
if (sSeqResumePoint != SEQ_RESUME_POINT_NONE) {
// Get the current point to resume from
- sSeqResumePoint = gAudioContext.seqPlayers[SEQ_PLAYER_BGM_MAIN].soundScriptIO[3];
+ sSeqResumePoint = gAudioCtx.seqPlayers[SEQ_PLAYER_BGM_MAIN].seqScriptIO[3];
} else {
// Initialize the point to resume from to the start of the sequence
sSeqResumePoint = 0;
@@ -4731,55 +4737,95 @@ void Audio_UpdateSceneSequenceResumePoint(void) {
}
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A27E8.s")
+// Unused
+void Audio_PlayBgmForSongOfStorms(void) {
+ if (AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_SONG_OF_STORMS) {
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_SONG_OF_STORMS | SEQ_FLAG_ASYNC);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A281C.s")
+/**
+ * Specifically for SEQ_PLAYER_BGM_MAIN
+ */
+void Audio_ScaleTempoAndFreqForMainBgm(f32 freqTempoScale, u8 duration) {
+ if (freqTempoScale == 1.0f) {
+ SEQCMD_RESET_TEMPO(SEQ_PLAYER_BGM_MAIN, duration);
+ } else {
+ SEQCMD_SCALE_TEMPO(SEQ_PLAYER_BGM_MAIN, duration, freqTempoScale * 100.0f);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A29D4.s")
+ SEQCMD_SET_SEQPLAYER_FREQ(SEQ_PLAYER_BGM_MAIN, duration, freqTempoScale * 1000.0f);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A2BB8.s")
+void Audio_SetSeqTempoAndFreq(u8 seqPlayerIndex, f32 freqTempoScale, u8 duration) {
+ if (freqTempoScale == 1.0f) {
+ SEQCMD_RESET_TEMPO(seqPlayerIndex, duration);
+ } else {
+ SEQCMD_SCALE_TEMPO(seqPlayerIndex, duration, freqTempoScale * 100.0f);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A2C20.s")
+ SEQCMD_SET_SEQPLAYER_FREQ(seqPlayerIndex, duration, freqTempoScale * 1000.0f);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A2C44.s")
+void Audio_PlaySubBgm(u16 seqId) {
+ AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_SUB, VOL_SCALE_INDEX_BGM_SUB, 0x7F, 0);
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_SUB, 0, seqId);
+ AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_BGM_SUB, 0, 5);
+
+ SEQCMD_SETUP_RESTORE_SEQPLAYER_VOLUME_WITH_SCALE_INDEX(SEQ_PLAYER_BGM_SUB, SEQ_PLAYER_BGM_MAIN, 3, 10);
+ SEQCMD_SETUP_SET_CHANNEL_DISABLE_MASK(SEQ_PLAYER_BGM_SUB, SEQ_PLAYER_BGM_MAIN, 0);
+}
+
+void Audio_StopSubBgm(void) {
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_SUB, 0);
+}
+
+// Unused remnant of OoT
+void Audio_IncreaseTempoForTimedMinigame(void) {
+ if ((AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) == NA_BGM_TIMED_MINI_GAME) &&
+ AudioSeq_IsSeqCmdNotQueued(SEQCMD_OP_PLAY_SEQUENCE << 28, SEQCMD_OP_MASK)) {
+ // Set tempo to be higher than the default tempo for th timed mini-game sequence
+ SEQCMD_SET_TEMPO(SEQ_PLAYER_BGM_MAIN, 5, 210);
+ }
+}
void Audio_PlaySequenceInCutscene(u16 seqId) {
if (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_FANFARE) {
Audio_PlayFanfare(seqId);
} else if (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_FANFARE_KAMARO) {
- Audio_QueueSeqCmd(0x00000000 | ((u32)(SEQ_PLAYER_FANFARE) << 24) | ((u32)(0) << 0x10) | (u32)(seqId));
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_FANFARE, 0, seqId);
} else if (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_NO_AMBIENCE) {
- Audio_QueueSeqCmd(0x00000000 | ((u32)(SEQ_PLAYER_BGM_SUB) << 24) | ((u32)(0) << 0x10) | (u32)(seqId));
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_SUB, 0, seqId);
} else {
Audio_PlaySequenceWithSeqPlayerIO(SEQ_PLAYER_BGM_MAIN, seqId, 0, 7, SEQ_IO_VAL_NONE);
- Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, 1, 0x7F, 0);
- Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, 3, 0x7F, 0);
- Audio_QueueSeqCmd(0x100000FF | ((u8)(SEQ_PLAYER_FANFARE) << 24) | ((0) << 16));
+ AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_FANFARE, 0x7F, 0);
+ AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_BGM_SUB, 0x7F, 0);
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 0);
}
}
void Audio_StopSequenceInCutscene(u16 seqId) {
if (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_FANFARE) {
- Audio_QueueSeqCmd(0x100000FF | ((u8)(SEQ_PLAYER_FANFARE) << 24) | ((0) << 16));
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 0);
} else if (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_FANFARE_KAMARO) {
- Audio_QueueSeqCmd(0x100000FF | ((u8)(SEQ_PLAYER_FANFARE) << 24) | ((0) << 16));
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 0);
} else if (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_NO_AMBIENCE) {
- Audio_QueueSeqCmd(0x100000FF | ((u8)(SEQ_PLAYER_BGM_SUB) << 24) | ((0) << 16));
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_SUB, 0);
} else {
- Audio_QueueSeqCmd(0x100000FF | ((u8)(SEQ_PLAYER_BGM_MAIN) << 24) | ((0) << 16));
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0);
}
}
s32 Audio_IsSequencePlaying(u8 seqId) {
- u8 playerIndex = SEQ_PLAYER_BGM_MAIN;
+ u8 seqPlayerIndex = SEQ_PLAYER_BGM_MAIN;
if (sSeqFlags[seqId & 0xFF] & SEQ_FLAG_FANFARE) {
- playerIndex = SEQ_PLAYER_FANFARE;
+ seqPlayerIndex = SEQ_PLAYER_FANFARE;
} else if (sSeqFlags[seqId & 0xFF] & SEQ_FLAG_FANFARE_KAMARO) {
- playerIndex = SEQ_PLAYER_FANFARE;
+ seqPlayerIndex = SEQ_PLAYER_FANFARE;
}
- if (seqId == (Audio_GetActiveSequence(playerIndex) & 0xFF)) {
+ if (seqId == (AudioSeq_GetActiveSeqId(seqPlayerIndex) & 0xFF)) {
return true;
} else {
return false;
@@ -4787,7 +4833,7 @@ s32 Audio_IsSequencePlaying(u8 seqId) {
}
void Audio_PlayBgm_StorePrevBgm(u16 seqId) {
- u16 curSeqId = Audio_GetActiveSequence(SEQ_PLAYER_BGM_MAIN);
+ u16 curSeqId = AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN);
if (curSeqId == NA_BGM_DISABLED) {
curSeqId = NA_BGM_GENERAL_SFX;
@@ -4801,7 +4847,7 @@ void Audio_PlayBgm_StorePrevBgm(u16 seqId) {
sPrevMainBgmSeqId = curSeqId;
}
- Audio_QueueSeqCmd(0x00000000 | ((u32)(SEQ_PLAYER_BGM_MAIN) << 24) | ((u32)(0) << 0x10) | (u32)(seqId + 0x8000));
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, seqId + SEQ_FLAG_ASYNC);
}
}
@@ -4809,16 +4855,15 @@ void Audio_PlayBgm_StorePrevBgm(u16 seqId) {
* To be used in conjunction with Audio_PlayBgm_StorePrevBgm
*/
void Audio_RestorePrevBgm(void) {
- if ((Audio_GetActiveSequence(SEQ_PLAYER_BGM_MAIN) != NA_BGM_DISABLED) &&
- (sSeqFlags[Audio_GetActiveSequence(SEQ_PLAYER_BGM_MAIN) & 0xFF] & SEQ_FLAG_RESTORE)) {
+ if ((AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_DISABLED) &&
+ (sSeqFlags[AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) & 0xFF] & SEQ_FLAG_RESTORE)) {
if ((sPrevMainBgmSeqId == NA_BGM_DISABLED) || (sPrevMainBgmSeqId == NA_BGM_GENERAL_SFX)) {
- Audio_QueueSeqCmd(0x100000FF | ((u8)(SEQ_PLAYER_BGM_MAIN) << 24) | ((0) << 16));
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0);
} else {
if (sPrevMainBgmSeqId == NA_BGM_AMBIENCE) {
sPrevMainBgmSeqId = sPrevAmbienceSeqId;
}
- Audio_QueueSeqCmd(0x00000000 | ((u32)(SEQ_PLAYER_BGM_MAIN) << 24) | ((u32)(0) << 0x10) |
- (u32)(sPrevMainBgmSeqId + 0x8000));
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, sPrevMainBgmSeqId + SEQ_FLAG_ASYNC);
}
sPrevMainBgmSeqId = NA_BGM_DISABLED;
}
@@ -4826,7 +4871,7 @@ void Audio_RestorePrevBgm(void) {
// Unused
void Audio_PlayAmbience_StorePrevBgm(u8 ambienceId) {
- u16 seqId = Audio_GetActiveSequence(SEQ_PLAYER_BGM_MAIN);
+ u16 seqId = AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN);
if (seqId != NA_BGM_AMBIENCE) {
sPrevMainBgmSeqId = seqId;
@@ -4838,8 +4883,7 @@ void Audio_PlayAmbience_StorePrevBgm(u8 ambienceId) {
// Unused
void Audio_ForceRestorePreviousBgm(void) {
if (sPrevMainBgmSeqId != NA_BGM_DISABLED) {
- Audio_QueueSeqCmd(0x00000000 | ((u32)(SEQ_PLAYER_BGM_MAIN) << 24) | ((u32)(0) << 0x10) |
- (u32)(sPrevMainBgmSeqId + 0x8000));
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, sPrevMainBgmSeqId + SEQ_FLAG_ASYNC);
}
sPrevMainBgmSeqId = NA_BGM_DISABLED;
@@ -4855,16 +4899,16 @@ void Audio_ForceRestorePreviousBgm(void) {
#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A31EC.s")
-void Audio_PlaySequenceWithSeqPlayerIO(s8 playerIndex, u16 seqId, u8 fadeInDuration, s8 ioPort, u8 ioData) {
+void Audio_PlaySequenceWithSeqPlayerIO(s8 seqPlayerIndex, u16 seqId, u8 fadeInDuration, s8 ioPort, u8 ioData) {
u16 flaggedSeqId;
- Audio_QueueSeqCmd(0x70000000 | ((u32)(playerIndex) << 24) | ((u32)(ioPort) << 0x10) | (u32)(ioData));
+ SEQCMD_SET_SEQPLAYER_IO(seqPlayerIndex, ioPort, ioData);
if ((seqId & 0xFF) < 2) {
flaggedSeqId = seqId;
} else {
flaggedSeqId = seqId | 0x8000;
}
- Audio_QueueSeqCmd(0x00000000 | ((u32)(playerIndex) << 24) | ((u32)(fadeInDuration) << 0x10) | (u32)(flaggedSeqId));
+ SEQCMD_PLAY_SEQUENCE((u32)seqPlayerIndex, fadeInDuration, flaggedSeqId);
}
void Audio_SetSequenceMode(u8 seqMode) {
@@ -4892,17 +4936,18 @@ void Audio_SetSequenceMode(u8 seqMode) {
volumeFadeInTimer = gActiveSeqs[SEQ_PLAYER_BGM_SUB].volScales[1] - sBgmEnemyVolume;
}
- Audio_SetVolumeScale(SEQ_PLAYER_BGM_SUB, 3, sBgmEnemyVolume, volumeFadeInTimer);
- Audio_QueueSeqCmd(0x00000000 | ((u32)(SEQ_PLAYER_BGM_SUB) << 24) | ((u32)(10) << 0x10) |
- (u32)(NA_BGM_ENEMY | 0x800));
+ AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_SUB, VOL_SCALE_INDEX_BGM_SUB, sBgmEnemyVolume,
+ volumeFadeInTimer);
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_SUB, 10, NA_BGM_ENEMY | 0x800);
if (seqId >= NA_BGM_TERMINA_FIELD) {
- Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, 3, 0x7F - sBgmEnemyVolume, 10);
+ AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_BGM_SUB, 0x7F - sBgmEnemyVolume,
+ 10);
Audio_SplitBgmChannels(sBgmEnemyVolume);
}
} else if ((sPrevSeqMode & 0x7F) == SEQ_MODE_ENEMY) {
// If only sPrevSeqMode = SEQ_MODE_ENEMY (End)
- Audio_QueueSeqCmd(0x100000FF | ((u8)(SEQ_PLAYER_BGM_SUB) << 24) | ((10) << 16));
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_SUB, 10);
if (seqMode == SEQ_MODE_IGNORE) {
volumeFadeOutTimer = 0;
@@ -4910,7 +4955,7 @@ void Audio_SetSequenceMode(u8 seqMode) {
volumeFadeOutTimer = 10;
}
- Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, 3, 0x7F, volumeFadeOutTimer);
+ AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_BGM_SUB, 0x7F, volumeFadeOutTimer);
Audio_SplitBgmChannels(0);
}
@@ -4918,10 +4963,9 @@ void Audio_SetSequenceMode(u8 seqMode) {
} else {
if (seqMode == SEQ_MODE_ENEMY) {
// If both seqMode = sPrevSeqMode = SEQ_MODE_ENEMY
- if ((Audio_GetActiveSequence(SEQ_PLAYER_BGM_SUB) == NA_BGM_DISABLED) &&
+ if ((AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_SUB) == NA_BGM_DISABLED) &&
(seqId != NA_BGM_DISABLED) && (sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_ENEMY)) {
- Audio_QueueSeqCmd(0x00000000 | ((u32)(SEQ_PLAYER_BGM_SUB) << 24) | ((u32)(10) << 0x10) |
- (u32)(NA_BGM_ENEMY | 0x800));
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_SUB, 10, NA_BGM_ENEMY | 0x800);
sPrevSeqMode = seqMode + 0x80;
}
}
@@ -4943,7 +4987,7 @@ void Audio_SetSequenceMode(u8 seqMode) {
}
sPrevSeqMode = seqMode;
- Audio_QueueSeqCmd(0x70000000 | ((u32)(SEQ_PLAYER_BGM_MAIN) << 24) | ((u32)(2) << 0x10) | (u32)(seqMode));
+ SEQCMD_SET_SEQPLAYER_IO(SEQ_PLAYER_BGM_MAIN, 2, seqMode);
}
}
}
@@ -4964,10 +5008,10 @@ void Audio_UpdateEnemyBgmVolume(f32 dist) {
}
sBgmEnemyVolume = ((350.0f - adjDist) * 127.0f) / 350.0f;
- Audio_SetVolumeScale(SEQ_PLAYER_BGM_SUB, 3, sBgmEnemyVolume, 10);
+ AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_SUB, VOL_SCALE_INDEX_BGM_SUB, sBgmEnemyVolume, 10);
if ((seqId >= NA_BGM_TERMINA_FIELD) && !(sSeqFlags[seqId & 0xFF & 0xFF] & SEQ_FLAG_FANFARE_KAMARO)) {
- Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, 3, (0x7F - sBgmEnemyVolume), 10);
+ AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_BGM_SUB, (0x7F - sBgmEnemyVolume), 10);
}
}
@@ -5040,7 +5084,8 @@ void Audio_ResetRequestedSceneSeqId(void) {
sRequestedSceneSeqId = NA_BGM_DISABLED;
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A44D4.s")
+void Audio_ResetData(void);
+#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/Audio_ResetData.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A46F8.s")
@@ -5054,13 +5099,15 @@ void Audio_SetAmbienceChannelIO(u8 channelIndexRange, u8 ioPort, u8 ioData) {
u8 lastChannelIndex;
u8 channelIndex;
- if ((gActiveSeqs[SEQ_PLAYER_AMBIENCE].seqId != NA_BGM_AMBIENCE) && func_801A8ABC(NA_BGM_AMBIENCE, 0xF00000FF)) {
+ if ((gActiveSeqs[SEQ_PLAYER_AMBIENCE].seqId != NA_BGM_AMBIENCE) &&
+ AudioSeq_IsSeqCmdNotQueued((SEQCMD_OP_PLAY_SEQUENCE << 28) | NA_BGM_AMBIENCE,
+ SEQCMD_OP_MASK | SEQCMD_SEQID_MASK)) {
return;
}
// channelIndexRange = 01 on ioPort 1
if ((((channelIndexRange << 8) + (u32)ioPort) == ((1 << 8) | (u32)1)) &&
- (Audio_GetActiveSequence(SEQ_PLAYER_BGM_SUB) != NA_BGM_ROMANI_RANCH)) {
+ (AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_SUB) != NA_BGM_ROMANI_RANCH)) {
D_801FD3A8 = 0;
}
@@ -5072,38 +5119,33 @@ void Audio_SetAmbienceChannelIO(u8 channelIndexRange, u8 ioPort, u8 ioData) {
}
for (channelIndex = firstChannelIndex; channelIndex <= lastChannelIndex; channelIndex++) {
- Audio_QueueSeqCmd(0x80000000 | ((u32)(SEQ_PLAYER_AMBIENCE) << 24) | ((u32)(ioPort) << 16) |
- ((u32)(channelIndex) << 8) | (u32)(ioData));
+ SEQCMD_SET_CHANNEL_IO(SEQ_PLAYER_AMBIENCE, channelIndex, ioPort, ioData);
}
}
void Audio_StartAmbience(u16 initChannelMask, u16 initMuteChannelMask) {
u8 channelIndex;
- Audio_QueueSeqCmd(0x70000000 | ((u32)(SEQ_PLAYER_AMBIENCE) << 24) | ((u32)(SEQ_PLAYER_IO_PORT_0) << 0x10) |
- (u32)(1));
- Audio_QueueSeqCmd(0x70000000 | ((u32)(SEQ_PLAYER_AMBIENCE) << 24) | ((u32)(SEQ_PLAYER_IO_PORT_4) << 0x10) |
- (u32)((u8)(initChannelMask >> 8)));
- Audio_QueueSeqCmd(0x70000000 | ((u32)(SEQ_PLAYER_AMBIENCE) << 24) | ((u32)(SEQ_PLAYER_IO_PORT_5) << 0x10) |
- (u32)((u8)(initChannelMask & 0xFF)));
- Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, 0, 0x7F, 1);
+ SEQCMD_SET_SEQPLAYER_IO(SEQ_PLAYER_AMBIENCE, SEQ_PLAYER_IO_PORT_0, 1);
+ SEQCMD_SET_SEQPLAYER_IO(SEQ_PLAYER_AMBIENCE, SEQ_PLAYER_IO_PORT_4, (u8)(initChannelMask >> 8));
+ SEQCMD_SET_SEQPLAYER_IO(SEQ_PLAYER_AMBIENCE, SEQ_PLAYER_IO_PORT_5, (u8)(initChannelMask & 0xFF));
+ AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_BGM_MAIN, 0x7F, 1);
- if ((Audio_GetActiveSequence(SEQ_PLAYER_AMBIENCE) != NA_BGM_DISABLED) &&
- (Audio_GetActiveSequence(SEQ_PLAYER_AMBIENCE) != NA_BGM_AMBIENCE)) {
- Audio_StopSequence(SEQ_PLAYER_AMBIENCE, 0);
- AudioThread_QueueCmdS32(0xF8 << 24, 0);
+ if ((AudioSeq_GetActiveSeqId(SEQ_PLAYER_AMBIENCE) != NA_BGM_DISABLED) &&
+ (AudioSeq_GetActiveSeqId(SEQ_PLAYER_AMBIENCE) != NA_BGM_AMBIENCE)) {
+ AudioSeq_StopSequence(SEQ_PLAYER_AMBIENCE, 0);
+ AUDIOCMD_GLOBAL_STOP_AUDIOCMDS();
}
- if (Audio_GetActiveSequence(SEQ_PLAYER_BGM_SUB) == (NA_BGM_ENEMY | 0x800)) {
- Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, 3, 0x7F, 1);
+ if (AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_SUB) == (NA_BGM_ENEMY | 0x800)) {
+ AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_BGM_SUB, 0x7F, 1);
}
- Audio_QueueSeqCmd(0x00000000 | ((u32)(SEQ_PLAYER_AMBIENCE) << 24) | ((u32)(0) << 0x10) | (u32)(NA_BGM_AMBIENCE));
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_AMBIENCE, 0, NA_BGM_AMBIENCE);
- for (channelIndex = 0; channelIndex < 16; channelIndex++) {
+ for (channelIndex = 0; channelIndex < SEQ_NUM_CHANNELS; channelIndex++) {
if (!(initMuteChannelMask & (1 << channelIndex)) && (initChannelMask & (1 << channelIndex))) {
- Audio_QueueSeqCmd(0x80000000 | ((u32)(SEQ_PLAYER_AMBIENCE) << 24) | ((u32)(CHANNEL_IO_PORT_1) << 16) |
- ((u32)(channelIndex) << 8) | (u32)(1));
+ SEQCMD_SET_CHANNEL_IO(SEQ_PLAYER_AMBIENCE, channelIndex, CHANNEL_IO_PORT_1, 1);
}
}
}
@@ -5127,25 +5169,23 @@ void Audio_PlayAmbience(u8 ambienceId) {
channelIndex = sAmbienceData[ambienceId].channelProperties[i++];
ioPort = sAmbienceData[ambienceId].channelProperties[i++];
ioData = sAmbienceData[ambienceId].channelProperties[i++];
- Audio_QueueSeqCmd(0x80000000 | ((u32)(SEQ_PLAYER_AMBIENCE) << 24) | ((u32)(ioPort) << 16) |
- ((u32)(channelIndex) << 8) | (u32)(ioData));
+ SEQCMD_SET_CHANNEL_IO(SEQ_PLAYER_AMBIENCE, channelIndex, ioPort, ioData);
}
- Audio_QueueSeqCmd(0x80000000 | ((u32)(SEQ_PLAYER_AMBIENCE) << 24) | ((u32)(CHANNEL_IO_PORT_7) << 16) |
- ((u32)(AMBIENCE_CHANNEL_SOUND_MODE) << 8) | (u32)(sSoundMode));
+ SEQCMD_SET_CHANNEL_IO(SEQ_PLAYER_AMBIENCE, AMBIENCE_CHANNEL_SOUND_MODE, CHANNEL_IO_PORT_7, sSoundMode);
}
}
u32 Audio_SetAmbienceRandomBend(u8 seqScriptValIn, SequenceChannel* channel) {
u32 seqScriptValOut = seqScriptValIn;
- gAudioContext.seqPlayers[SEQ_PLAYER_AMBIENCE].applyBend = true;
+ gAudioCtx.seqPlayers[SEQ_PLAYER_AMBIENCE].applyBend = true;
if ((seqScriptValIn == 0) || (seqScriptValIn == 0xFF)) {
- gAudioContext.seqPlayers[SEQ_PLAYER_AMBIENCE].bend = 1.0f;
+ gAudioCtx.seqPlayers[SEQ_PLAYER_AMBIENCE].bend = 1.0f;
} else {
seqScriptValOut = AudioThread_NextRandom();
- gAudioContext.seqPlayers[SEQ_PLAYER_AMBIENCE].bend = 1.0293 - ((gAudioContext.audioRandom & 0xF) / 144.0f);
+ gAudioCtx.seqPlayers[SEQ_PLAYER_AMBIENCE].bend = 1.0293 - ((gAudioCtx.audioRandom & 0xF) / 144.0f);
return seqScriptValOut;
}
@@ -5163,23 +5203,62 @@ void AudioSfx_Init(u16 fadeTimer) {
u8 channelIndex;
AudioThread_ScheduleProcessCmds();
- Audio_StartSequence(SEQ_PLAYER_SFX, NA_BGM_GENERAL_SFX, 0x70, fadeTimer);
+ AudioSeq_StartSequence(SEQ_PLAYER_SFX, NA_BGM_GENERAL_SFX, 0x70, fadeTimer);
for (channelIndex = 0; channelIndex < ARRAY_COUNT(sSfxChannelState); channelIndex++) {
- AudioThread_QueueCmdS32(0x10 << 24 | SEQ_PLAYER_SFX << 16 | ((u8)(u32)channelIndex << 8),
- &sSfxChannelState[channelIndex]);
+ AUDIOCMD_CHANNEL_SET_SFX_STATE(SEQ_PLAYER_SFX, channelIndex, &sSfxChannelState[channelIndex]);
}
- AudioThread_QueueCmdS32(0xE4000000, AudioSfx_SetFreqAndStereoBits);
- AudioThread_QueueCmdS32(0xE4000001, Audio_SetAmbienceRandomBend);
+ AUDIOCMD_GLOBAL_SET_CUSTOM_FUNCTION(AUDIO_CUSTOM_FUNCTION_SEQ_0, AudioSfx_SetFreqAndStereoBits);
+ AUDIOCMD_GLOBAL_SET_CUSTOM_FUNCTION(AUDIO_CUSTOM_FUNCTION_SEQ_1, Audio_SetAmbienceRandomBend);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A4D00.s")
+void Audio_InitSound(void) {
+ Audio_ResetData();
+ AudioOcarina_ResetStaffs();
+ AudioSfx_ResetSfxChannelState();
+ AudioSeq_ResetActiveSequencesAndVolume();
+ AudioSfx_Reset();
+ AudioVoice_ResetData();
+ AudioSfx_Init(10);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A4D50.s")
+void Audio_ResetForAudioHeapStep3(void) {
+ AudioSfx_Init(1);
+ AUDIOCMD_GLOBAL_UNMUTE(AUDIOCMD_ALL_SEQPLAYERS, true);
+ AudioThread_ScheduleProcessCmds();
+ AUDIOCMD_GLOBAL_STOP_AUDIOCMDS();
+ sIsFinalHoursOrSoaring = false;
+ sObjSoundMainBgmSeqId = NA_BGM_GENERAL_SFX;
+ sMuteOnlySfxAndAmbienceSeq = false;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A4DA4.s")
+void Audio_ResetForAudioHeapStep2(void) {
+ Audio_ResetForAudioHeapStep3();
+ if (gAudioSpecId < ARRAY_COUNT(gReverbSettingsTable)) {
+ AUDIOCMD_GLOBAL_SET_REVERB_DATA(1, REVERB_DATA_TYPE_SETTINGS, &gReverbSettingsTable[gAudioSpecId][1]);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A4DF4.s")
+void Audio_ResetForAudioHeapStep1(s32 specId) {
+ gAudioHeapResetState = AUDIO_HEAP_RESET_STATE_RESETTING;
+ Audio_ResetData();
+ AudioOcarina_ResetStaffs();
+ AudioSfx_ResetSfxChannelState();
+ AudioSeq_ResetActiveSequences();
+ AudioSfx_Reset();
+ func_801A4FD8();
+ if (gAudioSpecId == 0xB) {
+ AudioSfx_MuteBanks((1 << BANK_PLAYER) | (1 << BANK_ITEM) | (1 << BANK_ENV) | (1 << BANK_ENEMY) |
+ (1 << BANK_OCARINA) | (1 << BANK_VOICE));
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8019AF00/func_801A4E64.s")
+void Audio_UnusedReset(void) {
+ AudioSeq_ResetActiveSequences();
+ AUDIOCMD_GLOBAL_UNMUTE(AUDIOCMD_ALL_SEQPLAYERS, true);
+ Audio_ResetData();
+ AudioSfx_ResetSfxChannelState();
+ AudioSfx_Init(1);
+ func_801A4FD8();
+}
diff --git a/src/code/audio/aisetnextbuf.c b/src/audio/lib/aisetnextbuf.c
similarity index 100%
rename from src/code/audio/aisetnextbuf.c
rename to src/audio/lib/aisetnextbuf.c
diff --git a/src/code/audio/audio_data.c b/src/audio/lib/data.c
similarity index 100%
rename from src/code/audio/audio_data.c
rename to src/audio/lib/data.c
diff --git a/src/code/audio/audio_dcache.c b/src/audio/lib/dcache.c
similarity index 100%
rename from src/code/audio/audio_dcache.c
rename to src/audio/lib/dcache.c
diff --git a/src/code/audio/audio_effects.c b/src/audio/lib/effects.c
similarity index 89%
rename from src/code/audio/audio_effects.c
rename to src/audio/lib/effects.c
index bc27a6e22..feddf73ca 100644
--- a/src/code/audio/audio_effects.c
+++ b/src/audio/lib/effects.c
@@ -63,8 +63,8 @@ void AudioEffects_SequencePlayerProcessSound(SequencePlayer* seqPlayer) {
}
seqPlayer->fadeTimer--;
- if ((seqPlayer->fadeTimer == 0) && (seqPlayer->state == SEQPLAYER_STATE_2)) {
- AudioSeq_SequencePlayerDisable(seqPlayer);
+ if ((seqPlayer->fadeTimer == 0) && (seqPlayer->state == SEQPLAYER_STATE_FADE_OUT)) {
+ AudioScript_SequencePlayerDisable(seqPlayer);
return;
}
}
@@ -112,10 +112,10 @@ f32 AudioEffects_GetVibratoFreqScale(VibratoState* vib) {
static f32 activeVibratoFreqScaleSum = 0.0f;
static s32 activeVibratoCount = 0;
f32 pitchChange;
- f32 extent;
- f32 invExtent;
+ f32 depth;
+ f32 invDepth;
f32 result;
- f32 scaledExtent;
+ f32 scaledDepth;
VibratoSubStruct* subVib = vib->vibSubStruct;
if (vib->delay != 0) {
@@ -124,17 +124,17 @@ f32 AudioEffects_GetVibratoFreqScale(VibratoState* vib) {
}
if (subVib != NULL) {
- if (vib->extentChangeTimer) {
- if (vib->extentChangeTimer == 1) {
- vib->extent = (s32)subVib->vibratoExtentTarget;
+ if (vib->depthChangeTimer) {
+ if (vib->depthChangeTimer == 1) {
+ vib->depth = (s32)subVib->vibratoDepthTarget;
} else {
- vib->extent += ((s32)subVib->vibratoExtentTarget - vib->extent) / (s32)vib->extentChangeTimer;
+ vib->depth += ((s32)subVib->vibratoDepthTarget - vib->depth) / (s32)vib->depthChangeTimer;
}
- vib->extentChangeTimer--;
- } else if (subVib->vibratoExtentTarget != (s32)vib->extent) {
- if ((vib->extentChangeTimer = subVib->vibratoExtentChangeDelay) == 0) {
- vib->extent = (s32)subVib->vibratoExtentTarget;
+ vib->depthChangeTimer--;
+ } else if (subVib->vibratoDepthTarget != (s32)vib->depth) {
+ if ((vib->depthChangeTimer = subVib->vibratoDepthChangeDelay) == 0) {
+ vib->depth = (s32)subVib->vibratoDepthTarget;
}
}
@@ -153,17 +153,17 @@ f32 AudioEffects_GetVibratoFreqScale(VibratoState* vib) {
}
}
- if (vib->extent == 0.0f) {
+ if (vib->depth == 0.0f) {
return 1.0f;
}
pitchChange = AudioEffects_GetVibratoPitchChange(vib) + 32768.0f;
- scaledExtent = vib->extent / 4096.0f;
- extent = scaledExtent + 1.0f;
- invExtent = 1.0f / extent;
+ scaledDepth = vib->depth / 4096.0f;
+ depth = scaledDepth + 1.0f;
+ invDepth = 1.0f / depth;
// inverse linear interpolation
- result = 1.0f / ((extent - invExtent) * pitchChange / 65536.0f + invExtent);
+ result = 1.0f / ((depth - invDepth) * pitchChange / 65536.0f + invDepth);
activeVibratoFreqScaleSum += result;
activeVibratoCount++;
@@ -196,10 +196,10 @@ void AudioEffects_NoteVibratoInit(Note* note) {
subVib = vib->vibSubStruct;
- if ((vib->extentChangeTimer = subVib->vibratoExtentChangeDelay) == 0) {
- vib->extent = (s32)subVib->vibratoExtentTarget;
+ if ((vib->depthChangeTimer = subVib->vibratoDepthChangeDelay) == 0) {
+ vib->depth = (s32)subVib->vibratoDepthTarget;
} else {
- vib->extent = (s32)subVib->vibratoExtentStart;
+ vib->depth = (s32)subVib->vibratoDepthStart;
}
if ((vib->rateChangeTimer = subVib->vibratoRateChangeDelay) == 0) {
@@ -268,7 +268,7 @@ f32 AudioEffects_AdsrUpdate(AdsrState* adsr) {
break;
default:
- adsr->delay *= gAudioContext.audioBufferParameters.updatesPerFrameScaled;
+ adsr->delay *= gAudioCtx.audioBufferParameters.updatesPerFrameScaled;
if (adsr->delay == 0) {
adsr->delay = 1;
}
diff --git a/src/code/audio/audio_heap.c b/src/audio/lib/heap.c
similarity index 66%
rename from src/code/audio/audio_heap.c
rename to src/audio/lib/heap.c
index 8412220a3..0a64c0d1b 100644
--- a/src/code/audio/audio_heap.c
+++ b/src/audio/lib/heap.c
@@ -20,7 +20,7 @@ void AudioHeap_InitReverb(s32 reverbIndex, ReverbSettings* settings, s32 isFirst
* i.e. (256.0f * `updatesPerFrameInvScaled`) is just `updatesPerFrameInv`
*/
f32 AudioHeap_CalculateAdsrDecay(f32 scaleInv) {
- return 256.0f * gAudioContext.audioBufferParameters.updatesPerFrameInvScaled / scaleInv;
+ return 256.0f * gAudioCtx.audioBufferParameters.updatesPerFrameInvScaled / scaleInv;
}
/**
@@ -29,45 +29,45 @@ f32 AudioHeap_CalculateAdsrDecay(f32 scaleInv) {
void AudioHeap_InitAdsrDecayTable(void) {
s32 i;
- gAudioContext.adsrDecayTable[255] = AudioHeap_CalculateAdsrDecay(0.25f);
- gAudioContext.adsrDecayTable[254] = AudioHeap_CalculateAdsrDecay(0.33f);
- gAudioContext.adsrDecayTable[253] = AudioHeap_CalculateAdsrDecay(0.5f);
- gAudioContext.adsrDecayTable[252] = AudioHeap_CalculateAdsrDecay(0.66f);
- gAudioContext.adsrDecayTable[251] = AudioHeap_CalculateAdsrDecay(0.75f);
+ gAudioCtx.adsrDecayTable[255] = AudioHeap_CalculateAdsrDecay(0.25f);
+ gAudioCtx.adsrDecayTable[254] = AudioHeap_CalculateAdsrDecay(0.33f);
+ gAudioCtx.adsrDecayTable[253] = AudioHeap_CalculateAdsrDecay(0.5f);
+ gAudioCtx.adsrDecayTable[252] = AudioHeap_CalculateAdsrDecay(0.66f);
+ gAudioCtx.adsrDecayTable[251] = AudioHeap_CalculateAdsrDecay(0.75f);
for (i = 128; i < 251; i++) {
- gAudioContext.adsrDecayTable[i] = AudioHeap_CalculateAdsrDecay(251 - i);
+ gAudioCtx.adsrDecayTable[i] = AudioHeap_CalculateAdsrDecay(251 - i);
}
for (i = 16; i < 128; i++) {
- gAudioContext.adsrDecayTable[i] = AudioHeap_CalculateAdsrDecay(4 * (143 - i));
+ gAudioCtx.adsrDecayTable[i] = AudioHeap_CalculateAdsrDecay(4 * (143 - i));
}
for (i = 1; i < 16; i++) {
- gAudioContext.adsrDecayTable[i] = AudioHeap_CalculateAdsrDecay(60 * (23 - i));
+ gAudioCtx.adsrDecayTable[i] = AudioHeap_CalculateAdsrDecay(60 * (23 - i));
}
- gAudioContext.adsrDecayTable[0] = 0.0f;
+ gAudioCtx.adsrDecayTable[0] = 0.0f;
}
void AudioHeap_ResetLoadStatus(void) {
s32 i;
- for (i = 0; i < ARRAY_COUNT(gAudioContext.fontLoadStatus); i++) {
- if (gAudioContext.fontLoadStatus[i] != LOAD_STATUS_PERMANENT) {
- gAudioContext.fontLoadStatus[i] = LOAD_STATUS_NOT_LOADED;
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.fontLoadStatus); i++) {
+ if (gAudioCtx.fontLoadStatus[i] != LOAD_STATUS_PERMANENT) {
+ gAudioCtx.fontLoadStatus[i] = LOAD_STATUS_NOT_LOADED;
}
}
- for (i = 0; i < ARRAY_COUNT(gAudioContext.sampleFontLoadStatus); i++) {
- if (gAudioContext.sampleFontLoadStatus[i] != LOAD_STATUS_PERMANENT) {
- gAudioContext.sampleFontLoadStatus[i] = LOAD_STATUS_NOT_LOADED;
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.sampleFontLoadStatus); i++) {
+ if (gAudioCtx.sampleFontLoadStatus[i] != LOAD_STATUS_PERMANENT) {
+ gAudioCtx.sampleFontLoadStatus[i] = LOAD_STATUS_NOT_LOADED;
}
}
- for (i = 0; i < ARRAY_COUNT(gAudioContext.seqLoadStatus); i++) {
- if (gAudioContext.seqLoadStatus[i] != LOAD_STATUS_PERMANENT) {
- gAudioContext.seqLoadStatus[i] = LOAD_STATUS_NOT_LOADED;
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.seqLoadStatus); i++) {
+ if (gAudioCtx.seqLoadStatus[i] != LOAD_STATUS_PERMANENT) {
+ gAudioCtx.seqLoadStatus[i] = LOAD_STATUS_NOT_LOADED;
}
}
}
@@ -75,8 +75,8 @@ void AudioHeap_ResetLoadStatus(void) {
void AudioHeap_DiscardFont(s32 fontId) {
s32 i;
- for (i = 0; i < gAudioContext.numNotes; i++) {
- Note* note = &gAudioContext.notes[i];
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ Note* note = &gAudioCtx.notes[i];
if (note->playbackState.fontId == fontId) {
if ((note->playbackState.status == PLAYBACK_STATUS_0) && (note->playbackState.priority != 0)) {
@@ -86,7 +86,7 @@ void AudioHeap_DiscardFont(s32 fontId) {
AudioPlayback_NoteDisable(note);
AudioPlayback_AudioListRemove(¬e->listItem);
- AudioSeq_AudioListPushBack(&gAudioContext.noteFreeLists.disabled, ¬e->listItem);
+ AudioScript_AudioListPushBack(&gAudioCtx.noteFreeLists.disabled, ¬e->listItem);
}
}
}
@@ -94,14 +94,14 @@ void AudioHeap_DiscardFont(s32 fontId) {
void AudioHeap_ReleaseNotesForFont(s32 fontId) {
s32 i;
- for (i = 0; i < gAudioContext.numNotes; i++) {
- Note* note = &gAudioContext.notes[i];
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ Note* note = &gAudioCtx.notes[i];
NotePlaybackState* playbackState = ¬e->playbackState;
if (playbackState->fontId == fontId) {
if (playbackState->priority != 0) {
playbackState->priority = 1;
- playbackState->adsr.fadeOutVel = gAudioContext.audioBufferParameters.updatesPerFrameInv;
+ playbackState->adsr.fadeOutVel = gAudioCtx.audioBufferParameters.updatesPerFrameInv;
playbackState->adsr.action.s.release = true;
}
}
@@ -111,9 +111,9 @@ void AudioHeap_ReleaseNotesForFont(s32 fontId) {
void AudioHeap_DiscardSequence(s32 seqId) {
s32 i;
- for (i = 0; i < gAudioContext.audioBufferParameters.numSequencePlayers; i++) {
- if (gAudioContext.seqPlayers[i].enabled && gAudioContext.seqPlayers[i].seqId == seqId) {
- AudioSeq_SequencePlayerDisable(&gAudioContext.seqPlayers[i]);
+ for (i = 0; i < gAudioCtx.audioBufferParameters.numSequencePlayers; i++) {
+ if (gAudioCtx.seqPlayers[i].enabled && gAudioCtx.seqPlayers[i].seqId == seqId) {
+ AudioScript_SequencePlayerDisable(&gAudioCtx.seqPlayers[i]);
}
}
}
@@ -137,8 +137,8 @@ void* AudioHeap_WritebackDCache(void* addr, size_t size) {
void* AudioHeap_AllocZeroedAttemptExternal(AudioAllocPool* pool, size_t size) {
void* addr = NULL;
- if (gAudioContext.externalPool.startAddr != NULL) {
- addr = AudioHeap_AllocZeroed(&gAudioContext.externalPool, size);
+ if (gAudioCtx.externalPool.startAddr != NULL) {
+ addr = AudioHeap_AllocZeroed(&gAudioCtx.externalPool, size);
}
if (addr == NULL) {
@@ -155,8 +155,8 @@ void* AudioHeap_AllocZeroedAttemptExternal(AudioAllocPool* pool, size_t size) {
void* AudioHeap_AllocAttemptExternal(AudioAllocPool* pool, size_t size) {
void* addr = NULL;
- if (gAudioContext.externalPool.startAddr != NULL) {
- addr = AudioHeap_Alloc(&gAudioContext.externalPool, size);
+ if (gAudioCtx.externalPool.startAddr != NULL) {
+ addr = AudioHeap_Alloc(&gAudioCtx.externalPool, size);
}
if (addr == NULL) {
@@ -277,18 +277,18 @@ void AudioHeap_PopPersistentCache(s32 tableType) {
switch (tableType) {
case SEQUENCE_TABLE:
- loadedCache = &gAudioContext.seqCache;
- loadStatus = gAudioContext.seqLoadStatus;
+ loadedCache = &gAudioCtx.seqCache;
+ loadStatus = gAudioCtx.seqLoadStatus;
break;
case FONT_TABLE:
- loadedCache = &gAudioContext.fontCache;
- loadStatus = gAudioContext.fontLoadStatus;
+ loadedCache = &gAudioCtx.fontCache;
+ loadStatus = gAudioCtx.fontLoadStatus;
break;
case SAMPLE_TABLE:
- loadedCache = &gAudioContext.sampleBankCache;
- loadStatus = gAudioContext.sampleFontLoadStatus;
+ loadedCache = &gAudioCtx.sampleBankCache;
+ loadStatus = gAudioCtx.sampleFontLoadStatus;
break;
}
@@ -315,64 +315,63 @@ void AudioHeap_PopPersistentCache(s32 tableType) {
}
void AudioHeap_InitMainPool(size_t initPoolSize) {
- AudioHeap_InitPool(&gAudioContext.initPool, gAudioContext.audioHeap, initPoolSize);
- AudioHeap_InitPool(&gAudioContext.sessionPool, gAudioContext.audioHeap + initPoolSize,
- gAudioContext.audioHeapSize - initPoolSize);
+ AudioHeap_InitPool(&gAudioCtx.initPool, gAudioCtx.audioHeap, initPoolSize);
+ AudioHeap_InitPool(&gAudioCtx.sessionPool, gAudioCtx.audioHeap + initPoolSize,
+ gAudioCtx.audioHeapSize - initPoolSize);
- gAudioContext.externalPool.startAddr = NULL;
+ gAudioCtx.externalPool.startAddr = NULL;
}
void AudioHeap_InitSessionPool(AudioSessionPoolSplit* split) {
- gAudioContext.sessionPool.curAddr = gAudioContext.sessionPool.startAddr;
+ gAudioCtx.sessionPool.curAddr = gAudioCtx.sessionPool.startAddr;
- AudioHeap_InitPool(&gAudioContext.miscPool, AudioHeap_Alloc(&gAudioContext.sessionPool, split->miscPoolSize),
+ AudioHeap_InitPool(&gAudioCtx.miscPool, AudioHeap_Alloc(&gAudioCtx.sessionPool, split->miscPoolSize),
split->miscPoolSize);
- AudioHeap_InitPool(&gAudioContext.cachePool, AudioHeap_Alloc(&gAudioContext.sessionPool, split->cachePoolSize),
+ AudioHeap_InitPool(&gAudioCtx.cachePool, AudioHeap_Alloc(&gAudioCtx.sessionPool, split->cachePoolSize),
split->cachePoolSize);
}
void AudioHeap_InitCachePool(AudioCachePoolSplit* split) {
- gAudioContext.cachePool.curAddr = gAudioContext.cachePool.startAddr;
+ gAudioCtx.cachePool.curAddr = gAudioCtx.cachePool.startAddr;
- AudioHeap_InitPool(&gAudioContext.persistentCommonPool,
- AudioHeap_Alloc(&gAudioContext.cachePool, split->persistentCommonPoolSize),
+ AudioHeap_InitPool(&gAudioCtx.persistentCommonPool,
+ AudioHeap_Alloc(&gAudioCtx.cachePool, split->persistentCommonPoolSize),
split->persistentCommonPoolSize);
- AudioHeap_InitPool(&gAudioContext.temporaryCommonPool,
- AudioHeap_Alloc(&gAudioContext.cachePool, split->temporaryCommonPoolSize),
+ AudioHeap_InitPool(&gAudioCtx.temporaryCommonPool,
+ AudioHeap_Alloc(&gAudioCtx.cachePool, split->temporaryCommonPoolSize),
split->temporaryCommonPoolSize);
}
void AudioHeap_InitPersistentPoolsAndCaches(AudioCommonPoolSplit* split) {
- gAudioContext.persistentCommonPool.curAddr = gAudioContext.persistentCommonPool.startAddr;
+ gAudioCtx.persistentCommonPool.curAddr = gAudioCtx.persistentCommonPool.startAddr;
- AudioHeap_InitPool(&gAudioContext.seqCache.persistent.pool,
- AudioHeap_Alloc(&gAudioContext.persistentCommonPool, split->seqCacheSize), split->seqCacheSize);
- AudioHeap_InitPool(&gAudioContext.fontCache.persistent.pool,
- AudioHeap_Alloc(&gAudioContext.persistentCommonPool, split->fontCacheSize),
- split->fontCacheSize);
- AudioHeap_InitPool(&gAudioContext.sampleBankCache.persistent.pool,
- AudioHeap_Alloc(&gAudioContext.persistentCommonPool, split->sampleBankCacheSize),
+ AudioHeap_InitPool(&gAudioCtx.seqCache.persistent.pool,
+ AudioHeap_Alloc(&gAudioCtx.persistentCommonPool, split->seqCacheSize), split->seqCacheSize);
+ AudioHeap_InitPool(&gAudioCtx.fontCache.persistent.pool,
+ AudioHeap_Alloc(&gAudioCtx.persistentCommonPool, split->fontCacheSize), split->fontCacheSize);
+ AudioHeap_InitPool(&gAudioCtx.sampleBankCache.persistent.pool,
+ AudioHeap_Alloc(&gAudioCtx.persistentCommonPool, split->sampleBankCacheSize),
split->sampleBankCacheSize);
- AudioHeap_InitPersistentCache(&gAudioContext.seqCache.persistent);
- AudioHeap_InitPersistentCache(&gAudioContext.fontCache.persistent);
- AudioHeap_InitPersistentCache(&gAudioContext.sampleBankCache.persistent);
+ AudioHeap_InitPersistentCache(&gAudioCtx.seqCache.persistent);
+ AudioHeap_InitPersistentCache(&gAudioCtx.fontCache.persistent);
+ AudioHeap_InitPersistentCache(&gAudioCtx.sampleBankCache.persistent);
}
void AudioHeap_InitTemporaryPoolsAndCaches(AudioCommonPoolSplit* split) {
- gAudioContext.temporaryCommonPool.curAddr = gAudioContext.temporaryCommonPool.startAddr;
+ gAudioCtx.temporaryCommonPool.curAddr = gAudioCtx.temporaryCommonPool.startAddr;
- AudioHeap_InitPool(&gAudioContext.seqCache.temporary.pool,
- AudioHeap_Alloc(&gAudioContext.temporaryCommonPool, split->seqCacheSize), split->seqCacheSize);
- AudioHeap_InitPool(&gAudioContext.fontCache.temporary.pool,
- AudioHeap_Alloc(&gAudioContext.temporaryCommonPool, split->fontCacheSize), split->fontCacheSize);
- AudioHeap_InitPool(&gAudioContext.sampleBankCache.temporary.pool,
- AudioHeap_Alloc(&gAudioContext.temporaryCommonPool, split->sampleBankCacheSize),
+ AudioHeap_InitPool(&gAudioCtx.seqCache.temporary.pool,
+ AudioHeap_Alloc(&gAudioCtx.temporaryCommonPool, split->seqCacheSize), split->seqCacheSize);
+ AudioHeap_InitPool(&gAudioCtx.fontCache.temporary.pool,
+ AudioHeap_Alloc(&gAudioCtx.temporaryCommonPool, split->fontCacheSize), split->fontCacheSize);
+ AudioHeap_InitPool(&gAudioCtx.sampleBankCache.temporary.pool,
+ AudioHeap_Alloc(&gAudioCtx.temporaryCommonPool, split->sampleBankCacheSize),
split->sampleBankCacheSize);
- AudioHeap_InitTemporaryCache(&gAudioContext.seqCache.temporary);
- AudioHeap_InitTemporaryCache(&gAudioContext.fontCache.temporary);
- AudioHeap_InitTemporaryCache(&gAudioContext.sampleBankCache.temporary);
+ AudioHeap_InitTemporaryCache(&gAudioCtx.seqCache.temporary);
+ AudioHeap_InitTemporaryCache(&gAudioCtx.fontCache.temporary);
+ AudioHeap_InitTemporaryCache(&gAudioCtx.sampleBankCache.temporary);
}
void* AudioHeap_AllocCached(s32 tableType, size_t size, s32 cache, s32 id) {
@@ -389,18 +388,18 @@ void* AudioHeap_AllocCached(s32 tableType, size_t size, s32 cache, s32 id) {
switch (tableType) {
case SEQUENCE_TABLE:
- loadedCache = &gAudioContext.seqCache;
- loadStatus = gAudioContext.seqLoadStatus;
+ loadedCache = &gAudioCtx.seqCache;
+ loadStatus = gAudioCtx.seqLoadStatus;
break;
case FONT_TABLE:
- loadedCache = &gAudioContext.fontCache;
- loadStatus = gAudioContext.fontLoadStatus;
+ loadedCache = &gAudioCtx.fontCache;
+ loadStatus = gAudioCtx.fontLoadStatus;
break;
case SAMPLE_TABLE:
- loadedCache = &gAudioContext.sampleBankCache;
- loadStatus = gAudioContext.sampleFontLoadStatus;
+ loadedCache = &gAudioCtx.sampleBankCache;
+ loadStatus = gAudioCtx.sampleFontLoadStatus;
break;
}
@@ -419,28 +418,28 @@ void* AudioHeap_AllocCached(s32 tableType, size_t size, s32 cache, s32 id) {
if (tableType == FONT_TABLE) {
if (loadStatusEntry0 == LOAD_STATUS_MAYBE_DISCARDABLE) {
- for (i = 0; i < gAudioContext.numNotes; i++) {
- if ((gAudioContext.notes[i].playbackState.fontId == temporaryCache->entries[0].id) &&
- gAudioContext.notes[i].sampleState.bitField0.enabled) {
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ if ((gAudioCtx.notes[i].playbackState.fontId == temporaryCache->entries[0].id) &&
+ gAudioCtx.notes[i].sampleState.bitField0.enabled) {
break;
}
}
- if (i == gAudioContext.numNotes) {
+ if (i == gAudioCtx.numNotes) {
AudioLoad_SetFontLoadStatus(temporaryCache->entries[0].id, LOAD_STATUS_DISCARDABLE);
loadStatusEntry0 = LOAD_STATUS_DISCARDABLE;
}
}
if (loadStatusEntry1 == LOAD_STATUS_MAYBE_DISCARDABLE) {
- for (i = 0; i < gAudioContext.numNotes; i++) {
- if ((gAudioContext.notes[i].playbackState.fontId == temporaryCache->entries[1].id) &&
- gAudioContext.notes[i].sampleState.bitField0.enabled) {
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ if ((gAudioCtx.notes[i].playbackState.fontId == temporaryCache->entries[1].id) &&
+ gAudioCtx.notes[i].sampleState.bitField0.enabled) {
break;
}
}
- if (i == gAudioContext.numNotes) {
+ if (i == gAudioCtx.numNotes) {
AudioLoad_SetFontLoadStatus(temporaryCache->entries[1].id, LOAD_STATUS_DISCARDABLE);
loadStatusEntry1 = LOAD_STATUS_DISCARDABLE;
}
@@ -461,54 +460,54 @@ void* AudioHeap_AllocCached(s32 tableType, size_t size, s32 cache, s32 id) {
// Check if there is a side which isn't in active use, if so, evict that one.
if (tableType == SEQUENCE_TABLE) {
if (loadStatusEntry0 == LOAD_STATUS_COMPLETE) {
- for (i = 0; i < gAudioContext.audioBufferParameters.numSequencePlayers; i++) {
- if (gAudioContext.seqPlayers[i].enabled &&
- gAudioContext.seqPlayers[i].seqId == temporaryCache->entries[0].id) {
+ for (i = 0; i < gAudioCtx.audioBufferParameters.numSequencePlayers; i++) {
+ if (gAudioCtx.seqPlayers[i].enabled &&
+ gAudioCtx.seqPlayers[i].seqId == temporaryCache->entries[0].id) {
break;
}
}
- if (i == gAudioContext.audioBufferParameters.numSequencePlayers) {
+ if (i == gAudioCtx.audioBufferParameters.numSequencePlayers) {
temporaryCache->nextSide = 0;
goto done;
}
}
if (loadStatusEntry1 == LOAD_STATUS_COMPLETE) {
- for (i = 0; i < gAudioContext.audioBufferParameters.numSequencePlayers; i++) {
- if (gAudioContext.seqPlayers[i].enabled &&
- gAudioContext.seqPlayers[i].seqId == temporaryCache->entries[1].id) {
+ for (i = 0; i < gAudioCtx.audioBufferParameters.numSequencePlayers; i++) {
+ if (gAudioCtx.seqPlayers[i].enabled &&
+ gAudioCtx.seqPlayers[i].seqId == temporaryCache->entries[1].id) {
break;
}
}
- if (i == gAudioContext.audioBufferParameters.numSequencePlayers) {
+ if (i == gAudioCtx.audioBufferParameters.numSequencePlayers) {
temporaryCache->nextSide = 1;
goto done;
}
}
} else if (tableType == FONT_TABLE) {
if (loadStatusEntry0 == LOAD_STATUS_COMPLETE) {
- for (i = 0; i < gAudioContext.numNotes; i++) {
- if ((gAudioContext.notes[i].playbackState.fontId == temporaryCache->entries[0].id) &&
- gAudioContext.notes[i].sampleState.bitField0.enabled) {
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ if ((gAudioCtx.notes[i].playbackState.fontId == temporaryCache->entries[0].id) &&
+ gAudioCtx.notes[i].sampleState.bitField0.enabled) {
break;
}
}
- if (i == gAudioContext.numNotes) {
+ if (i == gAudioCtx.numNotes) {
temporaryCache->nextSide = 0;
goto done;
}
}
if (loadStatusEntry1 == LOAD_STATUS_COMPLETE) {
- for (i = 0; i < gAudioContext.numNotes; i++) {
- if ((gAudioContext.notes[i].playbackState.fontId == temporaryCache->entries[1].id) &&
- gAudioContext.notes[i].sampleState.bitField0.enabled) {
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ if ((gAudioCtx.notes[i].playbackState.fontId == temporaryCache->entries[1].id) &&
+ gAudioCtx.notes[i].sampleState.bitField0.enabled) {
break;
}
}
- if (i == gAudioContext.numNotes) {
+ if (i == gAudioCtx.numNotes) {
temporaryCache->nextSide = 1;
goto done;
}
@@ -667,15 +666,15 @@ void* AudioHeap_SearchRegularCaches(s32 tableType, s32 cache, s32 id) {
switch (tableType) {
case SEQUENCE_TABLE:
- loadedCache = &gAudioContext.seqCache;
+ loadedCache = &gAudioCtx.seqCache;
break;
case FONT_TABLE:
- loadedCache = &gAudioContext.fontCache;
+ loadedCache = &gAudioCtx.fontCache;
break;
case SAMPLE_TABLE:
- loadedCache = &gAudioContext.sampleBankCache;
+ loadedCache = &gAudioCtx.sampleBankCache;
break;
}
@@ -817,15 +816,15 @@ void AudioHeap_UpdateReverbs(void) {
s32 reverbIndex;
s32 j;
- if (gAudioContext.audioBufferParameters.specUnk4 == 2) {
+ if (gAudioCtx.audioBufferParameters.specUnk4 == 2) {
count = 2;
} else {
count = 1;
}
- for (reverbIndex = 0; reverbIndex < gAudioContext.numSynthesisReverbs; reverbIndex++) {
+ for (reverbIndex = 0; reverbIndex < gAudioCtx.numSynthesisReverbs; reverbIndex++) {
for (j = 0; j < count; j++) {
- AudioHeap_UpdateReverb(&gAudioContext.synthesisReverbs[reverbIndex]);
+ AudioHeap_UpdateReverb(&gAudioCtx.synthesisReverbs[reverbIndex]);
}
}
}
@@ -834,13 +833,13 @@ void AudioHeap_UpdateReverbs(void) {
* Clear the Audio Interface Buffers
*/
void AudioHeap_ClearAiBuffers(void) {
- s32 curAiBufferIndex = gAudioContext.curAiBufferIndex;
+ s32 curAiBufferIndex = gAudioCtx.curAiBufferIndex;
s32 i;
- gAudioContext.aiBufNumSamples[curAiBufferIndex] = gAudioContext.audioBufferParameters.numSamplesPerFrameMin;
+ gAudioCtx.numSamplesPerFrame[curAiBufferIndex] = gAudioCtx.audioBufferParameters.numSamplesPerFrameMin;
for (i = 0; i < AIBUF_LEN; i++) {
- gAudioContext.aiBuffers[curAiBufferIndex][i] = 0;
+ gAudioCtx.aiBuffers[curAiBufferIndex][i] = 0;
}
}
@@ -849,55 +848,55 @@ s32 AudioHeap_ResetStep(void) {
s32 j;
s32 count;
- if (gAudioContext.audioBufferParameters.specUnk4 == 2) {
+ if (gAudioCtx.audioBufferParameters.specUnk4 == 2) {
count = 2;
} else {
count = 1;
}
- switch (gAudioContext.resetStatus) {
+ switch (gAudioCtx.resetStatus) {
case 5:
- for (i = 0; i < gAudioContext.audioBufferParameters.numSequencePlayers; i++) {
- AudioSeq_SequencePlayerDisableAsFinished(&gAudioContext.seqPlayers[i]);
+ for (i = 0; i < gAudioCtx.audioBufferParameters.numSequencePlayers; i++) {
+ AudioScript_SequencePlayerDisableAsFinished(&gAudioCtx.seqPlayers[i]);
}
- gAudioContext.audioResetFadeOutFramesLeft = 2 / count;
- gAudioContext.resetStatus--;
+ gAudioCtx.audioResetFadeOutFramesLeft = 2 / count;
+ gAudioCtx.resetStatus--;
break;
case 4:
- if (gAudioContext.audioResetFadeOutFramesLeft != 0) {
- gAudioContext.audioResetFadeOutFramesLeft--;
+ if (gAudioCtx.audioResetFadeOutFramesLeft != 0) {
+ gAudioCtx.audioResetFadeOutFramesLeft--;
AudioHeap_UpdateReverbs();
} else {
- for (i = 0; i < gAudioContext.numNotes; i++) {
- if (gAudioContext.notes[i].sampleState.bitField0.enabled &&
- gAudioContext.notes[i].playbackState.adsr.action.s.state != ADSR_STATE_DISABLED) {
- gAudioContext.notes[i].playbackState.adsr.fadeOutVel =
- gAudioContext.audioBufferParameters.updatesPerFrameInv;
- gAudioContext.notes[i].playbackState.adsr.action.s.release = true;
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ if (gAudioCtx.notes[i].sampleState.bitField0.enabled &&
+ gAudioCtx.notes[i].playbackState.adsr.action.s.state != ADSR_STATE_DISABLED) {
+ gAudioCtx.notes[i].playbackState.adsr.fadeOutVel =
+ gAudioCtx.audioBufferParameters.updatesPerFrameInv;
+ gAudioCtx.notes[i].playbackState.adsr.action.s.release = true;
}
}
- gAudioContext.audioResetFadeOutFramesLeft = 8 / count;
- gAudioContext.resetStatus--;
+ gAudioCtx.audioResetFadeOutFramesLeft = 8 / count;
+ gAudioCtx.resetStatus--;
}
break;
case 3:
- if (gAudioContext.audioResetFadeOutFramesLeft != 0) {
- gAudioContext.audioResetFadeOutFramesLeft--;
+ if (gAudioCtx.audioResetFadeOutFramesLeft != 0) {
+ gAudioCtx.audioResetFadeOutFramesLeft--;
AudioHeap_UpdateReverbs();
} else {
- gAudioContext.audioResetFadeOutFramesLeft = 2 / count;
- gAudioContext.resetStatus--;
+ gAudioCtx.audioResetFadeOutFramesLeft = 2 / count;
+ gAudioCtx.resetStatus--;
}
break;
case 2:
AudioHeap_ClearAiBuffers();
- if (gAudioContext.audioResetFadeOutFramesLeft != 0) {
- gAudioContext.audioResetFadeOutFramesLeft--;
+ if (gAudioCtx.audioResetFadeOutFramesLeft != 0) {
+ gAudioCtx.audioResetFadeOutFramesLeft--;
} else {
- gAudioContext.resetStatus--;
+ gAudioCtx.resetStatus--;
AudioHeap_DiscardSampleCaches();
AudioHeap_DiscardSampleBanks();
}
@@ -905,17 +904,17 @@ s32 AudioHeap_ResetStep(void) {
case 1:
AudioHeap_Init();
- gAudioContext.resetStatus = 0;
- for (i = 0; i < ARRAY_COUNT(gAudioContext.aiBufNumSamples); i++) {
- gAudioContext.aiBufNumSamples[i] = gAudioContext.audioBufferParameters.numSamplesPerFrameMax;
+ gAudioCtx.resetStatus = 0;
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.numSamplesPerFrame); i++) {
+ gAudioCtx.numSamplesPerFrame[i] = gAudioCtx.audioBufferParameters.numSamplesPerFrameMax;
for (j = 0; j < AIBUF_LEN; j++) {
- gAudioContext.aiBuffers[i][j] = 0;
+ gAudioCtx.aiBuffers[i][j] = 0;
}
}
break;
}
- if (gAudioContext.resetStatus < 3) {
+ if (gAudioCtx.resetStatus < 3) {
return false;
}
@@ -933,72 +932,67 @@ void AudioHeap_Init(void) {
s32 reverbIndex;
s32 i;
s32 pad2;
- AudioSpec* spec = &gAudioSpecs[gAudioContext.audioResetSpecIdToLoad]; // Audio Specifications
+ AudioSpec* spec = &gAudioSpecs[gAudioCtx.specId]; // Audio Specifications
- gAudioContext.sampleDmaCount = 0;
+ gAudioCtx.sampleDmaCount = 0;
// audio buffer parameters
- gAudioContext.audioBufferParameters.samplingFreq = spec->samplingFreq;
- gAudioContext.audioBufferParameters.aiSamplingFreq =
- osAiSetFrequency(gAudioContext.audioBufferParameters.samplingFreq);
+ gAudioCtx.audioBufferParameters.samplingFreq = spec->samplingFreq;
+ gAudioCtx.audioBufferParameters.aiSamplingFreq = osAiSetFrequency(gAudioCtx.audioBufferParameters.samplingFreq);
- gAudioContext.audioBufferParameters.numSamplesPerFrameTarget =
- ALIGN16(gAudioContext.audioBufferParameters.samplingFreq / gAudioContext.refreshRate);
- gAudioContext.audioBufferParameters.numSamplesPerFrameMin =
- gAudioContext.audioBufferParameters.numSamplesPerFrameTarget - 0x10;
- gAudioContext.audioBufferParameters.numSamplesPerFrameMax =
- gAudioContext.audioBufferParameters.numSamplesPerFrameTarget + 0x10;
- gAudioContext.audioBufferParameters.updatesPerFrame =
- ((gAudioContext.audioBufferParameters.numSamplesPerFrameTarget + 0x10) / 0xD0) + 1;
- gAudioContext.audioBufferParameters.numSamplesPerUpdate =
- (gAudioContext.audioBufferParameters.numSamplesPerFrameTarget /
- gAudioContext.audioBufferParameters.updatesPerFrame) &
+ gAudioCtx.audioBufferParameters.numSamplesPerFrameTarget =
+ ALIGN16(gAudioCtx.audioBufferParameters.samplingFreq / gAudioCtx.refreshRate);
+ gAudioCtx.audioBufferParameters.numSamplesPerFrameMin =
+ gAudioCtx.audioBufferParameters.numSamplesPerFrameTarget - 0x10;
+ gAudioCtx.audioBufferParameters.numSamplesPerFrameMax =
+ gAudioCtx.audioBufferParameters.numSamplesPerFrameTarget + 0x10;
+ gAudioCtx.audioBufferParameters.updatesPerFrame =
+ ((gAudioCtx.audioBufferParameters.numSamplesPerFrameTarget + 0x10) / 0xD0) + 1;
+ gAudioCtx.audioBufferParameters.numSamplesPerUpdate =
+ (gAudioCtx.audioBufferParameters.numSamplesPerFrameTarget / gAudioCtx.audioBufferParameters.updatesPerFrame) &
~7;
- gAudioContext.audioBufferParameters.numSamplesPerUpdateMax =
- gAudioContext.audioBufferParameters.numSamplesPerUpdate + 8;
- gAudioContext.audioBufferParameters.numSamplesPerUpdateMin =
- gAudioContext.audioBufferParameters.numSamplesPerUpdate - 8;
- gAudioContext.audioBufferParameters.resampleRate = 32000.0f / (s32)gAudioContext.audioBufferParameters.samplingFreq;
- gAudioContext.audioBufferParameters.updatesPerFrameInvScaled =
- (1.0f / 256.0f) / gAudioContext.audioBufferParameters.updatesPerFrame;
- gAudioContext.audioBufferParameters.updatesPerFrameScaled =
- gAudioContext.audioBufferParameters.updatesPerFrame / 4.0f;
- gAudioContext.audioBufferParameters.updatesPerFrameInv = 1.0f / gAudioContext.audioBufferParameters.updatesPerFrame;
+ gAudioCtx.audioBufferParameters.numSamplesPerUpdateMax = gAudioCtx.audioBufferParameters.numSamplesPerUpdate + 8;
+ gAudioCtx.audioBufferParameters.numSamplesPerUpdateMin = gAudioCtx.audioBufferParameters.numSamplesPerUpdate - 8;
+ gAudioCtx.audioBufferParameters.resampleRate = 32000.0f / (s32)gAudioCtx.audioBufferParameters.samplingFreq;
+ gAudioCtx.audioBufferParameters.updatesPerFrameInvScaled =
+ (1.0f / 256.0f) / gAudioCtx.audioBufferParameters.updatesPerFrame;
+ gAudioCtx.audioBufferParameters.updatesPerFrameScaled = gAudioCtx.audioBufferParameters.updatesPerFrame / 4.0f;
+ gAudioCtx.audioBufferParameters.updatesPerFrameInv = 1.0f / gAudioCtx.audioBufferParameters.updatesPerFrame;
// sample dma size
- gAudioContext.sampleDmaBufSize1 = spec->sampleDmaBufSize1;
- gAudioContext.sampleDmaBufSize2 = spec->sampleDmaBufSize2;
+ gAudioCtx.sampleDmaBufSize1 = spec->sampleDmaBufSize1;
+ gAudioCtx.sampleDmaBufSize2 = spec->sampleDmaBufSize2;
- gAudioContext.numNotes = spec->numNotes;
- gAudioContext.audioBufferParameters.numSequencePlayers = spec->numSequencePlayers;
+ gAudioCtx.numNotes = spec->numNotes;
+ gAudioCtx.audioBufferParameters.numSequencePlayers = spec->numSequencePlayers;
- if (gAudioContext.audioBufferParameters.numSequencePlayers > 5) {
- gAudioContext.audioBufferParameters.numSequencePlayers = 5;
+ if (gAudioCtx.audioBufferParameters.numSequencePlayers > 5) {
+ gAudioCtx.audioBufferParameters.numSequencePlayers = 5;
}
- gAudioContext.unk_29BC = 8;
- gAudioContext.unk_2 = spec->unk_14;
- gAudioContext.tempoInternalToExternal = (u32)(gAudioContext.audioBufferParameters.updatesPerFrame * 2880000.0f /
- gTatumsPerBeat / gAudioContext.unk_2960);
+ gAudioCtx.numAbiCmdsMax = 8;
+ gAudioCtx.unk_2 = spec->unk_14;
+ gAudioCtx.maxTempo =
+ (u32)(gAudioCtx.audioBufferParameters.updatesPerFrame * 2880000.0f / gTatumsPerBeat / gAudioCtx.unk_2960);
- gAudioContext.unk_2870 = gAudioContext.refreshRate;
- gAudioContext.unk_2870 *= gAudioContext.audioBufferParameters.updatesPerFrame;
- gAudioContext.unk_2870 /= gAudioContext.audioBufferParameters.aiSamplingFreq;
- gAudioContext.unk_2870 /= gAudioContext.tempoInternalToExternal;
+ gAudioCtx.unk_2870 = gAudioCtx.refreshRate;
+ gAudioCtx.unk_2870 *= gAudioCtx.audioBufferParameters.updatesPerFrame;
+ gAudioCtx.unk_2870 /= gAudioCtx.audioBufferParameters.aiSamplingFreq;
+ gAudioCtx.unk_2870 /= gAudioCtx.maxTempo;
- gAudioContext.audioBufferParameters.specUnk4 = spec->unk_04;
- gAudioContext.audioBufferParameters.numSamplesPerFrameTarget *= gAudioContext.audioBufferParameters.specUnk4;
- gAudioContext.audioBufferParameters.numSamplesPerFrameMax *= gAudioContext.audioBufferParameters.specUnk4;
- gAudioContext.audioBufferParameters.numSamplesPerFrameMin *= gAudioContext.audioBufferParameters.specUnk4;
- gAudioContext.audioBufferParameters.updatesPerFrame *= gAudioContext.audioBufferParameters.specUnk4;
+ gAudioCtx.audioBufferParameters.specUnk4 = spec->unk_04;
+ gAudioCtx.audioBufferParameters.numSamplesPerFrameTarget *= gAudioCtx.audioBufferParameters.specUnk4;
+ gAudioCtx.audioBufferParameters.numSamplesPerFrameMax *= gAudioCtx.audioBufferParameters.specUnk4;
+ gAudioCtx.audioBufferParameters.numSamplesPerFrameMin *= gAudioCtx.audioBufferParameters.specUnk4;
+ gAudioCtx.audioBufferParameters.updatesPerFrame *= gAudioCtx.audioBufferParameters.specUnk4;
- if (gAudioContext.audioBufferParameters.specUnk4 >= 2) {
- gAudioContext.audioBufferParameters.numSamplesPerFrameMax -= 0x10;
+ if (gAudioCtx.audioBufferParameters.specUnk4 >= 2) {
+ gAudioCtx.audioBufferParameters.numSamplesPerFrameMax -= 0x10;
}
// Determine the maximum allowable number of audio command list entries for the rsp microcode
- gAudioContext.maxAudioCmds =
- gAudioContext.numNotes * 20 * gAudioContext.audioBufferParameters.updatesPerFrame + spec->numReverbs * 30 + 800;
+ gAudioCtx.maxAudioCmds =
+ gAudioCtx.numNotes * 20 * gAudioCtx.audioBufferParameters.updatesPerFrame + spec->numReverbs * 30 + 800;
// Calculate sizes for various caches on the audio heap
persistentSize =
@@ -1006,81 +1000,81 @@ void AudioHeap_Init(void) {
temporarySize =
spec->temporarySeqCacheSize + spec->temporaryFontCacheSize + spec->temporarySampleBankCacheSize + 0x10;
cachePoolSize = persistentSize + temporarySize;
- miscPoolSize = gAudioContext.sessionPool.size - cachePoolSize - 0x100;
+ miscPoolSize = gAudioCtx.sessionPool.size - cachePoolSize - 0x100;
- if (gAudioContext.externalPool.startAddr != NULL) {
- gAudioContext.externalPool.curAddr = gAudioContext.externalPool.startAddr;
+ if (gAudioCtx.externalPool.startAddr != NULL) {
+ gAudioCtx.externalPool.curAddr = gAudioCtx.externalPool.startAddr;
}
// Session Pool Split (split into Cache and Misc heaps)
- gAudioContext.sessionPoolSplit.miscPoolSize = miscPoolSize;
- gAudioContext.sessionPoolSplit.cachePoolSize = cachePoolSize;
- AudioHeap_InitSessionPool(&gAudioContext.sessionPoolSplit);
+ gAudioCtx.sessionPoolSplit.miscPoolSize = miscPoolSize;
+ gAudioCtx.sessionPoolSplit.cachePoolSize = cachePoolSize;
+ AudioHeap_InitSessionPool(&gAudioCtx.sessionPoolSplit);
// Cache Pool Split (Split into Persistent and Temporary heaps)
- gAudioContext.cachePoolSplit.persistentCommonPoolSize = persistentSize;
- gAudioContext.cachePoolSplit.temporaryCommonPoolSize = temporarySize;
- AudioHeap_InitCachePool(&gAudioContext.cachePoolSplit);
+ gAudioCtx.cachePoolSplit.persistentCommonPoolSize = persistentSize;
+ gAudioCtx.cachePoolSplit.temporaryCommonPoolSize = temporarySize;
+ AudioHeap_InitCachePool(&gAudioCtx.cachePoolSplit);
// Persistent Pool Split (Split into Sequences, SoundFonts, Samples)
- gAudioContext.persistentCommonPoolSplit.seqCacheSize = spec->persistentSeqCacheSize;
- gAudioContext.persistentCommonPoolSplit.fontCacheSize = spec->persistentFontCacheSize;
- gAudioContext.persistentCommonPoolSplit.sampleBankCacheSize = spec->persistentSampleBankCacheSize;
- AudioHeap_InitPersistentPoolsAndCaches(&gAudioContext.persistentCommonPoolSplit);
+ gAudioCtx.persistentCommonPoolSplit.seqCacheSize = spec->persistentSeqCacheSize;
+ gAudioCtx.persistentCommonPoolSplit.fontCacheSize = spec->persistentFontCacheSize;
+ gAudioCtx.persistentCommonPoolSplit.sampleBankCacheSize = spec->persistentSampleBankCacheSize;
+ AudioHeap_InitPersistentPoolsAndCaches(&gAudioCtx.persistentCommonPoolSplit);
// Temporary Pool Split (Split into Sequences, SoundFonts, Samples)
- gAudioContext.temporaryCommonPoolSplit.seqCacheSize = spec->temporarySeqCacheSize;
- gAudioContext.temporaryCommonPoolSplit.fontCacheSize = spec->temporaryFontCacheSize;
- gAudioContext.temporaryCommonPoolSplit.sampleBankCacheSize = spec->temporarySampleBankCacheSize;
- AudioHeap_InitTemporaryPoolsAndCaches(&gAudioContext.temporaryCommonPoolSplit);
+ gAudioCtx.temporaryCommonPoolSplit.seqCacheSize = spec->temporarySeqCacheSize;
+ gAudioCtx.temporaryCommonPoolSplit.fontCacheSize = spec->temporaryFontCacheSize;
+ gAudioCtx.temporaryCommonPoolSplit.sampleBankCacheSize = spec->temporarySampleBankCacheSize;
+ AudioHeap_InitTemporaryPoolsAndCaches(&gAudioCtx.temporaryCommonPoolSplit);
AudioHeap_ResetLoadStatus();
// Initialize notes
- gAudioContext.notes = AudioHeap_AllocZeroed(&gAudioContext.miscPool, gAudioContext.numNotes * sizeof(Note));
+ gAudioCtx.notes = AudioHeap_AllocZeroed(&gAudioCtx.miscPool, gAudioCtx.numNotes * sizeof(Note));
AudioPlayback_NoteInitAll();
AudioPlayback_InitNoteFreeList();
- gAudioContext.sampleStateList =
- AudioHeap_AllocZeroed(&gAudioContext.miscPool, gAudioContext.audioBufferParameters.updatesPerFrame *
- gAudioContext.numNotes * sizeof(NoteSampleState));
+ gAudioCtx.sampleStateList =
+ AudioHeap_AllocZeroed(&gAudioCtx.miscPool, gAudioCtx.audioBufferParameters.updatesPerFrame *
+ gAudioCtx.numNotes * sizeof(NoteSampleState));
// Initialize audio binary interface command list buffer
- for (i = 0; i < ARRAY_COUNT(gAudioContext.abiCmdBufs); i++) {
- gAudioContext.abiCmdBufs[i] =
- AudioHeap_AllocDmaMemoryZeroed(&gAudioContext.miscPool, gAudioContext.maxAudioCmds * sizeof(Acmd));
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.abiCmdBufs); i++) {
+ gAudioCtx.abiCmdBufs[i] =
+ AudioHeap_AllocDmaMemoryZeroed(&gAudioCtx.miscPool, gAudioCtx.maxAudioCmds * sizeof(Acmd));
}
// Initialize the decay rate table for ADSR
- gAudioContext.adsrDecayTable = AudioHeap_Alloc(&gAudioContext.miscPool, 0x100 * sizeof(f32));
+ gAudioCtx.adsrDecayTable = AudioHeap_Alloc(&gAudioCtx.miscPool, 0x100 * sizeof(f32));
AudioHeap_InitAdsrDecayTable();
// Initialize reverbs
- for (reverbIndex = 0; reverbIndex < ARRAY_COUNT(gAudioContext.synthesisReverbs); reverbIndex++) {
- gAudioContext.synthesisReverbs[reverbIndex].useReverb = 0;
+ for (reverbIndex = 0; reverbIndex < ARRAY_COUNT(gAudioCtx.synthesisReverbs); reverbIndex++) {
+ gAudioCtx.synthesisReverbs[reverbIndex].useReverb = 0;
}
- gAudioContext.numSynthesisReverbs = spec->numReverbs;
- for (reverbIndex = 0; reverbIndex < gAudioContext.numSynthesisReverbs; reverbIndex++) {
+ gAudioCtx.numSynthesisReverbs = spec->numReverbs;
+ for (reverbIndex = 0; reverbIndex < gAudioCtx.numSynthesisReverbs; reverbIndex++) {
AudioHeap_InitReverb(reverbIndex, &spec->reverbSettings[reverbIndex], true);
}
// Initialize sequence players
- AudioSeq_InitSequencePlayers();
- for (i = 0; i < gAudioContext.audioBufferParameters.numSequencePlayers; i++) {
- AudioSeq_InitSequencePlayerChannels(i);
- AudioSeq_ResetSequencePlayer(&gAudioContext.seqPlayers[i]);
+ AudioScript_InitSequencePlayers();
+ for (i = 0; i < gAudioCtx.audioBufferParameters.numSequencePlayers; i++) {
+ AudioScript_InitSequencePlayerChannels(i);
+ AudioScript_ResetSequencePlayer(&gAudioCtx.seqPlayers[i]);
}
// Initialize two additional caches on the audio heap to store individual audio samples
AudioHeap_InitSampleCaches(spec->persistentSampleCacheSize, spec->temporarySampleCacheSize);
- AudioLoad_InitSampleDmaBuffers(gAudioContext.numNotes);
+ AudioLoad_InitSampleDmaBuffers(gAudioCtx.numNotes);
// Initalize Loads
- gAudioContext.preloadSampleStackTop = 0;
+ gAudioCtx.preloadSampleStackTop = 0;
AudioLoad_InitSlowLoads();
AudioLoad_InitScriptLoads();
AudioLoad_InitAsyncLoads();
- gAudioContext.unk_4 = 0x1000;
+ gAudioCtx.unk_4 = 0x1000;
AudioLoad_LoadPermanentSamples();
intMask = osSetIntMask(1);
@@ -1091,9 +1085,9 @@ void AudioHeap_Init(void) {
void* AudioHeap_SearchPermanentCache(s32 tableType, s32 id) {
s32 i;
- for (i = 0; i < gAudioContext.permanentPool.count; i++) {
- if (gAudioContext.permanentEntries[i].tableType == tableType && gAudioContext.permanentEntries[i].id == id) {
- return gAudioContext.permanentEntries[i].addr;
+ for (i = 0; i < gAudioCtx.permanentPool.count; i++) {
+ if (gAudioCtx.permanentEntries[i].tableType == tableType && gAudioCtx.permanentEntries[i].id == id) {
+ return gAudioCtx.permanentEntries[i].addr;
}
}
return NULL;
@@ -1101,18 +1095,18 @@ void* AudioHeap_SearchPermanentCache(s32 tableType, s32 id) {
void* AudioHeap_AllocPermanent(s32 tableType, s32 id, size_t size) {
void* addr;
- s32 index = gAudioContext.permanentPool.count;
+ s32 index = gAudioCtx.permanentPool.count;
- addr = AudioHeap_Alloc(&gAudioContext.permanentPool, size);
- gAudioContext.permanentEntries[index].addr = addr;
+ addr = AudioHeap_Alloc(&gAudioCtx.permanentPool, size);
+ gAudioCtx.permanentEntries[index].addr = addr;
if (addr == NULL) {
return NULL;
}
- gAudioContext.permanentEntries[index].tableType = tableType;
- gAudioContext.permanentEntries[index].id = id;
- gAudioContext.permanentEntries[index].size = size;
+ gAudioCtx.permanentEntries[index].tableType = tableType;
+ gAudioCtx.permanentEntries[index].id = id;
+ gAudioCtx.permanentEntries[index].size = size;
//! @bug UB: missing return. "addr" is in v0 at this point, but doing an
// explicit return uses an additional register.
// return addr;
@@ -1143,22 +1137,22 @@ void* AudioHeap_AllocSampleCache(size_t size, s32 sampleBankId, void* sampleAddr
void AudioHeap_InitSampleCaches(size_t persistentSampleCacheSize, size_t temporarySampleCacheSize) {
void* addr;
- addr = AudioHeap_AllocAttemptExternal(&gAudioContext.miscPool, persistentSampleCacheSize);
+ addr = AudioHeap_AllocAttemptExternal(&gAudioCtx.miscPool, persistentSampleCacheSize);
if (addr == NULL) {
- gAudioContext.persistentSampleCache.pool.size = 0;
+ gAudioCtx.persistentSampleCache.pool.size = 0;
} else {
- AudioHeap_InitPool(&gAudioContext.persistentSampleCache.pool, addr, persistentSampleCacheSize);
+ AudioHeap_InitPool(&gAudioCtx.persistentSampleCache.pool, addr, persistentSampleCacheSize);
}
- addr = AudioHeap_AllocAttemptExternal(&gAudioContext.miscPool, temporarySampleCacheSize);
+ addr = AudioHeap_AllocAttemptExternal(&gAudioCtx.miscPool, temporarySampleCacheSize);
if (addr == NULL) {
- gAudioContext.temporarySampleCache.pool.size = 0;
+ gAudioCtx.temporarySampleCache.pool.size = 0;
} else {
- AudioHeap_InitPool(&gAudioContext.temporarySampleCache.pool, addr, temporarySampleCacheSize);
+ AudioHeap_InitPool(&gAudioCtx.temporarySampleCache.pool, addr, temporarySampleCacheSize);
}
- gAudioContext.persistentSampleCache.numEntries = 0;
- gAudioContext.temporarySampleCache.numEntries = 0;
+ gAudioCtx.persistentSampleCache.numEntries = 0;
+ gAudioCtx.temporarySampleCache.numEntries = 0;
}
SampleCacheEntry* AudioHeap_AllocTemporarySampleCacheEntry(size_t size) {
@@ -1176,7 +1170,7 @@ SampleCacheEntry* AudioHeap_AllocTemporarySampleCacheEntry(size_t size) {
u8* startAddr;
u8* endAddr;
- cache = &gAudioContext.temporarySampleCache;
+ cache = &gAudioCtx.temporarySampleCache;
allocBefore = cache->pool.curAddr;
addr = AudioHeap_Alloc(&cache->pool, size);
if (addr == NULL) {
@@ -1197,8 +1191,8 @@ SampleCacheEntry* AudioHeap_AllocTemporarySampleCacheEntry(size_t size) {
allocAfter = cache->pool.curAddr;
index = -1;
- for (i = 0; i < gAudioContext.preloadSampleStackTop; i++) {
- preload = &gAudioContext.preloadSampleStack[i];
+ for (i = 0; i < gAudioCtx.preloadSampleStackTop; i++) {
+ preload = &gAudioCtx.preloadSampleStack[i];
if (preload->isFree == false) {
startAddr = preload->ramAddr;
endAddr = preload->ramAddr + preload->sample->size - 1;
@@ -1270,7 +1264,7 @@ void AudioHeap_UnapplySampleCacheForFont(SampleCacheEntry* entry, s32 fontId) {
s32 drumId;
s32 sfxId;
- for (instId = 0; instId < gAudioContext.soundFontList[fontId].numInstruments; instId++) {
+ for (instId = 0; instId < gAudioCtx.soundFontList[fontId].numInstruments; instId++) {
inst = AudioPlayback_GetInstrumentInner(fontId, instId);
if (inst != NULL) {
if (inst->normalRangeLo != 0) {
@@ -1283,14 +1277,14 @@ void AudioHeap_UnapplySampleCacheForFont(SampleCacheEntry* entry, s32 fontId) {
}
}
- for (drumId = 0; drumId < gAudioContext.soundFontList[fontId].numDrums; drumId++) {
+ for (drumId = 0; drumId < gAudioCtx.soundFontList[fontId].numDrums; drumId++) {
drum = AudioPlayback_GetDrum(fontId, drumId);
if (drum != NULL) {
AudioHeap_UnapplySampleCache(entry, drum->tunedSample.sample);
}
}
- for (sfxId = 0; sfxId < gAudioContext.soundFontList[fontId].numSfx; sfxId++) {
+ for (sfxId = 0; sfxId < gAudioCtx.soundFontList[fontId].numSfx; sfxId++) {
soundEffect = AudioPlayback_GetSoundEffect(fontId, sfxId);
if (soundEffect != NULL) {
AudioHeap_UnapplySampleCache(entry, soundEffect->tunedSample.sample);
@@ -1304,10 +1298,10 @@ void AudioHeap_DiscardSampleCacheEntry(SampleCacheEntry* entry) {
s32 sampleBankId2;
s32 fontId;
- numFonts = gAudioContext.soundFontTable->numEntries;
+ numFonts = gAudioCtx.soundFontTable->numEntries;
for (fontId = 0; fontId < numFonts; fontId++) {
- sampleBankId1 = gAudioContext.soundFontList[fontId].sampleBankId1;
- sampleBankId2 = gAudioContext.soundFontList[fontId].sampleBankId2;
+ 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) {
@@ -1335,7 +1329,7 @@ SampleCacheEntry* AudioHeap_AllocPersistentSampleCacheEntry(size_t size) {
SampleCacheEntry* entry;
void* addr;
- cache = &gAudioContext.persistentSampleCache;
+ cache = &gAudioCtx.persistentSampleCache;
addr = AudioHeap_Alloc(&cache->pool, size);
if (addr == NULL) {
return NULL;
@@ -1368,10 +1362,10 @@ void AudioHeap_DiscardSampleCaches(void) {
s32 fontId;
s32 j;
- numFonts = gAudioContext.soundFontTable->numEntries;
+ numFonts = gAudioCtx.soundFontTable->numEntries;
for (fontId = 0; fontId < numFonts; fontId++) {
- sampleBankId1 = gAudioContext.soundFontList[fontId].sampleBankId1;
- sampleBankId2 = gAudioContext.soundFontList[fontId].sampleBankId2;
+ sampleBankId1 = gAudioCtx.soundFontList[fontId].sampleBankId1;
+ sampleBankId2 = gAudioCtx.soundFontList[fontId].sampleBankId2;
if ((sampleBankId1 == 0xFF) && (sampleBankId2 == 0xFF)) {
continue;
}
@@ -1380,12 +1374,12 @@ void AudioHeap_DiscardSampleCaches(void) {
continue;
}
- for (j = 0; j < gAudioContext.persistentSampleCache.numEntries; j++) {
- AudioHeap_DiscardSampleCacheForFont(&gAudioContext.persistentSampleCache.entries[j], sampleBankId1,
+ for (j = 0; j < gAudioCtx.persistentSampleCache.numEntries; j++) {
+ AudioHeap_DiscardSampleCacheForFont(&gAudioCtx.persistentSampleCache.entries[j], sampleBankId1,
sampleBankId2, fontId);
}
- for (j = 0; j < gAudioContext.temporarySampleCache.numEntries; j++) {
- AudioHeap_DiscardSampleCacheForFont(&gAudioContext.temporarySampleCache.entries[j], sampleBankId1,
+ for (j = 0; j < gAudioCtx.temporarySampleCache.numEntries; j++) {
+ AudioHeap_DiscardSampleCacheForFont(&gAudioCtx.temporarySampleCache.entries[j], sampleBankId1,
sampleBankId2, fontId);
}
}
@@ -1442,8 +1436,8 @@ void AudioHeap_ApplySampleBankCacheInternal(s32 apply, s32 sampleBankId) {
uintptr_t* newAddr;
s32 pad[4];
- sampleBankTable = gAudioContext.sampleBankTable;
- numFonts = gAudioContext.soundFontTable->numEntries;
+ sampleBankTable = gAudioCtx.sampleBankTable;
+ numFonts = gAudioCtx.soundFontTable->numEntries;
change.oldAddr = AudioHeap_SearchCaches(SAMPLE_TABLE, CACHE_EITHER, sampleBankId);
if (change.oldAddr == 0) {
return;
@@ -1465,8 +1459,8 @@ void AudioHeap_ApplySampleBankCacheInternal(s32 apply, s32 sampleBankId) {
}
for (fontId = 0; fontId < numFonts; fontId++) {
- sampleBankId1 = gAudioContext.soundFontList[fontId].sampleBankId1;
- sampleBankId2 = gAudioContext.soundFontList[fontId].sampleBankId2;
+ sampleBankId1 = gAudioCtx.soundFontList[fontId].sampleBankId1;
+ sampleBankId2 = gAudioCtx.soundFontList[fontId].sampleBankId2;
if ((sampleBankId1 != 0xFF) || (sampleBankId2 != 0xFF)) {
if (!AudioLoad_IsFontLoadComplete(fontId) ||
AudioHeap_SearchCaches(FONT_TABLE, CACHE_EITHER, fontId) == NULL) {
@@ -1479,7 +1473,7 @@ void AudioHeap_ApplySampleBankCacheInternal(s32 apply, s32 sampleBankId) {
continue;
}
- for (instId = 0; instId < gAudioContext.soundFontList[fontId].numInstruments; instId++) {
+ for (instId = 0; instId < gAudioCtx.soundFontList[fontId].numInstruments; instId++) {
inst = AudioPlayback_GetInstrumentInner(fontId, instId);
if (inst != NULL) {
if (inst->normalRangeLo != 0) {
@@ -1492,14 +1486,14 @@ void AudioHeap_ApplySampleBankCacheInternal(s32 apply, s32 sampleBankId) {
}
}
- for (drumId = 0; drumId < gAudioContext.soundFontList[fontId].numDrums; drumId++) {
+ for (drumId = 0; drumId < gAudioCtx.soundFontList[fontId].numDrums; drumId++) {
drum = AudioPlayback_GetDrum(fontId, drumId);
if (drum != NULL) {
AudioHeap_ChangeStorage(&change, drum->tunedSample.sample);
}
}
- for (sfxId = 0; sfxId < gAudioContext.soundFontList[fontId].numSfx; sfxId++) {
+ for (sfxId = 0; sfxId < gAudioCtx.soundFontList[fontId].numSfx; sfxId++) {
soundEffect = AudioPlayback_GetSoundEffect(fontId, sfxId);
if (soundEffect != NULL) {
AudioHeap_ChangeStorage(&change, soundEffect->tunedSample.sample);
@@ -1515,7 +1509,7 @@ void AudioHeap_DiscardSampleBanks(void) {
AudioTemporaryCache* temporary;
u32 i;
- cache = &gAudioContext.sampleBankCache;
+ cache = &gAudioCtx.sampleBankCache;
temporary = &cache->temporary;
if (temporary->entries[0].id != -1) {
@@ -1534,7 +1528,7 @@ void AudioHeap_DiscardSampleBanks(void) {
void AudioHeap_SetReverbData(s32 reverbIndex, u32 dataType, s32 data, s32 isFirstInit) {
s32 delayNumSamples;
- SynthesisReverb* reverb = &gAudioContext.synthesisReverbs[reverbIndex];
+ SynthesisReverb* reverb = &gAudioCtx.synthesisReverbs[reverbIndex];
switch (dataType) {
case REVERB_DATA_TYPE_SETTINGS:
@@ -1568,14 +1562,10 @@ void AudioHeap_SetReverbData(s32 reverbIndex, u32 dataType, s32 data, s32 isFirs
if ((reverb->downsampleRate != 1) || reverb->resampleEffectOn) {
reverb->downsamplePitch = 0x8000 / reverb->downsampleRate;
if (reverb->leftLoadResampleBuf == NULL) {
- reverb->leftLoadResampleBuf =
- AudioHeap_AllocZeroed(&gAudioContext.miscPool, sizeof(RESAMPLE_STATE));
- reverb->rightLoadResampleBuf =
- AudioHeap_AllocZeroed(&gAudioContext.miscPool, sizeof(RESAMPLE_STATE));
- reverb->leftSaveResampleBuf =
- AudioHeap_AllocZeroed(&gAudioContext.miscPool, sizeof(RESAMPLE_STATE));
- reverb->rightSaveResampleBuf =
- AudioHeap_AllocZeroed(&gAudioContext.miscPool, sizeof(RESAMPLE_STATE));
+ reverb->leftLoadResampleBuf = AudioHeap_AllocZeroed(&gAudioCtx.miscPool, sizeof(RESAMPLE_STATE));
+ reverb->rightLoadResampleBuf = AudioHeap_AllocZeroed(&gAudioCtx.miscPool, sizeof(RESAMPLE_STATE));
+ reverb->leftSaveResampleBuf = AudioHeap_AllocZeroed(&gAudioCtx.miscPool, sizeof(RESAMPLE_STATE));
+ reverb->rightSaveResampleBuf = AudioHeap_AllocZeroed(&gAudioCtx.miscPool, sizeof(RESAMPLE_STATE));
if (reverb->rightSaveResampleBuf == NULL) {
reverb->downsampleRate = 1;
}
@@ -1584,31 +1574,31 @@ void AudioHeap_SetReverbData(s32 reverbIndex, u32 dataType, s32 data, s32 isFirs
break;
case REVERB_DATA_TYPE_DECAY:
- gAudioContext.synthesisReverbs[reverbIndex].decayRatio = data;
+ gAudioCtx.synthesisReverbs[reverbIndex].decayRatio = data;
break;
case REVERB_DATA_TYPE_SUB_VOLUME:
- gAudioContext.synthesisReverbs[reverbIndex].subVolume = data;
+ gAudioCtx.synthesisReverbs[reverbIndex].subVolume = data;
break;
case REVERB_DATA_TYPE_VOLUME:
- gAudioContext.synthesisReverbs[reverbIndex].volume = data;
+ gAudioCtx.synthesisReverbs[reverbIndex].volume = data;
break;
case REVERB_DATA_TYPE_LEAK_RIGHT:
- gAudioContext.synthesisReverbs[reverbIndex].leakRtl = data;
+ gAudioCtx.synthesisReverbs[reverbIndex].leakRtl = data;
break;
case REVERB_DATA_TYPE_LEAK_LEFT:
- gAudioContext.synthesisReverbs[reverbIndex].leakLtr = data;
+ gAudioCtx.synthesisReverbs[reverbIndex].leakLtr = data;
break;
case REVERB_DATA_TYPE_FILTER_LEFT:
if (data != 0) {
if (isFirstInit || (reverb->filterLeftInit == NULL)) {
- reverb->filterLeftState = AudioHeap_AllocDmaMemoryZeroed(&gAudioContext.miscPool,
- 2 * (FILTER_BUF_PART1 + FILTER_BUF_PART2));
- reverb->filterLeftInit = AudioHeap_AllocDmaMemory(&gAudioContext.miscPool, FILTER_SIZE);
+ reverb->filterLeftState =
+ AudioHeap_AllocDmaMemoryZeroed(&gAudioCtx.miscPool, 2 * (FILTER_BUF_PART1 + FILTER_BUF_PART2));
+ reverb->filterLeftInit = AudioHeap_AllocDmaMemory(&gAudioCtx.miscPool, FILTER_SIZE);
}
reverb->filterLeft = reverb->filterLeftInit;
@@ -1627,9 +1617,9 @@ void AudioHeap_SetReverbData(s32 reverbIndex, u32 dataType, s32 data, s32 isFirs
case REVERB_DATA_TYPE_FILTER_RIGHT:
if (data != 0) {
if (isFirstInit || (reverb->filterRightInit == NULL)) {
- reverb->filterRightState = AudioHeap_AllocDmaMemoryZeroed(
- &gAudioContext.miscPool, 2 * (FILTER_BUF_PART1 + FILTER_BUF_PART2));
- reverb->filterRightInit = AudioHeap_AllocDmaMemory(&gAudioContext.miscPool, FILTER_SIZE);
+ reverb->filterRightState =
+ AudioHeap_AllocDmaMemoryZeroed(&gAudioCtx.miscPool, 2 * (FILTER_BUF_PART1 + FILTER_BUF_PART2));
+ reverb->filterRightInit = AudioHeap_AllocDmaMemory(&gAudioCtx.miscPool, FILTER_SIZE);
}
reverb->filterRight = reverb->filterRightInit;
if (reverb->filterRight != NULL) {
@@ -1658,7 +1648,7 @@ void AudioHeap_SetReverbData(s32 reverbIndex, u32 dataType, s32 data, s32 isFirs
}
void AudioHeap_InitReverb(s32 reverbIndex, ReverbSettings* settings, s32 isFirstInit) {
- SynthesisReverb* reverb = &gAudioContext.synthesisReverbs[reverbIndex];
+ SynthesisReverb* reverb = &gAudioCtx.synthesisReverbs[reverbIndex];
if (isFirstInit) {
reverb->delayNumSamplesAfterDownsampling = settings->delayNumSamples / settings->downsampleRate;
@@ -1684,10 +1674,8 @@ void AudioHeap_InitReverb(s32 reverbIndex, ReverbSettings* settings, s32 isFirst
reverb->useReverb = 8; // used as a boolean
if (isFirstInit) {
- reverb->leftReverbBuf =
- AudioHeap_AllocZeroedAttemptExternal(&gAudioContext.miscPool, reverb->delayNumSamples * 2);
- reverb->rightReverbBuf =
- AudioHeap_AllocZeroedAttemptExternal(&gAudioContext.miscPool, reverb->delayNumSamples * 2);
+ reverb->leftReverbBuf = AudioHeap_AllocZeroedAttemptExternal(&gAudioCtx.miscPool, reverb->delayNumSamples * 2);
+ reverb->rightReverbBuf = AudioHeap_AllocZeroedAttemptExternal(&gAudioCtx.miscPool, reverb->delayNumSamples * 2);
reverb->resampleFlags = 1;
reverb->nextReverbBufPos = 0;
reverb->delayNumSamplesUnk = 0;
diff --git a/src/code/audio/audio_load.c b/src/audio/lib/load.c
similarity index 76%
rename from src/code/audio/audio_load.c
rename to src/audio/lib/load.c
index c9b5ad30b..3a4f1c1e0 100644
--- a/src/code/audio/audio_load.c
+++ b/src/audio/lib/load.c
@@ -11,6 +11,7 @@
*/
#include "global.h"
+#include "buffers.h"
/**
* SoundFont Notes:
@@ -92,38 +93,38 @@ s32 D_801FD1E0;
DmaHandler sDmaHandler = osEPiStartDma;
void* sUnusedHandler = NULL;
-s32 gAudioContextInitalized = false;
+s32 gAudioCtxInitalized = false;
void AudioLoad_DecreaseSampleDmaTtls(void) {
u32 i;
- for (i = 0; i < gAudioContext.sampleDmaListSize1; i++) {
- SampleDma* dma = &gAudioContext.sampleDmas[i];
+ for (i = 0; i < gAudioCtx.sampleDmaListSize1; i++) {
+ SampleDma* dma = &gAudioCtx.sampleDmas[i];
if (dma->ttl != 0) {
dma->ttl--;
if (dma->ttl == 0) {
- dma->reuseIndex = gAudioContext.sampleDmaReuseQueue1WrPos;
- gAudioContext.sampleDmaReuseQueue1[gAudioContext.sampleDmaReuseQueue1WrPos] = i;
- gAudioContext.sampleDmaReuseQueue1WrPos++;
+ dma->reuseIndex = gAudioCtx.sampleDmaReuseQueue1WrPos;
+ gAudioCtx.sampleDmaReuseQueue1[gAudioCtx.sampleDmaReuseQueue1WrPos] = i;
+ gAudioCtx.sampleDmaReuseQueue1WrPos++;
}
}
}
- for (i = gAudioContext.sampleDmaListSize1; i < gAudioContext.sampleDmaCount; i++) {
- SampleDma* dma = &gAudioContext.sampleDmas[i];
+ for (i = gAudioCtx.sampleDmaListSize1; i < gAudioCtx.sampleDmaCount; i++) {
+ SampleDma* dma = &gAudioCtx.sampleDmas[i];
if (dma->ttl != 0) {
dma->ttl--;
if (dma->ttl == 0) {
- dma->reuseIndex = gAudioContext.sampleDmaReuseQueue2WrPos;
- gAudioContext.sampleDmaReuseQueue2[gAudioContext.sampleDmaReuseQueue2WrPos] = i;
- gAudioContext.sampleDmaReuseQueue2WrPos++;
+ dma->reuseIndex = gAudioCtx.sampleDmaReuseQueue2WrPos;
+ gAudioCtx.sampleDmaReuseQueue2[gAudioCtx.sampleDmaReuseQueue2WrPos] = i;
+ gAudioCtx.sampleDmaReuseQueue2WrPos++;
}
}
}
- gAudioContext.unused2648 = 0;
+ gAudioCtx.unused2648 = 0;
}
void* AudioLoad_DmaSampleData(uintptr_t devAddr, size_t size, s32 arg2, u8* dmaIndexRef, s32 medium) {
@@ -137,24 +138,22 @@ void* AudioLoad_DmaSampleData(uintptr_t devAddr, size_t size, s32 arg2, u8* dmaI
s32 bufferPos;
u32 i;
- if (arg2 != 0 || *dmaIndexRef >= gAudioContext.sampleDmaListSize1) {
- for (i = gAudioContext.sampleDmaListSize1; i < gAudioContext.sampleDmaCount; i++) {
- dma = &gAudioContext.sampleDmas[i];
+ 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)) {
// We already have a DMA request for this memory range.
- if (dma->ttl == 0 &&
- gAudioContext.sampleDmaReuseQueue2RdPos != gAudioContext.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 != gAudioContext.sampleDmaReuseQueue2RdPos) {
- gAudioContext.sampleDmaReuseQueue2[dma->reuseIndex] =
- gAudioContext.sampleDmaReuseQueue2[gAudioContext.sampleDmaReuseQueue2RdPos];
- gAudioContext
- .sampleDmas[gAudioContext.sampleDmaReuseQueue2[gAudioContext.sampleDmaReuseQueue2RdPos]]
+ if (dma->reuseIndex != gAudioCtx.sampleDmaReuseQueue2RdPos) {
+ gAudioCtx.sampleDmaReuseQueue2[dma->reuseIndex] =
+ gAudioCtx.sampleDmaReuseQueue2[gAudioCtx.sampleDmaReuseQueue2RdPos];
+ gAudioCtx.sampleDmas[gAudioCtx.sampleDmaReuseQueue2[gAudioCtx.sampleDmaReuseQueue2RdPos]]
.reuseIndex = dma->reuseIndex;
}
- gAudioContext.sampleDmaReuseQueue2RdPos++;
+ gAudioCtx.sampleDmaReuseQueue2RdPos++;
}
dma->ttl = 32;
*dmaIndexRef = (u8)i;
@@ -166,16 +165,16 @@ void* AudioLoad_DmaSampleData(uintptr_t devAddr, size_t size, s32 arg2, u8* dmaI
goto search_short_lived;
}
- if (gAudioContext.sampleDmaReuseQueue2RdPos != gAudioContext.sampleDmaReuseQueue2WrPos && arg2 != 0) {
+ if (gAudioCtx.sampleDmaReuseQueue2RdPos != gAudioCtx.sampleDmaReuseQueue2WrPos && arg2 != 0) {
// Allocate a DMA from reuse queue 2, unless full.
- dmaIndex = gAudioContext.sampleDmaReuseQueue2[gAudioContext.sampleDmaReuseQueue2RdPos];
- gAudioContext.sampleDmaReuseQueue2RdPos++;
- dma = gAudioContext.sampleDmas + dmaIndex;
+ dmaIndex = gAudioCtx.sampleDmaReuseQueue2[gAudioCtx.sampleDmaReuseQueue2RdPos];
+ gAudioCtx.sampleDmaReuseQueue2RdPos++;
+ dma = gAudioCtx.sampleDmas + dmaIndex;
hasDma = true;
}
} else {
search_short_lived:
- dma = gAudioContext.sampleDmas + *dmaIndexRef;
+ dma = gAudioCtx.sampleDmas + *dmaIndexRef;
i = 0;
again:
bufferPos = devAddr - dma->devAddr;
@@ -184,31 +183,30 @@ void* AudioLoad_DmaSampleData(uintptr_t devAddr, size_t size, s32 arg2, u8* dmaI
if (dma->ttl == 0) {
// Move the DMA out of the reuse queue, by swapping it with the
// read pos, and then incrementing the read pos.
- if (dma->reuseIndex != gAudioContext.sampleDmaReuseQueue1RdPos) {
- gAudioContext.sampleDmaReuseQueue1[dma->reuseIndex] =
- gAudioContext.sampleDmaReuseQueue1[gAudioContext.sampleDmaReuseQueue1RdPos];
- gAudioContext
- .sampleDmas[gAudioContext.sampleDmaReuseQueue1[gAudioContext.sampleDmaReuseQueue1RdPos]]
+ if (dma->reuseIndex != gAudioCtx.sampleDmaReuseQueue1RdPos) {
+ gAudioCtx.sampleDmaReuseQueue1[dma->reuseIndex] =
+ gAudioCtx.sampleDmaReuseQueue1[gAudioCtx.sampleDmaReuseQueue1RdPos];
+ gAudioCtx.sampleDmas[gAudioCtx.sampleDmaReuseQueue1[gAudioCtx.sampleDmaReuseQueue1RdPos]]
.reuseIndex = dma->reuseIndex;
}
- gAudioContext.sampleDmaReuseQueue1RdPos++;
+ gAudioCtx.sampleDmaReuseQueue1RdPos++;
}
dma->ttl = 2;
return dma->ramAddr + (devAddr - dma->devAddr);
}
- dma = gAudioContext.sampleDmas + i++;
- if (i <= gAudioContext.sampleDmaListSize1) {
+ dma = gAudioCtx.sampleDmas + i++;
+ if (i <= gAudioCtx.sampleDmaListSize1) {
goto again;
}
}
if (!hasDma) {
- if (gAudioContext.sampleDmaReuseQueue1RdPos == gAudioContext.sampleDmaReuseQueue1WrPos) {
+ if (gAudioCtx.sampleDmaReuseQueue1RdPos == gAudioCtx.sampleDmaReuseQueue1WrPos) {
return NULL;
}
// Allocate a DMA from reuse queue 1.
- dmaIndex = gAudioContext.sampleDmaReuseQueue1[gAudioContext.sampleDmaReuseQueue1RdPos++];
- dma = gAudioContext.sampleDmas + dmaIndex;
+ dmaIndex = gAudioCtx.sampleDmaReuseQueue1[gAudioCtx.sampleDmaReuseQueue1RdPos++];
+ dma = gAudioCtx.sampleDmas + dmaIndex;
hasDma = true;
}
@@ -217,9 +215,8 @@ void* AudioLoad_DmaSampleData(uintptr_t devAddr, size_t size, s32 arg2, u8* dmaI
dma->ttl = 3;
dma->devAddr = dmaDevAddr;
dma->sizeUnused = transfer;
- AudioLoad_Dma(&gAudioContext.currAudioFrameDmaIoMesgBuf[gAudioContext.curAudioFrameDmaCount++], OS_MESG_PRI_NORMAL,
- OS_READ, dmaDevAddr, dma->ramAddr, transfer, &gAudioContext.curAudioFrameDmaQueue, medium,
- "SUPERDMA");
+ AudioLoad_Dma(&gAudioCtx.currAudioFrameDmaIoMesgBuf[gAudioCtx.curAudioFrameDmaCount++], OS_MESG_PRI_NORMAL, OS_READ,
+ dmaDevAddr, dma->ramAddr, transfer, &gAudioCtx.curAudioFrameDmaQueue, medium, "SUPERDMA");
*dmaIndexRef = dmaIndex;
return (devAddr - dmaDevAddr) + dma->ramAddr;
}
@@ -233,78 +230,77 @@ void AudioLoad_InitSampleDmaBuffers(s32 numNotes) {
s32 t2;
s32 j;
- gAudioContext.sampleDmaBufSize = gAudioContext.sampleDmaBufSize1;
- gAudioContext.sampleDmas =
- AudioHeap_Alloc(&gAudioContext.miscPool,
- 4 * gAudioContext.numNotes * sizeof(SampleDma) * gAudioContext.audioBufferParameters.specUnk4);
- t2 = 3 * gAudioContext.numNotes * gAudioContext.audioBufferParameters.specUnk4;
+ gAudioCtx.sampleDmaBufSize = gAudioCtx.sampleDmaBufSize1;
+ gAudioCtx.sampleDmas = AudioHeap_Alloc(&gAudioCtx.miscPool, 4 * gAudioCtx.numNotes * sizeof(SampleDma) *
+ gAudioCtx.audioBufferParameters.specUnk4);
+ t2 = 3 * gAudioCtx.numNotes * gAudioCtx.audioBufferParameters.specUnk4;
// First 3/4 sampleDmas
for (i = 0; i < t2; i++) {
- dma = &gAudioContext.sampleDmas[gAudioContext.sampleDmaCount];
- dma->ramAddr = AudioHeap_AllocAttemptExternal(&gAudioContext.miscPool, gAudioContext.sampleDmaBufSize);
+ dma = &gAudioCtx.sampleDmas[gAudioCtx.sampleDmaCount];
+ dma->ramAddr = AudioHeap_AllocAttemptExternal(&gAudioCtx.miscPool, gAudioCtx.sampleDmaBufSize);
if (dma->ramAddr == NULL) {
break;
} else {
- AudioHeap_WritebackDCache(dma->ramAddr, gAudioContext.sampleDmaBufSize);
- dma->size = gAudioContext.sampleDmaBufSize;
+ AudioHeap_WritebackDCache(dma->ramAddr, gAudioCtx.sampleDmaBufSize);
+ dma->size = gAudioCtx.sampleDmaBufSize;
dma->devAddr = 0;
dma->sizeUnused = 0;
dma->unused = 0;
dma->ttl = 0;
- gAudioContext.sampleDmaCount++;
+ gAudioCtx.sampleDmaCount++;
}
}
- for (i = 0; (u32)i < gAudioContext.sampleDmaCount; i++) {
- gAudioContext.sampleDmaReuseQueue1[i] = i;
- gAudioContext.sampleDmas[i].reuseIndex = i;
+ for (i = 0; (u32)i < gAudioCtx.sampleDmaCount; i++) {
+ gAudioCtx.sampleDmaReuseQueue1[i] = i;
+ gAudioCtx.sampleDmas[i].reuseIndex = i;
}
- for (i = gAudioContext.sampleDmaCount; i < 0x100; i++) {
- gAudioContext.sampleDmaReuseQueue1[i] = 0;
+ for (i = gAudioCtx.sampleDmaCount; i < 0x100; i++) {
+ gAudioCtx.sampleDmaReuseQueue1[i] = 0;
}
- gAudioContext.sampleDmaReuseQueue1RdPos = 0;
- gAudioContext.sampleDmaReuseQueue1WrPos = gAudioContext.sampleDmaCount;
- gAudioContext.sampleDmaListSize1 = gAudioContext.sampleDmaCount;
- gAudioContext.sampleDmaBufSize = gAudioContext.sampleDmaBufSize2;
+ gAudioCtx.sampleDmaReuseQueue1RdPos = 0;
+ gAudioCtx.sampleDmaReuseQueue1WrPos = gAudioCtx.sampleDmaCount;
+ gAudioCtx.sampleDmaListSize1 = gAudioCtx.sampleDmaCount;
+ gAudioCtx.sampleDmaBufSize = gAudioCtx.sampleDmaBufSize2;
- for (j = 0; j < gAudioContext.numNotes; j++) {
- dma = &gAudioContext.sampleDmas[gAudioContext.sampleDmaCount];
- dma->ramAddr = AudioHeap_AllocAttemptExternal(&gAudioContext.miscPool, gAudioContext.sampleDmaBufSize);
+ for (j = 0; j < gAudioCtx.numNotes; j++) {
+ dma = &gAudioCtx.sampleDmas[gAudioCtx.sampleDmaCount];
+ dma->ramAddr = AudioHeap_AllocAttemptExternal(&gAudioCtx.miscPool, gAudioCtx.sampleDmaBufSize);
if (dma->ramAddr == NULL) {
break;
} else {
- AudioHeap_WritebackDCache(dma->ramAddr, gAudioContext.sampleDmaBufSize);
- dma->size = gAudioContext.sampleDmaBufSize;
+ AudioHeap_WritebackDCache(dma->ramAddr, gAudioCtx.sampleDmaBufSize);
+ dma->size = gAudioCtx.sampleDmaBufSize;
dma->devAddr = 0;
dma->sizeUnused = 0;
dma->unused = 0;
dma->ttl = 0;
- gAudioContext.sampleDmaCount++;
+ gAudioCtx.sampleDmaCount++;
}
}
- for (i = gAudioContext.sampleDmaListSize1; (u32)i < gAudioContext.sampleDmaCount; i++) {
- gAudioContext.sampleDmaReuseQueue2[i - gAudioContext.sampleDmaListSize1] = i;
- gAudioContext.sampleDmas[i].reuseIndex = i - gAudioContext.sampleDmaListSize1;
+ for (i = gAudioCtx.sampleDmaListSize1; (u32)i < gAudioCtx.sampleDmaCount; i++) {
+ gAudioCtx.sampleDmaReuseQueue2[i - gAudioCtx.sampleDmaListSize1] = i;
+ gAudioCtx.sampleDmas[i].reuseIndex = i - gAudioCtx.sampleDmaListSize1;
}
- for (i = gAudioContext.sampleDmaCount; i < 0x100; i++) {
- gAudioContext.sampleDmaReuseQueue2[i] = gAudioContext.sampleDmaListSize1;
+ for (i = gAudioCtx.sampleDmaCount; i < 0x100; i++) {
+ gAudioCtx.sampleDmaReuseQueue2[i] = gAudioCtx.sampleDmaListSize1;
}
- gAudioContext.sampleDmaReuseQueue2RdPos = 0;
- gAudioContext.sampleDmaReuseQueue2WrPos = gAudioContext.sampleDmaCount - gAudioContext.sampleDmaListSize1;
+ gAudioCtx.sampleDmaReuseQueue2RdPos = 0;
+ gAudioCtx.sampleDmaReuseQueue2WrPos = gAudioCtx.sampleDmaCount - gAudioCtx.sampleDmaListSize1;
}
s32 AudioLoad_IsFontLoadComplete(s32 fontId) {
if (fontId == 0xFF) {
return true;
- } else if (gAudioContext.fontLoadStatus[fontId] >= LOAD_STATUS_COMPLETE) {
+ } else if (gAudioCtx.fontLoadStatus[fontId] >= LOAD_STATUS_COMPLETE) {
return true;
- } else if (gAudioContext.fontLoadStatus[AudioLoad_GetRealTableIndex(FONT_TABLE, fontId)] >= LOAD_STATUS_COMPLETE) {
+ } else if (gAudioCtx.fontLoadStatus[AudioLoad_GetRealTableIndex(FONT_TABLE, fontId)] >= LOAD_STATUS_COMPLETE) {
return true;
} else {
return false;
@@ -314,10 +310,9 @@ s32 AudioLoad_IsFontLoadComplete(s32 fontId) {
s32 AudioLoad_IsSeqLoadComplete(s32 seqId) {
if (seqId == 0xFF) {
return true;
- } else if (gAudioContext.seqLoadStatus[seqId] >= LOAD_STATUS_COMPLETE) {
+ } else if (gAudioCtx.seqLoadStatus[seqId] >= LOAD_STATUS_COMPLETE) {
return true;
- } else if (gAudioContext.seqLoadStatus[AudioLoad_GetRealTableIndex(SEQUENCE_TABLE, seqId)] >=
- LOAD_STATUS_COMPLETE) {
+ } else if (gAudioCtx.seqLoadStatus[AudioLoad_GetRealTableIndex(SEQUENCE_TABLE, seqId)] >= LOAD_STATUS_COMPLETE) {
return true;
} else {
return false;
@@ -327,9 +322,9 @@ s32 AudioLoad_IsSeqLoadComplete(s32 seqId) {
s32 AudioLoad_IsSampleLoadComplete(s32 sampleBankId) {
if (sampleBankId == 0xFF) {
return true;
- } else if (gAudioContext.sampleFontLoadStatus[sampleBankId] >= LOAD_STATUS_COMPLETE) {
+ } else if (gAudioCtx.sampleFontLoadStatus[sampleBankId] >= LOAD_STATUS_COMPLETE) {
return true;
- } else if (gAudioContext.sampleFontLoadStatus[AudioLoad_GetRealTableIndex(SAMPLE_TABLE, sampleBankId)] >=
+ } else if (gAudioCtx.sampleFontLoadStatus[AudioLoad_GetRealTableIndex(SAMPLE_TABLE, sampleBankId)] >=
LOAD_STATUS_COMPLETE) {
return true;
} else {
@@ -338,33 +333,33 @@ s32 AudioLoad_IsSampleLoadComplete(s32 sampleBankId) {
}
void AudioLoad_SetFontLoadStatus(s32 fontId, s32 loadStatus) {
- if ((fontId != 0xFF) && (gAudioContext.fontLoadStatus[fontId] != LOAD_STATUS_PERMANENT)) {
- gAudioContext.fontLoadStatus[fontId] = loadStatus;
+ if ((fontId != 0xFF) && (gAudioCtx.fontLoadStatus[fontId] != LOAD_STATUS_PERMANENT)) {
+ gAudioCtx.fontLoadStatus[fontId] = loadStatus;
}
}
void AudioLoad_SetSeqLoadStatus(s32 seqId, s32 loadStatus) {
- if ((seqId != 0xFF) && (gAudioContext.seqLoadStatus[seqId] != LOAD_STATUS_PERMANENT)) {
- gAudioContext.seqLoadStatus[seqId] = loadStatus;
+ if ((seqId != 0xFF) && (gAudioCtx.seqLoadStatus[seqId] != LOAD_STATUS_PERMANENT)) {
+ gAudioCtx.seqLoadStatus[seqId] = loadStatus;
}
}
void AudioLoad_SetSampleFontLoadStatusAndApplyCaches(s32 sampleBankId, s32 loadStatus) {
if (sampleBankId != 0xFF) {
- if (gAudioContext.sampleFontLoadStatus[sampleBankId] != LOAD_STATUS_PERMANENT) {
- gAudioContext.sampleFontLoadStatus[sampleBankId] = loadStatus;
+ if (gAudioCtx.sampleFontLoadStatus[sampleBankId] != LOAD_STATUS_PERMANENT) {
+ gAudioCtx.sampleFontLoadStatus[sampleBankId] = loadStatus;
}
- if ((gAudioContext.sampleFontLoadStatus[sampleBankId] == LOAD_STATUS_PERMANENT) ||
- (gAudioContext.sampleFontLoadStatus[sampleBankId] == LOAD_STATUS_COMPLETE)) {
+ if ((gAudioCtx.sampleFontLoadStatus[sampleBankId] == LOAD_STATUS_PERMANENT) ||
+ (gAudioCtx.sampleFontLoadStatus[sampleBankId] == LOAD_STATUS_COMPLETE)) {
AudioHeap_ApplySampleBankCache(sampleBankId);
}
}
}
void AudioLoad_SetSampleFontLoadStatus(s32 sampleBankId, s32 loadStatus) {
- if ((sampleBankId != 0xFF) && (gAudioContext.sampleFontLoadStatus[sampleBankId] != LOAD_STATUS_PERMANENT)) {
- gAudioContext.sampleFontLoadStatus[sampleBankId] = loadStatus;
+ if ((sampleBankId != 0xFF) && (gAudioCtx.sampleFontLoadStatus[sampleBankId] != LOAD_STATUS_PERMANENT)) {
+ gAudioCtx.sampleFontLoadStatus[sampleBankId] = loadStatus;
}
}
@@ -389,16 +384,16 @@ SoundFontData* AudioLoad_SyncLoadSeqFonts(s32 seqId, u32* outDefaultFontId) {
s32 fontId;
s32 i;
- if (seqId >= gAudioContext.numSequences) {
+ if (seqId >= gAudioCtx.numSequences) {
return NULL;
}
fontId = 0xFF;
- index = ((u16*)gAudioContext.sequenceFontTable)[seqId];
- numFonts = gAudioContext.sequenceFontTable[index++];
+ index = ((u16*)gAudioCtx.sequenceFontTable)[seqId];
+ numFonts = gAudioCtx.sequenceFontTable[index++];
while (numFonts > 0) {
- fontId = gAudioContext.sequenceFontTable[index++];
+ fontId = gAudioCtx.sequenceFontTable[index++];
fontData = AudioLoad_SyncLoadFont(fontId);
numFonts--;
}
@@ -411,7 +406,7 @@ void AudioLoad_SyncLoadSeqParts(s32 seqId, s32 arg1, s32 arg2, OSMesgQueue* arg3
s32 pad;
u32 defaultFontId;
- if (seqId < gAudioContext.numSequences) {
+ if (seqId < gAudioCtx.numSequences) {
if (arg1 & 2) {
AudioLoad_SyncLoadSeqFonts(seqId, &defaultFontId);
}
@@ -437,7 +432,7 @@ s32 AudioLoad_SyncLoadSample(Sample* sample, s32 fontId) {
if (sample->medium == MEDIUM_UNK) {
AudioLoad_SyncDmaUnkMedium(sample->sampleAddr, sampleAddr, sample->size,
- gAudioContext.sampleBankTable->unkMediumParam);
+ gAudioCtx.sampleBankTable->unkMediumParam);
} else {
AudioLoad_SyncDma(sample->sampleAddr, sampleAddr, sample->size, sample->medium);
}
@@ -493,23 +488,23 @@ void AudioLoad_AsyncLoadFont(s32 fontId, s32 arg1, s32 retData, OSMesgQueue* ret
}
u8* AudioLoad_GetFontsForSequence(s32 seqId, u32* outNumFonts) {
- s32 index = ((u16*)gAudioContext.sequenceFontTable)[seqId];
+ s32 index = ((u16*)gAudioCtx.sequenceFontTable)[seqId];
- *outNumFonts = gAudioContext.sequenceFontTable[index++];
+ *outNumFonts = gAudioCtx.sequenceFontTable[index++];
if (*outNumFonts == 0) {
return NULL;
}
- return &gAudioContext.sequenceFontTable[index];
+ return &gAudioCtx.sequenceFontTable[index];
}
void AudioLoad_DiscardSeqFonts(s32 seqId) {
s32 fontId;
- s32 index = ((u16*)gAudioContext.sequenceFontTable)[seqId];
- s32 numFonts = gAudioContext.sequenceFontTable[index++];
+ s32 index = ((u16*)gAudioCtx.sequenceFontTable)[seqId];
+ s32 numFonts = gAudioCtx.sequenceFontTable[index++];
while (numFonts > 0) {
numFonts--;
- fontId = AudioLoad_GetRealTableIndex(FONT_TABLE, gAudioContext.sequenceFontTable[index++]);
+ fontId = AudioLoad_GetRealTableIndex(FONT_TABLE, gAudioCtx.sequenceFontTable[index++]);
if (AudioHeap_SearchPermanentCache(FONT_TABLE, fontId) == NULL) {
AudioLoad_DiscardFont(fontId);
AudioLoad_SetFontLoadStatus(fontId, LOAD_STATUS_NOT_LOADED);
@@ -519,7 +514,7 @@ void AudioLoad_DiscardSeqFonts(s32 seqId) {
void AudioLoad_DiscardFont(s32 fontId) {
u32 i;
- AudioCache* pool = &gAudioContext.fontCache;
+ AudioCache* pool = &gAudioCtx.fontCache;
AudioPersistentCache* persistent;
if (fontId == pool->temporary.entries[0].id) {
@@ -556,11 +551,11 @@ void func_8018FA60(u32 tableType, u32 id, s32 type, s32 data) {
}
s32 AudioLoad_SyncInitSeqPlayer(s32 playerIndex, s32 seqId, s32 arg2) {
- if (gAudioContext.resetTimer != 0) {
+ if (gAudioCtx.resetTimer != 0) {
return 0;
}
- gAudioContext.seqPlayers[playerIndex].skipTicks = 0;
+ gAudioCtx.seqPlayers[playerIndex].skipTicks = 0;
AudioLoad_SyncInitSeqPlayerInternal(playerIndex, seqId, arg2);
// Intentionally missing return. Returning the result of the above function
// call matches but is UB because it too is missing a return, and using the
@@ -569,35 +564,35 @@ s32 AudioLoad_SyncInitSeqPlayer(s32 playerIndex, s32 seqId, s32 arg2) {
}
s32 AudioLoad_SyncInitSeqPlayerSkipTicks(s32 playerIndex, s32 seqId, s32 skipTicks) {
- if (gAudioContext.resetTimer != 0) {
+ if (gAudioCtx.resetTimer != 0) {
return 0;
}
- gAudioContext.seqPlayers[playerIndex].skipTicks = skipTicks;
+ gAudioCtx.seqPlayers[playerIndex].skipTicks = skipTicks;
AudioLoad_SyncInitSeqPlayerInternal(playerIndex, seqId, 0);
// Missing return, see above.
}
s32 AudioLoad_SyncInitSeqPlayerInternal(s32 playerIndex, s32 seqId, s32 arg2) {
- SequencePlayer* seqPlayer = &gAudioContext.seqPlayers[playerIndex];
+ SequencePlayer* seqPlayer = &gAudioCtx.seqPlayers[playerIndex];
u8* seqData;
s32 index;
s32 numFonts;
s32 fontId;
- if (seqId >= gAudioContext.numSequences) {
+ if (seqId >= gAudioCtx.numSequences) {
return 0;
}
- AudioSeq_SequencePlayerDisable(seqPlayer);
+ AudioScript_SequencePlayerDisable(seqPlayer);
if (1) {}
fontId = 0xFF;
- index = ((u16*)gAudioContext.sequenceFontTable)[seqId];
- numFonts = gAudioContext.sequenceFontTable[index++];
+ index = ((u16*)gAudioCtx.sequenceFontTable)[seqId];
+ numFonts = gAudioCtx.sequenceFontTable[index++];
while (numFonts > 0) {
- fontId = gAudioContext.sequenceFontTable[index++];
+ fontId = gAudioCtx.sequenceFontTable[index++];
AudioLoad_SyncLoadFont(fontId);
numFonts--;
}
@@ -607,7 +602,7 @@ s32 AudioLoad_SyncInitSeqPlayerInternal(s32 playerIndex, s32 seqId, s32 arg2) {
return 0;
}
- AudioSeq_ResetSequencePlayer(seqPlayer);
+ AudioScript_ResetSequencePlayer(seqPlayer);
seqPlayer->seqId = seqId;
if (fontId != 0xFF) {
@@ -630,7 +625,7 @@ u8* AudioLoad_SyncLoadSeq(s32 seqId) {
s32 pad;
s32 didAllocate;
- if (gAudioContext.seqLoadStatus[AudioLoad_GetRealTableIndex(SEQUENCE_TABLE, seqId)] == LOAD_STATUS_IN_PROGRESS) {
+ if (gAudioCtx.seqLoadStatus[AudioLoad_GetRealTableIndex(SEQUENCE_TABLE, seqId)] == LOAD_STATUS_IN_PROGRESS) {
return NULL;
}
@@ -651,7 +646,7 @@ u32 AudioLoad_TrySyncLoadSampleBank(u32 sampleBankId, u32* outMedium, s32 noLoad
addr = AudioLoad_SearchCaches(SAMPLE_TABLE, realTableId);
if (addr != NULL) {
- if (gAudioContext.sampleFontLoadStatus[realTableId] != LOAD_STATUS_IN_PROGRESS) {
+ if (gAudioCtx.sampleFontLoadStatus[realTableId] != LOAD_STATUS_IN_PROGRESS) {
AudioLoad_SetSampleFontLoadStatus(realTableId, LOAD_STATUS_COMPLETE);
}
@@ -684,12 +679,12 @@ SoundFontData* AudioLoad_SyncLoadFont(u32 fontId) {
SampleBankRelocInfo sampleBankReloc;
s32 realFontId = AudioLoad_GetRealTableIndex(FONT_TABLE, fontId);
- if (gAudioContext.fontLoadStatus[realFontId] == LOAD_STATUS_IN_PROGRESS) {
+ if (gAudioCtx.fontLoadStatus[realFontId] == LOAD_STATUS_IN_PROGRESS) {
return NULL;
}
- sampleBankId1 = gAudioContext.soundFontList[realFontId].sampleBankId1;
- sampleBankId2 = gAudioContext.soundFontList[realFontId].sampleBankId2;
+ sampleBankId1 = gAudioCtx.soundFontList[realFontId].sampleBankId1;
+ sampleBankId2 = gAudioCtx.soundFontList[realFontId].sampleBankId2;
sampleBankReloc.sampleBankId1 = sampleBankId1;
sampleBankReloc.sampleBankId2 = sampleBankId2;
@@ -780,7 +775,7 @@ void* AudioLoad_SyncLoad(s32 tableType, u32 id, s32* didAllocate) {
}
if (tableType == FONT_TABLE) {
- SoundFont* soundFont = &gAudioContext.soundFontList[realId];
+ SoundFont* soundFont = &gAudioCtx.soundFontList[realId];
soundFont->numInstruments = ((UnloadedFonts*)romAddr)->numInstruments;
soundFont->numDrums = ((UnloadedFonts*)romAddr)->numDrums;
@@ -847,16 +842,16 @@ AudioTable* AudioLoad_GetLoadTable(s32 tableType) {
switch (tableType) {
case SEQUENCE_TABLE:
- table = gAudioContext.sequenceTable;
+ table = gAudioCtx.sequenceTable;
break;
case FONT_TABLE:
- table = gAudioContext.soundFontTable;
+ table = gAudioCtx.soundFontTable;
break;
default:
table = NULL;
break;
case SAMPLE_TABLE:
- table = gAudioContext.sampleBankTable;
+ table = gAudioCtx.sampleBankTable;
break;
}
return table;
@@ -877,9 +872,9 @@ void AudioLoad_RelocateFont(s32 fontId, SoundFontData* fontDataStartAddr, Sample
Drum* drum;
SoundEffect* soundEffect;
s32 i;
- s32 numDrums = gAudioContext.soundFontList[fontId].numDrums;
- s32 numInstruments = gAudioContext.soundFontList[fontId].numInstruments;
- s32 numSfx = gAudioContext.soundFontList[fontId].numSfx;
+ s32 numDrums = gAudioCtx.soundFontList[fontId].numDrums;
+ s32 numInstruments = gAudioCtx.soundFontList[fontId].numInstruments;
+ s32 numSfx = gAudioCtx.soundFontList[fontId].numSfx;
u32* fontData = (u32*)fontDataStartAddr;
// Relocate an offset (relative to the start of the font data) to a pointer (a ram address)
@@ -985,14 +980,14 @@ void AudioLoad_RelocateFont(s32 fontId, SoundFontData* fontDataStartAddr, Sample
#undef RELOC_TO_RAM
// Store the relocated pointers
- gAudioContext.soundFontList[fontId].drums = (Drum**)fontData[0];
- gAudioContext.soundFontList[fontId].soundEffects = (SoundEffect*)fontData[1];
- gAudioContext.soundFontList[fontId].instruments = (Instrument**)(&fontData[2]);
+ gAudioCtx.soundFontList[fontId].drums = (Drum**)fontData[0];
+ gAudioCtx.soundFontList[fontId].soundEffects = (SoundEffect*)fontData[1];
+ gAudioCtx.soundFontList[fontId].instruments = (Instrument**)(&fontData[2]);
}
void AudioLoad_SyncDma(uintptr_t devAddr, u8* ramAddr, size_t size, s32 medium) {
- OSMesgQueue* msgQueue = &gAudioContext.syncDmaQueue;
- OSIoMesg* ioMesg = &gAudioContext.syncDmaIoMesg;
+ OSMesgQueue* msgQueue = &gAudioCtx.syncDmaQueue;
+ OSIoMesg* ioMesg = &gAudioCtx.syncDmaIoMesg;
size = ALIGN16(size);
Audio_InvalDCache(ramAddr, size);
@@ -1021,19 +1016,19 @@ s32 AudioLoad_Dma(OSIoMesg* mesg, u32 priority, s32 direction, uintptr_t devAddr
OSMesgQueue* reqQueue, s32 medium, const char* dmaFuncType) {
OSPiHandle* handle;
- if (gAudioContext.resetTimer > 16) {
+ if (gAudioCtx.resetTimer > 16) {
return -1;
}
switch (medium) {
case MEDIUM_CART:
- handle = gAudioContext.cartHandle;
+ handle = gAudioCtx.cartHandle;
break;
case MEDIUM_DISK_DRIVE:
// driveHandle is uninitialized and corresponds to stubbed-out disk drive support.
// SM64 Shindou called osDriveRomInit here.
- handle = gAudioContext.driveHandle;
+ handle = gAudioCtx.driveHandle;
break;
default:
@@ -1077,19 +1072,19 @@ void* AudioLoad_AsyncLoadInner(s32 tableType, s32 id, s32 nChunks, s32 retData,
switch (tableType) {
case SEQUENCE_TABLE:
- if (gAudioContext.seqLoadStatus[realId] == LOAD_STATUS_IN_PROGRESS) {
+ if (gAudioCtx.seqLoadStatus[realId] == LOAD_STATUS_IN_PROGRESS) {
return NULL;
}
break;
case FONT_TABLE:
- if (gAudioContext.fontLoadStatus[realId] == LOAD_STATUS_IN_PROGRESS) {
+ if (gAudioCtx.fontLoadStatus[realId] == LOAD_STATUS_IN_PROGRESS) {
return NULL;
}
break;
case SAMPLE_TABLE:
- if (gAudioContext.sampleFontLoadStatus[realId] == LOAD_STATUS_IN_PROGRESS) {
+ if (gAudioCtx.sampleFontLoadStatus[realId] == LOAD_STATUS_IN_PROGRESS) {
return NULL;
}
break;
@@ -1146,7 +1141,7 @@ void* AudioLoad_AsyncLoadInner(s32 tableType, s32 id, s32 nChunks, s32 retData,
}
if (tableType == FONT_TABLE) {
- soundFont = &gAudioContext.soundFontList[realId];
+ soundFont = &gAudioCtx.soundFontList[realId];
soundFont->numInstruments = ((UnloadedFonts*)romAddr)->numInstruments;
soundFont->numDrums = ((UnloadedFonts*)romAddr)->numDrums;
@@ -1199,8 +1194,8 @@ void AudioLoad_SetUnusedHandler(void* callback) {
}
void AudioLoad_InitSoundFont(s32 fontId) {
- SoundFont* font = &gAudioContext.soundFontList[fontId];
- AudioTableEntry* entry = &gAudioContext.soundFontTable->entries[fontId];
+ SoundFont* font = &gAudioCtx.soundFontList[fontId];
+ AudioTableEntry* entry = &gAudioCtx.soundFontTable->entries[fontId];
font->sampleBankId1 = (entry->shortData1 >> 8) & 0xFF;
font->sampleBankId2 = (entry->shortData1) & 0xFF;
@@ -1213,129 +1208,129 @@ void AudioLoad_Init(void* heap, size_t heapSize) {
s32 pad1[9];
s32 numFonts;
s32 pad2[2];
- u8* audioContextPtr;
+ u8* audioCtxPtr;
void* addr;
s32 i;
s32 j;
- gCustomAudioUpdateFunction = NULL;
- gCustomAudioReverbFunction = NULL;
- gCustomAudioSynthFunction = NULL;
+ gAudioCustomUpdateFunction = NULL;
+ gAudioCustomReverbFunction = NULL;
+ gAudioCustomSynthFunction = NULL;
- for (i = 0; i < ARRAY_COUNT(gAudioContext.unk_29A8); i++) {
- gAudioContext.unk_29A8[i] = NULL;
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.customSeqFunctions); i++) {
+ gAudioCtx.customSeqFunctions[i] = NULL;
}
- gAudioContext.resetTimer = 0;
- gAudioContext.unk_29B8 = false;
+ gAudioCtx.resetTimer = 0;
+ gAudioCtx.unk_29B8 = false;
- // Set all of gAudioContext to 0
- audioContextPtr = (u8*)&gAudioContext;
- for (j = sizeof(gAudioContext); j >= 0; j--) {
- *audioContextPtr++ = 0;
+ // Set all of gAudioCtx to 0
+ audioCtxPtr = (u8*)&gAudioCtx;
+ for (j = sizeof(gAudioCtx); j >= 0; j--) {
+ *audioCtxPtr++ = 0;
}
switch (osTvType) {
case OS_TV_PAL:
- gAudioContext.unk_2960 = 20.03042f;
- gAudioContext.refreshRate = 50;
+ gAudioCtx.unk_2960 = 20.03042f;
+ gAudioCtx.refreshRate = 50;
break;
case OS_TV_MPAL:
- gAudioContext.unk_2960 = 16.546f;
- gAudioContext.refreshRate = 60;
+ gAudioCtx.unk_2960 = 16.546f;
+ gAudioCtx.refreshRate = 60;
break;
case OS_TV_NTSC:
default:
- gAudioContext.unk_2960 = 16.713f;
- gAudioContext.refreshRate = 60;
+ gAudioCtx.unk_2960 = 16.713f;
+ gAudioCtx.refreshRate = 60;
}
AudioThread_InitMesgQueues();
- for (i = 0; i < ARRAY_COUNT(gAudioContext.aiBufNumSamples); i++) {
- gAudioContext.aiBufNumSamples[i] = 0xA0;
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.numSamplesPerFrame); i++) {
+ gAudioCtx.numSamplesPerFrame[i] = 0xA0;
}
- gAudioContext.totalTaskCount = 0;
- gAudioContext.rspTaskIndex = 0;
- gAudioContext.curAiBufferIndex = 0;
- gAudioContext.soundMode = SOUNDMODE_STEREO;
- gAudioContext.curTask = NULL;
- gAudioContext.rspTask[0].task.t.dataSize = 0;
- gAudioContext.rspTask[1].task.t.dataSize = 0;
+ gAudioCtx.totalTaskCount = 0;
+ gAudioCtx.rspTaskIndex = 0;
+ gAudioCtx.curAiBufferIndex = 0;
+ gAudioCtx.soundMode = SOUNDMODE_STEREO;
+ gAudioCtx.curTask = NULL;
+ gAudioCtx.rspTask[0].task.t.dataSize = 0;
+ gAudioCtx.rspTask[1].task.t.dataSize = 0;
- osCreateMesgQueue(&gAudioContext.syncDmaQueue, &gAudioContext.syncDmaMesg, 1);
- osCreateMesgQueue(&gAudioContext.curAudioFrameDmaQueue, gAudioContext.currAudioFrameDmaMesgBuf,
- ARRAY_COUNT(gAudioContext.currAudioFrameDmaMesgBuf));
- osCreateMesgQueue(&gAudioContext.externalLoadQueue, gAudioContext.externalLoadMesgBuf,
- ARRAY_COUNT(gAudioContext.externalLoadMesgBuf));
- osCreateMesgQueue(&gAudioContext.preloadSampleQueue, gAudioContext.preloadSampleMesgBuf,
- ARRAY_COUNT(gAudioContext.preloadSampleMesgBuf));
- gAudioContext.curAudioFrameDmaCount = 0;
- gAudioContext.sampleDmaCount = 0;
- gAudioContext.cartHandle = osCartRomInit();
+ osCreateMesgQueue(&gAudioCtx.syncDmaQueue, &gAudioCtx.syncDmaMesg, 1);
+ osCreateMesgQueue(&gAudioCtx.curAudioFrameDmaQueue, gAudioCtx.currAudioFrameDmaMesgBuf,
+ ARRAY_COUNT(gAudioCtx.currAudioFrameDmaMesgBuf));
+ osCreateMesgQueue(&gAudioCtx.externalLoadQueue, gAudioCtx.externalLoadMesgBuf,
+ ARRAY_COUNT(gAudioCtx.externalLoadMesgBuf));
+ osCreateMesgQueue(&gAudioCtx.preloadSampleQueue, gAudioCtx.preloadSampleMesgBuf,
+ ARRAY_COUNT(gAudioCtx.preloadSampleMesgBuf));
+ gAudioCtx.curAudioFrameDmaCount = 0;
+ gAudioCtx.sampleDmaCount = 0;
+ gAudioCtx.cartHandle = osCartRomInit();
if (heap == NULL) {
- gAudioContext.audioHeap = gAudioHeap;
- gAudioContext.audioHeapSize = gAudioHeapInitSizes.heapSize;
+ gAudioCtx.audioHeap = gAudioHeap;
+ gAudioCtx.audioHeapSize = gAudioHeapInitSizes.heapSize;
} else {
void** hp = &heap;
- gAudioContext.audioHeap = *hp;
- gAudioContext.audioHeapSize = heapSize;
+ gAudioCtx.audioHeap = *hp;
+ gAudioCtx.audioHeapSize = heapSize;
}
- for (i = 0; i < ((s32)gAudioContext.audioHeapSize / (s32)sizeof(u64)); i++) {
- ((u64*)gAudioContext.audioHeap)[i] = 0;
+ for (i = 0; i < ((s32)gAudioCtx.audioHeapSize / (s32)sizeof(u64)); i++) {
+ ((u64*)gAudioCtx.audioHeap)[i] = 0;
}
// Main Pool Split (split entirety of audio heap into initPool and sessionPool)
AudioHeap_InitMainPool(gAudioHeapInitSizes.initPoolSize);
// Initialize the audio interface buffers
- for (i = 0; i < ARRAY_COUNT(gAudioContext.aiBuffers); i++) {
- gAudioContext.aiBuffers[i] = AudioHeap_AllocZeroed(&gAudioContext.initPool, AIBUF_LEN * sizeof(s16));
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.aiBuffers); i++) {
+ gAudioCtx.aiBuffers[i] = AudioHeap_AllocZeroed(&gAudioCtx.initPool, AIBUF_LEN * sizeof(s16));
}
// Connect audio tables to their tables in memory
- gAudioContext.sequenceTable = (AudioTable*)gSequenceTable;
- gAudioContext.soundFontTable = (AudioTable*)gSoundFontTable;
- gAudioContext.sampleBankTable = (AudioTable*)gSampleBankTable;
- gAudioContext.sequenceFontTable = gSequenceFontTable;
+ gAudioCtx.sequenceTable = (AudioTable*)gSequenceTable;
+ gAudioCtx.soundFontTable = (AudioTable*)gSoundFontTable;
+ gAudioCtx.sampleBankTable = (AudioTable*)gSampleBankTable;
+ gAudioCtx.sequenceFontTable = gSequenceFontTable;
- gAudioContext.numSequences = gAudioContext.sequenceTable->numEntries;
+ gAudioCtx.numSequences = gAudioCtx.sequenceTable->numEntries;
- gAudioContext.audioResetSpecIdToLoad = 0;
- gAudioContext.resetStatus = 1; // Set reset to immediately initialize the audio heap
+ gAudioCtx.specId = 0;
+ gAudioCtx.resetStatus = 1; // Set reset to immediately initialize the audio heap
AudioHeap_ResetStep();
// Initialize audio tables
- AudioLoad_InitTable(gAudioContext.sequenceTable, SEGMENT_ROM_START(Audioseq), 0);
- AudioLoad_InitTable(gAudioContext.soundFontTable, SEGMENT_ROM_START(Audiobank), 0);
- AudioLoad_InitTable(gAudioContext.sampleBankTable, SEGMENT_ROM_START(Audiotable), 0);
+ AudioLoad_InitTable(gAudioCtx.sequenceTable, SEGMENT_ROM_START(Audioseq), 0);
+ AudioLoad_InitTable(gAudioCtx.soundFontTable, SEGMENT_ROM_START(Audiobank), 0);
+ AudioLoad_InitTable(gAudioCtx.sampleBankTable, SEGMENT_ROM_START(Audiotable), 0);
- numFonts = gAudioContext.soundFontTable->numEntries;
- gAudioContext.soundFontList = AudioHeap_Alloc(&gAudioContext.initPool, numFonts * sizeof(SoundFont));
+ numFonts = gAudioCtx.soundFontTable->numEntries;
+ gAudioCtx.soundFontList = AudioHeap_Alloc(&gAudioCtx.initPool, numFonts * sizeof(SoundFont));
for (i = 0; i < numFonts; i++) {
AudioLoad_InitSoundFont(i);
}
- if (addr = AudioHeap_Alloc(&gAudioContext.initPool, gAudioHeapInitSizes.permanentPoolSize), addr == NULL) {
+ if (addr = AudioHeap_Alloc(&gAudioCtx.initPool, gAudioHeapInitSizes.permanentPoolSize), addr == NULL) {
// cast away const from gAudioHeapInitSizes
*((u32*)&gAudioHeapInitSizes.permanentPoolSize) = 0;
}
- AudioHeap_InitPool(&gAudioContext.permanentPool, addr, gAudioHeapInitSizes.permanentPoolSize);
- gAudioContextInitalized = true;
- osSendMesg(gAudioContext.taskStartQueueP, (void*)gAudioContext.totalTaskCount, OS_MESG_NOBLOCK);
+ AudioHeap_InitPool(&gAudioCtx.permanentPool, addr, gAudioHeapInitSizes.permanentPoolSize);
+ gAudioCtxInitalized = true;
+ osSendMesg(gAudioCtx.taskStartQueueP, (void*)gAudioCtx.totalTaskCount, OS_MESG_NOBLOCK);
}
void AudioLoad_InitSlowLoads(void) {
- gAudioContext.slowLoads[0].status = 0;
- gAudioContext.slowLoads[1].status = 0;
+ gAudioCtx.slowLoads[0].status = 0;
+ gAudioCtx.slowLoads[1].status = 0;
}
s32 AudioLoad_SlowLoadSample(s32 fontId, s32 instId, s8* isDone) {
@@ -1353,7 +1348,7 @@ s32 AudioLoad_SlowLoadSample(s32 fontId, s32 instId, s8* isDone) {
return 0;
}
- slowLoad = &gAudioContext.slowLoads[gAudioContext.slowLoadPos];
+ slowLoad = &gAudioCtx.slowLoads[gAudioCtx.slowLoadPos];
if (slowLoad->status == LOAD_STATUS_DONE) {
slowLoad->status = LOAD_STATUS_WAITING;
}
@@ -1382,10 +1377,10 @@ s32 AudioLoad_SlowLoadSample(s32 fontId, s32 instId, s8* isDone) {
slowLoad->instId = instId;
if (slowLoad->medium == MEDIUM_UNK) {
- slowLoad->unkMediumParam = gAudioContext.sampleBankTable->unkMediumParam;
+ slowLoad->unkMediumParam = gAudioCtx.sampleBankTable->unkMediumParam;
}
- gAudioContext.slowLoadPos ^= 1;
+ gAudioCtx.slowLoadPos ^= 1;
return 0;
}
@@ -1442,9 +1437,9 @@ void AudioLoad_ProcessSlowLoads(s32 resetStatus) {
AudioSlowLoad* slowLoad;
s32 i;
- for (i = 0; i < ARRAY_COUNT(gAudioContext.slowLoads); i++) {
- slowLoad = &gAudioContext.slowLoads[i];
- switch (gAudioContext.slowLoads[i].status) {
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.slowLoads); i++) {
+ slowLoad = &gAudioCtx.slowLoads[i];
+ switch (gAudioCtx.slowLoads[i].status) {
case LOAD_STATUS_LOADING:
if (slowLoad->medium != MEDIUM_UNK) {
osRecvMesg(&slowLoad->msgqueue, NULL, OS_MESG_BLOCK);
@@ -1501,14 +1496,14 @@ s32 AudioLoad_SlowLoadSeq(s32 seqId, u8* ramAddr, s8* isDone) {
AudioTable* seqTable;
size_t size;
- if (seqId >= gAudioContext.numSequences) {
+ if (seqId >= gAudioCtx.numSequences) {
*isDone = 0;
return -1;
}
seqId = AudioLoad_GetRealTableIndex(SEQUENCE_TABLE, seqId);
seqTable = AudioLoad_GetLoadTable(SEQUENCE_TABLE);
- slowLoad = &gAudioContext.slowLoads[gAudioContext.slowLoadPos];
+ slowLoad = &gAudioCtx.slowLoads[gAudioCtx.slowLoadPos];
if (slowLoad->status == LOAD_STATUS_DONE) {
slowLoad->status = LOAD_STATUS_WAITING;
}
@@ -1529,15 +1524,15 @@ s32 AudioLoad_SlowLoadSeq(s32 seqId, u8* ramAddr, s8* isDone) {
slowLoad->unkMediumParam = seqTable->unkMediumParam;
}
- gAudioContext.slowLoadPos ^= 1;
+ gAudioCtx.slowLoadPos ^= 1;
return 0;
}
void AudioLoad_InitAsyncLoads(void) {
s32 i;
- for (i = 0; i < ARRAY_COUNT(gAudioContext.asyncLoads); i++) {
- gAudioContext.asyncLoads[i].status = 0;
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.asyncLoads); i++) {
+ gAudioCtx.asyncLoads[i].status = 0;
}
}
@@ -1550,7 +1545,7 @@ AudioAsyncLoad* AudioLoad_StartAsyncLoadUnkMedium(s32 unkMediumParam, uintptr_t
return NULL;
}
- osSendMesg(&gAudioContext.asyncLoadUnkMediumQueue, asyncLoad, OS_MESG_NOBLOCK);
+ osSendMesg(&gAudioCtx.asyncLoadUnkMediumQueue, asyncLoad, OS_MESG_NOBLOCK);
asyncLoad->unkMediumParam = unkMediumParam;
return asyncLoad;
}
@@ -1560,15 +1555,15 @@ AudioAsyncLoad* AudioLoad_StartAsyncLoad(uintptr_t devAddr, void* ramAddr, size_
AudioAsyncLoad* asyncLoad;
s32 i;
- for (i = 0; i < ARRAY_COUNT(gAudioContext.asyncLoads); i++) {
- if (gAudioContext.asyncLoads[i].status == 0) {
- asyncLoad = &gAudioContext.asyncLoads[i];
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.asyncLoads); i++) {
+ if (gAudioCtx.asyncLoads[i].status == 0) {
+ asyncLoad = &gAudioCtx.asyncLoads[i];
break;
}
}
// no more available async loads
- if (i == ARRAY_COUNT(gAudioContext.asyncLoads)) {
+ if (i == ARRAY_COUNT(gAudioCtx.asyncLoads)) {
return NULL;
}
@@ -1601,29 +1596,29 @@ void AudioLoad_ProcessAsyncLoads(s32 resetStatus) {
AudioAsyncLoad* asyncLoad;
s32 i;
- if (gAudioContext.resetTimer == 1) {
+ if (gAudioCtx.resetTimer == 1) {
return;
}
- if (gAudioContext.curUnkMediumLoad == NULL) {
+ if (gAudioCtx.curUnkMediumLoad == NULL) {
if (resetStatus != 0) {
// Clear and ignore queue if resetting.
do {
- } while (osRecvMesg(&gAudioContext.asyncLoadUnkMediumQueue, (OSMesg*)&asyncLoad, OS_MESG_NOBLOCK) != -1);
- } else if (osRecvMesg(&gAudioContext.asyncLoadUnkMediumQueue, (OSMesg*)&asyncLoad, OS_MESG_NOBLOCK) == -1) {
- gAudioContext.curUnkMediumLoad = NULL;
+ } while (osRecvMesg(&gAudioCtx.asyncLoadUnkMediumQueue, (OSMesg*)&asyncLoad, OS_MESG_NOBLOCK) != -1);
+ } else if (osRecvMesg(&gAudioCtx.asyncLoadUnkMediumQueue, (OSMesg*)&asyncLoad, OS_MESG_NOBLOCK) == -1) {
+ gAudioCtx.curUnkMediumLoad = NULL;
} else {
- gAudioContext.curUnkMediumLoad = asyncLoad;
+ gAudioCtx.curUnkMediumLoad = asyncLoad;
}
}
- if (gAudioContext.curUnkMediumLoad != NULL) {
- AudioLoad_ProcessAsyncLoadUnkMedium(gAudioContext.curUnkMediumLoad, resetStatus);
+ if (gAudioCtx.curUnkMediumLoad != NULL) {
+ AudioLoad_ProcessAsyncLoadUnkMedium(gAudioCtx.curUnkMediumLoad, resetStatus);
}
- for (i = 0; i < ARRAY_COUNT(gAudioContext.asyncLoads); i++) {
- if (gAudioContext.asyncLoads[i].status == 1) {
- asyncLoad = &gAudioContext.asyncLoads[i];
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.asyncLoads); i++) {
+ if (gAudioCtx.asyncLoads[i].status == 1) {
+ asyncLoad = &gAudioCtx.asyncLoads[i];
if (asyncLoad->medium != MEDIUM_UNK) {
AudioLoad_ProcessAsyncLoad(asyncLoad, resetStatus);
}
@@ -1653,8 +1648,8 @@ void AudioLoad_FinishAsyncLoad(AudioAsyncLoad* asyncLoad) {
break;
case FONT_TABLE:
fontId = ASYNC_ID(retMsg);
- sampleBankId1 = gAudioContext.soundFontList[fontId].sampleBankId1;
- sampleBankId2 = gAudioContext.soundFontList[fontId].sampleBankId2;
+ sampleBankId1 = gAudioCtx.soundFontList[fontId].sampleBankId1;
+ sampleBankId2 = gAudioCtx.soundFontList[fontId].sampleBankId2;
sampleBankReloc.sampleBankId1 = sampleBankId1;
sampleBankReloc.sampleBankId2 = sampleBankId2;
sampleBankReloc.baseAddr1 =
@@ -1673,7 +1668,7 @@ void AudioLoad_FinishAsyncLoad(AudioAsyncLoad* asyncLoad) {
}
void AudioLoad_ProcessAsyncLoad(AudioAsyncLoad* asyncLoad, s32 resetStatus) {
- AudioTable* sampleBankTable = gAudioContext.sampleBankTable;
+ AudioTable* sampleBankTable = gAudioCtx.sampleBankTable;
if (asyncLoad->delay >= 2) {
asyncLoad->delay--;
@@ -1797,7 +1792,7 @@ void AudioLoad_RelocateSample(TunedSample* tunedSample, SoundFontData* fontData,
sample->isRelocated = true;
if (sample->unk_bit26 && (sample->medium != MEDIUM_RAM)) {
- gAudioContext.usedSamples[gAudioContext.numUsedSamples++] = sample;
+ gAudioCtx.usedSamples[gAudioCtx.numUsedSamples++] = sample;
}
}
}
@@ -1823,27 +1818,27 @@ void AudioLoad_RelocateFontAndPreloadSamples(s32 fontId, SoundFontData* fontData
s32 i;
preloadInProgress = false;
- if (gAudioContext.preloadSampleStackTop != 0) {
+ if (gAudioCtx.preloadSampleStackTop != 0) {
preloadInProgress = true;
} else {
D_801FD1E0 = 0;
}
- gAudioContext.numUsedSamples = 0;
+ gAudioCtx.numUsedSamples = 0;
AudioLoad_RelocateFont(fontId, fontData, sampleBankReloc);
size = 0;
- for (i = 0; i < gAudioContext.numUsedSamples; i++) {
- size += ALIGN16(gAudioContext.usedSamples[i]->size);
+ for (i = 0; i < gAudioCtx.numUsedSamples; i++) {
+ size += ALIGN16(gAudioCtx.usedSamples[i]->size);
}
if (size && size) {}
- for (i = 0; i < gAudioContext.numUsedSamples; i++) {
- if (gAudioContext.preloadSampleStackTop == 120) {
+ for (i = 0; i < gAudioCtx.numUsedSamples; i++) {
+ if (gAudioCtx.preloadSampleStackTop == 120) {
break;
}
- sample = gAudioContext.usedSamples[i];
+ sample = gAudioCtx.usedSamples[i];
sampleRamAddr = NULL;
switch (isAsync) {
case false:
@@ -1883,7 +1878,7 @@ void AudioLoad_RelocateFontAndPreloadSamples(s32 fontId, SoundFontData* fontData
case false:
if (sample->medium == MEDIUM_UNK) {
AudioLoad_SyncDmaUnkMedium((uintptr_t)sample->sampleAddr, sampleRamAddr, sample->size,
- gAudioContext.sampleBankTable->unkMediumParam);
+ gAudioCtx.sampleBankTable->unkMediumParam);
sample->sampleAddr = sampleRamAddr;
sample->medium = MEDIUM_RAM;
} else {
@@ -1895,27 +1890,27 @@ void AudioLoad_RelocateFontAndPreloadSamples(s32 fontId, SoundFontData* fontData
break;
case true:
- preload = &gAudioContext.preloadSampleStack[gAudioContext.preloadSampleStackTop];
+ preload = &gAudioCtx.preloadSampleStack[gAudioCtx.preloadSampleStackTop];
preload->sample = sample;
preload->ramAddr = sampleRamAddr;
- preload->encodedInfo = (gAudioContext.preloadSampleStackTop << 24) | 0xFFFFFF;
+ preload->encodedInfo = (gAudioCtx.preloadSampleStackTop << 24) | 0xFFFFFF;
preload->isFree = false;
preload->endAndMediumKey = (uintptr_t)sample->sampleAddr + sample->size + sample->medium;
- gAudioContext.preloadSampleStackTop++;
+ gAudioCtx.preloadSampleStackTop++;
break;
default:
break;
}
}
- gAudioContext.numUsedSamples = 0;
+ gAudioCtx.numUsedSamples = 0;
- if (gAudioContext.preloadSampleStackTop != 0 && !preloadInProgress) {
- topPreload = &gAudioContext.preloadSampleStack[gAudioContext.preloadSampleStackTop - 1];
+ if (gAudioCtx.preloadSampleStackTop != 0 && !preloadInProgress) {
+ topPreload = &gAudioCtx.preloadSampleStack[gAudioCtx.preloadSampleStackTop - 1];
sample = topPreload->sample;
nChunks = (sample->size >> 12) + 1;
AudioLoad_StartAsyncLoad((uintptr_t)sample->sampleAddr, topPreload->ramAddr, sample->size, sample->medium,
- nChunks, &gAudioContext.preloadSampleQueue, topPreload->encodedInfo);
+ nChunks, &gAudioCtx.preloadSampleQueue, topPreload->encodedInfo);
}
}
@@ -1927,20 +1922,20 @@ s32 AudioLoad_ProcessSamplePreloads(s32 resetStatus) {
u32 nChunks;
s32 pad;
- if (gAudioContext.preloadSampleStackTop > 0) {
+ if (gAudioCtx.preloadSampleStackTop > 0) {
if (resetStatus != 0) {
// Clear result queue and preload stack and return.
- osRecvMesg(&gAudioContext.preloadSampleQueue, (OSMesg*)&preloadIndex, OS_MESG_NOBLOCK);
- gAudioContext.preloadSampleStackTop = 0;
+ osRecvMesg(&gAudioCtx.preloadSampleQueue, (OSMesg*)&preloadIndex, OS_MESG_NOBLOCK);
+ gAudioCtx.preloadSampleStackTop = 0;
return false;
}
- if (osRecvMesg(&gAudioContext.preloadSampleQueue, (OSMesg*)&preloadIndex, OS_MESG_NOBLOCK) == -1) {
+ if (osRecvMesg(&gAudioCtx.preloadSampleQueue, (OSMesg*)&preloadIndex, OS_MESG_NOBLOCK) == -1) {
// Previous preload is not done yet.
return false;
}
preloadIndex >>= 24;
- preload = &gAudioContext.preloadSampleStack[preloadIndex];
+ preload = &gAudioCtx.preloadSampleStack[preloadIndex];
if (preload->isFree == false) {
sample = preload->sample;
@@ -1956,12 +1951,12 @@ s32 AudioLoad_ProcessSamplePreloads(s32 resetStatus) {
// Pop requests with isFree = true off the stack, as far as possible,
// and dispatch the next DMA.
for (;;) {
- if (gAudioContext.preloadSampleStackTop <= 0) {
+ if (gAudioCtx.preloadSampleStackTop <= 0) {
break;
}
- preload = &gAudioContext.preloadSampleStack[gAudioContext.preloadSampleStackTop - 1];
+ preload = &gAudioCtx.preloadSampleStack[gAudioCtx.preloadSampleStackTop - 1];
if (preload->isFree == true) {
- gAudioContext.preloadSampleStackTop--;
+ gAudioCtx.preloadSampleStackTop--;
continue;
}
@@ -1970,10 +1965,10 @@ s32 AudioLoad_ProcessSamplePreloads(s32 resetStatus) {
key = (uintptr_t)sample->sampleAddr + sample->size + sample->medium;
if (key != preload->endAndMediumKey) {
preload->isFree = true;
- gAudioContext.preloadSampleStackTop--;
+ gAudioCtx.preloadSampleStackTop--;
} else {
AudioLoad_StartAsyncLoad((uintptr_t)sample->sampleAddr, preload->ramAddr, sample->size, sample->medium,
- nChunks, &gAudioContext.preloadSampleQueue, preload->encodedInfo);
+ nChunks, &gAudioCtx.preloadSampleQueue, preload->encodedInfo);
break;
}
}
@@ -2001,8 +1996,8 @@ s32 AudioLoad_AddToSampleSet(Sample* sample, s32 numSamples, Sample** sampleSet)
s32 AudioLoad_GetSamplesForFont(s32 fontId, Sample** sampleSet) {
s32 i;
s32 numSamples = 0;
- s32 numDrums = gAudioContext.soundFontList[fontId].numDrums;
- s32 numInstruments = gAudioContext.soundFontList[fontId].numInstruments;
+ s32 numDrums = gAudioCtx.soundFontList[fontId].numDrums;
+ s32 numInstruments = gAudioCtx.soundFontList[fontId].numInstruments;
for (i = 0; i < numDrums; i++) {
Drum* drum = AudioPlayback_GetDrum(fontId, i);
@@ -2035,7 +2030,7 @@ void AudioLoad_AddUsedSample(TunedSample* tunedSample) {
Sample* sample = tunedSample->sample;
if ((sample->size != 0) && (sample->unk_bit26) && (sample->medium != MEDIUM_RAM)) {
- gAudioContext.usedSamples[gAudioContext.numUsedSamples++] = sample;
+ gAudioCtx.usedSamples[gAudioCtx.numUsedSamples++] = sample;
}
}
@@ -2056,15 +2051,15 @@ void AudioLoad_PreloadSamplesForFont(s32 fontId, s32 async, SampleBankRelocInfo*
s32 nChunks;
preloadInProgress = false;
- if (gAudioContext.preloadSampleStackTop != 0) {
+ if (gAudioCtx.preloadSampleStackTop != 0) {
preloadInProgress = true;
}
- gAudioContext.numUsedSamples = 0;
+ gAudioCtx.numUsedSamples = 0;
- numDrums = gAudioContext.soundFontList[fontId].numDrums;
- numInstruments = gAudioContext.soundFontList[fontId].numInstruments;
- numSfx = gAudioContext.soundFontList[fontId].numSfx;
+ numDrums = gAudioCtx.soundFontList[fontId].numDrums;
+ numInstruments = gAudioCtx.soundFontList[fontId].numInstruments;
+ numSfx = gAudioCtx.soundFontList[fontId].numSfx;
for (i = 0; i < numInstruments; i++) {
instrument = AudioPlayback_GetInstrumentInner(fontId, i);
@@ -2093,22 +2088,22 @@ void AudioLoad_PreloadSamplesForFont(s32 fontId, s32 async, SampleBankRelocInfo*
}
}
- if (gAudioContext.numUsedSamples == 0) {
+ if (gAudioCtx.numUsedSamples == 0) {
return;
}
size = 0;
- for (i = 0; i < gAudioContext.numUsedSamples; i++) {
- size += ALIGN16(gAudioContext.usedSamples[i]->size);
+ for (i = 0; i < gAudioCtx.numUsedSamples; i++) {
+ size += ALIGN16(gAudioCtx.usedSamples[i]->size);
}
if (size) {}
- for (i = 0; i < gAudioContext.numUsedSamples; i++) {
- if (gAudioContext.preloadSampleStackTop == 120) {
+ for (i = 0; i < gAudioCtx.numUsedSamples; i++) {
+ if (gAudioCtx.preloadSampleStackTop == 120) {
break;
}
- sample = gAudioContext.usedSamples[i];
+ sample = gAudioCtx.usedSamples[i];
if (sample->medium == MEDIUM_RAM) {
continue;
}
@@ -2142,7 +2137,7 @@ void AudioLoad_PreloadSamplesForFont(s32 fontId, s32 async, SampleBankRelocInfo*
case false:
if (sample->medium == MEDIUM_UNK) {
AudioLoad_SyncDmaUnkMedium((uintptr_t)sample->sampleAddr, addr, sample->size,
- gAudioContext.sampleBankTable->unkMediumParam);
+ gAudioCtx.sampleBankTable->unkMediumParam);
sample->sampleAddr = addr;
sample->medium = MEDIUM_RAM;
} else {
@@ -2153,24 +2148,24 @@ void AudioLoad_PreloadSamplesForFont(s32 fontId, s32 async, SampleBankRelocInfo*
break;
case true:
- preload = &gAudioContext.preloadSampleStack[gAudioContext.preloadSampleStackTop];
+ preload = &gAudioCtx.preloadSampleStack[gAudioCtx.preloadSampleStackTop];
preload->sample = sample;
preload->ramAddr = addr;
- preload->encodedInfo = (gAudioContext.preloadSampleStackTop << 24) | 0xFFFFFF;
+ preload->encodedInfo = (gAudioCtx.preloadSampleStackTop << 24) | 0xFFFFFF;
preload->isFree = false;
preload->endAndMediumKey = (uintptr_t)sample->sampleAddr + sample->size + sample->medium;
- gAudioContext.preloadSampleStackTop++;
+ gAudioCtx.preloadSampleStackTop++;
break;
}
}
- gAudioContext.numUsedSamples = 0;
+ gAudioCtx.numUsedSamples = 0;
- if (gAudioContext.preloadSampleStackTop != 0 && !preloadInProgress) {
- topPreload = &gAudioContext.preloadSampleStack[gAudioContext.preloadSampleStackTop - 1];
+ if (gAudioCtx.preloadSampleStackTop != 0 && !preloadInProgress) {
+ topPreload = &gAudioCtx.preloadSampleStack[gAudioCtx.preloadSampleStackTop - 1];
sample = topPreload->sample;
nChunks = (sample->size >> 12) + 1;
AudioLoad_StartAsyncLoad((uintptr_t)sample->sampleAddr, topPreload->ramAddr, sample->size, sample->medium,
- nChunks, &gAudioContext.preloadSampleQueue, topPreload->encodedInfo);
+ nChunks, &gAudioCtx.preloadSampleQueue, topPreload->encodedInfo);
}
}
@@ -2182,13 +2177,13 @@ void AudioLoad_LoadPermanentSamples(void) {
s32 i;
sampleBankTable = AudioLoad_GetLoadTable(SAMPLE_TABLE);
- for (i = 0; i < gAudioContext.permanentPool.count; i++) {
+ for (i = 0; i < gAudioCtx.permanentPool.count; i++) {
SampleBankRelocInfo sampleBankReloc;
- if (gAudioContext.permanentEntries[i].tableType == FONT_TABLE) {
- fontId = AudioLoad_GetRealTableIndex(FONT_TABLE, gAudioContext.permanentEntries[i].id);
- sampleBankReloc.sampleBankId1 = gAudioContext.soundFontList[fontId].sampleBankId1;
- sampleBankReloc.sampleBankId2 = gAudioContext.soundFontList[fontId].sampleBankId2;
+ if (gAudioCtx.permanentEntries[i].tableType == FONT_TABLE) {
+ fontId = AudioLoad_GetRealTableIndex(FONT_TABLE, gAudioCtx.permanentEntries[i].id);
+ sampleBankReloc.sampleBankId1 = gAudioCtx.soundFontList[fontId].sampleBankId1;
+ sampleBankReloc.sampleBankId2 = gAudioCtx.soundFontList[fontId].sampleBankId2;
if (sampleBankReloc.sampleBankId1 != 0xFF) {
sampleBankReloc.sampleBankId1 =
diff --git a/src/code/audio/audio_playback.c b/src/audio/lib/playback.c
similarity index 84%
rename from src/code/audio/audio_playback.c
rename to src/audio/lib/playback.c
index a7cc9a588..deb6e82b9 100644
--- a/src/code/audio/audio_playback.c
+++ b/src/audio/lib/playback.c
@@ -35,7 +35,7 @@ void AudioPlayback_InitSampleState(Note* note, NoteSampleState* sampleState, Not
sampleState->bitField0.strongLeft = false;
sampleState->bitField0.strongReverbRight = stereoData.strongReverbRight;
sampleState->bitField0.strongReverbLeft = stereoData.strongReverbLeft;
- if (stereoHeadsetEffects && (gAudioContext.soundMode == SOUNDMODE_HEADSET)) {
+ if (stereoHeadsetEffects && (gAudioCtx.soundMode == SOUNDMODE_HEADSET)) {
halfPanIndex = pan >> 1;
if (halfPanIndex > 0x3F) {
halfPanIndex = 0x3F;
@@ -47,7 +47,7 @@ void AudioPlayback_InitSampleState(Note* note, NoteSampleState* sampleState, Not
volLeft = gHeadsetPanVolume[pan];
volRight = gHeadsetPanVolume[0x7F - pan];
- } else if (stereoHeadsetEffects && (gAudioContext.soundMode == SOUNDMODE_STEREO)) {
+ } else if (stereoHeadsetEffects && (gAudioCtx.soundMode == SOUNDMODE_STEREO)) {
strongLeft = strongRight = false;
sampleState->haasEffectLeftDelaySize = 0;
sampleState->haasEffectRightDelaySize = 0;
@@ -85,7 +85,7 @@ void AudioPlayback_InitSampleState(Note* note, NoteSampleState* sampleState, Not
break;
}
- } else if (gAudioContext.soundMode == SOUNDMODE_MONO) {
+ } else if (gAudioCtx.soundMode == SOUNDMODE_MONO) {
sampleState->bitField0.strongReverbRight = false;
sampleState->bitField0.strongReverbLeft = false;
volLeft = 0.707f; // approx 1/sqrt(2)
@@ -170,9 +170,9 @@ void AudioPlayback_ProcessNotes(void) {
f32 scale;
s32 i;
- for (i = 0; i < gAudioContext.numNotes; i++) {
- note = &gAudioContext.notes[i];
- sampleState = &gAudioContext.sampleStateList[gAudioContext.sampleStateOffset + i];
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ note = &gAudioCtx.notes[i];
+ sampleState = &gAudioCtx.sampleStateList[gAudioCtx.sampleStateOffset + i];
playbackState = ¬e->playbackState;
if (playbackState->parentLayer != NO_LAYER) {
if ((u32)playbackState->parentLayer < 0x7FFFFFFF) {
@@ -181,7 +181,7 @@ void AudioPlayback_ProcessNotes(void) {
if ((note != playbackState->parentLayer->note) && (playbackState->status == PLAYBACK_STATUS_0)) {
playbackState->adsr.action.s.release = true;
- playbackState->adsr.fadeOutVel = gAudioContext.audioBufferParameters.updatesPerFrameInv;
+ playbackState->adsr.fadeOutVel = gAudioCtx.audioBufferParameters.updatesPerFrameInv;
playbackState->priority = 1;
playbackState->status = PLAYBACK_STATUS_2;
goto out;
@@ -189,7 +189,7 @@ void AudioPlayback_ProcessNotes(void) {
(playbackState->priority >= 1)) {
// do nothing
} else if (playbackState->parentLayer->channel->seqPlayer == NULL) {
- AudioSeq_SequenceChannelDisable(playbackState->parentLayer->channel);
+ AudioScript_SequenceChannelDisable(playbackState->parentLayer->channel);
playbackState->priority = 1;
playbackState->status = PLAYBACK_STATUS_1;
continue;
@@ -224,13 +224,13 @@ void AudioPlayback_ProcessNotes(void) {
AudioEffects_NoteVibratoInit(note);
AudioEffects_NotePortamentoInit(note);
AudioPlayback_AudioListRemove(¬e->listItem);
- AudioSeq_AudioListPushBack(¬e->listItem.pool->active, ¬e->listItem);
+ AudioScript_AudioListPushBack(¬e->listItem.pool->active, ¬e->listItem);
playbackState->wantedParentLayer = NO_LAYER;
// don't skip
} else {
AudioPlayback_NoteDisable(note);
AudioPlayback_AudioListRemove(¬e->listItem);
- AudioSeq_AudioListPushBack(¬e->listItem.pool->disabled, ¬e->listItem);
+ AudioScript_AudioListPushBack(¬e->listItem.pool->disabled, ¬e->listItem);
playbackState->wantedParentLayer = NO_LAYER;
goto skip;
}
@@ -240,7 +240,7 @@ void AudioPlayback_ProcessNotes(void) {
}
AudioPlayback_NoteDisable(note);
AudioPlayback_AudioListRemove(¬e->listItem);
- AudioSeq_AudioListPushBack(¬e->listItem.pool->disabled, ¬e->listItem);
+ AudioScript_AudioListPushBack(¬e->listItem.pool->disabled, ¬e->listItem);
continue;
}
}
@@ -250,7 +250,7 @@ void AudioPlayback_ProcessNotes(void) {
}
AudioPlayback_NoteDisable(note);
AudioPlayback_AudioListRemove(¬e->listItem);
- AudioSeq_AudioListPushBack(¬e->listItem.pool->disabled, ¬e->listItem);
+ AudioScript_AudioListPushBack(¬e->listItem.pool->disabled, ¬e->listItem);
continue;
}
@@ -309,14 +309,14 @@ void AudioPlayback_ProcessNotes(void) {
subAttrs.combFilterGain = channel->combFilterGain;
bookOffset = channel->bookOffset & 0x7;
- if (channel->seqPlayer->muted && (channel->muteFlags & MUTE_FLAGS_3)) {
+ if (channel->seqPlayer->muted && (channel->muteFlags & MUTE_FLAGS_STOP_SAMPLES)) {
subAttrs.frequency = 0.0f;
subAttrs.velocity = 0.0f;
}
}
subAttrs.frequency *= playbackState->vibratoFreqScale * playbackState->portamentoFreqScale;
- subAttrs.frequency *= gAudioContext.audioBufferParameters.resampleRate;
+ subAttrs.frequency *= gAudioCtx.audioBufferParameters.resampleRate;
subAttrs.velocity *= scale;
AudioPlayback_InitSampleState(note, sampleState, &subAttrs);
noteSampleState->bitField1.bookOffset = bookOffset;
@@ -347,18 +347,18 @@ Instrument* AudioPlayback_GetInstrumentInner(s32 fontId, s32 instId) {
}
if (!AudioLoad_IsFontLoadComplete(fontId)) {
- gAudioContext.audioErrorFlags = AUDIO_ERROR(0, fontId, AUDIO_ERROR_FONT_NOT_LOADED);
+ gAudioCtx.audioErrorFlags = AUDIO_ERROR(0, fontId, AUDIO_ERROR_FONT_NOT_LOADED);
return NULL;
}
- if (instId >= gAudioContext.soundFontList[fontId].numInstruments) {
- gAudioContext.audioErrorFlags = AUDIO_ERROR(fontId, instId, AUDIO_ERROR_INVALID_INST_ID);
+ if (instId >= gAudioCtx.soundFontList[fontId].numInstruments) {
+ gAudioCtx.audioErrorFlags = AUDIO_ERROR(fontId, instId, AUDIO_ERROR_INVALID_INST_ID);
return NULL;
}
- inst = gAudioContext.soundFontList[fontId].instruments[instId];
+ inst = gAudioCtx.soundFontList[fontId].instruments[instId];
if (inst == NULL) {
- gAudioContext.audioErrorFlags = AUDIO_ERROR(fontId, instId, AUDIO_ERROR_NO_INST);
+ gAudioCtx.audioErrorFlags = AUDIO_ERROR(fontId, instId, AUDIO_ERROR_NO_INST);
return inst;
}
@@ -373,21 +373,21 @@ Drum* AudioPlayback_GetDrum(s32 fontId, s32 drumId) {
}
if (!AudioLoad_IsFontLoadComplete(fontId)) {
- gAudioContext.audioErrorFlags = AUDIO_ERROR(0, fontId, AUDIO_ERROR_FONT_NOT_LOADED);
+ gAudioCtx.audioErrorFlags = AUDIO_ERROR(0, fontId, AUDIO_ERROR_FONT_NOT_LOADED);
return NULL;
}
- if (drumId >= gAudioContext.soundFontList[fontId].numDrums) {
- gAudioContext.audioErrorFlags = AUDIO_ERROR(fontId, drumId, AUDIO_ERROR_INVALID_DRUM_SFX_ID);
+ if (drumId >= gAudioCtx.soundFontList[fontId].numDrums) {
+ gAudioCtx.audioErrorFlags = AUDIO_ERROR(fontId, drumId, AUDIO_ERROR_INVALID_DRUM_SFX_ID);
return NULL;
}
- if ((u32)gAudioContext.soundFontList[fontId].drums < AUDIO_RELOCATED_ADDRESS_START) {
+ if ((u32)gAudioCtx.soundFontList[fontId].drums < AUDIO_RELOCATED_ADDRESS_START) {
return NULL;
}
- drum = gAudioContext.soundFontList[fontId].drums[drumId];
+ drum = gAudioCtx.soundFontList[fontId].drums[drumId];
if (drum == NULL) {
- gAudioContext.audioErrorFlags = AUDIO_ERROR(fontId, drumId, AUDIO_ERROR_NO_DRUM_SFX);
+ gAudioCtx.audioErrorFlags = AUDIO_ERROR(fontId, drumId, AUDIO_ERROR_NO_DRUM_SFX);
}
return drum;
@@ -401,23 +401,23 @@ SoundEffect* AudioPlayback_GetSoundEffect(s32 fontId, s32 sfxId) {
}
if (!AudioLoad_IsFontLoadComplete(fontId)) {
- gAudioContext.audioErrorFlags = AUDIO_ERROR(0, fontId, AUDIO_ERROR_FONT_NOT_LOADED);
+ gAudioCtx.audioErrorFlags = AUDIO_ERROR(0, fontId, AUDIO_ERROR_FONT_NOT_LOADED);
return NULL;
}
- if (sfxId >= gAudioContext.soundFontList[fontId].numSfx) {
- gAudioContext.audioErrorFlags = AUDIO_ERROR(fontId, sfxId, AUDIO_ERROR_INVALID_DRUM_SFX_ID);
+ if (sfxId >= gAudioCtx.soundFontList[fontId].numSfx) {
+ gAudioCtx.audioErrorFlags = AUDIO_ERROR(fontId, sfxId, AUDIO_ERROR_INVALID_DRUM_SFX_ID);
return NULL;
}
- if ((u32)gAudioContext.soundFontList[fontId].soundEffects < AUDIO_RELOCATED_ADDRESS_START) {
+ if ((u32)gAudioCtx.soundFontList[fontId].soundEffects < AUDIO_RELOCATED_ADDRESS_START) {
return NULL;
}
- soundEffect = &gAudioContext.soundFontList[fontId].soundEffects[sfxId];
+ soundEffect = &gAudioCtx.soundFontList[fontId].soundEffects[sfxId];
if (soundEffect == NULL) {
- gAudioContext.audioErrorFlags = AUDIO_ERROR(fontId, sfxId, AUDIO_ERROR_NO_DRUM_SFX);
+ gAudioCtx.audioErrorFlags = AUDIO_ERROR(fontId, sfxId, AUDIO_ERROR_NO_DRUM_SFX);
}
if (soundEffect->tunedSample.sample == NULL) {
@@ -438,24 +438,24 @@ s32 AudioPlayback_SetFontInstrument(s32 instrumentType, s32 fontId, s32 index, v
switch (instrumentType) {
case 0:
- if (index >= gAudioContext.soundFontList[fontId].numDrums) {
+ if (index >= gAudioCtx.soundFontList[fontId].numDrums) {
return -3;
}
- gAudioContext.soundFontList[fontId].drums[index] = value;
+ gAudioCtx.soundFontList[fontId].drums[index] = value;
break;
case 1:
- if (index >= gAudioContext.soundFontList[fontId].numSfx) {
+ if (index >= gAudioCtx.soundFontList[fontId].numSfx) {
return -3;
}
- gAudioContext.soundFontList[fontId].soundEffects[index] = *(SoundEffect*)value;
+ gAudioCtx.soundFontList[fontId].soundEffects[index] = *(SoundEffect*)value;
break;
default:
- if (index >= gAudioContext.soundFontList[fontId].numInstruments) {
+ if (index >= gAudioCtx.soundFontList[fontId].numInstruments) {
return -3;
}
- gAudioContext.soundFontList[fontId].instruments[index] = value;
+ gAudioCtx.soundFontList[fontId].instruments[index] = value;
break;
}
@@ -488,7 +488,7 @@ void AudioPlayback_SeqLayerDecayRelease(SequenceLayer* layer, s32 target) {
if (note->playbackState.parentLayer != layer) {
if (note->playbackState.parentLayer == NO_LAYER && note->playbackState.wantedParentLayer == NO_LAYER &&
note->playbackState.prevParentLayer == layer && target != ADSR_STATE_DECAY) {
- note->playbackState.adsr.fadeOutVel = gAudioContext.audioBufferParameters.updatesPerFrameInv;
+ note->playbackState.adsr.fadeOutVel = gAudioCtx.audioBufferParameters.updatesPerFrameInv;
note->playbackState.adsr.action.s.release = true;
}
return;
@@ -531,7 +531,7 @@ void AudioPlayback_SeqLayerDecayRelease(SequenceLayer* layer, s32 target) {
attrs->combFilterGain = channel->combFilterGain;
attrs->combFilterSize = channel->combFilterSize;
- if (channel->seqPlayer->muted && (channel->muteFlags & MUTE_FLAGS_3)) {
+ if (channel->seqPlayer->muted && (channel->muteFlags & MUTE_FLAGS_STOP_SAMPLES)) {
note->sampleState.bitField0.finished = true;
}
@@ -549,16 +549,16 @@ void AudioPlayback_SeqLayerDecayRelease(SequenceLayer* layer, s32 target) {
note->playbackState.prevParentLayer = note->playbackState.parentLayer;
note->playbackState.parentLayer = NO_LAYER;
if (target == ADSR_STATE_RELEASE) {
- note->playbackState.adsr.fadeOutVel = gAudioContext.audioBufferParameters.updatesPerFrameInv;
+ note->playbackState.adsr.fadeOutVel = gAudioCtx.audioBufferParameters.updatesPerFrameInv;
note->playbackState.adsr.action.s.release = true;
note->playbackState.status = PLAYBACK_STATUS_2;
} else {
note->playbackState.status = PLAYBACK_STATUS_1;
note->playbackState.adsr.action.s.decay = true;
if (layer->adsr.decayIndex == 0) {
- note->playbackState.adsr.fadeOutVel = gAudioContext.adsrDecayTable[layer->channel->adsr.decayIndex];
+ note->playbackState.adsr.fadeOutVel = gAudioCtx.adsrDecayTable[layer->channel->adsr.decayIndex];
} else {
- note->playbackState.adsr.fadeOutVel = gAudioContext.adsrDecayTable[layer->adsr.decayIndex];
+ note->playbackState.adsr.fadeOutVel = gAudioCtx.adsrDecayTable[layer->adsr.decayIndex];
}
note->playbackState.adsr.sustain =
((f32)(s32)(layer->channel->adsr.sustain) * note->playbackState.adsr.current) / 256.0f;
@@ -665,11 +665,11 @@ void AudioPlayback_InitNoteLists(NotePool* pool) {
void AudioPlayback_InitNoteFreeList(void) {
s32 i;
- AudioPlayback_InitNoteLists(&gAudioContext.noteFreeLists);
- for (i = 0; i < gAudioContext.numNotes; i++) {
- gAudioContext.notes[i].listItem.u.value = &gAudioContext.notes[i];
- gAudioContext.notes[i].listItem.prev = NULL;
- AudioSeq_AudioListPushBack(&gAudioContext.noteFreeLists.disabled, &gAudioContext.notes[i].listItem);
+ AudioPlayback_InitNoteLists(&gAudioCtx.noteFreeLists);
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ gAudioCtx.notes[i].listItem.u.value = &gAudioCtx.notes[i];
+ gAudioCtx.notes[i].listItem.prev = NULL;
+ AudioScript_AudioListPushBack(&gAudioCtx.noteFreeLists.disabled, &gAudioCtx.notes[i].listItem);
}
}
@@ -683,22 +683,22 @@ void AudioPlayback_NotePoolClear(NotePool* pool) {
switch (i) {
case 0:
source = &pool->disabled;
- dest = &gAudioContext.noteFreeLists.disabled;
+ dest = &gAudioCtx.noteFreeLists.disabled;
break;
case 1:
source = &pool->decaying;
- dest = &gAudioContext.noteFreeLists.decaying;
+ dest = &gAudioCtx.noteFreeLists.decaying;
break;
case 2:
source = &pool->releasing;
- dest = &gAudioContext.noteFreeLists.releasing;
+ dest = &gAudioCtx.noteFreeLists.releasing;
break;
case 3:
source = &pool->active;
- dest = &gAudioContext.noteFreeLists.active;
+ dest = &gAudioCtx.noteFreeLists.active;
break;
}
@@ -708,7 +708,7 @@ void AudioPlayback_NotePoolClear(NotePool* pool) {
break;
}
AudioPlayback_AudioListRemove(cur);
- AudioSeq_AudioListPushBack(dest, cur);
+ AudioScript_AudioListPushBack(dest, cur);
}
}
}
@@ -729,32 +729,32 @@ void AudioPlayback_NotePoolFill(NotePool* pool, s32 count) {
switch (i) {
case 0:
- source = &gAudioContext.noteFreeLists.disabled;
+ source = &gAudioCtx.noteFreeLists.disabled;
dest = &pool->disabled;
break;
case 1:
- source = &gAudioContext.noteFreeLists.decaying;
+ source = &gAudioCtx.noteFreeLists.decaying;
dest = &pool->decaying;
break;
case 2:
- source = &gAudioContext.noteFreeLists.releasing;
+ source = &gAudioCtx.noteFreeLists.releasing;
dest = &pool->releasing;
break;
case 3:
- source = &gAudioContext.noteFreeLists.active;
+ source = &gAudioCtx.noteFreeLists.active;
dest = &pool->active;
break;
}
while (j < count) {
- note = AudioSeq_AudioListPopBack(source);
+ note = AudioScript_AudioListPopBack(source);
if (note == NULL) {
break;
}
- AudioSeq_AudioListPushBack(dest, ¬e->listItem);
+ AudioScript_AudioListPushBack(dest, ¬e->listItem);
j++;
}
}
@@ -862,12 +862,13 @@ void AudioPlayback_NoteReleaseAndTakeOwnership(Note* note, SequenceLayer* layer)
note->playbackState.wantedParentLayer = layer;
note->playbackState.priority = layer->channel->notePriority;
- note->playbackState.adsr.fadeOutVel = gAudioContext.audioBufferParameters.updatesPerFrameInv;
+ note->playbackState.adsr.fadeOutVel = gAudioCtx.audioBufferParameters.updatesPerFrameInv;
note->playbackState.adsr.action.s.release = true;
}
Note* AudioPlayback_AllocNoteFromDisabled(NotePool* pool, SequenceLayer* layer) {
- Note* note = AudioSeq_AudioListPopBack(&pool->disabled);
+ Note* note = AudioScript_AudioListPopBack(&pool->disabled);
+
if (note != NULL) {
AudioPlayback_NoteInitForLayer(note, layer);
AudioPlayback_AudioListPushFront(&pool->active, ¬e->listItem);
@@ -881,7 +882,7 @@ Note* AudioPlayback_AllocNoteFromDecaying(NotePool* pool, SequenceLayer* layer)
if (note != NULL) {
AudioPlayback_NoteReleaseAndTakeOwnership(note, layer);
AudioPlayback_AudioListRemove(¬e->listItem);
- AudioSeq_AudioListPushBack(&pool->releasing, ¬e->listItem);
+ AudioScript_AudioListPushBack(&pool->releasing, ¬e->listItem);
}
return note;
}
@@ -912,7 +913,7 @@ Note* AudioPlayback_AllocNoteFromActive(NotePool* pool, SequenceLayer* layer) {
if (aPriority < rPriority) {
AudioPlayback_AudioListRemove(&aNote->listItem);
func_801963E8(aNote, layer);
- AudioSeq_AudioListPushBack(&pool->releasing, &aNote->listItem);
+ AudioScript_AudioListPushBack(&pool->releasing, &aNote->listItem);
aNote->playbackState.priority = layer->channel->notePriority;
return aNote;
}
@@ -931,7 +932,7 @@ Note* AudioPlayback_AllocNote(SequenceLayer* layer) {
note->playbackState.wantedParentLayer == NO_LAYER) {
AudioPlayback_NoteReleaseAndTakeOwnership(note, layer);
AudioPlayback_AudioListRemove(¬e->listItem);
- AudioSeq_AudioListPushBack(¬e->listItem.pool->releasing, ¬e->listItem);
+ AudioScript_AudioListPushBack(¬e->listItem.pool->releasing, ¬e->listItem);
return note;
}
}
@@ -958,9 +959,9 @@ Note* AudioPlayback_AllocNote(SequenceLayer* layer) {
}
if (policy & 8) {
- if (!(note = AudioPlayback_AllocNoteFromDisabled(&gAudioContext.noteFreeLists, layer)) &&
- !(note = AudioPlayback_AllocNoteFromDecaying(&gAudioContext.noteFreeLists, layer)) &&
- !(note = AudioPlayback_AllocNoteFromActive(&gAudioContext.noteFreeLists, layer))) {
+ if (!(note = AudioPlayback_AllocNoteFromDisabled(&gAudioCtx.noteFreeLists, layer)) &&
+ !(note = AudioPlayback_AllocNoteFromDecaying(&gAudioCtx.noteFreeLists, layer)) &&
+ !(note = AudioPlayback_AllocNoteFromActive(&gAudioCtx.noteFreeLists, layer))) {
goto null_return;
}
return note;
@@ -968,13 +969,13 @@ Note* AudioPlayback_AllocNote(SequenceLayer* layer) {
if (!(note = AudioPlayback_AllocNoteFromDisabled(&layer->channel->notePool, layer)) &&
!(note = AudioPlayback_AllocNoteFromDisabled(&layer->channel->seqPlayer->notePool, layer)) &&
- !(note = AudioPlayback_AllocNoteFromDisabled(&gAudioContext.noteFreeLists, layer)) &&
+ !(note = AudioPlayback_AllocNoteFromDisabled(&gAudioCtx.noteFreeLists, layer)) &&
!(note = AudioPlayback_AllocNoteFromDecaying(&layer->channel->notePool, layer)) &&
!(note = AudioPlayback_AllocNoteFromDecaying(&layer->channel->seqPlayer->notePool, layer)) &&
- !(note = AudioPlayback_AllocNoteFromDecaying(&gAudioContext.noteFreeLists, layer)) &&
+ !(note = AudioPlayback_AllocNoteFromDecaying(&gAudioCtx.noteFreeLists, layer)) &&
!(note = AudioPlayback_AllocNoteFromActive(&layer->channel->notePool, layer)) &&
!(note = AudioPlayback_AllocNoteFromActive(&layer->channel->seqPlayer->notePool, layer)) &&
- !(note = AudioPlayback_AllocNoteFromActive(&gAudioContext.noteFreeLists, layer))) {
+ !(note = AudioPlayback_AllocNoteFromActive(&gAudioCtx.noteFreeLists, layer))) {
goto null_return;
}
return note;
@@ -988,8 +989,8 @@ void AudioPlayback_NoteInitAll(void) {
Note* note;
s32 i;
- for (i = 0; i < gAudioContext.numNotes; i++) {
- note = &gAudioContext.notes[i];
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ note = &gAudioCtx.notes[i];
note->sampleState = gZeroedSampleState;
note->playbackState.priority = 0;
note->playbackState.status = PLAYBACK_STATUS_0;
@@ -1006,7 +1007,7 @@ void AudioPlayback_NoteInitAll(void) {
note->playbackState.stereoHeadsetEffects = false;
note->playbackState.startSamplePos = 0;
note->synthesisState.synthesisBuffers =
- AudioHeap_AllocDmaMemory(&gAudioContext.miscPool, sizeof(NoteSynthesisBuffers));
- note->playbackState.attributes.filterBuf = AudioHeap_AllocDmaMemory(&gAudioContext.miscPool, FILTER_SIZE);
+ AudioHeap_AllocDmaMemory(&gAudioCtx.miscPool, sizeof(NoteSynthesisBuffers));
+ note->playbackState.attributes.filterBuf = AudioHeap_AllocDmaMemory(&gAudioCtx.miscPool, FILTER_SIZE);
}
}
diff --git a/src/code/audio/audio_seqplayer.c b/src/audio/lib/seqplayer.c
similarity index 76%
rename from src/code/audio/audio_seqplayer.c
rename to src/audio/lib/seqplayer.c
index bc5115f8f..270164972 100644
--- a/src/code/audio/audio_seqplayer.c
+++ b/src/audio/lib/seqplayer.c
@@ -29,15 +29,15 @@ typedef enum {
/* 5 */ PORTAMENTO_MODE_5
} PortamentoMode;
-u8 AudioSeq_ScriptReadU8(SeqScriptState* state);
-s16 AudioSeq_ScriptReadS16(SeqScriptState* state);
-u16 AudioSeq_ScriptReadCompressedU16(SeqScriptState* state);
-void AudioSeq_SeqLayerProcessScriptStep1(SequenceLayer* layer);
-s32 AudioSeq_SeqLayerProcessScriptStep5(SequenceLayer* layer, s32 sameTunedSample);
-s32 AudioSeq_SeqLayerProcessScriptStep2(SequenceLayer* layer);
-s32 AudioSeq_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd);
-s32 AudioSeq_SeqLayerProcessScriptStep3(SequenceLayer* layer, s32 cmd);
-u8 AudioSeq_GetInstrument(SequenceChannel* channel, u8 instId, Instrument** instOut, AdsrSettings* adsr);
+u8 AudioScript_ScriptReadU8(SeqScriptState* state);
+s16 AudioScript_ScriptReadS16(SeqScriptState* state);
+u16 AudioScript_ScriptReadCompressedU16(SeqScriptState* state);
+void AudioScript_SeqLayerProcessScriptStep1(SequenceLayer* layer);
+s32 AudioScript_SeqLayerProcessScriptStep5(SequenceLayer* layer, s32 sameTunedSample);
+s32 AudioScript_SeqLayerProcessScriptStep2(SequenceLayer* layer);
+s32 AudioScript_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd);
+s32 AudioScript_SeqLayerProcessScriptStep3(SequenceLayer* layer, s32 cmd);
+u8 AudioScript_GetInstrument(SequenceChannel* channel, u8 instId, Instrument** instOut, AdsrSettings* adsr);
/**
* sSeqInstructionArgsTable is a table for each sequence instruction
@@ -123,7 +123,7 @@ u8 sSeqInstructionArgsTable[] = {
CMD_ARGS_1(u8), // 0xD5 ()
CMD_ARGS_1(u8), // 0xD6 ()
CMD_ARGS_1(u8), // 0xD7 (channel: set vibrato rate)
- CMD_ARGS_1(u8), // 0xD8 (channel: set vibrato extent)
+ CMD_ARGS_1(u8), // 0xD8 (channel: set vibrato depth)
CMD_ARGS_1(u8), // 0xD9 (channel: set decay index)
CMD_ARGS_1(s16), // 0xDA (channel: set envelope)
CMD_ARGS_1(u8), // 0xDB (channel: transpose)
@@ -133,7 +133,7 @@ u8 sSeqInstructionArgsTable[] = {
CMD_ARGS_1(u8), // 0xDF (channel: set volume)
CMD_ARGS_1(u8), // 0xE0 (channel: set volume scale)
CMD_ARGS_3(u8, u8, u8), // 0xE1 (channel: set vibratorate linear)
- CMD_ARGS_3(u8, u8, u8), // 0xE2 (channel: set vibrato extent linear)
+ CMD_ARGS_3(u8, u8, u8), // 0xE2 (channel: set vibrato depth linear)
CMD_ARGS_1(u8), // 0xE3 (channel: set vibrato delay)
CMD_ARGS_0(), // 0xE4 (channel: dyncall)
CMD_ARGS_1(u8), // 0xE5 (channel: set reverb index)
@@ -172,7 +172,7 @@ u8 sSeqInstructionArgsTable[] = {
*
* @return the argument value for a control flow instruction, or 0 if there is no argument
*/
-u16 AudioSeq_GetScriptControlFlowArgument(SeqScriptState* state, u8 cmd) {
+u16 AudioScript_GetScriptControlFlowArgument(SeqScriptState* state, u8 cmd) {
u8 highBits = sSeqInstructionArgsTable[cmd - 0xA0];
u8 lowBits = highBits & 3;
u16 cmdArg = 0;
@@ -180,9 +180,9 @@ u16 AudioSeq_GetScriptControlFlowArgument(SeqScriptState* state, u8 cmd) {
// only 1 argument
if (lowBits == 1) {
if (!(highBits & 0x80)) {
- cmdArg = AudioSeq_ScriptReadU8(state);
+ cmdArg = AudioScript_ScriptReadU8(state);
} else {
- cmdArg = AudioSeq_ScriptReadS16(state);
+ cmdArg = AudioScript_ScriptReadS16(state);
}
}
@@ -194,7 +194,7 @@ u16 AudioSeq_GetScriptControlFlowArgument(SeqScriptState* state, u8 cmd) {
*
* @return number of frames until next instruction. -1 signals termination
*/
-s32 AudioSeq_HandleScriptFlowControl(SequencePlayer* seqPlayer, SeqScriptState* state, s32 cmd, s32 cmdArg) {
+s32 AudioScript_HandleScriptFlowControl(SequencePlayer* seqPlayer, SeqScriptState* state, s32 cmd, s32 cmdArg) {
u32 depth;
switch (cmd) {
@@ -206,7 +206,7 @@ s32 AudioSeq_HandleScriptFlowControl(SequencePlayer* seqPlayer, SeqScriptState*
break;
case 0xFD: // delay n frames
- return AudioSeq_ScriptReadCompressedU16(state);
+ return AudioScript_ScriptReadCompressedU16(state);
case 0xFE: // delay 1 frame
return 1;
@@ -266,17 +266,17 @@ s32 AudioSeq_HandleScriptFlowControl(SequencePlayer* seqPlayer, SeqScriptState*
return 0;
}
-void AudioSeq_InitSequenceChannel(SequenceChannel* channel) {
+void AudioScript_InitSequenceChannel(SequenceChannel* channel) {
s32 i;
- if (channel == &gAudioContext.sequenceChannelNone) {
+ if (channel == &gAudioCtx.sequenceChannelNone) {
return;
}
channel->enabled = false;
channel->finished = false;
channel->stopScript = false;
- channel->stopSomething2 = false;
+ channel->muted = false;
channel->hasInstrument = false;
channel->stereoHeadsetEffects = false;
channel->transposition = 0;
@@ -302,10 +302,10 @@ void AudioSeq_InitSequenceChannel(SequenceChannel* channel) {
channel->adsr.sustain = 0;
channel->vibrato.vibratoRateTarget = 0x800;
channel->vibrato.vibratoRateStart = 0x800;
- channel->vibrato.vibratoExtentTarget = 0;
- channel->vibrato.vibratoExtentStart = 0;
+ channel->vibrato.vibratoDepthTarget = 0;
+ channel->vibrato.vibratoDepthStart = 0;
channel->vibrato.vibratoRateChangeDelay = 0;
- channel->vibrato.vibratoExtentChangeDelay = 0;
+ channel->vibrato.vibratoDepthChangeDelay = 0;
channel->vibrato.vibratoDelay = 0;
channel->filter = NULL;
channel->combFilterGain = 0;
@@ -314,8 +314,8 @@ void AudioSeq_InitSequenceChannel(SequenceChannel* channel) {
channel->volumeScale = 1.0f;
channel->freqScale = 1.0f;
- for (i = 0; i < ARRAY_COUNT(channel->soundScriptIO); i++) {
- channel->soundScriptIO[i] = SEQ_IO_VAL_NONE;
+ for (i = 0; i < ARRAY_COUNT(channel->seqScriptIO); i++) {
+ channel->seqScriptIO[i] = SEQ_IO_VAL_NONE;
}
channel->unused = false;
@@ -325,12 +325,12 @@ void AudioSeq_InitSequenceChannel(SequenceChannel* channel) {
channel->sfxState = NULL;
}
-s32 AudioSeq_SeqChannelSetLayer(SequenceChannel* channel, s32 layerIndex) {
+s32 AudioScript_SeqChannelSetLayer(SequenceChannel* channel, s32 layerIndex) {
SequenceLayer* layer;
s32 pad;
if (channel->layers[layerIndex] == NULL) {
- layer = AudioSeq_AudioListPopBack(&gAudioContext.layerFreeList);
+ layer = AudioScript_AudioListPopBack(&gAudioCtx.layerFreeList);
channel->layers[layerIndex] = layer;
if (layer == NULL) {
channel->layers[layerIndex] = NULL;
@@ -348,7 +348,7 @@ s32 AudioSeq_SeqChannelSetLayer(SequenceChannel* channel, s32 layerIndex) {
layer->targetReverbVol = channel->targetReverbVol;
layer->enabled = true;
layer->finished = false;
- layer->stopSomething = false;
+ layer->muted = false;
layer->continuousNotes = false;
layer->bit3 = false;
layer->ignoreDrumPan = false;
@@ -370,10 +370,10 @@ s32 AudioSeq_SeqChannelSetLayer(SequenceChannel* channel, s32 layerIndex) {
layer->unk_0A.asByte = 0xFFFF;
layer->vibrato.vibratoRateTarget = 0x800;
layer->vibrato.vibratoRateStart = 0x800;
- layer->vibrato.vibratoExtentTarget = 0;
- layer->vibrato.vibratoExtentStart = 0;
+ layer->vibrato.vibratoDepthTarget = 0;
+ layer->vibrato.vibratoDepthStart = 0;
layer->vibrato.vibratoRateChangeDelay = 0;
- layer->vibrato.vibratoExtentChangeDelay = 0;
+ layer->vibrato.vibratoDepthChangeDelay = 0;
layer->vibrato.vibratoDelay = 0;
layer->freqScale = 1.0f;
layer->bend = 1.0f;
@@ -382,9 +382,9 @@ s32 AudioSeq_SeqChannelSetLayer(SequenceChannel* channel, s32 layerIndex) {
return 0;
}
-void AudioSeq_SeqLayerDisable(SequenceLayer* layer) {
+void AudioScript_SeqLayerDisable(SequenceLayer* layer) {
if (layer != NULL) {
- if ((layer->channel != &gAudioContext.sequenceChannelNone) && (layer->channel->seqPlayer->finished == true)) {
+ if ((layer->channel != &gAudioCtx.sequenceChannelNone) && (layer->channel->seqPlayer->finished == true)) {
AudioPlayback_SeqLayerNoteRelease(layer);
} else {
AudioPlayback_SeqLayerNoteDecay(layer);
@@ -394,30 +394,30 @@ void AudioSeq_SeqLayerDisable(SequenceLayer* layer) {
}
}
-void AudioSeq_SeqLayerFree(SequenceChannel* channel, s32 layerIndex) {
+void AudioScript_SeqLayerFree(SequenceChannel* channel, s32 layerIndex) {
SequenceLayer* layer = channel->layers[layerIndex];
if (layer != NULL) {
- AudioSeq_AudioListPushBack(&gAudioContext.layerFreeList, &layer->listItem);
- AudioSeq_SeqLayerDisable(layer);
+ AudioScript_AudioListPushBack(&gAudioCtx.layerFreeList, &layer->listItem);
+ AudioScript_SeqLayerDisable(layer);
channel->layers[layerIndex] = NULL;
}
}
-void AudioSeq_SequenceChannelDisable(SequenceChannel* channel) {
+void AudioScript_SequenceChannelDisable(SequenceChannel* channel) {
s32 i;
channel->finished = true;
for (i = 0; i < 4; i++) {
- AudioSeq_SeqLayerFree(channel, i);
+ AudioScript_SeqLayerFree(channel, i);
}
AudioPlayback_NotePoolClear(&channel->notePool);
channel->enabled = false;
}
-void AudioSeq_SequencePlayerSetupChannels(SequencePlayer* seqPlayer, u16 channelBits) {
+void AudioScript_SequencePlayerSetupChannels(SequencePlayer* seqPlayer, u16 channelBits) {
SequenceChannel* channel;
s32 i;
@@ -432,19 +432,19 @@ void AudioSeq_SequencePlayerSetupChannels(SequencePlayer* seqPlayer, u16 channel
}
}
-void AudioSeq_SequencePlayerDisableChannels(SequencePlayer* seqPlayer, u16 channelBitsUnused) {
+void AudioScript_SequencePlayerDisableChannels(SequencePlayer* seqPlayer, u16 channelBitsUnused) {
SequenceChannel* channel;
s32 i;
for (i = 0; i < SEQ_NUM_CHANNELS; i++) {
channel = seqPlayer->channels[i];
if (IS_SEQUENCE_CHANNEL_VALID(channel) == 1) {
- AudioSeq_SequenceChannelDisable(channel);
+ AudioScript_SequenceChannelDisable(channel);
}
}
}
-void AudioSeq_SequenceChannelEnable(SequencePlayer* seqPlayer, u8 channelIndex, void* script) {
+void AudioScript_SequenceChannelEnable(SequencePlayer* seqPlayer, u8 channelIndex, void* script) {
SequenceChannel* channel = seqPlayer->channels[channelIndex];
s32 i;
@@ -456,18 +456,18 @@ void AudioSeq_SequenceChannelEnable(SequencePlayer* seqPlayer, u8 channelIndex,
for (i = 0; i < ARRAY_COUNT(channel->layers); i++) {
if (channel->layers[i] != NULL) {
- AudioSeq_SeqLayerFree(channel, i);
+ AudioScript_SeqLayerFree(channel, i);
}
}
}
-void AudioSeq_SequencePlayerDisableAsFinished(SequencePlayer* seqPlayer) {
+void AudioScript_SequencePlayerDisableAsFinished(SequencePlayer* seqPlayer) {
seqPlayer->finished = true;
- AudioSeq_SequencePlayerDisable(seqPlayer);
+ AudioScript_SequencePlayerDisable(seqPlayer);
}
-void AudioSeq_SequencePlayerDisable(SequencePlayer* seqPlayer) {
- AudioSeq_SequencePlayerDisableChannels(seqPlayer, 0xFFFF);
+void AudioScript_SequencePlayerDisable(SequencePlayer* seqPlayer) {
+ AudioScript_SequencePlayerDisableChannels(seqPlayer, 0xFFFF);
AudioPlayback_NotePoolClear(&seqPlayer->notePool);
if (!seqPlayer->enabled) {
return;
@@ -484,14 +484,14 @@ void AudioSeq_SequencePlayerDisable(SequencePlayer* seqPlayer) {
AudioLoad_SetFontLoadStatus(seqPlayer->defaultFont, LOAD_STATUS_MAYBE_DISCARDABLE);
}
- if (seqPlayer->defaultFont == gAudioContext.fontCache.temporary.entries[0].id) {
- gAudioContext.fontCache.temporary.nextSide = 1;
- } else if (seqPlayer->defaultFont == gAudioContext.fontCache.temporary.entries[1].id) {
- gAudioContext.fontCache.temporary.nextSide = 0;
+ if (seqPlayer->defaultFont == gAudioCtx.fontCache.temporary.entries[0].id) {
+ gAudioCtx.fontCache.temporary.nextSide = 1;
+ } else if (seqPlayer->defaultFont == gAudioCtx.fontCache.temporary.entries[1].id) {
+ gAudioCtx.fontCache.temporary.nextSide = 0;
}
}
-void AudioSeq_AudioListPushBack(AudioListItem* list, AudioListItem* item) {
+void AudioScript_AudioListPushBack(AudioListItem* list, AudioListItem* item) {
if (item->prev == NULL) {
list->prev->next = item;
item->prev = list->prev;
@@ -502,7 +502,7 @@ void AudioSeq_AudioListPushBack(AudioListItem* list, AudioListItem* item) {
}
}
-void* AudioSeq_AudioListPopBack(AudioListItem* list) {
+void* AudioScript_AudioListPopBack(AudioListItem* list) {
AudioListItem* item = list->prev;
if (item == list) {
@@ -517,33 +517,33 @@ void* AudioSeq_AudioListPopBack(AudioListItem* list) {
return item->u.value;
}
-void AudioSeq_InitLayerFreelist(void) {
+void AudioScript_InitLayerFreelist(void) {
s32 i;
- gAudioContext.layerFreeList.prev = &gAudioContext.layerFreeList;
- gAudioContext.layerFreeList.next = &gAudioContext.layerFreeList;
- gAudioContext.layerFreeList.u.count = 0;
- gAudioContext.layerFreeList.pool = NULL;
+ gAudioCtx.layerFreeList.prev = &gAudioCtx.layerFreeList;
+ gAudioCtx.layerFreeList.next = &gAudioCtx.layerFreeList;
+ gAudioCtx.layerFreeList.u.count = 0;
+ gAudioCtx.layerFreeList.pool = NULL;
- for (i = 0; i < ARRAY_COUNT(gAudioContext.sequenceLayers); i++) {
- gAudioContext.sequenceLayers[i].listItem.u.value = &gAudioContext.sequenceLayers[i];
- gAudioContext.sequenceLayers[i].listItem.prev = NULL;
- AudioSeq_AudioListPushBack(&gAudioContext.layerFreeList, &gAudioContext.sequenceLayers[i].listItem);
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.sequenceLayers); i++) {
+ gAudioCtx.sequenceLayers[i].listItem.u.value = &gAudioCtx.sequenceLayers[i];
+ gAudioCtx.sequenceLayers[i].listItem.prev = NULL;
+ AudioScript_AudioListPushBack(&gAudioCtx.layerFreeList, &gAudioCtx.sequenceLayers[i].listItem);
}
}
-u8 AudioSeq_ScriptReadU8(SeqScriptState* state) {
+u8 AudioScript_ScriptReadU8(SeqScriptState* state) {
return *(state->pc++);
}
-s16 AudioSeq_ScriptReadS16(SeqScriptState* state) {
+s16 AudioScript_ScriptReadS16(SeqScriptState* state) {
s16 ret = *(state->pc++) << 8;
ret = *(state->pc++) | ret;
return ret;
}
-u16 AudioSeq_ScriptReadCompressedU16(SeqScriptState* state) {
+u16 AudioScript_ScriptReadCompressedU16(SeqScriptState* state) {
u16 ret = *(state->pc++);
if (ret & 0x80) {
@@ -553,7 +553,7 @@ u16 AudioSeq_ScriptReadCompressedU16(SeqScriptState* state) {
return ret;
}
-void AudioSeq_SeqLayerProcessScript(SequenceLayer* layer) {
+void AudioScript_SeqLayerProcessScript(SequenceLayer* layer) {
s32 cmd;
if (!layer->enabled) {
@@ -562,42 +562,42 @@ void AudioSeq_SeqLayerProcessScript(SequenceLayer* layer) {
if (layer->delay > 1) {
layer->delay--;
- if (!layer->stopSomething && (layer->delay <= layer->gateDelay)) {
+ if (!layer->muted && (layer->delay <= layer->gateDelay)) {
AudioPlayback_SeqLayerNoteDecay(layer);
- layer->stopSomething = true;
+ layer->muted = true;
}
return;
}
- AudioSeq_SeqLayerProcessScriptStep1(layer);
+ AudioScript_SeqLayerProcessScriptStep1(layer);
do {
- cmd = AudioSeq_SeqLayerProcessScriptStep2(layer);
+ cmd = AudioScript_SeqLayerProcessScriptStep2(layer);
if (cmd == PROCESS_SCRIPT_END) {
return;
}
- cmd = AudioSeq_SeqLayerProcessScriptStep3(layer, cmd);
+ cmd = AudioScript_SeqLayerProcessScriptStep3(layer, cmd);
} while ((cmd == -1) && (layer->delay == 0));
if (cmd != PROCESS_SCRIPT_END) {
// returns `sameTunedSample` instead of a command
- cmd = AudioSeq_SeqLayerProcessScriptStep4(layer, cmd);
+ cmd = AudioScript_SeqLayerProcessScriptStep4(layer, cmd);
}
if (cmd != PROCESS_SCRIPT_END) {
- AudioSeq_SeqLayerProcessScriptStep5(layer, cmd);
+ AudioScript_SeqLayerProcessScriptStep5(layer, cmd);
}
- if (layer->stopSomething == true) {
+ if (layer->muted == true) {
if ((layer->note != NULL) || layer->continuousNotes) {
AudioPlayback_SeqLayerNoteDecay(layer);
}
}
}
-void AudioSeq_SeqLayerProcessScriptStep1(SequenceLayer* layer) {
+void AudioScript_SeqLayerProcessScriptStep1(SequenceLayer* layer) {
if (!layer->continuousNotes) {
AudioPlayback_SeqLayerNoteDecay(layer);
} else if ((layer->note != NULL) && (layer->note->playbackState.wantedParentLayer == layer)) {
@@ -611,7 +611,7 @@ void AudioSeq_SeqLayerProcessScriptStep1(SequenceLayer* layer) {
layer->notePropertiesNeedInit = true;
}
-s32 AudioSeq_SeqLayerProcessScriptStep5(SequenceLayer* layer, s32 sameTunedSample) {
+s32 AudioScript_SeqLayerProcessScriptStep5(SequenceLayer* layer, s32 sameTunedSample) {
Note* note;
if ((layer->continuousNotes == true) && (layer->bit1 == true)) {
@@ -648,7 +648,7 @@ s32 AudioSeq_SeqLayerProcessScriptStep5(SequenceLayer* layer, s32 sameTunedSampl
return 0;
}
-s32 AudioSeq_SeqLayerProcessScriptStep2(SequenceLayer* layer) {
+s32 AudioScript_SeqLayerProcessScriptStep2(SequenceLayer* layer) {
SequenceChannel* channel = layer->channel;
SeqScriptState* state = &layer->scriptState;
SequencePlayer* seqPlayer = channel->seqPlayer;
@@ -658,22 +658,22 @@ s32 AudioSeq_SeqLayerProcessScriptStep2(SequenceLayer* layer) {
u16 velocity;
while (true) {
- cmd = AudioSeq_ScriptReadU8(state);
+ cmd = AudioScript_ScriptReadU8(state);
// Note Commands
- // To be processed in AudioSeq_SeqLayerProcessScriptStep3
+ // To be processed in AudioScript_SeqLayerProcessScriptStep3
if (cmd <= 0xC0) {
return cmd;
}
// Control Flow Commands
if (cmd >= 0xF2) {
- cmdArg16 = AudioSeq_GetScriptControlFlowArgument(state, cmd);
+ cmdArg16 = AudioScript_GetScriptControlFlowArgument(state, cmd);
- if (AudioSeq_HandleScriptFlowControl(seqPlayer, state, cmd, cmdArg16) == 0) {
+ if (AudioScript_HandleScriptFlowControl(seqPlayer, state, cmd, cmdArg16) == 0) {
continue;
}
- AudioSeq_SeqLayerDisable(layer);
+ AudioScript_SeqLayerDisable(layer);
return PROCESS_SCRIPT_END;
}
@@ -710,12 +710,12 @@ s32 AudioSeq_SeqLayerProcessScriptStep2(SequenceLayer* layer) {
break;
case 0xC3: // layer: set short note default delay
- cmdArg16 = AudioSeq_ScriptReadCompressedU16(state);
+ cmdArg16 = AudioScript_ScriptReadCompressedU16(state);
layer->shortNoteDefaultDelay = cmdArg16;
break;
case 0xC6: // layer: set instrument
- cmd = AudioSeq_ScriptReadU8(state);
+ cmd = AudioScript_ScriptReadU8(state);
if (cmd >= 0x7E) {
if (cmd == 0x7E) {
// Sfxs
@@ -734,17 +734,17 @@ s32 AudioSeq_SeqLayerProcessScriptStep2(SequenceLayer* layer) {
}
} else {
// Instrument
- if ((layer->instOrWave = AudioSeq_GetInstrument(channel, cmd, &layer->instrument, &layer->adsr)) ==
- 0) {
+ if ((layer->instOrWave =
+ AudioScript_GetInstrument(channel, cmd, &layer->instrument, &layer->adsr)) == 0) {
layer->instOrWave = 0xFF;
}
}
break;
case 0xC7: // layer: enable portamento
- layer->portamento.mode = AudioSeq_ScriptReadU8(state);
+ layer->portamento.mode = AudioScript_ScriptReadU8(state);
- cmd = AudioSeq_ScriptReadU8(state);
+ cmd = AudioScript_ScriptReadU8(state);
cmd += channel->transposition;
cmd += layer->transposition;
cmd += seqPlayer->transposition;
@@ -761,7 +761,7 @@ s32 AudioSeq_SeqLayerProcessScriptStep2(SequenceLayer* layer) {
break;
}
- cmdArg16 = AudioSeq_ScriptReadCompressedU16(state);
+ cmdArg16 = AudioScript_ScriptReadCompressedU16(state);
layer->portamentoTime = cmdArg16;
break;
@@ -770,11 +770,11 @@ s32 AudioSeq_SeqLayerProcessScriptStep2(SequenceLayer* layer) {
break;
case 0xCB: // layer: set envelope and decay index
- cmdArg16 = AudioSeq_ScriptReadS16(state);
+ cmdArg16 = AudioScript_ScriptReadS16(state);
layer->adsr.envelope = (EnvelopePoint*)(seqPlayer->seqData + cmdArg16);
// fallthrough
case 0xCF: // layer: set decay index
- layer->adsr.decayIndex = AudioSeq_ScriptReadU8(state);
+ layer->adsr.decayIndex = AudioScript_ScriptReadU8(state);
break;
case 0xCC: // layer: ignore drum pan
@@ -782,21 +782,21 @@ s32 AudioSeq_SeqLayerProcessScriptStep2(SequenceLayer* layer) {
break;
case 0xCD: // layer: stereo effects
- layer->stereoData.asByte = AudioSeq_ScriptReadU8(state);
+ layer->stereoData.asByte = AudioScript_ScriptReadU8(state);
break;
case 0xCE: // layer: bend pitch
- cmdArg8 = AudioSeq_ScriptReadU8(state);
+ cmdArg8 = AudioScript_ScriptReadU8(state);
layer->bend = gBendPitchTwoSemitonesFrequencies[(u8)(cmdArg8 + 0x80)];
break;
case 0xF0: // layer:
- cmdArg16 = AudioSeq_ScriptReadS16(state);
+ cmdArg16 = AudioScript_ScriptReadS16(state);
layer->unk_0A.asByte &= (cmdArg16 ^ 0xFFFF);
break;
case 0xF1: // layer:
- layer->surroundEffectIndex = AudioSeq_ScriptReadU8(state);
+ layer->surroundEffectIndex = AudioScript_ScriptReadU8(state);
break;
default:
@@ -814,7 +814,7 @@ s32 AudioSeq_SeqLayerProcessScriptStep2(SequenceLayer* layer) {
}
}
-s32 AudioSeq_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd) {
+s32 AudioScript_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd) {
s32 sameTunedSample = true;
s32 instOrWave;
s32 speed;
@@ -856,7 +856,7 @@ s32 AudioSeq_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd) {
drum = AudioPlayback_GetDrum(channel->fontId, semitone);
if (drum == NULL) {
- layer->stopSomething = true;
+ layer->muted = true;
layer->delay2 = layer->delay;
return PROCESS_SCRIPT_END;
}
@@ -879,7 +879,7 @@ s32 AudioSeq_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd) {
soundEffect = AudioPlayback_GetSoundEffect(channel->fontId, sfxId);
if (soundEffect == NULL) {
- layer->stopSomething = true;
+ layer->muted = true;
layer->delay2 = layer->delay + 1;
return PROCESS_SCRIPT_END;
}
@@ -895,7 +895,7 @@ s32 AudioSeq_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd) {
layer->semitone = semitone;
if (semitone >= 0x80) {
- layer->stopSomething = true;
+ layer->muted = true;
return PROCESS_SCRIPT_END;
}
@@ -918,7 +918,7 @@ s32 AudioSeq_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd) {
layer->tunedSample = NULL;
tuning = 1.0f;
if (instOrWave >= 0xC0) {
- layer->tunedSample = &gAudioContext.synthesisReverbs[instOrWave - 0xC0].tunedSample;
+ layer->tunedSample = &gAudioCtx.synthesisReverbs[instOrWave - 0xC0].tunedSample;
}
}
@@ -948,12 +948,12 @@ s32 AudioSeq_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd) {
portamento->extent = (freqScale2 / freqScale) - 1.0f;
if (PORTAMENTO_IS_SPECIAL(*portamento)) {
- speed = seqPlayer->tempo * 0x8000 / gAudioContext.tempoInternalToExternal;
+ speed = seqPlayer->tempo * 0x8000 / gAudioCtx.maxTempo;
if (layer->delay != 0) {
speed = speed * 0x100 / (layer->delay * layer->portamentoTime);
}
} else {
- speed = 0x20000 / (layer->portamentoTime * gAudioContext.audioBufferParameters.updatesPerFrame);
+ speed = 0x20000 / (layer->portamentoTime * gAudioCtx.audioBufferParameters.updatesPerFrame);
}
if (speed >= 0x7FFF) {
@@ -980,7 +980,7 @@ s32 AudioSeq_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd) {
layer->tunedSample = NULL;
layer->freqScale = gPitchFrequencies[semitone2];
if (instOrWave >= 0xC0) {
- layer->tunedSample = &gAudioContext.synthesisReverbs[instOrWave - 0xC0].tunedSample;
+ layer->tunedSample = &gAudioCtx.synthesisReverbs[instOrWave - 0xC0].tunedSample;
}
}
break;
@@ -996,7 +996,7 @@ s32 AudioSeq_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd) {
time = 0.0f;
}
time *= seqPlayer->tempo;
- time *= gAudioContext.unk_2870;
+ time *= gAudioCtx.unk_2870;
time /= layer->freqScale;
//! FAKE:
if (1) {}
@@ -1011,7 +1011,7 @@ s32 AudioSeq_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd) {
// (It's a bit unclear if 'portamento' has actually always been
// set when this is reached...)
if (PORTAMENTO_IS_SPECIAL(*portamento)) {
- speed2 = seqPlayer->tempo * 0x8000 / gAudioContext.tempoInternalToExternal;
+ speed2 = seqPlayer->tempo * 0x8000 / gAudioCtx.maxTempo;
speed2 = speed2 * 0x100 / (layer->delay * layer->portamentoTime);
if (speed2 >= 0x7FFF) {
speed2 = 0x7FFF;
@@ -1025,7 +1025,7 @@ s32 AudioSeq_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd) {
return sameTunedSample;
}
-s32 AudioSeq_SeqLayerProcessScriptStep3(SequenceLayer* layer, s32 cmd) {
+s32 AudioScript_SeqLayerProcessScriptStep3(SequenceLayer* layer, s32 cmd) {
SeqScriptState* state = &layer->scriptState;
u16 delay;
s32 velocity;
@@ -1035,25 +1035,25 @@ s32 AudioSeq_SeqLayerProcessScriptStep3(SequenceLayer* layer, s32 cmd) {
f32 floatDelta;
if (cmd == 0xC0) { // layer: delay
- layer->delay = AudioSeq_ScriptReadCompressedU16(state);
- layer->stopSomething = true;
+ layer->delay = AudioScript_ScriptReadCompressedU16(state);
+ layer->muted = true;
layer->bit1 = false;
return PROCESS_SCRIPT_END;
}
- layer->stopSomething = false;
+ layer->muted = false;
if (channel->largeNotes == true) {
switch (cmd & 0xC0) {
case 0x00: // layer: large note 0
- delay = AudioSeq_ScriptReadCompressedU16(state);
+ delay = AudioScript_ScriptReadCompressedU16(state);
velocity = *(state->pc++);
layer->gateTime = *(state->pc++);
layer->lastDelay = delay;
break;
case 0x40: // layer: large note 1
- delay = AudioSeq_ScriptReadCompressedU16(state);
+ delay = AudioScript_ScriptReadCompressedU16(state);
velocity = *(state->pc++);
layer->gateTime = 0;
layer->lastDelay = delay;
@@ -1074,7 +1074,7 @@ s32 AudioSeq_SeqLayerProcessScriptStep3(SequenceLayer* layer, s32 cmd) {
} else {
switch (cmd & 0xC0) {
case 0x00: // layer: small note 0
- delay = AudioSeq_ScriptReadCompressedU16(state);
+ delay = AudioScript_ScriptReadCompressedU16(state);
layer->lastDelay = delay;
break;
@@ -1090,8 +1090,8 @@ s32 AudioSeq_SeqLayerProcessScriptStep3(SequenceLayer* layer, s32 cmd) {
}
if (channel->velocityRandomVariance != 0) {
- floatDelta = layer->velocitySquare * (gAudioContext.audioRandom % channel->velocityRandomVariance) / 100.0f;
- if ((gAudioContext.audioRandom & 0x8000) != 0) {
+ floatDelta = layer->velocitySquare * (gAudioCtx.audioRandom % channel->velocityRandomVariance) / 100.0f;
+ if ((gAudioCtx.audioRandom & 0x8000) != 0) {
floatDelta = -floatDelta;
}
@@ -1111,8 +1111,8 @@ s32 AudioSeq_SeqLayerProcessScriptStep3(SequenceLayer* layer, s32 cmd) {
if (channel->gateTimeRandomVariance != 0) {
//! @bug should probably be gateTimeRandomVariance
- intDelta = (layer->gateDelay * (gAudioContext.audioRandom % channel->velocityRandomVariance)) / 100;
- if ((gAudioContext.audioRandom & 0x4000) != 0) {
+ intDelta = (layer->gateDelay * (gAudioCtx.audioRandom % channel->velocityRandomVariance)) / 100;
+ if ((gAudioCtx.audioRandom & 0x4000) != 0) {
intDelta = -intDelta;
}
@@ -1124,21 +1124,21 @@ s32 AudioSeq_SeqLayerProcessScriptStep3(SequenceLayer* layer, s32 cmd) {
}
}
- if ((seqPlayer->muted && (channel->muteFlags & (MUTE_FLAGS_STOP_NOTES | MUTE_FLAGS_4))) ||
- channel->stopSomething2) {
- layer->stopSomething = true;
+ if ((seqPlayer->muted && (channel->muteFlags & (MUTE_FLAGS_STOP_NOTES | MUTE_FLAGS_STOP_LAYER))) ||
+ channel->muted) {
+ layer->muted = true;
return PROCESS_SCRIPT_END;
}
if (seqPlayer->skipTicks != 0) {
- layer->stopSomething = true;
+ layer->muted = true;
return PROCESS_SCRIPT_END;
}
return cmd;
}
-void AudioSeq_SetChannelPriorities(SequenceChannel* channel, u8 priority) {
+void AudioScript_SetChannelPriorities(SequenceChannel* channel, u8 priority) {
if ((priority & 0xF) != 0) {
channel->notePriority = priority & 0xF;
}
@@ -1149,7 +1149,7 @@ void AudioSeq_SetChannelPriorities(SequenceChannel* channel, u8 priority) {
}
}
-u8 AudioSeq_GetInstrument(SequenceChannel* channel, u8 instId, Instrument** instOut, AdsrSettings* adsr) {
+u8 AudioScript_GetInstrument(SequenceChannel* channel, u8 instId, Instrument** instOut, AdsrSettings* adsr) {
Instrument* inst = AudioPlayback_GetInstrumentInner(channel->fontId, instId);
if (inst == NULL) {
@@ -1169,7 +1169,7 @@ u8 AudioSeq_GetInstrument(SequenceChannel* channel, u8 instId, Instrument** inst
return instId;
}
-void AudioSeq_SetInstrument(SequenceChannel* channel, u8 instId) {
+void AudioScript_SetInstrument(SequenceChannel* channel, u8 instId) {
if (instId >= 0x80) {
// Synthetic Waves
channel->instOrWave = instId;
@@ -1184,7 +1184,7 @@ void AudioSeq_SetInstrument(SequenceChannel* channel, u8 instId) {
channel->instrument = (Instrument*)2; // invalid pointer, never dereferenced
} else {
// Instruments
- if ((channel->instOrWave = AudioSeq_GetInstrument(channel, instId, &channel->instrument, &channel->adsr)) ==
+ if ((channel->instOrWave = AudioScript_GetInstrument(channel, instId, &channel->instrument, &channel->adsr)) ==
0) {
channel->hasInstrument = false;
return;
@@ -1194,11 +1194,11 @@ void AudioSeq_SetInstrument(SequenceChannel* channel, u8 instId) {
channel->hasInstrument = true;
}
-void AudioSeq_SequenceChannelSetVolume(SequenceChannel* channel, u8 volume) {
+void AudioScript_SequenceChannelSetVolume(SequenceChannel* channel, u8 volume) {
channel->volume = (s32)volume / 127.0f;
}
-void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
+void AudioScript_SequenceChannelProcessScript(SequenceChannel* channel) {
s32 i;
u8* data;
u32 rand;
@@ -1225,7 +1225,7 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
u16 cmdArgU16;
u32 cmdArgs[3];
s8 cmdArgS8;
- u8 cmd = AudioSeq_ScriptReadU8(scriptState);
+ u8 cmd = AudioScript_ScriptReadU8(scriptState);
u8 lowBits;
u8 highBits;
s32 delay;
@@ -1244,19 +1244,19 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
// read in arguments for the instruction
for (i = 0; i < lowBits; i++, highBits <<= 1) {
if (!(highBits & 0x80)) {
- cmdArgs[i] = AudioSeq_ScriptReadU8(scriptState);
+ cmdArgs[i] = AudioScript_ScriptReadU8(scriptState);
} else {
- cmdArgs[i] = AudioSeq_ScriptReadS16(scriptState);
+ cmdArgs[i] = AudioScript_ScriptReadS16(scriptState);
}
}
// Control Flow Commands
if (cmd >= 0xF2) {
- delay = AudioSeq_HandleScriptFlowControl(seqPlayer, scriptState, cmd, cmdArgs[0]);
+ delay = AudioScript_HandleScriptFlowControl(seqPlayer, scriptState, cmd, cmdArgs[0]);
if (delay != 0) {
if (delay == PROCESS_SCRIPT_END) {
- AudioSeq_SequenceChannelDisable(channel);
+ AudioScript_SequenceChannelDisable(channel);
} else {
channel->delay = delay;
}
@@ -1297,9 +1297,9 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
cmd = (u8)cmdArgs[0];
if (seqPlayer->defaultFont != 0xFF) {
- cmdArgU16 = ((u16*)gAudioContext.sequenceFontTable)[seqPlayer->seqId];
- lowBits = gAudioContext.sequenceFontTable[cmdArgU16];
- cmd = gAudioContext.sequenceFontTable[cmdArgU16 + lowBits - cmd];
+ cmdArgU16 = ((u16*)gAudioCtx.sequenceFontTable)[seqPlayer->seqId];
+ lowBits = gAudioCtx.sequenceFontTable[cmdArgU16];
+ cmd = gAudioCtx.sequenceFontTable[cmdArgU16 + lowBits - cmd];
}
if (AudioHeap_SearchCaches(FONT_TABLE, CACHE_EITHER, cmd)) {
@@ -1310,7 +1310,7 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
// fallthrough
case 0xC1: // channel: set instrument
cmd = (u8)cmdArgs[0];
- AudioSeq_SetInstrument(channel, cmd);
+ AudioScript_SetInstrument(channel, cmd);
break;
case 0xC3: // channel: large notes off
@@ -1323,7 +1323,7 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
case 0xDF: // channel: set volume
cmd = (u8)cmdArgs[0];
- AudioSeq_SequenceChannelSetVolume(channel, cmd);
+ AudioScript_SequenceChannelSetVolume(channel, cmd);
channel->changes.s.volume = true;
break;
@@ -1380,11 +1380,11 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
channel->adsr.decayIndex = cmd;
break;
- case 0xD8: // channel: set vibrato extent
+ case 0xD8: // channel: set vibrato depth
cmd = (u8)cmdArgs[0];
- channel->vibrato.vibratoExtentTarget = cmd * 8;
- channel->vibrato.vibratoExtentStart = 0;
- channel->vibrato.vibratoExtentChangeDelay = 0;
+ channel->vibrato.vibratoDepthTarget = cmd * 8;
+ channel->vibrato.vibratoDepthStart = 0;
+ channel->vibrato.vibratoDepthChangeDelay = 0;
break;
case 0xD7: // channel: set vibrato rate
@@ -1394,13 +1394,13 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
channel->vibrato.vibratoRateStart = cmd * 32;
break;
- case 0xE2: // channel: set vibrato extent linear
+ case 0xE2: // channel: set vibrato depth linear
cmd = (u8)cmdArgs[0];
- channel->vibrato.vibratoExtentStart = cmd * 8;
+ channel->vibrato.vibratoDepthStart = cmd * 8;
cmd = (u8)cmdArgs[1];
- channel->vibrato.vibratoExtentTarget = cmd * 8;
+ channel->vibrato.vibratoDepthTarget = cmd * 8;
cmd = (u8)cmdArgs[2];
- channel->vibrato.vibratoExtentChangeDelay = cmd * 16;
+ channel->vibrato.vibratoDepthChangeDelay = cmd * 16;
break;
case 0xE1: // channel: set vibratorate linear
@@ -1426,9 +1426,9 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
cmd = (u8)cmdArgs[0];
if (seqPlayer->defaultFont != 0xFF) {
- cmdArgU16 = ((u16*)gAudioContext.sequenceFontTable)[seqPlayer->seqId];
- lowBits = gAudioContext.sequenceFontTable[cmdArgU16];
- cmd = gAudioContext.sequenceFontTable[cmdArgU16 + lowBits - cmd];
+ cmdArgU16 = ((u16*)gAudioCtx.sequenceFontTable)[seqPlayer->seqId];
+ lowBits = gAudioCtx.sequenceFontTable[cmdArgU16];
+ cmd = gAudioCtx.sequenceFontTable[cmdArgU16 + lowBits - cmd];
}
if (AudioHeap_SearchCaches(FONT_TABLE, CACHE_EITHER, cmd)) {
@@ -1459,7 +1459,7 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
case 0xCD: // channel: disable channel
cmd = (u8)cmdArgs[0];
- AudioSeq_SequenceChannelDisable(seqPlayer->channels[cmd]);
+ AudioScript_SequenceChannelDisable(seqPlayer->channels[cmd]);
break;
case 0xCA: // channel: set mute behavior
@@ -1533,7 +1533,7 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
channel->muteFlags = data[0];
data += 3;
channel->noteAllocPolicy = data[-2];
- AudioSeq_SetChannelPriorities(channel, data[-1]);
+ AudioScript_SetChannelPriorities(channel, data[-1]);
channel->transposition = (s8)data[0];
data += 4;
channel->newPan = data[-3];
@@ -1548,20 +1548,20 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
channel->muteFlags = cmdArgs[0];
channel->noteAllocPolicy = cmdArgs[1];
cmd = (u8)cmdArgs[2];
- AudioSeq_SetChannelPriorities(channel, cmd);
- channel->transposition = (s8)AudioSeq_ScriptReadU8(scriptState);
- channel->newPan = AudioSeq_ScriptReadU8(scriptState);
- channel->panChannelWeight = AudioSeq_ScriptReadU8(scriptState);
- channel->targetReverbVol = AudioSeq_ScriptReadU8(scriptState);
- channel->reverbIndex = AudioSeq_ScriptReadU8(scriptState);
+ AudioScript_SetChannelPriorities(channel, cmd);
+ channel->transposition = (s8)AudioScript_ScriptReadU8(scriptState);
+ channel->newPan = AudioScript_ScriptReadU8(scriptState);
+ channel->panChannelWeight = AudioScript_ScriptReadU8(scriptState);
+ channel->targetReverbVol = AudioScript_ScriptReadU8(scriptState);
+ channel->reverbIndex = AudioScript_ScriptReadU8(scriptState);
//! @bug: Not marking reverb state as changed
channel->changes.s.pan = true;
break;
case 0xEC: // channel: reset vibrato
- channel->vibrato.vibratoExtentTarget = 0;
- channel->vibrato.vibratoExtentStart = 0;
- channel->vibrato.vibratoExtentChangeDelay = 0;
+ channel->vibrato.vibratoDepthTarget = 0;
+ channel->vibrato.vibratoDepthStart = 0;
+ channel->vibrato.vibratoDepthChangeDelay = 0;
channel->vibrato.vibratoRateTarget = 0;
channel->vibrato.vibratoRateStart = 0;
channel->vibrato.vibratoRateChangeDelay = 0;
@@ -1579,7 +1579,7 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
break;
case 0xE9: // channel: set note priority
- AudioSeq_SetChannelPriorities(channel, (u8)cmdArgs[0]);
+ AudioScript_SetChannelPriorities(channel, (u8)cmdArgs[0]);
break;
case 0xED: // channel: set hilo gain
@@ -1625,13 +1625,13 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
break;
case 0xB7: // channel: random large
- channel->unk_22 = (cmdArgs[0] == 0) ? (gAudioContext.audioRandom & 0xFFFF)
- : (gAudioContext.audioRandom % cmdArgs[0]);
+ channel->unk_22 =
+ (cmdArgs[0] == 0) ? (gAudioCtx.audioRandom & 0xFFFF) : (gAudioCtx.audioRandom % cmdArgs[0]);
break;
case 0xB8: // channel: random value
- scriptState->value = (cmdArgs[0] == 0) ? (gAudioContext.audioRandom & 0xFFFF)
- : (gAudioContext.audioRandom % cmdArgs[0]);
+ scriptState->value =
+ (cmdArgs[0] == 0) ? (gAudioCtx.audioRandom & 0xFFFF) : (gAudioCtx.audioRandom % cmdArgs[0]);
break;
case 0xA8: // channel: random range large (only cmd that differs from OoT)
@@ -1667,9 +1667,9 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
case 0xBE: // channel:
if (cmdArgs[0] < 5) {
if (1) {}
- if (gAudioContext.unk_29A8[cmdArgs[0]] != NULL) {
- gCustomAudioSeqFunction = gAudioContext.unk_29A8[cmdArgs[0]];
- scriptState->value = gCustomAudioSeqFunction(scriptState->value, channel);
+ if (gAudioCtx.customSeqFunctions[cmdArgs[0]] != NULL) {
+ gAudioCustomSeqFunction = gAudioCtx.customSeqFunctions[cmdArgs[0]];
+ scriptState->value = gAudioCustomSeqFunction(scriptState->value, channel);
}
}
break;
@@ -1698,13 +1698,13 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
break;
case 0xA5: // channel:
- scriptState->value += channel->unk_11;
+ scriptState->value += channel->channelIndex;
break;
case 0xA6: // channel:
cmd = (u8)cmdArgs[0];
cmdArgU16 = (u16)cmdArgs[1];
- seqData = seqPlayer->seqData + (u32)(cmdArgU16 + channel->unk_11);
+ seqData = seqPlayer->seqData + (u32)(cmdArgU16 + channel->channelIndex);
seqData[0] = (u8)scriptState->value + cmd;
break;
@@ -1747,18 +1747,18 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
break;
case 0x88: // channel: set layer
- cmdArgU16 = AudioSeq_ScriptReadS16(scriptState);
- if (!AudioSeq_SeqChannelSetLayer(channel, lowBits)) {
+ cmdArgU16 = AudioScript_ScriptReadS16(scriptState);
+ if (!AudioScript_SeqChannelSetLayer(channel, lowBits)) {
channel->layers[lowBits]->scriptState.pc = &seqPlayer->seqData[cmdArgU16];
}
break;
case 0x90: // channel: free layer
- AudioSeq_SeqLayerFree(channel, lowBits);
+ AudioScript_SeqLayerFree(channel, lowBits);
break;
case 0x98: // channel: dynset layer
- if ((scriptState->value != -1) && (AudioSeq_SeqChannelSetLayer(channel, lowBits) != -1)) {
+ if ((scriptState->value != -1) && (AudioScript_SeqChannelSetLayer(channel, lowBits) != -1)) {
data = (*channel->dynTable)[scriptState->value];
cmdArgU16 = (data[0] << 8) + data[1];
channel->layers[lowBits]->scriptState.pc = &seqPlayer->seqData[cmdArgU16];
@@ -1766,12 +1766,12 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
break;
case 0x70: // channel: io write value
- channel->soundScriptIO[lowBits] = scriptState->value;
+ channel->seqScriptIO[lowBits] = scriptState->value;
break;
case 0x78: // channel: set layer relative
- temp1 = AudioSeq_ScriptReadS16(scriptState);
- if (!AudioSeq_SeqChannelSetLayer(channel, lowBits)) {
+ temp1 = AudioScript_ScriptReadS16(scriptState);
+ if (!AudioScript_SeqChannelSetLayer(channel, lowBits)) {
channel->layers[lowBits]->scriptState.pc = &scriptState->pc[temp1];
}
break;
@@ -1792,41 +1792,41 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
case 0x10: // channel: load sample
if (lowBits < 8) {
- channel->soundScriptIO[lowBits] = SEQ_IO_VAL_NONE;
- if (AudioLoad_SlowLoadSample(channel->fontId, scriptState->value,
- &channel->soundScriptIO[lowBits]) == -1) {}
+ channel->seqScriptIO[lowBits] = SEQ_IO_VAL_NONE;
+ if (AudioLoad_SlowLoadSample(channel->fontId, scriptState->value, &channel->seqScriptIO[lowBits]) ==
+ -1) {}
} else {
lowBits -= 8;
- channel->soundScriptIO[lowBits] = SEQ_IO_VAL_NONE;
+ channel->seqScriptIO[lowBits] = SEQ_IO_VAL_NONE;
if (AudioLoad_SlowLoadSample(channel->fontId, channel->unk_22 + 0x100,
- &channel->soundScriptIO[lowBits]) == -1) {}
+ &channel->seqScriptIO[lowBits]) == -1) {}
}
break;
case 0x60: // channel: io read value
- scriptState->value = channel->soundScriptIO[lowBits];
+ scriptState->value = channel->seqScriptIO[lowBits];
if (lowBits < 2) {
- channel->soundScriptIO[lowBits] = SEQ_IO_VAL_NONE;
+ channel->seqScriptIO[lowBits] = SEQ_IO_VAL_NONE;
}
break;
case 0x50: // channel: io read value subtract
- scriptState->value -= channel->soundScriptIO[lowBits];
+ scriptState->value -= channel->seqScriptIO[lowBits];
break;
case 0x20: // channel: start channel
- cmdArgU16 = AudioSeq_ScriptReadS16(scriptState);
- AudioSeq_SequenceChannelEnable(seqPlayer, lowBits, &seqPlayer->seqData[cmdArgU16]);
+ cmdArgU16 = AudioScript_ScriptReadS16(scriptState);
+ AudioScript_SequenceChannelEnable(seqPlayer, lowBits, &seqPlayer->seqData[cmdArgU16]);
break;
case 0x30: // channel: io write value 2
- cmd = AudioSeq_ScriptReadU8(scriptState);
- seqPlayer->channels[lowBits]->soundScriptIO[cmd] = scriptState->value;
+ cmd = AudioScript_ScriptReadU8(scriptState);
+ seqPlayer->channels[lowBits]->seqScriptIO[cmd] = scriptState->value;
break;
case 0x40: // channel: io read value 2
- cmd = AudioSeq_ScriptReadU8(scriptState);
- scriptState->value = seqPlayer->channels[lowBits]->soundScriptIO[cmd];
+ cmd = AudioScript_ScriptReadU8(scriptState);
+ scriptState->value = seqPlayer->channels[lowBits]->seqScriptIO[cmd];
break;
}
}
@@ -1834,12 +1834,12 @@ exit_loop:
for (i = 0; i < ARRAY_COUNT(channel->layers); i++) {
if (channel->layers[i] != NULL) {
- AudioSeq_SeqLayerProcessScript(channel->layers[i]);
+ AudioScript_SeqLayerProcessScript(channel->layers[i]);
}
}
}
-void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
+void AudioScript_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
u8 cmd;
u8 cmdLowBits;
SeqScriptState* seqScript = &seqPlayer->scriptState;
@@ -1866,7 +1866,7 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
if (AudioLoad_IsSeqLoadComplete(seqPlayer->seqId)) {}
if (AudioLoad_IsSeqLoadComplete(seqPlayer->defaultFont)) {}
- AudioSeq_SequencePlayerDisable(seqPlayer);
+ AudioScript_SequencePlayerDisable(seqPlayer);
return;
}
@@ -1879,18 +1879,18 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
seqPlayer->scriptCounter++;
- tempoChange = seqPlayer->tempo + seqPlayer->unk_0C;
- if (tempoChange > gAudioContext.tempoInternalToExternal) {
- tempoChange = gAudioContext.tempoInternalToExternal;
+ tempoChange = seqPlayer->tempo + seqPlayer->tempoChange;
+ if (tempoChange > gAudioCtx.maxTempo) {
+ tempoChange = gAudioCtx.maxTempo;
}
seqPlayer->tempoAcc += tempoChange;
- if (seqPlayer->tempoAcc < gAudioContext.tempoInternalToExternal) {
+ if (seqPlayer->tempoAcc < gAudioCtx.maxTempo) {
return;
}
- seqPlayer->tempoAcc -= (u16)gAudioContext.tempoInternalToExternal;
+ seqPlayer->tempoAcc -= (u16)gAudioCtx.maxTempo;
seqPlayer->unk_16++;
if (seqPlayer->stopScript == true) {
@@ -1903,16 +1903,16 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
seqPlayer->recalculateVolume = true;
while (true) {
- cmd = AudioSeq_ScriptReadU8(seqScript);
+ cmd = AudioScript_ScriptReadU8(seqScript);
// 0xF2 and above are "flow control" commands, including termination.
if (cmd >= 0xF2) {
- delay = AudioSeq_HandleScriptFlowControl(
- seqPlayer, seqScript, cmd, AudioSeq_GetScriptControlFlowArgument(&seqPlayer->scriptState, cmd));
+ delay = AudioScript_HandleScriptFlowControl(
+ seqPlayer, seqScript, cmd, AudioScript_GetScriptControlFlowArgument(&seqPlayer->scriptState, cmd));
if (delay != 0) {
if (delay == -1) {
- AudioSeq_SequencePlayerDisable(seqPlayer);
+ AudioScript_SequencePlayerDisable(seqPlayer);
} else {
seqPlayer->delay = delay;
}
@@ -1926,7 +1926,7 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
switch (cmd) {
case 0xF1: // seqPlayer: reserve notes
AudioPlayback_NotePoolClear(&seqPlayer->notePool);
- cmd = AudioSeq_ScriptReadU8(seqScript);
+ cmd = AudioScript_ScriptReadU8(seqScript);
AudioPlayback_NotePoolFill(&seqPlayer->notePool, cmd);
break;
@@ -1938,13 +1938,13 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
seqPlayer->transposition = 0;
// fallthrough
case 0xDE: // seqPlayer: transpose relative
- seqPlayer->transposition += (s8)AudioSeq_ScriptReadU8(seqScript);
+ seqPlayer->transposition += (s8)AudioScript_ScriptReadU8(seqScript);
break;
case 0xDD: // seqPlayer: set tempo
- seqPlayer->tempo = AudioSeq_ScriptReadU8(seqScript) * TATUMS_PER_BEAT;
- if (seqPlayer->tempo > gAudioContext.tempoInternalToExternal) {
- seqPlayer->tempo = gAudioContext.tempoInternalToExternal;
+ seqPlayer->tempo = AudioScript_ScriptReadU8(seqScript) * TATUMS_PER_BEAT;
+ if (seqPlayer->tempo > gAudioCtx.maxTempo) {
+ seqPlayer->tempo = gAudioCtx.maxTempo;
}
if ((s16)seqPlayer->tempo <= 0) {
@@ -1953,22 +1953,22 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
break;
case 0xDC: // seqPlayer: add tempo
- seqPlayer->unk_0C = (s8)AudioSeq_ScriptReadU8(seqScript) * TATUMS_PER_BEAT;
+ seqPlayer->tempoChange = (s8)AudioScript_ScriptReadU8(seqScript) * TATUMS_PER_BEAT;
break;
case 0xDA: // seqPlayer: change volume
- cmd = AudioSeq_ScriptReadU8(seqScript);
- temp = AudioSeq_ScriptReadS16(seqScript);
+ cmd = AudioScript_ScriptReadU8(seqScript);
+ temp = AudioScript_ScriptReadS16(seqScript);
switch (cmd) {
case SEQPLAYER_STATE_0:
- case SEQPLAYER_STATE_1:
- if (seqPlayer->state != SEQPLAYER_STATE_2) {
- seqPlayer->fadeTimerUnkEu = temp;
+ case SEQPLAYER_STATE_FADE_IN:
+ if (seqPlayer->state != SEQPLAYER_STATE_FADE_OUT) {
+ seqPlayer->storedFadeTimer = temp;
seqPlayer->state = cmd;
}
break;
- case SEQPLAYER_STATE_2:
+ case SEQPLAYER_STATE_FADE_OUT:
seqPlayer->fadeTimer = temp;
seqPlayer->state = cmd;
seqPlayer->fadeVelocity = (0.0f - seqPlayer->fadeVolume) / (s32)seqPlayer->fadeTimer;
@@ -1977,15 +1977,15 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
break;
case 0xDB: // seqPlayer: set volume
- value = AudioSeq_ScriptReadU8(seqScript);
+ value = AudioScript_ScriptReadU8(seqScript);
switch (seqPlayer->state) {
- case SEQPLAYER_STATE_1:
+ case SEQPLAYER_STATE_FADE_IN:
seqPlayer->state = SEQPLAYER_STATE_0;
seqPlayer->fadeVolume = 0.0f;
// fallthrough
case SEQPLAYER_STATE_0:
- seqPlayer->fadeTimer = seqPlayer->fadeTimerUnkEu;
- if (seqPlayer->fadeTimerUnkEu != 0) {
+ seqPlayer->fadeTimer = seqPlayer->storedFadeTimer;
+ if (seqPlayer->storedFadeTimer != 0) {
seqPlayer->fadeVelocity =
((value / 127.0f) - seqPlayer->fadeVolume) / (s32)seqPlayer->fadeTimer;
} else {
@@ -1993,26 +1993,26 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
}
break;
- case SEQPLAYER_STATE_2:
+ case SEQPLAYER_STATE_FADE_OUT:
break;
}
break;
case 0xD9: // seqPlayer: set volume scale
- seqPlayer->fadeVolumeScale = (s8)AudioSeq_ScriptReadU8(seqScript) / 127.0f;
+ seqPlayer->fadeVolumeScale = (s8)AudioScript_ScriptReadU8(seqScript) / 127.0f;
break;
case 0xD7: // seqPlayer: initialize channels
- temp = AudioSeq_ScriptReadS16(seqScript);
- AudioSeq_SequencePlayerSetupChannels(seqPlayer, temp);
+ temp = AudioScript_ScriptReadS16(seqScript);
+ AudioScript_SequencePlayerSetupChannels(seqPlayer, temp);
break;
case 0xD6: // seqPlayer: disable channels
- AudioSeq_ScriptReadS16(seqScript);
+ AudioScript_ScriptReadS16(seqScript);
break;
case 0xD5: // seqPlayer: set mute scale
- seqPlayer->muteVolumeScale = (s8)AudioSeq_ScriptReadU8(seqScript) / 127.0f;
+ seqPlayer->muteVolumeScale = (s8)AudioScript_ScriptReadU8(seqScript) / 127.0f;
break;
case 0xD4: // seqPlayer: mute
@@ -2020,12 +2020,12 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
break;
case 0xD3: // seqPlayer: set mute behavior
- seqPlayer->muteFlags = AudioSeq_ScriptReadU8(seqScript);
+ seqPlayer->muteFlags = AudioScript_ScriptReadU8(seqScript);
break;
case 0xD1: // seqPlayer: set short note gatetime table
case 0xD2: // seqPlayer: set short note velocity table
- temp = AudioSeq_ScriptReadS16(seqScript);
+ temp = AudioScript_ScriptReadS16(seqScript);
data3 = &seqPlayer->seqData[temp];
if (cmd == 0xD2) {
seqPlayer->shortNoteVelocityTable = data3;
@@ -2035,20 +2035,20 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
break;
case 0xD0: // seqPlayer: set note allocation policy
- seqPlayer->noteAllocPolicy = AudioSeq_ScriptReadU8(seqScript);
+ seqPlayer->noteAllocPolicy = AudioScript_ScriptReadU8(seqScript);
break;
case 0xCE: // seqPlayer: random value
- cmd = AudioSeq_ScriptReadU8(seqScript);
+ cmd = AudioScript_ScriptReadU8(seqScript);
if (cmd == 0) {
- seqScript->value = (gAudioContext.audioRandom >> 2) & 0xFF;
+ seqScript->value = (gAudioCtx.audioRandom >> 2) & 0xFF;
} else {
- seqScript->value = (gAudioContext.audioRandom >> 2) % cmd;
+ seqScript->value = (gAudioCtx.audioRandom >> 2) % cmd;
}
break;
case 0xCD: // seqPlayer: dyncall
- temp = AudioSeq_ScriptReadS16(seqScript);
+ temp = AudioScript_ScriptReadS16(seqScript);
if ((seqScript->value != -1) && (seqScript->depth != 3)) {
data1 = seqPlayer->seqData + (u32)(temp + (seqScript->value << 1));
seqScript->stack[seqScript->depth] = seqScript->pc;
@@ -2059,26 +2059,26 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
break;
case 0xCC: // seqPlayer: set value
- seqScript->value = AudioSeq_ScriptReadU8(seqScript);
+ seqScript->value = AudioScript_ScriptReadU8(seqScript);
break;
case 0xC9: // seqPlayer: `bit and` -> set value
- seqScript->value &= AudioSeq_ScriptReadU8(seqScript);
+ seqScript->value &= AudioScript_ScriptReadU8(seqScript);
break;
case 0xC8: // seqPlayer: subtract -> set value
- seqScript->value -= AudioSeq_ScriptReadU8(seqScript);
+ seqScript->value -= AudioScript_ScriptReadU8(seqScript);
break;
case 0xC7: // seqPlayer: write into sequence script
- cmd = AudioSeq_ScriptReadU8(seqScript);
- temp = AudioSeq_ScriptReadS16(seqScript);
+ cmd = AudioScript_ScriptReadU8(seqScript);
+ temp = AudioScript_ScriptReadS16(seqScript);
data2 = &seqPlayer->seqData[temp];
*data2 = (u8)seqScript->value + cmd;
break;
case 0xC2: // seqPlayer:
- temp = AudioSeq_ScriptReadS16(seqScript);
+ temp = AudioScript_ScriptReadS16(seqScript);
if (seqScript->value != -1) {
data4 = seqPlayer->seqData + (u32)(temp + (seqScript->value << 1));
@@ -2092,24 +2092,24 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
return;
case 0xC5: // seqPlayer:
- seqPlayer->unk_16 = AudioSeq_ScriptReadS16(seqScript);
+ seqPlayer->unk_16 = AudioScript_ScriptReadS16(seqScript);
break;
case 0xEF: // seqPlayer:
- AudioSeq_ScriptReadS16(seqScript);
- AudioSeq_ScriptReadU8(seqScript);
+ AudioScript_ScriptReadS16(seqScript);
+ AudioScript_ScriptReadU8(seqScript);
break;
case 0xC4: // seqPlayer: start sequence
- cmd = AudioSeq_ScriptReadU8(seqScript);
+ cmd = AudioScript_ScriptReadU8(seqScript);
if (cmd == 0xFF) {
cmd = seqPlayer->playerIndex;
- if (seqPlayer->state == SEQPLAYER_STATE_2) {
+ if (seqPlayer->state == SEQPLAYER_STATE_FADE_OUT) {
break;
}
}
- cmdLowBits = AudioSeq_ScriptReadU8(seqScript);
+ cmdLowBits = AudioScript_ScriptReadU8(seqScript);
AudioLoad_SyncInitSeqPlayer(cmd, cmdLowBits, 0);
if (cmd == (u8)seqPlayer->playerIndex) {
return;
@@ -2117,13 +2117,13 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
break;
case 0xC3: // seqPlayer:
- temp = AudioSeq_ScriptReadS16(seqScript);
+ temp = AudioScript_ScriptReadS16(seqScript);
if (seqScript->value != -1) {
new_var = (u16*)(seqPlayer->seqData + (u32)(temp + seqScript->value * 2));
temp = *new_var;
for (i = 0; i < ARRAY_COUNT(seqPlayer->channels); i++) {
- seqPlayer->channels[i]->stopSomething2 = temp & 1;
+ seqPlayer->channels[i]->muted = temp & 1;
temp = temp >> 1;
}
}
@@ -2141,46 +2141,46 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
break;
case 0x50: // seqPlayer: io read value subtract
- seqScript->value -= seqPlayer->soundScriptIO[cmdLowBits];
+ seqScript->value -= seqPlayer->seqScriptIO[cmdLowBits];
break;
case 0x70: // seqPlayer: io write value
- seqPlayer->soundScriptIO[cmdLowBits] = seqScript->value;
+ seqPlayer->seqScriptIO[cmdLowBits] = seqScript->value;
break;
case 0x80: // seqPlayer: io read value
- seqScript->value = seqPlayer->soundScriptIO[cmdLowBits];
+ seqScript->value = seqPlayer->seqScriptIO[cmdLowBits];
if (cmdLowBits < 2) {
- seqPlayer->soundScriptIO[cmdLowBits] = SEQ_IO_VAL_NONE;
+ seqPlayer->seqScriptIO[cmdLowBits] = SEQ_IO_VAL_NONE;
}
break;
case 0x40: // seqPlayer: disable channel
- AudioSeq_SequenceChannelDisable(seqPlayer->channels[cmdLowBits]);
+ AudioScript_SequenceChannelDisable(seqPlayer->channels[cmdLowBits]);
break;
case 0x90: // seqPlayer: start channel
- temp = AudioSeq_ScriptReadS16(seqScript);
- AudioSeq_SequenceChannelEnable(seqPlayer, cmdLowBits, (void*)&seqPlayer->seqData[temp]);
+ temp = AudioScript_ScriptReadS16(seqScript);
+ AudioScript_SequenceChannelEnable(seqPlayer, cmdLowBits, (void*)&seqPlayer->seqData[temp]);
break;
case 0xA0: // seqPlayer: start channel relative
- tempS = AudioSeq_ScriptReadS16(seqScript);
- AudioSeq_SequenceChannelEnable(seqPlayer, cmdLowBits, (void*)&seqScript->pc[tempS]);
+ tempS = AudioScript_ScriptReadS16(seqScript);
+ AudioScript_SequenceChannelEnable(seqPlayer, cmdLowBits, (void*)&seqScript->pc[tempS]);
break;
case 0xB0: // seqPlayer: load sequence
- cmd = AudioSeq_ScriptReadU8(seqScript);
- temp = AudioSeq_ScriptReadS16(seqScript);
+ cmd = AudioScript_ScriptReadU8(seqScript);
+ temp = AudioScript_ScriptReadS16(seqScript);
data2 = &seqPlayer->seqData[temp];
- AudioLoad_SlowLoadSeq(cmd, data2, &seqPlayer->soundScriptIO[cmdLowBits]);
+ AudioLoad_SlowLoadSeq(cmd, data2, &seqPlayer->seqScriptIO[cmdLowBits]);
break;
case 0x60: // seqPlayer: async load
- cmd = AudioSeq_ScriptReadU8(seqScript);
+ cmd = AudioScript_ScriptReadU8(seqScript);
value = cmd;
- temp = AudioSeq_ScriptReadU8(seqScript);
- AudioLoad_ScriptLoad(value, temp, &seqPlayer->soundScriptIO[cmdLowBits]);
+ temp = AudioScript_ScriptReadU8(seqScript);
+ AudioLoad_ScriptLoad(value, temp, &seqPlayer->seqScriptIO[cmdLowBits]);
break;
}
}
@@ -2189,22 +2189,21 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
for (j = 0; j < SEQ_NUM_CHANNELS; j++) {
channel = seqPlayer->channels[j];
if (channel->enabled) {
- AudioSeq_SequenceChannelProcessScript(channel);
+ AudioScript_SequenceChannelProcessScript(channel);
}
}
}
-void AudioSeq_ProcessSequences(s32 arg0) {
+void AudioScript_ProcessSequences(s32 arg0) {
SequencePlayer* seqPlayer;
u32 i;
- gAudioContext.sampleStateOffset =
- (gAudioContext.audioBufferParameters.updatesPerFrame - arg0 - 1) * gAudioContext.numNotes;
+ gAudioCtx.sampleStateOffset = (gAudioCtx.audioBufferParameters.updatesPerFrame - arg0 - 1) * gAudioCtx.numNotes;
- for (i = 0; i < (u32)gAudioContext.audioBufferParameters.numSequencePlayers; i++) {
- seqPlayer = &gAudioContext.seqPlayers[i];
+ for (i = 0; i < (u32)gAudioCtx.audioBufferParameters.numSequencePlayers; i++) {
+ seqPlayer = &gAudioCtx.seqPlayers[i];
if (seqPlayer->enabled == true) {
- AudioSeq_SequencePlayerProcessSequence(seqPlayer);
+ AudioScript_SequencePlayerProcessSequence(seqPlayer);
AudioEffects_SequencePlayerProcessSound(seqPlayer);
}
}
@@ -2212,26 +2211,26 @@ void AudioSeq_ProcessSequences(s32 arg0) {
AudioPlayback_ProcessNotes();
}
-void AudioSeq_SkipForwardSequence(SequencePlayer* seqPlayer) {
+void AudioScript_SkipForwardSequence(SequencePlayer* seqPlayer) {
while (seqPlayer->skipTicks > 0) {
- AudioSeq_SequencePlayerProcessSequence(seqPlayer);
+ AudioScript_SequencePlayerProcessSequence(seqPlayer);
AudioEffects_SequencePlayerProcessSound(seqPlayer);
seqPlayer->skipTicks--;
}
}
-void AudioSeq_ResetSequencePlayer(SequencePlayer* seqPlayer) {
- s32 i;
+void AudioScript_ResetSequencePlayer(SequencePlayer* seqPlayer) {
+ s32 channelIndex;
- AudioSeq_SequencePlayerDisable(seqPlayer);
+ AudioScript_SequencePlayerDisable(seqPlayer);
seqPlayer->stopScript = false;
seqPlayer->delay = 0;
- seqPlayer->state = SEQPLAYER_STATE_1;
+ seqPlayer->state = SEQPLAYER_STATE_FADE_IN;
seqPlayer->fadeTimer = 0;
- seqPlayer->fadeTimerUnkEu = 0;
+ seqPlayer->storedFadeTimer = 0;
seqPlayer->tempoAcc = 0;
seqPlayer->tempo = 120 * TATUMS_PER_BEAT; // 120 BPM
- seqPlayer->unk_0C = 0;
+ seqPlayer->tempoChange = 0;
seqPlayer->transposition = 0;
seqPlayer->noteAllocPolicy = 0;
seqPlayer->shortNoteVelocityTable = gDefaultShortNoteVelocityTable;
@@ -2243,41 +2242,41 @@ void AudioSeq_ResetSequencePlayer(SequencePlayer* seqPlayer) {
seqPlayer->volume = 0.0f;
seqPlayer->muteVolumeScale = 0.5f;
- for (i = 0; i < SEQ_NUM_CHANNELS; i++) {
- AudioSeq_InitSequenceChannel(seqPlayer->channels[i]);
+ for (channelIndex = 0; channelIndex < SEQ_NUM_CHANNELS; channelIndex++) {
+ AudioScript_InitSequenceChannel(seqPlayer->channels[channelIndex]);
}
}
-void AudioSeq_InitSequencePlayerChannels(s32 playerIndex) {
+void AudioScript_InitSequencePlayerChannels(s32 seqPlayerIndex) {
SequenceChannel* channel;
- SequencePlayer* seqPlayer = &gAudioContext.seqPlayers[playerIndex];
- s32 i;
- s32 j;
+ SequencePlayer* seqPlayer = &gAudioCtx.seqPlayers[seqPlayerIndex];
+ s32 channelIndex;
+ s32 layerIndex;
- for (i = 0; i < SEQ_NUM_CHANNELS; i++) {
- seqPlayer->channels[i] = AudioHeap_AllocZeroed(&gAudioContext.miscPool, sizeof(SequenceChannel));
- if (seqPlayer->channels[i] == NULL) {
- seqPlayer->channels[i] = &gAudioContext.sequenceChannelNone;
+ for (channelIndex = 0; channelIndex < SEQ_NUM_CHANNELS; channelIndex++) {
+ seqPlayer->channels[channelIndex] = AudioHeap_AllocZeroed(&gAudioCtx.miscPool, sizeof(SequenceChannel));
+ if (seqPlayer->channels[channelIndex] == NULL) {
+ seqPlayer->channels[channelIndex] = &gAudioCtx.sequenceChannelNone;
} else {
- channel = seqPlayer->channels[i];
+ channel = seqPlayer->channels[channelIndex];
channel->seqPlayer = seqPlayer;
channel->enabled = false;
- channel->unk_11 = i;
- for (j = 0; j < ARRAY_COUNT(channel->layers); j++) {
- channel->layers[j] = NULL;
+ channel->channelIndex = channelIndex;
+ for (layerIndex = 0; layerIndex < ARRAY_COUNT(channel->layers); layerIndex++) {
+ channel->layers[layerIndex] = NULL;
}
}
- AudioSeq_InitSequenceChannel(seqPlayer->channels[i]);
+ AudioScript_InitSequenceChannel(seqPlayer->channels[channelIndex]);
}
}
-void AudioSeq_InitSequencePlayer(SequencePlayer* seqPlayer) {
+void AudioScript_InitSequencePlayer(SequencePlayer* seqPlayer) {
s32 i;
s32 j;
for (i = 0; i < SEQ_NUM_CHANNELS; i++) {
- seqPlayer->channels[i] = &gAudioContext.sequenceChannelNone;
+ seqPlayer->channels[i] = &gAudioCtx.sequenceChannelNone;
}
seqPlayer->enabled = false;
@@ -2286,8 +2285,8 @@ void AudioSeq_InitSequencePlayer(SequencePlayer* seqPlayer) {
seqPlayer->seqDmaInProgress = false;
seqPlayer->applyBend = false;
- for (j = 0; j < ARRAY_COUNT(seqPlayer->soundScriptIO); j++) {
- seqPlayer->soundScriptIO[j] = SEQ_IO_VAL_NONE;
+ for (j = 0; j < ARRAY_COUNT(seqPlayer->seqScriptIO); j++) {
+ seqPlayer->seqScriptIO[j] = SEQ_IO_VAL_NONE;
}
seqPlayer->muteFlags = MUTE_FLAGS_SOFTEN | MUTE_FLAGS_STOP_NOTES;
@@ -2295,20 +2294,20 @@ void AudioSeq_InitSequencePlayer(SequencePlayer* seqPlayer) {
seqPlayer->bend = 1.0f;
AudioPlayback_InitNoteLists(&seqPlayer->notePool);
- AudioSeq_ResetSequencePlayer(seqPlayer);
+ AudioScript_ResetSequencePlayer(seqPlayer);
}
-void AudioSeq_InitSequencePlayers(void) {
+void AudioScript_InitSequencePlayers(void) {
s32 i;
- AudioSeq_InitLayerFreelist();
+ AudioScript_InitLayerFreelist();
- for (i = 0; i < ARRAY_COUNT(gAudioContext.sequenceLayers); i++) {
- gAudioContext.sequenceLayers[i].channel = NULL;
- gAudioContext.sequenceLayers[i].enabled = false;
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.sequenceLayers); i++) {
+ gAudioCtx.sequenceLayers[i].channel = NULL;
+ gAudioCtx.sequenceLayers[i].enabled = false;
}
- for (i = 0; i < ARRAY_COUNT(gAudioContext.seqPlayers); i++) {
- AudioSeq_InitSequencePlayer(&gAudioContext.seqPlayers[i]);
+ for (i = 0; i < ARRAY_COUNT(gAudioCtx.seqPlayers); i++) {
+ AudioScript_InitSequencePlayer(&gAudioCtx.seqPlayers[i]);
}
}
diff --git a/src/code/audio/audio_synthesis.c b/src/audio/lib/synthesis.c
similarity index 93%
rename from src/code/audio/audio_synthesis.c
rename to src/audio/lib/synthesis.c
index d3b25f446..71b6a2212 100644
--- a/src/code/audio/audio_synthesis.c
+++ b/src/audio/lib/synthesis.c
@@ -80,13 +80,13 @@ void AudioSynth_AddReverbBufferEntry(s32 numSamples, s32 updateIndex, s32 reverb
s32 count2;
s32 nextReverbSubBufPos;
- reverb = &gAudioContext.synthesisReverbs[reverbIndex];
+ reverb = &gAudioCtx.synthesisReverbs[reverbIndex];
entry = &reverb->bufEntry[reverb->curFrame][updateIndex];
- numSamplesAfterDownsampling = numSamples / gAudioContext.synthesisReverbs[reverbIndex].downsampleRate;
+ numSamplesAfterDownsampling = numSamples / gAudioCtx.synthesisReverbs[reverbIndex].downsampleRate;
// Apply resampling effect
- if (gAudioContext.synthesisReverbs[reverbIndex].resampleEffectOn) {
+ if (gAudioCtx.synthesisReverbs[reverbIndex].resampleEffectOn) {
if (reverb->downsampleRate == 1) {
count1 = 0;
count2 = 0;
@@ -199,10 +199,10 @@ void AudioSynth_SyncSampleStates(s32 updateIndex) {
s32 sampleStateBaseIndex;
s32 i;
- sampleStateBaseIndex = gAudioContext.numNotes * updateIndex;
- for (i = 0; i < gAudioContext.numNotes; i++) {
- noteSampleState = &gAudioContext.notes[i].sampleState;
- sampleState = &gAudioContext.sampleStateList[sampleStateBaseIndex + i];
+ sampleStateBaseIndex = gAudioCtx.numNotes * updateIndex;
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ noteSampleState = &gAudioCtx.notes[i].sampleState;
+ sampleState = &gAudioCtx.sampleStateList[sampleStateBaseIndex + i];
if (noteSampleState->bitField0.enabled) {
noteSampleState->bitField0.needsInit = false;
} else {
@@ -221,51 +221,51 @@ Acmd* AudioSynth_Update(Acmd* abiCmdStart, s32* numAbiCmds, s16* aiBufStart, s32
s32 reverbIndex;
SynthesisReverb* reverb;
- for (reverseUpdateIndex = gAudioContext.audioBufferParameters.updatesPerFrame; reverseUpdateIndex > 0;
+ for (reverseUpdateIndex = gAudioCtx.audioBufferParameters.updatesPerFrame; reverseUpdateIndex > 0;
reverseUpdateIndex--) {
- AudioSeq_ProcessSequences(reverseUpdateIndex - 1);
- AudioSynth_SyncSampleStates(gAudioContext.audioBufferParameters.updatesPerFrame - reverseUpdateIndex);
+ AudioScript_ProcessSequences(reverseUpdateIndex - 1);
+ AudioSynth_SyncSampleStates(gAudioCtx.audioBufferParameters.updatesPerFrame - reverseUpdateIndex);
}
curAiBufPos = aiBufStart;
- gAudioContext.adpcmCodeBook = NULL;
+ gAudioCtx.adpcmCodeBook = NULL;
// Process/Update all samples multiple times in a single frame
- for (reverseUpdateIndex = gAudioContext.audioBufferParameters.updatesPerFrame; reverseUpdateIndex > 0;
+ for (reverseUpdateIndex = gAudioCtx.audioBufferParameters.updatesPerFrame; reverseUpdateIndex > 0;
reverseUpdateIndex--) {
if (reverseUpdateIndex == 1) {
// Final Update
numSamplesPerUpdate = numSamplesPerFrame;
} else if ((numSamplesPerFrame / reverseUpdateIndex) >=
- gAudioContext.audioBufferParameters.numSamplesPerUpdateMax) {
- numSamplesPerUpdate = gAudioContext.audioBufferParameters.numSamplesPerUpdateMax;
+ gAudioCtx.audioBufferParameters.numSamplesPerUpdateMax) {
+ numSamplesPerUpdate = gAudioCtx.audioBufferParameters.numSamplesPerUpdateMax;
} else if ((numSamplesPerFrame / reverseUpdateIndex) <=
- gAudioContext.audioBufferParameters.numSamplesPerUpdateMin) {
- numSamplesPerUpdate = gAudioContext.audioBufferParameters.numSamplesPerUpdateMin;
+ gAudioCtx.audioBufferParameters.numSamplesPerUpdateMin) {
+ numSamplesPerUpdate = gAudioCtx.audioBufferParameters.numSamplesPerUpdateMin;
} else {
- numSamplesPerUpdate = gAudioContext.audioBufferParameters.numSamplesPerUpdate;
+ numSamplesPerUpdate = gAudioCtx.audioBufferParameters.numSamplesPerUpdate;
}
- for (reverbIndex = 0; reverbIndex < gAudioContext.numSynthesisReverbs; reverbIndex++) {
- if (gAudioContext.synthesisReverbs[reverbIndex].useReverb) {
- AudioSynth_AddReverbBufferEntry(
- numSamplesPerUpdate, gAudioContext.audioBufferParameters.updatesPerFrame - reverseUpdateIndex,
- reverbIndex);
+ for (reverbIndex = 0; reverbIndex < gAudioCtx.numSynthesisReverbs; reverbIndex++) {
+ if (gAudioCtx.synthesisReverbs[reverbIndex].useReverb) {
+ AudioSynth_AddReverbBufferEntry(numSamplesPerUpdate,
+ gAudioCtx.audioBufferParameters.updatesPerFrame - reverseUpdateIndex,
+ reverbIndex);
}
}
curCmd = AudioSynth_ProcessSamples(curAiBufPos, numSamplesPerUpdate, curCmd,
- gAudioContext.audioBufferParameters.updatesPerFrame - reverseUpdateIndex);
+ gAudioCtx.audioBufferParameters.updatesPerFrame - reverseUpdateIndex);
numSamplesPerFrame -= numSamplesPerUpdate;
curAiBufPos += numSamplesPerUpdate * SAMPLE_SIZE;
}
// Update reverb frame info
- for (reverbIndex = 0; reverbIndex < gAudioContext.numSynthesisReverbs; reverbIndex++) {
- if (gAudioContext.synthesisReverbs[reverbIndex].framesToIgnore != 0) {
- gAudioContext.synthesisReverbs[reverbIndex].framesToIgnore--;
+ for (reverbIndex = 0; reverbIndex < gAudioCtx.numSynthesisReverbs; reverbIndex++) {
+ if (gAudioCtx.synthesisReverbs[reverbIndex].framesToIgnore != 0) {
+ gAudioCtx.synthesisReverbs[reverbIndex].framesToIgnore--;
}
- gAudioContext.synthesisReverbs[reverbIndex].curFrame ^= 1;
+ gAudioCtx.synthesisReverbs[reverbIndex].curFrame ^= 1;
}
*numAbiCmds = curCmd - abiCmdStart;
@@ -276,8 +276,8 @@ void AudioSynth_DisableSampleStates(s32 updateIndex, s32 noteIndex) {
NoteSampleState* sampleState;
s32 i;
- for (i = updateIndex + 1; i < gAudioContext.audioBufferParameters.updatesPerFrame; i++) {
- sampleState = &gAudioContext.sampleStateList[(gAudioContext.numNotes * i) + noteIndex];
+ for (i = updateIndex + 1; i < gAudioCtx.audioBufferParameters.updatesPerFrame; i++) {
+ sampleState = &gAudioCtx.sampleStateList[(gAudioCtx.numNotes * i) + noteIndex];
if (sampleState->bitField0.needsInit) {
break;
}
@@ -572,11 +572,11 @@ Acmd* AudioSynth_FilterReverb(Acmd* cmd, s32 size, SynthesisReverb* reverb) {
Acmd* AudioSynth_MixOtherReverbIndex(Acmd* cmd, SynthesisReverb* reverb, s32 updateIndex) {
SynthesisReverb* mixReverb;
- if (reverb->mixReverbIndex >= gAudioContext.numSynthesisReverbs) {
+ if (reverb->mixReverbIndex >= gAudioCtx.numSynthesisReverbs) {
return cmd;
}
- mixReverb = &gAudioContext.synthesisReverbs[reverb->mixReverbIndex];
+ mixReverb = &gAudioCtx.synthesisReverbs[reverb->mixReverbIndex];
if (mixReverb->downsampleRate == 1) {
cmd = AudioSynth_LoadMixedReverbSamples(cmd, mixReverb, updateIndex);
aMix(cmd++, DMEM_2CH_SIZE >> 4, reverb->mixReverbStrength, DMEM_WET_LEFT_CH, DMEM_WET_TEMP);
@@ -758,31 +758,31 @@ Acmd* AudioSynth_ProcessSamples(s16* aiBuf, s32 numSamplesPerUpdate, Acmd* cmd,
s16 reverbIndex;
SynthesisReverb* reverb;
s32 useReverb;
- s32 sampleStateOffset = gAudioContext.numNotes * updateIndex;
+ s32 sampleStateOffset = gAudioCtx.numNotes * updateIndex;
s32 i;
- if (gAudioContext.numSynthesisReverbs == 0) {
- for (i = 0; i < gAudioContext.numNotes; i++) {
- if (gAudioContext.sampleStateList[sampleStateOffset + i].bitField0.enabled) {
+ if (gAudioCtx.numSynthesisReverbs == 0) {
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ if (gAudioCtx.sampleStateList[sampleStateOffset + i].bitField0.enabled) {
noteIndices[noteCount++] = i;
}
}
} else {
NoteSampleState* sampleState;
- for (reverbIndex = 0; reverbIndex < gAudioContext.numSynthesisReverbs; reverbIndex++) {
- for (i = 0; i < gAudioContext.numNotes; i++) {
- sampleState = &gAudioContext.sampleStateList[sampleStateOffset + i];
+ for (reverbIndex = 0; reverbIndex < gAudioCtx.numSynthesisReverbs; reverbIndex++) {
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ sampleState = &gAudioCtx.sampleStateList[sampleStateOffset + i];
if (sampleState->bitField0.enabled && (sampleState->bitField1.reverbIndex == reverbIndex)) {
noteIndices[noteCount++] = i;
}
}
}
- for (i = 0; i < gAudioContext.numNotes; i++) {
- sampleState = &gAudioContext.sampleStateList[sampleStateOffset + i];
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ sampleState = &gAudioCtx.sampleStateList[sampleStateOffset + i];
if (sampleState->bitField0.enabled &&
- (sampleState->bitField1.reverbIndex >= gAudioContext.numSynthesisReverbs)) {
+ (sampleState->bitField1.reverbIndex >= gAudioCtx.numSynthesisReverbs)) {
noteIndices[noteCount++] = i;
}
}
@@ -791,11 +791,11 @@ Acmd* AudioSynth_ProcessSamples(s16* aiBuf, s32 numSamplesPerUpdate, Acmd* cmd,
aClearBuffer(cmd++, DMEM_LEFT_CH, DMEM_2CH_SIZE);
i = 0;
- for (reverbIndex = 0; reverbIndex < gAudioContext.numSynthesisReverbs; reverbIndex++) {
+ for (reverbIndex = 0; reverbIndex < gAudioCtx.numSynthesisReverbs; reverbIndex++) {
s32 subDelay;
NoteSampleState* sampleState;
- reverb = &gAudioContext.synthesisReverbs[reverbIndex];
+ reverb = &gAudioCtx.synthesisReverbs[reverbIndex];
useReverb = reverb->useReverb;
if (useReverb) {
@@ -815,7 +815,7 @@ Acmd* AudioSynth_ProcessSamples(s16* aiBuf, s32 numSamplesPerUpdate, Acmd* cmd,
// Decays reverb over time. The (+ 0x8000) here is -100%
aMix(cmd++, DMEM_2CH_SIZE >> 4, reverb->decayRatio + 0x8000, DMEM_WET_LEFT_CH, DMEM_WET_LEFT_CH);
- if (((reverb->leakRtl != 0) || (reverb->leakLtr != 0)) && (gAudioContext.soundMode != SOUNDMODE_MONO)) {
+ if (((reverb->leakRtl != 0) || (reverb->leakLtr != 0)) && (gAudioCtx.soundMode != SOUNDMODE_MONO)) {
cmd = AudioSynth_LeakReverb(cmd, reverb);
}
@@ -830,13 +830,12 @@ Acmd* AudioSynth_ProcessSamples(s16* aiBuf, s32 numSamplesPerUpdate, Acmd* cmd,
}
while (i < noteCount) {
- sampleState = &gAudioContext.sampleStateList[sampleStateOffset + noteIndices[i]];
+ sampleState = &gAudioCtx.sampleStateList[sampleStateOffset + noteIndices[i]];
if (sampleState->bitField1.reverbIndex != reverbIndex) {
break;
}
- cmd = AudioSynth_ProcessSample(noteIndices[i], sampleState,
- &gAudioContext.notes[noteIndices[i]].synthesisState, aiBuf,
- numSamplesPerUpdate, cmd, updateIndex);
+ cmd = AudioSynth_ProcessSample(noteIndices[i], sampleState, &gAudioCtx.notes[noteIndices[i]].synthesisState,
+ aiBuf, numSamplesPerUpdate, cmd, updateIndex);
i++;
}
@@ -858,17 +857,17 @@ Acmd* AudioSynth_ProcessSamples(s16* aiBuf, s32 numSamplesPerUpdate, Acmd* cmd,
}
while (i < noteCount) {
- cmd = AudioSynth_ProcessSample(
- noteIndices[i], &gAudioContext.sampleStateList[sampleStateOffset + noteIndices[i]],
- &gAudioContext.notes[noteIndices[i]].synthesisState, aiBuf, numSamplesPerUpdate, cmd, updateIndex);
+ cmd = AudioSynth_ProcessSample(noteIndices[i], &gAudioCtx.sampleStateList[sampleStateOffset + noteIndices[i]],
+ &gAudioCtx.notes[noteIndices[i]].synthesisState, aiBuf, numSamplesPerUpdate, cmd,
+ updateIndex);
i++;
}
size = numSamplesPerUpdate * SAMPLE_SIZE;
aInterleave(cmd++, DMEM_TEMP, DMEM_LEFT_CH, DMEM_RIGHT_CH, size);
- if (gCustomAudioSynthFunction != NULL) {
- cmd = gCustomAudioSynthFunction(cmd, 2 * size, updateIndex);
+ if (gAudioCustomSynthFunction != NULL) {
+ cmd = gAudioCustomSynthFunction(cmd, 2 * size, updateIndex);
}
aSaveBuffer(cmd++, DMEM_TEMP, aiBuf, 2 * size);
@@ -928,7 +927,7 @@ Acmd* AudioSynth_ProcessSample(s32 noteIndex, NoteSampleState* sampleState, Note
s32 sampleDataChunkSize;
s16 sampleDataDmemAddr;
- note = &gAudioContext.notes[noteIndex];
+ note = &gAudioCtx.notes[noteIndex];
flags = A_CONTINUE;
// Initialize the synthesis state
@@ -1013,23 +1012,23 @@ Acmd* AudioSynth_ProcessSample(s32 noteIndex, NoteSampleState* sampleState, Note
// Load the ADPCM codeBook
if ((sample->codec == CODEC_ADPCM) || (sample->codec == CODEC_SMALL_ADPCM)) {
- if (gAudioContext.adpcmCodeBook != sample->book->codeBook) {
+ if (gAudioCtx.adpcmCodeBook != sample->book->codeBook) {
u32 numEntries;
switch (bookOffset) {
case 1:
- gAudioContext.adpcmCodeBook = &gInvalidAdpcmCodeBook[1];
+ gAudioCtx.adpcmCodeBook = &gInvalidAdpcmCodeBook[1];
break;
case 2:
case 3:
default:
- gAudioContext.adpcmCodeBook = sample->book->codeBook;
+ gAudioCtx.adpcmCodeBook = sample->book->codeBook;
break;
}
numEntries = SAMPLES_PER_FRAME * sample->book->order * sample->book->numPredictors;
- aLoadADPCM(cmd++, numEntries, gAudioContext.adpcmCodeBook);
+ aLoadADPCM(cmd++, numEntries, gAudioCtx.adpcmCodeBook);
}
}
@@ -1110,8 +1109,8 @@ Acmd* AudioSynth_ProcessSample(s32 noteIndex, NoteSampleState* sampleState, Note
case CODEC_REVERB:
reverbAddrSrc = (void*)0xFFFFFFFF;
- if (gCustomAudioReverbFunction != NULL) {
- reverbAddrSrc = gCustomAudioReverbFunction(sample, numSamplesToLoadAdj, flags, noteIndex);
+ if (gAudioCustomReverbFunction != NULL) {
+ reverbAddrSrc = gAudioCustomReverbFunction(sample, numSamplesToLoadAdj, flags, noteIndex);
}
if (reverbAddrSrc == (void*)0xFFFFFFFF) {
@@ -1163,7 +1162,7 @@ Acmd* AudioSynth_ProcessSample(s32 noteIndex, NoteSampleState* sampleState, Note
if (sample->medium == MEDIUM_RAM) {
// Sample is already loaded into ram
samplesToLoadAddr = sampleAddr + (zeroOffset + sampleAddrOffset);
- } else if (gAudioContext.unk_29B8) { // always false
+ } else if (gAudioCtx.unk_29B8) { // always false
return cmd;
} else if (sample->medium == MEDIUM_UNK) {
// This medium is unsupported so terminate processing this note
@@ -1405,7 +1404,7 @@ Acmd* AudioSynth_ProcessSample(s32 noteIndex, NoteSampleState* sampleState, Note
}
// Apply an unknown effect based on the surround sound-mode
- if (gAudioContext.soundMode == SOUNDMODE_SURROUND) {
+ if (gAudioCtx.soundMode == SOUNDMODE_SURROUND) {
sampleState->targetVolLeft = sampleState->targetVolLeft >> 1;
sampleState->targetVolRight = sampleState->targetVolRight >> 1;
if (sampleState->surroundEffectIndex != 0xFF) {
@@ -1512,7 +1511,7 @@ Acmd* AudioSynth_ProcessEnvelope(Acmd* cmd, NoteSampleState* sampleState, NoteSy
targetVolRight = sampleState->targetVolRight;
targetVolRight <<= 4;
- if ((gAudioContext.soundMode == SOUNDMODE_SURROUND) && (sampleState->surroundEffectIndex != 0xFF)) {
+ if ((gAudioCtx.soundMode == SOUNDMODE_SURROUND) && (sampleState->surroundEffectIndex != 0xFF)) {
defaultPanVolume = gDefaultPanVolume[sampleState->surroundEffectIndex];
targetVolLeft *= defaultPanVolume;
targetVolRight *= defaultPanVolume;
diff --git a/src/audio/lib/thread.c b/src/audio/lib/thread.c
new file mode 100644
index 000000000..082e77a67
--- /dev/null
+++ b/src/audio/lib/thread.c
@@ -0,0 +1,977 @@
+/**
+ * @file audio_thread.c
+ *
+ * Top-level file that coordinates all audio code on the audio thread.
+ */
+#include "global.h"
+
+AudioTask* AudioThread_UpdateImpl(void);
+void AudioThread_SetFadeOutTimer(s32 seqPlayerIndex, s32 fadeTimer);
+void AudioThread_SetFadeInTimer(s32 seqPlayerIndex, s32 fadeTimer);
+void AudioThread_ProcessCmds(u32 msg);
+void AudioThread_ProcessSeqPlayerCmd(SequencePlayer* seqPlayer, AudioCmd* cmd);
+void AudioThread_ProcessChannelCmd(SequenceChannel* channel, AudioCmd* cmd);
+s32 AudioThread_GetSamplePos(s32 seqPlayerIndex, s32 channelIndex, s32 layerIndex, s32* loopEnd, s32* samplePosInt);
+s32 AudioThread_CountAndReleaseNotes(s32 flags);
+
+AudioTask* AudioThread_Update(void) {
+ return AudioThread_UpdateImpl();
+}
+
+AudioTask* AudioThread_UpdateImpl(void) {
+ static AudioTask* sWaitingAudioTask = NULL;
+ u32 numSamplesRemainingInAi;
+ s32 numAbiCmds;
+ s32 pad;
+ s32 j;
+ s32 dmaCount;
+ s16* curAiBuffer;
+ OSTask_t* task;
+ s32 index;
+ u32 msg;
+ s32 validCount;
+ s32 i;
+
+ gAudioCtx.totalTaskCount++;
+ if ((gAudioCtx.totalTaskCount % gAudioCtx.audioBufferParameters.specUnk4) != 0) {
+ if (gAudioCustomUpdateFunction != NULL) {
+ gAudioCustomUpdateFunction();
+ }
+
+ if (((gAudioCtx.totalTaskCount % gAudioCtx.audioBufferParameters.specUnk4) + 1) ==
+ gAudioCtx.audioBufferParameters.specUnk4) {
+ return sWaitingAudioTask;
+ }
+
+ return NULL;
+ }
+
+ osSendMesg(gAudioCtx.taskStartQueueP, gAudioCtx.totalTaskCount, OS_MESG_NOBLOCK);
+ gAudioCtx.rspTaskIndex ^= 1;
+ gAudioCtx.curAiBufferIndex++;
+ gAudioCtx.curAiBufferIndex %= 3;
+ index = (gAudioCtx.curAiBufferIndex + 1) % 3;
+
+ // Division converts size to numSamples: 2 channels (left/right) * 2 bytes per sample
+ numSamplesRemainingInAi = osAiGetLength() / (2 * SAMPLE_SIZE);
+
+ if (gAudioCtx.resetTimer < 16) {
+ if (gAudioCtx.numSamplesPerFrame[index] != 0) {
+ osAiSetNextBuffer(gAudioCtx.aiBuffers[index], 2 * gAudioCtx.numSamplesPerFrame[index] * (s32)SAMPLE_SIZE);
+ if (gAudioCtx.aiBuffers[index]) {}
+ if (gAudioCtx.numSamplesPerFrame[index]) {}
+ }
+ }
+
+ if (gAudioCustomUpdateFunction != NULL) {
+ gAudioCustomUpdateFunction();
+ }
+
+ dmaCount = gAudioCtx.curAudioFrameDmaCount;
+ for (i = 0; i < gAudioCtx.curAudioFrameDmaCount; i++) {
+ if (osRecvMesg(&gAudioCtx.curAudioFrameDmaQueue, NULL, OS_MESG_NOBLOCK) == 0) {
+ dmaCount--;
+ }
+ }
+
+ if (dmaCount != 0) {
+ for (i = 0; i < dmaCount; i++) {
+ osRecvMesg(&gAudioCtx.curAudioFrameDmaQueue, NULL, OS_MESG_BLOCK);
+ }
+ }
+
+ validCount = gAudioCtx.curAudioFrameDmaQueue.validCount;
+ if (validCount != 0) {
+ for (i = 0; i < validCount; i++) {
+ osRecvMesg(&gAudioCtx.curAudioFrameDmaQueue, NULL, OS_MESG_NOBLOCK);
+ }
+ }
+
+ gAudioCtx.curAudioFrameDmaCount = 0;
+ AudioLoad_DecreaseSampleDmaTtls();
+ AudioLoad_ProcessLoads(gAudioCtx.resetStatus);
+ AudioLoad_ProcessScriptLoads();
+
+ if (gAudioCtx.resetStatus != 0) {
+ if (AudioHeap_ResetStep() == 0) {
+ if (gAudioCtx.resetStatus == 0) {
+ osSendMesg(gAudioCtx.audioResetQueueP, gAudioCtx.specId, OS_MESG_NOBLOCK);
+ }
+
+ sWaitingAudioTask = NULL;
+ return NULL;
+ }
+ }
+
+ if (gAudioCtx.resetTimer > 16) {
+ return NULL;
+ }
+ if (gAudioCtx.resetTimer != 0) {
+ gAudioCtx.resetTimer++;
+ }
+
+ gAudioCtx.curTask = &gAudioCtx.rspTask[gAudioCtx.rspTaskIndex];
+ gAudioCtx.curAbiCmdBuf = gAudioCtx.abiCmdBufs[gAudioCtx.rspTaskIndex];
+
+ index = gAudioCtx.curAiBufferIndex;
+ curAiBuffer = gAudioCtx.aiBuffers[index];
+
+ gAudioCtx.numSamplesPerFrame[index] =
+ (s16)((((gAudioCtx.audioBufferParameters.numSamplesPerFrameTarget - numSamplesRemainingInAi) +
+ (8 * SAMPLES_PER_FRAME)) &
+ ~0xF) +
+ (1 * SAMPLES_PER_FRAME));
+
+ // Clamp numSamplesPerFrame between numSamplesPerFrameMin and numSamplesPerFrameMax
+ if (gAudioCtx.numSamplesPerFrame[index] < gAudioCtx.audioBufferParameters.numSamplesPerFrameMin) {
+ gAudioCtx.numSamplesPerFrame[index] = gAudioCtx.audioBufferParameters.numSamplesPerFrameMin;
+ }
+ if (gAudioCtx.numSamplesPerFrame[index] > gAudioCtx.audioBufferParameters.numSamplesPerFrameMax) {
+ gAudioCtx.numSamplesPerFrame[index] = gAudioCtx.audioBufferParameters.numSamplesPerFrameMax;
+ }
+
+ j = 0;
+ if (gAudioCtx.resetStatus == 0) {
+ // msg = 0000RREE R = read pos, E = End Pos
+ while (osRecvMesg(gAudioCtx.threadCmdProcQueueP, (OSMesg*)&msg, OS_MESG_NOBLOCK) != -1) {
+ //! FAKE:
+ if (1) {}
+ AudioThread_ProcessCmds(msg);
+ j++;
+ }
+ if ((j == 0) && gAudioCtx.threadCmdQueueFinished) {
+ AudioThread_ScheduleProcessCmds();
+ }
+ }
+
+ if (gAudioSPDataPtr == (u64*)gAudioCtx.curAbiCmdBuf) {
+ return -1;
+ }
+
+ gAudioCtx.curAbiCmdBuf =
+ AudioSynth_Update(gAudioCtx.curAbiCmdBuf, &numAbiCmds, curAiBuffer, gAudioCtx.numSamplesPerFrame[index]);
+
+ // Update audioRandom to the next random number
+ gAudioCtx.audioRandom = (gAudioCtx.audioRandom + gAudioCtx.totalTaskCount) * osGetCount();
+ gAudioCtx.audioRandom = gAudioCtx.audioRandom + gAudioCtx.aiBuffers[index][gAudioCtx.totalTaskCount & 0xFF];
+
+ // gWaveSamples[8] interprets compiled assembly code as s16 samples as a way to generate sound with noise.
+ // Start with the address of AudioThread_Update(), and offset it by a random number between 0 - 0xFFF0
+ // Use the resulting address as the starting address to interpret an array of samples i.e. `s16 samples[]`
+ gWaveSamples[8] = (s16*)((u8*)AudioThread_Update + (gAudioCtx.audioRandom & 0xFFF0));
+
+ index = gAudioCtx.rspTaskIndex;
+ gAudioCtx.curTask->taskQueue = NULL;
+ gAudioCtx.curTask->unk_44 = NULL;
+
+ task = &gAudioCtx.curTask->task.t;
+ task->type = M_AUDTASK;
+ task->flags = 0;
+ task->ucodeBoot = aspMainTextStart;
+ task->ucodeBootSize = SP_UCODE_SIZE;
+ task->ucodeDataSize = ((aspMainDataEnd - aspMainDataStart) * sizeof(u64)) - 1;
+ task->ucode = aspMainTextStart;
+ task->ucodeData = aspMainDataStart;
+ task->ucodeSize = SP_UCODE_SIZE;
+ task->dramStack = (u64*)D_801D6200;
+ task->dramStackSize = 0;
+ task->outputBuff = NULL;
+ task->outputBuffSize = NULL;
+ if (1) {}
+ task->dataPtr = (u64*)gAudioCtx.abiCmdBufs[index];
+ task->dataSize = numAbiCmds * sizeof(Acmd);
+ task->yieldDataPtr = NULL;
+ task->yieldDataSize = 0;
+
+ if (gAudioCtx.numAbiCmdsMax < numAbiCmds) {
+ gAudioCtx.numAbiCmdsMax = numAbiCmds;
+ }
+
+ if (gAudioCtx.audioBufferParameters.specUnk4 == 1) {
+ return gAudioCtx.curTask;
+ } else {
+ sWaitingAudioTask = gAudioCtx.curTask;
+ return NULL;
+ }
+}
+
+void AudioThread_ProcessGlobalCmd(AudioCmd* cmd) {
+ s32 i;
+ s32 pad;
+
+ switch (cmd->op) {
+ case AUDIOCMD_OP_GLOBAL_SYNC_LOAD_SEQ_PARTS:
+ AudioLoad_SyncLoadSeqParts(cmd->arg1, cmd->arg2, cmd->asInt, &gAudioCtx.externalLoadQueue);
+ break;
+
+ case AUDIOCMD_OP_GLOBAL_INIT_SEQPLAYER:
+ AudioLoad_SyncInitSeqPlayer(cmd->arg0, cmd->arg1, cmd->arg2);
+ AudioThread_SetFadeInTimer(cmd->arg0, cmd->asInt);
+ break;
+
+ case AUDIOCMD_OP_GLOBAL_INIT_SEQPLAYER_SKIP_TICKS:
+ AudioLoad_SyncInitSeqPlayerSkipTicks(cmd->arg0, cmd->arg1, cmd->asInt);
+ AudioThread_SetFadeInTimer(cmd->arg0, 500);
+ AudioScript_SkipForwardSequence(&gAudioCtx.seqPlayers[cmd->arg0]);
+ break;
+
+ case AUDIOCMD_OP_GLOBAL_DISABLE_SEQPLAYER:
+ if (gAudioCtx.seqPlayers[cmd->arg0].enabled) {
+ if (cmd->asInt == 0) {
+ AudioScript_SequencePlayerDisableAsFinished(&gAudioCtx.seqPlayers[cmd->arg0]);
+ } else {
+ AudioThread_SetFadeOutTimer(cmd->arg0, cmd->asInt);
+ }
+ }
+ break;
+
+ case AUDIOCMD_OP_GLOBAL_SET_SOUND_MODE:
+ gAudioCtx.soundMode = cmd->asInt;
+ break;
+
+ case AUDIOCMD_OP_GLOBAL_MUTE:
+ if (cmd->arg0 == AUDIOCMD_ALL_SEQPLAYERS) {
+ for (i = 0; i < gAudioCtx.audioBufferParameters.numSequencePlayers; i++) {
+ gAudioCtx.seqPlayers[i].muted = true;
+ gAudioCtx.seqPlayers[i].recalculateVolume = true;
+ }
+ } else {
+ gAudioCtx.seqPlayers[cmd->arg0].muted = true;
+ gAudioCtx.seqPlayers[cmd->arg0].recalculateVolume = true;
+ }
+ break;
+
+ case AUDIOCMD_OP_GLOBAL_UNMUTE:
+ if (cmd->asInt == true) {
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ Note* note = &gAudioCtx.notes[i];
+ NoteSampleState* noteSampleState = ¬e->sampleState;
+
+ if (noteSampleState->bitField0.enabled && (note->playbackState.status == PLAYBACK_STATUS_0) &&
+ (note->playbackState.parentLayer->channel->muteFlags & MUTE_FLAGS_STOP_SAMPLES)) {
+ noteSampleState->bitField0.finished = true;
+ }
+ }
+ }
+
+ if (cmd->arg0 == AUDIOCMD_ALL_SEQPLAYERS) {
+ for (i = 0; i < gAudioCtx.audioBufferParameters.numSequencePlayers; i++) {
+ gAudioCtx.seqPlayers[i].muted = false;
+ gAudioCtx.seqPlayers[i].recalculateVolume = true;
+ }
+ } else {
+ gAudioCtx.seqPlayers[cmd->arg0].muted = false;
+ gAudioCtx.seqPlayers[cmd->arg0].recalculateVolume = true;
+ }
+
+ break;
+
+ case AUDIOCMD_OP_GLOBAL_SYNC_LOAD_INSTRUMENT:
+ AudioLoad_SyncLoadInstrument(cmd->arg0, cmd->arg1, cmd->arg2);
+ break;
+
+ case AUDIOCMD_OP_GLOBAL_ASYNC_LOAD_SAMPLE_BANK:
+ AudioLoad_AsyncLoadSampleBank(cmd->arg0, cmd->arg1, cmd->arg2, &gAudioCtx.externalLoadQueue);
+ break;
+
+ case AUDIOCMD_OP_GLOBAL_ASYNC_LOAD_FONT:
+ AudioLoad_AsyncLoadFont(cmd->arg0, cmd->arg1, cmd->arg2, &gAudioCtx.externalLoadQueue);
+ break;
+
+ case AUDIOCMD_OP_GLOBAL_ASYNC_LOAD_SEQ:
+ AudioLoad_AsyncLoadSeq(cmd->arg0, cmd->arg1, cmd->arg2, &gAudioCtx.externalLoadQueue);
+ break;
+
+ case AUDIOCMD_OP_GLOBAL_DISCARD_SEQ_FONTS:
+ AudioLoad_DiscardSeqFonts(cmd->arg1);
+ break;
+
+ case AUDIOCMD_OP_GLOBAL_SET_CHANNEL_MASK:
+ gAudioCtx.threadCmdChannelMask[cmd->arg0] = cmd->asUShort;
+ break;
+
+ case AUDIOCMD_OP_GLOBAL_RESET_AUDIO_HEAP:
+ gAudioCtx.resetStatus = 5;
+ gAudioCtx.specId = cmd->asUInt;
+ break;
+
+ case AUDIOCMD_OP_GLOBAL_SET_CUSTOM_UPDATE_FUNCTION:
+ gAudioCustomUpdateFunction = cmd->asUInt;
+ break;
+
+ case AUDIOCMD_OP_GLOBAL_SET_CUSTOM_FUNCTION:
+ if (cmd->arg2 == AUDIO_CUSTOM_FUNCTION_REVERB) {
+ gAudioCustomReverbFunction = cmd->asUInt;
+ } else if (cmd->arg2 == AUDIO_CUSTOM_FUNCTION_SYNTH) {
+ gAudioCustomSynthFunction = cmd->asUInt;
+ } else {
+ gAudioCtx.customSeqFunctions[cmd->arg2] = cmd->asUInt;
+ }
+ break;
+
+ case AUDIOCMD_OP_GLOBAL_SET_DRUM_FONT:
+ case AUDIOCMD_OP_GLOBAL_SET_SFX_FONT:
+ case AUDIOCMD_OP_GLOBAL_SET_INSTRUMENT_FONT:
+ if (AudioPlayback_SetFontInstrument(cmd->op - AUDIOCMD_OP_GLOBAL_SET_DRUM_FONT, cmd->arg1, cmd->arg2,
+ cmd->asInt)) {}
+ break;
+
+ case AUDIOCMD_OP_GLOBAL_DISABLE_ALL_SEQPLAYERS: {
+ u32 flags = cmd->asUInt;
+
+ if (flags == AUDIO_NOTE_RELEASE) {
+ for (i = 0; i < gAudioCtx.audioBufferParameters.numSequencePlayers; i++) {
+ if (gAudioCtx.seqPlayers[i].enabled) {
+ AudioScript_SequencePlayerDisableAsFinished(&gAudioCtx.seqPlayers[i]);
+ }
+ }
+ }
+ AudioThread_CountAndReleaseNotes(flags);
+ break;
+ }
+
+ case AUDIOCMD_OP_GLOBAL_POP_PERSISTENT_CACHE:
+ AudioHeap_PopPersistentCache(cmd->asInt);
+ break;
+
+ case AUDIOCMD_OP_GLOBAL_E5:
+ func_8018FA60(cmd->arg0, cmd->arg1, cmd->arg2, cmd->asInt);
+ break;
+
+ case AUDIOCMD_OP_GLOBAL_SET_REVERB_DATA:
+ AudioHeap_SetReverbData(cmd->arg1, cmd->arg0, cmd->asInt, false);
+ break;
+
+ default:
+ break;
+ }
+}
+
+void AudioThread_SetFadeOutTimer(s32 seqPlayerIndex, s32 fadeTimer) {
+ SequencePlayer* seqPlayer = &gAudioCtx.seqPlayers[seqPlayerIndex];
+
+ if (fadeTimer == 0) {
+ fadeTimer = 1;
+ }
+
+ seqPlayer->fadeVelocity = -(seqPlayer->fadeVolume / fadeTimer);
+ seqPlayer->state = SEQPLAYER_STATE_FADE_OUT;
+ seqPlayer->fadeTimer = fadeTimer;
+}
+
+void AudioThread_SetFadeInTimer(s32 seqPlayerIndex, s32 fadeTimer) {
+ SequencePlayer* seqPlayer;
+
+ if (fadeTimer != 0) {
+ seqPlayer = &gAudioCtx.seqPlayers[seqPlayerIndex];
+ seqPlayer->state = SEQPLAYER_STATE_FADE_IN;
+ seqPlayer->storedFadeTimer = fadeTimer;
+ seqPlayer->fadeTimer = fadeTimer;
+ seqPlayer->fadeVolume = 0.0f;
+ seqPlayer->fadeVelocity = 0.0f;
+ }
+}
+
+void AudioThread_InitMesgQueuesInternal(void) {
+ gAudioCtx.threadCmdWritePos = 0;
+ gAudioCtx.threadCmdReadPos = 0;
+ gAudioCtx.threadCmdQueueFinished = false;
+
+ gAudioCtx.taskStartQueueP = &gAudioCtx.taskStartQueue;
+ gAudioCtx.threadCmdProcQueueP = &gAudioCtx.threadCmdProcQueue;
+ gAudioCtx.audioResetQueueP = &gAudioCtx.audioResetQueue;
+
+ osCreateMesgQueue(gAudioCtx.taskStartQueueP, gAudioCtx.taskStartMsgs, ARRAY_COUNT(gAudioCtx.taskStartMsgs));
+ osCreateMesgQueue(gAudioCtx.threadCmdProcQueueP, gAudioCtx.threadCmdProcMsgBuf,
+ ARRAY_COUNT(gAudioCtx.threadCmdProcMsgBuf));
+ osCreateMesgQueue(gAudioCtx.audioResetQueueP, gAudioCtx.audioResetMesgs, ARRAY_COUNT(gAudioCtx.audioResetMesgs));
+}
+
+void AudioThread_QueueCmd(u32 opArgs, void** data) {
+ AudioCmd* cmd = &gAudioCtx.threadCmdBuf[gAudioCtx.threadCmdWritePos & 0xFF];
+
+ cmd->opArgs = opArgs;
+ cmd->data = *data;
+
+ gAudioCtx.threadCmdWritePos++;
+
+ if (gAudioCtx.threadCmdWritePos == gAudioCtx.threadCmdReadPos) {
+ gAudioCtx.threadCmdWritePos--;
+ }
+}
+
+void AudioThread_QueueCmdF32(u32 opArgs, f32 data) {
+ AudioThread_QueueCmd(opArgs, (void**)&data);
+}
+
+void AudioThread_QueueCmdS32(u32 opArgs, s32 data) {
+ AudioThread_QueueCmd(opArgs, (void**)&data);
+}
+
+void AudioThread_QueueCmdS8(u32 opArgs, s8 data) {
+ u32 uData = data << 0x18;
+
+ AudioThread_QueueCmd(opArgs, (void**)&uData);
+}
+
+void AudioThread_QueueCmdU16(u32 opArgs, u16 data) {
+ u32 uData = data << 0x10;
+
+ AudioThread_QueueCmd(opArgs, (void**)&uData);
+}
+
+s32 AudioThread_ScheduleProcessCmds(void) {
+ static s32 sMaxWriteReadDiff = 0;
+ s32 ret;
+
+ if (sMaxWriteReadDiff < (u8)((gAudioCtx.threadCmdWritePos - gAudioCtx.threadCmdReadPos) + 0x100)) {
+ sMaxWriteReadDiff = (u8)((gAudioCtx.threadCmdWritePos - gAudioCtx.threadCmdReadPos) + 0x100);
+ }
+
+ ret = osSendMesg(gAudioCtx.threadCmdProcQueueP,
+ (void*)(((gAudioCtx.threadCmdReadPos & 0xFF) << 8) | (gAudioCtx.threadCmdWritePos & 0xFF)),
+ OS_MESG_NOBLOCK);
+ if (ret != -1) {
+ gAudioCtx.threadCmdReadPos = gAudioCtx.threadCmdWritePos;
+ ret = 0;
+ } else {
+ return -1;
+ }
+
+ return ret;
+}
+
+void AudioThread_ResetCmdQueue(void) {
+ gAudioCtx.threadCmdQueueFinished = false;
+ gAudioCtx.threadCmdReadPos = gAudioCtx.threadCmdWritePos;
+}
+
+void AudioThread_ProcessCmd(AudioCmd* cmd) {
+ SequencePlayer* seqPlayer;
+ u16 threadCmdChannelMask;
+ s32 channelIndex;
+
+ if ((cmd->op & 0xF0) >= 0xE0) {
+ AudioThread_ProcessGlobalCmd(cmd);
+ return;
+ }
+
+ if (cmd->arg0 < gAudioCtx.audioBufferParameters.numSequencePlayers) {
+ seqPlayer = &gAudioCtx.seqPlayers[cmd->arg0];
+ if (cmd->op & 0x80) {
+ AudioThread_ProcessGlobalCmd(cmd);
+ return;
+ }
+
+ if (cmd->op & 0x40) {
+ AudioThread_ProcessSeqPlayerCmd(seqPlayer, cmd);
+ return;
+ }
+
+ if (cmd->arg1 < SEQ_NUM_CHANNELS) {
+ AudioThread_ProcessChannelCmd(seqPlayer->channels[cmd->arg1], cmd);
+ return;
+ }
+
+ if (cmd->arg1 == AUDIOCMD_ALL_CHANNELS) {
+ threadCmdChannelMask = gAudioCtx.threadCmdChannelMask[cmd->arg0];
+ for (channelIndex = 0; channelIndex < SEQ_NUM_CHANNELS; channelIndex++) {
+ if (threadCmdChannelMask & 1) {
+ AudioThread_ProcessChannelCmd(seqPlayer->channels[channelIndex], cmd);
+ }
+ threadCmdChannelMask = threadCmdChannelMask >> 1;
+ }
+ }
+ }
+}
+
+void AudioThread_ProcessCmds(u32 msg) {
+ static u8 sCurCmdRdPos = 0;
+ AudioCmd* cmd;
+ u8 endPos;
+
+ if (!gAudioCtx.threadCmdQueueFinished) {
+ sCurCmdRdPos = msg >> 8;
+ }
+
+ while (true) {
+ endPos = msg & 0xFF;
+ if (sCurCmdRdPos == endPos) {
+ gAudioCtx.threadCmdQueueFinished = false;
+ break;
+ }
+
+ cmd = &gAudioCtx.threadCmdBuf[sCurCmdRdPos++ & 0xFF];
+ if (cmd->op == AUDIOCMD_OP_GLOBAL_STOP_AUDIOCMDS) {
+ gAudioCtx.threadCmdQueueFinished = true;
+ break;
+ }
+
+ AudioThread_ProcessCmd(cmd);
+ cmd->op = AUDIOCMD_OP_NOOP;
+ }
+}
+
+u32 AudioThread_GetExternalLoadQueueMsg(u32* retMsg) {
+ u32 msg;
+
+ if (osRecvMesg(&gAudioCtx.externalLoadQueue, (OSMesg*)&msg, OS_MESG_NOBLOCK) == -1) {
+ *retMsg = 0;
+ return 0;
+ }
+
+ *retMsg = msg & 0xFFFFFF;
+ return msg >> 0x18;
+}
+
+u8* AudioThread_GetFontsForSequence(s32 seqId, u32* outNumFonts) {
+ return AudioLoad_GetFontsForSequence(seqId, outNumFonts);
+}
+
+void AudioThread_GetSampleBankIdsOfFont(s32 fontId, u32* sampleBankId1, u32* sampleBankId2) {
+ *sampleBankId1 = gAudioCtx.soundFontList[fontId].sampleBankId1;
+ *sampleBankId2 = gAudioCtx.soundFontList[fontId].sampleBankId2;
+}
+
+s32 func_80193C5C(void) {
+ s32 pad;
+ s32 specId;
+
+ if (osRecvMesg(gAudioCtx.audioResetQueueP, (OSMesg*)&specId, OS_MESG_NOBLOCK) == -1) {
+ return 0;
+ } else if (gAudioCtx.specId != specId) {
+ return -1;
+ } else {
+ return 1;
+ }
+}
+
+void AudioThread_WaitForAudioResetQueueP(void) {
+ // macro?
+ // clang-format off
+ s32 chk = -1; s32 msg; do {} while (osRecvMesg(gAudioCtx.audioResetQueueP, (OSMesg*)&msg, OS_MESG_NOBLOCK) != chk);
+ // clang-format on
+}
+
+s32 AudioThread_ResetAudioHeap(s32 specId) {
+ s32 resetStatus;
+ OSMesg msg;
+ s32 pad;
+
+ AudioThread_WaitForAudioResetQueueP();
+ resetStatus = gAudioCtx.resetStatus;
+ if (resetStatus != 0) {
+ AudioThread_ResetCmdQueue();
+ if (gAudioCtx.specId == specId) {
+ return -2;
+ } else if (resetStatus > 2) {
+ gAudioCtx.specId = specId;
+ return -3;
+ } else {
+ osRecvMesg(gAudioCtx.audioResetQueueP, &msg, OS_MESG_BLOCK);
+ }
+ }
+
+ AudioThread_WaitForAudioResetQueueP();
+ AUDIOCMD_GLOBAL_RESET_AUDIO_HEAP(specId);
+
+ return AudioThread_ScheduleProcessCmds();
+}
+
+void AudioThread_PreNMIInternal(void) {
+ gAudioCtx.resetTimer = 1;
+ if (gAudioCtxInitalized) {
+ AudioThread_ResetAudioHeap(0);
+ gAudioCtx.resetStatus = 0;
+ }
+}
+
+// Unused
+s8 AudioThread_GetChannelIO(s32 seqPlayerIndex, s32 channelIndex, s32 ioPort) {
+ SequencePlayer* seqPlayer = &gAudioCtx.seqPlayers[seqPlayerIndex];
+ SequenceChannel* channel;
+
+ if (seqPlayer->enabled) {
+ channel = seqPlayer->channels[channelIndex];
+ return channel->seqScriptIO[ioPort];
+ } else {
+ return SEQ_IO_VAL_NONE;
+ }
+}
+
+// Unused
+s8 AudioThread_GetSeqPlayerIO(s32 seqPlayerIndex, s32 ioPort) {
+ return gAudioCtx.seqPlayers[seqPlayerIndex].seqScriptIO[ioPort];
+}
+
+// Unused
+void AudioThread_InitExternalPool(void* addr, size_t size) {
+ AudioHeap_InitPool(&gAudioCtx.externalPool, addr, size);
+}
+
+// Unused
+void AudioThread_ResetExternalPool(void) {
+ gAudioCtx.externalPool.startAddr = NULL;
+}
+
+void AudioThread_ProcessSeqPlayerCmd(SequencePlayer* seqPlayer, AudioCmd* cmd) {
+ f32 fadeVolume;
+
+ switch (cmd->op) {
+ case AUDIOCMD_OP_SEQPLAYER_FADE_VOLUME_SCALE:
+ if (seqPlayer->fadeVolumeScale != cmd->asFloat) {
+ seqPlayer->fadeVolumeScale = cmd->asFloat;
+ seqPlayer->recalculateVolume = true;
+ }
+ break;
+
+ case AUDIOCMD_OP_SEQPLAYER_SET_TEMPO:
+ seqPlayer->tempo = cmd->asInt * TATUMS_PER_BEAT;
+ break;
+
+ case AUDIOCMD_OP_SEQPLAYER_CHANGE_TEMPO:
+ seqPlayer->tempoChange = cmd->asInt * TATUMS_PER_BEAT;
+ break;
+
+ case AUDIOCMD_OP_SEQPLAYER_CHANGE_TEMPO_TICKS:
+ seqPlayer->tempoChange = cmd->asInt;
+ break;
+
+ case AUDIOCMD_OP_SEQPLAYER_SET_TRANSPOSITION:
+ seqPlayer->transposition = cmd->asSbyte;
+ break;
+
+ case AUDIOCMD_OP_SEQPLAYER_SET_IO:
+ seqPlayer->seqScriptIO[cmd->arg2] = cmd->asSbyte;
+ break;
+
+ case AUDIOCMD_OP_SEQPLAYER_FADE_TO_SET_VOLUME:
+ fadeVolume = (s32)cmd->arg1 / 127.0f;
+ goto apply_fade;
+
+ case AUDIOCMD_OP_SEQPLAYER_FADE_TO_SCALED_VOLUME:
+ fadeVolume = ((s32)cmd->arg1 / 100.0f) * seqPlayer->fadeVolume;
+ apply_fade:
+ if (seqPlayer->state != SEQPLAYER_STATE_FADE_OUT) {
+ seqPlayer->volume = seqPlayer->fadeVolume;
+ if (cmd->asInt == 0) {
+ seqPlayer->fadeVolume = fadeVolume;
+ } else {
+ s32 fadeTimer = cmd->asInt;
+
+ seqPlayer->state = SEQPLAYER_STATE_0;
+ seqPlayer->fadeTimer = fadeTimer;
+ seqPlayer->fadeVelocity = (fadeVolume - seqPlayer->fadeVolume) / fadeTimer;
+ }
+ }
+ break;
+
+ case AUDIOCMD_OP_SEQPLAYER_RESET_VOLUME:
+ if (seqPlayer->state != SEQPLAYER_STATE_FADE_OUT) {
+ if (cmd->asInt == 0) {
+ seqPlayer->fadeVolume = seqPlayer->volume;
+ } else {
+ s32 fadeTimer = cmd->asInt;
+
+ seqPlayer->state = SEQPLAYER_STATE_0;
+ seqPlayer->fadeTimer = fadeTimer;
+ seqPlayer->fadeVelocity = (seqPlayer->volume - seqPlayer->fadeVolume) / fadeTimer;
+ }
+ }
+ break;
+
+ case AUDIOCMD_OP_SEQPLAYER_SET_BEND:
+ seqPlayer->bend = cmd->asFloat;
+ if (seqPlayer->bend == 1.0f) {
+ seqPlayer->applyBend = false;
+ } else {
+ seqPlayer->applyBend = true;
+ }
+ break;
+
+ default:
+ break;
+ }
+}
+
+void AudioThread_ProcessChannelCmd(SequenceChannel* channel, AudioCmd* cmd) {
+ u8 filterCutoff;
+
+ switch (cmd->op) {
+ case AUDIOCMD_OP_CHANNEL_SET_VOL_SCALE:
+ if (channel->volumeScale != cmd->asFloat) {
+ channel->volumeScale = cmd->asFloat;
+ channel->changes.s.volume = true;
+ }
+ break;
+
+ case AUDIOCMD_OP_CHANNEL_SET_VOL:
+ if (channel->volume != cmd->asFloat) {
+ channel->volume = cmd->asFloat;
+ channel->changes.s.volume = true;
+ }
+ break;
+
+ case AUDIOCMD_OP_CHANNEL_SET_PAN:
+ if (channel->newPan != cmd->asSbyte) {
+ channel->newPan = cmd->asSbyte;
+ channel->changes.s.pan = true;
+ }
+ break;
+
+ case AUDIOCMD_OP_CHANNEL_SET_PAN_WEIGHT:
+ if (channel->newPan != cmd->asSbyte) {
+ channel->panChannelWeight = cmd->asSbyte;
+ channel->changes.s.pan = true;
+ }
+ break;
+
+ case AUDIOCMD_OP_CHANNEL_SET_FREQ_SCALE:
+ if (channel->freqScale != cmd->asFloat) {
+ channel->freqScale = cmd->asFloat;
+ channel->changes.s.freqScale = true;
+ }
+ break;
+
+ case AUDIOCMD_OP_CHANNEL_SET_REVERB_VOLUME:
+ if (channel->targetReverbVol != cmd->asSbyte) {
+ channel->targetReverbVol = cmd->asSbyte;
+ }
+ break;
+
+ case AUDIOCMD_OP_CHANNEL_SET_REVERB_INDEX:
+ if (channel->reverbIndex != cmd->asSbyte) {
+ channel->reverbIndex = cmd->asSbyte;
+ }
+ break;
+
+ case AUDIOCMD_OP_CHANNEL_SET_SURROUND_EFFECT_INDEX:
+ channel->surroundEffectIndex = cmd->asSbyte;
+ break;
+
+ case AUDIOCMD_OP_CHANNEL_SET_IO:
+ if (cmd->arg2 < ARRAY_COUNT(channel->seqScriptIO)) {
+ channel->seqScriptIO[cmd->arg2] = cmd->asSbyte;
+ }
+ break;
+
+ case AUDIOCMD_OP_CHANNEL_SET_MUTE:
+ channel->muted = cmd->asSbyte;
+ break;
+
+ case AUDIOCMD_OP_CHANNEL_SET_MUTE_FLAGS:
+ channel->muteFlags = cmd->asSbyte;
+ break;
+
+ case AUDIOCMD_OP_CHANNEL_SET_VIBRATO_DEPTH:
+ channel->vibrato.vibratoDepthTarget = cmd->asUbyte * 8;
+ channel->vibrato.vibratoDepthChangeDelay = 1;
+ break;
+
+ case AUDIOCMD_OP_CHANNEL_SET_VIBRATO_RATE:
+ channel->vibrato.vibratoRateTarget = cmd->asUbyte * 32;
+ channel->vibrato.vibratoRateChangeDelay = 1;
+ break;
+
+ case AUDIOCMD_OP_CHANNEL_SET_COMB_FILTER_SIZE:
+ channel->combFilterSize = cmd->asUbyte;
+ break;
+
+ case AUDIOCMD_OP_CHANNEL_SET_COMB_FILTER_GAIN:
+ channel->combFilterGain = cmd->asUShort;
+ break;
+
+ case AUDIOCMD_OP_CHANNEL_SET_STEREO:
+ channel->stereoData.asByte = cmd->asUbyte;
+ break;
+
+ case AUDIOCMD_OP_CHANNEL_SET_SET_START_POS:
+ channel->startSamplePos = cmd->asInt;
+ break;
+
+ case AUDIOCMD_OP_CHANNEL_SET_SFX_STATE:
+ channel->sfxState = cmd->asUInt;
+ break;
+
+ case AUDIOCMD_OP_CHANNEL_SET_FILTER:
+ filterCutoff = cmd->arg2;
+ if (cmd->asUInt != 0) {
+ channel->filter = cmd->asUInt;
+ }
+ if (channel->filter != NULL) {
+ AudioHeap_LoadFilter(channel->filter, filterCutoff >> 4, filterCutoff & 0xF);
+ }
+ break;
+
+ case AUDIOCMD_OP_CHANNEL_SET_GAIN:
+ channel->gain = cmd->asUbyte;
+ break;
+
+ default:
+ break;
+ }
+}
+
+/**
+ * Call an audio-thread command that has no code to process it. Unused.
+ */
+void AudioThread_Noop1Cmd(s32 arg0, s32 arg1, s32 arg2) {
+ AUDIOCMD_GLOBAL_NOOP_1(arg0, arg1, arg2, 1);
+}
+
+/**
+ * Call an audio-thread command that has no code to process it. Unused.
+ */
+void AudioThread_Noop1CmdZeroed(void) {
+ AUDIOCMD_GLOBAL_NOOP_1(0, 0, 0, 0);
+}
+
+/**
+ * Call an audio-thread command that has no code to process it. Unused.
+ */
+void AudioThread_Noop2Cmd(u32 arg0, s32 arg1) {
+ AUDIOCMD_GLOBAL_NOOP_2(0, 0, arg1, arg0);
+}
+
+// Unused
+void AudioThread_WaitForAudioTask(void) {
+ osRecvMesg(gAudioCtx.taskStartQueueP, NULL, OS_MESG_NOBLOCK);
+ osRecvMesg(gAudioCtx.taskStartQueueP, NULL, OS_MESG_BLOCK);
+}
+
+/**
+ * Get the number of s16-samples from the start of the sample to the current sample position.
+ * Unused
+ */
+s32 AudioThread_GetSamplePosFromStart(s32 seqPlayerIndex, s32 channelIndex, s32 layerIndex) {
+ s32 pad;
+ s32 loopEnd;
+ s32 samplePosInt;
+
+ if (!AudioThread_GetSamplePos(seqPlayerIndex, channelIndex, layerIndex, &loopEnd, &samplePosInt)) {
+ return 0;
+ }
+ return samplePosInt;
+}
+
+/**
+ * Get the number of s16-samples from the current sample position to the end of the sample.
+ * Unused
+ */
+s32 AudioThread_GetSamplePosUntilEnd(s32 seqPlayerIndex, s32 channelIndex, s32 layerIndex) {
+ s32 pad;
+ s32 loopEnd;
+ s32 samplePosInt;
+
+ if (!AudioThread_GetSamplePos(seqPlayerIndex, channelIndex, layerIndex, &loopEnd, &samplePosInt)) {
+ return 0;
+ }
+ return loopEnd - samplePosInt;
+}
+
+// Only used in unused functions
+s32 AudioThread_GetSamplePos(s32 seqPlayerIndex, s32 channelIndex, s32 layerIndex, s32* loopEnd, s32* samplePosInt) {
+ SequencePlayer* seqPlayer = &gAudioCtx.seqPlayers[seqPlayerIndex];
+ SequenceLayer* layer;
+ Note* note;
+ TunedSample* tunedSample;
+
+ if (seqPlayer->enabled && seqPlayer->channels[channelIndex]->enabled) {
+ layer = seqPlayer->channels[channelIndex]->layers[layerIndex];
+ if (layer == NULL) {
+ return false;
+ }
+
+ if (layer->enabled) {
+ if (layer->note == NULL) {
+ return false;
+ }
+
+ if (!layer->bit3) {
+ return false;
+ }
+
+ note = layer->note;
+ if (layer == note->playbackState.parentLayer) {
+
+ if (note->sampleState.bitField1.isSyntheticWave == true) {
+ return false;
+ }
+
+ tunedSample = note->sampleState.tunedSample;
+ if (tunedSample == NULL) {
+ return false;
+ }
+ *loopEnd = tunedSample->sample->loop->loopEnd;
+ *samplePosInt = note->synthesisState.samplePosInt;
+ return true;
+ }
+ return false;
+ }
+ }
+ return false;
+}
+
+s32 AudioThread_GetEnabledNotesCount(void) {
+ return AudioThread_CountAndReleaseNotes(0);
+}
+
+s32 AudioThread_GetEnabledSampledNotesCount(void) {
+ return AudioThread_CountAndReleaseNotes(AUDIO_NOTE_SAMPLE_NOTES);
+}
+
+/**
+ * @param flags 0: count notes. 1: release all notes. 2: count sample notes 3: release sample notes
+ * @return s32 number of notes
+ */
+s32 AudioThread_CountAndReleaseNotes(s32 flags) {
+ s32 noteCount;
+ NotePlaybackState* playbackState;
+ NoteSampleState* noteSampleState;
+ s32 i;
+ Note* note;
+ TunedSample* tunedSample;
+
+ noteCount = 0;
+ for (i = 0; i < gAudioCtx.numNotes; i++) {
+ note = &gAudioCtx.notes[i];
+ playbackState = ¬e->playbackState;
+ if (note->sampleState.bitField0.enabled) {
+ noteSampleState = ¬e->sampleState;
+ if (playbackState->adsr.action.s.state != ADSR_STATE_DISABLED) {
+ if (flags >= AUDIO_NOTE_SAMPLE_NOTES) {
+ tunedSample = noteSampleState->tunedSample;
+ if ((tunedSample == NULL) || noteSampleState->bitField1.isSyntheticWave) {
+ continue;
+ }
+ if (tunedSample->sample->medium == MEDIUM_RAM) {
+ continue;
+ }
+ }
+
+ noteCount++;
+ if ((flags & AUDIO_NOTE_RELEASE) == AUDIO_NOTE_RELEASE) {
+ playbackState->adsr.fadeOutVel = gAudioCtx.audioBufferParameters.updatesPerFrameInv;
+ playbackState->adsr.action.s.release = true;
+ }
+ }
+ }
+ }
+ return noteCount;
+}
+
+u32 AudioThread_NextRandom(void) {
+ static u32 sAudioRandom = 0x12345678;
+ static u32 sAudioOsCount = 0x11111111;
+ u32 count = osGetCount();
+
+ sAudioRandom = (gAudioCtx.totalTaskCount + sAudioRandom + count) * (gAudioCtx.audioRandom + 0x1234567);
+ sAudioRandom = (sAudioRandom & 1) + (sAudioRandom * 2) + sAudioOsCount;
+ sAudioOsCount = count;
+
+ return sAudioRandom;
+}
+
+void AudioThread_InitMesgQueues(void) {
+ AudioThread_InitMesgQueuesInternal();
+}
diff --git a/src/audio/sequence.c b/src/audio/sequence.c
new file mode 100644
index 000000000..7d37a0ae9
--- /dev/null
+++ b/src/audio/sequence.c
@@ -0,0 +1,922 @@
+/**
+ * @file sequence.c
+ *
+ * This file implements a set of high-level audio sequence commands that allow sequences to be modified in real-time.
+ * These commands are intended to interface external to the audio library.
+ *
+ * These commands are generated using `AudioSeq_QueueSeqCmd`, and a user-friendly interface for this function
+ * can be found in `seqcmd.h`
+ *
+ * These commands change sequences by generating internal audio commands `AudioThread_QueueCmd` which allows these
+ * sequence requests to be passed onto the audio thread. It is worth noting all functions in this file are
+ * called from the graph thread.
+ *
+ * These commands are not to be confused with the sequence instructions used by the sequences themselves
+ * which are a midi-based scripting language.
+ *
+ * Nor are these commands to be confused with the internal audio commands used to transfer requests from
+ * the graph thread to the audio thread.
+ */
+#include "global.h"
+
+// Direct audio command (skips the queueing system)
+#define SEQCMD_SET_SEQPLAYER_VOLUME_NOW(seqPlayerIndex, duration, volume) \
+ AudioSeq_ProcessSeqCmd((SEQCMD_OP_SET_SEQPLAYER_VOLUME << 28) | ((u8)(seqPlayerIndex) << 24) | \
+ ((u8)(duration) << 16) | ((u8)((volume)*127.0f)));
+
+u8 sSeqCmdWritePos = 0;
+u8 sSeqCmdReadPos = 0;
+u8 sStartSeqDisabled = 0;
+u8 sSoundModeList[] = {
+ SOUNDMODE_STEREO, SOUNDMODE_HEADSET, SOUNDMODE_SURROUND_EXTERNAL, SOUNDMODE_MONO, SOUNDMODE_SURROUND,
+};
+u8 gAudioSpecId = 0;
+u8 gAudioHeapResetState = AUDIO_HEAP_RESET_STATE_NONE;
+u32 sResetAudioHeapSeqCmd = 0;
+
+void AudioSeq_StartSequence(u8 seqPlayerIndex, u8 seqId, u8 seqArgs, u16 fadeInDuration) {
+ u8 channelIndex;
+ u16 skipTicks;
+ s32 pad;
+
+ if (!sStartSeqDisabled || (seqPlayerIndex == SEQ_PLAYER_SFX)) {
+ seqArgs &= 0x7F;
+ if (seqArgs == 0x7F) {
+ // `fadeInDuration` interpreted as seconds, 60 is refresh rate and does not account for PAL
+ skipTicks = (fadeInDuration >> 3) * 60 * gAudioCtx.audioBufferParameters.updatesPerFrame;
+ AUDIOCMD_GLOBAL_INIT_SEQPLAYER_SKIP_TICKS(seqPlayerIndex, seqId, skipTicks);
+ } else {
+ // `fadeInDuration` interpreted as 1/30th of a second, does not account for change in refresh rate for PAL
+ AUDIOCMD_GLOBAL_INIT_SEQPLAYER(seqPlayerIndex, seqId,
+ (fadeInDuration * (u16)gAudioCtx.audioBufferParameters.updatesPerFrame) / 4);
+ }
+
+ gActiveSeqs[seqPlayerIndex].seqId = seqId | (seqArgs << 8);
+ gActiveSeqs[seqPlayerIndex].prevSeqId = seqId | (seqArgs << 8);
+ gActiveSeqs[seqPlayerIndex].isSeqPlayerInit = true;
+
+ if (gActiveSeqs[seqPlayerIndex].volCur != 1.0f) {
+ AUDIOCMD_SEQPLAYER_FADE_VOLUME_SCALE(seqPlayerIndex, gActiveSeqs[seqPlayerIndex].volCur);
+ }
+
+ gActiveSeqs[seqPlayerIndex].tempoTimer = 0;
+ gActiveSeqs[seqPlayerIndex].tempoOriginal = 0;
+ gActiveSeqs[seqPlayerIndex].tempoCmd = 0;
+
+ for (channelIndex = 0; channelIndex < SEQ_NUM_CHANNELS; channelIndex++) {
+ gActiveSeqs[seqPlayerIndex].channelData[channelIndex].volCur = 1.0f;
+ gActiveSeqs[seqPlayerIndex].channelData[channelIndex].volTimer = 0;
+ gActiveSeqs[seqPlayerIndex].channelData[channelIndex].freqScaleCur = 1.0f;
+ gActiveSeqs[seqPlayerIndex].channelData[channelIndex].freqScaleTimer = 0;
+ }
+
+ gActiveSeqs[seqPlayerIndex].freqScaleChannelFlags = 0;
+ gActiveSeqs[seqPlayerIndex].volChannelFlags = 0;
+ }
+}
+
+void AudioSeq_StopSequence(u8 seqPlayerIndex, u16 fadeOutDuration) {
+ AUDIOCMD_GLOBAL_DISABLE_SEQPLAYER(seqPlayerIndex,
+ (fadeOutDuration * (u16)gAudioCtx.audioBufferParameters.updatesPerFrame) / 4);
+ gActiveSeqs[seqPlayerIndex].seqId = NA_BGM_DISABLED;
+}
+
+void AudioSeq_ProcessSeqCmd(u32 cmd) {
+ s32 priority;
+ s32 channelMaskEnable;
+ u16 channelMaskDisable;
+ u16 fadeTimer;
+ u16 val;
+ u8 oldSpecId;
+ u8 specId;
+ u8 fadeReverb;
+ u8 op;
+ u8 subOp;
+ u8 seqPlayerIndex;
+ u8 seqId;
+ u8 seqArgs;
+ u8 found;
+ u8 ioPort;
+ u8 duration;
+ u8 channelIndex;
+ u8 i;
+ f32 freqScaleTarget;
+ u32 outNumFonts;
+
+ op = cmd >> 28;
+ seqPlayerIndex = (cmd & SEQCMD_SEQPLAYER_MASK) >> 24;
+
+ switch (op) {
+ case SEQCMD_OP_PLAY_SEQUENCE:
+ // Play a new sequence
+ seqId = cmd & SEQCMD_SEQID_MASK;
+ seqArgs = (cmd & 0xFF00) >> 8;
+ // `fadeTimer` is only shifted 13 bits instead of 16 bits.
+ // `fadeTimer` continues to be scaled in `AudioSeq_StartSequence`
+ fadeTimer = (cmd & 0xFF0000) >> 13;
+ if (!gActiveSeqs[seqPlayerIndex].isWaitingForFonts && !sStartSeqDisabled) {
+ if (seqArgs < 0x80) {
+ AudioSeq_StartSequence(seqPlayerIndex, seqId, seqArgs, fadeTimer);
+ } else {
+ // Store the cmd to be called again once the fonts are loaded
+ // but changes the command so that next time, the (seqArgs < 0x80) case is taken
+ gActiveSeqs[seqPlayerIndex].startAsyncSeqCmd =
+ (cmd & ~(SEQ_FLAG_ASYNC | SEQCMD_ASYNC_ACTIVE)) + SEQCMD_ASYNC_ACTIVE;
+ gActiveSeqs[seqPlayerIndex].isWaitingForFonts = true;
+ gActiveSeqs[seqPlayerIndex].fontId = *AudioThread_GetFontsForSequence(seqId, &outNumFonts);
+ AudioSeq_StopSequence(seqPlayerIndex, 1);
+
+ if (gActiveSeqs[seqPlayerIndex].prevSeqId != NA_BGM_DISABLED) {
+ if (*AudioThread_GetFontsForSequence(seqId, &outNumFonts) !=
+ *AudioThread_GetFontsForSequence(gActiveSeqs[seqPlayerIndex].prevSeqId & 0xFF,
+ &outNumFonts)) {
+ // Discard Seq Fonts
+ AUDIOCMD_GLOBAL_DISCARD_SEQ_FONTS((s32)seqId);
+ }
+ }
+
+ AUDIOCMD_GLOBAL_ASYNC_LOAD_FONT(*AudioThread_GetFontsForSequence(seqId, &outNumFonts),
+ (u8)((seqPlayerIndex + 1) & 0xFF));
+ }
+ }
+ break;
+
+ case SEQCMD_OP_STOP_SEQUENCE:
+ // Stop a sequence and disable the sequence player
+ fadeTimer = (cmd & 0xFF0000) >> 13;
+ AudioSeq_StopSequence(seqPlayerIndex, fadeTimer);
+ break;
+
+ case SEQCMD_OP_QUEUE_SEQUENCE:
+ // Queue a sequence into `sSeqRequests`
+ seqId = cmd & SEQCMD_SEQID_MASK;
+ seqArgs = (cmd & 0xFF00) >> 8;
+ fadeTimer = (cmd & 0xFF0000) >> 13;
+ priority = seqArgs;
+
+ // Checks if the requested sequence is first in the list of requests
+ // If it is already queued and first in the list, then play the sequence immediately
+ for (i = 0; i < sNumSeqRequests[seqPlayerIndex]; i++) {
+ if (sSeqRequests[seqPlayerIndex][i].seqId == seqId) {
+ if (i == 0) {
+ AudioSeq_StartSequence(seqPlayerIndex, seqId, seqArgs, fadeTimer);
+ }
+ return;
+ }
+ }
+
+ // Searches the sequence requests for the first request that does not have a higher priority
+ // than the current incoming request
+ found = sNumSeqRequests[seqPlayerIndex];
+ for (i = 0; i < sNumSeqRequests[seqPlayerIndex]; i++) {
+ if (priority >= sSeqRequests[seqPlayerIndex][i].priority) {
+ found = i;
+ i = sNumSeqRequests[seqPlayerIndex]; // "break;"
+ }
+ }
+
+ // Check if the queue is full
+ if (sNumSeqRequests[seqPlayerIndex] < ARRAY_COUNT(sSeqRequests[seqPlayerIndex])) {
+ sNumSeqRequests[seqPlayerIndex]++;
+ }
+
+ for (i = sNumSeqRequests[seqPlayerIndex] - 1; i != found; i--) {
+ // Move all requests of lower priority backwards 1 place in the queue
+ // If the queue is full, overwrite the entry with the lowest priority
+ sSeqRequests[seqPlayerIndex][i].priority = sSeqRequests[seqPlayerIndex][i - 1].priority;
+ sSeqRequests[seqPlayerIndex][i].seqId = sSeqRequests[seqPlayerIndex][i - 1].seqId;
+ }
+
+ // Fill the newly freed space in the queue with the new request
+ sSeqRequests[seqPlayerIndex][found].priority = seqArgs;
+ sSeqRequests[seqPlayerIndex][found].seqId = seqId;
+
+ // The sequence is first in queue, so start playing.
+ if (found == 0) {
+ AudioSeq_StartSequence(seqPlayerIndex, seqId, seqArgs, fadeTimer);
+ }
+ break;
+
+ case SEQCMD_OP_UNQUEUE_SEQUENCE:
+ // Unqueue sequence
+ fadeTimer = (cmd & 0xFF0000) >> 13;
+
+ found = sNumSeqRequests[seqPlayerIndex];
+ for (i = 0; i < sNumSeqRequests[seqPlayerIndex]; i++) {
+ seqId = cmd & SEQCMD_SEQID_MASK;
+ if (sSeqRequests[seqPlayerIndex][i].seqId == seqId) {
+ found = i;
+ i = sNumSeqRequests[seqPlayerIndex]; // "break;"
+ }
+ }
+
+ if (found != sNumSeqRequests[seqPlayerIndex]) {
+ // Move all requests of lower priority forward 1 place in the queue
+ for (i = found; i < sNumSeqRequests[seqPlayerIndex] - 1; i++) {
+ sSeqRequests[seqPlayerIndex][i].priority = sSeqRequests[seqPlayerIndex][i + 1].priority;
+ sSeqRequests[seqPlayerIndex][i].seqId = sSeqRequests[seqPlayerIndex][i + 1].seqId;
+ }
+ sNumSeqRequests[seqPlayerIndex]--;
+ }
+
+ // If the sequence was first in queue (it is currently playing),
+ // Then stop the sequence and play the next sequence in the queue.
+ if (found == 0) {
+ AudioSeq_StopSequence(seqPlayerIndex, fadeTimer);
+ if (sNumSeqRequests[seqPlayerIndex] != 0) {
+ AudioSeq_StartSequence(seqPlayerIndex, sSeqRequests[seqPlayerIndex][0].seqId,
+ sSeqRequests[seqPlayerIndex][0].priority, fadeTimer);
+ }
+ }
+ break;
+
+ case SEQCMD_OP_SET_SEQPLAYER_VOLUME:
+ // Transition volume to a target volume for an entire player
+ duration = (cmd & 0xFF0000) >> 15;
+ val = cmd & 0xFF;
+ if (duration == 0) {
+ duration++;
+ }
+ // Volume is scaled relative to 127
+ gActiveSeqs[seqPlayerIndex].volTarget = (f32)val / 127.0f;
+ if (gActiveSeqs[seqPlayerIndex].volCur != gActiveSeqs[seqPlayerIndex].volTarget) {
+ gActiveSeqs[seqPlayerIndex].volStep =
+ (gActiveSeqs[seqPlayerIndex].volCur - gActiveSeqs[seqPlayerIndex].volTarget) / (f32)duration;
+ gActiveSeqs[seqPlayerIndex].volTimer = duration;
+ }
+ break;
+
+ case SEQCMD_OP_SET_SEQPLAYER_FREQ:
+ // Transition freq scale to a target freq for all channels
+ duration = (cmd & 0xFF0000) >> 15;
+ val = cmd & 0xFFFF;
+ if (duration == 0) {
+ duration++;
+ }
+ // Frequency is scaled relative to 1000
+ freqScaleTarget = (f32)val / 1000.0f;
+ for (i = 0; i < SEQ_NUM_CHANNELS; i++) {
+ gActiveSeqs[seqPlayerIndex].channelData[i].freqScaleTarget = freqScaleTarget;
+ gActiveSeqs[seqPlayerIndex].channelData[i].freqScaleTimer = duration;
+ gActiveSeqs[seqPlayerIndex].channelData[i].freqScaleStep =
+ (gActiveSeqs[seqPlayerIndex].channelData[i].freqScaleCur - freqScaleTarget) / (f32)duration;
+ }
+ gActiveSeqs[seqPlayerIndex].freqScaleChannelFlags = 0xFFFF;
+ break;
+
+ case SEQCMD_OP_SET_CHANNEL_FREQ:
+ // Transition freq scale to a target for a specific channel
+ duration = (cmd & 0xFF0000) >> 15;
+ channelIndex = (cmd & 0xF000) >> 12;
+ val = cmd & 0xFFF;
+ if (duration == 0) {
+ duration++;
+ }
+ // Frequency is scaled relative to 1000
+ freqScaleTarget = (f32)val / 1000.0f;
+ gActiveSeqs[seqPlayerIndex].channelData[channelIndex].freqScaleTarget = freqScaleTarget;
+ gActiveSeqs[seqPlayerIndex].channelData[channelIndex].freqScaleStep =
+ (gActiveSeqs[seqPlayerIndex].channelData[channelIndex].freqScaleCur - freqScaleTarget) / (f32)duration;
+ gActiveSeqs[seqPlayerIndex].channelData[channelIndex].freqScaleTimer = duration;
+ gActiveSeqs[seqPlayerIndex].freqScaleChannelFlags |= 1 << channelIndex;
+ break;
+
+ case SEQCMD_OP_SET_CHANNEL_VOLUME:
+ // Transition volume to a target volume for a specific channel
+ duration = (cmd & 0xFF0000) >> 15;
+ channelIndex = (cmd & 0xF00) >> 8;
+ val = cmd & 0xFF;
+ if (duration == 0) {
+ duration++;
+ }
+ // Volume is scaled relative to 127
+ gActiveSeqs[seqPlayerIndex].channelData[channelIndex].volTarget = (f32)val / 127.0f;
+ if (gActiveSeqs[seqPlayerIndex].channelData[channelIndex].volCur !=
+ gActiveSeqs[seqPlayerIndex].channelData[channelIndex].volTarget) {
+ gActiveSeqs[seqPlayerIndex].channelData[channelIndex].volStep =
+ (gActiveSeqs[seqPlayerIndex].channelData[channelIndex].volCur -
+ gActiveSeqs[seqPlayerIndex].channelData[channelIndex].volTarget) /
+ (f32)duration;
+ gActiveSeqs[seqPlayerIndex].channelData[channelIndex].volTimer = duration;
+ gActiveSeqs[seqPlayerIndex].volChannelFlags |= 1 << channelIndex;
+ }
+ break;
+
+ case SEQCMD_OP_SET_SEQPLAYER_IO:
+ // Set global io port
+ ioPort = (cmd & 0xFF0000) >> 16;
+ val = cmd & 0xFF;
+ AUDIOCMD_SEQPLAYER_SET_IO(seqPlayerIndex, ioPort, val);
+ break;
+
+ case SEQCMD_OP_SET_CHANNEL_IO:
+ // Set io port if channel masked
+ channelIndex = (cmd & 0xF00) >> 8;
+ ioPort = (cmd & 0xFF0000) >> 16;
+ val = cmd & 0xFF;
+ if (!(gActiveSeqs[seqPlayerIndex].channelPortMask & (1 << channelIndex))) {
+ AUDIOCMD_CHANNEL_SET_IO(seqPlayerIndex, channelIndex, ioPort, val);
+ }
+ break;
+
+ case SEQCMD_OP_SET_CHANNEL_IO_DISABLE_MASK:
+ // Disable channel io specifically for `SEQCMD_OP_SET_CHANNEL_IO`.
+ // This can be bypassed by setting channel io through using `AUDIOCMD_CHANNEL_SET_IO` directly.
+ // This is accomplished by setting a channel mask.
+ gActiveSeqs[seqPlayerIndex].channelPortMask = cmd & 0xFFFF;
+ break;
+
+ case SEQCMD_OP_SET_CHANNEL_DISABLE_MASK:
+ // Disable or Reenable channels
+
+ // Disable channels
+ channelMaskDisable = cmd & 0xFFFF;
+ if (channelMaskDisable != 0) {
+ // Apply channel mask `channelMaskDisable`
+ AUDIOCMD_GLOBAL_SET_CHANNEL_MASK(seqPlayerIndex, channelMaskDisable);
+ // Disable channels
+ AUDIOCMD_CHANNEL_SET_MUTE(seqPlayerIndex, AUDIOCMD_ALL_CHANNELS, true);
+ }
+
+ // Reenable channels
+ channelMaskEnable = channelMaskDisable ^ 0xFFFF;
+ if (channelMaskEnable != 0) {
+ // Apply channel mask `channelMaskEnable`
+ AUDIOCMD_GLOBAL_SET_CHANNEL_MASK(seqPlayerIndex, channelMaskEnable);
+ // Enable channels
+ AUDIOCMD_CHANNEL_SET_MUTE(seqPlayerIndex, AUDIOCMD_ALL_CHANNELS, false);
+ }
+ break;
+
+ case SEQCMD_OP_TEMPO_CMD:
+ // Update a tempo using a sub-command system.
+ // Stores the cmd for processing elsewhere.
+ gActiveSeqs[seqPlayerIndex].tempoCmd = cmd;
+ break;
+
+ case SEQCMD_OP_SETUP_CMD:
+ // Queue a sub-command to execute once the sequence is finished playing
+ subOp = (cmd & 0xF00000) >> 20;
+ if (subOp != SEQCMD_SUB_OP_SETUP_RESET_SETUP_CMDS) {
+ // Ensure the maximum number of setup commands is not exceeded
+ if (gActiveSeqs[seqPlayerIndex].setupCmdNum < (ARRAY_COUNT(gActiveSeqs[seqPlayerIndex].setupCmd) - 1)) {
+ found = gActiveSeqs[seqPlayerIndex].setupCmdNum++;
+ if (found < ARRAY_COUNT(gActiveSeqs[seqPlayerIndex].setupCmd)) {
+ gActiveSeqs[seqPlayerIndex].setupCmd[found] = cmd;
+ // Adds a delay of 2 frames before executing any setup commands.
+ // This allows setup commands to be requested along with a new sequence on a seqPlayerIndex.
+ // This 2 frame delay ensures the player is enabled before its state is checked for
+ // the purpose of deciding if the setup commands should be run.
+ // Otherwise, the setup commands will be executed before the sequence starts,
+ // when the player is still disabled, instead of when the newly played sequence ends.
+ gActiveSeqs[seqPlayerIndex].setupCmdTimer = 2;
+ }
+ }
+ } else {
+ // `SEQCMD_SUB_OP_SETUP_RESET_SETUP_CMDS`
+ // Discard all setup command requests on `seqPlayerIndex`
+ gActiveSeqs[seqPlayerIndex].setupCmdNum = 0;
+ }
+ break;
+
+ case SEQCMD_OP_GLOBAL_CMD:
+ // Apply a command that applies to all sequence players
+ subOp = (cmd & 0xF00) >> 8;
+ val = cmd & 0xFF;
+ switch (subOp) {
+ case SEQCMD_SUB_OP_GLOBAL_SET_SOUND_MODE:
+ // Set sound mode
+ AUDIOCMD_GLOBAL_SET_SOUND_MODE(sSoundModeList[val]);
+ break;
+
+ case SEQCMD_SUB_OP_GLOBAL_DISABLE_NEW_SEQUENCES:
+ // Set sequence disabled in (sStartSeqDisabled & 1) bit
+ sStartSeqDisabled = (sStartSeqDisabled & (u8)~1) | (u8)(val & 1);
+ break;
+
+ case SEQCMD_SUB_OP_GLOBAL_DISABLE_NEW_SEQUENCES_2:
+ // Set sequence disabled in (sStartSeqDisabled & 2) bit
+ sStartSeqDisabled = (sStartSeqDisabled & (u8)~2) | (u8)((val & 1) << 1);
+ break;
+ }
+ break;
+
+ case SEQCMD_OP_RESET_AUDIO_HEAP:
+ // Resets the audio heap based on the audio specifications, audio mode, and sfx channel layout
+ specId = cmd & 0xFF;
+ fadeReverb = (cmd & 0xFF0000) >> 16;
+ if (fadeReverb == 0) {
+ gSfxChannelLayout = (cmd & 0xFF00) >> 8;
+ oldSpecId = gAudioSpecId;
+ gAudioSpecId = specId;
+ AudioThread_ResetAudioHeap(specId);
+ Audio_ResetForAudioHeapStep1(oldSpecId);
+ AUDIOCMD_GLOBAL_STOP_AUDIOCMDS();
+ } else {
+ sResetAudioHeapSeqCmd = cmd;
+ sResetAudioHeapFadeReverbVolume = 0x7FFF;
+ sResetAudioHeapTimer = 20;
+ sResetAudioHeapFadeReverbVolumeStep = 0x666;
+ }
+ break;
+ }
+}
+
+/**
+ * Add the sequence cmd to the `sAudioSeqCmds` queue
+ */
+void AudioSeq_QueueSeqCmd(u32 cmd) {
+ sAudioSeqCmds[sSeqCmdWritePos++] = cmd;
+}
+
+void AudioSeq_ProcessSeqCmds(void) {
+ while (sSeqCmdWritePos != sSeqCmdReadPos) {
+ AudioSeq_ProcessSeqCmd(sAudioSeqCmds[sSeqCmdReadPos++]);
+ }
+}
+
+u16 AudioSeq_GetActiveSeqId(u8 seqPlayerIndex) {
+ if (gActiveSeqs[seqPlayerIndex].isWaitingForFonts == true) {
+ return gActiveSeqs[seqPlayerIndex].startAsyncSeqCmd & SEQCMD_SEQID_MASK;
+ }
+
+ if (gActiveSeqs[seqPlayerIndex].seqId != NA_BGM_DISABLED) {
+ return gActiveSeqs[seqPlayerIndex].seqId;
+ }
+
+ return NA_BGM_DISABLED;
+}
+
+s32 AudioSeq_IsSeqCmdNotQueued(u32 cmdVal, u32 cmdMask) {
+ u8 i;
+
+ for (i = sSeqCmdReadPos; i != sSeqCmdWritePos; i++) {
+ if ((sAudioSeqCmds[i] & cmdMask) == cmdVal) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+// Unused
+void AudioSeq_ResetSequenceRequests(u8 seqPlayerIndex) {
+ sNumSeqRequests[seqPlayerIndex] = 0;
+}
+
+/**
+ * Check if the setup command is queued. If it is, then replace the command
+ * with `SEQCMD_SUB_OP_SETUP_RESTORE_SEQPLAYER_VOLUME`.
+ * Unused
+ */
+void AudioSeq_ReplaceSeqCmdSetupOpVolRestore(u8 seqPlayerIndex, u8 setupOpDisabled) {
+ u8 i;
+
+ for (i = 0; i < gActiveSeqs[seqPlayerIndex].setupCmdNum; i++) {
+ u8 setupOp = (gActiveSeqs[seqPlayerIndex].setupCmd[i] & 0xF00000) >> 20;
+
+ if (setupOp == setupOpDisabled) {
+ gActiveSeqs[seqPlayerIndex].setupCmd[i] = 0xFF000000;
+ }
+ }
+}
+
+void AudioSeq_SetVolumeScale(u8 seqPlayerIndex, u8 scaleIndex, u8 targetVol, u8 volFadeTimer) {
+ f32 volScale;
+ u8 i;
+
+ gActiveSeqs[seqPlayerIndex].volScales[scaleIndex] = targetVol & 0x7F;
+
+ if (volFadeTimer != 0) {
+ gActiveSeqs[seqPlayerIndex].fadeVolUpdate = true;
+ gActiveSeqs[seqPlayerIndex].volFadeTimer = volFadeTimer;
+ } else {
+ for (i = 0, volScale = 1.0f; i < VOL_SCALE_INDEX_MAX; i++) {
+ volScale *= gActiveSeqs[seqPlayerIndex].volScales[i] / 127.0f;
+ }
+
+ SEQCMD_SET_SEQPLAYER_VOLUME_NOW(seqPlayerIndex, volFadeTimer, volScale);
+ }
+}
+
+/**
+ * Update different commands and requests for active sequences
+ */
+void AudioSeq_UpdateActiveSequences(void) {
+ u32 tempoCmd;
+ u16 tempoPrev;
+ u16 seqId;
+ u16 channelMask;
+ u16 tempoTarget;
+ u8 setupOp;
+ u8 targetSeqPlayerIndex;
+ u8 setupVal2;
+ u8 setupVal1;
+ u8 tempoOp;
+ s32 pad[2];
+ u32 retMsg;
+ f32 volume;
+ u8 tempoTimer;
+ u8 seqPlayerIndex;
+ u8 j;
+ u8 channelIndex;
+
+ for (seqPlayerIndex = 0; seqPlayerIndex < SEQ_PLAYER_MAX; seqPlayerIndex++) {
+
+ // The seqPlayer has finished initializing and is currently playing the active sequences
+ if (gActiveSeqs[seqPlayerIndex].isSeqPlayerInit && gAudioCtx.seqPlayers[seqPlayerIndex].enabled) {
+ gActiveSeqs[seqPlayerIndex].isSeqPlayerInit = false;
+ }
+
+ // The seqPlayer is no longer playing the active sequences
+ if ((AudioSeq_GetActiveSeqId(seqPlayerIndex) != NA_BGM_DISABLED) &&
+ !gAudioCtx.seqPlayers[seqPlayerIndex].enabled && (!gActiveSeqs[seqPlayerIndex].isSeqPlayerInit)) {
+ gActiveSeqs[seqPlayerIndex].seqId = NA_BGM_DISABLED;
+ }
+
+ // Check if the requested sequences is waiting for fonts to load
+ if (gActiveSeqs[seqPlayerIndex].isWaitingForFonts) {
+ switch ((s32)AudioThread_GetExternalLoadQueueMsg(&retMsg)) {
+ case SEQ_PLAYER_BGM_MAIN + 1:
+ case SEQ_PLAYER_FANFARE + 1:
+ case SEQ_PLAYER_SFX + 1:
+ case SEQ_PLAYER_BGM_SUB + 1:
+ case SEQ_PLAYER_AMBIENCE + 1:
+ // The fonts have been loaded successfully.
+ gActiveSeqs[seqPlayerIndex].isWaitingForFonts = false;
+ // Queue the same command that was stored previously, but without the 0x8000
+ AudioSeq_ProcessSeqCmd(gActiveSeqs[seqPlayerIndex].startAsyncSeqCmd);
+ break;
+ case 0xFF:
+ // There was an error in loading the fonts
+ gActiveSeqs[seqPlayerIndex].isWaitingForFonts = false;
+ break;
+ }
+ }
+
+ // Update global volume
+ if (gActiveSeqs[seqPlayerIndex].fadeVolUpdate) {
+ volume = 1.0f;
+ for (j = 0; j < VOL_SCALE_INDEX_MAX; j++) {
+ volume *= (gActiveSeqs[seqPlayerIndex].volScales[j] / 127.0f);
+ }
+
+ SEQCMD_SET_SEQPLAYER_VOLUME((u8)(seqPlayerIndex + (SEQCMD_ASYNC_ACTIVE >> 24)),
+ gActiveSeqs[seqPlayerIndex].volFadeTimer, (u8)(volume * 127.0f));
+ gActiveSeqs[seqPlayerIndex].fadeVolUpdate = false;
+ }
+
+ if (gActiveSeqs[seqPlayerIndex].volTimer != 0) {
+ gActiveSeqs[seqPlayerIndex].volTimer--;
+
+ if (gActiveSeqs[seqPlayerIndex].volTimer != 0) {
+ gActiveSeqs[seqPlayerIndex].volCur -= gActiveSeqs[seqPlayerIndex].volStep;
+ } else {
+ gActiveSeqs[seqPlayerIndex].volCur = gActiveSeqs[seqPlayerIndex].volTarget;
+ }
+
+ AUDIOCMD_SEQPLAYER_FADE_VOLUME_SCALE(seqPlayerIndex, gActiveSeqs[seqPlayerIndex].volCur);
+ }
+
+ // Process tempo
+ if (gActiveSeqs[seqPlayerIndex].tempoCmd != 0) {
+ tempoCmd = gActiveSeqs[seqPlayerIndex].tempoCmd;
+ tempoTimer = (tempoCmd & 0xFF0000) >> 15;
+ tempoTarget = tempoCmd & 0xFFF;
+ if (tempoTimer == 0) {
+ tempoTimer++;
+ }
+
+ // Process tempo commands
+ if (gAudioCtx.seqPlayers[seqPlayerIndex].enabled) {
+ tempoPrev = gAudioCtx.seqPlayers[seqPlayerIndex].tempo / TATUMS_PER_BEAT;
+ tempoOp = (tempoCmd & 0xF000) >> 12;
+ switch (tempoOp) {
+ case SEQCMD_SUB_OP_TEMPO_SPEED_UP:
+ // Speed up tempo by `tempoTarget` amount
+ tempoTarget += tempoPrev;
+ break;
+
+ case SEQCMD_SUB_OP_TEMPO_SLOW_DOWN:
+ // Slow down tempo by `tempoTarget` amount
+ if (tempoTarget < tempoPrev) {
+ tempoTarget = tempoPrev - tempoTarget;
+ }
+ break;
+
+ case SEQCMD_SUB_OP_TEMPO_SCALE:
+ // Scale tempo by a multiplicative factor
+ tempoTarget = tempoPrev * (tempoTarget / 100.0f);
+ break;
+
+ case SEQCMD_SUB_OP_TEMPO_RESET:
+ // Reset tempo to original tempo
+ tempoTarget = (gActiveSeqs[seqPlayerIndex].tempoOriginal != 0)
+ ? gActiveSeqs[seqPlayerIndex].tempoOriginal
+ : tempoPrev;
+ break;
+
+ default: // `SEQCMD_SUB_OP_TEMPO_SET`
+ // `tempoTarget` is the new tempo
+ break;
+ }
+
+ if (gActiveSeqs[seqPlayerIndex].tempoOriginal == 0) {
+ gActiveSeqs[seqPlayerIndex].tempoOriginal = tempoPrev;
+ }
+
+ gActiveSeqs[seqPlayerIndex].tempoTarget = tempoTarget;
+ gActiveSeqs[seqPlayerIndex].tempoCur = gAudioCtx.seqPlayers[seqPlayerIndex].tempo / 0x30;
+ gActiveSeqs[seqPlayerIndex].tempoStep =
+ (gActiveSeqs[seqPlayerIndex].tempoCur - gActiveSeqs[seqPlayerIndex].tempoTarget) / tempoTimer;
+ gActiveSeqs[seqPlayerIndex].tempoTimer = tempoTimer;
+ gActiveSeqs[seqPlayerIndex].tempoCmd = 0;
+ }
+ }
+
+ // Step tempo to target
+ if (gActiveSeqs[seqPlayerIndex].tempoTimer != 0) {
+ gActiveSeqs[seqPlayerIndex].tempoTimer--;
+ if (gActiveSeqs[seqPlayerIndex].tempoTimer != 0) {
+ gActiveSeqs[seqPlayerIndex].tempoCur -= gActiveSeqs[seqPlayerIndex].tempoStep;
+ } else {
+ gActiveSeqs[seqPlayerIndex].tempoCur = gActiveSeqs[seqPlayerIndex].tempoTarget;
+ }
+
+ AUDIOCMD_SEQPLAYER_SET_TEMPO(seqPlayerIndex, gActiveSeqs[seqPlayerIndex].tempoCur);
+ }
+
+ // Update channel volumes
+ if (gActiveSeqs[seqPlayerIndex].volChannelFlags != 0) {
+ for (channelIndex = 0; channelIndex < SEQ_NUM_CHANNELS; channelIndex++) {
+ if (gActiveSeqs[seqPlayerIndex].channelData[channelIndex].volTimer != 0) {
+ gActiveSeqs[seqPlayerIndex].channelData[channelIndex].volTimer--;
+ if (gActiveSeqs[seqPlayerIndex].channelData[channelIndex].volTimer != 0) {
+ gActiveSeqs[seqPlayerIndex].channelData[channelIndex].volCur -=
+ gActiveSeqs[seqPlayerIndex].channelData[channelIndex].volStep;
+ } else {
+ gActiveSeqs[seqPlayerIndex].channelData[channelIndex].volCur =
+ gActiveSeqs[seqPlayerIndex].channelData[channelIndex].volTarget;
+ gActiveSeqs[seqPlayerIndex].volChannelFlags ^= (1 << channelIndex);
+ }
+
+ AUDIOCMD_CHANNEL_SET_VOL_SCALE(seqPlayerIndex, channelIndex,
+ gActiveSeqs[seqPlayerIndex].channelData[channelIndex].volCur);
+ }
+ }
+ }
+
+ // Update frequencies
+ if (gActiveSeqs[seqPlayerIndex].freqScaleChannelFlags != 0) {
+ for (channelIndex = 0; channelIndex < SEQ_NUM_CHANNELS; channelIndex++) {
+ if (gActiveSeqs[seqPlayerIndex].channelData[channelIndex].freqScaleTimer != 0) {
+ gActiveSeqs[seqPlayerIndex].channelData[channelIndex].freqScaleTimer--;
+ if (gActiveSeqs[seqPlayerIndex].channelData[channelIndex].freqScaleTimer != 0) {
+ gActiveSeqs[seqPlayerIndex].channelData[channelIndex].freqScaleCur -=
+ gActiveSeqs[seqPlayerIndex].channelData[channelIndex].freqScaleStep;
+ } else {
+ gActiveSeqs[seqPlayerIndex].channelData[channelIndex].freqScaleCur =
+ gActiveSeqs[seqPlayerIndex].channelData[channelIndex].freqScaleTarget;
+ gActiveSeqs[seqPlayerIndex].freqScaleChannelFlags ^= (1 << channelIndex);
+ }
+
+ AUDIOCMD_CHANNEL_SET_FREQ_SCALE(seqPlayerIndex, channelIndex,
+ gActiveSeqs[seqPlayerIndex].channelData[channelIndex].freqScaleCur);
+ }
+ }
+ }
+
+ // Process setup commands
+ if (gActiveSeqs[seqPlayerIndex].setupCmdNum != 0) {
+ // If there is a SeqCmd to reset the audio heap queued, then drop all setup commands
+ if (!AudioSeq_IsSeqCmdNotQueued(SEQCMD_OP_RESET_AUDIO_HEAP << 28, SEQCMD_OP_MASK)) {
+ gActiveSeqs[seqPlayerIndex].setupCmdNum = 0;
+ break;
+ }
+
+ // Only process setup commands once the timer reaches zero
+ if (gActiveSeqs[seqPlayerIndex].setupCmdTimer != 0) {
+ gActiveSeqs[seqPlayerIndex].setupCmdTimer--;
+ continue;
+ }
+
+ // Only process setup commands if `seqPlayerIndex` if no longer playing
+ // i.e. the `seqPlayer` is no longer enabled
+ if (gAudioCtx.seqPlayers[seqPlayerIndex].enabled) {
+ continue;
+ }
+
+ for (j = 0; j < gActiveSeqs[seqPlayerIndex].setupCmdNum; j++) {
+ setupOp = (gActiveSeqs[seqPlayerIndex].setupCmd[j] & 0xF00000) >> 20;
+ targetSeqPlayerIndex = (gActiveSeqs[seqPlayerIndex].setupCmd[j] & 0xF0000) >> 16;
+ setupVal2 = (gActiveSeqs[seqPlayerIndex].setupCmd[j] & 0xFF00) >> 8;
+ setupVal1 = gActiveSeqs[seqPlayerIndex].setupCmd[j] & 0xFF;
+
+ switch (setupOp) {
+ case SEQCMD_SUB_OP_SETUP_RESTORE_SEQPLAYER_VOLUME:
+ // Restore `targetSeqPlayerIndex` volume back to normal levels
+ AudioSeq_SetVolumeScale(targetSeqPlayerIndex, VOL_SCALE_INDEX_FANFARE, 0x7F, setupVal1);
+ break;
+
+ case SEQCMD_SUB_OP_SETUP_RESTORE_SEQPLAYER_VOLUME_IF_QUEUED:
+ // Restore `targetSeqPlayerIndex` volume back to normal levels,
+ // but only if the number of sequence queue requests from `sSeqRequests`
+ // exactly matches the argument to the command
+ if (setupVal1 == sNumSeqRequests[seqPlayerIndex]) {
+ AudioSeq_SetVolumeScale(targetSeqPlayerIndex, VOL_SCALE_INDEX_FANFARE, 0x7F, setupVal2);
+ }
+ break;
+
+ case SEQCMD_SUB_OP_SETUP_SEQ_UNQUEUE:
+ // Unqueue `seqPlayerIndex` from sSeqRequests
+ //! @bug this command does not work as intended as unqueueing
+ //! the sequence relies on `gActiveSeqs[seqPlayerIndex].seqId`
+ //! However, `gActiveSeqs[seqPlayerIndex].seqId` is reset before the sequence on
+ //! `seqPlayerIndex` is requested to stop, i.e. before the sequence is disabled and setup
+ //! commands (including this command) can run. A simple fix would have been to unqueue based on
+ //! `gActiveSeqs[seqPlayerIndex].prevSeqId` instead
+ SEQCMD_UNQUEUE_SEQUENCE((u8)(seqPlayerIndex + (SEQCMD_ASYNC_ACTIVE >> 24)), 0,
+ gActiveSeqs[seqPlayerIndex].seqId);
+ break;
+
+ case SEQCMD_SUB_OP_SETUP_RESTART_SEQ:
+ // Restart the currently active sequence on `targetSeqPlayerIndex` with full volume.
+ // Sequence on `targetSeqPlayerIndex` must still be active to play (can be muted)
+ SEQCMD_PLAY_SEQUENCE((u8)(targetSeqPlayerIndex + (SEQCMD_ASYNC_ACTIVE >> 24)), 1,
+ gActiveSeqs[targetSeqPlayerIndex].seqId);
+ gActiveSeqs[targetSeqPlayerIndex].fadeVolUpdate = true;
+ gActiveSeqs[targetSeqPlayerIndex].volScales[1] = 0x7F;
+ break;
+
+ case SEQCMD_SUB_OP_SETUP_TEMPO_SCALE:
+ // Scale tempo by a multiplicative factor
+ SEQCMD_SCALE_TEMPO((u8)(targetSeqPlayerIndex + (SEQCMD_ASYNC_ACTIVE >> 24)), setupVal2,
+ setupVal1);
+ break;
+
+ case SEQCMD_SUB_OP_SETUP_TEMPO_RESET:
+ // Reset tempo to previous tempo
+ SEQCMD_RESET_TEMPO((u8)(targetSeqPlayerIndex + (SEQCMD_ASYNC_ACTIVE >> 24)), setupVal1);
+ break;
+
+ case SEQCMD_SUB_OP_SETUP_PLAY_SEQ:
+ // Play the requested sequence
+ // Uses the fade timer set by `SEQCMD_SUB_OP_SETUP_SET_FADE_TIMER`
+ seqId = gActiveSeqs[seqPlayerIndex].setupCmd[j] & 0xFFFF;
+ SEQCMD_PLAY_SEQUENCE((u8)(targetSeqPlayerIndex + (SEQCMD_ASYNC_ACTIVE >> 24)),
+ gActiveSeqs[targetSeqPlayerIndex].setupFadeTimer, seqId);
+ AudioSeq_SetVolumeScale(targetSeqPlayerIndex, VOL_SCALE_INDEX_FANFARE, 0x7F, 0);
+ gActiveSeqs[targetSeqPlayerIndex].setupFadeTimer = 0;
+ break;
+
+ case SEQCMD_SUB_OP_SETUP_SET_FADE_TIMER:
+ // A command specifically to support `SEQCMD_SUB_OP_SETUP_PLAY_SEQ`
+ // Sets the fade timer for the sequence requested in `SEQCMD_SUB_OP_SETUP_PLAY_SEQ`
+ gActiveSeqs[seqPlayerIndex].setupFadeTimer = setupVal2;
+ break;
+
+ case SEQCMD_SUB_OP_SETUP_RESTORE_SEQPLAYER_VOLUME_WITH_SCALE_INDEX:
+ // Restore the volume back to default levels
+ // Allows a `scaleIndex` to be specified.
+ AudioSeq_SetVolumeScale(targetSeqPlayerIndex, setupVal2, 0x7F, setupVal1);
+ break;
+
+ case SEQCMD_SUB_OP_SETUP_POP_PERSISTENT_CACHE:
+ // Discard audio data by popping one more audio caches from the audio heap
+ if (setupVal1 & (1 << SEQUENCE_TABLE)) {
+ AUDIOCMD_GLOBAL_POP_PERSISTENT_CACHE(SEQUENCE_TABLE);
+ }
+ if (setupVal1 & (1 << FONT_TABLE)) {
+ AUDIOCMD_GLOBAL_POP_PERSISTENT_CACHE(FONT_TABLE);
+ }
+ if (setupVal1 & (1 << SAMPLE_TABLE)) {
+ AUDIOCMD_GLOBAL_POP_PERSISTENT_CACHE(SAMPLE_TABLE);
+ }
+ break;
+
+ case SEQCMD_SUB_OP_SETUP_SET_CHANNEL_DISABLE_MASK:
+ // Disable (or reenable) specific channels of `targetSeqPlayerIndex`
+ channelMask = gActiveSeqs[seqPlayerIndex].setupCmd[j] & 0xFFFF;
+ SEQCMD_SET_CHANNEL_DISABLE_MASK((u8)(targetSeqPlayerIndex + (SEQCMD_ASYNC_ACTIVE >> 24)),
+ channelMask);
+ break;
+
+ case SEQCMD_SUB_OP_SETUP_SET_SEQPLAYER_FREQ:
+ // Scale all channels of `targetSeqPlayerIndex`
+ SEQCMD_SET_SEQPLAYER_FREQ((u8)(targetSeqPlayerIndex + (SEQCMD_ASYNC_ACTIVE >> 24)), setupVal2,
+ setupVal1 * 10);
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ gActiveSeqs[seqPlayerIndex].setupCmdNum = 0;
+ }
+ }
+}
+
+u8 AudioSeq_UpdateAudioHeapReset(void) {
+ if (gAudioHeapResetState != AUDIO_HEAP_RESET_STATE_NONE) {
+ if (gAudioHeapResetState == AUDIO_HEAP_RESET_STATE_RESETTING) {
+ if (func_80193C5C() == 1) {
+ gAudioHeapResetState = AUDIO_HEAP_RESET_STATE_NONE;
+ AUDIOCMD_SEQPLAYER_SET_IO(SEQ_PLAYER_SFX, 0, gSfxChannelLayout);
+ Audio_ResetForAudioHeapStep2();
+ }
+ } else if (gAudioHeapResetState == AUDIO_HEAP_RESET_STATE_RESETTING_ALT) {
+ while (func_80193C5C() != 1) {}
+ gAudioHeapResetState = AUDIO_HEAP_RESET_STATE_NONE;
+ AUDIOCMD_SEQPLAYER_SET_IO(SEQ_PLAYER_SFX, 0, gSfxChannelLayout);
+ Audio_ResetForAudioHeapStep2();
+ }
+ }
+
+ return gAudioHeapResetState;
+}
+
+u8 AudioSeq_ResetReverb(void) {
+ u8 isReverbFading = false;
+ u8 fadeReverb = ((sResetAudioHeapSeqCmd & 0xFF0000) >> 16);
+ u8 reverbIndex = 0;
+ u8 specId;
+
+ if (sResetAudioHeapSeqCmd != 0) {
+ if (sResetAudioHeapTimer--) {
+ while (fadeReverb != 0) {
+ if (fadeReverb & 1) {
+ AUDIOCMD_GLOBAL_SET_REVERB_DATA(reverbIndex, REVERB_DATA_TYPE_VOLUME,
+ sResetAudioHeapFadeReverbVolume);
+ AudioThread_ScheduleProcessCmds();
+ }
+ reverbIndex++;
+ fadeReverb = fadeReverb >> 1;
+ }
+
+ sResetAudioHeapFadeReverbVolume -= sResetAudioHeapFadeReverbVolumeStep;
+ isReverbFading = true;
+ } else {
+ while (fadeReverb != 0) {
+ if (fadeReverb & 1) {
+ AUDIOCMD_GLOBAL_SET_REVERB_DATA(
+ reverbIndex, REVERB_DATA_TYPE_SETTINGS,
+ (s32)(gReverbSettingsTable[(u8)(sResetAudioHeapSeqCmd & 0xFF)] + reverbIndex));
+ AudioThread_ScheduleProcessCmds();
+ }
+ reverbIndex++;
+ fadeReverb = fadeReverb >> 1;
+ }
+
+ sResetAudioHeapSeqCmd = 0;
+ AUDIOCMD_SEQPLAYER_SET_IO(SEQ_PLAYER_SFX, 0, gSfxChannelLayout);
+ Audio_ResetForAudioHeapStep3();
+ }
+ }
+
+ return isReverbFading;
+}
+
+void AudioSeq_ResetActiveSequences(void) {
+ u8 seqPlayerIndex;
+ u8 scaleIndex;
+
+ for (seqPlayerIndex = 0; seqPlayerIndex < SEQ_PLAYER_MAX; seqPlayerIndex++) {
+ sNumSeqRequests[seqPlayerIndex] = 0;
+
+ gActiveSeqs[seqPlayerIndex].seqId = NA_BGM_DISABLED;
+ gActiveSeqs[seqPlayerIndex].prevSeqId = NA_BGM_DISABLED;
+ gActiveSeqs[seqPlayerIndex].tempoTimer = 0;
+ gActiveSeqs[seqPlayerIndex].tempoOriginal = 0;
+ gActiveSeqs[seqPlayerIndex].tempoCmd = 0;
+ gActiveSeqs[seqPlayerIndex].channelPortMask = 0;
+ gActiveSeqs[seqPlayerIndex].setupCmdNum = 0;
+ gActiveSeqs[seqPlayerIndex].setupFadeTimer = 0;
+ gActiveSeqs[seqPlayerIndex].freqScaleChannelFlags = 0;
+ gActiveSeqs[seqPlayerIndex].volChannelFlags = 0;
+ gActiveSeqs[seqPlayerIndex].isWaitingForFonts = false;
+ gActiveSeqs[seqPlayerIndex].isSeqPlayerInit = false;
+
+ for (scaleIndex = 0; scaleIndex < VOL_SCALE_INDEX_MAX; scaleIndex++) {
+ gActiveSeqs[seqPlayerIndex].volScales[scaleIndex] = 0x7F;
+ }
+
+ gActiveSeqs[seqPlayerIndex].volFadeTimer = 1;
+ gActiveSeqs[seqPlayerIndex].fadeVolUpdate = true;
+ }
+}
+
+void AudioSeq_ResetActiveSequencesAndVolume(void) {
+ u8 seqPlayerIndex;
+ u8 scaleIndex;
+
+ for (seqPlayerIndex = 0; seqPlayerIndex < SEQ_PLAYER_MAX; seqPlayerIndex++) {
+ gActiveSeqs[seqPlayerIndex].volCur = 1.0f;
+ gActiveSeqs[seqPlayerIndex].volTimer = 0;
+ gActiveSeqs[seqPlayerIndex].fadeVolUpdate = false;
+ for (scaleIndex = 0; scaleIndex < VOL_SCALE_INDEX_MAX; scaleIndex++) {
+ gActiveSeqs[seqPlayerIndex].volScales[scaleIndex] = 0x7F;
+ }
+ }
+ AudioSeq_ResetActiveSequences();
+}
diff --git a/src/code/audio/audio_init_params.c b/src/audio/session_config.c
similarity index 98%
rename from src/code/audio/audio_init_params.c
rename to src/audio/session_config.c
index 59c6658ac..e0881913b 100644
--- a/src/code/audio/audio_init_params.c
+++ b/src/audio/session_config.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "buffers.h"
const s16 gAudioTatumInit[] = {
0x1C00, // unused
@@ -14,7 +15,7 @@ const s16 gAudioTatumInit[] = {
#define SOUNDFONT_2_SIZE 0xCE0
// Sizes of everything on the init pool
-#define AI_BUFFERS_SIZE (AIBUF_SIZE * ARRAY_COUNT(gAudioContext.aiBuffers))
+#define AI_BUFFERS_SIZE (AIBUF_SIZE * ARRAY_COUNT(gAudioCtx.aiBuffers))
#define SOUNDFONT_LIST_SIZE (NUM_SOUNDFONTS * sizeof(SoundFont))
// 0x19BD0
diff --git a/src/code/audio/code_801A5BD0.c b/src/audio/sfx.c
similarity index 92%
rename from src/code/audio/code_801A5BD0.c
rename to src/audio/sfx.c
index d76970829..537a9f394 100644
--- a/src/code/audio/code_801A5BD0.c
+++ b/src/audio/sfx.c
@@ -102,8 +102,8 @@ void AudioSfx_MuteBanks(u16 muteMask) {
void AudioSfx_LowerBgmVolume(u8 channelIndex) {
sSfxChannelLowVolumeFlag |= (1 << channelIndex);
- Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, 2, 0x40, 0xF);
- Audio_SetVolumeScale(SEQ_PLAYER_BGM_SUB, 2, 0x40, 0xF);
+ AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_SFX, 0x40, 0xF);
+ AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_SUB, VOL_SCALE_INDEX_SFX, 0x40, 0xF);
}
/**
@@ -114,8 +114,8 @@ void AudioSfx_RestoreBgmVolume(u8 channelIndex) {
sSfxChannelLowVolumeFlag &= ((1 << channelIndex) ^ 0xFFFF);
if (sSfxChannelLowVolumeFlag == 0) {
- Audio_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, 2, 0x7F, 0xF);
- Audio_SetVolumeScale(SEQ_PLAYER_BGM_SUB, 2, 0x7F, 0xF);
+ AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_MAIN, VOL_SCALE_INDEX_SFX, 0x7F, 0xF);
+ AudioSeq_SetVolumeScale(SEQ_PLAYER_BGM_SUB, VOL_SCALE_INDEX_SFX, 0x7F, 0xF);
}
}
@@ -410,9 +410,8 @@ void AudioSfx_ChooseActiveSfx(u8 bankId) {
// If a "one-frame" sfx is still in "SFX_STATE_PLAYING_ONE_FRAME", then remove the sfx
} else if (!(gSfxBanks[bankId][entryIndex].sfxId & SFX_FLAG_MASK) &&
(gSfxBanks[bankId][entryIndex].state == SFX_STATE_PLAYING_ONE_FRAME)) {
- // CHAN_UPD_SCRIPT_IO (ioPort 0, force stop sfx in seq 0)
- AudioThread_QueueCmdS8(
- (0x6 << 24) | (SEQ_PLAYER_SFX << 16) | (gSfxBanks[bankId][entryIndex].channelIndex << 8), 0);
+ // ioPort 0, force stop sfx in seq 0
+ AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, gSfxBanks[bankId][entryIndex].channelIndex, 0, 0);
AudioSfx_RemoveBankEntry(bankId, entryIndex);
}
@@ -459,8 +458,8 @@ void AudioSfx_ChooseActiveSfx(u8 bankId) {
// If too far away and also playing, stop playing
if (entry->state == SFX_STATE_PLAYING) {
- // CHAN_UPD_SCRIPT_IO (ioPort 0, force stop sfx in seq 0)
- AudioThread_QueueCmdS8((0x6 << 24) | (SEQ_PLAYER_SFX << 16) | (entry->channelIndex << 8), 0);
+ // ioPort 0, force stop sfx in seq 0
+ AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, entry->channelIndex, 0, 0);
if (entry->sfxId & SFX_FLAG_MASK) {
AudioSfx_RemoveBankEntry(bankId, entryIndex);
entryIndex = k;
@@ -599,7 +598,7 @@ void AudioSfx_PlayActiveSfx(u8 bankId) {
// If entry is not empty
if (entryIndex != 0xFF) {
entry = &gSfxBanks[bankId][entryIndex];
- channel = gAudioContext.seqPlayers[SEQ_PLAYER_SFX].channels[sCurSfxPlayerChannelIndex];
+ channel = gAudioCtx.seqPlayers[SEQ_PLAYER_SFX].channels[sCurSfxPlayerChannelIndex];
if (entry->state == SFX_STATE_READY) {
// Initialize a sfx (new sfx request)
@@ -632,15 +631,11 @@ void AudioSfx_PlayActiveSfx(u8 bankId) {
// Calculate all the properties of sfx
AudioSfx_SetProperties(bankId, entryIndex, sCurSfxPlayerChannelIndex);
- // CHAN_UPD_SCRIPT_IO (ioPort 0, enable the sfx to play in seq 0)
- AudioThread_QueueCmdS8((0x6 << 24) | (SEQ_PLAYER_SFX << 16) | ((sCurSfxPlayerChannelIndex & 0xFF) << 8),
- 1);
+ // ioPort 0, enable the sfx to play in `NA_BGM_GENERAL_SFX`
+ AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, sCurSfxPlayerChannelIndex, 0, 1);
- // CHAN_UPD_SCRIPT_IO (ioPort 4, write the lower bits sfx index to seq 0 so it can find the right code
- // to execute)
- AudioThread_QueueCmdS8((0x6 << 24) | (SEQ_PLAYER_SFX << 16) |
- ((sCurSfxPlayerChannelIndex & 0xFF) << 8) | 4,
- entry->sfxId & 0xFF);
+ // ioPort 4, write the lower bits sfx index for `NA_BGM_GENERAL_SFX` to find the right code to execute
+ AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, sCurSfxPlayerChannelIndex, 4, entry->sfxId & 0xFF);
// If the sfx bank has more than 255 entries (greater than a u8 can store),
// then store the Id in upper and lower bits
@@ -656,11 +651,9 @@ void AudioSfx_PlayActiveSfx(u8 bankId) {
}
if (D_801D6608[bankId]) {
- // CHAN_UPD_SCRIPT_IO (ioPort 5, write the upper bits sfx index and a flag to seq 0, for banks with
- // > 0xFF entries)
- AudioThread_QueueCmdS8((0x6 << 24) | (SEQ_PLAYER_SFX << 16) |
- ((sCurSfxPlayerChannelIndex & 0xFF) << 8) | 5,
- ioPort5Data);
+ // ioPort 5, write the upper bits sfx index and a flag for `NA_BGM_GENERAL_SFX`,
+ // for banks with > 0xFF entries
+ AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, sCurSfxPlayerChannelIndex, 5, ioPort5Data);
}
// Update playing state
@@ -671,7 +664,7 @@ void AudioSfx_PlayActiveSfx(u8 bankId) {
// "one-frame" sfx
entry->state = SFX_STATE_PLAYING_ONE_FRAME;
}
- } else if ((u8)channel->soundScriptIO[1] == (u8)SEQ_IO_VAL_NONE) {
+ } else if ((u8)channel->seqScriptIO[1] == (u8)SEQ_IO_VAL_NONE) {
// Signal from seq 0 that the sfx is finished playing. Remove entry
AudioSfx_RemoveBankEntry(bankId, entryIndex);
} else if (entry->state == SFX_STATE_PLAYING_REFRESH) {
@@ -702,7 +695,7 @@ void AudioSfx_StopByBank(u8 bankId) {
while (entryIndex != 0xFF) {
entry = &gSfxBanks[bankId][entryIndex];
if (entry->state >= SFX_STATE_PLAYING_REFRESH) {
- AudioThread_QueueCmdS8((0x6 << 24) | (SEQ_PLAYER_SFX << 16) | ((entry->channelIndex & 0xFF) << 8), 0);
+ AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, entry->channelIndex, 0, 0);
}
if (entry->state != SFX_STATE_EMPTY) {
@@ -724,7 +717,7 @@ void AudioSfx_StopByPosAndBankImpl(u8 bankId, Vec3f* pos) {
entry = &gSfxBanks[bankId][entryIndex];
if (entry->posX == &pos->x) {
if (entry->state >= SFX_STATE_PLAYING_REFRESH) {
- AudioThread_QueueCmdS8((0x6 << 24) | (SEQ_PLAYER_SFX << 16) | ((entry->channelIndex & 0xFF) << 8), 0);
+ AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, entry->channelIndex, 0, 0);
}
if (entry->state != SFX_STATE_EMPTY) {
@@ -769,7 +762,7 @@ void AudioSfx_StopByPosAndId(Vec3f* pos, u16 sfxId) {
entry = &gSfxBanks[SFX_BANK(sfxId)][entryIndex];
if ((entry->posX == &pos->x) && (entry->sfxId == sfxId)) {
if (entry->state >= SFX_STATE_PLAYING_REFRESH) {
- AudioThread_QueueCmdS8((0x6 << 24) | (SEQ_PLAYER_SFX << 16) | ((entry->channelIndex & 0xFF) << 8), 0);
+ AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, entry->channelIndex, 0, 0);
}
if (entry->state != SFX_STATE_EMPTY) {
@@ -800,7 +793,7 @@ void AudioSfx_StopByTokenAndId(u8 token, u16 sfxId) {
entry = &gSfxBanks[SFX_BANK(sfxId)][entryIndex];
if ((entry->token == token) && (entry->sfxId == sfxId)) {
if (entry->state >= SFX_STATE_PLAYING_REFRESH) {
- AudioThread_QueueCmdS8((0x6 << 24) | (SEQ_PLAYER_SFX << 16) | ((entry->channelIndex & 0xFF) << 8), 0);
+ AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, entry->channelIndex, 0, 0);
}
if (entry->state != SFX_STATE_EMPTY) {
@@ -830,7 +823,7 @@ void AudioSfx_StopById(u32 sfxId) {
entry = &gSfxBanks[SFX_BANK(sfxId)][entryIndex];
if (entry->sfxId == sfxId) {
if (entry->state >= SFX_STATE_PLAYING_REFRESH) {
- AudioThread_QueueCmdS8((0x6 << 24) | (SEQ_PLAYER_SFX << 16) | ((entry->channelIndex & 0xFF) << 8), 0);
+ AUDIOCMD_CHANNEL_SET_IO(SEQ_PLAYER_SFX, entry->channelIndex, 0, 0);
}
if (entry->state != SFX_STATE_EMPTY) {
AudioSfx_RemoveBankEntry(SFX_BANK(sfxId), entryIndex);
@@ -847,7 +840,7 @@ void AudioSfx_StopById(u32 sfxId) {
}
void AudioSfx_ProcessRequests(void) {
- if (gAudioContext.seqPlayers[SEQ_PLAYER_SFX].enabled) {
+ if (gAudioCtx.seqPlayers[SEQ_PLAYER_SFX].enabled) {
while (sSfxRequestWriteIndex != sSfxRequestReadIndex) {
AudioSfx_ProcessRequest();
sSfxRequestReadIndex++;
@@ -886,7 +879,7 @@ void AudioSfx_StepBankLerp(u8 bankId) {
void AudioSfx_ProcessActiveSfx(void) {
u8 bankId;
- if (gAudioContext.seqPlayers[SEQ_PLAYER_SFX].enabled) {
+ if (gAudioCtx.seqPlayers[SEQ_PLAYER_SFX].enabled) {
sCurSfxPlayerChannelIndex = 0;
for (bankId = 0; bankId < ARRAY_COUNT(gSfxBanks); bankId++) {
diff --git a/src/code/audio/audio_sfx_params.c b/src/audio/sfx_params.c
similarity index 100%
rename from src/code/audio/audio_sfx_params.c
rename to src/audio/sfx_params.c
diff --git a/src/audio/voice_external.c b/src/audio/voice_external.c
new file mode 100644
index 000000000..eba2069d8
--- /dev/null
+++ b/src/audio/voice_external.c
@@ -0,0 +1,17 @@
+#include "global.h"
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/voice_external/func_801A4EB0.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/voice_external/func_801A4EB8.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/voice_external/func_801A4FD8.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/voice_external/func_801A5080.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/voice_external/func_801A50C0.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/voice_external/func_801A5100.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/voice_external/func_801A510C.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/voice_external/func_801A5118.s")
diff --git a/src/audio/voice_internal.c b/src/audio/voice_internal.c
new file mode 100644
index 000000000..055b66ed1
--- /dev/null
+++ b/src/audio/voice_internal.c
@@ -0,0 +1,42 @@
+#include "global.h"
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/voice_internal/D_801E0EC0.s")
+
+UNK_TYPE func_801A51F0(UNK_TYPE arg0) {
+ switch (arg0) {
+ case 1:
+ case 4:
+ case 5:
+ case 11:
+ case 13:
+ case 14:
+ case 15:
+ return -1;
+ default:
+ return 0;
+ }
+}
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/voice_internal/func_801A5228.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/voice_internal/func_801A5390.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/voice_internal/func_801A53DC.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/voice_internal/func_801A53E8.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/voice_internal/func_801A541C.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/voice_internal/func_801A5488.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/voice_internal/func_801A54C4.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/voice_internal/func_801A54D0.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/voice_internal/func_801A5680.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/voice_internal/func_801A5808.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/voice_internal/AudioVoice_ResetData.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/voice_internal/func_801A5A1C.s")
diff --git a/src/boot_O2/stackcheck.c b/src/boot_O2/stackcheck.c
index 20e56f480..edd1e3a30 100644
--- a/src/boot_O2/stackcheck.c
+++ b/src/boot_O2/stackcheck.c
@@ -1,18 +1,19 @@
-#include "global.h"
+#include "stackcheck.h"
+#include "libc/stdbool.h"
+#include "libc/stdint.h"
StackEntry* sStackInfoListStart = NULL;
StackEntry* sStackInfoListEnd = NULL;
-void StackCheck_Init(StackEntry* entry, void* stackTop, void* stackBottom, u32 initValue, s32 minSpace,
+void StackCheck_Init(StackEntry* entry, void* stackBottom, void* stackTop, u32 initValue, s32 minSpace,
const char* name) {
- StackEntry* iter;
- u32* addr;
-
- if (!entry) {
+ if (entry == NULL) {
sStackInfoListStart = NULL;
} else {
- entry->head = (u32)stackTop;
- entry->tail = (u32)stackBottom;
+ StackEntry* iter;
+
+ entry->head = stackBottom;
+ entry->tail = stackTop;
entry->initValue = initValue;
entry->minSpace = minSpace;
entry->name = name;
@@ -32,13 +33,14 @@ void StackCheck_Init(StackEntry* entry, void* stackTop, void* stackBottom, u32 i
}
sStackInfoListEnd = entry;
- if (!sStackInfoListStart) {
+ if (sStackInfoListStart == NULL) {
sStackInfoListStart = entry;
}
if (entry->minSpace != -1) {
- addr = (u32*)entry->head;
- while ((u32)addr < entry->tail) {
+ u32* addr = entry->head;
+
+ while (addr < (u32*)entry->tail) {
*addr++ = entry->initValue;
}
}
@@ -46,13 +48,13 @@ void StackCheck_Init(StackEntry* entry, void* stackTop, void* stackBottom, u32 i
}
void StackCheck_Cleanup(StackEntry* entry) {
- u32 inconsistency = 0; // unused variable needed to match
+ u32 inconsistency = false;
- if (!entry->prev) {
+ if (entry->prev == NULL) {
if (entry == sStackInfoListStart) {
sStackInfoListStart = entry->next;
} else {
- inconsistency = 1;
+ inconsistency = true;
}
} else {
entry->prev->next = entry->next;
@@ -62,7 +64,7 @@ void StackCheck_Cleanup(StackEntry* entry) {
if (entry == sStackInfoListEnd) {
sStackInfoListEnd = entry->prev;
} else {
- inconsistency = 1;
+ inconsistency = true;
}
}
@@ -71,22 +73,22 @@ void StackCheck_Cleanup(StackEntry* entry) {
StackStatus StackCheck_GetState(StackEntry* entry) {
u32* last;
- u32 used;
- u32 free;
- s32 status;
+ size_t used;
+ size_t free;
+ StackStatus status;
- for (last = (u32*)entry->head; (u32)last < entry->tail; last++) {
+ for (last = entry->head; last < (u32*)entry->tail; last++) {
if (entry->initValue != *last) {
break;
}
}
- used = entry->tail - (u32)last;
- free = (u32)last - entry->head;
+ used = (uintptr_t)entry->tail - (uintptr_t)last;
+ free = (uintptr_t)last - (uintptr_t)entry->head;
if (free == 0) {
status = STACK_STATUS_OVERFLOW;
- } else if (free < (u32)entry->minSpace && entry->minSpace != -1) {
+ } else if ((free < (size_t)entry->minSpace) && (entry->minSpace != -1)) {
status = STACK_STATUS_WARNING;
} else {
status = STACK_STATUS_OK;
@@ -95,13 +97,14 @@ StackStatus StackCheck_GetState(StackEntry* entry) {
return status;
}
-u32 StackCheck_CheckAll() {
+u32 StackCheck_CheckAll(void) {
u32 ret = 0;
StackEntry* iter = sStackInfoListStart;
- while (iter) {
- u32 state = StackCheck_GetState(iter);
- if (state) {
+ while (iter != NULL) {
+ StackStatus state = StackCheck_GetState(iter);
+
+ if (state != STACK_STATUS_OK) {
ret = 1;
}
iter = iter->next;
@@ -111,7 +114,7 @@ u32 StackCheck_CheckAll() {
}
u32 StackCheck_Check(StackEntry* entry) {
- if (!entry) {
+ if (entry == NULL) {
return StackCheck_CheckAll();
} else {
return StackCheck_GetState(entry);
diff --git a/src/boot_O2_g3/CIC6105.c b/src/boot_O2_g3/CIC6105.c
index 78eed1a77..4745ad5c8 100644
--- a/src/boot_O2_g3/CIC6105.c
+++ b/src/boot_O2_g3/CIC6105.c
@@ -1,3 +1,4 @@
+#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 04bb9a33a..6a561992b 100644
--- a/src/boot_O2_g3/boot_main.c
+++ b/src/boot_O2_g3/boot_main.c
@@ -1,20 +1,22 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
+#include "stack.h"
+#include "stackcheck.h"
-StackEntry sBootThreadInfo;
+StackEntry sBootStackInfo;
OSThread sIdleThread;
-u8 sIdleThreadStack[0x400];
-StackEntry sIdleThreadInfo;
-u8 sBootThreadStack[0x400];
+STACK(sIdleStack, 0x400);
+StackEntry sIdleStackInfo;
+STACK(sBootStack, 0x400);
void bootproc(void) {
- StackCheck_Init(&sBootThreadInfo, sBootThreadStack, sBootThreadStack + sizeof(sBootThreadStack), 0, -1, "boot");
+ StackCheck_Init(&sBootStackInfo, sBootStack, STACK_TOP(sBootStack), 0, -1, "boot");
osMemSize = osGetMemSize();
func_800818F4();
osInitialize();
osUnmapTLBAll();
gCartHandle = osCartRomInit();
- StackCheck_Init(&sIdleThreadInfo, sIdleThreadStack, sIdleThreadStack + sizeof(sIdleThreadStack), 0, 256, "idle");
- osCreateThread(&sIdleThread, Z_THREAD_ID_IDLE, Idle_ThreadEntry, NULL, sIdleThreadStack + sizeof(sIdleThreadStack),
- Z_PRIORITY_IDLE);
+ StackCheck_Init(&sIdleStackInfo, sIdleStack, STACK_TOP(sIdleStack), 0, 0x100, "idle");
+ osCreateThread(&sIdleThread, Z_THREAD_ID_IDLE, Idle_ThreadEntry, NULL, STACK_TOP(sIdleStack), Z_PRIORITY_IDLE);
osStartThread(&sIdleThread);
}
diff --git a/src/boot_O2_g3/fault.c b/src/boot_O2_g3/fault.c
index e648275b6..2c8f4a667 100644
--- a/src/boot_O2_g3/fault.c
+++ b/src/boot_O2_g3/fault.c
@@ -1,6 +1,15 @@
#include "ultra64.h"
#include "global.h"
+#include "stack.h"
#include "vt.h"
+#include "stackcheck.h"
+
+extern FaultThreadStruct* sFaultContext;
+extern f32 D_8009BE54;
+extern u32 faultCustomOptions;
+extern u32 faultCopyToLog;
+extern STACK(sFaultStack, 0x600);
+extern StackEntry sFaultStackInfo;
// data
const char* sCpuExceptions[] = {
@@ -759,9 +768,9 @@ void Fault_SetOptionsFromController3(void) {
}
if (faultCustomOptions) {
- graphPC = sGraphThread.context.pc;
- graphRA = sGraphThread.context.ra;
- graphSP = sGraphThread.context.sp;
+ graphPC = gGraphThread.context.pc;
+ graphRA = gGraphThread.context.ra;
+ graphSP = gGraphThread.context.sp;
if (CHECK_BTN_ALL(input3->cur.button, BTN_R)) {
static u32 faultCopyToLog;
@@ -793,8 +802,8 @@ void Fault_ThreadEntry(void* arg) {
u32 pad;
OSThread* faultedThread;
- osSetEventMesg(10, &sFaultContext->queue, (OSMesg)1);
- osSetEventMesg(12, &sFaultContext->queue, (OSMesg)2);
+ osSetEventMesg(OS_EVENT_CPU_BREAK, &sFaultContext->queue, (OSMesg)1);
+ osSetEventMesg(OS_EVENT_FAULT, &sFaultContext->queue, (OSMesg)2);
while (1) {
do {
osRecvMesg(&sFaultContext->queue, &msg, OS_MESG_BLOCK);
@@ -889,8 +898,8 @@ void Fault_Start(void) {
sFaultContext->faultActive = 0;
gFaultStruct.faultHandlerEnabled = 1;
osCreateMesgQueue(&sFaultContext->queue, sFaultContext->msg, ARRAY_COUNT(sFaultContext->msg));
- StackCheck_Init(&sFaultThreadInfo, sFaultStack, sFaultStack + sizeof(sFaultStack), 0, 0x100, "fault");
- osCreateThread(&sFaultContext->thread, 2, Fault_ThreadEntry, NULL, sFaultStack + sizeof(sFaultStack), 0x7F);
+ StackCheck_Init(&sFaultStackInfo, sFaultStack, STACK_TOP(sFaultStack), 0, 0x100, "fault");
+ osCreateThread(&sFaultContext->thread, 2, Fault_ThreadEntry, NULL, STACK_TOP(sFaultStack), 0x7F);
osStartThread(&sFaultContext->thread);
}
diff --git a/src/boot_O2_g3/idle.c b/src/boot_O2_g3/idle.c
index 942435fa7..6c63e2a70 100644
--- a/src/boot_O2_g3/idle.c
+++ b/src/boot_O2_g3/idle.c
@@ -1,4 +1,8 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
+#include "stack.h"
+#include "buffers.h"
+#include "stackcheck.h"
u8 D_80096B20 = 1;
vu8 gViConfigUseDefault = 1;
@@ -8,10 +12,10 @@ f32 gViConfigXScale = 1.0f;
f32 gViConfigYScale = 1.0f;
IrqMgr gIrqMgr;
-u8 sIrqMgrStack[0x500];
+STACK(sIrqMgrStack, 0x500);
StackEntry sIrqMgrStackInfo;
-OSThread gMainThread;
-u8 sMainStack[0x900];
+OSThread sMainThread;
+STACK(sMainStack, 0x900);
StackEntry sMainStackInfo;
OSMesg sPiMgrCmdBuff[50];
OSMesgQueue gPiMgrCmdQ;
@@ -70,8 +74,8 @@ void Idle_InitCodeAndMemory(void) {
}
void Main_ThreadEntry(void* arg) {
- StackCheck_Init(&sIrqMgrStackInfo, sIrqMgrStack, sIrqMgrStack + sizeof(sIrqMgrStack), 0, 0x100, "irqmgr");
- IrqMgr_Init(&gIrqMgr, &sIrqMgrStackInfo, Z_PRIORITY_IRQMGR, 1);
+ StackCheck_Init(&sIrqMgrStackInfo, sIrqMgrStack, STACK_TOP(sIrqMgrStack), 0, 0x100, "irqmgr");
+ IrqMgr_Init(&gIrqMgr, STACK_TOP(sIrqMgrStack), Z_PRIORITY_IRQMGR, 1);
DmaMgr_Start();
Idle_InitCodeAndMemory();
Main(arg);
@@ -107,10 +111,9 @@ void Idle_InitVideo(void) {
void Idle_ThreadEntry(void* arg) {
Idle_InitVideo();
osCreatePiManager(150, &gPiMgrCmdQ, sPiMgrCmdBuff, ARRAY_COUNT(sPiMgrCmdBuff));
- StackCheck_Init(&sMainStackInfo, sMainStack, sMainStack + sizeof(sMainStack), 0, 0x400, "main");
- osCreateThread(&gMainThread, Z_THREAD_ID_MAIN, Main_ThreadEntry, arg, sMainStack + sizeof(sMainStack),
- Z_PRIORITY_MAIN);
- osStartThread(&gMainThread);
+ StackCheck_Init(&sMainStackInfo, sMainStack, STACK_TOP(sMainStack), 0, 0x400, "main");
+ osCreateThread(&sMainThread, Z_THREAD_ID_MAIN, Main_ThreadEntry, arg, STACK_TOP(sMainStack), Z_PRIORITY_MAIN);
+ osStartThread(&sMainThread);
osSetThreadPri(NULL, 0);
do { } while (true); }
diff --git a/src/boot_O2_g3/irqmgr.c b/src/boot_O2_g3/irqmgr.c
index b100f209d..1f1e94ab4 100644
--- a/src/boot_O2_g3/irqmgr.c
+++ b/src/boot_O2_g3/irqmgr.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "stackcheck.h"
vs32 gIrqMgrResetStatus = 0;
volatile OSTime sIrqMgrResetTime = 0;
@@ -160,9 +161,9 @@ void IrqMgr_Init(IrqMgr* irqmgr, void* stack, OSPri pri, u8 retraceCount) {
irqmgr->lastPrenmiTime = 0;
osCreateMesgQueue(&irqmgr->irqQueue, (OSMesg*)irqmgr->irqBuffer, ARRAY_COUNT(irqmgr->irqBuffer));
- osSetEventMesg(0xE, &irqmgr->irqQueue, (OSMesg)0x29D);
+ osSetEventMesg(OS_EVENT_PRENMI, &irqmgr->irqQueue, (OSMesg)0x29D);
osViSetEvent(&irqmgr->irqQueue, (OSMesg)0x29A, retraceCount);
- osCreateThread(&irqmgr->thread, Z_THREAD_ID_IRQMGR, (osCreateThread_func)IrqMgr_ThreadEntry, irqmgr, stack, pri);
+ osCreateThread(&irqmgr->thread, Z_THREAD_ID_IRQMGR, IrqMgr_ThreadEntry, irqmgr, stack, pri);
osStartThread(&irqmgr->thread);
}
diff --git a/src/boot_O2_g3/yaz0.c b/src/boot_O2_g3/yaz0.c
index 63260e885..3517b97ae 100644
--- a/src/boot_O2_g3/yaz0.c
+++ b/src/boot_O2_g3/yaz0.c
@@ -1,4 +1,3 @@
-#include "prevent_bss_reordering.h"
#include "global.h"
u8 sYaz0DataBuffer[0x400];
@@ -6,7 +5,7 @@ u8* sYaz0CurDataEnd;
uintptr_t sYaz0CurRomStart;
u32 sYaz0CurSize;
u8* sYaz0MaxPtr;
-u8* D_8009BE20;
+void* gYaz0DecompressDstEnd;
void* Yaz0_FirstDMA() {
u32 pad0;
@@ -118,7 +117,7 @@ s32 Yaz0_DecompressImpl(u8* src, u8* dst) {
bitIdx--;
} while (dst != dstEnd);
- D_8009BE20 = dstEnd;
+ gYaz0DecompressDstEnd = dstEnd;
return 0;
}
diff --git a/src/boot_O2_g3/z_std_dma.c b/src/boot_O2_g3/z_std_dma.c
index 8e9d83872..bbf8e4bed 100644
--- a/src/boot_O2_g3/z_std_dma.c
+++ b/src/boot_O2_g3/z_std_dma.c
@@ -1,5 +1,6 @@
-#include "prevent_bss_reordering.h"
#include "global.h"
+#include "stack.h"
+#include "stackcheck.h"
u32 sDmaMgrDmaBuffSize = 0x2000;
@@ -8,7 +9,7 @@ u16 numDmaEntries;
OSMesgQueue sDmaMgrMsgQueue;
OSMesg sDmaMgrMsgs[32];
OSThread sDmaMgrThread;
-u8 sDmaMgrStack[0x500];
+STACK(sDmaMgrStack, 0x500);
s32 DmaMgr_DmaRomToRam(uintptr_t rom, void* ram, size_t size) {
OSIoMesg ioMsg;
@@ -226,8 +227,8 @@ void DmaMgr_Start(void) {
}
osCreateMesgQueue(&sDmaMgrMsgQueue, sDmaMgrMsgs, ARRAY_COUNT(sDmaMgrMsgs));
- StackCheck_Init(&sDmaMgrStackInfo, sDmaMgrStack, sDmaMgrStack + sizeof(sDmaMgrStack), 0, 0x100, "dmamgr");
- osCreateThread(&sDmaMgrThread, Z_THREAD_ID_DMAMGR, DmaMgr_ThreadEntry, NULL, sDmaMgrStack + sizeof(sDmaMgrStack),
+ StackCheck_Init(&sDmaMgrStackInfo, sDmaMgrStack, STACK_TOP(sDmaMgrStack), 0, 0x100, "dmamgr");
+ osCreateThread(&sDmaMgrThread, Z_THREAD_ID_DMAMGR, DmaMgr_ThreadEntry, NULL, STACK_TOP(sDmaMgrStack),
Z_PRIORITY_DMAMGR);
osStartThread(&sDmaMgrThread);
diff --git a/src/buffers/gfxpools.c b/src/buffers/gfxpools.c
index a91c87bed..ff4934f11 100644
--- a/src/buffers/gfxpools.c
+++ b/src/buffers/gfxpools.c
@@ -1,3 +1,3 @@
-#include "global.h"
+#include "buffers.h"
GfxPool gGfxPools[2];
diff --git a/src/buffers/gfxstack.c b/src/buffers/gfxstack.c
index 2b158d141..8864d58ef 100644
--- a/src/buffers/gfxstack.c
+++ b/src/buffers/gfxstack.c
@@ -1,3 +1,3 @@
-#include "global.h"
+#include "buffers.h"
-u8 gGfxSPTaskStack[0x400];
+STACK(gGfxSPTaskStack, 0x400);
diff --git a/src/buffers/gfxyield.c b/src/buffers/gfxyield.c
index 94a5f55c9..576cfc0bb 100644
--- a/src/buffers/gfxyield.c
+++ b/src/buffers/gfxyield.c
@@ -1,4 +1,3 @@
-#include "prevent_bss_reordering.h"
-#include "global.h"
+#include "buffers.h"
u8 gGfxSPTaskYieldBuffer[OS_YIELD_DATA_SIZE];
diff --git a/src/buffers/heaps.c b/src/buffers/heaps.c
index 866d51c16..477eca03e 100644
--- a/src/buffers/heaps.c
+++ b/src/buffers/heaps.c
@@ -1,4 +1,4 @@
-#include "global.h"
+#include "buffers.h"
u8 gAudioHeap[0x138000];
diff --git a/src/code/PreRender.c b/src/code/PreRender.c
index 46fd8ee6b..172659cf7 100644
--- a/src/code/PreRender.c
+++ b/src/code/PreRender.c
@@ -1,4 +1,7 @@
#include "global.h"
+#include "slowly.h"
+#include "stack.h"
+#include "stackcheck.h"
/**
* Assigns the "save" values in PreRender
@@ -51,8 +54,8 @@ void func_8016FDB8(PreRender* this, Gfx** gfxp, void* buf, void* bufSave, u32 ar
flags = 0x1C;
}
- func_80172758(&gfx, buf, NULL, this->width, this->height, G_IM_FMT_RGBA, G_IM_SIZ_16b, G_TT_NONE, 0, 0.0f, 0.0f,
- 1.0f, 1.0f, flags);
+ Prerender_DrawBackground2D(&gfx, buf, NULL, this->width, this->height, G_IM_FMT_RGBA, G_IM_SIZ_16b, G_TT_NONE, 0,
+ 0.0f, 0.0f, 1.0f, 1.0f, flags);
gDPPipeSync(gfx++);
gDPSetColorImage(gfx++, G_IM_FMT_RGBA, G_IM_SIZ_16b, this->width, this->fbuf);
@@ -87,8 +90,8 @@ void func_8016FF90(PreRender* this, Gfx** gfxp, void* buf, void* bufSave, s32 en
gDPSetScissor(gfx++, G_SC_NON_INTERLACE, 0, 0, this->width, this->height);
- func_80172758(&gfx, buf, 0, this->width, this->height, G_IM_FMT_RGBA, G_IM_SIZ_16b, G_TT_NONE, 0, 0.0f, 0.0f, 1.0f,
- 1.0f, 0xB);
+ Prerender_DrawBackground2D(&gfx, buf, 0, this->width, this->height, G_IM_FMT_RGBA, G_IM_SIZ_16b, G_TT_NONE, 0, 0.0f,
+ 0.0f, 1.0f, 1.0f, 0xB);
gDPPipeSync(gfx++);
gDPSetColorImage(gfx++, G_IM_FMT_RGBA, G_IM_SIZ_16b, this->width, this->fbuf);
@@ -229,14 +232,11 @@ void func_80170798(PreRender* this, Gfx** gfxp) {
gDPLoadMultiTile(gfx++, this->fbufSave, 0x0000, G_TX_RENDERTILE, G_IM_FMT_RGBA, G_IM_SIZ_16b, this->width,
this->height, uls, ult, lrs, lrt, 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);
- if (1) {}
gDPLoadMultiTile(gfx++, this->cvgSave, 0x0160, rtile, G_IM_FMT_I, G_IM_SIZ_8b, this->width, this->height,
uls, ult, lrs, lrt, 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);
//! FAKE
if (1) {}
- // The two if (1) {}'s above can be removed with do {} while(0) around macros
- if (1) {}
if (1) {}
gSPTextureRectangle(gfx++, uls << 2, ult << 2, (lrs + 1) << 2, (lrt + 1) << 2, G_TX_RENDERTILE, uls << 5,
ult << 5, 1 << 10, 1 << 10);
@@ -413,19 +413,24 @@ void PreRender_ApplyFilters(PreRender* this) {
}
}
+extern SlowlyMgr sSlowlyMgr;
+extern s32 D_801F6FC0;
+extern StackEntry sSlowlyStackInfo;
+extern STACK(sSlowlyStack, 0x1000);
+
/**
* Initializes `PreRender_ApplyFilters` onto a new "slowly" thread
*/
void PreRender_ApplyFiltersSlowlyInit(PreRender* this) {
if ((this->cvgSave != NULL) && (this->fbufSave != NULL)) {
if (D_801F6FC0) {
- StackCheck_Cleanup(&slowlyStackEntry);
- Slowly_Stop(&D_801F6E00);
+ StackCheck_Cleanup(&sSlowlyStackInfo);
+ Slowly_Destroy(&sSlowlyMgr);
}
this->unk_4D = 1;
- StackCheck_Init(&slowlyStackEntry, slowlyStack, &slowlyStack[4096], 0, 0x100, "slowly");
- Slowly_Start(&D_801F6E00, &D_801F7FE8, PreRender_ApplyFilters, this, NULL);
+ StackCheck_Init(&sSlowlyStackInfo, sSlowlyStack, STACK_TOP(sSlowlyStack), 0, 0x100, "slowly");
+ Slowly_Init(&sSlowlyMgr, STACK_TOP(sSlowlyStack), (void*)PreRender_ApplyFilters, this, NULL);
D_801F6FC0 = true;
}
}
@@ -435,8 +440,8 @@ void PreRender_ApplyFiltersSlowlyInit(PreRender* this) {
*/
void PreRender_ApplyFiltersSlowlyDestroy(PreRender* this) {
if (D_801F6FC0) {
- StackCheck_Cleanup(&slowlyStackEntry);
- Slowly_Stop(&D_801F6E00);
+ StackCheck_Cleanup(&sSlowlyStackInfo);
+ Slowly_Destroy(&sSlowlyMgr);
D_801F6FC0 = false;
}
}
@@ -450,8 +455,8 @@ void func_801720C4(PreRender* this) {
#pragma GLOBAL_ASM("asm/non_matchings/code/PreRender/func_801720FC.s")
-void func_80172758(Gfx** gfxp, void* timg, void* tlut, u16 width, u16 height, u8 fmt, u8 siz, u16 tt, u16 arg8, f32 x,
- f32 y, f32 xScale, f32 yScale, u32 flags) {
+void Prerender_DrawBackground2D(Gfx** gfxp, void* timg, void* tlut, u16 width, u16 height, u8 fmt, u8 siz, u16 tt,
+ u16 arg8, f32 x, f32 y, f32 xScale, f32 yScale, u32 flags) {
PreRenderParams params;
PreRenderParams* paramsp = ¶ms;
diff --git a/src/code/TwoHeadArena.c b/src/code/TwoHeadArena.c
index 83d5be3d1..a476c3d74 100644
--- a/src/code/TwoHeadArena.c
+++ b/src/code/TwoHeadArena.c
@@ -1,79 +1,136 @@
-#include "global.h"
+/**
+ * @file TwoHeadArena.c
+ *
+ * This file implements a simple general purpose double-ended stack allocator.
+ *
+ * A double-ended stack allocator accepts allocations at either the "head" or "tail" of its allotted memory region.
+ * While in general this type of allocator could accept deallocations on the most recently allocated block at either
+ * end, this implementation does not support any individual deallocations; the only provided way to deallocate anything
+ * is to reset the entire arena, deallocating everything. This scheme is most applicable to allocating similar data
+ * with identical lifetime.
+ */
+
+#include "tha.h"
+#include "alignment.h"
+#include "functions.h"
void* THA_GetHead(TwoHeadArena* tha) {
return tha->head;
}
-void THA_SetHead(TwoHeadArena* tha, void* start) {
- tha->head = start;
+void THA_SetHead(TwoHeadArena* tha, void* newHead) {
+ tha->head = newHead;
}
void* THA_GetTail(TwoHeadArena* tha) {
return tha->tail;
}
-void* THA_AllocStart(TwoHeadArena* tha, size_t size) {
+/**
+ * Allocates to the head of the Two Head Arena. The allocation will not have any alignment guarantees.
+ */
+void* THA_AllocHead(TwoHeadArena* tha, size_t size) {
void* start = tha->head;
- tha->head = (u32)tha->head + size;
+ tha->head = (u8*)tha->head + size;
return start;
}
-void* THA_AllocStart1(TwoHeadArena* tha) {
- return THA_AllocStart(tha, 1);
+void* THA_AllocHeadByte(TwoHeadArena* tha) {
+ return THA_AllocHead(tha, 1);
}
-void* THA_AllocEnd(TwoHeadArena* tha, size_t size) {
- u32 mask;
+/**
+ * Allocates to the tail end of the Two Head Arena. The allocation will be aligned based on the size of the allocation.
+ * All allocations of 16 bytes or more will be aligned to 16-bytes. Otherwise, the alignment will be the largest power
+ * of 2 for which the size is a multiple, in order to accommodate the alignment requirements of any data types that can
+ * fit within the allocation.
+ */
+void* THA_AllocTail(TwoHeadArena* tha, size_t size) {
+ uintptr_t mask;
if (size >= 0x10) {
- mask = ~0xF;
+ // Align 0x10 for allocations greater than 0x10
+ mask = ALIGN_MASK(0x10);
} else if (size & 1) {
- mask = -1;
+ // No alignment for odd sizes
+ mask = ALIGN_MASK(1);
} else if (size & 2) {
- mask = ~0x1;
+ // Align 2 for multiples of 2
+ mask = ALIGN_MASK(2);
} else if (size & 4) {
- mask = ~0x3;
+ // Align 4 for multiples of 4
+ mask = ALIGN_MASK(4);
+ } else if (size & 8) {
+ // Align 8 for multiples of 8
+ mask = ALIGN_MASK(8);
} else {
- mask = (size & 8) ? ~0x7 : -1;
+ mask = ALIGN_MASK(1);
}
- tha->tail = (((u32)tha->tail & mask) - size) & mask;
+ tha->tail = (void*)((((uintptr_t)tha->tail & mask) - size) & mask);
return tha->tail;
}
-void* THA_AllocEndAlign16(TwoHeadArena* tha, size_t size) {
- u32 mask = ~0xF;
+/**
+ * Allocates to the tail end of the Two Head Arena with guaranteed 16-byte alignment.
+ */
+void* THA_AllocTailAlign16(TwoHeadArena* tha, size_t size) {
+ uintptr_t mask = ALIGN_MASK(0x10);
- tha->tail = (((u32)tha->tail & mask) - size) & mask;
+ tha->tail = (void*)((((uintptr_t)tha->tail & mask) - size) & mask);
return tha->tail;
}
-void* THA_AllocEndAlign(TwoHeadArena* tha, size_t size, u32 mask) {
- tha->tail = (((u32)tha->tail & mask) - size) & mask;
+/**
+ * Allocates to the tail end of the Two Head Arena using the provided mask to align the allocated region.
+ *
+ * @param tha Arena to allocate to
+ * @param size Size of the allocation
+ * @param mask Mask to use to align the allocated region. To align to n-bytes where n is a power of 2, use the
+ * ALIGN_MASK(n) macro
+ *
+ * @return Pointer to the start of the allocated block
+ */
+void* THA_AllocTailAlign(TwoHeadArena* tha, size_t size, uintptr_t mask) {
+ tha->tail = (void*)((((uintptr_t)tha->tail & mask) - size) & mask);
return tha->tail;
}
-s32 THA_GetSize(TwoHeadArena* tha) {
- return (u32)tha->tail - (u32)tha->head;
+/**
+ * Gets the remaining size of the Two Head Arena
+ *
+ * @return Remaining size. A negative number indicates an overflow.
+ */
+s32 THA_GetRemaining(TwoHeadArena* tha) {
+ return (s32)((u8*)tha->tail - (u8*)tha->head);
}
+/**
+ * @return true if the Two Head Arena has overflowed, false otherwise
+ */
u32 THA_IsCrash(TwoHeadArena* tha) {
- return THA_GetSize(tha) < 0;
+ return THA_GetRemaining(tha) < 0;
}
-void THA_Init(TwoHeadArena* tha) {
- tha->head = tha->bufp;
- tha->tail = (u32)tha->bufp + tha->size;
+void THA_Reset(TwoHeadArena* tha) {
+ tha->head = tha->start;
+ tha->tail = (u8*)tha->start + tha->size;
}
-void THA_Ct(TwoHeadArena* tha, void* ptr, size_t size) {
+/**
+ * Creates a new Two Head Arena at `start` with available size `size`
+ */
+void THA_Init(TwoHeadArena* tha, void* start, size_t size) {
bzero(tha, sizeof(TwoHeadArena));
- tha->bufp = ptr;
+ tha->start = start;
tha->size = size;
- THA_Init(tha);
+ THA_Reset(tha);
}
-void THA_Dt(TwoHeadArena* tha) {
+/**
+ * Destroys the Two Head Arena, no further allocations are possible
+ */
+void THA_Destroy(TwoHeadArena* tha) {
bzero(tha, sizeof(TwoHeadArena));
}
diff --git a/src/code/TwoHeadGfxArena.c b/src/code/TwoHeadGfxArena.c
index 2f1629765..d40512efd 100644
--- a/src/code/TwoHeadGfxArena.c
+++ b/src/code/TwoHeadGfxArena.c
@@ -1,65 +1,105 @@
-#include "global.h"
+/**
+ * @file TwoHeadGfxArena.c
+ *
+ * This file implements a particular use of the double-ended stack allocator from TwoHeadArena.c for graphics data.
+ *
+ * Display list commands are allocated from the head while other graphics data such as matrices and vertices are
+ * allocated from the tail end.
+ *
+ * @see TwoHeadArena.c
+ */
-void THGA_Ct(TwoHeadGfxArena* thga, Gfx* start, size_t size) {
- THA_Ct((TwoHeadArena*)thga, start, size);
+#include "thga.h"
+#include "alignment.h"
+#include "functions.h"
+
+void THGA_Init(TwoHeadGfxArena* thga, void* start, size_t size) {
+ THA_Init(&thga->tha, start, size);
}
-void THGA_Dt(TwoHeadGfxArena* thga) {
- THA_Dt((TwoHeadArena*)thga);
+void THGA_Destroy(TwoHeadGfxArena* thga) {
+ THA_Destroy(&thga->tha);
}
u32 THGA_IsCrash(TwoHeadGfxArena* thga) {
- return THA_IsCrash((TwoHeadArena*)thga);
+ return THA_IsCrash(&thga->tha);
}
-void THGA_Init(TwoHeadGfxArena* thga) {
- THA_Init((TwoHeadArena*)thga);
+void THGA_Reset(TwoHeadGfxArena* thga) {
+ THA_Reset(&thga->tha);
}
-s32 THGA_GetSize(TwoHeadGfxArena* thga) {
- return THA_GetSize((TwoHeadArena*)thga);
+s32 THGA_GetRemaining(TwoHeadGfxArena* thga) {
+ return THA_GetRemaining(&thga->tha);
}
Gfx* THGA_GetHead(TwoHeadGfxArena* thga) {
- return THA_GetHead((TwoHeadArena*)thga);
+ return THA_GetHead(&thga->tha);
}
-void THGA_SetHead(TwoHeadGfxArena* thga, Gfx* start) {
- THA_SetHead((TwoHeadArena*)thga, start);
+void THGA_SetHead(TwoHeadGfxArena* thga, Gfx* newHead) {
+ THA_SetHead(&thga->tha, newHead);
}
-Gfx* THGA_GetTail(TwoHeadGfxArena* thga) {
- return THA_GetTail((TwoHeadArena*)thga);
+void* THGA_GetTail(TwoHeadGfxArena* thga) {
+ return THA_GetTail(&thga->tha);
}
-Gfx* THGA_AllocStartArray8(TwoHeadGfxArena* thga, u32 count) {
- return THA_AllocStart((TwoHeadArena*)thga, count * 8);
+/**
+ * Allocates a display list of `num` Gfx commands to the head of the Two Head Gfx Arena.
+ */
+Gfx* THGA_AllocDisplayList(TwoHeadGfxArena* thga, size_t num) {
+ return THA_AllocHead(&thga->tha, num * sizeof(Gfx));
}
-Gfx* THGA_AllocStart8(TwoHeadGfxArena* thga) {
- return THGA_AllocStartArray8(thga, 1);
+/**
+ * Allocates a single Gfx command to the head of the Two Head Gfx Arena.
+ */
+Gfx* THGA_AllocGfx(TwoHeadGfxArena* thga) {
+ return THGA_AllocDisplayList(thga, 1);
}
-Gfx* THGA_AllocStart8Wrapper(TwoHeadGfxArena* thga) {
- return THGA_AllocStart8(thga);
+/**
+ * Identical to `THGA_AllocGfx`
+ *
+ * @see THGA_AllocGfx
+ */
+Gfx* THGA_AllocGfx2(TwoHeadGfxArena* thga) {
+ return THGA_AllocGfx(thga);
}
-Gfx* THGA_AllocEnd(TwoHeadGfxArena* thga, size_t size) {
- return THA_AllocEnd((TwoHeadArena*)thga, size);
+/**
+ * Allocates to the end of the Two Head Gfx Arena. Intended for data complementary to the display lists such as
+ * matrices and vertices that are only needed for a single graphics task.
+ */
+void* THGA_AllocTail(TwoHeadGfxArena* thga, size_t size) {
+ return THA_AllocTail(&thga->tha, size);
}
-Gfx* THGA_AllocEndArray64(TwoHeadGfxArena* thga, u32 count) {
- return THGA_AllocEnd(thga, count * 0x40);
+/**
+ * Allocates `num` matrices to the tail end of the Two Head Gfx Arena.
+ */
+Mtx* THGA_AllocMtxArray(TwoHeadGfxArena* thga, size_t num) {
+ return THGA_AllocTail(thga, num * sizeof(Mtx));
}
-Gfx* THGA_AllocEnd64(TwoHeadGfxArena* thga) {
- return THGA_AllocEnd(thga, 0x40);
+/**
+ * Allocates a matrix to the tail end of the Two Head Gfx Arena.
+ */
+Mtx* THGA_AllocMtx(TwoHeadGfxArena* thga) {
+ return THGA_AllocTail(thga, sizeof(Mtx));
}
-Gfx* THGA_AllocEndArray16(TwoHeadGfxArena* thga, u32 count) {
- return THGA_AllocEnd(thga, count * 0x10);
+/**
+ * Allocates `num` vertices to the tail end of the Two Head Gfx Arena.
+ */
+Vtx* THGA_AllocVtxArray(TwoHeadGfxArena* thga, u32 num) {
+ return THGA_AllocTail(thga, num * sizeof(Vtx));
}
-Gfx* THGA_AllocEnd16(TwoHeadGfxArena* thga) {
- return THGA_AllocEnd(thga, 0x10);
+/**
+ * Allocates a vertex to the tail end of the Two Head Gfx Arena.
+ */
+Vtx* THGA_AllocVtx(TwoHeadGfxArena* thga) {
+ return THGA_AllocTail(thga, sizeof(Vtx));
}
diff --git a/src/code/audio/code_80192BE0.c b/src/code/audio/code_80192BE0.c
deleted file mode 100644
index e69f678ff..000000000
--- a/src/code/audio/code_80192BE0.c
+++ /dev/null
@@ -1,81 +0,0 @@
-#include "global.h"
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80192BE0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80192C00.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_8019319C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_801936D8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_8019372C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193774.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_8019380C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193858.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/AudioThread_QueueCmdS32.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/AudioThread_QueueCmdS8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_801938D0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/AudioThread_ScheduleProcessCmds.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193990.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_801939A8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193AEC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193BA0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193C04.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193C24.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193C5C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193CB4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193D08.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193DA4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193DF0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193E44.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193E6C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193E9C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80193EA8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80194080.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_801942BC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80194304.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80194328.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_8019435C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_8019439C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_801943D0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_8019440C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80194528.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80194548.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/func_80194568.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/AudioThread_NextRandom.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_80192BE0/AudioThread_InitMesgQueues.s")
diff --git a/src/code/audio/code_801A4EB0.c b/src/code/audio/code_801A4EB0.c
deleted file mode 100644
index d3461c8f5..000000000
--- a/src/code/audio/code_801A4EB0.c
+++ /dev/null
@@ -1,17 +0,0 @@
-#include "global.h"
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A4EB0/func_801A4EB0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A4EB0/func_801A4EB8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A4EB0/func_801A4FD8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A4EB0/func_801A5080.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A4EB0/func_801A50C0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A4EB0/func_801A5100.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A4EB0/func_801A510C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A4EB0/func_801A5118.s")
diff --git a/src/code/audio/code_801A51F0.c b/src/code/audio/code_801A51F0.c
deleted file mode 100644
index 6a40bf23a..000000000
--- a/src/code/audio/code_801A51F0.c
+++ /dev/null
@@ -1,42 +0,0 @@
-#include "global.h"
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A51F0/D_801E0EC0.s")
-
-UNK_TYPE func_801A51F0(UNK_TYPE arg0) {
- switch (arg0) {
- case 1:
- case 4:
- case 5:
- case 11:
- case 13:
- case 14:
- case 15:
- return -1;
- default:
- return 0;
- }
-}
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A51F0/func_801A5228.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A51F0/func_801A5390.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A51F0/func_801A53DC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A51F0/func_801A53E8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A51F0/func_801A541C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A51F0/func_801A5488.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A51F0/func_801A54C4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A51F0/func_801A54D0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A51F0/func_801A5680.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A51F0/func_801A5808.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A51F0/func_801A5A10.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A51F0/func_801A5A1C.s")
diff --git a/src/code/audio/code_801A7B10.c b/src/code/audio/code_801A7B10.c
deleted file mode 100644
index 3f8446036..000000000
--- a/src/code/audio/code_801A7B10.c
+++ /dev/null
@@ -1,31 +0,0 @@
-#include "global.h"
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A7B10/Audio_StartSequence.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A7B10/Audio_StopSequence.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A7B10/func_801A7D84.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A7B10/Audio_QueueSeqCmd.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A7B10/func_801A89D0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A7B10/Audio_GetActiveSequence.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A7B10/func_801A8ABC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A7B10/func_801A8B14.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A7B10/func_801A8B2C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A7B10/Audio_SetVolumeScale.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A7B10/func_801A8D5C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A7B10/func_801A9768.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A7B10/func_801A982C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A7B10/func_801A99B8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801A7B10/func_801A9A74.s")
diff --git a/src/code/code_80172BC0.c b/src/code/audio_stop_all_sfx.c
similarity index 100%
rename from src/code/code_80172BC0.c
rename to src/code/audio_stop_all_sfx.c
diff --git a/src/code/audioMgr.c b/src/code/audio_thread_manager.c
similarity index 98%
rename from src/code/audioMgr.c
rename to src/code/audio_thread_manager.c
index ce21bda37..45fbcb87e 100644
--- a/src/code/audioMgr.c
+++ b/src/code/audio_thread_manager.c
@@ -39,7 +39,7 @@ void AudioMgr_HandleRetrace(AudioMgr* audioMgr) {
if (SREG(20) >= 2) {
rspTask = NULL;
} else {
- rspTask = func_80192BE0();
+ rspTask = AudioThread_Update();
}
if (audioMgr->rspTask != NULL) {
@@ -80,7 +80,7 @@ void AudioMgr_ThreadEntry(void* arg) {
Audio_Init();
AudioLoad_SetDmaHandler(DmaMgr_DmaHandler);
- func_801A4D00();
+ Audio_InitSound();
osSendMesg(&audioMgr->lockMsgQ, NULL, OS_MESG_BLOCK);
IrqMgr_AddClient(audioMgr->irqMgr, &irqClient, &audioMgr->interruptMsgQ);
diff --git a/src/code/code_800E8EA0.c b/src/code/code_800E8EA0.c
index 7485f2d3a..4ab38fcba 100644
--- a/src/code/code_800E8EA0.c
+++ b/src/code/code_800E8EA0.c
@@ -1,7 +1,7 @@
#include "global.h"
void Actor_ContinueText(PlayState* play, Actor* actor, u16 textId) {
- func_80151938(play, textId);
+ Message_ContinueTextbox(play, textId);
actor->textId = textId;
}
@@ -85,7 +85,7 @@ s32 Actor_TrackPlayerSetFocusHeight(PlayState* play, Actor* actor, Vec3s* headRo
actor->focus.pos = actor->world.pos;
actor->focus.pos.y += focusHeight;
- if (!((play->csCtx.state != 0) || gDbgCamEnabled)) {
+ if (!((play->csCtx.state != CS_STATE_IDLE) || gDbgCamEnabled)) {
yaw = ABS_ALT(BINANG_SUB(actor->yawTowardsPlayer, actor->shape.rot.y));
if (yaw >= 0x4300) {
Actor_TrackNone(headRot, torsoRot);
@@ -93,7 +93,7 @@ s32 Actor_TrackPlayerSetFocusHeight(PlayState* play, Actor* actor, Vec3s* headRo
}
}
- if ((play->csCtx.state != 0) || gDbgCamEnabled) {
+ if ((play->csCtx.state != CS_STATE_IDLE) || gDbgCamEnabled) {
target = play->view.eye;
} else {
target = player->actor.focus.pos;
@@ -127,7 +127,7 @@ s32 Actor_TrackPlayer(PlayState* play, Actor* actor, Vec3s* headRot, Vec3s* tors
actor->focus.pos = focusPos;
- if (!((play->csCtx.state != 0) || gDbgCamEnabled)) {
+ if (!((play->csCtx.state != CS_STATE_IDLE) || gDbgCamEnabled)) {
yaw = ABS_ALT(BINANG_SUB(actor->yawTowardsPlayer, actor->shape.rot.y));
if (yaw >= 0x4300) {
Actor_TrackNone(headRot, torsoRot);
@@ -135,7 +135,7 @@ s32 Actor_TrackPlayer(PlayState* play, Actor* actor, Vec3s* headRot, Vec3s* tors
}
}
- if ((play->csCtx.state != 0) || gDbgCamEnabled) {
+ if ((play->csCtx.state != CS_STATE_IDLE) || gDbgCamEnabled) {
target = play->view.eye;
} else {
target = player->actor.focus.pos;
diff --git a/src/code/code_8012EC80.c b/src/code/code_8012EC80.c
index eb70cfbc8..e10290356 100644
--- a/src/code/code_8012EC80.c
+++ b/src/code/code_8012EC80.c
@@ -472,9 +472,9 @@ u16 gSceneIdsPerRegion[REGION_MAX][27] = {
};
s32 Inventory_GetBtnBItem(PlayState* play) {
- if (gSaveContext.buttonStatus[0] == BTN_DISABLED) {
+ if (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) {
return ITEM_NONE;
- } else if (gSaveContext.unk_1015 == ITEM_NONE) {
+ } else if (gSaveContext.bButtonStatus == BTN_DISABLED) {
return ITEM_NONE;
} else if (CUR_FORM_EQUIP(EQUIP_SLOT_B) == ITEM_NONE) {
if (play->interfaceCtx.unk_21C != 0) {
@@ -511,12 +511,12 @@ u8 Inventory_DeleteEquipment(PlayState* play, s16 equipment) {
}
void Inventory_ChangeUpgrade(s16 upgrade, u32 value) {
- u32 upgrades = gSaveContext.save.inventory.upgrades;
+ u32 upgrades = gSaveContext.save.saveInfo.inventory.upgrades;
upgrades &= gUpgradeNegMasks[upgrade];
upgrades |= value << gUpgradeShifts[upgrade];
- gSaveContext.save.inventory.upgrades = upgrades;
+ gSaveContext.save.saveInfo.inventory.upgrades = upgrades;
}
s32 Inventory_IsMapVisible(s16 sceneId) {
@@ -543,7 +543,7 @@ s32 Inventory_IsMapVisible(s16 sceneId) {
}
}
- if (gSaveContext.save.scenesVisible[index] & gBitFlags[sceneId - (index << 5)]) {
+ if (gSaveContext.save.saveInfo.scenesVisible[index] & gBitFlags[sceneId - (index << 5)]) {
return true;
}
@@ -656,23 +656,23 @@ void Inventory_SetWorldMapCloudVisibility(s16 tingleIndex) {
index = 6;
}
- gSaveContext.save.scenesVisible[index] =
- gSaveContext.save.scenesVisible[index] | gBitFlags[(s16)(*tingleMapSceneIds)[i] - (index << 5)];
+ gSaveContext.save.saveInfo.scenesVisible[index] = gSaveContext.save.saveInfo.scenesVisible[index] |
+ gBitFlags[(s16)(*tingleMapSceneIds)[i] - (index << 5)];
i++;
}
- if ((*tingleMapSceneIds) == sSceneIdsPerTingleMap[0]) {
- gSaveContext.save.worldMapCloudVisibility |= 3;
- } else if ((*tingleMapSceneIds) == sSceneIdsPerTingleMap[1]) {
- gSaveContext.save.worldMapCloudVisibility |= 0x1C;
- } else if ((*tingleMapSceneIds) == sSceneIdsPerTingleMap[2]) {
- gSaveContext.save.worldMapCloudVisibility |= 0xE0;
- } else if ((*tingleMapSceneIds) == sSceneIdsPerTingleMap[3]) {
- gSaveContext.save.worldMapCloudVisibility |= 0x100;
- } else if ((*tingleMapSceneIds) == sSceneIdsPerTingleMap[4]) {
- gSaveContext.save.worldMapCloudVisibility |= 0x1E00;
- } else if ((*tingleMapSceneIds) == sSceneIdsPerTingleMap[5]) {
- gSaveContext.save.worldMapCloudVisibility |= 0x6000;
+ if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_CLOCK_TOWN]) {
+ gSaveContext.save.saveInfo.worldMapCloudVisibility |= 3;
+ } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_WOODFALL]) {
+ gSaveContext.save.saveInfo.worldMapCloudVisibility |= 0x1C;
+ } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_SNOWHEAD]) {
+ gSaveContext.save.saveInfo.worldMapCloudVisibility |= 0xE0;
+ } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_ROMANI_RANCH]) {
+ gSaveContext.save.saveInfo.worldMapCloudVisibility |= 0x100;
+ } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_GREAT_BAY]) {
+ gSaveContext.save.saveInfo.worldMapCloudVisibility |= 0x1E00;
+ } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_STONE_TOWER]) {
+ gSaveContext.save.saveInfo.worldMapCloudVisibility |= 0x6000;
}
}
@@ -685,34 +685,34 @@ void Inventory_SetWorldMapCloudVisibility(s16 tingleIndex) {
void Inventory_SaveDekuPlaygroundHighScore(s16 timerId) {
s16 i;
- gSaveContext.save.dekuPlaygroundHighScores[CURRENT_DAY - 1] = gSaveContext.timerCurTimes[timerId];
+ gSaveContext.save.saveInfo.dekuPlaygroundHighScores[CURRENT_DAY - 1] = gSaveContext.timerCurTimes[timerId];
for (i = 0; i < 8; i++) {
- gSaveContext.save.inventory.dekuPlaygroundPlayerName[CURRENT_DAY - 1][i] =
- gSaveContext.save.playerData.playerName[i];
+ gSaveContext.save.saveInfo.inventory.dekuPlaygroundPlayerName[CURRENT_DAY - 1][i] =
+ gSaveContext.save.saveInfo.playerData.playerName[i];
}
}
void Inventory_IncrementSkullTokenCount(s16 sceneIndex) {
if (sceneIndex == SCENE_KINSTA1) {
// Swamp Spider House (increment high bits of skullTokenCount)
- gSaveContext.save.skullTokenCount =
- ((u16)(((gSaveContext.save.skullTokenCount & 0xFFFF0000) >> 0x10) + 1) << 0x10) |
- (gSaveContext.save.skullTokenCount & 0xFFFF);
+ gSaveContext.save.saveInfo.skullTokenCount =
+ ((u16)(((gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF0000) >> 0x10) + 1) << 0x10) |
+ (gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF);
} else {
// Ocean Spider House (increment low bits of skullTokenCount)
- gSaveContext.save.skullTokenCount =
- (((u16)gSaveContext.save.skullTokenCount + 1) & 0xFFFF) | (gSaveContext.save.skullTokenCount & 0xFFFF0000);
+ gSaveContext.save.saveInfo.skullTokenCount = (((u16)gSaveContext.save.saveInfo.skullTokenCount + 1) & 0xFFFF) |
+ (gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF0000);
}
}
s16 Inventory_GetSkullTokenCount(s16 sceneIndex) {
if (sceneIndex == SCENE_KINSTA1) {
// Swamp Spider House
- return (gSaveContext.save.skullTokenCount & 0xFFFF0000) >> 0x10;
+ return (gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF0000) >> 0x10;
} else {
// Ocean Spider House
- return gSaveContext.save.skullTokenCount & 0xFFFF;
+ return gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF;
}
}
@@ -722,6 +722,6 @@ void Inventory_SaveLotteryCodeGuess(PlayState* play) {
lotteryCodeGuess = ((play->msgCtx.unk12054[0] & 0xF) << 8); // First Digit
lotteryCodeGuess |= ((play->msgCtx.unk12054[1] & 0xF) << 4); // Second Digit
lotteryCodeGuess |= (play->msgCtx.unk12054[2] & 0xF); // Third Digit
- gSaveContext.save.lotteryCodeGuess =
- (gSaveContext.save.lotteryCodeGuess & 0xFFFF0000) | (lotteryCodeGuess & 0xFFFF);
+ gSaveContext.save.saveInfo.lotteryCodeGuess =
+ (gSaveContext.save.saveInfo.lotteryCodeGuess & 0xFFFF0000) | (lotteryCodeGuess & 0xFFFF);
}
diff --git a/src/code/code_80140CE0.c b/src/code/code_80140CE0.c
new file mode 100644
index 000000000..f3d487fab
--- /dev/null
+++ b/src/code/code_80140CE0.c
@@ -0,0 +1,7 @@
+#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/code_801420C0.c b/src/code/code_801420C0.c
deleted file mode 100644
index 63c96571e..000000000
--- a/src/code/code_801420C0.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include "global.h"
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801420C0/func_801420C0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801420C0/func_801420F4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_801420C0/func_80142100.s")
diff --git a/src/code/cutscene_camera.c b/src/code/cutscene_camera.c
new file mode 100644
index 000000000..d5f028b94
--- /dev/null
+++ b/src/code/cutscene_camera.c
@@ -0,0 +1,380 @@
+#include "global.h"
+
+extern CutsceneCamera* sCurCsCamera;
+
+typedef s16 (*CsCamInterpolateCallback)(Vec3f*, f32*, s16*, CsCmdCamPoint*, CsCmdCamMisc*, CutsceneCameraInterp*);
+
+// function declarations
+s16 func_80161180(Vec3f* pos, f32* fov, s16* roll, CsCmdCamPoint* point, CsCmdCamMisc* misc,
+ CutsceneCameraInterp* interp);
+s16 func_8016237C(Vec3f* pos, f32* fov, s16* roll, CsCmdCamPoint* point, CsCmdCamMisc* misc,
+ CutsceneCameraInterp* interp);
+s16 func_8016253C(Vec3f* pos, f32* fov, s16* roll, CsCmdCamPoint* point, CsCmdCamMisc* misc,
+ CutsceneCameraInterp* interp);
+s16 func_80162A50(Vec3f* pos, f32* fov, s16* roll, CsCmdCamPoint* point, CsCmdCamMisc* misc,
+ CutsceneCameraInterp* interp);
+s16 func_801623E4(Vec3f* pos, f32* fov, s16* roll, CsCmdCamPoint* point, CsCmdCamMisc* misc,
+ CutsceneCameraInterp* interp);
+s16 func_80161C20(Vec3f* pos, f32* fov, s16* roll, CsCmdCamPoint* point, CsCmdCamMisc* misc,
+ CutsceneCameraInterp* interp);
+s16 func_80161E4C(Vec3f* pos, f32* fov, s16* roll, CsCmdCamPoint* point, CsCmdCamMisc* misc,
+ CutsceneCameraInterp* interp);
+s16 func_801620CC(Vec3f* pos, f32* fov, s16* roll, CsCmdCamPoint* point, CsCmdCamMisc* misc,
+ CutsceneCameraInterp* interp);
+s16 func_80163334(Vec3f* pos, f32* fov, s16* roll, CsCmdCamPoint* point, CsCmdCamMisc* misc,
+ CutsceneCameraInterp* interp);
+f32 func_80163660(Actor* actor);
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_80161180.s")
+
+/**
+ * Initializes Cutscene Camera Info
+ */
+s32 CutsceneCamera_Init(Camera* camera, CutsceneCamera* csCamera) {
+ csCamera->camera = camera;
+
+ csCamera->nextSplineTimer = csCamera->updateSplineTimer = 0;
+ csCamera->cmdIndex = 0;
+ csCamera->splineIndex = 0xFFFF;
+ csCamera->splineNeedsInit = true;
+ csCamera->state = CS_CAM_STATE_UPDATE_ALL;
+
+ sCurCsCamera = csCamera;
+
+ __osMemset(&csCamera->eyeInterp, 0, sizeof(CutsceneCameraInterp));
+ __osMemset(&csCamera->atInterp, 0, sizeof(CutsceneCameraInterp));
+
+ csCamera->eyeInterp.unk_2D = csCamera->atInterp.unk_2D = 7;
+
+ return 1;
+}
+
+CsCamInterpolateCallback CutsceneCamera_Interpolate(u8 interpType) {
+ switch (interpType) {
+ case CS_CAM_INTERP_7:
+ default:
+ return func_80161180;
+
+ case CS_CAM_INTERP_0:
+ return func_8016237C;
+
+ case CS_CAM_INTERP_5:
+ return func_8016253C;
+
+ case CS_CAM_INTERP_4:
+ return func_80162A50;
+
+ case CS_CAM_INTERP_1:
+ return func_801623E4;
+
+ case CS_CAM_INTERP_2:
+ return func_80161C20;
+
+ case CS_CAM_INTERP_3:
+ return func_80161E4C;
+
+ case CS_CAM_INTERP_6:
+ return func_801620CC;
+ }
+}
+
+u8 CutsceneCamera_ProcessSpline(CutsceneCamera* csCamera) {
+ s32 sp5C;
+ f32* fov;
+ s16* roll;
+ CsCamInterpolateCallback interpHandler;
+ Player* player;
+ Actor* target;
+ s16 numPoints;
+
+ sp5C = true;
+ if (csCamera->state == CS_CAM_STATE_DONE_SPLINE) {
+ return false;
+ }
+
+ player = GET_PLAYER(csCamera->camera->play);
+ target = csCamera->camera->target;
+
+ if (csCamera->eyeCmd[csCamera->atInterp.curPoint].interpType <
+ csCamera->atCmd[csCamera->eyeInterp.curPoint].interpType) {
+ sp5C = false;
+ }
+
+ csCamera->eyeInterp.unk_00 = csCamera->camera->eye;
+ csCamera->atInterp.unk_00 = csCamera->camera->at;
+
+ if (sp5C) {
+ fov = NULL;
+ } else {
+ fov = &csCamera->camera->fov;
+ }
+
+ if (sp5C) {
+ roll = NULL;
+ } else {
+ roll = &csCamera->camera->roll;
+ }
+
+ interpHandler = CutsceneCamera_Interpolate(csCamera->atCmd[csCamera->eyeInterp.curPoint].interpType);
+
+ switch (csCamera->atCmd[csCamera->eyeInterp.curPoint].relativeTo) {
+ case CS_CAM_REL_2:
+ OLib_DbCameraVec3fDiff(&player->actor.world, &csCamera->camera->at, &csCamera->camera->at, 2);
+ break;
+
+ case CS_CAM_REL_3:
+ OLib_DbCameraVec3fDiff(&player->actor.world, &csCamera->camera->at, &csCamera->camera->at, 1);
+ break;
+
+ case CS_CAM_REL_1:
+ OLib_DbCameraVec3fDiff(&player->actor.world, &csCamera->camera->at, &csCamera->camera->at, 1);
+ break;
+
+ case CS_CAM_REL_4:
+ OLib_DbCameraVec3fDiff(&target->world, &csCamera->camera->at, &csCamera->camera->at, 1);
+ break;
+
+ case CS_CAM_REL_5:
+ OLib_DbCameraVec3fDiff(&target->world, &csCamera->camera->at, &csCamera->camera->at, 2);
+ break;
+
+ default: // CS_CAM_REL_0
+ break;
+ }
+
+ numPoints = interpHandler(&csCamera->camera->at, fov, roll, &csCamera->atCmd[csCamera->eyeInterp.curPoint],
+ &csCamera->miscCmd[csCamera->eyeInterp.curPoint], &csCamera->eyeInterp);
+
+ switch (csCamera->atCmd[csCamera->eyeInterp.curPoint].relativeTo) {
+ case CS_CAM_REL_2:
+ OLib_DbCameraVec3fSum(&player->actor.world, &csCamera->camera->at, &csCamera->camera->at, 2);
+ break;
+
+ case CS_CAM_REL_3:
+ OLib_DbCameraVec3fSum(&player->actor.world, &csCamera->camera->at, &csCamera->camera->at, 1);
+ csCamera->camera->at.y += func_80163660(&player->actor);
+ break;
+
+ case CS_CAM_REL_1:
+ OLib_DbCameraVec3fSum(&player->actor.world, &csCamera->camera->at, &csCamera->camera->at, 1);
+ break;
+
+ case CS_CAM_REL_4:
+ OLib_DbCameraVec3fSum(&target->world, &csCamera->camera->at, &csCamera->camera->at, 1);
+ break;
+
+ case CS_CAM_REL_5:
+ OLib_DbCameraVec3fSum(&target->world, &csCamera->camera->at, &csCamera->camera->at, 2);
+ break;
+
+ default: // CS_CAM_REL_0
+ break;
+ }
+
+ csCamera->eyeInterp.curPoint += numPoints;
+
+ if (sp5C) {
+ fov = &csCamera->camera->fov;
+ } else {
+ fov = NULL;
+ }
+
+ if (sp5C) {
+ roll = &csCamera->camera->roll;
+ } else {
+ roll = NULL;
+ }
+
+ interpHandler = CutsceneCamera_Interpolate(csCamera->eyeCmd[csCamera->atInterp.curPoint].interpType);
+
+ switch (csCamera->eyeCmd[csCamera->atInterp.curPoint].relativeTo) {
+ case CS_CAM_REL_2:
+ OLib_DbCameraVec3fDiff(&player->actor.world, &csCamera->camera->eye, &csCamera->camera->eye, 2);
+ break;
+
+ case CS_CAM_REL_3:
+ OLib_DbCameraVec3fDiff(&player->actor.world, &csCamera->camera->eye, &csCamera->camera->eye, 1);
+ break;
+
+ case CS_CAM_REL_1:
+ OLib_DbCameraVec3fDiff(&player->actor.world, &csCamera->camera->eye, &csCamera->camera->eye, 1);
+ break;
+
+ case CS_CAM_REL_4:
+ OLib_DbCameraVec3fDiff(&target->world, &csCamera->camera->eye, &csCamera->camera->eye, 1);
+ break;
+
+ case CS_CAM_REL_5:
+ OLib_DbCameraVec3fDiff(&target->world, &csCamera->camera->eye, &csCamera->camera->eye, 2);
+ break;
+
+ default: // CS_CAM_REL_0
+ break;
+ }
+
+ numPoints = interpHandler(&csCamera->camera->eye, fov, roll, &csCamera->eyeCmd[csCamera->atInterp.curPoint],
+ &csCamera->miscCmd[csCamera->atInterp.curPoint], &csCamera->atInterp);
+
+ switch (csCamera->eyeCmd[csCamera->atInterp.curPoint].relativeTo) {
+ case CS_CAM_REL_2:
+ OLib_DbCameraVec3fSum(&player->actor.world, &csCamera->camera->eye, &csCamera->camera->eye, 2);
+ break;
+
+ case CS_CAM_REL_3:
+ OLib_DbCameraVec3fSum(&player->actor.world, &csCamera->camera->eye, &csCamera->camera->eye, 1);
+ csCamera->camera->eye.y += func_80163660(&player->actor);
+ break;
+
+ case CS_CAM_REL_1:
+ OLib_DbCameraVec3fSum(&player->actor.world, &csCamera->camera->eye, &csCamera->camera->eye, 1);
+ break;
+
+ case CS_CAM_REL_4:
+ OLib_DbCameraVec3fSum(&target->world, &csCamera->camera->eye, &csCamera->camera->eye, 1);
+ break;
+
+ case CS_CAM_REL_5:
+ OLib_DbCameraVec3fSum(&target->world, &csCamera->camera->eye, &csCamera->camera->eye, 2);
+ break;
+
+ default: // CS_CAM_REL_0
+ break;
+ }
+
+ csCamera->atInterp.curPoint += numPoints;
+
+ if ((csCamera->eyeInterp.curPoint >= csCamera->eyeInterp.numEntries) ||
+ (csCamera->atInterp.curPoint >= csCamera->atInterp.numEntries)) {
+ return false;
+ }
+
+ return true;
+}
+
+/**
+ * Processes camera cutscene commands
+ */
+s32 CutsceneCamera_UpdateSplines(u8* script, CutsceneCamera* csCamera) {
+ CsCmdCamSpline* spline;
+
+ switch (csCamera->state) {
+ case CS_CAM_STATE_DONE:
+ return 0;
+
+ case CS_CAM_STATE_PAUSE:
+ return csCamera->nextSplineTimer;
+
+ case CS_CAM_STATE_UPDATE_SPLINE:
+ if (csCamera->updateSplineTimer <= csCamera->duration) {
+ csCamera->updateSplineTimer++;
+ if (csCamera->updateSplineTimer <= csCamera->duration) {
+ // Process Spline
+ if (!CutsceneCamera_ProcessSpline(csCamera)) {
+ csCamera->state = CS_CAM_STATE_DONE_SPLINE;
+ }
+ }
+ }
+ break;
+
+ case CS_CAM_STATE_DONE_SPLINE:
+ break;
+
+ default: // CS_CAM_STATE_UPDATE_ALL
+ if (csCamera->splineNeedsInit == true) {
+ // Spline Header
+ spline = (CsCmdCamSpline*)&script[csCamera->cmdIndex];
+ csCamera->atInterp.numEntries = csCamera->eyeInterp.numEntries = spline->numEntries;
+ csCamera->duration = spline->duration;
+ csCamera->cmdIndex += sizeof(CsCmdCamSpline);
+
+ // At Point
+ csCamera->atCmd = (CsCmdCamPoint*)&script[csCamera->cmdIndex];
+ csCamera->cmdIndex += (s16)(csCamera->eyeInterp.numEntries * sizeof(CsCmdCamPoint));
+
+ // Misc Point
+ csCamera->eyeCmd = (CsCmdCamPoint*)&script[csCamera->cmdIndex];
+ csCamera->cmdIndex += (s16)(csCamera->eyeInterp.numEntries * sizeof(CsCmdCamPoint));
+
+ // Misc
+ csCamera->miscCmd = (CsCmdCamMisc*)&script[csCamera->cmdIndex];
+ csCamera->cmdIndex += (s16)(csCamera->eyeInterp.numEntries * sizeof(CsCmdCamMisc));
+
+ // Other Params
+ csCamera->eyeInterp.curPoint = 0;
+ csCamera->atInterp.curPoint = 0;
+
+ csCamera->splineNeedsInit = false;
+ //! FAKE: csCamera->splineIndex++;
+ csCamera->splineIndex = (csCamera->splineIndex & 0xFFFF) + 1;
+ csCamera->state = CS_CAM_STATE_UPDATE_ALL;
+ csCamera->nextSplineTimer = csCamera->updateSplineTimer = 0;
+ csCamera->eyeInterp.unk_2D = csCamera->atInterp.unk_2D = 7;
+ }
+
+ csCamera->nextSplineTimer++;
+
+ if (csCamera->updateSplineTimer <= csCamera->duration) {
+ csCamera->updateSplineTimer++;
+ if (csCamera->updateSplineTimer <= csCamera->duration) {
+ // Process SubCommands
+ if (!CutsceneCamera_ProcessSpline(csCamera)) {
+ csCamera->state = CS_CAM_STATE_DONE_SPLINE;
+ }
+ }
+ }
+ break;
+ }
+
+ if (csCamera->nextSplineTimer > csCamera->duration) {
+ // Next Spline
+ csCamera->splineNeedsInit = true;
+ spline = (CsCmdCamSpline*)&script[csCamera->cmdIndex];
+ if (spline->numEntries == -1) {
+ csCamera->state = CS_CAM_STATE_DONE;
+ return 0;
+ }
+ }
+
+ return csCamera->nextSplineTimer;
+}
+
+// Unused
+s16 func_80161BAC(void) {
+ return (sCurCsCamera->state == CS_CAM_STATE_PAUSE) || (sCurCsCamera->state == CS_CAM_STATE_UPDATE_SPLINE);
+}
+
+void CutsceneCamera_SetState(s16 state) {
+ if (sCurCsCamera->state == CS_CAM_STATE_UPDATE_ALL) {
+ sCurCsCamera->state = state;
+ }
+}
+
+void CutsceneCamera_Reset(void) {
+ sCurCsCamera->state = CS_CAM_STATE_UPDATE_ALL;
+}
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_80161C20.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_80161E4C.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_801620CC.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_8016237C.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_801623E4.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_801624EC.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_8016253C.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_801629BC.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_80162A50.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_80162FF8.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_801631DC.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_80163334.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/cutscene_camera/func_80163660.s")
diff --git a/src/code/db_camera.c b/src/code/db_camera.c
deleted file mode 100644
index 92b6d87f9..000000000
--- a/src/code/db_camera.c
+++ /dev/null
@@ -1,43 +0,0 @@
-#include "global.h"
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_80161180.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_8016119C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_8016122C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_801612B8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_80161998.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_80161BAC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_80161BE0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_80161C0C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_80161C20.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_80161E4C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_801620CC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_8016237C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_801623E4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_801624EC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_8016253C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_801629BC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_80162A50.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_80162FF8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_801631DC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_80163334.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/db_camera/func_80163660.s")
diff --git a/src/code/flg_set.c b/src/code/flg_set.c
index a22b62a0e..bb25818a6 100644
--- a/src/code/flg_set.c
+++ b/src/code/flg_set.c
@@ -13,106 +13,106 @@
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
static FlagSetEntry sFlagEntries[] = {
- { &gSaveContext.save.weekEventReg[0], "week_event_reg[0]" },
- { &gSaveContext.save.weekEventReg[1], "week_event_reg[1]" },
- { &gSaveContext.save.weekEventReg[2], "week_event_reg[2]" },
- { &gSaveContext.save.weekEventReg[3], "week_event_reg[3]" },
- { &gSaveContext.save.weekEventReg[4], "week_event_reg[4]" },
- { &gSaveContext.save.weekEventReg[5], "week_event_reg[5]" },
- { &gSaveContext.save.weekEventReg[6], "week_event_reg[6]" },
- { &gSaveContext.save.weekEventReg[7], "week_event_reg[7]" },
- { &gSaveContext.save.weekEventReg[8], "week_event_reg[8]" },
- { &gSaveContext.save.weekEventReg[9], "week_event_reg[9]" },
- { &gSaveContext.save.weekEventReg[10], "week_event_reg[10]" },
- { &gSaveContext.save.weekEventReg[11], "week_event_reg[11]" },
- { &gSaveContext.save.weekEventReg[12], "week_event_reg[12]" },
- { &gSaveContext.save.weekEventReg[13], "week_event_reg[13]" },
- { &gSaveContext.save.weekEventReg[14], "week_event_reg[14]" },
- { &gSaveContext.save.weekEventReg[15], "week_event_reg[15]" },
- { &gSaveContext.save.weekEventReg[16], "week_event_reg[16]" },
- { &gSaveContext.save.weekEventReg[17], "week_event_reg[17]" },
- { &gSaveContext.save.weekEventReg[18], "week_event_reg[18]" },
- { &gSaveContext.save.weekEventReg[19], "week_event_reg[19]" },
- { &gSaveContext.save.weekEventReg[20], "week_event_reg[20]" },
- { &gSaveContext.save.weekEventReg[21], "week_event_reg[21]" },
- { &gSaveContext.save.weekEventReg[22], "week_event_reg[22]" },
- { &gSaveContext.save.weekEventReg[23], "week_event_reg[23]" },
- { &gSaveContext.save.weekEventReg[24], "week_event_reg[24]" },
- { &gSaveContext.save.weekEventReg[25], "week_event_reg[25]" },
- { &gSaveContext.save.weekEventReg[26], "week_event_reg[26]" },
- { &gSaveContext.save.weekEventReg[27], "week_event_reg[27]" },
- { &gSaveContext.save.weekEventReg[28], "week_event_reg[28]" },
- { &gSaveContext.save.weekEventReg[29], "week_event_reg[29]" },
- { &gSaveContext.save.weekEventReg[30], "week_event_reg[30]" },
- { &gSaveContext.save.weekEventReg[31], "week_event_reg[31]" },
- { &gSaveContext.save.weekEventReg[32], "week_event_reg[32]" },
- { &gSaveContext.save.weekEventReg[33], "week_event_reg[33]" },
- { &gSaveContext.save.weekEventReg[34], "week_event_reg[34]" },
- { &gSaveContext.save.weekEventReg[35], "week_event_reg[35]" },
- { &gSaveContext.save.weekEventReg[36], "week_event_reg[36]" },
- { &gSaveContext.save.weekEventReg[37], "week_event_reg[37]" },
- { &gSaveContext.save.weekEventReg[38], "week_event_reg[38]" },
- { &gSaveContext.save.weekEventReg[39], "week_event_reg[39]" },
- { &gSaveContext.save.weekEventReg[40], "week_event_reg[40]" },
- { &gSaveContext.save.weekEventReg[41], "week_event_reg[41]" },
- { &gSaveContext.save.weekEventReg[42], "week_event_reg[42]" },
- { &gSaveContext.save.weekEventReg[43], "week_event_reg[43]" },
- { &gSaveContext.save.weekEventReg[44], "week_event_reg[44]" },
- { &gSaveContext.save.weekEventReg[45], "week_event_reg[45]" },
- { &gSaveContext.save.weekEventReg[46], "week_event_reg[46]" },
- { &gSaveContext.save.weekEventReg[47], "week_event_reg[47]" },
- { &gSaveContext.save.weekEventReg[48], "week_event_reg[48]" },
- { &gSaveContext.save.weekEventReg[49], "week_event_reg[49]" },
- { &gSaveContext.save.weekEventReg[50], "week_event_reg[50]" },
- { &gSaveContext.save.weekEventReg[51], "week_event_reg[51]" },
- { &gSaveContext.save.weekEventReg[52], "week_event_reg[52]" },
- { &gSaveContext.save.weekEventReg[53], "week_event_reg[53]" },
- { &gSaveContext.save.weekEventReg[54], "week_event_reg[54]" },
- { &gSaveContext.save.weekEventReg[55], "week_event_reg[55]" },
- { &gSaveContext.save.weekEventReg[56], "week_event_reg[56]" },
- { &gSaveContext.save.weekEventReg[57], "week_event_reg[57]" },
- { &gSaveContext.save.weekEventReg[58], "week_event_reg[58]" },
- { &gSaveContext.save.weekEventReg[59], "week_event_reg[59]" },
- { &gSaveContext.save.weekEventReg[60], "week_event_reg[60]" },
- { &gSaveContext.save.weekEventReg[61], "week_event_reg[61]" },
- { &gSaveContext.save.weekEventReg[62], "week_event_reg[62]" },
- { &gSaveContext.save.weekEventReg[63], "week_event_reg[63]" },
- { &gSaveContext.save.weekEventReg[64], "week_event_reg[64]" },
- { &gSaveContext.save.weekEventReg[65], "week_event_reg[65]" },
- { &gSaveContext.save.weekEventReg[66], "week_event_reg[66]" },
- { &gSaveContext.save.weekEventReg[67], "week_event_reg[67]" },
- { &gSaveContext.save.weekEventReg[68], "week_event_reg[68]" },
- { &gSaveContext.save.weekEventReg[69], "week_event_reg[69]" },
- { &gSaveContext.save.weekEventReg[70], "week_event_reg[70]" },
- { &gSaveContext.save.weekEventReg[71], "week_event_reg[71]" },
- { &gSaveContext.save.weekEventReg[72], "week_event_reg[72]" },
- { &gSaveContext.save.weekEventReg[73], "week_event_reg[73]" },
- { &gSaveContext.save.weekEventReg[74], "week_event_reg[74]" },
- { &gSaveContext.save.weekEventReg[75], "week_event_reg[75]" },
- { &gSaveContext.save.weekEventReg[76], "week_event_reg[76]" },
- { &gSaveContext.save.weekEventReg[77], "week_event_reg[77]" },
- { &gSaveContext.save.weekEventReg[78], "week_event_reg[78]" },
- { &gSaveContext.save.weekEventReg[79], "week_event_reg[79]" },
- { &gSaveContext.save.weekEventReg[80], "week_event_reg[80]" },
- { &gSaveContext.save.weekEventReg[81], "week_event_reg[81]" },
- { &gSaveContext.save.weekEventReg[82], "week_event_reg[82]" },
- { &gSaveContext.save.weekEventReg[83], "week_event_reg[83]" },
- { &gSaveContext.save.weekEventReg[84], "week_event_reg[84]" },
- { &gSaveContext.save.weekEventReg[85], "week_event_reg[85]" },
- { &gSaveContext.save.weekEventReg[86], "week_event_reg[86]" },
- { &gSaveContext.save.weekEventReg[87], "week_event_reg[87]" },
- { &gSaveContext.save.weekEventReg[88], "week_event_reg[88]" },
- { &gSaveContext.save.weekEventReg[89], "week_event_reg[89]" },
- { &gSaveContext.save.weekEventReg[90], "week_event_reg[90]" },
- { &gSaveContext.save.weekEventReg[91], "week_event_reg[91]" },
- { &gSaveContext.save.weekEventReg[92], "week_event_reg[92]" },
- { &gSaveContext.save.weekEventReg[93], "week_event_reg[93]" },
- { &gSaveContext.save.weekEventReg[94], "week_event_reg[94]" },
- { &gSaveContext.save.weekEventReg[95], "week_event_reg[95]" },
- { &gSaveContext.save.weekEventReg[96], "week_event_reg[96]" },
- { &gSaveContext.save.weekEventReg[97], "week_event_reg[97]" },
- { &gSaveContext.save.weekEventReg[98], "week_event_reg[98]" },
- { &gSaveContext.save.weekEventReg[99], "week_event_reg[99]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[0], "week_event_reg[0]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[1], "week_event_reg[1]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[2], "week_event_reg[2]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[3], "week_event_reg[3]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[4], "week_event_reg[4]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[5], "week_event_reg[5]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[6], "week_event_reg[6]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[7], "week_event_reg[7]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[8], "week_event_reg[8]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[9], "week_event_reg[9]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[10], "week_event_reg[10]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[11], "week_event_reg[11]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[12], "week_event_reg[12]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[13], "week_event_reg[13]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[14], "week_event_reg[14]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[15], "week_event_reg[15]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[16], "week_event_reg[16]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[17], "week_event_reg[17]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[18], "week_event_reg[18]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[19], "week_event_reg[19]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[20], "week_event_reg[20]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[21], "week_event_reg[21]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[22], "week_event_reg[22]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[23], "week_event_reg[23]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[24], "week_event_reg[24]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[25], "week_event_reg[25]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[26], "week_event_reg[26]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[27], "week_event_reg[27]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[28], "week_event_reg[28]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[29], "week_event_reg[29]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[30], "week_event_reg[30]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[31], "week_event_reg[31]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[32], "week_event_reg[32]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[33], "week_event_reg[33]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[34], "week_event_reg[34]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[35], "week_event_reg[35]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[36], "week_event_reg[36]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[37], "week_event_reg[37]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[38], "week_event_reg[38]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[39], "week_event_reg[39]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[40], "week_event_reg[40]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[41], "week_event_reg[41]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[42], "week_event_reg[42]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[43], "week_event_reg[43]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[44], "week_event_reg[44]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[45], "week_event_reg[45]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[46], "week_event_reg[46]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[47], "week_event_reg[47]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[48], "week_event_reg[48]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[49], "week_event_reg[49]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[50], "week_event_reg[50]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[51], "week_event_reg[51]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[52], "week_event_reg[52]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[53], "week_event_reg[53]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[54], "week_event_reg[54]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[55], "week_event_reg[55]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[56], "week_event_reg[56]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[57], "week_event_reg[57]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[58], "week_event_reg[58]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[59], "week_event_reg[59]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[60], "week_event_reg[60]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[61], "week_event_reg[61]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[62], "week_event_reg[62]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[63], "week_event_reg[63]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[64], "week_event_reg[64]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[65], "week_event_reg[65]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[66], "week_event_reg[66]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[67], "week_event_reg[67]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[68], "week_event_reg[68]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[69], "week_event_reg[69]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[70], "week_event_reg[70]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[71], "week_event_reg[71]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[72], "week_event_reg[72]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[73], "week_event_reg[73]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[74], "week_event_reg[74]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[75], "week_event_reg[75]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[76], "week_event_reg[76]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[77], "week_event_reg[77]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[78], "week_event_reg[78]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[79], "week_event_reg[79]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[80], "week_event_reg[80]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[81], "week_event_reg[81]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[82], "week_event_reg[82]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[83], "week_event_reg[83]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[84], "week_event_reg[84]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[85], "week_event_reg[85]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[86], "week_event_reg[86]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[87], "week_event_reg[87]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[88], "week_event_reg[88]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[89], "week_event_reg[89]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[90], "week_event_reg[90]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[91], "week_event_reg[91]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[92], "week_event_reg[92]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[93], "week_event_reg[93]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[94], "week_event_reg[94]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[95], "week_event_reg[95]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[96], "week_event_reg[96]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[97], "week_event_reg[97]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[98], "week_event_reg[98]" },
+ { &gSaveContext.save.saveInfo.weekEventReg[99], "week_event_reg[99]" },
{ &gSaveContext.eventInf[0], "event_inf[0]" },
{ &gSaveContext.eventInf[1], "event_inf[1]" },
@@ -246,8 +246,8 @@ void FlagSet_Update(GameState* gameState) {
if (CHECK_BTN_ALL(input->cur.button, BTN_START)) {
if (CHECK_BTN_ALL(input->press.button, BTN_B)) {
s16 i;
- for (i = 0; i < ARRAY_COUNT(gSaveContext.save.weekEventReg); i++) {
- gSaveContext.save.weekEventReg[i] = 0;
+ for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.weekEventReg); i++) {
+ gSaveContext.save.saveInfo.weekEventReg[i] = 0;
}
for (i = 0; i < ARRAY_COUNT(gSaveContext.eventInf); i++) {
gSaveContext.eventInf[i] = 0;
diff --git a/src/code/game.c b/src/code/game.c
index 73352379f..3ff4f9962 100644
--- a/src/code/game.c
+++ b/src/code/game.c
@@ -1,6 +1,8 @@
#include "global.h"
#include "system_malloc.h"
+#include "z64debug_text.h"
#include "z64rumble.h"
+#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
s32 gFramerateDivisor = 1;
f32 gFramerateDivisorF = 1.0f;
@@ -20,7 +22,7 @@ void Game_SetFramerateDivisor(GameState* gameState, s32 divisor) {
Game_UpdateFramerateVariables(divisor);
}
-void GameState_SetFBFilter(Gfx** gfx, u32 arg1) {
+void GameState_SetFBFilter(Gfx** gfx, void* zbuffer) {
Gfx* dlist = *gfx;
if ((R_FB_FILTER_TYPE > 0) && (R_FB_FILTER_TYPE < 5)) {
@@ -29,33 +31,29 @@ void GameState_SetFBFilter(Gfx** gfx, u32 arg1) {
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, arg1);
- } else {
- if ((R_FB_FILTER_TYPE == 5) || (R_FB_FILTER_TYPE == 6)) {
- D_801F8020.useRgba = (R_FB_FILTER_TYPE == 6);
- D_801F8020.primColor.r = R_FB_FILTER_PRIM_COLOR(0);
- D_801F8020.primColor.g = R_FB_FILTER_PRIM_COLOR(1);
- D_801F8020.primColor.b = R_FB_FILTER_PRIM_COLOR(2);
- D_801F8020.primColor.a = R_FB_FILTER_A;
- D_801F8020.envColor.r = R_FB_FILTER_ENV_COLOR(0);
- D_801F8020.envColor.g = R_FB_FILTER_ENV_COLOR(1);
- D_801F8020.envColor.b = R_FB_FILTER_ENV_COLOR(2);
- D_801F8020.envColor.a = R_FB_FILTER_A;
- func_80142100(&D_801F8020, &dlist, arg1);
- } else {
- if (R_FB_FILTER_TYPE == 7) {
- sMonoColors.unk_00 = 0;
- sMonoColors.primColor.r = R_FB_FILTER_PRIM_COLOR(0);
- sMonoColors.primColor.g = R_FB_FILTER_PRIM_COLOR(1);
- sMonoColors.primColor.b = R_FB_FILTER_PRIM_COLOR(2);
- sMonoColors.primColor.a = R_FB_FILTER_A;
- sMonoColors.envColor.r = R_FB_FILTER_ENV_COLOR(0);
- sMonoColors.envColor.g = R_FB_FILTER_ENV_COLOR(1);
- sMonoColors.envColor.b = R_FB_FILTER_ENV_COLOR(2);
- sMonoColors.envColor.a = R_FB_FILTER_A;
- VisMono_Draw(&sMonoColors, &dlist);
- }
- }
+ func_80140D10(&D_801F8010, &dlist, zbuffer);
+ } 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);
+ sVisZbuf.primColor.g = R_FB_FILTER_PRIM_COLOR(1);
+ sVisZbuf.primColor.b = R_FB_FILTER_PRIM_COLOR(2);
+ sVisZbuf.primColor.a = R_FB_FILTER_A;
+ sVisZbuf.envColor.r = R_FB_FILTER_ENV_COLOR(0);
+ sVisZbuf.envColor.g = R_FB_FILTER_ENV_COLOR(1);
+ sVisZbuf.envColor.b = R_FB_FILTER_ENV_COLOR(2);
+ sVisZbuf.envColor.a = R_FB_FILTER_A;
+ VisZbuf_Draw(&sVisZbuf, &dlist, zbuffer);
+ } else if (R_FB_FILTER_TYPE == 7) {
+ sMonoColors.unk_00 = 0;
+ sMonoColors.primColor.r = R_FB_FILTER_PRIM_COLOR(0);
+ sMonoColors.primColor.g = R_FB_FILTER_PRIM_COLOR(1);
+ sMonoColors.primColor.b = R_FB_FILTER_PRIM_COLOR(2);
+ sMonoColors.primColor.a = R_FB_FILTER_A;
+ sMonoColors.envColor.r = R_FB_FILTER_ENV_COLOR(0);
+ sMonoColors.envColor.g = R_FB_FILTER_ENV_COLOR(1);
+ sMonoColors.envColor.b = R_FB_FILTER_ENV_COLOR(2);
+ sMonoColors.envColor.a = R_FB_FILTER_A;
+ VisMono_Draw(&sMonoColors, &dlist);
}
*gfx = dlist;
@@ -74,7 +72,7 @@ void GameState_Draw(GameState* gameState, GraphicsContext* gfxCtx) {
gSPDisplayList(OVERLAY_DISP++, nextDisplayList);
if (R_FB_FILTER_TYPE && R_FB_FILTER_ENV_COLOR(3) == 0) {
- GameState_SetFBFilter(&nextDisplayList, (u32)gfxCtx->zbuffer);
+ GameState_SetFBFilter(&nextDisplayList, gfxCtx->zbuffer);
}
if (R_ENABLE_ARENA_DBG < 0) {
@@ -89,7 +87,7 @@ void GameState_Draw(GameState* gameState, GraphicsContext* gfxCtx) {
{
s32 requiredScopeTemp;
- func_800E9F78(gfxCtx);
+ Debug_DrawText(gfxCtx);
}
if (R_ENABLE_ARENA_DBG != 0) {
@@ -140,7 +138,7 @@ void Game_Update(GameState* gameState) {
gameState->main(gameState);
- if (R_PAUSE_MENU_MODE != 2) {
+ if (R_PAUSE_BG_PRERENDER_STATE != PAUSE_BG_PRERENDER_PROCESS) {
GameState_Draw(gameState, gfxCtx);
func_801736DC(gfxCtx);
}
@@ -156,11 +154,11 @@ void GameState_InitArena(GameState* gameState, size_t size) {
void* buf = GameAlloc_Malloc(alloc, size);
if (buf) {
- THA_Ct(&gameState->heap, buf, size);
+ THA_Init(&gameState->heap, buf, size);
return;
}
- THA_Ct(&gameState->heap, NULL, 0);
+ THA_Init(&gameState->heap, NULL, 0);
__assert("../game.c", 1035);
}
@@ -172,9 +170,9 @@ void GameState_Realloc(GameState* gameState, size_t size) {
size_t bytesAllocated;
void* heapStart;
- heapStart = gameState->heap.bufp;
+ heapStart = gameState->heap.start;
alloc = &gameState->alloc;
- THA_Dt(&gameState->heap);
+ THA_Destroy(&gameState->heap);
GameAlloc_Free(alloc, heapStart);
SystemArena_GetSizes(&systemMaxFree, &bytesFree, &bytesAllocated);
size = ((systemMaxFree - (sizeof(ArenaNode))) < size) ? (0) : (size);
@@ -183,9 +181,9 @@ void GameState_Realloc(GameState* gameState, size_t size) {
}
if ((gameArena = GameAlloc_Malloc(alloc, size)) != NULL) {
- THA_Ct(&gameState->heap, gameArena, size);
+ THA_Init(&gameState->heap, gameArena, size);
} else {
- THA_Ct(&gameState->heap, 0, 0);
+ THA_Init(&gameState->heap, 0, 0);
__assert("../game.c", 1074);
}
}
@@ -213,7 +211,7 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g
init(gameState);
func_80140CE0(&D_801F8010);
- func_801420C0(&D_801F8020);
+ VisZbuf_Init(&sVisZbuf);
VisMono_Init(&sMonoColors);
func_80140898(&D_801F8048);
func_801773A0(&D_801F7FF0);
@@ -235,10 +233,10 @@ void GameState_Destroy(GameState* gameState) {
Rumble_Destroy();
func_801773C4(&D_801F7FF0);
func_80140D04(&D_801F8010);
- func_801420F4(&D_801F8020);
+ VisZbuf_Destroy(&sVisZbuf);
VisMono_Destroy(&sMonoColors);
func_80140900(&D_801F8048);
- THA_Dt(&gameState->heap);
+ THA_Destroy(&gameState->heap);
GameAlloc_Cleanup(&gameState->alloc);
}
@@ -255,7 +253,7 @@ u32 GameState_IsRunning(GameState* gameState) {
}
s32 GameState_GetArenaSize(GameState* gameState) {
- return THA_GetSize(&gameState->heap);
+ return THA_GetRemaining(&gameState->heap);
}
s32 func_80173B48(GameState* gameState) {
diff --git a/src/code/graph.c b/src/code/graph.c
index 869740e4b..558f7d563 100644
--- a/src/code/graph.c
+++ b/src/code/graph.c
@@ -1,5 +1,5 @@
-#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"
@@ -26,7 +26,7 @@ void Graph_FaultClient(void) {
}
void Graph_InitTHGA(TwoHeadGfxArena* arena, Gfx* buffer, s32 size) {
- THGA_Ct(arena, buffer, size);
+ THGA_Init(arena, buffer, size);
}
void Graph_SetNextGfxPool(GraphicsContext* gfxCtx) {
@@ -50,7 +50,7 @@ void Graph_SetNextGfxPool(GraphicsContext* gfxCtx) {
gfxCtx->workBuffer = pool->workBuffer;
gfxCtx->debugBuffer = pool->debugBuffer;
- gfxCtx->curFrameBuffer = (u16*)SysCfb_GetFbPtr(gfxCtx->framebufferIdx % 2);
+ gfxCtx->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx->framebufferIndex % 2);
gSegments[0x0F] = gfxCtx->curFrameBuffer;
gfxCtx->zbuffer = SysCfb_GetZBuffer();
@@ -91,21 +91,21 @@ GameStateOverlay* Graph_GetNextGameState(GameState* gameState) {
return NULL;
}
-void* Graph_FaultAddrConvFunc(void* address, void* param) {
+void* Graph_FaultAddrConv(void* address, void* param) {
uintptr_t addr = address;
GameStateOverlay* gameStateOvl = &gGameStateOverlayTable[0];
- uintptr_t ramConv;
+ size_t ramConv;
void* ramStart;
- uintptr_t diff;
+ size_t diff;
s32 i;
- for (i = 0; i < graphNumGameStates; i++, gameStateOvl++) {
+ for (i = 0; i < gGraphNumGameStates; i++, gameStateOvl++) {
diff = VRAM_PTR_SIZE(gameStateOvl);
ramStart = gameStateOvl->loadedRamAddr;
ramConv = (uintptr_t)gameStateOvl->vramStart - (uintptr_t)ramStart;
if (ramStart != NULL) {
- if (addr >= (uintptr_t)ramStart && addr < (uintptr_t)ramStart + diff) {
+ if ((addr >= (uintptr_t)ramStart) && (addr < (uintptr_t)ramStart + diff)) {
return addr + ramConv;
}
}
@@ -116,14 +116,14 @@ void* Graph_FaultAddrConvFunc(void* address, void* param) {
void Graph_Init(GraphicsContext* gfxCtx) {
bzero(gfxCtx, sizeof(GraphicsContext));
gfxCtx->gfxPoolIdx = 0;
- gfxCtx->framebufferIdx = 0;
+ gfxCtx->framebufferIndex = 0;
gfxCtx->viMode = NULL;
gfxCtx->viConfigFeatures = gViConfigFeatures;
gfxCtx->xScale = gViConfigXScale;
gfxCtx->yScale = gViConfigYScale;
osCreateMesgQueue(&gfxCtx->queue, gfxCtx->msgBuff, ARRAY_COUNT(gfxCtx->msgBuff));
Fault_AddClient(&sGraphFaultClient, Graph_FaultClient, NULL, NULL);
- Fault_AddAddrConvClient(&sGraphFaultAddrConvClient, Graph_FaultAddrConvFunc, NULL);
+ Fault_AddAddrConvClient(&sGraphFaultAddrConvClient, Graph_FaultAddrConv, NULL);
}
void Graph_Destroy(GraphicsContext* gfxCtx) {
@@ -165,7 +165,7 @@ retry:
gfxCtx->masterList = gGfxMasterDL;
if (gfxCtx->callback != NULL) {
- gfxCtx->callback(gfxCtx, gfxCtx->callbackParam);
+ gfxCtx->callback(gfxCtx, gfxCtx->callbackArg);
}
task->type = M_GFXTASK;
@@ -174,8 +174,8 @@ retry:
task->ucodeBootSize = SysUcode_GetUCodeBootSize();
task->ucode = SysUcode_GetUCode();
task->ucodeData = SysUcode_GetUCodeData();
- task->ucodeSize = 0x1000;
- task->ucodeDataSize = 0x800;
+ task->ucodeSize = SP_UCODE_SIZE;
+ task->ucodeDataSize = SP_UCODE_DATA_SIZE;
task->dramStack = (u64*)gGfxSPTaskStack;
task->dramStackSize = sizeof(gGfxSPTaskStack);
task->outputBuff = gGfxSPTaskOutputBufferPtr;
@@ -191,7 +191,7 @@ retry:
if (SREG(33) & 1) {
SREG(33) &= ~1;
scTask->flags &= ~OS_SC_SWAPBUFFER;
- gfxCtx->framebufferIdx--;
+ gfxCtx->framebufferIndex--;
}
scTask->msgQ = &gfxCtx->queue;
@@ -305,7 +305,7 @@ void Graph_ExecuteAndDraw(GraphicsContext* gfxCtx, GameState* gameState) {
if (!problem) {
Graph_TaskSet00(gfxCtx, gameState);
gfxCtx->gfxPoolIdx++;
- gfxCtx->framebufferIdx++;
+ gfxCtx->framebufferIndex++;
}
{
diff --git a/src/code/main.c b/src/code/main.c
index 59ffb6a32..7fbb5ba39 100644
--- a/src/code/main.c
+++ b/src/code/main.c
@@ -3,7 +3,30 @@
* reordering than just prevent_bss_reordering.h: there is too much of it to control, and it cannot be split into
* separate files since most of it is at addresses ending in 8.
*/
+
#include "global.h"
+#include "buffers.h"
+#include "stack.h"
+#include "stackcheck.h"
+
+extern OSMesgQueue sSiIntMsgQ;
+extern OSMesg sSiIntMsgBuf[1];
+extern u32 gSegments[NUM_SEGMENTS];
+extern SchedContext gSchedContext;
+extern IrqMgrClient irqClient;
+extern OSMesgQueue irqMgrMsgQ;
+extern OSMesg irqMgrMsgBuf[60];
+extern OSThread gGraphThread;
+extern STACK(sGraphStack, 0x1800);
+extern STACK(sSchedStack, 0x600);
+extern STACK(sAudioStack, 0x800);
+extern STACK(sPadMgrStack, 0x500);
+extern StackEntry sGraphStackInfo;
+extern StackEntry sSchedStackInfo;
+extern StackEntry sAudioStackInfo;
+extern StackEntry sPadMgrStackInfo;
+extern AudioMgr sAudioMgr;
+extern PadMgr gPadMgr;
void Main(void* arg) {
intptr_t fb;
@@ -24,7 +47,7 @@ void Main(void* arg) {
startHeapSize = fb - sysHeap;
SystemArena_Init(sysHeap, startHeapSize);
- GameInfo_Init();
+ Regs_Init();
R_ENABLE_ARENA_DBG = 0;
@@ -33,25 +56,24 @@ void Main(void* arg) {
osCreateMesgQueue(&irqMgrMsgQ, irqMgrMsgBuf, ARRAY_COUNT(irqMgrMsgBuf));
- StackCheck_Init(&schedStackEntry, schedStack, schedStack + sizeof(schedStack), 0, 0x100, "sched");
- Sched_Init(&gSchedContext, schedStack + sizeof(schedStack), Z_PRIORITY_SCHED, D_8009B290, 1, &gIrqMgr);
+ StackCheck_Init(&sSchedStackInfo, sSchedStack, STACK_TOP(sSchedStack), 0, 0x100, "sched");
+ Sched_Init(&gSchedContext, STACK_TOP(sSchedStack), Z_PRIORITY_SCHED, D_8009B290, 1, &gIrqMgr);
CIC6105_AddRomInfoFaultPage();
IrqMgr_AddClient(&gIrqMgr, &irqClient, &irqMgrMsgQ);
- StackCheck_Init(&audioStackEntry, audioStack, audioStack + sizeof(audioStack), 0, 0x100, "audio");
- AudioMgr_Init(&audioContext, audioStack + sizeof(audioStack), Z_PRIORITY_AUDIOMGR, 0xA, &gSchedContext, &gIrqMgr);
+ StackCheck_Init(&sAudioStackInfo, sAudioStack, STACK_TOP(sAudioStack), 0, 0x100, "audio");
+ AudioMgr_Init(&sAudioMgr, STACK_TOP(sAudioStack), Z_PRIORITY_AUDIOMGR, 0xA, &gSchedContext, &gIrqMgr);
- StackCheck_Init(&padmgrStackEntry, padmgrStack, padmgrStack + sizeof(padmgrStack), 0, 0x100, "padmgr");
- PadMgr_Init(&sSiIntMsgQ, &gIrqMgr, 7, Z_PRIORITY_PADMGR, padmgrStack + sizeof(padmgrStack));
+ StackCheck_Init(&sPadMgrStackInfo, sPadMgrStack, STACK_TOP(sPadMgrStack), 0, 0x100, "padmgr");
+ PadMgr_Init(&sSiIntMsgQ, &gIrqMgr, 7, Z_PRIORITY_PADMGR, STACK_TOP(sPadMgrStack));
- AudioMgr_Unlock(&audioContext);
+ AudioMgr_Unlock(&sAudioMgr);
- StackCheck_Init(&sGraphStackInfo, sGraphStack, sGraphStack + sizeof(sGraphStack), 0, 0x100, "graph");
- osCreateThread(&sGraphThread, Z_THREAD_ID_GRAPH, Graph_ThreadEntry, arg, sGraphStack + sizeof(sGraphStack),
- Z_PRIORITY_GRAPH);
- osStartThread(&sGraphThread);
+ StackCheck_Init(&sGraphStackInfo, sGraphStack, STACK_TOP(sGraphStack), 0, 0x100, "graph");
+ osCreateThread(&gGraphThread, Z_THREAD_ID_GRAPH, Graph_ThreadEntry, arg, STACK_TOP(sGraphStack), Z_PRIORITY_GRAPH);
+ osStartThread(&gGraphThread);
exit = false;
@@ -73,5 +95,5 @@ void Main(void* arg) {
}
IrqMgr_RemoveClient(&gIrqMgr, &irqClient);
- osDestroyThread(&sGraphThread);
+ osDestroyThread(&gGraphThread);
}
diff --git a/src/code/object_table.c b/src/code/object_table.c
new file mode 100644
index 000000000..aa73199b8
--- /dev/null
+++ b/src/code/object_table.c
@@ -0,0 +1,24 @@
+#include "global.h"
+
+s16 gPlayerFormObjectIndices[PLAYER_FORM_MAX] = {
+ OBJECT_LINK_BOY, // PLAYER_FORM_FIERCE_DEITY
+ OBJECT_LINK_GORON, // PLAYER_FORM_GORON
+ OBJECT_LINK_ZORA, // PLAYER_FORM_ZORA
+ OBJECT_LINK_NUTS, // PLAYER_FORM_DEKU
+ OBJECT_LINK_CHILD, // PLAYER_FORM_HUMAN
+};
+
+ObjectId gObjectTableSize = OBJECT_ID_MAX;
+
+// Object Table definition
+#define DEFINE_OBJECT(name, _enumValue) { SEGMENT_ROM_START(name), SEGMENT_ROM_END(name) },
+#define DEFINE_OBJECT_UNSET(_enumValue) { 0, 0 },
+#define DEFINE_OBJECT_SIZE_ZERO(name, _enumValue) { SEGMENT_ROM_START(name), SEGMENT_ROM_START(name) },
+
+RomFile gObjectTable[] = {
+#include "tables/object_table.h"
+};
+
+#undef DEFINE_OBJECT
+#undef DEFINE_OBJECT_UNSET
+#undef DEFINE_OBJECT_SIZE_ZERO
diff --git a/src/code/sched.c b/src/code/sched.c
index 5f9cdf236..98b005ba1 100644
--- a/src/code/sched.c
+++ b/src/code/sched.c
@@ -1,5 +1,5 @@
-#include "prevent_bss_reordering.h"
#include "global.h"
+#include "stackcheck.h"
#define RSP_DONE_MSG 667
#define RDP_DONE_MSG 668
diff --git a/src/code/speed_meter.c b/src/code/speed_meter.c
index 5ad1cdbe0..780a02c62 100644
--- a/src/code/speed_meter.c
+++ b/src/code/speed_meter.c
@@ -15,9 +15,3 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/func_80177AC8.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/SpeedMeter_DrawAllocEntries.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/func_801780F0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/func_801781EC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/func_8017842C.s")
diff --git a/src/code/su_mtx.c b/src/code/su_mtx.c
new file mode 100644
index 000000000..09cbda90e
--- /dev/null
+++ b/src/code/su_mtx.c
@@ -0,0 +1,361 @@
+/**
+ * @file su_mtx.c
+ * @brief "Fast" functions for constructing RSP-compatible matrices directly
+ *
+ * The three functions in this file construct scaling, rotation, and translation matrices, and combinations thereof. The
+ * intention appears to be to exploit the peculiar structure of the RSP's fixed-point matrix format, which we recall is
+ *
+ * typedef long int Mtx_t[4][4];
+ * typedef union {
+ * Mtx_t m;
+ * struct {
+ * u16 intPart[4][4];
+ * u16 fracPart[4][4];
+ * };
+ * long long int forc_structure_alignment;
+ * } Mtx; // size = 0x40
+ *
+ * This means it can be written to as either words or two sets of shorts; the latter is the correct format for
+ * interpreting it the way the RSP does, but the first is likely faster to access and write to. The functions save
+ * writing halves by
+ *
+ * - writing a word 0 if two adjacent elements are 0 in a convenient place, or 1 if they are 0 and 1,
+ * - writing a word using a shift and overwriting the dirty half afterwards.
+ *
+ * Examples of both of these are seen in Mtx_SetTranslateScaleMtx(); we explain there in full detail due to the
+ * function's relative simplicity. The other two functions we merely point out the interesting parts rather than
+ * explaining the whole process.
+ *
+ * We use the following notation throughout: round brackets denote the word-sized elements, square the pairs they cover.
+ * The integer and fractional parts of a fixed-point number are denoted by i and f respectively, and these letters are
+ * also used to represent which half each of the pairs belongs to.
+ *
+ * (00) [i00,i01], (01) [i02,i03]
+ * (02) [i10,i11], (03) [i12,i13]
+ * (10) [i20,i21], (11) [i22,i23]
+ * (12) [i30,i31], (13) [i32,i33]
+ * (20) [f00,f01], (21) [f02,f03]
+ * (22) [f10,f11], (23) [f12,f13]
+ * (30) [f20,f21], (31) [f22,f23]
+ * (32) [f30,f31], (33) [f32,f33]
+ *
+ * We keep the RSP's column-major convention; this file is confusing enough without attempting to transpose everything.
+ * Bear in mind therefore that we are acting on *row vectors* on the *right*.
+ *
+ * @warning The behaviour of the output of the functions in this file is undefined in C89, since both members of the
+ * union are used to set the mtxs. (C99+ allow type-punning, but the behaviour is still implementation-defined because
+ * it relies on the storage being big-endian.)
+ *
+ * @remark Name inferred from shared Animal Forest functions, meaning of "su" is unclear.
+ */
+
+#include "global.h"
+
+/**
+ * Constructs a matrix \$f ST \$f, i.e. a scaling \$f S \$f followed by a translation \$f T \$f.
+ *
+ * The final result is
+ *
+ * \f[
+ * \begin{bmatrix}
+ * s_x & 0 & 0 & 0 \\
+ * 0 & s_y & 0 & 0 \\
+ * 0 & 0 & s_z & 0 \\
+ * t_x & t_y & t_z & 1
+ * \end{bmatrix}
+ * \f]
+ *
+ * @param[out] mtx Fixed-point matrix pointer to output to
+ * @param[in] scaleX Scale in the X direction
+ * @param[in] scaleY Scale in the Y direction
+ * @param[in] scaleZ Scale in the Z direction
+ * @param[in] translateX X component of translation
+ * @param[in] translateY Y component of translation
+ * @param[in] translateZ Z component of translation
+ *
+ * @remark Original name: "suMtxMakeTS"
+ */
+void Mtx_SetTranslateScaleMtx(Mtx* mtx, f32 scaleX, f32 scaleY, f32 scaleZ, f32 translateX, f32 translateY,
+ f32 translateZ) {
+ Mtx* m = mtx;
+ s32 fixedPoint;
+
+ m->m[0][1] = 0; // [i02, i03] == [0, 0]
+ m->m[2][1] = 0; // [f02, f03] == [0, 0]
+ m->m[0][3] = 0; // [i12, i13] == [0, 0]
+ m->m[2][3] = 0; // [f22, f23] == [0, 0]
+ m->m[1][0] = 0; // [i20, i21] == [0, 0]
+ //
+ fixedPoint = scaleX * 0x10000; //
+ m->m[0][0] = fixedPoint; // [i00, i01] == [scaleX.i, scaleX.f]; i01 is now "dirty"
+ m->intPart[0][1] = 0; // Clean i01 by zeroing it: [i00, i01] == [scaleX.i, 0]
+ m->m[2][0] = (u32)fixedPoint << 16; // [f00, f01] == [scaleX.f, 0]
+ //
+ fixedPoint = scaleY * 0x10000; //
+ m->m[0][2] = (u32)fixedPoint >> 16; // [i10, i11] == [0, scaleY.i]
+ m->m[2][2] = fixedPoint & 0xFFFF; // [f10, f11] == [0, scaleY.f]
+ //
+ fixedPoint = scaleZ * 0x10000; //
+ m->m[1][1] = fixedPoint; // [i22, i23] == [scaleZ.i, scaleZ.f]
+ m->intPart[2][3] = 0; // [i22, i23] == [scaleZ.i, 0]
+ m->m[3][1] = (u32)fixedPoint << 16; // [f22, f23] == [scaleZ.f, 0]
+ //
+ m->m[3][0] = 0; // [f20, f21] == [0, 0]
+ //
+ fixedPoint = translateX * 0x10000; //
+ m->intPart[3][0] = ((u32)fixedPoint >> 16) & 0xFFFF; // [i30, i31] == [translateX.i, ?]
+ m->fracPart[3][0] = fixedPoint & 0xFFFF; // [f30, f31] == [translateX.f, ?]
+ //
+ fixedPoint = translateY * 0x10000; //
+ m->intPart[3][1] = ((u32)fixedPoint >> 16) & 0xFFFF; // [i30, i31] == [translateX.i, translateY.i]
+ m->fracPart[3][1] = fixedPoint & 0xFFFF; // [f30, f31] == [translateX.f, translateY.f]
+ //
+ fixedPoint = translateZ * 0x10000; //
+ m->intPart[3][2] = ((u32)fixedPoint >> 16) & 0xFFFF; // [i30, i31] == [translateZ.i, ?]
+ m->intPart[3][3] = 1; // [i32, i33] == [translateZ.i, 1]
+ m->m[3][3] = (u32)fixedPoint << 16; // [f32, f33] == [translateZ.f, 0]
+
+ // So we end up with
+ // [scaleX.i, 0], [0, 0],
+ // [0, scaleY.i], [0, 0],
+ // [0, 0], [scaleZ.i, 0],
+ // [translateX.i, translateY.i], [translateZ.i, 1]
+ //
+ // [scaleX.f, 0], [0, 0],
+ // [0, scaleY.f], [0, 0],
+ // [0, 0], [scaleZ.f, 0]
+ // [translateX.f, translateY.f], [translateZ.f, 0]
+}
+
+// Unused
+/**
+ * Should create an axis-angle rotation matrix.
+ *
+ * @note The axis vector is expected to be normalised.
+ *
+ * The result should be:
+ *
+ * \f[
+ * \begin{bmatrix}
+ * (1-a_x^2) \cos \theta + a_x^2 & a_x a_y (1 - \cos \theta) + a_z \sin \theta & a_z a_x (1 - \cos \theta) - a_y
+ * \sin \theta & 0 \\
+ * a_x a_y (1 - \cos \theta) - a_z \sin \theta & (1-a_y^2) \cos \theta + a_y^2 & a_y a_z (1 - \cos \theta) + a_x
+ * \sin \theta & 0 \\
+ * a_z a_x (1 - \cos \theta) + a_y \sin \theta & a_y a_z (1 - \cos \theta) - a_x \sin \theta & (1-a_z^2) \cos
+ * \theta
+ * + a_z^2 & 0 \\
+ * t_x & t_y & t_z & 1
+ * \end{bmatrix}
+ * \f]
+ *
+ * @warning There is a significant bug in this function, which means it does not actually produce this correct rotation
+ * matrix; see inline for details.
+ *
+ * @param[out] mtx Fixed-point matrix pointer to output to
+ * @param[in] angle angle to rotate about axis
+ * @param[in] axisX X component of axis to rotate about
+ * @param[in] axisY Y component of axis to rotate about
+ * @param[in] axisZ Z component of axis to rotate about
+ *
+ * @remark Original name: probably something like "suMtxMakeR" or "suMtxMakeRotateVector"
+ */
+void Mtx_SetRotationMtx(Mtx* mtx, s32 angle, f32 axisX, f32 axisY, f32 axisZ) {
+ //! FAKE? The somewhat peculiar distribution of temps in this function seems necessary to match?
+ f32 tempX;
+ f32 tempZ;
+ f32 tempY;
+ f32 sin = Math_SinS(angle);
+ f32 cos = Math_CosS(angle);
+ f32 tempXX;
+ f32 tempYY;
+ f32 tempZZ;
+
+ s32 fixedPoint;
+
+ mtx->m[1][2] = 0; // [i30, i31] == [0, 0]
+ mtx->m[1][3] = 1; // [i32, i33] == [0, 1]
+ mtx->m[3][2] = 0; // [f30, f31] == [0, 0]
+ mtx->m[3][3] = 0; // [f31, f32] == [0, 0]
+
+ tempXX = axisX * axisX;
+ tempX = (axisY * axisZ) * (1.0f - cos);
+
+ // i00 and f00
+ fixedPoint = (((1.0f - tempXX) * cos) + tempXX) * 0x10000;
+ mtx->intPart[0][0] = ((u32)fixedPoint >> 0x10) & 0xFFFF;
+ mtx->fracPart[0][0] = fixedPoint & 0xFFFF;
+
+ tempZ = ((axisX * axisY) * (1.0f - cos));
+ tempZZ = axisZ * axisZ;
+
+ // i21 and f21
+ fixedPoint = (tempX - (axisX * sin)) * 0x10000;
+ mtx->intPart[2][1] = ((u32)fixedPoint >> 0x10) & 0xFFFF;
+ mtx->fracPart[2][1] = fixedPoint & 0xFFFF;
+
+ tempY = (axisZ * axisX) * (1.0f - cos);
+ tempYY = axisY * axisY;
+
+ // [i12, i13] and [f12, f13]
+ fixedPoint = (tempX + (axisX * sin)) * 0x10000;
+ mtx->m[0][3] = fixedPoint; // i13 dirty
+ mtx->intPart[1][3] = 0; // clean i13
+ mtx->m[2][3] = fixedPoint << 0x10;
+
+ // i11 and f11
+ fixedPoint = ((((1.0f - tempYY) * cos) + tempYY) * 0x10000);
+ mtx->intPart[1][1] = ((u32)fixedPoint >> 0x10) & 0xFFFF;
+ mtx->fracPart[1][1] = fixedPoint & 0xFFFF;
+
+ //! @bug The sign of the `axisY * sin` term is wrong on the next two elements (i/f20 and i/f02), which causes the
+ //! matrix to not be a rotation matrix (and indeed not even necessarily invertible).
+ // i20 and f20
+ fixedPoint = (tempY - (axisY * sin)) * 0x10000;
+ mtx->intPart[2][0] = ((u32)fixedPoint >> 0x10) & 0xFFFF;
+ mtx->fracPart[2][0] = fixedPoint & 0xFFFF;
+
+ // [i02, i03] and [f02, f03]
+ fixedPoint = (tempY + (axisY * sin)) * 0x10000;
+ mtx->m[0][1] = fixedPoint; // i03 dirty
+ mtx->intPart[0][3] = 0; // clean i03
+ mtx->m[2][1] = fixedPoint << 0x10;
+
+ // [i22, i23] and [f22, f23]
+ fixedPoint = ((((1.0f - tempZZ) * cos) + tempZZ) * 0x10000);
+ mtx->m[1][1] = fixedPoint; // i23 dirty
+ mtx->intPart[2][3] = 0; // clean i23
+ mtx->m[3][1] = fixedPoint << 0x10;
+
+ // i10 and f10
+ fixedPoint = (tempZ - axisZ * sin) * 0x10000;
+ mtx->intPart[1][0] = ((u32)fixedPoint >> 0x10) & 0xFFFF;
+ mtx->fracPart[1][0] = fixedPoint & 0xFFFF;
+
+ // i01 and f01
+ fixedPoint = (tempZ + axisZ * sin) * 0x10000;
+ mtx->intPart[0][1] = ((u32)fixedPoint >> 0x10) & 0xFFFF;
+ mtx->fracPart[0][1] = fixedPoint & 0xFFFF;
+}
+
+/**
+ * Creates a general scale, rotation, translation matrix.
+ *
+ * @note The axis vector is expected to be normalised.
+ *
+ * The transformations are applied in the order scale, rotate, translate: \$f SRT \$f
+ *
+ * The result should be
+ * \f[
+ * \begin{bmatrix}
+ * s_x((1-a_x^2) \cos \theta + a_x^2) & s_x(a_x a_y (1 - \cos \theta) + a_z \sin \theta) & s_x(a_z a_x (1 - \cos
+ * \theta) - a_y \sin \theta & 0) \\
+ * s_y(a_x a_y (1 - \cos \theta) - a_z \sin \theta) & s_y((1-a_y^2) \cos \theta + a_y^2) & s_z(a_y a_z (1 - \cos
+ * \theta) + a_x \sin \theta) & 0 \\
+ * s_z(a_z a_x (1 - \cos \theta) + a_y \sin \theta) & s_z(a_y a_z (1 - \cos \theta) - a_x \sin \theta) &
+ * s_z((1-a_z^2) \cos \theta + a_z^2) & 0 \\
+ * 0 & 0 & 0 & 1
+ * \end{bmatrix} .
+ * \f]
+ *
+ * @warning There is a significant bug in this function, which means it does not actually produce a proper rotation
+ * matrix; see inline for details.
+ *
+ * @param[out] mtx Fixed-point matrix pointer to output to
+ * @param[in] scaleX Scale in the X direction
+ * @param[in] scaleY Scale in the Y direction
+ * @param[in] scaleZ Scale in the Z direction
+ * @param[in] angle angle to rotate about axis
+ * @param[in] axisX X component of axis to rotate about
+ * @param[in] axisY Y component of axis to rotate about
+ * @param[in] axisZ Z component of axis to rotate about
+ * @param[in] translateX X component of translation
+ * @param[in] translateY Y component of translation
+ * @param[in] translateZ Z component of translation
+ *
+ * @remark Original name: probably something like "suMtxMakeSRT", although Animal Forest function is a Tait-Bryan
+ * rotation rather than axis-angle.
+ */
+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) {
+ f32 tempX;
+ f32 tempY;
+ f32 tempZ;
+ f32 sin = Math_SinS(angle);
+ f32 cos = Math_CosS(angle);
+ f32 tempXX = axisX * axisX;
+ f32 tempYY = axisY * axisY;
+ f32 tempZZ = axisZ * axisZ;
+ s32 fixedPoint;
+
+ tempX = axisY * axisZ * (1.0f - cos);
+
+ // i00 and f00
+ fixedPoint = (tempXX + (1.0f - tempXX) * cos) * scaleX * 0x10000;
+ mtx->intPart[0][0] = ((u32)fixedPoint >> 0x10) & 0xFFFF;
+ mtx->fracPart[0][0] = fixedPoint & 0xFFFF;
+
+ tempY = axisZ * axisX * (1.0f - cos);
+
+ // i21 and f21
+ fixedPoint = (tempX - axisX * sin) * scaleZ * 0x10000;
+ mtx->intPart[2][1] = ((u32)fixedPoint >> 0x10) & 0xFFFF;
+ mtx->fracPart[2][1] = fixedPoint & 0xFFFF;
+
+ tempZ = axisX * axisY * (1.0f - cos);
+
+ // [i12, i13] and [f12, f13]
+ fixedPoint = (tempX + axisX * sin) * scaleY * 0x10000;
+ mtx->m[0][3] = fixedPoint; // i13 dirty
+ mtx->intPart[1][3] = 0; // clean i13
+ mtx->m[2][3] = fixedPoint << 0x10;
+
+ // i11 and f11
+ fixedPoint = (tempYY + (1.0f - tempYY) * cos) * scaleY * 0x10000;
+ mtx->intPart[1][1] = ((u32)fixedPoint >> 0x10) & 0xFFFF;
+ mtx->fracPart[1][1] = fixedPoint & 0xFFFF;
+
+ //! @bug The sign of the `axisY * sin` term is wrong on the next two elements (i/f20 and i/f02), which causes the
+ //! matrix to not be a rotation matrix (and indeed not even necessarily invertible).
+ // i20, f20
+ fixedPoint = (tempY - axisY * sin) * scaleZ * 0x10000;
+ mtx->intPart[2][0] = ((u32)fixedPoint >> 0x10) & 0xFFFF;
+ mtx->fracPart[2][0] = fixedPoint & 0xFFFF;
+
+ // [i02, i03] and [f02, f03]
+ fixedPoint = (tempY + axisY * sin) * scaleX * 0x10000;
+ mtx->m[0][1] = fixedPoint; // [i03, i03], i03 dirty
+ mtx->intPart[0][3] = 0; // clean i03
+ mtx->m[2][1] = fixedPoint << 0x10; // [f02, f03]
+
+ // [i22, i23] and [f22, f23]
+ fixedPoint = (tempZZ + (1.0f - tempZZ) * cos) * scaleZ * 0x10000;
+ mtx->m[1][1] = fixedPoint;
+ mtx->intPart[2][3] = 0;
+ mtx->m[3][1] = fixedPoint << 0x10;
+
+ // i10 and f10
+ fixedPoint = (tempZ - axisZ * sin) * scaleY * 0x10000;
+ mtx->intPart[1][0] = ((u32)fixedPoint >> 0x10) & 0xFFFF;
+ mtx->fracPart[1][0] = fixedPoint & 0xFFFF;
+
+ // i01 and f01
+ fixedPoint = (tempZ + axisZ * sin) * scaleX * 0x10000;
+ mtx->intPart[0][1] = ((u32)fixedPoint >> 0x10) & 0xFFFF;
+ mtx->fracPart[0][1] = fixedPoint & 0xFFFF;
+
+ // [i30, i31] and f30
+ fixedPoint = translateX * 0x10000;
+ mtx->m[1][2] = fixedPoint; // [i30, i31], i31 dirty
+ mtx->fracPart[3][0] = fixedPoint & 0xFFFF; // f30
+
+ // i31 and f31
+ fixedPoint = translateY * 0x10000;
+ mtx->intPart[3][1] = ((u32)fixedPoint >> 0x10) & 0xFFFF; // overwrite i31
+ mtx->fracPart[3][1] = fixedPoint & 0xFFFF; // overwrite f31
+
+ // [i32, i33] and [f32, f33]
+ fixedPoint = translateZ * 0x10000;
+ mtx->m[1][3] = fixedPoint; // [i32, i33]
+ mtx->intPart[3][3] = 1; // clean i33
+ mtx->m[3][3] = (fixedPoint << 0x10); // [f32, f33]
+}
diff --git a/src/code/sys_cfb.c b/src/code/sys_cfb.c
new file mode 100644
index 000000000..25d92227c
--- /dev/null
+++ b/src/code/sys_cfb.c
@@ -0,0 +1,21 @@
+#include "global.h"
+#include "buffers.h"
+#include "system_malloc.h"
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178750.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178818.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178978.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_801789D4.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/SysCfb_GetFbPtr.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/SysCfb_GetZBuffer.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178A24.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178A34.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178A94.s")
diff --git a/src/code/sys_cmpdma.c b/src/code/sys_cmpdma.c
index 2533c44f5..b2a17d547 100644
--- a/src/code/sys_cmpdma.c
+++ b/src/code/sys_cmpdma.c
@@ -1,32 +1,117 @@
#include "global.h"
#include "system_malloc.h"
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_80178750.s")
+typedef struct {
+ union {
+ u32 dmaWord[2];
+ u32 dataStart;
+ u32 dataSize;
+ struct {
+ u32 start;
+ u32 end;
+ } offset;
+ };
+} CmpDmaBuffer;
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_80178818.s")
+CmpDmaBuffer sDmaBuffer;
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_80178978.s")
+void func_80178AC0(u16* src, void* dst, size_t size) {
+ Color_RGBA8_u32 spC;
+ Color_RGBA16_2 tc;
+ Color_RGBA14 tc2;
+ u32* dstCur = dst;
+ u16* src16 = src;
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_801789D4.s")
+ while (((uintptr_t)dstCur) - size < ((uintptr_t)dst)) {
+ tc.rgba = *(src16++);
+ if (tc.a == 1) {
+ spC.r = (tc.r * 255) / 31;
+ spC.g = (tc.g * 255) / 31;
+ spC.b = (tc.b * 255) / 31;
+ spC.a = 255;
+ } else if (tc.rgba == 0) {
+ spC.rgba = 0;
+ } else {
+ tc2.rgba = tc.rgba;
+ tc.rgba = *(src16++);
+ spC.r = (tc.r << 3) | tc2.r;
+ spC.g = (tc.g << 3) | tc2.g;
+ spC.b = (tc.b << 3) | tc2.b;
+ spC.a = ((tc.rgba & 1) << 7) | ((tc2.a * 127) / 63);
+ }
+ *(dstCur++) = spC.rgba;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/SysCfb_GetFbPtr.s")
+void CmpDma_GetFileInfo(u8* segmentRom, s32 id, uintptr_t* outFileRom, size_t* size, s32* flag) {
+ u32 dataStart;
+ u32 refOff;
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/SysCfb_GetZBuffer.s")
+ DmaMgr_DmaRomToRam(segmentRom, &sDmaBuffer.dataStart, sizeof(sDmaBuffer.dataStart));
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_80178A24.s")
+ dataStart = sDmaBuffer.dataStart;
+ refOff = id * sizeof(u32);
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_80178A34.s")
+ // if id is >= idMax
+ if (refOff > (dataStart - 4)) {
+ *outFileRom = segmentRom;
+ *size = 0;
+ } else if (refOff == 0) {
+ // get offset start of next file, i.e. size of first file
+ DmaMgr_DmaRomToRam(segmentRom + 4, &sDmaBuffer.dataSize, sizeof(sDmaBuffer.dataSize));
+ *outFileRom = segmentRom + dataStart;
+ *size = sDmaBuffer.dataSize;
+ } else {
+ // get offset start, end from dataStart
+ DmaMgr_DmaRomToRam(refOff + segmentRom, &sDmaBuffer.offset, sizeof(sDmaBuffer.offset));
+ *outFileRom = sDmaBuffer.offset.start + segmentRom + dataStart;
+ *size = sDmaBuffer.offset.end - sDmaBuffer.offset.start;
+ }
+ *flag = 0;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_80178A94.s")
+void CmpDma_Decompress(uintptr_t romStart, size_t size, void* dst) {
+ if (size != 0) {
+ Yaz0_Decompress(romStart, dst, size);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_80178AC0.s")
+void CmpDma_LoadFileImpl(uintptr_t segmentRom, s32 id, void* dst, size_t size) {
+ uintptr_t romStart;
+ size_t compressedSize;
+ s32 flag;
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_80178C80.s")
+ CmpDma_GetFileInfo(segmentRom, id, &romStart, &compressedSize, &flag);
+ if (flag & 1) {
+ void* tempBuf = SystemArena_Malloc(0x1000);
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_80178D7C.s")
+ CmpDma_Decompress(romStart, compressedSize, tempBuf);
+ func_80178AC0(tempBuf, dst, size);
+ SystemArena_Free(tempBuf);
+ } else {
+ CmpDma_Decompress(romStart, compressedSize, dst);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_80178DAC.s")
+void CmpDma_LoadFile(uintptr_t segmentVrom, s32 id, void* dst, size_t size) {
+ CmpDma_LoadFileImpl(DmaMgr_TranslateVromToRom(segmentVrom), id, dst, size);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_80178E3C.s")
+void CmpDma_LoadAllFiles(uintptr_t segmentVrom, void* dst, size_t size) {
+ uintptr_t rom = DmaMgr_TranslateVromToRom(segmentVrom);
+ u32 i;
+ u32 end;
+ void* nextDst;
+ u32 dataStart;
-#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cmpdma/func_80178E7C.s")
+ DmaMgr_DmaRomToRam(rom, &sDmaBuffer.dataStart, sizeof(sDmaBuffer.dataStart));
+
+ dataStart = sDmaBuffer.dataStart;
+ nextDst = dst;
+ end = (dataStart / sizeof(u32)) - 1;
+
+ for (i = 0; i < end; i++) {
+ CmpDma_LoadFileImpl(rom, i, nextDst, 0);
+ nextDst = gYaz0DecompressDstEnd;
+ }
+}
diff --git a/src/code/sys_flashrom.c b/src/code/sys_flashrom.c
index 8b6c2fa5c..0db0b8744 100644
--- a/src/code/sys_flashrom.c
+++ b/src/code/sys_flashrom.c
@@ -1,6 +1,18 @@
#include "global.h"
+#include "stack.h"
+#include "stackcheck.h"
#include "system_malloc.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];
+
#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_801857C0.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_801857D0.s")
diff --git a/src/code/sys_math.c b/src/code/sys_math.c
index da4ccc9d2..7fd7e9dea 100644
--- a/src/code/sys_math.c
+++ b/src/code/sys_math.c
@@ -66,7 +66,7 @@ f32 pow_int(f32 base, s32 exp) {
* Takes an angle in radians and returns the sine.
*/
f32 sin_rad(f32 rad) {
- return sins(RADF_TO_BINANG(rad)) * SHT_MINV;
+ return sins(RAD_TO_BINANG(rad)) * SHT_MINV;
}
// Rename to Math_CosF
@@ -74,7 +74,7 @@ f32 sin_rad(f32 rad) {
* Takes an angle in radians and returns the cosine.
*/
f32 cos_rad(f32 rad) {
- return coss(RADF_TO_BINANG(rad)) * SHT_MINV;
+ return coss(RAD_TO_BINANG(rad)) * SHT_MINV;
}
/**
diff --git a/src/code/sys_math_atan.c b/src/code/sys_math_atan.c
index d68e1e293..ef05676f5 100644
--- a/src/code/sys_math_atan.c
+++ b/src/code/sys_math_atan.c
@@ -127,13 +127,15 @@ s16 Math_Atan2S(f32 y, f32 x) {
}
f32 Math_Atan2F(f32 y, f32 x) {
- return Math_Atan2S(y, x) * (M_PI / 0x8000);
+ return BINANG_TO_RAD(Math_Atan2S(y, x));
}
-s16 Math_FAtan2F(f32 adjacent, f32 opposite) {
- return Math_Atan2S(opposite, adjacent);
+// Match the OoT implementation of Math_Atan2S
+s16 Math_Atan2S_XY(f32 x, f32 y) {
+ return Math_Atan2S(y, x);
}
-f32 Math_Acot2F(f32 adjacent, f32 opposite) {
- return Math_Atan2F(opposite, adjacent);
+// Match the OoT implementation of Math_Atan2F
+f32 Math_Atan2F_XY(f32 x, f32 y) {
+ return Math_Atan2F(y, x);
}
diff --git a/src/code/sys_matrix.c b/src/code/sys_matrix.c
index 4e517c810..de8da3def 100644
--- a/src/code/sys_matrix.c
+++ b/src/code/sys_matrix.c
@@ -38,7 +38,7 @@
* Throughout this file, `mode` indicates whether to multiply the matrix on top of the stack by the new construction
* (APPLY), or to just overwrite it (NEW).
*/
-#include "prevent_bss_reordering.h"
+
#include "global.h"
/* data */
@@ -74,7 +74,7 @@ MtxF* sCurrentMatrix; //!< original name: "Matrix_now"
* @remark original name: "new_Matrix"
*/
void Matrix_Init(GameState* gameState) {
- sMatrixStack = THA_AllocEndAlign16(&gameState->heap, MATRIX_STACK_SIZE * sizeof(MtxF));
+ sMatrixStack = THA_AllocTailAlign16(&gameState->heap, MATRIX_STACK_SIZE * sizeof(MtxF));
sCurrentMatrix = sMatrixStack;
}
@@ -444,8 +444,8 @@ void Matrix_RotateXFApply(f32 x) {
if (x != 0.0f) {
cmf = sCurrentMatrix;
- sin = sins(RADF_TO_BINANG(x)) * SHT_MINV;
- cos = coss(RADF_TO_BINANG(x)) * SHT_MINV;
+ sin = sins(RAD_TO_BINANG(x)) * SHT_MINV;
+ cos = coss(RAD_TO_BINANG(x)) * SHT_MINV;
tempY = cmf->xy;
tempZ = cmf->xz;
diff --git a/src/code/sys_slowly.c b/src/code/sys_slowly.c
index 415d5f297..754c5d472 100644
--- a/src/code/sys_slowly.c
+++ b/src/code/sys_slowly.c
@@ -1,43 +1,59 @@
+/**
+ * @file sys_slowly.c
+ *
+ * This file implements a manager for running an asynchronous task on a thread with the lowest priority.
+ *
+ * The task callback is expected to have up to 2 void* arguments and have a void return. Setting `argCount` will adjust
+ * how many args the callback gets called with, but defaults to 2 and using the 2 argument callback.
+ *
+ * @note: `argCount` must be set manually, as this file implements no way to configure it.
+ */
+#include "slowly.h"
#include "global.h"
+#include "stackcheck.h"
-#define SLOWLY_STATUS_DONE (1 << 0)
-#define SLOWLY_STATUS_STARTED (1 << 1)
-
-void Slowly_Main(SlowlyTask* slowly) {
+void Slowly_Main(SlowlyMgr* slowly) {
slowly->status |= SLOWLY_STATUS_STARTED;
- switch (slowly->callbackArgCount) {
- case SLOWLY_CALLBACK_NO_ARGS:
- slowly->callback0();
+ switch (slowly->argCount) {
+ case 0:
+ slowly->callback.zero();
break;
- case SLOWLY_CALLBACK_ONE_ARG:
- slowly->callback1(slowly->callbackArg0);
+
+ case 1:
+ slowly->callback.one(slowly->arg0);
break;
- case SLOWLY_CALLBACK_TWO_ARGS:
- slowly->callback2(slowly->callbackArg0, slowly->callbackArg1);
+
+ case 2:
+ slowly->callback.two(slowly->arg0, slowly->arg1);
+ break;
+
+ default:
break;
}
slowly->status |= SLOWLY_STATUS_DONE;
}
-void Slowly_ThreadEntry(SlowlyTask* slowly) {
+void Slowly_ThreadEntry(void* arg) {
+ SlowlyMgr* slowly = (SlowlyMgr*)arg;
+
Slowly_Main(slowly);
}
-void Slowly_Start(SlowlyTask* slowly, void* stack, void (*callback)(), void* callbackArg0, void* callbackArg1) {
- bzero(slowly, sizeof(SlowlyTask));
+void Slowly_Init(SlowlyMgr* slowly, void* stack, SlowlyCallbackTwo callback, void* arg0, void* arg1) {
+ bzero(slowly, sizeof(SlowlyMgr));
- slowly->callbackArgCount = SLOWLY_CALLBACK_TWO_ARGS;
+ slowly->argCount = 2;
slowly->status = 0;
- slowly->callback0 = callback;
- slowly->callbackArg0 = callbackArg0;
- slowly->callbackArg1 = callbackArg1;
+ slowly->callback.two = callback;
+ slowly->arg0 = arg0;
+ slowly->arg1 = arg1;
osCreateThread(&slowly->thread, Z_THREAD_ID_SLOWLY, Slowly_ThreadEntry, slowly, stack, Z_PRIORITY_SLOWLY);
osStartThread(&slowly->thread);
}
-void Slowly_Stop(SlowlyTask* slowly) {
+void Slowly_Destroy(SlowlyMgr* slowly) {
osDestroyThread(&slowly->thread);
}
diff --git a/src/code/title_setup.c b/src/code/title_setup.c
index 641160ea8..4e9293ce7 100644
--- a/src/code/title_setup.c
+++ b/src/code/title_setup.c
@@ -7,12 +7,13 @@ void Setup_SetRegs(void) {
XREG(11) = 0x14;
XREG(12) = 0xE;
XREG(13) = 0;
- XREG(31) = 0;
+ R_A_BTN_Y_OFFSET = 0;
R_MAGIC_CONSUME_TIMER_GIANTS_MASK = 80;
- XREG(43) = 0xFC54;
- XREG(44) = 0xD7;
- XREG(45) = 0xDA;
+ R_THREE_DAY_CLOCK_Y_POS = 64596;
+ R_THREE_DAY_CLOCK_SUN_MOON_CUTOFF = 215;
+ R_THREE_DAY_CLOCK_HOUR_DIGIT_CUTOFF = 218;
+
XREG(68) = 0x61;
XREG(69) = 0x93;
XREG(70) = 0x28;
@@ -27,22 +28,23 @@ void Setup_SetRegs(void) {
XREG(88) = 0x56;
XREG(89) = 0x258;
XREG(90) = 0x1C2;
- XREG(91) = 0;
+
+ R_STORY_FILL_SCREEN_ALPHA = 0;
R_REVERSE_FLOOR_INDEX = 0;
R_MINIMAP_DISABLED = false;
- YREG(32) = 0x50;
- YREG(33) = 0x3C;
- YREG(34) = 0xDC;
- YREG(35) = 0x3C;
- YREG(36) = 0x50;
- YREG(37) = 0xA0;
- YREG(38) = 0xDC;
- YREG(39) = 0xA0;
- YREG(40) = 0x8E;
- YREG(41) = 0x6C;
- YREG(42) = 0xCC;
- YREG(43) = 0xB1;
+ R_PICTO_FOCUS_BORDER_TOPLEFT_X = 80;
+ R_PICTO_FOCUS_BORDER_TOPLEFT_Y = 60;
+ R_PICTO_FOCUS_BORDER_TOPRIGHT_X = 220;
+ R_PICTO_FOCUS_BORDER_TOPRIGHT_Y = 60;
+ R_PICTO_FOCUS_BORDER_BOTTOMLEFT_X = 80;
+ R_PICTO_FOCUS_BORDER_BOTTOMLEFT_Y = 160;
+ R_PICTO_FOCUS_BORDER_BOTTOMRIGHT_X = 220;
+ R_PICTO_FOCUS_BORDER_BOTTOMRIGHT_Y = 160;
+ R_PICTO_FOCUS_ICON_X = 142;
+ R_PICTO_FOCUS_ICON_Y = 108;
+ R_PICTO_FOCUS_TEXT_X = 204;
+ R_PICTO_FOCUS_TEXT_Y = 177;
}
void Setup_InitImpl(SetupState* this) {
diff --git a/src/code/z_actor.c b/src/code/z_actor.c
index c5783f4d7..84501dcbb 100644
--- a/src/code/z_actor.c
+++ b/src/code/z_actor.c
@@ -32,7 +32,7 @@ extern Mtx D_801ED8E0; // 1 func
extern Actor* D_801ED920; // 2 funcs. 1 out of z_actor
// Internal forward declarations
-void func_800BA8B8(PlayState* play, ActorContext* actorCtx);
+void Actor_KillAllOnHalfDayChange(PlayState* play, ActorContext* actorCtx);
Actor* Actor_SpawnEntry(ActorContext* actorCtx, ActorEntry* actorEntry, PlayState* play);
Actor* Actor_Delete(ActorContext* actorCtx, Actor* actor, PlayState* play);
void func_800BB8EC(GameState* gameState, ActorContext* actorCtx, Actor** arg2, Actor** arg3, Player* player);
@@ -113,7 +113,7 @@ void ActorShadow_Draw(Actor* actor, Lights* lights, PlayState* play, Gfx* dlist,
}
void ActorShadow_DrawCircle(Actor* actor, Lights* lights, PlayState* play) {
- if (actor->bgCheckFlags & 0x400) {
+ if (actor->bgCheckFlags & BGCHECKFLAG_PLAYER_400) {
func_800B4AEC(play, actor, 50.0f);
}
@@ -121,7 +121,7 @@ void ActorShadow_DrawCircle(Actor* actor, Lights* lights, PlayState* play) {
}
void ActorShadow_DrawSquare(Actor* actor, Lights* lights, PlayState* play) {
- if (actor->bgCheckFlags & 0x400) {
+ if (actor->bgCheckFlags & BGCHECKFLAG_PLAYER_400) {
func_800B4AEC(play, actor, 50.0f);
}
@@ -129,9 +129,9 @@ void ActorShadow_DrawSquare(Actor* actor, Lights* lights, PlayState* play) {
}
void ActorShadow_DrawWhiteCircle(Actor* actor, Lights* lights, PlayState* play) {
- static Color_RGBA8 color = { 255, 255, 255, 255 };
+ static Color_RGBA8 sColor = { 255, 255, 255, 255 };
- ActorShadow_Draw(actor, lights, play, gCircleShadowDL, &color);
+ ActorShadow_Draw(actor, lights, play, gCircleShadowDL, &sColor);
}
void ActorShadow_DrawHorse(Actor* actor, Lights* lights, PlayState* play) {
@@ -151,7 +151,7 @@ void ActorShadow_DrawFoot(PlayState* play, Light* light, MtxF* arg2, s32 lightNu
dir0 = light->l.dir[0];
dir2 = light->l.dir[2];
- sp58 = Math_FAtan2F(dir2, dir0);
+ sp58 = Math_Atan2S_XY(dir2, dir0);
shadowScaleZ *= (4.5f - (light->l.dir[1] * 0.035f));
shadowScaleZ = CLAMP_MIN(shadowScaleZ, 1.0f);
Matrix_Put(arg2);
@@ -172,7 +172,7 @@ void ActorShadow_DrawFeet(Actor* actor, Lights* mapper, PlayState* play) {
u8 shadowAlpha = actor->shape.shadowAlpha;
f32 alphaRatio;
- if ((actor->id == ACTOR_PLAYER) && (((Player*)actor)->stateFlags3 & 0x8000)) {
+ if ((actor->id == ACTOR_PLAYER) && (((Player*)actor)->stateFlags3 & PLAYER_STATE3_8000)) {
f32 prevScaleZ = actor->scale.z;
actor->scale.z += 0.03f * fabsf(Math_CosS(((Player*)actor)->unk_AAA));
@@ -195,7 +195,7 @@ void ActorShadow_DrawFeet(Actor* actor, Lights* mapper, PlayState* play) {
if (distToFloor < 200.0f) {
MtxF sp13C;
MtxF spFC;
- CollisionPoly* spF8;
+ CollisionPoly* poly;
s32 bgId;
f32 floorHeight[2];
Light* firstLight = &mapper->l.l[0];
@@ -224,7 +224,7 @@ void ActorShadow_DrawFeet(Actor* actor, Lights* mapper, PlayState* play) {
for (i = 0; i < ARRAY_COUNT(floorHeight); i++, spB8 >>= 1) {
feetPosPtr->y += 50.0f;
- *floorHeightPtr = func_80169100(play, &sp13C, &spF8, &bgId, feetPosPtr);
+ *floorHeightPtr = Play_GetFloorSurfaceImpl(play, &sp13C, &poly, &bgId, feetPosPtr);
feetPosPtr->y -= 50.0f;
distToFloor = feetPosPtr->y - *floorHeightPtr;
@@ -234,8 +234,9 @@ void ActorShadow_DrawFeet(Actor* actor, Lights* mapper, PlayState* play) {
if (distToFloor <= 10.0f) {
actor->shape.feetFloorFlags |= spB8;
- if ((actor->depthInWater < 0.0f) && (bgId == 0x32) && ((actor->shape.unk_17 & spB8) != 0)) {
- if (func_800C9C24(&play->colCtx, spF8, bgId, 1) != 0) {
+ if ((actor->depthInWater < 0.0f) && (bgId == BGCHECK_SCENE) && (actor->shape.unk_17 & spB8)) {
+ if (SurfaceType_HasMaterialProperty(&play->colCtx, poly, bgId,
+ MATERIAL_PROPERTY_SOFT_IMPRINT)) {
SkinMatrix_MtxFCopy(&sp13C, &spFC);
SkinMatrix_MulYRotation(&spFC, actor->shape.rot.y);
EffFootmark_Add(play, &spFC, actor, i, feetPosPtr, (actor->shape.shadowScale * 0.3f),
@@ -285,7 +286,7 @@ void ActorShadow_DrawFeet(Actor* actor, Lights* mapper, PlayState* play) {
floorHeightPtr++;
}
- if (!(actor->bgCheckFlags & 1)) {
+ if (!(actor->bgCheckFlags & BGCHECKFLAG_GROUND)) {
actor->shape.feetFloorFlags = 0;
} else if (actor->shape.feetFloorFlags == 3) {
f32 footDistY = actor->shape.feetPos[FOOT_LEFT].y - actor->shape.feetPos[FOOT_RIGHT].y;
@@ -336,7 +337,7 @@ void func_800B4B50(Actor* actor, Lights* mapper, PlayState* play) {
Light* phi_s0;
s32 lightNumMax;
- if (actor->bgCheckFlags & 0x400) {
+ if (actor->bgCheckFlags & BGCHECKFLAG_PLAYER_400) {
func_800B4AEC(play, actor, 50.0f);
}
@@ -469,7 +470,8 @@ void Actor_TargetContextInit(TargetContext* targetCtx, Actor* actor, PlayState*
void Actor_DrawZTarget(TargetContext* targetCtx, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (!(player->stateFlags1 & 0x300006C2)) {
+ if (!(player->stateFlags1 & (PLAYER_STATE1_2 | PLAYER_STATE1_40 | PLAYER_STATE1_80 | PLAYER_STATE1_200 |
+ PLAYER_STATE1_400 | PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000))) {
Actor* actor = targetCtx->targetedActor;
OPEN_DISPS(play->state.gfxCtx);
@@ -519,7 +521,7 @@ void Actor_DrawZTarget(TargetContext* targetCtx, PlayState* play) {
Target_SetPos(targetCtx, targetCtx->unk4C, projectedPos.x, projectedPos.y, projectedPos.z);
- if ((!(player->stateFlags1 & 0x40)) || (actor != player->unk_730)) {
+ if ((!(player->stateFlags1 & PLAYER_STATE1_40)) || (actor != player->targetedActor)) {
OVERLAY_DISP = Gfx_CallSetupDL(OVERLAY_DISP, 0x39);
for (spB0 = 0, spAC = targetCtx->unk4C; spB0 < spB8; spB0++, spAC = (spAC + 1) % 3) {
@@ -559,7 +561,7 @@ void Actor_DrawZTarget(TargetContext* targetCtx, PlayState* play) {
}
actor = targetCtx->unk_94;
- if ((actor != NULL) && !(actor->flags & ACTOR_FLAG_8000000)) {
+ if ((actor != NULL) && !(actor->flags & ACTOR_FLAG_CANT_LOCK_ON)) {
TatlColor* color = &sTatlColorList[actor->category];
POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x07);
@@ -588,7 +590,7 @@ void func_800B5814(TargetContext* targetCtx, Player* player, Actor* actor, GameS
Vec3f projectedPos;
f32 invW;
- if ((player->unk_730 != 0) && (player->unk_AE3[player->unk_ADE] == 2)) {
+ if ((player->targetedActor != NULL) && (player->unk_AE3[player->unk_ADE] == 2)) {
targetCtx->unk_94 = NULL;
} else {
func_800BB8EC(gameState, &play->actorCtx, &sp68, &D_801ED920, player);
@@ -906,39 +908,41 @@ s32 func_800B6434(PlayState* play, TitleCardContext* titleCtx) {
return true;
}
+// ActorContext_1F4 Init
void func_800B6468(PlayState* play) {
- play->actorCtx.unk1F5 = 0;
+ play->actorCtx.unk_1F4.timer = 0;
}
+// ActorContext_1F4 Update
void func_800B6474(PlayState* play) {
- if (play->actorCtx.unk1F5 != 0) {
- play->actorCtx.unk1F5--;
- }
+ DECR(play->actorCtx.unk_1F4.timer);
}
-s32 func_800B648C(PlayState* play, s32 arg1, s32 arg2, f32 arg3, Vec3f* arg4) {
- if ((play->actorCtx.unk1F5 != 0) && (arg3 < play->actorCtx.unk1F8)) {
+// ActorContext_1F4 setter something
+s32 func_800B648C(PlayState* play, s32 arg1, s32 timer, f32 arg3, Vec3f* arg4) {
+ if ((play->actorCtx.unk_1F4.timer != 0) && (arg3 < play->actorCtx.unk_1F4.unk_04)) {
return false;
}
- play->actorCtx.unk1F4 = arg1;
- play->actorCtx.unk1F5 = arg2;
- play->actorCtx.unk1F8 = arg3;
- Math_Vec3f_Copy(&play->actorCtx.unk1FC, arg4);
+ play->actorCtx.unk_1F4.unk_00 = arg1;
+ play->actorCtx.unk_1F4.timer = timer;
+ play->actorCtx.unk_1F4.unk_04 = arg3;
+ Math_Vec3f_Copy(&play->actorCtx.unk_1F4.unk_08, arg4);
return true;
}
+// ActorContext_1F4 getter something
f32 func_800B64FC(PlayState* play, f32 arg1, Vec3f* arg2, u32* arg3) {
f32 temp_f8;
- if ((play->actorCtx.unk1F5 == 0) || (arg1 == 0.0f)) {
+ if ((play->actorCtx.unk_1F4.timer == 0) || (arg1 == 0.0f)) {
return -1.0f;
}
- temp_f8 = Math_Vec3f_DistXYZ(&play->actorCtx.unk1FC, arg2) / arg1;
- *arg3 = play->actorCtx.unk1F4;
- return play->actorCtx.unk1F8 - temp_f8;
+ temp_f8 = Math_Vec3f_DistXYZ(&play->actorCtx.unk_1F4.unk_08, arg2) / arg1;
+ *arg3 = play->actorCtx.unk_1F4.unk_00;
+ return play->actorCtx.unk_1F4.unk_04 - temp_f8;
}
/**
@@ -1009,7 +1013,7 @@ void* func_800B6608(PlayState* play, s16 id) {
* Retrieves the first pointer stored with the id `id`.
* If there's no pointer stored with that id, NULL is returned.
*
- * Used only by EnLiftNuts.
+ * Used only by EnGamelupy.
*/
void* func_800B6680(PlayState* play, s16 id) {
ActorContext_unk_20C* entry = play->actorCtx.unk_20C;
@@ -1026,7 +1030,7 @@ void* func_800B6680(PlayState* play, s16 id) {
return NULL;
}
-void Actor_MarkForDeath(Actor* actor) {
+void Actor_Kill(Actor* actor) {
actor->draw = NULL;
actor->update = NULL;
actor->flags &= ~ACTOR_FLAG_1;
@@ -1100,17 +1104,17 @@ void Actor_Destroy(Actor* actor, PlayState* play) {
}
}
-f32 actorMovementScale = 1.0f;
+f32 sActorMovementScale = 1.0f;
void Actor_SetMovementScale(s32 scale) {
- actorMovementScale = scale * 0.5f;
+ sActorMovementScale = scale * 0.5f;
}
/**
* Update actor position using velocity and any push from z_collision_check.
*/
void Actor_UpdatePos(Actor* actor) {
- f32 speedRate = actorMovementScale;
+ f32 speedRate = sActorMovementScale;
actor->world.pos.x += (actor->velocity.x * speedRate) + actor->colChkInfo.displacement.x;
actor->world.pos.y += (actor->velocity.y * speedRate) + actor->colChkInfo.displacement.y;
@@ -1124,8 +1128,8 @@ void Actor_UpdatePos(Actor* actor) {
* It is recommended to not call this function directly and use `Actor_MoveWithGravity` instead
*/
void Actor_UpdateVelocityWithGravity(Actor* actor) {
- actor->velocity.x = actor->speedXZ * Math_SinS(actor->world.rot.y);
- actor->velocity.z = actor->speedXZ * Math_CosS(actor->world.rot.y);
+ actor->velocity.x = actor->speed * Math_SinS(actor->world.rot.y);
+ actor->velocity.z = actor->speed * Math_CosS(actor->world.rot.y);
actor->velocity.y += actor->gravity;
if (actor->velocity.y < actor->terminalVelocity) {
@@ -1149,11 +1153,11 @@ void Actor_MoveWithGravity(Actor* actor) {
* It is recommended to not call this function directly and use `Actor_MoveWithoutGravity` instead
*/
void Actor_UpdateVelocityWithoutGravity(Actor* actor) {
- f32 horizontalSpeed = Math_CosS(actor->world.rot.x) * actor->speedXZ;
+ f32 speedXZ = Math_CosS(actor->world.rot.x) * actor->speed;
- actor->velocity.x = Math_SinS(actor->world.rot.y) * horizontalSpeed;
- actor->velocity.y = Math_SinS(actor->world.rot.x) * actor->speedXZ;
- actor->velocity.z = Math_CosS(actor->world.rot.y) * horizontalSpeed;
+ actor->velocity.x = Math_SinS(actor->world.rot.y) * speedXZ;
+ actor->velocity.y = Math_SinS(actor->world.rot.x) * actor->speed;
+ actor->velocity.z = Math_CosS(actor->world.rot.y) * speedXZ;
}
/**
@@ -1173,11 +1177,11 @@ void Actor_MoveWithoutGravity(Actor* actor) {
* It is recommended to not call this function directly and use `Actor_MoveWithoutGravityReverse` instead
*/
void Actor_UpdateVelocityWithoutGravityReverse(Actor* actor) {
- f32 horizontalSpeed = Math_CosS(-actor->world.rot.x) * actor->speedXZ;
+ f32 speedXZ = Math_CosS(-actor->world.rot.x) * actor->speed;
- actor->velocity.x = Math_SinS(actor->world.rot.y) * horizontalSpeed;
- actor->velocity.y = Math_SinS(-actor->world.rot.x) * actor->speedXZ;
- actor->velocity.z = Math_CosS(actor->world.rot.y) * horizontalSpeed;
+ actor->velocity.x = Math_SinS(actor->world.rot.y) * speedXZ;
+ actor->velocity.y = Math_SinS(-actor->world.rot.x) * actor->speed;
+ actor->velocity.z = Math_CosS(actor->world.rot.y) * speedXZ;
}
/**
@@ -1192,7 +1196,7 @@ void Actor_MoveWithoutGravityReverse(Actor* actor) {
* Sets horizontal speed and Y velocity using the `speed` argument and current pitch
*/
void Actor_SetSpeeds(Actor* actor, f32 speed) {
- actor->speedXZ = Math_CosS(actor->world.rot.x) * speed;
+ actor->speed = Math_CosS(actor->world.rot.x) * speed;
actor->velocity.y = -Math_SinS(actor->world.rot.x) * speed;
}
@@ -1206,44 +1210,44 @@ void Actor_UpdatePosFromSkelAnime(Actor* actor, SkelAnime* skelAnime) {
actor->world.pos.z += pos.z * actor->scale.z;
}
-s16 Actor_YawBetweenActors(Actor* from, Actor* to) {
- return Math_Vec3f_Yaw(&from->world.pos, &to->world.pos);
+s16 Actor_WorldYawTowardActor(Actor* actorA, Actor* actorB) {
+ return Math_Vec3f_Yaw(&actorA->world.pos, &actorB->world.pos);
}
-s16 Actor_YawBetweenActorsTop(Actor* from, Actor* to) {
- return Math_Vec3f_Yaw(&from->focus.pos, &to->focus.pos);
+s16 Actor_FocusYawTowardActor(Actor* actorA, Actor* actorB) {
+ return Math_Vec3f_Yaw(&actorA->focus.pos, &actorB->focus.pos);
}
-s16 Actor_YawToPoint(Actor* actor, Vec3f* point) {
- return Math_Vec3f_Yaw(&actor->world.pos, point);
+s16 Actor_WorldYawTowardPoint(Actor* actor, Vec3f* refPoint) {
+ return Math_Vec3f_Yaw(&actor->world.pos, refPoint);
}
-s16 Actor_PitchBetweenActors(Actor* from, Actor* to) {
- return Math_Vec3f_Pitch(&from->world.pos, &to->world.pos);
+s16 Actor_WorldPitchTowardActor(Actor* actorA, Actor* actorB) {
+ return Math_Vec3f_Pitch(&actorA->world.pos, &actorB->world.pos);
}
-s16 Actor_PitchBetweenActorsTop(Actor* from, Actor* to) {
- return Math_Vec3f_Pitch(&from->focus.pos, &to->focus.pos);
+s16 Actor_FocusPitchTowardActor(Actor* actorA, Actor* actorB) {
+ return Math_Vec3f_Pitch(&actorA->focus.pos, &actorB->focus.pos);
}
-s16 Actor_PitchToPoint(Actor* actor, Vec3f* point) {
- return Math_Vec3f_Pitch(&actor->world.pos, point);
+s16 Actor_WorldPitchTowardPoint(Actor* actor, Vec3f* refPoint) {
+ return Math_Vec3f_Pitch(&actor->world.pos, refPoint);
}
-f32 Actor_DistanceBetweenActors(Actor* actor1, Actor* actor2) {
- return Math_Vec3f_DistXYZ(&actor1->world.pos, &actor2->world.pos);
+f32 Actor_WorldDistXYZToActor(Actor* actorA, Actor* actorB) {
+ return Math_Vec3f_DistXYZ(&actorA->world.pos, &actorB->world.pos);
}
-f32 Actor_DistanceToPoint(Actor* actor, Vec3f* point) {
- return Math_Vec3f_DistXYZ(&actor->world.pos, point);
+f32 Actor_WorldDistXYZToPoint(Actor* actor, Vec3f* refPoint) {
+ return Math_Vec3f_DistXYZ(&actor->world.pos, refPoint);
}
-f32 Actor_XZDistanceBetweenActors(Actor* actor1, Actor* actor2) {
- return Math_Vec3f_DistXZ(&actor1->world.pos, &actor2->world.pos);
+f32 Actor_WorldDistXZToActor(Actor* actorA, Actor* actorB) {
+ return Math_Vec3f_DistXZ(&actorA->world.pos, &actorB->world.pos);
}
-f32 Actor_XZDistanceToPoint(Actor* actor, Vec3f* point) {
- return Math_Vec3f_DistXZ(&actor->world.pos, point);
+f32 Actor_WorldDistXZToPoint(Actor* actor, Vec3f* refPoint) {
+ return Math_Vec3f_DistXZ(&actor->world.pos, refPoint);
}
/**
@@ -1291,7 +1295,7 @@ void func_800B6F20(PlayState* play, Input* input, f32 magnitude, s16 baseYaw) {
f32 Player_GetHeight(Player* player) {
f32 extraHeight;
- if (player->stateFlags1 & 0x800000) {
+ if (player->stateFlags1 & PLAYER_STATE1_800000) {
extraHeight = 32.0f;
} else {
extraHeight = 0.0f;
@@ -1301,22 +1305,25 @@ f32 Player_GetHeight(Player* player) {
default:
case PLAYER_FORM_FIERCE_DEITY:
return extraHeight + 124.0f;
+
case PLAYER_FORM_GORON:
- // (player->stateFlags3 & 0x1000): being curled?
- return extraHeight + ((player->stateFlags3 & 0x1000) ? 34.0f : 80.0f);
+ return extraHeight + ((player->stateFlags3 & PLAYER_STATE3_1000) ? 34.0f : 80.0f);
+
case PLAYER_FORM_ZORA:
return extraHeight + 68.0f;
+
case PLAYER_FORM_DEKU:
return extraHeight + 36.0f;
+
case PLAYER_FORM_HUMAN:
return extraHeight + 44.0f;
}
}
f32 Player_GetRunSpeedLimit(Player* player) {
- if (player->stateFlags1 & 0x800000) {
+ if (player->stateFlags1 & PLAYER_STATE1_800000) {
return 15.0f;
- } else if (player->stateFlags1 & 0x8000000) {
+ } else if (player->stateFlags1 & PLAYER_STATE1_8000000) {
return (R_RUN_SPEED_LIMIT / 100.0f) * 0.6f;
} else {
return R_RUN_SPEED_LIMIT / 100.0f;
@@ -1324,21 +1331,21 @@ f32 Player_GetRunSpeedLimit(Player* player) {
}
s32 func_800B7118(Player* player) {
- return player->stateFlags1 & 0x8;
+ return player->stateFlags1 & PLAYER_STATE1_8;
}
s32 func_800B7128(Player* player) {
- return func_800B7118(player) && player->unk_ACC;
+ return func_800B7118(player) && (player->unk_ACC != 0);
}
s32 func_800B715C(PlayState* play) {
Player* player = GET_PLAYER(play);
- return player->stateFlags2 & 0x8;
+ return player->stateFlags2 & PLAYER_STATE2_8;
}
void Actor_SetCameraHorseSetting(PlayState* play, Player* player) {
- if ((play->roomCtx.curRoom.unk3 != 4) && (player->actor.id == ACTOR_PLAYER)) {
+ if ((play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_4) && (player->actor.id == ACTOR_PLAYER)) {
EnHorse* rideActor = (EnHorse*)player->rideActor;
if ((rideActor != NULL) && !(rideActor->unk_1EC & 0x10)) {
@@ -1349,12 +1356,12 @@ void Actor_SetCameraHorseSetting(PlayState* play, Player* player) {
void Actor_MountHorse(PlayState* play, Player* player, Actor* horse) {
player->rideActor = horse;
- player->stateFlags1 |= 0x800000;
+ player->stateFlags1 |= PLAYER_STATE1_800000;
horse->child = &player->actor;
}
s32 func_800B7200(Player* player) {
- return (player->stateFlags1 & 0x20000080) || (player->csMode != 0);
+ return (player->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) || (player->csMode != PLAYER_CSMODE_0);
}
void func_800B722C(GameState* gameState, Player* player) {
@@ -1364,7 +1371,7 @@ void func_800B722C(GameState* gameState, Player* player) {
s32 func_800B724C(PlayState* play, Actor* actor, u8 csMode) {
Player* player = GET_PLAYER(play);
- if ((player->csMode == 5) || ((csMode == 6) && (player->csMode == 0))) {
+ if ((player->csMode == PLAYER_CSMODE_5) || ((csMode == PLAYER_CSMODE_END) && (player->csMode == PLAYER_CSMODE_0))) {
return false;
}
@@ -1374,7 +1381,7 @@ s32 func_800B724C(PlayState* play, Actor* actor, u8 csMode) {
return true;
}
-u32 func_800B7298(PlayState* play, Actor* actor, u8 csMode) {
+s32 func_800B7298(PlayState* play, Actor* actor, u8 csMode) {
Player* player = GET_PLAYER(play);
if (func_800B724C(play, actor, csMode)) {
@@ -1416,7 +1423,7 @@ s32 Player_IsFacingActor(Actor* actor, s16 maxAngleDiff, PlayState* play) {
* This function is unused in the original game.
*/
s32 Actor_ActorBIsFacingActorA(Actor* actorA, Actor* actorB, s16 maxAngleDiff) {
- s16 angle = BINANG_ROT180(Actor_YawBetweenActors(actorA, actorB));
+ s16 angle = BINANG_ROT180(Actor_WorldYawTowardActor(actorA, actorB));
s16 dist = angle - actorB->shape.rot.y;
if (ABS_ALT(dist) < maxAngleDiff) {
@@ -1444,7 +1451,7 @@ s32 Actor_IsFacingPlayer(Actor* actor, s16 angle) {
* The maximum angle difference that qualifies as "facing" is specified by `maxAngleDiff`.
*/
s32 Actor_ActorAIsFacingActorB(Actor* actorA, Actor* actorB, s16 maxAngleDiff) {
- s16 dist = Actor_YawBetweenActors(actorA, actorB) - actorA->shape.rot.y;
+ s16 dist = Actor_WorldYawTowardActor(actorA, actorB) - actorA->shape.rot.y;
if (ABS_ALT(dist) < maxAngleDiff) {
return true;
@@ -1477,8 +1484,8 @@ s32 Actor_IsFacingAndNearPlayer(Actor* actor, f32 range, s16 maxAngleDiff) {
* The maximum distance that qualifies as "nearby" is specified by `range`.
*/
s32 Actor_ActorAIsFacingAndNearActorB(Actor* actorA, Actor* actorB, f32 range, s16 maxAngleDiff) {
- if (Actor_DistanceBetweenActors(actorA, actorB) < range) {
- s16 dist = Actor_YawBetweenActors(actorA, actorB) - actorA->shape.rot.y;
+ if (Actor_WorldDistXYZToActor(actorA, actorB) < range) {
+ s16 dist = Actor_WorldYawTowardActor(actorA, actorB) - actorA->shape.rot.y;
if (ABS_ALT(dist) < maxAngleDiff) {
return true;
@@ -1489,19 +1496,19 @@ s32 Actor_ActorAIsFacingAndNearActorB(Actor* actorA, Actor* actorB, f32 range, s
/* Start of BgCheck related section */
-void func_800B75A0(CollisionPoly* poly, Vec3f* normal, s16* azimuth) {
- normal->x = COLPOLY_GET_NORMAL(poly->normal.x);
- normal->y = COLPOLY_GET_NORMAL(poly->normal.y);
- normal->z = COLPOLY_GET_NORMAL(poly->normal.z);
- *azimuth = Math_FAtan2F(normal->z, normal->x);
+void Actor_GetSlopeDirection(CollisionPoly* floorPoly, Vec3f* slopeNormal, s16* downwardSlopeYaw) {
+ slopeNormal->x = COLPOLY_GET_NORMAL(floorPoly->normal.x);
+ slopeNormal->y = COLPOLY_GET_NORMAL(floorPoly->normal.y);
+ slopeNormal->z = COLPOLY_GET_NORMAL(floorPoly->normal.z);
+ *downwardSlopeYaw = Math_Atan2S_XY(slopeNormal->z, slopeNormal->x);
}
-s32 func_800B761C(Actor* actor, f32 arg1, s32 arg2) {
- if (actor->bgCheckFlags & 1) {
- actor->bgCheckFlags &= ~1;
- actor->bgCheckFlags |= 4;
+s32 func_800B761C(Actor* actor, f32 arg1, s32 updBgCheckInfoFlags) {
+ if (actor->bgCheckFlags & BGCHECKFLAG_GROUND) {
+ actor->bgCheckFlags &= ~BGCHECKFLAG_GROUND;
+ actor->bgCheckFlags |= BGCHECKFLAG_GROUND_LEAVE;
- if ((actor->velocity.y < 0.0f) && (arg2 & 0x10)) {
+ if ((actor->velocity.y < 0.0f) && (updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_10)) {
actor->velocity.y = 0.0f;
}
return false;
@@ -1510,28 +1517,29 @@ s32 func_800B761C(Actor* actor, f32 arg1, s32 arg2) {
return true;
}
-s32 func_800B7678(PlayState* play, Actor* actor, Vec3f* pos, s32 flags) {
+s32 func_800B7678(PlayState* play, Actor* actor, Vec3f* pos, s32 updBgCheckInfoFlags) {
f32 distToFloor;
s32 bgId;
- pos->y += (flags & 0x800) ? 10.0f : 50.0f;
+ pos->y += (updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_800) ? 10.0f : 50.0f;
actor->floorHeight = BgCheck_EntityRaycastFloor5_2(play, &play->colCtx, &actor->floorPoly, &bgId, actor, pos);
- actor->bgCheckFlags &= ~(0x80 | 0x04 | 0x02);
+ actor->bgCheckFlags &= ~(BGCHECKFLAG_GROUND_TOUCH | BGCHECKFLAG_GROUND_LEAVE | BGCHECKFLAG_GROUND_STRICT);
if (actor->floorHeight <= BGCHECK_Y_MIN) {
- return func_800B761C(actor, BGCHECK_Y_MIN, flags);
+ return func_800B761C(actor, BGCHECK_Y_MIN, updBgCheckInfoFlags);
}
distToFloor = actor->floorHeight - actor->world.pos.y;
actor->floorBgId = bgId;
- if ((distToFloor >= 0.0f) || (((actor->bgCheckFlags & 1)) && !(actor->bgCheckFlags & 0x800) &&
- (distToFloor >= -11.0f) && (actor->velocity.y < 0.0f))) {
- actor->bgCheckFlags |= 0x80;
+ if ((distToFloor >= 0.0f) ||
+ (((actor->bgCheckFlags & BGCHECKFLAG_GROUND)) && !(actor->bgCheckFlags & BGCHECKFLAG_PLAYER_800) &&
+ (distToFloor >= -11.0f) && (actor->velocity.y < 0.0f))) {
+ actor->bgCheckFlags |= BGCHECKFLAG_GROUND_STRICT;
- if (actor->bgCheckFlags & 0x10) {
+ if (actor->bgCheckFlags & BGCHECKFLAG_CEILING) {
if (bgId != D_801ED8B4) {
if (distToFloor > 15.0f) {
- actor->bgCheckFlags |= 0x100;
+ actor->bgCheckFlags |= BGCHECKFLAG_CRUSHED;
}
} else {
actor->world.pos.x = actor->prevPos.x;
@@ -1542,90 +1550,90 @@ s32 func_800B7678(PlayState* play, Actor* actor, Vec3f* pos, s32 flags) {
actor->world.pos.y = actor->floorHeight;
if (actor->velocity.y <= 0.0f) {
- if (!(actor->bgCheckFlags & 1)) {
- actor->bgCheckFlags |= 2;
- } else if ((flags & 8) && (actor->gravity < 0.0f)) {
+ if (!(actor->bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ actor->bgCheckFlags |= BGCHECKFLAG_GROUND_TOUCH;
+ } else if ((updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_8) && (actor->gravity < 0.0f)) {
actor->velocity.y = -4.0f;
- } else if (!(flags & 0x100)) {
+ } else if (!(updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_100)) {
actor->velocity.y = 0.0f;
}
- actor->bgCheckFlags |= 1;
- BgCheck2_AttachToMesh(&play->colCtx, actor, (s32)actor->floorBgId);
+ actor->bgCheckFlags |= BGCHECKFLAG_GROUND;
+ DynaPolyActor_AttachCarriedActor(&play->colCtx, actor, actor->floorBgId);
}
} else {
- return func_800B761C(actor, distToFloor, flags);
+ return func_800B761C(actor, distToFloor, updBgCheckInfoFlags);
}
return true;
}
void Actor_UpdateBgCheckInfo(PlayState* play, Actor* actor, f32 wallCheckHeight, f32 wallCheckRadius,
- f32 ceilingCheckHeight, u32 flags) {
+ f32 ceilingCheckHeight, u32 updBgCheckInfoFlags) {
f32 sp94 = actor->world.pos.y - actor->prevPos.y;
s32 pad;
Vec3f pos;
- if ((actor->floorBgId != BGCHECK_SCENE) && (actor->bgCheckFlags & 1)) {
- BgCheck2_UpdateActorAttachedToMesh(&play->colCtx, actor->floorBgId, actor);
+ if ((actor->floorBgId != BGCHECK_SCENE) && (actor->bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ DynaPolyActor_TransformCarriedActor(&play->colCtx, actor->floorBgId, actor);
}
- if (flags & 1) {
+ if (updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_1) {
s32 bgId;
- actor->bgCheckFlags &= ~0x1000;
- if ((!(flags & 0x80) &&
+ actor->bgCheckFlags &= ~BGCHECKFLAG_PLAYER_1000;
+ if ((!(updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_80) &&
(BgCheck_EntitySphVsWall3(&play->colCtx, &pos, &actor->world.pos, &actor->prevPos, wallCheckRadius,
&actor->wallPoly, &bgId, actor, wallCheckHeight))) ||
- ((flags & 0x80) &&
+ ((updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_80) &&
(BgCheck_EntitySphVsWall4(&play->colCtx, &pos, &actor->world.pos, &actor->prevPos, wallCheckRadius,
&actor->wallPoly, &bgId, actor, wallCheckHeight)))) {
CollisionPoly* sp7C = actor->wallPoly;
- actor->bgCheckFlags |= 8;
- if ((flags & 0x200) && (actor->bgCheckFlags & 0x1000) && ((s32)sp7C->normal.y > 0) &&
- (sqrtf(SQXYZ(actor->colChkInfo.displacement)) < 10.0f)) {
- actor->bgCheckFlags &= ~8;
- } else if (actor->bgCheckFlags & 8) {
+ actor->bgCheckFlags |= BGCHECKFLAG_WALL;
+ if ((updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_200) && (actor->bgCheckFlags & BGCHECKFLAG_PLAYER_1000) &&
+ ((s32)sp7C->normal.y > 0) && (sqrtf(SQXYZ(actor->colChkInfo.displacement)) < 10.0f)) {
+ actor->bgCheckFlags &= ~BGCHECKFLAG_WALL;
+ } else if (actor->bgCheckFlags & BGCHECKFLAG_WALL) {
Math_Vec3f_Copy(&actor->world.pos, &pos);
}
- actor->wallYaw = Math_FAtan2F(sp7C->normal.z, sp7C->normal.x);
+ actor->wallYaw = Math_Atan2S_XY(sp7C->normal.z, sp7C->normal.x);
actor->wallBgId = bgId;
} else {
- actor->bgCheckFlags &= ~8;
+ actor->bgCheckFlags &= ~BGCHECKFLAG_WALL;
}
}
pos.x = actor->world.pos.x;
pos.z = actor->world.pos.z;
- if (flags & 2) {
+ if (updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_2) {
f32 y;
pos.y = actor->prevPos.y + 4.0f;
if (BgCheck_EntityCheckCeiling(&play->colCtx, &y, &pos, (ceilingCheckHeight + sp94) - 4.0f, &D_801ED8B0,
&D_801ED8B4, actor)) {
- actor->bgCheckFlags |= 0x10;
+ actor->bgCheckFlags |= BGCHECKFLAG_CEILING;
actor->world.pos.y = (y + sp94) - 4.0f;
} else {
- actor->bgCheckFlags &= ~0x10;
+ actor->bgCheckFlags &= ~BGCHECKFLAG_CEILING;
}
}
- if (flags & 4) {
+ if (updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_4) {
WaterBox* waterbox;
f32 y;
pos.y = actor->prevPos.y;
- func_800B7678(play, actor, &pos, flags);
+ func_800B7678(play, actor, &pos, updBgCheckInfoFlags);
y = actor->world.pos.y;
if (WaterBox_GetSurface1(play, &play->colCtx, actor->world.pos.x, actor->world.pos.z, &y, &waterbox)) {
actor->depthInWater = y - actor->world.pos.y;
if (actor->depthInWater <= 0.0f) {
- actor->bgCheckFlags &= ~(0x40 | 0x20);
- } else if (!(actor->bgCheckFlags & 0x20)) {
- actor->bgCheckFlags |= (0x40 | 0x20);
- if (!(flags & 0x40)) {
+ actor->bgCheckFlags &= ~(BGCHECKFLAG_WATER | BGCHECKFLAG_WATER_TOUCH);
+ } else if (!(actor->bgCheckFlags & BGCHECKFLAG_WATER)) {
+ actor->bgCheckFlags |= (BGCHECKFLAG_WATER | BGCHECKFLAG_WATER_TOUCH);
+ if (!(updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_40)) {
Vec3f sp64;
sp64.x = actor->world.pos.x;
@@ -1637,15 +1645,15 @@ void Actor_UpdateBgCheckInfo(PlayState* play, Actor* actor, f32 wallCheckHeight,
EffectSsGRipple_Spawn(play, &sp64, 100, 500, 8);
}
} else {
- actor->bgCheckFlags &= ~0x40;
+ actor->bgCheckFlags &= ~BGCHECKFLAG_WATER_TOUCH;
}
} else {
- actor->bgCheckFlags &= ~(0x40 | 0x20);
+ actor->bgCheckFlags &= ~(BGCHECKFLAG_WATER | BGCHECKFLAG_WATER_TOUCH);
actor->depthInWater = BGCHECK_Y_MIN;
}
}
- if (flags & 0x400) {
+ if (updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_400) {
WaterBox* waterbox;
f32 y = actor->world.pos.y;
@@ -1653,10 +1661,10 @@ void Actor_UpdateBgCheckInfo(PlayState* play, Actor* actor, f32 wallCheckHeight,
actor->depthInWater = y - actor->world.pos.y;
if (actor->depthInWater < 0.0f) {
- actor->bgCheckFlags &= ~(0x40 | 0x20);
- } else if (!(actor->bgCheckFlags & 0x20)) {
- actor->bgCheckFlags |= (0x40 | 0x20);
- if (!(flags & 0x40)) {
+ actor->bgCheckFlags &= ~(BGCHECKFLAG_WATER | BGCHECKFLAG_WATER_TOUCH);
+ } else if (!(actor->bgCheckFlags & BGCHECKFLAG_WATER)) {
+ actor->bgCheckFlags |= (BGCHECKFLAG_WATER | BGCHECKFLAG_WATER_TOUCH);
+ if (!(updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_40)) {
Vec3f sp50;
sp50.x = actor->world.pos.x;
@@ -1668,10 +1676,10 @@ void Actor_UpdateBgCheckInfo(PlayState* play, Actor* actor, f32 wallCheckHeight,
EffectSsGRipple_Spawn(play, &sp50, 100, 500, 8);
}
} else {
- actor->bgCheckFlags &= ~0x40;
+ actor->bgCheckFlags &= ~BGCHECKFLAG_WATER_TOUCH;
}
} else {
- actor->bgCheckFlags &= ~(0x40 | 0x20);
+ actor->bgCheckFlags &= ~(BGCHECKFLAG_WATER | BGCHECKFLAG_WATER_TOUCH);
actor->depthInWater = BGCHECK_Y_MIN;
}
}
@@ -1721,16 +1729,14 @@ void func_800B8050(Actor* actor, PlayState* play, s32 flag) {
Hilite* hilite = func_800BCBF4(&actor->world.pos, play);
if (flag != 0) {
- Gfx* displayListHead;
- Gfx* displayList = GRAPH_ALLOC(play->state.gfxCtx, 2 * sizeof(Gfx));
-
- displayListHead = displayList;
+ Gfx* gfxHead = GRAPH_ALLOC(play->state.gfxCtx, 2 * sizeof(Gfx));
+ Gfx* gfx = gfxHead;
OPEN_DISPS(play->state.gfxCtx);
- gDPSetHilite1Tile(displayListHead++, 1, hilite, 0x10, 0x10);
- gSPEndDisplayList(displayListHead);
- gSPSegment(POLY_OPA_DISP++, 0x07, displayList);
+ gDPSetHilite1Tile(gfx++, 1, hilite, 0x10, 0x10);
+ gSPEndDisplayList(gfx++);
+ gSPSegment(POLY_OPA_DISP++, 0x07, gfxHead);
CLOSE_DISPS(play->state.gfxCtx);
}
@@ -1740,16 +1746,14 @@ void func_800B8118(Actor* actor, PlayState* play, s32 flag) {
Hilite* hilite = func_800BCC68(&actor->world.pos, play);
if (flag != 0) {
- Gfx* displayListHead;
- Gfx* displayList = GRAPH_ALLOC(play->state.gfxCtx, 2 * sizeof(Gfx));
-
- displayListHead = displayList;
+ Gfx* gfxHead = GRAPH_ALLOC(play->state.gfxCtx, 2 * sizeof(Gfx));
+ Gfx* gfx = gfxHead;
OPEN_DISPS(play->state.gfxCtx);
- gDPSetHilite1Tile(displayListHead++, 1, hilite, 0x10, 0x10);
- gSPEndDisplayList(displayListHead);
- gSPSegment(POLY_XLU_DISP++, 0x07, displayList);
+ gDPSetHilite1Tile(gfx++, 1, hilite, 0x10, 0x10);
+ gSPEndDisplayList(gfx++);
+ gSPSegment(POLY_XLU_DISP++, 0x07, gfxHead);
CLOSE_DISPS(play->state.gfxCtx);
}
@@ -1787,8 +1791,8 @@ f32 func_800B82EC(Actor* actor, Player* player, s16 angle) {
s16 temp_v0 = BINANG_SUB(BINANG_SUB(actor->yawTowardsPlayer, 0x8000), angle);
s16 yaw = ABS_ALT(temp_v0);
- if (player->unk_730 != NULL) {
- if ((yaw > 0x4000) || ((actor->flags & ACTOR_FLAG_8000000))) {
+ if (player->targetedActor != NULL) {
+ if ((yaw > 0x4000) || ((actor->flags & ACTOR_FLAG_CANT_LOCK_ON))) {
return FLT_MAX;
}
@@ -1816,7 +1820,7 @@ s32 func_800B83BC(Actor* actor, f32 arg1) {
}
s32 func_800B83F8(Actor* actor, Player* player, s32 flag) {
- if ((actor->update == NULL) || !(actor->flags & ACTOR_FLAG_1) || (actor->flags & ACTOR_FLAG_8000000)) {
+ if ((actor->update == NULL) || !(actor->flags & ACTOR_FLAG_1) || (actor->flags & ACTOR_FLAG_CANT_LOCK_ON)) {
return true;
}
@@ -1825,7 +1829,7 @@ s32 func_800B83F8(Actor* actor, Player* player, s32 flag) {
s16 phi_v1 = ABS_ALT(yaw);
f32 dist;
- if ((player->unk_730 == NULL) && (phi_v1 >= 0x2AAB)) {
+ if ((player->targetedActor == NULL) && (phi_v1 >= 0x2AAB)) {
dist = FLT_MAX;
} else {
dist = actor->xyzDistToPlayerSq;
@@ -1838,44 +1842,54 @@ s32 func_800B83F8(Actor* actor, Player* player, s32 flag) {
}
s16 D_801AED48[] = {
- 0x101, 0x141, 0x111, 0x151, 0x105, 0x145, 0x115, 0x155,
+ HALFDAYBIT_DAY0_NIGHT | HALFDAYBIT_DAY4_NIGHT,
+ HALFDAYBIT_DAY0_NIGHT | HALFDAYBIT_DAY1_NIGHT | HALFDAYBIT_DAY4_NIGHT,
+ HALFDAYBIT_DAY0_NIGHT | HALFDAYBIT_DAY2_NIGHT | HALFDAYBIT_DAY4_NIGHT,
+ HALFDAYBIT_DAY0_NIGHT | HALFDAYBIT_DAY1_NIGHT | HALFDAYBIT_DAY2_NIGHT | HALFDAYBIT_DAY4_NIGHT,
+ HALFDAYBIT_DAY0_NIGHT | HALFDAYBIT_DAY3_NIGHT | HALFDAYBIT_DAY4_NIGHT,
+ HALFDAYBIT_DAY0_NIGHT | HALFDAYBIT_DAY1_NIGHT | HALFDAYBIT_DAY3_NIGHT | HALFDAYBIT_DAY4_NIGHT,
+ HALFDAYBIT_DAY0_NIGHT | HALFDAYBIT_DAY2_NIGHT | HALFDAYBIT_DAY3_NIGHT | HALFDAYBIT_DAY4_NIGHT,
+ HALFDAYBIT_DAY0_NIGHT | HALFDAYBIT_DAY1_NIGHT | HALFDAYBIT_DAY2_NIGHT | HALFDAYBIT_DAY3_NIGHT |
+ HALFDAYBIT_DAY4_NIGHT,
};
s32 Actor_ProcessTalkRequest(Actor* actor, GameState* gameState) {
- if (actor->flags & ACTOR_FLAG_100) {
- actor->flags &= ~ACTOR_FLAG_100;
+ if (actor->flags & ACTOR_FLAG_TALK_REQUESTED) {
+ actor->flags &= ~ACTOR_FLAG_TALK_REQUESTED;
return true;
}
return false;
}
-// Actor_PickUpExchange? Seems to be called with exchangeItemId -1 if the same actor used Actor_PickUp
+// Actor_OfferTalk / Actor_OfferGetItemExchange? Seems to be called with PLAYER_IA_MINUS1 if the same actor used
+// Actor_OfferGetItem.
// This function is also used to toggle the "Speak" action on the A button
-s32 func_800B8500(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, PlayerActionParam exchangeItemId) {
+s32 func_800B8500(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, PlayerItemAction exchangeItemId) {
Player* player = GET_PLAYER(play);
- if ((player->actor.flags & ACTOR_FLAG_100) || ((exchangeItemId > PLAYER_AP_NONE) && Player_InCsMode(play)) ||
+ if ((player->actor.flags & ACTOR_FLAG_TALK_REQUESTED) ||
+ ((exchangeItemId > PLAYER_IA_NONE) && Player_InCsMode(play)) ||
(!actor->isTargeted &&
- ((fabsf(actor->playerHeightRel) > fabsf(yRange)) || ((actor->xzDistToPlayer > player->targetActorDistance)) ||
+ ((fabsf(actor->playerHeightRel) > fabsf(yRange)) || (actor->xzDistToPlayer > player->talkActorDistance) ||
(xzRange < actor->xzDistToPlayer)))) {
return false;
}
- player->targetActor = actor;
- player->targetActorDistance = actor->xzDistToPlayer;
+ player->talkActor = actor;
+ player->talkActorDistance = actor->xzDistToPlayer;
player->exchangeItemId = exchangeItemId;
- ActorCutscene_SetIntentToPlay(0x7C);
+ CutsceneManager_Queue(CS_ID_GLOBAL_TALK);
return true;
}
-s32 func_800B85E0(Actor* actor, PlayState* play, f32 radius, PlayerActionParam exchangeItemId) {
+s32 func_800B85E0(Actor* actor, PlayState* play, f32 radius, PlayerItemAction exchangeItemId) {
return func_800B8500(actor, play, radius, radius, exchangeItemId);
}
s32 func_800B8614(Actor* actor, PlayState* play, f32 radius) {
- return func_800B85E0(actor, play, radius, PLAYER_AP_NONE);
+ return func_800B85E0(actor, play, radius, PLAYER_IA_NONE);
}
s32 func_800B863C(Actor* actor, PlayState* play) {
@@ -1886,7 +1900,7 @@ s32 func_800B863C(Actor* actor, PlayState* play) {
s32 Actor_TextboxIsClosing(Actor* actor, PlayState* play) {
if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) {
- actor->flags &= ~ACTOR_FLAG_100;
+ actor->flags &= ~ACTOR_FLAG_TALK_REQUESTED;
return true;
}
@@ -1898,21 +1912,21 @@ s32 Actor_TextboxIsClosing(Actor* actor, PlayState* play) {
* Fails if Player is not already focussing on an actor or in a talking state
*/
s32 Actor_ChangeFocus(Actor* actor1, PlayState* play, Actor* actor2) {
- Actor* targetActor;
+ Actor* talkActor;
Player* player = GET_PLAYER(play);
- targetActor = player->targetActor;
+ talkActor = player->talkActor;
- if ((player->actor.flags & ACTOR_FLAG_100) && (targetActor != NULL)) {
- player->targetActor = actor2;
- player->unk_730 = actor2;
+ if ((player->actor.flags & ACTOR_FLAG_TALK_REQUESTED) && (talkActor != NULL)) {
+ player->talkActor = actor2;
+ player->targetedActor = actor2;
return true;
}
return false;
}
-s32 Player_GetExchangeItemId(PlayState* play) {
+PlayerItemAction Player_GetExchangeItemId(PlayState* play) {
Player* player = GET_PLAYER(play);
return player->exchangeItemId;
@@ -1990,22 +2004,41 @@ s32 Actor_HasParent(Actor* actor, PlayState* play) {
}
/**
- * Allows to pick up an item (GetItem or GI), lift an actor or catch various actors in bottles
- * within the specified range.
+ * This function covers various interactions with the player actor, using Get Item IDs (see `GetItemID` enum).
+ * It is typically used to give items to the player, but also has other purposes.
*
- * GI_NONE is usually used as a special case to lift an actor
- * GI_MAX is usually used to catch an actor in a bottle
+ * This function carries a get item request to the player actor if context allows it (e.g. the player is in range and
+ * not busy with certain things). The player actor performs the requested action itself.
+ *
+ * The following description of what the `getItemId` values can do is provided here for completeness, but these
+ * behaviors are entirely out of the scope of this function. All behavior is defined by the player actor.
+ *
+ * - Positive values (`GI_NONE < getItemId < GI_MAX`):
+ * Give an item to the player. The player may not get it immediately (for example if diving), but is expected to
+ * in the near future.
+ * - Negative values (`-GI_MAX < getItemId < GI_NONE`):
+ * Used by treasure chests to indicate the chest can be opened (by pressing A).
+ * The item gotten corresponds to the positive Get Item ID `abs(getItemId)`.
+ * - `GI_NONE`:
+ * Allows the player to pick up the actor (by pressing A), to carry it around.
+ * - `GI_MAX`:
+ * Allows the player to catch specific actors in a bottle.
+ *
+ * @return true If the player actor is capable of accepting the offer.
*/
-s32 Actor_PickUp(Actor* actor, PlayState* play, s32 getItemId, f32 xzRange, f32 yRange) {
+s32 Actor_OfferGetItem(Actor* actor, PlayState* play, GetItemId getItemId, f32 xzRange, f32 yRange) {
Player* player = GET_PLAYER(play);
- if (!(player->stateFlags1 & 0x3C7080) && Player_GetExplosiveHeld(player) < 0) {
+ if (!(player->stateFlags1 &
+ (PLAYER_STATE1_80 | PLAYER_STATE1_1000 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_40000 |
+ 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->targetActor) &&
+ ((player->heldActor != NULL || actor == player->talkActor) &&
(getItemId > GI_NONE && getItemId < GI_MAX))) ||
- !(player->stateFlags1 & 0x20000800)) {
+ !(player->stateFlags1 & (PLAYER_STATE1_800 | PLAYER_STATE1_20000000))) {
s16 yawDiff = actor->yawTowardsPlayer - player->actor.shape.rot.y;
s32 absYawDiff = ABS_ALT(yawDiff);
@@ -2015,7 +2048,7 @@ s32 Actor_PickUp(Actor* actor, PlayState* play, s32 getItemId, f32 xzRange, f32
player->getItemDirection = absYawDiff;
if ((getItemId > GI_NONE) && (getItemId < GI_MAX)) {
- ActorCutscene_SetIntentToPlay(play->playerActorCsIds[1]);
+ CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_ITEM_GET]);
}
return true;
@@ -2027,16 +2060,16 @@ s32 Actor_PickUp(Actor* actor, PlayState* play, s32 getItemId, f32 xzRange, f32
return false;
}
-s32 Actor_PickUpNearby(Actor* actor, PlayState* play, s32 getItemId) {
- return Actor_PickUp(actor, play, getItemId, 50.0f, 10.0f);
+s32 Actor_OfferGetItemNearby(Actor* actor, PlayState* play, GetItemId getItemId) {
+ return Actor_OfferGetItem(actor, play, getItemId, 50.0f, 10.0f);
}
-s32 Actor_LiftActor(Actor* actor, PlayState* play) {
- return Actor_PickUpNearby(actor, play, GI_NONE);
+s32 Actor_OfferCarry(Actor* actor, PlayState* play) {
+ return Actor_OfferGetItemNearby(actor, play, GI_NONE);
}
-s32 Actor_PickUpFar(Actor* actor, PlayState* play, s32 getItemId) {
- return Actor_PickUp(actor, play, getItemId, 9999.9f, 9999.9f);
+s32 Actor_OfferGetItemFar(Actor* actor, PlayState* play, GetItemId getItemId) {
+ return Actor_OfferGetItem(actor, play, getItemId, 9999.9f, 9999.9f);
}
s32 Actor_HasNoParent(Actor* actor, PlayState* play) {
@@ -2062,11 +2095,15 @@ void func_800B8C20(Actor* actorA, Actor* actorB, PlayState* play) {
actorA->parent = NULL;
}
-void func_800B8C50(Actor* actor, PlayState* play) {
+/**
+ * Sets closest secret distance to the distance to the actor. Calling this function on `actor` is the way to make it a
+ * 'secret' for that update cycle, i.e. something that the controller will rumble for.
+ */
+void Actor_SetClosestSecretDistance(Actor* actor, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (actor->xyzDistToPlayerSq < player->unk_AA0) {
- player->unk_AA0 = actor->xyzDistToPlayerSq;
+ if (actor->xyzDistToPlayerSq < player->closestSecretDistSq) {
+ player->closestSecretDistSq = actor->xyzDistToPlayerSq;
}
}
@@ -2081,10 +2118,12 @@ s32 Actor_HasRider(PlayState* play, Actor* horse) {
s32 Actor_SetRideActor(PlayState* play, Actor* horse, s32 mountSide) {
Player* player = GET_PLAYER(play);
- if (!(player->stateFlags1 & 0x003C7880)) {
+ if (!(player->stateFlags1 &
+ (PLAYER_STATE1_80 | PLAYER_STATE1_800 | PLAYER_STATE1_1000 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 |
+ PLAYER_STATE1_40000 | PLAYER_STATE1_80000 | PLAYER_STATE1_100000 | PLAYER_STATE1_200000))) {
player->rideActor = horse;
player->mountSide = mountSide;
- ActorCutscene_SetIntentToPlay(0x7C);
+ CutsceneManager_Queue(CS_ID_GLOBAL_TALK);
return true;
}
@@ -2125,7 +2164,10 @@ void func_800B8E1C(PlayState* play, Actor* actor, f32 arg2, s16 arg3, f32 arg4)
func_800B8DD4(play, actor, arg2, arg3, arg4, 0);
}
-void func_800B8E58(Player* player, u16 sfxId) {
+/**
+ * Play a sound effect at the player's position
+ */
+void Player_PlaySfx(Player* player, u16 sfxId) {
if (player->currentMask == PLAYER_MASK_GIANT) {
func_8019F170(&player->actor.projectedPos, sfxId);
} else {
@@ -2135,27 +2177,27 @@ void func_800B8E58(Player* player, u16 sfxId) {
}
/**
- * Plays the sound effect at the actor's position
+ * Play a sound effect at the actor's position
*/
-void Actor_PlaySfxAtPos(Actor* actor, u16 sfxId) {
+void Actor_PlaySfx(Actor* actor, u16 sfxId) {
Audio_PlaySfxAtPos(&actor->projectedPos, sfxId);
}
void func_800B8EF4(PlayState* play, Actor* actor) {
- u32 sfxId;
+ SurfaceSfxOffset surfaceSfxOffset;
- if (actor->bgCheckFlags & 0x20) {
+ if (actor->bgCheckFlags & BGCHECKFLAG_WATER) {
if (actor->depthInWater < 20.0f) {
- sfxId = NA_SE_PL_WALK_WATER0 - SFX_FLAG;
+ surfaceSfxOffset = SURFACE_SFX_OFFSET_WATER_SHALLOW;
} else {
- sfxId = NA_SE_PL_WALK_WATER1 - SFX_FLAG;
+ surfaceSfxOffset = SURFACE_SFX_OFFSET_WATER_DEEP;
}
} else {
- sfxId = SurfaceType_GetSfx(&play->colCtx, actor->floorPoly, actor->floorBgId);
+ surfaceSfxOffset = SurfaceType_GetSfxOffset(&play->colCtx, actor->floorPoly, actor->floorBgId);
}
Audio_PlaySfxAtPos(&actor->projectedPos, NA_SE_EV_BOMB_BOUND);
- Audio_PlaySfxAtPos(&actor->projectedPos, sfxId + SFX_FLAG);
+ Audio_PlaySfxAtPos(&actor->projectedPos, NA_SE_PL_WALK_GROUND + surfaceSfxOffset);
}
void func_800B8F98(Actor* actor, u16 sfxId) {
@@ -2206,8 +2248,8 @@ void func_800B9098(Actor* actor) {
actor->audioFlags |= 0x40;
}
-s32 func_800B90AC(PlayState* play, Actor* actor, CollisionPoly* polygon, s32 bgId, s32 arg4) {
- if (func_800C99D4(&play->colCtx, polygon, bgId) == 8) {
+s32 func_800B90AC(PlayState* play, Actor* actor, CollisionPoly* polygon, s32 bgId, Vec3f* arg4) {
+ if (SurfaceType_GetFloorType(&play->colCtx, polygon, bgId) == FLOOR_TYPE_8) {
return true;
}
@@ -2221,14 +2263,14 @@ void Actor_DeactivateLens(PlayState* play) {
}
}
-void func_800B9120(ActorContext* actorCtx) {
- s32 phi_v0 = CURRENT_DAY * 2;
+void Actor_InitHalfDaysBit(ActorContext* actorCtx) {
+ s32 halfDayCount = CURRENT_DAY * 2;
- if (gSaveContext.save.time < CLOCK_TIME(6, 0) || gSaveContext.save.time > CLOCK_TIME(18, 0)) {
- phi_v0++;
+ if ((gSaveContext.save.time < CLOCK_TIME(6, 0)) || (gSaveContext.save.time > CLOCK_TIME(18, 0))) {
+ halfDayCount++;
}
- actorCtx->unkC = 0x200 >> phi_v0;
+ actorCtx->halfDaysBit = HALFDAYBIT_DAY0_DAWN >> halfDayCount;
}
void Actor_InitContext(PlayState* play, ActorContext* actorCtx, ActorEntry* actorEntry) {
@@ -2236,7 +2278,7 @@ void Actor_InitContext(PlayState* play, ActorContext* actorCtx, ActorEntry* acto
CycleSceneFlags* cycleFlags;
s32 i;
- gSaveContext.save.weekEventReg[92] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_92_80);
cycleFlags = &gSaveContext.cycleSceneFlags[Play_GetOriginalSceneId(play->sceneId)];
bzero(actorCtx, sizeof(ActorContext));
@@ -2267,7 +2309,7 @@ void Actor_InitContext(PlayState* play, ActorContext* actorCtx, ActorEntry* acto
Actor_SpawnEntry(actorCtx, actorEntry, play);
Actor_TargetContextInit(&actorCtx->targetContext, actorCtx->actorLists[ACTORCAT_PLAYER].first, play);
- func_800B9120(actorCtx);
+ Actor_InitHalfDaysBit(actorCtx);
Fault_AddClient(&sActorFaultClient, (void*)Actor_PrintLists, actorCtx, NULL);
func_800B722C(&play->state, (Player*)actorCtx->actorLists[ACTORCAT_PLAYER].first);
}
@@ -2279,24 +2321,27 @@ void Actor_InitContext(PlayState* play, ActorContext* actorCtx, ActorEntry* acto
void Actor_SpawnSetupActors(PlayState* play, ActorContext* actorCtx) {
if (play->numSetupActors > 0) {
ActorEntry* actorEntry = play->setupActorList;
- s32 temp_fp = actorCtx->unkC;
- s32 temp_s1;
- s32 phi_v0;
+ s32 prevHalfDaysBitValue = actorCtx->halfDaysBit;
+ s32 shiftedHalfDaysBit;
+ s32 actorEntryHalfDayBit;
s32 i;
- func_800B9120(actorCtx);
- func_800BA8B8(play, &play->actorCtx);
+ Actor_InitHalfDaysBit(actorCtx);
+ Actor_KillAllOnHalfDayChange(play, &play->actorCtx);
- temp_s1 = (actorCtx->unkC * 2) & 0x2FF;
+ // Shift to previous halfDay bit, but ignoring DAY0_NIGHT.
+ // In other words, if the current halfDay is DAY1_DAY then this logic is ignored and this variable is zero
+ shiftedHalfDaysBit = (actorCtx->halfDaysBit << 1) & (HALFDAYBIT_ALL & ~HALFDAYBIT_DAY0_NIGHT);
for (i = 0; i < play->numSetupActors; i++) {
- phi_v0 = ((actorEntry->rot.x & 7) << 7) | (actorEntry->rot.z & 0x7F);
- if (phi_v0 == 0) {
- phi_v0 = 0x3FF;
+ actorEntryHalfDayBit = ((actorEntry->rot.x & 7) << 7) | (actorEntry->rot.z & 0x7F);
+ if (actorEntryHalfDayBit == 0) {
+ actorEntryHalfDayBit = HALFDAYBIT_ALL;
}
- if (!(phi_v0 & temp_fp) && (phi_v0 & actorCtx->unkC) &&
- (!(gSaveContext.eventInf[1] & 0x80) || !(phi_v0 & temp_s1) || !(actorEntry->id & 0x800))) {
+ if (!(actorEntryHalfDayBit & prevHalfDaysBitValue) && (actorEntryHalfDayBit & actorCtx->halfDaysBit) &&
+ (!CHECK_EVENTINF(EVENTINF_17) || !(actorEntryHalfDayBit & shiftedHalfDaysBit) ||
+ !(actorEntry->id & 0x800))) {
Actor_SpawnEntry(&play->actorCtx, actorEntry, play);
}
actorEntry++;
@@ -2310,9 +2355,9 @@ void Actor_SpawnSetupActors(PlayState* play, ActorContext* actorCtx) {
typedef struct {
/* 0x00 */ PlayState* play;
/* 0x04 */ Actor* actor;
- /* 0x08 */ u32 unk_08;
- /* 0x0C */ u32 unkC;
- /* 0x10 */ Actor* unk10;
+ /* 0x08 */ u32 requiredActorFlag;
+ /* 0x0C */ u32 canFreezeCategory;
+ /* 0x10 */ Actor* talkActor;
/* 0x14 */ Player* player;
/* 0x18 */ u32 unk_18; // Bitmask of actor flags. The actor will only have main called if it has at least 1
// flag set that matches this bitmask
@@ -2346,65 +2391,87 @@ Actor* Actor_UpdateActor(UpdateActor_Params* params) {
}
} else {
if (!Object_IsLoaded(&play->objectCtx, actor->objBankIndex)) {
- Actor_MarkForDeath(actor);
+ Actor_Kill(actor);
+ } 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))) {
+ CollisionCheck_ResetDamage(&actor->colChkInfo);
} else {
- s32 tmp = (params->unk_08 == 0);
+ Math_Vec3f_Copy(&actor->prevPos, &actor->world.pos);
+ actor->xzDistToPlayer = Actor_WorldDistXZToActor(actor, ¶ms->player->actor);
+ actor->playerHeightRel = Actor_HeightDiff(actor, ¶ms->player->actor);
+ actor->xyzDistToPlayerSq = SQ(actor->xzDistToPlayer) + SQ(actor->playerHeightRel);
- if (((params->unk_08) && !(actor->flags & params->unk_08)) ||
- ((tmp = (params->unk_08 == 0)) &&
- (!(actor->flags & ACTOR_FLAG_100000) ||
- ((actor->category == ACTORCAT_EXPLOSIVES) && (params->player->stateFlags1 & 0x200))) &&
- (params->unkC != 0) && (actor != params->unk10) && ((actor != params->player->heldActor)) &&
- (actor->parent != ¶ms->player->actor))) {
- CollisionCheck_ResetDamage(&actor->colChkInfo);
- } else {
- Math_Vec3f_Copy(&actor->prevPos, &actor->world.pos);
- actor->xzDistToPlayer = Actor_XZDistanceBetweenActors(actor, ¶ms->player->actor);
- actor->playerHeightRel = Actor_HeightDiff(actor, ¶ms->player->actor);
- actor->xyzDistToPlayerSq = SQ(actor->xzDistToPlayer) + SQ(actor->playerHeightRel);
+ actor->yawTowardsPlayer = Actor_WorldYawTowardActor(actor, ¶ms->player->actor);
+ actor->flags &= ~ACTOR_FLAG_1000000;
- actor->yawTowardsPlayer = Actor_YawBetweenActors(actor, ¶ms->player->actor);
- actor->flags &= ~ACTOR_FLAG_1000000;
-
- if ((DECR(actor->freezeTimer) == 0) && (actor->flags & params->unk_18)) {
- if (actor == params->player->unk_730) {
- actor->isTargeted = true;
- } else {
- actor->isTargeted = false;
- }
-
- if ((actor->targetPriority != 0) && (params->player->unk_730 == 0)) {
- actor->targetPriority = 0;
- }
-
- Actor_SetObjectDependency(play, actor);
-
- if (actor->colorFilterTimer != 0) {
- actor->colorFilterTimer--;
- }
-
- actor->update(actor, play);
- BgCheck_ResetFlagsIfLoadedActor(play, &play->colCtx.dyna, actor);
+ if ((DECR(actor->freezeTimer) == 0) && (actor->flags & params->unk_18)) {
+ if (actor == params->player->targetedActor) {
+ actor->isTargeted = true;
+ } else {
+ actor->isTargeted = false;
}
- CollisionCheck_ResetDamage(&actor->colChkInfo);
+ if ((actor->targetPriority != 0) && (params->player->targetedActor == NULL)) {
+ actor->targetPriority = 0;
+ }
+
+ Actor_SetObjectDependency(play, actor);
+
+ if (actor->colorFilterTimer != 0) {
+ actor->colorFilterTimer--;
+ }
+
+ actor->update(actor, play);
+ DynaPoly_UnsetAllInteractFlags(play, &play->colCtx.dyna, actor);
}
+
+ CollisionCheck_ResetDamage(&actor->colChkInfo);
}
nextActor = actor->next;
}
return nextActor;
}
-u32 D_801AED58[] = {
- 0x100002C2, 0x100002C2, 0x00000200, 0x100006C2, 0x00000282, 0x300002C2,
- 0x10000282, 0x00000002, 0x300002C2, 0x100006C2, 0x00000002, 0x100002C2,
+u32 sCategoryFreezeMasks[ACTORCAT_MAX] = {
+ /* ACTORCAT_SWITCH */
+ PLAYER_STATE1_2 | PLAYER_STATE1_40 | PLAYER_STATE1_80 | PLAYER_STATE1_200 | PLAYER_STATE1_10000000,
+ /* ACTORCAT_BG */
+ PLAYER_STATE1_2 | PLAYER_STATE1_40 | PLAYER_STATE1_80 | PLAYER_STATE1_200 | PLAYER_STATE1_10000000,
+ /* ACTORCAT_PLAYER */
+ PLAYER_STATE1_200,
+ /* ACTORCAT_EXPLOSIVES */
+ PLAYER_STATE1_2 | PLAYER_STATE1_40 | PLAYER_STATE1_80 | PLAYER_STATE1_200 | PLAYER_STATE1_400 |
+ PLAYER_STATE1_10000000,
+ /* ACTORCAT_NPC */
+ PLAYER_STATE1_2 | PLAYER_STATE1_80 | PLAYER_STATE1_200,
+ /* ACTORCAT_ENEMY */
+ PLAYER_STATE1_2 | PLAYER_STATE1_40 | PLAYER_STATE1_80 | PLAYER_STATE1_200 | PLAYER_STATE1_10000000 |
+ PLAYER_STATE1_20000000,
+ /* ACTORCAT_PROP */
+ PLAYER_STATE1_2 | PLAYER_STATE1_80 | PLAYER_STATE1_200 | PLAYER_STATE1_10000000,
+ /* ACTORCAT_ITEMACTION */
+ PLAYER_STATE1_2,
+ /* ACTORCAT_MISC */
+ PLAYER_STATE1_2 | PLAYER_STATE1_40 | PLAYER_STATE1_80 | PLAYER_STATE1_200 | PLAYER_STATE1_10000000 |
+ PLAYER_STATE1_20000000,
+ /* ACTORCAT_BOSS */
+ PLAYER_STATE1_2 | PLAYER_STATE1_40 | PLAYER_STATE1_80 | PLAYER_STATE1_200 | PLAYER_STATE1_400 |
+ PLAYER_STATE1_10000000,
+ /* ACTORCAT_DOOR */
+ PLAYER_STATE1_2,
+ /* ACTORCAT_CHEST */
+ PLAYER_STATE1_2 | PLAYER_STATE1_40 | PLAYER_STATE1_80 | PLAYER_STATE1_200 | PLAYER_STATE1_10000000,
};
void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) {
s32 i;
Actor* actor;
Player* player = GET_PLAYER(play);
- u32* tmp;
+ u32* categoryFreezeMaskP;
s32 cat;
Actor* next;
ActorListEntry* entry;
@@ -2413,7 +2480,7 @@ void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) {
params.player = player;
params.play = play;
- if (play->unk_18844 != 0) {
+ if (play->unk_18844) {
params.unk_18 = ACTOR_FLAG_200000;
} else {
params.unk_18 = ACTOR_FLAG_200000 | ACTOR_FLAG_40 | ACTOR_FLAG_10;
@@ -2425,22 +2492,23 @@ void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) {
actorCtx->unk2--;
}
- tmp = D_801AED58;
+ categoryFreezeMaskP = sCategoryFreezeMasks;
- if (player->stateFlags2 & 0x8000000) {
- params.unk_08 = 0x2000000;
+ if (player->stateFlags2 & PLAYER_STATE2_8000000) {
+ params.requiredActorFlag = ACTOR_FLAG_2000000;
} else {
- params.unk_08 = 0;
+ params.requiredActorFlag = 0;
}
- if ((player->stateFlags1 & 0x40) && ((player->actor.textId & 0xFF00) != 0x1900)) {
- params.unk10 = player->targetActor;
+ if ((player->stateFlags1 & PLAYER_STATE1_40) && ((player->actor.textId & 0xFF00) != 0x1900)) {
+ params.talkActor = player->talkActor;
} else {
- params.unk10 = NULL;
+ params.talkActor = NULL;
}
- for (i = 0, entry = actorCtx->actorLists; i < ARRAY_COUNT(actorCtx->actorLists); entry++, tmp++, i++) {
- params.unkC = *tmp & player->stateFlags1;
+ for (i = 0, entry = actorCtx->actorLists; i < ARRAY_COUNT(actorCtx->actorLists);
+ entry++, categoryFreezeMaskP++, i++) {
+ params.canFreezeCategory = *categoryFreezeMaskP & player->stateFlags1;
params.actor = entry->first;
while (params.actor != NULL) {
@@ -2448,7 +2516,7 @@ void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) {
}
if (i == ACTORCAT_BG) {
- DynaPoly_Setup(play, &play->colCtx.dyna);
+ DynaPoly_UpdateContext(play, &play->colCtx.dyna);
}
}
@@ -2472,7 +2540,7 @@ void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) {
}
}
- actor = player->unk_730;
+ actor = player->targetedActor;
if ((actor != NULL) && (actor->update == NULL)) {
actor = NULL;
func_80123DA4(player);
@@ -2486,7 +2554,7 @@ void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) {
}
}
- if (!(player->stateFlags1 & 2)) {
+ if (!(player->stateFlags1 & PLAYER_STATE1_2)) {
func_800B5814(&actorCtx->targetContext, player, actor, &play->state);
}
@@ -2526,31 +2594,33 @@ void Actor_Draw(PlayState* play, Actor* actor) {
gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.status[actor->objBankIndex].segment);
if (actor->colorFilterTimer != 0) {
- s32 temp_v0_2 = actor->colorFilterParams & 0xC000;
+ s32 colorFlag = COLORFILTER_GET_COLORFLAG(actor->colorFilterParams);
Color_RGBA8 actorDefaultHitColor = { 0, 0, 0, 255 };
- if (temp_v0_2 == 0x8000) {
+ if (colorFlag == COLORFILTER_COLORFLAG_GRAY) {
actorDefaultHitColor.r = actorDefaultHitColor.g = actorDefaultHitColor.b =
- ((actor->colorFilterParams & 0x1F00) >> 5) | 7;
- } else if (temp_v0_2 == 0x4000) {
- actorDefaultHitColor.r = ((actor->colorFilterParams & 0x1F00) >> 5) | 7;
- } else if (temp_v0_2 == 0xC000) {
+ COLORFILTER_GET_COLORINTENSITY(actor->colorFilterParams) | 7;
+ } else if (colorFlag == COLORFILTER_COLORFLAG_RED) {
+ actorDefaultHitColor.r = COLORFILTER_GET_COLORINTENSITY(actor->colorFilterParams) | 7;
+ } else if (colorFlag == COLORFILTER_COLORFLAG_NONE) {
actorDefaultHitColor.b = actorDefaultHitColor.g = actorDefaultHitColor.r = 0;
} else {
- actorDefaultHitColor.b = ((actor->colorFilterParams & 0x1F00) >> 5) | 7;
+ actorDefaultHitColor.b = COLORFILTER_GET_COLORINTENSITY(actor->colorFilterParams) | 7;
}
- if (actor->colorFilterParams & 0x2000) {
- func_800AE778(play, &actorDefaultHitColor, actor->colorFilterTimer, actor->colorFilterParams & 0xFF);
+ if (actor->colorFilterParams & COLORFILTER_BUFFLAG_XLU) {
+ func_800AE778(play, &actorDefaultHitColor, actor->colorFilterTimer,
+ COLORFILTER_GET_DURATION(actor->colorFilterParams));
} else {
- func_800AE434(play, &actorDefaultHitColor, actor->colorFilterTimer, actor->colorFilterParams & 0xFF);
+ func_800AE434(play, &actorDefaultHitColor, actor->colorFilterTimer,
+ COLORFILTER_GET_DURATION(actor->colorFilterParams));
}
}
actor->draw(actor, play);
if (actor->colorFilterTimer != 0) {
- if (actor->colorFilterParams & 0x2000) {
+ if (actor->colorFilterParams & COLORFILTER_BUFFLAG_XLU) {
func_800AE8EC(play);
} else {
func_800AE5A0(play);
@@ -2594,18 +2664,18 @@ void func_800B9D1C(Actor* actor) {
}
}
-void Actor_DrawAllSetup(PlayState* play) {
- play->actorCtx.undrawnActorCount = 0;
+void Actor_ResetLensActors(PlayState* play) {
+ play->actorCtx.numLensActors = 0;
play->actorCtx.lensActorsDrawn = false;
}
-s32 Actor_RecordUndrawnActor(PlayState* play, Actor* actor) {
- if (play->actorCtx.undrawnActorCount >= 32) {
+s32 Actor_AddToLensActors(PlayState* play, Actor* actor) {
+ if (play->actorCtx.numLensActors >= LENS_ACTOR_MAX) {
return false;
}
- play->actorCtx.undrawnActors[play->actorCtx.undrawnActorCount] = actor;
- play->actorCtx.undrawnActorCount++;
+ play->actorCtx.lensActors[play->actorCtx.numLensActors] = actor;
+ play->actorCtx.numLensActors++;
return true;
}
@@ -2614,200 +2684,129 @@ void Actor_DrawLensOverlay(Gfx** gfxP, s32 lensMaskSize) {
((LENS_MASK_ACTIVE_SIZE - lensMaskSize) * 0.003f) + 1.0f);
}
-#ifdef NON_EQUIVALENT
-void Actor_DrawLensActors(PlayState* play, s32 numActors, Actor** actors) {
- s32 spB4;
- Gfx* spAC;
- void* spA8; // pad
- s32 spA4;
- // void* sp34;
- // Gfx* temp_s1_11;
- // Gfx** temp_a0_2;
- // Gfx** temp_a1;
- // GraphicsContext* temp_s2;
- // void* temp_s1_10;
- // void* temp_s1_7;
- // void* temp_s1_8;
- // void* temp_s1_9;
- // Gfx* phi_s1;
- Gfx* phi_s1_2;
- // void* phi_s1_4;
+void Actor_DrawLensActors(PlayState* play, s32 numLensActors, Actor** lensActors) {
+ GraphicsContext* gfxCtx = play->state.gfxCtx;
+ Actor** lensActor;
+ s32 i;
+ Gfx* gfx;
+ Gfx* gfxTemp;
+ void* zbuffer;
+ void* spA4;
+ s32 dbgVar1;
+ s32 dbgVar2;
+ s32 pad[2];
- OPEN_DISPS(play->state.gfxCtx);
- // temp_s2 = play->state.gfxCtx;
+ // Remnant of debug
+ dbgVar1 = true;
+ dbgVar2 = true;
- if (numActors > 0) {
- spAC = POLY_XLU_DISP;
- // sp34 = play + 0x18000;
+ if (dbgVar1) {
+ dbgVar1 = (numLensActors > 0);
+ }
+
+ OPEN_DISPS(gfxCtx);
+
+ if (dbgVar1) {
+ gfx = POLY_XLU_DISP;
+ zbuffer = gfxCtx->zbuffer;
spA4 = play->unk_18E68;
- PreRender_SetValues(&play->pauseBgPreRender, D_801FBBCC, D_801FBBCE, __gfxCtx->curFrameBuffer,
- __gfxCtx->zbuffer);
+ if (dbgVar2) {
+ PreRender_SetValues(&play->pauseBgPreRender, D_801FBBCC, D_801FBBCE, gfxCtx->curFrameBuffer, zbuffer);
- func_80170200(&play->pauseBgPreRender, &spAC, __gfxCtx->zbuffer, (void*)spA4);
+ gfxTemp = gfx;
+ func_80170200(&play->pauseBgPreRender, &gfxTemp, zbuffer, spA4);
+ gfx = gfxTemp;
+ }
- // spAC->words.w0 = 0xE7000000;
- // spAC->words.w1 = 0;
- // temp_s1_2 = spAC + 8;
- gDPPipeSync(spAC++);
+ gDPPipeSync(gfx++);
+ gDPSetPrimDepth(gfx++, 0, 0);
- // temp_s1_2->words.w0 = 0xEE000000;
- // temp_s1_2->words.w1 = 0;
- // temp_s1_3 = temp_s1_2 + 8;
- gDPSetPrimDepth(spAC++, 0, 0);
-
- // temp_s1_3->words.w0 = 0xEF002C30;
- // temp_s1_3->words.w1 = 0xAF504365;
- // temp_s1_4 = temp_s1_3 + 8;
- gDPSetOtherMode(spAC++,
+ gDPSetOtherMode(gfx++,
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_PRIM | Z_UPD | IM_RD | CVG_DST_SAVE | ZMODE_OPA | FORCE_BL |
GBL_c1(G_BL_CLR_BL, G_BL_0, G_BL_CLR_MEM, G_BL_1MA) |
GBL_c2(G_BL_CLR_BL, G_BL_0, G_BL_CLR_MEM, G_BL_1MA));
- // temp_s1_4->words.w1 = 0xFF;
- // temp_s1_4->words.w0 = 0xFA000000;
- // temp_s1_5 = temp_s1_4 + 8;
- gDPSetPrimColor(spAC++, 0, 0, 0, 0, 0, 255);
- // temp_s1_5 = spAC;
+ gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, 255);
- if (play->roomCtx.curRoom.unk5 == 0) {
- // temp_s1_5->words.w0 = 0xFC61E6C3;
- // temp_s1_5->words.w1 = 0x11CF9FCF;
- // phi_s1 = temp_s1_5 + 8;
- gDPSetCombineLERP(spAC++, 1, TEXEL0, PRIMITIVE, 0, 1, TEXEL0, PRIMITIVE, 0, 1, TEXEL0, PRIMITIVE, 0, 1,
+ if (play->roomCtx.curRoom.lensMode == LENS_MODE_HIDE_ACTORS) {
+ gDPSetCombineLERP(gfx++, 1, TEXEL0, PRIMITIVE, 0, 1, TEXEL0, PRIMITIVE, 0, 1, TEXEL0, PRIMITIVE, 0, 1,
TEXEL0, PRIMITIVE, 0);
} else {
- // temp_s1_5->words.w0 = 0xFC119623;
- // temp_s1_5->words.w1 = 0xFF2FFFFF;
- // phi_s1 = temp_s1_5 + 8;
- gDPSetCombineMode(spAC++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
}
- // spAC = phi_s1;
- Actor_DrawLensOverlay(&spAC, play->actorCtx.lensMaskSize);
- phi_s1_2 = func_801660B8(play, spAC);
+ gfxTemp = gfx;
+ Actor_DrawLensOverlay(&gfxTemp, play->actorCtx.lensMaskSize);
+ gfx = Play_SetFog(play, gfxTemp);
- for (spB4 = 0; spB4 < numActors; spB4++, actors++) {
- Actor_Draw(play, *actors);
+ for (i = 0, lensActor = lensActors; i < numLensActors; i++, lensActor++) {
+ POLY_XLU_DISP = gfx;
+ Actor_Draw(play, *lensActor);
+ gfx = POLY_XLU_DISP;
}
- // temp_s0_2 = &play->pauseBgPreRender;
+ if (dbgVar2) {
+ gDPPipeSync(gfx++);
- // phi_s1_2->words.w0 = 0xE7000000;
- // phi_s1_2->words.w1 = 0;
- // temp_s1_7 = phi_s1_2 + 8;
- gDPPipeSync(phi_s1_2++);
+ gDPSetOtherMode(gfx++,
+ G_AD_DISABLE | G_CD_DISABLE | 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_PRIM | AA_EN | IM_RD | CVG_DST_WRAP | ZMODE_OPA | CVG_X_ALPHA |
+ ALPHA_CVG_SEL | FORCE_BL | GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_MEM, G_BL_1) |
+ GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_MEM, G_BL_1));
- // temp_s1_7->unk_0 = 0xEF002CF0;
- // temp_s1_7->unk_4 = 0xF5A714D;
- // temp_s1_8 = temp_s1_7 + 8;
- gDPSetOtherMode(phi_s1_2++,
- G_AD_DISABLE | G_CD_DISABLE | 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_PRIM | AA_EN | IM_RD | CVG_DST_WRAP | ZMODE_OPA | CVG_X_ALPHA |
- ALPHA_CVG_SEL | FORCE_BL | GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_MEM, G_BL_1) |
- GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_MEM, G_BL_1));
+ gDPSetBlendColor(gfx++, 255, 255, 255, 0);
+ gDPSetPrimColor(gfx++, 0, 0xFF, 0, 0, 0, 32);
- // temp_s1_8->unk_4 = -0x100;
- // temp_s1_8->unk_0 = 0xF9000000;
- // temp_s1_9 = temp_s1_8 + 8;
- gDPSetBlendColor(phi_s1_2++, 255, 255, 255, 0);
+ if (play->roomCtx.curRoom.lensMode == LENS_MODE_HIDE_ACTORS) {
+ gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ } else {
+ gDPSetCombineLERP(gfx++, 1, TEXEL0, PRIMITIVE, 0, 1, TEXEL0, PRIMITIVE, 0, 1, TEXEL0, PRIMITIVE, 0, 1,
+ TEXEL0, PRIMITIVE, 0);
+ }
- // temp_s1_9->unk_4 = 0x20;
- // temp_s1_9->unk_0 = 0xFA0000FF;
- // temp_s1_10 = temp_s1_9 + 8;
- gDPSetPrimColor(phi_s1_2++, 0, 0xFF, 0, 0, 0, 32);
+ gDPSetColorImage(gfx++, G_IM_FMT_RGBA, G_IM_SIZ_16b, play->pauseBgPreRender.width, spA4);
- // temp_a0_2 = &spAC;
- // if (sp34->unk_6E5 == 0) {
- if (play->roomCtx.curRoom.unk5 == 0) {
- // temp_s1_10->unk_0 = 0xFC119623;
- // temp_s1_10->unk_4 = 0xFF2FFFFF;
- // phi_s1_4 = temp_s1_10 + 8;
- gDPSetCombineMode(phi_s1_2++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
- //} else {
- } else {
- // temp_s1_10->unk_4 = 0x11CF9FCF;
- // temp_s1_10->unk_0 = 0xFC61E6C3;
- // phi_s1_4 = temp_s1_10 + 8;
- gDPSetCombineLERP(phi_s1_2++, 1, TEXEL0, PRIMITIVE, 0, 1, TEXEL0, PRIMITIVE, 0, 1, TEXEL0, PRIMITIVE, 0, 1,
- TEXEL0, PRIMITIVE, 0);
+ gfxTemp = gfx;
+ Actor_DrawLensOverlay(&gfxTemp, play->actorCtx.lensMaskSize);
+ gfx = gfxTemp;
- //}
+ gDPPipeSync(gfx++);
+ gDPSetBlendColor(gfx++, 255, 255, 255, 8);
+
+ gDPSetColorImage(gfx++, G_IM_FMT_RGBA, G_IM_SIZ_16b, play->pauseBgPreRender.width,
+ play->pauseBgPreRender.fbuf);
+
+ gfxTemp = gfx;
+ func_8016FDB8(&play->pauseBgPreRender, &gfxTemp, spA4, zbuffer, 1);
+ gfx = gfxTemp;
}
- // phi_s1_4->unk_0 = (s32) (((sp34->unk_B4C - 1) & 0xFFF) | 0xFF100000);
- // temp_s1_11 = phi_s1_4 + 8;
- // phi_s1_4->unk_4 = spA4;
- gDPSetColorImage(phi_s1_2++, G_IM_FMT_RGBA, G_IM_SIZ_16b, ((play->pauseBgPreRender.width - 1) & 0xFFF), spA4);
- // temp_s1_11 = phi_s1_2;
- spAC = phi_s1_2;
-
- // spAC = temp_s1_11;
- Actor_DrawLensOverlay(&spAC, (s32)play->actorCtx.lensMaskSize);
- // temp_s1_11->words.w0 = 0xE7000000;
- // temp_s1_11->words.w1 = 0;
- // temp_s1_12 = temp_s1_11 + 8;
- gDPPipeSync(spAC++);
-
- // temp_s1_12->words.w1 = -0xF8;
- // temp_s1_12->words.w0 = 0xF9000000;
- // temp_s1_13 = temp_s1_12 + 8;
- gDPSetBlendColor(spAC++, 255, 255, 255, 8);
-
- // temp_s1_14 = temp_s1_13 + 8;
- // temp_s1_13->words.w0 = ((sp34->unk_B4C - 1) & 0xFFF) | 0xFF100000;
- // temp_s1_13->words.w1 = sp34->unk_B5C;
- gDPSetColorImage(spAC++, G_IM_FMT_RGBA, G_IM_SIZ_16b, ((play->pauseBgPreRender.width - 1) & 0xFFF),
- play->pauseBgPreRender.fbuf);
-
- // temp_a1 = &spAC;
- // spAC = temp_s1_14;
- // func_8016FDB8(&play->pauseBgPreRender, temp_a1, (void* ) spA4, spA8, 1U);
- func_8016FDB8(&play->pauseBgPreRender, &spAC, (void*)spA4, __gfxCtx->zbuffer, 1U);
- //
- // POLY_OPA_DISP = temp_s1_14;
- POLY_OPA_DISP = spAC;
+ POLY_XLU_DISP = gfx;
}
- // temp_s1_15 = OVERLAY_DISP;
- // temp_s1_15->words.w0 = 0xE7000000;
- // temp_s1_15->words.w1 = 0;
- // temp_s1_16 = temp_s1_15 + 8;
- spAC = OVERLAY_DISP;
- gDPPipeSync(spAC++);
+ gfx = OVERLAY_DISP;
- // temp_s1_16->words.w0 = 0xEF002C30;
- // temp_s1_16->words.w1 = 0x00504345;
- // temp_s1_17 = temp_s1_16 + 8;
- gDPSetOtherMode(spAC++,
+ gDPPipeSync(gfx++);
+
+ gDPSetOtherMode(gfx++,
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_PRIM | G_RM_CLD_SURF | G_RM_CLD_SURF2);
- // temp_s1_17->words.w0 = 0xFC61E6C3;
- // temp_s1_17->words.w1 = 0x11CF9FCF;
- // temp_s1_18 = temp_s1_17 + 8;
- gDPSetCombineLERP(spAC++, 1, TEXEL0, PRIMITIVE, 0, 1, TEXEL0, PRIMITIVE, 0, 1, TEXEL0, PRIMITIVE, 0, 1, TEXEL0,
+ gDPSetCombineLERP(gfx++, 1, TEXEL0, PRIMITIVE, 0, 1, TEXEL0, PRIMITIVE, 0, 1, TEXEL0, PRIMITIVE, 0, 1, TEXEL0,
PRIMITIVE, 0);
+ gDPSetPrimColor(gfx++, 0, 0, 74, 0, 0, 74);
- // temp_s1_18->words.w0 = 0xFA000000;
- // temp_s1_18->words.w1 = 0x4A00004A;
- // spAC = temp_s1_18 + 8;
- gDPSetPrimColor(spAC++, 0, 0, 74, 0, 0, 74);
+ gfxTemp = gfx;
+ Actor_DrawLensOverlay(&gfxTemp, play->actorCtx.lensMaskSize);
+ OVERLAY_DISP = gfxTemp;
- Actor_DrawLensOverlay(&spAC, (s32)play->actorCtx.lensMaskSize);
-
- OVERLAY_DISP = spAC;
-
- CLOSE_DISPS(play->state.gfxCtx);
+ CLOSE_DISPS(gfxCtx);
}
-#else
-void Actor_DrawLensActors(PlayState* play, s32 numActors, Actor** actors);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_actor/Actor_DrawLensActors.s")
-#endif
s32 func_800BA2D8(PlayState* play, Actor* actor) {
return func_800BA2FC(play, actor, &actor->projectedPos, actor->projectedW);
@@ -2822,9 +2821,9 @@ s32 func_800BA2FC(PlayState* play, Actor* actor, Vec3f* projectedPos, f32 projec
f32 phi_f16;
if (play->view.fovy != 60.0f) {
- phi_f12 = actor->uncullZoneScale * play->unk_187F0.x * 0.76980036f; // sqrt(16/27)
+ phi_f12 = actor->uncullZoneScale * play->projectionMtxFDiagonal.x * 0.76980036f; // sqrt(16/27)
- phi_f14 = play->unk_187F0.y * 0.57735026f; // 1 / sqrt(3)
+ phi_f14 = play->projectionMtxFDiagonal.y * 0.57735026f; // 1 / sqrt(3)
phi_f16 = actor->uncullZoneScale * phi_f14;
phi_f14 *= actor->uncullZoneDownward;
} else {
@@ -2852,7 +2851,7 @@ void Actor_DrawAll(PlayState* play, ActorContext* actorCtx) {
s32 actorFlags;
s32 i;
- if (play->unk_18844 != 0) {
+ if (play->unk_18844) {
actorFlags = ACTOR_FLAG_200000;
} else {
actorFlags = ACTOR_FLAG_200000 | ACTOR_FLAG_40 | ACTOR_FLAG_20;
@@ -2860,7 +2859,7 @@ void Actor_DrawAll(PlayState* play, ActorContext* actorCtx) {
OPEN_DISPS(play->state.gfxCtx);
- Actor_DrawAllSetup(play);
+ Actor_ResetLensActors(play);
sp58 = POLY_XLU_DISP;
POLY_XLU_DISP = &sp58[1];
@@ -2884,10 +2883,11 @@ void Actor_DrawAll(PlayState* play, ActorContext* actorCtx) {
actor->isDrawn = false;
if ((actor->init == NULL) && (actor->draw != NULL) && (actor->flags & actorFlags)) {
- if ((actor->flags & ACTOR_FLAG_80) &&
- ((play->roomCtx.curRoom.unk5 == 0) || (play->actorCtx.lensMaskSize == LENS_MASK_ACTIVE_SIZE) ||
+ if ((actor->flags & ACTOR_FLAG_REACT_TO_LENS) &&
+ ((play->roomCtx.curRoom.lensMode == LENS_MODE_HIDE_ACTORS) ||
+ (play->actorCtx.lensMaskSize == LENS_MASK_ACTIVE_SIZE) ||
(actor->room != play->roomCtx.curRoom.num))) {
- if (Actor_RecordUndrawnActor(play, actor)) {}
+ if (Actor_AddToLensActors(play, actor)) {}
} else {
Actor_Draw(play, actor);
}
@@ -2907,15 +2907,16 @@ void Actor_DrawAll(PlayState* play, ActorContext* actorCtx) {
if (play->actorCtx.lensActive) {
Math_StepToC(&play->actorCtx.lensMaskSize, LENS_MASK_ACTIVE_SIZE, 20);
- if (GET_PLAYER(play)->stateFlags2 & 0x8000000) {
+ if (GET_PLAYER(play)->stateFlags2 & PLAYER_STATE2_8000000) {
Actor_DeactivateLens(play);
}
} else {
Math_StepToC(&play->actorCtx.lensMaskSize, 0, 10);
}
+
if (play->actorCtx.lensMaskSize != 0) {
play->actorCtx.lensActorsDrawn = true;
- Actor_DrawLensActors(play, play->actorCtx.undrawnActorCount, play->actorCtx.undrawnActors);
+ Actor_DrawLensActors(play, play->actorCtx.numLensActors, play->actorCtx.lensActors);
}
tmp2 = POLY_XLU_DISP;
@@ -2923,7 +2924,7 @@ void Actor_DrawAll(PlayState* play, ActorContext* actorCtx) {
gSPBranchList(ref2, &tmp2[1]);
POLY_XLU_DISP = &tmp2[1];
- if (play->unk_18844 == 0) {
+ if (!play->unk_18844) {
Lights_DrawGlow(play);
}
@@ -2933,9 +2934,9 @@ void Actor_DrawAll(PlayState* play, ActorContext* actorCtx) {
}
/**
- * Kills every actor which its object is not loaded
+ * Kill every actor which depends on an object that is not loaded.
*/
-void func_800BA6FC(PlayState* play, ActorContext* actorCtx) {
+void Actor_KillAllWithMissingObject(PlayState* play, ActorContext* actorCtx) {
Actor* actor;
s32 i;
@@ -2944,7 +2945,7 @@ void func_800BA6FC(PlayState* play, ActorContext* actorCtx) {
while (actor != NULL) {
if (!Object_IsLoaded(&play->objectCtx, actor->objBankIndex)) {
- Actor_MarkForDeath(actor);
+ Actor_Kill(actor);
}
actor = actor->next;
@@ -2968,7 +2969,7 @@ void func_800BA798(PlayState* play, ActorContext* actorCtx) {
if (!actor->isDrawn) {
actor = Actor_Delete(actorCtx, actor, play);
} else {
- Actor_MarkForDeath(actor);
+ Actor_Kill(actor);
Actor_Destroy(actor, play);
actor = actor->next;
}
@@ -2985,19 +2986,23 @@ void func_800BA798(PlayState* play, ActorContext* actorCtx) {
play->msgCtx.unk_12030 = 0;
}
-void func_800BA8B8(PlayState* play, ActorContext* actorCtx) {
+/**
+ * Kill every actor which does not have the current halfDayBit enabled
+ */
+void Actor_KillAllOnHalfDayChange(PlayState* play, ActorContext* actorCtx) {
s32 i;
for (i = 0; i < ARRAY_COUNT(actorCtx->actorLists); i++) {
Actor* actor = actorCtx->actorLists[i].first;
while (actor != NULL) {
- if (!(actor->unk20 & actorCtx->unkC)) {
+ if (!(actor->halfDaysBits & actorCtx->halfDaysBit)) {
func_80123590(play, actor);
+
if (!actor->isDrawn) {
actor = Actor_Delete(actorCtx, actor, play);
} else {
- Actor_MarkForDeath(actor);
+ Actor_Kill(actor);
Actor_Destroy(actor, play);
actor = actor->next;
}
@@ -3121,8 +3126,8 @@ void Actor_FreeOverlay(ActorOverlay* entry) {
Actor* Actor_Spawn(ActorContext* actorCtx, PlayState* play, s16 actorId, f32 posX, f32 posY, f32 posZ, s16 rotX,
s16 rotY, s16 rotZ, s32 params) {
- return Actor_SpawnAsChildAndCutscene(actorCtx, play, actorId, posX, posY, posZ, rotX, rotY, rotZ, params, -1, 0x3FF,
- NULL);
+ return Actor_SpawnAsChildAndCutscene(actorCtx, play, actorId, posX, posY, posZ, rotX, rotY, rotZ, params,
+ CS_ID_NONE, HALFDAYBIT_ALL, NULL);
}
ActorInit* Actor_LoadOverlay(ActorContext* actorCtx, s16 index) {
@@ -3166,7 +3171,7 @@ ActorInit* Actor_LoadOverlay(ActorContext* actorCtx, s16 index) {
}
Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, PlayState* play, s16 index, f32 x, f32 y, f32 z, s16 rotX,
- s16 rotY, s16 rotZ, s32 params, u32 cutscene, s32 arg11, Actor* parent) {
+ s16 rotY, s16 rotZ, s32 params, u32 csId, u32 halfDaysBits, Actor* parent) {
s32 pad;
Actor* actor;
ActorInit* actorInit;
@@ -3232,16 +3237,16 @@ Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, PlayState* play, s1
actor->home.rot.y = rotY;
actor->home.rot.z = rotZ;
actor->params = params & 0xFFFF;
- actor->cutscene = (cutscene & 0x7F);
+ actor->csId = csId & 0x7F;
- if (actor->cutscene == 0x7F) {
- actor->cutscene = -1;
+ if (actor->csId == 0x7F) {
+ actor->csId = CS_ID_NONE;
}
- if (arg11 != 0) {
- actor->unk20 = arg11;
+ if (halfDaysBits != 0) {
+ actor->halfDaysBits = halfDaysBits;
} else {
- actor->unk20 = 0x3FF;
+ actor->halfDaysBits = HALFDAYBIT_ALL;
}
Actor_AddToCategory(actorCtx, actor, actorInit->type);
@@ -3258,8 +3263,8 @@ 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) {
- return Actor_SpawnAsChildAndCutscene(actorCtx, play, actorId, posX, posY, posZ, rotX, rotY, rotZ, params, -1,
- parent->unk20, parent);
+ return Actor_SpawnAsChildAndCutscene(actorCtx, play, actorId, posX, posY, posZ, rotX, rotY, rotZ, params,
+ CS_ID_NONE, parent->halfDaysBits, parent);
}
void Actor_SpawnTransitionActors(PlayState* play, ActorContext* actorCtx) {
@@ -3275,13 +3280,13 @@ void Actor_SpawnTransitionActors(PlayState* play, ActorContext* actorCtx) {
(transitionActorList->sides[1].room >= 0 &&
(play->roomCtx.curRoom.num == transitionActorList->sides[1].room ||
play->roomCtx.prevRoom.num == transitionActorList->sides[1].room))) {
- s16 rotY = ((transitionActorList->rotY >> 7) & 0x1FF) * (0x10000 / 360.0f);
+ s16 rotY = DEG_TO_BINANG((transitionActorList->rotY >> 7) & 0x1FF);
if (Actor_SpawnAsChildAndCutscene(actorCtx, play, transitionActorList->id & 0x1FFF,
transitionActorList->pos.x, transitionActorList->pos.y,
transitionActorList->pos.z, 0, rotY, 0,
(i << 0xA) + (transitionActorList->params & 0x3FF),
- transitionActorList->rotY & 0x7F, 0x3FF, 0) != NULL) {
+ transitionActorList->rotY & 0x7F, HALFDAYBIT_ALL, 0) != NULL) {
transitionActorList->id = -transitionActorList->id;
}
numTransitionActors = play->doorCtx.numTransitionActors;
@@ -3296,19 +3301,19 @@ Actor* Actor_SpawnEntry(ActorContext* actorCtx, ActorEntry* actorEntry, PlayStat
s16 rotZ = (actorEntry->rot.z >> 7) & 0x1FF;
if (!(actorEntry->id & 0x8000)) {
- rotY *= 0x10000 / 360.0f;
+ rotY = DEG_TO_BINANG(rotY);
} else if (rotY > 180) {
rotY -= 360;
}
if (!(actorEntry->id & 0x4000)) {
- rotX *= 0x10000 / 360.0f;
+ rotX = DEG_TO_BINANG(rotX);
} else if (rotX > 180) {
rotX -= 360;
}
if (!(actorEntry->id & 0x2000)) {
- rotZ *= 0x10000 / 360.0f;
+ rotZ = DEG_TO_BINANG(rotZ);
} else if (rotZ > 180) {
rotZ -= 360;
}
@@ -3325,9 +3330,9 @@ Actor* Actor_Delete(ActorContext* actorCtx, Actor* actor, PlayState* play) {
Actor* newHead;
ActorOverlay* overlayEntry = actor->overlayEntry;
- if ((player != NULL) && (actor == player->unk_730)) {
+ if ((player != NULL) && (actor == player->targetedActor)) {
func_80123DA4(player);
- Camera_ChangeMode(Play_GetCamera(play, Play_GetActiveCamId(play)), 0);
+ Camera_ChangeMode(Play_GetCamera(play, Play_GetActiveCamId(play)), CAM_MODE_NORMAL);
}
if (actor == actorCtx->targetContext.arrowPointedActor) {
@@ -3368,7 +3373,7 @@ s32 func_800BB59C(PlayState* play, Actor* actor) {
void func_800BB604(GameState* gameState, ActorContext* actorCtx, Player* player, s32 actorCategory) {
PlayState* play = (PlayState*)gameState;
f32 temp_f0_2;
- Actor* sp8C;
+ Actor* targetedActor;
Actor* actor;
s32 phi_s2;
CollisionPoly* sp80;
@@ -3377,7 +3382,7 @@ void func_800BB604(GameState* gameState, ActorContext* actorCtx, Player* player,
s32 phi_s2_2;
actor = actorCtx->actorLists[actorCategory].first;
- sp8C = player->unk_730;
+ targetedActor = player->targetedActor;
while (actor != NULL) {
if ((actor->update != NULL) && ((Player*)actor != player)) {
if (actor->flags & (ACTOR_FLAG_40000000 | ACTOR_FLAG_1)) {
@@ -3388,9 +3393,9 @@ void func_800BB604(GameState* gameState, ActorContext* actorCtx, Player* player,
}
}
- if ((actor != sp8C) || (actor->flags & ACTOR_FLAG_80000)) {
+ if ((actor != targetedActor) || (actor->flags & ACTOR_FLAG_80000)) {
temp_f0_2 = func_800B82EC(actor, player, D_801ED8DC);
- phi_s2_2 = (actor->flags & 1) != 0;
+ phi_s2_2 = (actor->flags & ACTOR_FLAG_1) != 0;
if (phi_s2_2) {
phi_s2_2 = temp_f0_2 < D_801ED8C8;
}
@@ -3533,16 +3538,16 @@ s16 func_800BBC20(s16 arg0[2], s16 arg1, s16 arg2, s16 arg3) {
return arg0[0];
}
-void Actor_SpawnBodyParts(Actor* actor, PlayState* play, s32 arg2, Gfx** dList) {
- EnPart* part;
- Actor* spawnedPart;
- MtxF* currentMatrix;
-
+void Actor_SpawnBodyParts(Actor* actor, PlayState* play, s32 partParams, Gfx** dList) {
if (*dList != NULL) {
- currentMatrix = Matrix_GetCurrent();
+ EnPart* part;
+ Actor* spawnedPart;
+ MtxF* currentMatrix = Matrix_GetCurrent();
+
spawnedPart =
Actor_SpawnAsChild(&play->actorCtx, actor, play, ACTOR_EN_PART, currentMatrix->mf[3][0],
- currentMatrix->mf[3][1], currentMatrix->mf[3][2], 0, 0, actor->objBankIndex, arg2);
+ currentMatrix->mf[3][1], currentMatrix->mf[3][2], 0, 0, actor->objBankIndex, partParams);
+
if (spawnedPart != NULL) {
part = (EnPart*)spawnedPart;
@@ -3611,21 +3616,29 @@ void func_800BC154(PlayState* play, ActorContext* actorCtx, Actor* actor, u8 act
}
// Damage flags for EnArrow
-s32 D_801AEDB0[] = {
- 0x800, 0x20, 0x20, 0x800, 0x1000, 0x2000, 0x1, 0x10000, 0x1,
+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
};
-s32 func_800BC188(s32 index) {
- if ((index < 0) || (index >= ARRAY_COUNT(D_801AEDB0))) {
+u32 Actor_GetArrowDmgFlags(s32 params) {
+ if ((params < 0) || (params >= ARRAY_COUNT(sArrowDmgFlags))) {
return 0;
}
- return D_801AEDB0[index];
+ return sArrowDmgFlags[params];
}
-s32 func_800BC1B4(Actor* actor, Actor* arg1, f32 arg2, f32 arg3) {
- if ((arg3 > 0.0f) && (Actor_DistanceBetweenActors(arg1, actor) < ((arg3 * 2.5f) + arg2))) {
- s16 temp_v1 = BINANG_SUB(Actor_YawBetweenActors(arg1, actor), arg1->world.rot.y);
+s32 func_800BC1B4(Actor* actor, Actor* projectile, f32 distance, f32 speed) {
+ if ((speed > 0.0f) && (Actor_WorldDistXYZToActor(projectile, actor) < ((speed * 2.5f) + distance))) {
+ s16 temp_v1 = BINANG_SUB(Actor_WorldYawTowardActor(projectile, actor), projectile->world.rot.y);
if (ABS_ALT(temp_v1) < 0x1400) {
return true;
@@ -3635,36 +3648,36 @@ s32 func_800BC1B4(Actor* actor, Actor* arg1, f32 arg2, f32 arg3) {
return false;
}
-Actor* func_800BC270(PlayState* play, Actor* actor, f32 arg2, s32 arg3) {
+Actor* func_800BC270(PlayState* play, Actor* actor, f32 distance, u32 dmgFlags) {
Actor* itemAction = play->actorCtx.actorLists[ACTORCAT_ITEMACTION].first;
while (itemAction != NULL) {
- if (((itemAction->id == ACTOR_ARMS_HOOK) && (arg3 & 0x80)) ||
- ((itemAction->id == ACTOR_EN_BOOM) && (arg3 & 0x10)) ||
- ((itemAction->id == ACTOR_EN_ARROW) && (func_800BC188(itemAction->params) & arg3))) {
- f32 speedXZ;
+ if (((itemAction->id == ACTOR_ARMS_HOOK) && (dmgFlags & DMG_HOOKSHOT)) ||
+ ((itemAction->id == ACTOR_EN_BOOM) && (dmgFlags & DMG_ZORA_BOOMERANG)) ||
+ ((itemAction->id == ACTOR_EN_ARROW) && (Actor_GetArrowDmgFlags(itemAction->params) & dmgFlags))) {
+ f32 speed;
- if ((itemAction->speedXZ <= 0.0f) && (GET_PLAYER(play)->unk_D57 != 0)) {
+ if ((itemAction->speed <= 0.0f) && (GET_PLAYER(play)->unk_D57 != 0)) {
if (itemAction->id == ACTOR_ARMS_HOOK) {
- speedXZ = 20.0f;
+ speed = 20.0f;
} else if (itemAction->id == ACTOR_EN_BOOM) {
- speedXZ = 12.0f;
+ speed = 12.0f;
} else {
- s32 temp_v0_3 = func_800BC188(itemAction->params);
+ u32 arrowDmgFlags = Actor_GetArrowDmgFlags(itemAction->params);
- if (temp_v0_3 == 1) {
- speedXZ = 80.0f;
- } else if (temp_v0_3 == 0x10000) {
- speedXZ = 60.0f;
+ if (arrowDmgFlags == DMG_DEKU_NUT) {
+ speed = 80.0f;
+ } else if (arrowDmgFlags == DMG_DEKU_BUBBLE) {
+ speed = 60.0f;
} else {
- speedXZ = 150.0f;
+ speed = 150.0f;
}
}
} else {
- speedXZ = itemAction->speedXZ;
+ speed = itemAction->speed;
}
- if (func_800BC1B4(actor, itemAction, arg2, speedXZ)) {
+ if (func_800BC1B4(actor, itemAction, distance, speed)) {
break;
}
}
@@ -3675,13 +3688,13 @@ Actor* func_800BC270(PlayState* play, Actor* actor, f32 arg2, s32 arg3) {
return itemAction;
}
-Actor* func_800BC444(PlayState* play, Actor* actor, f32 arg2) {
+Actor* func_800BC444(PlayState* play, Actor* actor, f32 distance) {
Actor* explosive = play->actorCtx.actorLists[ACTORCAT_EXPLOSIVES].first;
while (explosive != NULL) {
if (((explosive->id == ACTOR_EN_BOM) || (explosive->id == ACTOR_EN_BOM_CHU) ||
(explosive->id == ACTOR_EN_BOMBF))) {
- if (func_800BC1B4(actor, explosive, arg2, explosive->speedXZ)) {
+ if (func_800BC1B4(actor, explosive, distance, explosive->speed)) {
break;
}
}
@@ -3714,10 +3727,10 @@ s16 Actor_TestFloorInDirection(Actor* actor, PlayState* play, f32 distance, s16
actor->world.pos.x += dx;
actor->world.pos.z += dz;
- Actor_UpdateBgCheckInfo(play, actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
Math_Vec3f_Copy(&actor->world.pos, &actorPos);
- ret = actor->bgCheckFlags & 1;
+ ret = actor->bgCheckFlags & BGCHECKFLAG_GROUND;
actor->bgCheckFlags = bgCheckFlags;
@@ -3730,7 +3743,7 @@ s16 Actor_TestFloorInDirection(Actor* actor, PlayState* play, f32 distance, s16
s32 Actor_IsTargeted(PlayState* play, Actor* actor) {
Player* player = GET_PLAYER(play);
- if ((player->stateFlags3 & 0x80000000) && actor->isTargeted) {
+ if ((player->stateFlags3 & PLAYER_STATE3_80000000) && actor->isTargeted) {
return true;
}
@@ -3743,36 +3756,37 @@ s32 Actor_IsTargeted(PlayState* play, Actor* actor) {
s32 Actor_OtherIsTargeted(PlayState* play, Actor* actor) {
Player* player = GET_PLAYER(play);
- if ((player->stateFlags3 & 0x80000000) && !actor->isTargeted) {
+ if ((player->stateFlags3 & PLAYER_STATE3_80000000) && !actor->isTargeted) {
return true;
}
return false;
}
-void func_800BC620(Vec3f* arg0, Vec3f* arg1, u8 alpha, PlayState* play) {
- MtxF sp58;
- f32 sp54;
- Vec3f sp48;
- CollisionPoly* sp44;
+void func_800BC620(Vec3f* pos, Vec3f* scale, u8 alpha, PlayState* play) {
+ MtxF mf;
+ f32 yIntersect;
+ Vec3f adjustedPos;
+ CollisionPoly* poly;
OPEN_DISPS(play->state.gfxCtx);
POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 0x2C);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, alpha);
- sp48.x = arg0->x;
- sp48.y = arg0->y + 1.0f;
- sp48.z = arg0->z;
+ adjustedPos.x = pos->x;
+ adjustedPos.y = pos->y + 1.0f;
+ adjustedPos.z = pos->z;
- sp54 = BgCheck_EntityRaycastFloor2(play, &play->colCtx, &sp44, &sp48);
- if (sp44 != NULL) {
- func_800C0094(sp44, arg0->x, sp54, arg0->z, &sp58);
- Matrix_Put(&sp58);
+ yIntersect = BgCheck_EntityRaycastFloor2(play, &play->colCtx, &poly, &adjustedPos);
+ if (poly != NULL) {
+ func_800C0094(poly, pos->x, yIntersect, pos->z, &mf);
+ Matrix_Put(&mf);
} else {
- Matrix_Translate(arg0->x, arg0->y, arg0->z, MTXMODE_NEW);
+ Matrix_Translate(pos->x, pos->y, pos->z, MTXMODE_NEW);
}
- Matrix_Scale(arg1->x, 1.0f, arg1->z, MTXMODE_APPLY);
+
+ Matrix_Scale(scale->x, 1.0f, scale->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++, gCircleShadowDL);
@@ -3877,12 +3891,12 @@ void Actor_SpawnShieldParticlesMetal(PlayState* play, Vec3f* pos) {
CollisionCheck_SpawnShieldParticlesMetal(play, pos);
}
-void Actor_SetColorFilter(Actor* actor, u16 colorFlag, u16 colorIntensityMax, u16 xluFlag, u16 duration) {
- if ((colorFlag == 0x8000) && !(colorIntensityMax & 0x8000)) {
- Actor_PlaySfxAtPos(actor, NA_SE_EN_LIGHT_ARROW_HIT);
+void Actor_SetColorFilter(Actor* actor, u16 colorFlag, u16 colorIntensityMax, u16 bufFlag, u16 duration) {
+ if ((colorFlag == COLORFILTER_COLORFLAG_GRAY) && !(colorIntensityMax & COLORFILTER_INTENSITY_FLAG)) {
+ Actor_PlaySfx(actor, NA_SE_EN_LIGHT_ARROW_HIT);
}
- actor->colorFilterParams = colorFlag | xluFlag | ((colorIntensityMax & 0xF8) << 5) | duration;
+ actor->colorFilterParams = colorFlag | bufFlag | ((colorIntensityMax & 0xF8) << 5) | duration;
actor->colorFilterTimer = duration;
}
@@ -4051,170 +4065,285 @@ void Actor_GetClosestPosOnPath(Vec3s* points, s32 numPoints, Vec3f* srcPos, Vec3
}
}
-// unused
-s32 func_800BD2B4(PlayState* play, Actor* actor, s16* arg2, f32 arg3, u16 (*textIdCallback)(PlayState*, Actor*),
- s16 (*arg5)(PlayState*, Actor*)) {
+/**
+ * Updates NPC talking state. Checks for a talk request and updates
+ * the talkState parameter when a dialog is ongoing. Otherwise checks if
+ * the actor is onscreen, advertises the interaction in a range and sets
+ * the current text id if necessary.
+ *
+ * The talk state values are defined in the NpcTalkState enum.
+ *
+ * @see NpcTalkState
+ *
+ * @param[in,out] talkState Talk state
+ * @param interactRange The interact (talking) range for the actor
+ * @param getTextId Callback for getting the next text id
+ * @param updateTalkState Callback for getting the next talkState value
+ * @return True if a new dialog was started (player talked to the actor). False otherwise.
+ */
+s32 Npc_UpdateTalking(PlayState* play, Actor* actor, s16* talkState, f32 interactRange, NpcGetTextIdFunc getTextId,
+ NpcUpdateTalkStateFunc updateTalkState) {
if (Actor_ProcessTalkRequest(actor, &play->state)) {
- *arg2 = true;
+ *talkState = NPC_TALK_STATE_TALKING;
return true;
- } else if (*arg2) {
- *arg2 = arg5(play, actor);
- return false;
- } else if (!Actor_OnScreen(play, actor)) {
- return false;
- } else if (!func_800B8614(actor, play, arg3)) {
- return false;
- } else {
- actor->textId = textIdCallback(play, actor);
+ }
+
+ if (*talkState != NPC_TALK_STATE_IDLE) {
+ *talkState = updateTalkState(play, actor);
return false;
}
+
+ if (!Actor_OnScreen(play, actor)) {
+ return false;
+ }
+
+ if (!func_800B8614(actor, play, interactRange)) {
+ return false;
+ }
+
+ actor->textId = getTextId(play, actor);
+
+ return false;
}
typedef struct {
- /* 0x00 */ s16 unk_00;
- /* 0x02 */ s16 unk_02;
- /* 0x04 */ s16 unk_04;
- /* 0x06 */ s16 unk_06;
- /* 0x08 */ s16 unk_08;
- /* 0x0A */ s16 unk_0A;
- /* 0x0C */ u8 unk_0C;
-} struct_801AEE38_0; // size = 0x10
+ /* 0x0 */ s16 maxHeadYaw;
+ /* 0x2 */ s16 minHeadPitch;
+ /* 0x4 */ s16 maxHeadPitch;
+ /* 0x6 */ s16 maxTorsoYaw;
+ /* 0x8 */ s16 minTorsoPitch;
+ /* 0xA */ s16 maxTorsoPitch;
+ /* 0xC */ u8 rotateYaw;
+} NpcTrackingRotLimits; // size = 0x10
typedef struct {
- /* 0x00 */ struct_801AEE38_0 sub_00;
- /* 0x10 */ f32 unk_10;
- /* 0x14 */ s16 unk_14;
-} struct_801AEE38; // size = 0x18
+ /* 0x00 */ NpcTrackingRotLimits rotLimits;
+ // Fields specific to NPC_TRACKING_PLAYER_AUTO_TURN mode
+ /* 0x10 */ f32 autoTurnDistanceRange; // Max distance to player to enable tracking and auto-turn
+ /* 0x14 */ s16 maxYawForPlayerTracking; // Player is tracked if within this yaw
+} NpcTrackingParams; // size = 0x18
-struct_801AEE38 D_801AEE38[] = {
- { { 0x1C20, 0xE390, 0x1C70, 0x1554, 0x0000, 0x0000, 0x0000 }, 170.0f, 0x3FFC },
- { { 0x2AA8, 0xEAAC, 0x1554, 0x1554, 0xF8E4, 0x0E38, 0x0001 }, 170.0f, 0x3FFC },
- { { 0x31C4, 0xE390, 0x0E38, 0x0E38, 0xF1C8, 0x071C, 0x0001 }, 170.0f, 0x3FFC },
- { { 0x1554, 0xF1C8, 0x0000, 0x071C, 0xF8E4, 0x0000, 0x0001 }, 170.0f, 0x3FFC },
- { { 0x2AA8, 0xF8E4, 0x071C, 0x0E38, 0xD558, 0x2AA8, 0x0001 }, 170.0f, 0x3FFC },
- { { 0x0000, 0xE390, 0x2AA8, 0x3FFC, 0xF1C8, 0x0E38, 0x0001 }, 170.0f, 0x3FFC },
- { { 0x2AA8, 0xF1C8, 0x0E38, 0x0E38, 0x0000, 0x0000, 0x0001 }, 0.0f, 0x0000 },
- { { 0x2AA8, 0xF1C8, 0x0000, 0x0E38, 0x0000, 0x1C70, 0x0001 }, 0.0f, 0x0000 },
- { { 0x2AA8, 0xF1C8, 0xF1C8, 0x0000, 0x0000, 0x0000, 0x0001 }, 0.0f, 0x0000 },
- { { 0x071C, 0xF1C8, 0x0E38, 0x1C70, 0x0000, 0x0000, 0x0001 }, 0.0f, 0x0000 },
- { { 0x0E38, 0xF1C8, 0x0000, 0x1C70, 0x0000, 0x0E38, 0x0001 }, 0.0f, 0x0000 },
- { { 0x2AA8, 0xE390, 0x1C70, 0x0E38, 0xF1C8, 0x0E38, 0x0001 }, 0.0f, 0x0000 },
- { { 0x18E2, 0xF1C8, 0x0E38, 0x0E38, 0x0000, 0x0000, 0x0001 }, 0.0f, 0x0000 },
- { { 0x2A6C, 0xE390, 0x1C70, 0x1554, 0x0000, 0x0000, 0x0000 }, 170.0f, 0x3FFC },
+/**
+ * Npc tracking angle limit presets to use with Npc_TrackPoint.
+ *
+ * @see Npc_TrackPoint
+ */
+NpcTrackingParams sNpcTrackingPresets[] = {
+ { { 0x1C20, 0xE390, 0x1C70, 0x1554, 0x0000, 0x0000, false }, 170.0f, 0x3FFC },
+ { { 0x2AA8, 0xEAAC, 0x1554, 0x1554, 0xF8E4, 0x0E38, true }, 170.0f, 0x3FFC },
+ { { 0x31C4, 0xE390, 0x0E38, 0x0E38, 0xF1C8, 0x071C, true }, 170.0f, 0x3FFC },
+ { { 0x1554, 0xF1C8, 0x0000, 0x071C, 0xF8E4, 0x0000, true }, 170.0f, 0x3FFC },
+ { { 0x2AA8, 0xF8E4, 0x071C, 0x0E38, 0xD558, 0x2AA8, true }, 170.0f, 0x3FFC },
+ { { 0x0000, 0xE390, 0x2AA8, 0x3FFC, 0xF1C8, 0x0E38, true }, 170.0f, 0x3FFC },
+ { { 0x2AA8, 0xF1C8, 0x0E38, 0x0E38, 0x0000, 0x0000, true }, 0.0f, 0x0000 },
+ { { 0x2AA8, 0xF1C8, 0x0000, 0x0E38, 0x0000, 0x1C70, true }, 0.0f, 0x0000 },
+ { { 0x2AA8, 0xF1C8, 0xF1C8, 0x0000, 0x0000, 0x0000, true }, 0.0f, 0x0000 },
+ { { 0x071C, 0xF1C8, 0x0E38, 0x1C70, 0x0000, 0x0000, true }, 0.0f, 0x0000 },
+ { { 0x0E38, 0xF1C8, 0x0000, 0x1C70, 0x0000, 0x0E38, true }, 0.0f, 0x0000 },
+ { { 0x2AA8, 0xE390, 0x1C70, 0x0E38, 0xF1C8, 0x0E38, true }, 0.0f, 0x0000 },
+ { { 0x18E2, 0xF1C8, 0x0E38, 0x0E38, 0x0000, 0x0000, true }, 0.0f, 0x0000 },
+ { { 0x2A6C, 0xE390, 0x1C70, 0x1554, 0x0000, 0x0000, false }, 170.0f, 0x3FFC },
};
-void func_800BD384(Actor* actor, struct_800BD888_arg1* arg1, s16 arg2, s16 arg3, s16 arg4, s16 arg5, s16 arg6, s16 arg7,
- u8 arg8) {
- s16 sp46;
- s16 sp44;
- s16 temp2;
- s16 sp40;
- s16 temp1;
- Vec3f sp30;
+/**
+ * Smoothly turns the actor's whole body and updates torso and head rotations in
+ * NpcInteractInfo so that the actor tracks the point specified in NpcInteractInfo.trackPos.
+ * Rotations are limited to specified angles.
+ *
+ * Head and torso rotation angles are determined by calculating the pitch and yaw
+ * from the actor position to the given target position.
+ *
+ * The y position of the actor is offset by NpcInteractInfo.yOffset
+ * before calculating the angles. It can be used to configure the height difference
+ * between the actor and the target.
+ *
+ * @param maxHeadYaw maximum head yaw difference from neutral position
+ * @param maxHeadPitch maximum head pitch angle
+ * @param minHeadPitch minimum head pitch angle
+ * @param maxTorsoYaw maximum torso yaw difference from neutral position
+ * @param maxTorsoPitch maximum torso pitch angle
+ * @param minTorsoPitch minimum torso pitch angle
+ * @param rotateYaw if true, the actor's yaw (shape.rot.y) is updated to turn the actor's whole body
+ */
+void Npc_TrackPointWithLimits(Actor* actor, NpcInteractInfo* interactInfo, s16 maxHeadYaw, s16 maxHeadPitch,
+ s16 minHeadPitch, s16 maxTorsoYaw, s16 maxTorsoPitch, s16 minTorsoPitch, u8 rotateYaw) {
+ s16 pitchTowardsTarget;
+ s16 yawTowardsTarget;
+ s16 torsoPitch;
+ s16 bodyYawDiff;
+ s16 temp;
+ Vec3f offsetActorPos;
- sp30.x = actor->world.pos.x;
- sp30.y = actor->world.pos.y + arg1->unk_14;
- sp30.z = actor->world.pos.z;
+ offsetActorPos.x = actor->world.pos.x;
+ offsetActorPos.y = actor->world.pos.y + interactInfo->yOffset;
+ offsetActorPos.z = actor->world.pos.z;
- sp46 = Math_Vec3f_Pitch(&sp30, &arg1->unk_18);
- sp44 = Math_Vec3f_Yaw(&sp30, &arg1->unk_18);
- sp40 = Math_Vec3f_Yaw(&actor->world.pos, &arg1->unk_18) - actor->shape.rot.y;
+ pitchTowardsTarget = Math_Vec3f_Pitch(&offsetActorPos, &interactInfo->trackPos);
+ yawTowardsTarget = Math_Vec3f_Yaw(&offsetActorPos, &interactInfo->trackPos);
+ bodyYawDiff = Math_Vec3f_Yaw(&actor->world.pos, &interactInfo->trackPos) - actor->shape.rot.y;
- temp1 = CLAMP(sp40, -arg2, arg2);
- Math_SmoothStepToS(&arg1->unk_08.y, temp1, 6, 2000, 1);
+ temp = CLAMP(bodyYawDiff, -maxHeadYaw, maxHeadYaw);
+ Math_SmoothStepToS(&interactInfo->headRot.y, temp, 6, 0x7D0, 1);
- temp1 = (ABS_ALT(sp40) >= 0x8000) ? 0 : ABS_ALT(sp40);
- arg1->unk_08.y = CLAMP(arg1->unk_08.y, -temp1, temp1);
+ temp = (ABS_ALT(bodyYawDiff) >= 0x8000) ? 0 : ABS_ALT(bodyYawDiff);
+ interactInfo->headRot.y = CLAMP(interactInfo->headRot.y, -temp, temp);
- sp40 -= arg1->unk_08.y;
+ bodyYawDiff -= interactInfo->headRot.y;
- temp1 = CLAMP(sp40, -arg5, arg5);
- Math_SmoothStepToS(&arg1->unk_0E.y, temp1, 6, 2000, 1);
+ temp = CLAMP(bodyYawDiff, -maxTorsoYaw, maxTorsoYaw);
+ Math_SmoothStepToS(&interactInfo->torsoRot.y, temp, 6, 0x7D0, 1);
- temp1 = (ABS_ALT(sp40) >= 0x8000) ? 0 : ABS_ALT(sp40);
- arg1->unk_0E.y = CLAMP(arg1->unk_0E.y, -temp1, temp1);
+ temp = (ABS_ALT(bodyYawDiff) >= 0x8000) ? 0 : ABS_ALT(bodyYawDiff);
+ interactInfo->torsoRot.y = CLAMP(interactInfo->torsoRot.y, -temp, temp);
- if (arg8) {
- Math_SmoothStepToS(&actor->shape.rot.y, sp44, 6, 2000, 1);
+ if (rotateYaw) {
+ Math_SmoothStepToS(&actor->shape.rot.y, yawTowardsTarget, 6, 0x7D0, 1);
}
- temp1 = CLAMP(sp46, arg4, (s16)(u16)arg3);
- Math_SmoothStepToS(&arg1->unk_08.x, temp1, 6, 2000, 1);
+ temp = CLAMP(pitchTowardsTarget, minHeadPitch, (s16)(u16)maxHeadPitch);
+ Math_SmoothStepToS(&interactInfo->headRot.x, temp, 6, 2000, 1);
- temp2 = sp46 - arg1->unk_08.x;
+ torsoPitch = pitchTowardsTarget - interactInfo->headRot.x;
- temp1 = CLAMP(temp2, arg7, arg6);
- Math_SmoothStepToS(&arg1->unk_0E.x, temp1, 6, 2000, 1);
+ temp = CLAMP(torsoPitch, minTorsoPitch, maxTorsoPitch);
+ Math_SmoothStepToS(&interactInfo->torsoRot.x, temp, 6, 0x7D0, 1);
}
// unused
-s16 func_800BD6B8(s16 arg0) {
- return D_801AEE38[arg0].unk_14;
+s16 Npc_GetTrackingPresetMaxPlayerYaw(s16 presetIndex) {
+ return sNpcTrackingPresets[presetIndex].maxYawForPlayerTracking;
}
-s16 func_800BD6E4(Actor* actor, struct_800BD888_arg1* arg1, f32 arg2, s16 arg3, s16 flag) {
+/**
+ * Handles NPC tracking modes and auto-turning towards the player when
+ * NPC_TRACKING_PLAYER_AUTO_TURN tracking mode is used.
+ *
+ * Returns a tracking mode that will determine which actor limbs
+ * will be rotated towards the target.
+ *
+ * When the player is behind the actor (i.e. not in the yaw range in front of the actor
+ * defined by maxYawForPlayerTracking), the actor will start an auto-turn sequence:
+ * - look forward for 30-60 frames
+ * - turn head to look at the player for 10-20 frames
+ * - look forward for 30-60 frames
+ * - turn the entire body to face the player
+ *
+ * @param distanceRange Max distance to player that tracking and auto-turning will be active for
+ * @param maxYawForPlayerTracking Maximum angle for tracking the player.
+ * @param trackingMode The tracking mode selected by the actor. If this is not
+ * NPC_TRACKING_PLAYER_AUTO_TURN this function does nothing
+ *
+ * @return The tracking mode (NpcTrackingMode) to use for the current frame.
+ */
+s16 Npc_UpdateAutoTurn(Actor* actor, NpcInteractInfo* interactInfo, f32 distanceRange, s16 maxYawForPlayerTracking,
+ s16 trackingMode) {
s32 pad;
+ s16 yaw;
+ s16 yawDiff;
- if (flag) {
- return flag;
- } else if (arg1->unk_00 != 0) {
- return 4;
- } else if (arg2 < Math_Vec3f_DistXYZ(&actor->world.pos, &arg1->unk_18)) {
- arg1->unk_04 = 0;
- arg1->unk_06 = 0;
- return 1;
- } else {
- s16 yaw = Math_Vec3f_Yaw(&actor->world.pos, &arg1->unk_18);
- s16 phi_a0 = ABS_ALT(BINANG_SUB(yaw, actor->shape.rot.y));
+ if (trackingMode != NPC_TRACKING_PLAYER_AUTO_TURN) {
+ return trackingMode;
+ }
- if (arg3 >= phi_a0) {
- arg1->unk_04 = 0;
- arg1->unk_06 = 0;
- return 2;
- } else if (DECR(arg1->unk_04) != 0) {
- return arg1->unk_02;
- } else {
- switch (arg1->unk_06) {
- case 0:
- case 2:
- arg1->unk_04 = Rand_S16Offset(30, 30);
- arg1->unk_06++;
- return 1;
+ if (interactInfo->talkState != NPC_TALK_STATE_IDLE) {
+ // When talking, always fully turn to face the player
+ return NPC_TRACKING_FULL_BODY;
+ }
- case 1:
- arg1->unk_04 = Rand_S16Offset(10, 10);
- arg1->unk_06++;
- return 3;
+ if (distanceRange < Math_Vec3f_DistXYZ(&actor->world.pos, &interactInfo->trackPos)) {
+ // Player is too far away, do not track
+ interactInfo->autoTurnTimer = 0;
+ interactInfo->autoTurnState = 0;
+ return NPC_TRACKING_NONE;
+ }
- default:
- return 4;
- }
- }
+ yaw = Math_Vec3f_Yaw(&actor->world.pos, &interactInfo->trackPos);
+ yawDiff = ABS_ALT(BINANG_SUB(yaw, actor->shape.rot.y));
+
+ if (maxYawForPlayerTracking >= yawDiff) {
+ // Player is in front of the actor, track with the head and the torso
+ interactInfo->autoTurnTimer = 0;
+ interactInfo->autoTurnState = 0;
+ return NPC_TRACKING_HEAD_AND_TORSO;
+ }
+
+ // Player is behind the actor, run the auto-turn sequence.
+
+ if (DECR(interactInfo->autoTurnTimer) != 0) {
+ // While the timer is still running, return the previous tracking mode
+ return interactInfo->trackingMode;
+ }
+
+ switch (interactInfo->autoTurnState) {
+ case 0:
+ case 2:
+ // Just stand still, not tracking the player
+ interactInfo->autoTurnTimer = Rand_S16Offset(30, 30);
+ interactInfo->autoTurnState++;
+ return NPC_TRACKING_NONE;
+
+ case 1:
+ // Glance at the player by only turning the head
+ interactInfo->autoTurnTimer = Rand_S16Offset(10, 10);
+ interactInfo->autoTurnState++;
+ return NPC_TRACKING_HEAD;
+
+ default:
+ // Auto-turn sequence complete, turn towards the player
+ return NPC_TRACKING_FULL_BODY;
}
}
-// This function is very similar to OoT's func_80034A14
-void func_800BD888(Actor* actor, struct_800BD888_arg1* arg1, s16 arg2, s16 arg3) {
- struct_801AEE38_0 sp38;
+/**
+ * Rotates the actor's whole body, torso and head tracking the point specified in NpcInteractInfo.trackPos.
+ * Uses angle limits from a preset selected from from sNpcTrackingPresets.
+ *
+ * The trackingMode parameter controls whether the head and torso are turned towards the target.
+ * If not, they are smoothly turned towards zero. Setting the parameter to NPC_TRACKING_FULL_BODY
+ * causes the actor's whole body to be rotated to face the target.
+ *
+ * If NPC_TRACKING_PLAYER_AUTO_TURN is used, the actor will track the player with its head and torso as long
+ * as the player is in front of the actor (within a yaw angle specified in the option preset).
+ * If the player is outside of this angle, the actor will turn to face the player after a while.
+ *
+ * @see Npc_UpdateAutoTurn
+ * @see sNpcTrackingPresets
+ * @see NpcTrackingMode
+ *
+ * @param presetIndex The index to a preset in sNpcTrackingPresets
+ * @param trackingMode A value from NpcTrackingMode enum
+ */
+void Npc_TrackPoint(Actor* actor, NpcInteractInfo* interactInfo, s16 presetIndex, s16 trackingMode) {
+ NpcTrackingRotLimits rotLimits;
- arg1->unk_02 = func_800BD6E4(actor, arg1, D_801AEE38[arg2].unk_10, D_801AEE38[arg2].unk_14, arg3);
- sp38 = D_801AEE38[arg2].sub_00;
+ interactInfo->trackingMode =
+ Npc_UpdateAutoTurn(actor, interactInfo, sNpcTrackingPresets[presetIndex].autoTurnDistanceRange,
+ sNpcTrackingPresets[presetIndex].maxYawForPlayerTracking, trackingMode);
- switch (arg1->unk_02) {
- case 1:
- sp38.unk_00 = 0;
- sp38.unk_04 = 0;
- sp38.unk_02 = 0;
- case 3:
- sp38.unk_06 = 0;
- sp38.unk_0A = 0;
- sp38.unk_08 = 0;
- case 2:
- sp38.unk_0C = 0;
+ rotLimits = sNpcTrackingPresets[presetIndex].rotLimits;
+
+ switch (interactInfo->trackingMode) {
+ case NPC_TRACKING_NONE:
+ rotLimits.maxHeadYaw = 0;
+ rotLimits.maxHeadPitch = 0;
+ rotLimits.minHeadPitch = 0;
+ // fallthrough
+ case NPC_TRACKING_HEAD:
+ rotLimits.maxTorsoYaw = 0;
+ rotLimits.maxTorsoPitch = 0;
+ rotLimits.minTorsoPitch = 0;
+ // fallthrough
+ case NPC_TRACKING_HEAD_AND_TORSO:
+ rotLimits.rotateYaw = false;
+ break;
+
+ default:
+ break;
}
- func_800BD384(actor, arg1, sp38.unk_00, sp38.unk_04, sp38.unk_02, sp38.unk_06, sp38.unk_0A, sp38.unk_08,
- sp38.unk_0C);
+ Npc_TrackPointWithLimits(actor, interactInfo, rotLimits.maxHeadYaw, rotLimits.maxHeadPitch, rotLimits.minHeadPitch,
+ rotLimits.maxTorsoYaw, rotLimits.maxTorsoPitch, rotLimits.minTorsoPitch,
+ rotLimits.rotateYaw);
}
Gfx D_801AEF88[] = {
@@ -4231,19 +4360,16 @@ Gfx D_801AEFA0[] = {
};
Gfx* func_800BD9A0(GraphicsContext* gfxCtx) {
- Gfx* displayListHead;
- Gfx* displayList;
+ Gfx* gfxHead = GRAPH_ALLOC(gfxCtx, 2 * sizeof(Gfx));
+ Gfx* gfx = gfxHead;
- displayListHead = displayList = GRAPH_ALLOC(gfxCtx, sizeof(Gfx) * 2);
+ gDPSetRenderMode(
+ gfx++, AA_EN | Z_CMP | Z_UPD | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL | G_RM_FOG_SHADE_A,
+ AA_EN | Z_CMP | Z_UPD | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL |
+ GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA));
+ gSPEndDisplayList(gfx++);
- gDPSetRenderMode(displayListHead++,
- AA_EN | Z_CMP | Z_UPD | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL |
- G_RM_FOG_SHADE_A,
- AA_EN | Z_CMP | Z_UPD | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL |
- GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA));
- gSPEndDisplayList(displayListHead++);
-
- return displayList;
+ return gfxHead;
}
// unused
@@ -4278,7 +4404,7 @@ s16 func_800BDB6C(Actor* actor, PlayState* play, s16 arg2, f32 arg3) {
Player* player = GET_PLAYER(play);
f32 phi_f2;
- if ((play->csCtx.state != 0) || gDbgCamEnabled) {
+ if ((play->csCtx.state != CS_STATE_IDLE) || gDbgCamEnabled) {
phi_f2 = Math_Vec3f_DistXYZ(&actor->world.pos, &play->view.eye) * 0.25f;
} else {
phi_f2 = Math_Vec3f_DistXYZ(&actor->world.pos, &player->actor.world.pos);
@@ -4339,7 +4465,7 @@ Actor* Actor_FindNearby(PlayState* play, Actor* inActor, s16 actorId, u8 actorCa
continue;
}
- if (Actor_DistanceBetweenActors(inActor, actor) <= distance) {
+ if (Actor_WorldDistXYZToActor(inActor, actor) <= distance) {
return actor;
}
@@ -4376,15 +4502,15 @@ void Actor_SetDropFlag(Actor* actor, ColliderInfo* colInfo) {
ColliderInfo* acHitInfo = colInfo->acHitInfo;
if (acHitInfo == NULL) {
- actor->dropFlag = 0;
- } else if (acHitInfo->toucher.dmgFlags & 0x800) { // DMG_FIRE_ARROW
- actor->dropFlag = 1;
- } else if (acHitInfo->toucher.dmgFlags & 0x1000) { // DMG_ICE_ARROW
- actor->dropFlag = 2;
- } else if (acHitInfo->toucher.dmgFlags & 0x2000) { // DMG_LIGHT_ARROW
- actor->dropFlag = 0x20;
+ actor->dropFlag = DROPFLAG_NONE;
+ } else if (acHitInfo->toucher.dmgFlags & DMG_FIRE_ARROW) {
+ actor->dropFlag = DROPFLAG_1;
+ } else if (acHitInfo->toucher.dmgFlags & DMG_ICE_ARROW) {
+ actor->dropFlag = DROPFLAG_2;
+ } else if (acHitInfo->toucher.dmgFlags & DMG_LIGHT_ARROW) {
+ actor->dropFlag = DROPFLAG_20;
} else {
- actor->dropFlag = 0;
+ actor->dropFlag = DROPFLAG_NONE;
}
}
@@ -4394,23 +4520,23 @@ void Actor_SetDropFlagJntSph(Actor* actor, ColliderJntSph* jntSphere) {
ColliderInfo* acHitInfo;
s32 flag;
- actor->dropFlag = 0;
+ actor->dropFlag = DROPFLAG_NONE;
for (i = jntSphere->count - 1; i >= 0; i--) {
jntElement = &jntSphere->elements[i];
acHitInfo = jntElement->info.acHitInfo;
if (acHitInfo == NULL) {
- flag = 0;
+ flag = DROPFLAG_NONE;
} else {
s32 dmgFlags = acHitInfo->toucher.dmgFlags;
- if (dmgFlags & 0x800) {
- flag = 1;
- } else if (dmgFlags & 0x1000) {
- flag = 2;
+ if (dmgFlags & DMG_FIRE_ARROW) {
+ flag = DROPFLAG_1;
+ } else if (dmgFlags & DMG_ICE_ARROW) {
+ flag = DROPFLAG_2;
} else {
- flag = (dmgFlags & 0x2000) ? 0x20 : 0;
+ flag = (dmgFlags & DMG_LIGHT_ARROW) ? DROPFLAG_20 : DROPFLAG_NONE;
}
}
@@ -4418,19 +4544,19 @@ void Actor_SetDropFlagJntSph(Actor* actor, ColliderJntSph* jntSphere) {
}
}
-void func_800BE33C(Vec3f* arg0, Vec3f* arg1, Vec3s* arg2, s32 arg3) {
+void func_800BE33C(Vec3f* arg0, Vec3f* arg1, Vec3s* dst, s32 arg3) {
f32 xDiff = arg1->x - arg0->x;
f32 zDiff = arg1->z - arg0->z;
f32 yDiff = arg3 ? (arg1->y - arg0->y) : (arg0->y - arg1->y);
- arg2->y = Math_FAtan2F(zDiff, xDiff);
- arg2->x = Math_FAtan2F(sqrtf(SQ(xDiff) + SQ(zDiff)), yDiff);
+ dst->y = Math_Atan2S_XY(zDiff, xDiff);
+ dst->x = Math_Atan2S_XY(sqrtf(SQ(xDiff) + SQ(zDiff)), yDiff);
}
void func_800BE3D0(Actor* actor, s16 angle, Vec3s* arg2) {
- f32 sp44;
- f32 sp40;
- f32 sp3C;
+ f32 floorPolyNormalX;
+ f32 floorPolyNormalY;
+ f32 floorPolyNormalZ;
f32 sp38;
f32 sp34;
f32 sp30;
@@ -4440,17 +4566,17 @@ void func_800BE3D0(Actor* actor, s16 angle, Vec3s* arg2) {
if (actor->floorPoly != NULL) {
CollisionPoly* floorPoly = actor->floorPoly;
- sp44 = COLPOLY_GET_NORMAL(floorPoly->normal.x);
- sp40 = COLPOLY_GET_NORMAL(floorPoly->normal.y);
- sp3C = COLPOLY_GET_NORMAL(floorPoly->normal.z);
+ floorPolyNormalX = COLPOLY_GET_NORMAL(floorPoly->normal.x);
+ floorPolyNormalY = COLPOLY_GET_NORMAL(floorPoly->normal.y);
+ floorPolyNormalZ = COLPOLY_GET_NORMAL(floorPoly->normal.z);
sp38 = Math_SinS(angle);
sp34 = Math_CosS(angle);
- arg2->x = (s16)-Math_Atan2S((-(sp44 * sp38) - (sp3C * sp34)) * sp40, 1.0f);
+ arg2->x = (s16)-Math_Atan2S((-(floorPolyNormalX * sp38) - (floorPolyNormalZ * sp34)) * floorPolyNormalY, 1.0f);
sp2C = Math_SinS(angle - 0x3FF7);
sp30 = Math_CosS(angle - 0x3FF7);
- arg2->z = (s16)-Math_Atan2S((-(sp44 * sp2C) - (sp3C * sp30)) * sp40, 1.0f);
+ arg2->z = (s16)-Math_Atan2S((-(floorPolyNormalX * sp2C) - (floorPolyNormalZ * sp30)) * floorPolyNormalY, 1.0f);
}
}
@@ -4459,7 +4585,7 @@ void func_800BE504(Actor* actor, ColliderCylinder* collider) {
if ((collider->info.acHitInfo->toucher.dmgFlags & (0x10000 | 0x2000 | 0x1000 | 0x800 | 0x20))) {
actor->world.rot.y = collider->base.ac->shape.rot.y;
} else {
- actor->world.rot.y = Actor_YawBetweenActors(collider->base.ac, actor);
+ actor->world.rot.y = Actor_WorldYawTowardActor(collider->base.ac, actor);
}
}
@@ -4467,7 +4593,7 @@ void func_800BE568(Actor* actor, ColliderSphere* collider) {
if (collider->info.acHitInfo->toucher.dmgFlags & (0x10000 | 0x2000 | 0x1000 | 0x800 | 0x20)) {
actor->world.rot.y = collider->base.ac->shape.rot.y;
} else {
- actor->world.rot.y = Actor_YawBetweenActors(collider->base.ac, actor);
+ actor->world.rot.y = Actor_WorldYawTowardActor(collider->base.ac, actor);
}
}
@@ -4476,7 +4602,7 @@ void func_800BE5CC(Actor* actor, ColliderJntSph* collider, s32 colliderIndex) {
(0x10000 | 0x2000 | 0x1000 | 0x800 | 0x20)) {
actor->world.rot.y = collider->base.ac->shape.rot.y;
} else {
- actor->world.rot.y = Actor_YawBetweenActors(collider->base.ac, actor);
+ actor->world.rot.y = Actor_WorldYawTowardActor(collider->base.ac, actor);
}
}
@@ -4519,13 +4645,13 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16
// Apply sfx along with damage effect
if ((actor != NULL) && (effectAlpha > 0.05f) && (play->gameOverCtx.state == GAMEOVER_INACTIVE)) {
if (type == ACTOR_DRAW_DMGEFF_FIRE) {
- Actor_PlaySfxAtPos(actor, NA_SE_EV_BURN_OUT - SFX_FLAG);
+ Actor_PlaySfx(actor, NA_SE_EV_BURN_OUT - SFX_FLAG);
} else if (type == ACTOR_DRAW_DMGEFF_BLUE_FIRE) {
- Actor_PlaySfxAtPos(actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG);
+ Actor_PlaySfx(actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG);
} else if (type == ACTOR_DRAW_DMGEFF_FROZEN_SFX) {
- Actor_PlaySfxAtPos(actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
+ Actor_PlaySfx(actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
} else if ((type == ACTOR_DRAW_DMGEFF_LIGHT_ORBS) || (type == ACTOR_DRAW_DMGEFF_BLUE_LIGHT_ORBS)) {
- Actor_PlaySfxAtPos(actor, NA_SE_EN_COMMON_DEADLIGHT - SFX_FLAG);
+ Actor_PlaySfx(actor, NA_SE_EN_COMMON_DEADLIGHT - SFX_FLAG);
}
}
@@ -4586,7 +4712,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16
gDPSetColorDither(POLY_XLU_DISP++, G_CD_BAYER);
gDPSetAlphaDither(POLY_XLU_DISP++, G_AD_PATTERN);
- gSPDisplayList(POLY_XLU_DISP++, gFrozenSteamDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFrozenSteamMaterialDL);
alpha = effectAlpha * 100.0f;
if (alpha > 100.0f) {
@@ -4609,7 +4735,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, gFrozenSteamVtxDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFrozenSteamModelDL);
}
break;
@@ -4668,7 +4794,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16
lightOrbsScale = ((KREG(19) * 0.01f) + 4.0f) * effectScale;
- gSPDisplayList(POLY_XLU_DISP++, gLightOrb1DL);
+ gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL);
alpha = effectAlpha * 255.0f;
if (alpha > 255.0f) {
@@ -4699,7 +4825,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, gLightOrbVtxDL);
+ gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL);
}
break;
@@ -4717,7 +4843,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16
gSPSegment(POLY_XLU_DISP++, 0x08,
Lib_SegmentedToVirtual(sElectricSparkTextures[play->gameplayFrames % 4]));
- gSPDisplayList(POLY_XLU_DISP++, gElectricSparkDL);
+ gSPDisplayList(POLY_XLU_DISP++, gElectricSparkMaterialDL);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, (u8)(sREG(16) + 255), (u8)(sREG(17) + 255), (u8)(sREG(18) + 150),
(u8)(sREG(19) + 255));
@@ -4739,7 +4865,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, gElectricSparkVtxDL);
+ gSPDisplayList(POLY_XLU_DISP++, gElectricSparkModelDL);
// second electric spark
Matrix_RotateXFApply(Rand_ZeroFloat(2 * M_PI));
@@ -4751,7 +4877,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, gElectricSparkVtxDL);
+ gSPDisplayList(POLY_XLU_DISP++, gElectricSparkModelDL);
}
break;
@@ -4776,7 +4902,7 @@ void Actor_SpawnIceEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s32 l
SoundSource_PlaySfxAtFixedWorldPos(play, &actor->world.pos, 30, NA_SE_EV_ICE_BROKEN);
for (i = 0; i < limbPosCount; i++) {
- yaw = Actor_YawToPoint(actor, limbPos);
+ yaw = Actor_WorldYawTowardPoint(actor, limbPos);
for (j = 0; j < effectsPerLimb; j++) {
randomYaw = ((s32)Rand_Next() >> 0x13) + yaw;
diff --git a/src/code/z_actor_dlftbls.c b/src/code/z_actor_dlftbls.c
index 77b6546ff..1008cceab 100644
--- a/src/code/z_actor_dlftbls.c
+++ b/src/code/z_actor_dlftbls.c
@@ -1,752 +1,81 @@
#include "global.h"
-#include "initvars.h"
-#define ACTOR_OVERLAY(name, allocType) \
- { \
- SEGMENT_ROM_START(ovl_##name), SEGMENT_ROM_END(ovl_##name), SEGMENT_START(ovl_##name), \
- SEGMENT_END(ovl_##name), NULL, &name##_InitVars, NULL, allocType, 0 \
- }
+// Init Vars declarations (also used in the table below)
+#define DEFINE_ACTOR(name, _enumValue, _allocType, _debugName) extern ActorInit name##_InitVars;
+#define DEFINE_ACTOR_INTERNAL(name, _enumValue, _allocType, _debugName) extern ActorInit name##_InitVars;
+#define DEFINE_ACTOR_UNSET(_enumValue)
-#define ACTOR_OVERLAY_INTERNAL(name, allocType) \
- { 0, 0, NULL, NULL, NULL, &name##_InitVars, NULL, allocType, 0 }
+#include "tables/actor_table.h"
-#define ACTOR_OVERLAY_UNSET \
- { 0 }
+#undef DEFINE_ACTOR
+#undef DEFINE_ACTOR_INTERNAL
+#undef DEFINE_ACTOR_UNSET
+
+// Actor Overlay Table definition
+#define DEFINE_ACTOR(name, _enumValue, allocType, _debugName) \
+ { SEGMENT_ROM_START(ovl_##name), \
+ SEGMENT_ROM_END(ovl_##name), \
+ SEGMENT_START(ovl_##name), \
+ SEGMENT_END(ovl_##name), \
+ NULL, \
+ &name##_InitVars, \
+ NULL, \
+ allocType, \
+ 0 },
+
+#define DEFINE_ACTOR_INTERNAL(name, _enumValue, allocType, _debugName) \
+ { 0, 0, NULL, NULL, NULL, &name##_InitVars, NULL, allocType, 0 },
+
+#define DEFINE_ACTOR_UNSET(_enumValue) { 0 },
ActorOverlay gActorOverlayTable[] = {
- ACTOR_OVERLAY_INTERNAL(Player, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Test, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_GirlA, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Part, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Light, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Door, ALLOCTYPE_PERMANENT),
- ACTOR_OVERLAY(En_Box, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Pametfrog, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Okuta, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Bom, ALLOCTYPE_PERMANENT),
- ACTOR_OVERLAY(En_Wallmas, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Dodongo, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Firefly, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Horse, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_INTERNAL(En_Item00, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Arrow, ALLOCTYPE_PERMANENT),
- ACTOR_OVERLAY(En_Elf, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Niw, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Tite, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Peehat, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Butte, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Insect, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Fish, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Holl, ALLOCTYPE_PERMANENT),
- ACTOR_OVERLAY(En_Dinofos, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Hata, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Zl1, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Viewer, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Bubble, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Door_Shutter, ALLOCTYPE_PERMANENT),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Boom, ALLOCTYPE_PERMANENT),
- ACTOR_OVERLAY(En_Torch2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Minifrog, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_St, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_INTERNAL(En_A_Obj, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Wturn, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_River_Sound, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Ossan, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Famos, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Bombf, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Am, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Dekubaba, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_M_Fire1, ALLOCTYPE_PERMANENT),
- ACTOR_OVERLAY(En_M_Thunder, ALLOCTYPE_PERMANENT),
- ACTOR_OVERLAY(Bg_Breakwall, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(Door_Warp1, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Syokudai, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Item_B_Heart, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Dekunuts, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Bbfall, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Arms_Hook, ALLOCTYPE_PERMANENT),
- ACTOR_OVERLAY(En_Bb, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Keikoku_Spr, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Wood02, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Death, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Minideath, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Vm, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Demo_Effect, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Demo_Kankyo, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Floormas, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Rd, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_F40_Flift, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(Obj_Mure, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Sw, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Object_Kankyo, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Horse_Link_Child, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Door_Ana, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Encount1, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Demo_Tre_Lgt, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Encount2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Fire_Rock, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Ctower_Rot, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Mir_Ray, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Sb, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Bigslime, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Karebaba, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_In, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Ru, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Bom_Chu, ALLOCTYPE_PERMANENT),
- ACTOR_OVERLAY(En_Horse_Game_Check, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Rr, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Fr, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Fishing, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Oshihiki, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Eff_Dust, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Umajump, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Arrow_Fire, ALLOCTYPE_ABSOLUTE),
- ACTOR_OVERLAY(Arrow_Ice, ALLOCTYPE_ABSOLUTE),
- ACTOR_OVERLAY(Arrow_Light, ALLOCTYPE_ABSOLUTE),
- ACTOR_OVERLAY(Item_Etcetera, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Kibako, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Tsubo, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Ik, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(Demo_Shd, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Dns, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Elf_Msg, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Honotrap, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Tubo_Trap, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Ice_Poly, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Fz, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Kusa, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Bean, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Bombiwa, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Switch, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(Obj_Lift, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Hsblock, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Okarina_Tag, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Goroiwa, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Daiku, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Nwc, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Item_Inbox, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Ge1, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Blockstop, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Sda, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Clear_Tag, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Gm, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Ms, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Hs, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Ingate, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Kanban, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Attack_Niw, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Mk, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Owl, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Ishi, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Hana, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Lightswitch, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Mure2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Fu, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Stream, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Mm, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Weather_Tag, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Ani, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Js, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Okarina_Effect, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Mag, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Elf_Msg2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_F40_Swlift, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Kakasi, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Makeoshihiki, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Oceff_Spot, ALLOCTYPE_ABSOLUTE),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Torch, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(Shot_Sun, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(Obj_Roomtimer, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Ssh, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(Oceff_Wipe, ALLOCTYPE_ABSOLUTE),
- ACTOR_OVERLAY(Oceff_Storm, ALLOCTYPE_ABSOLUTE),
- ACTOR_OVERLAY(Obj_Demo, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Minislime, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Nutsball, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(Oceff_Wipe2, ALLOCTYPE_ABSOLUTE),
- ACTOR_OVERLAY(Oceff_Wipe3, ALLOCTYPE_ABSOLUTE),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Dg, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Si, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Comb, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Kibako2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Hs2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Mure3, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Tg, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Wf, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Skb, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Gs, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Sound, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Crow, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Cow, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(Oceff_Wipe4, ALLOCTYPE_ABSOLUTE),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Zo, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Makekinsuta, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Ge3, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(Obj_Hamishi, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Zl4, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Mm2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(Door_Spiral, ALLOCTYPE_PERMANENT),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(Obj_Pzlblock, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Toge, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(Obj_Armos, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Boyo, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Grasshopper, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(Obj_Grass, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Grass_Carry, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Grass_Unit, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(Bg_Fire_Wall, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Bu, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Encount3, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Jso, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Chikuwa, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Knight, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Warp_tag, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Aob_01, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Boj_01, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Boj_02, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Boj_03, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Encount4, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Bom_Bowl_Man, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Syateki_Man, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(Bg_Icicle, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Syateki_Crow, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Boj_04, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Cne_01, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Bba_01, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Bji_01, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Spdweb, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Mt_tag, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Boss_01, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Boss_02, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Boss_03, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Boss_04, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Boss_05, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Boss_06, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Boss_07, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Dy_Yoseizo, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Boj_05, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Sob1, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Go, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Raf, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Funen, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Raillift, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Numa_Hana, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Flowerpot, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Spinyroll, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Dm_Hina, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Syateki_Wf, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Skateblock, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Iceblock, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Bigpamet, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Syateki_Dekunuts, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Elf_Msg3, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Fg, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Dm_Ravine, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Dm_Sa, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Slime, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Pr, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Toudai, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Entotu, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Bell, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Syateki_Okuta, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(Obj_Shutter, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Dm_Zl, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Elfgrp, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Dm_Tsg, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Baguo, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Vspinyroll, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Smork, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Test2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Test3, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Test4, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Bat, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Sekihi, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Wiz, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Wiz_Brock, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Wiz_Fire, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Eff_Change, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Dm_Statue, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Fireshield, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Ladder, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Mkk, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Demo_Getitem, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Dnb, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Dnh, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Dnk, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Dnq, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(Bg_Keikoku_Saku, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Hugebombiwa, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Firefly2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Rat, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Water_Effect, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Kusa2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Spout_Fire, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(Bg_Dblue_Movebg, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Dy_Extra, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Bal, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Ginko_Man, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Warp_Uzu, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Driftice, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Look_Nuts, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Mushi2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Fall, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Mm3, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Crace_Movebg, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Dno, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Pr2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Prz, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Jso2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Etcetera, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Egol, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Mine, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Purify, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Tru, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Trt, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Test5, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Test6, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Az, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Estone, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Hakugin_Post, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Dm_Opstage, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Dm_Stk, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Dm_Char00, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Dm_Char01, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Dm_Char02, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Dm_Char03, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Dm_Char04, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Dm_Char05, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Dm_Char06, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Dm_Char07, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Dm_Char08, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Dm_Char09, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Tokeidai, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Mnk, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Egblock, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Guard_Nuts, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Hakugin_Bombwall, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Tokei_Tobira, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Hakugin_Elvpole, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Ma4, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Twig, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Po_Fusen, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Door_Etc, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Bigokuta, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Icefloe, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Ocarinalift, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Time_Tag, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Open_Shutter, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Open_Spot, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Fu_Kaiten, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Aqua, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Elforg, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Elfbub, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Fu_Mato, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Fu_Kago, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Osn, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Ctower_Gear, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Trt2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Tokei_Step, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Lotus, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Kame, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Takaraya_Wall, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Fu_Mizu, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Sellnuts, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Dkjail_Ivy, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(Obj_Visiblock, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Takaraya, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Tsn, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Ds2n, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Fsn, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Shn, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Stop_heishi, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Bigicicle, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Lift_Nuts, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Tk, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(Bg_Market_Step, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Lupygamelift, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Test7, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Lightblock, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Mir_Ray2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Wdhand, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Gamelupy, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Danpei_Movebg, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Snowwd, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Pm, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Gakufu, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Elf_Msg4, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Elf_Msg5, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Col_Man, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Talk_Gibud, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Giant, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Snowball, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Boss_Hakugin, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Gb2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Onpuman, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Tobira01, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Tag_Obj, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Dhouse, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Hakaisi, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Hakugin_Switch, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Snowman, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(TG_Sw, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Po_Sisters, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Pp, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Hakurock, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Hanabi, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Dowsing, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Wind, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Racedog, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Kendo_Js, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Botihasira, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Fish2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Pst, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Poh, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Spidertent, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Zoraegg, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Kbt, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Gg, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Maruta, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Snowball2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Gg2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Ghaka, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Dnp, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Dai, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Goron_Oyu, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Kgy, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Invadepoh, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Gk, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_An, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY_UNSET,
- ACTOR_OVERLAY(En_Bee, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Ot, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Dragon, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Dora, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Bigpo, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Kendo_Kanban, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Hariko, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Sth, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Sinkai_Kabe, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Haka_Curtain, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Kin2_Bombwall, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Kin2_Fence, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Kin2_Picture, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Kin2_Shelf, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Rail_Skb, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Jg, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Tru_Mt, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Um, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Neo_Reeba, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Mbar_Chair, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Ikana_Block, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Ikana_Mirror, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Ikana_Rotaryroom, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Dblue_Balance, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Dblue_Waterfall, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Kaizoku, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Ge2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Ma_Yts, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Ma_Yto, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Tokei_Turret, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Dblue_Elevator, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Warpstone, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Zog, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Rotlift, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Jg_Gakki, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Inibs_Movebg, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Zot, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Tree, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Y2lift, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Y2shutter, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Boat, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Taru, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Hunsui, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Jc_Mato, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Mir_Ray3, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Zob, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Elf_Msg6, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Nozoki, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Toto, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Railgibud, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Baba, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Suttari, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Zod, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Kujiya, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Geg, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Kinoko, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Yasi, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Tanron1, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Tanron2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Tanron3, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Chan, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Zos, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_S_Goro, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Nb, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Ja, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_F40_Block, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_F40_Switch, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Po_Composer, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Guruguru, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Oceff_Wipe5, ALLOCTYPE_ABSOLUTE),
- ACTOR_OVERLAY(En_Stone_heishi, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Oceff_Wipe6, ALLOCTYPE_ABSOLUTE),
- ACTOR_OVERLAY(En_Scopenuts, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Scopecrow, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Oceff_Wipe7, ALLOCTYPE_ABSOLUTE),
- ACTOR_OVERLAY(Eff_Kamejima_Wave, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Hg, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Hgo, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Zov, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Ah, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Hgdoor, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Ikana_Bombwall, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Ikana_Ray, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Ikana_Shutter, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Haka_Bombwall, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Haka_Tomb, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Sc_Ruppe, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Iknv_Doukutu, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Iknv_Obj, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Pamera, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_HsStump, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Hidden_Nuts, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Zow, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Talk, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Al, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Tab, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Nimotsu, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Hit_Tag, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Ruppecrow, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Tanron4, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Tanron5, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Tanron6, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Daiku2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Muto, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Baisen, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Heishi, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Demo_heishi, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Dt, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Cha, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Dinner, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Eff_Lastday, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Ikana_Dharma, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Akindonuts, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Eff_Stk, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Ig, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Rg, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Osk, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Sth2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Yb, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Rz, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Scopecoin, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Bjt, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Bomjima, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Bomjimb, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Bombers, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Bombers2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Bombal, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Moon_Stone, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Mu_Pict, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Ikninside, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Eff_Zoraband, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Kepn_Koya, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Usiyane, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Nnh, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Kzsaku, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Milk_Bin, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Kitan, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Astr_Bombwall, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Iknin_Susceil, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Bsb, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Recepgirl, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Thiefbird, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Jgame_Tsn, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Jgame_Light, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Yado, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Demo_Syoten, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Demo_Moonend, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Lbfshot, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Bg_Last_Bwall, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_And, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Invadepoh_Demo, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Danpeilift, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Fall2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Dm_Al, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Dm_An, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Dm_Ah, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Dm_Nb, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Drs, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Ending_Hero, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Dm_Bal, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Paper, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Hint_Skb, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Dm_Tag, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Bh, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Ending_Hero2, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Ending_Hero3, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Ending_Hero4, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Ending_Hero5, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Ending_Hero6, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Dm_Gm, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Swprize, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Invisible_Ruppe, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(Obj_Ending, ALLOCTYPE_NORMAL),
- ACTOR_OVERLAY(En_Rsn, ALLOCTYPE_NORMAL),
+#include "tables/actor_table.h"
};
-s32 gMaxActorId = 0;
+#undef DEFINE_ACTOR
+#undef DEFINE_ACTOR_INTERNAL
+#undef DEFINE_ACTOR_UNSET
-FaultClient D_801ED930;
-FaultAddrConvClient D_801ED940;
+ActorId gMaxActorId = 0;
-void ActorOverlayTable_FaultPrint(void* arg0, void* arg1) {
+FaultClient sActorOverlayTableFaultClient;
+FaultAddrConvClient sActorOverlayTableFaultAddrConvClient;
+
+void ActorOverlayTable_FaultClient(void* arg0, void* arg1) {
ActorOverlay* overlayEntry;
u32 overlaySize;
- s32 i;
+ ActorId actorId;
FaultDrawer_SetCharPad(-2, 0);
FaultDrawer_Printf("actor_dlftbls %u\n", gMaxActorId);
FaultDrawer_Printf("No. RamStart- RamEnd cn Name\n");
- for (i = 0, overlayEntry = &gActorOverlayTable[0]; i < gMaxActorId; i++, overlayEntry++) {
+ for (actorId = 0, overlayEntry = &gActorOverlayTable[0]; actorId < gMaxActorId; actorId++, overlayEntry++) {
overlaySize = VRAM_PTR_SIZE(overlayEntry);
if (overlayEntry->loadedRamAddr != NULL) {
- FaultDrawer_Printf("%3d %08x-%08x %3d %s\n", i, overlayEntry->loadedRamAddr,
+ FaultDrawer_Printf("%3d %08x-%08x %3d %s\n", actorId, overlayEntry->loadedRamAddr,
(u32)overlayEntry->loadedRamAddr + overlaySize, overlayEntry->numLoaded, "");
}
}
}
-void* ActorOverlayTable_FaultAddrConv(void* arg0, void* arg1) {
- u8* ptr = arg0;
- ActorOverlay* overlayEntry = &gActorOverlayTable[0];
- s32 i;
- u8* ramStart;
- u8* ramEnd;
- size_t size;
- u32 offset;
+void* ActorOverlayTable_FaultAddrConv(void* address, void* param) {
+ uintptr_t addr = address;
+ ActorOverlay* actorOvl = &gActorOverlayTable[0];
+ size_t ramConv;
+ void* ramStart;
+ size_t diff;
+ ActorId actorId;
+
+ for (actorId = 0; actorId < gMaxActorId; actorId++, actorOvl++) {
+ diff = VRAM_PTR_SIZE(actorOvl);
+ ramStart = actorOvl->loadedRamAddr;
+ ramConv = (uintptr_t)actorOvl->vramStart - (uintptr_t)ramStart;
- for (i = 0; i < gMaxActorId; i++, overlayEntry++) {
- size = VRAM_PTR_SIZE(overlayEntry);
- ramStart = overlayEntry->loadedRamAddr;
- ramEnd = ramStart + size;
- offset = (u8*)overlayEntry->vramStart - ramStart;
if (ramStart != NULL) {
- if (ptr >= ramStart && ptr < ramEnd) {
- return ptr + offset;
+ if ((addr >= (uintptr_t)ramStart) && (addr < (uintptr_t)ramStart + diff)) {
+ return addr + ramConv;
}
}
}
@@ -755,12 +84,12 @@ void* ActorOverlayTable_FaultAddrConv(void* arg0, void* arg1) {
void ActorOverlayTable_Init(void) {
gMaxActorId = ACTOR_ID_MAX;
- Fault_AddClient(&D_801ED930, &ActorOverlayTable_FaultPrint, NULL, NULL);
- Fault_AddAddrConvClient(&D_801ED940, &ActorOverlayTable_FaultAddrConv, NULL);
+ Fault_AddClient(&sActorOverlayTableFaultClient, ActorOverlayTable_FaultClient, NULL, NULL);
+ Fault_AddAddrConvClient(&sActorOverlayTableFaultAddrConvClient, ActorOverlayTable_FaultAddrConv, NULL);
}
void ActorOverlayTable_Cleanup(void) {
- Fault_RemoveClient(&D_801ED930);
- Fault_RemoveAddrConvClient(&D_801ED940);
+ Fault_RemoveClient(&sActorOverlayTableFaultClient);
+ Fault_RemoveAddrConvClient(&sActorOverlayTableFaultAddrConvClient);
gMaxActorId = 0;
}
diff --git a/src/code/z_bg_collect.c b/src/code/z_bg_collect.c
index 0d4f4a21f..b0c0971ea 100644
--- a/src/code/z_bg_collect.c
+++ b/src/code/z_bg_collect.c
@@ -1,103 +1,116 @@
#include "global.h"
-void BgCheck2_UpdateActorPosition(CollisionContext* colCtx, s32 bgId, Actor* actor) {
- MtxF prevMatrix;
- MtxF prevMatrixInv;
- MtxF currMatrix;
- Vec3f newPos;
- Vec3f posWithInv;
+/**
+ * Update the `carriedActor`'s position based on the dynapoly actor identified by `bgId`.
+ */
+void DynaPolyActor_UpdateCarriedActorPos(CollisionContext* colCtx, s32 bgId, Actor* carriedActor) {
+ MtxF prevTransform;
+ MtxF prevTransformInv;
+ MtxF curTransform;
+ Vec3f pos;
+ Vec3f tempPos;
if (!DynaPoly_IsBgIdBgActor(bgId)) {
return;
}
SkinMatrix_SetScaleRotateYRPTranslate(
- &prevMatrix, colCtx->dyna.bgActors[bgId].prevTransform.scale.x,
+ &prevTransform, colCtx->dyna.bgActors[bgId].prevTransform.scale.x,
colCtx->dyna.bgActors[bgId].prevTransform.scale.y, colCtx->dyna.bgActors[bgId].prevTransform.scale.z,
colCtx->dyna.bgActors[bgId].prevTransform.rot.x, colCtx->dyna.bgActors[bgId].prevTransform.rot.y,
colCtx->dyna.bgActors[bgId].prevTransform.rot.z, colCtx->dyna.bgActors[bgId].prevTransform.pos.x,
colCtx->dyna.bgActors[bgId].prevTransform.pos.y, colCtx->dyna.bgActors[bgId].prevTransform.pos.z);
- if (SkinMatrix_Invert(&prevMatrix, &prevMatrixInv) == 2) {
+ if (SkinMatrix_Invert(&prevTransform, &prevTransformInv) == 2) {
return;
}
SkinMatrix_SetScaleRotateYRPTranslate(
- &currMatrix, colCtx->dyna.bgActors[bgId].curTransform.scale.x, colCtx->dyna.bgActors[bgId].curTransform.scale.y,
- colCtx->dyna.bgActors[bgId].curTransform.scale.z, colCtx->dyna.bgActors[bgId].curTransform.rot.x,
- colCtx->dyna.bgActors[bgId].curTransform.rot.y, colCtx->dyna.bgActors[bgId].curTransform.rot.z,
- colCtx->dyna.bgActors[bgId].curTransform.pos.x, colCtx->dyna.bgActors[bgId].curTransform.pos.y,
- colCtx->dyna.bgActors[bgId].curTransform.pos.z);
+ &curTransform, colCtx->dyna.bgActors[bgId].curTransform.scale.x,
+ colCtx->dyna.bgActors[bgId].curTransform.scale.y, colCtx->dyna.bgActors[bgId].curTransform.scale.z,
+ colCtx->dyna.bgActors[bgId].curTransform.rot.x, colCtx->dyna.bgActors[bgId].curTransform.rot.y,
+ colCtx->dyna.bgActors[bgId].curTransform.rot.z, colCtx->dyna.bgActors[bgId].curTransform.pos.x,
+ colCtx->dyna.bgActors[bgId].curTransform.pos.y, colCtx->dyna.bgActors[bgId].curTransform.pos.z);
- SkinMatrix_Vec3fMtxFMultXYZ(&prevMatrixInv, &actor->world.pos, &posWithInv);
- SkinMatrix_Vec3fMtxFMultXYZ(&currMatrix, &posWithInv, &newPos);
+ // Apply the movement of the dynapoly actor `bgId` over the last frame to the `carriedActor` position
+ // pos = curTransform * prevTransformInv * pos
+ // Note (curTransform * prevTransformInv) represents the transform relative to the previous frame
+ SkinMatrix_Vec3fMtxFMultXYZ(&prevTransformInv, &carriedActor->world.pos, &tempPos);
+ SkinMatrix_Vec3fMtxFMultXYZ(&curTransform, &tempPos, &pos);
- actor->world.pos = newPos;
+ carriedActor->world.pos = pos;
}
-void BgCheck2_UpdateActorYRotation(CollisionContext* colCtx, s32 bgId, Actor* actor) {
- s16 angleChange;
+/**
+ * Update the `carriedActor`'s Y rotation based on the dynapoly actor identified by `bgId`.
+ */
+void DynaPolyActor_UpdateCarriedActorRotY(CollisionContext* colCtx, s32 bgId, Actor* carriedActor) {
+ s16 rotY;
if (!DynaPoly_IsBgIdBgActor(bgId)) {
return;
}
- angleChange = colCtx->dyna.bgActors[bgId].curTransform.rot.y - colCtx->dyna.bgActors[bgId].prevTransform.rot.y;
+ rotY = colCtx->dyna.bgActors[bgId].curTransform.rot.y - colCtx->dyna.bgActors[bgId].prevTransform.rot.y;
- if (actor->id == 0) {
- ((Player*)actor)->currentYaw += angleChange;
+ if (carriedActor->id == ACTOR_PLAYER) {
+ ((Player*)carriedActor)->currentYaw += rotY;
}
- actor->shape.rot.y += angleChange;
- actor->world.rot.y += angleChange;
+ carriedActor->shape.rot.y += rotY;
+ carriedActor->world.rot.y += rotY;
}
-void BgCheck2_AttachToMesh(CollisionContext* colCtx, Actor* actor, s32 bgId) {
- DynaPolyActor* meshActor;
+void DynaPolyActor_AttachCarriedActor(CollisionContext* colCtx, Actor* carriedActor, s32 bgId) {
+ DynaPolyActor* dynaActor;
if (!DynaPoly_IsBgIdBgActor(bgId)) {
return;
}
- meshActor = DynaPoly_GetActor(colCtx, bgId);
- if (meshActor != NULL) {
- DynaPolyActor_SetRidingFallingState(meshActor);
+ dynaActor = DynaPoly_GetActor(colCtx, bgId);
+ if (dynaActor != NULL) {
+ DynaPolyActor_SetActorOnTop(dynaActor);
- if ((actor->flags & 0x4000000) == 0x4000000) {
- DynaPolyActor_SetSwitchPressedState(meshActor);
+ if (CHECK_FLAG_ALL(carriedActor->flags, ACTOR_FLAG_CAN_PRESS_SWITCH)) {
+ DynaPolyActor_SetActorOnSwitch(dynaActor);
}
- if ((actor->flags & 0x20000) == 0x20000) {
- DynaPolyActor_SetHeavySwitchPressedState(meshActor);
+ if (CHECK_FLAG_ALL(carriedActor->flags, ACTOR_FLAG_CAN_PRESS_HEAVY_SWITCH)) {
+ DynaPolyActor_SetActorOnHeavySwitch(dynaActor);
}
}
}
-u32 BgCheck2_UpdateActorAttachedToMesh(CollisionContext* colCtx, s32 bgId, Actor* actor) {
- u32 wasUpdated = 0;
- DynaPolyActor* meshActor;
+/**
+ * Update the `carriedActor`'s position and Y rotation based on the dynapoly actor identified by `bgId`, according to
+ * the dynapoly actor's move flags (see `DYNA_TRANSFORM_POS` and `DYNA_TRANSFORM_ROT_Y`).
+ */
+u32 DynaPolyActor_TransformCarriedActor(CollisionContext* colCtx, s32 bgId, Actor* carriedActor) {
+ u32 wasUpdated = false;
+ DynaPolyActor* dynaActor;
if (!DynaPoly_IsBgIdBgActor(bgId)) {
- return 0;
+ return false;
}
- if (colCtx->dyna.bgActorFlags[bgId] & 2 || !(colCtx->dyna.bgActorFlags[bgId] & 1)) {
- return 0;
+ if ((colCtx->dyna.bgActorFlags[bgId] & BGACTOR_1) || !(colCtx->dyna.bgActorFlags[bgId] & BGACTOR_IN_USE)) {
+ return false;
}
- meshActor = DynaPoly_GetActor(colCtx, bgId);
+ dynaActor = DynaPoly_GetActor(colCtx, bgId);
- if (meshActor == NULL) {
- return 0;
+ if (dynaActor == NULL) {
+ return false;
}
- if (meshActor->flags & 1) {
- BgCheck2_UpdateActorPosition(colCtx, bgId, actor);
- wasUpdated = 1;
+ if (dynaActor->transformFlags & DYNA_TRANSFORM_POS) {
+ DynaPolyActor_UpdateCarriedActorPos(colCtx, bgId, carriedActor);
+ wasUpdated = true;
}
- if (meshActor->flags & 2) {
- BgCheck2_UpdateActorYRotation(colCtx, bgId, actor);
- wasUpdated = 1;
+ if (dynaActor->transformFlags & DYNA_TRANSFORM_ROT_Y) {
+ DynaPolyActor_UpdateCarriedActorRotY(colCtx, bgId, carriedActor);
+ wasUpdated = true;
}
return wasUpdated;
diff --git a/src/code/z_bg_item.c b/src/code/z_bg_item.c
index 79bdf2b82..cedd77194 100644
--- a/src/code/z_bg_item.c
+++ b/src/code/z_bg_item.c
@@ -1,18 +1,15 @@
#include "global.h"
-#define DYNAPOLY_STATE_NONE 0
-#define DYNAPOLY_STATE_RIDING_FALLING (1 << 0)
-#define DYNAPOLY_STATE_RIDING_MOVING (1 << 1)
-#define DYNAPOLY_STATE_RIDING_ROTATING (1 << 2)
-#define DYNAPOLY_STATE_SWITCH_PRESSED (1 << 3)
-#define DYNAPOLY_STATE_HEAVY_SWITCH_PRESSED (1 << 4)
-
-void DynaPolyActor_Init(DynaPolyActor* dynaActor, s32 flags) {
+/**
+ * @param transformFlags How other actors standing on the dynapoly actor's collision move when the dynapoly actor moves.
+ * See `DYNA_TRANSFORM_POS`, `DYNA_TRANSFORM_ROT_Y`.
+ */
+void DynaPolyActor_Init(DynaPolyActor* dynaActor, s32 transformFlags) {
dynaActor->bgId = -1;
dynaActor->pushForce = 0.0f;
dynaActor->unk14C = 0.0f;
- dynaActor->flags = flags;
- dynaActor->stateFlags = DYNAPOLY_STATE_NONE;
+ dynaActor->transformFlags = transformFlags;
+ dynaActor->interactFlags = 0;
}
void DynaPolyActor_LoadMesh(PlayState* play, DynaPolyActor* dynaActor, CollisionHeader* meshHeader) {
@@ -22,80 +19,80 @@ void DynaPolyActor_LoadMesh(PlayState* play, DynaPolyActor* dynaActor, Collision
dynaActor->bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &dynaActor->actor, header);
}
-void DynaPolyActor_ResetState(DynaPolyActor* dynaActor) {
- dynaActor->stateFlags = DYNAPOLY_STATE_NONE;
+void DynaPolyActor_UnsetAllInteractFlags(DynaPolyActor* dynaActor) {
+ dynaActor->interactFlags = 0;
}
-void DynaPolyActor_SetRidingFallingState(DynaPolyActor* dynaActor) {
- dynaActor->stateFlags |= DYNAPOLY_STATE_RIDING_FALLING;
+void DynaPolyActor_SetActorOnTop(DynaPolyActor* dynaActor) {
+ dynaActor->interactFlags |= DYNA_INTERACT_ACTOR_ON_TOP;
}
-void DynaPolyActor_SetRidingMovingState(DynaPolyActor* dynaActor) {
- dynaActor->stateFlags |= DYNAPOLY_STATE_RIDING_MOVING;
+void DynaPolyActor_SetPlayerOnTop(DynaPolyActor* dynaActor) {
+ dynaActor->interactFlags |= DYNA_INTERACT_PLAYER_ON_TOP;
}
-void DynaPolyActor_SetRidingMovingStateByIndex(CollisionContext* colCtx, s32 bgId) {
+void DynaPoly_SetPlayerOnTop(CollisionContext* colCtx, s32 bgId) {
DynaPolyActor* dynaActor = DynaPoly_GetActor(colCtx, bgId);
if (dynaActor != NULL) {
- DynaPolyActor_SetRidingMovingState(dynaActor);
+ DynaPolyActor_SetPlayerOnTop(dynaActor);
}
}
-void DynaPolyActor_SetRidingRotatingState(DynaPolyActor* dynaActor) {
- dynaActor->stateFlags |= DYNAPOLY_STATE_RIDING_ROTATING;
+void DynaPolyActor_SetPlayerAbove(DynaPolyActor* dynaActor) {
+ dynaActor->interactFlags |= DYNA_INTERACT_PLAYER_ABOVE;
}
-void DynaPolyActor_SetRidingRotatingStateByIndex(CollisionContext* colCtx, s32 bgId) {
+void DynaPoly_SetPlayerAbove(CollisionContext* colCtx, s32 bgId) {
DynaPolyActor* dynaActor = DynaPoly_GetActor(colCtx, bgId);
if (dynaActor != NULL) {
- DynaPolyActor_SetRidingRotatingState(dynaActor);
+ DynaPolyActor_SetPlayerAbove(dynaActor);
}
}
-void DynaPolyActor_SetSwitchPressedState(DynaPolyActor* dynaActor) {
- dynaActor->stateFlags |= DYNAPOLY_STATE_SWITCH_PRESSED;
+void DynaPolyActor_SetActorOnSwitch(DynaPolyActor* dynaActor) {
+ dynaActor->interactFlags |= DYNA_INTERACT_ACTOR_ON_SWITCH;
}
-void DynaPolyActor_SetHeavySwitchPressedState(DynaPolyActor* dynaActor) {
- dynaActor->stateFlags |= DYNAPOLY_STATE_HEAVY_SWITCH_PRESSED;
+void DynaPolyActor_SetActorOnHeavySwitch(DynaPolyActor* dynaActor) {
+ dynaActor->interactFlags |= DYNA_INTERACT_ACTOR_ON_HEAVY_SWITCH;
}
-s32 DynaPolyActor_IsInRidingFallingState(DynaPolyActor* dynaActor) {
- if (dynaActor->stateFlags & DYNAPOLY_STATE_RIDING_FALLING) {
+s32 DynaPolyActor_IsActorOnTop(DynaPolyActor* dynaActor) {
+ if (dynaActor->interactFlags & DYNA_INTERACT_ACTOR_ON_TOP) {
return true;
} else {
return false;
}
}
-s32 DynaPolyActor_IsInRidingMovingState(DynaPolyActor* dynaActor) {
- if (dynaActor->stateFlags & DYNAPOLY_STATE_RIDING_MOVING) {
+s32 DynaPolyActor_IsPlayerOnTop(DynaPolyActor* dynaActor) {
+ if (dynaActor->interactFlags & DYNA_INTERACT_PLAYER_ON_TOP) {
return true;
} else {
return false;
}
}
-s32 DynaPolyActor_IsInRidingRotatingState(DynaPolyActor* dynaActor) {
- if (dynaActor->stateFlags & DYNAPOLY_STATE_RIDING_ROTATING) {
+s32 DynaPolyActor_IsPlayerAbove(DynaPolyActor* dynaActor) {
+ if (dynaActor->interactFlags & DYNA_INTERACT_PLAYER_ABOVE) {
return true;
} else {
return false;
}
}
-s32 DynaPolyActor_IsInSwitchPressedState(DynaPolyActor* dynaActor) {
- if (dynaActor->stateFlags & DYNAPOLY_STATE_SWITCH_PRESSED) {
+s32 DynaPolyActor_IsSwitchPressed(DynaPolyActor* dynaActor) {
+ if (dynaActor->interactFlags & DYNA_INTERACT_ACTOR_ON_SWITCH) {
return true;
} else {
return false;
}
}
-s32 DynaPolyActor_IsInHeavySwitchPressedState(DynaPolyActor* dynaActor) {
- if (dynaActor->stateFlags & DYNAPOLY_STATE_HEAVY_SWITCH_PRESSED) {
+s32 DynaPolyActor_IsHeavySwitchPressed(DynaPolyActor* dynaActor) {
+ if (dynaActor->interactFlags & DYNA_INTERACT_ACTOR_ON_HEAVY_SWITCH) {
return true;
} else {
return false;
@@ -129,13 +126,16 @@ s32 DynaPolyActor_ValidateMove(PlayState* play, DynaPolyActor* dynaActor, s16 st
&bgId, &dynaActor->actor, 0.0f)) {
return false;
}
+
startPos.x = (dynaActor->actor.world.pos.x * 2.0f) - startPos.x;
startPos.z = (dynaActor->actor.world.pos.z * 2.0f) - startPos.z;
endPos.x = sign * adjustedEndRadius * sin + startPos.x;
endPos.z = sign * adjustedEndRadius * cos + startPos.z;
+
if (BgCheck_EntityLineTest3(&play->colCtx, &startPos, &endPos, &intersectionPos, &poly, true, false, false, true,
&bgId, &dynaActor->actor, 0.0f)) {
return false;
}
+
return true;
}
diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c
index 7f4247b0d..2fc1852ab 100644
--- a/src/code/z_bgcheck.c
+++ b/src/code/z_bgcheck.c
@@ -1,4 +1,3 @@
-#include "prevent_bss_reordering.h"
#include "global.h"
#include "vt.h"
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
@@ -7,44 +6,51 @@
#define DYNA_RAYCAST_WALLS 2
#define DYNA_RAYCAST_CEILINGS 4
-u32 sWallFlags[32] = {
- 0, 1, 3, 5, 8, 16, 32, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+u32 sWallFlags[WALL_TYPE_MAX] = {
+ 0, // WALL_TYPE_0
+ WALL_FLAG_0, // WALL_TYPE_1
+ WALL_FLAG_0 | WALL_FLAG_1, // WALL_TYPE_2
+ WALL_FLAG_0 | WALL_FLAG_2, // WALL_TYPE_3
+ WALL_FLAG_3, // WALL_TYPE_4
+ WALL_FLAG_4, // WALL_TYPE_5
+ WALL_FLAG_5, // WALL_TYPE_6
+ WALL_FLAG_6, // WALL_TYPE_7
};
-u16 sSurfaceTypeSfx[] = {
- /* 0x00 */ NA_SE_PL_WALK_GROUND - SFX_FLAG,
- /* 0x01 */ NA_SE_PL_WALK_SAND - SFX_FLAG,
- /* 0x02 */ NA_SE_PL_WALK_CONCRETE - SFX_FLAG,
- /* 0x03 */ NA_SE_PL_WALK_DIRT - SFX_FLAG,
- /* 0x04 */ NA_SE_PL_WALK_WATER0 - SFX_FLAG,
- /* 0x05 */ NA_SE_PL_WALK_WATER1 - SFX_FLAG,
- /* 0x06 */ NA_SE_PL_WALK_WATER2 - SFX_FLAG,
- /* 0x07 */ NA_SE_PL_WALK_MAGMA - SFX_FLAG,
- /* 0x08 */ NA_SE_PL_WALK_GRASS - SFX_FLAG,
- /* 0x09 */ NA_SE_PL_WALK_GLASS - SFX_FLAG,
- /* 0x0A */ NA_SE_PL_WALK_LADDER - SFX_FLAG,
- /* 0x0B */ NA_SE_PL_WALK_GROUND - SFX_FLAG,
- /* 0x0C */ NA_SE_PL_WALK_ICE - SFX_FLAG,
- /* 0x0D */ NA_SE_PL_WALK_IRON - SFX_FLAG,
- /* 0x0E */ NA_SE_PL_WALK_SNOW - SFX_FLAG
+u16 sSurfaceSfxOffsets[SURFACE_MATERIAL_MAX] = {
+ SURFACE_SFX_OFFSET_DIRT, // SURFACE_MATERIAL_DIRT
+ SURFACE_SFX_OFFSET_SAND, // SURFACE_MATERIAL_SAND
+ SURFACE_SFX_OFFSET_STONE, // SURFACE_MATERIAL_STONE
+ SURFACE_SFX_OFFSET_DIRT_SHALLOW, // SURFACE_MATERIAL_DIRT_SHALLOW
+ SURFACE_SFX_OFFSET_WATER_SHALLOW, // SURFACE_MATERIAL_WATER_SHALLOW
+ SURFACE_SFX_OFFSET_WATER_DEEP, // SURFACE_MATERIAL_WATER_DEEP
+ SURFACE_SFX_OFFSET_TALL_GRASS, // SURFACE_MATERIAL_TALL_GRASS
+ SURFACE_SFX_OFFSET_LAVA, // SURFACE_MATERIAL_LAVA
+ SURFACE_SFX_OFFSET_GRASS, // SURFACE_MATERIAL_GRASS
+ SURFACE_SFX_OFFSET_BRIDGE, // SURFACE_MATERIAL_BRIDGE
+ SURFACE_SFX_OFFSET_WOOD, // SURFACE_MATERIAL_WOOD
+ SURFACE_SFX_OFFSET_DIRT, // SURFACE_MATERIAL_DIRT_SOFT
+ SURFACE_SFX_OFFSET_ICE, // SURFACE_MATERIAL_ICE
+ SURFACE_SFX_OFFSET_CARPET, // SURFACE_MATERIAL_CARPET
+ SURFACE_SFX_OFFSET_SNOW, // SURFACE_MATERIAL_SNOW
};
-u8 D_801B46C0[] = {
- /* 0x00 */ 1,
- /* 0x01 */ 1,
- /* 0x02 */ 0,
- /* 0x03 */ 1,
- /* 0x04 */ 0,
- /* 0x05 */ 0,
- /* 0x06 */ 0,
- /* 0x07 */ 0,
- /* 0x08 */ 0,
- /* 0x09 */ 0,
- /* 0x0A */ 0,
- /* 0x0B */ 0,
- /* 0x0C */ 0,
- /* 0x0D */ 0,
- /* 0x0E */ 1
+u8 sSurfaceMaterialProperties[SURFACE_MATERIAL_MAX] = {
+ MATERIAL_PROPERTY_SOFT_IMPRINT, // SURFACE_MATERIAL_DIRT
+ MATERIAL_PROPERTY_SOFT_IMPRINT, // SURFACE_MATERIAL_SAND
+ 0, // SURFACE_MATERIAL_STONE
+ MATERIAL_PROPERTY_SOFT_IMPRINT, // SURFACE_MATERIAL_DIRT_SHALLOW
+ 0, // SURFACE_MATERIAL_WATER_SHALLOW
+ 0, // SURFACE_MATERIAL_WATER_DEEP
+ 0, // SURFACE_MATERIAL_TALL_GRASS
+ 0, // SURFACE_MATERIAL_LAVA
+ 0, // SURFACE_MATERIAL_GRASS
+ 0, // SURFACE_MATERIAL_BRIDGE
+ 0, // SURFACE_MATERIAL_WOOD
+ 0, // SURFACE_MATERIAL_DIRT_SOFT
+ 0, // SURFACE_MATERIAL_ICE
+ 0, // SURFACE_MATERIAL_CARPET
+ MATERIAL_PROPERTY_SOFT_IMPRINT, // SURFACE_MATERIAL_SNOW
};
s16 sSmallMemSceneIds[] = {
@@ -52,9 +58,9 @@ s16 sSmallMemSceneIds[] = {
};
typedef struct {
- s16 sceneId;
- u32 memSize;
-} BgCheckSceneMemEntry;
+ /* 0x0 */ s16 sceneId;
+ /* 0x4 */ u32 memSize;
+} BgCheckSceneMemEntry; // size = 0x8
BgCheckSceneMemEntry sSceneMemList[] = {
{ SCENE_00KEIKOKU, 0xC800 },
@@ -72,17 +78,25 @@ BgSpecialSceneMaxObjects sCustomDynapolyMem[] = {
// TODO: All these bss variables are localized to one function and can
// likely be made into in-function static bss variables in the future
-char D_801ED950[80];
-char D_801ED9A0[80];
+
Vec3f D_801ED9F0[3]; // polyVerts
Vec3f D_801EDA18[3]; // polyVerts
-MtxF D_801EDA40;
Vec3f D_801EDA80[3]; // polyVerts
+Vec3f D_801EDB48[3]; // polyVerts
+
+#ifndef NON_MATCHING
+Vec3f D_801EDB70[3]; // polyVerts;
+Plane D_801EDB98; // plane;
+Sphere16 D_801EDBA8; // sphere;
+TriNorm D_801EDBB0; // tri;
+#endif
+
+char D_801ED950[80];
+char D_801ED9A0[80];
+
char D_801EDAA8[80];
char D_801EDAF8[80];
-Vec3f D_801EDB48[3]; // polyVerts
-Vec3f D_801EDB70[3];
-Plane D_801EDB98;
+MtxF sModelToWorldMtxF;
void BgCheck_GetStaticLookupIndicesFromPos(CollisionContext* colCtx, Vec3f* pos, Vec3i* sector);
f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast);
@@ -132,7 +146,7 @@ void DynaSSNodeList_Init(PlayState* play, DynaSSNodeList* list) {
}
void DynaSSNodeList_Alloc(PlayState* play, DynaSSNodeList* list, u32 numNodes) {
- list->tbl = (SSNode*)THA_AllocEndAlign(&play->state.heap, numNodes * sizeof(SSNode), -2);
+ list->tbl = (SSNode*)THA_AllocTailAlign(&play->state.heap, numNodes * sizeof(SSNode), -2);
list->maxNodes = numNodes;
list->count = 0;
}
@@ -281,7 +295,7 @@ void CollisionPoly_GetVertices(CollisionPoly* poly, Vec3s* vtxList, Vec3f* dest)
void CollisionPoly_GetVerticesByBgId(CollisionPoly* poly, s32 bgId, CollisionContext* colCtx, Vec3f* dest) {
Vec3s* vtxList;
- if (poly == NULL || bgId > BG_ACTOR_MAX || dest == NULL) {
+ if ((poly == NULL) || (bgId > BG_ACTOR_MAX) || (dest == NULL)) {
if (dest != NULL) {
// @bug: dest[2] x and y are not set to 0
dest[0].x = dest[0].y = dest[0].z = dest[1].x = dest[1].y = dest[1].z = dest[2].z = 0.0f;
@@ -380,40 +394,52 @@ s32 CollisionPoly_CheckZIntersectApprox(CollisionPoly* poly, Vec3s* vtxList, f32
}
#ifdef NON_MATCHING
+// Matches, but needs in-function static bss
s32 CollisionPoly_LineVsPoly(BgLineVsPolyTest* a0) {
- static Vec3f polyVerts[3]; // D_801EDB70
- static Plane plane; // D_801EDB98
+ static Vec3f sPolyVerts[3]; // D_801EDB70
+ static Plane sPlane; // D_801EDB98
f32 planeDistA;
f32 planeDistB;
- f32 planeDistDelta;
+ f32 dpA;
+ f32 dpB;
+ f32 originDist;
- plane.originDist = a0->poly->dist;
- planeDistA = COLPOLY_GET_NORMAL(a0->poly->normal.x * a0->posA->x + a0->poly->normal.y * a0->posA->y +
- a0->poly->normal.z * a0->posA->z) +
- plane.originDist;
- planeDistB = COLPOLY_GET_NORMAL(a0->poly->normal.x * a0->posB->x + a0->poly->normal.y * a0->posB->y +
- a0->poly->normal.z * a0->posB->z) +
- plane.originDist;
+ sPlane.originDist = a0->poly->dist;
+ originDist = sPlane.originDist;
+ planeDistA = originDist;
+ planeDistB = originDist;
- planeDistDelta = planeDistA - planeDistB;
- if ((planeDistA >= 0.0f && planeDistB >= 0.0f) || (planeDistA < 0.0f && planeDistB < 0.0f) ||
- ((a0->checkOneFace != 0) && (planeDistA < 0.0f && planeDistB > 0.0f)) || IS_ZERO(planeDistDelta)) {
+ dpA = a0->poly->normal.x * a0->posA->x;
+ dpB = a0->poly->normal.x * a0->posB->x;
+ dpA += a0->poly->normal.y * a0->posA->y;
+ dpB += a0->poly->normal.y * a0->posB->y;
+ dpA += a0->poly->normal.z * a0->posA->z;
+ dpB += a0->poly->normal.z * a0->posB->z;
+
+ dpA *= COLPOLY_NORMAL_FRAC;
+ dpB *= COLPOLY_NORMAL_FRAC;
+
+ planeDistA += dpA;
+ planeDistB += dpB;
+
+ if (((planeDistA >= 0.0f) && (planeDistB >= 0.0f)) || ((planeDistA < 0.0f) && (planeDistB < 0.0f)) ||
+ ((a0->checkOneFace != 0) && (planeDistA < 0.0f) && (0.0f < planeDistB)) || IS_ZERO(planeDistA - planeDistB)) {
return false;
}
- CollisionPoly_GetNormalF(a0->poly, &plane.normal.x, &plane.normal.y, &plane.normal.z);
- CollisionPoly_GetVertices(a0->poly, a0->vtxList, polyVerts);
- Math3D_Lerp(a0->posA, a0->posB, planeDistA / planeDistDelta, a0->planeIntersect);
+ CollisionPoly_GetNormalF(a0->poly, &sPlane.normal.x, &sPlane.normal.y, &sPlane.normal.z);
+ CollisionPoly_GetVertices(a0->poly, a0->vtxList, sPolyVerts);
+ Math3D_Lerp(a0->posA, a0->posB, planeDistA / (planeDistA - planeDistB), a0->planeIntersect);
- if ((fabsf(plane.normal.x) > 0.5f &&
- Math3D_TriChkPointParaXDist(&polyVerts[0], &polyVerts[1], &polyVerts[2], a0->planeIntersect->y,
- a0->planeIntersect->z, 0.0f, a0->checkDist, plane.normal.x)) ||
- (fabsf(plane.normal.y) > 0.5f &&
- Math3D_TriChkPointParaYDist(&polyVerts[0], &polyVerts[1], &polyVerts[2], a0->planeIntersect->z,
- a0->planeIntersect->x, 0.0f, a0->checkDist, plane.normal.y)) ||
- (fabsf(plane.normal.z) > 0.5f &&
- Math3D_TriChkLineSegParaZDist(&polyVerts[0], &polyVerts[1], &polyVerts[2], a0->planeIntersect->x,
- a0->planeIntersect->y, 0.0f, a0->checkDist, plane.normal.z))) {
+ if (((fabsf(sPlane.normal.x) > 0.5f) &&
+ Math3D_TriChkPointParaXDist(&sPolyVerts[0], &sPolyVerts[1], &sPolyVerts[2], a0->planeIntersect->y,
+ a0->planeIntersect->z, 0.0f, a0->checkDist, sPlane.normal.x)) ||
+ ((fabsf(sPlane.normal.y) > 0.5f) &&
+ Math3D_TriChkPointParaYDist(&sPolyVerts[0], &sPolyVerts[1], &sPolyVerts[2], a0->planeIntersect->z,
+ a0->planeIntersect->x, 0.0f, a0->checkDist, sPlane.normal.y)) ||
+ ((fabsf(sPlane.normal.z) > 0.5f) &&
+ Math3D_TriChkLineSegParaZDist(&sPolyVerts[0], &sPolyVerts[1], &sPolyVerts[2], a0->planeIntersect->x,
+ a0->planeIntersect->y, 0.0f, a0->checkDist, sPlane.normal.z))) {
return true;
}
return false;
@@ -423,20 +449,26 @@ s32 CollisionPoly_LineVsPoly(BgLineVsPolyTest* a0);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_bgcheck/CollisionPoly_LineVsPoly.s")
#endif
+#ifdef NON_MATCHING
+// Matches, but needs in-function static bss
s32 CollisionPoly_SphVsPoly(CollisionPoly* poly, Vec3s* vtxList, Vec3f* center, f32 radius) {
- static Sphere16 sphere; // D_801EDBA8
- static TriNorm tri; // D_801EDBB0
+ static Sphere16 sSphere; // D_801EDBA8
+ static TriNorm sTri; // D_801EDBB0
Vec3f intersect;
- CollisionPoly_GetVertices(poly, vtxList, tri.vtx);
- CollisionPoly_GetNormalF(poly, &tri.plane.normal.x, &tri.plane.normal.y, &tri.plane.normal.z);
- tri.plane.originDist = poly->dist;
- sphere.center.x = center->x;
- sphere.center.y = center->y;
- sphere.center.z = center->z;
- sphere.radius = radius;
- return Math3D_ColSphereTri(&sphere, &tri, &intersect);
+ CollisionPoly_GetVertices(poly, vtxList, sTri.vtx);
+ CollisionPoly_GetNormalF(poly, &sTri.plane.normal.x, &sTri.plane.normal.y, &sTri.plane.normal.z);
+ sTri.plane.originDist = poly->dist;
+ sSphere.center.x = center->x;
+ sSphere.center.y = center->y;
+ sSphere.center.z = center->z;
+ sSphere.radius = radius;
+ return Math3D_ColSphereTri(&sSphere, &sTri, &intersect);
}
+#else
+s32 CollisionPoly_SphVsPoly(CollisionPoly* poly, Vec3s* vtxList, Vec3f* center, f32 radius);
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_bgcheck/CollisionPoly_SphVsPoly.s")
+#endif
/**
* Add poly to StaticLookup table
@@ -466,9 +498,9 @@ void StaticLookup_AddPolyToSSList(CollisionContext* colCtx, SSList* ssList, Coll
curPolyId = curNode->polyId;
// if the poly being inserted has a lower y than the first poly
- if (polyYMin < vtxList[COLPOLY_VTX_INDEX(polyList[curPolyId].flags_vIA)].y &&
- polyYMin < vtxList[COLPOLY_VTX_INDEX(polyList[curPolyId].flags_vIB)].y &&
- polyYMin < vtxList[polyList[curPolyId].vIC].y) {
+ if ((polyYMin < vtxList[COLPOLY_VTX_INDEX(polyList[curPolyId].flags_vIA)].y) &&
+ (polyYMin < vtxList[COLPOLY_VTX_INDEX(polyList[curPolyId].flags_vIB)].y) &&
+ (polyYMin < vtxList[polyList[curPolyId].vIC].y)) {
SSNodeList_SetSSListHead(&colCtx->polyNodes, ssList, &polyId);
return;
}
@@ -487,9 +519,9 @@ void StaticLookup_AddPolyToSSList(CollisionContext* colCtx, SSList* ssList, Coll
curPolyId = nextNode->polyId;
// if the poly being inserted is lower than the next poly
- if (polyYMin < vtxList[COLPOLY_VTX_INDEX(polyList[curPolyId].flags_vIA)].y &&
- polyYMin < vtxList[COLPOLY_VTX_INDEX(polyList[curPolyId].flags_vIB)].y &&
- polyYMin < vtxList[polyList[curPolyId].vIC].y) {
+ if ((polyYMin < vtxList[COLPOLY_VTX_INDEX(polyList[curPolyId].flags_vIA)].y) &&
+ (polyYMin < vtxList[COLPOLY_VTX_INDEX(polyList[curPolyId].flags_vIB)].y) &&
+ (polyYMin < vtxList[polyList[curPolyId].vIC].y)) {
newNodeId = SSNodeList_GetNextNodeIdx(&colCtx->polyNodes);
SSNode_SetValue(&colCtx->polyNodes.tbl[newNodeId], &polyId, curNode->next);
curNode->next = newNodeId;
@@ -542,8 +574,9 @@ f32 BgCheck_RaycastFloorStaticList(CollisionContext* colCtx, u16 xpFlags, SSList
if (((flags & 1) && (colPoly->normal.y < 0)) ||
((arg9 & 0x20) && ((colCtx->colHeader->surfaceTypeList[colPoly->type].data[0] >> 0x1E) & 1)) ||
COLPOLY_VIA_FLAG_TEST(colPoly->flags_vIA, xpFlags) ||
- (COLPOLY_VIA_FLAG_TEST(colPoly->flags_vIB, 4) && ((actor != NULL && actor->category != ACTORCAT_PLAYER) ||
- (actor == NULL && xpFlags != COLPOLY_IGNORE_CAMERA)))) {
+ (COLPOLY_VIA_FLAG_TEST(colPoly->flags_vIB, 4) &&
+ (((actor != NULL) && (actor->category != ACTORCAT_PLAYER)) ||
+ ((actor == NULL) && (xpFlags != COLPOLY_IGNORE_CAMERA))))) {
if (curNode->next == SS_NULL) {
break;
}
@@ -551,16 +584,16 @@ f32 BgCheck_RaycastFloorStaticList(CollisionContext* colCtx, u16 xpFlags, SSList
continue;
}
- if (pos->y < colCtx->colHeader->vtxList[COLPOLY_VTX_INDEX(colPoly->flags_vIA)].y &&
- pos->y < colCtx->colHeader->vtxList[COLPOLY_VTX_INDEX(colPoly->flags_vIB)].y &&
- pos->y < colCtx->colHeader->vtxList[colPoly->vIC].y) {
+ if ((pos->y < colCtx->colHeader->vtxList[COLPOLY_VTX_INDEX(colPoly->flags_vIA)].y) &&
+ (pos->y < colCtx->colHeader->vtxList[COLPOLY_VTX_INDEX(colPoly->flags_vIB)].y) &&
+ (pos->y < colCtx->colHeader->vtxList[colPoly->vIC].y)) {
break;
}
if (CollisionPoly_CheckYIntersect(colPoly, colCtx->colHeader->vtxList, pos->x, pos->z, &yIntersect,
checkDist)) {
// if poly is closer to pos without going over
- if (yIntersect < pos->y && result < yIntersect) {
+ if ((yIntersect < pos->y) && (result < yIntersect)) {
result = yIntersect;
*outPoly = colPoly;
}
@@ -682,7 +715,7 @@ s32 BgCheck_SphVsStaticWall(StaticLookup* lookup, CollisionContext* colCtx, u16
vtxB = &vtxList[COLPOLY_VTX_INDEX(curPoly->flags_vIB)];
vtxC = &vtxList[curPoly->vIC];
- if (pos->y < vtxA->y && pos->y < vtxB->y && pos->y < vtxC->y) {
+ if ((pos->y < vtxA->y) && (pos->y < vtxB->y) && (pos->y < vtxC->y)) {
break;
}
@@ -692,8 +725,9 @@ s32 BgCheck_SphVsStaticWall(StaticLookup* lookup, CollisionContext* colCtx, u16
normalXZ = sqrtf(SQ(nx) + SQ(nz));
planeDist = Math3D_DistPlaneToPos(nx, ny, nz, curPoly->dist, &resultPos);
if (radius < fabsf(planeDist) || COLPOLY_VIA_FLAG_TEST(curPoly->flags_vIA, xpFlags) ||
- (COLPOLY_VIA_FLAG_TEST(curPoly->flags_vIB, 4) && ((actor != NULL && actor->category != ACTORCAT_PLAYER) ||
- (actor == NULL && xpFlags != COLPOLY_IGNORE_CAMERA)))) {
+ (COLPOLY_VIA_FLAG_TEST(curPoly->flags_vIB, 4) &&
+ (((actor != NULL) && (actor->category != ACTORCAT_PLAYER)) ||
+ ((actor == NULL) && (xpFlags != COLPOLY_IGNORE_CAMERA))))) {
if (curNode->next == SS_NULL) {
break;
} else {
@@ -733,7 +767,7 @@ s32 BgCheck_SphVsStaticWall(StaticLookup* lookup, CollisionContext* colCtx, u16
zMin -= radius;
zMax += radius;
- if (resultPos.z < zMin || resultPos.z > zMax) {
+ if ((resultPos.z < zMin) || (resultPos.z > zMax)) {
if (curNode->next == SS_NULL) {
break;
} else {
@@ -769,7 +803,7 @@ s32 BgCheck_SphVsStaticWall(StaticLookup* lookup, CollisionContext* colCtx, u16
vtxB = &vtxList[COLPOLY_VTX_INDEX(curPoly->flags_vIB)];
vtxC = &vtxList[curPoly->vIC];
- if (pos->y < vtxA->y && pos->y < vtxB->y && pos->y < vtxC->y) {
+ if ((pos->y < vtxA->y) && (pos->y < vtxB->y) && (pos->y < vtxC->y)) {
break;
}
@@ -779,8 +813,9 @@ s32 BgCheck_SphVsStaticWall(StaticLookup* lookup, CollisionContext* colCtx, u16
normalXZ = sqrtf(SQ(nx) + SQ(nz));
planeDist = Math3D_DistPlaneToPos(nx, ny, nz, curPoly->dist, &resultPos);
if (radius < fabsf(planeDist) || COLPOLY_VIA_FLAG_TEST(curPoly->flags_vIA, xpFlags) ||
- (COLPOLY_VIA_FLAG_TEST(curPoly->flags_vIB, 4) && ((actor != NULL && actor->category != ACTORCAT_PLAYER) ||
- (actor == NULL && xpFlags != COLPOLY_IGNORE_CAMERA)))) {
+ (COLPOLY_VIA_FLAG_TEST(curPoly->flags_vIB, 4) &&
+ (((actor != NULL) && (actor->category != ACTORCAT_PLAYER)) ||
+ ((actor == NULL) && (xpFlags != COLPOLY_IGNORE_CAMERA))))) {
if (curNode->next == SS_NULL) {
break;
} else {
@@ -820,7 +855,7 @@ s32 BgCheck_SphVsStaticWall(StaticLookup* lookup, CollisionContext* colCtx, u16
xMin -= radius;
xMax += radius;
- if (resultPos.x < xMin || xMax < resultPos.x) {
+ if ((resultPos.x < xMin) || (xMax < resultPos.x)) {
if (curNode->next == SS_NULL) {
break;
} else {
@@ -886,8 +921,8 @@ s32 BgCheck_CheckStaticCeiling(StaticLookup* lookup, u16 xpFlags, CollisionConte
curPoly = &polyList[curPolyId];
if (COLPOLY_VIA_FLAG_TEST(colCtx->colHeader->polyList[curPolyId].flags_vIA, xpFlags) ||
(COLPOLY_VIA_FLAG_TEST(colCtx->colHeader->polyList[curPolyId].flags_vIB, 4) &&
- ((actor != NULL && actor->category != ACTORCAT_PLAYER) ||
- (actor == NULL && xpFlags != COLPOLY_IGNORE_CAMERA)))) {
+ (((actor != NULL) && (actor->category != ACTORCAT_PLAYER)) ||
+ ((actor == NULL) && (xpFlags != COLPOLY_IGNORE_CAMERA))))) {
if (curNode->next == SS_NULL) {
break;
} else {
@@ -900,7 +935,7 @@ s32 BgCheck_CheckStaticCeiling(StaticLookup* lookup, u16 xpFlags, CollisionConte
intersectDist = ceilingY - *outY;
ny = COLPOLY_GET_NORMAL(curPoly->normal.y);
- if (intersectDist > 0 && intersectDist < checkHeight && intersectDist * ny <= 0) {
+ if ((intersectDist > 0) && (intersectDist < checkHeight) && (intersectDist * ny <= 0)) {
*outY = ceilingY - checkHeight;
*outPoly = curPoly;
result = true;
@@ -923,27 +958,24 @@ s32 BgCheck_CheckStaticCeiling(StaticLookup* lookup, u16 xpFlags, CollisionConte
* `posB` and `outPos` returns the point of intersection with `outPoly`
* `outDistSq` returns the squared distance from `posA` to the point of intersect
*/
-#ifdef NON_MATCHING
s32 BgCheck_CheckLineAgainstSSList(StaticLineTest* arg0) {
- CollisionContext* colCtx;
+ CollisionPoly* polyList;
s32 result;
- Vec3f polyIntersect; // sp7C
+ Vec3f polyIntersect;
SSNode* curNode;
u8* checkedPoly;
f32 minY;
f32 distSq;
- BgLineVsPolyTest test; // sp50
+ BgLineVsPolyTest test;
s16 polyId;
- CollisionPoly* polyList;
result = false;
if (arg0->ssList->head == SS_NULL) {
return result;
}
- colCtx = arg0->colCtx;
- curNode = &colCtx->polyNodes.tbl[arg0->ssList->head];
- polyList = colCtx->colHeader->polyList;
- test.vtxList = colCtx->colHeader->vtxList;
+ curNode = &arg0->colCtx->polyNodes.tbl[arg0->ssList->head];
+ polyList = arg0->colCtx->colHeader->polyList;
+ test.vtxList = arg0->colCtx->colHeader->vtxList;
test.posA = arg0->posA;
test.posB = arg0->posB;
test.planeIntersect = &polyIntersect; // reorder maybe
@@ -955,22 +987,22 @@ s32 BgCheck_CheckLineAgainstSSList(StaticLineTest* arg0) {
test.poly = &polyList[polyId];
checkedPoly = &arg0->colCtx->polyNodes.polyCheckTbl[polyId];
- if (*checkedPoly == true ||
- (arg0->xpFlags2 != 0 && !COLPOLY_VIA_FLAG_TEST(test.poly->flags_vIA, arg0->xpFlags2)) ||
+ if ((*checkedPoly == true) ||
+ ((arg0->xpFlags2 != 0) && !COLPOLY_VIA_FLAG_TEST(test.poly->flags_vIA, arg0->xpFlags2)) ||
COLPOLY_VIA_FLAG_TEST(test.poly->flags_vIA, arg0->xpFlags1) ||
(COLPOLY_VIA_FLAG_TEST(test.poly->flags_vIB, 4) &&
- ((arg0->actor != NULL && arg0->actor->category != ACTORCAT_PLAYER) ||
- (arg0->actor == NULL && arg0->xpFlags1 != COLPOLY_IGNORE_CAMERA)))) {
+ (((arg0->actor != NULL) && (arg0->actor->category != ACTORCAT_PLAYER)) ||
+ ((arg0->actor == NULL) && (arg0->xpFlags1 != COLPOLY_IGNORE_CAMERA))))) {
if (curNode->next == SS_NULL) {
break;
} else {
- curNode = &colCtx->polyNodes.tbl[curNode->next];
+ curNode = &arg0->colCtx->polyNodes.tbl[curNode->next];
continue;
}
}
*checkedPoly = true;
minY = CollisionPoly_GetMinY(test.poly, test.vtxList);
- if (test.posA->y < minY && test.posB->y < minY) {
+ if (((test.posA->y < minY)) && (test.posB->y < minY)) {
break;
}
if (CollisionPoly_LineVsPoly(&test)) {
@@ -990,10 +1022,6 @@ s32 BgCheck_CheckLineAgainstSSList(StaticLineTest* arg0) {
}
return result;
}
-#else
-s32 BgCheck_CheckLineAgainstSSList(StaticLineTest* arg0);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_bgcheck/BgCheck_CheckLineAgainstSSList.s")
-#endif
/**
* Tests if line `posA` to `posB` intersects with a static poly in `lookup`. Uses polyCheckTbl
@@ -1005,21 +1033,21 @@ s32 BgCheck_CheckLineAgainstSSList(StaticLineTest* arg0);
s32 BgCheck_CheckLineInSubdivision(StaticLineTest* arg0) {
s32 result = false;
- if ((arg0->bccFlags & BGCHECK_CHECK_FLOOR) && arg0->lookup->floor.head != SS_NULL) {
+ if ((arg0->bccFlags & BGCHECK_CHECK_FLOOR) && (arg0->lookup->floor.head != SS_NULL)) {
arg0->ssList = &arg0->lookup->floor;
if (BgCheck_CheckLineAgainstSSList(arg0)) {
result = true;
}
}
- if ((arg0->bccFlags & BGCHECK_CHECK_WALL) && arg0->lookup->wall.head != SS_NULL) {
+ if ((arg0->bccFlags & BGCHECK_CHECK_WALL) && (arg0->lookup->wall.head != SS_NULL)) {
arg0->ssList = &arg0->lookup->wall;
if (BgCheck_CheckLineAgainstSSList(arg0)) {
result = true;
}
}
- if ((arg0->bccFlags & BGCHECK_CHECK_CEILING) && arg0->lookup->ceiling.head != SS_NULL) {
+ if ((arg0->bccFlags & BGCHECK_CHECK_CEILING) && (arg0->lookup->ceiling.head != SS_NULL)) {
arg0->ssList = &arg0->lookup->ceiling;
if (BgCheck_CheckLineAgainstSSList(arg0)) {
result = true;
@@ -1049,8 +1077,8 @@ s32 BgCheck_SphVsFirstStaticPolyList(SSNode* node, u16 xpFlags, CollisionContext
curPoly = &polyList[curPolyId];
if (COLPOLY_VIA_FLAG_TEST(colCtx->colHeader->polyList[curPolyId].flags_vIA, xpFlags) ||
(COLPOLY_VIA_FLAG_TEST(colCtx->colHeader->polyList[curPolyId].flags_vIB, 4) &&
- ((actor != NULL && actor->category != ACTORCAT_PLAYER) ||
- (actor == NULL && xpFlags != COLPOLY_IGNORE_CAMERA)))) {
+ (((actor != NULL) && (actor->category != ACTORCAT_PLAYER)) ||
+ ((actor == NULL) && (xpFlags != COLPOLY_IGNORE_CAMERA))))) {
if (node->next != SS_NULL) {
node = &colCtx->polyNodes.tbl[node->next];
continue;
@@ -1058,9 +1086,9 @@ s32 BgCheck_SphVsFirstStaticPolyList(SSNode* node, u16 xpFlags, CollisionContext
break;
}
- if (center->y + radius < vtxList[COLPOLY_VTX_INDEX(curPoly->flags_vIA)].y &&
- center->y + radius < vtxList[COLPOLY_VTX_INDEX(curPoly->flags_vIB)].y &&
- center->y + radius < vtxList[curPoly->vIC].y) {
+ if ((center->y + radius < vtxList[COLPOLY_VTX_INDEX(curPoly->flags_vIA)].y) &&
+ (center->y + radius < vtxList[COLPOLY_VTX_INDEX(curPoly->flags_vIB)].y) &&
+ (center->y + radius < vtxList[curPoly->vIC].y)) {
break;
}
@@ -1086,19 +1114,19 @@ s32 BgCheck_SphVsFirstStaticPolyList(SSNode* node, u16 xpFlags, CollisionContext
*/
s32 BgCheck_SphVsFirstStaticPoly(StaticLookup* lookup, u16 xpFlags, CollisionContext* colCtx, Vec3f* center, f32 radius,
CollisionPoly** outPoly, u16 bciFlags, Actor* actor) {
- if (lookup->floor.head != SS_NULL && !(bciFlags & BGCHECK_IGNORE_FLOOR) &&
+ if ((lookup->floor.head != SS_NULL) && !(bciFlags & BGCHECK_IGNORE_FLOOR) &&
BgCheck_SphVsFirstStaticPolyList(&colCtx->polyNodes.tbl[lookup->floor.head], xpFlags, colCtx, center, radius,
outPoly, actor)) {
return true;
}
- if (lookup->wall.head != SS_NULL && !(bciFlags & BGCHECK_IGNORE_WALL) &&
+ if ((lookup->wall.head != SS_NULL) && !(bciFlags & BGCHECK_IGNORE_WALL) &&
BgCheck_SphVsFirstStaticPolyList(&colCtx->polyNodes.tbl[lookup->wall.head], xpFlags, colCtx, center, radius,
outPoly, actor)) {
return true;
}
- if (lookup->ceiling.head != SS_NULL && !(bciFlags & BGCHECK_IGNORE_CEILING) &&
+ if ((lookup->ceiling.head != SS_NULL) && !(bciFlags & BGCHECK_IGNORE_CEILING) &&
BgCheck_SphVsFirstStaticPolyList(&colCtx->polyNodes.tbl[lookup->ceiling.head], xpFlags, colCtx, center, radius,
outPoly, actor)) {
return true;
@@ -1569,7 +1597,7 @@ void BgCheck_Allocate(CollisionContext* colCtx, PlayState* play, CollisionHeader
colCtx->subdivAmount.z = 16;
}
}
- colCtx->lookupTbl = THA_AllocEndAlign(
+ colCtx->lookupTbl = THA_AllocTailAlign(
&play->state.heap,
colCtx->subdivAmount.x * sizeof(StaticLookup) * colCtx->subdivAmount.y * colCtx->subdivAmount.z, ~1);
if (colCtx->lookupTbl == NULL) {
@@ -1634,10 +1662,10 @@ CollisionHeader* BgCheck_GetCollisionHeader(CollisionContext* colCtx, s32 bgId)
if (bgId == BGCHECK_SCENE) {
return colCtx->colHeader;
}
- if (bgId < 0 || bgId > BG_ACTOR_MAX) {
+ if ((bgId < 0) || (bgId > BG_ACTOR_MAX)) {
return NULL;
}
- if (!(colCtx->dyna.bgActorFlags[bgId] & 1)) {
+ if (!(colCtx->dyna.bgActorFlags[bgId] & BGACTOR_IN_USE)) {
return NULL;
}
return colCtx->dyna.bgActors[bgId].colHeader;
@@ -1647,12 +1675,12 @@ CollisionHeader* BgCheck_GetCollisionHeader(CollisionContext* colCtx, s32 bgId)
* Test if pos is near collision boundaries
*/
s32 BgCheck_PosInStaticBoundingBox(CollisionContext* colCtx, Vec3f* pos) {
- if (pos->x < (colCtx->minBounds.x - BGCHECK_SUBDIV_OVERLAP) ||
- (colCtx->maxBounds.x + BGCHECK_SUBDIV_OVERLAP) < pos->x ||
- pos->y < (colCtx->minBounds.y - BGCHECK_SUBDIV_OVERLAP) ||
- (colCtx->maxBounds.y + BGCHECK_SUBDIV_OVERLAP) < pos->y ||
- pos->z < (colCtx->minBounds.z - BGCHECK_SUBDIV_OVERLAP) ||
- (colCtx->maxBounds.z + BGCHECK_SUBDIV_OVERLAP) < pos->z) {
+ if ((pos->x < (colCtx->minBounds.x - BGCHECK_SUBDIV_OVERLAP)) ||
+ ((colCtx->maxBounds.x + BGCHECK_SUBDIV_OVERLAP) < pos->x) ||
+ (pos->y < (colCtx->minBounds.y - BGCHECK_SUBDIV_OVERLAP)) ||
+ ((colCtx->maxBounds.y + BGCHECK_SUBDIV_OVERLAP) < pos->y) ||
+ (pos->z < (colCtx->minBounds.z - BGCHECK_SUBDIV_OVERLAP)) ||
+ ((colCtx->maxBounds.z + BGCHECK_SUBDIV_OVERLAP) < pos->z)) {
return false;
}
return true;
@@ -1713,7 +1741,7 @@ f32 BgCheck_RaycastFloorImpl(PlayState* play, CollisionContext* colCtx, u16 xpFl
}
}
- if (yIntersect != BGCHECK_Y_MIN && func_800C9B68(colCtx, *outPoly, *outBgId)) {
+ if ((yIntersect != BGCHECK_Y_MIN) && SurfaceType_IsSoft(colCtx, *outPoly, *outBgId)) {
yIntersect -= 1.0f;
}
return yIntersect;
@@ -1916,7 +1944,7 @@ s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResul
dz = posNext->z - posPrev->z;
// if there's movement on the xz plane, and argA flag is 0,
- if ((dx != 0.0f || dz != 0.0f) && (argA & 1) == 0) {
+ if (((dx != 0.0f) || (dz != 0.0f)) && !(argA & 1)) {
if ((checkHeight + dy) < 5.0f) {
//! @bug checkHeight is not applied to posPrev/posNext
result = BgCheck_CheckLineImpl(colCtx, xpFlags, COLPOLY_IGNORE_NONE, posPrev, posNext, &posIntersect, &poly,
@@ -1933,7 +1961,7 @@ s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResul
}
posResult->z = posIntersect.z;
if (actor != NULL) {
- actor->bgCheckFlags |= 0x1000;
+ actor->bgCheckFlags |= BGCHECKFLAG_PLAYER_1000;
}
}
// poly is wall
@@ -1977,9 +2005,9 @@ s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResul
*outPoly = poly;
*outBgId = bgId;
result = true;
- if (COLPOLY_GET_NORMAL(poly->normal.y) > 0.5f) {
+ if (poly->normal.y * COLPOLY_NORMAL_FRAC > 0.5f) {
if (actor != NULL) {
- actor->bgCheckFlags |= 0x1000;
+ actor->bgCheckFlags |= BGCHECKFLAG_PLAYER_1000;
}
}
} else {
@@ -2010,7 +2038,7 @@ s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResul
result = true;
}
// if a collision with a dyna poly was detected
- if (dynaPolyCollision || *outBgId != BGCHECK_SCENE) {
+ if (dynaPolyCollision || (*outBgId != BGCHECK_SCENE)) {
if (BgCheck_CheckLineImpl(colCtx, xpFlags, COLPOLY_IGNORE_NONE, posPrev, posResult, &posIntersect2, &poly,
&bgId2, actor, 1.0f, BGCHECK_CHECK_ONE_FACE | BGCHECK_CHECK_WALL)) {
nx3 = COLPOLY_GET_NORMAL(poly->normal.x);
@@ -2202,7 +2230,7 @@ s32 BgCheck_CheckLineImpl(CollisionContext* colCtx, u16 xpFlags1, u16 xpFlags2,
checkLine.actor = actor;
result = false;
- if (subdivMin[0] != subdivMax[0] || subdivMin[1] != subdivMax[1] || subdivMin[2] != subdivMax[2]) {
+ if ((subdivMin[0] != subdivMax[0]) || (subdivMin[1] != subdivMax[1]) || (subdivMin[2] != subdivMax[2])) {
for (i = 0; i < 3; i++) {
if (subdivMax[i] < subdivMin[i]) {
j = subdivMax[i];
@@ -2456,8 +2484,8 @@ void SSNodeList_Init(SSNodeList* this) {
void SSNodeList_Alloc(PlayState* play, SSNodeList* this, s32 tblMax, s32 numPolys) {
this->max = tblMax;
this->count = 0;
- this->tbl = THA_AllocEndAlign(&play->state.heap, tblMax * sizeof(SSNode), -2);
- this->polyCheckTbl = THA_AllocEndAlign16(&play->state.heap, numPolys * sizeof(u8));
+ this->tbl = THA_AllocTailAlign(&play->state.heap, tblMax * sizeof(SSNode), -2);
+ this->polyCheckTbl = THA_AllocTailAlign16(&play->state.heap, numPolys * sizeof(u8));
if (this->polyCheckTbl == NULL) {
sprintf(D_801ED950, "this->polygon_check == NULL(game_alloc() MemoryAllocationError.)\n");
@@ -2512,9 +2540,9 @@ void ScaleRotPos_SetValue(ScaleRotPos* srp, Vec3f* scale, Vec3s* rot, Vec3f* pos
* ScaleRotPos equality test
*/
s32 ScaleRotPos_IsEqual(ScaleRotPos* a, ScaleRotPos* b) {
- if (a->scale.x != b->scale.x || a->scale.y != b->scale.y || a->scale.z != b->scale.z || a->rot.x != b->rot.x ||
- a->rot.y != b->rot.y || a->rot.z != b->rot.z || a->pos.x != b->pos.x || a->pos.y != b->pos.y ||
- a->pos.z != b->pos.z) {
+ if ((a->scale.x != b->scale.x) || (a->scale.y != b->scale.y) || (a->scale.z != b->scale.z) ||
+ (a->rot.x != b->rot.x) || (a->rot.y != b->rot.y) || (a->rot.z != b->rot.z) || (a->pos.x != b->pos.x) ||
+ (a->pos.y != b->pos.y) || (a->pos.z != b->pos.z)) {
return false;
}
return true;
@@ -2599,7 +2627,7 @@ void DynaPoly_NullPolyList(CollisionPoly** polyList) {
* Allocate dyna.polyList
*/
void DynaPoly_AllocPolyList(PlayState* play, CollisionPoly** polyList, s32 numPolys) {
- *polyList = THA_AllocEndAlign(&play->state.heap, numPolys * sizeof(CollisionPoly), -2);
+ *polyList = THA_AllocTailAlign(&play->state.heap, numPolys * sizeof(CollisionPoly), -2);
}
/**
@@ -2613,7 +2641,7 @@ void DynaPoly_NullVtxList(Vec3s** vtxList) {
* Allocate dyna.vtxList
*/
void DynaPoly_AllocVtxList(PlayState* play, Vec3s** vtxList, s32 numVtx) {
- *vtxList = THA_AllocEndAlign(&play->state.heap, numVtx * sizeof(Vec3s), -2);
+ *vtxList = THA_AllocTailAlign(&play->state.heap, numVtx * sizeof(Vec3s), -2);
}
/**
@@ -2628,7 +2656,7 @@ void DynaPoly_InitWaterBoxList(DynaWaterBoxList* waterBoxList) {
* Allocate dyna.waterBoxList
*/
void DynaPoly_AllocWaterBoxList(PlayState* play, DynaWaterBoxList* waterBoxList, s32 numWaterBoxes) {
- waterBoxList->boxes = THA_AllocEndAlign(&play->state.heap, numWaterBoxes * sizeof(WaterBox), -2);
+ waterBoxList->boxes = THA_AllocTailAlign(&play->state.heap, numWaterBoxes * sizeof(WaterBox), -2);
}
/**
@@ -2642,7 +2670,7 @@ void DynaPoly_SetBgActorPrevTransform(PlayState* play, BgActor* bgActor) {
* Is BgActor Id
*/
s32 DynaPoly_IsBgIdBgActor(s32 bgId) {
- if (bgId < 0 || bgId >= BG_ACTOR_MAX) {
+ if ((bgId < 0) || (bgId >= BG_ACTOR_MAX)) {
return false;
}
return true;
@@ -2691,8 +2719,8 @@ s32 DynaPoly_SetBgActor(PlayState* play, DynaCollisionContext* dyna, Actor* acto
s32 foundSlot = false;
for (bgId = 0; bgId < BG_ACTOR_MAX; bgId++) {
- if (!(dyna->bgActorFlags[bgId] & 1)) {
- dyna->bgActorFlags[bgId] |= 1;
+ if (!(dyna->bgActorFlags[bgId] & BGACTOR_IN_USE)) {
+ dyna->bgActorFlags[bgId] |= BGACTOR_IN_USE;
foundSlot = true;
break;
}
@@ -2705,7 +2733,7 @@ s32 DynaPoly_SetBgActor(PlayState* play, DynaCollisionContext* dyna, Actor* acto
BgActor_SetActor(&dyna->bgActors[bgId], actor, colHeader);
dyna->bitFlag |= DYNAPOLY_INVALIDATE_LOOKUP;
- dyna->bgActorFlags[bgId] &= ~2;
+ dyna->bgActorFlags[bgId] &= ~BGACTOR_1;
return bgId;
}
@@ -2713,51 +2741,51 @@ s32 DynaPoly_SetBgActor(PlayState* play, DynaCollisionContext* dyna, Actor* acto
* Gets the actor assigned to `bgId`
*/
DynaPolyActor* DynaPoly_GetActor(CollisionContext* colCtx, s32 bgId) {
- if (!DynaPoly_IsBgIdBgActor(bgId) || !(colCtx->dyna.bgActorFlags[bgId] & 1) ||
- colCtx->dyna.bgActorFlags[bgId] & 2) {
+ if (!DynaPoly_IsBgIdBgActor(bgId) || !(colCtx->dyna.bgActorFlags[bgId] & BGACTOR_IN_USE) ||
+ (colCtx->dyna.bgActorFlags[bgId] & BGACTOR_1)) {
return NULL;
}
return (DynaPolyActor*)colCtx->dyna.bgActors[bgId].actor;
}
-void func_800C62BC(PlayState* play, DynaCollisionContext* dyna, s32 bgId) {
+void DynaPoly_DisableCollision(PlayState* play, DynaCollisionContext* dyna, s32 bgId) {
if (DynaPoly_IsBgIdBgActor(bgId)) {
- dyna->bgActorFlags[bgId] |= 4;
+ dyna->bgActorFlags[bgId] |= BGACTOR_COLLISION_DISABLED;
dyna->bitFlag |= DYNAPOLY_INVALIDATE_LOOKUP;
}
}
-void func_800C6314(PlayState* play, DynaCollisionContext* dyna, s32 bgId) {
+void DynaPoly_EnableCollision(PlayState* play, DynaCollisionContext* dyna, s32 bgId) {
if (DynaPoly_IsBgIdBgActor(bgId)) {
- dyna->bgActorFlags[bgId] &= ~4;
+ dyna->bgActorFlags[bgId] &= ~BGACTOR_COLLISION_DISABLED;
dyna->bitFlag |= DYNAPOLY_INVALIDATE_LOOKUP;
}
}
-void func_800C636C(PlayState* play, DynaCollisionContext* dyna, s32 bgId) {
+void DynaPoly_DisableCeilingCollision(PlayState* play, DynaCollisionContext* dyna, s32 bgId) {
if (DynaPoly_IsBgIdBgActor(bgId)) {
- dyna->bgActorFlags[bgId] |= 8;
+ dyna->bgActorFlags[bgId] |= BGACTOR_CEILING_COLLISION_DISABLED;
dyna->bitFlag |= DYNAPOLY_INVALIDATE_LOOKUP;
}
}
-void func_800C63C4(PlayState* play, DynaCollisionContext* dyna, s32 bgId) {
+void DynaPoly_EnableCeilingCollision(PlayState* play, DynaCollisionContext* dyna, s32 bgId) {
if (DynaPoly_IsBgIdBgActor(bgId)) {
- dyna->bgActorFlags[bgId] &= ~8;
+ dyna->bgActorFlags[bgId] &= ~BGACTOR_CEILING_COLLISION_DISABLED;
dyna->bitFlag |= DYNAPOLY_INVALIDATE_LOOKUP;
}
}
-void func_800C641C(PlayState* play, DynaCollisionContext* dyna, s32 bgId) {
+void DynaPoly_DisableFloorCollision(PlayState* play, DynaCollisionContext* dyna, s32 bgId) {
if (DynaPoly_IsBgIdBgActor(bgId)) {
- dyna->bgActorFlags[bgId] |= 0x20;
+ dyna->bgActorFlags[bgId] |= BGACTOR_FLOOR_COLLISION_DISABLED;
dyna->bitFlag |= DYNAPOLY_INVALIDATE_LOOKUP;
}
}
-void func_800C6474(PlayState* play, DynaCollisionContext* dyna, s32 bgId) {
+void DynaPoly_EnableFloorCollision(PlayState* play, DynaCollisionContext* dyna, s32 bgId) {
if (DynaPoly_IsBgIdBgActor(bgId)) {
- dyna->bgActorFlags[bgId] &= ~0x20;
+ dyna->bgActorFlags[bgId] &= ~BGACTOR_FLOOR_COLLISION_DISABLED;
dyna->bitFlag |= DYNAPOLY_INVALIDATE_LOOKUP;
}
}
@@ -2776,11 +2804,11 @@ void DynaPoly_DeleteBgActor(PlayState* play, DynaCollisionContext* dyna, s32 bgI
actor->bgId = BGACTOR_NEG_ONE;
dyna->bgActors[bgId].actor = NULL;
- dyna->bgActorFlags[bgId] |= 2;
+ dyna->bgActorFlags[bgId] |= BGACTOR_1;
}
}
-void func_800C6554(PlayState* play, DynaCollisionContext* dyna) {
+void DynaPoly_InvalidateLookup(PlayState* play, DynaCollisionContext* dyna) {
dyna->bitFlag |= DYNAPOLY_INVALIDATE_LOOKUP;
}
@@ -2834,38 +2862,28 @@ void BgCheck_CalcWaterboxDimensions(Vec3f* minPos, Vec3f* maxXPos, Vec3f* maxZPo
}
}
-#ifdef NON_MATCHING
/**
* original name: DynaPolyInfo_expandSRT
*/
-void DynaPoly_ExpandSRT(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s32* vtxStartIndex, s32* polyStartIndex,
- s32* waterBoxStartIndex) {
+void DynaPoly_AddBgActorToLookup(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s32* vtxStartIndex,
+ s32* polyStartIndex, s32* waterBoxStartIndex) {
Actor* actor;
- s32 pad;
- s32 pad2;
- f32 numVtxInverse;
s32 i;
- Vec3f pos; // sp170
+ s32 j;
+ s32 wi;
+ f32 numVtxInverse;
+ Vec3f pos;
Sphere16* sphere;
Vec3s* dVtxList;
Vec3s* point;
- Vec3f newCenterPoint; // sp158
-
+ Vec3f newCenterPoint;
f32 newRadiusSq;
CollisionHeader* pbgdata;
- Vec3f newVtx; // sp144
- Vec3f vtxA; // sp138
- Vec3f vtxB; // sp12C
- Vec3f vtxC; // sp120
+ Vec3f newVtx;
+ Vec3f vtxA;
+ Vec3f vtxB;
+ Vec3f vtxC;
Vec3f newNormal;
- s32 wi;
- Vec3f spB8; // waterbox ?
- Vec3f spAC;
- Vec3f spA0; // waterbox ?
- Vec3f sp94;
- Vec3f sp88; // waterbox ?
- Vec3f sp7C;
- WaterBox* waterBox;
pbgdata = dyna->bgActors[bgId].colHeader;
sphere = &dyna->bgActors[bgId].boundingSphere;
@@ -2876,25 +2894,28 @@ void DynaPoly_ExpandSRT(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s
pos = actor->world.pos;
pos.y += actor->shape.yOffset * actor->scale.y;
+ //! FAKE:
+ if (pbgdata && pbgdata) {}
+
ScaleRotPos_SetValue(&dyna->bgActors[bgId].curTransform, &actor->scale, &actor->shape.rot, &pos);
- if (dyna->bgActorFlags[bgId] & 4) {
+ if (dyna->bgActorFlags[bgId] & BGACTOR_COLLISION_DISABLED) {
return;
}
- if (!(DYNA_WATERBOX_MAX >= *waterBoxStartIndex + pbgdata->numWaterBoxes)) {
+ if (*waterBoxStartIndex + pbgdata->numWaterBoxes > DYNA_WATERBOX_MAX) {
sprintf(D_801EDAA8, "water_poly Error:[MoveBG OSUGI!!!]");
sprintf(D_801EDAF8, "num = %d > %d\n", *waterBoxStartIndex + pbgdata->numWaterBoxes, DYNA_WATERBOX_MAX);
Fault_AddHungupAndCrashImpl(D_801EDAA8, D_801EDAF8);
}
- if (!(dyna->polyListMax >= *polyStartIndex + pbgdata->numPolygons)) {
+ if (*polyStartIndex + pbgdata->numPolygons > dyna->polyListMax) {
sprintf(D_801EDAA8, "bg_poly Error:[MoveBG OSUGI!!!]");
sprintf(D_801EDAF8, "num = %d > %d\n", *polyStartIndex + pbgdata->numPolygons, dyna->polyListMax);
Fault_AddHungupAndCrashImpl(D_801EDAA8, D_801EDAF8);
}
- if (!(dyna->vtxListMax >= *vtxStartIndex + pbgdata->numVertices)) {
+ if (*vtxStartIndex + pbgdata->numVertices > dyna->vtxListMax) {
sprintf(D_801EDAA8, "bg_vert Error:[MoveBG OSUGI!!!]");
sprintf(D_801EDAF8, "num = %d > %d\n", *vtxStartIndex + pbgdata->numVertices, dyna->vtxListMax);
Fault_AddHungupAndCrashImpl(D_801EDAA8, D_801EDAF8);
@@ -2908,13 +2929,13 @@ void DynaPoly_ExpandSRT(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s
s16 normalY = poly->normal.y;
if (normalY > COLPOLY_SNORMAL(0.5f)) {
- if (!(dyna->bgActorFlags[bgId] & 0x20)) {
+ if (!(dyna->bgActorFlags[bgId] & BGACTOR_FLOOR_COLLISION_DISABLED)) {
s16 polyIndex = pi;
DynaSSNodeList_SetSSListHead(&dyna->polyNodes, &dyna->bgActors[bgId].dynaLookup.floor, &polyIndex);
}
} else if (normalY < COLPOLY_SNORMAL(-0.8f)) {
- if (!(dyna->bgActorFlags[bgId] & 8)) {
+ if (!(dyna->bgActorFlags[bgId] & BGACTOR_CEILING_COLLISION_DISABLED)) {
s16 polyIndex = pi;
DynaSSNodeList_SetSSListHead(&dyna->polyNodes, &dyna->bgActors[bgId].dynaLookup.ceiling,
@@ -2930,149 +2951,156 @@ void DynaPoly_ExpandSRT(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s
*polyStartIndex += pbgdata->numPolygons;
*vtxStartIndex += pbgdata->numVertices;
*waterBoxStartIndex += pbgdata->numWaterBoxes;
- } else {
- SkinMatrix_SetScaleRotateYRPTranslate(
- &D_801EDA40, dyna->bgActors[bgId].curTransform.scale.x, dyna->bgActors[bgId].curTransform.scale.y,
- dyna->bgActors[bgId].curTransform.scale.z, dyna->bgActors[bgId].curTransform.rot.x,
- dyna->bgActors[bgId].curTransform.rot.y, dyna->bgActors[bgId].curTransform.rot.z,
- dyna->bgActors[bgId].curTransform.pos.x, dyna->bgActors[bgId].curTransform.pos.y,
- dyna->bgActors[bgId].curTransform.pos.z);
+ return;
+ }
- if (pbgdata->numVertices != 0 && pbgdata->numPolygons != 0) {
- numVtxInverse = 1.0f / pbgdata->numVertices;
- newCenterPoint.x = newCenterPoint.y = newCenterPoint.z = 0.0f;
- for (i = 0; i < pbgdata->numVertices; i++) {
- Vec3f vtx; // spF4
- Vec3f vtxT; // spE8 Vtx after mtx transform
+ SkinMatrix_SetScaleRotateYRPTranslate(
+ &sModelToWorldMtxF, dyna->bgActors[bgId].curTransform.scale.x, dyna->bgActors[bgId].curTransform.scale.y,
+ dyna->bgActors[bgId].curTransform.scale.z, dyna->bgActors[bgId].curTransform.rot.x,
+ dyna->bgActors[bgId].curTransform.rot.y, dyna->bgActors[bgId].curTransform.rot.z,
+ dyna->bgActors[bgId].curTransform.pos.x, dyna->bgActors[bgId].curTransform.pos.y,
+ dyna->bgActors[bgId].curTransform.pos.z);
- Math_Vec3s_ToVec3f(&vtx, &pbgdata->vtxList[i]);
- SkinMatrix_Vec3fMtxFMultXYZ(&D_801EDA40, &vtx, &vtxT);
- BgCheck_Vec3fToVec3s(&dyna->vtxList[*vtxStartIndex + i], &vtxT);
+ if ((pbgdata->numVertices != 0) && (pbgdata->numPolygons != 0)) {
+ f32 radiusSq;
- if (i == 0) {
- dyna->bgActors[bgId].minY = dyna->bgActors[bgId].maxY = vtxT.y;
- } else if (vtxT.y < dyna->bgActors[bgId].minY) {
- dyna->bgActors[bgId].minY = vtxT.y;
- } else if (dyna->bgActors[bgId].maxY < vtxT.y) {
- dyna->bgActors[bgId].maxY = vtxT.y;
- }
- newCenterPoint.x += vtxT.x;
- newCenterPoint.y += vtxT.y;
- newCenterPoint.z += vtxT.z;
+ numVtxInverse = 1.0f / pbgdata->numVertices;
+ newCenterPoint.x = newCenterPoint.y = newCenterPoint.z = 0.0f;
+ for (i = 0; i < pbgdata->numVertices; i++) {
+ Vec3f vtx;
+ Vec3f vtxT; // Vtx after mtx transform
+ s32 pad;
+
+ Math_Vec3s_ToVec3f(&vtx, &pbgdata->vtxList[i]);
+ SkinMatrix_Vec3fMtxFMultXYZ(&sModelToWorldMtxF, &vtx, &vtxT);
+ BgCheck_Vec3fToVec3s(&dyna->vtxList[*vtxStartIndex + (u32)i], &vtxT);
+
+ if (i == 0) {
+ dyna->bgActors[bgId].minY = dyna->bgActors[bgId].maxY = vtxT.y;
+ } else if (vtxT.y < dyna->bgActors[bgId].minY) {
+ dyna->bgActors[bgId].minY = vtxT.y;
+ } else if (dyna->bgActors[bgId].maxY < vtxT.y) {
+ dyna->bgActors[bgId].maxY = vtxT.y;
}
+ newCenterPoint.x += vtxT.x;
+ newCenterPoint.y += vtxT.y;
+ newCenterPoint.z += vtxT.z;
+ }
- newCenterPoint.x *= numVtxInverse;
- newCenterPoint.y *= numVtxInverse;
- newCenterPoint.z *= numVtxInverse;
- sphere->center.x = newCenterPoint.x;
- sphere->center.y = newCenterPoint.y;
- sphere->center.z = newCenterPoint.z;
- newRadiusSq = -100.0f;
+ newCenterPoint.x *= numVtxInverse;
+ newCenterPoint.y *= numVtxInverse;
+ newCenterPoint.z *= numVtxInverse;
+ sphere->center.x = newCenterPoint.x;
+ sphere->center.y = newCenterPoint.y;
+ sphere->center.z = newCenterPoint.z;
+ newRadiusSq = -100.0f;
- for (i = 0; i < pbgdata->numVertices; i++) {
- f32 radiusSq;
- s32 idx = *vtxStartIndex + i;
-
- newVtx.x = dyna->vtxList[idx].x;
- newVtx.y = dyna->vtxList[idx].y;
- newVtx.z = dyna->vtxList[idx].z;
- radiusSq = Math3D_Vec3fDistSq(&newVtx, &newCenterPoint);
- if (newRadiusSq < radiusSq) {
- newRadiusSq = radiusSq;
- }
- }
-
- sphere->radius = sqrtf(newRadiusSq) * 1.1f;
-
- for (i = 0; i < pbgdata->numPolygons; i++) {
- CollisionPoly* newPoly = &dyna->polyList[*polyStartIndex + i];
- f32 newNormMagnitude;
- u32 vIA;
- u32 vIB;
- u32 vIC;
-
- *newPoly = pbgdata->polyList[i];
-
- vIA = (COLPOLY_VTX_INDEX(newPoly->flags_vIA) + *vtxStartIndex);
- vIB = (COLPOLY_VTX_INDEX(newPoly->flags_vIB) + *vtxStartIndex);
- vIC = newPoly->vIC + *vtxStartIndex;
-
- newPoly->flags_vIA = vIA | ((*newPoly).flags_vIA & 0xE000);
- newPoly->flags_vIB = vIB | ((*newPoly).flags_vIB & 0xE000);
- newPoly->vIC = vIC;
- dVtxList = dyna->vtxList;
- vtxA.x = dVtxList[vIA].x;
- vtxA.y = dVtxList[vIA].y;
- vtxA.z = dVtxList[vIA].z;
- vtxB.x = dVtxList[vIB].x;
- vtxB.y = dVtxList[vIB].y;
- vtxB.z = dVtxList[vIB].z;
- vtxC.x = dVtxList[vIC].x;
- vtxC.y = dVtxList[vIC].y;
- vtxC.z = dVtxList[vIC].z;
- Math3D_SurfaceNorm(&vtxA, &vtxB, &vtxC, &newNormal);
- newNormMagnitude = Math3D_Vec3fMagnitude(&newNormal);
-
- if (!IS_ZERO(newNormMagnitude)) {
- newNormal.x *= (1.0f / newNormMagnitude);
- newNormal.y *= (1.0f / newNormMagnitude);
- newNormal.z *= (1.0f / newNormMagnitude);
- newPoly->normal.x = COLPOLY_SNORMAL(newNormal.x);
- newPoly->normal.y = COLPOLY_SNORMAL(newNormal.y);
- newPoly->normal.z = COLPOLY_SNORMAL(newNormal.z);
- }
-
- newPoly->dist = -DOTXYZ(newNormal, dVtxList[vIA]);
- if (newNormal.y > 0.5f) {
- s16 polyId = *polyStartIndex + i;
-
- DynaSSNodeList_SetSSListHead(&dyna->polyNodes, &dyna->bgActors[bgId].dynaLookup.floor, &polyId);
- } else if (newNormal.y < -0.8f) {
- s16 polyId = *polyStartIndex + i;
-
- DynaSSNodeList_SetSSListHead(&dyna->polyNodes, &dyna->bgActors[bgId].dynaLookup.ceiling, &polyId);
- } else {
- s16 polyId = *polyStartIndex + i;
-
- DynaSSNodeList_SetSSListHead(&dyna->polyNodes, &dyna->bgActors[bgId].dynaLookup.wall, &polyId);
- }
+ for (i = 0, j = *vtxStartIndex; i < pbgdata->numVertices; i++, j++) {
+ newVtx.x = dyna->vtxList[j].x;
+ newVtx.y = dyna->vtxList[j].y;
+ newVtx.z = dyna->vtxList[j].z;
+ radiusSq = Math3D_Vec3fDistSq(&newVtx, &newCenterPoint);
+ if (newRadiusSq < radiusSq) {
+ newRadiusSq = radiusSq;
}
}
+ sphere->radius = sqrtf(newRadiusSq) * 1.1f;
+
+ for (i = 0; i < pbgdata->numPolygons; i++) {
+ CollisionPoly* newPoly = &dyna->polyList[*polyStartIndex + i];
+ f32 newNormMagnitude;
+ u32 vIA;
+ u32 vIB;
+ u32 vIC;
+
+ *newPoly = pbgdata->polyList[i];
+
+ vIA = (COLPOLY_VTX_INDEX(newPoly->flags_vIA) + *vtxStartIndex);
+ vIB = (COLPOLY_VTX_INDEX(newPoly->flags_vIB) + *vtxStartIndex);
+ vIC = newPoly->vIC + *vtxStartIndex;
+
+ newPoly->flags_vIA = vIA | (newPoly->flags_vIA & 0xE000);
+ newPoly->flags_vIB = vIB | (newPoly->flags_vIB & 0xE000);
+ newPoly->vIC = vIC;
+ dVtxList = dyna->vtxList;
+ vtxA.x = dVtxList[vIA].x;
+ vtxA.y = dVtxList[vIA].y;
+ vtxA.z = dVtxList[vIA].z;
+ vtxB.x = dVtxList[vIB].x;
+ vtxB.y = dVtxList[vIB].y;
+ vtxB.z = dVtxList[vIB].z;
+ vtxC.x = dVtxList[vIC].x;
+ vtxC.y = dVtxList[vIC].y;
+ vtxC.z = dVtxList[vIC].z;
+ Math3D_SurfaceNorm(&vtxA, &vtxB, &vtxC, &newNormal);
+ newNormMagnitude = Math3D_Vec3fMagnitude(&newNormal);
+
+ if (!IS_ZERO(newNormMagnitude)) {
+ newNormal.x *= 1.0f / newNormMagnitude;
+ newNormal.y *= 1.0f / newNormMagnitude;
+ newNormal.z *= 1.0f / newNormMagnitude;
+ newPoly->normal.x = COLPOLY_SNORMAL(newNormal.x);
+ newPoly->normal.y = COLPOLY_SNORMAL(newNormal.y);
+ newPoly->normal.z = COLPOLY_SNORMAL(newNormal.z);
+ }
+
+ newPoly->dist = func_80086D24(-DOTXYZ(newNormal, vtxA));
+ if (newNormal.y > 0.5f) {
+ s16 polyId = *polyStartIndex + i;
+
+ DynaSSNodeList_SetSSListHead(&dyna->polyNodes, &dyna->bgActors[bgId].dynaLookup.floor, &polyId);
+ } else if (newNormal.y < -0.8f) {
+ s16 polyId = *polyStartIndex + i;
+
+ DynaSSNodeList_SetSSListHead(&dyna->polyNodes, &dyna->bgActors[bgId].dynaLookup.ceiling, &polyId);
+ } else {
+ s16 polyId = *polyStartIndex + i;
+
+ DynaSSNodeList_SetSSListHead(&dyna->polyNodes, &dyna->bgActors[bgId].dynaLookup.wall, &polyId);
+ }
+ }
+ }
+
+ if (pbgdata->numWaterBoxes > 0) {
for (wi = 0; wi < pbgdata->numWaterBoxes; wi++) {
- Math_Vec3s_ToVec3f(&spB8, &pbgdata->waterBoxes[wi].minPos);
- Math_Vec3f_Copy(&spA0, &spB8);
- spA0.x += pbgdata->waterBoxes[wi].xLength;
- Math_Vec3f_Copy(&sp88, &spB8);
- sp88.z += pbgdata->waterBoxes[wi].zLength;
- SkinMatrix_Vec3fMtxFMultXYZ(&D_801EDA40, &spB8, &spAC);
- SkinMatrix_Vec3fMtxFMultXYZ(&D_801EDA40, &spA0, &sp94);
- SkinMatrix_Vec3fMtxFMultXYZ(&D_801EDA40, &sp88, &sp7C);
+ WaterBox* waterBox;
+ Vec3f modelMinPos;
+ Vec3f worldMinPos;
+ Vec3f modelMinPosXOffset;
+ Vec3f worldMinPosXOffset;
+ Vec3f modelMinPosZOffset;
+ Vec3f worldMinPosZOffset;
+
+ Math_Vec3s_ToVec3f(&modelMinPos, &pbgdata->waterBoxes[wi].minPos);
+ Math_Vec3f_Copy(&modelMinPosXOffset, &modelMinPos);
+ modelMinPosXOffset.x += pbgdata->waterBoxes[wi].xLength;
+ Math_Vec3f_Copy(&modelMinPosZOffset, &modelMinPos);
+ modelMinPosZOffset.z += pbgdata->waterBoxes[wi].zLength;
+ SkinMatrix_Vec3fMtxFMultXYZ(&sModelToWorldMtxF, &modelMinPos, &worldMinPos);
+ SkinMatrix_Vec3fMtxFMultXYZ(&sModelToWorldMtxF, &modelMinPosXOffset, &worldMinPosXOffset);
+ SkinMatrix_Vec3fMtxFMultXYZ(&sModelToWorldMtxF, &modelMinPosZOffset, &worldMinPosZOffset);
waterBox = &dyna->waterBoxList.boxes[*waterBoxStartIndex + wi];
- BgCheck_CalcWaterboxDimensions(&spAC, &sp94, &sp7C, &waterBox->minPos, &waterBox->xLength,
- &waterBox->zLength);
+ BgCheck_CalcWaterboxDimensions(&worldMinPos, &worldMinPosXOffset, &worldMinPosZOffset, &waterBox->minPos,
+ &waterBox->xLength, &waterBox->zLength);
waterBox->properties = pbgdata->waterBoxes[wi].properties;
}
-
- *polyStartIndex += pbgdata->numPolygons;
- *vtxStartIndex += pbgdata->numVertices;
- *waterBoxStartIndex += pbgdata->numWaterBoxes;
}
+ *polyStartIndex += pbgdata->numPolygons;
+ *vtxStartIndex += pbgdata->numVertices;
+ *waterBoxStartIndex += pbgdata->numWaterBoxes;
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_bgcheck/DynaPoly_ExpandSRT.s")
-#endif
-void BgCheck_ResetFlagsIfLoadedActor(PlayState* play, DynaCollisionContext* dyna, Actor* actor) {
+void DynaPoly_UnsetAllInteractFlags(PlayState* play, DynaCollisionContext* dyna, Actor* actor) {
DynaPolyActor* dynaActor;
s32 i;
for (i = 0; i < BG_ACTOR_MAX; i++) {
- if ((dyna->bgActorFlags[i] & 1)) {
+ if ((dyna->bgActorFlags[i] & BGACTOR_IN_USE)) {
dynaActor = DynaPoly_GetActor(&play->colCtx, i);
- if (dynaActor != NULL && &dynaActor->actor == actor) {
- DynaPolyActor_ResetState((DynaPolyActor*)actor);
- return;
+ if ((dynaActor != NULL) && (&dynaActor->actor == actor)) {
+ DynaPolyActor_UnsetAllInteractFlags((DynaPolyActor*)actor);
+ break;
}
}
}
@@ -3081,7 +3109,7 @@ void BgCheck_ResetFlagsIfLoadedActor(PlayState* play, DynaCollisionContext* dyna
/**
* original name: DynaPolyInfo_setup
*/
-void DynaPoly_Setup(PlayState* play, DynaCollisionContext* dyna) {
+void DynaPoly_UpdateContext(PlayState* play, DynaCollisionContext* dyna) {
DynaPolyActor* actor;
s32 vtxStartIndex;
s32 polyStartIndex;
@@ -3095,13 +3123,13 @@ void DynaPoly_Setup(PlayState* play, DynaCollisionContext* dyna) {
}
for (i = 0; i < BG_ACTOR_MAX; i++) {
- if (dyna->bgActorFlags[i] & 2) {
+ if (dyna->bgActorFlags[i] & BGACTOR_1) {
// Initialize BgActor
dyna->bgActorFlags[i] = 0;
BgActor_Init(play, &dyna->bgActors[i]);
dyna->bitFlag |= DYNAPOLY_INVALIDATE_LOOKUP;
}
- if (dyna->bgActors[i].actor != NULL && dyna->bgActors[i].actor->update == NULL) {
+ if ((dyna->bgActors[i].actor != NULL) && (dyna->bgActors[i].actor->update == NULL)) {
// Delete BgActor
actor = DynaPoly_GetActor(&play->colCtx, i);
if (actor == NULL) {
@@ -3118,8 +3146,8 @@ void DynaPoly_Setup(PlayState* play, DynaCollisionContext* dyna) {
polyStartIndex = 0;
waterBoxStartIndex = 0;
for (i = 0; i < BG_ACTOR_MAX; i++) {
- if ((dyna->bgActorFlags[i] & 1) && !(dyna->bgActorFlags[i] & 2)) {
- DynaPoly_ExpandSRT(play, dyna, i, &vtxStartIndex, &polyStartIndex, &waterBoxStartIndex);
+ if ((dyna->bgActorFlags[i] & BGACTOR_IN_USE) && !(dyna->bgActorFlags[i] & BGACTOR_1)) {
+ DynaPoly_AddBgActorToLookup(play, dyna, i, &vtxStartIndex, &polyStartIndex, &waterBoxStartIndex);
}
}
dyna->bitFlag &= ~DYNAPOLY_INVALIDATE_LOOKUP;
@@ -3137,7 +3165,8 @@ void func_800C756C(DynaCollisionContext* dyna, s32* numPolygons, s32* numVertice
*numWaterBoxes = 0;
for (i = 0; i < BG_ACTOR_MAX; i++) {
- if ((dyna->bgActorFlags[i] & 1) && !(dyna->bgActorFlags[i] & 2) && !(dyna->bgActorFlags[i] & 4)) {
+ if ((dyna->bgActorFlags[i] & BGACTOR_IN_USE) && !(dyna->bgActorFlags[i] & BGACTOR_1) &&
+ !(dyna->bgActorFlags[i] & BGACTOR_COLLISION_DISABLED)) {
colHeader = dyna->bgActors[i].colHeader;
*numPolygons += colHeader->numPolygons;
*numVertices += colHeader->numVertices;
@@ -3153,7 +3182,7 @@ void DynaPoly_UpdateBgActorTransforms(PlayState* play, DynaCollisionContext* dyn
s32 i;
for (i = 0; i < BG_ACTOR_MAX; i++) {
- if (dyna->bgActorFlags[i] & 1) {
+ if (dyna->bgActorFlags[i] & BGACTOR_IN_USE) {
DynaPoly_SetBgActorPrevTransform(play, &dyna->bgActors[i]);
}
}
@@ -3181,9 +3210,10 @@ f32 BgCheck_RaycastFloorDynaList(DynaRaycast* dynaRaycast, u32 listType) {
id = curNode->polyId;
if (COLPOLY_VIA_FLAG_TEST(polyList[id].flags_vIA, dynaRaycast->xpFlags) ||
(COLPOLY_VIA_FLAG_TEST(polyList[id].flags_vIB, 4) &&
- ((dynaRaycast->actor != NULL && dynaRaycast->actor->category != ACTORCAT_PLAYER) ||
- (dynaRaycast->actor == NULL && dynaRaycast->xpFlags != COLPOLY_IGNORE_CAMERA))) ||
- ((dynaRaycast->unk_24 & 0x20) && func_800C9B68(dynaRaycast->colCtx, &polyList[id], dynaRaycast->unk1C))) {
+ (((dynaRaycast->actor != NULL) && (dynaRaycast->actor->category != ACTORCAT_PLAYER)) ||
+ ((dynaRaycast->actor == NULL) && (dynaRaycast->xpFlags != COLPOLY_IGNORE_CAMERA)))) ||
+ ((dynaRaycast->unk_24 & 0x20) &&
+ SurfaceType_IsSoft(dynaRaycast->colCtx, &polyList[id], dynaRaycast->unk1C))) {
if (curNode->next == SS_NULL) {
break;
} else {
@@ -3192,7 +3222,7 @@ f32 BgCheck_RaycastFloorDynaList(DynaRaycast* dynaRaycast, u32 listType) {
}
}
if ((listType & (DYNA_RAYCAST_WALLS | DYNA_RAYCAST_CEILINGS)) && (dynaRaycast->unk_24 & 0x10) &&
- COLPOLY_GET_NORMAL(polyList[id].normal.y) < 0.0f) {
+ (COLPOLY_GET_NORMAL(polyList[id].normal.y) < 0.0f)) {
if (curNode->next == SS_NULL) {
break;
} else {
@@ -3202,7 +3232,7 @@ f32 BgCheck_RaycastFloorDynaList(DynaRaycast* dynaRaycast, u32 listType) {
}
if (CollisionPoly_CheckYIntersectApprox1(&polyList[id], dynaRaycast->dyna->vtxList, dynaRaycast->pos->x,
dynaRaycast->pos->z, &yIntersect, dynaRaycast->checkDist) &&
- yIntersect < dynaRaycast->pos->y && result < yIntersect) {
+ (yIntersect < dynaRaycast->pos->y) && (result < yIntersect)) {
result = yIntersect;
*dynaRaycast->resultPoly = &dynaRaycast->dyna->polyList[id];
}
@@ -3246,12 +3276,13 @@ f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast) {
*dynaRaycast->bgId = BGCHECK_SCENE;
for (i = 0; i < BG_ACTOR_MAX; i++) {
- if (!(dynaRaycast->colCtx->dyna.bgActorFlags[i] & 1) || (dynaRaycast->colCtx->dyna.bgActorFlags[i] & 2)) {
+ if (!(dynaRaycast->colCtx->dyna.bgActorFlags[i] & BGACTOR_IN_USE) ||
+ (dynaRaycast->colCtx->dyna.bgActorFlags[i] & BGACTOR_1)) {
continue;
}
- if (dynaRaycast->actor == dynaRaycast->colCtx->dyna.bgActors[i].actor ||
- dynaRaycast->pos->y < dynaRaycast->colCtx->dyna.bgActors[i].minY ||
+ if ((dynaRaycast->actor == dynaRaycast->colCtx->dyna.bgActors[i].actor) ||
+ (dynaRaycast->pos->y < dynaRaycast->colCtx->dyna.bgActors[i].minY) ||
!Math3D_XZInSphere(&dynaRaycast->colCtx->dyna.bgActors[i].boundingSphere, dynaRaycast->pos->x,
dynaRaycast->pos->z)) {
continue;
@@ -3270,7 +3301,7 @@ f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast) {
}
}
if ((dynaRaycast->unk_24 & BGCHECK_IGNORE_WALL) ||
- (*dynaRaycast->resultPoly == NULL && (dynaRaycast->unk_24 & 8))) {
+ ((*dynaRaycast->resultPoly == NULL) && (dynaRaycast->unk_24 & 8))) {
dynaRaycast->ssList = &dynaRaycast->colCtx->dyna.bgActors[i].dynaLookup.wall;
intersect2 = BgCheck_RaycastFloorDynaList(dynaRaycast, DYNA_RAYCAST_WALLS);
if (dynaRaycast->yIntersect < intersect2) {
@@ -3295,11 +3326,11 @@ f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast) {
dynaActor = DynaPoly_GetActor(dynaRaycast->colCtx, *dynaRaycast->bgId);
if ((result != BGCHECK_Y_MIN) && (dynaActor != NULL) && (dynaRaycast->play != NULL)) {
- pauseState = dynaRaycast->play->pauseCtx.state != 0;
+ pauseState = (dynaRaycast->play->pauseCtx.state != PAUSE_STATE_OFF);
if (!pauseState) {
pauseState = dynaRaycast->play->pauseCtx.debugEditor != DEBUG_EDITOR_NONE;
}
- if (!pauseState && (dynaRaycast->colCtx->dyna.bgActorFlags[*dynaRaycast->bgId] & 2)) {
+ if (!pauseState && (dynaRaycast->colCtx->dyna.bgActorFlags[*dynaRaycast->bgId] & BGACTOR_1)) {
curTransform = &dynaRaycast->dyna->bgActors[*dynaRaycast->bgId].curTransform;
polyMin = &dynaRaycast->dyna
->polyList[(u16)dynaRaycast->dyna->bgActors[*dynaRaycast->bgId].dynaLookup.polyStartIndex];
@@ -3388,8 +3419,8 @@ s32 BgCheck_SphVsDynaWallInBgActor(CollisionContext* colCtx, u16 xpFlags, DynaCo
planeDist = Math3D_DistPlaneToPos(nx, ny, nz, poly->dist, &resultPos);
if (radius < fabsf(planeDist) || COLPOLY_VIA_FLAG_TEST(poly->flags_vIA, xpFlags) ||
- ((COLPOLY_VIA_FLAG_TEST(poly->flags_vIB, 4)) && ((actor != NULL && actor->category != ACTORCAT_PLAYER) ||
- (actor == NULL && xpFlags != COLPOLY_IGNORE_CAMERA)))) {
+ (COLPOLY_VIA_FLAG_TEST(poly->flags_vIB, 4) && (((actor != NULL) && (actor->category != ACTORCAT_PLAYER)) ||
+ ((actor == NULL) && (xpFlags != COLPOLY_IGNORE_CAMERA))))) {
if (curNode->next == SS_NULL) {
break;
} else {
@@ -3428,7 +3459,7 @@ s32 BgCheck_SphVsDynaWallInBgActor(CollisionContext* colCtx, u16 xpFlags, DynaCo
zMin -= radius;
zMax += radius;
- if (resultPos.z < zMin || zMax < resultPos.z) {
+ if ((resultPos.z < zMin) || (zMax < resultPos.z)) {
if (curNode->next == SS_NULL) {
break;
} else {
@@ -3464,8 +3495,8 @@ s32 BgCheck_SphVsDynaWallInBgActor(CollisionContext* colCtx, u16 xpFlags, DynaCo
planeDist = Math3D_DistPlaneToPos(nx, ny, nz, poly->dist, &resultPos);
if (radius < fabsf(planeDist) || COLPOLY_VIA_FLAG_TEST(poly->flags_vIA, xpFlags) ||
- (COLPOLY_VIA_FLAG_TEST(poly->flags_vIB, 4) && ((actor != NULL && actor->category != ACTORCAT_PLAYER) ||
- (actor == NULL && xpFlags != COLPOLY_IGNORE_CAMERA)))) {
+ (COLPOLY_VIA_FLAG_TEST(poly->flags_vIB, 4) && (((actor != NULL) && (actor->category != ACTORCAT_PLAYER)) ||
+ ((actor == NULL) && (xpFlags != COLPOLY_IGNORE_CAMERA))))) {
if (curNode->next == SS_NULL) {
break;
} else {
@@ -3504,7 +3535,7 @@ s32 BgCheck_SphVsDynaWallInBgActor(CollisionContext* colCtx, u16 xpFlags, DynaCo
xMin -= radius;
xMax += radius;
- if (resultPos.x < xMin || xMax < resultPos.x) {
+ if ((resultPos.x < xMin) || (xMax < resultPos.x)) {
if (curNode->next == SS_NULL) {
break;
} else {
@@ -3558,7 +3589,7 @@ s32 BgCheck_SphVsDynaWall(CollisionContext* colCtx, u16 xpFlags, f32* outX, f32*
resultPos = *pos;
for (i = 0; i < BG_ACTOR_MAX; i++) {
- if (!(colCtx->dyna.bgActorFlags[i] & 1) || (colCtx->dyna.bgActorFlags[i] & 2)) {
+ if (!(colCtx->dyna.bgActorFlags[i] & BGACTOR_IN_USE) || (colCtx->dyna.bgActorFlags[i] & BGACTOR_1)) {
continue;
}
if ((colCtx->dyna.bgActors + i)->actor == actor) {
@@ -3566,7 +3597,7 @@ s32 BgCheck_SphVsDynaWall(CollisionContext* colCtx, u16 xpFlags, f32* outX, f32*
}
bgActor = &colCtx->dyna.bgActors[i];
- if (bgActor->minY > resultPos.y || bgActor->maxY < resultPos.y) {
+ if ((bgActor->minY > resultPos.y) || (bgActor->maxY < resultPos.y)) {
continue;
}
@@ -3575,7 +3606,7 @@ s32 BgCheck_SphVsDynaWall(CollisionContext* colCtx, u16 xpFlags, f32* outX, f32*
r = bgActor->boundingSphere.radius;
dx = bgActor->boundingSphere.center.x - resultPos.x;
dz = bgActor->boundingSphere.center.z - resultPos.z;
- if (SQ(r) < (SQ(dx) + SQ(dz)) || (!Math3D_XYInSphere(&bgActor->boundingSphere, resultPos.x, resultPos.y) &&
+ if ((SQ(r) < SQ(dx) + SQ(dz)) || (!Math3D_XYInSphere(&bgActor->boundingSphere, resultPos.x, resultPos.y) &&
!Math3D_YZInSphere(&bgActor->boundingSphere, resultPos.y, resultPos.z))) {
bgActor->boundingSphere.radius -= (s16)radius;
continue;
@@ -3624,8 +3655,8 @@ s32 BgCheck_CheckDynaCeilingList(CollisionContext* colCtx, u16 xpFlags, DynaColl
polyId = curNode->polyId;
poly = &dyna->polyList[polyId];
if (COLPOLY_VIA_FLAG_TEST(poly->flags_vIA, xpFlags) ||
- (COLPOLY_VIA_FLAG_TEST(poly->flags_vIB, 4) && ((actor != NULL && actor->category != ACTORCAT_PLAYER) ||
- (actor == NULL && xpFlags != COLPOLY_IGNORE_CAMERA)))) {
+ (COLPOLY_VIA_FLAG_TEST(poly->flags_vIB, 4) && (((actor != NULL) && (actor->category != ACTORCAT_PLAYER)) ||
+ ((actor == NULL) && (xpFlags != COLPOLY_IGNORE_CAMERA))))) {
if (curNode->next == SS_NULL) {
break;
} else {
@@ -3644,7 +3675,7 @@ s32 BgCheck_CheckDynaCeilingList(CollisionContext* colCtx, u16 xpFlags, DynaColl
}
if (CollisionPoly_CheckYIntersectApprox2(poly, dyna->vtxList, testPos.x, testPos.z, &ceilingY)) {
intersectDist = ceilingY - testPos.y;
- if (testPos.y < ceilingY && intersectDist < checkHeight && intersectDist * ny <= 0.0f) {
+ if ((testPos.y < ceilingY) && (intersectDist < checkHeight) && (intersectDist * ny <= 0.0f)) {
sign = (0.0f <= ny) ? 1.0f : -1.0f;
testPos.y = (sign * checkHeight) + ceilingY;
result = true;
@@ -3680,7 +3711,7 @@ s32 BgCheck_CheckDynaCeiling(CollisionContext* colCtx, u16 xpFlags, f32* outY, V
resultY = tempY;
for (i = 0; i < BG_ACTOR_MAX; i++) {
- if (!(colCtx->dyna.bgActorFlags[i] & 1) || (colCtx->dyna.bgActorFlags[i] & 2)) {
+ if (!(colCtx->dyna.bgActorFlags[i] & BGACTOR_IN_USE) || (colCtx->dyna.bgActorFlags[i] & BGACTOR_1)) {
continue;
}
if (actor == colCtx->dyna.bgActors[i].actor) {
@@ -3733,8 +3764,8 @@ s32 BgCheck_CheckLineAgainstBgActorSSList(DynaLineTest* dynaLineTest) {
test.poly = &dynaLineTest->dyna->polyList[polyId];
if (COLPOLY_VIA_FLAG_TEST(test.poly->flags_vIA, dynaLineTest->xpFlags) ||
(COLPOLY_VIA_FLAG_TEST(test.poly->flags_vIB, 4) &&
- ((dynaLineTest->actor != NULL && dynaLineTest->actor->category != ACTORCAT_PLAYER) ||
- (dynaLineTest->actor == NULL && dynaLineTest->xpFlags != COLPOLY_IGNORE_CAMERA)))) {
+ (((dynaLineTest->actor != NULL) && (dynaLineTest->actor->category != ACTORCAT_PLAYER)) ||
+ ((dynaLineTest->actor == NULL) && (dynaLineTest->xpFlags != COLPOLY_IGNORE_CAMERA))))) {
if (curNode->next == SS_NULL) {
break;
} else {
@@ -3826,21 +3857,23 @@ s32 BgCheck_CheckLineAgainstDyna(CollisionContext* colCtx, u16 xpFlags, Vec3f* p
f32 by;
for (i = 0; i < BG_ACTOR_MAX; i++) {
- if ((colCtx->dyna.bgActorFlags[i] & 1) && !(colCtx->dyna.bgActorFlags[i] & 2)) {
+ if ((colCtx->dyna.bgActorFlags[i] & BGACTOR_IN_USE) && !(colCtx->dyna.bgActorFlags[i] & BGACTOR_1)) {
if (actor != colCtx->dyna.bgActors[i].actor) {
ay = posA->y;
by = posB->y;
- if (!(ay < colCtx->dyna.bgActors[i].minY) || !(by < colCtx->dyna.bgActors[i].minY)) {
- if (!(colCtx->dyna.bgActors[i].maxY < ay) || !(colCtx->dyna.bgActors[i].maxY < by)) {
- line.a = *posA;
- line.b = *posB;
- if (Math3D_LineVsSph(&colCtx->dyna.bgActors[i].boundingSphere, &line) != 0) {
- if (BgCheck_CheckLineAgainstBgActor(colCtx, xpFlags, posA, posB, posResult, outPoly, distSq,
- i, checkDist, bccFlags, actor)) {
- *outBgId = i;
- result = true;
- }
- }
+ if ((ay < colCtx->dyna.bgActors[i].minY) && (by < colCtx->dyna.bgActors[i].minY)) {
+ continue;
+ }
+ if ((ay > colCtx->dyna.bgActors[i].maxY) && (by > colCtx->dyna.bgActors[i].maxY)) {
+ continue;
+ }
+ line.a = *posA;
+ line.b = *posB;
+ if (Math3D_LineVsSph(&colCtx->dyna.bgActors[i].boundingSphere, &line) != 0) {
+ if (BgCheck_CheckLineAgainstBgActor(colCtx, xpFlags, posA, posB, posResult, outPoly, distSq, i,
+ checkDist, bccFlags, actor)) {
+ *outBgId = i;
+ result = true;
}
}
}
@@ -3870,10 +3903,9 @@ s32 BgCheck_SphVsFirstDynaPolyList(CollisionContext* colCtx, u16 xpFlags, Collis
curPolyId = curNode->polyId;
curPoly = &dyna->polyList[curPolyId];
if (COLPOLY_VIA_FLAG_TEST(curPoly->flags_vIA, xpFlags) ||
- (COLPOLY_VIA_FLAG_TEST(curPoly->flags_vIB, 4) && ((actor != NULL && actor->category != ACTORCAT_PLAYER) ||
- (actor == NULL && xpFlags != COLPOLY_IGNORE_CAMERA))))
-
- {
+ (COLPOLY_VIA_FLAG_TEST(curPoly->flags_vIB, 4) &&
+ (((actor != NULL) && (actor->category != ACTORCAT_PLAYER)) ||
+ ((actor == NULL) && (xpFlags != COLPOLY_IGNORE_CAMERA))))) {
if (curNode->next == SS_NULL) {
break;
} else {
@@ -3934,7 +3966,7 @@ s32 BgCheck_SphVsFirstDynaPoly(CollisionContext* colCtx, u16 xpFlags, CollisionP
Sphere16 testSphere;
for (i = 0; i < BG_ACTOR_MAX; i++) {
- if (!(colCtx->dyna.bgActorFlags[i] & 1) || (colCtx->dyna.bgActorFlags[i] & 2)) {
+ if (!(colCtx->dyna.bgActorFlags[i] & BGACTOR_IN_USE) || (colCtx->dyna.bgActorFlags[i] & BGACTOR_1)) {
continue;
}
if (colCtx->dyna.bgActors[i].actor == actor) {
@@ -3989,7 +4021,7 @@ void BgCheck_InitCollisionHeaders(CollisionContext* colCtx, PlayState* play) {
for (i = 0; i < BG_ACTOR_MAX; i++) {
flag = dyna->bgActorFlags[i];
- if ((flag & 1) && !(flag & 2)) {
+ if ((flag & BGACTOR_IN_USE) && !(flag & BGACTOR_1)) {
Actor_SetObjectDependency(play, dyna->bgActors[i].actor);
CollisionHeader_SegmentedToVirtual(dyna->bgActors[i].colHeader);
}
@@ -4016,7 +4048,7 @@ u32 SurfaceType_GetData(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId,
SurfaceType* surfaceTypes;
colHeader = BgCheck_GetCollisionHeader(colCtx, bgId);
- if (colHeader == NULL || poly == NULL) {
+ if ((colHeader == NULL) || (poly == NULL)) {
return 0;
}
surfaceTypes = colHeader->surfaceTypeList;
@@ -4165,17 +4197,11 @@ Vec3s* BgCheck_GetBgCamFuncData(CollisionContext* colCtx, CollisionPoly* poly, s
return BgCheck_GetBgCamFuncDataImpl(colCtx, SurfaceType_GetBgCamIndex(colCtx, poly, bgId), bgId);
}
-/**
- * SurfaceType Get Scene Exit Index
- */
u32 SurfaceType_GetSceneExitIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
return SurfaceType_GetData(colCtx, poly, bgId, 0) >> 8 & 0x1F;
}
-/**
- * SurfaceType Get ? Property (& 0x0003_E000)
- */
-u32 func_800C99D4(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
+FloorType SurfaceType_GetFloorType(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
return SurfaceType_GetData(colCtx, poly, bgId, 0) >> 13 & 0x1F;
}
@@ -4186,126 +4212,85 @@ u32 func_800C99FC(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
return SurfaceType_GetData(colCtx, poly, bgId, 0) >> 18 & 7;
}
-/**
- * SurfaceType Get Wall Property (Internal)
- */
-u32 func_800C9A24(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
+WallType SurfaceType_GetWallType(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
return SurfaceType_GetData(colCtx, poly, bgId, 0) >> 21 & 0x1F;
}
-/**
- * SurfaceType Get Wall Flags
- */
-s32 func_800C9A4C(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
- return sWallFlags[func_800C9A24(colCtx, poly, bgId)];
+s32 SurfaceType_GetWallFlags(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
+ return sWallFlags[SurfaceType_GetWallType(colCtx, poly, bgId)];
}
-/**
- * SurfaceType Is Wall Flag (1 << 0) Set
- */
-s32 func_800C9A7C(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
- return (func_800C9A4C(colCtx, poly, bgId) & 1) ? true : false;
+s32 SurfaceType_CheckWallFlag0(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
+ return (SurfaceType_GetWallFlags(colCtx, poly, bgId) & WALL_FLAG_0) ? true : false;
}
-/**
- * SurfaceType Is Wall Flag (1 << 1) Set
- */
-s32 func_800C9AB0(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
- return (func_800C9A4C(colCtx, poly, bgId) & 2) ? true : false;
+s32 SurfaceType_CheckWallFlag1(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
+ return (SurfaceType_GetWallFlags(colCtx, poly, bgId) & WALL_FLAG_1) ? true : false;
}
-/**
- * SurfaceType Is Wall Flag (1 << 2) Set
- */
-s32 func_800C9AE4(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
- return (func_800C9A4C(colCtx, poly, bgId) & 4) ? true : false;
+s32 SurfaceType_CheckWallFlag2(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
+ return (SurfaceType_GetWallFlags(colCtx, poly, bgId) & WALL_FLAG_2) ? true : false;
}
-u32 func_800C9B18(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
+FloorProperty SurfaceType_GetFloorProperty2(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
return SurfaceType_GetData(colCtx, poly, bgId, 0) >> 26 & 0xF;
}
-/**
- * SurfaceType Get Floor Property
- */
-u32 func_800C9B40(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
+FloorProperty SurfaceType_GetFloorProperty(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
return SurfaceType_GetData(colCtx, poly, bgId, 0) >> 26 & 0xF;
}
-/**
- * SurfaceType Is Floor Minus 1
- */
-u32 func_800C9B68(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
+u32 SurfaceType_IsSoft(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
return SurfaceType_GetData(colCtx, poly, bgId, 0) >> 30 & 1;
}
-/**
- * SurfaceType Is Horse Blocked
- */
u32 SurfaceType_IsHorseBlocked(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
return SurfaceType_GetData(colCtx, poly, bgId, 0) >> 31 & 1;
}
-u32 func_800C9BB8(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
+SurfaceMaterial SurfaceType_GetMaterial(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
return SurfaceType_GetData(colCtx, poly, bgId, 1) & 0xF;
}
-/**
- * SurfaceType Get Poly Sfx
- */
-u16 SurfaceType_GetSfx(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
- s32 id = func_800C9BB8(colCtx, poly, bgId);
+u16 SurfaceType_GetSfxOffset(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
+ SurfaceMaterial surfaceMaterial = SurfaceType_GetMaterial(colCtx, poly, bgId);
- if (id < 0 || id > 14) {
- return NA_SE_PL_WALK_GROUND - SFX_FLAG;
+ if ((surfaceMaterial < 0) || (surfaceMaterial >= ARRAY_COUNT(sSurfaceSfxOffsets))) {
+ return SURFACE_SFX_OFFSET_DIRT;
}
- return sSurfaceTypeSfx[id];
+
+ return sSurfaceSfxOffsets[surfaceMaterial];
}
/**
- * SurfaceType Get ? (same indexer as Get Poly Sfx)
+ * Checks if the material has the bitwise propertyType
*/
-s32 func_800C9C24(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId, s32 arg3) {
- s32 id = func_800C9BB8(colCtx, poly, bgId);
+s32 SurfaceType_HasMaterialProperty(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId, s32 propertyType) {
+ SurfaceMaterial surfaceMaterial = SurfaceType_GetMaterial(colCtx, poly, bgId);
- if (id < 0 || id > 14) {
+ if ((surfaceMaterial < 0) || (surfaceMaterial >= ARRAY_COUNT(sSurfaceMaterialProperties))) {
return 0;
}
- return D_801B46C0[id] & arg3;
+
+ return sSurfaceMaterialProperties[surfaceMaterial] & propertyType;
}
-/**
- * SurfaceType get terrain slope surface
- */
-u32 SurfaceType_GetSlope(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
+FloorEffect SurfaceType_GetFloorEffect(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
return SurfaceType_GetData(colCtx, poly, bgId, 1) >> 4 & 3;
}
-/**
- * SurfaceType get surface lighting setting
- */
u32 SurfaceType_GetLightSettingIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
return SurfaceType_GetData(colCtx, poly, bgId, 1) >> 6 & 0x1F;
}
-/**
- * SurfaceType get echo
- */
u32 SurfaceType_GetEcho(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
return SurfaceType_GetData(colCtx, poly, bgId, 1) >> 11 & 0x3F;
}
-/**
- * SurfaceType Is Hookshot Surface
- */
u32 SurfaceType_IsHookshotSurface(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
return SurfaceType_GetData(colCtx, poly, bgId, 1) >> 17 & 1;
}
-/**
- * CollisionPoly is ignored by entities
- * Returns true if poly is ignored by entities, else false
- */
s32 SurfaceType_IsIgnoredByEntities(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
u32 flags;
@@ -4316,10 +4301,6 @@ s32 SurfaceType_IsIgnoredByEntities(CollisionContext* colCtx, CollisionPoly* pol
return !!flags;
}
-/**
- * CollisionPoly is ignored by projectiles
- * Returns true if poly is ignored by projectiles, else false
- */
s32 SurfaceType_IsIgnoredByProjectiles(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
u32 flags;
@@ -4362,10 +4343,7 @@ s32 func_800C9DDC(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
return !!flags;
}
-/**
- * SurfaceType Get Conveyor Surface Speed
- */
-u32 SurfaceType_GetConveyorSpeed(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
+ConveyorSpeed SurfaceType_GetConveyorSpeed(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
return SurfaceType_GetData(colCtx, poly, bgId, 1) >> 18 & 7;
}
@@ -4383,9 +4361,6 @@ u32 SurfaceType_GetConveyorDirection(CollisionContext* colCtx, CollisionPoly* po
return data & 0x3F;
}
-/**
- * SurfaceType is Wall Damage
- */
u32 SurfaceType_IsWallDamage(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
return (SurfaceType_GetData(colCtx, poly, bgId, 1) & 0x8000000) ? true : false;
}
@@ -4398,23 +4373,24 @@ u32 SurfaceType_IsWallDamage(CollisionContext* colCtx, CollisionPoly* poly, s32
s32 WaterBox_GetSurfaceImpl(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface,
WaterBox** outWaterBox, s32* bgId) {
CollisionHeader* colHeader;
- u32 room;
- WaterBox* curWaterBox;
+ s32 room;
s32 i;
+ WaterBox* curWaterBox;
+ BgActor* bgActor;
*bgId = BGCHECK_SCENE;
colHeader = colCtx->colHeader;
- if (colHeader->numWaterBoxes != 0 && colHeader->waterBoxes != NULL) {
+ if ((colHeader->numWaterBoxes != 0) && (colHeader->waterBoxes != NULL)) {
for (curWaterBox = colHeader->waterBoxes; curWaterBox < colHeader->waterBoxes + colHeader->numWaterBoxes;
curWaterBox++) {
room = 0x3F & (curWaterBox->properties >> 13);
- if (room == (u32)play->roomCtx.curRoom.num || room == 0x3F) {
+ if ((room == play->roomCtx.curRoom.num) || (room == 0x3F)) {
if (curWaterBox->properties & 0x80000) {
continue;
}
- if (curWaterBox->minPos.x < x && x < curWaterBox->minPos.x + curWaterBox->xLength) {
- if (curWaterBox->minPos.z < z && z < curWaterBox->minPos.z + curWaterBox->zLength) {
+ if ((curWaterBox->minPos.x < x) && (x < curWaterBox->minPos.x + curWaterBox->xLength)) {
+ if ((curWaterBox->minPos.z < z) && (z < curWaterBox->minPos.z + curWaterBox->zLength)) {
*outWaterBox = curWaterBox;
*ySurface = curWaterBox->minPos.y;
return true;
@@ -4425,27 +4401,25 @@ s32 WaterBox_GetSurfaceImpl(PlayState* play, CollisionContext* colCtx, f32 x, f3
}
for (i = 0; i < BG_ACTOR_MAX; i++) {
- if (colCtx->dyna.bgActorFlags[i] & 1) {
- BgActor* bgActor;
- if (colCtx->dyna.bgActorFlags[i] & 4) {
- continue;
- }
- bgActor = &colCtx->dyna.bgActors[i];
- if (bgActor->colHeader->numWaterBoxes != 0 && bgActor->colHeader->waterBoxes != NULL) {
- for (curWaterBox = colCtx->dyna.waterBoxList.boxes + bgActor->waterboxesStartIndex;
- curWaterBox < colCtx->dyna.waterBoxList.boxes + bgActor->waterboxesStartIndex +
- bgActor->colHeader->numWaterBoxes;
- curWaterBox++) {
- if (curWaterBox->properties & 0x80000) {
- continue;
- }
- if (curWaterBox->minPos.x < x && x < curWaterBox->minPos.x + curWaterBox->xLength) {
- if (curWaterBox->minPos.z < z && z < curWaterBox->minPos.z + curWaterBox->zLength) {
- *outWaterBox = curWaterBox;
- *ySurface = curWaterBox->minPos.y;
- *bgId = i;
- return true;
- }
+ if (!(colCtx->dyna.bgActorFlags[i] & BGACTOR_IN_USE) ||
+ (colCtx->dyna.bgActorFlags[i] & BGACTOR_COLLISION_DISABLED)) {
+ continue;
+ }
+ bgActor = &colCtx->dyna.bgActors[i];
+ if ((bgActor->colHeader->numWaterBoxes != 0) && (bgActor->colHeader->waterBoxes != NULL)) {
+ for (curWaterBox = colCtx->dyna.waterBoxList.boxes + bgActor->waterboxesStartIndex;
+ curWaterBox <
+ colCtx->dyna.waterBoxList.boxes + bgActor->waterboxesStartIndex + bgActor->colHeader->numWaterBoxes;
+ curWaterBox++) {
+ if (curWaterBox->properties & 0x80000) {
+ continue;
+ }
+ if ((curWaterBox->minPos.x < x) && (x < curWaterBox->minPos.x + curWaterBox->xLength)) {
+ if ((curWaterBox->minPos.z < z) && (z < curWaterBox->minPos.z + curWaterBox->zLength)) {
+ *outWaterBox = curWaterBox;
+ *ySurface = curWaterBox->minPos.y;
+ *bgId = i;
+ return true;
}
}
}
@@ -4467,7 +4441,6 @@ s32 WaterBox_GetSurface1_2(PlayState* play, CollisionContext* colCtx, f32 x, f32
return WaterBox_GetSurfaceImpl(play, colCtx, x, z, ySurface, outWaterBox, &bgId);
}
-#ifdef NON_MATCHING
/**
* Gets the first active WaterBox at `pos` where WaterBox.properties & 0x80000 == 0
* `surfaceCheckDist` is the absolute y distance from the water surface to check
@@ -4480,12 +4453,13 @@ s32 WaterBox_GetSurface2(PlayState* play, CollisionContext* colCtx, Vec3f* pos,
s32 room;
s32 i;
WaterBox* waterBox;
+ BgActor* bgActor;
*bgId = BGCHECK_SCENE;
colHeader = colCtx->colHeader;
//! @bug: check skips testing BgActor waterboxes
- if (colHeader->numWaterBoxes == 0 || colHeader->waterBoxes == NULL) {
+ if ((colHeader->numWaterBoxes == 0) || (colHeader->waterBoxes == NULL)) {
*outWaterBox = NULL;
return -1;
}
@@ -4494,15 +4468,16 @@ s32 WaterBox_GetSurface2(PlayState* play, CollisionContext* colCtx, Vec3f* pos,
waterBox = &colHeader->waterBoxes[i];
room = WATERBOX_ROOM(waterBox->properties);
- if (!(room == play->roomCtx.curRoom.num || room == 0x3F)) {
+ if ((room != play->roomCtx.curRoom.num) && (room != 0x3F)) {
continue;
}
if ((waterBox->properties & 0x80000)) {
continue;
}
- if ((waterBox->minPos.x < pos->x && pos->x < waterBox->minPos.x + waterBox->xLength)) {
- if ((waterBox->minPos.z < pos->z && pos->z < waterBox->minPos.z + waterBox->zLength)) {
- if (pos->y - surfaceCheckDist < waterBox->minPos.y && waterBox->minPos.y < pos->y + surfaceCheckDist) {
+ if (((waterBox->minPos.x < pos->x) && (pos->x < waterBox->minPos.x + waterBox->xLength))) {
+ if ((waterBox->minPos.z < pos->z) && (pos->z < waterBox->minPos.z + waterBox->zLength)) {
+ if ((pos->y - surfaceCheckDist < waterBox->minPos.y) &&
+ (waterBox->minPos.y < pos->y + surfaceCheckDist)) {
*outWaterBox = waterBox;
return i;
}
@@ -4511,27 +4486,25 @@ s32 WaterBox_GetSurface2(PlayState* play, CollisionContext* colCtx, Vec3f* pos,
}
for (i = 0; i < BG_ACTOR_MAX; i++) {
- WaterBox* iterator;
- WaterBox* start;
- BgActor* bgActor;
- if (!(colCtx->dyna.bgActorFlags[i] & 1) || (colCtx->dyna.bgActorFlags[i] & 4) ||
- (colCtx->dyna.bgActorFlags[i] & 2)) {
+
+ if (!(colCtx->dyna.bgActorFlags[i] & BGACTOR_IN_USE) ||
+ (colCtx->dyna.bgActorFlags[i] & BGACTOR_COLLISION_DISABLED) || (colCtx->dyna.bgActorFlags[i] & BGACTOR_1)) {
continue;
}
bgActor = &colCtx->dyna.bgActors[i];
- for (iterator = colCtx->dyna.waterBoxList.boxes + bgActor->waterboxesStartIndex;
- iterator <
+ for (waterBox = colCtx->dyna.waterBoxList.boxes + bgActor->waterboxesStartIndex;
+ waterBox <
colCtx->dyna.waterBoxList.boxes + bgActor->waterboxesStartIndex + bgActor->colHeader->numWaterBoxes;
- iterator++) {
- if (iterator->properties & 0x80000) {
+ waterBox++) {
+ if (waterBox->properties & 0x80000) {
continue;
}
- if ((iterator->minPos.x < pos->x) && pos->x < iterator->minPos.x + iterator->xLength) {
- if ((iterator->minPos.z < pos->z) && pos->z < iterator->minPos.z + iterator->zLength) {
- if (pos->y - surfaceCheckDist < iterator->minPos.y &&
- iterator->minPos.y < pos->y + surfaceCheckDist) {
+ if ((waterBox->minPos.x < pos->x) && (pos->x < waterBox->minPos.x + waterBox->xLength)) {
+ if ((waterBox->minPos.z < pos->z) && (pos->z < waterBox->minPos.z + waterBox->zLength)) {
+ if ((pos->y - surfaceCheckDist < waterBox->minPos.y) &&
+ (waterBox->minPos.y < pos->y + surfaceCheckDist)) {
*bgId = i;
- *outWaterBox = iterator;
+ *outWaterBox = waterBox;
return i;
}
}
@@ -4542,9 +4515,6 @@ s32 WaterBox_GetSurface2(PlayState* play, CollisionContext* colCtx, Vec3f* pos,
*outWaterBox = NULL;
return -1;
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_bgcheck/WaterBox_GetSurface2.s")
-#endif
f32 func_800CA568(CollisionContext* colCtx, s32 waterBoxId, s32 bgId) {
CollisionHeader* colHeader;
@@ -4611,7 +4581,6 @@ u32 WaterBox_GetLightSettingIndex(CollisionContext* colCtx, WaterBox* waterBox)
return prop & 0x1F;
}
-#ifdef NON_MATCHING
/**
* Get the water surface at point (`x`, `ySurface`, `z`). `ySurface` doubles as position y input
* same as WaterBox_GetSurfaceImpl, but tests if WaterBox properties & 0x80000 != 0
@@ -4621,62 +4590,61 @@ u32 WaterBox_GetLightSettingIndex(CollisionContext* colCtx, WaterBox* waterBox)
s32 func_800CA6F0(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox,
s32* bgId) {
CollisionHeader* colHeader;
- u32 room;
- WaterBox* curWaterBox;
s32 i;
+ WaterBox* curWaterBox;
BgActor* bgActor;
+ s32 room;
- colHeader = colCtx->colHeader;
*outWaterBox = NULL;
*bgId = BGCHECK_SCENE;
+ colHeader = colCtx->colHeader;
- if (colHeader->numWaterBoxes == 0 || colHeader->waterBoxes == NULL) {
+ if ((colHeader->numWaterBoxes == 0) || (colHeader->waterBoxes == NULL)) {
return false;
}
for (curWaterBox = colHeader->waterBoxes; curWaterBox < colHeader->waterBoxes + colHeader->numWaterBoxes;
curWaterBox++) {
room = WATERBOX_ROOM(curWaterBox->properties);
- if (room == (u32)play->roomCtx.curRoom.num || room == 0x3F) {
- if ((curWaterBox->properties & 0x80000) != 0) {
- if (curWaterBox->minPos.x < x && x < curWaterBox->minPos.x + curWaterBox->xLength) {
- if (curWaterBox->minPos.z < z && z < curWaterBox->minPos.z + curWaterBox->zLength) {
- *outWaterBox = curWaterBox;
- *ySurface = curWaterBox->minPos.y;
- return true;
- }
- }
+
+ if ((room != play->roomCtx.curRoom.num) && (room != 0x3F)) {
+ continue;
+ }
+ if (!(curWaterBox->properties & 0x80000)) {
+ continue;
+ }
+ if ((curWaterBox->minPos.x < x) && (x < curWaterBox->minPos.x + curWaterBox->xLength)) {
+ if ((curWaterBox->minPos.z < z) && (z < curWaterBox->minPos.z + curWaterBox->zLength)) {
+ *outWaterBox = curWaterBox;
+ *ySurface = curWaterBox->minPos.y;
+ return true;
}
}
}
-
for (i = 0; i < BG_ACTOR_MAX; i++) {
- if ((colCtx->dyna.bgActorFlags[i] & 1) && !(colCtx->dyna.bgActorFlags[i] & 2)) {
- WaterBox* boxes;
- boxes = colCtx->dyna.waterBoxList.boxes;
- bgActor = &colCtx->dyna.bgActors[i];
- if (bgActor->colHeader->numWaterBoxes != 0 && bgActor->colHeader->waterBoxes != NULL) {
- for (curWaterBox = boxes + bgActor->waterboxesStartIndex;
- curWaterBox < boxes + bgActor->waterboxesStartIndex + bgActor->colHeader->numWaterBoxes;
- curWaterBox++) {
- if ((curWaterBox->properties & 0x80000) != 0) {
- if (curWaterBox->minPos.x < x && x < curWaterBox->minPos.x + curWaterBox->xLength) {
- if (curWaterBox->minPos.z < z && z < curWaterBox->minPos.z + curWaterBox->zLength) {
- *outWaterBox = curWaterBox;
- *ySurface = curWaterBox->minPos.y;
- *bgId = i;
- return true;
- }
- }
- }
+ if (!(colCtx->dyna.bgActorFlags[i] & BGACTOR_IN_USE) || (colCtx->dyna.bgActorFlags[i] & BGACTOR_1)) {
+ continue;
+ }
+ bgActor = &colCtx->dyna.bgActors[i];
+
+ for (curWaterBox = colCtx->dyna.waterBoxList.boxes + bgActor->waterboxesStartIndex;
+ curWaterBox <
+ colCtx->dyna.waterBoxList.boxes + bgActor->waterboxesStartIndex + bgActor->colHeader->numWaterBoxes;
+ curWaterBox++) {
+ if (!(curWaterBox->properties & 0x80000)) {
+ continue;
+ }
+ if ((curWaterBox->minPos.x < x) && (x < curWaterBox->minPos.x + curWaterBox->xLength)) {
+ if ((curWaterBox->minPos.z < z) && (z < curWaterBox->minPos.z + curWaterBox->zLength)) {
+ *outWaterBox = curWaterBox;
+ *ySurface = curWaterBox->minPos.y;
+ *bgId = i;
+ return true;
}
}
}
}
return false;
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_bgcheck/func_800CA6F0.s")
-#endif
s32 func_800CA9D0(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox) {
s32 bgId;
diff --git a/src/code/z_camera.c b/src/code/z_camera.c
index da8a5f35a..f54fc93da 100644
--- a/src/code/z_camera.c
+++ b/src/code/z_camera.c
@@ -3,6 +3,20 @@
#include "z64shrink_window.h"
#include "z64view.h"
+#include "z_camera_data.inc.c"
+
+// BSS
+s16 D_801EDBF0;
+f32 D_801EDBF4;
+f32 D_801EDBF8;
+CameraCollision D_801EDC00;
+
+PlayState* sCamPlayState;
+SwingAnimation D_801EDC30[4];
+Vec3f D_801EDDD0;
+Vec3f D_801EDDE0;
+Vec3f D_801EDDF0;
+
/**
* Returns the absolute value for floats
*/
@@ -535,6 +549,9 @@ s32 Camera_GetWaterBoxBgCamSetting(Camera* camera, f32* waterY) {
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CC9C0.s")
+s32 D_801B9E5C = 0;
+f32 D_801B9E60 = 0.0f;
+
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CCCEC.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CD04C.s")
@@ -577,147 +594,175 @@ s32 Camera_GetWaterBoxBgCamSetting(Camera* camera, f32* waterY) {
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CED90.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeNop.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Noop.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeNORM1.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Normal1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeNORM2.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Normal2.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeNORM3.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Normal3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeNORM4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Normal4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeNORM0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Normal0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModePARA1.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Parallel1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModePARA2.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Parallel2.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModePARA3.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Parallel3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModePARA4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Parallel4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModePARA0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Parallel0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeJUMP1.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Jump1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeJUMP2.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Jump2.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeJUMP3.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Jump3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeJUMP4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Jump4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeJUMP0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Jump0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeBATT1.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Battle1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeBATT2.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Battle2.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeBATT3.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Battle3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeBATT4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Battle4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeBATT0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Battle0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeKEEP1.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_KeepOn1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeKEEP2.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_KeepOn2.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeKEEP3.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_KeepOn3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeKEEP4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_KeepOn4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeKEEP0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_KeepOn0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeFIXD1.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Fixed1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeFIXD2.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Fixed2.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeFIXD3.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Fixed3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeFIXD4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Fixed4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeFIXD0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Fixed0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSUBJ1.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Subject1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSUBJ2.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Subject2.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSUBJ3.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Subject3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSUBJ4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Subject4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSUBJ0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Subject0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDATA0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Data0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDATA1.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Data1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDATA2.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Data2.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDATA3.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Data3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDATA4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Data4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeUNIQ1.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeUNIQ2.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique2.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeUNIQ3.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeUNIQ4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeUNIQ5.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique5.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeUNIQ0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeUNIQ6.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique6.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeUNIQ7.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique7.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeUNIQ8.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique8.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeUNIQ9.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Unique9.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDEMO1.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDEMO2.s")
+// Data for opening chests (default)
+VecSph D_801B9E64[] = {
+ { 50.0f, 0xEE3A, 0xD558 },
+ { 75.0f, 0x0000, 0x8008 },
+ { 80.0f, 0xEE3A, 0x8008 },
+ { 15.0f, 0xEE3A, 0x8008 },
+};
+Vec3f D_801B9E84[] = {
+ { 0.0f, 40.0f, 20.0f },
+ { 0.0f, 40.0f, 0.0f },
+ { 0.0f, 3.0f, -3.0f },
+ { 0.0f, 3.0f, -3.0f },
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDEMO3.s")
+// Data for opening chests (goron)
+VecSph D_801B9EB4[] = {
+ { 60.0f, 0xEE3A, 0xD558 },
+ { 95.0f, 0x0000, 0x8008 },
+ { 90.0f, 0xEE3A, 0x8008 },
+ { 20.0f, 0xEE3A, 0x8008 },
+};
+Vec3f D_801B9ED4[] = {
+ { 0.0f, 40.0f, 20.0f },
+ { 0.0f, 40.0f, 0.0f },
+ { 0.0f, 3.0f, -3.0f },
+ { 0.0f, 3.0f, -3.0f },
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDEMO4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo2.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDEMO5.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDEMO6.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDEMO7.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo5.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDEMO8.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo6.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDEMO9.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo7.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeDEMO0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo8.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSPEC0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo9.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSPEC1.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Demo0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSPEC2.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSPEC3.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special1.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSPEC4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special2.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSPEC5.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special3.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSPEC6.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSPEC7.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special5.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSPEC8.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special6.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ModeSPEC9.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special7.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special8.s")
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Special9.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Alloc.s")
@@ -735,6 +780,14 @@ s32 Camera_GetWaterBoxBgCamSetting(Camera* camera, f32* waterY) {
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DE324.s")
+s16 sEarthquakeFreq[] = {
+ 0xFFC, // 1 Large Earthquake between CLOCK_TIME(0, 00) to CLOCK_TIME(1, 30)
+ 0x7FC, // 2 Large Earthquakes between CLOCK_TIME(1, 30) to CLOCK_TIME(3, 00)
+ 0x3FC, // 4 Large Earthquakes between CLOCK_TIME(3, 00) to CLOCK_TIME(4, 30)
+ 0x1FC, // 8 Large Earthquakes between CLOCK_TIME(4, 30) to CLOCK_TIME(6, 00)
+};
+s16 sEarthquakeTimer = 0;
+
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DE62C.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DE840.s")
@@ -745,6 +798,8 @@ s32 Camera_GetWaterBoxBgCamSetting(Camera* camera, f32* waterY) {
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_Update.s")
+s32 sModeChangeFlags = 0;
+
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DF498.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_SetMode.s")
diff --git a/src/code/z_camera_data.inc.c b/src/code/z_camera_data.inc.c
new file mode 100644
index 000000000..3df77c0c4
--- /dev/null
+++ b/src/code/z_camera_data.inc.c
@@ -0,0 +1,3810 @@
+#include "ultra64.h"
+#include "global.h"
+
+/**
+ * All the data from `CameraSetting`, `CameraMode`, `sCameraUpdateHandlers`, and `CameraModeValue` below
+ * can be thought of as a single 2D ragged array table with holes in it, indexed by `[camSetting][camMode]`.
+ *
+ * The `CameraSetting` and `CameraMode` together build this 2D table, with data/functions/flags for each entry.
+ *
+ * Each entry in this 2D table consists of a both a camera-update function to run (`sCameraUpdateHandlers`),
+ * and a set of data to accompany that camera-update function (`CameraModeValue`). Often, `CameraModeValue`
+ * data entries are reused. Not every entry is valid, and the flags in the entry are used to indicate this.
+ */
+
+typedef s32 (*CameraUpdateFunc)(Camera*);
+
+typedef struct {
+ /* 0x0 */ s16 val;
+ /* 0x2 */ s16 param;
+} CameraModeValue; // size = 0x4
+
+typedef struct {
+ /* 0x0 */ s16 funcId;
+ /* 0x2 */ s16 numValues;
+ /* 0x4 */ CameraModeValue* values;
+} CameraMode; // size = 0x8
+
+/**
+ * Flags:
+ * (flags & 0xF): Priority (lower value has higher priority)
+ * (flags & 0x40000000): Store previous setting and bgCamData, also ignores water checks
+ * (flags & 0x80000000): Set camera setting based on bg/scene data and reset action function state
+ */
+typedef struct {
+ /* 0x0 */ u32 validModes;
+ /* 0x4 */ u32 flags;
+ /* 0x8 */ CameraMode* cameraModes;
+} CameraSetting; // size = 0xC
+
+/*=====================================================================
+ * Default Data: NORMAL0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetNormal0ModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(-20, 280, 320, 10, 22, 15, 40, 60, 84,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetNormal0ModeTargetData[] = {
+ CAM_FUNCDATA_PARA1(0, 350, 50, 0, 0, 5, 5, 45, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1), 60, 0),
+};
+
+CameraModeValue sSetNormal0ModeFollowTargetData[] = {
+ CAM_FUNCDATA_KEEP1(-30, 180, 200, 20, 40, -5, 10, 15, 45, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON1_FLAG_0), 30),
+};
+
+CameraModeValue sSetNormal0ModeBattleData[] = {
+ CAM_FUNCDATA_BATT1(-30, 150, 250, 10, 60, -5, 20, 35, 55, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 25, 40),
+};
+
+CameraModeValue sSetNormal0ModeFirstPersonData[] = {
+ CAM_FUNCDATA_SUBJ1(0, 5, 50, 10, 0, 0, 0, 45, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue sSetNormal0ModeTalkData[] = {
+ CAM_FUNCDATA_KEEP3(-20, 80, 150, 50, 5, 20, 5, 40, 35, 50, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE, 0),
+ 60),
+};
+
+CameraModeValue sSetNormal0ModeClimbData[] = {
+ CAM_FUNCDATA_JUMP2(-20, 280, 320, 20, 5, 5, 60, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue sSetNormal0ModeBowArrowData[] = {
+ CAM_FUNCDATA_SUBJ1(0xFFF9, 0xE, 50, 10, 0, -30, -5, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue sSetNormal0ModeBowArrowZData[] = {
+ CAM_FUNCDATA_SUBJ1(20, 70, 70, 10, 0xFF88, 20, 0, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue sSetNormal0ModeHookshotData[] = {
+ CAM_FUNCDATA_SPEC5(-20, 80, 250, 45, 60, 40, 6,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue sSetNormal0ModeBoomerangData[] = {
+ CAM_FUNCDATA_SUBJ1(5, 50, 50, 10, 0, 0, 0, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue sSetNormal0ModeSlingshotData[] = {
+ CAM_FUNCDATA_SUBJ1(0xFFF9, 14, 50, 10, 0, -50, -10, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue sSetNormal0ModeClimbZData[] = {
+ CAM_FUNCDATA_JUMP2(-20, 280, 320, 20, 999, 5, 60, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, JUMP2_FLAG_2 | JUMP2_FLAG_1)),
+};
+
+CameraModeValue sSetNormal0ModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-20, 240, 340, 10, 30, 12, 40, 60, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetNormal0ModeHangData[] = {
+ CAM_FUNCDATA_PARA1(-40, 320, 50, 40, 0, 8, 5, 60, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_7 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1),
+ 60, 12),
+};
+
+CameraModeValue sSetNormal0ModeHangZData[] = {
+ CAM_FUNCDATA_PARA1(0xFFB0, 300, 50, 70, 0, 12, 5, 45, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_7 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1),
+ 60, 2),
+};
+
+CameraModeValue sSetNormal0ModeFreeFallData[] = {
+ CAM_FUNCDATA_PARA1(
+ -10, 320, 100, 70, 0, 4, 5, 70, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_7 | PARALLEL1_FLAG_3), 60, 12),
+};
+
+CameraModeValue sSetNormal0ModeChargeData[] = {
+ CAM_FUNCDATA_PARA1(0xFFB0, 300, -20, 50, 0, 50, 5, 80, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0), 60, 10),
+};
+
+CameraModeValue sSetNormal0ModeChargeZData[] = {
+ CAM_FUNCDATA_PARA1(0xFFB0, 300, -20, 40, 0, 50, 5, 80, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1), 60, 0),
+};
+
+CameraModeValue sSetNormal0ModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-20, 280, 320, 10, 100, 100, 100, 60, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetNormal0ModePushPullData[] = {
+ CAM_FUNCDATA_PARA1(
+ 0, 350, 5, 45, 0, 5, 5, 70, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_5 | PARALLEL1_FLAG_1), 80, 0),
+};
+
+CameraModeValue sSetNormal0ModeFollowBoomerangData[] = {
+ CAM_FUNCDATA_KEEP1(-5, 220, 240, 5, 75, 10, 5, 40, 50, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON1_FLAG_0), 30),
+};
+
+CameraModeValue sSetNormal0ModeDekuShootData[] = {
+ CAM_FUNCDATA_SUBJ1(0, 5, 50, 10, 0, 50, 65, 45, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue sSetNormal0ModeGoronDashData[] = {
+ CAM_FUNCDATA_NORM1(50, 160, 255, -2, 12, 10, 40, 92, 88,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_2 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetNormal0ModeDekuHideData[] = {
+ CAM_FUNCDATA_PARA1(
+ 100, 300, -20, 40, 0, 4, 5, 80, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, PARALLEL1_FLAG_5 | PARALLEL1_FLAG_1), 80,
+ 20),
+};
+
+CameraModeValue sSetNormal0ModeDekuFlyData[] = {
+ CAM_FUNCDATA_NORM1(0xFFB0, 280, 320, 40, 20, 12, 40, 80, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetNormal0ModeDekuFlyZData[] = {
+ CAM_FUNCDATA_PARA1(0xFFBA, 350, 10, 10, 0, 5, 5, 70, 90,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_3 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1),
+ 90, 0),
+};
+
+CameraModeValue sSetNormal0ModeGoronJumpData[] = {
+ CAM_FUNCDATA_NORM1(
+ -10, 160, 400, 0, 18, 12, 40, 80, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_2 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetNormal0ModeZoraFinData[] = {
+ CAM_FUNCDATA_SUBJ1(5, 100, 100, 10, 0, 0, 0, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: NORMAL3 Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetNormal3ModeNormalData[] = {
+ CAM_FUNCDATA_JUMP3(-40, 280, 300, 20, 15, 5, 40, 60, 100,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_7 | JUMP3_FLAG_2)),
+};
+
+CameraModeValue sSetNormal3ModeTargetData[] = {
+ CAM_FUNCDATA_PARA1(
+ -50, 280, 40, 10, 0, 15, 5, 60, 100,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1 | PARALLEL1_FLAG_0), 80, 0),
+};
+
+CameraModeValue sSetNormal3ModeFreeFallData[] = {
+ CAM_FUNCDATA_JUMP3(0, 80, 100, 30, 10, 5, 40, 80, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_2)),
+};
+
+CameraModeValue sSetNormal3ModeGoronJumpData[] = {
+ CAM_FUNCDATA_JUMP3(-40, 150, 240, -5, 18, 5, 40, 70, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_3 | JUMP3_FLAG_2)),
+};
+
+CameraModeValue sSetNormal3ModeDekuFlyData[] = {
+ CAM_FUNCDATA_JUMP3(-40, 150, 250, 10, 18, 5, 60, 60, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_2 | JUMP3_FLAG_0)),
+};
+
+CameraModeValue sSetNormal3ModeDekuHideData[] = {
+ CAM_FUNCDATA_JUMP3(
+ 0xFFC4, 150, 250, -15, 18, 5, 60, 60, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_7 | JUMP3_FLAG_2 | JUMP3_FLAG_0)),
+};
+
+CameraModeValue sSetNormal3ModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-40, 80, 300, 20, 100, 100, 100, 60, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetNormal3ModeGoronDashData[] = {
+ CAM_FUNCDATA_JUMP3(-40, 180, 200, 5, 20, 5, 40, 80, 35,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_3 | JUMP3_FLAG_2)),
+};
+
+/*=====================================================================
+ * Custom Data: PIVOT_DIVING Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetPivotDivingModeNormalData[] = {
+ CAM_FUNCDATA_UNIQ2(-40, 60, 60, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, UNIQUE2_FLAG_1)),
+};
+
+CameraModeValue sSetPivotDivingModeTargetData[] = {
+ CAM_FUNCDATA_UNIQ2(-30, 45, 100, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, UNIQUE2_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: HORSE Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetHorseModeNormalData[] = {
+ CAM_FUNCDATA_NORM3(-50, 220, 250, 10, 10, 20, 60, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE,
+ NORMAL3_FLAG_5)),
+};
+
+CameraModeValue sSetHorseModeTargetData[] = {
+ CAM_FUNCDATA_NORM3(-40, 180, 200, -3, 2, 100, 50, 90,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM,
+ CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE, NORMAL3_FLAG_1)),
+};
+
+CameraModeValue sSetHorseModeJumpData[] = {
+ CAM_FUNCDATA_NORM3(
+ -50, 220, 260, 10, 10, 20, 60, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE, 0)),
+};
+
+CameraModeValue sSetHorseModeBowArrowData[] = {
+ CAM_FUNCDATA_SUBJ1(
+ 0xFFF9, 14, 100, 10, 0, -30, -5, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE, 0)),
+};
+
+CameraModeValue sSetHorseModeSlingShotData[] = {
+ CAM_FUNCDATA_SUBJ1(0xFFF9, 14, 100, 10, 0, -50, -10, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue sSetHorseModeBattleData[] = {
+ CAM_FUNCDATA_BATT1(0xFFC4, 180, 280, 10, 60, -5, 20, 60, 60, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 25, 40),
+};
+
+CameraModeValue sSetHorseModeFollowTargetData[] = {
+ CAM_FUNCDATA_KEEP1(0xFFC4, 180, 220, 25, 45, -5, 15, 15, 45, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM,
+ CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE, KEEPON1_FLAG_0),
+ 20),
+};
+
+CameraModeValue sSetHorseModeTalkData[] = {
+ CAM_FUNCDATA_KEEP3(-50, 140, 200, 40, 10, 0, 5, 100, 45, 50, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE, 0),
+ 60),
+};
+
+CameraModeValue sSetHorseModeStillData[] = {
+ CAM_FUNCDATA_NORM3(-40, 180, 200, -3, 100, 100, 60, 10,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, NORMAL3_FLAG_7)),
+};
+
+/*=====================================================================
+ * Custom Data: ZORA_DIVING Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetZoraDivingModeNormalData[] = {
+ CAM_FUNCDATA_NORM3(-20, 250, 250, 0, 20, 20, 60, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE,
+ NORMAL3_FLAG_7)),
+};
+
+/*=====================================================================
+ * Custom Data: PREREND_FIXED Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetPrerendFixedModeNormalData[] = {
+ CAM_FUNCDATA_FIXD3(CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: PREREND_PIVOT Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetPrerendPivotModeNormalData[] = {
+ CAM_FUNCDATA_UNIQ7(60, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: DOORC Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetDoorCModeNormalData[] = {
+ CAM_FUNCDATA_SPEC9(-5, 60, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE_4, CAM_HUD_VISIBILITY_NONE_ALT, SPECIAL9_FLAG_1)),
+};
+
+/*=====================================================================
+ * Custom Data: DEMO0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B4EF0[] = {
+ CAM_FUNCDATA_INTERFACE_FLAGS(CAM_INTERFACE_FLAGS(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_NONE_ALT, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: Various Cutscenes
+ *=====================================================================
+ */
+
+// Camera Settings: FREE0, NAVI, TRANSFORM, ATTENTION, WARP1, STOP0, CONNECT0
+CameraModeValue sSetCutscenesModeNormalData[] = {
+ CAM_FUNCDATA_INTERFACE_FLAGS(CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: FUKAN0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B4EF8[] = {
+ CAM_FUNCDATA_NORM1(
+ -40, 600, 600, 45, 50, 10, 50, 45, 90,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, NORMAL1_FLAG_6 | NORMAL1_FLAG_1)),
+};
+
+CameraModeValue D_801B4F20[] = {
+ CAM_FUNCDATA_PARA1(-40, 400, 25, 60, 0, 5, 5, 60, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1), 80, 0),
+};
+
+CameraModeValue D_801B4F50[] = {
+ CAM_FUNCDATA_NORM1(-40, 600, 600, 45, 50, 10, 50, 45, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B4F78[] = {
+ CAM_FUNCDATA_NORM1(-40, 600, 600, 45, 100, 100, 100, 45, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: NORMAL1 Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetNormal1ModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(-20, 280, 320, 15, 18, 12, 70, 60, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, NORMAL1_FLAG_1)),
+};
+
+CameraModeValue sSetNormal1ModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-20, 280, 320, 15, 100, 100, 100, 60, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: NANAME Setting
+ *=====================================================================
+ */
+
+// Normal4
+CameraModeValue D_801B4FF0[] = {
+ CAM_FUNCDATA_NORM1(
+ -20, 280, 320, 10, 18, 12, 40, 60, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: CIRCLE0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5018[] = {
+ CAM_FUNCDATA_FIXD2(-40, 40, 0x3200, 10, 20, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, FIXED2_FLAG_0)),
+};
+
+CameraModeValue D_801B5034[] = {
+ CAM_FUNCDATA_FIXD2(-40, 40, 0x3200, 100, 80, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, FIXED2_FLAG_6)),
+};
+
+CameraModeValue D_801B5050[] = {
+ CAM_FUNCDATA_FIXD2(-40, 40, 200, 100, 50, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, FIXED2_FLAG_7)),
+};
+
+/*=====================================================================
+ * Custom Data: FIXED0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B506C[] = {
+ CAM_FUNCDATA_FIXD1(-40, 10, 60, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: SPIRAL_DOOR Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetSpiralDoorModeNormalData[] = {
+ CAM_FUNCDATA_SPEC8(-40, 50, 80, 60, 10,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, SPECIAL8_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: DUNGEON0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetDungeon0ModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(-20, 150, 250, 5, 18, 5, 45, 60, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon0ModeTargetData[] = {
+ CAM_FUNCDATA_PARA1(
+ 0, 200, 25, 5, 0, 5, 5, 45, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_6 | PARALLEL1_FLAG_1), 80, 0),
+};
+
+CameraModeValue sSetDungeon0ModeFollowTargetData[] = {
+ CAM_FUNCDATA_KEEP1(-20, 120, 140, 25, 45, -5, 15, 15, 45, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON1_FLAG_0), 20),
+};
+
+CameraModeValue sSetDungeon0ModeBattleData[] = {
+ CAM_FUNCDATA_BATT1(-30, 150, 240, 10, 50, 5, 10, 25, 50, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 25, 50),
+};
+
+CameraModeValue sSetDungeon0ModeFollowBoomerangData[] = {
+ CAM_FUNCDATA_KEEP1(-5, 150, 240, 5, 65, 10, 5, 40, 55, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON1_FLAG_0), 30),
+};
+
+CameraModeValue sSetDungeon0ModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-20, 150, 250, 5, 24, 5, 50, 60, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon0ModeFreeFallData[] = {
+ CAM_FUNCDATA_PARA1(
+ -10, 250, 100, 70, 0, 4, 5, 70, 10,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_7 | PARALLEL1_FLAG_3), 70, 12),
+};
+
+CameraModeValue sSetDungeon0ModeClimbData[] = {
+ CAM_FUNCDATA_JUMP2(-40, 150, 250, 20, 5, 5, 60, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue sSetDungeon0ModeClimbZData[] = {
+ CAM_FUNCDATA_JUMP2(-40, 250, 250, 20, 999, 5, 60, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, JUMP2_FLAG_2 | JUMP2_FLAG_1)),
+};
+
+CameraModeValue sSetDungeon0ModeChargeData[] = {
+ CAM_FUNCDATA_PARA1(0, 250, -20, 50, 0, 50, 5, 60, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0), 60, 10),
+};
+
+CameraModeValue sSetDungeon0ModeChargeZData[] = {
+ CAM_FUNCDATA_PARA1(50, 250, -20, 40, 0, 50, 5, 80, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1), 60, 0),
+};
+
+CameraModeValue sSetDungeon0ModeHangData[] = {
+ CAM_FUNCDATA_PARA1(-40, 220, 50, 40, 0, 12, 5, 60, 10,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_7 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1),
+ 60, 12),
+};
+
+CameraModeValue sSetDungeon0ModeHangZData[] = {
+ CAM_FUNCDATA_PARA1(0xFFB0, 250, 50, 70, 0, 10, 5, 45, 10,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_7 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1),
+ 60, 2),
+};
+
+CameraModeValue sSetDungeon0ModeStillData[] = {
+ CAM_FUNCDATA_NORM1(
+ -10, 180, 220, 10, 100, 100, 100, 60, 10,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL, NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon0ModePushPullData[] = {
+ CAM_FUNCDATA_PARA1(
+ 0, 250, 5, 30, 0, 5, 5, 70, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_5 | PARALLEL1_FLAG_1), 80, 0),
+};
+
+/*=====================================================================
+ * Custom Data: ITEM0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5338[] = {
+ CAM_FUNCDATA_KEEP4(5, 70, 25, 0, 0, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B535C[] = {
+ CAM_FUNCDATA_KEEP4(-30, 35, 40, 0, 6, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B5380[] = {
+ CAM_FUNCDATA_KEEP4(-15, 90, -8, 0, 0, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B53A4[] = {
+ CAM_FUNCDATA_KEEP4(20, 45, 0x0037, 0, 12, 55,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B53C8[] = {
+ CAM_FUNCDATA_KEEP4(10, 70, 30, 0, 4, 42,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+/*=====================================================================
+ * Custom Data: ITEM1 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B53EC[] = {
+ CAM_FUNCDATA_KEEP4(-45, 75, 0xFFF4, 165, 5, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B5410[] = {
+ CAM_FUNCDATA_KEEP4(-40, 70, 20, 140, 5, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B5434[] = {
+ CAM_FUNCDATA_KEEP4(-20, 85, -5, 140, 15, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B5458[] = {
+ CAM_FUNCDATA_KEEP4(-50, 0x005F, -15, 160, 6, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B547C[] = {
+ CAM_FUNCDATA_KEEP4(
+ 0xFFC4, 70, -15, 0xFF74, 30, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_3 | KEEPON4_FLAG_2), 25, 6),
+};
+
+/*=====================================================================
+ * Custom Data: ITEM2 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B54A0[] = {
+ CAM_FUNCDATA_KEEP4(-40, 0x006E, 5, 150, 5, 65,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B54C4[] = {
+ CAM_FUNCDATA_KEEP4(0xFFC4, 0x0082, -10, 0x00AA, 5, 65,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B54E8[] = {
+ CAM_FUNCDATA_KEEP4(-40, 0x006E, 0, 140, 5, 65,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B550C[] = {
+ CAM_FUNCDATA_KEEP4(-50, 140, -10, 160, 5, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B5530[] = {
+ CAM_FUNCDATA_KEEP4(0xFFC4, 120, -8, 150, 5, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+/*=====================================================================
+ * Custom Data: ITEM3 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5554[] = {
+ CAM_FUNCDATA_KEEP4(
+ -15, 65, 50, 0xFF65, 5, 75,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_3 | KEEPON4_FLAG_2), 25, 6),
+};
+
+CameraModeValue D_801B5578[] = {
+ CAM_FUNCDATA_KEEP4(
+ -20, 60, 50, 0xFF65, 5, 75,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_3 | KEEPON4_FLAG_2), 25, 6),
+};
+
+CameraModeValue D_801B559C[] = {
+ CAM_FUNCDATA_KEEP4(-15, 60, 40, 0x00AA, 5, 75,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 6),
+};
+
+CameraModeValue D_801B55C0[] = {
+ CAM_FUNCDATA_KEEP4(
+ -25, 0x005F, 50, 0xFF65, 5, 75,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_3 | KEEPON4_FLAG_2), 25, 6),
+};
+
+CameraModeValue D_801B55E4[] = {
+ CAM_FUNCDATA_KEEP4(
+ -20, 75, 45, 0xFF6A, -5, 75,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_3 | KEEPON4_FLAG_2), 25, 6),
+};
+
+/*=====================================================================
+ * Custom Data: WARP0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5608[] = {
+ CAM_FUNCDATA_KEEP4(-45, 165, 0, 0x00B2, 0, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE,
+ KEEPON4_FLAG_6 | KEEPON4_FLAG_3 | KEEPON4_FLAG_2 | KEEPON4_FLAG_1),
+ 30, 10),
+};
+
+CameraModeValue D_801B562C[] = {
+ CAM_FUNCDATA_KEEP4(0xFFC9, 180, 0, 0x00B2, 0, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE,
+ KEEPON4_FLAG_6 | KEEPON4_FLAG_3 | KEEPON4_FLAG_2 | KEEPON4_FLAG_1),
+ 30, 10),
+};
+
+CameraModeValue D_801B5650[] = {
+ CAM_FUNCDATA_KEEP4(-20, 0x00AF, 0, 0x00B2, 0, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE,
+ KEEPON4_FLAG_6 | KEEPON4_FLAG_3 | KEEPON4_FLAG_2 | KEEPON4_FLAG_1),
+ 30, 10),
+};
+
+CameraModeValue D_801B5674[] = {
+ CAM_FUNCDATA_KEEP4(-50, 220, 0, 0x00B2, 0, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE,
+ KEEPON4_FLAG_6 | KEEPON4_FLAG_3 | KEEPON4_FLAG_2 | KEEPON4_FLAG_1),
+ 30, 10),
+};
+
+CameraModeValue D_801B5698[] = {
+ CAM_FUNCDATA_KEEP4(0xFFC4, 200, 0, 0x00B2, 0, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE,
+ KEEPON4_FLAG_6 | KEEPON4_FLAG_3 | KEEPON4_FLAG_2 | KEEPON4_FLAG_1),
+ 30, 10),
+};
+
+/*=====================================================================
+ * Custom Data: DEATH Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetDeathModeNormalData[] = {
+ CAM_FUNCDATA_KEEP4(0xFFBA, 160, 0, 0, 10, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, 0), 5, 100),
+};
+
+CameraModeValue sSetDeathModeJumpData[] = {
+ CAM_FUNCDATA_KEEP4(0xFFBA, 160, 0, 0, 5, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, 0), 5, 100),
+};
+
+CameraModeValue sSetDeathModeDekuShootData[] = {
+ CAM_FUNCDATA_KEEP4(0xFFBA, 150, 0, 0, 5, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, 0), 5, 100),
+};
+
+/*=====================================================================
+ * Custom Data: REBIRTH Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5728[] = {
+ CAM_FUNCDATA_KEEP4(
+ 0xFFC4, 160, 30, 160, 10, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_2 | KEEPON4_FLAG_1), 5, 100),
+};
+
+CameraModeValue D_801B574C[] = {
+ CAM_FUNCDATA_KEEP4(
+ -20, 140, 30, 160, 10, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_2 | KEEPON4_FLAG_1), 5, 100),
+};
+
+/*=====================================================================
+ * Custom Data: LONG_CHEST_OPENING Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetLongChestOpeningModeNormalData[] = {
+ CAM_FUNCDATA_DEMO2(60, 30, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: DUNGEON1 Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetDungeon1ModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(-20, 350, 400, 45, 50, 20, 70, 50, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon1ModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-20, 350, 400, 40, 50, 20, 50, 50, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon1ModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-20, 350, 400, 45, 100, 100, 100, 50, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon1ModePushPullData[] = {
+ CAM_FUNCDATA_PARA1(
+ 0, 250, 5, 30, 0, 5, 5, 70, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_5 | PARALLEL1_FLAG_1), 30, 0),
+};
+
+/*=====================================================================
+ * Custom Data: FIXED1 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5824[] = {
+ CAM_FUNCDATA_FIXD1(-40, 100, 60, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: FIXED2 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5834[] = {
+ CAM_FUNCDATA_FIXD1(-40, 10, 60, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: MAZE Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetMazeModeNormalData[] = {
+ CAM_FUNCDATA_PARA2(0xFFDD, 160, 65, -5, 2, 70, 99,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, PARALLEL2_FLAG_1)),
+};
+
+/*=====================================================================
+ * Custom Data: REMOTEBOMB Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetRemoteBombModeNormalData[] = {
+ CAM_FUNCDATA_NORM2(20, 200, 800, 15, 6, 70, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, NORMAL2_FLAG_1)),
+};
+
+/*=====================================================================
+ * Custom Data: CIRCLE1 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5884[] = {
+ CAM_FUNCDATA_FIXD2(-40, 40, 0x3200, 10, 20, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, FIXED2_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: CIRCLE2 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B58A0[] = {
+ CAM_FUNCDATA_FIXD2(-40, 40, 0x3200, 100, 80, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: CIRCLE3 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B58BC[] = {
+ CAM_FUNCDATA_FIXD2(-40, 40, 0x3200, 100, 80, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: CIRCLE4 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B58D8[] = {
+ CAM_FUNCDATA_FIXD2(
+ -40, 40, 0x3200, 100, 10, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, FIXED2_FLAG_3 | FIXED2_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: FIXED3 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B58F4[] = {
+ CAM_FUNCDATA_FIXD1(-40, 100, 60, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: CAM_SET_TOWER_ASCENT Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetTowerClimbModeNormalData[] = {
+ CAM_FUNCDATA_NORM0(0, 350, 400, 20, 20, 50, 65, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, NORMAL0_FLAG_0)),
+};
+
+CameraModeValue sSetTowerClimbModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-20, 340, 400, 10, 30, 12, 40, 65, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetTowerClimbModeStillData[] = {
+ CAM_FUNCDATA_NORM1(0, 350, 400, 10, 100, 100, 100, 65, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: PARALLEL0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5978[] = {
+ CAM_FUNCDATA_PARA1(
+ 0, 400, 20, 0, 0, 20, 5, 70, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_3 | PARALLEL1_FLAG_1), 80, 0),
+};
+
+/*=====================================================================
+ * Custom Data: NORMALD Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B59A8[] = {
+ CAM_FUNCDATA_NORM1(
+ 0, 400, 0x01F4, 15, 18, 12, 35, 70, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: SUBJECTD Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B59D0[] = {
+ CAM_FUNCDATA_SUBJ1(0, 5, 50, 10, 0, 0, 10, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: START0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B59F4[] = {
+ CAM_FUNCDATA_UNIQ0(0, 100, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, UNIQUE0_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: START2 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5A00[] = {
+ CAM_FUNCDATA_UNIQ0(
+ 0, 30, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, UNIQUE0_FLAG_4 | UNIQUE0_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: BOAT_CRUISE Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetBoatCruiseModeNormalData[] = {
+ CAM_FUNCDATA_SUBJ1(20, 90, 80, 10, 0, 50, 0xFF38, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+/*=====================================================================
+ * Custom Data: VERTICAL_CLIMB Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetVerticalClimbModeClimbData[] = {
+ CAM_FUNCDATA_PARA1_ALT(0, 400, 50, 0, 0, 5, 5, 45, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1), 70, 0,
+ 50),
+};
+
+/*=====================================================================
+ * Custom Data: SIDED Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5A64[] = {
+ CAM_FUNCDATA_PARA1(0, 400, 10, 0, 0xFFA6, 20, 5, 70, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_5 | PARALLEL1_FLAG_3 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1),
+ 70, 0),
+};
+
+/*=====================================================================
+ * Custom Data: DUNGEON2 Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetDungeon2ModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(-10, 270, 300, 20, 0x001C, 20, 65, 60, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon2ModeBattleData[] = {
+ CAM_FUNCDATA_BATT1(-40, 200, 240, 50, 20, 5, 10, 20, 50, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 25, 40),
+};
+
+CameraModeValue sSetDungeon2ModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-20, 270, 300, 40, 50, 20, 50, 60, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon2ModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-10, 270, 300, 20, 100, 100, 100, 60, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon2ModePushPullData[] = {
+ CAM_FUNCDATA_PARA1(
+ 0, 200, 5, 15, 0, 5, 5, 70, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_5 | PARALLEL1_FLAG_1), 30, 0),
+};
+
+/*=====================================================================
+ * Custom Data: BOSS_ODOLWA Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetBossOdolwaModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(-20, 250, 350, 10, 24, 12, 40, 65, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetBossOdolwaModeFollowTargetData[] = {
+ CAM_FUNCDATA_KEEP1(-50, 300, 350, 10, 20, 5, 12, 70, 60, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, 0), 20),
+};
+
+CameraModeValue sSetBossOdolwaModeTalkData[] = {
+ CAM_FUNCDATA_KEEP3(
+ -20, 230, 260, 20, 10, 20, 15, 40, 55, 20, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE, KEEPON3_FLAG_5), 40),
+};
+
+CameraModeValue sSetBossOdolwaModeBattleData[] = {
+ CAM_FUNCDATA_BATT1(0xFFC4, 200, 220, 20, 10, 0, 10, 60, 60, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 10, 40),
+};
+
+CameraModeValue sSetBossOdolwaModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-20, 250, 350, 10, 30, 12, 40, 65, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetBossOdolwaModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-20, 250, 350, 10, 100, 100, 100, 65, 15,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: KEEP_BACK Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5C80[] = {
+ CAM_FUNCDATA_PARA1(
+ 100, 300, -20, 40, 0, 4, 5, 80, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_5 | PARALLEL1_FLAG_1), 60, 20),
+};
+
+/*=====================================================================
+ * Custom Data: CIRCLE6 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5CB0[] = {
+ CAM_FUNCDATA_FIXD2(
+ -40, 60, 0x3200, 10, 20, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, FIXED2_FLAG_1 | FIXED2_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: CIRCLE7 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5CCC[] = {
+ CAM_FUNCDATA_FIXD2(-40, 40, 200, 10, 20, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, FIXED2_FLAG_5)),
+};
+
+/*=====================================================================
+ * Custom Data: MINI_BOSS Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetMiniBossModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(-15, 220, 280, 17, 14, 5, 65, 70, 75,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetMiniBossModeFollowTargetData[] = {
+ CAM_FUNCDATA_KEEP1(0, 200, 250, 25, 45, 40, 15, 40, 60, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON1_FLAG_0), 20),
+};
+
+CameraModeValue sSetMiniBossModeBattleData[] = {
+ CAM_FUNCDATA_BATT1(-25, 180, 220, 10, 40, 10, 0, 40, 60, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 20, 50),
+};
+
+CameraModeValue sSetMiniBossModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-15, 220, 280, 16, 12, 5, 60, 70, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetMiniBossModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-15, 220, 280, 16, 100, 100, 100, 70, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: RFIXED1 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5DC4[] = {
+ CAM_FUNCDATA_FIXD1(-40, 10, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, FIXED1_FLAG_4)),
+};
+
+/*=====================================================================
+ * Custom Data: TRESURE1 Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetTreasureChestMinigameModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(
+ -20, 80, 120, -10, 15, 20, 40, 70, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, NORMAL1_FLAG_7 | NORMAL1_FLAG_1)),
+};
+
+CameraModeValue sSetTreasureChestMinigameModeTargetData[] = {
+ CAM_FUNCDATA_PARA1(
+ 0xFFC4, 0x0226, 0, 65, 0, 5, 5, 75, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_6 | PARALLEL1_FLAG_1), 60, 0),
+};
+
+/*=====================================================================
+ * Custom Data: BOMBBASKET Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5E2C[] = {
+ CAM_FUNCDATA_FIXD2(70, 50, 0x3200, 100, 30, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, FIXED2_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: CIRCLE8 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5E48[] = {
+ CAM_FUNCDATA_FIXD2(-40, 40, 0x3200, 100, 20, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, FIXED2_FLAG_3)),
+};
+
+/*=====================================================================
+ * Custom Data: BIRDS_EYE_VIEW_1 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B5E64[] = {
+ CAM_FUNCDATA_NORM1(
+ -20, 800, 800, 60, 50, 10, 50, 45, 90,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, NORMAL1_FLAG_6 | NORMAL1_FLAG_1)),
+};
+
+CameraModeValue D_801B5E8C[] = {
+ CAM_FUNCDATA_NORM1(-20, 800, 800, 60, 100, 100, 100, 45, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: DUNGEON3 Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetDungeon3ModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(
+ -30, 180, 250, -5, 18, 20, 60, 55, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, NORMAL1_FLAG_7 | NORMAL1_FLAG_1)),
+};
+
+CameraModeValue sSetDungeon3ModeTargetData[] = {
+ CAM_FUNCDATA_PARA1(
+ -30, 180, 20, 0, 0, 5, 5, 45, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_6 | PARALLEL1_FLAG_1), 80, 0),
+};
+
+CameraModeValue sSetDungeon3ModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-30, 160, 190, 0, 30, 20, 60, 55, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon3ModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-40, 0x00AA, 200, 0, 100, 100, 100, 55, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon3ModePushPullData[] = {
+ CAM_FUNCDATA_PARA1(
+ 0, 180, 5, 5, 0, 5, 5, 70, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_5 | PARALLEL1_FLAG_1), 30, 0),
+};
+
+/*=====================================================================
+ * Custom Data: TELESCOPE Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetTelescopeModeNormalData[] = {
+ CAM_FUNCDATA_SUBJ1(0, 5, 50, 10, 0, 0, 0, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_NONE_ALT, 0)),
+};
+
+CameraModeValue sSetTelescopeModeTargetData[] = {
+ CAM_FUNCDATA_SUBJ1(0, 5, 50, 10, 0, 0, 0, 15,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_NONE_ALT, 0)),
+};
+
+CameraModeValue sSetTelescopeModeFirstPersonData[] = {
+ CAM_FUNCDATA_SUBJ1(0, 5, 50, 10, 0, 0, 0, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_NONE_ALT, SUBJECT1_FLAG_4)),
+};
+
+CameraModeValue sSetTelescopeModeDekuHideData[] = {
+ CAM_FUNCDATA_SUBJ1(0, 5, 50, 0x0001, 0, 0, 0, 45,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_NONE_ALT, SUBJECT1_FLAG_4)),
+};
+
+/*=====================================================================
+ * Custom Data: ROOM0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B601C[] = {
+ CAM_FUNCDATA_NORM1(0xFFDD, 100, 220, 15, 0x0011, 12, 35, 65, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B6044[] = {
+ CAM_FUNCDATA_PARA1(-10, 200, 50, 0, 0, 5, 5, 65, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_6 | PARALLEL1_FLAG_4 | PARALLEL1_FLAG_1),
+ 60, 0),
+};
+
+CameraModeValue D_801B6074[] = {
+ CAM_FUNCDATA_KEEP1(-30, 60, 200, 20, 40, -5, 10, 30, 45, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON1_FLAG_0), 30),
+};
+
+CameraModeValue D_801B60A4[] = {
+ CAM_FUNCDATA_KEEP3(
+ -20, 50, 100, 50, 5, 20, 5, 40, 35, 50, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE, KEEPON3_FLAG_5), 60),
+};
+
+CameraModeValue D_801B60D8[] = {
+ CAM_FUNCDATA_BATT1(-25, 100, 140, 10, 40, -2, 10, 25, 50, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 25, 50),
+};
+
+CameraModeValue D_801B610C[] = {
+ CAM_FUNCDATA_JUMP2(-20, 100, 220, 20, 5, 5, 65, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue D_801B6130[] = {
+ CAM_FUNCDATA_JUMP2(-20, 120, 240, 20, 999, 5, 60, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, JUMP2_FLAG_2 | JUMP2_FLAG_1)),
+};
+
+CameraModeValue D_801B6154[] = {
+ CAM_FUNCDATA_NORM1(-30, 100, 220, 10, 30, 12, 80, 65, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B617C[] = {
+ CAM_FUNCDATA_PARA1(-40, 200, 50, 40, 0, 8, 5, 65, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_7 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1),
+ 60, 12),
+};
+
+CameraModeValue D_801B61AC[] = {
+ CAM_FUNCDATA_PARA1(0xFFB0, 240, 50, 70, 0, 12, 5, 45, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_7 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1),
+ 60, 2),
+};
+
+CameraModeValue D_801B61DC[] = {
+ CAM_FUNCDATA_PARA1(
+ -10, 200, 100, 70, 0, 4, 5, 70, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_7 | PARALLEL1_FLAG_3), 65, 12),
+};
+
+CameraModeValue D_801B620C[] = {
+ CAM_FUNCDATA_PARA1(0xFFB0, 240, -20, 50, 0, 50, 5, 80, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0), 65, 10),
+};
+
+CameraModeValue D_801B623C[] = {
+ CAM_FUNCDATA_PARA1(0xFFB0, 240, -20, 40, 0, 50, 5, 80, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1), 65, 0),
+};
+
+CameraModeValue D_801B626C[] = {
+ CAM_FUNCDATA_NORM1(-20, 100, 220, 10, 100, 100, 100, 65, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B6294[] = {
+ CAM_FUNCDATA_PARA1(0, 200, 5, 45, 0, 5, 5, 70, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_5 | PARALLEL1_FLAG_4 | PARALLEL1_FLAG_1),
+ 80, 0),
+};
+
+CameraModeValue D_801B62C4[] = {
+ CAM_FUNCDATA_KEEP1(-5, 120, 140, 5, 85, 10, 5, 25, 45, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON1_FLAG_0), 30),
+};
+
+CameraModeValue D_801B62F4[] = {
+ CAM_FUNCDATA_NORM1(50, 140, 220, 0, 0xC, 10, 40, 90, 90,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_2 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B631C[] = {
+ CAM_FUNCDATA_PARA1(
+ 100, 220, -20, 40, 0, 4, 5, 80, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, PARALLEL1_FLAG_5 | PARALLEL1_FLAG_1), 80,
+ 20),
+};
+
+CameraModeValue D_801B634C[] = {
+ CAM_FUNCDATA_NORM1(0xFFC4, 150, 250, 40, 20, 12, 40, 80, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B6374[] = {
+ CAM_FUNCDATA_PARA1(0xFFC4, 220, 20, 10, 0, 5, 5, 60, 90,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_3 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1),
+ 90, 0),
+};
+
+CameraModeValue D_801B63A4[] = {
+ CAM_FUNCDATA_NORM1(
+ -10, 120, 240, 0, 18, 12, 40, 80, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_2 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B63CC[] = {
+ CAM_FUNCDATA_PARA1(0, 220, 50, 0, 0, 5, 5, 45, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1), 60, 0),
+};
+
+/*=====================================================================
+ * Custom Data: RCIRC0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B63FC[] = {
+ CAM_FUNCDATA_FIXD2(
+ -10, 40, 0x3200, 100, 20, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, FIXED2_FLAG_4 | FIXED2_FLAG_3)),
+};
+
+/*=====================================================================
+ * Custom Data: CIRC9 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B6418[] = {
+ CAM_FUNCDATA_FIXD2(-40, 40, 0x3200, 5, 25, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, FIXED2_FLAG_2 | FIXED2_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: ONTHEPOLE Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B6434[] = {
+ CAM_FUNCDATA_NORM1(-15, 60, 600, 35, 40, 20, 60, 45, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, NORMAL1_FLAG_1)),
+};
+
+CameraModeValue D_801B645C[] = {
+ CAM_FUNCDATA_PARA1(
+ 0, 300, 5, 35, 0, 5, 5, 60, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_6 | PARALLEL1_FLAG_1), 80, 0),
+};
+
+CameraModeValue D_801B648C[] = {
+ CAM_FUNCDATA_NORM1(-10, 320, 0x017C, 30, 0x0016, 10, 0x0020, 60, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B64B4[] = {
+ CAM_FUNCDATA_JUMP2(-20, 280, 320, 20, 5, 5, 60, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue D_801B64D8[] = {
+ CAM_FUNCDATA_JUMP2(-20, 280, 320, 20, 999, 5, 60, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, JUMP2_FLAG_2 | JUMP2_FLAG_1)),
+};
+
+CameraModeValue D_801B64FC[] = {
+ CAM_FUNCDATA_PARA1(-40, 320, 50, 40, 0, 8, 5, 60, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_7 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1),
+ 50, 12),
+};
+
+CameraModeValue D_801B652C[] = {
+ CAM_FUNCDATA_PARA1(0xFFB0, 300, 50, 70, 0, 12, 5, 45, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL,
+ PARALLEL1_FLAG_7 | PARALLEL1_FLAG_2 | PARALLEL1_FLAG_1),
+ 50, 2),
+};
+
+CameraModeValue D_801B655C[] = {
+ CAM_FUNCDATA_NORM1(-15, 340, 350, 30, 100, 100, 100, 60, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: INBUSH Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B6584[] = {
+ CAM_FUNCDATA_NORM1(
+ 0, 260, 280, 20, 20, 12, 50, 60, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, NORMAL1_FLAG_7 | NORMAL1_FLAG_1)),
+};
+
+CameraModeValue D_801B65AC[] = {
+ CAM_FUNCDATA_PARA1(10, 260, 50, 15, 0, 5, 5, 45, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1), 60, 0),
+};
+
+CameraModeValue D_801B65DC[] = {
+ CAM_FUNCDATA_KEEP1(10, 200, 220, 20, 40, 20, 30, 15, 45, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON1_FLAG_0), 30),
+};
+
+CameraModeValue D_801B660C[] = {
+ CAM_FUNCDATA_KEEP3(
+ 10, 180, 200, 30, 10, 30, 30, 70, 45, 50, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE, KEEPON3_FLAG_6), 60),
+};
+
+CameraModeValue D_801B6640[] = {
+ CAM_FUNCDATA_BATT1(10, 220, 220, 10, 80, 20, 30, 25, 50, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 25, 60),
+};
+
+CameraModeValue D_801B6674[] = {
+ CAM_FUNCDATA_SUBJ1(0, 10, 60, 10, 0, 50, 0, 45, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, 0)),
+};
+
+CameraModeValue D_801B6698[] = {
+ CAM_FUNCDATA_NORM1(0, 260, 280, 40, 20, 12, 40, 60, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1)),
+};
+
+CameraModeValue D_801B66C0[] = {
+ CAM_FUNCDATA_NORM1(0, 260, 280, 20, 100, 100, 100, 60, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: BOSS_MAJORA Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetBossMajoraModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(0, 280, 320, -5, 24, 12, 0x0020, 65, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetBossMajoraModeFollowTargetData[] = {
+ CAM_FUNCDATA_KEEP1(-30, 240, 260, 20, 40, 10, 5, 60, 50, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, 0), 30),
+};
+
+CameraModeValue sSetBossMajoraModeBattleData[] = {
+ CAM_FUNCDATA_BATT1(0xFFC4, 180, 200, 10, 20, 20, 10, 20, 70, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 10, 40),
+};
+
+CameraModeValue sSetBossMajoraModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-20, 280, 320, 10, 30, 12, 40, 65, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetBossMajoraModeStillData[] = {
+ CAM_FUNCDATA_NORM1(0, 280, 320, 0, 100, 100, 100, 65, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: BOSS_TWINMOLD Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetBossTwinmoldModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(20, 350, 400, 0, 0x001A, 12, 0x0020, 75, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetBossTwinmoldModeTargetData[] = {
+ CAM_FUNCDATA_PARA1(0, 400, 50, 0, 0, 5, 5, 55, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1), 60, 0),
+};
+
+CameraModeValue sSetBossTwinmoldModeFollowTargetData[] = {
+ CAM_FUNCDATA_KEEP1(-30, 250, 300, 20, 40, 10, 5, 60, 50, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, 0), 30),
+};
+
+CameraModeValue sSetBossTwinmoldModeBattleData[] = {
+ CAM_FUNCDATA_BATT1(0, 150, 200, 10, 30, 10, 0, 20, 70, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 10, 40),
+};
+
+CameraModeValue sSetBossTwinmoldModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-20, 350, 400, 10, 30, 12, 40, 75, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetBossTwinmoldModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-20, 280, 320, 10, 100, 100, 100, 60, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_4 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: BOSS_GOHT Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetBossGohtModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(-20, 280, 320, 10, 20, 12, 50, 60, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetBossGohtModeBattleData[] = {
+ CAM_FUNCDATA_BATT1(-25, 220, 220, 10, 80, -2, 10, 25, 50, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 25, 50),
+};
+
+CameraModeValue sSetBossGohtModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-20, 280, 320, 10, 30, 12, 40, 60, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetBossGohtModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-20, 280, 320, 10, 100, 100, 100, 60, 15,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetBossGohtModeGoronDashData[] = {
+ CAM_FUNCDATA_NORM1(60, 200, 340, 10, 15, 10, 50, 85, 90,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_2 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: BOSS_GYORG Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetBossGyorgModeNormalData[] = {
+ CAM_FUNCDATA_JUMP3(-20, 280, 320, 10, 20, 12, 40, 60, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_7 | JUMP3_FLAG_2)),
+};
+
+CameraModeValue sSetBossGyorgModeFollowTargetData[] = {
+ CAM_FUNCDATA_KEEP1(-30, 200, 240, 20, 40, -5, 10, 15, 45, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON1_FLAG_0), 30),
+};
+
+CameraModeValue sSetBossGyorgModeBattleData[] = {
+ CAM_FUNCDATA_BATT1(-30, 190, 250, 10, 50, 0, 10, 20, 50, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 25, 50),
+};
+
+CameraModeValue sSetBossGyorgModeGoronJumpData[] = {
+ CAM_FUNCDATA_JUMP3(-40, 160, 260, -5, 18, 5, 40, 70, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_3 | JUMP3_FLAG_2)),
+};
+
+CameraModeValue sSetBossGyorgModeDekuFlyData[] = {
+ CAM_FUNCDATA_JUMP3(-30, 220, 280, 0, 18, 5, 60, 60, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_2 | JUMP3_FLAG_0)),
+};
+
+CameraModeValue sSetBossGyorgModeDekuHideData[] = {
+ CAM_FUNCDATA_JUMP3(
+ 0xFFC4, 160, 280, -15, 18, 5, 60, 60, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_7 | JUMP3_FLAG_2 | JUMP3_FLAG_0)),
+};
+
+CameraModeValue sSetBossGyorgModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-40, 100, 320, 20, 100, 100, 100, 60, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: PINNACLE_ROCK Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetPinnacleRockModeNormalData[] = {
+ CAM_FUNCDATA_JUMP3(-40, 250, 350, 30, 15, 5, 40, 60, 100,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_7 | JUMP3_FLAG_2)),
+};
+
+CameraModeValue sSetPinnacleRockModeTargetData[] = {
+ CAM_FUNCDATA_PARA1(
+ -50, 350, 40, 10, 0, 15, 5, 60, 100,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1 | PARALLEL1_FLAG_0), 80, 0),
+};
+
+CameraModeValue sSetPinnacleRockModeGoronJumpData[] = {
+ CAM_FUNCDATA_JUMP3(-40, 320, 400, -5, 18, 5, 40, 60, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_3 | JUMP3_FLAG_2)),
+};
+
+CameraModeValue sSetPinnacleRockModeDekuFlyData[] = {
+ CAM_FUNCDATA_JUMP3(-40, 300, 350, 10, 18, 5, 60, 60, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_2 | JUMP3_FLAG_0)),
+};
+
+CameraModeValue sSetPinnacleRockModeDekuHideData[] = {
+ CAM_FUNCDATA_JUMP3(
+ 0xFFC4, 150, 250, -18, 18, 5, 60, 60, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_7 | JUMP3_FLAG_2 | JUMP3_FLAG_0)),
+};
+
+CameraModeValue sSetPinnacleRockModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-40, 250, 350, 30, 100, 100, 100, 60, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetPinnacleRockModeGoronDashData[] = {
+ CAM_FUNCDATA_JUMP3(-40, 250, 280, 5, 0x0011, 5, 40, 75, 35,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_3 | JUMP3_FLAG_2)),
+};
+
+/*=====================================================================
+ * Custom Data: NORMAL2 Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetNormal2ModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(-10, 350, 400, 14, 25, 14, 60, 65, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetNormal2ModeTargetData[] = {
+ CAM_FUNCDATA_PARA1(0, 350, 80, 0, 0, 5, 5, 50, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1), 60, 0),
+};
+
+CameraModeValue sSetNormal2ModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-10, 350, 0x01A4, 10, 30, 10, 40, 65, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetNormal2ModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-10, 350, 400, 14, 100, 100, 100, 65, 16,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: BOMBBOWL Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B6C98[] = {
+ CAM_FUNCDATA_NORM1(-30, 300, 320, 15, 0x0016, 12, 30, 55, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B6CC0[] = {
+ CAM_FUNCDATA_KEEP1(-30, 180, 200, 20, 30, -5, 10, 40, 45, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON1_FLAG_0), 30),
+};
+
+CameraModeValue D_801B6CF0[] = {
+ CAM_FUNCDATA_KEEP3(
+ -30, 65, 70, 10, 10, 5, 5, 20, 45, 50, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE, KEEPON3_FLAG_5), 50),
+};
+
+CameraModeValue D_801B6D24[] = {
+ CAM_FUNCDATA_NORM1(-20, 300, 320, 10, 30, 12, 40, 55, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B6D4C[] = {
+ CAM_FUNCDATA_NORM1(-30, 300, 320, 15, 100, 100, 100, 55, 25,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: CIRCA Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B6D74[] = {
+ CAM_FUNCDATA_FIXD2(-40, 60, 0x3200, 100, 20, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE,
+ FIXED2_FLAG_3 | FIXED2_FLAG_1 | FIXED2_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: WHIRLPOOL Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetWhirlpoolModeNormalData[] = {
+ CAM_FUNCDATA_JUMP3(
+ -10, 280, 350, 50, 12, 5, 30, 60, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_7 | JUMP3_FLAG_5 | JUMP3_FLAG_2)),
+};
+
+CameraModeValue sSetWhirlpoolModeFreeFallData[] = {
+ CAM_FUNCDATA_JUMP3(0, 180, 300, 30, 12, 5, 25, 75, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_4 | JUMP3_FLAG_2)),
+};
+
+CameraModeValue sSetWhirlpoolModeGoronJumpData[] = {
+ CAM_FUNCDATA_JUMP3(
+ -40, 320, 350, -5, 12, 5, 25, 65, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_4 | JUMP3_FLAG_3 | JUMP3_FLAG_2)),
+};
+
+CameraModeValue sSetWhirlpoolModeDekuFlyData[] = {
+ CAM_FUNCDATA_JUMP3(
+ -40, 300, 350, 10, 15, 5, 30, 65, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_5 | JUMP3_FLAG_2 | JUMP3_FLAG_0)),
+};
+
+CameraModeValue sSetWhirlpoolModeDekuHideData[] = {
+ CAM_FUNCDATA_JUMP3(
+ 0xFFC4, 150, 250, -18, 15, 5, 30, 60, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_7 | JUMP3_FLAG_4 | JUMP3_FLAG_2)),
+};
+
+CameraModeValue sSetWhirlpoolModeGoronDashData[] = {
+ CAM_FUNCDATA_JUMP3(
+ -40, 220, 260, 5, 8, 5, 20, 75, 35,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_4 | JUMP3_FLAG_3 | JUMP3_FLAG_2)),
+};
+
+/*=====================================================================
+ * Custom Data: CUCCO_SHACK Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetCuccoShackModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(0xFFBA, 250, 0x01F4, 5, 30, 12, 45, 50, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetCuccoShackModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-40, 250, 0x01F4, 5, 100, 100, 100, 50, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetCuccoShackModeDekuHideData[] = {
+ CAM_FUNCDATA_NORM1(-40, 250, 0x01F4, 5, 25, 12, 40, 50, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: GIANT Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetGiantModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(-40, 150, 160, -15, 25, 14, 50, 50, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetGiantModeTargetData[] = {
+ CAM_FUNCDATA_PARA1(-40, 180, 80, 0, 0, 5, 5, 50, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1), 60, 0),
+};
+
+CameraModeValue sSetGiantModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(-10, 100, 150, 10, 30, 10, 40, 70, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetGiantModeStillData[] = {
+ CAM_FUNCDATA_NORM1(-40, 150, 160, 0xFFF4, 25, 14, 50, 50, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/*=====================================================================
+ * Custom Data: SCENE0 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B6FA0[] = {
+ CAM_FUNCDATA_UNIQ2(-40, 20, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ UNIQUE2_FLAG_5 | UNIQUE2_FLAG_4 | UNIQUE2_FLAG_1)),
+};
+
+/*=====================================================================
+ * Custom Data: ROOM1 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B6FB0[] = {
+ CAM_FUNCDATA_NORM1(-15, 120, 250, 16, 16, 5, 65, 60, 75,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B6FD8[] = {
+ CAM_FUNCDATA_KEEP1(-20, 100, 150, 0, 4, 20, 10, 40, 60, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON1_FLAG_0), 20),
+};
+
+CameraModeValue D_801B7008[] = {
+ CAM_FUNCDATA_BATT1(-25, 100, 180, 10, 40, 10, 0, 40, 60, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_1), 20, 50),
+};
+
+CameraModeValue D_801B703C[] = {
+ CAM_FUNCDATA_NORM1(-15, 120, 250, 16, 12, 5, 60, 70, 40,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B7064[] = {
+ CAM_FUNCDATA_NORM1(-15, 120, 250, 16, 100, 100, 100, 70, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_5 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue D_801B708C[] = {
+ CAM_FUNCDATA_PARA1(
+ 0, 200, 5, 30, 0, 5, 5, 70, 30,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_5 | PARALLEL1_FLAG_1), 80, 0),
+};
+
+/*=====================================================================
+ * Custom Data: WATER2 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B70BC[] = {
+ CAM_FUNCDATA_JUMP3(-10, 270, 300, 20, 30, 20, 65, 60, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_7 | JUMP3_FLAG_2)),
+};
+
+CameraModeValue D_801B70E4[] = {
+ CAM_FUNCDATA_PARA1(
+ -30, 280, 40, 10, 0, 15, 5, 60, 100,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1 | PARALLEL1_FLAG_0), 60, 0),
+};
+
+CameraModeValue D_801B7114[] = {
+ CAM_FUNCDATA_KEEP3(-20, 50, 100, 50, 5, 20, 10, 40, 45, 50, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE, 0),
+ 60),
+};
+
+CameraModeValue D_801B7148[] = {
+ CAM_FUNCDATA_JUMP3(-40, 180, 200, 5, 20, 5, 40, 75, 35,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, JUMP3_FLAG_3 | JUMP3_FLAG_2)),
+};
+
+/*=====================================================================
+ * Custom Data: FORCEKEEP Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B7170[] = {
+ CAM_FUNCDATA_KEEP1(
+ -30, 180, 200, 20, 40, -5, 10, 15, 45, 60,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON1_FLAG_4 | KEEPON1_FLAG_0), 30),
+};
+
+CameraModeValue D_801B71A0[] = {
+ CAM_FUNCDATA_BATT1(
+ -30, 150, 250, 10, 60, -5, 20, 35, 55, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, BATTLE1_FLAG_4 | BATTLE1_FLAG_1), 25, 40),
+};
+
+/*=====================================================================
+ * Custom Data: PARALLEL1 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B71D4[] = {
+ CAM_FUNCDATA_PARA1(
+ 0, 400, 20, 20, 0, 20, 5, 70, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_3 | PARALLEL1_FLAG_1), 80, 0),
+};
+
+/*=====================================================================
+ * Custom Data: START1 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B7204[] = {
+ CAM_FUNCDATA_UNIQ0(0, 100, CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL, UNIQUE0_FLAG_1)),
+};
+
+/*=====================================================================
+ * Custom Data: ROOM2 Setting
+ *=====================================================================
+ */
+
+CameraModeValue D_801B7210[] = {
+ CAM_FUNCDATA_KEEP3(
+ -10, 120, 180, 50, 5, 10, 5, 70, 35, 50, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE, KEEPON3_FLAG_5), 60),
+};
+
+/*=====================================================================
+ * Custom Data: NORMAL4 Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetNormal4ModeTalkData[] = {
+ CAM_FUNCDATA_KEEP3(
+ -20, 0x006E, 160, 80, 15, 10, 0, 70, 40, 50, 20,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE, KEEPON3_FLAG_5), 50),
+};
+
+/*=====================================================================
+ * Custom Data: ELEGY_SHELL Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetElegyShellModeNormalData[] = {
+ CAM_FUNCDATA_KEEP4(-45, 150, -10, 165, 5, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 30),
+};
+
+CameraModeValue sSetElegyShellModeJumpData[] = {
+ CAM_FUNCDATA_KEEP4(-40, 150, 18, 140, 5, 70,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 30),
+};
+
+CameraModeValue sSetElegyShellModeDekuShootData[] = {
+ CAM_FUNCDATA_KEEP4(-20, 150, -2, 140, 15, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 30),
+};
+
+CameraModeValue sSetElegyShellModeGoronDashData[] = {
+ CAM_FUNCDATA_KEEP4(-50, 150, 0xFFF4, 160, 6, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1), 25, 30),
+};
+
+CameraModeValue sSetElegyShellModeDekuFlyData[] = {
+ CAM_FUNCDATA_KEEP4(
+ 0xFFC4, 150, 0xFFF4, 0xFF74, 30, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_3 | KEEPON4_FLAG_2), 25, 30),
+};
+
+/*=====================================================================
+ * Custom Data: DUNGEON4 Setting
+ *=====================================================================
+ */
+
+CameraModeValue sSetDungeon4ModeNormalData[] = {
+ CAM_FUNCDATA_NORM1(0, 150, 250, -5, 16, 5, 0x0034, 55, 80,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon4ModeTargetData[] = {
+ CAM_FUNCDATA_PARA1(0, 200, 25, 5, 0, 5, 5, 45, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, PARALLEL1_FLAG_1), 80, 0),
+};
+
+CameraModeValue sSetDungeon4ModeJumpData[] = {
+ CAM_FUNCDATA_NORM1(0, 150, 250, 0, 24, 5, 50, 55, 50,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_NONE, CAM_HUD_VISIBILITY_ALL,
+ NORMAL1_FLAG_7 | NORMAL1_FLAG_3 | NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+CameraModeValue sSetDungeon4ModeStillData[] = {
+ CAM_FUNCDATA_NORM1(
+ 0, 180, 220, 5, 100, 100, 100, 55, 10,
+ CAM_INTERFACE_FLAGS(CAM_LETTERBOX_IGNORE, CAM_HUD_VISIBILITY_ALL, NORMAL1_FLAG_1 | NORMAL1_FLAG_0)),
+};
+
+/**
+ * =====================================================================
+ * CAMERA SETTINGS: USAGE OF FUNCTIONS AND DATA FOR SPECIFIC MODES
+ * =====================================================================
+ */
+
+#define CAM_SETTING_MODE_ENTRY(func, data) \
+ { func, ARRAY_COUNT(data), data }
+
+#define CAM_SETTING_MODE_NULL \
+ { CAM_FUNC_NONE, 0, NULL }
+
+CameraMode sCamSetNormal0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronJumpData), // CAM_MODE_GORONJUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeZData), // CAM_MODE_CHARGEZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_ZORAFINZ
+};
+
+CameraMode sCamSetNormal3Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal3ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_NULL, // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal3ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLYZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeGoronJumpData), // CAM_MODE_GORONJUMP
+};
+
+CameraMode sCamSetPivotDivingModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE2, sSetPivotDivingModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_JUMP
+ CAM_SETTING_MODE_NULL, // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_NULL, // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE2, sSetPivotDivingModeTargetData), // CAM_MODE_TARGET
+};
+
+CameraMode sCamSetHorseModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL3, sSetHorseModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL3, sSetHorseModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_NULL, // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_NULL, // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetHorseModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL3, sSetHorseModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetHorseModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetHorseModeSlingShotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetHorseModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetHorseModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL3, sSetHorseModeStillData), // CAM_MODE_STILL
+};
+
+CameraMode sCamSetZoraDivingModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL3, sSetZoraDivingModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetPreRendFixedModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED3, sSetPrerendFixedModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetPreRendPivotModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE7, sSetPrerendPivotModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetDoorCModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL9, sSetDoorCModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetDemo0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO1, D_801B4EF0), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetFree0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE6, sSetCutscenesModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetFukan0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B4EF8), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B4F50), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B4F20), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B4F78), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B4EF8), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetNormal1Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal1ModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal1ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetNanameModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL4, D_801B4FF0), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetCirc0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B5018), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_JUMP
+ CAM_SETTING_MODE_NULL, // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B5034), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_NULL, // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B5050), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+};
+
+CameraMode sCamSetFixed0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED1, D_801B506C), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_JUMP
+ CAM_SETTING_MODE_NULL, // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_NULL, // CAM_MODE_TARGET
+ CAM_SETTING_MODE_NULL, // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+};
+
+CameraMode sCamSetSpiralDoorModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL8, sSetSpiralDoorModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetDungeon0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon0ModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetDungeon0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon0ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronJumpData), // CAM_MODE_GORONJUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeZData), // CAM_MODE_CHARGEZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_ZORAFINZ
+};
+
+CameraMode sCamSetItem0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5338), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B535C), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B53A4), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5380), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B53C8), // CAM_MODE_DEKUFLY
+};
+
+CameraMode sCamSetItem1Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B53EC), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5410), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5458), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5434), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B547C), // CAM_MODE_DEKUFLY
+};
+
+CameraMode sCamSetItem2Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B54A0), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B54C4), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B550C), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B54E8), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5530), // CAM_MODE_DEKUFLY
+};
+
+CameraMode sCamSetItem3Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5554), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5578), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B55C0), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B559C), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B55E4), // CAM_MODE_DEKUFLY
+};
+
+CameraMode sCamSetNaviModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE6, sSetCutscenesModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetWarp0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5608), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B562C), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5674), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5650), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5698), // CAM_MODE_DEKUFLY
+};
+
+CameraMode sCamSetDeathModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, sSetDeathModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, sSetDeathModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, sSetDeathModeJumpData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, sSetDeathModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, sSetDeathModeJumpData), // CAM_MODE_DEKUFLY
+};
+
+CameraMode sCamSetRebirthModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5728), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5728), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5728), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B574C), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, D_801B5728), // CAM_MODE_DEKUFLY
+};
+
+CameraMode sCamSetLongChestOpeningModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO2, sSetLongChestOpeningModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetMaskTransformationModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO4, sSetCutscenesModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO5, sSetCutscenesModeNormalData), // CAM_MODE_JUMP
+};
+
+CameraMode sCamSetAttentionModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO1, sSetCutscenesModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetWarp1Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO3, sSetCutscenesModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetDungeon1Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon1ModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon1ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetDungeon0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon1ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon1ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetFixed1Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED1, D_801B5824), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetFixed2Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED1, D_801B5834), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetMazeModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL2, sSetMazeModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetRemoteBombModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL2, sSetRemoteBombModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetCirc1Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B5884), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetCirc2Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B58A0), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetCirc3Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B58BC), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_JUMP
+ CAM_SETTING_MODE_NULL, // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B5034), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_NULL, // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B5050), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+};
+
+CameraMode sCamSetCirc4Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B58D8), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetFixed3Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED1, D_801B58F4), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_JUMP
+ CAM_SETTING_MODE_NULL, // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_NULL, // CAM_MODE_TARGET
+ CAM_SETTING_MODE_NULL, // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+};
+
+CameraMode sCamSetTowerClimbModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL0, sSetTowerClimbModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetTowerClimbModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetTowerClimbModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetParallel0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B5978), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetNormDModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B59A8), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetSubjectDModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, D_801B59D0), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetStart0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE0, D_801B59F4), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetStart2Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE0, D_801B5A00), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetStop0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE6, sSetCutscenesModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetBoatCruiseModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetBoatCruiseModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_JUMP
+ CAM_SETTING_MODE_NULL, // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_NULL, // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_NULL, // CAM_MODE_TARGET
+ CAM_SETTING_MODE_NULL, // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+};
+
+CameraMode sCamSetVerticalClimbModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetVerticalClimbModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetVerticalClimbModeClimbData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetSidedModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B5A64), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetDungeon2Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon2ModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon2ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetDungeon2ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon2ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon2ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetBossOdolwaModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossOdolwaModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossOdolwaModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetBossOdolwaModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetBossOdolwaModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetBossOdolwaModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossOdolwaModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetKeepBackModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B5C80), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetVerticalClimbModeClimbData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetCirc6Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B5CB0), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetCirc7Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B5CCC), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetMiniBossModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetMiniBossModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetMiniBossModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetMiniBossModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetMiniBossModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetMiniBossModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetRFixed1Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED1, D_801B5DC4), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetTreasureChestMinigameModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetTreasureChestMinigameModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_JUMP
+ CAM_SETTING_MODE_NULL, // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_NULL, // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetTreasureChestMinigameModeTargetData), // CAM_MODE_TARGET
+};
+
+CameraMode sCamSetBombBasketModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B5E2C), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetCirc8Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B5E48), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetFukan1Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B5E64), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B4F50), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B4F20), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B5E8C), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B4EF8), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetDungeon3Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon3ModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon3ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon3ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetDungeon0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon3ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon3ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetTelescopeModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetTelescopeModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_JUMP
+ CAM_SETTING_MODE_NULL, // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetTelescopeModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_NULL, // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_NULL, // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetTelescopeModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_NULL, // CAM_MODE_TALK
+ CAM_SETTING_MODE_NULL, // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetTelescopeModeDekuHideData), // CAM_MODE_DEKUHIDE
+};
+
+CameraMode sCamSetRoom0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B601C), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B6154), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B62F4), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B634C), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, D_801B62C4), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, D_801B6074), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B6044), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, D_801B60A4), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, D_801B60D8), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B631C), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B626C), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B620C), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, D_801B610C), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, D_801B6130), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B61DC), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B617C), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B61AC), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B6294), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B6374), // CAM_MODE_DEKUFLYZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B63A4), // CAM_MODE_GORONJUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBoomerangData), // CAM_MODE_BOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B623C), // CAM_MODE_CHARGEZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B63CC), // CAM_MODE_ZORAFINZ
+};
+
+CameraMode sCamSetRCirc0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B63FC), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetCirc9Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B6418), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_JUMP
+ CAM_SETTING_MODE_NULL, // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B5034), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_NULL, // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B5050), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+};
+
+CameraMode sCamSetOnThePoleModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B6434), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B648C), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B645C), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetDungeon0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B655C), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, D_801B64B4), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, D_801B64D8), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B64FC), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B652C), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon1ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetInBushModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B6584), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B6698), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, D_801B6674), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, D_801B65DC), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B65AC), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, D_801B660C), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, D_801B6640), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B66C0), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B4EF8), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetBossMajoraModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossMajoraModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossMajoraModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetBossMajoraModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetBossMajoraModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossMajoraModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetBossTwinmoldModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossTwinmoldModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossTwinmoldModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetBossTwinmoldModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetBossTwinmoldModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetBossTwinmoldModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossTwinmoldModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetBossGohtModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossGohtModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossGohtModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossGohtModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetBossGohtModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossGohtModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetBossGyorgModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetBossGyorgModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetBossGyorgModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetBossGyorgModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_NULL, // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetBossGyorgModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetBossGyorgModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetBossGyorgModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLYZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetBossGyorgModeGoronJumpData), // CAM_MODE_GORONJUMP
+};
+
+CameraMode sCamSetConnect0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_DEMO0, sSetCutscenesModeNormalData), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetPinnacleRockModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetPinnacleRockModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetPinnacleRockModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetPinnacleRockModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetPinnacleRockModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_NULL, // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetPinnacleRockModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetPinnacleRockModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLYZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetPinnacleRockModeGoronJumpData), // CAM_MODE_GORONJUMP
+};
+
+CameraMode sCamSetNormal2Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal2ModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal2ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal2ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal2ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetBombBowlModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B6C98), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B6D24), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B62F4), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B634C), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, D_801B62C4), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, D_801B6CC0), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B6044), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, D_801B6CF0), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, D_801B60D8), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B631C), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B6D4C), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B620C), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, D_801B610C), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, D_801B6130), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B61DC), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B617C), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B61AC), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B6294), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B6374), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetCircAModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_FIXED2, D_801B6D74), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetWhirlpoolModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetWhirlpoolModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetWhirlpoolModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetWhirlpoolModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetPinnacleRockModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_NULL, // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetWhirlpoolModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetWhirlpoolModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLYZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetWhirlpoolModeGoronJumpData), // CAM_MODE_GORONJUMP
+};
+
+CameraMode sCamSetCuccoShackModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetCuccoShackModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal2ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal2ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetCuccoShackModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetCuccoShackModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+};
+
+CameraMode sCamSetGiantModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetGiantModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetGiantModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetGiantModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetGiantModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetScene0Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE2, D_801B6FA0), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetRoom1Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B6FB0), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B703C), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, D_801B62C4), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, D_801B6FD8), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, D_801B60A4), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, D_801B7008), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B7064), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B708C), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetWater2Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, D_801B70BC), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, D_801B7148), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B70E4), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, D_801B7114), // CAM_MODE_TALK
+ CAM_SETTING_MODE_NULL, // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal3ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_NULL, // CAM_MODE_DEKUFLYZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP3, sSetNormal3ModeGoronJumpData), // CAM_MODE_GORONJUMP
+};
+
+CameraMode sCamSetWoodfallSwampModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE3, D_801B6584), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE3, D_801B6698), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE3, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE3, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, D_801B6674), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, D_801B65DC), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE4, D_801B65AC), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, D_801B660C), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE5, D_801B6640), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE4, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE3, D_801B66C0), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE4, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE4, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE4, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE4, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE3, D_801B6584), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE4, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetForceKeepModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, D_801B7170), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, D_801B71A0), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetParallel1Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B71D4), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetStart1Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_UNIQUE0, D_801B7204), // CAM_MODE_NORMAL
+};
+
+CameraMode sCamSetRoom2Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B6FB0), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B703C), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, D_801B62C4), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, D_801B6FD8), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, D_801B7210), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, D_801B7008), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, D_801B7064), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, D_801B708C), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetNorm4Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetNormal0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal4ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetNormal0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetNormal0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraMode sCamSetElegyShellModes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, sSetElegyShellModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, sSetElegyShellModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, sSetElegyShellModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, sSetElegyShellModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_NULL, // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON4, sSetElegyShellModeDekuFlyData), // CAM_MODE_DEKUFLY
+};
+
+CameraMode sCamSetDungeon4Modes[] = {
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon4ModeNormalData), // CAM_MODE_NORMAL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon4ModeJumpData), // CAM_MODE_JUMP
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeGoronDashData), // CAM_MODE_GORONDASH
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeDekuShootData), // CAM_MODE_DEKUSHOOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowZData), // CAM_MODE_BOWARROWZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetNormal0ModeDekuFlyData), // CAM_MODE_DEKUFLY
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeFirstPersonData), // CAM_MODE_FIRSTPERSON
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowBoomerangData), // CAM_MODE_FOLLOWBOOMERANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeZoraFinData), // CAM_MODE_ZORAFIN
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON1, sSetDungeon0ModeFollowTargetData), // CAM_MODE_FOLLOWTARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon4ModeTargetData), // CAM_MODE_TARGET
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_KEEPON3, sSetNormal0ModeTalkData), // CAM_MODE_TALK
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeSlingshotData), // CAM_MODE_SLINGSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SUBJECT1, sSetNormal0ModeBowArrowData), // CAM_MODE_BOWARROW
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_BATTLE1, sSetDungeon0ModeBattleData), // CAM_MODE_BATTLE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuHideData), // CAM_MODE_DEKUHIDE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_NORMAL1, sSetDungeon4ModeStillData), // CAM_MODE_STILL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeChargeData), // CAM_MODE_CHARGE
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbData), // CAM_MODE_CLIMB
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_JUMP2, sSetDungeon0ModeClimbZData), // CAM_MODE_CLIMBZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_SPECIAL5, sSetNormal0ModeHookshotData), // CAM_MODE_HOOKSHOT
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeFreeFallData), // CAM_MODE_FREEFALL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangData), // CAM_MODE_HANG
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModeHangZData), // CAM_MODE_HANGZ
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetDungeon0ModePushPullData), // CAM_MODE_PUSHPULL
+ CAM_SETTING_MODE_ENTRY(CAM_FUNC_PARALLEL1, sSetNormal0ModeDekuFlyZData), // CAM_MODE_DEKUFLYZ
+};
+
+CameraSetting sCameraSettings[] = {
+ { 0x00000000, 0x00000000, NULL }, // CAM_SET_NONE
+ { 0x3FFFFFFF, 0x00000005, sCamSetNormal0Modes }, // CAM_SET_NORMAL0
+ { 0x05FFEFF7, 0x00000005, sCamSetNormal3Modes }, // CAM_SET_NORMAL3
+ { 0x00000401, 0x00000005, sCamSetPivotDivingModes }, // CAM_SET_PIVOT_DIVING
+ { 0x00017E13, 0x80000005, sCamSetHorseModes }, // CAM_SET_HORSE
+ { 0x00000001, 0x80000005, sCamSetZoraDivingModes }, // CAM_SET_ZORA_DIVING
+ { 0x00000001, 0x8000000C, sCamSetPreRendFixedModes }, // CAM_SET_PREREND_FIXED
+ { 0x00000001, 0x8000000C, sCamSetPreRendPivotModes }, // CAM_SET_PREREND_PIVOT
+ { 0x00000001, 0xC0000007, sCamSetDoorCModes }, // CAM_SET_DOORC
+ { 0x00000001, 0xC000000E, sCamSetDemo0Modes }, // CAM_SET_DEMO0
+ { 0x00000001, 0x80000005, sCamSetFree0Modes }, // CAM_SET_FREE0
+ { 0x03FFFFFF, 0x00000005, sCamSetFukan0Modes }, // CAM_SET_BIRDS_EYE_VIEW_0
+ { 0x03FFFFFF, 0x00000005, sCamSetNormal1Modes }, // CAM_SET_NORMAL1
+ { 0x03FFFFFF, 0x80000005, sCamSetNanameModes }, // CAM_SET_NANAME
+ { 0x00001BD9, 0x80000005, sCamSetCirc0Modes }, // CAM_SET_CIRCLE0
+ { 0x000011D9, 0x80000005, sCamSetFixed0Modes }, // CAM_SET_FIXED0
+ { 0x00000001, 0x40000005, sCamSetSpiralDoorModes }, // CAM_SET_SPIRAL_DOOR
+ { 0x3FFFFFFF, 0x00000005, sCamSetDungeon0Modes }, // CAM_SET_DUNGEON0
+ { 0x0000002F, 0x00000005, sCamSetItem0Modes }, // CAM_SET_ITEM0
+ { 0x0000002F, 0x00000005, sCamSetItem1Modes }, // CAM_SET_ITEM1
+ { 0x0000002F, 0x00000005, sCamSetItem2Modes }, // CAM_SET_ITEM2
+ { 0x0000002F, 0x00000005, sCamSetItem3Modes }, // CAM_SET_ITEM3
+ { 0x00000001, 0x00000005, sCamSetNaviModes }, // CAM_SET_NAVI
+ { 0x0000002F, 0x00000005, sCamSetWarp0Modes }, // CAM_SET_WARP_PAD_MOON
+ { 0x0000002F, 0x00000005, sCamSetDeathModes }, // CAM_SET_DEATH
+ { 0x0000002F, 0x00000005, sCamSetRebirthModes }, // CAM_SET_REBIRTH
+ { 0x00000001, 0x40000005, sCamSetLongChestOpeningModes }, // CAM_SET_LONG_CHEST_OPENING
+ { 0x00000003, 0x00000005, sCamSetMaskTransformationModes }, // CAM_SET_MASK_TRANSFORMATION
+ { 0x00000001, 0x00000005, sCamSetAttentionModes }, // CAM_SET_ATTENTION
+ { 0x00000001, 0x00000005, sCamSetWarp1Modes }, // CAM_SET_WARP_PAD_ENTRANCE
+ { 0x03FFFFFF, 0x00000005, sCamSetDungeon1Modes }, // CAM_SET_DUNGEON1
+ { 0x00000001, 0x80000005, sCamSetFixed1Modes }, // CAM_SET_FIXED1
+ { 0x00000001, 0x80000005, sCamSetFixed2Modes }, // CAM_SET_FIXED2
+ { 0x00000001, 0x00000005, sCamSetMazeModes }, // CAM_SET_MAZE
+ { 0x00000001, 0x00000005, sCamSetRemoteBombModes }, // CAM_SET_REMOTEBOMB
+ { 0x00000001, 0x80000005, sCamSetCirc1Modes }, // CAM_SET_CIRCLE1
+ { 0x00000001, 0x80000005, sCamSetCirc2Modes }, // CAM_SET_CIRCLE2
+ { 0x00001BD9, 0x80000005, sCamSetCirc3Modes }, // CAM_SET_CIRCLE3
+ { 0x00000001, 0x80000005, sCamSetCirc4Modes }, // CAM_SET_CIRCLE4
+ { 0x000011D9, 0x80000005, sCamSetFixed3Modes }, // CAM_SET_FIXED3
+ { 0x03FFFFFF, 0x80000005, sCamSetTowerClimbModes }, // CAM_SET_TOWER_ASCENT
+ { 0x00000001, 0x80000005, sCamSetParallel0Modes }, // CAM_SET_PARALLEL0
+ { 0x00000001, 0x00000005, sCamSetNormDModes }, // CAM_SET_NORMALD
+ { 0x00000001, 0x00000005, sCamSetSubjectDModes }, // CAM_SET_SUBJECTD
+ { 0x00000001, 0xC0000008, sCamSetStart0Modes }, // CAM_SET_START0
+ { 0x00000001, 0xC0000008, sCamSetStart2Modes }, // CAM_SET_START2
+ { 0x00000001, 0x00000005, sCamSetStop0Modes }, // CAM_SET_STOP0
+ { 0x00003051, 0x00000005, sCamSetBoatCruiseModes }, // CAM_SET_BOAT_CRUISE
+ { 0x03FFFFFF, 0x00000005, sCamSetVerticalClimbModes }, // CAM_SET_VERTICAL_CLIMB
+ { 0x00000001, 0x00000005, sCamSetSidedModes }, // CAM_SET_SIDED
+ { 0x03FFFFFF, 0x00000005, sCamSetDungeon2Modes }, // CAM_SET_DUNGEON2
+ { 0x03FFFFFF, 0x00000005, sCamSetBossOdolwaModes }, // CAM_SET_BOSS_ODOLWA
+ { 0x03FFFFFF, 0x80000005, sCamSetKeepBackModes }, // CAM_SET_KEEPBACK
+ { 0x00000001, 0x80000005, sCamSetCirc6Modes }, // CAM_SET_CIRCLE6
+ { 0x00000001, 0x80000005, sCamSetCirc7Modes }, // CAM_SET_CIRCLE7
+ { 0x03FFFFFF, 0x00000005, sCamSetMiniBossModes }, // CAM_SET_MINI_BOSS
+ { 0x00000001, 0x80000005, sCamSetRFixed1Modes }, // CAM_SET_RFIXED1
+ { 0x00000401, 0x00000005, sCamSetTreasureChestMinigameModes }, // CAM_SET_TREASURE_CHEST_MINIGAME
+ { 0x00000001, 0x80000005, sCamSetBombBasketModes }, // CAM_SET_HONEY_AND_DARLING_1
+ { 0x00000001, 0x80000005, sCamSetCirc8Modes }, // CAM_SET_CIRCLE8
+ { 0x03FFFFFF, 0x00000005, sCamSetFukan1Modes }, // CAM_SET_BIRDS_EYE_VIEW_1
+ { 0x03FFFFFF, 0x00000005, sCamSetDungeon3Modes }, // CAM_SET_DUNGEON3
+ { 0x00008441, 0x0000000A, sCamSetTelescopeModes }, // CAM_SET_TELESCOPE
+ { 0x3FFFFFFF, 0x00000005, sCamSetRoom0Modes }, // CAM_SET_ROOM0
+ { 0x00000001, 0x80000005, sCamSetRCirc0Modes }, // CAM_SET_RCIRC0
+ { 0x00001BD9, 0x80000005, sCamSetCirc9Modes }, // CAM_SET_CIRCLE9
+ { 0x03FFFFFF, 0x00000005, sCamSetOnThePoleModes }, // CAM_SET_ONTHEPOLE
+ { 0x03FFFFFF, 0x00000005, sCamSetInBushModes }, // CAM_SET_INBUSH
+ { 0x03FFFFFF, 0x00000005, sCamSetBossMajoraModes }, // CAM_SET_BOSS_MAJORA
+ { 0x03FFFFFF, 0x00000005, sCamSetBossTwinmoldModes }, // CAM_SET_BOSS_TWINMOLD
+ { 0x03FFFFFF, 0x00000005, sCamSetBossGohtModes }, // CAM_SET_BOSS_GOHT
+ { 0x05FFEFF7, 0x00000005, sCamSetBossGyorgModes }, // CAM_SET_BOSS_GYORG
+ { 0x00000001, 0x00000005, sCamSetConnect0Modes }, // CAM_SET_CONNECT0
+ { 0x05FFEFF7, 0x00000005, sCamSetPinnacleRockModes }, // CAM_SET_PINNACLE_ROCK
+ { 0x03FFFFFF, 0x00000005, sCamSetNormal2Modes }, // CAM_SET_NORMAL2
+ { 0x03FFFFFF, 0x00000005, sCamSetBombBowlModes }, // CAM_SET_HONEY_AND_DARLING_2
+ { 0x00000001, 0x80000005, sCamSetCircAModes }, // CAM_SET_CIRCLEA
+ { 0x05FFEFF7, 0x00000005, sCamSetWhirlpoolModes }, // CAM_SET_WHIRLPOOL
+ { 0x01FFFFDF, 0x00000005, sCamSetCuccoShackModes }, // CAM_SET_CUCCO_SHACK
+ { 0x03FFFFFF, 0x00000005, sCamSetGiantModes }, // CAM_SET_GIANT
+ { 0x00000001, 0x00000008, sCamSetScene0Modes }, // CAM_SET_SCENE0
+ { 0x03FFFFFF, 0x00000005, sCamSetRoom1Modes }, // CAM_SET_ROOM1
+ { 0x05FFEFF7, 0x00000005, sCamSetWater2Modes }, // CAM_SET_WATER2
+ { 0x03FFFFFF, 0x00000005, sCamSetWoodfallSwampModes }, // CAM_SET_WOODFALL_SWAMP
+ { 0x03FFFFFF, 0x00000005, sCamSetForceKeepModes }, // CAM_SET_FORCEKEEP
+ { 0x03FFFFFF, 0x80000005, sCamSetParallel1Modes }, // CAM_SET_PARALLEL1
+ { 0x00000001, 0xC0000008, sCamSetStart1Modes }, // CAM_SET_START1
+ { 0x03FFFFFF, 0x00000005, sCamSetRoom2Modes }, // CAM_SET_ROOM2
+ { 0x03FFFFFF, 0x00000005, sCamSetNorm4Modes }, // CAM_SET_NORMAL4
+ { 0x0000002F, 0x00000005, sCamSetElegyShellModes }, // CAM_SET_ELEGY_SHELL
+ { 0x03FFFFFF, 0x00000005, sCamSetDungeon4Modes }, // CAM_SET_DUNGEON4
+};
+
+s16 sGlobalCamDataSettings[] = {
+ /* -25 */ CAM_SET_ELEGY_SHELL, // CS_CAM_ID_GLOBAL_ELEGY
+ /* -24 */ CAM_SET_SIDED, // CS_CAM_ID_GLOBAL_SIDED
+ /* -23 */ CAM_SET_BOAT_CRUISE, // CS_CAM_ID_GLOBAL_BOAT_CRUISE
+ /* -22 */ CAM_SET_NONE, // CS_CAM_ID_GLOBAL_N16
+ /* -21 */ CAM_SET_SUBJECTD, // CS_CAM_ID_GLOBAL_SUBJECTD
+ /* -20 */ CAM_SET_NORMALD, // CS_CAM_ID_GLOBAL_NORMALD
+ /* -19 */ CAM_SET_NONE, // CS_CAM_ID_GLOBAL_N13
+ /* -18 */ CAM_SET_NONE, // CS_CAM_ID_GLOBAL_N12
+ /* -17 */ CAM_SET_NONE, // CS_CAM_ID_GLOBAL_N11
+ /* -16 */ CAM_SET_WARP_PAD_ENTRANCE, // CS_CAM_ID_GLOBAL_WARP_PAD_ENTRANCE
+ /* -15 */ CAM_SET_ATTENTION, // CS_CAM_ID_GLOBAL_ATTENTION
+ /* -14 */ CAM_SET_CONNECT0, // CS_CAM_ID_GLOBAL_CONNECT
+ /* -13 */ CAM_SET_REMOTEBOMB, // CS_CAM_ID_GLOBAL_REMOTE_BOMB
+ /* -12 */ CAM_SET_NONE, // CS_CAM_ID_GLOBAL_N0C
+ /* -11 */ CAM_SET_MASK_TRANSFORMATION, // CS_CAM_ID_GLOBAL_MASK_TRANSFORMATION
+ /* -10 */ CAM_SET_LONG_CHEST_OPENING, // CS_CAM_ID_GLOBAL_LONG_CHEST_OPENING
+ /* -9 */ CAM_SET_REBIRTH, // CS_CAM_ID_GLOBAL_REVIVE
+ /* -8 */ CAM_SET_DEATH, // CS_CAM_ID_GLOBAL_DEATH
+ /* -7 */ CAM_SET_WARP_PAD_MOON, // CS_CAM_ID_GLOBAL_WARP_PAD_MOON
+ /* -6 */ CAM_SET_NAVI, // CS_CAM_ID_GLOBAL_SONG_WARP
+ /* -5 */ CAM_SET_ITEM3, // CS_CAM_ID_GLOBAL_ITEM_SHOW
+ /* -4 */ CAM_SET_ITEM2, // CS_CAM_ID_GLOBAL_ITEM_BOTTLE
+ /* -3 */ CAM_SET_ITEM1, // CS_CAM_ID_GLOBAL_ITEM_OCARINA
+ /* -2 */ CAM_SET_ITEM0, // CS_CAM_ID_GLOBAL_ITEM_GET
+ /* -1 */ CAM_SET_STOP0, // CS_CAM_ID_NONE
+ /* 0 */ CAM_SET_NONE,
+};
+
+s16* sGlobalCamDataSettingsPtr = &sGlobalCamDataSettings[ARRAY_COUNT(sGlobalCamDataSettings) - 1];
+
+s32 Camera_Noop(Camera* camera);
+s32 Camera_Normal1(Camera* camera);
+s32 Camera_Normal2(Camera* camera);
+s32 Camera_Normal3(Camera* camera);
+s32 Camera_Normal4(Camera* camera);
+s32 Camera_Normal0(Camera* camera);
+s32 Camera_Parallel1(Camera* camera);
+s32 Camera_Parallel2(Camera* camera);
+s32 Camera_Parallel3(Camera* camera);
+s32 Camera_Parallel4(Camera* camera);
+s32 Camera_Parallel0(Camera* camera);
+s32 Camera_Jump1(Camera* camera);
+s32 Camera_Jump2(Camera* camera);
+s32 Camera_Jump3(Camera* camera);
+s32 Camera_Jump4(Camera* camera);
+s32 Camera_Jump0(Camera* camera);
+s32 Camera_Battle1(Camera* camera);
+s32 Camera_Battle2(Camera* camera);
+s32 Camera_Battle3(Camera* camera);
+s32 Camera_Battle4(Camera* camera);
+s32 Camera_Battle0(Camera* camera);
+s32 Camera_KeepOn1(Camera* camera);
+s32 Camera_KeepOn2(Camera* camera);
+s32 Camera_KeepOn3(Camera* camera);
+s32 Camera_KeepOn4(Camera* camera);
+s32 Camera_KeepOn0(Camera* camera);
+s32 Camera_Fixed1(Camera* camera);
+s32 Camera_Fixed2(Camera* camera);
+s32 Camera_Fixed3(Camera* camera);
+s32 Camera_Fixed4(Camera* camera);
+s32 Camera_Fixed0(Camera* camera);
+s32 Camera_Subject1(Camera* camera);
+s32 Camera_Subject2(Camera* camera);
+s32 Camera_Subject3(Camera* camera);
+s32 Camera_Subject4(Camera* camera);
+s32 Camera_Subject0(Camera* camera);
+s32 Camera_Data0(Camera* camera);
+s32 Camera_Data1(Camera* camera);
+s32 Camera_Data2(Camera* camera);
+s32 Camera_Data3(Camera* camera);
+s32 Camera_Data4(Camera* camera);
+s32 Camera_Unique1(Camera* camera);
+s32 Camera_Unique2(Camera* camera);
+s32 Camera_Unique3(Camera* camera);
+s32 Camera_Unique4(Camera* camera);
+s32 Camera_Unique5(Camera* camera);
+s32 Camera_Unique0(Camera* camera);
+s32 Camera_Unique6(Camera* camera);
+s32 Camera_Unique7(Camera* camera);
+s32 Camera_Unique8(Camera* camera);
+s32 Camera_Unique9(Camera* camera);
+s32 Camera_Demo1(Camera* camera);
+s32 Camera_Demo2(Camera* camera);
+s32 Camera_Demo3(Camera* camera);
+s32 Camera_Demo4(Camera* camera);
+s32 Camera_Demo5(Camera* camera);
+s32 Camera_Demo6(Camera* camera);
+s32 Camera_Demo7(Camera* camera);
+s32 Camera_Demo8(Camera* camera);
+s32 Camera_Demo9(Camera* camera);
+s32 Camera_Demo0(Camera* camera);
+s32 Camera_Special0(Camera* camera);
+s32 Camera_Special1(Camera* camera);
+s32 Camera_Special2(Camera* camera);
+s32 Camera_Special3(Camera* camera);
+s32 Camera_Special4(Camera* camera);
+s32 Camera_Special5(Camera* camera);
+s32 Camera_Special6(Camera* camera);
+s32 Camera_Special7(Camera* camera);
+s32 Camera_Special8(Camera* camera);
+s32 Camera_Special9(Camera* camera);
+
+CameraUpdateFunc sCameraUpdateHandlers[] = {
+ NULL,
+ Camera_Normal0,
+ Camera_Normal1,
+ Camera_Normal2,
+ Camera_Normal3,
+ Camera_Normal4,
+ Camera_Parallel0,
+ Camera_Parallel1,
+ Camera_Parallel2,
+ Camera_Parallel3,
+ Camera_Parallel4,
+ Camera_KeepOn0,
+ Camera_KeepOn1,
+ Camera_KeepOn2,
+ Camera_KeepOn3,
+ Camera_KeepOn4,
+ Camera_Subject0,
+ Camera_Subject1,
+ Camera_Subject2,
+ Camera_Subject3,
+ Camera_Subject4,
+ Camera_Jump0,
+ Camera_Jump1,
+ Camera_Jump2,
+ Camera_Jump3,
+ Camera_Jump4,
+ Camera_Battle0,
+ Camera_Battle1,
+ Camera_Battle2,
+ Camera_Battle3,
+ Camera_Battle4,
+ Camera_Fixed0,
+ Camera_Fixed1,
+ Camera_Fixed2,
+ Camera_Fixed3,
+ Camera_Fixed4,
+ Camera_Data0,
+ Camera_Data1,
+ Camera_Data2,
+ Camera_Data3,
+ Camera_Data4,
+ Camera_Unique0,
+ Camera_Unique1,
+ Camera_Unique2,
+ Camera_Unique3,
+ Camera_Unique4,
+ Camera_Unique5,
+ Camera_Unique6,
+ Camera_Unique7,
+ Camera_Unique8,
+ Camera_Unique9,
+ Camera_Demo0,
+ Camera_Demo1,
+ Camera_Demo2,
+ Camera_Demo3,
+ Camera_Demo4,
+ Camera_Demo5,
+ Camera_Demo6,
+ Camera_Demo7,
+ Camera_Demo8,
+ Camera_Demo9,
+ Camera_Special0,
+ Camera_Special1,
+ Camera_Special2,
+ Camera_Special3,
+ Camera_Special4,
+ Camera_Special5,
+ Camera_Special6,
+ Camera_Special7,
+ Camera_Special8,
+ Camera_Special9,
+};
+
+s16 sCameraNextUID = 0;
+s32 sCameraInterfaceFlags = 1;
+s32 sCameraHudVisibility = 2;
+s32 sCameraLetterboxSize = 32;
+s32 sCameraNegOne = -1;
+
+// VecSph yaw data
+s16 D_801B9E18[] = {
+ 0x0AAA, 0xF556, 0x1555, 0xEAAB, 0x2AAA, 0xD556, 0x3FFF, 0xC001, 0x5555, 0xAAAB, 0x6AAA, 0x9556, 0x7FFF, 0x0000,
+};
+
+// VecSph pitch data
+s16 D_801B9E34[] = {
+ 0x0000, 0x02C6, 0x058C, 0x0000, 0x0000, 0xFD3A, 0x0000, 0x0852, 0x0000, 0x0000, 0x0B18, 0x02C6, 0xFA74, 0x0000,
+};
+
+s32 sUpdateCameraDirection = false;
+static s32 sIsFalse = false;
+s32 sCameraInitSceneTimer = 0;
diff --git a/src/code/z_collision_check.c b/src/code/z_collision_check.c
index edaa159c6..20083f3c4 100644
--- a/src/code/z_collision_check.c
+++ b/src/code/z_collision_check.c
@@ -3836,7 +3836,7 @@ void CollisionCheck_SpawnShieldParticles(PlayState* play, Vec3f* v) {
35.0f,
30.0f,
8,
- { 0, 0, 0, 0, 128, 255, 0, 300 },
+ { 0, 0, 0, { 0, 128, 255 }, 0, 300 },
1,
};
s32 effectIndex;
@@ -3891,7 +3891,7 @@ void CollisionCheck_SpawnShieldParticlesWood(PlayState* play, Vec3f* v, Vec3f* p
35.0f,
30.0f,
8,
- { 0, 0, 0, 0, 128, 255, 0, 300 },
+ { 0, 0, 0, { 0, 128, 255 }, 0, 300 },
0,
};
s32 effectIndex;
diff --git a/src/code/z_construct.c b/src/code/z_construct.c
index 5e92d4958..3d2621c9c 100644
--- a/src/code/z_construct.c
+++ b/src/code/z_construct.c
@@ -1,4 +1,5 @@
#include "global.h"
-void func_801AAAA0(PlayState* play) {
+// Remnant from OoT
+void Regs_InitData(PlayState* play) {
}
diff --git a/src/code/z_debug.c b/src/code/z_debug.c
index 46649a4ce..058d896a4 100644
--- a/src/code/z_debug.c
+++ b/src/code/z_debug.c
@@ -1,20 +1,21 @@
-#include "global.h"
+#include "regs.h"
#include "system_malloc.h"
+#include "macros.h"
-GameInfo* gGameInfo;
+RegEditor* gRegEditor;
-void GameInfo_Init(void) {
+void Regs_Init(void) {
s32 i;
- gGameInfo = SystemArena_Malloc(sizeof(GameInfo));
+ gRegEditor = SystemArena_Malloc(sizeof(RegEditor));
if (1) {}
- gGameInfo->unk_00 = 0;
- gGameInfo->unk_01 = 0;
- gGameInfo->unk_02 = 0;
- gGameInfo->unk_04 = 0;
- gGameInfo->unk_03 = 0;
+ gRegEditor->regPage = 0;
+ gRegEditor->regGroup = 0;
+ gRegEditor->regCur = 0;
+ gRegEditor->inputRepeatTimer = 0;
+ gRegEditor->dPadInputPrev = 0;
- for (i = 0; i < ARRAY_COUNT(gGameInfo->data); i++) {
- gGameInfo->data[i] = 0;
+ for (i = 0; i < ARRAY_COUNT(gRegEditor->data); i++) {
+ gRegEditor->data[i] = 0;
}
}
diff --git a/src/code/z_debug_display.c b/src/code/z_debug_display.c
index a8b851ed7..d9f20d72b 100644
--- a/src/code/z_debug_display.c
+++ b/src/code/z_debug_display.c
@@ -1,16 +1,18 @@
+#include "z64debug_display.h"
#include "global.h"
DebugDispObject* sDebugObjectListHead;
typedef struct {
- /* 0x00 */ s16 drawType; // indicates which draw function to use when displaying the object
- /* 0x04 */ void* drawArg; // segment address (display list or texture) passed to the draw funciton when called
-} DebugDispObjectInfo; // size = 0x8
+ /* 0x0 */ s16 drawType; // indicates which draw function to use when displaying the object
+ /* 0x4 */ void* drawArg; // segment address (display list or texture) passed to the draw funciton when called
+} DebugDispObjectInfo; // size = 0x8
-typedef void (*DebugDispObject_DrawFunc)(DebugDispObject*, void*, PlayState*);
+typedef void (*DebugDispObjectDrawFunc)(DebugDispObject*, void*, PlayState*);
void DebugDisplay_DrawSpriteI8(DebugDispObject*, void*, PlayState*);
void DebugDisplay_DrawPolygon(DebugDispObject*, void*, PlayState*);
+Gfx* DebugDisplay_PathDisplayList(GraphicsContext* gfxCtx, Path* path);
DebugDispObject* DebugDisplay_Init(void) {
sDebugObjectListHead = NULL;
@@ -43,12 +45,12 @@ DebugDispObject* DebugDisplay_AddObject(f32 posX, f32 posY, f32 posZ, s16 rotX,
#include "code/debug_display/debug_display.c"
-DebugDispObject_DrawFunc sDebugObjectDrawFuncTable[] = { DebugDisplay_DrawSpriteI8, DebugDisplay_DrawPolygon };
+DebugDispObjectDrawFunc sDebugObjectDrawFuncTable[] = { DebugDisplay_DrawSpriteI8, DebugDisplay_DrawPolygon };
DebugDispObjectInfo sDebugObjectInfoTable[] = {
{ 0, sDebugDisplayCircleTex }, { 0, sDebugDisplayCrossTex }, { 0, sDebugDisplayBallTex },
- { 0, sDebugDisplayCursorTex }, { 1, &sDebugDisplay1DL }, { 1, &sDebugDisplay3DL },
- { 1, &sDebugDisplay2DL },
+ { 0, sDebugDisplayCursorTex }, { 1, sDebugDisplay1DL }, { 1, sDebugDisplay3DL },
+ { 1, sDebugDisplay2DL },
};
void DebugDisplay_DrawObjects(PlayState* play) {
@@ -85,7 +87,7 @@ void DebugDisplay_DrawSpriteI8(DebugDispObject* dispObj, void* texture, PlayStat
Lights1 sDebugDisplayLight1 = gdSPDefLights1(128, 128, 128, 255, 255, 255, 73, 73, 73);
-void DebugDisplay_DrawPolygon(DebugDispObject* dispObj, void* arg1, PlayState* play) {
+void DebugDisplay_DrawPolygon(DebugDispObject* dispObj, void* dList, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
func_8012C588(play->state.gfxCtx);
@@ -98,28 +100,111 @@ void DebugDisplay_DrawPolygon(DebugDispObject* dispObj, void* arg1, PlayState* p
Matrix_Scale(dispObj->scale.x, dispObj->scale.y, dispObj->scale.z, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, arg1);
+ gSPDisplayList(POLY_XLU_DISP++, dList);
CLOSE_DISPS(play->state.gfxCtx);
}
-s32 D_801BB068[] = {
- 0x00140000, 0x0000FFEC, 0x00000000, 0x00000014, 0x00000000, 0xFFEC0000, 0x00000000, 0x00140000, 0x0000FFEC,
-};
+/**
+ * Visualise a path, see DebugDisplay_PathDisplayList for details.
+ */
-s32 D_801BB08C = 0;
-
-Gfx* func_800E99B0(GraphicsContext* gfxCtx, s32 arg1);
-
-void func_800E992C(PlayState* play, s32 arg1) {
+void DebugDisplay_DrawPath(PlayState* play, Path* path) {
s32 pad;
OPEN_DISPS(play->state.gfxCtx);
func_8012C560(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, func_800E99B0(play->state.gfxCtx, arg1));
+ gSPDisplayList(POLY_XLU_DISP++, DebugDisplay_PathDisplayList(play->state.gfxCtx, path));
CLOSE_DISPS(play->state.gfxCtx);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_debug_display/func_800E99B0.s")
+#define R_DRAW_PATH_SEGMENT 0 // bREG(82)
+#define R_DRAW_PATH_SCALE 1.0f // (1.0f + 0.1f * bREG(83))
+#define R_DRAW_PATH_RED 0 // bREG(84)
+#define R_DRAW_PATH_GREEN 0 // bREG(85)
+#define R_DRAW_PATH_BLUE 0 // bREG(86)
+#define R_DRAW_PATH_ALPHA 0 // bREG(87)
+
+/**
+ * Offsets of the points of the triaxial shape used for visualising paths
+ */
+Vec3s sDebugPathVtxOffsets[][2] = {
+ { { 20, 0, 0 }, { -20, 0, 0 } },
+ { { 0, 20, 0 }, { 0, -20, 0 } },
+ { { 0, 0, 20 }, { 0, 0, -20 } },
+};
+
+/**
+ * Constructs a displaylist to show a Path, by extruding the three-axis shape defined by `sPathDebugVtx` along it.
+ */
+Gfx* DebugDisplay_PathDisplayList(GraphicsContext* gfxCtx, Path* path) {
+ Gfx* gfxHead;
+ Gfx* gfx;
+ Vtx* curVtx;
+ Vtx* curBaseVtx; // First Vtx for the current point
+ Vtx* prevBaseVtx; // First Vtx for the previous point
+ Vec3s* curPoint;
+ s32 segment; // of path ending at the current point, 1-indexed
+
+ if (path != NULL) {
+ // (count - 1) segments, 1 gSPVertex and 3 gSP2Triangles for each, plus a gSPEndDisplayList
+ gfx = GRAPH_ALLOC(gfxCtx, ((path->count - 1) * 4 + 1) * sizeof(Gfx));
+ curVtx = GRAPH_ALLOC(gfxCtx, path->count * 6 * sizeof(Vtx));
+
+ gfxHead = gfx;
+ curBaseVtx = curVtx;
+ curPoint = Lib_SegmentedToVirtual(path->points);
+
+ for (segment = 0; segment < path->count; segment++, curPoint++) {
+ s32 i;
+ s32 j;
+
+ prevBaseVtx = curBaseVtx;
+ curBaseVtx = curVtx;
+
+ // Add a vertex for each point in the triaxial shape
+ for (i = 0; i < ARRAY_COUNT(sDebugPathVtxOffsets); i++) {
+ for (j = 0; j < ARRAY_COUNT(sDebugPathVtxOffsets[0]); j++) {
+ curVtx->v.ob[0] = curPoint->x + (s32)(sDebugPathVtxOffsets[i][j].x * R_DRAW_PATH_SCALE);
+ curVtx->v.ob[1] = curPoint->y + (s32)(sDebugPathVtxOffsets[i][j].y * R_DRAW_PATH_SCALE);
+ curVtx->v.ob[2] = curPoint->z + (s32)(sDebugPathVtxOffsets[i][j].z * R_DRAW_PATH_SCALE);
+ curVtx->v.flag = 0;
+ curVtx->v.tc[0] = 0;
+ curVtx->v.tc[1] = 0;
+ curVtx->v.cn[0] = 128 + R_DRAW_PATH_RED;
+ curVtx->v.cn[1] = 128 + R_DRAW_PATH_GREEN;
+ curVtx->v.cn[2] = 128 + R_DRAW_PATH_BLUE;
+ curVtx->v.cn[3] = 128 + R_DRAW_PATH_ALPHA;
+ curVtx++;
+ }
+ }
+
+ // Draw the path segment ending at point `R_DRAW_PATH_SEGMENT`, or the whole path if `R_DRAW_PATH_SEGMENT`
+ // is 0
+ if (R_DRAW_PATH_SEGMENT == 0) {
+ if (segment > 0) {
+ gSPVertex(gfx++, prevBaseVtx, 12, 0);
+ gSP2Triangles(gfx++, 0, 7, 1, 0, 0, 6, 7, 0);
+ gSP2Triangles(gfx++, 2, 3, 8, 0, 3, 9, 8, 0);
+ gSP2Triangles(gfx++, 4, 11, 10, 0, 4, 5, 11, 0);
+ }
+ } else {
+ if ((segment > 0) && (segment == R_DRAW_PATH_SEGMENT)) {
+ gSPVertex(gfx++, prevBaseVtx, 12, 0);
+ gSP2Triangles(gfx++, 0, 7, 1, 0, 0, 6, 7, 0);
+ gSP2Triangles(gfx++, 2, 3, 8, 0, 3, 9, 8, 0);
+ gSP2Triangles(gfx++, 4, 11, 10, 0, 4, 5, 11, 0);
+ }
+ }
+ }
+
+ gSPEndDisplayList(gfx++);
+ } else {
+ // No path, trivial displaylist
+ gfx = gfxHead = GRAPH_ALLOC(gfxCtx, sizeof(Gfx));
+ gSPEndDisplayList(gfx++);
+ }
+ return gfxHead;
+}
diff --git a/src/code/z_debug_mode.c b/src/code/z_debug_mode.c
index 0682b3693..a40bd29bd 100644
--- a/src/code/z_debug_mode.c
+++ b/src/code/z_debug_mode.c
@@ -1,13 +1,160 @@
+#include "z64debug_text.h"
#include "global.h"
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_debug_mode/func_800E9C90.s")
+typedef struct {
+ /* 0x0 */ u8 colorIndex;
+ /* 0x1 */ char text[11];
+} DebugTextBufferEntry; // size = 0xC
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_debug_mode/func_800E9CA0.s")
+typedef struct {
+ /* 0x0 */ u8 x;
+ /* 0x1 */ u8 y;
+ /* 0x2 */ u8 colorIndex;
+ /* 0x3 */ char text[41];
+} DebugCamTextBufferEntry; // size = 0x2C
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_debug_mode/func_800E9CFC.s")
+#define DEBUG_TEXT_DRAW_TEXT (1 << 0)
+#define DEBUG_TEXT_DRAW_CAM_TEXT (1 << 1)
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_debug_mode/func_800E9DBC.s")
+s32 sDebugTextDrawFlags = 0;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_debug_mode/func_800E9E94.s")
+DebugTextBufferEntry sDebugTextBuffer[] = {
+ { DEBUG_TEXT_BLACK, " " }, { DEBUG_TEXT_BLACK, " " }, { DEBUG_TEXT_BLACK, " " },
+ { DEBUG_TEXT_BLACK, " " }, { DEBUG_TEXT_BLACK, " " }, { DEBUG_TEXT_BLACK, " " },
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_debug_mode/func_800E9F78.s")
+Color_RGBA8 sDebugTextColors[] = {
+ { 0, 0, 0, 64 }, // DEBUG_TEXT_BLACK
+ { 0, 0, 255, 64 }, // DEBUG_TEXT_BLUE
+ { 255, 0, 0, 64 }, // DEBUG_TEXT_RED
+ { 255, 0, 255, 64 }, // DEBUG_TEXT_PURPLE
+ { 0, 255, 0, 64 }, // DEBUG_TEXT_GREEN
+ { 0, 255, 255, 64 }, // DEBUG_TEXT_CYAN
+ { 255, 255, 0, 64 }, // DEBUG_TEXT_YELLOW
+ { 255, 255, 255, 64 }, // DEBUG_TEXT_WHITE
+};
+
+DebugCamTextBufferEntry sDebugCamTextBuffer[80];
+
+s16 sDebugCamTextEntryCount = 0;
+
+Color_RGBA8 sDebugCamTextColors[] = {
+ { 255, 255, 32, 192 }, // DEBUG_CAM_TEXT_YELLOW
+ { 255, 150, 128, 192 }, // DEBUG_CAM_TEXT_PEACH
+ { 128, 96, 0, 64 }, // DEBUG_CAM_TEXT_BROWN
+ { 192, 128, 16, 128 }, // DEBUG_CAM_TEXT_ORANGE
+ { 255, 192, 32, 128 }, // DEBUG_CAM_TEXT_GOLD
+ { 230, 230, 220, 64 }, // DEBUG_CAM_TEXT_WHITE
+ { 128, 150, 255, 128 }, // DEBUG_CAM_TEXT_BLUE
+ { 128, 255, 32, 128 }, // DEBUG_CAM_TEXT_GREEN
+};
+
+void Debug_ClearTextDrawFlags(void) {
+ sDebugTextDrawFlags = 0;
+}
+
+void Debug_ScreenText(s32 index, s32 colorIndex, const char* text) {
+ DebugTextBufferEntry* entry = &sDebugTextBuffer[index];
+ char* textDest = entry->text;
+
+ sDebugTextDrawFlags |= DEBUG_TEXT_DRAW_TEXT;
+ entry->colorIndex = colorIndex;
+
+ do {
+ *textDest++ = *text;
+ } while (*text++ != '\0');
+}
+
+void Debug_DrawScreenText(GfxPrint* printer) {
+ DebugTextBufferEntry* entry;
+ Color_RGBA8* color;
+ s32 y;
+
+ entry = sDebugTextBuffer;
+ for (y = 20; y < 20 + ARRAY_COUNT(sDebugTextBuffer); y++) {
+ GfxPrint_SetPos(printer, 26, y);
+ color = &sDebugTextColors[entry->colorIndex];
+ GfxPrint_SetColor(printer, color->r, color->g, color->b, color->a);
+ GfxPrint_Printf(printer, "%s", entry->text);
+ *entry->text = '\0';
+ entry++;
+ }
+}
+
+void DebugCamera_ScreenText(u8 x, u8 y, u8 colorIndex, const char* text) {
+ DebugCamTextBufferEntry* entry = &sDebugCamTextBuffer[sDebugCamTextEntryCount];
+ char* textDest;
+ s16 charCount;
+
+ sDebugTextDrawFlags |= DEBUG_TEXT_DRAW_CAM_TEXT;
+ if (sDebugCamTextEntryCount < ARRAY_COUNT(sDebugCamTextBuffer)) {
+ entry->x = x;
+ entry->y = y;
+ entry->colorIndex = colorIndex;
+
+ // Copy text into the entry, truncating if needed
+ charCount = 0;
+ textDest = entry->text;
+
+ while ((*textDest++ = *text++) != '\0') {
+ if (charCount++ >= ARRAY_COUNT(entry->text)) {
+ break;
+ }
+ }
+
+ *textDest = '\0';
+
+ sDebugCamTextEntryCount++;
+ }
+}
+
+void DebugCamera_DrawScreenText(GfxPrint* printer) {
+ DebugCamTextBufferEntry* entry;
+ Color_RGBA8* color;
+ s32 i;
+
+ for (i = 0; i < sDebugCamTextEntryCount; i++) {
+ entry = &sDebugCamTextBuffer[i];
+ color = &sDebugCamTextColors[entry->colorIndex];
+
+ GfxPrint_SetColor(printer, color->r, color->g, color->b, color->a);
+ GfxPrint_SetPos(printer, entry->x, entry->y);
+ GfxPrint_Printf(printer, "%s", entry->text);
+ }
+}
+
+void Debug_DrawText(GraphicsContext* gfxCtx) {
+ Gfx* gfx;
+ Gfx* gfxHead;
+ GfxPrint printer;
+
+ if (THGA_GetRemaining(&gfxCtx->polyOpa) >= 0x2800) {
+ GfxPrint_Init(&printer);
+
+ OPEN_DISPS(gfxCtx);
+
+ gfxHead = POLY_OPA_DISP;
+ gfx = Graph_GfxPlusOne(gfxHead);
+ gSPDisplayList(DEBUG_DISP++, gfx);
+
+ GfxPrint_Open(&printer, gfx);
+
+ if (sDebugTextDrawFlags & DEBUG_TEXT_DRAW_CAM_TEXT) {
+ DebugCamera_DrawScreenText(&printer);
+ }
+ sDebugCamTextEntryCount = 0;
+
+ if (sDebugTextDrawFlags & DEBUG_TEXT_DRAW_TEXT) {
+ Debug_DrawScreenText(&printer);
+ }
+
+ gfx = GfxPrint_Close(&printer);
+ gSPEndDisplayList(gfx++);
+ Graph_BranchDlist(gfxHead, gfx);
+ POLY_OPA_DISP = gfx;
+
+ CLOSE_DISPS(gfxCtx);
+
+ GfxPrint_Destroy(&printer);
+ }
+}
diff --git a/src/code/z_demo.c b/src/code/z_demo.c
index 1fa041be1..79270adce 100644
--- a/src/code/z_demo.c
+++ b/src/code/z_demo.c
@@ -1,171 +1,177 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
#include "z64quake.h"
#include "z64rumble.h"
#include "z64shrink_window.h"
#include "overlays/gamestates/ovl_daytelop/z_daytelop.h"
-void Cutscene_DoNothing(PlayState* play, CutsceneContext* csCtx);
-void func_800EA258(PlayState* play, CutsceneContext* csCtx);
-void func_800ED9C4(PlayState* play, CutsceneContext* csCtx);
-void func_800EA2B8(PlayState* play, CutsceneContext* csCtx);
-void func_800ED980(PlayState* play, CutsceneContext* csCtx);
-void func_800EDA04(PlayState* play, CutsceneContext* csCtx);
-void func_800EDA84(PlayState* play, CutsceneContext* csCtx);
+void CutsceneHandler_DoNothing(PlayState* play, CutsceneContext* csCtx);
+void CutsceneHandler_StartManual(PlayState* play, CutsceneContext* csCtx);
+void CutsceneHandler_StopManual(PlayState* play, CutsceneContext* csCtx);
+void CutsceneHandler_StartScript(PlayState* play, CutsceneContext* csCtx);
+void CutsceneHandler_RunScript(PlayState* play, CutsceneContext* csCtx);
+void CutsceneHandler_StopScript(PlayState* play, CutsceneContext* csCtx);
+void Cutscene_SetupScripted(PlayState* play, CutsceneContext* csCtx);
// Unused
UNK_TYPE4 D_801BB120 = 0;
-u16 D_801BB124 = 0;
-u16 D_801BB128 = 0;
-u8 D_801BB12C = 0;
+u16 sCurTextId = 0;
+u16 sCurOcarinaAction = 0;
+u8 gOpeningEntranceIndex = 0;
u8 sCutsceneStoredPlayerForm = 0;
// bss
#ifndef NON_MATCHING
-static u16 seqId;
+static u16 sSeqId;
#endif
s16 sCutsceneQuakeIndex;
-DbCameraUnkStruct sCutsceneCameraInfo;
-u16 D_801F4DC8[10];
+CutsceneCamera sCutsceneCameraInfo;
+u16 sCueTypeList[10];
UNK_TYPE D_801F4DDC;
-u8 D_801F4DE0;
-s16 D_801F4DE2;
+u8 gDisablePlayerCsModeStartPos;
+s16 gDungeonBossWarpSceneId;
-void Cutscene_Init(PlayState* play, CutsceneContext* csCtx) {
+void Cutscene_InitContext(PlayState* play, CutsceneContext* csCtx) {
s32 i;
- csCtx->state = CS_STATE_0;
- csCtx->frames = 0;
- csCtx->unk_0C = 0.0f;
- play->csCtx.sceneCsCount = 0;
- play->csCtx.currentCsIndex = 0;
+ csCtx->state = CS_STATE_IDLE;
+ csCtx->curFrame = 0;
+ csCtx->timer = 0.0f;
+ play->csCtx.scriptListCount = 0;
+ play->csCtx.scriptIndex = 0;
- for (i = 0; i < ARRAY_COUNT(D_801F4DC8); i++) {
- D_801F4DC8[i] = 0;
+ for (i = 0; i < ARRAY_COUNT(sCueTypeList); i++) {
+ sCueTypeList[i] = 0;
}
- D_801F4DE0 = 0;
+ gDisablePlayerCsModeStartPos = 0;
Audio_SetCutsceneFlag(false);
}
-void Cutscene_Start(PlayState* play, CutsceneContext* csCtx) {
- csCtx->state = CS_STATE_1;
- csCtx->playerAction = NULL;
+void Cutscene_StartManual(PlayState* play, CutsceneContext* csCtx) {
+ csCtx->state = CS_STATE_START;
+ csCtx->playerCue = NULL;
}
-void Cutscene_End(PlayState* play, CutsceneContext* csCtx) {
- if (csCtx->state != CS_STATE_4) {
- csCtx->state = CS_STATE_3;
+void Cutscene_StopManual(PlayState* play, CutsceneContext* csCtx) {
+ if (csCtx->state != CS_STATE_RUN_UNSTOPPABLE) {
+ csCtx->state = CS_STATE_STOP;
}
}
-typedef void (*CutsceneStateHandler)(PlayState* play, CutsceneContext* csCtx);
+typedef void (*CutsceneHandler)(PlayState* play, CutsceneContext* csCtx);
-CutsceneStateHandler sCsStateHandlers1[] = {
- Cutscene_DoNothing, // CS_STATE_0
- func_800EA258, // CS_STATE_1
- Cutscene_DoNothing, // CS_STATE_2
- func_800ED9C4, // CS_STATE_3
- Cutscene_DoNothing, // CS_STATE_4
+CutsceneHandler sManualCutsceneHandlers[] = {
+ CutsceneHandler_DoNothing, // CS_STATE_IDLE
+ CutsceneHandler_StartManual, // CS_STATE_START
+ CutsceneHandler_DoNothing, // CS_STATE_RUN
+ CutsceneHandler_StopManual, // CS_STATE_STOP
+ CutsceneHandler_DoNothing, // CS_STATE_RUN_UNSTOPPABLE
};
-void Cutscene_Update1(PlayState* play, CutsceneContext* csCtx) {
- if (gSaveContext.save.cutscene < 0xFFF0) {
- sCsStateHandlers1[csCtx->state](play, csCtx);
+void Cutscene_UpdateManual(PlayState* play, CutsceneContext* csCtx) {
+ if (gSaveContext.save.cutsceneIndex < 0xFFF0) {
+ sManualCutsceneHandlers[csCtx->state](play, csCtx);
}
}
-CutsceneStateHandler sCsStateHandlers2[] = {
- Cutscene_DoNothing, // CS_STATE_0
- func_800EA2B8, // CS_STATE_1
- func_800ED980, // CS_STATE_2
- func_800EDA04, // CS_STATE_3
- func_800ED980, // CS_STATE_4
+CutsceneHandler sScriptedCutsceneHandlers[] = {
+ CutsceneHandler_DoNothing, // CS_STATE_IDLE
+ CutsceneHandler_StartScript, // CS_STATE_START
+ CutsceneHandler_RunScript, // CS_STATE_RUN
+ CutsceneHandler_StopScript, // CS_STATE_STOP
+ CutsceneHandler_RunScript, // CS_STATE_RUN_UNSTOPPABLE
};
-void Cutscene_Update2(PlayState* play, CutsceneContext* csCtx) {
+void Cutscene_UpdateScripted(PlayState* play, CutsceneContext* csCtx) {
if ((gSaveContext.cutsceneTrigger != 0) && (play->transitionTrigger == TRANS_TRIGGER_START)) {
gSaveContext.cutsceneTrigger = 0;
}
- if ((gSaveContext.cutsceneTrigger != 0) && (csCtx->state == CS_STATE_0)) {
- gSaveContext.save.cutscene = 0xFFFD;
+ if ((gSaveContext.cutsceneTrigger != 0) && (csCtx->state == CS_STATE_IDLE)) {
+ gSaveContext.save.cutsceneIndex = 0xFFFD;
gSaveContext.cutsceneTrigger = 1;
}
- if (gSaveContext.save.cutscene >= 0xFFF0) {
- func_800EDA84(play, csCtx);
- sCsStateHandlers2[csCtx->state](play, csCtx);
+ if (gSaveContext.save.cutsceneIndex >= 0xFFF0) {
+ Cutscene_SetupScripted(play, csCtx);
+ sScriptedCutsceneHandlers[csCtx->state](play, csCtx);
}
}
-void Cutscene_DoNothing(PlayState* play, CutsceneContext* csCtx) {
+void CutsceneHandler_DoNothing(PlayState* play, CutsceneContext* csCtx) {
}
-s32 func_800EA220(PlayState* play, CutsceneContext* csCtx, f32 target) {
- return Math_StepToF(&csCtx->unk_0C, target, 0.1f);
+s32 Cutscene_StepTimer(PlayState* play, CutsceneContext* csCtx, f32 target) {
+ return Math_StepToF(&csCtx->timer, target, 0.1f);
}
-void func_800EA258(PlayState* play, CutsceneContext* csCtx) {
+void CutsceneHandler_StartManual(PlayState* play, CutsceneContext* csCtx) {
Interface_SetHudVisibility(HUD_VISIBILITY_NONE);
ShrinkWindow_Letterbox_SetSizeTarget(32);
- if (func_800EA220(play, csCtx, 1.0f)) {
+
+ if (Cutscene_StepTimer(play, csCtx, 1.0f)) {
Audio_SetCutsceneFlag(true);
- csCtx->state++;
+ csCtx->state++; // CS_STATE_RUN
}
}
-void func_800EA2B8(PlayState* play, CutsceneContext* csCtx) {
- func_800ED980(play, csCtx);
+void CutsceneHandler_StartScript(PlayState* play, CutsceneContext* csCtx) {
+ CutsceneHandler_RunScript(play, csCtx);
Interface_SetHudVisibility(HUD_VISIBILITY_NONE);
ShrinkWindow_Letterbox_SetSizeTarget(32);
- if (func_800EA220(play, csCtx, 1.0f)) {
+
+ if (Cutscene_StepTimer(play, csCtx, 1.0f)) {
Audio_SetCutsceneFlag(true);
- csCtx->state++;
+ csCtx->state++; // CS_STATE_RUN
}
}
/* Start of command handling section */
-// Command 0x96: Miscellaneous commands.
-void Cutscene_Command_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) {
+void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
static u16 D_801BB15C = 0xFFFF;
Player* player = GET_PLAYER(play);
- f32 progress;
- u8 isStartFrame = false;
+ f32 lerp;
+ u8 isFirstFrame = false;
SceneTableEntry* loadedScene;
- if ((csCtx->frames < cmd->startFrame) || ((csCtx->frames >= cmd->endFrame) && (cmd->endFrame != cmd->startFrame))) {
+ if (!((csCtx->curFrame >= cmd->startFrame) &&
+ ((csCtx->curFrame < cmd->endFrame) || (cmd->endFrame == cmd->startFrame)))) {
return;
}
- progress = Environment_LerpWeight(cmd->endFrame - 1, cmd->startFrame, csCtx->frames);
- if (csCtx->frames == cmd->startFrame) {
- isStartFrame = true;
+ lerp = Environment_LerpWeight(cmd->endFrame - 1, cmd->startFrame, csCtx->curFrame);
+
+ if (csCtx->curFrame == cmd->startFrame) {
+ isFirstFrame = true;
}
- // TODO: consider creating an enum for this when we understand what each value does
- switch (cmd->base) {
- case 0x1:
- if (isStartFrame) {
+ switch (cmd->type) {
+ case CS_MISC_RAIN:
+ if (isFirstFrame) {
func_800FD78C(play);
- play->envCtx.unk_F2[0] = 0x3C;
+ play->envCtx.unk_F2[0] = 60;
}
break;
- case 0x2:
- if (isStartFrame) {
+
+ case CS_MISC_LIGHTNING:
+ if (isFirstFrame) {
Audio_SetAmbienceChannelIO(AMBIENCE_CHANNEL_LIGHTNING, CHANNEL_IO_PORT_0, 0);
Environment_AddLightningBolts(play, 3);
D_801F4E68 = 1;
}
break;
- case 0x3:
- if (play->envCtx.lightSettings.fogFar < 12800) {
- play->envCtx.lightSettings.fogFar += 35;
+
+ case CS_MISC_LIFT_FOG:
+ if (play->envCtx.lightSettings.zFar < 12800) {
+ play->envCtx.lightSettings.zFar += 35;
}
break;
- case 0x4:
- if (isStartFrame) {
+
+ case CS_MISC_CLOUDY_SKY:
+ if (isFirstFrame) {
play->envCtx.unk_19 = 1;
play->envCtx.unk_17 = 1;
play->envCtx.unk_18 = 0;
@@ -177,49 +183,57 @@ void Cutscene_Command_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdBase* c
play->envCtx.unk_22 = play->envCtx.unk_24;
}
break;
- case 0x5:
- if (isStartFrame && (csCtx->state != CS_STATE_4)) {
- csCtx->state = CS_STATE_3;
+
+ case CS_MISC_STOP_CUTSCENE:
+ if (isFirstFrame && (csCtx->state != CS_STATE_RUN_UNSTOPPABLE)) {
+ csCtx->state = CS_STATE_STOP;
}
break;
- case 0x7:
- if (isStartFrame) {
+
+ case CS_MISC_SHOW_TITLE_CARD:
+ if (isFirstFrame) {
loadedScene = play->loadedScene;
if (loadedScene->titleTextId != 0) {
func_80151A68(play, loadedScene->titleTextId);
}
}
break;
- case 0x8:
+
+ case CS_MISC_EARTHQUAKE_MEDIUM:
func_8019F128(NA_SE_EV_EARTHQUAKE_LAST - SFX_FLAG);
- if (isStartFrame) {
+ if (isFirstFrame) {
sCutsceneQuakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_6);
Quake_SetSpeed(sCutsceneQuakeIndex, 22000);
Quake_SetQuakeValues(sCutsceneQuakeIndex, 6, 4, 0, 0);
Quake_SetCountdown(sCutsceneQuakeIndex, 800);
}
break;
- case 0x9:
- if (isStartFrame) {
+
+ case CS_MISC_EARTHQUAKE_STOP:
+ if (isFirstFrame) {
Quake_Init();
}
break;
- case 0xA:
- D_801F6D30.r = 255;
- D_801F6D30.g = 255;
- D_801F6D30.b = 255;
- D_801F6D30.a = 255 * progress;
+
+ case CS_MISC_VISMONO_BLACK_AND_WHITE:
+ gVisMonoColor.r = 255;
+ gVisMonoColor.g = 255;
+ gVisMonoColor.b = 255;
+ gVisMonoColor.a = 255 * lerp;
break;
- case 0xB:
- D_801F6D30.r = 255;
- D_801F6D30.g = 180;
- D_801F6D30.b = 100;
- D_801F6D30.a = 255 * progress;
+
+ case CS_MISC_VISMONO_SEPIA:
+ gVisMonoColor.r = 255;
+ gVisMonoColor.g = 180;
+ gVisMonoColor.b = 100;
+ gVisMonoColor.a = 255 * lerp;
break;
- case 0xC:
+
+ case CS_MISC_HIDE_ROOM:
play->roomCtx.curRoom.segment = NULL;
break;
- case 0xD:
+
+ case CS_MISC_RED_PULSATING_LIGHTS:
if (play->state.frames & 8) {
if (play->envCtx.lightSettings.ambientColor[0] < 40) {
play->envCtx.lightSettings.ambientColor[0] += 2;
@@ -234,107 +248,130 @@ void Cutscene_Command_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdBase* c
}
}
break;
- case 0xE:
- play->unk_18845 = 1;
+
+ case CS_MISC_HALT_ALL_ACTORS:
+ play->haltAllActors = true;
break;
- case 0xF:
- play->unk_18845 = 0;
+
+ case CS_MISC_RESUME_ALL_ACTORS:
+ play->haltAllActors = false;
break;
- case 0x10:
- if (isStartFrame) {
+
+ case CS_MISC_SANDSTORM_FILL:
+ if (isFirstFrame) {
play->envCtx.sandstormState = 1;
}
func_8019F128(NA_SE_EV_SAND_STORM - SFX_FLAG);
break;
- case 0x11:
+
+ case CS_MISC_SUNSSONG_START:
gSaveContext.sunsSongState = SUNSSONG_START;
break;
- case 0x12:
+
+ case CS_MISC_FREEZE_TIME:
if (!gSaveContext.save.isNight) {
- gSaveContext.save.time = ((void)0, gSaveContext.save.time) - (u16)REG(15);
+ gSaveContext.save.time = ((void)0, gSaveContext.save.time) - (u16)R_TIME_SPEED;
} else {
- gSaveContext.save.time = ((void)0, gSaveContext.save.time) - (u16)(2 * REG(15));
+ gSaveContext.save.time = ((void)0, gSaveContext.save.time) - (u16)(2 * R_TIME_SPEED);
}
break;
- case 0x13:
- AudioOcarina_PlayLongScarecrowAfterCredits();
- csCtx->frames = cmd->startFrame - 1;
+
+ case CS_MISC_LONG_SCARECROW_SONG:
+ AudioOcarina_PlayLongScarecrowSong();
+ csCtx->curFrame = cmd->startFrame - 1; // the cutscene runs forever
break;
- case 0x14:
- EnvFlags_Set(play, 3);
+
+ case CS_MISC_SET_CSFLAG_3:
+ CutsceneFlags_Set(play, 3);
break;
- case 0x15:
- EnvFlags_Set(play, 4);
+
+ case CS_MISC_SET_CSFLAG_4:
+ CutsceneFlags_Set(play, 4);
break;
- case 0x16:
+
+ case CS_MISC_PLAYER_FORM_DEKU:
gSaveContext.save.playerForm = PLAYER_FORM_DEKU;
break;
- case 0x17:
- player->stateFlags2 |= 0x4000000;
+
+ case CS_MISC_ENABLE_PLAYER_REFLECTION:
+ player->stateFlags2 |= PLAYER_STATE2_4000000;
break;
- case 0x18:
- player->stateFlags2 &= ~0x4000000;
+
+ case CS_MISC_DISABLE_PLAYER_REFLECTION:
+ player->stateFlags2 &= ~PLAYER_STATE2_4000000;
break;
- case 0x19:
+
+ case CS_MISC_PLAYER_FORM_HUMAN:
sCutsceneStoredPlayerForm = gSaveContext.save.playerForm;
gSaveContext.save.playerForm = PLAYER_FORM_HUMAN;
gSaveContext.save.equippedMask = PLAYER_MASK_NONE;
break;
- case 0x1A:
+
+ case CS_MISC_EARTHQUAKE_STRONG:
func_8019F128(NA_SE_EV_EARTHQUAKE_LAST2 - SFX_FLAG);
- if (isStartFrame) {
+ if (isFirstFrame) {
sCutsceneQuakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_6);
Quake_SetSpeed(sCutsceneQuakeIndex, 30000);
Quake_SetQuakeValues(sCutsceneQuakeIndex, 20, 10, 0, 0);
Quake_SetCountdown(sCutsceneQuakeIndex, 800);
}
break;
- case 0x1B:
- if (isStartFrame) {
+
+ case CS_MISC_DEST_MOON_CRASH_FIRE_WALL:
+ if (isFirstFrame) {
play->nextEntrance = ENTRANCE(CUTSCENE, 0);
gSaveContext.nextCutsceneIndex = 0xFFF8;
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_03;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
}
break;
- case 0x1C:
- if (isStartFrame) {
+
+ case CS_MISC_MOON_CRASH_SKYBOX:
+ if (isFirstFrame) {
+ // skyboxConfig
play->envCtx.unk_17 = 0xD;
}
break;
- case 0x1D:
+
+ case CS_MISC_PLAYER_FORM_RESTORED:
gSaveContext.save.playerForm = sCutsceneStoredPlayerForm;
break;
- case 0x1E:
- D_801F4DE0 = true;
+
+ case CS_MISC_DISABLE_PLAYER_CSMODE_START_POS:
+ gDisablePlayerCsModeStartPos = true;
break;
- case 0x1F:
- D_801F4DE0 = false;
+
+ case CS_MISC_ENABLE_PLAYER_CSMODE_START_POS:
+ gDisablePlayerCsModeStartPos = false;
break;
- case 0x21:
- if (isStartFrame) {
+
+ case CS_MISC_SAVE_ENTER_CLOCK_TOWN:
+ if (isFirstFrame) {
Sram_SaveSpecialEnterClockTown(play);
}
break;
- case 0x22:
- if (isStartFrame) {
- func_80144A94(&play->sramCtx);
+
+ case CS_MISC_RESET_SAVE_FROM_MOON_CRASH:
+ if (isFirstFrame) {
+ Sram_ResetSaveFromMoonCrash(&play->sramCtx);
}
break;
- case 0x23:
- if (csCtx->frames != D_801BB15C) {
- D_801BB15C = csCtx->frames;
- if (REG(15) != 0) {
- gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)REG(15);
+ case CS_MISC_TIME_ADVANCE:
+ if (csCtx->curFrame != D_801BB15C) {
+ D_801BB15C = csCtx->curFrame;
+
+ if (R_TIME_SPEED != 0) {
+ gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)R_TIME_SPEED;
gSaveContext.save.time =
- ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.daySpeed);
+ ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.timeSpeedOffset);
}
}
break;
- case 0x24:
+
+ case CS_MISC_EARTHQUAKE_WEAK:
func_8019F128(NA_SE_EV_EARTHQUAKE_LAST - SFX_FLAG);
- if (isStartFrame) {
+ if (isFirstFrame) {
sCutsceneQuakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_6);
Quake_SetSpeed(sCutsceneQuakeIndex, 22000);
Quake_SetQuakeValues(sCutsceneQuakeIndex, 2, 1, 0, 0);
@@ -342,10 +379,8 @@ void Cutscene_Command_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdBase* c
}
break;
- case 0x26:
- // Seems to be used to trigger "Dawn of A New Day"
-
- gSaveContext.save.day = 9;
+ case CS_MISC_DAWN_OF_A_NEW_DAY:
+ gSaveContext.save.day = 9; // 9 % 5 is day number 4, see `CURRENT_DAY`
STOP_GAMESTATE(&play->state);
SET_NEXT_GAMESTATE(&play->state, DayTelop_Init, sizeof(DayTelopState));
@@ -353,21 +388,23 @@ void Cutscene_Command_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdBase* c
Sram_SaveSpecialNewDay(play);
break;
- case 0x27:
+ case CS_MISC_PLAYER_FORM_ZORA:
gSaveContext.save.playerForm = PLAYER_FORM_ZORA;
break;
- case 0x28:
- csCtx->frames = cmd->startFrame - 1;
+ case CS_MISC_FINALE:
+ csCtx->curFrame = cmd->startFrame - 1; // the cutscene runs forever
+ break;
+
+ default:
break;
}
}
-// Command 0x97: Set Environment Lighting
-void Cutscene_Command_SetLighting(PlayState* play, CutsceneContext* csCtx, CsCmdEnvLighting* cmd) {
- if (csCtx->frames == cmd->startFrame) {
- if (cmd->setting != 0x20) {
- play->envCtx.lightSettingOverride = cmd->setting - 1;
+void CutsceneCmd_SetLightSetting(PlayState* play, CutsceneContext* csCtx, CsCmdLightSetting* cmd) {
+ if (csCtx->curFrame == cmd->startFrame) {
+ if (cmd->settingPlusOne != 32) {
+ play->envCtx.lightSettingOverride = cmd->settingPlusOne - 1;
play->envCtx.lightBlend = 1.0f;
} else {
play->envCtx.lightSettingOverride = 0xFF;
@@ -375,51 +412,45 @@ void Cutscene_Command_SetLighting(PlayState* play, CutsceneContext* csCtx, CsCmd
}
}
-// Command 0x12C: Plays a sequence (Background music or Fanfare)
-void Cutscene_Command_PlaySequence(PlayState* play, CutsceneContext* csCtx, CsCmdSequenceChange* cmd) {
- if (csCtx->frames == cmd->startFrame) {
- Audio_PlaySequenceInCutscene(cmd->sequence - 1);
+void CutsceneCmd_StartSequence(PlayState* play, CutsceneContext* csCtx, CsCmdStartSeq* cmd) {
+ if (csCtx->curFrame == cmd->startFrame) {
+ Audio_PlaySequenceInCutscene(cmd->seqIdPlusOne - 1);
}
}
-// Command 0x12D: Stops a sequence (Background music or Fanfare)
-void Cutscene_Command_StopSequence(PlayState* play, CutsceneContext* csCtx, CsCmdSequenceChange* cmd) {
- if ((csCtx->frames >= cmd->startFrame) && (cmd->endFrame >= csCtx->frames)) {
- Audio_StopSequenceInCutscene(cmd->sequence - 1);
+void CutsceneCmd_StopSequence(PlayState* play, CutsceneContext* csCtx, CsCmdStopSeq* cmd) {
+ if ((csCtx->curFrame >= cmd->startFrame) && (csCtx->curFrame <= cmd->endFrame)) {
+ Audio_StopSequenceInCutscene(cmd->seqIdPlusOne - 1);
}
}
-// Command 0x9C: Fade a sequence (Background music or Fanfare) over duration
-void Cutscene_Command_FadeSequence(PlayState* play, CutsceneContext* csCtx, CsCmdSequenceFade* cmd) {
- if ((csCtx->frames == cmd->startFrame) && (csCtx->frames < cmd->endFrame)) {
- u8 fadeTimer = cmd->endFrame - cmd->startFrame;
+void CutsceneCmd_FadeOutSequence(PlayState* play, CutsceneContext* csCtx, CsCmdFadeOutSeq* cmd) {
+ if ((csCtx->curFrame == cmd->startFrame) && (csCtx->curFrame < cmd->endFrame)) {
+ u8 fadeOutDuration = cmd->endFrame - cmd->startFrame;
- if (cmd->type == 2) {
- Audio_QueueSeqCmd((fadeTimer << 0x10) | 0x110000FF);
- } else {
- Audio_QueueSeqCmd((fadeTimer << 0x10) | NA_BGM_STOP);
+ if (cmd->seqPlayer == CS_FADE_OUT_FANFARE) {
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, fadeOutDuration);
+ } else { // CS_FADE_OUT_BGM_MAIN
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, fadeOutDuration);
}
}
}
-// Command 0x12E: Play Ambience sequence
-void Cutscene_Command_PlayAmbienceSequence(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) {
- if (csCtx->frames == cmd->startFrame) {
+void CutsceneCmd_StartAmbience(PlayState* play, CutsceneContext* csCtx, CsCmdStartAmbience* cmd) {
+ if (csCtx->curFrame == cmd->startFrame) {
Audio_PlayAmbience(play->sequenceCtx.ambienceId);
}
}
-// Command 0x130:
-void func_800EAD48(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) {
- if (csCtx->frames == cmd->startFrame) {
+void Cutscene_SetSfxReverbIndexTo2(PlayState* play, CutsceneContext* csCtx, CsCmdSfxReverbIndexTo2* cmd) {
+ if (csCtx->curFrame == cmd->startFrame) {
// Audio_SetSfxReverbIndexExceptOcarinaBank
func_801A4428(2);
}
}
-// Command 0x131:
-void func_800EAD7C(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) {
- if (csCtx->frames == cmd->startFrame) {
+void Cutscene_SetSfxReverbIndexTo1(PlayState* play, CutsceneContext* csCtx, CsCmdSfxReverbIndexTo1* cmd) {
+ if (csCtx->curFrame == cmd->startFrame) {
// Audio_SetSfxReverbIndexExceptOcarinaBank
func_801A4428(1);
}
@@ -427,107 +458,103 @@ void func_800EAD7C(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) {
#ifdef NON_MATCHING
// needs in-function static bss
-// audio related
-void func_800EADB0(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) {
- static u16 seqId;
+void CutsceneCmd_ModifySequence(PlayState* play, CutsceneContext* csCtx, CsCmdModifySeq* cmd) {
+ static u16 sSeqId;
u8 dayMinusOne;
- if (csCtx->frames == cmd->startFrame) {
- dayMinusOne = (gSaveContext.save.day - 1);
+ if (csCtx->curFrame == cmd->startFrame) {
+ dayMinusOne = gSaveContext.save.day - 1;
if (dayMinusOne >= 3) {
dayMinusOne = 0;
}
- switch (cmd->base) {
- case 1:
- // func_801A246C(SEQ_PLAYER_BGM_MAIN, TYPE_1);
+ switch (cmd->type) {
+ case CS_MOD_SEQ_0:
func_801A246C(SEQ_PLAYER_BGM_MAIN, 1);
break;
- case 2:
- // func_801A246C(SEQ_PLAYER_BGM_MAIN, TYPE_0);
+ case CS_MOD_SEQ_1:
func_801A246C(SEQ_PLAYER_BGM_MAIN, 0);
break;
- case 3:
- // func_801A246C(SEQ_PLAYER_BGM_MAIN, TYPE_2);
+ case CS_MOD_SEQ_2:
func_801A246C(SEQ_PLAYER_BGM_MAIN, 2);
break;
- case 4:
- // func_801A246C(SEQ_PLAYER_AMBIENCE, TYPE_1);
+ case CS_MOD_AMBIENCE_0:
func_801A246C(SEQ_PLAYER_AMBIENCE, 1);
break;
- case 5:
- // func_801A246C(SEQ_PLAYER_AMBIENCE, TYPE_0);
+ case CS_MOD_AMBIENCE_1:
func_801A246C(SEQ_PLAYER_AMBIENCE, 0);
break;
- case 6:
- // func_801A246C(SEQ_PLAYER_AMBIENCE, TYPE_2);
+ case CS_MOD_AMBIENCE_2:
func_801A246C(SEQ_PLAYER_AMBIENCE, 2);
break;
- case 7:
- seqId = Audio_GetActiveSequence(SEQ_PLAYER_BGM_MAIN);
+ case CS_MOD_SEQ_STORE:
+ sSeqId = AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN);
break;
- case 8:
- if (seqId != NA_BGM_DISABLED) {
- Audio_PlaySceneSequence(seqId, dayMinusOne);
+ case CS_MOD_SEQ_RESTORE:
+ if (sSeqId != NA_BGM_DISABLED) {
+ Audio_PlaySceneSequence(sSeqId, dayMinusOne);
}
break;
+
+ default:
+ break;
}
}
}
#else
-void func_800EADB0(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_demo/func_800EADB0.s")
+void CutsceneCmd_ModifySequence(PlayState* play, CutsceneContext* csCtx, CsCmdModifySeq* cmd);
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_demo/CutsceneCmd_ModifySequence.s")
#endif
-// Command 0x12F: Fade Ambience sequence
-void Cutscene_Command_FadeAmbienceSequence(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) {
- if (csCtx->frames == cmd->startFrame && csCtx->frames < cmd->endFrame) {
- u8 fadeTimer = cmd->endFrame - cmd->startFrame;
+void CutsceneCmd_FadeOutAmbience(PlayState* play, CutsceneContext* csCtx, CsCmdFadeOutAmbience* cmd) {
+ if ((csCtx->curFrame == cmd->startFrame) && (csCtx->curFrame < cmd->endFrame)) {
+ u8 fadeOutDuration = cmd->endFrame - cmd->startFrame;
- Audio_QueueSeqCmd((fadeTimer << 0x10) | 0x140000FF);
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_AMBIENCE, fadeOutDuration);
}
}
-// Command 0x190: Rumble
-void Cutscene_Command_Rumble(PlayState* play, CutsceneContext* csCtx, CsCmdRumble* cmd) {
+void CutsceneCmd_RumbleController(PlayState* play, CutsceneContext* csCtx, CsCmdRumble* cmd) {
switch (cmd->type) {
- case 1:
- if (csCtx->frames == cmd->startFrame) {
+ case CS_RUMBLE_ONCE:
+ if (csCtx->curFrame == cmd->startFrame) {
Rumble_Request(0.0f, cmd->intensity, cmd->decayTimer, cmd->decayStep);
}
break;
- case 2:
- if ((csCtx->frames >= cmd->startFrame) && (cmd->endFrame >= csCtx->frames)) {
- if ((csCtx->frames == cmd->startFrame) || (play->state.frames % 64 == 0)) {
+ case CS_RUMBLE_PULSE:
+ if ((csCtx->curFrame >= cmd->startFrame) && (csCtx->curFrame <= cmd->endFrame)) {
+ if ((csCtx->curFrame == cmd->startFrame) || (play->state.frames % 64 == 0)) {
Rumble_Request(0.0f, cmd->intensity, cmd->decayTimer, cmd->decayStep);
}
}
break;
+
+ default:
+ break;
}
}
-// Command 0x9B:
-void Cutscene_Command_FadeColorScreen(PlayState* play, CutsceneContext* csCtx, CsCmdFadeScreen* cmd) {
- if ((csCtx->frames >= cmd->startFrame) && (cmd->endFrame >= csCtx->frames)) {
+void CutsceneCmd_TransitionGeneral(PlayState* play, CutsceneContext* csCtx, CsCmdTransitionGeneral* cmd) {
+ if ((csCtx->curFrame >= cmd->startFrame) && (cmd->endFrame >= csCtx->curFrame)) {
f32 alpha;
play->envCtx.fillScreen = true;
- alpha = Environment_LerpWeight(cmd->endFrame, cmd->startFrame, csCtx->frames);
+ alpha = Environment_LerpWeight(cmd->endFrame, cmd->startFrame, csCtx->curFrame);
- if (((cmd->unk0 == 1)) || (cmd->unk0 == 2)) {
+ if (((cmd->type == CS_TRANS_GENERAL_FILL_IN)) || (cmd->type == CS_TRANS_GENERAL_FILL_OUT)) {
play->envCtx.screenFillColor[0] = cmd->color.r;
play->envCtx.screenFillColor[1] = cmd->color.g;
play->envCtx.screenFillColor[2] = cmd->color.b;
- if (cmd->unk0 == 2) {
+ if (cmd->type == CS_TRANS_GENERAL_FILL_OUT) {
play->envCtx.screenFillColor[3] = (1.0f - alpha) * 255.0f;
} else {
play->envCtx.screenFillColor[3] = 255.0f * alpha;
@@ -536,45 +563,47 @@ void Cutscene_Command_FadeColorScreen(PlayState* play, CutsceneContext* csCtx, C
}
}
-// Command 0x9D: Set Time of Day & Environment Time
-void Cutscene_Command_SetTime(PlayState* play, CutsceneContext* csCtx, CsCmdDayTime* cmd) {
- u16 nextTime;
+void CutsceneCmd_SetTime(PlayState* play, CutsceneContext* csCtx, CsCmdTime* cmd) {
u16 hourAsMinutes;
u16 minutes;
- if (csCtx->frames == cmd->startFrame) {
+ if (csCtx->curFrame == cmd->startFrame) {
hourAsMinutes = CLOCK_TIME_ALT_F(cmd->hour, 0);
minutes = CLOCK_TIME_ALT_F(0, cmd->minute + 1);
- nextTime = hourAsMinutes + minutes;
- gSaveContext.save.time = nextTime;
- gSaveContext.skyboxTime = nextTime;
+ gSaveContext.save.time = hourAsMinutes + minutes;
+ gSaveContext.skyboxTime = hourAsMinutes + minutes;
}
}
-void Cutscene_TerminatorImpl(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) {
- csCtx->state = CS_STATE_4;
- func_80165690();
+void CutsceneCmd_DestinationDefault(PlayState* play, CutsceneContext* csCtx, CsCmdDestination* cmd) {
+ csCtx->state = CS_STATE_RUN_UNSTOPPABLE;
+ Play_DisableMotionBlur();
Audio_SetCutsceneFlag(false);
gSaveContext.cutsceneTransitionControl = 1;
- if ((gSaveContext.gameMode != 0) && (csCtx->frames != cmd->startFrame)) {
+ // `hudVisibilityForceButtonAlphasByStatus` has a secondary purpose, which is to signal to the title
+ // screen actor that it should display immediately. This occurs when a title screen cutscene that
+ // is not the main clock town scene is skipped.
+ if ((gSaveContext.gameMode != GAMEMODE_NORMAL) && (csCtx->curFrame != cmd->startFrame)) {
gSaveContext.hudVisibilityForceButtonAlphasByStatus = true;
}
- gSaveContext.save.cutscene = 0;
- if (cmd->base == 1) {
- play->nextEntrance = play->csCtx.sceneCsList[play->csCtx.currentCsIndex].nextEntrance;
+ gSaveContext.save.cutsceneIndex = 0;
+
+ if (cmd->type == CS_DESTINATION_DEFAULT) {
+ play->nextEntrance = play->csCtx.scriptList[play->csCtx.scriptIndex].nextEntrance;
gSaveContext.nextCutsceneIndex = 0;
play->transitionTrigger = TRANS_TRIGGER_START;
- if (gSaveContext.gameMode != 1) {
+
+ if (gSaveContext.gameMode != GAMEMODE_TITLE_SCREEN) {
Scene_SetExitFade(play);
} else {
- D_801BB12C++;
- if (D_801BB12C >= 2) {
- D_801BB12C = 0;
+ gOpeningEntranceIndex++;
+ if (gOpeningEntranceIndex >= 2) {
+ gOpeningEntranceIndex = 0;
}
- play->transitionType = TRANS_TYPE_04;
+ play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
}
if ((play->nextEntrance & 0xF) > 0) {
@@ -585,73 +614,74 @@ void Cutscene_TerminatorImpl(PlayState* play, CutsceneContext* csCtx, CsCmdBase*
}
}
-// Command 0x15E
-void Cutscene_Command_Terminator(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) {
- if (cmd->base == 1) {
- if (csCtx->frames == cmd->startFrame) {
- Cutscene_TerminatorImpl(play, csCtx, cmd);
+void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDestination* cmd) {
+ if (cmd->type == CS_DESTINATION_DEFAULT) {
+ if (csCtx->curFrame == cmd->startFrame) {
+ CutsceneCmd_DestinationDefault(play, csCtx, cmd);
}
- } else if (cmd->base == 2) {
- if (csCtx->frames == cmd->startFrame) {
- func_80165690();
+ } else if (cmd->type == CS_DESTINATION_BOSS_WARP) {
+ if (csCtx->curFrame == cmd->startFrame) {
+ Play_DisableMotionBlur();
- switch (D_801F4DE2) {
- case 0x1F:
- if (gSaveContext.save.weekEventReg[20] & 2) {
+ switch (gDungeonBossWarpSceneId) {
+ case SCENE_MITURIN_BS:
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) {
play->nextEntrance = ENTRANCE(WOODFALL_TEMPLE, 1);
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_03;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
} else {
play->nextEntrance = ENTRANCE(WOODFALL, 0);
gSaveContext.nextCutsceneIndex = 0xFFF0;
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_03;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
}
break;
- case 0x44:
- if (gSaveContext.save.weekEventReg[33] & 0x80) {
+ case SCENE_HAKUGIN_BS:
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) {
play->nextEntrance = ENTRANCE(MOUNTAIN_VILLAGE_SPRING, 7);
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_03;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
} else {
play->nextEntrance = ENTRANCE(MOUNTAIN_VILLAGE_SPRING, 0);
gSaveContext.nextCutsceneIndex = 0xFFF0;
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_03;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
}
break;
- case 0x5F:
- gSaveContext.save.weekEventReg[55] |= 0x80;
+ case SCENE_SEA_BS:
+ SET_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE);
play->nextEntrance = ENTRANCE(ZORA_CAPE, 8);
gSaveContext.nextCutsceneIndex = 0xFFF0;
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_03;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
break;
- case 0x36:
- gSaveContext.save.weekEventReg[52] |= 0x20;
+ case SCENE_INISIE_BS:
+ SET_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE);
play->nextEntrance = ENTRANCE(IKANA_CANYON, 0);
gSaveContext.nextCutsceneIndex = 0xFFF1;
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_03;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
+ break;
+
+ default:
break;
}
}
}
}
-// Command 0x15F: Chooses between a cutscene or a rotating mask depending on whether the player has the corresponding
-// mask
-void Cutscene_Command_ChooseCreditsScenes(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) {
- if ((csCtx->frames >= cmd->startFrame) && (func_801A3950(SEQ_PLAYER_BGM_MAIN, true) != 0xFF)) {
- switch (cmd->base) {
- case 1:
- Cutscene_TerminatorImpl(play, csCtx, cmd);
+// Chooses between a cutscene or a rotating mask depending on whether the player has the corresponding mask
+void CutsceneCmd_ChooseCreditsScenes(PlayState* play, CutsceneContext* csCtx, CsCmdChooseCreditsScene* cmd) {
+ if ((csCtx->curFrame >= cmd->startFrame) && (func_801A3950(SEQ_PLAYER_BGM_MAIN, true) != 0xFF)) {
+ switch (cmd->type) {
+ case CS_CREDITS_DESTINATION:
+ CutsceneCmd_DestinationDefault(play, csCtx, (CsCmdDestination*)cmd);
break;
- case 2:
+ case CS_CREDITS_MASK_KAMARO:
if (INV_CONTENT(ITEM_MASK_KAMARO) == ITEM_MASK_KAMARO) {
play->nextEntrance = ENTRANCE(MILK_BAR, 0);
gSaveContext.nextCutsceneIndex = 0xFFF0;
@@ -662,7 +692,7 @@ void Cutscene_Command_ChooseCreditsScenes(PlayState* play, CutsceneContext* csCt
play->transitionTrigger = TRANS_TRIGGER_START;
break;
- case 3:
+ case CS_CREDITS_MASK_GREAT_FAIRY:
if (INV_CONTENT(ITEM_MASK_GREAT_FAIRY) == ITEM_MASK_GREAT_FAIRY) {
play->nextEntrance = ENTRANCE(FAIRY_FOUNTAIN, 0);
gSaveContext.nextCutsceneIndex = 0xFFF0;
@@ -673,7 +703,7 @@ void Cutscene_Command_ChooseCreditsScenes(PlayState* play, CutsceneContext* csCt
play->transitionTrigger = TRANS_TRIGGER_START;
break;
- case 4:
+ case CS_CREDITS_MASK_ROMANI:
if (INV_CONTENT(ITEM_MASK_ROMANI) == ITEM_MASK_ROMANI) {
play->nextEntrance = ENTRANCE(ROMANI_RANCH, 0);
gSaveContext.nextCutsceneIndex = 0xFFF1;
@@ -684,7 +714,7 @@ void Cutscene_Command_ChooseCreditsScenes(PlayState* play, CutsceneContext* csCt
play->transitionTrigger = TRANS_TRIGGER_START;
break;
- case 5:
+ case CS_CREDITS_MASK_BLAST:
if (INV_CONTENT(ITEM_MASK_BLAST) == ITEM_MASK_BLAST) {
play->nextEntrance = ENTRANCE(WEST_CLOCK_TOWN, 0);
gSaveContext.nextCutsceneIndex = 0xFFF0;
@@ -695,7 +725,7 @@ void Cutscene_Command_ChooseCreditsScenes(PlayState* play, CutsceneContext* csCt
play->transitionTrigger = TRANS_TRIGGER_START;
break;
- case 6:
+ case CS_CREDITS_MASK_CIRCUS_LEADER:
if (INV_CONTENT(ITEM_MASK_CIRCUS_LEADER) == ITEM_MASK_CIRCUS_LEADER) {
play->nextEntrance = ENTRANCE(MILK_BAR, 0);
gSaveContext.nextCutsceneIndex = 0xFFF1;
@@ -706,7 +736,7 @@ void Cutscene_Command_ChooseCreditsScenes(PlayState* play, CutsceneContext* csCt
play->transitionTrigger = TRANS_TRIGGER_START;
break;
- case 7:
+ case CS_CREDITS_MASK_BREMEN:
if (INV_CONTENT(ITEM_MASK_BREMEN) == ITEM_MASK_BREMEN) {
play->nextEntrance = ENTRANCE(MILK_BAR, 0);
gSaveContext.nextCutsceneIndex = 0xFFF3;
@@ -717,13 +747,13 @@ void Cutscene_Command_ChooseCreditsScenes(PlayState* play, CutsceneContext* csCt
play->transitionTrigger = TRANS_TRIGGER_START;
break;
- case 8:
+ case CS_CREDITS_IKANA:
play->nextEntrance = ENTRANCE(IKANA_CANYON, 0);
gSaveContext.nextCutsceneIndex = 0xFFF3;
play->transitionTrigger = TRANS_TRIGGER_START;
break;
- case 9:
+ case CS_CREDITS_MASK_COUPLE:
if (INV_CONTENT(ITEM_MASK_COUPLE) == ITEM_MASK_COUPLE) {
play->nextEntrance = ENTRANCE(TERMINA_FIELD, 0);
gSaveContext.nextCutsceneIndex = 0xFFF8;
@@ -734,7 +764,7 @@ void Cutscene_Command_ChooseCreditsScenes(PlayState* play, CutsceneContext* csCt
play->transitionTrigger = TRANS_TRIGGER_START;
break;
- case 10:
+ case CS_CREDITS_MASK_BUNNY:
if (INV_CONTENT(ITEM_MASK_BUNNY) == ITEM_MASK_BUNNY) {
play->nextEntrance = ENTRANCE(CUCCO_SHACK, 0);
gSaveContext.nextCutsceneIndex = 0xFFF0;
@@ -745,7 +775,7 @@ void Cutscene_Command_ChooseCreditsScenes(PlayState* play, CutsceneContext* csCt
play->transitionTrigger = TRANS_TRIGGER_START;
break;
- case 11:
+ case CS_CREDITS_MASK_POSTMAN:
if (INV_CONTENT(ITEM_MASK_POSTMAN) == ITEM_MASK_POSTMAN) {
play->nextEntrance = ENTRANCE(TERMINA_FIELD, 1);
gSaveContext.nextCutsceneIndex = 0xFFF8;
@@ -755,35 +785,36 @@ void Cutscene_Command_ChooseCreditsScenes(PlayState* play, CutsceneContext* csCt
}
play->transitionTrigger = TRANS_TRIGGER_START;
break;
+
+ default:
+ break;
}
}
}
-// Command 0x99: Motion blur
-void Cutscene_Command_MotionBlur(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) {
- if ((csCtx->frames >= cmd->startFrame) && (cmd->endFrame >= csCtx->frames)) {
- if ((csCtx->frames == cmd->startFrame) && (cmd->base == 1)) {
- func_8016566C(180);
+void CutsceneCmd_MotionBlur(PlayState* play, CutsceneContext* csCtx, CsCmdMotionBlur* cmd) {
+ if ((csCtx->curFrame >= cmd->startFrame) && (cmd->endFrame >= csCtx->curFrame)) {
+ if ((csCtx->curFrame == cmd->startFrame) && (cmd->type == CS_MOTION_BLUR_ENABLE)) {
+ Play_EnableMotionBlur(180);
}
- if (cmd->base == 2) {
- f32 progress = Environment_LerpWeight(cmd->endFrame, cmd->startFrame, csCtx->frames);
+ if (cmd->type == CS_MOTION_BLUR_DISABLE) {
+ f32 lerp = Environment_LerpWeight(cmd->endFrame, cmd->startFrame, csCtx->curFrame);
- if (progress >= 0.9f) {
- func_80165690();
+ if (lerp >= 0.9f) {
+ Play_DisableMotionBlur();
} else {
- func_80165658((1.0f - progress) * 180.0f);
+ Play_SetMotionBlurAlpha((1.0f - lerp) * 180.0f);
}
}
}
}
-// Command 0x9A: Gives Tatl to the player
-void Cutscene_Command_GiveTatlToPlayer(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) {
+void CutsceneCmd_GiveTatlToPlayer(PlayState* play, CutsceneContext* csCtx, CsCmdGiveTatl* cmd) {
Player* player = GET_PLAYER(play);
- if (csCtx->frames == cmd->startFrame) {
- if (cmd->base == 1) {
+ if (csCtx->curFrame == cmd->startFrame) {
+ if (cmd->giveTatl == true) {
gSaveContext.save.hasTatl = true;
if (player->tatlActor != NULL) {
return;
@@ -794,109 +825,112 @@ void Cutscene_Command_GiveTatlToPlayer(PlayState* play, CutsceneContext* csCtx,
}
}
-// Command 0x98
-void Cutscene_Command_TransitionFX(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) {
- if ((csCtx->frames >= cmd->startFrame) && (cmd->endFrame >= csCtx->frames)) {
- f32 temp_f0;
+void CutsceneCmd_Transition(PlayState* play, CutsceneContext* csCtx, CsCmdTransition* cmd) {
+ if ((csCtx->curFrame >= cmd->startFrame) && (cmd->endFrame >= csCtx->curFrame)) {
+ f32 lerp;
play->envCtx.fillScreen = true;
- temp_f0 = Environment_LerpWeight(cmd->endFrame, cmd->startFrame, csCtx->frames);
+ lerp = Environment_LerpWeight(cmd->endFrame, cmd->startFrame, csCtx->curFrame);
- switch (cmd->base) {
- case 1:
- case 5:
+ switch (cmd->type) {
+ case CS_TRANS_GRAY_FILL_IN:
+ case CS_TRANS_GRAY_FILL_OUT:
play->envCtx.screenFillColor[0] = 160;
play->envCtx.screenFillColor[1] = 160;
play->envCtx.screenFillColor[2] = 160;
- if (cmd->base == 1) {
- play->envCtx.screenFillColor[3] = 255.0f * temp_f0;
- if (temp_f0 == 0.0f) {
+
+ if (cmd->type == CS_TRANS_GRAY_FILL_IN) {
+ play->envCtx.screenFillColor[3] = 255.0f * lerp;
+ if (lerp == 0.0f) {
func_8019F128(NA_SE_EV_S_STONE_FLASH);
}
} else {
- play->envCtx.screenFillColor[3] = (1.0f - temp_f0) * 255.0f;
+ play->envCtx.screenFillColor[3] = (1.0f - lerp) * 255.0f;
}
break;
- case 2:
- case 6:
+ case CS_TRANS_BLUE_FILL_IN:
+ case CS_TRANS_BLUE_FILL_OUT:
play->envCtx.screenFillColor[0] = 0;
play->envCtx.screenFillColor[1] = 0;
play->envCtx.screenFillColor[2] = 255;
- if (cmd->base == 2) {
- play->envCtx.screenFillColor[3] = 255.0f * temp_f0;
+ if (cmd->type == CS_TRANS_BLUE_FILL_IN) {
+ play->envCtx.screenFillColor[3] = 255.0f * lerp;
} else {
- play->envCtx.screenFillColor[3] = (1.0f - temp_f0) * 255.0f;
+ play->envCtx.screenFillColor[3] = (1.0f - lerp) * 255.0f;
}
break;
- case 3:
- case 7:
+ case CS_TRANS_RED_FILL_OUT:
+ case CS_TRANS_RED_FILL_IN:
play->envCtx.screenFillColor[0] = 255;
play->envCtx.screenFillColor[1] = 0;
play->envCtx.screenFillColor[2] = 0;
- if (cmd->base == 3) {
- play->envCtx.screenFillColor[3] = (1.0f - temp_f0) * 255.0f;
+ if (cmd->type == CS_TRANS_RED_FILL_OUT) {
+ play->envCtx.screenFillColor[3] = (1.0f - lerp) * 255.0f;
} else {
- play->envCtx.screenFillColor[3] = 255.0f * temp_f0;
+ play->envCtx.screenFillColor[3] = 255.0f * lerp;
}
break;
- case 4:
- case 8:
+ case CS_TRANS_GREEN_FILL_OUT:
+ case CS_TRANS_GREEN_FILL_IN:
play->envCtx.screenFillColor[0] = 0;
play->envCtx.screenFillColor[1] = 255;
play->envCtx.screenFillColor[2] = 0;
- if (cmd->base == 4) {
- play->envCtx.screenFillColor[3] = (1.0f - temp_f0) * 255.0f;
+ if (cmd->type == CS_TRANS_GREEN_FILL_OUT) {
+ play->envCtx.screenFillColor[3] = (1.0f - lerp) * 255.0f;
} else {
- play->envCtx.screenFillColor[3] = 255.0f * temp_f0;
+ play->envCtx.screenFillColor[3] = 255.0f * lerp;
}
break;
- case 9:
+ case CS_TRANS_TRIGGER_INSTANCE:
gSaveContext.cutsceneTransitionControl = 1;
break;
- case 10:
- case 11:
+ case CS_TRANS_BLACK_FILL_OUT:
+ case CS_TRANS_BLACK_FILL_IN:
play->envCtx.screenFillColor[0] = 0;
play->envCtx.screenFillColor[1] = 0;
play->envCtx.screenFillColor[2] = 0;
- if (cmd->base == 10) {
- play->envCtx.screenFillColor[3] = (1.0f - temp_f0) * 255.0f;
+ if (cmd->type == CS_TRANS_BLACK_FILL_OUT) {
+ play->envCtx.screenFillColor[3] = (1.0f - lerp) * 255.0f;
} else {
- play->envCtx.screenFillColor[3] = 255.0f * temp_f0;
+ play->envCtx.screenFillColor[3] = 255.0f * lerp;
}
break;
- case 12:
- play->envCtx.screenFillColor[0] = (160.0f * (1.0f - temp_f0));
+ case CS_TRANS_GRAY_TO_BLACK:
+ play->envCtx.screenFillColor[0] = (1.0f - lerp) * 160.0f;
play->envCtx.screenFillColor[1] = play->envCtx.screenFillColor[0];
play->envCtx.screenFillColor[2] = play->envCtx.screenFillColor[0];
play->envCtx.screenFillColor[3] = 255;
break;
- case 13:
- play->envCtx.screenFillColor[0] = (160.0f * temp_f0);
+ case CS_TRANS_BLACK_TO_GRAY:
+ play->envCtx.screenFillColor[0] = 160.0f * lerp;
play->envCtx.screenFillColor[1] = play->envCtx.screenFillColor[0];
play->envCtx.screenFillColor[2] = play->envCtx.screenFillColor[0];
play->envCtx.screenFillColor[3] = 255;
break;
+
+ default:
+ break;
}
}
}
-// Command 0x5A: Camera
-s32 Cutscene_Command_Camera(PlayState* play, u8* cmd) {
- s32 sp1C = 0;
+s32 CutsceneCmd_UpdateCamSpline(PlayState* play, u8* script) {
+ s32 cmdBytes = 0;
+
+ bcopy(script, &cmdBytes, sizeof(cmdBytes));
+ script += sizeof(cmdBytes);
- bcopy(cmd, &sp1C, sizeof(s32));
- cmd += sizeof(s32);
if (!Play_IsDebugCamEnabled()) {
- func_80161998(cmd, &sCutsceneCameraInfo);
+ CutsceneCamera_UpdateSplines(script, &sCutsceneCameraInfo);
}
- return sp1C + sizeof(s32);
+ return cmdBytes + sizeof(cmdBytes);
}
/**
@@ -970,144 +1004,146 @@ s32 Cutscene_CountNormalMasks(void) {
return count;
}
-// Command 0xA: Textbox
-void Cutscene_Command_Textbox(PlayState* play, CutsceneContext* csCtx, CsCmdTextbox* cmd) {
- static s32 D_801BB160 = CS_TEXTBOX_TYPE_DEFAULT;
+void CutsceneCmd_Text(PlayState* play, CutsceneContext* csCtx, CsCmdText* cmd) {
+ static s32 sCutsceneTextboxType = CS_TEXT_TYPE_DEFAULT;
u8 talkState;
s32 pad;
- u16 originalCsFrames;
- s32 pad2;
+ u16 endFrame;
- if ((cmd->startFrame >= csCtx->frames) || ((cmd->endFrame < csCtx->frames))) {
+ if ((csCtx->curFrame <= cmd->startFrame) || (csCtx->curFrame > cmd->endFrame)) {
return;
}
- if (cmd->type != CS_TEXTBOX_TYPE_LEARN_SONG) {
- if (D_801BB124 != cmd->base) {
- if (D_801BB160 == CS_TEXTBOX_TYPE_3) {
- csCtx->frames--;
+ if (cmd->type != CS_TEXT_OCARINA_ACTION) {
+ if (sCurTextId != cmd->textId) {
+ if (sCutsceneTextboxType == CS_TEXT_TYPE_3) {
+ csCtx->curFrame--;
}
- D_801BB160 = CS_TEXTBOX_TYPE_1;
- D_801BB124 = cmd->base;
- if (cmd->type == CS_TEXTBOX_TYPE_BOSSES_REMAINS) {
- if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOWLA) && CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT) &&
+ sCutsceneTextboxType = CS_TEXT_TYPE_1;
+ sCurTextId = cmd->textId;
+ if (cmd->type == CS_TEXT_TYPE_BOSSES_REMAINS) {
+ if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA) && CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT) &&
CHECK_QUEST_ITEM(QUEST_REMAINS_GYORG) && CHECK_QUEST_ITEM(QUEST_REMAINS_TWINMOLD)) {
- if (cmd->textId1 != 0xFFFF) {
- Message_StartTextbox(play, cmd->textId1, NULL);
+ if (cmd->altTextId1 != 0xFFFF) {
+ Message_StartTextbox(play, cmd->altTextId1, NULL);
}
} else {
- Message_StartTextbox(play, cmd->base, NULL);
+ Message_StartTextbox(play, cmd->textId, NULL);
}
- } else if (cmd->type == CS_TEXTBOX_TYPE_ALL_NORMAL_MASKS) {
+ } else if (cmd->type == CS_TEXT_TYPE_ALL_NORMAL_MASKS) {
if (Cutscene_CountNormalMasks() == 20) {
- if (cmd->textId1 != 0xFFFF) {
- Message_StartTextbox(play, cmd->textId1, NULL);
+ if (cmd->altTextId1 != 0xFFFF) {
+ Message_StartTextbox(play, cmd->altTextId1, NULL);
}
} else {
- Message_StartTextbox(play, cmd->base, NULL);
+ Message_StartTextbox(play, cmd->textId, NULL);
}
} else {
- Message_StartTextbox(play, cmd->base, NULL);
+ Message_StartTextbox(play, cmd->textId, NULL);
}
- } else {
- goto else_label;
+ //! FAKE: return;
+ goto end;
}
- } else if (D_801BB128 != cmd->base) {
- D_801BB160 = CS_TEXTBOX_TYPE_LEARN_SONG;
- D_801BB128 = cmd->base;
- func_80152434(play, cmd->base);
} else {
- else_label:
- if (csCtx->frames >= cmd->endFrame) {
- // The Textbox command can change the current cutscene frame, mainly to prevent advancing the cutscene when
- // a textbox that is expected to be closed by the user is still open.
-
- originalCsFrames = csCtx->frames;
- talkState = Message_GetState(&play->msgCtx);
- if ((talkState != TEXT_STATE_CLOSING) && (talkState != TEXT_STATE_NONE) && (talkState != TEXT_STATE_7) &&
- (talkState != TEXT_STATE_8)) {
- csCtx->frames--;
- if ((talkState == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) {
- if (play->msgCtx.choiceIndex == 0) {
- if (cmd->base == 0x33BD) {
- func_8019F230();
- }
-
- if (cmd->textId1 != 0xFFFF) {
- func_80151938(play, cmd->textId1);
- if (cmd->type == CS_TEXTBOX_TYPE_3) {
- D_801BB160 = CS_TEXTBOX_TYPE_3;
- if (cmd->textId2 != 0xFFFF) {
- csCtx->frames++;
- }
- }
- } else {
- func_801477B4(play);
- csCtx->frames++;
- }
- } else {
- if (cmd->base == 0x33BD) {
- func_8019F208();
- }
-
- if (cmd->textId2 != 0xFFFF) {
- func_80151938(play, cmd->textId2);
- if (cmd->type == CS_TEXTBOX_TYPE_3) {
- D_801BB160 = CS_TEXTBOX_TYPE_3;
- if (cmd->textId1 != 0xFFFF) {
- csCtx->frames++;
- }
- }
- } else {
- func_801477B4(play);
- csCtx->frames++;
- }
- }
- }
-
- if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_80152434(play, cmd->base);
- }
- }
-
- if ((talkState == TEXT_STATE_CLOSING) && (D_801BB160 == CS_TEXTBOX_TYPE_3)) {
- csCtx->frames--;
- D_801BB124++;
- }
-
- if (originalCsFrames == csCtx->frames) {
- Interface_SetHudVisibility(HUD_VISIBILITY_NONE);
- D_801BB124 = 0;
- D_801BB128 = 0;
- func_80161C0C();
- } else {
- func_80161BE0(1);
- }
+ if (sCurOcarinaAction != cmd->textId) {
+ sCutsceneTextboxType = CS_TEXT_OCARINA_ACTION;
+ sCurOcarinaAction = cmd->textId;
+ func_80152434(play, cmd->textId);
+ return;
}
}
-}
-// Related to actorActions. Maybe a generic actorAction setter?
-void func_800ECD7C(CutsceneContext* csCtx, u8** cutscenePtr, s16 index) {
- s32 i;
- s32 count;
+ if (csCtx->curFrame >= cmd->endFrame) {
+ // The Textbox command can change the current cutscene frame, mainly to prevent advancing the cutscene when
+ // a textbox that is expected to be closed by the user is still open.
+ endFrame = csCtx->curFrame;
+ talkState = Message_GetState(&play->msgCtx);
+ if ((talkState != TEXT_STATE_CLOSING) && (talkState != TEXT_STATE_NONE) && (talkState != TEXT_STATE_7) &&
+ (talkState != TEXT_STATE_8)) {
+ csCtx->curFrame--;
- bcopy(*cutscenePtr, &count, sizeof(s32));
- *cutscenePtr += sizeof(s32);
+ if ((talkState == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) {
+ if (play->msgCtx.choiceIndex == 0) {
+ if (cmd->textId == 0x33BD) {
+ // Gorman Track: do you understand?
+ func_8019F230();
+ }
- for (i = 0; i < count; i++) {
- CsCmdActorAction* actorAction = *(CsCmdActorAction**)cutscenePtr;
+ if (cmd->altTextId1 != 0xFFFF) {
+ Message_ContinueTextbox(play, cmd->altTextId1);
+ if (cmd->type == CS_TEXT_TYPE_3) {
+ sCutsceneTextboxType = CS_TEXT_TYPE_3;
+ if (cmd->altTextId2 != 0xFFFF) {
+ csCtx->curFrame++;
+ }
+ }
+ } else {
+ Message_CloseTextbox(play);
+ csCtx->curFrame++;
+ }
+ } else {
+ if (cmd->textId == 0x33BD) {
+ // Gorman Track: do you understand?
+ func_8019F208();
+ }
- if ((csCtx->frames >= actorAction->startFrame) && (csCtx->frames < actorAction->endFrame)) {
- csCtx->actorActions[index] = actorAction;
+ if (cmd->altTextId2 != 0xFFFF) {
+ Message_ContinueTextbox(play, cmd->altTextId2);
+ if (cmd->type == CS_TEXT_TYPE_3) {
+ sCutsceneTextboxType = CS_TEXT_TYPE_3;
+ if (cmd->altTextId1 != 0xFFFF) {
+ csCtx->curFrame++;
+ }
+ }
+ } else {
+ Message_CloseTextbox(play);
+ csCtx->curFrame++;
+ }
+ }
+ }
+
+ if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
+ func_80152434(play, cmd->textId);
+ }
}
- *cutscenePtr += sizeof(CsCmdActorAction);
+ if ((talkState == TEXT_STATE_CLOSING) && (sCutsceneTextboxType == CS_TEXT_TYPE_3)) {
+ csCtx->curFrame--;
+ sCurTextId++;
+ }
+
+ if (endFrame == csCtx->curFrame) {
+ Interface_SetHudVisibility(HUD_VISIBILITY_NONE);
+ sCurTextId = 0;
+ sCurOcarinaAction = 0;
+ CutsceneCamera_Reset();
+ } else {
+ CutsceneCamera_SetState(CS_CAM_STATE_UPDATE_SPLINE);
+ }
+ }
+end:;
+}
+
+void Cutscene_SetActorCue(CutsceneContext* csCtx, u8** script, s16 cueChannel) {
+ s32 i;
+ s32 numCues;
+
+ bcopy(*script, &numCues, sizeof(numCues));
+ *script += sizeof(numCues);
+
+ for (i = 0; i < numCues; i++) {
+ CsCmdActorCue* cue = *(CsCmdActorCue**)script;
+
+ if ((csCtx->curFrame >= cue->startFrame) && (csCtx->curFrame < cue->endFrame)) {
+ csCtx->actorCues[cueChannel] = cue;
+ }
+
+ *script += sizeof(CsCmdActorCue);
}
}
/**
- * Loops over the cutscene data itself (`cutscenePtr`), applying the effects of each command instantaneously (for most
+ * Loops over the cutscene data itself (`script`), applying the effects of each command instantaneously (for most
* commands).
*
* The cutscene data is an irregularly-structured array of words, which is made up of
@@ -1124,15 +1160,15 @@ void func_800ECD7C(CutsceneContext* csCtx, u8** cutscenePtr, s16 index) {
* has (N). This is followed by N commands of the said category. (The exception is Camera, which has the length of the
* list in bytes instead of the number of commands).
*
- * For most command lists categories (all but the actorActions and Camera commands):
+ * For most command lists categories (all but the actorCues and Camera commands):
* - For each command list found, read the number of commands and loop over them, passing each one to the corresponding
* function which handles the command, applying its effects and checking the frame range stored in the command.
*
* This function is invoked once per frame that a cutscene is active.
*
- * TODO: consider changing the type of `cutscenePtr` to `uintptr_t` when this function matches.
+ * TODO: consider changing the type of `script` to `uintptr_t` when this function matches.
*/
-void Cutscene_ProcessCommands(PlayState* play, CutsceneContext* csCtx, u8* cutscenePtr) {
+void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script) {
s32 i;
s32 j;
s32 pad;
@@ -1140,44 +1176,46 @@ void Cutscene_ProcessCommands(PlayState* play, CutsceneContext* csCtx, u8* cutsc
u32 cmdType;
s32 cmdEntries;
s32 pad2;
- s32 cutsceneEndFrame;
- CsCmdBase* cmd;
+ s32 csFrameCount;
+ void* cmd;
// Read the command list count and the ending frame for this cutscene
- bcopy(cutscenePtr, &totalEntries, sizeof(s32));
- cutscenePtr += sizeof(s32);
- bcopy(cutscenePtr, &cutsceneEndFrame, sizeof(s32));
- cutscenePtr += sizeof(s32);
+ bcopy(script, &totalEntries, sizeof(totalEntries));
+ script += sizeof(totalEntries);
- if (((u16)cutsceneEndFrame < csCtx->frames) && (play->transitionTrigger != TRANS_TRIGGER_START) &&
- (csCtx->state != CS_STATE_4)) {
- csCtx->state = CS_STATE_3;
+ bcopy(script, &csFrameCount, sizeof(csFrameCount));
+ script += sizeof(csFrameCount);
+
+ if ((csCtx->curFrame > (u16)csFrameCount) && (play->transitionTrigger != TRANS_TRIGGER_START) &&
+ (csCtx->state != CS_STATE_RUN_UNSTOPPABLE)) {
+ csCtx->state = CS_STATE_STOP;
return;
}
// Loop over every command list
for (i = 0; i < totalEntries; i++) {
// Read the command type of the current command list.
- bcopy(cutscenePtr, &cmdType, sizeof(u32));
- cutscenePtr += sizeof(u32);
+ bcopy(script, &cmdType, sizeof(cmdType));
+ script += sizeof(cmdType);
- // TODO: This should probably be added to the CutsceneCmd enum. Consider doing it when this function matches.
- if (cmdType == 0xFFFFFFFF) {
+ if (cmdType == CS_CAM_STOP) {
break;
}
- // Check special cases of command types. This are generic ActorActions
- // Ranges: [0x64, 0x96), 0xC9, [0x1C2, 0x258)
- if (((cmdType >= 100) && (cmdType < 150)) || (cmdType == 201) || ((cmdType >= 450) && (cmdType < 600))) {
- for (j = 0; j < ARRAY_COUNT(D_801F4DC8); j = (s16)(j + 1)) {
- if (D_801F4DC8[j] == (u16)cmdType) {
- func_800ECD7C(csCtx, &cutscenePtr, j);
- cmdType = -2;
+ if (((cmdType >= CS_CMD_ACTOR_CUE_100) && (cmdType <= CS_CMD_ACTOR_CUE_149)) ||
+ (cmdType == CS_CMD_ACTOR_CUE_201) ||
+ ((cmdType >= CS_CMD_ACTOR_CUE_450) && (cmdType <= CS_CMD_ACTOR_CUE_599))) {
+ for (j = 0; j < ARRAY_COUNT(sCueTypeList); j = (s16)(j + 1)) {
+ if (sCueTypeList[j] == (u16)cmdType) {
+ Cutscene_SetActorCue(csCtx, &script, j);
+ cmdType = CS_CMD_ACTOR_CUE_POST_PROCESS;
break;
- } else if (D_801F4DC8[j] == 0) {
- D_801F4DC8[j] = cmdType;
- func_800ECD7C(csCtx, &cutscenePtr, j);
- cmdType = -2;
+ }
+
+ if (sCueTypeList[j] == 0) {
+ sCueTypeList[j] = cmdType;
+ Cutscene_SetActorCue(csCtx, &script, j);
+ cmdType = CS_CMD_ACTOR_CUE_POST_PROCESS;
break;
}
}
@@ -1185,203 +1223,227 @@ void Cutscene_ProcessCommands(PlayState* play, CutsceneContext* csCtx, u8* cutsc
switch (cmdType) {
case CS_CMD_MISC:
- bcopy(cutscenePtr, &cmdEntries, sizeof(s32));
- cutscenePtr += sizeof(s32);
+ bcopy(script, &cmdEntries, sizeof(cmdEntries));
+ script += sizeof(cmdEntries);
+
for (j = 0; j < cmdEntries; j++) {
- Cutscene_Command_Misc(play, csCtx, (CsCmdBase*)cutscenePtr);
- cutscenePtr += sizeof(CsCmdBase);
+ CutsceneCmd_Misc(play, csCtx, (CsCmdMisc*)script);
+ script += sizeof(CsCmdMisc);
}
break;
- case CS_CMD_SET_LIGHTING:
- bcopy(cutscenePtr, &cmdEntries, sizeof(s32));
- cutscenePtr += sizeof(s32);
+ case CS_CMD_LIGHT_SETTING:
+ bcopy(script, &cmdEntries, sizeof(cmdEntries));
+ script += sizeof(cmdEntries);
+
for (j = 0; j < cmdEntries; j++) {
- Cutscene_Command_SetLighting(play, csCtx, (CsCmdEnvLighting*)cutscenePtr);
- cutscenePtr += sizeof(CsCmdEnvLighting);
+ CutsceneCmd_SetLightSetting(play, csCtx, (CsCmdLightSetting*)script);
+ script += sizeof(CsCmdLightSetting);
}
break;
- case CS_CMD_PLAYSEQ:
- bcopy(cutscenePtr, &cmdEntries, sizeof(s32));
- cutscenePtr += sizeof(s32);
+ case CS_CMD_START_SEQ:
+ bcopy(script, &cmdEntries, sizeof(cmdEntries));
+ script += sizeof(cmdEntries);
+
for (j = 0; j < cmdEntries; j++) {
- Cutscene_Command_PlaySequence(play, csCtx, (CsCmdSequenceChange*)cutscenePtr);
- cutscenePtr += sizeof(CsCmdSequenceChange);
+ CutsceneCmd_StartSequence(play, csCtx, (CsCmdStartSeq*)script);
+ script += sizeof(CsCmdStartSeq);
}
break;
- case CS_CMD_STOPSEQ:
- bcopy(cutscenePtr, &cmdEntries, sizeof(s32));
- cutscenePtr += sizeof(s32);
+ case CS_CMD_STOP_SEQ:
+ bcopy(script, &cmdEntries, sizeof(cmdEntries));
+ script += sizeof(cmdEntries);
+
for (j = 0; j < cmdEntries; j++) {
- Cutscene_Command_StopSequence(play, csCtx, (CsCmdSequenceChange*)cutscenePtr);
- cutscenePtr += sizeof(CsCmdSequenceChange);
+ CutsceneCmd_StopSequence(play, csCtx, (CsCmdStopSeq*)script);
+ script += sizeof(CsCmdStartSeq);
}
break;
- case CS_CMD_FADESEQ:
- bcopy(cutscenePtr, &cmdEntries, sizeof(s32));
- cutscenePtr += sizeof(s32);
+ case CS_CMD_FADE_OUT_SEQ:
+ bcopy(script, &cmdEntries, sizeof(cmdEntries));
+ script += sizeof(cmdEntries);
+
for (j = 0; j < cmdEntries; j++) {
- Cutscene_Command_FadeSequence(play, csCtx, (CsCmdSequenceFade*)cutscenePtr);
- cutscenePtr += sizeof(CsCmdSequenceFade);
+ CutsceneCmd_FadeOutSequence(play, csCtx, (CsCmdFadeOutSeq*)script);
+ script += sizeof(CsCmdFadeOutSeq);
}
break;
- case CS_CMD_PLAYAMBIENCE:
- bcopy(cutscenePtr, &cmdEntries, sizeof(s32));
- cutscenePtr += sizeof(s32);
+ case CS_CMD_START_AMBIENCE:
+ bcopy(script, &cmdEntries, sizeof(cmdEntries));
+ script += sizeof(cmdEntries);
+
for (j = 0; j < cmdEntries; j++) {
- Cutscene_Command_PlayAmbienceSequence(play, csCtx, (CsCmdBase*)cutscenePtr);
- cutscenePtr += sizeof(CsCmdBase);
+ CutsceneCmd_StartAmbience(play, csCtx, (CsCmdStartAmbience*)script);
+ script += sizeof(CsCmdStartAmbience);
}
break;
- case CS_CMD_FADEAMBIENCE:
- bcopy(cutscenePtr, &cmdEntries, sizeof(s32));
- cutscenePtr += sizeof(s32);
+ case CS_CMD_FADE_OUT_AMBIENCE:
+ bcopy(script, &cmdEntries, sizeof(cmdEntries));
+ script += sizeof(cmdEntries);
+
for (j = 0; j < cmdEntries; j++) {
- Cutscene_Command_FadeAmbienceSequence(play, csCtx, (CsCmdBase*)cutscenePtr);
- cutscenePtr += sizeof(CsCmdBase);
+ CutsceneCmd_FadeOutAmbience(play, csCtx, (CsCmdFadeOutAmbience*)script);
+ script += sizeof(CsCmdFadeOutAmbience);
}
break;
- case CS_CMD_130:
- bcopy(cutscenePtr, &cmdEntries, sizeof(s32));
- cutscenePtr += sizeof(s32);
+ case CS_CMD_SFX_REVERB_INDEX_2:
+ bcopy(script, &cmdEntries, sizeof(cmdEntries));
+ script += sizeof(cmdEntries);
+
for (j = 0; j < cmdEntries; j++) {
- func_800EAD48(play, csCtx, (CsCmdBase*)cutscenePtr);
- cutscenePtr += sizeof(CsCmdBase);
+ Cutscene_SetSfxReverbIndexTo2(play, csCtx, (CsCmdSfxReverbIndexTo2*)script);
+ script += sizeof(CsCmdSfxReverbIndexTo2);
}
break;
- case CS_CMD_131:
- bcopy(cutscenePtr, &cmdEntries, sizeof(s32));
- cutscenePtr += sizeof(s32);
+ case CS_CMD_SFX_REVERB_INDEX_1:
+ bcopy(script, &cmdEntries, sizeof(cmdEntries));
+ script += sizeof(cmdEntries);
+
for (j = 0; j < cmdEntries; j++) {
- func_800EAD7C(play, csCtx, (CsCmdBase*)cutscenePtr);
- cutscenePtr += sizeof(CsCmdBase);
+ Cutscene_SetSfxReverbIndexTo1(play, csCtx, (CsCmdSfxReverbIndexTo1*)script);
+ script += sizeof(CsCmdSfxReverbIndexTo1);
}
break;
- case CS_CMD_132:
- bcopy(cutscenePtr, &cmdEntries, sizeof(s32));
- cutscenePtr += sizeof(s32);
+ case CS_CMD_MODIFY_SEQ:
+ bcopy(script, &cmdEntries, sizeof(cmdEntries));
+ script += sizeof(cmdEntries);
+
for (j = 0; j < cmdEntries; j++) {
- func_800EADB0(play, csCtx, (CsCmdBase*)cutscenePtr);
- cutscenePtr += sizeof(CsCmdBase);
+ CutsceneCmd_ModifySequence(play, csCtx, (CsCmdModifySeq*)script);
+ script += sizeof(CsCmdModifySeq);
}
break;
case CS_CMD_RUMBLE:
- bcopy(cutscenePtr, &cmdEntries, sizeof(s32));
- cutscenePtr += sizeof(s32);
+ bcopy(script, &cmdEntries, sizeof(cmdEntries));
+ script += sizeof(cmdEntries);
+
for (j = 0; j < cmdEntries; j++) {
- Cutscene_Command_Rumble(play, csCtx, (CsCmdRumble*)cutscenePtr);
- cutscenePtr += sizeof(CsCmdRumble);
+ CutsceneCmd_RumbleController(play, csCtx, (CsCmdRumble*)script);
+ script += sizeof(CsCmdRumble);
}
break;
- case CS_CMD_FADESCREEN:
- bcopy(cutscenePtr, &cmdEntries, sizeof(s32));
- cutscenePtr += sizeof(s32);
+ case CS_CMD_TRANSITION_GENERAL:
+ bcopy(script, &cmdEntries, sizeof(cmdEntries));
+ script += sizeof(cmdEntries);
+
for (j = 0; j < cmdEntries; j++) {
- Cutscene_Command_FadeColorScreen(play, csCtx, (CsCmdFadeScreen*)cutscenePtr);
- cutscenePtr += sizeof(CsCmdFadeScreen);
+ CutsceneCmd_TransitionGeneral(play, csCtx, (CsCmdTransitionGeneral*)script);
+ script += sizeof(CsCmdTransitionGeneral);
}
break;
- case CS_CMD_SETTIME:
- bcopy(cutscenePtr, &cmdEntries, sizeof(s32));
- cutscenePtr += sizeof(s32);
+ case CS_CMD_TIME:
+ bcopy(script, &cmdEntries, sizeof(cmdEntries));
+ script += sizeof(cmdEntries);
+
for (j = 0; j < cmdEntries; j++) {
- Cutscene_Command_SetTime(play, csCtx, (CsCmdDayTime*)cutscenePtr);
- cutscenePtr += sizeof(CsCmdDayTime);
+ CutsceneCmd_SetTime(play, csCtx, (CsCmdTime*)script);
+ script += sizeof(CsCmdTime);
}
break;
- case CS_CMD_SET_PLAYER_ACTION:
- bcopy(cutscenePtr, &cmdEntries, sizeof(s32));
- cutscenePtr += sizeof(s32);
+ case CS_CMD_PLAYER_CUE:
+ bcopy(script, &cmdEntries, sizeof(cmdEntries));
+ script += sizeof(cmdEntries);
+
for (j = 0; j < cmdEntries; j++) {
- cmd = (CsCmdBase*)cutscenePtr;
- if ((cmd->startFrame <= csCtx->frames) && (csCtx->frames < cmd->endFrame)) {
- csCtx->playerAction = (CsCmdActorAction*)cmd;
+ cmd = script;
+
+ if ((((CsCmdActorCue*)cmd)->startFrame <= csCtx->curFrame) &&
+ (csCtx->curFrame < ((CsCmdActorCue*)cmd)->endFrame)) {
+ csCtx->playerCue = (CsCmdActorCue*)cmd;
}
- cutscenePtr += sizeof(CsCmdActorAction);
+ script += sizeof(CsCmdActorCue);
}
break;
- case CS_CMD_CAMERA:
- cutscenePtr += Cutscene_Command_Camera(play, cutscenePtr);
+ case CS_CMD_CAMERA_SPLINE:
+ script += CutsceneCmd_UpdateCamSpline(play, script);
break;
- case CS_CMD_TERMINATOR:
- bcopy(cutscenePtr, &cmdEntries, sizeof(s32));
- cutscenePtr += sizeof(s32);
+ case CS_CMD_DESTINATION:
+ bcopy(script, &cmdEntries, sizeof(cmdEntries));
+ script += sizeof(cmdEntries);
+
for (j = 0; j < cmdEntries; j++) {
- Cutscene_Command_Terminator(play, csCtx, (CsCmdBase*)cutscenePtr);
- cutscenePtr += sizeof(CsCmdBase);
+ CutsceneCmd_Destination(play, csCtx, (CsCmdDestination*)script);
+ script += sizeof(CsCmdDestination);
}
break;
case CS_CMD_CHOOSE_CREDITS_SCENES:
- bcopy(cutscenePtr, &cmdEntries, sizeof(s32));
- cutscenePtr += sizeof(s32);
+ bcopy(script, &cmdEntries, sizeof(cmdEntries));
+ script += sizeof(cmdEntries);
+
for (j = 0; j < cmdEntries; j++) {
- Cutscene_Command_ChooseCreditsScenes(play, csCtx, (CsCmdBase*)cutscenePtr);
- cutscenePtr += sizeof(CsCmdBase);
+ CutsceneCmd_ChooseCreditsScenes(play, csCtx, (CsCmdChooseCreditsScene*)script);
+ script += sizeof(CsCmdChooseCreditsScene);
}
break;
- case CS_CMD_TEXTBOX:
- bcopy(cutscenePtr, &cmdEntries, sizeof(s32));
- cutscenePtr += sizeof(s32);
+ case CS_CMD_TEXT:
+ bcopy(script, &cmdEntries, sizeof(cmdEntries));
+ script += sizeof(cmdEntries);
+
for (j = 0; j < cmdEntries; j++) {
- cmd = (CsCmdBase*)cutscenePtr;
- if (cmd->base != 0xFFFF) {
- Cutscene_Command_Textbox(play, csCtx, (CsCmdTextbox*)cmd);
+ cmd = script;
+
+ if (((CsCmdText*)cmd)->textId != 0xFFFF) {
+ CutsceneCmd_Text(play, csCtx, (CsCmdText*)cmd);
}
- cutscenePtr += sizeof(CsCmdTextbox);
+ script += sizeof(CsCmdText);
}
break;
- case CS_CMD_SCENE_TRANS_FX:
- bcopy(cutscenePtr, &cmdEntries, sizeof(s32));
- cutscenePtr += sizeof(s32);
+ case CS_CMD_TRANSITION:
+ bcopy(script, &cmdEntries, sizeof(cmdEntries));
+ script += sizeof(cmdEntries);
+
for (j = 0; j < cmdEntries; j++) {
- Cutscene_Command_TransitionFX(play, csCtx, (CsCmdBase*)cutscenePtr);
- cutscenePtr += sizeof(CsCmdBase);
+ CutsceneCmd_Transition(play, csCtx, (CsCmdTransition*)script);
+ script += sizeof(CsCmdTransition);
}
break;
- case CS_CMD_MOTIONBLUR:
- bcopy(cutscenePtr, &cmdEntries, sizeof(s32));
- cutscenePtr += sizeof(s32);
+ case CS_CMD_MOTION_BLUR:
+ bcopy(script, &cmdEntries, sizeof(cmdEntries));
+ script += sizeof(cmdEntries);
+
for (j = 0; j < cmdEntries; j++) {
- Cutscene_Command_MotionBlur(play, csCtx, (CsCmdBase*)cutscenePtr);
- cutscenePtr += sizeof(CsCmdBase);
+ CutsceneCmd_MotionBlur(play, csCtx, (CsCmdMotionBlur*)script);
+ script += sizeof(CsCmdMotionBlur);
}
break;
- case CS_CMD_GIVETATL:
- bcopy(cutscenePtr, &cmdEntries, sizeof(s32));
- cutscenePtr += sizeof(s32);
+ case CS_CMD_GIVE_TATL:
+ bcopy(script, &cmdEntries, sizeof(cmdEntries));
+ script += sizeof(cmdEntries);
+
for (j = 0; j < cmdEntries; j++) {
- Cutscene_Command_GiveTatlToPlayer(play, csCtx, (CsCmdBase*)cutscenePtr);
- cutscenePtr += sizeof(CsCmdBase);
+ CutsceneCmd_GiveTatlToPlayer(play, csCtx, (CsCmdGiveTatl*)script);
+ script += sizeof(CsCmdGiveTatl);
}
break;
- case -2:
+ case CS_CMD_ACTOR_CUE_POST_PROCESS:
break;
default:
- bcopy(cutscenePtr, &cmdEntries, sizeof(s32));
- cutscenePtr += sizeof(s32);
+ bcopy(script, &cmdEntries, sizeof(cmdEntries));
+ script += sizeof(cmdEntries);
+
for (j = 0; j < cmdEntries; j++) {
- cutscenePtr += sizeof(CsCmdBase);
+ script += sizeof(CsCmdUnimplemented);
}
break;
}
@@ -1390,117 +1452,125 @@ void Cutscene_ProcessCommands(PlayState* play, CutsceneContext* csCtx, u8* cutsc
/* End of command handling section */
-void func_800ED980(PlayState* play, CutsceneContext* csCtx) {
- if (gSaveContext.save.cutscene >= 0xFFF0) {
- csCtx->frames++;
- Cutscene_ProcessCommands(play, csCtx, (u8*)play->csCtx.csData);
+void CutsceneHandler_RunScript(PlayState* play, CutsceneContext* csCtx) {
+ if (gSaveContext.save.cutsceneIndex >= 0xFFF0) {
+ csCtx->curFrame++;
+ Cutscene_ProcessScript(play, csCtx, (u8*)play->csCtx.script);
}
}
-void func_800ED9C4(PlayState* play, CutsceneContext* csCtx) {
- if (func_800EA220(play, csCtx, 0.0f)) {
+void CutsceneHandler_StopManual(PlayState* play, CutsceneContext* csCtx) {
+ if (Cutscene_StepTimer(play, csCtx, 0.0f)) {
Audio_SetCutsceneFlag(false);
- csCtx->state = CS_STATE_0;
+ csCtx->state = CS_STATE_IDLE;
}
}
-// unused
-void func_800EDA04(PlayState* play, CutsceneContext* csCtx) {
- if (func_800EA220(play, csCtx, 0.0f)) {
+void CutsceneHandler_StopScript(PlayState* play, CutsceneContext* csCtx) {
+ if (Cutscene_StepTimer(play, csCtx, 0.0f)) {
s16 i;
- csCtx->playerAction = NULL;
+ csCtx->playerCue = NULL;
- for (i = 0; i < ARRAY_COUNT(csCtx->actorActions); i++) {
- csCtx->actorActions[i] = NULL;
+ for (i = 0; i < ARRAY_COUNT(csCtx->actorCues); i++) {
+ csCtx->actorCues[i] = NULL;
}
- gSaveContext.save.cutscene = 0;
- gSaveContext.gameMode = 0;
- ActorCutscene_Stop(0x7F);
+ gSaveContext.save.cutsceneIndex = 0;
+ gSaveContext.gameMode = GAMEMODE_NORMAL;
+
+ CutsceneManager_Stop(CS_ID_GLOBAL_END);
Audio_SetCutsceneFlag(false);
- csCtx->state = CS_STATE_0;
+ csCtx->state = CS_STATE_IDLE;
}
}
-void func_800EDA84(PlayState* play, CutsceneContext* csCtx) {
- if ((gSaveContext.cutsceneTrigger != 0) && (csCtx->state == CS_STATE_0) && !Player_InCsMode(play)) {
- gSaveContext.save.cutscene = 0xFFFD;
+void Cutscene_SetupScripted(PlayState* play, CutsceneContext* csCtx) {
+ if ((gSaveContext.cutsceneTrigger != 0) && (csCtx->state == CS_STATE_IDLE) && !Player_InCsMode(play)) {
+ gSaveContext.save.cutsceneIndex = 0xFFFD;
}
- if ((gSaveContext.save.cutscene >= 0xFFF0) && (csCtx->state == CS_STATE_0)) {
+ if ((gSaveContext.save.cutsceneIndex >= 0xFFF0) && (csCtx->state == CS_STATE_IDLE)) {
s16 i;
- D_801BB124 = 0;
- D_801BB128 = 0;
- csCtx->playerAction = NULL;
+ sCurTextId = 0;
+ sCurOcarinaAction = 0;
+ csCtx->playerCue = NULL;
- for (i = 0; i < ARRAY_COUNT(csCtx->actorActions); i++) {
- csCtx->actorActions[i] = NULL;
+ for (i = 0; i < ARRAY_COUNT(csCtx->actorCues); i++) {
+ csCtx->actorCues[i] = NULL;
}
- csCtx->state++;
- if (csCtx->state == CS_STATE_1) {
+ csCtx->state++; // CS_STATE_START
+
+ if (csCtx->state == CS_STATE_START) {
Audio_SetCutsceneFlag(true);
- csCtx->frames = 0xFFFF;
- csCtx->subCamId = ActorCutscene_GetCurrentSubCamId(0x7F);
- func_8016119C(Play_GetCamera(play, csCtx->subCamId), &sCutsceneCameraInfo);
- csCtx->unk_18 = 0xFFFF;
+ csCtx->curFrame = 0xFFFF;
+
+ csCtx->subCamId = CutsceneManager_GetCurrentSubCamId(CS_ID_GLOBAL_END);
+ CutsceneCamera_Init(Play_GetCamera(play, csCtx->subCamId), &sCutsceneCameraInfo);
+
+ // OoT Remnant
+ csCtx->camEyeSplinePointsAppliedFrame = CS_CAM_DATA_NOT_APPLIED;
if (gSaveContext.cutsceneTrigger == 0) {
Interface_SetHudVisibility(HUD_VISIBILITY_NONE);
ShrinkWindow_Letterbox_SetSizeTarget(32);
ShrinkWindow_Letterbox_SetSize(32);
- csCtx->state++;
+ csCtx->state++; // CS_STATE_RUN
}
- func_800ED980(play, csCtx);
+ CutsceneHandler_RunScript(play, csCtx);
}
gSaveContext.cutsceneTrigger = 0;
}
}
-// HandleFlags?
-void func_800EDBE0(PlayState* play) {
+void Cutscene_HandleEntranceTriggers(PlayState* play) {
s32 pad;
- s16 sp2A;
- SceneTableEntry* sp24;
- s32 temp_v0_3;
+ s16 csId;
+ SceneTableEntry* scene;
+ s32 scriptIndex;
- if (((gSaveContext.gameMode == 0) || (gSaveContext.gameMode == 1)) && (gSaveContext.respawnFlag <= 0)) {
- sp2A = func_800F21CC();
- if (sp2A != -1) {
- temp_v0_3 = func_800F2138(sp2A);
- if (temp_v0_3 != -1) {
- if ((play->csCtx.sceneCsList[temp_v0_3].unk7 != 0xFF) && (gSaveContext.respawnFlag == 0)) {
- if (play->csCtx.sceneCsList[temp_v0_3].unk7 == 0xFE) {
- ActorCutscene_Start(sp2A, NULL);
+ if (((gSaveContext.gameMode == GAMEMODE_NORMAL) || (gSaveContext.gameMode == GAMEMODE_TITLE_SCREEN)) &&
+ (gSaveContext.respawnFlag <= 0)) {
+ // Try to find an actor cutscene that's triggered by the current spawn
+ csId = CutsceneManager_FindEntranceCsId();
+ if (csId != CS_ID_NONE) {
+ scriptIndex = CutsceneManager_GetCutsceneScriptIndex(csId);
+ if (scriptIndex != CS_SCRIPT_ID_NONE) {
+ // A scripted cutscene is triggered by a spawn
+ if ((play->csCtx.scriptList[scriptIndex].spawnFlags != CS_SPAWN_FLAG_NONE) &&
+ (gSaveContext.respawnFlag == 0)) {
+ if (play->csCtx.scriptList[scriptIndex].spawnFlags == CS_SPAWN_FLAG_ALWAYS) {
+ // Entrance cutscenes that always run
+ CutsceneManager_Start(csId, NULL);
gSaveContext.showTitleCard = false;
- } else if (!(((void)0,
- gSaveContext.save.weekEventReg[(play->csCtx.sceneCsList[temp_v0_3].unk7 / 8)]) &
- (1 << (play->csCtx.sceneCsList[temp_v0_3].unk7 % 8)))) {
- gSaveContext.save.weekEventReg[(play->csCtx.sceneCsList[temp_v0_3].unk7 / 8)] =
- ((void)0, gSaveContext.save.weekEventReg[(play->csCtx.sceneCsList[temp_v0_3].unk7 / 8)]) |
- (1 << (play->csCtx.sceneCsList[temp_v0_3].unk7 % 8));
- ActorCutscene_Start(sp2A, NULL);
+
+ } else if (!CHECK_CS_SPAWN_FLAG_WEEKEVENTREG(play->csCtx.scriptList[scriptIndex].spawnFlags)) {
+ // Entrance cutscenes that only run once
+ SET_CS_SPAWN_FLAG_WEEKEVENTREG(play->csCtx.scriptList[scriptIndex].spawnFlags);
+ CutsceneManager_Start(csId, NULL);
+ // The title card will be used by the cs misc command if necessary.
gSaveContext.showTitleCard = false;
}
}
} else {
- ActorCutscene_StartAndSetUnkLinkFields(sp2A, NULL);
+ // A non-scripted cutscene is triggered by a spawn
+ CutsceneManager_StartWithPlayerCs(csId, NULL);
}
}
}
if ((gSaveContext.respawnFlag == 0) || (gSaveContext.respawnFlag == -2)) {
- sp24 = play->loadedScene;
- if ((sp24->titleTextId != 0) && gSaveContext.showTitleCard) {
+ scene = play->loadedScene;
+ if ((scene->titleTextId != 0) && gSaveContext.showTitleCard) {
if ((Entrance_GetTransitionFlags(((void)0, gSaveContext.save.entrance) +
((void)0, gSaveContext.sceneLayer)) &
0x4000) != 0) {
- func_80151A68(play, sp24->titleTextId);
+ func_80151A68(play, scene->titleTextId);
}
}
@@ -1514,10 +1584,10 @@ void func_800EDDB0(PlayState* play) {
void func_800EDDBC(UNK_TYPE arg0, UNK_TYPE arg1) {
}
-void Cutscene_LoadCutsceneData(PlayState* play, u8 csIndex) {
- if (dREG(95) == 0) {
- play->csCtx.currentCsIndex = csIndex;
- play->csCtx.csData = Lib_SegmentedToVirtual(play->csCtx.sceneCsList[csIndex].segmentedData);
+void Cutscene_StartScripted(PlayState* play, u8 scriptIndex) {
+ if (!R_USE_DEBUG_CUTSCENE) {
+ play->csCtx.scriptIndex = scriptIndex;
+ play->csCtx.script = Lib_SegmentedToVirtual(play->csCtx.scriptList[scriptIndex].script);
}
gSaveContext.cutsceneTrigger = 1;
@@ -1529,32 +1599,32 @@ void Cutscene_LoadCutsceneData(PlayState* play, u8 csIndex) {
* Interpolates the actor's position based on the corresponding actor action's position
* and the current cutscene frame
*/
-void Cutscene_ActorTranslate(Actor* actor, PlayState* play, s32 actorActionIndex) {
- Vec3f start;
- Vec3f end;
- CsCmdActorAction* entry = play->csCtx.actorActions[actorActionIndex];
- f32 progress;
+void Cutscene_ActorTranslate(Actor* actor, PlayState* play, s32 cueChannel) {
+ Vec3f startPos;
+ Vec3f endPos;
+ CsCmdActorCue* cue = play->csCtx.actorCues[cueChannel];
+ f32 lerp;
- start.x = entry->startPos.x;
- start.y = entry->startPos.y;
- start.z = entry->startPos.z;
- end.x = entry->endPos.x;
- end.y = entry->endPos.y;
- end.z = entry->endPos.z;
+ startPos.x = cue->startPos.x;
+ startPos.y = cue->startPos.y;
+ startPos.z = cue->startPos.z;
+ endPos.x = cue->endPos.x;
+ endPos.y = cue->endPos.y;
+ endPos.z = cue->endPos.z;
- progress = Environment_LerpWeight(entry->endFrame, entry->startFrame, play->csCtx.frames);
+ lerp = Environment_LerpWeight(cue->endFrame, cue->startFrame, play->csCtx.curFrame);
- VEC3F_LERPIMPDST(&actor->world.pos, &start, &end, progress);
+ VEC3F_LERPIMPDST(&actor->world.pos, &startPos, &endPos, lerp);
}
/**
* Interpolates the actor's position based on the corresponding actor action's position
* and the current cutscene frame, and sets the actor's yaw using the actor action yaw
*/
-void Cutscene_ActorTranslateAndYaw(Actor* actor, PlayState* play, s32 actorActionIndex) {
- Cutscene_ActorTranslate(actor, play, actorActionIndex);
+void Cutscene_ActorTranslateAndYaw(Actor* actor, PlayState* play, s32 cueChannel) {
+ Cutscene_ActorTranslate(actor, play, cueChannel);
- actor->world.rot.y = play->csCtx.actorActions[actorActionIndex]->urot.y;
+ actor->world.rot.y = play->csCtx.actorCues[cueChannel]->rot.y;
actor->shape.rot.y = actor->world.rot.y;
}
@@ -1562,25 +1632,25 @@ void Cutscene_ActorTranslateAndYaw(Actor* actor, PlayState* play, s32 actorActio
* Interpolates the actor's position and yaw based on the corresponding actor action's
* position and the current cutscene frame
*/
-void Cutscene_ActorTranslateAndYawSmooth(Actor* actor, PlayState* play, s32 actorActionIndex) {
- Vec3f start;
- Vec3f end;
- CsCmdActorAction* entry;
- f32 progress;
+void Cutscene_ActorTranslateAndYawSmooth(Actor* actor, PlayState* play, s32 cueChannel) {
+ Vec3f startPos;
+ Vec3f endPos;
+ CsCmdActorCue* cue;
+ f32 lerp;
- start.x = play->csCtx.actorActions[actorActionIndex]->startPos.x;
- start.y = play->csCtx.actorActions[actorActionIndex]->startPos.y;
- start.z = play->csCtx.actorActions[actorActionIndex]->startPos.z;
- end.x = play->csCtx.actorActions[actorActionIndex]->endPos.x;
- end.y = play->csCtx.actorActions[actorActionIndex]->endPos.y;
- end.z = play->csCtx.actorActions[actorActionIndex]->endPos.z;
+ startPos.x = play->csCtx.actorCues[cueChannel]->startPos.x;
+ startPos.y = play->csCtx.actorCues[cueChannel]->startPos.y;
+ startPos.z = play->csCtx.actorCues[cueChannel]->startPos.z;
+ endPos.x = play->csCtx.actorCues[cueChannel]->endPos.x;
+ endPos.y = play->csCtx.actorCues[cueChannel]->endPos.y;
+ endPos.z = play->csCtx.actorCues[cueChannel]->endPos.z;
- entry = play->csCtx.actorActions[actorActionIndex];
- progress = Environment_LerpWeight(entry->endFrame, entry->startFrame, play->csCtx.frames);
+ cue = play->csCtx.actorCues[cueChannel];
+ lerp = Environment_LerpWeight(cue->endFrame, cue->startFrame, play->csCtx.curFrame);
- VEC3F_LERPIMPDST(&actor->world.pos, &start, &end, progress);
+ VEC3F_LERPIMPDST(&actor->world.pos, &startPos, &endPos, lerp);
- Math_SmoothStepToS(&actor->world.rot.y, Math_Vec3f_Yaw(&start, &end), 10, 1000, 1);
+ Math_SmoothStepToS(&actor->world.rot.y, Math_Vec3f_Yaw(&startPos, &endPos), 10, 1000, 1);
actor->shape.rot.y = actor->world.rot.y;
}
@@ -1588,24 +1658,24 @@ void Cutscene_ActorTranslateAndYawSmooth(Actor* actor, PlayState* play, s32 acto
* Interpolates the actor's XZ position and yaw based on the corresponding actor action's
* position and the current cutscene frame
*/
-void Cutscene_ActorTranslateXZAndYawSmooth(Actor* actor, PlayState* play, s32 actorActionIndex) {
- Vec3f start;
- Vec3f end;
- CsCmdActorAction* entry;
- f32 progress;
+void Cutscene_ActorTranslateXZAndYawSmooth(Actor* actor, PlayState* play, s32 cueChannel) {
+ Vec3f startPos;
+ Vec3f endPos;
+ CsCmdActorCue* cue;
+ f32 lerp;
- start.x = play->csCtx.actorActions[actorActionIndex]->startPos.x;
- start.z = play->csCtx.actorActions[actorActionIndex]->startPos.z;
- end.x = play->csCtx.actorActions[actorActionIndex]->endPos.x;
- end.z = play->csCtx.actorActions[actorActionIndex]->endPos.z;
+ startPos.x = play->csCtx.actorCues[cueChannel]->startPos.x;
+ startPos.z = play->csCtx.actorCues[cueChannel]->startPos.z;
+ endPos.x = play->csCtx.actorCues[cueChannel]->endPos.x;
+ endPos.z = play->csCtx.actorCues[cueChannel]->endPos.z;
- entry = play->csCtx.actorActions[actorActionIndex];
- progress = Environment_LerpWeight(entry->endFrame, entry->startFrame, play->csCtx.frames);
+ cue = play->csCtx.actorCues[cueChannel];
+ lerp = Environment_LerpWeight(cue->endFrame, cue->startFrame, play->csCtx.curFrame);
- actor->world.pos.x = start.x + (end.x - start.x) * progress;
- actor->world.pos.z = start.z + (end.z - start.z) * progress;
+ actor->world.pos.x = startPos.x + (endPos.x - startPos.x) * lerp;
+ actor->world.pos.z = startPos.z + (endPos.z - startPos.z) * lerp;
- Math_SmoothStepToS(&actor->world.rot.y, Math_Vec3f_Yaw(&start, &end), 10, 1000, 1);
+ Math_SmoothStepToS(&actor->world.rot.y, Math_Vec3f_Yaw(&startPos, &endPos), 10, 1000, 1);
actor->shape.rot.y = actor->world.rot.y;
}
@@ -1618,25 +1688,35 @@ s32 Cutscene_GetSceneLayer(PlayState* play) {
return sceneLayer;
}
-s32 Cutscene_GetActorActionIndex(PlayState* play, u16 actorActionCmd) {
+/**
+ * @param play See `PlayState`
+ * @param cueType See `cmdType`
+ * @return cue channel
+ */
+s32 Cutscene_GetCueChannel(PlayState* play, u16 cueType) {
s32 i;
- s32 index = -1;
+ s32 cueChannel = -1;
- for (i = 0; i < ARRAY_COUNT(D_801F4DC8); i++) {
- if (actorActionCmd == D_801F4DC8[i]) {
- index = i;
+ for (i = 0; i < ARRAY_COUNT(sCueTypeList); i++) {
+ if (cueType == sCueTypeList[i]) {
+ cueChannel = i;
}
}
- return index;
+ return cueChannel;
}
-s32 Cutscene_CheckActorAction(PlayState* play, u16 actorActionCmd) {
- if (play->csCtx.state != CS_STATE_0) {
- s32 index = Cutscene_GetActorActionIndex(play, actorActionCmd);
+/**
+ * @param play See `PlayState`
+ * @param cueType See `cmdType`
+ * @return is cuetype in a channel
+ */
+s32 Cutscene_IsCueInChannel(PlayState* play, u16 cueType) {
+ if (play->csCtx.state != CS_STATE_IDLE) {
+ s32 cueChannel = Cutscene_GetCueChannel(play, cueType);
- if (index != -1) {
- return play->csCtx.actorActions[index] != NULL;
+ if (cueChannel != -1) {
+ return play->csCtx.actorCues[cueChannel] != NULL;
}
}
@@ -1644,7 +1724,7 @@ s32 Cutscene_CheckActorAction(PlayState* play, u16 actorActionCmd) {
}
u8 Cutscene_IsPlaying(PlayState* play) {
- return (gSaveContext.cutsceneTrigger != 0) || (play->csCtx.state != CS_STATE_0);
+ return (gSaveContext.cutsceneTrigger != 0) || (play->csCtx.state != CS_STATE_IDLE);
}
/* End of actor utilities section */
diff --git a/src/code/z_draw.c b/src/code/z_draw.c
index 4167b4cea..a2686be8e 100644
--- a/src/code/z_draw.c
+++ b/src/code/z_draw.c
@@ -837,7 +837,7 @@ void GetItem_DrawRemains(PlayState* play, s16 drawId) {
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_OPA_DISP = func_801660B8(play, POLY_OPA_DISP);
+ POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/code/z_eff_blure.c b/src/code/z_eff_blure.c
index 6ab70f1ef..5f0221969 100644
--- a/src/code/z_eff_blure.c
+++ b/src/code/z_eff_blure.c
@@ -408,7 +408,7 @@ void EffectBlure_DrawElemNoInterpolation(EffectBlure* this, EffectBlureElement*
Math_Vec3s_ToVec3f(&sp6C, &this->elements[0].p2);
- vtx = GRAPH_ALLOC(gfxCtx, sizeof(Vtx[4]));
+ vtx = GRAPH_ALLOC(gfxCtx, 4 * sizeof(Vtx));
if (vtx == NULL) {
} else {
vtx[0].v = baseVtx;
@@ -559,7 +559,7 @@ void EffectBlure_DrawElemHermiteInterpolation(EffectBlure* this, EffectBlureElem
Math_Vec3f_Scale(&sp174, 0.5f);
Math_Vec3f_Scale(&sp168, 0.5f);
- vtx = GRAPH_ALLOC(gfxCtx, sizeof(Vtx[16]));
+ vtx = GRAPH_ALLOC(gfxCtx, 16 * sizeof(Vtx));
if (vtx == NULL) {
} else {
Math_Vec3f_Diff(&sp1CC, &sp138, &sp158);
@@ -849,7 +849,7 @@ void EffectBlure_DrawSimple(EffectBlure* this2, GraphicsContext* gfxCtx) {
if (this->numElements >= 2) {
vtxCount = this->numElements * 4;
- vtx = GRAPH_ALLOC(gfxCtx, ALIGN16(vtxCount * sizeof(Vtx)));
+ vtx = GRAPH_ALLOC(gfxCtx, vtxCount * sizeof(Vtx));
if (vtx == NULL) {
return;
}
@@ -941,7 +941,7 @@ void EffectBlure_Draw(void* thisx, GraphicsContext* gfxCtx) {
func_8012C560(gfxCtx);
gDPPipeSync(POLY_XLU_DISP++);
- vtx = GRAPH_ALLOC(gfxCtx, sizeof(Vtx[32]));
+ vtx = GRAPH_ALLOC(gfxCtx, 32 * sizeof(Vtx));
if (vtx == NULL) {
} else {
j = 0;
diff --git a/src/code/z_eff_footmark.c b/src/code/z_eff_footmark.c
index 1dc3d7237..bcf6ff824 100644
--- a/src/code/z_eff_footmark.c
+++ b/src/code/z_eff_footmark.c
@@ -1,14 +1,19 @@
-#include "global.h"
+#include "z64eff_footmark.h"
+#include "z64.h"
+#include "macros.h"
+#include "functions.h"
+
+#include "assets/code/eff_footmark/eff_footmark.c"
void EffFootmark_Init(PlayState* play) {
EffFootmark* footmark;
s32 i;
- for (footmark = play->footprintInfo, i = 0; i < 100; i++, footmark++) {
+ for (footmark = play->footprintInfo, i = 0; i < ARRAY_COUNT(play->footprintInfo); i++, footmark++) {
footmark->actor = NULL;
- footmark->location.x = 0;
- footmark->location.y = 0;
- footmark->location.z = 0;
+ footmark->pos.x = 0;
+ footmark->pos.y = 0;
+ footmark->pos.z = 0;
footmark->flags = 0;
footmark->id = 0;
footmark->alpha = 0;
@@ -16,47 +21,45 @@ void EffFootmark_Init(PlayState* play) {
}
}
-void EffFootmark_Add(PlayState* play, MtxF* displayMatrix, Actor* actor, u8 id, Vec3f* location, u16 size, u8 red,
- u8 green, u8 blue, u16 alpha, u16 alphaChange, u16 fadeoutDelay) {
+void EffFootmark_Add(PlayState* play, MtxF* mf, Actor* actor, u8 id, Vec3f* pos, u16 size, u8 red, u8 green, u8 blue,
+ u16 alpha, u16 alphaChange, u16 fadeOutDelay) {
s32 i;
EffFootmark* footmark;
EffFootmark* destination = NULL;
EffFootmark* oldest = NULL;
- s32 isNew = 1;
+ s32 isNew = true;
- for (footmark = play->footprintInfo, i = 0; i < 100; i++, footmark++) {
- if (((actor == footmark->actor) && (footmark->id == id)) && ((footmark->flags & 1) == 0)) {
- if (fabsf((footmark->location).x - location->x) <= 1) {
- if (fabsf((footmark->location).z - location->z) <= 1) {
- isNew = 0;
+ for (footmark = play->footprintInfo, i = 0; i < ARRAY_COUNT(play->footprintInfo); i++, footmark++) {
+ if (((actor == footmark->actor) && (footmark->id == id)) && !(footmark->flags & FOOTMARK_FLAG_1)) {
+ if (fabsf(footmark->pos.x - pos->x) <= 1) {
+ if (fabsf(footmark->pos.z - pos->z) <= 1) {
+ isNew = false;
break;
}
}
- // This footmark is being re-added at a new location. Let's mark this one to start fading out.
- footmark->flags = 1;
+ // This footmark is being re-added at a new pos. Let's mark this one to start fading out.
+ footmark->flags = FOOTMARK_FLAG_1;
}
if (footmark->actor == NULL) {
destination = footmark;
- } else {
- if (destination == NULL) {
- if ((oldest != NULL && footmark->age > oldest->age) || (oldest == NULL)) {
- oldest = footmark;
- }
+ } else if (destination == NULL) {
+ if (((oldest != NULL) && (footmark->age > oldest->age)) || (oldest == NULL)) {
+ oldest = footmark;
}
}
}
- if ((isNew) && ((destination != NULL || (oldest != NULL)))) {
+ if (isNew && ((destination != NULL) || (oldest != NULL))) {
if (destination == NULL) {
destination = oldest;
}
- Matrix_MtxFCopy(&destination->displayMatrix, displayMatrix);
+ Matrix_MtxFCopy(&destination->mf, mf);
destination->actor = actor;
- destination->location.x = location->x;
- destination->location.y = location->y;
- destination->location.z = location->z;
+ destination->pos.x = pos->x;
+ destination->pos.y = pos->y;
+ destination->pos.z = pos->z;
destination->flags = 0;
destination->id = id;
destination->red = red;
@@ -65,7 +68,7 @@ void EffFootmark_Add(PlayState* play, MtxF* displayMatrix, Actor* actor, u8 id,
destination->alpha = alpha;
destination->alphaChange = alphaChange;
destination->size = size;
- destination->fadeoutDelay = fadeoutDelay;
+ destination->fadeOutDelay = fadeOutDelay;
destination->age = 0;
}
}
@@ -74,22 +77,24 @@ void EffFootmark_Update(PlayState* play) {
EffFootmark* footmark;
s32 i;
- for (footmark = play->footprintInfo, i = 0; i < 100; i++, footmark++) {
- if (footmark->actor != NULL) {
- if ((footmark->flags & 1) == 1) {
- if ((u32)footmark->age < UINT16_MAX) {
- footmark->age++;
- }
+ for (footmark = play->footprintInfo, i = 0; i < ARRAY_COUNT(play->footprintInfo); i++, footmark++) {
+ if (footmark->actor == NULL) {
+ continue;
+ }
- if (footmark->fadeoutDelay == 0) {
- if (footmark->alpha >= footmark->alphaChange + 0x1000) {
- footmark->alpha -= footmark->alphaChange;
- } else {
- footmark->actor = NULL;
- }
- } else if (footmark->fadeoutDelay > 0) {
- footmark->fadeoutDelay--;
+ if (CHECK_FLAG_ALL(footmark->flags, FOOTMARK_FLAG_1)) {
+ if ((u32)footmark->age < UINT16_MAX) {
+ footmark->age++;
+ }
+
+ if (footmark->fadeOutDelay == 0) {
+ if (footmark->alpha >= footmark->alphaChange + 0x1000) {
+ footmark->alpha -= footmark->alphaChange;
+ } else {
+ footmark->actor = NULL;
}
+ } else if (footmark->fadeOutDelay > 0) {
+ footmark->fadeOutDelay--;
}
}
}
@@ -102,11 +107,11 @@ void EffFootmark_Draw(PlayState* play) {
func_8012C448(play->state.gfxCtx);
- gSPDisplayList(gfxCtx->polyXlu.p++, D_801BC240);
+ gSPDisplayList(gfxCtx->polyXlu.p++, gEffFootprintMaterialDL);
- for (footmark = play->footprintInfo, i = 0; i < 100; i++, footmark++) {
+ for (footmark = play->footprintInfo, i = 0; i < ARRAY_COUNT(play->footprintInfo); i++, footmark++) {
if (footmark->actor != NULL) {
- Matrix_Put(&footmark->displayMatrix);
+ Matrix_Put(&footmark->mf);
Matrix_Scale(footmark->size * (1.0f / 0x100) * 0.7f, 1, footmark->size * (1.0f / 0x100), MTXMODE_APPLY);
gSPMatrix(gfxCtx->polyXlu.p++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD);
@@ -114,7 +119,7 @@ void EffFootmark_Draw(PlayState* play) {
gDPSetPrimColor(gfxCtx->polyXlu.p++, 0, 0, footmark->red, footmark->green, footmark->blue,
footmark->alpha >> 8);
- gSPDisplayList(gfxCtx->polyXlu.p++, D_801BC288);
+ gSPDisplayList(gfxCtx->polyXlu.p++, gEffFootprintModelDL);
}
}
}
diff --git a/src/code/z_eff_spark.c b/src/code/z_eff_spark.c
index fd92516df..fdd25a6b4 100644
--- a/src/code/z_eff_spark.c
+++ b/src/code/z_eff_spark.c
@@ -120,7 +120,7 @@ s32 EffectSpark_Update(void* thisx) {
}
void EffectSpark_Draw(void* thisx, GraphicsContext* gfxCtx) {
- Vtx* vertices;
+ Vtx* vtx;
EffectSpark* this = (EffectSpark*)thisx;
PlayState* play = Effect_GetPlayState();
s32 i;
@@ -162,8 +162,8 @@ void EffectSpark_Draw(void* thisx, GraphicsContext* gfxCtx) {
gSPSetGeometryMode(POLY_XLU_DISP++, G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH);
gDPPipeSync(POLY_XLU_DISP++);
- vertices = GRAPH_ALLOC(gfxCtx, ALIGN16(this->numElements * sizeof(Vtx[4])));
- if (vertices == NULL) {
+ vtx = GRAPH_ALLOC(gfxCtx, this->numElements * (4 * sizeof(Vtx)));
+ if (vtx == NULL) {
goto end;
}
@@ -202,49 +202,49 @@ void EffectSpark_Draw(void* thisx, GraphicsContext* gfxCtx) {
SkinMatrix_MtxFMtxFMult(&spEC, &play->billboardMtxF, &sp6C);
SkinMatrix_MtxFMtxFMult(&sp6C, &spAC, &sp12C);
- vertices[j].v.ob[0] = -32;
- vertices[j].v.ob[1] = -32;
- vertices[j].v.ob[2] = 0;
- vertices[j].v.cn[0] = sp1D3;
- vertices[j].v.cn[1] = sp1D2;
- vertices[j].v.cn[2] = sp1D1;
- vertices[j].v.cn[3] = sp1D0;
- vertices[j].v.tc[0] = 0;
- vertices[j].v.tc[1] = 1024;
- vertices[j].v.flag = 0;
+ vtx[j].v.ob[0] = -32;
+ vtx[j].v.ob[1] = -32;
+ vtx[j].v.ob[2] = 0;
+ vtx[j].v.cn[0] = sp1D3;
+ vtx[j].v.cn[1] = sp1D2;
+ vtx[j].v.cn[2] = sp1D1;
+ vtx[j].v.cn[3] = sp1D0;
+ vtx[j].v.tc[0] = 0;
+ vtx[j].v.tc[1] = 1024;
+ vtx[j].v.flag = 0;
- vertices[j + 1].v.ob[0] = 32;
- vertices[j + 1].v.ob[1] = 32;
- vertices[j + 1].v.ob[2] = 0;
- vertices[j + 1].v.cn[0] = sp1CF;
- vertices[j + 1].v.cn[1] = sp1CE;
- vertices[j + 1].v.cn[2] = sp1CD;
- vertices[j + 1].v.cn[3] = sp1CC;
- vertices[j + 1].v.tc[0] = 1024;
- vertices[j + 1].v.tc[1] = 0;
- vertices[j + 1].v.flag = 0;
+ vtx[j + 1].v.ob[0] = 32;
+ vtx[j + 1].v.ob[1] = 32;
+ vtx[j + 1].v.ob[2] = 0;
+ vtx[j + 1].v.cn[0] = sp1CF;
+ vtx[j + 1].v.cn[1] = sp1CE;
+ vtx[j + 1].v.cn[2] = sp1CD;
+ vtx[j + 1].v.cn[3] = sp1CC;
+ vtx[j + 1].v.tc[0] = 1024;
+ vtx[j + 1].v.tc[1] = 0;
+ vtx[j + 1].v.flag = 0;
- vertices[j + 2].v.ob[0] = -32;
- vertices[j + 2].v.ob[1] = 32;
- vertices[j + 2].v.ob[2] = 0;
- vertices[j + 2].v.cn[0] = sp1CB;
- vertices[j + 2].v.cn[1] = sp1CA;
- vertices[j + 2].v.cn[2] = sp1C9;
- vertices[j + 2].v.cn[3] = sp1C8;
- vertices[j + 2].v.tc[0] = 0;
- vertices[j + 2].v.tc[1] = 0;
- vertices[j + 2].v.flag = 0;
+ vtx[j + 2].v.ob[0] = -32;
+ vtx[j + 2].v.ob[1] = 32;
+ vtx[j + 2].v.ob[2] = 0;
+ vtx[j + 2].v.cn[0] = sp1CB;
+ vtx[j + 2].v.cn[1] = sp1CA;
+ vtx[j + 2].v.cn[2] = sp1C9;
+ vtx[j + 2].v.cn[3] = sp1C8;
+ vtx[j + 2].v.tc[0] = 0;
+ vtx[j + 2].v.tc[1] = 0;
+ vtx[j + 2].v.flag = 0;
- vertices[j + 3].v.ob[0] = 32;
- vertices[j + 3].v.ob[1] = -32;
- vertices[j + 3].v.ob[2] = 0;
- vertices[j + 3].v.cn[0] = sp1C7;
- vertices[j + 3].v.cn[1] = sp1C6;
- vertices[j + 3].v.cn[2] = sp1C5;
- vertices[j + 3].v.cn[3] = sp1C4;
- vertices[j + 3].v.tc[0] = 1024;
- vertices[j + 3].v.tc[1] = 1024;
- vertices[j + 3].v.flag = 0;
+ vtx[j + 3].v.ob[0] = 32;
+ vtx[j + 3].v.ob[1] = -32;
+ vtx[j + 3].v.ob[2] = 0;
+ vtx[j + 3].v.cn[0] = sp1C7;
+ vtx[j + 3].v.cn[1] = sp1C6;
+ vtx[j + 3].v.cn[2] = sp1C5;
+ vtx[j + 3].v.cn[3] = sp1C4;
+ vtx[j + 3].v.tc[0] = 1024;
+ vtx[j + 3].v.tc[1] = 1024;
+ vtx[j + 3].v.flag = 0;
j += 4;
@@ -254,7 +254,7 @@ void EffectSpark_Draw(void* thisx, GraphicsContext* gfxCtx) {
}
gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPVertex(POLY_XLU_DISP++, &vertices[4 * i], 4, 0);
+ gSPVertex(POLY_XLU_DISP++, &vtx[4 * i], 4, 0);
gSP2Triangles(POLY_XLU_DISP++, 2, 0, 3, 0, 2, 3, 1, 0);
}
diff --git a/src/code/z_eff_ss_dead.c b/src/code/z_eff_ss_dead.c
index b7c6af97e..6c416e3c8 100644
--- a/src/code/z_eff_ss_dead.c
+++ b/src/code/z_eff_ss_dead.c
@@ -50,7 +50,7 @@ void func_800AE5A0(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
gDPPipeSync(POLY_OPA_DISP++);
- POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP);
+ POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
CLOSE_DISPS(play->state.gfxCtx);
}
@@ -105,7 +105,7 @@ void func_800AE8EC(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
gDPPipeSync(POLY_XLU_DISP++);
- POLY_XLU_DISP = func_801660B8(play, POLY_XLU_DISP);
+ POLY_XLU_DISP = Play_SetFog(play, POLY_XLU_DISP);
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/code/z_eff_tire_mark.c b/src/code/z_eff_tire_mark.c
index 532e8e2fb..d7754c5a7 100644
--- a/src/code/z_eff_tire_mark.c
+++ b/src/code/z_eff_tire_mark.c
@@ -1,8 +1,8 @@
#include "global.h"
#include "objects/gameplay_keep/gameplay_keep.h"
-void func_800AE930(CollisionContext* colCtx, EffectTireMark* this, Vec3f* pos, f32 arg3, s16 arg4,
- CollisionPoly* colPoly, s32 arg6) {
+void func_800AE930(CollisionContext* colCtx, EffectTireMark* this, Vec3f* pos, f32 arg3, s16 angle,
+ CollisionPoly* colPoly, s32 bgId) {
Vec3s spB8;
Vec3s spB0;
EffectTireMarkElement* spAC;
@@ -11,17 +11,17 @@ void func_800AE930(CollisionContext* colCtx, EffectTireMark* this, Vec3f* pos, f
u32 spA0;
Vec3s* vtxList = colCtx->colHeader->vtxList;
- if ((arg6 != 50) || (this->numElements >= (ARRAY_COUNT(this->elements) - 1)) || (colPoly == NULL)) {
+ if ((bgId != BGCHECK_SCENE) || (this->numElements >= (ARRAY_COUNT(this->elements) - 1)) || (colPoly == NULL)) {
func_800AEF44(this);
return;
}
- spB8.x = (Math_SinS(arg4 - 0x4000) * arg3) + pos->x;
- spB8.z = (Math_CosS(arg4 - 0x4000) * arg3) + pos->z;
+ spB8.x = (Math_SinS(angle - 0x4000) * arg3) + pos->x;
+ spB8.z = (Math_CosS(angle - 0x4000) * arg3) + pos->z;
spB8.y = func_800BFD84(colPoly, spB8.x, spB8.z) + 2.0f;
- spB0.x = (Math_SinS(arg4 + 0x4000) * arg3) + pos->x;
- spB0.z = (Math_CosS(arg4 + 0x4000) * arg3) + pos->z;
+ spB0.x = (Math_SinS(angle + 0x4000) * arg3) + pos->x;
+ spB0.z = (Math_CosS(angle + 0x4000) * arg3) + pos->z;
spB0.y = func_800BFD84(colPoly, spB0.x, spB0.z) + 2.0f;
spAC = &this->elements[this->numElements - 1];
@@ -226,7 +226,7 @@ void EffectTireMark_Draw(void* thisx, GraphicsContext* gfxCtx) {
OPEN_DISPS(gfxCtx);
if (this->numElements >= 2) {
- vtx = GRAPH_ALLOC(gfxCtx, ALIGN16(this->numElements * sizeof(Vtx[2])));
+ vtx = GRAPH_ALLOC(gfxCtx, this->numElements * (2 * sizeof(Vtx)));
if (vtx != NULL) {
gSPMatrix(POLY_OPA_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/code/z_effect_soft_sprite.c b/src/code/z_effect_soft_sprite.c
index ea8a546d6..775b68f01 100644
--- a/src/code/z_effect_soft_sprite.c
+++ b/src/code/z_effect_soft_sprite.c
@@ -8,7 +8,7 @@ void EffectSS_Init(PlayState* play, s32 numEntries) {
EffectSs* effectsSs;
EffectSsOverlay* overlay;
- sEffectSsInfo.data_table = (EffectSs*)THA_AllocEndAlign16(&play->state.heap, numEntries * sizeof(EffectSs));
+ sEffectSsInfo.data_table = (EffectSs*)THA_AllocTailAlign16(&play->state.heap, numEntries * sizeof(EffectSs));
sEffectSsInfo.searchIndex = 0;
sEffectSsInfo.size = numEntries;
diff --git a/src/code/z_effect_soft_sprite_dlftbls.c b/src/code/z_effect_soft_sprite_dlftbls.c
index e215cdee9..fff77feff 100644
--- a/src/code/z_effect_soft_sprite_dlftbls.c
+++ b/src/code/z_effect_soft_sprite_dlftbls.c
@@ -1,56 +1,34 @@
-#include "global.h"
-#include "initvars.h"
+#include "z64effect.h"
+#include "segment_symbols.h"
-#define EFFECT_SS_OVERLAY(name) \
- { \
- SEGMENT_ROM_START(ovl_##name), SEGMENT_ROM_END(ovl_##name), SEGMENT_START(ovl_##name), \
- SEGMENT_END(ovl_##name), NULL, &name##_InitVars, 1, \
- }
+// Init Vars and linker symbol declarations (used in the table below)
+#define DEFINE_EFFECT_SS(name, _enumValue) \
+ extern EffectSsInit name##_InitVars; \
+ DECLARE_OVERLAY_SEGMENT(name)
-#define EFFECT_SS_OVERLAY_INTERNAL(name) \
- { 0, 0, NULL, NULL, NULL, &name##_InitVars, 1 }
+#define DEFINE_EFFECT_SS_UNSET(_enumValue)
-#define EFFECT_SS_OVERLAY_UNSET \
- { 0 }
+#include "tables/effect_ss_table.h"
+
+#undef DEFINE_EFFECT_SS
+#undef DEFINE_EFFECT_SS_UNSET
+
+#define DEFINE_EFFECT_SS(name, _enumValue) \
+ { \
+ SEGMENT_ROM_START(ovl_##name), \
+ SEGMENT_ROM_END(ovl_##name), \
+ SEGMENT_START(ovl_##name), \
+ SEGMENT_END(ovl_##name), \
+ NULL, \
+ &name##_InitVars, \
+ 1, \
+ },
+
+#define DEFINE_EFFECT_SS_UNSET(_enumValue) { 0 },
EffectSsOverlay gParticleOverlayTable[] = {
- EFFECT_SS_OVERLAY(Effect_Ss_Dust),
- EFFECT_SS_OVERLAY(Effect_Ss_Kirakira),
- EFFECT_SS_OVERLAY_UNSET,
- EFFECT_SS_OVERLAY(Effect_Ss_Bomb2),
- EFFECT_SS_OVERLAY(Effect_Ss_Blast),
- EFFECT_SS_OVERLAY(Effect_Ss_G_Spk),
- EFFECT_SS_OVERLAY(Effect_Ss_D_Fire),
- EFFECT_SS_OVERLAY(Effect_Ss_Bubble),
- EFFECT_SS_OVERLAY_UNSET,
- EFFECT_SS_OVERLAY(Effect_Ss_G_Ripple),
- EFFECT_SS_OVERLAY(Effect_Ss_G_Splash),
- EFFECT_SS_OVERLAY_UNSET,
- EFFECT_SS_OVERLAY(Effect_Ss_G_Fire),
- EFFECT_SS_OVERLAY(Effect_Ss_Lightning),
- EFFECT_SS_OVERLAY(Effect_Ss_Dt_Bubble),
- EFFECT_SS_OVERLAY(Effect_Ss_Hahen),
- EFFECT_SS_OVERLAY(Effect_Ss_Stick),
- EFFECT_SS_OVERLAY(Effect_Ss_Sibuki),
- EFFECT_SS_OVERLAY_UNSET,
- EFFECT_SS_OVERLAY_UNSET,
- EFFECT_SS_OVERLAY(Effect_Ss_Stone1),
- EFFECT_SS_OVERLAY(Effect_Ss_Hitmark),
- EFFECT_SS_OVERLAY(Effect_Ss_Fhg_Flash),
- EFFECT_SS_OVERLAY(Effect_Ss_K_Fire),
- EFFECT_SS_OVERLAY(Effect_Ss_Solder_Srch_Ball),
- EFFECT_SS_OVERLAY(Effect_Ss_Kakera),
- EFFECT_SS_OVERLAY(Effect_Ss_Ice_Piece),
- EFFECT_SS_OVERLAY(Effect_Ss_En_Ice),
- EFFECT_SS_OVERLAY(Effect_Ss_Fire_Tail),
- EFFECT_SS_OVERLAY(Effect_Ss_En_Fire),
- EFFECT_SS_OVERLAY(Effect_Ss_Extra),
- EFFECT_SS_OVERLAY_UNSET,
- EFFECT_SS_OVERLAY(Effect_Ss_Dead_Db),
- EFFECT_SS_OVERLAY(Effect_Ss_Dead_Dd),
- EFFECT_SS_OVERLAY(Effect_Ss_Dead_Ds),
- EFFECT_SS_OVERLAY_UNSET,
- EFFECT_SS_OVERLAY(Effect_Ss_Ice_Smoke),
- EFFECT_SS_OVERLAY(Effect_En_Ice_Block),
- EFFECT_SS_OVERLAY(Effect_Ss_Sbn),
+#include "tables/effect_ss_table.h"
};
+
+#undef DEFINE_EFFECT_SS
+#undef DEFINE_EFFECT_SS_UNSET
diff --git a/src/code/z_effect_soft_sprite_old_init.c b/src/code/z_effect_soft_sprite_old_init.c
index 4f24651d1..0b08f4dd0 100644
--- a/src/code/z_effect_soft_sprite_old_init.c
+++ b/src/code/z_effect_soft_sprite_old_init.c
@@ -805,7 +805,7 @@ void EffectSsEnIce_SpawnFlying(PlayState* play, Actor* actor, Vec3f* pos, Color_
initParams.scale = scale;
if (actor != NULL) {
- Actor_PlaySfxAtPos(actor, NA_SE_PL_FREEZE_S);
+ Actor_PlaySfx(actor, NA_SE_PL_FREEZE_S);
}
EffectSs_Spawn(play, EFFECT_SS_EN_ICE, 80, &initParams);
@@ -897,7 +897,7 @@ void EffectSsEnFire_SpawnVec3f(PlayState* play, Actor* actor, Vec3f* pos, s16 sc
initParams.bodyPart = bodyPart;
if (actor != NULL) {
- Actor_PlaySfxAtPos(actor, NA_SE_EV_FLAME_IGNITION);
+ Actor_PlaySfx(actor, NA_SE_EV_FLAME_IGNITION);
}
EffectSs_Spawn(play, EFFECT_SS_EN_FIRE, 128, &initParams);
@@ -917,7 +917,7 @@ void EffectSsEnFire_SpawnVec3s(PlayState* play, Actor* actor, Vec3s* pos, s16 sc
initParams.bodyPart = bodyPart;
if (actor != NULL) {
- Actor_PlaySfxAtPos(actor, NA_SE_EV_FLAME_IGNITION);
+ Actor_PlaySfx(actor, NA_SE_EV_FLAME_IGNITION);
}
EffectSs_Spawn(play, EFFECT_SS_EN_FIRE, 128, &initParams);
diff --git a/src/code/z_elf_message.c b/src/code/z_elf_message.c
index 11e4a2743..1b005443d 100644
--- a/src/code/z_elf_message.c
+++ b/src/code/z_elf_message.c
@@ -1,62 +1,93 @@
+/**
+ * @file z_elf_message.c
+ *
+ * This file provides quest hints through Tatl.
+ *
+ * In Ocarina of Time, this was a more elaborate system that determined
+ * which hint to give based on a script.
+ * That system has been replaced with a single function that hardcodes the checks.
+ */
#include "global.h"
-u16 ElfMessage_GetFirstCycleHint(PlayState* play) {
+/**
+ * Gets the relevant text ID for Tatl hints in first cycle.
+ */
+u16 QuestHint_GetTatlTextId(PlayState* play) {
if (INV_CONTENT(ITEM_OCARINA) == ITEM_OCARINA) {
return 0;
}
+
if (CURRENT_DAY <= 0) {
return 0;
}
- if (gSaveContext.save.weekEventReg[88] & 0x20) {
+
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_88_20)) {
return 0;
}
- if (gSaveContext.save.weekEventReg[79] & 0x10) {
- if (gSaveContext.save.weekEventReg[8] & 0x40) {
+
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_10)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40)) {
return 0;
}
+
return 0x224;
}
- if (!(gSaveContext.save.weekEventReg[8] & 0x80)) {
- if (gSaveContext.save.weekEventReg[9] & 1) {
+
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_08_80)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_09_01)) {
return 0x21E;
}
+
if (play->sceneId == SCENE_YOUSEI_IZUMI) {
return 0;
}
+
return 0x21D;
}
- if (gSaveContext.save.playerData.isMagicAcquired != true) {
+
+ if (gSaveContext.save.saveInfo.playerData.isMagicAcquired != true) {
return 0x21F;
}
+
if (INV_CONTENT(ITEM_DEED_LAND) == ITEM_DEED_LAND) {
if (play->sceneId != SCENE_OKUJOU) {
return 0x244;
}
+
return 0;
}
+
if (INV_CONTENT(ITEM_MOON_TEAR) == ITEM_MOON_TEAR) {
- if (gSaveContext.save.weekEventReg[86] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_86_04)) {
return 0x242;
}
+
return 0x243;
}
- if (gSaveContext.save.weekEventReg[74] & 0x20) {
+
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_74_20)) {
return 0x223;
}
- if (gSaveContext.save.weekEventReg[73] & 0x80) {
+
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_80)) {
return 0x222;
}
- if (gSaveContext.save.weekEventReg[73] & 0x20) {
+
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_20)) {
return 0x221;
}
- if (gSaveContext.save.weekEventReg[77] & 2) {
- if (gSaveContext.save.weekEventReg[73] & 0x10) {
+
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_02)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10)) {
return 0x240;
}
+
return 0x241;
}
- if ((gSaveContext.save.weekEventReg[86] & 2) || (gSaveContext.save.weekEventReg[73] & 0x40)) {
+
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_86_02) || CHECK_WEEKEVENTREG(WEEKEVENTREG_73_40)) {
return 0x23F;
}
+
return 0x220;
}
diff --git a/src/code/z_en_a_keep.c b/src/code/z_en_a_keep.c
index 267da4e40..a9bd49f6f 100644
--- a/src/code/z_en_a_keep.c
+++ b/src/code/z_en_a_keep.c
@@ -1,21 +1,65 @@
#include "global.h"
+#include "assets/objects/gameplay_keep/gameplay_keep.h"
+
+#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8)
#define THIS ((EnAObj*)thisx)
-void EnAObj_Update1(EnAObj* this, PlayState* play);
-void EnAObj_Update2(EnAObj* this, PlayState* play);
+void EnAObj_Init(Actor* thisx, PlayState* play);
+void EnAObj_Destroy(Actor* thisx, PlayState* play);
+void EnAObj_Update(Actor* thisx, PlayState* play);
+void EnAObj_Draw(Actor* thisx, PlayState* play);
+
+void EnAObj_Idle(EnAObj* this, PlayState* play);
+void EnAObj_Talk(EnAObj* this, PlayState* play);
+
+ActorInit En_A_Obj_InitVars = {
+ ACTOR_EN_A_OBJ,
+ ACTORCAT_PROP,
+ FLAGS,
+ GAMEPLAY_KEEP,
+ sizeof(EnAObj),
+ (ActorFunc)EnAObj_Init,
+ (ActorFunc)EnAObj_Destroy,
+ (ActorFunc)EnAObj_Update,
+ (ActorFunc)EnAObj_Draw,
+};
+
+static ColliderCylinderInit sCylinderInit = {
+ {
+ COLTYPE_NONE,
+ AT_NONE,
+ AC_NONE,
+ OC1_ON | OC1_TYPE_ALL,
+ OC2_TYPE_2,
+ COLSHAPE_CYLINDER,
+ },
+ {
+ ELEMTYPE_UNK0,
+ { 0x00000000, 0x00, 0x00 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_NONE,
+ BUMP_NONE,
+ OCELEM_ON,
+ },
+ { 25, 60, 0, { 0, 0, 0 } },
+};
+
+static InitChainEntry sInitChain[] = {
+ ICHAIN_U8(targetMode, 0, ICHAIN_STOP),
+};
void EnAObj_Init(Actor* thisx, PlayState* play) {
EnAObj* this = THIS;
- this->actor.textId = ((this->actor.params >> 8) & 0xFF) | 0x300;
- this->actor.params = (this->actor.params & 0xFF) - 9;
- Actor_ProcessInitChain(&this->actor, &enAObjInitVar);
+ this->actor.textId = AOBJ_GET_TEXTID(&this->actor);
+ this->actor.params = AOBJ_GET_TYPE(&this->actor);
+ Actor_ProcessInitChain(&this->actor, sInitChain);
ActorShape_Init(&this->actor.shape, 0, ActorShadow_DrawCircle, 12);
- Collider_InitAndSetCylinder(play, &this->collision, &this->actor, &enAObjCylinderInit);
+ Collider_InitAndSetCylinder(play, &this->collision, &this->actor, &sCylinderInit);
Collider_UpdateCylinder(&this->actor, &this->collision);
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
- this->actionFunc = EnAObj_Update1;
+ this->actionFunc = EnAObj_Idle;
}
void EnAObj_Destroy(Actor* thisx, PlayState* play) {
@@ -24,23 +68,23 @@ void EnAObj_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->collision);
}
-void EnAObj_Update1(EnAObj* this, PlayState* play) {
+void EnAObj_Idle(EnAObj* this, PlayState* play) {
s32 yawDiff;
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- this->actionFunc = EnAObj_Update2;
+ this->actionFunc = EnAObj_Talk;
} else {
yawDiff = ABS_ALT((s16)(this->actor.yawTowardsPlayer - this->actor.shape.rot.y));
- if ((yawDiff < 0x2800) || ((this->actor.params == 1) && (yawDiff > 0x5800))) {
+ if ((yawDiff < 0x2800) || ((this->actor.params == AOBJ_SIGNPOST_ARROW) && (yawDiff > 0x5800))) {
func_800B863C(&this->actor, play);
}
}
}
-void EnAObj_Update2(EnAObj* this, PlayState* play) {
+void EnAObj_Talk(EnAObj* this, PlayState* play) {
if (Actor_TextboxIsClosing(&this->actor, play)) {
- this->actionFunc = EnAObj_Update1;
+ this->actionFunc = EnAObj_Idle;
}
}
@@ -52,6 +96,11 @@ void EnAObj_Update(Actor* thisx, PlayState* play) {
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collision.base);
}
+static Gfx* sDLists[] = {
+ gSignRectangularDL, // AOBJ_SIGNPOST_OBLONG
+ gSignDirectionalDL, // AOBJ_SIGNPOST_ARROW
+};
+
void EnAObj_Draw(Actor* thisx, PlayState* play) {
- Gfx_DrawDListOpa(play, enAObjDisplayLists[thisx->params]);
+ Gfx_DrawDListOpa(play, sDLists[thisx->params]);
}
diff --git a/src/code/z_en_hy_code.c b/src/code/z_en_hy_code.c
index 19a52c1b4..674f4bfa4 100644
--- a/src/code/z_en_hy_code.c
+++ b/src/code/z_en_hy_code.c
@@ -69,7 +69,7 @@ EnDoor* EnHy_FindNearestDoor(Actor* actor, PlayState* play) {
do {
doorIter = SubS_FindActor(play, doorIter, ACTORCAT_DOOR, ACTOR_EN_DOOR);
door = (EnDoor*)doorIter;
- dist = Actor_DistanceBetweenActors(actor, &door->dyna.actor);
+ dist = Actor_WorldDistXYZToActor(actor, &door->dyna.actor);
if (!isSetup || (dist < minDist)) {
nearestDoor = door;
minDist = dist;
@@ -140,7 +140,7 @@ void func_800F0BB4(EnHy* enHy, PlayState* play, EnDoor* door, s16 arg3, s16 arg4
EnHy_ChangeObjectAndAnim(enHy, play, (animIndex == 0) ? arg3 : arg4);
enHy->skelAnime.baseTransl = *enHy->skelAnime.jointTable;
enHy->skelAnime.prevTransl = *enHy->skelAnime.jointTable;
- enHy->skelAnime.moveFlags |= 3;
+ enHy->skelAnime.moveFlags |= (ANIM_FLAG_UPDATEY | ANIM_FLAG_1);
AnimationContext_SetMoveActor(play, &enHy->actor, &enHy->skelAnime, 1.0f);
door->unk_1A1 = 1;
door->animIndex = animIndex;
@@ -207,8 +207,8 @@ s32 EnHy_MoveForwards(EnHy* enHy, f32 speedTarget) {
s32 reachedEnd = false;
Vec3f curPointPos;
- Math_SmoothStepToF(&enHy->actor.speedXZ, speedTarget, 0.4f, 1000.0f, 0.0f);
- rotStep = enHy->actor.speedXZ * 400.0f;
+ Math_SmoothStepToF(&enHy->actor.speed, speedTarget, 0.4f, 1000.0f, 0.0f);
+ rotStep = enHy->actor.speed * 400.0f;
if (SubS_CopyPointFromPath(enHy->path, enHy->curPoint, &curPointPos) &&
SubS_MoveActorToPoint(&enHy->actor, &curPointPos, rotStep)) {
enHy->curPoint++;
@@ -225,8 +225,8 @@ s32 EnHy_MoveBackwards(EnHy* enHy, f32 speedTarget) {
s32 reachedEnd = false;
Vec3f curPointPos;
- Math_SmoothStepToF(&enHy->actor.speedXZ, speedTarget, 0.4f, 1000.0f, 0.0f);
- rotStep = enHy->actor.speedXZ * 400.0f;
+ Math_SmoothStepToF(&enHy->actor.speed, speedTarget, 0.4f, 1000.0f, 0.0f);
+ rotStep = enHy->actor.speed * 400.0f;
if (SubS_CopyPointFromPath(enHy->path, enHy->curPoint, &curPointPos) &&
SubS_MoveActorToPoint(&enHy->actor, &curPointPos, rotStep)) {
enHy->curPoint--;
@@ -250,29 +250,30 @@ void EnHy_UpdateCollider(EnHy* enHy, PlayState* play) {
s32 EnHy_PlayWalkingSound(EnHy* enHy, PlayState* play, f32 distAboveThreshold) {
u8 wasLeftFootOnGround = enHy->isLeftFootOnGround;
u8 wasRightFootOnGround = enHy->isRightFootOnGround;
- s32 waterSfxId;
+ SurfaceSfxOffset surfaceSfxOffset;
u16 sfxId;
u8 isFootOnGround;
- if (enHy->actor.bgCheckFlags & 0x20) {
+ if (enHy->actor.bgCheckFlags & BGCHECKFLAG_WATER) {
if (enHy->actor.depthInWater < 20.0f) {
- waterSfxId = NA_SE_PL_WALK_WATER0 - SFX_FLAG;
+ surfaceSfxOffset = SURFACE_SFX_OFFSET_WATER_SHALLOW;
} else {
- waterSfxId = NA_SE_PL_WALK_WATER1 - SFX_FLAG;
+ surfaceSfxOffset = SURFACE_SFX_OFFSET_WATER_DEEP;
}
- sfxId = waterSfxId + SFX_FLAG;
+ sfxId = NA_SE_PL_WALK_GROUND + surfaceSfxOffset;
} else {
- sfxId = SurfaceType_GetSfx(&play->colCtx, enHy->actor.floorPoly, enHy->actor.floorBgId) + SFX_FLAG;
+ sfxId = NA_SE_PL_WALK_GROUND +
+ SurfaceType_GetSfxOffset(&play->colCtx, enHy->actor.floorPoly, enHy->actor.floorBgId);
}
enHy->isLeftFootOnGround = isFootOnGround = SubS_IsFloorAbove(play, &enHy->leftFootPos, distAboveThreshold);
if (enHy->isLeftFootOnGround && !wasLeftFootOnGround && isFootOnGround) {
- Actor_PlaySfxAtPos(&enHy->actor, sfxId);
+ Actor_PlaySfx(&enHy->actor, sfxId);
}
enHy->isRightFootOnGround = isFootOnGround = SubS_IsFloorAbove(play, &enHy->rightFootPos, distAboveThreshold);
if (enHy->isRightFootOnGround && !wasRightFootOnGround && isFootOnGround) {
- Actor_PlaySfxAtPos(&enHy->actor, sfxId);
+ Actor_PlaySfx(&enHy->actor, sfxId);
}
return false;
diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c
index d6ab737c7..44e8703a2 100644
--- a/src/code/z_en_item00.c
+++ b/src/code/z_en_item00.c
@@ -23,7 +23,7 @@ void EnItem00_DrawSprite(EnItem00* this, PlayState* play);
void EnItem00_DrawHeartContainer(EnItem00* this, PlayState* play);
void EnItem00_DrawHeartPiece(EnItem00* this, PlayState* play);
-const ActorInit En_Item00_InitVars = {
+ActorInit En_Item00_InitVars = {
ACTOR_EN_ITEM00,
ACTORCAT_MISC,
FLAGS,
@@ -86,7 +86,7 @@ void EnItem00_Init(Actor* thisx, PlayState* play) {
this->collectibleFlag = 0;
this->actor.params = ITEM00_RECOVERY_HEART;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
}
@@ -219,7 +219,7 @@ void EnItem00_Init(Actor* thisx, PlayState* play) {
this->unk152 = 15;
this->unk14C = 35;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.velocity.y = 0.0f;
this->actor.gravity = 0.0f;
@@ -299,7 +299,7 @@ void EnItem00_Init(Actor* thisx, PlayState* play) {
}
if ((getItemId != GI_NONE) && !Actor_HasParent(&this->actor, play)) {
- Actor_PickUp(&this->actor, play, getItemId, 50.0f, 20.0f);
+ Actor_OfferGetItem(&this->actor, play, getItemId, 50.0f, 20.0f);
}
this->actionFunc = func_800A6A40;
@@ -346,7 +346,7 @@ void func_800A640C(EnItem00* this, PlayState* play) {
this->actor.shape.yOffset = (Math_SinS(this->actor.shape.rot.y) * 150.0f) + 850.0f;
}
- Math_SmoothStepToF(&this->actor.speedXZ, 0.0f, 1.0f, 0.5f, 0.0f);
+ Math_SmoothStepToF(&this->actor.speed, 0.0f, 1.0f, 0.5f, 0.0f);
if (this->unk14C == 0) {
if ((this->actor.params != ITEM00_SMALL_KEY) && (this->actor.params != ITEM00_HEART_PIECE) &&
@@ -358,11 +358,11 @@ void func_800A640C(EnItem00* this, PlayState* play) {
if (this->unk152 == 0) {
if ((this->actor.params != ITEM00_SMALL_KEY) && (this->actor.params != ITEM00_HEART_PIECE) &&
(this->actor.params != ITEM00_HEART_CONTAINER)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
- if ((this->actor.gravity != 0.0f) && !(this->actor.bgCheckFlags & 1)) {
+ if ((this->actor.gravity != 0.0f) && !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
this->actionFunc = func_800A6650;
}
}
@@ -387,12 +387,12 @@ void func_800A6650(EnItem00* this, PlayState* play) {
EffectSsKirakira_SpawnSmall(play, &pos, &sEffectVelocity, &sEffectAccel, &sEffectPrimColor, &sEffectEnvColor);
}
- if (this->actor.bgCheckFlags & 3) {
+ if (this->actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH)) {
if (this->actor.velocity.y > -2.0f) {
this->actionFunc = func_800A640C;
} else {
this->actor.velocity.y = this->actor.velocity.y * -0.8f;
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
}
}
}
@@ -406,7 +406,7 @@ void func_800A6780(EnItem00* this, PlayState* play) {
if (this->actor.params == ITEM00_RECOVERY_HEART) {
if (this->actor.velocity.y < 0.0f) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.gravity = -0.4f;
if (this->actor.velocity.y < -1.5f) {
this->actor.velocity.y = -1.5f;
@@ -444,10 +444,10 @@ void func_800A6780(EnItem00* this, PlayState* play) {
EffectSsKirakira_SpawnSmall(play, &pos, &sEffectVelocity, &sEffectAccel, &sEffectPrimColor, &sEffectEnvColor);
}
- if (this->actor.bgCheckFlags & 3) {
+ if (this->actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH)) {
this->actionFunc = func_800A640C;
this->actor.shape.rot.z = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
}
@@ -456,7 +456,7 @@ void func_800A6A40(EnItem00* this, PlayState* play) {
if (this->getItemId != GI_NONE) {
if (!Actor_HasParent(&this->actor, play)) {
- Actor_PickUp(&this->actor, play, this->getItemId, 50.0f, 80.0f);
+ Actor_OfferGetItem(&this->actor, play, this->getItemId, 50.0f, 80.0f);
this->unk152++;
} else {
this->getItemId = GI_NONE;
@@ -464,7 +464,7 @@ void func_800A6A40(EnItem00* this, PlayState* play) {
}
if (this->unk152 == 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -487,7 +487,7 @@ void EnItem00_Update(Actor* thisx, PlayState* play) {
EnItem00* this = THIS;
s32 pad;
Player* player = GET_PLAYER(play);
- s32 sp38 = player->stateFlags3 & 0x1000;
+ s32 sp38 = player->stateFlags3 & PLAYER_STATE3_1000;
s32 getItemId = GI_NONE;
s32 params;
@@ -507,10 +507,12 @@ void EnItem00_Update(Actor* thisx, PlayState* play) {
if (this->actor.gravity != 0.0f) {
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 15.0f, 15.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 15.0f, 15.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
if (this->actor.floorHeight <= BGCHECK_Y_MIN) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
}
@@ -646,7 +648,7 @@ void EnItem00_Update(Actor* thisx, PlayState* play) {
if (getItemId != GI_NONE) {
if (!Actor_HasParent(&this->actor, play)) {
- Actor_PickUp(&this->actor, play, getItemId, 50.0f, 20.0f);
+ Actor_OfferGetItem(&this->actor, play, getItemId, 50.0f, 20.0f);
}
}
@@ -659,7 +661,7 @@ void EnItem00_Update(Actor* thisx, PlayState* play) {
case ITEM00_COMPASS:
if (Actor_HasParent(&this->actor, play)) {
Flags_SetCollectible(play, this->collectibleFlag);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
return;
@@ -672,7 +674,7 @@ void EnItem00_Update(Actor* thisx, PlayState* play) {
} else if (getItemId != GI_NONE) {
if (Actor_HasParent(&this->actor, play)) {
Flags_SetCollectible(play, this->collectibleFlag);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
return;
} else {
@@ -684,7 +686,7 @@ void EnItem00_Update(Actor* thisx, PlayState* play) {
this->unk152 = 15;
this->unk14C = 35;
this->actor.shape.rot.z = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.velocity.y = 0.0f;
this->actor.gravity = 0.0f;
@@ -819,7 +821,7 @@ void EnItem00_DrawSprite(EnItem00* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP);
+ POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
if (this->actor.params == ITEM00_NUTS_10) {
texIndex = 6;
@@ -883,12 +885,13 @@ s16 func_800A7650(s16 dropId) {
(dropId == ITEM00_ARROWS_50)) &&
(INV_CONTENT(ITEM_BOW) == ITEM_NONE)) ||
(((dropId == ITEM00_MAGIC_LARGE) || (dropId == ITEM00_MAGIC_SMALL)) &&
- (gSaveContext.save.playerData.magicLevel == 0))) {
+ (gSaveContext.save.saveInfo.playerData.magicLevel == 0))) {
return ITEM00_NO_DROP;
}
if (dropId == ITEM00_RECOVERY_HEART) {
- if (((void)0, gSaveContext.save.playerData.healthCapacity) == ((void)0, gSaveContext.save.playerData.health)) {
+ if (((void)0, gSaveContext.save.saveInfo.playerData.healthCapacity) ==
+ ((void)0, gSaveContext.save.saveInfo.playerData.health)) {
return ITEM00_RUPEE_GREEN;
}
}
@@ -951,7 +954,7 @@ Actor* Item_DropCollectible(PlayState* play, Vec3f* spawnPos, u32 params) {
} else {
spawnedActor->velocity.y = -2.0f;
}
- spawnedActor->speedXZ = 2.0f;
+ spawnedActor->speed = 2.0f;
spawnedActor->gravity = -0.9f;
spawnedActor->world.rot.y = randPlusMinusPoint5Scaled(0x10000);
Actor_SetScale(spawnedActor, 0.0f);
@@ -1002,7 +1005,7 @@ Actor* Item_DropCollectible2(PlayState* play, Vec3f* spawnPos, s32 params) {
if (spawnedActor != NULL) {
if (param8000 == 0) {
spawnedActor->velocity.y = 0.0f;
- spawnedActor->speedXZ = 0.0f;
+ spawnedActor->speed = 0.0f;
if (param10000 != 0) {
spawnedActor->gravity = 0.0f;
} else {
@@ -1128,16 +1131,17 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP
if (fromActor != NULL) {
dropFlag = fromActor->dropFlag;
- if (dropFlag != 0) {
- if (fromActor->dropFlag & 1) {
+
+ if (dropFlag != DROPFLAG_NONE) {
+ if (fromActor->dropFlag & DROPFLAG_1) {
params = 0x10;
dropId = ITEM00_ARROWS_30;
dropQuantity = 1;
- } else if (fromActor->dropFlag & 2) {
+ } else if (fromActor->dropFlag & DROPFLAG_2) {
params = 0x10;
dropId = ITEM00_RECOVERY_HEART;
dropQuantity = 1;
- } else if (fromActor->dropFlag & 0x20) {
+ } else if (fromActor->dropFlag & DROPFLAG_20) {
dropId = ITEM00_RUPEE_PURPLE;
dropQuantity = 1;
}
@@ -1145,27 +1149,29 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP
}
if (dropId == ITEM00_FLEXIBLE) {
- if (gSaveContext.save.playerData.health <= 0x10) {
+ if (gSaveContext.save.saveInfo.playerData.health <= 0x10) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, spawnPos->x, spawnPos->y + 40.0f, spawnPos->z, 0, 0, 0,
2);
SoundSource_PlaySfxAtFixedWorldPos(play, spawnPos, 40, NA_SE_EV_BUTTERFRY_TO_FAIRY);
return;
}
- if (gSaveContext.save.playerData.health <= 0x30) {
+ if (gSaveContext.save.saveInfo.playerData.health <= 0x30) {
params = 0x10;
dropId = ITEM00_RECOVERY_HEART;
dropQuantity = 3;
- } else if (gSaveContext.save.playerData.health <= 0x50) {
+ } else if (gSaveContext.save.saveInfo.playerData.health <= 0x50) {
params = 0x10;
dropId = ITEM00_RECOVERY_HEART;
dropQuantity = 1;
- } else if ((gSaveContext.save.playerData.magicLevel != 0) && (gSaveContext.save.playerData.magic == 0)) {
+ } else if ((gSaveContext.save.saveInfo.playerData.magicLevel != 0) &&
+ (gSaveContext.save.saveInfo.playerData.magic == 0)) {
params = 0xD0;
dropId = ITEM00_MAGIC_LARGE;
dropQuantity = 1;
- } else if ((gSaveContext.save.playerData.magicLevel != 0) &&
- ((gSaveContext.save.playerData.magicLevel >> 1) >= gSaveContext.save.playerData.magic)) {
+ } else if ((gSaveContext.save.saveInfo.playerData.magicLevel != 0) &&
+ ((gSaveContext.save.saveInfo.playerData.magicLevel >> 1) >=
+ gSaveContext.save.saveInfo.playerData.magic)) {
params = 0xD0;
dropId = ITEM00_MAGIC_LARGE;
dropQuantity = 1;
@@ -1177,7 +1183,7 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP
params = 0xB0;
dropId = ITEM00_BOMBS_A;
dropQuantity = 1;
- } else if (gSaveContext.save.playerData.rupees < 11) {
+ } else if (gSaveContext.save.saveInfo.playerData.rupees < 11) {
params = 0xA0;
dropId = ITEM00_RUPEE_RED;
dropQuantity = 1;
@@ -1195,7 +1201,7 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP
spawnPos->y, spawnPos->z, 0, 0, 0, dropId);
if ((spawnedActor != 0) && (dropId != (u8)ITEM00_NO_DROP)) {
spawnedActor->actor.velocity.y = 8.0f;
- spawnedActor->actor.speedXZ = 2.0f;
+ spawnedActor->actor.speed = 2.0f;
spawnedActor->actor.gravity = -0.9f;
spawnedActor->actor.world.rot.y = Rand_ZeroOne() * 40000.0f;
Actor_SetScale(&spawnedActor->actor, 0.0f);
diff --git a/src/code/z_env_flags.c b/src/code/z_env_flags.c
index 06e216cd3..0057128e2 100644
--- a/src/code/z_env_flags.c
+++ b/src/code/z_env_flags.c
@@ -1,33 +1,33 @@
#include "global.h"
-void EnvFlags_UnsetAll(PlayState* play) {
+void CutsceneFlags_UnsetAll(PlayState* play) {
u8 i;
- for (i = 0; i < ARRAY_COUNT(play->envFlags); i++) {
- play->envFlags[i] = 0;
+ for (i = 0; i < ARRAY_COUNT(play->cutsceneFlags); i++) {
+ play->cutsceneFlags[i] = 0;
}
}
-void EnvFlags_Set(PlayState* play, s16 flag) {
+void CutsceneFlags_Set(PlayState* play, s16 flag) {
s16 index = flag / 16;
s16 bit = flag % 16;
s16 mask = 1 << bit;
- play->envFlags[index] |= mask;
+ play->cutsceneFlags[index] |= mask;
}
-void EnvFlags_Unset(PlayState* play, s16 flag) {
+void CutsceneFlags_Unset(PlayState* play, s16 flag) {
s16 index = flag / 16;
s16 bit = flag % 16;
s16 mask = (1 << bit) ^ 0xFFFF;
- play->envFlags[index] &= mask;
+ play->cutsceneFlags[index] &= mask;
}
-s32 EnvFlags_Get(PlayState* play, s16 flag) {
+s32 CutsceneFlags_Get(PlayState* play, s16 flag) {
s16 index = flag / 16;
s16 bit = flag % 16;
s16 mask = 1 << bit;
- return play->envFlags[index] & mask;
+ return play->cutsceneFlags[index] & mask;
}
diff --git a/src/code/z_eventmgr.c b/src/code/z_eventmgr.c
index 5b8b8dce3..2575899ca 100644
--- a/src/code/z_eventmgr.c
+++ b/src/code/z_eventmgr.c
@@ -1,52 +1,554 @@
+/**
+ * @file z_eventmgr.c
+ *
+ * Manages all cutscenes except for manual
+ */
#include "global.h"
#include "z64shrink_window.h"
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/func_800F1460.s")
+ActorCutscene sGlobalCutsceneList[] = {
+ // CS_ID_GLOBAL_78
+ { -100, -1, CS_CAM_ID_NONE, CS_SCRIPT_ID_NONE, CS_ID_NONE, CS_END_SFX_NONE_ALT, 255, CS_HUD_VISIBILITY_ALL_ALT, 255,
+ 255 },
+ // CS_ID_GLOBAL_79
+ { -100, -1, CS_CAM_ID_NONE, CS_SCRIPT_ID_NONE, CS_ID_NONE, CS_END_SFX_NONE_ALT, 255, CS_HUD_VISIBILITY_ALL_ALT, 255,
+ 255 },
+ // CS_ID_GLOBAL_7A
+ { -100, -1, CS_CAM_ID_NONE, CS_SCRIPT_ID_NONE, CS_ID_NONE, CS_END_SFX_NONE_ALT, 255, CS_HUD_VISIBILITY_ALL_ALT, 255,
+ 255 },
+ // CS_ID_GLOBAL_ELEGY
+ { 2, -1, CS_CAM_ID_GLOBAL_ELEGY, CS_SCRIPT_ID_NONE, CS_ID_NONE, CS_END_SFX_NONE_ALT, 255, CS_HUD_VISIBILITY_NONE,
+ CS_END_CAM_0, 32 },
+ // CS_ID_GLOBAL_TALK
+ { 32765, -1, CS_CAM_ID_NONE, CS_SCRIPT_ID_NONE, CS_ID_NONE, CS_END_SFX_NONE_ALT, 255, CS_HUD_VISIBILITY_ALL_ALT,
+ CS_END_CAM_0, 255 },
+ // CS_ID_GLOBAL_DOOR
+ { 32764, -1, CS_CAM_ID_NONE, CS_SCRIPT_ID_NONE, CS_ID_NONE, CS_END_SFX_NONE_ALT, 255, CS_HUD_VISIBILITY_ALL_ALT,
+ CS_END_CAM_0, 255 },
+ // CS_ID_GLOBAL_RETURN_TO_CAM
+ { 32766, -2, CS_CAM_ID_GLOBAL_CONNECT, CS_SCRIPT_ID_NONE, CS_ID_NONE, CS_END_SFX_NONE, 255,
+ CS_HUD_VISIBILITY_ALL_ALT, CS_END_CAM_0, 32 },
+ // CS_ID_GLOBAL_END
+ { 0, -1, CS_CAM_ID_NONE, CS_SCRIPT_ID_NONE, CS_ID_NONE, CS_END_SFX_NONE, 255, CS_HUD_VISIBILITY_ALL_ALT,
+ CS_END_CAM_0, 32 },
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_GetCutsceneImpl.s")
+typedef enum {
+ /* 0 */ CS_START_0,
+ /* 1 */ CS_START_1,
+ /* 2 */ CS_START_2,
+} ActorCutsceneStartMethod;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_Init.s")
+typedef struct {
+ /* 0x00 */ s16 csId;
+ /* 0x02 */ s16 length;
+ /* 0x04 */ s16 endCsId;
+ /* 0x06 */ s16 subCamId;
+ /* 0x08 */ Actor* targetActor;
+ /* 0x0C */ s32 startMethod;
+ /* 0x10 */ PlayState* play;
+ /* 0x14 */ s16 retCamId;
+ /* 0x16 */ s16 isCameraStored;
+} CutsceneManager; // size = 0x18
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/func_800F15D8.s")
+CutsceneManager sCutsceneMgr = {
+ CS_ID_NONE, 0, CS_ID_NONE, SUB_CAM_ID_DONE, NULL, CS_START_0, NULL, CAM_ID_MAIN, false,
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_ClearWaiting.s")
+s16 CutsceneManager_SetHudVisibility(s16 csHudVisibility) {
+ u16 hudVisibility;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_ClearNextCutscenes.s")
+ switch (csHudVisibility) {
+ case CS_HUD_VISIBILITY_NONE:
+ hudVisibility = HUD_VISIBILITY_NONE_ALT;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_MarkNextCutscenes.s")
+ case CS_HUD_VISIBILITY_ALL:
+ hudVisibility = HUD_VISIBILITY_ALL;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_End.s")
+ case CS_HUD_VISIBILITY_A_HEARTS_MAGIC:
+ hudVisibility = HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_Update.s")
+ case CS_HUD_VISIBILITY_C_HEARTS_MAGIC:
+ hudVisibility = HUD_VISIBILITY_HEARTS_MAGIC_C;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_SetIntentToPlay.s")
+ case CS_HUD_VISIBILITY_ALL_NO_MINIMAP:
+ hudVisibility = HUD_VISIBILITY_ALL_NO_MINIMAP;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_GetCanPlayNext.s")
+ case CS_HUD_VISIBILITY_A_B_C:
+ hudVisibility = HUD_VISIBILITY_A_B_C;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_StartAndSetUnkLinkFields.s")
+ case CS_HUD_VISIBILITY_B_MINIMAP:
+ hudVisibility = HUD_VISIBILITY_B_MINIMAP;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_StartAndSetFlag.s")
+ case CS_HUD_VISIBILITY_A:
+ hudVisibility = HUD_VISIBILITY_A;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_Start.s")
+ default:
+ hudVisibility = HUD_VISIBILITY_ALL;
+ break;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_Stop.s")
+ Interface_SetHudVisibility(hudVisibility);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_GetCurrentIndex.s")
+ return hudVisibility;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_GetCutscene.s")
+ActorCutscene* CutsceneManager_GetCutsceneEntryImpl(s16 csId) {
+ if (csId < CS_ID_GLOBAL_78) {
+ return &sSceneCutsceneList[csId];
+ } else {
+ csId -= CS_ID_GLOBAL_78;
+ return &sGlobalCutsceneList[csId];
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_GetAdditionalCutscene.s")
+void CutsceneManager_Init(PlayState* play, ActorCutscene* cutsceneList, s16 numEntries) {
+ s32 i;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_GetLength.s")
+ sSceneCutsceneList = cutsceneList;
+ sSceneCutsceneCount = numEntries;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/func_800F2138.s")
+ for (i = 0; i < ARRAY_COUNT(sWaitingCutsceneList); i++) {
+ sWaitingCutsceneList[i] = 0;
+ sNextCutsceneList[i] = 0;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/func_800F2178.s")
+ sCutsceneMgr.endCsId = CS_ID_NONE;
+ sCutsceneMgr.play = play;
+ sCutsceneMgr.length = -1;
+ sCutsceneMgr.targetActor = NULL;
+ sCutsceneMgr.subCamId = SUB_CAM_ID_DONE;
+ sCutsceneMgr.isCameraStored = false;
+ sCutsceneMgr.csId = sCutsceneMgr.endCsId;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_GetCurrentSubCamId.s")
+/**
+ * Store camera into subCam 2, and keep subCam 2 INACTIVE to preserve the struct.
+ */
+void CutsceneManager_StoreCamera(Camera* camera) {
+ if (camera != NULL) {
+ memcpy(&sCutsceneMgr.play->subCameras[2], camera, sizeof(Camera));
+ sCutsceneMgr.play->subCameras[2].camId = camera->camId;
+ Camera_ChangeStatus(&sCutsceneMgr.play->subCameras[2], CAM_STATUS_INACTIVE);
+ sCutsceneMgr.isCameraStored = true;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/func_800F21CC.s")
+void CutsceneManager_ClearWaiting(void) {
+ s32 i;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/func_800F22C4.s")
+ for (i = 0; i < ARRAY_COUNT(sWaitingCutsceneList); i++) {
+ sWaitingCutsceneList[i] = 0;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_eventmgr/ActorCutscene_SetReturnCamera.s")
+void CutsceneManager_ClearNextCutscenes(void) {
+ s32 i;
+
+ for (i = 0; i < ARRAY_COUNT(sNextCutsceneList); i++) {
+ sNextCutsceneList[i] = 0;
+ }
+}
+
+s16 CutsceneManager_MarkNextCutscenes(void) {
+ s16 bit;
+ s32 i;
+ s32 j;
+ s32 count = 0;
+ s16 csIdMax = CS_ID_NONE;
+ s16 priorityMax = SHT_MAX; // lower number means higher priority
+ s16 csId;
+ s16 priority;
+
+ for (i = 0; i < ARRAY_COUNT(sNextCutsceneList); i++) {
+ for (bit = 1, j = 0; j < 8; j++) {
+ if (sWaitingCutsceneList[i] & bit) {
+ csId = (i << 3) | j;
+ priority = CutsceneManager_GetCutsceneEntryImpl(csId)->priority;
+
+ if ((priority ^ 0) == -1) {
+ sNextCutsceneList[i] |= bit;
+ } else if ((priority < priorityMax) && (priority > 0)) {
+ csIdMax = csId;
+ priorityMax = priority;
+ }
+ count++;
+ }
+ bit <<= 1;
+ }
+ }
+ if (csIdMax != CS_ID_NONE) {
+ sNextCutsceneList[csIdMax >> 3] |= 1 << (csIdMax & 7);
+ }
+ return count;
+}
+
+#define RET_CAM sCutsceneMgr.play->cameraPtrs[sCutsceneMgr.retCamId]
+#define CUR_CAM sCutsceneMgr.play->cameraPtrs[sCutsceneMgr.subCamId]
+
+void CutsceneManager_End(void) {
+ ActorCutscene* csEntry;
+ s16 oldCamId;
+ s16 oldStateFlags;
+
+ switch (sCutsceneMgr.startMethod) {
+ case CS_START_2:
+ sCutsceneMgr.targetActor->flags &= ~ACTOR_FLAG_100000;
+ // fallthrough
+ case CS_START_1:
+ func_800B7298(sCutsceneMgr.play, 0, PLAYER_CSMODE_END);
+ sCutsceneMgr.startMethod = CS_START_0;
+ break;
+
+ default:
+ break;
+ }
+
+ csEntry = CutsceneManager_GetCutsceneEntryImpl(sCutsceneMgr.csId);
+
+ switch (csEntry->endSfx) {
+ case CS_END_SFX_TRE_BOX_APPEAR:
+ play_sound(NA_SE_SY_TRE_BOX_APPEAR);
+ break;
+
+ case CS_END_SFX_CORRECT_CHIME:
+ play_sound(NA_SE_SY_CORRECT_CHIME);
+ break;
+
+ default: // CS_END_SFX_NONE
+ break;
+ }
+
+ switch (csEntry->endCam) {
+ case CS_END_CAM_SMOOTH:
+ Play_CopyCamera(sCutsceneMgr.play, sCutsceneMgr.retCamId, sCutsceneMgr.subCamId);
+ RET_CAM->stateFlags =
+ (RET_CAM->stateFlags & ~CAM_STATE_UNDERWATER) | (CUR_CAM->stateFlags & CAM_STATE_UNDERWATER);
+ CutsceneManager_Queue(CS_ID_GLOBAL_RETURN_TO_CAM);
+ break;
+
+ case CS_END_CAM_0:
+ default:
+ Play_CopyCamera(sCutsceneMgr.play, sCutsceneMgr.retCamId, sCutsceneMgr.subCamId);
+ RET_CAM->stateFlags =
+ (RET_CAM->stateFlags & ~CAM_STATE_UNDERWATER) | (CUR_CAM->stateFlags & CAM_STATE_UNDERWATER);
+ break;
+
+ case CS_END_CAM_1:
+ oldCamId = RET_CAM->camId;
+ oldStateFlags = RET_CAM->stateFlags;
+
+ if (sCutsceneMgr.isCameraStored) {
+ // Restore the camera that was stored in subCam 2
+ memcpy(RET_CAM, &sCutsceneMgr.play->subCameras[2], sizeof(Camera));
+
+ RET_CAM->stateFlags =
+ (RET_CAM->stateFlags & ~CAM_STATE_UNDERWATER) | (CUR_CAM->stateFlags & CAM_STATE_UNDERWATER);
+
+ RET_CAM->stateFlags = (RET_CAM->stateFlags & ~CAM_STATE_2) | (oldStateFlags & CAM_STATE_2);
+ sCutsceneMgr.isCameraStored = false;
+ }
+ RET_CAM->camId = oldCamId;
+ break;
+ }
+
+ if (sCutsceneMgr.subCamId != SUB_CAM_ID_DONE) {
+ Play_ClearCamera(sCutsceneMgr.play, sCutsceneMgr.subCamId);
+ Play_ChangeCameraStatus(sCutsceneMgr.play, sCutsceneMgr.retCamId, CAM_STATUS_ACTIVE);
+ }
+
+ sCutsceneMgr.csId = CS_ID_NONE;
+ sCutsceneMgr.endCsId = CS_ID_NONE;
+ sCutsceneMgr.length = -1;
+ sCutsceneMgr.targetActor = NULL;
+ sCutsceneMgr.subCamId = SUB_CAM_ID_DONE;
+}
+
+s16 CutsceneManager_Update(void) {
+ s16 sp1E = 0;
+
+ if (CutsceneManager_IsNext(CS_ID_GLOBAL_RETURN_TO_CAM)) {
+ CutsceneManager_StartWithPlayerCs(CS_ID_GLOBAL_RETURN_TO_CAM, &GET_PLAYER(sCutsceneMgr.play)->actor);
+ }
+
+ if (sCutsceneMgr.endCsId == CS_ID_NONE) {
+ if (sCutsceneMgr.csId != CS_ID_NONE) {
+ if (sCutsceneMgr.length > 0) {
+ sCutsceneMgr.length--;
+ }
+ sp1E = 1;
+ if (sCutsceneMgr.length == 0) {
+ CutsceneManager_Stop(sCutsceneMgr.csId);
+ }
+ }
+ }
+
+ if (sCutsceneMgr.endCsId != CS_ID_NONE) {
+ CutsceneManager_End();
+ sp1E = 2;
+ }
+
+ CutsceneManager_ClearNextCutscenes();
+
+ if (sCutsceneMgr.csId == CS_ID_NONE) {
+ if ((CutsceneManager_MarkNextCutscenes() == 0) && (sp1E != 0)) {
+ ShrinkWindow_Letterbox_SetSizeTarget(0);
+ } else if (sp1E == 0) {
+ CutsceneManager_StoreCamera(Play_GetCamera(sCutsceneMgr.play, sCutsceneMgr.retCamId));
+ }
+ }
+ return sp1E;
+}
+
+void CutsceneManager_Queue(s16 csId) {
+ if (csId >= 0) {
+ sWaitingCutsceneList[csId >> 3] |= 1 << (csId & 7);
+ }
+}
+
+s16 CutsceneManager_IsNext(s16 csId) {
+ if (csId == CS_ID_GLOBAL_END) {
+ if (sCutsceneMgr.csId == CS_ID_NONE) {
+ return 0x7F;
+ } else {
+ return 0;
+ }
+ }
+ if (csId <= CS_ID_NONE) {
+ return -1;
+ }
+ return (sNextCutsceneList[csId >> 3] & (1 << (csId & 7))) ? 1 : 0;
+}
+
+/**
+ * Start an actor cutscene, activate Player Cutscene Mode "Wait"
+ */
+s16 CutsceneManager_StartWithPlayerCs(s16 csId, Actor* actor) {
+ s16 startCsId = CutsceneManager_Start(csId, actor);
+
+ if (startCsId >= 0) {
+ func_800B7298(sCutsceneMgr.play, 0, PLAYER_CSMODE_WAIT);
+ if (sCutsceneMgr.length == 0) {
+ CutsceneManager_Stop(sCutsceneMgr.csId);
+ }
+ sCutsceneMgr.startMethod = CS_START_1;
+ }
+ return startCsId;
+}
+
+/**
+ * Start an actor cutscene, activate Player Cutscene Mode "Wait", turn on ACTOR_FLAG_100000
+ */
+s16 CutsceneManager_StartWithPlayerCsAndSetFlag(s16 csId, Actor* actor) {
+ s16 startCsId = CutsceneManager_Start(csId, actor);
+
+ if (startCsId >= 0) {
+ func_800B7298(sCutsceneMgr.play, 0, PLAYER_CSMODE_WAIT);
+ if (sCutsceneMgr.length == 0) {
+ CutsceneManager_Stop(sCutsceneMgr.csId);
+ }
+ if (actor != NULL) {
+ actor->flags |= ACTOR_FLAG_100000;
+ sCutsceneMgr.startMethod = CS_START_2;
+ } else {
+ sCutsceneMgr.startMethod = CS_START_1;
+ }
+ }
+ return startCsId;
+}
+
+s16 CutsceneManager_Start(s16 csId, Actor* actor) {
+ ActorCutscene* csEntry;
+ Camera* subCam;
+ Camera* retCam;
+ s32 csType = 0;
+
+ if ((csId < 0) || (sCutsceneMgr.csId != CS_ID_NONE)) {
+ return csId;
+ }
+
+ sCutsceneMgr.startMethod = CS_START_0;
+ csEntry = CutsceneManager_GetCutsceneEntryImpl(csId);
+
+ ShrinkWindow_Letterbox_SetSizeTarget(csEntry->letterboxSize);
+ CutsceneManager_SetHudVisibility(csEntry->hudVisibility);
+
+ if (csId == CS_ID_GLOBAL_END) {
+ csType = 1;
+ } else if (csEntry->scriptIndex != CS_SCRIPT_ID_NONE) {
+ // scripted cutscene
+ csType = 1;
+ } else if ((csId != CS_ID_GLOBAL_DOOR) && (csId != CS_ID_GLOBAL_TALK)) {
+ csType = 2;
+ }
+
+ if (csType != 0) {
+ sCutsceneMgr.retCamId = Play_GetActiveCamId(sCutsceneMgr.play);
+ sCutsceneMgr.subCamId = Play_CreateSubCamera(sCutsceneMgr.play);
+
+ subCam = Play_GetCamera(sCutsceneMgr.play, sCutsceneMgr.subCamId);
+ retCam = Play_GetCamera(sCutsceneMgr.play, sCutsceneMgr.retCamId);
+
+ if ((retCam->setting == CAM_SET_START0) || (retCam->setting == CAM_SET_START2) ||
+ (retCam->setting == CAM_SET_START1)) {
+ if (CutsceneManager_FindEntranceCsId() != csId) {
+ func_800E0348(retCam);
+ } else {
+ Camera_ClearFlags(retCam, CAM_STATE_2);
+ }
+ }
+
+ memcpy(subCam, retCam, sizeof(Camera));
+ subCam->camId = sCutsceneMgr.subCamId;
+ Camera_ClearFlags(subCam, CAM_STATE_6 | CAM_STATE_0);
+
+ Play_ChangeCameraStatus(sCutsceneMgr.play, sCutsceneMgr.retCamId, CAM_STATUS_WAIT);
+ Play_ChangeCameraStatus(sCutsceneMgr.play, sCutsceneMgr.subCamId, CAM_STATUS_ACTIVE);
+
+ subCam->target = sCutsceneMgr.targetActor = actor;
+ subCam->behaviorFlags = 0;
+
+ if (csType == 1) {
+ Camera_ChangeSetting(subCam, CAM_SET_FREE0);
+ Cutscene_StartScripted(sCutsceneMgr.play, csEntry->scriptIndex);
+ sCutsceneMgr.length = csEntry->length;
+ } else {
+ if (csEntry->csCamId != CS_CAM_ID_NONE) {
+ Camera_ChangeDataIdx(subCam, csEntry->csCamId);
+ } else {
+ Camera_ChangeSetting(subCam, CAM_SET_FREE0);
+ }
+ sCutsceneMgr.length = csEntry->length;
+ }
+ }
+ sCutsceneMgr.csId = csId;
+
+ return csId;
+}
+
+s16 CutsceneManager_Stop(s16 csId) {
+ ActorCutscene* csEntry;
+
+ if (csId < 0) {
+ return csId;
+ }
+
+ csEntry = CutsceneManager_GetCutsceneEntryImpl(sCutsceneMgr.csId);
+ if ((sCutsceneMgr.length > 0) && (csEntry->scriptIndex == CS_SCRIPT_ID_NONE)) {
+ return -2;
+ }
+ if ((csId != CS_ID_GLOBAL_END) && (csEntry->scriptIndex != CS_SCRIPT_ID_NONE)) {
+ return -3;
+ }
+
+ if (csId == CS_ID_GLOBAL_END) {
+ csId = sCutsceneMgr.csId;
+ }
+ if (csId == sCutsceneMgr.csId) {
+ sCutsceneMgr.endCsId = sCutsceneMgr.csId;
+ return sCutsceneMgr.endCsId;
+ }
+ return -1;
+}
+
+s16 CutsceneManager_GetCurrentCsId(void) {
+ return sCutsceneMgr.csId;
+}
+
+ActorCutscene* CutsceneManager_GetCutsceneEntry(s16 csId) {
+ return CutsceneManager_GetCutsceneEntryImpl(csId);
+}
+
+s16 CutsceneManager_GetAdditionalCsId(s16 csId) {
+ if (csId < 0) {
+ return CS_ID_NONE;
+ }
+ return CutsceneManager_GetCutsceneEntryImpl(csId)->additionalCsId;
+}
+
+s16 CutsceneManager_GetLength(s16 csId) {
+ if (csId < 0) {
+ return -1;
+ }
+ return CutsceneManager_GetCutsceneEntryImpl(csId)->length;
+}
+
+s16 CutsceneManager_GetCutsceneScriptIndex(s16 csId) {
+ if (csId < 0) {
+ return -1;
+ }
+ return CutsceneManager_GetCutsceneEntryImpl(csId)->scriptIndex;
+}
+
+s16 CutsceneManager_GetCutsceneCustomValue(s16 csId) {
+ if (csId < 0) {
+ return -1;
+ }
+ return CutsceneManager_GetCutsceneEntryImpl(csId)->customValue;
+}
+
+s16 CutsceneManager_GetCurrentSubCamId(s16 csId) {
+ return sCutsceneMgr.subCamId;
+}
+
+s16 CutsceneManager_FindEntranceCsId(void) {
+ PlayState* play;
+ s32 csId;
+
+ for (csId = 0; csId < sSceneCutsceneCount; csId++) {
+ //! FAKE:
+ if ((sSceneCutsceneList[csId].scriptIndex != CS_SCRIPT_ID_NONE) &&
+ (sSceneCutsceneList[csId].scriptIndex < (play = sCutsceneMgr.play)->csCtx.scriptListCount) &&
+ (sCutsceneMgr.play->curSpawn ==
+ sCutsceneMgr.play->csCtx.scriptList[sSceneCutsceneList[csId].scriptIndex].spawn)) {
+ return csId;
+ }
+ }
+
+ for (csId = 0; csId < sSceneCutsceneCount; csId++) {
+ if ((sSceneCutsceneList[csId].customValue >= 100) &&
+ (sSceneCutsceneList[csId].customValue == (sCutsceneMgr.play->curSpawn + 100))) {
+ return csId;
+ }
+ }
+
+ return -1;
+}
+
+s32 func_800F22C4(s16 csId, Actor* actor) {
+ f32 dist;
+ s16 screenPosX;
+ s16 screenPosY;
+
+ if ((sCutsceneMgr.csId == CS_ID_NONE) || (csId == CS_ID_NONE)) {
+ return 4;
+ }
+
+ Actor_GetScreenPos(sCutsceneMgr.play, actor, &screenPosX, &screenPosY);
+
+ dist = OLib_Vec3fDist(&actor->focus.pos, &Play_GetCamera(sCutsceneMgr.play, sCutsceneMgr.subCamId)->eye);
+
+ if ((screenPosX > 40) && (screenPosX < SCREEN_WIDTH - 40) && (screenPosY > 40) &&
+ (screenPosY < SCREEN_HEIGHT - 40) && (dist < 700.0f)) {
+ return 1;
+ }
+ if (sCutsceneMgr.length < 6) {
+ return 2;
+ }
+ if (csId == sCutsceneMgr.csId) {
+ return 0;
+ }
+ return 3;
+}
+
+void CutsceneManager_SetReturnCamera(s16 camId) {
+ sCutsceneMgr.retCamId = camId;
+}
diff --git a/src/code/z_fbdemo.c b/src/code/z_fbdemo.c
index 3d33399e5..441af901e 100644
--- a/src/code/z_fbdemo.c
+++ b/src/code/z_fbdemo.c
@@ -1,20 +1,223 @@
+/**
+ * @file z_fbdemo.c
+ *
+ * This file implements an unused transition system that takes the current screen, partitions it into large tiles, and
+ * can apply an effect to them.
+ *
+ * The screen is divided into 7 rows and 10 columns of tiles. (`gScreenWidth`/ 10 = `gScreenHeight` / 7 = 0x20)
+ *
+ * @note The only coded effect has a visual effect to blend the tiles to a single point, which looks like the screen
+ * gets sucked into.
+ */
#include "global.h"
#include "system_malloc.h"
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo/func_80163DC0.s")
+Gfx sTransTileSetupDL[] = {
+ gsDPPipeSync(),
+ gsSPTexture(0x8000, 0x8000, 0, G_TX_RENDERTILE, G_ON),
+ gsSPLoadGeometryMode(G_TEXTURE_ENABLE),
+ 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_PERSP | G_CYC_1CYCLE | G_PM_1PRIMITIVE,
+ G_AC_NONE | G_ZS_PIXEL | G_RM_AA_OPA_SURF | G_RM_AA_OPA_SURF2),
+ gsSPEndDisplayList(),
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo/func_8016418C.s")
+void TransitionTile_InitGraphics(TransitionTile* this) {
+ s32 frame;
+ s32 col;
+ s32 col2;
+ s32 colTex;
+ Vtx* vtx;
+ s32 row;
+ s32 rowTex;
+ Gfx* gfx;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo/func_8016424C.s")
+ guMtxIdent(&this->modelView);
+ guMtxIdent(&this->unk_98);
+ guOrtho(&this->projection, 0.0f, SCREEN_WIDTH, SCREEN_HEIGHT, 0.0f, -1000.0f, 1000.0f, 1.0f);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo/func_801642D8.s")
+ for (frame = 0; frame < 2; frame++) {
+ this->frame = frame;
+ vtx = (this->frame == 0) ? this->vtxFrame1 : this->vtxFrame2;
+ for (rowTex = 0, row = 0; row < (this->rows + 1); row++, rowTex += 0x20) {
+ for (colTex = 0, col = 0; col < (this->cols + 1); col++, colTex += 0x20) {
+ Vtx_tn* vtxn = &vtx->n;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo/func_80164438.s")
+ // clang-format off
+ vtx++; \
+ vtxn->tc[0] = colTex << 6; \
+ vtxn->ob[0] = col * 0x20; \
+ vtxn->ob[1] = row * 0x20; \
+ vtxn->ob[2] = -5; \
+ vtxn->flag = 0; \
+ vtxn->tc[1] = rowTex << 6; \
+ vtxn->n[0] = 0; \
+ vtxn->n[1] = 0; \
+ vtxn->n[2] = 120; \
+ vtxn->a = 255;
+ // clang-format on
+ }
+ }
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo/func_8016454C.s")
+ gfx = this->gfx;
+ for (rowTex = 0, row = 0; row < this->rows; row++, rowTex += 0x20) {
+ gSPVertex(gfx++, SEGMENT_ADDR(0xA, (u32)row * (this->cols + 1) * sizeof(Vtx)), 2 * (this->cols + 1), 0);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo/func_80164678.s")
+ colTex = 0;
+ col2 = 0;
+ col = 0;
+ while (col < this->cols) {
+ gDPPipeSync(gfx++);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo/func_801647AC.s")
+ gDPLoadTextureTile(gfx++, SEGMENT_ADDR(0xB, 0), G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, SCREEN_HEIGHT,
+ colTex, rowTex, colTex + 0x20, rowTex + 0x20, 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/code/z_fbdemo/func_801647B8.s")
+ gSP1Quadrangle(gfx++, col, col + 1, col2 + this->cols + 2, this->cols + col2 + 1, 0);
+
+ colTex += 0x20;
+ col2++;
+ col++;
+ }
+ }
+
+ gDPPipeSync(gfx++);
+ gSPEndDisplayList(gfx++);
+}
+
+void TransitionTile_InitVtxData(TransitionTile* this) {
+ s32 row;
+ s32 col;
+
+ for (row = 0; row < this->rows + 1; row++) {
+ for (col = 0; col < this->cols + 1; col++) {
+ (this->vtxData + col + row * (this->cols + 1))->x = col * 0x20;
+ (this->vtxData + col + row * (this->cols + 1))->y = row * 0x20;
+ }
+ }
+}
+
+void TransitionTile_Destroy(TransitionTile* this) {
+ Sleep_Msec(100);
+
+ if (this->vtxData != NULL) {
+ SystemArena_Free(this->vtxData);
+ this->vtxData = NULL;
+ }
+ if (this->vtxFrame1 != NULL) {
+ SystemArena_Free(this->vtxFrame1);
+ this->vtxFrame1 = NULL;
+ }
+ if (this->vtxFrame2 != NULL) {
+ SystemArena_Free(this->vtxFrame2);
+ this->vtxFrame2 = NULL;
+ }
+ if (this->gfx != NULL) {
+ SystemArena_Free(this->gfx);
+ this->gfx = NULL;
+ }
+}
+
+TransitionTile* TransitionTile_Init(TransitionTile* this, s32 cols, s32 rows) {
+ s32 gridSize;
+
+ bzero(this, sizeof(TransitionTile));
+ this->frame = 0;
+ this->cols = cols;
+ this->rows = rows;
+ gridSize = (cols + 1) * (rows + 1);
+ this->vtxData = SystemArena_Malloc(gridSize * sizeof(TransitionTileVtxData));
+ this->vtxFrame1 = SystemArena_Malloc(gridSize * sizeof(Vtx));
+ this->vtxFrame2 = SystemArena_Malloc(gridSize * sizeof(Vtx));
+ this->gfx = SystemArena_Malloc(((cols * 9 + 1) * rows + 2) * sizeof(Gfx));
+
+ if ((this->vtxData == NULL) || (this->vtxFrame1 == NULL) || (this->vtxFrame2 == NULL) || (this->gfx == NULL)) {
+ if (this->vtxData != NULL) {
+ SystemArena_Free(this->vtxData);
+ this->vtxData = NULL;
+ }
+ if (this->vtxFrame1 != NULL) {
+ SystemArena_Free(this->vtxFrame1);
+ this->vtxFrame1 = NULL;
+ }
+ if (this->vtxFrame2 != NULL) {
+ SystemArena_Free(this->vtxFrame2);
+ this->vtxFrame2 = NULL;
+ }
+ if (this->gfx != NULL) {
+ SystemArena_Free(this->gfx);
+ this->gfx = NULL;
+ }
+ return NULL;
+ }
+
+ TransitionTile_InitGraphics(this);
+ TransitionTile_InitVtxData(this);
+ this->frame = 0;
+
+ return this;
+}
+
+void TransitionTile_SetVtx(TransitionTile* this) {
+ s32 row;
+ s32 col;
+ Vtx* vtx;
+
+ for (row = 0; row < this->rows + 1; row++) {
+ for (col = 0; col < this->cols + 1; col++) {
+ vtx = (this->frame == 0) ? this->vtxFrame1 : this->vtxFrame2;
+ (vtx + col + row * (this->cols + 1))->n.ob[0] = (this->vtxData + col + row * (this->cols + 1))->x;
+
+ vtx = (this->frame == 0) ? this->vtxFrame1 : this->vtxFrame2;
+ (vtx + col + row * (this->cols + 1))->n.ob[1] = (this->vtxData + col + row * (this->cols + 1))->y;
+ }
+ }
+}
+
+void TransitionTile_Draw(TransitionTile* this, Gfx** gfxP) {
+ Gfx* gfx = *gfxP;
+
+ gSPDisplayList(gfx++, sTransTileSetupDL);
+ TransitionTile_SetVtx(this);
+ gSPMatrix(gfx++, &this->projection, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
+ gSPMatrix(gfx++, &this->modelView, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPSegment(gfx++, 0xA, this->frame == 0 ? this->vtxFrame1 : this->vtxFrame2);
+ gSPSegment(gfx++, 0xB, this->zBuffer);
+ gSPDisplayList(gfx++, sTransTileSetupDL);
+ gSPDisplayList(gfx++, this->gfx);
+ gDPPipeSync(gfx++);
+ this->frame ^= 1;
+ *gfxP = gfx;
+}
+
+void TransitionTile_Suck(TransitionTile* this) {
+ s32 row;
+ s32 col;
+ f32 diffX;
+ f32 diffY;
+ f32 scale;
+
+ for (row = 0; row < this->rows + 1; row++) {
+ for (col = 0; col < this->cols + 1; col++) {
+ diffX = (this->vtxData + col + row * (this->cols + 1))->x - (this->vtxData + 5 + 4 * (this->cols + 1))->x;
+ diffY = (this->vtxData + col + row * (this->cols + 1))->y - (this->vtxData + 5 + 4 * (this->cols + 1))->y;
+ scale = (SQ(diffX) + SQ(diffY)) / SQ(10.0f);
+ if (scale != 0.0f) {
+ if (scale < 1.0f) {
+ scale = 1.0f;
+ }
+ (this->vtxData + col + row * (this->cols + 1))->x -= diffX / scale;
+ (this->vtxData + col + row * (this->cols + 1))->y -= diffY / scale;
+ }
+ }
+ }
+}
+
+void TransitionTile_Update(TransitionTile* this) {
+}
+
+s32 func_801647B8(TransitionTile* this) {
+ return 0;
+}
diff --git a/src/code/z_fbdemo_circle.c b/src/code/z_fbdemo_circle.c
index 2a8144ea4..bc07df883 100644
--- a/src/code/z_fbdemo_circle.c
+++ b/src/code/z_fbdemo_circle.c
@@ -1,6 +1,11 @@
#include "global.h"
-Gfx D_801D0D00[] = {
+typedef enum {
+ /* 0 */ TRANS_CIRCLE_DIR_IN,
+ /* 1 */ TRANS_CIRCLE_DIR_OUT,
+} TransitionCircleDirection;
+
+Gfx sTransCircleSetupDL[] = {
gsDPPipeSync(),
gsDPSetOtherMode(G_AD_DISABLE | G_CD_DISABLE | 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,
@@ -23,7 +28,7 @@ void TransitionCircle_Start(void* thisx) {
TransitionCircle* this = (TransitionCircle*)thisx;
this->stepValue = 0.1f;
- if (this->direction == TRANSITION_CIRCLE_IN) {
+ if (this->direction == TRANS_CIRCLE_DIR_IN) {
this->targetRadius = 0.0f;
this->startingRadius = 1.0f;
} else {
@@ -67,10 +72,10 @@ void TransitionCircle_SetType(void* thisx, s32 type) {
if (type & TC_SET_PARAMS) {
this->maskType = FBDEMO_CIRCLE_GET_MASK_TYPE(type);
- } else if (type == 1) {
- this->direction = TRANSITION_CIRCLE_OUT;
+ } else if (type == TRANS_INSTANCE_TYPE_FILL_OUT) {
+ this->direction = TRANS_CIRCLE_DIR_OUT;
} else {
- this->direction = TRANSITION_CIRCLE_IN;
+ this->direction = TRANS_CIRCLE_DIR_IN;
}
}
@@ -121,7 +126,7 @@ void TransitionCircle_Draw(void* thisx, Gfx** gfxp) {
TransitionCircle* this = (TransitionCircle*)thisx;
gDPPipeSync(gfx++);
- gSPDisplayList(gfx++, &D_801D0D00);
+ gSPDisplayList(gfx++, sTransCircleSetupDL);
gDPSetPrimColor(gfx++, 0, this->color.a, this->color.r, this->color.g, this->color.b, 1);
if (this->maskType == 0) {
gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIM_LOD_FRAC, PRIMITIVE, 0, 0, 0, PRIMITIVE, TEXEL0, 0,
diff --git a/src/code/z_fbdemo_fade.c b/src/code/z_fbdemo_fade.c
index a0d9f1eae..a9ab37d48 100644
--- a/src/code/z_fbdemo_fade.c
+++ b/src/code/z_fbdemo_fade.c
@@ -1,17 +1,150 @@
#include "global.h"
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo_fade/TransitionFade_Start.s")
+#define THIS ((TransitionFade*)thisx)
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo_fade/TransitionFade_Init.s")
+typedef enum {
+ /* 0 */ TRANS_FADE_DIR_IN,
+ /* 1 */ TRANS_FADE_DIR_OUT
+} TransitionFadeDirection;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo_fade/TransitionFade_Destroy.s")
+typedef enum {
+ /* 0 */ TRANS_FADE_TYPE_NONE,
+ /* 1 */ TRANS_FADE_TYPE_ONE_WAY,
+ /* 2 */ TRANS_FADE_TYPE_FLASH
+} TransitionFadeType;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo_fade/TransitionFade_Update.s")
+static Gfx sTransFadeSetupDL[] = {
+ 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_NOTPATTERN | G_CD_BAYER | 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),
+ gsDPSetCombineLERP(0, 0, 0, PRIMITIVE, 0, 0, 0, PRIMITIVE, 0, 0, 0, PRIMITIVE, 0, 0, 0, PRIMITIVE),
+ gsSPEndDisplayList(),
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo_fade/TransitionFade_Draw.s")
+TransitionInit TransitionFade_InitVars = {
+ TransitionFade_Init, TransitionFade_Destroy, TransitionFade_Update, TransitionFade_Draw,
+ TransitionFade_Start, TransitionFade_SetType, TransitionFade_SetColor, NULL,
+ TransitionFade_IsDone,
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo_fade/TransitionFade_IsDone.s")
+void TransitionFade_Start(void* thisx) {
+ TransitionFade* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo_fade/TransitionFade_SetColor.s")
+ switch (this->type) {
+ case TRANS_FADE_TYPE_NONE:
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo_fade/TransitionFade_SetType.s")
+ case TRANS_FADE_TYPE_ONE_WAY:
+ this->timer = 0;
+ this->color.a = (this->direction != TRANS_FADE_DIR_IN) ? 255 : 0;
+ break;
+
+ case TRANS_FADE_TYPE_FLASH:
+ this->color.a = 0;
+ break;
+
+ default:
+ break;
+ }
+ this->isDone = false;
+}
+
+void* TransitionFade_Init(void* thisx) {
+ TransitionFade* this = THIS;
+
+ bzero(this, sizeof(TransitionFade));
+ return this;
+}
+
+void TransitionFade_Destroy(void* thisx) {
+}
+
+void TransitionFade_Update(void* thisx, s32 updateRate) {
+ s32 alpha;
+ s16 newAlpha;
+ TransitionFade* this = THIS;
+
+ switch (this->type) {
+ case TRANS_FADE_TYPE_NONE:
+ break;
+
+ case TRANS_FADE_TYPE_ONE_WAY:
+ //! FAKE:
+ THIS->timer += updateRate;
+
+ if (this->timer >= ((void)0, gSaveContext.transFadeDuration)) {
+ this->timer = ((void)0, gSaveContext.transFadeDuration);
+ this->isDone = true;
+ }
+
+ alpha = (255.0f * this->timer) / ((void)0, gSaveContext.transFadeDuration);
+ this->color.a = (this->direction != TRANS_FADE_DIR_IN) ? 255 - alpha : alpha;
+ break;
+
+ case TRANS_FADE_TYPE_FLASH:
+ newAlpha = this->color.a;
+ if (R_TRANS_FADE_FLASH_ALPHA_STEP != 0) {
+ if (R_TRANS_FADE_FLASH_ALPHA_STEP < 0) {
+ if (Math_StepToS(&newAlpha, 255, 255)) {
+ R_TRANS_FADE_FLASH_ALPHA_STEP = 150;
+ }
+ } else {
+ Math_StepToS(&R_TRANS_FADE_FLASH_ALPHA_STEP, 20, 60);
+ if (Math_StepToS(&newAlpha, 0, R_TRANS_FADE_FLASH_ALPHA_STEP)) {
+ R_TRANS_FADE_FLASH_ALPHA_STEP = 0;
+ this->isDone = true;
+ }
+ }
+ }
+ this->color.a = newAlpha;
+ break;
+
+ default:
+ break;
+ }
+}
+
+void TransitionFade_Draw(void* thisx, Gfx** gfxP) {
+ TransitionFade* this = THIS;
+ Gfx* gfx;
+ Color_RGBA8_u32* color = &this->color;
+
+ if (color->a != 0) {
+ gfx = *gfxP;
+ gSPDisplayList(gfx++, sTransFadeSetupDL);
+ gDPSetPrimColor(gfx++, 0, 0, color->r, color->g, color->b, color->a);
+ gSPDisplayList(gfx++, D_0E000000.fillRect);
+ *gfxP = gfx;
+ }
+}
+
+s32 TransitionFade_IsDone(void* thisx) {
+ TransitionFade* this = THIS;
+
+ return this->isDone;
+}
+
+void TransitionFade_SetColor(void* thisx, u32 color) {
+ TransitionFade* this = THIS;
+
+ this->color.rgba = color;
+}
+
+void TransitionFade_SetType(void* thisx, s32 type) {
+ TransitionFade* this = THIS;
+
+ if (type == TRANS_INSTANCE_TYPE_FILL_OUT) {
+ this->type = TRANS_FADE_TYPE_ONE_WAY;
+ this->direction = TRANS_FADE_DIR_OUT;
+ } else if (type == TRANS_INSTANCE_TYPE_FILL_IN) {
+ this->type = TRANS_FADE_TYPE_ONE_WAY;
+ this->direction = TRANS_FADE_DIR_IN;
+ } else if (type == TRANS_INSTANCE_TYPE_FADE_FLASH) {
+ this->type = TRANS_FADE_TYPE_FLASH;
+ } else {
+ this->type = TRANS_FADE_TYPE_NONE;
+ }
+}
diff --git a/src/code/z_fireobj.c b/src/code/z_fireobj.c
index d0b88b3db..114e62cc7 100644
--- a/src/code/z_fireobj.c
+++ b/src/code/z_fireobj.c
@@ -1,14 +1,7 @@
-#include "global.h"
+#include "z_fireobj.h"
#include "overlays/actors/ovl_En_Arrow/z_en_arrow.h"
#include "objects/gameplay_keep/gameplay_keep.h"
-typedef enum {
- FIRE_STATE_0,
- FIRE_STATE_1,
- FIRE_STATE_2,
- FIRE_STATE_3,
-} FireState;
-
ColliderCylinderInit sFireObjCollisionInit = {
{
COLTYPE_NONE,
@@ -48,17 +41,17 @@ void FireObj_InitWithParams(PlayState* play, FireObj* fire, FireObjInitParams* i
fire->xScale = 0.0f;
fire->yScale = 0.0f;
fire->dynamicSize = 0.0f;
- fire->unk26 = Rand_ZeroOne() * 20.0f;
+ fire->timer = Rand_ZeroOne() * 20.0f;
fire->ignitionDelay = -1;
}
void FireObj_SetState(FireObj* fire, f32 dynamicSizeStep, u8 newState) {
fire->state = newState;
- if (fire->state == FIRE_STATE_3) {
+ if (fire->state == FIRE_STATE_NOT_LIT) {
fire->yScale = 0.0f;
fire->xScale = 0.0f;
fire->dynamicSize = 0.0f;
- } else if (fire->state == FIRE_STATE_2) {
+ } else if (fire->state == FIRE_STATE_FULLY_LIT) {
fire->xScale = fire->yScale = fire->size;
fire->dynamicSize = 1.0f;
}
@@ -70,15 +63,16 @@ void FireObj_SetPosition(FireObj* fire, Vec3f* pos) {
}
void FireObj_StepSize(FireObj* fire) {
- if (fire->state == FIRE_STATE_0) {
- if (Math_StepToF(&fire->dynamicSize, 1.0f, fire->dynamicSizeStep) != 0) {
- FireObj_SetState(fire, fire->dynamicSizeStep, FIRE_STATE_2);
+ if (fire->state == FIRE_STATE_GROWING) {
+ if (Math_StepToF(&fire->dynamicSize, 1.0f, fire->dynamicSizeStep)) {
+ FireObj_SetState(fire, fire->dynamicSizeStep, FIRE_STATE_FULLY_LIT);
}
- } else if ((fire->state == FIRE_STATE_1) && (Math_StepToF(&fire->dynamicSize, 0.0f, fire->dynamicSizeStep) != 0)) {
- FireObj_SetState(fire, fire->dynamicSizeStep, FIRE_STATE_3);
+ } 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) {
- if ((fire->state == FIRE_STATE_0) || (fire->state == FIRE_STATE_1)) {
+ if ((fire->state == FIRE_STATE_GROWING) || (fire->state == FIRE_STATE_SHRINKING)) {
fire->xScale = (1.0f - Math_CosS(SQ(fire->dynamicSize) * 0x4000)) * fire->size;
fire->yScale = fire->dynamicSize * fire->size;
} else {
@@ -101,39 +95,41 @@ void FireObj_UpdateStateTransitions(PlayState* play, FireObj* fire) {
Vec3f dist;
FireObj_StepSize(fire);
- fire->unk26++;
+ fire->timer++;
if (fire->ignitionDelay > 0) {
fire->ignitionDelay--;
} else if (fire->ignitionDelay == 0) {
fire->ignitionDelay = -1;
- if ((fire->state == FIRE_STATE_3) || (fire->state == FIRE_STATE_1)) {
- nextState = FIRE_STATE_0;
+ if ((fire->state == FIRE_STATE_NOT_LIT) || (fire->state == FIRE_STATE_SHRINKING)) {
+ nextState = FIRE_STATE_GROWING;
} else {
- nextState = FIRE_STATE_1;
+ nextState = FIRE_STATE_SHRINKING;
}
FireObj_SetState(fire, fire->dynamicSizeStep, nextState);
}
- if ((fire->flags & 1) && (fire->state != FIRE_STATE_3) &&
+
+ if ((fire->flags & FIRE_FLAG_WATER_EXTINGUISHABLE) && (fire->state != FIRE_STATE_NOT_LIT) &&
WaterBox_GetSurface1_2(play, &play->colCtx, fire->position.x, fire->position.z, &waterY, &waterBox) &&
(waterY - fire->position.y > 6500.0f * fire->yScale)) {
- FireObj_SetState(fire, fire->dynamicSizeStep, FIRE_STATE_3);
+ FireObj_SetState(fire, fire->dynamicSizeStep, FIRE_STATE_NOT_LIT);
}
- if ((fire->flags & 2) && (player->itemActionParam == PLAYER_AP_STICK)) {
+ if ((fire->flags & FIRE_FLAG_INTERACT_STICK) && (player->heldItemAction == PLAYER_IA_STICK)) {
Math_Vec3f_Diff(&player->meleeWeaponInfo[0].tip, &fire->position, &dist);
- if (Math3D_LengthSquared(&dist) < 400.0f) {
+ if (Math3D_LengthSquared(&dist) < SQ(20.0f)) {
sp40 = true;
}
}
+
if (sp40) {
- if (fire->state == FIRE_STATE_3) {
+ if (fire->state == FIRE_STATE_NOT_LIT) {
if (player->unk_B28 > 0) {
- FireObj_SetState(fire, fire->dynamicSizeStep, FIRE_STATE_0);
+ FireObj_SetState(fire, fire->dynamicSizeStep, FIRE_STATE_GROWING);
}
} else if (player->unk_B28 == 0) {
- player->unk_B28 = 0xD2;
+ player->unk_B28 = 210;
SoundSource_PlaySfxAtFixedWorldPos(play, &fire->position, 20, NA_SE_EV_FLAME_IGNITION);
- } else if (player->unk_B28 < 0xC8) {
- player->unk_B28 = 0xC8;
+ } else if (player->unk_B28 < 200) {
+ player->unk_B28 = 200;
}
}
}
@@ -142,13 +138,13 @@ void FireObj_Draw(PlayState* play, FireObj* fire) {
s32 pad;
FireObjColors* fireColors = &sFireObjColors[fire->colorsIndex];
- if (fire->state != FIRE_STATE_3) {
+ if (fire->state != FIRE_STATE_NOT_LIT) {
Vec3s vec;
OPEN_DISPS(play->state.gfxCtx);
func_8012C2DC(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08,
- Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 32, 64, 1, 0, (fire->unk26 * -20) & 511, 32, 128));
+ Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 32, 64, 1, 0, (fire->timer * -20) % 512U, 32, 128));
gDPSetPrimColor(POLY_XLU_DISP++, 0, fireColors->lod, fireColors->primColor.r, fireColors->primColor.g,
fireColors->primColor.b, fireColors->primColor.a);
@@ -185,7 +181,7 @@ void FireObj_UpdateLight(PlayState* play, FireObjLight* light, FireObj* fire) {
FireObjLightParams* lightParams = &sFireObjLightParams[light->lightParamsIndex];
s16 radius;
- if (fire->state == FIRE_STATE_3) {
+ if (fire->state == FIRE_STATE_NOT_LIT) {
Lights_PointSetColorAndRadius(&light->lightInfo, 0, 0, 0, -1);
} else {
radius = (fire->yScale * 140.0f * fire->sizeInv) + 60.0f;
@@ -225,14 +221,15 @@ void FireObj_Update(PlayState* play, FireObj* fire, Actor* actor) {
EnArrow* arrow = (EnArrow*)fire->collision.base.ac;
FireObj_UpdateStateTransitions(play, fire);
- if (fire->state == FIRE_STATE_3) {
- if ((fire->collision.base.acFlags & AC_HIT) && (fire->collision.info.acHitInfo->toucher.dmgFlags & 0x800)) {
- FireObj_SetState(fire, fire->dynamicSizeStep, FIRE_STATE_0);
+ if (fire->state == FIRE_STATE_NOT_LIT) {
+ if ((fire->collision.base.acFlags & AC_HIT) &&
+ (fire->collision.info.acHitInfo->toucher.dmgFlags & DMG_FIRE_ARROW)) {
+ FireObj_SetState(fire, fire->dynamicSizeStep, FIRE_STATE_GROWING);
}
} else if ((fire->collision.base.acFlags & AC_HIT) && (arrow->actor.update != NULL) &&
(arrow->actor.id == ACTOR_EN_ARROW)) {
arrow->actor.params = 0;
- arrow->collider.info.toucher.dmgFlags = 0x800;
+ arrow->collider.info.toucher.dmgFlags = DMG_FIRE_ARROW;
}
fire->collision.dim.pos.x = fire->position.x;
fire->collision.dim.pos.y = fire->position.y;
diff --git a/src/code/z_game_dlftbls.c b/src/code/z_game_dlftbls.c
index 11d390a28..1b82705f5 100644
--- a/src/code/z_game_dlftbls.c
+++ b/src/code/z_game_dlftbls.c
@@ -24,4 +24,4 @@ GameStateOverlay gGameStateOverlayTable[] = {
GAMESTATE_OVERLAY(daytelop, DayTelop_Init, DayTelop_Destroy, sizeof(DayTelopState)),
};
-s32 graphNumGameStates = ARRAY_COUNT(gGameStateOverlayTable);
+s32 gGraphNumGameStates = ARRAY_COUNT(gGameStateOverlayTable);
diff --git a/src/code/z_game_over.c b/src/code/z_game_over.c
index 857250eec..d0e5e45f2 100644
--- a/src/code/z_game_over.c
+++ b/src/code/z_game_over.c
@@ -1,6 +1,10 @@
-#include "global.h"
+#include "z64game_over.h"
#include "z64rumble.h"
#include "z64shrink_window.h"
+#include "z64.h"
+#include "functions.h"
+#include "variables.h"
+#include "macros.h"
void GameOver_Init(PlayState* play) {
play->gameOverCtx.state = GAMEOVER_INACTIVE;
@@ -23,13 +27,13 @@ void GameOver_Update(PlayState* play) {
switch (gameOverCtx->state) {
case GAMEOVER_DEATH_START:
- func_801477B4(play);
+ Message_CloseTextbox(play);
for (timerId = 0; timerId < TIMER_ID_MAX; timerId++) {
gSaveContext.timerStates[timerId] = TIMER_STATE_OFF;
}
- gSaveContext.eventInf[1] &= ~1;
+ CLEAR_EVENTINF_ALT(EVENTINF_10);
if (CUR_FORM == 0) {
if (CUR_FORM_EQUIP(EQUIP_SLOT_B) != ITEM_SWORD_KOKIRI &&
@@ -46,7 +50,7 @@ void GameOver_Update(PlayState* play) {
}
gSaveContext.unk_3DC0 = 2000;
- gSaveContext.save.playerData.tatlTimer = 0;
+ gSaveContext.save.saveInfo.playerData.tatlTimer = 0;
gSaveContext.seqId = (u8)NA_BGM_DISABLED;
gSaveContext.ambienceId = AMBIENCE_ID_DISABLED;
gSaveContext.eventInf[0] = 0;
@@ -67,14 +71,15 @@ void GameOver_Update(PlayState* play) {
Rumble_Request(0.0f, 126, 124, 63);
gameOverCtx->state = GAMEOVER_DEATH_WAIT_GROUND;
break;
+
case GAMEOVER_DEATH_FADE_OUT:
- if (Audio_GetActiveSequence(SEQ_PLAYER_FANFARE) != NA_BGM_GAME_OVER) {
+ if (AudioSeq_GetActiveSeqId(SEQ_PLAYER_FANFARE) != NA_BGM_GAME_OVER) {
func_80169F78(&play->state);
if (gSaveContext.respawnFlag != -7) {
gSaveContext.respawnFlag = -6;
}
- gSaveContext.nextTransitionType = TRANS_TYPE_02;
- gSaveContext.save.playerData.health = 0x30;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
+ gSaveContext.save.saveInfo.playerData.health = 0x30;
gameOverCtx->state++;
if (INV_CONTENT(ITEM_MASK_DEKU) == ITEM_MASK_DEKU) {
gSaveContext.save.playerForm = PLAYER_FORM_HUMAN;
@@ -83,31 +88,36 @@ void GameOver_Update(PlayState* play) {
Rumble_StateReset();
}
break;
+
case GAMEOVER_REVIVE_START:
- gameOverCtx->state++;
+ gameOverCtx->state++; // GAMEOVER_REVIVE_RUMBLE
sGameOverTimer = 0;
Kankyo_InitGameOverLights(play);
ShrinkWindow_Letterbox_SetSizeTarget(32);
break;
+
case GAMEOVER_REVIVE_RUMBLE:
sGameOverTimer = 50;
- gameOverCtx->state++;
+ gameOverCtx->state++; // GAMEOVER_REVIVE_WAIT_GROUND
Rumble_Request(0.0f, 126, 124, 63);
break;
+
case GAMEOVER_REVIVE_WAIT_GROUND:
sGameOverTimer--;
if (sGameOverTimer == 0) {
sGameOverTimer = 64;
- gameOverCtx->state++;
+ gameOverCtx->state++; // GAMEOVER_REVIVE_WAIT_FAIRY
}
break;
+
case GAMEOVER_REVIVE_WAIT_FAIRY:
sGameOverTimer--;
if (sGameOverTimer == 0) {
sGameOverTimer = 50;
- gameOverCtx->state++;
+ gameOverCtx->state++; // GAMEOVER_REVIVE_FADE_OUT
}
break;
+
case GAMEOVER_REVIVE_FADE_OUT:
Kankyo_FadeOutGameOverLights(play);
sGameOverTimer--;
diff --git a/src/code/z_jpeg.c b/src/code/z_jpeg.c
index 7b9254ccd..ad592a40e 100644
--- a/src/code/z_jpeg.c
+++ b/src/code/z_jpeg.c
@@ -24,22 +24,22 @@ extern u64 njpgdspMainDataStart[];
*/
void Jpeg_ScheduleDecoderTask(JpegContext* jpegCtx) {
static OSTask_t sJpegTask = {
- M_NJPEGTASK, // type
- 0, // flags
- NULL, // ucode_boot
- 0, // ucode_boot_size
- njpgdspMainTextStart, // ucode
- 0x1000, // ucode_size
- njpgdspMainDataStart, // ucode_data
- 0x800, // ucode_data_size
- NULL, // dram_stack
- 0, // dram_stack_size
- NULL, // output_buff
- NULL, // output_buff_size
- NULL, // data_ptr
- sizeof(JpegTaskData), // data_size
- NULL, // yield_data_ptr
- 0x200, // yield_data_size
+ M_NJPEGTASK, // type
+ 0, // flags
+ NULL, // ucode_boot
+ 0, // ucode_boot_size
+ njpgdspMainTextStart, // ucode
+ SP_UCODE_SIZE, // ucode_size
+ njpgdspMainDataStart, // ucode_data
+ SP_UCODE_DATA_SIZE, // ucode_data_size
+ NULL, // dram_stack
+ 0, // dram_stack_size
+ NULL, // output_buff
+ NULL, // output_buff_size
+ NULL, // data_ptr
+ sizeof(JpegTaskData), // data_size
+ NULL, // yield_data_ptr
+ sizeof(jpegCtx->workBuf->yieldData), // yield_data_size
};
JpegWork* workBuf = jpegCtx->workBuf;
diff --git a/src/code/z_kaleido_manager.c b/src/code/z_kaleido_manager.c
index 48e8e2ad6..0d9f30a08 100644
--- a/src/code/z_kaleido_manager.c
+++ b/src/code/z_kaleido_manager.c
@@ -14,24 +14,23 @@ KaleidoMgrOverlay gKaleidoMgrOverlayTable[] = {
void* sKaleidoAreaPtr = NULL;
KaleidoMgrOverlay* gKaleidoMgrCurOvl = NULL;
-FaultAddrConvClient sKaleidoAreaFaultClient;
+FaultAddrConvClient sKaleidoMgrFaultAddrConvClient;
-void* KaleidoManager_FaultAddrConvFunc(void* address, void* param) {
- u8* ptr = address;
- KaleidoMgrOverlay* ovl = &gKaleidoMgrCurOvl[0];
- u8* ramStart;
- u8* ramEnd;
- size_t size;
- uintptr_t offset;
+void* KaleidoManager_FaultAddrConv(void* address, void* param) {
+ uintptr_t addr = address;
+ KaleidoMgrOverlay* kaleidoMgrOvl = gKaleidoMgrCurOvl;
+ size_t ramConv;
+ void* ramStart;
+ size_t diff;
+
+ if (kaleidoMgrOvl != NULL) {
+ diff = VRAM_PTR_SIZE(kaleidoMgrOvl);
+ ramStart = kaleidoMgrOvl->loadedRamAddr;
+ ramConv = (uintptr_t)kaleidoMgrOvl->vramStart - (uintptr_t)ramStart;
- if (ovl != NULL) {
- size = VRAM_PTR_SIZE(ovl);
- ramStart = ovl->loadedRamAddr;
- ramEnd = ramStart + size;
- offset = (u8*)ovl->vramStart - ramStart;
if (ramStart != NULL) {
- if (ptr >= ramStart && ptr < ramEnd) {
- return ptr + offset;
+ if ((addr >= (uintptr_t)ramStart) && (addr < (uintptr_t)ramStart + diff)) {
+ return addr + ramConv;
}
}
}
@@ -66,13 +65,13 @@ void KaleidoManager_Init(PlayState* play) {
}
}
- sKaleidoAreaPtr = THA_AllocEndAlign16(&play->state.heap, largestSize);
+ sKaleidoAreaPtr = THA_AllocTailAlign16(&play->state.heap, largestSize);
gKaleidoMgrCurOvl = NULL;
- Fault_AddAddrConvClient(&sKaleidoAreaFaultClient, KaleidoManager_FaultAddrConvFunc, NULL);
+ Fault_AddAddrConvClient(&sKaleidoMgrFaultAddrConvClient, KaleidoManager_FaultAddrConv, NULL);
}
void KaleidoManager_Destroy() {
- Fault_RemoveAddrConvClient(&sKaleidoAreaFaultClient);
+ Fault_RemoveAddrConvClient(&sKaleidoMgrFaultAddrConvClient);
if (gKaleidoMgrCurOvl != NULL) {
KaleidoManager_ClearOvl(gKaleidoMgrCurOvl);
diff --git a/src/code/z_kaleido_scope_call.c b/src/code/z_kaleido_scope_call.c
index 9cea42691..59fde2f2d 100644
--- a/src/code/z_kaleido_scope_call.c
+++ b/src/code/z_kaleido_scope_call.c
@@ -35,24 +35,25 @@ void KaleidoScopeCall_Update(PlayState* play) {
PauseContext* pauseCtx = &play->pauseCtx;
KaleidoMgrOverlay* kaleidoScopeOvl = &gKaleidoMgrOverlayTable[KALEIDO_OVL_KALEIDO_SCOPE];
- if ((play->pauseCtx.state != 0) || (play->pauseCtx.debugEditor != DEBUG_EDITOR_NONE)) {
- if (pauseCtx->state == 1 || pauseCtx->state == 19) {
+ if ((play->pauseCtx.state != PAUSE_STATE_OFF) || (play->pauseCtx.debugEditor != DEBUG_EDITOR_NONE)) {
+ if ((pauseCtx->state == PAUSE_STATE_OPENING_0) || (pauseCtx->state == PAUSE_STATE_OWLWARP_0)) {
if (ShrinkWindow_Letterbox_GetSize() == 0) {
- R_PAUSE_MENU_MODE = 1;
- pauseCtx->unk_200 = 0;
- pauseCtx->unk_208 = 0;
+ R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_SETUP;
+ pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE;
+ pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_0;
pauseCtx->state = (pauseCtx->state & 0xFFFF) + 1;
}
- } else if (pauseCtx->state == 8) {
- R_PAUSE_MENU_MODE = 1;
- pauseCtx->unk_200 = 0;
- pauseCtx->unk_208 = 0;
+ } 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->state = (pauseCtx->state & 0xFFFF) + 1;
- } else if ((pauseCtx->state == 2) || (pauseCtx->state == 9) || (pauseCtx->state == 20)) {
- if (R_PAUSE_MENU_MODE == 3) {
+ } else if ((pauseCtx->state == PAUSE_STATE_OPENING_1) || (pauseCtx->state == PAUSE_STATE_GAMEOVER_1) ||
+ (pauseCtx->state == PAUSE_STATE_OWLWARP_1)) {
+ if (R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_READY) {
pauseCtx->state++;
}
- } else if (pauseCtx->state != 0) {
+ } else if (pauseCtx->state != PAUSE_STATE_OFF) {
if (gKaleidoMgrCurOvl != kaleidoScopeOvl) {
if (gKaleidoMgrCurOvl != NULL) {
KaleidoManager_ClearOvl(gKaleidoMgrCurOvl);
@@ -64,7 +65,7 @@ void KaleidoScopeCall_Update(PlayState* play) {
if (gKaleidoMgrCurOvl == kaleidoScopeOvl) {
sKaleidoScopeUpdateFunc(play);
- if ((play->pauseCtx.state == 0) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) {
+ if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) {
KaleidoManager_ClearOvl(kaleidoScopeOvl);
KaleidoScopeCall_LoadPlayer();
}
@@ -76,9 +77,9 @@ void KaleidoScopeCall_Update(PlayState* play) {
void KaleidoScopeCall_Draw(PlayState* play) {
KaleidoMgrOverlay* kaleidoScopeOvl = &gKaleidoMgrOverlayTable[KALEIDO_OVL_KALEIDO_SCOPE];
- if (R_PAUSE_MENU_MODE == 3) {
- if (((play->pauseCtx.state >= 4) && (play->pauseCtx.state <= 7)) ||
- ((play->pauseCtx.state >= 11) && (play->pauseCtx.state <= 26))) {
+ if (R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_READY) {
+ if (((play->pauseCtx.state >= PAUSE_STATE_OPENING_3) && (play->pauseCtx.state <= PAUSE_STATE_SAVEPROMPT)) ||
+ ((play->pauseCtx.state >= PAUSE_STATE_GAMEOVER_3) && (play->pauseCtx.state <= PAUSE_STATE_UNPAUSE_SETUP))) {
if (gKaleidoMgrCurOvl == kaleidoScopeOvl) {
sKaleidoScopeDrawFunc(play);
}
diff --git a/src/code/z_kaleido_setup.c b/src/code/z_kaleido_setup.c
index 2f2e3c388..148aad84e 100644
--- a/src/code/z_kaleido_setup.c
+++ b/src/code/z_kaleido_setup.c
@@ -4,9 +4,24 @@
#include "z64view.h"
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
-s16 D_801BDB00[] = { PAUSE_MAP, PAUSE_QUEST, PAUSE_MASK, PAUSE_ITEM };
-f32 sKaleidoSetupEyeX[] = { -64.0f, 0.0f, 64.0f, 0.0f };
-f32 sKaleidoSetupEyeZ[] = { 0.0f, -64.0f, 0.0f, 64.0f };
+s16 sKaleidoSetupRightPageIndex[] = {
+ PAUSE_MAP, // PAUSE_ITEM
+ PAUSE_QUEST, // PAUSE_MAP
+ PAUSE_MASK, // PAUSE_QUEST
+ PAUSE_ITEM, // PAUSE_MASK
+};
+f32 sKaleidoSetupRightPageEyeX[] = {
+ PAUSE_EYE_DIST * -PAUSE_MAP_X, // PAUSE_ITEM
+ PAUSE_EYE_DIST * -PAUSE_QUEST_X, // PAUSE_MAP
+ PAUSE_EYE_DIST * -PAUSE_MASK_X, // PAUSE_QUEST
+ PAUSE_EYE_DIST * -PAUSE_ITEM_X, // PAUSE_MASK
+};
+f32 sKaleidoSetupRightPageEyeZ[] = {
+ PAUSE_EYE_DIST * -PAUSE_MAP_Z, // PAUSE_ITEM
+ PAUSE_EYE_DIST * -PAUSE_QUEST_Z, // PAUSE_MAP
+ PAUSE_EYE_DIST * -PAUSE_MASK_Z, // PAUSE_QUEST
+ PAUSE_EYE_DIST * -PAUSE_ITEM_Z, // PAUSE_MASK
+};
void func_800F4A10(PlayState* play) {
PauseContext* pauseCtx = &play->pauseCtx;
@@ -14,32 +29,34 @@ void func_800F4A10(PlayState* play) {
Rumble_StateReset();
- pauseCtx->unk_206 = 0;
- pauseCtx->unk_200 = 1;
- pauseCtx->eye.x = sKaleidoSetupEyeX[pauseCtx->pageIndex];
- pauseCtx->eye.z = sKaleidoSetupEyeZ[pauseCtx->pageIndex];
- pauseCtx->pageIndex = D_801BDB00[pauseCtx->pageIndex];
- pauseCtx->unk_27E = -40;
+ pauseCtx->switchPageTimer = 0;
+ pauseCtx->mainState = PAUSE_MAIN_STATE_SWITCHING_PAGE;
+
+ // Set eye position and pageIndex such that scrolling left brings to the desired page
+ pauseCtx->eye.x = sKaleidoSetupRightPageEyeX[pauseCtx->pageIndex];
+ pauseCtx->eye.z = sKaleidoSetupRightPageEyeZ[pauseCtx->pageIndex];
+ pauseCtx->pageIndex = sKaleidoSetupRightPageIndex[pauseCtx->pageIndex];
+ pauseCtx->infoPanelOffsetY = -40;
for (i = 0; i < ARRAY_COUNT(pauseCtx->worldMapPoints); i++) {
pauseCtx->worldMapPoints[i] = false;
}
- if (pauseCtx->state == 1) {
+ if (pauseCtx->state == PAUSE_STATE_OPENING_0) {
for (i = 0; i < REGION_MAX; i++) {
- if ((gSaveContext.save.regionsVisited >> i) & 1) {
+ if ((gSaveContext.save.saveInfo.regionsVisited >> i) & 1) {
pauseCtx->worldMapPoints[i] = true;
}
}
} else {
for (i = OWL_WARP_STONE_TOWER; i >= OWL_WARP_GREAT_BAY_COAST; i--) {
- if ((gSaveContext.save.playerData.owlActivationFlags >> i) & 1) {
+ if ((gSaveContext.save.saveInfo.playerData.owlActivationFlags >> i) & 1) {
pauseCtx->worldMapPoints[i] = true;
pauseCtx->cursorPoint[PAUSE_WORLD_MAP] = i;
}
}
- if ((gSaveContext.save.playerData.owlActivationFlags >> 4) & 1) {
+ if ((gSaveContext.save.saveInfo.playerData.owlActivationFlags >> 4) & 1) {
pauseCtx->cursorPoint[PAUSE_WORLD_MAP] = 4;
}
}
@@ -72,26 +89,27 @@ void KaleidoSetup_Update(PlayState* play) {
if (msgCtx && msgCtx) {}
}
- if ((pauseCtx->state == 0) && (pauseCtx->debugEditor == DEBUG_EDITOR_NONE) &&
+ if ((pauseCtx->state == PAUSE_STATE_OFF) && (pauseCtx->debugEditor == DEBUG_EDITOR_NONE) &&
(play->gameOverCtx.state == GAMEOVER_INACTIVE)) {
if ((play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF)) {
- if ((gSaveContext.save.cutscene < 0xFFF0) && (gSaveContext.nextCutsceneIndex < 0xFFF0)) {
+ if ((gSaveContext.save.cutsceneIndex < 0xFFF0) && (gSaveContext.nextCutsceneIndex < 0xFFF0)) {
if (!Play_InCsMode(play) || ((msgCtx->msgMode != 0) && (msgCtx->currentTextId == 0xFF))) {
if ((play->unk_1887C < 2) && (gSaveContext.magicState != MAGIC_STATE_STEP_CAPACITY) &&
(gSaveContext.magicState != MAGIC_STATE_FILL)) {
- if (!(gSaveContext.eventInf[1] & 0x80) && !(player->stateFlags1 & 0x20)) {
+ if (!CHECK_EVENTINF(EVENTINF_17) && !(player->stateFlags1 & PLAYER_STATE1_20)) {
if (!(play->actorCtx.flags & ACTORCTX_FLAG_1) &&
- !(play->actorCtx.flags & ACTORCTX_FLAG_2)) {
+ !(play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON)) {
if ((play->actorCtx.unk268 == 0) && CHECK_BTN_ALL(input->press.button, BTN_START)) {
gSaveContext.prevHudVisibility = gSaveContext.hudVisibility;
pauseCtx->itemDescriptionOn = false;
- pauseCtx->state = 1;
+ pauseCtx->state = PAUSE_STATE_OPENING_0;
func_800F4A10(play);
- pauseCtx->mode = pauseCtx->pageIndex * 2 + 1;
+ // Set next page mode to scroll left
+ pauseCtx->nextPageMode = pauseCtx->pageIndex * 2 + 1;
func_801A3A7C(1);
}
- if (pauseCtx->state == 1) {
+ if (pauseCtx->state == PAUSE_STATE_OPENING_0) {
Game_SetFramerateDivisor(&play->state, 2);
if (ShrinkWindow_Letterbox_GetSizeTarget() != 0) {
ShrinkWindow_Letterbox_SetSizeTarget(0);
@@ -115,14 +133,14 @@ void KaleidoSetup_Init(PlayState* play) {
pauseCtx->pageIndex = PAUSE_ITEM;
- pauseCtx->unk_21C = 160.0f;
- pauseCtx->unk_218 = 160.0f;
- pauseCtx->unk_214 = 160.0f;
- pauseCtx->unk_210 = 160.0f;
+ pauseCtx->maskPageRoll = 160.0f;
+ pauseCtx->questPageRoll = 160.0f;
+ pauseCtx->mapPageRoll = 160.0f;
+ pauseCtx->itemPageRoll = 160.0f;
pauseCtx->eye.x = -64.0f;
pauseCtx->unk_20C = 936.0f;
- pauseCtx->unk_220 = -314.0f;
+ pauseCtx->roll = -314.0f;
pauseCtx->cursorPoint[PAUSE_MAP] = R_REVERSE_FLOOR_INDEX + (DUNGEON_FLOOR_INDEX_4 - 1);
@@ -137,8 +155,8 @@ void KaleidoSetup_Init(PlayState* play) {
pauseCtx->cursorSlot[PAUSE_ITEM] = 0;
pauseCtx->cursorSlot[PAUSE_MAP] = R_REVERSE_FLOOR_INDEX + (DUNGEON_FLOOR_INDEX_4 - 1);
- pauseCtx->cursorColorSet = 2;
- pauseCtx->unk_2A0 = -1;
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_YELLOW;
+ pauseCtx->ocarinaSongIndex = -1;
pauseCtx->equipAnimScale = 320;
pauseCtx->equipAnimShrinkRate = 40;
pauseCtx->promptAlpha = 100;
diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c
index ad66fe4a1..d6d38f9d6 100644
--- a/src/code/z_kankyo.c
+++ b/src/code/z_kankyo.c
@@ -4,7 +4,7 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F50D4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Kankyo_Init.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_Init.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F5954.s")
@@ -12,7 +12,7 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F5B10.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F5CD0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_UpdateSkybox.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F6834.s")
@@ -42,11 +42,11 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F8A9C.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F8CD4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_Update.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F8D84.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F9728.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSunLensFlare.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F9824.s")
@@ -54,7 +54,7 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FA3C4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FA9FC.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawRain.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FAAB4.s")
@@ -72,7 +72,7 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FB9B4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FBCBC.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawCustomLensFlare.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Kankyo_InitGameOverLights.s")
@@ -82,9 +82,9 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FC3DC.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FC444.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_FillScreen.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FC64C.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_DrawSandstorm.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD2B4.s")
@@ -124,11 +124,11 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE3E0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE484.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_StopTime.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE498.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_StartTime.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE4A8.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_IsTimeStopped.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FE4B8.s")
diff --git a/src/code/z_lib.c b/src/code/z_lib.c
index 6466b337c..136918765 100644
--- a/src/code/z_lib.c
+++ b/src/code/z_lib.c
@@ -251,7 +251,7 @@ void func_800FF3A0(f32* distOut, s16* angleOut, Input* input) {
if (dist > 0.0f) {
x = input->cur.stick_x;
y = input->cur.stick_y;
- *angleOut = Math_FAtan2F(y, -x);
+ *angleOut = Math_Atan2S_XY(y, -x);
} else {
*angleOut = 0;
}
@@ -420,11 +420,11 @@ f32 Math_Vec3f_DiffY(Vec3f* a, Vec3f* b) {
s16 Math_Vec3f_Yaw(Vec3f* a, Vec3f* b) {
f32 f14 = b->x - a->x;
f32 f12 = b->z - a->z;
- return Math_FAtan2F(f12, f14);
+ return Math_Atan2S_XY(f12, f14);
}
s16 Math_Vec3f_Pitch(Vec3f* a, Vec3f* b) {
- return Math_FAtan2F(Math_Vec3f_DistXZ(a, b), a->y - b->y);
+ return Math_Atan2S_XY(Math_Vec3f_DistXZ(a, b), a->y - b->y);
}
void IChain_Apply_u8(u8* ptr, InitChainEntry* ichain);
diff --git a/src/code/z_lifemeter.c b/src/code/z_lifemeter.c
index d2a3a254c..d6f2edf2a 100644
--- a/src/code/z_lifemeter.c
+++ b/src/code/z_lifemeter.c
@@ -1,4 +1,3 @@
-#include "prevent_bss_reordering.h"
#include "global.h"
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
#include "interface/parameter_static/parameter_static.h"
@@ -36,9 +35,9 @@ TexturePtr HeartDDTextures[] = {
void LifeMeter_Init(PlayState* play) {
InterfaceContext* interfaceCtx = &play->interfaceCtx;
- interfaceCtx->unkTimer = 320;
+ interfaceCtx->healthTimer = 320;
- interfaceCtx->health = gSaveContext.save.playerData.health;
+ interfaceCtx->health = gSaveContext.save.saveInfo.playerData.health;
interfaceCtx->lifeColorChange = 0;
interfaceCtx->lifeColorChangeDirection = 0;
@@ -167,39 +166,44 @@ void LifeMeter_UpdateColors(PlayState* play) {
sBeatingHeartsDDEnv[2] = (u8)(bFactor + 0) & 0xFF;
}
+// Unused
s32 LifeMeter_SaveInterfaceHealth(PlayState* play) {
- gSaveContext.save.playerData.health = play->interfaceCtx.health;
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+
+ gSaveContext.save.saveInfo.playerData.health = interfaceCtx->health;
return 1;
}
+// Unused
s32 LifeMeter_IncreaseInterfaceHealth(PlayState* play) {
InterfaceContext* interfaceCtx = &play->interfaceCtx;
- interfaceCtx->unkTimer = 320;
+ interfaceCtx->healthTimer = 320;
interfaceCtx->health += 0x10;
- if (play->interfaceCtx.health >= gSaveContext.save.playerData.health) {
- play->interfaceCtx.health = gSaveContext.save.playerData.health;
- return 1;
+ if (play->interfaceCtx.health >= gSaveContext.save.saveInfo.playerData.health) {
+ play->interfaceCtx.health = gSaveContext.save.saveInfo.playerData.health;
+ return true;
}
- return 0;
+ return false;
}
+// Unused
s32 LifeMeter_DecreaseInterfaceHealth(PlayState* play) {
InterfaceContext* interfaceCtx = &play->interfaceCtx;
- if (interfaceCtx->unkTimer != 0) {
- interfaceCtx->unkTimer--;
+ if (interfaceCtx->healthTimer != 0) {
+ interfaceCtx->healthTimer--;
} else {
- interfaceCtx->unkTimer = 320;
+ interfaceCtx->healthTimer = 320;
interfaceCtx->health -= 0x10;
if (interfaceCtx->health <= 0) {
interfaceCtx->health = 0;
- play->damagePlayer(play, -(((void)0, gSaveContext.save.playerData.health) + 1));
- return 1;
+ play->damagePlayer(play, -(((void)0, gSaveContext.save.saveInfo.playerData.health) + 1));
+ return true;
}
}
- return 0;
+ return false;
}
void LifeMeter_Draw(PlayState* play) {
@@ -216,20 +220,21 @@ void LifeMeter_Draw(PlayState* play) {
GraphicsContext* gfxCtx = play->state.gfxCtx;
InterfaceContext* interfaceCtx = &play->interfaceCtx;
Vtx* beatingHeartVtx = interfaceCtx->beatingHeartVtx;
- s32 fractionHeartCount = gSaveContext.save.playerData.health % 0x10;
- s16 healthCapacity = gSaveContext.save.playerData.healthCapacity / 0x10;
- s16 fullHeartCount = gSaveContext.save.playerData.health / 0x10;
+ s32 fractionHeartCount = gSaveContext.save.saveInfo.playerData.health % 0x10;
+ s16 healthCapacity = gSaveContext.save.saveInfo.playerData.healthCapacity / 0x10;
+ s16 fullHeartCount = gSaveContext.save.saveInfo.playerData.health / 0x10;
s32 pad2;
f32 lifesize = interfaceCtx->lifeSizeChange * 0.1f;
u32 curCombineModeSet = 0;
TexturePtr temp = NULL;
- s32 ddCount = gSaveContext.save.inventory.defenseHearts - 1;
+ s32 ddCount = gSaveContext.save.saveInfo.inventory.defenseHearts - 1;
OPEN_DISPS(gfxCtx);
- if ((gSaveContext.save.playerData.health % 0x10) == 0) {
+ if ((gSaveContext.save.saveInfo.playerData.health % 0x10) == 0) {
fullHeartCount--;
}
+
offsetY = 0.0f;
offsetX = 0.0f;
curColorSet = -1;
@@ -376,12 +381,13 @@ void LifeMeter_Draw(PlayState* play) {
}
}
mtx = GRAPH_ALLOC(gfxCtx, sizeof(Mtx));
- func_801780F0(mtx, 1.0f - (0.32f * lifesize), 1.0f - (0.32f * lifesize), 1.0f - (0.32f * lifesize),
- -130.0f + offsetX, 94.5f - offsetY, 0.0f);
+ Mtx_SetTranslateScaleMtx(mtx, 1.0f - (0.32f * lifesize), 1.0f - (0.32f * lifesize),
+ 1.0f - (0.32f * lifesize), -130.0f + offsetX, 94.5f - offsetY, 0.0f);
gSPMatrix(OVERLAY_DISP++, mtx, G_MTX_LOAD | G_MTX_MODELVIEW);
gSPVertex(OVERLAY_DISP++, beatingHeartVtx, 4, 0);
gSP1Quadrangle(OVERLAY_DISP++, 0, 2, 3, 1, 0);
}
+
offsetX += 10.0f;
if (i == 9) {
offsetY += 10.0f;
@@ -399,7 +405,7 @@ void LifeMeter_UpdateSizeAndBeep(PlayState* play) {
if (interfaceCtx->lifeSizeChange <= 0) {
interfaceCtx->lifeSizeChange = 0;
interfaceCtx->lifeSizeChangeDirection = 0;
- if (!Player_InCsMode(play) && (play->pauseCtx.state == 0) &&
+ if (!Player_InCsMode(play) && (play->pauseCtx.state == PAUSE_STATE_OFF) &&
(play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) && LifeMeter_IsCritical() && !Play_InCsMode(play)) {
play_sound(NA_SE_SY_HITPOINT_ALARM);
}
@@ -416,19 +422,18 @@ void LifeMeter_UpdateSizeAndBeep(PlayState* play) {
u32 LifeMeter_IsCritical(void) {
s16 criticalThreshold;
- if (gSaveContext.save.playerData.healthCapacity <= 0x50) {
+ if (gSaveContext.save.saveInfo.playerData.healthCapacity <= 0x50) {
criticalThreshold = 0x10;
-
- } else if (gSaveContext.save.playerData.healthCapacity <= 0xA0) {
+ } else if (gSaveContext.save.saveInfo.playerData.healthCapacity <= 0xA0) {
criticalThreshold = 0x18;
-
- } else if (gSaveContext.save.playerData.healthCapacity <= 0xF0) {
+ } else if (gSaveContext.save.saveInfo.playerData.healthCapacity <= 0xF0) {
criticalThreshold = 0x20;
} else {
criticalThreshold = 0x2C;
}
- if ((criticalThreshold >= gSaveContext.save.playerData.health) && (gSaveContext.save.playerData.health > 0)) {
+ if ((criticalThreshold >= gSaveContext.save.saveInfo.playerData.health) &&
+ (gSaveContext.save.saveInfo.playerData.health > 0)) {
return true;
}
return false;
diff --git a/src/code/z_lights.c b/src/code/z_lights.c
index e3e732eb3..6a31c7e94 100644
--- a/src/code/z_lights.c
+++ b/src/code/z_lights.c
@@ -251,7 +251,7 @@ void Lights_FreeNode(LightNode* light) {
void LightContext_Init(PlayState* play, LightContext* lightCtx) {
LightContext_InitList(play, lightCtx);
LightContext_SetAmbientColor(lightCtx, 80, 80, 80);
- func_80102544(lightCtx, 0, 0, 0, 0x3E4, 0x3200);
+ LightContext_SetFog(lightCtx, 0, 0, 0, 996, 12800);
bzero(&sLightsBuffer, sizeof(LightsBuffer));
}
@@ -261,12 +261,12 @@ void LightContext_SetAmbientColor(LightContext* lightCtx, u8 r, u8 g, u8 b) {
lightCtx->ambient.b = b;
}
-void func_80102544(LightContext* lightCtx, u8 a1, u8 a2, u8 a3, s16 numLights, s16 sp16) {
- lightCtx->unk7 = a1;
- lightCtx->unk8 = a2;
- lightCtx->unk9 = a3;
- lightCtx->unkA = numLights;
- lightCtx->unkC = sp16;
+void LightContext_SetFog(LightContext* lightCtx, u8 r, u8 g, u8 b, s16 near, s16 far) {
+ lightCtx->fogColor.r = r;
+ lightCtx->fogColor.g = g;
+ lightCtx->fogColor.b = b;
+ lightCtx->fogNear = near;
+ lightCtx->zFar = far;
}
/**
diff --git a/src/code/z_map_exp.c b/src/code/z_map_exp.c
index 57f51a20a..912926cbb 100644
--- a/src/code/z_map_exp.c
+++ b/src/code/z_map_exp.c
@@ -156,7 +156,8 @@ void Map_InitRoomData(PlayState* play, s16 room) {
if (room >= 0) {
if (Map_IsInDungeonOrBossArea(play)) {
- gSaveContext.save.permanentSceneFlags[Play_GetOriginalSceneId(play->sceneId)].rooms |= gBitFlags[room];
+ gSaveContext.save.saveInfo.permanentSceneFlags[Play_GetOriginalSceneId(play->sceneId)].rooms |=
+ gBitFlags[room];
interfaceCtx->mapRoomNum = room;
interfaceCtx->dungeonOrBossAreaMapIndex = mapIndex;
}
@@ -180,7 +181,7 @@ void Map_Init(PlayState* play) {
func_80105C40(play->roomCtx.curRoom.num);
interfaceCtx->unk_278 = -1;
interfaceCtx->dungeonOrBossAreaMapIndex = -1;
- interfaceCtx->mapSegment = THA_AllocEndAlign16(&play->state.heap, 0x1000);
+ interfaceCtx->mapSegment = THA_AllocTailAlign16(&play->state.heap, 0x1000);
if (func_8010A2AC(play)) {
gSaveContext.mapIndex = func_8010A238(play);
return;
@@ -226,8 +227,8 @@ void Map_Update(PlayState* play) {
s16 floor;
s32 pad2;
- if ((play->pauseCtx.state < 4) && (CHECK_BTN_ALL(controller->press.button, BTN_L)) && (!Play_InCsMode(play)) &&
- (!func_80106530(play))) {
+ if ((play->pauseCtx.state <= PAUSE_STATE_OPENING_2) && (CHECK_BTN_ALL(controller->press.button, BTN_L)) &&
+ !Play_InCsMode(play) && !func_80106530(play)) {
if (!R_MINIMAP_DISABLED) {
play_sound(NA_SE_SY_CAMERA_ZOOM_UP);
} else {
@@ -239,11 +240,11 @@ void Map_Update(PlayState* play) {
func_80105B34(play);
- if ((play->pauseCtx.state == 0) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) {
+ if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) {
if (Map_IsInDungeonArea(play)) {
floor = func_80109124(player->actor.world.pos.y);
if (floor != -1) {
- gSaveContext.save.permanentSceneFlags[Play_GetOriginalSceneId(play->sceneId)].unk_14 |=
+ gSaveContext.save.saveInfo.permanentSceneFlags[Play_GetOriginalSceneId(play->sceneId)].unk_14 |=
gBitFlags[FLOOR_INDEX_MAX - floor];
R_REVERSE_FLOOR_INDEX = FLOOR_INDEX_MAX - floor;
if (interfaceCtx->mapRoomNum != sLastRoomNum) {
diff --git a/src/code/z_message.c b/src/code/z_message.c
index de3a81c73..8681967e6 100644
--- a/src/code/z_message.c
+++ b/src/code/z_message.c
@@ -99,14 +99,14 @@ s32 Message_ShouldAdvanceSilent(PlayState* play) {
}
}
-void func_801477B4(PlayState* play) {
+void Message_CloseTextbox(PlayState* play) {
MessageContext* msgCtx = &play->msgCtx;
if (play->msgCtx.msgLength != 0) {
msgCtx->stateTimer = 2;
msgCtx->msgMode = 0x43;
msgCtx->unk12020 = 0;
- play_sound(NA_SE_PL_WALK_GROUND - SFX_FLAG);
+ play_sound(NA_SE_NONE);
}
}
@@ -309,7 +309,7 @@ void Message_StartTextbox(PlayState* play, u16 textId, Actor* Actor) {
play->msgCtx.ocarinaMode = 0;
}
-void func_80151938(PlayState* play, u16 textId) {
+void Message_ContinueTextbox(PlayState* play, u16 textId) {
MessageContext* msgCtx = &play->msgCtx;
InterfaceContext* interfaceCtx = &play->interfaceCtx;
@@ -322,14 +322,14 @@ void func_80151938(PlayState* play, u16 textId) {
if (interfaceCtx->unk_222 == 0) {
if (textId != 0x1B93) {
- func_8011552C(play, 0x10);
+ func_8011552C(play, DO_ACTION_NEXT);
} else if (textId != 0xF8) {
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
}
}
msgCtx->unk1203C = msgCtx->unk1203A;
- if (play->pauseCtx.unk_1F0 != 0) {
+ if (play->pauseCtx.bombersNotebookOpen) {
msgCtx->unk12004 = 0x22;
msgCtx->unk12006 = 0x15E;
func_80149C18(play);
@@ -370,12 +370,12 @@ void func_80151BB4(PlayState* play, u8 arg1) {
u8 temp = arg1;
if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) {
- if ((gSaveContext.save.weekEventReg[D_801C6B28[arg1] >> 8] & (u8)D_801C6B28[arg1]) == 0) {
+ if (!CHECK_WEEKEVENTREG(D_801C6B28[arg1])) {
msgCtx->unk120B2[msgCtx->unk120B1] = temp;
msgCtx->unk120B1++;
}
} else if (arg1 >= 20) {
- if ((gSaveContext.save.weekEventReg[D_801C6B28[arg1] >> 8] & (u8)D_801C6B28[arg1]) == 0) {
+ if (!CHECK_WEEKEVENTREG(D_801C6B28[arg1])) {
msgCtx->unk120B2[msgCtx->unk120B1] = temp;
msgCtx->unk120B1++;
}
@@ -391,14 +391,11 @@ u32 func_80151C9C(PlayState* play) {
}
msgCtx->unk120B1--;
- if ((gSaveContext.save.weekEventReg[D_801C6B28[msgCtx->unk120B2[msgCtx->unk120B1]] >> 8] &
- (u8)D_801C6B28[msgCtx->unk120B2[msgCtx->unk120B1]]) == 0) {
- gSaveContext.save.weekEventReg[D_801C6B28[msgCtx->unk120B2[msgCtx->unk120B1]] >> 8] =
- ((void)0, gSaveContext.save.weekEventReg[D_801C6B28[msgCtx->unk120B2[msgCtx->unk120B1]] >> 8]) |
- (u8)D_801C6B28[msgCtx->unk120B2[msgCtx->unk120B1]];
+ if (!CHECK_WEEKEVENTREG(D_801C6B28[msgCtx->unk120B2[msgCtx->unk120B1]])) {
+ SET_WEEKEVENTREG(D_801C6B28[msgCtx->unk120B2[msgCtx->unk120B1]]);
if ((D_801C6AB8[msgCtx->unk120B2[msgCtx->unk120B1]] != 0) && CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) {
- func_80151938(play, D_801C6AB8[msgCtx->unk120B2[msgCtx->unk120B1]]);
+ Message_ContinueTextbox(play, D_801C6AB8[msgCtx->unk120B2[msgCtx->unk120B1]]);
play_sound(NA_SE_SY_SCHEDULE_WRITE);
return true;
}
@@ -534,7 +531,7 @@ void func_80153E7C(PlayState* play, void* arg1) {
#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_801541D4.s")
-void func_80156758(PlayState* play) {
+void Message_Draw(PlayState* play) {
Gfx* nextDisplayList;
Gfx* polyOpa;
GraphicsContext* gfxCtx = play->state.gfxCtx;
@@ -554,7 +551,7 @@ void func_80156758(PlayState* play) {
CLOSE_DISPS(gfxCtx);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8015680C.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/Message_Update.s")
void func_801586A4(PlayState* play) {
play->msgCtx.messageEntryTableNes = D_801C6B98;
@@ -575,7 +572,7 @@ void Message_Init(PlayState* play) {
messageCtx->ocarinaAction = messageCtx->unk11FF2 = 0;
messageCtx->unk1201E = 0xFF;
View_Init(&messageCtx->view, play->state.gfxCtx);
- messageCtx->unk11EF8 = THA_AllocEndAlign16(&play->state.heap, 0x13C00);
+ messageCtx->unk11EF8 = THA_AllocTailAlign16(&play->state.heap, 0x13C00);
font = &play->msgCtx.font;
Font_LoadOrderedFont(&play->msgCtx.font);
font->unk_11D88 = 0;
diff --git a/src/code/z_message_nes.c b/src/code/z_message_nes.c
index fb8dbfcbf..759c3d611 100644
--- a/src/code/z_message_nes.c
+++ b/src/code/z_message_nes.c
@@ -212,13 +212,9 @@ void Message_LoadTimeNES(PlayState* play, u8 arg1, s32* offset, f32* arg3, s16*
s16 i;
if (arg1 == 0xCF) {
- // Calculates the time left before the moon crashes.
- // The day begins at CLOCK_TIME(6, 0) so it must be offset.
- timeLeft = (4 - CURRENT_DAY) * DAY_LENGTH - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0));
+ timeLeft = TIME_UNTIL_MOON_CRASH;
} else {
- // Calculates the time left before a new day.
- // The day begins at CLOCK_TIME(6, 0) so it must be offset.
- timeLeft = DAY_LENGTH - (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0));
+ timeLeft = TIME_UNTIL_NEW_DAY;
}
timeLeftInMinutes = TIME_TO_MINUTES_F(timeLeft);
diff --git a/src/code/z_olib.c b/src/code/z_olib.c
index 2b6b8d139..ad0c2b35c 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 ((dist == 0.0f) && (vec->y == 0.0f)) {
sph.pitch = 0;
} else {
- sph.pitch = CAM_DEG_TO_BINANG(RADF_TO_DEGF(func_80086B30(dist, vec->y)));
+ sph.pitch = CAM_DEG_TO_BINANG(RAD_TO_DEG(func_80086B30(dist, vec->y)));
}
sph.r = sqrtf(SQ(vec->y) + distSquared);
if ((vec->x == 0.0f) && (vec->z == 0.0f)) {
sph.yaw = 0;
} else {
- sph.yaw = CAM_DEG_TO_BINANG(RADF_TO_DEGF(func_80086B30(vec->x, vec->z)));
+ sph.yaw = CAM_DEG_TO_BINANG(RAD_TO_DEG(func_80086B30(vec->x, vec->z)));
}
*dest = sph;
@@ -220,8 +220,8 @@ Vec3f* OLib_Vec3fDiffDegF(Vec3f* dest, Vec3f* a, Vec3f* b) {
OLib_Vec3fDiffRad(&anglesRad, a, b);
- anglesDegrees.x = RADF_TO_DEGF(anglesRad.x);
- anglesDegrees.y = RADF_TO_DEGF(anglesRad.y);
+ anglesDegrees.x = RAD_TO_DEG(anglesRad.x);
+ anglesDegrees.y = RAD_TO_DEG(anglesRad.y);
anglesDegrees.z = 0.0f;
*dest = anglesDegrees;
@@ -238,8 +238,8 @@ Vec3s* OLib_Vec3fDiffBinAng(Vec3s* dest, Vec3f* a, Vec3f* b) {
OLib_Vec3fDiffRad(&anglesRad, a, b);
- anglesBinAng.x = CAM_DEG_TO_BINANG(RADF_TO_DEGF(anglesRad.x));
- anglesBinAng.y = CAM_DEG_TO_BINANG(RADF_TO_DEGF(anglesRad.y));
+ anglesBinAng.x = CAM_DEG_TO_BINANG(RAD_TO_DEG(anglesRad.x));
+ anglesBinAng.y = CAM_DEG_TO_BINANG(RAD_TO_DEG(anglesRad.y));
anglesBinAng.z = 0.0f;
*dest = anglesBinAng;
diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c
index 4620dd816..41441f3a2 100644
--- a/src/code/z_parameter.c
+++ b/src/code/z_parameter.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "z64snap.h"
#include "z64view.h"
#include "interface/parameter_static/parameter_static.h"
#include "interface/do_action_static/do_action_static.h"
@@ -7,6 +8,20 @@
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
#include "overlays/actors/ovl_En_Mm3/z_en_mm3.h"
+extern TexturePtr D_08095AC0; // gMagicArrowEquipEffectTex
+
+typedef enum {
+ /* 0 */ PICTO_BOX_STATE_OFF, // Not using the pictograph
+ /* 1 */ PICTO_BOX_STATE_LENS, // Looking through the lens of the pictograph
+ /* 2 */ PICTO_BOX_STATE_SETUP_PHOTO, // Looking at the photo currently taken
+ /* 3 */ PICTO_BOX_STATE_PHOTO
+} PictoBoxState;
+
+// TODO extract this information from the texture definitions themselves
+#define DO_ACTION_TEX_WIDTH 48
+#define DO_ACTION_TEX_HEIGHT 16
+#define DO_ACTION_TEX_SIZE ((DO_ACTION_TEX_WIDTH * DO_ACTION_TEX_HEIGHT) / 2) // (sizeof(gCheckDoActionENGTex))
+
typedef struct {
/* 0x00 */ u8 scene;
/* 0x01 */ u8 flags1;
@@ -16,124 +31,169 @@ typedef struct {
Input sPostmanTimerInput[4];
-RestrictionFlags sRestrictionFlags[] = {
- { SCENE_20SICHITAI2, 0x00, 0x00, 0x00 },
- { SCENE_UNSET_1, 0x00, 0x00, 0x00 },
- { SCENE_UNSET_2, 0x00, 0x00, 0x00 },
- { SCENE_UNSET_3, 0x00, 0x00, 0x00 },
- { SCENE_UNSET_4, 0x00, 0x00, 0x00 },
- { SCENE_UNSET_5, 0x00, 0x00, 0x00 },
- { SCENE_UNSET_6, 0x00, 0x00, 0x00 },
- { SCENE_KAKUSIANA, 0x00, 0x00, 0x00 },
- { SCENE_SPOT00, 0x00, 0x00, 0x00 },
- { SCENE_UNSET_9, 0x00, 0x00, 0x00 },
- { SCENE_WITCH_SHOP, 0x10, 0x30, 0xC1 },
- { SCENE_LAST_BS, 0x00, 0x3F, 0x00 },
- { SCENE_HAKASHITA, 0x00, 0x00, 0x00 },
- { SCENE_AYASHIISHOP, 0x10, 0x30, 0xC1 },
- { SCENE_UNSET_E, 0x00, 0x00, 0x00 },
- { SCENE_UNSET_F, 0x00, 0x00, 0x00 },
- { SCENE_OMOYA, 0x00, 0x33, 0x00 },
- { SCENE_BOWLING, 0x10, 0x30, 0xC1 },
- { SCENE_SONCHONOIE, 0x10, 0x30, 0xC1 },
- { SCENE_IKANA, 0x00, 0x00, 0x00 },
- { SCENE_KAIZOKU, 0x00, 0x00, 0x00 },
- { SCENE_MILK_BAR, 0x10, 0x30, 0xC1 },
- { SCENE_INISIE_N, 0x00, 0x00, 0x00 },
- { SCENE_TAKARAYA, 0x10, 0x30, 0xC1 },
- { SCENE_INISIE_R, 0x00, 0x00, 0x00 },
- { SCENE_OKUJOU, 0x00, 0x3F, 0xF0 },
- { SCENE_OPENINGDAN, 0x00, 0x00, 0x00 },
- { SCENE_MITURIN, 0x00, 0x00, 0x00 },
- { SCENE_13HUBUKINOMITI, 0x00, 0x00, 0x00 },
- { SCENE_CASTLE, 0x00, 0x00, 0x00 },
- { SCENE_DEKUTES, 0x10, 0x30, 0x01 },
- { SCENE_MITURIN_BS, 0x00, 0x00, 0x00 },
- { SCENE_SYATEKI_MIZU, 0x10, 0x30, 0xC1 },
- { SCENE_HAKUGIN, 0x00, 0x00, 0x00 },
- { SCENE_ROMANYMAE, 0x00, 0x00, 0x00 },
- { SCENE_PIRATE, 0x00, 0x00, 0x00 },
- { SCENE_SYATEKI_MORI, 0x10, 0x30, 0xC1 },
- { SCENE_SINKAI, 0x00, 0x00, 0x00 },
- { SCENE_YOUSEI_IZUMI, 0x00, 0x00, 0x00 },
- { SCENE_KINSTA1, 0x00, 0x30, 0x00 },
- { SCENE_KINDAN2, 0x00, 0x30, 0x00 },
- { SCENE_TENMON_DAI, 0x00, 0x03, 0xC0 },
- { SCENE_LAST_DEKU, 0x00, 0x3F, 0x00 },
- { SCENE_22DEKUCITY, 0x00, 0x00, 0x00 },
- { SCENE_KAJIYA, 0x00, 0x30, 0xC0 },
- { SCENE_00KEIKOKU, 0x00, 0x00, 0x00 },
- { SCENE_POSTHOUSE, 0x00, 0x30, 0xC1 },
- { SCENE_LABO, 0x00, 0x30, 0xC1 },
- { SCENE_DANPEI2TEST, 0x00, 0x30, 0x00 },
- { SCENE_UNSET_31, 0x00, 0x00, 0x00 },
- { SCENE_16GORON_HOUSE, 0x00, 0x00, 0x00 },
- { SCENE_33ZORACITY, 0x00, 0x00, 0xC0 },
- { SCENE_8ITEMSHOP, 0x00, 0x30, 0xC1 },
- { SCENE_F01, 0x00, 0x00, 0x00 },
- { SCENE_INISIE_BS, 0x00, 0x00, 0x00 },
- { SCENE_30GYOSON, 0x00, 0x00, 0x00 },
- { SCENE_31MISAKI, 0x00, 0x00, 0x00 },
- { SCENE_TAKARAKUJI, 0x00, 0x30, 0xC1 },
- { SCENE_UNSET_3A, 0x00, 0x00, 0x00 },
- { SCENE_TORIDE, 0x00, 0x00, 0x00 },
- { SCENE_FISHERMAN, 0x00, 0x30, 0xC1 },
- { SCENE_GORONSHOP, 0x10, 0x30, 0xC1 },
- { SCENE_DEKU_KING, 0x00, 0x30, 0xC0 },
- { SCENE_LAST_GORON, 0x00, 0x3F, 0x00 },
- { SCENE_24KEMONOMITI, 0x00, 0x00, 0x00 },
- { SCENE_F01_B, 0x00, 0x30, 0x00 },
- { SCENE_F01C, 0x00, 0x30, 0x00 },
- { SCENE_BOTI, 0x00, 0x00, 0x00 },
- { SCENE_HAKUGIN_BS, 0x00, 0x00, 0x00 },
- { SCENE_20SICHITAI, 0x00, 0x00, 0x00 },
- { SCENE_21MITURINMAE, 0x00, 0x00, 0x00 },
- { SCENE_LAST_ZORA, 0x00, 0x3F, 0x00 },
- { SCENE_11GORONNOSATO2, 0x00, 0x00, 0x00 },
- { SCENE_SEA, 0x00, 0x00, 0x00 },
- { SCENE_35TAKI, 0x00, 0x00, 0x00 },
- { SCENE_REDEAD, 0x00, 0x00, 0x00 },
- { SCENE_BANDROOM, 0x00, 0x30, 0xC0 },
- { SCENE_11GORONNOSATO, 0x00, 0x00, 0x00 },
- { SCENE_GORON_HAKA, 0x00, 0x00, 0x00 },
- { SCENE_SECOM, 0x00, 0x3C, 0xC0 },
- { SCENE_10YUKIYAMANOMURA, 0x00, 0x00, 0x00 },
- { SCENE_TOUGITES, 0x00, 0x3F, 0xF0 },
- { SCENE_DANPEI, 0x00, 0x30, 0x00 },
- { SCENE_IKANAMAE, 0x00, 0x00, 0x00 },
- { SCENE_DOUJOU, 0x00, 0x30, 0xC1 },
- { SCENE_MUSICHOUSE, 0x00, 0x30, 0xC0 },
- { SCENE_IKNINSIDE, 0x00, 0x3F, 0xC0 },
- { SCENE_MAP_SHOP, 0x10, 0x30, 0xC1 },
- { SCENE_F40, 0x00, 0x00, 0x00 },
- { SCENE_F41, 0x00, 0x00, 0x00 },
- { SCENE_10YUKIYAMANOMURA2, 0x00, 0x00, 0x00 },
- { SCENE_14YUKIDAMANOMITI, 0x00, 0x00, 0x00 },
- { SCENE_12HAKUGINMAE, 0x00, 0x00, 0x00 },
- { SCENE_17SETUGEN, 0x00, 0x00, 0x00 },
- { SCENE_17SETUGEN2, 0x00, 0x00, 0x00 },
- { SCENE_SEA_BS, 0x00, 0x00, 0x00 },
- { SCENE_RANDOM, 0x00, 0x00, 0x00 },
- { SCENE_YADOYA, 0x10, 0x30, 0xC1 },
- { SCENE_KONPEKI_ENT, 0x00, 0x00, 0x00 },
- { SCENE_INSIDETOWER, 0x00, 0xFF, 0xC0 },
- { SCENE_26SARUNOMORI, 0x00, 0x30, 0x00 },
- { SCENE_LOST_WOODS, 0x00, 0x00, 0x00 },
- { SCENE_LAST_LINK, 0x00, 0x3F, 0x00 },
- { SCENE_SOUGEN, 0x00, 0x3F, 0x00 },
- { SCENE_BOMYA, 0x10, 0x30, 0xC1 },
- { SCENE_KYOJINNOMA, 0x00, 0x00, 0x00 },
- { SCENE_KOEPONARACE, 0x00, 0x30, 0x00 },
- { SCENE_GORONRACE, 0x00, 0x00, 0x00 },
- { SCENE_TOWN, 0x00, 0x00, 0x00 },
- { SCENE_ICHIBA, 0x00, 0x00, 0x00 },
- { SCENE_BACKTOWN, 0x00, 0x00, 0x00 },
- { SCENE_CLOCKTOWER, 0x00, 0x00, 0x00 },
- { SCENE_ALLEY, 0x00, 0x00, 0x00 },
-};
+#define RESTRICTIONS_TABLE_END 0xFF
-s16 D_801BF884 = 0; // pictoBox related
-s16 D_801BF888 = false; // pictoBox related
+#define RESTRICTIONS_GET_BITS(flags, s) (((flags) & (3 << (s))) >> (s))
+
+// does nothing
+#define RESTRICTIONS_GET_HGAUGE(flags) RESTRICTIONS_GET_BITS((flags)->flags1, 6)
+// 0 = usable, !0 = unusable
+#define RESTRICTIONS_GET_B_BUTTON(flags) RESTRICTIONS_GET_BITS((flags)->flags1, 4)
+// does nothing
+#define RESTRICTIONS_GET_A_BUTTON(flags) RESTRICTIONS_GET_BITS((flags)->flags1, 2)
+// 0 = usable, !0 = unusable
+#define RESTRICTIONS_GET_TRADE_ITEMS(flags) RESTRICTIONS_GET_BITS((flags)->flags1, 0)
+// 0 = usable, !0 = unusable
+#define RESTRICTIONS_GET_SONG_OF_TIME(flags) RESTRICTIONS_GET_BITS((flags)->flags2, 6)
+// 0 = usable, !0 = unusable
+#define RESTRICTIONS_GET_SONG_OF_DOUBLE_TIME(flags) RESTRICTIONS_GET_BITS((flags)->flags2, 4)
+// 0 = usable, !0 = unusable
+#define RESTRICTIONS_GET_INV_SONG_OF_TIME(flags) RESTRICTIONS_GET_BITS((flags)->flags2, 2)
+// 0 = usable, !0 = unusable
+#define RESTRICTIONS_GET_SONG_OF_SOARING(flags) RESTRICTIONS_GET_BITS((flags)->flags2, 0)
+// 0 = usable, !0 = unusable
+#define RESTRICTIONS_GET_SONG_OF_STORMS(flags) RESTRICTIONS_GET_BITS((flags)->flags3, 6)
+// 0 = usable, !0 = unusable
+#define RESTRICTIONS_GET_MASKS(flags) RESTRICTIONS_GET_BITS((flags)->flags3, 4)
+// 0 = usable, !0 = unusable
+#define RESTRICTIONS_GET_PICTO_BOX(flags) RESTRICTIONS_GET_BITS((flags)->flags3, 2)
+// 0 = usable, !0 = unusable
+#define RESTRICTIONS_GET_ALL(flags) RESTRICTIONS_GET_BITS((flags)->flags3, 0)
+
+#define RESTRICTIONS_SET(hGauge, bButton, aButton, tradeItems, songOfTime, songOfDoubleTime, invSongOfTime, \
+ songOfSoaring, songOfStorms, masks, pictoBox, all) \
+ ((((hGauge)&3) << 6) | (((bButton)&3) << 4) | (((aButton)&3) << 2) | (((tradeItems)&3) << 0)), \
+ ((((songOfTime)&3) << 6) | (((songOfDoubleTime)&3) << 4) | (((invSongOfTime)&3) << 2) | \
+ (((songOfSoaring)&3) << 0)), \
+ ((((songOfStorms)&3) << 6) | (((masks)&3) << 4) | (((pictoBox)&3) << 2) | (((all)&3) << 0))
+
+// Common patterns
+#define RESTRICTIONS_NONE RESTRICTIONS_SET(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
+#define RESTRICTIONS_INDOORS RESTRICTIONS_SET(0, 1, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1)
+#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)
+
+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 },
+ // { 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.
+
+s16 sPictoState = PICTO_BOX_STATE_OFF;
+s16 sPictoPhotoBeingTaken = false;
s16 sHBAScoreTier = 0; // Remnant of OoT, non-functional
@@ -170,7 +230,7 @@ s16 sExtraItemBases[] = {
ITEM_NUT, // ITEM_NUT_UPGRADE_30
};
-s16 sEnvTimerType = PLAYER_ENV_TIMER_NONE;
+s16 sEnvHazard = PLAYER_ENV_HAZARD_NONE;
s16 sEnvTimerActive = false;
s16 sPostmanBunnyHoodState = POSTMAN_MINIGAME_BUNNY_HOOD_OFF;
OSTime sTimerPausedOsTime = 0;
@@ -191,7 +251,7 @@ s16 D_801BF97C = 255;
f32 D_801BF980 = 1.0f;
s32 D_801BF984 = 0;
-Gfx D_801BF988[] = {
+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),
@@ -222,48 +282,608 @@ s16 sFinalHoursClockFrameEnvBlue = 0;
s16 sFinalHoursClockColorTimer = 15;
s16 sFinalHoursClockColorTargetIndex = 0;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010CB80.s")
+/**
+ * Draw a RGBA16 texture on a rectangle
+ *
+ * @param gfx the display list pointer
+ * @param texture
+ * @param textureWidth texture image width in texels
+ * @param textureHeight texture image height in texels
+ * @param rectLeft the x-coordinate of upper-left corner of rectangle
+ * @param rectTop the y-coordinate of upper-left corner of rectangle
+ * @param rectWidth rectangle width in texels
+ * @param rectHeight rectangle height in texels
+ * @param dsdx the change in s for each change in x (s5.10)
+ * @param dtdy the change in t for each change in y (s5.10)
+ * @return Gfx* the display list pointer
+ */
+Gfx* Gfx_DrawTexRectRGBA16(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop,
+ s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy) {
+ gDPLoadTextureBlock(gfx++, texture, G_IM_FMT_RGBA, G_IM_SIZ_16b, textureWidth, textureHeight, 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/code/z_parameter/func_8010CD98.s")
+ gSPTextureRectangle(gfx++, rectLeft << 2, rectTop << 2, (rectLeft + rectWidth) << 2, (rectTop + rectHeight) << 2,
+ G_TX_RENDERTILE, 0, 0, dsdx, dtdy);
-Gfx* func_8010CFBC(Gfx* displayListHead, void* texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop,
- s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy, s16 r, s16 g, s16 b, s16 a);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010CFBC.s")
+ return gfx;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010D2D4.s")
+/**
+ * Draw an IA8 texture on a rectangle
+ *
+ * @param gfx the display list pointer
+ * @param texture
+ * @param textureWidth texture image width in texels
+ * @param textureHeight texture image height in texels
+ * @param rectLeft the x-coordinate of upper-left corner of rectangle
+ * @param rectTop the y-coordinate of upper-left corner of rectangle
+ * @param rectWidth rectangle width in texels
+ * @param rectHeight rectangle height in texels
+ * @param dsdx the change in s for each change in x (s5.10)
+ * @param dtdy the change in t for each change in y (s5.10)
+ * @return Gfx* the display list pointer
+ */
+Gfx* Gfx_DrawTexRectIA8(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop,
+ s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy) {
+ gDPLoadTextureBlock(gfx++, texture, G_IM_FMT_IA, G_IM_SIZ_8b, textureWidth, textureHeight, 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);
-Gfx* func_8010D480(Gfx* displayListHead, void* texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop,
- s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy, s16 r, s16 g, s16 b, s16 a, s32 argE, s32 argF);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010D480.s")
+ gSPTextureRectangle(gfx++, rectLeft << 2, rectTop << 2, (rectLeft + rectWidth) << 2, (rectTop + rectHeight) << 2,
+ G_TX_RENDERTILE, 0, 0, dsdx, dtdy);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010D7D0.s")
+ return gfx;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010D9F4.s")
+/**
+ * Draw an IA8 texture on a rectangle with a shadow slightly offset to the bottom-right
+ *
+ * @param gfx the display list pointer
+ * @param texture
+ * @param textureWidth texture image width in texels
+ * @param textureHeight texture image height in texels
+ * @param rectLeft the x-coordinate of upper-left corner of rectangle
+ * @param rectTop the y-coordinate of upper-left corner of rectangle
+ * @param rectWidth rectangle width in texels
+ * @param rectHeight rectangle height in texels
+ * @param dsdx the change in s for each change in x (s5.10)
+ * @param dtdy the change in t for each change in y (s5.10)
+ * @param r texture red
+ * @param g texture green
+ * @param b texture blue
+ * @param a texture alpha
+ * @return Gfx* the display list pointer
+ */
+Gfx* Gfx_DrawTexRectIA8_DropShadow(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft,
+ s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy, s16 r, s16 g, s16 b,
+ s16 a) {
+ s16 dropShadowAlpha = a;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010DC58.s")
+ if (a > 100) {
+ dropShadowAlpha = 100;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010DE38.s")
+ gDPPipeSync(gfx++);
+ gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, dropShadowAlpha);
-s16 D_801BFA04[] = {
- -14, -14, -24, -8, -12, -12, -7, -8, -7, -8, -12, 0,
-};
-s16 D_801BFA1C[] = {
- 0x1C, 0x1C, 0x30, 0x10, 0x18, 0x18, 0x10, 0x10, 0x10, 0x10, 0x18, 0,
-};
-s16 D_801BFA34[] = {
- 14, 14, 8, 24, -82, -82, 58, 59, 58, 59, 32, 0,
-};
-s16 D_801BFA4C[] = {
- 0x1C, 0x1C, 0x10, 0x10, 0x18, 0x18, 0xB, 0xB, 0xB, 0xB, 0x20, 0,
-};
-s16 D_801BFA64[] = {
- -61, -45, 29, 104, -117, -42, 32, 55,
-};
-s16 D_801BFA74[] = {
- 1, -70, -99, -70, 71, 101, 72, 1,
+ gDPLoadTextureBlock(gfx++, texture, G_IM_FMT_IA, G_IM_SIZ_8b, textureWidth, textureHeight, 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(gfx++, (rectLeft + 2) * 4, (rectTop + 2) * 4, (rectLeft + rectWidth + 2) * 4,
+ (rectTop + rectHeight + 2) * 4, G_TX_RENDERTILE, 0, 0, dsdx, dtdy);
+
+ gDPPipeSync(gfx++);
+ gDPSetPrimColor(gfx++, 0, 0, r, g, b, a);
+
+ gSPTextureRectangle(gfx++, rectLeft * 4, rectTop * 4, (rectLeft + rectWidth) * 4, (rectTop + rectHeight) * 4,
+ G_TX_RENDERTILE, 0, 0, dsdx, dtdy);
+
+ return gfx;
+}
+
+/**
+ * Draw a colored rectangle with a shadow slightly offset to the bottom-right
+ *
+ * @param gfx the display list pointer
+ * @param rectLeft the x-coordinate of upper-left corner of rectangle
+ * @param rectTop the y-coordinate of upper-left corner of rectangle
+ * @param rectWidth rectangle width in texels
+ * @param rectHeight rectangle height in texels
+ * @param dsdx the change in s for each change in x (s5.10)
+ * @param dtdy the change in t for each change in y (s5.10)
+ * @param r // rectangle red
+ * @param g // rectangle green
+ * @param b // rectangle blue
+ * @param a // rectangle alpha
+ * @return Gfx* the display list pointer
+ */
+Gfx* Gfx_DrawRect_DropShadow(Gfx* gfx, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy,
+ s16 r, s16 g, s16 b, s16 a) {
+ s16 dropShadowAlpha = a;
+
+ if (a > 100) {
+ dropShadowAlpha = 100;
+ }
+
+ gDPPipeSync(gfx++);
+ gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, dropShadowAlpha);
+ gSPTextureRectangle(gfx++, (rectLeft + 2) * 4, (rectTop + 2) * 4, (rectLeft + rectWidth + 2) * 4,
+ (rectTop + rectHeight + 2) * 4, G_TX_RENDERTILE, 0, 0, dsdx, dtdy);
+
+ gDPPipeSync(gfx++);
+ gDPSetPrimColor(gfx++, 0, 0, r, g, b, a);
+
+ gSPTextureRectangle(gfx++, rectLeft * 4, rectTop * 4, (rectLeft + rectWidth) * 4, (rectTop + rectHeight) * 4,
+ G_TX_RENDERTILE, 0, 0, dsdx, dtdy);
+
+ return gfx;
+}
+
+/**
+ * Draw an IA8 texture on a rectangle with a shadow slightly offset to the bottom-right with additional texture offsets
+ *
+ * @param gfx the display list pointer
+ * @param texture
+ * @param textureWidth texture image width in texels
+ * @param textureHeight texture image height in texels
+ * @param rectLeft the x-coordinate of upper-left corner of rectangle
+ * @param rectTop the y-coordinate of upper-left corner of rectangle
+ * @param rectWidth rectangle width in texels
+ * @param rectHeight rectangle height in texels
+ * @param dsdx the change in s for each change in x (s5.10)
+ * @param dtdy the change in t for each change in y (s5.10)
+ * @param r // texture red
+ * @param g // texture green
+ * @param b // texture blue
+ * @param a // texture alpha
+ * @param masks specify the mask for the s axis
+ * @param rects the texture coordinate s of upper-left corner of rectangle (s10.5)
+ * @return Gfx* the display list pointer
+ */
+Gfx* Gfx_DrawTexRectIA8_DropShadowOffset(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight,
+ s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy,
+ s16 r, s16 g, s16 b, s16 a, s32 masks, s32 rects) {
+ s16 dropShadowAlpha = a;
+
+ if (a > 100) {
+ dropShadowAlpha = 100;
+ }
+
+ gDPPipeSync(gfx++);
+ gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, dropShadowAlpha);
+
+ gDPLoadTextureBlock(gfx++, texture, G_IM_FMT_IA, G_IM_SIZ_8b, textureWidth, textureHeight, 0,
+ G_TX_MIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, masks, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+
+ gSPTextureRectangle(gfx++, (rectLeft + 2) * 4, (rectTop + 2) * 4, (rectLeft + rectWidth + 2) * 4,
+ (rectTop + rectHeight + 2) * 4, G_TX_RENDERTILE, rects, 0, dsdx, dtdy);
+
+ gDPPipeSync(gfx++);
+ gDPSetPrimColor(gfx++, 0, 0, r, g, b, a);
+
+ gSPTextureRectangle(gfx++, rectLeft * 4, rectTop * 4, (rectLeft + rectWidth) * 4, (rectTop + rectHeight) * 4,
+ G_TX_RENDERTILE, rects, 0, dsdx, dtdy);
+
+ return gfx;
+}
+
+/**
+ * Draw an I8 texture on a rectangle
+ *
+ * @param gfx the display list pointer
+ * @param texture
+ * @param textureWidth texture image width in texels
+ * @param textureHeight texture image height in texels
+ * @param rectLeft the x-coordinate of upper-left corner of rectangle
+ * @param rectTop the y-coordinate of upper-left corner of rectangle
+ * @param rectWidth rectangle width in texels
+ * @param rectHeight rectangle height in texels
+ * @param dsdx the change in s for each change in x (s5.10)
+ * @param dtdy the change in t for each change in y (s5.10)
+ * @return Gfx* the display list pointer
+ */
+Gfx* Gfx_DrawTexRectI8(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop,
+ s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy) {
+ gDPLoadTextureBlock(gfx++, texture, G_IM_FMT_I, G_IM_SIZ_8b, textureWidth, textureHeight, 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(gfx++, rectLeft << 2, rectTop << 2, (rectLeft + rectWidth) << 2, (rectTop + rectHeight) << 2,
+ G_TX_RENDERTILE, 0, 0, dsdx, dtdy);
+
+ return gfx;
+}
+
+/**
+ * Draw a 4b texture on a rectangle
+ *
+ * @param gfx the display list pointer
+ * @param texture
+ * @param fmt texture image format
+ * @param textureWidth texture image width in texels
+ * @param textureHeight texture image height in texels
+ * @param rectLeft the x-coordinate of upper-left corner of rectangle
+ * @param rectTop the y-coordinate of upper-left corner of rectangle
+ * @param rectWidth rectangle width in texels
+ * @param rectHeight rectangle height in texels
+ * @param cms gives the clamp, wrap, and mirror flag for the s axis
+ * @param masks specify the mask for the s axis
+ * @param rects the texture coordinate s of upper-left corner of rectangle (s10.5)
+ * @param dsdx the change in s for each change in x (s5.10)
+ * @param dtdy the change in t for each change in y (s5.10)
+ * @return Gfx* the display list pointer
+ */
+Gfx* Gfx_DrawTexRect4b(Gfx* gfx, TexturePtr texture, s32 fmt, s16 textureWidth, s16 textureHeight, s16 rectLeft,
+ s16 rectTop, s16 rectWidth, s16 rectHeight, s32 cms, s32 masks, s32 rects, u16 dsdx, u16 dtdy) {
+ gDPLoadTextureBlock_4b(gfx++, texture, fmt, textureWidth, textureHeight, 0, cms, G_TX_NOMIRROR | G_TX_WRAP, masks,
+ G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+
+ gSPTextureRectangle(gfx++, rectLeft << 2, rectTop << 2, (rectLeft + rectWidth) << 2, (rectTop + rectHeight) << 2,
+ G_TX_RENDERTILE, rects, 0, dsdx, dtdy);
+
+ return gfx;
+}
+
+/**
+ * Draw an I8 texture on a Quadrangle
+ *
+ * @param gfx the display list pointer
+ * @param texture
+ * @param textureWidth texture image width in texels
+ * @param textureHeight texture image height in texels
+ * @param point index of the first point to draw the Quadrangle
+ * @return Gfx* the display list pointer
+ */
+Gfx* Gfx_DrawTexQuadIA8(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, u16 point) {
+ gDPLoadTextureBlock(gfx++, texture, G_IM_FMT_IA, G_IM_SIZ_8b, textureWidth, textureHeight, 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(gfx++, point, point + 2, point + 3, point + 1, 0);
+
+ return gfx;
+}
+
+/**
+ * Draw a 4b texture on a Quadrangle
+ *
+ * @param gfx the display list pointer
+ * @param texture
+ * @param fmt texture image format
+ * @param textureWidth texture image width in texels
+ * @param textureHeight texture image height in texels
+ * @param point index of the first point to draw the Quadrangle
+ * @return Gfx* the display list pointer
+ */
+Gfx* Gfx_DrawTexQuad4b(Gfx* gfx, TexturePtr texture, s32 fmt, s16 textureWidth, s16 textureHeight, u16 point) {
+ gDPLoadTextureBlock_4b(gfx++, texture, fmt, textureWidth, textureHeight, 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(gfx++, point, point + 2, point + 3, point + 1, 0);
+
+ return gfx;
+}
+
+// Total number of non-minigame-perfect action quads
+#define ACTION_QUAD_BASE_COUNT 11
+
+s16 sActionVtxPosX[ACTION_QUAD_BASE_COUNT] = {
+ -14, // A Button
+ -14, // A Button Background
+ -24, // A Button Do-Action
+ -8, // Three-Day Clock's Star (for the Minute Tracker)
+ -12, // Three-Day Clock's Sun (for the Day-Time Hours Tracker)
+ -12, // Three-Day Clock's Moon (for the Night-Time Hours Tracker)
+ -7, // Three-Day Clock's Hour Digit Above the Sun
+ -8, // Three-Day Clock's Hour Digit Above the Sun
+ -7, // Three-Day Clock's Hour Digit Above the Moon
+ -8, // Three-Day Clock's Hour Digit Above the Moon
+ -12, // Minigame Countdown Textures
};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010E028.s")
+s16 sActionVtxWidths[ACTION_QUAD_BASE_COUNT] = {
+ 28, // A Button
+ 28, // A Button Background
+ 48, // A Button Do-Action
+ 16, // Three-Day Clock's Star (for the Minute Tracker)
+ 24, // Three-Day Clock's Sun (for the Day-Time Hours Tracker)
+ 24, // Three-Day Clock's Moon (for the Night-Time Hours Tracker)
+ 16, // Three-Day Clock's Hour Digit Above the Sun
+ 16, // Three-Day Clock's Hour Digit Above the Sun
+ 16, // Three-Day Clock's Hour Digit Above the Moon
+ 16, // Three-Day Clock's Hour Digit Above the Moon
+ 24, // Minigame Countdown Textures
+};
+
+s16 sActionVtxPosY[ACTION_QUAD_BASE_COUNT] = {
+ 14, // A Button
+ 14, // A Button Background
+ 8, // A Button Do-Action
+ 24, // Three-Day Clock's Star (for the Minute Tracker)
+ -82, // Three-Day Clock's Sun (for the Day-Time Hours Tracker)
+ -82, // Three-Day Clock's Moon (for the Night-Time Hours Tracker)
+ 58, // Three-Day Clock's Hour Digit Above the Sun
+ 59, // Three-Day Clock's Hour Digit Above the Sun
+ 58, // Three-Day Clock's Hour Digit Above the Moon
+ 59, // Three-Day Clock's Hour Digit Above the Moon
+ 32, // Minigame Countdown Textures
+};
+
+s16 sActionVtxHeights[ACTION_QUAD_BASE_COUNT] = {
+ 28, // A Button
+ 28, // A Button Background
+ 16, // A Button Do-Action
+ 16, // Three-Day Clock's Star (for the Minute Tracker)
+ 24, // Three-Day Clock's Sun (for the Day-Time Hours Tracker)
+ 24, // Three-Day Clock's Moon (for the Night-Time Hours Tracker)
+ 11, // Three-Day Clock's Hour Digit Above the Sun
+ 11, // Three-Day Clock's Hour Digit Above the Sun
+ 11, // Three-Day Clock's Hour Digit Above the Moon
+ 11, // Three-Day Clock's Hour Digit Above the Moon
+ 32, // Minigame Countdown Textures
+};
+
+#define PERFECT_LETTERS_VTX_WIDTH 32
+#define PERFECT_LETTERS_VTX_HEIGHT 33
+
+// Used for PERFECT_LETTERS_TYPE_1 and only part of PERFECT_LETTERS_TYPE_3
+// Both PERFECT_LETTERS_TYPE_2 and PERFECT_LETTERS_TYPE_2 have (0, 0) as the center for all letters
+s16 sPerfectLettersCenterX[PERFECT_LETTERS_NUM_LETTERS] = {
+ -61, // P
+ -45, // E
+ 29, // R
+ 104, // F
+ -117, // E
+ -42, // C
+ 32, // T
+ 55, // !
+};
+
+s16 sPerfectLettersCenterY[PERFECT_LETTERS_NUM_LETTERS] = {
+ 1, // P
+ -70, // E
+ -99, // R
+ -70, // F
+ 71, // E
+ 101, // C
+ 72, // T
+ 1, // !
+};
+
+/**
+ * interfaceCtx->actionVtx[0] -> A Button
+ * interfaceCtx->actionVtx[4] -> A Button Shadow
+ * interfaceCtx->actionVtx[8] -> A Button Do-Action
+ * interfaceCtx->actionVtx[12] -> Three-Day Clock's Star (for the Minute Tracker)
+ * interfaceCtx->actionVtx[16] -> Three-Day Clock's Sun (for the Day Hours Tracker)
+ * interfaceCtx->actionVtx[20] -> Three-Day Clock's Moon (for the Night Hours Tracker)
+ * interfaceCtx->actionVtx[24] -> Three-Day Clock's Hour Digit Above the Sun (uses 8 vertices)
+ * interfaceCtx->actionVtx[32] -> Three-Day Clock's Hour Digit Above the Moon (uses 8 vertices)
+ * interfaceCtx->actionVtx[40] -> Minigame Countdown Textures
+ * interfaceCtx->actionVtx[44] -> Minigame Perfect Letter P Shadow
+ * interfaceCtx->actionVtx[48] -> Minigame Perfect Letter E Shadow
+ * interfaceCtx->actionVtx[52] -> Minigame Perfect Letter R Shadow
+ * interfaceCtx->actionVtx[56] -> Minigame Perfect Letter F Shadow
+ * interfaceCtx->actionVtx[60] -> Minigame Perfect Letter E Shadow
+ * interfaceCtx->actionVtx[64] -> Minigame Perfect Letter C Shadow
+ * interfaceCtx->actionVtx[68] -> Minigame Perfect Letter T Shadow
+ * interfaceCtx->actionVtx[72] -> Minigame Perfect Letter ! Shadow
+ * interfaceCtx->actionVtx[76] -> Minigame Perfect Letter P Colored
+ * interfaceCtx->actionVtx[80] -> Minigame Perfect Letter E Colored
+ * interfaceCtx->actionVtx[84] -> Minigame Perfect Letter R Colored
+ * interfaceCtx->actionVtx[88] -> Minigame Perfect Letter F Colored
+ * interfaceCtx->actionVtx[92] -> Minigame Perfect Letter E Colored
+ * interfaceCtx->actionVtx[96] -> Minigame Perfect Letter C Colored
+ * interfaceCtx->actionVtx[100] -> Minigame Perfect Letter T Colored
+ * interfaceCtx->actionVtx[104] -> Minigame Perfect Letter ! Colored
+ */
+
+#define BEATING_HEART_VTX_X -8
+#define BEATING_HEART_VTX_Y -8
+#define BEATING_HEART_VTX_WIDTH 16
+
+void Interface_SetVertices(PlayState* play) {
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ s16 i;
+ s16 j;
+ s16 k;
+ s16 shadowOffset;
+
+ play->interfaceCtx.actionVtx =
+ GRAPH_ALLOC(play->state.gfxCtx, (ACTION_QUAD_BASE_COUNT + (2 * PERFECT_LETTERS_NUM_LETTERS)) * 4 * sizeof(Vtx));
+
+ // Loop over all non-minigame perfect vertices
+ // where (i) is the actionVtx index, (k) is the iterator
+ for (k = 0, i = 0; i < (ACTION_QUAD_BASE_COUNT * 4); i += 4, k++) {
+ // Left vertices x Pos
+ interfaceCtx->actionVtx[i + 0].v.ob[0] = interfaceCtx->actionVtx[i + 2].v.ob[0] = sActionVtxPosX[k];
+
+ // Right vertices x Pos
+ interfaceCtx->actionVtx[i + 1].v.ob[0] = interfaceCtx->actionVtx[i + 3].v.ob[0] =
+ interfaceCtx->actionVtx[i + 0].v.ob[0] + sActionVtxWidths[k];
+
+ // Top vertices y Pos
+ interfaceCtx->actionVtx[i + 0].v.ob[1] = interfaceCtx->actionVtx[i + 1].v.ob[1] = sActionVtxPosY[k];
+
+ // Bottom vertices y Pos
+ interfaceCtx->actionVtx[i + 2].v.ob[1] = interfaceCtx->actionVtx[i + 3].v.ob[1] =
+ interfaceCtx->actionVtx[i + 0].v.ob[1] - sActionVtxHeights[k];
+
+ // All vertices z Pos
+ interfaceCtx->actionVtx[i + 0].v.ob[2] = interfaceCtx->actionVtx[i + 1].v.ob[2] =
+ interfaceCtx->actionVtx[i + 2].v.ob[2] = interfaceCtx->actionVtx[i + 3].v.ob[2] = 0;
+
+ // Unused flag
+ interfaceCtx->actionVtx[i + 0].v.flag = interfaceCtx->actionVtx[i + 1].v.flag =
+ interfaceCtx->actionVtx[i + 2].v.flag = interfaceCtx->actionVtx[i + 3].v.flag = 0;
+
+ // Left and Top texture coordinates
+ interfaceCtx->actionVtx[i + 0].v.tc[0] = interfaceCtx->actionVtx[i + 0].v.tc[1] =
+ interfaceCtx->actionVtx[i + 1].v.tc[1] = interfaceCtx->actionVtx[i + 2].v.tc[0] = 0;
+
+ // Right vertices texture coordinates
+ interfaceCtx->actionVtx[i + 1].v.tc[0] = interfaceCtx->actionVtx[i + 3].v.tc[0] = sActionVtxWidths[k] << 5;
+
+ // Bottom vertices texture coordinates
+ interfaceCtx->actionVtx[i + 2].v.tc[1] = interfaceCtx->actionVtx[i + 3].v.tc[1] = sActionVtxHeights[k] << 5;
+
+ // Set color
+ interfaceCtx->actionVtx[i + 0].v.cn[0] = interfaceCtx->actionVtx[i + 1].v.cn[0] =
+ interfaceCtx->actionVtx[i + 2].v.cn[0] = interfaceCtx->actionVtx[i + 3].v.cn[0] =
+ interfaceCtx->actionVtx[i + 0].v.cn[1] = interfaceCtx->actionVtx[i + 1].v.cn[1] =
+ interfaceCtx->actionVtx[i + 2].v.cn[1] = interfaceCtx->actionVtx[i + 3].v.cn[1] =
+ interfaceCtx->actionVtx[i + 0].v.cn[2] = interfaceCtx->actionVtx[i + 1].v.cn[2] =
+ interfaceCtx->actionVtx[i + 2].v.cn[2] = interfaceCtx->actionVtx[i + 3].v.cn[2] = 255;
+
+ // Set alpha
+ interfaceCtx->actionVtx[i + 0].v.cn[3] = interfaceCtx->actionVtx[i + 1].v.cn[3] =
+ interfaceCtx->actionVtx[i + 2].v.cn[3] = interfaceCtx->actionVtx[i + 3].v.cn[3] = 255;
+ }
+
+ // A button right and top texture coordinates
+ interfaceCtx->actionVtx[1].v.tc[0] = interfaceCtx->actionVtx[3].v.tc[0] = interfaceCtx->actionVtx[2].v.tc[1] =
+ interfaceCtx->actionVtx[3].v.tc[1] = 32 << 5;
+
+ // A button background right and top texture coordinates
+ interfaceCtx->actionVtx[5].v.tc[0] = interfaceCtx->actionVtx[7].v.tc[0] = interfaceCtx->actionVtx[6].v.tc[1] =
+ interfaceCtx->actionVtx[7].v.tc[1] = 32 << 5;
+
+ // Loop over vertices for the minigame-perfect letters
+ // Outer loop is to loop over 2 sets of letters: shadowed letters (j = 0) and colored letters (j = 1)
+ for (j = 0, shadowOffset = 2; j < 2; j++, shadowOffset -= 2) {
+ // Inner loop is to loop over letters (k) and actionVtx index (i)
+ for (k = 0; k < PERFECT_LETTERS_NUM_LETTERS; k++, i += 4) {
+ if ((interfaceCtx->perfectLettersType == PERFECT_LETTERS_TYPE_1) ||
+ ((interfaceCtx->perfectLettersType == PERFECT_LETTERS_TYPE_3) &&
+ (interfaceCtx->perfectLettersState[0] == PERFECT_LETTERS_STATE_EXIT))) {
+ // Left vertices x Pos
+ interfaceCtx->actionVtx[i + 0].v.ob[0] = interfaceCtx->actionVtx[i + 2].v.ob[0] =
+ -((sPerfectLettersCenterX[k] - shadowOffset) + 16);
+
+ // Right vertices x Pos
+ interfaceCtx->actionVtx[i + 1].v.ob[0] = interfaceCtx->actionVtx[i + 3].v.ob[0] =
+ interfaceCtx->actionVtx[i + 0].v.ob[0] + PERFECT_LETTERS_VTX_WIDTH;
+
+ // Top vertices y Pos
+ interfaceCtx->actionVtx[i + 0].v.ob[1] = interfaceCtx->actionVtx[i + 1].v.ob[1] =
+ (sPerfectLettersCenterY[k] - shadowOffset) + 16;
+
+ // Bottom vertices y Pos
+ interfaceCtx->actionVtx[i + 2].v.ob[1] = interfaceCtx->actionVtx[i + 3].v.ob[1] =
+ interfaceCtx->actionVtx[i + 0].v.ob[1] - PERFECT_LETTERS_VTX_HEIGHT;
+
+ } else if ((interfaceCtx->perfectLettersType == PERFECT_LETTERS_TYPE_2) ||
+ (interfaceCtx->perfectLettersType == PERFECT_LETTERS_TYPE_3)) {
+ // Left vertices x Pos
+ interfaceCtx->actionVtx[i + 0].v.ob[0] = interfaceCtx->actionVtx[i + 2].v.ob[0] =
+ -(interfaceCtx->perfectLettersOffsetX[k] - shadowOffset + 16);
+
+ // Right vertices x Pos
+ interfaceCtx->actionVtx[i + 1].v.ob[0] = interfaceCtx->actionVtx[i + 3].v.ob[0] =
+ interfaceCtx->actionVtx[i + 0].v.ob[0] + PERFECT_LETTERS_VTX_WIDTH;
+
+ // Top vertices y Pos
+ interfaceCtx->actionVtx[i + 0].v.ob[1] = interfaceCtx->actionVtx[i + 1].v.ob[1] = 16 - shadowOffset;
+
+ // Bottom vertices y Pos
+ interfaceCtx->actionVtx[i + 2].v.ob[1] = interfaceCtx->actionVtx[i + 3].v.ob[1] =
+ interfaceCtx->actionVtx[i + 0].v.ob[1] - PERFECT_LETTERS_VTX_HEIGHT;
+
+ } else {
+ // Left vertices x Pos
+ interfaceCtx->actionVtx[i + 0].v.ob[0] = interfaceCtx->actionVtx[i + 2].v.ob[0] = -(216 - shadowOffset);
+
+ // Right vertices x Pos
+ interfaceCtx->actionVtx[i + 1].v.ob[0] = interfaceCtx->actionVtx[i + 3].v.ob[0] =
+ interfaceCtx->actionVtx[i + 0].v.ob[0] + PERFECT_LETTERS_VTX_WIDTH;
+
+ // Top vertices y Pos
+ interfaceCtx->actionVtx[i + 0].v.ob[1] = interfaceCtx->actionVtx[i + 1].v.ob[1] = 24 - shadowOffset;
+
+ // Bottom vertices y Pos
+ interfaceCtx->actionVtx[i + 2].v.ob[1] = interfaceCtx->actionVtx[i + 3].v.ob[1] =
+ interfaceCtx->actionVtx[i + 0].v.ob[1] - PERFECT_LETTERS_VTX_HEIGHT;
+ }
+
+ // All vertices z Pos
+ interfaceCtx->actionVtx[i + 0].v.ob[2] = interfaceCtx->actionVtx[i + 1].v.ob[2] =
+ interfaceCtx->actionVtx[i + 2].v.ob[2] = interfaceCtx->actionVtx[i + 3].v.ob[2] = 0;
+
+ // Unused flag
+ interfaceCtx->actionVtx[i + 0].v.flag = interfaceCtx->actionVtx[i + 1].v.flag =
+ interfaceCtx->actionVtx[i + 2].v.flag = interfaceCtx->actionVtx[i + 3].v.flag = 0;
+
+ // Left and Top texture coordinates
+ interfaceCtx->actionVtx[i + 0].v.tc[0] = interfaceCtx->actionVtx[i + 0].v.tc[1] =
+ interfaceCtx->actionVtx[i + 1].v.tc[1] = interfaceCtx->actionVtx[i + 2].v.tc[0] = 0;
+
+ // Right vertices texture coordinates
+ interfaceCtx->actionVtx[i + 1].v.tc[0] = interfaceCtx->actionVtx[i + 3].v.tc[0] = PERFECT_LETTERS_VTX_WIDTH
+ << 5;
+
+ // Bottom vertices texture coordinates
+ interfaceCtx->actionVtx[i + 2].v.tc[1] = interfaceCtx->actionVtx[i + 3].v.tc[1] = PERFECT_LETTERS_VTX_HEIGHT
+ << 5;
+
+ // Set color
+ interfaceCtx->actionVtx[i + 0].v.cn[0] = interfaceCtx->actionVtx[i + 1].v.cn[0] =
+ interfaceCtx->actionVtx[i + 2].v.cn[0] = interfaceCtx->actionVtx[i + 3].v.cn[0] =
+ interfaceCtx->actionVtx[i + 0].v.cn[1] = interfaceCtx->actionVtx[i + 1].v.cn[1] =
+ interfaceCtx->actionVtx[i + 2].v.cn[1] = interfaceCtx->actionVtx[i + 3].v.cn[1] =
+ interfaceCtx->actionVtx[i + 0].v.cn[2] = interfaceCtx->actionVtx[i + 1].v.cn[2] =
+ interfaceCtx->actionVtx[i + 2].v.cn[2] = interfaceCtx->actionVtx[i + 3].v.cn[2] = 255;
+
+ // Set alpha
+ interfaceCtx->actionVtx[i + 0].v.cn[3] = interfaceCtx->actionVtx[i + 1].v.cn[3] =
+ interfaceCtx->actionVtx[i + 2].v.cn[3] = interfaceCtx->actionVtx[i + 3].v.cn[3] = 255;
+ }
+ }
+
+ // Beating Hearts Vertices
+ interfaceCtx->beatingHeartVtx = GRAPH_ALLOC(play->state.gfxCtx, 4 * sizeof(Vtx));
+
+ // Left vertices x Pos
+ interfaceCtx->beatingHeartVtx[0].v.ob[0] = interfaceCtx->beatingHeartVtx[2].v.ob[0] = BEATING_HEART_VTX_X;
+
+ // Right vertices x Pos
+ interfaceCtx->beatingHeartVtx[1].v.ob[0] = interfaceCtx->beatingHeartVtx[3].v.ob[0] =
+ BEATING_HEART_VTX_X + BEATING_HEART_VTX_WIDTH;
+
+ // Top vertices y Pos
+ interfaceCtx->beatingHeartVtx[0].v.ob[1] = interfaceCtx->beatingHeartVtx[1].v.ob[1] =
+ BEATING_HEART_VTX_Y + BEATING_HEART_VTX_WIDTH;
+
+ // Bottom vertices y Pos
+ interfaceCtx->beatingHeartVtx[2].v.ob[1] = interfaceCtx->beatingHeartVtx[3].v.ob[1] = BEATING_HEART_VTX_Y;
+
+ // All vertices z Pos
+ interfaceCtx->beatingHeartVtx[0].v.ob[2] = interfaceCtx->beatingHeartVtx[1].v.ob[2] =
+ interfaceCtx->beatingHeartVtx[2].v.ob[2] = interfaceCtx->beatingHeartVtx[3].v.ob[2] = 0;
+
+ // unused flag
+ interfaceCtx->beatingHeartVtx[0].v.flag = interfaceCtx->beatingHeartVtx[1].v.flag =
+ interfaceCtx->beatingHeartVtx[2].v.flag = interfaceCtx->beatingHeartVtx[3].v.flag = 0;
+
+ // Texture Coordinates
+ interfaceCtx->beatingHeartVtx[0].v.tc[0] = interfaceCtx->beatingHeartVtx[0].v.tc[1] =
+ interfaceCtx->beatingHeartVtx[1].v.tc[1] = interfaceCtx->beatingHeartVtx[2].v.tc[0] = 0;
+ interfaceCtx->beatingHeartVtx[1].v.tc[0] = interfaceCtx->beatingHeartVtx[2].v.tc[1] =
+ interfaceCtx->beatingHeartVtx[3].v.tc[0] = interfaceCtx->beatingHeartVtx[3].v.tc[1] =
+ BEATING_HEART_VTX_WIDTH << 5;
+
+ // Set color
+ interfaceCtx->beatingHeartVtx[0].v.cn[0] = interfaceCtx->beatingHeartVtx[1].v.cn[0] =
+ interfaceCtx->beatingHeartVtx[2].v.cn[0] = interfaceCtx->beatingHeartVtx[3].v.cn[0] =
+ interfaceCtx->beatingHeartVtx[0].v.cn[1] = interfaceCtx->beatingHeartVtx[1].v.cn[1] =
+ interfaceCtx->beatingHeartVtx[2].v.cn[1] = interfaceCtx->beatingHeartVtx[3].v.cn[1] =
+ interfaceCtx->beatingHeartVtx[0].v.cn[2] = interfaceCtx->beatingHeartVtx[1].v.cn[2] =
+ interfaceCtx->beatingHeartVtx[2].v.cn[2] = interfaceCtx->beatingHeartVtx[3].v.cn[2] =
+ interfaceCtx->beatingHeartVtx[0].v.cn[3] = interfaceCtx->beatingHeartVtx[1].v.cn[3] =
+ interfaceCtx->beatingHeartVtx[2].v.cn[3] = interfaceCtx->beatingHeartVtx[3].v.cn[3] =
+ 255;
+}
s32 sPostmanTimerInputBtnAPressed = false;
@@ -322,7 +942,7 @@ void Interface_StartPostmanTimer(s16 seconds, s16 bunnyHoodState) {
void Interface_StartGoronRaceTimer(s32 arg0) {
if (gSaveContext.timerStates[TIMER_ID_GORON_RACE_UNUSED] != TIMER_STATE_OFF) {
// Goron race started
- if (gSaveContext.eventInf[1] & 1) {
+ if (CHECK_EVENTINF(EVENTINF_10)) {
gSaveContext.timerCurTimes[TIMER_ID_GORON_RACE_UNUSED] = SECONDS_TO_TIMER_PRECISE(2, 39);
} else {
gSaveContext.timerCurTimes[TIMER_ID_GORON_RACE_UNUSED] = SECONDS_TO_TIMER_PRECISE(0, 1);
@@ -372,7 +992,28 @@ u32 Interface_GetCompressedTimerDigits(s16 timerId) {
(timerArr[4] << 4) | timerArr[5];
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8010EE74.s")
+void Interface_NewDay(PlayState* play, s32 day) {
+ s32 pad;
+ s16 i = day - 1;
+
+ // i is used to store dayMinusOne
+ if ((i < 0) || (i >= 3)) {
+ i = 0;
+ }
+
+ // Loads day number from week_static for the three-day clock
+ DmaMgr_SendRequest0((u32)play->interfaceCtx.doActionSegment + 0x780,
+ (u32)SEGMENT_ROM_START(week_static) + i * 0x510, 0x510);
+
+ // i is used to store sceneId
+ for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.permanentSceneFlags); i++) {
+ gSaveContext.save.saveInfo.permanentSceneFlags[i].chest = gSaveContext.cycleSceneFlags[i].chest;
+ gSaveContext.save.saveInfo.permanentSceneFlags[i].switch0 = gSaveContext.cycleSceneFlags[i].switch0;
+ gSaveContext.save.saveInfo.permanentSceneFlags[i].switch1 = gSaveContext.cycleSceneFlags[i].switch1;
+ gSaveContext.save.saveInfo.permanentSceneFlags[i].clearedRoom = gSaveContext.cycleSceneFlags[i].clearedRoom;
+ gSaveContext.save.saveInfo.permanentSceneFlags[i].collectible = gSaveContext.cycleSceneFlags[i].collectible;
+ }
+}
void Interface_SetHudVisibility(u16 hudVisibility) {
if (gSaveContext.hudVisibility != hudVisibility) {
@@ -388,7 +1029,7 @@ void Interface_SetHudVisibility(u16 hudVisibility) {
void Interface_UpdateButtonAlphasByStatus(PlayState* play, s16 risingAlpha) {
InterfaceContext* interfaceCtx = &play->interfaceCtx;
- if ((gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) || (gSaveContext.unk_1015 == ITEM_NONE)) {
+ if ((gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) || (gSaveContext.bButtonStatus == BTN_DISABLED)) {
if (interfaceCtx->bAlpha != 70) {
interfaceCtx->bAlpha = 70;
}
@@ -760,7 +1401,8 @@ void Interface_UpdateHudAlphas(PlayState* play, s16 dimmingAlpha) {
interfaceCtx->aAlpha = risingAlpha;
}
- if ((gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) || (gSaveContext.unk_1015 == ITEM_NONE)) {
+ if ((gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) ||
+ (gSaveContext.bButtonStatus == ITEM_NONE)) {
if (interfaceCtx->bAlpha != 70) {
interfaceCtx->bAlpha = 70;
}
@@ -1134,26 +1776,822 @@ void Interface_UpdateHudAlphas(PlayState* play, s16 dimmingAlpha) {
break;
}
- if ((play->roomCtx.curRoom.unk3 == 1) && (interfaceCtx->minimapAlpha >= 255)) {
+ if ((play->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_1) && (interfaceCtx->minimapAlpha >= 255)) {
interfaceCtx->minimapAlpha = 255;
}
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80110038.s")
+/**
+ * A continuation of the if-else chain from Interface_UpdateButtonsPart1
+ * Also used directly when opening the pause menu i.e. skips part 1
+ */
+void Interface_UpdateButtonsPart2(PlayState* play) {
+ MessageContext* msgCtx = &play->msgCtx;
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ Player* player = GET_PLAYER(play);
+ s16 i;
+ s16 restoreHudVisibility = false;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80111CB4.s")
+ if (CHECK_EVENTINF(EVENTINF_41)) {
+ // Related to swamp boat (non-minigame)?
+ for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
+ if ((GET_CUR_FORM_BTN_ITEM(i) != ITEM_PICTO_BOX) || (msgCtx->msgMode != 0)) {
+ if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.buttonStatus[i] = BTN_DISABLED;
+ } else {
+ if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.buttonStatus[i] = BTN_ENABLED;
+ }
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_801129E4.s")
+ if (sPictoState == PICTO_BOX_STATE_OFF) {
+ if (gSaveContext.buttonStatus[EQUIP_SLOT_B] != BTN_DISABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
+ } else {
+ if (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
+ }
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_90_20)) {
+ // Fishermans's jumping minigame
+ for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
+ if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
+ gSaveContext.buttonStatus[i] = BTN_DISABLED;
+ }
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80112AF4.s")
+ Interface_SetHudVisibility(HUD_VISIBILITY_B);
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_82_08)) {
+ // Swordsman's log minigame
+ for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
+ if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
+ gSaveContext.buttonStatus[i] = BTN_DISABLED;
+ }
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80112AFC.s")
+ Interface_SetHudVisibility(HUD_VISIBILITY_A_B_HEARTS_MAGIC_MINIMAP);
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_20)) {
+ // Related to moon child
+ if (player->currentMask == PLAYER_MASK_FIERCE_DEITY) {
+ for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
+ if ((GET_CUR_FORM_BTN_ITEM(i) == ITEM_MASK_FIERCE_DEITY) ||
+ ((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_BOTTLE) && (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_OBABA_DRINK))) {
+ if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ gSaveContext.buttonStatus[i] = BTN_ENABLED;
+ }
+ } else {
+ if (gSaveContext.buttonStatus[i] != BTN_DISABLED) {
+ gSaveContext.buttonStatus[i] = BTN_DISABLED;
+ restoreHudVisibility = true;
+ }
+ }
+ }
+ } else {
+ for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
+ if ((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MASK_DEKU) && (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_MASK_ZORA)) {
+ if (gSaveContext.buttonStatus[i] != BTN_DISABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.buttonStatus[i] = BTN_DISABLED;
+ } else {
+ if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.buttonStatus[i] = BTN_ENABLED;
+ }
+ }
+ }
+ } else if ((play->sceneId == SCENE_SPOT00) && (gSaveContext.sceneLayer == 6)) {
+ // Unknown cutscene
+ for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
+ if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.buttonStatus[i] = BTN_DISABLED;
+ }
+ } else if (CHECK_EVENTINF(EVENTINF_34)) {
+ // Deku playground minigame
+ if (player->stateFlags3 & PLAYER_STATE3_1000000) {
+ if (gSaveContext.save.saveInfo.inventory.items[SLOT_NUT] == ITEM_NUT) {
+ BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_NUT;
+ Interface_LoadItemIconImpl(play, EQUIP_SLOT_B);
+ } else {
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
+ restoreHudVisibility = true;
+ }
+ } else {
+ if (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) {
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
+ restoreHudVisibility = true;
+ }
+
+ for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
+ if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.buttonStatus[i] = BTN_DISABLED;
+ }
+ }
+
+ if (restoreHudVisibility || (gSaveContext.hudVisibility != HUD_VISIBILITY_A_B_MINIMAP)) {
+ gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
+ Interface_SetHudVisibility(HUD_VISIBILITY_A_B_MINIMAP);
+ restoreHudVisibility = false;
+ }
+ } else if (player->stateFlags3 & PLAYER_STATE3_1000000) {
+ // Nuts on B (from flying as Deku Link)
+ if (gSaveContext.save.saveInfo.inventory.items[SLOT_NUT] == ITEM_NUT) {
+ if (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_NUT) {
+ BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_NUT;
+ Interface_LoadItemIconImpl(play, EQUIP_SLOT_B);
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
+ restoreHudVisibility = true;
+ }
+ } else if (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_ENABLED) {
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
+ restoreHudVisibility = true;
+ }
+
+ if (restoreHudVisibility) {
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
+ }
+ } else if (!gSaveContext.save.saveInfo.playerData.isMagicAcquired && (CUR_FORM == PLAYER_FORM_DEKU) &&
+ (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_NUT)) {
+ // Nuts on B (as Deku Link)
+ BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_FD;
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
+ } else if ((Player_GetEnvironmentalHazard(play) >= PLAYER_ENV_HAZARD_UNDERWATER_FLOOR) &&
+ (Player_GetEnvironmentalHazard(play) <= PLAYER_ENV_HAZARD_UNDERWATER_FREE)) {
+ // Swimming underwater
+ if (CUR_FORM != PLAYER_FORM_ZORA) {
+ if ((player->currentMask == PLAYER_MASK_BLAST) && (player->blastMaskTimer == 0)) {
+ if (gSaveContext.bButtonStatus == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.bButtonStatus = BTN_ENABLED;
+ } else if ((interfaceCtx->bButtonDoAction == DO_ACTION_EXPLODE) &&
+ (player->currentMask == PLAYER_MASK_BLAST)) {
+ if (gSaveContext.bButtonStatus != BTN_DISABLED) {
+ gSaveContext.bButtonStatus = BTN_DISABLED;
+ restoreHudVisibility = true;
+ }
+ } else {
+ if (gSaveContext.buttonStatus[EQUIP_SLOT_B] != BTN_DISABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
+ }
+ } else {
+ if (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
+ }
+
+ for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
+ if (GET_CUR_FORM_BTN_ITEM(i) != ITEM_MASK_ZORA) {
+ if (Player_GetEnvironmentalHazard(play) == PLAYER_ENV_HAZARD_UNDERWATER_FLOOR) {
+ if (!((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_BOTTLE) &&
+ (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_OBABA_DRINK))) {
+ if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.buttonStatus[i] = BTN_DISABLED;
+ } else {
+ if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.buttonStatus[i] = BTN_ENABLED;
+ }
+ } else {
+ if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.buttonStatus[i] = BTN_DISABLED;
+ }
+ } else if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
+ gSaveContext.buttonStatus[i] = BTN_ENABLED;
+ restoreHudVisibility = true;
+ }
+ }
+
+ if (restoreHudVisibility) {
+ gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
+ }
+
+ if ((play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF)) {
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_NONE) {
+ Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
+ }
+ }
+ } else if (player->stateFlags1 & PLAYER_STATE1_200000) {
+ // First person view
+ for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
+ if (GET_CUR_FORM_BTN_ITEM(i) != ITEM_LENS) {
+ if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.buttonStatus[i] = BTN_DISABLED;
+ } else {
+ if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.buttonStatus[i] = BTN_ENABLED;
+ }
+ }
+
+ if (gSaveContext.buttonStatus[EQUIP_SLOT_B] != BTN_DISABLED) {
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
+ restoreHudVisibility = true;
+ }
+ } else if (player->stateFlags1 & PLAYER_STATE1_2000) {
+ // Hanging from a ledge
+ if (gSaveContext.buttonStatus[EQUIP_SLOT_B] != BTN_DISABLED) {
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
+ restoreHudVisibility = true;
+ Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
+ }
+ } else {
+ // End of special event cases
+
+ // B button
+ if ((interfaceCtx->bButtonDoAction == DO_ACTION_EXPLODE) && (player->currentMask == PLAYER_MASK_BLAST) &&
+ (player->blastMaskTimer != 0)) {
+ // Cooldown period for blast mask
+ if (gSaveContext.bButtonStatus != BTN_DISABLED) {
+ gSaveContext.bButtonStatus = BTN_DISABLED;
+ restoreHudVisibility = true;
+ }
+ } else {
+ // default to enabled
+ if (gSaveContext.bButtonStatus == BTN_DISABLED) {
+ gSaveContext.bButtonStatus = BTN_ENABLED;
+ restoreHudVisibility = true;
+ }
+
+ // Apply B button restriction
+ if (interfaceCtx->restrictions.bButton == 0) {
+ if ((BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_BOW) ||
+ (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_BOMB) ||
+ (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_BOMBCHU)) {
+ if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) == EQUIP_VALUE_SWORD_NONE) {
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
+ }
+
+ if (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_ENABLED) {
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] =
+ ITEM_SWORD_KOKIRI + GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) - EQUIP_VALUE_SWORD_KOKIRI;
+ }
+
+ BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = gSaveContext.buttonStatus[EQUIP_SLOT_B];
+
+ if (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_NONE) {
+ Interface_LoadItemIconImpl(play, EQUIP_SLOT_B);
+ }
+ restoreHudVisibility = true;
+ } else if (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_NONE) {
+ if (interfaceCtx->bButtonDoAction != 0) {
+ if (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
+ }
+ } else {
+ if (gSaveContext.buttonStatus[EQUIP_SLOT_B] != BTN_DISABLED) {
+ restoreHudVisibility = true;
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
+ }
+ }
+ } else if (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_NONE) {
+ if (gSaveContext.buttonStatus[EQUIP_SLOT_B] != BTN_DISABLED) {
+ restoreHudVisibility = true;
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
+ }
+ } else {
+ if (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
+ }
+ }
+ } else if (interfaceCtx->restrictions.bButton != 0) {
+ if ((BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_BOW) ||
+ (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_BOMB) ||
+ (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_BOMBCHU)) {
+ if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) == EQUIP_VALUE_SWORD_NONE) {
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
+ }
+
+ BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = gSaveContext.buttonStatus[EQUIP_SLOT_B];
+
+ if (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_NONE) {
+ Interface_LoadItemIconImpl(play, EQUIP_SLOT_B);
+ }
+ restoreHudVisibility = true;
+ }
+ if (gSaveContext.buttonStatus[EQUIP_SLOT_B] != BTN_DISABLED) {
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
+ restoreHudVisibility = true;
+ }
+ }
+ }
+
+ // C buttons
+ if (gSaveContext.save.playerForm == player->transformation) {
+ for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
+ // Individual C button
+ if (!gPlayerFormItemRestrictions[(void)0, gSaveContext.save.playerForm][GET_CUR_FORM_BTN_ITEM(i)]) {
+ // Item not usable in current playerForm
+ if (gSaveContext.buttonStatus[i] != BTN_DISABLED) {
+ gSaveContext.buttonStatus[i] = BTN_DISABLED;
+ restoreHudVisibility = true;
+ }
+ } else if (player->actor.id != ACTOR_PLAYER) {
+ // Currently not playing as the main player
+ if (gSaveContext.buttonStatus[i] != BTN_DISABLED) {
+ gSaveContext.buttonStatus[i] = BTN_DISABLED;
+ restoreHudVisibility = true;
+ }
+ } else if (player->currentMask == PLAYER_MASK_GIANT) {
+ // Currently wearing Giant's Mask
+ if (GET_CUR_FORM_BTN_ITEM(i) != ITEM_MASK_GIANT) {
+ if (gSaveContext.buttonStatus[i] != BTN_DISABLED) {
+ gSaveContext.buttonStatus[i] = BTN_DISABLED;
+ restoreHudVisibility = true;
+ }
+ } else if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ gSaveContext.buttonStatus[i] = BTN_ENABLED;
+ }
+ } else if (GET_CUR_FORM_BTN_ITEM(i) == ITEM_MASK_GIANT) {
+ // Giant's Mask is equipped
+ if (play->sceneId != SCENE_INISIE_BS) {
+ if (gSaveContext.buttonStatus[i] != BTN_DISABLED) {
+ gSaveContext.buttonStatus[i] = BTN_DISABLED;
+ restoreHudVisibility = true;
+ }
+ } else if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ gSaveContext.buttonStatus[i] = BTN_ENABLED;
+ }
+ } else if (GET_CUR_FORM_BTN_ITEM(i) == ITEM_MASK_FIERCE_DEITY) {
+ // Fierce Deity's Mask is equipped
+ if ((play->sceneId != SCENE_MITURIN_BS) && (play->sceneId != SCENE_HAKUGIN_BS) &&
+ (play->sceneId != SCENE_SEA_BS) && (play->sceneId != SCENE_INISIE_BS) &&
+ (play->sceneId != SCENE_LAST_BS)) {
+ if (gSaveContext.buttonStatus[i] != BTN_DISABLED) {
+ gSaveContext.buttonStatus[i] = BTN_DISABLED;
+ restoreHudVisibility = true;
+ }
+ } else if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ gSaveContext.buttonStatus[i] = BTN_ENABLED;
+ }
+ } else {
+ // End of special item cases. Apply restrictions to buttons
+ if (interfaceCtx->restrictions.tradeItems != 0) {
+ if (((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MOON_TEAR) &&
+ (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_PENDANT_OF_MEMORIES)) ||
+ ((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_BOTTLE) &&
+ (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_OBABA_DRINK)) ||
+ (GET_CUR_FORM_BTN_ITEM(i) == ITEM_OCARINA)) {
+ if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.buttonStatus[i] = BTN_DISABLED;
+ }
+ } else if (interfaceCtx->restrictions.tradeItems == 0) {
+ if (((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MOON_TEAR) &&
+ (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_PENDANT_OF_MEMORIES)) ||
+ ((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_BOTTLE) &&
+ (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_OBABA_DRINK)) ||
+ (GET_CUR_FORM_BTN_ITEM(i) == ITEM_OCARINA)) {
+ if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.buttonStatus[i] = BTN_ENABLED;
+ }
+ }
+
+ if (interfaceCtx->restrictions.masks != 0) {
+ if ((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MASK_DEKU) &&
+ (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_MASK_GIANT)) {
+ if (!gSaveContext.buttonStatus[i]) { // == BTN_ENABLED
+ restoreHudVisibility = true;
+ }
+ gSaveContext.buttonStatus[i] = BTN_DISABLED;
+ }
+ } else if (interfaceCtx->restrictions.masks == 0) {
+ if ((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MASK_DEKU) &&
+ (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_MASK_GIANT)) {
+ if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.buttonStatus[i] = BTN_ENABLED;
+ }
+ }
+
+ if (interfaceCtx->restrictions.pictoBox != 0) {
+ if (GET_CUR_FORM_BTN_ITEM(i) == ITEM_PICTO_BOX) {
+ if (!gSaveContext.buttonStatus[i]) { // == BTN_ENABLED
+ restoreHudVisibility = true;
+ }
+ gSaveContext.buttonStatus[i] = BTN_DISABLED;
+ }
+ } else if (interfaceCtx->restrictions.pictoBox == 0) {
+ if (GET_CUR_FORM_BTN_ITEM(i) == ITEM_PICTO_BOX) {
+ if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.buttonStatus[i] = BTN_ENABLED;
+ }
+ }
+
+ if (interfaceCtx->restrictions.all != 0) {
+ if (!((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MOON_TEAR) &&
+ (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_PENDANT_OF_MEMORIES)) &&
+ !((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_BOTTLE) &&
+ (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_OBABA_DRINK)) &&
+ (GET_CUR_FORM_BTN_ITEM(i) != ITEM_OCARINA) &&
+ !((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MASK_DEKU) &&
+ (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_MASK_GIANT)) &&
+ (GET_CUR_FORM_BTN_ITEM(i) != ITEM_PICTO_BOX)) {
+
+ if ((gSaveContext.buttonStatus[i] == BTN_ENABLED)) {
+ restoreHudVisibility = true;
+ gSaveContext.buttonStatus[i] = BTN_DISABLED;
+ }
+ }
+ } else if (interfaceCtx->restrictions.all == 0) {
+ if (!((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MOON_TEAR) &&
+ (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_PENDANT_OF_MEMORIES)) &&
+ !((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_BOTTLE) &&
+ (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_OBABA_DRINK)) &&
+ (GET_CUR_FORM_BTN_ITEM(i) != ITEM_OCARINA) &&
+ !((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MASK_DEKU) &&
+ (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_MASK_GIANT)) &&
+ (GET_CUR_FORM_BTN_ITEM(i) != ITEM_PICTO_BOX)) {
+
+ if ((gSaveContext.buttonStatus[i] == BTN_DISABLED)) {
+ restoreHudVisibility = true;
+ gSaveContext.buttonStatus[i] = BTN_ENABLED;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (restoreHudVisibility && (play->activeCamId == CAM_ID_MAIN) && (play->transitionTrigger == TRANS_TRIGGER_OFF) &&
+ (play->transitionMode == TRANS_MODE_OFF)) {
+ gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
+ Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
+ }
+}
+
+void Interface_UpdateButtonsPart1(PlayState* play) {
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ Player* player = GET_PLAYER(play);
+ s32 pad;
+ s32 restoreHudVisibility = false;
+
+ if (gSaveContext.save.cutsceneIndex < 0xFFF0) {
+ gSaveContext.hudVisibilityForceButtonAlphasByStatus = false;
+ if ((player->stateFlags1 & PLAYER_STATE1_800000) || CHECK_WEEKEVENTREG(WEEKEVENTREG_08_01) ||
+ (!(CHECK_EVENTINF(EVENTINF_41)) && (play->unk_1887C >= 2))) {
+ // Riding Epona OR Honey & Darling minigame OR Horseback balloon minigame OR related to swamp boat
+ // (non-minigame?)
+ if ((player->stateFlags1 & PLAYER_STATE1_800000) && (player->currentMask == PLAYER_MASK_BLAST) &&
+ (gSaveContext.bButtonStatus == BTN_DISABLED)) {
+ // Riding Epona with blast mask?
+ restoreHudVisibility = true;
+ gSaveContext.bButtonStatus = BTN_ENABLED;
+ }
+
+ if (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_NONE) {
+ if ((player->transformation == PLAYER_FORM_DEKU) && CHECK_WEEKEVENTREG(WEEKEVENTREG_08_01)) {
+ gSaveContext.hudVisibilityForceButtonAlphasByStatus = true;
+ if (play->sceneId == SCENE_BOWLING) {
+ if (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) {
+ 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;
+ }
+ } else if (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) {
+ 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;
+ }
+
+ Interface_SetHudVisibility(HUD_VISIBILITY_B_MAGIC);
+ } else {
+ if ((BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_BOW) &&
+ (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_BOMB) &&
+ (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_BOMBCHU)) {
+ gSaveContext.hudVisibilityForceButtonAlphasByStatus = true;
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B);
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_ENABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_ENABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_ENABLED;
+ if (play->sceneId == SCENE_BOWLING) {
+ if (CURRENT_DAY == 1) {
+ BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_BOMBCHU;
+ } else if (CURRENT_DAY == 2) {
+ BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_BOMB;
+ } else {
+ BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_BOW;
+ }
+ Interface_LoadItemIconImpl(play, EQUIP_SLOT_B);
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
+ } else {
+ BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_BOW;
+
+ if (play->unk_1887C >= 2) {
+ Interface_LoadItemIconImpl(play, EQUIP_SLOT_B);
+ } else if (gSaveContext.save.saveInfo.inventory.items[SLOT_BOW] == ITEM_NONE) {
+ BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_NONE;
+ } else {
+ Interface_LoadItemIconImpl(play, EQUIP_SLOT_B);
+ }
+
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
+ Interface_SetHudVisibility(HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE);
+ }
+ }
+
+ if (play->transitionMode != TRANS_MODE_OFF) {
+ Interface_SetHudVisibility(HUD_VISIBILITY_NONE);
+ } else if ((gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) &&
+ (gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0)) &&
+ (Cutscene_GetSceneLayer(play) != 0) && (play->transitionTrigger == TRANS_TRIGGER_OFF)) {
+ Interface_SetHudVisibility(HUD_VISIBILITY_A_B_MINIMAP);
+ } else if ((gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) &&
+ (CHECK_EVENTINF(EVENTINF_35))) {
+ Interface_SetHudVisibility(HUD_VISIBILITY_B_MINIMAP);
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_82_08) &&
+ (gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE)) {
+ Interface_SetHudVisibility(HUD_VISIBILITY_B);
+ } else if (play->unk_1887C >= 2) {
+ Interface_SetHudVisibility(HUD_VISIBILITY_B);
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_01)) {
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
+ Interface_SetHudVisibility(HUD_VISIBILITY_A_B_MINIMAP);
+ } else if (player->stateFlags1 & PLAYER_STATE1_800000) {
+ Interface_SetHudVisibility(HUD_VISIBILITY_A_B_MINIMAP);
+ }
+ }
+ } else {
+ if (player->stateFlags1 & PLAYER_STATE1_800000) {
+ Interface_SetHudVisibility(HUD_VISIBILITY_A_B_MINIMAP);
+ }
+
+ if (play->sceneId == SCENE_BOWLING) {
+ if (CURRENT_DAY == 1) {
+ BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_BOMBCHU;
+ } else if (CURRENT_DAY == 2) {
+ BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_BOMB;
+ } else {
+ BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_BOW;
+ }
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
+ } else {
+ BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_BOW;
+ }
+
+ if (play->unk_1887C >= 2) {
+ Interface_LoadItemIconImpl(play, EQUIP_SLOT_B);
+ } else if (gSaveContext.save.saveInfo.inventory.items[SLOT_BOW] == ITEM_NONE) {
+ BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_NONE;
+ } else {
+ Interface_LoadItemIconImpl(play, EQUIP_SLOT_B);
+ }
+
+ if (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) {
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
+ restoreHudVisibility = true;
+ }
+
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
+ Interface_SetHudVisibility(HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE);
+
+ if (play->transitionMode != TRANS_MODE_OFF) {
+ Interface_SetHudVisibility(HUD_VISIBILITY_NONE);
+ } else if ((gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) &&
+ (gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0)) &&
+ (Cutscene_GetSceneLayer(play) != 0) && (play->transitionTrigger == TRANS_TRIGGER_OFF)) {
+ Interface_SetHudVisibility(HUD_VISIBILITY_A_B_MINIMAP);
+ } else if (gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) {
+ Interface_SetHudVisibility(HUD_VISIBILITY_B);
+ } else if (play->unk_1887C >= 2) {
+ Interface_SetHudVisibility(HUD_VISIBILITY_B);
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_01)) {
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
+ Interface_SetHudVisibility(HUD_VISIBILITY_A_B_MINIMAP);
+ } else if (player->stateFlags1 & PLAYER_STATE1_800000) {
+ Interface_SetHudVisibility(HUD_VISIBILITY_A_B_MINIMAP);
+ }
+ }
+ } else if (sPictoState != PICTO_BOX_STATE_OFF) {
+ // 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,
+ (u8*)((void)0, gSaveContext.pictoPhotoI5),
+ PICTO_PHOTO_WIDTH * PICTO_PHOTO_HEIGHT);
+ interfaceCtx->unk_222 = interfaceCtx->unk_224 = 0;
+ restoreHudVisibility = true;
+ sPictoState = PICTO_BOX_STATE_OFF;
+ } else if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_B)) {
+ play->actorCtx.flags &= ~ACTORCTX_FLAG_PICTO_BOX_ON;
+ interfaceCtx->unk_222 = interfaceCtx->unk_224 = 0;
+ restoreHudVisibility = true;
+ sPictoState = PICTO_BOX_STATE_OFF;
+ } else if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) || (func_801A5100() == 1)) {
+ if (!(CHECK_EVENTINF(EVENTINF_41)) ||
+ ((CHECK_EVENTINF(EVENTINF_41)) && (CutsceneManager_GetCurrentCsId() == CS_ID_NONE))) {
+ play_sound(NA_SE_SY_CAMERA_SHUTTER);
+ SREG(89) = 1;
+ play->haltAllActors = true;
+ sPictoState = PICTO_BOX_STATE_SETUP_PHOTO;
+ sPictoPhotoBeingTaken = true;
+ }
+ }
+ } else if ((sPictoState >= PICTO_BOX_STATE_SETUP_PHOTO) && (Message_GetState(&play->msgCtx) == 4) &&
+ Message_ShouldAdvance(play)) {
+ play->haltAllActors = false;
+ player->stateFlags1 &= ~PLAYER_STATE1_200;
+ Message_CloseTextbox(play);
+ if (play->msgCtx.choiceIndex != 0) {
+ func_8019F230();
+ func_80115844(play, DO_ACTION_STOP);
+ Interface_SetHudVisibility(HUD_VISIBILITY_A_B);
+ sPictoState = PICTO_BOX_STATE_LENS;
+ REMOVE_QUEST_ITEM(QUEST_PICTOGRAPH);
+ } else {
+ func_8019F208();
+ interfaceCtx->unk_222 = interfaceCtx->unk_224 = 0;
+ restoreHudVisibility = true;
+ Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
+ sPictoState = PICTO_BOX_STATE_OFF;
+ if (sPictoPhotoBeingTaken) {
+ Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : D_801FBB90,
+ (u8*)((void)0, gSaveContext.pictoPhotoI5),
+ PICTO_PHOTO_WIDTH * PICTO_PHOTO_HEIGHT);
+ Snap_RecordPictographedActors(play);
+ }
+ play->actorCtx.flags &= ~ACTORCTX_FLAG_PICTO_BOX_ON;
+ SET_QUEST_ITEM(QUEST_PICTOGRAPH);
+ sPictoPhotoBeingTaken = false;
+ }
+ }
+ } else if ((gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) &&
+ (gSaveContext.save.entrance == ENTRANCE(WATERFALL_RAPIDS, 1)) &&
+ (play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF)) {
+ // Beaver race minigame
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
+ Interface_SetHudVisibility(HUD_VISIBILITY_A_B_MINIMAP);
+ } else if ((gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 1)) &&
+ (play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF)) {
+ // Goron race minigame
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
+ Interface_SetHudVisibility(HUD_VISIBILITY_A_B_HEARTS_MAGIC_MINIMAP);
+ } else if (play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON) {
+ // Related to pictograph
+ if (!CHECK_QUEST_ITEM(QUEST_PICTOGRAPH)) {
+ func_80115844(play, DO_ACTION_STOP);
+ Interface_SetHudVisibility(HUD_VISIBILITY_A_B);
+ sPictoState = PICTO_BOX_STATE_LENS;
+ } else {
+ Play_DecompressI5ToI8((u8*)((void)0, gSaveContext.pictoPhotoI5),
+ (play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : D_801FBB90,
+ PICTO_PHOTO_WIDTH * PICTO_PHOTO_HEIGHT);
+ play->haltAllActors = true;
+ sPictoState = PICTO_BOX_STATE_SETUP_PHOTO;
+ }
+ } else {
+ // Continue processing the remaining cases
+ Interface_UpdateButtonsPart2(play);
+ }
+ }
+
+ if (restoreHudVisibility) {
+ gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
+ if ((play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF)) {
+ Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
+ }
+ }
+}
+
+void Interface_SetSceneRestrictions(PlayState* play) {
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ s16 i = 0;
+ u8 currentScene;
+
+ do {
+ currentScene = (u8)play->sceneId;
+ if (currentScene == sRestrictionFlags[i].scene) {
+ interfaceCtx->restrictions.hGauge = RESTRICTIONS_GET_HGAUGE(&sRestrictionFlags[i]);
+ interfaceCtx->restrictions.bButton = RESTRICTIONS_GET_B_BUTTON(&sRestrictionFlags[i]);
+ interfaceCtx->restrictions.aButton = RESTRICTIONS_GET_A_BUTTON(&sRestrictionFlags[i]);
+ interfaceCtx->restrictions.tradeItems = RESTRICTIONS_GET_TRADE_ITEMS(&sRestrictionFlags[i]);
+ interfaceCtx->restrictions.songOfTime = RESTRICTIONS_GET_SONG_OF_TIME(&sRestrictionFlags[i]);
+ interfaceCtx->restrictions.songOfDoubleTime = RESTRICTIONS_GET_SONG_OF_DOUBLE_TIME(&sRestrictionFlags[i]);
+ interfaceCtx->restrictions.invSongOfTime = RESTRICTIONS_GET_INV_SONG_OF_TIME(&sRestrictionFlags[i]);
+ interfaceCtx->restrictions.songOfSoaring = RESTRICTIONS_GET_SONG_OF_SOARING(&sRestrictionFlags[i]);
+ interfaceCtx->restrictions.songOfStorms = RESTRICTIONS_GET_SONG_OF_STORMS(&sRestrictionFlags[i]);
+ interfaceCtx->restrictions.masks = RESTRICTIONS_GET_MASKS(&sRestrictionFlags[i]);
+ interfaceCtx->restrictions.pictoBox = RESTRICTIONS_GET_PICTO_BOX(&sRestrictionFlags[i]);
+ interfaceCtx->restrictions.all = RESTRICTIONS_GET_ALL(&sRestrictionFlags[i]);
+ break;
+ }
+ i++;
+ } while (sRestrictionFlags[i].scene != RESTRICTIONS_TABLE_END);
+}
+
+void Interface_Noop(void) {
+}
+
+void Interface_InitMinigame(PlayState* play) {
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+
+ gSaveContext.minigameStatus = MINIGAME_STATUS_ACTIVE;
+ gSaveContext.minigameScore = 0;
+ gSaveContext.minigameHiddenScore = 0;
+
+ sHBAScoreTier = 0;
+ interfaceCtx->minigamePoints = interfaceCtx->minigameHiddenPoints = interfaceCtx->minigameUnusedPoints = 0;
+
+ interfaceCtx->minigameAmmo = 20;
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/Interface_LoadItemIconImpl.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/Interface_LoadItemIcon.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80112C0C.s")
+/**
+ * @param play PlayState
+ * @param flag 0 for default update, 1 for simplified update
+ */
+void Interface_UpdateButtonsAlt(PlayState* play, u16 flag) {
+ if (flag) {
+ if ((BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_BOW) ||
+ (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_BOMB) ||
+ (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_BOMBCHU) ||
+ (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_FISHING_ROD) ||
+ (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED)) {
+ if ((BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_BOW) ||
+ (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_BOMB) ||
+ (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_BOMBCHU) ||
+ (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_FISHING_ROD)) {
+ BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = gSaveContext.buttonStatus[EQUIP_SLOT_B];
+ Interface_LoadItemIconImpl(play, EQUIP_SLOT_B);
+ }
+ } else if (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_NONE) {
+ if (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_NONE) {
+ BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = gSaveContext.buttonStatus[EQUIP_SLOT_B];
+ Interface_LoadItemIconImpl(play, EQUIP_SLOT_B);
+ }
+ }
+
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] =
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
+ Interface_SetHudVisibility(HUD_VISIBILITY_ALL_NO_MINIMAP_W_DISABLED);
+ } else {
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] =
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
+ Interface_UpdateButtonsPart1(play);
+ }
+}
s16 sAmmoRefillCounts[] = { 5, 10, 20, 30 }; // Sticks, nuts, bombs
s16 sArrowRefillCounts[] = { 10, 30, 40, 50 };
@@ -1172,7 +2610,9 @@ u8 Item_Give(PlayState* play, u8 item) {
}
if (item == ITEM_SKULL_TOKEN) {
- SET_QUEST_ITEM(item - ITEM_SKULL_TOKEN + QUEST_SKULL_TOKEN);
+ //! @bug: Sets QUEST_QUIVER instead of QUEST_SKULL_TOKEN
+ // Setting `QUEST_SKULL_TOKEN` will result in misplaced digits on the pause menu - Quest Status page.
+ SET_QUEST_ITEM(item - ITEM_SKULL_TOKEN + QUEST_QUIVER);
Inventory_IncrementSkullTokenCount(play->sceneId);
return ITEM_NONE;
@@ -1187,14 +2627,14 @@ u8 Item_Give(PlayState* play, u8 item) {
INCREMENT_QUEST_HEART_PIECE_COUNT;
if (EQ_MAX_QUEST_HEART_PIECE_COUNT) {
RESET_HEART_PIECE_COUNT;
- gSaveContext.save.playerData.healthCapacity += 0x10;
- gSaveContext.save.playerData.health += 0x10;
+ gSaveContext.save.saveInfo.playerData.healthCapacity += 0x10;
+ gSaveContext.save.saveInfo.playerData.health += 0x10;
}
return ITEM_NONE;
} else if (item == ITEM_HEART_CONTAINER) {
- gSaveContext.save.playerData.healthCapacity += 0x10;
- gSaveContext.save.playerData.health += 0x10;
+ gSaveContext.save.saveInfo.playerData.healthCapacity += 0x10;
+ gSaveContext.save.saveInfo.playerData.health += 0x10;
return ITEM_NONE;
} else if ((item >= ITEM_SONG_SONATA) && (item <= ITEM_SONG_LULLABY_INTRO)) {
@@ -1203,10 +2643,10 @@ u8 Item_Give(PlayState* play, u8 item) {
} else if ((item >= ITEM_SWORD_KOKIRI) && (item <= ITEM_SWORD_GILDED)) {
SET_EQUIP_VALUE(EQUIP_TYPE_SWORD, item - ITEM_SWORD_KOKIRI + EQUIP_VALUE_SWORD_KOKIRI);
- BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = item;
+ CUR_FORM_EQUIP(EQUIP_SLOT_B) = item;
Interface_LoadItemIconImpl(play, EQUIP_SLOT_B);
if (item == ITEM_SWORD_RAZOR) {
- gSaveContext.save.playerData.swordHealth = 100;
+ gSaveContext.save.saveInfo.playerData.swordHealth = 100;
}
return ITEM_NONE;
@@ -1384,7 +2824,7 @@ u8 Item_Give(PlayState* play, u8 item) {
return ITEM_NONE;
} else if ((item >= ITEM_BOMBS_5) && (item <= ITEM_BOMBS_30)) {
- if (gSaveContext.save.inventory.items[SLOT_BOMB] != ITEM_BOMB) {
+ if (gSaveContext.save.saveInfo.inventory.items[SLOT_BOMB] != ITEM_BOMB) {
INV_CONTENT(ITEM_BOMB) = ITEM_BOMB;
AMMO(ITEM_BOMB) += sAmmoRefillCounts[item - ITEM_BOMBS_5];
return ITEM_NONE;
@@ -1407,7 +2847,7 @@ u8 Item_Give(PlayState* play, u8 item) {
return ITEM_NONE;
} else if ((item >= ITEM_BOMBCHUS_20) && (item <= ITEM_BOMBCHUS_5)) {
- if (gSaveContext.save.inventory.items[SLOT_BOMBCHU] != ITEM_BOMBCHU) {
+ if (gSaveContext.save.saveInfo.inventory.items[SLOT_BOMBCHU] != ITEM_BOMBCHU) {
INV_CONTENT(ITEM_BOMBCHU) = ITEM_BOMBCHU;
AMMO(ITEM_BOMBCHU) += sBombchuRefillCounts[item - ITEM_BOMBCHUS_20];
@@ -1446,7 +2886,7 @@ u8 Item_Give(PlayState* play, u8 item) {
return ITEM_NONE;
} else if ((item >= ITEM_REMAINS_ODOLWA) && (item <= ITEM_REMAINS_TWINMOLD)) {
- SET_QUEST_ITEM(item - ITEM_REMAINS_ODOLWA + QUEST_REMAINS_ODOWLA);
+ SET_QUEST_ITEM(item - ITEM_REMAINS_ODOLWA + QUEST_REMAINS_ODOLWA);
return ITEM_NONE;
} else if (item == ITEM_RECOVERY_HEART) {
@@ -1455,16 +2895,16 @@ u8 Item_Give(PlayState* play, u8 item) {
} else if (item == ITEM_MAGIC_SMALL) {
Magic_Add(play, MAGIC_NORMAL_METER / 2);
- if (!(gSaveContext.save.weekEventReg[12] & 0x80)) {
- gSaveContext.save.weekEventReg[12] |= 0x80;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_80)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_12_80);
return ITEM_NONE;
}
return item;
} else if (item == ITEM_MAGIC_LARGE) {
Magic_Add(play, MAGIC_NORMAL_METER);
- if (!(gSaveContext.save.weekEventReg[12] & 0x80)) {
- gSaveContext.save.weekEventReg[12] |= 0x80;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_80)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_12_80);
return ITEM_NONE;
}
return item;
@@ -1477,8 +2917,8 @@ u8 Item_Give(PlayState* play, u8 item) {
slot = SLOT(item);
for (i = BOTTLE_FIRST; i < BOTTLE_MAX; i++) {
- if (gSaveContext.save.inventory.items[slot + i] == ITEM_NONE) {
- gSaveContext.save.inventory.items[slot + i] = ITEM_POTION_RED;
+ if (gSaveContext.save.saveInfo.inventory.items[slot + i] == ITEM_NONE) {
+ gSaveContext.save.saveInfo.inventory.items[slot + i] = ITEM_POTION_RED;
return ITEM_NONE;
}
}
@@ -1489,8 +2929,8 @@ u8 Item_Give(PlayState* play, u8 item) {
slot = SLOT(item);
for (i = BOTTLE_FIRST; i < BOTTLE_MAX; i++) {
- if (gSaveContext.save.inventory.items[slot + i] == ITEM_NONE) {
- gSaveContext.save.inventory.items[slot + i] = item;
+ if (gSaveContext.save.saveInfo.inventory.items[slot + i] == ITEM_NONE) {
+ gSaveContext.save.saveInfo.inventory.items[slot + i] = item;
return ITEM_NONE;
}
}
@@ -1500,8 +2940,8 @@ u8 Item_Give(PlayState* play, u8 item) {
slot = SLOT(item);
for (i = BOTTLE_FIRST; i < BOTTLE_MAX; i++) {
- if (gSaveContext.save.inventory.items[slot + i] == ITEM_NONE) {
- gSaveContext.save.inventory.items[slot + i] = item;
+ if (gSaveContext.save.saveInfo.inventory.items[slot + i] == ITEM_NONE) {
+ gSaveContext.save.saveInfo.inventory.items[slot + i] = item;
return ITEM_NONE;
}
}
@@ -1531,7 +2971,7 @@ u8 Item_Give(PlayState* play, u8 item) {
slot = SLOT(item);
for (i = BOTTLE_FIRST; i < BOTTLE_MAX; i++) {
- if (gSaveContext.save.inventory.items[slot + i] == ITEM_BOTTLE) {
+ if (gSaveContext.save.saveInfo.inventory.items[slot + i] == ITEM_BOTTLE) {
if (item == ITEM_HOT_SPRING_WATER) {
Interface_StartBottleTimer(60, i);
}
@@ -1550,14 +2990,14 @@ u8 Item_Give(PlayState* play, u8 item) {
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_ENABLED;
}
- gSaveContext.save.inventory.items[slot + i] = item;
+ gSaveContext.save.saveInfo.inventory.items[slot + i] = item;
return ITEM_NONE;
}
}
} else {
for (i = BOTTLE_FIRST; i < BOTTLE_MAX; i++) {
- if (gSaveContext.save.inventory.items[slot + i] == ITEM_NONE) {
- gSaveContext.save.inventory.items[slot + i] = item;
+ if (gSaveContext.save.saveInfo.inventory.items[slot + i] == ITEM_NONE) {
+ gSaveContext.save.saveInfo.inventory.items[slot + i] = item;
return ITEM_NONE;
}
}
@@ -1578,7 +3018,7 @@ u8 Item_Give(PlayState* play, u8 item) {
return ITEM_NONE;
}
- temp = gSaveContext.save.inventory.items[slot];
+ temp = gSaveContext.save.saveInfo.inventory.items[slot];
INV_CONTENT(item) = item;
return temp;
}
@@ -1674,7 +3114,7 @@ u8 Item_CheckObtainabilityImpl(u8 item) {
return ITEM_RECOVERY_HEART;
} else if ((item == ITEM_MAGIC_SMALL) || (item == ITEM_MAGIC_LARGE)) {
- if (!(gSaveContext.save.weekEventReg[12] & 0x80)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_80)) {
return ITEM_NONE;
}
return item;
@@ -1719,13 +3159,13 @@ u8 Item_CheckObtainabilityImpl(u8 item) {
bottleSlot = SLOT(item);
for (i = BOTTLE_FIRST; i < BOTTLE_MAX; i++) {
- if (gSaveContext.save.inventory.items[bottleSlot + i] == ITEM_BOTTLE) {
+ if (gSaveContext.save.saveInfo.inventory.items[bottleSlot + i] == ITEM_BOTTLE) {
return ITEM_NONE;
}
}
} else {
for (i = BOTTLE_FIRST; i < BOTTLE_MAX; i++) {
- if (gSaveContext.save.inventory.items[bottleSlot + i] == ITEM_NONE) {
+ if (gSaveContext.save.saveInfo.inventory.items[bottleSlot + i] == ITEM_NONE) {
return ITEM_NONE;
}
}
@@ -1734,7 +3174,7 @@ u8 Item_CheckObtainabilityImpl(u8 item) {
return ITEM_NONE;
}
- return gSaveContext.save.inventory.items[slot];
+ return gSaveContext.save.saveInfo.inventory.items[slot];
}
u8 Item_CheckObtainability(u8 item) {
@@ -1744,7 +3184,7 @@ u8 Item_CheckObtainability(u8 item) {
void Inventory_DeleteItem(s16 item, s16 slot) {
s16 btn;
- gSaveContext.save.inventory.items[slot] = ITEM_NONE;
+ gSaveContext.save.saveInfo.inventory.items[slot] = ITEM_NONE;
for (btn = EQUIP_SLOT_C_LEFT; btn <= EQUIP_SLOT_C_RIGHT; btn++) {
if (GET_CUR_FORM_BTN_ITEM(btn) == item) {
@@ -1769,8 +3209,8 @@ s32 Inventory_ReplaceItem(PlayState* play, u8 oldItem, u8 newItem) {
u8 i;
for (i = 0; i < 24; i++) {
- if (gSaveContext.save.inventory.items[i] == oldItem) {
- gSaveContext.save.inventory.items[i] = newItem;
+ if (gSaveContext.save.saveInfo.inventory.items[i] == oldItem) {
+ gSaveContext.save.saveInfo.inventory.items[i] = newItem;
for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
if (GET_CUR_FORM_BTN_ITEM(i) == oldItem) {
@@ -1797,12 +3237,12 @@ void Inventory_UpdateDeitySwordEquip(PlayState* play) {
if ((((gSaveContext.save.playerForm > 0) && (gSaveContext.save.playerForm < 4))
? 1
: gSaveContext.save.playerForm >> 1) == 0) {
- BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_SWORD_DEITY;
- } else if (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_SWORD_DEITY) {
+ CUR_FORM_EQUIP(EQUIP_SLOT_B) = ITEM_SWORD_DEITY;
+ } else if (CUR_FORM_EQUIP(EQUIP_SLOT_B) == ITEM_SWORD_DEITY) {
if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) == EQUIP_VALUE_SWORD_NONE) {
- BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_NONE;
+ CUR_FORM_EQUIP(EQUIP_SLOT_B) = ITEM_NONE;
} else {
- BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) =
+ CUR_FORM_EQUIP(EQUIP_SLOT_B) =
GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) - EQUIP_VALUE_SWORD_KOKIRI + ITEM_SWORD_KOKIRI;
}
}
@@ -1819,7 +3259,7 @@ s32 Inventory_HasEmptyBottle(void) {
s32 slot;
for (slot = SLOT_BOTTLE_1; slot <= SLOT_BOTTLE_6; slot++) {
- if (gSaveContext.save.inventory.items[slot] == ITEM_BOTTLE) {
+ if (gSaveContext.save.saveInfo.inventory.items[slot] == ITEM_BOTTLE) {
return true;
}
}
@@ -1830,7 +3270,7 @@ s32 Inventory_HasItemInBottle(u8 item) {
s32 slot;
for (slot = SLOT_BOTTLE_1; slot <= SLOT_BOTTLE_6; slot++) {
- if (gSaveContext.save.inventory.items[slot] == item) {
+ if (gSaveContext.save.saveInfo.inventory.items[slot] == item) {
return true;
}
}
@@ -1838,7 +3278,7 @@ s32 Inventory_HasItemInBottle(u8 item) {
}
void Inventory_UpdateBottleItem(PlayState* play, u8 item, u8 btn) {
- gSaveContext.save.inventory.items[GET_CUR_FORM_BTN_SLOT(btn)] = item;
+ gSaveContext.save.saveInfo.inventory.items[GET_CUR_FORM_BTN_SLOT(btn)] = item;
SET_CUR_FORM_BTN_ITEM(btn, item);
Interface_LoadItemIconImpl(play, btn);
@@ -1857,7 +3297,7 @@ s32 Inventory_ConsumeFairy(PlayState* play) {
u8 i;
for (i = BOTTLE_FIRST; i < BOTTLE_MAX; i++) {
- if (gSaveContext.save.inventory.items[bottleSlot + i] == ITEM_FAIRY) {
+ if (gSaveContext.save.saveInfo.inventory.items[bottleSlot + i] == ITEM_FAIRY) {
for (btn = EQUIP_SLOT_C_LEFT; btn <= EQUIP_SLOT_C_RIGHT; btn++) {
if (GET_CUR_FORM_BTN_ITEM(btn) == ITEM_FAIRY) {
SET_CUR_FORM_BTN_ITEM(btn, ITEM_BOTTLE);
@@ -1867,7 +3307,7 @@ s32 Inventory_ConsumeFairy(PlayState* play) {
break;
}
}
- gSaveContext.save.inventory.items[bottleSlot + i] = ITEM_BOTTLE;
+ gSaveContext.save.saveInfo.inventory.items[bottleSlot + i] = ITEM_BOTTLE;
return true;
}
}
@@ -1881,7 +3321,7 @@ s32 Inventory_ConsumeFairy(PlayState* play) {
void Inventory_UpdateItem(PlayState* play, s16 slot, s16 item) {
s16 btn;
- gSaveContext.save.inventory.items[slot] = item;
+ gSaveContext.save.saveInfo.inventory.items[slot] = item;
for (btn = EQUIP_SLOT_C_LEFT; btn <= EQUIP_SLOT_C_RIGHT; btn++) {
if (GET_CUR_FORM_BTN_SLOT(btn) == slot) {
@@ -1898,6 +3338,7 @@ TexturePtr sDoActionTextures[] = {
gDoActionCheckENGTex,
};
+void func_80115428(InterfaceContext* interfaceCtx, u16 doAction, s16 loadOffset);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80115428.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8011552C.s")
@@ -1914,18 +3355,19 @@ TexturePtr sDoActionTextures[] = {
s32 Health_ChangeBy(PlayState* play, s16 healthChange) {
if (healthChange > 0) {
play_sound(NA_SE_SY_HP_RECOVER);
- } else if (gSaveContext.save.playerData.doubleDefense && (healthChange < 0)) {
+ } else if (gSaveContext.save.saveInfo.playerData.doubleDefense && (healthChange < 0)) {
healthChange >>= 1;
}
- gSaveContext.save.playerData.health += healthChange;
+ gSaveContext.save.saveInfo.playerData.health += healthChange;
- if (((void)0, gSaveContext.save.playerData.health) > ((void)0, gSaveContext.save.playerData.healthCapacity)) {
- gSaveContext.save.playerData.health = gSaveContext.save.playerData.healthCapacity;
+ if (((void)0, gSaveContext.save.saveInfo.playerData.health) >
+ ((void)0, gSaveContext.save.saveInfo.playerData.healthCapacity)) {
+ gSaveContext.save.saveInfo.playerData.health = gSaveContext.save.saveInfo.playerData.healthCapacity;
}
- if (gSaveContext.save.playerData.health <= 0) {
- gSaveContext.save.playerData.health = 0;
+ if (gSaveContext.save.saveInfo.playerData.health <= 0) {
+ gSaveContext.save.saveInfo.playerData.health = 0;
return false;
} else {
return true;
@@ -1933,7 +3375,7 @@ s32 Health_ChangeBy(PlayState* play, s16 healthChange) {
}
void Health_GiveHearts(s16 hearts) {
- gSaveContext.save.playerData.healthCapacity += hearts * 0x10;
+ gSaveContext.save.saveInfo.playerData.healthCapacity += hearts * 0x10;
}
void Rupees_ChangeBy(s16 rupeeChange) {
@@ -2000,7 +3442,7 @@ void Inventory_ChangeAmmo(s16 item, s16 ammoChange) {
}
void Magic_Add(PlayState* play, s16 magicToAdd) {
- if (((void)0, gSaveContext.save.playerData.magic) < ((void)0, gSaveContext.magicCapacity)) {
+ if (((void)0, gSaveContext.save.saveInfo.playerData.magic) < ((void)0, gSaveContext.magicCapacity)) {
gSaveContext.magicToAdd += magicToAdd;
gSaveContext.isMagicRequested = true;
}
@@ -2024,12 +3466,12 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) {
InterfaceContext* interfaceCtx = &play->interfaceCtx;
// Magic is not acquired yet
- if (!gSaveContext.save.playerData.isMagicAcquired) {
+ if (!gSaveContext.save.saveInfo.playerData.isMagicAcquired) {
return false;
}
// Not enough magic available to consume
- if ((gSaveContext.save.playerData.magic - magicToConsume) < 0) {
+ if ((gSaveContext.save.saveInfo.playerData.magic - magicToConsume) < 0) {
if (gSaveContext.magicCapacity != 0) {
play_sound(NA_SE_SY_ERROR);
}
@@ -2045,8 +3487,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) {
if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) {
play->actorCtx.lensActive = false;
}
- if (gSaveContext.save.weekEventReg[14] & 8) {
- // Drank Chateau Romani
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) {
magicToConsume = 0;
}
gSaveContext.magicToConsume = magicToConsume;
@@ -2065,8 +3506,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) {
if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) {
play->actorCtx.lensActive = false;
}
- if (gSaveContext.save.weekEventReg[14] & 8) {
- // Drank Chateau Romani
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) {
magicToConsume = 0;
}
gSaveContext.magicToConsume = magicToConsume;
@@ -2079,7 +3519,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) {
case MAGIC_CONSUME_LENS:
if (gSaveContext.magicState == MAGIC_STATE_IDLE) {
- if (gSaveContext.save.playerData.magic != 0) {
+ if (gSaveContext.save.saveInfo.playerData.magic != 0) {
interfaceCtx->magicConsumptionTimer = 80;
gSaveContext.magicState = MAGIC_STATE_CONSUME_LENS;
return true;
@@ -2110,7 +3550,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) {
case MAGIC_CONSUME_GORON_ZORA:
// Goron spiked rolling or Zora electric barrier
- if (gSaveContext.save.playerData.magic != 0) {
+ if (gSaveContext.save.saveInfo.playerData.magic != 0) {
interfaceCtx->magicConsumptionTimer = 10;
gSaveContext.magicState = MAGIC_STATE_CONSUME_GORON_ZORA_SETUP;
return true;
@@ -2121,7 +3561,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) {
case MAGIC_CONSUME_GIANTS_MASK:
// Wearing Giant's Mask
if (gSaveContext.magicState == MAGIC_STATE_IDLE) {
- if (gSaveContext.save.playerData.magic != 0) {
+ if (gSaveContext.save.saveInfo.playerData.magic != 0) {
interfaceCtx->magicConsumptionTimer = R_MAGIC_CONSUME_TIMER_GIANTS_MASK;
gSaveContext.magicState = MAGIC_STATE_CONSUME_GIANTS_MASK;
return true;
@@ -2142,11 +3582,10 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) {
if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) {
play->actorCtx.lensActive = false;
}
- if (gSaveContext.save.weekEventReg[14] & 8) {
- // Drank Chateau Romani
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) {
magicToConsume = 0;
}
- gSaveContext.save.playerData.magic -= magicToConsume;
+ gSaveContext.save.saveInfo.playerData.magic -= magicToConsume;
return true;
} else {
play_sound(NA_SE_SY_ERROR);
@@ -2159,11 +3598,11 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) {
void Magic_UpdateAddRequest(void) {
if (gSaveContext.isMagicRequested) {
- gSaveContext.save.playerData.magic += 4;
+ gSaveContext.save.saveInfo.playerData.magic += 4;
play_sound(NA_SE_SY_GAUGE_UP - SFX_FLAG);
- if (((void)0, gSaveContext.save.playerData.magic) >= ((void)0, gSaveContext.magicCapacity)) {
- gSaveContext.save.playerData.magic = gSaveContext.magicCapacity;
+ if (((void)0, gSaveContext.save.saveInfo.playerData.magic) >= ((void)0, gSaveContext.magicCapacity)) {
+ gSaveContext.save.saveInfo.playerData.magic = gSaveContext.magicCapacity;
gSaveContext.magicToAdd = 0;
gSaveContext.isMagicRequested = false;
} else {
@@ -2231,8 +3670,7 @@ void Magic_Update(PlayState* play) {
InterfaceContext* interfaceCtx = &play->interfaceCtx;
s16 magicCapacityTarget;
- if (gSaveContext.save.weekEventReg[14] & 8) {
- // Drank Chateau Romani
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) {
Magic_FlashMeterBorder();
}
@@ -2240,7 +3678,7 @@ void Magic_Update(PlayState* play) {
case MAGIC_STATE_STEP_CAPACITY:
// Step magicCapacity to the capacity determined by magicLevel
// This changes the width of the magic meter drawn
- magicCapacityTarget = gSaveContext.save.playerData.magicLevel * MAGIC_NORMAL_METER;
+ magicCapacityTarget = gSaveContext.save.saveInfo.playerData.magicLevel * MAGIC_NORMAL_METER;
if (gSaveContext.magicCapacity != magicCapacityTarget) {
if (gSaveContext.magicCapacity < magicCapacityTarget) {
gSaveContext.magicCapacity += 0x10;
@@ -2262,14 +3700,14 @@ void Magic_Update(PlayState* play) {
case MAGIC_STATE_FILL:
// Add magic until magicFillTarget is reached
- gSaveContext.save.playerData.magic += 0x10;
+ gSaveContext.save.saveInfo.playerData.magic += 0x10;
- if ((gSaveContext.gameMode == 0) && (gSaveContext.sceneLayer < 4)) {
+ if ((gSaveContext.gameMode == GAMEMODE_NORMAL) && (gSaveContext.sceneLayer < 4)) {
play_sound(NA_SE_SY_GAUGE_UP - SFX_FLAG);
}
- if (((void)0, gSaveContext.save.playerData.magic) >= ((void)0, gSaveContext.magicFillTarget)) {
- gSaveContext.save.playerData.magic = gSaveContext.magicFillTarget;
+ if (((void)0, gSaveContext.save.saveInfo.playerData.magic) >= ((void)0, gSaveContext.magicFillTarget)) {
+ gSaveContext.save.saveInfo.playerData.magic = gSaveContext.magicFillTarget;
gSaveContext.magicState = MAGIC_STATE_IDLE;
}
break;
@@ -2282,11 +3720,11 @@ void Magic_Update(PlayState* play) {
case MAGIC_STATE_CONSUME:
// Consume magic until target is reached or no more magic is available
- if (!(gSaveContext.save.weekEventReg[14] & 8)) {
- gSaveContext.save.playerData.magic =
- ((void)0, gSaveContext.save.playerData.magic) - ((void)0, gSaveContext.magicToConsume);
- if (gSaveContext.save.playerData.magic <= 0) {
- gSaveContext.save.playerData.magic = 0;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) {
+ gSaveContext.save.saveInfo.playerData.magic =
+ ((void)0, gSaveContext.save.saveInfo.playerData.magic) - ((void)0, gSaveContext.magicToConsume);
+ if (gSaveContext.save.saveInfo.playerData.magic <= 0) {
+ gSaveContext.save.saveInfo.playerData.magic = 0;
}
gSaveContext.magicState = MAGIC_STATE_METER_FLASH_1;
sMagicMeterOutlinePrimRed = sMagicMeterOutlinePrimGreen = sMagicMeterOutlinePrimBlue = 255;
@@ -2295,7 +3733,7 @@ void Magic_Update(PlayState* play) {
case MAGIC_STATE_METER_FLASH_1:
case MAGIC_STATE_METER_FLASH_2:
case MAGIC_STATE_METER_FLASH_3:
- if (!(gSaveContext.save.weekEventReg[14] & 8)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) {
Magic_FlashMeterBorder();
}
break;
@@ -2307,14 +3745,14 @@ void Magic_Update(PlayState* play) {
case MAGIC_STATE_CONSUME_LENS:
// Slowly consume magic while Lens of Truth is active
- if ((play->pauseCtx.state == 0) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) &&
+ if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) &&
(msgCtx->msgMode == 0) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) &&
(play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF) &&
!Play_InCsMode(play)) {
- if ((gSaveContext.save.playerData.magic == 0) ||
- ((Player_GetEnvTimerType(play) >= PLAYER_ENV_TIMER_UNDERWATER_FLOOR) &&
- (Player_GetEnvTimerType(play) <= PLAYER_ENV_TIMER_UNDERWATER_FREE)) ||
+ if ((gSaveContext.save.saveInfo.playerData.magic == 0) ||
+ ((Player_GetEnvironmentalHazard(play) >= PLAYER_ENV_HAZARD_UNDERWATER_FLOOR) &&
+ (Player_GetEnvironmentalHazard(play) <= PLAYER_ENV_HAZARD_UNDERWATER_FREE)) ||
((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) != ITEM_LENS) &&
(BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) != ITEM_LENS) &&
(BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) != ITEM_LENS)) ||
@@ -2329,66 +3767,66 @@ void Magic_Update(PlayState* play) {
interfaceCtx->magicConsumptionTimer--;
if (interfaceCtx->magicConsumptionTimer == 0) {
- if (!(gSaveContext.save.weekEventReg[14] & 8)) {
- gSaveContext.save.playerData.magic--;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) {
+ gSaveContext.save.saveInfo.playerData.magic--;
}
interfaceCtx->magicConsumptionTimer = 80;
}
}
- if (!(gSaveContext.save.weekEventReg[14] & 8)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) {
Magic_FlashMeterBorder();
}
break;
case MAGIC_STATE_CONSUME_GORON_ZORA_SETUP:
- if (!(gSaveContext.save.weekEventReg[14] & 8)) {
- gSaveContext.save.playerData.magic -= 2;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) {
+ gSaveContext.save.saveInfo.playerData.magic -= 2;
}
- if (gSaveContext.save.playerData.magic <= 0) {
- gSaveContext.save.playerData.magic = 0;
+ if (gSaveContext.save.saveInfo.playerData.magic <= 0) {
+ gSaveContext.save.saveInfo.playerData.magic = 0;
}
gSaveContext.magicState = MAGIC_STATE_CONSUME_GORON_ZORA;
// fallthrough
case MAGIC_STATE_CONSUME_GORON_ZORA:
- if ((play->pauseCtx.state == 0) && (play->pauseCtx.debugEditor == 0) && (msgCtx->msgMode == 0) &&
- (play->gameOverCtx.state == GAMEOVER_INACTIVE) && (play->transitionTrigger == TRANS_TRIGGER_OFF) &&
- (play->transitionMode == TRANS_MODE_OFF)) {
- if (!Play_InCsMode(play)) {
- interfaceCtx->magicConsumptionTimer--;
- if (interfaceCtx->magicConsumptionTimer == 0) {
- if (!(gSaveContext.save.weekEventReg[14] & 8)) {
- gSaveContext.save.playerData.magic--;
- }
- if (gSaveContext.save.playerData.magic <= 0) {
- gSaveContext.save.playerData.magic = 0;
- }
- interfaceCtx->magicConsumptionTimer = 10;
- }
- }
- }
- if (!(gSaveContext.save.weekEventReg[14] & 8)) {
- Magic_FlashMeterBorder();
- }
- break;
-
- case MAGIC_STATE_CONSUME_GIANTS_MASK:
- if ((play->pauseCtx.state == 0) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) &&
+ if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == 0) &&
(msgCtx->msgMode == 0) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) &&
(play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF)) {
if (!Play_InCsMode(play)) {
interfaceCtx->magicConsumptionTimer--;
if (interfaceCtx->magicConsumptionTimer == 0) {
- if (!(gSaveContext.save.weekEventReg[14] & 8)) {
- gSaveContext.save.playerData.magic--;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) {
+ gSaveContext.save.saveInfo.playerData.magic--;
}
- if (gSaveContext.save.playerData.magic <= 0) {
- gSaveContext.save.playerData.magic = 0;
+ if (gSaveContext.save.saveInfo.playerData.magic <= 0) {
+ gSaveContext.save.saveInfo.playerData.magic = 0;
+ }
+ interfaceCtx->magicConsumptionTimer = 10;
+ }
+ }
+ }
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) {
+ Magic_FlashMeterBorder();
+ }
+ break;
+
+ case MAGIC_STATE_CONSUME_GIANTS_MASK:
+ if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) &&
+ (msgCtx->msgMode == 0) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) &&
+ (play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF)) {
+ if (!Play_InCsMode(play)) {
+ interfaceCtx->magicConsumptionTimer--;
+ if (interfaceCtx->magicConsumptionTimer == 0) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) {
+ gSaveContext.save.saveInfo.playerData.magic--;
+ }
+ if (gSaveContext.save.saveInfo.playerData.magic <= 0) {
+ gSaveContext.save.saveInfo.playerData.magic = 0;
}
interfaceCtx->magicConsumptionTimer = R_MAGIC_CONSUME_TIMER_GIANTS_MASK;
}
}
}
- if (!(gSaveContext.save.weekEventReg[14] & 8)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) {
Magic_FlashMeterBorder();
}
break;
@@ -2405,8 +3843,8 @@ void Magic_DrawMeter(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- if (gSaveContext.save.playerData.magicLevel != 0) {
- if (gSaveContext.save.playerData.healthCapacity > 0xA0) {
+ if (gSaveContext.save.saveInfo.playerData.magicLevel != 0) {
+ if (gSaveContext.save.saveInfo.playerData.healthCapacity > 0xA0) {
magicBarY = 42; // two rows of hearts
} else {
magicBarY = 34; // one row of hearts
@@ -2416,17 +3854,17 @@ void Magic_DrawMeter(PlayState* play) {
gDPSetEnvColor(OVERLAY_DISP++, 100, 50, 50, 255);
- OVERLAY_DISP = func_8010CFBC(OVERLAY_DISP, gMagicMeterEndTex, 8, 16, 18, magicBarY, 8, 16, 1 << 10, 1 << 10,
- sMagicMeterOutlinePrimRed, sMagicMeterOutlinePrimGreen, sMagicMeterOutlinePrimBlue,
- interfaceCtx->magicAlpha);
- OVERLAY_DISP =
- func_8010CFBC(OVERLAY_DISP, gMagicMeterMidTex, 24, 16, 26, magicBarY, ((void)0, gSaveContext.magicCapacity),
- 16, 1 << 10, 1 << 10, sMagicMeterOutlinePrimRed, sMagicMeterOutlinePrimGreen,
- sMagicMeterOutlinePrimBlue, interfaceCtx->magicAlpha);
- OVERLAY_DISP =
- func_8010D480(OVERLAY_DISP, gMagicMeterEndTex, 8, 16, ((void)0, gSaveContext.magicCapacity) + 26, magicBarY,
- 8, 16, 1 << 10, 1 << 10, sMagicMeterOutlinePrimRed, sMagicMeterOutlinePrimGreen,
- sMagicMeterOutlinePrimBlue, interfaceCtx->magicAlpha, 3, 0x100);
+ OVERLAY_DISP = Gfx_DrawTexRectIA8_DropShadow(
+ OVERLAY_DISP, gMagicMeterEndTex, 8, 16, 18, magicBarY, 8, 16, 1 << 10, 1 << 10, sMagicMeterOutlinePrimRed,
+ sMagicMeterOutlinePrimGreen, sMagicMeterOutlinePrimBlue, interfaceCtx->magicAlpha);
+ OVERLAY_DISP = Gfx_DrawTexRectIA8_DropShadow(OVERLAY_DISP, gMagicMeterMidTex, 24, 16, 26, magicBarY,
+ ((void)0, gSaveContext.magicCapacity), 16, 1 << 10, 1 << 10,
+ sMagicMeterOutlinePrimRed, sMagicMeterOutlinePrimGreen,
+ sMagicMeterOutlinePrimBlue, interfaceCtx->magicAlpha);
+ OVERLAY_DISP = Gfx_DrawTexRectIA8_DropShadowOffset(
+ OVERLAY_DISP, gMagicMeterEndTex, 8, 16, ((void)0, gSaveContext.magicCapacity) + 26, magicBarY, 8, 16,
+ 1 << 10, 1 << 10, sMagicMeterOutlinePrimRed, sMagicMeterOutlinePrimGreen, sMagicMeterOutlinePrimBlue,
+ interfaceCtx->magicAlpha, 3, 0x100);
gDPPipeSync(OVERLAY_DISP++);
gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, 0, 0, 0, PRIMITIVE, PRIMITIVE,
@@ -2439,13 +3877,13 @@ void Magic_DrawMeter(PlayState* play) {
gDPLoadTextureBlock_4b(OVERLAY_DISP++, gMagicMeterFillTex, 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);
gSPTextureRectangle(OVERLAY_DISP++, 104, (magicBarY + 3) << 2,
- (((void)0, gSaveContext.save.playerData.magic) + 26) << 2, (magicBarY + 10) << 2,
- G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+ (((void)0, gSaveContext.save.saveInfo.playerData.magic) + 26) << 2,
+ (magicBarY + 10) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
// Fill the rest of the meter with the normal magic color
gDPPipeSync(OVERLAY_DISP++);
- if (gSaveContext.save.weekEventReg[14] & 8) {
- // Blue magic (drank Chateau Romani)
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) {
+ // Blue magic
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 200, interfaceCtx->magicAlpha);
} else {
// Green magic (default)
@@ -2454,12 +3892,13 @@ void Magic_DrawMeter(PlayState* play) {
gSPTextureRectangle(
OVERLAY_DISP++, 104, (magicBarY + 3) << 2,
- ((((void)0, gSaveContext.save.playerData.magic) - ((void)0, gSaveContext.magicToConsume)) + 26) << 2,
+ ((((void)0, gSaveContext.save.saveInfo.playerData.magic) - ((void)0, gSaveContext.magicToConsume)) + 26)
+ << 2,
(magicBarY + 10) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
} else {
// Fill the whole meter with the normal magic color
- if (gSaveContext.save.weekEventReg[14] & 8) {
- // Blue magic (drank Chateau Romani)
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) {
+ // Blue magic
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 200, interfaceCtx->magicAlpha);
} else {
// Green magic (default)
@@ -2469,63 +3908,1053 @@ void Magic_DrawMeter(PlayState* play) {
gDPLoadTextureBlock_4b(OVERLAY_DISP++, gMagicMeterFillTex, 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);
gSPTextureRectangle(OVERLAY_DISP++, 104, (magicBarY + 3) << 2,
- (((void)0, gSaveContext.save.playerData.magic) + 26) << 2, (magicBarY + 10) << 2,
- G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+ (((void)0, gSaveContext.save.saveInfo.playerData.magic) + 26) << 2,
+ (magicBarY + 10) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
}
}
CLOSE_DISPS(play->state.gfxCtx);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80116FD8.s")
+void Interface_SetPerspectiveView(PlayState* play, s32 topY, s32 bottomY, s32 leftX, s32 rightX) {
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ Vec3f eye;
+ Vec3f at;
+ Vec3f up;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_801170B8.s")
+ eye.x = eye.y = eye.z = 0.0f;
+ at.x = at.y = 0.0f;
+ at.z = -1.0f;
+ up.x = up.z = 0.0f;
+ up.y = 1.0f;
-TexturePtr cUpLabelTextures[] = {
- gTatlCUpENGTex, gTatlCUpENGTex, gTatlCUpGERTex, gTatlCUpFRATex, gTatlCUpESPTex,
-};
-s16 startButtonLeftPos[] = {
- // Remnant of OoT
- 130, 136, 136, 136, 136,
-};
-s16 D_801BFAF4[] = { 0x1D, 0x1B };
-s16 D_801BFAF8[] = { 0x1B, 0x1B };
+ View_LookAt(&interfaceCtx->view, &eye, &at, &up);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80117100.s")
+ interfaceCtx->viewport.topY = topY;
+ interfaceCtx->viewport.bottomY = bottomY;
+ interfaceCtx->viewport.leftX = leftX;
+ interfaceCtx->viewport.rightX = rightX;
+ View_SetViewport(&interfaceCtx->view, &interfaceCtx->viewport);
-s16 D_801BFAFC[] = { 30, 24, 24, 24 };
+ View_SetPerspective(&interfaceCtx->view, 60.0f, 10.0f, 60.0f);
+ View_ApplyPerspectiveToOverlay(&interfaceCtx->view);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80117A20.s")
+void Interface_SetOrthoView(InterfaceContext* interfaceCtx) {
+ SET_FULLSCREEN_VIEWPORT(&interfaceCtx->view);
+ View_ApplyOrthoToOverlay(&interfaceCtx->view);
+}
+
+void Interface_DrawItemButtons(PlayState* play) {
+ static TexturePtr cUpLabelTextures[] = {
+ gTatlCUpENGTex, gTatlCUpENGTex, gTatlCUpGERTex, gTatlCUpFRATex, gTatlCUpESPTex,
+ };
+ static s16 startButtonLeftPos[] = {
+ // Remnant of OoT
+ 130, 136, 136, 136, 136,
+ };
+ static s16 D_801BFAF4[] = { 0x1D, 0x1B };
+ static s16 D_801BFAF8[] = { 0x1B, 0x1B };
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ Player* player = GET_PLAYER(play);
+ PauseContext* pauseCtx = &play->pauseCtx;
+ MessageContext* msgCtx = &play->msgCtx;
+ s16 temp; // Used as both an alpha value and a button index
+ s32 pad;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+
+ // B Button Color & Texture
+ 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
+ OVERLAY_DISP = Gfx_DrawRect_DropShadow(OVERLAY_DISP, D_801BF9D4[1], D_801BF9DC[1], D_801BFAF4[1], D_801BFAF4[1],
+ D_801BF9E4[1] * 2, D_801BF9E4[1] * 2, 255, 240, 0, interfaceCtx->cLeftAlpha);
+ // C-Down Button Color & Texture
+ OVERLAY_DISP = Gfx_DrawRect_DropShadow(OVERLAY_DISP, D_801BF9D8[0], D_801BF9E0[0], D_801BFAF8[0], D_801BFAF8[0],
+ D_801BF9E4[2] * 2, D_801BF9E4[2] * 2, 255, 240, 0, interfaceCtx->cDownAlpha);
+ // C-Right Button Color & Texture
+ OVERLAY_DISP =
+ Gfx_DrawRect_DropShadow(OVERLAY_DISP, D_801BF9D8[1], D_801BF9E0[1], D_801BFAF8[1], D_801BFAF8[1],
+ D_801BF9E4[3] * 2, D_801BF9E4[3] * 2, 255, 240, 0, interfaceCtx->cRightAlpha);
+
+ if (!IS_PAUSE_STATE_GAMEOVER) {
+ if ((play->pauseCtx.state != PAUSE_STATE_OFF) || (play->pauseCtx.debugEditor != DEBUG_EDITOR_NONE)) {
+ OVERLAY_DISP = Gfx_DrawRect_DropShadow(OVERLAY_DISP, 0x88, 0x11, 0x16, 0x16, 0x5B6, 0x5B6, 0xFF, 0x82, 0x3C,
+ interfaceCtx->startAlpha);
+ // Start Button Texture, Color & Label
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->startAlpha);
+ gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 0);
+ gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
+ PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ gDPLoadTextureBlock_4b(OVERLAY_DISP++, interfaceCtx->doActionSegment + DO_ACTION_TEX_SIZE * 2, G_IM_FMT_IA,
+ DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_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++, 0x01F8, 0x0054, 0x02D4, 0x009C, G_TX_RENDERTILE, 0, 0, 0x04A6, 0x04A6);
+ }
+ }
+
+ if (interfaceCtx->tatlCalling && (play->pauseCtx.state == PAUSE_STATE_OFF) &&
+ (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) && (play->csCtx.state == CS_STATE_IDLE) &&
+ (sPictoState == PICTO_BOX_STATE_OFF)) {
+ if (sCUpInvisible == 0) {
+ // C-Up Button Texture, Color & Label (Tatl Text)
+ gDPPipeSync(OVERLAY_DISP++);
+
+ if ((gSaveContext.hudVisibility == HUD_VISIBILITY_NONE) ||
+ (gSaveContext.hudVisibility == HUD_VISIBILITY_NONE_ALT) ||
+ (gSaveContext.hudVisibility == HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE) ||
+ (msgCtx->msgMode != 0)) {
+ temp = 0;
+ } else if (player->stateFlags1 & PLAYER_STATE1_200000) {
+ temp = 70;
+ } else {
+ temp = interfaceCtx->aAlpha;
+ }
+
+ OVERLAY_DISP =
+ Gfx_DrawRect_DropShadow(OVERLAY_DISP, 0xFE, 0x10, 0x10, 0x10, 0x800, 0x800, 0xFF, 0xF0, 0, temp);
+
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, temp);
+ gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 0);
+ gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
+ PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ gDPLoadTextureBlock_4b(OVERLAY_DISP++, cUpLabelTextures[gSaveContext.options.language], G_IM_FMT_IA, 32, 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);
+ gSPTextureRectangle(OVERLAY_DISP++, 0x03DC, 0x0048, 0x045C, 0x0078, G_TX_RENDERTILE, 0, 0, 1 << 10,
+ 1 << 10);
+ }
+
+ sCUpTimer--;
+ if (sCUpTimer == 0) {
+ sCUpInvisible ^= 1;
+ sCUpTimer = 10;
+ }
+ }
+
+ gDPPipeSync(OVERLAY_DISP++);
+
+ // Empty C Button Arrows
+ for (temp = EQUIP_SLOT_C_LEFT; temp <= EQUIP_SLOT_C_RIGHT; temp++) {
+ if (GET_CUR_FORM_BTN_ITEM(temp) > 0xF0) {
+ if (temp == EQUIP_SLOT_C_LEFT) {
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 240, 0, interfaceCtx->cLeftAlpha);
+ } else if (temp == EQUIP_SLOT_C_DOWN) {
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 240, 0, interfaceCtx->cDownAlpha);
+ } else { // EQUIP_SLOT_C_RIGHT
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 240, 0, interfaceCtx->cRightAlpha);
+ }
+ OVERLAY_DISP = Gfx_DrawTexRectIA8(OVERLAY_DISP, ((u8*)gButtonBackgroundTex + ((32 * 32) * (temp + 1))),
+ 0x20, 0x20, D_801BF9D4[temp], D_801BF9DC[temp], D_801BFAF4[temp],
+ D_801BFAF4[temp], D_801BF9E4[temp] * 2, D_801BF9E4[temp] * 2);
+ }
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void Interface_DrawItemIconTexture(PlayState* play, TexturePtr texture, s16 button) {
+ static s16 D_801BFAFC[] = { 30, 24, 24, 24 };
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ gDPLoadTextureBlock(OVERLAY_DISP++, texture, 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);
+
+ gSPTextureRectangle(OVERLAY_DISP++, D_801BF9D4[button] << 2, D_801BF9DC[button] << 2,
+ (D_801BF9D4[button] + D_801BFAFC[button]) << 2, (D_801BF9DC[button] + D_801BFAFC[button]) << 2,
+ G_TX_RENDERTILE, 0, 0, D_801BF9BC[button] << 1, D_801BF9BC[button] << 1);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
s16 D_801BFB04[] = { 0xA2, 0xE4, 0xFA, 0x110 };
s16 D_801BFB0C[] = { 0x23, 0x23, 0x33, 0x23 };
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80117BD0.s")
+void Interface_DrawAmmoCount(PlayState* play, s16 button, s16 alpha) {
+ u8 i;
+ u16 ammo;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80118084.s")
+ OPEN_DISPS(play->state.gfxCtx);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80118890.s")
+ i = ((void)0, GET_CUR_FORM_BTN_ITEM(button));
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80118BA4.s")
+ if ((i == ITEM_STICK) || (i == ITEM_NUT) || (i == ITEM_BOMB) || (i == ITEM_BOW) ||
+ ((i >= ITEM_BOW_ARROW_FIRE) && (i <= ITEM_BOW_ARROW_LIGHT)) || (i == ITEM_BOMBCHU) || (i == ITEM_POWDER_KEG) ||
+ (i == ITEM_MAGIC_BEANS) || (i == ITEM_PICTO_BOX)) {
-extern TexturePtr D_08095AC0; // gMagicArrowEquipEffectTex
-s16 D_801BFB14[] = { 255, 100, 255, 0 }; // magicArrowEffectsR
-s16 D_801BFB1C[] = { 0, 100, 255, 0 }; // magicArrowEffectsG
-s16 D_801BFB24[] = { 0, 255, 100, 0 }; // magicArrowEffectsB
+ if ((i >= ITEM_BOW_ARROW_FIRE) && (i <= ITEM_BOW_ARROW_LIGHT)) {
+ i = ITEM_BOW;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80119030.s")
+ ammo = AMMO(i);
-s16 D_801BFB2C = 255;
+ if (i == ITEM_PICTO_BOX) {
+ if (!CHECK_QUEST_ITEM(QUEST_PICTOGRAPH)) {
+ ammo = 0;
+ } else {
+ ammo = 1;
+ }
+ }
+
+ gDPPipeSync(OVERLAY_DISP++);
+
+ if ((button == EQUIP_SLOT_B) && (gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE)) {
+ ammo = play->interfaceCtx.minigameAmmo;
+ } else if ((button == EQUIP_SLOT_B) && (play->unk_1887C > 1)) {
+ ammo = play->unk_1887C - 1;
+ } else if (((i == ITEM_BOW) && (AMMO(i) == CUR_CAPACITY(UPG_QUIVER))) ||
+ ((i == ITEM_BOMB) && (AMMO(i) == CUR_CAPACITY(UPG_BOMB_BAG))) ||
+ ((i == ITEM_STICK) && (AMMO(i) == CUR_CAPACITY(UPG_STICKS))) ||
+ ((i == ITEM_NUT) && (AMMO(i) == CUR_CAPACITY(UPG_NUTS))) ||
+ ((i == ITEM_BOMBCHU) && (AMMO(i) == CUR_CAPACITY(UPG_BOMB_BAG))) ||
+ ((i == ITEM_POWDER_KEG) && (ammo == 1)) || ((i == ITEM_PICTO_BOX) && (ammo == 1)) ||
+ ((i == ITEM_MAGIC_BEANS) && (ammo == 20))) {
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 120, 255, 0, alpha);
+ }
+
+ if ((u32)ammo == 0) {
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 100, 100, 100, alpha);
+ }
+
+ for (i = 0; ammo >= 10; i++) {
+ ammo -= 10;
+ }
+
+ // Draw upper digit (tens)
+ if ((u32)i != 0) {
+ OVERLAY_DISP = Gfx_DrawTexRectIA8(OVERLAY_DISP, ((u8*)gAmmoDigit0Tex + ((8 * 8) * i)), 8, 8,
+ D_801BFB04[button], D_801BFB0C[button], 8, 8, 1 << 10, 1 << 10);
+ }
+
+ // Draw lower digit (ones)
+ OVERLAY_DISP = Gfx_DrawTexRectIA8(OVERLAY_DISP, ((u8*)gAmmoDigit0Tex + ((8 * 8) * ammo)), 8, 8,
+ D_801BFB04[button] + 6, D_801BFB0C[button], 8, 8, 1 << 10, 1 << 10);
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void Interface_DrawBButtonIcons(PlayState* play) {
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ Player* player = GET_PLAYER(play);
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->bAlpha);
+ gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+
+ if ((interfaceCtx->unk_222 == 0) && (player->stateFlags3 & PLAYER_STATE3_1000000)) {
+ if (gSaveContext.buttonStatus[EQUIP_SLOT_B] != BTN_DISABLED) {
+ Interface_DrawItemIconTexture(play, interfaceCtx->iconItemSegment, EQUIP_SLOT_B);
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
+ PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+
+ Interface_DrawAmmoCount(play, EQUIP_SLOT_B, interfaceCtx->bAlpha);
+ }
+ } else if ((!interfaceCtx->unk_21C && (interfaceCtx->unk_222 == 0)) ||
+ ((interfaceCtx->unk_21C &&
+ ((BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) < ITEM_SWORD_KOKIRI) ||
+ (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) > ITEM_SWORD_GILDED)) &&
+ BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_NONE) &&
+ (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_NUT))) {
+ if ((player->transformation == PLAYER_FORM_FIERCE_DEITY) || (player->transformation == PLAYER_FORM_HUMAN)) {
+ if (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_NONE) {
+ Interface_DrawItemIconTexture(play, interfaceCtx->iconItemSegment, EQUIP_SLOT_B);
+ if ((player->stateFlags1 & PLAYER_STATE1_800000) || CHECK_WEEKEVENTREG(WEEKEVENTREG_08_01) ||
+ (play->unk_1887C >= 2)) {
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE,
+ 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+
+ if ((play->sceneId != SCENE_SYATEKI_MIZU) && (play->sceneId != SCENE_SYATEKI_MORI) &&
+ (play->sceneId != SCENE_BOWLING) &&
+ ((gSaveContext.minigameStatus != MINIGAME_STATUS_ACTIVE) ||
+ (gSaveContext.save.entrance != ENTRANCE(ROMANI_RANCH, 0))) &&
+ ((gSaveContext.minigameStatus != MINIGAME_STATUS_ACTIVE) || !(CHECK_EVENTINF(EVENTINF_35))) &&
+ (!CHECK_WEEKEVENTREG(WEEKEVENTREG_31_80) || (play->unk_1887C != 100))) {
+ Interface_DrawAmmoCount(play, EQUIP_SLOT_B, interfaceCtx->bAlpha);
+ }
+ }
+ }
+ }
+ } else if (interfaceCtx->unk_222 != 0) {
+ gDPPipeSync(OVERLAY_DISP++);
+ 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, 255, interfaceCtx->bAlpha);
+ gDPLoadTextureBlock_4b(OVERLAY_DISP++, interfaceCtx->doActionSegment + 0x480, G_IM_FMT_IA, 48, 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);
+
+ D_801BF9B0 = 1024.0f / (D_801BF9B4[gSaveContext.options.language] / 100.0f);
+
+ gSPTextureRectangle(
+ OVERLAY_DISP++, (D_801BF9C4[gSaveContext.options.language] * 4),
+ (D_801BF9C8[gSaveContext.options.language] * 4), ((D_801BF9C4[gSaveContext.options.language] + 0x30) << 2),
+ ((D_801BF9C8[gSaveContext.options.language] + 0x10) << 2), G_TX_RENDERTILE, 0, 0, D_801BF9B0, D_801BF9B0);
+ } else if (interfaceCtx->bButtonDoAction != DO_ACTION_NONE) {
+ gDPPipeSync(OVERLAY_DISP++);
+ 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, 255, interfaceCtx->bAlpha);
+ gDPLoadTextureBlock_4b(OVERLAY_DISP++, interfaceCtx->doActionSegment + 0x600, G_IM_FMT_IA, 48, 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);
+
+ D_801BF9B0 = 1024.0f / (D_801BF9B4[gSaveContext.options.language] / 100.0f);
+
+ gSPTextureRectangle(
+ OVERLAY_DISP++, (D_801BF9C4[gSaveContext.options.language] * 4),
+ (D_801BF9C8[gSaveContext.options.language] * 4), ((D_801BF9C4[gSaveContext.options.language] + 0x30) << 2),
+ ((D_801BF9C8[gSaveContext.options.language] + 0x10) << 2), G_TX_RENDERTILE, 0, 0, D_801BF9B0, D_801BF9B0);
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+/**
+ * Draws the icons and ammo for each of the C buttons
+ */
+void Interface_DrawCButtonIcons(PlayState* play) {
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ gDPPipeSync(OVERLAY_DISP++);
+
+ // C-Left Button Icon & Ammo Count
+ if (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) < ITEM_F0) {
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->cLeftAlpha);
+ gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ Interface_DrawItemIconTexture(play, interfaceCtx->iconItemSegment + 0x1000, EQUIP_SLOT_C_LEFT);
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
+ PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ Interface_DrawAmmoCount(play, EQUIP_SLOT_C_LEFT, interfaceCtx->cLeftAlpha);
+ }
+
+ gDPPipeSync(OVERLAY_DISP++);
+
+ // C-Down Button Icon & Ammo Count
+ if (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) < ITEM_F0) {
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->cDownAlpha);
+ gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ Interface_DrawItemIconTexture(play, interfaceCtx->iconItemSegment + 0x2000, EQUIP_SLOT_C_DOWN);
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
+ PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ Interface_DrawAmmoCount(play, EQUIP_SLOT_C_DOWN, interfaceCtx->cDownAlpha);
+ }
+
+ gDPPipeSync(OVERLAY_DISP++);
+
+ // C-Right Button Icon & Ammo Count
+ if (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) < ITEM_F0) {
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->cRightAlpha);
+ gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ Interface_DrawItemIconTexture(play, interfaceCtx->iconItemSegment + 0x3000, EQUIP_SLOT_C_RIGHT);
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
+ PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ Interface_DrawAmmoCount(play, EQUIP_SLOT_C_RIGHT, interfaceCtx->cRightAlpha);
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void Interface_DrawAButton(PlayState* play) {
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ s16 aAlpha;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ aAlpha = interfaceCtx->aAlpha;
+
+ if (aAlpha > 100) {
+ aAlpha = 100;
+ }
+
+ func_8012C8D4(play->state.gfxCtx);
+
+ Interface_SetPerspectiveView(play, 25 + R_A_BTN_Y_OFFSET, 70 + R_A_BTN_Y_OFFSET, 192, 237);
+
+ gSPClearGeometryMode(OVERLAY_DISP++, G_CULL_BOTH);
+ gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD);
+
+ Matrix_Translate(0.0f, 0.0f, -38.0f, MTXMODE_NEW);
+ Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
+ Matrix_RotateXFApply(interfaceCtx->aButtonRoll / 10000.0f);
+
+ // Draw A button Shadow
+ gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gDPPipeSync(OVERLAY_DISP++);
+ gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[4], 4, 0);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, aAlpha);
+
+ OVERLAY_DISP = Gfx_DrawTexQuadIA8(OVERLAY_DISP, gButtonBackgroundTex, 32, 32, 0);
+
+ // Draw A Button Colored
+ gDPPipeSync(OVERLAY_DISP++);
+ Interface_SetPerspectiveView(play, 23 + R_A_BTN_Y_OFFSET, 68 + R_A_BTN_Y_OFFSET, 190, 235);
+ gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[0], 4, 0);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 100, 200, 255, interfaceCtx->aAlpha);
+ gSP1Quadrangle(OVERLAY_DISP++, 0, 2, 3, 1, 0);
+
+ // Draw A Button Do-Action
+ gDPPipeSync(OVERLAY_DISP++);
+ Interface_SetPerspectiveView(play, 23 + R_A_BTN_Y_OFFSET, 68 + R_A_BTN_Y_OFFSET, 190, 235);
+ gSPSetGeometryMode(OVERLAY_DISP++, G_CULL_BACK);
+ 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, 255, interfaceCtx->aAlpha);
+ gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 0);
+
+ Matrix_Translate(0.0f, 0.0f, D_801BF9CC[gSaveContext.options.language] / 10.0f, MTXMODE_NEW);
+ Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
+ Matrix_RotateXFApply(interfaceCtx->aButtonRoll / 10000.0f);
+ gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[8], 4, 0);
+
+ // Draw Action Label
+ if (((interfaceCtx->aButtonState <= A_BTN_STATE_1) || (interfaceCtx->aButtonState == A_BTN_STATE_3))) {
+ OVERLAY_DISP = Gfx_DrawTexQuad4b(OVERLAY_DISP, interfaceCtx->doActionSegment, 3, DO_ACTION_TEX_WIDTH,
+ DO_ACTION_TEX_HEIGHT, 0);
+ } else {
+ OVERLAY_DISP = Gfx_DrawTexQuad4b(OVERLAY_DISP, interfaceCtx->doActionSegment + DO_ACTION_TEX_SIZE, 3,
+ DO_ACTION_TEX_WIDTH, DO_ACTION_TEX_HEIGHT, 0);
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+static s16 sMagicArrowEffectsR[] = { 255, 100, 255 };
+static s16 sMagicArrowEffectsG[] = { 0, 100, 255 };
+static s16 sMagicArrowEffectsB[] = { 0, 255, 100 };
+
+void Interface_DrawPauseMenuEquippingIcons(PlayState* play) {
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ PauseContext* pauseCtx = &play->pauseCtx;
+ s16 temp;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ gDPPipeSync(OVERLAY_DISP++);
+
+ // This is needed as `Interface_DrawPauseMenuEquippingIcons` is call immediately
+ // after `Interface_DrawAButton`, which sets the view to perspective mode
+ Interface_SetOrthoView(interfaceCtx);
+
+ if ((pauseCtx->state == PAUSE_STATE_MAIN) && ((pauseCtx->mainState == PAUSE_MAIN_STATE_EQUIP_ITEM) ||
+ (pauseCtx->mainState == PAUSE_MAIN_STATE_EQUIP_MASK))) {
+ // Inventory Equip Effects
+ gSPSegment(OVERLAY_DISP++, 0x08, pauseCtx->iconItemSegment);
+ func_8012C8D4(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);
+
+ pauseCtx->cursorVtx[16].v.ob[0] = pauseCtx->cursorVtx[18].v.ob[0] = pauseCtx->equipAnimX / 10;
+ pauseCtx->cursorVtx[17].v.ob[0] = pauseCtx->cursorVtx[19].v.ob[0] =
+ pauseCtx->cursorVtx[16].v.ob[0] + (pauseCtx->equipAnimScale / 10);
+ pauseCtx->cursorVtx[16].v.ob[1] = pauseCtx->cursorVtx[17].v.ob[1] = pauseCtx->equipAnimY / 10;
+ pauseCtx->cursorVtx[18].v.ob[1] = pauseCtx->cursorVtx[19].v.ob[1] =
+ pauseCtx->cursorVtx[16].v.ob[1] - (pauseCtx->equipAnimScale / 10);
+
+ if (pauseCtx->equipTargetItem < 0xB5) {
+ // Normal Equip (icon goes from the inventory slot to the C button when equipping it)
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, pauseCtx->equipAnimAlpha);
+ gSPVertex(OVERLAY_DISP++, &pauseCtx->cursorVtx[16], 4, 0);
+ gDPLoadTextureBlock(OVERLAY_DISP++, gItemIcons[pauseCtx->equipTargetItem], 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);
+ } else {
+ // Magic Arrow Equip Effect
+ temp = pauseCtx->equipTargetItem - 0xB5;
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sMagicArrowEffectsR[temp], sMagicArrowEffectsG[temp],
+ sMagicArrowEffectsB[temp], pauseCtx->equipAnimAlpha);
+
+ if ((pauseCtx->equipAnimAlpha > 0) && (pauseCtx->equipAnimAlpha < 255)) {
+ temp = (pauseCtx->equipAnimAlpha / 8) / 2;
+ pauseCtx->cursorVtx[16].v.ob[0] = pauseCtx->cursorVtx[18].v.ob[0] =
+ pauseCtx->cursorVtx[16].v.ob[0] - temp;
+ pauseCtx->cursorVtx[17].v.ob[0] = pauseCtx->cursorVtx[19].v.ob[0] =
+ pauseCtx->cursorVtx[16].v.ob[0] + temp * 2 + 32;
+ pauseCtx->cursorVtx[16].v.ob[1] = pauseCtx->cursorVtx[17].v.ob[1] =
+ pauseCtx->cursorVtx[16].v.ob[1] + temp;
+ pauseCtx->cursorVtx[18].v.ob[1] = pauseCtx->cursorVtx[19].v.ob[1] =
+ pauseCtx->cursorVtx[16].v.ob[1] - temp * 2 - 32;
+ }
+
+ gSPVertex(OVERLAY_DISP++, &pauseCtx->cursorVtx[16], 4, 0);
+ gDPLoadTextureBlock(OVERLAY_DISP++, &D_08095AC0, G_IM_FMT_IA, G_IM_SIZ_8b, 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(OVERLAY_DISP++, 0, 2, 3, 1, 0);
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+/**
+ * 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 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,
+ };
+ static 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,
+ };
+ 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 TexturePtr sFinalHoursDigitTextures[] = {
+ gFinalHoursClockDigit0Tex, gFinalHoursClockDigit1Tex, gFinalHoursClockDigit2Tex, gFinalHoursClockDigit3Tex,
+ gFinalHoursClockDigit4Tex, gFinalHoursClockDigit5Tex, gFinalHoursClockDigit6Tex, gFinalHoursClockDigit7Tex,
+ gFinalHoursClockDigit8Tex, gFinalHoursClockDigit9Tex, gFinalHoursClockColonTex,
+ };
+ // sFinalHoursDigitSlotPosXOffset
+ static s16 D_801BFC40[] = {
+ 127, 136, 144, 151, 160, 168, 175, 184,
+ };
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ MessageContext* msgCtx = &play->msgCtx;
+ s16 sp1E6;
+ f32 temp_f14;
+ u32 timeUntilMoonCrash;
+ f32 sp1D8;
+ f32 timeInMinutes;
+ f32 timeInSeconds;
+ f32 sp1CC;
+ s32 new_var;
+ s16 sp1C6;
+ s16 currentHour;
+ u16 time;
+ s16 temp;
+ s16 colorStep;
+ s16 finalHoursClockSlots[8]; // sp1AC
+ 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 (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;
+ }
+ } else {
+ if (play->actorCtx.flags & ACTORCTX_FLAG_1) {
+ sThreeDayClockAlpha = 255;
+ } else {
+ sThreeDayClockAlpha = interfaceCtx->bAlpha;
+ }
+ D_801BFB34 = 0;
+ D_801BFB30 = 0;
+ }
+
+ if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) {
+
+ func_8012C654(play->state.gfxCtx);
+
+ /**
+ * 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);
+
+ /**
+ * 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) >= 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);
+ } 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);
+ }
+
+ /**
+ * 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;
+ }
+ }
+
+ /**
+ * 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]) /
+ 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);
+ }
+ }
+ }
+ }
+ }
+ }
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+#else
+s16 sThreeDayClockAlpha = 255;
s16 D_801BFB30 = 0;
s16 D_801BFB34 = 0;
-u16 D_801BFB38[] = {
+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 D_801BFB6C[] = {
+TexturePtr sThreeDayClockHourTextures[] = {
gThreeDayClockHour12Tex, gThreeDayClockHour1Tex, gThreeDayClockHour2Tex, gThreeDayClockHour3Tex,
gThreeDayClockHour4Tex, gThreeDayClockHour5Tex, gThreeDayClockHour6Tex, gThreeDayClockHour7Tex,
gThreeDayClockHour8Tex, gThreeDayClockHour9Tex, gThreeDayClockHour10Tex, gThreeDayClockHour11Tex,
@@ -2551,7 +4980,7 @@ s16 D_801BFC04[] = { 255, 0 };
s16 D_801BFC08[] = { 100, 0 };
s16 D_801BFC0C[] = { 30, 0 };
s16 D_801BFC10[] = { 100, 0 };
-TexturePtr D_801BFC14[] = {
+TexturePtr sFinalHoursDigitTextures[] = {
gFinalHoursClockDigit0Tex, gFinalHoursClockDigit1Tex, gFinalHoursClockDigit2Tex, gFinalHoursClockDigit3Tex,
gFinalHoursClockDigit4Tex, gFinalHoursClockDigit5Tex, gFinalHoursClockDigit6Tex, gFinalHoursClockDigit7Tex,
gFinalHoursClockDigit8Tex, gFinalHoursClockDigit9Tex, gFinalHoursClockColonTex,
@@ -2559,56 +4988,564 @@ TexturePtr D_801BFC14[] = {
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
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80119610.s")
+void Interface_SetPerfectLetters(PlayState* play, s16 perfectLettersType) {
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ s16 i;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8011B4E0.s")
+ interfaceCtx->perfectLettersOn = true;
+ interfaceCtx->perfectLettersType = perfectLettersType;
-u16 D_801BFC50[] = {
- 0xC000, 0xE000, 0x0000, 0x2000, 0xA000, 0x8000, 0x6000, 0x4000,
-};
-s16 D_801BFC60[][3] = {
- 255, 255, 255, 255, 165, 55,
+ interfaceCtx->perfectLettersPrimColor[0] = 255;
+ interfaceCtx->perfectLettersPrimColor[1] = 165;
+ interfaceCtx->perfectLettersPrimColor[2] = 55;
+ interfaceCtx->perfectLettersPrimColor[3] = 255;
+ interfaceCtx->perfectLettersColorTimer = 20;
+
+ interfaceCtx->perfectLettersColorIndex = 0;
+ interfaceCtx->perfectLettersCount = 1;
+ interfaceCtx->perfectLettersTimer = 0;
+
+ for (i = 0; i < PERFECT_LETTERS_NUM_LETTERS; i++) {
+ interfaceCtx->perfectLettersAngles[i] = 0;
+ interfaceCtx->perfectLettersState[i] = interfaceCtx->perfectLettersOffsetX[i] = 0;
+ if (interfaceCtx->perfectLettersType == PERFECT_LETTERS_TYPE_1) {
+ interfaceCtx->perfectLettersSemiAxisX[i] = 140.0f;
+ interfaceCtx->perfectLettersSemiAxisY[i] = 100.0f;
+ } else {
+ interfaceCtx->perfectLettersSemiAxisY[i] = 200.0f;
+ interfaceCtx->perfectLettersSemiAxisX[i] = 200.0f;
+ }
+ }
+ interfaceCtx->perfectLettersState[0] = PERFECT_LETTERS_STATE_INIT;
+}
+
+u16 sPerfectLettersType1OffScreenAngles[PERFECT_LETTERS_NUM_LETTERS] = {
+ 6 * PERFECT_LETTERS_ANGLE_PER_LETTER, // P
+ 7 * PERFECT_LETTERS_ANGLE_PER_LETTER, // E
+ 0 * PERFECT_LETTERS_ANGLE_PER_LETTER, // R
+ 1 * PERFECT_LETTERS_ANGLE_PER_LETTER, // F
+ 5 * PERFECT_LETTERS_ANGLE_PER_LETTER, // E
+ 4 * PERFECT_LETTERS_ANGLE_PER_LETTER, // C
+ 3 * PERFECT_LETTERS_ANGLE_PER_LETTER, // T
+ 2 * PERFECT_LETTERS_ANGLE_PER_LETTER, // !
};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8011B5C0.s")
-
-s16 D_801BFC6C[] = {
- 78, 54, 29, 5, -18, -42, -67, -85,
-};
-s16 D_801BFC7C[] = {
- 180, 180, 180, 180, -180, -180, -180, -180,
-};
-s16 D_801BFC8C[2][3] = {
+s16 sPerfectLettersType1PrimColorTargets[2][3] = {
{ 255, 255, 255 },
{ 255, 165, 55 },
};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8011B9E0.s")
+void Interface_UpdatePerfectLettersType1(PlayState* play) {
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ s16 i;
+ s16 count;
+ s16 colorStepR;
+ s16 colorStepG;
+ s16 colorStepB;
-s16 D_801BFC98[] = {
- 78, 54, 29, 5, -18, -42, -67, -85,
+ // Update letter positions
+ for (count = 0, i = 0; i < interfaceCtx->perfectLettersCount; i++, count += 4) {
+ if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_INIT) {
+ // Initialize letter positions along the elliptical spirals
+ interfaceCtx->perfectLettersAngles[i] = sPerfectLettersType1OffScreenAngles[i] + 0xA000;
+ interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_ENTER;
+ } else if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_ENTER) {
+ // Swirl inwards along elliptical spirals to form the spelt-out word
+ interfaceCtx->perfectLettersAngles[i] -= 0x800;
+ if (interfaceCtx->perfectLettersAngles[i] == sPerfectLettersType1OffScreenAngles[i]) {
+ interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_STATIONARY;
+ }
+ } else if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_SPREAD) {
+ // Swirl outwards along elliptical spirals offscreen
+ interfaceCtx->perfectLettersAngles[i] -= 0x800;
+ if (interfaceCtx->perfectLettersAngles[i] == (u16)(sPerfectLettersType1OffScreenAngles[i] - 0x8000)) {
+ interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_OFF;
+ }
+ }
+ }
+
+ // Initialize the next letter in the list
+ // if `perfectLettersCount == PERFECT_LETTERS_NUM_LETTERS`,
+ // then perfectLettersState[] is accessed
+ if ((interfaceCtx->perfectLettersState[interfaceCtx->perfectLettersCount] == PERFECT_LETTERS_STATE_OFF) &&
+ (interfaceCtx->perfectLettersCount < PERFECT_LETTERS_NUM_LETTERS)) {
+ interfaceCtx->perfectLettersState[interfaceCtx->perfectLettersCount] = PERFECT_LETTERS_STATE_INIT;
+
+ interfaceCtx->perfectLettersSemiAxisX[interfaceCtx->perfectLettersCount] = 140.0f;
+ interfaceCtx->perfectLettersSemiAxisY[interfaceCtx->perfectLettersCount] = 100.0f;
+ interfaceCtx->perfectLettersAngles[interfaceCtx->perfectLettersCount] =
+ sPerfectLettersType1OffScreenAngles[interfaceCtx->perfectLettersCount] + 0xA000;
+
+ interfaceCtx->perfectLettersCount++;
+ }
+
+ // Update letter colors
+ if ((interfaceCtx->perfectLettersCount == PERFECT_LETTERS_NUM_LETTERS) &&
+ (interfaceCtx->perfectLettersState[PERFECT_LETTERS_NUM_LETTERS - 1] == PERFECT_LETTERS_STATE_STATIONARY)) {
+
+ colorStepR = ABS_ALT(interfaceCtx->perfectLettersPrimColor[0] -
+ sPerfectLettersType1PrimColorTargets[interfaceCtx->perfectLettersColorIndex][0]) /
+ interfaceCtx->perfectLettersColorTimer;
+ colorStepG = ABS_ALT(interfaceCtx->perfectLettersPrimColor[1] -
+ sPerfectLettersType1PrimColorTargets[interfaceCtx->perfectLettersColorIndex][1]) /
+ interfaceCtx->perfectLettersColorTimer;
+ colorStepB = ABS_ALT(interfaceCtx->perfectLettersPrimColor[2] -
+ sPerfectLettersType1PrimColorTargets[interfaceCtx->perfectLettersColorIndex][2]) /
+ interfaceCtx->perfectLettersColorTimer;
+
+ if (interfaceCtx->perfectLettersPrimColor[0] >=
+ sPerfectLettersType1PrimColorTargets[interfaceCtx->perfectLettersColorIndex][0]) {
+ interfaceCtx->perfectLettersPrimColor[0] -= colorStepR;
+ } else {
+ interfaceCtx->perfectLettersPrimColor[0] += colorStepR;
+ }
+
+ if (interfaceCtx->perfectLettersPrimColor[1] >=
+ sPerfectLettersType1PrimColorTargets[interfaceCtx->perfectLettersColorIndex][1]) {
+ interfaceCtx->perfectLettersPrimColor[1] -= colorStepG;
+ } else {
+ interfaceCtx->perfectLettersPrimColor[1] += colorStepG;
+ }
+
+ if (interfaceCtx->perfectLettersPrimColor[2] >=
+ sPerfectLettersType1PrimColorTargets[interfaceCtx->perfectLettersColorIndex][2]) {
+ interfaceCtx->perfectLettersPrimColor[2] -= colorStepB;
+ } else {
+ interfaceCtx->perfectLettersPrimColor[2] += colorStepB;
+ }
+
+ interfaceCtx->perfectLettersColorTimer--;
+
+ if (interfaceCtx->perfectLettersColorTimer == 0) {
+ interfaceCtx->perfectLettersColorTimer = 20;
+ interfaceCtx->perfectLettersColorIndex ^= 1;
+ interfaceCtx->perfectLettersTimer++;
+
+ if (interfaceCtx->perfectLettersTimer == 6) {
+ for (i = 0; i < PERFECT_LETTERS_NUM_LETTERS; i++) {
+ interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_SPREAD;
+ }
+ }
+ }
+ }
+
+ for (count = 0, i = 0; i < PERFECT_LETTERS_NUM_LETTERS; i++) {
+ if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_OFF) {
+ count++;
+ }
+ }
+
+ if (count == PERFECT_LETTERS_NUM_LETTERS) {
+ interfaceCtx->perfectLettersOn = false;
+ }
+}
+
+// Targets to offset each letter to properly spell "PERFECT!"
+s16 sPerfectLettersType2SpellingOffsetsX[PERFECT_LETTERS_NUM_LETTERS] = {
+ 78, // P
+ 54, // E
+ 29, // R
+ 5, // F
+ -18, // E
+ -42, // C
+ -67, // T
+ -85, // !
};
-u16 D_801BFCA8[] = {
- 0xC000, 0xE000, 0x0000, 0x2000, 0xA000, 0x8000, 0x6000, 0x4000,
+
+// Targets to offset each letter to sweep horizontally offscreen
+s16 sPerfectLettersType2OffScreenOffsetsX[PERFECT_LETTERS_NUM_LETTERS] = {
+ 180, // P (offscreen left)
+ 180, // E (offscreen left)
+ 180, // R (offscreen left)
+ 180, // F (offscreen left)
+ -180, // E (offscreen right)
+ -180, // C (offscreen right)
+ -180, // T (offscreen right)
+ -180, // ! (offscreen right)
};
-s16 D_801BFCB8[2][3] = {
+
+s16 sPerfectLettersType2PrimColorTargets[2][3] = {
{ 255, 255, 255 },
{ 255, 165, 55 },
};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8011BF70.s")
+void Interface_UpdatePerfectLettersType2(PlayState* play) {
+ s16 i;
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ s16 colorStepR;
+ s16 colorStepG;
+ s16 colorStepB;
+ s16 colorStepA;
+ s16 j = 0; // unused incrementer
-TexturePtr D_801BFCC4[] = {
- gMinigameLetterPTex, gMinigameLetterETex, gMinigameLetterRTex, gMinigameLetterFTex,
- gMinigameLetterETex, gMinigameLetterCTex, gMinigameLetterTTex, gMinigameExclamationTex,
+ // Update letter positions
+ for (i = 0; i < interfaceCtx->perfectLettersCount; i++, j += 4) {
+ if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_INIT) {
+ // Initialize letter positions along the elliptical spirals
+ interfaceCtx->perfectLettersAngles[i] = i * (0x10000 / PERFECT_LETTERS_NUM_LETTERS);
+ interfaceCtx->perfectLettersSemiAxisX[i] = 200.0f;
+ interfaceCtx->perfectLettersSemiAxisY[i] = 200.0f;
+
+ interfaceCtx->perfectLettersOffsetX[i] = 0;
+ interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_ENTER;
+ } else if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_ENTER) {
+ // Swirl inwards along elliptical spirals to the center of the screen
+ interfaceCtx->perfectLettersAngles[i] -= 0x800;
+ interfaceCtx->perfectLettersSemiAxisX[i] -= 8.0f;
+ interfaceCtx->perfectLettersSemiAxisY[i] -= 8.0f;
+
+ if (interfaceCtx->perfectLettersSemiAxisX[i] <= 0.0f) {
+ // The letter has reached the center of the screen
+ interfaceCtx->perfectLettersSemiAxisY[i] = 0.0f;
+ interfaceCtx->perfectLettersSemiAxisX[i] = 0.0f;
+ interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_STATIONARY;
+
+ if (i == (PERFECT_LETTERS_NUM_LETTERS - 1)) {
+ // The last letter has reached the center of the screen
+ interfaceCtx->perfectLettersColorTimer = 5;
+ interfaceCtx->perfectLettersState[0] = interfaceCtx->perfectLettersState[1] =
+ interfaceCtx->perfectLettersState[2] = interfaceCtx->perfectLettersState[3] =
+ interfaceCtx->perfectLettersState[4] = interfaceCtx->perfectLettersState[5] =
+ interfaceCtx->perfectLettersState[6] = interfaceCtx->perfectLettersState[7] =
+ PERFECT_LETTERS_STATE_SPREAD;
+ }
+ }
+ } else if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_SPREAD) {
+ // Spread out the letters horizontally from the center to the spelt-out word
+ colorStepR = ABS_ALT(interfaceCtx->perfectLettersOffsetX[i] - sPerfectLettersType2SpellingOffsetsX[i]) /
+ interfaceCtx->perfectLettersColorTimer;
+ if (interfaceCtx->perfectLettersOffsetX[i] >= sPerfectLettersType2SpellingOffsetsX[i]) {
+ interfaceCtx->perfectLettersOffsetX[i] -= colorStepR;
+ } else {
+ interfaceCtx->perfectLettersOffsetX[i] += colorStepR;
+ }
+ } else if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_EXIT) {
+ // Spread out the letters horizontally from the spelt-out world to offscreen
+ colorStepR = ABS_ALT(interfaceCtx->perfectLettersOffsetX[i] - sPerfectLettersType2OffScreenOffsetsX[i]) /
+ interfaceCtx->perfectLettersColorTimer;
+ if (interfaceCtx->perfectLettersOffsetX[i] >= sPerfectLettersType2OffScreenOffsetsX[i]) {
+ interfaceCtx->perfectLettersOffsetX[i] -= colorStepR;
+ } else {
+ interfaceCtx->perfectLettersOffsetX[i] += colorStepR;
+ }
+ }
+ }
+
+ if ((interfaceCtx->perfectLettersState[0] == PERFECT_LETTERS_STATE_SPREAD) ||
+ (interfaceCtx->perfectLettersState[0] == PERFECT_LETTERS_STATE_EXIT)) {
+ if (interfaceCtx->perfectLettersState[0] == PERFECT_LETTERS_STATE_EXIT) {
+ colorStepA = interfaceCtx->perfectLettersPrimColor[3] / interfaceCtx->perfectLettersColorTimer;
+ interfaceCtx->perfectLettersPrimColor[3] -= colorStepA;
+ }
+ interfaceCtx->perfectLettersColorTimer--;
+ if (interfaceCtx->perfectLettersColorTimer == 0) {
+
+ if (interfaceCtx->perfectLettersState[0] == PERFECT_LETTERS_STATE_SPREAD) {
+ for (i = 0; i < PERFECT_LETTERS_NUM_LETTERS; i++) {
+ interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_DISPLAY;
+ }
+ interfaceCtx->perfectLettersColorTimer = 20;
+ } else {
+ for (i = 0; i < PERFECT_LETTERS_NUM_LETTERS; i++) {
+ interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_OFF;
+ }
+ interfaceCtx->perfectLettersOn = false;
+ }
+ }
+ }
+
+ // Initialize the next letter in the list
+ if (interfaceCtx->perfectLettersState[interfaceCtx->perfectLettersCount] == PERFECT_LETTERS_STATE_OFF) {
+ if (interfaceCtx->perfectLettersCount < PERFECT_LETTERS_NUM_LETTERS) {
+ interfaceCtx->perfectLettersState[interfaceCtx->perfectLettersCount] = PERFECT_LETTERS_STATE_INIT;
+ interfaceCtx->perfectLettersCount++;
+ }
+ }
+
+ // Update letter colors
+ if (interfaceCtx->perfectLettersCount == PERFECT_LETTERS_NUM_LETTERS) {
+ if (interfaceCtx->perfectLettersState[PERFECT_LETTERS_NUM_LETTERS - 1] == PERFECT_LETTERS_STATE_DISPLAY) {
+
+ colorStepR = ABS_ALT(interfaceCtx->perfectLettersPrimColor[0] -
+ sPerfectLettersType2PrimColorTargets[interfaceCtx->perfectLettersColorIndex][0]) /
+ interfaceCtx->perfectLettersColorTimer;
+ colorStepG = ABS_ALT(interfaceCtx->perfectLettersPrimColor[1] -
+ sPerfectLettersType2PrimColorTargets[interfaceCtx->perfectLettersColorIndex][1]) /
+ interfaceCtx->perfectLettersColorTimer;
+ colorStepB = ABS_ALT(interfaceCtx->perfectLettersPrimColor[2] -
+ sPerfectLettersType2PrimColorTargets[interfaceCtx->perfectLettersColorIndex][2]) /
+ interfaceCtx->perfectLettersColorTimer;
+
+ if (interfaceCtx->perfectLettersPrimColor[0] >=
+ sPerfectLettersType2PrimColorTargets[interfaceCtx->perfectLettersColorIndex][0]) {
+ interfaceCtx->perfectLettersPrimColor[0] -= colorStepR;
+ } else {
+ interfaceCtx->perfectLettersPrimColor[0] += colorStepR;
+ }
+
+ if (interfaceCtx->perfectLettersPrimColor[1] >=
+ sPerfectLettersType2PrimColorTargets[interfaceCtx->perfectLettersColorIndex][1]) {
+ interfaceCtx->perfectLettersPrimColor[1] -= colorStepG;
+ } else {
+ interfaceCtx->perfectLettersPrimColor[1] += colorStepG;
+ }
+
+ if (interfaceCtx->perfectLettersPrimColor[2] >=
+ sPerfectLettersType2PrimColorTargets[interfaceCtx->perfectLettersColorIndex][2]) {
+ interfaceCtx->perfectLettersPrimColor[2] -= colorStepB;
+ } else {
+ interfaceCtx->perfectLettersPrimColor[2] += colorStepB;
+ }
+
+ interfaceCtx->perfectLettersColorTimer--;
+ if (interfaceCtx->perfectLettersColorTimer == 0) {
+ interfaceCtx->perfectLettersColorTimer = 20;
+ interfaceCtx->perfectLettersColorIndex ^= 1;
+ interfaceCtx->perfectLettersTimer++;
+ if (interfaceCtx->perfectLettersTimer == 6) {
+ for (i = 0; i < PERFECT_LETTERS_NUM_LETTERS; i++) {
+ interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_EXIT;
+ }
+ interfaceCtx->perfectLettersColorTimer = 5;
+ }
+ }
+ }
+ }
+}
+
+// Targets to offset each letter to properly spell "PERFECT!"
+s16 sPerfectLettersType3SpellingOffsetsX[PERFECT_LETTERS_NUM_LETTERS] = {
+ 78, // P
+ 54, // E
+ 29, // R
+ 5, // F
+ -18, // E
+ -42, // C
+ -67, // T
+ -85, // !
};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8011C4C4.s")
+// Targets to sweep each letter's angle along an elliptical spiral offscreen
+u16 sPerfectLettersType3OffScreenAngles[PERFECT_LETTERS_NUM_LETTERS] = {
+ 6 * PERFECT_LETTERS_ANGLE_PER_LETTER, // P
+ 7 * PERFECT_LETTERS_ANGLE_PER_LETTER, // E
+ 0 * PERFECT_LETTERS_ANGLE_PER_LETTER, // R
+ 1 * PERFECT_LETTERS_ANGLE_PER_LETTER, // F
+ 5 * PERFECT_LETTERS_ANGLE_PER_LETTER, // E
+ 4 * PERFECT_LETTERS_ANGLE_PER_LETTER, // C
+ 3 * PERFECT_LETTERS_ANGLE_PER_LETTER, // T
+ 2 * PERFECT_LETTERS_ANGLE_PER_LETTER, // !
+};
+
+s16 sPerfectLettersType3PrimColorTargets[2][3] = {
+ { 255, 255, 255 },
+ { 255, 165, 55 },
+};
+
+void Interface_UpdatePerfectLettersType3(PlayState* play) {
+ s16 i;
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ s16 colorStepR;
+ s16 colorStepG;
+ s16 colorStepB;
+ s16 j = 0;
+
+ // Update letter positions
+ for (i = 0; i < interfaceCtx->perfectLettersCount; i++, j += 4) {
+ if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_INIT) {
+ // Initialize letter positions along the elliptical spirals
+ interfaceCtx->perfectLettersAngles[i] = i * (0x10000 / PERFECT_LETTERS_NUM_LETTERS);
+ interfaceCtx->perfectLettersSemiAxisX[i] = 200.0f;
+ interfaceCtx->perfectLettersSemiAxisY[i] = 200.0f;
+
+ interfaceCtx->perfectLettersOffsetX[i] = 0;
+ interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_ENTER;
+ } else if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_ENTER) {
+ // Swirl inwards along elliptical spirals to the center of the screen
+ interfaceCtx->perfectLettersAngles[i] -= 0x800;
+ interfaceCtx->perfectLettersSemiAxisX[i] -= 8.0f;
+ interfaceCtx->perfectLettersSemiAxisY[i] -= 8.0f;
+
+ if (interfaceCtx->perfectLettersSemiAxisX[i] <= 0.0f) {
+ // The letter has reached the center of the screen
+ interfaceCtx->perfectLettersSemiAxisY[i] = 0.0f;
+ interfaceCtx->perfectLettersSemiAxisX[i] = 0.0f;
+ interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_STATIONARY;
+
+ if (i == (PERFECT_LETTERS_NUM_LETTERS - 1)) {
+ // The last letter has reached the center of the screen
+ interfaceCtx->perfectLettersColorTimer = 5;
+ interfaceCtx->perfectLettersState[0] = interfaceCtx->perfectLettersState[1] =
+ interfaceCtx->perfectLettersState[2] = interfaceCtx->perfectLettersState[3] =
+ interfaceCtx->perfectLettersState[4] = interfaceCtx->perfectLettersState[5] =
+ interfaceCtx->perfectLettersState[6] = interfaceCtx->perfectLettersState[7] =
+ PERFECT_LETTERS_STATE_SPREAD;
+ }
+ }
+ } else if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_SPREAD) {
+ // Spread out the letters horizontally from the center to the spelt-out word
+ colorStepR = ABS_ALT(interfaceCtx->perfectLettersOffsetX[i] - sPerfectLettersType3SpellingOffsetsX[i]) /
+ interfaceCtx->perfectLettersColorTimer;
+ if (interfaceCtx->perfectLettersOffsetX[i] >= sPerfectLettersType3SpellingOffsetsX[i]) {
+ interfaceCtx->perfectLettersOffsetX[i] -= colorStepR;
+ } else {
+ interfaceCtx->perfectLettersOffsetX[i] += colorStepR;
+ }
+ } else if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_EXIT) {
+ // Swirl outwards along elliptical spirals offscreen
+ interfaceCtx->perfectLettersAngles[i] -= 0x800;
+ if (interfaceCtx->perfectLettersAngles[i] == (u16)(sPerfectLettersType3OffScreenAngles[i] - 0x8000)) {
+ interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_OFF;
+ }
+ }
+ }
+
+ if (interfaceCtx->perfectLettersState[0] == PERFECT_LETTERS_STATE_SPREAD) {
+ interfaceCtx->perfectLettersColorTimer--;
+ if (interfaceCtx->perfectLettersColorTimer == 0) {
+ for (i = 0; i < PERFECT_LETTERS_NUM_LETTERS; i++) {
+ interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_DISPLAY;
+ }
+ interfaceCtx->perfectLettersColorTimer = 20;
+ }
+ }
+
+ // Initialize the next letter in the list
+ if ((interfaceCtx->perfectLettersState[interfaceCtx->perfectLettersCount] == PERFECT_LETTERS_STATE_OFF) &&
+ (interfaceCtx->perfectLettersCount < PERFECT_LETTERS_NUM_LETTERS)) {
+ interfaceCtx->perfectLettersState[interfaceCtx->perfectLettersCount] = PERFECT_LETTERS_STATE_INIT;
+ interfaceCtx->perfectLettersCount++;
+ }
+
+ // Update letter colors
+ if ((interfaceCtx->perfectLettersCount == PERFECT_LETTERS_NUM_LETTERS) &&
+ (interfaceCtx->perfectLettersState[PERFECT_LETTERS_NUM_LETTERS - 1] == PERFECT_LETTERS_STATE_DISPLAY)) {
+
+ colorStepR = ABS_ALT(interfaceCtx->perfectLettersPrimColor[0] -
+ sPerfectLettersType3PrimColorTargets[interfaceCtx->perfectLettersColorIndex][0]) /
+ interfaceCtx->perfectLettersColorTimer;
+ colorStepG = ABS_ALT(interfaceCtx->perfectLettersPrimColor[1] -
+ sPerfectLettersType3PrimColorTargets[interfaceCtx->perfectLettersColorIndex][1]) /
+ interfaceCtx->perfectLettersColorTimer;
+ colorStepB = ABS_ALT(interfaceCtx->perfectLettersPrimColor[2] -
+ sPerfectLettersType3PrimColorTargets[interfaceCtx->perfectLettersColorIndex][2]) /
+ interfaceCtx->perfectLettersColorTimer;
+
+ if (interfaceCtx->perfectLettersPrimColor[0] >=
+ sPerfectLettersType3PrimColorTargets[interfaceCtx->perfectLettersColorIndex][0]) {
+ interfaceCtx->perfectLettersPrimColor[0] -= colorStepR;
+ } else {
+ interfaceCtx->perfectLettersPrimColor[0] += colorStepR;
+ }
+
+ if (interfaceCtx->perfectLettersPrimColor[1] >=
+ sPerfectLettersType3PrimColorTargets[interfaceCtx->perfectLettersColorIndex][1]) {
+ interfaceCtx->perfectLettersPrimColor[1] -= colorStepG;
+ } else {
+ interfaceCtx->perfectLettersPrimColor[1] += colorStepG;
+ }
+
+ if (interfaceCtx->perfectLettersPrimColor[2] >=
+ sPerfectLettersType3PrimColorTargets[interfaceCtx->perfectLettersColorIndex][2]) {
+ interfaceCtx->perfectLettersPrimColor[2] -= colorStepB;
+ } else {
+ interfaceCtx->perfectLettersPrimColor[2] += colorStepB;
+ }
+
+ interfaceCtx->perfectLettersColorTimer--;
+ if (interfaceCtx->perfectLettersColorTimer == 0) {
+ interfaceCtx->perfectLettersColorTimer = 20;
+ interfaceCtx->perfectLettersColorIndex ^= 1;
+ interfaceCtx->perfectLettersTimer++;
+ if (interfaceCtx->perfectLettersTimer == 6) {
+ for (i = 0; i < PERFECT_LETTERS_NUM_LETTERS; i++) {
+ interfaceCtx->perfectLettersSemiAxisX[i] = 140.0f;
+ interfaceCtx->perfectLettersSemiAxisY[i] = 100.0f;
+ interfaceCtx->perfectLettersAngles[i] = sPerfectLettersType3OffScreenAngles[i];
+ interfaceCtx->perfectLettersState[i] = PERFECT_LETTERS_STATE_EXIT;
+ }
+ interfaceCtx->perfectLettersColorTimer = 5;
+ }
+ }
+ }
+
+ j = 0;
+ for (i = 0; i < PERFECT_LETTERS_NUM_LETTERS; i++) {
+ if (interfaceCtx->perfectLettersState[i] == PERFECT_LETTERS_STATE_OFF) {
+ j++;
+ }
+ }
+
+ if (j == PERFECT_LETTERS_NUM_LETTERS) {
+ interfaceCtx->perfectLettersOn = false;
+ }
+}
+
+TexturePtr sPerfectLettersTextures[PERFECT_LETTERS_NUM_LETTERS] = {
+ gPerfectLetterPTex, gPerfectLetterETex, gPerfectLetterRTex, gPerfectLetterFTex,
+ gPerfectLetterETex, gPerfectLetterCTex, gPerfectLetterTTex, gPerfectLetterExclamationTex,
+};
+
+void Interface_DrawPerfectLetters(PlayState* play) {
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ f32 letterX;
+ f32 letterY;
+ s16 i;
+ s16 vtxOffset;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C8D4(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,
+ PRIMITIVE, 0);
+
+ for (vtxOffset = 0, i = 0; i < PERFECT_LETTERS_NUM_LETTERS; vtxOffset += 4, i++) {
+ if (interfaceCtx->perfectLettersState[i] != PERFECT_LETTERS_STATE_OFF) {
+
+ // The positions follow the path of an elliptical spiral
+ letterX = Math_SinS(interfaceCtx->perfectLettersAngles[i]) * interfaceCtx->perfectLettersSemiAxisX[i];
+ letterY = Math_CosS(interfaceCtx->perfectLettersAngles[i]) * interfaceCtx->perfectLettersSemiAxisY[i];
+
+ // Draw Minigame Perfect Shadows
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, interfaceCtx->perfectLettersPrimColor[3]);
+
+ Matrix_Translate(letterX, letterY, 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[44 + vtxOffset], 4, 0);
+
+ OVERLAY_DISP = Gfx_DrawTexQuad4b(OVERLAY_DISP, sPerfectLettersTextures[i], 4, 32, 33, 0);
+
+ // Draw Minigame Perfect Colored Letters
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, interfaceCtx->perfectLettersPrimColor[0],
+ interfaceCtx->perfectLettersPrimColor[1], interfaceCtx->perfectLettersPrimColor[2],
+ interfaceCtx->perfectLettersPrimColor[3]);
+
+ Matrix_Translate(letterX, letterY, 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[76 + vtxOffset], 4, 0);
+
+ OVERLAY_DISP = Gfx_DrawTexQuad4b(OVERLAY_DISP, sPerfectLettersTextures[i], 4, 32, 33, 0);
+ }
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
void Interface_StartMoonCrash(PlayState* play) {
if (play->actorCtx.flags & ACTORCTX_FLAG_1) {
- Audio_QueueSeqCmd(0xE0000100);
+ SEQCMD_DISABLE_PLAY_SEQUENCES(false);
}
gSaveContext.save.day = 4;
@@ -2617,7 +5554,7 @@ void Interface_StartMoonCrash(PlayState* play) {
play->nextEntrance = ENTRANCE(TERMINA_FIELD, 12);
gSaveContext.nextCutsceneIndex = 0;
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_03;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
}
void Interface_GetTimerDigits(u64 timer, s16* timerArr) {
@@ -2671,14 +5608,14 @@ void Interface_DrawTimers(PlayState* play) {
MessageContext* msgCtx = &play->msgCtx;
Player* player = GET_PLAYER(play);
OSTime osTime;
- OSTime timerOsTime;
+ OSTime postmanTimerStopOsTime;
s16 j;
s16 i;
OPEN_DISPS(play->state.gfxCtx);
// Not satisfying any of these conditions will pause the timer
- if ((play->pauseCtx.state == 0) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) &&
+ if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) &&
(play->gameOverCtx.state == GAMEOVER_INACTIVE) &&
((msgCtx->msgMode == 0) ||
((msgCtx->msgMode != 0) && (msgCtx->currentTextId >= 0x1BB2) && (msgCtx->currentTextId <= 0x1BB6))) &&
@@ -2721,10 +5658,10 @@ void Interface_DrawTimers(PlayState* play) {
break;
case TIMER_STATE_POSTMAN_STOP:
- timerOsTime = gSaveContext.postmanTimerStopOsTime;
- gSaveContext.timerCurTimes[TIMER_ID_POSTMAN] =
- OSTIME_TO_TIMER(timerOsTime - ((void)0, gSaveContext.timerStartOsTimes[TIMER_ID_POSTMAN]) -
- ((void)0, gSaveContext.timerPausedOsTimes[TIMER_ID_POSTMAN]));
+ postmanTimerStopOsTime = gSaveContext.postmanTimerStopOsTime;
+ gSaveContext.timerCurTimes[TIMER_ID_POSTMAN] = OSTIME_TO_TIMER(
+ postmanTimerStopOsTime - ((void)0, gSaveContext.timerStartOsTimes[TIMER_ID_POSTMAN]) -
+ ((void)0, gSaveContext.timerPausedOsTimes[TIMER_ID_POSTMAN]));
gSaveContext.timerStates[TIMER_ID_POSTMAN] = TIMER_STATE_POSTMAN_END;
func_80174F9C(Interface_PostmanTimerCallback, NULL);
break;
@@ -2741,20 +5678,21 @@ void Interface_DrawTimers(PlayState* play) {
case TIMER_STATE_START:
case TIMER_STATE_ALT_START:
sTimerStateTimer = 20;
- if (interfaceCtx->unk_280 != 0) {
+ if (interfaceCtx->minigameState != MINIGAME_STATE_NONE) {
// Set the timer position
gSaveContext.timerX[sTimerId] = 26;
if (interfaceCtx->magicAlpha != 255) {
gSaveContext.timerY[sTimerId] = 22;
- } else if (gSaveContext.save.playerData.healthCapacity > 0xA0) {
+ } else if (gSaveContext.save.saveInfo.playerData.healthCapacity > 0xA0) {
gSaveContext.timerY[sTimerId] = 54;
} else {
gSaveContext.timerY[sTimerId] = 46;
}
- if ((interfaceCtx->unk_280 == 8) || (interfaceCtx->unk_280 == 30)) {
+ if ((interfaceCtx->minigameState == MINIGAME_STATE_COUNTDOWN_GO) ||
+ (interfaceCtx->minigameState == MINIGAME_STATE_PLAYING)) {
if (gSaveContext.timerStates[sTimerId] == TIMER_STATE_START) {
gSaveContext.timerStates[sTimerId] = TIMER_STATE_COUNTING;
} else {
@@ -2791,7 +5729,7 @@ void Interface_DrawTimers(PlayState* play) {
j = ((((void)0, gSaveContext.timerX[sTimerId]) - 26) / sTimerStateTimer);
gSaveContext.timerX[sTimerId] = ((void)0, gSaveContext.timerX[sTimerId]) - j;
- j = (gSaveContext.save.playerData.healthCapacity > 0xA0)
+ j = (gSaveContext.save.saveInfo.playerData.healthCapacity > 0xA0)
? ((((void)0, gSaveContext.timerY[sTimerId]) - 54) / sTimerStateTimer)
: ((((void)0, gSaveContext.timerY[sTimerId]) - 46) / sTimerStateTimer);
gSaveContext.timerY[sTimerId] = ((void)0, gSaveContext.timerY[sTimerId]) - j;
@@ -2805,7 +5743,7 @@ void Interface_DrawTimers(PlayState* play) {
gSaveContext.timerY[sTimerId] = R_MOON_CRASH_TIMER_Y;
} else {
gSaveContext.timerX[sTimerId] = 26;
- if (gSaveContext.save.playerData.healthCapacity > 0xA0) {
+ if (gSaveContext.save.saveInfo.playerData.healthCapacity > 0xA0) {
gSaveContext.timerY[sTimerId] = 54;
} else {
gSaveContext.timerY[sTimerId] = 46;
@@ -2844,8 +5782,9 @@ void Interface_DrawTimers(PlayState* play) {
gSaveContext.timerStates[sTimerId] = TIMER_STATE_COUNTING;
break;
- case TIMER_STATE_ENV_START:
- gSaveContext.timerCurTimes[sTimerId] = SECONDS_TO_TIMER(gSaveContext.save.playerData.health >> 1);
+ case TIMER_STATE_ENV_HAZARD_START:
+ gSaveContext.timerCurTimes[sTimerId] =
+ SECONDS_TO_TIMER(gSaveContext.save.saveInfo.playerData.health >> 1);
gSaveContext.timerDirections[sTimerId] = TIMER_COUNT_DOWN;
gSaveContext.timerTimeLimits[sTimerId] = gSaveContext.timerCurTimes[sTimerId];
sTimerStateTimer = 20;
@@ -2886,13 +5825,13 @@ void Interface_DrawTimers(PlayState* play) {
OSTIME_TO_TIMER(osTime - ((void)0, gSaveContext.timerStartOsTimes[sTimerId]) -
((void)0, gSaveContext.timerPausedOsTimes[sTimerId]));
- if ((gSaveContext.minigameState == 1) &&
+ if ((gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) &&
(gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0))) {
if (gSaveContext.timerStopTimes[sTimerId] >= SECONDS_TO_TIMER(120)) {
gSaveContext.timerStopTimes[sTimerId] = SECONDS_TO_TIMER(120);
gSaveContext.timerCurTimes[sTimerId] = SECONDS_TO_TIMER(120);
}
- } else if ((gSaveContext.eventInf[3] & 0x10) && (play->sceneId == SCENE_DEKUTES) &&
+ } else if (CHECK_EVENTINF(EVENTINF_34) && (play->sceneId == SCENE_DEKUTES) &&
(gSaveContext.timerStopTimes[sTimerId] >= SECONDS_TO_TIMER(120))) {
gSaveContext.timerCurTimes[sTimerId] = SECONDS_TO_TIMER(120);
}
@@ -2953,8 +5892,8 @@ void Interface_DrawTimers(PlayState* play) {
gSaveContext.timerCurTimes[sTimerId] = SECONDS_TO_TIMER(0);
gSaveContext.timerStates[sTimerId] = TIMER_STATE_STOP;
if (sEnvTimerActive) {
- gSaveContext.save.playerData.health = 0;
- play->damagePlayer(play, -(((void)0, gSaveContext.save.playerData.health) + 2));
+ gSaveContext.save.saveInfo.playerData.health = 0;
+ play->damagePlayer(play, -(((void)0, gSaveContext.save.saveInfo.playerData.health) + 2));
}
sEnvTimerActive = false;
}
@@ -2997,11 +5936,12 @@ void Interface_DrawTimers(PlayState* play) {
osTime = SECONDS_TO_TIMER(0);
}
- if ((gSaveContext.minigameState == 1) && (gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0))) {
+ if ((gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) &&
+ (gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0))) {
if (osTime >= SECONDS_TO_TIMER(120)) {
osTime = SECONDS_TO_TIMER(120);
}
- } else if ((gSaveContext.eventInf[3] & 0x10) && (play->sceneId == SCENE_DEKUTES) &&
+ } else if (CHECK_EVENTINF(EVENTINF_34) && (play->sceneId == SCENE_DEKUTES) &&
(osTime >= SECONDS_TO_TIMER(120))) {
osTime = SECONDS_TO_TIMER(120);
}
@@ -3012,15 +5952,17 @@ void Interface_DrawTimers(PlayState* play) {
Interface_GetTimerDigits(osTime, sTimerDigits);
// Use seconds to determine when to beep
- if ((gSaveContext.minigameState == 1) && (gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0))) {
+ if ((gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) &&
+ (gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0))) {
if ((gSaveContext.timerCurTimes[sTimerId] > SECONDS_TO_TIMER(110)) &&
(sTimerBeepSfxSeconds != sTimerDigits[4])) {
play_sound(NA_SE_SY_WARNING_COUNT_E);
sTimerBeepSfxSeconds = sTimerDigits[4];
}
- } else if ((gSaveContext.eventInf[3] & 0x10) && (play->sceneId == SCENE_DEKUTES)) {
+ } else if (CHECK_EVENTINF(EVENTINF_34) && (play->sceneId == SCENE_DEKUTES)) {
if ((((void)0, gSaveContext.timerCurTimes[sTimerId]) >
- (gSaveContext.save.dekuPlaygroundHighScores[CURRENT_DAY - 1] - SECONDS_TO_TIMER(9))) &&
+ (gSaveContext.save.saveInfo.dekuPlaygroundHighScores[CURRENT_DAY - 1] -
+ SECONDS_TO_TIMER(9))) &&
(sTimerBeepSfxSeconds != sTimerDigits[4])) {
play_sound(NA_SE_SY_WARNING_COUNT_E);
sTimerBeepSfxSeconds = sTimerDigits[4];
@@ -3032,9 +5974,9 @@ void Interface_DrawTimers(PlayState* play) {
gDPPipeSync(OVERLAY_DISP++);
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, 255);
gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 0);
- OVERLAY_DISP =
- func_8010CD98(OVERLAY_DISP, gTimerClockIconTex, 0x10, 0x10, ((void)0, gSaveContext.timerX[sTimerId]),
- ((void)0, gSaveContext.timerY[sTimerId]) + 2, 0x10, 0x10, 1 << 10, 1 << 10);
+ OVERLAY_DISP = Gfx_DrawTexRectIA8(
+ OVERLAY_DISP, gTimerClockIconTex, 0x10, 0x10, ((void)0, gSaveContext.timerX[sTimerId]),
+ ((void)0, gSaveContext.timerY[sTimerId]) + 2, 0x10, 0x10, 1 << 10, 1 << 10);
gDPPipeSync(OVERLAY_DISP++);
gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0,
0, PRIMITIVE, 0);
@@ -3049,19 +5991,19 @@ void Interface_DrawTimers(PlayState* play) {
} else {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, 255);
}
- } else if ((gSaveContext.minigameState == 1) &&
+ } else if ((gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) &&
(gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0))) {
if (gSaveContext.timerCurTimes[sTimerId] >= SECONDS_TO_TIMER(110)) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 50, 0, 255);
} else {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, 255);
}
- } else if ((gSaveContext.eventInf[3] & 0x10) && (play->sceneId == SCENE_DEKUTES)) {
+ } else if (CHECK_EVENTINF(EVENTINF_34) && (play->sceneId == SCENE_DEKUTES)) {
if (((void)0, gSaveContext.timerCurTimes[sTimerId]) >=
- gSaveContext.save.dekuPlaygroundHighScores[CURRENT_DAY - 1]) {
+ gSaveContext.save.saveInfo.dekuPlaygroundHighScores[CURRENT_DAY - 1]) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 50, 0, 255);
} else if (((void)0, gSaveContext.timerCurTimes[sTimerId]) >=
- (gSaveContext.save.dekuPlaygroundHighScores[CURRENT_DAY - 1] -
+ (gSaveContext.save.saveInfo.dekuPlaygroundHighScores[CURRENT_DAY - 1] -
SECONDS_TO_TIMER(9))) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 0, 255);
} else {
@@ -3081,7 +6023,7 @@ void Interface_DrawTimers(PlayState* play) {
if (sPostmanBunnyHoodState == POSTMAN_MINIGAME_BUNNY_HOOD_ON) {
// draw sTimerDigits[3] (10s of seconds) to sTimerDigits[6] (100s of milliseconds)
for (j = 0; j < 4; j++) {
- OVERLAY_DISP = func_8010D7D0(
+ OVERLAY_DISP = Gfx_DrawTexRectI8(
OVERLAY_DISP, ((u8*)gCounterDigit0Tex + (8 * 16 * sTimerDigits[j + 3])), 8, 0x10,
((void)0, gSaveContext.timerX[sTimerId]) + sTimerDigitsOffsetX[j],
((void)0, gSaveContext.timerY[sTimerId]), sTimerDigitsWidth[j], 0xFA, 0x370, 0x370);
@@ -3089,7 +6031,7 @@ void Interface_DrawTimers(PlayState* play) {
} else {
// draw sTimerDigits[3] (10s of seconds) to sTimerDigits[7] (10s of milliseconds)
for (j = 0; j < 5; j++) {
- OVERLAY_DISP = func_8010D7D0(
+ OVERLAY_DISP = Gfx_DrawTexRectI8(
OVERLAY_DISP, ((u8*)gCounterDigit0Tex + (8 * 16 * sTimerDigits[j + 3])), 8, 0x10,
((void)0, gSaveContext.timerX[sTimerId]) + sTimerDigitsOffsetX[j],
((void)0, gSaveContext.timerY[sTimerId]), sTimerDigitsWidth[j], 0xFA, 0x370, 0x370);
@@ -3098,7 +6040,7 @@ void Interface_DrawTimers(PlayState* play) {
} else {
// draw sTimerDigits[3] (6s of minutes) to sTimerDigits[7] (10s of milliseconds)
for (j = 0; j < 8; j++) {
- OVERLAY_DISP = func_8010D7D0(
+ OVERLAY_DISP = Gfx_DrawTexRectI8(
OVERLAY_DISP, ((u8*)gCounterDigit0Tex + (8 * 16 * sTimerDigits[j])), 8, 0x10,
((void)0, gSaveContext.timerX[sTimerId]) + sTimerDigitsOffsetX[j],
((void)0, gSaveContext.timerY[sTimerId]), sTimerDigitsWidth[j], 0xFA, 0x370, 0x370);
@@ -3123,7 +6065,7 @@ void Interface_UpdateBottleTimers(PlayState* play) {
s32 pad[2];
// Not satisfying any of these conditions will pause the bottle timer
- if ((play->pauseCtx.state == 0) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) &&
+ if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) &&
(play->gameOverCtx.state == GAMEOVER_INACTIVE) &&
((msgCtx->msgMode == 0) || ((msgCtx->currentTextId >= 0x100) && (msgCtx->currentTextId <= 0x200)) ||
((msgCtx->currentTextId >= 0x1BB2) && (msgCtx->currentTextId <= 0x1BB6))) &&
@@ -3169,7 +6111,7 @@ void Interface_UpdateBottleTimers(PlayState* play) {
// Time has passed, and the time limit has been exceeded.
gSaveContext.bottleTimerCurTimes[i] = SECONDS_TO_TIMER(0);
- if (gSaveContext.save.inventory.items[i + SLOT_BOTTLE_1] == ITEM_HOT_SPRING_WATER) {
+ if (gSaveContext.save.saveInfo.inventory.items[i + SLOT_BOTTLE_1] == ITEM_HOT_SPRING_WATER) {
Inventory_UpdateItem(play, i + SLOT_BOTTLE_1, ITEM_SPRING_WATER);
Message_StartTextbox(play, 0xFA, NULL);
}
@@ -3183,66 +6125,1200 @@ void Interface_UpdateBottleTimers(PlayState* play) {
}
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8011E730.s")
+void Interface_DrawMinigameIcons(PlayState* play) {
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ s16 i;
+ s16 numDigitsDrawn;
+ s16 rectX;
+ s16 rectY;
+ s16 width;
+ s16 height;
-// rupeeDigitsFirst
-s16 D_801BFD1C[] = { 1, 0, 0, 0 };
-// rupeeDigitsCount
-s16 D_801BFD24[] = { 2, 3, 3, 0 };
-// rupeeIconPrimColor
-Color_RGB16 D_801BFD2C[] = {
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C654(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
+ if (interfaceCtx->unk_212 == DO_ACTION_FASTER) {
+ // Load Carrot Icon
+ gDPLoadTextureBlock(OVERLAY_DISP++, gCarrotIconTex, G_IM_FMT_RGBA, G_IM_SIZ_32b, 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);
+
+ rectX = 110;
+ rectY = (interfaceCtx->minigameState != MINIGAME_STATE_NONE) ? 200 : 56;
+
+ // Draw 6 carrots
+ for (i = 1; i < 7; i++, rectX += 16) {
+ // Carrot Color (based on availability)
+ if ((interfaceCtx->numHorseBoosts == 0) || (interfaceCtx->numHorseBoosts < i)) {
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 150, 255, interfaceCtx->aAlpha);
+ } else {
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->aAlpha);
+ }
+
+ gSPTextureRectangle(OVERLAY_DISP++, rectX << 2, rectY << 2, (rectX + 16) << 2, (rectY + 16) << 2,
+ G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+ }
+ }
+
+ if (gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) {
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
+ PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ width = 24;
+ height = 16;
+ rectX = 20;
+ if (gSaveContext.save.saveInfo.playerData.healthCapacity > 0xA0) {
+ rectY = 75; // two rows of hearts
+ } else {
+ rectY = 67; // one row of hearts
+ }
+
+ if (gSaveContext.save.entrance == ENTRANCE(WATERFALL_RAPIDS, 1)) {
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->bAlpha);
+ gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255);
+ gDPLoadTextureBlock(OVERLAY_DISP++, gBeaverRingIconTex, G_IM_FMT_RGBA, G_IM_SIZ_32b, 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);
+ } else if (play->sceneId == SCENE_DOUJOU) {
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 140, 50, interfaceCtx->bAlpha);
+ gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255);
+ gDPLoadTextureBlock(OVERLAY_DISP++, gSwordTrainingLogIconTex, 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);
+ } else if (play->sceneId == SCENE_30GYOSON) {
+ width = 16;
+ height = 30;
+ rectX = 24;
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 100, 75, interfaceCtx->bAlpha);
+ gDPSetEnvColor(OVERLAY_DISP++, 55, 55, 0, 255);
+ gDPLoadTextureBlock(OVERLAY_DISP++, gFishermanMinigameTorchIconTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 30, 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 {
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->bAlpha);
+ gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255);
+ gDPLoadTextureBlock(OVERLAY_DISP++, gArcheryScoreIconTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 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);
+ }
+
+ gSPTextureRectangle(OVERLAY_DISP++, (rectX << 2), (rectY << 2), ((rectX + width) << 2),
+ ((rectY + height) << 2), G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->bAlpha);
+ gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0,
+ 0, PRIMITIVE, 0);
+
+ if (play->sceneId == SCENE_30GYOSON) {
+ rectX += 20;
+ if (gSaveContext.save.saveInfo.playerData.healthCapacity > 0xA0) {
+ rectY = 87; // two rows of hearts
+ } else {
+ rectY = 79; // one row of hearts
+ }
+ } else {
+ rectX += 26;
+ }
+
+ for (i = 0, numDigitsDrawn = 0; i < 4; i++) {
+ if ((sMinigameScoreDigits[i] != 0) || (numDigitsDrawn != 0) || (i >= 3)) {
+ OVERLAY_DISP =
+ Gfx_DrawTexRectI8(OVERLAY_DISP, ((u8*)gCounterDigit0Tex + (8 * 16 * sMinigameScoreDigits[i])),
+ 8, 0x10, rectX, rectY - 2, 9, 0xFA, 0x370, 0x370);
+ rectX += 9;
+ numDigitsDrawn++;
+ }
+ }
+
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ }
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+s16 sRupeeDigitsFirst[] = { 1, 0, 0, 0 };
+
+s16 sRupeeDigitsCount[] = { 2, 3, 3, 0 };
+
+Color_RGB16 sRupeeCounterIconPrimColors[] = {
{ 200, 255, 100 },
{ 170, 170, 255 },
{ 255, 105, 105 },
};
-// rupeeIconEnvColor
-Color_RGB16 D_801BFD40[] = {
+
+Color_RGB16 sRupeeCounterIconEnvColors[] = {
{ 0, 80, 0 },
{ 10, 10, 80 },
{ 40, 10, 0 },
};
-// minigameCountdownTexs
-TexturePtr D_801BFD54[] = {
+
+TexturePtr sMinigameCountdownTextures[] = {
gMinigameCountdown3Tex,
gMinigameCountdown2Tex,
gMinigameCountdown1Tex,
gMinigameCountdownGoTex,
};
-// minigameCountdownTexHeights
-s16 D_801BFD64[] = { 24, 24, 24, 40 };
-// minigameCountdownPrimColor
-Color_RGB16 D_801BFD6C[] = {
+
+s16 sMinigameCountdownTexWidths[] = { 24, 24, 24, 40 };
+
+Color_RGB16 sMinigameCountdownPrimColors[] = {
{ 100, 255, 100 },
{ 255, 255, 60 },
{ 255, 100, 0 },
{ 120, 170, 255 },
};
-// grandma's story pictures
-TexturePtr D_801BFD84[] = {
+
+TexturePtr sStoryTextures[] = {
gStoryMaskFestivalTex,
gStoryGiantsLeavingTex,
};
-// grandma's story TLUT
-TexturePtr D_801BFD8C[] = {
+
+TexturePtr sStoryTLUTs[] = {
gStoryMaskFestivalTLUT,
gStoryGiantsLeavingTLUT,
};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_8011F0E0.s")
+void Interface_Draw(PlayState* play) {
+ s32 pad;
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ Player* player = GET_PLAYER(play);
+ Gfx* gfx;
+ s16 sp2CE;
+ s16 sp2CC;
+ s16 sp2CA;
+ s16 sp2C8;
+ PauseContext* pauseCtx = &play->pauseCtx;
+ f32 minigameCountdownScale;
+ s16 counterDigits[4];
+ s16 magicAlpha;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80120F90.s")
+ OPEN_DISPS(play->state.gfxCtx);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80121064.s")
+ gSPSegment(OVERLAY_DISP++, 0x02, interfaceCtx->parameterSegment);
+ gSPSegment(OVERLAY_DISP++, 0x09, interfaceCtx->doActionSegment);
+ gSPSegment(OVERLAY_DISP++, 0x08, interfaceCtx->iconItemSegment);
+ gSPSegment(OVERLAY_DISP++, 0x0B, interfaceCtx->mapSegment);
-u8 D_801BFD94 = 0;
-s16 D_801BFD98 = 0;
-s16 D_801BFD9C = 0;
+ if (pauseCtx->debugEditor == DEBUG_EDITOR_NONE) {
+ Interface_SetVertices(play);
+ Interface_SetOrthoView(interfaceCtx);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_801210E0.s")
+ // Draw Grandma's Story
+ if (interfaceCtx->storyDmaStatus == STORY_DMA_DONE) {
+ gSPSegment(OVERLAY_DISP++, 0x07, interfaceCtx->storySegment);
+ func_8012C628(play->state.gfxCtx);
+
+ gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_POINT);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
+
+ // Load in Grandma's Story
+ gSPLoadUcodeL(OVERLAY_DISP++, gspS2DEX2_fifo);
+ gfx = OVERLAY_DISP;
+ Prerender_DrawBackground2D(&gfx, sStoryTextures[interfaceCtx->storyType],
+ sStoryTLUTs[interfaceCtx->storyType], SCREEN_WIDTH, SCREEN_HEIGHT, 2, 1, 0x8000,
+ 0x100, 0.0f, 0.0f, 1.0f, 1.0f, 0);
+ OVERLAY_DISP = gfx;
+ gSPLoadUcode(OVERLAY_DISP++, SysUcode_GetUCode(), SysUcode_GetUCodeData());
+
+ gDPPipeSync(OVERLAY_DISP++);
+
+ // Fill the screen with a black rectangle
+ gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
+ gDPSetCombineMode(OVERLAY_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, R_STORY_FILL_SCREEN_ALPHA);
+ gDPFillRectangle(OVERLAY_DISP++, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
+ }
+
+ LifeMeter_Draw(play);
+
+ func_8012C654(play->state.gfxCtx);
+
+ // Draw Rupee Icon
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sRupeeCounterIconPrimColors[CUR_UPG_VALUE(UPG_WALLET)].r,
+ sRupeeCounterIconPrimColors[CUR_UPG_VALUE(UPG_WALLET)].g,
+ sRupeeCounterIconPrimColors[CUR_UPG_VALUE(UPG_WALLET)].b, interfaceCtx->magicAlpha);
+ gDPSetEnvColor(OVERLAY_DISP++, sRupeeCounterIconEnvColors[CUR_UPG_VALUE(UPG_WALLET)].r,
+ sRupeeCounterIconEnvColors[CUR_UPG_VALUE(UPG_WALLET)].g,
+ sRupeeCounterIconEnvColors[CUR_UPG_VALUE(UPG_WALLET)].b, 255);
+ OVERLAY_DISP =
+ Gfx_DrawTexRectIA8(OVERLAY_DISP, gRupeeCounterIconTex, 16, 16, 26, 206, 16, 16, 1 << 10, 1 << 10);
+
+ switch (play->sceneId) {
+ case SCENE_INISIE_N:
+ case SCENE_INISIE_R:
+ case SCENE_MITURIN:
+ case SCENE_HAKUGIN:
+ case SCENE_SEA:
+ if (DUNGEON_KEY_COUNT(gSaveContext.mapIndex) >= 0) {
+ // Small Key Icon
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 200, 230, 255, interfaceCtx->magicAlpha);
+ gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 20, 255);
+ OVERLAY_DISP = Gfx_DrawTexRectIA8(OVERLAY_DISP, gSmallKeyCounterIconTex, 16, 16, 26, 190, 16, 16,
+ 1 << 10, 1 << 10);
+
+ // Small Key Counter
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE,
+ TEXEL0, 0, PRIMITIVE, 0);
+
+ counterDigits[2] = 0;
+ counterDigits[3] = DUNGEON_KEY_COUNT(gSaveContext.mapIndex);
+
+ while (counterDigits[3] >= 10) {
+ counterDigits[2]++;
+ counterDigits[3] -= 10;
+ }
+
+ sp2CA = 42;
+
+ if (counterDigits[2] != 0) {
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, interfaceCtx->magicAlpha);
+
+ OVERLAY_DISP =
+ Gfx_DrawTexRectI8(OVERLAY_DISP, (u8*)gCounterDigit0Tex + (8 * 16 * counterDigits[2]), 8, 16,
+ 43, 191, 8, 16, 1 << 10, 1 << 10);
+
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->magicAlpha);
+ gSPTextureRectangle(OVERLAY_DISP++, 168, 760, 200, 824, G_TX_RENDERTILE, 0, 0, 1 << 10,
+ 1 << 10);
+
+ sp2CA += 8;
+ }
+
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, interfaceCtx->magicAlpha);
+
+ OVERLAY_DISP = Gfx_DrawTexRectI8(OVERLAY_DISP, (u8*)gCounterDigit0Tex + (8 * 16 * counterDigits[3]),
+ 8, 16, sp2CA + 1, 191, 8, 16, 1 << 10, 1 << 10);
+
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->magicAlpha);
+ gSPTextureRectangle(OVERLAY_DISP++, sp2CA * 4, 760, (sp2CA * 4) + 0x20, 824, G_TX_RENDERTILE, 0, 0,
+ 1 << 10, 1 << 10);
+ }
+ break;
+
+ case SCENE_KINSTA1:
+ case SCENE_KINDAN2:
+ // Gold Skulltula Icon
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->magicAlpha);
+ gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255);
+ gDPLoadTextureBlock(OVERLAY_DISP++, gGoldSkulltulaCounterIconTex, G_IM_FMT_RGBA, G_IM_SIZ_32b, 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);
+ gSPTextureRectangle(OVERLAY_DISP++, 80, 748, 176, 820, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+
+ // Gold Skulluta Counter
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE,
+ TEXEL0, 0, PRIMITIVE, 0);
+
+ counterDigits[2] = 0;
+ counterDigits[3] = Inventory_GetSkullTokenCount(play->sceneId);
+
+ while (counterDigits[3] >= 10) {
+ counterDigits[2]++;
+ counterDigits[3] -= 10;
+ }
+
+ sp2CA = 42;
+
+ if (counterDigits[2] != 0) {
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, interfaceCtx->magicAlpha);
+
+ OVERLAY_DISP = Gfx_DrawTexRectI8(OVERLAY_DISP, (u8*)gCounterDigit0Tex + (8 * 16 * counterDigits[2]),
+ 8, 16, 43, 191, 8, 16, 1 << 10, 1 << 10);
+
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->magicAlpha);
+ gSPTextureRectangle(OVERLAY_DISP++, 168, 760, 200, 824, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+
+ sp2CA += 8;
+ }
+
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, interfaceCtx->magicAlpha);
+
+ OVERLAY_DISP = Gfx_DrawTexRectI8(OVERLAY_DISP, (u8*)gCounterDigit0Tex + (8 * 16 * counterDigits[3]), 8,
+ 16, sp2CA + 1, 191, 8, 16, 1 << 10, 1 << 10);
+
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->magicAlpha);
+ gSPTextureRectangle(OVERLAY_DISP++, sp2CA * 4, 760, (sp2CA * 4) + 0x20, 824, G_TX_RENDERTILE, 0, 0,
+ 1 << 10, 1 << 10);
+ break;
+
+ default:
+ break;
+ }
+
+ // Rupee Counter
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0,
+ PRIMITIVE, 0);
+
+ counterDigits[0] = counterDigits[1] = 0;
+ counterDigits[2] = gSaveContext.save.saveInfo.playerData.rupees;
+
+ if ((counterDigits[2] > 9999) || (counterDigits[2] < 0)) {
+ counterDigits[2] &= 0xDDD;
+ }
+
+ while (counterDigits[2] >= 100) {
+ counterDigits[0]++;
+ counterDigits[2] -= 100;
+ }
+
+ while (counterDigits[2] >= 10) {
+ counterDigits[1]++;
+ counterDigits[2] -= 10;
+ }
+
+ sp2CC = sRupeeDigitsFirst[CUR_UPG_VALUE(UPG_WALLET)];
+ sp2C8 = sRupeeDigitsCount[CUR_UPG_VALUE(UPG_WALLET)];
+
+ magicAlpha = interfaceCtx->magicAlpha;
+ if (magicAlpha > 180) {
+ magicAlpha = 180;
+ }
+
+ for (sp2CE = 0, sp2CA = 42; sp2CE < sp2C8; sp2CE++, sp2CC++, sp2CA += 8) {
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, magicAlpha);
+
+ OVERLAY_DISP = Gfx_DrawTexRectI8(OVERLAY_DISP, (u8*)gCounterDigit0Tex + (8 * 16 * counterDigits[sp2CC]), 8,
+ 16, sp2CA + 1, 207, 8, 16, 1 << 10, 1 << 10);
+
+ gDPPipeSync(OVERLAY_DISP++);
+
+ if (gSaveContext.save.saveInfo.playerData.rupees == CUR_CAPACITY(UPG_WALLET)) {
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 120, 255, 0, interfaceCtx->magicAlpha);
+ } else if (gSaveContext.save.saveInfo.playerData.rupees != 0) {
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->magicAlpha);
+ } else {
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 100, 100, 100, interfaceCtx->magicAlpha);
+ }
+
+ gSPTextureRectangle(OVERLAY_DISP++, sp2CA * 4, 824, (sp2CA * 4) + 0x20, 888, G_TX_RENDERTILE, 0, 0, 1 << 10,
+ 1 << 10);
+ }
+
+ Magic_DrawMeter(play);
+ Minimap_Draw(play);
+
+ if ((R_PAUSE_BG_PRERENDER_STATE != 2) && (R_PAUSE_BG_PRERENDER_STATE != 3)) {
+ Actor_DrawZTarget(&play->actorCtx.targetContext, play);
+ }
+
+ func_8012C654(play->state.gfxCtx);
+
+ Interface_DrawItemButtons(play);
+
+ if (player->transformation == ((void)0, gSaveContext.save.playerForm)) {
+ Interface_DrawBButtonIcons(play);
+ }
+ Interface_DrawCButtonIcons(play);
+
+ Interface_DrawAButton(play);
+
+ Interface_DrawPauseMenuEquippingIcons(play);
+
+ // Draw either the minigame countdown or the three-day clock
+ if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) {
+ if ((interfaceCtx->minigameState != MINIGAME_STATE_NONE) &&
+ (interfaceCtx->minigameState < MINIGAME_STATE_NO_COUNTDOWN_SETUP)) {
+ // Minigame Countdown
+ if (((u32)interfaceCtx->minigameState % 2) == 0) {
+
+ sp2CE = (interfaceCtx->minigameState >> 1) - 1;
+ minigameCountdownScale = interfaceCtx->minigameCountdownScale / 100.0f;
+
+ if (sp2CE == 3) {
+ interfaceCtx->actionVtx[40 + 0].v.ob[0] = interfaceCtx->actionVtx[40 + 2].v.ob[0] = -20;
+ interfaceCtx->actionVtx[40 + 1].v.ob[0] = interfaceCtx->actionVtx[40 + 3].v.ob[0] =
+ interfaceCtx->actionVtx[40 + 0].v.ob[0] + 40;
+ interfaceCtx->actionVtx[40 + 1].v.tc[0] = interfaceCtx->actionVtx[40 + 3].v.tc[0] = 40 << 5;
+ }
+
+ interfaceCtx->actionVtx[40 + 2].v.tc[1] = interfaceCtx->actionVtx[40 + 3].v.tc[1] = 32 << 5;
+
+ func_8012C8D4(play->state.gfxCtx);
+
+ gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sMinigameCountdownPrimColors[sp2CE].r,
+ sMinigameCountdownPrimColors[sp2CE].g, sMinigameCountdownPrimColors[sp2CE].b,
+ interfaceCtx->minigameCountdownAlpha);
+
+ Matrix_Translate(0.0f, -40.0f, 0.0f, MTXMODE_NEW);
+ Matrix_Scale(minigameCountdownScale, minigameCountdownScale, 0.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[40], 4, 0);
+
+ OVERLAY_DISP = Gfx_DrawTexQuadIA8(OVERLAY_DISP, sMinigameCountdownTextures[sp2CE],
+ sMinigameCountdownTexWidths[sp2CE], 32, 0);
+ }
+ } else {
+ Interface_DrawClock(play);
+ }
+ }
+
+ // Draw the letters of minigame perfect
+ if (interfaceCtx->perfectLettersOn) {
+ Interface_DrawPerfectLetters(play);
+ }
+
+ Interface_DrawMinigameIcons(play);
+ Interface_DrawTimers(play);
+ }
+
+ // Draw pictograph focus icons
+ if (sPictoState == PICTO_BOX_STATE_LENS) {
+
+ func_8012C654(play->state.gfxCtx);
+
+ gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD);
+ gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
+ gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, 255);
+ gDPLoadTextureBlock_4b(OVERLAY_DISP++, gPictoBoxFocusBorderTex, 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);
+
+ gSPTextureRectangle(OVERLAY_DISP++, R_PICTO_FOCUS_BORDER_TOPLEFT_X << 2, R_PICTO_FOCUS_BORDER_TOPLEFT_Y << 2,
+ (R_PICTO_FOCUS_BORDER_TOPLEFT_X << 2) + (16 << 2),
+ (R_PICTO_FOCUS_BORDER_TOPLEFT_Y << 2) + (16 << 2), G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+ gSPTextureRectangle(OVERLAY_DISP++, R_PICTO_FOCUS_BORDER_TOPRIGHT_X << 2, R_PICTO_FOCUS_BORDER_TOPRIGHT_Y << 2,
+ (R_PICTO_FOCUS_BORDER_TOPRIGHT_X << 2) + (16 << 2),
+ (R_PICTO_FOCUS_BORDER_TOPRIGHT_Y << 2) + (16 << 2), G_TX_RENDERTILE, 512, 0, 1 << 10,
+ 1 << 10);
+ gSPTextureRectangle(
+ OVERLAY_DISP++, R_PICTO_FOCUS_BORDER_BOTTOMLEFT_X << 2, R_PICTO_FOCUS_BORDER_BOTTOMLEFT_Y << 2,
+ (R_PICTO_FOCUS_BORDER_BOTTOMLEFT_X << 2) + (16 << 2), (R_PICTO_FOCUS_BORDER_BOTTOMLEFT_Y << 2) + (16 << 2),
+ G_TX_RENDERTILE, 0, 512, 1 << 10, 1 << 10);
+ gSPTextureRectangle(
+ OVERLAY_DISP++, R_PICTO_FOCUS_BORDER_BOTTOMRIGHT_X << 2, R_PICTO_FOCUS_BORDER_BOTTOMRIGHT_Y << 2,
+ (R_PICTO_FOCUS_BORDER_BOTTOMRIGHT_X << 2) + (16 << 2),
+ (R_PICTO_FOCUS_BORDER_BOTTOMRIGHT_Y << 2) + (16 << 2), G_TX_RENDERTILE, 512, 512, 1 << 10, 1 << 10);
+
+ gDPLoadTextureBlock_4b(OVERLAY_DISP++, gPictoBoxFocusIconTex, G_IM_FMT_I, 32, 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);
+
+ gSPTextureRectangle(OVERLAY_DISP++, R_PICTO_FOCUS_ICON_X << 2, R_PICTO_FOCUS_ICON_Y << 2,
+ (R_PICTO_FOCUS_ICON_X << 2) + 0x80, (R_PICTO_FOCUS_ICON_Y << 2) + (16 << 2),
+ G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+
+ gDPLoadTextureBlock_4b(OVERLAY_DISP++, gPictoBoxFocusTextTex, G_IM_FMT_I, 32, 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);
+
+ gSPTextureRectangle(OVERLAY_DISP++, R_PICTO_FOCUS_TEXT_X << 2, R_PICTO_FOCUS_TEXT_Y << 2,
+ (R_PICTO_FOCUS_TEXT_X << 2) + 0x80, (R_PICTO_FOCUS_TEXT_Y << 2) + 0x20, G_TX_RENDERTILE, 0,
+ 0, 1 << 10, 1 << 10);
+ }
+
+ // 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,
+ (u8*)gSaveContext.pictoPhotoI5, PICTO_PHOTO_WIDTH * PICTO_PHOTO_HEIGHT);
+
+ interfaceCtx->unk_222 = interfaceCtx->unk_224 = 0;
+
+ sPictoState = PICTO_BOX_STATE_OFF;
+ gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
+ Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
+ } else {
+ s16 pictoRectTop;
+ s16 pictoRectLeft;
+
+ if (sPictoState == PICTO_BOX_STATE_SETUP_PHOTO) {
+ sPictoState = PICTO_BOX_STATE_PHOTO;
+ Message_StartTextbox(play, 0xF8, NULL);
+ Interface_SetHudVisibility(HUD_VISIBILITY_NONE);
+ player->stateFlags1 |= PLAYER_STATE1_200;
+ }
+
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
+ gDPSetCombineMode(OVERLAY_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 200, 200, 200, 250);
+ gDPFillRectangle(OVERLAY_DISP++, 70, 22, 251, 151);
+
+ func_8012C654(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);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 250, 160, 160, 255);
+
+ // Picture is offset up by 33 pixels to give room for the message box at the bottom
+ pictoRectTop = PICTO_PHOTO_TOPLEFT_Y - 33;
+ 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) +
+ (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);
+
+ gSPTextureRectangle(OVERLAY_DISP++, pictoRectLeft << 2, pictoRectTop << 2,
+ (pictoRectLeft + PICTO_PHOTO_WIDTH) << 2, (pictoRectTop << 2) + (8 << 2),
+ G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+ }
+ }
+ }
+
+ // Draw over the entire screen (used in gameover)
+ if (interfaceCtx->screenFillAlpha != 0) {
+ gDPPipeSync(OVERLAY_DISP++);
+ gSPDisplayList(OVERLAY_DISP++, sScreenFillSetupDL);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, interfaceCtx->screenFillAlpha);
+ gSPDisplayList(OVERLAY_DISP++, D_0E000000.fillRect);
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void Interface_LoadStory(PlayState* play, s32 osMesgFlag) {
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+
+ switch (interfaceCtx->storyDmaStatus) {
+ case STORY_DMA_IDLE:
+ if (interfaceCtx->storySegment == NULL) {
+ break;
+ }
+ osCreateMesgQueue(&interfaceCtx->storyMsgQueue, &interfaceCtx->storyMsgBuf, 1);
+ DmaMgr_SendRequestImpl(&interfaceCtx->dmaRequest, interfaceCtx->storySegment, interfaceCtx->storyAddr,
+ interfaceCtx->storySize, 0, &interfaceCtx->storyMsgQueue, NULL);
+ interfaceCtx->storyDmaStatus = STORY_DMA_LOADING;
+ // fallthrough
+ case STORY_DMA_LOADING:
+ if (osRecvMesg(&interfaceCtx->storyMsgQueue, NULL, osMesgFlag) == 0) {
+ interfaceCtx->storyDmaStatus = STORY_DMA_DONE;
+ }
+ break;
+
+ default: // STORY_DMA_DONE
+ break;
+ }
+}
+
+void Interface_AllocStory(PlayState* play) {
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+
+ interfaceCtx->storyAddr = SEGMENT_ROM_START(story_static);
+ interfaceCtx->storySize = SEGMENT_ROM_SIZE(story_static);
+
+ if (interfaceCtx->storySegment == NULL) {
+ interfaceCtx->storySegment = ZeldaArena_Malloc(interfaceCtx->storySize);
+ }
+ Interface_LoadStory(play, OS_MESG_NOBLOCK);
+}
+
+void Interface_Update(PlayState* play) {
+ static u8 sIsSunsPlayedAtDay = false;
+ static s16 sPrevTimeSpeed = 0;
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ MessageContext* msgCtx = &play->msgCtx;
+ Player* player = GET_PLAYER(play);
+ s16 dimmingAlpha;
+ s16 risingAlpha;
+ u16 aButtonDoAction;
+
+ // Update buttons
+ if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) {
+ if (play->gameOverCtx.state == GAMEOVER_INACTIVE) {
+ Interface_UpdateButtonsPart1(play);
+ }
+ }
+
+ // Update hud visibility
+ switch (gSaveContext.nextHudVisibility) {
+ case HUD_VISIBILITY_NONE:
+ case HUD_VISIBILITY_NONE_ALT:
+ case HUD_VISIBILITY_B:
+ dimmingAlpha = 255 - (gSaveContext.hudVisibilityTimer << 5);
+ if (dimmingAlpha < 0) {
+ dimmingAlpha = 0;
+ }
+
+ Interface_UpdateHudAlphas(play, dimmingAlpha);
+ gSaveContext.hudVisibilityTimer += 2;
+ if (dimmingAlpha == 0) {
+ gSaveContext.nextHudVisibility = HUD_VISIBILITY_IDLE;
+ }
+ break;
+
+ case HUD_VISIBILITY_HEARTS_WITH_OVERWRITE:
+ case HUD_VISIBILITY_A:
+ case HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE:
+ case HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE:
+ case HUD_VISIBILITY_ALL_NO_MINIMAP_W_DISABLED:
+ case HUD_VISIBILITY_HEARTS_MAGIC:
+ case HUD_VISIBILITY_B_ALT:
+ case HUD_VISIBILITY_HEARTS:
+ case HUD_VISIBILITY_A_B_MINIMAP:
+ case HUD_VISIBILITY_HEARTS_MAGIC_WITH_OVERWRITE:
+ case HUD_VISIBILITY_HEARTS_MAGIC_C:
+ case HUD_VISIBILITY_ALL_NO_MINIMAP:
+ case HUD_VISIBILITY_A_B_C:
+ case HUD_VISIBILITY_B_MINIMAP:
+ case HUD_VISIBILITY_HEARTS_MAGIC_MINIMAP:
+ case HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP:
+ case HUD_VISIBILITY_B_MAGIC:
+ case HUD_VISIBILITY_A_B:
+ case HUD_VISIBILITY_A_B_HEARTS_MAGIC_MINIMAP:
+ dimmingAlpha = 255 - (gSaveContext.hudVisibilityTimer << 5);
+ if (dimmingAlpha < 0) {
+ dimmingAlpha = 0;
+ }
+
+ Interface_UpdateHudAlphas(play, dimmingAlpha);
+ gSaveContext.hudVisibilityTimer++;
+ if (dimmingAlpha == 0) {
+ gSaveContext.nextHudVisibility = HUD_VISIBILITY_IDLE;
+ }
+ break;
+
+ case HUD_VISIBILITY_ALL:
+ dimmingAlpha = 255 - (gSaveContext.hudVisibilityTimer << 5);
+ if (dimmingAlpha < 0) {
+ dimmingAlpha = 0;
+ }
+
+ risingAlpha = 255 - dimmingAlpha;
+ if (risingAlpha >= 255) {
+ risingAlpha = 255;
+ }
+
+ Interface_UpdateButtonAlphasByStatus(play, risingAlpha);
+
+ if (gSaveContext.buttonStatus[5] == BTN_DISABLED) {
+ if (interfaceCtx->startAlpha != 70) {
+ interfaceCtx->startAlpha = 70;
+ }
+ } else {
+ if (interfaceCtx->startAlpha != 255) {
+ interfaceCtx->startAlpha = risingAlpha;
+ }
+ }
+
+ if (interfaceCtx->healthAlpha != 255) {
+ interfaceCtx->healthAlpha = risingAlpha;
+ }
+
+ if (interfaceCtx->magicAlpha != 255) {
+ interfaceCtx->magicAlpha = risingAlpha;
+ }
+
+ if (play->sceneId == SCENE_SPOT00) {
+ if (interfaceCtx->minimapAlpha < 170) {
+ interfaceCtx->minimapAlpha = risingAlpha;
+ } else {
+ interfaceCtx->minimapAlpha = 170;
+ }
+ } else if (interfaceCtx->minimapAlpha != 255) {
+ interfaceCtx->minimapAlpha = risingAlpha;
+ }
+
+ gSaveContext.hudVisibilityTimer++;
+
+ if (risingAlpha == 255) {
+ gSaveContext.nextHudVisibility = HUD_VISIBILITY_IDLE;
+ }
+
+ break;
+
+ case HUD_VISIBILITY_NONE_INSTANT:
+ // Turn off all Hud immediately
+ gSaveContext.nextHudVisibility = HUD_VISIBILITY_NONE;
+ Interface_UpdateHudAlphas(play, 0);
+ gSaveContext.nextHudVisibility = HUD_VISIBILITY_IDLE;
+ // fallthrough
+ default:
+ break;
+ }
+
+ Map_Update(play);
+
+ // Update health
+ if (gSaveContext.healthAccumulator != 0) {
+ gSaveContext.healthAccumulator -= 4;
+ gSaveContext.save.saveInfo.playerData.health += 4;
+
+ if ((gSaveContext.save.saveInfo.playerData.health & 0xF) < 4) {
+ play_sound(NA_SE_SY_HP_RECOVER);
+ }
+
+ if (((void)0, gSaveContext.save.saveInfo.playerData.health) >=
+ ((void)0, gSaveContext.save.saveInfo.playerData.healthCapacity)) {
+ gSaveContext.save.saveInfo.playerData.health = gSaveContext.save.saveInfo.playerData.healthCapacity;
+ gSaveContext.healthAccumulator = 0;
+ }
+ }
+
+ LifeMeter_UpdateSizeAndBeep(play);
+
+ // Update environmental hazard (remnant of OoT)
+ sEnvHazard = Player_GetEnvironmentalHazard(play);
+ if (sEnvHazard == PLAYER_ENV_HAZARD_HOTROOM) {
+ if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_TUNIC) == EQUIP_VALUE_TUNIC_GORON) {
+ sEnvHazard = PLAYER_ENV_HAZARD_NONE;
+ }
+ } else if ((Player_GetEnvironmentalHazard(play) >= PLAYER_ENV_HAZARD_UNDERWATER_FLOOR) &&
+ (Player_GetEnvironmentalHazard(play) <= PLAYER_ENV_HAZARD_UNDERWATER_FREE)) {
+ if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_TUNIC) == EQUIP_VALUE_TUNIC_ZORA) {
+ sEnvHazard = PLAYER_ENV_HAZARD_NONE;
+ }
+ }
+
+ LifeMeter_UpdateColors(play);
+
+ // Update rupees
+ if (gSaveContext.rupeeAccumulator != 0) {
+ if (gSaveContext.rupeeAccumulator > 0) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < CUR_CAPACITY(UPG_WALLET)) {
+ gSaveContext.rupeeAccumulator--;
+ gSaveContext.save.saveInfo.playerData.rupees++;
+ play_sound(NA_SE_SY_RUPY_COUNT);
+ } else {
+ // Max rupees
+ gSaveContext.save.saveInfo.playerData.rupees = CUR_CAPACITY(UPG_WALLET);
+ gSaveContext.rupeeAccumulator = 0;
+ }
+ } else if (gSaveContext.save.saveInfo.playerData.rupees != 0) {
+ if (gSaveContext.rupeeAccumulator <= -50) {
+ gSaveContext.rupeeAccumulator += 10;
+ gSaveContext.save.saveInfo.playerData.rupees -= 10;
+ if (gSaveContext.save.saveInfo.playerData.rupees < 0) {
+ gSaveContext.save.saveInfo.playerData.rupees = 0;
+ }
+ play_sound(NA_SE_SY_RUPY_COUNT);
+ } else {
+ gSaveContext.rupeeAccumulator++;
+ gSaveContext.save.saveInfo.playerData.rupees--;
+ play_sound(NA_SE_SY_RUPY_COUNT);
+ }
+ } else {
+ gSaveContext.rupeeAccumulator = 0;
+ }
+ }
+
+ // Update perfect letters
+ if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) {
+ if (interfaceCtx->perfectLettersOn) {
+ if (interfaceCtx->perfectLettersType == PERFECT_LETTERS_TYPE_1) {
+ Interface_UpdatePerfectLettersType1(play);
+ } else if (interfaceCtx->perfectLettersType == PERFECT_LETTERS_TYPE_2) {
+ Interface_UpdatePerfectLettersType2(play);
+ } else if (interfaceCtx->perfectLettersType == PERFECT_LETTERS_TYPE_3) {
+ Interface_UpdatePerfectLettersType3(play);
+ }
+ }
+ }
+
+ // Update minigame State
+ if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) {
+ if ((u32)interfaceCtx->minigameState != MINIGAME_STATE_NONE) {
+ switch (interfaceCtx->minigameState) {
+ case MINIGAME_STATE_COUNTDOWN_SETUP_3:
+ case MINIGAME_STATE_COUNTDOWN_SETUP_2:
+ case MINIGAME_STATE_COUNTDOWN_SETUP_1:
+ case MINIGAME_STATE_COUNTDOWN_SETUP_GO:
+ interfaceCtx->minigameCountdownAlpha = 255;
+ interfaceCtx->minigameCountdownScale = 100;
+ interfaceCtx->minigameState++;
+ if (interfaceCtx->minigameState == MINIGAME_STATE_COUNTDOWN_GO) {
+ interfaceCtx->minigameCountdownScale = 160;
+ play_sound(NA_SE_SY_START_SHOT);
+ } else {
+ play_sound(NA_SE_SY_WARNING_COUNT_E);
+ }
+ break;
+
+ case MINIGAME_STATE_COUNTDOWN_3:
+ case MINIGAME_STATE_COUNTDOWN_2:
+ case MINIGAME_STATE_COUNTDOWN_1:
+ interfaceCtx->minigameCountdownAlpha -= 10;
+ interfaceCtx->minigameCountdownScale += 3;
+ if (interfaceCtx->minigameCountdownAlpha < 22) {
+ interfaceCtx->minigameState++;
+ }
+ break;
+
+ case MINIGAME_STATE_COUNTDOWN_GO:
+ interfaceCtx->minigameCountdownAlpha -= 10;
+ if (interfaceCtx->minigameCountdownAlpha <= 150) {
+ interfaceCtx->minigameState = MINIGAME_STATE_PLAYING;
+ }
+ break;
+
+ case MINIGAME_STATE_NO_COUNTDOWN_SETUP:
+ interfaceCtx->minigameCountdownAlpha = 0;
+ interfaceCtx->minigameState++;
+ break;
+
+ case MINIGAME_STATE_NO_COUNTDOWN:
+ interfaceCtx->minigameCountdownAlpha++;
+ if (interfaceCtx->minigameCountdownAlpha >= 18) {
+ interfaceCtx->minigameState = MINIGAME_STATE_PLAYING;
+ }
+ break;
+ }
+ }
+ }
+
+ // Update A Button
+ switch (interfaceCtx->aButtonState) {
+ case A_BTN_STATE_1:
+ interfaceCtx->aButtonRoll += 10466.667f;
+ if (interfaceCtx->aButtonRoll >= 15700.0f) {
+ interfaceCtx->aButtonRoll = -15700.0f;
+ interfaceCtx->aButtonState = A_BTN_STATE_2;
+
+ if ((msgCtx->msgMode != 0) && (msgCtx->unk12006 == 0x26)) {
+ R_A_BTN_Y_OFFSET = -14;
+ } else {
+ R_A_BTN_Y_OFFSET = 0;
+ }
+ }
+ break;
+
+ case A_BTN_STATE_2:
+ interfaceCtx->aButtonRoll += 10466.667f;
+ if (interfaceCtx->aButtonRoll >= 0.0f) {
+ interfaceCtx->aButtonRoll = 0.0f;
+ interfaceCtx->aButtonState = A_BTN_STATE_0;
+ interfaceCtx->unk_212 = interfaceCtx->aButtonDoAction;
+ aButtonDoAction = interfaceCtx->unk_212;
+ if ((aButtonDoAction == DO_ACTION_MAX) || (aButtonDoAction == DO_ACTION_MAX + 1)) {
+ aButtonDoAction = DO_ACTION_NONE;
+ }
+ func_80115428(&play->interfaceCtx, aButtonDoAction, 0);
+ }
+ break;
+
+ case A_BTN_STATE_3:
+ interfaceCtx->aButtonRoll += 10466.667f;
+ if (interfaceCtx->aButtonRoll >= 15700.0f) {
+ interfaceCtx->aButtonRoll = -15700.0f;
+ interfaceCtx->aButtonState = A_BTN_STATE_2;
+ }
+ break;
+
+ case A_BTN_STATE_4:
+ interfaceCtx->aButtonRoll += 10466.667f;
+ if (interfaceCtx->aButtonRoll >= 0.0f) {
+ interfaceCtx->aButtonRoll = 0.0f;
+ interfaceCtx->aButtonState = A_BTN_STATE_0;
+ interfaceCtx->unk_212 = interfaceCtx->aButtonDoAction;
+ aButtonDoAction = interfaceCtx->unk_212;
+ if ((aButtonDoAction == DO_ACTION_MAX) || (aButtonDoAction == DO_ACTION_MAX + 1)) {
+ aButtonDoAction = DO_ACTION_NONE;
+ }
+
+ func_80115428(&play->interfaceCtx, aButtonDoAction, 0);
+ }
+ break;
+
+ default: // A_BTN_STATE_0
+ break;
+ }
+
+ // Update magic
+ if (!(player->stateFlags1 & PLAYER_STATE1_200)) {
+ if (R_MAGIC_DBG_SET_UPGRADE == MAGIC_DBG_SET_UPGRADE_DOUBLE_METER) {
+ // Upgrade to double magic
+ if (!gSaveContext.save.saveInfo.playerData.isMagicAcquired) {
+ gSaveContext.save.saveInfo.playerData.isMagicAcquired = true;
+ }
+ gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired = true;
+ gSaveContext.save.saveInfo.playerData.magic = MAGIC_DOUBLE_METER;
+ gSaveContext.save.saveInfo.playerData.magicLevel = 0;
+ R_MAGIC_DBG_SET_UPGRADE = MAGIC_DBG_SET_UPGRADE_NO_ACTION;
+ } else if (R_MAGIC_DBG_SET_UPGRADE == MAGIC_DBG_SET_UPGRADE_NORMAL_METER) {
+ // Upgrade to normal magic
+ if (!gSaveContext.save.saveInfo.playerData.isMagicAcquired) {
+ gSaveContext.save.saveInfo.playerData.isMagicAcquired = true;
+ }
+ gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired = false;
+ gSaveContext.save.saveInfo.playerData.magic = MAGIC_NORMAL_METER;
+ gSaveContext.save.saveInfo.playerData.magicLevel = 0;
+ R_MAGIC_DBG_SET_UPGRADE = MAGIC_DBG_SET_UPGRADE_NO_ACTION;
+ }
+
+ if ((gSaveContext.save.saveInfo.playerData.isMagicAcquired) &&
+ (gSaveContext.save.saveInfo.playerData.magicLevel == 0)) {
+ // Prepare to step `magicCapacity` to full capacity
+ gSaveContext.save.saveInfo.playerData.magicLevel =
+ gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired + 1;
+ gSaveContext.magicFillTarget = gSaveContext.save.saveInfo.playerData.magic;
+ gSaveContext.save.saveInfo.playerData.magic = 0;
+ gSaveContext.magicState = MAGIC_STATE_STEP_CAPACITY;
+ BUTTON_ITEM_EQUIP(PLAYER_FORM_DEKU, EQUIP_SLOT_B) = ITEM_NUT;
+ }
+
+ Magic_Update(play);
+ Magic_UpdateAddRequest();
+ }
+
+ // Update environmental hazard timer
+ if (gSaveContext.timerStates[TIMER_ID_ENV_HAZARD] == TIMER_STATE_OFF) {
+ if ((sEnvHazard == PLAYER_ENV_HAZARD_HOTROOM) || (sEnvHazard == PLAYER_ENV_HAZARD_UNDERWATER_FREE)) {
+ if (CUR_FORM != PLAYER_FORM_ZORA) {
+ if (play->gameOverCtx.state == GAMEOVER_INACTIVE) {
+ if ((gSaveContext.save.saveInfo.playerData.health >> 1) != 0) {
+ gSaveContext.timerStates[TIMER_ID_ENV_HAZARD] = TIMER_STATE_ENV_HAZARD_START;
+ gSaveContext.timerX[TIMER_ID_ENV_HAZARD] = 115;
+ gSaveContext.timerY[TIMER_ID_ENV_HAZARD] = 80;
+ sEnvTimerActive = true;
+ gSaveContext.timerDirections[TIMER_ID_ENV_HAZARD] = TIMER_COUNT_DOWN;
+ }
+ }
+ }
+ }
+ } else if (((sEnvHazard == PLAYER_ENV_HAZARD_NONE) || (sEnvHazard == PLAYER_ENV_HAZARD_SWIMMING)) &&
+ (gSaveContext.timerStates[TIMER_ID_ENV_HAZARD] <= TIMER_STATE_COUNTING)) {
+ gSaveContext.timerStates[TIMER_ID_ENV_HAZARD] = TIMER_STATE_OFF;
+ }
+
+ // Update minigame
+ if (gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) {
+ gSaveContext.minigameScore += interfaceCtx->minigamePoints;
+ gSaveContext.minigameHiddenScore += interfaceCtx->minigameHiddenPoints;
+ interfaceCtx->minigamePoints = 0;
+ interfaceCtx->minigameHiddenPoints = 0;
+
+ // Update horseback archery tier, unused remnant of OoT.
+ if (sHBAScoreTier == 0) {
+ if (gSaveContext.minigameScore >= 1000) {
+ sHBAScoreTier++;
+ }
+ } else if (sHBAScoreTier == 1) {
+ if (gSaveContext.minigameScore >= 1500) {
+ sHBAScoreTier++;
+ }
+ }
+
+ // Get minigame digits
+ sMinigameScoreDigits[0] = sMinigameScoreDigits[1] = 0;
+ sMinigameScoreDigits[2] = 0;
+ sMinigameScoreDigits[3] = gSaveContext.minigameScore;
+
+ while (sMinigameScoreDigits[3] >= 1000) {
+ sMinigameScoreDigits[0]++;
+ sMinigameScoreDigits[3] -= 1000;
+ }
+
+ while (sMinigameScoreDigits[3] >= 100) {
+ sMinigameScoreDigits[1]++;
+ sMinigameScoreDigits[3] -= 100;
+ }
+
+ while (sMinigameScoreDigits[3] >= 10) {
+ sMinigameScoreDigits[2]++;
+ sMinigameScoreDigits[3] -= 10;
+ }
+ }
+
+ // Update Sun Song
+ if (gSaveContext.sunsSongState != SUNSSONG_INACTIVE) {
+ // exit out of ocarina mode after suns song finishes playing
+ if ((msgCtx->ocarinaAction != 0x39) && (gSaveContext.sunsSongState == SUNSSONG_START)) {
+ play->msgCtx.ocarinaMode = 4;
+ }
+
+ // handle suns song in areas where time moves
+ if (play->envCtx.sceneTimeSpeed != 0) {
+ if (gSaveContext.sunsSongState != SUNSSONG_SPEED_TIME) {
+ sIsSunsPlayedAtDay = false;
+ if ((gSaveContext.save.time >= CLOCK_TIME(6, 0)) && (gSaveContext.save.time <= CLOCK_TIME(18, 0))) {
+ sIsSunsPlayedAtDay = true;
+ }
+
+ gSaveContext.sunsSongState = SUNSSONG_SPEED_TIME;
+ sPrevTimeSpeed = R_TIME_SPEED;
+ R_TIME_SPEED = 400;
+ } else if (!sIsSunsPlayedAtDay) {
+ // Nighttime
+ if ((gSaveContext.save.time >= CLOCK_TIME(6, 0)) && (gSaveContext.save.time <= CLOCK_TIME(18, 0))) {
+ // Daytime has been reached. End suns song effect
+ gSaveContext.sunsSongState = SUNSSONG_INACTIVE;
+ R_TIME_SPEED = sPrevTimeSpeed;
+ play->msgCtx.ocarinaMode = 4;
+ }
+ } else {
+ // Daytime
+ if (gSaveContext.save.time > CLOCK_TIME(18, 0)) {
+ // Nighttime has been reached. End suns song effect
+ gSaveContext.sunsSongState = SUNSSONG_INACTIVE;
+ R_TIME_SPEED = sPrevTimeSpeed;
+ play->msgCtx.ocarinaMode = 4;
+ }
+ }
+ } else {
+ gSaveContext.sunsSongState = SUNSSONG_SPECIAL;
+ }
+ }
+
+ Interface_UpdateBottleTimers(play);
+
+ // Update Grandma's Story
+ if (interfaceCtx->storyState != STORY_STATE_OFF) {
+ if (interfaceCtx->storyState == STORY_STATE_INIT) {
+ interfaceCtx->storyDmaStatus = STORY_DMA_IDLE;
+ interfaceCtx->storyState = STORY_STATE_IDLE;
+ R_STORY_FILL_SCREEN_ALPHA = 0;
+ }
+
+ Interface_AllocStory(play);
+
+ if (interfaceCtx->storyState == STORY_STATE_DESTROY) {
+ interfaceCtx->storyState = STORY_STATE_OFF;
+ interfaceCtx->storyDmaStatus = STORY_DMA_IDLE;
+ if (interfaceCtx->storySegment != NULL) {
+ ZeldaArena_Free(interfaceCtx->storySegment);
+ interfaceCtx->storySegment = NULL;
+ }
+ } else if (interfaceCtx->storyState == STORY_STATE_SETUP_IDLE) {
+ interfaceCtx->storyState = STORY_STATE_IDLE;
+ } else if (interfaceCtx->storyState == STORY_STATE_FADE_OUT) {
+ R_STORY_FILL_SCREEN_ALPHA += 10;
+ if (R_STORY_FILL_SCREEN_ALPHA >= 250) {
+ R_STORY_FILL_SCREEN_ALPHA = 255;
+ interfaceCtx->storyState = STORY_STATE_IDLE;
+ }
+ } else if (interfaceCtx->storyState == STORY_STATE_FADE_IN) {
+ R_STORY_FILL_SCREEN_ALPHA -= 10;
+ if (R_STORY_FILL_SCREEN_ALPHA < 0) {
+ R_STORY_FILL_SCREEN_ALPHA = 0;
+ interfaceCtx->storyState = STORY_STATE_IDLE;
+ }
+ }
+ }
+}
void Interface_Destroy(PlayState* play) {
Map_Destroy(play);
func_80174F9C(Interface_PostmanTimerCallback, NULL);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80121FC4.s")
+void Interface_Init(PlayState* play) {
+ s32 pad;
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ size_t parameterStaticSize;
+ s32 i;
+
+ bzero(interfaceCtx, sizeof(InterfaceContext));
+
+ gSaveContext.sunsSongState = SUNSSONG_INACTIVE;
+ gSaveContext.nextHudVisibility = HUD_VISIBILITY_IDLE;
+ gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
+
+ View_Init(&interfaceCtx->view, play->state.gfxCtx);
+
+ interfaceCtx->magicConsumptionTimer = 16;
+ interfaceCtx->healthTimer = 200;
+
+ parameterStaticSize = SEGMENT_ROM_SIZE(parameter_static);
+ interfaceCtx->parameterSegment = THA_AllocTailAlign16(&play->state.heap, parameterStaticSize);
+ DmaMgr_SendRequest0(interfaceCtx->parameterSegment, SEGMENT_ROM_START(parameter_static), parameterStaticSize);
+
+ interfaceCtx->doActionSegment = THA_AllocTailAlign16(&play->state.heap, 0xC90);
+ DmaMgr_SendRequest0(interfaceCtx->doActionSegment, SEGMENT_ROM_START(do_action_static), 0x300);
+ DmaMgr_SendRequest0(interfaceCtx->doActionSegment + 0x300, SEGMENT_ROM_START(do_action_static) + 0x480, 0x180);
+
+ Interface_NewDay(play, CURRENT_DAY);
+
+ interfaceCtx->iconItemSegment = THA_AllocTailAlign16(&play->state.heap, 0x4000);
+
+ if (CUR_FORM_EQUIP(EQUIP_SLOT_B) < ITEM_F0) {
+ Interface_LoadItemIconImpl(play, EQUIP_SLOT_B);
+ } else if ((CUR_FORM_EQUIP(EQUIP_SLOT_B) != ITEM_NONE) && (CUR_FORM_EQUIP(EQUIP_SLOT_B) != ITEM_FD)) {
+ Interface_LoadItemIconImpl(play, EQUIP_SLOT_B);
+ }
+
+ if (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) < ITEM_F0) {
+ Interface_LoadItemIconImpl(play, EQUIP_SLOT_C_LEFT);
+ }
+
+ if (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) < ITEM_F0) {
+ Interface_LoadItemIconImpl(play, EQUIP_SLOT_C_DOWN);
+ }
+
+ if (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) < ITEM_F0) {
+ Interface_LoadItemIconImpl(play, EQUIP_SLOT_C_RIGHT);
+ }
+
+ if (((gSaveContext.timerStates[TIMER_ID_MINIGAME_2] == TIMER_STATE_COUNTING) ||
+ (gSaveContext.timerStates[TIMER_ID_GORON_RACE_UNUSED] == TIMER_STATE_COUNTING)) &&
+ ((gSaveContext.respawnFlag == -1) || (gSaveContext.respawnFlag == 1)) &&
+ (gSaveContext.timerStates[TIMER_ID_MINIGAME_2] == TIMER_STATE_COUNTING)) {
+ gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_START;
+ gSaveContext.timerX[TIMER_ID_MINIGAME_2] = 115;
+ gSaveContext.timerY[TIMER_ID_MINIGAME_2] = 80;
+ }
+
+ LifeMeter_Init(play);
+ Map_Init(play);
+
+ gSaveContext.minigameStatus = MINIGAME_STATUS_END;
+ interfaceCtx->perfectLettersPrimColor[0] = 255;
+ interfaceCtx->perfectLettersPrimColor[1] = 165;
+ interfaceCtx->perfectLettersPrimColor[2] = 55;
+
+ if (CHECK_EVENTINF(EVENTINF_34)) {
+ CLEAR_EVENTINF(EVENTINF_34);
+ gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_OFF;
+ }
+
+ gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_OFF;
+ gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_1] = SECONDS_TO_TIMER(0);
+ gSaveContext.timerTimeLimits[TIMER_ID_MINIGAME_1] = SECONDS_TO_TIMER(0);
+ gSaveContext.timerStartOsTimes[TIMER_ID_MINIGAME_1] = 0;
+ gSaveContext.timerStopTimes[TIMER_ID_MINIGAME_1] = 0;
+ gSaveContext.timerPausedOsTimes[TIMER_ID_MINIGAME_1] = 0;
+
+ for (i = 0; i < TIMER_ID_MAX; i++) {
+ if (gSaveContext.timerStates[i] == TIMER_STATE_7) {
+ gSaveContext.timerStates[i] = TIMER_STATE_OFF;
+ }
+ }
+
+ sPictoState = PICTO_BOX_STATE_OFF;
+ sPictoPhotoBeingTaken = false;
+
+ if ((play->sceneId != SCENE_MITURIN_BS) && (play->sceneId != SCENE_HAKUGIN_BS) && (play->sceneId != SCENE_SEA_BS) &&
+ (play->sceneId != SCENE_INISIE_BS) && (play->sceneId != SCENE_LAST_BS) && (play->sceneId != SCENE_MITURIN) &&
+ (play->sceneId != SCENE_HAKUGIN) && (play->sceneId != SCENE_SEA) && (play->sceneId != SCENE_INISIE_N) &&
+ (play->sceneId != SCENE_INISIE_R) && (play->sceneId != SCENE_LAST_DEKU) &&
+ (play->sceneId != SCENE_LAST_GORON) && (play->sceneId != SCENE_LAST_ZORA) &&
+ (play->sceneId != SCENE_LAST_LINK)) {
+
+ CLEAR_EVENTINF(EVENTINF_53); // Goht intro cutscene watched
+ CLEAR_EVENTINF(EVENTINF_54); // Odolwa intro cutscene watched
+ CLEAR_EVENTINF(EVENTINF_55); // Twinmold intro cutscene watched
+ CLEAR_EVENTINF(EVENTINF_56); // Gyorg intro cutscene watched
+ CLEAR_EVENTINF(EVENTINF_57); // Igos du Ikana intro cutscene watched
+ CLEAR_EVENTINF(EVENTINF_60); // Wart intro cutscene watched
+ CLEAR_EVENTINF(EVENTINF_61); // Majoras intro cutscene watched
+ CLEAR_EVENTINF(EVENTINF_62); //
+ CLEAR_EVENTINF(EVENTINF_63); // Gomess intro cutscene watched
+ }
+
+ sFinalHoursClockDigitsRed = sFinalHoursClockFrameEnvRed = sFinalHoursClockFrameEnvGreen =
+ sFinalHoursClockFrameEnvBlue = 0;
+ sFinalHoursClockColorTimer = 15;
+ sFinalHoursClockColorTargetIndex = 0;
+}
diff --git a/src/code/z_pause.c b/src/code/z_pause.c
index bb5b33cf2..5f212b7ae 100644
--- a/src/code/z_pause.c
+++ b/src/code/z_pause.c
@@ -18,7 +18,9 @@
*
* Note2: Controllers 2-4's inputs are normally zeroed out, so this would also need to be fixed to use frame advance
*/
-#include "global.h"
+
+#include "z64frameadvance.h"
+#include "macros.h"
void FrameAdvance_Init(FrameAdvanceContext* frameAdvCtx) {
frameAdvCtx->timer = 0;
diff --git a/src/code/z_play.c b/src/code/z_play.c
index 47bb97a60..bd4db8fec 100644
--- a/src/code/z_play.c
+++ b/src/code/z_play.c
@@ -1,81 +1,1599 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
+#include "buffers.h"
+#include "z64debug_display.h"
#include "z64quake.h"
+#include "z64rumble.h"
#include "z64shrink_window.h"
#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/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80165460.s")
+s32 gDbgCamEnabled = false;
+u8 D_801D0D54 = false;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80165608.s")
+s16 sTransitionFillTimer;
+Input D_801F6C18;
+TransitionTile sTransitionTile;
+s32 gTransitionTileState;
+VisMono sVisMono;
+Color_RGBA8_u32 gVisMonoColor;
+Struct_80140E80 D_801F6D38;
+Struct_80140E80* D_801F6D4C;
+BombersNotebook sBombersNotebook;
+u8 sBombersNotebookOpen;
+u8 sMotionBlurStatus;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80165630.s")
+typedef enum {
+ /* 0 */ MOTION_BLUR_OFF,
+ /* 1 */ MOTION_BLUR_SETUP,
+ /* 2 */ MOTION_BLUR_PROCESS
+} MotionBlurStatus;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80165658.s")
+void Play_DrawMotionBlur(PlayState* this) {
+ GraphicsContext* gfxCtx = this->state.gfxCtx;
+ s32 alpha;
+ Gfx* gfx;
+ Gfx* gfxHead;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_8016566C.s")
+ if (R_MOTION_BLUR_PRIORITY_ENABLED) {
+ alpha = R_MOTION_BLUR_PRIORITY_ALPHA;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80165690.s")
+ if (sMotionBlurStatus == MOTION_BLUR_OFF) {
+ sMotionBlurStatus = MOTION_BLUR_SETUP;
+ }
+ } else if (R_MOTION_BLUR_ENABLED) {
+ alpha = R_MOTION_BLUR_ALPHA;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_801656A4.s")
+ if (sMotionBlurStatus == MOTION_BLUR_OFF) {
+ sMotionBlurStatus = MOTION_BLUR_SETUP;
+ }
+ } else {
+ alpha = 0;
+ sMotionBlurStatus = MOTION_BLUR_OFF;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80165DB8.s")
+ if (sMotionBlurStatus != MOTION_BLUR_OFF) {
+ OPEN_DISPS(gfxCtx);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80165DCC.s")
+ gfxHead = POLY_OPA_DISP;
+ gfx = Graph_GfxPlusOne(gfxHead);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80165DF0.s")
+ gSPDisplayList(OVERLAY_DISP++, gfx);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80165E04.s")
+ this->pauseBgPreRender.fbuf = gfxCtx->curFrameBuffer;
+ this->pauseBgPreRender.fbufSave = this->unk_18E64;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80165E1C.s")
+ if (sMotionBlurStatus == MOTION_BLUR_PROCESS) {
+ func_80170AE0(&this->pauseBgPreRender, &gfx, alpha);
+ } else {
+ sMotionBlurStatus = MOTION_BLUR_PROCESS;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80165E7C.s")
+ func_801705B4(&this->pauseBgPreRender, &gfx);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80165EC0.s")
+ gSPEndDisplayList(gfx++);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/D_801DFA18.s")
+ Graph_BranchDlist(gfxHead, gfx);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80166060.s")
+ POLY_OPA_DISP = gfx;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_801660B8.s")
+ CLOSE_DISPS(gfxCtx);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_Destroy.s")
+void Play_InitMotionBlur(void) {
+ R_MOTION_BLUR_ENABLED = false;
+ R_MOTION_BLUR_PRIORITY_ENABLED = false;
+ sMotionBlurStatus = MOTION_BLUR_OFF;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_801663C4.s")
+void Play_DestroyMotionBlur(void) {
+ R_MOTION_BLUR_ENABLED = false;
+ R_MOTION_BLUR_PRIORITY_ENABLED = false;
+ sMotionBlurStatus = MOTION_BLUR_OFF;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80166644.s")
+void Play_SetMotionBlurAlpha(u32 alpha) {
+ R_MOTION_BLUR_ALPHA = alpha;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_801668B4.s")
+void Play_EnableMotionBlur(u32 alpha) {
+ R_MOTION_BLUR_ALPHA = alpha;
+ R_MOTION_BLUR_ENABLED = true;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80166968.s")
+void Play_DisableMotionBlur(void) {
+ R_MOTION_BLUR_ENABLED = false;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80166B30.s")
+// How much each color component contributes to the intensity image.
+// These coefficients are close to what the YUV color space defines Y (luminance) as:
+// https://en.wikipedia.org/wiki/YUV#Conversion_to/from_RGB
+#define PLAY_INTENSITY_RED 2
+#define PLAY_INTENSITY_GREEN 4
+#define PLAY_INTENSITY_BLUE 1
+#define PLAY_INTENSITY_NORM (0x1F * PLAY_INTENSITY_RED + 0x1F * PLAY_INTENSITY_GREEN + 0x1F * PLAY_INTENSITY_BLUE)
+#define PLAY_INTENSITY_MIX(r, g, b, m) \
+ ((((r)*PLAY_INTENSITY_RED + (g)*PLAY_INTENSITY_GREEN + (b)*PLAY_INTENSITY_BLUE) * (m)) / PLAY_INTENSITY_NORM)
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_Update.s")
+/**
+ * Converts an RGBA16 buffer to an Intensity Image
+ *
+ * @param[out] destI destination buffer
+ * @param[in] srcRgba16 source buffer
+ * @param[in] rgba16Width width of a full row for the RGBA16
+ * @param[in] pixelLeft X coordinate of the top-left RGBA16 pixel to start with
+ * @param[in] pixelTop Y coordinate of the top-left RGBA16 pixel to start with
+ * @param[in] pixelRight X coordinate of the bottom-right RGBA16 pixel to end with
+ * @param[in] pixelBottom Y coordinate of the bottom-right RGBA16 pixel to end with
+ * @param[in] bitDepth bit depth for the intensity image
+ */
+void Play_ConvertRgba16ToIntensityImage(void* destI, u16* srcRgba16, s32 rgba16Width, s32 pixelLeft, s32 pixelTop,
+ s32 pixelRight, s32 pixelBottom, s32 bitDepth) {
+ s32 i;
+ s32 j;
+ u32 pixel;
+ u32 r;
+ u32 g;
+ u32 b;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80167DE4.s")
+ switch (bitDepth) {
+ case 4: {
+ u8* destI4 = destI;
+ u32 upper;
+ u32 lower;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80167F0C.s")
+ for (i = pixelTop; i <= pixelBottom; i++) {
+ for (j = pixelLeft; j <= pixelRight; j += 2) {
+ pixel = srcRgba16[i * rgba16Width + j];
+ r = RGBA16_GET_R(pixel);
+ g = RGBA16_GET_G(pixel);
+ b = RGBA16_GET_B(pixel);
+ upper = PLAY_INTENSITY_MIX(r, g, b, 15);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_Draw.s")
+ pixel = srcRgba16[i * rgba16Width + j + 1];
+ r = RGBA16_GET_R(pixel);
+ g = RGBA16_GET_G(pixel);
+ b = RGBA16_GET_B(pixel);
+ lower = PLAY_INTENSITY_MIX(r, g, b, 15);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80168DAC.s")
+ *(destI4++) = (upper << 4) | lower;
+ }
+ }
+ break;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_Main.s")
+ case 5: {
+ u8* destI5 = destI;
+
+ for (i = pixelTop; i <= pixelBottom; i++) {
+ for (j = pixelLeft; j <= pixelRight; j++) {
+ pixel = srcRgba16[i * rgba16Width + j];
+ r = RGBA16_GET_R(pixel);
+ g = RGBA16_GET_G(pixel);
+ b = RGBA16_GET_B(pixel);
+
+ pixel = 0;
+
+ *(destI5++) = PLAY_INTENSITY_MIX(r, g, b, 255) & 0xF8;
+ }
+ }
+ break;
+ }
+
+ case 8: {
+ u8* destI8 = destI;
+
+ for (i = pixelTop; i <= pixelBottom; i++) {
+ for (j = pixelLeft; j <= pixelRight; j++) {
+ pixel = srcRgba16[i * rgba16Width + j];
+
+ r = RGBA16_GET_R(pixel);
+ g = RGBA16_GET_G(pixel);
+ b = RGBA16_GET_B(pixel);
+
+ *(destI8++) = PLAY_INTENSITY_MIX(r, g, b, 255);
+ }
+ }
+ break;
+ }
+
+ case 16: {
+ u16* destI16 = destI;
+
+ for (i = pixelTop; i <= pixelBottom; i++) {
+ for (j = pixelLeft; j <= pixelRight; j++) {
+ *(destI16++) = srcRgba16[i * rgba16Width + j];
+ }
+ }
+ break;
+ }
+ }
+}
+
+void Play_SetMotionBlurPriorityAlpha(u32 alpha) {
+ R_MOTION_BLUR_PRIORITY_ALPHA = alpha;
+}
+
+void Play_EnableMotionBlurPriority(u32 alpha) {
+ R_MOTION_BLUR_PRIORITY_ALPHA = alpha;
+ R_MOTION_BLUR_PRIORITY_ENABLED = true;
+}
+
+void Play_DisableMotionBlurPriority(void) {
+ R_MOTION_BLUR_PRIORITY_ENABLED = false;
+}
+
+// Will take the photograph, but doesn't compress and save it
+void Play_TriggerPictoPhoto(void) {
+ R_PICTO_PHOTO_STATE = PICTO_PHOTO_STATE_SETUP;
+}
+
+void Play_TakePictoPhoto(PreRender* prerender) {
+ PreRender_ApplyFilters(prerender);
+ Play_ConvertRgba16ToIntensityImage(gPictoPhotoI8, prerender->fbufSave, SCREEN_WIDTH, PICTO_PHOTO_TOPLEFT_X,
+ PICTO_PHOTO_TOPLEFT_Y, (PICTO_PHOTO_TOPLEFT_X + PICTO_PHOTO_WIDTH) - 1,
+ (PICTO_PHOTO_TOPLEFT_Y + PICTO_PHOTO_HEIGHT) - 1, 8);
+}
+
+s32 Play_ChooseDynamicTransition(PlayState* this, s32 transitionType) {
+ s32 nextTransitionType = transitionType;
+
+ if (transitionType == TRANS_TYPE_FADE_DYNAMIC) {
+ if (!gSaveContext.save.isNight) {
+ nextTransitionType = TRANS_TYPE_FADE_WHITE;
+ } else {
+ nextTransitionType = TRANS_TYPE_FADE_BLACK;
+ }
+ }
+ if (nextTransitionType != transitionType) {
+ this->transitionType = nextTransitionType;
+ }
+ return nextTransitionType;
+}
+
+void Play_SetupTransition(PlayState* this, s32 transitionType) {
+ TransitionContext* transitionCtx = &this->transitionCtx;
+ s32 fbdemoType;
+
+ bzero(transitionCtx, sizeof(TransitionContext));
+
+ fbdemoType = -1;
+ if (transitionType & TRANS_TYPE_WIPE3) {
+ fbdemoType = FBDEMO_WIPE3;
+ } else if ((transitionType & 0x78) == TRANS_TYPE_WIPE4) { // Checks not only type, but also a max value of 39
+ fbdemoType = FBDEMO_WIPE4;
+ } else if (!(transitionType & (TRANS_TYPE_WIPE3 | TRANS_TYPE_WIPE4))) {
+ switch (transitionType) {
+ case TRANS_TYPE_TRIFORCE:
+ fbdemoType = FBDEMO_TRIFORCE;
+ break;
+
+ case TRANS_TYPE_WIPE:
+ case TRANS_TYPE_WIPE_FAST:
+ fbdemoType = FBDEMO_WIPE1;
+ break;
+
+ case TRANS_TYPE_FADE_BLACK:
+ case TRANS_TYPE_FADE_WHITE:
+ case TRANS_TYPE_FADE_BLACK_FAST:
+ case TRANS_TYPE_FADE_WHITE_FAST:
+ case TRANS_TYPE_FADE_BLACK_SLOW:
+ case TRANS_TYPE_FADE_WHITE_SLOW:
+ case TRANS_TYPE_FADE_WHITE_CS_DELAYED:
+ case TRANS_TYPE_FADE_WHITE_INSTANT:
+ case TRANS_TYPE_FADE_GREEN:
+ case TRANS_TYPE_FADE_BLUE:
+ fbdemoType = FBDEMO_FADE;
+ break;
+
+ case TRANS_TYPE_FILL_WHITE_FAST:
+ case TRANS_TYPE_FILL_WHITE:
+ this->transitionMode = TRANS_MODE_FILL_WHITE_INIT;
+ break;
+
+ case TRANS_TYPE_INSTANT:
+ this->transitionMode = TRANS_MODE_INSTANT;
+ break;
+
+ case TRANS_TYPE_FILL_BROWN:
+ this->transitionMode = TRANS_MODE_FILL_BROWN_INIT;
+ break;
+
+ case TRANS_TYPE_SANDSTORM_PERSIST:
+ this->transitionMode = TRANS_MODE_SANDSTORM_INIT;
+ break;
+
+ case TRANS_TYPE_SANDSTORM_END:
+ this->transitionMode = TRANS_MODE_SANDSTORM_END_INIT;
+ break;
+
+ case TRANS_TYPE_CS_BLACK_FILL:
+ this->transitionMode = TRANS_MODE_CS_BLACK_FILL_INIT;
+ break;
+
+ case TRANS_TYPE_CIRCLE:
+ fbdemoType = FBDEMO_CIRCLE;
+ break;
+
+ case TRANS_TYPE_WIPE5:
+ fbdemoType = FBDEMO_WIPE5;
+ break;
+
+ default:
+ fbdemoType = -1;
+ __assert("../z_play.c", 1420);
+ }
+ } else {
+ fbdemoType = -1;
+ __assert("../z_play.c", 1423);
+ }
+
+ transitionCtx->transitionType = transitionType;
+ transitionCtx->fbdemoType = fbdemoType;
+ if (fbdemoType != -1) {
+ Transition_Init(transitionCtx);
+ }
+}
+
+void Play_ClearTransition(PlayState* this) {
+ if (this->transitionCtx.fbdemoType != -1) {
+ Transition_Destroy(&this->transitionCtx);
+ }
+ this->transitionCtx.transitionType = -1;
+}
+
+Gfx* Play_SetFog(PlayState* this, Gfx* gfx) {
+ s32 fogFar = this->lightCtx.zFar * (5.0f / 64.0f);
+
+ return Gfx_SetFogWithSync(gfx, this->lightCtx.fogColor.r, this->lightCtx.fogColor.g, this->lightCtx.fogColor.b, 0,
+ this->lightCtx.fogNear, ((fogFar <= 1000) ? 1000 : fogFar));
+}
+
+void Play_Destroy(GameState* thisx) {
+ PlayState* this = (PlayState*)thisx;
+ GraphicsContext* gfxCtx = this->state.gfxCtx;
+
+ if (sBombersNotebookOpen) {
+ MsgEvent_SendNullTask();
+ func_80178750();
+ gfxCtx->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx->framebufferIndex % 2);
+ gfxCtx->zbuffer = SysCfb_GetZBuffer();
+ gfxCtx->viMode = D_801FBB88;
+ gfxCtx->viConfigFeatures = gViConfigFeatures;
+ gfxCtx->xScale = gViConfigXScale;
+ gfxCtx->yScale = gViConfigYScale;
+ gfxCtx->updateViMode = true;
+ sBombersNotebookOpen = false;
+ }
+
+ BombersNotebook_Destroy(&sBombersNotebook);
+ this->state.gfxCtx->callback = NULL;
+ this->state.gfxCtx->callbackArg = 0;
+ Play_DestroyMotionBlur();
+
+ if (R_PAUSE_BG_PRERENDER_STATE != PAUSE_BG_PRERENDER_OFF) {
+ PreRender_ApplyFiltersSlowlyDestroy(&this->pauseBgPreRender);
+ R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_OFF;
+ }
+
+ R_PICTO_PHOTO_STATE = PICTO_PHOTO_STATE_OFF;
+ PreRender_Destroy(&this->pauseBgPreRender);
+ this->unk_18E58 = NULL;
+ this->pictoPhotoI8 = NULL;
+ this->unk_18E60 = NULL;
+ this->unk_18E64 = NULL;
+ this->unk_18E68 = NULL;
+ Effect_DestroyAll(this);
+ EffectSS_Clear(this);
+ CollisionCheck_DestroyContext(this, &this->colChkCtx);
+
+ if (gTransitionTileState == TRANS_TILE_READY) {
+ TransitionTile_Destroy(&sTransitionTile);
+ gTransitionTileState = TRANS_TILE_OFF;
+ }
+
+ if ((this->transitionMode == TRANS_MODE_INSTANCE_RUNNING) || D_801D0D54) {
+ this->transitionCtx.destroy(&this->transitionCtx.instanceData);
+ Play_ClearTransition(this);
+ this->transitionMode = TRANS_MODE_OFF;
+ }
+
+ ShrinkWindow_Destroy();
+ TransitionFade_Destroy(&this->unk_18E48);
+ VisMono_Destroy(&sVisMono);
+ func_80140EA0(D_801F6D4C);
+ D_801F6D4C = NULL;
+
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_92_80)) {
+ Actor_CleanupContext(&this->actorCtx, this);
+ }
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_92_80);
+
+ Interface_Destroy(this);
+ KaleidoScopeCall_Destroy(this);
+ KaleidoManager_Destroy();
+ ZeldaArena_Cleanup();
+}
+
+#define PLAY_COMPRESS_BITS 5
+#define PLAY_DECOMPRESS_BITS 8
+
+void Play_CompressI8ToI5(void* srcI8, void* destI5, size_t size) {
+ u32 i;
+ u8* src = srcI8;
+ s8* dest = destI5;
+ s32 bitsLeft = PLAY_DECOMPRESS_BITS; // Bits left in the current dest pixel left to compress into
+ u32 destPixel = 0;
+ s32 shift;
+ u32 srcPixel;
+
+ for (i = 0; i < size; i++) {
+ srcPixel = *src++;
+ srcPixel = (srcPixel * 0x1F + 0x80) / 0xFF;
+ shift = bitsLeft - PLAY_COMPRESS_BITS;
+ if (shift > 0) {
+ destPixel |= srcPixel << shift;
+ } else {
+ destPixel |= srcPixel >> -shift;
+ *dest++ = destPixel;
+ shift += PLAY_DECOMPRESS_BITS;
+ destPixel = srcPixel << shift;
+ }
+ bitsLeft = shift;
+ }
+
+ if (bitsLeft < PLAY_DECOMPRESS_BITS) {
+ *dest = destPixel;
+ }
+}
+
+void Play_DecompressI5ToI8(void* srcI5, void* destI8, size_t size) {
+ u32 i;
+ u8* src = srcI5;
+ s8* dest = destI8;
+ s32 bitsLeft = PLAY_DECOMPRESS_BITS; // Bits left in the current src pixel left to decompress
+ u32 destPixel;
+ s32 shift;
+ u32 srcPixel = *src++;
+
+ for (i = 0; i < size; i++) {
+ shift = bitsLeft - PLAY_COMPRESS_BITS;
+ if (shift > 0) {
+ destPixel = 0;
+ destPixel |= srcPixel >> shift;
+ } else {
+ destPixel = 0;
+ destPixel |= srcPixel << -shift;
+ srcPixel = *src++;
+ shift += PLAY_DECOMPRESS_BITS;
+ destPixel |= srcPixel >> shift;
+ }
+ destPixel = (destPixel & 0x1F) * 0xFF / 0x1F;
+ *dest++ = destPixel;
+ bitsLeft = shift;
+ }
+}
+
+f32 Play_GetWaterSurface(PlayState* this, Vec3f* pos, s32* lightIndex) {
+ Player* player = GET_PLAYER(this);
+ f32 waterSurfaceY = player->actor.world.pos.y;
+ WaterBox* waterBox;
+ s32 bgId;
+
+ if (!WaterBox_GetSurfaceImpl(this, &this->colCtx, pos->x, pos->z, &waterSurfaceY, &waterBox, &bgId)) {
+ return BGCHECK_Y_MIN;
+ }
+
+ if (waterSurfaceY < pos->y) {
+ return BGCHECK_Y_MIN;
+ }
+
+ *lightIndex = WaterBox_GetLightSettingIndex(&this->colCtx, waterBox);
+ return waterSurfaceY;
+}
+
+void Play_UpdateWaterCamera(PlayState* this, Camera* camera) {
+ static s16 sQuakeIndex = -1;
+ static s16 sIsCameraUnderwater = false;
+ s32 pad;
+ s32 lightIndex;
+ Player* player = GET_PLAYER(this);
+
+ sIsCameraUnderwater = camera->stateFlags & CAM_STATE_UNDERWATER;
+ if (Play_GetWaterSurface(this, &camera->eye, &lightIndex) != BGCHECK_Y_MIN) {
+ if (!sIsCameraUnderwater) {
+ Camera_SetFlags(camera, CAM_STATE_UNDERWATER);
+ sQuakeIndex = -1;
+ Distortion_SetType(DISTORTION_TYPE_UNDERWATER_ENTRY);
+ Distortion_SetCountdown(80);
+ }
+
+ func_801A3EC0(0x20);
+ func_800F6834(this, lightIndex);
+
+ if ((sQuakeIndex == -1) || (Quake_GetCountdown(sQuakeIndex) == 10)) {
+ s16 quakeIndex = Quake_Add(camera, QUAKE_TYPE_5);
+
+ sQuakeIndex = quakeIndex;
+ if (quakeIndex != 0) {
+ Quake_SetSpeed(sQuakeIndex, 550);
+ Quake_SetQuakeValues(sQuakeIndex, 1, 1, 180, 0);
+ Quake_SetCountdown(sQuakeIndex, 1000);
+ }
+ }
+ if (player->stateFlags3 & PLAYER_STATE3_8000) {
+ Distortion_SetType(DISTORTION_TYPE_ZORA_SWIMMING);
+ Distortion_ClearType(DISTORTION_TYPE_NON_ZORA_SWIMMING);
+ } else {
+ Distortion_SetType(DISTORTION_TYPE_NON_ZORA_SWIMMING);
+ Distortion_ClearType(DISTORTION_TYPE_ZORA_SWIMMING);
+ }
+ } else {
+ if (sIsCameraUnderwater) {
+ Camera_ClearFlags(camera, CAM_STATE_UNDERWATER);
+ }
+ Distortion_ClearType(DISTORTION_TYPE_NON_ZORA_SWIMMING);
+ Distortion_ClearType(DISTORTION_TYPE_UNDERWATER_ENTRY);
+ Distortion_ClearType(DISTORTION_TYPE_ZORA_SWIMMING);
+ if (sQuakeIndex != 0) {
+ Quake_Remove(sQuakeIndex);
+ }
+ func_800F694C(this);
+ func_801A3EC0(0);
+ }
+}
+
+void Play_UpdateTransition(PlayState* this) {
+ s32 pad;
+
+ if (this->transitionMode == TRANS_MODE_OFF) {
+ return;
+ }
+
+ switch (this->transitionMode) {
+ case TRANS_MODE_SETUP:
+ if (this->transitionTrigger != TRANS_TRIGGER_END) {
+ s16 sceneLayer = 0;
+
+ Interface_SetHudVisibility(HUD_VISIBILITY_NONE);
+
+ if (gSaveContext.nextCutsceneIndex >= 0xFFF0) {
+ sceneLayer = (gSaveContext.nextCutsceneIndex & 0xF) + 1;
+ }
+
+ if ((!(Entrance_GetTransitionFlags(this->nextEntrance + sceneLayer) & 0x8000) ||
+ ((this->nextEntrance == ENTRANCE(PATH_TO_MOUNTAIN_VILLAGE, 1)) &&
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) ||
+ ((this->nextEntrance == ENTRANCE(ROAD_TO_SOUTHERN_SWAMP, 1)) &&
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) ||
+ ((this->nextEntrance == ENTRANCE(TERMINA_FIELD, 2)) &&
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) ||
+ ((this->nextEntrance == ENTRANCE(ROAD_TO_IKANA, 1)) &&
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE))) &&
+ (!func_800FE590(this) || (Entrance_GetSceneId(this->nextEntrance + sceneLayer) < 0) ||
+ (AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_FINAL_HOURS))) {
+ func_801A4058(20);
+ gSaveContext.seqId = (u8)NA_BGM_DISABLED;
+ gSaveContext.ambienceId = AMBIENCE_ID_DISABLED;
+ }
+
+ if (func_800FD768()) {
+ func_801A4058(20);
+ gSaveContext.seqId = (u8)NA_BGM_DISABLED;
+ gSaveContext.ambienceId = AMBIENCE_ID_DISABLED;
+ }
+
+ if (func_800FE590(this) && (Entrance_GetSceneId(this->nextEntrance + sceneLayer) >= 0) &&
+ (AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) == NA_BGM_FINAL_HOURS)) {
+ func_801A41C8(20);
+ }
+ }
+
+ if (!D_801D0D54) {
+ Play_SetupTransition(this, Play_ChooseDynamicTransition(this, this->transitionType));
+ }
+
+ if (this->transitionMode >= TRANS_MODE_FILL_WHITE_INIT) {
+ // non-instance modes break out of this switch
+ break;
+ }
+ // fallthrough
+ case TRANS_MODE_INSTANCE_INIT: {
+ s32 transWipeSpeed;
+ s32 transFadeDuration;
+ u32 color;
+
+ this->transitionCtx.init(&this->transitionCtx.instanceData);
+
+ if (this->transitionCtx.transitionType & (TRANS_TYPE_WIPE3 | TRANS_TYPE_WIPE4)) {
+ this->transitionCtx.setType(&this->transitionCtx.instanceData,
+ this->transitionCtx.transitionType | TRANS_TYPE_SET_PARAMS);
+ }
+
+ if ((this->transitionCtx.transitionType == TRANS_TYPE_WIPE_FAST) ||
+ (this->transitionCtx.transitionType == TRANS_TYPE_FILL_WHITE_FAST)) {
+ //! @bug TRANS_TYPE_FILL_WHITE_FAST will never reach this code.
+ //! It is a non-instance type transition which doesn't run this case.
+ transWipeSpeed = 28;
+ } else {
+ transWipeSpeed = 14;
+ }
+ gSaveContext.transWipeSpeed = transWipeSpeed;
+
+ switch (this->transitionCtx.transitionType) {
+ case TRANS_TYPE_FADE_BLACK_FAST:
+ case TRANS_TYPE_FADE_WHITE_FAST:
+ transFadeDuration = 20;
+ break;
+
+ case TRANS_TYPE_FADE_BLACK_SLOW:
+ case TRANS_TYPE_FADE_WHITE_SLOW:
+ transFadeDuration = 150;
+ break;
+
+ case TRANS_TYPE_FADE_WHITE_INSTANT:
+ transFadeDuration = 2;
+ break;
+
+ default:
+ transFadeDuration = 60;
+ break;
+ }
+ gSaveContext.transFadeDuration = transFadeDuration;
+
+ switch (this->transitionCtx.transitionType) {
+ case TRANS_TYPE_FADE_WHITE:
+ case TRANS_TYPE_FADE_WHITE_FAST:
+ case TRANS_TYPE_FADE_WHITE_SLOW:
+ case TRANS_TYPE_FADE_WHITE_CS_DELAYED:
+ case TRANS_TYPE_FADE_WHITE_INSTANT:
+ color = RGBA8(160, 160, 160, 255);
+ break;
+
+ case TRANS_TYPE_FADE_GREEN:
+ color = RGBA8(140, 140, 100, 255);
+ break;
+
+ case TRANS_TYPE_FADE_BLUE:
+ color = RGBA8(70, 100, 110, 255);
+ break;
+
+ default:
+ color = RGBA8(0, 0, 0, 255);
+ break;
+ }
+
+ this->transitionCtx.setColor(&this->transitionCtx.instanceData, color);
+ if (this->transitionCtx.setEnvColor != NULL) {
+ this->transitionCtx.setEnvColor(&this->transitionCtx.instanceData, color);
+ }
+
+ this->transitionCtx.setType(&this->transitionCtx.instanceData,
+ (this->transitionTrigger == TRANS_TRIGGER_END) ? TRANS_INSTANCE_TYPE_FILL_OUT
+ : TRANS_INSTANCE_TYPE_FILL_IN);
+ this->transitionCtx.start(&this->transitionCtx.instanceData);
+
+ if (this->transitionCtx.transitionType == TRANS_TYPE_FADE_WHITE_CS_DELAYED) {
+ this->transitionMode = TRANS_MODE_INSTANCE_WAIT;
+ } else {
+ this->transitionMode = TRANS_MODE_INSTANCE_RUNNING;
+ }
+ break;
+ }
+
+ case TRANS_MODE_INSTANCE_RUNNING:
+ if (this->transitionCtx.isDone(&this->transitionCtx.instanceData)) {
+ if (this->transitionTrigger != TRANS_TRIGGER_END) {
+ if (this->transitionCtx.transitionType == TRANS_TYPE_CIRCLE) {
+ D_801D0D54 = false;
+ }
+
+ if (gSaveContext.gameMode == GAMEMODE_OWL_SAVE) {
+ STOP_GAMESTATE(&this->state);
+ SET_NEXT_GAMESTATE(&this->state, TitleSetup_Init, sizeof(TitleSetupState));
+ } else if (gSaveContext.gameMode != GAMEMODE_FILE_SELECT) {
+ STOP_GAMESTATE(&this->state);
+ SET_NEXT_GAMESTATE(&this->state, Play_Init, sizeof(PlayState));
+ gSaveContext.save.entrance = this->nextEntrance;
+
+ if (gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) {
+ gSaveContext.minigameStatus = MINIGAME_STATUS_END;
+ }
+ } else { // GAMEMODE_FILE_SELECT
+ STOP_GAMESTATE(&this->state);
+ SET_NEXT_GAMESTATE(&this->state, FileSelect_Init, sizeof(FileSelectState));
+ }
+ } else {
+ if (this->transitionCtx.transitionType == TRANS_TYPE_CIRCLE) {
+ D_801D0D54 = true;
+ } else {
+ this->transitionCtx.destroy(&this->transitionCtx.instanceData);
+ Play_ClearTransition(this);
+ }
+ this->transitionMode = TRANS_MODE_OFF;
+ if (gTransitionTileState == TRANS_TILE_READY) {
+ TransitionTile_Destroy(&sTransitionTile);
+ gTransitionTileState = TRANS_TILE_OFF;
+ Game_SetFramerateDivisor(&this->state, 3);
+ }
+ }
+ this->transitionTrigger = TRANS_TRIGGER_OFF;
+ } else {
+ this->transitionCtx.update(&this->transitionCtx.instanceData, this->state.framerateDivisor);
+ }
+ break;
+ }
+
+ // update non-instance transitions
+ switch (this->transitionMode) {
+ case TRANS_MODE_FILL_WHITE_INIT:
+ sTransitionFillTimer = 0;
+ this->envCtx.fillScreen = true;
+ this->envCtx.screenFillColor[0] = 160;
+ this->envCtx.screenFillColor[1] = 160;
+ this->envCtx.screenFillColor[2] = 160;
+
+ if (this->transitionTrigger != TRANS_TRIGGER_END) {
+ this->envCtx.screenFillColor[3] = 0;
+ this->transitionMode = TRANS_MODE_FILL_IN;
+ } else {
+ this->envCtx.screenFillColor[3] = 255;
+ this->transitionMode = TRANS_MODE_FILL_OUT;
+ }
+ break;
+
+ case TRANS_MODE_FILL_IN:
+ this->envCtx.screenFillColor[3] = (sTransitionFillTimer / 20.0f) * 255.0f;
+
+ if (sTransitionFillTimer >= 20) {
+ STOP_GAMESTATE(&this->state);
+ SET_NEXT_GAMESTATE(&this->state, Play_Init, sizeof(PlayState));
+ gSaveContext.save.entrance = this->nextEntrance;
+ this->transitionTrigger = TRANS_TRIGGER_OFF;
+ this->transitionMode = TRANS_MODE_OFF;
+ } else {
+ sTransitionFillTimer++;
+ }
+ break;
+
+ case TRANS_MODE_FILL_OUT:
+ this->envCtx.screenFillColor[3] = (1.0f - (sTransitionFillTimer / 20.0f)) * 255.0f;
+
+ if (sTransitionFillTimer >= 20) {
+ gTransitionTileState = TRANS_TILE_OFF;
+ Game_SetFramerateDivisor(&this->state, 3);
+ this->transitionTrigger = TRANS_TRIGGER_OFF;
+ this->transitionMode = TRANS_MODE_OFF;
+ this->envCtx.fillScreen = false;
+ } else {
+ sTransitionFillTimer++;
+ }
+ break;
+
+ case TRANS_MODE_FILL_BROWN_INIT:
+ sTransitionFillTimer = 0;
+ this->envCtx.fillScreen = true;
+ this->envCtx.screenFillColor[0] = 170;
+ this->envCtx.screenFillColor[1] = 160;
+ this->envCtx.screenFillColor[2] = 150;
+
+ if (this->transitionTrigger != TRANS_TRIGGER_END) {
+ this->envCtx.screenFillColor[3] = 0;
+ this->transitionMode = TRANS_MODE_FILL_IN;
+ } else {
+ this->envCtx.screenFillColor[3] = 255;
+ this->transitionMode = TRANS_MODE_FILL_OUT;
+ }
+ break;
+
+ case TRANS_MODE_INSTANT:
+ if (this->transitionTrigger != TRANS_TRIGGER_END) {
+ STOP_GAMESTATE(&this->state);
+ SET_NEXT_GAMESTATE(&this->state, Play_Init, sizeof(PlayState));
+ gSaveContext.save.entrance = this->nextEntrance;
+ this->transitionTrigger = TRANS_TRIGGER_OFF;
+ this->transitionMode = TRANS_MODE_OFF;
+ } else {
+ gTransitionTileState = TRANS_TILE_OFF;
+ Game_SetFramerateDivisor(&this->state, 3);
+ this->transitionTrigger = TRANS_TRIGGER_OFF;
+ this->transitionMode = TRANS_MODE_OFF;
+ }
+ break;
+
+ case TRANS_MODE_INSTANCE_WAIT:
+ if (gSaveContext.cutsceneTransitionControl != 0) {
+ this->transitionMode = TRANS_MODE_INSTANCE_RUNNING;
+ }
+ break;
+
+ case TRANS_MODE_SANDSTORM_INIT:
+ if (this->transitionTrigger != TRANS_TRIGGER_END) {
+ this->envCtx.sandstormState = 1;
+ this->transitionMode = TRANS_MODE_SANDSTORM;
+ } else {
+ this->envCtx.sandstormState = 2;
+ this->envCtx.sandstormPrimA = 255;
+ this->envCtx.sandstormEnvA = 255;
+ this->transitionMode = TRANS_MODE_SANDSTORM;
+ }
+ break;
+
+ case TRANS_MODE_SANDSTORM:
+ func_8019F128(NA_SE_EV_SAND_STORM - SFX_FLAG);
+ if (this->transitionTrigger == TRANS_TRIGGER_END) {
+ if (this->envCtx.sandstormPrimA < 110) {
+ gTransitionTileState = TRANS_TILE_OFF;
+ Game_SetFramerateDivisor(&this->state, 3);
+ this->transitionTrigger = TRANS_TRIGGER_OFF;
+ this->transitionMode = TRANS_MODE_OFF;
+ }
+ } else {
+ if (this->envCtx.sandstormEnvA == 255) {
+ STOP_GAMESTATE(&this->state);
+ SET_NEXT_GAMESTATE(&this->state, Play_Init, sizeof(PlayState));
+ gSaveContext.save.entrance = this->nextEntrance;
+ this->transitionTrigger = TRANS_TRIGGER_OFF;
+ this->transitionMode = TRANS_MODE_OFF;
+ }
+ }
+ break;
+
+ case TRANS_MODE_SANDSTORM_END_INIT:
+ if (this->transitionTrigger == TRANS_TRIGGER_END) {
+ this->envCtx.sandstormState = 4;
+ this->envCtx.sandstormPrimA = 255;
+ this->envCtx.sandstormEnvA = 255;
+
+ // "It's here!!!!!!!!!"
+ (void)"来た!!!!!!!!!!!!!!!!!!!!!";
+
+ this->transitionMode = TRANS_MODE_SANDSTORM_END;
+ } else {
+ this->transitionMode = TRANS_MODE_SANDSTORM_INIT;
+ }
+ break;
+
+ case TRANS_MODE_SANDSTORM_END:
+ func_8019F128(NA_SE_EV_SAND_STORM - SFX_FLAG);
+
+ if (this->transitionTrigger == TRANS_TRIGGER_END) {
+ if (this->envCtx.sandstormPrimA <= 0) {
+ gTransitionTileState = TRANS_TILE_OFF;
+ Game_SetFramerateDivisor(&this->state, 3);
+ this->transitionTrigger = TRANS_TRIGGER_OFF;
+ this->transitionMode = TRANS_MODE_OFF;
+ }
+ }
+ break;
+
+ case TRANS_MODE_CS_BLACK_FILL_INIT:
+ sTransitionFillTimer = 0;
+ this->envCtx.fillScreen = true;
+ this->envCtx.screenFillColor[0] = 0;
+ this->envCtx.screenFillColor[1] = 0;
+ this->envCtx.screenFillColor[2] = 0;
+ this->envCtx.screenFillColor[3] = 255;
+ this->transitionMode = TRANS_MODE_CS_BLACK_FILL;
+ break;
+
+ case TRANS_MODE_CS_BLACK_FILL:
+ if (gSaveContext.cutsceneTransitionControl != 0) {
+ this->envCtx.screenFillColor[3] = gSaveContext.cutsceneTransitionControl;
+
+ if (gSaveContext.cutsceneTransitionControl <= 100) {
+ gTransitionTileState = TRANS_TILE_OFF;
+ Game_SetFramerateDivisor(&this->state, 3);
+ this->transitionTrigger = TRANS_TRIGGER_OFF;
+ this->transitionMode = TRANS_MODE_OFF;
+ }
+ }
+ break;
+ }
+}
+
+const char D_801DFA34[][4] = {
+ "all", "a", "a", "b", "b", "c", "c", "d", "d", "e", "e", "f", "fa", "fa", "fb", "fb",
+ "fc", "fc", "fd", "fd", "fe", "fe", "fg", "fg", "fh", "fh", "fi", "fi", "fj", "fj", "fk", "fk",
+ "f", "g", "g", "h", "h", "i", "i", "all", "all", "a", "b", "c", "d", "e", "f", "g",
+ "h", "i", "f", "fa", "fb", "fc", "fd", "fe", "ff", "fg", "fh", "fi", "fj", "fk",
+};
+
+#ifdef NON_MATCHING
+// Stack issues
+void Play_UpdateMain(PlayState* this) {
+ Input* input = this->state.input;
+ u8 freezeFlashTimer;
+ s32 sp5C = false;
+
+ gSegments[4] = VIRTUAL_TO_PHYSICAL(this->objectCtx.status[this->objectCtx.mainKeepIndex].segment);
+ gSegments[5] = VIRTUAL_TO_PHYSICAL(this->objectCtx.status[this->objectCtx.subKeepIndex].segment);
+ gSegments[2] = VIRTUAL_TO_PHYSICAL(this->sceneSegment);
+
+ if (R_PICTO_PHOTO_STATE == PICTO_PHOTO_STATE_PROCESS) {
+ R_PICTO_PHOTO_STATE = PICTO_PHOTO_STATE_READY;
+ MsgEvent_SendNullTask();
+ Play_TakePictoPhoto(&this->pauseBgPreRender);
+ R_PICTO_PHOTO_STATE = PICTO_PHOTO_STATE_OFF;
+ }
+ Actor_SetMovementScale(this->state.framerateDivisor);
+
+ if (FrameAdvance_Update(&this->frameAdvCtx, &input[1])) {
+ if ((this->transitionMode == TRANS_MODE_OFF) && (this->transitionTrigger != TRANS_TRIGGER_OFF)) {
+ this->transitionMode = TRANS_MODE_SETUP;
+ }
+
+ if (gTransitionTileState != TRANS_TILE_OFF) {
+ switch (gTransitionTileState) {
+ case TRANS_TILE_PROCESS:
+ if (TransitionTile_Init(&sTransitionTile, 10, 7) == NULL) {
+ gTransitionTileState = TRANS_TILE_OFF;
+ } else {
+ sTransitionTile.zBuffer = gZBufferPtr;
+ gTransitionTileState = TRANS_TILE_READY;
+ Game_SetFramerateDivisor(&this->state, 1);
+ }
+ break;
+
+ case TRANS_TILE_READY:
+ TransitionTile_Update(&sTransitionTile);
+ break;
+
+ default:
+ break;
+ }
+ }
+ Play_UpdateTransition(this);
+ if (gTransitionTileState != TRANS_TILE_READY) {
+ if ((gSaveContext.gameMode == GAMEMODE_NORMAL) &&
+ (((this->msgCtx.msgMode == 0)) ||
+ ((this->msgCtx.currentTextId == 0xFF) && (this->msgCtx.msgMode == 0x42) &&
+ (this->msgCtx.unk12020 == 0x41)) ||
+ ((this->msgCtx.currentTextId >= 0x100) && (this->msgCtx.currentTextId <= 0x200))) &&
+ (this->gameOverCtx.state == GAMEOVER_INACTIVE)) {
+ KaleidoSetup_Update(this);
+ }
+
+ sp5C = (this->pauseCtx.state != 0) || (this->pauseCtx.debugEditor != DEBUG_EDITOR_NONE);
+
+ AnimationContext_Reset(&this->animationCtx);
+ Object_UpdateBank(&this->objectCtx);
+
+ if (!sp5C && (IREG(72) == 0)) {
+ this->gameplayFrames++;
+ Rumble_SetUpdateEnabled(true);
+ if ((this->actorCtx.freezeFlashTimer != 0) && (this->actorCtx.freezeFlashTimer-- < 5)) {
+ freezeFlashTimer = this->actorCtx.freezeFlashTimer;
+ if ((freezeFlashTimer > 0) && ((freezeFlashTimer % 2) != 0)) {
+ this->envCtx.fillScreen = true;
+ this->envCtx.screenFillColor[0] = this->envCtx.screenFillColor[1] =
+ this->envCtx.screenFillColor[2] = 150;
+ this->envCtx.screenFillColor[3] = 80;
+ } else {
+ this->envCtx.fillScreen = false;
+ }
+ } else {
+ Room_HandleLoadCallbacks(this, &this->roomCtx);
+ CollisionCheck_AT(this, &this->colChkCtx);
+ CollisionCheck_OC(this, &this->colChkCtx);
+ CollisionCheck_Damage(this, &this->colChkCtx);
+ CollisionCheck_ClearContext(this, &this->colChkCtx);
+ if (!this->haltAllActors) {
+ Actor_UpdateAll(this, &this->actorCtx);
+ }
+ Cutscene_UpdateManual(this, &this->csCtx);
+ Cutscene_UpdateScripted(this, &this->csCtx);
+ Effect_UpdateAll(this);
+ EffectSS_UpdateAllParticles(this);
+ EffFootmark_Update(this);
+ }
+ } else {
+ Rumble_SetUpdateEnabled(false);
+ }
+
+ Room_Noop(this, &this->roomCtx.curRoom, &input[1], 0);
+ Room_Noop(this, &this->roomCtx.prevRoom, &input[1], 1);
+ Skybox_Update(&this->skyboxCtx);
+
+ if ((this->pauseCtx.state != 0) || (this->pauseCtx.debugEditor != DEBUG_EDITOR_NONE)) {
+ KaleidoScopeCall_Update(this);
+ } else if (this->gameOverCtx.state != GAMEOVER_INACTIVE) {
+ GameOver_Update(this);
+ }
+
+ Message_Update(this);
+ Interface_Update(this);
+ AnimationContext_Update(this, &this->animationCtx);
+ SoundSource_UpdateAll(this);
+ ShrinkWindow_Update(this->state.framerateDivisor);
+ TransitionFade_Update(&this->unk_18E48, this->state.framerateDivisor);
+ }
+ }
+
+ if (!sp5C || gDbgCamEnabled) {
+ s32 sp54; // camId
+ Vec3s sp48; // InputDir
+
+ this->nextCamera = this->activeCamId;
+ for (sp54 = 0; sp54 < 4; sp54++) {
+ if ((sp54 != this->nextCamera) && (this->cameraPtrs[sp54] != NULL)) {
+ Camera_Update(&sp48, this->cameraPtrs[sp54]);
+ }
+ }
+ Camera_Update(&sp48, this->cameraPtrs[this->nextCamera]);
+ }
+
+ if (!sp5C) {
+ Play_UpdateWaterCamera(this, this->cameraPtrs[this->nextCamera]);
+ Distortion_Update();
+ }
+
+ Environment_Update(this, &this->envCtx, &this->lightCtx, &this->pauseCtx, &this->msgCtx, &this->gameOverCtx,
+ this->state.gfxCtx);
+
+ if (this->sramCtx.status != 0) {
+ if (gSaveContext.save.isOwlSave) {
+ func_80147198(&this->sramCtx);
+ } else {
+ func_80147068(&this->sramCtx);
+ }
+ }
+}
+#else
+void Play_UpdateMain(PlayState* this);
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_UpdateMain.s")
+#endif
+
+void Play_Update(PlayState* this) {
+ if (!sBombersNotebookOpen) {
+ if (this->pauseCtx.bombersNotebookOpen) {
+ sBombersNotebookOpen = true;
+ sBombersNotebook.unk_00 = 0;
+ }
+ } 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;
+ this->msgCtx.msgLength = 0;
+ this->msgCtx.msgMode = 0;
+ this->msgCtx.currentTextId = 0;
+ this->msgCtx.stateTimer = 0;
+ play_sound(NA_SE_SY_CANCEL);
+ }
+ if (sBombersNotebookOpen) {
+ BombersNotebook_Update(this, &sBombersNotebook, this->state.input);
+ Message_Update(this);
+ } else {
+ Play_UpdateMain(this);
+ }
+}
+
+void Play_PostWorldDraw(PlayState* this) {
+ if ((this->pauseCtx.state != 0) || (this->pauseCtx.debugEditor != DEBUG_EDITOR_NONE)) {
+ KaleidoScopeCall_Draw(this);
+ }
+
+ if (gSaveContext.gameMode == GAMEMODE_NORMAL) {
+ Interface_Draw(this);
+ }
+
+ if (((this->pauseCtx.state == 0) && (this->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) ||
+ (this->msgCtx.currentTextId != 0xFF)) {
+ Message_Draw(this);
+ }
+
+ if (this->gameOverCtx.state != GAMEOVER_INACTIVE) {
+ GameOver_FadeLights(this);
+ }
+
+ // Shrink the whole screen display (at the end of First and Second Day by default)
+ if (gSaveContext.screenScaleFlag) {
+ Gfx* nextOpa;
+ Gfx* opa;
+ GraphicsContext* gfxCtx = this->state.gfxCtx;
+
+ D_801F6D4C->scale = gSaveContext.screenScale / 1000.0f;
+
+ OPEN_DISPS(gfxCtx);
+
+ opa = POLY_OPA_DISP;
+ nextOpa = Graph_GfxPlusOne(opa);
+ gSPDisplayList(OVERLAY_DISP++, nextOpa);
+
+ func_80141778(D_801F6D4C, &nextOpa, this->unk_18E60, gfxCtx);
+
+ gSPEndDisplayList(nextOpa++);
+ Graph_BranchDlist(opa, nextOpa);
+ POLY_OPA_DISP = nextOpa;
+
+ CLOSE_DISPS(gfxCtx);
+ }
+}
+
+#ifdef NON_MATCHING
+// Stack issues and 1 small issue around Play_PostWorldDraw
+void Play_DrawMain(PlayState* this) {
+ GraphicsContext* gfxCtx = this->state.gfxCtx;
+ Lights* sp268;
+ Vec3f sp25C;
+ u8 sp25B = false;
+
+ if (R_PAUSE_BG_PRERENDER_STATE >= PAUSE_BG_PRERENDER_UNK4) {
+ PreRender_ApplyFiltersSlowlyDestroy(&this->pauseBgPreRender);
+ R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_OFF;
+ }
+
+ if ((R_PAUSE_BG_PRERENDER_STATE <= PAUSE_BG_PRERENDER_SETUP) && (gTransitionTileState <= TRANS_TILE_SETUP)) {
+ if (this->skyboxCtx.skyboxShouldDraw || (this->roomCtx.curRoom.roomShape->base.type == ROOM_SHAPE_TYPE_IMAGE)) {
+ func_8012CF0C(gfxCtx, false, true, 0, 0, 0);
+ } else {
+ func_8012CF0C(gfxCtx, true, true, this->lightCtx.fogColor.r, this->lightCtx.fogColor.g,
+ this->lightCtx.fogColor.b);
+ }
+ } else {
+ func_8012CF0C(gfxCtx, false, false, 0, 0, 0);
+ }
+
+ OPEN_DISPS(gfxCtx);
+
+ gSegments[4] = VIRTUAL_TO_PHYSICAL(this->objectCtx.status[this->objectCtx.mainKeepIndex].segment);
+ gSegments[5] = VIRTUAL_TO_PHYSICAL(this->objectCtx.status[this->objectCtx.subKeepIndex].segment);
+ gSegments[2] = VIRTUAL_TO_PHYSICAL(this->sceneSegment);
+
+ gSPSegment(POLY_OPA_DISP++, 0x04, this->objectCtx.status[this->objectCtx.mainKeepIndex].segment);
+ gSPSegment(POLY_XLU_DISP++, 0x04, this->objectCtx.status[this->objectCtx.mainKeepIndex].segment);
+ gSPSegment(OVERLAY_DISP++, 0x04, this->objectCtx.status[this->objectCtx.mainKeepIndex].segment);
+
+ gSPSegment(POLY_OPA_DISP++, 0x05, this->objectCtx.status[this->objectCtx.subKeepIndex].segment);
+ gSPSegment(POLY_XLU_DISP++, 0x05, this->objectCtx.status[this->objectCtx.subKeepIndex].segment);
+ gSPSegment(OVERLAY_DISP++, 0x05, this->objectCtx.status[this->objectCtx.subKeepIndex].segment);
+
+ gSPSegment(POLY_OPA_DISP++, 0x02, this->sceneSegment);
+ gSPSegment(POLY_XLU_DISP++, 0x02, this->sceneSegment);
+ gSPSegment(OVERLAY_DISP++, 0x02, this->sceneSegment);
+
+ if (1) {
+ f32 var_fv0; // zFar
+
+ ShrinkWindow_Draw(gfxCtx);
+
+ POLY_OPA_DISP = Play_SetFog(this, POLY_OPA_DISP);
+ POLY_XLU_DISP = Play_SetFog(this, POLY_XLU_DISP);
+
+ // zFar
+ var_fv0 = this->lightCtx.zFar;
+ if (var_fv0 > 12800.0f) {
+ var_fv0 = 12800.0f;
+ }
+
+ View_SetPerspective(&this->view, this->view.fovy, this->view.zNear, var_fv0);
+
+ View_Apply(&this->view, 0xF);
+
+ // The billboard matrix temporarily stores the viewing matrix
+ Matrix_MtxToMtxF(&this->view.viewing, &this->billboardMtxF);
+ Matrix_MtxToMtxF(&this->view.projection, &this->viewProjectionMtxF);
+
+ this->projectionMtxFDiagonal.x = this->viewProjectionMtxF.xx;
+ this->projectionMtxFDiagonal.y = this->viewProjectionMtxF.yy;
+ this->projectionMtxFDiagonal.z = -this->viewProjectionMtxF.zz;
+
+ SkinMatrix_MtxFMtxFMult(&this->viewProjectionMtxF, &this->billboardMtxF, &this->viewProjectionMtxF);
+
+ this->billboardMtxF.mf[3][2] = this->billboardMtxF.mf[3][1] = this->billboardMtxF.mf[3][0] =
+ this->billboardMtxF.mf[2][3] = this->billboardMtxF.mf[1][3] = this->billboardMtxF.mf[0][3] = 0.0f;
+
+ Matrix_Transpose(&this->billboardMtxF);
+
+ this->billboardMtx = GRAPH_ALLOC(this->state.gfxCtx, 2 * sizeof(Mtx));
+
+ Matrix_MtxFToMtx(&this->billboardMtxF, this->billboardMtx);
+ Matrix_RotateYF(BINANG_TO_RAD((s16)(Camera_GetCamDirYaw(GET_ACTIVE_CAM(this)) + 0x8000)), MTXMODE_NEW);
+ Matrix_ToMtx(this->billboardMtx + 1);
+
+ gSPSegment(POLY_OPA_DISP++, 0x01, this->billboardMtx);
+ gSPSegment(POLY_XLU_DISP++, 0x01, this->billboardMtx);
+ gSPSegment(OVERLAY_DISP++, 0x01, this->billboardMtx);
+
+ if (1) {
+ Gfx* sp218;
+ Gfx* sp214 = POLY_OPA_DISP;
+
+ sp218 = Graph_GfxPlusOne(sp214);
+ gSPDisplayList(OVERLAY_DISP++, sp218);
+
+ if (((this->transitionMode == TRANS_MODE_INSTANCE_RUNNING) ||
+ (this->transitionMode == TRANS_TYPE_INSTANT)) ||
+ D_801D0D54) {
+ View spA8;
+
+ View_Init(&spA8, gfxCtx);
+ spA8.flags = 0xA;
+
+ SET_FULLSCREEN_VIEWPORT(&spA8);
+
+ View_ApplyTo(&spA8, &sp218);
+ this->transitionCtx.draw(&this->transitionCtx.instanceData, &sp218);
+ }
+
+ TransitionFade_Draw(&this->unk_18E48, &sp218);
+
+ if (gVisMonoColor.a != 0) {
+ sVisMono.primColor.rgba = gVisMonoColor.rgba;
+ VisMono_Draw(&sVisMono, &sp218);
+ }
+
+ gSPEndDisplayList(sp218++);
+ Graph_BranchDlist(sp214, sp218);
+ POLY_OPA_DISP = sp218;
+ }
+
+ if (gTransitionTileState == TRANS_TILE_READY) {
+ Gfx* sp90 = POLY_OPA_DISP;
+
+ TransitionTile_Draw(&sTransitionTile, &sp90);
+ POLY_OPA_DISP = sp90;
+ sp25B = true;
+ goto PostWorldDraw;
+ }
+
+ PreRender_SetValues(&this->pauseBgPreRender, D_801FBBCC, D_801FBBCE, gfxCtx->curFrameBuffer, gfxCtx->zbuffer);
+
+ if (R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_PROCESS) {
+ MsgEvent_SendNullTask();
+ if (!gSaveContext.screenScaleFlag) {
+ PreRender_ApplyFiltersSlowlyInit(&this->pauseBgPreRender);
+ }
+ R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_READY;
+ SREG(33) |= 1;
+ } else {
+ if (R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_READY) {
+ Gfx* sp8C = POLY_OPA_DISP;
+
+ if (this->pauseBgPreRender.unk_4D == 2) {
+ func_80170B28(&this->pauseBgPreRender, &sp8C);
+ } else {
+ func_80170798(&this->pauseBgPreRender, &sp8C);
+ }
+
+ gSPDisplayList(sp8C++, D_0E000000.syncSegments);
+ POLY_OPA_DISP = sp8C;
+ sp25B = true;
+ goto PostWorldDraw;
+ }
+
+ if (!this->unk_18844) {
+ if (1) {
+ if ((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);
+ } 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);
+ }
+ }
+
+ func_800FE390(this);
+ }
+
+ sp268 = LightContext_NewLights(&this->lightCtx, gfxCtx);
+
+ if (this->roomCtx.curRoom.enablePosLights || (MREG(93) != 0)) {
+ sp268->enablePosLights = true;
+ }
+
+ Lights_BindAll(sp268, this->lightCtx.listHead, NULL, this);
+ Lights_Draw(sp268, gfxCtx);
+
+ if (1) {
+ u32 roomDrawFlags = ((1) ? 1 : 0) | (((void)0, 1) ? 2 : 0); // FAKE:
+
+ Scene_Draw(this);
+ if (this->roomCtx.unk78) {
+ Room_Draw(this, &this->roomCtx.curRoom, roomDrawFlags & 3);
+ Room_Draw(this, &this->roomCtx.prevRoom, roomDrawFlags & 3);
+ }
+ }
+
+ 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);
+ }
+
+ // envCtx.precipitation[PRECIP_RAIN_CUR]
+ if (this->envCtx.unk_F2[1] != 0) {
+ Environment_DrawRain(this, &this->view, gfxCtx);
+ }
+ }
+
+ if (1) {
+ Environment_FillScreen(gfxCtx, 0, 0, 0, this->bgCoverAlpha, 1);
+ }
+
+ if (1) {
+ Actor_DrawAll(this, &this->actorCtx);
+ }
+
+ if (1) {
+ if (!this->envCtx.sunMoonDisabled) {
+ sp25C.x = this->view.eye.x + this->envCtx.sunPos.x;
+ sp25C.y = this->view.eye.y + this->envCtx.sunPos.y;
+ sp25C.z = this->view.eye.z + this->envCtx.sunPos.z;
+ Environment_DrawSunLensFlare(this, &this->envCtx, &this->view, gfxCtx, sp25C);
+ }
+
+ Environment_DrawCustomLensFlare(this);
+ }
+
+ if (1) {
+ if (R_PLAY_FILL_SCREEN_ON) {
+ Environment_FillScreen(gfxCtx, R_PLAY_FILL_SCREEN_R, R_PLAY_FILL_SCREEN_G, R_PLAY_FILL_SCREEN_B,
+ R_PLAY_FILL_SCREEN_ALPHA, 3);
+ }
+
+ switch (this->envCtx.fillScreen) {
+ case 1:
+ Environment_FillScreen(gfxCtx, this->envCtx.screenFillColor[0], this->envCtx.screenFillColor[1],
+ this->envCtx.screenFillColor[2], this->envCtx.screenFillColor[3], 3);
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ if (1) {
+ if (this->envCtx.sandstormState != 0) {
+ Environment_DrawSandstorm(this, this->envCtx.sandstormState);
+ }
+ }
+
+ if (this->worldCoverAlpha != 0) {
+ Environment_FillScreen(gfxCtx, 0, 0, 0, this->worldCoverAlpha, 3);
+ }
+
+ if (1) {
+ DebugDisplay_DrawObjects(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)) {
+ Gfx* sp74;
+ Gfx* sp70 = POLY_OPA_DISP;
+
+ sp74 = Graph_GfxPlusOne(sp70);
+ gSPDisplayList(OVERLAY_DISP++, sp74);
+ this->pauseBgPreRender.fbuf = gfxCtx->curFrameBuffer;
+
+ if (R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_SETUP) {
+ R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_PROCESS;
+ this->pauseBgPreRender.fbufSave = gfxCtx->zbuffer;
+ this->pauseBgPreRender.cvgSave = this->unk_18E58;
+ } else if (R_PICTO_PHOTO_STATE == PICTO_PHOTO_STATE_SETUP) {
+ R_PICTO_PHOTO_STATE = PICTO_PHOTO_STATE_PROCESS;
+ this->pauseBgPreRender.fbufSave = gfxCtx->zbuffer;
+ this->pauseBgPreRender.cvgSave = this->unk_18E58;
+ } else {
+ gTransitionTileState = TRANS_TILE_PROCESS;
+ this->pauseBgPreRender.fbufSave = gfxCtx->zbuffer;
+ this->pauseBgPreRender.cvgSave = NULL;
+ }
+
+ func_801705B4(&this->pauseBgPreRender, &sp74);
+
+ if (this->pauseBgPreRender.cvgSave != NULL) {
+ func_80170730(&this->pauseBgPreRender, &sp74);
+ }
+
+ gSPEndDisplayList(sp74++);
+ Graph_BranchDlist(sp70, sp74);
+ POLY_OPA_DISP = sp74;
+ this->unk_18B49 = 2;
+ SREG(33) |= 1;
+ } else {
+ PostWorldDraw:
+ if (1) {
+ Play_PostWorldDraw(this);
+ }
+ }
+ }
+ }
+
+ if ((this->view.unk164 != 0) && !gDbgCamEnabled) {
+ Vec3s sp4C;
+
+ Camera_Update(&sp4C, GET_ACTIVE_CAM(this));
+ View_UpdateViewingMatrix(&this->view);
+ this->view.unk164 = 0;
+ if ((this->skyboxId != SKYBOX_NONE) && !this->envCtx.skyboxDisabled) {
+ Skybox_UpdateMatrix(&this->skyboxCtx, this->view.eye.x, this->view.eye.y, this->view.eye.z);
+ }
+ }
+
+ if (!sp25B) {
+ func_800FE3E0(this);
+ }
+
+ CLOSE_DISPS(this->state.gfxCtx);
+}
+#else
+void Play_DrawMain(PlayState* this);
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_DrawMain.s")
+#endif
+
+void Play_Draw(PlayState* this) {
+ GraphicsContext* gfxCtx = this->state.gfxCtx;
+
+ {
+ GraphicsContext* gfxCtx2 = this->state.gfxCtx;
+
+ if (sBombersNotebookOpen) {
+ if (D_801FBBD4 != 1) {
+ MsgEvent_SendNullTask();
+ func_80178818();
+ gfxCtx2->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx2->framebufferIndex % 2);
+ gfxCtx2->zbuffer = SysCfb_GetZBuffer();
+ gfxCtx2->viMode = D_801FBB88;
+ gfxCtx2->viConfigFeatures = gViConfigFeatures;
+ gfxCtx2->xScale = gViConfigXScale;
+ gfxCtx2->yScale = gViConfigYScale;
+ gfxCtx2->updateViMode = true;
+ }
+ } else {
+ if (D_801FBBD4 != 0) {
+ MsgEvent_SendNullTask();
+ func_80178750();
+ gfxCtx2->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx2->framebufferIndex % 2);
+ gfxCtx2->zbuffer = SysCfb_GetZBuffer();
+ gfxCtx2->viMode = D_801FBB88;
+ gfxCtx2->viConfigFeatures = gViConfigFeatures;
+ gfxCtx2->xScale = gViConfigXScale;
+ gfxCtx2->yScale = gViConfigYScale;
+ gfxCtx2->updateViMode = true;
+ }
+ }
+ }
+
+ if (sBombersNotebookOpen && ((SREG(2) != 2) || (gZBufferPtr == NULL))) {
+ BombersNotebook_Draw(&sBombersNotebook, gfxCtx);
+ Message_Draw(this);
+ } else {
+ Play_DrawMain(this);
+ }
+}
+
+void Play_Main(GameState* thisx) {
+ static Input* prevInput = NULL;
+ PlayState* this = (PlayState*)thisx;
+
+ prevInput = CONTROLLER1(&this->state);
+ DebugDisplay_Init();
+
+ {
+ GraphicsContext* gfxCtx = this->state.gfxCtx;
+
+ if (1) {
+ this->state.gfxCtx = NULL;
+ }
+ Play_Update(this);
+ this->state.gfxCtx = gfxCtx;
+ }
+
+ {
+ Input input = *CONTROLLER1(&this->state);
+
+ if (1) {
+ *CONTROLLER1(&this->state) = D_801F6C18;
+ }
+ Play_Draw(this);
+ *CONTROLLER1(&this->state) = input;
+ }
+
+ CutsceneManager_Update();
+ CutsceneManager_ClearWaiting();
+}
s32 Play_InCsMode(PlayState* this) {
return (this->csCtx.state != 0) || Player_InCsMode(this);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80169100.s")
+f32 Play_GetFloorSurfaceImpl(PlayState* this, MtxF* mtx, CollisionPoly** poly, s32* bgId, Vec3f* pos) {
+ f32 floorHeight = BgCheck_EntityRaycastFloor3(&this->colCtx, poly, bgId, pos);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_801691F0.s")
+ if (floorHeight > BGCHECK_Y_MIN) {
+ func_800C0094(*poly, pos->x, floorHeight, pos->z, mtx);
+ } else {
+ mtx->xy = 0.0f;
+ mtx->zx = 0.0f;
+ mtx->yx = 0.0f;
+ mtx->xx = 0.0f;
+ mtx->wz = 0.0f;
+ mtx->xz = 0.0f;
+ mtx->wy = 0.0f;
+ mtx->wx = 0.0f;
+ mtx->zz = 0.0f;
+ mtx->yz = 0.0f;
+ mtx->zy = 0.0f;
+ mtx->yy = 1.0f;
+ mtx->xw = pos->x;
+ mtx->yw = pos->y;
+ mtx->zw = pos->z;
+ mtx->ww = 1.0f;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_LoadScene.s")
+ return floorHeight;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_8016927C.s")
+void Play_GetFloorSurface(PlayState* this, MtxF* mtx, Vec3f* pos) {
+ CollisionPoly* poly;
+ s32 bgId;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_801692C4.s")
+ Play_GetFloorSurfaceImpl(this, mtx, &poly, &bgId, pos);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_SceneInit.s")
+void* Play_LoadFile(PlayState* this, RomFile* entry) {
+ size_t size = entry->vromEnd - entry->vromStart;
+ void* allocp = THA_AllocTailAlign16(&this->state.heap, size);
+
+ DmaMgr_SendRequest0(allocp, entry->vromStart, size);
+
+ return allocp;
+}
+
+void Play_InitEnvironment(PlayState* this, s16 skyboxId) {
+ Skybox_Init(&this->state, &this->skyboxCtx, skyboxId);
+ Environment_Init(this, &this->envCtx, 0);
+}
+
+void Play_InitScene(PlayState* this, s32 spawn) {
+ this->curSpawn = spawn;
+ this->linkActorEntry = NULL;
+ this->actorCsCamList = NULL;
+ this->setupEntranceList = NULL;
+ this->setupExitList = NULL;
+ this->naviQuestHints = NULL;
+ this->setupPathList = NULL;
+ this->sceneMaterialAnims = NULL;
+ this->roomCtx.unk74 = NULL;
+ this->numSetupActors = 0;
+ Object_InitBank(&this->state, &this->objectCtx);
+ LightContext_Init(this, &this->lightCtx);
+ Door_InitContext(&this->state, &this->doorCtx);
+ Room_Init(this, &this->roomCtx);
+ gSaveContext.worldMapArea = 0;
+ Scene_ExecuteCommands(this, this->sceneSegment);
+ Play_InitEnvironment(this, this->skyboxId);
+}
+
+void Play_SpawnScene(PlayState* this, s32 sceneId, s32 spawn) {
+ s32 pad;
+ SceneTableEntry* scene = &gSceneTable[sceneId];
+
+ scene->unk_D = 0;
+ this->loadedScene = scene;
+ this->sceneId = sceneId;
+ this->sceneConfig = scene->drawConfig;
+ this->sceneSegment = Play_LoadFile(this, &scene->segment);
+ scene->unk_D = 0;
+ gSegments[2] = VIRTUAL_TO_PHYSICAL(this->sceneSegment);
+ Play_InitScene(this, spawn);
+ Room_AllocateAndLoad(this, &this->roomCtx);
+}
void Play_GetScreenPos(PlayState* this, Vec3f* worldPos, Vec3f* screenPos) {
f32 invW;
@@ -379,9 +1897,8 @@ void Play_SetupRespawnPoint(GameState* thisx, s32 respawnMode, s32 playerParams)
Player* player = GET_PLAYER(this);
if (this->sceneId != SCENE_KAKUSIANA) { // Grottos
- Play_SetRespawnData(&this->state, respawnMode, (u16)((void)0, gSaveContext.save.entrance),
- this->roomCtx.curRoom.num, playerParams, &player->actor.world.pos,
- player->actor.shape.rot.y);
+ Play_SetRespawnData(&this->state, respawnMode, ((void)0, gSaveContext.save.entrance), this->roomCtx.curRoom.num,
+ playerParams, &player->actor.world.pos, player->actor.shape.rot.y);
}
}
@@ -405,7 +1922,7 @@ void func_80169EFC(GameState* thisx) {
gSaveContext.respawnFlag = 1;
func_80169ECC(this);
this->transitionTrigger = TRANS_TRIGGER_START;
- this->transitionType = TRANS_TYPE_02;
+ this->transitionType = TRANS_TYPE_FADE_BLACK;
}
// Gameplay_LoadToLastEntrance ?
@@ -417,7 +1934,7 @@ void func_80169F78(GameState* thisx) {
gSaveContext.respawnFlag = -1;
func_80169ECC(this);
this->transitionTrigger = TRANS_TRIGGER_START;
- this->transitionType = TRANS_TYPE_02;
+ this->transitionType = TRANS_TYPE_FADE_BLACK;
}
// Gameplay_TriggerRespawn ?
@@ -426,11 +1943,10 @@ void func_80169FDC(GameState* thisx) {
func_80169F78(thisx);
}
-// Used by Kankyo to determine how to change the lighting, e.g. for game over.
-s32 func_80169FFC(GameState* thisx) {
+s32 Play_CamIsNotFixed(GameState* thisx) {
PlayState* this = (PlayState*)thisx;
- return this->roomCtx.curRoom.mesh->type0.type != 1;
+ return this->roomCtx.curRoom.roomShape->base.type != ROOM_SHAPE_TYPE_IMAGE;
}
s32 FrameAdvance_IsEnabled(GameState* thisx) {
@@ -476,7 +1992,7 @@ s32 func_8016A02C(GameState* thisx, Actor* actor, s16* yaw) {
/**
* @brief Tests if \p pos is underwater.
*
- * @param[in] play PlayState
+ * @param[in] this PlayState
* @param[in] pos position to test
* @return true if inside a waterbox and not above a void.
*/
@@ -502,51 +2018,330 @@ s32 Play_IsDebugCamEnabled(void) {
return gDbgCamEnabled;
}
-// A mapping from playerActorCsIds to sGlobalCamDataSettings indices.
-extern s16 D_801D0D64[];
-// s16 D_801D0D64[] = { -3, -2, -4, -5, -7, -11, -8, -9, -6, -16 };
+// A mapping from playerCsIds to sGlobalCamDataSettings indices.
+s16 sPlayerCsIdToCsCamId[] = {
+ CS_CAM_ID_GLOBAL_ITEM_OCARINA, // PLAYER_CS_ID_ITEM_OCARINA
+ CS_CAM_ID_GLOBAL_ITEM_GET, // PLAYER_CS_ID_ITEM_GET
+ CS_CAM_ID_GLOBAL_ITEM_BOTTLE, // PLAYER_CS_ID_ITEM_BOTTLE
+ CS_CAM_ID_GLOBAL_ITEM_SHOW, // PLAYER_CS_ID_ITEM_SHOW
+ CS_CAM_ID_GLOBAL_WARP_PAD_MOON, // PLAYER_CS_ID_WARP_PAD_MOON
+ CS_CAM_ID_GLOBAL_MASK_TRANSFORMATION, // PLAYER_CS_ID_MASK_TRANSFORMATION
+ CS_CAM_ID_GLOBAL_DEATH, // PLAYER_CS_ID_DEATH
+ CS_CAM_ID_GLOBAL_REVIVE, // PLAYER_CS_ID_REVIVE
+ CS_CAM_ID_GLOBAL_SONG_WARP, // PLAYER_CS_ID_SONG_WARP
+ CS_CAM_ID_GLOBAL_WARP_PAD_ENTRANCE, // PLAYER_CS_ID_WARP_PAD_ENTRANCE
+};
// Used by Player
/**
- * Extract the common actor cutscene ids used by Player from the scene and set the actor cutscene ids in
- * this->playerActorCsIds. If a playerActorCsId is not present in the scene, then that particular id is set
- * to -1. Otherwise, if there is an ActorCutscene where csCamSceneDataId matches the appropriate element of D_801D0D64,
- * set the corresponding playerActorCsId (and possibly change its priority for the zeroth one)
+ * Extract the common cutscene ids used by Player from the scene and set the cutscene ids in this->playerCsIds.
+ * If a playerCsId is not present in the scene, then that particular id is set to CS_ID_NONE.
+ * Otherwise, if there is an ActorCutscene where csCamId matches the appropriate element of sPlayerCsIdToCsCamId,
+ * set the corresponding playerActorCsId (and possibly change its priority for the zeroth one).
*/
-void Play_AssignPlayerActorCsIdsFromScene(GameState* thisx, s32 startActorCsId) {
+void Play_AssignPlayerCsIdsFromScene(GameState* thisx, s32 spawnCsId) {
PlayState* this = (PlayState*)thisx;
s32 i;
- s16* curPlayerActorCsId = this->playerActorCsIds;
- s16* phi_s1 = D_801D0D64;
+ s16* curPlayerCsId = this->playerCsIds;
+ s16* csCamId = sPlayerCsIdToCsCamId;
- for (i = 0; i < ARRAY_COUNT(this->playerActorCsIds); i++, curPlayerActorCsId++, phi_s1++) {
- ActorCutscene* actorCutscene;
- s32 curActorCsId;
+ for (i = 0; i < ARRAY_COUNT(this->playerCsIds); i++, curPlayerCsId++, csCamId++) {
+ ActorCutscene* csEntry;
+ s32 curCsId;
- *curPlayerActorCsId = -1;
+ *curPlayerCsId = CS_ID_NONE;
- for (curActorCsId = startActorCsId; curActorCsId != -1; curActorCsId = actorCutscene->additionalCutscene) {
- actorCutscene = ActorCutscene_GetCutscene(curActorCsId);
+ for (curCsId = spawnCsId; curCsId != CS_ID_NONE; curCsId = csEntry->additionalCsId) {
+ csEntry = CutsceneManager_GetCutsceneEntry(curCsId);
- if (actorCutscene->csCamSceneDataId == *phi_s1) {
- if ((actorCutscene->csCamSceneDataId == -3) &&
- (actorCutscene->priority == 700)) { // override ocarina cs priority
- actorCutscene->priority = 550;
+ if (csEntry->csCamId == *csCamId) {
+ if ((csEntry->csCamId == CS_CAM_ID_GLOBAL_ITEM_OCARINA) && (csEntry->priority == 700)) {
+ csEntry->priority = 550;
}
- *curPlayerActorCsId = curActorCsId;
+ *curPlayerCsId = curCsId;
break;
}
}
}
}
-// These regs are used by Gameplay_Draw, and several actors, purpose as yet unclear.
-void func_8016A268(GameState* thisx, s16 arg1, u8 arg2, u8 arg3, u8 arg4, u8 arg5) {
- MREG(64) = arg1;
- MREG(65) = arg2;
- MREG(66) = arg3;
- MREG(67) = arg4;
- MREG(68) = arg5;
+// Set values to fill screen
+void Play_FillScreen(GameState* thisx, s16 fillScreenOn, u8 red, u8 green, u8 blue, u8 alpha) {
+ R_PLAY_FILL_SCREEN_ON = fillScreenOn;
+ R_PLAY_FILL_SCREEN_R = red;
+ R_PLAY_FILL_SCREEN_G = green;
+ R_PLAY_FILL_SCREEN_B = blue;
+ R_PLAY_FILL_SCREEN_ALPHA = alpha;
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_Init.s")
+void Play_Init(GameState* thisx) {
+ PlayState* this = (PlayState*)thisx;
+ GraphicsContext* gfxCtx = this->state.gfxCtx;
+ s32 pad;
+ uintptr_t zAlloc;
+ s32 zAllocSize;
+ Player* player;
+ s32 i;
+ s32 spawn;
+ u8 sceneLayer;
+ s32 scene;
+
+ if ((gSaveContext.respawnFlag == -4) || (gSaveContext.respawnFlag == -0x63)) {
+ if (CHECK_EVENTINF(EVENTINF_27)) {
+ CLEAR_EVENTINF(EVENTINF_27);
+ STOP_GAMESTATE(&this->state);
+ SET_NEXT_GAMESTATE(&this->state, DayTelop_Init, sizeof(DayTelopState));
+ return;
+ }
+
+ gSaveContext.unk_3CA7 = 1;
+ if (gSaveContext.respawnFlag == -0x63) {
+ gSaveContext.respawnFlag = 2;
+ }
+ } else {
+ gSaveContext.unk_3CA7 = 0;
+ }
+
+ if (gSaveContext.save.entrance == -1) {
+ gSaveContext.save.entrance = 0;
+ STOP_GAMESTATE(&this->state);
+ SET_NEXT_GAMESTATE(&this->state, TitleSetup_Init, sizeof(TitleSetupState));
+ return;
+ }
+
+ if ((gSaveContext.nextCutsceneIndex == 0xFFEF) || (gSaveContext.nextCutsceneIndex == 0xFFF0)) {
+ scene = ((void)0, gSaveContext.save.entrance) >> 9;
+ spawn = (((void)0, gSaveContext.save.entrance) >> 4) & 0x1F;
+
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) {
+ if (scene == ENTR_SCENE_MOUNTAIN_VILLAGE_WINTER) {
+ scene = ENTR_SCENE_MOUNTAIN_VILLAGE_SPRING;
+ } else if (scene == ENTR_SCENE_GORON_VILLAGE_WINTER) {
+ scene = ENTR_SCENE_GORON_VILLAGE_SPRING;
+ } else if (scene == ENTR_SCENE_PATH_TO_GORON_VILLAGE_WINTER) {
+ scene = ENTR_SCENE_PATH_TO_GORON_VILLAGE_SPRING;
+ } else if ((scene == ENTR_SCENE_SNOWHEAD) || (scene == ENTR_SCENE_PATH_TO_SNOWHEAD) ||
+ (scene == ENTR_SCENE_PATH_TO_MOUNTAIN_VILLAGE) || (scene == ENTR_SCENE_GORON_SHRINE) ||
+ (scene == ENTR_SCENE_GORON_RACETRACK)) {
+ gSaveContext.nextCutsceneIndex = 0xFFF0;
+ }
+ }
+
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) {
+ if (scene == ENTR_SCENE_SOUTHERN_SWAMP_POISONED) {
+ scene = ENTR_SCENE_SOUTHERN_SWAMP_CLEARED;
+ } else if (scene == ENTR_SCENE_WOODFALL) {
+ gSaveContext.nextCutsceneIndex = 0xFFF1;
+ }
+ }
+
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE) && (scene == ENTR_SCENE_IKANA_CANYON)) {
+ gSaveContext.nextCutsceneIndex = 0xFFF2;
+ }
+
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE) &&
+ ((scene == ENTR_SCENE_GREAT_BAY_COAST) || (scene == ENTR_SCENE_ZORA_CAPE))) {
+ gSaveContext.nextCutsceneIndex = 0xFFF0;
+ }
+
+ // "First cycle" Termina Field
+ if (INV_CONTENT(ITEM_OCARINA) != ITEM_OCARINA) {
+ if ((scene == ENTR_SCENE_TERMINA_FIELD) &&
+ (((void)0, gSaveContext.save.entrance) != ENTRANCE(TERMINA_FIELD, 10))) {
+ gSaveContext.nextCutsceneIndex = 0xFFF4;
+ }
+ }
+ //! FAKE:
+ gSaveContext.save.entrance =
+ Entrance_Create(((void)0, scene), spawn, ((void)0, gSaveContext.save.entrance) & 0xF);
+ }
+
+ GameState_Realloc(&this->state, 0);
+ KaleidoManager_Init(this);
+ ShrinkWindow_Init();
+ View_Init(&this->view, gfxCtx);
+ func_801A3EC0(0);
+ Quake_Init();
+ Distortion_Init(this);
+
+ for (i = 0; i < ARRAY_COUNT(this->cameraPtrs); i++) {
+ this->cameraPtrs[i] = NULL;
+ }
+
+ Camera_Init(&this->mainCamera, &this->view, &this->colCtx, this);
+ Camera_ChangeStatus(&this->mainCamera, CAM_STATUS_ACTIVE);
+
+ for (i = 0; i < ARRAY_COUNT(this->subCameras); i++) {
+ Camera_Init(&this->subCameras[i], &this->view, &this->colCtx, this);
+ Camera_ChangeStatus(&this->subCameras[i], CAM_STATUS_INACTIVE);
+ }
+
+ this->cameraPtrs[CAM_ID_MAIN] = &this->mainCamera;
+ this->cameraPtrs[CAM_ID_MAIN]->uid = CAM_ID_MAIN;
+ this->activeCamId = CAM_ID_MAIN;
+
+ func_800DFF18(&this->mainCamera, 0x7F);
+ Sram_Alloc(&this->state, &this->sramCtx);
+ Regs_InitData(this);
+ Message_Init(this);
+ GameOver_Init(this);
+ SoundSource_InitAll(this);
+ EffFootmark_Init(this);
+ Effect_Init(this);
+ EffectSS_Init(this, 100);
+ CollisionCheck_InitContext(this, &this->colChkCtx);
+ AnimationContext_Reset(&this->animationCtx);
+ Cutscene_InitContext(this, &this->csCtx);
+
+ if (gSaveContext.nextCutsceneIndex != 0xFFEF) {
+ gSaveContext.save.cutsceneIndex = gSaveContext.nextCutsceneIndex;
+ gSaveContext.nextCutsceneIndex = 0xFFEF;
+ }
+
+ if (gSaveContext.save.cutsceneIndex == 0xFFFD) {
+ gSaveContext.save.cutsceneIndex = 0;
+ }
+
+ if (gSaveContext.nextDayTime != 0xFFFF) {
+ gSaveContext.save.time = gSaveContext.nextDayTime;
+ gSaveContext.skyboxTime = gSaveContext.nextDayTime;
+ }
+
+ if ((gSaveContext.save.time >= CLOCK_TIME(18, 0)) || (gSaveContext.save.time < CLOCK_TIME(6, 30))) {
+ gSaveContext.save.isNight = true;
+ } else {
+ gSaveContext.save.isNight = false;
+ }
+
+ func_800EDDB0(this);
+
+ if (((gSaveContext.gameMode != GAMEMODE_NORMAL) && (gSaveContext.gameMode != GAMEMODE_TITLE_SCREEN)) ||
+ (gSaveContext.save.cutsceneIndex >= 0xFFF0)) {
+ gSaveContext.unk_3DC0 = 0;
+ Magic_Reset(this);
+ gSaveContext.sceneLayer = (gSaveContext.save.cutsceneIndex & 0xF) + 1;
+
+ // Set saved cutscene to 0 so it doesn't immediately play, but instead let the `CutsceneManager` handle it.
+ gSaveContext.save.cutsceneIndex = 0;
+ } else {
+ gSaveContext.sceneLayer = 0;
+ }
+
+ sceneLayer = gSaveContext.sceneLayer;
+
+ Play_SpawnScene(
+ this, Entrance_GetSceneIdAbsolute(((void)0, gSaveContext.save.entrance) + ((void)0, gSaveContext.sceneLayer)),
+ Entrance_GetSpawnNum(((void)0, gSaveContext.save.entrance) + ((void)0, gSaveContext.sceneLayer)));
+ KaleidoScopeCall_Init(this);
+ Interface_Init(this);
+
+ if (gSaveContext.nextDayTime != 0xFFFF) {
+ if (gSaveContext.nextDayTime == 0x8000) {
+ gSaveContext.save.day++;
+ gSaveContext.save.daysElapsed++;
+ gSaveContext.dogIsLost = true;
+ gSaveContext.nextDayTime = -2;
+ } else {
+ gSaveContext.nextDayTime = -3;
+ }
+ }
+
+ Play_InitMotionBlur();
+
+ R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_OFF;
+ 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);
+
+ this->unk_18E64 = D_801FBB90;
+ this->pictoPhotoI8 = gPictoPhotoI8;
+ this->unk_18E68 = D_80784600;
+ this->unk_18E58 = D_80784600;
+ this->unk_18E60 = D_80784600;
+ gTransitionTileState = TRANS_TILE_OFF;
+ this->transitionMode = TRANS_MODE_OFF;
+ D_801D0D54 = false;
+
+ FrameAdvance_Init(&this->frameAdvCtx);
+ Rand_Seed(osGetTime());
+ Matrix_Init(&this->state);
+
+ this->state.main = Play_Main;
+ this->state.destroy = Play_Destroy;
+
+ this->transitionTrigger = TRANS_TRIGGER_END;
+ this->worldCoverAlpha = 0;
+ this->bgCoverAlpha = 0;
+ this->haltAllActors = false;
+ this->unk_18844 = false;
+
+ if (gSaveContext.gameMode != GAMEMODE_TITLE_SCREEN) {
+ if (gSaveContext.nextTransitionType == TRANS_NEXT_TYPE_DEFAULT) {
+ this->transitionType =
+ (Entrance_GetTransitionFlags(((void)0, gSaveContext.save.entrance) + sceneLayer) >> 7) & 0x7F;
+ } else {
+ this->transitionType = gSaveContext.nextTransitionType;
+ gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT;
+ }
+ } else {
+ this->transitionType = TRANS_TYPE_FADE_BLACK;
+ }
+
+ TransitionFade_Init(&this->unk_18E48);
+ TransitionFade_SetType(&this->unk_18E48, 3);
+ TransitionFade_SetColor(&this->unk_18E48, RGBA8(160, 160, 160, 255));
+ TransitionFade_Start(&this->unk_18E48);
+ VisMono_Init(&sVisMono);
+
+ gVisMonoColor.a = 0;
+ D_801F6D4C = &D_801F6D38;
+ func_80140E80(D_801F6D4C);
+ D_801F6D4C->lodProportion = 0.0f;
+ D_801F6D4C->mode = 1;
+ D_801F6D4C->primColor.r = 0;
+ D_801F6D4C->primColor.g = 0;
+ D_801F6D4C->primColor.b = 0;
+ D_801F6D4C->primColor.a = 0;
+ D_801F6D4C->envColor.r = 0;
+ D_801F6D4C->envColor.g = 0;
+ D_801F6D4C->envColor.b = 0;
+ D_801F6D4C->envColor.a = 0;
+ CutsceneFlags_UnsetAll(this);
+ THA_GetRemaining(&this->state.heap);
+ zAllocSize = THA_GetRemaining(&this->state.heap);
+ zAlloc = (uintptr_t)THA_AllocTailAlign16(&this->state.heap, zAllocSize);
+ ZeldaArena_Init(((zAlloc + 8) & ~0xF), (zAllocSize - ((zAlloc + 8) & ~0xF)) + zAlloc); //! @bug: Incorrect ALIGN16s
+ Actor_InitContext(this, &this->actorCtx, this->linkActorEntry);
+
+ while (!Room_HandleLoadCallbacks(this, &this->roomCtx)) {}
+
+ if ((CURRENT_DAY != 0) && ((this->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_1) ||
+ (this->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_5))) {
+ Actor_Spawn(&this->actorCtx, this, ACTOR_EN_TEST4, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0);
+ }
+
+ player = GET_PLAYER(this);
+
+ Camera_InitPlayerSettings(&this->mainCamera, player);
+ gDbgCamEnabled = false;
+
+ if ((player->actor.params & 0xFF) != 0xFF) {
+ Camera_ChangeDataIdx(&this->mainCamera, player->actor.params & 0xFF);
+ }
+
+ CutsceneManager_StoreCamera(&this->mainCamera);
+ Interface_SetSceneRestrictions(this);
+ func_800FB758(this);
+ gSaveContext.seqId = this->sequenceCtx.seqId;
+ gSaveContext.ambienceId = this->sequenceCtx.ambienceId;
+ AnimationContext_Update(this, &this->animationCtx);
+ Cutscene_HandleEntranceTriggers(this);
+ gSaveContext.respawnFlag = 0;
+ sBombersNotebookOpen = false;
+ BombersNotebook_Init(&sBombersNotebook);
+}
+
+//! TODO: fake symbol, remove when BombersNotebook_Update is matching
+u16 D_801D0D78[] = { 0, 0, 0, 0 };
diff --git a/src/code/z_play_hireso.c b/src/code/z_play_hireso.c
index e429051c8..829fe71f2 100644
--- a/src/code/z_play_hireso.c
+++ b/src/code/z_play_hireso.c
@@ -16,12 +16,12 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016EA90.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016F1A8.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/BombersNotebook_Draw.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016F4EC.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016F5A8.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/BombersNotebook_Update.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016FC78.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/BombersNotebook_Init.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016FC98.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/BombersNotebook_Destroy.s")
diff --git a/src/code/z_player_call.c b/src/code/z_player_call.c
index 8cd8207b7..a109dab17 100644
--- a/src/code/z_player_call.c
+++ b/src/code/z_player_call.c
@@ -1,8 +1,9 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
#define FLAGS \
(ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_200000 | ACTOR_FLAG_2000000 | \
- ACTOR_FLAG_4000000 | ACTOR_FLAG_80000000)
+ ACTOR_FLAG_CAN_PRESS_SWITCH | ACTOR_FLAG_80000000)
ActorFunc sPlayerCallInitFunc;
ActorFunc sPlayerCallDestroyFunc;
@@ -14,7 +15,7 @@ void PlayerCall_Destroy(Actor* thisx, PlayState* play);
void PlayerCall_Update(Actor* thisx, PlayState* play);
void PlayerCall_Draw(Actor* thisx, PlayState* play);
-const ActorInit Player_InitVars = {
+ActorInit Player_InitVars = {
ACTOR_PLAYER,
ACTORCAT_PLAYER,
FLAGS,
diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c
index 6f4198fc7..f8b33b853 100644
--- a/src/code/z_player_lib.c
+++ b/src/code/z_player_lib.c
@@ -1,9 +1,48 @@
+/**
+ * File: z_player_lib.c
+ * Description: Set of library functions to interact with the Player system
+ */
+
+#include "prevent_bss_reordering.h"
#include "global.h"
+#include "objects/gameplay_keep/gameplay_keep.h"
+
+// Assets for each player form
+#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"
+// Assets for each mask
+#include "objects/object_mask_truth/object_mask_truth.h"
+#include "objects/object_mask_kerfay/object_mask_kerfay.h"
+#include "objects/object_mask_yofukasi/object_mask_yofukasi.h"
+#include "objects/object_mask_rabit/object_mask_rabit.h"
+#include "objects/object_mask_ki_tan/object_mask_ki_tan.h"
+#include "objects/object_mask_json/object_mask_json.h"
+#include "objects/object_mask_romerny/object_mask_romerny.h"
+#include "objects/object_mask_zacho/object_mask_zacho.h"
+#include "objects/object_mask_posthat/object_mask_posthat.h"
#include "objects/object_mask_meoto/object_mask_meoto.h"
+#include "objects/object_mask_bigelf/object_mask_bigelf.h"
+#include "objects/object_mask_gibudo/object_mask_gibudo.h"
+#include "objects/object_mask_gero/object_mask_gero.h"
+#include "objects/object_mask_dancer/object_mask_dancer.h"
+#include "objects/object_mask_skj/object_mask_skj.h"
+#include "objects/object_mask_stone/object_mask_stone.h"
+#include "objects/object_mask_bree/object_mask_bree.h"
+#include "objects/object_mask_bakuretu/object_mask_bakuretu.h"
+#include "objects/object_mask_bu_san/object_mask_bu_san.h"
+#include "objects/object_mask_kyojin/object_mask_kyojin.h"
+#include "objects/object_mask_boy/object_mask_boy.h"
+#include "objects/object_mask_goron/object_mask_goron.h"
+#include "objects/object_mask_zora/object_mask_zora.h"
+#include "objects/object_mask_nuts/object_mask_nuts.h"
+
+// Assets for other actors
+#include "overlays/actors/ovl_En_Arrow/z_en_arrow.h"
void PlayerCall_Init(Actor* thisx, PlayState* play);
void PlayerCall_Destroy(Actor* thisx, PlayState* play);
@@ -17,19 +56,37 @@ typedef struct {
/* 0x1A */ s16 unk_1A;
} struct_801F58B0; // size = 0x1C
-extern struct_801F58B0 D_801F58B0[3][3];
+struct_801F58B0 D_801F58B0[3][3];
-extern s32 D_801F59C8[2];
+#define D_801F59B0_LEN 2
-extern s32 D_801F59E0;
+Vec3f D_801F59B0[D_801F59B0_LEN];
-extern Vec3f D_801F59E8;
+s32 D_801F59C8[D_801F59B0_LEN];
-void func_80127B64(struct_801F58B0 arg0[], UNK_TYPE arg1, Vec3f* arg2);
+typedef struct BunnyEarKinematics {
+ /* 0x0 */ Vec3s rot;
+ /* 0x6 */ Vec3s angVel;
+} BunnyEarKinematics; // size = 0xC
+
+BunnyEarKinematics sBunnyEarKinematics;
+
+Vec3f* sPlayerCurBodyPartPos;
+
+s32 D_801F59E0;
+
+s32 sPlayerLod;
+
+Vec3f sPlayerGetItemRefPos;
+
+PlayerModelType sPlayerLeftHandType;
+PlayerModelType sPlayerRightHandType;
+
+void func_80127B64(struct_801F58B0 arg0[], s32 count, Vec3f* arg2);
s32 func_801226E0(PlayState* play, s32 arg1) {
if (arg1 == 0) {
- Play_SetupRespawnPoint(&play->state, RESPAWN_MODE_DOWN, 0xBFF);
+ Play_SetupRespawnPoint(&play->state, RESPAWN_MODE_DOWN, PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B));
if (play->sceneId == SCENE_KAKUSIANA) {
return 1;
}
@@ -94,25 +151,42 @@ void func_801229A0(PlayState* play, Player* player) {
OPEN_DISPS(play->state.gfxCtx);
if ((gSaveContext.jinxTimer != 0) || (player->invincibilityTimer > 0)) {
- POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP);
+ POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
}
CLOSE_DISPS(play->state.gfxCtx);
}
-void func_801229EC(UNK_TYPE arg0, UNK_TYPE arg1) {
+// Update function
+void func_801229EC(Actor* thisx, PlayState* play) {
}
-extern s16 sMaskObjectIds[PLAYER_MASK_MAX - 1];
-#if 0
s16 sMaskObjectIds[PLAYER_MASK_MAX - 1] = {
- OBJECT_MASK_TRUTH, OBJECT_MASK_KERFAY, OBJECT_MASK_YOFUKASI, OBJECT_MASK_RABIT, OBJECT_MASK_KI_TAN,
- OBJECT_MASK_JSON, OBJECT_MASK_ROMERNY, OBJECT_MASK_ZACHO, OBJECT_MASK_POSTHAT, OBJECT_MASK_MEOTO,
- OBJECT_MASK_BIGELF, OBJECT_MASK_GIBUDO, OBJECT_MASK_GERO, OBJECT_MASK_DANCER, OBJECT_MASK_SKJ,
- OBJECT_MASK_STONE, OBJECT_MASK_BREE, OBJECT_MASK_BAKURETU, OBJECT_MASK_BU_SAN, OBJECT_MASK_KYOJIN,
- OBJECT_MASK_BOY, OBJECT_MASK_GORON, OBJECT_MASK_ZORA, OBJECT_MASK_NUTS,
+ OBJECT_MASK_TRUTH, // PLAYER_MASK_TRUTH
+ OBJECT_MASK_KERFAY, // PLAYER_MASK_KAFEIS_MASK
+ OBJECT_MASK_YOFUKASI, // PLAYER_MASK_ALL_NIGHT
+ OBJECT_MASK_RABIT, // PLAYER_MASK_BUNNY
+ OBJECT_MASK_KI_TAN, // PLAYER_MASK_KEATON
+ OBJECT_MASK_JSON, // PLAYER_MASK_GARO
+ OBJECT_MASK_ROMERNY, // PLAYER_MASK_ROMANI
+ OBJECT_MASK_ZACHO, // PLAYER_MASK_CIRCUS_LEADER
+ OBJECT_MASK_POSTHAT, // PLAYER_MASK_POSTMAN
+ OBJECT_MASK_MEOTO, // PLAYER_MASK_COUPLE
+ OBJECT_MASK_BIGELF, // PLAYER_MASK_GREAT_FAIRY
+ OBJECT_MASK_GIBUDO, // PLAYER_MASK_GIBDO
+ OBJECT_MASK_GERO, // PLAYER_MASK_DON_GERO
+ OBJECT_MASK_DANCER, // PLAYER_MASK_KAMARO
+ OBJECT_MASK_SKJ, // PLAYER_MASK_CAPTAIN
+ OBJECT_MASK_STONE, // PLAYER_MASK_STONE
+ OBJECT_MASK_BREE, // PLAYER_MASK_BREMEN
+ OBJECT_MASK_BAKURETU, // PLAYER_MASK_BLAST
+ OBJECT_MASK_BU_SAN, // PLAYER_MASK_SCENTS
+ OBJECT_MASK_KYOJIN, // PLAYER_MASK_GIANT
+ OBJECT_MASK_BOY, // PLAYER_MASK_FIERCE_DEITY
+ OBJECT_MASK_GORON, // PLAYER_MASK_GORON
+ OBJECT_MASK_ZORA, // PLAYER_MASK_ZORA
+ OBJECT_MASK_NUTS, // PLAYER_MASK_DEKU
};
-#endif
// Load mask object?
/**
@@ -140,7 +214,8 @@ void func_801229FC(Player* player) {
s32 i;
for (i = 0; i < ARRAY_COUNT(D_801F58B0); i++) {
- func_80127B64(D_801F58B0[i], ARRAY_COUNT(D_801F58B0[i]), &player->bodyPartsPos[7]);
+ func_80127B64(D_801F58B0[i], ARRAY_COUNT(D_801F58B0[i]),
+ &player->bodyPartsPos[PLAYER_BODYPART_HEAD]);
}
}
}
@@ -150,7 +225,7 @@ void func_801229FC(Player* player) {
} else if (player->currentMask == PLAYER_MASK_CIRCUS_LEADER) {
s32 i;
- for (i = 0; i < ARRAY_COUNT(D_801F59C8); i++) {
+ for (i = 0; i < D_801F59B0_LEN; i++) {
D_801F59C8[i] += Rand_S16Offset(4, 23) + (s32)(fabsf(player->linearVelocity) * 50.0f);
}
}
@@ -197,14 +272,11 @@ typedef struct {
/* 0x4 */ Gfx* dList;
} struct_801BFDD0; // size = 0x08
-extern struct_801BFDD0 D_801BFDD0[];
-#if 0
struct_801BFDD0 D_801BFDD0[] = {
{ { 180, 200, 255 }, gLinkGoronCurledDL },
{ { 155, 0, 0 }, gLinkGoronRollingSpikesAndEffectDL },
{ { 255, 0, 0 }, gLinkGoronGoronPunchEffectDL },
};
-#endif
void func_80122D44(PlayState* play, struct_80122D44_arg1* arg1) {
struct_801BFDD0* temp_s3;
@@ -240,8 +312,6 @@ void func_80122D44(PlayState* play, struct_80122D44_arg1* arg1) {
CLOSE_DISPS(play->state.gfxCtx);
}
-extern u8 sMaskItemIds[PLAYER_MASK_MAX - 1];
-#if 0
u8 sMaskItemIds[PLAYER_MASK_MAX - 1] = {
ITEM_MASK_TRUTH, // PLAYER_MASK_TRUTH
ITEM_MASK_KAFEIS_MASK, // PLAYER_MASK_KAFEIS_MASK
@@ -268,7 +338,6 @@ u8 sMaskItemIds[PLAYER_MASK_MAX - 1] = {
ITEM_MASK_ZORA, // PLAYER_MASK_ZORA
ITEM_MASK_DEKU, // PLAYER_MASK_DEKU
};
-#endif
u8 Player_MaskIdToItemId(s32 maskIdMinusOne) {
return sMaskItemIds[maskIdMinusOne];
@@ -286,13 +355,13 @@ s32 Player_GetCurMaskItemId(PlayState* play) {
void func_80122F28(Player* player) {
if ((player->actor.category == ACTORCAT_PLAYER) &&
- (!(player->stateFlags1 & (PLAYER_STATE1_20000000 | PLAYER_STATE1_800000 | PLAYER_STATE1_200000 |
- PLAYER_STATE1_800 | PLAYER_STATE1_400))) &&
+ (!(player->stateFlags1 & (PLAYER_STATE1_400 | PLAYER_STATE1_800 | PLAYER_STATE1_200000 | PLAYER_STATE1_800000 |
+ PLAYER_STATE1_20000000))) &&
(!(player->stateFlags2 & PLAYER_STATE2_1))) {
- if (player->doorType < 0) {
- ActorCutscene_SetIntentToPlay(0x7C);
+ if (player->doorType <= PLAYER_DOORTYPE_TALKING) {
+ CutsceneManager_Queue(CS_ID_GLOBAL_TALK);
} else {
- ActorCutscene_SetIntentToPlay(0x7D);
+ CutsceneManager_Queue(CS_ID_GLOBAL_DOOR);
}
}
}
@@ -315,38 +384,60 @@ void func_8012300C(PlayState* play, s32 arg1) {
player->unk_B2B = arg1;
}
-void func_8012301C(Player* player, PlayState* play2) {
+// Update function
+void func_8012301C(Actor* thisx, PlayState* play2) {
PlayState* play = play2;
- s32 pad;
+ Player* this = (Player*)thisx;
- player->unk_AE7++;
+ this->unk_AE7++;
- if (player->unk_AE7 == 2) {
- s16 objectId = gPlayerFormObjectIndices[((void)0, gSaveContext.save.playerForm)];
+ if (this->unk_AE7 == 2) {
+ s16 objectId = gPlayerFormObjectIndices[GET_PLAYER_FORM];
gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId = objectId;
- func_8012F73C(&play->objectCtx, player->actor.objBankIndex, objectId);
- player->actor.objBankIndex = Object_GetIndex(&play->objectCtx, GAMEPLAY_KEEP);
- } else if (player->unk_AE7 >= 3) {
+ func_8012F73C(&play->objectCtx, this->actor.objBankIndex, objectId);
+ this->actor.objBankIndex = Object_GetIndex(&play->objectCtx, GAMEPLAY_KEEP);
+ } else if (this->unk_AE7 >= 3) {
s32 objBankIndex = Object_GetIndex(&play->objectCtx, gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId);
if (Object_IsLoaded(&play->objectCtx, objBankIndex)) {
- player->actor.objBankIndex = objBankIndex;
- player->actor.shape.rot.z = gSaveContext.save.playerForm + 1;
- player->actor.init = PlayerCall_Init;
- player->actor.update = PlayerCall_Update;
- player->actor.draw = PlayerCall_Draw;
+ this->actor.objBankIndex = objBankIndex;
+ this->actor.shape.rot.z = GET_PLAYER_FORM + 1;
+ this->actor.init = PlayerCall_Init;
+ this->actor.update = PlayerCall_Update;
+ this->actor.draw = PlayerCall_Draw;
gSaveContext.save.equippedMask = PLAYER_MASK_NONE;
}
}
}
-extern s16 D_801BFE14[][18];
+FlexSkeletonHeader* gPlayerSkeletons[PLAYER_FORM_MAX] = {
+ &gLinkFierceDeitySkel, &gLinkGoronSkel, &gLinkZoraSkel, &gLinkDekuSkel, &gLinkHumanSkel,
+};
+
+s16 D_801BFE14[PLAYER_BOOTS_MAX][18] = {
+ // PLAYER_BOOTS_FIERCE_DEITY
+ { 200, 666, 200, 700, 366, 200, 600, 175, 60, 800, 1000, -100, 600, 590, 800, 125, 300, 65 },
+ // PLAYER_BOOTS_HYLIAN
+ { 200, 1000, 300, 800, 500, 400, 800, 400, 120, 800, 550, -100, 600, 540, 750, 125, 400, 200 },
+ // PLAYER_BOOTS_GIANT
+ { 100, 1000, 300, 800, 250, 200, 800, 200, 90, 800, 350, -80, 600, 540, 750, 60, 200, 200 },
+ // PLAYER_BOOTS_DEKU
+ { 200, 1000, 300, 700, 550, 270, 600, 1000, 120, 800, 600, -100, 600, 590, 750, 125, 200, 130 },
+ // PLAYER_BOOTS_ZORA_LAND
+ { 200, 1000, 300, 700, 550, 270, 700, 300, 120, 800, 600, -100, 600, 590, 750, 125, 200, 130 },
+ // PLAYER_BOOTS_ZORA_UNDERWATER
+ { 200, 1000, 300, 700, 550, 270, 700, 300, 120, 800, 600, -100, 600, 590, 750, 125, 200, 130 },
+ // PLAYER_BOOTS_GORON
+ { 200, 1000, 300, 700, 550, 270, 700, 200, 120, 800, 600, -140, 600, 590, 750, 125, 200, 130 },
+ // PLAYER_BOOTS_7
+ { 80, 800, 150, 700, 480, 270, 600, 50, 120, 800, 300, -40, 400, 540, 270, 25, 0, 80 },
+};
// OoT's Player_SetBootData
void func_80123140(PlayState* play, Player* player) {
s16* bootRegs;
- s32 currentBoots;
+ PlayerBoots currentBoots;
f32 scale;
if ((player->actor.id == ACTOR_PLAYER) && (player->transformation == PLAYER_FORM_FIERCE_DEITY)) {
@@ -389,7 +480,7 @@ void func_80123140(PlayState* play, Player* player) {
IREG(69) = bootRegs[16];
MREG(95) = bootRegs[17];
- if (play->roomCtx.curRoom.unk3 == 2) {
+ if (play->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_2) {
R_RUN_SPEED_LIMIT = 500;
}
@@ -403,8 +494,8 @@ void func_80123140(PlayState* play, Player* player) {
}
s32 Player_InBlockingCsMode(PlayState* play, Player* player) {
- return (player->stateFlags1 & (PLAYER_STATE1_20000000 | PLAYER_STATE1_200 | PLAYER_STATE1_80)) ||
- (player->csMode != 0) || (play->transitionTrigger == TRANS_TRIGGER_START) ||
+ return (player->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_200 | PLAYER_STATE1_20000000)) ||
+ (player->csMode != PLAYER_CSMODE_0) || (play->transitionTrigger == TRANS_TRIGGER_START) ||
(play->transitionMode != TRANS_MODE_OFF) || (player->stateFlags1 & PLAYER_STATE1_1) ||
(player->stateFlags3 & PLAYER_STATE3_80) || (play->actorCtx.unk268 != 0);
}
@@ -420,7 +511,7 @@ s32 func_80123420(Player* player) {
}
s32 func_80123434(Player* player) {
- return player->stateFlags1 & (PLAYER_STATE1_40000000 | PLAYER_STATE1_20000 | PLAYER_STATE1_10000);
+ return player->stateFlags1 & (PLAYER_STATE1_10000 | PLAYER_STATE1_20000 | PLAYER_STATE1_40000000);
}
// Unused
@@ -428,7 +519,7 @@ s32 func_80123448(PlayState* play) {
Player* player = GET_PLAYER(play);
return (player->stateFlags1 & PLAYER_STATE1_400000) &&
- (player->transformation != PLAYER_FORM_HUMAN || (!func_80123434(player) && player->unk_730 == NULL));
+ (player->transformation != PLAYER_FORM_HUMAN || (!func_80123434(player) && player->targetedActor == NULL));
}
// TODO: Player_IsGoronOrDeku is a temporary name until we have more info on this function.
@@ -440,10 +531,11 @@ s32 Player_IsGoronOrDeku(Player* player) {
s32 func_801234D4(PlayState* play) {
Player* player = GET_PLAYER(play);
- return (player->stateFlags2 & PLAYER_STATE2_8) || player->actor.speedXZ != 0.0f ||
+ return (player->stateFlags2 & PLAYER_STATE2_8) || (player->actor.speed != 0.0f) ||
((player->transformation != PLAYER_FORM_ZORA) && (player->stateFlags1 & PLAYER_STATE1_8000000)) ||
((player->transformation == PLAYER_FORM_ZORA) && (player->stateFlags1 & PLAYER_STATE1_8000000) &&
- (!(player->actor.bgCheckFlags & 1) || (player->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER)));
+ (!(player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) ||
+ (player->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER)));
}
s32 func_80123590(PlayState* play, Actor* actor) {
@@ -478,27 +570,27 @@ s32 func_801235DC(PlayState* play, f32 arg1, s16 arg2) {
return false;
}
-s32 func_8012364C(PlayState* play, Player* player, s32 arg2) {
+ItemId func_8012364C(PlayState* play, Player* player, s32 arg2) {
if (arg2 >= 4) {
return ITEM_NONE;
}
if (arg2 == 0) {
- s32 item = Inventory_GetBtnBItem(play);
+ ItemId item = Inventory_GetBtnBItem(play);
if (item >= ITEM_FD) {
return item;
}
- if ((player->currentMask == PLAYER_MASK_BLAST) && (play->interfaceCtx.bButtonDoAction == 0x18)) {
+ if ((player->currentMask == PLAYER_MASK_BLAST) && (play->interfaceCtx.bButtonDoAction == DO_ACTION_EXPLODE)) {
return ITEM_F0;
}
- if ((player->currentMask == PLAYER_MASK_BREMEN) && (play->interfaceCtx.bButtonDoAction == 0x1A)) {
+ if ((player->currentMask == PLAYER_MASK_BREMEN) && (play->interfaceCtx.bButtonDoAction == DO_ACTION_MARCH)) {
return ITEM_F1;
}
- if ((player->currentMask == PLAYER_MASK_KAMARO) && (play->interfaceCtx.bButtonDoAction == 0x19)) {
+ if ((player->currentMask == PLAYER_MASK_KAMARO) && (play->interfaceCtx.bButtonDoAction == DO_ACTION_DANCE)) {
return ITEM_F2;
}
@@ -506,42 +598,155 @@ s32 func_8012364C(PlayState* play, Player* player, s32 arg2) {
}
if (arg2 == 1) {
- return (gSaveContext.buttonStatus[1] != BTN_DISABLED)
- ? gSaveContext.save.equips.buttonItems[0][EQUIP_SLOT_C_LEFT]
- : (gSaveContext.hudVisibility == HUD_VISIBILITY_A_B_C)
- ? gSaveContext.save.equips.buttonItems[0][EQUIP_SLOT_C_LEFT]
- : ITEM_NONE;
+ return C_BTN_ITEM(EQUIP_SLOT_C_LEFT);
}
if (arg2 == 2) {
- return (gSaveContext.buttonStatus[2] != BTN_DISABLED)
- ? gSaveContext.save.equips.buttonItems[0][EQUIP_SLOT_C_DOWN]
- : (gSaveContext.hudVisibility == HUD_VISIBILITY_A_B_C)
- ? gSaveContext.save.equips.buttonItems[0][EQUIP_SLOT_C_DOWN]
- : ITEM_NONE;
+ return C_BTN_ITEM(EQUIP_SLOT_C_DOWN);
}
- return (gSaveContext.buttonStatus[3] != BTN_DISABLED) ? gSaveContext.save.equips.buttonItems[0][EQUIP_SLOT_C_RIGHT]
- : (gSaveContext.hudVisibility == HUD_VISIBILITY_A_B_C)
- ? gSaveContext.save.equips.buttonItems[0][EQUIP_SLOT_C_RIGHT]
- : ITEM_NONE;
+ return C_BTN_ITEM(EQUIP_SLOT_C_RIGHT);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80123810.s")
+u16 sCItemButtons[] = { BTN_CLEFT, BTN_CDOWN, BTN_CRIGHT };
-extern u8 sActionModelGroups[];
+PlayerItemAction func_80123810(PlayState* play) {
+ Player* player = GET_PLAYER(play);
+ PlayerItemAction itemAction;
+ ItemId itemId;
+ s32 i;
-s32 Player_ActionToModelGroup(Player* player, s32 actionParam) {
- s32 modelGroup = sActionModelGroups[actionParam];
+ if (gSaveContext.save.unk_06 == 0) {
+ if (CHECK_BTN_ANY(CONTROLLER1(&play->state)->press.button, BTN_A | BTN_B)) {
+ play->interfaceCtx.unk_222 = 0;
+ play->interfaceCtx.unk_224 = 0;
+ Interface_SetHudVisibility(play->msgCtx.unk_120BC);
+ return PLAYER_IA_MINUS1;
+ }
+ } else {
+ gSaveContext.save.unk_06--;
+ }
- if ((modelGroup == 2) && Player_IsGoronOrDeku(player)) {
- return 1;
+ for (i = 0; i < ARRAY_COUNT(sCItemButtons); i++) {
+ if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, sCItemButtons[i])) {
+ i++;
+ itemId = func_8012364C(play, player, i);
+
+ play->interfaceCtx.unk_222 = 0;
+ play->interfaceCtx.unk_224 = 0;
+ Interface_SetHudVisibility(play->msgCtx.unk_120BC);
+
+ if ((itemId >= ITEM_FD) || ((itemAction = play->unk_18794(play, player, itemId)) <= PLAYER_IA_MINUS1)) {
+ play_sound(NA_SE_SY_ERROR);
+ return PLAYER_IA_MINUS1;
+ } else {
+ s32 pad;
+
+ player->heldItemButton = i;
+ return itemAction;
+ }
+ }
+ }
+
+ return PLAYER_IA_NONE;
+}
+
+// Used to map item actions to model groups
+u8 sActionModelGroups[PLAYER_IA_MAX] = {
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_NONE
+ PLAYER_MODELGROUP_13, // PLAYER_IA_LAST_USED
+ PLAYER_MODELGROUP_STICK, // PLAYER_IA_FISHING_ROD
+ 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_STICK, // PLAYER_IA_STICK
+ PLAYER_MODELGROUP_ZORA_FINS, // PLAYER_IA_ZORA_FINS
+ PLAYER_MODELGROUP_BOW, // PLAYER_IA_BOW
+ PLAYER_MODELGROUP_BOW, // PLAYER_IA_BOW_FIRE
+ PLAYER_MODELGROUP_BOW, // PLAYER_IA_BOW_ICE
+ PLAYER_MODELGROUP_BOW, // PLAYER_IA_BOW_LIGHT
+ PLAYER_MODELGROUP_HOOKSHOT, // PLAYER_IA_HOOKSHOT
+ PLAYER_MODELGROUP_EXPLOSIVES, // PLAYER_IA_BOMB
+ PLAYER_MODELGROUP_EXPLOSIVES, // PLAYER_IA_POWDER_KEG
+ PLAYER_MODELGROUP_EXPLOSIVES, // PLAYER_IA_BOMBCHU
+ PLAYER_MODELGROUP_8, // PLAYER_IA_11
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_NUT
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_PICTO_BOX
+ PLAYER_MODELGROUP_INSTRUMENT, // PLAYER_IA_OCARINA
+ PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_EMPTY
+ PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_FISH
+ PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_SPRING_WATER
+ PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_HOT_SPRING_WATER
+ PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_ZORA_EGG
+ PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_DEKU_PRINCESS
+ PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_GOLD_DUST
+ PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_1C
+ PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_SEAHORSE
+ PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_MUSHROOM
+ PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_HYLIAN_LOACH
+ PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_BUG
+ PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_POE
+ PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_BIG_POE
+ PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_POTION_RED
+ PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_POTION_BLUE
+ PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_POTION_GREEN
+ PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_MILK
+ PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_MILK_HALF
+ PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_CHATEAU
+ PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_FAIRY
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MOON_TEAR
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_DEED_LAND
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_ROOM_KEY
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_LETTER_TO_KAFEI
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MAGIC_BEANS
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_DEED_SWAMP
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_DEED_MOUNTAIN
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_DEED_OCEAN
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_32
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_LETTER_MAMA
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_34
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_35
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_PENDANT_OF_MEMORIES
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_37
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_38
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_39
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_TRUTH
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_KAFEIS_MASK
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_ALL_NIGHT
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_BUNNY
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_KEATON
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_GARO
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_ROMANI
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_CIRCUS_LEADER
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_POSTMAN
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_COUPLE
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_GREAT_FAIRY
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_GIBDO
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_DON_GERO
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_KAMARO
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_CAPTAIN
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_STONE
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_BREMEN
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_BLAST
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_SCENTS
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_GIANT
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_FIERCE_DEITY
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_GORON
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_ZORA
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_DEKU
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_LENS
+};
+
+PlayerModelGroup Player_ActionToModelGroup(Player* player, PlayerItemAction itemAction) {
+ PlayerModelGroup modelGroup = sActionModelGroups[itemAction];
+
+ if ((modelGroup == PLAYER_MODELGROUP_ONE_HAND_SWORD) && Player_IsGoronOrDeku(player)) {
+ return PLAYER_MODELGROUP_1;
}
return modelGroup;
}
-extern u8 D_801BFF90[PLAYER_FORM_MAX];
-#if 0
u8 D_801BFF90[PLAYER_FORM_MAX] = {
PLAYER_BOOTS_FIERCE_DEITY, // PLAYER_FORM_FIERCE_DEITY
PLAYER_BOOTS_GORON, // PLAYER_FORM_GORON
@@ -549,10 +754,7 @@ u8 D_801BFF90[PLAYER_FORM_MAX] = {
PLAYER_BOOTS_DEKU, // PLAYER_FORM_DEKU
PLAYER_BOOTS_HYLIAN, // PLAYER_FORM_HUMAN
};
-#endif
-extern u8 sPlayerStrengths[PLAYER_FORM_MAX];
-#if 0
u8 sPlayerStrengths[PLAYER_FORM_MAX] = {
PLAYER_STRENGTH_HUMAN, // PLAYER_FORM_FIERCE_DEITY
PLAYER_STRENGTH_GORON, // PLAYER_FORM_GORON
@@ -560,88 +762,522 @@ u8 sPlayerStrengths[PLAYER_FORM_MAX] = {
PLAYER_STRENGTH_DEKU, // PLAYER_FORM_DEKU
PLAYER_STRENGTH_HUMAN, // PLAYER_FORM_HUMAN
};
-#endif
typedef struct {
- /* 0x00 */ u8 flag;
- /* 0x02 */ u16 textId;
-} TextTriggerEntry; // size = 0x04
+ /* 0x0 */ u8 flag;
+ /* 0x2 */ u16 textId;
+} EnvHazardTextTriggerEntry; // size = 0x4
-extern TextTriggerEntry sEnvironmentTextTriggers[];
// These textIds are OoT remnants. The corresponding text entries are not present in this game, and so these don't point
// to anything relevant.
-#if 0
-TextTriggerEntry sEnvironmentTextTriggers[] = {
- { 1, 0x26FC },
- { 2, 0x26FD },
- { 0, 0 },
- { 2, 0x26FD },
+EnvHazardTextTriggerEntry sEnvHazardTextTriggers[] = {
+ { ENV_HAZARD_TEXT_TRIGGER_HOTROOM, 0x26FC }, // PLAYER_ENV_HAZARD_HOTROOM - 1
+ { ENV_HAZARD_TEXT_TRIGGER_UNDERWATER, 0x26FD }, // PLAYER_ENV_HAZARD_UNDERWATER_FLOOR - 1
+ { 0, 0 }, // PLAYER_ENV_HAZARD_SWIMMING - 1
+ { ENV_HAZARD_TEXT_TRIGGER_UNDERWATER, 0x26FD }, // PLAYER_ENV_HAZARD_UNDERWATER_FREE - 1
};
-#endif
-extern Gfx** sPlayerDListGroups[];
+PlayerModelIndices gPlayerModelTypes[PLAYER_MODELGROUP_MAX] = {
+ /* PLAYER_MODELGROUP_0 */
+ { PLAYER_ANIMTYPE_2, PLAYER_MODELTYPE_LH_OPEN, PLAYER_MODELTYPE_RH_SHIELD, PLAYER_MODELTYPE_SHEATH_12,
+ PLAYER_MODELTYPE_WAIST },
+ /* PLAYER_MODELGROUP_1 */
+ { PLAYER_ANIMTYPE_1, PLAYER_MODELTYPE_LH_ONE_HAND_SWORD, PLAYER_MODELTYPE_RH_CLOSED, PLAYER_MODELTYPE_SHEATH_15,
+ PLAYER_MODELTYPE_WAIST },
+ /* PLAYER_MODELGROUP_ONE_HAND_SWORD */
+ { PLAYER_ANIMTYPE_1, PLAYER_MODELTYPE_LH_ONE_HAND_SWORD, PLAYER_MODELTYPE_RH_SHIELD, PLAYER_MODELTYPE_SHEATH_13,
+ PLAYER_MODELTYPE_WAIST },
+ /* PLAYER_MODELGROUP_DEFAULT */
+ { PLAYER_ANIMTYPE_DEFAULT, PLAYER_MODELTYPE_LH_OPEN, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_14,
+ PLAYER_MODELTYPE_WAIST },
+ /* PLAYER_MODELGROUP_4 */
+ { PLAYER_ANIMTYPE_DEFAULT, PLAYER_MODELTYPE_LH_OPEN, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_14,
+ PLAYER_MODELTYPE_WAIST },
+ /* PLAYER_MODELGROUP_TWO_HAND_SWORD */
+ { PLAYER_ANIMTYPE_3, PLAYER_MODELTYPE_LH_TWO_HAND_SWORD, PLAYER_MODELTYPE_RH_CLOSED, PLAYER_MODELTYPE_SHEATH_14,
+ PLAYER_MODELTYPE_WAIST },
+ /* PLAYER_MODELGROUP_BOW */
+ { PLAYER_ANIMTYPE_4, PLAYER_MODELTYPE_LH_CLOSED, PLAYER_MODELTYPE_RH_BOW, PLAYER_MODELTYPE_SHEATH_14,
+ PLAYER_MODELTYPE_WAIST },
+ /* PLAYER_MODELGROUP_EXPLOSIVES */
+ { PLAYER_ANIMTYPE_5, PLAYER_MODELTYPE_LH_OPEN, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_14,
+ PLAYER_MODELTYPE_WAIST },
+ /* PLAYER_MODELGROUP_8 */
+ { PLAYER_ANIMTYPE_DEFAULT, PLAYER_MODELTYPE_LH_4, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_14,
+ PLAYER_MODELTYPE_WAIST },
+ /* PLAYER_MODELGROUP_HOOKSHOT */
+ { PLAYER_ANIMTYPE_4, PLAYER_MODELTYPE_LH_OPEN, PLAYER_MODELTYPE_RH_HOOKSHOT, PLAYER_MODELTYPE_SHEATH_14,
+ PLAYER_MODELTYPE_WAIST },
+ /* PLAYER_MODELGROUP_STICK */
+ { PLAYER_ANIMTYPE_3, PLAYER_MODELTYPE_LH_CLOSED, PLAYER_MODELTYPE_RH_CLOSED, PLAYER_MODELTYPE_SHEATH_14,
+ PLAYER_MODELTYPE_WAIST },
+ /* PLAYER_MODELGROUP_INSTRUMENT */
+ { PLAYER_ANIMTYPE_DEFAULT, PLAYER_MODELTYPE_LH_OPEN, PLAYER_MODELTYPE_RH_INSTRUMENT, PLAYER_MODELTYPE_SHEATH_14,
+ PLAYER_MODELTYPE_WAIST },
+ /* PLAYER_MODELGROUP_BOTTLE */
+ { PLAYER_ANIMTYPE_DEFAULT, PLAYER_MODELTYPE_LH_BOTTLE, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_14,
+ PLAYER_MODELTYPE_WAIST },
+ /* PLAYER_MODELGROUP_13 */
+ { PLAYER_ANIMTYPE_DEFAULT, PLAYER_MODELTYPE_LH_ONE_HAND_SWORD, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_15,
+ PLAYER_MODELTYPE_WAIST },
+ /* PLAYER_MODELGROUP_ZORA_FINS */
+ { PLAYER_ANIMTYPE_DEFAULT, PLAYER_MODELTYPE_LH_CLOSED, PLAYER_MODELTYPE_RH_CLOSED, PLAYER_MODELTYPE_SHEATH_14,
+ PLAYER_MODELTYPE_WAIST },
+};
-void func_801239AC(Player* player) {
+/* DLists groups start */
+// Note: Only the ones with size 2 * PLAYER_FORM_MAX
+
+Gfx* gPlayerWaistDLs[2 * PLAYER_FORM_MAX] = {
+ gLinkFierceDeityWaistDL, gLinkFierceDeityWaistDL, gLinkGoronWaistDL, gLinkGoronWaistDL, gLinkZoraWaistDL,
+ gLinkZoraWaistDL, gLinkDekuWaistDL, gLinkDekuWaistDL, gLinkHumanWaistDL, gLinkHumanWaistDL,
+};
+
+Gfx* gPlayerHandHoldingShields[2 * (PLAYER_SHIELD_MAX - 1)] = {
+ gLinkHumanRightHandHoldingHerosShieldDL,
+ gLinkHumanRightHandHoldingHerosShieldDL,
+ gLinkHumanRightHandHoldingMirrorShieldDL,
+ gLinkHumanRightHandHoldingMirrorShieldDL,
+};
+
+Gfx* gPlayerSheath12DLs[2 * PLAYER_FORM_MAX] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ gLinkDekuSheathDL,
+ gLinkDekuSheathDL,
+ gLinkHumanSheathEmptyDL,
+ gLinkHumanSheathEmptyDL,
+};
+
+Gfx* gPlayerSheath13DLs[2 * PLAYER_FORM_MAX] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ gLinkDekuSheathDL,
+ gLinkDekuSheathDL,
+ gLinkHumanSheathEmptyDL,
+ gLinkHumanSheathEmptyDL,
+};
+
+Gfx* gPlayerSheath14DLs[2 * PLAYER_FORM_MAX] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ gLinkDekuSheathDL,
+ gLinkDekuSheathDL,
+ gLinkHumanSheathEmptyDL,
+ gLinkHumanSheathEmptyDL,
+};
+
+Gfx* gPlayerShields[] = {
+ gLinkHumanHerosShieldWithMtxDL,
+ gLinkHumanHerosShieldWithMtxDL,
+ gLinkHumanMirrorShieldWithMtxDL,
+ gLinkHumanMirrorShieldWithMtxDL,
+};
+
+Gfx* gPlayerSheathedSwords[] = {
+ gLinkHumanSheathedKokiriSwordDL, gLinkHumanSheathedKokiriSwordDL, gLinkHumanSheathedRazorSwordDL,
+ gLinkHumanSheathedRazorSwordDL, gLinkHumanSheathedGildedSwordDL, gLinkHumanSheathedGildedSwordDL,
+};
+
+Gfx* gPlayerSwordSheaths[] = {
+ gLinkHumanKokiriSwordSheathDL, gLinkHumanKokiriSwordSheathDL, gLinkHumanRazorSwordSheathDL,
+ gLinkHumanRazorSwordSheathDL, gLinkHumanGildedSwordSheathDL, gLinkHumanGildedSwordSheathDL,
+};
+
+Gfx* gPlayerLeftHandTwoHandSwordDLs[2 * PLAYER_FORM_MAX] = {
+ gLinkFierceDeityLeftHandHoldingSwordDL,
+ gLinkFierceDeityLeftHandHoldingSwordDL,
+ gLinkGoronLeftHandOpenDL,
+ gLinkGoronLeftHandOpenDL,
+ gLinkZoraLeftHandOpenDL,
+ gLinkZoraLeftHandOpenDL,
+ gLinkDekuLeftHandDL,
+ gLinkDekuLeftHandDL,
+ gLinkHumanLeftHandHoldingGreatFairysSwordDL,
+ gLinkHumanLeftHandHoldingGreatFairysSwordDL,
+};
+
+Gfx* gPlayerLeftHandOpenDLs[2 * PLAYER_FORM_MAX] = {
+ gLinkFierceDeityLeftHandDL, gLinkFierceDeityLeftHandDL, gLinkGoronLeftHandOpenDL, gLinkGoronLeftHandOpenDL,
+ gLinkZoraLeftHandOpenDL, gLinkZoraLeftHandOpenDL, gLinkDekuLeftHandDL, gLinkDekuLeftHandDL,
+ gLinkHumanLeftHandOpenDL, gLinkHumanLeftHandOpenDL,
+};
+
+Gfx* gPlayerLeftHandClosedDLs[2 * PLAYER_FORM_MAX] = {
+ gLinkFierceDeityLeftHandDL, gLinkFierceDeityLeftHandDL, gLinkGoronLeftHandClosedDL, gLinkGoronLeftHandClosedDL,
+ gLinkZoraLeftHandClosedDL, gLinkZoraLeftHandClosedDL, gLinkDekuLeftHandDL, gLinkDekuLeftHandDL,
+ gLinkHumanLeftHandClosedDL, gLinkHumanLeftHandClosedDL,
+};
+
+Gfx* gPlayerLeftHandOneHandSwordDLs[2 * PLAYER_FORM_MAX] = {
+ gLinkFierceDeityLeftHandDL,
+ gLinkFierceDeityLeftHandDL,
+ gLinkGoronLeftHandOpenDL,
+ gLinkGoronLeftHandOpenDL,
+ gLinkZoraLeftHandClosedDL,
+ gLinkZoraLeftHandClosedDL,
+ gLinkDekuLeftHandDL,
+ gLinkDekuLeftHandDL,
+ gLinkHumanLeftHandHoldingKokiriSwordDL,
+ gLinkHumanLeftHandHoldingKokiriSwordDL,
+};
+
+Gfx* D_801C018C[] = {
+ // EQUIP_VALUE_SWORD_KOKIRI
+ gLinkHumanLeftHandHoldingKokiriSwordDL,
+ gLinkHumanLeftHandHoldingKokiriSwordDL,
+ // EQUIP_VALUE_SWORD_RAZOR
+ gLinkHumanLeftHandHoldingRazorSwordDL,
+ gLinkHumanLeftHandHoldingRazorSwordDL,
+ // EQUIP_VALUE_SWORD_GILDED
+ gLinkHumanLeftHandHoldingGildedSwordDL,
+ gLinkHumanLeftHandHoldingGildedSwordDL,
+};
+
+Gfx* gPlayerRightHandOpenDLs[2 * PLAYER_FORM_MAX] = {
+ gLinkFierceDeityRightHandDL, gLinkFierceDeityRightHandDL, gLinkGoronRightHandOpenDL, gLinkGoronRightHandOpenDL,
+ gLinkZoraRightHandOpenDL, gLinkZoraRightHandOpenDL, gLinkDekuRightHandDL, gLinkDekuRightHandDL,
+ gLinkHumanRightHandOpenDL, gLinkHumanRightHandOpenDL,
+};
+
+Gfx* gPlayerRightHandClosedDLs[2 * PLAYER_FORM_MAX] = {
+ gLinkFierceDeityRightHandDL, gLinkFierceDeityRightHandDL, gLinkGoronRightHandClosedDL, gLinkGoronRightHandClosedDL,
+ gLinkZoraRightHandClosedDL, gLinkZoraRightHandClosedDL, gLinkDekuRightHandDL, gLinkDekuRightHandDL,
+ gLinkHumanRightHandClosedDL, gLinkHumanRightHandClosedDL,
+};
+
+Gfx* gPlayerRightHandBowDLs[2 * PLAYER_FORM_MAX] = {
+ gLinkFierceDeityRightHandDL,
+ gLinkFierceDeityRightHandDL,
+ gLinkGoronRightHandOpenDL,
+ gLinkGoronRightHandOpenDL,
+ gLinkZoraRightHandOpenDL,
+ gLinkZoraRightHandOpenDL,
+ gLinkDekuRightHandDL,
+ gLinkDekuRightHandDL,
+ gLinkHumanRightHandHoldingBowDL,
+ gLinkHumanRightHandHoldingBowDL,
+};
+
+Gfx* gPlayerRightHandInstrumentDLs[2 * PLAYER_FORM_MAX] = {
+ gLinkFierceDeityRightHandDL,
+ gLinkFierceDeityRightHandDL,
+ gLinkGoronRightHandOpenDL,
+ gLinkGoronRightHandOpenDL,
+ gLinkZoraRightHandOpenDL,
+ gLinkZoraRightHandOpenDL,
+ gLinkDekuRightHandDL,
+ gLinkDekuRightHandDL,
+ gLinkHumanRightHandHoldingOcarinaDL,
+ gLinkHumanRightHandHoldingOcarinaDL,
+};
+
+Gfx* gPlayerRightHandHookshotDLs[2 * PLAYER_FORM_MAX] = {
+ gLinkFierceDeityRightHandDL,
+ gLinkFierceDeityRightHandDL,
+ gLinkGoronRightHandOpenDL,
+ gLinkGoronRightHandOpenDL,
+ gLinkZoraRightHandOpenDL,
+ gLinkZoraRightHandOpenDL,
+ gLinkDekuRightHandDL,
+ gLinkDekuRightHandDL,
+ gLinkHumanRightHandHoldingHookshotDL,
+ gLinkHumanRightHandHoldingHookshotDL,
+};
+
+Gfx* gPlayerLeftHandBottleDLs[2 * PLAYER_FORM_MAX] = {
+ gLinkFierceDeityLeftHandDL,
+ gLinkFierceDeityLeftHandDL,
+ gLinkGoronLeftHandHoldBottleDL,
+ gLinkGoronLeftHandHoldBottleDL,
+ gLinkZoraLeftHandHoldBottleDL,
+ gLinkZoraLeftHandHoldBottleDL,
+ gLinkDekuLeftHandDL,
+ gLinkDekuLeftHandDL,
+ gLinkHumanLeftHandHoldBottleDL,
+ gLinkHumanLeftHandHoldBottleDL,
+};
+
+/* DLists groups end */
+
+Gfx* sPlayerFirstPersonLeftForearmDLs[PLAYER_FORM_MAX] = {
+ gLinkFierceDeityLeftForearmDL, gLinkGoronLeftForearmDL, gLinkZoraLeftForearmDL,
+ gLinkDekuLeftForearmDL, gLinkHumanLeftForearmDL,
+};
+
+Gfx* sPlayerFirstPersonLeftHandDLs[PLAYER_FORM_MAX] = {
+ gLinkFierceDeityLeftHandDL, gLinkGoronLeftHandOpenDL, gLinkZoraLeftHandClosedDL,
+ gLinkDekuLeftHandDL, gLinkHumanLeftHandClosedDL,
+};
+
+Gfx* sPlayerFirstPersonRightShoulderDLs[PLAYER_FORM_MAX] = {
+ gLinkFierceDeityRightShoulderDL, gLinkGoronRightShoulderDL, gLinkZoraRightShoulderDL,
+ gLinkDekuRightShoulderDL, gLinkHumanRightShoulderDL,
+};
+
+Gfx* sPlayerFirstPersonRightHandDLs[PLAYER_FORM_MAX] = {
+ gLinkFierceDeityRightHandDL,
+ //! @bug This is in the middle of a texture in the link_goron object. It has the same offset as a link_nuts dlist
+ 0x060038C0,
+ gLinkZoraRightHandOpenDL,
+ gLinkDekuRightHandDL,
+ object_link_child_DL_018490,
+};
+
+Gfx* sPlayerFirstPersonRightHandHookshotDLs[PLAYER_FORM_MAX] = {
+ gLinkFierceDeityRightHandDL,
+ //! @bug This is in the middle of a texture in the link_goron object. It has the same offset as a link_nuts dlist
+ 0x060038C0,
+ gLinkZoraRightHandOpenDL,
+ gLinkDekuRightHandDL,
+ object_link_child_DL_017B40,
+};
+
+// Indexed by model types (left hand, right hand, sheath or waist)
+Gfx** sPlayerDListGroups[PLAYER_MODELTYPE_MAX] = {
+ gPlayerLeftHandOpenDLs, // PLAYER_MODELTYPE_LH_OPEN
+ gPlayerLeftHandClosedDLs, // PLAYER_MODELTYPE_LH_CLOSED
+ gPlayerLeftHandOneHandSwordDLs, // PLAYER_MODELTYPE_LH_ONE_HAND_SWORD
+ gPlayerLeftHandTwoHandSwordDLs, // PLAYER_MODELTYPE_LH_TWO_HAND_SWORD
+ gPlayerLeftHandOpenDLs, // PLAYER_MODELTYPE_LH_4
+ gPlayerLeftHandBottleDLs, // PLAYER_MODELTYPE_LH_BOTTLE
+ gPlayerRightHandOpenDLs, // PLAYER_MODELTYPE_RH_OPEN
+ gPlayerRightHandClosedDLs, // PLAYER_MODELTYPE_RH_CLOSED
+ gPlayerRightHandClosedDLs, // PLAYER_MODELTYPE_RH_SHIELD
+ gPlayerRightHandBowDLs, // PLAYER_MODELTYPE_RH_BOW
+ gPlayerRightHandInstrumentDLs, // PLAYER_MODELTYPE_RH_INSTRUMENT
+ gPlayerRightHandHookshotDLs, // PLAYER_MODELTYPE_RH_HOOKSHOT
+ gPlayerSheath12DLs, // PLAYER_MODELTYPE_SHEATH_12
+ gPlayerSheath13DLs, // PLAYER_MODELTYPE_SHEATH_13
+ gPlayerSheath14DLs, // PLAYER_MODELTYPE_SHEATH_14
+ gPlayerSheath14DLs, // PLAYER_MODELTYPE_SHEATH_15
+ gPlayerWaistDLs, // PLAYER_MODELTYPE_WAIST
+ NULL, // PLAYER_MODELTYPE_17
+};
+
+struct_80124618 D_801C0340[] = {
+ { 0, { 0, 0, 0 } }, { 5, { 0, 0, 0 } }, { 7, { 100, 100, 100 } },
+ { 9, { 110, 110, 110 } }, { 11, { 100, 100, 100 } },
+};
+struct_80124618 D_801C0368[] = {
+ { 0, { 0, 0, 0 } }, { 4, { 0, 0, 0 } }, { 6, { 120, 150, 60 } }, { 8, { 130, 80, 160 } },
+ { 9, { 100, 100, 100 } }, { 10, { 90, 100, 90 } }, { 11, { 100, 100, 100 } },
+};
+struct_80124618 D_801C03A0[] = {
+ { 0, { 100, 100, 100 } },
+ { 2, { 120, 120, 120 } },
+ { 6, { 90, 90, 90 } },
+ { 7, { 93, 93, 93 } },
+};
+struct_80124618 D_801C03C0[] = {
+ { 0, { 200, 100, 110 } },
+ { 2, { 90, 100, 100 } },
+ { 3, { 100, 100, 100 } },
+ { 7, { 100, 100, 100 } },
+};
+struct_80124618 D_801C03E0[] = {
+ { 0, { 100, 100, 110 } }, { 2, { 60, 100, 80 } }, { 3, { 130, 105, 110 } },
+ { 7, { 130, 105, 110 } }, { 10, { 100, 100, 100 } }, { 19, { 100, 100, 100 } },
+};
+struct_80124618 D_801C0410[] = {
+ { 0, { 0, 0, 0 } },
+ { 2, { 80, 110, 80 } },
+ { 3, { 100, 100, 100 } },
+};
+struct_80124618 D_801C0428[] = {
+ { 0, { 0, 0, 0 } }, { 6, { 0, 0, 0 } }, { 7, { 60, 60, 50 } }, { 8, { 120, 130, 100 } },
+ { 9, { 100, 120, 80 } }, { 11, { 100, 100, 100 } }, { 13, { 100, 100, 100 } },
+};
+struct_80124618 D_801C0460[] = {
+ { 0, { 100, 100, 100 } }, { 5, { 100, 100, 100 } }, { 7, { 100, 74, 80 } },
+ { 8, { 100, 180, 130 } }, { 10, { 100, 80, 80 } }, { 13, { 100, 100, 100 } },
+};
+struct_80124618 D_801C0490[] = {
+ { 0, { 100, 100, 100 } }, { 1, { 100, 100, 100 } }, { 2, { 90, 100, 105 } }, { 4, { 110, 100, 100 } },
+ { 5, { 90, 100, 105 } }, { 6, { 100, 100, 100 } }, { 7, { 90, 100, 105 } }, { 8, { 100, 100, 100 } },
+ { 9, { 90, 100, 105 } }, { 10, { 100, 100, 100 } }, { 11, { 90, 100, 105 } }, { 12, { 110, 100, 100 } },
+ { 13, { 100, 100, 100 } }, { 14, { 90, 100, 105 } }, { 15, { 90, 100, 105 } }, { 17, { 100, 100, 100 } },
+};
+struct_80124618 D_801C0510[] = {
+ { 0, { 100, 100, 100 } }, { 4, { 100, 100, 100 } }, { 5, { 90, 110, 100 } },
+ { 6, { 110, 105, 100 } }, { 8, { 100, 100, 100 } },
+};
+struct_80124618 D_801C0538[] = {
+ { 0, { 100, 100, 100 } }, { 5, { 100, 100, 100 } }, { 6, { 0, 0, 0 } },
+ { 8, { 100, 100, 100 } }, { 14, { 100, 100, 100 } },
+};
+struct_80124618 D_801C0560[] = {
+ { 0, { 100, 100, 100 } },
+ { 2, { 95, 95, 100 } },
+ { 3, { 105, 105, 100 } },
+ { 5, { 102, 102, 102 } },
+};
+struct_80124618 D_801C0580[] = {
+ { 0, { 100, 100, 100 } }, { 9, { 100, 100, 100 } }, { 10, { 150, 150, 150 } },
+ { 12, { 0, 0, 0 } }, { 14, { 0, 0, 0 } },
+};
+struct_80124618 D_801C05A8[] = {
+ { 0, { 100, 100, 100 } },
+ { 6, { 100, 100, 100 } },
+ { 7, { 0, 0, 0 } },
+ { 17, { 0, 0, 0 } },
+};
+struct_80124618 D_801C05C8[] = {
+ { 0, { 0, 0, 0 } },
+ { 17, { 50, 50, 50 } },
+};
+struct_80124618 D_801C05D8[] = {
+ { 0, { 0, 0, 0 } },
+ { 5, { 0, 0, 0 } },
+ { 9, { 100, 100, 100 } },
+};
+struct_80124618 D_801C05F0[] = {
+ { 0, { 100, 100, 100 } },
+ { 5, { 100, 100, 100 } },
+ { 9, { 0, 0, 0 } },
+};
+struct_80124618 D_801C0608[] = {
+ { 0, { 100, 100, 100 } },
+ { 10, { 100, 100, 100 } },
+ { 32, { 100, 115, 105 } },
+ { 58, { 100, 101, 100 } },
+};
+struct_80124618 D_801C0628[] = {
+ { 0, { 100, 100, 100 } }, { 5, { 100, 100, 100 } }, { 15, { 100, 100, 105 } }, { 25, { 100, 100, 105 } },
+ { 34, { 100, 100, 100 } }, { 46, { 100, 100, 100 } }, { 57, { 100, 100, 105 } }, { 67, { 100, 100, 105 } },
+ { 76, { 100, 100, 100 } }, { 78, { 100, 100, 100 } },
+};
+struct_80124618 D_801C0678[] = {
+ { 0, { 0, 0, 0 } },
+ { 6, { 0, 0, 0 } },
+ { 8, { 100, 100, 100 } },
+ { 11, { 100, 100, 100 } },
+};
+struct_80124618 D_801C0698[] = {
+ { 0, { 0, 0, 0 } },
+ { 7, { 1120, 112, 112 } },
+ { 8, { 140, 168, 168 } },
+ { 11, { 140, 140, 140 } },
+};
+struct_80124618 D_801C06B8[] = {
+ { 0, { 100, 100, 100 } }, { 7, { 100, 100, 100 } }, { 8, { 70, 30, 70 } }, { 10, { 0, 0, 0 } }, { 14, { 0, 0, 0 } },
+};
+struct_80124618 D_801C06E0[] = {
+ { 0, { 140, 140, 140 } },
+ { 1, { 0, 0, 0 } },
+ { 14, { 0, 0, 0 } },
+};
+struct_80124618 D_801C06F8[] = {
+ { 0, { 100, 100, 100 } },
+ { 5, { 100, 100, 100 } },
+ { 6, { 0, 0, 0 } },
+ { 10, { 0, 0, 0 } },
+};
+struct_80124618 D_801C0718[] = {
+ { 0, { 140, 140, 140 } },
+ { 1, { 0, 0, 0 } },
+ { 10, { 0, 0, 0 } },
+};
+struct_80124618 D_801C0730[] = {
+ { 0, { 100, 100, 100 } },
+ { 13, { 100, 100, 100 } },
+};
+struct_80124618 D_801C0740[] = {
+ { 0, { 140, 140, 140 } },
+ { 13, { 140, 140, 140 } },
+};
+struct_80124618 D_801C0750[] = {
+ { 0, { 100, 100, 100 } }, { 5, { 100, 100, 100 } }, { 6, { 200, 200, 200 } },
+ { 10, { 200, 200, 200 } }, { 11, { 100, 100, 100 } },
+};
+
+// alpha values
+u8 D_801C0778[] = {
+ 0, 0, 0, 0, 0, 100, 200, 255, 255, 255, 200, 100,
+};
+
+struct_80124618 D_801C0784[] = {
+ { 0, { 100, 100, 100 } }, { 14, { 100, 100, 100 } }, { 15, { 200, 200, 200 } },
+ { 16, { 200, 200, 200 } }, { 18, { 100, 100, 100 } },
+};
+
+u8 D_801C07AC[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 200, 255, 255, 255, 200, 100, 0,
+};
+
+void Player_SetModelsForHoldingShield(Player* player) {
if (player->stateFlags1 & PLAYER_STATE1_400000) {
- if ((player->heldItemActionParam < 0) || (player->heldItemActionParam == player->itemActionParam)) {
+ if ((player->itemAction <= PLAYER_IA_MINUS1) || (player->itemAction == player->heldItemAction)) {
if (!Player_IsHoldingTwoHandedWeapon(player)) {
if (!Player_IsGoronOrDeku(player)) {
D_801F59E0 = player->transformation * 2;
- player->rightHandType = 8;
- player->rightHandDLists = &sPlayerDListGroups[8][D_801F59E0];
+ player->rightHandType = PLAYER_MODELTYPE_RH_SHIELD;
+ player->rightHandDLists = &sPlayerDListGroups[PLAYER_MODELTYPE_RH_SHIELD][D_801F59E0];
- if (player->sheathType == 14) {
- player->sheathType = 12;
- } else if (player->sheathType == 15) {
- player->sheathType = 13;
+ if (player->sheathType == PLAYER_MODELTYPE_SHEATH_14) {
+ player->sheathType = PLAYER_MODELTYPE_SHEATH_12;
+ } else if (player->sheathType == PLAYER_MODELTYPE_SHEATH_15) {
+ player->sheathType = PLAYER_MODELTYPE_SHEATH_13;
}
player->sheathDLists = &sPlayerDListGroups[player->sheathType][D_801F59E0];
- player->modelAnimType = 2;
- player->heldItemActionParam = -1;
+ player->modelAnimType = PLAYER_ANIMTYPE_2;
+ player->itemAction = PLAYER_IA_MINUS1;
}
}
}
}
}
-void Player_SetModels(Player* player, s32 modelGroup) {
- u8* playerModelTypes;
+void Player_SetModels(Player* player, PlayerModelGroup modelGroup) {
+ PlayerModelIndices* playerModelTypes;
D_801F59E0 = player->transformation * 2;
- player->leftHandType = gPlayerModelTypes[modelGroup][1];
- player->rightHandType = gPlayerModelTypes[modelGroup][2];
- player->sheathType = gPlayerModelTypes[modelGroup][3];
+ player->leftHandType = gPlayerModelTypes[modelGroup].leftHandType;
+ player->rightHandType = gPlayerModelTypes[modelGroup].rightHandType;
+ player->sheathType = gPlayerModelTypes[modelGroup].sheathType;
- if (player->sheathType == 14) {
+ if (player->sheathType == PLAYER_MODELTYPE_SHEATH_14) {
if (CUR_FORM_EQUIP(EQUIP_SLOT_B) == ITEM_NONE) {
- player->sheathType = 15;
+ player->sheathType = PLAYER_MODELTYPE_SHEATH_15;
}
}
- playerModelTypes = gPlayerModelTypes[modelGroup];
+ playerModelTypes = &gPlayerModelTypes[modelGroup];
- player->leftHandDLists = &sPlayerDListGroups[playerModelTypes[1]][D_801F59E0];
- player->rightHandDLists = &sPlayerDListGroups[playerModelTypes[2]][D_801F59E0];
- player->sheathDLists = &sPlayerDListGroups[playerModelTypes[3]][D_801F59E0];
- player->waistDLists = &sPlayerDListGroups[playerModelTypes[4]][D_801F59E0];
+ player->leftHandDLists = &sPlayerDListGroups[playerModelTypes->leftHandType][D_801F59E0];
+ player->rightHandDLists = &sPlayerDListGroups[playerModelTypes->rightHandType][D_801F59E0];
+ player->sheathDLists = &sPlayerDListGroups[playerModelTypes->sheathType][D_801F59E0];
+ player->waistDLists = &sPlayerDListGroups[playerModelTypes->waistType][D_801F59E0];
- func_801239AC(player);
+ Player_SetModelsForHoldingShield(player);
}
-void Player_SetModelGroup(Player* player, s32 modelGroup) {
+void Player_SetModelGroup(Player* player, PlayerModelGroup modelGroup) {
player->modelGroup = modelGroup;
- if (modelGroup == 1) {
- player->modelAnimType = 0;
+ if (modelGroup == PLAYER_MODELGROUP_1) {
+ player->modelAnimType = PLAYER_ANIMTYPE_DEFAULT;
} else {
- player->modelAnimType = gPlayerModelTypes[modelGroup][0];
+ player->modelAnimType = gPlayerModelTypes[modelGroup].modelAnimType;
}
- if (player->modelAnimType < 3) {
+ if (player->modelAnimType < PLAYER_ANIMTYPE_3) {
if (((player->transformation != PLAYER_FORM_FIERCE_DEITY) && (player->transformation != PLAYER_FORM_HUMAN)) ||
(player->currentShield == PLAYER_SHIELD_NONE)) {
- player->modelAnimType = 0;
+ player->modelAnimType = PLAYER_ANIMTYPE_DEFAULT;
}
}
@@ -649,19 +1285,19 @@ void Player_SetModelGroup(Player* player, s32 modelGroup) {
}
void func_80123C58(Player* player) {
- player->heldItemActionParam = player->itemActionParam;
- Player_SetModelGroup(player, Player_ActionToModelGroup(player, player->itemActionParam));
+ player->itemAction = player->heldItemAction;
+ Player_SetModelGroup(player, Player_ActionToModelGroup(player, player->heldItemAction));
player->unk_AA5 = 0;
}
void Player_SetEquipmentData(PlayState* play, Player* player) {
- if (player->csMode != 0x86) {
+ if (player->csMode != PLAYER_CSMODE_134) {
player->currentShield = GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD);
if ((player->transformation != PLAYER_FORM_ZORA) || (((player->currentBoots != PLAYER_BOOTS_ZORA_LAND)) &&
(player->currentBoots != PLAYER_BOOTS_ZORA_UNDERWATER))) {
player->currentBoots = D_801BFF90[player->transformation];
}
- Player_SetModelGroup(player, Player_ActionToModelGroup(player, player->itemActionParam));
+ Player_SetModelGroup(player, Player_ActionToModelGroup(player, player->heldItemAction));
func_80123140(play, player);
if (player->unk_B62 != 0) {
player->unk_B62 = 1;
@@ -669,34 +1305,34 @@ void Player_SetEquipmentData(PlayState* play, Player* player) {
}
}
-void func_80123D50(PlayState* play, Player* player, s32 itemId, s32 actionParam) {
+void Player_UpdateBottleHeld(PlayState* play, Player* player, ItemId itemId, PlayerItemAction itemAction) {
Inventory_UpdateBottleItem(play, itemId, player->heldItemButton);
if (itemId != ITEM_BOTTLE) {
player->heldItemId = itemId;
- player->itemActionParam = actionParam;
+ player->heldItemAction = itemAction;
}
- player->heldItemActionParam = actionParam;
+ player->itemAction = itemAction;
}
void func_80123DA4(Player* player) {
- player->unk_730 = NULL;
+ player->targetedActor = NULL;
player->stateFlags2 &= ~PLAYER_STATE2_2000;
}
void func_80123DC0(Player* player) {
- if ((player->actor.bgCheckFlags & 1) ||
- (player->stateFlags1 & (PLAYER_STATE1_8000000 | PLAYER_STATE1_800000 | PLAYER_STATE1_200000)) ||
- (!(player->stateFlags1 & (PLAYER_STATE1_80000 | PLAYER_STATE1_40000)) &&
+ if ((player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) ||
+ (player->stateFlags1 & (PLAYER_STATE1_200000 | PLAYER_STATE1_800000 | PLAYER_STATE1_8000000)) ||
+ (!(player->stateFlags1 & (PLAYER_STATE1_40000 | PLAYER_STATE1_80000)) &&
((player->actor.world.pos.y - player->actor.floorHeight) < 100.0f))) {
- player->stateFlags1 &= ~(PLAYER_STATE1_40000000 | PLAYER_STATE1_80000 | PLAYER_STATE1_40000 |
- PLAYER_STATE1_20000 | PLAYER_STATE1_10000 | PLAYER_STATE1_8000);
- } else if (!(player->stateFlags1 & (PLAYER_STATE1_200000 | PLAYER_STATE1_80000 | PLAYER_STATE1_40000))) {
+ player->stateFlags1 &= ~(PLAYER_STATE1_8000 | PLAYER_STATE1_10000 | PLAYER_STATE1_20000 | PLAYER_STATE1_40000 |
+ PLAYER_STATE1_80000 | PLAYER_STATE1_40000000);
+ } else if (!(player->stateFlags1 & (PLAYER_STATE1_40000 | PLAYER_STATE1_80000 | PLAYER_STATE1_200000))) {
player->stateFlags1 |= PLAYER_STATE1_80000;
} else if ((player->stateFlags1 & PLAYER_STATE1_40000) && (player->transformation == PLAYER_FORM_DEKU)) {
player->stateFlags1 &=
- ~(PLAYER_STATE1_40000000 | PLAYER_STATE1_20000 | PLAYER_STATE1_10000 | PLAYER_STATE1_8000);
+ ~(PLAYER_STATE1_8000 | PLAYER_STATE1_10000 | PLAYER_STATE1_20000 | PLAYER_STATE1_40000000);
}
func_80123DA4(player);
@@ -706,7 +1342,7 @@ void func_80123E90(PlayState* play, Actor* actor) {
Player* player = GET_PLAYER(play);
func_80123DC0(player);
- player->unk_730 = actor;
+ player->targetedActor = actor;
player->unk_A78 = actor;
player->stateFlags1 |= PLAYER_STATE1_10000;
Camera_SetViewParam(Play_GetCamera(play, CAM_ID_MAIN), CAM_VIEW_TARGET, actor);
@@ -730,7 +1366,7 @@ s32 Player_IsBurningStickInRange(PlayState* play, Vec3f* pos, f32 xzRange, f32 y
Vec3f diff;
s32 pad;
- if ((this->itemActionParam == PLAYER_AP_STICK) && (this->unk_B28 != 0)) {
+ if ((this->heldItemAction == PLAYER_IA_STICK) && (this->unk_B28 != 0)) {
Math_Vec3f_Diff(&this->meleeWeaponInfo[0].tip, pos, &diff);
return (SQXZ(diff) <= SQ(xzRange)) && (0.0f <= diff.y) && (diff.y <= yRange);
}
@@ -739,7 +1375,7 @@ s32 Player_IsBurningStickInRange(PlayState* play, Vec3f* pos, f32 xzRange, f32 y
}
u8 Player_GetStrength(void) {
- return sPlayerStrengths[(void)0, gSaveContext.save.playerForm];
+ return sPlayerStrengths[GET_PLAYER_FORM];
}
u8 Player_GetMask(PlayState* play) {
@@ -764,139 +1400,174 @@ s32 Player_HasMirrorShieldEquipped(PlayState* play) {
s32 Player_IsHoldingMirrorShield(PlayState* play) {
Player* player = GET_PLAYER(play);
- return (player->transformation == PLAYER_FORM_HUMAN) && (player->rightHandType == 8) &&
+ return (player->transformation == PLAYER_FORM_HUMAN) && (player->rightHandType == PLAYER_MODELTYPE_RH_SHIELD) &&
(player->currentShield == PLAYER_SHIELD_MIRROR_SHIELD);
}
s32 Player_IsHoldingHookshot(Player* player) {
- return player->itemActionParam == PLAYER_AP_HOOKSHOT;
+ return player->heldItemAction == PLAYER_IA_HOOKSHOT;
}
s32 func_801240DC(Player* player) {
return Player_IsHoldingHookshot(player) && (player->heldActor == NULL);
}
-s32 func_80124110(Player* player, s32 actionParam) {
- s32 temp_v0 = actionParam - PLAYER_AP_FISHING_ROD;
+PlayerBButtonSword Player_BButtonSwordFromIA(Player* player, PlayerItemAction itemAction) {
+ PlayerBButtonSword bButtonSword = GET_B_SWORD_FROM_IA(itemAction);
if (player->transformation != PLAYER_FORM_GORON) {
- if (((actionParam - PLAYER_AP_FISHING_ROD) > (PLAYER_AP_FISHING_ROD - PLAYER_AP_FISHING_ROD)) &&
- ((actionParam - PLAYER_AP_FISHING_ROD) < (PLAYER_AP_SWORD_GREAT_FAIRY - PLAYER_AP_FISHING_ROD))) {
- return temp_v0;
+ if ((GET_B_SWORD_FROM_IA(itemAction) > PLAYER_B_SWORD_NONE) &&
+ (GET_B_SWORD_FROM_IA(itemAction) < PLAYER_B_SWORD_MAX)) {
+ return bButtonSword;
}
}
- return 0;
+ return PLAYER_B_SWORD_NONE;
}
-s32 func_80124148(Player* player) {
- return func_80124110(player, player->itemActionParam);
+PlayerBButtonSword Player_GetHeldBButtonSword(Player* player) {
+ return Player_BButtonSwordFromIA(player, player->heldItemAction);
}
-s32 Player_ActionToMeleeWeapon(s32 actionParam) {
- s32 weapon = actionParam - (PLAYER_AP_SWORD_KOKIRI - 1);
+PlayerMeleeWeapon Player_MeleeWeaponFromIA(PlayerItemAction itemAction) {
+ PlayerMeleeWeapon weapon = GET_MELEE_WEAPON_FROM_IA(itemAction);
- if ((weapon > 0) && (weapon <= (PLAYER_AP_ZORA_FINS - (PLAYER_AP_SWORD_KOKIRI - 1)))) {
+ if ((weapon > PLAYER_MELEEWEAPON_NONE) && (weapon < PLAYER_MELEEWEAPON_MAX)) {
return weapon;
}
- return 0;
+
+ return PLAYER_MELEEWEAPON_NONE;
}
-s32 Player_GetMeleeWeaponHeld(Player* player) {
- return Player_ActionToMeleeWeapon(player->itemActionParam);
+PlayerMeleeWeapon Player_GetMeleeWeaponHeld(Player* player) {
+ return Player_MeleeWeaponFromIA(player->heldItemAction);
}
s32 Player_IsHoldingTwoHandedWeapon(Player* player) {
- // Relies on the actionParams for two-handed weapons being contiguous.
- if ((player->itemActionParam >= PLAYER_AP_SWORD_GREAT_FAIRY) && (player->itemActionParam <= PLAYER_AP_STICK)) {
+ // Relies on the itemActions for two-handed weapons being contiguous.
+ if ((player->heldItemAction >= PLAYER_IA_SWORD_GREAT_FAIRY) && (player->heldItemAction <= PLAYER_IA_STICK)) {
return true;
}
return false;
}
-s32 Player_ActionToBottle(Player* player, s32 actionParam) {
- s32 bottle = actionParam - PLAYER_AP_BOTTLE;
+PlayerBottle Player_BottleFromIA(Player* player, PlayerItemAction itemAction) {
+ PlayerBottle bottle = GET_BOTTLE_FROM_IA(itemAction);
- // Relies on bottle-related action params to be contiguous
- if ((bottle >= (PLAYER_AP_BOTTLE - PLAYER_AP_BOTTLE)) && (bottle <= (PLAYER_AP_BOTTLE_FAIRY - PLAYER_AP_BOTTLE))) {
+ if ((bottle > PLAYER_BOTTLE_NONE) && (bottle < PLAYER_BOTTLE_MAX)) {
return bottle;
}
- return -1;
+ return PLAYER_BOTTLE_NONE;
}
-s32 Player_GetBottleHeld(Player* Player) {
- return Player_ActionToBottle(Player, Player->itemActionParam);
+PlayerBottle Player_GetBottleHeld(Player* Player) {
+ return Player_BottleFromIA(Player, Player->heldItemAction);
}
-s32 Player_ActionToExplosive(Player* player, s32 actionParam) {
- s32 explosive = actionParam - PLAYER_AP_BOMB;
+PlayerExplosive Player_ExplosiveFromIA(Player* player, PlayerItemAction itemAction) {
+ PlayerExplosive explosive = GET_EXPLOSIVE_FROM_IA(itemAction);
- // Relies on explosive-related action params to be contiguous
- if ((explosive >= (PLAYER_AP_BOMB - PLAYER_AP_BOMB)) && (explosive <= (PLAYER_AP_BOMBCHU - PLAYER_AP_BOMB))) {
+ if ((explosive > PLAYER_EXPLOSIVE_NONE) && (explosive < PLAYER_EXPLOSIVE_MAX)) {
return explosive;
}
- return -1;
+ return PLAYER_EXPLOSIVE_NONE;
}
-s32 Player_GetExplosiveHeld(Player* player) {
- return Player_ActionToExplosive(player, player->itemActionParam);
+PlayerExplosive Player_GetExplosiveHeld(Player* player) {
+ return Player_ExplosiveFromIA(player, player->heldItemAction);
}
-// Convert actionParam to sword
-s32 func_80124278(Actor* actor, s32 actionParam) {
- s32 sword = 0;
+// Note this function maps PLAYER_IA_LAST_USED to PLAYER_SWORD_KOKIRI
+PlayerSword Player_SwordFromIA(Player* player, PlayerItemAction itemAction) {
+ PlayerSword sword = PLAYER_SWORD_KOKIRI;
//! FAKE:
- if ((actionParam == PLAYER_AP_LAST_USED) ||
- ((sword = actionParam - PLAYER_AP_SWORD_KOKIRI, (sword >= PLAYER_AP_SWORD_KOKIRI - PLAYER_AP_SWORD_KOKIRI)) &&
- (sword <= PLAYER_AP_SWORD_GREAT_FAIRY - PLAYER_AP_SWORD_KOKIRI))) {
+ if ((itemAction == PLAYER_IA_LAST_USED) ||
+ ((sword = GET_SWORD_FROM_IA(itemAction), (sword > PLAYER_SWORD_NONE)) && (sword < PLAYER_SWORD_MAX))) {
return sword;
}
- return -1;
+ return PLAYER_SWORD_NONE;
}
s32 func_801242B4(Player* player) {
return (player->stateFlags1 & PLAYER_STATE1_8000000) && (player->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER);
}
-s32 Player_GetEnvTimerType(PlayState* play) {
+s32 Player_GetEnvironmentalHazard(PlayState* play) {
Player* player = GET_PLAYER(play);
- TextTriggerEntry* triggerEntry;
- s32 envTimerType;
+ EnvHazardTextTriggerEntry* triggerEntry;
+ s32 envHazard;
- if (play->roomCtx.curRoom.unk2 == 3) { // Room is hot
- envTimerType = PLAYER_ENV_TIMER_HOTROOM - 1;
+ if (play->roomCtx.curRoom.behaviorType2 == ROOM_BEHAVIOR_TYPE2_HOT) {
+ envHazard = PLAYER_ENV_HAZARD_HOTROOM - 1;
} else if ((player->transformation != PLAYER_FORM_ZORA) && (player->underwaterTimer > 80)) {
- envTimerType = PLAYER_ENV_TIMER_UNDERWATER_FREE - 1;
+ envHazard = PLAYER_ENV_HAZARD_UNDERWATER_FREE - 1;
} else if (player->stateFlags1 & PLAYER_STATE1_8000000) {
if ((player->transformation == PLAYER_FORM_ZORA) && (player->currentBoots >= PLAYER_BOOTS_ZORA_UNDERWATER) &&
- (player->actor.bgCheckFlags & 1)) {
- envTimerType = PLAYER_ENV_TIMER_UNDERWATER_FLOOR - 1;
+ (player->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ envHazard = PLAYER_ENV_HAZARD_UNDERWATER_FLOOR - 1;
} else {
- envTimerType = PLAYER_ENV_TIMER_SWIMMING - 1;
+ envHazard = PLAYER_ENV_HAZARD_SWIMMING - 1;
}
} else {
- return PLAYER_ENV_TIMER_NONE;
+ return PLAYER_ENV_HAZARD_NONE;
}
- // Trigger general textboxes under certain conditions, like "It's so hot in here!". Unused in MM
- triggerEntry = &sEnvironmentTextTriggers[envTimerType];
+ triggerEntry = &sEnvHazardTextTriggers[envHazard];
if (!Player_InCsMode(play)) {
- if ((triggerEntry->flag) && !(gSaveContext.textTriggerFlags & triggerEntry->flag) &&
- (envTimerType == (PLAYER_ENV_TIMER_HOTROOM - 1))) {
+ if ((triggerEntry->flag) && !(gSaveContext.envHazardTextTriggerFlags & triggerEntry->flag) &&
+ (envHazard == (PLAYER_ENV_HAZARD_HOTROOM - 1))) {
Message_StartTextbox(play, triggerEntry->textId, NULL);
- gSaveContext.textTriggerFlags |= triggerEntry->flag;
+ gSaveContext.envHazardTextTriggerFlags |= triggerEntry->flag;
}
}
- return envTimerType + 1;
+ return envHazard + 1;
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80124420.s")
+void Player_UpdateBunnyEars(Player* player) {
+ Vec3s force;
+ s16 angle;
+
+ sBunnyEarKinematics.angVel.x -= sBunnyEarKinematics.angVel.x >> 3;
+ sBunnyEarKinematics.angVel.y -= sBunnyEarKinematics.angVel.y >> 3;
+ sBunnyEarKinematics.angVel.x += -sBunnyEarKinematics.rot.x >> 2;
+ 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;
+
+ sBunnyEarKinematics.angVel.x += force.x >> 2;
+ sBunnyEarKinematics.angVel.y += force.y >> 2;
+
+ if (sBunnyEarKinematics.angVel.x > 0x1770) {
+ sBunnyEarKinematics.angVel.x = 0x1770;
+ } else if (sBunnyEarKinematics.angVel.x < -0x1770) {
+ sBunnyEarKinematics.angVel.x = -0x1770;
+ }
+
+ if (sBunnyEarKinematics.angVel.y > 0x1770) {
+ sBunnyEarKinematics.angVel.y = 0x1770;
+ } else if (sBunnyEarKinematics.angVel.y < -0x1770) {
+ sBunnyEarKinematics.angVel.y = -0x1770;
+ }
+
+ sBunnyEarKinematics.rot.x += sBunnyEarKinematics.angVel.x;
+ sBunnyEarKinematics.rot.y += sBunnyEarKinematics.angVel.y;
+
+ if (sBunnyEarKinematics.rot.x < 0) {
+ sBunnyEarKinematics.rot.z = sBunnyEarKinematics.rot.x >> 1;
+ } else {
+ sBunnyEarKinematics.rot.z = 0;
+ }
+}
void func_80124618(struct_80124618 arg0[], f32 curFrame, Vec3f* arg2) {
s32 currentFrame = curFrame;
@@ -911,7 +1582,6 @@ void func_80124618(struct_80124618 arg0[], f32 curFrame, Vec3f* arg2) {
} while (temp_v1 < currentFrame);
temp_f0 = arg0[-1].unk_0;
-
progress = (curFrame - temp_f0) / (temp_v1 - temp_f0);
temp_f14 = arg0[-1].unk_2.x;
@@ -924,20 +1594,297 @@ void func_80124618(struct_80124618 arg0[], f32 curFrame, Vec3f* arg2) {
arg2->z = LERPIMP(temp_f14, arg0->unk_2.z, progress) * 0.01f;
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801246F4.s")
+struct_80124618 D_801C07C0[] = {
+ { 0, { 100, 100, 100 } }, { 10, { 100, 100, 100 } }, { 11, { 100, 120, 120 } },
+ { 12, { 100, 120, 120 } }, { 14, { 100, 100, 100 } }, { 19, { 100, 100, 100 } },
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80124870.s")
+struct_80124618 D_801C07F0[] = {
+ { 0, { 40, 60, 70 } }, { 3, { 40, 60, 70 } }, { 4, { 75, 90, 85 } },
+ { 5, { 110, 120, 100 } }, { 7, { 100, 100, 100 } }, { 8, { 100, 100, 100 } },
+};
+struct_80124618 D_801C0820[] = {
+ { 0, { 100, 100, 100 } },
+ { 7, { 100, 100, 100 } },
+ { 12, { 40, 60, 70 } },
+};
+struct_80124618 D_801C0838[] = {
+ { 0, { 40, 60, 70 } },
+ { 7, { 40, 60, 70 } },
+ { 12, { 100, 100, 100 } },
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80124CC4.s")
+Gfx gCullBackDList[] = {
+ gsSPSetGeometryMode(G_CULL_BACK),
+ gsSPEndDisplayList(),
+};
+Gfx gCullFrontDList[] = {
+ gsSPSetGeometryMode(G_CULL_FRONT),
+ gsSPEndDisplayList(),
+};
+
+TexturePtr sPlayerEyesTextures[PLAYER_EYES_MAX] = {
+ gLinkHumanEyesOpenTex, // PLAYER_EYES_OPEN
+ gLinkHumanEyesHalfTex, // PLAYER_EYES_HALF
+ gLinkHumanEyesClosedTex, // PLAYER_EYES_CLOSED
+ gLinkHumanEyesRollRightTex, // PLAYER_EYES_ROLL_RIGHT
+ gLinkHumanEyesRollLeftTex, // PLAYER_EYES_ROLL_LEFT
+ gLinkHumanEyesRollUpTex, // PLAYER_EYES_ROLL_UP
+ gLinkHumanEyesRollDownTex, // PLAYER_EYES_ROLL_DOWN
+ object_link_child_Tex_003800, // PLAYER_EYES_7
+};
+
+TexturePtr sPlayerMouthTextures[PLAYER_MOUTH_MAX] = {
+ gLinkHumanMouthClosedTex, // PLAYER_MOUTH_CLOSED
+ gLinkHumanMouthTeethTex, // PLAYER_MOUTH_TEETH
+ gLinkHumanMouthAngryTex, // PLAYER_MOUTH_ANGRY
+ gLinkHumanMouthHappyTex, // PLAYER_MOUTH_HAPPY
+};
+
+typedef struct PlayerFaceIndices {
+ /* 0x00 */ u8 eyeIndex;
+ /* 0x01 */ u8 mouthIndex;
+} PlayerFaceIndices; // size = 0x02
+
+PlayerFaceIndices sPlayerFaces[] = {
+ { PLAYER_EYES_OPEN, PLAYER_MOUTH_CLOSED }, // PLAYER_FACE_0
+ { PLAYER_EYES_HALF, PLAYER_MOUTH_CLOSED }, // PLAYER_FACE_1
+ { PLAYER_EYES_CLOSED, PLAYER_MOUTH_CLOSED }, // PLAYER_FACE_2
+ { PLAYER_EYES_OPEN, PLAYER_MOUTH_CLOSED }, // PLAYER_FACE_3
+ { PLAYER_EYES_HALF, PLAYER_MOUTH_CLOSED }, // PLAYER_FACE_4
+ { PLAYER_EYES_CLOSED, PLAYER_MOUTH_CLOSED }, // PLAYER_FACE_5
+ { PLAYER_EYES_ROLL_LEFT, PLAYER_MOUTH_CLOSED }, // PLAYER_FACE_6
+ { PLAYER_EYES_ROLL_UP, PLAYER_MOUTH_TEETH }, // PLAYER_FACE_7
+ { PLAYER_EYES_7, PLAYER_MOUTH_ANGRY }, // PLAYER_FACE_8
+ { PLAYER_EYES_OPEN, PLAYER_MOUTH_ANGRY }, // PLAYER_FACE_9
+ { PLAYER_EYES_ROLL_RIGHT, PLAYER_MOUTH_CLOSED }, // PLAYER_FACE_10
+ { PLAYER_EYES_ROLL_LEFT, PLAYER_MOUTH_CLOSED }, // PLAYER_FACE_11
+ { PLAYER_EYES_CLOSED, PLAYER_MOUTH_ANGRY }, // PLAYER_FACE_12
+ { PLAYER_EYES_HALF, PLAYER_MOUTH_TEETH }, // PLAYER_FACE_13
+ { PLAYER_EYES_OPEN, PLAYER_MOUTH_ANGRY }, // PLAYER_FACE_14
+ { PLAYER_EYES_OPEN, PLAYER_MOUTH_HAPPY }, // PLAYER_FACE_15
+};
+
+// Note the correct pointer to pass as the jointTable is the jointTable pointer from the SkelAnime struct, not the
+// buffer from the Player struct itself since that one may be misaligned.
+void Player_DrawImpl(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, s32 lod,
+ PlayerTransformation playerForm, s32 boots, s32 face, OverrideLimbDrawFlex overrideLimbDraw,
+ PostLimbDrawFlex postLimbDraw, Actor* actor) {
+ s32 eyeIndex = GET_EYE_INDEX_FROM_JOINT_TABLE(jointTable);
+ s32 mouthIndex = GET_MOUTH_INDEX_FROM_JOINT_TABLE(jointTable);
+ Gfx* gfx;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ gfx = POLY_OPA_DISP;
+
+ if (eyeIndex < 0) {
+ eyeIndex = sPlayerFaces[face].eyeIndex;
+ }
+
+ if (playerForm == PLAYER_FORM_GORON) {
+ if ((eyeIndex >= PLAYER_EYES_ROLL_RIGHT) && (eyeIndex <= PLAYER_EYES_ROLL_DOWN)) {
+ eyeIndex = PLAYER_EYES_OPEN;
+ } else if (eyeIndex == PLAYER_EYES_7) {
+ eyeIndex = PLAYER_EYES_ROLL_RIGHT;
+ }
+ }
+
+ gSPSegment(&gfx[0], 0x08, Lib_SegmentedToVirtual(sPlayerEyesTextures[eyeIndex]));
+
+ if (mouthIndex < 0) {
+ mouthIndex = sPlayerFaces[face].mouthIndex;
+ }
+
+ gSPSegment(&gfx[1], 0x09, Lib_SegmentedToVirtual(sPlayerMouthTextures[mouthIndex]));
+
+ POLY_OPA_DISP = &gfx[2];
+
+ D_801F59E0 = playerForm * 2;
+ sPlayerLod = lod;
+ SkelAnime_DrawFlexLod(play, skeleton, jointTable, dListCount, overrideLimbDraw, postLimbDraw, actor, lod);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+Vec3f D_801C08C0[PLAYER_FORM_MAX] = {
+ { 1304.0f, 0.0f, 0.0f }, // PLAYER_FORM_FIERCE_DEITY
+ { 1156.0f, 0.0f, 0.0f }, // PLAYER_FORM_GORON
+ { 1406.0f, 0.0f, 0.0f }, // PLAYER_FORM_ZORA
+ { 408.0f, 0.0f, 0.0f }, // PLAYER_FORM_DEKU
+ { 695.0f, 0.0f, 0.0f }, // PLAYER_FORM_HUMAN
+};
+
+f32 D_801C08FC[PLAYER_FORM_MAX] = {
+ 1265.0f, // PLAYER_FORM_FIERCE_DEITY
+ 1056.0f, // PLAYER_FORM_GORON
+ 1506.0f, // PLAYER_FORM_ZORA
+ 359.0f, // PLAYER_FORM_DEKU
+ 826.0f, // PLAYER_FORM_HUMAN
+};
+f32 D_801C0910[PLAYER_FORM_MAX] = {
+ 170.0416f, // PLAYER_FORM_FIERCE_DEITY
+ 133.63359f, // PLAYER_FORM_GORON
+ 197.68358f, // PLAYER_FORM_ZORA
+ 16.646399f, // PLAYER_FORM_DEKU
+ 48.302498f, // PLAYER_FORM_HUMAN
+};
+f32 D_801C0924[PLAYER_FORM_MAX] = {
+ 10.019104f, // PLAYER_FORM_FIERCE_DEITY
+ 22.120003f, // PLAYER_FORM_GORON
+ -29.12001f, // PLAYER_FORM_ZORA
+ 3.7582989f, // PLAYER_FORM_DEKU
+ -19.925102f, // PLAYER_FORM_HUMAN
+};
+f32 D_801C0938[PLAYER_FORM_MAX] = {
+ 5.0f, // PLAYER_FORM_FIERCE_DEITY
+ 4.0f, // PLAYER_FORM_GORON
+ 1.0f, // PLAYER_FORM_ZORA
+ 1.0f, // PLAYER_FORM_DEKU
+ 3.0f, // PLAYER_FORM_HUMAN
+};
+
+/**
+ * Adjusts player's legs to slopes and spawns flames when running on lava
+ */
+void Player_AdjustSingleLeg(PlayState* play, Player* player, SkelAnime* skelAnime, Vec3f* pos, Vec3s* rot,
+ s32 thighLimbIndex, s32 shinLimbIndex, s32 footLimbIndex) {
+ CollisionPoly* poly;
+ s32 bgId;
+ f32 yIntersect;
+ Vec3f sp90;
+ Vec3f sp84;
+ Vec3f footprintPos;
+ f32 sp74;
+ f32 sp70;
+ f32 sp7C;
+
+ if ((player->stateFlags3 & PLAYER_STATE3_1) || !(player->actor.scale.y >= 0.0f) ||
+ (player->stateFlags1 & PLAYER_STATE1_80) || play->unk_18844) {
+ return;
+ }
+
+ sp74 = D_801C0910[player->transformation];
+ sp70 = D_801C0924[player->transformation];
+ sp7C = D_801C0938[player->transformation] - player->unk_AB8;
+ Matrix_Push();
+ Matrix_TranslateRotateZYX(pos, rot);
+ Matrix_MultZero(&sp90);
+ Matrix_TranslateRotateZYX(&D_801C08C0[player->transformation], &skelAnime->jointTable[shinLimbIndex]);
+ Matrix_Translate(D_801C08FC[player->transformation], 0.0f, 0.0f, MTXMODE_APPLY);
+ Matrix_MultZero(&sp84);
+ Matrix_MultVecY(-300.0f, &footprintPos);
+ Matrix_Pop();
+
+ footprintPos.y += 15.0f;
+ yIntersect = BgCheck_EntityRaycastFloor3(&play->colCtx, &poly, &bgId, &footprintPos) + sp7C +
+ (player->unk_ABC * player->actor.scale.y);
+ if (sp84.y < yIntersect) {
+ f32 diffX = sp84.x - sp90.x;
+ f32 diffY = sp84.y - sp90.y;
+ f32 diffZ = sp84.z - sp90.z;
+ f32 distance;
+ f32 sp58;
+ f32 sp54;
+ f32 temp_f20;
+ f32 sp4C;
+ f32 sp48;
+ s16 temp_f8;
+ s32 temp_v0_4;
+ s16 phi_t1;
+
+ distance = sqrtf(SQ(diffX) + SQ(diffY) + SQ(diffZ));
+
+ sp58 = (SQ(distance) + sp70) / (2.0f * distance);
+
+ temp_f20 = sp74 - SQ(sp58);
+ temp_f20 = (temp_f20 < 0.0f) ? 0.0f : sqrtf(temp_f20);
+
+ sp4C = func_80086B30(temp_f20, sp58);
+ distance = sqrtf(SQ(diffX) + SQ(yIntersect - sp90.y) + SQ(diffZ));
+ sp58 = (SQ(distance) + sp70) / (2.0f * distance);
+ sp54 = distance - sp58;
+
+ 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);
+ phi_t1 = -skelAnime->jointTable[shinLimbIndex].z + phi_t1;
+ temp_f8 = (sp48 - sp4C) * (0x8000 / M_PI);
+
+ if ((s16)(ABS_ALT(skelAnime->jointTable[shinLimbIndex].x) + ABS_ALT(skelAnime->jointTable[shinLimbIndex].y)) <
+ 0) {
+ phi_t1 = BINANG_ROT180(phi_t1);
+ }
+
+ rot->z -= temp_f8;
+
+ skelAnime->jointTable[thighLimbIndex].z -= temp_f8;
+ skelAnime->jointTable[shinLimbIndex].z += phi_t1;
+ skelAnime->jointTable[footLimbIndex].z = (skelAnime->jointTable[footLimbIndex].z + temp_f8) - phi_t1;
+
+ temp_v0_4 = SurfaceType_GetFloorType(&play->colCtx, poly, bgId);
+ if ((temp_v0_4 >= 2) && (temp_v0_4 < 4) && !SurfaceType_IsWallDamage(&play->colCtx, poly, bgId)) {
+ footprintPos.y = yIntersect;
+ EffectSsGFire_Spawn(play, &footprintPos);
+ }
+ }
+}
+
+void Player_DrawHookshotReticle(PlayState* play, Player* player, f32 hookshotDistance) {
+ static Vec3f D_801C094C = { -500.0f, -100.0f, 0.0f };
+ CollisionPoly* poly;
+ s32 bgId;
+ Vec3f sp7C;
+ Vec3f sp70;
+ Vec3f pos;
+
+ D_801C094C.z = 0.0f;
+ Matrix_MultVec3f(&D_801C094C, &sp7C);
+ D_801C094C.z = hookshotDistance;
+ Matrix_MultVec3f(&D_801C094C, &sp70);
+
+ if (BgCheck_AnyLineTest3(&play->colCtx, &sp7C, &sp70, &pos, &poly, true, true, true, true, &bgId)) {
+ if (!func_800B90AC(play, &player->actor, poly, bgId, &pos) ||
+ BgCheck_ProjectileLineTest(&play->colCtx, &sp7C, &sp70, &pos, &poly, true, true, true, true, &bgId)) {
+ Vec3f sp58;
+ f32 sp54;
+ f32 scale;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ OVERLAY_DISP = Gfx_CallSetupDL(OVERLAY_DISP, 7);
+
+ SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, &pos, &sp58, &sp54);
+
+ scale = (sp54 < 200.0f) ? 0.08f : (sp54 / 200.0f) * 0.08f;
+
+ Matrix_Translate(pos.x, pos.y, pos.z, MTXMODE_NEW);
+ Matrix_Scale(scale, scale, scale, MTXMODE_APPLY);
+
+ gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ gSPSegment(OVERLAY_DISP++, 0x06, play->objectCtx.status[player->actor.objBankIndex].segment);
+ gSPDisplayList(OVERLAY_DISP++, gHookshotReticleDL);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
+}
-extern s32 D_801C0958;
-#if 0
s32 D_801C0958 = false;
-#endif
+
+Gfx** D_801C095C[] = {
+ gPlayerLeftHandClosedDLs,
+ gPlayerLeftHandOpenDLs,
+};
+Gfx** D_801C0964[] = {
+ gPlayerRightHandClosedDLs,
+ gPlayerRightHandOpenDLs,
+};
void func_80124F18(s16* arg0, f32* arg1, s16 arg2, f32 arg3, f32 arg4) {
- f32 phi_f12;
-
if (*arg0 < arg2) {
*arg1 += arg3;
} else {
@@ -968,7 +1915,7 @@ void func_80124FF0(f32 arg0, s16 arg1, Vec3f* arg2, s16 arg3, Vec3f* arg4, Vec3f
Math_Vec3f_Diff(arg5, arg4, &sp44);
sp40 = sqrtf(SQXZ(sp44));
- sp3C = (sp40 <= 1.0f) ? arg3 : Math_FAtan2F(sp44.z, sp44.x);
+ sp3C = (sp40 <= 1.0f) ? arg3 : Math_Atan2S_XY(sp44.z, sp44.x);
sp40 = (Math_CosS(sp3C - arg3) * sp40) + arg8;
if (ABS_ALT(BINANG_SUB(sp3C, arg3)) > 0x4000) {
@@ -976,7 +1923,7 @@ void func_80124FF0(f32 arg0, s16 arg1, Vec3f* arg2, s16 arg3, Vec3f* arg4, Vec3f
}
sp3C -= arg3;
- temp_v0 = Math_FAtan2F(sp44.y, sp40);
+ temp_v0 = Math_Atan2S_XY(sp44.y, sp40);
temp_v0 = CLAMP(temp_v0, (s16)-arg9, arg9);
//! FAKE:
if (sp3C) {}
@@ -984,7 +1931,26 @@ void func_80124FF0(f32 arg0, s16 arg1, Vec3f* arg2, s16 arg3, Vec3f* arg4, Vec3f
func_80124F18(arg6, arg7, temp_v0, 20.0f, 2000.0f);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801251C4.s")
+void func_801251C4(Player* player, Vec3f* arg1) {
+ Vec3f sp4C;
+ Vec3f sp40;
+
+ sp4C.x = player->actor.world.pos.x;
+ sp4C.y = player->actor.world.pos.y + 60.0f;
+ sp4C.z = player->actor.world.pos.z;
+ func_80124FF0(-20.0f, player->unk_B8C, &sp4C, player->actor.shape.rot.y,
+ &player->bodyPartsPos[PLAYER_BODYPART_WAIST], arg1, &player->unk_B90, &player->unk_B10[0], 0.0f,
+ 0x1F40, &player->unk_B92, &player->unk_B10[1], 0);
+
+ sp40.x =
+ (player->bodyPartsPos[PLAYER_BODYPART_LEFT_FOOT].x + player->bodyPartsPos[PLAYER_BODYPART_RIGHT_FOOT].x) / 2.0f;
+ sp40.y =
+ (player->bodyPartsPos[PLAYER_BODYPART_LEFT_FOOT].y + player->bodyPartsPos[PLAYER_BODYPART_RIGHT_FOOT].y) / 2.0f;
+ sp40.z =
+ (player->bodyPartsPos[PLAYER_BODYPART_LEFT_FOOT].z + player->bodyPartsPos[PLAYER_BODYPART_RIGHT_FOOT].z) / 2.0f;
+ func_80124FF0(-20.0f, player->unk_B90, arg1, (player->actor.shape.rot.y + player->unk_B92), &sp40, arg1,
+ &player->unk_B94, &player->unk_B10[2], -1.9f, 0x1F40, &player->unk_B96, &player->unk_B10[3], 0);
+}
void func_80125318(Vec3f* arg0, Vec3s* arg1) {
arg0->x = 0.0f;
@@ -1011,11 +1977,9 @@ void Player_DrawZoraShield(PlayState* play, Player* player) {
u8* phi_a0;
Vtx* vtx;
Gfx* dList;
- f32 scale;
+ f32 scale = player->unk_B62 * (10.0f / 51.0f);
s32 i;
- scale = player->unk_B62 * (10.0f / 51.0f);
-
OPEN_DISPS(play->state.gfxCtx);
AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(&object_link_zora_Matanimheader_012A80));
@@ -1043,58 +2007,571 @@ void Player_DrawZoraShield(PlayState* play, Player* player) {
CLOSE_DISPS(play->state.gfxCtx);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80125500.s")
+void func_80125500(PlayState* play, Player* player, s32 limbIndex, Vec3f* pos, Vec3s* rot) {
+ if (limbIndex == PLAYER_LIMB_LEFT_THIGH) {
+ Player_AdjustSingleLeg(play, player, &player->skelAnime, pos, rot, PLAYER_LIMB_LEFT_THIGH,
+ PLAYER_LIMB_LEFT_SHIN, PLAYER_LIMB_LEFT_FOOT);
+ } else if (limbIndex == PLAYER_LIMB_RIGHT_THIGH) {
+ Player_AdjustSingleLeg(play, player, &player->skelAnime, pos, rot, PLAYER_LIMB_RIGHT_THIGH,
+ PLAYER_LIMB_RIGHT_SHIN, PLAYER_LIMB_RIGHT_FOOT);
+ }
+}
-s32 func_80125580(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80125580.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80125CE0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80125D4C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801262C8.s")
-
-// unused
-s32 func_801263FC(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
+s32 Player_OverrideLimbDrawGameplayCommon(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot,
+ Actor* thisx) {
+ s32 pad;
Player* player = (Player*)thisx;
- if (!func_80125580(play, limbIndex, dList, pos, rot, thisx)) {
+ if (limbIndex == PLAYER_LIMB_ROOT) {
+ sPlayerLeftHandType = player->leftHandType;
+ sPlayerRightHandType = player->rightHandType;
+
+ // `sPlayerCurBodyPartPos` is incremented before each usage, so it starts at index -1.
+ // What determines if a limb corresponds to a body part is whether or not it has a non-NULL `dList`.
+ // Note: The increment would not be done for the root limb, even if it had a non-NULL `dList`.
+ // So if the root limb had a non-NULL `dList` (which is not the case in vanilla),
+ // an out-of-bounds write to `bodyPartsPos` would occur.
+ sPlayerCurBodyPartPos = &player->bodyPartsPos[-1];
+
+ if (player->transformation != PLAYER_FORM_FIERCE_DEITY) {
+ if (!(player->skelAnime.moveFlags & ANIM_FLAG_4) || (player->skelAnime.moveFlags & ANIM_FLAG_1)) {
+ 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)) {
+ pos->y *= player->ageProperties->unk_08;
+ }
+ }
+
+ pos->y -= player->unk_AB8;
+ if ((player->transformation == PLAYER_FORM_ZORA) && (player->stateFlags3 & PLAYER_STATE3_8000)) {
+ Matrix_Translate(pos->x, ((Math_CosS(player->unk_AAA) - 1.0f) * 200.0f) + pos->y, pos->z, MTXMODE_APPLY);
+ Matrix_RotateXS(player->unk_AAA, MTXMODE_APPLY);
+
+ if (player->unk_B62 != 0) {
+ Matrix_Push();
+ Matrix_RotateZS(player->unk_B8E, MTXMODE_APPLY);
+ Matrix_RotateZYX(rot->x, rot->y, rot->z, MTXMODE_APPLY);
+ Matrix_RotateXS(-0x8000, MTXMODE_APPLY);
+ Matrix_Translate(0.0f, 0.0f, -4000.0f, MTXMODE_APPLY);
+ Player_DrawZoraShield(play, player);
+ Matrix_Pop();
+ }
+
+ Matrix_RotateZS(player->unk_B86[1], MTXMODE_APPLY);
+ Matrix_RotateZYX(rot->x, rot->y, rot->z, MTXMODE_APPLY);
+ func_80125318(pos, rot);
+ } else if (player->stateFlags3 & PLAYER_STATE3_2000) {
+ Vec3f sp54;
+
+ func_801251C4(player, &sp54);
+ sp54.x -= player->actor.world.pos.x;
+ sp54.y -= player->actor.world.pos.y;
+ sp54.z -= player->actor.world.pos.z;
+ Matrix_Translate(pos->x + sp54.x, pos->y + sp54.y, pos->z + sp54.z, MTXMODE_APPLY);
+ Matrix_RotateXS(player->unk_B94, MTXMODE_APPLY);
+ Matrix_RotateZS(player->unk_B8E, MTXMODE_APPLY);
+ player->upperLimbRot.x = player->unk_B90 - player->unk_B94;
+ Matrix_RotateZYX(rot->x, rot->y, rot->z, MTXMODE_APPLY);
+ func_80125318(pos, rot);
+ } else if (player->unk_AAA != 0) {
+ Matrix_Translate(pos->x, ((Math_CosS(player->unk_AAA) - 1.0f) * 200.0f) + pos->y, pos->z, MTXMODE_APPLY);
+ Matrix_RotateXS(player->unk_AAA, MTXMODE_APPLY);
+ Matrix_RotateZYX(rot->x, rot->y, rot->z, MTXMODE_APPLY);
+ func_80125318(pos, rot);
+ }
+ } else {
+ if (*dList != NULL) {
+ sPlayerCurBodyPartPos++;
+ }
+
+ if (limbIndex == PLAYER_LIMB_HEAD) {
+ rot->x += player->headLimbRot.z;
+ rot->y -= player->headLimbRot.y;
+ rot->z += player->headLimbRot.x;
+
+ if (player->transformation == PLAYER_FORM_DEKU) {
+ EnArrow* bubble = NULL;
+
+ if (((player->skelAnime.animation == &gPlayerAnim_pn_drinkend)) ||
+ (player->unk_284.animation == &gPlayerAnim_pn_tamahaki) ||
+ ((player->stateFlags3 & PLAYER_STATE3_40) && ((bubble = (EnArrow*)player->heldActor) != NULL))) {
+ Matrix_TranslateRotateZYX(pos, rot);
+ func_80125340();
+ func_80125318(pos, rot);
+
+ if (bubble != NULL) {
+ s32 requiredScopeTemp[2];
+
+ player->unk_AF0[0].x = 1.0f - (bubble->bubble.unk_144 * 0.03f);
+ player->unk_AF0[0].y = 1.0f - (bubble->bubble.unk_144 * 0.01f);
+ player->unk_AF0[0].z = 1.0f - (bubble->bubble.unk_144 * 0.04f);
+ rot->z = bubble->bubble.unk_144 * 320.0f;
+ } else if (player->skelAnime.animation == &gPlayerAnim_pn_drinkend) {
+ func_80124618(D_801C03E0, player->skelAnime.curFrame, player->unk_AF0);
+ } else {
+ func_80124618(D_801C03C0, player->unk_284.curFrame, player->unk_AF0);
+ }
+
+ Matrix_Scale(player->unk_AF0[0].x, player->unk_AF0[0].y, player->unk_AF0[0].z, MTXMODE_APPLY);
+ }
+ }
+ } else if (limbIndex == PLAYER_LIMB_TORSO) {
+ if ((player->skelAnime.animation == &gPlayerAnim_pg_gakkistart) ||
+ (player->skelAnime.animation == &gPlayerAnim_pg_wait) ||
+ (player->skelAnime.animation == &gPlayerAnim_pg_punchC) ||
+ (player->transformation == PLAYER_FORM_ZORA)) {
+ Matrix_TranslateRotateZYX(pos, rot);
+ if (player->transformation == PLAYER_FORM_GORON) {
+ func_80125340();
+ }
+
+ func_80125318(pos, rot);
+ if ((player->transformation != PLAYER_FORM_ZORA) ||
+ (player->skelAnime.animation == &gPlayerAnim_pz_wait)) {
+ struct_80124618* phi_a0 =
+ (player->skelAnime.animation == &gPlayerAnim_pz_wait)
+ ? D_801C0608
+ : ((player->skelAnime.animation == &gPlayerAnim_pg_wait)
+ ? D_801C0628
+ : ((player->skelAnime.animation == &gPlayerAnim_pg_punchC) ? D_801C07C0
+ : D_801C0460));
+
+ func_80124618(phi_a0, player->skelAnime.curFrame, player->unk_AF0);
+ } else {
+ player->unk_AF0[0].y = 1.0f;
+ }
+
+ if (player->transformation == PLAYER_FORM_ZORA) {
+ player->unk_AF0[0].y *= 1.0f + (0.29999995f * player->unk_B10[0]);
+ player->unk_AF0[0].x = 1.0f;
+ player->unk_AF0[0].z = 1.0f;
+ }
+ Matrix_Scale(player->unk_AF0[0].x, player->unk_AF0[0].y, player->unk_AF0[0].z, MTXMODE_APPLY);
+ }
+ } else if (limbIndex == PLAYER_LIMB_UPPER_ROOT) {
+ s16 rotX;
+ s16 rotZ = 0x44C;
+
+ if (player->unk_AA8 != 0) {
+ Matrix_RotateZS(rotZ, MTXMODE_APPLY);
+ Matrix_RotateYS(player->unk_AA8, MTXMODE_APPLY);
+ }
+
+ if (player->upperLimbRot.y != 0) {
+ Matrix_RotateYS(player->upperLimbRot.y, MTXMODE_APPLY);
+ }
+
+ rotX = player->upperLimbRot.x;
+ if ((player->transformation == PLAYER_FORM_DEKU) && (player->stateFlags3 & PLAYER_STATE3_40)) {
+ if (player->heldActor != NULL) {
+ rotX += (s16)(((EnArrow*)(player->heldActor))->bubble.unk_144 * -470.0f);
+ }
+ }
+
+ Matrix_RotateXS(rotX, MTXMODE_APPLY);
+ if (player->upperLimbRot.z != 0) {
+ Matrix_RotateZS(player->upperLimbRot.z, MTXMODE_APPLY);
+ }
+ } else {
+ func_80125500(play, player, limbIndex, pos, rot);
+ }
+ }
+
+ return false;
+}
+
+void func_80125CE0(Player* player, struct_80124618* arg1, Vec3f* pos, Vec3s* rot) {
+ Matrix_TranslateRotateZYX(pos, rot);
+ func_80125318(pos, rot);
+ func_80124618(arg1, player->skelAnime.curFrame, player->unk_AF0);
+ Matrix_Scale(player->unk_AF0[0].x, player->unk_AF0[0].y, player->unk_AF0[0].z, MTXMODE_APPLY);
+}
+
+s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot,
+ Actor* actor) {
+ Player* player = (Player*)actor;
+
+ if (!Player_OverrideLimbDrawGameplayCommon(play, limbIndex, dList, pos, rot, &player->actor)) {
+ if (limbIndex == PLAYER_LIMB_LEFT_HAND) {
+ Gfx** leftHandDLists = player->leftHandDLists;
+ EquipValueSword swordEquipValue;
+
+ if (player->stateFlags3 & PLAYER_STATE3_2000) {
+ rot->z -= player->unk_B8C;
+ } else if ((sPlayerLeftHandType == PLAYER_MODELTYPE_LH_4) &&
+ (player->stateFlags1 & PLAYER_STATE1_2000000)) {
+ leftHandDLists = &gPlayerLeftHandOpenDLs[D_801F59E0];
+ sPlayerLeftHandType = PLAYER_MODELTYPE_LH_OPEN;
+ } else if ((player->leftHandType == PLAYER_MODELTYPE_LH_OPEN) && (player->actor.speed > 2.0f) &&
+ !(player->stateFlags1 & PLAYER_STATE1_8000000)) {
+ leftHandDLists = &gPlayerLeftHandClosedDLs[D_801F59E0];
+ sPlayerLeftHandType = PLAYER_MODELTYPE_LH_CLOSED;
+ } else if ((player->leftHandType == PLAYER_MODELTYPE_LH_ONE_HAND_SWORD) &&
+ (player->transformation == PLAYER_FORM_HUMAN) &&
+ ((swordEquipValue = GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD),
+ swordEquipValue != EQUIP_VALUE_SWORD_NONE))) {
+ leftHandDLists = &D_801C018C[2 * ((swordEquipValue - 1) ^ 0)];
+ } else {
+ s32 handIndex = GET_LEFT_HAND_INDEX_FROM_JOINT_TABLE(player->skelAnime.jointTable);
+
+ if (handIndex != 0) {
+ handIndex = (handIndex >> 12) - 1;
+ if (handIndex >= 2) {
+ handIndex = 0;
+ }
+ leftHandDLists = &D_801C095C[handIndex][D_801F59E0];
+ }
+ }
+
+ *dList = leftHandDLists[sPlayerLod];
+
+ if (player->transformation == PLAYER_FORM_GORON) {
+ if (player->skelAnime.animation == &gPlayerAnim_pg_punchA) {
+ func_80125CE0(player, D_801C0750, pos, rot);
+ }
+ } else if (player->transformation == PLAYER_FORM_ZORA) {
+ if ((player->stateFlags1 & PLAYER_STATE1_2) || (player->stateFlags1 & PLAYER_STATE1_400) ||
+ func_801242B4(player)) {
+ *dList = gLinkZoraLeftHandOpenDL;
+ } else {
+ s32 phi_a1 = (player->skelAnime.animation == &gPlayerAnim_pz_gakkistart) &&
+ (player->skelAnime.curFrame >= 6.0f);
+
+ if (phi_a1 || (player->skelAnime.animation == &gPlayerAnim_pz_gakkiplay)) {
+ *dList = object_link_zora_DL_00E2A0;
+ func_80125CE0(player, phi_a1 ? D_801C0538 : D_801C0560, pos, rot);
+ }
+ }
+ }
+ } else if (limbIndex == PLAYER_LIMB_RIGHT_HAND) {
+ if ((player->transformation == PLAYER_FORM_ZORA) &&
+ (((player->stateFlags1 & PLAYER_STATE1_2)) || (player->stateFlags1 & PLAYER_STATE1_400) ||
+ func_801242B4(player))) {
+ *dList = gLinkZoraRightHandOpenDL;
+ } else {
+ Gfx** rightHandDLists = player->rightHandDLists;
+
+ if (player->stateFlags3 & PLAYER_STATE3_2000) {
+ rot->z -= player->unk_B8C;
+ }
+
+ if (sPlayerRightHandType == PLAYER_MODELTYPE_RH_SHIELD) {
+ if (player->transformation == PLAYER_FORM_HUMAN) {
+ if (player->currentShield != PLAYER_SHIELD_NONE) {
+ //! FAKE
+ rightHandDLists = &gPlayerHandHoldingShields[2 * ((player->currentShield - 1) ^ 0)];
+ }
+ }
+ } else if ((player->rightHandType == PLAYER_MODELTYPE_RH_OPEN) && (player->actor.speed > 2.0f) &&
+ (!(player->stateFlags1 & PLAYER_STATE1_8000000))) {
+ rightHandDLists = &gPlayerRightHandClosedDLs[D_801F59E0];
+ sPlayerRightHandType = PLAYER_MODELTYPE_RH_CLOSED;
+ } else {
+ s32 handIndex = GET_RIGHT_HAND_INDEX_FROM_JOINT_TABLE(player->skelAnime.jointTable);
+
+ if (handIndex != 0) {
+ handIndex = (handIndex >> 8) - 1;
+ rightHandDLists = &D_801C0964[handIndex][D_801F59E0];
+ }
+ }
+
+ *dList = rightHandDLists[sPlayerLod];
+ if (player->skelAnime.animation == &gPlayerAnim_pg_punchB) {
+ func_80125CE0(player, D_801C0784, pos, rot);
+ }
+ }
+ } else if (limbIndex == PLAYER_LIMB_SHEATH) {
+ Gfx** sheathDLists = player->sheathDLists;
+
+ if (player->transformation == PLAYER_FORM_HUMAN) {
+ EquipValueSword swordEquipValue = GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD);
+
+ if (swordEquipValue != EQUIP_VALUE_SWORD_NONE) {
+ if ((player->sheathType == PLAYER_MODELTYPE_SHEATH_14) ||
+ (player->sheathType == PLAYER_MODELTYPE_SHEATH_12)) {
+ sheathDLists = &gPlayerSheathedSwords[2 * ((swordEquipValue - 1) ^ 0)];
+ } else {
+ sheathDLists = &gPlayerSwordSheaths[2 * ((swordEquipValue - 1) ^ 0)];
+ }
+ }
+ }
+
+ *dList = sheathDLists[sPlayerLod];
+ } else if (limbIndex == PLAYER_LIMB_WAIST) {
+ *dList = player->waistDLists[sPlayerLod];
+ } else if (limbIndex == PLAYER_LIMB_HAT) {
+ if (player->transformation == PLAYER_FORM_ZORA) {
+ Matrix_Scale((player->unk_B10[0] * 1) + 1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
+ }
+ }
+ }
+
+ return false;
+}
+
+s32 Player_OverrideLimbDrawGameplayFirstPerson(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot,
+ Actor* actor) {
+ Player* player = (Player*)actor;
+
+ if (!Player_OverrideLimbDrawGameplayCommon(play, limbIndex, dList, pos, rot, actor)) {
+ if (player->unk_AA5 != 3) {
+ *dList = NULL;
+ } else if (limbIndex == PLAYER_LIMB_LEFT_FOREARM) {
+ *dList = sPlayerFirstPersonLeftForearmDLs[player->transformation];
+ } else if (limbIndex == PLAYER_LIMB_LEFT_HAND) {
+ *dList = sPlayerFirstPersonLeftHandDLs[player->transformation];
+ } else if (limbIndex == PLAYER_LIMB_RIGHT_SHOULDER) {
+ *dList = sPlayerFirstPersonRightShoulderDLs[player->transformation];
+ } else if (limbIndex == PLAYER_LIMB_RIGHT_HAND) {
+ if (Player_IsHoldingHookshot(player)) {
+ *dList = sPlayerFirstPersonRightHandHookshotDLs[player->transformation];
+ } else {
+ *dList = sPlayerFirstPersonRightHandDLs[player->transformation];
+ }
+ } else {
+ *dList = NULL;
+ }
+ }
+
+ return false;
+}
+
+// Unused remnant of OoT
+s32 Player_OverrideLimbDrawGameplayCrawling(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot,
+ Actor* thisx) {
+ Player* player = (Player*)thisx;
+
+ if (!Player_OverrideLimbDrawGameplayCommon(play, limbIndex, dList, pos, rot, thisx)) {
*dList = NULL;
}
return false;
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80126440.s")
+s32 func_80126440(PlayState* play, ColliderQuad* collider, WeaponInfo* weaponInfo, Vec3f* newTip, Vec3f* newBase) {
+ if (!weaponInfo->active) {
+ if (collider != NULL) {
+ Collider_ResetQuadAT(play, &collider->base);
+ }
+ Math_Vec3f_Copy(&weaponInfo->tip, newTip);
+ Math_Vec3f_Copy(&weaponInfo->base, newBase);
+ weaponInfo->active = true;
-extern u8 D_801C096C[PLAYER_SHIELD_MAX];
-#if 0
-u8 D_801C096C[PLAYER_SHIELD_MAX] = {
- COLTYPE_METAL,
- COLTYPE_METAL,
- COLTYPE_METAL,
+ return true;
+ }
+
+ if ((weaponInfo->tip.x == newTip->x) && (weaponInfo->tip.y == newTip->y) && (weaponInfo->tip.z == newTip->z)) {
+ if ((weaponInfo->base.x == newBase->x) && (weaponInfo->base.y == newBase->y) &&
+ (weaponInfo->base.z == newBase->z)) {
+ if (collider != NULL) {
+ Collider_ResetQuadAT(play, &collider->base);
+ }
+
+ return false;
+ }
+ }
+
+ if (collider != NULL) {
+ Collider_SetQuadVertices(collider, newBase, newTip, &weaponInfo->base, &weaponInfo->tip);
+ CollisionCheck_SetAT(play, &play->colChkCtx, &collider->base);
+ }
+
+ Math_Vec3f_Copy(&weaponInfo->base, newBase);
+ Math_Vec3f_Copy(&weaponInfo->tip, newTip);
+ weaponInfo->active = true;
+
+ return true;
+}
+
+u8 sPlayerShieldCollisionTypes[PLAYER_SHIELD_MAX] = {
+ COLTYPE_METAL, // PLAYER_SHIELD_NONE
+ COLTYPE_METAL, // PLAYER_SHIELD_HEROS_SHIELD
+ COLTYPE_METAL, // PLAYER_SHIELD_MIRROR_SHIELD
};
-#endif
-void func_801265C8(PlayState* play, Player* player, ColliderQuad* collider, Vec3f arg3[4]) {
+void Player_UpdateShieldCollider(PlayState* play, Player* player, ColliderQuad* collider, Vec3f quadSrc[4]) {
if (player->stateFlags1 & PLAYER_STATE1_400000) {
- Vec3f sp4C;
- Vec3f sp40;
- Vec3f sp34;
- Vec3f sp28;
+ Vec3f quadDest[4];
- player->shieldQuad.base.colType = D_801C096C[player->currentShield];
- Matrix_MultVec3f(&arg3[0], &sp28);
- Matrix_MultVec3f(&arg3[1], &sp34);
- Matrix_MultVec3f(&arg3[2], &sp40);
- Matrix_MultVec3f(&arg3[3], &sp4C);
- Collider_SetQuadVertices(collider, &sp28, &sp34, &sp40, &sp4C);
+ player->shieldQuad.base.colType = sPlayerShieldCollisionTypes[player->currentShield];
+ Matrix_MultVec3f(&quadSrc[0], &quadDest[0]);
+ Matrix_MultVec3f(&quadSrc[1], &quadDest[1]);
+ Matrix_MultVec3f(&quadSrc[2], &quadDest[2]);
+ Matrix_MultVec3f(&quadSrc[3], &quadDest[3]);
+ Collider_SetQuadVertices(collider, &quadDest[0], &quadDest[1], &quadDest[2], &quadDest[3]);
CollisionCheck_SetAC(play, &play->colChkCtx, &collider->base);
CollisionCheck_SetAT(play, &play->colChkCtx, &collider->base);
}
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_8012669C.s")
+Vec3f D_801C0970[] = {
+ { 0.0f, 400.0f, 0.0f },
+ { 0.0f, 1400.0f, -1000.0f },
+ { 0.0f, -400.0f, 1000.0f },
+};
+
+Vec3f D_801C0994[] = {
+ { 5000.0f, 400.0f, 0.0f },
+ { 5000.0f, -400.0f, 1000.0f },
+ { 5000.0f, 1400.0f, -1000.0f },
+};
+
+Vec3f D_801C09B8[] = {
+ { 0.0f, 750.0f, 750.0f },
+ { 1500.0f, 1500.0f, 1500.0f },
+ { -2500.0f, -2000.0f, -3000.0f },
+};
+
+Vec3f D_801C09DC[] = {
+ { 900.0f, 300.0f, 100.0f },
+ { 1300.0f, 700.0f, -300.0f },
+ { 500.0f, -100.0f, 500.0f },
+};
+
+Vec3f D_801C0A00[] = {
+ { -2500.0f, 1400.0f, 1100.0f },
+ { -2900.0f, 1000.0f, 1500.0f },
+ { -2100.0f, 1800.0f, 700.0f },
+};
+
+Vec3f D_801C0A24[] = {
+ { 0.0f, 0.0f, 0.0f },
+ { -800.0f, 800.0f, 800.0f },
+ { -800.0f, -800.0f, -800.0f },
+};
+
+Vec3f D_801C0A48[] = {
+ { 2000.0f, 0.0f, 0.0f },
+ { 2800.0f, -800.0f, -800.0f },
+ { 2800.0f, 800.0f, 800.0f },
+};
+
+Vec3f D_801C0A6C[] = {
+ { -400.0f, 800.0f, 0.0f },
+ { -5000.0f, -500.0f, -4000.0f },
+ { -5000.0f, 8000.0f, 4000.0f },
+};
+
+Vec3f D_801C0A90[] = {
+ { -400.0f, 1800.0f, 0.0f },
+ { 5000.0f, 8000.0f, 4000.0f },
+ { 5000.0f, -500.0f, -4000.0f },
+};
+
+Gfx* D_801C0AB4[] = {
+ object_link_zora_DL_00CC38,
+ object_link_zora_DL_00CDA0,
+};
+
+Gfx* D_801C0ABC[] = {
+ object_link_zora_DL_010868,
+ object_link_zora_DL_010978,
+};
+
+Vec3f D_801C0AC4[] = {
+ { 5400.0f, 1700.0f, 1800.0f },
+ { 5400.0f, 1700.0f, -1800.0f },
+};
+
+Vec3f D_801C0ADC[] = {
+ { 5250.0f, 570.0f, 2400.0f },
+ { 5250.0f, 570.0f, -2400.0f },
+};
+
+struct_80124618* D_801C0AF4[] = {
+ D_801C0678,
+ D_801C0698,
+};
+
+struct_80124618* D_801C0AFC[] = {
+ D_801C06B8,
+ D_801C06E0,
+};
+
+struct_80124618* D_801C0B04[] = {
+ D_801C06F8,
+ D_801C0718,
+};
+
+struct_80124618* D_801C0B0C[] = {
+ D_801C0730,
+ D_801C0740,
+};
+
+Gfx* D_801C0B14[] = {
+ object_link_nuts_DL_008760,
+ object_link_nuts_DL_008660,
+};
+
+u8 D_801C0B1C[] = {
+ PLAYER_BODYPART_LEFT_HAND,
+ PLAYER_BODYPART_RIGHT_HAND,
+};
+
+Gfx* D_801C0B20[] = {
+ object_mask_truth_DL_0001A0, // PLAYER_MASK_TRUTH
+ object_mask_kerfay_DL_000D40, // PLAYER_MASK_KAFEIS_MASK
+ object_mask_yofukasi_DL_000490, // PLAYER_MASK_ALL_NIGHT
+ object_mask_rabit_DL_000610, // PLAYER_MASK_BUNNY
+ object_mask_ki_tan_DL_0004A0, // PLAYER_MASK_KEATON
+ object_mask_json_DL_0004C0, // PLAYER_MASK_GARO
+ object_mask_romerny_DL_0007A0, // PLAYER_MASK_ROMANI
+ object_mask_zacho_DL_000700, // PLAYER_MASK_CIRCUS_LEADER
+ object_mask_posthat_DL_000290, // PLAYER_MASK_POSTMAN
+ object_mask_meoto_DL_0005A0, // PLAYER_MASK_COUPLE
+ object_mask_bigelf_DL_0016F0, // PLAYER_MASK_GREAT_FAIRY
+ object_mask_gibudo_DL_000250, // PLAYER_MASK_GIBDO
+ gDonGeroMaskDL, // PLAYER_MASK_DON_GERO
+ object_mask_dancer_DL_000EF0, // PLAYER_MASK_KAMARO
+ object_mask_skj_DL_0009F0, // PLAYER_MASK_CAPTAIN
+ object_mask_stone_DL_000820, // PLAYER_MASK_STONE
+ object_mask_bree_DL_0003C0, // PLAYER_MASK_BREMEN
+ object_mask_bakuretu_DL_0005C0, // PLAYER_MASK_BLAST
+ object_mask_bu_san_DL_000710, // PLAYER_MASK_SCENTS
+ object_mask_kyojin_DL_000380, // PLAYER_MASK_GIANT
+ gameplay_keep_DL_00B260, // PLAYER_MASK_FIERCE_DEITY
+ gameplay_keep_DL_005A10, // PLAYER_MASK_GORON
+ gameplay_keep_DL_005360, // PLAYER_MASK_ZORA
+ gDekuMaskDL, // PLAYER_MASK_DEKU
+ object_mask_boy_DL_000900,
+ object_mask_goron_DL_0014A0,
+ object_mask_zora_DL_000DB0,
+ object_mask_nuts_DL_001D90,
+};
+
+Vec3f D_801C0B90[D_801F59B0_LEN] = {
+ { 950.0f, -800.0f, 300.0f },
+ { 950.0f, -800.0f, -300.0f },
+};
+
+void func_8012669C(PlayState* play, Player* player, Vec3f* arg2, Vec3f* arg3) {
+ Vec3f sp3C;
+ Vec3f sp30;
+
+ Matrix_MultVec3f(arg2, &sp3C);
+ Matrix_MultVec3f(arg3, &sp30);
+
+ if (player->meleeWeaponState != 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))) {
+ Matrix_MultVec3f(&arg2[1], &sp3C);
+ Matrix_MultVec3f(&arg3[1], &sp30);
+ func_80126440(play, &player->meleeWeaponQuads[0], &player->meleeWeaponInfo[1], &sp3C, &sp30);
+ Matrix_MultVec3f(&arg2[2], &sp3C);
+ Matrix_MultVec3f(&arg3[2], &sp30);
+ func_80126440(play, &player->meleeWeaponQuads[1], &player->meleeWeaponInfo[2], &sp3C, &sp30);
+ }
+ } else {
+ Math_Vec3f_Copy(&player->meleeWeaponInfo[0].tip, &sp3C);
+ Math_Vec3f_Copy(&player->meleeWeaponInfo[0].base, &sp30);
+ }
+}
void Player_DrawGetItemImpl(PlayState* play, Player* player, Vec3f* refPos, s32 drawIdPlusOne) {
f32 sp34;
@@ -1135,29 +2612,211 @@ void Player_DrawGetItem(PlayState* play, Player* player) {
if (player->stateFlags1 & PLAYER_STATE1_400) {
refPos.y = player->actor.world.pos.y + 30.0f;
} else {
- refPos.x = player->bodyPartsPos[0xC].x;
- refPos.y = player->bodyPartsPos[0xC].y - 6.0f;
- refPos.z = player->bodyPartsPos[0xC].z;
+ refPos.x = player->bodyPartsPos[PLAYER_BODYPART_LEFT_HAND].x;
+ refPos.y = player->bodyPartsPos[PLAYER_BODYPART_LEFT_HAND].y - 6.0f;
+ refPos.z = player->bodyPartsPos[PLAYER_BODYPART_LEFT_HAND].z;
}
} else {
refPos.y = player->actor.world.pos.y + 28.0f;
}
} else {
- Math_Vec3f_Copy(&refPos, &D_801F59E8);
+ Math_Vec3f_Copy(&refPos, &sPlayerGetItemRefPos);
}
- drawIdPlusOne = ABS_ALT(player->unk_B2A);
+ drawIdPlusOne = ABS_ALT(player->getItemDrawIdPlusOne);
Player_DrawGetItemImpl(play, player, &refPos, drawIdPlusOne);
}
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80126AB4.s")
+void func_80126AB4(Player* player, Vec3f** arg1) {
+ if ((player->transformation == PLAYER_FORM_GORON) || (player->actor.id == ACTOR_EN_TEST3)) {
+ Math_Vec3f_Copy(&player->unk_AF0[1], &player->meleeWeaponInfo[0].base);
+ *arg1 = D_801C09B8;
+ return;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80126B8C.s")
+ D_801C0994[1].x = D_801C0994[0].x;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80126BD0.s")
+ if (player->unk_ADD >= 3) {
+ player->unk_ADD++;
+ D_801C0994[1].x *= 1.0f + ((9 - player->unk_ADD) * 0.1f);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801271B0.s")
+ D_801C0994[1].x += 1200.0f;
+ D_801C0994[2].x = D_801C0994[1].x;
+ *arg1 = D_801C0994;
+}
+
+void func_80126B8C(PlayState* play, Player* player) {
+ Vec3f* sp1C;
+
+ func_80126AB4(player, &sp1C);
+ func_8012669C(play, player, sp1C, D_801C0970);
+}
+
+// Zora boomerangs (?)
+void func_80126BD0(PlayState* play, Player* player, s32 arg2) {
+ if ((player->transformation != PLAYER_FORM_ZORA) || (player->rightHandType == PLAYER_MODELTYPE_RH_HOOKSHOT)) {
+ return;
+ }
+
+ if ((arg2 != 0) && (player->stateFlags1 & PLAYER_STATE1_400000)) {
+ OPEN_DISPS(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_link_zora_DL_0110A8);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+ } else {
+ Actor* boomerangActor = player->boomerangActor;
+ Vec3f sp58;
+ Vec3f sp4C;
+
+ if (player->stateFlags1 & PLAYER_STATE1_2000000) {
+ if (player->boomerangActor == NULL) {
+ return;
+ }
+ if ((player->boomerangActor->params == arg2) ||
+ (((boomerangActor->child != NULL)) && (boomerangActor->child->params == arg2))) {
+ return;
+ }
+ }
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ if ((player->skelAnime.animation != &gPlayerAnim_pz_gakkiplay) &&
+ (player->skelAnime.animation != &gPlayerAnim_pz_fishswim)) {
+ if (player->skelAnime.animation == &gPlayerAnim_pz_gakkistart) {
+ func_80124618(D_801C0580, player->skelAnime.curFrame, player->unk_AF0);
+ } else if (player->skelAnime.animation == &gPlayerAnim_pz_waterroll) {
+ func_80124618(D_801C05A8, player->skelAnime.curFrame, player->unk_AF0);
+ } else if (player->skelAnime.animation == &gPlayerAnim_pz_swimtowait) {
+ func_80124618(D_801C05D8, player->skelAnime.curFrame, player->unk_AF0);
+ } else if (player->skelAnime.animation == &gPlayerAnim_pz_bladeon) {
+ func_80124618(D_801C07F0, player->skelAnime.curFrame, player->unk_AF0);
+ } else if (player->skelAnime.animation == &gPlayerAnim_pz_jumpAT) {
+ func_80124618(D_801C0820, player->skelAnime.curFrame, player->unk_AF0);
+ } else if (player->skelAnime.animation == &gPlayerAnim_pz_jumpATend) {
+ func_80124618(D_801C0838, player->skelAnime.curFrame, player->unk_AF0);
+ } else if (player->heldItemAction == PLAYER_IA_ZORA_FINS) {
+ player->unk_AF0[0].x = 1.0f;
+ player->unk_AF0[0].y = 1.0f;
+ player->unk_AF0[0].z = 1.0f;
+ } else {
+ player->unk_AF0[0].x = 0.4f;
+ player->unk_AF0[0].y = 0.6f;
+ player->unk_AF0[0].z = 0.7f;
+ }
+ Matrix_Push();
+
+ Matrix_Scale(player->unk_AF0[0].x, player->unk_AF0[0].y, player->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++, D_801C0AB4[arg2]);
+
+ if (player->meleeWeaponState != 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);
+ }
+ }
+
+ Matrix_Pop();
+ }
+
+ if (player->skelAnime.animation == &gPlayerAnim_pz_waterroll) {
+ func_80124618(D_801C05C8, player->skelAnime.curFrame, player->unk_AF0);
+ D_801C05F0[0].unk_2.x = 50;
+ D_801C05F0[0].unk_2.y = 50;
+ D_801C05F0[0].unk_2.z = 50;
+ D_801C05F0[1].unk_2 = D_801C05F0[0].unk_2;
+ } else if (player->skelAnime.animation == &gPlayerAnim_pz_swimtowait) {
+ func_80124618(D_801C05F0, player->skelAnime.curFrame, player->unk_AF0);
+ } else if (player->skelAnime.animation == &gPlayerAnim_pz_fishswim) {
+ player->unk_AF0[0].x = (ABS_ALT(player->unk_B8A) * 0.00003f) + 0.5f;
+ player->unk_AF0[0].y = player->unk_AF0[0].x;
+ player->unk_AF0[0].z = player->unk_AF0[0].x;
+
+ D_801C05F0[0].unk_2.x = (player->unk_AF0[0].x * 100.0f);
+
+ D_801C05F0[0].unk_2.y = D_801C05F0[0].unk_2.x;
+ D_801C05F0[0].unk_2.z = D_801C05F0[0].unk_2.x;
+
+ D_801C05F0[1].unk_2 = D_801C05F0[0].unk_2;
+ } else {
+ //! @bug Skips CLOSE_DISPS
+ return;
+ }
+
+ Matrix_Push();
+ Matrix_Scale(player->unk_AF0[0].x, player->unk_AF0[0].y, player->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++, D_801C0ABC[arg2]);
+
+ Matrix_MultVec3f(&D_801C0AC4[arg2], &sp58);
+ Matrix_MultVec3f(&D_801C0ADC[arg2], &sp4C);
+
+ if (func_80126440(play, NULL, &player->meleeWeaponInfo[arg2], &sp58, &sp4C) &&
+ (player->stateFlags1 & PLAYER_STATE1_8000000)) {
+ EffectBlure_AddVertex(Effect_GetByIndex(player->meleeWeaponEffectIndex[arg2]),
+ &player->meleeWeaponInfo[arg2].tip, &player->meleeWeaponInfo[arg2].base);
+ }
+ Matrix_Pop();
+
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+}
+
+s32 func_801271B0(PlayState* play, Player* player, s32 arg2) {
+ if (player->transformation == PLAYER_FORM_DEKU) {
+ if (((player->skelAnime.animation == &gPlayerAnim_pn_kakku)) ||
+ (player->skelAnime.animation == &gPlayerAnim_pn_kakkufinish) ||
+ (player->skelAnime.animation == &gPlayerAnim_pn_rakkafinish) ||
+ (player->skelAnime.animation == &gPlayerAnim_pn_batabata)) {
+ struct_80124618** sp3C = D_801C0AF4;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ if (player->skelAnime.animation == &gPlayerAnim_pn_kakkufinish) {
+ sp3C = D_801C0AFC;
+ } else if (player->skelAnime.animation == &gPlayerAnim_pn_batabata) {
+ sp3C = D_801C0B0C;
+ } else if (player->skelAnime.animation == &gPlayerAnim_pn_rakkafinish) {
+ sp3C = D_801C0B04;
+ }
+
+ Matrix_Push();
+ Matrix_Translate(0.0f, 150.0f, 0.0f, MTXMODE_APPLY);
+ func_80124618(sp3C[0], player->skelAnime.curFrame, &player->unk_AF0[1]);
+ Matrix_Scale(player->unk_AF0[1].x, player->unk_AF0[1].y, player->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++, D_801C0B14[arg2]);
+
+ Matrix_Translate(2150.0f, 0.0f, 0.0f, MTXMODE_APPLY);
+ Matrix_RotateXS(player->unk_B8A, MTXMODE_APPLY);
+ func_80124618(sp3C[1], player->skelAnime.curFrame, &player->unk_AF0[1]);
+ Matrix_Scale(player->unk_AF0[1].x, player->unk_AF0[1].y, player->unk_AF0[1].z, MTXMODE_APPLY);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ // Close flower / Open flower
+ gSPDisplayList(POLY_OPA_DISP++,
+ player->actor.velocity.y < -6.0f ? gLinkDekuClosedFlowerDL : gLinkDekuOpenFlowerDL);
+
+ Matrix_MultZero(&player->bodyPartsPos[D_801C0B1C[arg2]]);
+ Matrix_Pop();
+
+ CLOSE_DISPS(play->state.gfxCtx);
+
+ return true;
+ }
+ }
+
+ return false;
+}
// Player_SetMaskSegment?
s32 func_80127438(PlayState* play, Player* player, s32 currentMask) {
@@ -1191,24 +2850,1006 @@ void Player_DrawCouplesMask(PlayState* play, Player* player) {
AnimatedMat_DrawOpa(play, Lib_SegmentedToVirtual(&object_mask_meoto_Matanimheader_001CD8));
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80127594.s")
+void Player_DrawCircusLeadersMask(PlayState* play, Player* player) {
+ static Vec3f bubbleVelocity = { 0.0f, 0.0f, 0.0f };
+ static Vec3f bubbleAccel = { 0.0f, 0.0f, 0.0f };
+ Gfx* gfx;
+ s32 i;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801278F8.s")
+ OPEN_DISPS(play->state.gfxCtx);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80127A60.s")
+ gfx = POLY_XLU_DISP;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80127B64.s")
+ for (i = 0; i < D_801F59B0_LEN; i++) {
+ f32 scaleY = (D_801F59C8[i] / 400.0f) * 0.1f;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80127BE8.s")
+ Matrix_MultVec3f(&D_801C0B90[i], &D_801F59B0[i]);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80127DA4.s")
+ //! FAKE
+ if (1) {}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80128388.s")
+ D_801F59B0[i].y += -10.0f * scaleY;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801284A0.s")
+ if (D_801F59C8[i] < 400) {
+ f32 scaleXZ = CLAMP_MAX(scaleY, 0.05f);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80128640.s")
+ Matrix_Push();
+ Matrix_Translate(D_801F59B0[i].x, D_801F59B0[i].y, D_801F59B0[i].z, MTXMODE_NEW);
+ Matrix_Scale(scaleXZ, scaleY, scaleXZ, MTXMODE_APPLY);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80128B74.s")
+ gSPMatrix(&gfx[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_PUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPSegment(&gfx[1], 0x08, VIRTUAL_TO_PHYSICAL(SEGMENTED_TO_VIRTUAL(gEffBubble1Tex)));
+ gDPSetPrimColor(&gfx[2], 0, 0, 255, 255, 255, 255);
+ gDPSetEnvColor(&gfx[3], 150, 150, 150, 0);
+ gSPDisplayList(&gfx[4], gEffBubbleDL);
+ gSPPopMatrix(&gfx[5], G_MTX_MODELVIEW);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80128BD0.s")
+ Matrix_Pop();
+
+ gfx = &gfx[6];
+ } else {
+ f32 speedXZ = sqrtf(SQ(player->actor.velocity.x) + SQ(player->actor.velocity.z));
+ s16 phi_s0 = speedXZ * 2000.0f;
+ f32 temp_f20;
+
+ bubbleVelocity.y = speedXZ * 0.4f;
+ bubbleAccel.y = -0.3f;
+
+ if (phi_s0 > 0x3E80) {
+ phi_s0 = 0x3E80;
+ }
+
+ phi_s0 = player->actor.focus.rot.y + ((i != 0) ? phi_s0 : -phi_s0);
+ temp_f20 = speedXZ * 0.2f;
+ temp_f20 = CLAMP_MAX(temp_f20, 4.0f);
+
+ bubbleVelocity.x = -Math_SinS(phi_s0) * temp_f20;
+ bubbleVelocity.z = -Math_CosS(phi_s0) * temp_f20;
+
+ EffectSsDtBubble_SpawnColorProfile(play, &D_801F59B0[i], &bubbleVelocity, &bubbleAccel, 20, 20, 3, 0);
+ D_801F59C8[i] -= 400;
+ }
+ }
+
+ POLY_XLU_DISP = gfx;
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void Player_DrawBlastMask(PlayState* play, Player* player) {
+ static Gfx D_801C0BC0[] = {
+ gsDPSetEnvColor(0, 0, 0, 255),
+ gsSPEndDisplayList(),
+ };
+ static Gfx D_801C0BD0[] = {
+ gsDPSetRenderMode(AA_EN | Z_CMP | Z_UPD | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL |
+ G_RM_FOG_SHADE_A,
+ AA_EN | Z_CMP | Z_UPD | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL |
+ GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)),
+ gsSPEndDisplayList(),
+ };
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ if (player->blastMaskTimer != 0) {
+ s32 alpha;
+
+ gSegments[0xA] = VIRTUAL_TO_PHYSICAL(player->maskObjectSegment);
+
+ AnimatedMat_DrawOpa(play, Lib_SegmentedToVirtual(&object_mask_bakuretu_Matanimheader_0011F8));
+
+ if (player->blastMaskTimer <= 10) {
+ alpha = (player->blastMaskTimer / 10.0f) * 255;
+ } else {
+ alpha = 255;
+ }
+
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, (u8)alpha);
+ gSPDisplayList(POLY_OPA_DISP++, object_mask_bakuretu_DL_000440);
+ gSPSegment(POLY_OPA_DISP++, 0x09, D_801C0BD0);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, (u8)(255 - alpha));
+ } else {
+ gSPSegment(POLY_OPA_DISP++, 0x09, D_801C0BC0);
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+Vec3f D_801C0BE0 = { 0.0f, 0.3f, 0.0f };
+Vec3f D_801C0BEC = { 0.0f, -0.025f, 0.0f };
+Color_RGBA8 D_801C0BF8 = { 250, 100, 100, 0 };
+Color_RGBA8 D_801C0BFC = { 0, 0, 100, 0 };
+
+Vec3f D_801C0C00 = { 0.0f, 20.0f, 0.0f };
+
+Vec3f D_801C0C0C[] = {
+ { 174.0f, -1269.0f, -1.0f },
+ { 401.0f, -729.0f, -701.0f },
+ { 401.0f, -729.0f, 699.0f },
+};
+
+Vec3f D_801C0C30[] = {
+ { 74.0f, -1269.0f, -1.0f },
+ { 301.0f, -729.0f, -701.0f },
+ { 301.0f, -729.0f, 699.0f },
+};
+
+typedef struct struct_80128388_arg1 {
+ /* 0x00 */ f32 unk_00;
+ /* 0x04 */ s16 unk_04;
+ /* 0x06 */ s16 unk_06;
+ /* 0x08 */ Vec3f unk_08;
+ /* 0x14 */ f32 unk_14;
+ /* 0x18 */ s16 unk_18;
+ /* 0x1A */ s16 unk_1A;
+} struct_80128388_arg1; // size = 0x1C
+
+struct_80128388_arg1 D_801C0C54[] = {
+ { 0.0f, 0x0000, 0x8000, { 0.0f, 0.0f, 0.0f }, 0.0f, 0x0000, 0x0000 },
+ { 16.8f, 0x0000, 0x0000, { 0.0f, 0.0f, 0.0f }, 20.0f, 0x1388, 0x1388 },
+ { 30.0f, 0x0000, 0x0000, { 0.0f, 0.0f, 0.0f }, 20.0f, 0x1F40, 0x2EE0 },
+};
+
+Color_RGB8 sPlayerBottleColors[PLAYER_BOTTLE_MAX] = {
+ { 255, 255, 255 }, // PLAYER_BOTTLE_EMPTY
+ { 80, 80, 255 }, // PLAYER_BOTTLE_FISH
+ { 136, 192, 255 }, // PLAYER_BOTTLE_SPRING_WATER
+ { 136, 192, 255 }, // PLAYER_BOTTLE_HOT_SPRING_WATER
+ { 184, 232, 232 }, // PLAYER_BOTTLE_ZORA_EGG
+ { 248, 200, 0 }, // PLAYER_BOTTLE_DEKU_PRINCESS
+ { 255, 180, 0 }, // PLAYER_BOTTLE_GOLD_DUST
+ { 0, 128, 0 }, // PLAYER_BOTTLE_1C
+ { 252, 238, 0 }, // PLAYER_BOTTLE_SEAHORSE
+ { 131, 0, 174 }, // PLAYER_BOTTLE_MUSHROOM
+ { 64, 64, 32 }, // PLAYER_BOTTLE_HYLIAN_LOACH
+ { 0, 0, 255 }, // PLAYER_BOTTLE_BUG
+ { 255, 0, 255 }, // PLAYER_BOTTLE_POE
+ { 255, 0, 255 }, // PLAYER_BOTTLE_BIG_POE
+ { 255, 0, 0 }, // PLAYER_BOTTLE_POTION_RED
+ { 0, 0, 255 }, // PLAYER_BOTTLE_POTION_BLUE
+ { 0, 200, 0 }, // PLAYER_BOTTLE_POTION_GREEN
+ { 255, 255, 255 }, // PLAYER_BOTTLE_MILK
+ { 255, 255, 255 }, // PLAYER_BOTTLE_MILK_HALF
+ { 255, 255, 255 }, // PLAYER_BOTTLE_CHATEAU
+ { 80, 80, 255 }, // PLAYER_BOTTLE_FAIRY
+};
+
+Vec3f D_801C0CE8[PLAYER_FORM_MAX] = {
+ { 0.0f, 0.0f, 0.0f }, // PLAYER_FORM_FIERCE_DEITY
+ { 300.0f, 300.0f, -230.0f }, // PLAYER_FORM_GORON
+ { 0.0f, 90.0f, -50.0f }, // PLAYER_FORM_ZORA
+ { 0.0f, 20.0f, -60.0f }, // PLAYER_FORM_DEKU
+ { 0.0f, 0.0f, 0.0f }, // PLAYER_FORM_HUMAN
+};
+
+void Player_DrawBunnyHood(PlayState* play) {
+ Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, 2 * sizeof(Mtx));
+ Vec3s earRot;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ gSPSegment(POLY_OPA_DISP++, 0x0B, mtx);
+
+ Matrix_Push();
+
+ earRot.x = sBunnyEarKinematics.rot.y + 0x3E2;
+ earRot.y = sBunnyEarKinematics.rot.z + 0xDBE;
+ earRot.z = sBunnyEarKinematics.rot.x - 0x348A;
+ Matrix_SetTranslateRotateYXZ(97.0f, -1203.0f, -240.0f, &earRot);
+
+ Matrix_ToMtx(mtx++);
+
+ earRot.x = sBunnyEarKinematics.rot.y - 0x3E2;
+ earRot.y = -sBunnyEarKinematics.rot.z - 0xDBE;
+ earRot.z = sBunnyEarKinematics.rot.x - 0x348A;
+ Matrix_SetTranslateRotateYXZ(97.0f, -1203.0f, 240.0f, &earRot);
+
+ Matrix_ToMtx(mtx);
+
+ Matrix_Pop();
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void func_80127B64(struct_801F58B0 arg0[], s32 count, Vec3f* arg2) {
+ s32 i;
+
+ for (i = 0; i < count; i++, arg0++) {
+ Math_Vec3f_Copy(&arg0->unk_00, arg2);
+ Math_Vec3f_Copy(&arg0->unk_0C, &gZeroVec3f);
+ arg0->unk_18 = 0;
+ arg0->unk_1A = 0;
+ }
+}
+
+// Draws the Great Fairy's Mask particles when a stray fairy is in the room
+void Player_DrawStrayFairyParticles(PlayState* play, Vec3f* arg1) {
+ Vec3f sp2C;
+ f32 sp28;
+
+ D_801C0BE0.y = Rand_ZeroFloat(0.07f) + -0.1f;
+ D_801C0BEC.y = Rand_ZeroFloat(0.1f) + 0.04f;
+ if (Rand_ZeroOne() < 0.5f) {
+ sp28 = -1.0f;
+ } else {
+ sp28 = 1.0f;
+ }
+
+ D_801C0BE0.x = (Rand_ZeroFloat(0.2f) + 0.1f) * sp28;
+ D_801C0BEC.x = 0.1f * sp28;
+ if (Rand_ZeroOne() < 0.5f) {
+ sp28 = -1.0f;
+ } else {
+ sp28 = 1.0f;
+ }
+
+ D_801C0BE0.z = (Rand_ZeroFloat(0.2f) + 0.1f) * sp28;
+ D_801C0BEC.z = 0.1f * sp28;
+ sp2C.x = arg1->x;
+ sp2C.y = Rand_ZeroFloat(15.0f) + arg1->y;
+ sp2C.z = arg1->z;
+ EffectSsKirakira_SpawnDispersed(play, &sp2C, &D_801C0BE0, &D_801C0BEC, &D_801C0BF8, &D_801C0BFC, -50, 11);
+}
+
+void func_80127DA4(PlayState* play, struct_801F58B0 arg1[], struct_80128388_arg1 arg2[], s32 arg3, Vec3f* arg4,
+ Vec3f* arg5, u32* arg6) {
+ struct_801F58B0* phi_s1 = &arg1[1];
+ Vec3f spB0;
+ Vec3f spA4;
+ f32 f22;
+ f32 f28;
+ f32 f24;
+ f32 f20;
+ f32 f0;
+ f32 sp8C = -1.0f;
+ s32 i;
+ s16 s0;
+ s16 s2;
+
+ Math_Vec3f_Copy(&arg1->unk_00, arg4);
+ Math_Vec3f_Diff(arg5, arg4, &spB0);
+ arg1->unk_18 = Math_Atan2S_XY(spB0.z, spB0.x);
+ arg1->unk_1A = Math_Atan2S_XY(sqrtf(SQXZ(spB0)), spB0.y);
+ i = 1;
+ arg2++;
+
+ while (i < arg3) {
+ if (play->actorCtx.flags & ACTORCTX_FLAG_3) {
+ if (*arg6 & 0x20) {
+ sp8C = -0.2f;
+ } else {
+ sp8C = 0.2f;
+ }
+
+ *arg6 += 0x16;
+ if (!(*arg6 & 1)) {
+ Player_DrawStrayFairyParticles(play, &phi_s1->unk_00);
+ }
+ }
+ Math_Vec3f_Sum(&phi_s1->unk_00, &phi_s1->unk_0C, &phi_s1->unk_00);
+
+ f0 = Math_Vec3f_DistXYZAndStoreDiff(&arg1->unk_00, &phi_s1->unk_00, &spB0);
+ f28 = f0 - arg2->unk_00;
+ if (f0 == 0.0f) {
+ spB0.x = 0.0f;
+ spB0.y = arg2->unk_00;
+ spB0.z = 0.0f;
+ }
+ f20 = sqrtf(SQXZ(spB0));
+
+ if (f20 > 4.0f) {
+ phi_s1->unk_18 = Math_Atan2S_XY(spB0.z, spB0.x);
+ s2 = phi_s1->unk_18 - arg1->unk_18;
+
+ if (ABS_ALT(s2) > 0x4000) {
+ phi_s1->unk_18 = (s16)(phi_s1->unk_18 + 0x8000);
+ f20 = -f20;
+ }
+ }
+
+ phi_s1->unk_1A = Math_Atan2S_XY(f20, spB0.y);
+
+ s2 = phi_s1->unk_18 - arg1->unk_18;
+ s2 = CLAMP(s2, -arg2->unk_18, arg2->unk_18);
+ phi_s1->unk_18 = arg1->unk_18 + s2;
+
+ s0 = phi_s1->unk_1A - arg1->unk_1A;
+ s0 = CLAMP(s0, -arg2->unk_1A, arg2->unk_1A);
+ phi_s1->unk_1A = arg1->unk_1A + s0;
+
+ f20 = Math_CosS(phi_s1->unk_1A) * arg2->unk_00;
+ spA4.x = Math_SinS(phi_s1->unk_18) * f20;
+ spA4.z = Math_CosS(phi_s1->unk_18) * f20;
+ spA4.y = Math_SinS(phi_s1->unk_1A) * arg2->unk_00;
+ Math_Vec3f_Sum(&arg1->unk_00, &spA4, &phi_s1->unk_00);
+ phi_s1->unk_0C.x *= 0.9f;
+ phi_s1->unk_0C.z *= 0.9f;
+
+ f22 = Math_CosS(s0) * f28;
+ f24 = Math_SinS(s0) * f28;
+ phi_s1->unk_0C.y += sp8C;
+
+ if (play->actorCtx.flags & ACTORCTX_FLAG_3) {
+ phi_s1->unk_0C.y = CLAMP(phi_s1->unk_0C.y, -0.8f, 0.8f);
+ } else {
+ phi_s1->unk_0C.y = phi_s1->unk_0C.y;
+ f20 = Math_SinS(arg1->unk_1A);
+ phi_s1->unk_0C.y += (((f22 * Math_CosS(arg1->unk_1A)) + (f24 * f20)) * 0.2f);
+ phi_s1->unk_0C.y = CLAMP(phi_s1->unk_0C.y, -2.0f, 4.0f);
+ }
+
+ f20 = (f24 * Math_CosS(arg1->unk_1A)) - (Math_SinS(arg1->unk_1A) * f22);
+ f22 = Math_CosS(s2) * f20;
+ f24 = Math_SinS(s2) * f20;
+
+ f20 = Math_SinS(arg1->unk_18);
+
+ phi_s1->unk_0C.x += (((f24 * Math_CosS(arg1->unk_18)) - (f22 * f20)) * 0.1f);
+ phi_s1->unk_0C.x = CLAMP(phi_s1->unk_0C.x, -4.0f, 4.0f);
+
+ f20 = Math_SinS(arg1->unk_18);
+
+ phi_s1->unk_0C.z += (((f22 * Math_CosS(arg1->unk_18)) + (f24 * f20)) * -0.1f);
+ phi_s1->unk_0C.z = CLAMP(phi_s1->unk_0C.z, -4.0f, 4.0f);
+
+ arg1++;
+ phi_s1++;
+ i++;
+ arg2++;
+ }
+}
+
+void func_80128388(struct_801F58B0 arg0[], struct_80128388_arg1 arg1[], s32 arg2, Mtx** arg3) {
+ struct_801F58B0* phi_s1 = &arg0[1];
+ Vec3f sp58;
+ Vec3s sp50;
+ s32 i;
+
+ sp58.y = 0.0f;
+ sp58.z = 0.0f;
+ sp50.x = 0;
+
+ for (i = 1; i < arg2; i++) {
+ sp58.x = arg1->unk_00 * 100.0f;
+ sp50.z = arg1->unk_06 + (s16)(phi_s1->unk_1A - arg0->unk_1A);
+ sp50.y = arg1->unk_04 + (s16)(phi_s1->unk_18 - arg0->unk_18);
+ Matrix_TranslateRotateZYX(&sp58, &sp50);
+ Matrix_ToMtx(*arg3);
+ (*arg3)++;
+ arg0++;
+ phi_s1++;
+ arg1++;
+ }
+}
+
+void Player_DrawGreatFairysMask(PlayState* play, Player* player) {
+ s32 pad;
+ Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, 6 * sizeof(Mtx));
+ Vec3f sp84;
+ Vec3f sp78;
+ Vec3f* iter = D_801C0C0C;
+ Vec3f* iter2 = D_801C0C30;
+ u32 sp6C = play->gameplayFrames;
+ s32 i;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ gSPSegment(POLY_OPA_DISP++, 0x0B, mtx);
+
+ Matrix_MultVec3f(&D_801C0C00, &D_801C0C54[1].unk_08);
+ Math_Vec3f_Lerp(&player->bodyPartsPos[PLAYER_BODYPART_HEAD], &player->bodyPartsPos[PLAYER_BODYPART_WAIST], 0.2f,
+ &D_801C0C54[2].unk_08);
+
+ for (i = 0; i < ARRAY_COUNT(D_801C0C0C); i++) {
+ Matrix_MultVec3f(iter, &sp84);
+ Matrix_MultVec3f(iter2, &sp78);
+
+ func_80127DA4(play, D_801F58B0[i], D_801C0C54, 3, &sp84, &sp78, &sp6C);
+ sp6C += 11;
+
+ Matrix_Push();
+ Matrix_Translate(iter->x, iter->y, iter->z, MTXMODE_APPLY);
+ func_80128388(D_801F58B0[i], D_801C0C54, 3, &mtx);
+ Matrix_Pop();
+ iter++;
+ iter2++;
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+s32 func_80128640(PlayState* play, Player* player, Gfx* dlist) {
+ s32 temp_v1 = player->skelAnime.animation == &gPlayerAnim_cl_maskoff;
+ f32 temp_f0;
+
+ if (temp_v1 ||
+ ((player->currentMask != PLAYER_MASK_NONE) && (player->skelAnime.animation == &gPlayerAnim_cl_setmask) &&
+ (temp_f0 = player->skelAnime.curFrame - 8.0f, (temp_f0 >= 0.0f)) && (temp_f0 < 4.0f)) ||
+ (player->stateFlags2 & PLAYER_STATE2_1000000)) {
+ s32 mask;
+
+ if (temp_v1) {
+ mask = player->prevMask;
+ } else {
+ mask = player->currentMask;
+ }
+
+ if (func_80127438(play, player, mask)) {
+ OPEN_DISPS(play->state.gfxCtx);
+
+ Matrix_Push();
+ Matrix_Translate(-323.67f, 412.15f, -969.96f, MTXMODE_APPLY);
+ Matrix_RotateZYX(-0x32BE, -0x50DE, -0x7717, MTXMODE_APPLY);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ gSPDisplayList(POLY_OPA_DISP++, D_801C0B20[mask - 1]);
+
+ Matrix_Pop();
+
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+
+ } else if (player->itemAction == PLAYER_IA_STICK) {
+ OPEN_DISPS(play->state.gfxCtx);
+
+ 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);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gDekuStickDL);
+
+ Matrix_Pop();
+
+ CLOSE_DISPS(play->state.gfxCtx);
+ } else if (player->leftHandType == PLAYER_MODELTYPE_LH_BOTTLE) {
+ PlayerBottle bottle = Player_BottleFromIA(player, player->itemAction);
+ Vec3f* temp_v1_2 = &D_801C0CE8[player->transformation];
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ Matrix_Push();
+ Matrix_Translate(temp_v1_2->x, temp_v1_2->y, temp_v1_2->z, MTXMODE_APPLY);
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ // Note this does not check for PLAYER_BOTTLE_NONE, which would produce an OoB access on sPlayerBottleColors.
+ // Under normal circunstances it should not be a problem because of the previous
+ // `player->leftHandType == PLAYER_MODELTYPE_LH_BOTTLE` check
+ if (bottle != PLAYER_BOTTLE_EMPTY) {
+ Color_RGB8* bottleColor = &sPlayerBottleColors[bottle];
+
+ gDPSetEnvColor(POLY_XLU_DISP++, bottleColor->r, bottleColor->g, bottleColor->b, 0);
+ gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_000320);
+ }
+
+ gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_0003E0);
+
+ Matrix_Pop();
+
+ CLOSE_DISPS(play->state.gfxCtx);
+ } else if (dlist == object_link_zora_DL_00E2A0) { // zora guitar
+ s16 sp26 = Math_SinS(player->unk_B86[0]) * (ABS_ALT(player->upperLimbRot.x) * ((f32)(IREG(52) + 20)) / 100.0f);
+ s16 sp24 = Math_SinS(player->unk_B86[1]) * (ABS_ALT(player->upperLimbRot.y) * ((f32)(IREG(53) + 15)) / 100.0f);
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ Matrix_Push();
+ Matrix_RotateXS(sp26, MTXMODE_APPLY);
+ Matrix_RotateYS(sp24, 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_zora_DL_00E088); // hand
+
+ Matrix_Pop();
+
+ CLOSE_DISPS(play->state.gfxCtx);
+ } else {
+ return false;
+ }
+
+ return true;
+}
+
+Vec3f sPlayerFootPos[PLAYER_FORM_MAX] = {
+ { 200.0f, 300.0f, 0.0f }, // PLAYER_FORM_FIERCE_DEITY
+ { 200.0f, 200.0f, 0.0f }, // PLAYER_FORM_GORON
+ { 200.0f, 300.0f, 0.0f }, // PLAYER_FORM_ZORA
+ { 200.0f, 150.0f, 0.0f }, // PLAYER_FORM_DEKU
+ { 200.0f, 200.0f, 0.0f }, // PLAYER_FORM_HUMAN
+};
+
+void Player_SetFeetPos(PlayState* play, Player* player, s32 limbIndex) {
+ Vec3f* footPos = &sPlayerFootPos[player->transformation];
+
+ Actor_SetFeetPos(&player->actor, limbIndex, PLAYER_LIMB_LEFT_FOOT, footPos, PLAYER_LIMB_RIGHT_FOOT, footPos);
+}
+
+void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dList2, Vec3s* rot, Actor* actor) {
+ Player* player = (Player*)actor;
+
+ if (*dList2 != NULL) {
+ Matrix_MultZero(sPlayerCurBodyPartPos);
+ }
+
+ if (limbIndex == PLAYER_LIMB_LEFT_HAND) {
+ Math_Vec3f_Copy(&player->leftHandWorld.pos, sPlayerCurBodyPartPos);
+
+ if ((*dList1 != NULL) && !func_801271B0(play, player, 0) && !func_80128640(play, player, *dList1) &&
+ (player->skelAnime.animation == &gPlayerAnim_pg_punchA)) {
+ func_80127488(play, player, D_801C0778[(s32)player->skelAnime.curFrame]);
+ }
+
+ if (player->actor.scale.y >= 0.0f) {
+ Actor* heldActor;
+ MtxF sp230;
+
+ if (!Player_IsHoldingHookshot(player) && ((heldActor = player->heldActor) != NULL)) {
+ if ((player->stateFlags3 & PLAYER_STATE3_40) && (player->transformation != PLAYER_FORM_DEKU)) {
+ static Vec3f D_801C0D60 = { 398.0f, 1419.0f, 244.0f };
+ static Vec3f D_801C0D6C = { 420.0f, 1210.0f, 380.0f };
+ Vec3s* temp_s1;
+ Vec3f* var_a0 = &D_801C0D60;
+
+ if (player->transformation == PLAYER_FORM_HUMAN) {
+ var_a0 = &D_801C0D6C;
+ }
+
+ Matrix_MultVec3f(var_a0, &heldActor->world.pos);
+ Matrix_RotateZYX(0x69E8, -0x5708, 0x458E, MTXMODE_APPLY);
+
+ Matrix_Get(&sp230);
+ temp_s1 = &heldActor->world.rot;
+ Matrix_MtxFToYXZRot(&sp230, temp_s1, false);
+ heldActor->shape.rot = *temp_s1;
+ } else if (player->stateFlags1 & PLAYER_STATE1_800) {
+ heldActor->world.rot.y = heldActor->shape.rot.y =
+ player->actor.shape.rot.y + player->leftHandWorld.rot.y;
+ }
+ } else {
+ static f32 sMeleeWeaponLengths[PLAYER_MELEEWEAPON_MAX] = {
+ 0.0f, // PLAYER_MELEEWEAPON_NONE
+ 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
+ -1.0f, // PLAYER_MELEEWEAPON_STICK
+ 2500.0f, // PLAYER_MELEEWEAPON_ZORA_FINS
+ };
+
+ if ((player->transformation == PLAYER_FORM_FIERCE_DEITY) ||
+ ((player->transformation != PLAYER_FORM_ZORA) &&
+ ((player->itemAction == PLAYER_IA_STICK) ||
+ ((player->meleeWeaponState != 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;
+ } 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);
+ }
+ }
+ } else if (limbIndex == PLAYER_LIMB_RIGHT_HAND) {
+ Actor* heldActor = player->heldActor;
+ s32 pad;
+
+ if (*dList1 != NULL) {
+ if (player->rightHandType == PLAYER_MODELTYPE_RH_BOW) {
+ static Gfx* D_801C0D94 = object_link_child_DL_017818;
+ static Vec3f D_801C0D98 = { -35.0f, -395.0f, 0.0f };
+ // Unused
+ static s32 D_801C0DA4 = 0;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ Matrix_Push();
+ Matrix_Translate(D_801C0D98.x, D_801C0D98.y, D_801C0D98.z, MTXMODE_APPLY);
+ if ((player->stateFlags3 & PLAYER_STATE3_40) && (player->unk_B28 >= 0) && (player->unk_ACC < 0xB)) {
+ Vec3f sp20C;
+ f32 temp_fv0;
+ s32 pad2;
+
+ Matrix_MultZero(&sp20C);
+ temp_fv0 = Math_Vec3f_DistXYZ(sPlayerCurBodyPartPos, &sp20C);
+ player->unk_B08[0] = temp_fv0 - 3.0f;
+ if (temp_fv0 < 3.0f) {
+ player->unk_B08[0] = 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] = -0.5f;
+ }
+ Matrix_Scale(1.0f, player->unk_B08[0], 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++, D_801C0D94);
+
+ Matrix_Pop();
+
+ CLOSE_DISPS(play->state.gfxCtx);
+ } else if (player->skelAnime.animation == &gPlayerAnim_pg_punchB) {
+ func_80127488(play, player, D_801C07AC[(s32)player->skelAnime.curFrame]);
+ } else {
+ func_801271B0(play, player, 1);
+ }
+ }
+
+ if (player->actor.scale.y >= 0.0f) {
+ if (player->rightHandType == PLAYER_MODELTYPE_RH_FF) {
+ Matrix_Get(&player->shieldMf);
+ } else if (player->rightHandType == PLAYER_MODELTYPE_RH_SHIELD) {
+ // Coordinates of the shield quad collider vertices, in the right hand limb's own model space.
+ static Vec3f sRightHandLimbModelShieldQuadVertices[4] = {
+ { -4500.0f, -3000.0f, -600.0f },
+ { 1500.0f, -3000.0f, -600.0f },
+ { -4500.0f, 3000.0f, -600.0f },
+ { 1500.0f, 3000.0f, -600.0f },
+ };
+
+ Matrix_Get(&player->shieldMf);
+ Player_UpdateShieldCollider(play, player, &player->shieldQuad, sRightHandLimbModelShieldQuadVertices);
+ } else if (player->rightHandType == PLAYER_MODELTYPE_RH_HOOKSHOT) {
+ static Vec3f D_801C0DD8 = { 50.0f, 800.0f, 0.0f };
+
+ Matrix_MultVec3f(&D_801C0DD8, &player->rightHandWorld.pos);
+
+ if (heldActor != NULL) {
+ static Vec3f D_801C0DE4 = { 50.0f, 850.0f, 0.0f };
+ MtxF sp1BC;
+
+ Matrix_MultVec3f(&D_801C0DE4, &heldActor->world.pos);
+ Matrix_RotateZYX(0, -0x4000, -0x4000, MTXMODE_APPLY);
+ Matrix_Get(&sp1BC);
+ Matrix_MtxFToYXZRot(&sp1BC, &heldActor->world.rot, false);
+ heldActor->shape.rot = heldActor->world.rot;
+ if (func_800B7128(player)) {
+ Matrix_Translate(500.0f, 300.0f, 0.0f, MTXMODE_APPLY);
+ Player_DrawHookshotReticle(play, player, 77600.0f);
+ }
+ }
+ } else if (player->meleeWeaponState != 0) {
+ if (player->meleeWeaponAnimation == PLAYER_MWA_GORON_PUNCH_RIGHT) {
+ func_80126B8C(play, player);
+ }
+ }
+ if ((player->getItemDrawIdPlusOne != (GID_NONE + 1)) ||
+ ((func_800B7118(player) == 0) && (heldActor != NULL))) {
+ if (!(player->stateFlags1 & PLAYER_STATE1_400) && (player->getItemDrawIdPlusOne != (GID_NONE + 1)) &&
+ (player->exchangeItemId != PLAYER_IA_NONE)) {
+ Math_Vec3f_Copy(&sPlayerGetItemRefPos, &player->leftHandWorld.pos);
+ } else {
+ sPlayerGetItemRefPos.x =
+ (player->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].x + player->leftHandWorld.pos.x) * 0.5f;
+ sPlayerGetItemRefPos.y =
+ (player->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].y + player->leftHandWorld.pos.y) * 0.5f;
+ sPlayerGetItemRefPos.z =
+ (player->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].z + player->leftHandWorld.pos.z) * 0.5f;
+ }
+
+ if (player->getItemDrawIdPlusOne == (GID_NONE + 1)) {
+ Math_Vec3f_Copy(&heldActor->world.pos, &sPlayerGetItemRefPos);
+ }
+ }
+ }
+ } else if (limbIndex == PLAYER_LIMB_LEFT_FOREARM) {
+ func_80126BD0(play, player, 0);
+ } else if (limbIndex == PLAYER_LIMB_RIGHT_FOREARM) {
+ func_80126BD0(play, player, 1);
+ } else if (limbIndex == PLAYER_LIMB_TORSO) {
+ if (player->transformation == PLAYER_FORM_GORON) {
+ s32 temp_a0 = player->skelAnime.animation == &gPlayerAnim_pg_gakkistart;
+ s32 temp_v1_3 = player->skelAnime.animation == &gPlayerAnim_pg_gakkiwait;
+
+ if ((temp_a0 || temp_v1_3 || (player->skelAnime.animation == &gPlayerAnim_pg_gakkiplay))) {
+ static Gfx* D_801C0DF0[] = {
+ object_link_goron_DL_010590, object_link_goron_DL_010368, object_link_goron_DL_010140,
+ object_link_goron_DL_00FF18, object_link_goron_DL_00FCF0,
+ };
+ Vec3f sp178[ARRAY_COUNT(D_801C0DF0)];
+ s32 i;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ if (temp_v1_3) {
+ f32* var_v0 = player->unk_B10;
+
+ for (i = 0; i < ARRAY_COUNT(sp178); i++, var_v0++) {
+ func_80124618(D_801C0510, *var_v0, &sp178[i]);
+ }
+ } else {
+ if (temp_a0 != 0) {
+ func_8012536C();
+ func_80124618(D_801C0428, player->skelAnime.curFrame, &player->unk_AF0[1]);
+ }
+
+ for (i = 0; i < ARRAY_COUNT(sp178); i++) {
+ Math_Vec3f_Copy(&sp178[i], &player->unk_AF0[1]);
+ }
+ }
+ Matrix_Push();
+ Matrix_Scale(player->unk_AF0[1].x, player->unk_AF0[1].y, player->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++, object_link_goron_DL_00FC18);
+
+ Matrix_Pop();
+
+ 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);
+
+ gSPDisplayList(POLY_OPA_DISP++, D_801C0DF0[i]);
+ Matrix_Pop();
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
+ } else if (limbIndex == PLAYER_LIMB_HEAD) {
+ //! FAKE
+ if (((*dList1 != NULL) && ((((void)0, player->currentMask)) != (((void)0, PLAYER_MASK_NONE)))) &&
+ (((player->transformation == PLAYER_FORM_HUMAN) &&
+ ((player->skelAnime.animation != &gPlayerAnim_cl_setmask) || (player->skelAnime.curFrame >= 12.0f))) ||
+ ((((player->transformation != PLAYER_FORM_HUMAN) && (player->currentMask >= PLAYER_MASK_FIERCE_DEITY)) &&
+ ((player->transformation + PLAYER_MASK_FIERCE_DEITY) != player->currentMask)) &&
+ (player->skelAnime.curFrame >= 10.0f)))) {
+ if (func_80127438(play, player, player->currentMask)) {
+ s32 maskMinusOne = ((void)0, player->currentMask) - 1;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ if (((void)0, player->currentMask) == PLAYER_MASK_COUPLE) {
+ Player_DrawCouplesMask(play, player);
+ } else if (((void)0, player->currentMask) == PLAYER_MASK_CIRCUS_LEADER) {
+ Player_DrawCircusLeadersMask(play, player);
+ } else if (((void)0, player->currentMask) == PLAYER_MASK_BLAST) {
+ Player_DrawBlastMask(play, player);
+ } else if (((void)0, player->currentMask) == PLAYER_MASK_BUNNY) {
+ Player_DrawBunnyHood(play);
+ } else if (((void)0, player->currentMask) == PLAYER_MASK_GREAT_FAIRY) {
+ Player_DrawGreatFairysMask(play, player);
+ } else if (((void)0, player->currentMask) >= PLAYER_MASK_FIERCE_DEITY) {
+ static Vec2f D_801C0E04[PLAYER_FORM_MAX] = {
+ { 140.0f, -130.0f }, // PLAYER_FORM_FIERCE_DEITY
+ { 0.0f, -200.0f }, // PLAYER_FORM_GORON
+ { -160.0f, 0.0f }, // PLAYER_FORM_ZORA
+ { 220.0f, -200.0f }, // PLAYER_FORM_DEKU
+ { 0.0f, 0.0f }, // PLAYER_FORM_HUMAN
+ };
+ Vec2f* temp_s0_4 = &D_801C0E04[player->transformation];
+
+ Matrix_Push();
+ Matrix_Translate(temp_s0_4->x, temp_s0_4->z, 0.0f, MTXMODE_APPLY);
+ Matrix_Scale(1.0f, 1.0f - player->unk_B10[3], 1.0f - player->unk_B10[2], MTXMODE_APPLY);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx),
+ G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ Matrix_Pop();
+
+ if (((player->skelAnime.animation == &gPlayerAnim_cl_setmask) &&
+ (player->skelAnime.curFrame >= 51.0f)) ||
+ (player->skelAnime.animation == &gPlayerAnim_cl_setmaskend)) {
+ maskMinusOne += 4;
+ }
+ }
+
+ gSPDisplayList(POLY_OPA_DISP++, D_801C0B20[maskMinusOne]);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ } else if (player->transformation == PLAYER_FORM_DEKU) {
+ if (player->skelAnime.animation == &gPlayerAnim_pn_gurd) {
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_80124618(D_801C0410, player->skelAnime.curFrame, player->unk_AF0);
+ Matrix_Push();
+
+ Matrix_Scale(player->unk_AF0[0].x, player->unk_AF0[0].y, player->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_nuts_DL_00A348);
+
+ Matrix_Pop();
+
+ CLOSE_DISPS(play->state.gfxCtx);
+ } else {
+ s32 temp_v1_5 = player->skelAnime.animation == &gPlayerAnim_pn_gakkistart;
+
+ if (temp_v1_5 || (player->skelAnime.animation == &gPlayerAnim_pn_gakkiplay) ||
+ (player->skelAnime.animation == &gPlayerAnim_dl_kokeru)) {
+ static Gfx* D_801C0E2C[] = {
+ object_link_nuts_DL_007A28, object_link_nuts_DL_0077D0, object_link_nuts_DL_007548,
+ object_link_nuts_DL_007900, object_link_nuts_DL_0076A0,
+ };
+ Vec3f spF0[ARRAY_COUNT(D_801C0E2C)];
+ s32 i;
+ f32* temp;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ if (temp_v1_5) {
+ Vec3f spD4;
+
+ func_80124618(D_801C0340, player->skelAnime.curFrame, &spD4);
+ player->arr_AF0[0] = spD4.x;
+ func_80124618(D_801C0368, player->skelAnime.curFrame, spF0);
+
+ for (i = 0; i < ARRAY_COUNT(spF0) - 1; i++) {
+ Math_Vec3f_Copy(&spF0[i + 1], spF0);
+ }
+
+ temp = &player->arr_AF0[1];
+ for (i = 0; i < ARRAY_COUNT(spF0); i++) {
+ *temp = spF0[0].x;
+ temp++;
+ }
+ } else {
+ temp = &player->arr_AF0[1];
+ for (i = 0; i < ARRAY_COUNT(spF0); i++) {
+ spF0[i].x = *temp;
+ spF0[i].y = *temp;
+ spF0[i].z = *temp;
+ temp++;
+ }
+ }
+
+ Matrix_Push();
+ Matrix_Scale(player->arr_AF0[0], player->arr_AF0[0], player->arr_AF0[0], 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_nuts_DL_007390);
+
+ Matrix_Pop();
+
+ for (i = 0; i < ARRAY_COUNT(spF0); i++) {
+ Matrix_Push();
+
+ Matrix_Scale(spF0[i].x, spF0[i].y, spF0[i].z, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx),
+ G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ //! FAKE (yes, all of them are required)
+ // https://decomp.me/scratch/AdU3G
+ if (1) {}
+ if (1) {}
+ if (1) {}
+ if (1) {}
+ if (1) {}
+ if (1) {}
+ gSPDisplayList(POLY_OPA_DISP++, D_801C0E2C[i]);
+
+ Matrix_Pop();
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ }
+ }
+
+ if ((player->stateFlags1 & (PLAYER_STATE1_2 | PLAYER_STATE1_100)) && (player->unk_AE8 != 0)) {
+ static Vec3f D_801C0E40[PLAYER_FORM_MAX] = {
+ { 0.0f, 0.0f, 0.0f }, // PLAYER_FORM_FIERCE_DEITY
+ { -578.3f, -1100.9f, 0.0f }, // PLAYER_FORM_GORON
+ { -189.5f, -594.87f, 0.0f }, // PLAYER_FORM_ZORA
+ { -570.0f, -812.0f, 0.0f }, // PLAYER_FORM_DEKU
+ { -230.0f, -520.0f, 0.0f }, // PLAYER_FORM_HUMAN
+ };
+ Vec3f* temp_s0_7 = &D_801C0E40[player->transformation];
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ Matrix_Push();
+ AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(gameplay_keep_Matanimheader_054F18));
+ Matrix_Translate(temp_s0_7->x, temp_s0_7->y, 0.0f, MTXMODE_APPLY);
+ if (player->transformation == PLAYER_FORM_ZORA) {
+ Matrix_Scale(0.7f, 0.7f, 0.7f, 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, 0, 255, (u8)player->unk_AE8);
+ gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_054C90);
+
+ Matrix_Pop();
+
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ if (player->actor.scale.y >= 0.0f) {
+ static Vec3f sPlayerFocusHeadLimbModelPos = { 1100.0f, -700.0f, 0.0f };
+ static Vec3f D_801C0E88 = { 1600.0f, -1700.0f, -70.0f }; // unused
+ Actor* spA8 = NULL;
+
+ if (player->transformation != PLAYER_FORM_DEKU) {
+ Matrix_MultVec3f(&sPlayerFocusHeadLimbModelPos, &player->actor.focus.pos);
+ } else {
+ static Vec3f D_801C0E94 = { 1800.0f, -300.0f, 0.0f };
+
+ Matrix_MultVec3f(&sPlayerFocusHeadLimbModelPos, &player->actor.focus.pos);
+ Matrix_MultVec3f(&D_801C0E94, sPlayerCurBodyPartPos);
+ if ((player->skelAnime.animation == &gPlayerAnim_pn_drinkend) ||
+ (player->unk_284.animation == &gPlayerAnim_pn_tamahaki) ||
+ ((player->stateFlags3 & PLAYER_STATE3_40) && ((spA8 = player->heldActor) != NULL))) {
+ if (spA8 != NULL) {
+ static Vec3f D_801C0EA0 = { 1300.0f, -400.0f, 0.0f };
+ MtxF sp68;
+
+ Matrix_Push();
+ Matrix_MultVec3f(&D_801C0EA0, &spA8->world.pos);
+ Matrix_RotateZYX(0, 0x4000, 0, MTXMODE_APPLY);
+ Matrix_Get(&sp68);
+ Matrix_MtxFToYXZRot(&sp68, &spA8->world.rot, false);
+ spA8->shape.rot = spA8->world.rot;
+ Matrix_Pop();
+ }
+ }
+ }
+ }
+ } else if ((limbIndex == PLAYER_LIMB_HAT) && (player->stateFlags3 & PLAYER_STATE3_100000)) {
+ Vec3f sp5C;
+ Vec3f sp50;
+
+ Matrix_MultVecX(3000.0f, &sp5C);
+ Matrix_MultVecX(2300.0f, &sp50);
+ if (func_80126440(play, NULL, player->meleeWeaponInfo, &sp5C, &sp50)) {
+ EffectBlure_AddVertex(Effect_GetByIndex(player->meleeWeaponEffectIndex[0]), &player->meleeWeaponInfo[0].tip,
+ &player->meleeWeaponInfo[0].base);
+ }
+ } else if (limbIndex == PLAYER_LIMB_RIGHT_SHIN) {
+ if (player->meleeWeaponState != 0) {
+ if ((player->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_KICK) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_ZORA_JUMPKICK_START) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_ZORA_JUMPKICK_FINISH)) {
+ func_8012669C(play, player, D_801C0A48, D_801C0A24);
+ }
+ }
+ } else if (limbIndex == PLAYER_LIMB_WAIST) {
+ if (player->meleeWeaponState != 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);
+ }
+ }
+ } else if (limbIndex == PLAYER_LIMB_SHEATH) {
+ if ((*dList1 != NULL) && (player->transformation == PLAYER_FORM_HUMAN) &&
+ (player->currentShield != PLAYER_SHIELD_NONE) &&
+ ((player->sheathType == PLAYER_MODELTYPE_SHEATH_14) ||
+ (player->sheathType == PLAYER_MODELTYPE_SHEATH_15))) {
+ OPEN_DISPS(play->state.gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, gPlayerShields[2 * ((player->currentShield - 1) ^ 0)]);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+
+ if (player->actor.scale.y >= 0.0f) {
+ if ((player->rightHandType != PLAYER_MODELTYPE_RH_SHIELD) &&
+ (player->rightHandType != PLAYER_MODELTYPE_RH_FF)) {
+ static Vec3f sSheathLimbModelShieldOnBackPos = { 630.0f, 100.0f, -30.0f };
+ static Vec3s sSheathLimbModelShieldOnBackZyxRot = { 0, 0, 0x7FFF };
+
+ Matrix_TranslateRotateZYX(&sSheathLimbModelShieldOnBackPos, &sSheathLimbModelShieldOnBackZyxRot);
+ Matrix_Get(&player->shieldMf);
+ }
+ }
+ } else if (player->actor.scale.y >= 0.0f) {
+ Player_SetFeetPos(play, player, limbIndex);
+ }
+
+ func_8012536C();
+}
diff --git a/src/code/z_quake.c b/src/code/z_quake.c
index 964935ea1..d8d526ca3 100644
--- a/src/code/z_quake.c
+++ b/src/code/z_quake.c
@@ -477,13 +477,13 @@ void Distortion_ClearType(s32 type) {
/**
* Checks that the bg surface is an underwater conveyor type and if so, returns the conveyor speed
*/
-s32 Distortion_GetUnderwaterCurrentSpeed(Player* player) {
+ConveyorSpeed Distortion_GetUnderwaterCurrentSpeed(Player* player) {
if (!SurfaceType_IsFloorConveyor(&sDistortionRequest.play->colCtx, player->actor.floorPoly,
player->actor.floorBgId)) {
return SurfaceType_GetConveyorSpeed(&sDistortionRequest.play->colCtx, player->actor.floorPoly,
player->actor.floorBgId);
}
- return 0;
+ return CONVEYOR_SPEED_DISABLED;
}
void Distortion_Update(void) {
@@ -668,7 +668,7 @@ void Distortion_Update(void) {
zScaleFactor = 1.0f;
xyScaleFactor = 1.0f;
speedScaleFactor = 1.0f;
- } else if (sDistortionRequest.type & DISTORTION_TYPE_4) {
+ } else if (sDistortionRequest.type & DISTORTION_TYPE_UNDERWATER_ENTRY) {
if (sDistortionRequest.state == DISTORTION_SETUP) {
countdownMax = sDistortionRequest.countdown;
depthPhase = 0x760;
@@ -690,7 +690,7 @@ void Distortion_Update(void) {
countdownRatio = sDistortionRequest.countdown / (f32)countdownMax;
zScaleFactor = xyScaleFactor = countdownRatio;
speedScaleFactor = 1.0f;
- } else if (sDistortionRequest.type & DISTORTION_TYPE_3) {
+ } else if (sDistortionRequest.type & DISTORTION_TYPE_ZORA_SWIMMING) {
depthPhase = 0x3F0;
screenPlanePhase = 0x156;
@@ -709,21 +709,21 @@ void Distortion_Update(void) {
rotZ = 0.3f;
switch (Distortion_GetUnderwaterCurrentSpeed(player)) {
- case 3:
+ case CONVEYOR_SPEED_FAST:
xScale = -0.06f;
yScale = 0.1f;
zScale = 0.03f;
speed = 0.33f;
break;
- case 2:
+ case CONVEYOR_SPEED_MEDIUM:
xScale = -0.06f;
yScale = 0.1f;
zScale = 0.03f;
speed = 0.33f;
break;
- case 1:
+ case CONVEYOR_SPEED_SLOW:
xScale = -0.06f;
yScale = 0.1f;
zScale = 0.03f;
@@ -738,14 +738,14 @@ void Distortion_Update(void) {
break;
}
- if (player->unk_B88 < 0) {
- xyScaleFactor = (player->unk_B88 - (f32)0x4000) / (f32)0xC000;
+ if (player->unk_B86[1] < 0) {
+ xyScaleFactor = (player->unk_B86[1] - (f32)0x4000) / (f32)0xC000;
} else {
- xyScaleFactor = (player->unk_B88 + (f32)0x4000) / (f32)0xC000;
+ xyScaleFactor = (player->unk_B86[1] + (f32)0x4000) / (f32)0xC000;
}
zScaleFactor = -xyScaleFactor;
speedScaleFactor = 1.0f;
- } else if (sDistortionRequest.type & DISTORTION_TYPE_2) {
+ } else if (sDistortionRequest.type & DISTORTION_TYPE_NON_ZORA_SWIMMING) {
depthPhase = 0x3F0;
screenPlanePhase = 0x156;
@@ -759,21 +759,21 @@ void Distortion_Update(void) {
rotY = 0.0f;
rotZ = 0.0f;
switch (Distortion_GetUnderwaterCurrentSpeed(player)) {
- case 3:
+ case CONVEYOR_SPEED_FAST:
xScale = 0.12f;
yScale = 0.12f;
zScale = 0.08f;
speed = 0.18f;
break;
- case 2:
+ case CONVEYOR_SPEED_MEDIUM:
xScale = 0.12f;
yScale = 0.12f;
zScale = 0.08f;
speed = 0.12f;
break;
- case 1:
+ case CONVEYOR_SPEED_SLOW:
xScale = 0.12f;
yScale = 0.12f;
zScale = 0.08f;
@@ -825,9 +825,9 @@ void Distortion_Update(void) {
screenPlanePhase += CAM_DEG_TO_BINANG(screenPlanePhaseStep);
View_SetDistortionOrientation(&sDistortionRequest.play->view,
- Math_CosS(depthPhase) * (DEGF_TO_RADF(rotX) * xyScaleFactor),
- Math_SinS(depthPhase) * (DEGF_TO_RADF(rotY) * xyScaleFactor),
- Math_SinS(screenPlanePhase) * (DEGF_TO_RADF(rotZ) * zScaleFactor));
+ Math_CosS(depthPhase) * (DEG_TO_RAD(rotX) * xyScaleFactor),
+ Math_SinS(depthPhase) * (DEG_TO_RAD(rotY) * xyScaleFactor),
+ Math_SinS(screenPlanePhase) * (DEG_TO_RAD(rotZ) * zScaleFactor));
View_SetDistortionScale(&sDistortionRequest.play->view,
(Math_SinS(screenPlanePhase) * (xScale * xyScaleFactor)) + 1.0f,
(Math_CosS(screenPlanePhase) * (yScale * xyScaleFactor)) + 1.0f,
diff --git a/src/code/z_rcp.c b/src/code/z_rcp.c
index ace1cc4cd..b4bb6ea7d 100644
--- a/src/code/z_rcp.c
+++ b/src/code/z_rcp.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
Gfx sSetupDL[438] = {
/* 0x00 */
@@ -777,19 +778,19 @@ Gfx* Gfx_SetFog(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f) {
if (n >= 997) {
if (n >= 1000) {
- gSPFogFactor(gfx + 1, 0, 0); // gSPFogPosition(gfx++, ?, ?)
+ gSPFogFactor(&gfx[1], 0, 0); // gSPFogPosition(gfx++, ?, ?)
} else {
- gSPFogFactor(gfx + 1, 0x7FFF, 0x8100); // gSPFogPosition(gfx++, ?, ?)
+ gSPFogFactor(&gfx[1], 0x7FFF, 0x8100); // gSPFogPosition(gfx++, ?, ?)
}
} else {
if (n < 0) {
- gSPFogFactor(gfx + 1, 0, 255); // gSPFogPosition(gfx++, ?, ?)
+ gSPFogFactor(&gfx[1], 0, 255); // gSPFogPosition(gfx++, ?, ?)
} else {
- gSPFogPosition(gfx + 1, n, f);
+ gSPFogPosition(&gfx[1], n, f);
}
}
- return gfx + 2;
+ return &gfx[2];
}
Gfx* Gfx_SetFogWithSync(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f) {
@@ -1107,13 +1108,13 @@ void func_8012CA38(GraphicsContext* gfxCtx) {
}
Gfx* Gfx_BranchTexScroll(Gfx** gfxp, u32 x, u32 y, s32 width, s32 height) {
- Gfx* displayList = Graph_DlistAlloc(gfxp, 3 * sizeof(Gfx));
+ Gfx* gfx = Graph_DlistAlloc(gfxp, 3 * sizeof(Gfx));
- gDPTileSync(displayList);
- gDPSetTileSize(displayList + 1, 0, x, y, (x + ((width - 1) << 2)), (y + ((height - 1) << 2)));
- gSPEndDisplayList(displayList + 2);
+ gDPTileSync(&gfx[0]);
+ gDPSetTileSize(&gfx[1], 0, x, y, (x + ((width - 1) << 2)), (y + ((height - 1) << 2)));
+ gSPEndDisplayList(&gfx[2]);
- return displayList;
+ return gfx;
}
void func_8012CB04(Gfx** gfxp, u32 x, u32 y) {
@@ -1125,101 +1126,71 @@ Gfx* func_8012CB28(GraphicsContext* gfxCtx, u32 x, u32 y) {
}
Gfx* Gfx_TexScroll(GraphicsContext* gfxCtx, u32 x, u32 y, s32 width, s32 height) {
- Gfx* displayList;
-
- {
- Gfx* _g = (Gfx*)gfxCtx->polyOpa.d - 4;
- displayList = _g;
- gfxCtx->polyOpa.d = _g;
- }
+ Gfx* gfx = GRAPH_ALLOC(gfxCtx, 3 * sizeof(Gfx));
x %= 2048;
y %= 2048;
- gDPTileSync(displayList);
- gDPSetTileSize(displayList + 1, 0, x, y, (x + ((width - 1) << 2)), (y + ((height - 1) << 2)));
- gSPEndDisplayList(displayList + 2);
+ gDPTileSync(&gfx[0]);
+ gDPSetTileSize(&gfx[1], 0, x, y, (x + ((width - 1) << 2)), (y + ((height - 1) << 2)));
+ gSPEndDisplayList(&gfx[2]);
- return displayList;
+ return gfx;
}
Gfx* Gfx_TwoTexScroll(GraphicsContext* gfxCtx, s32 tile1, u32 x1, u32 y1, s32 width1, s32 height1, s32 tile2, u32 x2,
u32 y2, s32 width2, s32 height2) {
- Gfx* displayList;
-
- {
- Gfx* _g = (Gfx*)gfxCtx->polyOpa.d - 6;
- displayList = _g;
- gfxCtx->polyOpa.d = _g;
- }
+ Gfx* gfx = GRAPH_ALLOC(gfxCtx, 5 * sizeof(Gfx));
x1 %= 2048;
y1 %= 2048;
x2 %= 2048;
y2 %= 2048;
- gDPTileSync(displayList);
- gDPSetTileSize(displayList + 1, tile1, x1, y1, (x1 + ((width1 - 1) << 2)), (y1 + ((height1 - 1) << 2)));
- gDPTileSync(displayList + 2);
- gDPSetTileSize(displayList + 3, tile2, x2, y2, (x2 + ((width2 - 1) << 2)), (y2 + ((height2 - 1) << 2)));
- gSPEndDisplayList(displayList + 4);
+ gDPTileSync(&gfx[0]);
+ gDPSetTileSize(&gfx[1], tile1, x1, y1, (x1 + ((width1 - 1) << 2)), (y1 + ((height1 - 1) << 2)));
+ gDPTileSync(&gfx[2]);
+ gDPSetTileSize(&gfx[3], tile2, x2, y2, (x2 + ((width2 - 1) << 2)), (y2 + ((height2 - 1) << 2)));
+ gSPEndDisplayList(&gfx[4]);
- return displayList;
+ return gfx;
}
Gfx* Gfx_TwoTexScrollEnvColor(GraphicsContext* gfxCtx, s32 tile1, u32 x1, u32 y1, s32 width1, s32 height1, s32 tile2,
u32 x2, u32 y2, s32 width2, s32 height2, s32 r, s32 g, s32 b, s32 a) {
- Gfx* displayList;
-
- {
- Gfx* _g = (Gfx*)gfxCtx->polyOpa.d - 6;
- displayList = _g;
- gfxCtx->polyOpa.d = _g;
- }
+ Gfx* gfx = GRAPH_ALLOC(gfxCtx, 6 * sizeof(Gfx));
x1 %= 2048;
y1 %= 2048;
x2 %= 2048;
y2 %= 2048;
- gDPTileSync(displayList);
- gDPSetTileSize(displayList + 1, tile1, x1, y1, (x1 + ((width1 - 1) << 2)), (y1 + ((height1 - 1) << 2)));
- gDPTileSync(displayList + 2);
- gDPSetTileSize(displayList + 3, tile2, x2, y2, (x2 + ((width2 - 1) << 2)), (y2 + ((height2 - 1) << 2)));
- gDPSetEnvColor(displayList + 4, r, g, b, a);
- gSPEndDisplayList(displayList + 5);
+ gDPTileSync(&gfx[0]);
+ gDPSetTileSize(&gfx[1], tile1, x1, y1, (x1 + ((width1 - 1) << 2)), (y1 + ((height1 - 1) << 2)));
+ gDPTileSync(&gfx[2]);
+ gDPSetTileSize(&gfx[3], tile2, x2, y2, (x2 + ((width2 - 1) << 2)), (y2 + ((height2 - 1) << 2)));
+ gDPSetEnvColor(&gfx[4], r, g, b, a);
+ gSPEndDisplayList(&gfx[5]);
- return displayList;
+ return gfx;
}
Gfx* Gfx_EnvColor(GraphicsContext* gfxCtx, s32 r, s32 g, s32 b, s32 a) {
- Gfx* displayList;
+ Gfx* gfx = GRAPH_ALLOC(gfxCtx, 2 * sizeof(Gfx));
- {
- Gfx* _g = (Gfx*)gfxCtx->polyOpa.d - 2;
- displayList = _g;
- gfxCtx->polyOpa.d = _g;
- }
+ gDPSetEnvColor(&gfx[0], r, g, b, a);
+ gSPEndDisplayList(&gfx[1]);
- gDPSetEnvColor(displayList, r, g, b, a);
- gSPEndDisplayList(displayList + 1);
-
- return displayList;
+ return gfx;
}
Gfx* Gfx_PrimColor(GraphicsContext* gfxCtx, s32 lodfrac, s32 r, s32 g, s32 b, s32 a) {
- Gfx* displayList;
+ Gfx* gfx = GRAPH_ALLOC(gfxCtx, 2 * sizeof(Gfx));
- {
- Gfx* _g = (Gfx*)gfxCtx->polyOpa.d - 2;
- displayList = _g;
- gfxCtx->polyOpa.d = _g;
- }
+ gDPSetPrimColor(&gfx[0], 0, lodfrac, r, g, b, a);
+ gSPEndDisplayList(&gfx[1]);
- gDPSetPrimColor(displayList, 0, lodfrac, r, g, b, a);
- gSPEndDisplayList(displayList + 1);
-
- return displayList;
+ return gfx;
}
void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g, u8 b) {
@@ -1328,7 +1299,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) {
- if ((R_PAUSE_MENU_MODE < 2) && (D_801F6D10 < 2)) {
+ if ((R_PAUSE_BG_PRERENDER_STATE <= PAUSE_BG_PRERENDER_SETUP) && (gTransitionTileState <= TRANS_TILE_SETUP)) {
func_8012CF0C(gfxCtx, true, true, r, g, b);
} else {
func_8012CF0C(gfxCtx, false, false, r, g, b);
diff --git a/src/code/z_room.c b/src/code/z_room.c
index eb615c409..22db1035f 100644
--- a/src/code/z_room.c
+++ b/src/code/z_room.c
@@ -1,62 +1,465 @@
#include "global.h"
-void Room_nop8012D510(PlayState* play, Room* room, UNK_PTR param_3, UNK_TYPE1 param_4) {
+void Room_Noop(PlayState* play, Room* room, Input* input, s32 arg3) {
}
-void Room_DrawType3Mesh(PlayState* play, Room* room, u32 flags) {
+void Room_DrawNone(PlayState* play, Room* room, u32 flags) {
}
-void Room_DrawType0Mesh(PlayState* play, Room* room, u32 flags) {
- RoomMeshType0* mesh;
+static Vec3f sZeroVec = { 0.0f, 0.0f, 0.0f };
+
+void Room_DrawNormal(PlayState* play, Room* room, u32 flags) {
+ RoomShapeNormal* roomShape;
+ RoomShapeDListsEntry* entry;
s32 i;
- RoomMeshType0Params* meshParams;
- GraphicsContext* gfxCtx;
- UNK_TYPE4 pad;
- gfxCtx = play->state.gfxCtx;
- if (flags & 1) {
- func_800BCBF4(&D_801C1D10, play);
- gSPSegment(gfxCtx->polyOpa.p++, 0x03, room->segment);
+ OPEN_DISPS(play->state.gfxCtx);
+
+ if (flags & ROOM_DRAW_OPA) {
+ func_800BCBF4(&sZeroVec, play);
+ gSPSegment(POLY_OPA_DISP++, 0x03, room->segment);
func_8012C268(play);
- gSPMatrix(gfxCtx->polyOpa.p++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD);
+ gSPMatrix(POLY_OPA_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD);
}
- if (flags & 2) {
- func_800BCC68(&D_801C1D10, play);
- gSPSegment(gfxCtx->polyXlu.p++, 0x03, room->segment);
+ if (flags & ROOM_DRAW_XLU) {
+ func_800BCC68(&sZeroVec, play);
+ gSPSegment(POLY_XLU_DISP++, 0x03, room->segment);
func_8012C2DC(play->state.gfxCtx);
- gSPMatrix(gfxCtx->polyXlu.p++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD);
+ gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD);
}
- mesh = &room->mesh->type0;
- meshParams = Lib_SegmentedToVirtual(mesh->paramsStart);
- for (i = 0; i < mesh->count; i++) {
- if ((flags & 1) && (meshParams->opaqueDl != NULL)) {
- gSPDisplayList(gfxCtx->polyOpa.p++, meshParams->opaqueDl);
+ roomShape = &room->roomShape->normal;
+ entry = Lib_SegmentedToVirtual(roomShape->entries);
+ for (i = 0; i < roomShape->numEntries; i++) {
+ if ((flags & ROOM_DRAW_OPA) && (entry->opa != NULL)) {
+ gSPDisplayList(POLY_OPA_DISP++, entry->opa);
}
- if ((flags & 2) && (meshParams->translucentDl != NULL)) {
- gSPDisplayList(gfxCtx->polyXlu.p++, meshParams->translucentDl);
+ if ((flags & ROOM_DRAW_XLU) && (entry->xlu != NULL)) {
+ gSPDisplayList(POLY_XLU_DISP++, entry->xlu);
}
- meshParams++;
+ entry++;
}
+
+ CLOSE_DISPS(play->state.gfxCtx);
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_room/Room_DrawType2Mesh.s")
+typedef enum {
+ /* 0 */ ROOM_CULL_DEBUG_MODE_OFF,
+ /* 1 */ ROOM_CULL_DEBUG_MODE_UP_TO_TARGET,
+ /* 2 */ ROOM_CULL_DEBUG_MODE_ONLY_TARGET
+} RoomCullableDebugMode;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_room/func_8012DEE8.s")
+typedef struct RoomShapeCullableEntryLinked {
+ /* 0x00 */ RoomShapeCullableEntry* entry;
+ /* 0x04 */ f32 boundsNearZ;
+ /* 0x08 */ struct RoomShapeCullableEntryLinked* prev;
+ /* 0x0C */ struct RoomShapeCullableEntryLinked* next;
+} RoomShapeCullableEntryLinked; // size = 0x10
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_room/func_8012E254.s")
+#define ROOM_SHAPE_CULLABLE_MAX_ENTRIES 128
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_room/func_8012E32C.s")
+void Room_DrawCullable(PlayState* play, Room* room, u32 flags) {
+ RoomShapeCullable* roomShape;
+ RoomShapeCullableEntry* roomShapeCullableEntry;
+ RoomShapeCullableEntryLinked linkedEntriesBuffer[ROOM_SHAPE_CULLABLE_MAX_ENTRIES];
+ RoomShapeCullableEntryLinked* head = NULL;
+ RoomShapeCullableEntryLinked* tail = NULL;
+ RoomShapeCullableEntryLinked* iter;
+ Gfx* displayList;
+ RoomShapeCullableEntryLinked* insert;
+ f32 entryBoundsNearZ;
+ s32 i;
+ Vec3f pos;
+ Vec3f projectedPos;
+ RoomShapeCullableEntry* roomShapeCullableEntries;
-void Room_DrawType1Mesh(PlayState* play, Room* room, u32 flags) {
- RoomMeshType1* mesh = &room->mesh->type1;
- if (mesh->format == 1) {
- func_8012DEE8(play, room, flags);
- } else if (mesh->format == 2) {
- func_8012E32C(play, room, flags);
+ OPEN_DISPS(play->state.gfxCtx);
+
+ if (flags & ROOM_DRAW_OPA) {
+ func_800BCBF4(&sZeroVec, play);
+
+ gSPSegment(POLY_OPA_DISP++, 0x03, room->segment);
+ if (play->roomCtx.unk74 != NULL) {
+ gSPSegment(POLY_OPA_DISP++, 0x06, play->roomCtx.unk74);
+ }
+ func_8012C268(play);
+ gSPMatrix(POLY_OPA_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD);
+ }
+
+ if (flags & ROOM_DRAW_XLU) {
+ func_800BCC68(&sZeroVec, play);
+ gSPSegment(POLY_XLU_DISP++, 0x03, room->segment);
+ if (play->roomCtx.unk74 != NULL) {
+ gSPSegment(POLY_XLU_DISP++, 0x06, play->roomCtx.unk74);
+ }
+ func_8012C2DC(play->state.gfxCtx);
+ gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD);
+ }
+
+ if ((room->enablePosLights != 0) || (MREG(93) != 0)) {
+ gSPSetGeometryMode(POLY_OPA_DISP++, G_LIGHTING_POSITIONAL);
+ gSPSetGeometryMode(POLY_XLU_DISP++, G_LIGHTING_POSITIONAL);
+ }
+
+ roomShape = &room->roomShape->cullable;
+ roomShapeCullableEntry = Lib_SegmentedToVirtual(roomShape->entries);
+ insert = linkedEntriesBuffer;
+
+ roomShapeCullableEntries = roomShapeCullableEntry;
+
+ if (play->roomCtx.unk78 < 0) {
+ for (i = 0; i < roomShape->numEntries; i++, roomShapeCullableEntry++) {
+ if (R_ROOM_CULL_DEBUG_MODE != 0) {
+ if (((R_ROOM_CULL_DEBUG_MODE == ROOM_CULL_DEBUG_MODE_UP_TO_TARGET) &&
+ (i <= R_ROOM_CULL_DEBUG_TARGET)) ||
+ ((R_ROOM_CULL_DEBUG_MODE == ROOM_CULL_DEBUG_MODE_ONLY_TARGET) && (i == R_ROOM_CULL_DEBUG_TARGET))) {
+ if (flags & ROOM_DRAW_OPA) {
+ displayList = roomShapeCullableEntry->opa;
+ if (displayList != NULL) {
+ gSPDisplayList(POLY_OPA_DISP++, displayList);
+ }
+ }
+
+ if (flags & ROOM_DRAW_XLU) {
+ displayList = roomShapeCullableEntry->xlu;
+ if (displayList != NULL) {
+ gSPDisplayList(POLY_XLU_DISP++, displayList);
+ }
+ }
+ }
+ } else {
+ if (flags & ROOM_DRAW_OPA) {
+ displayList = roomShapeCullableEntry->opa;
+ if (displayList != NULL) {
+ gSPDisplayList(POLY_OPA_DISP++, displayList);
+ }
+ }
+
+ if (flags & ROOM_DRAW_XLU) {
+ displayList = roomShapeCullableEntry->xlu;
+ if (displayList != NULL) {
+ gSPDisplayList(POLY_XLU_DISP++, displayList);
+ }
+ }
+ }
+ }
+ } else {
+ f32 var_fa1 = 1.0f / play->projectionMtxFDiagonal.z;
+ f32 var_fv1;
+ s32 var_a1;
+
+ // Pick and sort entries by depth
+ for (i = 0; i < roomShape->numEntries; i++, roomShapeCullableEntry++) {
+
+ // Project the entry position, to get the depth it is at.
+ pos.x = roomShapeCullableEntry->boundsSphereCenter.x;
+ pos.y = roomShapeCullableEntry->boundsSphereCenter.y;
+ pos.z = roomShapeCullableEntry->boundsSphereCenter.z;
+ SkinMatrix_Vec3fMtxFMultXYZ(&play->viewProjectionMtxF, &pos, &projectedPos);
+
+ projectedPos.z *= var_fa1;
+
+ var_fv1 = ABS_ALT(roomShapeCullableEntry->boundsSphereRadius);
+
+ // If the entry bounding sphere isn't fully before the rendered depth range
+ if (-var_fv1 < projectedPos.z) {
+
+ // Compute the depth of the nearest point in the entry's bounding sphere
+ entryBoundsNearZ = projectedPos.z - var_fv1;
+
+ // If the entry bounding sphere isn't fully beyond the rendered depth range
+ if (entryBoundsNearZ < play->lightCtx.zFar) {
+
+ // This entry will be rendered
+ insert->entry = roomShapeCullableEntry;
+
+ if (roomShapeCullableEntry->boundsSphereRadius < 0) {
+ insert->boundsNearZ = FLT_MAX;
+ } else {
+ insert->boundsNearZ = entryBoundsNearZ;
+ }
+
+ // Insert into the linked list, ordered by ascending depth of the nearest point in the bounding
+ // sphere
+ iter = head;
+ if (iter == NULL) {
+ head = tail = insert;
+ insert->prev = insert->next = NULL;
+ } else {
+ do {
+ if (insert->boundsNearZ < iter->boundsNearZ) {
+ break;
+ }
+ iter = iter->next;
+ } while (iter != NULL);
+
+ if (iter == NULL) {
+ insert->prev = tail;
+ insert->next = NULL;
+ tail->next = insert;
+ tail = insert;
+ } else {
+ insert->prev = iter->prev;
+ if (insert->prev == NULL) {
+ head = insert;
+ } else {
+ insert->prev->next = insert;
+ }
+ iter->prev = insert;
+ insert->next = iter;
+ }
+ }
+
+ insert++;
+ }
+ }
+ }
+
+ //! FAKE: Similar trick used in OoT
+ R_ROOM_CULL_NUM_ENTRIES = roomShape->numEntries & 0xFFFF & 0xFFFF & 0xFFFF;
+
+ // Draw entries, from nearest to furthest
+ i = 1;
+
+ if (flags & ROOM_DRAW_OPA) {
+ for (; head != NULL; head = head->next, i++) {
+ s32 pad;
+
+ roomShapeCullableEntry = head->entry;
+
+ if (R_ROOM_CULL_DEBUG_MODE != ROOM_CULL_DEBUG_MODE_OFF) {
+ // Debug mode drawing
+
+ if (((R_ROOM_CULL_DEBUG_MODE == ROOM_CULL_DEBUG_MODE_UP_TO_TARGET) &&
+ (i <= R_ROOM_CULL_DEBUG_TARGET)) ||
+ ((R_ROOM_CULL_DEBUG_MODE == ROOM_CULL_DEBUG_MODE_ONLY_TARGET) &&
+ (i == R_ROOM_CULL_DEBUG_TARGET))) {
+
+ displayList = roomShapeCullableEntry->opa;
+ if (displayList != NULL) {
+ gSPDisplayList(POLY_OPA_DISP++, displayList);
+ }
+ }
+ } else {
+ displayList = roomShapeCullableEntry->opa;
+ if (displayList != NULL) {
+ gSPDisplayList(POLY_OPA_DISP++, displayList);
+ }
+ }
+ }
+ }
+
+ if (flags & ROOM_DRAW_XLU) {
+ for (; tail != NULL; tail = tail->prev) {
+ f32 temp_fv0;
+ f32 temp_fv1;
+
+ roomShapeCullableEntry = tail->entry;
+ displayList = roomShapeCullableEntry->xlu;
+
+ if (displayList != NULL) {
+ if (roomShapeCullableEntry->boundsSphereRadius & 1) {
+
+ temp_fv0 = tail->boundsNearZ - (f32)(iREG(93) + 0xBB8);
+ temp_fv1 = iREG(94) + 0x7D0;
+
+ if (temp_fv0 < temp_fv1) {
+ if (temp_fv0 < 0.0f) {
+ var_a1 = 255;
+ } else {
+ var_a1 = 255 - (s32)((temp_fv0 / temp_fv1) * 255.0f);
+ }
+ gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, var_a1);
+ gSPDisplayList(POLY_XLU_DISP++, displayList);
+ }
+ } else {
+ gSPDisplayList(POLY_XLU_DISP++, displayList);
+ }
+ }
+ }
+ }
+
+ R_ROOM_CULL_USED_ENTRIES = i - 1;
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+#define ROOM_IMAGE_NODRAW_BACKGROUND (1 << 0)
+#define ROOM_IMAGE_NODRAW_OPA (1 << 1)
+#define ROOM_IMAGE_NODRAW_XLU (1 << 2)
+
+void Room_DrawImageSingle(PlayState* play, Room* room, u32 flags) {
+ Camera* activeCam;
+ Gfx* gfx;
+ RoomShapeImageSingle* roomShape;
+ RoomShapeDListsEntry* entry;
+ u32 isFixedCamera;
+ u32 drawBackground;
+ u32 drawOpa;
+ u32 drawXlu;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ activeCam = GET_ACTIVE_CAM(play);
+ isFixedCamera = false; // Condition is inferred from OoT
+ roomShape = &room->roomShape->image.single;
+ entry = Lib_SegmentedToVirtual(roomShape->base.entry);
+ drawBackground = (flags & ROOM_DRAW_OPA) && isFixedCamera && (roomShape->source != NULL) &&
+ !(R_ROOM_IMAGE_NODRAW_FLAGS & ROOM_IMAGE_NODRAW_BACKGROUND);
+ drawOpa = (flags & ROOM_DRAW_OPA) && (entry->opa != NULL) && !(R_ROOM_IMAGE_NODRAW_FLAGS & ROOM_IMAGE_NODRAW_OPA);
+ drawXlu = (flags & ROOM_DRAW_XLU) && (entry->xlu != NULL) && !(R_ROOM_IMAGE_NODRAW_FLAGS & ROOM_IMAGE_NODRAW_XLU);
+
+ if (drawOpa || drawBackground) {
+ gSPSegment(POLY_OPA_DISP++, 0x03, room->segment);
+
+ if (drawOpa) {
+ func_8012C28C(play->state.gfxCtx);
+ gSPMatrix(POLY_OPA_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD);
+ gSPDisplayList(POLY_OPA_DISP++, entry->opa);
+ }
+
+ if (drawBackground) {
+ gSPLoadUcodeL(POLY_OPA_DISP++, gspS2DEX2_fifo);
+
+ gfx = POLY_OPA_DISP;
+
+ {
+ Vec3f quakeOffset;
+
+ Camera_GetQuakeOffset(&quakeOffset, activeCam);
+
+ Prerender_DrawBackground2D(
+ &gfx, roomShape->source, roomShape->tlut, roomShape->width, roomShape->height, roomShape->fmt,
+ roomShape->siz, roomShape->tlutMode, roomShape->tlutCount,
+ (quakeOffset.x + quakeOffset.z) * 1.2f + quakeOffset.y * 0.6f,
+ quakeOffset.y * 2.4f + (quakeOffset.x + quakeOffset.z) * 0.3f, 1.0f, 1.0f, 0);
+ }
+
+ POLY_OPA_DISP = gfx;
+
+ gSPLoadUcode(POLY_OPA_DISP++, SysUcode_GetUCode(), SysUcode_GetUCodeData());
+ }
+ }
+
+ if (drawXlu) {
+ gSPSegment(POLY_XLU_DISP++, 0x03, room->segment);
+ func_8012C2DC(play->state.gfxCtx);
+ gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD);
+ gSPDisplayList(POLY_XLU_DISP++, entry->xlu);
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+RoomShapeImageMultiBgEntry* Room_GetImageMultiBgEntry(RoomShapeImageMulti* roomShapeImageMulti, PlayState* play) {
+ Camera* activeCam = GET_ACTIVE_CAM(play);
+ s32 bgCamIndex = activeCam->bgCamDataId;
+ s16 overrideBgCamIndex;
+ Player* player;
+ RoomShapeImageMultiBgEntry* bgEntry;
+ s32 i;
+
+ overrideBgCamIndex = ((BgCamFuncData*)BgCheck_GetBgCamFuncDataImpl(&play->colCtx, bgCamIndex, BGCHECK_SCENE))
+ ->roomImageOverrideBgCamIndex;
+ if (overrideBgCamIndex >= 0) {
+ bgCamIndex = overrideBgCamIndex;
+ }
+
+ player = GET_PLAYER(play);
+ player->actor.params = (player->actor.params & 0xFF00) | bgCamIndex;
+
+ bgEntry = Lib_SegmentedToVirtual(roomShapeImageMulti->backgrounds);
+ for (i = 0; i < roomShapeImageMulti->numBackgrounds; i++) {
+ if (bgEntry->bgCamIndex == bgCamIndex) {
+ return bgEntry;
+ }
+ bgEntry++;
+ }
+
+ __assert("../z_room.c", 849);
+
+ return NULL;
+}
+
+void Room_DrawImageMulti(PlayState* play, Room* room, u32 flags) {
+ Camera* activeCam;
+ Gfx* gfx;
+ RoomShapeImageMulti* roomShape;
+ RoomShapeImageMultiBgEntry* bgEntry;
+ RoomShapeDListsEntry* dListsEntry;
+ u32 isFixedCamera;
+ u32 drawBackground;
+ u32 drawOpa;
+ u32 drawXlu;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ activeCam = GET_ACTIVE_CAM(play);
+ isFixedCamera = false; // Condition is inferred from OoT
+ roomShape = &room->roomShape->image.multi;
+ dListsEntry = Lib_SegmentedToVirtual(roomShape->base.entry);
+
+ bgEntry = Room_GetImageMultiBgEntry(roomShape, play);
+
+ drawBackground = (flags & ROOM_DRAW_OPA) && isFixedCamera && (bgEntry->source != NULL) &&
+ !(R_ROOM_IMAGE_NODRAW_FLAGS & ROOM_IMAGE_NODRAW_BACKGROUND);
+ drawOpa =
+ (flags & ROOM_DRAW_OPA) && (dListsEntry->opa != NULL) && !(R_ROOM_IMAGE_NODRAW_FLAGS & ROOM_IMAGE_NODRAW_OPA);
+ drawXlu =
+ (flags & ROOM_DRAW_XLU) && (dListsEntry->xlu != NULL) && !(R_ROOM_IMAGE_NODRAW_FLAGS & ROOM_IMAGE_NODRAW_XLU);
+
+ if (drawOpa || drawBackground) {
+ gSPSegment(POLY_OPA_DISP++, 0x03, room->segment);
+
+ if (drawOpa) {
+ func_8012C28C(play->state.gfxCtx);
+ gSPMatrix(POLY_OPA_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD);
+ gSPDisplayList(POLY_OPA_DISP++, dListsEntry->opa);
+ }
+
+ if (drawBackground) {
+ gSPLoadUcodeL(POLY_OPA_DISP++, gspS2DEX2_fifo);
+
+ gfx = POLY_OPA_DISP;
+
+ {
+ Vec3f quakeOffset;
+
+ Camera_GetQuakeOffset(&quakeOffset, activeCam);
+ Prerender_DrawBackground2D(&gfx, bgEntry->source, bgEntry->tlut, bgEntry->width, bgEntry->height,
+ bgEntry->fmt, bgEntry->siz, bgEntry->tlutMode, bgEntry->tlutCount,
+ (quakeOffset.x + quakeOffset.z) * 1.2f + quakeOffset.y * 0.6f,
+ quakeOffset.y * 2.4f + (quakeOffset.x + quakeOffset.z) * 0.3f, 1.0f, 1.0f,
+ 0);
+ }
+
+ POLY_OPA_DISP = gfx;
+
+ gSPLoadUcode(POLY_OPA_DISP++, SysUcode_GetUCode(), SysUcode_GetUCodeData());
+ }
+ }
+
+ if (drawXlu) {
+ gSPSegment(POLY_XLU_DISP++, 0x03, room->segment);
+ func_8012C2DC(play->state.gfxCtx);
+ gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD);
+ gSPDisplayList(POLY_XLU_DISP++, dListsEntry->xlu);
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void Room_DrawImage(PlayState* play, Room* room, u32 flags) {
+ RoomShapeImageBase* roomShape = &room->roomShape->image.base;
+
+ if (roomShape->amountType == ROOM_SHAPE_IMAGE_AMOUNT_SINGLE) {
+ Room_DrawImageSingle(play, room, flags);
+ } else if (roomShape->amountType == ROOM_SHAPE_IMAGE_AMOUNT_MULTI) {
+ Room_DrawImageMulti(play, room, flags);
} else {
__assert("../z_room.c", 965);
}
@@ -64,31 +467,96 @@ void Room_DrawType1Mesh(PlayState* play, Room* room, u32 flags) {
void Room_Init(PlayState* play, RoomContext* roomCtx) {
s32 i;
+
roomCtx->curRoom.num = -1;
roomCtx->curRoom.segment = NULL;
roomCtx->unk78 = 1;
roomCtx->unk79 = 0;
- for (i = 0; i < 3; i++) {
+ for (i = 0; i < ARRAY_COUNT(roomCtx->unk7A); i++) {
roomCtx->unk7A[i] = 0;
}
}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_room/Room_AllocateAndLoad.s")
+size_t Room_AllocateAndLoad(PlayState* play, RoomContext* roomCtx) {
+ size_t maxRoomSize = 0;
+ size_t roomSize;
+ s32 i;
+ s32 j;
+ s32 frontRoom;
+ s32 backRoom;
+ size_t frontRoomSize;
+ size_t backRoomSize;
+ size_t cumulRoomSize;
+ s32 pad[2];
+
+ {
+ RomFile* roomList = play->roomList;
+
+ for (i = 0; i < play->numRooms; i++) {
+ roomSize = roomList[i].vromEnd - roomList[i].vromStart;
+ maxRoomSize = MAX(roomSize, maxRoomSize);
+ }
+ }
+
+ if ((u32)play->doorCtx.numTransitionActors != 0) {
+ RomFile* roomList = play->roomList;
+ TransitionActorEntry* transitionActor = &play->doorCtx.transitionActorList[0];
+
+ for (j = 0; j < play->doorCtx.numTransitionActors; j++) {
+ frontRoom = transitionActor->sides[0].room;
+ backRoom = transitionActor->sides[1].room;
+ frontRoomSize = (frontRoom < 0) ? 0 : roomList[frontRoom].vromEnd - roomList[frontRoom].vromStart;
+ backRoomSize = (backRoom < 0) ? 0 : roomList[backRoom].vromEnd - roomList[backRoom].vromStart;
+ cumulRoomSize = (frontRoom != backRoom) ? frontRoomSize + backRoomSize : frontRoomSize;
+
+ maxRoomSize = MAX(cumulRoomSize, maxRoomSize);
+ transitionActor++;
+ }
+ }
+
+ roomCtx->roomMemPages[0] = THA_AllocTailAlign16(&play->state.heap, maxRoomSize);
+ if (roomCtx->roomMemPages[0] == NULL) {
+ __assert("../z_room.c", 1078);
+ }
+ roomCtx->roomMemPages[1] = (void*)((uintptr_t)roomCtx->roomMemPages[0] + maxRoomSize);
+ roomCtx->activeMemPage = 0;
+ roomCtx->status = 0;
+
+ if ((gSaveContext.respawnFlag != 0) && (gSaveContext.respawnFlag != -2) && (gSaveContext.respawnFlag != -7)) {
+ s32 respawnMode;
+
+ if ((gSaveContext.respawnFlag == -8) || (gSaveContext.respawnFlag == -5) || (gSaveContext.respawnFlag == -4) ||
+ ((gSaveContext.respawnFlag < 0) && (gSaveContext.respawnFlag != -1) && (gSaveContext.respawnFlag != -6))) {
+ respawnMode = RESPAWN_MODE_DOWN;
+ } else if (gSaveContext.respawnFlag < 0) {
+ respawnMode = RESPAWN_MODE_TOP;
+ } else {
+ respawnMode = gSaveContext.respawnFlag - 1;
+ }
+ frontRoom = gSaveContext.respawn[respawnMode].roomIndex;
+ } else {
+ frontRoom = play->setupEntranceList[play->curSpawn].room;
+ }
+
+ Room_StartRoomTransition(play, roomCtx, frontRoom);
+
+ return maxRoomSize;
+}
s32 Room_StartRoomTransition(PlayState* play, RoomContext* roomCtx, s32 index) {
- if (roomCtx->unk31 == 0) {
- s32 size;
+ if (roomCtx->status == 0) {
+ size_t size;
roomCtx->prevRoom = roomCtx->curRoom;
roomCtx->curRoom.num = index;
roomCtx->curRoom.segment = NULL;
- roomCtx->unk31 = 1;
+ roomCtx->status = 1;
size = play->roomList[index].vromEnd - play->roomList[index].vromStart;
- roomCtx->activeRoomVram = (void*)(ALIGN16((u32)roomCtx->roomMemPages[roomCtx->activeMemPage] -
+ roomCtx->activeRoomVram = (void*)(ALIGN16((uintptr_t)roomCtx->roomMemPages[roomCtx->activeMemPage] -
(size + 8) * roomCtx->activeMemPage - 7));
- osCreateMesgQueue(&roomCtx->loadQueue, roomCtx->loadMsg, 1);
+ osCreateMesgQueue(&roomCtx->loadQueue, roomCtx->loadMsg, ARRAY_COUNT(roomCtx->loadMsg));
DmaMgr_SendRequestImpl(&roomCtx->dmaRequest, roomCtx->activeRoomVram, play->roomList[index].vromStart, size, 0,
&roomCtx->loadQueue, NULL);
roomCtx->activeMemPage ^= 1;
@@ -100,14 +568,13 @@ s32 Room_StartRoomTransition(PlayState* play, RoomContext* roomCtx, s32 index) {
}
s32 Room_HandleLoadCallbacks(PlayState* play, RoomContext* roomCtx) {
- if (roomCtx->unk31 == 1) {
- if (!osRecvMesg(&roomCtx->loadQueue, NULL, OS_MESG_NOBLOCK)) {
- roomCtx->unk31 = 0;
+ if (roomCtx->status == 1) {
+ if (osRecvMesg(&roomCtx->loadQueue, NULL, OS_MESG_NOBLOCK) == 0) {
+ roomCtx->status = 0;
roomCtx->curRoom.segment = roomCtx->activeRoomVram;
- // TODO: Segment number enum
- gSegments[0x03] = VIRTUAL_TO_PHYSICAL(roomCtx->activeRoomVram);
+ gSegments[3] = VIRTUAL_TO_PHYSICAL(roomCtx->activeRoomVram);
- Scene_ProcessHeader(play, (SceneCmd*)roomCtx->curRoom.segment);
+ Scene_ExecuteCommands(play, roomCtx->curRoom.segment);
func_80123140(play, GET_PLAYER(play));
Actor_SpawnTransitionActors(play, &play->actorCtx);
@@ -127,11 +594,17 @@ s32 Room_HandleLoadCallbacks(PlayState* play, RoomContext* roomCtx) {
return 1;
}
+RoomDrawHandler sRoomDrawHandlers[] = {
+ Room_DrawNormal, // ROOM_SHAPE_TYPE_NORMAL
+ Room_DrawImage, // ROOM_SHAPE_TYPE_IMAGE
+ Room_DrawCullable, // ROOM_SHAPE_TYPE_CULLABLE
+ Room_DrawNone, // ROOM_SHAPE_TYPE_NONE
+};
+
void Room_Draw(PlayState* play, Room* room, u32 flags) {
if (room->segment != NULL) {
- // TODO: Segment number enum
- gSegments[0x03] = VIRTUAL_TO_PHYSICAL(room->segment);
- roomDrawFuncs[room->mesh->type0.type](play, room, flags);
+ gSegments[3] = VIRTUAL_TO_PHYSICAL(room->segment);
+ sRoomDrawHandlers[room->roomShape->base.type](play, room, flags);
}
return;
}
diff --git a/src/code/z_scene.c b/src/code/z_scene.c
index 1167f14ab..26dc39507 100644
--- a/src/code/z_scene.c
+++ b/src/code/z_scene.c
@@ -48,7 +48,7 @@ void Object_InitBank(GameState* gameState, ObjectContext* objectCtx) {
for (i = 0; i < OBJECT_EXCHANGE_BANK_MAX; i++) { objectCtx->status[i].id = 0; }
// clang-format on
- objectCtx->spaceStart = objectCtx->status[0].segment = THA_AllocEndAlign16(&gameState->heap, spaceSize);
+ objectCtx->spaceStart = objectCtx->status[0].segment = THA_AllocTailAlign16(&gameState->heap, spaceSize);
objectCtx->spaceEnd = (void*)((u32)objectCtx->spaceStart + spaceSize);
objectCtx->mainKeepIndex = Object_Spawn(objectCtx, GAMEPLAY_KEEP);
@@ -141,15 +141,16 @@ void* func_8012F73C(ObjectContext* objectCtx, s32 iParm2, s16 id) {
}
// SceneTableEntry Header Command 0x00: Spawn List
-void Scene_HeaderCmdSpawnList(PlayState* play, SceneCmd* cmd) {
+void Scene_CommandSpawnList(PlayState* play, SceneCmd* cmd) {
s32 loadedCount;
s16 playerObjectId;
void* nextObject;
play->linkActorEntry =
(ActorEntry*)Lib_SegmentedToVirtual(cmd->spawnList.segment) + play->setupEntranceList[play->curSpawn].spawn;
- if ((play->linkActorEntry->params & 0x0F00) >> 8 == 0x0C ||
- (gSaveContext.respawnFlag == 0x02 && gSaveContext.respawn[RESPAWN_MODE_RETURN].playerParams == 0x0CFF)) {
+ if ((PLAYER_GET_INITMODE(play->linkActorEntry) == PLAYER_INITMODE_TELESCOPE) ||
+ ((gSaveContext.respawnFlag == 2) &&
+ (gSaveContext.respawn[RESPAWN_MODE_RETURN].playerParams == PLAYER_PARAMS(0xFF, PLAYER_INITMODE_TELESCOPE)))) {
// Skull Kid Object
Object_Spawn(&play->objectCtx, OBJECT_STK);
return;
@@ -159,7 +160,7 @@ void Scene_HeaderCmdSpawnList(PlayState* play, SceneCmd* cmd) {
nextObject = play->objectCtx.status[play->objectCtx.num].segment;
play->objectCtx.num = loadedCount;
play->objectCtx.spawnedObjectCount = loadedCount;
- playerObjectId = gPlayerFormObjectIndices[(void)0, gSaveContext.save.playerForm];
+ playerObjectId = gPlayerFormObjectIndices[GET_PLAYER_FORM];
gActorOverlayTable[0].initInfo->objectId = playerObjectId;
Object_Spawn(&play->objectCtx, playerObjectId);
@@ -167,19 +168,19 @@ void Scene_HeaderCmdSpawnList(PlayState* play, SceneCmd* cmd) {
}
// SceneTableEntry Header Command 0x01: Actor List
-void Scene_HeaderCmdActorList(PlayState* play, SceneCmd* cmd) {
+void Scene_CommandActorList(PlayState* play, SceneCmd* cmd) {
play->numSetupActors = cmd->actorList.num;
play->setupActorList = Lib_SegmentedToVirtual(cmd->actorList.segment);
- play->actorCtx.unkC = 0;
+ play->actorCtx.halfDaysBit = 0;
}
// SceneTableEntry Header Command 0x02: List of camera data for actor cutscenes
-void Scene_HeaderCmdActorCutsceneCamList(PlayState* play, SceneCmd* cmd) {
+void Scene_CommandActorCutsceneCamList(PlayState* play, SceneCmd* cmd) {
play->actorCsCamList = Lib_SegmentedToVirtual(cmd->actorCsCamList.segment);
}
// SceneTableEntry Header Command 0x03: Collision Header
-void Scene_HeaderCmdColHeader(PlayState* play, SceneCmd* cmd) {
+void Scene_CommandCollisionHeader(PlayState* play, SceneCmd* cmd) {
CollisionHeader* colHeaderTemp;
CollisionHeader* colHeader;
@@ -204,19 +205,21 @@ void Scene_HeaderCmdColHeader(PlayState* play, SceneCmd* cmd) {
}
// SceneTableEntry Header Command 0x04: Room List
-void Scene_HeaderCmdRoomList(PlayState* play, SceneCmd* cmd) {
+void Scene_CommandRoomList(PlayState* play, SceneCmd* cmd) {
play->numRooms = cmd->roomList.num;
play->roomList = Lib_SegmentedToVirtual(cmd->roomList.segment);
}
// SceneTableEntry Header Command 0x06: Entrance List
-void Scene_HeaderCmdEntranceList(PlayState* play, SceneCmd* cmd) {
+void Scene_CommandEntranceList(PlayState* play, SceneCmd* cmd) {
play->setupEntranceList = Lib_SegmentedToVirtual(cmd->entranceList.segment);
}
// SceneTableEntry Header Command 0x07: Special Files
-void Scene_HeaderCmdSpecialFiles(PlayState* play, SceneCmd* cmd) {
- static RomFile tatlMessageFiles[2] = {
+void Scene_CommandSpecialFiles(PlayState* play, SceneCmd* cmd) {
+ // @note These quest hint files are identical to OoT's.
+ // They are not relevant in this game and the system to process these scripts has been removed.
+ static RomFile naviQuestHintFiles[2] = {
{ SEGMENT_ROM_START(elf_message_field), SEGMENT_ROM_END(elf_message_field) },
{ SEGMENT_ROM_START(elf_message_ydan), SEGMENT_ROM_END(elf_message_ydan) },
};
@@ -227,28 +230,28 @@ void Scene_HeaderCmdSpecialFiles(PlayState* play, SceneCmd* cmd) {
gSegments[0x05] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[play->objectCtx.subKeepIndex].segment);
}
- if (cmd->specialFiles.cUpElfMsgNum != 0) {
- play->unk_18868 = Play_LoadScene(play, &tatlMessageFiles[cmd->specialFiles.cUpElfMsgNum - 1]);
+ if (cmd->specialFiles.naviQuestHintFileId != NAVI_QUEST_HINTS_NONE) {
+ play->naviQuestHints = Play_LoadFile(play, &naviQuestHintFiles[cmd->specialFiles.naviQuestHintFileId - 1]);
}
}
// SceneTableEntry Header Command 0x08: Room Behavior
-void Scene_HeaderCmdRoomBehavior(PlayState* play, SceneCmd* cmd) {
- play->roomCtx.curRoom.unk3 = cmd->roomBehavior.gpFlag1;
- play->roomCtx.curRoom.unk2 = cmd->roomBehavior.gpFlag2 & 0xFF;
- play->roomCtx.curRoom.unk5 = (cmd->roomBehavior.gpFlag2 >> 8) & 1;
+void Scene_CommandRoomBehavior(PlayState* play, SceneCmd* cmd) {
+ play->roomCtx.curRoom.behaviorType1 = cmd->roomBehavior.gpFlag1;
+ play->roomCtx.curRoom.behaviorType2 = cmd->roomBehavior.gpFlag2 & 0xFF;
+ play->roomCtx.curRoom.lensMode = (cmd->roomBehavior.gpFlag2 >> 8) & 1;
play->msgCtx.unk12044 = (cmd->roomBehavior.gpFlag2 >> 0xA) & 1;
play->roomCtx.curRoom.enablePosLights = (cmd->roomBehavior.gpFlag2 >> 0xB) & 1;
play->envCtx.unk_E2 = (cmd->roomBehavior.gpFlag2 >> 0xC) & 1;
}
// SceneTableEntry Header Command 0x0A: Mesh Header
-void Scene_HeaderCmdMesh(PlayState* play, SceneCmd* cmd) {
- play->roomCtx.curRoom.mesh = Lib_SegmentedToVirtual(cmd->mesh.segment);
+void Scene_CommandMesh(PlayState* play, SceneCmd* cmd) {
+ play->roomCtx.curRoom.roomShape = Lib_SegmentedToVirtual(cmd->mesh.segment);
}
// SceneTableEntry Header Command 0x0B: Object List
-void Scene_HeaderCmdObjectList(PlayState* play, SceneCmd* cmd) {
+void Scene_CommandObjectList(PlayState* play, SceneCmd* cmd) {
s32 i;
s32 j;
s32 k;
@@ -274,7 +277,7 @@ void Scene_HeaderCmdObjectList(PlayState* play, SceneCmd* cmd) {
}
play->objectCtx.num = i;
- func_800BA6FC(play, &play->actorCtx);
+ Actor_KillAllWithMissingObject(play, &play->actorCtx);
continue;
}
@@ -301,7 +304,7 @@ void Scene_HeaderCmdObjectList(PlayState* play, SceneCmd* cmd) {
}
// SceneTableEntry Header Command 0x0C: Light List
-void Scene_HeaderCmdLightList(PlayState* play, SceneCmd* cmd) {
+void Scene_CommandLightList(PlayState* play, SceneCmd* cmd) {
s32 i;
LightInfo* lightInfo = Lib_SegmentedToVirtual(cmd->lightList.segment);
@@ -312,12 +315,12 @@ void Scene_HeaderCmdLightList(PlayState* play, SceneCmd* cmd) {
}
// SceneTableEntry Header Command 0x0D: Path List
-void Scene_HeaderCmdPathList(PlayState* play, SceneCmd* cmd) {
+void Scene_CommandPathList(PlayState* play, SceneCmd* cmd) {
play->setupPathList = Lib_SegmentedToVirtual(cmd->pathList.segment);
}
// SceneTableEntry Header Command 0x0E: Transition Actor List
-void Scene_HeaderCmdTransiActorList(PlayState* play, SceneCmd* cmd) {
+void Scene_CommandTransiActorList(PlayState* play, SceneCmd* cmd) {
play->doorCtx.numTransitionActors = cmd->transiActorList.num;
play->doorCtx.transitionActorList = Lib_SegmentedToVirtual(cmd->transiActorList.segment);
func_80105818(play, play->doorCtx.numTransitionActors, play->doorCtx.transitionActorList);
@@ -329,7 +332,7 @@ void Door_InitContext(GameState* state, DoorContext* doorCtx) {
}
// SceneTableEntry Header Command 0x0F: Environment Light Settings List
-void Scene_HeaderCmdEnvLightSettings(PlayState* play, SceneCmd* cmd) {
+void Scene_CommandEnvLightSettings(PlayState* play, SceneCmd* cmd) {
play->envCtx.numLightSettings = cmd->lightSettingList.num;
play->envCtx.lightSettingsList = Lib_SegmentedToVirtual(cmd->lightSettingList.segment);
}
@@ -354,13 +357,13 @@ void Scene_LoadAreaTextures(PlayState* play, s32 fileIndex) {
size_t size = sceneTextureFiles[fileIndex].vromEnd - vromStart;
if (size != 0) {
- play->roomCtx.unk74 = THA_AllocEndAlign16(&play->state.heap, size);
+ play->roomCtx.unk74 = THA_AllocTailAlign16(&play->state.heap, size);
DmaMgr_SendRequest0(play->roomCtx.unk74, vromStart, size);
}
}
// SceneTableEntry Header Command 0x11: Skybox Settings
-void Scene_HeaderCmdSkyboxSettings(PlayState* play, SceneCmd* cmd) {
+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;
@@ -368,37 +371,38 @@ void Scene_HeaderCmdSkyboxSettings(PlayState* play, SceneCmd* cmd) {
}
// SceneTableEntry Header Command 0x12: Skybox Disables
-void Scene_HeaderCmdSkyboxDisables(PlayState* play, SceneCmd* cmd) {
+void Scene_CommandSkyboxDisables(PlayState* play, SceneCmd* cmd) {
play->envCtx.skyboxDisabled = cmd->skyboxDisables.unk4;
play->envCtx.sunMoonDisabled = cmd->skyboxDisables.unk5;
}
// SceneTableEntry Header Command 0x10: Time Settings
-void Scene_HeaderCmdTimeSettings(PlayState* play, SceneCmd* cmd) {
- if (cmd->timeSettings.hour != 0xFF && cmd->timeSettings.min != 0xFF) {
+void Scene_CommandTimeSettings(PlayState* play, SceneCmd* cmd) {
+ if ((cmd->timeSettings.hour != 0xFF) && (cmd->timeSettings.min != 0xFF)) {
gSaveContext.skyboxTime = gSaveContext.save.time =
- (u16)(((cmd->timeSettings.hour + (cmd->timeSettings.min / 60.0f)) * 60.0f) / 0.021972656f);
+ CLOCK_TIME_ALT2_F(cmd->timeSettings.hour, cmd->timeSettings.min);
}
- if (cmd->timeSettings.unk6 != 0xFF) {
- play->envCtx.timeIncrement = cmd->timeSettings.unk6;
+ if (cmd->timeSettings.timeSpeed != 0xFF) {
+ play->envCtx.sceneTimeSpeed = cmd->timeSettings.timeSpeed;
} else {
- play->envCtx.timeIncrement = 0;
+ play->envCtx.sceneTimeSpeed = 0;
}
- if ((gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) && (play->envCtx.timeIncrement != 0)) {
- play->envCtx.timeIncrement = 5;
+ // Increase time speed during first cycle
+ if ((gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] == ITEM_NONE) && (play->envCtx.sceneTimeSpeed != 0)) {
+ play->envCtx.sceneTimeSpeed = 5;
}
if (gSaveContext.sunsSongState == SUNSSONG_INACTIVE) {
- REG(15) = play->envCtx.timeIncrement;
+ R_TIME_SPEED = play->envCtx.sceneTimeSpeed;
}
- play->envCtx.unk_4 = -(Math_SinS(((void)0, gSaveContext.save.time) - 0x8000) * 120.0f) * 25.0f;
- play->envCtx.unk_8 = (Math_CosS(((void)0, gSaveContext.save.time) - 0x8000) * 120.0f) * 25.0f;
- play->envCtx.unk_C = (Math_CosS(((void)0, gSaveContext.save.time) - 0x8000) * 20.0f) * 25.0f;
+ play->envCtx.sunPos.x = -(Math_SinS(((void)0, gSaveContext.save.time) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
+ play->envCtx.sunPos.y = (Math_CosS(((void)0, gSaveContext.save.time) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
+ play->envCtx.sunPos.z = (Math_CosS(((void)0, gSaveContext.save.time) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f;
- if ((play->envCtx.timeIncrement == 0) && (gSaveContext.save.cutscene < 0xFFF0)) {
+ if ((play->envCtx.sceneTimeSpeed == 0) && (gSaveContext.save.cutsceneIndex < 0xFFF0)) {
gSaveContext.skyboxTime = gSaveContext.save.time;
if ((gSaveContext.skyboxTime >= CLOCK_TIME(4, 0)) && (gSaveContext.skyboxTime < CLOCK_TIME(6, 30))) {
@@ -414,7 +418,7 @@ void Scene_HeaderCmdTimeSettings(PlayState* play, SceneCmd* cmd) {
}
// SceneTableEntry Header Command 0x05: Wind Settings
-void Scene_HeaderCmdWindSettings(PlayState* play, SceneCmd* cmd) {
+void Scene_CommandWindSettings(PlayState* play, SceneCmd* cmd) {
s8 temp1 = cmd->windSettings.west;
s8 temp2 = cmd->windSettings.vertical;
s8 temp3 = cmd->windSettings.south;
@@ -426,32 +430,32 @@ void Scene_HeaderCmdWindSettings(PlayState* play, SceneCmd* cmd) {
}
// SceneTableEntry Header Command 0x13: Exit List
-void Scene_HeaderCmdExitList(PlayState* play, SceneCmd* cmd) {
+void Scene_CommandExitList(PlayState* play, SceneCmd* cmd) {
play->setupExitList = Lib_SegmentedToVirtual(cmd->exitList.segment);
}
// SceneTableEntry Header Command 0x09: Undefined
-void Scene_HeaderCmd09(PlayState* play, SceneCmd* cmd) {
+void Scene_Command09(PlayState* play, SceneCmd* cmd) {
}
// SceneTableEntry Header Command 0x15: Sound Settings=
-void Scene_HeaderCmdSoundSettings(PlayState* play, SceneCmd* cmd) {
+void Scene_CommandSoundSettings(PlayState* play, SceneCmd* cmd) {
play->sequenceCtx.seqId = cmd->soundSettings.seqId;
play->sequenceCtx.ambienceId = cmd->soundSettings.ambienceId;
if (gSaveContext.seqId == (u8)NA_BGM_DISABLED ||
- Audio_GetActiveSequence(SEQ_PLAYER_BGM_MAIN) == NA_BGM_FINAL_HOURS) {
+ AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) == NA_BGM_FINAL_HOURS) {
Audio_SetSpec(cmd->soundSettings.specId);
}
}
// SceneTableEntry Header Command 0x16: Echo Setting
-void Scene_HeaderCmdEchoSetting(PlayState* play, SceneCmd* cmd) {
+void Scene_CommandEchoSetting(PlayState* play, SceneCmd* cmd) {
play->roomCtx.curRoom.echo = cmd->echoSettings.echo;
}
// SceneTableEntry Header Command 0x18: Alternate Header List=
-void Scene_HeaderCmdAltHeaderList(PlayState* play, SceneCmd* cmd) {
+void Scene_CommandAltHeaderList(PlayState* play, SceneCmd* cmd) {
SceneCmd** altHeaderList;
SceneCmd* altHeader;
@@ -460,40 +464,40 @@ void Scene_HeaderCmdAltHeaderList(PlayState* play, SceneCmd* cmd) {
altHeader = altHeaderList[gSaveContext.sceneLayer - 1];
if (altHeader != NULL) {
- Scene_ProcessHeader(play, Lib_SegmentedToVirtual(altHeader));
+ Scene_ExecuteCommands(play, Lib_SegmentedToVirtual(altHeader));
(cmd + 1)->base.code = 0x14;
}
}
}
-// SceneTableEntry Header Command 0x17: Cutscene List
-void Scene_HeaderCmdCutsceneList(PlayState* play, SceneCmd* cmd) {
- play->csCtx.sceneCsCount = cmd->cutsceneList.sceneCsCount;
- play->csCtx.sceneCsList = Lib_SegmentedToVirtual(cmd->cutsceneList.segment);
+// SceneTableEntry Header Command 0x17: Cutscene Script List
+void Scene_CommandCutsceneScriptList(PlayState* play, SceneCmd* cmd) {
+ play->csCtx.scriptListCount = cmd->scriptList.scriptListCount;
+ play->csCtx.scriptList = Lib_SegmentedToVirtual(cmd->scriptList.segment);
}
-// SceneTableEntry Header Command 0x1B: Actor Cutscene List
-void Scene_HeaderCmdActorCutsceneList(PlayState* play, SceneCmd* cmd) {
- ActorCutscene_Init(play, Lib_SegmentedToVirtual(cmd->cutsceneActorList.segment), cmd->cutsceneActorList.num);
+// SceneTableEntry Header Command 0x1B: Cutscene List
+void Scene_CommandCutsceneList(PlayState* play, SceneCmd* cmd) {
+ CutsceneManager_Init(play, Lib_SegmentedToVirtual(cmd->cutsceneList.segment), cmd->cutsceneList.num);
}
// SceneTableEntry Header Command 0x1C: Mini Maps
-void Scene_HeaderCmdMiniMap(PlayState* play, SceneCmd* cmd) {
+void Scene_CommandMiniMap(PlayState* play, SceneCmd* cmd) {
func_80104CF4(play);
func_8010549C(play, cmd->minimapSettings.segment);
}
// SceneTableEntry Header Command 0x1D: Undefined
-void Scene_HeaderCmd1D(PlayState* play, SceneCmd* cmd) {
+void Scene_Command1D(PlayState* play, SceneCmd* cmd) {
}
// SceneTableEntry Header Command 0x1E: Minimap Compass Icon Info
-void Scene_HeaderCmdMiniMapCompassInfo(PlayState* play, SceneCmd* cmd) {
+void Scene_CommandMiniMapCompassInfo(PlayState* play, SceneCmd* cmd) {
func_8010565C(play, cmd->minimapChests.num, cmd->minimapChests.segment);
}
// SceneTableEntry Header Command 0x19: Sets Region Visited Flag
-void Scene_HeaderCmdSetRegionVisitedFlag(PlayState* play, SceneCmd* cmd) {
+void Scene_CommandSetRegionVisitedFlag(PlayState* play, SceneCmd* cmd) {
s16 j = 0;
s16 i = 0;
@@ -515,13 +519,13 @@ void Scene_HeaderCmdSetRegionVisitedFlag(PlayState* play, SceneCmd* cmd) {
}
if (i < REGION_MAX) {
- gSaveContext.save.regionsVisited =
- (gBitFlags[i] | gSaveContext.save.regionsVisited) | gSaveContext.save.regionsVisited;
+ gSaveContext.save.saveInfo.regionsVisited =
+ (gBitFlags[i] | gSaveContext.save.saveInfo.regionsVisited) | gSaveContext.save.saveInfo.regionsVisited;
}
}
// SceneTableEntry Header Command 0x1A: Material Animations
-void Scene_HeaderCmdAnimatedMaterials(PlayState* play, SceneCmd* cmd) {
+void Scene_CommandAnimatedMaterials(PlayState* play, SceneCmd* cmd) {
play->sceneMaterialAnims = (AnimatedMaterial*)Lib_SegmentedToVirtual(cmd->textureAnimations.segment);
}
@@ -532,72 +536,73 @@ 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,
+};
+
/**
* Executes all of the commands in a scene or room header.
*/
-s32 Scene_ProcessHeader(PlayState* play, SceneCmd* header) {
- static void (*sceneCmdHandlers[])(PlayState*, SceneCmd*) = {
- Scene_HeaderCmdSpawnList,
- Scene_HeaderCmdActorList,
- Scene_HeaderCmdActorCutsceneCamList,
- Scene_HeaderCmdColHeader,
- Scene_HeaderCmdRoomList,
- Scene_HeaderCmdWindSettings,
- Scene_HeaderCmdEntranceList,
- Scene_HeaderCmdSpecialFiles,
- Scene_HeaderCmdRoomBehavior,
- Scene_HeaderCmd09,
- Scene_HeaderCmdMesh,
- Scene_HeaderCmdObjectList,
- Scene_HeaderCmdLightList,
- Scene_HeaderCmdPathList,
- Scene_HeaderCmdTransiActorList,
- Scene_HeaderCmdEnvLightSettings,
- Scene_HeaderCmdTimeSettings,
- Scene_HeaderCmdSkyboxSettings,
- Scene_HeaderCmdSkyboxDisables,
- Scene_HeaderCmdExitList,
- NULL,
- Scene_HeaderCmdSoundSettings,
- Scene_HeaderCmdEchoSetting,
- Scene_HeaderCmdCutsceneList,
- Scene_HeaderCmdAltHeaderList,
- Scene_HeaderCmdSetRegionVisitedFlag,
- Scene_HeaderCmdAnimatedMaterials,
- Scene_HeaderCmdActorCutsceneList,
- Scene_HeaderCmdMiniMap,
- Scene_HeaderCmd1D,
- Scene_HeaderCmdMiniMapCompassInfo,
- };
+s32 Scene_ExecuteCommands(PlayState* play, SceneCmd* sceneCmd) {
u32 cmdId;
while (true) {
- cmdId = header->base.code;
+ cmdId = sceneCmd->base.code;
if (cmdId == SCENE_CMD_ID_END) {
break;
}
if (cmdId < SCENE_CMD_MAX) {
- sceneCmdHandlers[cmdId](play, header);
+ sSceneCmdHandlers[cmdId](play, sceneCmd);
}
- header++;
+ sceneCmd++;
}
return 0;
}
/**
- * Creates an entrance from the scene, spawn, and lyaer.
+ * Creates an entrance from the scene, spawn, and layer.
*/
u16 Entrance_Create(s32 scene, s32 spawn, s32 layer) {
return (scene << 9) | (spawn << 4) | layer;
}
/**
- * Creates an layer 0 entranace from the current entrance and the given spawn.
+ * Creates an layer 0 entrance from the current entrance and the given spawn.
*/
u16 Entrance_CreateFromSpawn(s32 spawn) {
- return Entrance_Create(gSaveContext.save.entrance >> 9, spawn, 0);
+ return Entrance_Create((u32)gSaveContext.save.entrance >> 9, spawn, 0);
}
diff --git a/src/code/z_scene_proc.c b/src/code/z_scene_proc.c
index 4de83bcaa..6ec3f2b80 100644
--- a/src/code/z_scene_proc.c
+++ b/src/code/z_scene_proc.c
@@ -1,3 +1,4 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
s32 sMatAnimStep;
@@ -22,7 +23,7 @@ static Gfx sSceneDrawDefaultDL[] = {
/**
* Executes the current scene draw config handler.
*/
-void Scene_ExecuteDrawConfig(PlayState* play) {
+void Scene_Draw(PlayState* play) {
static void (*sceneDrawConfigHandlers[])(PlayState*) = {
Scene_DrawConfigDefault,
Scene_DrawConfigMatAnim,
@@ -113,23 +114,23 @@ void AnimatedMat_DrawTwoTexScroll(PlayState* play, s32 segment, void* params) {
* Generates a displaylist that sets the prim and env color, and stores it in the provided segment ID.
*/
void AnimatedMat_SetColor(PlayState* play, s32 segment, F3DPrimColor* primColorResult, F3DEnvColor* envColor) {
- Gfx* colorDList = GRAPH_ALLOC(play->state.gfxCtx, sizeof(Gfx) * 4);
+ Gfx* gfx = GRAPH_ALLOC(play->state.gfxCtx, 3 * sizeof(Gfx));
OPEN_DISPS(play->state.gfxCtx);
// clang-format off
- if (sMatAnimFlags & 1) { gSPSegment(POLY_OPA_DISP++, segment, colorDList); }
- if (sMatAnimFlags & 2) { gSPSegment(POLY_XLU_DISP++, segment, colorDList); }
+ if (sMatAnimFlags & 1) { gSPSegment(POLY_OPA_DISP++, segment, gfx); }
+ if (sMatAnimFlags & 2) { gSPSegment(POLY_XLU_DISP++, segment, gfx); }
// clang-format on
- gDPSetPrimColor(colorDList++, 0, primColorResult->lodFrac, primColorResult->r, primColorResult->g,
- primColorResult->b, (u8)(primColorResult->a * sMatAnimAlphaRatio));
+ gDPSetPrimColor(gfx++, 0, primColorResult->lodFrac, primColorResult->r, primColorResult->g, primColorResult->b,
+ (u8)(primColorResult->a * sMatAnimAlphaRatio));
if (envColor != NULL) {
- gDPSetEnvColor(colorDList++, envColor->r, envColor->g, envColor->b, envColor->a);
+ gDPSetEnvColor(gfx++, envColor->r, envColor->g, envColor->b, envColor->a);
}
- gSPEndDisplayList(colorDList++);
+ gSPEndDisplayList(gfx++);
CLOSE_DISPS(play->state.gfxCtx);
}
@@ -709,8 +710,8 @@ void Scene_DrawConfigGreatBayTemple(PlayState* play) {
};
s32 lodFrac;
s32 i;
- Gfx* dListHead;
- Gfx* dList;
+ Gfx* gfx;
+ Gfx* gfxHead;
if (Flags_GetSwitch(play, 0x33) && Flags_GetSwitch(play, 0x34) && Flags_GetSwitch(play, 0x35) &&
Flags_GetSwitch(play, 0x36)) {
@@ -719,16 +720,16 @@ void Scene_DrawConfigGreatBayTemple(PlayState* play) {
BgCheck_UnsetContextFlags(&play->colCtx, BGCHECK_FLAG_REVERSE_CONVEYOR_FLOW);
}
- dList = GRAPH_ALLOC(play->state.gfxCtx, sizeof(Gfx) * 18);
+ gfxHead = GRAPH_ALLOC(play->state.gfxCtx, 18 * sizeof(Gfx));
AnimatedMat_Draw(play, play->sceneMaterialAnims);
OPEN_DISPS(play->state.gfxCtx);
- for (dListHead = dList, i = 0; i < 9; i++, dListHead += 2) {
+ for (gfx = gfxHead, i = 0; i < 9; i++, gfx += 2) {
lodFrac = 0;
- bcopy(greatBayTempleColorSetDL, dListHead, sizeof(greatBayTempleColorSetDL));
+ bcopy(greatBayTempleColorSetDL, gfx, sizeof(greatBayTempleColorSetDL));
switch (i) {
case 0:
@@ -779,11 +780,11 @@ void Scene_DrawConfigGreatBayTemple(PlayState* play) {
break;
}
- gDPSetPrimColor(dListHead, 0, lodFrac, 255, 255, 255, 255);
+ gDPSetPrimColor(gfx, 0, lodFrac, 255, 255, 255, 255);
}
- gSPSegment(POLY_OPA_DISP++, 0x06, dList);
- gSPSegment(POLY_XLU_DISP++, 0x06, dList);
+ gSPSegment(POLY_OPA_DISP++, 0x06, gfxHead);
+ gSPSegment(POLY_XLU_DISP++, 0x06, gfxHead);
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/code/z_scene_table.c b/src/code/z_scene_table.c
index ed4549966..f80ad551d 100644
--- a/src/code/z_scene_table.c
+++ b/src/code/z_scene_table.c
@@ -1,10 +1,10 @@
#include "global.h"
#define SCENE_ENTRY(name, textId, config) \
- { { SEGMENT_ROM_START(name), SEGMENT_ROM_END(name) }, textId, 0, config, 0 }
+ { { SEGMENT_ROM_START(name), SEGMENT_ROM_END(name) }, textId, 0, config, 0, 0 }
#define SCENE_ENTRY_NONE() \
- { { 0, 0 }, 0, 0, 0, 0 }
+ { { 0, 0 }, 0, 0, 0, 0, 0 }
SceneTableEntry gSceneTable[] = {
/* 0x00 */ SCENE_ENTRY(Z2_20SICHITAI2, 0x0116, SCENE_DRAW_CFG_MAT_ANIM),
diff --git a/src/code/z_schedule.c b/src/code/z_schedule.c
index 6a2492631..fdefb0f42 100644
--- a/src/code/z_schedule.c
+++ b/src/code/z_schedule.c
@@ -8,9 +8,9 @@
s32 Schedule_CheckFlagS(PlayState* play, u8** script, ScheduleOutput* output) {
ScheduleCmdCheckFlagS* cmd = (ScheduleCmdCheckFlagS*)*script;
- u16 flag = (cmd->flagByte << 8) | cmd->flagMask;
+ u16 flag = PACK_WEEKEVENTREG_FLAG(cmd->flagByte, cmd->flagMask);
- if (gSaveContext.save.weekEventReg[flag >> 8] & (flag & 0xFF)) {
+ if (CHECK_WEEKEVENTREG(flag)) {
*script += cmd->offset;
}
@@ -19,9 +19,9 @@ s32 Schedule_CheckFlagS(PlayState* play, u8** script, ScheduleOutput* output) {
s32 Schedule_CheckFlagL(PlayState* play, u8** script, ScheduleOutput* output) {
ScheduleCmdCheckFlagL* cmd = (ScheduleCmdCheckFlagL*)*script;
- u16 flag = (cmd->flagByte << 8) | cmd->flagMask;
+ u16 flag = PACK_WEEKEVENTREG_FLAG(cmd->flagByte, cmd->flagMask);
- if (gSaveContext.save.weekEventReg[flag >> 8] & (flag & 0xFF)) {
+ if (CHECK_WEEKEVENTREG(flag)) {
*script += (s16)((cmd->offsetH << 8) | cmd->offsetL);
}
diff --git a/src/code/z_shrink_window.c b/src/code/z_shrink_window.c
index acbdb5c5b..c4084a18c 100644
--- a/src/code/z_shrink_window.c
+++ b/src/code/z_shrink_window.c
@@ -2,6 +2,7 @@
* File: z_shrink_window.c
* Description: Draws black top/bottom/side borders on the viewing window (e.g. Z-targeting, talking to NPC)
*/
+
#include "prevent_bss_reordering.h"
#include "global.h"
#include "z64shrink_window.h"
diff --git a/src/code/z_skelanime.c b/src/code/z_skelanime.c
index 088f1469f..085cb4de2 100644
--- a/src/code/z_skelanime.c
+++ b/src/code/z_skelanime.c
@@ -1,18 +1,26 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
#define ANIM_INTERP 1
-s32 LinkAnimation_Loop(PlayState* play, SkelAnime* skelAnime);
-s32 LinkAnimation_Once(PlayState* play, SkelAnime* skelAnime);
+s32 PlayerAnimation_Loop(PlayState* play, SkelAnime* skelAnime);
+s32 PlayerAnimation_Once(PlayState* play, SkelAnime* skelAnime);
s32 SkelAnime_LoopFull(SkelAnime* skelAnime);
s32 SkelAnime_LoopPartial(SkelAnime* skelAnime);
s32 SkelAnime_Once(SkelAnime* skelAnime);
void Animation_PlayLoop(SkelAnime* skelAnime, AnimationHeader* animation);
void SkelAnime_UpdateTranslation(SkelAnime* skelAnime, Vec3f* diff, s16 angle);
-void LinkAnimation_Change(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation, f32 playSpeed,
- f32 startFrame, f32 endFrame, u8 mode, f32 morphFrames);
+void PlayerAnimation_Change(PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation, f32 playSpeed,
+ f32 startFrame, f32 endFrame, u8 mode, f32 morphFrames);
void SkelAnime_CopyFrameTable(SkelAnime* skelAnime, Vec3s* dst, Vec3s* src);
+void AnimationContext_LoadFrame(struct PlayState* play, AnimationEntryData* data);
+void AnimationContext_CopyAll(struct PlayState* play, AnimationEntryData* data);
+void AnimationContext_Interp(struct PlayState* play, AnimationEntryData* data);
+void AnimationContext_CopyTrue(struct PlayState* play, AnimationEntryData* data);
+void AnimationContext_CopyFalse(struct PlayState* play, AnimationEntryData* data);
+void AnimationContext_MoveActor(struct PlayState* play, AnimationEntryData* data);
+
static AnimationEntryCallback sAnimationLoadDone[] = {
AnimationContext_LoadFrame, AnimationContext_CopyAll, AnimationContext_Interp,
AnimationContext_CopyTrue, AnimationContext_CopyFalse, AnimationContext_MoveActor,
@@ -43,7 +51,7 @@ void SkelAnime_DrawLimbLod(PlayState* play, s32 limbIndex, void** skeleton, Vec3
pos.z = limb->jointPos.z;
dList = limb->dLists[lod];
- if ((overrideLimbDraw == NULL) || (overrideLimbDraw(play, limbIndex, &dList, &pos, &rot, actor) == 0)) {
+ if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, limbIndex, &dList, &pos, &rot, actor)) {
Matrix_TranslateRotateZYX(&pos, &rot);
if (dList != NULL) {
Gfx* polyTemp = POLY_OPA_DISP;
@@ -200,7 +208,7 @@ void SkelAnime_DrawFlexLod(PlayState* play, void** skeleton, Vec3s* jointTable,
Gfx* limbDList;
Vec3f pos;
Vec3s rot;
- Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, ALIGN16(sizeof(Mtx) * dListCount));
+ Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, dListCount * sizeof(Mtx));
if (skeleton == NULL) {
return;
@@ -418,7 +426,7 @@ void SkelAnime_DrawFlexOpa(PlayState* play, void** skeleton, Vec3s* jointTable,
Gfx* limbDList;
Vec3f pos;
Vec3s rot;
- Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, ALIGN16(sizeof(Mtx) * dListCount));
+ Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, dListCount * sizeof(Mtx));
if (skeleton == NULL) {
return;
@@ -560,7 +568,7 @@ void SkelAnime_DrawTransformFlexOpa(PlayState* play, void** skeleton, Vec3s* joi
OPEN_DISPS(play->state.gfxCtx);
- mtx = GRAPH_ALLOC(play->state.gfxCtx, ALIGN16(sizeof(Mtx) * dListCount));
+ mtx = GRAPH_ALLOC(play->state.gfxCtx, dListCount * sizeof(Mtx));
gSPSegment(POLY_OPA_DISP++, 0x0D, mtx);
@@ -629,7 +637,8 @@ void SkelAnime_GetFrameData(AnimationHeader* animation, s32 frame, s32 limbCount
frameTable->x = jointIndices->x >= staticIndexMax ? dynamicData[jointIndices->x] : frameData[jointIndices->x];
frameTable->y = jointIndices->y >= staticIndexMax ? dynamicData[jointIndices->y] : frameData[jointIndices->y];
frameTable->z = jointIndices->z >= staticIndexMax ? dynamicData[jointIndices->z] : frameData[jointIndices->z];
- jointIndices++, frameTable++;
+ jointIndices++;
+ frameTable++;
}
}
@@ -822,7 +831,7 @@ Gfx* SkelAnime_DrawFlex(PlayState* play, void** skeleton, Vec3s* jointTable, s32
return NULL;
}
- mtx = GRAPH_ALLOC(play->state.gfxCtx, ALIGN16(sizeof(Mtx) * dListCount));
+ mtx = GRAPH_ALLOC(play->state.gfxCtx, dListCount * sizeof(Mtx));
gSPSegment(gfx++, 0x0D, mtx);
@@ -874,7 +883,7 @@ Gfx* SkelAnime_DrawFlex(PlayState* play, void** skeleton, Vec3s* jointTable, s32
s16 SkelAnime_GetFrameDataLegacy(LegacyAnimationHeader* animation, s32 frame, Vec3s* frameTable) {
LegacyAnimationHeader* animHeader = Lib_SegmentedToVirtual(animation);
s16 limbCount = animHeader->limbCount;
- JointKey* key = Lib_SegmentedToVirtual(animHeader->jointKey);
+ LegacyJointKey* key = Lib_SegmentedToVirtual(animHeader->jointKey);
s16* frameData = Lib_SegmentedToVirtual(animHeader->frameData);
s16* staticData = &frameData[0];
s16* dynamicData = &frameData[frame];
@@ -899,7 +908,7 @@ s16 SkelAnime_GetFrameDataLegacy(LegacyAnimationHeader* animation, s32 frame, Ve
/**
* Used by legacy animation format
*/
-s16 Animation_GetLimbCount2(LegacyAnimationHeader* animation) {
+s16 Animation_GetLimbCountLegacy(LegacyAnimationHeader* animation) {
LegacyAnimationHeader* animHeader = Lib_SegmentedToVirtual(animation);
return animHeader->limbCount;
@@ -908,7 +917,7 @@ s16 Animation_GetLimbCount2(LegacyAnimationHeader* animation) {
/**
* Used by legacy animation format
*/
-s16 Animation_GetLength2(LegacyAnimationHeader* animation) {
+s16 Animation_GetLengthLegacy(LegacyAnimationHeader* animation) {
LegacyAnimationHeader* animHeader = Lib_SegmentedToVirtual(animation);
return animHeader->frameCount;
@@ -917,7 +926,7 @@ s16 Animation_GetLength2(LegacyAnimationHeader* animation) {
/**
* Used by legacy animation format
*/
-s16 Animation_GetLastFrame2(LegacyAnimationHeader* animation) {
+s16 Animation_GetLastFrameLegacy(LegacyAnimationHeader* animation) {
AnimationHeaderCommon* animHeader = Lib_SegmentedToVirtual(animation);
return animHeader->frameCount - 1;
@@ -977,7 +986,7 @@ AnimationEntry* AnimationContext_AddEntry(AnimationContext* animationCtx, Animat
AnimationEntry* entry;
s16 index = animationCtx->animationCount;
- if (index >= ANIMATION_ENTRY_MAX) {
+ if (index >= ARRAY_COUNT(animationCtx->entries)) {
return NULL;
}
@@ -987,21 +996,25 @@ AnimationEntry* AnimationContext_AddEntry(AnimationContext* animationCtx, Animat
return entry;
}
+#define LINK_ANIMETION_OFFSET(addr, offset) \
+ (SEGMENT_ROM_START(link_animetion) + ((uintptr_t)addr & 0xFFFFFF) + ((u32)offset))
+
/**
- * Requests loading frame data from the Link animation into frameTable
+ * Requests loading frame data from the Player animation into frameTable
*/
-void AnimationContext_SetLoadFrame(PlayState* play, LinkAnimationHeader* animation, s32 frame, s32 limbCount,
+void AnimationContext_SetLoadFrame(PlayState* play, PlayerAnimationHeader* animation, s32 frame, s32 limbCount,
Vec3s* frameTable) {
AnimationEntry* entry = AnimationContext_AddEntry(&play->animationCtx, ANIMATION_LINKANIMETION);
if (entry != NULL) {
- LinkAnimationHeader* linkAnimHeader = Lib_SegmentedToVirtual(animation);
- u32 ram = frameTable;
+ PlayerAnimationHeader* playerAnimHeader = Lib_SegmentedToVirtual(animation);
+ void* ram = (void*)frameTable;
- osCreateMesgQueue(&entry->data.load.msgQueue, &entry->data.load.msg, 1);
- DmaMgr_SendRequestImpl(&entry->data.load.req, ram,
- LINK_ANIMETION_OFFSET(linkAnimHeader->segment, (sizeof(Vec3s) * limbCount + 2) * frame),
- sizeof(Vec3s) * limbCount + 2, 0, &entry->data.load.msgQueue, NULL);
+ osCreateMesgQueue(&entry->data.load.msgQueue, entry->data.load.msg, ARRAY_COUNT(entry->data.load.msg));
+ DmaMgr_SendRequestImpl(
+ &entry->data.load.req, ram,
+ LINK_ANIMETION_OFFSET(playerAnimHeader->linkAnimSegment, (sizeof(Vec3s) * limbCount + sizeof(s16)) * frame),
+ sizeof(Vec3s) * limbCount + sizeof(s16), 0, &entry->data.load.msgQueue, NULL);
}
}
@@ -1078,7 +1091,7 @@ void AnimationContext_SetMoveActor(PlayState* play, Actor* actor, SkelAnime* ske
}
/**
- * Receives the request for Link's animation frame data
+ * Receives the request for Player's animation frame data
*/
void AnimationContext_LoadFrame(PlayState* play, AnimationEntryData* data) {
AnimEntryLoadFrame* entry = &data->load;
@@ -1183,12 +1196,12 @@ void AnimationContext_Update(PlayState* play, AnimationContext* animationCtx) {
}
/**
- * Initializes a skeleton to be used with Link animations to a looping animation, dynamically allocating the frame
+ * Initializes a skeleton to be used with Player animations to a looping animation, dynamically allocating the frame
* tables if not given.
*/
-void SkelAnime_InitLink(PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeader* skeletonHeaderSeg,
- LinkAnimationHeader* animation, s32 flags, Vec3s* jointTable, Vec3s* morphTable,
- s32 limbBufCount) {
+void SkelAnime_InitPlayer(PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeader* skeletonHeaderSeg,
+ PlayerAnimationHeader* animation, s32 flags, void* jointTableBuffer, void* morphTableBuffer,
+ s32 limbBufCount) {
FlexSkeletonHeader* skeletonHeader;
s32 headerJointCount;
s32 limbCount;
@@ -1213,63 +1226,63 @@ void SkelAnime_InitLink(PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeade
allocSize = sizeof(Vec3s) * limbCount;
if (flags & 8) {
- allocSize += 2;
+ allocSize += sizeof(u16);
}
- if (jointTable == NULL) {
+ if (jointTableBuffer == NULL) {
skelAnime->jointTable = ZeldaArena_Malloc(allocSize);
skelAnime->morphTable = ZeldaArena_Malloc(allocSize);
} else {
- skelAnime->jointTable = (Vec3s*)ALIGN16((u32)jointTable);
- skelAnime->morphTable = (Vec3s*)ALIGN16((u32)morphTable);
+ skelAnime->jointTable = (void*)ALIGN16((uintptr_t)jointTableBuffer);
+ skelAnime->morphTable = (void*)ALIGN16((uintptr_t)morphTableBuffer);
}
- LinkAnimation_Change(play, skelAnime, animation, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f);
+ PlayerAnimation_Change(play, skelAnime, animation, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f);
}
/**
- * Sets the update function of a SkelAnime that uses Link animations based on its mode
+ * Sets the update function of a SkelAnime that uses Player animations based on its mode
*/
-void LinkAnimation_SetUpdateFunction(SkelAnime* skelAnime) {
+void PlayerAnimation_SetUpdateFunction(SkelAnime* skelAnime) {
if (skelAnime->mode <= ANIMMODE_LOOP_INTERP) {
- skelAnime->update.link = LinkAnimation_Loop;
+ skelAnime->update.player = PlayerAnimation_Loop;
} else {
- skelAnime->update.link = LinkAnimation_Once;
+ skelAnime->update.player = PlayerAnimation_Once;
}
skelAnime->morphWeight = 0.0f;
}
/**
- * Advances the current Link animation and updates all frame tables. If the animation plays once, returns true when it
+ * Advances the current Player animation and updates all frame tables. If the animation plays once, returns true when it
* finishes.
*/
-s32 LinkAnimation_Update(PlayState* play, SkelAnime* skelAnime) {
- return skelAnime->update.link(play, skelAnime);
+s32 PlayerAnimation_Update(PlayState* play, SkelAnime* skelAnime) {
+ return skelAnime->update.player(play, skelAnime);
}
/**
* Requests an interpolation between the pose in jointTable to the one in morphTable, advancing the morph but not the
* animation frame
*/
-s32 LinkAnimation_Morph(PlayState* play, SkelAnime* skelAnime) {
+s32 PlayerAnimation_Morph(PlayState* play, SkelAnime* skelAnime) {
f32 prevMorphWeight = skelAnime->morphWeight;
f32 updateRate = (s32)play->state.framerateDivisor * 0.5f;
skelAnime->morphWeight -= skelAnime->morphRate * updateRate;
if (skelAnime->morphWeight <= 0.0f) {
- LinkAnimation_SetUpdateFunction(skelAnime);
+ PlayerAnimation_SetUpdateFunction(skelAnime);
}
AnimationContext_SetInterp(play, skelAnime->limbCount, skelAnime->jointTable, skelAnime->morphTable,
1.0f - (skelAnime->morphWeight / prevMorphWeight));
- return 0;
+ return false;
}
/**
- * Requests a load of the next frame of a Link animation, advances the morph, and requests an interpolation between
+ * Requests a load of the next frame of a Player animation, advances the morph, and requests an interpolation between
* jointTable and morphTable
*/
-void LinkAnimation_AnimateFrame(PlayState* play, SkelAnime* skelAnime) {
+void PlayerAnimation_AnimateFrame(PlayState* play, SkelAnime* skelAnime) {
AnimationContext_SetLoadFrame(play, skelAnime->animation, skelAnime->curFrame, skelAnime->limbCount,
skelAnime->jointTable);
if (skelAnime->morphWeight != 0) {
@@ -1285,9 +1298,9 @@ void LinkAnimation_AnimateFrame(PlayState* play, SkelAnime* skelAnime) {
}
/**
- * Advances a Link animation that loops over its full length
+ * Advances a Player animation that loops over its full length
*/
-s32 LinkAnimation_Loop(PlayState* play, SkelAnime* skelAnime) {
+s32 PlayerAnimation_Loop(PlayState* play, SkelAnime* skelAnime) {
f32 updateRate = (s32)play->state.framerateDivisor * 0.5f;
skelAnime->curFrame += skelAnime->playSpeed * updateRate;
@@ -1296,19 +1309,19 @@ s32 LinkAnimation_Loop(PlayState* play, SkelAnime* skelAnime) {
} else if (skelAnime->animLength <= skelAnime->curFrame) {
skelAnime->curFrame -= skelAnime->animLength;
}
- LinkAnimation_AnimateFrame(play, skelAnime);
- return 0;
+ PlayerAnimation_AnimateFrame(play, skelAnime);
+ return false;
}
/**
- * Advances a Link animation that stops at endFrame and returns true when it is reached.
+ * Advances a Player animation that stops at endFrame and returns true when it is reached.
*/
-s32 LinkAnimation_Once(PlayState* play, SkelAnime* skelAnime) {
+s32 PlayerAnimation_Once(PlayState* play, SkelAnime* skelAnime) {
f32 updateRate = (s32)play->state.framerateDivisor * 0.5f;
if (skelAnime->curFrame == skelAnime->endFrame) {
- LinkAnimation_AnimateFrame(play, skelAnime);
- return 1;
+ PlayerAnimation_AnimateFrame(play, skelAnime);
+ return true;
}
skelAnime->curFrame += skelAnime->playSpeed * updateRate;
@@ -1322,8 +1335,8 @@ s32 LinkAnimation_Once(PlayState* play, SkelAnime* skelAnime) {
skelAnime->curFrame -= skelAnime->animLength;
}
}
- LinkAnimation_AnimateFrame(play, skelAnime);
- return 0;
+ PlayerAnimation_AnimateFrame(play, skelAnime);
+ return false;
}
/**
@@ -1335,28 +1348,28 @@ void Animation_SetMorph(PlayState* play, SkelAnime* skelAnime, f32 morphFrames)
}
/**
- * General way to set a new Link animation, allowing choice of playback speed, start frame, end frame, play mode, and
+ * General way to set a new Player animation, allowing choice of playback speed, start frame, end frame, play mode, and
* number of transition frames. Positive morph frames morph from the current pose to the start pose of the new
* animation, then start the new animation. Negative morph frames start the new animation immediately, modified by the
* pose immediately before the animation change.
*/
-void LinkAnimation_Change(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation, f32 playSpeed,
- f32 startFrame, f32 endFrame, u8 mode, f32 morphFrames) {
+void PlayerAnimation_Change(PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation, f32 playSpeed,
+ f32 startFrame, f32 endFrame, u8 mode, f32 morphFrames) {
skelAnime->mode = mode;
if ((morphFrames != 0.0f) && ((animation != skelAnime->animation) || (startFrame != skelAnime->curFrame))) {
if (morphFrames < 0) {
- LinkAnimation_SetUpdateFunction(skelAnime);
+ PlayerAnimation_SetUpdateFunction(skelAnime);
SkelAnime_CopyFrameTable(skelAnime, skelAnime->morphTable, skelAnime->jointTable);
morphFrames = -morphFrames;
} else {
- skelAnime->update.link = LinkAnimation_Morph;
+ skelAnime->update.player = PlayerAnimation_Morph;
AnimationContext_SetLoadFrame(play, animation, (s32)startFrame, skelAnime->limbCount,
skelAnime->morphTable);
}
skelAnime->morphWeight = 1.0f;
skelAnime->morphRate = 1.0f / morphFrames;
} else {
- LinkAnimation_SetUpdateFunction(skelAnime);
+ PlayerAnimation_SetUpdateFunction(skelAnime);
AnimationContext_SetLoadFrame(play, animation, (s32)startFrame, skelAnime->limbCount, skelAnime->jointTable);
skelAnime->morphWeight = 0.0f;
}
@@ -1371,99 +1384,101 @@ void LinkAnimation_Change(PlayState* play, SkelAnime* skelAnime, LinkAnimationHe
}
/**
- * Immediately changes to a Link animation that plays once at the default speed.
+ * Immediately changes to a Player animation that plays once at the default speed.
*/
-void LinkAnimation_PlayOnce(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation) {
- LinkAnimation_Change(play, skelAnime, animation, 1.0f, 0.0f, Animation_GetLastFrame(&animation->common),
- ANIMMODE_ONCE, 0.0f);
+void PlayerAnimation_PlayOnce(PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation) {
+ PlayerAnimation_Change(play, skelAnime, animation, 1.0f, 0.0f, Animation_GetLastFrame(&animation->common),
+ ANIMMODE_ONCE, 0.0f);
}
/**
- * Immediately changes to a Link animation that plays once at the specified speed.
+ * Immediately changes to a Player animation that plays once at the specified speed.
*/
-void LinkAnimation_PlayOnceSetSpeed(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation,
- f32 playSpeed) {
- LinkAnimation_Change(play, skelAnime, animation, playSpeed, 0.0f, Animation_GetLastFrame(&animation->common),
- ANIMMODE_ONCE, 0.0f);
+void PlayerAnimation_PlayOnceSetSpeed(PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation,
+ f32 playSpeed) {
+ PlayerAnimation_Change(play, skelAnime, animation, playSpeed, 0.0f, Animation_GetLastFrame(&animation->common),
+ ANIMMODE_ONCE, 0.0f);
}
/**
- * Immediately changes to a Link animation that loops at the default speed.
+ * Immediately changes to a Player animation that loops at the default speed.
*/
-void LinkAnimation_PlayLoop(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation) {
- LinkAnimation_Change(play, skelAnime, animation, 1.0f, 0.0f, Animation_GetLastFrame(&animation->common),
- ANIMMODE_LOOP, 0.0f);
+void PlayerAnimation_PlayLoop(PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation) {
+ PlayerAnimation_Change(play, skelAnime, animation, 1.0f, 0.0f, Animation_GetLastFrame(&animation->common),
+ ANIMMODE_LOOP, 0.0f);
}
/**
- * Immediately changes to a Link animation that loops at the specified speed.
+ * Immediately changes to a Player animation that loops at the specified speed.
*/
-void LinkAnimation_PlayLoopSetSpeed(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation,
- f32 playSpeed) {
- LinkAnimation_Change(play, skelAnime, animation, playSpeed, 0.0f, Animation_GetLastFrame(&animation->common),
- ANIMMODE_LOOP, 0.0f);
+void PlayerAnimation_PlayLoopSetSpeed(PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation,
+ f32 playSpeed) {
+ PlayerAnimation_Change(play, skelAnime, animation, playSpeed, 0.0f, Animation_GetLastFrame(&animation->common),
+ ANIMMODE_LOOP, 0.0f);
}
/**
* Requests copying jointTable to morphTable
*/
-void LinkAnimation_CopyJointToMorph(PlayState* play, SkelAnime* skelAnime) {
+void PlayerAnimation_CopyJointToMorph(PlayState* play, SkelAnime* skelAnime) {
AnimationContext_SetCopyAll(play, skelAnime->limbCount, skelAnime->morphTable, skelAnime->jointTable);
}
/**
* Requests copying morphTable to jointTable
*/
-void LinkAnimation_CopyMorphToJoint(PlayState* play, SkelAnime* skelAnime) {
+void PlayerAnimation_CopyMorphToJoint(PlayState* play, SkelAnime* skelAnime) {
AnimationContext_SetCopyAll(play, skelAnime->limbCount, skelAnime->jointTable, skelAnime->morphTable);
}
/**
- * Requests loading frame data from the Link animation into morphTable
+ * Requests loading frame data from the Player animation into morphTable
*/
-void LinkAnimation_LoadToMorph(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation, f32 frame) {
+void PlayerAnimation_LoadToMorph(PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation, f32 frame) {
AnimationContext_SetLoadFrame(play, animation, (s32)frame, skelAnime->limbCount, skelAnime->morphTable);
}
/**
- * Requests loading frame data from the Link animation into jointTable
+ * Requests loading frame data from the Player animation into jointTable
*/
-void LinkAnimation_LoadToJoint(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation, f32 frame) {
+void PlayerAnimation_LoadToJoint(PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation, f32 frame) {
AnimationContext_SetLoadFrame(play, animation, (s32)frame, skelAnime->limbCount, skelAnime->jointTable);
}
/**
* Requests interpolating between jointTable and morphTable, placing the result in jointTable
*/
-void LinkAnimation_InterpJointMorph(PlayState* play, SkelAnime* skelAnime, f32 weight) {
+void PlayerAnimation_InterpJointMorph(PlayState* play, SkelAnime* skelAnime, f32 weight) {
AnimationContext_SetInterp(play, skelAnime->limbCount, skelAnime->jointTable, skelAnime->morphTable, weight);
}
/**
- * Requests loading frame data from the Link animations and blending them, placing the result in jointTable
+ * Requests loading frame data from the Player animations and blending them, placing the result in jointTable
*/
-void LinkAnimation_BlendToJoint(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation1, f32 frame1,
- LinkAnimationHeader* animation2, f32 frame2, f32 blendWeight, Vec3s* blendTable) {
- Vec3s* alignedBlendTable;
+void PlayerAnimation_BlendToJoint(PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation1, f32 frame1,
+ PlayerAnimationHeader* animation2, f32 frame2, f32 blendWeight,
+ void* blendTableBuffer) {
+ void* alignedBlendTable;
AnimationContext_SetLoadFrame(play, animation1, (s32)frame1, skelAnime->limbCount, skelAnime->jointTable);
- alignedBlendTable = (Vec3s*)ALIGN16((u32)blendTable);
+ alignedBlendTable = (void*)ALIGN16((uintptr_t)blendTableBuffer);
AnimationContext_SetLoadFrame(play, animation2, (s32)frame2, skelAnime->limbCount, alignedBlendTable);
AnimationContext_SetInterp(play, skelAnime->limbCount, skelAnime->jointTable, alignedBlendTable, blendWeight);
}
/**
- * Requests loading frame data from the Link animations and blending them, placing the result in morphTable
+ * Requests loading frame data from the Player animations and blending them, placing the result in morphTable
*/
-void LinkAnimation_BlendToMorph(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation1, f32 frame1,
- LinkAnimationHeader* animation2, f32 frame2, f32 blendWeight, Vec3s* blendTable) {
- Vec3s* alignedBlendTable;
+void PlayerAnimation_BlendToMorph(PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation1, f32 frame1,
+ PlayerAnimationHeader* animation2, f32 frame2, f32 blendWeight,
+ void* blendTableBuffer) {
+ void* alignedBlendTable;
AnimationContext_SetLoadFrame(play, animation1, (s32)frame1, skelAnime->limbCount, skelAnime->morphTable);
- alignedBlendTable = (Vec3s*)ALIGN16((u32)blendTable);
+ alignedBlendTable = (void*)ALIGN16((uintptr_t)blendTableBuffer);
AnimationContext_SetLoadFrame(play, animation2, (s32)frame2, skelAnime->limbCount, alignedBlendTable);
AnimationContext_SetInterp(play, skelAnime->limbCount, skelAnime->morphTable, alignedBlendTable, blendWeight);
@@ -1472,9 +1487,9 @@ void LinkAnimation_BlendToMorph(PlayState* play, SkelAnime* skelAnime, LinkAnima
/**
* Changes a looping animation to one that stops at the end.
*/
-void LinkAnimation_EndLoop(SkelAnime* skelAnime) {
+void PlayerAnimation_EndLoop(SkelAnime* skelAnime) {
skelAnime->mode = ANIMMODE_ONCE;
- LinkAnimation_SetUpdateFunction(skelAnime);
+ PlayerAnimation_SetUpdateFunction(skelAnime);
}
/**
@@ -1505,9 +1520,9 @@ s32 Animation_OnFrameImpl(SkelAnime* skelAnime, f32 frame, f32 updateRate) {
}
/**
- * Checks if the current Link animation has reached the specified frame
+ * Checks if the current Player animation has reached the specified frame
*/
-s32 LinkAnimation_OnFrame(SkelAnime* skelAnime, f32 frame) {
+s32 PlayerAnimation_OnFrame(SkelAnime* skelAnime, f32 frame) {
f32 updateRate = gFramerateDivisorHalf;
return Animation_OnFrameImpl(skelAnime, frame, updateRate);
@@ -1576,7 +1591,7 @@ void SkelAnime_InitSkin(GameState* gameState, SkelAnime* skelAnime, SkeletonHead
skelAnime->morphTable = ZeldaArena_Malloc(sizeof(*skelAnime->morphTable) * skelAnime->limbCount);
// Debug prints here, required to match.
- if (1) {};
+ if (1) {}
if (animation != NULL) {
Animation_PlayLoop(skelAnime, animation);
@@ -1618,7 +1633,7 @@ s32 SkelAnime_Morph(SkelAnime* skelAnime) {
}
SkelAnime_InterpFrameTable(skelAnime->limbCount, skelAnime->jointTable, skelAnime->jointTable,
skelAnime->morphTable, 1.0f - (skelAnime->morphWeight / prevMorphWeight));
- return 0;
+ return false;
}
/**
@@ -1652,7 +1667,7 @@ s32 SkelAnime_MorphTaper(SkelAnime* skelAnime) {
}
SkelAnime_InterpFrameTable(skelAnime->limbCount, skelAnime->jointTable, skelAnime->jointTable,
skelAnime->morphTable, 1.0f - curWeight);
- return 0;
+ return false;
}
/**
@@ -1699,7 +1714,7 @@ s32 SkelAnime_LoopFull(SkelAnime* skelAnime) {
}
SkelAnime_AnimateFrame(skelAnime);
- return 0;
+ return false;
}
/**
@@ -1716,7 +1731,7 @@ s32 SkelAnime_LoopPartial(SkelAnime* skelAnime) {
}
SkelAnime_AnimateFrame(skelAnime);
- return 0;
+ return false;
}
/**
@@ -1728,7 +1743,7 @@ s32 SkelAnime_Once(SkelAnime* skelAnime) {
if (skelAnime->curFrame == skelAnime->endFrame) {
SkelAnime_GetFrameData(skelAnime->animation, skelAnime->curFrame, skelAnime->limbCount, skelAnime->jointTable);
SkelAnime_AnimateFrame(skelAnime);
- return 1;
+ return true;
}
skelAnime->curFrame += skelAnime->playSpeed * updateRate;
@@ -1744,7 +1759,7 @@ s32 SkelAnime_Once(SkelAnime* skelAnime) {
}
}
SkelAnime_AnimateFrame(skelAnime);
- return 0;
+ return false;
}
/**
diff --git a/src/code/z_skin.c b/src/code/z_skin.c
index 0d3e0bf85..9bfd8d566 100644
--- a/src/code/z_skin.c
+++ b/src/code/z_skin.c
@@ -1,3 +1,4 @@
+#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 5d37e3eac..9361cc1e0 100644
--- a/src/code/z_snap.c
+++ b/src/code/z_snap.c
@@ -18,11 +18,11 @@ s32 Snap_RecordPictographedActors(PlayState* play) {
s32 seen;
s32 validCount = 0;
- gSaveContext.save.pictoFlags0 = 0;
- gSaveContext.save.pictoFlags1 = 0;
+ gSaveContext.save.saveInfo.pictoFlags0 = 0;
+ gSaveContext.save.saveInfo.pictoFlags1 = 0;
if (play->sceneId == SCENE_20SICHITAI) {
- Snap_SetFlag(PICTOGRAPH_IN_SWAMP);
+ Snap_SetFlag(PICTO_VALID_IN_SWAMP);
}
for (; category < ACTORCAT_MAX; category++) {
@@ -42,9 +42,8 @@ s32 Snap_RecordPictographedActors(PlayState* play) {
break;
}
- if (actor->id) {
- ; // Needed to match
- }
+ //! FAKE:
+ if (1) {}
// Actors which may be pictographed anywhere
switch (actor->id) {
@@ -92,20 +91,20 @@ s32 Snap_RecordPictographedActors(PlayState* play) {
// Only used in this file
void Snap_SetFlag(s32 flag) {
if (flag < 0x20) {
- gSaveContext.save.pictoFlags0 |= (1 << flag);
+ gSaveContext.save.saveInfo.pictoFlags0 |= (1 << flag);
} else {
flag &= 0x1F;
- gSaveContext.save.pictoFlags1 |= (1 << flag);
+ gSaveContext.save.saveInfo.pictoFlags1 |= (1 << flag);
}
}
// Unused
void Snap_UnsetFlag(s32 flag) {
if (flag < 0x20) {
- gSaveContext.save.pictoFlags0 &= ~(1 << flag);
+ gSaveContext.save.saveInfo.pictoFlags0 &= ~(1 << flag);
} else {
flag &= 0x1F;
- gSaveContext.save.pictoFlags1 &= ~(1 << flag);
+ gSaveContext.save.saveInfo.pictoFlags1 &= ~(1 << flag);
}
}
@@ -113,10 +112,10 @@ u32 Snap_CheckFlag(s32 flag) {
SaveContext* saveCtx = &gSaveContext;
if (flag < 0x20) {
- return saveCtx->save.pictoFlags0 & (1 << flag);
+ return saveCtx->save.saveInfo.pictoFlags0 & (1 << flag);
} else {
flag &= 0x1F;
- return saveCtx->save.pictoFlags1 & (1 << flag);
+ return saveCtx->save.saveInfo.pictoFlags1 & (1 << flag);
}
}
@@ -155,43 +154,43 @@ s32 Snap_ValidatePictograph(PlayState* play, Actor* actor, s32 flag, Vec3f* pos,
// Check distance
distance = OLib_Vec3fDist(pos, &camera->eye);
if ((distance < distanceMin) || (distanceMax < distance)) {
- Snap_SetFlag(PICTOGRAPH_BAD_DISTANCE);
- ret = PICTOGRAPH_BAD_DISTANCE;
+ Snap_SetFlag(PICTO_VALID_BAD_DISTANCE);
+ ret = PICTO_VALID_BAD_DISTANCE;
}
// Check rot is facing camera?
x = Snap_AbsS(Camera_GetCamDirPitch(camera) + rot->x);
y = Snap_AbsS(Camera_GetCamDirYaw(camera) - BINANG_SUB(rot->y, 0x7FFF));
if ((0 < angleRange) && ((angleRange < x) || (angleRange < y))) {
- Snap_SetFlag(PICTOGRAPH_BAD_ANGLE);
- ret |= PICTOGRAPH_BAD_ANGLE;
+ Snap_SetFlag(PICTO_VALID_BAD_ANGLE);
+ ret |= PICTO_VALID_BAD_ANGLE;
}
// Check in capture region
Actor_GetProjectedPos(play, pos, &projectedPos, &distance);
// Convert to projected position to device coordinates, shift to be relative to the capture region's top-left corner
- x = (s16)PROJECTED_TO_SCREEN_X(projectedPos, distance) - PICTO_CAPTURE_REGION_TOPLEFT_X;
- y = (s16)PROJECTED_TO_SCREEN_Y(projectedPos, distance) - PICTO_CAPTURE_REGION_TOPLEFT_Y;
+ x = (s16)PROJECTED_TO_SCREEN_X(projectedPos, distance) - PICTO_VALID_TOPLEFT_X;
+ y = (s16)PROJECTED_TO_SCREEN_Y(projectedPos, distance) - PICTO_VALID_TOPLEFT_Y;
// checks if the coordinates are within the capture region
- if ((x < 0) || (x > PICTO_RESOLUTION_HORIZONTAL) || (y < 0) || (y > PICTO_RESOLUTION_VERTICAL)) {
- Snap_SetFlag(PICTOGRAPH_NOT_IN_VIEW);
- ret |= PICTOGRAPH_NOT_IN_VIEW;
+ if ((x < 0) || (x > PICTO_VALID_WIDTH) || (y < 0) || (y > PICTO_VALID_HEIGHT)) {
+ Snap_SetFlag(PICTO_VALID_NOT_IN_VIEW);
+ ret |= PICTO_VALID_NOT_IN_VIEW;
}
// Check not obscured by bg collision
if (BgCheck_ProjectileLineTest(&play->colCtx, pos, &camera->eye, &projectedPos, &poly, true, true, true, true,
&bgId)) {
- Snap_SetFlag(PICTOGRAPH_BEHIND_BG);
- ret |= PICTOGRAPH_BEHIND_BG;
+ Snap_SetFlag(PICTO_VALID_BEHIND_BG);
+ ret |= PICTO_VALID_BEHIND_BG;
}
// Check not obscured by actor collision
actors[0] = actor;
actors[1] = &GET_PLAYER(play)->actor;
if (CollisionCheck_LineOCCheck(play, &play->colChkCtx, pos, &camera->eye, actors, 2)) {
- Snap_SetFlag(PICTOGRAPH_BEHIND_COLLISION);
- ret |= PICTOGRAPH_BEHIND_COLLISION;
+ Snap_SetFlag(PICTO_VALID_BEHIND_COLLISION);
+ ret |= PICTO_VALID_BEHIND_COLLISION;
}
// If all of the above checks pass, set the flag
diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c
index 6f9006146..c10c1943e 100644
--- a/src/code/z_sram_NES.c
+++ b/src/code/z_sram_NES.c
@@ -1,3 +1,4 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
#include "overlays/gamestates/ovl_file_choose/z_file_choose.h"
@@ -131,16 +132,109 @@ u32 D_801C5FC0[SCENE_MAX][4] = {
{ 0, 0, 1, 0 }, // SCENE_ALLEY
};
-// Related to weekEventReg
-u16 D_801C66D0[ARRAY_COUNT(gSaveContext.save.weekEventReg)] = {
- 0xFFFC, 0xFFFF, 0xFFFF, 0xFFFF, 0, 0, 0, 0xC000, 0xC00, 0, 0xC0, 0, 0x300,
- 0x3000, 0xC000, 0xC00, 0, 0, 0, 0, 0, 0, 0xC00C, 0xC00C, 0xC008, 3,
- 0x3000, 0, 0, 0, 0xFF00, 0xC3F, 0x3F, 0, 0, 0xCFFF, 0, 0, 0xC00,
- 0xC00, 0, 0xC0, 0, 0, 0, 0, 0, 0, 0, 0, 0x3C, 0x20,
- 0, 0x300C, 0x3000, 0, 0xC, 0xC0, 0, 0xFF0, 0x300, 0, 0, 0xC00, 0,
- 0, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC0, 0, 0xC000, 0, 3,
- 0, 0xC000, 0, 0xC0, 0x300, 0, 0, 0, 0xC000, 0xFFF0, 0, 0, 0x300,
- 0, 0xC000, 0xF0, 0, 0, 0, 0, 0, 0,
+// TODO: figure out a way to use the WEEKEVENTREG defines here
+// 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,
+ /* 4 */ 0,
+ /* 5 */ 0,
+ /* 6 */ 0,
+ /* 7 */ 0xC000,
+ /* 8 */ 0xC00,
+ /* 9 */ 0,
+ /* 10 */ 0xC0,
+ /* 11 */ 0,
+ /* 12 */ 0x300,
+ /* 13 */ 0x3000,
+ /* 14 */ 0xC000,
+ /* 15 */ 0xC00,
+ /* 16 */ 0,
+ /* 17 */ 0,
+ /* 18 */ 0,
+ /* 19 */ 0,
+ /* 20 */ 0,
+ /* 21 */ 0,
+ /* 22 */ 0xC00C,
+ /* 23 */ 0xC00C,
+ /* 24 */ 0xC008,
+ /* 25 */ 3,
+ /* 26 */ 0x3000,
+ /* 27 */ 0,
+ /* 28 */ 0,
+ /* 29 */ 0,
+ /* 30 */ 0xFF00,
+ /* 31 */ 0xC3F,
+ /* 32 */ 0x3F,
+ /* 33 */ 0,
+ /* 34 */ 0,
+ /* 35 */ 0xCFFF,
+ /* 36 */ 0,
+ /* 37 */ 0,
+ /* 38 */ 0xC00,
+ /* 39 */ 0xC00,
+ /* 40 */ 0,
+ /* 41 */ 0xC0,
+ /* 42 */ 0,
+ /* 43 */ 0,
+ /* 44 */ 0,
+ /* 45 */ 0,
+ /* 46 */ 0,
+ /* 47 */ 0,
+ /* 48 */ 0,
+ /* 49 */ 0,
+ /* 50 */ 0x3C,
+ /* 51 */ 0x20,
+ /* 52 */ 0,
+ /* 53 */ 0x300C,
+ /* 54 */ 0x3000,
+ /* 55 */ 0,
+ /* 56 */ 0xC,
+ /* 57 */ 0xC0,
+ /* 58 */ 0,
+ /* 59 */ 0xFF0,
+ /* 60 */ 0x300,
+ /* 61 */ 0,
+ /* 62 */ 0,
+ /* 63 */ 0xC00,
+ /* 64 */ 0,
+ /* 65 */ 0,
+ /* 66 */ 0xFFFF,
+ /* 67 */ 0xFFFF,
+ /* 68 */ 0xFFFF,
+ /* 69 */ 0xFFFF,
+ /* 70 */ 0xFFFF,
+ /* 71 */ 0xFFFF,
+ /* 72 */ 0xFFFF,
+ /* 73 */ 0xC0,
+ /* 74 */ 0,
+ /* 75 */ 0xC000,
+ /* 76 */ 0,
+ /* 77 */ 3,
+ /* 78 */ 0,
+ /* 79 */ 0xC000,
+ /* 80 */ 0,
+ /* 81 */ 0xC0,
+ /* 82 */ 0x300,
+ /* 83 */ 0,
+ /* 84 */ 0,
+ /* 85 */ 0,
+ /* 86 */ 0xC000,
+ /* 87 */ 0xFFF0,
+ /* 88 */ 0,
+ /* 89 */ 0,
+ /* 90 */ 0x300,
+ /* 91 */ 0,
+ /* 92 */ 0xC000,
+ /* 93 */ 0xF0,
+ /* 94 */ 0,
+ /* 95 */ 0,
+ /* 96 */ 0,
+ /* 97 */ 0,
+ /* 98 */ 0,
+ /* 99 */ 0,
};
// used in other files
@@ -175,17 +269,11 @@ u8 gAmmoItems[] = {
ITEM_NONE, // SLOT_BOTTLE_6
};
-s32 D_801C67C8[] = { 0, 0x40, 0x80, 0xC0, 0x100, 0x180, 0x200, 0x280 };
+s32 D_801C67C8[] = { 0, 0x40, 0x80, 0xC0, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380 };
-s32 D_801C67E8[] = { 0x300, 0x380 };
+s32 D_801C67F0[] = { 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 1, 1 };
-s32 D_801C67F0[] = { 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80 };
-
-s32 D_801C6810[] = { 1, 1 };
-
-s32 D_801C6818[] = { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 };
-
-s32 D_801C6838[] = { 1, 1 };
+s32 D_801C6818[] = { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 1, 1 };
s32 D_801C6840[] = { 0x100, 0x180, 0x200, 0x280 };
@@ -208,40 +296,35 @@ u16 D_801F6AF0;
u8 D_801F6AF2;
void Sram_ActivateOwl(u8 owlId) {
- gSaveContext.save.playerData.owlActivationFlags =
- ((void)0, gSaveContext.save.playerData.owlActivationFlags) | (u16)gBitFlags[owlId];
+ gSaveContext.save.saveInfo.playerData.owlActivationFlags =
+ ((void)0, gSaveContext.save.saveInfo.playerData.owlActivationFlags) | (u16)gBitFlags[owlId];
- if (gSaveContext.save.playerData.unk_20 == 0xFF) {
- gSaveContext.save.playerData.unk_20 = owlId;
+ if (gSaveContext.save.saveInfo.playerData.unk_20 == 0xFF) {
+ gSaveContext.save.saveInfo.playerData.unk_20 = owlId;
}
}
void Sram_ClearHighscores(void) {
- gSaveContext.save.unk_EE8 = (gSaveContext.save.unk_EE8 & 0xFFFF) | 0x130000;
- gSaveContext.save.unk_EE8 = (gSaveContext.save.unk_EE8 & 0xFFFF0000) | 0xA;
- gSaveContext.save.horseBackBalloonHighScore = SECONDS_TO_TIMER(60);
+ gSaveContext.save.saveInfo.unk_EC4 = (gSaveContext.save.saveInfo.unk_EC4 & 0xFFFF) | 0x130000;
+ gSaveContext.save.saveInfo.unk_EC4 = (gSaveContext.save.saveInfo.unk_EC4 & 0xFFFF0000) | 0xA;
+ gSaveContext.save.saveInfo.horseBackBalloonHighScore = SECONDS_TO_TIMER(60);
SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(39);
SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(10);
- gSaveContext.save.dekuPlaygroundHighScores[0] = SECONDS_TO_TIMER(75);
- gSaveContext.save.dekuPlaygroundHighScores[1] = SECONDS_TO_TIMER(75);
- gSaveContext.save.dekuPlaygroundHighScores[2] = SECONDS_TO_TIMER(76);
+ gSaveContext.save.saveInfo.dekuPlaygroundHighScores[0] = SECONDS_TO_TIMER(75);
+ gSaveContext.save.saveInfo.dekuPlaygroundHighScores[1] = SECONDS_TO_TIMER(75);
+ gSaveContext.save.saveInfo.dekuPlaygroundHighScores[2] = SECONDS_TO_TIMER(76);
}
/**
* Clears specific weekEventReg flags. Used by the "Dawn of the First Day" message
*/
void Sram_ClearFlagsAtDawnOfTheFirstDay(void) {
- // Unconfirmed: "Link the Goron Claims His Reservation: 4:30 PM"
- gSaveContext.save.weekEventReg[55] &= (u8)~2;
- // Unconfirmed: "Postman fleeing town"
- gSaveContext.save.weekEventReg[90] &= (u8)~1;
- // Unconfirmed: "Postman is about to flee"
- gSaveContext.save.weekEventReg[89] &= (u8)~0x40;
- // Unconfirmed: "Postman has delivered priority mail"
- gSaveContext.save.weekEventReg[89] &= (u8)~8;
- // Unconfirmed: "Postman showing priority mail to Madame"
- gSaveContext.save.weekEventReg[85] &= (u8)~0x80;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_55_02);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_01);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_89_40);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_89_08);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_85_80);
}
/**
@@ -254,14 +337,14 @@ void Sram_SaveEndOfCycle(PlayState* play) {
u8 slot;
u8 item;
- gSaveContext.save.daySpeed = 0;
+ gSaveContext.save.timeSpeedOffset = 0;
gSaveContext.save.daysElapsed = 0;
gSaveContext.save.day = 0;
gSaveContext.save.time = CLOCK_TIME(6, 0) - 1;
- gSaveContext.save.playerData.deaths++;
- if (gSaveContext.save.playerData.deaths > 999) {
- gSaveContext.save.playerData.deaths = 999;
+ gSaveContext.save.saveInfo.playerData.deaths++;
+ if (gSaveContext.save.saveInfo.playerData.deaths > 999) {
+ gSaveContext.save.saveInfo.playerData.deaths = 999;
}
sceneId = Play_GetOriginalSceneId(play->sceneId);
@@ -280,8 +363,8 @@ void Sram_SaveEndOfCycle(PlayState* play) {
gSaveContext.cycleSceneFlags[i].collectible =
((void)0, gSaveContext.cycleSceneFlags[i].collectible) & D_801C5FC0[i][3];
gSaveContext.cycleSceneFlags[i].clearedRoom = 0;
- gSaveContext.save.permanentSceneFlags[i].unk_14 = 0;
- gSaveContext.save.permanentSceneFlags[i].rooms = 0;
+ gSaveContext.save.saveInfo.permanentSceneFlags[i].unk_14 = 0;
+ gSaveContext.save.saveInfo.permanentSceneFlags[i].rooms = 0;
}
for (; i < ARRAY_COUNT(gSaveContext.cycleSceneFlags); i++) {
@@ -296,7 +379,7 @@ void Sram_SaveEndOfCycle(PlayState* play) {
gSaveContext.masksGivenOnMoon[i] = 0;
}
- if (gSaveContext.save.weekEventReg[84] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_20)) {
Inventory_DeleteItem(ITEM_MASK_FIERCE_DEITY, SLOT(ITEM_MASK_FIERCE_DEITY));
}
@@ -305,8 +388,8 @@ void Sram_SaveEndOfCycle(PlayState* play) {
for (j = 0; j < ARRAY_COUNT(D_801C6890); j++) {
if ((phi_v1_3 & 3) == 0) {
- gSaveContext.save.weekEventReg[i] =
- ((void)0, gSaveContext.save.weekEventReg[i]) & (0xFF ^ D_801C6890[j]);
+ gSaveContext.save.saveInfo.weekEventReg[i] =
+ ((void)0, gSaveContext.save.saveInfo.weekEventReg[i]) & (0xFF ^ D_801C6890[j]);
}
phi_v1_3 >>= 2;
}
@@ -316,45 +399,45 @@ void Sram_SaveEndOfCycle(PlayState* play) {
gSaveContext.eventInf[i] = 0;
}
- gSaveContext.eventInf[7] &= (u8)~1;
- gSaveContext.eventInf[7] &= (u8)~2;
- gSaveContext.eventInf[7] &= (u8)~4;
- gSaveContext.eventInf[7] &= (u8)~8;
- gSaveContext.eventInf[7] &= (u8)~0x10;
+ CLEAR_EVENTINF(EVENTINF_70);
+ CLEAR_EVENTINF(EVENTINF_71);
+ CLEAR_EVENTINF(EVENTINF_72);
+ CLEAR_EVENTINF(EVENTINF_73);
+ CLEAR_EVENTINF(EVENTINF_74);
- if (gSaveContext.save.playerData.rupees != 0) {
- gSaveContext.eventInf[7] |= 1;
+ if (gSaveContext.save.saveInfo.playerData.rupees != 0) {
+ SET_EVENTINF(EVENTINF_70);
}
if (INV_CONTENT(ITEM_BOMB) == ITEM_BOMB) {
item = INV_CONTENT(ITEM_BOMB);
if (AMMO(item) != 0) {
- gSaveContext.eventInf[7] |= 2;
+ SET_EVENTINF(EVENTINF_71);
}
}
if (INV_CONTENT(ITEM_NUT) == ITEM_NUT) {
item = INV_CONTENT(ITEM_NUT);
if (AMMO(item) != 0) {
- gSaveContext.eventInf[7] |= 4;
+ SET_EVENTINF(EVENTINF_72);
}
}
if (INV_CONTENT(ITEM_STICK) == ITEM_STICK) {
item = INV_CONTENT(ITEM_STICK);
if (AMMO(item) != 0) {
- gSaveContext.eventInf[7] |= 8;
+ SET_EVENTINF(EVENTINF_73);
}
}
if (INV_CONTENT(ITEM_BOW) == ITEM_BOW) {
item = INV_CONTENT(ITEM_BOW);
if (AMMO(item) != 0) {
- gSaveContext.eventInf[7] |= 0x10;
+ SET_EVENTINF(EVENTINF_74);
}
}
for (i = 0; i < ARRAY_COUNT(gAmmoItems); i++) {
if (gAmmoItems[i] != ITEM_NONE) {
- if ((gSaveContext.save.inventory.items[i] != ITEM_NONE) && (i != SLOT_PICTO_BOX)) {
- item = gSaveContext.save.inventory.items[i];
+ if ((gSaveContext.save.saveInfo.inventory.items[i] != ITEM_NONE) && (i != SLOT_PICTO_BOX)) {
+ item = gSaveContext.save.saveInfo.inventory.items[i];
AMMO(item) = 0;
}
}
@@ -362,23 +445,23 @@ void Sram_SaveEndOfCycle(PlayState* play) {
for (i = SLOT_BOTTLE_1; i <= SLOT_BOTTLE_6; i++) {
// Check for all bottled items
- if (gSaveContext.save.inventory.items[i] >= ITEM_POTION_RED) {
- if (gSaveContext.save.inventory.items[i] <= ITEM_OBABA_DRINK) {
+ if (gSaveContext.save.saveInfo.inventory.items[i] >= ITEM_POTION_RED) {
+ if (gSaveContext.save.saveInfo.inventory.items[i] <= ITEM_OBABA_DRINK) {
for (j = EQUIP_SLOT_C_LEFT; j <= EQUIP_SLOT_C_RIGHT; j++) {
- if (GET_CUR_FORM_BTN_ITEM(j) == gSaveContext.save.inventory.items[i]) {
+ if (GET_CUR_FORM_BTN_ITEM(j) == gSaveContext.save.saveInfo.inventory.items[i]) {
SET_CUR_FORM_BTN_ITEM(j, ITEM_BOTTLE);
Interface_LoadItemIconImpl(play, j);
}
}
- gSaveContext.save.inventory.items[i] = ITEM_BOTTLE;
+ gSaveContext.save.saveInfo.inventory.items[i] = ITEM_BOTTLE;
}
}
}
REMOVE_QUEST_ITEM(QUEST_PICTOGRAPH);
- if (gSaveContext.save.playerData.health < 0x30) {
- gSaveContext.save.playerData.health = 0x30;
+ if (gSaveContext.save.saveInfo.playerData.health < 0x30) {
+ gSaveContext.save.saveInfo.playerData.health = 0x30;
}
if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) <= EQUIP_VALUE_SWORD_RAZOR) {
@@ -386,10 +469,10 @@ void Sram_SaveEndOfCycle(PlayState* play) {
if (CUR_FORM == 0) {
if ((STOLEN_ITEM_1 >= ITEM_SWORD_GILDED) || (STOLEN_ITEM_2 >= ITEM_SWORD_GILDED)) {
- BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_SWORD_GILDED;
+ CUR_FORM_EQUIP(EQUIP_SLOT_B) = ITEM_SWORD_GILDED;
SET_EQUIP_VALUE(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_GILDED);
} else {
- BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_SWORD_KOKIRI;
+ CUR_FORM_EQUIP(EQUIP_SLOT_B) = ITEM_SWORD_KOKIRI;
}
} else {
if ((STOLEN_ITEM_1 >= ITEM_SWORD_GILDED) || (STOLEN_ITEM_2 >= ITEM_SWORD_GILDED)) {
@@ -408,8 +491,8 @@ void Sram_SaveEndOfCycle(PlayState* play) {
if (STOLEN_ITEM_1 == ITEM_BOTTLE) {
slot = SLOT(ITEM_BOTTLE);
for (i = BOTTLE_FIRST; i < BOTTLE_MAX; i++) {
- if (gSaveContext.save.inventory.items[slot + i] == ITEM_NONE) {
- gSaveContext.save.inventory.items[slot + i] = ITEM_BOTTLE;
+ if (gSaveContext.save.saveInfo.inventory.items[slot + i] == ITEM_NONE) {
+ gSaveContext.save.saveInfo.inventory.items[slot + i] = ITEM_BOTTLE;
break;
}
}
@@ -418,8 +501,8 @@ void Sram_SaveEndOfCycle(PlayState* play) {
if (STOLEN_ITEM_2 == ITEM_BOTTLE) {
slot = SLOT(ITEM_BOTTLE);
for (i = BOTTLE_FIRST; i < BOTTLE_MAX; i++) {
- if (gSaveContext.save.inventory.items[slot + i] == ITEM_NONE) {
- gSaveContext.save.inventory.items[slot + i] = ITEM_BOTTLE;
+ if (gSaveContext.save.saveInfo.inventory.items[slot + i] == ITEM_NONE) {
+ gSaveContext.save.saveInfo.inventory.items[slot + i] = ITEM_BOTTLE;
break;
}
}
@@ -439,28 +522,28 @@ void Sram_SaveEndOfCycle(PlayState* play) {
}
}
- gSaveContext.save.skullTokenCount &= ~0xFFFF0000;
- gSaveContext.save.skullTokenCount &= ~0x0000FFFF;
- gSaveContext.save.unk_EC4 = 0;
+ gSaveContext.save.saveInfo.skullTokenCount &= ~0xFFFF0000;
+ gSaveContext.save.saveInfo.skullTokenCount &= ~0x0000FFFF;
+ gSaveContext.save.saveInfo.unk_EA0 = 0;
- gSaveContext.save.unk_E88[0] = 0;
- gSaveContext.save.unk_E88[1] = 0;
- gSaveContext.save.unk_E88[2] = 0;
- gSaveContext.save.unk_E88[3] = 0;
- gSaveContext.save.unk_E88[4] = 0;
- gSaveContext.save.unk_E88[5] = 0;
- gSaveContext.save.unk_E88[6] = 0;
+ gSaveContext.save.saveInfo.unk_E64[0] = 0;
+ gSaveContext.save.saveInfo.unk_E64[1] = 0;
+ gSaveContext.save.saveInfo.unk_E64[2] = 0;
+ gSaveContext.save.saveInfo.unk_E64[3] = 0;
+ gSaveContext.save.saveInfo.unk_E64[4] = 0;
+ gSaveContext.save.saveInfo.unk_E64[5] = 0;
+ gSaveContext.save.saveInfo.unk_E64[6] = 0;
Sram_ClearHighscores();
for (i = 0; i < 8; i++) {
- gSaveContext.save.inventory.dungeonItems[i] &= (u8)~1; // remove boss key
+ gSaveContext.save.saveInfo.inventory.dungeonItems[i] &= (u8)~1; // remove boss key
DUNGEON_KEY_COUNT(i) = 0;
- gSaveContext.save.inventory.strayFairies[i] = 0;
+ gSaveContext.save.saveInfo.inventory.strayFairies[i] = 0;
}
- gSaveContext.save.playerData.rupees = 0;
- gSaveContext.save.unk_F65 = 0;
+ gSaveContext.save.saveInfo.playerData.rupees = 0;
+ gSaveContext.save.saveInfo.unk_F41 = 0;
gSaveContext.powderKegTimer = 0;
gSaveContext.unk_1014 = 0;
gSaveContext.jinxTimer = 0;
@@ -475,17 +558,15 @@ void Sram_IncrementDay(void) {
gSaveContext.save.daysElapsed++;
}
- gSaveContext.save.bombersCaughtNum = 0;
- gSaveContext.save.bombersCaughtOrder[0] = 0;
- gSaveContext.save.bombersCaughtOrder[1] = 0;
- gSaveContext.save.bombersCaughtOrder[2] = 0;
- gSaveContext.save.bombersCaughtOrder[3] = 0;
- gSaveContext.save.bombersCaughtOrder[4] = 0;
+ gSaveContext.save.saveInfo.bombersCaughtNum = 0;
+ gSaveContext.save.saveInfo.bombersCaughtOrder[0] = 0;
+ gSaveContext.save.saveInfo.bombersCaughtOrder[1] = 0;
+ gSaveContext.save.saveInfo.bombersCaughtOrder[2] = 0;
+ gSaveContext.save.saveInfo.bombersCaughtOrder[3] = 0;
+ gSaveContext.save.saveInfo.bombersCaughtOrder[4] = 0;
- // Unconfirmed: "Bombers Hide & Seek started on Day 1???"
- gSaveContext.save.weekEventReg[73] &= (u8)~0x10;
- // Unconfirmed: "Bombers Hide & Seek in Progress"
- gSaveContext.save.weekEventReg[85] &= (u8)~2;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_73_10);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_85_02);
}
u16 Sram_CalcChecksum(void* data, size_t count) {
@@ -507,14 +588,12 @@ void Sram_ResetSave(void) {
gSaveContext.save.unk_06 = 0;
gSaveContext.save.linkAge = 0;
gSaveContext.save.isNight = false;
- gSaveContext.save.daySpeed = 0;
+ gSaveContext.save.timeSpeedOffset = 0;
gSaveContext.save.snowheadCleared = 0;
gSaveContext.save.hasTatl = false;
gSaveContext.save.isOwlSave = false;
- // Instead of bloating all save context accesses with an extra sub-struct, the size of the would-be sub-struct
- // is calculated manually
- bzero(&gSaveContext.save.playerData, sizeof(Save) - offsetof(Save, playerData));
+ bzero(&gSaveContext.save.saveInfo, sizeof(SaveInfo));
}
/**
@@ -534,15 +613,15 @@ void Sram_GenerateRandomSaveFields(void) {
Sram_ClearHighscores();
- gSaveContext.save.lotteryCodes[0][0] = Rand_S16Offset(0, 10);
- gSaveContext.save.lotteryCodes[0][1] = Rand_S16Offset(0, 10);
- gSaveContext.save.lotteryCodes[0][2] = Rand_S16Offset(0, 10);
- gSaveContext.save.lotteryCodes[1][0] = Rand_S16Offset(0, 10);
- gSaveContext.save.lotteryCodes[1][1] = Rand_S16Offset(0, 10);
- gSaveContext.save.lotteryCodes[1][2] = Rand_S16Offset(0, 10);
- gSaveContext.save.lotteryCodes[2][0] = Rand_S16Offset(0, 10);
- gSaveContext.save.lotteryCodes[2][1] = Rand_S16Offset(0, 10);
- gSaveContext.save.lotteryCodes[2][2] = Rand_S16Offset(0, 10);
+ gSaveContext.save.saveInfo.lotteryCodes[0][0] = Rand_S16Offset(0, 10);
+ gSaveContext.save.saveInfo.lotteryCodes[0][1] = Rand_S16Offset(0, 10);
+ gSaveContext.save.saveInfo.lotteryCodes[0][2] = Rand_S16Offset(0, 10);
+ gSaveContext.save.saveInfo.lotteryCodes[1][0] = Rand_S16Offset(0, 10);
+ gSaveContext.save.saveInfo.lotteryCodes[1][1] = Rand_S16Offset(0, 10);
+ gSaveContext.save.saveInfo.lotteryCodes[1][2] = Rand_S16Offset(0, 10);
+ gSaveContext.save.saveInfo.lotteryCodes[2][0] = Rand_S16Offset(0, 10);
+ gSaveContext.save.saveInfo.lotteryCodes[2][1] = Rand_S16Offset(0, 10);
+ gSaveContext.save.saveInfo.lotteryCodes[2][2] = Rand_S16Offset(0, 10);
// Needed to match...
for (i = 0; i < 3; i++) {
@@ -555,7 +634,7 @@ void Sram_GenerateRandomSaveFields(void) {
while (i != k) {
randSpiderHouse = Rand_S16Offset(0, 16) & 3;
if (sp2A != randSpiderHouse) {
- gSaveContext.save.spiderHouseMaskOrder[i] = randSpiderHouse;
+ gSaveContext.save.saveInfo.spiderHouseMaskOrder[i] = randSpiderHouse;
i++;
sp2A = randSpiderHouse;
}
@@ -565,7 +644,7 @@ void Sram_GenerateRandomSaveFields(void) {
randBombers = Rand_S16Offset(0, 6);
} while (randBombers <= 0 || randBombers >= 6);
- gSaveContext.save.bomberCode[0] = randBombers;
+ gSaveContext.save.saveInfo.bomberCode[0] = randBombers;
i = 1;
while (i != 5) {
@@ -577,14 +656,14 @@ void Sram_GenerateRandomSaveFields(void) {
sp2A = 0;
do {
- if (randBombers == gSaveContext.save.bomberCode[sp2A]) {
+ if (randBombers == gSaveContext.save.saveInfo.bomberCode[sp2A]) {
k = true;
}
sp2A++;
} while (sp2A < i);
if (k == false) {
- gSaveContext.save.bomberCode[i] = randBombers;
+ gSaveContext.save.saveInfo.bomberCode[i] = randBombers;
i++;
}
}
@@ -674,19 +753,20 @@ void Sram_InitNewSave(void) {
gSaveContext.save.time = CLOCK_TIME(6, 0) - 1;
Sram_ResetSave();
- Lib_MemCpy(&gSaveContext.save.playerData, &sSaveDefaultPlayerData, sizeof(SavePlayerData));
- Lib_MemCpy(&gSaveContext.save.equips, &sSaveDefaultItemEquips, sizeof(ItemEquips));
- Lib_MemCpy(&gSaveContext.save.inventory, &sSaveDefaultInventory, sizeof(Inventory));
- Lib_MemCpy(&gSaveContext.save.checksum, &sSaveDefaultChecksum, sizeof(gSaveContext.save.checksum));
+ Lib_MemCpy(&gSaveContext.save.saveInfo.playerData, &sSaveDefaultPlayerData, sizeof(SavePlayerData));
+ Lib_MemCpy(&gSaveContext.save.saveInfo.equips, &sSaveDefaultItemEquips, sizeof(ItemEquips));
+ Lib_MemCpy(&gSaveContext.save.saveInfo.inventory, &sSaveDefaultInventory, sizeof(Inventory));
+ Lib_MemCpy(&gSaveContext.save.saveInfo.checksum, &sSaveDefaultChecksum,
+ sizeof(gSaveContext.save.saveInfo.checksum));
- gSaveContext.save.horseData.sceneId = SCENE_F01;
- gSaveContext.save.horseData.pos.x = -1420;
- gSaveContext.save.horseData.pos.y = 257;
- gSaveContext.save.horseData.pos.z = -1285;
- gSaveContext.save.horseData.yaw = -0x7554;
+ 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 = -0x7554;
gSaveContext.nextCutsceneIndex = 0;
- gSaveContext.save.playerData.magicLevel = 0;
+ gSaveContext.save.saveInfo.playerData.magicLevel = 0;
Sram_GenerateRandomSaveFields();
}
@@ -827,45 +907,41 @@ u8 D_801C6A50[] = {
void Sram_InitDebugSave(void) {
Sram_ResetSave();
- Lib_MemCpy(&gSaveContext.save.playerData, &sSaveDebugPlayerData, sizeof(SavePlayerData));
- Lib_MemCpy(&gSaveContext.save.equips, &sSaveDebugItemEquips, sizeof(ItemEquips));
- Lib_MemCpy(&gSaveContext.save.inventory, &sSaveDebugInventory, sizeof(Inventory));
- Lib_MemCpy(&gSaveContext.save.checksum, &sSaveDebugChecksum, sizeof(gSaveContext.save.checksum));
+ Lib_MemCpy(&gSaveContext.save.saveInfo.playerData, &sSaveDebugPlayerData, sizeof(SavePlayerData));
+ Lib_MemCpy(&gSaveContext.save.saveInfo.equips, &sSaveDebugItemEquips, sizeof(ItemEquips));
+ Lib_MemCpy(&gSaveContext.save.saveInfo.inventory, &sSaveDebugInventory, sizeof(Inventory));
+ Lib_MemCpy(&gSaveContext.save.saveInfo.checksum, &sSaveDebugChecksum, sizeof(gSaveContext.save.saveInfo.checksum));
- if (gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) {
- BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) = D_801C6A48[((void)0, gSaveContext.save.playerForm)];
- C_SLOT_EQUIP(0, EQUIP_SLOT_C_DOWN) = D_801C6A50[((void)0, gSaveContext.save.playerForm)];
+ if (GET_PLAYER_FORM != PLAYER_FORM_HUMAN) {
+ BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) = D_801C6A48[GET_PLAYER_FORM];
+ C_SLOT_EQUIP(0, EQUIP_SLOT_C_DOWN) = D_801C6A50[GET_PLAYER_FORM];
}
gSaveContext.save.hasTatl = true;
- gSaveContext.save.horseData.sceneId = SCENE_F01;
- gSaveContext.save.horseData.pos.x = -1420;
- gSaveContext.save.horseData.pos.y = 257;
- gSaveContext.save.horseData.pos.z = -1285;
- gSaveContext.save.horseData.yaw = -0x7554;
+ 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 = -0x7554;
gSaveContext.save.entrance = ENTRANCE(CUTSCENE, 0);
gSaveContext.save.isFirstCycle = true;
- //
- gSaveContext.save.weekEventReg[0x0F] |= 0x20;
- // Unconfirmed: "Entered South Clock Town"
- gSaveContext.save.weekEventReg[0x3B] |= 0x04;
- // Unconfirmed: "Tatl's Second Cycle Text?"
- gSaveContext.save.weekEventReg[0x1F] |= 0x04;
+ SET_WEEKEVENTREG(WEEKEVENTREG_15_20);
+ SET_WEEKEVENTREG(WEEKEVENTREG_59_04);
+ SET_WEEKEVENTREG(WEEKEVENTREG_31_04);
gSaveContext.cycleSceneFlags[SCENE_INSIDETOWER].switch0 = 1;
- gSaveContext.save.permanentSceneFlags[SCENE_INSIDETOWER].switch0 = 1;
- gSaveContext.save.playerData.magicLevel = 0;
+ gSaveContext.save.saveInfo.permanentSceneFlags[SCENE_INSIDETOWER].switch0 = 1;
+ gSaveContext.save.saveInfo.playerData.magicLevel = 0;
Sram_GenerateRandomSaveFields();
}
-// Unused
-void func_80144A94(SramContext* sramCtx) {
+void Sram_ResetSaveFromMoonCrash(SramContext* sramCtx) {
s32 i;
- s32 cutscene = gSaveContext.save.cutscene;
+ s32 cutsceneIndex = gSaveContext.save.cutsceneIndex;
bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE);
@@ -875,23 +951,23 @@ void func_80144A94(SramContext* sramCtx) {
D_801C67F0[gSaveContext.fileNum * 2 + 1]);
}
Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save));
- if (CHECK_NEWF(gSaveContext.save.playerData.newf)) {
+ if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf)) {
func_80185968(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2 + 1],
D_801C67F0[gSaveContext.fileNum * 2 + 1]);
Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, sizeof(Save));
}
- gSaveContext.save.cutscene = cutscene;
+ gSaveContext.save.cutsceneIndex = cutsceneIndex;
for (i = 0; i < ARRAY_COUNT(gSaveContext.eventInf); i++) {
gSaveContext.eventInf[i] = 0;
}
for (i = 0; i < ARRAY_COUNT(gSaveContext.cycleSceneFlags); i++) {
- gSaveContext.cycleSceneFlags[i].chest = gSaveContext.save.permanentSceneFlags[i].chest;
- gSaveContext.cycleSceneFlags[i].switch0 = gSaveContext.save.permanentSceneFlags[i].switch0;
- gSaveContext.cycleSceneFlags[i].switch1 = gSaveContext.save.permanentSceneFlags[i].switch1;
- gSaveContext.cycleSceneFlags[i].clearedRoom = gSaveContext.save.permanentSceneFlags[i].clearedRoom;
- gSaveContext.cycleSceneFlags[i].collectible = gSaveContext.save.permanentSceneFlags[i].collectible;
+ gSaveContext.cycleSceneFlags[i].chest = gSaveContext.save.saveInfo.permanentSceneFlags[i].chest;
+ gSaveContext.cycleSceneFlags[i].switch0 = gSaveContext.save.saveInfo.permanentSceneFlags[i].switch0;
+ gSaveContext.cycleSceneFlags[i].switch1 = gSaveContext.save.saveInfo.permanentSceneFlags[i].switch1;
+ gSaveContext.cycleSceneFlags[i].clearedRoom = gSaveContext.save.saveInfo.permanentSceneFlags[i].clearedRoom;
+ gSaveContext.cycleSceneFlags[i].collectible = gSaveContext.save.saveInfo.permanentSceneFlags[i].collectible;
}
for (i = 0; i < TIMER_ID_MAX; i++) {
@@ -948,13 +1024,13 @@ void Sram_OpenSave(FileSelectState* fileSelect, SramContext* sramCtx) {
Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[phi_t1]);
- if (CHECK_NEWF(gSaveContext.save.playerData.newf)) {
+ 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]);
}
}
- gSaveContext.save.playerData.magicLevel = 0;
+ gSaveContext.save.saveInfo.playerData.magicLevel = 0;
if (!gSaveContext.save.isOwlSave) {
for (i = 0; i < ARRAY_COUNT(gSaveContext.eventInf); i++) {
@@ -962,11 +1038,11 @@ void Sram_OpenSave(FileSelectState* fileSelect, SramContext* sramCtx) {
}
for (i = 0; i < ARRAY_COUNT(gSaveContext.cycleSceneFlags); i++) {
- gSaveContext.cycleSceneFlags[i].chest = gSaveContext.save.permanentSceneFlags[i].chest;
- gSaveContext.cycleSceneFlags[i].switch0 = gSaveContext.save.permanentSceneFlags[i].switch0;
- gSaveContext.cycleSceneFlags[i].switch1 = gSaveContext.save.permanentSceneFlags[i].switch1;
- gSaveContext.cycleSceneFlags[i].clearedRoom = gSaveContext.save.permanentSceneFlags[i].clearedRoom;
- gSaveContext.cycleSceneFlags[i].collectible = gSaveContext.save.permanentSceneFlags[i].collectible;
+ gSaveContext.cycleSceneFlags[i].chest = gSaveContext.save.saveInfo.permanentSceneFlags[i].chest;
+ gSaveContext.cycleSceneFlags[i].switch0 = gSaveContext.save.saveInfo.permanentSceneFlags[i].switch0;
+ gSaveContext.cycleSceneFlags[i].switch1 = gSaveContext.save.saveInfo.permanentSceneFlags[i].switch1;
+ gSaveContext.cycleSceneFlags[i].clearedRoom = gSaveContext.save.saveInfo.permanentSceneFlags[i].clearedRoom;
+ gSaveContext.cycleSceneFlags[i].collectible = gSaveContext.save.saveInfo.permanentSceneFlags[i].collectible;
}
for (i = 0; i < TIMER_ID_MAX; i++) {
@@ -990,28 +1066,26 @@ void Sram_OpenSave(FileSelectState* fileSelect, SramContext* sramCtx) {
} else {
gSaveContext.save.entrance = D_801C6A58[(void)0, gSaveContext.save.owlSaveLocation];
if ((gSaveContext.save.entrance == ENTRANCE(SOUTHERN_SWAMP_POISONED, 10)) &&
- (gSaveContext.save.weekEventReg[20] & 2)) {
- // Unconfirmed weekEventReg: "Woodfall Temple Prison Entrance raised / Water cleansed"
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) {
gSaveContext.save.entrance = ENTRANCE(SOUTHERN_SWAMP_CLEARED, 10);
} else if ((gSaveContext.save.entrance == ENTRANCE(MOUNTAIN_VILLAGE_WINTER, 8)) &&
- (gSaveContext.save.weekEventReg[33] & 0x80)) {
- // Unconfirmed weekEventReg: "Mountain Village Unfrozen"
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) {
gSaveContext.save.entrance = ENTRANCE(MOUNTAIN_VILLAGE_SPRING, 8);
}
for (i = 0; i < ARRAY_COUNT(gSaveContext.cycleSceneFlags); i++) {
- gSaveContext.cycleSceneFlags[i].chest = gSaveContext.save.permanentSceneFlags[i].chest;
- gSaveContext.cycleSceneFlags[i].switch0 = gSaveContext.save.permanentSceneFlags[i].switch0;
- gSaveContext.cycleSceneFlags[i].switch1 = gSaveContext.save.permanentSceneFlags[i].switch1;
- gSaveContext.cycleSceneFlags[i].clearedRoom = gSaveContext.save.permanentSceneFlags[i].clearedRoom;
- gSaveContext.cycleSceneFlags[i].collectible = gSaveContext.save.permanentSceneFlags[i].collectible;
+ gSaveContext.cycleSceneFlags[i].chest = gSaveContext.save.saveInfo.permanentSceneFlags[i].chest;
+ gSaveContext.cycleSceneFlags[i].switch0 = gSaveContext.save.saveInfo.permanentSceneFlags[i].switch0;
+ gSaveContext.cycleSceneFlags[i].switch1 = gSaveContext.save.saveInfo.permanentSceneFlags[i].switch1;
+ gSaveContext.cycleSceneFlags[i].clearedRoom = gSaveContext.save.saveInfo.permanentSceneFlags[i].clearedRoom;
+ gSaveContext.cycleSceneFlags[i].collectible = gSaveContext.save.saveInfo.permanentSceneFlags[i].collectible;
}
- if (gSaveContext.save.unk_F65) {
- Lib_MemCpy(gScarecrowSpawnSongPtr, gSaveContext.save.scarecrowSpawnSong,
- sizeof(gSaveContext.save.scarecrowSpawnSong));
+ if (gSaveContext.save.saveInfo.unk_F41) {
+ Lib_MemCpy(gScarecrowSpawnSongPtr, gSaveContext.save.saveInfo.scarecrowSpawnSong,
+ sizeof(gSaveContext.save.saveInfo.scarecrowSpawnSong));
- for (i = 0; i != ARRAY_COUNT(gSaveContext.save.scarecrowSpawnSong); i++) {}
+ for (i = 0; i != ARRAY_COUNT(gSaveContext.save.saveInfo.scarecrowSpawnSong); i++) {}
}
fileNum = gSaveContext.fileNum;
@@ -1025,28 +1099,28 @@ void func_8014546C(SramContext* sramCtx) {
if (gSaveContext.save.isOwlSave) {
for (i = 0; i < ARRAY_COUNT(gSaveContext.cycleSceneFlags); i++) {
- gSaveContext.save.permanentSceneFlags[i].chest = gSaveContext.cycleSceneFlags[i].chest;
- gSaveContext.save.permanentSceneFlags[i].switch0 = gSaveContext.cycleSceneFlags[i].switch0;
- gSaveContext.save.permanentSceneFlags[i].switch1 = gSaveContext.cycleSceneFlags[i].switch1;
- gSaveContext.save.permanentSceneFlags[i].clearedRoom = gSaveContext.cycleSceneFlags[i].clearedRoom;
- gSaveContext.save.permanentSceneFlags[i].collectible = gSaveContext.cycleSceneFlags[i].collectible;
+ gSaveContext.save.saveInfo.permanentSceneFlags[i].chest = gSaveContext.cycleSceneFlags[i].chest;
+ gSaveContext.save.saveInfo.permanentSceneFlags[i].switch0 = gSaveContext.cycleSceneFlags[i].switch0;
+ gSaveContext.save.saveInfo.permanentSceneFlags[i].switch1 = gSaveContext.cycleSceneFlags[i].switch1;
+ gSaveContext.save.saveInfo.permanentSceneFlags[i].clearedRoom = gSaveContext.cycleSceneFlags[i].clearedRoom;
+ gSaveContext.save.saveInfo.permanentSceneFlags[i].collectible = gSaveContext.cycleSceneFlags[i].collectible;
}
- gSaveContext.save.checksum = 0;
- gSaveContext.save.checksum = Sram_CalcChecksum(&gSaveContext, offsetof(SaveContext, fileNum));
+ gSaveContext.save.saveInfo.checksum = 0;
+ gSaveContext.save.saveInfo.checksum = Sram_CalcChecksum(&gSaveContext, offsetof(SaveContext, fileNum));
Lib_MemCpy(sramCtx->saveBuf, &gSaveContext, offsetof(SaveContext, fileNum));
} else {
for (i = 0; i < ARRAY_COUNT(gSaveContext.cycleSceneFlags); i++) {
- gSaveContext.save.permanentSceneFlags[i].chest = gSaveContext.cycleSceneFlags[i].chest;
- gSaveContext.save.permanentSceneFlags[i].switch0 = gSaveContext.cycleSceneFlags[i].switch0;
- gSaveContext.save.permanentSceneFlags[i].switch1 = gSaveContext.cycleSceneFlags[i].switch1;
- gSaveContext.save.permanentSceneFlags[i].clearedRoom = gSaveContext.cycleSceneFlags[i].clearedRoom;
- gSaveContext.save.permanentSceneFlags[i].collectible = gSaveContext.cycleSceneFlags[i].collectible;
+ gSaveContext.save.saveInfo.permanentSceneFlags[i].chest = gSaveContext.cycleSceneFlags[i].chest;
+ gSaveContext.save.saveInfo.permanentSceneFlags[i].switch0 = gSaveContext.cycleSceneFlags[i].switch0;
+ gSaveContext.save.saveInfo.permanentSceneFlags[i].switch1 = gSaveContext.cycleSceneFlags[i].switch1;
+ gSaveContext.save.saveInfo.permanentSceneFlags[i].clearedRoom = gSaveContext.cycleSceneFlags[i].clearedRoom;
+ gSaveContext.save.saveInfo.permanentSceneFlags[i].collectible = gSaveContext.cycleSceneFlags[i].collectible;
}
- gSaveContext.save.checksum = 0;
- gSaveContext.save.checksum = Sram_CalcChecksum(&gSaveContext.save, sizeof(Save));
+ gSaveContext.save.saveInfo.checksum = 0;
+ gSaveContext.save.saveInfo.checksum = Sram_CalcChecksum(&gSaveContext.save, sizeof(Save));
if (gSaveContext.unk_3F3F) {
Lib_MemCpy(sramCtx->saveBuf, &gSaveContext, sizeof(Save));
@@ -1062,15 +1136,15 @@ void func_80145698(SramContext* sramCtx) {
s32 i;
for (i = 0; i < ARRAY_COUNT(gSaveContext.cycleSceneFlags); i++) {
- gSaveContext.save.permanentSceneFlags[i].chest = gSaveContext.cycleSceneFlags[i].chest;
- gSaveContext.save.permanentSceneFlags[i].switch0 = gSaveContext.cycleSceneFlags[i].switch0;
- gSaveContext.save.permanentSceneFlags[i].switch1 = gSaveContext.cycleSceneFlags[i].switch1;
- gSaveContext.save.permanentSceneFlags[i].clearedRoom = gSaveContext.cycleSceneFlags[i].clearedRoom;
- gSaveContext.save.permanentSceneFlags[i].collectible = gSaveContext.cycleSceneFlags[i].collectible;
+ gSaveContext.save.saveInfo.permanentSceneFlags[i].chest = gSaveContext.cycleSceneFlags[i].chest;
+ gSaveContext.save.saveInfo.permanentSceneFlags[i].switch0 = gSaveContext.cycleSceneFlags[i].switch0;
+ gSaveContext.save.saveInfo.permanentSceneFlags[i].switch1 = gSaveContext.cycleSceneFlags[i].switch1;
+ gSaveContext.save.saveInfo.permanentSceneFlags[i].clearedRoom = gSaveContext.cycleSceneFlags[i].clearedRoom;
+ gSaveContext.save.saveInfo.permanentSceneFlags[i].collectible = gSaveContext.cycleSceneFlags[i].collectible;
}
- gSaveContext.save.checksum = 0;
- gSaveContext.save.checksum = Sram_CalcChecksum(&gSaveContext.save, sizeof(Save));
+ gSaveContext.save.saveInfo.checksum = 0;
+ gSaveContext.save.saveInfo.checksum = Sram_CalcChecksum(&gSaveContext.save, sizeof(Save));
if (gSaveContext.unk_3F3F) {
Lib_MemCpy(sramCtx->saveBuf, &gSaveContext, sizeof(Save));
Lib_MemCpy(&sramCtx->saveBuf[0x2000], &gSaveContext.save, sizeof(Save));
@@ -1126,14 +1200,14 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) {
} else {
// Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]);
Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]);
- temp_s2 = gSaveContext.save.checksum;
- gSaveContext.save.checksum = 0;
+ temp_s2 = gSaveContext.save.saveInfo.checksum;
+ gSaveContext.save.saveInfo.checksum = 0;
temp_v0_2 = Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64]);
- gSaveContext.save.checksum = temp_s2;
+ gSaveContext.save.saveInfo.checksum = temp_s2;
- if (CHECK_NEWF(gSaveContext.save.playerData.newf) || (temp_s2 != temp_v0_2)) {
+ if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (temp_s2 != temp_v0_2)) {
sp6E = 1;
- if (CHECK_NEWF2(gSaveContext.save.playerData.newf)) {}
+ if (CHECK_NEWF2(gSaveContext.save.saveInfo.playerData.newf)) {}
phi_s2 = false;
if (func_80185968(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) {
@@ -1141,9 +1215,9 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) {
}
Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]);
- temp_s2 = gSaveContext.save.checksum;
- gSaveContext.save.checksum = 0;
- if (phi_s2 || CHECK_NEWF(gSaveContext.save.playerData.newf) ||
+ temp_s2 = 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]))) {
bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE);
Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save));
@@ -1152,55 +1226,57 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) {
}
}
- gSaveContext.save.checksum = 0;
- gSaveContext.save.checksum =
+ gSaveContext.save.saveInfo.checksum = 0;
+ gSaveContext.save.saveInfo.checksum =
Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64 & 0xFFFFFFFF]); // TODO: Needed?
- for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.playerData.newf); sp7A++) {
- fileSelect->newf[sp76][sp7A] = gSaveContext.save.playerData.newf[sp7A];
+ 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.playerData.deaths;
+ fileSelect->unk_2440C[sp76] = gSaveContext.save.saveInfo.playerData.deaths;
- for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.playerData.playerName); sp7A++) {
- fileSelect->unk_24414[sp76][sp7A] = gSaveContext.save.playerData.playerName[sp7A];
+ for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); sp7A++) {
+ fileSelect->unk_24414[sp76][sp7A] = gSaveContext.save.saveInfo.playerData.playerName[sp7A];
}
- fileSelect->healthCapacity[sp76] = gSaveContext.save.playerData.healthCapacity;
- fileSelect->health[sp76] = gSaveContext.save.playerData.health;
- fileSelect->unk_24454[sp76] = gSaveContext.save.inventory.defenseHearts;
- fileSelect->unk_24444[sp76] = gSaveContext.save.inventory.questItems;
+ 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->rupees[sp76] = gSaveContext.save.playerData.rupees;
+ fileSelect->rupees[sp76] = gSaveContext.save.saveInfo.playerData.rupees;
fileSelect->unk_24474[sp76] = CUR_UPG_VALUE(4);
for (sp7A = 0, phi_a0 = 0; sp7A < 24; sp7A++) {
- if (gSaveContext.save.inventory.items[sp7A + 24] != 0xFF) {
+ if (gSaveContext.save.saveInfo.inventory.items[sp7A + 24] != 0xFF) {
phi_a0++;
}
}
fileSelect->maskCount[sp76] = phi_a0;
- fileSelect->heartPieceCount[sp76] = ((gSaveContext.save.inventory.questItems & 0xF0000000) >> 0x1C);
+ fileSelect->heartPieceCount[sp76] =
+ ((gSaveContext.save.saveInfo.inventory.questItems & 0xF0000000) >> 0x1C);
}
if (sp6E == 1) {
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.checksum;
+ temp_s2 = gSaveContext.save.saveInfo.checksum;
if (func_80185968(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) {
phi_s2_3 = 1;
} else {
Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save));
- phi_s2_3 = gSaveContext.save.checksum;
- gSaveContext.save.checksum = 0;
+ phi_s2_3 = gSaveContext.save.saveInfo.checksum;
+ gSaveContext.save.saveInfo.checksum = 0;
sp7A = Sram_CalcChecksum(&gSaveContext.save, sizeof(Save));
}
- if (CHECK_NEWF(gSaveContext.save.playerData.newf) || (phi_s2_3 != sp7A) || (phi_s2_3 != temp_s2)) {
+ 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.save, sramCtx->saveBuf, sizeof(Save));
Lib_MemCpy(&sramCtx->saveBuf[0x2000], &gSaveContext.save, sizeof(Save));
@@ -1217,15 +1293,15 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) {
D_801C6870[sp64]); // TODO: Needed?
} else {
Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]);
- temp_s2 = gSaveContext.save.checksum;
+ temp_s2 = gSaveContext.save.saveInfo.checksum;
- gSaveContext.save.checksum = 0;
+ gSaveContext.save.saveInfo.checksum = 0;
temp_v0_2 = Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64]);
- gSaveContext.save.checksum = temp_s2;
- if (CHECK_NEWF(gSaveContext.save.playerData.newf) || (temp_s2 != temp_v0_2)) {
+ gSaveContext.save.saveInfo.checksum = temp_s2;
+ if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (temp_s2 != temp_v0_2)) {
sp6E = 1;
- if ((gSaveContext.save.playerData.newf[0] == 'Z') &&
- (gSaveContext.save.playerData.newf[1] == 'E')) {
+ if ((gSaveContext.save.saveInfo.playerData.newf[0] == 'Z') &&
+ (gSaveContext.save.saveInfo.playerData.newf[1] == 'E')) {
phi_s2 = false;
}
@@ -1234,9 +1310,9 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) {
}
Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]);
- temp_s2 = gSaveContext.save.checksum;
- gSaveContext.save.checksum = 0;
- if (phi_s2 || CHECK_NEWF(gSaveContext.save.playerData.newf) ||
+ temp_s2 = 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]))) {
bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE);
Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]);
@@ -1245,58 +1321,58 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) {
}
}
- gSaveContext.save.checksum = 0;
- gSaveContext.save.checksum =
+ gSaveContext.save.saveInfo.checksum = 0;
+ gSaveContext.save.saveInfo.checksum =
Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64 & 0xFFFFFFFF]); // TODO: Needed?
- for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.playerData.newf); sp7A++) {
- fileSelect->newf[sp76][sp7A] = gSaveContext.save.playerData.newf[sp7A];
+ 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.playerData.deaths;
+ fileSelect->unk_2440C[sp76] = gSaveContext.save.saveInfo.playerData.deaths;
- for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.playerData.playerName); sp7A++) {
+ for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); sp7A++) {
phi_s2 += 0; // TODO: Needed?
- fileSelect->unk_24414[sp76][sp7A] = gSaveContext.save.playerData.playerName[sp7A];
+ fileSelect->unk_24414[sp76][sp7A] = gSaveContext.save.saveInfo.playerData.playerName[sp7A];
}
- fileSelect->healthCapacity[sp76] = gSaveContext.save.playerData.healthCapacity;
- fileSelect->health[sp76] = gSaveContext.save.playerData.health;
- fileSelect->unk_24454[sp76] = gSaveContext.save.inventory.defenseHearts;
- fileSelect->unk_24444[sp76] = gSaveContext.save.inventory.questItems;
+ 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->rupees[sp76] = gSaveContext.save.playerData.rupees;
+ fileSelect->rupees[sp76] = gSaveContext.save.saveInfo.playerData.rupees;
fileSelect->unk_24474[sp76] = CUR_UPG_VALUE(4);
for (sp7A = 0, phi_a0 = 0; sp7A < 24; sp7A++) {
- if (gSaveContext.save.inventory.items[sp7A + 24] != 0xFF) {
+ if (gSaveContext.save.saveInfo.inventory.items[sp7A + 24] != 0xFF) {
phi_a0++;
}
}
fileSelect->maskCount[sp76] = phi_a0;
fileSelect->heartPieceCount[sp76] =
- ((gSaveContext.save.inventory.questItems & 0xF0000000) >> 0x1C);
+ ((gSaveContext.save.saveInfo.inventory.questItems & 0xF0000000) >> 0x1C);
}
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.checksum;
+ temp_s2 = gSaveContext.save.saveInfo.checksum;
if (func_80185968(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) {
phi_s2_3 = 1;
} else {
Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]);
- phi_s2_3 = gSaveContext.save.checksum;
- gSaveContext.save.checksum = 0;
- // phi_s2_3 = gSaveContext.save.checksum;
+ phi_s2_3 = gSaveContext.save.saveInfo.checksum;
+ gSaveContext.save.saveInfo.checksum = 0;
+ // phi_s2_3 = gSaveContext.save.saveInfo.checksum;
sp7A = Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64]);
}
- if (CHECK_NEWF(gSaveContext.save.playerData.newf) || (phi_s2_3 != sp7A) ||
+ 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]);
@@ -1368,32 +1444,33 @@ void func_80146628(FileSelectState* fileSelect2, SramContext* sramCtx) {
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.playerData.deaths;
+ fileSelect->unk_24410[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.deaths;
- for (i = 0; i < ARRAY_COUNT(gSaveContext.save.playerData.playerName); i++) {
- fileSelect->unk_24424[fileSelect->fileNum][i] = gSaveContext.save.playerData.playerName[i];
+ 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->unk_24438[fileSelect->fileNum] = gSaveContext.save.playerData.healthCapacity;
- fileSelect->unk_24440[fileSelect->fileNum] = gSaveContext.save.playerData.health;
- fileSelect->unk_24456[fileSelect->fileNum] = gSaveContext.save.inventory.defenseHearts;
- fileSelect->unk_2444C[fileSelect->fileNum] = gSaveContext.save.inventory.questItems;
+ 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.playerData.rupees;
+ fileSelect->unk_24470[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.rupees;
// = CUR_UPG_VALUE(UPG_WALLET);
fileSelect->unk_24476[fileSelect->fileNum] =
- (gSaveContext.save.inventory.upgrades & gUpgradeMasks[4]) >> gUpgradeShifts[4];
+ (gSaveContext.save.saveInfo.inventory.upgrades & gUpgradeMasks[4]) >> gUpgradeShifts[4];
for (i = 0, maskCount = 0; i < 24; i++) {
- if (gSaveContext.save.inventory.items[i + 24] != ITEM_NONE) {
+ if (gSaveContext.save.saveInfo.inventory.items[i + 24] != ITEM_NONE) {
maskCount++;
}
}
fileSelect->unk_2447A[fileSelect->fileNum] = maskCount;
- fileSelect->unk_2447E[fileSelect->fileNum] = (gSaveContext.save.inventory.questItems & 0xF0000000) >> 0x1C;
+ fileSelect->unk_2447E[fileSelect->fileNum] =
+ (gSaveContext.save.saveInfo.inventory.questItems & 0xF0000000) >> 0x1C;
}
// clear buffer
@@ -1409,33 +1486,33 @@ void func_80146628(FileSelectState* fileSelect2, SramContext* sramCtx) {
// copy buffer to save context
Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save));
- fileSelect->unk_2440C[fileSelect->fileNum] = gSaveContext.save.playerData.deaths;
+ fileSelect->unk_2440C[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.deaths;
- for (i = 0; i < ARRAY_COUNT(gSaveContext.save.playerData.playerName); i++) {
- fileSelect->unk_24414[fileSelect->fileNum][i] = gSaveContext.save.playerData.playerName[i];
+ 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->healthCapacity[fileSelect->fileNum] = gSaveContext.save.playerData.healthCapacity;
- fileSelect->health[fileSelect->fileNum] = gSaveContext.save.playerData.health;
- fileSelect->unk_24454[fileSelect->fileNum] = gSaveContext.save.inventory.defenseHearts;
- fileSelect->unk_24444[fileSelect->fileNum] = gSaveContext.save.inventory.questItems;
+ 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.playerData.rupees;
+ fileSelect->rupees[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.rupees;
// = CUR_UPG_VALUE(UPG_WALLET);
fileSelect->unk_24474[fileSelect->fileNum] =
- (gSaveContext.save.inventory.upgrades & gUpgradeMasks[4]) >> gUpgradeShifts[4];
+ (gSaveContext.save.saveInfo.inventory.upgrades & gUpgradeMasks[4]) >> gUpgradeShifts[4];
for (i = 0, maskCount = 0; i < 24; i++) {
- if (gSaveContext.save.inventory.items[i + 24] != ITEM_NONE) {
+ if (gSaveContext.save.saveInfo.inventory.items[i + 24] != ITEM_NONE) {
maskCount++;
}
}
fileSelect->maskCount[fileSelect->fileNum] = maskCount;
fileSelect->heartPieceCount[fileSelect->fileNum] =
- (gSaveContext.save.inventory.questItems & 0xF0000000) >> 0x1C;
+ (gSaveContext.save.saveInfo.inventory.questItems & 0xF0000000) >> 0x1C;
}
gSaveContext.save.time = D_801F6AF0;
@@ -1454,54 +1531,55 @@ void Sram_InitSave(FileSelectState* fileSelect2, SramContext* sramCtx) {
if (gSaveContext.unk_3F3F) {
Sram_InitNewSave();
if (fileSelect->unk_24480 == 0) {
- gSaveContext.save.cutscene = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = 0xFFF0;
}
- for (phi_v0 = 0; phi_v0 < ARRAY_COUNT(gSaveContext.save.playerData.playerName); phi_v0++) {
- gSaveContext.save.playerData.playerName[phi_v0] = fileSelect->unk_24414[fileSelect->unk_24480][phi_v0];
+ 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];
}
- gSaveContext.save.playerData.newf[0] = 'Z';
- gSaveContext.save.playerData.newf[1] = 'E';
- gSaveContext.save.playerData.newf[2] = 'L';
- gSaveContext.save.playerData.newf[3] = 'D';
- gSaveContext.save.playerData.newf[4] = 'A';
- gSaveContext.save.playerData.newf[5] = '3';
+ gSaveContext.save.saveInfo.playerData.newf[0] = 'Z';
+ gSaveContext.save.saveInfo.playerData.newf[1] = 'E';
+ gSaveContext.save.saveInfo.playerData.newf[2] = 'L';
+ gSaveContext.save.saveInfo.playerData.newf[3] = 'D';
+ gSaveContext.save.saveInfo.playerData.newf[4] = 'A';
+ gSaveContext.save.saveInfo.playerData.newf[5] = '3';
- gSaveContext.save.checksum = Sram_CalcChecksum(&gSaveContext.save, sizeof(Save));
+ gSaveContext.save.saveInfo.checksum = Sram_CalcChecksum(&gSaveContext.save, sizeof(Save));
Lib_MemCpy(sramCtx->saveBuf, &gSaveContext.save, sizeof(Save));
Lib_MemCpy(&sramCtx->saveBuf[0x2000], &gSaveContext.save, sizeof(Save));
- for (i = 0; i < ARRAY_COUNT(gSaveContext.save.playerData.newf); i++) {
- fileSelect->newf[fileSelect->unk_24480][i] = gSaveContext.save.playerData.newf[i];
+ 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->unk_2440C[fileSelect->unk_24480] = gSaveContext.save.playerData.deaths;
+ fileSelect->unk_2440C[fileSelect->unk_24480] = gSaveContext.save.saveInfo.playerData.deaths;
- for (i = 0; i < ARRAY_COUNT(gSaveContext.save.playerData.playerName); i++) {
- fileSelect->unk_24414[fileSelect->unk_24480][i] = gSaveContext.save.playerData.playerName[i];
+ 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->healthCapacity[fileSelect->unk_24480] = gSaveContext.save.playerData.healthCapacity;
- fileSelect->health[fileSelect->unk_24480] = gSaveContext.save.playerData.health;
- fileSelect->unk_24454[fileSelect->unk_24480] = gSaveContext.save.inventory.defenseHearts;
- fileSelect->unk_24444[fileSelect->unk_24480] = gSaveContext.save.inventory.questItems;
+ 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.playerData.rupees;
+ fileSelect->rupees[fileSelect->unk_24480] = gSaveContext.save.saveInfo.playerData.rupees;
fileSelect->unk_24474[fileSelect->unk_24480] = CUR_UPG_VALUE(UPG_WALLET);
for (i = 0, maskCount = 0; i < 24; i++) {
- if (gSaveContext.save.inventory.items[i + 24] != ITEM_NONE) {
+ if (gSaveContext.save.saveInfo.inventory.items[i + 24] != ITEM_NONE) {
maskCount++;
}
}
fileSelect->maskCount[fileSelect->unk_24480] = maskCount;
fileSelect->heartPieceCount[fileSelect->unk_24480] =
- (gSaveContext.save.inventory.questItems & 0xF0000000) >> 0x1C;
+ (gSaveContext.save.saveInfo.inventory.questItems & 0xF0000000) >> 0x1C;
}
gSaveContext.save.time = D_801F6AF0;
@@ -1524,7 +1602,7 @@ void Sram_InitSram(GameState* gameState, SramContext* sramCtx) {
void Sram_Alloc(GameState* gameState, SramContext* sramCtx) {
if (gSaveContext.unk_3F3F) {
- sramCtx->saveBuf = THA_AllocEndAlign16(&gameState->heap, SAVE_BUFFER_SIZE);
+ sramCtx->saveBuf = THA_AllocTailAlign16(&gameState->heap, SAVE_BUFFER_SIZE);
sramCtx->status = 0;
}
}
@@ -1555,21 +1633,20 @@ void Sram_SaveSpecialEnterClockTown(PlayState* play) {
* Saves when beating the game, after showing the "Dawn of the New Day" message
*/
void Sram_SaveSpecialNewDay(PlayState* play) {
- s32 cutscene = gSaveContext.save.cutscene;
+ s32 cutsceneIndex = gSaveContext.save.cutsceneIndex;
s32 day;
u16 time = gSaveContext.save.time;
day = gSaveContext.save.day;
- // Unconfirmed: "Obtained Fierce Deity Mask?"
- gSaveContext.save.weekEventReg[84] &= (u8)~0x20;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_84_20);
Sram_SaveEndOfCycle(play);
func_8014546C(&play->sramCtx);
gSaveContext.save.day = day;
gSaveContext.save.time = time;
- gSaveContext.save.cutscene = cutscene;
+ gSaveContext.save.cutsceneIndex = cutsceneIndex;
func_80185F64(play->sramCtx.saveBuf, D_801C67C8[gSaveContext.fileNum * 2], D_801C67F0[gSaveContext.fileNum * 2]);
}
@@ -1639,7 +1716,7 @@ void func_80147198(SramContext* sramCtx) {
sramCtx->status = 0;
bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE);
gSaveContext.save.isOwlSave = false;
- gSaveContext.save.checksum = 0;
+ gSaveContext.save.saveInfo.checksum = 0;
// flash read to buffer then copy to save context
func_80185968(sramCtx->saveBuf, sramCtx->curPage, sramCtx->numPages);
Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, offsetof(SaveContext, fileNum));
@@ -1651,15 +1728,15 @@ void func_80147314(SramContext* sramCtx, s32 fileNum) {
gSaveContext.save.isOwlSave = false;
- gSaveContext.save.playerData.newf[0] = '\0';
- gSaveContext.save.playerData.newf[1] = '\0';
- gSaveContext.save.playerData.newf[2] = '\0';
- gSaveContext.save.playerData.newf[3] = '\0';
- gSaveContext.save.playerData.newf[4] = '\0';
- gSaveContext.save.playerData.newf[5] = '\0';
+ gSaveContext.save.saveInfo.playerData.newf[0] = '\0';
+ gSaveContext.save.saveInfo.playerData.newf[1] = '\0';
+ gSaveContext.save.saveInfo.playerData.newf[2] = '\0';
+ gSaveContext.save.saveInfo.playerData.newf[3] = '\0';
+ gSaveContext.save.saveInfo.playerData.newf[4] = '\0';
+ gSaveContext.save.saveInfo.playerData.newf[5] = '\0';
- gSaveContext.save.checksum = 0;
- gSaveContext.save.checksum = Sram_CalcChecksum(&gSaveContext, offsetof(SaveContext, fileNum));
+ gSaveContext.save.saveInfo.checksum = 0;
+ 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]);
@@ -1667,12 +1744,12 @@ void func_80147314(SramContext* sramCtx, s32 fileNum) {
gSaveContext.save.isOwlSave = true;
- gSaveContext.save.playerData.newf[0] = 'Z';
- gSaveContext.save.playerData.newf[1] = 'E';
- gSaveContext.save.playerData.newf[2] = 'L';
- gSaveContext.save.playerData.newf[3] = 'D';
- gSaveContext.save.playerData.newf[4] = 'A';
- gSaveContext.save.playerData.newf[5] = '3';
+ gSaveContext.save.saveInfo.playerData.newf[0] = 'Z';
+ gSaveContext.save.saveInfo.playerData.newf[1] = 'E';
+ gSaveContext.save.saveInfo.playerData.newf[2] = 'L';
+ gSaveContext.save.saveInfo.playerData.newf[3] = 'D';
+ gSaveContext.save.saveInfo.playerData.newf[4] = 'A';
+ gSaveContext.save.saveInfo.playerData.newf[5] = '3';
}
void func_80147414(SramContext* sramCtx, s32 fileNum, s32 arg2) {
diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c
index efc6774a7..a4d95af64 100644
--- a/src/code/z_sub_s.c
+++ b/src/code/z_sub_s.c
@@ -112,7 +112,7 @@ Gfx* SubS_DrawTransformFlex(PlayState* play, void** skeleton, Vec3s* jointTable,
Gfx* limbDList;
Vec3f pos;
Vec3s rot;
- Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, ALIGN16(dListCount * sizeof(Mtx)));
+ Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, dListCount * sizeof(Mtx));
if (skeleton == NULL) {
return NULL;
@@ -517,7 +517,7 @@ Actor* SubS_FindNearestActor(Actor* actor, PlayState* play, u8 actorCategory, s1
actorIter = actorTmp;
if (actorIter != actor) {
- dist = Actor_DistanceBetweenActors(actor, actorIter);
+ dist = Actor_WorldDistXYZToActor(actor, actorIter);
if (!isSetup || dist < minDist) {
closestActor = actorIter;
minDist = dist;
@@ -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, RADF_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d);
+ func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d);
if (((px * actor->world.pos.x) + (pz * actor->world.pos.z) + d) > 0.0f) {
reached = true;
}
@@ -762,7 +762,7 @@ s32 SubS_WeightPathing_Move(Actor* actor, Path* path, s32* waypoint, f32* progre
}
while (true) {
if (!SubS_WeightPathing_ComputePoint(path, *waypoint, &point, *progress, direction) ||
- ((s32)(actor->speedXZ * 10000.0f) == 0)) {
+ ((s32)(actor->speed * 10000.0f) == 0)) {
return false;
}
dist = Math_Vec3f_DistXZ(&actor->world.pos, &point);
@@ -828,7 +828,7 @@ s32 func_8013C964(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, s32 it
case 1:
yRange = fabsf(actor->playerHeightRel) + 1.0f;
xzRange = actor->xzDistToPlayer + 1.0f;
- ret = Actor_PickUp(actor, play, itemId, xzRange, yRange);
+ ret = Actor_OfferGetItem(actor, play, itemId, xzRange, yRange);
break;
case 2:
@@ -1023,13 +1023,13 @@ s16 SubS_ComputeTrackPointRot(s16* rot, s16 rotMax, s16 target, f32 slowness, f3
f32 step;
f32 prevRotStep;
- step = (f32)(target - *rot) * (360.0f / (f32)0x10000);
+ step = BINANG_TO_DEG(target - *rot);
step *= gFramerateDivisorHalf;
prevRotStep = step;
if (step >= 0.0f) {
step /= slowness;
step = CLAMP(step, stepMin, stepMax);
- *rot += (s16)((step * (f32)0x10000) / 360.0f);
+ *rot += DEG_TO_BINANG_ALT2(step);
if (prevRotStep < stepMin) {
*rot = target;
}
@@ -1039,7 +1039,7 @@ s16 SubS_ComputeTrackPointRot(s16* rot, s16 rotMax, s16 target, f32 slowness, f3
} else {
step = (step / slowness) * -1.0f;
step = CLAMP(step, stepMin, stepMax);
- *rot -= (s16)((step * (f32)0x10000) / 360.0f);
+ *rot -= DEG_TO_BINANG_ALT2(step);
if (-stepMin < prevRotStep) {
*rot = target;
}
@@ -1072,8 +1072,8 @@ s32 SubS_TrackPoint(Vec3f* target, Vec3f* focusPos, Vec3s* shapeRot, Vec3s* trac
s16 targetX;
f32 diffZ = target->z - focusPos->z;
- yaw = Math_FAtan2F(diffZ, diffX);
- pitch = Math_FAtan2F(sqrtf(SQ(diffX) + SQ(diffZ)), target->y - focusPos->y);
+ yaw = Math_Atan2S_XY(diffZ, diffX);
+ pitch = Math_Atan2S_XY(sqrtf(SQ(diffX) + SQ(diffZ)), target->y - focusPos->y);
Math_SmoothStepToS(&trackTarget->x, pitch, 4, 0x2710, 0);
Math_SmoothStepToS(&trackTarget->y, yaw, 4, 0x2710, 0);
@@ -1306,8 +1306,8 @@ void SubS_ActorPathing_ComputePointInfo(PlayState* play, ActorPathing* actorPath
diff.z = actorPath->curPoint.z - actorPath->worldPos->z;
actorPath->distSqToCurPointXZ = Math3D_XZLengthSquared(diff.x, diff.z);
actorPath->distSqToCurPoint = Math3D_LengthSquared(&diff);
- actorPath->rotToCurPoint.y = Math_FAtan2F(diff.z, diff.x);
- actorPath->rotToCurPoint.x = Math_FAtan2F(sqrtf(actorPath->distSqToCurPointXZ), -diff.y);
+ actorPath->rotToCurPoint.y = Math_Atan2S_XY(diff.z, diff.x);
+ actorPath->rotToCurPoint.x = Math_Atan2S_XY(sqrtf(actorPath->distSqToCurPointXZ), -diff.y);
actorPath->rotToCurPoint.z = 0;
}
@@ -1386,48 +1386,53 @@ void SubS_ChangeAnimationBySpeedInfo(SkelAnime* skelAnime, AnimationSpeedInfo* a
*curAnimIndex = nextAnimIndex;
}
-s32 SubS_StartActorCutscene(Actor* actor, s16 nextCutscene, s16 curCutscene, s32 type) {
+s32 SubS_StartCutscene(Actor* actor, s16 nextCsId, s16 curCsId, s32 type) {
s32 isStarted = false;
- if ((curCutscene != -1) && (ActorCutscene_GetCurrentIndex() == curCutscene)) {
- ActorCutscene_Stop(curCutscene);
- ActorCutscene_SetIntentToPlay(nextCutscene);
- } else if (ActorCutscene_GetCanPlayNext(nextCutscene)) {
+ if ((curCsId != CS_ID_NONE) && (CutsceneManager_GetCurrentCsId() == curCsId)) {
+ CutsceneManager_Stop(curCsId);
+ CutsceneManager_Queue(nextCsId);
+ } else if (CutsceneManager_IsNext(nextCsId)) {
switch (type) {
- case SUBS_CUTSCENE_SET_UNK_LINK_FIELDS:
- ActorCutscene_StartAndSetUnkLinkFields(nextCutscene, actor);
+ case SUBS_CUTSCENE_WITH_PLAYER:
+ CutsceneManager_StartWithPlayerCs(nextCsId, actor);
break;
+
case SUBS_CUTSCENE_NORMAL:
- ActorCutscene_Start(nextCutscene, actor);
+ CutsceneManager_Start(nextCsId, actor);
break;
- case SUBS_CUTSCENE_SET_FLAG:
- ActorCutscene_StartAndSetFlag(nextCutscene, actor);
+
+ case SUBS_CUTSCENE_WITH_PLAYER_SET_FLAG:
+ CutsceneManager_StartWithPlayerCsAndSetFlag(nextCsId, actor);
+ break;
+
+ default:
break;
}
isStarted = true;
} else {
- ActorCutscene_SetIntentToPlay(nextCutscene);
+ CutsceneManager_Queue(nextCsId);
}
return isStarted;
}
-s32 SubS_FillCutscenesList(Actor* actor, s16 cutscenes[], s16 numCutscenes) {
- s16 cs;
+s32 SubS_FillCutscenesList(Actor* actor, s16 csIdList[], s16 numCutscenes) {
+ s16 csId;
s32 i;
for (i = 0; i < numCutscenes; i++) {
- cutscenes[i] = -1;
+ csIdList[i] = CS_ID_NONE;
}
- cs = actor->cutscene;
+ csId = actor->csId;
i = 0;
- while (cs != -1) {
- // Note: Infinite loop if numCutscenes is less than possible additional cutscenes
+ while (csId != CS_ID_NONE) {
+ // Note: Infinite loop if numCutscenes is less than possible additional csIdList
if (i < numCutscenes) {
- cutscenes[i] = cs;
- cs = ActorCutscene_GetAdditionalCutscene(cs);
+ csIdList[i] = csId;
+ csId = CutsceneManager_GetAdditionalCsId(csId);
i++;
}
}
@@ -1522,7 +1527,7 @@ s32 func_8013E748(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, s32 ex
s32 SubS_ActorAndPlayerFaceEachOther(PlayState* play, Actor* actor, void* data) {
Player* player = GET_PLAYER(play);
Vec3s* yawTols = (Vec3s*)data;
- s16 playerYaw = ABS(BINANG_SUB(Actor_YawBetweenActors(&player->actor, actor), player->actor.shape.rot.y));
+ s16 playerYaw = ABS(BINANG_SUB(Actor_WorldYawTowardActor(&player->actor, actor), player->actor.shape.rot.y));
s16 actorYaw = ABS(BINANG_SUB(actor->yawTowardsPlayer, actor->shape.rot.y));
s32 areFacing = false;
s32 actorYawTol = ABS(yawTols->y);
diff --git a/src/code/z_vimode.c b/src/code/z_vimode.c
index 76479a028..b7d2dea64 100644
--- a/src/code/z_vimode.c
+++ b/src/code/z_vimode.c
@@ -15,9 +15,3 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_8014090C.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140970.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140CE0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140D04.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140D10.s")
diff --git a/src/code/z_viszbuf.c b/src/code/z_viszbuf.c
new file mode 100644
index 000000000..9970a1e1b
--- /dev/null
+++ b/src/code/z_viszbuf.c
@@ -0,0 +1,56 @@
+#include "global.h"
+
+#define VISZBUF_ZBUFFRAG_HEIGHT (TMEM_SIZE / (D_801FBBCC * G_IM_SIZ_16b_BYTES))
+
+void VisZbuf_Init(VisZbuf* this) {
+ this->useRgba = false;
+ this->setScissor = false;
+ this->primColor.r = 255;
+ this->primColor.g = 255;
+ this->primColor.b = 255;
+ this->primColor.a = 255;
+ this->envColor.r = 0;
+ this->envColor.g = 0;
+ this->envColor.b = 0;
+ this->envColor.a = 255;
+}
+
+void VisZbuf_Destroy(VisZbuf* this) {
+}
+
+void VisZbuf_Draw(VisZbuf* this, Gfx** gfxP, void* zbuffer) {
+ Gfx* gfx = *gfxP;
+ s32 height = VISZBUF_ZBUFFRAG_HEIGHT;
+ s32 y;
+ s32 fmt = !this->useRgba ? G_IM_FMT_IA : G_IM_FMT_RGBA;
+
+ if (zbuffer == NULL) {
+ return;
+ }
+
+ gDPPipeSync(gfx++);
+ if (this->setScissor == true) {
+ gSPDisplayList(gfx++, D_0E000000.setScissor);
+ }
+
+ gDPSetOtherMode(gfx++,
+ 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_NONE | G_ZS_PRIM | G_RM_OPA_SURF | G_RM_OPA_SURF2);
+ gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT,
+ PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT);
+ 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,
+ 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,
+ 1 << 10);
+ }
+
+ gDPPipeSync(gfx++);
+ *gfxP = gfx;
+}
diff --git a/src/code/z_vr_box.c b/src/code/z_vr_box.c
index 6dd46633c..911e3e757 100644
--- a/src/code/z_vr_box.c
+++ b/src/code/z_vr_box.c
@@ -1,15 +1,15 @@
#include "global.h"
-s32 D_801C5E30[] = { 0, 0x2000, 0x4000, 0x6000, 0x8000, 0xC000 };
+u32 D_801C5E30[] = { 0, 0x2000, 0x4000, 0x6000, 0x8000, 0xC000 };
u16 D_801C5E48[] = {
0, 2, 10, 12, 2, 4, 12, 14, 10, 12, 20, 22, 12, 14, 22, 24, 1, 3, 5, 6, 7, 8, 9, 11, 13, 15, 16, 17, 18, 19, 21, 23,
};
-s32 D_801C5E88[] = { 0, 0x7C0, 0xF80, 0x1740, 0x1F00 };
+s32 D_801C5E88[] = { 0, 62 << 5, 124 << 5, 186 << 5, 248 << 5 };
-s32 D_801C5E9C[] = { 0, 0x7C0, 0xF80, 0x1740, 0x1F00 };
+s32 D_801C5E9C[] = { 0, 62 << 5, 124 << 5, 186 << 5, 248 << 5 };
-s32 D_801C5EB0[] = { 0, 0x7C0, 0xF80, 0x7C0, 0 };
+s32 D_801C5EB0[] = { 0, 62 << 5, 124 << 5, 62 << 5, 0 };
s16 D_801C5EC4[] = {
0, 16, 19, 18, 16, 1, 20, 19, 1, 17, 21, 20, 17, 5, 22, 21, 18, 19, 23, 2, 19, 20,
@@ -17,7 +17,155 @@ s16 D_801C5EC4[] = {
24, 7, 29, 28, 25, 26, 30, 10, 26, 27, 11, 30, 27, 28, 31, 11, 28, 29, 15, 31,
};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_vr_box/func_80142440.s")
+s32 func_80142440(SkyboxContext* skyboxCtx, Vtx* roomVtx, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6, s32 arg7,
+ s32 arg8) {
+ s32 i;
+ s32 j;
+ s32 k;
+ s16 phi_a0_4;
+ s16 phi_t1;
+ s32 temp1;
+ u16 index;
+ s16 phi_a2_4;
+ s16 phi_ra;
+ s16 phi_t2_4;
+ s32 temp2;
+ s32 roomVtxPosX[5 * 5];
+ s32 roomVtxPosY[5 * 5];
+ s32 roomVtxPosZ[5 * 5];
+ s32 roomVtxTexU[5 * 5];
+ s32 roomVtxTexV[5 * 5];
+ s32 pad;
+
+ switch (arg8) {
+ case 0:
+ case 1:
+ temp1 = arg4;
+
+ for (i = 0, k = 0; k < 25; i++) {
+ temp2 = arg3;
+ for (j = 0; j < 5; j++, k++) {
+ roomVtxPosZ[k] = arg5;
+ roomVtxPosX[k] = temp2;
+ roomVtxPosY[k] = temp1;
+ roomVtxTexU[k] = D_801C5E88[j];
+ roomVtxTexV[k] = D_801C5EB0[i];
+ temp2 += arg6;
+ }
+ temp1 += arg7;
+ }
+ break;
+
+ case 2:
+ case 3:
+ temp1 = arg4;
+
+ for (i = 0, k = 0; k < 25; i++) {
+ temp2 = arg5;
+ for (j = 0; j < 5; j++, k++) {
+ roomVtxPosX[k] = arg3;
+ roomVtxPosY[k] = temp1;
+ roomVtxPosZ[k] = temp2;
+ roomVtxTexU[k] = D_801C5E88[j];
+ roomVtxTexV[k] = D_801C5EB0[i];
+ temp2 += arg6;
+ }
+ temp1 += arg7;
+ }
+ break;
+
+ case 4:
+ case 5:
+ temp1 = arg5;
+
+ for (i = 0, k = 0; k < 25; i++) {
+ temp2 = arg3;
+ for (j = 0; j < 5; j++, k++) {
+ roomVtxPosY[k] = arg4;
+ roomVtxPosX[k] = temp2;
+ roomVtxPosZ[k] = temp1;
+ roomVtxTexU[k] = D_801C5E88[j];
+ roomVtxTexV[k] = D_801C5E9C[i];
+ temp2 += arg6;
+ }
+ temp1 += arg7;
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ skyboxCtx->roomDL = &skyboxCtx->dListBuf[2 * arg8][0];
+
+ for (i = 0; i < 0x20; i++) {
+ index = D_801C5E48[i];
+
+ roomVtx[arg2 + i].v.ob[0] = roomVtxPosX[index];
+ roomVtx[arg2 + i].v.ob[1] = roomVtxPosY[index];
+ roomVtx[arg2 + i].v.ob[2] = roomVtxPosZ[index];
+ roomVtx[arg2 + i].v.flag = 0;
+ roomVtx[arg2 + i].v.tc[0] = roomVtxTexU[index];
+ roomVtx[arg2 + i].v.tc[1] = roomVtxTexV[index];
+ roomVtx[arg2 + i].v.cn[1] = 0;
+ roomVtx[arg2 + i].v.cn[2] = 0;
+ roomVtx[arg2 + i].v.cn[0] = 255;
+ }
+ gSPVertex(skyboxCtx->roomDL++, &roomVtx[arg2], 32, 0);
+ arg2 += i;
+ gSPCullDisplayList(skyboxCtx->roomDL++, 0, 15);
+
+ if ((arg8 == 4) || (arg8 == 5)) {
+ phi_a2_4 = 0;
+ for (phi_t2_4 = 0, phi_ra = 0; phi_ra < 4; phi_ra++, phi_a2_4 += 0x1F) {
+ for (phi_a0_4 = 0, phi_t1 = 0; phi_t1 < 4; phi_t1++, phi_a0_4 += 0x1F, phi_t2_4 += 4) {
+ gDPLoadMultiTile(skyboxCtx->roomDL++, (uintptr_t)skyboxCtx->staticSegments[0] + D_801C5E30[arg8], 0,
+ G_TX_RENDERTILE, G_IM_FMT_CI, G_IM_SIZ_8b, 128, 0, phi_a0_4, phi_a2_4, phi_a0_4 + 0x1F,
+ phi_a2_4 + 0x1F, 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);
+ gDPLoadMultiTile(skyboxCtx->roomDL++, (uintptr_t)skyboxCtx->staticSegments[1] + D_801C5E30[arg8], 0x80,
+ 1, G_IM_FMT_CI, G_IM_SIZ_8b, 128, 0, phi_a0_4, phi_a2_4, phi_a0_4 + 0x1F,
+ phi_a2_4 + 0x1F, 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);
+ gSP1Quadrangle(skyboxCtx->roomDL++, D_801C5EC4[phi_t2_4 + 1], D_801C5EC4[phi_t2_4 + 2],
+ D_801C5EC4[phi_t2_4 + 3], D_801C5EC4[phi_t2_4 + 0], 3);
+ }
+ }
+ } else {
+ phi_a2_4 = 0;
+ for (phi_t2_4 = 0, phi_ra = 0; phi_ra < 2; phi_ra++, phi_a2_4 += 0x1F) {
+ for (phi_a0_4 = 0, phi_t1 = 0; phi_t1 < 4; phi_t1++, phi_a0_4 += 0x1F, phi_t2_4 += 4) {
+ gDPLoadMultiTile(skyboxCtx->roomDL++, (uintptr_t)skyboxCtx->staticSegments[0] + D_801C5E30[arg8], 0,
+ G_TX_RENDERTILE, G_IM_FMT_CI, G_IM_SIZ_8b, 128, 0, phi_a0_4, phi_a2_4, phi_a0_4 + 0x1F,
+ phi_a2_4 + 0x1F, 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);
+ gDPLoadMultiTile(skyboxCtx->roomDL++, (uintptr_t)skyboxCtx->staticSegments[1] + D_801C5E30[arg8], 0x80,
+ 1, G_IM_FMT_CI, G_IM_SIZ_8b, 128, 0, phi_a0_4, phi_a2_4, phi_a0_4 + 0x1F,
+ phi_a2_4 + 0x1F, 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);
+ gSP1Quadrangle(skyboxCtx->roomDL++, D_801C5EC4[phi_t2_4 + 1], D_801C5EC4[phi_t2_4 + 2],
+ D_801C5EC4[phi_t2_4 + 3], D_801C5EC4[phi_t2_4 + 0], 3);
+ }
+ }
+ phi_a2_4 -= 0x1F;
+ for (phi_ra = 0; phi_ra < 2; phi_ra++, phi_a2_4 -= 0x1F) {
+ for (phi_a0_4 = 0, phi_t1 = 0; phi_t1 < 4; phi_t1++, phi_a0_4 += 0x1F, phi_t2_4 += 4) {
+ gDPLoadMultiTile(skyboxCtx->roomDL++, (uintptr_t)skyboxCtx->staticSegments[0] + D_801C5E30[arg8], 0,
+ G_TX_RENDERTILE, G_IM_FMT_CI, G_IM_SIZ_8b, 128, 0, phi_a0_4, phi_a2_4, phi_a0_4 + 0x1F,
+ phi_a2_4 + 0x1F, 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);
+ gDPLoadMultiTile(skyboxCtx->roomDL++, (uintptr_t)skyboxCtx->staticSegments[1] + D_801C5E30[arg8], 0x80,
+ 1, G_IM_FMT_CI, G_IM_SIZ_8b, 128, 0, phi_a0_4, phi_a2_4, phi_a0_4 + 0x1F,
+ phi_a2_4 + 0x1F, 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);
+ gSP1Quadrangle(skyboxCtx->roomDL++, D_801C5EC4[phi_t2_4 + 1], D_801C5EC4[phi_t2_4 + 2],
+ D_801C5EC4[phi_t2_4 + 3], D_801C5EC4[phi_t2_4 + 0], 3);
+ }
+ }
+ }
+ gSPEndDisplayList(skyboxCtx->roomDL++);
+ return arg2;
+}
void func_80143148(SkyboxContext* skyboxCtx, s32 arg1) {
static struct_801C5F44 D_801C5F44[] = {
@@ -35,120 +183,126 @@ void func_80143148(SkyboxContext* skyboxCtx, s32 arg1) {
}
}
-void func_801431E8(GameState* gameState, SkyboxContext* skyboxCtx, s16 skyType) {
+void Skybox_Setup(GameState* gameState, SkyboxContext* skyboxCtx, s16 skyboxId) {
PlayState* play = (PlayState*)gameState;
size_t size;
- void* offset;
- s32 pad;
+ void* segment;
- skyboxCtx->rotZ = 0.0f;
+ skyboxCtx->rot.z = 0.0f;
- if (skyType != 1) {
- if (skyType != 2) {
- return;
- }
- } else {
- // Send a DMA request for the cloudy sky texture
- skyboxCtx->skyboxStaticSegment[0] = &D_80025D00;
- size = SEGMENT_ROM_SIZE(d2_cloud_static);
- offset = (void*)ALIGN8((u32)skyboxCtx->skyboxStaticSegment[0] + size);
- DmaMgr_SendRequest0(skyboxCtx->skyboxStaticSegment[0], SEGMENT_ROM_START(d2_cloud_static), size);
+ switch (skyboxId) {
+ case SKYBOX_NORMAL_SKY:
+ // Send a DMA request for the cloudy sky texture
+ skyboxCtx->staticSegments[0] = &D_80025D00;
+ size = SEGMENT_ROM_SIZE(d2_cloud_static);
+ segment = (void*)ALIGN8((uintptr_t)skyboxCtx->staticSegments[0] + size);
+ DmaMgr_SendRequest0(skyboxCtx->staticSegments[0], SEGMENT_ROM_START(d2_cloud_static), size);
- // Send a DMA request for the clear sky texture
- skyboxCtx->skyboxStaticSegment[1] = offset;
- size = SEGMENT_ROM_SIZE(d2_fine_static);
- offset = (void*)ALIGN8((u32)offset + size);
- DmaMgr_SendRequest0(skyboxCtx->skyboxStaticSegment[1], SEGMENT_ROM_START(d2_fine_static), size);
+ // Send a DMA request for the clear sky texture
+ skyboxCtx->staticSegments[1] = segment;
+ size = SEGMENT_ROM_SIZE(d2_fine_static);
+ segment = (void*)ALIGN8((uintptr_t)segment + size);
+ DmaMgr_SendRequest0(skyboxCtx->staticSegments[1], SEGMENT_ROM_START(d2_fine_static), size);
- // Send a DMA request for the skybox palette
- skyboxCtx->skyboxPaletteStaticSegment = offset;
- size = SEGMENT_ROM_SIZE(d2_fine_pal_static);
- offset = (void*)ALIGN8((u32)offset + size);
- DmaMgr_SendRequest0(skyboxCtx->skyboxPaletteStaticSegment, SEGMENT_ROM_START(d2_fine_pal_static), size);
+ // Send a DMA request for the skybox palette
+ skyboxCtx->paletteStaticSegment = segment;
+ size = SEGMENT_ROM_SIZE(d2_fine_pal_static);
+ segment = (void*)ALIGN8((uintptr_t)segment + size);
+ DmaMgr_SendRequest0(skyboxCtx->paletteStaticSegment, SEGMENT_ROM_START(d2_fine_pal_static), size);
- skyboxCtx->primR = 145;
- skyboxCtx->primG = 120;
- skyboxCtx->primB = 155;
+ skyboxCtx->prim.r = 145;
+ skyboxCtx->prim.g = 120;
+ skyboxCtx->prim.b = 155;
- skyboxCtx->envR = 40;
- skyboxCtx->envG = 0;
- skyboxCtx->envB = 40;
+ skyboxCtx->env.r = 40;
+ skyboxCtx->env.g = 0;
+ skyboxCtx->env.b = 40;
- // Inverted Stone Tower Temple and Inverted Stone Tower
- if ((play->sceneId == SCENE_F41) || (play->sceneId == SCENE_INISIE_R)) {
- skyboxCtx->rotZ = 3.15000009537f;
- }
+ // Inverted Stone Tower Temple and Inverted Stone Tower
+ if ((play->sceneId == SCENE_F41) || (play->sceneId == SCENE_INISIE_R)) {
+ skyboxCtx->rot.z = 3.15f;
+ }
+ break;
+
+ case SKYBOX_2:
+ break;
+
+ default:
+ break;
}
}
-void func_80143324(PlayState* play, SkyboxContext* skyboxCtx, s16 skyType) {
+void func_80143324(PlayState* play, SkyboxContext* skyboxCtx, s16 skyboxId) {
size_t size;
- if (1) {}
+ switch (skyboxId) {
+ case SKYBOX_NORMAL_SKY:
+ osCreateMesgQueue(&skyboxCtx->loadQueue, &skyboxCtx->loadMsg, 1);
- if (skyType == 1) {
- osCreateMesgQueue(&skyboxCtx->loadQueue, &skyboxCtx->loadMsg, 1);
+ if (play->envCtx.unk_10 == 0) {
+ // Send a DMA request for the clear sky texture
+ size = SEGMENT_ROM_SIZE(d2_fine_static);
- if (play->envCtx.unk_10 == 0) {
- // Send a DMA request for the clear sky texture
- size = SEGMENT_ROM_SIZE(d2_fine_static);
+ DmaMgr_SendRequestImpl(&skyboxCtx->unk188, skyboxCtx->staticSegments[0],
+ SEGMENT_ROM_START(d2_fine_static), size, 0, &skyboxCtx->loadQueue, NULL);
+ } else {
+ // Send a DMA request for the cloudy sky texture
+ size = SEGMENT_ROM_SIZE(d2_cloud_static);
- DmaMgr_SendRequestImpl(&skyboxCtx->unk188, skyboxCtx->skyboxStaticSegment[0],
- SEGMENT_ROM_START(d2_fine_static), size, 0, &skyboxCtx->loadQueue, NULL);
- } else {
- // Send a DMA request for the cloudy sky texture
- size = SEGMENT_ROM_SIZE(d2_cloud_static);
+ DmaMgr_SendRequestImpl(&skyboxCtx->unk188, skyboxCtx->staticSegments[0],
+ SEGMENT_ROM_START(d2_cloud_static), size, 0, &skyboxCtx->loadQueue, NULL);
+ }
- DmaMgr_SendRequestImpl(&skyboxCtx->unk188, skyboxCtx->skyboxStaticSegment[0],
- SEGMENT_ROM_START(d2_cloud_static), size, 0, &skyboxCtx->loadQueue, NULL);
- }
+ osRecvMesg(&skyboxCtx->loadQueue, NULL, OS_MESG_BLOCK);
+ osCreateMesgQueue(&skyboxCtx->loadQueue, &skyboxCtx->loadMsg, 1);
- osRecvMesg(&skyboxCtx->loadQueue, NULL, OS_MESG_BLOCK);
- osCreateMesgQueue(&skyboxCtx->loadQueue, &skyboxCtx->loadMsg, 1);
+ if (play->envCtx.unk_11 == 0) {
+ // Send a DMA request for the clear sky texture
+ size = SEGMENT_ROM_SIZE(d2_fine_static);
- if (play->envCtx.unk_11 == 0) {
- // Send a DMA request for the clear sky texture
- size = SEGMENT_ROM_SIZE(d2_fine_static);
+ DmaMgr_SendRequestImpl(&skyboxCtx->unk1A8, skyboxCtx->staticSegments[1],
+ SEGMENT_ROM_START(d2_fine_static), size, 0, &skyboxCtx->loadQueue, NULL);
+ } else {
+ // Send a DMA request for the cloudy sky texture
+ size = SEGMENT_ROM_SIZE(d2_cloud_static);
- DmaMgr_SendRequestImpl(&skyboxCtx->unk1A8, skyboxCtx->skyboxStaticSegment[1],
- SEGMENT_ROM_START(d2_fine_static), size, 0, &skyboxCtx->loadQueue, NULL);
- } else {
- // Send a DMA request for the cloudy sky texture
- size = SEGMENT_ROM_SIZE(d2_cloud_static);
+ DmaMgr_SendRequestImpl(&skyboxCtx->unk1A8, skyboxCtx->staticSegments[1],
+ SEGMENT_ROM_START(d2_cloud_static), size, 0, &skyboxCtx->loadQueue, NULL);
+ }
- DmaMgr_SendRequestImpl(&skyboxCtx->unk1A8, skyboxCtx->skyboxStaticSegment[1],
- SEGMENT_ROM_START(d2_cloud_static), size, 0, &skyboxCtx->loadQueue, NULL);
- }
+ osRecvMesg(&skyboxCtx->loadQueue, NULL, OS_MESG_BLOCK);
+ osCreateMesgQueue(&skyboxCtx->loadQueue, &skyboxCtx->loadMsg, 1);
- osRecvMesg(&skyboxCtx->loadQueue, NULL, OS_MESG_BLOCK);
- osCreateMesgQueue(&skyboxCtx->loadQueue, &skyboxCtx->loadMsg, 1);
+ size = SEGMENT_ROM_SIZE(d2_fine_pal_static);
- size = SEGMENT_ROM_SIZE(d2_fine_pal_static);
+ // Send a DMA request for the skybox palette
+ DmaMgr_SendRequestImpl(&skyboxCtx->unk1C8, skyboxCtx->paletteStaticSegment,
+ SEGMENT_ROM_START(d2_fine_pal_static), size, 0, &skyboxCtx->loadQueue, NULL);
- // Send a DMA request for the skybox palette
- DmaMgr_SendRequestImpl(&skyboxCtx->unk1C8, skyboxCtx->skyboxPaletteStaticSegment,
- SEGMENT_ROM_START(d2_fine_pal_static), size, 0, &skyboxCtx->loadQueue, NULL);
+ osRecvMesg(&skyboxCtx->loadQueue, NULL, OS_MESG_BLOCK);
+ break;
- osRecvMesg(&skyboxCtx->loadQueue, NULL, OS_MESG_BLOCK);
+ default:
+ break;
}
}
-void func_801434E4(GameState* gameState, SkyboxContext* skyboxCtx, s16 skyType) {
- skyboxCtx->skyboxShouldDraw = 0;
- skyboxCtx->rotX = skyboxCtx->rotY = skyboxCtx->rotZ = 0.0f;
+void Skybox_Init(GameState* gameState, SkyboxContext* skyboxCtx, s16 skyboxId) {
+ skyboxCtx->skyboxShouldDraw = false;
+ skyboxCtx->rot.x = skyboxCtx->rot.y = skyboxCtx->rot.z = 0.0f;
- func_801431E8(gameState, skyboxCtx, skyType);
+ Skybox_Setup(gameState, skyboxCtx, skyboxId);
- if (skyType != 0) {
- skyboxCtx->dListBuf = THA_AllocEndAlign16(&gameState->heap, 0x3840);
+ if (skyboxId != SKYBOX_NONE) {
+ skyboxCtx->dListBuf = THA_AllocTailAlign16(&gameState->heap, 0x3840);
- if (skyType == 5) {
+ if (skyboxId == SKYBOX_CUTSCENE_MAP) {
// Allocate enough space for the vertices for a 6 sided skybox (cube)
- skyboxCtx->roomVtx = THA_AllocEndAlign16(&gameState->heap, sizeof(Vtx) * 32 * 6);
+ skyboxCtx->roomVtx = THA_AllocTailAlign16(&gameState->heap, sizeof(Vtx) * 32 * 6);
func_80143148(skyboxCtx, 6);
} else {
// Allocate enough space for the vertices for a 5 sided skybox (bottom is missing)
- skyboxCtx->roomVtx = THA_AllocEndAlign16(&gameState->heap, sizeof(Vtx) * 32 * 5);
+ skyboxCtx->roomVtx = THA_AllocTailAlign16(&gameState->heap, sizeof(Vtx) * 32 * 5);
func_80143148(skyboxCtx, 5);
}
}
diff --git a/src/code/z_vr_box_draw.c b/src/code/z_vr_box_draw.c
index 326fcb3e2..489f596e5 100644
--- a/src/code/z_vr_box_draw.c
+++ b/src/code/z_vr_box_draw.c
@@ -2,60 +2,60 @@
Mtx* sSkyboxDrawMatrix;
-Mtx* SkyboxDraw_UpdateMatrix(SkyboxContext* skyboxCtx, f32 x, f32 y, f32 z) {
+Mtx* Skybox_UpdateMatrix(SkyboxContext* skyboxCtx, f32 x, f32 y, f32 z) {
Matrix_Translate(x, y, z, MTXMODE_NEW);
Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
- Matrix_RotateXFApply(skyboxCtx->rotX);
- Matrix_RotateYF(skyboxCtx->rotY, MTXMODE_APPLY);
- Matrix_RotateZF(skyboxCtx->rotZ, MTXMODE_APPLY);
+ Matrix_RotateXFApply(skyboxCtx->rot.x);
+ Matrix_RotateYF(skyboxCtx->rot.y, MTXMODE_APPLY);
+ Matrix_RotateZF(skyboxCtx->rot.z, MTXMODE_APPLY);
return Matrix_ToMtx(sSkyboxDrawMatrix);
}
-void SkyboxDraw_SetColors(SkyboxContext* skyboxCtx, u8 primR, u8 primG, u8 primB, u8 envR, u8 envG, u8 envB) {
- skyboxCtx->primR = primR;
- skyboxCtx->primG = primG;
- skyboxCtx->primB = primB;
- skyboxCtx->envR = envR;
- skyboxCtx->envG = envG;
- skyboxCtx->envB = envB;
+void Skybox_SetColors(SkyboxContext* skyboxCtx, u8 primR, u8 primG, u8 primB, u8 envR, u8 envG, u8 envB) {
+ skyboxCtx->prim.r = primR;
+ skyboxCtx->prim.g = primG;
+ skyboxCtx->prim.b = primB;
+ skyboxCtx->env.r = envR;
+ skyboxCtx->env.g = envG;
+ skyboxCtx->env.b = envB;
}
-void SkyboxDraw_Draw(SkyboxContext* skyboxCtx, GraphicsContext* gfxCtx, s16 skyboxId, s16 blend, f32 x, f32 y, f32 z) {
+void Skybox_Draw(SkyboxContext* skyboxCtx, GraphicsContext* gfxCtx, s16 skyboxId, s16 blend, f32 x, f32 y, f32 z) {
OPEN_DISPS(gfxCtx);
func_8012C6AC(gfxCtx);
- gSPSegment(POLY_OPA_DISP++, 0x0B, skyboxCtx->skyboxPaletteStaticSegment);
+ gSPSegment(POLY_OPA_DISP++, 0x0B, skyboxCtx->paletteStaticSegment);
gSPTexture(POLY_OPA_DISP++, 0x8000, 0x8000, 0, G_TX_RENDERTILE, G_ON);
sSkyboxDrawMatrix = GRAPH_ALLOC(gfxCtx, sizeof(Mtx));
Matrix_Translate(x, y, z, MTXMODE_NEW);
Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
- Matrix_RotateXFApply(skyboxCtx->rotX);
- Matrix_RotateYF(skyboxCtx->rotY, MTXMODE_APPLY);
- Matrix_RotateZF(skyboxCtx->rotZ, MTXMODE_APPLY);
+ Matrix_RotateXFApply(skyboxCtx->rot.x);
+ Matrix_RotateYF(skyboxCtx->rot.y, MTXMODE_APPLY);
+ Matrix_RotateZF(skyboxCtx->rot.z, MTXMODE_APPLY);
Matrix_ToMtx(sSkyboxDrawMatrix);
gSPMatrix(POLY_OPA_DISP++, sSkyboxDrawMatrix, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetColorDither(POLY_OPA_DISP++, G_CD_MAGICSQ);
gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_BILERP);
- gDPLoadTLUT_pal256(POLY_OPA_DISP++, skyboxCtx->skyboxPaletteStaticSegment);
+ gDPLoadTLUT_pal256(POLY_OPA_DISP++, skyboxCtx->paletteStaticSegment);
gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_RGBA16);
gDPSetTextureConvert(POLY_OPA_DISP++, G_TC_FILT);
gDPSetCombineLERP(POLY_OPA_DISP++, TEXEL1, TEXEL0, PRIMITIVE_ALPHA, TEXEL0, TEXEL1, TEXEL0, PRIMITIVE, TEXEL0,
PRIMITIVE, ENVIRONMENT, COMBINED, ENVIRONMENT, 0, 0, 0, COMBINED);
- gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, skyboxCtx->primR, skyboxCtx->primG, skyboxCtx->primB, blend);
- gDPSetEnvColor(POLY_OPA_DISP++, skyboxCtx->envR, skyboxCtx->envG, skyboxCtx->envB, 0);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, skyboxCtx->prim.r, skyboxCtx->prim.g, skyboxCtx->prim.b, blend);
+ gDPSetEnvColor(POLY_OPA_DISP++, skyboxCtx->env.r, skyboxCtx->env.g, skyboxCtx->env.b, 0);
gSPDisplayList(POLY_OPA_DISP++, &skyboxCtx->dListBuf[0]);
- gSPDisplayList(POLY_OPA_DISP++, &skyboxCtx->dListBuf[300]);
- gSPDisplayList(POLY_OPA_DISP++, &skyboxCtx->dListBuf[600]);
- gSPDisplayList(POLY_OPA_DISP++, &skyboxCtx->dListBuf[900]);
- gSPDisplayList(POLY_OPA_DISP++, &skyboxCtx->dListBuf[1200]);
+ gSPDisplayList(POLY_OPA_DISP++, &skyboxCtx->dListBuf[2]);
+ gSPDisplayList(POLY_OPA_DISP++, &skyboxCtx->dListBuf[4]);
+ gSPDisplayList(POLY_OPA_DISP++, &skyboxCtx->dListBuf[6]);
+ gSPDisplayList(POLY_OPA_DISP++, &skyboxCtx->dListBuf[8]);
if (skyboxId == SKYBOX_CUTSCENE_MAP) {
- gSPDisplayList(POLY_OPA_DISP++, &skyboxCtx->dListBuf[1500]);
+ gSPDisplayList(POLY_OPA_DISP++, &skyboxCtx->dListBuf[10]);
}
gDPPipeSync(POLY_OPA_DISP++);
@@ -63,5 +63,5 @@ void SkyboxDraw_Draw(SkyboxContext* skyboxCtx, GraphicsContext* gfxCtx, s16 skyb
CLOSE_DISPS(gfxCtx);
}
-void SkyboxDraw_Noop(SkyboxContext* skyboxCtx) {
+void Skybox_Update(SkyboxContext* skyboxCtx) {
}
diff --git a/src/libultra/flash/osFlash.c b/src/libultra/flash/osFlash.c
index cd4420c4a..3ed33f45d 100644
--- a/src/libultra/flash/osFlash.c
+++ b/src/libultra/flash/osFlash.c
@@ -1,3 +1,4 @@
+#include "prevent_bss_reordering.h"
#include "ultra64.h"
#include "global.h"
diff --git a/src/libultra/gu/position.c b/src/libultra/gu/position.c
index 95bd65fe3..4af6dadc4 100644
--- a/src/libultra/gu/position.c
+++ b/src/libultra/gu/position.c
@@ -5,7 +5,7 @@
* Creates a rotation/parallel translation modelling matrix (floating point)
*/
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.0;
+ static f32 D_80134D00 = M_PI / 180.0f;
f32 sinr, sinp, sinh;
f32 cosr, cosp, cosh;
diff --git a/src/libultra/io/contreaddata.c b/src/libultra/io/contreaddata.c
index 163756e07..061c01b0a 100644
--- a/src/libultra/io/contreaddata.c
+++ b/src/libultra/io/contreaddata.c
@@ -34,7 +34,7 @@ void osContGetReadData(OSContPad* data) {
data->stick_x = readformat.stick_x;
data->stick_y = readformat.stick_y;
}
- };
+ }
}
void __osPackReadData() {
diff --git a/src/libultra/io/pimgr.c b/src/libultra/io/pimgr.c
index 3d618de74..63cc7ba66 100644
--- a/src/libultra/io/pimgr.c
+++ b/src/libultra/io/pimgr.c
@@ -1,9 +1,10 @@
#include "global.h"
+#include "stack.h"
OSPiHandle D_8009D130;
OSPiHandle D_8009D1A8;
-OSThread D_8009D220;
-u8 piManagerStack[0x1000];
+OSThread sPiMgrThread;
+STACK(sPiMgrStack, 0x1000);
OSMesgQueue D_8009E3D0;
OSMesg D_8009E3E8[1];
@@ -18,7 +19,7 @@ void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgC
if (!__osPiAccessQueueEnabled) {
__osPiCreateAccessQueue();
}
- osSetEventMesg(8, &D_8009E3D0, (OSMesg)0x22222222);
+ osSetEventMesg(OS_EVENT_PI, &D_8009E3D0, (OSMesg)0x22222222);
oldPri = -1;
myPri = osGetThreadPri(NULL);
if (myPri < pri) {
@@ -27,14 +28,14 @@ void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgC
}
savedMask = __osDisableInt();
__osPiDevMgr.active = 1;
- __osPiDevMgr.thread = &D_8009D220;
+ __osPiDevMgr.thread = &sPiMgrThread;
__osPiDevMgr.cmdQueue = cmdQ;
__osPiDevMgr.evtQueue = &D_8009E3D0;
__osPiDevMgr.acsQueue = &__osPiAccessQueue;
__osPiDevMgr.piDmaCallback = __osPiRawStartDma;
__osPiDevMgr.epiDmaCallback = __osEPiRawStartDma;
- osCreateThread(&D_8009D220, 0, __osDevMgrMain, (void*)&__osPiDevMgr, &piManagerStack[4096], pri);
- osStartThread(&D_8009D220);
+ osCreateThread(&sPiMgrThread, 0, __osDevMgrMain, &__osPiDevMgr, STACK_TOP(sPiMgrStack), pri);
+ osStartThread(&sPiMgrThread);
__osRestoreInt(savedMask);
if (oldPri != -1) {
osSetThreadPri(NULL, oldPri);
diff --git a/src/libultra/io/sptask.c b/src/libultra/io/sptask.c
index aeaaf0f82..8445f53b0 100644
--- a/src/libultra/io/sptask.c
+++ b/src/libultra/io/sptask.c
@@ -3,7 +3,8 @@
#define _osVirtualToPhysical(ptr) \
if (ptr != NULL) { \
ptr = (void*)osVirtualToPhysical(ptr); \
- }
+ } \
+ (void)0
static OSTask sTmpTask;
diff --git a/src/libultra/io/vimgr.c b/src/libultra/io/vimgr.c
index 07babf351..ad9cbffd8 100644
--- a/src/libultra/io/vimgr.c
+++ b/src/libultra/io/vimgr.c
@@ -1,8 +1,9 @@
#include "global.h"
+#include "stack.h"
#include "osint.h"
OSThread viThread;
-u8 viThreadStack[0x1000];
+STACK(sViStack, 0x1000);
OSMesgQueue viEventQueue;
OSMesg viEventBuf[6];
OSIoMesg viRetraceMsg;
@@ -45,7 +46,7 @@ void osCreateViManager(OSPri pri) {
__osViDevMgr.piDmaCallback = NULL;
__osViDevMgr.epiDmaCallback = NULL;
- osCreateThread(&viThread, 0, &viMgrMain, &__osViDevMgr, viThreadStack + sizeof(viThreadStack), pri);
+ osCreateThread(&viThread, 0, &viMgrMain, &__osViDevMgr, STACK_TOP(sViStack), pri);
__osViInit();
osStartThread(&viThread);
__osRestoreInt(prevInt);
diff --git a/src/libultra/os/initialize.c b/src/libultra/os/initialize.c
index 9fbf5ff64..776191227 100644
--- a/src/libultra/os/initialize.c
+++ b/src/libultra/os/initialize.c
@@ -39,12 +39,9 @@ void osInitialize(void) {
__osSetFpcCsr(0x01000800);
__osSetWatchLo(0x04900000);
- while (__osSiRawReadIo(0x1FC007FC, &pifdata)) {
- ;
- }
- while (__osSiRawWriteIo(0x1FC007FC, pifdata | 8)) {
- ;
- }
+ while (__osSiRawReadIo(0x1FC007FC, &pifdata)) {}
+
+ while (__osSiRawWriteIo(0x1FC007FC, pifdata | 8)) {}
*(struct_exceptionPreamble*)0x80000000 = *((struct_exceptionPreamble*)__osExceptionPreamble);
*(struct_exceptionPreamble*)0x80000080 = *((struct_exceptionPreamble*)__osExceptionPreamble);
@@ -72,9 +69,7 @@ void osInitialize(void) {
}
if (__osGetCause() & 0x1000) {
- while (1) {
- ;
- }
+ while (true) {}
}
HW_REG(AI_CONTROL_REG, u32) = 1;
diff --git a/src/libultra/os/settimer.c b/src/libultra/os/settimer.c
index c6de3c3e4..77f568a02 100644
--- a/src/libultra/os/settimer.c
+++ b/src/libultra/os/settimer.c
@@ -21,9 +21,9 @@ int osSetTimer(OSTimer* t, OSTime value, OSTime interval, OSMesgQueue* mq, OSMes
saveMask = __osDisableInt();
if (__osTimerList->next != __osTimerList) {
- if (0) {
- ;
- }
+ //! FAKE:
+ if (1) {}
+
spC = __osTimerList->next;
sp14 = osGetCount();
sp10 = sp14 - __osTimerCounter;
diff --git a/src/libultra/os/timerintr.c b/src/libultra/os/timerintr.c
index 87f7129df..6b112e952 100644
--- a/src/libultra/os/timerintr.c
+++ b/src/libultra/os/timerintr.c
@@ -29,7 +29,7 @@ void __osTimerInterrupt(void) {
if (__osTimerList->next == __osTimerList) {
return;
}
- while (1) {
+ while (true) {
t = __osTimerList->next;
if (t == __osTimerList) {
__osSetCompare(0);
@@ -84,9 +84,8 @@ OSTime __osInsertTimer(OSTimer* t) {
savedMask = __osDisableInt();
for (timep = __osTimerList->next, tim = t->value; timep != __osTimerList && tim > timep->value;
- tim -= timep->value, timep = timep->next) {
- ;
- }
+ tim -= timep->value, timep = timep->next) {}
+
t->value = tim;
if (timep != __osTimerList) {
timep->value -= tim;
diff --git a/src/libultra/voice/voicegetstatus.c b/src/libultra/voice/voicegetstatus.c
index d8e7edb67..a3608277f 100644
--- a/src/libultra/voice/voicegetstatus.c
+++ b/src/libultra/voice/voicegetstatus.c
@@ -14,9 +14,7 @@ s32 __osVoiceGetStatus(OSMesgQueue* mq, s32 port, u8* status) {
if (ret != CONT_ERR_CONTRFAIL) {
__osContPifRam.status = CONT_CMD_READ_BUTTON;
- for (i = 0; i < port; i++, *ptr++ = 0) {
- ;
- }
+ for (i = 0; i < port; i++, *ptr++ = 0) {}
*ptr++ = 1;
*ptr++ = 3;
diff --git a/src/overlays/actors/ovl_Arms_Hook/overlay.cfg b/src/overlays/actors/ovl_Arms_Hook/overlay.cfg
deleted file mode 100644
index 4a8f59822..000000000
--- a/src/overlays/actors/ovl_Arms_Hook/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Arms_Hook
-z_arms_hook.c
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 3be9ff149..e271449b5 100644
--- a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c
+++ b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c
@@ -20,7 +20,7 @@ void ArmsHook_Draw(Actor* thisx, PlayState* play);
void ArmsHook_Wait(ArmsHook* this, PlayState* play);
void ArmsHook_Shoot(ArmsHook* this, PlayState* play);
-const ActorInit Arms_Hook_InitVars = {
+ActorInit Arms_Hook_InitVars = {
ACTOR_ARMS_HOOK,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -107,9 +107,10 @@ void ArmsHook_DetachHookFromActor(ArmsHook* this) {
s32 ArmsHook_CheckForCancel(ArmsHook* this) {
Player* player = (Player*)this->actor.parent;
+
if (Player_IsHoldingHookshot(player)) {
- if ((player->heldItemActionParam != player->itemActionParam) || ((player->actor.flags & ACTOR_FLAG_100)) ||
- ((player->stateFlags1 & 0x4000080))) {
+ if ((player->itemAction != player->heldItemAction) || (player->actor.flags & ACTOR_FLAG_TALK_REQUESTED) ||
+ (player->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_4000000))) {
this->timer = 0;
ArmsHook_DetachHookFromActor(this);
Math_Vec3f_Copy(&this->actor.world.pos, &player->rightHandWorld.pos);
@@ -130,7 +131,7 @@ void ArmsHook_Shoot(ArmsHook* this, PlayState* play) {
if ((this->actor.parent == NULL) || (!Player_IsHoldingHookshot(player))) {
ArmsHook_DetachHookFromActor(this);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -143,7 +144,7 @@ void ArmsHook_Shoot(ArmsHook* this, PlayState* play) {
if ((touchedActor->update != NULL) && (touchedActor->flags & (ACTOR_FLAG_200 | ACTOR_FLAG_400))) {
if (this->collider.info.atHitInfo->bumperFlags & BUMP_HOOKABLE) {
ArmsHook_AttachHookToActor(this, touchedActor);
- if ((touchedActor->flags & ACTOR_FLAG_400) == ACTOR_FLAG_400) {
+ if (CHECK_FLAG_ALL(touchedActor->flags, ACTOR_FLAG_400)) {
func_808C1154(this);
}
}
@@ -155,28 +156,25 @@ void ArmsHook_Shoot(ArmsHook* this, PlayState* play) {
}
if (DECR(this->timer) == 0) {
- Actor* grabbed;
+ Actor* grabbed = this->grabbed;
Vec3f bodyDistDiffVec;
Vec3f newPos;
f32 bodyDistDiff;
f32 phi_f16;
s32 pad;
- grabbed = this->grabbed;
if (grabbed != NULL) {
if ((grabbed->update == NULL) || !CHECK_FLAG_ALL(grabbed->flags, ACTOR_FLAG_2000)) {
grabbed = NULL;
this->grabbed = NULL;
- } else {
- if (this->actor.child != NULL) {
- f32 sp94 = Actor_DistanceBetweenActors(&this->actor, grabbed);
- f32 sp90 = sqrtf(SQXYZ(this->unk1FC));
+ } else if (this->actor.child != NULL) {
+ f32 sp94 = Actor_WorldDistXYZToActor(&this->actor, grabbed);
+ f32 sp90 = sqrtf(SQXYZ(this->unk1FC));
- Math_Vec3f_Diff(&grabbed->world.pos, &this->unk1FC, &this->actor.world.pos);
- if (50.0f < (sp94 - sp90)) {
- ArmsHook_DetachHookFromActor(this);
- grabbed = NULL;
- }
+ Math_Vec3f_Diff(&grabbed->world.pos, &this->unk1FC, &this->actor.world.pos);
+ if (50.0f < (sp94 - sp90)) {
+ ArmsHook_DetachHookFromActor(this);
+ grabbed = NULL;
}
}
}
@@ -218,7 +216,7 @@ void ArmsHook_Shoot(ArmsHook* this, PlayState* play) {
}
} else {
Math_Vec3f_Diff(&bodyDistDiffVec, &newPos, &player->actor.velocity);
- player->actor.world.rot.x = Math_FAtan2F(sqrtf(SQXZ(bodyDistDiffVec)), -bodyDistDiffVec.y);
+ player->actor.world.rot.x = Math_Atan2S_XY(sqrtf(SQXZ(bodyDistDiffVec)), -bodyDistDiffVec.y);
}
if (phi_f16 < 50.0f) {
ArmsHook_DetachHookFromActor(this);
@@ -240,7 +238,7 @@ void ArmsHook_Shoot(ArmsHook* this, PlayState* play) {
Actor_MoveWithGravity(&this->actor);
Math_Vec3f_Diff(&this->actor.world.pos, &this->actor.prevPos, &prevFrameDiff);
Math_Vec3f_Sum(&this->unk1E0, &prevFrameDiff, &this->unk1E0);
- this->actor.shape.rot.x = Math_FAtan2F(this->actor.speedXZ, -this->actor.velocity.y);
+ this->actor.shape.rot.x = Math_Atan2S_XY(this->actor.speed, -this->actor.velocity.y);
sp60.x = this->unk1EC.x - (this->unk1E0.x - this->unk1EC.x);
sp60.y = this->unk1EC.y - (this->unk1E0.y - this->unk1EC.y);
sp60.z = this->unk1EC.z - (this->unk1E0.z - this->unk1EC.z);
@@ -257,11 +255,10 @@ void ArmsHook_Shoot(ArmsHook* this, PlayState* play) {
this->actor.world.pos.z += 10.0f * nz;
this->timer = 1;
if (SurfaceType_IsHookshotSurface(&play->colCtx, poly, bgId)) {
- {
- DynaPolyActor* dynaPolyActor;
- if (bgId != BGCHECK_SCENE && (dynaPolyActor = DynaPoly_GetActor(&play->colCtx, bgId)) != NULL) {
- ArmsHook_AttachHookToActor(this, &dynaPolyActor->actor);
- }
+ DynaPolyActor* dynaPolyActor;
+
+ if ((bgId != BGCHECK_SCENE) && (dynaPolyActor = DynaPoly_GetActor(&play->colCtx, bgId)) != NULL) {
+ ArmsHook_AttachHookToActor(this, &dynaPolyActor->actor);
}
func_808C1154(this);
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_IT_HOOKSHOT_STICK_OBJ);
@@ -269,12 +266,11 @@ void ArmsHook_Shoot(ArmsHook* this, PlayState* play) {
CollisionCheck_SpawnShieldParticlesMetal(play, &this->actor.world.pos);
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_IT_HOOKSHOT_REFLECT);
}
- } else {
- if (CHECK_BTN_ANY(CONTROLLER1(&play->state)->press.button,
- BTN_A | BTN_B | BTN_R | BTN_CUP | BTN_CLEFT | BTN_CRIGHT | BTN_CDOWN)) {
- s32 pad;
- this->timer = 1;
- }
+ } else if (CHECK_BTN_ANY(CONTROLLER1(&play->state)->press.button,
+ BTN_A | BTN_B | BTN_R | BTN_CUP | BTN_CLEFT | BTN_CRIGHT | BTN_CDOWN)) {
+ s32 pad;
+
+ this->timer = 1;
}
}
}
@@ -286,19 +282,19 @@ void ArmsHook_Update(Actor* thisx, PlayState* play) {
this->unk1EC = this->unk1E0;
}
-static Vec3f D_808C1C10 = { 0.0f, 0.0f, 0.0f };
-static Vec3f D_808C1C1C = { 0.0f, 0.0f, 900.0f };
-static Vec3f D_808C1C28 = { 0.0f, 500.0f, -3000.0f };
-static Vec3f D_808C1C34 = { 0.0f, -500.0f, -3000.0f };
-static Vec3f D_808C1C40 = { 0.0f, 500.0f, 0.0f };
-static Vec3f D_808C1C4C = { 0.0f, -500.0f, 0.0f };
+Vec3f D_808C1C10 = { 0.0f, 0.0f, 0.0f };
+Vec3f D_808C1C1C = { 0.0f, 0.0f, 900.0f };
+Vec3f D_808C1C28 = { 0.0f, 500.0f, -3000.0f };
+Vec3f D_808C1C34 = { 0.0f, -500.0f, -3000.0f };
+Vec3f D_808C1C40 = { 0.0f, 500.0f, 0.0f };
+Vec3f D_808C1C4C = { 0.0f, -500.0f, 0.0f };
void ArmsHook_Draw(Actor* thisx, PlayState* play) {
ArmsHook* this = THIS;
f32 f0;
Player* player = GET_PLAYER(play);
- if (player->actor.draw != NULL && player->rightHandType == 0xB) {
+ if ((player->actor.draw != NULL) && (player->rightHandType == PLAYER_MODELTYPE_RH_HOOKSHOT)) {
Vec3f sp68;
Vec3f sp5C;
Vec3f sp50;
@@ -311,13 +307,13 @@ void ArmsHook_Draw(Actor* thisx, PlayState* play) {
Matrix_MultVec3f(&D_808C1C10, &this->unk1E0);
Matrix_MultVec3f(&D_808C1C28, &sp5C);
Matrix_MultVec3f(&D_808C1C34, &sp50);
- this->unk_1C4.active = false;
+ this->weaponInfo.active = false;
} else {
Matrix_MultVec3f(&D_808C1C1C, &this->unk1E0);
Matrix_MultVec3f(&D_808C1C40, &sp5C);
Matrix_MultVec3f(&D_808C1C4C, &sp50);
}
- func_80126440(play, &this->collider, &this->unk_1C4, &sp5C, &sp50);
+ func_80126440(play, &this->collider, &this->weaponInfo, &sp5C, &sp50);
func_8012C28C(play->state.gfxCtx);
func_80122868(play, player);
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 7afe3a2ce..31b675f41 100644
--- a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.h
+++ b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.h
@@ -10,7 +10,7 @@ typedef void (*ArmsHookActionFunc)(struct ArmsHook*, PlayState*);
typedef struct ArmsHook {
/* 0x000 */ Actor actor;
/* 0x144 */ ColliderQuad collider;
- /* 0x1C4 */ WeaponInfo unk_1C4;
+ /* 0x1C4 */ WeaponInfo weaponInfo;
/* 0x1E0 */ Vec3f unk1E0;
/* 0x1EC */ Vec3f unk1EC;
/* 0x1F8 */ Actor* grabbed;
@@ -20,6 +20,4 @@ typedef struct ArmsHook {
/* 0x20C */ ArmsHookActionFunc actionFunc;
} ArmsHook; // size = 0x210
-extern const ActorInit Arms_Hook_InitVars;
-
#endif // Z_ARMS_HOOK_H
diff --git a/src/overlays/actors/ovl_Arrow_Fire/overlay.cfg b/src/overlays/actors/ovl_Arrow_Fire/overlay.cfg
deleted file mode 100644
index a2d1a6ad6..000000000
--- a/src/overlays/actors/ovl_Arrow_Fire/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Arrow_Fire
-z_arrow_fire.c
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 9cf65349f..971b778be 100644
--- a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c
+++ b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c
@@ -21,7 +21,7 @@ void FireArrow_Fly(ArrowFire* this, PlayState* play);
#include "overlays/ovl_Arrow_fire/ovl_Arrow_Fire.c"
-const ActorInit Arrow_Fire_InitVars = {
+ActorInit Arrow_Fire_InitVars = {
ACTOR_ARROW_FIRE,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -90,7 +90,7 @@ void FireArrow_ChargeAndWait(ArrowFire* this, PlayState* play) {
EnArrow* arrow = (EnArrow*)this->actor.parent;
if ((arrow == NULL) || (arrow->actor.update == NULL)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
if (this->radius < 10) {
@@ -156,7 +156,7 @@ void FireArrow_Hit(ArrowFire* this, PlayState* play) {
}
if (this->timer == 0) {
this->timer = 255;
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
if (this->timer >= 13) {
@@ -171,7 +171,7 @@ void FireArrow_Fly(ArrowFire* this, PlayState* play) {
s32 pad2;
if ((arrow == NULL) || (arrow->actor.update == NULL)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -186,7 +186,7 @@ void FireArrow_Fly(ArrowFire* this, PlayState* play) {
FireArrow_Lerp(&this->firedPos, &this->actor.world.pos, 0.05f);
if (arrow->unk_261 & 1) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_EXPLOSION_FRAME);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_EXPLOSION_FRAME);
ArrowFire_SetupAction(this, FireArrow_Hit);
this->timer = 32;
this->alpha = 255;
@@ -194,7 +194,7 @@ void FireArrow_Fly(ArrowFire* this, PlayState* play) {
}
if (arrow->unk_260 < 34) {
if (this->alpha < 35) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
this->alpha -= 25;
@@ -205,7 +205,7 @@ void ArrowFire_Update(Actor* thisx, PlayState* play) {
ArrowFire* this = (ArrowFire*)thisx;
if ((play->msgCtx.msgMode == 0xE) || (play->msgCtx.msgMode == 0x12)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
this->actionFunc(this, play);
diff --git a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.h b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.h
index ce43cc5ed..1d0c09dcb 100644
--- a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.h
+++ b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.h
@@ -21,6 +21,4 @@ typedef struct ArrowFire {
} ArrowFire; // size = 0x264
-extern const ActorInit Arrow_Fire_InitVars;
-
#endif // Z_ARROW_FIRE_H
diff --git a/src/overlays/actors/ovl_Arrow_Ice/overlay.cfg b/src/overlays/actors/ovl_Arrow_Ice/overlay.cfg
deleted file mode 100644
index b95f23d3c..000000000
--- a/src/overlays/actors/ovl_Arrow_Ice/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Arrow_Ice
-z_arrow_ice.c
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 88eddb39e..62c97ccde 100644
--- a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c
+++ b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c
@@ -23,7 +23,7 @@ void ArrowIce_Fly(ArrowIce* this, PlayState* play);
s32 unused; // Needed for bss
-const ActorInit Arrow_Ice_InitVars = {
+ActorInit Arrow_Ice_InitVars = {
ACTOR_ARROW_ICE,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -65,7 +65,7 @@ void ArrowIce_Charge(ArrowIce* this, PlayState* play) {
EnArrow* arrow = (EnArrow*)this->actor.parent;
if ((arrow == NULL) || (arrow->actor.update == NULL)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -136,7 +136,7 @@ void ArrowIce_Hit(ArrowIce* this, PlayState* play) {
if (this->timer == 0) {
this->timer = 255;
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -146,7 +146,7 @@ void ArrowIce_Fly(ArrowIce* this, PlayState* play) {
s32 pad;
if ((arrow == NULL) || (arrow->actor.update == NULL)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
// copy position and rotation from arrow
@@ -160,13 +160,13 @@ void ArrowIce_Fly(ArrowIce* this, PlayState* play) {
ArrowIce_LerpFiredPosition(&this->firedPos, &this->actor.world.pos, 0.05f);
if (arrow->unk_261 & 1) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_EXPLOSION_ICE);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_EXPLOSION_ICE);
ArrowIce_SetupAction(this, ArrowIce_Hit);
this->timer = 32;
this->alpha = 255;
} else if (arrow->unk_260 < 34) {
if (this->alpha < 35) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
this->alpha -= 25;
}
@@ -177,7 +177,7 @@ void ArrowIce_Update(Actor* thisx, PlayState* play) {
ArrowIce* this = THIS;
if ((play->msgCtx.msgMode == 0xE) || (play->msgCtx.msgMode == 0x12)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
} else {
this->actionFunc(this, play);
diff --git a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.h b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.h
index a90cfe0ae..bf7a1ae51 100644
--- a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.h
+++ b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.h
@@ -18,6 +18,4 @@ typedef struct ArrowIce {
/* 0x160 */ ArrowIceActionFunc actionFunc;
} ArrowIce; // size = 0x164
-extern const ActorInit Arrow_Ice_InitVars;
-
#endif // Z_ARROW_ICE_H
diff --git a/src/overlays/actors/ovl_Arrow_Light/overlay.cfg b/src/overlays/actors/ovl_Arrow_Light/overlay.cfg
deleted file mode 100644
index d5bda9b4c..000000000
--- a/src/overlays/actors/ovl_Arrow_Light/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Arrow_Light
-z_arrow_light.c
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 9f974472f..360afa4ac 100644
--- a/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c
+++ b/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c
@@ -21,7 +21,7 @@ void ArrowLight_Fly(ArrowLight* this, PlayState* play);
#include "overlays/ovl_Arrow_Light/ovl_Arrow_Light.c"
-const ActorInit Arrow_Light_InitVars = {
+ActorInit Arrow_Light_InitVars = {
ACTOR_ARROW_LIGHT,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -64,7 +64,7 @@ void ArrowLight_Charge(ArrowLight* this, PlayState* play) {
EnArrow* arrow = (EnArrow*)this->actor.parent;
if ((arrow == NULL) || (arrow->actor.update == NULL)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -129,7 +129,7 @@ void ArrowLight_Hit(ArrowLight* this, PlayState* play) {
}
if (this->timer == 0) {
this->timer = 255;
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
}
@@ -139,7 +139,7 @@ void ArrowLight_Fly(ArrowLight* this, PlayState* play) {
s32 pad[2];
if ((arrow == NULL) || (arrow->actor.update == NULL)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -154,7 +154,7 @@ void ArrowLight_Fly(ArrowLight* this, PlayState* play) {
ArrowLight_Lerp(&this->firedPos, &this->actor.world.pos, 0.05f);
if (arrow->unk_261 & 1) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_EXPLOSION_LIGHT);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_EXPLOSION_LIGHT);
ArrowLight_SetupAction(this, ArrowLight_Hit);
this->timer = 32;
this->alpha = 255;
@@ -162,7 +162,7 @@ void ArrowLight_Fly(ArrowLight* this, PlayState* play) {
}
if (arrow->unk_260 < 34) {
if (this->alpha < 35) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
this->alpha -= 25;
@@ -173,7 +173,7 @@ void ArrowLight_Update(Actor* thisx, PlayState* play) {
ArrowLight* this = THIS;
if ((play->msgCtx.msgMode == 0xE) || (play->msgCtx.msgMode == 0x12)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
this->actionFunc(this, play);
diff --git a/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.h b/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.h
index bf58b1e40..0f42435ca 100644
--- a/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.h
+++ b/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.h
@@ -19,6 +19,4 @@ typedef struct ArrowLight {
} ArrowLight; // size = 0x164
-extern const ActorInit Arrow_Light_InitVars;
-
#endif // Z_ARROW_LIGHT_H
diff --git a/src/overlays/actors/ovl_Bg_Astr_Bombwall/overlay.cfg b/src/overlays/actors/ovl_Bg_Astr_Bombwall/overlay.cfg
deleted file mode 100644
index 735382ead..000000000
--- a/src/overlays/actors/ovl_Bg_Astr_Bombwall/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Astr_Bombwall
-z_bg_astr_bombwall.c
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 ab7ac8a52..59348962a 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
@@ -23,7 +23,7 @@ void func_80C0A418(BgAstrBombwall* this, PlayState* play);
void func_80C0A458(BgAstrBombwall* this, PlayState* play);
void func_80C0A4BC(BgAstrBombwall* this, PlayState* play);
-const ActorInit Bg_Astr_Bombwall_InitVars = {
+ActorInit Bg_Astr_Bombwall_InitVars = {
ACTOR_BG_ASTR_BOMBWALL,
ACTORCAT_BG,
FLAGS,
@@ -100,20 +100,20 @@ void BgAstrBombwall_Init(Actor* thisx, PlayState* play) {
BgAstrBombwall* this = THIS;
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_astr_obj_Colheader_002498);
Collider_InitTris(play, &this->collider);
if (Flags_GetSwitch(play, BGASTRBOMBWALL_GET_SWITCHFLAG(thisx))) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
this->dyna.actor.flags |= ACTOR_FLAG_10000000;
if (!Collider_SetTris(play, &this->collider, &this->dyna.actor, &sTrisInit, this->colliderElements)) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
BgAstrBombwall_InitCollider(&sTrisInit, &this->dyna.actor.world.pos, &this->dyna.actor.shape.rot, &this->collider);
- SubS_FillCutscenesList(&this->dyna.actor, this->cutscenes, ARRAY_COUNT(this->cutscenes));
+ SubS_FillCutscenesList(&this->dyna.actor, this->csIdList, ARRAY_COUNT(this->csIdList));
func_80C0A378(this);
}
@@ -175,16 +175,16 @@ void func_80C0A400(BgAstrBombwall* this, PlayState* play) {
}
void func_80C0A418(BgAstrBombwall* this, PlayState* play) {
- if (SubS_StartActorCutscene(&this->dyna.actor, this->cutscenes[0], -1, SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) {
+ if (SubS_StartCutscene(&this->dyna.actor, this->csIdList[0], CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) {
func_80C0A458(this, play);
}
}
void func_80C0A458(BgAstrBombwall* this, PlayState* play) {
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->dyna.actor.draw = NULL;
func_80C0A120(this, play);
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_WALL_BROKEN);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WALL_BROKEN);
this->actionFunc = func_80C0A4BC;
}
diff --git a/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.h b/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.h
index 58b60b944..224d94d7a 100644
--- a/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.h
+++ b/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.h
@@ -13,8 +13,6 @@ typedef struct BgAstrBombwall {
/* 0x15C */ BgAstrBombwallActionFunc actionFunc;
/* 0x160 */ ColliderTris collider;
/* 0x180 */ ColliderTrisElement colliderElements[2];
- /* 0x238 */ s16 cutscenes[1];
+ /* 0x238 */ s16 csIdList[1];
} BgAstrBombwall;
-extern const ActorInit Bg_Astr_Bombwall_InitVars;
-
#endif // Z_BG_ASTR_BOMBWALL_H
diff --git a/src/overlays/actors/ovl_Bg_Botihasira/overlay.cfg b/src/overlays/actors/ovl_Bg_Botihasira/overlay.cfg
deleted file mode 100644
index 48da75cb3..000000000
--- a/src/overlays/actors/ovl_Bg_Botihasira/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Botihasira
-z_bg_botihasira.c
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 dfa31a6a0..a5168eb24 100644
--- a/src/overlays/actors/ovl_Bg_Botihasira/z_bg_botihasira.c
+++ b/src/overlays/actors/ovl_Bg_Botihasira/z_bg_botihasira.c
@@ -18,7 +18,7 @@ void BgBotihasira_Draw(Actor* thisx, PlayState* play);
void BgBotihasira_DoNothing(BgBotihasira* this, PlayState* play);
-const ActorInit Bg_Botihasira_InitVars = {
+ActorInit Bg_Botihasira_InitVars = {
ACTOR_BG_BOTIHASIRA,
ACTORCAT_ITEMACTION,
FLAGS,
diff --git a/src/overlays/actors/ovl_Bg_Botihasira/z_bg_botihasira.h b/src/overlays/actors/ovl_Bg_Botihasira/z_bg_botihasira.h
index 529b5a904..6cb290f65 100644
--- a/src/overlays/actors/ovl_Bg_Botihasira/z_bg_botihasira.h
+++ b/src/overlays/actors/ovl_Bg_Botihasira/z_bg_botihasira.h
@@ -13,6 +13,4 @@ typedef struct BgBotihasira {
/* 0x160 */ ColliderCylinder collider;
} BgBotihasira; // size = 0x1AC
-extern const ActorInit Bg_Botihasira_InitVars;
-
#endif // Z_BG_BOTIHASIRA_H
diff --git a/src/overlays/actors/ovl_Bg_Breakwall/overlay.cfg b/src/overlays/actors/ovl_Bg_Breakwall/overlay.cfg
deleted file mode 100644
index 77c1ecf0d..000000000
--- a/src/overlays/actors/ovl_Bg_Breakwall/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Breakwall
-z_bg_breakwall.c
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 9a272e6aa..b2e59a51b 100644
--- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c
+++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c
@@ -45,7 +45,7 @@ void func_808B7B54(Actor* thisx, PlayState* play);
void func_808B7D34(Actor* thisx, PlayState* play);
void BgBreakwall_Draw(Actor* thisx, PlayState* play);
-const ActorInit Bg_Breakwall_InitVars = {
+ActorInit Bg_Breakwall_InitVars = {
ACTOR_BG_BREAKWALL, ACTORCAT_ITEMACTION, FLAGS,
GAMEPLAY_KEEP, sizeof(BgBreakwall), (ActorFunc)BgBreakwall_Init,
(ActorFunc)NULL, (ActorFunc)BgBreakwall_Update, (ActorFunc)NULL,
@@ -146,14 +146,14 @@ s32 func_808B736C(BgBreakwall* this, PlayState* play) {
}
s32 func_808B7380(BgBreakwall* this, PlayState* play) {
- if ((gSaveContext.save.day >= 2) && !(gSaveContext.save.weekEventReg[22] & 1)) {
+ if ((gSaveContext.save.day >= 2) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
return false;
}
return true;
}
s32 func_808B73C4(BgBreakwall* this, PlayState* play) {
- return (gSaveContext.save.weekEventReg[33] & 0x80) || (gSaveContext.save.weekEventReg[21] & 1);
+ return CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE) || CHECK_WEEKEVENTREG(WEEKEVENTREG_21_01);
}
s32 func_808B73FC(BgBreakwall* this, PlayState* play) {
@@ -176,14 +176,14 @@ s32 func_808B7460(BgBreakwall* this, PlayState* play) {
}
s32 func_808B74A8(BgBreakwall* this, PlayState* play) {
- if (gSaveContext.save.weekEventReg[55] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) {
return false;
}
return true;
}
s32 func_808B74D8(BgBreakwall* this, PlayState* play) {
- if (!(gSaveContext.save.weekEventReg[9] & 0x80) || (gSaveContext.save.weekEventReg[23] & 0x20)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_09_80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) {
return false;
}
return true;
@@ -216,7 +216,7 @@ void BgBreakwall_Init(Actor* thisx, PlayState* play) {
this->unk_15C = Object_GetIndex(&play->objectCtx, sp24->unk_00);
if ((this->unk_15C < 0) || !sp24->unk_14(this, play)) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
@@ -285,8 +285,8 @@ void func_808B782C(BgBreakwall* this, PlayState* play) {
}
void func_808B78A4(BgBreakwall* this, PlayState* play) {
- if (gSaveContext.save.weekEventReg[55] & 0x80) {
- Actor_MarkForDeath(&this->dyna.actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) {
+ Actor_Kill(&this->dyna.actor);
}
}
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 77c1b8808..bcdda2327 100644
--- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h
+++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h
@@ -26,6 +26,4 @@ typedef struct BgBreakwall {
/* 0x160 */ BgBreakwallActionFunc actionFunc;
} BgBreakwall; // size = 0x164
-extern const ActorInit Bg_Breakwall_InitVars;
-
#endif // Z_BG_BREAKWALL_H
diff --git a/src/overlays/actors/ovl_Bg_Crace_Movebg/overlay.cfg b/src/overlays/actors/ovl_Bg_Crace_Movebg/overlay.cfg
deleted file mode 100644
index ab8eb4405..000000000
--- a/src/overlays/actors/ovl_Bg_Crace_Movebg/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Crace_Movebg
-z_bg_crace_movebg.c
diff --git a/src/overlays/actors/ovl_Bg_Crace_Movebg/z_bg_crace_movebg.c b/src/overlays/actors/ovl_Bg_Crace_Movebg/z_bg_crace_movebg.c
index 9a4f0849a..2a1a7dce8 100644
--- a/src/overlays/actors/ovl_Bg_Crace_Movebg/z_bg_crace_movebg.c
+++ b/src/overlays/actors/ovl_Bg_Crace_Movebg/z_bg_crace_movebg.c
@@ -41,7 +41,7 @@ typedef enum {
u8 sIsLoaded[32];
-const ActorInit Bg_Crace_Movebg_InitVars = {
+ActorInit Bg_Crace_Movebg_InitVars = {
ACTOR_BG_CRACE_MOVEBG,
ACTORCAT_BG,
FLAGS,
@@ -75,7 +75,7 @@ void BgCraceMovebg_Init(Actor* thisx, PlayState* play) {
sHasInitializedIsLoaded = true;
}
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, &gDekuShrineSlidingDoorCol);
this->index = BG_CRACE_MOVEBG_GET_INDEX(&this->dyna.actor);
@@ -92,7 +92,7 @@ void BgCraceMovebg_Init(Actor* thisx, PlayState* play) {
for (j = 0; j < sLoadedDoorCount; j++) {
if (sIsLoaded[j] == this->index) {
this->stateFlags |= BG_CRACE_MOVEBG_FLAG_ALREADY_LOADED;
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
}
@@ -125,7 +125,7 @@ void BgCraceMovebg_Init(Actor* thisx, PlayState* play) {
break;
default:
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
break;
}
}
@@ -243,9 +243,9 @@ void BgCraceMovebg_ClosingDoor_CheckIfPlayerIsBeyondDoor(BgCraceMovebg* this, Pl
if ((BG_CRACE_MOVEBG_GET_TYPE(&this->dyna.actor) != BG_CRACE_MOVEBG_TYPE_UNUSED_CLOSING) &&
SubS_LineSegVsPlane(&this->dyna.actor.home.pos, &this->dyna.actor.home.rot, &sUnitVecZ, &this->prevPlayerPos,
- &player->bodyPartsPos[0], &intersect)) {
+ &player->bodyPartsPos[PLAYER_BODYPART_WAIST], &intersect)) {
Matrix_RotateYS(-this->dyna.actor.home.rot.y, MTXMODE_NEW);
- Math_Vec3f_Diff(&player->bodyPartsPos[0], &this->dyna.actor.home.pos, &posDiff);
+ Math_Vec3f_Diff(&player->bodyPartsPos[PLAYER_BODYPART_WAIST], &this->dyna.actor.home.pos, &posDiff);
Matrix_MultVec3f(&posDiff, &this->intersectionOffsetFromHome);
if (fabsf(this->intersectionOffsetFromHome.x) < 100.0f && this->intersectionOffsetFromHome.y >= -10.0f &&
@@ -328,7 +328,7 @@ void BgCraceMovebg_ClosingDoor_Close(BgCraceMovebg* this, PlayState* play) {
if (Math_StepToF(&this->doorHeight, 0.0f, 1.0f)) {
if (!(this->stateFlags & BG_CRACE_MOVEBG_FLAG_PLAYER_IS_BEYOND_DOOR) &&
!Flags_GetSwitch(play, BG_CRACE_MOVEBG_GET_SWITCH_FLAG(&this->dyna.actor) + 1)) {
- play->unk_18845 = 1;
+ play->haltAllActors = true;
func_80169FDC(&play->state);
play_sound(NA_SE_OC_ABYSS);
}
@@ -343,7 +343,7 @@ void BgCraceMovebg_ClosingDoor_SetupDoNothing(BgCraceMovebg* this, PlayState* pl
this->targetDoorHeight = 0.0f;
this->doorHeight = 0.0f;
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y;
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_STONEDOOR_STOP);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_STONEDOOR_STOP);
this->actionFunc = BgCraceMovebg_ClosingDoor_DoNothing;
}
diff --git a/src/overlays/actors/ovl_Bg_Crace_Movebg/z_bg_crace_movebg.h b/src/overlays/actors/ovl_Bg_Crace_Movebg/z_bg_crace_movebg.h
index fb24b10d3..8f3b1aabe 100644
--- a/src/overlays/actors/ovl_Bg_Crace_Movebg/z_bg_crace_movebg.h
+++ b/src/overlays/actors/ovl_Bg_Crace_Movebg/z_bg_crace_movebg.h
@@ -38,6 +38,4 @@ typedef struct BgCraceMovebg {
/* 0x188 */ Vec3f prevPlayerPos;
} BgCraceMovebg; // size = 0x194
-extern const ActorInit Bg_Crace_Movebg_InitVars;
-
#endif // Z_BG_CRACE_MOVEBG_H
diff --git a/src/overlays/actors/ovl_Bg_Ctower_Gear/overlay.cfg b/src/overlays/actors/ovl_Bg_Ctower_Gear/overlay.cfg
deleted file mode 100644
index 244f98e32..000000000
--- a/src/overlays/actors/ovl_Bg_Ctower_Gear/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Ctower_Gear
-z_bg_ctower_gear.c
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 056af77bb..adf9b3c96 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
@@ -19,7 +19,7 @@ void BgCtowerGear_Draw(Actor* thisx, PlayState* play);
void BgCtowerGear_UpdateOrgan(Actor* thisx, PlayState* play);
void BgCtowerGear_DrawOrgan(Actor* thisx, PlayState* play);
-const ActorInit Bg_Ctower_Gear_InitVars = {
+ActorInit Bg_Ctower_Gear_InitVars = {
ACTOR_BG_CTOWER_GEAR,
ACTORCAT_PROP,
FLAGS,
@@ -108,7 +108,7 @@ void BgCtowerGear_Splash(BgCtowerGear* this, PlayState* play) {
}
}
}
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_WATERWHEEL_LEVEL);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WATERWHEEL_LEVEL);
}
}
@@ -127,12 +127,12 @@ void BgCtowerGear_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
}
if (type == BGCTOWERGEAR_WATER_WHEEL) {
- DynaPolyActor_Init(&this->dyna, 3);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y);
DynaPolyActor_LoadMesh(play, &this->dyna, &gClockTowerWaterWheelCol);
} else if (type == BGCTOWERGEAR_ORGAN) {
DynaPolyActor_Init(&this->dyna, 0);
DynaPolyActor_LoadMesh(play, &this->dyna, &gClockTowerOrganCol);
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
}
}
@@ -163,18 +163,23 @@ void BgCtowerGear_Update(Actor* thisx, PlayState* play) {
void BgCtowerGear_UpdateOrgan(Actor* thisx, PlayState* play) {
BgCtowerGear* this = THIS;
- if (Cutscene_CheckActorAction(play, 104)) {
- switch (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 104)]->action) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_104)) {
+ switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_104)]->id) {
case 1:
this->dyna.actor.draw = NULL;
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
break;
+
case 2:
this->dyna.actor.draw = BgCtowerGear_DrawOrgan;
- func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
break;
+
case 3:
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
+ break;
+
+ default:
break;
}
}
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 952a13c4a..afea1bf0d 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
@@ -19,6 +19,4 @@ typedef struct BgCtowerGear {
/* 0x000 */ DynaPolyActor dyna;
} BgCtowerGear; // size = 0x15C
-extern const ActorInit Bg_Ctower_Gear_InitVars;
-
#endif // Z_BG_CTOWER_GEAR_H
diff --git a/src/overlays/actors/ovl_Bg_Ctower_Rot/overlay.cfg b/src/overlays/actors/ovl_Bg_Ctower_Rot/overlay.cfg
deleted file mode 100644
index c41e36b27..000000000
--- a/src/overlays/actors/ovl_Bg_Ctower_Rot/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Ctower_Rot
-z_bg_ctower_rot.c
diff --git a/src/overlays/actors/ovl_Bg_Ctower_Rot/z_bg_ctower_rot.c b/src/overlays/actors/ovl_Bg_Ctower_Rot/z_bg_ctower_rot.c
index 2ca48b346..571523fcb 100644
--- a/src/overlays/actors/ovl_Bg_Ctower_Rot/z_bg_ctower_rot.c
+++ b/src/overlays/actors/ovl_Bg_Ctower_Rot/z_bg_ctower_rot.c
@@ -21,7 +21,7 @@ void BgCtowerRot_DoorDoNothing(BgCtowerRot* this, PlayState* play);
void BgCtowerRot_DoorIdle(BgCtowerRot* this, PlayState* play);
void BgCtowerRot_SetupDoorClose(BgCtowerRot* this, PlayState* play);
-const ActorInit Bg_Ctower_Rot_InitVars = {
+ActorInit Bg_Ctower_Rot_InitVars = {
ACTOR_BG_CTOWER_ROT,
ACTORCAT_BG,
FLAGS,
@@ -46,7 +46,7 @@ void BgCtowerRot_Init(Actor* thisx, PlayState* play) {
Vec3f offset;
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
if (this->dyna.actor.params == BGCTOWERROT_CORRIDOR) {
DynaPolyActor_LoadMesh(play, &this->dyna, &gClockTowerCorridorCol);
this->actionFunc = BgCtowerRot_CorridorRotate;
@@ -88,7 +88,7 @@ void BgCtowerRot_CorridorRotate(BgCtowerRot* this, PlayState* play) {
Camera_ChangeSetting(play->cameraPtrs[CAM_ID_MAIN], CAM_SET_DUNGEON0);
this->dyna.actor.shape.rot.z = rotZ * 16.384f;
- if (play->csCtx.frames == 132) {
+ if (play->csCtx.curFrame == 132) {
play_sound(NA_SE_SY_SPIRAL_DASH);
}
}
@@ -99,8 +99,8 @@ void BgCtowerRot_DoorDoNothing(BgCtowerRot* this, PlayState* play) {
void BgCtowerRot_DoorClose(BgCtowerRot* this, PlayState* play) {
if (!Math_SmoothStepToF(&this->timer, 0.0f, 0.1f, 15.0f, 0.1f)) {
if (this->dyna.actor.params == BGCTOWERROT_STONE_DOOR_MAIN) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_STONEDOOR_STOP);
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_STONEDOOR_STOP);
+ CutsceneManager_Stop(this->dyna.actor.csId);
}
this->actionFunc = BgCtowerRot_DoorDoNothing;
} else if (this->dyna.actor.params == BGCTOWERROT_STONE_DOOR_MAIN) {
@@ -119,19 +119,19 @@ void BgCtowerRot_DoorIdle(BgCtowerRot* this, PlayState* play) {
Actor_OffsetOfPointInActorCoords(&this->dyna.actor, &offset, &player->actor.world.pos);
if (offset.z > 30.0f) {
this->unk160 = 0.0f;
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
this->actionFunc = BgCtowerRot_SetupDoorClose;
}
}
void BgCtowerRot_SetupDoorClose(BgCtowerRot* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
if (this->dyna.actor.params == BGCTOWERROT_STONE_DOOR_MAIN) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
}
this->actionFunc = BgCtowerRot_DoorClose;
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
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 e8b83fa22..52a905ed5 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
@@ -21,6 +21,4 @@ typedef struct BgCtowerRot {
/* 0x164 */ f32 timer;
} BgCtowerRot; // size = 0x168
-extern const ActorInit Bg_Ctower_Rot_InitVars;
-
#endif // Z_BG_CTOWER_ROT_H
diff --git a/src/overlays/actors/ovl_Bg_Danpei_Movebg/overlay.cfg b/src/overlays/actors/ovl_Bg_Danpei_Movebg/overlay.cfg
deleted file mode 100644
index beb2b3010..000000000
--- a/src/overlays/actors/ovl_Bg_Danpei_Movebg/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Danpei_Movebg
-z_bg_danpei_movebg.c
diff --git a/src/overlays/actors/ovl_Bg_Danpei_Movebg/z_bg_danpei_movebg.c b/src/overlays/actors/ovl_Bg_Danpei_Movebg/z_bg_danpei_movebg.c
index a998936ec..a5d01fe65 100644
--- a/src/overlays/actors/ovl_Bg_Danpei_Movebg/z_bg_danpei_movebg.c
+++ b/src/overlays/actors/ovl_Bg_Danpei_Movebg/z_bg_danpei_movebg.c
@@ -15,7 +15,7 @@ void BgDanpeiMovebg_Destroy(Actor* thisx, PlayState* play);
void BgDanpeiMovebg_Update(Actor* thisx, PlayState* play);
#if 0
-const ActorInit Bg_Danpei_Movebg_InitVars = {
+ActorInit Bg_Danpei_Movebg_InitVars = {
ACTOR_BG_DANPEI_MOVEBG,
ACTORCAT_BG,
FLAGS,
diff --git a/src/overlays/actors/ovl_Bg_Danpei_Movebg/z_bg_danpei_movebg.h b/src/overlays/actors/ovl_Bg_Danpei_Movebg/z_bg_danpei_movebg.h
index 1bdf17933..c99bb813f 100644
--- a/src/overlays/actors/ovl_Bg_Danpei_Movebg/z_bg_danpei_movebg.h
+++ b/src/overlays/actors/ovl_Bg_Danpei_Movebg/z_bg_danpei_movebg.h
@@ -15,6 +15,4 @@ typedef struct BgDanpeiMovebg {
/* 0x1CE */ char unk_1CE[0xA];
} BgDanpeiMovebg; // size = 0x1D8
-extern const ActorInit Bg_Danpei_Movebg_InitVars;
-
#endif // Z_BG_DANPEI_MOVEBG_H
diff --git a/src/overlays/actors/ovl_Bg_Dblue_Balance/overlay.cfg b/src/overlays/actors/ovl_Bg_Dblue_Balance/overlay.cfg
deleted file mode 100644
index f0f5a4f1a..000000000
--- a/src/overlays/actors/ovl_Bg_Dblue_Balance/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Dblue_Balance
-z_bg_dblue_balance.c
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 d7e1bef1f..2a59a9b8f 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
@@ -30,7 +30,7 @@ void func_80B83758(Actor* thisx, PlayState* play);
AnimatedMaterial* D_80B83C70;
AnimatedMaterial* D_80B83C74;
-const ActorInit Bg_Dblue_Balance_InitVars = {
+ActorInit Bg_Dblue_Balance_InitVars = {
ACTOR_BG_DBLUE_BALANCE,
ACTORCAT_BG,
FLAGS,
@@ -317,7 +317,7 @@ void BgDblueBalance_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.update = sTypeInfo[sp2C].update;
this->dyna.actor.draw = sTypeInfo[sp2C].draw;
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, sTypeInfo[sp2C].colHeader);
if (sp2C == 3) {
@@ -412,17 +412,17 @@ void func_80B82DE0(BgDblueBalance* this, PlayState* play) {
phi_a1 = 1;
this->unk_17D = 20;
if (balance1 != NULL) {
- if (balance1->unk_181 != 0) {
+ if (balance1->isHeavySwitchPressed) {
phi_a0 = 4;
- } else if (balance1->unk_180 != 0) {
+ } else if (balance1->isSwitchPressed) {
phi_a0 = 2;
}
}
if (balance2 != NULL) {
- if (balance2->unk_181 != 0) {
+ if (balance2->isHeavySwitchPressed) {
phi_a1 = 5;
- } else if (balance2->unk_180 != 0) {
+ } else if (balance2->isSwitchPressed) {
phi_a1 = 3;
}
}
@@ -485,7 +485,7 @@ void func_80B82DE0(BgDblueBalance* this, PlayState* play) {
this->unk_178 *= -0.6f;
this->unk_17C++;
if (this->unk_182) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_SEESAW_WATER_BOUND);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_SEESAW_WATER_BOUND);
sp5C = this->unk_15C;
Matrix_Push();
Matrix_RotateYS(BINANG_SUB(this->dyna.actor.shape.rot.y, 0x4000), MTXMODE_NEW);
@@ -498,7 +498,7 @@ void func_80B82DE0(BgDblueBalance* this, PlayState* play) {
func_80B8296C(play, &sp50, 70.0f);
} else {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_SEESAW_BOUND);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_SEESAW_BOUND);
}
} else {
this->dyna.actor.shape.rot.z = 0x1C72;
@@ -510,7 +510,7 @@ void func_80B82DE0(BgDblueBalance* this, PlayState* play) {
this->unk_178 *= -0.6f;
this->unk_17C++;
if (this->unk_182) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_SEESAW_WATER_BOUND);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_SEESAW_WATER_BOUND);
sp3C = this->unk_160;
Matrix_Push();
Matrix_RotateYS(BINANG_ADD(this->dyna.actor.shape.rot.y, 0x4000), MTXMODE_NEW);
@@ -523,7 +523,7 @@ void func_80B82DE0(BgDblueBalance* this, PlayState* play) {
func_80B8296C(play, &sp30, 47.0f);
} else {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_SEESAW_BOUND);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_SEESAW_BOUND);
}
} else {
this->dyna.actor.shape.rot.z = -0x1C72;
@@ -546,8 +546,8 @@ void BgDblueBalance_Update(Actor* thisx, PlayState* play) {
void func_80B8330C(Actor* thisx, PlayState* play) {
BgDblueBalance* this = THIS;
- this->unk_180 = DynaPolyActor_IsInSwitchPressedState(&this->dyna);
- this->unk_181 = DynaPolyActor_IsInHeavySwitchPressedState(&this->dyna);
+ this->isSwitchPressed = DynaPolyActor_IsSwitchPressed(&this->dyna);
+ this->isHeavySwitchPressed = DynaPolyActor_IsHeavySwitchPressed(&this->dyna);
}
void func_80B83344(BgDblueBalance* this) {
@@ -627,16 +627,16 @@ void func_80B83518(Actor* thisx, PlayState* play) {
if (this->unk_17F == 2) {
this->unk_17E--;
if (this->unk_17E <= 0) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ CutsceneManager_Stop(this->dyna.actor.csId);
this->unk_17F = 0;
}
} else if ((this->unk_17F != 0) && (this->unk_17F == 1)) {
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
this->unk_17F = 2;
this->unk_17E = 0x50;
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
this->unk_16C = this->unk_170;
diff --git a/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.h b/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.h
index 098f96770..5d72ea3db 100644
--- a/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.h
+++ b/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.h
@@ -33,8 +33,8 @@ typedef struct BgDblueBalance {
/* 0x17D */ s8 unk_17D;
/* 0x17E */ s8 unk_17E;
/* 0x17F */ s8 unk_17F;
- /* 0x180 */ s8 unk_180;
- /* 0x181 */ s8 unk_181;
+ /* 0x180 */ s8 isSwitchPressed;
+ /* 0x181 */ s8 isHeavySwitchPressed;
/* 0x182 */ s8 unk_182;
/* 0x183 */ u8 unk_183;
/* 0x184 */ s16 unk_184;
@@ -44,6 +44,4 @@ typedef struct BgDblueBalance {
/* 0x228 */ f32 unk_228;
} BgDblueBalance; // size = 0x22C
-extern const ActorInit Bg_Dblue_Balance_InitVars;
-
#endif // Z_BG_DBLUE_BALANCE_H
diff --git a/src/overlays/actors/ovl_Bg_Dblue_Elevator/overlay.cfg b/src/overlays/actors/ovl_Bg_Dblue_Elevator/overlay.cfg
deleted file mode 100644
index 8193509f4..000000000
--- a/src/overlays/actors/ovl_Bg_Dblue_Elevator/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Dblue_Elevator
-z_bg_dblue_elevator.c
diff --git a/src/overlays/actors/ovl_Bg_Dblue_Elevator/z_bg_dblue_elevator.c b/src/overlays/actors/ovl_Bg_Dblue_Elevator/z_bg_dblue_elevator.c
index a945160f0..a1d724b29 100644
--- a/src/overlays/actors/ovl_Bg_Dblue_Elevator/z_bg_dblue_elevator.c
+++ b/src/overlays/actors/ovl_Bg_Dblue_Elevator/z_bg_dblue_elevator.c
@@ -16,7 +16,7 @@ void BgDblueElevator_Update(Actor* thisx, PlayState* play);
void BgDblueElevator_Draw(Actor* thisx, PlayState* play);
#if 0
-const ActorInit Bg_Dblue_Elevator_InitVars = {
+ActorInit Bg_Dblue_Elevator_InitVars = {
ACTOR_BG_DBLUE_ELEVATOR,
ACTORCAT_BG,
FLAGS,
diff --git a/src/overlays/actors/ovl_Bg_Dblue_Elevator/z_bg_dblue_elevator.h b/src/overlays/actors/ovl_Bg_Dblue_Elevator/z_bg_dblue_elevator.h
index db6cba5b4..89a18dd0c 100644
--- a/src/overlays/actors/ovl_Bg_Dblue_Elevator/z_bg_dblue_elevator.h
+++ b/src/overlays/actors/ovl_Bg_Dblue_Elevator/z_bg_dblue_elevator.h
@@ -14,6 +14,4 @@ typedef struct BgDblueElevator {
/* 0x160 */ char unk_160[0x10];
} BgDblueElevator; // size = 0x170
-extern const ActorInit Bg_Dblue_Elevator_InitVars;
-
#endif // Z_BG_DBLUE_ELEVATOR_H
diff --git a/src/overlays/actors/ovl_Bg_Dblue_Movebg/overlay.cfg b/src/overlays/actors/ovl_Bg_Dblue_Movebg/overlay.cfg
deleted file mode 100644
index 7188cf2ea..000000000
--- a/src/overlays/actors/ovl_Bg_Dblue_Movebg/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Dblue_Movebg
-z_bg_dblue_movebg.c
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 44e38f0da..570369f07 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
@@ -45,7 +45,7 @@ u8 D_80A2B870[][2] = {
{ 0x03, 0x03 }, { 0x03, 0x05 }, { 0x03, 0x01 }, { 0x03, 0x06 }, { 0x03, 0x02 }, { 0x03, 0x04 }, { 0x03, 0x00 },
};
-const ActorInit Bg_Dblue_Movebg_InitVars = {
+ActorInit Bg_Dblue_Movebg_InitVars = {
ACTOR_BG_DBLUE_MOVEBG,
ACTORCAT_BG,
FLAGS,
@@ -97,7 +97,7 @@ static AnimatedMaterial* sTexAnims[] = {
s16 D_80A2B96C[] = { 0, 0x16C, -0x16C, 0 };
-s16 D_80A2B974[] = { -1, -1 };
+static s16 sCsIdList[] = { CS_ID_NONE, CS_ID_NONE };
static InitChainEntry sInitChain[] = {
ICHAIN_F32(uncullZoneScale, 1500, ICHAIN_CONTINUE),
@@ -163,11 +163,11 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) {
this->unk_160 = BGDBLUEMOVEBG_GET_F(thisx);
this->unk_1BC = BGDBLUEMOVEBG_GET_F000(thisx);
this->unk_1C0 = BGDBLUEMOVEBG_GET_FF0(thisx);
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
if ((this->unk_160 == 9) || (this->unk_160 == 8)) {
if (D_80A2BBF4.unk_00 != 0) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
this->unk_170 = this->dyna.actor.room;
@@ -178,7 +178,7 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.shape.rot.z = 0;
} else if (this->unk_160 == 6) {
if (D_80A2BBF4.unk_01 != 0) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
this->unk_171 = this->dyna.actor.world.rot.z;
@@ -197,7 +197,7 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) {
this->xluDList = sXluDLists[this->unk_160];
this->texAnim = sTexAnims[this->unk_160];
- SubS_FillCutscenesList(&this->dyna.actor, this->unk_1B6, ARRAY_COUNT(this->unk_1B6));
+ SubS_FillCutscenesList(&this->dyna.actor, this->csIdList, ARRAY_COUNT(this->csIdList));
switch (this->unk_160) {
case 1:
@@ -219,7 +219,7 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) {
} else {
this->unk_18C = 0;
}
- this->dyna.actor.shape.rot.y += (s16)((this->unk_18C / 10.0f) * (0x10000 / 360.0f));
+ this->dyna.actor.shape.rot.y += DEG_TO_BINANG(this->unk_18C / 10.0f);
this->actionFunc = func_80A2A714;
break;
@@ -238,14 +238,14 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.world.rot.z = 0;
this->dyna.actor.shape.rot.z = 0;
if (Flags_GetSwitch(play, this->unk_1C0)) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
break;
}
this->unk_18C = 0;
this->dyna.actor.draw = func_80A2B308;
this->unk_17E = 0;
this->unk_184 = 0.0f;
- this->dyna.actor.shape.rot.y += (s16)((this->unk_18C / 10.0f) * (0x10000 / 360.0f));
+ this->dyna.actor.shape.rot.y += DEG_TO_BINANG(this->unk_18C / 10.0f);
this->actionFunc = func_80A2A32C;
break;
@@ -254,8 +254,8 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) {
this->unk_2F8[1] = NULL;
this->unk_2F8[0] = NULL;
label:
- for (i = 0; i < ARRAY_COUNT(D_80A2B974); i++) {
- D_80A2B974[i] = this->unk_1B6[i];
+ for (i = 0; i < ARRAY_COUNT(sCsIdList); i++) {
+ sCsIdList[i] = this->csIdList[i];
}
this->unk_178 = func_80A29A80(play, this->unk_1C0, this->unk_1BC);
this->unk_1CC = D_80A2B96C[this->unk_178];
@@ -350,7 +350,7 @@ void func_80A2A1E0(BgDblueMovebg* this, PlayState* play) {
if (play->roomCtx.curRoom.num != this->unk_171) {
if ((play->roomCtx.prevRoom.num != this->unk_170) && (play->roomCtx.prevRoom.num != this->unk_171)) {
D_80A2BBF4.unk_01 = 0;
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
}
}
@@ -385,12 +385,12 @@ void func_80A2A32C(BgDblueMovebg* this, PlayState* play) {
}
if (phi_v1) {
- this->unk_180 = func_800F2178(this->unk_1B6[0]);
- this->unk_1D2 = this->unk_1B6[0];
+ this->unk_180 = CutsceneManager_GetCutsceneCustomValue(this->csIdList[0]);
+ this->csId = this->csIdList[0];
this->unk_172 |= 8;
this->actionFunc = func_80A2A444;
} else {
- player->stateFlags2 &= ~0x10;
+ player->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
}
}
@@ -408,9 +408,9 @@ void func_80A2A444(BgDblueMovebg* this, PlayState* play) {
sp20 = Math_StepToS(&this->unk_18A, 900, this->unk_188);
temp_v0 = this->unk_18A * this->unk_17E;
this->dyna.actor.shape.rot.y =
- (s32)((this->unk_18C + temp_v0) * 0.1f * (0x10000 / 360.0f)) + this->dyna.actor.home.rot.y;
+ (s32)DEG_TO_BINANG_ALT3((this->unk_18C + temp_v0) * 0.1f) + this->dyna.actor.home.rot.y;
- if ((player->stateFlags2 & 0x10) && (this->unk_184 > 0.0f)) {
+ if ((player->stateFlags2 & PLAYER_STATE2_10) && (this->unk_184 > 0.0f)) {
player->actor.world.pos.x =
(Math_SinS(this->dyna.actor.shape.rot.y - this->unk_18E) * this->unk_184) + this->dyna.actor.home.pos.x;
player->actor.world.pos.z =
@@ -420,10 +420,10 @@ void func_80A2A444(BgDblueMovebg* this, PlayState* play) {
}
if (sp20) {
- player->stateFlags2 &= ~0x10;
+ player->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
Flags_SetSwitch(play, this->unk_1C0);
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_STONEDOOR_STOP);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_STONEDOOR_STOP);
if (func_80A29A80(play, this->unk_1C8, this->unk_1C4)) {
this->unk_172 |= 1;
@@ -447,12 +447,12 @@ void func_80A2A670(BgDblueMovebg* this, PlayState* play) {
void func_80A2A688(BgDblueMovebg* this, PlayState* play) {
this->unk_180--;
if (this->unk_180 <= 0) {
- ActorCutscene_Stop(this->unk_1B6[0]);
+ CutsceneManager_Stop(this->csIdList[0]);
}
if (Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y - 60.0f, 2.0f) &&
(this->unk_180 <= 0)) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
}
@@ -477,8 +477,8 @@ void func_80A2A714(BgDblueMovebg* this, PlayState* play) {
}
this->unk_17E = phi_v0 * phi_f0;
- this->unk_180 = func_800F2178(this->unk_1B6[0]);
- this->unk_1D2 = this->unk_1B6[0];
+ this->unk_180 = CutsceneManager_GetCutsceneCustomValue(this->csIdList[0]);
+ this->csId = this->csIdList[0];
this->unk_172 |= 8;
this->actionFunc = func_80A2A7F8;
}
@@ -495,10 +495,9 @@ void func_80A2A7F8(BgDblueMovebg* this, PlayState* play) {
sp28 = Math_StepToS(&this->unk_18A, 900, this->unk_188);
sp26 = this->unk_18A * this->unk_17E;
- this->dyna.actor.shape.rot.y =
- (s32)((this->unk_18C + sp26) * 0.1f * (0x10000 / 360.0f)) + this->dyna.actor.home.rot.y;
+ this->dyna.actor.shape.rot.y = (s32)DEG_TO_BINANG_ALT3((this->unk_18C + sp26) * 0.1f) + this->dyna.actor.home.rot.y;
- if ((player->stateFlags2 & 0x10) && (this->unk_184 > 0.0f)) {
+ if ((player->stateFlags2 & PLAYER_STATE2_10) && (this->unk_184 > 0.0f)) {
player->actor.world.pos.x =
(Math_SinS(this->dyna.actor.shape.rot.y - this->unk_18E) * this->unk_184) + this->dyna.actor.home.pos.x;
player->actor.world.pos.z =
@@ -516,8 +515,8 @@ void func_80A2A7F8(BgDblueMovebg* this, PlayState* play) {
Flags_UnsetSwitch(play, this->unk_1C0);
}
- player->stateFlags1 |= 0x20;
- player->stateFlags2 &= ~0x10;
+ player->stateFlags1 |= PLAYER_STATE1_20;
+ player->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
this->unk_18C = (this->unk_18C + sp26 + 3600) % 3600;
@@ -525,7 +524,7 @@ void func_80A2A7F8(BgDblueMovebg* this, PlayState* play) {
this->unk_18A = 0;
this->unk_17E = 0;
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_STONEDOOR_STOP);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_STONEDOOR_STOP);
if (func_80A29A80(play, this->unk_1C8, this->unk_1C4)) {
this->unk_172 |= 1;
@@ -550,12 +549,12 @@ void func_80A2AAB8(BgDblueMovebg* this, PlayState* play) {
s32 sp18;
if (this->unk_180-- <= 0) {
- ActorCutscene_Stop(this->unk_1B6[0]);
+ CutsceneManager_Stop(this->csIdList[0]);
}
sp18 = false;
- if ((this->unk_1D0 > 0) && ((D_80A2B974[0] >= 0) || (D_80A2B974[1] >= 0))) {
- if (ActorCutscene_GetCurrentIndex() != -1) {
+ if ((this->unk_1D0 > 0) && ((sCsIdList[0] >= 0) || (sCsIdList[1] >= 0))) {
+ if (CutsceneManager_GetCurrentCsId() != CS_ID_NONE) {
sp18 = true;
}
}
@@ -565,12 +564,12 @@ void func_80A2AAB8(BgDblueMovebg* this, PlayState* play) {
if (this->unk_1D0 == 1) {
this->dyna.pushForce = 0.0f;
- player->stateFlags1 |= 0x20;
- player->stateFlags2 &= ~0x10;
+ player->stateFlags1 |= PLAYER_STATE1_20;
+ player->stateFlags2 &= ~PLAYER_STATE2_10;
}
if (this->unk_1D0 <= 0) {
- player->stateFlags1 &= ~0x20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
this->actionFunc = func_80A2A714;
}
}
@@ -632,7 +631,7 @@ void func_80A2AED0(BgDblueMovebg* this, PlayState* play) {
if (play->roomCtx.curRoom.num != this->unk_171) {
if ((play->roomCtx.prevRoom.num != this->unk_170) && (play->roomCtx.prevRoom.num != this->unk_171)) {
D_80A2BBF4.unk_00 = 0;
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
}
@@ -643,13 +642,13 @@ void func_80A2AED0(BgDblueMovebg* this, PlayState* play) {
switch (temp_v0_3) {
case 1:
case 2:
- this->unk_1D2 = this->unk_1B6[0];
+ this->csId = this->csIdList[0];
this->unk_17E = 40;
break;
case 0:
case 3:
- this->unk_1D2 = this->unk_1B6[1];
+ this->csId = this->csIdList[1];
this->unk_17E = 15;
break;
}
@@ -722,7 +721,7 @@ void BgDblueMovebg_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
if (this->unk_172 & 8) {
- if (SubS_StartActorCutscene(&this->dyna.actor, this->unk_1D2, -1, SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) {
+ if (SubS_StartCutscene(&this->dyna.actor, this->csId, CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) {
this->unk_172 &= ~8;
}
}
@@ -733,7 +732,7 @@ void func_80A2B274(Actor* thisx, PlayState* play) {
s16 temp_v1;
if (this != D_80A2BBF0) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
@@ -812,7 +811,7 @@ void BgDblueMovebg_Draw(Actor* thisx, PlayState* play2) {
CLOSE_DISPS(play->state.gfxCtx);
if ((this->unk_160 == 8) && (this->unk_172 & 0x20)) {
- AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gGreatBayTempleObjectWaterwheelSplashTexAnim));
+ AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gGreatBayTempleObjectWaterwheelSplashTexAnim));
OPEN_DISPS(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.h b/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.h
index 6b5351c2c..6e81c24c1 100644
--- a/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.h
+++ b/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.h
@@ -37,7 +37,7 @@ typedef struct BgDblueMovebg {
/* 0x19C */ Vec3f unk_19C;
/* 0x1A8 */ Vec3f unk_1A8;
/* 0x1B4 */ UNK_TYPE1 unk1B4[2];
- /* 0x1B6 */ s16 unk_1B6[2];
+ /* 0x1B6 */ s16 csIdList[2];
/* 0x1BC */ s32 unk_1BC;
/* 0x1C0 */ s32 unk_1C0;
/* 0x1C4 */ s32 unk_1C4;
@@ -45,7 +45,7 @@ typedef struct BgDblueMovebg {
/* 0x1CC */ s16 unk_1CC;
/* 0x1CE */ s16 unk_1CE;
/* 0x1D0 */ s16 unk_1D0;
- /* 0x1D2 */ s16 unk_1D2;
+ /* 0x1D2 */ s16 csId;
/* 0x1D4 */ f32 unk_1D4;
/* 0x1D8 */ s16 unk_1D8[2][8];
/* 0x1F8 */ f32 unk_1F8[2][8];
@@ -55,6 +55,4 @@ typedef struct BgDblueMovebg {
/* 0x310 */ UNK_TYPE1 unk310[0x60];
} BgDblueMovebg; // size = 0x370
-extern const ActorInit Bg_Dblue_Movebg_InitVars;
-
#endif // Z_BG_DBLUE_MOVEBG_H
diff --git a/src/overlays/actors/ovl_Bg_Dblue_Waterfall/overlay.cfg b/src/overlays/actors/ovl_Bg_Dblue_Waterfall/overlay.cfg
deleted file mode 100644
index 08aaa6100..000000000
--- a/src/overlays/actors/ovl_Bg_Dblue_Waterfall/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Dblue_Waterfall
-z_bg_dblue_waterfall.c
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 a2fa18103..8f3de2b2e 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
@@ -25,7 +25,7 @@ void func_80B84BCC(BgDblueWaterfall* this, PlayState* play);
void func_80B84EF0(BgDblueWaterfall* this, PlayState* play);
void func_80B84F20(BgDblueWaterfall* this, PlayState* play);
-const ActorInit Bg_Dblue_Waterfall_InitVars = {
+ActorInit Bg_Dblue_Waterfall_InitVars = {
ACTOR_BG_DBLUE_WATERFALL,
ACTORCAT_PROP,
FLAGS,
@@ -223,7 +223,7 @@ void func_80B841A0(BgDblueWaterfall* this, PlayState* play) {
EffectSsGSplash_Spawn(play, &sp94, NULL, NULL, 0, 250);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_REFLECTION_WATER);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_REFLECTION_WATER);
}
}
@@ -423,13 +423,13 @@ void func_80B84928(BgDblueWaterfall* this, PlayState* play) {
if (sp30 != 0) {
func_80B83EA4(this, play);
if (this->collider.info.acHitInfo->toucher.dmgFlags & 0x800) {
- this->unk_1A4 = this->actor.cutscene;
+ this->csId = this->actor.csId;
func_80B84AD4(this, play);
}
} else {
func_80B841A0(this, play);
if (this->collider.info.acHitInfo->toucher.dmgFlags & 0x1000) {
- this->unk_1A4 = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene);
+ this->csId = CutsceneManager_GetAdditionalCsId(this->actor.csId);
func_80B84AD4(this, play);
}
}
@@ -448,9 +448,9 @@ void func_80B84AEC(BgDblueWaterfall* this, PlayState* play) {
s32 pad;
s32 sp20;
- if (ActorCutscene_GetCanPlayNext(this->unk_1A4)) {
+ if (CutsceneManager_IsNext(this->csId)) {
sp20 = func_80B83D04(this, play);
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_1A4, &this->actor);
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->actor);
this->unk_1A3 = true;
if (sp20) {
func_80B83D94(this, play);
@@ -460,7 +460,7 @@ void func_80B84AEC(BgDblueWaterfall* this, PlayState* play) {
func_80B84B9C(this, play);
}
} else {
- ActorCutscene_SetIntentToPlay(this->unk_1A4);
+ CutsceneManager_Queue(this->csId);
}
}
@@ -533,7 +533,7 @@ void func_80B84BCC(BgDblueWaterfall* this, PlayState* play) {
func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
} else {
if (this->unk_1A3) {
- ActorCutscene_Stop(this->unk_1A4);
+ CutsceneManager_Stop(this->csId);
}
func_80B8484C(this, play);
}
@@ -572,7 +572,7 @@ void func_80B84F20(BgDblueWaterfall* this, PlayState* play) {
func_800B9010(&this->actor, NA_SE_EV_ICE_MELT_LEVEL - SFX_FLAG);
} else {
if (this->unk_1A3) {
- ActorCutscene_Stop(this->unk_1A4);
+ CutsceneManager_Stop(this->csId);
}
func_80B8484C(this, play);
}
diff --git a/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.h b/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.h
index c02b82619..fae5cca6a 100644
--- a/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.h
+++ b/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.h
@@ -22,12 +22,10 @@ typedef struct BgDblueWaterfall {
/* 0x1A0 */ u8 unk_1A0;
/* 0x1A1 */ UNK_TYPE1 unk1A1[2];
/* 0x1A3 */ s8 unk_1A3;
- /* 0x1A4 */ s16 unk_1A4;
+ /* 0x1A4 */ s16 csId;
/* 0x1A6 */ UNK_TYPE1 unk1A6[1];
/* 0x1A7 */ s8 unk_1A7;
/* 0x1A8 */ f32 unk_1A8;
} BgDblueWaterfall; // size = 0x1AC
-extern const ActorInit Bg_Dblue_Waterfall_InitVars;
-
#endif // Z_BG_DBLUE_WATERFALL_H
diff --git a/src/overlays/actors/ovl_Bg_Dkjail_Ivy/overlay.cfg b/src/overlays/actors/ovl_Bg_Dkjail_Ivy/overlay.cfg
deleted file mode 100644
index 4a1aa8be1..000000000
--- a/src/overlays/actors/ovl_Bg_Dkjail_Ivy/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Dkjail_Ivy
-z_bg_dkjail_ivy.c
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 adeba93c8..e9f8916d0 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
@@ -5,6 +5,8 @@
*/
#include "z_bg_dkjail_ivy.h"
+#include "assets/objects/gameplay_keep/gameplay_keep.h"
+#include "assets/objects/object_dkjail_obj/object_dkjail_obj.h"
#define FLAGS 0x00000000
@@ -15,8 +17,14 @@ void BgDkjailIvy_Destroy(Actor* thisx, PlayState* play);
void BgDkjailIvy_Update(Actor* thisx, PlayState* play);
void BgDkjailIvy_Draw(Actor* thisx, PlayState* play);
-#if 0
-const ActorInit Bg_Dkjail_Ivy_InitVars = {
+void BgDkjailIvy_SetupWaitForCut(BgDkjailIvy* this);
+void BgDkjailIvy_WaitForCut(BgDkjailIvy* this, PlayState* play);
+void BgDkjailIvy_SetupCutscene(BgDkjailIvy* this);
+void BgDkjailIvy_BeginCutscene(BgDkjailIvy* this, PlayState* play);
+void BgDkjailIvy_SetupFadeOut(BgDkjailIvy* this);
+void BgDkjailIvy_FadeOut(BgDkjailIvy* this, PlayState* play);
+
+ActorInit Bg_Dkjail_Ivy_InitVars = {
ACTOR_BG_DKJAIL_IVY,
ACTORCAT_BG,
FLAGS,
@@ -28,47 +36,175 @@ const ActorInit Bg_Dkjail_Ivy_InitVars = {
(ActorFunc)BgDkjailIvy_Draw,
};
-// static ColliderCylinderInit sCylinderInit = {
-static ColliderCylinderInit D_80ADE950 = {
- { COLTYPE_NONE, AT_NONE, AC_ON | AC_TYPE_PLAYER, OC1_NONE, OC2_NONE, COLSHAPE_CYLINDER, },
- { ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0x01000200, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_NONE, },
+static ColliderCylinderInit sCylinderInit = {
+ {
+ COLTYPE_NONE,
+ AT_NONE,
+ AC_ON | AC_TYPE_PLAYER,
+ OC1_NONE,
+ OC2_NONE,
+ COLSHAPE_CYLINDER,
+ },
+ {
+ ELEMTYPE_UNK0,
+ { 0x00000000, 0x00, 0x00 },
+ { 0x01000200, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_ON,
+ OCELEM_NONE,
+ },
{ 20, 80, 0, { 0, 0, 0 } },
};
-// static InitChainEntry sInitChain[] = {
-static InitChainEntry D_80ADE98C[] = {
+void BgDkjailIvy_IvyCutEffects(BgDkjailIvy* this, PlayState* play) {
+ static Gfx* sLeafDlists[] = { gKakeraLeafMiddle, gKakeraLeafTip };
+ static s16 sLeafScales[] = { 110, 80, 60, 40 };
+ f32 phi_fs0;
+ s32 i;
+ Vec3f spD4;
+ Vec3f pos;
+ Vec3f vel;
+ Vec3f accel;
+ s16 angle;
+
+ Matrix_RotateYS(this->dyna.actor.home.rot.y, MTXMODE_NEW);
+
+ for (i = 0, angle = 0; i < 50; i++, angle += 0x4E20) {
+ spD4.y = (i * (90.0f / 49.0f)) + 2.0f;
+ if (spD4.y < 45.0f) {
+ phi_fs0 = ((1.0f / 180.0f) * spD4.y) + 0.75f;
+ } else if (spD4.y < 90.0f) {
+ phi_fs0 = ((-1.0f / 180.0f) * spD4.y) + 1.25f;
+ } else {
+ phi_fs0 = ((-1.0f / 30.0f) * spD4.y) + 3.75f;
+ }
+
+ spD4.x = Math_SinS(angle) * 40.0f * phi_fs0;
+ spD4.z = (Rand_ZeroOne() * 6.0f) - 3.0f;
+
+ Matrix_MultVec3f(&spD4, &pos);
+
+ vel.x = (Rand_ZeroOne() - 0.5f) + (pos.x * 0.075f);
+ vel.y = 2.0f * Rand_ZeroOne();
+ vel.z = (Rand_ZeroOne() - 0.5f) + (pos.z * 0.075f);
+
+ pos.x += this->dyna.actor.world.pos.x;
+ pos.y += this->dyna.actor.world.pos.y;
+ pos.z += this->dyna.actor.world.pos.z;
+
+ EffectSsKakera_Spawn(play, &pos, &vel, &pos, -0x82, 0x40, 0x28, 0, 0, sLeafScales[i & 3], 0, 0, 44, -1,
+ GAMEPLAY_KEEP, sLeafDlists[(s32)Rand_Next() > 0]);
+
+ if ((i > 20) && ((i % 2) != 0)) {
+ accel.x = (Rand_ZeroOne() - 0.5f) * 0.2f;
+ accel.y = (Rand_ZeroOne() * 0.02f) - 0.1f;
+ accel.z = (Rand_ZeroOne() - 0.5f) * 0.2f;
+
+ func_800B12F0(play, &pos, &gZeroVec3f, &accel, ((Rand_Next() >> 26) + 10), (Rand_Next() >> 28), 50);
+ }
+ }
+}
+
+static InitChainEntry sInitChain[] = {
ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
ICHAIN_F32(uncullZoneScale, 200, ICHAIN_CONTINUE),
ICHAIN_F32(uncullZoneDownward, 200, ICHAIN_CONTINUE),
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
};
-#endif
+void BgDkjailIvy_Init(Actor* thisx, PlayState* play) {
+ s32 pad;
+ BgDkjailIvy* this = THIS;
-extern ColliderCylinderInit D_80ADE950;
-extern InitChainEntry D_80ADE98C[];
+ Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
+ DynaPolyActor_Init(&this->dyna, 0);
+ Collider_InitCylinder(play, &this->collider);
-extern UNK_TYPE D_06000080;
-extern UNK_TYPE D_060011A8;
+ if (Flags_GetSwitch(play, BG_DKJAIL_GET_SWITCH(thisx))) {
+ Actor_Kill(&this->dyna.actor);
+ } else {
+ DynaPolyActor_LoadMesh(play, &this->dyna, &object_dkjail_obj_Colheader_0011A8);
+ Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit);
+ Collider_UpdateCylinder(&this->dyna.actor, &this->collider);
+ this->alpha = 255;
+ BgDkjailIvy_SetupWaitForCut(this);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dkjail_Ivy/func_80ADE230.s")
+void BgDkjailIvy_Destroy(Actor* thisx, PlayState* play) {
+ BgDkjailIvy* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dkjail_Ivy/BgDkjailIvy_Init.s")
+ DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
+ Collider_DestroyCylinder(play, &this->collider);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dkjail_Ivy/BgDkjailIvy_Destroy.s")
+void BgDkjailIvy_SetupWaitForCut(BgDkjailIvy* this) {
+ this->actionFunc = BgDkjailIvy_WaitForCut;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dkjail_Ivy/func_80ADE6AC.s")
+void BgDkjailIvy_WaitForCut(BgDkjailIvy* this, PlayState* play) {
+ if (this->collider.base.acFlags & AC_HIT) {
+ this->collider.base.acFlags &= ~AC_HIT;
+ this->dyna.actor.flags |= ACTOR_FLAG_10;
+ CutsceneManager_Queue(this->dyna.actor.csId);
+ BgDkjailIvy_SetupCutscene(this);
+ } else {
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dkjail_Ivy/func_80ADE6C0.s")
+void BgDkjailIvy_SetupCutscene(BgDkjailIvy* this) {
+ this->actionFunc = BgDkjailIvy_BeginCutscene;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dkjail_Ivy/func_80ADE734.s")
+void BgDkjailIvy_BeginCutscene(BgDkjailIvy* this, PlayState* play) {
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
+ this->fadeOutTimer = 50;
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
+ Flags_SetSwitch(play, BG_DKJAIL_GET_SWITCH(&this->dyna.actor));
+ BgDkjailIvy_IvyCutEffects(this, play);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_GRASS_WALL_BROKEN);
+ BgDkjailIvy_SetupFadeOut(this);
+ } else {
+ CutsceneManager_Queue(this->dyna.actor.csId);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dkjail_Ivy/func_80ADE748.s")
+void BgDkjailIvy_SetupFadeOut(BgDkjailIvy* this) {
+ this->actionFunc = BgDkjailIvy_FadeOut;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dkjail_Ivy/func_80ADE7E0.s")
+void BgDkjailIvy_FadeOut(BgDkjailIvy* this, PlayState* play) {
+ if (this->alpha > 8) {
+ this->alpha -= 8;
+ } else {
+ this->alpha = 0;
+ this->dyna.actor.draw = NULL;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dkjail_Ivy/func_80ADE7F4.s")
+ this->fadeOutTimer--;
+ if (this->fadeOutTimer <= 0) {
+ Actor_Kill(&this->dyna.actor);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dkjail_Ivy/BgDkjailIvy_Update.s")
+void BgDkjailIvy_Update(Actor* thisx, PlayState* play) {
+ BgDkjailIvy* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dkjail_Ivy/BgDkjailIvy_Draw.s")
+ this->actionFunc(this, play);
+}
+
+void BgDkjailIvy_Draw(Actor* thisx, PlayState* play) {
+ BgDkjailIvy* this = THIS;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C2DC(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);
+ gSPDisplayList(POLY_XLU_DISP++, &gDkjailIvyDL);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
diff --git a/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.h b/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.h
index c4d824dc0..4835b7a0b 100644
--- a/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.h
+++ b/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.h
@@ -3,17 +3,18 @@
#include "global.h"
+#define BG_DKJAIL_GET_SWITCH(thisx) ((thisx)->params & 0x7F)
+
struct BgDkjailIvy;
typedef void (*BgDkjailIvyActionFunc)(struct BgDkjailIvy*, PlayState*);
typedef struct BgDkjailIvy {
- /* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0x64];
+ /* 0x000 */ DynaPolyActor dyna;
+ /* 0x15C */ ColliderCylinder collider;
/* 0x1A8 */ BgDkjailIvyActionFunc actionFunc;
- /* 0x1AC */ char unk_1AC[0x4];
+ /* 0x1AC */ s8 fadeOutTimer;
+ /* 0x1AD */ u8 alpha;
} BgDkjailIvy; // size = 0x1B0
-extern const ActorInit Bg_Dkjail_Ivy_InitVars;
-
#endif // Z_BG_DKJAIL_IVY_H
diff --git a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/overlay.cfg b/src/overlays/actors/ovl_Bg_Dy_Yoseizo/overlay.cfg
deleted file mode 100644
index 59c99de93..000000000
--- a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Dy_Yoseizo
-z_bg_dy_yoseizo.c
diff --git a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c b/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c
index b1bdc822c..332e4e543 100644
--- a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c
+++ b/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c
@@ -26,7 +26,7 @@ void func_80A0B8CC(BgDyYoseizo* this, PlayState* play);
void func_80A0BB08(BgDyYoseizo* this, PlayState* play);
#if 0
-const ActorInit Bg_Dy_Yoseizo_InitVars = {
+ActorInit Bg_Dy_Yoseizo_InitVars = {
ACTOR_BG_DY_YOSEIZO,
ACTORCAT_PROP,
FLAGS,
diff --git a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.h b/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.h
index 5d9d84749..bd06cdb38 100644
--- a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.h
+++ b/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.h
@@ -13,6 +13,4 @@ typedef struct BgDyYoseizo {
/* 0x0148 */ char unk_148[0x33BC];
} BgDyYoseizo; // size = 0x3504
-extern const ActorInit Bg_Dy_Yoseizo_InitVars;
-
#endif // Z_BG_DY_YOSEIZO_H
diff --git a/src/overlays/actors/ovl_Bg_F40_Block/overlay.cfg b/src/overlays/actors/ovl_Bg_F40_Block/overlay.cfg
deleted file mode 100644
index b5030fcaa..000000000
--- a/src/overlays/actors/ovl_Bg_F40_Block/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_F40_Block
-z_bg_f40_block.c
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 4d2a8632e..be1958cb4 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
@@ -26,7 +26,7 @@ void func_80BC44F4(BgF40Block* this, PlayState* play);
void func_80BC4530(BgF40Block* this, PlayState* play);
void func_80BC457C(BgF40Block* this, PlayState* play);
-const ActorInit Bg_F40_Block_InitVars = {
+ActorInit Bg_F40_Block_InitVars = {
ACTOR_BG_F40_BLOCK,
ACTORCAT_BG,
FLAGS,
@@ -148,7 +148,7 @@ s32 func_80BC3B00(BgF40Block* this) {
}
}
- if (Math_Vec3f_StepTo(&this->dyna.actor.world.pos, &sp28, this->dyna.actor.speedXZ) <= 0.0f) {
+ if (Math_Vec3f_StepTo(&this->dyna.actor.world.pos, &sp28, this->dyna.actor.speed) <= 0.0f) {
this->unk_168 = 6;
this->unk_160 = this->unk_164;
return true;
@@ -157,16 +157,16 @@ s32 func_80BC3B00(BgF40Block* this) {
}
s32 func_80BC3CA4(BgF40Block* this) {
- if (this->dyna.actor.cutscene == -1) {
+ if (this->dyna.actor.csId == CS_ID_NONE) {
return true;
}
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
return true;
}
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
return false;
}
@@ -182,26 +182,26 @@ s32 func_80BC3D08(BgF40Block* this, PlayState* play, s32 arg2) {
if (arg2 != 0) {
sp48.x =
- (D_80BC4620[this->unk_168].x * ((800.0f * this->dyna.actor.scale.x) - (this->dyna.actor.speedXZ * 0.5f))) +
+ (D_80BC4620[this->unk_168].x * ((800.0f * this->dyna.actor.scale.x) - (this->dyna.actor.speed * 0.5f))) +
this->dyna.actor.world.pos.x;
sp48.y =
- (D_80BC4620[this->unk_168].y * ((800.0f * this->dyna.actor.scale.y) - (this->dyna.actor.speedXZ * 0.5f))) +
+ (D_80BC4620[this->unk_168].y * ((800.0f * this->dyna.actor.scale.y) - (this->dyna.actor.speed * 0.5f))) +
this->dyna.actor.world.pos.y;
sp48.z =
- (D_80BC4620[this->unk_168].z * ((800.0f * this->dyna.actor.scale.z) - (this->dyna.actor.speedXZ * 0.5f))) +
+ (D_80BC4620[this->unk_168].z * ((800.0f * this->dyna.actor.scale.z) - (this->dyna.actor.speed * 0.5f))) +
this->dyna.actor.world.pos.z;
- sp3C.x = (D_80BC4620[this->unk_168].x * this->dyna.actor.speedXZ) + sp48.x;
- sp3C.y = (D_80BC4620[this->unk_168].y * this->dyna.actor.speedXZ) + sp48.y;
- sp3C.z = (D_80BC4620[this->unk_168].z * this->dyna.actor.speedXZ) + sp48.z;
+ sp3C.x = (D_80BC4620[this->unk_168].x * this->dyna.actor.speed) + sp48.x;
+ sp3C.y = (D_80BC4620[this->unk_168].y * this->dyna.actor.speed) + sp48.y;
+ sp3C.z = (D_80BC4620[this->unk_168].z * this->dyna.actor.speed) + sp48.z;
} else {
sp3C.x = (D_80BC4620[this->unk_168].x * 800.0f * this->dyna.actor.scale.x) + this->dyna.actor.world.pos.x;
sp3C.y = (D_80BC4620[this->unk_168].y * 800.0f * this->dyna.actor.scale.y) + this->dyna.actor.world.pos.y;
sp3C.z = (D_80BC4620[this->unk_168].z * 800.0f * this->dyna.actor.scale.z) + this->dyna.actor.world.pos.z;
- sp48.x = sp3C.x - (D_80BC4620[this->unk_168].x * this->dyna.actor.speedXZ * 1.5f);
- sp48.y = sp3C.y - (D_80BC4620[this->unk_168].y * this->dyna.actor.speedXZ * 1.5f);
- sp48.z = sp3C.z - (D_80BC4620[this->unk_168].z * this->dyna.actor.speedXZ * 1.5f);
+ sp48.x = sp3C.x - (D_80BC4620[this->unk_168].x * this->dyna.actor.speed * 1.5f);
+ sp48.y = sp3C.y - (D_80BC4620[this->unk_168].y * this->dyna.actor.speed * 1.5f);
+ sp48.z = sp3C.z - (D_80BC4620[this->unk_168].z * this->dyna.actor.speed * 1.5f);
}
if (BgCheck_AnyLineTest1(&play->colCtx, &sp48, &sp3C, &sp30, &sp54, true)) {
@@ -228,7 +228,7 @@ void BgF40Block_Init(Actor* thisx, PlayState* play) {
BgF40Block* this = THIS;
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_f40_obj_Colheader_004640);
if (BGF40BLOCK_GET_PATH(&this->dyna.actor) != 0x3F) {
@@ -240,11 +240,11 @@ void BgF40Block_Init(Actor* thisx, PlayState* play) {
if (this->path != NULL) {
if (Flags_GetSwitch(play, BGF40BLOCK_GET_SWITCHFLAG(&this->dyna.actor))) {
this->actionFunc = func_80BC4530;
- this->dyna.actor.speedXZ = 40.0f;
+ this->dyna.actor.speed = 40.0f;
func_80BC3A2C(this, play);
} else {
this->actionFunc = func_80BC4380;
- this->dyna.actor.speedXZ = 20.0f;
+ this->dyna.actor.speed = 20.0f;
func_80BC3980(this, play);
}
} else {
@@ -272,20 +272,20 @@ void func_80BC41AC(BgF40Block* this, PlayState* play) {
void func_80BC4228(BgF40Block* this, PlayState* play) {
if (func_80BC3B00(this)) {
- this->dyna.actor.speedXZ = 20.0f;
+ this->dyna.actor.speed = 20.0f;
if (this->unk_160 < (this->path->count - 1)) {
this->unk_164 = this->unk_160 + 1;
} else {
this->actionFunc = func_80BC4530;
- ActorCutscene_Stop(this->dyna.actor.cutscene);
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_IKANA_BLOCK_STOP_C);
+ CutsceneManager_Stop(this->dyna.actor.csId);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_IKANA_BLOCK_STOP_C);
}
}
if (func_80BC3D08(this, play, 0)) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ CutsceneManager_Stop(this->dyna.actor.csId);
this->actionFunc = func_80BC41AC;
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_IKANA_BLOCK_STOP_F);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_IKANA_BLOCK_STOP_F);
return;
}
@@ -332,20 +332,20 @@ void func_80BC43CC(BgF40Block* this, PlayState* play) {
void func_80BC4448(BgF40Block* this, PlayState* play) {
if (func_80BC3B00(this)) {
- this->dyna.actor.speedXZ = 40.0f;
+ this->dyna.actor.speed = 40.0f;
if (this->unk_160 > 0) {
this->unk_164 = this->unk_160 - 1;
} else {
this->actionFunc = func_80BC4380;
- ActorCutscene_Stop(this->dyna.actor.cutscene);
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_IKANA_BLOCK_STOP_C);
+ CutsceneManager_Stop(this->dyna.actor.csId);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_IKANA_BLOCK_STOP_C);
}
}
if (func_80BC3D08(this, play, 0)) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ CutsceneManager_Stop(this->dyna.actor.csId);
this->actionFunc = func_80BC43CC;
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_IKANA_BLOCK_STOP_F);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_IKANA_BLOCK_STOP_F);
}
}
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 df21bf933..37a5c360e 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
@@ -19,6 +19,4 @@ typedef struct BgF40Block {
/* 0x16C */ BgF40BlockActionFunc actionFunc;
} BgF40Block; // size = 0x170
-extern const ActorInit Bg_F40_Block_InitVars;
-
#endif // Z_BG_F40_BLOCK_H
diff --git a/src/overlays/actors/ovl_Bg_F40_Flift/overlay.cfg b/src/overlays/actors/ovl_Bg_F40_Flift/overlay.cfg
deleted file mode 100644
index f771926db..000000000
--- a/src/overlays/actors/ovl_Bg_F40_Flift/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_F40_Flift
-z_bg_f40_flift.c
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 3974b2fc5..075f38607 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
@@ -19,7 +19,7 @@ void BgF40Flift_Draw(Actor* thisx, PlayState* play);
void func_808D75F0(BgF40Flift* this, PlayState* play);
void func_808D7714(BgF40Flift* this, PlayState* play);
-const ActorInit Bg_F40_Flift_InitVars = {
+ActorInit Bg_F40_Flift_InitVars = {
ACTOR_BG_F40_FLIFT,
ACTORCAT_BG,
FLAGS,
@@ -41,7 +41,7 @@ void BgF40Flift_Init(Actor* thisx, PlayState* play) {
BgF40Flift* this = THIS;
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_f40_obj_Colheader_004240);
this->dyna.actor.params = 1;
this->actionFunc = func_808D75F0;
@@ -54,8 +54,8 @@ void BgF40Flift_Destroy(Actor* thisx, PlayState* play) {
}
void func_808D75F0(BgF40Flift* this, PlayState* play) {
- if (((this->dyna.actor.params == 1) && (DynaPolyActor_IsInRidingMovingState(&this->dyna))) ||
- ((this->dyna.actor.params == -1) && (!DynaPolyActor_IsInRidingMovingState(&this->dyna)))) {
+ if (((this->dyna.actor.params == 1) && DynaPolyActor_IsPlayerOnTop(&this->dyna)) ||
+ ((this->dyna.actor.params == -1) && !DynaPolyActor_IsPlayerOnTop(&this->dyna))) {
this->timer = 96;
this->actionFunc = func_808D7714;
} else {
diff --git a/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.h b/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.h
index 95b2e9073..4bdb16e3e 100644
--- a/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.h
+++ b/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.h
@@ -13,6 +13,4 @@ typedef struct BgF40Flift {
/* 0x160 */ s32 timer;
} BgF40Flift; // size = 0x164
-extern const ActorInit Bg_F40_Flift_InitVars;
-
#endif // Z_BG_F40_FLIFT_H
diff --git a/src/overlays/actors/ovl_Bg_F40_Switch/overlay.cfg b/src/overlays/actors/ovl_Bg_F40_Switch/overlay.cfg
deleted file mode 100644
index b5e045459..000000000
--- a/src/overlays/actors/ovl_Bg_F40_Switch/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_F40_Switch
-z_bg_f40_switch.c
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 7838dadb7..67703f0cd 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
@@ -24,7 +24,7 @@ void BgF40Switch_Press(BgF40Switch* this, PlayState* play);
void BgF40Switch_WaitToPress(BgF40Switch* this, PlayState* play);
void BgF40Switch_IdleUnpressed(BgF40Switch* this, PlayState* play);
-const ActorInit Bg_F40_Switch_InitVars = {
+ActorInit Bg_F40_Switch_InitVars = {
ACTOR_BG_F40_SWITCH,
ACTORCAT_SWITCH,
FLAGS,
@@ -56,7 +56,7 @@ void BgF40Switch_CheckAll(BgF40Switch* this, PlayState* play) {
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_IsInSwitchPressedState(&actorAsSwitch->dyna);
+ isPressed = DynaPolyActor_IsSwitchPressed(&actorAsSwitch->dyna);
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.
@@ -112,7 +112,7 @@ void BgF40Switch_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.scale.y = 0.165f;
this->actionFunc = BgF40Switch_IdleUnpressed;
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y + 1.0f;
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_f40_switch_Colheader_000118);
if (!sBgF40SwitchGlobalsInitialized) {
sBgF40SwitchLastUpdateFrame = play->gameplayFrames;
@@ -129,7 +129,7 @@ void BgF40Switch_Destroy(Actor* thisx, PlayState* play) {
void BgF40Switch_Unpress(BgF40Switch* this, PlayState* play) {
this->dyna.actor.scale.y += 0.0495f;
if (this->dyna.actor.scale.y >= 0.165f) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_IKANA_BLOCK_SWITCH);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_IKANA_BLOCK_SWITCH);
this->actionFunc = BgF40Switch_IdleUnpressed;
this->dyna.actor.scale.y = 0.165f;
}
@@ -144,10 +144,10 @@ void BgF40Switch_IdlePressed(BgF40Switch* this, PlayState* play) {
void BgF40Switch_Press(BgF40Switch* this, PlayState* play) {
this->dyna.actor.scale.y -= 0.0495f;
if (this->dyna.actor.scale.y <= 0.0165f) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_IKANA_BLOCK_SWITCH);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_IKANA_BLOCK_SWITCH);
Rumble_Request(this->dyna.actor.xyzDistToPlayerSq, 120, 20, 10);
if (this->isInitiator) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ CutsceneManager_Stop(this->dyna.actor.csId);
this->isInitiator = false;
}
this->actionFunc = BgF40Switch_IdlePressed;
@@ -157,19 +157,19 @@ void BgF40Switch_Press(BgF40Switch* this, PlayState* play) {
}
void BgF40Switch_WaitToPress(BgF40Switch* this, PlayState* play) {
- if (!this->isInitiator || this->dyna.actor.cutscene == -1) {
+ if (!this->isInitiator || (this->dyna.actor.csId == CS_ID_NONE)) {
this->actionFunc = BgF40Switch_Press;
if (this->isInitiator) {
Flags_SetSwitch(play, BGF40SWITCH_GET_SWITCHFLAG(&this->dyna.actor));
}
- } else if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ } else if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
this->actionFunc = BgF40Switch_Press;
if (this->isInitiator) {
Flags_SetSwitch(play, BGF40SWITCH_GET_SWITCHFLAG(&this->dyna.actor));
}
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
diff --git a/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.h b/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.h
index b0fe89341..cfa8c5462 100644
--- a/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.h
+++ b/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.h
@@ -20,6 +20,4 @@ typedef struct BgF40Switch {
/* 0x164 */ BgF40SwitchActionFunc actionFunc;
} BgF40Switch; // size = 0x168
-extern const ActorInit Bg_F40_Switch_InitVars;
-
#endif // Z_BG_F40_SWITCH_H
diff --git a/src/overlays/actors/ovl_Bg_F40_Swlift/overlay.cfg b/src/overlays/actors/ovl_Bg_F40_Swlift/overlay.cfg
deleted file mode 100644
index 83d9bffed..000000000
--- a/src/overlays/actors/ovl_Bg_F40_Swlift/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_F40_Swlift
-z_bg_f40_swlift.c
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 16b39cdd3..97fd3f068 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
@@ -16,7 +16,7 @@ void BgF40Swlift_Update(Actor* thisx, PlayState* play);
void BgF40Swlift_Draw(Actor* thisx, PlayState* play);
#if 0
-const ActorInit Bg_F40_Swlift_InitVars = {
+ActorInit Bg_F40_Swlift_InitVars = {
ACTOR_BG_F40_SWLIFT,
ACTORCAT_BG,
FLAGS,
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 48a369e30..a687fc642 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
@@ -10,6 +10,4 @@ typedef struct BgF40Swlift {
/* 0x144 */ char unk_144[0x1C];
} BgF40Swlift; // size = 0x160
-extern const ActorInit Bg_F40_Swlift_InitVars;
-
#endif // Z_BG_F40_SWLIFT_H
diff --git a/src/overlays/actors/ovl_Bg_Fire_Wall/overlay.cfg b/src/overlays/actors/ovl_Bg_Fire_Wall/overlay.cfg
deleted file mode 100644
index 8405309d0..000000000
--- a/src/overlays/actors/ovl_Bg_Fire_Wall/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Fire_Wall
-z_bg_fire_wall.c
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 1ad295e68..40b8c78a7 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
@@ -21,7 +21,7 @@ void func_809AC638(BgFireWall* this, PlayState* play);
void func_809AC68C(BgFireWall* this, PlayState* play);
void func_809AC6C0(BgFireWall* this, PlayState* play);
-const ActorInit Bg_Fire_Wall_InitVars = {
+ActorInit Bg_Fire_Wall_InitVars = {
ACTOR_BG_FIRE_WALL,
ACTORCAT_BG,
FLAGS,
@@ -166,7 +166,7 @@ void func_809AC7F8(BgFireWall* this, PlayState* play) {
void func_809AC970(BgFireWall* this, PlayState* play) {
if (Math_StepToF(&this->actor.scale.y, 0.005f, this->unk_158)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -193,7 +193,7 @@ void BgFireWall_Update(Actor* thisx, PlayState* play2) {
if (this->actionFunc != func_809AC970) {
if (this->actor.parent != NULL) {
EnEncount4* parent = (EnEncount4*)this->actor.parent;
- if ((parent->actor.update != NULL) && (parent->unk_150 != 0)) {
+ if ((parent->actor.update != NULL) && (parent->timer != 0)) {
this->actionFunc = func_809AC970;
}
}
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 018e9f5f1..af5a29923 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
@@ -7,6 +7,11 @@ struct BgFireWall;
typedef void (*BgFireWallActionFunc)(struct BgFireWall*, PlayState*);
+typedef enum {
+ /* 0 */ BGFIREWALL_PARAMS_0,
+ /* 1 */ BGFIREWALL_PARAMS_1,
+} BgFireWallParams;
+
typedef struct BgFireWall {
/* 0x000 */ Actor actor;
/* 0x144 */ BgFireWallActionFunc actionFunc;
@@ -21,6 +26,4 @@ typedef struct BgFireWall {
/* 0x164 */ ColliderCylinder collider;
} BgFireWall; // size = 0x1B0
-extern const ActorInit Bg_Fire_Wall_InitVars;
-
#endif // Z_BG_FIRE_WALL_H
diff --git a/src/overlays/actors/ovl_Bg_Fu_Kaiten/overlay.cfg b/src/overlays/actors/ovl_Bg_Fu_Kaiten/overlay.cfg
deleted file mode 100644
index 30736ca5d..000000000
--- a/src/overlays/actors/ovl_Bg_Fu_Kaiten/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Fu_Kaiten
-z_bg_fu_kaiten.c
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 a98025524..bec649b57 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
@@ -16,7 +16,7 @@ void BgFuKaiten_Destroy(Actor* thisx, PlayState* play);
void BgFuKaiten_Update(Actor* thisx, PlayState* play);
void BgFuKaiten_Draw(Actor* thisx, PlayState* play);
-const ActorInit Bg_Fu_Kaiten_InitVars = {
+ActorInit Bg_Fu_Kaiten_InitVars = {
ACTOR_BG_FU_KAITEN,
ACTORCAT_BG,
FLAGS,
@@ -34,7 +34,7 @@ void BgFuKaiten_Init(Actor* thisx, PlayState* play) {
CollisionHeader* header = NULL;
Actor_SetScale(thisx, 1.0);
- DynaPolyActor_Init(&this->dyna, 3);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y);
CollisionHeader_GetVirtual(&object_fu_kaiten_Colheader_002D30, &header);
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, header);
diff --git a/src/overlays/actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.h b/src/overlays/actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.h
index 6937fbf53..b09083519 100644
--- a/src/overlays/actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.h
+++ b/src/overlays/actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.h
@@ -15,6 +15,4 @@ typedef struct BgFuKaiten {
/* 0x16C */ s16 bounce;
} BgFuKaiten; // size = 0x170
-extern const ActorInit Bg_Fu_Kaiten_InitVars;
-
#endif // Z_BG_FU_KAITEN_H
diff --git a/src/overlays/actors/ovl_Bg_Fu_Mizu/overlay.cfg b/src/overlays/actors/ovl_Bg_Fu_Mizu/overlay.cfg
deleted file mode 100644
index 295d23d04..000000000
--- a/src/overlays/actors/ovl_Bg_Fu_Mizu/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Fu_Mizu
-z_bg_fu_mizu.c
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 c485927ce..7f485be1d 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
@@ -16,7 +16,7 @@ void BgFuMizu_Destroy(Actor* thisx, PlayState* play);
void BgFuMizu_Update(Actor* thisx, PlayState* play);
void BgFuMizu_Draw(Actor* thisx, PlayState* play);
-const ActorInit Bg_Fu_Mizu_InitVars = {
+ActorInit Bg_Fu_Mizu_InitVars = {
ACTOR_BG_FU_MIZU,
ACTORCAT_BG,
FLAGS,
@@ -34,7 +34,7 @@ void BgFuMizu_Init(Actor* thisx, PlayState* play) {
CollisionHeader* colHeader = NULL;
Actor_SetScale(&this->dyna.actor, 1.0f);
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
CollisionHeader_GetVirtual(&object_fu_kaiten_Colheader_0037F8, &colHeader);
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
this->unk_160 = 0;
diff --git a/src/overlays/actors/ovl_Bg_Fu_Mizu/z_bg_fu_mizu.h b/src/overlays/actors/ovl_Bg_Fu_Mizu/z_bg_fu_mizu.h
index 89b1df323..d17f64638 100644
--- a/src/overlays/actors/ovl_Bg_Fu_Mizu/z_bg_fu_mizu.h
+++ b/src/overlays/actors/ovl_Bg_Fu_Mizu/z_bg_fu_mizu.h
@@ -11,6 +11,4 @@ typedef struct BgFuMizu {
/* 0x160 */ s16 unk_160;
} BgFuMizu; // size = 0x164
-extern const ActorInit Bg_Fu_Mizu_InitVars;
-
#endif // Z_BG_FU_MIZU_H
diff --git a/src/overlays/actors/ovl_Bg_Goron_Oyu/overlay.cfg b/src/overlays/actors/ovl_Bg_Goron_Oyu/overlay.cfg
deleted file mode 100644
index cd6286ed1..000000000
--- a/src/overlays/actors/ovl_Bg_Goron_Oyu/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Goron_Oyu
-z_bg_goron_oyu.c
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 fbae48df2..7d0ed6a1a 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
@@ -23,7 +23,7 @@ void BgGoronOyu_UpdateWaterBoxInfo(BgGoronOyu* this, PlayState* play);
void BgGoronOyu_SpawnEffects(BgGoronOyu* this, PlayState* play);
void func_80B40160(BgGoronOyu* this, PlayState* play);
-const ActorInit Bg_Goron_Oyu_InitVars = {
+ActorInit Bg_Goron_Oyu_InitVars = {
ACTOR_BG_GORON_OYU,
ACTORCAT_BG,
FLAGS,
@@ -42,7 +42,7 @@ void func_80B40080(BgGoronOyu* this) {
void func_80B4009C(BgGoronOyu* this) {
this->unk_17E = 0;
- this->initialActorCutscene = this->dyna.actor.cutscene;
+ this->initCsId = this->dyna.actor.csId;
this->actionFunc = func_80B40100;
this->unk_164 = 20.0f;
}
@@ -53,11 +53,11 @@ void func_80B400C8(BgGoronOyu* this, PlayState* play) {
}
void func_80B40100(BgGoronOyu* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->initialActorCutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->initialActorCutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->initCsId)) {
+ CutsceneManager_StartWithPlayerCs(this->initCsId, &this->dyna.actor);
this->actionFunc = func_80B40160;
} else {
- ActorCutscene_SetIntentToPlay(this->initialActorCutscene);
+ CutsceneManager_Queue(this->initCsId);
}
}
@@ -69,7 +69,7 @@ void func_80B40160(BgGoronOyu* this, PlayState* play) {
BgGoronOyu_UpdateWaterBoxInfo(this, play);
if (this->unk_164 <= 0.0f) {
- ActorCutscene_Stop(this->initialActorCutscene);
+ CutsceneManager_Stop(this->initCsId);
this->unk_164 = 0.0f;
func_80B40080(this);
}
@@ -91,8 +91,8 @@ void func_80B401F8(BgGoronOyu* this, PlayState* play) {
if (dist.x >= 0.0f && dist.x <= this->waterBoxXLength && dist.z >= 0.0f && dist.z <= this->waterBoxZLength &&
fabsf(dist.y) < 100.0f && player->actor.depthInWater > 12.0f) {
- Actor_PickUp(&this->dyna.actor, play, GI_MAX, this->dyna.actor.xzDistToPlayer,
- fabsf(this->dyna.actor.playerHeightRel));
+ Actor_OfferGetItem(&this->dyna.actor, play, GI_MAX, this->dyna.actor.xzDistToPlayer,
+ fabsf(this->dyna.actor.playerHeightRel));
}
}
@@ -152,7 +152,7 @@ void BgGoronOyu_Init(Actor* thisx, PlayState* play) {
CollisionHeader* colHeader = NULL;
Actor_SetScale(&this->dyna.actor, 0.1f);
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
CollisionHeader_GetVirtual(&object_oyu_Colheader_000988, &colHeader);
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
diff --git a/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.h b/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.h
index d17ff87b3..57459364b 100644
--- a/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.h
+++ b/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.h
@@ -15,7 +15,7 @@ typedef struct BgGoronOyu {
/* 0x168 */ Vec3f waterBoxPos;
/* 0x174 */ f32 waterBoxXLength;
/* 0x178 */ f32 waterBoxZLength;
- /* 0x17C */ s16 initialActorCutscene;
+ /* 0x17C */ s16 initCsId;
/* 0x17E */ u16 unk_17E;
} BgGoronOyu; // size = 0x180
diff --git a/src/overlays/actors/ovl_Bg_Haka_Bombwall/overlay.cfg b/src/overlays/actors/ovl_Bg_Haka_Bombwall/overlay.cfg
deleted file mode 100644
index dd9b391ee..000000000
--- a/src/overlays/actors/ovl_Bg_Haka_Bombwall/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Haka_Bombwall
-z_bg_haka_bombwall.c
diff --git a/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.c b/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.c
index f494131d9..fc209773b 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.c
+++ b/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.c
@@ -24,7 +24,7 @@ void BgHakaBombwall_PlayCutscene(BgHakaBombwall* this, PlayState* play);
void BgHakaBombwall_SetupEndCutscene(BgHakaBombwall* this);
void BgHakaBombwall_EndCutscene(BgHakaBombwall* this, PlayState* play);
-const ActorInit Bg_Haka_Bombwall_InitVars = {
+ActorInit Bg_Haka_Bombwall_InitVars = {
ACTOR_BG_HAKA_BOMBWALL,
ACTORCAT_BG,
FLAGS,
@@ -56,7 +56,7 @@ static ColliderCylinderInit sCylinderInit = {
{ 80, 80, 0, { 0, 0, 0 } },
};
-static s16 D_80BD64CC[4] = { 24, 15, 10, 5 };
+static s16 sRockScales[4] = { 24, 15, 10, 5 };
static InitChainEntry sInitChain[] = {
ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
@@ -75,76 +75,83 @@ s32 func_80BD5E00(BgHakaBombwall* this) {
return false;
}
-#ifdef NON_MATCHING
void func_80BD5E6C(BgHakaBombwall* this, PlayState* play) {
- s32 i;
- Vec3f spE0;
- Vec3f spD4;
- Vec3f spC8;
- Vec3f spBC;
- f32 temp_fs0;
- f32 phi_fs1;
+ u32 i;
+ Vec3f pos;
+ Vec3f vel;
+ Vec3f posOffset;
+ Vec3f velOffset;
+ f32 offsetPosX;
+ f32 offsetPosY;
+ s16 scale;
s16 phi_s0;
- s16 gravity;
s16 phi_t0;
+ s16 gravity;
Matrix_Push();
Matrix_RotateYS(this->dyna.actor.shape.rot.y, MTXMODE_NEW);
- temp_fs0 = 0.0f;
- phi_fs1 = 0.0f;
+
+ offsetPosX = 0.0f;
+ offsetPosY = 0.0f;
for (i = 0; i < 30; i++) {
- temp_fs0 += 60.0f + (Rand_ZeroOne() * 20.0f);
- if (temp_fs0 > 75.0f) {
- temp_fs0 -= 150.0f;
+ offsetPosX += 60.0f + (Rand_ZeroOne() * 20.0f);
+
+ if (offsetPosX > 75.0f) {
+ offsetPosX -= 150.0f;
}
- spC8.x = temp_fs0;
- phi_fs1 += 5;
- spC8.y = phi_fs1;
+ offsetPosY += 5;
- spC8.z = (Rand_ZeroOne() * 20.0f) - 10.0f;
+ posOffset.x = offsetPosX;
+ posOffset.y = offsetPosY;
+ posOffset.z = (Rand_ZeroOne() * 20.0f) - 10.0f;
- spBC.x = ((Rand_ZeroOne() - 0.5f) * 5.0f) + (temp_fs0 * (4.0f / 75.0f));
- spBC.y = (Rand_ZeroOne() * 7.0f) - 2.0f;
- spBC.z = (Rand_ZeroOne() * 4.0f) - 2.0f;
+ velOffset.x = ((Rand_ZeroOne() - 0.5f) * 5.0f) + (offsetPosX * (4.0f / 75.0f));
+ velOffset.y = (Rand_ZeroOne() * 7.0f) - 2.0f;
+ velOffset.z = (Rand_ZeroOne() * 4.0f) - 2.0f;
- Matrix_MultVec3f(&spC8, &spE0);
- Matrix_MultVec3f(&spBC, &spD4);
+ Matrix_MultVec3f(&posOffset, &pos);
+ Matrix_MultVec3f(&velOffset, &vel);
- spE0.x += this->dyna.actor.world.pos.x;
- spE0.y += this->dyna.actor.world.pos.y;
- spE0.z += this->dyna.actor.world.pos.z;
+ pos.x += this->dyna.actor.world.pos.x;
+ pos.y += this->dyna.actor.world.pos.y;
+ pos.z += this->dyna.actor.world.pos.z;
+
+ //! FAKE
+ if (1) {}
if ((i & 3) == 0) {
phi_s0 = 32;
- func_800BBFB0(play, &spE0, 60.0f, 2, 100, 120, 1);
+ func_800BBFB0(play, &pos, 60.0f, 2, 100, 120, 1);
} else {
phi_s0 = 64;
}
- if (i % 2 != 0) {
+ if ((i % 2) != 0) {
phi_s0 |= 1;
phi_t0 = 1;
} else {
phi_t0 = 0;
}
- if (D_80BD64CC[i & 3] >= 16) {
+ scale = sRockScales[i & (ARRAY_COUNT(sRockScales) - 1)];
+
+ //! FAKE
+ fake_label:;
+
+ if (scale >= 16) {
gravity = -550;
} else {
gravity = -450;
}
- EffectSsKakera_Spawn(play, &spE0, &spD4, &spE0, gravity, phi_s0, 30, 0, 0, D_80BD64CC[i & 3], phi_t0, 0, 50, -1,
- OBJECT_IKANA_OBJ, object_haka_obj_DL_001680);
+ EffectSsKakera_Spawn(play, &pos, &vel, &pos, gravity, phi_s0, 30, 0, 0, scale, phi_t0, 0, 50, -1,
+ OBJECT_HAKA_OBJ, object_haka_obj_DL_001680);
}
Matrix_Pop();
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Haka_Bombwall/func_80BD5E6C.s")
-#endif
void BgHakaBombwall_Init(Actor* thisx, PlayState* play) {
s32 pad;
@@ -154,7 +161,7 @@ void BgHakaBombwall_Init(Actor* thisx, PlayState* play) {
DynaPolyActor_Init(&this->dyna, 0);
Collider_InitCylinder(play, &this->collider);
if (Flags_GetSwitch(play, BGHAKABOMBWALL_GET_7F(thisx))) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
} else {
DynaPolyActor_LoadMesh(play, &this->dyna, &object_haka_obj_Colheader_000148);
Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit);
@@ -184,21 +191,21 @@ void func_80BD6274(BgHakaBombwall* this, PlayState* play) {
void BgHakaBombwall_SetupPlayCutscene(BgHakaBombwall* this) {
this->dyna.actor.flags |= ACTOR_FLAG_10;
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
this->actionFunc = BgHakaBombwall_PlayCutscene;
}
void BgHakaBombwall_PlayCutscene(BgHakaBombwall* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
func_80BD5E6C(this, play);
this->dyna.actor.draw = NULL;
Flags_SetSwitch(play, BGHAKABOMBWALL_GET_7F(&this->dyna.actor));
SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 0x3C, NA_SE_EV_WALL_BROKEN);
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
BgHakaBombwall_SetupEndCutscene(this);
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
@@ -210,8 +217,8 @@ void BgHakaBombwall_SetupEndCutscene(BgHakaBombwall* this) {
void BgHakaBombwall_EndCutscene(BgHakaBombwall* this, PlayState* play) {
this->csTimer--;
if (this->csTimer <= 0) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
- Actor_MarkForDeath(&this->dyna.actor);
+ CutsceneManager_Stop(this->dyna.actor.csId);
+ Actor_Kill(&this->dyna.actor);
}
}
diff --git a/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.h b/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.h
index 6a37e3625..9e5bd1c43 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.h
+++ b/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.h
@@ -16,6 +16,4 @@ typedef struct BgHakaBombwall {
/* 0x1AC */ s8 csTimer;
} BgHakaBombwall; // size = 0x1B0
-extern const ActorInit Bg_Haka_Bombwall_InitVars;
-
#endif // Z_BG_HAKA_BOMBWALL_H
diff --git a/src/overlays/actors/ovl_Bg_Haka_Curtain/overlay.cfg b/src/overlays/actors/ovl_Bg_Haka_Curtain/overlay.cfg
deleted file mode 100644
index eba48c872..000000000
--- a/src/overlays/actors/ovl_Bg_Haka_Curtain/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Haka_Curtain
-z_bg_haka_curtain.c
diff --git a/src/overlays/actors/ovl_Bg_Haka_Curtain/z_bg_haka_curtain.c b/src/overlays/actors/ovl_Bg_Haka_Curtain/z_bg_haka_curtain.c
index cc90ccd94..dfc176eff 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Curtain/z_bg_haka_curtain.c
+++ b/src/overlays/actors/ovl_Bg_Haka_Curtain/z_bg_haka_curtain.c
@@ -26,7 +26,7 @@ void func_80B6DD9C(BgHakaCurtain* this, PlayState* play);
void func_80B6DEA8(BgHakaCurtain* this, PlayState* play);
void func_80B6DE80(BgHakaCurtain* this);
-const ActorInit Bg_Haka_Curtain_InitVars = {
+ActorInit Bg_Haka_Curtain_InitVars = {
ACTOR_BG_HAKA_CURTAIN,
ACTORCAT_BG,
FLAGS,
@@ -49,7 +49,7 @@ void BgHakaCurtain_Init(Actor* thisx, PlayState* play) {
BgHakaCurtain* this = THIS;
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_haka_obj_Colheader_001588);
if (Flags_GetClear(play, this->dyna.actor.room)) {
func_80B6DE80(this);
@@ -79,12 +79,12 @@ void func_80B6DCEC(BgHakaCurtain* this) {
}
void func_80B6DD00(BgHakaCurtain* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
func_80B6DD5C(this);
return;
}
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
void func_80B6DD5C(BgHakaCurtain* this) {
@@ -123,11 +123,11 @@ void func_80B6DEA8(BgHakaCurtain* this, PlayState* play) {
void BgHakaCurtain_Update(Actor* thisx, PlayState* play) {
BgHakaCurtain* this = THIS;
- CsCmdActorAction* actorAction;
+ CsCmdActorCue* cue;
- if (Cutscene_CheckActorAction(play, 469)) {
- actorAction = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 469)];
- if (actorAction->startFrame == play->csCtx.frames && actorAction->action == 2) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_469)) {
+ cue = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_469)];
+ if ((cue->startFrame == play->csCtx.curFrame) && (cue->id == 2)) {
func_80B6DD80(this);
}
}
diff --git a/src/overlays/actors/ovl_Bg_Haka_Curtain/z_bg_haka_curtain.h b/src/overlays/actors/ovl_Bg_Haka_Curtain/z_bg_haka_curtain.h
index 4b5e564b2..ab5ec0e89 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Curtain/z_bg_haka_curtain.h
+++ b/src/overlays/actors/ovl_Bg_Haka_Curtain/z_bg_haka_curtain.h
@@ -12,6 +12,4 @@ typedef struct BgHakaCurtain {
/* 0x15C */ BgHakaCurtainActionFunc actionFunc;
} BgHakaCurtain; // size = 0x160
-extern const ActorInit Bg_Haka_Curtain_InitVars;
-
#endif // Z_BG_HAKA_CURTAIN_H
diff --git a/src/overlays/actors/ovl_Bg_Haka_Tomb/overlay.cfg b/src/overlays/actors/ovl_Bg_Haka_Tomb/overlay.cfg
deleted file mode 100644
index 3e83b3fb6..000000000
--- a/src/overlays/actors/ovl_Bg_Haka_Tomb/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Haka_Tomb
-z_bg_haka_tomb.c
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 8d48168a6..693fff484 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
@@ -23,7 +23,7 @@ void func_80BD6768(BgHakaTomb* this, PlayState* play);
void BgHakaTomb_SetupDoNothing(BgHakaTomb* this);
void BgHakaTomb_DoNothing(BgHakaTomb* this, PlayState* play);
-const ActorInit Bg_Haka_Tomb_InitVars = {
+ActorInit Bg_Haka_Tomb_InitVars = {
ACTOR_BG_HAKA_TOMB,
ACTORCAT_BG,
FLAGS,
@@ -45,9 +45,9 @@ void BgHakaTomb_Init(Actor* thisx, PlayState* play) {
BgHakaTomb* this = THIS;
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_haka_obj_Colheader_000EE8);
- SubS_FillCutscenesList(&this->dyna.actor, this->cutscenes, ARRAY_COUNT(this->cutscenes));
+ SubS_FillCutscenesList(&this->dyna.actor, this->csIdList, ARRAY_COUNT(this->csIdList));
func_80BD6624(this);
}
@@ -61,15 +61,15 @@ void func_80BD6624(BgHakaTomb* this) {
this->actionFunc = func_80BD66AC;
}
-s32 func_80BD6638(s16* arg0, s16* arg1, s32 arg2) {
+s32 func_80BD6638(s16* csId, s16* csIdList, s32 numCutscenes) {
s32 pad;
s32 retVal = false;
s32 i;
- *arg0 = ActorCutscene_GetCurrentIndex();
- if (*arg0 >= 0) {
- for (i = 0; i < arg2; i++) {
- if (*arg0 == arg1[i]) {
+ *csId = CutsceneManager_GetCurrentCsId();
+ if (*csId >= 0) {
+ for (i = 0; i < numCutscenes; i++) {
+ if (*csId == csIdList[i]) {
retVal = true;
break;
}
@@ -80,12 +80,13 @@ s32 func_80BD6638(s16* arg0, s16* arg1, s32 arg2) {
}
void func_80BD66AC(BgHakaTomb* this, PlayState* play) {
- s16 temp;
+ s16 csId;
if (Flags_GetClear(play, this->dyna.actor.room)) {
this->dyna.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8);
}
- if (!func_80BD6638(&temp, this->cutscenes, 1) && (temp < 0) && Flags_GetClear(play, this->dyna.actor.room)) {
+ if (!func_80BD6638(&csId, this->csIdList, ARRAY_COUNT(this->csIdList)) && (csId < 0) &&
+ Flags_GetClear(play, this->dyna.actor.room)) {
this->dyna.actor.flags |= ACTOR_FLAG_1;
if (this->dyna.actor.isTargeted) {
func_80BD6754(this);
@@ -100,7 +101,7 @@ void func_80BD6754(BgHakaTomb* this) {
}
void func_80BD6768(BgHakaTomb* this, PlayState* play) {
- if (SubS_StartActorCutscene(&this->dyna.actor, this->cutscenes[0], -1, SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) {
+ if (SubS_StartCutscene(&this->dyna.actor, this->csIdList[0], CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) {
BgHakaTomb_SetupDoNothing(this);
}
}
diff --git a/src/overlays/actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.h b/src/overlays/actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.h
index c1cefddc8..fa06a8695 100644
--- a/src/overlays/actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.h
+++ b/src/overlays/actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.h
@@ -10,9 +10,7 @@ typedef void (*BgHakaTombActionFunc)(struct BgHakaTomb*, PlayState*);
typedef struct BgHakaTomb {
/* 0x000 */ DynaPolyActor dyna;
/* 0x15C */ BgHakaTombActionFunc actionFunc;
- /* 0x160 */ s16 cutscenes[1];
+ /* 0x160 */ s16 csIdList[1];
} BgHakaTomb; // size = 0x164
-extern const ActorInit Bg_Haka_Tomb_InitVars;
-
#endif // Z_BG_HAKA_TOMB_H
diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/overlay.cfg b/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/overlay.cfg
deleted file mode 100644
index 9b4288e95..000000000
--- a/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Hakugin_Bombwall
-z_bg_hakugin_bombwall.c
diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/z_bg_hakugin_bombwall.c b/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/z_bg_hakugin_bombwall.c
index 37a232bc5..99a5a759c 100644
--- a/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/z_bg_hakugin_bombwall.c
+++ b/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/z_bg_hakugin_bombwall.c
@@ -26,7 +26,7 @@ void func_80ABCCE4(BgHakuginBombwall* this, PlayState* play);
void func_80ABCD98(BgHakuginBombwall* this, PlayState* play);
void func_80ABCE60(BgHakuginBombwall* this, PlayState* play);
-const ActorInit Bg_Hakugin_Bombwall_InitVars = {
+ActorInit Bg_Hakugin_Bombwall_InitVars = {
ACTOR_BG_HAKUGIN_BOMBWALL,
ACTORCAT_BG,
FLAGS,
@@ -317,7 +317,7 @@ void BgHakuginBombwall_Init(Actor* thisx, PlayState* play) {
Collider_InitCylinder(play, &this->collider);
if (Flags_GetSwitch(play, BGHAKUGIN_BOMBWALL_SWITCHFLAG(&this->dyna.actor))) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
@@ -369,7 +369,7 @@ s32 func_80ABCC00(BgHakuginBombwall* this, PlayState* play) {
return true;
}
}
- } else if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ } else if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 50, NA_SE_EV_WALL_BROKEN);
return true;
}
@@ -382,7 +382,7 @@ void func_80ABCCE4(BgHakuginBombwall* this, PlayState* play) {
if (ptr->unk_20(this, play)) {
this->dyna.actor.flags |= ACTOR_FLAG_10;
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
this->actionFunc = func_80ABCD98;
} else {
this->collider.base.acFlags &= ~AC_HIT;
@@ -393,18 +393,18 @@ void func_80ABCCE4(BgHakuginBombwall* this, PlayState* play) {
void func_80ABCD98(BgHakuginBombwall* this, PlayState* play) {
s32 pad;
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
BgHakuginBombwallStruct* ptr = &D_80ABCFC0[BGHAKUGIN_BOMBWALL_100(&this->dyna.actor)];
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
ptr->unk_24(this, play);
this->dyna.actor.draw = NULL;
this->unk_1AC = 20;
Flags_SetSwitch(play, BGHAKUGIN_BOMBWALL_SWITCHFLAG(&this->dyna.actor));
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->actionFunc = func_80ABCE60;
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
@@ -413,8 +413,8 @@ void func_80ABCE60(BgHakuginBombwall* this, PlayState* play) {
this->unk_1AC--;
if (this->unk_1AC <= 0) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
- Actor_MarkForDeath(&this->dyna.actor);
+ CutsceneManager_Stop(this->dyna.actor.csId);
+ Actor_Kill(&this->dyna.actor);
} else if (this->unk_1AC == ptr->unk_2C) {
ptr->unk_28(this, play);
}
diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/z_bg_hakugin_bombwall.h b/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/z_bg_hakugin_bombwall.h
index f849b356f..24b04139e 100644
--- a/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/z_bg_hakugin_bombwall.h
+++ b/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/z_bg_hakugin_bombwall.h
@@ -19,6 +19,4 @@ typedef struct BgHakuginBombwall {
/* 0x1AC */ s32 unk_1AC;
} BgHakuginBombwall; // size = 0x1B0
-extern const ActorInit Bg_Hakugin_Bombwall_InitVars;
-
#endif // Z_BG_HAKUGIN_BOMBWALL_H
diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/overlay.cfg b/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/overlay.cfg
deleted file mode 100644
index cc7d95cdc..000000000
--- a/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Hakugin_Elvpole
-z_bg_hakugin_elvpole.c
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 8100c6205..7cd94bd86 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
@@ -18,7 +18,7 @@ void BgHakuginElvpole_Draw(Actor* thisx, PlayState* play);
void func_80ABD92C(BgHakuginElvpole* this, PlayState* play);
-const ActorInit Bg_Hakugin_Elvpole_InitVars = {
+ActorInit Bg_Hakugin_Elvpole_InitVars = {
ACTOR_BG_HAKUGIN_ELVPOLE,
ACTORCAT_BG,
FLAGS,
@@ -68,7 +68,7 @@ void func_80ABD92C(BgHakuginElvpole* this, PlayState* play) {
sp28 = true;
} else if (this->unk_15E > 0) {
if (this->unk_15E == 100) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_STONEDOOR_STOP);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_STONEDOOR_STOP);
}
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y - 120.0f;
//! FAKE:
@@ -83,7 +83,7 @@ void func_80ABD92C(BgHakuginElvpole* this, PlayState* play) {
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y - 320.0f;
Flags_UnsetSwitch(play, BGHAKUGINELVPOLE_GET_SWITCHFLAG(&this->dyna.actor));
this->unk_15E = -1;
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_STONEDOOR_STOP);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_STONEDOOR_STOP);
}
} else if ((BGHAKUGINELVPOLE_GET_SWITCHFLAG(&this->dyna.actor) != 0x7F) &&
Flags_GetSwitch(play, BGHAKUGINELVPOLE_GET_SWITCHFLAG(&this->dyna.actor))) {
@@ -104,15 +104,15 @@ void func_80ABD92C(BgHakuginElvpole* this, PlayState* play) {
this->unk_15C = 0;
}
if (this->unk_160) {
- if (this->dyna.actor.cutscene == -1) {
+ if (this->dyna.actor.csId == CS_ID_NONE) {
this->unk_160 = false;
return;
- } else if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ } else if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
this->unk_160 = false;
return;
}
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.h b/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.h
index b8316a4e6..ace71e7b3 100644
--- a/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.h
+++ b/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.h
@@ -17,6 +17,4 @@ typedef struct BgHakuginElvpole {
/* 0x164 */ BgHakuginElvpoleActionFunc actionFunc;
} BgHakuginElvpole; // size = 0x168
-extern const ActorInit Bg_Hakugin_Elvpole_InitVars;
-
#endif // Z_BG_HAKUGIN_ELVPOLE_H
diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Post/overlay.cfg b/src/overlays/actors/ovl_Bg_Hakugin_Post/overlay.cfg
deleted file mode 100644
index fc47ccb4f..000000000
--- a/src/overlays/actors/ovl_Bg_Hakugin_Post/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Hakugin_Post
-z_bg_hakugin_post.c
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 ec2fd9e9c..a8b6ce702 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
@@ -28,9 +28,9 @@ void func_80A9CE00(BgHakuginPost* this);
void func_80A9CE1C(BgHakuginPost* this, PlayState* play);
void func_80A9D0A0(BgHakuginPost* this);
void func_80A9D0B4(BgHakuginPost* this, PlayState* play);
-void func_80A9D1E0(BgHakuginPost* this, BgHakuginPostFunc unkFunc, f32 arg2, s16 arg3, s16 arg4);
+void func_80A9D1E0(BgHakuginPost* this, BgHakuginPostFunc unkFunc, f32 arg2, s16 csLength, s16 csId);
void func_80A9D260(BgHakuginPost* this, PlayState* play);
-void func_80A9D2C4(BgHakuginPost* this, BgHakuginPostFunc unkFunc, f32 arg2, s16 arg3, s16 arg4);
+void func_80A9D2C4(BgHakuginPost* this, BgHakuginPostFunc unkFunc, f32 arg2, s16 csId, s16 additionalCsId);
void func_80A9D360(BgHakuginPost* this, PlayState* play);
void func_80A9D3E4(BgHakuginPost* this);
void func_80A9D434(BgHakuginPost* this, PlayState* play);
@@ -39,7 +39,7 @@ void func_80A9D61C(Actor* thisx, PlayState* play);
BgHakuginPostColliders D_80A9DDC0;
BgHakuginPostUnkStruct D_80A9E028;
-const ActorInit Bg_Hakugin_Post_InitVars = {
+ActorInit Bg_Hakugin_Post_InitVars = {
ACTOR_BG_HAKUGIN_POST,
ACTORCAT_BG,
FLAGS,
@@ -162,12 +162,12 @@ void func_80A9AFB4(BgHakuginPost* this, PlayState* play, BgHakuginPostUnkStruct*
} else {
unkStruct->unk_0000[i].unk_34 = 1;
}
- unkStruct->unk_0000[i].unk_2A = this->dyna.actor.cutscene;
- unkStruct->unk_0000[i].unk_2C = ActorCutscene_GetAdditionalCutscene(unkStruct->unk_0000[i].unk_2A);
+ unkStruct->unk_0000[i].csId = this->dyna.actor.csId;
+ unkStruct->unk_0000[i].additionalCsId = CutsceneManager_GetAdditionalCsId(unkStruct->unk_0000[i].csId);
} else {
unkStruct->unk_0000[i].unk_34 = 1;
- unkStruct->unk_0000[i].unk_2A = -1;
- unkStruct->unk_0000[i].unk_2C = -1;
+ unkStruct->unk_0000[i].csId = CS_ID_NONE;
+ unkStruct->unk_0000[i].additionalCsId = CS_ID_NONE;
}
unkStruct->unk_0000[i].unk_2F = 1;
@@ -703,13 +703,13 @@ void BgHakuginPost_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.world.rot.z = 0;
this->dyna.actor.shape.rot.x = 0;
this->dyna.actor.shape.rot.z = 0;
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_hakugin_obj_Colheader_00D3B0);
func_80A9B3BC(this, play);
func_80A9CA94(this);
} else {
func_80A9AFB4(this, play, &D_80A9E028);
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
}
@@ -783,7 +783,7 @@ void func_80A9CC84(BgHakuginPost* this) {
void func_80A9CCA0(BgHakuginPost* this, PlayState* play) {
if (this->unk_174 != 0) {
func_80A9D1E0(this, func_80A9CD00, (this->unk_164 - this->dyna.actor.home.pos.y) + 100.0f, 60,
- this->dyna.actor.cutscene);
+ this->dyna.actor.csId);
}
}
@@ -823,7 +823,7 @@ void func_80A9CE1C(BgHakuginPost* this, PlayState* play) {
if (this->unk_170 != 0) {
func_80A9D1E0(this, func_80A9D0A0, (this->unk_164 - this->dyna.actor.home.pos.y) + 100.0f, 0x3C,
- ActorCutscene_GetAdditionalCutscene(this->dyna.actor.cutscene));
+ CutsceneManager_GetAdditionalCsId(this->dyna.actor.csId));
return;
}
@@ -839,12 +839,12 @@ void func_80A9CE1C(BgHakuginPost* this, PlayState* play) {
temp = (s16)(this->dyna.actor.yawTowardsPlayer + 0x58F0);
D_80A9E028.unk_0000[i].unk_28 = ((s16)(player->actor.shape.rot.y - temp) / 3) + temp;
D_80A9E028.unk_0000[i].unk_34 = 2;
- func_800B8E58(player, NA_SE_IT_HAMMER_HIT);
+ Player_PlaySfx(player, NA_SE_IT_HAMMER_HIT);
func_8019F128(NA_SE_EV_SLIDE_DOOR_OPEN);
Flags_SetSwitch(play, D_80A9E028.unk_0000[i].unk_2E);
this->unk_178 = 20;
- func_80A9D2C4(this, func_80A9CE00, D_80A9E028.unk_0000[i].unk_14.y + 50.0f,
- D_80A9E028.unk_0000[i].unk_2A, D_80A9E028.unk_0000[i].unk_2C);
+ func_80A9D2C4(this, func_80A9CE00, D_80A9E028.unk_0000[i].unk_14.y + 50.0f, D_80A9E028.unk_0000[i].csId,
+ D_80A9E028.unk_0000[i].additionalCsId);
break;
}
}
@@ -884,12 +884,12 @@ void func_80A9D0B4(BgHakuginPost* this, PlayState* play) {
}
}
-void func_80A9D1E0(BgHakuginPost* this, BgHakuginPostFunc unkFunc, f32 arg2, s16 arg3, s16 arg4) {
+void func_80A9D1E0(BgHakuginPost* this, BgHakuginPostFunc unkFunc, f32 arg2, s16 csLength, s16 csId) {
this->unkFunc = unkFunc;
- this->unk_184 = arg4;
- this->unk_180 = ActorCutscene_GetLength(arg4);
- if (this->unk_180 < 0) {
- this->unk_180 = arg3;
+ this->csId = csId;
+ this->csLength = CutsceneManager_GetLength(csId);
+ if (this->csLength < 0) {
+ this->csLength = csLength;
}
this->dyna.actor.focus.pos.x = this->dyna.actor.home.pos.x;
this->dyna.actor.focus.pos.y = this->unk_16C + arg2;
@@ -898,22 +898,22 @@ void func_80A9D1E0(BgHakuginPost* this, BgHakuginPostFunc unkFunc, f32 arg2, s16
}
void func_80A9D260(BgHakuginPost* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->unk_184)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_184, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->dyna.actor);
this->unkFunc(this);
} else {
- ActorCutscene_SetIntentToPlay(this->unk_184);
+ CutsceneManager_Queue(this->csId);
}
}
-void func_80A9D2C4(BgHakuginPost* this, BgHakuginPostFunc unkFunc, f32 arg2, s16 arg3, s16 arg4) {
+void func_80A9D2C4(BgHakuginPost* this, BgHakuginPostFunc unkFunc, f32 arg2, s16 csId, s16 additionalCsId) {
this->unkFunc = unkFunc;
- this->unk_184 = arg3;
- this->unk_186 = arg4;
- this->unk_180 = -1;
- this->unk_180 = ActorCutscene_GetLength(arg3);
- if (this->unk_180 < 0) {
- this->unk_180 = 15;
+ this->csId = csId;
+ this->additionalCsId = additionalCsId;
+ this->csLength = -1;
+ this->csLength = CutsceneManager_GetLength(csId);
+ if (this->csLength < 0) {
+ this->csLength = 15;
}
this->dyna.actor.focus.pos.x = this->dyna.actor.home.pos.x;
this->dyna.actor.focus.pos.y = this->unk_16C + arg2;
@@ -922,32 +922,32 @@ void func_80A9D2C4(BgHakuginPost* this, BgHakuginPostFunc unkFunc, f32 arg2, s16
}
void func_80A9D360(BgHakuginPost* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->unk_184)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_184, &this->dyna.actor);
- if (this->unk_186 >= 0) {
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->dyna.actor);
+ if (this->additionalCsId >= 0) {
func_80A9D3E4(this);
} else {
this->unkFunc(this);
}
} else {
- ActorCutscene_SetIntentToPlay(this->unk_184);
+ CutsceneManager_Queue(this->csId);
}
}
void func_80A9D3E4(BgHakuginPost* this) {
- this->unk_182 = ActorCutscene_GetLength(this->unk_186);
- if (this->unk_182 < 0) {
- this->unk_182 = 30;
+ this->additionalCsLength = CutsceneManager_GetLength(this->additionalCsId);
+ if (this->additionalCsLength < 0) {
+ this->additionalCsLength = 30;
}
this->actionFunc = func_80A9D434;
}
void func_80A9D434(BgHakuginPost* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->unk_186) != 0) {
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_186, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->additionalCsId)) {
+ CutsceneManager_StartWithPlayerCs(this->additionalCsId, &this->dyna.actor);
this->unkFunc(this);
} else {
- ActorCutscene_SetIntentToPlay(this->unk_186);
+ CutsceneManager_Queue(this->additionalCsId);
}
}
@@ -956,17 +956,17 @@ void BgHakuginPost_Update(Actor* thisx, PlayState* play) {
f32 temp;
func_80A9B46C(this, play);
- if ((this->unk_180 >= 0) && ((this->actionFunc != func_80A9D260) || (this->actionFunc != func_80A9D360))) {
- this->unk_180--;
- if (this->unk_180 < 0) {
- ActorCutscene_Stop(this->unk_184);
+ if ((this->csLength >= 0) && ((this->actionFunc != func_80A9D260) || (this->actionFunc != func_80A9D360))) {
+ this->csLength--;
+ if (this->csLength < 0) {
+ CutsceneManager_Stop(this->csId);
}
}
- if ((this->unk_182 >= 0) && (this->actionFunc != func_80A9D434)) {
- this->unk_182--;
- if (this->unk_182 < 0) {
- ActorCutscene_Stop(this->unk_186);
+ if ((this->additionalCsLength >= 0) && (this->actionFunc != func_80A9D434)) {
+ this->additionalCsLength--;
+ if (this->additionalCsLength < 0) {
+ CutsceneManager_Stop(this->additionalCsId);
}
}
diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.h b/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.h
index 8e702a006..4797a684a 100644
--- a/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.h
+++ b/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.h
@@ -19,8 +19,8 @@ typedef struct {
/* 0x20 */ f32 unk_20;
/* 0x24 */ f32 unk_24;
/* 0x28 */ s16 unk_28;
- /* 0x2A */ s16 unk_2A;
- /* 0x2C */ s16 unk_2C;
+ /* 0x2A */ s16 csId;
+ /* 0x2C */ s16 additionalCsId;
/* 0x2E */ u8 unk_2E;
/* 0x2F */ u8 unk_2F;
/* 0x30 */ s8 unk_30;
@@ -64,12 +64,10 @@ typedef struct BgHakuginPost {
/* 0x178 */ s8 unk_178;
/* 0x179 */ s8 unk_179;
/* 0x17C */ BgHakuginPostFunc unkFunc;
- /* 0x180 */ s16 unk_180;
- /* 0x182 */ s16 unk_182;
- /* 0x184 */ s16 unk_184;
- /* 0x186 */ s16 unk_186;
+ /* 0x180 */ s16 csLength;
+ /* 0x182 */ s16 additionalCsLength;
+ /* 0x184 */ s16 csId;
+ /* 0x186 */ s16 additionalCsId;
} BgHakuginPost; // size = 0x188
-extern const ActorInit Bg_Hakugin_Post_InitVars;
-
#endif // Z_BG_HAKUGIN_POST_H
diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Switch/overlay.cfg b/src/overlays/actors/ovl_Bg_Hakugin_Switch/overlay.cfg
deleted file mode 100644
index 3887196c7..000000000
--- a/src/overlays/actors/ovl_Bg_Hakugin_Switch/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Hakugin_Switch
-z_bg_hakugin_switch.c
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 0498dc2ee..c7fa3d69e 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
@@ -38,7 +38,7 @@ void func_80B165E0(BgHakuginSwitch* this, PlayState* play);
u32 D_80B16AF0;
-const ActorInit Bg_Hakugin_Switch_InitVars = {
+ActorInit Bg_Hakugin_Switch_InitVars = {
ACTOR_BG_HAKUGIN_SWITCH,
ACTORCAT_SWITCH,
FLAGS,
@@ -102,7 +102,7 @@ static InitChainEntry sInitChain2[] = {
void func_80B15790(BgHakuginSwitch* this, u16 sfxId) {
if (this->unk_1B2 <= 0) {
- Actor_PlaySfxAtPos(&this->dyna.actor, sfxId);
+ Actor_PlaySfx(&this->dyna.actor, sfxId);
}
}
@@ -126,7 +126,7 @@ void BgHakuginSwitch_Init(Actor* thisx, PlayState* play) {
sp30 = false;
}
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_goronswitch_Colheader_0005C8);
Collider_InitCylinder(play, &this->collider);
@@ -143,12 +143,12 @@ void BgHakuginSwitch_Init(Actor* thisx, PlayState* play) {
this->collider.dim.yShift = 0x1D;
this->unk_1A8 = object_goronswitch_DL_000268;
- this->unk_1B8 = this->dyna.actor.cutscene;
+ this->csId = this->dyna.actor.csId;
if (sp34 == 0) {
- this->unk_1BA = -1;
+ this->additionalCsId = CS_ID_NONE;
} else {
- this->unk_1BA = ActorCutscene_GetAdditionalCutscene(this->unk_1B8);
+ this->additionalCsId = CutsceneManager_GetAdditionalCsId(this->csId);
}
if (sp30) {
@@ -166,8 +166,8 @@ void BgHakuginSwitch_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->dyna.actor, sInitChain2);
this->unk_1A8 = D_80B1688C[sp34].unk_10;
- this->unk_1B8 = this->dyna.actor.cutscene;
- this->unk_1BA = ActorCutscene_GetAdditionalCutscene(this->unk_1B8);
+ this->csId = this->dyna.actor.csId;
+ this->additionalCsId = CutsceneManager_GetAdditionalCsId(this->csId);
if (sp30 == sp28) {
func_80B15F3C(this, play);
@@ -186,9 +186,9 @@ void BgHakuginSwitch_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->collider);
}
-void func_80B15A4C(BgHakuginSwitch* this, BgHakuginSwitchUnkFunc func, s32 arg2) {
+void func_80B15A4C(BgHakuginSwitch* this, BgHakuginSwitchUnkFunc func, s32 csId) {
this->unk_1B4 = func;
- this->unk_1BC = arg2;
+ this->curCsId = csId;
this->actionFunc = func_80B15A68;
}
@@ -197,14 +197,14 @@ void func_80B15A68(BgHakuginSwitch* this, PlayState* play) {
BgHakuginSwitchStruct* s = &D_80B1688C[BGHAKUGINSWITCH_GET_7(&this->dyna.actor)];
s32 sp18 = !(s->unk_14 & 0x40);
- if (ActorCutscene_GetCanPlayNext(this->unk_1BC)) {
+ if (CutsceneManager_IsNext(this->curCsId)) {
if (sp18) {
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_1BC, &this->dyna.actor);
+ CutsceneManager_StartWithPlayerCs(this->curCsId, &this->dyna.actor);
this->unk_1BF = 40;
}
this->unk_1B4(this, play);
} else if (sp18) {
- ActorCutscene_SetIntentToPlay(this->unk_1BC);
+ CutsceneManager_Queue(this->curCsId);
}
}
@@ -244,7 +244,7 @@ void func_80B15B74(BgHakuginSwitch* this, PlayState* play) {
if (sp34) {
this->collider.base.acFlags &= ~AC_HIT;
- if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
sp24 = true;
sp20 = sp28;
}
@@ -281,7 +281,7 @@ void func_80B15B74(BgHakuginSwitch* this, PlayState* play) {
D_80B16AF0 = play->gameplayFrames;
if (sp38->unk_14 & 0x10) {
- func_80B15A4C(this, func_80B15E0C, this->unk_1B8);
+ func_80B15A4C(this, func_80B15E0C, this->csId);
} else {
func_80B15E0C(this, play);
}
@@ -306,7 +306,7 @@ void func_80B15E78(BgHakuginSwitch* this, PlayState* play) {
BgHakuginSwitchStruct* sp20 = &D_80B1688C[BGHAKUGINSWITCH_GET_7(&this->dyna.actor)];
if (Math_StepToF(&this->dyna.actor.world.pos.y, sp20->unk_4 + this->dyna.actor.home.pos.y, sp20->unk_C)) {
- if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
Rumble_Request(this->dyna.actor.xyzDistToPlayerSq, 120, 20, 10);
}
func_80B15F3C(this, play);
@@ -343,7 +343,7 @@ void func_80B15F88(BgHakuginSwitch* this, PlayState* play) {
if (phi_a0 != phi_v1) {
if ((sp18->unk_14 & 0xFF) & 0x20) {
if (D_80B16AF0 < play->gameplayFrames) {
- func_80B15A4C(this, func_80B1606C, this->unk_1BA);
+ func_80B15A4C(this, func_80B1606C, this->additionalCsId);
}
} else {
func_80B1606C(this, play);
@@ -372,16 +372,16 @@ void func_80B160DC(BgHakuginSwitch* this, PlayState* play) {
}
}
-void func_80B16180(BgHakuginSwitch* this, BgHakuginSwitchUnkFunc func, s32 arg2, s32 arg3) {
+void func_80B16180(BgHakuginSwitch* this, BgHakuginSwitchUnkFunc func, s32 arg2, s32 csId) {
this->unk_1B4 = func;
this->unk_1BE = arg2;
- this->unk_1BC = arg3;
+ this->curCsId = csId;
this->actionFunc = func_80B161A0;
}
void func_80B161A0(BgHakuginSwitch* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->unk_1BC)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_1BC, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->curCsId)) {
+ CutsceneManager_StartWithPlayerCs(this->curCsId, &this->dyna.actor);
if (this->unk_1BE != 0) {
Flags_SetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor));
} else {
@@ -390,7 +390,7 @@ void func_80B161A0(BgHakuginSwitch* this, PlayState* play) {
this->unk_1BF = 50;
this->unk_1B4(this, play);
} else {
- ActorCutscene_SetIntentToPlay(this->unk_1BC);
+ CutsceneManager_Queue(this->curCsId);
}
}
@@ -413,7 +413,7 @@ void func_80B162AC(BgHakuginSwitch* this, PlayState* play) {
if (sp34) {
this->collider.base.acFlags &= ~AC_HIT;
- if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
sp24 = true;
sp28 = true;
}
@@ -427,7 +427,7 @@ void func_80B162AC(BgHakuginSwitch* this, PlayState* play) {
if (sp24) {
if (sp28) {
- func_80B16180(this, func_80B163C4, 1, this->unk_1B8);
+ func_80B16180(this, func_80B163C4, 1, this->csId);
} else {
func_80B163C4(this, play);
}
@@ -446,7 +446,7 @@ void func_80B163C4(BgHakuginSwitch* this, PlayState* play) {
void func_80B16400(BgHakuginSwitch* this, PlayState* play) {
if (Math_StepToF(&this->dyna.actor.world.pos.y,
(this->dyna.actor.home.pos.y + 2.0f) - (1800.0f * this->dyna.actor.scale.y), 10.0f)) {
- if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
Rumble_Request(this->dyna.actor.xyzDistToPlayerSq, 120, 20, 10);
}
func_80B16494(this, play);
@@ -466,7 +466,7 @@ void func_80B16494(BgHakuginSwitch* this, PlayState* play) {
void func_80B16520(BgHakuginSwitch* this, PlayState* play) {
if (!Flags_GetSwitch(play, BGHAKUGINSWITCH_GET_SWITCHFLAG(&this->dyna.actor))) {
if (BGHAKUGINSWITCH_GET_7(&this->dyna.actor) == BGHAKUGINSWITCH_GET_7_1) {
- func_80B16180(this, func_80B165A0, 0, this->unk_1BA);
+ func_80B16180(this, func_80B165A0, 0, this->additionalCsId);
} else {
func_80B165A0(this, play);
}
@@ -498,7 +498,7 @@ void BgHakuginSwitch_Update(Actor* thisx, PlayState* play) {
if ((this->actionFunc != func_80B15A68) && (this->actionFunc != func_80B161A0)) {
this->unk_1BF--;
if (this->unk_1BF == 0) {
- ActorCutscene_Stop(this->unk_1BC);
+ CutsceneManager_Stop(this->curCsId);
}
}
}
@@ -510,8 +510,8 @@ void BgHakuginSwitch_Update(Actor* thisx, PlayState* play) {
if (this->unk_1C0 != 0) {
f32 phi_f0;
- if (DynaPolyActor_IsInSwitchPressedState(&this->dyna)) {
- if (DynaPolyActor_IsInHeavySwitchPressedState(&this->dyna)) {
+ if (DynaPolyActor_IsSwitchPressed(&this->dyna)) {
+ if (DynaPolyActor_IsHeavySwitchPressed(&this->dyna)) {
phi_f0 = (sp24 - -10.0f) * -0.21f;
} else {
phi_f0 = (sp24 - -3.0f) * -0.08f;
diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.h b/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.h
index 74757f836..caf3c2f65 100644
--- a/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.h
+++ b/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.h
@@ -22,9 +22,9 @@ typedef struct BgHakuginSwitch {
/* 0x1B0 */ s16 unk_1B0;
/* 0x1B2 */ s8 unk_1B2;
/* 0x1B4 */ BgHakuginSwitchUnkFunc unk_1B4;
- /* 0x1B8 */ s16 unk_1B8;
- /* 0x1BA */ s16 unk_1BA;
- /* 0x1BC */ s16 unk_1BC;
+ /* 0x1B8 */ s16 csId;
+ /* 0x1BA */ s16 additionalCsId;
+ /* 0x1BC */ s16 curCsId;
/* 0x1BE */ s8 unk_1BE;
/* 0x1BF */ s8 unk_1BF;
/* 0x1C0 */ s8 unk_1C0;
@@ -32,6 +32,4 @@ typedef struct BgHakuginSwitch {
/* 0x1C8 */ f32 unk_1C8;
} BgHakuginSwitch; // size = 0x1CC
-extern const ActorInit Bg_Hakugin_Switch_InitVars;
-
#endif // Z_BG_HAKUGIN_SWITCH_H
diff --git a/src/overlays/actors/ovl_Bg_Icefloe/overlay.cfg b/src/overlays/actors/ovl_Bg_Icefloe/overlay.cfg
deleted file mode 100644
index f8da71e62..000000000
--- a/src/overlays/actors/ovl_Bg_Icefloe/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Icefloe
-z_bg_icefloe.c
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 e64cbef70..27e5d2fee 100644
--- a/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.c
+++ b/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.c
@@ -23,7 +23,7 @@ void func_80AC4D2C(BgIcefloe* this, PlayState* play);
void func_80AC4C34(BgIcefloe* this, PlayState* play);
void func_80AC4CF0(BgIcefloe* this);
-const ActorInit Bg_Icefloe_InitVars = {
+ActorInit Bg_Icefloe_InitVars = {
ACTOR_BG_ICEFLOE,
ACTORCAT_BG,
FLAGS,
@@ -86,7 +86,7 @@ void func_80AC4A80(BgIcefloe* this, PlayState* play) {
this->timer = 20;
SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, &this->dyna.actor.world.pos, &this->dyna.actor.projectedPos,
&this->dyna.actor.projectedW);
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_ICE_STAND_APPEAR);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_ICE_STAND_APPEAR);
this->actionFunc = BgIcefloe_Grow;
}
@@ -133,7 +133,7 @@ void func_80AC4C34(BgIcefloe* this, PlayState* play) {
void func_80AC4CF0(BgIcefloe* this) {
this->timer = 50;
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_ICE_MELT_LEVEL);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_ICE_MELT_LEVEL);
this->actionFunc = func_80AC4D2C;
}
@@ -158,7 +158,7 @@ void func_80AC4D2C(BgIcefloe* this, PlayState* play) {
}
this->dyna.actor.scale.y -= 0.0026f;
if (this->dyna.actor.scale.y <= 0.0f) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
}
diff --git a/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.h b/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.h
index 91c007d26..0278089cf 100644
--- a/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.h
+++ b/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.h
@@ -13,6 +13,4 @@ typedef struct BgIcefloe {
/* 0x160 */ s32 timer;
} BgIcefloe; // size = 0x164
-extern const ActorInit Bg_Icefloe_InitVars;
-
#endif // Z_BG_ICEFLOE_H
diff --git a/src/overlays/actors/ovl_Bg_Icicle/overlay.cfg b/src/overlays/actors/ovl_Bg_Icicle/overlay.cfg
deleted file mode 100644
index 88c4deec0..000000000
--- a/src/overlays/actors/ovl_Bg_Icicle/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Icicle
-z_bg_icicle.c
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 aec62ce15..740d807d8 100644
--- a/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.c
+++ b/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.c
@@ -42,7 +42,7 @@ static ColliderCylinderInit sCylinderInit = {
{ 13, 120, 0, { 0, 0, 0 } },
};
-const ActorInit Bg_Icicle_InitVars = {
+ActorInit Bg_Icicle_InitVars = {
ACTOR_BG_ICICLE,
ACTORCAT_PROP,
FLAGS,
@@ -142,7 +142,7 @@ void BgIcicle_Shiver(BgIcicle* this, PlayState* play) {
}
if (!(this->shiverTimer % 4)) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_ICE_SWING);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_ICE_SWING);
}
if (this->shiverTimer == 0) {
@@ -150,7 +150,7 @@ void BgIcicle_Shiver(BgIcicle* this, PlayState* play) {
this->dyna.actor.world.pos.z = this->dyna.actor.home.pos.z;
CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->actionFunc = BgIcicle_Fall;
} else {
rand = Rand_ZeroOne();
@@ -163,9 +163,9 @@ void BgIcicle_Shiver(BgIcicle* this, PlayState* play) {
}
void BgIcicle_Fall(BgIcicle* this, PlayState* play) {
- if ((this->collider.base.atFlags & AT_HIT) || (this->dyna.actor.bgCheckFlags & 1)) {
+ if ((this->collider.base.atFlags & AT_HIT) || (this->dyna.actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
this->collider.base.atFlags &= ~AT_HIT;
- this->dyna.actor.bgCheckFlags &= ~1;
+ this->dyna.actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
if (this->dyna.actor.world.pos.y < this->dyna.actor.floorHeight) {
this->dyna.actor.world.pos.y = this->dyna.actor.floorHeight;
@@ -175,16 +175,15 @@ void BgIcicle_Fall(BgIcicle* this, PlayState* play) {
if (this->dyna.actor.params == ICICLE_STALACTITE_REGROW) {
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y + 120.0f;
- func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->actionFunc = BgIcicle_Regrow;
} else {
- Actor_MarkForDeath(&this->dyna.actor);
- return;
+ Actor_Kill(&this->dyna.actor);
}
} else {
Actor_MoveWithGravity(&this->dyna.actor);
this->dyna.actor.world.pos.y += 40.0f;
- Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
this->dyna.actor.world.pos.y -= 40.0f;
CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
}
@@ -217,7 +216,7 @@ void BgIcicle_UpdateAttacked(BgIcicle* this, PlayState* play) {
if (this->dyna.actor.params == ICICLE_STALACTITE_REGROW) {
BgIcicle_Break(this, play, 40.0f);
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y + 120.0f;
- func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->actionFunc = BgIcicle_Regrow;
return;
}
@@ -225,7 +224,7 @@ void BgIcicle_UpdateAttacked(BgIcicle* this, PlayState* play) {
BgIcicle_Break(this, play, 40.0f);
}
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
}
diff --git a/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.h b/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.h
index 20450f929..b8f432458 100644
--- a/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.h
+++ b/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.h
@@ -23,6 +23,4 @@ typedef struct BgIcicle {
/* 0x164 */ ColliderCylinder collider;
} BgIcicle; // size = 0x1B0
-extern const ActorInit Bg_Icicle_InitVars;
-
#endif // Z_BG_ICICLE_H
diff --git a/src/overlays/actors/ovl_Bg_Ikana_Block/overlay.cfg b/src/overlays/actors/ovl_Bg_Ikana_Block/overlay.cfg
deleted file mode 100644
index af448437b..000000000
--- a/src/overlays/actors/ovl_Bg_Ikana_Block/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Ikana_Block
-z_bg_ikana_block.c
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 0a4c31d12..401d3543e 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
@@ -25,7 +25,7 @@ void func_80B7F360(BgIkanaBlock* this);
void func_80B7F398(BgIkanaBlock* this, PlayState* play);
void func_80B7F564(Actor* thisx, PlayState* play);
-const ActorInit Bg_Ikana_Block_InitVars = {
+ActorInit Bg_Ikana_Block_InitVars = {
ACTOR_BG_IKANA_BLOCK,
ACTORCAT_BG,
FLAGS,
@@ -184,9 +184,9 @@ void BgIkanaBlock_Init(Actor* thisx, PlayState* play) {
BgIkanaBlock* this = THIS;
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, &gameplay_dangeon_keep_Colheader_007498);
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->unk_15C = Lib_SegmentedToVirtual(gameplay_dangeon_keep_Matanimheader_01B370);
this->unk_174 = this->dyna.actor.shape.rot;
func_80B7ED54(this);
@@ -211,7 +211,7 @@ void func_80B7F034(BgIkanaBlock* this, PlayState* play) {
}
if (func_80B7EEB4(this, play)) {
- func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->dyna.actor.draw = func_80B7F564;
func_80B7F0A4(this);
}
@@ -240,7 +240,7 @@ void func_80B7F0D0(BgIkanaBlock* this, PlayState* play) {
if ((sp24 != 2) && (this->unk_17A & (0x8 | 0x4 | 0x2 | 0x1))) {
Player* player = GET_PLAYER(play);
- player->stateFlags2 &= ~0x10;
+ player->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
}
@@ -294,10 +294,10 @@ void func_80B7F290(BgIkanaBlock* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (!func_80B7EB94(this, play)) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
}
- player->stateFlags2 &= ~0x10;
+ player->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
if (func_80B7EDC4(this, play)) {
@@ -334,10 +334,10 @@ void func_80B7F398(BgIkanaBlock* this, PlayState* play) {
this->dyna.actor.world.pos.y += this->dyna.actor.velocity.y;
if (func_80B7EE70(this, play)) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
- Actor_PlaySfxAtPos(&this->dyna.actor,
- SurfaceType_GetSfx(&play->colCtx, this->dyna.actor.floorPoly, this->dyna.actor.floorBgId) +
- SFX_FLAG);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
+ Actor_PlaySfx(&this->dyna.actor,
+ NA_SE_PL_WALK_GROUND + SurfaceType_GetSfxOffset(&play->colCtx, this->dyna.actor.floorPoly,
+ this->dyna.actor.floorBgId));
func_80B7F0A4(this);
}
}
@@ -358,13 +358,13 @@ void BgIkanaBlock_Update(Actor* thisx, PlayState* play) {
if (this->unk_17E != 0) {
if (this->unk_17F > 0) {
this->unk_17F--;
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ CutsceneManager_Stop(this->dyna.actor.csId);
this->unk_17E = 0;
- } else if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ } else if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
this->unk_17F = 30;
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
}
diff --git a/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.h b/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.h
index 5c5281911..416a1c2dc 100644
--- a/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.h
+++ b/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.h
@@ -24,6 +24,4 @@ typedef struct BgIkanaBlock {
/* 0x17F */ s8 unk_17F;
} BgIkanaBlock; // size = 0x180
-extern const ActorInit Bg_Ikana_Block_InitVars;
-
#endif // Z_BG_IKANA_BLOCK_H
diff --git a/src/overlays/actors/ovl_Bg_Ikana_Bombwall/overlay.cfg b/src/overlays/actors/ovl_Bg_Ikana_Bombwall/overlay.cfg
deleted file mode 100644
index 4888c9532..000000000
--- a/src/overlays/actors/ovl_Bg_Ikana_Bombwall/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Ikana_Bombwall
-z_bg_ikana_bombwall.c
diff --git a/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.c b/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.c
index 43627317e..edcda4b37 100644
--- a/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.c
+++ b/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.c
@@ -25,7 +25,7 @@ void func_80BD503C(BgIkanaBombwall* this, PlayState* play);
void func_80BD5118(BgIkanaBombwall* this);
void func_80BD5134(BgIkanaBombwall* this, PlayState* play);
-const ActorInit Bg_Ikana_Bombwall_InitVars = {
+ActorInit Bg_Ikana_Bombwall_InitVars = {
ACTOR_BG_IKANA_BOMBWALL,
ACTORCAT_BG,
FLAGS,
@@ -96,50 +96,53 @@ Gfx* D_80BD52E0[] = {
object_ikana_obj_DL_000048,
};
-#ifdef NON_MATCHING
void func_80BD4720(BgIkanaBombwall* this, PlayState* play) {
s32 i;
- Vec3f spE0;
- Vec3f spD4;
- Vec3f spC8;
- Vec3f spBC;
- f32 temp_fs0;
- f32 phi_fs1;
+ Vec3f pos;
+ Vec3f vel;
+ Vec3f posOffset;
+ Vec3f velOffset;
+ f32 offsetPosX;
+ f32 offsetPosY;
+ s16 scale;
s16 phi_s0;
- s16 temp;
s16 phi_t0;
+ s16 gravity;
Matrix_Push();
Matrix_RotateYS(this->dyna.actor.shape.rot.y, MTXMODE_NEW);
- temp_fs0 = 0.0f;
- phi_fs1 = 0.0f;
+ offsetPosX = 0.0f;
+ offsetPosY = 0.0f;
for (i = 0; i < 30; i++) {
- temp_fs0 += 60.0f + (Rand_ZeroOne() * 20.0f);
- if (temp_fs0 > 75.0f) {
- temp_fs0 -= 150.0f;
+ offsetPosX += 60.0f + (Rand_ZeroOne() * 20.0f);
+ if (offsetPosX > 75.0f) {
+ offsetPosX -= 150.0f;
}
- spC8.x = temp_fs0;
- phi_fs1 += 5;
- spC8.y = phi_fs1;
+ offsetPosY += 5;
- spC8.z = (Rand_ZeroOne() * 20.0f) - 10.0f;
+ posOffset.x = offsetPosX;
+ posOffset.y = offsetPosY;
+ posOffset.z = (Rand_ZeroOne() * 20.0f) - 10.0f;
- spBC.x = ((Rand_ZeroOne() - 0.5f) * 5.0f) + (temp_fs0 * 0.053333335f);
- spBC.y = (Rand_ZeroOne() * 7.0f) - 2.0f;
- spBC.z = (Rand_ZeroOne() * 4.0f) - 2.0f;
+ velOffset.x = ((Rand_ZeroOne() - 0.5f) * 5.0f) + (offsetPosX * (4.0f / 75.0f));
+ velOffset.y = (Rand_ZeroOne() * 7.0f) - 2.0f;
+ velOffset.z = (Rand_ZeroOne() * 4.0f) - 2.0f;
- Matrix_MultVec3f(&spC8, &spE0);
- Matrix_MultVec3f(&spBC, &spD4);
+ Matrix_MultVec3f(&posOffset, &pos);
+ Matrix_MultVec3f(&velOffset, &vel);
- spE0.x += this->dyna.actor.world.pos.x;
- spE0.y += this->dyna.actor.world.pos.y;
- spE0.z += this->dyna.actor.world.pos.z;
+ pos.x += this->dyna.actor.world.pos.x;
+ pos.y += this->dyna.actor.world.pos.y;
+ pos.z += this->dyna.actor.world.pos.z;
+
+ //! FAKE
+ if (1) {}
if ((i & 3) == 0) {
phi_s0 = 32;
- func_800BBFB0(play, &spE0, 50.0f, 2, 100, 120, 1);
+ func_800BBFB0(play, &pos, 50.0f, 2, 100, 120, 1);
} else {
phi_s0 = 64;
}
@@ -151,56 +154,57 @@ void func_80BD4720(BgIkanaBombwall* this, PlayState* play) {
phi_t0 = 0;
}
- if (D_80BD52C8[i & 3] >= 16) {
- temp = -550;
+ scale = D_80BD52C8[i & (ARRAY_COUNT(D_80BD52C8) - 1)];
+
+ //! FAKE
+ fake_label:;
+
+ if (scale >= 16) {
+ gravity = -550;
} else {
- temp = -450;
+ gravity = -450;
}
- EffectSsKakera_Spawn(play, &spE0, &spD4, &spE0, temp, phi_s0, 30, 0, 0, D_80BD52C8[i & 3], phi_t0, 0, 50, -1,
+ EffectSsKakera_Spawn(play, &pos, &vel, &pos, gravity, phi_s0, 30, 0, 0, scale, phi_t0, 0, 50, -1,
OBJECT_IKANA_OBJ, object_ikana_obj_DL_000288);
}
Matrix_Pop();
}
-#else
-void func_80BD4720(BgIkanaBombwall* this, PlayState* play);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Ikana_Bombwall/func_80BD4720.s")
-#endif
void func_80BD4A14(BgIkanaBombwall* this, PlayState* play) {
s32 i;
- Vec3f spD8;
- Vec3f spCC;
+ Vec3f pos;
+ Vec3f vel;
f32 temp_fs0;
f32 temp_fs1;
f32 temp_fs3;
- s16 temp_v1;
- s16 phi_s2;
- s32 phi_t0;
+ s16 scale;
+ s16 angle;
+ s32 gravity;
s16 phi_v0;
s32 phi_v1;
temp_fs3 = 0.0f;
- for (i = 0, phi_s2 = 0; i < 28; i++, phi_s2 += 0x924) {
+ for (i = 0, angle = 0; i < 28; i++, angle += 0x924) {
temp_fs3 += 20.0f + (Rand_ZeroOne() * 10.0f);
if (temp_fs3 > 60.0f) {
temp_fs3 -= 60.0f;
}
- temp_fs0 = Math_SinS(phi_s2);
- temp_fs1 = Math_CosS(phi_s2);
+ temp_fs0 = Math_SinS(angle);
+ temp_fs1 = Math_CosS(angle);
- spD8.x = (temp_fs0 * temp_fs3) + this->dyna.actor.world.pos.x;
- spD8.y = this->dyna.actor.world.pos.y;
- spD8.z = (temp_fs1 * temp_fs3) + this->dyna.actor.world.pos.z;
+ pos.x = (temp_fs0 * temp_fs3) + this->dyna.actor.world.pos.x;
+ pos.y = this->dyna.actor.world.pos.y;
+ pos.z = (temp_fs1 * temp_fs3) + this->dyna.actor.world.pos.z;
- spCC.x = ((Rand_ZeroOne() - 0.5f) * 3.0f * temp_fs0) + ((temp_fs0 * temp_fs3) * 0.033333335f);
- spCC.y = (Rand_ZeroOne() * 18.0f) + 4.0f;
- spCC.z = ((Rand_ZeroOne() - 0.5f) * 3.0f * temp_fs1) + ((temp_fs1 * temp_fs3) * 0.033333335f);
+ vel.x = ((Rand_ZeroOne() - 0.5f) * 3.0f * temp_fs0) + ((temp_fs0 * temp_fs3) * (1.0f / 30.0f));
+ vel.y = (Rand_ZeroOne() * 18.0f) + 4.0f;
+ vel.z = ((Rand_ZeroOne() - 0.5f) * 3.0f * temp_fs1) + ((temp_fs1 * temp_fs3) * (1.0f / 30.0f));
- temp_v1 = (Rand_Next() & 3) + (i >> 1) + 6;
+ scale = (Rand_Next() & 3) + (i >> 1) + 6;
if ((i & 3) == 0) {
phi_v0 = 32;
@@ -208,21 +212,21 @@ void func_80BD4A14(BgIkanaBombwall* this, PlayState* play) {
phi_v0 = 64;
}
- if (temp_v1 >= 15) {
+ if (scale >= 15) {
phi_v0 |= 1;
phi_v1 = 1;
- phi_t0 = -550;
+ gravity = -550;
} else {
phi_v1 = 0;
- phi_t0 = -400;
+ gravity = -400;
}
- EffectSsKakera_Spawn(play, &spD8, &spCC, &spD8, phi_t0, phi_v0, 30, 0, 0, temp_v1, phi_v1, 0, 50, -1,
+ EffectSsKakera_Spawn(play, &pos, &vel, &pos, gravity, phi_v0, 30, 0, 0, scale, phi_v1, 0, 50, -1,
OBJECT_IKANA_OBJ, object_ikana_obj_DL_000288);
if ((i & 3) == 0) {
- spD8.y += 30.0f;
- func_800BBFB0(play, &spD8, 50.0f, 2, 70, 110, 1);
+ pos.y += 30.0f;
+ func_800BBFB0(play, &pos, 50.0f, 2, 70, 110, 1);
}
}
}
@@ -231,28 +235,28 @@ void BgIkanaBombwall_Init(Actor* thisx, PlayState* play) {
s32 pad;
BgIkanaBombwall* this = THIS;
s32 sp2C = BGIKANABOMBWALL_GET_100(&this->dyna.actor);
- s32 sp28;
- s32 sp24;
+ CollisionHeader* colHeader;
+ ColliderCylinderInit* cylinderInit;
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
DynaPolyActor_Init(&this->dyna, 0);
Collider_InitCylinder(play, &this->collider);
if (Flags_GetSwitch(play, BGIKANABOMBWALL_GET_SWITCHFLAG(&this->dyna.actor))) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
if (sp2C == 0) {
- sp28 = &object_ikana_obj_Colheader_000488;
- sp24 = &sCylinderInit1;
+ colHeader = &object_ikana_obj_Colheader_000488;
+ cylinderInit = &sCylinderInit1;
} else {
- sp28 = &object_ikana_obj_Colheader_000128;
- sp24 = &sCylinderInit2;
+ colHeader = &object_ikana_obj_Colheader_000128;
+ cylinderInit = &sCylinderInit2;
}
- DynaPolyActor_LoadMesh(play, &this->dyna, sp28);
- Collider_SetCylinder(play, &this->collider, &this->dyna.actor, sp24);
+ DynaPolyActor_LoadMesh(play, &this->dyna, colHeader);
+ Collider_SetCylinder(play, &this->collider, &this->dyna.actor, cylinderInit);
Collider_UpdateCylinder(&this->dyna.actor, &this->collider);
if (sp2C == 0) {
@@ -315,13 +319,13 @@ void func_80BD4F9C(BgIkanaBombwall* this, PlayState* play) {
void func_80BD4FF8(BgIkanaBombwall* this) {
this->dyna.actor.flags |= ACTOR_FLAG_10;
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
this->actionFunc = func_80BD503C;
}
void func_80BD503C(BgIkanaBombwall* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
if (!BGIKANABOMBWALL_GET_100(&this->dyna.actor)) {
func_80BD4720(this, play);
} else {
@@ -331,11 +335,11 @@ void func_80BD503C(BgIkanaBombwall* this, PlayState* play) {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 60, NA_SE_EV_WALL_BROKEN);
Flags_SetSwitch(play, BGIKANABOMBWALL_GET_SWITCHFLAG(&this->dyna.actor));
if (!BGIKANABOMBWALL_GET_100(&this->dyna.actor)) {
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
}
func_80BD5118(this);
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
@@ -348,15 +352,15 @@ void func_80BD5134(BgIkanaBombwall* this, PlayState* play) {
if (!BGIKANABOMBWALL_GET_100(&this->dyna.actor)) {
this->unk_1AC--;
if (this->unk_1AC <= 0) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
- Actor_MarkForDeath(&this->dyna.actor);
+ CutsceneManager_Stop(this->dyna.actor.csId);
+ Actor_Kill(&this->dyna.actor);
}
- } else if (this->dyna.actor.cutscene >= 0) {
- if (ActorCutscene_GetCurrentIndex() != this->dyna.actor.cutscene) {
- Actor_MarkForDeath(&this->dyna.actor);
+ } else if (this->dyna.actor.csId >= 0) {
+ if (CutsceneManager_GetCurrentCsId() != this->dyna.actor.csId) {
+ Actor_Kill(&this->dyna.actor);
}
} else {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
}
diff --git a/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.h b/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.h
index da11bcfea..e9ff850ad 100644
--- a/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.h
+++ b/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.h
@@ -17,6 +17,4 @@ typedef struct BgIkanaBombwall {
/* 0x1AC */ s8 unk_1AC;
} BgIkanaBombwall; // size = 0x1B0
-extern const ActorInit Bg_Ikana_Bombwall_InitVars;
-
#endif // Z_BG_IKANA_BOMBWALL_H
diff --git a/src/overlays/actors/ovl_Bg_Ikana_Dharma/overlay.cfg b/src/overlays/actors/ovl_Bg_Ikana_Dharma/overlay.cfg
deleted file mode 100644
index 13c58ba86..000000000
--- a/src/overlays/actors/ovl_Bg_Ikana_Dharma/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Ikana_Dharma
-z_bg_ikana_dharma.c
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 6c5e85e73..44f81da9c 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
@@ -24,7 +24,7 @@ void BgIkanaDharma_StartCutscene(BgIkanaDharma* this, PlayState* play);
void BgIkanaDharma_SetupWaitForCutsceneToEnd(BgIkanaDharma* this);
void BgIkanaDharma_WaitForCutsceneToEnd(BgIkanaDharma* this, PlayState* play);
-const ActorInit Bg_Ikana_Dharma_InitVars = {
+ActorInit Bg_Ikana_Dharma_InitVars = {
ACTOR_BG_IKANA_DHARMA,
ACTORCAT_BG,
FLAGS,
@@ -115,11 +115,11 @@ void BgIkanaDharma_Init(Actor* thisx, PlayState* play2) {
Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_BG_IKANA_DHARMA, this->dyna.actor.world.pos.x,
segmentY, this->dyna.actor.world.pos.z, this->dyna.actor.shape.rot.x,
this->dyna.actor.shape.rot.y, this->dyna.actor.shape.rot.z,
- BGIKANADHARMA_PARAMS(0, true, 0), this->dyna.actor.cutscene,
- this->dyna.actor.unk20, NULL);
+ BGIKANADHARMA_PARAMS(0, true, 0), this->dyna.actor.csId,
+ this->dyna.actor.halfDaysBits, NULL);
}
- this->dyna.actor.bgCheckFlags |= 1;
+ this->dyna.actor.bgCheckFlags |= BGCHECKFLAG_GROUND;
}
BgIkanaDharma_SetupWaitForHit(this);
@@ -137,7 +137,7 @@ void BgIkanaDharma_Destroy(Actor* thisx, PlayState* play) {
void BgIkanaDharma_SetupWaitForHit(BgIkanaDharma* this) {
this->actionFunc = BgIkanaDharma_WaitForHit;
- this->dyna.actor.speedXZ = 0.0f;
+ this->dyna.actor.speed = 0.0f;
}
void BgIkanaDharma_WaitForHit(BgIkanaDharma* this, PlayState* play) {
@@ -157,8 +157,8 @@ void BgIkanaDharma_WaitForHit(BgIkanaDharma* this, PlayState* play) {
tempAngle1 = BINANG_ADD(this->dyna.actor.yawTowardsPlayer, 0x8000);
tempAngle2 = (BINANG_SUB(player->actor.shape.rot.y, tempAngle1) >> 1);
this->dyna.actor.world.rot.y = tempAngle1 + tempAngle2 + 0xF000;
- this->dyna.actor.speedXZ = 20.0f;
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_DARUMA_VANISH);
+ 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) {
@@ -173,16 +173,16 @@ void BgIkanaDharma_WaitForHit(BgIkanaDharma* this, PlayState* play) {
}
void BgIkanaDharma_SetupStartCutscene(BgIkanaDharma* this) {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
this->actionFunc = BgIkanaDharma_StartCutscene;
}
void BgIkanaDharma_StartCutscene(BgIkanaDharma* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
BgIkanaDharma_SetupWaitForCutsceneToEnd(this);
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
@@ -200,17 +200,18 @@ void BgIkanaDharma_WaitForCutsceneToEnd(BgIkanaDharma* this, PlayState* play) {
sFirstHitBgIkanaDharma = NULL;
}
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ CutsceneManager_Stop(this->dyna.actor.csId);
}
}
- if (Math_StepToF(&this->dyna.actor.scale.y, 0.0f, 1.0f / 300.0f) != 0) {
- Actor_MarkForDeath(&this->dyna.actor);
- } else {
- this->dyna.actor.scale.x = this->dyna.actor.scale.y * 3.0f;
- this->dyna.actor.scale.z = this->dyna.actor.scale.y * 3.0f;
- BgIkanaDharma_SpawnEffects(this, play);
+ if (Math_StepToF(&this->dyna.actor.scale.y, 0.0f, 1.0f / 300.0f)) {
+ Actor_Kill(&this->dyna.actor);
+ return;
}
+
+ this->dyna.actor.scale.x = this->dyna.actor.scale.y * 3.0f;
+ this->dyna.actor.scale.z = this->dyna.actor.scale.y * 3.0f;
+ BgIkanaDharma_SpawnEffects(this, play);
}
void BgIkanaDharma_Update(Actor* thisx, PlayState* play) {
@@ -225,15 +226,15 @@ void BgIkanaDharma_Update(Actor* thisx, PlayState* play) {
actorBelow = DynaPoly_GetActor(&play->colCtx, this->dyna.actor.floorBgId);
if (actorBelow == NULL) {
Actor_MoveWithGravity(&this->dyna.actor);
- Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, 4);
- if (this->dyna.actor.bgCheckFlags & 2) {
+ Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
+ if (this->dyna.actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
s16 quakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_3);
Quake_SetSpeed(quakeIndex, 21536);
Quake_SetQuakeValues(quakeIndex, 4, 0, 0, 0);
Quake_SetCountdown(quakeIndex, 12);
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
}
} else {
if (actorBelow->actor.id == ACTOR_BG_IKANA_DHARMA) {
@@ -249,7 +250,8 @@ void BgIkanaDharma_Update(Actor* thisx, PlayState* play) {
wallCheckRadius = CLAMP_MIN(wallCheckRadius, 2.0f);
Actor_MoveWithGravity(&this->dyna.actor);
- Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 20.0f, wallCheckRadius, 0.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 20.0f, wallCheckRadius, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
}
Actor_SetFocus(&this->dyna.actor, 40.0f);
diff --git a/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.h b/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.h
index 4642a4369..ac1bcadf0 100644
--- a/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.h
+++ b/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.h
@@ -19,6 +19,4 @@ typedef struct BgIkanaDharma {
/* 0x1AC */ s8 cutsceneFramesRemaining;
} BgIkanaDharma; // size = 0x1B0
-extern const ActorInit Bg_Ikana_Dharma_InitVars;
-
#endif // Z_BG_IKANA_DHARMA_H
diff --git a/src/overlays/actors/ovl_Bg_Ikana_Mirror/overlay.cfg b/src/overlays/actors/ovl_Bg_Ikana_Mirror/overlay.cfg
deleted file mode 100644
index d735febc0..000000000
--- a/src/overlays/actors/ovl_Bg_Ikana_Mirror/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Ikana_Mirror
-z_bg_ikana_mirror.c
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 11734b284..5fc28c5a5 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
@@ -26,7 +26,7 @@ void BgIkanaMirror_Wait(BgIkanaMirror* this, PlayState* play);
void BgIkanaMirror_SetupEmitLight(BgIkanaMirror* this);
void BgIkanaMirror_EmitLight(BgIkanaMirror* this, PlayState* play);
-const ActorInit Bg_Ikana_Mirror_InitVars = {
+ActorInit Bg_Ikana_Mirror_InitVars = {
ACTOR_BG_IKANA_MIRROR,
ACTORCAT_PROP,
FLAGS,
@@ -257,8 +257,8 @@ void BgIkanaMirror_Init(Actor* thisx, PlayState* play2) {
}
BgIkanaMirror_SetQuadVertices(this);
- this->lightAbsorptionTexScroll = Lib_SegmentedToVirtual(&gStoneTowerTempleMirrorLightAbsorptionTexAnim);
- this->lightEmissionTexScroll = Lib_SegmentedToVirtual(&gStoneTowerTempleMirrorLightEmissionTexAnim);
+ this->lightAbsorptionTexScroll = Lib_SegmentedToVirtual(gStoneTowerTempleMirrorLightAbsorptionTexAnim);
+ this->lightEmissionTexScroll = Lib_SegmentedToVirtual(gStoneTowerTempleMirrorLightEmissionTexAnim);
BgIkanaMirror_SetupWait(this);
}
diff --git a/src/overlays/actors/ovl_Bg_Ikana_Ray/overlay.cfg b/src/overlays/actors/ovl_Bg_Ikana_Ray/overlay.cfg
deleted file mode 100644
index b091b0a51..000000000
--- a/src/overlays/actors/ovl_Bg_Ikana_Ray/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Ikana_Ray
-z_bg_ikana_ray.c
diff --git a/src/overlays/actors/ovl_Bg_Ikana_Ray/z_bg_ikana_ray.c b/src/overlays/actors/ovl_Bg_Ikana_Ray/z_bg_ikana_ray.c
index f4d964817..6a08ba101 100644
--- a/src/overlays/actors/ovl_Bg_Ikana_Ray/z_bg_ikana_ray.c
+++ b/src/overlays/actors/ovl_Bg_Ikana_Ray/z_bg_ikana_ray.c
@@ -21,7 +21,7 @@ void BgIkanaRay_UpdateCheckForActivation(BgIkanaRay* this, PlayState* play);
void BgIkanaRay_SetActivated(BgIkanaRay* this);
void BgIkanaRay_UpdateActivated(BgIkanaRay* this, PlayState* play);
-const ActorInit Bg_Ikana_Ray_InitVars = {
+ActorInit Bg_Ikana_Ray_InitVars = {
ACTOR_BG_IKANA_RAY,
ACTORCAT_PROP,
FLAGS,
diff --git a/src/overlays/actors/ovl_Bg_Ikana_Ray/z_bg_ikana_ray.h b/src/overlays/actors/ovl_Bg_Ikana_Ray/z_bg_ikana_ray.h
index 9aa4f89d4..79d406fde 100644
--- a/src/overlays/actors/ovl_Bg_Ikana_Ray/z_bg_ikana_ray.h
+++ b/src/overlays/actors/ovl_Bg_Ikana_Ray/z_bg_ikana_ray.h
@@ -16,6 +16,4 @@ typedef struct BgIkanaRay {
/* 0x194 */ BgIkanaRayActionFunc actionFunc;
} BgIkanaRay; // size = 0x198
-extern const ActorInit Bg_Ikana_Ray_InitVars;
-
#endif // Z_BG_IKANA_RAY_H
diff --git a/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/overlay.cfg b/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/overlay.cfg
deleted file mode 100644
index c51c2a598..000000000
--- a/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Ikana_Rotaryroom
-z_bg_ikana_rotaryroom.c
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 fb29ca2bb..7398dbfd9 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
@@ -34,7 +34,7 @@ void func_80B81BA0(Actor* thisx, PlayState* play);
void func_80B81DAC(BgIkanaRotaryroom* this);
void func_80B81DC8(Actor* thisx, PlayState* play);
-const ActorInit Bg_Ikana_Rotaryroom_InitVars = {
+ActorInit Bg_Ikana_Rotaryroom_InitVars = {
ACTOR_BG_IKANA_ROTARYROOM,
ACTORCAT_BG,
FLAGS,
@@ -179,7 +179,7 @@ void func_80B80440(BgIkanaRotaryroom* this, PlayState* play) {
this->unk_204.unk_00 = Actor_SpawnAsChildAndCutscene(
&play->actorCtx, play, ACTOR_BG_IKANA_BLOCK, sp50.x, sp50.y, sp50.z, this->dyna.actor.shape.rot.x,
this->dyna.actor.shape.rot.y, this->dyna.actor.shape.rot.z, -1,
- ActorCutscene_GetAdditionalCutscene(this->dyna.actor.cutscene), this->dyna.actor.unk20, NULL);
+ CutsceneManager_GetAdditionalCsId(this->dyna.actor.csId), this->dyna.actor.halfDaysBits, NULL);
Matrix_Pop();
}
@@ -515,7 +515,7 @@ void func_80B81010(BgIkanaRotaryroom* this, PlayState* play) {
CollisionPoly* sp7C;
s32 sp78;
- if (ActorCutscene_GetCurrentIndex() == this->dyna.actor.cutscene) {
+ if (CutsceneManager_GetCurrentCsId() == this->dyna.actor.csId) {
phi_s7 = true;
for (i = 0; i < ARRAY_COUNT(this->unk_3E0); i++) {
@@ -582,7 +582,7 @@ void func_80B81234(BgIkanaRotaryroom* this, PlayState* play) {
CollisionPoly* sp40;
s32 sp3C;
- if (ActorCutscene_GetCurrentIndex() == this->dyna.actor.cutscene) {
+ if (CutsceneManager_GetCurrentCsId() == this->dyna.actor.csId) {
if (player == NULL) {
return;
}
@@ -646,12 +646,12 @@ void func_80B81234(BgIkanaRotaryroom* this, PlayState* play) {
void func_80B814B8(BgIkanaRotaryroom* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (ActorCutscene_GetCurrentIndex() == this->dyna.actor.cutscene) {
- if (player->actor.bgCheckFlags & 0x100) {
- func_800B8E58(player, NA_SE_VO_LI_DAMAGE_S + player->ageProperties->unk_92);
+ if (CutsceneManager_GetCurrentCsId() == this->dyna.actor.csId) {
+ if (player->actor.bgCheckFlags & BGCHECKFLAG_CRUSHED) {
+ Player_PlaySfx(player, NA_SE_VO_LI_DAMAGE_S + player->ageProperties->voiceSfxIdOffset);
func_80169EFC(&play->state);
- func_800B8E58(player, NA_SE_VO_LI_TAKEN_AWAY + player->ageProperties->unk_92);
- play->unk_18845 = 1;
+ Player_PlaySfx(player, NA_SE_VO_LI_TAKEN_AWAY + player->ageProperties->voiceSfxIdOffset);
+ play->haltAllActors = true;
play_sound(NA_SE_OC_ABYSS);
this->actionFunc = NULL;
}
@@ -714,7 +714,7 @@ void BgIkanaRotaryroom_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.shape.rot.x = 0;
}
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, D_80B82218[sp34]);
Collider_InitJntSph(play, &this->collider);
@@ -791,14 +791,14 @@ void func_80B819DC(BgIkanaRotaryroom* this) {
void func_80B819F0(Actor* thisx, PlayState* play) {
BgIkanaRotaryroom* this = THIS;
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
- if (this->dyna.actor.cutscene >= 0) {
- func_800B7298(play, &this->dyna.actor, 7);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
+ if (this->dyna.actor.csId >= 0) {
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_WAIT);
}
func_80B81A64(this);
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
@@ -926,7 +926,7 @@ void func_80B81DC8(Actor* thisx, PlayState* play) {
this->unk_584--;
if (this->unk_584 <= 0) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ CutsceneManager_Stop(this->dyna.actor.csId);
func_80B818B4(this);
} else if (this->unk_584 == 19) {
s16 quakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_3);
diff --git a/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.h b/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.h
index 89021fa54..4184220e0 100644
--- a/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.h
+++ b/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.h
@@ -49,6 +49,4 @@ typedef struct BgIkanaRotaryroom {
/* 0x584 */ s16 unk_584;
} BgIkanaRotaryroom; // size = 0x588
-extern const ActorInit Bg_Ikana_Rotaryroom_InitVars;
-
#endif // Z_BG_IKANA_ROTARYROOM_H
diff --git a/src/overlays/actors/ovl_Bg_Ikana_Shutter/overlay.cfg b/src/overlays/actors/ovl_Bg_Ikana_Shutter/overlay.cfg
deleted file mode 100644
index e86cc272b..000000000
--- a/src/overlays/actors/ovl_Bg_Ikana_Shutter/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Ikana_Shutter
-z_bg_ikana_shutter.c
diff --git a/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.c b/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.c
index b3da7b2bf..f39ca3b8c 100644
--- a/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.c
+++ b/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.c
@@ -36,7 +36,7 @@ void func_80BD5BD8(BgIkanaShutter* this, PlayState* play);
void BgIkanaShutter_SetupDoNothing(BgIkanaShutter* this);
void BgIkanaShutter_DoNothing(BgIkanaShutter* this, PlayState* play);
-const ActorInit Bg_Ikana_Shutter_InitVars = {
+ActorInit Bg_Ikana_Shutter_InitVars = {
ACTOR_BG_IKANA_SHUTTER,
ACTORCAT_SWITCH,
FLAGS,
@@ -106,12 +106,12 @@ void func_80BD5878(BgIkanaShutter* this) {
}
void func_80BD5894(BgIkanaShutter* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
func_80BD58F0(this);
return;
}
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
void func_80BD58F0(BgIkanaShutter* this) {
@@ -177,13 +177,13 @@ void func_80BD5B44(BgIkanaShutter* this) {
}
void func_80BD5B60(BgIkanaShutter* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
Flags_SetClear(play, this->dyna.actor.room);
func_80BD5BC4(this);
return;
}
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
void func_80BD5BC4(BgIkanaShutter* this) {
diff --git a/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.h b/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.h
index 1d39f3593..094334600 100644
--- a/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.h
+++ b/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.h
@@ -12,6 +12,4 @@ typedef struct BgIkanaShutter {
/* 0x15C */ BgIkanaShutterActionFunc actionFunc;
} BgIkanaShutter; // size = 0x160
-extern const ActorInit Bg_Ikana_Shutter_InitVars;
-
#endif // Z_BG_IKANA_SHUTTER_H
diff --git a/src/overlays/actors/ovl_Bg_Iknin_Susceil/overlay.cfg b/src/overlays/actors/ovl_Bg_Iknin_Susceil/overlay.cfg
deleted file mode 100644
index e7df7599d..000000000
--- a/src/overlays/actors/ovl_Bg_Iknin_Susceil/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Iknin_Susceil
-z_bg_iknin_susceil.c
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 017f9ef04..5a69e3ca7 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
@@ -29,7 +29,7 @@ void func_80C0AD44(BgIkninSusceil* this);
void func_80C0AD64(BgIkninSusceil* this, PlayState* play);
void func_80C0AE5C(BgIkninSusceil* this, PlayState* play);
-const ActorInit Bg_Iknin_Susceil_InitVars = {
+ActorInit Bg_Iknin_Susceil_InitVars = {
ACTOR_BG_IKNIN_SUSCEIL,
ACTORCAT_BG,
FLAGS,
@@ -62,11 +62,11 @@ s32 func_80C0A740(BgIkninSusceil* this, PlayState* play) {
}
void func_80C0A804(BgIkninSusceil* this, PlayState* play) {
- func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
}
void func_80C0A838(BgIkninSusceil* this, PlayState* play) {
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
}
void func_80C0A86C(BgIkninSusceil* this, PlayState* play, s16 verticalMag, s16 countdown, s32 arg4) {
@@ -115,7 +115,7 @@ void BgIkninSusceil_Init(Actor* thisx, PlayState* play) {
BgIkninSusceil* this = THIS;
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_ikninside_obj_Colheader_00CBAC);
this->animatedTexture = Lib_SegmentedToVirtual(object_ikninside_obj_Matanimheader_00C670);
func_80C0AC74(this);
@@ -156,7 +156,7 @@ void func_80C0ABA8(BgIkninSusceil* this, PlayState* play) {
if (this->dyna.actor.world.pos.y <= this->dyna.actor.home.pos.y) {
func_80C0A86C(this, play, 4, 14, 1);
Flags_UnsetSwitch(play, SUSCEIL_GET_SWITCHFLAG(&this->dyna.actor));
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BIGWALL_BOUND);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BIGWALL_BOUND);
func_80C0AC74(this);
} else {
func_800B9010(&this->dyna.actor, NA_SE_EV_ICE_PILLAR_FALL - SFX_FLAG);
@@ -179,11 +179,11 @@ void func_80C0ACD4(BgIkninSusceil* this) {
}
void func_80C0ACE8(BgIkninSusceil* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
func_80C0AD44(this);
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
@@ -198,7 +198,7 @@ void func_80C0AD64(BgIkninSusceil* this, PlayState* play) {
if (Math_SmoothStepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y + 365.0f, 0.5f,
this->dyna.actor.velocity.y, 1.0f) < 0.1f) {
func_80C0A86C(this, play, 1, 14, 3);
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ CutsceneManager_Stop(this->dyna.actor.csId);
func_80C0AB14(this);
} else {
func_800B9010(&this->dyna.actor, NA_SE_EV_ICE_PILLAR_RISING - SFX_FLAG);
@@ -226,10 +226,11 @@ void BgIkninSusceil_Update(Actor* thisx, PlayState* play) {
BgIkninSusceil* this = THIS;
Player* player = GET_PLAYER(play);
- if ((this->unk168 == 0) && (this->unk166 > 0) && (player->stateFlags3 & 0x100) && (player->unk_B48 > 1000.0f)) {
+ if ((this->unk168 == 0) && (this->unk166 > 0) && (player->stateFlags3 & PLAYER_STATE3_100) &&
+ (player->unk_B48 > 1000.0f)) {
this->unk168 = 2;
if ((func_80C0A95C(this, play) != 0) && (this->actionFunc != func_80C0AE5C)) {
- func_800B8E58(player, NA_SE_PL_BODY_HIT);
+ Player_PlaySfx(player, NA_SE_PL_BODY_HIT);
func_80C0AE3C(this);
}
}
@@ -242,7 +243,7 @@ void BgIkninSusceil_Update(Actor* thisx, PlayState* play) {
if ((this->dyna.actor.home.pos.y + 70.0f) < this->dyna.actor.world.pos.y) {
this->unk166 = 0;
- } else if (player->stateFlags3 & 0x100) {
+ } else if (player->stateFlags3 & PLAYER_STATE3_100) {
this->unk166 = 3;
} else {
if (this->unk166 > 0) {
diff --git a/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.h b/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.h
index 8fc32bd06..2fa153ac0 100644
--- a/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.h
+++ b/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.h
@@ -19,6 +19,4 @@ typedef struct BgIkninSusceil {
/* 0x16A */ UNK_TYPE2 unk16A;
} BgIkninSusceil; // size = 0x16C
-extern const ActorInit Bg_Iknin_Susceil_InitVars;
-
#endif // Z_BG_IKNIN_SUSCEIL_H
diff --git a/src/overlays/actors/ovl_Bg_Ikninside/overlay.cfg b/src/overlays/actors/ovl_Bg_Ikninside/overlay.cfg
deleted file mode 100644
index 43d45dac7..000000000
--- a/src/overlays/actors/ovl_Bg_Ikninside/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Ikninside
-z_bg_ikninside.c
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 07de845c0..36f8e94fc 100644
--- a/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c
+++ b/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c
@@ -18,7 +18,7 @@ void BgIkninside_Draw(Actor* thisx, PlayState* play);
void func_80C072D0(BgIkninside* this, PlayState* play);
-const ActorInit Bg_Ikninside_InitVars = {
+ActorInit Bg_Ikninside_InitVars = {
ACTOR_BG_IKNINSIDE,
ACTORCAT_BG,
FLAGS,
@@ -65,7 +65,7 @@ void BgIkninside_Init(Actor* thisx, PlayState* play) {
Collider_InitAndSetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit);
Collider_UpdateCylinder(&this->dyna.actor, &this->collider);
if (Flags_GetSwitch(play, DMIKNINSIDE_GET_SWITCH(thisx))) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
}
@@ -80,16 +80,16 @@ void func_80C07220(BgIkninside* this, PlayState* play) {
}
void func_80C07230(BgIkninside* this, PlayState* play) {
- if (this->dyna.actor.cutscene == -1) {
+ if (this->dyna.actor.csId == CS_ID_NONE) {
this->actionFunc = func_80C07220;
- } else if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
- } else if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ } else if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->dyna.actor.csId);
+ } else if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
this->actionFunc = func_80C07220;
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
@@ -121,7 +121,7 @@ void func_80C072D0(BgIkninside* this, PlayState* play) {
Flags_SetSwitch(play, DMIKNINSIDE_GET_SWITCH(&this->dyna.actor));
this->actionFunc = func_80C07230;
this->dyna.actor.draw = NULL;
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
} else {
this->timer = 20;
}
diff --git a/src/overlays/actors/ovl_Bg_Iknv_Doukutu/overlay.cfg b/src/overlays/actors/ovl_Bg_Iknv_Doukutu/overlay.cfg
deleted file mode 100644
index 0eca2bc55..000000000
--- a/src/overlays/actors/ovl_Bg_Iknv_Doukutu/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Iknv_Doukutu
-z_bg_iknv_doukutu.c
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 06091b12b..2c24a5580 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
@@ -27,7 +27,7 @@ void func_80BD7820(Actor* thisx, PlayState* play);
void func_80BD78C4(Actor* thisx, PlayState* play);
void func_80BD7538(Actor* thisx, PlayState* play);
-const ActorInit Bg_Iknv_Doukutu_InitVars = {
+ActorInit Bg_Iknv_Doukutu_InitVars = {
ACTOR_BG_IKNV_DOUKUTU,
ACTORCAT_BG,
FLAGS,
@@ -51,9 +51,9 @@ void BgIknvDoukutu_Init(Actor* thisx, PlayState* play) {
switch (BGIKNVDOUKUTU_GET_F(&this->dyna.actor)) {
case BGIKNVDOUKUTU_F_0:
this->actionFunc = func_80BD71BC;
- this->csAction = 0x204;
+ this->cueType = CS_CMD_ACTOR_CUE_516;
this->unk_160 = 1.0f;
- if ((gSaveContext.save.weekEventReg[14] & 4) || (gSaveContext.save.weekEventReg[52] & 0x20)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04) || CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE)) {
this->dyna.actor.draw = func_80BD7768;
this->actionFunc = func_80BD73D0;
play->envCtx.lightSettingOverride = 25;
@@ -65,22 +65,22 @@ void BgIknvDoukutu_Init(Actor* thisx, PlayState* play) {
case BGIKNVDOUKUTU_F_1:
Actor_SetScale(&this->dyna.actor, 1.0f);
this->dyna.actor.draw = func_80BD7820;
- this->csAction = 0x204;
+ this->cueType = CS_CMD_ACTOR_CUE_516;
DynaPolyActor_Init(&this->dyna, 0);
CollisionHeader_GetVirtual(&object_iknv_obj_Colheader_012788, &colHeader);
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
- if (!(gSaveContext.save.weekEventReg[14] & 4)) {
- Actor_MarkForDeath(&this->dyna.actor);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04)) {
+ Actor_Kill(&this->dyna.actor);
}
break;
case BGIKNVDOUKUTU_F_2:
- this->csAction = 0x204;
+ this->cueType = CS_CMD_ACTOR_CUE_516;
this->dyna.actor.draw = func_80BD78C4;
DynaPolyActor_Init(&this->dyna, 0);
CollisionHeader_GetVirtual(&object_iknv_obj_Colheader_0117C8, &colHeader);
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
- if (gSaveContext.save.weekEventReg[14] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04)) {
this->unk_160 = 1.0f;
this->dyna.actor.world.pos.y += 68.0f;
} else {
@@ -90,7 +90,7 @@ void BgIknvDoukutu_Init(Actor* thisx, PlayState* play) {
break;
default:
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
break;
}
}
@@ -116,8 +116,8 @@ void func_80BD716C(BgIknvDoukutu* this, PlayState* play) {
void func_80BD71BC(BgIknvDoukutu* this, PlayState* play) {
play->envCtx.lightSettingOverride = 24;
- if (Cutscene_CheckActorAction(play, this->csAction) &&
- (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->csAction)]->action == 2)) {
+ if (Cutscene_IsCueInChannel(play, this->cueType) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id == 2)) {
this->actionFunc = func_80BD716C;
this->dyna.actor.draw = func_80BD7538;
}
@@ -135,8 +135,8 @@ void func_80BD7250(BgIknvDoukutu* this, PlayState* play) {
}
void func_80BD72BC(BgIknvDoukutu* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, this->csAction) &&
- (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->csAction)]->action == 3)) {
+ if (Cutscene_IsCueInChannel(play, this->cueType) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id == 3)) {
this->actionFunc = func_80BD7250;
}
@@ -146,8 +146,8 @@ void func_80BD72BC(BgIknvDoukutu* this, PlayState* play) {
}
void func_80BD7360(BgIknvDoukutu* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, this->csAction) &&
- (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->csAction)]->action == 2)) {
+ if (Cutscene_IsCueInChannel(play, this->cueType) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id == 2)) {
this->actionFunc = func_80BD72BC;
}
}
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 d9c4f78ad..beeeb0b81 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
@@ -18,11 +18,9 @@ enum {
typedef struct BgIknvDoukutu {
/* 0x000 */ DynaPolyActor dyna;
/* 0x15C */ s16 unk_15C; // set and not used
- /* 0x15E */ u16 csAction;
+ /* 0x15E */ u16 cueType;
/* 0x160 */ f32 unk_160;
/* 0x164 */ BgIknvDoukutuActionFunc actionFunc;
} BgIknvDoukutu;// size = 0x168
-extern const ActorInit Bg_Iknv_Doukutu_InitVars;
-
#endif // Z_BG_IKNV_DOUKUTU_H
diff --git a/src/overlays/actors/ovl_Bg_Iknv_Obj/overlay.cfg b/src/overlays/actors/ovl_Bg_Iknv_Obj/overlay.cfg
deleted file mode 100644
index 971c9f947..000000000
--- a/src/overlays/actors/ovl_Bg_Iknv_Obj/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Iknv_Obj
-z_bg_iknv_obj.c
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 c0e9bdc42..cca6b17ee 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
@@ -21,7 +21,7 @@ void BgIknvObj_UpdateWaterwheel(BgIknvObj* this, PlayState* play);
void BgIknvObj_UpdateRaisedDoor(BgIknvObj* this, PlayState* play);
void BgIknvObj_UpdateSakonDoor(BgIknvObj* this, PlayState* play);
-const ActorInit Bg_Iknv_Obj_InitVars = {
+ActorInit Bg_Iknv_Obj_InitVars = {
ACTOR_BG_IKNV_OBJ,
ACTORCAT_BG,
FLAGS,
@@ -84,11 +84,11 @@ void BgIknvObj_Init(Actor* thisx, PlayState* play) {
Collider_InitAndSetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit);
Collider_UpdateCylinder(&this->dyna.actor, &this->collider);
this->dyna.actor.colChkInfo.mass = MASS_IMMOVABLE;
- gSaveContext.save.weekEventReg[51] &= (u8)~0x10;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_51_10);
Actor_SetFocus(&this->dyna.actor, IREG(88));
break;
default:
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
}
@@ -98,7 +98,7 @@ void BgIknvObj_Destroy(Actor* thisx, PlayState* play) {
if (IKNV_OBJ_TYPE(this) != IKNV_OBJ_RAISED_DOOR) {
if (IKNV_OBJ_TYPE(this) == IKNV_OBJ_SAKON_DOOR) {
Collider_DestroyCylinder(play, &this->collider);
- gSaveContext.save.weekEventReg[51] &= (u8)~0x10;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_51_10);
} else {
return;
}
@@ -107,32 +107,32 @@ void BgIknvObj_Destroy(Actor* thisx, PlayState* play) {
}
s32 func_80BD7CEC(BgIknvObj* this) {
- if (this->dyna.actor.cutscene == -1) {
+ if (this->dyna.actor.csId == CS_ID_NONE) {
return true;
}
- if (ActorCutscene_GetCurrentIndex() == this->dyna.actor.cutscene) {
+ if (CutsceneManager_GetCurrentCsId() == this->dyna.actor.csId) {
return true;
}
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
return true;
}
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
return false;
}
void BgIknvObj_UpdateWaterwheel(BgIknvObj* this, PlayState* play) {
- if (gSaveContext.save.weekEventReg[14] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04)) {
this->dyna.actor.shape.rot.z -= 0x64;
func_800B9098(&this->dyna.actor);
func_800B9010(&this->dyna.actor, NA_SE_EV_WOOD_WATER_WHEEL - SFX_FLAG);
}
- if ((play->csCtx.state != 0) && (gSaveContext.sceneLayer == 1) && (play->csCtx.currentCsIndex == 4) &&
- (play->csCtx.frames == 1495)) {
+ if ((play->csCtx.state != CS_STATE_IDLE) && (gSaveContext.sceneLayer == 1) && (play->csCtx.scriptIndex == 4) &&
+ (play->csCtx.curFrame == 1495)) {
func_8019F128(NA_SE_EV_DOOR_UNLOCK);
}
}
@@ -149,14 +149,14 @@ s32 func_80BD7E0C(BgIknvObj* this, s16 targetRotation, PlayState* play) {
func_800B9010(&this->dyna.actor, NA_SE_EV_STONEDOOR_OPEN_S - SFX_FLAG);
return false;
}
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_STONEDOOR_STOP);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_STONEDOOR_STOP);
return true;
}
void func_80BD7ED8(BgIknvObj* this, PlayState* play) {
if (func_80BD7E0C(this, this->dyna.actor.home.rot.y, play)) {
this->actionFunc = BgIknvObj_UpdateSakonDoor;
- gSaveContext.save.weekEventReg[51] &= (u8)~0x10;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_51_10);
}
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
}
@@ -165,8 +165,8 @@ void func_80BD7F4C(BgIknvObj* this, PlayState* play) {
if (gSaveContext.save.time > CLOCK_TIME(19, 30)) {
this->actionFunc = func_80BD7ED8;
}
- if ((this->dyna.actor.home.rot.x == 1) && !(gSaveContext.save.weekEventReg[58] & 0x80)) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ if ((this->dyna.actor.home.rot.x == 1) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_58_80)) {
+ CutsceneManager_Stop(this->dyna.actor.csId);
this->dyna.actor.home.rot.x = 0;
}
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
@@ -175,7 +175,7 @@ void func_80BD7F4C(BgIknvObj* this, PlayState* play) {
void func_80BD7FDC(BgIknvObj* this, PlayState* play) {
if (func_80BD7E0C(this, this->dyna.actor.home.rot.y + 0x4000, play)) {
this->actionFunc = func_80BD7F4C;
- gSaveContext.save.weekEventReg[51] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_51_10);
this->dyna.actor.home.rot.x = 1;
}
}
@@ -188,9 +188,9 @@ void func_80BD8040(BgIknvObj* this, PlayState* play) {
}
void BgIknvObj_UpdateSakonDoor(BgIknvObj* this, PlayState* play) {
- if (gSaveContext.save.weekEventReg[58] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_58_80)) {
this->actionFunc = func_80BD8040;
- gSaveContext.save.weekEventReg[89] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_89_80);
}
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
}
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 333b9d59e..a5c01165d 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
@@ -22,6 +22,4 @@ typedef enum {
/* 2 */ IKNV_OBJ_SAKON_DOOR, // door to Sakon's Hideout
} BgIknvObjType;
-extern const ActorInit Bg_Iknv_Obj_InitVars;
-
#endif // Z_BG_IKNV_OBJ_H
diff --git a/src/overlays/actors/ovl_Bg_Ingate/overlay.cfg b/src/overlays/actors/ovl_Bg_Ingate/overlay.cfg
deleted file mode 100644
index 68501515e..000000000
--- a/src/overlays/actors/ovl_Bg_Ingate/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Ingate
-z_bg_ingate.c
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 95ca8936e..502b29086 100644
--- a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c
+++ b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c
@@ -26,7 +26,7 @@ void func_809542A0(BgIngate* this, PlayState* play);
void func_80954340(BgIngate* this, PlayState* play);
void func_809543D4(BgIngate* this, PlayState* play);
-const ActorInit Bg_Ingate_InitVars = {
+ActorInit Bg_Ingate_InitVars = {
ACTOR_BG_INGATE,
ACTORCAT_BG,
FLAGS,
@@ -72,7 +72,7 @@ Actor* BgIngate_FindActor(BgIngate* this, PlayState* play, u8 actorCat, s16 acto
void func_80953B40(BgIngate* this) {
s32 temp;
- if (!(gSaveContext.eventInf[3] & 0x20)) {
+ if (!CHECK_EVENTINF(EVENTINF_35)) {
this->timePathTotalTime = 4 * 1000;
this->timePathTimeSpeed = 4;
} else {
@@ -125,10 +125,10 @@ s32 func_80953BEC(BgIngate* this) {
s32 func_80953DA8(BgIngate* this, PlayState* play) {
Camera* mainCam = Play_GetCamera(play, CAM_ID_MAIN);
- if (gSaveContext.eventInf[3] & 0x20) {
- func_800B7298(play, &this->dyna.actor, 7);
+ if (CHECK_EVENTINF(EVENTINF_35)) {
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_WAIT);
} else {
- gSaveContext.eventInf[4] |= 2;
+ SET_EVENTINF(EVENTINF_41);
}
Camera_ChangeSetting(mainCam, CAM_SET_BOAT_CRUISE);
play->unk_1887C = 0x63;
@@ -139,8 +139,8 @@ s32 func_80953DA8(BgIngate* this, PlayState* play) {
void func_80953E38(PlayState* play) {
Camera_ChangeSetting(Play_GetCamera(play, CAM_ID_MAIN), CAM_SET_NORMAL0);
- if (!(gSaveContext.eventInf[3] & 0x20)) {
- gSaveContext.eventInf[4] &= (u8)~2;
+ if (!CHECK_EVENTINF(EVENTINF_35)) {
+ CLEAR_EVENTINF(EVENTINF_41);
}
play->unk_1887C = -1;
@@ -149,7 +149,7 @@ void func_80953E38(PlayState* play) {
void func_80953EA4(BgIngate* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- func_800B7298(play, &this->dyna.actor, 0x3A);
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_58);
player->unk_3A0.x = this->dyna.actor.world.pos.x;
player->unk_3A0.z = this->dyna.actor.world.pos.z;
this->unk160 &= ~0x4;
@@ -169,7 +169,7 @@ void func_80953F14(BgIngate* this, PlayState* play) {
if (this->timePath != NULL) {
func_80953B40(this);
}
- this->unk16E = -1;
+ this->csId = CS_ID_NONE;
this->actionFunc = func_80953F9C;
}
@@ -180,9 +180,9 @@ void func_80953F9C(BgIngate* this, PlayState* play) {
Player* player = GET_PLAYER(play);
Camera* mainCam = Play_GetCamera(play, CAM_ID_MAIN);
- if (!(gSaveContext.eventInf[4] & 1)) {
+ if (!CHECK_EVENTINF(EVENTINF_40)) {
- if (!(gSaveContext.eventInf[3] & 0x20) && (this->unk160 & 0x10) && (this->unk16C == 0)) {
+ if (!CHECK_EVENTINF(EVENTINF_35) && (this->unk160 & 0x10) && (this->unk16C == 0)) {
this->dyna.actor.textId = 0x9E3;
Message_StartTextbox(play, this->dyna.actor.textId, NULL);
this->unk160 &= ~0x10;
@@ -192,80 +192,79 @@ void func_80953F9C(BgIngate* this, PlayState* play) {
if (this->timePath->unk1 != 0xFF) {
func_80953E38(play);
- func_800B7298(play, &this->dyna.actor, 7);
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_WAIT);
this->dyna.actor.textId = 0x9E4;
Message_StartTextbox(play, this->dyna.actor.textId, NULL);
this->unk16C += 1;
- gSaveContext.save.weekEventReg[90] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_90_40);
this->actionFunc = func_809543D4;
} else {
-
- if (!(gSaveContext.eventInf[3] & 0x20)) {
- gSaveContext.eventInf[4] &= (u8)~2;
+ if (!CHECK_EVENTINF(EVENTINF_35)) {
+ CLEAR_EVENTINF(EVENTINF_41);
} else {
- gSaveContext.eventInf[4] |= 1;
+ SET_EVENTINF(EVENTINF_40);
}
this->actionFunc = func_809542A0;
}
- } else if ((ActorCutscene_GetCurrentIndex() == -1) && (this->timePath != NULL)) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_CRUISER - SFX_FLAG);
+ } else if ((CutsceneManager_GetCurrentCsId() == CS_ID_NONE) && (this->timePath != NULL)) {
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_CRUISER - SFX_FLAG);
func_80953BEC(this);
}
}
- if (ActorCutscene_GetCurrentIndex() != this->unk16E) {
- if (ActorCutscene_GetCurrentIndex() != -1) {
+ if (CutsceneManager_GetCurrentCsId() != this->csId) {
+ if (CutsceneManager_GetCurrentCsId() != CS_ID_NONE) {
Camera_ChangeSetting(mainCam, CAM_SET_NORMAL0);
- player->stateFlags1 |= 0x20;
- play->actorCtx.flags &= ~ACTORCTX_FLAG_2;
+ player->stateFlags1 |= PLAYER_STATE1_20;
+ play->actorCtx.flags &= ~ACTORCTX_FLAG_PICTO_BOX_ON;
} else {
Camera_ChangeSetting(mainCam, CAM_SET_BOAT_CRUISE);
- player->stateFlags1 &= ~0x20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
}
}
- this->unk16E = ActorCutscene_GetCurrentIndex();
+ this->csId = CutsceneManager_GetCurrentCsId();
}
void func_809541B8(BgIngate* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (this->unk160 & 0x4) {
- if ((player->transformation == PLAYER_FORM_HUMAN) && (player->actor.bgCheckFlags & 1) &&
+ if ((player->transformation == PLAYER_FORM_HUMAN) && (player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) &&
(this->dyna.actor.xzDistToPlayer < 40.0f)) {
if (this->dyna.actor.playerHeightRel > 15.0f) {
- func_800B7298(play, &this->dyna.actor, 7);
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_WAIT);
this->dyna.actor.textId = 0x9E6;
Message_StartTextbox(play, this->dyna.actor.textId, NULL);
this->actionFunc = func_809543D4;
}
}
- } else if (!DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ } else if (!DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
this->unk160 |= 4;
}
}
void func_809542A0(BgIngate* this, PlayState* play) {
- if (gSaveContext.eventInf[5] & 1) {
+ if (CHECK_EVENTINF(EVENTINF_50)) {
play->nextEntrance = ENTRANCE(TOURIST_INFORMATION, 2);
- gSaveContext.eventInf[5] &= (u8)~1;
+ CLEAR_EVENTINF(EVENTINF_50);
} else {
play->nextEntrance = ENTRANCE(TOURIST_INFORMATION, 1);
}
gSaveContext.nextCutsceneIndex = 0;
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_03;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
this->actionFunc = func_80953F8C;
- gSaveContext.save.weekEventReg[90] &= (u8)~0x40;
- func_800FE498();
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_40);
+ Environment_StartTime();
}
void func_80954340(BgIngate* this, PlayState* play) {
if (!DECR(this->unk16A)) {
if (this->timePath != NULL) {
- func_800B7298(play, &this->dyna.actor, 6);
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_END);
this->timePath = &play->setupPathList[this->timePath->unk1];
func_80953F14(this, play);
- func_800FE484();
+ Environment_StopTime();
}
}
}
@@ -277,38 +276,38 @@ void func_809543D4(BgIngate* this, PlayState* play) {
switch (this->dyna.actor.textId) {
case 0x9E4:
this->dyna.actor.textId = 0x9E5;
- func_80151938(play, this->dyna.actor.textId);
+ Message_ContinueTextbox(play, this->dyna.actor.textId);
break;
case 0x9E5:
if (play->msgCtx.choiceIndex == 0) {
- func_800B7298(play, &this->dyna.actor, 6);
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_END);
this->unk160 &= ~0x4;
this->actionFunc = func_809541B8;
- func_800FE498();
+ Environment_StartTime();
func_8019F208();
} else {
if (this->timePath != NULL) {
this->timePath = &play->setupPathList[this->timePath->unk1];
}
func_80953F14(this, play);
- gSaveContext.save.weekEventReg[90] &= (u8)~0x40;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_40);
func_8019F230();
}
- func_801477B4(play);
+ Message_CloseTextbox(play);
break;
case 0x9E6:
if (play->msgCtx.choiceIndex == 0) {
func_80953EA4(this, play);
- gSaveContext.save.weekEventReg[90] &= (u8)~0x40;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_40);
func_8019F208();
} else {
- func_800B7298(play, &this->dyna.actor, 6);
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_END);
this->unk160 &= ~0x4;
this->actionFunc = func_809541B8;
- func_800FE498();
+ Environment_StartTime();
func_8019F230();
}
- func_801477B4(play);
+ Message_CloseTextbox(play);
break;
}
}
@@ -323,7 +322,7 @@ void BgIngate_Init(Actor* thisx, PlayState* play2) {
Vec3f sp20;
if (BgIngate_FindActor(this, play, ACTORCAT_BG, ACTOR_BG_INGATE) == NULL) {
- DynaPolyActor_Init(&this->dyna, 3);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y);
DynaPolyActor_LoadMesh(play, &this->dyna, &gSichitaiBoatCol);
this->unk160 = 0;
this->unk160 |= 0x8;
@@ -331,10 +330,10 @@ void BgIngate_Init(Actor* thisx, PlayState* play2) {
Actor_SetScale(&this->dyna.actor, 1.0f);
this->timePath = SubS_GetAdditionalPath(play, BGINGATE_GET_FF(&this->dyna.actor), 0);
this->dyna.actor.room = -1;
- if (gSaveContext.save.weekEventReg[20] & 2) {
- gSaveContext.save.weekEventReg[90] &= (u8)~0x40;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_40);
}
- if (!(gSaveContext.eventInf[3] & 0x20) && (gSaveContext.save.weekEventReg[90] & 0x40)) {
+ if (!CHECK_EVENTINF(EVENTINF_35) && CHECK_WEEKEVENTREG(WEEKEVENTREG_90_40)) {
phi_a2 = 1;
this->unk16C = 1;
this->actionFunc = func_809541B8;
@@ -342,10 +341,10 @@ void BgIngate_Init(Actor* thisx, PlayState* play2) {
phi_a2 = 0;
if (play->curSpawn == 6) {
func_80953F14(this, play);
- if (gSaveContext.eventInf[3] & 0x20) {
- func_80112AFC(play);
+ if (CHECK_EVENTINF(EVENTINF_35)) {
+ Interface_InitMinigame(play);
} else {
- gSaveContext.eventInf[4] |= 2;
+ SET_EVENTINF(EVENTINF_41);
}
} else {
this->actionFunc = func_80953F8C;
@@ -364,7 +363,7 @@ void BgIngate_Init(Actor* thisx, PlayState* play2) {
}
this->timePath = SubS_GetAdditionalPath(play, BGINGATE_GET_FF(&this->dyna.actor), 0);
} else {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
}
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 b38ce2eeb..6046fc31e 100644
--- a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.h
+++ b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.h
@@ -17,7 +17,7 @@ typedef struct BgIngate {
/* 0x168 */ s16 timePathTimeSpeed;
/* 0x16A */ s16 unk16A;
/* 0x16C */ s16 unk16C;
- /* 0x16E */ s16 unk16E;
+ /* 0x16E */ s16 csId;
/* 0x170 */ Vec3f timePathTargetPos;
/* 0x17C */ f32 timePathProgress;
/* 0x180 */ s32 timePathTotalTime;
@@ -26,6 +26,4 @@ typedef struct BgIngate {
/* 0x18C */ s32 timePathElapsedTime;
} BgIngate; // size = 0x190
-extern const ActorInit Bg_Ingate_InitVars;
-
#endif // Z_BG_INGATE_H
diff --git a/src/overlays/actors/ovl_Bg_Inibs_Movebg/overlay.cfg b/src/overlays/actors/ovl_Bg_Inibs_Movebg/overlay.cfg
deleted file mode 100644
index 877787043..000000000
--- a/src/overlays/actors/ovl_Bg_Inibs_Movebg/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Inibs_Movebg
-z_bg_inibs_movebg.c
diff --git a/src/overlays/actors/ovl_Bg_Inibs_Movebg/z_bg_inibs_movebg.c b/src/overlays/actors/ovl_Bg_Inibs_Movebg/z_bg_inibs_movebg.c
index 68c432c5f..2eac2ed07 100644
--- a/src/overlays/actors/ovl_Bg_Inibs_Movebg/z_bg_inibs_movebg.c
+++ b/src/overlays/actors/ovl_Bg_Inibs_Movebg/z_bg_inibs_movebg.c
@@ -15,7 +15,7 @@ void BgInibsMovebg_Init(Actor* thisx, PlayState* play);
void BgInibsMovebg_Destroy(Actor* thisx, PlayState* play);
void BgInibsMovebg_Draw(Actor* thisx, PlayState* play);
-const ActorInit Bg_Inibs_Movebg_InitVars = {
+ActorInit Bg_Inibs_Movebg_InitVars = {
ACTOR_BG_INIBS_MOVEBG,
ACTORCAT_BG,
FLAGS,
@@ -39,7 +39,7 @@ void BgInibsMovebg_Init(Actor* thisx, PlayState* play) {
BgInibsMovebg* this = THIS;
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
this->opaDList = sOpaDLists[BG_INIBS_MOVEBG_GET_MODE(thisx)];
this->xluDList = sXluDLists[BG_INIBS_MOVEBG_GET_MODE(thisx)];
diff --git a/src/overlays/actors/ovl_Bg_Inibs_Movebg/z_bg_inibs_movebg.h b/src/overlays/actors/ovl_Bg_Inibs_Movebg/z_bg_inibs_movebg.h
index 629a5cd03..03ea34fc9 100644
--- a/src/overlays/actors/ovl_Bg_Inibs_Movebg/z_bg_inibs_movebg.h
+++ b/src/overlays/actors/ovl_Bg_Inibs_Movebg/z_bg_inibs_movebg.h
@@ -14,6 +14,4 @@ typedef struct BgInibsMovebg {
/* 0x164 */ AnimatedMaterial* sandTexAnim;
} BgInibsMovebg; // size = 0x168
-extern const ActorInit Bg_Inibs_Movebg_InitVars;
-
#endif // Z_BG_INIBS_MOVEBG_H
diff --git a/src/overlays/actors/ovl_Bg_Keikoku_Saku/overlay.cfg b/src/overlays/actors/ovl_Bg_Keikoku_Saku/overlay.cfg
deleted file mode 100644
index 78f2c7668..000000000
--- a/src/overlays/actors/ovl_Bg_Keikoku_Saku/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Keikoku_Saku
-z_bg_keikoku_saku.c
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 63ef9d369..282a43925 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
@@ -20,7 +20,7 @@ void func_80A5389C(BgKeikokuSaku* this, PlayState* play);
void func_80A538E0(BgKeikokuSaku* this, PlayState* play);
void func_80A53994(BgKeikokuSaku* this, PlayState* play);
-const ActorInit Bg_Keikoku_Saku_InitVars = {
+ActorInit Bg_Keikoku_Saku_InitVars = {
ACTOR_BG_KEIKOKU_SAKU,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -61,10 +61,10 @@ void func_80A5389C(BgKeikokuSaku* this, PlayState* play) {
}
void func_80A538E0(BgKeikokuSaku* this, PlayState* play) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_METALGATE_OPEN - SFX_FLAG);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_METALGATE_OPEN - SFX_FLAG);
this->dyna.actor.world.pos.z -= 2.0f + BREG(8);
if (this->dyna.actor.world.pos.z < (BREG(9) + 2660.0f)) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BRIDGE_OPEN_STOP);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BRIDGE_OPEN_STOP);
this->timer = 30;
this->actionFunc = func_80A53994;
}
diff --git a/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.h b/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.h
index c39994d77..6a3bad9c8 100644
--- a/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.h
+++ b/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.h
@@ -16,6 +16,4 @@ typedef struct BgKeikokuSaku {
/* 0x162 */ s16 timer;
} BgKeikokuSaku; // Size = 0x164
-extern const ActorInit Bg_Keikoku_Saku_InitVars;
-
#endif // Z_BG_KEIKOKU_SAKU_H
diff --git a/src/overlays/actors/ovl_Bg_Keikoku_Spr/overlay.cfg b/src/overlays/actors/ovl_Bg_Keikoku_Spr/overlay.cfg
deleted file mode 100644
index 74d068ea4..000000000
--- a/src/overlays/actors/ovl_Bg_Keikoku_Spr/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Keikoku_Spr
-z_bg_keikoku_spr.c
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 f54564e2d..8246a0298 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,9 +1,3 @@
-/*
- * 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"
@@ -16,6 +10,7 @@ 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,
@@ -25,38 +20,14 @@ const ActorInit Bg_Keikoku_Spr_InitVars = {
(ActorFunc)BgKeikokuSpr_Init,
(ActorFunc)BgKeikokuSpr_Destroy,
(ActorFunc)BgKeikokuSpr_Update,
- (ActorFunc)BgKeikokuSpr_Draw,
+ (ActorFunc)BgKeikokuSpr_Draw
};
+*/
-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_Init.s")
-void BgKeikokuSpr_Init(Actor* thisx, PlayState* play) {
- Actor_ProcessInitChain(thisx, sInitChain);
-}
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Keikoku_Spr/BgKeikokuSpr_Destroy.s")
-void BgKeikokuSpr_Destroy(Actor* thisx, PlayState* play) {
-}
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Keikoku_Spr/BgKeikokuSpr_Update.s")
-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);
-}
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Keikoku_Spr/BgKeikokuSpr_Draw.s")
diff --git a/src/overlays/actors/ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.h b/src/overlays/actors/ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.h
index ca72665b8..9686a44a1 100644
--- a/src/overlays/actors/ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.h
+++ b/src/overlays/actors/ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.h
@@ -9,6 +9,4 @@ typedef struct BgKeikokuSpr {
/* 0x000 */ Actor actor;
} BgKeikokuSpr; // size = 0x144
-extern const ActorInit Bg_Keikoku_Spr_InitVars;
-
#endif // Z_BG_KEIKOKU_SPR_H
diff --git a/src/overlays/actors/ovl_Bg_Kin2_Bombwall/overlay.cfg b/src/overlays/actors/ovl_Bg_Kin2_Bombwall/overlay.cfg
deleted file mode 100644
index b61d1617f..000000000
--- a/src/overlays/actors/ovl_Bg_Kin2_Bombwall/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Kin2_Bombwall
-z_bg_kin2_bombwall.c
diff --git a/src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c b/src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c
index 86854cbe8..a868b355c 100644
--- a/src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c
+++ b/src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c
@@ -146,14 +146,15 @@ void BgKin2Bombwall_Init(Actor* thisx, PlayState* play) {
bombwallCollider = &this->collider;
Collider_InitCylinder(play, bombwallCollider);
if (Flags_GetSwitch(play, BG_KIN2_BOMBWALL_SWITCH_FLAG(&this->dyna.actor))) {
- Actor_MarkForDeath(&this->dyna.actor);
- } else {
- DynaPolyActor_LoadMesh(play, &this->dyna, &gOceanSpiderHouseBombableWallCol);
- Collider_SetCylinder(play, bombwallCollider, &this->dyna.actor, &sCylinderInit);
- Collider_UpdateCylinder(&this->dyna.actor, bombwallCollider);
- Actor_SetFocus(&this->dyna.actor, 60.0f);
- BgKin2Bombwall_SetupWait(this);
+ Actor_Kill(&this->dyna.actor);
+ return;
}
+
+ DynaPolyActor_LoadMesh(play, &this->dyna, &gOceanSpiderHouseBombableWallCol);
+ Collider_SetCylinder(play, bombwallCollider, &this->dyna.actor, &sCylinderInit);
+ Collider_UpdateCylinder(&this->dyna.actor, bombwallCollider);
+ Actor_SetFocus(&this->dyna.actor, 60.0f);
+ BgKin2Bombwall_SetupWait(this);
}
void BgKin2Bombwall_Destroy(Actor* thisx, PlayState* play) {
@@ -170,7 +171,7 @@ void BgKin2Bombwall_SetupWait(BgKin2Bombwall* this) {
void BgKin2Bombwall_Wait(BgKin2Bombwall* this, PlayState* play) {
if (BgKin2Bombwall_IsHitFromNearby(this, play)) {
this->collider.base.acFlags &= ~AC_HIT;
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
BgKin2Bombwall_SetupPlayCutscene(this);
} else {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
@@ -182,17 +183,17 @@ void BgKin2Bombwall_SetupPlayCutscene(BgKin2Bombwall* this) {
}
void BgKin2Bombwall_PlayCutscene(BgKin2Bombwall* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
Flags_SetSwitch(play, BG_KIN2_BOMBWALL_SWITCH_FLAG(&this->dyna.actor));
SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 60, NA_SE_EV_WALL_BROKEN);
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->dyna.actor.draw = NULL;
BgKin2Bombwall_SpawnEffects(this, play);
BgKin2Bombwall_SetupEndCutscene(this);
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
@@ -204,8 +205,8 @@ void BgKin2Bombwall_SetupEndCutscene(BgKin2Bombwall* this) {
void BgKin2Bombwall_EndCutscene(BgKin2Bombwall* this, PlayState* play) {
this->timer--;
if (this->timer <= 0) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
- Actor_MarkForDeath(&this->dyna.actor);
+ CutsceneManager_Stop(this->dyna.actor.csId);
+ Actor_Kill(&this->dyna.actor);
}
}
diff --git a/src/overlays/actors/ovl_Bg_Kin2_Fence/overlay.cfg b/src/overlays/actors/ovl_Bg_Kin2_Fence/overlay.cfg
deleted file mode 100644
index d3984fea9..000000000
--- a/src/overlays/actors/ovl_Bg_Kin2_Fence/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Kin2_Fence
-z_bg_kin2_fence.c
diff --git a/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c b/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c
index 09f71c4ff..66ac02634 100644
--- a/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c
+++ b/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c
@@ -27,7 +27,7 @@ void BgKin2Fence_RaiseFence(BgKin2Fence* this, PlayState* play);
void BgKin2Fence_SetupDoNothing(BgKin2Fence* this);
void BgKin2Fence_DoNothing(BgKin2Fence* this, PlayState* play);
-const ActorInit Bg_Kin2_Fence_InitVars = {
+ActorInit Bg_Kin2_Fence_InitVars = {
ACTOR_BG_KIN2_FENCE,
ACTORCAT_BG,
FLAGS,
@@ -150,7 +150,7 @@ void BgKin2Fence_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
DynaPolyActor_Init(&this->dyna, 0);
- DynaPolyActor_LoadMesh(play, &this->dyna, &object_kin2_obj_Colheader_000908);
+ DynaPolyActor_LoadMesh(play, &this->dyna, &gOceanSpiderHouseFireplaceGrateCol);
Collider_InitJntSph(play, &this->collider);
Collider_SetJntSph(play, &this->collider, &this->dyna.actor, &sJntSphInit, this->colliderElements);
Matrix_SetTranslateRotateYXZ(this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y,
@@ -187,7 +187,7 @@ void BgKin2Fence_HandleMaskCode(BgKin2Fence* this, PlayState* play) {
if (this->collider.base.acFlags & AC_HIT) {
hitMask = BgKin2Fence_CheckHitMask(this);
if (hitMask >= 0) {
- nextMask = (s8)gSaveContext.save.spiderHouseMaskOrder[this->masksHit];
+ nextMask = (s8)gSaveContext.save.saveInfo.spiderHouseMaskOrder[this->masksHit];
if (hitMask == nextMask) {
play_sound(NA_SE_SY_TRE_BOX_APPEAR);
this->masksHit += 1;
@@ -217,13 +217,13 @@ void BgKin2Fence_SetupPlayOpenCutscene(BgKin2Fence* this) {
}
void BgKin2Fence_PlayOpenCutscene(BgKin2Fence* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
Flags_SetSwitch(play, this->dyna.actor.params & 0x7F);
BgKin2Fence_SetupWaitBeforeOpen(this);
return;
}
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
void BgKin2Fence_SetupWaitBeforeOpen(BgKin2Fence* this) {
diff --git a/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.h b/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.h
index 00d08b85f..98bb51243 100644
--- a/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.h
+++ b/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.h
@@ -17,6 +17,4 @@ typedef struct BgKin2Fence {
/* 0x282 */ s8 waitBeforeOpenTimer;
} BgKin2Fence; // size = 0x284
-extern const ActorInit Bg_Kin2_Fence_InitVars;
-
#endif // Z_BG_KIN2_FENCE_H
diff --git a/src/overlays/actors/ovl_Bg_Kin2_Picture/overlay.cfg b/src/overlays/actors/ovl_Bg_Kin2_Picture/overlay.cfg
deleted file mode 100644
index ddd62c823..000000000
--- a/src/overlays/actors/ovl_Bg_Kin2_Picture/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Kin2_Picture
-z_bg_kin2_picture.c
diff --git a/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c b/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c
index 2f50ca820..7da9237bc 100644
--- a/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c
+++ b/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c
@@ -5,6 +5,7 @@
*/
#include "z_bg_kin2_picture.h"
+#include "assets/objects/object_kin2_obj/object_kin2_obj.h"
#define FLAGS 0x00000000
@@ -15,14 +16,18 @@ void BgKin2Picture_Destroy(Actor* thisx, PlayState* play);
void BgKin2Picture_Update(Actor* thisx, PlayState* play);
void BgKin2Picture_Draw(Actor* thisx, PlayState* play);
-void func_80B6F4D4(BgKin2Picture* this, PlayState* play);
-void func_80B6F5B8(BgKin2Picture* this, PlayState* play);
-void func_80B6F640(BgKin2Picture* this, PlayState* play);
-void func_80B6F72C(BgKin2Picture* this, PlayState* play);
-void func_80B6F90C(BgKin2Picture* this, PlayState* play);
+void BgKin2Picture_SetupWait(BgKin2Picture* this);
+void BgKin2Picture_Wait(BgKin2Picture* this, PlayState* play);
+void BgKin2Picture_SetupPlayCutscene(BgKin2Picture* this);
+void BgKin2Picture_PlayCutscene(BgKin2Picture* this, PlayState* play);
+void BgKin2Picture_SetupShiver(BgKin2Picture* this);
+void BgKin2Picture_Shiver(BgKin2Picture* this, PlayState* play);
+void BgKin2Picture_SetupFall(BgKin2Picture* this);
+void BgKin2Picture_Fall(BgKin2Picture* this, PlayState* play);
+void BgKin2Picture_SetupDoNothing(BgKin2Picture* this);
+void BgKin2Picture_DoNothing(BgKin2Picture* this, PlayState* play);
-#if 0
-const ActorInit Bg_Kin2_Picture_InitVars = {
+ActorInit Bg_Kin2_Picture_InitVars = {
ACTOR_BG_KIN2_PICTURE,
ACTORCAT_PROP,
FLAGS,
@@ -34,73 +39,307 @@ const ActorInit Bg_Kin2_Picture_InitVars = {
(ActorFunc)BgKin2Picture_Draw,
};
-// static ColliderTrisElementInit sTrisElementsInit[2] = {
-static ColliderTrisElementInit D_80B6F990[2] = {
+static ColliderTrisElementInit sTrisElementsInit[] = {
{
- { ELEMTYPE_UNK4, { 0x00000000, 0x00, 0x00 }, { 0x000138B0, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_NONE, },
- { { { -20.0f, 53.29999923706055f, 9.0f }, { -20.0f, 3.0f, 9.0f }, { 20.0f, 3.0f, 9.0f } } },
+ {
+ ELEMTYPE_UNK4,
+ { 0x00000000, 0x00, 0x00 },
+ { 0x000138B0, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_ON,
+ OCELEM_NONE,
+ },
+ { { { -20.0f, 53.3f, 9.0f }, { -20.0f, 3.0f, 9.0f }, { 20.0f, 3.0f, 9.0f } } },
},
{
- { ELEMTYPE_UNK4, { 0x00000000, 0x00, 0x00 }, { 0x000138B0, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_NONE, },
- { { { -20.0f, 53.29999923706055f, 9.0f }, { 20.0f, 3.0f, 9.0f }, { 20.0f, 53.29999923706055f, 9.0f } } },
+ {
+ ELEMTYPE_UNK4,
+ { 0x00000000, 0x00, 0x00 },
+ { 0x000138B0, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_ON,
+ OCELEM_NONE,
+ },
+ { { { -20.0f, 53.3f, 9.0f }, { 20.0f, 3.0f, 9.0f }, { 20.0f, 53.3f, 9.0f } } },
},
};
-// static ColliderTrisInit sTrisInit = {
-static ColliderTrisInit D_80B6FA08 = {
- { COLTYPE_NONE, AT_NONE, AC_ON | AC_TYPE_PLAYER, OC1_NONE, OC2_NONE, COLSHAPE_TRIS, },
- ARRAY_COUNT(sTrisElementsInit), D_80B6F990, // sTrisElementsInit,
+static ColliderTrisInit sTrisInit = {
+ {
+ COLTYPE_NONE,
+ AT_NONE,
+ AC_ON | AC_TYPE_PLAYER,
+ OC1_NONE,
+ OC2_NONE,
+ COLSHAPE_TRIS,
+ },
+ ARRAY_COUNT(sTrisElementsInit),
+ sTrisElementsInit,
};
-// static InitChainEntry sInitChain[] = {
-static InitChainEntry D_80B6FA24[] = {
- ICHAIN_F32_DIV1000(gravity, -2000, ICHAIN_CONTINUE),
- ICHAIN_F32_DIV1000(terminalVelocity, -20000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 100, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 100, ICHAIN_CONTINUE),
- ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
+static Vec3f sDustBasePos = { 0.0f, 23.0f, 0.0f };
+
+static InitChainEntry sInitChain[] = {
+ ICHAIN_F32_DIV1000(gravity, -2000, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(terminalVelocity, -20000, ICHAIN_CONTINUE),
+ ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneScale, 100, ICHAIN_CONTINUE),
+ ICHAIN_F32(uncullZoneDownward, 100, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
};
-#endif
+s32 BgKin2Picture_IsSkulltulaCollected(PlayState* play, s32 skulltulaParams) {
+ s32 flag = -1;
-extern ColliderTrisElementInit D_80B6F990[2];
-extern ColliderTrisInit D_80B6FA08;
-extern InitChainEntry D_80B6FA24[];
+ if ((u8)skulltulaParams & 3) {
+ flag = BG_KIN2_PICTURE_GET_3FC(skulltulaParams);
+ }
-extern UNK_TYPE D_06000658;
-extern UNK_TYPE D_06000798;
+ return (flag >= 0) && Flags_GetTreasure(play, flag);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6EFA0.s")
+void BgKin2Picture_SpawnSkulltula(BgKin2Picture* this, PlayState* play2) {
+ PlayState* play = play2;
+ s32 skulltulaSpawnParams;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6EFEC.s")
+ if (!BG_KIN2_PICTURE_SKULLTULA_COLLECTED(&this->dyna.actor)) { // Gold Skulltula is still here.
+ skulltulaSpawnParams = BG_KIN2_PICTURE_SKULLTULA_SPAWN_PARAM(&this->dyna.actor);
+ if (!BgKin2Picture_IsSkulltulaCollected(play, skulltulaSpawnParams) &&
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_SW, this->dyna.actor.home.pos.x,
+ this->dyna.actor.home.pos.y + 23.0f, this->dyna.actor.home.pos.z, 0,
+ this->dyna.actor.home.rot.y, 0, skulltulaSpawnParams)) {
+ play_sound(NA_SE_SY_TRE_BOX_APPEAR);
+ }
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F098.s")
+#define DUST_COUNT 20
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/BgKin2Picture_Init.s")
+void BgKin2Picture_SpawnDust(BgKin2Picture* this, PlayState* play) {
+ f32 offset;
+ Vec3f basePos;
+ Vec3f pos;
+ Vec3f velocity;
+ Vec3f accel;
+ s32 angle;
+ s32 scale;
+ s16 scaleStep;
+ s32 baseAngle;
+ s32 i;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/BgKin2Picture_Destroy.s")
+ Matrix_SetTranslateRotateYXZ(this->dyna.actor.world.pos.x,
+ this->dyna.actor.world.pos.y +
+ (this->dyna.actor.shape.yOffset * this->dyna.actor.scale.y),
+ this->dyna.actor.world.pos.z, &this->dyna.actor.shape.rot);
+ Matrix_MultVec3f(&sDustBasePos, &basePos);
+ pos.y = basePos.y - 7.0f;
+ velocity.y = 0.0f;
+ accel.y = 0.2f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F4C0.s")
+ for (i = 0, baseAngle = 0; i < DUST_COUNT; i++, baseAngle += (0x10000 / DUST_COUNT)) {
+ angle = (s32)(Rand_ZeroOne() * (0x10000 / DUST_COUNT)) + baseAngle;
+ offset = (Rand_ZeroOne() * 14.0f) + 4.0f;
+ pos.x = Math_SinS(angle) * offset;
+ pos.z = Math_CosS(angle) * offset;
+ velocity.x = (Rand_ZeroOne() - 0.5f) + (pos.x * (1.0f / 6.0f));
+ velocity.z = (Rand_ZeroOne() - 0.5f) + (pos.z * (1.0f / 6.0f));
+ pos.x += basePos.x;
+ pos.z += basePos.z;
+ accel.x = velocity.x * -0.09f;
+ accel.z = velocity.z * -0.09f;
+ scale = (s32)(Rand_ZeroOne() * 10.0f) + 10;
+ scaleStep = (s32)(Rand_ZeroOne() * 10.0f) + 15;
+ func_800B1210(play, &pos, &velocity, &accel, scale, scaleStep);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F4D4.s")
+void BgKin2Picture_Init(Actor* thisx, PlayState* play) {
+ s32 pad;
+ BgKin2Picture* this = THIS;
+ s32 skulltulaParams;
+ Vec3f vertices[3];
+ s32 i;
+ s32 j;
+ ColliderTrisElementInit* element;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F5A4.s")
+ Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
+ DynaPolyActor_Init(&this->dyna, 0);
+ DynaPolyActor_LoadMesh(play, &this->dyna, &gOceanSpiderHouseSkullkidPaintingCol);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
+ Collider_InitTris(play, &this->colliderTris);
+ Collider_SetTris(play, &this->colliderTris, &this->dyna.actor, &sTrisInit, this->colliderElement);
+ 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);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F5B8.s")
+ for (i = 0; i < ARRAY_COUNT(sTrisElementsInit); i++) {
+ for (j = 0; j < ARRAY_COUNT(vertices); j++) {
+ element = &sTrisInit.elements[i];
+ Matrix_MultVec3f(&element->dim.vtx[j], &vertices[j]);
+ }
+ Collider_SetTrisVertices(&this->colliderTris, i, &vertices[0], &vertices[1], &vertices[2]);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F61C.s")
+ Actor_SetFocus(&this->dyna.actor, 23.0f);
+ skulltulaParams = BG_KIN2_PICTURE_SKULLTULA_SPAWN_PARAM(&this->dyna.actor);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F640.s")
+ if (BG_KIN2_PICTURE_SKULLTULA_COLLECTED(&this->dyna.actor) ||
+ BgKin2Picture_IsSkulltulaCollected(play, skulltulaParams)) {
+ this->skulltulaNoiseTimer = -1;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F708.s")
+ BgKin2Picture_SetupWait(this);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F72C.s")
+void BgKin2Picture_Destroy(Actor* thisx, PlayState* play) {
+ BgKin2Picture* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F8F8.s")
+ DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
+ Collider_DestroyTris(play, &this->colliderTris);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F90C.s")
+void BgKin2Picture_SetupWait(BgKin2Picture* this) {
+ this->actionFunc = BgKin2Picture_Wait;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/BgKin2Picture_Update.s")
+void BgKin2Picture_Wait(BgKin2Picture* this, PlayState* play) {
+ // hit by projectile
+ if (this->colliderTris.base.acFlags & AC_HIT) {
+ this->colliderTris.base.acFlags &= ~AC_HIT;
+ CutsceneManager_Queue(this->dyna.actor.csId);
+ BgKin2Picture_SetupPlayCutscene(this);
+ } else { // Gold Skulltula can be heard behind Skullkid's painting.
+ if (this->skulltulaNoiseTimer >= 0) {
+ if (this->skulltulaNoiseTimer == 0) {
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EN_STALGOLD_ROLL);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/BgKin2Picture_Draw.s")
+ if (Rand_ZeroOne() < 0.1f) {
+ this->skulltulaNoiseTimer = Rand_S16Offset(40, 80);
+ } else {
+ this->skulltulaNoiseTimer = 8;
+ }
+ } else {
+ this->skulltulaNoiseTimer--;
+ }
+ }
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->colliderTris.base);
+ }
+}
+
+void BgKin2Picture_SetupPlayCutscene(BgKin2Picture* this) {
+ this->actionFunc = BgKin2Picture_PlayCutscene;
+}
+
+void BgKin2Picture_PlayCutscene(BgKin2Picture* this, PlayState* play) {
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
+ this->cutsceneStarted = true;
+ BgKin2Picture_SetupShiver(this);
+ } else {
+ CutsceneManager_Queue(this->dyna.actor.csId);
+ }
+}
+
+void BgKin2Picture_SetupShiver(BgKin2Picture* this) {
+ this->paintingTimer = 13;
+ this->xOffsetAngle = 0;
+ this->yOffsetAngle = 0;
+ this->actionFunc = BgKin2Picture_Shiver;
+}
+
+void BgKin2Picture_Shiver(BgKin2Picture* this, PlayState* play) {
+ s32 pad;
+ Vec3f basePosOffset;
+ Vec3f posOffset;
+
+ this->paintingTimer--;
+ if (this->paintingTimer <= 0) {
+ Math_Vec3f_Copy(&this->dyna.actor.world.pos, &this->dyna.actor.home.pos);
+ BgKin2Picture_SetupFall(this);
+ } else {
+ this->xOffsetAngle += 0x7BAC;
+ this->yOffsetAngle += 0x4E20;
+ basePosOffset.x = Math_CosS(this->xOffsetAngle);
+ basePosOffset.y = Math_CosS(this->yOffsetAngle) * 0.2f;
+ basePosOffset.z = 0.0f;
+ Matrix_RotateYS(this->dyna.actor.shape.rot.y, MTXMODE_NEW);
+ Matrix_MultVec3f(&basePosOffset, &posOffset);
+ Math_Vec3f_Sum(&this->dyna.actor.home.pos, &posOffset, &this->dyna.actor.world.pos);
+ }
+}
+
+void BgKin2Picture_SetupFall(BgKin2Picture* this) {
+ this->landTimer = 0;
+ this->step = 0;
+ this->paintingTimer = 4;
+ this->actionFunc = BgKin2Picture_Fall;
+}
+
+void BgKin2Picture_Fall(BgKin2Picture* this, PlayState* play) {
+ if (this->paintingTimer > 0) {
+ this->paintingTimer--;
+
+ if (this->paintingTimer == 0) {
+ BgKin2Picture_SpawnSkulltula(this, play);
+ }
+ }
+
+ Actor_MoveWithGravity(&this->dyna.actor);
+ Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
+
+ if (this->dyna.actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ Math_StepToS(&this->step, 0x7D0, 0x78);
+
+ if (this->landTimer < 3) {
+ this->landTimer++;
+
+ if (this->dyna.actor.velocity.y <= 0.01f) {
+ this->dyna.actor.velocity.y *= -0.7f;
+
+ if (this->dyna.actor.velocity.y > 6.0f) {
+ this->dyna.actor.velocity.y = 6.0f;
+ }
+
+ if (this->landTimer < 3) {
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_SMALL_WOODPLATE_BOUND_0);
+ }
+ }
+ }
+ }
+
+ Actor_SetFocus(&this->dyna.actor, 23.0f);
+
+ if (!this->hasSpawnedDust && (this->dyna.actor.shape.rot.x > 0x3300)) {
+ BgKin2Picture_SpawnDust(this, play);
+ this->hasSpawnedDust = true;
+ }
+
+ if (Math_ScaledStepToS(&this->dyna.actor.shape.rot.x, 0x4000, this->step)) { // facing the floor
+ this->dyna.actor.shape.yOffset = 40.0f;
+
+ if (this->cutsceneStarted) {
+ CutsceneManager_Stop(this->dyna.actor.csId);
+ }
+
+ DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WOODPLATE_BROKEN);
+ BgKin2Picture_SetupDoNothing(this);
+ } else {
+ this->dyna.actor.shape.yOffset = Math_SinS(this->dyna.actor.shape.rot.x) * 40.0f;
+ }
+}
+
+void BgKin2Picture_SetupDoNothing(BgKin2Picture* this) {
+ this->actionFunc = BgKin2Picture_DoNothing;
+}
+
+void BgKin2Picture_DoNothing(BgKin2Picture* this, PlayState* play) {
+}
+
+void BgKin2Picture_Update(Actor* thisx, PlayState* play) {
+ BgKin2Picture* this = THIS;
+
+ this->actionFunc(this, play);
+}
+
+void BgKin2Picture_Draw(Actor* thisx, PlayState* play) {
+ BgKin2Picture* this = THIS;
+
+ Gfx_DrawDListOpa(play, gOceanSpiderHouseSkullkidPaintingDL);
+}
diff --git a/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.h b/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.h
index 19651ef57..ce7cf95fb 100644
--- a/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.h
+++ b/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.h
@@ -3,17 +3,27 @@
#include "global.h"
+#define BG_KIN2_PICTURE_SKULLTULA_COLLECTED(thisx) (((thisx)->params >> 5) & 1)
+#define BG_KIN2_PICTURE_GET_3FC(thisx) ((u8)(((thisx & 0x3FC)) >> 2))
+#define BG_KIN2_PICTURE_SKULLTULA_SPAWN_PARAM(thisx) ((((thisx)->params & 0x1F) << 2) | 0xFF03)
+
struct BgKin2Picture;
typedef void (*BgKin2PictureActionFunc)(struct BgKin2Picture*, PlayState*);
typedef struct BgKin2Picture {
- /* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0xF0];
+ /* 0x000 */ DynaPolyActor dyna;
+ /* 0x15C */ ColliderTris colliderTris;
+ /* 0x17C */ ColliderTrisElement colliderElement[2];
/* 0x234 */ BgKin2PictureActionFunc actionFunc;
- /* 0x238 */ char unk_238[0xC];
+ /* 0x238 */ s16 step;
+ /* 0x23A */ s8 paintingTimer; // Used for when painting is shaking and for timing Gold Skulltula spawn.
+ /* 0x23B */ s8 landTimer;
+ /* 0x23C */ s16 xOffsetAngle;
+ /* 0x23E */ s16 yOffsetAngle;
+ /* 0x240 */ s8 cutsceneStarted;
+ /* 0x241 */ s8 hasSpawnedDust;
+ /* 0x242 */ s8 skulltulaNoiseTimer;
} BgKin2Picture; // size = 0x244
-extern const ActorInit Bg_Kin2_Picture_InitVars;
-
#endif // Z_BG_KIN2_PICTURE_H
diff --git a/src/overlays/actors/ovl_Bg_Kin2_Shelf/overlay.cfg b/src/overlays/actors/ovl_Bg_Kin2_Shelf/overlay.cfg
deleted file mode 100644
index 84a84fd49..000000000
--- a/src/overlays/actors/ovl_Bg_Kin2_Shelf/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Kin2_Shelf
-z_bg_kin2_shelf.c
diff --git a/src/overlays/actors/ovl_Bg_Kin2_Shelf/z_bg_kin2_shelf.c b/src/overlays/actors/ovl_Bg_Kin2_Shelf/z_bg_kin2_shelf.c
index 8080c4444..f36944db6 100644
--- a/src/overlays/actors/ovl_Bg_Kin2_Shelf/z_bg_kin2_shelf.c
+++ b/src/overlays/actors/ovl_Bg_Kin2_Shelf/z_bg_kin2_shelf.c
@@ -23,7 +23,7 @@ void func_80B70230(BgKin2Shelf* this, PlayState* play);
void func_80B70498(BgKin2Shelf* this);
void func_80B704B4(BgKin2Shelf* this, PlayState* play);
-const ActorInit Bg_Kin2_Shelf_InitVars = {
+ActorInit Bg_Kin2_Shelf_InitVars = {
ACTOR_BG_KIN2_SHELF,
ACTORCAT_BG,
FLAGS,
@@ -207,7 +207,7 @@ void BgKin2Shelf_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.flags |= ACTOR_FLAG_10000000;
}
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, D_80B70780[sp24]);
func_80B700A8(this);
}
@@ -260,7 +260,7 @@ void func_80B700C0(BgKin2Shelf* this, PlayState* play) {
} else {
Player* player = GET_PLAYER(play);
- player->stateFlags2 &= ~0x10;
+ player->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
}
} else {
@@ -292,7 +292,7 @@ void func_80B70230(BgKin2Shelf* this, PlayState* play) {
Player* player = GET_PLAYER(play);
this->unk_160 = 1.0f;
- player->stateFlags2 &= ~0x10;
+ player->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
if (this->unk_164 & 8) {
@@ -339,7 +339,7 @@ void func_80B704B4(BgKin2Shelf* this, PlayState* play) {
Player* player = GET_PLAYER(play);
this->unk_160 = 1.0f;
- player->stateFlags2 &= ~0x10;
+ player->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
if (this->unk_164 & 4) {
diff --git a/src/overlays/actors/ovl_Bg_Kin2_Shelf/z_bg_kin2_shelf.h b/src/overlays/actors/ovl_Bg_Kin2_Shelf/z_bg_kin2_shelf.h
index ce88b25e0..bd5180c34 100644
--- a/src/overlays/actors/ovl_Bg_Kin2_Shelf/z_bg_kin2_shelf.h
+++ b/src/overlays/actors/ovl_Bg_Kin2_Shelf/z_bg_kin2_shelf.h
@@ -19,6 +19,4 @@ typedef struct BgKin2Shelf {
/* 0x167 */ s8 unk_167;
} BgKin2Shelf; // size = 0x168
-extern const ActorInit Bg_Kin2_Shelf_InitVars;
-
#endif // Z_BG_KIN2_SHELF_H
diff --git a/src/overlays/actors/ovl_Bg_Ladder/overlay.cfg b/src/overlays/actors/ovl_Bg_Ladder/overlay.cfg
deleted file mode 100644
index 6f88bdf1b..000000000
--- a/src/overlays/actors/ovl_Bg_Ladder/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Ladder
-z_bg_ladder.c
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 36226212e..208babf77 100644
--- a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c
+++ b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c
@@ -20,7 +20,7 @@ void BgLadder_StartCutscene(BgLadder* this, PlayState* play);
void BgLadder_FadeIn(BgLadder* this, PlayState* play);
void BgLadder_DoNothing(BgLadder* this, PlayState* play);
-const ActorInit Bg_Ladder_InitVars = {
+ActorInit Bg_Ladder_InitVars = {
ACTOR_BG_LADDER,
ACTORCAT_PROP,
FLAGS,
@@ -63,7 +63,7 @@ void BgLadder_Init(Actor* thisx, PlayState* play) {
} else if (size == LADDER_SIZE_24RUNG) {
DynaPolyActor_LoadMesh(play, &this->dyna, &object_ladder_Colheader_000868);
} else {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
@@ -75,7 +75,7 @@ void BgLadder_Init(Actor* thisx, PlayState* play) {
} else {
// Otherwise, the ladder doesn't draw; wait for the flag to be set
this->alpha = 5;
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->dyna.actor.draw = NULL;
this->action = BgLadder_Wait;
}
@@ -90,20 +90,20 @@ void BgLadder_Destroy(Actor* thisx, PlayState* play) {
void BgLadder_Wait(BgLadder* this, PlayState* play) {
// Wait for the flag to be set, then trigger the cutscene
if (Flags_GetSwitch(play, this->switchFlag)) {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
this->action = BgLadder_StartCutscene;
}
}
void BgLadder_StartCutscene(BgLadder* this, PlayState* play) {
// Trigger the cutscene, then make the ladder fade in
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
this->dyna.actor.draw = BgLadder_Draw;
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_SECRET_LADDER_APPEAR);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_SECRET_LADDER_APPEAR);
this->action = BgLadder_FadeIn;
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
@@ -112,8 +112,8 @@ void BgLadder_FadeIn(BgLadder* this, PlayState* play) {
this->alpha += 5;
if (this->alpha >= 255) {
this->alpha = 255;
- ActorCutscene_Stop(this->dyna.actor.cutscene);
- func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
+ CutsceneManager_Stop(this->dyna.actor.csId);
+ DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->dyna.actor.flags &= ~ACTOR_FLAG_10; // always update = off
this->action = BgLadder_DoNothing;
}
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 c53a80352..e4cd15c15 100644
--- a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.h
+++ b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.h
@@ -24,6 +24,4 @@ typedef enum {
/* 3 */ LADDER_SIZE_24RUNG,
} BgLadderSize;
-extern const ActorInit Bg_Ladder_InitVars;
-
#endif // Z_BG_LADDER_H
diff --git a/src/overlays/actors/ovl_Bg_Last_Bwall/overlay.cfg b/src/overlays/actors/ovl_Bg_Last_Bwall/overlay.cfg
deleted file mode 100644
index ec560aa15..000000000
--- a/src/overlays/actors/ovl_Bg_Last_Bwall/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Last_Bwall
-z_bg_last_bwall.c
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 85272fa51..6085a93a2 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
@@ -37,7 +37,7 @@ void func_80C18884(BgLastBwall* this, PlayState* play);
void func_80C188C4(BgLastBwall* this, PlayState* play);
void BgLastBwall_DoNothing(BgLastBwall* this, PlayState* play);
-const ActorInit Bg_Last_Bwall_InitVars = {
+ActorInit Bg_Last_Bwall_InitVars = {
ACTOR_BG_LAST_BWALL,
ACTORCAT_BG,
FLAGS,
@@ -149,19 +149,23 @@ void BgLastBwall_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->dyna.actor, D_80C18AC8);
this->type = BGLASTBWALL_GET_TYPE(&this->dyna.actor);
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, D_80C18A48[this->type].colHeader);
Collider_InitTris(play, &this->colliderTris);
if (Flags_GetSwitch(play, BGLASTBWALL_GET_SWITCHFLAGS(&this->dyna.actor))) {
- Actor_MarkForDeath(&this->dyna.actor);
- } else if (!Collider_SetTris(play, &this->colliderTris, &this->dyna.actor, &sTrisInit, this->colliderTrisElement)) {
- Actor_MarkForDeath(&this->dyna.actor);
- } else {
- BgLastBwall_InitCollider(&sTrisInit, &this->dyna.actor.world.pos, &this->dyna.actor.shape.rot,
- &this->colliderTris, D_80C18AC0[this->type]);
- SubS_FillCutscenesList(&this->dyna.actor, this->cutscenes, ARRAY_COUNT(this->cutscenes));
- func_80C187E4(this);
+ Actor_Kill(&this->dyna.actor);
+ return;
}
+
+ if (!Collider_SetTris(play, &this->colliderTris, &this->dyna.actor, &sTrisInit, this->colliderTrisElement)) {
+ Actor_Kill(&this->dyna.actor);
+ return;
+ }
+
+ BgLastBwall_InitCollider(&sTrisInit, &this->dyna.actor.world.pos, &this->dyna.actor.shape.rot, &this->colliderTris,
+ D_80C18AC0[this->type]);
+ SubS_FillCutscenesList(&this->dyna.actor, this->csIdList, ARRAY_COUNT(this->csIdList));
+ func_80C187E4(this);
}
void BgLastBwall_Destroy(Actor* thisx, PlayState* play) {
@@ -235,16 +239,16 @@ void func_80C1886C(BgLastBwall* this, PlayState* play) {
}
void func_80C18884(BgLastBwall* this, PlayState* play) {
- if (SubS_StartActorCutscene(&this->dyna.actor, this->cutscenes[0], -1, SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) {
+ if (SubS_StartCutscene(&this->dyna.actor, this->csIdList[0], CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) {
func_80C188C4(this, play);
}
}
void func_80C188C4(BgLastBwall* this, PlayState* play) {
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->dyna.actor.draw = NULL;
func_80C184EC(this, play);
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_WALL_BROKEN);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WALL_BROKEN);
this->actionFunc = BgLastBwall_DoNothing;
}
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 d24b8ba42..e6d752c28 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
@@ -22,9 +22,7 @@ typedef struct BgLastBwall {
/* 0x160 */ ColliderTris colliderTris;
/* 0x180 */ ColliderTrisElement colliderTrisElement[2];
/* 0x238 */ u8 type;
- /* 0x23A */ s16 cutscenes[1];
+ /* 0x23A */ s16 csIdList[1];
} BgLastBwall; // size = 0x23C
-extern const ActorInit Bg_Last_Bwall_InitVars;
-
#endif // Z_BG_LAST_BWALL_H
diff --git a/src/overlays/actors/ovl_Bg_Lbfshot/overlay.cfg b/src/overlays/actors/ovl_Bg_Lbfshot/overlay.cfg
deleted file mode 100644
index 520be10f0..000000000
--- a/src/overlays/actors/ovl_Bg_Lbfshot/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Lbfshot
-z_bg_lbfshot.c
diff --git a/src/overlays/actors/ovl_Bg_Lbfshot/z_bg_lbfshot.c b/src/overlays/actors/ovl_Bg_Lbfshot/z_bg_lbfshot.c
index 35d61af5e..24c7ec1b3 100644
--- a/src/overlays/actors/ovl_Bg_Lbfshot/z_bg_lbfshot.c
+++ b/src/overlays/actors/ovl_Bg_Lbfshot/z_bg_lbfshot.c
@@ -15,7 +15,7 @@ void BgLbfshot_Init(Actor* thisx, PlayState* play);
void BgLbfshot_Destroy(Actor* thisx, PlayState* play);
void BgLbfshot_Draw(Actor* thisx, PlayState* play);
-const ActorInit Bg_Lbfshot_InitVars = {
+ActorInit Bg_Lbfshot_InitVars = {
ACTOR_BG_LBFSHOT,
ACTORCAT_BG,
FLAGS,
@@ -36,7 +36,7 @@ void BgLbfshot_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
this->dyna.actor.uncullZoneForward = 4000.0f;
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_lbfshot_Colheader_0014D8);
}
void BgLbfshot_Destroy(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Bg_Lbfshot/z_bg_lbfshot.h b/src/overlays/actors/ovl_Bg_Lbfshot/z_bg_lbfshot.h
index 069bfa048..2874a2d13 100644
--- a/src/overlays/actors/ovl_Bg_Lbfshot/z_bg_lbfshot.h
+++ b/src/overlays/actors/ovl_Bg_Lbfshot/z_bg_lbfshot.h
@@ -10,6 +10,4 @@ typedef struct BgLbfshot {
/* 0x15C */ UNK_TYPE1 pad15C[0x4];
} BgLbfshot; // size = 0x160
-extern const ActorInit Bg_Lbfshot_InitVars;
-
#endif // Z_BG_LBFSHOT_H
diff --git a/src/overlays/actors/ovl_Bg_Lotus/overlay.cfg b/src/overlays/actors/ovl_Bg_Lotus/overlay.cfg
deleted file mode 100644
index 95702c51b..000000000
--- a/src/overlays/actors/ovl_Bg_Lotus/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Lotus
-z_bg_lotus.c
diff --git a/src/overlays/actors/ovl_Bg_Lotus/z_bg_lotus.c b/src/overlays/actors/ovl_Bg_Lotus/z_bg_lotus.c
index 72a38b21b..765b58dbd 100644
--- a/src/overlays/actors/ovl_Bg_Lotus/z_bg_lotus.c
+++ b/src/overlays/actors/ovl_Bg_Lotus/z_bg_lotus.c
@@ -1,9 +1,3 @@
-/*
- * File: z_bg_lotus.c
- * Overlay: ovl_Bg_Lotus
- * Description: Southern Swamp Lilypads
- */
-
#include "z_bg_lotus.h"
#include "objects/object_lotus/object_lotus.h"
@@ -16,10 +10,7 @@ void BgLotus_Destroy(Actor* thisx, PlayState* play);
void BgLotus_Update(Actor* thisx, PlayState* play);
void BgLotus_Draw(Actor* thisx, PlayState* play);
-void BgLotus_Wait(BgLotus* this, PlayState* play);
-void BgLotus_Sink(BgLotus* this, PlayState* play);
-void BgLotus_WaitToAppear(BgLotus* this, PlayState* play);
-
+/*
const ActorInit Bg_Lotus_InitVars = {
ACTOR_BG_LOTUS,
ACTORCAT_BG,
@@ -29,147 +20,22 @@ const ActorInit Bg_Lotus_InitVars = {
(ActorFunc)BgLotus_Init,
(ActorFunc)BgLotus_Destroy,
(ActorFunc)BgLotus_Update,
- (ActorFunc)BgLotus_Draw,
+ (ActorFunc)BgLotus_Draw
};
+*/
-static InitChainEntry sInitChain[] = {
- ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
-};
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Lotus/BgLotus_Init.s")
-void BgLotus_Init(Actor* thisx, PlayState* play) {
- BgLotus* this = THIS;
- s32 pad;
- s32 bgId;
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Lotus/BgLotus_Destroy.s")
- Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
- DynaPolyActor_Init(&this->dyna, 1);
- DynaPolyActor_LoadMesh(play, &this->dyna, &gLilyPadCol);
- this->dyna.actor.floorHeight = BgCheck_EntityRaycastFloor5(&play->colCtx, &thisx->floorPoly, &bgId,
- &this->dyna.actor, &this->dyna.actor.world.pos);
- this->timer2 = 96;
- this->dyna.actor.world.rot.y = (s32)Rand_Next() >> 0x10;
- this->actionFunc = BgLotus_Wait;
-}
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Lotus/func_80AD6830.s")
-void BgLotus_Destroy(Actor* thisx, PlayState* play) {
- BgLotus* this = THIS;
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Lotus/func_80AD68DC.s")
- DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
-}
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Lotus/func_80AD6A88.s")
-void BgLotus_SetScaleXZ(BgLotus* this) {
- f32 scale;
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Lotus/func_80AD6B68.s")
- if (this->dyna.actor.params == 0) {
- scale = sin_rad(this->timer * 0.7853982f) * ((0.014f * ((f32)this->timer / 8)) + 0.01f);
- this->dyna.actor.scale.x = (1.0f + scale) * 0.1f;
- this->dyna.actor.scale.z = (1.0f - scale) * 0.1f;
- }
-}
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Lotus/BgLotus_Update.s")
-void BgLotus_Wait(BgLotus* this, PlayState* play) {
- f32 moveDist; // distance for the xz position of the lilypad to move
-
- this->timer2--;
-
- moveDist = sin_rad(this->timer2 * 0.06544985f) * 6.0f;
-
- if (this->dyna.actor.params == 0) {
- this->dyna.actor.world.pos.x =
- (Math_SinS(this->dyna.actor.world.rot.y) * moveDist) + this->dyna.actor.home.pos.x;
- this->dyna.actor.world.pos.z =
- (Math_CosS(this->dyna.actor.world.rot.y) * moveDist) + this->dyna.actor.home.pos.z;
-
- if (this->timer2 == 0) {
- this->timer2 = 96;
- this->dyna.actor.world.rot.y += (s16)((s32)Rand_Next() >> 0x12);
- }
- }
-
- if (this->height < this->dyna.actor.floorHeight) {
- this->dyna.actor.world.pos.y = this->dyna.actor.floorHeight;
- } else {
- this->dyna.actor.world.pos.y = this->height;
-
- if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
- if (this->hasSpawnedRipples == 0) {
- EffectSsGRipple_Spawn(play, &this->dyna.actor.world.pos, 1000, 1400, 0);
- EffectSsGRipple_Spawn(play, &this->dyna.actor.world.pos, 1000, 1400, 8);
- this->timer = 40;
- }
- if (gSaveContext.save.playerForm != PLAYER_FORM_DEKU) {
- this->timer = 40;
- this->dyna.actor.flags |= ACTOR_FLAG_10;
- this->actionFunc = BgLotus_Sink;
- return;
- }
-
- this->hasSpawnedRipples = 1;
- } else {
- this->hasSpawnedRipples = 0;
- }
- }
-
- if (this->timer > 0) {
- this->timer--;
- }
-
- BgLotus_SetScaleXZ(this);
-}
-
-void BgLotus_Sink(BgLotus* this, PlayState* play) {
- if (this->height < this->dyna.actor.world.pos.y) {
- this->dyna.actor.world.pos.y = this->height;
- }
-
- this->dyna.actor.world.pos.y -= 1.0f;
-
- if (this->dyna.actor.world.pos.y <= this->dyna.actor.floorHeight) {
- this->dyna.actor.world.pos.y = this->dyna.actor.floorHeight;
- this->timer = 0;
- }
-
- if (this->timer > 0) {
- this->timer--;
- BgLotus_SetScaleXZ(this);
- } else {
- if (Math_StepToF(&this->dyna.actor.scale.x, 0, 0.0050000003539f)) {
- this->dyna.actor.draw = NULL;
- this->timer = 100;
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
- this->actionFunc = BgLotus_WaitToAppear;
- }
-
- this->dyna.actor.scale.z = this->dyna.actor.scale.x;
- }
-}
-
-void BgLotus_WaitToAppear(BgLotus* this, PlayState* play) {
- if (this->timer > 0) {
- this->timer--;
- } else if ((this->dyna.actor.xzDistToPlayer > 100.0f) && (this->dyna.actor.projectedPos.z < 0.0f)) {
- this->dyna.actor.draw = BgLotus_Draw;
- func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
- Actor_SetScale(&this->dyna.actor, 0.1f);
- this->dyna.actor.world.pos.y = CLAMP_MIN(this->height, this->dyna.actor.floorHeight);
- this->dyna.actor.flags &= ~ACTOR_FLAG_10;
- this->timer2 = 96;
- this->actionFunc = BgLotus_Wait;
- this->dyna.actor.world.pos.x = this->dyna.actor.home.pos.x;
- this->dyna.actor.world.pos.z = this->dyna.actor.home.pos.z;
- }
-}
-
-void BgLotus_Update(Actor* thisx, PlayState* play) {
- BgLotus* this = THIS;
- s32 pad;
- WaterBox* waterBox;
-
- WaterBox_GetSurface1_2(play, &play->colCtx, this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.z,
- &this->height, &waterBox);
- this->actionFunc(this, play);
-}
-
-void BgLotus_Draw(Actor* thisx, PlayState* play) {
- Gfx_DrawDListOpa(play, gLilyPadDL);
-}
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Lotus/BgLotus_Draw.s")
diff --git a/src/overlays/actors/ovl_Bg_Lotus/z_bg_lotus.h b/src/overlays/actors/ovl_Bg_Lotus/z_bg_lotus.h
index a4d8f2ebb..61d340a49 100644
--- a/src/overlays/actors/ovl_Bg_Lotus/z_bg_lotus.h
+++ b/src/overlays/actors/ovl_Bg_Lotus/z_bg_lotus.h
@@ -5,17 +5,9 @@
struct BgLotus;
-typedef void (*BgLotusActionFunc)(struct BgLotus*, PlayState*);
-
typedef struct BgLotus {
- /* 0x000 */ DynaPolyActor dyna;
- /* 0x15C */ BgLotusActionFunc actionFunc;
- /* 0x160 */ f32 height;
- /* 0x164 */ u8 hasSpawnedRipples;
- /* 0x166 */ s16 timer;
- /* 0x168 */ s16 timer2;
+ /* 0x000 */ Actor actor;
+ /* 0x144 */ char unk_144[0x28];
} BgLotus; // size = 0x16C
-extern const ActorInit Bg_Lotus_InitVars;
-
#endif // Z_BG_LOTUS_H
diff --git a/src/overlays/actors/ovl_Bg_Market_Step/overlay.cfg b/src/overlays/actors/ovl_Bg_Market_Step/overlay.cfg
deleted file mode 100644
index 07ff7cee8..000000000
--- a/src/overlays/actors/ovl_Bg_Market_Step/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Market_Step
-z_bg_market_step.c
diff --git a/src/overlays/actors/ovl_Bg_Market_Step/z_bg_market_step.c b/src/overlays/actors/ovl_Bg_Market_Step/z_bg_market_step.c
index f2f5ef870..44d797b8e 100644
--- a/src/overlays/actors/ovl_Bg_Market_Step/z_bg_market_step.c
+++ b/src/overlays/actors/ovl_Bg_Market_Step/z_bg_market_step.c
@@ -14,7 +14,7 @@
void BgMarketStep_Init(Actor* thisx, PlayState* play);
void BgMarketStep_Draw(Actor* thisx, PlayState* play);
-const ActorInit Bg_Market_Step_InitVars = {
+ActorInit Bg_Market_Step_InitVars = {
ACTOR_BG_MARKET_STEP, ACTORCAT_BG, FLAGS,
OBJECT_MARKET_OBJ, sizeof(BgMarketStep), (ActorFunc)BgMarketStep_Init,
(ActorFunc)Actor_Noop, (ActorFunc)Actor_Noop, (ActorFunc)BgMarketStep_Draw,
diff --git a/src/overlays/actors/ovl_Bg_Market_Step/z_bg_market_step.h b/src/overlays/actors/ovl_Bg_Market_Step/z_bg_market_step.h
index c779b227a..9a957b742 100644
--- a/src/overlays/actors/ovl_Bg_Market_Step/z_bg_market_step.h
+++ b/src/overlays/actors/ovl_Bg_Market_Step/z_bg_market_step.h
@@ -11,6 +11,4 @@ typedef struct BgMarketStep {
/* 0x000 */ Actor actor;
} BgMarketStep; // size = 0x144
-extern const ActorInit Bg_Market_Step_InitVars;
-
#endif // Z_BG_MARKET_STEP_H
diff --git a/src/overlays/actors/ovl_Bg_Mbar_Chair/overlay.cfg b/src/overlays/actors/ovl_Bg_Mbar_Chair/overlay.cfg
deleted file mode 100644
index 8cfa06dec..000000000
--- a/src/overlays/actors/ovl_Bg_Mbar_Chair/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Mbar_Chair
-z_bg_mbar_chair.c
diff --git a/src/overlays/actors/ovl_Bg_Mbar_Chair/z_bg_mbar_chair.c b/src/overlays/actors/ovl_Bg_Mbar_Chair/z_bg_mbar_chair.c
index f81e53611..305c3084e 100644
--- a/src/overlays/actors/ovl_Bg_Mbar_Chair/z_bg_mbar_chair.c
+++ b/src/overlays/actors/ovl_Bg_Mbar_Chair/z_bg_mbar_chair.c
@@ -16,7 +16,7 @@ void BgMbarChair_Destroy(Actor* thisx, PlayState* play);
void BgMbarChair_Update(Actor* thisx, PlayState* play);
void BgMbarChair_Draw(Actor* thisx, PlayState* play);
-const ActorInit Bg_Mbar_Chair_InitVars = {
+ActorInit Bg_Mbar_Chair_InitVars = {
ACTOR_BG_MBAR_CHAIR,
ACTORCAT_BG,
FLAGS,
diff --git a/src/overlays/actors/ovl_Bg_Mbar_Chair/z_bg_mbar_chair.h b/src/overlays/actors/ovl_Bg_Mbar_Chair/z_bg_mbar_chair.h
index ee4854d07..0d9326464 100644
--- a/src/overlays/actors/ovl_Bg_Mbar_Chair/z_bg_mbar_chair.h
+++ b/src/overlays/actors/ovl_Bg_Mbar_Chair/z_bg_mbar_chair.h
@@ -9,6 +9,4 @@ typedef struct BgMbarChair {
/* 0x000 */ DynaPolyActor dyna;
} BgMbarChair; // size = 0x15C
-extern const ActorInit Bg_Mbar_Chair_InitVars;
-
#endif // Z_BG_MBAR_CHAIR_H
diff --git a/src/overlays/actors/ovl_Bg_Numa_Hana/overlay.cfg b/src/overlays/actors/ovl_Bg_Numa_Hana/overlay.cfg
deleted file mode 100644
index 63ed804b1..000000000
--- a/src/overlays/actors/ovl_Bg_Numa_Hana/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Numa_Hana
-z_bg_numa_hana.c
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 8554e2b5a..3a11a2fdf 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
@@ -30,7 +30,7 @@ void BgNumaHana_RaiseFlower(BgNumaHana* this, PlayState* play);
void BgNumaHana_SetupOpenedIdle(BgNumaHana* this);
void BgNumaHana_OpenedIdle(BgNumaHana* this, PlayState* play);
-const ActorInit Bg_Numa_Hana_InitVars = {
+ActorInit Bg_Numa_Hana_InitVars = {
ACTOR_BG_NUMA_HANA,
ACTORCAT_BG,
FLAGS,
@@ -63,7 +63,7 @@ static ColliderCylinderInit sCylinderInit = {
};
static FireObjInitParams sFireObjInit = {
- 0.00405000010505f, 0.0500000007451f, 3, 1, 0, 0, 0,
+ 0.00405f, 1.0f / 20.0f, FIRE_STATE_NOT_LIT, 1, 0, 0, 0,
};
static s16 sInitialAnglePerPetal[] = { 0x0000, 0x2AAA, 0x5555, 0x8000, 0xAAAA, 0xD555 };
@@ -144,7 +144,7 @@ void BgNumaHana_Init(Actor* thisx, PlayState* play) {
type = BG_NUMA_HANA_GET_TYPE(&this->dyna.actor);
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
- DynaPolyActor_Init(&this->dyna, 3);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y);
if (type == BG_NUMA_HANA_TYPE_OPEN_FLOWER_COLLISION) {
DynaPolyActor_LoadMesh(play, &this->dyna, &gWoodenFlowerOpenedFlowerCol);
@@ -157,12 +157,12 @@ void BgNumaHana_Init(Actor* thisx, PlayState* play) {
Collider_SetCylinder(play, &this->torchCollider, &this->dyna.actor, &sCylinderInit);
this->dyna.actor.colChkInfo.mass = MASS_IMMOVABLE;
if (!BgNumaHana_SpawnOpenFlowerCollisionChild(this, play)) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
- if (gSaveContext.save.weekEventReg[12] & 1) {
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_01)) {
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->petalZRotation = 0x2000;
this->innerPetalZRotation = 0x2000;
@@ -175,12 +175,12 @@ void BgNumaHana_Init(Actor* thisx, PlayState* play) {
this->flowerRotationalVelocity = 0x147;
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y + 210.0f;
- FireObj_SetState2(&this->fire, 0.05f, 2);
+ FireObj_SetState2(&this->fire, 0.05f, FIRE_STATE_FULLY_LIT);
Flags_SetSwitch(play, BG_NUMA_HANA_SWITCH_FLAG(&this->dyna.actor));
BgNumaHana_SetupOpenedIdle(this);
} else {
child = (DynaPolyActor*)this->dyna.actor.child;
- func_800C62BC(play, &play->colCtx.dyna, child->bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, child->bgId);
Flags_UnsetSwitch(play, BG_NUMA_HANA_SWITCH_FLAG(&this->dyna.actor));
BgNumaHana_SetupClosedIdle(this);
}
@@ -215,15 +215,15 @@ void BgNumaHana_SetupClosedIdle(BgNumaHana* this) {
* the cutscene where the petals unfold.
*/
void BgNumaHana_ClosedIdle(BgNumaHana* this, PlayState* play) {
- if (this->fire.state != 3) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_FLAME_IGNITION);
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
- gSaveContext.save.weekEventReg[12] |= 1;
+ if (this->fire.state != FIRE_STATE_NOT_LIT) {
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_FLAME_IGNITION);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
+ SET_WEEKEVENTREG(WEEKEVENTREG_12_01);
Flags_SetSwitch(play, BG_NUMA_HANA_SWITCH_FLAG(&this->dyna.actor));
BgNumaHana_SetupUnfoldInnerPetals(this);
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
}
@@ -247,7 +247,7 @@ void BgNumaHana_UnfoldInnerPetals(BgNumaHana* this, PlayState* play) {
this->settleZRotation = 0;
this->settleAngle = 0;
this->settleScale = 420.0f;
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_FLOWERPETAL_STOP);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_FLOWERPETAL_STOP);
}
this->transitionTimer++;
}
@@ -279,7 +279,7 @@ void BgNumaHana_UnfoldOuterPetals(BgNumaHana* this, PlayState* play) {
this->settleZRotation = 0;
this->settleAngle = 0x5120;
this->settleScale = 130.0f;
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_FLOWERPETAL_STOP);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_FLOWERPETAL_STOP);
}
this->transitionTimer++;
}
@@ -314,8 +314,8 @@ void BgNumaHana_RaiseFlower(BgNumaHana* this, PlayState* play) {
child = (DynaPolyActor*)this->dyna.actor.child;
// Swaps out the "closed" flower collision for the "opened" collision.
- func_800C6314(play, &play->colCtx.dyna, child->bgId);
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_EnableCollision(play, &play->colCtx.dyna, child->bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->petalZRotation = 0x2000;
this->innerPetalZRotation = 0x2000;
@@ -327,7 +327,7 @@ void BgNumaHana_RaiseFlower(BgNumaHana* this, PlayState* play) {
this->flowerRotationalVelocity = 0x147;
this->settleScale = 0.0f;
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ CutsceneManager_Stop(this->dyna.actor.csId);
BgNumaHana_SetupOpenedIdle(this);
}
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 e715b5c09..0e377f539 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
@@ -2,6 +2,7 @@
#define Z_BG_NUMA_HANA_H
#include "global.h"
+#include "z_fireobj.h"
#define BG_NUMA_HANA_GET_TYPE(thisx) ((thisx)->params & 1)
#define BG_NUMA_HANA_SWITCH_FLAG(thisx) (((thisx)->params >> 8) & 0x7F)
@@ -40,6 +41,4 @@ typedef struct BgNumaHana {
/* 0x33E */ s16 transitionTimer;
} BgNumaHana; // size = 0x340
-extern const ActorInit Bg_Numa_Hana_InitVars;
-
#endif // Z_BG_NUMA_HANA_H
diff --git a/src/overlays/actors/ovl_Bg_Open_Shutter/overlay.cfg b/src/overlays/actors/ovl_Bg_Open_Shutter/overlay.cfg
deleted file mode 100644
index 8bf55bec2..000000000
--- a/src/overlays/actors/ovl_Bg_Open_Shutter/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Open_Shutter
-z_bg_open_shutter.c
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 6504ec00e..6acbc8aa8 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
@@ -27,7 +27,7 @@ typedef enum {
/* 0x2 */ BGOPENSHUTTER_DOOR_CLOSED,
} BGOpenShutterDoorState;
-const ActorInit Bg_Open_Shutter_InitVars = {
+ActorInit Bg_Open_Shutter_InitVars = {
ACTOR_BG_OPEN_SHUTTER,
ACTORCAT_DOOR,
FLAGS,
@@ -92,7 +92,7 @@ void BgOpenShutter_Init(Actor* thisx, PlayState* play) {
BgOpenShutter* this = THIS;
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_open_obj_Colheader_001640);
this->actionFunc = func_80ACAD88;
}
@@ -111,7 +111,7 @@ void func_80ACAD88(BgOpenShutter* this, PlayState* play) {
if (this->unk_15C != 0) {
Player* player = GET_PLAYER(play);
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_SLIDE_DOOR_OPEN);
+ 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);
this->unk_164 = 0;
this->actionFunc = func_80ACAE5C;
@@ -121,7 +121,7 @@ void func_80ACAD88(BgOpenShutter* this, PlayState* play) {
doorDirection = func_80ACABA8(this, play);
if (doorDirection > 0) {
- player->doorType = 2;
+ player->doorType = PLAYER_DOORTYPE_SLIDING;
player->doorDirection = doorDirection;
player->doorActor = &this->dyna.actor;
func_80122F28(player);
@@ -136,7 +136,7 @@ void func_80ACAE5C(BgOpenShutter* this, PlayState* play) {
this->unk_164++;
}
if (this->unk_164 >= 10) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_SLIDE_DOOR_CLOSE);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_SLIDE_DOOR_CLOSE);
this->actionFunc = func_80ACAEF0;
}
}
@@ -149,7 +149,7 @@ void func_80ACAEF0(BgOpenShutter* this, PlayState* play) {
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_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BIGWALL_BOUND);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BIGWALL_BOUND);
quakeIndex = Quake_Add(Play_GetCamera(play, CAM_ID_MAIN), QUAKE_TYPE_3);
Quake_SetSpeed(quakeIndex, -32536);
@@ -166,20 +166,20 @@ void func_80ACAEF0(BgOpenShutter* this, PlayState* play) {
void BgOpenShutter_Update(Actor* thisx, PlayState* play2) {
BgOpenShutter* this = THIS;
PlayState* play = play2;
- s32 index;
+ s32 cueChannel;
- if (Cutscene_CheckActorAction(play, 0x7C)) {
- index = Cutscene_GetActorActionIndex(play, 0x7C);
- if (play->csCtx.actorActions[index]->action == BGOPENSHUTTER_DOOR_OPEN) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_124)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_124);
+ if (play->csCtx.actorCues[cueChannel]->id == BGOPENSHUTTER_DOOR_OPEN) {
if (this->actionFunc == func_80ACAD88) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_SLIDE_DOOR_OPEN);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_SLIDE_DOOR_OPEN);
this->actionFunc = func_80ACAE5C;
this->dyna.actor.velocity.y = 0.0f;
}
this->unk_164 = 0;
- } else if (play->csCtx.actorActions[index]->action == BGOPENSHUTTER_DOOR_CLOSED) {
+ } else if (play->csCtx.actorCues[cueChannel]->id == BGOPENSHUTTER_DOOR_CLOSED) {
if (this->actionFunc == func_80ACAE5C) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_SLIDE_DOOR_CLOSE);
+ Actor_PlaySfx(&this->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 fdf2791e1..f6c6067d4 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
@@ -16,6 +16,4 @@ typedef struct BgOpenShutter {
/* 0x164 */ s32 unk_164;
} BgOpenShutter; // size = 0x168
-extern const ActorInit Bg_Open_Shutter_InitVars;
-
#endif // Z_BG_OPEN_SHUTTER_H
diff --git a/src/overlays/actors/ovl_Bg_Open_Spot/overlay.cfg b/src/overlays/actors/ovl_Bg_Open_Spot/overlay.cfg
deleted file mode 100644
index 757c3fbfd..000000000
--- a/src/overlays/actors/ovl_Bg_Open_Spot/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Open_Spot
-z_bg_open_spot.c
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 0f800f97b..275b1b565 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
@@ -16,7 +16,7 @@ void BgOpenSpot_Destroy(Actor* thisx, PlayState* play);
void BgOpenSpot_Update(Actor* thisx, PlayState* play);
void BgOpenSpot_Draw(Actor* thisx, PlayState* play);
-const ActorInit Bg_Open_Spot_InitVars = {
+ActorInit Bg_Open_Spot_InitVars = {
ACTOR_BG_OPEN_SPOT,
ACTORCAT_PROP,
FLAGS,
@@ -47,13 +47,13 @@ void BgOpenSpot_Destroy(Actor* thisx, PlayState* play) {
void BgOpenSpot_Update(Actor* thisx, PlayState* play) {
BgOpenSpot* this = THIS;
- u32 action;
+ u32 cueId;
- if (Cutscene_CheckActorAction(play, 0x7D)) {
- action = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x7D)]->action;
- if (action == 1) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_125)) {
+ cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_125)]->id;
+ if (cueId == 1) {
this->actor.draw = NULL;
- } else if (action == 2) {
+ } else if (cueId == 2) {
this->actor.draw = BgOpenSpot_Draw;
}
}
diff --git a/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.h b/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.h
index 3a2b92125..0cc4d55b9 100644
--- a/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.h
+++ b/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.h
@@ -10,6 +10,4 @@ typedef struct BgOpenSpot {
/* 0x144 */ AnimatedMaterial* texScrolls;
} BgOpenSpot; // size = 0x148
-extern const ActorInit Bg_Open_Spot_InitVars;
-
#endif // Z_BG_OPEN_SPOT_H
diff --git a/src/overlays/actors/ovl_Bg_Sinkai_Kabe/overlay.cfg b/src/overlays/actors/ovl_Bg_Sinkai_Kabe/overlay.cfg
deleted file mode 100644
index b2a92fdbf..000000000
--- a/src/overlays/actors/ovl_Bg_Sinkai_Kabe/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Sinkai_Kabe
-z_bg_sinkai_kabe.c
diff --git a/src/overlays/actors/ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.c b/src/overlays/actors/ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.c
index fb8f04d78..1b9e93009 100644
--- a/src/overlays/actors/ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.c
+++ b/src/overlays/actors/ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.c
@@ -24,7 +24,7 @@ void BgSinkaiKabe_Update(Actor* thisx, PlayState* play);
void BgSinkaiKabe_WaitForPlayer(BgSinkaiKabe* this, PlayState* play);
-const ActorInit Bg_Sinkai_Kabe_InitVars = {
+ActorInit Bg_Sinkai_Kabe_InitVars = {
ACTOR_BG_SINKAI_KABE,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -45,7 +45,7 @@ void BgSinkaiKabe_Init(Actor* thisx, PlayState* play) {
Vec3f pos;
s32 pad2;
s32 shouldSpawnSeahorse;
- s32 cs;
+ s32 csId;
s32 i;
DynaPolyActor_Init(&this->dyna, 0);
@@ -54,11 +54,11 @@ void BgSinkaiKabe_Init(Actor* thisx, PlayState* play) {
Math_Vec3f_Copy(&pos, &this->dyna.actor.world.pos);
pos.x += Math_SinS(this->dyna.actor.world.rot.y + 0x8000) * 3000.0f;
pos.z += Math_CosS(this->dyna.actor.world.rot.y + 0x8000) * 3000.0f;
- cs = this->dyna.actor.cutscene;
+ csId = this->dyna.actor.csId;
i = 0;
// clang-format off
- while (cs != -1) { this->cutscenes[i] = cs; cs = ActorCutscene_GetAdditionalCutscene(cs); i++; }
+ while (csId != CS_ID_NONE) { this->csIdList[i] = csId; csId = CutsceneManager_GetAdditionalCsId(csId); i++; }
// clang-format on
this->dyna.actor.scale.x = 0.1f;
@@ -67,29 +67,29 @@ void BgSinkaiKabe_Init(Actor* thisx, PlayState* play) {
this->pythonIndex = sCurrentPythonIndex;
sCurrentPythonIndex++;
- if (!(gSaveContext.save.weekEventReg[13] & 1)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_13_01)) {
this->deepPython = Actor_SpawnAsChild(&play->actorCtx, &this->dyna.actor, play, ACTOR_EN_DRAGON, pos.x, pos.y,
pos.z, 0, this->dyna.actor.world.rot.y, 1, this->dyna.actor.params);
if (this->deepPython != NULL) {
EnDragon* dragon = (EnDragon*)this->deepPython;
- dragon->grabCutsceneIndex = this->cutscenes[0];
- dragon->deathCutsceneIndex = this->cutscenes[1];
- dragon->actor.cutscene = this->dyna.actor.cutscene;
+ dragon->grabCsId = this->csIdList[0];
+ dragon->deathCsId = this->csIdList[1];
+ dragon->actor.csId = this->dyna.actor.csId;
Math_Vec3f_Copy(&dragon->burrowEntrancePos, &this->dyna.actor.world.pos);
dragon->pythonIndex = this->pythonIndex;
}
} else {
shouldSpawnSeahorse = false;
- if (((this->dyna.actor.params == 0) && (gSaveContext.save.weekEventReg[83] & 0x10)) ||
- ((this->dyna.actor.params == 1) && (gSaveContext.save.weekEventReg[83] & 0x20)) ||
- ((this->dyna.actor.params == 2) && (gSaveContext.save.weekEventReg[83] & 0x40)) ||
- ((this->dyna.actor.params == 3) && (gSaveContext.save.weekEventReg[83] & 0x80)) ||
- ((this->dyna.actor.params == 4) && (gSaveContext.save.weekEventReg[84] & 1)) ||
- ((this->dyna.actor.params == 5) && (gSaveContext.save.weekEventReg[84] & 2)) ||
- ((this->dyna.actor.params == 6) && (gSaveContext.save.weekEventReg[84] & 4)) ||
- ((this->dyna.actor.params == 7) && (gSaveContext.save.weekEventReg[84] & 8))) {
+ if (((this->dyna.actor.params == 0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_83_10)) ||
+ ((this->dyna.actor.params == 1) && CHECK_WEEKEVENTREG(WEEKEVENTREG_83_20)) ||
+ ((this->dyna.actor.params == 2) && CHECK_WEEKEVENTREG(WEEKEVENTREG_83_40)) ||
+ ((this->dyna.actor.params == 3) && CHECK_WEEKEVENTREG(WEEKEVENTREG_83_80)) ||
+ ((this->dyna.actor.params == 4) && CHECK_WEEKEVENTREG(WEEKEVENTREG_84_01)) ||
+ ((this->dyna.actor.params == 5) && CHECK_WEEKEVENTREG(WEEKEVENTREG_84_02)) ||
+ ((this->dyna.actor.params == 6) && CHECK_WEEKEVENTREG(WEEKEVENTREG_84_04)) ||
+ ((this->dyna.actor.params == 7) && CHECK_WEEKEVENTREG(WEEKEVENTREG_84_08))) {
shouldSpawnSeahorse = true;
}
@@ -99,11 +99,11 @@ void BgSinkaiKabe_Init(Actor* thisx, PlayState* play) {
pos.z += (Math_CosS(this->dyna.actor.world.rot.y + 0x8000) * 500.0f);
if (shouldSpawnSeahorse) {
Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_OT, pos.x, pos.y, pos.z, 0,
- this->dyna.actor.shape.rot.y, 0, 0x4000, this->dyna.actor.cutscene,
- this->dyna.actor.unk20, NULL);
+ this->dyna.actor.shape.rot.y, 0, 0x4000, this->dyna.actor.csId,
+ this->dyna.actor.halfDaysBits, NULL);
}
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
this->actionFunc = BgSinkaiKabe_WaitForPlayer;
@@ -140,7 +140,7 @@ void BgSinkaiKabe_WaitForPlayer(BgSinkaiKabe* this, PlayState* play) {
}
if (this->deepPython == NULL) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
}
diff --git a/src/overlays/actors/ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.h b/src/overlays/actors/ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.h
index bc39da0ee..96c771c62 100644
--- a/src/overlays/actors/ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.h
+++ b/src/overlays/actors/ovl_Bg_Sinkai_Kabe/z_bg_sinkai_kabe.h
@@ -12,11 +12,9 @@ typedef struct BgSinkaiKabe {
/* 0x000 */ DynaPolyActor dyna;
/* 0x15C */ BgSinkaiKabeActionFunc actionFunc;
/* 0x160 */ Actor* deepPython;
- /* 0x164 */ s16 cutscenes[2];
+ /* 0x164 */ s16 csIdList[2];
/* 0x168 */ UNK_TYPE1 unk_168[0x4];
/* 0x16C */ s32 pythonIndex;
} BgSinkaiKabe; // size = 0x170
-extern const ActorInit Bg_Sinkai_Kabe_InitVars;
-
#endif // Z_BG_SINKAI_KABE_H
diff --git a/src/overlays/actors/ovl_Bg_Spdweb/overlay.cfg b/src/overlays/actors/ovl_Bg_Spdweb/overlay.cfg
deleted file mode 100644
index 9411f4092..000000000
--- a/src/overlays/actors/ovl_Bg_Spdweb/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Spdweb
-z_bg_spdweb.c
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 296f56268..0ebae5c1e 100644
--- a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c
+++ b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c
@@ -24,7 +24,7 @@ void func_809CEBC0(BgSpdweb* this, PlayState* play);
void func_809CEE74(BgSpdweb* this);
void func_809CEEAC(BgSpdweb* this, PlayState* play);
-const ActorInit Bg_Spdweb_InitVars = {
+ActorInit Bg_Spdweb_InitVars = {
ACTOR_BG_SPDWEB,
ACTORCAT_BG,
FLAGS,
@@ -150,7 +150,7 @@ void BgSpdweb_Init(Actor* thisx, PlayState* play) {
this->unk_161 = 0;
this->switchFlag = BGSPDWEB_GET_SWITCHFLAG(&this->dyna.actor);
thisx->params &= 0xFF;
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
if (this->dyna.actor.params == BGSPDWEB_FF_0) {
Collider_InitAndSetTris(play, &this->collider, &this->dyna.actor, &sTrisInit1, this->colliderElements);
@@ -170,7 +170,7 @@ void BgSpdweb_Init(Actor* thisx, PlayState* play) {
this->unk_162 = 0;
if (Flags_GetSwitch(play, this->switchFlag)) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
}
@@ -229,8 +229,8 @@ void func_809CE234(BgSpdweb* this, PlayState* play) {
}
if (this->unk_162 == 0) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
- Actor_MarkForDeath(&this->dyna.actor);
+ CutsceneManager_Stop(this->dyna.actor.csId);
+ Actor_Kill(&this->dyna.actor);
return;
}
@@ -278,7 +278,7 @@ void func_809CE4C8(BgSpdweb* this, PlayState* play) {
sp40.x = this->dyna.actor.world.pos.x;
sp40.y = this->dyna.actor.world.pos.y - 50.0f;
sp40.z = this->dyna.actor.world.pos.z;
- sp3A = player->unk_B6A;
+ sp3A = player->fallDistance;
if (Player_IsBurningStickInRange(play, &sp40, 70.0f, 50.0f)) {
this->dyna.actor.home.pos.x = player->meleeWeaponInfo[0].tip.x;
@@ -297,7 +297,7 @@ void func_809CE4C8(BgSpdweb* this, PlayState* play) {
return;
}
- if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
sp3A = 300;
break;
}
@@ -305,16 +305,16 @@ void func_809CE4C8(BgSpdweb* this, PlayState* play) {
}
}
- if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
temp_f12 = 2.0f * sqrtf(CLAMP_MIN(sp3A, 0));
if ((this->unk_164 < temp_f12) && (temp_f12 > 2.0f)) {
this->unk_164 = temp_f12;
this->unk_162 = 12;
if (sp3A > 50) {
- player->stateFlags1 |= 0x20;
+ player->stateFlags1 |= PLAYER_STATE1_20;
this->unk_161 = 1;
}
- } else if (player->actor.speedXZ != 0.0f) {
+ } else if (player->actor.speed != 0.0f) {
this->unk_164 = CLAMP_MIN(this->unk_164, 2.0f);
}
}
@@ -327,16 +327,15 @@ void func_809CE4C8(BgSpdweb* this, PlayState* play) {
Math_ApproachZeroF(&this->unk_164, 1.0f, 0.8f);
if (this->unk_162 == 4) {
- if ((this->unk_161 != 0) ||
- ((DynaPolyActor_IsInRidingMovingState(&this->dyna) != 0) && (this->unk_164 > 2.0f))) {
+ if ((this->unk_161 != 0) || (DynaPolyActor_IsPlayerOnTop(&this->dyna) && (this->unk_164 > 2.0f))) {
player->actor.velocity.y = this->unk_164 * 0.7f;
- player->unk_B68 = (SQ(this->unk_164) * 0.15f) + this->dyna.actor.world.pos.y;
+ player->fallStartHeight = (SQ(this->unk_164) * 0.15f) + this->dyna.actor.world.pos.y;
this->unk_161 = 0;
- player->stateFlags1 &= ~0x20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
}
} else if (this->unk_162 == 11) {
if (this->unk_164 > 3.0f) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_WEB_VIBRATION);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WEB_VIBRATION);
} else {
AudioSfx_StopById(NA_SE_EV_WEB_VIBRATION);
}
@@ -370,10 +369,10 @@ void func_809CE830(BgSpdweb* this, PlayState* play) {
}
if (this->unk_162 == 0) {
- if (ActorCutscene_GetLength(this->dyna.actor.cutscene) == -1) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ if (CutsceneManager_GetLength(this->dyna.actor.csId) == -1) {
+ CutsceneManager_Stop(this->dyna.actor.csId);
}
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
@@ -450,7 +449,7 @@ void func_809CEBC0(BgSpdweb* this, PlayState* play) {
this->dyna.actor.world.pos.z;
}
func_809CEE74(this);
- } else if ((player->itemActionParam == 7) && (player->unk_B28 != 0)) {
+ } else if ((player->heldItemAction == PLAYER_IA_STICK) && (player->unk_B28 != 0)) {
Math_Vec3f_Diff(&player->meleeWeaponInfo[0].tip, &this->dyna.actor.world.pos, &sp3C);
sp38 = Math_SinS(-this->dyna.actor.shape.rot.x);
sp34 = Math_CosS(-this->dyna.actor.shape.rot.x);
@@ -471,16 +470,16 @@ void func_809CEBC0(BgSpdweb* this, PlayState* play) {
}
void func_809CEE74(BgSpdweb* this) {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
this->actionFunc = func_809CEEAC;
}
void func_809CEEAC(BgSpdweb* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
func_809CE1D0(this, play);
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
diff --git a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.h b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.h
index 64a6fd34b..c57353ce0 100644
--- a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.h
+++ b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.h
@@ -24,6 +24,4 @@ typedef struct BgSpdweb {
/* 0x2F8 */ Vec3s* unk_2F8;
} BgSpdweb; // size = 0x2FC
-extern const ActorInit Bg_Spdweb_InitVars;
-
#endif // Z_BG_SPDWEB_H
diff --git a/src/overlays/actors/ovl_Bg_Spout_Fire/overlay.cfg b/src/overlays/actors/ovl_Bg_Spout_Fire/overlay.cfg
deleted file mode 100644
index bad8eedab..000000000
--- a/src/overlays/actors/ovl_Bg_Spout_Fire/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Spout_Fire
-z_bg_spout_fire.c
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 055598c00..fdf56d87c 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
@@ -22,7 +22,7 @@ void func_80A60CDC(BgSpoutFire* this, PlayState* play);
void func_80A60D10(BgSpoutFire* this, PlayState* play);
void func_80A60E08(BgSpoutFire* this, PlayState* play);
-const ActorInit Bg_Spout_Fire_InitVars = {
+ActorInit Bg_Spout_Fire_InitVars = {
ACTOR_BG_SPOUT_FIRE,
ACTORCAT_BG,
FLAGS,
diff --git a/src/overlays/actors/ovl_Bg_Spout_Fire/z_bg_spout_fire.h b/src/overlays/actors/ovl_Bg_Spout_Fire/z_bg_spout_fire.h
index 808b72061..5cbf36a05 100644
--- a/src/overlays/actors/ovl_Bg_Spout_Fire/z_bg_spout_fire.h
+++ b/src/overlays/actors/ovl_Bg_Spout_Fire/z_bg_spout_fire.h
@@ -15,6 +15,4 @@ typedef struct BgSpoutFire {
/* 0x14C */ ColliderCylinder collider;
} BgSpoutFire; // size = 0x198
-extern const ActorInit Bg_Spout_Fire_InitVars;
-
#endif // Z_BG_SPOUT_FIRE_H
diff --git a/src/overlays/actors/ovl_Bg_Tobira01/overlay.cfg b/src/overlays/actors/ovl_Bg_Tobira01/overlay.cfg
deleted file mode 100644
index 7b142082d..000000000
--- a/src/overlays/actors/ovl_Bg_Tobira01/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Tobira01
-z_bg_tobira01.c
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 55276b217..17722bda2 100644
--- a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c
+++ b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c
@@ -16,6 +16,7 @@ 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,
@@ -27,84 +28,14 @@ const ActorInit Bg_Tobira01_InitVars = {
(ActorFunc)BgTobira01_Update,
(ActorFunc)BgTobira01_Draw,
};
+*/
-void BgTobira01_Open(BgTobira01* this, PlayState* play) {
- Player* player = GET_PLAYER(play);
- s16 cutsceneId = this->dyna.actor.cutscene;
- s16 prevTimer;
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Tobira01/func_80B12430.s")
- if (this->playCutscene) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- } else if (ActorCutscene_GetCanPlayNext(cutsceneId)) {
- ActorCutscene_StartAndSetUnkLinkFields(cutsceneId, &this->dyna.actor);
- gSaveContext.save.weekEventReg[88] |= 0x40;
- this->playCutscene = false;
- } else {
- ActorCutscene_SetIntentToPlay(cutsceneId);
- }
- } else if (!(gSaveContext.save.weekEventReg[88] & 0x40) && (this->timer == 0) && (play->actorCtx.unk1F5 != 0) &&
- (play->actorCtx.unk1F4 == 0) &&
- (SurfaceType_GetSceneExitIndex(&play->colCtx, player->actor.floorPoly, player->actor.floorBgId) == 6)) {
- this->playCutscene = true;
- this->unk_16C = 0; // this variable is not used anywhere else
- }
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Tobira01/BgTobira01_Init.s")
- prevTimer = this->timer;
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Tobira01/BgTobira01_Destroy.s")
- if (gSaveContext.save.weekEventReg[88] & 0x40) {
- this->timer++;
- } else {
- this->timer--;
- };
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Tobira01/BgTobira01_Update.s")
- this->timer = CLAMP(this->timer, 0, 60);
-
- if (this->timer != prevTimer) {
- if (1) {}
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_STONEDOOR_OPEN_S - SFX_FLAG);
- this->dyna.actor.world.pos.y = (this->yOffset = (this->timer * (5.0f / 3.0f)) + this->dyna.actor.home.pos.y);
- this->timer2 = 180;
- }
-
- if (!(player->stateFlags1 & 0x40) && (gSaveContext.save.weekEventReg[88] & 0x40) && (DECR(this->timer2) == 0)) {
- gSaveContext.save.weekEventReg[88] &= (u8)~0x40;
- }
-}
-
-void BgTobira01_Init(Actor* thisx, PlayState* play) {
- BgTobira01* this = THIS;
- s32 pad;
-
- DynaPolyActor_Init(&this->dyna, 1);
- DynaPolyActor_LoadMesh(play, &this->dyna, &object_spot11_obj_Colheader_0011C0);
- gSaveContext.save.weekEventReg[88] &= (u8)~0x40;
- Actor_SetScale(&this->dyna.actor, 1.0f);
- this->timer2 = gSaveContext.save.isNight;
- this->timer = 0;
- this->actionFunc = BgTobira01_Open;
-}
-
-void BgTobira01_Destroy(Actor* thisx, PlayState* play) {
- BgTobira01* this = THIS;
- s32 pad;
-
- DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
-}
-
-void BgTobira01_Update(Actor* thisx, PlayState* play) {
- BgTobira01* this = THIS;
- s32 pad;
-
- this->actionFunc(this, play);
-}
-
-void BgTobira01_Draw(Actor* thisx, PlayState* play) {
- OPEN_DISPS(play->state.gfxCtx);
-
- func_8012C28C(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_spot11_obj_DL_000088);
-
- CLOSE_DISPS(play->state.gfxCtx);
-}
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Tobira01/BgTobira01_Draw.s")
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 559ea6351..9ddd0233d 100644
--- a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.h
+++ b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.h
@@ -5,18 +5,9 @@
struct BgTobira01;
-typedef void (*BgTobira01ActionFunc)(struct BgTobira01*, struct PlayState*);
-
typedef struct BgTobira01 {
- /* 0x000 */ DynaPolyActor dyna;
- /* 0x15C */ BgTobira01ActionFunc actionFunc;
- /* 0x160 */ s16 timer;
- /* 0x162 */ s16 timer2;
- /* 0x164 */ f32 yOffset;
- /* 0x168 */ s32 playCutscene;
- /* 0x16C */ s32 unk_16C; // unused besides being set to 0
+ /* 0x000 */ Actor actor;
+ /* 0x144 */ char unk_144[0x2C];
} BgTobira01; // size = 0x170
-extern const ActorInit Bg_Tobira01_InitVars;
-
#endif // Z_BG_TOBIRA01_H
diff --git a/src/overlays/actors/ovl_Bg_Umajump/overlay.cfg b/src/overlays/actors/ovl_Bg_Umajump/overlay.cfg
deleted file mode 100644
index 3678ab523..000000000
--- a/src/overlays/actors/ovl_Bg_Umajump/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Bg_Umajump
-z_bg_umajump.c
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 2a584bb31..d4d2c7274 100644
--- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c
+++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c
@@ -18,7 +18,7 @@ void BgUmajump_Draw(Actor* thisx, PlayState* play);
void func_8091A5A0(Actor* thisx, PlayState* play);
-const ActorInit Bg_Umajump_InitVars = {
+ActorInit Bg_Umajump_InitVars = {
ACTOR_BG_UMAJUMP,
ACTORCAT_PROP,
FLAGS,
@@ -47,24 +47,24 @@ void func_80919F30(BgUmajump* this, PlayState* play) {
}
void BgUmajump_StopCutscene(BgUmajump* this, PlayState* play) {
- if ((play->csCtx.frames >= 6) && !this->hasSoundPlayed) {
+ if ((play->csCtx.curFrame >= 6) && !this->hasSoundPlayed) {
this->hasSoundPlayed = true;
play_sound(NA_SE_EV_KID_HORSE_NEIGH);
}
- if (play->csCtx.state == CS_STATE_0) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ if (play->csCtx.state == CS_STATE_IDLE) {
+ CutsceneManager_Stop(this->dyna.actor.csId);
this->dyna.actor.update = Actor_Noop;
}
}
void BgUmajump_PlayCutscene(BgUmajump* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
- gSaveContext.save.weekEventReg[89] |= 0x20;
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
+ SET_WEEKEVENTREG(WEEKEVENTREG_89_20);
this->actionFunc = BgUmajump_StopCutscene;
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
@@ -93,9 +93,9 @@ void BgUmajump_Init(Actor* thisx, PlayState* play) {
thisx->params = BG_UMAJUMP_GET_FF(thisx);
if ((thisx->params == BG_UMAJUMP_TYPE_2)) {
- if ((((play->sceneId == SCENE_F01) && !(gSaveContext.save.weekEventReg[89] & 0x20)) &&
+ if ((((play->sceneId == SCENE_F01) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_89_20)) &&
!CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) &&
- (thisx->cutscene != -1)) {
+ (thisx->csId != CS_ID_NONE)) {
this->actionFunc = BgUmajump_CheckDistance;
thisx->update = func_8091A5A0;
thisx->flags |= ACTOR_FLAG_10;
@@ -107,13 +107,13 @@ void BgUmajump_Init(Actor* thisx, PlayState* play) {
this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_UMAJUMP);
if (this->objectIndex < 0) {
- Actor_MarkForDeath(thisx);
+ Actor_Kill(thisx);
}
if ((thisx->params == BG_UMAJUMP_TYPE_3) && CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_KANBAN, thisx->world.pos.x, thisx->world.pos.y,
thisx->world.pos.z, thisx->shape.rot.x, thisx->shape.rot.y, thisx->shape.rot.z, 0x3E);
- Actor_MarkForDeath(thisx);
+ Actor_Kill(thisx);
}
}
}
@@ -134,11 +134,11 @@ void BgUmajump_Update(Actor* thisx, PlayState* play) {
Actor_SetObjectDependency(play, &this->dyna.actor);
if (this->dyna.actor.params == BG_UMAJUMP_TYPE_5) {
- if (gSaveContext.save.weekEventReg[22] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558);
}
} else if (this->dyna.actor.params == BG_UMAJUMP_TYPE_6) {
- if (!(gSaveContext.save.weekEventReg[22] & 1)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
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,20 +155,20 @@ 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) && (gSaveContext.save.weekEventReg[22] & 1)) {
+ if ((this->dyna.bgId == BGACTOR_NEG_ONE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
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) &&
- (!(gSaveContext.save.weekEventReg[22] & 1) ||
+ (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) ||
((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);
}
- func_800C641C(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableFloorCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->dyna.actor.update = func_8091A5A0;
} else if (this->dyna.actor.params == BG_UMAJUMP_TYPE_4) {
- func_800C641C(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableFloorCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->dyna.actor.update = Actor_Noop;
} else {
this->dyna.actor.update = Actor_Noop;
@@ -187,22 +187,22 @@ void func_8091A5A0(Actor* thisx, PlayState* play) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_KANBAN, this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y,
this->dyna.actor.world.pos.z, this->dyna.actor.shape.rot.x, this->dyna.actor.shape.rot.y,
this->dyna.actor.shape.rot.z, 0x3E);
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
if (this->dyna.actor.params == BG_UMAJUMP_TYPE_5) {
- if ((this->dyna.bgId == BGACTOR_NEG_ONE) && (gSaveContext.save.weekEventReg[22] & 1)) {
+ if ((this->dyna.bgId == BGACTOR_NEG_ONE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558);
- } else if ((this->dyna.bgId != BGACTOR_NEG_ONE) && !(gSaveContext.save.weekEventReg[22] & 1)) {
+ } else if ((this->dyna.bgId != BGACTOR_NEG_ONE) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
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) &&
- (!(gSaveContext.save.weekEventReg[22] & 1) ||
+ (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) ||
((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) && (gSaveContext.save.weekEventReg[22] & 1) &&
+ } else if ((this->dyna.bgId != BGACTOR_NEG_ONE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) &&
((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 733bf77da..62aaf6cb7 100644
--- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h
+++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h
@@ -30,6 +30,4 @@ typedef struct BgUmajump {
/* 0x168 */ Actor* horse;
} BgUmajump; // size = 0x16C
-extern const ActorInit Bg_Umajump_InitVars;
-
#endif // Z_BG_UMAJUMP_H
diff --git a/src/overlays/actors/ovl_Boss_01/overlay.cfg b/src/overlays/actors/ovl_Boss_01/overlay.cfg
deleted file mode 100644
index d11a70ed1..000000000
--- a/src/overlays/actors/ovl_Boss_01/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Boss_01
-z_boss_01.c
diff --git a/src/overlays/actors/ovl_Boss_01/z_boss_01.c b/src/overlays/actors/ovl_Boss_01/z_boss_01.c
index 40800569f..8d13ab6d3 100644
--- a/src/overlays/actors/ovl_Boss_01/z_boss_01.c
+++ b/src/overlays/actors/ovl_Boss_01/z_boss_01.c
@@ -234,7 +234,7 @@ static ColliderCylinderInit D_809D7CA0 = {
{ 8, 15, 10, { 0, 0, 0 } },
};
-const ActorInit Boss_01_InitVars = {
+ActorInit Boss_01_InitVars = {
ACTOR_BOSS_01,
ACTORCAT_BOSS,
FLAGS,
diff --git a/src/overlays/actors/ovl_Boss_01/z_boss_01.h b/src/overlays/actors/ovl_Boss_01/z_boss_01.h
index 3d874a01f..37c8d4b00 100644
--- a/src/overlays/actors/ovl_Boss_01/z_boss_01.h
+++ b/src/overlays/actors/ovl_Boss_01/z_boss_01.h
@@ -14,6 +14,4 @@ typedef struct Boss01 {
/* 0x468 */ char unk_468[0x674];
} Boss01; // size = 0xADC
-extern const ActorInit Boss_01_InitVars;
-
#endif // Z_BOSS_01_H
diff --git a/src/overlays/actors/ovl_Boss_02/overlay.cfg b/src/overlays/actors/ovl_Boss_02/overlay.cfg
deleted file mode 100644
index 6bf46fe21..000000000
--- a/src/overlays/actors/ovl_Boss_02/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Boss_02
-z_boss_02.c
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 0d0e55e62..eae9fe0b3 100644
--- a/src/overlays/actors/ovl_Boss_02/z_boss_02.c
+++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.c
@@ -112,7 +112,7 @@ static DamageTable sRedTwinmoldDamageTable = {
/* Powder Keg */ DMG_ENTRY(1, 0xF),
};
-const ActorInit Boss_02_InitVars = {
+ActorInit Boss_02_InitVars = {
ACTOR_BOSS_02,
ACTORCAT_BOSS,
FLAGS,
@@ -462,20 +462,20 @@ Vec3f D_809DFA2C[] = {
{ -800.0f, -1000.0f, 0.0f }, { -800.0f, -1000.0f, 0.0f }, { -800.0f, -1000.0f, 0.0f },
};
-void func_809DA1D0(PlayState* play, u8 arg1, u8 arg2, u8 arg3, u8 arg4) {
- MREG(64) = 1;
- MREG(65) = arg1;
- MREG(66) = arg2;
- MREG(67) = arg3;
- MREG(68) = arg4;
+void func_809DA1D0(PlayState* play, u8 red, u8 green, u8 blue, u8 alpha) {
+ R_PLAY_FILL_SCREEN_ON = true;
+ R_PLAY_FILL_SCREEN_R = red;
+ R_PLAY_FILL_SCREEN_G = green;
+ R_PLAY_FILL_SCREEN_B = blue;
+ R_PLAY_FILL_SCREEN_ALPHA = alpha;
}
-void func_809DA22C(PlayState* play, u8 arg1) {
- MREG(68) = arg1;
+void func_809DA22C(PlayState* play, u8 alpha) {
+ R_PLAY_FILL_SCREEN_ALPHA = alpha;
}
void func_809DA24C(PlayState* play) {
- MREG(64) = 0;
+ R_PLAY_FILL_SCREEN_ON = false;
}
void Boss02_SpawnEffectSand(TwinmoldEffect* effects, Vec3f* pos, f32 scale) {
@@ -550,7 +550,7 @@ void Boss02_Init(Actor* thisx, PlayState* play) {
s32 i;
s32 pad[2];
- if ((gSaveContext.save.weekEventReg[52] & 0x20) && (this->actor.params == TWINMOLD_RED)) {
+ 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);
@@ -566,7 +566,7 @@ void Boss02_Init(Actor* thisx, PlayState* play) {
this->actor.draw = Boss02_Static_Draw;
this->actor.flags &= ~ACTOR_FLAG_1;
this->unk_1D70 = 0.00999999977648f;
- if ((KREG(64) != 0) || (gSaveContext.eventInf[5] & 0x20) || (sBlueWarp != NULL)) {
+ if ((KREG(64) != 0) || CHECK_EVENTINF(EVENTINF_55) || (sBlueWarp != NULL)) {
this->unk_1D20 = 0;
sMusicStartTimer = KREG(15) + 20;
} else {
@@ -709,10 +709,10 @@ void func_809DAB78(Boss02* this, PlayState* play) {
this->unk_0168 = 2000.0f;
if (this->unk_0195 != 0) {
- this->actor.speedXZ = this->unk_01A8 * D_809DF5B0 * 1.25f;
+ this->actor.speed = this->unk_01A8 * D_809DF5B0 * 1.25f;
this->skelAnime.playSpeed = 2.0f;
} else {
- this->actor.speedXZ = this->unk_01A8 * D_809DF5B0;
+ this->actor.speed = this->unk_01A8 * D_809DF5B0;
}
Actor_UpdateVelocityWithoutGravity(&this->actor);
@@ -731,7 +731,7 @@ void func_809DAB78(Boss02* this, PlayState* play) {
this->unk_0170 = this->unk_017C;
this->unk_0170.y = temp_f0;
this->unk_016C = 120;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_INBOSS_ROAR_OLD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_INBOSS_ROAR_OLD);
}
this->actor.flags &= ~ACTOR_FLAG_1;
@@ -750,9 +750,9 @@ void func_809DAB78(Boss02* this, PlayState* play) {
this->unk_01BC[this->unk_014E].y = this->actor.world.pos.y;
this->unk_01BC[this->unk_014E].z = this->actor.world.pos.z;
- this->unk_0B1C[this->unk_014E].x = BINANG_TO_RAD(this->actor.world.rot.x);
- this->unk_0B1C[this->unk_014E].y = BINANG_TO_RAD(this->actor.world.rot.y);
- this->unk_0B1C[this->unk_014E].z = BINANG_TO_RAD(this->actor.world.rot.z);
+ this->unk_0B1C[this->unk_014E].x = BINANG_TO_RAD_ALT(this->actor.world.rot.x);
+ this->unk_0B1C[this->unk_014E].y = BINANG_TO_RAD_ALT(this->actor.world.rot.y);
+ this->unk_0B1C[this->unk_014E].z = BINANG_TO_RAD_ALT(this->actor.world.rot.z);
}
if ((this->unk_0144 < 10) && (otherTwinmold->unk_0144 >= 20)) {
@@ -940,13 +940,13 @@ void func_809DAB78(Boss02* this, PlayState* play) {
sTwinmoldStatic->subCamAtVel = 0.0f;
play_sound(NA_SE_EN_INBOSS_DEAD_PRE2_OLD);
} else if (!(this->unk_0146[1] & 0xF) && (Rand_ZeroOne() < 0.5f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_INBOSS_DAMAGE_OLD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_INBOSS_DAMAGE_OLD);
}
return;
case 21:
this->unk_01A8 = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->unk_0146[0] == 0) {
this->unk_0146[0] = 3;
@@ -968,20 +968,20 @@ void func_809DAB78(Boss02* this, PlayState* play) {
spCC = player->actor.world.pos.x - this->actor.world.pos.x;
spC4 = player->actor.world.pos.z - this->actor.world.pos.z;
if (sqrtf(SQ(spCC) + SQ(spC4)) < (400.0f * D_809DF5B0)) {
- this->actor.speedXZ = 15.0f * D_809DF5B0;
+ this->actor.speed = 15.0f * D_809DF5B0;
}
spCC = this->actor.world.pos.x;
spC4 = this->actor.world.pos.z;
if (sqrtf(SQ(spCC) + SQ(spC4)) < (400.0f * D_809DF5B0)) {
- this->actor.speedXZ = 15.0f * D_809DF5B0;
+ this->actor.speed = 15.0f * D_809DF5B0;
}
if (otherTwinmold->unk_0144 >= 10) {
- Audio_QueueSeqCmd(NA_BGM_CLEAR_BOSS | 0x8000);
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_CLEAR_BOSS | SEQ_FLAG_ASYNC);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_INBOSS_DEAD_OLD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_INBOSS_DEAD_OLD);
}
}
return;
@@ -993,11 +993,11 @@ void func_809DAB78(Boss02* this, PlayState* play) {
this->unk_0B1C[i].y += this->unk_0164;
Math_ApproachF(&this->unk_0B1C[i].x, -(M_PI / 2), 0.1f, 0.07f);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 150.0f, 100.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 150.0f, 100.0f, UPDBGCHECKINFO_FLAG_4);
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->unk_0144 = 23;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->unk_0170 = this->unk_017C;
this->unk_016C = 30;
this->unk_0170.y = this->actor.floorHeight;
@@ -1074,7 +1074,7 @@ void func_809DBFB4(Boss02* this, PlayState* play) {
this->unk_0156 = 15;
if (i == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_INBOSS_DAMAGE_OLD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_INBOSS_DAMAGE_OLD);
this->unk_015C = 1;
} else {
Audio_PlaySfxAtPos(&this->unk_167C, NA_SE_EN_INBOSS_DAMAGE_OLD);
@@ -1097,14 +1097,14 @@ void func_809DBFB4(Boss02* this, PlayState* play) {
} while (0);
if ((s8)this->actor.colChkInfo.health <= 0) {
- Actor_MarkForDeath(this->actor.child);
+ Actor_Kill(this->actor.child);
this->actor.child = NULL;
Enemy_StartFinishingBlow(play, &this->actor);
this->skelAnime.playSpeed = 2.0f;
this->unk_0144 = 20;
if (otherTwinmold->unk_0144 >= 10) {
- Audio_QueueSeqCmd(0x100100FF);
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 1);
} else {
otherTwinmold->unk_0195 = 1;
}
@@ -1200,9 +1200,9 @@ void Boss02_Twinmold_Update(Actor* thisx, PlayState* play) {
if (this->unk_016C != 0) {
if ((this->unk_016C == 60) && (this->unk_0144 < 20)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_INBOSS_ROAR_OLD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_INBOSS_ROAR_OLD);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_INBOSS_SAND_OLD - SFX_FLAG);
+ 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;
@@ -1287,17 +1287,17 @@ void Boss02_Static_Update(Actor* thisx, PlayState* play) {
this->unk_1D74 = KREG(23) + -15.0f;
D_801F4E30 = 0;
play->envCtx.lightSettingOverride = 1;
- play->skyboxId = 1;
+ play->skyboxId = SKYBOX_NORMAL_SKY;
} else if (!sIsInGiantMode) {
this->unk_1D74 = 0.0f;
D_801F4E30 = this->unk_1D7C;
play->envCtx.lightSettingOverride = 0;
- play->skyboxId = 2;
+ play->skyboxId = SKYBOX_2;
} else {
this->unk_1D74 = KREG(23) + -15.0f;
D_801F4E30 = ((KREG(24) * 0.1f) + 1.0f) * this->unk_1D7C;
play->envCtx.lightSettingOverride = 1;
- play->skyboxId = 1;
+ play->skyboxId = SKYBOX_NORMAL_SKY;
}
Math_ApproachS(&this->unk_1D7C, this->unk_1D7E, 1, 3);
@@ -1310,7 +1310,7 @@ void Boss02_Static_Update(Actor* thisx, PlayState* play) {
if (sMusicStartTimer != 0) {
sMusicStartTimer--;
if (sMusicStartTimer == 0) {
- Audio_QueueSeqCmd(NA_BGM_BOSS | 0x8000);
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_BOSS | SEQ_FLAG_ASYNC);
}
}
}
@@ -1336,8 +1336,8 @@ void Boss02_Twinmold_Draw(Actor* thisx, PlayState* play2) {
Boss02* this = THIS;
s32 i;
s32 idx;
- Mtx* mtx;
- Mtx* mtxIter;
+ Mtx* mtxHead = GRAPH_ALLOC(play->state.gfxCtx, 23 * sizeof(Mtx));
+ Mtx* mtx = mtxHead;
s32 phi_v0;
f32 phi_f12;
f32 spAC;
@@ -1347,8 +1347,6 @@ void Boss02_Twinmold_Draw(Actor* thisx, PlayState* play2) {
f32 sp9C;
f32 sp98;
- mtxIter = mtx = GRAPH_ALLOC(play->state.gfxCtx, sizeof(Mtx) * 23);
-
OPEN_DISPS(play->state.gfxCtx);
func_8012C28C(play->state.gfxCtx);
@@ -1359,7 +1357,7 @@ void Boss02_Twinmold_Draw(Actor* thisx, PlayState* play2) {
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gTwinmoldBlueSkinTex));
}
- gSPSegment(POLY_OPA_DISP++, 0x0D, mtx);
+ gSPSegment(POLY_OPA_DISP++, 0x0D, mtxHead);
if (!sIsInGiantMode) {
sp98 = -500.0f;
@@ -1392,11 +1390,11 @@ void Boss02_Twinmold_Draw(Actor* thisx, PlayState* play2) {
}
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, &this->actor);
- POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP);
+ POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
spA4 = 0.0f;
spA0 = 0.0f;
- for (i = 0; i < ARRAY_COUNT(D_809DFA9C); i++, mtxIter++) {
+ for (i = 0; i < ARRAY_COUNT(D_809DFA9C); i++, mtx++) {
if (this->unk_0195 != 0) {
phi_v0 = (D_809DF5E4[i + 1] + this->unk_014E) % ARRAY_COUNT(this->unk_01BC);
} else {
@@ -1415,9 +1413,9 @@ void Boss02_Twinmold_Draw(Actor* thisx, PlayState* play2) {
Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY);
Matrix_RotateYF(M_PI / 2, MTXMODE_APPLY);
Matrix_RotateXFApply(-(M_PI / 2));
- Matrix_ToMtx(mtxIter);
+ Matrix_ToMtx(mtx);
- gSPMatrix(POLY_OPA_DISP++, mtxIter, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPMatrix(POLY_OPA_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
if ((this->unk_0156 & 1) && (i >= this->unk_0158) && (this->unk_015A >= i)) {
POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 255, 0, 0, 255, 0x384, 0x44B);
@@ -1427,7 +1425,7 @@ void Boss02_Twinmold_Draw(Actor* thisx, PlayState* play2) {
if (sp98 < this->unk_01BC[phi_v0].y) {
gSPDisplayList(POLY_OPA_DISP++, D_809DFA9C[i]);
}
- POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP);
+ POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
}
if (i == 21) {
@@ -1578,7 +1576,7 @@ void Boss02_DrawEffects(PlayState* play) {
for (i = 0, flag = false; i < ARRAY_COUNT(sEffects); i++, effect++) {
if (effect->type == TWINMOLD_EFFECT_FLASH) {
if (!flag) { //! @bug - dev forgot to set flag to 1, should only apply to first entry?
- gSPDisplayList(POLY_XLU_DISP++, gLightOrb1DL);
+ gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 128);
}
@@ -1589,7 +1587,7 @@ void Boss02_DrawEffects(PlayState* play) {
Matrix_Scale(effect->scale * D_809DF5B0, effect->scale * D_809DF5B0, 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++, gLightOrbVtxDL);
+ gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL);
}
}
@@ -1626,18 +1624,18 @@ void func_809DD934(Boss02* this, PlayState* play) {
Vec3f sp58;
u8 sp57 = 0;
f32 phi_f0_2;
- s16 phi_v1;
+ s16 alpha;
this->unk_1D14++;
switch (this->unk_1D18) {
case 0:
- if (player->stateFlags1 & 0x100) {
- Cutscene_Start(play, &play->csCtx);
+ if (player->stateFlags1 & PLAYER_STATE1_100) {
+ Cutscene_StartManual(play, &play->csCtx);
this->subCamId = Play_CreateSubCamera(play);
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_ACTIVE);
- func_8016566C(150);
+ Play_EnableMotionBlur(150);
this->unk_1D14 = 0;
this->subCamAtVel = 0.0f;
this->unk_1D58 = 0.0f;
@@ -1753,11 +1751,11 @@ void func_809DD934(Boss02* this, PlayState* play) {
this->unk_1D18 = 0;
func_80169AFC(play, this->subCamId, 0);
this->subCamId = SUB_CAM_ID_DONE;
- Cutscene_End(play, &play->csCtx);
+ Cutscene_StopManual(play, &play->csCtx);
this->actor.flags |= ACTOR_FLAG_1;
- player->stateFlags1 &= ~0x100;
+ player->stateFlags1 &= ~PLAYER_STATE1_100;
this->unk_1D70 = 0.01f;
- func_80165690();
+ Play_DisableMotionBlur();
break;
}
@@ -1788,7 +1786,7 @@ void func_809DD934(Boss02* this, PlayState* play) {
player->actor.world.pos.x *= 10.0f;
player->actor.world.pos.y -= 3150.0f;
player->actor.world.pos.y *= 10.0f;
- player->unk_B68 = player->actor.world.pos.y;
+ player->fallStartHeight = player->actor.world.pos.y;
player->actor.world.pos.z *= 10.0f;
if ((sBlueWarp != NULL) && ((SQ(player->actor.world.pos.z) + SQ(player->actor.world.pos.x)) < SQ(60.0f))) {
@@ -1860,7 +1858,7 @@ void func_809DD934(Boss02* this, PlayState* play) {
player->actor.world.pos.x *= 0.1f;
player->actor.world.pos.y *= 0.1f;
player->actor.world.pos.y += 3150.0f;
- player->unk_B68 = player->actor.world.pos.y;
+ player->fallStartHeight = player->actor.world.pos.y;
player->actor.world.pos.z *= 0.1f;
sRedTwinmold->actor.world.pos.x *= 0.1f;
@@ -1924,7 +1922,7 @@ void func_809DD934(Boss02* this, PlayState* play) {
temp_a0_5 = play->actorCtx.actorLists[ACTORCAT_BG].first;
while (temp_a0_5 != NULL) {
if (temp_a0_5->id == ACTOR_BG_INIBS_MOVEBG) {
- Actor_MarkForDeath(temp_a0_5);
+ Actor_Kill(temp_a0_5);
break;
}
temp_a0_5 = temp_a0_5->next;
@@ -1959,7 +1957,7 @@ void func_809DD934(Boss02* this, PlayState* play) {
temp_a0_5->world.pos.x *= phi_f0_2;
temp_a0_5->world.pos.z *= phi_f0_2;
- temp_a0_5->speedXZ *= phi_f0_2;
+ temp_a0_5->speed *= phi_f0_2;
temp_a0_5->velocity.x *= phi_f0_2;
temp_a0_5->velocity.y *= phi_f0_2;
@@ -1995,11 +1993,9 @@ void func_809DD934(Boss02* this, PlayState* play) {
if (this->unk_1D7A >= 400) {
this->unk_1D78 = 3;
}
- phi_v1 = this->unk_1D7A;
- if (phi_v1 > 255) {
- phi_v1 = 255;
- }
- func_809DA22C(play, phi_v1);
+ alpha = this->unk_1D7A;
+ alpha = CLAMP_MAX(alpha, 255);
+ func_809DA22C(play, alpha);
break;
case 3:
@@ -2009,11 +2005,9 @@ void func_809DD934(Boss02* this, PlayState* play) {
this->unk_1D78 = 0;
func_809DA24C(play);
} else {
- phi_v1 = this->unk_1D7A;
- if (phi_v1 > 255) {
- phi_v1 = 255;
- }
- func_809DA22C(play, phi_v1);
+ alpha = this->unk_1D7A;
+ alpha = CLAMP_MAX(alpha, 255);
+ func_809DA22C(play, alpha);
}
break;
}
@@ -2056,10 +2050,11 @@ void func_809DEAC4(Boss02* this, PlayState* play) {
break;
case 1:
- if ((gSaveContext.save.weekEventReg[52] & 0x20) || ((u32)(KREG(13) + 15) >= this->unk_1D1C)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE) ||
+ ((u32)(KREG(13) + 15) >= this->unk_1D1C)) {
break;
}
- Cutscene_Start(play, &play->csCtx);
+ Cutscene_StartManual(play, &play->csCtx);
this->subCamId = Play_CreateSubCamera(play);
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_ACTIVE);
@@ -2092,7 +2087,7 @@ void func_809DEAC4(Boss02* this, PlayState* play) {
}
if (this->unk_1D1C == 45) {
- func_800B7298(play, &this->actor, 21);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_21);
sMusicStartTimer = KREG(91) + 43;
}
@@ -2106,7 +2101,7 @@ void func_809DEAC4(Boss02* this, PlayState* play) {
}
if (this->unk_1D1C == 100) {
- func_800B7298(play, &this->actor, 0x73);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_115);
}
if (this->unk_1D1C == 112) {
@@ -2144,19 +2139,19 @@ void func_809DEAC4(Boss02* this, PlayState* play) {
if (this->unk_1D1C == (u32)(BREG(27) + 335)) {
func_80169AFC(play, this->subCamId, 0);
this->subCamId = SUB_CAM_ID_DONE;
- Cutscene_End(play, &play->csCtx);
- func_800B7298(play, &this->actor, 6);
+ Cutscene_StopManual(play, &play->csCtx);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_END);
this->actor.flags |= ACTOR_FLAG_1;
this->unk_1D20 = 0;
sRedTwinmold->unk_0144 = sBlueTwinmold->unk_0144 = 3;
sRedTwinmold->unk_0146[0] = sBlueTwinmold->unk_0146[0] = 60;
- gSaveContext.eventInf[5] |= 0x20;
+ SET_EVENTINF(EVENTINF_55);
}
break;
case 100:
- if (ActorCutscene_GetCurrentIndex() == -1) {
- Cutscene_Start(play, &play->csCtx);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_NONE) {
+ Cutscene_StartManual(play, &play->csCtx);
this->subCamId = Play_CreateSubCamera(play);
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_ACTIVE);
@@ -2205,8 +2200,8 @@ void func_809DEAC4(Boss02* this, PlayState* play) {
if (this->unk_1D1C == 30) {
func_80169AFC(play, this->subCamId, 0);
this->subCamId = SUB_CAM_ID_DONE;
- Cutscene_End(play, &play->csCtx);
- func_800B7298(play, &this->actor, 6);
+ Cutscene_StopManual(play, &play->csCtx);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_END);
this->unk_1D20 = 0;
this->actor.flags |= ACTOR_FLAG_1;
sp68->unk_0144 = 10;
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 17028912b..e7efc1199 100644
--- a/src/overlays/actors/ovl_Boss_02/z_boss_02.h
+++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.h
@@ -108,6 +108,4 @@ typedef struct Boss02 {
/* 0x1D7E */ s16 unk_1D7E;
} Boss02; // size = 0x1D80
-extern const ActorInit Boss_02_InitVars;
-
#endif // Z_BOSS_02_H
diff --git a/src/overlays/actors/ovl_Boss_03/overlay.cfg b/src/overlays/actors/ovl_Boss_03/overlay.cfg
deleted file mode 100644
index 285cc5587..000000000
--- a/src/overlays/actors/ovl_Boss_03/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Boss_03
-z_boss_03.c
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 a0f3a208b..c4c38982e 100644
--- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c
+++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c
@@ -7,10 +7,6 @@
/**
* Some notes:
*
- * Global flags:
- * - gSaveContext.eventInf[5] & 0x40: Enabled when Gyorg's intro cutscene has been watched
- * - gSaveContext.save.weekEventReg[55] & 0x80: Checked to know if Gyorg has been defeated
- *
* Seaweed:
* - Refers to the seaweed at the bottom of the stage where Player fights Gyorg
* - The default Gyorg actor will spawn 5 other Gyorg instances using the parameter GYORG_PARAM_SEAWEED to spawn them
@@ -52,7 +48,6 @@
* - Effect Update/Draw
* - Seaweed
*/
-#include "prevent_bss_reordering.h"
#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"
@@ -278,7 +273,7 @@ Actor* Boss03_FindActorDblueMovebg(PlayState* play) {
/* Start of Gyorg's Init and actionFuncs section */
-const ActorInit Boss_03_InitVars = {
+ActorInit Boss_03_InitVars = {
ACTOR_BOSS_03,
ACTORCAT_BOSS,
FLAGS,
@@ -453,11 +448,11 @@ void Boss03_Init(Actor* thisx, PlayState* play2) {
PlayState* play = play2;
Vec3f sp70;
- if (gSaveContext.save.weekEventReg[55] & 0x80) {
+ 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_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -519,11 +514,11 @@ void Boss03_Init(Actor* thisx, PlayState* play2) {
GYORG_LIMB_MAX);
Actor_SetScale(&this->actor, 0.2f);
- // gSaveContext.eventInf[5] & 0x40: intro cutscene already watched
- if ((KREG(64) != 0) || (gSaveContext.eventInf[5] & 0x40)) {
+ // CHECK_EVENTINF(EVENTINF_56): intro cutscene already watched
+ if ((KREG(64) != 0) || CHECK_EVENTINF(EVENTINF_56)) {
this->actionFunc = func_809E344C;
D_809E9842 = false;
- Audio_QueueSeqCmd(NA_BGM_STOP | 0x10000);
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 1);
} else {
Boss03_SetupIntroCutscene(this, play);
D_809E9842 = true;
@@ -579,17 +574,17 @@ void func_809E34B8(Boss03* this, PlayState* play) {
yDiff = this->unk_268.y - this->actor.world.pos.y;
zDiff = this->unk_268.z - this->actor.world.pos.z;
- Math_ApproachS(&this->actor.world.rot.x, Math_FAtan2F(sqrtf(SQ(xDiff) + SQ(zDiff)), -yDiff), 0xA, this->unk_274);
+ Math_ApproachS(&this->actor.world.rot.x, Math_Atan2S_XY(sqrtf(SQ(xDiff) + SQ(zDiff)), -yDiff), 0xA, this->unk_274);
bodyYRotTarget =
- Math_SmoothStepToS(&this->actor.world.rot.y, Math_FAtan2F(zDiff, xDiff), 0xA, this->unk_274, 0) * -0.5f;
+ Math_SmoothStepToS(&this->actor.world.rot.y, Math_Atan2S_XY(zDiff, xDiff), 0xA, this->unk_274, 0) * -0.5f;
Math_ApproachS(&this->bodyYRot, bodyYRotTarget, 5, 0x100);
Math_ApproachS(&this->unk_274, this->unk_276, 1, 0x100);
- Math_ApproachF(&this->actor.speedXZ, this->unk_278, 1.0f, this->unk_27C);
+ Math_ApproachF(&this->actor.speed, this->unk_278, 1.0f, this->unk_27C);
Math_ApproachF(&this->unk_260, sinf(this->skelAnime.curFrame * (M_PI / 5.0f)) * 10.0f * 0.01f, 0.5f, 1.0f);
- if ((this->workTimer[WORK_TIMER_UNK2_A] == 0) && (this->actor.bgCheckFlags & 8)) {
+ if ((this->workTimer[WORK_TIMER_UNK2_A] == 0) && (this->actor.bgCheckFlags & BGCHECKFLAG_WALL)) {
Matrix_MultVecZ(-500.0f, &this->unk_268);
this->unk_268.y = Rand_ZeroFloat(100.0f) + 150.0f;
this->workTimer[WORK_TIMER_UNK2_A] = 60;
@@ -623,7 +618,7 @@ void func_809E34B8(Boss03* this, PlayState* play) {
if (this->workTimer[WORK_TIMER_UNK1_A] == 0) {
// Player is above water && Player is standing on ground
- if ((this->waterHeight < player->actor.world.pos.y) && (player->actor.bgCheckFlags & 1)) {
+ if ((this->waterHeight < player->actor.world.pos.y) && (player->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
Boss03_SetupPrepareCharge(this, play);
} else if ((player->transformation != PLAYER_FORM_GORON) && (player->transformation != PLAYER_FORM_DEKU)) {
if (KREG(70) == 0) {
@@ -668,13 +663,13 @@ void Boss03_ChasePlayer(Boss03* this, PlayState* play) {
yDiff = (player->actor.world.pos.y - this->actor.world.pos.y) + 50.0f;
zDiff = player->actor.world.pos.z - this->actor.world.pos.z;
- Math_ApproachS(&this->actor.world.rot.x, Math_FAtan2F(sqrtf(SQ(xDiff) + SQ(zDiff)), -yDiff), 0xA, this->unk_274);
+ Math_ApproachS(&this->actor.world.rot.x, Math_Atan2S_XY(sqrtf(SQ(xDiff) + SQ(zDiff)), -yDiff), 0xA, this->unk_274);
bodyYRotTarget =
- Math_SmoothStepToS(&this->actor.world.rot.y, Math_FAtan2F(zDiff, xDiff), 0xA, this->unk_274, 0) * -0.5f;
+ Math_SmoothStepToS(&this->actor.world.rot.y, Math_Atan2S_XY(zDiff, xDiff), 0xA, this->unk_274, 0) * -0.5f;
Math_ApproachS(&this->bodyYRot, bodyYRotTarget, 5, 0x100);
Math_ApproachS(&this->unk_274, this->unk_276, 1, 0x100);
- Math_ApproachF(&this->actor.speedXZ, this->unk_278, 1.0f, this->unk_27C);
+ Math_ApproachF(&this->actor.speed, this->unk_278, 1.0f, this->unk_27C);
Math_ApproachF(&this->unk_260, sinf(this->skelAnime.curFrame * (M_PI / 5.0f)) * 10.0f * 0.01f, 0.5f, 1.0f);
Actor_MoveWithoutGravityReverse(&this->actor);
@@ -683,12 +678,13 @@ void Boss03_ChasePlayer(Boss03* this, PlayState* play) {
// If either (Player is standing on ground && Player is above water) or (WORK_TIMER_CURRENT_ACTION timer runs out),
// then stop chasing
- if (((player->actor.bgCheckFlags & 1) && (player->actor.shape.feetPos[0].y >= WATER_HEIGHT + 8.0f)) ||
+ if (((player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) &&
+ (player->actor.shape.feetPos[0].y >= WATER_HEIGHT + 8.0f)) ||
(this->workTimer[WORK_TIMER_CURRENT_ACTION] == 0)) {
if (&this->actor == player->actor.parent) {
player->unk_AE8 = 101;
player->actor.parent = NULL;
- player->csMode = 0;
+ player->csMode = PLAYER_CSMODE_0;
}
func_809E344C(this, play);
@@ -764,13 +760,13 @@ void Boss03_CatchPlayer(Boss03* this, PlayState* play) {
yDiff = player->actor.world.pos.y - this->actor.world.pos.y;
zDiff = player->actor.world.pos.z - this->actor.world.pos.z;
- Math_ApproachS(&this->actor.world.rot.x, Math_FAtan2F(sqrtf(SQ(xDiff) + SQ(zDiff)), -yDiff), 0xA, this->unk_274);
+ Math_ApproachS(&this->actor.world.rot.x, Math_Atan2S_XY(sqrtf(SQ(xDiff) + SQ(zDiff)), -yDiff), 0xA, this->unk_274);
Math_ApproachS(&this->bodyYRot,
- Math_SmoothStepToS(&this->actor.world.rot.y, Math_FAtan2F(zDiff, xDiff), 0xA, this->unk_274, 0) *
+ Math_SmoothStepToS(&this->actor.world.rot.y, Math_Atan2S_XY(zDiff, xDiff), 0xA, this->unk_274, 0) *
-0.5f,
5, 0x100);
Math_ApproachS(&this->unk_274, this->unk_276, 1, 0x100);
- Math_ApproachF(&this->actor.speedXZ, this->unk_278, 1.0f, this->unk_27C);
+ Math_ApproachF(&this->actor.speed, this->unk_278, 1.0f, this->unk_27C);
Math_ApproachF(&this->unk_260, sinf(this->skelAnime.curFrame * (M_PI / 5.0f)) * 10.0f * 0.01f, 0.5f, 1.0f);
Actor_MoveWithoutGravityReverse(&this->actor);
Math_ApproachS(&this->actor.shape.rot.x, this->actor.world.rot.x, 2, this->unk_274 * 2);
@@ -778,13 +774,14 @@ void Boss03_CatchPlayer(Boss03* this, PlayState* play) {
// If either (Player is standing on ground && Player is above water) or (WORK_TIMER_CURRENT_ACTION timer runs out)
// then stop trying to catch Player
- if (((player->actor.bgCheckFlags & 1) && (player->actor.shape.feetPos[FOOT_LEFT].y >= WATER_HEIGHT + 8.0f)) ||
+ if (((player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) &&
+ (player->actor.shape.feetPos[FOOT_LEFT].y >= WATER_HEIGHT + 8.0f)) ||
(this->workTimer[WORK_TIMER_CURRENT_ACTION] == 0)) {
if (&this->actor == player->actor.parent) {
player->unk_AE8 = 101;
player->actor.parent = NULL;
- player->csMode = 0;
- func_80165690();
+ player->csMode = PLAYER_CSMODE_0;
+ Play_DisableMotionBlur();
}
func_809E344C(this, play);
@@ -830,7 +827,7 @@ void Boss03_SetupChewPlayer(Boss03* this, PlayState* play) {
this->actionFunc = Boss03_ChewPlayer;
- pitchAngle = Math_FAtan2F(this->actor.world.pos.z, this->actor.world.pos.x);
+ pitchAngle = Math_Atan2S_XY(this->actor.world.pos.z, this->actor.world.pos.x);
Matrix_RotateYS(pitchAngle, MTXMODE_NEW);
out.x = 0.0f;
@@ -856,7 +853,7 @@ void Boss03_ChewPlayer(Boss03* this, PlayState* play) {
this->unk_25C = 15;
if (this->workTimer[WORK_TIMER_CURRENT_ACTION] == 90) {
- func_8016566C(0x96);
+ Play_EnableMotionBlur(150);
}
SkelAnime_Update(&this->skelAnime);
@@ -868,9 +865,9 @@ void Boss03_ChewPlayer(Boss03* this, PlayState* play) {
yDiff = this->unk_268.y - this->actor.world.pos.y;
zDiff = this->unk_268.z - this->actor.world.pos.z;
- Math_ApproachS(&this->actor.world.rot.x, Math_FAtan2F(sqrtf(SQ(xDiff) + SQ(zDiff)), -yDiff), 0xA, this->unk_274);
+ Math_ApproachS(&this->actor.world.rot.x, Math_Atan2S_XY(sqrtf(SQ(xDiff) + SQ(zDiff)), -yDiff), 0xA, this->unk_274);
Math_ApproachS(&this->bodyYRot,
- Math_SmoothStepToS(&this->actor.world.rot.y, Math_FAtan2F(zDiff, xDiff), 0xA, this->unk_274, 0) *
+ Math_SmoothStepToS(&this->actor.world.rot.y, Math_Atan2S_XY(zDiff, xDiff), 0xA, this->unk_274, 0) *
-0.5f,
5, 0x100);
Math_ApproachS(&this->unk_274, this->unk_276, 1, 0x100);
@@ -878,7 +875,7 @@ void Boss03_ChewPlayer(Boss03* this, PlayState* play) {
switch (this->unk_242) {
case 0:
- Math_ApproachF(&this->actor.speedXZ, 10.0f, 1.0f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 10.0f, 1.0f, 1.0f);
if (sqrtf(SQ(xDiff) + SQ(zDiff)) < 100.0f) {
this->unk_242 = 1;
Animation_MorphToLoop(&this->skelAnime, &gGyorgBackingUpAnim, -15.0f);
@@ -886,7 +883,7 @@ void Boss03_ChewPlayer(Boss03* this, PlayState* play) {
break;
case 1:
- Math_ApproachF(&this->actor.speedXZ, 0.0f, 1.0f, 0.5f);
+ Math_ApproachF(&this->actor.speed, 0.0f, 1.0f, 0.5f);
Math_ApproachF(&this->actor.world.pos.y, 200.0f, 0.05f, 5.0f);
break;
}
@@ -911,8 +908,8 @@ void Boss03_ChewPlayer(Boss03* this, PlayState* play) {
if (&this->actor == player->actor.parent) {
player->unk_AE8 = 101;
player->actor.parent = NULL;
- player->csMode = 0;
- func_80165690();
+ player->csMode = PLAYER_CSMODE_0;
+ Play_DisableMotionBlur();
func_800B8D50(play, NULL, 10.0f, this->actor.shape.rot.y, 0.0f, 0x20);
}
@@ -990,7 +987,7 @@ void Boss03_PrepareCharge(Boss03* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
// Player is above water && Player is standing on ground
- if ((this->waterHeight < player->actor.world.pos.y) && (player->actor.bgCheckFlags & 1)) {
+ if ((this->waterHeight < player->actor.world.pos.y) && (player->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
if (this->workTimer[WORK_TIMER_CURRENT_ACTION] == 0) {
Boss03_SetupCharge(this, play);
}
@@ -1000,7 +997,7 @@ void Boss03_PrepareCharge(Boss03* this, PlayState* play) {
}
// Turns back slowly
- Math_ApproachF(&this->actor.speedXZ, -3.0f, 1.0f, 0.5f);
+ Math_ApproachF(&this->actor.speed, -3.0f, 1.0f, 0.5f);
Actor_MoveWithoutGravityReverse(&this->actor);
}
@@ -1030,18 +1027,18 @@ void Boss03_Charge(Boss03* this, PlayState* play) {
yDiff = (this->unk_268.y - this->actor.world.pos.y) - 50.0f;
zDiff = this->unk_268.z - this->actor.world.pos.z;
- Math_ApproachS(&this->actor.world.rot.y, Math_FAtan2F(zDiff, xDiff), 0xA, 0x1000);
+ Math_ApproachS(&this->actor.world.rot.y, Math_Atan2S_XY(zDiff, xDiff), 0xA, 0x1000);
- rotXTarget = Math_FAtan2F(sqrtf(SQ(xDiff) + SQ(zDiff)), -yDiff);
+ rotXTarget = Math_Atan2S_XY(sqrtf(SQ(xDiff) + SQ(zDiff)), -yDiff);
Math_ApproachS(&this->actor.world.rot.x, rotXTarget, 0xA, 0x1000);
this->actor.shape.rot = this->actor.world.rot;
- Math_ApproachF(&this->actor.speedXZ, 25.0f, 1.0f, 3.0f);
+ Math_ApproachF(&this->actor.speed, 25.0f, 1.0f, 3.0f);
Math_ApproachF(&this->unk_260, sinf(this->skelAnime.curFrame * (M_PI / 5.0f)) * 10.0f * 0.01f, 0.5f, 1.0f);
Actor_MoveWithoutGravityReverse(&this->actor);
- if (this->actor.speedXZ >= 20.0f) {
+ if (this->actor.speed >= 20.0f) {
// Jump over platform
if (this->unk_242 == 1) {
if (sqrtf(SQXZ(this->actor.world.pos)) < 700.0f) {
@@ -1051,15 +1048,15 @@ void Boss03_Charge(Boss03* this, PlayState* play) {
}
// Attack platform
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
play_sound(NA_SE_IT_BIG_BOMB_EXPLOSION);
func_800BC848(&this->actor, play, 20, 15);
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_WATER_EFFECT, 0.0f, this->waterHeight, 0.0f, 0, 0, 0x96,
ENWATEREFFECT_TYPE_GYORG_SHOCKWAVE);
// Player is above water && Player is standing on ground
- if ((this->waterHeight < player->actor.world.pos.y) && (player->actor.bgCheckFlags & 1)) {
- func_800B8D50(play, NULL, 7.0f, Math_FAtan2F(player->actor.world.pos.z, player->actor.world.pos.x),
+ if ((this->waterHeight < player->actor.world.pos.y) && (player->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ func_800B8D50(play, NULL, 7.0f, Math_Atan2S_XY(player->actor.world.pos.z, player->actor.world.pos.x),
7.0f, 0);
}
@@ -1073,7 +1070,7 @@ void Boss03_SetupJumpOverPlatform(Boss03* this, PlayState* play) {
this->actionFunc = Boss03_JumpOverPlatform;
this->actor.gravity = -2.0f;
this->actor.velocity.y = 30.0f;
- this->actor.speedXZ = 25.0f;
+ this->actor.speed = 25.0f;
Boss03_PlayUnderwaterSfx(&this->actor.projectedPos, NA_SE_EN_KONB_JUMP_OLD);
}
@@ -1148,8 +1145,8 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) {
switch (this->csState) {
case 0:
if (player->actor.world.pos.y < 1350.0f) {
- Cutscene_Start(play, &play->csCtx);
- func_800B7298(play, &this->actor, 7);
+ Cutscene_StartManual(play, &play->csCtx);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT);
this->subCamId = Play_CreateSubCamera(play);
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_ACTIVE);
@@ -1176,7 +1173,7 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) {
case 1:
player->actor.world.pos.z = 0.0f;
player->actor.world.pos.x = 0.0f;
- player->actor.speedXZ = 0.0f;
+ player->actor.speed = 0.0f;
this->subCamEye.x = 100.0f;
this->subCamEye.y = 540.0f;
@@ -1191,19 +1188,19 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) {
this->csState = 2;
this->csTimer = 0;
this->unk_240 = 0;
- func_8016566C(0x96);
+ Play_EnableMotionBlur(150);
this->subCamFov = 80.0f;
case 2:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KONB_DEMO_MOVE_OLD - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KONB_DEMO_MOVE_OLD - SFX_FLAG);
xDiff = D_809E9104[this->unk_242].x - this->actor.world.pos.x;
yDiff = D_809E9104[this->unk_242].y - this->actor.world.pos.y;
zDiff = D_809E9104[this->unk_242].z - this->actor.world.pos.z;
- Math_ApproachS(&this->actor.world.rot.x, Math_FAtan2F(sqrtf(SQ(xDiff) + SQ(zDiff)), -yDiff),
- 0xA, this->unk_274);
- Math_ApproachS(&this->actor.world.rot.y, Math_FAtan2F(zDiff, xDiff), 0xA, this->unk_274);
+ Math_ApproachS(&this->actor.world.rot.x,
+ Math_Atan2S_XY(sqrtf(SQ(xDiff) + SQ(zDiff)), -yDiff), 0xA, this->unk_274);
+ Math_ApproachS(&this->actor.world.rot.y, Math_Atan2S_XY(zDiff, xDiff), 0xA, this->unk_274);
Math_ApproachS(&this->unk_274, 0x200, 1, 0x10);
if ((this->csTimer > 30) && (this->csTimer < 50)) {
@@ -1211,11 +1208,11 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) {
}
if ((this->csTimer == 40) || (this->csTimer == (u32)(KREG(91) + 270))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_WATER_DEEP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_WATER_DEEP);
}
if (this->csTimer > 50) {
- Math_ApproachF(&this->actor.speedXZ, this->unk_278, 1.0f, 0.1f);
+ Math_ApproachF(&this->actor.speed, this->unk_278, 1.0f, 0.1f);
}
if (this->unk_242 < 2) {
@@ -1230,15 +1227,15 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) {
} else {
this->unk_278 = 0.0f;
bubblesToSpawnNum = 1;
- if ((this->actor.speedXZ == 0.0f) && (this->csTimer > 230)) {
+ if ((this->actor.speed == 0.0f) && (this->csTimer > 230)) {
this->csState = 3;
this->csTimer = 0;
}
if (this->csTimer == 165) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_WATER_MID);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_WATER_MID);
}
if (this->csTimer == 180) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_WATER_DEEP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_WATER_DEEP);
}
}
}
@@ -1248,7 +1245,7 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) {
case 3:
Boss03_PlayUnderwaterSfx(&this->actor.projectedPos, NA_SE_EN_KONB_PREATTACK_OLD - SFX_FLAG);
sp5A = 0x1970;
- Math_ApproachF(&this->actor.speedXZ, 15.0f, 1.0f, 2.0f);
+ Math_ApproachF(&this->actor.speed, 15.0f, 1.0f, 2.0f);
if (this->csTimer > 20) {
this->csState = 4;
this->csTimer = 0;
@@ -1260,7 +1257,7 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) {
if (this->csTimer == 5) {
// Rotates Player towards Gyorg
- func_800B7298(play, &this->actor, 8);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_8);
}
this->subCamEye.x = player->actor.world.pos.x + 30.0f;
@@ -1281,14 +1278,14 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) {
this->csState = 5;
this->csTimer = 0;
this->unk_2D5 = false;
- this->actor.speedXZ = -200.0f;
+ this->actor.speed = -200.0f;
Actor_MoveWithoutGravityReverse(&this->actor);
this->actor.world.pos.y = this->waterHeight - 150.0f;
- func_80165690();
+ Play_DisableMotionBlur();
case 5:
SkelAnime_Update(&this->skelAnime);
- this->actor.speedXZ = 20.0f;
+ this->actor.speed = 20.0f;
Actor_MoveWithoutGravityReverse(&this->actor);
player->actor.shape.rot.y = -0x1470;
player->actor.world.rot.y = player->actor.shape.rot.y;
@@ -1306,17 +1303,17 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) {
this->csState = 6;
this->csTimer = 0;
this->actor.gravity = -1.5f;
- this->actor.speedXZ = 20.0f;
+ this->actor.speed = 20.0f;
- Audio_QueueSeqCmd(NA_BGM_BOSS | 0x8000);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KONB_JUMP_OLD);
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_BOSS | SEQ_FLAG_ASYNC);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KONB_JUMP_OLD);
this->skelAnime.playSpeed = 1.0f;
}
}
break;
case 6:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KONB_JUMP_LEV_OLD - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KONB_JUMP_LEV_OLD - SFX_FLAG);
if (this->csTimer == 30) {
TitleCard_InitBossName(&play->state, &play->actorCtx.titleCtxt,
@@ -1331,7 +1328,7 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) {
this->bubbleEffectSpawnCount = 2;
this->actor.gravity = 0.0f;
Math_ApproachZeroF(&this->actor.velocity.y, 1.0f, 1.0f);
- Math_ApproachZeroF(&this->actor.speedXZ, 1.0f, 0.5f);
+ Math_ApproachZeroF(&this->actor.speed, 1.0f, 0.5f);
} else {
if (1) {}
if (1) {}
@@ -1370,14 +1367,14 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) {
mainCam->at = this->subCamAt;
func_80169AFC(play, this->subCamId, 0);
- Cutscene_End(play, &play->csCtx);
- func_800B7298(play, &this->actor, 6);
+ Cutscene_StopManual(play, &play->csCtx);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_END);
this->subCamId = SUB_CAM_ID_DONE;
func_809E344C(this, play);
this->workTimer[WORK_TIMER_UNK1_A] = 50;
- gSaveContext.eventInf[5] |= 0x40;
+ SET_EVENTINF(EVENTINF_56);
}
break;
}
@@ -1387,7 +1384,7 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) {
if ((this->csState == 2) || (this->csState == 3)) {
Actor_MoveWithoutGravityReverse(&this->actor);
- phi_f2 = this->actor.speedXZ * 0.02f;
+ phi_f2 = this->actor.speed * 0.02f;
phi_f2 = CLAMP_MAX(phi_f2, 0.12f);
sp5C = Math_SinS(this->unk_240 * sp5A) * phi_f2;
@@ -1418,7 +1415,7 @@ void Boss03_SetupDeathCutscene(Boss03* this, PlayState* play) {
this->actionFunc = Boss03_DeathCutscene;
Animation_MorphToLoop(&this->skelAnime, &gGyorgFloppingAnim, -10.0f);
this->floppingAnimLastFrame = Animation_GetLastFrame(&gGyorgFloppingAnim);
- Audio_QueueSeqCmd(NA_BGM_STOP | 0x10000);
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 1);
this->workTimer[WORK_TIMER_UNK0_C] = 0;
this->unk_242 = 0;
this->csState = 0;
@@ -1447,16 +1444,17 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) {
switch (this->csState) {
case 0:
- if (ActorCutscene_GetCurrentIndex() == -1) {
- Cutscene_Start(play, &play->csCtx);
- func_800B7298(play, &this->actor, 1);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_NONE) {
+ Cutscene_StartManual(play, &play->csCtx);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_1);
this->subCamId = Play_CreateSubCamera(play);
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_ACTIVE);
- this->unk_2BE = Math_FAtan2F(this->actor.world.pos.z, this->actor.world.pos.x);
+ this->unk_2BE = Math_Atan2S_XY(this->actor.world.pos.z, this->actor.world.pos.x);
// Player is above water && Player is standing on ground
- if ((this->waterHeight < player->actor.world.pos.y) && (player->actor.bgCheckFlags & 1)) {
+ if ((this->waterHeight < player->actor.world.pos.y) &&
+ (player->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
player->actor.world.pos.x = 0.0f;
player->actor.world.pos.z = -200.0f;
}
@@ -1472,7 +1470,7 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) {
this->subCamAt.z = mainCam->at.z;
aux = this->subCamEye.x - this->actor.world.pos.x;
- this->unk_568 = Math_Acot2F(this->subCamEye.z - this->actor.world.pos.z, aux);
+ this->unk_568 = Math_Atan2F_XY(this->subCamEye.z - this->actor.world.pos.z, aux);
this->unk_570 = 0.0f;
this->unk_56C = 0.0f;
@@ -1519,10 +1517,10 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) {
Math_ApproachF(&this->actor.world.pos.z, sp84.z, 0.1f, 5.0f);
if (Animation_OnFrame(&this->skelAnime, this->floppingAnimLastFrame)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KONB_DEAD_JUMP2_OLD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KONB_DEAD_JUMP2_OLD);
}
if (Animation_OnFrame(&this->skelAnime, this->floppingAnimLastFrame * 0.5f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KONB_DEAD_JUMP_OLD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KONB_DEAD_JUMP_OLD);
}
if ((this->workTimer[WORK_TIMER_UNK0_C] == 0) && ((this->waterHeight - 100.0f) < this->actor.world.pos.y)) {
@@ -1549,10 +1547,10 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) {
this->unk_242 = 1;
this->actor.gravity = -2.0f;
this->actor.velocity.y = 25.0f;
- this->actor.speedXZ = 10.0f;
+ this->actor.speed = 10.0f;
this->actor.world.rot.y = this->unk_2BE + 0x8000;
this->unk_240 = 0;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KONB_DEAD_JUMP2_OLD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KONB_DEAD_JUMP2_OLD);
}
}
Math_ApproachF(&this->unk_56C, 0.01f, 1.0f, 0.0005f);
@@ -1560,7 +1558,7 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) {
case 1:
if (this->unk_240 == 0x96) {
- Audio_QueueSeqCmd(NA_BGM_CLEAR_BOSS | 0x8000);
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_CLEAR_BOSS | SEQ_FLAG_ASYNC);
}
Math_ApproachF(&this->unk_56C, 0.01f, 1.0f, 0.0005f);
Math_ApproachF(&this->actor.scale.x, 0.01f, 0.05f, 0.001f);
@@ -1570,7 +1568,7 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) {
if (this->actor.world.pos.y < PLATFORM_HEIGHT + (100.0f * sp64)) {
this->actor.world.pos.y = PLATFORM_HEIGHT + (100.0f * sp64);
this->actor.velocity.y = ((Rand_ZeroFloat(10.0f) + 7.5f) * sp64) + 7.5f;
- this->actor.speedXZ = ((Rand_ZeroFloat(5.0f) + 2.5f) * sp64) + 2.5f;
+ this->actor.speed = ((Rand_ZeroFloat(5.0f) + 2.5f) * sp64) + 2.5f;
if (Rand_ZeroOne() < 0.5f) {
this->shapeRotTargetX =
@@ -1586,7 +1584,7 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) {
this->shapeRotTargetY = Rand_ZeroFloat(65536.0f);
}
- this->actor.world.rot.y = Math_FAtan2F(-this->actor.world.pos.z, -this->actor.world.pos.x);
+ this->actor.world.rot.y = Math_Atan2S_XY(-this->actor.world.pos.z, -this->actor.world.pos.x);
Boss03_PlayUnderwaterSfx(&this->actor.projectedPos, NA_SE_EN_KONB_BOUND_OLD);
Boss03_PlayUnderwaterSfx(&this->actor.projectedPos, NA_SE_EN_KONB_BOUND2_OLD);
@@ -1628,10 +1626,10 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) {
mainCam->at = this->subCamAt;
func_80169AFC(play, this->subCamId, 0);
this->subCamId = SUB_CAM_ID_DONE;
- Cutscene_End(play, &play->csCtx);
- func_800B7298(play, &this->actor, 6);
+ Cutscene_StopManual(play, &play->csCtx);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_END);
this->csState = 3;
- func_80165690();
+ Play_DisableMotionBlur();
Boss03_PlayUnderwaterSfx(&this->actor.projectedPos, NA_SE_EN_KONB_INIT_OLD);
Boss03_PlayUnderwaterSfx(&D_809E9848, NA_SE_EN_KONB_INIT_OLD);
}
@@ -1661,9 +1659,9 @@ void Boss03_SpawnSmallFishesCutscene(Boss03* this, PlayState* play) {
this->csTimer++;
switch (this->csState) {
case 0:
- if (ActorCutscene_GetCurrentIndex() == -1) {
- Cutscene_Start(play, &play->csCtx);
- func_800B7298(play, &this->actor, 1);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_NONE) {
+ Cutscene_StartManual(play, &play->csCtx);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_1);
this->subCamId = Play_CreateSubCamera(play);
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_ACTIVE);
@@ -1683,7 +1681,7 @@ void Boss03_SpawnSmallFishesCutscene(Boss03* this, PlayState* play) {
this->actor.shape.rot.x = this->actor.shape.rot.z;
this->actor.shape.rot.y = this->actor.world.rot.y =
- Math_FAtan2F(-this->actor.world.pos.x, -this->actor.world.pos.x);
+ Math_Atan2S_XY(-this->actor.world.pos.x, -this->actor.world.pos.x);
this->unk_260 = 0.0f;
player->actor.shape.rot.y = player->actor.world.rot.y = this->actor.world.rot.y + 0x8000;
@@ -1709,7 +1707,7 @@ void Boss03_SpawnSmallFishesCutscene(Boss03* this, PlayState* play) {
this->numSpawnedSmallFish++;
}
if ((this->csTimer % 8) == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KONB_MINI_APPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KONB_MINI_APPEAR);
}
}
}
@@ -1723,8 +1721,8 @@ void Boss03_SpawnSmallFishesCutscene(Boss03* this, PlayState* play) {
func_80169AFC(play, this->subCamId, 0);
this->subCamId = SUB_CAM_ID_DONE;
- Cutscene_End(play, &play->csCtx);
- func_800B7298(play, &this->actor, 6);
+ Cutscene_StopManual(play, &play->csCtx);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_END);
func_809E344C(this, play);
this->workTimer[WORK_TIMER_UNK1_A] = 50;
@@ -1754,8 +1752,8 @@ void Boss03_SetupStunned(Boss03* this, PlayState* play) {
if (&this->actor == player->actor.parent) {
player->unk_AE8 = 101;
player->actor.parent = NULL;
- player->csMode = 0;
- func_80165690();
+ player->csMode = PLAYER_CSMODE_0;
+ Play_DisableMotionBlur();
}
this->unk_240 = 0;
@@ -1773,7 +1771,7 @@ void Boss03_Stunned(Boss03* this, PlayState* play) {
if ((this->waterHeight + 30.0f) < this->actor.world.pos.y) {
this->actor.gravity = -2.0f;
Actor_MoveWithGravity(&this->actor);
- if (this->actor.bgCheckFlags & 2) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
play_sound(NA_SE_IT_WALL_HIT_HARD);
func_800BC848(&this->actor, play, 10, 10);
}
@@ -1783,7 +1781,7 @@ void Boss03_Stunned(Boss03* this, PlayState* play) {
this->actor.shape.rot.x = this->actor.world.rot.x;
Math_ApproachF(&this->actor.world.pos.y, 100.0f, 0.05f, 5.0f);
- Math_ApproachF(&this->actor.speedXZ, 0.0f, 1.0f, 1.5f);
+ Math_ApproachF(&this->actor.speed, 0.0f, 1.0f, 1.5f);
Actor_MoveWithoutGravityReverse(&this->actor);
}
@@ -1906,8 +1904,8 @@ void Boss03_UpdateCollision(Boss03* this, PlayState* play) {
if (&this->actor == player->actor.parent) {
player->unk_AE8 = 101;
player->actor.parent = NULL;
- player->csMode = 0;
- func_80165690();
+ player->csMode = PLAYER_CSMODE_0;
+ Play_DisableMotionBlur();
}
continue;
@@ -1995,7 +1993,8 @@ void Boss03_Update(Actor* thisx, PlayState* play2) {
Math_ApproachS(&this->actor.shape.rot.z, 0, 0xA, 0x800);
this->actor.world.pos.y -= 100.0f;
this->actor.prevPos.y -= 100.0f;
- Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 150.0f, 100.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 150.0f, 100.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
this->actor.world.pos.y += 100.0f;
this->actor.prevPos.y += 100.0f;
}
@@ -2008,7 +2007,7 @@ void Boss03_Update(Actor* thisx, PlayState* play2) {
((this->waterHeight - 50.0f < this->actor.world.pos.y) &&
(this->actor.prevPos.y <= this->waterHeight - 50.0f))) {
if ((this->actor.velocity.y < 0.0f) && (this->actionFunc != Boss03_DeathCutscene)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KONB_SINK_OLD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KONB_SINK_OLD);
}
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_WATER_EFFECT, this->actor.world.pos.x, this->waterHeight,
@@ -2086,7 +2085,7 @@ void Boss03_Update(Actor* thisx, PlayState* play2) {
if (D_809E9841 != 0) {
D_809E9841--;
if (D_809E9841 == 0) {
- Audio_QueueSeqCmd(NA_BGM_BOSS | 0x8000);
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_BOSS | SEQ_FLAG_ASYNC);
}
}
@@ -2100,7 +2099,8 @@ void Boss03_Update(Actor* thisx, PlayState* play2) {
}
// Player is standing on ground && Player is above water
- if ((player->actor.bgCheckFlags & 1) && (player->actor.shape.feetPos[FOOT_LEFT].y >= WATER_HEIGHT + 8.0f)) {
+ if ((player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) &&
+ (player->actor.shape.feetPos[FOOT_LEFT].y >= WATER_HEIGHT + 8.0f)) {
if (this->wetSpotEffectSpawnCount != 0) {
this->wetSpotEffectSpawnCount--;
@@ -2274,7 +2274,7 @@ void Boss03_Draw(Actor* thisx, PlayState* play) {
Matrix_Translate(0.0f, -600.0f, 0.0f, MTXMODE_APPLY);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
Boss03_OverrideLimbDraw, Boss03_PostLimbDraw, &this->actor);
- POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP);
+ POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
}
this->unk_2BC = 0;
@@ -2440,7 +2440,7 @@ void Boss03_DrawEffects(PlayState* play) {
Matrix_Translate(eff->pos.x, eff->pos.y, eff->pos.z, MTXMODE_NEW);
if (eff->type == GYORG_EFFECT_DROPLET) {
- Matrix_RotateYF(Camera_GetInputDirYaw(GET_ACTIVE_CAM(play)) * (M_PI / 0x8000), MTXMODE_APPLY);
+ Matrix_RotateYF(BINANG_TO_RAD(Camera_GetInputDirYaw(GET_ACTIVE_CAM(play))), MTXMODE_APPLY);
} else { // GYORG_EFFECT_SPLASH
Matrix_ReplaceRotation(&play->billboardMtxF);
}
@@ -2516,13 +2516,13 @@ void Boss03_SeaweedUpdate(Actor* thisx, PlayState* play) {
yDiff = player->actor.world.pos.y - this->seaweedSegmentPositions[i].y;
zDiff = player->actor.world.pos.z - this->seaweedSegmentPositions[i].z;
distanceBetweenSeaweedAndDisturbance = sqrtf(SQ(xDiff) + SQ(yDiff) + SQ(zDiff));
- disturbanceFactor = player->actor.speedXZ * 3.0f + 70.0f;
+ disturbanceFactor = player->actor.speed * 3.0f + 70.0f;
// Player is standing on ground
- if (player->actor.bgCheckFlags & 1) {
+ if (player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
maxBendSpeed = 0;
} else {
- maxBendSpeed = player->actor.speedXZ * 16.0f;
+ maxBendSpeed = player->actor.speed * 16.0f;
if (maxBendSpeed > 0x1000) {
maxBendSpeed = 0x1000;
} else if (maxBendSpeed < 0x100) {
@@ -2540,7 +2540,7 @@ void Boss03_SeaweedUpdate(Actor* thisx, PlayState* play) {
}
if (flag & SEAWEED_FLAG_INTERACT_PLAYER) {
- Math_ApproachS(&this->actor.shape.rot.y, Math_FAtan2F(zDiff, xDiff), 0x14, 0x800);
+ Math_ApproachS(&this->actor.shape.rot.y, Math_Atan2S_XY(zDiff, xDiff), 0x14, 0x800);
}
if (sGyorgBossInstance->actor.world.pos.y - 40.0f < sGyorgBossInstance->waterHeight) {
@@ -2555,8 +2555,8 @@ void Boss03_SeaweedUpdate(Actor* thisx, PlayState* play) {
break;
}
- maxBendSpeed = sGyorgBossInstance->actor.speedXZ * 16.0f;
- disturbanceFactor = sGyorgBossInstance->actor.speedXZ * 5.0f + 150.0f;
+ maxBendSpeed = sGyorgBossInstance->actor.speed * 16.0f;
+ disturbanceFactor = sGyorgBossInstance->actor.speed * 5.0f + 150.0f;
if (maxBendSpeed > 0x1000) {
maxBendSpeed = 0x1000;
} else if (maxBendSpeed < 0x100) {
@@ -2573,7 +2573,7 @@ void Boss03_SeaweedUpdate(Actor* thisx, PlayState* play) {
}
if (flag & SEAWEED_FLAG_INTERACT_GYORG) {
- Math_ApproachS(&this->actor.shape.rot.y, Math_FAtan2F(zDiff, xDiff), 0x14, 0x800);
+ Math_ApproachS(&this->actor.shape.rot.y, Math_Atan2S_XY(zDiff, xDiff), 0x14, 0x800);
}
}
@@ -2593,7 +2593,7 @@ void Boss03_SeaweedDraw(Actor* thisx, PlayState* play) {
Boss03* this = THIS;
s16 i;
// Why 10 Mtxs? This seems to only use the first 6 elements
- Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, sizeof(Mtx) * 10);
+ Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, 10 * sizeof(Mtx));
OPEN_DISPS(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_Boss_04/overlay.cfg b/src/overlays/actors/ovl_Boss_04/overlay.cfg
deleted file mode 100644
index 16d818a43..000000000
--- a/src/overlays/actors/ovl_Boss_04/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Boss_04
-z_boss_04.c
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 9a7371c97..a39b10143 100644
--- a/src/overlays/actors/ovl_Boss_04/z_boss_04.c
+++ b/src/overlays/actors/ovl_Boss_04/z_boss_04.c
@@ -62,7 +62,7 @@ static DamageTable sDamageTable = {
/* Powder Keg */ DMG_ENTRY(1, 0xF),
};
-const ActorInit Boss_04_InitVars = {
+ActorInit Boss_04_InitVars = {
ACTOR_BOSS_04,
ACTORCAT_BOSS,
FLAGS,
@@ -157,7 +157,7 @@ void Boss04_Init(Actor* thisx, PlayState* play2) {
s32 pad;
if (Flags_GetClear(play, play->roomCtx.curRoom.num)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -197,9 +197,9 @@ void Boss04_Init(Actor* thisx, PlayState* play2) {
this->unk_6F0 = this->unk_6E0 + ((this->unk_6E4 - this->unk_6E0) * 0.5f);
this->actor.world.pos.x = this->unk_6E8;
this->actor.world.pos.z = this->unk_6F0;
- Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 60.0f, 60.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 60.0f, 60.0f, UPDBGCHECKINFO_FLAG_4);
- if ((KREG(64) != 0) || (gSaveContext.eventInf[6] & 1)) {
+ if ((KREG(64) != 0) || CHECK_EVENTINF(EVENTINF_60)) {
func_809ECD00(this, play);
this->actor.world.pos.y = this->actor.floorHeight + 160.0f;
phi_f24 = this->actor.floorHeight;
@@ -252,18 +252,18 @@ void func_809EC568(Boss04* this, PlayState* play) {
case 0:
this->unk_2C8 = 50;
this->unk_2D0 = 2000.0f;
- if ((player->stateFlags1 & 0x100000) && (this->actor.projectedPos.z > 0.0f) &&
+ if ((player->stateFlags1 & PLAYER_STATE1_100000) && (this->actor.projectedPos.z > 0.0f) &&
(fabsf(this->actor.projectedPos.x) < 300.0f) && (fabsf(this->actor.projectedPos.y) < 300.0f)) {
- if ((this->unk_704 >= 15) && (ActorCutscene_GetCurrentIndex() == -1)) {
+ if ((this->unk_704 >= 15) && (CutsceneManager_GetCurrentCsId() == CS_ID_NONE)) {
Actor* boss;
this->unk_708 = 10;
this->unk_704 = 0;
- Cutscene_Start(play, &play->csCtx);
+ Cutscene_StartManual(play, &play->csCtx);
this->subCamId = Play_CreateSubCamera(play);
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_ACTIVE);
- func_800B7298(play, &this->actor, 7);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT);
player->actor.world.pos.x = this->unk_6E8;
player->actor.world.pos.z = this->unk_6F0 + 410.0f;
player->actor.shape.rot.y = 0x7FFF;
@@ -271,13 +271,13 @@ void func_809EC568(Boss04* this, PlayState* play) {
Math_Vec3f_Copy(&this->subCamEye, &player->actor.world.pos);
this->subCamEye.y += 100.0f;
Math_Vec3f_Copy(&this->subCamAt, &this->actor.world.pos);
- func_8016566C(150);
+ Play_EnableMotionBlur(150);
this->subCamFov = 60.0f;
boss = play->actorCtx.actorLists[ACTORCAT_BOSS].first;
while (boss != NULL) {
if (boss->id == ACTOR_EN_WATER_EFFECT) {
- Actor_MarkForDeath(boss);
+ Actor_Kill(boss);
}
boss = boss->next;
}
@@ -289,7 +289,7 @@ void func_809EC568(Boss04* this, PlayState* play) {
case 10:
if (this->unk_704 == 3) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EYEGOLE_DEMO_EYE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_DEMO_EYE);
this->unk_74A = 1;
}
this->unk_2D0 = 10000.0f;
@@ -313,17 +313,17 @@ void func_809EC568(Boss04* this, PlayState* play) {
if (this->unk_704 == 45) {
this->unk_708 = 1;
this->unk_704 = 0;
- func_800B7298(play, &this->actor, 0x15);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_21);
this->actor.gravity = 0.0f;
break;
}
case 12:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_ME_ATTACK - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_ME_ATTACK - SFX_FLAG);
Math_ApproachF(&this->subCamAt.x, this->actor.world.pos.x, 0.5f, 1000.0f);
Math_ApproachF(&this->subCamAt.y, this->actor.world.pos.y, 0.5f, 1000.0f);
Math_ApproachF(&this->subCamAt.z, this->actor.world.pos.z, 0.5f, 1000.0f);
- if (this->actor.bgCheckFlags & 2) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
play_sound(NA_SE_IT_BIG_BOMB_EXPLOSION);
this->unk_6F4 = 15;
this->unk_708 = 13;
@@ -331,7 +331,7 @@ void func_809EC568(Boss04* this, PlayState* play) {
this->unk_2DA = 10;
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.world.pos.x, this->actor.world.pos.y,
this->actor.world.pos.z, 0, 0, 0, CLEAR_TAG_SPLASH);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KONB_JUMP_LEV_OLD - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KONB_JUMP_LEV_OLD - SFX_FLAG);
this->subCamAtOscillator = 20;
}
break;
@@ -389,10 +389,10 @@ void func_809EC568(Boss04* this, PlayState* play) {
mainCam->at = this->subCamAt;
func_80169AFC(play, this->subCamId, 0);
this->subCamId = SUB_CAM_ID_DONE;
- Cutscene_End(play, &play->csCtx);
- func_800B7298(play, &this->actor, 6);
- func_80165690();
- gSaveContext.eventInf[6] |= 1;
+ Cutscene_StopManual(play, &play->csCtx);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_END);
+ Play_DisableMotionBlur();
+ SET_EVENTINF(EVENTINF_60);
}
break;
}
@@ -431,7 +431,7 @@ void func_809ECD18(Boss04* this, PlayState* play) {
Math_ApproachS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 10, 0x200);
this->actor.world.pos.y = (this->actor.floorHeight + KREG(17) + 160.0f) + (Math_SinS(this->unk_1F4 * 512) * 10.0f);
- Math_ApproachF(&this->actor.speedXZ, this->unk_6D4, 1.0f, 0.5f);
+ Math_ApproachF(&this->actor.speed, this->unk_6D4, 1.0f, 0.5f);
if (this->unk_1F8 == 0) {
this->unk_1F8 = Rand_ZeroFloat(100.0f) + 50.0f;
@@ -460,14 +460,14 @@ void func_809ECEF4(Boss04* this) {
this->unk_1F8 = 0;
this->unk_1F6 = 1;
this->unk_1FA = 60;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.gravity = -3.0f;
}
void func_809ECF58(Boss04* this, PlayState* play) {
Vec3f sp3C;
- if ((this->unk_1FE == 14) || ((this->actor.bgCheckFlags & 8) && (this->unk_1F8 == 0))) {
+ if ((this->unk_1FE == 14) || ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) && (this->unk_1F8 == 0))) {
this->unk_1F8 = 20;
if ((Rand_ZeroOne() < 0.2f) && (this->unk_1FE == 0)) {
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
@@ -477,9 +477,9 @@ void func_809ECF58(Boss04* this, PlayState* play) {
this->actor.world.rot.y = BINANG_ROT180((s16)Rand_ZeroFloat(8000.0f) + this->actor.world.rot.y);
}
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
play_sound(NA_SE_IT_BIG_BOMB_EXPLOSION);
func_800BC848(&this->actor, play, 15, 10);
this->unk_6F4 = 15;
@@ -496,12 +496,12 @@ void func_809ECF58(Boss04* this, PlayState* play) {
if (this->unk_6F4 == 0) {
Math_ApproachS(&this->actor.shape.rot.y, this->actor.world.rot.y, 5, 0x1000);
if (this->unk_1FA == 0) {
- Math_ApproachF(&this->actor.speedXZ, 20.0f, 1.0f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 20.0f, 1.0f, 1.0f);
sp3C.x = this->actor.world.pos.x;
sp3C.y = this->actor.floorHeight + 2.0f;
sp3C.z = this->actor.world.pos.z;
EffectSsGRipple_Spawn(play, &sp3C, 1400, 500, 0);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_ME_ATTACK - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_ME_ATTACK - SFX_FLAG);
}
}
@@ -517,10 +517,10 @@ void func_809ED224(Boss04* this) {
this->actionFunc = func_809ED2A0;
this->unk_1F8 = 60;
this->unk_1FA = 100;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->unk_2D0 = 10000.0f;
this->unk_2C8 = 200;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_ME_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_ME_DEAD);
this->actor.flags &= ~ACTOR_FLAG_1;
Audio_RestorePrevBgm();
this->unk_1F6 = 10;
@@ -559,7 +559,7 @@ void func_809ED2A0(Boss04* this, PlayState* play) {
}
if (this->unk_1FA == 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -569,7 +569,7 @@ void func_809ED45C(Boss04* this, PlayState* play) {
if ((this->unk_1FE == 0) && (this->collider1.elements[0].info.bumperFlags & BUMP_HIT)) {
this->collider1.elements[0].info.bumperFlags &= ~BUMP_HIT;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_ME_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_ME_DAMAGE);
damage = this->actor.colChkInfo.damage;
this->actor.colChkInfo.health = this->actor.colChkInfo.health - damage;
if ((s8)this->actor.colChkInfo.health <= 0) {
@@ -709,7 +709,8 @@ void Boss04_Update(Actor* thisx, PlayState* play2) {
Actor_MoveWithGravity(&this->actor);
this->actor.world.pos.y -= 100.0f;
this->actor.prevPos.y -= 100.0f;
- Actor_UpdateBgCheckInfo(play, &this->actor, 100.0f, 120.0f, 200.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 100.0f, 120.0f, 200.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
this->actor.world.pos.y += 100.0f;
this->actor.prevPos.y += 100.0f;
}
@@ -765,7 +766,7 @@ void Boss04_Update(Actor* thisx, PlayState* play2) {
}
if (this->unk_74A != 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_ME_EXIST - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_ME_EXIST - SFX_FLAG);
}
}
@@ -828,7 +829,7 @@ void Boss04_Draw(Actor* thisx, PlayState* play) {
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
Boss04_OverrideLimbDraw, Boss04_PostLimbDraw, &this->actor);
- POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP);
+ POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
if (this->actionFunc != func_809EC568) {
func_8012C448(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_Boss_04/z_boss_04.h b/src/overlays/actors/ovl_Boss_04/z_boss_04.h
index c0944ce82..6aa153597 100644
--- a/src/overlays/actors/ovl_Boss_04/z_boss_04.h
+++ b/src/overlays/actors/ovl_Boss_04/z_boss_04.h
@@ -76,6 +76,4 @@ typedef struct Boss04 {
/* 0x74A */ u8 unk_74A;
} Boss04; // size = 0x74C
-extern const ActorInit Boss_04_InitVars;
-
#endif // Z_BOSS_04_H
diff --git a/src/overlays/actors/ovl_Boss_05/overlay.cfg b/src/overlays/actors/ovl_Boss_05/overlay.cfg
deleted file mode 100644
index db19abb80..000000000
--- a/src/overlays/actors/ovl_Boss_05/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Boss_05
-z_boss_05.c
diff --git a/src/overlays/actors/ovl_Boss_05/z_boss_05.c b/src/overlays/actors/ovl_Boss_05/z_boss_05.c
index 7b40069d7..314370079 100644
--- a/src/overlays/actors/ovl_Boss_05/z_boss_05.c
+++ b/src/overlays/actors/ovl_Boss_05/z_boss_05.c
@@ -147,7 +147,7 @@ static DamageTable D_809F1C20 = {
/* Powder Keg */ DMG_ENTRY(1, 0xF),
};
-const ActorInit Boss_05_InitVars = {
+ActorInit Boss_05_InitVars = {
ACTOR_BOSS_05,
ACTORCAT_ENEMY,
FLAGS,
diff --git a/src/overlays/actors/ovl_Boss_05/z_boss_05.h b/src/overlays/actors/ovl_Boss_05/z_boss_05.h
index 7a3f29507..8f46476ea 100644
--- a/src/overlays/actors/ovl_Boss_05/z_boss_05.h
+++ b/src/overlays/actors/ovl_Boss_05/z_boss_05.h
@@ -14,6 +14,4 @@ typedef struct Boss05 {
/* 0x174 */ char unk_174[0x394];
} Boss05; // size = 0x508
-extern const ActorInit Boss_05_InitVars;
-
#endif // Z_BOSS_05_H
diff --git a/src/overlays/actors/ovl_Boss_06/overlay.cfg b/src/overlays/actors/ovl_Boss_06/overlay.cfg
deleted file mode 100644
index 3f5b0e7d5..000000000
--- a/src/overlays/actors/ovl_Boss_06/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Boss_06
-z_boss_06.c
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 1b8b6fef6..3d8beb79d 100644
--- a/src/overlays/actors/ovl_Boss_06/z_boss_06.c
+++ b/src/overlays/actors/ovl_Boss_06/z_boss_06.c
@@ -29,11 +29,11 @@ void func_809F2E34(Boss06* this, PlayState* play);
void func_809F2ED0(Boss06* this, PlayState* play);
void func_809F2EE8(Boss06* this, PlayState* play);
-static Vec3f D_809F4370[128];
-static EnKnight* D_809F4970;
-static s32 D_809F4974;
-static s32 D_809F4978;
-static s32 D_809F497C;
+Vec3f D_809F4370[128];
+EnKnight* D_809F4970;
+s32 D_809F4974;
+s32 D_809F4978;
+s32 D_809F497C;
static DamageTable sDamageTable = {
/* Deku Nut */ DMG_ENTRY(0, 0xF),
@@ -70,7 +70,7 @@ static DamageTable sDamageTable = {
/* Powder Keg */ DMG_ENTRY(0, 0xF),
};
-const ActorInit Boss_06_InitVars = {
+ActorInit Boss_06_InitVars = {
ACTOR_BOSS_06,
ACTORCAT_BOSS,
FLAGS,
@@ -102,7 +102,7 @@ static ColliderCylinderInit sCylinderInit = {
{ 90, 140, 10, { 0, 0, 0 } },
};
-static Vec3f D_809F40EC[] = {
+Vec3f D_809F40EC[] = {
{ 1081.0f, 235.0f, 3224.0f },
{ 676.0f, 235.0f, 3224.0f },
};
@@ -136,7 +136,7 @@ void Boss06_Init(Actor* thisx, PlayState* play) {
D_809F4970 = (EnKnight*)this->actor.parent;
this->actor.colChkInfo.damageTable = &sDamageTable;
- if ((KREG(64) != 0) || (gSaveContext.eventInf[5] & 0x80)) {
+ if ((KREG(64) != 0) || CHECK_EVENTINF(EVENTINF_57)) {
this->actionFunc = func_809F2E14;
} else {
this->actionFunc = func_809F2B64;
@@ -183,7 +183,7 @@ void func_809F24A8(Boss06* this) {
}
#ifdef NON_MATCHING
-// Weird loading of 1
+// The 1 constant from the switch branch is reused in case 2 for some reason.
void func_809F24C8(Boss06* this, PlayState* play) {
s16 sp4E = 0;
Player* player = GET_PLAYER(play);
@@ -195,12 +195,12 @@ void func_809F24C8(Boss06* this, PlayState* play) {
switch (this->unk_1C9) {
case 0:
- if (ActorCutscene_GetCurrentIndex() != -1) {
+ if (CutsceneManager_GetCurrentCsId() != CS_ID_NONE) {
break;
}
- Cutscene_Start(play, &play->csCtx);
- func_800B7298(play, &this->actor, 7);
+ Cutscene_StartManual(play, &play->csCtx);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT);
this->subCamId = Play_CreateSubCamera(play);
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_ACTIVE);
@@ -213,7 +213,7 @@ void func_809F24C8(Boss06* this, PlayState* play) {
temp_s0 = play->actorCtx.actorLists[ACTORCAT_ITEMACTION].first;
while (temp_s0 != NULL) {
if (temp_s0->id == ACTOR_EN_ARROW) {
- Actor_MarkForDeath(temp_s0);
+ Actor_Kill(temp_s0);
}
temp_s0 = temp_s0->next;
}
@@ -221,7 +221,7 @@ void func_809F24C8(Boss06* this, PlayState* play) {
case 1:
if (this->unk_1CA >= 10) {
Math_ApproachF(&this->unk_1E4, 30.0f, 0.2f, 1.0f);
- play->envCtx.fillScreen = 1;
+ play->envCtx.fillScreen = true;
play->envCtx.screenFillColor[2] = 0;
play->envCtx.screenFillColor[1] = 0;
play->envCtx.screenFillColor[0] = 0;
@@ -234,13 +234,13 @@ void func_809F24C8(Boss06* this, PlayState* play) {
}
if (this->unk_1CA >= 60) {
- play->envCtx.fillScreen = 0;
+ play->envCtx.fillScreen = false;
this->unk_1C8 = 0;
this->unk_1DC = 0.0f;
this->unk_1D8 = 0.0f;
if (this->unk_1CA == 60) {
D_809F4970->unk_154++;
- func_800B7298(play, &this->actor, 0x84);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_132);
player->actor.shape.rot.y = 0;
player->actor.world.rot.y = player->actor.shape.rot.y;
}
@@ -332,8 +332,8 @@ void func_809F24C8(Boss06* this, PlayState* play) {
func_809F2ED0(this, play);
func_80169AFC(play, this->subCamId, 0);
this->subCamId = SUB_CAM_ID_DONE;
- Cutscene_End(play, &play->csCtx);
- func_800B7298(play, &this->actor, 6);
+ Cutscene_StopManual(play, &play->csCtx);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_END);
D_809F4970->unk_151 = 0;
}
break;
@@ -382,7 +382,7 @@ void func_809F2C44(Boss06* this, PlayState* play) {
}
if (D_809F4970->unk_153 == 2) {
- Actor_MarkForDeath(this->actor.child);
+ Actor_Kill(this->actor.child);
this->actor.child = NULL;
func_809F2E14(this, play);
}
@@ -642,7 +642,7 @@ void Boss06_Draw(Actor* thisx, PlayState* play2) {
Matrix_Translate(this->actor.world.pos.x + this->unk_1B0, this->actor.world.pos.y + 84.0f + this->unk_1B4,
(this->actor.world.pos.z - 2.0f) + spE0, MTXMODE_NEW);
- gSPDisplayList(POLY_XLU_DISP++, gLightOrb1DL);
+ gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, (u8)((140.0f * sp68) + 115.0f), temp_s2);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 205, (u8)((100.0f * sp68) + 65.0f), 128);
@@ -650,7 +650,7 @@ void Boss06_Draw(Actor* thisx, PlayState* play2) {
Matrix_RotateZS(play->gameplayFrames * 64, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, gLightOrbVtxDL);
+ gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL);
}
CLOSE_DISPS(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_Boss_06/z_boss_06.h b/src/overlays/actors/ovl_Boss_06/z_boss_06.h
index 39d2f900a..f7b4d3ec0 100644
--- a/src/overlays/actors/ovl_Boss_06/z_boss_06.h
+++ b/src/overlays/actors/ovl_Boss_06/z_boss_06.h
@@ -50,6 +50,4 @@ typedef struct Boss06 {
/* 0xA2C */ f32 unk_A2C;
} Boss06; // size = 0xA30
-extern const ActorInit Boss_06_InitVars;
-
#endif // Z_BOSS_06_H
diff --git a/src/overlays/actors/ovl_Boss_07/overlay.cfg b/src/overlays/actors/ovl_Boss_07/overlay.cfg
deleted file mode 100644
index 79c564ccc..000000000
--- a/src/overlays/actors/ovl_Boss_07/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Boss_07
-z_boss_07.c
diff --git a/src/overlays/actors/ovl_Boss_07/z_boss_07.c b/src/overlays/actors/ovl_Boss_07/z_boss_07.c
index 923c838fc..824c70fa2 100644
--- a/src/overlays/actors/ovl_Boss_07/z_boss_07.c
+++ b/src/overlays/actors/ovl_Boss_07/z_boss_07.c
@@ -234,7 +234,7 @@ static DamageTable D_80A07A00 = {
/* Powder Keg */ DMG_ENTRY(2, 0xB),
};
-const ActorInit Boss_07_InitVars = {
+ActorInit Boss_07_InitVars = {
ACTOR_BOSS_07,
ACTORCAT_BOSS,
FLAGS,
diff --git a/src/overlays/actors/ovl_Boss_07/z_boss_07.h b/src/overlays/actors/ovl_Boss_07/z_boss_07.h
index f8a4d4d91..d17e3b172 100644
--- a/src/overlays/actors/ovl_Boss_07/z_boss_07.h
+++ b/src/overlays/actors/ovl_Boss_07/z_boss_07.h
@@ -13,6 +13,4 @@ typedef struct Boss07 {
/* 0x0148 */ char unk_148[0xAAD8];
} Boss07; // size = 0xAC20
-extern const ActorInit Boss_07_InitVars;
-
#endif // Z_BOSS_07_H
diff --git a/src/overlays/actors/ovl_Boss_Hakugin/overlay.cfg b/src/overlays/actors/ovl_Boss_Hakugin/overlay.cfg
deleted file mode 100644
index 059dde381..000000000
--- a/src/overlays/actors/ovl_Boss_Hakugin/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Boss_Hakugin
-z_boss_hakugin.c
diff --git a/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.c b/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.c
index efb46a892..d9a7cb348 100644
--- a/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.c
+++ b/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.c
@@ -34,7 +34,7 @@ void func_80B0A638(BossHakugin* this, PlayState* play);
void func_80B0A8C4(BossHakugin* this, PlayState* play);
#if 0
-const ActorInit Boss_Hakugin_InitVars = {
+ActorInit Boss_Hakugin_InitVars = {
ACTOR_BOSS_HAKUGIN,
ACTORCAT_BOSS,
FLAGS,
diff --git a/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.h b/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.h
index 4b8227021..10a01989a 100644
--- a/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.h
+++ b/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.h
@@ -36,6 +36,4 @@ typedef struct BossHakugin {
/* 0x3734 */ char unk_3734[0xDC];
} BossHakugin; // size = 0x3810
-extern const ActorInit Boss_Hakugin_InitVars;
-
#endif // Z_BOSS_HAKUGIN_H
diff --git a/src/overlays/actors/ovl_Demo_Effect/overlay.cfg b/src/overlays/actors/ovl_Demo_Effect/overlay.cfg
deleted file mode 100644
index 8f2105acf..000000000
--- a/src/overlays/actors/ovl_Demo_Effect/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Demo_Effect
-z_demo_effect.c
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 8b5deef59..cb34f8ff8 100644
--- a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c
+++ b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c
@@ -25,7 +25,7 @@ void func_808CDDE0(DemoEffect* this, PlayState* play);
void func_808CDFF8(Actor* thisx, PlayState* play);
void func_808CE078(Actor* thisx, PlayState* play2);
-const ActorInit Demo_Effect_InitVars = {
+ActorInit Demo_Effect_InitVars = {
ACTOR_DEMO_EFFECT,
ACTORCAT_BG,
FLAGS,
@@ -213,7 +213,7 @@ void func_808CDBDC(DemoEffect* this, PlayState* play) {
func_800B8FE8(&this->actor, NA_SE_EV_TIMETRIP_LIGHT - SFX_FLAG);
} else {
func_808CDAD0(1.0f);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -232,7 +232,7 @@ void func_808CDD70(DemoEffect* this, PlayState* play) {
this->timer++;
if (this->actor.scale.x < 0.02f) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -309,13 +309,13 @@ void func_808CE078(Actor* thisx, PlayState* play2) {
Matrix_RotateZS(zRot, 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_023288);
+ gSPDisplayList(POLY_XLU_DISP++, gEffFlash2DL);
Matrix_Pop();
Matrix_RotateZS(-zRot, 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_023288);
+ gSPDisplayList(POLY_XLU_DISP++, gEffFlash2DL);
CLOSE_DISPS(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.h b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.h
index 985e2c30c..9901a3189 100644
--- a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.h
+++ b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.h
@@ -34,6 +34,4 @@ typedef struct DemoEffect {
/* 0x178 */ DemoEffectActionFunc actionFunc;
} DemoEffect; // size = 0x17C
-extern const ActorInit Demo_Effect_InitVars;
-
#endif // Z_DEMO_EFFECT_H
diff --git a/src/overlays/actors/ovl_Demo_Getitem/overlay.cfg b/src/overlays/actors/ovl_Demo_Getitem/overlay.cfg
deleted file mode 100644
index df09fe2ea..000000000
--- a/src/overlays/actors/ovl_Demo_Getitem/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Demo_Getitem
-z_demo_getitem.c
diff --git a/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c b/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c
index d39c8aa17..6882c189a 100644
--- a/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c
+++ b/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.c
@@ -18,7 +18,7 @@ void func_80A4FB10(DemoGetitem* this, PlayState* play);
void func_80A4FB68(DemoGetitem* this, PlayState* play2);
void DemoGetitem_Draw(Actor* thisx, PlayState* play);
-const ActorInit Demo_Getitem_InitVars = {
+ActorInit Demo_Getitem_InitVars = {
ACTOR_DEMO_GETITEM,
ACTORCAT_BG,
FLAGS,
@@ -34,7 +34,7 @@ static s16 sObjectBankIndices[] = { OBJECT_GI_MASK14, OBJECT_GI_SWORD_4 };
static s16 sGetItemDraws[] = { GID_MASK_GREAT_FAIRY, GID_SWORD_GREAT_FAIRY };
-static u16 sCsActionIndices[] = { 0x6E, 0x236 };
+static u16 sCueTypes[] = { CS_CMD_ACTOR_CUE_110, CS_CMD_ACTOR_CUE_566 };
void DemoGetitem_Init(Actor* thisx, PlayState* play) {
s32 pad;
@@ -49,13 +49,14 @@ void DemoGetitem_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->actor, 0.25f);
this->actionFunc = func_80A4FB10;
this->item = sGetItemDraws[itemIndex];
- this->csAction = sCsActionIndices[itemIndex];
+ this->cueType = sCueTypes[itemIndex];
objectIndex = Object_GetIndex(&play->objectCtx, sObjectBankIndices[itemIndex]);
if (objectIndex < 0) {
- Actor_MarkForDeath(&this->actor);
- } else {
- this->objectIndex = objectIndex;
+ Actor_Kill(&this->actor);
+ return;
}
+
+ this->objectIndex = objectIndex;
}
void DemoGetitem_Destroy(Actor* thisx, PlayState* play) {
@@ -73,26 +74,31 @@ void func_80A4FB68(DemoGetitem* this, PlayState* play2) {
PlayState* play = play2;
u16 sp22 = (play->gameplayFrames * 1000) & 0xFFFF;
- if (Cutscene_CheckActorAction(play, this->csAction)) {
- if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->csAction)]->action != 4) {
+ if (Cutscene_IsCueInChannel(play, this->cueType)) {
+ if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id != 4) {
this->actor.shape.yOffset = 0.0f;
}
- switch (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->csAction)]->action) {
+ switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id) {
case 2:
this->actor.draw = DemoGetitem_Draw;
- Cutscene_ActorTranslate(&this->actor, play, Cutscene_GetActorActionIndex(play, this->csAction));
+ Cutscene_ActorTranslate(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType));
this->actor.shape.rot.y += 0x3E8;
- return;
+ break;
+
case 3:
- Actor_MarkForDeath(&this->actor);
- return;
+ Actor_Kill(&this->actor);
+ break;
+
case 4:
this->actor.draw = DemoGetitem_Draw;
- Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->csAction));
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType));
this->actor.shape.yOffset = Math_SinS(sp22) * 15.0f;
- return;
+ break;
+
+ default:
+ this->actor.draw = NULL;
+ break;
}
- this->actor.draw = NULL;
} else {
this->actor.draw = NULL;
}
diff --git a/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.h b/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.h
index acc2c0312..ca00f6048 100644
--- a/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.h
+++ b/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.h
@@ -12,11 +12,9 @@ typedef void (*DemoGetitemActionFunc)(struct DemoGetitem*, PlayState*);
typedef struct DemoGetitem {
/* 0x000 */ Actor actor;
/* 0x144 */ s16 item;
- /* 0x146 */ u16 csAction;
+ /* 0x146 */ u16 cueType;
/* 0x148 */ s8 objectIndex;
/* 0x14C */ DemoGetitemActionFunc actionFunc;
} DemoGetitem; // size = 0x150
-extern const ActorInit Demo_Getitem_InitVars;
-
#endif // Z_DEMO_GETITEM_H
diff --git a/src/overlays/actors/ovl_Demo_Kankyo/overlay.cfg b/src/overlays/actors/ovl_Demo_Kankyo/overlay.cfg
deleted file mode 100644
index b9c10f311..000000000
--- a/src/overlays/actors/ovl_Demo_Kankyo/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Demo_Kankyo
-z_demo_kankyo.c
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 10b72634a..629f49398 100644
--- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c
+++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c
@@ -22,7 +22,7 @@ void DemoKakyo_MoonSparklesActionFunc(DemoKankyo* this, PlayState* play);
static u8 sLostWoodsSparklesMutex = false; // make sure only one can exist at once
static s16 sLostWoodsSkyFishParticleNum = 0;
-const ActorInit Demo_Kankyo_InitVars = {
+ActorInit Demo_Kankyo_InitVars = {
ACTOR_DEMO_KANKYO,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -59,7 +59,7 @@ void DemoKakyo_LostWoodsSparkleActionFunc(DemoKankyo* this, PlayState* play) {
if (play->envCtx.unk_F2[3] != 0) {
play->envCtx.unk_F2[3]--;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else if (play->envCtx.unk_F2[3] < DEMOKANKYO_EFFECT_COUNT) {
play->envCtx.unk_F2[3] += 16;
@@ -444,7 +444,8 @@ void DemoKankyo_Init(Actor* thisx, PlayState* play) {
for (i = 0; i < ARRAY_COUNT(this->effects); i++) { this->effects[i].state = DEMO_KANKYO_STATE_INIT; }
// clang-format on
- if (1) {};
+ //! FAKE:
+ if (1) {}
switch (this->actor.params) {
case DEMO_KANKYO_TYPE_LOSTWOODS:
@@ -454,7 +455,7 @@ void DemoKankyo_Init(Actor* thisx, PlayState* play) {
DemoKankyo_SetupAction(this, DemoKakyo_LostWoodsSparkleActionFunc);
sLostWoodsSparklesMutex = true;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
break;
@@ -484,7 +485,7 @@ void DemoKankyo_Init(Actor* thisx, PlayState* play) {
void DemoKankyo_Destroy(Actor* thisx, PlayState* play) {
DemoKankyo* this = THIS;
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
void DemoKankyo_Update(Actor* thisx, PlayState* play) {
@@ -571,7 +572,7 @@ void DemoKakyo_DrawLostWoodsSparkle(Actor* thisx, PlayState* play2) {
}
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
- Matrix_RotateZF(DEGF_TO_RADF(play->state.frames * 20.0f), MTXMODE_APPLY);
+ Matrix_RotateZF(DEG_TO_RAD(play->state.frames * 20.0f), MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -639,11 +640,11 @@ void DemoKankyo_DrawMoonAndGiant(Actor* thisx, PlayState* play2) {
break;
}
- gSPDisplayList(POLY_XLU_DISP++, &gLightOrb1DL);
+ gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL);
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
- Matrix_RotateZF(DEGF_TO_RADF(play->state.frames * 20.0f), MTXMODE_APPLY);
+ Matrix_RotateZF(DEG_TO_RAD(play->state.frames * 20.0f), MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -651,7 +652,7 @@ void DemoKankyo_DrawMoonAndGiant(Actor* thisx, PlayState* play2) {
if (this->actor.params == DEMO_KANKYO_TYPE_GIANTS) {
gSPDisplayList(POLY_XLU_DISP++, gBubbleDL);
} else {
- gSPDisplayList(POLY_XLU_DISP++, gLightOrbVtxDL);
+ gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL);
}
}
}
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 f6f05d0a6..971adb3bd 100644
--- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.h
+++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.h
@@ -48,6 +48,4 @@ typedef enum {
/* 3 */ DEMO_KANKYO_STATE_DISABLED,
} DemoKankyoStateType;
-extern const ActorInit Demo_Kankyo_InitVars;
-
#endif // Z_DEMO_KANKYO_H
diff --git a/src/overlays/actors/ovl_Demo_Moonend/overlay.cfg b/src/overlays/actors/ovl_Demo_Moonend/overlay.cfg
deleted file mode 100644
index 3d2793e42..000000000
--- a/src/overlays/actors/ovl_Demo_Moonend/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Demo_Moonend
-z_demo_moonend.c
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 c051ccf49..76a4230f5 100644
--- a/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c
+++ b/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c
@@ -16,7 +16,7 @@ void DemoMoonend_Update(Actor* thisx, PlayState* play);
void DemoMoonend_Draw(Actor* thisx, PlayState* play);
#if 0
-const ActorInit Demo_Moonend_InitVars = {
+ActorInit Demo_Moonend_InitVars = {
ACTOR_DEMO_MOONEND,
ACTORCAT_ITEMACTION,
FLAGS,
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 212e93d84..d36dcb284 100644
--- a/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.h
+++ b/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.h
@@ -13,6 +13,4 @@ typedef struct DemoMoonend {
/* 0x2E0 */ DemoMoonendActionFunc actionFunc;
} DemoMoonend; // size = 0x2E4
-extern const ActorInit Demo_Moonend_InitVars;
-
#endif // Z_DEMO_MOONEND_H
diff --git a/src/overlays/actors/ovl_Demo_Shd/overlay.cfg b/src/overlays/actors/ovl_Demo_Shd/overlay.cfg
deleted file mode 100644
index 0cf96d92a..000000000
--- a/src/overlays/actors/ovl_Demo_Shd/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Demo_Shd
-z_demo_shd.c
diff --git a/src/overlays/actors/ovl_Demo_Shd/z_demo_shd.c b/src/overlays/actors/ovl_Demo_Shd/z_demo_shd.c
index 0078f8959..f5e20a509 100644
--- a/src/overlays/actors/ovl_Demo_Shd/z_demo_shd.c
+++ b/src/overlays/actors/ovl_Demo_Shd/z_demo_shd.c
@@ -15,7 +15,7 @@ void DemoShd_Destroy(Actor* thisx, PlayState* play);
void DemoShd_Update(Actor* thisx, PlayState* play);
void DemoShd_Draw(Actor* thisx, PlayState* play);
-const ActorInit Demo_Shd_InitVars = {
+ActorInit Demo_Shd_InitVars = {
ACTOR_DEMO_SHD,
ACTORCAT_ENEMY,
FLAGS,
diff --git a/src/overlays/actors/ovl_Demo_Shd/z_demo_shd.h b/src/overlays/actors/ovl_Demo_Shd/z_demo_shd.h
index 4e375a243..05707f073 100644
--- a/src/overlays/actors/ovl_Demo_Shd/z_demo_shd.h
+++ b/src/overlays/actors/ovl_Demo_Shd/z_demo_shd.h
@@ -10,6 +10,4 @@ typedef struct DemoShd {
/* 0x0144 */ char unk_0144[0x118C];
} DemoShd; // size = 0x12D0
-extern const ActorInit Demo_Shd_InitVars;
-
#endif // Z_DEMO_SHD_H
diff --git a/src/overlays/actors/ovl_Demo_Syoten/overlay.cfg b/src/overlays/actors/ovl_Demo_Syoten/overlay.cfg
deleted file mode 100644
index 8fde4e6f6..000000000
--- a/src/overlays/actors/ovl_Demo_Syoten/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Demo_Syoten
-z_demo_syoten.c
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 b3a79895e..111ce284f 100644
--- a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c
+++ b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c
@@ -25,7 +25,7 @@ void func_80C17008(DemoSyoten* this, PlayState* play);
void func_80C173B4(Actor* thisx, PlayState* play);
void func_80C17690(Actor* thisx, PlayState* play);
-const ActorInit Demo_Syoten_InitVars = {
+ActorInit Demo_Syoten_InitVars = {
ACTOR_DEMO_SYOTEN,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -68,7 +68,7 @@ void DemoSyoten_Init(Actor* thisx, PlayState* play) {
this->unk_3E6 = 0;
this->unk_3DC = NULL;
this->unk_3E0 = NULL;
- this->unk_3F2 = 0;
+ this->cueId = 0;
this->unk_3D8 = 1.0f;
switch (DEMOSYOTEN_GET_F(&this->actor)) {
@@ -81,7 +81,7 @@ void DemoSyoten_Init(Actor* thisx, PlayState* play) {
this->actor.child =
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, 0);
- this->unk_3F0 = 0x215;
+ this->cueType = CS_CMD_ACTOR_CUE_533;
Actor_SetScale(&this->actor, 0.05f);
break;
@@ -91,14 +91,14 @@ void DemoSyoten_Init(Actor* thisx, PlayState* play) {
this->unk_3E0 = Lib_SegmentedToVirtual(&object_syoten_Matanimheader_001448);
this->unk_3E4 |= 1;
this->actionFunc = func_80C16BD4;
- this->unk_3F0 = 0x215;
+ this->cueType = CS_CMD_ACTOR_CUE_533;
Actor_SetScale(&this->actor, 0.05f);
break;
case DEMOSYOTEN_F_2:
this->unk_3DC = object_syoten_DL_001730;
this->unk_3E0 = Lib_SegmentedToVirtual(&object_syoten_Matanimheader_0018B8);
- this->unk_3F0 = 0x216;
+ this->cueType = CS_CMD_ACTOR_CUE_534;
this->actionFunc = func_80C16DD4;
this->unk_3E4 |= 2;
Actor_SetScale(&this->actor, 4.0f);
@@ -107,7 +107,7 @@ void DemoSyoten_Init(Actor* thisx, PlayState* play) {
case DEMOSYOTEN_F_3:
this->unk_3DC = object_syoten_DL_001DD0;
this->unk_3E0 = Lib_SegmentedToVirtual(&object_syoten_Matanimheader_002B98);
- this->unk_3F0 = 0x218;
+ this->cueType = CS_CMD_ACTOR_CUE_536;
this->unk_3E4 |= 8;
this->actionFunc = func_80C16EAC;
Actor_SetScale(&this->actor, 0.5f);
@@ -118,7 +118,7 @@ void DemoSyoten_Init(Actor* thisx, PlayState* play) {
this->unk_3E0 = Lib_SegmentedToVirtual(&object_syoten_Matanimheader_002B88);
this->unk_3E4 |= 2;
this->actionFunc = func_80C17008;
- this->unk_3F0 = 0x217;
+ this->cueType = CS_CMD_ACTOR_CUE_535;
this->unk_3E4 |= 1;
this->unk_3E4 |= 8;
this->actor.draw = func_80C17690;
@@ -219,20 +219,20 @@ void func_80C16A64(DemoSyoten* this, PlayState* play) {
}
void func_80C16A74(DemoSyoten* this, PlayState* play) {
- u16 temp_a0;
+ u16 cueId;
func_80183DE0(&this->unk_144);
- if (Cutscene_CheckActorAction(play, this->unk_3F0)) {
- if ((play->csCtx.frames >= 160) && (play->csCtx.frames < 322)) {
+ if (Cutscene_IsCueInChannel(play, this->cueType)) {
+ if ((play->csCtx.curFrame >= 160) && (play->csCtx.curFrame < 322)) {
func_800B9010(&this->actor, NA_SE_EV_IKANA_SOUL_LV - SFX_FLAG);
- } else if (play->csCtx.frames == 322) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_IKANA_SOUL_TRANSFORM);
+ } else if (play->csCtx.curFrame == 322) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_IKANA_SOUL_TRANSFORM);
}
- temp_a0 = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->unk_3F0)]->action;
- if (this->unk_3F2 != temp_a0) {
- this->unk_3F2 = temp_a0;
- switch (temp_a0) {
+ cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id;
+ if (this->cueId != cueId) {
+ this->cueId = cueId;
+ switch (cueId) {
case 1:
this->actor.draw = NULL;
break;
@@ -251,7 +251,7 @@ void func_80C16A74(DemoSyoten* this, PlayState* play) {
}
}
- if (temp_a0 == 3) {
+ if (cueId == 3) {
if (this->unk_3D8 > 0.0125f) {
this->unk_3D8 -= 0.0125f;
if (this->actor.child != NULL) {
@@ -271,13 +271,13 @@ void func_80C16A74(DemoSyoten* this, PlayState* play) {
void func_80C16BD4(DemoSyoten* this, PlayState* play) {
s32 pad;
- u16 temp_a0;
+ u16 cueId;
- if (Cutscene_CheckActorAction(play, this->unk_3F0)) {
- temp_a0 = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->unk_3F0)]->action;
- if (this->unk_3F2 != temp_a0) {
- this->unk_3F2 = temp_a0;
- switch (temp_a0) {
+ if (Cutscene_IsCueInChannel(play, this->cueType)) {
+ cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id;
+ if (this->cueId != cueId) {
+ this->cueId = cueId;
+ switch (cueId) {
default:
this->actor.draw = NULL;
break;
@@ -304,7 +304,7 @@ void func_80C16BD4(DemoSyoten* this, PlayState* play) {
}
}
- switch (temp_a0) {
+ switch (cueId) {
case 3:
if (this->actor.scale.x < 0.05f) {
this->actor.scale.x += 0.000625f;
@@ -313,8 +313,8 @@ void func_80C16BD4(DemoSyoten* this, PlayState* play) {
break;
case 4:
- this->actor.speedXZ =
- play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->unk_3F0)]->urot.z * 0.005493164f;
+ this->actor.speed =
+ play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->rot.z * 0.005493164f;
if (this->unk_3EC < this->unk_3E8->count) {
if (func_80C16818(this)) {
this->unk_3EC++;
@@ -330,13 +330,13 @@ void func_80C16BD4(DemoSyoten* this, PlayState* play) {
void func_80C16DD4(DemoSyoten* this, PlayState* play) {
s32 pad;
- u16 temp_a0;
+ u16 cueId;
- if (Cutscene_CheckActorAction(play, this->unk_3F0)) {
- temp_a0 = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->unk_3F0)]->action;
- if (this->unk_3F2 != temp_a0) {
- this->unk_3F2 = temp_a0;
- switch (temp_a0) {
+ if (Cutscene_IsCueInChannel(play, this->cueType)) {
+ cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id;
+ if (this->cueId != cueId) {
+ this->cueId = cueId;
+ switch (cueId) {
case 1:
this->actor.draw = NULL;
break;
@@ -344,12 +344,12 @@ void func_80C16DD4(DemoSyoten* this, PlayState* play) {
case 2:
this->actor.draw = DemoSyoten_Draw;
this->unk_3E6 = -6;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_DM_FLYING_GOD_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_DM_FLYING_GOD_DASH);
break;
}
}
- if ((temp_a0 == 2) && (this->unk_3E6 < 40)) {
+ if ((cueId == 2) && (this->unk_3E6 < 40)) {
this->unk_3E6++;
}
} else {
@@ -359,13 +359,13 @@ void func_80C16DD4(DemoSyoten* this, PlayState* play) {
void func_80C16EAC(DemoSyoten* this, PlayState* play) {
s32 pad;
- u16 temp_a0;
+ u16 cueId;
- if (Cutscene_CheckActorAction(play, this->unk_3F0)) {
- temp_a0 = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->unk_3F0)]->action;
- if (this->unk_3F2 != temp_a0) {
- this->unk_3F2 = temp_a0;
- switch (temp_a0) {
+ if (Cutscene_IsCueInChannel(play, this->cueType)) {
+ cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id;
+ if (this->cueId != cueId) {
+ this->cueId = cueId;
+ switch (cueId) {
case 1:
this->actor.draw = NULL;
this->unk_3D8 = 0.0f;
@@ -378,7 +378,7 @@ void func_80C16EAC(DemoSyoten* this, PlayState* play) {
}
}
- if (temp_a0 == 2) {
+ if (cueId == 2) {
if (this->actor.scale.x < 8.0f) {
this->actor.scale.x += 0.1875f;
}
@@ -401,13 +401,13 @@ void func_80C16EAC(DemoSyoten* this, PlayState* play) {
}
void func_80C17008(DemoSyoten* this, PlayState* play) {
- u16 temp_a0;
+ u16 cueId;
- if (Cutscene_CheckActorAction(play, this->unk_3F0)) {
- temp_a0 = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->unk_3F0)]->action;
- if (this->unk_3F2 != temp_a0) {
- this->unk_3F2 = temp_a0;
- switch (temp_a0) {
+ if (Cutscene_IsCueInChannel(play, this->cueType)) {
+ cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id;
+ if (this->cueId != cueId) {
+ this->cueId = cueId;
+ switch (cueId) {
case 1:
this->actor.draw = NULL;
break;
@@ -419,7 +419,7 @@ void func_80C17008(DemoSyoten* this, PlayState* play) {
}
}
- if ((temp_a0 == 2) && (this->unk_3E6 < 15)) {
+ if ((cueId == 2) && (this->unk_3E6 < 15)) {
this->unk_3E6++;
}
} else {
@@ -480,16 +480,16 @@ s32 func_80C170F8(PlayState* play, UNK_TYPE arg1, s32 arg2, UNK_TYPE arg3, UNK_T
void func_80C173B4(Actor* thisx, PlayState* play) {
s32 pad;
DemoSyoten* this = THIS;
- Mtx* matrix;
+ Mtx* mtx;
AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(&object_syoten_Matanimheader_001298));
- matrix = GRAPH_ALLOC(play->state.gfxCtx, ALIGN16(sizeof(Mtx) * this->unk_144.unk_18->unk_1));
+ mtx = GRAPH_ALLOC(play->state.gfxCtx, this->unk_144.unk_18->unk_1 * sizeof(Mtx));
- if (matrix != NULL) {
+ if (mtx != NULL) {
func_8012C2DC(play->state.gfxCtx);
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
- func_8018450C(play, &this->unk_144, matrix, (void*)func_80C170F8, 0, &this->actor);
+ func_8018450C(play, &this->unk_144, mtx, (void*)func_80C170F8, 0, &this->actor);
}
}
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 b0a00f2a6..1997a2bc5 100644
--- a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.h
+++ b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.h
@@ -32,11 +32,9 @@ typedef struct DemoSyoten {
/* 0x3E6 */ s16 unk_3E6;
/* 0x3E8 */ Path* unk_3E8;
/* 0x3EC */ s32 unk_3EC;
- /* 0x3F0 */ u16 unk_3F0;
- /* 0x3F2 */ u16 unk_3F2;
+ /* 0x3F0 */ u16 cueType;
+ /* 0x3F2 */ u16 cueId;
/* 0x3F4 */ DemoSyotenActionFunc actionFunc;
} DemoSyoten; // size = 0x3F8
-extern const ActorInit Demo_Syoten_InitVars;
-
#endif // Z_DEMO_SYOTEN_H
diff --git a/src/overlays/actors/ovl_Demo_Tre_Lgt/overlay.cfg b/src/overlays/actors/ovl_Demo_Tre_Lgt/overlay.cfg
deleted file mode 100644
index a063264ea..000000000
--- a/src/overlays/actors/ovl_Demo_Tre_Lgt/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Demo_Tre_Lgt
-z_demo_tre_lgt.c
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 ca833fe0e..b2b8e0077 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
@@ -35,7 +35,7 @@ static DemoTreLgtInfo D_808E1490[2] = {
{ 1.0f, 136.0f, 220.0f, 50.0f },
};
-const ActorInit Demo_Tre_Lgt_InitVars = {
+ActorInit Demo_Tre_Lgt_InitVars = {
ACTOR_DEMO_TRE_LGT,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -131,7 +131,7 @@ void DemoTreLgt_Animate(DemoTreLgt* this, PlayState* play) {
}
}
if (SkelCurve_Update(play, &this->skelCurve)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
diff --git a/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.h b/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.h
index 83a210b8c..e6d5d568c 100644
--- a/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.h
+++ b/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.h
@@ -18,6 +18,4 @@ typedef struct DemoTreLgt {
/* 0x174 */ s32 animationType;
} DemoTreLgt; // size = 0x178
-extern const ActorInit Demo_Tre_Lgt_InitVars;
-
#endif // Z_DEMO_TRE_LGT_H
diff --git a/src/overlays/actors/ovl_Dm_Ah/overlay.cfg b/src/overlays/actors/ovl_Dm_Ah/overlay.cfg
deleted file mode 100644
index 22f1cf7a3..000000000
--- a/src/overlays/actors/ovl_Dm_Ah/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Dm_Ah
-z_dm_ah.c
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 58d27d448..12815a044 100644
--- a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c
+++ b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c
@@ -15,7 +15,7 @@ void DmAh_Destroy(Actor* thisx, PlayState* play);
void DmAh_Update(Actor* thisx, PlayState* play);
void DmAh_Draw(Actor* thisx, PlayState* play);
-const ActorInit Dm_Ah_InitVars = {
+ActorInit Dm_Ah_InitVars = {
ACTOR_DM_AH,
ACTORCAT_NPC,
FLAGS,
@@ -52,7 +52,7 @@ void func_80C1D458(DmAh* this) {
}
}
-s32 func_80C1D4D0(DmAh* this, s32 arg1) {
+s32 func_80C1D4D0(DmAh* this, PlayState* play) {
s32 pad;
Vec3f sp40;
Vec3f sp34;
@@ -124,23 +124,23 @@ Actor* func_80C1D78C(PlayState* play) {
void func_80C1D7FC(DmAh* this, PlayState* play) {
s32 D_80C1DE00[] = { 0, 0, 0, 0, 0 };
- u16 csAction;
- s32 actionIndex;
+ u16 cueId;
+ s32 cueChannel;
- if (play->csCtx.state != 0) {
+ if (play->csCtx.state != CS_STATE_IDLE) {
if (!this->unk_29C) {
- this->action = 0xFF;
+ this->cueId = 255;
this->unk_29C = true;
this->animationIndex2 = this->animationIndex;
}
- if (Cutscene_CheckActorAction(play, 0x232)) {
- actionIndex = Cutscene_GetActorActionIndex(play, 0x232);
- csAction = play->csCtx.actorActions[actionIndex]->action;
- if (this->action != (u8)csAction) {
- this->action = csAction;
- func_80C1D410(this, D_80C1DE00[csAction]);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_562)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_562);
+ cueId = play->csCtx.actorCues[cueChannel]->id;
+ if (this->cueId != (u8)cueId) {
+ this->cueId = cueId;
+ func_80C1D410(this, D_80C1DE00[cueId]);
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
}
} else if (this->unk_29C) {
this->unk_29C = false;
@@ -181,7 +181,7 @@ void DmAh_Update(Actor* thisx, PlayState* play) {
func_80C1D6E0(this, play);
SkelAnime_Update(&this->skelAnime);
func_80C1D458(this);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
}
static Vec3f D_80C1DE14 = { 1000.0f, 0.0f, 0.0f };
diff --git a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.h b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.h
index dc9a437ed..b1e16f6e0 100644
--- a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.h
+++ b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.h
@@ -19,7 +19,7 @@ typedef struct DmAh {
/* 0x1B0 */ Vec3s morphTable[OBJECT_AH_LIMB_MAX];
/* 0x216 */ Vec3s jointTable[OBJECT_AH_LIMB_MAX];
/* 0x27C */ u16 unk_27C;
- /* 0x27E */ u8 action;
+ /* 0x27E */ u8 cueId;
/* 0x280 */ Actor* unk_280;
/* 0x284 */ s16 unk_284;
/* 0x286 */ s16 unk_286;
@@ -33,6 +33,4 @@ typedef struct DmAh {
/* 0x29C */ s32 unk_29C;
} DmAh; // size = 0x2A0
-extern const ActorInit Dm_Ah_InitVars;
-
#endif // Z_DM_AH_H
diff --git a/src/overlays/actors/ovl_Dm_Al/overlay.cfg b/src/overlays/actors/ovl_Dm_Al/overlay.cfg
deleted file mode 100644
index 92999ffdd..000000000
--- a/src/overlays/actors/ovl_Dm_Al/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Dm_Al
-z_dm_al.c
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 6c7a1be69..43ca006f2 100644
--- a/src/overlays/actors/ovl_Dm_Al/z_dm_al.c
+++ b/src/overlays/actors/ovl_Dm_Al/z_dm_al.c
@@ -15,7 +15,7 @@ void DmAl_Destroy(Actor* thisx, PlayState* play);
void DmAl_Update(Actor* thisx, PlayState* play);
void DmAl_Draw(Actor* thisx, PlayState* play);
-const ActorInit Dm_Al_InitVars = {
+ActorInit Dm_Al_InitVars = {
ACTOR_EN_AL,
ACTORCAT_NPC,
FLAGS,
@@ -48,23 +48,23 @@ s32 DmAl_ChangeAnim(DmAl* this, s32 animIndex) {
void func_80C1BDD8(DmAl* this, PlayState* play) {
s32 D_80C1C280[] = { 0, 0, 0, 0, 0 };
- u16 csAction;
- s32 actionIndex;
+ u16 cueId;
+ s32 cueChannel;
- if (play->csCtx.state != 0) {
+ if (play->csCtx.state != CS_STATE_IDLE) {
if (!this->unk_45C) {
- this->action = 0xFF;
+ this->cueId = 255;
this->unk_45C = true;
this->animIndex2 = this->animIndex;
}
- if (Cutscene_CheckActorAction(play, 0x232)) {
- actionIndex = Cutscene_GetActorActionIndex(play, 0x232);
- csAction = play->csCtx.actorActions[actionIndex]->action;
- if (this->action != (u8)csAction) {
- this->action = csAction;
- DmAl_ChangeAnim(this, D_80C1C280[csAction]);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_562)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_562);
+ cueId = play->csCtx.actorCues[cueChannel]->id;
+ if (this->cueId != (u8)cueId) {
+ this->cueId = cueId;
+ DmAl_ChangeAnim(this, D_80C1C280[cueId]);
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
}
} else if (this->unk_45C) {
this->unk_45C = false;
@@ -93,7 +93,7 @@ void DmAl_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
SkelAnime_Update(&this->skelAnime);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
}
s32 DmAl_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* rot, Vec3s* pos, Actor* thisx) {
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 8f89a4448..4114b9f9c 100644
--- a/src/overlays/actors/ovl_Dm_Al/z_dm_al.h
+++ b/src/overlays/actors/ovl_Dm_Al/z_dm_al.h
@@ -15,12 +15,15 @@ typedef struct DmAl {
/* 0x18C */ MtxF shawlMatrices[6];
/* 0x30C */ Vec3s jointTable[MADAME_AROMA_LIMB_MAX];
/* 0x3AE */ Vec3s morphTable[MADAME_AROMA_LIMB_MAX];
- /* 0x450 */ u8 action;
+ /* 0x450 */ u8 cueId;
/* 0x454 */ s32 animIndex;
/* 0x458 */ s32 animIndex2;
/* 0x45C */ s32 unk_45C;
} DmAl; // size = 0x460
-extern const ActorInit Dm_Al_InitVars;
+typedef enum {
+ /* 0x0 */ MADAME_AROMA_ANIMATION_0,
+ /* 0x1 */ MADAME_AROMA_ANIMATION_1
+} DmAlAnimations;
#endif // Z_DM_AL_H
diff --git a/src/overlays/actors/ovl_Dm_An/overlay.cfg b/src/overlays/actors/ovl_Dm_An/overlay.cfg
deleted file mode 100644
index 03f82edfa..000000000
--- a/src/overlays/actors/ovl_Dm_An/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Dm_An
-z_dm_an.c
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 592800e9d..2d474d111 100644
--- a/src/overlays/actors/ovl_Dm_An/z_dm_an.c
+++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.c
@@ -21,7 +21,7 @@ void func_80C1CAB0(DmAn* this, PlayState* play);
void func_80C1CC80(DmAn* this, PlayState* play);
void func_80C1D0B0(Actor* thisx, PlayState* play);
-const ActorInit Dm_An_InitVars = {
+ActorInit Dm_An_InitVars = {
ACTOR_DM_AN,
ACTORCAT_NPC,
FLAGS,
@@ -195,28 +195,28 @@ void func_80C1C958(DmAn* this, PlayState* play) {
void func_80C1CAB0(DmAn* this, PlayState* play) {
s32 sp28[] = { 0, 0, 12, 2, 4, 6, 8, 10, 11, 3 };
- u16 action;
- s32 sp20;
+ u16 cueId;
+ s32 cueChannel;
- if (play->csCtx.state != 0) {
+ if (play->csCtx.state != CS_STATE_IDLE) {
if (this->unk_2D0 == 0) {
- this->unk_2B0 = 255;
+ this->cueId = 255;
this->unk_2D0 = 1;
this->unk_2D4 = 0;
this->unk_2CC = this->unk_2C8;
}
- if (Cutscene_CheckActorAction(play, 0x22D)) {
- sp20 = Cutscene_GetActorActionIndex(play, 0x22D);
- action = play->csCtx.actorActions[sp20]->action;
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_557)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_557);
+ cueId = play->csCtx.actorCues[cueChannel]->id;
- if (this->unk_2B0 != (action & 0xFF)) {
- this->unk_2B0 = action;
+ if (this->cueId != (u8)cueId) {
+ this->cueId = cueId;
this->unk_2D4 = 1;
- func_80C1C4D8(this, play, sp28[action]);
+ func_80C1C4D8(this, play, sp28[cueId]);
}
- switch (this->unk_2B0) {
+ switch (this->cueId) {
case 2:
case 4:
case 5:
@@ -230,7 +230,7 @@ void func_80C1CAB0(DmAn* this, PlayState* play) {
}
break;
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, sp20);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
}
} else if (this->unk_2D0 != 0) {
this->unk_2D0 = 0;
@@ -264,7 +264,7 @@ void DmAn_Update(Actor* thisx, PlayState* play) {
func_80C1C410(this, play);
func_80C1C5B4(this);
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
}
Vec3f D_80C1D2C8 = { 450.0f, 700.0f, -760.0f };
diff --git a/src/overlays/actors/ovl_Dm_An/z_dm_an.h b/src/overlays/actors/ovl_Dm_An/z_dm_an.h
index 2282fee9c..6908e9342 100644
--- a/src/overlays/actors/ovl_Dm_An/z_dm_an.h
+++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.h
@@ -21,7 +21,7 @@ typedef struct DmAn {
/* 0x2AC */ s8 unk_2AC;
/* 0x2AD */ s8 unk_2AD;
/* 0x2AE */ u16 unk_2AE;
- /* 0x2B0 */ u8 unk_2B0;
+ /* 0x2B0 */ u8 cueId;
/* 0x2B4 */ Actor* unk_2B4;
/* 0x2B8 */ s16 unk_2B8;
/* 0x2BA */ s16 unk_2BA;
@@ -36,6 +36,4 @@ typedef struct DmAn {
/* 0x2D4 */ s32 unk_2D4;
} DmAn; // size = 0x2D8
-extern const ActorInit Dm_An_InitVars;
-
#endif // Z_DM_AN_H
diff --git a/src/overlays/actors/ovl_Dm_Bal/overlay.cfg b/src/overlays/actors/ovl_Dm_Bal/overlay.cfg
deleted file mode 100644
index fa51bac6a..000000000
--- a/src/overlays/actors/ovl_Dm_Bal/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Dm_Bal
-z_dm_bal.c
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 04dd13ca4..9e5ffed89 100644
--- a/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c
+++ b/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c
@@ -15,10 +15,10 @@ void DmBal_Destroy(Actor* thisx, PlayState* play);
void DmBal_Update(Actor* thisx, PlayState* play);
void DmBal_Draw(Actor* thisx, PlayState* play);
-void func_80C1EAC4(DmBal* this);
-void func_80C1EAD8(DmBal* this, PlayState* play);
+void DmBal_SetupDoNothing(DmBal* this);
+void DmBal_DoNothing(DmBal* this, PlayState* play);
-const ActorInit Dm_Bal_InitVars = {
+ActorInit Dm_Bal_InitVars = {
ACTOR_DM_BAL,
ACTORCAT_NPC,
FLAGS,
@@ -56,76 +56,76 @@ void DmBal_Init(Actor* thisx, PlayState* play) {
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f);
SkelAnime_InitFlex(play, &this->skelAnime, &object_bal_Skel_00A6D0, &object_bal_Anim_0005FC, this->jointTable,
this->morphTable, OBJECT_BAL_LIMB_MAX);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
this->timer = 60;
this->eyeIndex = 0;
- this->unk_336 = 0;
- func_80C1EAC4(this);
+ this->keepEyesShut = false;
+ DmBal_SetupDoNothing(this);
}
void DmBal_Destroy(Actor* thisx, PlayState* play) {
}
-void func_80C1EAC4(DmBal* this) {
- this->actionFunc = func_80C1EAD8;
+void DmBal_SetupDoNothing(DmBal* this) {
+ this->actionFunc = DmBal_DoNothing;
}
-void func_80C1EAD8(DmBal* this, PlayState* play) {
+void DmBal_DoNothing(DmBal* this, PlayState* play) {
}
void func_80C1EAE8(DmBal* this, PlayState* play) {
- static u16 D_80C1F2C0 = 0x63;
- s32 actionIndex;
+ static u16 sCueId = 99;
+ s32 cueChannel;
- if (Cutscene_CheckActorAction(play, 0x238)) {
- actionIndex = Cutscene_GetActorActionIndex(play, 0x238);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_568)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_568);
- if (D_80C1F2C0 != play->csCtx.actorActions[actionIndex]->action) {
- D_80C1F2C0 = play->csCtx.actorActions[actionIndex]->action;
- switch (play->csCtx.actorActions[actionIndex]->action) {
+ if (sCueId != play->csCtx.actorCues[cueChannel]->id) {
+ sCueId = play->csCtx.actorCues[cueChannel]->id;
+ switch (play->csCtx.actorCues[cueChannel]->id) {
case 1:
- this->unk_336 = 0;
+ this->keepEyesShut = false;
this->eyeIndex = 0;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
break;
case 2:
- this->unk_336 = 1;
+ this->keepEyesShut = true;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 12);
break;
case 3:
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 13);
break;
}
- } else if (D_80C1F2C0 == 3) {
+ } else if (sCueId == 3) {
if (Animation_OnFrame(&this->skelAnime, 0.0f)) {
- this->unk_336 = 1;
+ this->keepEyesShut = true;
} else if (Animation_OnFrame(&this->skelAnime, 29.0f)) {
- this->unk_336 = 0;
+ this->keepEyesShut = false;
this->eyeIndex = 0;
}
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
this->actor.home.pos = this->actor.world.pos;
} else {
- this->unk_336 = 0;
+ this->keepEyesShut = false;
this->eyeIndex = 0;
- D_80C1F2C0 = 0x63;
+ sCueId = 99;
}
}
void func_80C1EC60(DmBal* this, PlayState* play) {
- f32 temp_fv1_2;
+ f32 scaleX;
this->unk_338 += 0x320;
this->unk_33A += 0x3E8;
this->scale.y = this->scale.z = Math_CosS(this->unk_338) * 0.1f + 1.0f;
- temp_fv1_2 = (Math_SinS(this->unk_338) * 0.1f) + 1.0f;
- this->scale.x = SQ(temp_fv1_2);
+ scaleX = (Math_SinS(this->unk_338) * 0.1f) + 1.0f;
+ this->scale.x = SQ(scaleX);
this->actor.world.pos.y = this->actor.home.pos.y + (Math_SinS(this->unk_338) * 25.0f);
}
-void func_80C1ED0C(DmBal* this) {
- if (this->unk_336 == 1) {
+void DmBal_UpdateEyes(DmBal* this) {
+ if (this->keepEyesShut == true) {
this->eyeIndex = 1;
} else if (this->timer >= 4) {
this->timer--;
@@ -138,38 +138,36 @@ void func_80C1ED0C(DmBal* this) {
}
}
-void func_80C1ED64(DmBal* this, PlayState* play, Vec3f* arg2, Vec3f* arg3, f32 arg4) {
- Actor* paper = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_PAPER, arg2->x, arg2->y, arg2->z, 0, 0, 0, 0);
+void DmBal_SpawnPaper(DmBal* this, PlayState* play, Vec3f* pos, Vec3f* vel, f32 gravity) {
+ Actor* paper = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_PAPER, pos->x, pos->y, pos->z, 0, 0, 0, 0);
if (paper != NULL) {
- paper->velocity = *arg3;
- paper->gravity = arg4;
+ paper->velocity = *vel;
+ paper->gravity = gravity;
}
}
-Vec3f D_80C1F2C4 = { 0.0f, 9.0f, 0.0f };
-
void DmBal_Update(Actor* thisx, PlayState* play) {
s32 pad;
DmBal* this = THIS;
- Vec3f sp3C;
- Vec3f sp30;
+ // Throw confetti
if (Animation_OnFrame(&this->skelAnime, 29.0f) && (this->skelAnime.animation == &object_bal_Anim_001804)) {
- sp3C = this->actor.world.pos;
- sp30 = D_80C1F2C4;
- sp3C.x += 7.0f * Math_SinS(this->actor.shape.rot.y);
- sp3C.y += 2.5f;
- sp3C.z += 7.0f * Math_CosS(this->actor.shape.rot.y);
- sp30.x = Math_SinS(this->actor.shape.rot.y) * 5.0f;
- sp30.z = Math_CosS(this->actor.shape.rot.y) * 5.0f;
- func_80C1ED64(this, play, &sp3C, &sp30, -0.4f);
- func_80C1ED64(this, play, &sp3C, &sp30, -0.5f);
+ Vec3f pos = this->actor.world.pos;
+ Vec3f vel = { 0.0f, 9.0f, 0.0f };
+
+ pos.x += 7.0f * Math_SinS(this->actor.shape.rot.y);
+ pos.y += 2.5f;
+ pos.z += 7.0f * Math_CosS(this->actor.shape.rot.y);
+ vel.x = Math_SinS(this->actor.shape.rot.y) * 5.0f;
+ vel.z = Math_CosS(this->actor.shape.rot.y) * 5.0f;
+ DmBal_SpawnPaper(this, play, &pos, &vel, -0.4f);
+ DmBal_SpawnPaper(this, play, &pos, &vel, -0.5f);
}
this->actionFunc(this, play);
func_80C1EAE8(this, play);
func_80C1EC60(this, play);
- func_80C1ED0C(this);
+ DmBal_UpdateEyes(this);
SkelAnime_Update(&this->skelAnime);
}
@@ -178,8 +176,8 @@ s32 DmBal_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
Vec3s rots;
if (limbIndex == 6) {
- rots.x = Math_SinS(this->unk_33A) * 3640.0f;
- rots.z = Math_CosS(this->unk_33A) * 3640.0f;
+ rots.x = Math_SinS(this->unk_33A) * (0x10000 / 18);
+ rots.z = Math_CosS(this->unk_33A) * (0x10000 / 18);
Matrix_RotateZYX(rots.x, 0, rots.z, MTXMODE_APPLY);
Matrix_Scale(this->scale.x, this->scale.y, this->scale.z, MTXMODE_APPLY);
Matrix_RotateZS(-rots.z, MTXMODE_APPLY);
@@ -191,7 +189,7 @@ s32 DmBal_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
void DmBal_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
}
-TexturePtr sEyeTextures[] = { object_bal_Tex_006050, object_bal_Tex_0094D0 };
+static TexturePtr sEyeTextures[] = { object_bal_Tex_006050, object_bal_Tex_0094D0 };
void DmBal_Draw(Actor* thisx, PlayState* play) {
DmBal* this = THIS;
diff --git a/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.h b/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.h
index bda05149f..01f10d4c9 100644
--- a/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.h
+++ b/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.h
@@ -18,11 +18,9 @@ typedef struct DmBal {
/* 0x19C */ Vec3s morphTable[OBJECT_BAL_LIMB_MAX];
/* 0x328 */ UNK_TYPE1 pad_328[12];
/* 0x334 */ s16 timer;
- /* 0x336 */ s16 unk_336;
+ /* 0x336 */ s16 keepEyesShut;
/* 0x338 */ s16 unk_338;
/* 0x33A */ s16 unk_33A;
} DmBal; /* size = 0x33C */
-extern const ActorInit Dm_Bal_InitVars;
-
#endif // Z_DM_BAL_H
diff --git a/src/overlays/actors/ovl_Dm_Char00/overlay.cfg b/src/overlays/actors/ovl_Dm_Char00/overlay.cfg
deleted file mode 100644
index 0d49d3bbc..000000000
--- a/src/overlays/actors/ovl_Dm_Char00/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Dm_Char00
-z_dm_char00.c
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 a40bd1bc3..8657a9dc9 100644
--- a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c
+++ b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c
@@ -20,7 +20,7 @@ void DmChar00_Draw(Actor* thisx, PlayState* play2);
void func_80AA67F8(DmChar00* this, PlayState* play);
void func_80AA695C(DmChar00* this, PlayState* play);
-const ActorInit Dm_Char00_InitVars = {
+ActorInit Dm_Char00_InitVars = {
ACTOR_DM_CHAR00,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -150,26 +150,26 @@ void func_80AA5580(SkelAnime* skelAnime, AnimationInfo* animation, u16 idx) {
void func_80AA561C(DmChar00* this, PlayState* play) {
if (DMCHAR00_GET(&this->actor) == DMCHAR00_0) {
- switch (play->csCtx.frames + 20) {
+ switch (play->csCtx.curFrame + 20) {
case 503:
case 926:
case 979:
case 1222:
case 1682:
case 2194:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
break;
case 1858:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FAIRY_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_ATTACK);
break;
case 2043:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FAIRY_SURPRISE);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_SURPRISE);
break;
}
} else {
- switch (play->csCtx.frames + 20) {
+ switch (play->csCtx.curFrame + 20) {
case 503:
case 926:
case 979:
@@ -177,25 +177,25 @@ void func_80AA561C(DmChar00* this, PlayState* play) {
case 1687:
case 2194:
case 2210:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
break;
case 2043:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_MONDO_SURPRISE);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_MONDO_SURPRISE);
break;
}
}
}
void func_80AA5720(DmChar00* this, PlayState* play) {
- if ((DMCHAR00_GET(&this->actor) == DMCHAR00_0) && (play->csCtx.frames == 505)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SPOT_LIGHT_OPEN);
+ if ((DMCHAR00_GET(&this->actor) == DMCHAR00_0) && (play->csCtx.curFrame == 505)) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SPOT_LIGHT_OPEN);
}
}
void func_80AA575C(DmChar00* this, PlayState* play) {
if (DMCHAR00_GET(&this->actor) == DMCHAR00_0) {
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 474:
case 489:
case 495:
@@ -207,51 +207,51 @@ void func_80AA575C(DmChar00* this, PlayState* play) {
case 877:
case 882:
case 887:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FAIRY_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_ATTACK);
break;
case 520:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BELL_SPIT);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BELL_SPIT);
break;
case 774:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FAIRY_SURPRISE);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_SURPRISE);
break;
case 904:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BELL_SIGH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BELL_SIGH);
break;
case 813:
case 972:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BELL_BRAKE);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BELL_BRAKE);
break;
}
- } else if (play->csCtx.frames == 660) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_MONDO_SURPRISE);
+ } else if (play->csCtx.curFrame == 660) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_MONDO_SURPRISE);
}
}
void func_80AA5890(DmChar00* this, PlayState* play) {
- if ((DMCHAR00_GET(&this->actor) == DMCHAR00_0) && (play->csCtx.frames == 20)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
+ if ((DMCHAR00_GET(&this->actor) == DMCHAR00_0) && (play->csCtx.curFrame == 20)) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
}
}
void func_80AA58CC(DmChar00* this, PlayState* play) {
if (DMCHAR00_GET(&this->actor) == DMCHAR00_0) {
- if (play->csCtx.frames == 568) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FAIRY_SURPRISE);
+ if (play->csCtx.curFrame == 568) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_SURPRISE);
}
} else {
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 375:
case 479:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
break;
case 534:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FAIRY_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_ATTACK);
break;
}
}
@@ -262,18 +262,18 @@ void func_80AA5950(DmChar00* this, PlayState* play) {
void func_80AA5960(DmChar00* this, PlayState* play) {
if (DMCHAR00_GET(&this->actor) == DMCHAR00_0) {
- if (play->csCtx.frames == 280) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FAIRY_SURPRISE);
+ if (play->csCtx.curFrame == 280) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_SURPRISE);
}
} else {
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 87:
case 190:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
break;
case 244:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FAIRY_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_ATTACK);
break;
}
}
@@ -281,114 +281,114 @@ void func_80AA5960(DmChar00* this, PlayState* play) {
void func_80AA59E4(DmChar00* this, PlayState* play) {
if (DMCHAR00_GET(&this->actor) == DMCHAR00_0) {
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 125:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
break;
case 1832:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_WHITE_OUT_INTO_MOON);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_SY_WHITE_OUT_INTO_MOON);
break;
}
- } else if (play->csCtx.frames == 125) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
+ } else if (play->csCtx.curFrame == 125) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
}
}
void func_80AA5A6C(DmChar00* this, PlayState* play) {
if (DMCHAR00_GET(&this->actor) == DMCHAR00_0) {
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 44:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
break;
case 891:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_WHITE_OUT_INTO_MOON);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_SY_WHITE_OUT_INTO_MOON);
break;
}
- } else if (play->csCtx.frames == 44) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
+ } else if (play->csCtx.curFrame == 44) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
}
}
void func_80AA5AF4(DmChar00* this, PlayState* play) {
if (DMCHAR00_GET(&this->actor) == DMCHAR00_0) {
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 352:
case 401:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
break;
case 440:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
break;
case 550:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BELL_BRAKE);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BELL_BRAKE);
break;
}
} else {
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 362:
case 401:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
break;
case 454:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
break;
}
- if ((play->csCtx.frames >= 500) && (play->csCtx.frames < 602)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FAIRY_SHIVER - SFX_FLAG);
+ if ((play->csCtx.curFrame >= 500) && (play->csCtx.curFrame < 602)) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_SHIVER - SFX_FLAG);
}
}
}
void func_80AA5BF8(DmChar00* this, PlayState* play) {
if (DMCHAR00_GET(&this->actor) == DMCHAR00_0) {
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 762:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_WHITE_FAIRY_SHOT_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_SHOT_DASH);
break;
case 797:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
break;
}
} else {
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 762:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BLACK_FAIRY_SHOT_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_SHOT_DASH);
break;
case 797:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
break;
}
}
if ((this->unk_261 == 53) && Animation_OnFrame(&this->skelAnime, 16.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
}
}
void func_80AA5CD4(DmChar00* this, PlayState* play) {
- if ((DMCHAR00_GET(&this->actor) != DMCHAR00_0) && (play->csCtx.frames == 467)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
+ if ((DMCHAR00_GET(&this->actor) != DMCHAR00_0) && (play->csCtx.curFrame == 467)) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
}
}
void func_80AA5D10(DmChar00* this, PlayState* play) {
if (DMCHAR00_GET(&this->actor) == DMCHAR00_0) {
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 8:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FAIRY_SURPRISE);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_SURPRISE);
break;
case 130:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_NAVY_VANISH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_NAVY_VANISH);
break;
}
}
@@ -396,14 +396,14 @@ void func_80AA5D10(DmChar00* this, PlayState* play) {
void func_80AA5D6C(DmChar00* this, PlayState* play) {
if (DMCHAR00_GET(&this->actor) == DMCHAR00_0) {
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 2:
case 166:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
break;
case 31:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FAIRY_SURPRISE);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_SURPRISE);
break;
}
}
@@ -411,15 +411,15 @@ void func_80AA5D6C(DmChar00* this, PlayState* play) {
void func_80AA5DC8(DmChar00* this, PlayState* play) {
if (DMCHAR00_GET(&this->actor) == DMCHAR00_0) {
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 233:
case 415:
case 593:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
break;
case 130:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_NAVY_VANISH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_NAVY_VANISH);
break;
}
}
@@ -427,28 +427,28 @@ void func_80AA5DC8(DmChar00* this, PlayState* play) {
void func_80AA5E2C(DmChar00* this, PlayState* play) {
if (DMCHAR00_GET(&this->actor) == DMCHAR00_1) {
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 32:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
break;
case 42:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
break;
case 192:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BELL_BRAKE);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BELL_BRAKE);
break;
case 215:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_DIVE_INTO_WEED);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_DIVE_INTO_WEED);
break;
}
}
}
void func_80AA5EBC(DmChar00* this, PlayState* play) {
- if (play->csCtx.state != 0) {
+ if (play->csCtx.state != CS_STATE_IDLE) {
switch (play->sceneId) {
case SCENE_LOST_WOODS:
if (gSaveContext.sceneLayer == 1) {
@@ -458,11 +458,11 @@ void func_80AA5EBC(DmChar00* this, PlayState* play) {
case SCENE_OPENINGDAN:
if (gSaveContext.sceneLayer == 0) {
- if (play->csCtx.currentCsIndex == 0) {
+ if (play->csCtx.scriptIndex == 0) {
func_80AA5720(this, play);
- } else if (play->csCtx.currentCsIndex == 1) {
+ } else if (play->csCtx.scriptIndex == 1) {
func_80AA575C(this, play);
- } else if (play->csCtx.currentCsIndex == 2) {
+ } else if (play->csCtx.scriptIndex == 2) {
func_80AA5890(this, play);
}
}
@@ -470,17 +470,17 @@ void func_80AA5EBC(DmChar00* this, PlayState* play) {
case SCENE_OKUJOU:
if (gSaveContext.sceneLayer == 0) {
- if (play->csCtx.currentCsIndex == 0) {
+ if (play->csCtx.scriptIndex == 0) {
func_80AA58CC(this, play);
- } else if (play->csCtx.currentCsIndex == 1) {
+ } else if (play->csCtx.scriptIndex == 1) {
func_80AA5950(this, play);
- } else if (play->csCtx.currentCsIndex == 2) {
+ } else if (play->csCtx.scriptIndex == 2) {
func_80AA5960(this, play);
}
} else if (gSaveContext.sceneLayer == 2) {
- if (play->csCtx.currentCsIndex == 0) {
+ if (play->csCtx.scriptIndex == 0) {
func_80AA59E4(this, play);
- } else if (play->csCtx.currentCsIndex == 1) {
+ } else if (play->csCtx.scriptIndex == 1) {
func_80AA5A6C(this, play);
}
}
@@ -488,34 +488,34 @@ void func_80AA5EBC(DmChar00* this, PlayState* play) {
case SCENE_00KEIKOKU:
if (gSaveContext.sceneLayer == 3) {
- if (play->csCtx.currentCsIndex == 0) {
+ if (play->csCtx.scriptIndex == 0) {
func_80AA5AF4(this, play);
- } else if (play->csCtx.currentCsIndex == 2) {
+ } else if (play->csCtx.scriptIndex == 2) {
func_80AA5E2C(this, play);
}
} else if (gSaveContext.sceneLayer == 7) {
- if (play->csCtx.currentCsIndex == 0) {
+ if (play->csCtx.scriptIndex == 0) {
func_80AA5BF8(this, play);
- } else if (play->csCtx.currentCsIndex == 1) {
+ } else if (play->csCtx.scriptIndex == 1) {
func_80AA5CD4(this, play);
}
}
break;
case SCENE_MITURIN:
- if ((gSaveContext.sceneLayer == 0) && (play->csCtx.currentCsIndex == 1)) {
+ if ((gSaveContext.sceneLayer == 0) && (play->csCtx.scriptIndex == 1)) {
func_80AA5DC8(this, play);
}
break;
case SCENE_INSIDETOWER:
- if ((gSaveContext.sceneLayer == 0) && (play->csCtx.currentCsIndex == 0)) {
+ if ((gSaveContext.sceneLayer == 0) && (play->csCtx.scriptIndex == 0)) {
func_80AA5D10(this, play);
}
break;
case SCENE_PIRATE:
- if ((gSaveContext.sceneLayer == 0) && (play->csCtx.currentCsIndex == 0)) {
+ if ((gSaveContext.sceneLayer == 0) && (play->csCtx.scriptIndex == 0)) {
func_80AA5D6C(this, play);
}
break;
@@ -528,14 +528,14 @@ void DmChar00_Init(Actor* thisx, PlayState* play) {
DmChar00* this = THIS;
if ((play->sceneId == SCENE_LOST_WOODS) && !Cutscene_IsPlaying(play)) {
- Actor_MarkForDeath(thisx);
+ Actor_Kill(thisx);
}
this->unk_240 = D_80AA77A8[DMCHAR00_GET(thisx)];
this->unk_250 = D_80AA77D8[DMCHAR00_GET(thisx)];
thisx->targetArrowOffset = 3000.0f;
- this->unk_260 = 99;
+ this->cueId = 99;
this->unk_262 = DMCHAR00_GET_F800(thisx);
ActorShape_Init(&thisx->shape, 0.0f, ActorShadow_DrawCircle, 24.0f);
@@ -551,18 +551,18 @@ void DmChar00_Destroy(Actor* thisx, PlayState* play) {
}
void func_80AA62FC(DmChar00* this, PlayState* play) {
- u16 sp26 = DMCHAR00_GET(&this->actor) + 113;
- s32 temp_v0;
+ u16 cueType = CS_CMD_ACTOR_CUE_113 + DMCHAR00_GET(&this->actor);
+ s32 cueChannel;
s32 pad;
- if (Cutscene_CheckActorAction(play, sp26)) {
- temp_v0 = Cutscene_GetActorActionIndex(play, sp26);
+ if (Cutscene_IsCueInChannel(play, cueType)) {
+ cueChannel = Cutscene_GetCueChannel(play, cueType);
- if (play->csCtx.frames == play->csCtx.actorActions[temp_v0]->startFrame) {
- if (this->unk_260 != play->csCtx.actorActions[temp_v0]->action) {
- this->unk_260 = play->csCtx.actorActions[temp_v0]->action;
+ if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) {
+ if (this->cueId != play->csCtx.actorCues[cueChannel]->id) {
+ this->cueId = play->csCtx.actorCues[cueChannel]->id;
- switch (play->csCtx.actorActions[temp_v0]->action) {
+ switch (play->csCtx.actorCues[cueChannel]->id) {
case 0x1:
this->unk_261 = 0;
break;
@@ -648,7 +648,7 @@ void func_80AA62FC(DmChar00* this, PlayState* play) {
break;
case 0x16:
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
break;
case 0x17:
@@ -786,9 +786,9 @@ void func_80AA62FC(DmChar00* this, PlayState* play) {
func_80AA5580(&this->skelAnime, &sAnimationInfo[this->unk_261], 0);
}
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, temp_v0);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
} else {
- this->unk_260 = 99;
+ this->cueId = 99;
}
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
@@ -853,7 +853,7 @@ void func_80AA62FC(DmChar00* this, PlayState* play) {
void func_80AA67F8(DmChar00* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if ((play->csCtx.state == 0) && (gSaveContext.sceneLayer == 0) && (play->csCtx.currentCsIndex == 1)) {
+ if ((play->csCtx.state == CS_STATE_IDLE) && (gSaveContext.sceneLayer == 0) && (play->csCtx.scriptIndex == 1)) {
if (this->unk_261 != 42) {
this->unk_261 = 42;
func_80AA5580(&this->skelAnime, &sAnimationInfo[this->unk_261], 0);
@@ -912,11 +912,11 @@ void DmChar00_Draw(Actor* thisx, PlayState* play2) {
DmChar00* this = THIS;
s32 phi_a0;
s32 pad;
- Gfx* gfx = GRAPH_ALLOC(play->state.gfxCtx, sizeof(Gfx) * 4);
+ Gfx* gfx = GRAPH_ALLOC(play->state.gfxCtx, 4 * sizeof(Gfx));
- if ((play->csCtx.state == 0) &&
+ if ((play->csCtx.state == CS_STATE_IDLE) &&
((play->sceneId != SCENE_OPENINGDAN) || (gSaveContext.sceneLayer != 0) || (play->roomCtx.curRoom.num != 0) ||
- (play->csCtx.currentCsIndex != 1) || (DMCHAR00_GET(&this->actor) != DMCHAR00_0))) {
+ (play->csCtx.scriptIndex != 1) || (DMCHAR00_GET(&this->actor) != DMCHAR00_0))) {
return;
}
diff --git a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.h b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.h
index 1df0df06d..b4679647b 100644
--- a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.h
+++ b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.h
@@ -23,11 +23,9 @@ typedef struct DmChar00 {
/* 0x23C */ DmChar00ActionFunc actionFunc;
/* 0x240 */ Color_RGBAf unk_240;
/* 0x250 */ Color_RGBAf unk_250;
- /* 0x260 */ u8 unk_260;
+ /* 0x260 */ u8 cueId;
/* 0x261 */ u8 unk_261;
/* 0x262 */ u16 unk_262;
} DmChar00; // size = 0x264
-extern const ActorInit Dm_Char00_InitVars;
-
#endif // Z_DM_CHAR00_H
diff --git a/src/overlays/actors/ovl_Dm_Char01/overlay.cfg b/src/overlays/actors/ovl_Dm_Char01/overlay.cfg
deleted file mode 100644
index babdfc2f2..000000000
--- a/src/overlays/actors/ovl_Dm_Char01/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Dm_Char01
-z_dm_char01.c
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 6d3b18c2d..7b700f4eb 100644
--- a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c
+++ b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c
@@ -3,7 +3,7 @@
* Overlay: ovl_Dm_Char01
* Description: Woodfall scene objects (temple, water, walls, etc)
*/
-
+#include "prevent_bss_reordering.h"
#include "z_dm_char01.h"
#include "objects/object_mtoride/object_mtoride.h"
#include "overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.h"
@@ -35,7 +35,7 @@ s16 D_80AAAE26;
#include "overlays/ovl_Dm_Char01/ovl_Dm_Char01.c"
-const ActorInit Dm_Char01_InitVars = {
+ActorInit Dm_Char01_InitVars = {
ACTOR_DM_CHAR01,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -67,7 +67,7 @@ void DmChar01_Init(Actor* thisx, PlayState* play) {
switch (DMCHAR01_GET(&this->dyna.actor)) {
case DMCHAR01_0:
- if (gSaveContext.save.weekEventReg[20] & 2) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) {
this->unk_34C = 2;
this->actionFunc = func_80AA8F1C;
break;
@@ -97,7 +97,7 @@ void DmChar01_Init(Actor* thisx, PlayState* play) {
break;
case DMCHAR01_1:
- if ((gSaveContext.save.weekEventReg[20] & 2) || (gSaveContext.sceneLayer == 1)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE) || (gSaveContext.sceneLayer == 1)) {
this->unk_34C = 1;
this->actionFunc = func_80AA8F1C;
} else {
@@ -107,7 +107,7 @@ void DmChar01_Init(Actor* thisx, PlayState* play) {
case DMCHAR01_2:
this->unk_34C = 0;
- if (!(gSaveContext.save.weekEventReg[20] & 1)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_20_01)) {
this->unk_34C = 1;
this->dyna.actor.world.pos.y -= 400.0f;
}
@@ -123,8 +123,8 @@ void DmChar01_Init(Actor* thisx, PlayState* play) {
case DMCHAR01_3:
this->dyna.actor.world.rot.y += 0x8000;
this->dyna.actor.shape.rot.y += 0x8000;
- if (!(gSaveContext.save.weekEventReg[20] & 1)) {
- Actor_MarkForDeath(&this->dyna.actor);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_20_01)) {
+ Actor_Kill(&this->dyna.actor);
return;
}
@@ -134,7 +134,7 @@ void DmChar01_Init(Actor* thisx, PlayState* play) {
DynaPolyActor_LoadMesh(play, &this->dyna, &gWoodfallSceneryTempleRampAndPlatformCol);
this->unk_34D = true;
- if (!(gSaveContext.save.weekEventReg[20] & 2)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) {
this->actionFunc = func_80AA9020;
this->dyna.actor.world.pos.y -= 120.0f;
} else {
@@ -160,11 +160,11 @@ void func_80AA8698(DmChar01* this, PlayState* play) {
Player* player = GET_PLAYER(play);
Player* player2 = GET_PLAYER(play);
- if (gSaveContext.save.weekEventReg[20] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_01)) {
return;
}
- if ((player->stateFlags2 & 0x8000000) && (player2->actor.world.pos.x > -40.0f) &&
+ if ((player->stateFlags2 & PLAYER_STATE2_8000000) && (player2->actor.world.pos.x > -40.0f) &&
(player2->actor.world.pos.x < 40.0f) && (player2->actor.world.pos.z > 1000.0f) &&
(player2->actor.world.pos.z < 1078.0f)) {
if (!D_80AAAAB4) {
@@ -180,28 +180,29 @@ void func_80AA8698(DmChar01* this, PlayState* play) {
if ((player2->actor.world.pos.x > -40.0f) && (player2->actor.world.pos.x < 40.0f) &&
(player2->actor.world.pos.z > 1000.0f) && (player2->actor.world.pos.z < 1078.0f)) {
- gSaveContext.save.weekEventReg[20] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_20_01);
this->actionFunc = func_80AA884C;
}
}
}
void func_80AA884C(DmChar01* this, PlayState* play) {
- s16 sp1E = this->dyna.actor.cutscene;
+ s16 csId = this->dyna.actor.csId;
- if (ActorCutscene_GetCanPlayNext(sp1E)) {
- ActorCutscene_Start(sp1E, &this->dyna.actor);
+ if (CutsceneManager_IsNext(csId)) {
+ CutsceneManager_Start(csId, &this->dyna.actor);
this->actionFunc = func_80AA88A8;
} else {
- ActorCutscene_SetIntentToPlay(sp1E);
+ CutsceneManager_Queue(csId);
}
}
void func_80AA88A8(DmChar01* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 135)) {
- if (play->csCtx.frames == play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 135)]->startFrame) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_135)) {
+ if (play->csCtx.curFrame ==
+ play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_135)]->startFrame) {
D_80AAAE24 = 1;
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_FORT_RISING);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_FORT_RISING);
}
} else {
D_80AAAE24 = 0;
@@ -277,7 +278,7 @@ void func_80AA8C28(DmChar01* this, PlayState* play) {
switch (this->unk_346) {
case 0:
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_WATER_PURIFICATION);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WATER_PURIFICATION);
D_80AAAE22 = -2200;
D_80AAAE20 = 100;
this->unk_346++;
@@ -344,11 +345,11 @@ void func_80AA8F2C(DmChar01* this, PlayState* play) {
}
void func_80AA9020(DmChar01* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 135)) {
- CsCmdActorAction* temp_v1 = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 135)];
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_135)) {
+ CsCmdActorCue* cue = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_135)];
- if ((temp_v1->startFrame == play->csCtx.frames) && (temp_v1->action == 2)) {
- gSaveContext.save.weekEventReg[20] |= 2;
+ if ((cue->startFrame == play->csCtx.curFrame) && (cue->id == 2)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE);
this->actionFunc = func_80AA90AC;
}
}
@@ -373,17 +374,17 @@ void DmChar01_Update(Actor* thisx, PlayState* play2) {
Player* player = GET_PLAYER(play);
if (player->actor.world.pos.y > 5.0f) {
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
} else {
- func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
}
}
if (DMCHAR01_GET(&this->dyna.actor) == DMCHAR01_2) {
if (this->dyna.actor.xzDistToPlayer > 600.0f) {
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
} else {
- func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
}
}
}
@@ -406,18 +407,18 @@ void DmChar01_Draw(Actor* thisx, PlayState* play) {
case DMCHAR01_0:
switch (this->unk_34C) {
case 0:
- AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gWoodfallSceneryPoisonWaterTexAnim));
+ AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWoodfallSceneryPoisonWaterTexAnim));
Gfx_DrawDListOpa(play, gWoodfallSceneryPoisonWaterDL);
break;
case 1:
if (gSaveContext.sceneLayer == 1) {
- AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gWoodfallSceneryPurifiedWaterTexAnim));
+ AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWoodfallSceneryPurifiedWaterTexAnim));
Gfx_DrawDListOpa(play, gWoodfallSceneryFloorDL);
Gfx_DrawDListXlu(play, gWoodfallSceneryPurifiedWaterDL);
Matrix_Translate(0.0f, 10.0f, 0.0f, MTXMODE_APPLY);
}
- AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gWoodfallSceneryDynamicPoisonWaterTexAnim));
+ AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWoodfallSceneryDynamicPoisonWaterTexAnim));
OPEN_DISPS(play->state.gfxCtx);
@@ -451,7 +452,7 @@ void DmChar01_Draw(Actor* thisx, PlayState* play) {
break;
case 2:
- AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gWoodfallSceneryPurifiedWaterTexAnim));
+ AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWoodfallSceneryPurifiedWaterTexAnim));
Gfx_DrawDListOpa(play, gWoodfallSceneryFloorDL);
Gfx_DrawDListXlu(play, gWoodfallSceneryPurifiedWaterDL);
break;
@@ -461,23 +462,23 @@ void DmChar01_Draw(Actor* thisx, PlayState* play) {
case DMCHAR01_1:
switch (this->unk_34C) {
case 0:
- AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gWoodfallSceneryPoisonWallsTexAnim));
+ AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWoodfallSceneryPoisonWallsTexAnim));
Gfx_DrawDListOpa(play, gWoodfallSceneryPoisonWallsDL);
break;
case 1:
- AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gWoodfallSceneryPurifiedWallsTexAnim));
+ AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWoodfallSceneryPurifiedWallsTexAnim));
Gfx_DrawDListOpa(play, gWoodfallSceneryPurifiedWallsDL);
break;
}
break;
case DMCHAR01_2:
- AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gWoodfallSceneryTempleTexAnim));
+ AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWoodfallSceneryTempleTexAnim));
Gfx_DrawDListOpa(play, gWoodfallSceneryTempleDL);
if ((this->unk_34C != 0) && ((u8)this->unk_348 != 0)) {
- AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gWoodfallSceneryWaterFlowingOverTempleTexAnim));
+ AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWoodfallSceneryWaterFlowingOverTempleTexAnim));
OPEN_DISPS(play->state.gfxCtx);
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 677a2b59b..6f29531a0 100644
--- a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.h
+++ b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.h
@@ -28,6 +28,4 @@ typedef struct DmChar01 {
/* 0x34D */ u8 unk_34D;
} DmChar01; // size = 0x350
-extern const ActorInit Dm_Char01_InitVars;
-
#endif // Z_DM_CHAR01_H
diff --git a/src/overlays/actors/ovl_Dm_Char02/overlay.cfg b/src/overlays/actors/ovl_Dm_Char02/overlay.cfg
deleted file mode 100644
index b5c165061..000000000
--- a/src/overlays/actors/ovl_Dm_Char02/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Dm_Char02
-z_dm_char02.c
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 da67e6f1c..ec1e12a8f 100644
--- a/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c
+++ b/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c
@@ -18,7 +18,7 @@ void DmChar02_Draw(Actor* thisx, PlayState* play);
void DmChar02_PerformCutsceneActions(DmChar02* this, PlayState* play);
-const ActorInit Dm_Char02_InitVars = {
+ActorInit Dm_Char02_InitVars = {
ACTOR_DM_CHAR02,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -61,21 +61,21 @@ void DmChar02_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animationInfo, u16
}
void DmChar02_PlaySfxForDroppingOcarinaCutscene(DmChar02* this, PlayState* play) {
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 95:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_OCARINA_BOUND_0);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_OCARINA_BOUND_0);
break;
case 101:
case 105:
case 112:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_OCARINA_BOUND_1);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_OCARINA_BOUND_1);
break;
}
}
void DmChar02_PlaySfxForCutscenes(DmChar02* this, PlayState* play) {
- if ((play->csCtx.state != 0) && (play->sceneId == SCENE_OKUJOU) && (play->csCtx.currentCsIndex == 1)) {
+ if ((play->csCtx.state != CS_STATE_IDLE) && (play->sceneId == SCENE_OKUJOU) && (play->csCtx.scriptIndex == 1)) {
DmChar02_PlaySfxForDroppingOcarinaCutscene(this, play);
}
}
@@ -83,7 +83,7 @@ void DmChar02_PlaySfxForCutscenes(DmChar02* this, PlayState* play) {
void DmChar02_Init(Actor* thisx, PlayState* play) {
DmChar02* this = THIS;
- if (gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) {
+ if (gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] == ITEM_NONE) {
this->animIndex = DMCHAR02_ANIM_HIT_GROUND;
this->actor.targetArrowOffset = 3000.0f;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f);
@@ -92,7 +92,7 @@ void DmChar02_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->actor, 0.01f);
this->actionFunc = DmChar02_PerformCutsceneActions;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -101,12 +101,12 @@ void DmChar02_Destroy(Actor* thisx, PlayState* play) {
void DmChar02_PerformCutsceneActions(DmChar02* this, PlayState* play) {
u8 shouldChangeAnimation = true;
- s32 actionIndex;
+ s32 cueChannel;
- if (Cutscene_CheckActorAction(play, 0x83)) {
- actionIndex = Cutscene_GetActorActionIndex(play, 0x83);
- if (play->csCtx.frames == play->csCtx.actorActions[actionIndex]->startFrame) {
- switch (play->csCtx.actorActions[actionIndex]->action) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_131)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_131);
+ if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) {
+ switch (play->csCtx.actorCues[cueChannel]->id) {
default:
this->animIndex = DMCHAR02_ANIM_HIT_GROUND;
shouldChangeAnimation = false;
@@ -130,7 +130,7 @@ void DmChar02_PerformCutsceneActions(DmChar02* this, PlayState* play) {
}
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
}
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
@@ -148,10 +148,10 @@ void DmChar02_Update(Actor* thisx, PlayState* play) {
this->unk_2F0 = this->unk_2F0;
this->actionFunc(this, play);
if (!Actor_HasParent(&this->actor, play)) {
- Actor_PickUp(&this->actor, play, GI_OCARINA, 30.0f, 80.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_OCARINA, 30.0f, 80.0f);
} else {
gSaveContext.save.playerForm = PLAYER_FORM_HUMAN;
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
DmChar02_PlaySfxForCutscenes(this, play);
@@ -172,10 +172,10 @@ void DmChar02_Draw(Actor* thisx, PlayState* play) {
DmChar02* this = THIS;
s32 shouldDraw = false;
- if ((play->csCtx.state == 0) && (this->actor.world.pos.y < 100.0f)) {
+ if ((play->csCtx.state == CS_STATE_IDLE) && (this->actor.world.pos.y < 100.0f)) {
shouldDraw = true;
- } else if (Cutscene_CheckActorAction(play, 0x6B)) {
- switch (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x6B)]->action) {
+ } else if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_107)) {
+ switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_107)]->id) {
case 0x17:
case 0x1C:
case 0x26:
diff --git a/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.h b/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.h
index 697989496..7a9722554 100644
--- a/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.h
+++ b/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.h
@@ -18,6 +18,4 @@ typedef struct DmChar02 {
/* 0x2F0 */ u32 unk_2F0;
} DmChar02; // size = 0x2F4
-extern const ActorInit Dm_Char02_InitVars;
-
#endif // Z_DM_CHAR02_H
diff --git a/src/overlays/actors/ovl_Dm_Char03/overlay.cfg b/src/overlays/actors/ovl_Dm_Char03/overlay.cfg
deleted file mode 100644
index dd50d58fa..000000000
--- a/src/overlays/actors/ovl_Dm_Char03/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Dm_Char03
-z_dm_char03.c
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 397fbfa3c..21b9f94df 100644
--- a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c
+++ b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c
@@ -20,7 +20,7 @@ void func_80AAB644(DmChar03* this, PlayState* play);
void DmChar03_DoNothing(DmChar03* this, PlayState* play);
void func_80AABA84(PlayState* play, DmChar03* this);
-const ActorInit Dm_Char03_InitVars = {
+ActorInit Dm_Char03_InitVars = {
ACTOR_DM_CHAR03,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -32,7 +32,9 @@ const ActorInit Dm_Char03_InitVars = {
(ActorFunc)DmChar03_Draw,
};
-AnimationInfo sAnimationInfo[] = { { &object_osn_Anim_020530, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f } };
+AnimationInfo sAnimationInfo[] = {
+ { &gDekuMaskFallOverAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
+};
void DmChar03_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animationInfo, u16 animIndex) {
f32 frame;
@@ -74,14 +76,14 @@ void func_80AAB5F8(DmChar03* this, PlayState* play) {
}
void func_80AAB644(DmChar03* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 0x88)) {
- s32 index = Cutscene_GetActorActionIndex(play, 0x88);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_136)) {
+ s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_136);
- if (play->csCtx.actorActions[index]->action == 4) {
+ if (play->csCtx.actorCues[cueChannel]->id == 4) {
this->unk_18E = true;
- this->offset.x = play->csCtx.actorActions[index]->startPos.x;
- this->offset.y = play->csCtx.actorActions[index]->startPos.y;
- this->offset.z = play->csCtx.actorActions[index]->startPos.z;
+ this->offset.x = play->csCtx.actorCues[cueChannel]->startPos.x;
+ this->offset.y = play->csCtx.actorCues[cueChannel]->startPos.y;
+ this->offset.z = play->csCtx.actorCues[cueChannel]->startPos.z;
}
}
}
@@ -92,11 +94,11 @@ void DmChar03_DoNothing(DmChar03* this, PlayState* play) {
void func_80AAB710(DmChar03* this, PlayState* play) {
u8 shouldChangeAnim = true;
- if (Cutscene_CheckActorAction(play, 0x88)) {
- s32 index = Cutscene_GetActorActionIndex(play, 0x88);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_136)) {
+ s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_136);
- if (play->csCtx.frames == play->csCtx.actorActions[index]->startFrame) {
- switch (play->csCtx.actorActions[index]->action) {
+ if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) {
+ switch (play->csCtx.actorCues[cueChannel]->id) {
case 1:
shouldChangeAnim = false;
break;
@@ -106,7 +108,7 @@ void func_80AAB710(DmChar03* this, PlayState* play) {
case 3:
this->unk_18E = false;
shouldChangeAnim = false;
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
break;
case 4:
Item_Give(play, ITEM_MASK_DEKU);
@@ -122,24 +124,24 @@ void func_80AAB710(DmChar03* this, PlayState* play) {
DmChar03_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
}
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, index);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
}
}
void func_80AAB838(DmChar03* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, 5.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_MASK_BOUND_0);
+ 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))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_MASK_BOUND_1);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_MASK_BOUND_1);
}
}
void DmChar03_Update(Actor* thisx, PlayState* play) {
DmChar03* this = THIS;
- if (Cutscene_CheckActorAction(play, 0x88) &&
- (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x88)]->action == 2)) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_136) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_136)]->id == 2)) {
SkelAnime_Update(&this->skelAnime);
}
this->actionFunc(this, play);
@@ -161,8 +163,8 @@ void DmChar03_Draw(Actor* thisx, PlayState* play) {
DmChar03* this = THIS;
if (!this->unk_18E) {
- if ((Cutscene_CheckActorAction(play, 0x88)) &&
- (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x88)]->action != 1)) {
+ 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);
SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
this->skelAnime.dListCount, DmChar03_OverrideLimbDraw, DmChar03_PostLimbDraw,
diff --git a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.h b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.h
index f736220c8..5b4a2e621 100644
--- a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.h
+++ b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.h
@@ -17,6 +17,4 @@ typedef struct DmChar03 {
/* 0x190 */ Vec3f offset;
} DmChar03; // size = 0x19C
-extern const ActorInit Dm_Char03_InitVars;
-
#endif // Z_DM_CHAR03_H
diff --git a/src/overlays/actors/ovl_Dm_Char04/overlay.cfg b/src/overlays/actors/ovl_Dm_Char04/overlay.cfg
deleted file mode 100644
index a8f5bd501..000000000
--- a/src/overlays/actors/ovl_Dm_Char04/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Dm_Char04
-z_dm_char04.c
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 f7b4b47e8..ac479344d 100644
--- a/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c
+++ b/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c
@@ -18,7 +18,7 @@ void DmChar04_Draw(Actor* thisx, PlayState* play);
void func_80AABE34(DmChar04* this, PlayState* play);
-const ActorInit Dm_Char04_InitVars = {
+ActorInit Dm_Char04_InitVars = {
ACTOR_DM_CHAR04,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -66,7 +66,7 @@ void DmChar04_Init(Actor* thisx, PlayState* play) {
this->primColors = sPrimColors[this->actor.params];
this->envColors = sEnvColors[this->actor.params];
this->actor.targetArrowOffset = 3000.0f;
- this->csAction = 0x63;
+ this->cueId = 99;
this->timer = this->actor.params << 0xB;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f);
SkelAnime_Init(play, &this->skelAnime, &gameplay_keep_Skel_02AF58.sh, &gameplay_keep_Anim_029140, this->jointTable,
@@ -81,15 +81,15 @@ void DmChar04_Destroy(Actor* thisx, PlayState* play) {
}
void func_80AABE34(DmChar04* this, PlayState* play) {
- u16 params = this->actor.params + 0x71;
+ u16 cueType = CS_CMD_ACTOR_CUE_113 + this->actor.params;
- if (Cutscene_CheckActorAction(play, params)) {
- s32 actionIndex = Cutscene_GetActorActionIndex(play, params);
+ if (Cutscene_IsCueInChannel(play, cueType)) {
+ s32 cueChannel = Cutscene_GetCueChannel(play, cueType);
- if (play->csCtx.frames == play->csCtx.actorActions[actionIndex]->startFrame) {
- if (this->csAction != play->csCtx.actorActions[actionIndex]->action) {
- this->csAction = play->csCtx.actorActions[actionIndex]->action;
- if (play->csCtx.actorActions[actionIndex]->action == 1) {
+ if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) {
+ if (this->cueId != play->csCtx.actorCues[cueChannel]->id) {
+ this->cueId = play->csCtx.actorCues[cueChannel]->id;
+ if (play->csCtx.actorCues[cueChannel]->id == 1) {
this->animIndex = 0;
} else {
this->animIndex = 0;
@@ -97,9 +97,9 @@ void func_80AABE34(DmChar04* this, PlayState* play) {
DmChar04_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
}
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
} else {
- this->csAction = 0x63;
+ this->cueId = 99;
}
}
@@ -129,7 +129,7 @@ s32 DmChar04_OverrideLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3
}
void DmChar04_Draw(Actor* thisx, PlayState* play) {
- Gfx* gfx = GRAPH_ALLOC(play->state.gfxCtx, sizeof(Gfx) * 4);
+ Gfx* gfx = GRAPH_ALLOC(play->state.gfxCtx, 4 * sizeof(Gfx));
s32 alpha;
s32 pad;
DmChar04* this = THIS;
diff --git a/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.h b/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.h
index 42c4a8501..c3d809c63 100644
--- a/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.h
+++ b/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.h
@@ -15,11 +15,9 @@ typedef struct DmChar04 {
/* 0x023C */ DmChar04ActionFunc actionFunc;
/* 0x240 */ Color_RGBAf primColors;
/* 0x250 */ Color_RGBAf envColors;
- /* 0x260 */ u8 csAction;
+ /* 0x260 */ u8 cueId;
/* 0x261 */ u8 animIndex;
/* 0x262 */ u16 timer;
} DmChar04; // size = 0x264
-extern const ActorInit Dm_Char04_InitVars;
-
#endif // Z_DM_CHAR04_H
diff --git a/src/overlays/actors/ovl_Dm_Char05/overlay.cfg b/src/overlays/actors/ovl_Dm_Char05/overlay.cfg
deleted file mode 100644
index cb8b10bcc..000000000
--- a/src/overlays/actors/ovl_Dm_Char05/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Dm_Char05
-z_dm_char05.c
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 5b6613813..6b85df5d3 100644
--- a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c
+++ b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c
@@ -35,7 +35,7 @@ void func_80AADF54(PlayState* play, DmChar05* this);
void func_80AAE030(PlayState* play, DmChar05* this);
void func_80AAE114(PlayState* play, DmChar05* this);
-const ActorInit Dm_Char05_InitVars = {
+ActorInit Dm_Char05_InitVars = {
ACTOR_DM_CHAR05,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -177,14 +177,14 @@ void func_80AAC990(DmChar05* this, PlayState* play) {
}
void func_80AAC9DC(DmChar05* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 109) != 0) {
- s32 actionIndex = Cutscene_GetActorActionIndex(play, 109);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_109)) {
+ s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_109);
- if (play->csCtx.actorActions[actionIndex]->action == 4) {
+ if (play->csCtx.actorCues[cueChannel]->id == 4) {
this->unk_18E = 1;
- this->unk_190.x = play->csCtx.actorActions[actionIndex]->startPos.x;
- this->unk_190.y = play->csCtx.actorActions[actionIndex]->startPos.y;
- this->unk_190.z = play->csCtx.actorActions[actionIndex]->startPos.z;
+ this->unk_190.x = play->csCtx.actorCues[cueChannel]->startPos.x;
+ this->unk_190.y = play->csCtx.actorCues[cueChannel]->startPos.y;
+ this->unk_190.z = play->csCtx.actorCues[cueChannel]->startPos.z;
}
}
}
@@ -199,17 +199,17 @@ void func_80AACA98(DmChar05* this, PlayState* play) {
}
void func_80AACAE4(DmChar05* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 564)) {
- s32 actionIndex = Cutscene_GetActorActionIndex(play, 564);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_564)) {
+ s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_564);
- if (play->csCtx.actorActions[actionIndex]->action == 2) {
- if (play->csCtx.frames == play->csCtx.actorActions[actionIndex]->startFrame) {
+ if (play->csCtx.actorCues[cueChannel]->id == 2) {
+ if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) {
Item_Give(play, ITEM_MASK_COUPLE);
}
this->unk_18E = 1;
- this->unk_190.x = play->csCtx.actorActions[actionIndex]->startPos.x;
- this->unk_190.y = play->csCtx.actorActions[actionIndex]->startPos.y;
- this->unk_190.z = play->csCtx.actorActions[actionIndex]->startPos.z;
+ this->unk_190.x = play->csCtx.actorCues[cueChannel]->startPos.x;
+ this->unk_190.y = play->csCtx.actorCues[cueChannel]->startPos.y;
+ this->unk_190.z = play->csCtx.actorCues[cueChannel]->startPos.z;
} else {
this->unk_18E = 0;
}
@@ -277,13 +277,13 @@ void func_80AACD1C(DmChar05* this, PlayState* play) {
}
void func_80AACD68(DmChar05* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 473)) {
- s32 actionIndex = Cutscene_GetActorActionIndex(play, 473);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_473)) {
+ s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_473);
this->unk_18E = 1;
- this->unk_190.x = play->csCtx.actorActions[actionIndex]->startPos.x;
- this->unk_190.y = play->csCtx.actorActions[actionIndex]->startPos.y;
- this->unk_190.z = play->csCtx.actorActions[actionIndex]->startPos.z;
+ this->unk_190.x = play->csCtx.actorCues[cueChannel]->startPos.x;
+ this->unk_190.y = play->csCtx.actorCues[cueChannel]->startPos.y;
+ this->unk_190.z = play->csCtx.actorCues[cueChannel]->startPos.z;
}
}
@@ -297,27 +297,27 @@ void func_80AACE10(DmChar05* this, PlayState* play) {
}
void func_80AACE5C(DmChar05* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 518)) {
- s32 actionIndex = Cutscene_GetActorActionIndex(play, 518);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_518)) {
+ s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_518);
this->unk_18E = 1;
- this->unk_190.x = play->csCtx.actorActions[actionIndex]->startPos.x;
- this->unk_190.y = play->csCtx.actorActions[actionIndex]->startPos.y;
- this->unk_190.z = play->csCtx.actorActions[actionIndex]->startPos.z;
+ this->unk_190.x = play->csCtx.actorCues[cueChannel]->startPos.x;
+ this->unk_190.y = play->csCtx.actorCues[cueChannel]->startPos.y;
+ this->unk_190.z = play->csCtx.actorCues[cueChannel]->startPos.z;
}
}
void func_80AACF04(DmChar05* this, PlayState* play) {
u8 sp2F = true;
- s32 actionIndex;
+ s32 cueChannel;
switch (DMCHAR05_GET(&this->actor)) {
case DMCHAR05_0:
- if (Cutscene_CheckActorAction(play, 109)) {
- actionIndex = Cutscene_GetActorActionIndex(play, 109);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_109)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_109);
- if (play->csCtx.frames == play->csCtx.actorActions[actionIndex]->startFrame) {
- switch (play->csCtx.actorActions[actionIndex]->action) {
+ if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) {
+ switch (play->csCtx.actorCues[cueChannel]->id) {
case 1:
sp2F = false;
break;
@@ -338,7 +338,7 @@ void func_80AACF04(DmChar05* this, PlayState* play) {
case 5:
sp2F = false;
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
break;
default:
@@ -351,16 +351,16 @@ void func_80AACF04(DmChar05* this, PlayState* play) {
}
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
}
break;
case DMCHAR05_1:
- if (Cutscene_CheckActorAction(play, 473)) {
- actionIndex = Cutscene_GetActorActionIndex(play, 473);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_473)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_473);
- if (play->csCtx.frames == play->csCtx.actorActions[actionIndex]->startFrame) {
- switch (play->csCtx.actorActions[actionIndex]->action) {
+ if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) {
+ switch (play->csCtx.actorCues[cueChannel]->id) {
case 1:
sp2F = false;
break;
@@ -382,7 +382,7 @@ void func_80AACF04(DmChar05* this, PlayState* play) {
case 5:
sp2F = false;
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
break;
default:
@@ -395,16 +395,16 @@ void func_80AACF04(DmChar05* this, PlayState* play) {
}
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
}
break;
case DMCHAR05_2:
- if (Cutscene_CheckActorAction(play, 518)) {
- actionIndex = Cutscene_GetActorActionIndex(play, 518);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_518)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_518);
- if (play->csCtx.frames == play->csCtx.actorActions[actionIndex]->startFrame) {
- switch (play->csCtx.actorActions[actionIndex]->action) {
+ if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) {
+ switch (play->csCtx.actorCues[cueChannel]->id) {
case 1:
sp2F = false;
break;
@@ -425,7 +425,7 @@ void func_80AACF04(DmChar05* this, PlayState* play) {
case 5:
sp2F = false;
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
break;
default:
@@ -438,16 +438,16 @@ void func_80AACF04(DmChar05* this, PlayState* play) {
}
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
}
break;
case DMCHAR05_3:
- if (Cutscene_CheckActorAction(play, 559)) {
- actionIndex = Cutscene_GetActorActionIndex(play, 559);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_559)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_559);
- if (play->csCtx.frames == play->csCtx.actorActions[actionIndex]->startFrame) {
- switch (play->csCtx.actorActions[actionIndex]->action) {
+ if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) {
+ switch (play->csCtx.actorCues[cueChannel]->id) {
default:
sp2F = false;
break;
@@ -474,10 +474,10 @@ void func_80AACF04(DmChar05* this, PlayState* play) {
}
}
- if (play->csCtx.actorActions[actionIndex]->action != 4) {
- Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex);
+ if (play->csCtx.actorCues[cueChannel]->id != 4) {
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
} else {
- Cutscene_ActorTranslate(&this->actor, play, actionIndex);
+ Cutscene_ActorTranslate(&this->actor, play, cueChannel);
}
}
@@ -492,73 +492,73 @@ void func_80AACF04(DmChar05* this, PlayState* play) {
}
void func_80AAD3F8(DmChar05* this, PlayState* play) {
- if (play->csCtx.frames == 490) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EVIL_POWER);
+ if (play->csCtx.curFrame == 490) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EVIL_POWER);
}
- if (play->csCtx.frames > 550) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_MASK_FLOAT - SFX_FLAG);
+ if (play->csCtx.curFrame > 550) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_MASK_FLOAT - SFX_FLAG);
}
}
void func_80AAD450(DmChar05* this, PlayState* play) {
- if (play->csCtx.frames == 262) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EVIL_POWER);
+ if (play->csCtx.curFrame == 262) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EVIL_POWER);
}
- if (play->csCtx.frames > 318) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_MASK_FLOAT - SFX_FLAG);
+ if (play->csCtx.curFrame > 318) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_MASK_FLOAT - SFX_FLAG);
}
}
void func_80AAD4A8(DmChar05* this, PlayState* play) {
if (DMCHAR05_GET(&this->actor) == DMCHAR05_0) {
- if (Cutscene_CheckActorAction(play, 109) &&
- (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 109)]->action == 3)) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_109) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_109)]->id == 3)) {
if (Animation_OnFrame(&this->skelAnime, 14.0f) || Animation_OnFrame(&this->skelAnime, 15.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_MASK_BOUND_0);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_MASK_BOUND_0);
} else if (Animation_OnFrame(&this->skelAnime, 19.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_MASK_BOUND_1);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_MASK_BOUND_1);
}
}
} else if (DMCHAR05_GET(&this->actor) == DMCHAR05_1) {
- if (Cutscene_CheckActorAction(play, 473)) {
- if ((play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 473)]->action == 3) &&
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_473)) {
+ if ((play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_473)]->id == 3) &&
Animation_OnFrame(&this->skelAnime, 5.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_MASK_BOUND_SAND);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_MASK_BOUND_SAND);
}
}
} else if (DMCHAR05_GET(&this->actor) == DMCHAR05_2) {
- if (Cutscene_CheckActorAction(play, 518) &&
- (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 518)]->action == 2)) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_518) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_518)]->id == 2)) {
if (Animation_OnFrame(&this->skelAnime, 7.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_MASK_BOUND_0);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_MASK_BOUND_0);
}
if (Animation_OnFrame(&this->skelAnime, 14.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_MASK_BOUND_1);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_MASK_BOUND_1);
}
if (Animation_OnFrame(&this->skelAnime, 18.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_MASK_BOUND_1);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_MASK_BOUND_1);
}
}
} else if (DMCHAR05_GET(&this->actor) == DMCHAR05_3) {
if (play->sceneId == SCENE_OKUJOU) {
if (gSaveContext.sceneLayer == 2) {
- if (play->csCtx.currentCsIndex == 0) {
+ if (play->csCtx.scriptIndex == 0) {
func_80AAD3F8(this, play);
- } else if (play->csCtx.currentCsIndex == 1) {
+ } else if (play->csCtx.scriptIndex == 1) {
func_80AAD450(this, play);
}
}
} else if (play->sceneId == SCENE_SPOT00) {
if (gSaveContext.sceneLayer == 9) {
- if ((play->csCtx.currentCsIndex == 0) && (play->csCtx.frames == 255)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EVIL_POWER);
+ if ((play->csCtx.scriptIndex == 0) && (play->csCtx.curFrame == 255)) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EVIL_POWER);
}
- } else if ((gSaveContext.sceneLayer == 0xB) && (play->csCtx.frames == 115)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EVIL_POWER_PREDEMO);
+ } else if ((gSaveContext.sceneLayer == 0xB) && (play->csCtx.curFrame == 115)) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EVIL_POWER_PREDEMO);
}
}
}
@@ -568,25 +568,25 @@ void DmChar05_Update(Actor* thisx, PlayState* play) {
DmChar05* this = THIS;
func_80AACF04(this, play);
- if (Cutscene_CheckActorAction(play, 109)) {
- if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 109)]->action == 3) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_109)) {
+ if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_109)]->id == 3) {
SkelAnime_Update(&this->skelAnime);
}
- } else if (Cutscene_CheckActorAction(play, 473)) {
- if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 473)]->action == 3) {
+ } else if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_473)) {
+ if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_473)]->id == 3) {
SkelAnime_Update(&this->skelAnime);
}
- } else if (Cutscene_CheckActorAction(play, 518)) {
- if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 518)]->action == 2) {
+ } else if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_518)) {
+ if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_518)]->id == 2) {
SkelAnime_Update(&this->skelAnime);
}
- } else if (Cutscene_CheckActorAction(play, 559)) {
- if ((play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 559)]->action == 2) ||
- (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 559)]->action == 3)) {
+ } else if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_559)) {
+ if ((play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_559)]->id == 2) ||
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_559)]->id == 3)) {
SkelAnime_Update(&this->skelAnime);
}
- if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 559)]->action == 4) {
+ if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_559)]->id == 4) {
this->actor.world.rot.y += 0x258;
this->actor.shape.rot.y += 0x258;
}
@@ -607,8 +607,8 @@ void func_80AAD998(Actor* thisx, PlayState* play) {
s32 pad[2];
if (this->unk_18E == 0) {
- if (Cutscene_CheckActorAction(play, 109) &&
- (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 109)]->action != 1)) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_109) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_109)]->id != 1)) {
OPEN_DISPS(play->state.gfxCtx);
func_8012C28C(play->state.gfxCtx);
@@ -628,8 +628,8 @@ void func_80AADA90(Actor* thisx, PlayState* play) {
DmChar05* this = THIS;
if (this->unk_18E == 0) {
- if (Cutscene_CheckActorAction(play, 473) &&
- (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 473)]->action != 1)) {
+ 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);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, DmChar05_OverrideLimbDraw,
DmChar05_PostLimbDraw, &this->actor);
@@ -643,8 +643,8 @@ void func_80AADB4C(Actor* thisx, PlayState* play) {
DmChar05* this = THIS;
if (this->unk_18E == 0) {
- if (Cutscene_CheckActorAction(play, 518) &&
- (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 518)]->action != 1)) {
+ 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);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
this->skelAnime.dListCount, NULL, NULL, &this->actor);
@@ -657,19 +657,18 @@ void func_80AADB4C(Actor* thisx, PlayState* play) {
void func_80AADC00(Actor* thisx, PlayState* play) {
s32 pad;
DmChar05* this = THIS;
- s32 actionIndex;
+ s32 cueChannel;
- if (Cutscene_CheckActorAction(play, 559)) {
- actionIndex = Cutscene_GetActorActionIndex(play, 559);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_559)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_559);
- if ((play->csCtx.actorActions[actionIndex]->action != 1) &&
- (play->csCtx.actorActions[actionIndex]->action != 4)) {
+ if ((play->csCtx.actorCues[cueChannel]->id != 1) && (play->csCtx.actorCues[cueChannel]->id != 4)) {
func_8012C28C(play->state.gfxCtx);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, DmChar05_OverrideLimbDraw,
DmChar05_PostLimbDraw, &this->actor);
}
- if (play->csCtx.actorActions[actionIndex]->action == 4) {
+ if (play->csCtx.actorCues[cueChannel]->id == 4) {
Matrix_Translate(-600.0f, 0.0f, 0.0f, MTXMODE_APPLY);
Gfx_DrawDListOpa(play, object_dmask_DL_001E70);
}
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 212cdb03e..3bff39f6a 100644
--- a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h
+++ b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h
@@ -42,6 +42,4 @@ typedef struct DmChar05 {
/* 0x1B4 */ u8 unk_1B4;
} DmChar05; // size = 0x1B8
-extern const ActorInit Dm_Char05_InitVars;
-
#endif // Z_DM_CHAR05_H
diff --git a/src/overlays/actors/ovl_Dm_Char06/overlay.cfg b/src/overlays/actors/ovl_Dm_Char06/overlay.cfg
deleted file mode 100644
index 8c0666c9b..000000000
--- a/src/overlays/actors/ovl_Dm_Char06/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Dm_Char06
-z_dm_char06.c
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 a419ed5aa..747b2e0c9 100644
--- a/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c
+++ b/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c
@@ -18,7 +18,7 @@ void DmChar06_Draw(Actor* thisx, PlayState* play);
void DmChar06_SetupAction(DmChar06* this, DmChar06ActionFunc actionFunc);
void func_80AAE6F0(DmChar06* this, PlayState* play);
-const ActorInit Dm_Char06_InitVars = {
+ActorInit Dm_Char06_InitVars = {
ACTOR_DM_CHAR06,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -37,7 +37,7 @@ void DmChar06_SetupAction(DmChar06* this, DmChar06ActionFunc actionFunc) {
void DmChar06_Init(Actor* thisx, PlayState* play) {
DmChar06* this = THIS;
- gSaveContext.save.weekEventReg[33] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE);
Actor_SetScale(&this->actor, 1.0f);
this->alpha = 255;
DmChar06_SetupAction(this, func_80AAE6F0);
@@ -47,17 +47,17 @@ void DmChar06_Destroy(Actor* thisx, PlayState* play) {
}
void func_80AAE6F0(DmChar06* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 0x1CF)) {
- s32 actionIndex = Cutscene_GetActorActionIndex(play, 0x1CF);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_463)) {
+ s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_463);
- if ((play->csCtx.frames >= play->csCtx.actorActions[actionIndex]->startFrame) &&
- (play->csCtx.actorActions[actionIndex]->endFrame >= play->csCtx.frames)) {
- if (play->csCtx.actorActions[actionIndex]->action == 1) {
+ if ((play->csCtx.curFrame >= play->csCtx.actorCues[cueChannel]->startFrame) &&
+ (play->csCtx.actorCues[cueChannel]->endFrame >= play->csCtx.curFrame)) {
+ if (play->csCtx.actorCues[cueChannel]->id == 1) {
this->alpha = 255;
- } else if (play->csCtx.actorActions[actionIndex]->action == 2) {
- f32 lerp = 1.0f - Environment_LerpWeight(play->csCtx.actorActions[actionIndex]->endFrame,
- play->csCtx.actorActions[actionIndex]->startFrame,
- play->csCtx.frames);
+ } else if (play->csCtx.actorCues[cueChannel]->id == 2) {
+ f32 lerp =
+ 1.0f - Environment_LerpWeight(play->csCtx.actorCues[cueChannel]->endFrame,
+ play->csCtx.actorCues[cueChannel]->startFrame, play->csCtx.curFrame);
this->alpha = 255 * lerp;
}
}
diff --git a/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.h b/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.h
index c6b83b4ff..fd08c83ff 100644
--- a/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.h
+++ b/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.h
@@ -16,6 +16,4 @@ typedef struct DmChar06 {
/* 0x2A0 */ u8 alpha;
} DmChar06; // size = 0x2A4
-extern const ActorInit Dm_Char06_InitVars;
-
#endif // Z_DM_CHAR06_H
diff --git a/src/overlays/actors/ovl_Dm_Char07/overlay.cfg b/src/overlays/actors/ovl_Dm_Char07/overlay.cfg
deleted file mode 100644
index 5b5ad5acd..000000000
--- a/src/overlays/actors/ovl_Dm_Char07/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Dm_Char07
-z_dm_char07.c
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 7058500a9..844be223e 100644
--- a/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.c
+++ b/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.c
@@ -18,7 +18,7 @@ void DmChar07_Draw(Actor* thisx, PlayState* play);
void DmChar07_DoNothing(DmChar07* this, PlayState* play);
-const ActorInit Dm_Char07_InitVars = {
+ActorInit Dm_Char07_InitVars = {
ACTOR_DM_CHAR07,
ACTORCAT_ITEMACTION,
FLAGS,
diff --git a/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.h b/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.h
index 8d3528347..ce54f1be1 100644
--- a/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.h
+++ b/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.h
@@ -32,6 +32,4 @@ typedef struct DmChar07 {
/* 0x2BA */ u8 isStage;
} DmChar07; // size = 0x2BC
-extern const ActorInit Dm_Char07_InitVars;
-
#endif // Z_DM_CHAR07_H
diff --git a/src/overlays/actors/ovl_Dm_Char08/overlay.cfg b/src/overlays/actors/ovl_Dm_Char08/overlay.cfg
deleted file mode 100644
index 5f69d0c82..000000000
--- a/src/overlays/actors/ovl_Dm_Char08/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Dm_Char08
-z_dm_char08.c
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 94d15be60..35611375b 100644
--- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c
+++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c
@@ -51,7 +51,7 @@ typedef enum {
/* 6 */ TURTLE_ANIM_YAWN,
} TurtleAnimation;
-const ActorInit Dm_Char08_InitVars = {
+ActorInit Dm_Char08_InitVars = {
ACTOR_DM_CHAR08,
ACTORCAT_BG,
FLAGS,
@@ -164,16 +164,16 @@ void DmChar08_Init(Actor* thisx, PlayState* play2) {
this->targetYPos = thisx->world.pos.y;
this->unk_1F0 = 0.0f;
if (play->sceneId == SCENE_31MISAKI) {
- if (gSaveContext.save.weekEventReg[53] & 0x20) {
- DynaPolyActor_Init(&this->dyna, 3);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_20)) {
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y);
DynaPolyActor_LoadMesh(play, &this->dyna, &gTurtleZoraCapeAwakeCol);
} else {
- DynaPolyActor_Init(&this->dyna, 3);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y);
DynaPolyActor_LoadMesh(play, &this->dyna, &gTurtleZoraCapeAsleepCol);
}
this->dynapolyInitialized = true;
} else if (play->sceneId == SCENE_SEA) {
- DynaPolyActor_Init(&this->dyna, 3);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y);
DynaPolyActor_LoadMesh(play, &this->dyna, &sTurtleGreatBayTempleCol);
this->dynapolyInitialized = true;
}
@@ -185,7 +185,7 @@ void DmChar08_Init(Actor* thisx, PlayState* play2) {
switch (play->sceneId) {
case SCENE_31MISAKI:
- if (gSaveContext.save.weekEventReg[53] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_20)) {
thisx->world.pos.x = -6480.0f;
this->targetYPos = -120.0f;
thisx->world.pos.z = 1750.0f;
@@ -275,28 +275,28 @@ void DmChar08_WaitForSong(DmChar08* this, PlayState* play) {
}
void DmChar08_SetupAppearCs(DmChar08* this, PlayState* play) {
- s16 cs1 = this->dyna.actor.cutscene;
- s16 cs = ActorCutscene_GetAdditionalCutscene(
- ActorCutscene_GetAdditionalCutscene(ActorCutscene_GetAdditionalCutscene(cs1)));
+ s16 csId = this->dyna.actor.csId;
+ s16 additionalCsId =
+ CutsceneManager_GetAdditionalCsId(CutsceneManager_GetAdditionalCsId(CutsceneManager_GetAdditionalCsId(csId)));
- if (gSaveContext.save.weekEventReg[93] & 8) {
- cs1 = cs;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_93_08)) {
+ csId = additionalCsId;
}
- if (ActorCutscene_GetCanPlayNext(cs1)) {
- ActorCutscene_Start(cs1, &this->dyna.actor);
- gSaveContext.save.weekEventReg[53] |= 0x20;
- gSaveContext.save.weekEventReg[93] |= 8;
+ if (CutsceneManager_IsNext(csId)) {
+ CutsceneManager_Start(csId, &this->dyna.actor);
+ SET_WEEKEVENTREG(WEEKEVENTREG_53_20);
+ SET_WEEKEVENTREG(WEEKEVENTREG_93_08);
DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
this->actionFunc = func_80AAF884;
} else {
- ActorCutscene_SetIntentToPlay(cs1);
+ CutsceneManager_Queue(csId);
}
}
void func_80AAF884(DmChar08* this, PlayState* play) {
- if (play->csCtx.state == CS_STATE_0) {
- DynaPolyActor_Init(&this->dyna, 3);
+ if (play->csCtx.state == CS_STATE_IDLE) {
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y);
DynaPolyActor_LoadMesh(play, &this->dyna, &gTurtleZoraCapeAwakeCol);
this->dyna.actor.flags |= ACTOR_FLAG_1;
this->actionFunc = func_80AAF8F4;
@@ -321,33 +321,33 @@ void func_80AAF8F4(DmChar08* this, PlayState* play) {
}
void func_80AAFA18(DmChar08* this, PlayState* play) {
- s16 nextCs;
- s16 nextCs2;
- s16 nextCs1;
+ s16 nextCsId;
+ s16 nextCsId2;
+ s16 nextCsId1;
- nextCs1 = ActorCutscene_GetAdditionalCutscene(this->dyna.actor.cutscene);
- nextCs2 = nextCs1;
- nextCs1 = ActorCutscene_GetAdditionalCutscene(nextCs1);
+ nextCsId1 = CutsceneManager_GetAdditionalCsId(this->dyna.actor.csId);
+ nextCsId2 = nextCsId1;
+ nextCsId1 = CutsceneManager_GetAdditionalCsId(nextCsId1);
- nextCs = ((void)0, gSaveContext.save.weekEventReg[53] & 0x40) ? nextCs1 : nextCs2;
+ nextCsId = CHECK_WEEKEVENTREG(WEEKEVENTREG_53_40) ? nextCsId1 : nextCsId2;
- if (ActorCutscene_GetCanPlayNext(nextCs) != 0) {
- gSaveContext.save.weekEventReg[53] |= 0x40;
- ActorCutscene_Start(nextCs, &this->dyna.actor);
+ if (CutsceneManager_IsNext(nextCsId)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_53_40);
+ CutsceneManager_Start(nextCsId, &this->dyna.actor);
this->actionFunc = DmChar08_DoNothing;
} else {
- ActorCutscene_SetIntentToPlay(nextCs);
+ CutsceneManager_Queue(nextCsId);
}
}
void func_80AAFAC4(DmChar08* this, PlayState* play) {
- if (play->csCtx.state == 0) {
+ if (play->csCtx.state == CS_STATE_IDLE) {
this->actionFunc = func_80AAF8F4;
}
}
void func_80AAFAE4(DmChar08* this, PlayState* play) {
- if (play->csCtx.state == 0) {
+ if (play->csCtx.state == CS_STATE_IDLE) {
this->actionFunc = func_80AAFB04;
}
}
@@ -390,7 +390,7 @@ void DmChar08_SpawnBubbles(DmChar08* this, PlayState* play) {
void func_80AAFCCC(DmChar08* this, PlayState* play) {
switch (play->sceneId) {
case SCENE_31MISAKI:
- if (!(gSaveContext.save.weekEventReg[55] & 0x80)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) {
switch (this->unk_206) {
case 0:
break;
@@ -422,7 +422,7 @@ void func_80AAFCCC(DmChar08* this, PlayState* play) {
case 2:
if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->unk_206 = 0;
}
break;
@@ -455,15 +455,15 @@ void DmChar08_DoNothing(DmChar08* this, PlayState* play) {
}
void func_80AAFE88(DmChar08* this, PlayState* play) {
- s32 actorActionIndex;
- CsCmdActorAction* csAction;
+ s32 cueChannel;
+ s32 pad;
f32 phi_f12;
- if (Cutscene_CheckActorAction(play, 474)) {
- actorActionIndex = Cutscene_GetActorActionIndex(play, 474);
- if (this->unk_1F6 != play->csCtx.actorActions[actorActionIndex]->action) {
- this->unk_1F6 = play->csCtx.actorActions[actorActionIndex]->action;
- switch (play->csCtx.actorActions[actorActionIndex]->action) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_474)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_474);
+ if (this->cueId != play->csCtx.actorCues[cueChannel]->id) {
+ this->cueId = play->csCtx.actorCues[cueChannel]->id;
+ switch (play->csCtx.actorCues[cueChannel]->id) {
case 1:
this->animIndex = TURTLE_ANIM_IDLE;
break;
@@ -509,17 +509,17 @@ void func_80AAFE88(DmChar08* this, PlayState* play) {
break;
case 14:
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BIG_TORTOISE_ROLL);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BIG_TORTOISE_ROLL);
this->animIndex = TURTLE_ANIM_FLOAT;
break;
}
}
- switch (play->csCtx.actorActions[actorActionIndex]->action) {
+ switch (play->csCtx.actorCues[cueChannel]->id) {
case 2:
this->unk_1FF = 1;
- phi_f12 = 2.0f * Environment_LerpWeight(play->csCtx.actorActions[actorActionIndex]->endFrame,
- play->csCtx.actorActions[actorActionIndex]->startFrame,
- play->csCtx.frames);
+ phi_f12 =
+ 2.0f * Environment_LerpWeight(play->csCtx.actorCues[cueChannel]->endFrame,
+ play->csCtx.actorCues[cueChannel]->startFrame, play->csCtx.curFrame);
if (phi_f12 > 1.0f) {
phi_f12 = 1.0f;
}
@@ -529,30 +529,30 @@ void func_80AAFE88(DmChar08* this, PlayState* play) {
this->unk_1FF = 2;
}
- Cutscene_ActorTranslateAndYaw(&this->dyna.actor, play, actorActionIndex);
+ Cutscene_ActorTranslateAndYaw(&this->dyna.actor, play, cueChannel);
break;
case 5:
- Cutscene_ActorTranslateAndYawSmooth(&this->dyna.actor, play, actorActionIndex);
+ Cutscene_ActorTranslateAndYawSmooth(&this->dyna.actor, play, cueChannel);
break;
case 14:
- Cutscene_ActorTranslate(&this->dyna.actor, play, actorActionIndex);
- Math_SmoothStepToS(&this->dyna.actor.world.rot.y, play->csCtx.actorActions[actorActionIndex]->rot.y,
- 0xA, 0xDC, 1);
+ Cutscene_ActorTranslate(&this->dyna.actor, play, cueChannel);
+ Math_SmoothStepToS(&this->dyna.actor.world.rot.y, play->csCtx.actorCues[cueChannel]->rot.y, 0xA, 0xDC,
+ 1);
this->dyna.actor.shape.rot.y = this->dyna.actor.world.rot.y;
break;
default:
- Cutscene_ActorTranslateAndYaw(&this->dyna.actor, play, actorActionIndex);
+ Cutscene_ActorTranslateAndYaw(&this->dyna.actor, play, cueChannel);
break;
}
this->targetYPos = this->dyna.actor.world.pos.y;
- if ((this->unk_1FF >= 2) || (play->csCtx.actorActions[actorActionIndex]->action == 2)) {
+ if ((this->unk_1FF >= 2) || (play->csCtx.actorCues[cueChannel]->id == 2)) {
Math_SmoothStepToF(&this->unk_1F0, 1.0f, 0.02f, 0.1f, 0.00001f);
}
} else {
- this->unk_1F6 = 99;
+ this->cueId = 99;
}
}
@@ -893,14 +893,14 @@ void func_80AB032C(DmChar08* this, PlayState* play) {
}
void func_80AB096C(DmChar08* this, PlayState* play) {
- if ((play->csCtx.state != 0) && (play->sceneId == SCENE_31MISAKI) && (gSaveContext.sceneLayer == 0) &&
- (play->csCtx.currentCsIndex == 0)) {
- if ((play->csCtx.frames >= 890) && (play->csCtx.frames < 922)) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_EARTHQUAKE_LAST2 - SFX_FLAG);
+ if ((play->csCtx.state != CS_STATE_IDLE) && (play->sceneId == SCENE_31MISAKI) && (gSaveContext.sceneLayer == 0) &&
+ (play->csCtx.scriptIndex == 0)) {
+ if ((play->csCtx.curFrame >= 890) && (play->csCtx.curFrame < 922)) {
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_EARTHQUAKE_LAST2 - SFX_FLAG);
}
}
if ((this->animIndex == TURTLE_ANIM_SWIM) && Animation_OnFrame(&this->skelAnime, 16.0f)) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BIG_TORTOISE_SWIM);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BIG_TORTOISE_SWIM);
}
}
@@ -960,7 +960,7 @@ void DmChar08_UpdateCollision(DmChar08* this, PlayState* play) {
sTurtleGreatBayTempleColVertices[5].y = 0x4B0;
sTurtleGreatBayTempleColVertices[9].y = 0x6A4;
}
- func_800C6554(play, &play->colCtx.dyna);
+ DynaPoly_InvalidateLookup(play, &play->colCtx.dyna);
}
void DmChar08_Update(Actor* thisx, PlayState* play) {
@@ -988,9 +988,9 @@ void DmChar08_Update(Actor* thisx, PlayState* play) {
this->dyna.actor.world.pos.y = this->targetYPos;
if (play->sceneId == SCENE_31MISAKI) {
if (this->dyna.actor.xzDistToPlayer > 1300.0f) {
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
} else {
- func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
}
}
if (this->unk_1FF != 0) {
@@ -1002,7 +1002,7 @@ void DmChar08_Update(Actor* thisx, PlayState* play) {
}
s32 DmChar08_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
- if ((play->csCtx.state == 0) && (play->sceneId == SCENE_31MISAKI) &&
+ if ((play->csCtx.state == CS_STATE_IDLE) && (play->sceneId == SCENE_31MISAKI) &&
(limbIndex == TURTLE_LIMB_FRONT_RIGHT_UPPER_FLIPPER)) {
rot->z = -0x5E24;
}
@@ -1097,7 +1097,7 @@ void DmChar08_Draw(Actor* thisx, PlayState* play) {
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sBigTurtleEyeTextures[this->eyeIndex]));
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sBigTurtleEyeTextures[this->eyeIndex]));
- if ((this->unk_1FF > 0) || (play->csCtx.state != CS_STATE_0)) {
+ if ((this->unk_1FF > 0) || (play->csCtx.state != CS_STATE_IDLE)) {
SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
this->skelAnime.dListCount, DmChar08_OverrideLimbDraw, DmChar08_PostLimbDraw,
DmChar08_TransformLimbDraw, &this->dyna.actor);
diff --git a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.h b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.h
index 2cdbb52c7..9fdbade43 100644
--- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.h
+++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.h
@@ -22,7 +22,7 @@ typedef struct DmChar08 {
/* 0x1E8 */ UNK_TYPE1 unk_1E8[8];
/* 0x1F0 */ f32 unk_1F0;
/* 0x1F4 */ s16 unk_1F4;
- /* 0x1F6 */ s16 unk_1F6;
+ /* 0x1F6 */ s16 cueId;
/* 0x1F6 */ s16 blinkTimer;
/* 0x1FA */ s16 unk_1FA;
/* 0x1FC */ u16 unk_1FC;
@@ -40,6 +40,4 @@ typedef struct DmChar08 {
/* 0x209 */ u8 dynapolyInitialized;
} DmChar08; // size = 0x20C
-extern const ActorInit Dm_Char08_InitVars;
-
#endif // Z_DM_CHAR08_H
diff --git a/src/overlays/actors/ovl_Dm_Char09/overlay.cfg b/src/overlays/actors/ovl_Dm_Char09/overlay.cfg
deleted file mode 100644
index 99eda9b12..000000000
--- a/src/overlays/actors/ovl_Dm_Char09/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Dm_Char09
-z_dm_char09.c
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 0bb112b43..93fa0e94c 100644
--- a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c
+++ b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c
@@ -18,7 +18,7 @@ void DmChar09_Draw(Actor* thisx, PlayState* play);
void DmChar09_DoNothing(DmChar09* this, PlayState* play);
void func_80AB2268(DmChar09* this, PlayState* play);
-const ActorInit Dm_Char09_InitVars = {
+ActorInit Dm_Char09_InitVars = {
ACTOR_DM_CHAR09,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -90,15 +90,15 @@ void func_80AB1FDC(DmChar09* this, PlayState* play) {
phi_fv0 = this->speed;
phi_fa0 = this->speed * 0.16f;
}
- Math_StepToF(&thisx->speedXZ, phi_fv0, phi_fa0);
- if ((thisx->speedXZ + 0.05f) < sp54) {
- Math_Vec3f_Scale(&thisx->velocity, thisx->speedXZ / sp54);
+ Math_StepToF(&thisx->speed, phi_fv0, phi_fa0);
+ if ((thisx->speed + 0.05f) < sp54) {
+ Math_Vec3f_Scale(&thisx->velocity, thisx->speed / sp54);
thisx->world.pos.x += thisx->velocity.x;
thisx->world.pos.y += thisx->velocity.y;
thisx->world.pos.z += thisx->velocity.z;
} else {
this->unk_21C += this->unk_220;
- thisx->speedXZ *= 0.4f;
+ thisx->speed *= 0.4f;
phi_a1 = true;
if (((this->unk_21C >= this->unk_218) && (this->unk_220 > 0)) ||
((this->unk_21C <= 0) && (this->unk_220 < 0))) {
@@ -127,24 +127,24 @@ void func_80AB2268(DmChar09* this, PlayState* play) {
Path* path;
s32 pad;
s32 i;
- s32 actionIndex;
+ s32 cueChannel;
s32 max = 0;
s32 pathnum;
u8 temp = false;
if (!DMCHAR09_GET_F(&this->actor)) {
- if (play->csCtx.currentCsIndex == 1) {
+ if (play->csCtx.scriptIndex == 1) {
temp = true;
}
- } else if (play->csCtx.currentCsIndex == 0) {
+ } else if (play->csCtx.scriptIndex == 0) {
temp = true;
}
- if (Cutscene_CheckActorAction(play, 0x1F7) && temp) {
- actionIndex = Cutscene_GetActorActionIndex(play, 0x1F7);
- if (this->unk_22F != play->csCtx.actorActions[actionIndex]->action) {
- this->unk_22F = play->csCtx.actorActions[actionIndex]->action;
- switch (play->csCtx.actorActions[actionIndex]->action) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_503) && temp) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_503);
+ if (this->cueId != play->csCtx.actorCues[cueChannel]->id) {
+ this->cueId = play->csCtx.actorCues[cueChannel]->id;
+ switch (play->csCtx.actorCues[cueChannel]->id) {
case 2:
max = 0;
break;
@@ -159,7 +159,7 @@ void func_80AB2268(DmChar09* this, PlayState* play) {
break;
}
- if (play->csCtx.actorActions[actionIndex]->action >= 2) {
+ if (play->csCtx.actorCues[cueChannel]->id >= 2) {
pathnum = DMCHAR09_GET_PATH(&this->actor);
path = &play->setupPathList[pathnum];
@@ -175,7 +175,7 @@ void func_80AB2268(DmChar09* this, PlayState* play) {
this->unk_220 = 1;
this->unk_22E = true;
- this->speed = (u16)play->csCtx.actorActions[actionIndex]->rot.z * 0.00390625f;
+ this->speed = (u16)play->csCtx.actorCues[cueChannel]->rot.z * 0.00390625f;
this->actionFunc = func_80AB1FDC;
} else {
this->unk_22E = false;
@@ -183,7 +183,7 @@ void func_80AB2268(DmChar09* this, PlayState* play) {
}
}
} else {
- this->unk_22F = 0x63;
+ this->cueId = 99;
}
}
@@ -202,8 +202,8 @@ void DmChar09_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
func_80AB2268(this, play);
func_80AB24BC(this, play);
- if ((play->csCtx.state != 0) && this->unk_22E && DMCHAR09_GET_100(thisx)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_POSTMAN_WALK + SFX_FLAG);
+ if ((play->csCtx.state != CS_STATE_IDLE) && this->unk_22E && DMCHAR09_GET_100(thisx)) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_POSTMAN_WALK + SFX_FLAG);
}
}
@@ -217,7 +217,7 @@ s32 DmChar09_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f
void DmChar09_Draw(Actor* thisx, PlayState* play) {
DmChar09* this = THIS;
- if ((play->csCtx.state != 0) && this->unk_22E) {
+ if ((play->csCtx.state != CS_STATE_IDLE) && this->unk_22E) {
func_8012C28C(play->state.gfxCtx);
func_8012C2DC(play->state.gfxCtx);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, DmChar09_OverrideLimbDraw, NULL,
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 ce01f164a..cfb3523e6 100644
--- a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.h
+++ b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.h
@@ -31,9 +31,7 @@ typedef struct DmChar09 {
/* 0x22A */ s16 unk_22A;
/* 0x22C */ UNK_TYPE1 pad22C[2];
/* 0x22E */ u8 unk_22E;
- /* 0x22F */ u8 unk_22F;
+ /* 0x22F */ u8 cueId;
} DmChar09; // size = 0x230
-extern const ActorInit Dm_Char09_InitVars;
-
#endif // Z_DM_CHAR09_H
diff --git a/src/overlays/actors/ovl_Dm_Gm/overlay.cfg b/src/overlays/actors/ovl_Dm_Gm/overlay.cfg
deleted file mode 100644
index e12011867..000000000
--- a/src/overlays/actors/ovl_Dm_Gm/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Dm_Gm
-z_dm_gm.c
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 1ed25ede2..2cdddbf19 100644
--- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c
+++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c
@@ -21,7 +21,7 @@ void func_80C24A00(DmGm* this, PlayState* play);
void func_80C24BD0(DmGm* this, PlayState* play);
void func_80C25000(Actor* thisx, PlayState* play);
-const ActorInit Dm_Gm_InitVars = {
+ActorInit Dm_Gm_InitVars = {
ACTOR_DM_GM,
ACTORCAT_NPC,
FLAGS,
@@ -195,28 +195,28 @@ void func_80C248A8(DmGm* this, PlayState* play) {
void func_80C24A00(DmGm* this, PlayState* play) {
s32 sp28[] = { 0, 0, 12, 2, 4, 6, 8, 10, 11, 3 };
- u16 action;
- s32 sp20;
+ u16 cueId;
+ s32 cueChannel;
- if (play->csCtx.state != 0) {
+ if (play->csCtx.state != CS_STATE_IDLE) {
if (this->unk_2D0 == 0) {
- this->unk_2B0 = 255;
+ this->cueId = 255;
this->unk_2D0 = 1;
this->unk_2D4 = 0;
this->unk_2CC = this->unk_2C8;
}
- if (Cutscene_CheckActorAction(play, 0x22D)) {
- sp20 = Cutscene_GetActorActionIndex(play, 0x22D);
- action = play->csCtx.actorActions[sp20]->action;
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_557)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_557);
+ cueId = play->csCtx.actorCues[cueChannel]->id;
- if (this->unk_2B0 != (action & 0xFF)) {
- this->unk_2B0 = action;
+ if (this->cueId != (u8)cueId) {
+ this->cueId = cueId;
this->unk_2D4 = 1;
- func_80C24428(this, play, sp28[action]);
+ func_80C24428(this, play, sp28[cueId]);
}
- switch (this->unk_2B0) {
+ switch (this->cueId) {
case 2:
case 4:
case 5:
@@ -230,7 +230,7 @@ void func_80C24A00(DmGm* this, PlayState* play) {
}
break;
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, sp20);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
}
} else if (this->unk_2D0 != 0) {
this->unk_2D0 = 0;
@@ -264,7 +264,7 @@ void DmGm_Update(Actor* thisx, PlayState* play) {
func_80C24360(this, play);
func_80C24504(this);
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
}
Vec3f D_80C25218 = { 450.0f, 700.0f, -760.0f };
diff --git a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h
index b7e45a3a1..8b6b3f652 100644
--- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h
+++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h
@@ -21,7 +21,7 @@ typedef struct DmGm {
/* 0x2AC */ s8 unk_2AC;
/* 0x2AD */ s8 unk_2AD;
/* 0x2AE */ u16 unk_2AE;
- /* 0x2B0 */ u8 unk_2B0;
+ /* 0x2B0 */ u8 cueId;
/* 0x2B4 */ Actor* unk_2B4;
/* 0x2B8 */ s16 unk_2B8;
/* 0x2BA */ s16 unk_2BA;
@@ -36,6 +36,4 @@ typedef struct DmGm {
/* 0x2D4 */ s32 unk_2D4;
} DmGm; // size = 0x2D8
-extern const ActorInit Dm_Gm_InitVars;
-
#endif // Z_DM_GM_H
diff --git a/src/overlays/actors/ovl_Dm_Hina/overlay.cfg b/src/overlays/actors/ovl_Dm_Hina/overlay.cfg
deleted file mode 100644
index 824085b3e..000000000
--- a/src/overlays/actors/ovl_Dm_Hina/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Dm_Hina
-z_dm_hina.c
diff --git a/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c b/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c
index 07c2d2bdd..a2a2589fb 100644
--- a/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c
+++ b/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.c
@@ -21,7 +21,7 @@ void func_80A1F5AC(DmHina* this, PlayState* play);
void func_80A1F63C(DmHina* this, PlayState* play);
#if 0
-const ActorInit Dm_Hina_InitVars = {
+ActorInit Dm_Hina_InitVars = {
ACTOR_DM_HINA,
ACTORCAT_ITEMACTION,
FLAGS,
diff --git a/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.h b/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.h
index 02d12ee7d..21c9e55dc 100644
--- a/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.h
+++ b/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.h
@@ -16,6 +16,4 @@ typedef struct DmHina {
/* 0x160 */ char unk_160[0x24];
} DmHina; // size = 0x184
-extern const ActorInit Dm_Hina_InitVars;
-
#endif // Z_DM_HINA_H
diff --git a/src/overlays/actors/ovl_Dm_Nb/overlay.cfg b/src/overlays/actors/ovl_Dm_Nb/overlay.cfg
deleted file mode 100644
index 7af01c8cc..000000000
--- a/src/overlays/actors/ovl_Dm_Nb/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Dm_Nb
-z_dm_nb.c
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 3dcde3787..c42ad3c2b 100644
--- a/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c
+++ b/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c
@@ -5,7 +5,6 @@
*/
#include "z_dm_nb.h"
-#include "objects/object_nb/object_nb.h"
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8)
@@ -16,7 +15,7 @@ void DmNb_Destroy(Actor* thisx, PlayState* play);
void DmNb_Update(Actor* thisx, PlayState* play);
void DmNb_Draw(Actor* thisx, PlayState* play);
-const ActorInit Dm_Nb_InitVars = {
+ActorInit Dm_Nb_InitVars = {
ACTOR_DM_NB,
ACTORCAT_NPC,
FLAGS,
@@ -28,7 +27,9 @@ const ActorInit Dm_Nb_InitVars = {
(ActorFunc)DmNb_Draw,
};
-static AnimationInfoS sAnimationInfo[] = { { &object_nb_Anim_000990, 1.0f, 0, -1, ANIMMODE_LOOP, 0 } };
+static AnimationInfoS sAnimationInfo[] = {
+ { &gNbIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+};
s32 func_80C1DED0(DmNb* this, s32 arg1) {
s32 ret = false;
@@ -42,23 +43,23 @@ s32 func_80C1DED0(DmNb* this, s32 arg1) {
void func_80C1DF18(DmNb* this, PlayState* play) {
s32 sp2C[] = { 0, 0, 0, 0, 0 };
- u16 csAction;
- s32 csActionIndex;
+ u16 cueId;
+ s32 cueChannel;
- if (play->csCtx.state != 0) {
+ if (play->csCtx.state != CS_STATE_IDLE) {
if (this->unk1F8 == 0) {
- this->unk1EC = 0xFF;
+ this->cueId = 255;
this->unk1F8 = 1;
this->unk1F4 = this->unk1F0;
}
- if (Cutscene_CheckActorAction(play, 0x232)) {
- csActionIndex = Cutscene_GetActorActionIndex(play, 0x232);
- csAction = play->csCtx.actorActions[csActionIndex]->action;
- if (this->unk1EC != (u8)csAction) {
- this->unk1EC = csAction;
- func_80C1DED0(this, sp2C[csAction]);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_562)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_562);
+ cueId = play->csCtx.actorCues[cueChannel]->id;
+ if (this->cueId != (u8)cueId) {
+ this->cueId = cueId;
+ func_80C1DED0(this, sp2C[cueId]);
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, csActionIndex);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
}
} else if (this->unk1F8 != 0) {
this->unk1F8 = 0;
@@ -70,7 +71,7 @@ void DmNb_Init(Actor* thisx, PlayState* play) {
DmNb* this = THIS;
ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f);
- SkelAnime_InitFlex(play, &this->skelAnime, &object_nb_Skel_008C40, NULL, this->jointTable, this->morphTable, 8);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gNbSkel, NULL, this->jointTable, this->morphTable, NB_LIMB_MAX);
this->unk1F0 = -1;
func_80C1DED0(this, 0);
this->actor.flags &= ~ACTOR_FLAG_1;
@@ -86,7 +87,7 @@ void DmNb_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
SkelAnime_Update(&this->skelAnime);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
}
void DmNb_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
diff --git a/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.h b/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.h
index eafc4ef99..7bb7b39cd 100644
--- a/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.h
+++ b/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.h
@@ -2,6 +2,7 @@
#define Z_DM_NB_H
#include "global.h"
+#include "objects/object_nb/object_nb.h"
struct DmNb;
@@ -11,14 +12,12 @@ typedef struct DmNb {
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ DmNbActionFunc actionFunc;
- /* 0x18C */ Vec3s jointTable[8];
- /* 0x1BC */ Vec3s morphTable[8];
- /* 0x1EC */ u8 unk1EC;
+ /* 0x18C */ Vec3s jointTable[NB_LIMB_MAX];
+ /* 0x1BC */ Vec3s morphTable[NB_LIMB_MAX];
+ /* 0x1EC */ u8 cueId;
/* 0x1F0 */ s32 unk1F0;
/* 0x1F4 */ s32 unk1F4;
/* 0x1F8 */ s32 unk1F8;
} DmNb; // size = 0x1FC
-extern const ActorInit Dm_Nb_InitVars;
-
#endif // Z_DM_NB_H
diff --git a/src/overlays/actors/ovl_Dm_Opstage/overlay.cfg b/src/overlays/actors/ovl_Dm_Opstage/overlay.cfg
deleted file mode 100644
index 17e40ea81..000000000
--- a/src/overlays/actors/ovl_Dm_Opstage/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Dm_Opstage
-z_dm_opstage.c
diff --git a/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c b/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c
index 7a4142971..e0d2fc2a3 100644
--- a/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c
+++ b/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c
@@ -18,7 +18,7 @@ void DmOpstage_Draw(Actor* thisx, PlayState* play);
void DmOpstage_FollowCutsceneScript(DmOpstage* this, PlayState* play);
-const ActorInit Dm_Opstage_InitVars = {
+ActorInit Dm_Opstage_InitVars = {
ACTOR_DM_OPSTAGE,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -70,24 +70,24 @@ void DmOpstage_Destroy(Actor* thisx, PlayState* play) {
}
void DmOpstage_FollowCutsceneScript(DmOpstage* this, PlayState* play) {
- s32 actionIndex;
+ s32 cueChannel;
if (DMOPSTAGE_GET_TYPE(&this->dyna.actor) == DMOPSTAGE_TYPE_GROUND) {
- if (Cutscene_CheckActorAction(play, 0x73)) {
- actionIndex = Cutscene_GetActorActionIndex(play, 0x73);
- if (play->csCtx.actorActions[actionIndex]->action == 2) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_115)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_115);
+ if (play->csCtx.actorCues[cueChannel]->id == 2) {
this->dyna.actor.scale.x = 0.075f;
this->dyna.actor.scale.z = 0.3f;
} else {
this->dyna.actor.scale.x = 0.1f;
this->dyna.actor.scale.z = 0.1f;
}
- Cutscene_ActorTranslateAndYaw(&this->dyna.actor, play, actionIndex);
+ Cutscene_ActorTranslateAndYaw(&this->dyna.actor, play, cueChannel);
}
- } else if (Cutscene_CheckActorAction(play, DMOPSTAGE_GET_ACTORACTION(&this->dyna.actor) + 0x74)) {
+ } else if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_116 + DMOPSTAGE_GET_CUE_TYPE_OFFSET(&this->dyna.actor))) {
Cutscene_ActorTranslateAndYaw(
&this->dyna.actor, play,
- Cutscene_GetActorActionIndex(play, DMOPSTAGE_GET_ACTORACTION(&this->dyna.actor) + 0x74));
+ Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_116 + DMOPSTAGE_GET_CUE_TYPE_OFFSET(&this->dyna.actor)));
}
}
@@ -95,7 +95,7 @@ void DmOpstage_Update(Actor* thisx, PlayState* play) {
DmOpstage* this = THIS;
this->actionFunc(this, play);
- if ((play->sceneId == SCENE_SPOT00) && (gSaveContext.sceneLayer == 0) && (play->csCtx.frames == 480)) {
+ if ((play->sceneId == SCENE_SPOT00) && (gSaveContext.sceneLayer == 0) && (play->csCtx.curFrame == 480)) {
// This actor is responsible for playing the fairy sound during the exposition in the intro,
// during the transition to Lost Woods, before Ocarina gets stolen.
func_8019F128(NA_SE_EV_NAVY_FLY_REBIRTH);
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 073efa1bf..03fd093f3 100644
--- a/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.h
+++ b/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.h
@@ -4,7 +4,7 @@
#include "global.h"
#define DMOPSTAGE_GET_TYPE(thisx) ((thisx)->params & 0xFF)
-#define DMOPSTAGE_GET_ACTORACTION(thisx) (((thisx)->params >> 8) & 0xFF)
+#define DMOPSTAGE_GET_CUE_TYPE_OFFSET(thisx) (((thisx)->params >> 8) & 0xFF)
struct DmOpstage;
@@ -24,6 +24,4 @@ typedef struct DmOpstage {
/* 0x1A4 */ Vec3f drawOffset;
} DmOpstage; // size = 0x1B0
-extern const ActorInit Dm_Opstage_InitVars;
-
#endif // Z_DM_OPSTAGE_H
diff --git a/src/overlays/actors/ovl_Dm_Ravine/overlay.cfg b/src/overlays/actors/ovl_Dm_Ravine/overlay.cfg
deleted file mode 100644
index a3287c407..000000000
--- a/src/overlays/actors/ovl_Dm_Ravine/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Dm_Ravine
-z_dm_ravine.c
diff --git a/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.c b/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.c
index afcd2b55d..42a846357 100644
--- a/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.c
+++ b/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.c
@@ -16,7 +16,7 @@ void DmRavine_DoNothing(DmRavine* this, PlayState* play);
void DmRavine_Update(Actor* thisx, PlayState* play);
void DmRavine_Draw(Actor* thisx, PlayState* play);
-const ActorInit Dm_Ravine_InitVars = {
+ActorInit Dm_Ravine_InitVars = {
ACTOR_DM_RAVINE,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -32,8 +32,8 @@ void DmRavine_Init(Actor* thisx, PlayState* play) {
s32 pad;
DmRavine* this = THIS;
- if (((((void)0, gSaveContext.save.weekEventReg[0]) & 0x10) | cREG(0)) != 0) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG_ALT(WEEKEVENTREG_ENTERED_GORMAN_TRACK) | cREG(0)) {
+ Actor_Kill(&this->actor);
return;
}
@@ -63,7 +63,7 @@ void DmRavine_Update(Actor* thisx, PlayState* play) {
play->roomCtx.unk7A[1]++;
if (play->roomCtx.unk7A[1] > 254) {
play->roomCtx.unk7A[1] = 254;
- if (play->csCtx.frames > 700) {
+ if (play->csCtx.curFrame > 700) {
play->roomCtx.unk7A[1] = 255;
play->roomCtx.unk7A[0] = 0;
this->state++; // -> DM_RAVINE_STATE_PENDING_DEATH
@@ -71,7 +71,7 @@ void DmRavine_Update(Actor* thisx, PlayState* play) {
}
break;
case DM_RAVINE_STATE_PENDING_DEATH:
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
break;
}
}
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 d634ec5e9..01b9b52af 100644
--- a/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.h
+++ b/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.h
@@ -20,6 +20,4 @@ typedef struct DmRavine {
/* 0x149 */ u8 isActive;
} DmRavine; // size = 0x14C
-extern const ActorInit Dm_Ravine_InitVars;
-
#endif // Z_DM_RAVINE_H
diff --git a/src/overlays/actors/ovl_Dm_Sa/overlay.cfg b/src/overlays/actors/ovl_Dm_Sa/overlay.cfg
deleted file mode 100644
index 3916c7965..000000000
--- a/src/overlays/actors/ovl_Dm_Sa/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Dm_Sa
-z_dm_sa.c
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 d9f775f6a..dc6d8bcef 100644
--- a/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c
+++ b/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c
@@ -18,7 +18,7 @@ void DmSa_Draw(Actor* thisx, PlayState* play);
void DmSa_DoNothing(DmSa* this, PlayState* play);
-const ActorInit Dm_Sa_InitVars = {
+ActorInit Dm_Sa_InitVars = {
ACTOR_DM_SA,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -83,26 +83,24 @@ void DmSa_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
}
Gfx* func_80A2EB58(GraphicsContext* gfxCtx, u32 alpha) {
- Gfx* dList;
- Gfx* dListHead;
+ Gfx* gfxHead = GRAPH_ALLOC(gfxCtx, 2 * sizeof(Gfx)); //! @bug this does not allocate enough for 3 Gfx commands;
+ Gfx* gfx = gfxHead;
- dList = dListHead = GRAPH_ALLOC(gfxCtx, sizeof(Gfx) * 2); //! @bug this does not allocate enough for 3 Gfx commands
- gDPSetRenderMode(dListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2);
- gDPSetEnvColor(dListHead++, 0, 0, 0, alpha);
- gSPEndDisplayList(dListHead++);
+ gDPSetRenderMode(gfx++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2);
+ gDPSetEnvColor(gfx++, 0, 0, 0, alpha);
+ gSPEndDisplayList(gfx++);
- return dList;
+ return gfxHead;
}
Gfx* func_80A2EBB0(GraphicsContext* gfxCtx, u32 alpha) {
- Gfx* dList;
- Gfx* dListHead;
+ Gfx* gfxHead = GRAPH_ALLOC(gfxCtx, 2 * sizeof(Gfx));
+ Gfx* gfx = gfxHead;
- dList = dListHead = GRAPH_ALLOC(gfxCtx, sizeof(Gfx) * 2);
- gDPSetEnvColor(dListHead++, 0, 0, 0, alpha);
- gSPEndDisplayList(dListHead++);
+ gDPSetEnvColor(gfx++, 0, 0, 0, alpha);
+ gSPEndDisplayList(gfx++);
- return dList;
+ return gfxHead;
}
void DmSa_Draw(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.h b/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.h
index d1d37128b..3dd827a15 100644
--- a/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.h
+++ b/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.h
@@ -20,6 +20,4 @@ typedef struct DmSa {
/* 0x2F0 */ u32 alpha;
} DmSa; // size = 0x2F4
-extern const ActorInit Dm_Sa_InitVars;
-
#endif // Z_DM_SA_H
diff --git a/src/overlays/actors/ovl_Dm_Statue/overlay.cfg b/src/overlays/actors/ovl_Dm_Statue/overlay.cfg
deleted file mode 100644
index d01c4284e..000000000
--- a/src/overlays/actors/ovl_Dm_Statue/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Dm_Statue
-z_dm_statue.c
diff --git a/src/overlays/actors/ovl_Dm_Statue/z_dm_statue.c b/src/overlays/actors/ovl_Dm_Statue/z_dm_statue.c
index 62c267322..77ce3c738 100644
--- a/src/overlays/actors/ovl_Dm_Statue/z_dm_statue.c
+++ b/src/overlays/actors/ovl_Dm_Statue/z_dm_statue.c
@@ -7,7 +7,7 @@
#include "z_dm_statue.h"
#include "objects/object_smtower/object_smtower.h"
-#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_4000000)
+#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_CAN_PRESS_SWITCH)
#define THIS ((DmStatue*)thisx)
@@ -16,7 +16,7 @@ void DmStatue_Destroy(Actor* thisx, PlayState* play);
void DmStatue_Update(Actor* thisx, PlayState* play);
void DmStatue_Draw(Actor* thisx, PlayState* play);
-const ActorInit Dm_Statue_InitVars = {
+ActorInit Dm_Statue_InitVars = {
ACTOR_DM_STATUE,
ACTORCAT_ITEMACTION,
FLAGS,
diff --git a/src/overlays/actors/ovl_Dm_Statue/z_dm_statue.h b/src/overlays/actors/ovl_Dm_Statue/z_dm_statue.h
index 1ad123523..eb06acd01 100644
--- a/src/overlays/actors/ovl_Dm_Statue/z_dm_statue.h
+++ b/src/overlays/actors/ovl_Dm_Statue/z_dm_statue.h
@@ -10,6 +10,4 @@ typedef struct DmStatue {
/* 0x144 */ char unk_144[0x50];
} DmStatue; // size = 0x194
-extern const ActorInit Dm_Statue_InitVars;
-
#endif // Z_DM_STATUE_H
diff --git a/src/overlays/actors/ovl_Dm_Stk/overlay.cfg b/src/overlays/actors/ovl_Dm_Stk/overlay.cfg
deleted file mode 100644
index 628231122..000000000
--- a/src/overlays/actors/ovl_Dm_Stk/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Dm_Stk
-z_dm_stk.c
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 90ccb1382..9a9e14dbc 100644
--- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c
+++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c
@@ -150,7 +150,7 @@ typedef enum {
/* 4 */ SK_DEKU_PIPES_CS_STATE_END
} SkullKidDekuPipesCutsceneState;
-const ActorInit Dm_Stk_InitVars = {
+ActorInit Dm_Stk_InitVars = {
ACTOR_DM_STK,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -336,9 +336,9 @@ void DmStk_ChangeAnim(DmStk* this, PlayState* play, SkelAnime* skelAnime, Animat
* after Skull Kid steals Epona.
*/
void DmStk_PlaySfxForIntroCutsceneFirstPart(DmStk* this, PlayState* play) {
- switch (play->csCtx.frames + 20) {
+ switch (play->csCtx.curFrame + 20) {
case 1195:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_APPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_APPEAR);
break;
case 1232:
@@ -346,48 +346,48 @@ void DmStk_PlaySfxForIntroCutsceneFirstPart(DmStk* this, PlayState* play) {
case 1252:
case 1255:
case 1257:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_SHAKEHEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_SHAKEHEAD);
break;
case 1285:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STAL03_LAUGH_BIG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STAL03_LAUGH_BIG);
break;
case 1343:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_MASK_OFF);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_MASK_OFF);
break;
case 1410:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_MASK_ON);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_MASK_ON);
break;
case 1603:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_WALK);
break;
case 1610:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_REVERSE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_REVERSE);
break;
case 2095:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_SURPRISED);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_SURPRISED);
break;
case 2190:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_JUMP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_JUMP);
break;
case 2212:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_ONGND);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_ONGND);
break;
case 2214:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STAL02_LAUGH_SHORT);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STAL02_LAUGH_SHORT);
break;
case 2250:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STAL06_SURPRISED);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_DOWN_K);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STAL06_SURPRISED);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_DOWN_K);
break;
case 2255:
@@ -416,7 +416,7 @@ void DmStk_PlaySfxForIntroCutsceneFirstPart(DmStk* this, PlayState* play) {
case 2508:
case 2519:
case 2530:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_RIDE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_RIDE);
break;
}
}
@@ -427,7 +427,7 @@ void DmStk_PlaySfxForIntroCutsceneFirstPart(DmStk* this, PlayState* play) {
* any sound in-game, since all sound effects are muted when it plays.
*/
void DmStk_PlaySfxForTitleCutscene(DmStk* this, PlayState* play) {
- if (play->csCtx.frames == 535) {
+ if (play->csCtx.curFrame == 535) {
func_8019F128(NA_SE_EV_CLOCK_TOWER_BELL);
}
}
@@ -437,7 +437,7 @@ void DmStk_PlaySfxForTitleCutscene(DmStk* this, PlayState* play) {
* that starts after the fade-to-white and ends when the player gains control.
*/
void DmStk_PlaySfxForIntroCutsceneSecondPart(DmStk* this, PlayState* play) {
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 78:
case 89:
case 100:
@@ -455,11 +455,11 @@ void DmStk_PlaySfxForIntroCutsceneSecondPart(DmStk* this, PlayState* play) {
case 232:
case 243:
case 254:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_RIDE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_RIDE);
break;
case 173:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STAL03_LAUGH_BIG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STAL03_LAUGH_BIG);
break;
}
}
@@ -469,17 +469,17 @@ void DmStk_PlaySfxForIntroCutsceneSecondPart(DmStk* this, PlayState* play) {
* the Happy Mask Salesman.
*/
void DmStk_PlaySfxForObtainingMajorasMaskCutscene(DmStk* this, PlayState* play) {
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 18:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_GASAGOSO);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_GASAGOSO);
break;
case 90:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_MASK_ON);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_MASK_ON);
break;
case 142:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EVIL_POWER);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EVIL_POWER);
break;
}
}
@@ -490,7 +490,7 @@ void DmStk_PlaySfxForObtainingMajorasMaskCutscene(DmStk* this, PlayState* play)
* the hallucinatory Deku Scrubs scene.
*/
void DmStk_PlaySfxForCurseCutsceneFirstPart(DmStk* this, PlayState* play) {
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 415:
func_801A479C(&this->actor.projectedPos, NA_SE_EN_STALKIDS_FLOAT, 100);
break;
@@ -501,11 +501,11 @@ void DmStk_PlaySfxForCurseCutsceneFirstPart(DmStk* this, PlayState* play) {
break;
case 560:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STAL02_LAUGH_SHORT);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STAL02_LAUGH_SHORT);
break;
case 890:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STAL21_PSYCHO_VOICE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STAL21_PSYCHO_VOICE);
break;
}
}
@@ -518,13 +518,13 @@ void DmStk_PlaySfxForCurseCutsceneFirstPart(DmStk* this, PlayState* play) {
void DmStk_PlaySfxForCurseCutsceneSecondPart(DmStk* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 10:
func_801A479C(&this->actor.projectedPos, NA_SE_EN_STALKIDS_FLOAT, 50);
break;
case 71:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_BODY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_BODY);
break;
case 365:
@@ -536,30 +536,30 @@ void DmStk_PlaySfxForCurseCutsceneSecondPart(DmStk* this, PlayState* play) {
break;
case 265:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STAL03_LAUGH_BIG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STAL03_LAUGH_BIG);
break;
case 126:
- Actor_PlaySfxAtPos(&player->actor, NA_SE_VO_DUMMY_150);
+ Actor_PlaySfx(&player->actor, NA_SE_VO_DUMMY_150);
break;
case 197:
- Actor_PlaySfxAtPos(&player->actor, NA_SE_VO_DUMMY_134);
+ Actor_PlaySfx(&player->actor, NA_SE_VO_DUMMY_134);
break;
case 207:
- Actor_PlaySfxAtPos(&player->actor, NA_SE_VO_DUMMY_135);
+ Actor_PlaySfx(&player->actor, NA_SE_VO_DUMMY_135);
break;
case 217:
- Actor_PlaySfxAtPos(&player->actor, NA_SE_VO_DUMMY_136);
+ Actor_PlaySfx(&player->actor, NA_SE_VO_DUMMY_136);
break;
}
if (player) {}
- if ((play->csCtx.frames >= 263) && (play->csCtx.frames < 698)) {
- Actor_PlaySfxAtPos(&player->actor, NA_SE_EN_STALKIDS_BODY_LEV - SFX_FLAG);
+ if ((play->csCtx.curFrame >= 263) && (play->csCtx.curFrame < 698)) {
+ Actor_PlaySfx(&player->actor, NA_SE_EN_STALKIDS_BODY_LEV - SFX_FLAG);
}
}
@@ -571,43 +571,43 @@ void DmStk_PlaySfxForCurseCutsceneSecondPart(DmStk* this, PlayState* play) {
void DmStk_PlaySfxForClockTowerIntroCutsceneVersion1(DmStk* this, PlayState* play) {
static s32 sMoonCallTimer = 0;
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 140:
func_801A479C(&this->actor.projectedPos, NA_SE_EN_STALKIDS_FLOAT, 80);
break;
case 258:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_TURN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_TURN);
break;
case 524:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_TURN);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STAL04_ANGER);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_TURN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STAL04_ANGER);
break;
case 534:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_ROLL);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_ROLL);
break;
case 678:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_STRETCH);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_STRETCH);
break;
}
- if ((this->animIndex == SK_ANIM_OCARINA_JUGGLE) && (play->csCtx.frames < 700)) {
+ if ((this->animIndex == SK_ANIM_OCARINA_JUGGLE) && (play->csCtx.curFrame < 700)) {
if (Animation_OnFrame(&this->skelAnime, 5.0f) || Animation_OnFrame(&this->skelAnime, 25.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_OTEDAMA1);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_OTEDAMA1);
} else if (Animation_OnFrame(&this->skelAnime, 17.0f) || Animation_OnFrame(&this->skelAnime, 40.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_OTEDAMA2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_OTEDAMA2);
}
}
- if (play->csCtx.frames >= 700) {
+ if (play->csCtx.curFrame >= 700) {
if (sMoonCallTimer < 128) {
if ((sMoonCallTimer & 0x1F) == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STAL20_CALL_MOON);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STAL20_CALL_MOON);
} else if ((sMoonCallTimer & 0x1F) == 16) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STAL20_CALL_MOON2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STAL20_CALL_MOON2);
}
sMoonCallTimer++;
@@ -621,9 +621,9 @@ void DmStk_PlaySfxForClockTowerIntroCutsceneVersion1(DmStk* this, PlayState* pla
* Handles sound effects for the cutscene where Skull Kid drops the Ocarina of Time.
*/
void DmStk_PlaySfxForDroppingOcarinaCutscene(DmStk* this, PlayState* play) {
- if (play->csCtx.frames == 3) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STAL06_SURPRISED);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_DOWN_K);
+ if (play->csCtx.curFrame == 3) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STAL06_SURPRISED);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_DOWN_K);
}
}
@@ -631,8 +631,8 @@ void DmStk_PlaySfxForDroppingOcarinaCutscene(DmStk* this, PlayState* play) {
* Handles sound effects for the cutscene where Skull Kid is shivering in the rain.
*/
void DmStk_PlaySfxForShiveringInRainCutscene(DmStk* this, PlayState* play) {
- if ((play->csCtx.frames >= 642) && (play->csCtx.frames < 845)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_NE_STAL23_COLD - SFX_FLAG);
+ if ((play->csCtx.curFrame >= 642) && (play->csCtx.curFrame < 845)) {
+ Actor_PlaySfx(&this->actor, NA_SE_NE_STAL23_COLD - SFX_FLAG);
}
}
@@ -641,23 +641,23 @@ void DmStk_PlaySfxForShiveringInRainCutscene(DmStk* this, PlayState* play) {
* in Termina Field.
*/
void DmStk_PlaySfxForPlayingWithFairiesCutscene(DmStk* this, PlayState* play) {
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 58:
case 61:
case 68:
case 72:
case 77:
case 79:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_PL_WALK_WATER2);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_PL_WALK_GROUND + SURFACE_SFX_OFFSET_TALL_GRASS);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_WALK);
break;
case 186:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_UP);
break;
case 230:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STAL22_LAUGH_KID_L);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STAL22_LAUGH_KID_L);
break;
}
}
@@ -668,13 +668,13 @@ void DmStk_PlaySfxForPlayingWithFairiesCutscene(DmStk* this, PlayState* play) {
* the Giants are walking away.
*/
void DmStk_PlaySfxForEndingCutsceneFirstPart(DmStk* this, PlayState* play) {
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 5:
Audio_PlayAmbience(AMBIENCE_ID_0C);
break;
case 660:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_SHAKEHEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_SHAKEHEAD);
break;
}
}
@@ -686,45 +686,45 @@ void DmStk_PlaySfxForEndingCutsceneFirstPart(DmStk* this, PlayState* play) {
void DmStk_PlaySfxForEndingCutsceneSecondPart(DmStk* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 5:
Audio_PlayAmbience(AMBIENCE_ID_0C);
break;
case 45:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_RIDE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_RIDE);
break;
case 93:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_MASK_OFF);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_MASK_OFF);
break;
case 245:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_RIDE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_RIDE);
break;
case 269:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STAL11_LAUGH_SHY2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STAL11_LAUGH_SHY2);
break;
case 327:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_SHAKEHEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_SHAKEHEAD);
break;
case 455:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_RIDE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_RIDE);
break;
case 1730:
- Audio_QueueSeqCmd(0x141400FF);
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_AMBIENCE, 20);
break;
case 1395:
- func_800B8E58(player, NA_SE_VO_DUMMY_34);
+ Player_PlaySfx(player, NA_SE_VO_DUMMY_34);
break;
case 1850:
- Audio_QueueSeqCmd(0x42320000);
+ SEQCMD_SET_SEQPLAYER_VOLUME(SEQ_PLAYER_SFX, 50, 0);
break;
case 2000:
@@ -735,20 +735,20 @@ void DmStk_PlaySfxForEndingCutsceneSecondPart(DmStk* this, PlayState* play) {
if (this->animIndex == SK_ANIM_SHAKE_HEAD) {
if (Animation_OnFrame(&this->skelAnime, 8.0f) || Animation_OnFrame(&this->skelAnime, 17.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_MASK_OFF);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_MASK_OFF);
}
if (Animation_OnFrame(&this->skelAnime, 28.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_RIDE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_RIDE);
}
} else if (this->animIndex == SK_ANIM_LAUGH_AFTER_SNIFF) {
if (Animation_OnFrame(&this->skelAnime, 2.0f) || Animation_OnFrame(&this->skelAnime, 6.0f) ||
Animation_OnFrame(&this->skelAnime, 12.0f) || Animation_OnFrame(&this->skelAnime, 18.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_MASK_OFF);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_MASK_OFF);
}
} else if ((this->animIndex == SK_ANIM_SNIFF) &&
(Animation_OnFrame(&this->skelAnime, 16.0f) || Animation_OnFrame(&this->skelAnime, 23.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_NOSE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_NOSE);
}
}
@@ -760,31 +760,31 @@ void DmStk_PlaySfxForEndingCutsceneSecondPart(DmStk* this, PlayState* play) {
void DmStk_PlaySfxForClockTowerIntroCutsceneVersion2(DmStk* this, PlayState* play) {
static s32 sMoonCallTimer = 0;
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 40:
func_801A479C(&this->actor.projectedPos, NA_SE_EN_STALKIDS_FLOAT, 80);
break;
case 234:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_TURN);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STAL04_ANGER);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_TURN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STAL04_ANGER);
break;
case 244:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_ROLL);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_ROLL);
break;
case 388:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_STRETCH);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_STRETCH);
break;
}
- if (play->csCtx.frames >= 408) {
+ if (play->csCtx.curFrame >= 408) {
if (sMoonCallTimer < 128) {
if ((sMoonCallTimer & 0x1F) == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STAL20_CALL_MOON);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STAL20_CALL_MOON);
} else if ((sMoonCallTimer & 0x1F) == 16) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STAL20_CALL_MOON2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STAL20_CALL_MOON2);
}
sMoonCallTimer++;
@@ -803,7 +803,7 @@ void DmStk_PlaySfxForCutsceneAfterPlayingOathToOrder(DmStk* this, PlayState* pla
this->oathToOrderCutsceneVoicePos.y = this->actor.projectedPos.y;
this->oathToOrderCutsceneVoicePos.z = this->actor.projectedPos.z;
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 64:
Audio_PlaySfxAtPos(&this->oathToOrderCutsceneVoicePos, NA_SE_EN_STAL06_SURPRISED);
break;
@@ -812,19 +812,19 @@ void DmStk_PlaySfxForCutsceneAfterPlayingOathToOrder(DmStk* this, PlayState* pla
case 332:
case 335:
case 344:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_MASK_OFF);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_MASK_OFF);
break;
case 367:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_BODY_LEV);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_BODY_LEV);
break;
case 470:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_HEADACHE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_HEADACHE);
break;
case 486:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_MASK_OFF);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_MASK_OFF);
Audio_PlaySfxAtPos(&this->oathToOrderCutsceneVoicePos, NA_SE_EN_STAL08_CRY_BIG);
break;
@@ -833,11 +833,11 @@ void DmStk_PlaySfxForCutsceneAfterPlayingOathToOrder(DmStk* this, PlayState* pla
break;
case 590:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_MASK_OFF);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_MASK_OFF);
break;
case 592:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_RIDE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_RIDE);
break;
case 594:
@@ -847,23 +847,23 @@ void DmStk_PlaySfxForCutsceneAfterPlayingOathToOrder(DmStk* this, PlayState* pla
if (1) {}
- if ((play->csCtx.frames >= 62) && (play->csCtx.frames < 273)) {
+ if ((play->csCtx.curFrame >= 62) && (play->csCtx.curFrame < 273)) {
if ((Rand_ZeroOne() < 0.75f) && ((play->state.frames % 2) != 0)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_EARTHQUAKE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_EARTHQUAKE);
}
}
- if ((play->csCtx.frames >= 498) && (play->csCtx.frames < 577)) {
+ if ((play->csCtx.curFrame >= 498) && (play->csCtx.curFrame < 577)) {
if ((play->state.frames % 4) == 0) {
if ((play->state.frames & 4) != 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_BODY_LEV);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_BODY_LEV);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_MASK_OFF);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_MASK_OFF);
}
}
}
- if (play->csCtx.frames >= 290) {
+ if (play->csCtx.curFrame >= 290) {
func_8019F128(NA_SE_EV_KYOJIN_VOICE_SUCCESS - SFX_FLAG);
}
}
@@ -874,18 +874,18 @@ void DmStk_PlaySfxForCutsceneAfterPlayingOathToOrder(DmStk* this, PlayState* pla
* moon, which is slightly longer.
*/
void DmStk_PlaySfxForMoonWarpCutsceneVersion1(DmStk* this, PlayState* play) {
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 551:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_PULLED);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_PULLED);
break;
case 711:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_MASK_OFF);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_MASK_OFF);
break;
case 716:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_MASK_ON);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_ONGND);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_MASK_ON);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_ONGND);
break;
}
}
@@ -896,18 +896,18 @@ void DmStk_PlaySfxForMoonWarpCutsceneVersion1(DmStk* this, PlayState* play) {
* warps to the moon, which is slightly shorter.
*/
void DmStk_PlaySfxForMoonWarpCutsceneVersion2(DmStk* this, PlayState* play) {
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 311:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_PULLED);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_PULLED);
break;
case 365:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_MASK_OFF);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_MASK_OFF);
break;
case 372:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_MASK_ON);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_ONGND);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_MASK_ON);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_ONGND);
break;
}
}
@@ -916,14 +916,14 @@ void DmStk_PlaySfxForMoonWarpCutsceneVersion2(DmStk* this, PlayState* play) {
* Handles sound effects for all cutscenes.
*/
void DmStk_PlaySfxForCutscenes(DmStk* this, PlayState* play) {
- if (play->csCtx.state != 0) {
+ if (play->csCtx.state != CS_STATE_IDLE) {
switch (play->sceneId) {
case SCENE_LOST_WOODS:
if (gSaveContext.sceneLayer == 1) {
DmStk_PlaySfxForIntroCutsceneFirstPart(this, play);
} else if (gSaveContext.sceneLayer == 0) {
DmStk_PlaySfxForIntroCutsceneSecondPart(this, play);
- } else if ((gSaveContext.sceneLayer == 2) && (play->csCtx.currentCsIndex == 0)) {
+ } else if ((gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0)) {
DmStk_PlaySfxForObtainingMajorasMaskCutscene(this, play);
}
break;
@@ -936,9 +936,9 @@ void DmStk_PlaySfxForCutscenes(DmStk* this, PlayState* play) {
case SCENE_OPENINGDAN:
if (gSaveContext.sceneLayer == 0) {
- if (play->csCtx.currentCsIndex == 0) {
+ if (play->csCtx.scriptIndex == 0) {
DmStk_PlaySfxForCurseCutsceneFirstPart(this, play);
- } else if (play->csCtx.currentCsIndex == 1) {
+ } else if (play->csCtx.scriptIndex == 1) {
DmStk_PlaySfxForCurseCutsceneSecondPart(this, play);
}
}
@@ -946,19 +946,19 @@ void DmStk_PlaySfxForCutscenes(DmStk* this, PlayState* play) {
case SCENE_OKUJOU:
if (gSaveContext.sceneLayer == 0) {
- if (play->csCtx.currentCsIndex == 0) {
+ if (play->csCtx.scriptIndex == 0) {
DmStk_PlaySfxForClockTowerIntroCutsceneVersion1(this, play);
- } else if (play->csCtx.currentCsIndex == 1) {
+ } else if (play->csCtx.scriptIndex == 1) {
DmStk_PlaySfxForDroppingOcarinaCutscene(this, play);
- } else if (play->csCtx.currentCsIndex == 2) {
+ } else if (play->csCtx.scriptIndex == 2) {
DmStk_PlaySfxForClockTowerIntroCutsceneVersion2(this, play);
- } else if (play->csCtx.currentCsIndex == 3) {
+ } else if (play->csCtx.scriptIndex == 3) {
DmStk_PlaySfxForCutsceneAfterPlayingOathToOrder(this, play);
}
} else if (gSaveContext.sceneLayer == 2) {
- if (play->csCtx.currentCsIndex == 0) {
+ if (play->csCtx.scriptIndex == 0) {
DmStk_PlaySfxForMoonWarpCutsceneVersion1(this, play);
- } else if (play->csCtx.currentCsIndex == 1) {
+ } else if (play->csCtx.scriptIndex == 1) {
DmStk_PlaySfxForMoonWarpCutsceneVersion2(this, play);
}
}
@@ -966,15 +966,15 @@ void DmStk_PlaySfxForCutscenes(DmStk* this, PlayState* play) {
case SCENE_00KEIKOKU:
if (gSaveContext.sceneLayer == 3) {
- if (play->csCtx.currentCsIndex == 0) {
+ if (play->csCtx.scriptIndex == 0) {
DmStk_PlaySfxForShiveringInRainCutscene(this, play);
- } else if (play->csCtx.currentCsIndex == 2) {
+ } else if (play->csCtx.scriptIndex == 2) {
DmStk_PlaySfxForPlayingWithFairiesCutscene(this, play);
}
} else if (gSaveContext.sceneLayer == 7) {
- if (play->csCtx.currentCsIndex == 0) {
+ if (play->csCtx.scriptIndex == 0) {
DmStk_PlaySfxForEndingCutsceneFirstPart(this, play);
- } else if (play->csCtx.currentCsIndex == 1) {
+ } else if (play->csCtx.scriptIndex == 1) {
DmStk_PlaySfxForEndingCutsceneSecondPart(this, play);
}
}
@@ -984,24 +984,24 @@ void DmStk_PlaySfxForCutscenes(DmStk* this, PlayState* play) {
if (this->animIndex == SK_ANIM_WALK) {
if (Animation_OnFrame(&this->skelAnime, 2.0f) || Animation_OnFrame(&this->skelAnime, 6.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_WALK);
}
} else if (this->animIndex == SK_ANIM_SEARCH_LINK) {
if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 13.0f) ||
Animation_OnFrame(&this->skelAnime, 20.0f) || Animation_OnFrame(&this->skelAnime, 27.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_PL_CALM_HIT);
+ Actor_PlaySfx(&this->actor, NA_SE_PL_CALM_HIT);
}
} else if (this->animIndex == SK_ANIM_PICK_UP_OCARINA_AND_START_PLAYING) {
if (Animation_OnFrame(&this->skelAnime, 3.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_PL_PUT_OUT_ITEM);
+ Actor_PlaySfx(&this->actor, NA_SE_PL_PUT_OUT_ITEM);
}
} else if (this->animIndex == SK_ANIM_PLAY_OCARINA_AND_LAUGH) {
if (Animation_OnFrame(&this->skelAnime, 14.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_UNSKILLFUL_OCARINA);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_UNSKILLFUL_OCARINA);
}
if (Animation_OnFrame(&this->skelAnime, 45.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STAL01_LAUGH);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STAL01_LAUGH);
}
}
}
@@ -1017,16 +1017,16 @@ void DmStk_Init(Actor* thisx, PlayState* play) {
this->objectStk2ObjectIndex = Object_GetIndex(&play->objectCtx, OBJECT_STK2);
this->objectStk3ObjectIndex = Object_GetIndex(&play->objectCtx, OBJECT_STK3);
if (this->objectStkObjectIndex < 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
this->tatlMessageTimer = 0;
this->deflectCount = 0;
this->maskType = SK_MASK_TYPE_NORMAL;
this->animIndex = SK_ANIM_IDLE;
- this->fogR = play->lightCtx.unk7;
- this->fogG = play->lightCtx.unk8;
- this->fogB = play->lightCtx.unk9;
+ this->fogR = play->lightCtx.fogColor.r;
+ this->fogG = play->lightCtx.fogColor.g;
+ this->fogB = play->lightCtx.fogColor.b;
if ((play->sceneId == SCENE_LOST_WOODS) && (gSaveContext.sceneLayer == 1)) {
this->alpha = 0;
@@ -1052,7 +1052,7 @@ void DmStk_Init(Actor* thisx, PlayState* play) {
R_MOON_CRASH_TIMER_X = 115;
}
- if (gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) {
+ if (gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] == ITEM_NONE) {
sCylinderInit.base.colType = COLTYPE_WOOD;
this->actionFunc = DmStk_ClockTower_StartIntroCutsceneVersion1;
} else {
@@ -1090,7 +1090,7 @@ void DmStk_Init(Actor* thisx, PlayState* play) {
} else if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 0)) {
if (!(play->actorCtx.flags & ACTORCTX_FLAG_1)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
this->maskType = SK_MASK_TYPE_GLOWING_EYES;
@@ -1102,7 +1102,7 @@ void DmStk_Init(Actor* thisx, PlayState* play) {
this->actionFunc = DmStk_WaitForTelescope;
} else {
if ((play->sceneId == SCENE_LOST_WOODS) && !Cutscene_IsPlaying(play)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
this->maskType = SK_MASK_TYPE_GLOWING_EYES;
@@ -1119,7 +1119,7 @@ void DmStk_Init(Actor* thisx, PlayState* play) {
this->fadeOutTimer = 0;
this->alpha = this->alpha;
this->actor.targetArrowOffset = 1100.0f;
- this->csAction = 99;
+ this->cueId = 99;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f);
SkelAnime_InitFlex(play, &this->skelAnime, &gSkullKidSkel, NULL, NULL, NULL, 0);
DmStk_ChangeAnim(this, play, &this->skelAnime, &sAnimationInfo[this->animIndex], 0);
@@ -1127,7 +1127,7 @@ void DmStk_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->actor, 0.01f);
- if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 3) && (play->csCtx.currentCsIndex > 0)) {
+ if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 3) && (play->csCtx.scriptIndex > 0)) {
play->envCtx.unk_17 = 15;
play->envCtx.unk_18 = 15;
}
@@ -1149,12 +1149,12 @@ void DmStk_DoNothing(DmStk* this, PlayState* play) {
void DmStk_WaitForTelescope(DmStk* this, PlayState* play) {
Vec3f screenPos;
- if (!(gSaveContext.save.weekEventReg[74] & 0x20)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_74_20)) {
Play_GetScreenPos(play, &this->actor.world.pos, &screenPos);
if (play->view.fovy < 25.0f) {
if ((screenPos.x >= 70.0f) && (screenPos.x < (SCREEN_WIDTH - 70.0f)) && (screenPos.y >= 30.0f) &&
(screenPos.y < (SCREEN_HEIGHT - 30.0f))) {
- func_800FE484();
+ Environment_StopTime();
this->actionFunc = DmStk_StartTelescopeCutscene;
}
}
@@ -1165,40 +1165,40 @@ void DmStk_WaitForTelescope(DmStk* this, PlayState* play) {
* Plays the cutscene in the telescope where the Moon's Tear falls.
*/
void DmStk_StartTelescopeCutscene(DmStk* this, PlayState* play) {
- s16 dayOneAndTwoCutscene = this->actor.cutscene;
- s16 dayThreeCutscene = ActorCutscene_GetAdditionalCutscene(dayOneAndTwoCutscene);
- s16 finalHoursCutscene = ActorCutscene_GetAdditionalCutscene(dayThreeCutscene);
- s16 cutscene;
+ s16 dayOneAndTwoCsId = this->actor.csId;
+ s16 dayThreeCsId = CutsceneManager_GetAdditionalCsId(dayOneAndTwoCsId);
+ s16 finalHoursCsId = CutsceneManager_GetAdditionalCsId(dayThreeCsId);
+ s16 csId;
if (gSaveContext.save.day < 3) {
- cutscene = dayOneAndTwoCutscene;
- } else if ((gSaveContext.save.weekEventReg[8] & 0x40) ||
+ csId = dayOneAndTwoCsId;
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40) ||
((CURRENT_DAY == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0)))) {
- cutscene = finalHoursCutscene;
+ csId = finalHoursCsId;
} else {
- cutscene = dayThreeCutscene;
+ csId = dayThreeCsId;
}
- if (ActorCutscene_GetCanPlayNext(cutscene)) {
- ActorCutscene_Start(cutscene, &this->actor);
- func_800FE498();
+ if (CutsceneManager_IsNext(csId)) {
+ CutsceneManager_Start(csId, &this->actor);
+ Environment_StartTime();
this->actionFunc = DmStk_DoNothing;
} else {
- ActorCutscene_SetIntentToPlay(cutscene);
+ CutsceneManager_Queue(csId);
}
}
void DmStk_ClockTower_StartIntroCutsceneVersion1(DmStk* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(9)) {
- ActorCutscene_Start(9, &this->actor);
+ if (CutsceneManager_IsNext(9)) {
+ CutsceneManager_Start(9, &this->actor);
this->actionFunc = DmStk_ClockTower_WaitForIntroCutsceneVersion1ToEnd;
} else {
- ActorCutscene_SetIntentToPlay(9);
+ CutsceneManager_Queue(9);
}
}
void DmStk_ClockTower_WaitForIntroCutsceneVersion1ToEnd(DmStk* this, PlayState* play) {
- if (play->csCtx.state == 0) {
+ if (play->csCtx.state == CS_STATE_IDLE) {
this->animIndex = SK_ANIM_CALL_DOWN_MOON_LOOP;
this->handType = SK_HAND_TYPE_HOLDING_OCARINA;
DmStk_ChangeAnim(this, play, &this->skelAnime, &sAnimationInfo[this->animIndex], 0);
@@ -1207,16 +1207,16 @@ void DmStk_ClockTower_WaitForIntroCutsceneVersion1ToEnd(DmStk* this, PlayState*
}
void DmStk_ClockTower_StartIntroCutsceneVersion2(DmStk* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(11)) {
- ActorCutscene_Start(11, &this->actor);
+ if (CutsceneManager_IsNext(11)) {
+ CutsceneManager_Start(11, &this->actor);
this->actionFunc = DmStk_ClockTower_WaitForIntroCutsceneVersion2ToEnd;
} else {
- ActorCutscene_SetIntentToPlay(11);
+ CutsceneManager_Queue(11);
}
}
void DmStk_ClockTower_WaitForIntroCutsceneVersion2ToEnd(DmStk* this, PlayState* play) {
- if (play->csCtx.state == 0) {
+ if (play->csCtx.state == CS_STATE_IDLE) {
this->animIndex = SK_ANIM_FLOATING_ARMS_CROSSED;
DmStk_ChangeAnim(this, play, &this->skelAnime, &sAnimationInfo[this->animIndex], 0);
this->actionFunc = DmStk_ClockTower_Idle;
@@ -1224,21 +1224,21 @@ void DmStk_ClockTower_WaitForIntroCutsceneVersion2ToEnd(DmStk* this, PlayState*
}
void DmStk_ClockTower_StartDropOcarinaCutscene(DmStk* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(10)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_DAMAGE);
- ActorCutscene_Start(10, &this->actor);
+ if (CutsceneManager_IsNext(10)) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_DAMAGE);
+ CutsceneManager_Start(10, &this->actor);
this->actor.shape.rot.x = 0;
this->actor.world.rot.x = this->actor.shape.rot.x;
this->actor.shape.rot.y = this->actor.shape.rot.x;
this->actor.world.rot.y = this->actor.shape.rot.x;
this->actionFunc = DmStk_ClockTower_WaitForDropOcarinaCutsceneToEnd;
} else {
- ActorCutscene_SetIntentToPlay(10);
+ CutsceneManager_Queue(10);
}
}
void DmStk_ClockTower_WaitForDropOcarinaCutsceneToEnd(DmStk* this, PlayState* play) {
- if ((play->csCtx.state != 0) && (play->csCtx.frames > 20)) {
+ if ((play->csCtx.state != CS_STATE_IDLE) && (play->csCtx.curFrame > 20)) {
this->actionFunc = DmStk_ClockTower_Idle;
}
}
@@ -1254,7 +1254,7 @@ void DmStk_ClockTower_AdjustHeightAndRotation(DmStk* this, PlayState* play) {
sin = Math_SinS(this->bobPhase) * 10.0f;
Math_SmoothStepToF(&this->actor.world.pos.y, 160.0f + sin, 0.2f, 1.0f, 0.0001f);
- this->actor.world.rot.y = Actor_YawBetweenActors(&this->actor, &player->actor);
+ this->actor.world.rot.y = Actor_WorldYawTowardActor(&this->actor, &player->actor);
this->actor.shape.rot.y = this->actor.world.rot.y;
this->actor.world.rot.x = 0x1B58;
@@ -1272,7 +1272,7 @@ void DmStk_ClockTower_DeflectHit(DmStk* this, PlayState* play) {
this->deflectCount++;
if (this->deflectCount >= 3) {
this->deflectCount = 0;
- if (!(player->stateFlags2 & 0x8000000)) {
+ if (!(player->stateFlags2 & PLAYER_STATE2_8000000)) {
// That won't do you any good
Message_StartTextbox(play, 0x2013, &this->actor);
}
@@ -1280,7 +1280,7 @@ void DmStk_ClockTower_DeflectHit(DmStk* this, PlayState* play) {
this->animIndex = SK_ANIM_DEFLECT_ATTACK;
DmStk_ChangeAnim(this, play, &this->skelAnime, &sAnimationInfo[this->animIndex], 0);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_DOWN_K);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_DOWN_K);
this->actionFunc = DmStk_ClockTower_WaitForDeflectionToEnd;
}
@@ -1307,21 +1307,21 @@ void DmStk_ClockTower_WaitForDeflectionToEnd(DmStk* this, PlayState* play) {
*/
void DmStk_UpdateCutscenes(DmStk* this, PlayState* play) {
s32 pad;
- s32 actorActionIndex;
+ s32 cueChannel;
- if (Cutscene_CheckActorAction(play, 107)) {
- actorActionIndex = Cutscene_GetActorActionIndex(play, 107);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_107)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_107);
- if (play->csCtx.frames == play->csCtx.actorActions[actorActionIndex]->startFrame) {
- if (this->csAction != play->csCtx.actorActions[actorActionIndex]->action) {
- this->csAction = play->csCtx.actorActions[actorActionIndex]->action;
+ if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) {
+ if (this->cueId != play->csCtx.actorCues[cueChannel]->id) {
+ this->cueId = play->csCtx.actorCues[cueChannel]->id;
if (play->sceneId == SCENE_CLOCKTOWER) {
this->handType = SK_HAND_TYPE_HOLDING_FLUTE;
} else {
this->handType = SK_HAND_TYPE_DEFAULT;
}
- switch (play->csCtx.actorActions[actorActionIndex]->action) {
+ switch (play->csCtx.actorCues[cueChannel]->id) {
case 0:
case 1:
this->animIndex = SK_ANIM_IDLE;
@@ -1402,7 +1402,7 @@ void DmStk_UpdateCutscenes(DmStk* this, PlayState* play) {
case 22:
this->animIndex = SK_ANIM_PLAY_OCARINA_WHILE_FLOATING;
- if (gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) {
+ if (gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] == ITEM_NONE) {
this->handType = SK_HAND_TYPE_HOLDING_OCARINA;
}
break;
@@ -1414,25 +1414,25 @@ void DmStk_UpdateCutscenes(DmStk* this, PlayState* play) {
case 24:
this->animIndex = SK_ANIM_CALL_DOWN_MOON_START;
- if (gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) {
+ if (gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] == ITEM_NONE) {
this->handType = SK_HAND_TYPE_HOLDING_OCARINA;
}
break;
case 25:
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
break;
case 26:
this->animIndex = SK_ANIM_SMACK_FAIRY_START;
- if (gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) {
+ if (gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] == ITEM_NONE) {
this->handType = SK_HAND_TYPE_HOLDING_OCARINA;
}
break;
case 27:
this->animIndex = SK_ANIM_HIT_BY_BUBBLE;
- if (gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) {
+ if (gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] == ITEM_NONE) {
this->handType = SK_HAND_TYPE_HOLDING_OCARINA;
}
break;
@@ -1581,9 +1581,9 @@ void DmStk_UpdateCutscenes(DmStk* this, PlayState* play) {
}
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, actorActionIndex);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
} else {
- this->csAction = 99;
+ this->cueId = 99;
}
if (this->fadeInState == SK_FADE_IN_STATE_START) {
@@ -1594,9 +1594,9 @@ void DmStk_UpdateCutscenes(DmStk* this, PlayState* play) {
this->fadeInState++;
}
- this->fogR = play->lightCtx.unk7 * this->fogScale;
- this->fogG = play->lightCtx.unk8 * this->fogScale;
- this->fogB = play->lightCtx.unk9 * this->fogScale;
+ this->fogR = play->lightCtx.fogColor.r * this->fogScale;
+ this->fogG = play->lightCtx.fogColor.g * this->fogScale;
+ this->fogB = play->lightCtx.fogColor.b * this->fogScale;
} else if (this->fadeInState == SK_FADE_IN_STATE_INCREASE_FOG) {
if (this->fogN < 996) {
this->fogN += 10;
@@ -1630,9 +1630,9 @@ void DmStk_UpdateCutscenes(DmStk* this, PlayState* play) {
if (this->alpha < 0) {
this->alpha = 0;
this->fadeOutState = SK_FADE_OUT_STATE_NONE;
- gSaveContext.save.weekEventReg[12] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_12_04);
if (!(play->actorCtx.flags & ACTORCTX_FLAG_1)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
this->shouldDraw = false;
}
@@ -1714,13 +1714,13 @@ void DmStk_UpdateCollision(DmStk* this, PlayState* play) {
void DmStk_ClockTower_IdleWithOcarina(DmStk* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (play->csCtx.state == 0) {
+ if (play->csCtx.state == CS_STATE_IDLE) {
DmStk_ClockTower_AdjustHeightAndRotation(this, play);
this->actor.flags |= ACTOR_FLAG_1;
this->tatlMessageTimer++;
if (this->tatlMessageTimer > 800) {
this->tatlMessageTimer = 0;
- if (!(player->stateFlags2 & 0x8000000)) {
+ if (!(player->stateFlags2 & PLAYER_STATE2_8000000)) {
// Why are you just standing around?
Message_StartTextbox(play, 0x2014, &this->actor);
}
@@ -1739,7 +1739,7 @@ void DmStk_ClockTower_IdleWithOcarina(DmStk* this, PlayState* play) {
* If he is hit in this state, he will just deflect the attack.
*/
void DmStk_ClockTower_Idle(DmStk* this, PlayState* play) {
- if (play->csCtx.state == 0) {
+ if (play->csCtx.state == CS_STATE_IDLE) {
DmStk_ClockTower_AdjustHeightAndRotation(this, play);
this->actor.flags |= ACTOR_FLAG_1;
@@ -1794,17 +1794,17 @@ void DmStk_Update(Actor* thisx, PlayState* play) {
break;
case SK_DEKU_PIPES_CS_STATE_PLAYER_USED_OCARINA:
- if (ActorCutscene_GetCanPlayNext(16)) {
+ if (CutsceneManager_IsNext(16)) {
this->dekuPipesCutsceneState = SK_DEKU_PIPES_CS_STATE_START;
- ActorCutscene_Start(16, &this->actor);
+ CutsceneManager_Start(16, &this->actor);
this->actionFunc = DmStk_ClockTower_Idle;
} else {
- ActorCutscene_SetIntentToPlay(16);
+ CutsceneManager_Queue(16);
}
break;
case SK_DEKU_PIPES_CS_STATE_START:
- if (play->csCtx.state == 0) {
+ if (play->csCtx.state == CS_STATE_IDLE) {
this->dekuPipesCutsceneState = SK_DEKU_PIPES_CS_STATE_END;
}
break;
@@ -1814,16 +1814,17 @@ void DmStk_Update(Actor* thisx, PlayState* play) {
// Skull Kid is always loaded in the scene, even if he isn't visible, hence why time always passes.
if ((play->actorCtx.flags & ACTORCTX_FLAG_1) && (play->msgCtx.msgMode != 0) &&
(play->msgCtx.currentTextId == 0x5E6) && !FrameAdvance_IsEnabled(&play->state) &&
- (play->transitionTrigger == TRANS_TRIGGER_OFF) && (ActorCutscene_GetCurrentIndex() == -1) &&
- (play->csCtx.state == 0)) {
- gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)REG(15);
- if (REG(15) != 0) {
- gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.daySpeed);
+ (play->transitionTrigger == TRANS_TRIGGER_OFF) && (CutsceneManager_GetCurrentCsId() == CS_ID_NONE) &&
+ (play->csCtx.state == CS_STATE_IDLE)) {
+ gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)R_TIME_SPEED;
+ if (R_TIME_SPEED != 0) {
+ gSaveContext.save.time =
+ ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.timeSpeedOffset);
}
}
}
- if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 3) && (play->csCtx.currentCsIndex > 0)) {
+ if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 3) && (play->csCtx.scriptIndex > 0)) {
play->envCtx.unk_17 = 15;
play->envCtx.unk_18 = 15;
}
@@ -1887,14 +1888,14 @@ void DmStk_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot
case SK_MASK_TYPE_NORMAL:
if ((play->sceneId == SCENE_LOST_WOODS) && (gSaveContext.sceneLayer == 1) &&
- (play->csCtx.frames < 1400)) {
+ (play->csCtx.curFrame < 1400)) {
if (this->fogN == this->fogF) {
this->fogF = this->fogN;
}
POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, this->fogR, this->fogG, this->fogB, this->fogA,
this->fogN, this->fogF);
gSPDisplayList(POLY_OPA_DISP++, gSkullKidMajorasMask1DL);
- POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP);
+ POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
} else {
gSPDisplayList(POLY_OPA_DISP++, gSkullKidMajorasMask1DL);
}
@@ -1904,8 +1905,8 @@ void DmStk_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot
gSPDisplayList(POLY_OPA_DISP++, gSkullKidMajorasMask1DL);
gSPDisplayList(POLY_OPA_DISP++, gSkullKidMajorasMaskEyesDL);
- if (Cutscene_CheckActorAction(play, 513) &&
- (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 513)]->action == 2) &&
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_513) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_513)]->id == 2) &&
(this->objectStk2ObjectIndex >= 0)) {
Matrix_Push();
Matrix_Scale(2.0f, 2.0f, 2.0f, MTXMODE_APPLY);
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 ffea61265..0f58c534d 100644
--- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h
+++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h
@@ -41,7 +41,7 @@ typedef struct DmStk {
/* 0x32E */ u8 fadeInState;
/* 0x32F */ u8 fadeOutState;
/* 0x330 */ s32 fadeOutTimer;
- /* 0x334 */ u8 csAction;
+ /* 0x334 */ u8 cueId;
/* 0x335 */ u8 hasBeenHit; // set but never used
/* 0x336 */ s8 objectStkObjectIndex;
/* 0x337 */ s8 objectStk2ObjectIndex;
@@ -51,6 +51,4 @@ typedef struct DmStk {
/* 0x33B */ u8 shouldDraw;
} DmStk; // size = 0x33C
-extern const ActorInit Dm_Stk_InitVars;
-
#endif // Z_DM_STK_H
diff --git a/src/overlays/actors/ovl_Dm_Tag/overlay.cfg b/src/overlays/actors/ovl_Dm_Tag/overlay.cfg
deleted file mode 100644
index e1895969e..000000000
--- a/src/overlays/actors/ovl_Dm_Tag/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Dm_Tag
-z_dm_tag.c
diff --git a/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c b/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c
index 2c8bf046f..fd945787d 100644
--- a/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c
+++ b/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c
@@ -18,7 +18,7 @@ void func_80C229AC(DmTag* this, PlayState* play);
void func_80C229EC(DmTag* this, PlayState* play);
void func_80C229FC(DmTag* this, PlayState* play);
-const ActorInit Dm_Tag_InitVars = {
+ActorInit Dm_Tag_InitVars = {
ACTOR_DM_TAG,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -65,37 +65,37 @@ Actor* func_80C22350(DmTag* this, PlayState* play, u8 actorCat, s16 actorId) {
return foundActor;
}
-s32 func_80C22400(DmTag* this, s16 arg1) {
+s32 func_80C22400(DmTag* this, s16 csId) {
s32 ret = false;
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(arg1);
- } else if (ActorCutscene_GetCanPlayNext(arg1)) {
- ActorCutscene_StartAndSetUnkLinkFields(arg1, &this->actor);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(csId);
+ } else if (CutsceneManager_IsNext(csId)) {
+ CutsceneManager_StartWithPlayerCs(csId, &this->actor);
ret = true;
} else {
- ActorCutscene_SetIntentToPlay(arg1);
+ CutsceneManager_Queue(csId);
}
return ret;
}
-s16 func_80C2247C(DmTag* this, s32 arg1) {
+s16 func_80C2247C(DmTag* this, s32 numCutscenes) {
s32 i;
- s16 cs = this->actor.cutscene;
+ s16 csId = this->actor.csId;
- for (i = 0; i < arg1; i++) {
- cs = ActorCutscene_GetAdditionalCutscene(cs);
+ for (i = 0; i < numCutscenes; i++) {
+ csId = CutsceneManager_GetAdditionalCsId(csId);
}
- return cs;
+ return csId;
}
s32 func_80C224D8(DmTag* this, PlayState* play) {
s32 pad;
Actor* sp30;
Actor* sp2C;
- s16 sp2A = this->actor.cutscene;
+ s16 csId = this->actor.csId;
s32 ret = false;
sp30 = func_80C22350(this, play, ACTORCAT_NPC, ACTOR_EN_AN);
@@ -103,9 +103,9 @@ s32 func_80C224D8(DmTag* this, PlayState* play) {
switch (this->unk_1A4) {
case 0:
- if (func_80C22400(this, sp2A)) {
+ if (func_80C22400(this, csId)) {
if ((sp2C != NULL) && (sp2C->update != NULL)) {
- Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)), sp2C);
+ Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)), sp2C);
}
this->unk_1A4++;
ret = true;
@@ -114,7 +114,7 @@ s32 func_80C224D8(DmTag* this, PlayState* play) {
case 1:
if ((sp30 != NULL) && (sp30->update != NULL)) {
- Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(func_80C2247C(this, 0))),
+ Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(func_80C2247C(this, 0))),
sp30);
}
this->unk_1A4++;
@@ -122,7 +122,7 @@ s32 func_80C224D8(DmTag* this, PlayState* play) {
break;
case 2:
- ActorCutscene_Stop(func_80C2247C(this, 0));
+ CutsceneManager_Stop(func_80C2247C(this, 0));
if (func_80C22400(this, func_80C2247C(this, 1))) {
this->unk_1A4++;
ret = true;
@@ -130,7 +130,7 @@ s32 func_80C224D8(DmTag* this, PlayState* play) {
break;
case 3:
- ActorCutscene_Stop(func_80C2247C(this, 1));
+ CutsceneManager_Stop(func_80C2247C(this, 1));
if (func_80C22400(this, func_80C2247C(this, 2))) {
this->unk_1A4++;
ret = true;
@@ -138,7 +138,7 @@ s32 func_80C224D8(DmTag* this, PlayState* play) {
break;
case 4:
- ActorCutscene_Stop(func_80C2247C(this, 2));
+ CutsceneManager_Stop(func_80C2247C(this, 2));
if (func_80C22400(this, func_80C2247C(this, 3))) {
this->unk_1A4++;
ret = true;
@@ -146,7 +146,7 @@ s32 func_80C224D8(DmTag* this, PlayState* play) {
break;
case 5:
- ActorCutscene_Stop(func_80C2247C(this, 3));
+ CutsceneManager_Stop(func_80C2247C(this, 3));
if (func_80C22400(this, func_80C2247C(this, 4))) {
this->unk_1A4++;
ret = true;
@@ -158,8 +158,8 @@ s32 func_80C224D8(DmTag* this, PlayState* play) {
play->nextEntrance = ENTRANCE(STOCK_POT_INN, 5);
gSaveContext.nextCutsceneIndex = 0;
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_02;
- gSaveContext.nextTransitionType = TRANS_TYPE_06;
+ play->transitionType = TRANS_TYPE_FADE_BLACK;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK_SLOW;
this->unk_1A4++;
break;
}
@@ -172,8 +172,8 @@ s32 func_80C227E8(DmTag* this, PlayState* play) {
play->nextEntrance = ENTRANCE(STOCK_POT_INN, 4);
gSaveContext.nextCutsceneIndex = 0;
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_02;
- gSaveContext.nextTransitionType = TRANS_TYPE_06;
+ play->transitionType = TRANS_TYPE_FADE_BLACK;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK_SLOW;
this->unk_1A4++;
}
return false;
@@ -230,8 +230,8 @@ void DmTag_Init(Actor* thisx, PlayState* play) {
DmTag* this = (DmTag*)thisx;
Player* player = GET_PLAYER(play);
- if (gSaveContext.save.weekEventReg[85] & 4) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_85_04)) {
+ Actor_Kill(&this->actor);
return;
}
@@ -243,7 +243,7 @@ void DmTag_Init(Actor* thisx, PlayState* play) {
this->actor.flags &= ~ACTOR_FLAG_1;
this->actionFunc = func_80C229EC;
} else if (this->actor.room == 2) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
this->actor.targetMode = 1;
this->unk_18E = 1;
diff --git a/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.h b/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.h
index d68cd38d4..eec741df6 100644
--- a/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.h
+++ b/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.h
@@ -21,6 +21,4 @@ typedef struct DmTag {
/* 0x1A8 */ DmTagMsgEventFunc msgEventCallback;
} DmTag; // size = 0x1AC
-extern const ActorInit Dm_Tag_InitVars;
-
#endif // Z_DM_TAG_H
diff --git a/src/overlays/actors/ovl_Dm_Tsg/overlay.cfg b/src/overlays/actors/ovl_Dm_Tsg/overlay.cfg
deleted file mode 100644
index cf5632fbb..000000000
--- a/src/overlays/actors/ovl_Dm_Tsg/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Dm_Tsg
-z_dm_tsg.c
diff --git a/src/overlays/actors/ovl_Dm_Tsg/z_dm_tsg.c b/src/overlays/actors/ovl_Dm_Tsg/z_dm_tsg.c
index ab0aca40e..7dec0540e 100644
--- a/src/overlays/actors/ovl_Dm_Tsg/z_dm_tsg.c
+++ b/src/overlays/actors/ovl_Dm_Tsg/z_dm_tsg.c
@@ -16,7 +16,7 @@ void DmTsg_Update(Actor* thisx, PlayState* play);
void DmTsg_Draw(Actor* thisx, PlayState* play);
#if 0
-const ActorInit Dm_Tsg_InitVars = {
+ActorInit Dm_Tsg_InitVars = {
ACTOR_DM_TSG,
ACTORCAT_ITEMACTION,
FLAGS,
diff --git a/src/overlays/actors/ovl_Dm_Tsg/z_dm_tsg.h b/src/overlays/actors/ovl_Dm_Tsg/z_dm_tsg.h
index e1263ef2d..e8e62b6c2 100644
--- a/src/overlays/actors/ovl_Dm_Tsg/z_dm_tsg.h
+++ b/src/overlays/actors/ovl_Dm_Tsg/z_dm_tsg.h
@@ -10,6 +10,4 @@ typedef struct DmTsg {
/* 0x144 */ char unk_144[0x7DC];
} DmTsg; // size = 0x920
-extern const ActorInit Dm_Tsg_InitVars;
-
#endif // Z_DM_TSG_H
diff --git a/src/overlays/actors/ovl_Dm_Zl/overlay.cfg b/src/overlays/actors/ovl_Dm_Zl/overlay.cfg
deleted file mode 100644
index 541103127..000000000
--- a/src/overlays/actors/ovl_Dm_Zl/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Dm_Zl
-z_dm_zl.c
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 47706cb9f..4d2b4a54a 100644
--- a/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c
+++ b/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c
@@ -17,7 +17,7 @@ void DmZl_Draw(Actor* thisx, PlayState* play);
void DmZl_DoNothing(DmZl* this, PlayState* play);
-const ActorInit Dm_Zl_InitVars = {
+ActorInit Dm_Zl_InitVars = {
ACTOR_DM_ZL,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -131,14 +131,14 @@ void DmZl_DoNothing(DmZl* this, PlayState* play) {
}
void DmZl_UpdateCutscene(DmZl* this, PlayState* play) {
- s32 actionIndex;
+ s32 cueChannel; // reused as animIndex
- if (Cutscene_CheckActorAction(play, 0x66)) {
- actionIndex = Cutscene_GetActorActionIndex(play, 0x66);
- if (play->csCtx.frames == play->csCtx.actorActions[actionIndex]->startFrame) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_102)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_102);
+ if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) {
s16 nextAnimIndex = ZELDA_ANIM_FACING_AWAY;
- switch (play->csCtx.actorActions[actionIndex]->action) {
+ switch (play->csCtx.actorCues[cueChannel]->id) {
default:
case 1:
break;
@@ -159,14 +159,14 @@ void DmZl_UpdateCutscene(DmZl* this, PlayState* play) {
}
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
}
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- actionIndex = this->animIndex;
+ cueChannel = this->animIndex;
- if ((actionIndex == ZELDA_ANIM_TURNING_TOWARD_PLAYER) || (actionIndex == ZELDA_ANIM_GIVING_OCARINA_START) ||
- (actionIndex == ZELDA_ANIM_PLAYING_OCARINA_START)) {
+ if ((cueChannel == ZELDA_ANIM_TURNING_TOWARD_PLAYER) || (cueChannel == ZELDA_ANIM_GIVING_OCARINA_START) ||
+ (cueChannel == ZELDA_ANIM_PLAYING_OCARINA_START)) {
// these animations don't loop at the end, they lead into the next animation
this->animIndex++;
DmZl_ChangeAnimation(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
diff --git a/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.h b/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.h
index c267d9ae9..cae6ce74e 100644
--- a/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.h
+++ b/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.h
@@ -26,6 +26,4 @@ typedef struct DmZl {
/* 0x2BC */ UNK_TYPE1 pad2BC[0x18]; // unused by DmZl
} DmZl; // size = 0x2D4
-extern const ActorInit Dm_Zl_InitVars;
-
#endif // Z_DM_ZL_H
diff --git a/src/overlays/actors/ovl_Door_Ana/overlay.cfg b/src/overlays/actors/ovl_Door_Ana/overlay.cfg
deleted file mode 100644
index cb3d1a5fd..000000000
--- a/src/overlays/actors/ovl_Door_Ana/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Door_Ana
-z_door_ana.c
diff --git a/src/overlays/actors/ovl_Door_Ana/z_door_ana.c b/src/overlays/actors/ovl_Door_Ana/z_door_ana.c
index 173c3ea52..c889de158 100644
--- a/src/overlays/actors/ovl_Door_Ana/z_door_ana.c
+++ b/src/overlays/actors/ovl_Door_Ana/z_door_ana.c
@@ -20,7 +20,7 @@ void DoorAna_WaitClosed(DoorAna* this, PlayState* play);
void DoorAna_WaitOpen(DoorAna* this, PlayState* play);
void DoorAna_GrabLink(DoorAna* this, PlayState* play);
-const ActorInit Door_Ana_InitVars = {
+ActorInit Door_Ana_InitVars = {
ACTOR_DOOR_ANA,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -100,7 +100,7 @@ void DoorAna_WaitClosed(DoorAna* this, PlayState* play) {
if (grottoType == DOORANA_TYPE_HIDDEN_STORMS) {
//! @bug Implementation from OoT is not updated for MM, grotto does not open on Song of Storms
- if (this->actor.xyzDistToPlayerSq < SQ(200.0f) && EnvFlags_Get(play, 5)) {
+ if (this->actor.xyzDistToPlayerSq < SQ(200.0f) && CutsceneFlags_Get(play, 5)) {
grottoIsOpen = true;
this->actor.flags &= ~ACTOR_FLAG_10; // always update OFF
}
@@ -122,7 +122,7 @@ void DoorAna_WaitClosed(DoorAna* this, PlayState* play) {
play_sound(NA_SE_SY_CORRECT_CHIME);
}
- func_800B8C50(&this->actor, play);
+ Actor_SetClosestSecretDistance(&this->actor, play);
}
void DoorAna_WaitOpen(DoorAna* this, PlayState* play) {
@@ -131,7 +131,8 @@ void DoorAna_WaitOpen(DoorAna* this, PlayState* play) {
if (Math_StepToF(&this->actor.scale.x, 0.01f, 0.001f)) {
if ((this->actor.targetMode != 0) && (play->transitionTrigger == TRANS_TRIGGER_OFF) &&
- (play->transitionMode == TRANS_MODE_OFF) && (player->stateFlags1 & 0x80000000) && (player->unk_AE7 == 0)) {
+ (play->transitionMode == TRANS_MODE_OFF) && (player->stateFlags1 & PLAYER_STATE1_80000000) &&
+ (player->unk_AE7 == 0)) {
if (grottoType == DOORANA_TYPE_VISIBLE_SCENE_EXIT) {
s32 exitIndex = DOORANA_GET_EXIT_INDEX(&this->actor);
@@ -140,7 +141,7 @@ void DoorAna_WaitOpen(DoorAna* this, PlayState* play) {
} else {
s32 destinationIdx = DOORANA_GET_ENTRANCE(&this->actor);
- Play_SetupRespawnPoint(&play->state, RESPAWN_MODE_UNK_3, 0x4FF);
+ Play_SetupRespawnPoint(&play->state, RESPAWN_MODE_UNK_3, PLAYER_PARAMS(0xFF, PLAYER_INITMODE_4));
gSaveContext.respawn[RESPAWN_MODE_UNK_3].pos.y = this->actor.world.pos.y;
gSaveContext.respawn[RESPAWN_MODE_UNK_3].yaw = this->actor.home.rot.y;
@@ -157,10 +158,10 @@ void DoorAna_WaitOpen(DoorAna* this, PlayState* play) {
DoorAna_SetupAction(this, DoorAna_GrabLink);
- } else if (!Play_InCsMode(play) && !(player->stateFlags1 & 0x08800000) &&
+ } else if (!Play_InCsMode(play) && !(player->stateFlags1 & (PLAYER_STATE1_8000000 | PLAYER_STATE1_800000)) &&
(this->actor.xzDistToPlayer <= 20.0f) && (this->actor.playerHeightRel >= -50.0f) &&
(this->actor.playerHeightRel <= 15.0f)) {
- player->stateFlags1 |= 0x80000000;
+ player->stateFlags1 |= PLAYER_STATE1_80000000;
this->actor.targetMode = 1;
} else {
@@ -175,11 +176,11 @@ void DoorAna_GrabLink(DoorAna* this, PlayState* play) {
Player* player;
s8 pad[2];
- if (ActorCutscene_GetCurrentIndex() != this->actor.cutscene) {
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ if (CutsceneManager_GetCurrentCsId() != this->actor.csId) {
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
diff --git a/src/overlays/actors/ovl_Door_Ana/z_door_ana.h b/src/overlays/actors/ovl_Door_Ana/z_door_ana.h
index 980d0140f..8e016824d 100644
--- a/src/overlays/actors/ovl_Door_Ana/z_door_ana.h
+++ b/src/overlays/actors/ovl_Door_Ana/z_door_ana.h
@@ -13,8 +13,6 @@ typedef struct DoorAna {
/* 0x190 */ DoorAnaActionFunc actionFunc;
} DoorAna; // size = 0x194
-extern const ActorInit Door_Ana_InitVars;
-
#define DOORANA_TYPE_BITMASK 0x300
#define DOORANA_TYPE_VISIBLE 0x000
#define DOORANA_TYPE_HIDDEN_STORMS 0x100 // Incomplete, leftover from OoT
diff --git a/src/overlays/actors/ovl_Door_Shutter/overlay.cfg b/src/overlays/actors/ovl_Door_Shutter/overlay.cfg
deleted file mode 100644
index f3b63c1cc..000000000
--- a/src/overlays/actors/ovl_Door_Shutter/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Door_Shutter
-z_door_shutter.c
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 d7913b775..f8fef514d 100644
--- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c
+++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c
@@ -40,7 +40,7 @@ void func_808A1B48(DoorShutter* this, PlayState* play);
void func_808A1C50(DoorShutter* this, PlayState* play);
void DoorShutter_Draw(Actor* thisx, PlayState* play);
-const ActorInit Door_Shutter_InitVars = {
+ActorInit Door_Shutter_InitVars = {
ACTOR_DOOR_SHUTTER,
ACTORCAT_DOOR,
FLAGS,
@@ -200,7 +200,6 @@ void DoorShutter_Init(Actor* thisx, PlayState* play2) {
DoorShutter* this = THIS;
s32 sp24;
s32 i;
- s8 objId;
Actor_ProcessInitChain(&this->actor, sInitChain);
this->doorType = DOORSHUTTER_GET_380(&this->actor);
@@ -233,9 +232,10 @@ void DoorShutter_Init(Actor* thisx, PlayState* play2) {
this->actor.room = -1;
}
- // clang-format off
- objId = Object_GetIndex(&play->objectCtx, D_808A2180[sp24].objectId); this->requiredObjBankIndex = objId; if (objId < 0) { Actor_MarkForDeath(&this->actor); return; }
- // clang-format on
+ if ((this->requiredObjBankIndex = Object_GetIndex(&play->objectCtx, D_808A2180[sp24].objectId)) < 0) {
+ Actor_Kill(&this->actor);
+ return;
+ }
DoorShutter_SetupAction(this, DoorShutter_SetupType);
this->unk_163 = sp24;
@@ -261,7 +261,8 @@ void DoorShutter_Destroy(Actor* thisx, PlayState* play) {
}
void DoorShutter_SetupType(DoorShutter* this, PlayState* play) {
- if (Object_IsLoaded(&play->objectCtx, this->requiredObjBankIndex) && ((MREG(64) == 0) || (MREG(68) == 0))) {
+ 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;
DoorShutter_SetupDoor(this, play);
@@ -309,25 +310,25 @@ 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->unk_160 = this->actor.cutscene;
+ this->csId = this->actor.csId;
if (this->doorType == 7) {
- if (this->unk_160 != -1) {
- this->unk_160 = ActorCutscene_GetAdditionalCutscene(this->unk_160);
+ if (this->csId != CS_ID_NONE) {
+ this->csId = CutsceneManager_GetAdditionalCsId(this->csId);
}
}
- if (ActorCutscene_GetCanPlayNext(this->unk_160)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_160, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->actor);
Flags_SetClear(play, this->actor.room);
DoorShutter_SetupAction(this, func_808A1784);
this->unk_167 = -1;
} else {
- ActorCutscene_SetIntentToPlay(this->unk_160);
+ CutsceneManager_Queue(this->csId);
}
} else if (func_808A0E28(this, play)) {
Player* player = GET_PLAYER(play);
- player->doorType = -1;
+ player->doorType = PLAYER_DOORTYPE_TALKING;
player->doorActor = &this->actor;
this->actor.textId = 0x1801;
func_80122F28(player);
@@ -344,10 +345,10 @@ void func_808A1090(DoorShutter* this, PlayState* play) {
if (this->unk_166 != 0) {
Flags_SetSwitch(play, DOORSHUTTER_GET_7F(&this->actor));
if (this->doorType != 5) {
- gSaveContext.save.inventory.dungeonKeys[gSaveContext.mapIndex]--;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHAIN_KEY_UNLOCK);
+ gSaveContext.save.saveInfo.inventory.dungeonKeys[gSaveContext.mapIndex]--;
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIN_KEY_UNLOCK);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHAIN_KEY_UNLOCK_B);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIN_KEY_UNLOCK_B);
}
}
} else {
@@ -356,7 +357,7 @@ void func_808A1090(DoorShutter* this, PlayState* play) {
if (doorDirection != 0) {
Player* player = GET_PLAYER(play);
- player->doorType = 2;
+ player->doorType = PLAYER_DOORTYPE_SLIDING;
player->doorDirection = doorDirection;
player->doorActor = &this->actor;
@@ -367,19 +368,19 @@ void func_808A1090(DoorShutter* this, PlayState* play) {
}
if (this->doorType == 6) {
- if (gSaveContext.save.playerData.healthCapacity < (DOORSHUTTER_GET_1F(&this->actor) * 0x10)) {
- player->doorType = -1;
+ if (gSaveContext.save.saveInfo.playerData.healthCapacity < (DOORSHUTTER_GET_1F(&this->actor) * 0x10)) {
+ player->doorType = PLAYER_DOORTYPE_TALKING;
this->actor.textId = 0x14FC;
}
} else if (this->unk_166 != 0) {
if (this->doorType == 5) {
if (!CHECK_DUNGEON_ITEM(DUNGEON_BOSS_KEY, gSaveContext.mapIndex)) {
- player->doorType = -1;
+ player->doorType = PLAYER_DOORTYPE_TALKING;
this->actor.textId = 0x1803;
}
player->doorTimer += 10;
} else if (DUNGEON_KEY_COUNT(gSaveContext.mapIndex) <= 0) {
- player->doorType = -1;
+ player->doorType = PLAYER_DOORTYPE_TALKING;
this->actor.textId = 0x1802;
} else {
player->doorTimer += 10;
@@ -415,7 +416,7 @@ s32 func_808A1340(DoorShutter* this, PlayState* play) {
if (this->actor.velocity.y == 0.0f) {
func_808A1288(this, play);
if (this->unk_163 != 7) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SLIDE_DOOR_OPEN);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SLIDE_DOOR_OPEN);
}
}
@@ -448,13 +449,13 @@ s32 func_808A1478(DoorShutter* this, PlayState* play, f32 arg2) {
if (temp == this->unk_168) {
if (arg2 == 1.0f) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_METALDOOR_CLOSE);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_METALDOOR_CLOSE);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_METALDOOR_OPEN);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_METALDOOR_OPEN);
}
- if ((this->unk_160 != -1) && (ActorCutscene_GetCurrentIndex() == this->unk_160)) {
- func_800B724C(play, &this->actor, 1);
+ if ((this->csId != CS_ID_NONE) && (CutsceneManager_GetCurrentCsId() == this->csId)) {
+ func_800B724C(play, &this->actor, PLAYER_CSMODE_1);
}
}
@@ -467,18 +468,18 @@ 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->unk_160 = this->actor.cutscene;
- if (ActorCutscene_GetCanPlayNext(this->unk_160)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_160, &this->actor);
+ this->csId = this->actor.csId;
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->actor);
DoorShutter_SetupAction(this, func_808A1784);
this->unk_167 = -1;
} else {
- ActorCutscene_SetIntentToPlay(this->unk_160);
+ CutsceneManager_Queue(this->csId);
}
} else if (func_808A0E28(this, play)) {
Player* player = GET_PLAYER(play);
- player->doorType = -1;
+ player->doorType = PLAYER_DOORTYPE_TALKING;
player->doorActor = &this->actor;
this->actor.textId = 0x1800;
func_80122F28(player);
@@ -497,7 +498,7 @@ void func_808A1618(DoorShutter* this, PlayState* play) {
void func_808A1684(DoorShutter* this, PlayState* play) {
f32 phi_f0;
- if ((DECR(this->unk_166) == 0) && (play->roomCtx.unk31 == 0) && func_808A1340(this, play)) {
+ if ((DECR(this->unk_166) == 0) && (play->roomCtx.status == 0) && func_808A1340(this, play)) {
if (this->doorType == 5) {
phi_f0 = 20.0f;
} else {
@@ -511,7 +512,7 @@ void func_808A1684(DoorShutter* this, PlayState* play) {
if (DoorShutter_SetupDoor(this, play)) {
this->actor.velocity.y = 30.0f;
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SLIDE_DOOR_CLOSE);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SLIDE_DOOR_CLOSE);
}
DoorShutter_SetupAction(this, func_808A1B48);
}
@@ -520,7 +521,7 @@ void func_808A1684(DoorShutter* this, PlayState* play) {
void func_808A1784(DoorShutter* this, PlayState* play) {
if (this->unk_167 != 0) {
- if (func_800F22C4(this->unk_160, &this->actor)) {
+ if (func_800F22C4(this->csId, &this->actor) != 0) {
if (this->unk_167 < 0) {
if ((play->state.frames % 2) != 0) {
this->unk_167++;
@@ -566,12 +567,12 @@ void func_808A1884(DoorShutter* this, PlayState* play) {
this->unk_15C = 0;
this->actor.velocity.y = 0.0f;
- if (DoorShutter_SetupDoor(this, play) && !(player->stateFlags1 & 0x800)) {
+ if (DoorShutter_SetupDoor(this, play) && !(player->stateFlags1 & PLAYER_STATE1_800)) {
DoorShutter_SetupAction(this, func_808A1C50);
- if (ActorCutscene_GetCurrentIndex() == 0x7D) {
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_DOOR) {
func_801226E0(play, ((void)0, gSaveContext.respawn[RESPAWN_MODE_DOWN].data));
- player->unk_A86 = -1;
- func_800B7298(play, NULL, 0x73);
+ player->csId = CS_ID_NONE;
+ func_800B7298(play, NULL, PLAYER_CSMODE_115);
}
}
}
@@ -607,7 +608,7 @@ void func_808A1B48(DoorShutter* this, PlayState* play) {
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);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BIGWALL_BOUND);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BIGWALL_BOUND);
quakeIndex = Quake_Add(Play_GetCamera(play, CAM_ID_MAIN), QUAKE_TYPE_3);
Quake_SetSpeed(quakeIndex, -32536);
@@ -622,8 +623,8 @@ void func_808A1B48(DoorShutter* this, PlayState* play) {
void func_808A1C50(DoorShutter* this, PlayState* play) {
if (this->unk_167++ > 30) {
- if (GET_PLAYER(play)->csMode == 0x73) {
- func_800B7298(play, NULL, 6);
+ if (GET_PLAYER(play)->csMode == PLAYER_CSMODE_115) {
+ func_800B7298(play, NULL, PLAYER_CSMODE_END);
}
DoorShutter_SetupDoor(this, play);
}
@@ -633,7 +634,8 @@ void DoorShutter_Update(Actor* thisx, PlayState* play) {
DoorShutter* this = THIS;
Player* player = GET_PLAYER(play);
- if (!(player->stateFlags1 & 0x100004C0) || (this->actionFunc == DoorShutter_SetupType)) {
+ if (!(player->stateFlags1 & (PLAYER_STATE1_40 | PLAYER_STATE1_80 | PLAYER_STATE1_400 | PLAYER_STATE1_10000000)) ||
+ (this->actionFunc == DoorShutter_SetupType)) {
this->actionFunc(this, play);
if (this->unk_163 == 7) {
@@ -650,7 +652,7 @@ s32 func_808A1D68(DoorShutter* this, PlayState* play) {
return true;
}
- temp_a0 = BINANG_SUB(Actor_YawToPoint(&this->actor, &play->view.eye), this->actor.shape.rot.y);
+ 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 = ABS_ALT(temp_a0);
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 e0d5653e2..7f18e0546 100644
--- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h
+++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h
@@ -17,7 +17,7 @@ typedef struct DoorShutter {
/* 0x0144 */ UNK_TYPE1 unk144[0x18];
/* 0x015C */ s16 unk_15C;
/* 0x015E */ s16 unk_15E;
- /* 0x0160 */ s16 unk_160;
+ /* 0x0160 */ s16 csId;
/* 0x0162 */ u8 doorType;
/* 0x0163 */ u8 unk_163;
/* 0x0164 */ u8 unk_164;
@@ -28,6 +28,4 @@ typedef struct DoorShutter {
/* 0x016C */ DoorShutterActionFunc actionFunc;
} DoorShutter; // size = 0x170
-extern const ActorInit Door_Shutter_InitVars;
-
#endif // Z_DOOR_SHUTTER_H
diff --git a/src/overlays/actors/ovl_Door_Spiral/overlay.cfg b/src/overlays/actors/ovl_Door_Spiral/overlay.cfg
deleted file mode 100644
index f33e851b5..000000000
--- a/src/overlays/actors/ovl_Door_Spiral/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Door_Spiral
-z_door_spiral.c
diff --git a/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c b/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c
index be9b5c093..6c7d32152 100644
--- a/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c
+++ b/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c
@@ -16,57 +16,12 @@
#define THIS ((DoorSpiral*)thisx)
-typedef enum {
- /* 0 */ SPIRAL_OVERWORLD, // does not display anything as there is not a DL in GAMEPLAY_KEEP for it
- /* 1 */ SPIRAL_DUNGEON,
- /* 2 */ SPIRAL_WOODFALL_TEMPLE,
- /* 3 */ SPIRAL_WOODFALL_TEMPLE_ALT, // SPIRAL_WOODFALL_TEMPLE but with positional lights enabled?
- /* 4 */ SPIRAL_SNOWHEAD_TEMPLE,
- /* 5 */ SPIRAL_STONE_TOWER,
- /* 6 */ SPIRAL_IKANA_CASTLE,
- /* 7 */ SPIRAL_DAMPES_HOUSE
-} SpiralType;
-
-typedef enum {
- /* 0 */ SPIRAL_OBJECT_OVERWORLD,
- /* 1 */ SPIRAL_OBJECT_DUNGEON,
- /* 2 */ SPIRAL_OBJECT_WOODFALL,
- /* 3 */ SPIRAL_OBJECT_SNOWHEAD,
- /* 4 */ SPIRAL_OBJECT_STONE_TOWER,
- /* 5 */ SPIRAL_OBJECT_DAMPES_HOUSE,
- /* 6 */ SPIRAL_OBJECT_IKANA_CASTLE
-} SpiralObjectType;
-
-typedef struct {
- /* 0x00 */ Gfx* spiralDL[2]; // one displaylist for downward spiral, and one for upward
- /* 0x08 */ s32 unk8; // unused
- /* 0x0C */ u8 unkC; // unused
- /* 0x0D */ u8 unkD; // unused
- /* 0x0E */ u8 spiralWidth;
- /* 0x0F */ u8 spiralHeight;
-} SpiralInfo;
-
-// Maps SpiralObjectType to SpiralType
-typedef struct {
- /* 0x00 */ s16 objectBankId;
- /* 0x02 */ u8 spiralType;
-} SpiralObjectInfo;
-
-// Maps scenes to SpiralObjectType
-typedef struct {
- /* 0x00 */ s16 sceneId;
- /* 0x02 */ u8 objectType;
-} SpiralSceneInfo;
-
void DoorSpiral_Init(Actor* thisx, PlayState* play);
void DoorSpiral_Destroy(Actor* thisx, PlayState* play);
void DoorSpiral_Update(Actor* thisx, PlayState* play);
void DoorSpiral_Draw(Actor* thisx, PlayState* play);
-void DoorSpiral_WaitForObject(DoorSpiral* this, PlayState* play);
-void DoorSpiral_Wait(DoorSpiral* this, PlayState* play);
-void DoorSpiral_PlayerClimb(DoorSpiral* this, PlayState* play);
-
+/*
const ActorInit Door_Spiral_InitVars = {
ACTOR_DOOR_SPIRAL,
ACTORCAT_DOOR,
@@ -76,256 +31,30 @@ const ActorInit Door_Spiral_InitVars = {
(ActorFunc)DoorSpiral_Init,
(ActorFunc)DoorSpiral_Destroy,
(ActorFunc)DoorSpiral_Update,
- (ActorFunc)DoorSpiral_Draw,
+ (ActorFunc)DoorSpiral_Draw
};
+*/
-// Parameters for each staircase, indexed with SpiralType
-static SpiralInfo sSpiralInfo[] = {
- { { NULL, NULL }, 0, 130, 12, 50, 15 }, // SPIRAL_OVERWORLD
- { { gameplay_dangeon_keep_DL_0219E0, gameplay_dangeon_keep_DL_01D980 }, 0, 130, 12, 50, 15 }, // SPIRAL_DUNGEON
- { { object_numa_obj_DL_004448, object_numa_obj_DL_0007A8 }, 0, 130, 12, 50, 15 }, // SPIRAL_WOODFALL_TEMPLE
- { { object_numa_obj_DL_0051B8, object_numa_obj_DL_0014C8 }, 0, 130, 12, 50, 15 }, // SPIRAL_WOODFALL_TEMPLE_ALT
- { { object_hakugin_obj_DL_009278, object_hakugin_obj_DL_006128 }, 0, 130, 12, 50, 15 }, // SPIRAL_SNOWHEAD_TEMPLE
- { { object_ikana_obj_DL_013EA8, object_ikana_obj_DL_012B70 }, 0, 130, 12, 50, 15 }, // SPIRAL_STONE_TOWER
- { { object_ikninside_obj_DL_000EA0, object_ikninside_obj_DL_000590 }, 0, 130, 12, 50, 15 }, // SPIRAL_IKANA_CASTLE
- { { object_danpei_object_DL_002110, object_danpei_object_DL_0012C0 }, 0, 130, 12, 50, 15 }, // SPIRAL_DAMPES_HOUSE
-};
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Door_Spiral/func_809A2B60.s")
-// Defines which object bank a staircase should use, and its index to `sSpiralInfo`
-static SpiralObjectInfo sSpiralObjectInfo[] = {
- { GAMEPLAY_KEEP, SPIRAL_OVERWORLD }, { GAMEPLAY_DANGEON_KEEP, SPIRAL_DUNGEON },
- { OBJECT_NUMA_OBJ, SPIRAL_WOODFALL_TEMPLE }, { OBJECT_HAKUGIN_OBJ, SPIRAL_SNOWHEAD_TEMPLE },
- { OBJECT_IKANA_OBJ, SPIRAL_STONE_TOWER }, { OBJECT_DANPEI_OBJECT, SPIRAL_DAMPES_HOUSE },
- { OBJECT_IKNINSIDE_OBJ, SPIRAL_IKANA_CASTLE },
-};
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Door_Spiral/func_809A2B70.s")
-/**
- * Sets the actor's action function
- */
-void DoorSpiral_SetupAction(DoorSpiral* this, DoorSpiralActionFunc actionFunc) {
- this->actionFunc = actionFunc;
- this->unk14A = 0; // set but never used
-}
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Door_Spiral/func_809A2BF8.s")
-/**
- * Sets this->spiralType, which is derived from `sSpiralObjectInfo`, and is used as an index to `sSpiralInfo`.
- */
-s32 DoorSpiral_SetSpiralType(DoorSpiral* this, PlayState* play) {
- SpiralObjectInfo* doorObjectInfo = &sSpiralObjectInfo[this->objectType];
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Door_Spiral/DoorSpiral_Init.s")
- this->spiralType = doorObjectInfo->spiralType;
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Door_Spiral/DoorSpiral_Destroy.s")
- if ((this->spiralType == SPIRAL_DAMPES_HOUSE) ||
- ((this->spiralType == SPIRAL_WOODFALL_TEMPLE) && play->roomCtx.curRoom.enablePosLights)) {
- if (this->spiralType == SPIRAL_WOODFALL_TEMPLE) {
- this->spiralType = SPIRAL_WOODFALL_TEMPLE_ALT;
- }
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Door_Spiral/func_809A2DB0.s")
- this->actor.flags |= ACTOR_FLAG_10000000;
- }
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Door_Spiral/func_809A2E08.s")
- DoorSpiral_SetupAction(this, DoorSpiral_Wait);
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Door_Spiral/func_809A2EA0.s")
- return 0;
-}
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Door_Spiral/func_809A2FF8.s")
-/**
- * Gets the object type to be used as an index to `sSpiralObjectInfo`.
- * It first checks `sSpiralSceneInfo`, but if the current scene is not found it will fall back to the default spiral
- * (overworld or dungeon).
- */
-s32 DoorSpiral_GetObjectType(PlayState* play) {
- // Defines which object type should be used for specific scenes
- static SpiralSceneInfo spiralSceneInfo[] = {
- { SCENE_MITURIN, SPIRAL_OBJECT_WOODFALL }, { SCENE_HAKUGIN, SPIRAL_OBJECT_SNOWHEAD },
- { SCENE_INISIE_N, SPIRAL_OBJECT_STONE_TOWER }, { SCENE_INISIE_R, SPIRAL_OBJECT_STONE_TOWER },
- { SCENE_DANPEI2TEST, SPIRAL_OBJECT_DAMPES_HOUSE }, { SCENE_IKNINSIDE, SPIRAL_OBJECT_IKANA_CASTLE },
- { SCENE_CASTLE, SPIRAL_OBJECT_IKANA_CASTLE },
- };
- SpiralSceneInfo* sceneInfo = spiralSceneInfo;
- s32 i;
- s32 type;
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Door_Spiral/func_809A3098.s")
- for (i = 0; i < ARRAY_COUNT(spiralSceneInfo); sceneInfo++, i++) {
- if (play->sceneId == sceneInfo->sceneId) {
- break;
- }
- }
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Door_Spiral/DoorSpiral_Update.s")
- type = i;
-
- if (type < ARRAY_COUNT(spiralSceneInfo)) {
- type = sceneInfo->objectType;
- } else {
- // Set the type based on if link is in a dungeon scene, or the overworld
- type = (Object_GetIndex(&play->objectCtx, GAMEPLAY_DANGEON_KEEP) >= 0) ? SPIRAL_OBJECT_DUNGEON
- : SPIRAL_OBJECT_OVERWORLD;
- }
-
- return type;
-}
-
-static InitChainEntry sInitChain[] = {
- ICHAIN_VEC3F(scale, 1, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 400, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 400, ICHAIN_STOP),
-};
-
-void DoorSpiral_Init(Actor* thisx, PlayState* play) {
- DoorSpiral* this = THIS;
- s32 pad;
- s32 transition = DOORSPIRAL_GET_TRANSITION_ID(thisx);
- s8 objBankId;
-
- if (this->actor.room != play->doorCtx.transitionActorList[transition].sides[0].room) {
- Actor_MarkForDeath(&this->actor);
- return;
- }
-
- Actor_ProcessInitChain(&this->actor, sInitChain);
- this->unk145 = DOORSPIRAL_GET_UNK145(thisx); // set but never used
- this->orientation = DOORSPIRAL_GET_ORIENTATION(thisx);
- this->objectType = DoorSpiral_GetObjectType(play);
- objBankId = Object_GetIndex(&play->objectCtx, sSpiralObjectInfo[this->objectType].objectBankId);
- this->bankIndex = objBankId;
-
- if (objBankId < 0) {
- Actor_MarkForDeath(&this->actor);
- return;
- }
-
- DoorSpiral_SetupAction(this, DoorSpiral_WaitForObject);
- Actor_SetFocus(&this->actor, 60.0f);
-}
-
-void DoorSpiral_Destroy(Actor* thisx, PlayState* play) {
- s32 transition = DOORSPIRAL_GET_TRANSITION_ID(thisx);
-
- play->doorCtx.transitionActorList[transition].id *= -1;
-}
-
-/**
- * Waits for the required object to be loaded.
- */
-void DoorSpiral_WaitForObject(DoorSpiral* this, PlayState* play) {
- if (Object_IsLoaded(&play->objectCtx, this->bankIndex)) {
- this->actor.objBankIndex = this->bankIndex;
- DoorSpiral_SetSpiralType(this, play);
- }
-}
-
-/**
- * Finds the distance between the stairs and the player.
- */
-f32 DoorSpiral_GetDistFromPlayer(PlayState* play, DoorSpiral* this, f32 yOffset, f32 spiralWidth, f32 spiralHeight) {
- Player* player = GET_PLAYER(play);
- Vec3f target;
- Vec3f offset;
-
- target.x = player->actor.world.pos.x;
- target.y = player->actor.world.pos.y + yOffset;
- target.z = player->actor.world.pos.z;
-
- Actor_OffsetOfPointInActorCoords(&this->actor, &offset, &target);
-
- if ((spiralWidth < fabsf(offset.x)) || (spiralHeight < fabsf(offset.y))) {
- return FLT_MAX;
- }
-
- return offset.z;
-}
-
-/**
- * Checks if the player should climb the stairs.
- */
-s32 DoorSpiral_PlayerShouldClimb(DoorSpiral* this, PlayState* play) {
- Player* player = GET_PLAYER(play);
-
- if (!Player_InCsMode(play)) {
- SpiralInfo* spiralInfo = &sSpiralInfo[this->spiralType];
- f32 dist = DoorSpiral_GetDistFromPlayer(play, this, 0.0f, spiralInfo->spiralWidth, spiralInfo->spiralHeight);
-
- if (fabsf(dist) < 64.0f) {
- s16 angle = player->actor.shape.rot.y - this->actor.shape.rot.y;
-
- if (dist > 0.0f) {
- angle = 0x8000 - angle;
- }
-
- if (ABS_ALT(angle) < 0x3000) {
- return (dist >= 0.0f) ? 1.0f : -1.0f;
- }
- }
- }
-
- return 0;
-}
-
-/**
- * Wait for the player to interact with the stairs.
- */
-void DoorSpiral_Wait(DoorSpiral* this, PlayState* play) {
- Player* player;
- s32 transition;
-
- if (this->shouldClimb) {
- DoorSpiral_SetupAction(this, DoorSpiral_PlayerClimb);
- } else if (DoorSpiral_PlayerShouldClimb(this, play)) {
- player = GET_PLAYER(play);
-
- player->doorType = 4;
- player->doorDirection = this->orientation;
- player->doorActor = &this->actor;
- transition = DOORSPIRAL_GET_TRANSITION_ID(&this->actor);
- player->doorNext = ((u16)play->doorCtx.transitionActorList[transition].params) >> 10;
-
- func_80122F28(player);
- }
-}
-
-/**
- * Player is climbing the stairs.
- */
-void DoorSpiral_PlayerClimb(DoorSpiral* this, PlayState* play) {
- Player* player = GET_PLAYER(play);
-
- if (!(player->stateFlags1 & 0x20000000)) {
- DoorSpiral_SetupAction(this, DoorSpiral_WaitForObject);
- this->shouldClimb = 0;
- }
-}
-
-void DoorSpiral_Update(Actor* thisx, PlayState* play) {
- DoorSpiral* this = THIS;
- s32 pad;
- Player* player = GET_PLAYER(play);
-
- if ((!(player->stateFlags1 & 0x100004C0)) || (this->actionFunc == DoorSpiral_WaitForObject)) {
- this->actionFunc(this, play);
- }
-}
-
-void DoorSpiral_Draw(Actor* thisx, PlayState* play) {
- s32 pad;
- DoorSpiral* this = THIS;
-
- if (this->actor.objBankIndex == this->bankIndex) {
- SpiralInfo* spiralInfo = &sSpiralInfo[this->spiralType];
- Gfx* dList;
-
- // Set the model to render based on the orientation of the stairs (upward or downward)
- dList = spiralInfo->spiralDL[this->orientation];
-
- if (dList != NULL) {
- OPEN_DISPS(play->state.gfxCtx);
-
- func_8012C28C(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++, spiralInfo->spiralDL[this->orientation]);
-
- CLOSE_DISPS(play->state.gfxCtx);
- }
- }
-}
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Door_Spiral/DoorSpiral_Draw.s")
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 f12b79d84..701b38639 100644
--- a/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.h
+++ b/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.h
@@ -5,24 +5,9 @@
struct DoorSpiral;
-#define DOORSPIRAL_GET_ORIENTATION(thisx) (((thisx)->params >> 7) & 0x1)
-#define DOORSPIRAL_GET_UNK145(thisx) (((thisx)->params >> 8) & 0x3)
-#define DOORSPIRAL_GET_TRANSITION_ID(thisx) ((u16)(thisx)->params >> 10)
-
-typedef void (*DoorSpiralActionFunc)(struct DoorSpiral*, PlayState*);
-
typedef struct DoorSpiral {
/* 0x000 */ Actor actor;
- /* 0x144 */ u8 shouldClimb; // Flag used to determine if the player should climb the stairs
- /* 0x145 */ u8 unk145;
- /* 0x146 */ u8 orientation; // Upward or downward staircase
- /* 0x147 */ u8 objectType; // Index to list of objects
- /* 0x148 */ u8 spiralType; // Type of skin the staircase should use
- /* 0x149 */ s8 bankIndex; // Object bank to use
- /* 0x14A */ s8 unk14A;
- /* 0x14C */ DoorSpiralActionFunc actionFunc;
+ /* 0x144 */ char unk_144[0xC];
} DoorSpiral; // size = 0x150
-extern const ActorInit Door_Spiral_InitVars;
-
#endif // Z_DOOR_SPIRAL_H
diff --git a/src/overlays/actors/ovl_Door_Warp1/overlay.cfg b/src/overlays/actors/ovl_Door_Warp1/overlay.cfg
deleted file mode 100644
index 764603654..000000000
--- a/src/overlays/actors/ovl_Door_Warp1/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Door_Warp1
-z_door_warp1.c
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 03531bb31..0b4b59f1c 100644
--- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c
+++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c
@@ -4,6 +4,7 @@
* Description: Blue warp portal and crystal, and the Majora's Mask-shaped boss warp platform
*/
+#include "prevent_bss_reordering.h"
#include "z_door_warp1.h"
#include "objects/object_warp1/object_warp1.h"
@@ -46,10 +47,10 @@ void func_808BAAF4(DoorWarp1* this, PlayState* play);
void func_808BABF4(DoorWarp1* this, PlayState* play);
void func_808BB8D4(DoorWarp1* this, PlayState* play, s32 arg2);
-static s16 D_808BC000;
-static f32 D_808BC004;
+s16 D_808BC000;
+f32 D_808BC004;
-const ActorInit Door_Warp1_InitVars = {
+ActorInit Door_Warp1_InitVars = {
ACTOR_DOOR_WARP1,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -75,7 +76,7 @@ void DoorWarp1_SetupAction(DoorWarp1* this, DoorWarp1ActionFunc actionFunc) {
s32 func_808B849C(DoorWarp1* this, PlayState* play) {
s32 ret = 0;
- if ((play->sceneId == SCENE_MITURIN_BS) && !CHECK_QUEST_ITEM(QUEST_REMAINS_ODOWLA)) {
+ if ((play->sceneId == SCENE_MITURIN_BS) && !CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA)) {
ret = 1;
} else if ((play->sceneId == SCENE_HAKUGIN_BS) && !CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT)) {
ret = 2;
@@ -163,8 +164,8 @@ void DoorWarp1_Init(Actor* thisx, PlayState* play) {
if ((play->sceneId == SCENE_MITURIN_BS) || (play->sceneId == SCENE_HAKUGIN_BS) ||
(play->sceneId == SCENE_INISIE_BS) || (play->sceneId == SCENE_SEA_BS)) {
- func_800FE484();
- play->interfaceCtx.restrictions.unk_312 = 1;
+ Environment_StopTime();
+ play->interfaceCtx.restrictions.songOfTime = 1;
play->interfaceCtx.restrictions.songOfSoaring = 1;
}
}
@@ -239,7 +240,7 @@ void func_808B8C48(DoorWarp1* this, PlayState* play) {
this->dyna.actor.world.pos.z, 200, 255, 255, 255);
Lights_PointNoGlowSetInfo(&this->unk_1F4, this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y,
this->dyna.actor.world.pos.z, 200, 255, 255, 255);
- if (((DOORWARP1_GET_FF(&this->dyna.actor) == ENDOORWARP1_FF_2) && CHECK_QUEST_ITEM(QUEST_REMAINS_ODOWLA)) ||
+ if (((DOORWARP1_GET_FF(&this->dyna.actor) == ENDOORWARP1_FF_2) && CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA)) ||
((DOORWARP1_GET_FF(&this->dyna.actor) == ENDOORWARP1_FF_3) && CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT)) ||
((DOORWARP1_GET_FF(&this->dyna.actor) == ENDOORWARP1_FF_4) && CHECK_QUEST_ITEM(QUEST_REMAINS_GYORG)) ||
((DOORWARP1_GET_FF(&this->dyna.actor) == ENDOORWARP1_FF_5) && CHECK_QUEST_ITEM(QUEST_REMAINS_TWINMOLD))) {
@@ -270,7 +271,7 @@ void func_808B8E78(DoorWarp1* this, PlayState* play) {
this->unk_1A4 = 700.0f;
if (play->sceneId == SCENE_INISIE_N) {
DoorWarp1_SetupAction(this, func_808B96A0);
- } else if (gSaveContext.save.weekEventReg[86] & 0x80) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_86_80)) {
this->unk_1D4 = 0;
DoorWarp1_SetupAction(this, func_808B921C);
} else {
@@ -279,15 +280,15 @@ void func_808B8E78(DoorWarp1* this, PlayState* play) {
}
s32 func_808B900C(DoorWarp1* this, PlayState* play) {
- s32 index;
+ s32 cueChannel;
u8 ret = false;
- if (Cutscene_CheckActorAction(play, 569)) {
- index = Cutscene_GetActorActionIndex(play, 569);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_569)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_569);
- if (this->unk_208 != play->csCtx.actorActions[index]->action) {
- this->unk_208 = play->csCtx.actorActions[index]->action;
- if (play->csCtx.actorActions[index]->action == 2) {
+ if (this->cueId != play->csCtx.actorCues[cueChannel]->id) {
+ this->cueId = play->csCtx.actorCues[cueChannel]->id;
+ if (play->csCtx.actorCues[cueChannel]->id == 2) {
ret = true;
}
}
@@ -328,7 +329,7 @@ void func_808B90CC(DoorWarp1* this, PlayState* play) {
DoorWarp1_SetupAction(this, func_808B921C);
}
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_WARP_HOLE_ENERGY - SFX_FLAG);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WARP_HOLE_ENERGY - SFX_FLAG);
}
void func_808B921C(DoorWarp1* this, PlayState* play) {
@@ -344,12 +345,12 @@ void func_808B921C(DoorWarp1* this, PlayState* play) {
}
if (func_808B866C(this, play) && !Play_InCsMode(play)) {
- func_800B7298(play, &this->dyna.actor, 7);
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_WAIT);
Message_StartTextbox(play, 0xF2, &this->dyna.actor);
DoorWarp1_SetupAction(this, func_808B93A0);
}
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BOSS_WARP_HOLE - SFX_FLAG);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BOSS_WARP_HOLE - SFX_FLAG);
}
void func_808B93A0(DoorWarp1* this, PlayState* play) {
@@ -357,37 +358,37 @@ void func_808B93A0(DoorWarp1* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
if (play->msgCtx.choiceIndex == 0) {
func_8019F208();
- func_800B7298(play, &this->dyna.actor, 9);
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_9);
player->unk_3A0.x = this->dyna.actor.world.pos.x;
player->unk_3A0.z = this->dyna.actor.world.pos.z;
this->unk_1CA = 1;
DoorWarp1_SetupAction(this, func_808B9524);
} else {
func_8019F230();
- func_800B7298(play, &this->dyna.actor, 6);
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_END);
DoorWarp1_SetupAction(this, func_808B94A4);
}
}
func_808BB8D4(this, play, 1);
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BOSS_WARP_HOLE - SFX_FLAG);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BOSS_WARP_HOLE - SFX_FLAG);
}
void func_808B94A4(DoorWarp1* this, PlayState* play) {
- if (!func_808B866C(this, play) && (ActorCutscene_GetCurrentIndex() != play->playerActorCsIds[8])) {
+ if (!func_808B866C(this, play) && (CutsceneManager_GetCurrentCsId() != play->playerCsIds[PLAYER_CS_ID_SONG_WARP])) {
DoorWarp1_SetupAction(this, func_808B921C);
}
func_808BB8D4(this, play, 1);
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BOSS_WARP_HOLE - SFX_FLAG);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BOSS_WARP_HOLE - SFX_FLAG);
}
void func_808B9524(DoorWarp1* this, PlayState* play) {
- if (!ActorCutscene_GetCanPlayNext(play->playerActorCsIds[9])) {
- ActorCutscene_SetIntentToPlay(play->playerActorCsIds[9]);
+ if (!CutsceneManager_IsNext(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_ENTRANCE])) {
+ CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_ENTRANCE]);
} else {
- ActorCutscene_Start(play->playerActorCsIds[9], NULL);
+ CutsceneManager_Start(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_ENTRANCE], NULL);
DoorWarp1_SetupAction(this, func_808B958C);
}
}
@@ -410,19 +411,19 @@ void func_808B958C(DoorWarp1* this, PlayState* play) {
this->unk_1D0++;
if ((this->unk_1D0 > 120) && (gSaveContext.nextCutsceneIndex == 0xFFEF)) {
func_808BA10C(this, play);
- play->transitionType = TRANS_TYPE_03;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
}
Math_SmoothStepToF(&this->unk_1A8, 6.0f, 0.2f, 0.02f, 0.01f);
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_LINK_WARP - SFX_FLAG);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_LINK_WARP - SFX_FLAG);
}
void func_808B96A0(DoorWarp1* this, PlayState* play) {
}
void func_808B96B0(DoorWarp1* this, PlayState* play) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_WARP_HOLE - SFX_FLAG);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WARP_HOLE - SFX_FLAG);
Math_SmoothStepToF(&this->unk_1B0, 255.0f, 0.4f, 10.0f, 0.01f);
Math_SmoothStepToF(&this->unk_1B4, 255.0f, 0.4f, 10.0f, 0.01f);
@@ -442,13 +443,13 @@ void func_808B96B0(DoorWarp1* this, PlayState* play) {
}
void func_808B977C(DoorWarp1* this, PlayState* play) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_WARP_HOLE - SFX_FLAG);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WARP_HOLE - SFX_FLAG);
if (func_808B866C(this, play) && !Play_InCsMode(play)) {
Player* player = GET_PLAYER(play);
AudioSfx_PlaySfx(NA_SE_EV_LINK_WARP, &player->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
- func_800B7298(play, &this->dyna.actor, 9);
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_9);
player->unk_3A0.x = this->dyna.actor.world.pos.x;
player->unk_3A0.z = this->dyna.actor.world.pos.z;
this->unk_1CA = 1;
@@ -457,10 +458,10 @@ void func_808B977C(DoorWarp1* this, PlayState* play) {
}
void func_808B9840(DoorWarp1* this, PlayState* play) {
- if (!ActorCutscene_GetCanPlayNext(play->playerActorCsIds[9])) {
- ActorCutscene_SetIntentToPlay(play->playerActorCsIds[9]);
+ if (!CutsceneManager_IsNext(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_ENTRANCE])) {
+ CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_ENTRANCE]);
} else {
- ActorCutscene_Start(play->playerActorCsIds[9], NULL);
+ CutsceneManager_Start(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_ENTRANCE], NULL);
DoorWarp1_SetupAction(this, func_808B98A8);
}
}
@@ -515,7 +516,7 @@ void func_808B9B30(DoorWarp1* this, PlayState* play) {
}
void func_808B9BE8(DoorWarp1* this, PlayState* play) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_WARP_HOLE - SFX_FLAG);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WARP_HOLE - SFX_FLAG);
Math_SmoothStepToF(&this->unk_1B0, 255.0f, 0.2f, 2.0f, 0.1f);
Math_SmoothStepToF(&this->unk_1B4, 255.0f, 0.2f, 2.0f, 0.1f);
if (this->unk_1C4 < 10) {
@@ -547,34 +548,34 @@ void func_808B9CE8(DoorWarp1* this, PlayState* play) {
}
if (!Actor_HasParent(&this->dyna.actor, play)) {
- Actor_PickUp(&this->dyna.actor, play, (GI_REMAINS_ODOLWA - 1) + func_808B849C(this, play), 30.0f, 80.0f);
+ Actor_OfferGetItem(&this->dyna.actor, play, (GI_REMAINS_ODOLWA - 1) + func_808B849C(this, play), 30.0f, 80.0f);
return;
}
switch (play->sceneId) {
case SCENE_MITURIN_BS:
- gSaveContext.save.unk_ECC[0] =
- (((void)0, gSaveContext.save.unk_ECC[0]) & 0xFFFFFF00) | (((u8)gSaveContext.save.unk_ECC[1]) & 0xFF);
+ gSaveContext.save.saveInfo.unk_EA8[0] = (((void)0, gSaveContext.save.saveInfo.unk_EA8[0]) & 0xFFFFFF00) |
+ (((u8)gSaveContext.save.saveInfo.unk_EA8[1]) & 0xFF);
break;
case SCENE_HAKUGIN_BS:
- gSaveContext.save.unk_ECC[0] = (((void)0, gSaveContext.save.unk_ECC[0]) & 0xFFFF00FF) |
- ((((u8)gSaveContext.save.unk_ECC[1]) & 0xFF) << 8);
+ gSaveContext.save.saveInfo.unk_EA8[0] = (((void)0, gSaveContext.save.saveInfo.unk_EA8[0]) & 0xFFFF00FF) |
+ ((((u8)gSaveContext.save.saveInfo.unk_EA8[1]) & 0xFF) << 8);
break;
case SCENE_INISIE_BS:
- gSaveContext.save.unk_ECC[0] = (((void)0, gSaveContext.save.unk_ECC[0]) & 0xFF00FFFF) |
- ((((u8)gSaveContext.save.unk_ECC[1]) & 0xFF) << 0x10);
+ gSaveContext.save.saveInfo.unk_EA8[0] = (((void)0, gSaveContext.save.saveInfo.unk_EA8[0]) & 0xFF00FFFF) |
+ ((((u8)gSaveContext.save.saveInfo.unk_EA8[1]) & 0xFF) << 0x10);
break;
case SCENE_SEA_BS:
- gSaveContext.save.unk_ECC[0] = (((void)0, gSaveContext.save.unk_ECC[0]) & 0x00FFFFFF) |
- ((((u8)gSaveContext.save.unk_ECC[1]) & 0xFF) << 0x18);
+ 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;
}
- gSaveContext.save.unk_ECC[1] =
- (gSaveContext.save.unk_ECC[1] & 0xFFFFFF00) | ((((u8)gSaveContext.save.unk_ECC[1]) + 1) & 0xFF);
+ gSaveContext.save.saveInfo.unk_EA8[1] = (gSaveContext.save.saveInfo.unk_EA8[1] & 0xFFFFFF00) |
+ ((((u8)gSaveContext.save.saveInfo.unk_EA8[1]) + 1) & 0xFF);
Item_Give(play, func_808B849C(this, play) + (ITEM_REMAINS_ODOLWA - 1));
DoorWarp1_SetupAction(this, func_808B9E94);
}
@@ -594,12 +595,12 @@ void func_808B9ED8(DoorWarp1* this, PlayState* play) {
}
void func_808B9F10(DoorWarp1* this, PlayState* play) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_WARP_HOLE - SFX_FLAG);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WARP_HOLE - SFX_FLAG);
if ((this->unk_203 == 0) && func_808B866C(this, play) && !Play_InCsMode(play) && (this->unk_203 == 0)) {
Player* player = GET_PLAYER(play);
Interface_SetHudVisibility(HUD_VISIBILITY_NONE);
- func_800B7298(play, &this->dyna.actor, 9);
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_9);
player->unk_3A0.x = this->dyna.actor.world.pos.x;
player->unk_3A0.z = this->dyna.actor.world.pos.z;
this->unk_1CA = 20;
@@ -616,10 +617,10 @@ void func_808B9FD0(DoorWarp1* this, PlayState* play) {
return;
}
- if (!ActorCutscene_GetCanPlayNext(play->playerActorCsIds[9])) {
- ActorCutscene_SetIntentToPlay(play->playerActorCsIds[9]);
+ if (!CutsceneManager_IsNext(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_ENTRANCE])) {
+ CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_ENTRANCE]);
} else {
- ActorCutscene_Start(play->playerActorCsIds[9], NULL);
+ CutsceneManager_Start(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_ENTRANCE], NULL);
AudioSfx_PlaySfx(NA_SE_EV_LINK_WARP, &player->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
Animation_ChangeImpl(&this->skelAnime, &gWarpCrystalAnim, 1.0f, Animation_GetLastFrame(&gWarpCrystalAnim),
@@ -637,7 +638,7 @@ void func_808BA10C(DoorWarp1* this, PlayState* play) {
if ((play->sceneId == SCENE_MITURIN_BS) || (play->sceneId == SCENE_HAKUGIN_BS) ||
(play->sceneId == SCENE_INISIE_BS) || (play->sceneId == SCENE_SEA_BS)) {
- D_801F4DE2 = play->sceneId;
+ gDungeonBossWarpSceneId = play->sceneId;
if (play->sceneId == SCENE_MITURIN_BS) {
phi_v0_2 = 0;
} else if (play->sceneId == SCENE_HAKUGIN_BS) {
@@ -652,24 +653,24 @@ void func_808BA10C(DoorWarp1* this, PlayState* play) {
if (this->unk_202 != 0) {
if (phi_v0_2 > 0) {
- gSaveContext.save.weekEventReg[7] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_ENTERED_WOODFALL_TEMPLE_PRISON);
}
switch (phi_v0_2) {
case 0:
- phi_a0 = gSaveContext.save.unk_ECC[0] & 0xFF;
+ phi_a0 = gSaveContext.save.saveInfo.unk_EA8[0] & 0xFF;
break;
case 1:
- phi_a0 = (gSaveContext.save.unk_ECC[0] & 0xFF00) >> 8;
+ phi_a0 = (gSaveContext.save.saveInfo.unk_EA8[0] & 0xFF00) >> 8;
break;
case 2:
- phi_a0 = (gSaveContext.save.unk_ECC[0] & 0xFF0000) >> 0x10;
+ phi_a0 = (gSaveContext.save.saveInfo.unk_EA8[0] & 0xFF0000) >> 0x10;
break;
case 3:
- phi_a0 = (gSaveContext.save.unk_ECC[0] & 0xFF000000) >> 0x18;
+ phi_a0 = (gSaveContext.save.saveInfo.unk_EA8[0] & 0xFF000000) >> 0x18;
break;
default:
@@ -705,64 +706,65 @@ void func_808BA10C(DoorWarp1* this, PlayState* play) {
}
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_03;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
} else {
switch (phi_v0_2) {
case 0:
- if (gSaveContext.save.weekEventReg[20] & 2) {
- gSaveContext.save.weekEventReg[7] |= 0x80;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) {
+ // Skips the entrance cutscene as this flag is attached to `ENTRANCE(WOODFALL_TEMPLE, 1)`
+ SET_WEEKEVENTREG(WEEKEVENTREG_ENTERED_WOODFALL_TEMPLE_PRISON);
play->nextEntrance = ENTRANCE(WOODFALL_TEMPLE, 1);
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_03;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
} else {
play->nextEntrance = ENTRANCE(WOODFALL, 0);
gSaveContext.nextCutsceneIndex = 0xFFF0;
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_03;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
}
break;
case 1:
- gSaveContext.save.weekEventReg[33] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE);
play->nextEntrance = ENTRANCE(MOUNTAIN_VILLAGE_SPRING, 7);
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_03;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
break;
case 3:
- if (gSaveContext.save.weekEventReg[55] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) {
play->nextEntrance = ENTRANCE(ZORA_CAPE, 9);
gSaveContext.nextCutsceneIndex = 0xFFF0;
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_03;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
} else {
- gSaveContext.save.weekEventReg[55] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE);
play->nextEntrance = ENTRANCE(ZORA_CAPE, 8);
gSaveContext.nextCutsceneIndex = 0xFFF0;
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_03;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
}
break;
case 2:
- gSaveContext.save.weekEventReg[52] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE);
play->nextEntrance = ENTRANCE(IKANA_CANYON, 15);
gSaveContext.nextCutsceneIndex = 0xFFF2;
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_03;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
break;
}
}
} else if (DOORWARP1_GET_FF00_1(&this->dyna.actor) != 0xFF) {
if (DOORWARP1_GET_FF(&this->dyna.actor) == ENDOORWARP1_FF_6) {
- gSaveContext.respawnFlag = ~1;
+ gSaveContext.respawnFlag = -2;
}
play->nextEntrance = play->setupExitList[DOORWARP1_GET_FF00_3(&this->dyna.actor)];
Scene_SetExitFade(play);
@@ -833,7 +835,7 @@ void func_808BA550(DoorWarp1* this, PlayState* play) {
}
if (this->unk_1D0 > 140) {
- play->envCtx.fillScreen = 1;
+ play->envCtx.fillScreen = true;
temp_f0 = (this->unk_1D0 - 140) / 20.0f;
if (temp_f0 > 1.0f) {
temp_f0 = 1.0f;
@@ -878,7 +880,7 @@ void func_808BA550(DoorWarp1* this, PlayState* play) {
void func_808BAAF4(DoorWarp1* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- s16 cutscene;
+ s16 csId;
f32 phi_f2;
phi_f2 = 200.0f;
@@ -886,17 +888,17 @@ void func_808BAAF4(DoorWarp1* this, PlayState* play) {
phi_f2 = 85.0f;
}
- if (!(gSaveContext.save.weekEventReg[86] & 0x80) && (fabsf(this->dyna.actor.xzDistToPlayer) < phi_f2) &&
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_86_80) && (fabsf(this->dyna.actor.xzDistToPlayer) < phi_f2) &&
((player->actor.world.pos.y - 20.0f) < this->dyna.actor.world.pos.y) &&
(this->dyna.actor.world.pos.y < (player->actor.world.pos.y + 20.0f))) {
- cutscene = this->dyna.actor.cutscene;
+ csId = this->dyna.actor.csId;
- if (ActorCutscene_GetCanPlayNext(cutscene)) {
- ActorCutscene_Start(cutscene, &this->dyna.actor);
- gSaveContext.save.weekEventReg[86] |= 0x80;
+ if (CutsceneManager_IsNext(csId)) {
+ CutsceneManager_Start(csId, &this->dyna.actor);
+ SET_WEEKEVENTREG(WEEKEVENTREG_86_80);
DoorWarp1_SetupAction(this, func_808BABF4);
} else {
- ActorCutscene_SetIntentToPlay(cutscene);
+ CutsceneManager_Queue(csId);
}
}
}
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 c57f610a0..1bc7e13bc 100644
--- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.h
+++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.h
@@ -53,9 +53,7 @@ typedef struct DoorWarp1 {
/* 0x202 */ u8 unk_202;
/* 0x203 */ u8 unk_203;
/* 0x204 */ f32 unk_204;
- /* 0x208 */ u8 unk_208;
+ /* 0x208 */ u8 cueId;
} DoorWarp1; // size = 0x20C
-extern const ActorInit Door_Warp1_InitVars;
-
#endif // Z_DOOR_WARP1_H
diff --git a/src/overlays/actors/ovl_Eff_Change/overlay.cfg b/src/overlays/actors/ovl_Eff_Change/overlay.cfg
deleted file mode 100644
index 6ab11cfbd..000000000
--- a/src/overlays/actors/ovl_Eff_Change/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Eff_Change
-z_eff_change.c
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 0f5245617..65fb8da2f 100644
--- a/src/overlays/actors/ovl_Eff_Change/z_eff_change.c
+++ b/src/overlays/actors/ovl_Eff_Change/z_eff_change.c
@@ -18,7 +18,7 @@ void EffChange_Draw(Actor* thisx, PlayState* play);
void EffChange_SetColors(EffChange* this, s32 arg1);
void func_80A4C5CC(EffChange* this, PlayState* play);
-const ActorInit Eff_Change_InitVars = {
+ActorInit Eff_Change_InitVars = {
ACTOR_EFF_CHANGE,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -56,7 +56,7 @@ void EffChange_Init(Actor* thisx, PlayState* play) {
this->step = 0;
this->actor.shape.rot.y = 0;
this->skeletonInfo.frameCtrl.unk_C = (2.0f / 3.0f);
- ActorCutscene_SetIntentToPlay(0x7B);
+ CutsceneManager_Queue(CS_ID_GLOBAL_ELEGY);
}
void EffChange_Destroy(Actor* thisx, PlayState* play) {
@@ -79,40 +79,41 @@ void func_80A4C5CC(EffChange* this, PlayState* play) {
f32 phi_fv0;
if (func_80183DE0(&this->skeletonInfo)) {
- Actor_MarkForDeath(&this->actor);
- ActorCutscene_Stop(0x7B);
+ Actor_Kill(&this->actor);
+ CutsceneManager_Stop(CS_ID_GLOBAL_ELEGY);
func_800FD2B4(play, 0.0f, 850.0f, 0.2f, 0.0f);
- } else {
- this->step++;
- if (this->skeletonInfo.frameCtrl.unk_10 < 20.0f) {
- if ((this->primColors[3]) < 242) {
- this->primColors[3] += 13;
- } else {
- this->primColors[3] = 255;
- }
- } else if (this->skeletonInfo.frameCtrl.unk_10 > 70.0f) {
- if ((this->primColors[3]) >= 14) {
- this->primColors[3] -= 13;
- } else {
- this->primColors[3] = 0;
- }
+ return;
+ }
+
+ this->step++;
+ if (this->skeletonInfo.frameCtrl.unk_10 < 20.0f) {
+ if ((this->primColors[3]) < 242) {
+ this->primColors[3] += 13;
} else {
this->primColors[3] = 255;
}
-
- phi_fv0 = this->primColors[3] * (1.0f / 255.0f);
- if (phi_fv0 > 1.0f) {
- phi_fv0 = 1.0f;
- } else if (phi_fv0 < 0.0f) {
- phi_fv0 = 0.0f;
+ } else if (this->skeletonInfo.frameCtrl.unk_10 > 70.0f) {
+ if ((this->primColors[3]) >= 14) {
+ this->primColors[3] -= 13;
+ } else {
+ this->primColors[3] = 0;
}
- func_800FD2B4(play, phi_fv0, 850.0f, 0.2f, 0.0f);
- if (ActorCutscene_GetCurrentIndex() != 0x7B) {
- if (ActorCutscene_GetCanPlayNext(0x7B)) {
- ActorCutscene_Start(0x7B, &this->actor);
- } else {
- ActorCutscene_SetIntentToPlay(0x7B);
- }
+ } else {
+ this->primColors[3] = 255;
+ }
+
+ phi_fv0 = this->primColors[3] * (1.0f / 255.0f);
+ if (phi_fv0 > 1.0f) {
+ phi_fv0 = 1.0f;
+ } else if (phi_fv0 < 0.0f) {
+ phi_fv0 = 0.0f;
+ }
+ func_800FD2B4(play, phi_fv0, 850.0f, 0.2f, 0.0f);
+ if (CutsceneManager_GetCurrentCsId() != CS_ID_GLOBAL_ELEGY) {
+ if (CutsceneManager_IsNext(CS_ID_GLOBAL_ELEGY)) {
+ CutsceneManager_Start(CS_ID_GLOBAL_ELEGY, &this->actor);
+ } else {
+ CutsceneManager_Queue(CS_ID_GLOBAL_ELEGY);
}
}
}
@@ -129,7 +130,7 @@ void EffChange_Draw(Actor* thisx, PlayState* play) {
EffChange* this = THIS;
AnimatedMat_DrawStepXlu(play, Lib_SegmentedToVirtual(&gameplay_keep_Matanimheader_028FEC), this->step);
- mtx = GRAPH_ALLOC(play->state.gfxCtx, ALIGN16(this->skeletonInfo.unk_18->unk_1 * sizeof(Mtx)));
+ mtx = GRAPH_ALLOC(play->state.gfxCtx, this->skeletonInfo.unk_18->unk_1 * sizeof(Mtx));
if (mtx != NULL) {
func_8012C2DC(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_Eff_Change/z_eff_change.h b/src/overlays/actors/ovl_Eff_Change/z_eff_change.h
index aed7e534a..194ae3ee2 100644
--- a/src/overlays/actors/ovl_Eff_Change/z_eff_change.h
+++ b/src/overlays/actors/ovl_Eff_Change/z_eff_change.h
@@ -21,6 +21,4 @@ typedef struct EffChange {
/* 0x1C8 */ EffChangeActionFunc actionFunc;
} EffChange; // size = 0x1CC
-extern const ActorInit Eff_Change_InitVars;
-
#endif // Z_EFF_CHANGE_H
diff --git a/src/overlays/actors/ovl_Eff_Dust/overlay.cfg b/src/overlays/actors/ovl_Eff_Dust/overlay.cfg
deleted file mode 100644
index 2833a83d0..000000000
--- a/src/overlays/actors/ovl_Eff_Dust/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Eff_Dust
-z_eff_dust.c
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 e23ed1204..2833477e4 100644
--- a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c
+++ b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c
@@ -24,7 +24,7 @@ void func_80919230(EffDust* this, PlayState* play);
void func_80919768(Actor* thisx, PlayState* play2);
void func_809199FC(Actor* thisx, PlayState* play2);
-const ActorInit Eff_Dust_InitVars = {
+ActorInit Eff_Dust_InitVars = {
ACTOR_EFF_DUST,
ACTORCAT_NPC,
FLAGS,
@@ -171,11 +171,11 @@ void func_80919230(EffDust* this, PlayState* play) {
s32 i;
s32 j;
- if (parent == NULL || parent->update == NULL || !(player->stateFlags1 & 0x1000)) {
+ if (parent == NULL || parent->update == NULL || !(player->stateFlags1 & PLAYER_STATE1_1000)) {
if (this->life != 0) {
this->life--;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
for (i = 0; i < ARRAY_COUNT(this->distanceTraveled); i++) {
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 d73b5ce0e..38b724865 100644
--- a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.h
+++ b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.h
@@ -30,6 +30,4 @@ typedef enum {
/* 0x5 */ EFF_DUST_TYPE_5
} EffDustType;
-extern const ActorInit Eff_Dust_InitVars;
-
#endif // Z_EFF_DUST_H
diff --git a/src/overlays/actors/ovl_Eff_Kamejima_Wave/overlay.cfg b/src/overlays/actors/ovl_Eff_Kamejima_Wave/overlay.cfg
deleted file mode 100644
index 7decfb871..000000000
--- a/src/overlays/actors/ovl_Eff_Kamejima_Wave/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Eff_Kamejima_Wave
-z_eff_kamejima_wave.c
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 2de3d8604..fbe4c27cf 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,6 +4,7 @@
* Description: Wave Created by Turtle Awakening
*/
+#include "prevent_bss_reordering.h"
#include "z_eff_kamejima_wave.h"
#include "objects/object_kamejima/object_kamejima.h"
@@ -22,7 +23,7 @@ void func_80BCEBC0(EffKamejimaWave* this, PlayState* play);
void func_80BCED34(EffKamejimaWave* this, PlayState* play);
void EffKamejimaWave_SetVtxAlpha(u8 alpha);
-const ActorInit Eff_Kamejima_Wave_InitVars = {
+ActorInit Eff_Kamejima_Wave_InitVars = {
ACTOR_EFF_KAMEJIMA_WAVE,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -81,15 +82,15 @@ void func_80BCEBC0(EffKamejimaWave* this, PlayState* play) {
}
void func_80BCEC6C(EffKamejimaWave* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 0x1E0)) {
- Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, 0x1E0));
- if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x1E0)]->action == 2) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_480)) {
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_480));
+ if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_480)]->id == 2) {
this->scaleOffset = 0.05f;
this->actionFunc = func_80BCEBC0;
this->actor.draw = EffKamejimaWave_Draw;
sVtxAlpha = 255;
this->actor.shape.rot.x = 0;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_TORTOISE_WAKE_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_TORTOISE_WAKE_UP);
}
} else {
this->actor.draw = NULL;
@@ -116,9 +117,9 @@ void func_80BCED34(EffKamejimaWave* this, PlayState* play) {
}
void func_80BCEDE0(EffKamejimaWave* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 0x1F6)) {
- Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, 0x1F6));
- if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x1F6)]->action == 2) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_502)) {
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_502));
+ if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_502)]->id == 2) {
this->scaleOffset = 0.03f;
this->actor.scale.x = 0.35f;
this->actionFunc = func_80BCED34;
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 9b4713034..c79537363 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
@@ -21,6 +21,4 @@ typedef enum params {
/* 0x1 */ EFFKAMEJIMAWAVE_PARAMS_1
} EffKamejimaWaveParams;
-extern const ActorInit Eff_Kamejima_Wave_InitVars;
-
#endif // Z_EFF_KAMEJIMA_WAVE_H
diff --git a/src/overlays/actors/ovl_Eff_Lastday/overlay.cfg b/src/overlays/actors/ovl_Eff_Lastday/overlay.cfg
deleted file mode 100644
index 8e1cc8e1d..000000000
--- a/src/overlays/actors/ovl_Eff_Lastday/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Eff_Lastday
-z_eff_lastday.c
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 773e881ed..a37f4ec07 100644
--- a/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.c
+++ b/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.c
@@ -28,7 +28,7 @@ typedef enum EffLastDayAction {
/* 0x3 */ EFFLASTDAY_ACTION_3
} EffLastDayAction;
-const ActorInit Eff_Lastday_InitVars = {
+ActorInit Eff_Lastday_InitVars = {
ACTOR_EFF_LASTDAY,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -49,7 +49,7 @@ void EffLastday_Init(Actor* thisx, PlayState* play2) {
case EFFLASTDAY_PARAMS_1:
this->dList = object_lastday_DL_000510;
this->matAnim = Lib_SegmentedToVirtual(object_lastday_Matanimheader_000608);
- this->csActionCmd = 0x1FC;
+ this->cueType = CS_CMD_ACTOR_CUE_508;
this->actionFunc = func_80BEBDF8;
Actor_SetScale(&this->actor, 1.0f);
break;
@@ -57,7 +57,7 @@ void EffLastday_Init(Actor* thisx, PlayState* play2) {
case EFFLASTDAY_PARAMS_2:
this->dList = object_lastday_DL_000210;
this->matAnim = Lib_SegmentedToVirtual(object_lastday_Matanimheader_000308);
- this->csActionCmd = 0x1FD;
+ this->cueType = CS_CMD_ACTOR_CUE_509;
this->actionFunc = func_80BEBEB8;
Actor_SetScale(&this->actor, 0.5f);
break;
@@ -65,7 +65,7 @@ void EffLastday_Init(Actor* thisx, PlayState* play2) {
case EFFLASTDAY_PARAMS_3:
this->dList = object_lastday_DL_000060;
this->matAnim = Lib_SegmentedToVirtual(object_lastday_Matanimheader_000148);
- this->csActionCmd = 0x1FE;
+ this->cueType = CS_CMD_ACTOR_CUE_510;
this->actionFunc = func_80BEBF78;
Actor_SetScale(&this->actor, 0.2f);
this->actor.home.rot.z = 0;
@@ -74,7 +74,7 @@ void EffLastday_Init(Actor* thisx, PlayState* play2) {
default:
this->dList = object_lastday_DL_000370;
this->matAnim = Lib_SegmentedToVirtual(object_lastday_Matanimheader_000448);
- this->csActionCmd = 0x1FB;
+ this->cueType = CS_CMD_ACTOR_CUE_507;
this->actionFunc = func_80BEBD0C;
Actor_SetScale(&this->actor, 1.0f);
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EFF_LASTDAY, this->actor.world.pos.x,
@@ -94,12 +94,12 @@ void EffLastday_Destroy(Actor* thisx, PlayState* play) {
}
void func_80BEBD0C(EffLastday* this, PlayState* play) {
- u16 csAction;
+ u16 cueId;
- if ((Cutscene_CheckActorAction(play, this->csActionCmd))) {
- Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->csActionCmd));
- csAction = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->csActionCmd)]->action;
- switch (csAction) {
+ if ((Cutscene_IsCueInChannel(play, this->cueType))) {
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType));
+ cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id;
+ switch (cueId) {
default:
this->actor.draw = NULL;
this->alpha = 0;
@@ -128,12 +128,12 @@ void func_80BEBD0C(EffLastday* this, PlayState* play) {
}
void func_80BEBDF8(EffLastday* this, PlayState* play) {
- u16 csAction;
+ u16 cueId;
- if (Cutscene_CheckActorAction(play, this->csActionCmd)) {
- Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->csActionCmd));
- csAction = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->csActionCmd)]->action;
- switch (csAction) {
+ if (Cutscene_IsCueInChannel(play, this->cueType)) {
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType));
+ cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id;
+ switch (cueId) {
default:
this->actor.draw = NULL;
this->step = 0;
@@ -154,12 +154,12 @@ void func_80BEBDF8(EffLastday* this, PlayState* play) {
}
void func_80BEBEB8(EffLastday* this, PlayState* play) {
- u16 csAction;
+ u16 cueId;
- if (Cutscene_CheckActorAction(play, this->csActionCmd)) {
- Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->csActionCmd));
- csAction = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->csActionCmd)]->action;
- switch (csAction) {
+ if (Cutscene_IsCueInChannel(play, this->cueType)) {
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType));
+ cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id;
+ switch (cueId) {
default:
this->actor.draw = NULL;
this->step = 0;
@@ -180,12 +180,12 @@ void func_80BEBEB8(EffLastday* this, PlayState* play) {
}
void func_80BEBF78(EffLastday* this, PlayState* play) {
- u16 csAction;
+ u16 cueId;
- if (Cutscene_CheckActorAction(play, this->csActionCmd)) {
- Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->csActionCmd));
- csAction = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->csActionCmd)]->action;
- switch (csAction) {
+ if (Cutscene_IsCueInChannel(play, this->cueType)) {
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType));
+ cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id;
+ switch (cueId) {
default:
this->actor.draw = NULL;
this->alpha = 0;
@@ -195,7 +195,7 @@ void func_80BEBF78(EffLastday* this, PlayState* play) {
case EFFLASTDAY_ACTION_2:
if (!this->actor.home.rot.z) {
this->actor.home.rot.z = true;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_COMING_FIRE);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_COMING_FIRE);
}
this->actor.draw = EffLastday_Draw;
if (this->alpha < 255) {
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 d1f81a184..0b5002863 100644
--- a/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.h
+++ b/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.h
@@ -15,7 +15,7 @@ typedef struct EffLastday {
/* 0x148 */ AnimatedMaterial* matAnim;
/* 0x14C */ s16 step;
/* 0x14E */ s16 alpha;
- /* 0x150 */ s16 csActionCmd;
+ /* 0x150 */ s16 cueType;
/* 0x154 */ EffLastdayActionFunc actionFunc;
} EffLastday; // size = 0x158
@@ -26,6 +26,4 @@ typedef enum EffLastDayParams {
/* 0x3 */ EFFLASTDAY_PARAMS_3
} EffLastDayParams;
-extern const ActorInit Eff_Lastday_InitVars;
-
#endif // Z_EFF_LASTDAY_H
diff --git a/src/overlays/actors/ovl_Eff_Stk/overlay.cfg b/src/overlays/actors/ovl_Eff_Stk/overlay.cfg
deleted file mode 100644
index 725fd80b3..000000000
--- a/src/overlays/actors/ovl_Eff_Stk/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Eff_Stk
-z_eff_stk.c
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 778417139..4d66cc827 100644
--- a/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.c
+++ b/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.c
@@ -16,7 +16,7 @@ void EffStk_Update(Actor* thisx, PlayState* play);
void EffStk_Draw(Actor* thisx, PlayState* play);
#if 0
-const ActorInit Eff_Stk_InitVars = {
+ActorInit Eff_Stk_InitVars = {
ACTOR_EFF_STK,
ACTORCAT_ITEMACTION,
FLAGS,
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 9c8d5946e..4b2b84783 100644
--- a/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.h
+++ b/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.h
@@ -13,6 +13,4 @@ typedef struct EffStk {
/* 0x14C */ EffStkActionFunc actionFunc;
} EffStk; // size = 0x150
-extern const ActorInit Eff_Stk_InitVars;
-
#endif // Z_EFF_STK_H
diff --git a/src/overlays/actors/ovl_Eff_Zoraband/overlay.cfg b/src/overlays/actors/ovl_Eff_Zoraband/overlay.cfg
deleted file mode 100644
index 57858dabd..000000000
--- a/src/overlays/actors/ovl_Eff_Zoraband/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Eff_Zoraband
-z_eff_zoraband.c
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 b566e5c62..2b1c01c59 100644
--- a/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.c
+++ b/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.c
@@ -18,7 +18,7 @@ void EffZoraband_Draw(Actor* thisx, PlayState* play2);
void EffZoraband_MikauFadeOut(EffZoraband* this, PlayState* play);
-const ActorInit Eff_Zoraband_InitVars = {
+ActorInit Eff_Zoraband_InitVars = {
ACTOR_EFF_ZORABAND,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -43,12 +43,12 @@ void EffZoraband_Destroy(Actor* thisx, PlayState* play) {
}
void EffZoraband_MikauFadeOut(EffZoraband* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 0x20F)) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_527)) {
if ((EFFZORABAND_GET_F(&this->actor) + 2) ==
- play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x20F)]->action) {
+ play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_527)]->id) {
this->stateFlags |= 2;
}
- if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x20F)]->action == 7) {
+ if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_527)]->id == 7) {
this->actor.draw = NULL;
} else {
this->actor.draw = EffZoraband_Draw;
diff --git a/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.h b/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.h
index 2ecaf7187..4fdb977d8 100644
--- a/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.h
+++ b/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.h
@@ -16,6 +16,4 @@ typedef struct EffZoraband {
/* 0x148 */ EffZorabandActionFunc actionFunc;
} EffZoraband; // size = 0x14C
-extern const ActorInit Eff_Zoraband_InitVars;
-
#endif // Z_EFF_ZORABAND_H
diff --git a/src/overlays/actors/ovl_Elf_Msg/overlay.cfg b/src/overlays/actors/ovl_Elf_Msg/overlay.cfg
deleted file mode 100644
index 91ab17157..000000000
--- a/src/overlays/actors/ovl_Elf_Msg/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Elf_Msg
-z_elf_msg.c
diff --git a/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c b/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c
index 5d3905914..c88835373 100644
--- a/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c
+++ b/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c
@@ -18,7 +18,7 @@ void ElfMsg_Update(Actor* thisx, PlayState* play);
void ElfMsg_SetupAction(ElfMsg* this, ElfMsgActionFunc actionFunc);
void func_8092E284(ElfMsg* this, PlayState* play);
-const ActorInit Elf_Msg_InitVars = {
+ActorInit Elf_Msg_InitVars = {
ACTOR_ELF_MSG,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -46,7 +46,7 @@ s32 func_8092DF9C(ElfMsg* this, PlayState* play) {
if (ELFMSG_GET_SWITCHFLAG(&this->actor) != 0x7F) {
Flags_SetSwitch(play, ELFMSG_GET_SWITCHFLAG(&this->actor));
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return true;
}
if (this->actor.home.rot.y == 0x81) {
@@ -54,7 +54,7 @@ s32 func_8092DF9C(ElfMsg* this, PlayState* play) {
if (ELFMSG_GET_SWITCHFLAG(&this->actor) != 0x7F) {
Flags_SetSwitch(play, ELFMSG_GET_SWITCHFLAG(&this->actor));
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return true;
}
}
@@ -63,7 +63,7 @@ s32 func_8092DF9C(ElfMsg* this, PlayState* play) {
}
if (Flags_GetSwitch(play, ELFMSG_GET_SWITCHFLAG(&this->actor))) {
(void)"共倒れ"; // "Collapse together"
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return true;
}
return false;
@@ -111,21 +111,21 @@ void func_8092E284(ElfMsg* this, PlayState* play) {
if ((player->tatlActor != NULL) && ((func_8092E1FC(this)))) {
player->tatlTextId = func_8092E1D0(this);
- ActorCutscene_SetIntentToPlay(0x7C);
+ CutsceneManager_Queue(CS_ID_GLOBAL_TALK);
tatl->elfMsg = &this->actor;
- if (this->actor.cutscene == -1) {
- this->actor.cutscene = 0x7C;
+ if (this->actor.csId == CS_ID_NONE) {
+ this->actor.csId = CS_ID_GLOBAL_TALK;
}
if ((player->tatlTextId < 0) && (this->actor.home.rot.x < 0)) {
- if (ActorCutscene_GetCurrentIndex() == 0x7D) {
- ActorCutscene_Stop(0x7D);
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
- } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_DOOR) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_DOOR);
+ CutsceneManager_Queue(this->actor.csId);
+ } else if (CutsceneManager_IsNext(this->actor.csId)) {
this->actor.home.rot.x = 0;
- ActorCutscene_Start(this->actor.cutscene, &this->actor);
+ CutsceneManager_Start(this->actor.csId, &this->actor);
func_800E0348(play->cameraPtrs[CAM_ID_MAIN]);
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
}
@@ -139,9 +139,12 @@ void ElfMsg_Update(Actor* thisx, PlayState* play) {
if (ELFMSG_GET_SWITCHFLAG(thisx) != 0x7F) {
Flags_SetSwitch(play, ELFMSG_GET_SWITCHFLAG(thisx));
}
- Actor_MarkForDeath(&this->actor);
- } else if ((this->actor.home.rot.y >= 0) || (this->actor.home.rot.y < -0x80) ||
- (Flags_GetSwitch(play, -1 - this->actor.home.rot.y))) {
+ Actor_Kill(&this->actor);
+ return;
+ }
+
+ if ((this->actor.home.rot.y >= 0) || (this->actor.home.rot.y < -0x80) ||
+ (Flags_GetSwitch(play, -1 - this->actor.home.rot.y))) {
this->actionFunc(this, play);
}
}
diff --git a/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.h b/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.h
index f335f0158..51a3ddda3 100644
--- a/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.h
+++ b/src/overlays/actors/ovl_Elf_Msg/z_elf_msg.h
@@ -16,6 +16,4 @@ typedef struct ElfMsg {
/* 0x144 */ ElfMsgActionFunc actionFunc;
} ElfMsg; // size = 0x148
-extern const ActorInit Elf_Msg_InitVars;
-
#endif // Z_ELF_MSG_H
diff --git a/src/overlays/actors/ovl_Elf_Msg2/overlay.cfg b/src/overlays/actors/ovl_Elf_Msg2/overlay.cfg
deleted file mode 100644
index 15a73db5d..000000000
--- a/src/overlays/actors/ovl_Elf_Msg2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Elf_Msg2
-z_elf_msg2.c
diff --git a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c
index 6e78ef085..8244c7fb6 100644
--- a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c
+++ b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c
@@ -18,7 +18,7 @@ s32 func_8096EE50(ElfMsg2* this);
void func_8096EF98(ElfMsg2* this, PlayState* play);
void func_8096EFD0(ElfMsg2* this, PlayState* play);
-const ActorInit Elf_Msg2_InitVars = {
+ActorInit Elf_Msg2_InitVars = {
ACTOR_ELF_MSG2,
ACTORCAT_BG,
FLAGS,
@@ -46,7 +46,7 @@ s32 func_8096EC4C(ElfMsg2* this, PlayState* play) {
if (ELFMSG2_GET_SWITCHFLAG(&this->actor) != 0x7F) {
Flags_SetSwitch(play, ELFMSG2_GET_SWITCHFLAG(&this->actor));
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return true;
}
if (this->actor.home.rot.y == 129) {
@@ -56,7 +56,7 @@ s32 func_8096EC4C(ElfMsg2* this, PlayState* play) {
if (ELFMSG2_GET_SWITCHFLAG(&this->actor) != 0x7F) {
Flags_SetSwitch(play, ELFMSG2_GET_SWITCHFLAG(&this->actor));
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return true;
}
}
@@ -65,7 +65,7 @@ s32 func_8096EC4C(ElfMsg2* this, PlayState* play) {
}
if (Flags_GetSwitch(play, ELFMSG2_GET_SWITCHFLAG(&this->actor))) {
(void)"共倒れ"; // "Collapse together"
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return true;
}
return false;
@@ -100,27 +100,29 @@ s32 func_8096EE50(ElfMsg2* this) {
void func_8096EE64(ElfMsg2* this, PlayState* play) {
if (Actor_TextboxIsClosing(&this->actor, play)) {
- if (this->actor.cutscene != -1) {
- if (ActorCutscene_GetCurrentIndex() == this->actor.cutscene) {
- ActorCutscene_Stop(this->actor.cutscene);
+ if (this->actor.csId != CS_ID_NONE) {
+ if (CutsceneManager_GetCurrentCsId() == this->actor.csId) {
+ CutsceneManager_Stop(this->actor.csId);
}
}
+
if (this->actor.home.rot.z != 1) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
if (ELFMSG2_GET_SWITCHFLAG(&this->actor) != 0x7F) {
Flags_SetSwitch(play, ELFMSG2_GET_SWITCHFLAG(&this->actor));
}
- } else {
- ElfMsg2_SetupAction(this, func_8096EF98);
+ return;
}
- } else if ((this->actor.cutscene != -1) && (ActorCutscene_GetCurrentIndex() != this->actor.cutscene)) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
- } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_Start(this->actor.cutscene, &this->actor);
+
+ ElfMsg2_SetupAction(this, func_8096EF98);
+ } else if ((this->actor.csId != CS_ID_NONE) && (CutsceneManager_GetCurrentCsId() != this->actor.csId)) {
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->actor.csId);
+ } else if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_Start(this->actor.csId, &this->actor);
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
}
diff --git a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.h b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.h
index e8b48dfd7..4d9583d20 100644
--- a/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.h
+++ b/src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.h
@@ -15,6 +15,4 @@ typedef struct ElfMsg2 {
/* 0x144 */ ElfMsg2ActionFunc actionFunc;
} ElfMsg2; // size = 0x148
-extern const ActorInit Elf_Msg2_InitVars;
-
#endif // Z_ELF_MSG2_H
diff --git a/src/overlays/actors/ovl_Elf_Msg3/overlay.cfg b/src/overlays/actors/ovl_Elf_Msg3/overlay.cfg
deleted file mode 100644
index e39f7e290..000000000
--- a/src/overlays/actors/ovl_Elf_Msg3/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Elf_Msg3
-z_elf_msg3.c
diff --git a/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.c b/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.c
index a62a22ad0..e3e8b7bc5 100644
--- a/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.c
+++ b/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.c
@@ -17,7 +17,7 @@ void ElfMsg3_Update(Actor* thisx, PlayState* play);
void func_80A2CF7C(ElfMsg3* this, PlayState* play);
-const ActorInit Elf_Msg3_InitVars = {
+ActorInit Elf_Msg3_InitVars = {
ACTOR_ELF_MSG3,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -45,7 +45,7 @@ s32 func_80A2CD1C(ElfMsg3* this, PlayState* play) {
if (ELFMSG3_GET_SWITCH(&this->actor) != 0x7F) {
Flags_SetSwitch(play, ELFMSG3_GET_SWITCH(&this->actor));
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return true;
}
if (this->actor.home.rot.y == 0x81) {
@@ -53,7 +53,7 @@ s32 func_80A2CD1C(ElfMsg3* this, PlayState* play) {
if (ELFMSG3_GET_SWITCH(&this->actor) != 0x7F) {
Flags_SetSwitch(play, ELFMSG3_GET_SWITCH(&this->actor));
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return true;
}
}
@@ -62,7 +62,7 @@ s32 func_80A2CD1C(ElfMsg3* this, PlayState* play) {
}
if (Flags_GetSwitch(play, ELFMSG3_GET_SWITCH(&this->actor))) {
(void)"共倒れ"; // "Collapse together"
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return true;
}
return false;
@@ -110,20 +110,20 @@ void func_80A2CF7C(ElfMsg3* this, PlayState* play) {
((player->actor.world.pos.y - this->actor.world.pos.y) < (100.0f * this->actor.scale.y))) &&
(fabsf(player->actor.world.pos.z - this->actor.world.pos.z) < (100.0f * this->actor.scale.z))) {
player->tatlTextId = func_80A2CF50(this);
- ActorCutscene_SetIntentToPlay(0x7C);
+ CutsceneManager_Queue(CS_ID_GLOBAL_TALK);
tatl->elfMsg = &this->actor;
- if (this->actor.cutscene == -1) {
- this->actor.cutscene = 0x7C;
+ if (this->actor.csId == CS_ID_NONE) {
+ this->actor.csId = CS_ID_GLOBAL_TALK;
}
if ((player->tatlTextId < 0) && (this->actor.home.rot.x < 0)) {
- if (ActorCutscene_GetCurrentIndex() == 0x7D) {
- ActorCutscene_Stop(0x7D);
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
- } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_Start(this->actor.cutscene, &this->actor);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_DOOR) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_DOOR);
+ CutsceneManager_Queue(this->actor.csId);
+ } else if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_Start(this->actor.csId, &this->actor);
func_800E0348(play->cameraPtrs[CAM_ID_MAIN]);
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
}
@@ -137,9 +137,12 @@ void ElfMsg3_Update(Actor* thisx, PlayState* play) {
if (ELFMSG3_GET_SWITCH(thisx) != 0x7F) {
Flags_SetSwitch(play, ELFMSG3_GET_SWITCH(thisx));
}
- Actor_MarkForDeath(&this->actor);
- } else if ((this->actor.home.rot.y >= 0) || (this->actor.home.rot.y < -0x80) ||
- (Flags_GetSwitch(play, -1 - this->actor.home.rot.y))) {
+ Actor_Kill(&this->actor);
+ return;
+ }
+
+ if ((this->actor.home.rot.y >= 0) || (this->actor.home.rot.y < -0x80) ||
+ (Flags_GetSwitch(play, -1 - this->actor.home.rot.y))) {
this->actionFunc(this, play);
}
}
diff --git a/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.h b/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.h
index cb71166e8..615cde1eb 100644
--- a/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.h
+++ b/src/overlays/actors/ovl_Elf_Msg3/z_elf_msg3.h
@@ -16,6 +16,4 @@ typedef struct ElfMsg3 {
/* 0x144 */ ElfMsg3ActionFunc actionFunc;
} ElfMsg3; // size = 0x148
-extern const ActorInit Elf_Msg3_InitVars;
-
#endif // Z_ELF_MSG3_H
diff --git a/src/overlays/actors/ovl_Elf_Msg4/overlay.cfg b/src/overlays/actors/ovl_Elf_Msg4/overlay.cfg
deleted file mode 100644
index 2bfe9ff86..000000000
--- a/src/overlays/actors/ovl_Elf_Msg4/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Elf_Msg4
-z_elf_msg4.c
diff --git a/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c b/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c
index 4c6f143ff..c917f01a7 100644
--- a/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c
+++ b/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.c
@@ -22,7 +22,7 @@ s32 func_80AFD380(ElfMsg4* this, PlayState* play);
s32 ElfMsg4_GetTextId(ElfMsg4* this);
s32 func_80AFD5E0(ElfMsg4* this);
-const ActorInit Elf_Msg4_InitVars = {
+ActorInit Elf_Msg4_InitVars = {
ACTOR_ELF_MSG4,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -46,7 +46,7 @@ s32 func_80AFD380(ElfMsg4* this, PlayState* play) {
if (ELFMSG4_GET_SWITCHFLAG(&this->actor) != 0x7F) {
Flags_SetSwitch(play, ELFMSG4_GET_SWITCHFLAG(&this->actor));
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return true;
}
if (this->actor.home.rot.y == 0x81) {
@@ -54,7 +54,7 @@ s32 func_80AFD380(ElfMsg4* this, PlayState* play) {
if (ELFMSG4_GET_SWITCHFLAG(&this->actor) != 0x7F) {
Flags_SetSwitch(play, ELFMSG4_GET_SWITCHFLAG(&this->actor));
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return true;
}
}
@@ -63,7 +63,7 @@ s32 func_80AFD380(ElfMsg4* this, PlayState* play) {
}
if (Flags_GetSwitch(play, ELFMSG4_GET_SWITCHFLAG(&this->actor))) {
(void)"共倒れ"; // "Collapse together"
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return true;
}
return false;
@@ -115,20 +115,20 @@ void func_80AFD668(ElfMsg4* this, PlayState* play) {
if ((player->tatlActor != NULL) && func_80AFD5E0(this)) {
player->tatlTextId = ElfMsg4_GetTextId(this);
- ActorCutscene_SetIntentToPlay(0x7C);
+ CutsceneManager_Queue(CS_ID_GLOBAL_TALK);
tatl->elfMsg = this->elfMsg5;
- if (this->actor.cutscene == -1) {
- this->actor.cutscene = 0x7C;
+ if (this->actor.csId == CS_ID_NONE) {
+ this->actor.csId = CS_ID_GLOBAL_TALK;
}
if ((player->tatlTextId < 0) && (this->actor.home.rot.x < 0)) {
- if (ActorCutscene_GetCurrentIndex() == 0x7D) {
- ActorCutscene_Stop(0x7D);
- ActorCutscene_SetIntentToPlay((s16)this->actor.cutscene);
- } else if (ActorCutscene_GetCanPlayNext((s16)this->actor.cutscene)) {
- ActorCutscene_Start(this->actor.cutscene, &this->actor);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_DOOR) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_DOOR);
+ CutsceneManager_Queue(this->actor.csId);
+ } else if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_Start(this->actor.csId, &this->actor);
func_800E0348(play->cameraPtrs[CAM_ID_MAIN]);
} else {
- ActorCutscene_SetIntentToPlay((s16)this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
}
@@ -139,7 +139,7 @@ void func_80AFD770(ElfMsg4* this, PlayState* play) {
while (bgActor != NULL) {
if ((bgActor->id != ACTOR_ELF_MSG5) || (ELFMSG4_GET_TEXT(&this->actor) != ELFMSG5_GET_FF(bgActor)) ||
- (this->actor.cutscene != bgActor->cutscene)) {
+ (this->actor.csId != bgActor->csId)) {
bgActor = bgActor->next;
} else {
this->elfMsg5 = bgActor;
@@ -156,14 +156,20 @@ void ElfMsg4_Update(Actor* thisx, PlayState* play) {
if (!func_80AFD380(this, play)) {
bgActor = this->elfMsg5;
if ((bgActor != NULL) && (bgActor->update == NULL)) {
- Actor_MarkForDeath(&this->actor);
- } else if ((bgActor != NULL) && (Actor_ProcessTalkRequest(bgActor, &play->state))) {
+ Actor_Kill(&this->actor);
+ return;
+ }
+
+ if ((bgActor != NULL) && (Actor_ProcessTalkRequest(bgActor, &play->state))) {
if (ELFMSG4_GET_SWITCHFLAG(thisx) != 0x7F) {
Flags_SetSwitch(play, ELFMSG4_GET_SWITCHFLAG(thisx));
}
- Actor_MarkForDeath(&this->actor);
- } else if ((this->actor.home.rot.y >= 0) || (this->actor.home.rot.y < -0x80) ||
- (Flags_GetSwitch(play, -1 - this->actor.home.rot.y))) {
+ Actor_Kill(&this->actor);
+ return;
+ }
+
+ if ((this->actor.home.rot.y >= 0) || (this->actor.home.rot.y < -0x80) ||
+ (Flags_GetSwitch(play, -1 - this->actor.home.rot.y))) {
this->actionFunc(this, play);
}
}
diff --git a/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.h b/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.h
index f3d523ba4..e9ccbc906 100644
--- a/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.h
+++ b/src/overlays/actors/ovl_Elf_Msg4/z_elf_msg4.h
@@ -17,6 +17,4 @@ typedef struct ElfMsg4 {
/* 0x148 */ ElfMsg4ActionFunc actionFunc;
} ElfMsg4; // size = 0x14C
-extern const ActorInit Elf_Msg4_InitVars;
-
#endif // Z_ELF_MSG4_H
diff --git a/src/overlays/actors/ovl_Elf_Msg5/overlay.cfg b/src/overlays/actors/ovl_Elf_Msg5/overlay.cfg
deleted file mode 100644
index d528de342..000000000
--- a/src/overlays/actors/ovl_Elf_Msg5/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Elf_Msg5
-z_elf_msg5.c
diff --git a/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.c b/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.c
index bcc88ad5d..db97a0f74 100644
--- a/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.c
+++ b/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.c
@@ -17,7 +17,7 @@ void ElfMsg5_Update(Actor* thisx, PlayState* play);
void func_80AFDB38(ElfMsg5* this, PlayState* play);
s32 func_80AFD990(ElfMsg5* this, PlayState* play);
-const ActorInit Elf_Msg5_InitVars = {
+ActorInit Elf_Msg5_InitVars = {
ACTOR_ELF_MSG5,
ACTORCAT_BG,
FLAGS,
@@ -41,7 +41,7 @@ s32 func_80AFD990(ElfMsg5* this, PlayState* play) {
if (ELFMSG5_GET_SWITCHFLAG(&this->actor) != 0x7F) {
Flags_SetSwitch(play, ELFMSG5_GET_SWITCHFLAG(&this->actor));
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return true;
}
if (this->actor.home.rot.y == 0x81) {
@@ -50,7 +50,7 @@ s32 func_80AFD990(ElfMsg5* this, PlayState* play) {
if (ELFMSG5_GET_SWITCHFLAG(&this->actor) != 0x7F) {
Flags_SetSwitch(play, ELFMSG5_GET_SWITCHFLAG(&this->actor));
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return true;
}
}
@@ -59,7 +59,7 @@ s32 func_80AFD990(ElfMsg5* this, PlayState* play) {
}
if (Flags_GetSwitch(play, ELFMSG5_GET_SWITCHFLAG(&this->actor))) {
(void)"共倒れ"; // Collapse together
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return true;
}
return false;
diff --git a/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.h b/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.h
index af2589434..36daecca1 100644
--- a/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.h
+++ b/src/overlays/actors/ovl_Elf_Msg5/z_elf_msg5.h
@@ -15,6 +15,4 @@ typedef struct ElfMsg5 {
/* 0x144 */ ElfMsg5ActionFunc actionFunc;
} ElfMsg5; // size = 0x148
-extern const ActorInit Elf_Msg5_InitVars;
-
#endif // Z_ELF_MSG5_H
diff --git a/src/overlays/actors/ovl_Elf_Msg6/overlay.cfg b/src/overlays/actors/ovl_Elf_Msg6/overlay.cfg
deleted file mode 100644
index 9ded97384..000000000
--- a/src/overlays/actors/ovl_Elf_Msg6/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Elf_Msg6
-z_elf_msg6.c
diff --git a/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c b/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c
index e8c874df4..89fbd9f6b 100644
--- a/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c
+++ b/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c
@@ -23,7 +23,7 @@ void func_80BA2048(ElfMsg6* this, PlayState* play);
void func_80BA215C(ElfMsg6* this, PlayState* play);
void func_80BA21C4(ElfMsg6* this, PlayState* play);
-const ActorInit Elf_Msg6_InitVars = {
+ActorInit Elf_Msg6_InitVars = {
ACTOR_ELF_MSG6,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -41,19 +41,19 @@ static InitChainEntry sInitChain[] = {
};
s32 func_80BA15A0(void) {
- if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOWLA) && !(gSaveContext.save.weekEventReg[87] & 0x10)) {
+ if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_87_10)) {
return true;
}
- if (CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT) && !(gSaveContext.save.weekEventReg[87] & 0x20)) {
+ if (CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_87_20)) {
return true;
}
- if (CHECK_QUEST_ITEM(QUEST_REMAINS_GYORG) && !(gSaveContext.save.weekEventReg[87] & 0x40)) {
+ if (CHECK_QUEST_ITEM(QUEST_REMAINS_GYORG) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_87_40)) {
return true;
}
- if (CHECK_QUEST_ITEM(QUEST_REMAINS_TWINMOLD) && !(gSaveContext.save.weekEventReg[87] & 0x80)) {
+ if (CHECK_QUEST_ITEM(QUEST_REMAINS_TWINMOLD) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_87_80)) {
return true;
}
@@ -61,25 +61,25 @@ s32 func_80BA15A0(void) {
}
void func_80BA165C(void) {
- if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOWLA)) {
- gSaveContext.save.weekEventReg[87] |= 0x10;
+ if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_87_10);
}
if (CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT)) {
- gSaveContext.save.weekEventReg[87] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_87_20);
}
if (CHECK_QUEST_ITEM(QUEST_REMAINS_GYORG)) {
- gSaveContext.save.weekEventReg[87] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_87_40);
}
if (CHECK_QUEST_ITEM(QUEST_REMAINS_TWINMOLD)) {
- gSaveContext.save.weekEventReg[87] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_87_80);
}
}
s32 func_80BA16F4(ElfMsg6* this, PlayState* play) {
- if (!(gSaveContext.save.weekEventReg[31] & 4) && (INV_CONTENT(ITEM_MASK_DEKU) == ITEM_MASK_DEKU)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_31_04) && (INV_CONTENT(ITEM_MASK_DEKU) == ITEM_MASK_DEKU)) {
this->actor.textId = 0x216;
return false;
}
@@ -88,13 +88,13 @@ s32 func_80BA16F4(ElfMsg6* this, PlayState* play) {
return true;
}
- if (!CHECK_QUEST_ITEM(QUEST_REMAINS_ODOWLA)) {
+ if (!CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA)) {
this->actor.textId = 0x256;
return false;
}
if (!CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT)) {
- if (gSaveContext.save.weekEventReg[31] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_31_01)) {
this->actor.textId = 0x257;
} else {
this->actor.textId = 0x231;
@@ -103,7 +103,7 @@ s32 func_80BA16F4(ElfMsg6* this, PlayState* play) {
}
if (!CHECK_QUEST_ITEM(QUEST_REMAINS_GYORG)) {
- if (gSaveContext.save.weekEventReg[31] & 2) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_31_02)) {
this->actor.textId = 0x258;
} else {
this->actor.textId = 0x232;
@@ -112,7 +112,7 @@ s32 func_80BA16F4(ElfMsg6* this, PlayState* play) {
}
if (!CHECK_QUEST_ITEM(QUEST_REMAINS_TWINMOLD)) {
- if (gSaveContext.save.weekEventReg[80] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_80_04)) {
this->actor.textId = 0x259;
} else {
this->actor.textId = 0x233;
@@ -147,30 +147,30 @@ void ElfMsg6_Init(Actor* thisx, PlayState* play) {
case 0:
this->actionFunc = func_80BA1E30;
if (func_80BA16F4(this, play)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
break;
case 1:
this->actionFunc = func_80BA1F80;
- if ((this->actor.cutscene == -1) || ((ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) &&
- Flags_GetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor)))) {
- Actor_MarkForDeath(&this->actor);
+ if ((this->actor.csId == CS_ID_NONE) || ((ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) &&
+ Flags_GetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor)))) {
+ Actor_Kill(&this->actor);
return;
}
switch (ELFMSG6_GET_F0(&this->actor)) {
case 0:
- if (gSaveContext.save.inventory.items[ITEM_HOOKSHOT] != ITEM_HOOKSHOT) {
- Actor_MarkForDeath(&this->actor);
+ if (gSaveContext.save.saveInfo.inventory.items[ITEM_HOOKSHOT] != ITEM_HOOKSHOT) {
+ Actor_Kill(&this->actor);
return;
}
break;
case 1:
- if (gSaveContext.save.weekEventReg[83] & 2) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_83_02)) {
+ Actor_Kill(&this->actor);
return;
}
break;
@@ -179,19 +179,19 @@ void ElfMsg6_Init(Actor* thisx, PlayState* play) {
case 2:
if (INV_CONTENT(ITEM_OCARINA) == ITEM_OCARINA) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
- if (gSaveContext.save.weekEventReg[8] & 0x40) {
- if (gSaveContext.save.weekEventReg[88] & 0x20) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_88_20)) {
+ Actor_Kill(&this->actor);
return;
}
this->actor.textId = 0x25B;
} else {
- if (!(gSaveContext.save.weekEventReg[74] & 0x20) || (gSaveContext.save.weekEventReg[79] & 0x10)) {
- Actor_MarkForDeath(&this->actor);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_74_20) || CHECK_WEEKEVENTREG(WEEKEVENTREG_79_10)) {
+ Actor_Kill(&this->actor);
return;
}
this->actor.textId = 0x224;
@@ -202,9 +202,9 @@ void ElfMsg6_Init(Actor* thisx, PlayState* play) {
case 3:
if (((ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) &&
Flags_GetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor))) ||
- (gSaveContext.save.weekEventReg[88] & 0x10) || (gSaveContext.save.weekEventReg[91] & 1) ||
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_88_10) || CHECK_WEEKEVENTREG(WEEKEVENTREG_91_01) ||
(INV_CONTENT(ITEM_MASK_ZORA) == ITEM_MASK_ZORA)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
this->actionFunc = func_80BA2048;
@@ -246,10 +246,10 @@ void func_80BA1C88(ElfMsg6* this, PlayState* play, s16 arg2) {
if (player->tatlActor != NULL) {
player->tatlTextId = arg2;
- ActorCutscene_SetIntentToPlay(0x7C);
+ CutsceneManager_Queue(CS_ID_GLOBAL_TALK);
sp20->elfMsg = &this->actor;
- if (this->actor.cutscene == -1) {
- this->actor.cutscene = 0x7C;
+ if (this->actor.csId == CS_ID_NONE) {
+ this->actor.csId = CS_ID_GLOBAL_TALK;
}
}
}
@@ -265,25 +265,25 @@ void func_80BA1CF8(ElfMsg6* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
switch (this->actor.textId) {
case 0x224:
- gSaveContext.save.weekEventReg[79] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_79_10);
break;
case 0x25B:
- gSaveContext.save.weekEventReg[88] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_88_20);
break;
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
- if ((this->actor.textId == 0x224) && (gSaveContext.save.weekEventReg[8] & 0x40)) {
+ if ((this->actor.textId == 0x224) && CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40)) {
this->actor.textId = 0x25B;
- } else if (func_80BA1C00(this) && (player->actor.speedXZ > 1.0f)) {
+ } else if (func_80BA1C00(this) && (player->actor.speed > 1.0f)) {
player->tatlTextId = -this->actor.textId;
- ActorCutscene_SetIntentToPlay(0x7C);
+ CutsceneManager_Queue(CS_ID_GLOBAL_TALK);
sp20->elfMsg = &this->actor;
- if (this->actor.cutscene == -1) {
- this->actor.cutscene = 0x7C;
+ if (this->actor.csId == CS_ID_NONE) {
+ this->actor.csId = CS_ID_GLOBAL_TALK;
}
}
}
@@ -299,50 +299,51 @@ void func_80BA1E30(ElfMsg6* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
switch (this->actor.textId) {
case 0x216:
- gSaveContext.save.weekEventReg[31] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_31_04);
break;
case 0x231:
- gSaveContext.save.weekEventReg[31] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_31_01);
break;
case 0x232:
- gSaveContext.save.weekEventReg[31] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_31_02);
break;
case 0x233:
- gSaveContext.save.weekEventReg[80] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_80_04);
break;
}
func_80BA165C();
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
- if (func_80BA1C00(this) && (player->actor.speedXZ > 1.0f)) {
+ if (func_80BA1C00(this) && (player->actor.speed > 1.0f)) {
player->tatlTextId = -this->actor.textId;
- ActorCutscene_SetIntentToPlay(0x7C);
+ CutsceneManager_Queue(CS_ID_GLOBAL_TALK);
sp20->elfMsg = &this->actor;
- if (this->actor.cutscene == -1) {
- this->actor.cutscene = 0x7C;
+ if (this->actor.csId == CS_ID_NONE) {
+ this->actor.csId = CS_ID_GLOBAL_TALK;
}
}
}
void func_80BA1F80(ElfMsg6* this, PlayState* play) {
- if (((ELFMSG6_GET_F0(&this->actor)) == 1) && (gSaveContext.save.weekEventReg[83] & 2)) {
- Actor_MarkForDeath(&this->actor);
+ if ((ELFMSG6_GET_F0(&this->actor) == 1) && CHECK_WEEKEVENTREG(WEEKEVENTREG_83_02)) {
+ Actor_Kill(&this->actor);
return;
}
if (func_80BA1C00(this)) {
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, NULL);
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, NULL);
Flags_SetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor));
- Actor_MarkForDeath(&this->actor);
- } else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ Actor_Kill(&this->actor);
+ return;
}
+
+ CutsceneManager_Queue(this->actor.csId);
}
}
@@ -357,14 +358,14 @@ void func_80BA2048(ElfMsg6* this, PlayState* play) {
if (ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) {
Flags_SetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor));
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
if (((ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) && Flags_GetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor))) ||
- (gSaveContext.save.weekEventReg[88] & 0x10) || (gSaveContext.save.weekEventReg[91] & 1) ||
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_88_10) || CHECK_WEEKEVENTREG(WEEKEVENTREG_91_01) ||
(INV_CONTENT(ITEM_MASK_ZORA) == ITEM_MASK_ZORA)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -375,7 +376,7 @@ void func_80BA2048(ElfMsg6* this, PlayState* play) {
void func_80BA215C(ElfMsg6* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -392,13 +393,13 @@ void func_80BA21C4(ElfMsg6* this, PlayState* play) {
if (ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) {
Flags_SetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor));
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
if (((ELFMSG6_SWITCHFLAG(&this->actor) != 0x7F) && Flags_GetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor))) ||
CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
diff --git a/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.h b/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.h
index cd33b350b..8e9a5d0ed 100644
--- a/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.h
+++ b/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.h
@@ -16,6 +16,4 @@ typedef struct ElfMsg6 {
/* 0x144 */ ElfMsg6ActionFunc actionFunc;
} ElfMsg6; // size = 0x148
-extern const ActorInit Elf_Msg6_InitVars;
-
#endif // Z_ELF_MSG6_H
diff --git a/src/overlays/actors/ovl_En_Ah/overlay.cfg b/src/overlays/actors/ovl_En_Ah/overlay.cfg
deleted file mode 100644
index 694256c53..000000000
--- a/src/overlays/actors/ovl_En_Ah/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ah
-z_en_ah.c
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 7c0dfa71c..d9fbeb6f0 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(0x32, 0x20, 0x1C - 0x19),
+ /* 0x15 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_50_20, 0x1C - 0x19),
/* 0x19 */ SCHEDULE_CMD_RET_VAL_L(1),
/* 0x1C */ SCHEDULE_CMD_RET_NONE(),
/* 0x1D */ SCHEDULE_CMD_RET_VAL_L(3),
@@ -47,7 +47,7 @@ s32 D_80BD3DF8[] = { 0x00330100, 0x050E28FE, 0x0C100E28, -0x03F3F000 };
s32 D_80BD3E08[] = { 0x0E28FD0C, 0x0F29540C, 0x10000000 };
-const ActorInit En_Ah_InitVars = {
+ActorInit En_Ah_InitVars = {
ACTOR_EN_AH,
ACTORCAT_NPC,
FLAGS,
@@ -105,7 +105,7 @@ TexturePtr D_80BD3F14[] = {
object_ah_Tex_006D70, object_ah_Tex_007570, object_ah_Tex_007D70, object_ah_Tex_007570, object_ah_Tex_008570,
};
-s32 func_80BD2A30(EnAh* this, PlayState* play, u8 actorCat, s16 actorId) {
+Actor* func_80BD2A30(EnAh* this, PlayState* play, u8 actorCat, s16 actorId) {
Actor* tempActor;
Actor* foundActor = NULL;
@@ -307,7 +307,7 @@ s32 func_80BD3198(EnAh* this, PlayState* play) {
Player* player = GET_PLAYER(play);
u16 temp = play->msgCtx.currentTextId;
- if (player->stateFlags1 & 0x40) {
+ if (player->stateFlags1 & PLAYER_STATE1_40) {
if (this->unk_2DA != temp) {
if (temp == 0x2954) {
this->unk_18C = func_80BD3118;
@@ -512,7 +512,7 @@ void EnAh_Init(Actor* thisx, PlayState* play) {
EnAh* this = THIS;
if (func_80BD2A30(this, play, ACTORCAT_NPC, ACTOR_EN_AH)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -554,10 +554,10 @@ void EnAh_Update(Actor* thisx, PlayState* play) {
radius = this->collider.dim.radius + 60;
height = this->collider.dim.height + 10;
- func_8013C964(&this->actor, play, radius, height, PLAYER_AP_NONE, this->unk_2D8 & 7);
+ func_8013C964(&this->actor, play, radius, height, PLAYER_IA_NONE, this->unk_2D8 & 7);
if (!(this->unk_2D8 & 0x10)) {
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
}
func_80BD2BA4(this, play);
}
diff --git a/src/overlays/actors/ovl_En_Ah/z_en_ah.h b/src/overlays/actors/ovl_En_Ah/z_en_ah.h
index 78872a270..d361a8358 100644
--- a/src/overlays/actors/ovl_En_Ah/z_en_ah.h
+++ b/src/overlays/actors/ovl_En_Ah/z_en_ah.h
@@ -38,6 +38,4 @@ typedef struct EnAh {
/* 0x300 */ s32 unk_300;
} EnAh; // size = 0x304
-extern const ActorInit En_Ah_InitVars;
-
#endif // Z_EN_AH_H
diff --git a/src/overlays/actors/ovl_En_Akindonuts/overlay.cfg b/src/overlays/actors/ovl_En_Akindonuts/overlay.cfg
deleted file mode 100644
index a3e371656..000000000
--- a/src/overlays/actors/ovl_En_Akindonuts/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Akindonuts
-z_en_akindonuts.c
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 4e7a51c97..41dba0aab 100644
--- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c
+++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c
@@ -31,7 +31,7 @@ void func_80BEF9F0(EnAkindonuts* this, PlayState* play);
void func_80BEFAF0(EnAkindonuts* this, PlayState* play);
void func_80BEFD74(EnAkindonuts* this, PlayState* play);
-const ActorInit En_Akindonuts_InitVars = {
+ActorInit En_Akindonuts_InitVars = {
ACTOR_EN_AKINDONUTS,
ACTORCAT_NPC,
FLAGS,
@@ -129,10 +129,10 @@ static InitChainEntry sInitChain[] = {
};
void func_80BECBE0(EnAkindonuts* this, s16 arg1) {
- f32 sp24 = Math_CosS(this->actor.world.rot.x) * this->actor.speedXZ;
+ f32 sp24 = Math_CosS(this->actor.world.rot.x) * this->actor.speed;
this->actor.velocity.x = Math_SinS(this->actor.world.rot.y) * sp24;
- this->actor.velocity.y = Math_SinS(this->actor.world.rot.x) * this->actor.speedXZ;
+ this->actor.velocity.y = Math_SinS(this->actor.world.rot.x) * this->actor.speed;
this->actor.velocity.z = Math_CosS(this->actor.world.rot.y) * sp24;
if (arg1) {
@@ -150,7 +150,7 @@ void func_80BECC7C(EnAkindonuts* this, PlayState* play) {
}
if (this->unk_32C & 2) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
}
}
@@ -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, RADF_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C);
+ func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(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;
}
@@ -257,17 +257,17 @@ void func_80BED090(PlayState* play) {
Player* player = GET_PLAYER(play);
if (player->transformation == PLAYER_FORM_DEKU) {
- gSaveContext.save.weekEventReg[63] |= 8;
- gSaveContext.save.weekEventReg[63] &= (u8)~0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_63_08);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_10);
} else if (player->transformation == PLAYER_FORM_ZORA) {
- gSaveContext.save.weekEventReg[63] &= (u8)~8;
- gSaveContext.save.weekEventReg[63] |= 0x10;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_08);
+ SET_WEEKEVENTREG(WEEKEVENTREG_63_10);
} else if (player->transformation == PLAYER_FORM_GORON) {
- gSaveContext.save.weekEventReg[63] |= 8;
- gSaveContext.save.weekEventReg[63] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_63_08);
+ SET_WEEKEVENTREG(WEEKEVENTREG_63_10);
} else if (player->transformation == PLAYER_FORM_HUMAN) {
- gSaveContext.save.weekEventReg[63] &= (u8)~8;
- gSaveContext.save.weekEventReg[63] &= (u8)~0x10;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_08);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_10);
}
}
@@ -275,19 +275,19 @@ s32 func_80BED140(PlayState* play) {
Player* player = GET_PLAYER(play);
if (player->transformation == PLAYER_FORM_DEKU) {
- if ((gSaveContext.save.weekEventReg[63] & 8) && !(gSaveContext.save.weekEventReg[63] & 0x10)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_63_10)) {
return true;
}
} else if (player->transformation == PLAYER_FORM_ZORA) {
- if (!(gSaveContext.save.weekEventReg[63] & 8) && (gSaveContext.save.weekEventReg[63] & 0x10)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_63_08) && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_10)) {
return true;
}
} else if (player->transformation == PLAYER_FORM_GORON) {
- if ((gSaveContext.save.weekEventReg[63] & 8) && (gSaveContext.save.weekEventReg[63] & 0x10)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_08) && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_10)) {
return true;
}
} else if (player->transformation == PLAYER_FORM_HUMAN) {
- if (!(gSaveContext.save.weekEventReg[63] & 8) && !(gSaveContext.save.weekEventReg[63] & 0x10)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_63_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_63_10)) {
return true;
}
}
@@ -300,7 +300,7 @@ s32 func_80BED208(EnAkindonuts* this) {
return 0;
}
- if (gSaveContext.save.playerData.rupees < 10) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < 10) {
return 1;
}
@@ -322,7 +322,7 @@ s32 func_80BED27C(EnAkindonuts* this) {
return 0;
}
- if (gSaveContext.save.playerData.rupees < 200) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < 200) {
return 1;
}
@@ -336,7 +336,7 @@ s32 func_80BED2FC(EnAkindonuts* this) {
return 2;
}
- if (gSaveContext.save.playerData.rupees < 40) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < 40) {
return 1;
}
@@ -350,7 +350,7 @@ s32 func_80BED35C(EnAkindonuts* this) {
return 2;
}
- if (gSaveContext.save.playerData.rupees < 100) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < 100) {
return 1;
}
@@ -384,8 +384,8 @@ void func_80BED3BC(EnAkindonuts* this, PlayState* play) {
break;
case 0x15E7:
- if (!(gSaveContext.save.weekEventReg[61] & 0x20)) {
- gSaveContext.save.weekEventReg[61] |= 0x20;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_61_20)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_61_20);
this->unk_33C = 0x15E8;
break;
}
@@ -446,7 +446,7 @@ void func_80BED3BC(EnAkindonuts* this, PlayState* play) {
case 0x15E5:
this->unk_33C = 0x15E6;
func_80BED090(play);
- gSaveContext.save.weekEventReg[61] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_61_10);
this->unk_32C |= 0x20;
break;
@@ -461,8 +461,8 @@ void func_80BED3BC(EnAkindonuts* this, PlayState* play) {
void func_80BED680(EnAkindonuts* this, PlayState* play) {
switch (this->unk_33C) {
case 0:
- if (func_80BED140(play) && !(gSaveContext.save.weekEventReg[61] & 0x40)) {
- gSaveContext.save.weekEventReg[61] |= 0x40;
+ if (func_80BED140(play) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_61_40)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_61_40);
this->unk_33C = 0x15F0;
break;
}
@@ -562,8 +562,8 @@ void func_80BED8A4(EnAkindonuts* this, PlayState* play) {
break;
case 0x15FE:
- if (!(gSaveContext.save.weekEventReg[62] & 1)) {
- gSaveContext.save.weekEventReg[62] |= 1;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_62_01)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_62_01);
this->unk_33C = 0x15FF;
break;
}
@@ -623,7 +623,7 @@ void func_80BED8A4(EnAkindonuts* this, PlayState* play) {
case 0x15FA:
this->unk_33C = 0x15FB;
- gSaveContext.save.weekEventReg[61] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_61_80);
this->unk_32C |= 0x20;
break;
@@ -640,8 +640,8 @@ void func_80BEDB88(EnAkindonuts* this, PlayState* play) {
switch (this->unk_33C) {
case 0:
- if ((player->transformation == PLAYER_FORM_DEKU) && !(gSaveContext.save.weekEventReg[62] & 2)) {
- gSaveContext.save.weekEventReg[62] |= 2;
+ if ((player->transformation == PLAYER_FORM_DEKU) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_62_02)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_62_02);
this->unk_33C = 0x15F0;
break;
}
@@ -740,8 +740,8 @@ void func_80BEDDAC(EnAkindonuts* this, PlayState* play) {
break;
case 0x1610:
- if (!(gSaveContext.save.weekEventReg[62] & 8)) {
- gSaveContext.save.weekEventReg[62] |= 8;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_62_08)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_62_08);
this->unk_33C = 0x1611;
break;
}
@@ -796,7 +796,7 @@ void func_80BEDDAC(EnAkindonuts* this, PlayState* play) {
case 0x15FA:
this->unk_33C = 0x160D;
- gSaveContext.save.weekEventReg[62] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_62_04);
this->unk_32C |= 0x20;
break;
@@ -813,8 +813,8 @@ void func_80BEE070(EnAkindonuts* this, PlayState* play) {
switch (this->unk_33C) {
case 0:
- if ((player->transformation == PLAYER_FORM_GORON) && !(gSaveContext.save.weekEventReg[62] & 0x10)) {
- gSaveContext.save.weekEventReg[62] |= 0x10;
+ if ((player->transformation == PLAYER_FORM_GORON) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_62_10)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_62_10);
this->unk_33C = 0x1614;
break;
}
@@ -900,8 +900,8 @@ void func_80BEE274(EnAkindonuts* this, PlayState* play) {
break;
case 0x1624:
- if (!(gSaveContext.save.weekEventReg[62] & 0x40)) {
- gSaveContext.save.weekEventReg[62] |= 0x40;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_62_40)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_62_40);
this->unk_33C = 0x1625;
break;
}
@@ -957,7 +957,7 @@ void func_80BEE274(EnAkindonuts* this, PlayState* play) {
case 0x1622:
this->unk_33C = 0x1623;
- gSaveContext.save.weekEventReg[62] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_62_20);
this->unk_32C |= 0x20;
break;
@@ -974,8 +974,8 @@ void func_80BEE530(EnAkindonuts* this, PlayState* play) {
switch (this->unk_33C) {
case 0:
- if ((player->transformation == PLAYER_FORM_ZORA) && !(gSaveContext.save.weekEventReg[62] & 0x80)) {
- gSaveContext.save.weekEventReg[62] |= 0x80;
+ if ((player->transformation == PLAYER_FORM_ZORA) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_62_80)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_62_80);
this->unk_33C = 0x162A;
break;
}
@@ -1040,41 +1040,41 @@ void func_80BEE73C(EnAkindonuts* this, PlayState* play) {
Player* player = GET_PLAYER(play);
s32 pad;
s32 params = ENAKINDONUTS_GET_3(&this->actor);
- s32 itemActionParam = func_80123810(play);
+ PlayerItemAction itemAction = func_80123810(play);
- if (itemActionParam > PLAYER_AP_NONE) {
- if (itemActionParam == PLAYER_AP_DEED_LAND) {
+ if (itemAction > PLAYER_IA_NONE) {
+ if (itemAction == PLAYER_IA_DEED_LAND) {
player->actor.textId = D_80BF048C[params];
this->unk_33C = player->actor.textId;
if (this->unk_33C == 0x15E4) {
- player->exchangeItemId = itemActionParam;
+ player->exchangeItemId = itemAction;
this->actionFunc = func_80BEF20C;
} else {
this->actionFunc = func_80BEF18C;
}
- } else if (itemActionParam == PLAYER_AP_DEED_SWAMP) {
+ } else if (itemAction == PLAYER_IA_DEED_SWAMP) {
player->actor.textId = D_80BF0494[params];
this->unk_33C = player->actor.textId;
if (this->unk_33C == 0x15F9) {
- player->exchangeItemId = itemActionParam;
+ player->exchangeItemId = itemAction;
this->actionFunc = func_80BEF20C;
} else {
this->actionFunc = func_80BEF18C;
}
- } else if (itemActionParam == PLAYER_AP_DEED_MOUNTAIN) {
+ } else if (itemAction == PLAYER_IA_DEED_MOUNTAIN) {
player->actor.textId = D_80BF049C[params];
this->unk_33C = player->actor.textId;
if (this->unk_33C == 0x160C) {
- player->exchangeItemId = itemActionParam;
+ player->exchangeItemId = itemAction;
this->actionFunc = func_80BEF20C;
} else {
this->actionFunc = func_80BEF18C;
}
- } else if (itemActionParam == PLAYER_AP_DEED_OCEAN) {
+ } else if (itemAction == PLAYER_IA_DEED_OCEAN) {
player->actor.textId = D_80BF04A4[params];
this->unk_33C = player->actor.textId;
if (this->unk_33C == 0x1621) {
- player->exchangeItemId = itemActionParam;
+ player->exchangeItemId = itemAction;
this->actionFunc = func_80BEF20C;
} else {
this->actionFunc = func_80BEF18C;
@@ -1084,10 +1084,10 @@ void func_80BEE73C(EnAkindonuts* this, PlayState* play) {
this->unk_33C = player->actor.textId;
this->actionFunc = func_80BEF18C;
}
- func_801477B4(play);
- } else if (itemActionParam < PLAYER_AP_NONE) {
+ Message_CloseTextbox(play);
+ } else if (itemAction <= PLAYER_IA_MINUS1) {
this->unk_33C = D_80BF04AC[params];
- func_80151938(play, this->unk_33C);
+ Message_ContinueTextbox(play, this->unk_33C);
this->actionFunc = func_80BEF18C;
}
}
@@ -1095,56 +1095,56 @@ void func_80BEE73C(EnAkindonuts* this, PlayState* play) {
void func_80BEE938(EnAkindonuts* this, PlayState* play) {
switch (ENAKINDONUTS_GET_3(&this->actor)) {
case 0:
- if (gSaveContext.save.weekEventReg[61] & 0x10) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_61_10)) {
if (ENAKINDONUTS_GET_4(&this->actor)) {
this->unk_2DC = func_80BED680;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else if (ENAKINDONUTS_GET_4(&this->actor)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
this->unk_2DC = func_80BED3BC;
}
break;
case 1:
- if (gSaveContext.save.weekEventReg[61] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_61_80)) {
if (ENAKINDONUTS_GET_4(&this->actor)) {
this->unk_2DC = func_80BEDB88;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else if (ENAKINDONUTS_GET_4(&this->actor)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
this->unk_2DC = func_80BED8A4;
}
break;
case 2:
- if (gSaveContext.save.weekEventReg[62] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_62_04)) {
if (ENAKINDONUTS_GET_4(&this->actor)) {
this->unk_2DC = func_80BEE070;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else if (ENAKINDONUTS_GET_4(&this->actor)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
this->unk_2DC = func_80BEDDAC;
}
break;
case 3:
- if (gSaveContext.save.weekEventReg[62] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_62_20)) {
if (ENAKINDONUTS_GET_4(&this->actor)) {
this->unk_2DC = func_80BEE530;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else if (ENAKINDONUTS_GET_4(&this->actor)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
this->unk_2DC = func_80BEE274;
}
@@ -1173,7 +1173,7 @@ void func_80BEEB20(EnAkindonuts* this, PlayState* play) {
}
if (phi_v0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
this->actionFunc = func_80BEEDC0;
this->unk_338 = 3;
this->collider.dim.height = 64;
@@ -1186,12 +1186,12 @@ void func_80BEEB20(EnAkindonuts* this, PlayState* play) {
if ((this->unk_338 == 4) || (this->unk_338 == 18)) {
this->unk_338 = 17;
this->collider.dim.height = 0;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_DOWN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DOWN);
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 17);
} else if (this->unk_338 == 2) {
this->unk_338 = 16;
this->collider.dim.height = 32;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_UP);
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 16);
} else if (this->unk_338 == 17) {
phi_v0 = DECR(this->unk_33A);
@@ -1330,19 +1330,19 @@ void func_80BEF360(EnAkindonuts* this, PlayState* play) {
this->unk_32C &= ~0x40;
this->actionFunc = func_80BEF450;
} else {
- Actor_PickUp(&this->actor, play, func_80BED034(this), 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, func_80BED034(this), 300.0f, 300.0f);
}
} else if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL;
this->actionFunc = func_80BEF450;
} else {
- Actor_PickUp(&this->actor, play, func_80BECFBC(this), 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, func_80BECFBC(this), 300.0f, 300.0f);
}
}
void func_80BEF450(EnAkindonuts* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) {
- func_800B85E0(&this->actor, play, 400.0f, -1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
this->actionFunc = func_80BEF4B8;
}
}
@@ -1352,7 +1352,7 @@ void func_80BEF4B8(EnAkindonuts* this, PlayState* play) {
this->unk_2DC(this, play);
this->actionFunc = func_80BEEFA8;
} else {
- func_800B85E0(&this->actor, play, 400.0f, -1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
}
}
@@ -1417,14 +1417,14 @@ void func_80BEF518(EnAkindonuts* this, PlayState* play) {
}
if (this->unk_35E == 0) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->actor);
this->unk_35E = 1;
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
return;
}
}
@@ -1433,7 +1433,7 @@ void func_80BEF518(EnAkindonuts* this, PlayState* play) {
this->unk_33E = 3;
this->unk_338 = 19;
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->unk_338);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_DOWN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DOWN);
this->unk_32C &= ~2;
this->unk_32C |= 0x80;
this->unk_358 = this->actor.world.pos.y;
@@ -1492,7 +1492,7 @@ void func_80BEF83C(EnAkindonuts* this, PlayState* play) {
this->unk_34C = 0.3f;
this->unk_338 = 9;
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->unk_338);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
this->actionFunc = func_80BEF9F0;
}
}
@@ -1529,7 +1529,7 @@ void func_80BEFAF0(EnAkindonuts* this, PlayState* play) {
if (this->path != NULL) {
sp34 = func_80BECEAC(this->path, this->unk_334, &this->actor.world.pos, &sp38);
- if (this->actor.bgCheckFlags & 0x8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
sp38.y = this->actor.wallYaw;
}
@@ -1546,14 +1546,14 @@ void func_80BEFAF0(EnAkindonuts* this, PlayState* play) {
if (func_80BECD10(this, this->path, this->unk_334) && (sp34 < 10.0f)) {
if (this->unk_334 >= (this->path->count - 1)) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->actionFunc = func_80BEFD74;
} else {
this->unk_334++;
}
}
} else if (this->actor.playerHeightRel > 500.0f) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->actionFunc = func_80BEFD74;
}
@@ -1561,32 +1561,32 @@ void func_80BEFAF0(EnAkindonuts* this, PlayState* play) {
if (this->unk_334 >= 3) {
sp32 = true;
}
- Math_ApproachF(&this->actor.speedXZ, 1.5f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 1.5f, 0.2f, 1.0f);
} else {
- Math_ApproachF(&this->actor.speedXZ, 2.0f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 2.0f, 0.2f, 1.0f);
}
func_80BECBE0(this, sp32);
if (this->unk_35E == 2) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->actor);
this->unk_35E = 3;
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
return;
}
} else if ((this->unk_35E == 1) && (this->unk_356 == 20)) {
- ActorCutscene_Stop(this->cutscene);
- this->cutscene = ActorCutscene_GetAdditionalCutscene(this->cutscene);
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Stop(this->csId);
+ this->csId = CutsceneManager_GetAdditionalCsId(this->csId);
+ CutsceneManager_Queue(this->csId);
this->unk_35E = 2;
}
this->unk_356++;
}
void func_80BEFD74(EnAkindonuts* this, PlayState* play) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
void EnAkindonuts_Init(Actor* thisx, PlayState* play) {
@@ -1608,7 +1608,7 @@ void EnAkindonuts_Init(Actor* thisx, PlayState* play) {
if (!ENAKINDONUTS_GET_4(&this->actor)) {
this->path = SubS_GetPathByIndex(play, ENAKINDONUTS_GET_FC00(&this->actor), 0x3F);
if (this->path == NULL) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
}
@@ -1617,7 +1617,7 @@ void EnAkindonuts_Init(Actor* thisx, PlayState* play) {
this->unk_32C |= 0x2;
this->unk_32C |= 0x4;
this->unk_338 = 4;
- this->cutscene = this->actor.cutscene;
+ this->csId = this->actor.csId;
func_80BEE938(this, play);
this->actionFunc = func_80BEEB20;
}
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 ec0446f95..180d73ed4 100644
--- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h
+++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h
@@ -43,13 +43,11 @@ typedef struct EnAkindonuts {
/* 0x358 */ f32 unk_358;
/* 0x35C */ s16 unk_35C;
/* 0x35E */ s16 unk_35E;
- /* 0x360 */ s16 cutscene;
+ /* 0x360 */ s16 csId;
/* 0x362 */ s16 unk_362;
/* 0x364 */ s16 unk_364;
/* 0x366 */ s8 unk_366;
/* 0x368 */ s16 unk_368;
} EnAkindonuts; // size = 0x36C
-extern const ActorInit En_Akindonuts_InitVars;
-
#endif // Z_EN_AKINDONUTS_H
diff --git a/src/overlays/actors/ovl_En_Al/overlay.cfg b/src/overlays/actors/ovl_En_Al/overlay.cfg
deleted file mode 100644
index ccd80736f..000000000
--- a/src/overlays/actors/ovl_En_Al/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Al
-z_en_al.c
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 8792f8038..87b83e670 100644
--- a/src/overlays/actors/ovl_En_Al/z_en_al.c
+++ b/src/overlays/actors/ovl_En_Al/z_en_al.c
@@ -85,7 +85,7 @@ s32 D_80BDFF24[] = {
0x11390411, 0x390819FF, 0xB10E2B3C, 0x2D00080C, 0x19FFA700,
};
-const ActorInit En_Al_InitVars = {
+ActorInit En_Al_InitVars = {
ACTOR_EN_AL,
ACTORCAT_NPC,
FLAGS,
@@ -200,7 +200,7 @@ Actor* func_80BDE384(EnAl* this, PlayState* play) {
switch (this->unk_35C) {
case 2:
- if (!(gSaveContext.save.weekEventReg[89] & 8) && (gSaveContext.save.weekEventReg[85] & 0x80)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_89_08) && CHECK_WEEKEVENTREG(WEEKEVENTREG_85_80)) {
actor = func_80BDE1A0(this, play, ACTORCAT_NPC, ACTOR_EN_PM);
} else {
actor = &GET_PLAYER(play)->actor;
@@ -219,30 +219,30 @@ Actor* func_80BDE384(EnAl* this, PlayState* play) {
return actor;
}
-s32 func_80BDE408(EnAl* this, s16 arg1) {
+s32 func_80BDE408(EnAl* this, s16 csId) {
s32 ret = false;
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(arg1);
- } else if (ActorCutscene_GetCanPlayNext(arg1)) {
- ActorCutscene_StartAndSetUnkLinkFields(arg1, &this->actor);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(csId);
+ } else if (CutsceneManager_IsNext(csId)) {
+ CutsceneManager_StartWithPlayerCs(csId, &this->actor);
ret = true;
} else {
- ActorCutscene_SetIntentToPlay(arg1);
+ CutsceneManager_Queue(csId);
}
return ret;
}
-s16 func_80BDE484(EnAl* this, s32 arg1) {
- s16 cs = this->actor.cutscene;
+s16 func_80BDE484(EnAl* this, s32 numCutscenes) {
+ s16 csId = this->actor.csId;
s32 i;
- for (i = 0; i < arg1; i++) {
- cs = ActorCutscene_GetAdditionalCutscene(cs);
+ for (i = 0; i < numCutscenes; i++) {
+ csId = CutsceneManager_GetAdditionalCsId(csId);
}
- return cs;
+ return csId;
}
s32 func_80BDE4E0(EnAl* this, s16* arg1, s16 arg2) {
@@ -257,7 +257,7 @@ s32 func_80BDE4E0(EnAl* this, s16* arg1, s16 arg2) {
}
if (arg2 == *arg1) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHAIR_ROLL);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIR_ROLL);
func_80BDE27C(this, 3);
this->unk_4E8 = 0;
(*arg1)++;
@@ -292,7 +292,7 @@ s32 func_80BDE678(EnAl* this, s16* arg1, s16 arg2) {
}
if (arg2 == *arg1) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHAIR_ROLL);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIR_ROLL);
func_80BDE27C(this, 4);
this->unk_4E8 = 0;
(*arg1)++;
@@ -317,13 +317,13 @@ s32 func_80BDE678(EnAl* this, s16* arg1, s16 arg2) {
s32 func_80BDE7FC(EnAl* this, PlayState* play) {
s32 pad;
- s16 sp2A = func_80BDE484(this, 0);
+ s16 csId = func_80BDE484(this, 0);
s32 pad2;
s32 sp20 = false;
switch (this->unk_4E6) {
case 0:
- if (!func_80BDE408(this, sp2A)) {
+ if (!func_80BDE408(this, csId)) {
break;
}
@@ -332,7 +332,8 @@ s32 func_80BDE7FC(EnAl* this, PlayState* play) {
case 6:
case 8:
if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) {
- Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)), this->actor.child);
+ Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)),
+ this->actor.child);
}
this->unk_4E6++;
sp20 = true;
@@ -342,13 +343,13 @@ s32 func_80BDE7FC(EnAl* this, PlayState* play) {
case 3:
case 5:
case 7:
- Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)), &this->actor);
+ Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)), &this->actor);
this->unk_4E6++;
sp20 = true;
break;
case 9:
- ActorCutscene_Stop(sp2A);
+ CutsceneManager_Stop(csId);
this->unk_4E6++;
sp20 = true;
break;
@@ -410,7 +411,7 @@ s32 func_80BDEA14(EnAl* this, PlayState* play) {
switch (this->unk_4E6) {
case 0:
case 1:
- if ((gSaveContext.save.weekEventReg[75] & 2)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_02)) {
sp18 = true;
} else if (func_80BDE4E0(this, &this->unk_4E6, 0)) {
sp18 = true;
@@ -451,7 +452,7 @@ s32* func_80BDEABC(EnAl* this, PlayState* play) {
return D_80BDFE84;
case 2:
- if (!(gSaveContext.save.weekEventReg[89] & 8) && (gSaveContext.save.weekEventReg[85] & 0x80)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_89_08) && CHECK_WEEKEVENTREG(WEEKEVENTREG_85_80)) {
this->unk_4EC = func_80BDE7FC;
return D_80BDFCBC;
}
@@ -575,7 +576,7 @@ s32 func_80BDF064(EnAl* this, PlayState* play) {
Actor* sp1C = func_80BDE1A0(this, play, 4, 0xA4);
Actor* temp_v0 = func_80BDE1A0(this, play, 4, 0x234);
- if (player->stateFlags1 & 0x40) {
+ if (player->stateFlags1 & PLAYER_STATE1_40) {
this->unk_4C2 |= 0x400;
if (this->unk_4C4 != sp22) {
switch (sp22) {
@@ -659,7 +660,7 @@ s32 func_80BDF308(EnAl* this, PlayState* play, ScheduleOutput* scheduleOutput) {
break;
case 2:
- this->unk_4F0 = PLAYER_AP_NONE;
+ this->unk_4F0 = PLAYER_IA_NONE;
this->unk_4EA = 0;
func_80BDE27C(this, 2);
break;
@@ -672,7 +673,7 @@ s32 func_80BDF390(EnAl* this, PlayState* play, ScheduleOutput* scheduleOutput) {
this->actor.flags |= ACTOR_FLAG_1;
this->actor.targetMode = 0;
- this->unk_4F0 = PLAYER_AP_NONE;
+ this->unk_4F0 = PLAYER_IA_NONE;
this->unk_4C2 = 0;
this->unk_4D4 = 40.0f;
@@ -699,15 +700,15 @@ void func_80BDF414(EnAl* this, PlayState* play) {
switch (this->unk_4EA) {
case 0:
case 1:
- if (!(gSaveContext.save.weekEventReg[89] & 8)) {
- if (gSaveContext.save.weekEventReg[85] & 0x80) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_89_08)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_85_80)) {
func_80BDE4E0(this, &this->unk_4EA, 0);
}
}
break;
case 2:
- if (gSaveContext.save.weekEventReg[89] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_89_08)) {
this->unk_4EA++;
}
break;
@@ -748,7 +749,7 @@ void func_80BDF578(EnAl* this, PlayState* play) {
void func_80BDF5E8(EnAl* this, PlayState* play) {
ScheduleOutput sp20;
- this->unk_4E0 = REG(15) + ((void)0, gSaveContext.save.daySpeed);
+ this->unk_4E0 = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
if (!Schedule_RunScript(play, D_80BDFC70, &sp20) ||
((this->unk_35C != sp20.result) && !func_80BDF390(this, play, &sp20))) {
this->actor.shape.shadowDraw = NULL;
diff --git a/src/overlays/actors/ovl_En_Al/z_en_al.h b/src/overlays/actors/ovl_En_Al/z_en_al.h
index 4a92743df..77e1011bf 100644
--- a/src/overlays/actors/ovl_En_Al/z_en_al.h
+++ b/src/overlays/actors/ovl_En_Al/z_en_al.h
@@ -45,6 +45,4 @@ typedef struct EnAl {
/* 0x4FC */ UNK_TYPE1 unk4FC[4];
} EnAl; // size = 0x500
-extern const ActorInit En_Al_InitVars;
-
#endif // Z_EN_AL_H
diff --git a/src/overlays/actors/ovl_En_Am/overlay.cfg b/src/overlays/actors/ovl_En_Am/overlay.cfg
deleted file mode 100644
index 8f03945db..000000000
--- a/src/overlays/actors/ovl_En_Am/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Am
-z_en_am.c
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 858d125c0..31d137299 100644
--- a/src/overlays/actors/ovl_En_Am/z_en_am.c
+++ b/src/overlays/actors/ovl_En_Am/z_en_am.c
@@ -37,7 +37,7 @@ void func_808B0894(EnAm* this, PlayState* play);
void func_808B0B4C(EnAm* this, PlayState* play);
void EnAm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx);
-const ActorInit En_Am_InitVars = {
+ActorInit En_Am_InitVars = {
ACTOR_EN_AM,
ACTORCAT_ENEMY,
FLAGS,
@@ -198,7 +198,7 @@ void EnAm_SpawnEffects(EnAm* this, PlayState* play) {
effectPos.z = randPlusMinusPoint5Scaled(65.0f) + this->actor.world.pos.z;
EffectSsKirakira_SpawnSmall(play, &effectPos, &sVelocity, &sAccel, &D_808B1118, &D_808B111C);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_AMOS_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_AMOS_WALK);
Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos, 4.0f, 3, 8.0f, 300, 15, 0);
}
@@ -231,8 +231,8 @@ void EnAm_RemoveEnemyTexture(EnAm* this, PlayState* play) {
}
void EnAm_WakeUp(EnAm* this) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_AMOS_WAVE);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_AMOS_VOICE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_AMOS_WAVE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_AMOS_VOICE);
this->returnHomeTimer = 300;
this->actionFunc = EnAm_ApplyEnemyTexture;
}
@@ -265,22 +265,22 @@ void EnAm_ApplyEnemyTexture(EnAm* this, PlayState* play) {
void func_808B0208(EnAm* this, PlayState* play) {
// If the armos is against a wall, rotate and turn away from it
- if ((this->actor.speedXZ > 0.0f) && (this->actor.bgCheckFlags & 8)) {
+ if ((this->actor.speed > 0.0f) && (this->actor.bgCheckFlags & BGCHECKFLAG_WALL)) {
this->actor.world.rot.y = (this->actor.wallYaw * 2) - this->actor.world.rot.y;
- this->actor.world.pos.x += this->actor.speedXZ * Math_SinS(this->actor.world.rot.y);
- this->actor.world.pos.z += this->actor.speedXZ * Math_CosS(this->actor.world.rot.y);
+ this->actor.world.pos.x += this->actor.speed * Math_SinS(this->actor.world.rot.y);
+ 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) {
- this->actor.speedXZ = this->speed;
+ this->actor.speed = this->speed;
this->actor.velocity.y = 12.0f;
} else if (this->skelAnime.curFrame > 11.0f) {
- if (!(this->actor.bgCheckFlags & 1)) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
this->skelAnime.curFrame = 11.0f;
} else {
Math_ScaledStepToS(&this->actor.world.rot.y, this->armosYaw, 0x1F40);
- this->actor.speedXZ = 0.0f;
- if (this->actor.bgCheckFlags & 2) {
+ this->actor.speed = 0.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
EnAm_SpawnEffects(this, play);
}
}
@@ -293,7 +293,7 @@ void func_808B0208(EnAm* this, PlayState* play) {
void func_808B0358(EnAm* this) {
Animation_PlayLoopSetSpeed(&this->skelAnime, &gArmosHopAnim, 4.0f);
this->explodeTimer = 3;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->speed = 6.0f;
this->actionFunc = func_808B03C0;
@@ -302,12 +302,12 @@ void func_808B0358(EnAm* this) {
void func_808B03C0(EnAm* this, PlayState* play) {
this->armosYaw = this->actor.yawTowardsPlayer;
func_808B0208(this, play);
- if (this->actor.bgCheckFlags & 2) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
this->explodeTimer--;
}
if (this->explodeTimer == 0) {
func_808B0640(this);
- } else if ((this->returnHomeTimer == 0) || Actor_XZDistanceToPoint(&this->actor, &this->actor.home.pos) > 240.0f) {
+ } else if ((this->returnHomeTimer == 0) || Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > 240.0f) {
func_808B0460(this);
}
}
@@ -315,7 +315,7 @@ void func_808B03C0(EnAm* this, PlayState* play) {
void func_808B0460(EnAm* this) {
this->actor.world.rot.y = this->actor.shape.rot.y;
this->speed = 0.0f;
- this->armosYaw = Actor_YawToPoint(&this->actor, &this->actor.home.pos);
+ this->armosYaw = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
this->actionFunc = func_808B04A8;
}
@@ -334,7 +334,7 @@ void func_808B04E4(EnAm* this) {
void func_808B0508(EnAm* this, PlayState* play) {
func_808B0208(this, play);
- if (!(this->actor.bgCheckFlags & 1)) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
Math_StepToF(&this->actor.world.pos.x, this->actor.home.pos.x, 2.0f);
Math_StepToF(&this->actor.world.pos.z, this->actor.home.pos.z, 2.0f);
}
@@ -345,15 +345,15 @@ void func_808B0508(EnAm* this, PlayState* play) {
void func_808B057C(EnAm* this) {
this->speed = 6.0f;
- this->armosYaw = Actor_YawToPoint(&this->actor, &this->actor.home.pos);
+ this->armosYaw = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
this->explodeTimer = 1;
this->actionFunc = func_808B05C8;
}
void func_808B05C8(EnAm* this, PlayState* play) {
- this->armosYaw = Actor_YawToPoint(&this->actor, &this->actor.home.pos);
+ this->armosYaw = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
func_808B0208(this, play);
- if (Actor_XZDistanceToPoint(&this->actor, &this->actor.home.pos) < 8.0f) {
+ if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) < 8.0f) {
func_808B04E4(this);
}
}
@@ -372,7 +372,7 @@ void func_808B066C(EnAm* this, PlayState* play) {
this->armosYaw = this->actor.yawTowardsPlayer;
func_808B0208(this, play);
if (this->armosYaw == this->actor.shape.rot.y) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_AMOS_VOICE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_AMOS_VOICE);
func_808B0358(this);
}
}
@@ -382,16 +382,17 @@ void EnAm_TakeDamage(EnAm* this, PlayState* play) {
Animation_Change(&this->skelAnime, &gArmosTakeDamageAnim, 1.0f, 4.0f,
Animation_GetLastFrame(&gArmosTakeDamageAnim) - 6, ANIMMODE_ONCE, 0.0f);
func_800BE504(&this->actor, &this->enemyCollider);
- this->actor.speedXZ = 6.0f;
- Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, 0, Animation_GetLastFrame(&gArmosTakeDamageAnim) - 10);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EYEGOLE_DAMAGE);
+ this->actor.speed = 6.0f;
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA,
+ Animation_GetLastFrame(&gArmosTakeDamageAnim) - 10);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_DAMAGE);
this->enemyCollider.base.acFlags &= ~AC_ON;
this->textureBlend = 255;
this->actionFunc = func_808B07A8;
}
void func_808B07A8(EnAm* this, PlayState* play) {
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.5f);
+ Math_StepToF(&this->actor.speed, 0.0f, 0.5f);
if (SkelAnime_Update(&this->skelAnime)) {
if (this->actor.colChkInfo.health == 0) {
func_808B0820(this);
@@ -407,7 +408,7 @@ void func_808B0820(EnAm* this) {
this->explodeTimer = 64;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actor.flags |= ACTOR_FLAG_10;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->speed = 6.0f;
this->actionFunc = func_808B0894;
}
@@ -426,7 +427,7 @@ void func_808B0894(EnAm* this, PlayState* play) {
if (bomb != NULL) {
bomb->timer = 0;
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EYEGOLE_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_DEAD);
Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0xB0);
for (i = 0; i < 8; i++) {
@@ -437,10 +438,10 @@ void func_808B0894(EnAm* this, PlayState* play) {
func_800B0EB0(play, &dustPos, &gZeroVec3f, &gZeroVec3f, &D_808B1120, &D_808B1124, 200, 45, 12);
}
} else if (this->explodeTimer == 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
} else if (!(this->explodeTimer & 3)) {
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 4);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 4);
}
if (this->actor.world.rot.z < 0x1F40) {
this->actor.world.rot.z += 0x320;
@@ -451,12 +452,12 @@ void func_808B0894(EnAm* this, PlayState* play) {
void func_808B0AD0(EnAm* this, PlayState* play) {
Animation_Change(&this->skelAnime, &gArmosPushedBackAnim, 1.0f, 0.0f, 8.0f, ANIMMODE_ONCE, 0.0f);
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
- this->actor.speedXZ = -6.0f;
+ this->actor.speed = -6.0f;
this->actionFunc = func_808B0B4C;
}
void func_808B0B4C(EnAm* this, PlayState* play) {
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.5f);
+ Math_StepToF(&this->actor.speed, 0.0f, 0.5f);
if (SkelAnime_Update(&this->skelAnime)) {
func_808B0358(this);
}
@@ -508,7 +509,9 @@ void EnAm_Update(Actor* thisx, PlayState* play) {
}
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 30.0f, 100.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 30.0f, 100.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
Actor_SetFocus(&this->actor, 64.0f);
Collider_UpdateCylinder(&this->actor, &this->enemyCollider);
Collider_UpdateCylinder(&this->actor, &this->interactCollider);
diff --git a/src/overlays/actors/ovl_En_Am/z_en_am.h b/src/overlays/actors/ovl_En_Am/z_en_am.h
index 79d3a81bd..e482e2cba 100644
--- a/src/overlays/actors/ovl_En_Am/z_en_am.h
+++ b/src/overlays/actors/ovl_En_Am/z_en_am.h
@@ -27,6 +27,4 @@ typedef struct EnAm {
/* 0x334 */ ColliderCylinder interactCollider; // Collider for when an interactable Armos is docile
} EnAm; // size = 0x380
-extern const ActorInit En_Am_InitVars;
-
#endif // Z_EN_AM_H
diff --git a/src/overlays/actors/ovl_En_An/overlay.cfg b/src/overlays/actors/ovl_En_An/overlay.cfg
deleted file mode 100644
index 14a6d7d5f..000000000
--- a/src/overlays/actors/ovl_En_An/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_An
-z_en_an.c
diff --git a/src/overlays/actors/ovl_En_An/z_en_an.c b/src/overlays/actors/ovl_En_An/z_en_an.c
index 33638774e..6b85ffc53 100644
--- a/src/overlays/actors/ovl_En_An/z_en_an.c
+++ b/src/overlays/actors/ovl_En_An/z_en_an.c
@@ -19,7 +19,7 @@ void func_80B578F8(EnAn* this, PlayState* play);
void func_80B57A44(EnAn* this, PlayState* play);
#if 0
-const ActorInit En_An_InitVars = {
+ActorInit En_An_InitVars = {
ACTOR_EN_AN,
ACTORCAT_NPC,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_An/z_en_an.h b/src/overlays/actors/ovl_En_An/z_en_an.h
index c4d2dd5ae..7f1a11930 100644
--- a/src/overlays/actors/ovl_En_An/z_en_an.h
+++ b/src/overlays/actors/ovl_En_An/z_en_an.h
@@ -14,6 +14,4 @@ typedef struct EnAn {
/* 0x18C */ char unk_18C[0x23C];
} EnAn; // size = 0x3C8
-extern const ActorInit En_An_InitVars;
-
#endif // Z_EN_AN_H
diff --git a/src/overlays/actors/ovl_En_And/overlay.cfg b/src/overlays/actors/ovl_En_And/overlay.cfg
deleted file mode 100644
index f62d705f0..000000000
--- a/src/overlays/actors/ovl_En_And/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_And
-z_en_and.c
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 04c461908..5c888ba45 100644
--- a/src/overlays/actors/ovl_En_And/z_en_and.c
+++ b/src/overlays/actors/ovl_En_And/z_en_and.c
@@ -18,7 +18,7 @@ void EnAnd_Draw(Actor* thisx, PlayState* play);
void func_80C18C50(EnAnd* this, PlayState* play);
#if 0
-const ActorInit En_And_InitVars = {
+ActorInit En_And_InitVars = {
ACTOR_EN_AND,
ACTORCAT_NPC,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_And/z_en_and.h b/src/overlays/actors/ovl_En_And/z_en_and.h
index 0ebd1a743..a0610a408 100644
--- a/src/overlays/actors/ovl_En_And/z_en_and.h
+++ b/src/overlays/actors/ovl_En_And/z_en_and.h
@@ -14,6 +14,4 @@ typedef struct EnAnd {
/* 0x18C */ char unk_18C[0x188];
} EnAnd; // size = 0x314
-extern const ActorInit En_And_InitVars;
-
#endif // Z_EN_AND_H
diff --git a/src/overlays/actors/ovl_En_Ani/overlay.cfg b/src/overlays/actors/ovl_En_Ani/overlay.cfg
deleted file mode 100644
index f0622d0c0..000000000
--- a/src/overlays/actors/ovl_En_Ani/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ani
-z_en_ani.c
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 ec464815e..d4c980055 100644
--- a/src/overlays/actors/ovl_En_Ani/z_en_ani.c
+++ b/src/overlays/actors/ovl_En_Ani/z_en_ani.c
@@ -40,7 +40,7 @@ void EnAni_IdleInPain(EnAni* this, PlayState* play);
void EnAni_Talk(EnAni* this, PlayState* play);
void EnAni_IdleStanding(EnAni* this, PlayState* play);
-const ActorInit En_Ani_InitVars = {
+ActorInit En_Ani_InitVars = {
ACTOR_EN_ANI,
ACTORCAT_NPC,
FLAGS,
@@ -138,8 +138,7 @@ void EnAni_Init(Actor* thisx, PlayState* play) {
this->actor.gravity = 0.0f;
this->actor.flags |= ACTOR_FLAG_10;
this->stateFlags |= ANI_STATE_CLIMBING;
- gSaveContext.eventInf[1] &= (u8)~0x10;
-
+ CLEAR_EVENTINF(EVENTINF_14);
} else { // ANI_TYPE_STANDING
// ( unused code )
// for some reason standing he has a large collider
@@ -212,7 +211,7 @@ void EnAni_FallToGround(EnAni* this, PlayState* play) {
s32 pad;
s16 quakeIndex;
- if (this->actor.bgCheckFlags & 1) { // hit the ground
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->actor.flags &= ~ACTOR_FLAG_10;
this->actionFunc = EnAni_LandOnFoot;
this->actor.velocity.x = 0.0f;
@@ -226,7 +225,7 @@ void EnAni_FallToGround(EnAni* this, PlayState* play) {
Quake_SetQuakeValues(quakeIndex, 7, 0, 0, 0);
Quake_SetCountdown(quakeIndex, 20);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_HAMMER_HIT);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_HAMMER_HIT);
}
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0x2, 0x7D0, 0x100);
@@ -244,7 +243,7 @@ void EnAni_LoseBalance(EnAni* this, PlayState* play) {
// frame count : 0.0f, only first frame, rest is handled in next action func
Animation_Change(&this->skelAnime, &gAniLandingThenStandingUpAnim, 0.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 5.0f);
this->actionFunc = EnAni_FallToGround;
- gSaveContext.eventInf[1] |= 0x10;
+ SET_EVENTINF(EVENTINF_14);
}
}
@@ -292,7 +291,7 @@ void EnAni_Update(Actor* thisx, PlayState* play) {
}
Actor_UpdatePos(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
this->actionFunc(this, play);
if (this->actor.xzDistToPlayer < 100.0f && !(this->stateFlags & ANI_STATE_CLIMBING)) {
Actor_TrackPlayer(play, &this->actor, &this->headRot, &this->chestRot, this->actor.focus.pos);
@@ -306,15 +305,15 @@ void EnAni_Update(Actor* thisx, PlayState* play) {
this->blinkFunc(this);
if (this->stateFlags & ANI_STATE_FALLING) {
- if (this->actor.cutscene == -1) {
+ if (this->actor.csId == CS_ID_NONE) {
this->stateFlags &= ~ANI_STATE_FALLING;
- } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
- this->actor.cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene);
- Camera_SetToTrackActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(this->actor.cutscene)),
+ } else if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
+ this->actor.csId = CutsceneManager_GetAdditionalCsId(this->actor.csId);
+ Camera_SetToTrackActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(this->actor.csId)),
&this->actor);
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
}
diff --git a/src/overlays/actors/ovl_En_Aob_01/overlay.cfg b/src/overlays/actors/ovl_En_Aob_01/overlay.cfg
deleted file mode 100644
index 592d6a834..000000000
--- a/src/overlays/actors/ovl_En_Aob_01/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Aob_01
-z_en_aob_01.c
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 575cf2d35..5aa746298 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
@@ -12,6 +12,8 @@
#define THIS ((EnAob01*)thisx)
+//! TODO: this file require macros for its uses of weekEventReg
+
void EnAob01_Init(Actor* thisx, PlayState* play);
void EnAob01_Destroy(Actor* thisx, PlayState* play);
void EnAob01_Update(Actor* thisx, PlayState* play);
@@ -32,7 +34,7 @@ void func_809C2C9C(EnAob01* this, PlayState* play);
void func_809C2D0C(EnAob01* this, PlayState* play);
s32 func_809C2EC4(EnAob01* this, PlayState* play);
-const ActorInit En_Aob_01_InitVars = {
+ActorInit En_Aob_01_InitVars = {
ACTOR_EN_AOB_01,
ACTORCAT_NPC,
FLAGS,
@@ -100,8 +102,8 @@ void func_809C10B0(EnAob01* this, s32 arg1) {
}
void func_809C1124(void) {
- gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)REG(15);
- gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.daySpeed);
+ gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)R_TIME_SPEED;
+ gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.timeSpeedOffset);
}
void func_809C1158(EnAob01* this, PlayState* play) {
@@ -128,7 +130,7 @@ void func_809C11EC(EnAob01* this, PlayState* play) {
this->unk_3F8[i] = Actor_SpawnAsChildAndCutscene(
&play->actorCtx, play, ACTOR_EN_DG, D_809C384C[i].unk_00.x, D_809C384C[i].unk_00.y, D_809C384C[i].unk_00.z,
- 0, D_809C384C[i].unk_04 * 182.04445f, 0, enDgParams, 0xFFFF, this->actor.unk20, NULL);
+ 0, DEG_TO_BINANG(D_809C384C[i].unk_04), 0, enDgParams, (u16)CS_ID_NONE, this->actor.halfDaysBits, NULL);
}
}
@@ -138,7 +140,7 @@ void func_809C1304(EnAob01* this, PlayState* play) {
for (i = 0; i < ARRAY_COUNT(this->unk_3F8); i++) {
this->unk_3F8[i] = Actor_SpawnAsChildAndCutscene(
&play->actorCtx, play, ACTOR_EN_RACEDOG, (i * 15.0f) + -3897.0f, 130.0f, 1290.0f - (i * 10.0f), 0, 0x1555,
- 0, (i << 5) | ENAOB01_GET_7E00_1(&this->actor), 0xFFFF, this->actor.unk20, NULL);
+ 0, (i << 5) | ENAOB01_GET_7E00_1(&this->actor), (u16)CS_ID_NONE, this->actor.halfDaysBits, NULL);
}
}
@@ -218,15 +220,15 @@ void func_809C16DC(EnAob01* this, PlayState* play) {
switch (gSaveContext.save.day) {
case 1:
if (!gSaveContext.save.isNight) {
- if (!(gSaveContext.save.weekEventReg[64] & 0x80)) {
- gSaveContext.save.weekEventReg[64] |= 0x80;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_64_80)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_64_80);
this->unk_210 = 0x3520;
} else {
this->unk_210 = 0x352F;
}
} else {
- if (!(gSaveContext.save.weekEventReg[65] & 1)) {
- gSaveContext.save.weekEventReg[65] |= 1;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_65_01)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_65_01);
this->unk_210 = 0x3530;
} else {
this->unk_210 = 0x352F;
@@ -236,15 +238,15 @@ void func_809C16DC(EnAob01* this, PlayState* play) {
case 2:
if (!gSaveContext.save.isNight) {
- if (!(gSaveContext.save.weekEventReg[65] & 2)) {
- gSaveContext.save.weekEventReg[65] |= 2;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_65_02)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_65_02);
this->unk_210 = 0x3531;
} else {
this->unk_210 = 0x352F;
}
} else {
- if (!(gSaveContext.save.weekEventReg[65] & 4)) {
- gSaveContext.save.weekEventReg[65] |= 4;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_65_04)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_65_04);
this->unk_210 = 0x3532;
} else {
this->unk_210 = 0x352F;
@@ -254,15 +256,15 @@ void func_809C16DC(EnAob01* this, PlayState* play) {
case 3:
if (!gSaveContext.save.isNight) {
- if (!(gSaveContext.save.weekEventReg[65] & 8)) {
- gSaveContext.save.weekEventReg[65] |= 8;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_65_08)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_65_08);
this->unk_210 = 0x3533;
} else {
this->unk_210 = 0x352F;
}
} else {
- if (!(gSaveContext.save.weekEventReg[65] & 0x10)) {
- gSaveContext.save.weekEventReg[65] |= 0x10;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_65_10)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_65_10);
this->unk_210 = 0x3534;
} else {
this->unk_210 = 0x352F;
@@ -303,7 +305,7 @@ void func_809C16DC(EnAob01* this, PlayState* play) {
break;
case PLAYER_FORM_HUMAN:
- if (gSaveContext.save.playerData.rupees < 10) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < 10) {
this->unk_210 = 0x3524;
this->unk_2D2 |= 0x10;
} else {
@@ -367,7 +369,7 @@ void func_809C16DC(EnAob01* this, PlayState* play) {
break;
case 0x3528:
- if (gSaveContext.save.playerData.rupees < this->unk_434) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < this->unk_434) {
this->unk_210 = 0x3536;
this->unk_2D2 |= 0x40;
this->unk_43C = 1;
@@ -392,7 +394,7 @@ void func_809C16DC(EnAob01* this, PlayState* play) {
if (this->unk_2D2 & 2) {
this->unk_2D2 &= ~2;
Rupees_ChangeBy(-this->unk_434);
- func_800B7298(play, NULL, 7);
+ func_800B7298(play, NULL, PLAYER_CSMODE_WAIT);
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
this->actionFunc = func_809C1C9C;
@@ -412,8 +414,8 @@ void func_809C16DC(EnAob01* this, PlayState* play) {
void func_809C1C9C(EnAob01* this, PlayState* play) {
if (gSaveContext.rupeeAccumulator == 0) {
- gSaveContext.save.weekEventReg[63] |= 1;
- gSaveContext.save.weekEventReg[63] &= (u8)~2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED);
this->unk_2D2 |= 0x20;
func_800FD750(0x40);
play->nextEntrance = ENTRANCE(DOGGY_RACETRACK, 1);
@@ -432,7 +434,7 @@ void func_809C1D64(EnAob01* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
switch (play->msgCtx.choiceIndex) {
case 0:
- if (gSaveContext.save.playerData.rupees < 10) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < 10) {
play_sound(NA_SE_SY_ERROR);
this->unk_210 = 0x3524;
Message_StartTextbox(play, this->unk_210, &this->actor);
@@ -474,7 +476,7 @@ void func_809C1EC8(EnAob01* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (SubS_AngleDiffLessEqual(this->actor.shape.rot.y, 0x36B0, this->actor.yawTowardsPlayer)) {
point.x = player->actor.world.pos.x;
- point.y = player->bodyPartsPos[7].y + 3.0f;
+ point.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
point.z = player->actor.world.pos.z;
SubS_TrackPoint(&point, &this->actor.focus.pos, &this->actor.shape.rot, &this->trackTarget, &this->headRot,
&this->torsoRot, &sTrackOptions);
@@ -489,7 +491,7 @@ void func_809C1EC8(EnAob01* this, PlayState* play) {
func_809C10B0(this, 3);
SubS_FillLimbRotTables(play, this->unk_2F8, this->unk_318, ARRAY_COUNT(this->unk_2F8));
func_809C165C(this, play);
- if (player->stateFlags1 & 0x20) {
+ if (player->stateFlags1 & PLAYER_STATE1_20) {
func_809C1124();
}
}
@@ -600,10 +602,11 @@ s32 func_809C2504(EnAob01* this, PlayState* play) {
Actor* npc = play->actorCtx.actorLists[ACTORCAT_NPC].first;
while (npc != NULL) {
- if ((npc->id == ACTOR_EN_RACEDOG) && (func_800F2178(this->unk_430) == ((EnRacedog*)npc)->currentPoint)) {
- ActorCutscene_Stop(this->unk_430);
+ if ((npc->id == ACTOR_EN_RACEDOG) &&
+ (CutsceneManager_GetCutsceneCustomValue(this->csId) == ((EnRacedog*)npc)->currentPoint)) {
+ CutsceneManager_Stop(this->csId);
this->unk_3F4 = npc;
- this->unk_430 = ActorCutscene_GetAdditionalCutscene(this->unk_430);
+ this->csId = CutsceneManager_GetAdditionalCsId(this->csId);
return true;
}
npc = npc->next;
@@ -648,22 +651,22 @@ s32 func_809C25E4(EnAob01* this, PlayState* play) {
}
s32 func_809C2680(EnAob01* this) {
- if ((ActorCutscene_GetLength(this->unk_430) > 0) && (ActorCutscene_GetCurrentIndex() != this->unk_430)) {
- this->unk_430 = ActorCutscene_GetAdditionalCutscene(this->unk_430);
+ if ((CutsceneManager_GetLength(this->csId) > 0) && (CutsceneManager_GetCurrentCsId() != this->csId)) {
+ this->csId = CutsceneManager_GetAdditionalCsId(this->csId);
return true;
}
return false;
}
void func_809C26E4(EnAob01* this, PlayState* play) {
- ActorCutscene_Stop(this->unk_430);
- this->unk_430 = ActorCutscene_GetAdditionalCutscene(this->unk_430);
+ CutsceneManager_Stop(this->csId);
+ this->csId = CutsceneManager_GetAdditionalCsId(this->csId);
this->actionFunc = func_809C2824;
}
void func_809C2730(EnAob01* this, PlayState* play) {
if (func_809C2504(this, play) || func_809C2680(this)) {
- ActorCutscene_SetIntentToPlay(this->unk_430);
+ CutsceneManager_Queue(this->csId);
this->actionFunc = func_809C2824;
}
}
@@ -671,20 +674,20 @@ void func_809C2730(EnAob01* this, PlayState* play) {
void func_809C2788(EnAob01* this, PlayState* play) {
this->unk_2D2 |= 0x20;
if (func_809C25E4(this, play)) {
- if (Audio_GetActiveSequence(SEQ_PLAYER_BGM_MAIN) != NA_BGM_HORSE_GOAL) {
+ if (AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) != NA_BGM_HORSE_GOAL) {
play->nextEntrance = ENTRANCE(DOGGY_RACETRACK, 1);
gSaveContext.eventInf[0] = (gSaveContext.eventInf[0] & (u8)~7) | 3;
play->transitionType = TRANS_TYPE_64;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
play->transitionTrigger = TRANS_TRIGGER_START;
}
}
}
void func_809C2824(EnAob01* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->unk_430)) {
- ActorCutscene_Start(this->unk_430, this->unk_3F4);
- switch (func_800F2178(this->unk_430)) {
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_Start(this->csId, this->unk_3F4);
+ switch (CutsceneManager_GetCutsceneCustomValue(this->csId)) {
case 255:
this->actionFunc = func_809C26E4;
break;
@@ -697,7 +700,7 @@ void func_809C2824(EnAob01* this, PlayState* play) {
this->actionFunc = func_809C2730;
}
} else {
- ActorCutscene_SetIntentToPlay(this->unk_430);
+ CutsceneManager_Queue(this->csId);
}
}
@@ -761,16 +764,16 @@ void func_809C2A64(EnAob01* this, PlayState* play) {
this->torsoRot = this->unk_2F2;
this->actor.parent = NULL;
this->actor.shape.rot.y = this->actor.world.rot.y;
- if (gSaveContext.save.weekEventReg[8] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_20)) {
this->actionFunc = func_809C2BE4;
} else {
- gSaveContext.save.weekEventReg[8] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_08_20);
this->actionFunc = func_809C2BE4;
}
- } else if (gSaveContext.save.weekEventReg[8] & 0x20) {
- Actor_PickUp(&this->actor, play, GI_RUPEE_RED, 300.0f, 300.0f);
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_20)) {
+ Actor_OfferGetItem(&this->actor, play, GI_RUPEE_RED, 300.0f, 300.0f);
} else {
- Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_HEART_PIECE, 300.0f, 300.0f);
}
}
}
@@ -779,16 +782,16 @@ void func_809C2BE4(EnAob01* this, PlayState* play) {
u8 talkState = Message_GetState(&play->msgCtx);
if (((talkState == TEXT_STATE_5) || (talkState == TEXT_STATE_DONE)) && Message_ShouldAdvance(play)) {
- if (gSaveContext.save.weekEventReg[63] & 2) {
- gSaveContext.save.weekEventReg[63] &= (u8)~2;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED);
}
- if (gSaveContext.save.weekEventReg[63] & 1) {
- gSaveContext.save.weekEventReg[63] &= (u8)~1;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
}
this->unk_210 = 0;
- func_800B85E0(&this->actor, play, 400.0f, -1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
gSaveContext.eventInf[0] &= (u8)~7;
this->actionFunc = func_809C2C9C;
}
@@ -797,10 +800,10 @@ void func_809C2BE4(EnAob01* this, PlayState* play) {
void func_809C2C9C(EnAob01* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->unk_210 = 0x354C;
- func_80151938(play, this->unk_210);
+ Message_ContinueTextbox(play, this->unk_210);
this->actionFunc = func_809C1D64;
} else {
- func_800B85E0(&this->actor, play, 400.0f, -1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
}
}
@@ -833,12 +836,12 @@ void func_809C2D0C(EnAob01* this, PlayState* play) {
this->unk_434 = 0;
this->actor.shape.rot.y = this->actor.world.rot.y;
- if (gSaveContext.save.weekEventReg[63] & 2) {
- gSaveContext.save.weekEventReg[63] &= (u8)~2;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED);
}
- if (gSaveContext.save.weekEventReg[63] & 1) {
- gSaveContext.save.weekEventReg[63] &= (u8)~1;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
}
this->unk_210 = 0x354C;
@@ -876,7 +879,7 @@ void func_809C2F34(EnAob01* this, PlayState* play) {
player->actor.world.pos.z = 1464.0f;
player->actor.shape.rot.y = player->actor.world.rot.y;
player->actor.draw = NULL;
- player->stateFlags1 |= 0x20;
+ player->stateFlags1 |= PLAYER_STATE1_20;
this->actor.world.pos.x = -4308.0f;
this->actor.world.pos.z = 1620.0f;
this->actor.prevPos = this->actor.world.pos;
@@ -902,7 +905,7 @@ void func_809C2FA0(void) {
}
for (i = 0; i < ARRAY_COUNT(sp44); i++) {
- gSaveContext.save.weekEventReg[42 + i] = 0;
+ gSaveContext.save.saveInfo.weekEventReg[42 + i] = 0;
sp44[i] = 0;
}
@@ -912,8 +915,8 @@ void func_809C2FA0(void) {
if (i % 2) {
sp44[index] |= orig2 << 0x4;
- gSaveContext.save.weekEventReg[42 + index] =
- ((void)0, gSaveContext.save.weekEventReg[42 + index]) | sp44[index];
+ gSaveContext.save.saveInfo.weekEventReg[42 + index] =
+ ((void)0, gSaveContext.save.saveInfo.weekEventReg[42 + index]) | sp44[index];
} else {
sp44[index] |= orig2;
}
@@ -945,9 +948,9 @@ void EnAob01_Init(Actor* thisx, PlayState* play) {
this->unk_440 = 500;
func_809C1304(this, play);
this->actor.draw = NULL;
- this->unk_430 = this->actor.cutscene;
+ this->csId = this->actor.csId;
func_809C2594(this, play);
- ActorCutscene_SetIntentToPlay(this->unk_430);
+ CutsceneManager_Queue(this->csId);
this->actor.flags &= ~ACTOR_FLAG_1;
func_809C2F34(this, play);
this->actionFunc = func_809C2824;
@@ -967,7 +970,7 @@ void EnAob01_Destroy(Actor* thisx, PlayState* play) {
EnAob01* this = THIS;
if (!(this->unk_2D2 & 0x20)) {
- gSaveContext.save.weekEventReg[63] &= (u8)~1;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
}
Collider_DestroyCylinder(play, &this->collider);
}
@@ -1032,8 +1035,8 @@ void EnAob01_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
void EnAob01_Draw(Actor* thisx, PlayState* play) {
s32 pad;
EnAob01* this = THIS;
- Vec3f sp5C;
- Vec3f sp50;
+ Vec3f pos;
+ Vec3f scale;
OPEN_DISPS(play->state.gfxCtx);
@@ -1049,11 +1052,11 @@ void EnAob01_Draw(Actor* thisx, PlayState* play) {
if (this->actor.draw != NULL) {
func_8012C2DC(play->state.gfxCtx);
- sp5C = this->actor.world.pos;
- sp50.x = 0.5f;
- sp50.y = 0.5f;
- sp50.z = 0.5f;
- func_800BC620(&sp5C, &sp50, 0xFF, play);
+ pos = this->actor.world.pos;
+ scale.x = 0.5f;
+ scale.y = 0.5f;
+ scale.z = 0.5f;
+ func_800BC620(&pos, &scale, 255, play);
}
CLOSE_DISPS(play->state.gfxCtx);
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 7414f1890..5432f74ae 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
@@ -34,7 +34,7 @@ typedef struct EnAob01 {
/* 0x3F0 */ s16 blinkTimer;
/* 0x3F4 */ Actor* unk_3F4;
/* 0x3F8 */ Actor* unk_3F8[14];
- /* 0x430 */ s16 unk_430;
+ /* 0x430 */ s16 csId;
/* 0x432 */ s16 unk_432;
/* 0x434 */ s32 unk_434;
/* 0x438 */ UNK_TYPE1 unk438[4];
@@ -42,6 +42,4 @@ typedef struct EnAob01 {
/* 0x440 */ s16 unk_440;
} EnAob01; // size = 0x444
-extern const ActorInit En_Aob_01_InitVars;
-
#endif // Z_EN_AOB_01_H
diff --git a/src/overlays/actors/ovl_En_Arrow/overlay.cfg b/src/overlays/actors/ovl_En_Arrow/overlay.cfg
deleted file mode 100644
index 5ae277d22..000000000
--- a/src/overlays/actors/ovl_En_Arrow/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Arrow
-z_en_arrow.c
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 8fd78fb51..b94e3ecb5 100644
--- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c
+++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c
@@ -22,7 +22,7 @@ void func_8088ACE0(EnArrow* this, PlayState* play);
void func_8088B630(EnArrow* this, PlayState* play);
void func_8088B6B0(EnArrow* this, PlayState* play);
-const ActorInit En_Arrow_InitVars = {
+ActorInit En_Arrow_InitVars = {
ACTOR_EN_ARROW,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -78,9 +78,9 @@ void EnArrow_Init(Actor* thisx, PlayState* play) {
EnArrow* this = THIS;
Actor_ProcessInitChain(&this->actor, sInitChain);
- if (this->actor.params == ENARROW_MINUS8) {
+ if (this->actor.params == -ENARROW_8) {
this->unk_263 = 1;
- this->actor.params = 8;
+ this->actor.params = ENARROW_8;
}
if (this->actor.params < ENARROW_6) {
@@ -113,7 +113,7 @@ void EnArrow_Init(Actor* thisx, PlayState* play) {
if (this->actor.params < ENARROW_0) {
this->collider.base.atFlags = (AT_TYPE_ENEMY | AT_ON);
} else {
- this->collider.info.toucher.dmgFlags = func_800BC188(this->actor.params);
+ this->collider.info.toucher.dmgFlags = Actor_GetArrowDmgFlags(this->actor.params);
if (this->actor.params == ENARROW_8) {
this->collider.info.toucher.damage = 1;
}
@@ -170,28 +170,28 @@ void func_8088A594(EnArrow* this, PlayState* play) {
if (this->actor.params == ENARROW_7) {
Magic_Reset(play);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
switch (this->actor.params) {
case ENARROW_6:
- func_800B8E58(player, NA_SE_IT_SLING_SHOT);
+ Player_PlaySfx(player, NA_SE_IT_SLING_SHOT);
break;
case ENARROW_0:
case ENARROW_1:
case ENARROW_2:
- func_800B8E58(player, NA_SE_IT_ARROW_SHOT);
+ Player_PlaySfx(player, NA_SE_IT_ARROW_SHOT);
break;
case ENARROW_3:
case ENARROW_4:
case ENARROW_5:
- func_800B8E58(player, NA_SE_IT_MAGIC_ARROW_SHOT);
+ Player_PlaySfx(player, NA_SE_IT_MAGIC_ARROW_SHOT);
case ENARROW_7:
- func_800B8E58(player, NA_SE_PL_DEKUNUTS_FIRE);
+ Player_PlaySfx(player, NA_SE_PL_DEKUNUTS_FIRE);
break;
}
@@ -225,7 +225,7 @@ void func_8088A7D8(PlayState* play, EnArrow* this) {
this->actionFunc = func_8088B6B0;
Animation_PlayOnce(&this->arrow.skelAnime, &gameplay_keep_Anim_012860);
this->actor.world.rot.y += (s32)(0x6000 * (Rand_ZeroOne() - 0.5f)) + 0x8000;
- this->actor.speedXZ *= 0.02f + (0.02f * Rand_ZeroOne());
+ this->actor.speed *= 0.02f + (0.02f * Rand_ZeroOne());
this->actor.gravity = -1.5f;
this->unk_260 = 50;
this->unk_263 = 1;
@@ -273,8 +273,8 @@ void func_8088AA98(EnArrow* this, PlayState* play) {
f32 temp_f0;
if (WaterBox_GetSurface1(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &sp50, &sp54) &&
- (this->actor.world.pos.y < sp50) && !(this->actor.bgCheckFlags & 0x20)) {
- this->actor.bgCheckFlags |= 0x20;
+ (this->actor.world.pos.y < sp50) && !(this->actor.bgCheckFlags & BGCHECKFLAG_WATER)) {
+ this->actor.bgCheckFlags |= BGCHECKFLAG_WATER;
Math_Vec3f_Diff(&this->actor.world.pos, &this->actor.home.pos, &sp44);
@@ -289,7 +289,7 @@ void func_8088AA98(EnArrow* this, PlayState* play) {
EffectSsGSplash_Spawn(play, &sp44, NULL, NULL, 0, 300);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_DIVE_INTO_WATER_L);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_DIVE_INTO_WATER_L);
EffectSsGRipple_Spawn(play, &sp44, 100, 500, 0);
EffectSsGRipple_Spawn(play, &sp44, 100, 500, 4);
@@ -298,7 +298,7 @@ void func_8088AA98(EnArrow* this, PlayState* play) {
if ((this->actor.params == ENARROW_4) || (this->actor.params == ENARROW_3)) {
if ((this->actor.params == ENARROW_4) && (func_8088B6B0 != this->actionFunc)) {
Actor_Spawn(&play->actorCtx, play, ACTOR_BG_ICEFLOE, sp44.x, sp44.y, sp44.z, 0, 0, 0, 300);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -306,7 +306,7 @@ void func_8088AA98(EnArrow* this, PlayState* play) {
this->collider.info.toucher.dmgFlags = 0x20;
if (this->actor.child != NULL) {
- Actor_MarkForDeath(this->actor.child);
+ Actor_Kill(this->actor.child);
return;
}
@@ -357,7 +357,7 @@ void func_8088ACE0(EnArrow* this, PlayState* play) {
EffectSs_Spawn(play, EFFECT_SS_SBN, 128, &sp84);
}
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -373,16 +373,16 @@ void func_8088ACE0(EnArrow* this, PlayState* play) {
}
if (this->actor.params == ENARROW_8) {
- iREG(50) = -1;
+ 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.speedXZ == 0.0f);
+ this->actor.world.pos.z, 0, 0, 0, this->actor.speed == 0.0f);
sp82 = NA_SE_IT_DEKU;
} else {
sp82 = NA_SE_IT_SLING_REFLECT;
}
EffectSsStone1_Spawn(play, &this->actor.world.pos, 0);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, sp82);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
EffectSsHitmark_SpawnCustomScale(play, 0, 150, &this->actor.world.pos);
@@ -396,14 +396,14 @@ void func_8088ACE0(EnArrow* this, PlayState* play) {
Math_Vec3f_Diff(&sp7C->world.pos, &this->actor.world.pos, &this->unk_268);
sp7C->flags |= ACTOR_FLAG_8000;
this->collider.base.atFlags &= ~AT_HIT;
- this->actor.speedXZ *= 0.5f;
+ this->actor.speed *= 0.5f;
this->actor.velocity.y *= 0.5f;
} else {
this->unk_261 |= 1;
this->unk_261 |= 2;
Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.prevPos);
func_8088A7D8(play, this);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_HOOKSHOT_STICK_CRE);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_HOOKSHOT_STICK_CRE);
}
} else if (this->unk_262 != 0) {
this->actionFunc = func_8088B630;
@@ -416,7 +416,7 @@ void func_8088ACE0(EnArrow* this, PlayState* play) {
if ((this->actor.params >= ENARROW_3) && (this->actor.params < ENARROW_6)) {
this->actor.draw = NULL;
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_ARROW_STICK_OBJ);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_ARROW_STICK_OBJ);
this->unk_261 |= 1;
}
}
@@ -424,9 +424,9 @@ void func_8088ACE0(EnArrow* this, PlayState* play) {
func_8088AA98(this, play);
if (this->actor.params == ENARROW_7) {
if (this->bubble.unk_149 == 0) {
- sp78 = sqrtf(SQ(this->actor.speedXZ) + SQ(this->actor.velocity.y));
- sp74 = Math_SinS(this->actor.world.rot.y) * this->actor.speedXZ;
- temp_f12_2 = Math_CosS(this->actor.world.rot.y) * this->actor.speedXZ;
+ sp78 = sqrtf(SQ(this->actor.speed) + SQ(this->actor.velocity.y));
+ sp74 = Math_SinS(this->actor.world.rot.y) * this->actor.speed;
+ temp_f12_2 = Math_CosS(this->actor.world.rot.y) * this->actor.speed;
this->actor.prevPos.x = this->actor.world.pos.x - (sp74 * (10.0f / sp78));
this->actor.prevPos.y = this->actor.world.pos.y - (this->actor.velocity.y * (10.0f / sp78));
@@ -456,7 +456,7 @@ void func_8088ACE0(EnArrow* this, PlayState* play) {
Math_Vec3f_Copy(&this->unk_228, &this->actor.world.pos);
- if (this->actor.speedXZ == 0.0f) {
+ if (this->actor.speed == 0.0f) {
this->actor.velocity.y -= 1.0f;
if (this->actor.velocity.y < this->actor.terminalVelocity) {
this->actor.velocity.y = this->actor.terminalVelocity;
@@ -474,7 +474,7 @@ void func_8088ACE0(EnArrow* this, PlayState* play) {
}
if (this->actor.params < ENARROW_6) {
- this->actor.shape.rot.x = Math_FAtan2F(this->actor.speedXZ, -this->actor.velocity.y);
+ this->actor.shape.rot.x = Math_Atan2S_XY(this->actor.speed, -this->actor.velocity.y);
}
}
@@ -512,11 +512,11 @@ void func_8088B630(EnArrow* this, PlayState* play) {
SkelAnime_Update(&this->arrow.skelAnime);
if (this->actor.wallBgId != BG_ACTOR_MAX) {
- BgCheck2_UpdateActorAttachedToMesh(&play->colCtx, this->actor.wallBgId, &this->actor);
+ DynaPolyActor_TransformCarriedActor(&play->colCtx, this->actor.wallBgId, &this->actor);
}
if (DECR(this->unk_260) == 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -526,7 +526,7 @@ void func_8088B6B0(EnArrow* this, PlayState* play) {
func_8088AA98(this, play);
if (DECR(this->unk_260) == 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -641,7 +641,7 @@ void EnArrow_Draw(Actor* thisx, PlayState* play) {
&this->actor, this->actor.projectedPos.z < 160.0f ? 0 : 1);
} else if (this->actor.params == ENARROW_7) {
s32 spA4 = 255 - (s32)(this->bubble.unk_144 * 4.0f);
- f32 spA0 = (this->actor.speedXZ * 0.1f) + 1.0f;
+ f32 spA0 = (this->actor.speed * 0.1f) + 1.0f;
f32 sp9C = (1.0f / spA0);
OPEN_DISPS(play->state.gfxCtx);
@@ -659,7 +659,7 @@ void EnArrow_Draw(Actor* thisx, PlayState* play) {
MTXMODE_APPLY);
Matrix_Translate(0.0f, 0.0f, 460.0f, MTXMODE_APPLY);
- if (this->actor.speedXZ == 0.0f) {
+ if (this->actor.speed == 0.0f) {
func_800B8118(&this->actor, play, MTXMODE_NEW);
gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_06F380);
@@ -674,7 +674,7 @@ void EnArrow_Draw(Actor* thisx, PlayState* play) {
gSPMatrix(POLY_XLU_DISP++, &D_01000000, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_06F9F0);
} else {
- func_800B8050(&this->actor, play, MTXMODE_NEW);
+ func_800B8050(&this->actor, play, 0);
gSPDisplayList(POLY_OPA_DISP++, gameplay_keep_DL_06F380);
gDPSetCombineLERP(POLY_OPA_DISP++, TEXEL1, 0, PRIM_LOD_FRAC, TEXEL0, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0,
@@ -687,7 +687,7 @@ void EnArrow_Draw(Actor* thisx, PlayState* play) {
CLOSE_DISPS(play->state.gfxCtx);
return;
- } else if (this->actor.speedXZ != 0.0f) {
+ } else if (this->actor.speed != 0.0f) {
u8 sp63 = (Math_CosS(this->unk_260 * 5000) * 127.5f) + 127.5f;
f32 sp5C;
@@ -710,7 +710,7 @@ void EnArrow_Draw(Actor* thisx, PlayState* play) {
Matrix_Push();
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
- if (this->actor.speedXZ == 0.0f) {
+ if (this->actor.speed == 0.0f) {
phi_v0 = 0;
} else {
phi_v0 = (play->gameplayFrames % 256) * 4000;
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 fadf7fbf2..313dd86bb 100644
--- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.h
+++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.h
@@ -8,16 +8,15 @@ struct EnArrow;
typedef void (*EnArrowActionFunc)(struct EnArrow*, PlayState*);
enum {
- /* -8 */ ENARROW_MINUS8 = -8,
- /* 0 */ ENARROW_0 = 0,
- /* 1 */ ENARROW_1,
- /* 2 */ ENARROW_2,
- /* 3 */ ENARROW_3,
- /* 4 */ ENARROW_4,
- /* 5 */ ENARROW_5,
- /* 6 */ ENARROW_6,
- /* 7 */ ENARROW_7,
- /* 8 */ ENARROW_8,
+ /* 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 struct {
@@ -53,6 +52,4 @@ typedef struct EnArrow {
/* 0x274 */ EnArrowActionFunc actionFunc;
} EnArrow; // size = 0x278
-extern const ActorInit En_Arrow_InitVars;
-
#endif // Z_EN_ARROW_H
diff --git a/src/overlays/actors/ovl_En_Attack_Niw/overlay.cfg b/src/overlays/actors/ovl_En_Attack_Niw/overlay.cfg
deleted file mode 100644
index 2b4aa71be..000000000
--- a/src/overlays/actors/ovl_En_Attack_Niw/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Attack_Niw
-z_en_attack_niw.c
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 72ca1ba8e..bb3e2f23a 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
@@ -20,7 +20,7 @@ void EnAttackNiw_EnterViewFromOffscreen(EnAttackNiw* this, PlayState* play);
void EnAttackNiw_AimAtPlayer(EnAttackNiw* this, PlayState* play);
void EnAttackNiw_FlyAway(EnAttackNiw* this, PlayState* play);
-const ActorInit En_Attack_Niw_InitVars = {
+ActorInit En_Attack_Niw_InitVars = {
ACTOR_EN_ATTACK_NIW,
ACTORCAT_ENEMY,
FLAGS,
@@ -213,7 +213,7 @@ void EnAttackNiw_EnterViewFromOffscreen(EnAttackNiw* this, PlayState* play) {
Vec3f flightTarget;
s32 pad;
- this->actor.speedXZ = 10.0f;
+ this->actor.speed = 10.0f;
// randomTargetCenterOffset is set in _Init, only needs to be set once
// but the view is moving, so now we need to re-calculate the spot in space
@@ -236,7 +236,7 @@ void EnAttackNiw_EnterViewFromOffscreen(EnAttackNiw* this, PlayState* play) {
Actor_SetFocus(&this->actor, this->targetHeight);
Actor_GetScreenPos(play, &this->actor, &posX, &posY);
- if (this->actor.bgCheckFlags & 8) { // touching a wall
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
this->targetRotY = this->actor.yawTowardsPlayer;
this->targetRotX = this->actor.world.rot.x - 3000.0f;
this->hopTimer = 0;
@@ -255,7 +255,7 @@ void EnAttackNiw_EnterViewFromOffscreen(EnAttackNiw* this, PlayState* play) {
} else if (((this->actor.projectedPos.z > 0.0f) && (fabsf(flightTarget.x - this->actor.world.pos.x) < 50.0f) &&
(fabsf(flightTarget.y - this->actor.world.pos.y) < 50.0f) &&
(fabsf(flightTarget.z - this->actor.world.pos.z) < 50.0f)) ||
- (this->actor.bgCheckFlags & 1)) { // touching ground or with close distance of target
+ (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
// reset state
this->hopTimer = 0;
this->unkTimer250 = this->hopTimer;
@@ -282,11 +282,11 @@ void EnAttackNiw_EnterViewFromOffscreen(EnAttackNiw* this, PlayState* play) {
void EnAttackNiw_AimAtPlayer(EnAttackNiw* this, PlayState* play) {
if (!EnAttackNiw_IsOnScreen(this, play)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
- if (this->actor.bgCheckFlags & 1) { // touching floor
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
if (this->hopTimer == 0) {
this->hopTimer = 3;
this->actor.velocity.y = 3.5f;
@@ -314,19 +314,18 @@ void EnAttackNiw_AimAtPlayer(EnAttackNiw* this, PlayState* play) {
Math_SmoothStepToS(&this->actor.world.rot.y, this->targetRotY, 2, this->rotStep, 0);
Math_SmoothStepToS(&this->actor.world.rot.x, this->targetRotX, 2, this->rotStep, 0);
Math_ApproachF(&this->rotStep, 10000.0f, 1.0f, 1000.0f);
- Math_ApproachF(&this->actor.speedXZ, this->targetXZSpeed, 0.9f, 1.0f);
+ Math_ApproachF(&this->actor.speed, this->targetXZSpeed, 0.9f, 1.0f);
- if (this->actor.gravity == -2.0f && this->unkTimer25A == 0 &&
- (this->actor.bgCheckFlags & 8 || this->randomAngleChangeTimer == 0)) {
+ if ((this->actor.gravity == -2.0f) && (this->unkTimer25A == 0) &&
+ ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) || (this->randomAngleChangeTimer == 0))) {
this->targetXZSpeed = 0.0f;
this->actor.gravity = 0.0f;
this->rotStep = 0.0f;
this->targetRotX = this->actor.world.rot.x - 5000.0f;
this->actionFunc = EnAttackNiw_FlyAway;
- } else if (this->actor.bgCheckFlags & 1) { // touching floor
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
EnAttackNiw_AnimateWingHead(this, play, NIW_ANIM_PECKING_SLOW_FORFLAPPING);
-
} else {
EnAttackNiw_AnimateWingHead(this, play, NIW_ANIM_PECKING_AND_WAVING);
}
@@ -334,7 +333,7 @@ void EnAttackNiw_AimAtPlayer(EnAttackNiw* this, PlayState* play) {
void EnAttackNiw_FlyAway(EnAttackNiw* this, PlayState* play) {
if (!EnAttackNiw_IsOnScreen(this, play)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -367,7 +366,9 @@ void EnAttackNiw_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 60.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 60.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
if (this->actionFunc == EnAttackNiw_EnterViewFromOffscreen) {
Actor_MoveWithoutGravity(&this->actor);
@@ -376,10 +377,11 @@ void EnAttackNiw_Update(Actor* thisx, PlayState* play) {
}
if (this->actor.floorHeight <= BGCHECK_Y_MIN) { // under the world
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
+ return;
+ }
- } else if ((this->actor.bgCheckFlags & 0x20) && // on or below water
- (this->actionFunc != EnAttackNiw_FlyAway)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WATER) && (this->actionFunc != EnAttackNiw_FlyAway)) {
Math_Vec3f_Copy(&splashPos, &this->actor.world.pos);
splashPos.y += this->actor.depthInWater;
EffectSsGSplash_Spawn(play, &splashPos, NULL, NULL, 0, 400);
@@ -406,12 +408,12 @@ void EnAttackNiw_Update(Actor* thisx, PlayState* play) {
if (this->crySfxTimer == 0) {
this->crySfxTimer = 30;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHICKEN_CRY_A);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHICKEN_CRY_A);
}
if (this->flutterSfxTimer == 0) {
this->flutterSfxTimer = 7;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_CHICKEN_FLUTTER);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_CHICKEN_FLUTTER);
}
}
}
diff --git a/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.h b/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.h
index a1e29d627..f49778d9a 100644
--- a/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.h
+++ b/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.h
@@ -54,8 +54,6 @@ typedef struct EnAttackNiw {
/* 0x2DC */ f32 targetHeight; // never set, but sent to Actor_SetFocus
} EnAttackNiw; // size = 0x2E0
-extern const ActorInit En_Attack_Niw_InitVars;
-
#define ATTACK_NIW_REGULAR 0 // spawned by EnNiw
diff --git a/src/overlays/actors/ovl_En_Az/overlay.cfg b/src/overlays/actors/ovl_En_Az/overlay.cfg
deleted file mode 100644
index e929d9380..000000000
--- a/src/overlays/actors/ovl_En_Az/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Az
-z_en_az.c
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 08333482e..1c2cdf533 100644
--- a/src/overlays/actors/ovl_En_Az/z_en_az.c
+++ b/src/overlays/actors/ovl_En_Az/z_en_az.c
@@ -92,7 +92,7 @@ static AnimationSpeedInfo sAnimationInfo[] = {
{ &gBeaverIdleFaceRightAnim, 1.0f, ANIMMODE_LOOP, -5.0f },
};
-const ActorInit En_Az_InitVars = {
+ActorInit En_Az_InitVars = {
ACTOR_EN_AZ,
ACTORCAT_NPC,
FLAGS,
@@ -151,8 +151,8 @@ void func_80A94AB8(EnAz* this, PlayState* play, s32 spawnIndex) {
play->nextEntrance = Entrance_CreateFromSpawn(spawnIndex);
gSaveContext.nextCutsceneIndex = 0;
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_03;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
}
void func_80A94B20(PlayState* play) {
@@ -162,7 +162,7 @@ void func_80A94B20(PlayState* play) {
ring = SubS_FindActor(play, ring, ACTORCAT_MISC, ACTOR_EN_TWIG);
if (ring != NULL) {
if (RACERING_GET_PARAM_F(ring) == 1) {
- Actor_MarkForDeath(ring);
+ Actor_Kill(ring);
}
ring = ring->next;
}
@@ -207,32 +207,32 @@ void EnAz_Init(Actor* thisx, PlayState* play2) {
this->actor.targetMode = 1;
switch (BEAVER_GET_PARAM_F00(thisx)) {
case 0:
- phi_v1 = (gSaveContext.save.entrance == ENTRANCE(WATERFALL_RAPIDS, 0)) &&
- (gSaveContext.save.weekEventReg[93] & 1);
+ phi_v1 =
+ (gSaveContext.save.entrance == ENTRANCE(WATERFALL_RAPIDS, 0)) && CHECK_WEEKEVENTREG(WEEKEVENTREG_93_01);
phi_v1 = !phi_v1;
break;
case 2:
phi_v1 = (gSaveContext.save.entrance != ENTRANCE(WATERFALL_RAPIDS, 1)) ||
- !(gSaveContext.save.weekEventReg[24] & 4);
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04);
break;
case 4:
phi_v1 = gSaveContext.save.entrance != ENTRANCE(WATERFALL_RAPIDS, 2);
break;
case 1:
- phi_v1 = (gSaveContext.save.entrance == ENTRANCE(WATERFALL_RAPIDS, 0)) &&
- (gSaveContext.save.weekEventReg[93] & 1);
+ phi_v1 =
+ (gSaveContext.save.entrance == ENTRANCE(WATERFALL_RAPIDS, 0)) && CHECK_WEEKEVENTREG(WEEKEVENTREG_93_01);
phi_v1 = !phi_v1;
break;
case 3:
- phi_v1 = (gSaveContext.save.entrance != ENTRANCE(WATERFALL_RAPIDS, 1)) ||
- (gSaveContext.save.weekEventReg[24] & 4);
+ phi_v1 =
+ (gSaveContext.save.entrance != ENTRANCE(WATERFALL_RAPIDS, 1)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04);
break;
case 5:
phi_v1 = gSaveContext.save.entrance != ENTRANCE(WATERFALL_RAPIDS, 2);
break;
case 6:
phi_v1 = (gSaveContext.save.entrance == ENTRANCE(WATERFALL_RAPIDS, 0)) &&
- !(gSaveContext.save.weekEventReg[93] & 1);
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_93_01);
phi_v1 = !phi_v1;
break;
default:
@@ -240,7 +240,7 @@ void EnAz_Init(Actor* thisx, PlayState* play2) {
break;
}
if (phi_v1) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -253,7 +253,7 @@ void EnAz_Init(Actor* thisx, PlayState* play2) {
if (this->unk_2F8 == 0) {
this->unk_374 |= 2;
}
- SubS_FillCutscenesList(&this->actor, this->unk_3D0, ARRAY_COUNT(this->unk_3D0));
+ SubS_FillCutscenesList(&this->actor, this->csIdList, ARRAY_COUNT(this->csIdList));
if (D_80A9913C == NULL) {
D_80A9913C = THIS;
this->unk_374 |= 1;
@@ -273,8 +273,8 @@ void EnAz_Init(Actor* thisx, PlayState* play2) {
this->collider.dim.height *= 1.2f;
this->collider.dim.yShift *= 1.2f;
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 5);
- if ((this->actor.bgCheckFlags & 0x20) && (this->actor.depthInWater > 22.0f)) {
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WATER) && (this->actor.depthInWater > 22.0f)) {
this->unk_374 |= 0x100;
this->unk_376 |= 0x100;
}
@@ -292,7 +292,7 @@ void EnAz_Init(Actor* thisx, PlayState* play2) {
switch (gSaveContext.save.entrance) {
case ENTRANCE(WATERFALL_RAPIDS, 0):
- if (gSaveContext.save.weekEventReg[93] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_93_01)) {
this->unk_2FA = 5;
if (this->unk_374 & 2) {
this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8);
@@ -321,14 +321,14 @@ void EnAz_Init(Actor* thisx, PlayState* play2) {
func_80A97C0C(this, play);
break;
case ENTRANCE(WATERFALL_RAPIDS, 1):
- if (gSaveContext.save.weekEventReg[93] & 1) {
- if (gSaveContext.save.weekEventReg[24] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_93_01)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04)) {
this->unk_2FA = 8;
} else {
this->unk_2FA = 6;
}
} else {
- if (gSaveContext.save.weekEventReg[24] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04)) {
this->unk_2FA = 3;
} else {
this->unk_2FA = 1;
@@ -338,7 +338,7 @@ void EnAz_Init(Actor* thisx, PlayState* play2) {
SubS_CopyPointFromPathList(play->setupPathList, BEAVER_GET_PARAM_FF(thisx),
play->setupPathList[BEAVER_GET_PARAM_FF(thisx)].count - 1, &D_80A99E80);
}
- if (gSaveContext.save.weekEventReg[24] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04)) {
if (this->unk_374 & 2) {
func_80A97D5C(this, play);
} else {
@@ -351,14 +351,14 @@ void EnAz_Init(Actor* thisx, PlayState* play2) {
}
break;
case ENTRANCE(WATERFALL_RAPIDS, 2):
- if (gSaveContext.save.weekEventReg[93] & 1) {
- if (gSaveContext.save.weekEventReg[24] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_93_01)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04)) {
this->unk_2FA = 9;
} else {
this->unk_2FA = 7;
}
} else {
- if (gSaveContext.save.weekEventReg[24] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04)) {
this->unk_2FA = 4;
} else {
this->unk_2FA = 2;
@@ -437,9 +437,9 @@ s32 func_80A95534(PlayState* play, ActorPathing* actorPathing) {
this->unk_36C = actorPathing->distSqToCurPointXZ;
}
}
- Math_SmoothStepToF(&this->actor.speedXZ, this->unk_36C, 0.8f, 2.0f, 0.0f);
+ Math_SmoothStepToF(&this->actor.speed, this->unk_36C, 0.8f, 2.0f, 0.0f);
actorPathing->moveFunc = SubS_ActorPathing_MoveWithGravity;
- if (actorPathing->distSqToCurPointXZ <= this->actor.speedXZ) {
+ if (actorPathing->distSqToCurPointXZ <= this->actor.speed) {
ret = true;
}
return ret;
@@ -454,11 +454,11 @@ s32 func_80A9565C(PlayState* play, ActorPathing* actorPathing) {
actorPathing->moveFunc = func_80A94A90;
this->unk_374 |= 0x2000;
temp_f0 = func_80A954AC(this);
- if ((actorPathing->distSqToCurPointXZ < SQ(this->actor.speedXZ)) || (temp_f0 <= 0.0f)) {
+ if ((actorPathing->distSqToCurPointXZ < SQ(this->actor.speed)) || (temp_f0 <= 0.0f)) {
ret = true;
} else {
this->unk_39E = this->actor.world.rot.x =
- Math_Atan2S(-this->actor.velocity.y, Math_CosS(-this->actor.world.rot.x) * this->actor.speedXZ);
+ Math_Atan2S(-this->actor.velocity.y, Math_CosS(-this->actor.world.rot.x) * this->actor.speed);
}
return ret;
}
@@ -474,10 +474,10 @@ s32 func_80A95730(PlayState* play, ActorPathing* actorPathing) {
this->actor.gravity = 0.0f;
temp_f0 = func_80A954AC(this);
- if ((actorPathing->distSqToCurPointXZ < SQ(this->actor.speedXZ)) || (temp_f0 <= 0.0f)) {
+ if ((actorPathing->distSqToCurPointXZ < SQ(this->actor.speed)) || (temp_f0 <= 0.0f)) {
ret = true;
} else {
- sp40 = SQ(this->actor.speedXZ) / actorPathing->distSqToCurPoint;
+ sp40 = SQ(this->actor.speed) / actorPathing->distSqToCurPoint;
sp34 = ABS(actorPathing->rotToCurPoint.x - this->actor.world.rot.x);
sp3C = (s32)(sp34 * sp40) + 0xAAA;
@@ -521,12 +521,12 @@ s32 func_80A958B0(PlayState* play, ActorPathing* actorPathing) {
} else {
Math_SmoothStepToF(&this->unk_36C, 26.0f, 0.5f, 1.0f, 0.01f);
}
- Math_SmoothStepToF(&this->actor.speedXZ, this->unk_36C, 0.8f, 2.0f, 0.0f);
+ Math_SmoothStepToF(&this->actor.speed, this->unk_36C, 0.8f, 2.0f, 0.0f);
temp1 = func_80A954AC(this);
- if ((actorPathing->distSqToCurPointXZ < SQ(this->actor.speedXZ)) || (temp1 <= 0.0f)) {
+ if ((actorPathing->distSqToCurPointXZ < SQ(this->actor.speed)) || (temp1 <= 0.0f)) {
ret = true;
} else {
- sp3C = SQ(this->actor.speedXZ) / actorPathing->distSqToCurPoint;
+ sp3C = SQ(this->actor.speed) / actorPathing->distSqToCurPoint;
sp30 = ABS(actorPathing->rotToCurPoint.x - this->actor.world.rot.x);
sp2C = (s32)(sp30 * sp3C) + 0xAAA;
sp30 = ABS(actorPathing->rotToCurPoint.y - this->actor.world.rot.y);
@@ -560,7 +560,7 @@ s32 func_80A95B34(PlayState* play, ActorPathing* actorPathing) {
} else {
ret = func_80A958B0(play, actorPathing);
}
- } else if (this->actor.bgCheckFlags & 1) {
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
if (this->unk_374 & 8) {
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_WALK, &this->animIndex);
this->unk_374 &= ~8;
@@ -578,24 +578,24 @@ void func_80A95C5C(EnAz* this, PlayState* play) {
this->actor.gravity = -1.0f;
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, &this->animIndex);
this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8);
- this->actor.bgCheckFlags &= ~0x21;
+ this->actor.bgCheckFlags &= ~(BGCHECKFLAG_GROUND | BGCHECKFLAG_WATER);
this->unk_3C0 = 0;
this->actionFunc = func_80A95CEC;
}
void func_80A95CEC(EnAz* this, PlayState* play) {
if (this->unk_374 & 0x8000) {
- if (!(this->actor.bgCheckFlags & 1)) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
this->actor.shape.rot.y = this->actor.world.rot.y;
this->actor.draw = EnAz_Draw;
Actor_MoveWithGravity(&this->actor);
func_800B9010(&this->actor, NA_SE_EV_HONEYCOMB_FALL - SFX_FLAG);
} else {
- if (this->actor.bgCheckFlags & 2) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GERUDOFT_DOWN);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GERUDOFT_DOWN);
}
- if (SubS_StartActorCutscene(&this->actor, 0x7C, this->unk_3D0[0], SUBS_CUTSCENE_NORMAL)) {
+ if (SubS_StartCutscene(&this->actor, CS_ID_GLOBAL_TALK, this->csIdList[0], SUBS_CUTSCENE_NORMAL)) {
func_80A97C0C(this, play);
}
}
@@ -608,12 +608,12 @@ void func_80A95DA0(EnAz* this, PlayState* play) {
SubS_ActorPathing_Init(play, &this->actor.world.pos, &this->actor, sp40, play->setupPathList,
BEAVER_GET_PARAM_FF(&this->actor), 0, 0, 1, 1);
this->unk_36C = 4.0f;
- this->actor.speedXZ = 4.0f;
+ this->actor.speed = 4.0f;
this->actor.gravity = 0.0f;
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_SWIM_WITH_SPINNING_TAIL,
&this->animIndex);
this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8);
- this->actor.bgCheckFlags &= ~0x21;
+ this->actor.bgCheckFlags &= ~(BGCHECKFLAG_GROUND | BGCHECKFLAG_WATER);
this->unk_374 |= 0x1000;
Math_Vec3f_Copy(&this->actor.world.pos, &sp40->curPoint);
this->actionFunc = func_80A95E88;
@@ -625,7 +625,7 @@ void func_80A95E88(EnAz* this, PlayState* play) {
if (this->actor.depthInWater > 8.0f) {
if (this->unk_374 & 2) {
if ((this->skelAnime.curFrame < this->skelAnime.playSpeed) && (this->skelAnime.curFrame >= 0.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BEAVER_SWIM_HAND);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BEAVER_SWIM_HAND);
}
} else {
func_800B9010(&this->actor, NA_SE_EV_BEAVER_SWIM_MOTOR - SFX_FLAG);
@@ -641,7 +641,7 @@ void func_80A95E88(EnAz* this, PlayState* play) {
}
void func_80A95F94(EnAz* this, PlayState* play) {
- func_800BE33C(&this->actor.world.pos, &this->actor.home.pos, &this->actor.world.rot, 0);
+ func_800BE33C(&this->actor.world.pos, &this->actor.home.pos, &this->actor.world.rot, false);
this->unk_39E = 0;
this->actor.shape.rot.y = this->actor.world.rot.y;
this->actionFunc = func_80A95FE8;
@@ -649,14 +649,14 @@ void func_80A95F94(EnAz* this, PlayState* play) {
void func_80A95FE8(EnAz* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
- if (ActorCutscene_GetCanPlayNext(this->unk_3D0[0])) {
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_3D0[0], &this->actor);
+ if (CutsceneManager_IsNext(this->csIdList[0])) {
+ CutsceneManager_StartWithPlayerCs(this->csIdList[0], &this->actor);
} else {
- ActorCutscene_SetIntentToPlay(this->unk_3D0[0]);
+ CutsceneManager_Queue(this->csIdList[0]);
}
- if (Actor_DistanceToPoint(&this->actor, &this->actor.home.pos) > 20.0f) {
+ if (Actor_WorldDistXYZToPoint(&this->actor, &this->actor.home.pos) > 20.0f) {
func_800B9010(&this->actor, NA_SE_EV_BEAVER_SWIM_MOTOR - SFX_FLAG);
- func_800BE33C(&this->actor.world.pos, &this->actor.home.pos, &this->actor.world.rot, 0);
+ func_800BE33C(&this->actor.world.pos, &this->actor.home.pos, &this->actor.world.rot, false);
Math_SmoothStepToS(&this->actor.shape.rot.x, this->actor.world.rot.x, 3, 0xE38, 0x38E);
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.world.rot.y, 3, 0xE38, 0x38E);
this->actor.shape.rot.z = 0;
@@ -665,14 +665,14 @@ void func_80A95FE8(EnAz* this, PlayState* play) {
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE, &this->animIndex);
this->unk_374 &= ~0x1000;
this->actor.gravity = -1.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
Math_SmoothStepToS(&this->actor.shape.rot.x, 0, 3, 0x1000, 0x100);
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.world.rot.y, 3, 0x1038, 0x100);
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->actor.shape.rot.x = 0;
this->actor.gravity = 0.0f;
func_80A97C0C(this, play);
- ActorCutscene_Stop(this->unk_3D0[0]);
+ CutsceneManager_Stop(this->csIdList[0]);
}
Actor_MoveWithGravity(&this->actor);
}
@@ -688,7 +688,8 @@ s32 func_80A9617C(EnAz* this, PlayState* play) {
case TEXT_STATE_5:
case TEXT_STATE_DONE:
if ((play->msgCtx.currentTextId == 0x10DD) && (this->unk_374 & 0x8000)) {
- if (SubS_StartActorCutscene(&brother->actor, brother->unk_3D0[0], 0x7C, SUBS_CUTSCENE_NORMAL)) {
+ if (SubS_StartCutscene(&brother->actor, brother->csIdList[0], CS_ID_GLOBAL_TALK,
+ SUBS_CUTSCENE_NORMAL)) {
brother->unk_374 |= 0x8000;
play->msgCtx.msgMode = 0x44;
ret = 0;
@@ -698,7 +699,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) {
switch (play->msgCtx.currentTextId) {
case 0x70:
case 0xCD:
- gSaveContext.save.weekEventReg[24] &= (u8)~1;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_01);
this->actor.textId = 0x10F2;
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_BOW,
&this->animIndex);
@@ -707,7 +708,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) {
break;
case 0x10CE:
this->actor.textId = 0x10CF;
- gSaveContext.save.weekEventReg[16] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_16_40);
break;
case 0x10CF:
this->actor.textId = 0x10D0;
@@ -782,7 +783,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) {
break;
case 0x10D9:
if ((this->unk_2FA == 3) || (this->unk_2FA == 8)) {
- gSaveContext.save.weekEventReg[24] &= (u8)~4;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04);
}
func_80A94AB8(this, play, 0);
func_80A979DC(this, play);
@@ -866,7 +867,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) {
ret = 0;
break;
case 0x10E7:
- gSaveContext.save.weekEventReg[24] &= (u8)~4;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04);
func_80A94AB8(this, play, 0);
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE,
&this->animIndex);
@@ -924,7 +925,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) {
break;
case 0x10ED:
if ((this->unk_2FA == 4) || (this->unk_2FA == 9)) {
- gSaveContext.save.weekEventReg[24] &= (u8)~4;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04);
}
func_80A94AB8(this, play, 0);
func_80A979DC(this, play);
@@ -943,12 +944,12 @@ s32 func_80A9617C(EnAz* this, PlayState* play) {
ret = 0;
break;
case 0x10F1:
- gSaveContext.save.weekEventReg[93] |= 1;
- if (gSaveContext.save.weekEventReg[23] & 0x80) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_93_01);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_80)) {
this->getItemId = GI_RUPEE_RED;
} else {
this->getItemId = GI_BOTTLE;
- gSaveContext.save.weekEventReg[23] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_23_80);
}
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE,
&this->animIndex);
@@ -958,7 +959,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) {
break;
case 0x10F2:
case 0x1109:
- gSaveContext.save.weekEventReg[24] &= (u8)~4;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04);
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE,
&this->animIndex);
SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE,
@@ -992,7 +993,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) {
case 0x10F8:
if (play->msgCtx.choiceIndex == 0) {
func_8019F208();
- if (gSaveContext.save.weekEventReg[25] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_01)) {
this->actor.textId = 0x1107;
} else {
this->actor.textId = 0x10FA;
@@ -1044,7 +1045,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) {
case 0x10FE:
if (play->msgCtx.choiceIndex == 0) {
func_8019F208();
- if (gSaveContext.save.weekEventReg[25] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_01)) {
this->actor.textId = 0x1108;
} else {
this->actor.textId = 0x1101;
@@ -1065,7 +1066,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) {
ret = 0;
break;
case 0x1100:
- gSaveContext.save.weekEventReg[24] &= (u8)~4;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04);
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE,
&this->animIndex);
SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE,
@@ -1096,11 +1097,11 @@ s32 func_80A9617C(EnAz* this, PlayState* play) {
ret = 0;
break;
case 0x1105:
- if (gSaveContext.save.weekEventReg[25] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_01)) {
this->getItemId = GI_RUPEE_PURPLE;
} else {
this->getItemId = GI_HEART_PIECE;
- gSaveContext.save.weekEventReg[25] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_25_01);
}
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE,
&this->animIndex);
@@ -1109,7 +1110,7 @@ s32 func_80A9617C(EnAz* this, PlayState* play) {
ret = 7;
break;
case 0x1106:
- gSaveContext.save.weekEventReg[24] &= (u8)~4;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04);
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE,
&this->animIndex);
SubS_ChangeAnimationBySpeedInfo(&brother->skelAnime, sAnimationInfo, BEAVER_ANIM_IDLE,
@@ -1188,16 +1189,16 @@ s32 func_80A97274(EnAz* this, PlayState* play) {
switch (this->unk_2FA) {
case 0:
default:
- gSaveContext.save.weekEventReg[24] &= (u8)~4;
- if (!(gSaveContext.save.weekEventReg[16] & 0x40)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04);
+ if (!(CHECK_WEEKEVENTREG(WEEKEVENTREG_16_40))) {
textId = 0x10CE;
} else {
textId = 0x10D4;
}
break;
case 2:
- if (gSaveContext.save.weekEventReg[24] & 1) {
- gSaveContext.save.weekEventReg[24] |= 4;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_01)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_24_04);
this->unk_3C0 = 0;
textId = 0x10DD;
} else {
@@ -1205,26 +1206,26 @@ s32 func_80A97274(EnAz* this, PlayState* play) {
}
break;
case 4:
- if (gSaveContext.save.weekEventReg[24] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_01)) {
textId = 0x10EE;
} else {
textId = 0x10E9;
}
break;
case 5:
- gSaveContext.save.weekEventReg[24] &= (u8)~4;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04);
textId = 0x10F3;
break;
case 7:
- if (gSaveContext.save.weekEventReg[24] & 1) {
- gSaveContext.save.weekEventReg[24] |= 4;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_01)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_24_04);
textId = 0x10FB;
} else {
textId = 0x10E9;
}
break;
case 9:
- if (gSaveContext.save.weekEventReg[24] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_01)) {
textId = 0x1102;
} else {
textId = 0x10E9;
@@ -1293,7 +1294,7 @@ void func_80A97410(EnAz* this, PlayState* play) {
}
}
if (this->unk_378 == 3) {
- func_80151938(play, this->actor.textId);
+ Message_ContinueTextbox(play, this->actor.textId);
this->unk_378 = 2;
} else if (this->unk_378 == 5) {
Message_StartTextbox(play, this->actor.textId, &this->actor);
@@ -1309,8 +1310,8 @@ void func_80A97410(EnAz* this, PlayState* play) {
this->unk_378 = 0;
}
} else {
- Actor_PickUp(&this->actor, play, this->getItemId, this->actor.xzDistToPlayer,
- this->actor.playerHeightRel);
+ Actor_OfferGetItem(&this->actor, play, this->getItemId, this->actor.xzDistToPlayer,
+ this->actor.playerHeightRel);
}
}
if (this->unk_378 == 9) {
@@ -1337,7 +1338,7 @@ void func_80A97410(EnAz* this, PlayState* play) {
func_80A97114(this, play);
this->unk_378 = 2;
} else if (func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel,
- PLAYER_AP_MINUS1)) {
+ PLAYER_IA_MINUS1)) {
this->actor.textId = func_80A973B4(this, play);
}
} else {
@@ -1370,7 +1371,7 @@ void func_80A97410(EnAz* this, PlayState* play) {
} else {
Actor_GetScreenPos(play, &this->actor, &sp56, &sp54);
if ((sp56 >= 0) && (sp56 <= SCREEN_WIDTH) && (sp54 >= 0) && (sp54 <= SCREEN_HEIGHT) &&
- func_800B8500(&this->actor, play, 120.0f, 120.0f, 0)) {
+ func_800B8500(&this->actor, play, 120.0f, 120.0f, PLAYER_IA_NONE)) {
this->unk_3D2 = func_80A97274(this, play);
if ((this->unk_3D2 == 0x10CE) || (this->unk_3D2 == 0x10D4)) {
this->actor.textId = 0;
@@ -1398,7 +1399,7 @@ void func_80A97A28(EnAz* this, PlayState* play) {
}
void func_80A97A40(EnAz* this, PlayState* play) {
- if (SubS_StartActorCutscene(&this->actor, 0, -1, SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) {
+ if (SubS_StartCutscene(&this->actor, 0, CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) {
play->msgCtx.msgMode = 0;
play->msgCtx.msgLength = 0;
func_80A97A9C(this, play);
@@ -1420,7 +1421,7 @@ void func_80A97AB4(EnAz* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
switch (play->msgCtx.currentTextId) {
case 0x10D7:
- func_80151938(play, 0x10D8);
+ Message_ContinueTextbox(play, 0x10D8);
break;
case 0x10D8:
if (play->msgCtx.choiceIndex == 0) {
@@ -1431,10 +1432,10 @@ void func_80A97AB4(EnAz* this, PlayState* play) {
func_80A979DC(this, play);
} else {
func_8019F230();
- if (gSaveContext.save.weekEventReg[24] & 4) {
- gSaveContext.save.weekEventReg[24] &= (u8)~4;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_04);
}
- func_80151938(play, 0x10D9);
+ Message_ContinueTextbox(play, 0x10D9);
}
break;
case 0x10D9:
@@ -1465,13 +1466,13 @@ void func_80A97C4C(EnAz* this, PlayState* play) {
}
func_80A97410(this, play);
if ((this->unk_2FA == 1) || (this->unk_2FA == 3) || (this->unk_2FA == 6) || (this->unk_2FA == 8)) {
- gSaveContext.save.weekEventReg[24] &= (u8)~1;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_01);
func_800FD750(NA_BGM_TIMED_MINI_GAME);
play->nextEntrance = Entrance_CreateFromSpawn(1);
gSaveContext.nextCutsceneIndex = 0;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_80;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
func_80A979DC(this, play);
} else {
Actor_MoveWithGravity(&this->actor);
@@ -1482,12 +1483,12 @@ void func_80A97D5C(EnAz* this, PlayState* play) {
Player* player = GET_PLAYER(play);
player->stateFlags1 |= PLAYER_STATE1_20;
- func_80112AFC(play);
+ Interface_InitMinigame(play);
gSaveContext.minigameScore = (this->unk_374 & 2) ? 25 : 20;
- play->interfaceCtx.unk_280 = 1;
+ play->interfaceCtx.minigameState = MINIGAME_STATE_COUNTDOWN_SETUP_3;
if ((this->unk_2FA == 1) || (this->unk_2FA == 3)) {
Interface_StartTimer(TIMER_ID_MINIGAME_2, 120);
- } else if (gSaveContext.save.weekEventReg[25] & 1) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_01)) {
Interface_StartTimer(TIMER_ID_MINIGAME_2, 100);
} else {
Interface_StartTimer(TIMER_ID_MINIGAME_2, 110);
@@ -1498,7 +1499,7 @@ void func_80A97D5C(EnAz* this, PlayState* play) {
void func_80A97E48(EnAz* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (play->interfaceCtx.unk_280 >= 8) {
+ if (play->interfaceCtx.minigameState >= MINIGAME_STATE_COUNTDOWN_GO) {
player->stateFlags1 &= ~PLAYER_STATE1_20;
func_80A97EAC(this, play);
}
@@ -1510,14 +1511,14 @@ void func_80A97EAC(EnAz* this, PlayState* play) {
SubS_ActorPathing_Init(play, &this->actor.world.pos, &this->actor, &this->unk_300, play->setupPathList,
BEAVER_GET_PARAM_FF(&this->actor), 0, 0, 1, 0);
this->unk_36C = 8.0f;
- this->actor.speedXZ = 8.0f;
+ this->actor.speed = 8.0f;
this->actor.gravity = 0.0f;
this->actor.velocity.y = 6.0f;
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, BEAVER_ANIM_SWIM_WITH_SPINNING_TAIL,
&this->animIndex);
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8);
- this->actor.bgCheckFlags &= ~0x21;
+ this->actor.bgCheckFlags &= ~(BGCHECKFLAG_GROUND | BGCHECKFLAG_WATER);
this->unk_374 |= 0x1000;
this->unk_3C2 = 0;
this->unk_3C4 = 0;
@@ -1543,18 +1544,18 @@ void func_80A97F9C(EnAz* this, PlayState* play) {
}
if (SurfaceType_IsHorseBlocked(&play->colCtx, player->actor.floorPoly, player->actor.floorBgId)) {
if (func_80A94B98(this, play)) {
- gSaveContext.save.weekEventReg[24] &= (u8)~1;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_24_01);
} else {
- gSaveContext.save.weekEventReg[24] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_24_01);
}
gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_STOP;
this->unk_374 &= ~0x10;
play->nextEntrance = Entrance_CreateFromSpawn(2);
gSaveContext.nextCutsceneIndex = 0;
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_03;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
- this->actor.speedXZ = 0.0f;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
+ this->actor.speed = 0.0f;
func_80A979DC(this, play);
} else {
if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] == SECONDS_TO_TIMER(0)) {
@@ -1574,7 +1575,7 @@ void func_80A97F9C(EnAz* this, PlayState* play) {
if (this->actor.depthInWater > 8.0f) {
if (this->unk_374 & 2) {
if ((this->skelAnime.curFrame < this->skelAnime.playSpeed) && (this->skelAnime.curFrame >= 0.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BEAVER_SWIM_HAND);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BEAVER_SWIM_HAND);
}
} else {
func_800B9010(&this->actor, NA_SE_EV_BEAVER_SWIM_MOTOR - SFX_FLAG);
@@ -1589,7 +1590,7 @@ void func_80A982E0(PlayState* play, ActorPathing* actorPathing) {
Vec3f sp28;
actorPathing->curPoint.x = actorPathing->points[actorPathing->curPointIndex].x;
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
actorPathing->curPoint.y = actorPathing->points[actorPathing->curPointIndex].y;
} else {
actorPathing->curPoint.y = actorPathing->points[actorPathing->curPointIndex].y - this->unk_3A4;
@@ -1600,8 +1601,8 @@ void func_80A982E0(PlayState* play, ActorPathing* actorPathing) {
sp28.z = actorPathing->curPoint.z - actorPathing->worldPos->z;
actorPathing->distSqToCurPointXZ = Math3D_XZLengthSquared(sp28.x, sp28.z);
actorPathing->distSqToCurPoint = Math3D_LengthSquared(&sp28);
- actorPathing->rotToCurPoint.y = Math_FAtan2F(sp28.z, sp28.x);
- actorPathing->rotToCurPoint.x = Math_FAtan2F(sqrtf(actorPathing->distSqToCurPointXZ), -sp28.y);
+ actorPathing->rotToCurPoint.y = Math_Atan2S_XY(sp28.z, sp28.x);
+ actorPathing->rotToCurPoint.x = Math_Atan2S_XY(sqrtf(actorPathing->distSqToCurPointXZ), -sp28.y);
actorPathing->rotToCurPoint.z = 0;
}
@@ -1615,7 +1616,7 @@ void func_80A98414(EnAz* this, PlayState* play) {
if ((fish->actor.params < 0) && (fish->actor.room == this->actor.room) &&
(Math3D_Vec3fDistSq(&this->actor.world.pos, &fish->actor.world.pos) < SQ(200.0f))) {
fish->unk_276 = 0x14;
- fish->unk_274 = Actor_YawBetweenActors(&fish->actor, &this->actor);
+ fish->unk_274 = Actor_WorldYawTowardActor(&fish->actor, &this->actor);
}
}
itemAction = itemAction->next;
@@ -1627,7 +1628,7 @@ void EnAz_Update(Actor* thisx, PlayState* play2) {
EnAz* this = THIS;
this->unk_374 &= ~0x100;
- if ((this->actor.bgCheckFlags & 0x20) && (this->actor.depthInWater > 22.0f)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WATER) && (this->actor.depthInWater > 22.0f)) {
if (!(this->unk_376 & 0x100)) {
this->unk_374 |= 0x200;
}
@@ -1638,10 +1639,10 @@ void EnAz_Update(Actor* thisx, PlayState* play2) {
this->actionFunc(this, play);
Actor_SetFocus(&this->actor, 40.0f);
if (this->unk_374 & 0x200) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_DIVE_INTO_WATER);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_DIVE_INTO_WATER);
}
if (this->unk_374 & 0x400) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_JUMP_OUT_WATER);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_JUMP_OUT_WATER);
}
this->unk_37E++;
if (this->unk_37E >= 4) {
@@ -1660,9 +1661,9 @@ void EnAz_Update(Actor* thisx, PlayState* play2) {
this->unk_39C = 0;
}
if (!(this->unk_374 & 0x1000)) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
} else {
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, 0x400);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, UPDBGCHECKINFO_FLAG_400);
this->unk_374 &= ~0x1000;
}
Collider_UpdateCylinder(&this->actor, &this->collider);
@@ -1798,7 +1799,7 @@ void EnAz_Draw(Actor* thisx, PlayState* play2) {
CLOSE_DISPS(play->state.gfxCtx);
}
OPEN_DISPS(play->state.gfxCtx);
- if ((this->actor.depthInWater >= 28.0f) && (this->actor.speedXZ > 0.5f)) {
+ 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);
Matrix_RotateXS(this->actor.shape.rot.x, MTXMODE_APPLY);
@@ -1835,7 +1836,7 @@ void EnAz_Draw(Actor* thisx, PlayState* play2) {
} else {
Matrix_Push();
Matrix_Translate(0.0f, 2000.0f, -2000.0f, MTXMODE_APPLY);
- Matrix_RotateZS(D_80A993D0[this->unk_384].z * (0x10000 / 360.0f), MTXMODE_APPLY);
+ Matrix_RotateZS(DEG_TO_BINANG(D_80A993D0[this->unk_384].z), MTXMODE_APPLY);
Matrix_Scale(D_80A993AC[this->unk_384].x, D_80A993AC[this->unk_384].y, 0.0f, MTXMODE_APPLY);
if (this->unk_374 & 0x800) {
gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_PrimColor(play->state.gfxCtx, 0x80, 255, 255, 255, 255));
@@ -1846,7 +1847,7 @@ void EnAz_Draw(Actor* thisx, PlayState* play2) {
gSPDisplayList(POLY_XLU_DISP++, gBeaverYoungerBrotherTailVortexDL);
Matrix_Pop();
Matrix_Translate(0.0f, 2000.0f, -2100.0f, MTXMODE_APPLY);
- Matrix_RotateZS(D_80A993D0[this->unk_384].z * (0x10000 / 360.0f), MTXMODE_APPLY);
+ Matrix_RotateZS(DEG_TO_BINANG(D_80A993D0[this->unk_384].z), MTXMODE_APPLY);
Matrix_Scale(D_80A993D0[this->unk_384].x, D_80A993D0[this->unk_384].y, 0.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++, gBeaverYoungerBrotherTailSplashDL);
diff --git a/src/overlays/actors/ovl_En_Az/z_en_az.h b/src/overlays/actors/ovl_En_Az/z_en_az.h
index ffe094a93..a4c1785fe 100644
--- a/src/overlays/actors/ovl_En_Az/z_en_az.h
+++ b/src/overlays/actors/ovl_En_Az/z_en_az.h
@@ -45,12 +45,10 @@ typedef struct EnAz {
/* 0x3C4 */ s16 unk_3C4;
/* 0x3C6 */ UNK_TYPE1 unk3C6[6];
/* 0x3CC */ s32 getItemId;
- /* 0x3D0 */ s16 unk_3D0[1];
+ /* 0x3D0 */ s16 csIdList[1];
/* 0x3D2 */ u16 unk_3D2;
/* 0x3D4 */ s16 unk_3D4;
/* 0x3D6 */ s16 unk_3D6;
} EnAz; // size = 0x3D8
-extern const ActorInit En_Az_InitVars;
-
#endif // Z_EN_AZ_H
diff --git a/src/overlays/actors/ovl_En_Baba/overlay.cfg b/src/overlays/actors/ovl_En_Baba/overlay.cfg
deleted file mode 100644
index 8d3dddae0..000000000
--- a/src/overlays/actors/ovl_En_Baba/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Baba
-z_en_baba.c
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 dcbbee65d..5296260f9 100644
--- a/src/overlays/actors/ovl_En_Baba/z_en_baba.c
+++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.c
@@ -50,7 +50,7 @@ typedef enum {
/* 2 */ BOMB_SHOP_LADY_SCH_FOLLOW_TIME_PATH
} BombShopLadyScheduleResult;
-const ActorInit En_Baba_InitVars = {
+ActorInit En_Baba_InitVars = {
ACTOR_EN_BABA,
ACTORCAT_NPC,
FLAGS,
@@ -167,13 +167,13 @@ void EnBaba_HandleConversation(EnBaba* this, PlayState* play) {
switch (this->textId) {
case 0:
if (this->stateFlags & BOMB_SHOP_LADY_STATE_AUTOTALK) {
- if (gSaveContext.save.weekEventReg[33] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) {
// Thanks. Can stock Bomb Bags tomorrow
this->textId = 0x2A34;
break;
}
- if (gSaveContext.save.weekEventReg[79] & 0x40) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_40)) {
this->stateFlags |= BOMB_SHOP_LADY_STATE_END_CONVERSATION;
// Oh my, learned my lesson. Can't stock Bomb Bags tomorrow
this->textId = 0x2A33;
@@ -185,8 +185,8 @@ void EnBaba_HandleConversation(EnBaba* this, PlayState* play) {
this->textId = 0x2A32;
break;
} else if (player->transformation == PLAYER_FORM_DEKU) {
- if (!(gSaveContext.save.weekEventReg[79] & 0x20)) {
- gSaveContext.save.weekEventReg[79] |= 0x20;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_79_20)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_79_20);
this->stateFlags |= BOMB_SHOP_LADY_STATE_END_CONVERSATION;
// Small customer, use bombs as adult
this->textId = 0x2A37;
@@ -197,8 +197,8 @@ void EnBaba_HandleConversation(EnBaba* this, PlayState* play) {
this->textId = 0x2A38;
}
break;
- } else if (!(gSaveContext.save.weekEventReg[33] & 8)) {
- if (!(gSaveContext.save.weekEventReg[73] & 1)) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_73_01)) {
// Thought could sell Big Bomb Bags
this->textId = 0x660;
break;
@@ -207,7 +207,7 @@ void EnBaba_HandleConversation(EnBaba* this, PlayState* play) {
this->textId = 0x662;
break;
} else {
- if (!(gSaveContext.save.weekEventReg[73] & 2)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_73_02)) {
// Someone helped me out
this->textId = 0x65A;
break;
@@ -234,7 +234,7 @@ void EnBaba_HandleConversation(EnBaba* this, PlayState* play) {
Actor_ChangeFocus(&this->actor, play, &this->bombShopkeeper->actor);
// I'll go next time
this->textId = 0x663;
- gSaveContext.save.weekEventReg[73] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_73_01);
this->stateFlags |= BOMB_SHOP_LADY_STATE_END_CONVERSATION;
break;
@@ -254,7 +254,7 @@ void EnBaba_HandleConversation(EnBaba* this, PlayState* play) {
Actor_ChangeFocus(&this->actor, play, &this->bombShopkeeper->actor);
// I worry about you
this->textId = 0x65D;
- gSaveContext.save.weekEventReg[73] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_73_02);
this->stateFlags |= BOMB_SHOP_LADY_STATE_END_CONVERSATION;
break;
@@ -320,8 +320,8 @@ s32 EnBaba_MoveForward(EnBaba* this, f32 speedTarget) {
s32 reachedEnd = false;
Vec3f point;
- Math_SmoothStepToF(&this->actor.speedXZ, speedTarget, 0.4f, 1000.0f, 0.0f);
- rotStep = this->actor.speedXZ * 400.0f;
+ Math_SmoothStepToF(&this->actor.speed, speedTarget, 0.4f, 1000.0f, 0.0f);
+ rotStep = this->actor.speed * 400.0f;
if (SubS_CopyPointFromPath(this->path, this->waypoint, &point) &&
SubS_MoveActorToPoint(&this->actor, &point, rotStep)) {
this->waypoint++;
@@ -341,7 +341,7 @@ void EnBaba_UpdateModel(EnBaba* this, PlayState* play) {
if (SubS_AngleDiffLessEqual(this->actor.shape.rot.y, 0x36B0, this->actor.yawTowardsPlayer) &&
!(this->stateFlags & BOMB_SHOP_LADY_STATE_KNOCKED_OVER)) {
point.x = player->actor.world.pos.x;
- point.y = player->bodyPartsPos[7].y + 3.0f;
+ point.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
point.z = player->actor.world.pos.z;
SubS_TrackPoint(&point, &this->actor.focus.pos, &this->actor.shape.rot, &this->trackTarget, &this->headRot,
@@ -476,7 +476,7 @@ s32 EnBaba_FollowTimePath(EnBaba* this, PlayState* play) {
void EnBaba_HandleSchedule(EnBaba* this, PlayState* play) {
switch (this->scheduleResult) {
case BOMB_SHOP_LADY_SCH_FOLLOW_TIME_PATH:
- gSaveContext.save.weekEventReg[58] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_58_40);
this->stateFlags |= BOMB_SHOP_LADY_STATE_VISIBLE;
EnBaba_FollowTimePath(this, play);
break;
@@ -485,7 +485,7 @@ void EnBaba_HandleSchedule(EnBaba* this, PlayState* play) {
this->animIndex = BOMB_SHOP_LADY_ANIM_KNOCKED_OVER;
// Ouch
this->textId = 0x2A30;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
Enemy_StartFinishingBlow(play, &this->actor);
this->stateFlags |= BOMB_SHOP_LADY_STATE_KNOCKED_OVER;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex);
@@ -512,9 +512,9 @@ void EnBaba_FinishInit(EnBaba* this, PlayState* play) {
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)) {
- if ((gSaveContext.save.weekEventReg[58] & 0x40) ||
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_58_40) ||
(gSaveContext.save.time >= CLOCK_TIME(0, 20) && (gSaveContext.save.time < CLOCK_TIME(6, 0)))) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -524,13 +524,13 @@ void EnBaba_FinishInit(EnBaba* this, PlayState* play) {
this->actionFunc = EnBaba_FollowSchedule;
} else if ((BOMB_SHOP_LADY_GET_TYPE(&this->actor) == BOMB_SHOP_LADY_TYPE_IDLE) &&
(gSaveContext.save.entrance == ENTRANCE(NORTH_CLOCK_TOWN, 7))) {
- if (gSaveContext.save.weekEventReg[81] & 2) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_81_02)) {
+ Actor_Kill(&this->actor);
return;
}
this->stateFlags |= BOMB_SHOP_LADY_STATE_VISIBLE;
- if (gSaveContext.save.weekEventReg[33] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) {
this->animIndex = BOMB_SHOP_LADY_ANIM_IDLE_HOLDING_BAG;
} else {
this->animIndex = BOMB_SHOP_LADY_ANIM_IDLE;
@@ -540,7 +540,7 @@ void EnBaba_FinishInit(EnBaba* this, PlayState* play) {
this->stateFlags |= BOMB_SHOP_LADY_STATE_AUTOTALK;
this->actionFunc = EnBaba_Idle;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
} else {
@@ -603,12 +603,12 @@ void EnBaba_Talk(EnBaba* this, PlayState* play) {
if (this->stateFlags & BOMB_SHOP_LADY_STATE_AUTOTALK) {
if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) {
if (play->msgCtx.unk120B1 == 0) {
- gSaveContext.save.weekEventReg[81] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_81_02);
EnBaba_TriggerTransition(play, ENTRANCE(NORTH_CLOCK_TOWN, 7));
return;
}
} else {
- gSaveContext.save.weekEventReg[81] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_81_02);
EnBaba_TriggerTransition(play, ENTRANCE(NORTH_CLOCK_TOWN, 7));
}
} else {
@@ -626,7 +626,7 @@ void EnBaba_Talk(EnBaba* this, PlayState* play) {
}
} else if (talkState == TEXT_STATE_DONE) {
if (Message_ShouldAdvance(play) && (play->msgCtx.unk120B1 == 0)) {
- gSaveContext.save.weekEventReg[81] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_81_02);
EnBaba_TriggerTransition(play, ENTRANCE(NORTH_CLOCK_TOWN, 7));
}
}
@@ -638,7 +638,7 @@ void EnBaba_GiveBlastMask(EnBaba* this, PlayState* play) {
this->stateFlags |= BOMB_SHOP_LADY_STATE_GAVE_BLAST_MASK;
this->actionFunc = EnBaba_GaveBlastMask;
} else {
- Actor_PickUp(&this->actor, play, GI_MASK_BLAST, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MASK_BLAST, 300.0f, 300.0f);
}
}
@@ -647,14 +647,14 @@ void EnBaba_GaveBlastMask(EnBaba* this, PlayState* play) {
EnBaba_HandleConversation(this, play);
this->actionFunc = EnBaba_Talk;
} else {
- func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
}
}
void EnBaba_FollowSchedule(EnBaba* this, PlayState* play) {
ScheduleOutput scheduleOutput;
- this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed);
+ this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
if (!Schedule_RunScript(play, sSchedule, &scheduleOutput) ||
((this->scheduleResult != scheduleOutput.result) &&
@@ -690,7 +690,7 @@ void EnBaba_KnockedOver(EnBaba* this, PlayState* play) {
if (this->animIndex == BOMB_SHOP_LADY_ANIM_KNOCKED_OVER) {
if (Animation_OnFrame(&this->skelAnime, 0.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_BBVO00);
+ Actor_PlaySfx(&this->actor, NA_SE_VO_BBVO00);
}
if (curFrame == endFrame) {
@@ -698,8 +698,8 @@ void EnBaba_KnockedOver(EnBaba* this, PlayState* play) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex);
}
} else {
- if ((gSaveContext.save.weekEventReg[79] & 0x40) && (DECR(this->sakonDeadTimer) == 0)) {
- Audio_QueueSeqCmd(0x101400FF);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_40) && (DECR(this->sakonDeadTimer) == 0)) {
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 20);
EnBaba_TriggerTransition(play, ENTRANCE(NORTH_CLOCK_TOWN, 7));
} else {
Actor_MoveWithGravity(&this->actor);
@@ -748,7 +748,7 @@ void EnBaba_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
EnBaba_UpdateModel(this, play);
}
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 2335dcb70..7da0ed054 100644
--- a/src/overlays/actors/ovl_En_Baba/z_en_baba.h
+++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.h
@@ -58,6 +58,4 @@ typedef struct EnBaba {
/* 0x43C */ s32 timePathHasReachedEnd;
} EnBaba; // size = 0x440
-extern const ActorInit En_Baba_InitVars;
-
#endif // Z_EN_BABA_H
diff --git a/src/overlays/actors/ovl_En_Baguo/overlay.cfg b/src/overlays/actors/ovl_En_Baguo/overlay.cfg
deleted file mode 100644
index 19e80c5e0..000000000
--- a/src/overlays/actors/ovl_En_Baguo/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Baguo
-z_en_baguo.c
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 e2496e18e..14f4112eb 100644
--- a/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c
+++ b/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c
@@ -41,7 +41,7 @@ typedef enum {
/* 0x1 */ NEJIRON_DIRECTION_LEFT
} NejironRollDirection;
-const ActorInit En_Baguo_InitVars = {
+ActorInit En_Baguo_InitVars = {
ACTOR_EN_BAGUO,
ACTORCAT_ENEMY,
FLAGS,
@@ -144,7 +144,7 @@ void EnBaguo_Init(Actor* thisx, PlayState* play) {
this->actor.shape.yOffset = -3000.0f;
this->actor.gravity = -3.0f;
this->actor.colChkInfo.damageTable = &sDamageTable;
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->actor.flags &= ~ACTOR_FLAG_1;
this->collider.base.acFlags |= AC_HARD;
this->actionFunc = EnBaguo_UndergroundIdle;
@@ -160,10 +160,10 @@ void EnBaguo_UndergroundIdle(EnBaguo* this, PlayState* play) {
this->action = NEJIRON_ACTION_INACTIVE;
if (this->actor.xzDistToPlayer < 200.0f && Player_GetMask(play) != PLAYER_MASK_STONE) {
this->actor.draw = EnBaguo_DrawBody;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BAKUO_APPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BAKUO_APPEAR);
this->actor.world.rot.z = 0;
this->actor.world.rot.x = this->actor.world.rot.z;
- this->actor.flags &= ~ACTOR_FLAG_8000000;
+ this->actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON;
this->actor.flags |= ACTOR_FLAG_1;
this->actionFunc = EnBaguo_EmergeFromUnderground;
}
@@ -205,7 +205,7 @@ void EnBaguo_Idle(EnBaguo* this, PlayState* play) {
if ((play->gameplayFrames % 8) == 0) {
Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos,
this->actor.shape.shadowScale - 20.0f, 10, 8.0f, 500, 10, 1);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BAKUO_VOICE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BAKUO_VOICE);
}
}
}
@@ -244,17 +244,17 @@ void EnBaguo_Roll(EnBaguo* this, PlayState* play) {
this->timer = 100;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = EnBaguo_Idle;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
} else {
if (!this->bouncedFlag && this->collider.base.atFlags & AT_BOUNCED) {
this->zRollDirection ^= 1;
this->bouncedFlag = 1;
- this->actor.speedXZ = -7.0f;
+ this->actor.speed = -7.0f;
}
Math_ApproachF(&this->currentRotation.x, this->targetRotation.x, 0.2f, 1000.0f);
Math_ApproachF(&this->currentRotation.z, this->targetRotation.z, 0.2f, 1000.0f);
- Math_ApproachF(&this->actor.speedXZ, 5.0f, 0.3f, 0.5f);
+ Math_ApproachF(&this->actor.speed, 5.0f, 0.3f, 0.5f);
this->actor.world.rot.x += (s16)this->currentRotation.x;
if (this->currentRotation.z != 0.0f) {
@@ -265,14 +265,14 @@ void EnBaguo_Roll(EnBaguo* this, PlayState* play) {
}
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BAKUO_ROLL - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BAKUO_ROLL - SFX_FLAG);
}
}
void EnBaguo_SetupRetreatUnderground(EnBaguo* this) {
this->action = NEJIRON_ACTION_RETREATING;
this->actionFunc = EnBaguo_RetreatUnderground;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
void EnBaguo_RetreatUnderground(EnBaguo* this, PlayState* play) {
@@ -290,8 +290,8 @@ void EnBaguo_RetreatUnderground(EnBaguo* this, PlayState* play) {
this->actor.shape.yOffset = -3000.0f;
this->actor.draw = EnBaguo_DrawBody;
Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.home.pos);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BAKUO_APPEAR);
- this->actor.flags |= ACTOR_FLAG_8000000;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BAKUO_APPEAR);
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->actor.flags &= ~ACTOR_FLAG_1;
this->actionFunc = EnBaguo_UndergroundIdle;
}
@@ -299,7 +299,7 @@ void EnBaguo_RetreatUnderground(EnBaguo* this, PlayState* play) {
void EnBaguo_PostDetonation(EnBaguo* this, PlayState* play) {
if (this->timer == 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
if (this->timer >= 26) {
@@ -316,21 +316,23 @@ void EnBaguo_CheckForDetonation(EnBaguo* this, PlayState* play) {
// the Nejiron should forcibly explode and as a loop index.
i = false;
if (this->action != NEJIRON_ACTION_EXPLODING && this->action != NEJIRON_ACTION_RETREATING) {
- if (!(this->actor.bgCheckFlags & 1) && this->actor.world.pos.y < (this->actor.home.pos.y - 100.0f)) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) &&
+ this->actor.world.pos.y < (this->actor.home.pos.y - 100.0f)) {
// Force a detonation if we're off the ground and have fallen
// below our home position (e.g., we rolled off a ledge).
i = true;
}
- if (this->actor.bgCheckFlags & 0x60 && this->actor.depthInWater >= 40.0f) {
+ if ((this->actor.bgCheckFlags & (BGCHECKFLAG_WATER | BGCHECKFLAG_WATER_TOUCH)) &&
+ (this->actor.depthInWater >= 40.0f)) {
// Force a detonation if we're too far below the water's surface.
i = true;
}
if ((this->collider.base.acFlags & AC_HIT || i)) {
this->collider.base.acFlags &= ~AC_HIT;
if (i || this->actor.colChkInfo.damageEffect == NEJIRON_DMGEFF_KILL) {
- Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
this->action = NEJIRON_ACTION_EXPLODING;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.shape.shadowScale = 0.0f;
for (i = 0; i < ARRAY_COUNT(this->effects); i++) {
@@ -346,11 +348,11 @@ void EnBaguo_CheckForDetonation(EnBaguo* this, PlayState* play) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.world.pos.x, this->actor.world.pos.y,
this->actor.world.pos.z, 0, 0, 0, CLEAR_TAG_POP);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_BOMB_EXPLOSION);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BAKUO_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_BOMB_EXPLOSION);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BAKUO_DEAD);
this->timer = 30;
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->actor.flags &= ~ACTOR_FLAG_1;
Actor_SetScale(&this->actor, 0.0f);
this->collider.elements->dim.scale = 3.0f;
@@ -390,7 +392,9 @@ void EnBaguo_Update(Actor* thisx, PlayState* play) {
}
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 60.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 60.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
if (this->action != NEJIRON_ACTION_INACTIVE) {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
}
diff --git a/src/overlays/actors/ovl_En_Baguo/z_en_baguo.h b/src/overlays/actors/ovl_En_Baguo/z_en_baguo.h
index 6c98eeaeb..d6eb2173c 100644
--- a/src/overlays/actors/ovl_En_Baguo/z_en_baguo.h
+++ b/src/overlays/actors/ovl_En_Baguo/z_en_baguo.h
@@ -44,6 +44,4 @@ typedef struct EnBaguo {
/* 0x23C */ NejironEffect effects[EN_BAGUO_EFFECT_COUNT];
} EnBaguo; // size = 0x8CC
-extern const ActorInit En_Baguo_InitVars;
-
#endif // Z_EN_BAGUO_H
diff --git a/src/overlays/actors/ovl_En_Baisen/overlay.cfg b/src/overlays/actors/ovl_En_Baisen/overlay.cfg
deleted file mode 100644
index e1ba96f41..000000000
--- a/src/overlays/actors/ovl_En_Baisen/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Baisen
-z_en_baisen.c
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 3555f0998..5479d6c1e 100644
--- a/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c
+++ b/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c
@@ -23,7 +23,7 @@ void func_80BE895C(EnBaisen* this, PlayState* play);
void func_80BE8AAC(EnBaisen* this, PlayState* play);
void func_80BE89D8(EnBaisen* this, PlayState* play);
-const ActorInit En_Baisen_InitVars = {
+ActorInit En_Baisen_InitVars = {
ACTOR_EN_BAISEN,
ACTORCAT_NPC,
FLAGS,
@@ -71,17 +71,15 @@ void EnBaisen_Init(Actor* thisx, PlayState* play) {
this->paramCopy = this->actor.params;
if (this->actor.params == 0) {
this->unk290 = true;
- if (!(gSaveContext.save.weekEventReg[63] & 0x80) &&
- ((gSaveContext.save.day != 3) || !gSaveContext.save.isNight)) {
- Actor_MarkForDeath(&this->actor);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_63_80) && ((gSaveContext.save.day != 3) || !gSaveContext.save.isNight)) {
+ Actor_Kill(&this->actor);
}
} else {
this->collider.dim.radius = 30;
this->collider.dim.height = 60;
this->collider.dim.yShift = 0;
- if ((gSaveContext.save.weekEventReg[63] & 0x80) ||
- ((gSaveContext.save.day == 3) && (gSaveContext.save.isNight))) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_80) || ((gSaveContext.save.day == 3) && gSaveContext.save.isNight)) {
+ Actor_Kill(&this->actor);
}
}
this->actor.targetMode = 6;
@@ -155,7 +153,7 @@ void func_80BE887C(EnBaisen* this, PlayState* play) {
} else {
if (this->paramCopy != 0) {
this->textIdIndex = 0;
- if (gSaveContext.save.weekEventReg[60] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_60_08)) {
this->textIdIndex = 1;
}
if (Player_GetMask(play) == PLAYER_MASK_COUPLE) {
@@ -223,10 +221,10 @@ void func_80BE8AAC(EnBaisen* this, PlayState* play) {
}
}
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->textIdIndex++;
if (this->textIdIndex < 6) {
- func_80151938(play, sTextIds[this->textIdIndex]);
+ Message_ContinueTextbox(play, sTextIds[this->textIdIndex]);
if ((this->textIdIndex % 2) == 0) {
this->unk2A4 = this->heishiPointer;
} else {
@@ -249,12 +247,14 @@ void EnBaisen_Update(Actor* thisx, PlayState* play) {
}
this->actor.shape.rot.y = this->actor.world.rot.y;
if ((this->paramCopy != 0) && (gSaveContext.save.day == 3) && gSaveContext.save.isNight) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
Actor_SetScale(&this->actor, 0.01f);
if (this->unk290) {
func_80BE871C(this);
diff --git a/src/overlays/actors/ovl_En_Baisen/z_en_baisen.h b/src/overlays/actors/ovl_En_Baisen/z_en_baisen.h
index 3fb45f70a..4c0ced24f 100644
--- a/src/overlays/actors/ovl_En_Baisen/z_en_baisen.h
+++ b/src/overlays/actors/ovl_En_Baisen/z_en_baisen.h
@@ -32,6 +32,4 @@ typedef struct EnBaisen {
/* 0x2B0 */ ColliderCylinder collider;
} EnBaisen; // size = 0x2FC
-extern const ActorInit En_Baisen_InitVars;
-
#endif // Z_EN_BAISEN_H
diff --git a/src/overlays/actors/ovl_En_Bal/overlay.cfg b/src/overlays/actors/ovl_En_Bal/overlay.cfg
deleted file mode 100644
index 53fdf3ee5..000000000
--- a/src/overlays/actors/ovl_En_Bal/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Bal
-z_en_bal.c
diff --git a/src/overlays/actors/ovl_En_Bal/z_en_bal.c b/src/overlays/actors/ovl_En_Bal/z_en_bal.c
index dec839006..779373a9d 100644
--- a/src/overlays/actors/ovl_En_Bal/z_en_bal.c
+++ b/src/overlays/actors/ovl_En_Bal/z_en_bal.c
@@ -16,7 +16,7 @@ void EnBal_Update(Actor* thisx, PlayState* play);
void EnBal_Draw(Actor* thisx, PlayState* play);
#if 0
-const ActorInit En_Bal_InitVars = {
+ActorInit En_Bal_InitVars = {
ACTOR_EN_BAL,
ACTORCAT_NPC,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Bal/z_en_bal.h b/src/overlays/actors/ovl_En_Bal/z_en_bal.h
index 7f64293db..a64ef195d 100644
--- a/src/overlays/actors/ovl_En_Bal/z_en_bal.h
+++ b/src/overlays/actors/ovl_En_Bal/z_en_bal.h
@@ -15,6 +15,4 @@ typedef struct EnBal {
/* 0x190 */ char unk_190[0x224];
} EnBal; // size = 0x3B4
-extern const ActorInit En_Bal_InitVars;
-
#endif // Z_EN_BAL_H
diff --git a/src/overlays/actors/ovl_En_Bat/overlay.cfg b/src/overlays/actors/ovl_En_Bat/overlay.cfg
deleted file mode 100644
index 1d11f79a3..000000000
--- a/src/overlays/actors/ovl_En_Bat/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Bat
-z_en_bat.c
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 5bec14e3e..963bc4104 100644
--- a/src/overlays/actors/ovl_En_Bat/z_en_bat.c
+++ b/src/overlays/actors/ovl_En_Bat/z_en_bat.c
@@ -4,6 +4,7 @@
* Description: Bad Bat
*/
+#include "prevent_bss_reordering.h"
#include "z_en_bat.h"
#include "objects/object_bat/object_bat.h"
@@ -28,7 +29,7 @@ void EnBat_DiveAttack(EnBat* this, PlayState* play);
void EnBat_Die(EnBat* this, PlayState* play);
void EnBat_Stunned(EnBat* this, PlayState* play);
-const ActorInit En_Bat_InitVars = {
+ActorInit En_Bat_InitVars = {
ACTOR_EN_BAT,
ACTORCAT_ENEMY,
FLAGS,
@@ -142,10 +143,10 @@ void EnBat_Init(Actor* thisx, PlayState* play) {
Actor_SetFocus(thisx, 20.0f);
if (sAlreadySpawned) {
- Actor_MarkForDeath(thisx);
+ Actor_Kill(thisx);
} else if (EnBat_IsGraveyardOnSecondDay(play)) {
if (Flags_GetSwitch(play, this->switchFlag)) {
- Actor_MarkForDeath(thisx);
+ Actor_Kill(thisx);
} else {
this->actor.room = -1;
}
@@ -164,8 +165,8 @@ void EnBat_Init(Actor* thisx, PlayState* play) {
&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), -1, thisx->unk20,
- NULL);
+ 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)--;
}
}
@@ -193,7 +194,7 @@ void EnBat_StepAnimation(EnBat* this, s32 frameStep) {
this->animationFrame -= ARRAY_COUNT(sWingsDLs);
}
if ((prevFrame < BAD_BAT_FLAP_FRAME) && (this->animationFrame >= BAD_BAT_FLAP_FRAME)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FFLY_FLY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FFLY_FLY);
}
}
@@ -203,7 +204,7 @@ void EnBat_SetupPerch(EnBat* this) {
this->collider.dim.worldSphere.center.x = this->actor.focus.pos.x;
this->collider.dim.worldSphere.center.y = this->actor.focus.pos.y;
this->collider.dim.worldSphere.center.z = this->actor.focus.pos.z;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = EnBat_Perch;
}
@@ -214,7 +215,7 @@ void EnBat_Perch(EnBat* this, PlayState* play) {
void EnBat_SetupFlyIdle(EnBat* this) {
this->timer = 100;
this->collider.base.acFlags |= AC_ON;
- this->actor.speedXZ = 3.5f;
+ this->actor.speed = 3.5f;
this->actionFunc = EnBat_FlyIdle;
}
@@ -225,12 +226,12 @@ void EnBat_FlyIdle(EnBat* this, PlayState* play) {
finishedRotStep = Math_ScaledStepToS(&this->actor.shape.rot.y, this->yawTarget, 0x300);
- if (this->actor.bgCheckFlags & 8) {
- this->actor.bgCheckFlags &= ~8;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_WALL;
this->yawTarget = this->actor.wallYaw;
} else if (Math3D_XZDistanceSquared(this->actor.world.pos.x, this->actor.world.pos.z, this->actor.home.pos.x,
this->actor.home.pos.z) > SQ(300.0f)) {
- this->yawTarget = Actor_YawToPoint(&this->actor, &this->actor.home.pos);
+ this->yawTarget = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
} else if (finishedRotStep && (Rand_ZeroOne() < 0.015f)) {
this->yawTarget =
this->actor.shape.rot.y + (((s32)(0x1000 * Rand_ZeroOne()) + 0x1000) * ((Rand_ZeroOne() < 0.5f) ? -1 : 1));
@@ -238,7 +239,7 @@ void EnBat_FlyIdle(EnBat* this, PlayState* play) {
finishedRotStep = Math_ScaledStepToS(&this->actor.shape.rot.x, this->pitchTarget, 0x100);
- if ((this->actor.bgCheckFlags & 1) || (this->actor.depthInWater > -40.0f)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->actor.depthInWater > -40.0f)) {
this->pitchTarget = -0x1000;
} else if (this->actor.world.pos.y < (this->actor.home.pos.y - 100.0f)) {
this->pitchTarget = -((s32)(0x800 * Rand_ZeroOne()) + 0x800);
@@ -262,7 +263,7 @@ void EnBat_FlyIdle(EnBat* this, PlayState* play) {
void EnBat_SetupDiveAttack(EnBat* this) {
this->collider.base.atFlags |= AT_ON;
this->timer = 300;
- this->actor.speedXZ = 4.0f;
+ this->actor.speed = 4.0f;
sNumberAttacking++;
this->actionFunc = EnBat_DiveAttack;
}
@@ -282,7 +283,7 @@ void EnBat_DiveAttack(EnBat* this, PlayState* play) {
preyPos.y = player->actor.world.pos.y + 20.0f;
preyPos.z = player->actor.world.pos.z;
- pitchTarget = Actor_PitchToPoint(&this->actor, &preyPos);
+ pitchTarget = Actor_WorldPitchTowardPoint(&this->actor, &preyPos);
pitchTarget = CLAMP(pitchTarget, -0x3000, 0x3000);
Math_SmoothStepToS(&this->actor.shape.rot.x, pitchTarget, 2, 0x400, 0x40);
} else {
@@ -295,20 +296,20 @@ void EnBat_DiveAttack(EnBat* this, PlayState* play) {
this->timer--;
if ((this->timer == 0) || (this->collider.base.atFlags & AT_HIT) || (Player_GetMask(play) == PLAYER_MASK_STONE) ||
- (this->actor.bgCheckFlags & 1) || (player->stateFlags1 & PLAYER_STATE1_800000) ||
+ (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (player->stateFlags1 & PLAYER_STATE1_800000) ||
(this->actor.depthInWater > -40.0f)) {
if (this->collider.base.atFlags & AT_HIT) {
this->collider.base.atFlags &= ~AT_HIT;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FFLY_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FFLY_ATTACK);
}
this->collider.base.atFlags &= ~AT_ON;
sNumberAttacking--;
EnBat_SetupFlyIdle(this);
- } else if ((this->actor.bgCheckFlags & 8) &&
+ } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) &&
(ABS_ALT(BINANG_SUB(this->actor.wallYaw, this->actor.yawTowardsPlayer)) > 0x6800)) {
sNumberAttacking--;
this->collider.base.atFlags &= ~AT_ON;
- this->actor.bgCheckFlags &= ~8;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_WALL;
this->yawTarget = this->actor.wallYaw;
EnBat_SetupFlyIdle(this);
}
@@ -317,10 +318,10 @@ void EnBat_DiveAttack(EnBat* this, PlayState* play) {
void EnBat_SetupDie(EnBat* this, PlayState* play) {
this->actor.flags &= ~ACTOR_FLAG_1;
Enemy_StartFinishingBlow(play, &this->actor);
- this->actor.speedXZ *= Math_CosS(this->actor.world.rot.x);
- this->actor.bgCheckFlags &= ~1;
+ this->actor.speed *= Math_CosS(this->actor.world.rot.x);
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
this->actor.velocity.y = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FFLY_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FFLY_DEAD);
if (this->actor.colChkInfo.damageEffect == BAD_BAT_DMGEFF_ICE) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
@@ -340,10 +341,10 @@ void EnBat_SetupDie(EnBat* this, PlayState* play) {
this->drawDmgEffScale = 0.45f;
}
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 40);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 40);
if (this->actor.flags & ACTOR_FLAG_8000) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
this->collider.base.acFlags &= ~AC_ON;
@@ -352,7 +353,7 @@ void EnBat_SetupDie(EnBat* this, PlayState* play) {
}
void EnBat_Die(EnBat* this, PlayState* play) {
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.5f);
+ Math_StepToF(&this->actor.speed, 0.0f, 0.5f);
this->actor.colorFilterTimer = 40;
if (!(this->actor.flags & ACTOR_FLAG_8000)) { // Carried by arrow
@@ -361,7 +362,7 @@ void EnBat_Die(EnBat* this, PlayState* play) {
this->actor.shape.rot.z += 0x1780;
}
- if ((this->actor.bgCheckFlags & 1) || (this->actor.floorHeight == BGCHECK_Y_MIN)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->actor.floorHeight == BGCHECK_Y_MIN)) {
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
Actor_SpawnIceEffects(play, &this->actor, this->bodyPartPoss, ARRAY_COUNT(this->bodyPartPoss), 2, 0.2f,
0.2f);
@@ -369,7 +370,7 @@ void EnBat_Die(EnBat* this, PlayState* play) {
func_800B3030(play, &this->actor.world.pos, &gZeroVec3f, &gZeroVec3f, 100, 0, 0);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 11, NA_SE_EN_EXTINCT);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
if (this->actor.room == -1) {
Actor* enemy = NULL;
@@ -397,17 +398,18 @@ void EnBat_SetupStunned(EnBat* this) {
if (this->actionFunc != EnBat_Stunned) {
this->actor.shape.yOffset = 700.0f;
this->actor.velocity.y = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.world.pos.y += 13.0f;
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
- Actor_SetColorFilter(&this->actor, 0, 255, 0, this->timer);
+
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, this->timer);
this->actionFunc = EnBat_Stunned;
}
void EnBat_Stunned(EnBat* this, PlayState* play) {
Math_ScaledStepToS(&this->actor.shape.rot.x, 0, 0x100);
- if ((this->actor.bgCheckFlags & 1) || (this->actor.floorHeight == BGCHECK_Y_MIN)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->actor.floorHeight == BGCHECK_Y_MIN)) {
if (this->timer != 0) {
this->timer--;
}
@@ -478,13 +480,15 @@ void EnBat_Update(Actor* thisx, PlayState* play) {
}
if (this->actionFunc == EnBat_DiveAttack) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f, 15.0f, 50.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f, 15.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
} else if ((this->actionFunc != EnBat_FlyIdle) ||
((this->actor.xzDistToPlayer < 400.0f) && (this->actor.projectedPos.z > 0.0f))) {
if (this->paramFlags & BAD_BAT_PARAMFLAG_0) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f, 15.0f, 50.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f, 15.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
} else {
- Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f, 15.0f, 50.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f, 15.0f, 50.0f, UPDBGCHECKINFO_FLAG_4);
}
} else {
Math_Vec3f_Copy(&this->actor.prevPos, &prevPos);
diff --git a/src/overlays/actors/ovl_En_Bat/z_en_bat.h b/src/overlays/actors/ovl_En_Bat/z_en_bat.h
index 4f4ada810..479cfa24d 100644
--- a/src/overlays/actors/ovl_En_Bat/z_en_bat.h
+++ b/src/overlays/actors/ovl_En_Bat/z_en_bat.h
@@ -40,6 +40,4 @@ typedef struct EnBat {
/* 0x184 */ ColliderSphere collider;
} EnBat; // size = 0x1DC
-extern const ActorInit En_Bat_InitVars;
-
#endif // Z_EN_BAT_H
diff --git a/src/overlays/actors/ovl_En_Bb/overlay.cfg b/src/overlays/actors/ovl_En_Bb/overlay.cfg
deleted file mode 100644
index 048245caf..000000000
--- a/src/overlays/actors/ovl_En_Bb/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Bb
-z_en_bb.c
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 a66c28a89..071515919 100644
--- a/src/overlays/actors/ovl_En_Bb/z_en_bb.c
+++ b/src/overlays/actors/ovl_En_Bb/z_en_bb.c
@@ -35,7 +35,7 @@ typedef enum {
/* 1 */ BB_BODY_PART_DRAW_STATUS_DEAD,
} EnBbBodyPartDrawStatus;
-const ActorInit En_Bb_InitVars = {
+ActorInit En_Bb_InitVars = {
ACTOR_EN_BB,
ACTORCAT_ENEMY,
FLAGS,
@@ -171,14 +171,14 @@ void EnBb_Destroy(Actor* thisx, PlayState* play) {
void EnBb_CheckForWall(EnBb* this) {
s16 yawDiff;
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
yawDiff = this->actor.shape.rot.y - this->actor.wallYaw;
if (ABS_ALT(yawDiff) > 0x4000) {
this->actor.shape.rot.y = ((this->actor.wallYaw * 2) - this->actor.shape.rot.y) - 0x8000;
}
this->targetYRotation = this->actor.shape.rot.y;
- this->actor.bgCheckFlags &= ~8;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_WALL;
}
}
@@ -189,7 +189,7 @@ void EnBb_Freeze(EnBb* this) {
this->timer = 80;
this->drawDmgEffAlpha = 1.0f;
this->actor.flags &= ~ACTOR_FLAG_200;
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 80);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 80);
}
void EnBb_Thaw(EnBb* this, PlayState* play) {
@@ -216,7 +216,7 @@ void EnBb_UpdateStateForFlying(EnBb* this) {
Math_StepToF(&this->flameScaleY, 0.8f, 0.1f);
Math_StepToF(&this->flameScaleX, 1.0f, 0.1f);
EnBb_CheckForWall(this);
- Math_StepToF(&this->actor.speedXZ, this->maxSpeed, 0.5f);
+ Math_StepToF(&this->actor.speed, this->maxSpeed, 0.5f);
Math_ApproachS(&this->actor.shape.rot.y, this->targetYRotation, 5, 0x3E8);
this->actor.world.rot.y = this->actor.shape.rot.y;
}
@@ -236,10 +236,10 @@ void EnBb_SetupFlyIdle(EnBb* this) {
this->actor.gravity = 0.0f;
this->actor.velocity.y = 0.0f;
this->flyHeightMod = (Math_CosS(this->bobPhase) * 10.0f) + 30.0f;
- this->targetYRotation = Actor_YawToPoint(&this->actor, &this->actor.home.pos);
+ this->targetYRotation = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
if ((this->actor.xzDistToPlayer < (this->attackRange + 120.0f)) ||
- (Actor_XZDistanceToPoint(&this->actor, &this->actor.home.pos) < 300.0f)) {
+ (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) < 300.0f)) {
this->targetYRotation += (s16)((s32)Rand_Next() >> 0x11);
}
@@ -255,9 +255,9 @@ void EnBb_FlyIdle(EnBb* this, PlayState* play) {
EnBb_UpdateStateForFlying(this);
if (Animation_OnFrame(&this->skelAnime, 5.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BUBLE_WING);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_WING);
} else if ((Animation_OnFrame(&this->skelAnime, 0.0f)) && (Rand_ZeroOne() < 0.1f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BUBLE_LAUGH);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_LAUGH);
}
DECR(this->attackWaitTimer);
@@ -288,18 +288,18 @@ void EnBb_Attack(EnBb* this, PlayState* play) {
EnBb_UpdateStateForFlying(this);
if ((Animation_OnFrame(&this->skelAnime, 0.0f)) || (Animation_OnFrame(&this->skelAnime, 5.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BUBLE_MOUTH);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_MOUTH);
} else if ((Animation_OnFrame(&this->skelAnime, 2.0f)) || (Animation_OnFrame(&this->skelAnime, 7.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BUBLE_WING);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_WING);
} else if ((Animation_OnFrame(&this->skelAnime, 0.0f)) && (Rand_ZeroOne() < 0.1f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BUBLE_LAUGH);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_LAUGH);
}
this->timer--;
if (((this->attackRange + 120.0f) < this->actor.xzDistToPlayer) || (this->timer == 0) ||
(Player_GetMask(play) == PLAYER_MASK_STONE) ||
- (Actor_XZDistanceToPoint(&this->actor, &this->actor.home.pos) > 400.0f)) {
+ (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > 400.0f)) {
EnBb_SetupFlyIdle(this);
}
}
@@ -309,11 +309,11 @@ void EnBb_SetupDown(EnBb* this) {
this->collider.base.atFlags |= AT_ON;
this->timer = 140;
this->collider.base.acFlags |= AC_ON;
- this->actor.speedXZ = 2.0f;
+ this->actor.speed = 2.0f;
this->flameScaleY = 0.0f;
this->flameScaleX = 0.0f;
this->actor.gravity = -2.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BUBLE_DOWN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_DOWN);
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = EnBb_Down;
}
@@ -325,10 +325,10 @@ void EnBb_Down(EnBb* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
EnBb_CheckForWall(this);
- if (this->actor.bgCheckFlags & 1) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EYEGOLE_ATTACK);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_ATTACK);
if (this->timer == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BUBLE_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_UP);
EnBb_SetupFlyIdle(this);
return;
}
@@ -339,14 +339,14 @@ void EnBb_Down(EnBb* this, PlayState* play) {
this->actor.velocity.y = 10.0f;
}
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos, 7.0f, 2, 2.0f, 0, 0, 0);
Math_ScaledStepToS(&this->actor.shape.rot.y, BINANG_ADD(this->actor.yawTowardsPlayer, 0x8000), 0xBB8);
}
this->actor.world.rot.y = this->actor.shape.rot.y;
if (Animation_OnFrame(&this->skelAnime, 5.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BUBLE_WING);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_WING);
}
if (this->timer > 0) {
@@ -363,11 +363,11 @@ void EnBb_SetupDead(EnBb* this, PlayState* play) {
func_800BE568(&this->actor, &this->collider);
this->timer = 15;
this->actor.shape.rot.x += 0x4E20;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EN_BUBLE_DEAD);
Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0x70);
this->actor.velocity.y = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->bodyPartDrawStatus = BB_BODY_PART_DRAW_STATUS_DEAD;
this->actor.gravity = -1.5f;
@@ -412,22 +412,22 @@ void EnBb_Dead(EnBb* this, PlayState* play) {
void EnBb_SetupDamage(EnBb* this) {
this->collider.base.acFlags &= ~AC_ON;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BUBLE_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_DAMAGE);
func_800BE568(&this->actor, &this->collider);
if (this->actor.colChkInfo.damageEffect == EN_BB_DMGEFF_ZORA_MAGIC) {
- Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40);
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_LARGE;
this->drawDmgEffAlpha = 2.0f;
this->drawDmgEffScale = 0.4f;
} else if (this->actor.colChkInfo.damageEffect == EN_BB_DMGEFF_STUN) {
- Actor_SetColorFilter(&this->actor, 0, 255, 0, 20);
- this->actor.speedXZ = 0.0f;
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 20);
+ this->actor.speed = 0.0f;
} else if (this->actor.colChkInfo.damageEffect == EN_BB_DMGEFF_HOOKSHOT) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
} else {
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 20);
- this->actor.speedXZ = 7.0f;
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 20);
+ this->actor.speed = 7.0f;
}
this->actor.gravity = -1.0f;
@@ -435,14 +435,14 @@ void EnBb_SetupDamage(EnBb* this) {
}
void EnBb_Damage(EnBb* this, PlayState* play) {
- Math_SmoothStepToF(&this->actor.speedXZ, 0.0f, 1.0f, 0.5f, 0.0f);
- if ((this->actor.bgCheckFlags & 1) && (this->actor.speedXZ < 0.1f)) {
+ Math_SmoothStepToF(&this->actor.speed, 0.0f, 1.0f, 0.5f, 0.0f);
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.speed < 0.1f)) {
EnBb_SetupDown(this);
}
}
void EnBb_SetupFrozen(EnBb* this) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->actor.velocity.y > 0.0f) {
this->actor.velocity.y = 0.0f;
}
@@ -472,7 +472,7 @@ void EnBb_SetupWaitForRevive(EnBb* this) {
this->actor.shape.rot.x = 0;
this->actor.world.pos.y += 50.0f;
this->timer = 200;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.velocity.y = 0.0f;
this->actor.gravity = 0.0f;
this->actionFunc = EnBb_WaitForRevive;
@@ -565,7 +565,7 @@ void EnBb_UpdateDamage(EnBb* this, PlayState* play) {
this->collider.base.atFlags &= ~AT_HIT;
this->actor.world.rot.y = this->actor.yawTowardsPlayer + 0x8000;
this->actor.shape.rot.y = this->actor.world.rot.y;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BUBLE_BITE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_BITE);
if (this->flameScaleX > 0.0f) {
gSaveContext.jinxTimer = 1200;
@@ -585,7 +585,8 @@ void EnBb_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
if ((this->actionFunc != EnBb_Dead) && (this->actionFunc != EnBb_WaitForRevive)) {
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 25.0f, 40.0f, 7);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 25.0f, 40.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4);
this->collider.dim.worldSphere.center.x = this->actor.world.pos.x;
this->collider.dim.worldSphere.center.y = this->actor.world.pos.y + 15.0f;
diff --git a/src/overlays/actors/ovl_En_Bb/z_en_bb.h b/src/overlays/actors/ovl_En_Bb/z_en_bb.h
index e6171065a..c852397d4 100644
--- a/src/overlays/actors/ovl_En_Bb/z_en_bb.h
+++ b/src/overlays/actors/ovl_En_Bb/z_en_bb.h
@@ -37,6 +37,4 @@ typedef struct EnBb {
/* 0x2F4 */ ColliderSphere collider;
} EnBb; // size = 0x34C
-extern const ActorInit En_Bb_InitVars;
-
#endif // Z_EN_BB_H
diff --git a/src/overlays/actors/ovl_En_Bba_01/overlay.cfg b/src/overlays/actors/ovl_En_Bba_01/overlay.cfg
deleted file mode 100644
index e26bcdd36..000000000
--- a/src/overlays/actors/ovl_En_Bba_01/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Bba_01
-z_en_bba_01.c
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 8398a69ed..b751a50d5 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
@@ -28,7 +28,7 @@ void EnBba01_Walk(EnHy* this, PlayState* play);
void EnBba01_FaceFoward(EnHy* this, PlayState* play);
void EnBba01_Talk(EnHy* this, PlayState* play);
-const ActorInit En_Bba_01_InitVars = {
+ActorInit En_Bba_01_InitVars = {
ACTOR_EN_BBA_01,
ACTORCAT_NPC,
FLAGS,
@@ -111,7 +111,7 @@ void EnBba01_UpdateModel(EnBba01* this, PlayState* play) {
EnHy_UpdateSkelAnime(&this->enHy, play);
if (SubS_AngleDiffLessEqual(this->enHy.actor.shape.rot.y, 0x36B0, this->enHy.actor.yawTowardsPlayer)) {
point.x = player->actor.world.pos.x;
- point.y = player->bodyPartsPos[7].y + 3.0f;
+ point.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
point.z = player->actor.world.pos.z;
SubS_TrackPoint(&point, &this->enHy.actor.focus.pos, &this->enHy.actor.shape.rot, &this->enHy.trackTarget,
&this->enHy.headRot, &this->enHy.torsoRot, &sTrackOptions);
@@ -150,7 +150,7 @@ s32 func_809CC270(EnBba01* this, PlayState* play) {
Actor_GetScreenPos(play, &this->enHy.actor, &x, &y);
//! @bug: Both x and y conditionals are always true, || should be an &&
if (!this->enHy.waitingOnInit && ((x >= 0) || (x < SCREEN_WIDTH)) && ((y >= 0) || (y < SCREEN_HEIGHT))) {
- func_800B85E0(&this->enHy.actor, play, 30.0f, PLAYER_AP_MAGIC_BEANS);
+ func_800B85E0(&this->enHy.actor, play, 30.0f, PLAYER_IA_MAGIC_BEANS);
}
return true;
}
@@ -220,7 +220,7 @@ void EnBba01_Init(Actor* thisx, PlayState* play) {
if ((this->enHy.animObjIndex < 0) || (this->enHy.headObjIndex < 0) || (this->enHy.skelUpperObjIndex < 0) ||
(this->enHy.skelLowerObjIndex < 0)) {
- Actor_MarkForDeath(&this->enHy.actor);
+ Actor_Kill(&this->enHy.actor);
}
this->enHy.actor.draw = NULL;
Collider_InitCylinder(play, &this->enHy.collider);
@@ -244,7 +244,7 @@ void EnBba01_Update(Actor* thisx, PlayState* play) {
EnBba01_TestIsTalking(this, play);
this->enHy.actionFunc(&this->enHy, play);
- Actor_UpdateBgCheckInfo(play, &this->enHy.actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->enHy.actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
EnBba01_UpdateModel(this, play);
func_809CC270(this, play);
}
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 c9030f112..7160594d8 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
@@ -14,6 +14,4 @@ typedef struct EnBba01 {
/* 0x3EC */ UNK_TYPE1 unk_3EC[0x230];
} EnBba01; // size = 0x61C
-extern const ActorInit En_Bba_01_InitVars;
-
#endif // Z_EN_BBA_01_H
diff --git a/src/overlays/actors/ovl_En_Bbfall/overlay.cfg b/src/overlays/actors/ovl_En_Bbfall/overlay.cfg
deleted file mode 100644
index 711e74e29..000000000
--- a/src/overlays/actors/ovl_En_Bbfall/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Bbfall
-z_en_bbfall.c
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 875a5a079..a1e2798df 100644
--- a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c
+++ b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c
@@ -35,7 +35,7 @@ typedef enum {
/* 1 */ BBFALL_BODY_PART_DRAW_STATUS_DEAD,
} EnBbfallBodyPartDrawStatus;
-const ActorInit En_Bbfall_InitVars = {
+ActorInit En_Bbfall_InitVars = {
ACTOR_EN_BBFALL,
ACTORCAT_ENEMY,
FLAGS,
@@ -194,7 +194,7 @@ void EnBbfall_Freeze(EnBbfall* this) {
this->timer = 80;
this->drawDmgEffAlpha = 1.0f;
this->actor.flags &= ~ACTOR_FLAG_200;
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 80);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 80);
}
void EnBbfall_Thaw(EnBbfall* this, PlayState* play) {
@@ -211,9 +211,9 @@ void EnBbfall_Thaw(EnBbfall* this, PlayState* play) {
*/
s32 EnBbfall_IsTouchingLava(EnBbfall* this, PlayState* play) {
if (!SurfaceType_IsWallDamage(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId)) {
- u32 floorType = func_800C99D4(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId);
+ FloorType floorType = SurfaceType_GetFloorType(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId);
- if ((floorType == 2) || (floorType == 3) || (floorType == 9)) {
+ if ((floorType == FLOOR_TYPE_2) || (floorType == FLOOR_TYPE_3) || (floorType == FLOOR_TYPE_9)) {
return true;
}
}
@@ -223,7 +223,7 @@ s32 EnBbfall_IsTouchingLava(EnBbfall* this, PlayState* play) {
void EnBbfall_PlaySfx(EnBbfall* this) {
if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 5.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BUBLE_MOUTH);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_MOUTH);
}
func_800B9010(&this->actor, NA_SE_EN_BUBLEFALL_FIRE - SFX_FLAG);
@@ -237,14 +237,14 @@ void EnBbfall_PlaySfx(EnBbfall* this) {
void EnBbfall_CheckForWall(EnBbfall* this) {
s16 yawDiff;
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
yawDiff = this->actor.shape.rot.y - this->actor.wallYaw;
if (ABS_ALT(yawDiff) > 0x4000) {
this->actor.shape.rot.y = ((this->actor.wallYaw * 2) - this->actor.shape.rot.y) - 0x8000;
}
- this->actor.bgCheckFlags &= ~8;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_WALL;
}
}
@@ -273,7 +273,7 @@ void EnBbfall_SetupWaitForPlayer(EnBbfall* this) {
this->actor.colChkInfo.health = sColChkInfoInit.health;
this->actor.colorFilterTimer = 0;
this->isBgCheckCollisionEnabled = false;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.gravity = 0.0f;
this->actor.velocity.y = 0.0f;
Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.home.pos);
@@ -283,7 +283,7 @@ void EnBbfall_SetupWaitForPlayer(EnBbfall* this) {
this->flamePos[i].y -= 47.0f;
}
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
this->actor.flags &= ~ACTOR_FLAG_1;
this->actionFunc = EnBbfall_WaitForPlayer;
}
@@ -306,7 +306,7 @@ void EnBbfall_SetupEmerge(EnBbfall* this) {
this->actor.velocity.y = 17.0f;
EnBbfall_EnableColliders(this);
this->actor.flags |= ACTOR_FLAG_1;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BUBLEFALL_APPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLEFALL_APPEAR);
this->actionFunc = EnBbfall_Emerge;
}
@@ -322,8 +322,8 @@ void EnBbfall_Emerge(EnBbfall* this, PlayState* play) {
void EnBbfall_SetupFly(EnBbfall* this) {
this->flameOpacity = 255;
this->isBgCheckCollisionEnabled = true;
- this->actor.bgCheckFlags &= ~1;
- this->actor.speedXZ = 5.0f;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
+ this->actor.speed = 5.0f;
this->actor.gravity = -1.0f;
this->actionFunc = EnBbfall_Fly;
}
@@ -333,7 +333,7 @@ void EnBbfall_Fly(EnBbfall* this, PlayState* play) {
Math_StepToF(&this->flameScaleY, 0.8f, 0.1f);
Math_StepToF(&this->flameScaleX, 1.0f, 0.1f);
EnBbfall_CheckForWall(this);
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
if (EnBbfall_IsTouchingLava(this, play)) {
EnBbfall_SetupSinkIntoLava(this);
} else {
@@ -343,7 +343,7 @@ void EnBbfall_Fly(EnBbfall* this, PlayState* play) {
this->actor.shape.rot.y += (s16)randPlusMinusPoint5Scaled(73728.0f);
}
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
}
this->actor.world.rot.y = this->actor.shape.rot.y;
@@ -372,11 +372,11 @@ void EnBbfall_SetupDown(EnBbfall* this) {
this->timer = 200;
this->flameOpacity = 0;
this->collider.base.acFlags |= AC_ON;
- this->actor.speedXZ = 2.0f;
+ this->actor.speed = 2.0f;
this->flameScaleY = 0.0f;
this->flameScaleX = 0.0f;
this->actor.gravity = -2.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BUBLE_DOWN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_DOWN);
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = EnBbfall_Down;
}
@@ -385,15 +385,15 @@ void EnBbfall_Down(EnBbfall* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
EnBbfall_CheckForWall(this);
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
if (EnBbfall_IsTouchingLava(this, play)) {
EnBbfall_SetupSinkIntoLava(this);
return;
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EYEGOLE_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_ATTACK);
if (this->timer == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BUBLE_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_UP);
EnBbfall_EnableColliders(this);
this->actor.velocity.y = 8.0f;
EnBbfall_SetupFly(this);
@@ -406,14 +406,14 @@ void EnBbfall_Down(EnBbfall* this, PlayState* play) {
this->actor.velocity.y = 10.0f;
}
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos, 7.0f, 2, 2.0f, 0, 0, 0);
Math_ScaledStepToS(&this->actor.shape.rot.y, BINANG_ADD(this->actor.yawTowardsPlayer, 0x8000), 0xBB8);
}
this->actor.world.rot.y = this->actor.shape.rot.y;
if (Animation_OnFrame(&this->skelAnime, 5.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BUBLE_WING);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_WING);
}
if (this->timer > 0) {
@@ -430,11 +430,11 @@ void EnBbfall_SetupDead(EnBbfall* this, PlayState* play) {
func_800BE5CC(&this->actor, &this->collider, 0);
this->timer = 15;
this->actor.shape.rot.x += 0x4E20;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EN_BUBLE_DEAD);
Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0x70);
this->actor.velocity.y = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->bodyPartDrawStatus = BBFALL_BODY_PART_DRAW_STATUS_DEAD;
this->actor.gravity = -1.5f;
@@ -466,41 +466,42 @@ void EnBbfall_Dead(EnBbfall* this, PlayState* play) {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->bodyPartsPos[i], 11, NA_SE_EN_EXTINCT);
}
- Actor_MarkForDeath(&this->actor);
- } else {
- for (i = 0; i < ARRAY_COUNT(this->bodyPartsPos); i++) {
- Math_Vec3f_Sum(&this->bodyPartsPos[i], &this->bodyPartsVelocity[i], &this->bodyPartsPos[i]);
- this->bodyPartsVelocity[i].y += this->actor.gravity;
- }
+ Actor_Kill(&this->actor);
+ return;
+ }
+
+ for (i = 0; i < ARRAY_COUNT(this->bodyPartsPos); i++) {
+ Math_Vec3f_Sum(&this->bodyPartsPos[i], &this->bodyPartsVelocity[i], &this->bodyPartsPos[i]);
+ this->bodyPartsVelocity[i].y += this->actor.gravity;
}
}
void EnBbfall_SetupDamage(EnBbfall* this) {
this->collider.base.acFlags &= ~AC_ON;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BUBLE_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_DAMAGE);
func_800BE5CC(&this->actor, &this->collider, 0);
if (this->actor.colChkInfo.damageEffect == EN_BBFALL_DMGEFF_ZORA_MAGIC) {
- Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40);
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_LARGE;
this->drawDmgEffAlpha = 2.0f;
this->drawDmgEffScale = 0.4f;
} else if (this->actor.colChkInfo.damageEffect == EN_BBFALL_DMGEFF_STUN) {
- Actor_SetColorFilter(&this->actor, 0, 255, 0, 20);
- this->actor.speedXZ = 0.0f;
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 20);
+ this->actor.speed = 0.0f;
} else if (this->actor.colChkInfo.damageEffect == EN_BBFALL_DMGEFF_HOOKSHOT) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
} else {
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 20);
- this->actor.speedXZ = 7.0f;
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 20);
+ this->actor.speed = 7.0f;
}
this->actionFunc = EnBbfall_Damage;
}
void EnBbfall_Damage(EnBbfall* this, PlayState* play) {
- Math_SmoothStepToF(&this->actor.speedXZ, 0.0f, 1.0f, 0.5f, 0.0f);
- if ((this->actor.bgCheckFlags & 1) && (this->actor.speedXZ < 0.1f)) {
+ Math_SmoothStepToF(&this->actor.speed, 0.0f, 1.0f, 0.5f, 0.0f);
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.speed < 0.1f)) {
if (EnBbfall_IsTouchingLava(this, play)) {
EnBbfall_SetupSinkIntoLava(this);
} else {
@@ -510,7 +511,7 @@ void EnBbfall_Damage(EnBbfall* this, PlayState* play) {
}
void EnBbfall_SetupFrozen(EnBbfall* this) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->actor.velocity.y > 0.0f) {
this->actor.velocity.y = 0.0f;
}
@@ -599,7 +600,8 @@ void EnBbfall_Update(Actor* thisx, PlayState* play) {
if (this->actionFunc != EnBbfall_Dead) {
Actor_MoveWithGravity(&this->actor);
if (this->isBgCheckCollisionEnabled) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 25.0f, 20.0f, 7);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 25.0f, 20.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4);
}
for (i = ARRAY_COUNT(this->flamePos) - 1; i >= 2; i--) {
diff --git a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.h b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.h
index e835015e1..19c643ea7 100644
--- a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.h
+++ b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.h
@@ -33,6 +33,4 @@ typedef struct EnBbfall {
/* 0x3A4 */ ColliderJntSphElement colliderElements[3];
} EnBbfall; // size = 0x464
-extern const ActorInit En_Bbfall_InitVars;
-
#endif // Z_EN_BBFALL_H
diff --git a/src/overlays/actors/ovl_En_Bee/overlay.cfg b/src/overlays/actors/ovl_En_Bee/overlay.cfg
deleted file mode 100644
index ef6192fc4..000000000
--- a/src/overlays/actors/ovl_En_Bee/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Bee
-z_en_bee.c
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 7d40e9931..f93d18bf5 100644
--- a/src/overlays/actors/ovl_En_Bee/z_en_bee.c
+++ b/src/overlays/actors/ovl_En_Bee/z_en_bee.c
@@ -22,7 +22,7 @@ void EnBee_Attack(EnBee* this, PlayState* play);
s32 sNumLoadedBees = 0;
-const ActorInit En_Bee_InitVars = {
+ActorInit En_Bee_InitVars = {
ACTOR_EN_BEE,
ACTORCAT_ENEMY,
FLAGS,
@@ -104,7 +104,7 @@ void EnBee_Init(Actor* thisx, PlayState* play) {
sNumLoadedBees++;
this->actor.shape.shadowScale = 12.0f;
- if (ActorCutscene_GetCurrentIndex() != -1) {
+ if (CutsceneManager_GetCurrentCsId() != CS_ID_NONE) {
func_800BC154(play, &play->actorCtx, &this->actor, ACTORCAT_ITEMACTION);
}
@@ -149,7 +149,7 @@ void EnBee_FlyIdle(EnBee* this, PlayState* play) {
Vec3f nextPos;
s32 pad[2];
- if ((this->actor.category != ACTORCAT_ENEMY) && (ActorCutscene_GetCurrentIndex() == -1)) {
+ if ((this->actor.category != ACTORCAT_ENEMY) && (CutsceneManager_GetCurrentCsId() == CS_ID_NONE)) {
func_800BC154(play, &play->actorCtx, &this->actor, ACTORCAT_ENEMY);
}
@@ -173,7 +173,7 @@ void EnBee_FlyIdle(EnBee* this, PlayState* play) {
}
Math_SmoothStepToS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &nextPos), 1, 0x7D0, 0);
- Math_ApproachF(&this->actor.speedXZ, 3.0f, 0.3f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 3.0f, 0.3f, 1.0f);
if ((this->attackDelayTimer == 0) && (this->actor.params != BEE_BEHAVIOR_IDLE)) {
EnBee_SetupAttack(this);
@@ -227,7 +227,7 @@ void EnBee_Attack(EnBee* this, PlayState* play) {
Math_SmoothStepToS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &nextPos), 1, 0x1388, 0);
Math_ApproachF(&this->actor.world.pos.y, nextPos.y, 0.3f, 3.0f);
- Math_ApproachF(&this->actor.speedXZ, 5.0f, 0.3f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 5.0f, 0.3f, 1.0f);
}
void EnBee_UpdateDamage(EnBee* this, PlayState* play) {
@@ -238,12 +238,12 @@ void EnBee_UpdateDamage(EnBee* this, PlayState* play) {
if (this->collider.base.acFlags & AC_HIT) {
Enemy_StartFinishingBlow(play, &this->actor);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 10, NA_SE_EN_CUTBODY);
this->actor.colChkInfo.health = 0;
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 50, NA_SE_EN_EXTINCT);
func_800B3030(play, &this->actor.world.pos, &gZeroVec3f, &gZeroVec3f, 100, 0, 2);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -262,7 +262,7 @@ void EnBee_Update(Actor* thisx, PlayState* play) {
}
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BEE_FLY - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BEE_FLY - SFX_FLAG);
EnBee_UpdateDamage(this, play);
Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot);
Actor_SetFocus(&this->actor, 0.0f);
@@ -271,7 +271,9 @@ void EnBee_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 40.0f, 40.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 40.0f, 40.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
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 851a0a216..09d9ef931 100644
--- a/src/overlays/actors/ovl_En_Bee/z_en_bee.h
+++ b/src/overlays/actors/ovl_En_Bee/z_en_bee.h
@@ -31,6 +31,4 @@ typedef struct EnBee {
/* 0x23C */ ColliderCylinder collider;
} EnBee; // size = 0x288
-extern const ActorInit En_Bee_InitVars;
-
#endif // Z_EN_BEE_H
diff --git a/src/overlays/actors/ovl_En_Bh/overlay.cfg b/src/overlays/actors/ovl_En_Bh/overlay.cfg
deleted file mode 100644
index 2fea0e1e5..000000000
--- a/src/overlays/actors/ovl_En_Bh/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Bh
-z_en_bh.c
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 b18bedfc9..da6bc06a3 100644
--- a/src/overlays/actors/ovl_En_Bh/z_en_bh.c
+++ b/src/overlays/actors/ovl_En_Bh/z_en_bh.c
@@ -17,7 +17,7 @@ void EnBh_Draw(Actor* thisx, PlayState* play);
void func_80C22DEC(EnBh* this, PlayState* play);
-const ActorInit En_Bh_InitVars = {
+ActorInit En_Bh_InitVars = {
ACTOR_EN_BH,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -52,7 +52,7 @@ void func_80C22DEC(EnBh* this, PlayState* play) {
s16 yRot;
s16 zRot;
- this->actor.speedXZ = 3.0f;
+ this->actor.speed = 3.0f;
xDiff = this->pos.x - this->actor.world.pos.x;
yDiff = this->pos.y - this->actor.world.pos.y;
zDiff = this->pos.z - this->actor.world.pos.z;
diff --git a/src/overlays/actors/ovl_En_Bh/z_en_bh.h b/src/overlays/actors/ovl_En_Bh/z_en_bh.h
index b5e8a7c0c..a3c88fb58 100644
--- a/src/overlays/actors/ovl_En_Bh/z_en_bh.h
+++ b/src/overlays/actors/ovl_En_Bh/z_en_bh.h
@@ -22,6 +22,4 @@ typedef struct EnBh {
/* 0x1E8 */ EnBhActionFunc actionFunc;
} EnBh; // size = 0x1EC
-extern const ActorInit En_Bh_InitVars;
-
#endif // Z_EN_BH_H
diff --git a/src/overlays/actors/ovl_En_Bigokuta/overlay.cfg b/src/overlays/actors/ovl_En_Bigokuta/overlay.cfg
deleted file mode 100644
index 40f093987..000000000
--- a/src/overlays/actors/ovl_En_Bigokuta/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Bigokuta
-z_en_bigokuta.c
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 ba7273f59..f331666d3 100644
--- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c
+++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c
@@ -30,7 +30,7 @@ void EnBigokuta_PlayDeathCutscene(EnBigokuta* this, PlayState* play);
void EnBigokuta_SetupDeathEffects(EnBigokuta* this);
void EnBigokuta_PlayDeathEffects(EnBigokuta* this, PlayState* play);
-const ActorInit En_Bigokuta_InitVars = {
+ActorInit En_Bigokuta_InitVars = {
ACTOR_EN_BIGOKUTA,
ACTORCAT_BOSS,
FLAGS,
@@ -102,11 +102,11 @@ void EnBigokuta_Init(Actor* thisx, PlayState* play) {
Collider_InitAndSetCylinder(play, &this->shellCollider, &this->picto.actor, &sShellCylinderInit);
Collider_InitAndSetCylinder(play, &this->bodyCollider, &this->picto.actor, &sBodyCylinderInit);
CollisionCheck_SetInfo(&this->picto.actor.colChkInfo, NULL, &sColChkInfoInit);
- this->cutscene = ActorCutscene_GetAdditionalCutscene(this->picto.actor.cutscene);
+ this->csId = CutsceneManager_GetAdditionalCsId(this->picto.actor.csId);
- if (gSaveContext.save.weekEventReg[20] & 2 ||
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE) ||
((this->picto.actor.params != 0xFF) && Flags_GetSwitch(play, this->picto.actor.params))) {
- Actor_MarkForDeath(&this->picto.actor);
+ Actor_Kill(&this->picto.actor);
} else {
this->picto.actor.world.pos.y -= 99.0f;
EnBigokuta_SetupIdle(this);
@@ -129,11 +129,11 @@ void EnBigokuta_Destroy(Actor* thisx, PlayState* play) {
void EnBigokuta_SetupCutsceneCamera(EnBigokuta* this, PlayState* play, Vec3f* subCamAt, Vec3f* subCamEye) {
s16 angle;
- ActorCutscene_Start(this->picto.actor.cutscene, &this->picto.actor);
- this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene);
+ CutsceneManager_Start(this->picto.actor.csId, &this->picto.actor);
+ this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId);
Play_SetCameraAtEye(play, this->subCamId, subCamAt, subCamEye);
- angle = BINANG_SUB(Actor_YawToPoint(&this->picto.actor, subCamEye), this->picto.actor.home.rot.y);
+ angle = BINANG_SUB(Actor_WorldYawTowardPoint(&this->picto.actor, subCamEye), this->picto.actor.home.rot.y);
if (angle > 0) {
angle = BINANG_ADD(this->picto.actor.home.rot.y, 0x1800);
} else {
@@ -160,7 +160,7 @@ void EnBigokuta_ResetCamera(EnBigokuta* this, PlayState* play) {
subCam = Play_GetCamera(play, this->subCamId);
Play_SetCameraAtEye(play, CAM_ID_MAIN, &subCam->at, &subCam->eye);
this->subCamId = SUB_CAM_ID_DONE;
- ActorCutscene_Stop(this->picto.actor.cutscene);
+ CutsceneManager_Stop(this->picto.actor.csId);
}
}
@@ -179,7 +179,7 @@ void EnBigokuta_ShootPlayer(EnBigokuta* this, PlayState* play) {
}
s32 EnBigokuta_ValidatePictograph(PlayState* play, Actor* thisx) {
- return Snap_ValidatePictograph(play, thisx, PICTOGRAPH_BIG_OCTO, &thisx->focus.pos, &thisx->shape.rot, 280.0f,
+ return Snap_ValidatePictograph(play, thisx, PICTO_VALID_BIG_OCTO, &thisx->focus.pos, &thisx->shape.rot, 280.0f,
1800.0f, -1);
}
@@ -237,7 +237,7 @@ void EnBigokuta_SetupRise(EnBigokuta* this, PlayState* play) {
EffectSsGSplash_Spawn(play, &splashPos, NULL, NULL, 0, Rand_S16Offset(1000, 200));
angle = BINANG_ADD(angle, 0x2000);
}
- Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_DAIOCTA_LAND);
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_DAIOCTA_LAND);
this->actionFunc = EnBigokuta_RiseOutOfWater;
}
@@ -259,7 +259,7 @@ void EnBigokuta_IdleAboveWater(EnBigokuta* this, PlayState* play) {
Math_ApproachS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 5, 0x1000);
if ((this->picto.actor.xzDistToPlayer > 400.0f) || (this->picto.actor.playerHeightRel > 200.0f)) {
- Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_DAIOCTA_SINK);
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_DAIOCTA_SINK);
EnBigokuta_SetupIdle(this);
} else if ((this->picto.actor.xzDistToPlayer < 200.0f) && play->grabPlayer(play, GET_PLAYER(play))) {
EnBigokuta_SetupSuckInPlayer(this, play);
@@ -267,15 +267,15 @@ void EnBigokuta_IdleAboveWater(EnBigokuta* this, PlayState* play) {
}
void EnBigokuta_UpdateOrSetupCam(EnBigokuta* this, PlayState* play) {
- if (this->picto.actor.cutscene != -1) {
+ if (this->picto.actor.csId != CS_ID_NONE) {
if (this->subCamId != SUB_CAM_ID_DONE) {
EnBigokuta_MoveCamera(this, play);
- } else if (ActorCutscene_GetCanPlayNext(this->picto.actor.cutscene)) {
+ } else if (CutsceneManager_IsNext(this->picto.actor.csId)) {
Camera* mainCam = Play_GetCamera(play, CAM_ID_MAIN);
EnBigokuta_SetupCutsceneCamera(this, play, &mainCam->at, &mainCam->eye);
} else {
- ActorCutscene_SetIntentToPlay(this->picto.actor.cutscene);
+ CutsceneManager_Queue(this->picto.actor.csId);
}
}
}
@@ -289,13 +289,13 @@ void EnBigokuta_SetupSuckInPlayer(EnBigokuta* this, PlayState* play) {
this->timer = 0;
Animation_Change(&this->skelAnime, &gBigOctoIdleAnim, 1.0f, 12.0f, 12.0f, ANIMMODE_ONCE, -3.0f);
- ActorCutscene_SetIntentToPlay(this->picto.actor.cutscene);
+ CutsceneManager_Queue(this->picto.actor.csId);
this->playerHoldPos.x = (Math_SinS(this->picto.actor.shape.rot.y) * 66.0f) + this->picto.actor.world.pos.x;
this->playerHoldPos.y = (this->picto.actor.home.pos.y - 49.5f) + 42.899998f;
this->playerHoldPos.z = (Math_CosS(this->picto.actor.shape.rot.y) * 66.0f) + this->picto.actor.world.pos.z;
- Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_SLIME_DEAD);
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_SLIME_DEAD);
this->actionFunc = EnBigokuta_SuckInPlayer;
}
@@ -347,7 +347,7 @@ void EnBigokuta_HoldPlayer(EnBigokuta* this, PlayState* play) {
if (this->timer == 0) {
EnBigokuta_ShootPlayer(this, play);
- Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_DAIOCTA_REVERSE);
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_DAIOCTA_REVERSE);
}
} else if (this->timer == -24) {
EnBigokuta_SetupIdleAboveWater(this);
@@ -355,7 +355,7 @@ void EnBigokuta_HoldPlayer(EnBigokuta* this, PlayState* play) {
}
void EnBigokuta_SetupDeathCutscene(EnBigokuta* this) {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
this->timer = 0;
this->bodyCollider.base.acFlags &= ~AC_ON;
this->actionFunc = EnBigokuta_PlayDeathCutscene;
@@ -374,14 +374,14 @@ void EnBigokuta_PlayDeathCutscene(EnBigokuta* this, PlayState* play) {
Actor_SpawnIceEffects(play, &this->picto.actor, this->limbPos, ARRAY_COUNT(this->limbPos), 2, 0.5f, 0.35f);
EnBigokuta_SetupDeathEffects(this);
}
- } else if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_Start(this->cutscene, &this->picto.actor);
+ } else if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_Start(this->csId, &this->picto.actor);
- if (!(gSaveContext.eventInf[4] & 2) && !(gSaveContext.eventInf[3] & 0x20)) {
- func_800B724C(play, &this->picto.actor, 7);
+ if (!CHECK_EVENTINF(EVENTINF_41) && !CHECK_EVENTINF(EVENTINF_35)) {
+ func_800B724C(play, &this->picto.actor, PLAYER_CSMODE_WAIT);
} else {
player = GET_PLAYER(play);
- player->stateFlags1 |= 0x20;
+ player->stateFlags1 |= PLAYER_STATE1_20;
}
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
@@ -390,13 +390,13 @@ void EnBigokuta_PlayDeathCutscene(EnBigokuta* this, PlayState* play) {
EnBigokuta_SetupDeathEffects(this);
}
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
}
void EnBigokuta_SetupDeathEffects(EnBigokuta* this) {
Animation_MorphToPlayOnce(&this->skelAnime, &gBigOctoDeathAnim, -5.0f);
- Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_DAIOCTA_DEAD2);
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_DAIOCTA_DEAD2);
this->picto.actor.flags &= ~1;
this->timer = 10;
this->actionFunc = EnBigokuta_PlayDeathEffects;
@@ -422,7 +422,7 @@ void EnBigokuta_PlayDeathEffects(EnBigokuta* this, PlayState* play) {
dustPos.z = this->picto.actor.world.pos.z;
func_800B0DE0(play, &dustPos, &gZeroVec3f, &gZeroVec3f, &D_80AC45B0, &D_80AC45B4, 1200, 20);
- Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_OCTAROCK_DEAD2);
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_OCTAROCK_DEAD2);
}
} else {
this->picto.actor.world.pos.y -= 0.2f;
@@ -450,15 +450,15 @@ void EnBigokuta_PlayDeathEffects(EnBigokuta* this, PlayState* play) {
Flags_SetSwitch(play, this->picto.actor.params);
}
- ActorCutscene_Stop(this->cutscene);
- Actor_MarkForDeath(&this->picto.actor);
+ CutsceneManager_Stop(this->csId);
+ Actor_Kill(&this->picto.actor);
- if (!(gSaveContext.eventInf[4] & 2) && !(gSaveContext.eventInf[3] & 0x20)) {
- func_800B724C(play, &this->picto.actor, 6);
+ if (!CHECK_EVENTINF(EVENTINF_41) && !CHECK_EVENTINF(EVENTINF_35)) {
+ func_800B724C(play, &this->picto.actor, PLAYER_CSMODE_END);
} else {
Player* player = GET_PLAYER(play);
- player->stateFlags1 &= ~0x20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
}
}
@@ -475,7 +475,7 @@ s32 EnBigokuta_IsNearSwampBoat(EnBigokuta* this, PlayState* play) {
this->picto.actor.child = SubS_FindActor(play, NULL, ACTORCAT_BG, ACTOR_BG_INGATE);
if ((this->picto.actor.child != NULL) &&
- (Actor_XZDistanceBetweenActors(&this->picto.actor, this->picto.actor.child) < 250.0f)) {
+ (Actor_WorldDistXZToActor(&this->picto.actor, this->picto.actor.child) < 250.0f)) {
return true;
} else {
return false;
@@ -506,7 +506,8 @@ void EnBigokuta_CheckOneHitKill(EnBigokuta* this, PlayState* play) {
}
this->bodyCollider.base.acFlags &= ~AC_HIT;
- Actor_SetColorFilter(&this->picto.actor, 0x4000, 255, 0, Animation_GetLastFrame(&gBigOctoDeathAnim));
+ Actor_SetColorFilter(&this->picto.actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA,
+ Animation_GetLastFrame(&gBigOctoDeathAnim));
EnBigokuta_ShootPlayer(this, play);
EnBigokuta_SetupDeathCutscene(this);
}
@@ -517,7 +518,7 @@ void EnBigokuta_Update(Actor* thisx, PlayState* play) {
EnBigokuta* this = THIS;
if (!EnBigokuta_IsInWater(this, play)) {
- Actor_MarkForDeath(&this->picto.actor);
+ Actor_Kill(&this->picto.actor);
return;
}
diff --git a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.h b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.h
index fdb9d561d..41ae325e0 100644
--- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.h
+++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.h
@@ -16,7 +16,7 @@ typedef struct EnBigokuta {
/* 0x190 */ u8 drawDmgEffType;
/* 0x192 */ s16 timer;
/* 0x194 */ s16 subCamId;
- /* 0x196 */ s16 cutscene;
+ /* 0x196 */ s16 csId;
/* 0x198 */ Vec3s jointTable[BIGOKUTA_LIMB_MAX];
/* 0x210 */ Vec3s morphTable[BIGOKUTA_LIMB_MAX];
/* 0x288 */ f32 drawDmgEffAlpha;
@@ -31,6 +31,4 @@ typedef struct EnBigokuta {
/* 0x3AC */ ColliderCylinder bodyCollider;
} EnBigokuta; // size = 0x3F8
-extern const ActorInit En_Bigokuta_InitVars;
-
#endif // Z_EN_BIGOKUTA_H
diff --git a/src/overlays/actors/ovl_En_Bigpamet/overlay.cfg b/src/overlays/actors/ovl_En_Bigpamet/overlay.cfg
deleted file mode 100644
index df083a170..000000000
--- a/src/overlays/actors/ovl_En_Bigpamet/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Bigpamet
-z_en_bigpamet.c
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 bf6e46e36..a78731e29 100644
--- a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c
+++ b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c
@@ -46,7 +46,7 @@ void func_80A28A28(EnBigpamet* this);
void func_80A28D80(EnBigpamet* this);
void func_80A28ED4(EnBigpamet* this);
-const ActorInit En_Bigpamet_InitVars = {
+ActorInit En_Bigpamet_InitVars = {
ACTOR_EN_BIGPAMET,
ACTORCAT_BOSS,
FLAGS,
@@ -219,7 +219,7 @@ void func_80A2778C(EnBigpamet* this) {
ptr->unk_20 = Rand_ZeroFloat(0.0025000002f) + 0.002f;
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_B_PAMET_BREAK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_B_PAMET_BREAK);
}
void func_80A27970(EnBigpamet* this, PlayState* play2) {
@@ -295,7 +295,7 @@ void func_80A27B58(EnBigpamet* this) {
ptr->unk_20 = Rand_ZeroFloat(0.0025000002f) + 0.002f;
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_B_PAMET_BREAK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_B_PAMET_BREAK);
}
void func_80A27DD8(EnBigpamet* this, PlayState* play) {
@@ -408,7 +408,7 @@ void func_80A282C8(EnBigpamet* this, PlayState* play) {
void func_80A28378(EnBigpamet* this) {
this->actor.parent->params = GEKKO_INIT_SNAPPER;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = func_80A283A0;
}
@@ -421,7 +421,7 @@ void func_80A283A0(EnBigpamet* this, PlayState* play) {
void func_80A283F0(EnBigpamet* this) {
Animation_PlayLoop(&this->skelAnime2, &object_tl_Anim_00823C);
- this->actor.speedXZ = 1.0f;
+ this->actor.speed = 1.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actor.params = ENBIGPAMET_1;
this->actionFunc = func_80A2844C;
@@ -431,10 +431,11 @@ void func_80A2844C(EnBigpamet* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime2);
if (this->actor.parent->params == GEKKO_RETURN_TO_SNAPPER) {
- Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_YawBetweenActors(&this->actor, this->actor.parent), 0x400);
+ Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_WorldYawTowardActor(&this->actor, this->actor.parent),
+ 0x400);
this->actor.world.rot.y = this->actor.shape.rot.y;
} else if (this->actor.parent->params == GEKKO_JUMP_ON_SNAPPER) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
} else if (this->actor.parent->params == GEKKO_ON_SNAPPER) {
func_80A28E40(this);
}
@@ -445,9 +446,9 @@ void func_80A284E4(EnBigpamet* this) {
this->unk_29E = 0;
this->unk_2A8 = 1.0f;
this->unk_2A4 = 1.0f;
- this->actor.speedXZ = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_B_PAMET_VOICE);
- Actor_PlaySfxAtPos(this->actor.parent, NA_SE_EN_FROG_VOICE1);
+ this->actor.speed = 0.0f;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_B_PAMET_VOICE);
+ Actor_PlaySfx(this->actor.parent, NA_SE_EN_FROG_VOICE1);
this->actionFunc = func_80A2855C;
}
@@ -467,8 +468,8 @@ void func_80A2855C(EnBigpamet* this, PlayState* play) {
void func_80A28618(EnBigpamet* this) {
this->actor.draw = func_80A2966C;
this->unk_2A8 = 0.5f;
- this->actor.speedXZ = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PAMET_CUTTER_ON);
+ this->actor.speed = 0.0f;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_CUTTER_ON);
this->actionFunc = func_80A2866C;
}
@@ -498,11 +499,11 @@ void func_80A28708(EnBigpamet* this, PlayState* play) {
}
void func_80A28760(EnBigpamet* this) {
- this->actor.speedXZ = 15.0f;
- if (this->actor.bgCheckFlags & 8) {
+ this->actor.speed = 15.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
s16 temp_v1 = this->actor.yawTowardsPlayer - this->actor.wallYaw;
- this->actor.bgCheckFlags &= ~8;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_WALL;
if (temp_v1 > 0x3C00) {
this->actor.world.rot.y = this->actor.wallYaw + 0x3C00;
@@ -538,7 +539,7 @@ void func_80A287E8(EnBigpamet* this, PlayState* play) {
func_80A27FE8(this, play);
}
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
quakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_3);
this->actor.velocity.y = this->unk_29E * 0.375f;
@@ -556,11 +557,11 @@ void func_80A287E8(EnBigpamet* this, PlayState* play) {
}
void func_80A28970(EnBigpamet* this) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PAMET_CUTTER_OFF);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_CUTTER_OFF);
this->actor.shape.rot.z = 0;
this->collider.base.atFlags &= ~AT_ON;
this->collider.info.bumper.dmgFlags = 0xF7CFFFFF;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = func_80A289C8;
}
@@ -617,16 +618,16 @@ void func_80A28B98(EnBigpamet* this, PlayState* play) {
this->collider.base.acFlags &= ~AC_ON;
this->actor.velocity.y = 22.0f;
- this->actor.speedXZ = 5.0f;
+ this->actor.speed = 5.0f;
if ((this->actor.draw == func_80A2966C) && (this->actionFunc != func_80A28DC0)) {
this->actor.draw = EnBigpamet_Draw;
} else if (this->collider.base.ac != NULL) {
- this->actor.world.rot.y = BINANG_ROT180(Actor_YawBetweenActors(&this->actor, this->collider.base.ac));
+ this->actor.world.rot.y = BINANG_ROT180(Actor_WorldYawTowardActor(&this->actor, this->collider.base.ac));
}
this->actor.shape.rot.y = this->actor.world.rot.y;
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
this->actor.flags &= ~ACTOR_FLAG_1;
this->actor.params = ENBIGPAMET_0;
@@ -638,17 +639,17 @@ void func_80A28B98(EnBigpamet* this, PlayState* play) {
collectible = Item_DropCollectible(play, &this->actor.world.pos, ITEM00_ARROWS_10);
if (collectible != NULL) {
collectible->velocity.y = 15.0f;
- collectible->world.rot.y = Actor_YawToPoint(&this->actor, &this->actor.home.pos);
+ collectible->world.rot.y = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_B_PAMET_REVERSE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_B_PAMET_REVERSE);
this->actionFunc = func_80A28D0C;
}
void func_80A28D0C(EnBigpamet* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime2);
- if (this->actor.bgCheckFlags & 1) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_HIPLOOP_LAND);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_HIPLOOP_LAND);
func_80A27FE8(this, play);
func_80A28D80(this);
}
@@ -658,7 +659,7 @@ void func_80A28D0C(EnBigpamet* this, PlayState* play) {
void func_80A28D80(EnBigpamet* this) {
this->actor.draw = func_80A2966C;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.shape.rot.x = 0;
this->actor.shape.rot.z = 0;
this->unk_2A8 = 0.0f;
@@ -680,7 +681,7 @@ void func_80A28DC0(EnBigpamet* this, PlayState* play) {
void func_80A28E40(EnBigpamet* this) {
Animation_MorphToPlayOnce(&this->skelAnime2, &object_tl_Anim_000440, -2.0f);
this->actor.flags |= ACTOR_FLAG_1;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = func_80A28E98;
}
@@ -710,7 +711,7 @@ void func_80A28EE8(EnBigpamet* this, PlayState* play) {
func_800B0DE0(play, &pos, &gZeroVec3f, &gZeroVec3f, &D_80A29788, &D_80A2978C, 800, 50);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 50, NA_SE_EN_NPC_FADEAWAY);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
this->actor.scale.y = this->actor.scale.x;
@@ -758,7 +759,9 @@ void EnBigpamet_Update(Actor* thisx, PlayState* play) {
if ((this->actionFunc != func_80A281DC) && (this->actionFunc != func_80A282C8)) {
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 50.0f, 60.0f, 0x1F);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 50.0f, 60.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 |
+ UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10);
func_80A276F4(this);
Actor_SetFocus(&this->actor, 25.0f);
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 07d3265c0..bb9d29280 100644
--- a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.h
+++ b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.h
@@ -40,6 +40,4 @@ typedef struct EnBigpamet {
/* 0x2FC */ EnBigpametStruct unk_2FC[20];
} EnBigpamet; // size = 0x5CC
-extern const ActorInit En_Bigpamet_InitVars;
-
#endif // Z_EN_BIGPAMET_H
diff --git a/src/overlays/actors/ovl_En_Bigpo/overlay.cfg b/src/overlays/actors/ovl_En_Bigpo/overlay.cfg
deleted file mode 100644
index 1519b5573..000000000
--- a/src/overlays/actors/ovl_En_Bigpo/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Bigpo
-z_en_bigpo.c
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 57dae0368..c360681e8 100644
--- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c
+++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c
@@ -82,9 +82,7 @@ void EnBigpo_DrawLantern(Actor* thisx, PlayState* play);
void EnBigpo_DrawCircleFlames(Actor* thisx, PlayState* play);
void EnBigpo_RevealedFire(Actor* thisx, PlayState* play);
-extern const ActorInit En_Bigpo_InitVars;
-
-const ActorInit En_Bigpo_InitVars = {
+ActorInit En_Bigpo_InitVars = {
ACTOR_EN_BIGPO,
ACTORCAT_ENEMY,
FLAGS,
@@ -185,11 +183,12 @@ void EnBigpo_Init(Actor* thisx, PlayState* play2) {
thisx->params &= 0xFF;
if (thisx->params == ENBIGPO_POSSIBLEFIRE) {
if (Flags_GetSwitch(play, this->switchFlags)) {
- Actor_MarkForDeath(&this->actor);
- } else {
- thisx->update = Actor_Noop;
- EnBigpo_InitHiddenFire(this);
+ Actor_Kill(&this->actor);
+ return;
}
+
+ thisx->update = Actor_Noop;
+ EnBigpo_InitHiddenFire(this);
return;
}
@@ -207,7 +206,7 @@ void EnBigpo_Init(Actor* thisx, PlayState* play2) {
}
ActorShape_Init(&thisx->shape, 0.0f, ActorShadow_DrawCircle, 45.0f);
- thisx->bgCheckFlags |= 0x400;
+ thisx->bgCheckFlags |= BGCHECKFLAG_PLAYER_400;
this->savedHeight = thisx->home.pos.y + 100.0f;
this->mainColor.r = 255;
this->mainColor.g = 255;
@@ -215,7 +214,7 @@ void EnBigpo_Init(Actor* thisx, PlayState* play2) {
this->mainColor.a = 0; // fully invisible
if ((this->switchFlags != 0xFF) && (Flags_GetSwitch(play, this->switchFlags))) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
if (thisx->params == ENBIGPO_REGULAR) { // the well poe, starts immediately
@@ -260,7 +259,7 @@ void EnBigpo_UpdateSpin(EnBigpo* this) {
this->actor.shape.rot.y += this->rotVelocity;
if ((oldYaw < 0) && (this->actor.shape.rot.y > 0)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_ROLL); // spinning sfx during spin attack
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_ROLL); // spinning sfx during spin attack
}
}
@@ -294,22 +293,22 @@ void EnBigpo_WellWaitForProximity(EnBigpo* this, PlayState* play) {
}
void EnBigpo_SetupSpawnCutscene(EnBigpo* this) {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
this->actionFunc = EnBigpo_WaitCutsceneQueue;
}
void EnBigpo_WaitCutsceneQueue(EnBigpo* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_Start(this->actor.cutscene, &this->actor);
- func_800B724C(play, &this->actor, 7);
- this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene);
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_Start(this->actor.csId, &this->actor);
+ func_800B724C(play, &this->actor, PLAYER_CSMODE_WAIT);
+ this->subCamId = CutsceneManager_GetCurrentSubCamId(this->actor.csId);
if (this->actor.params == ENBIGPO_REGULAR) { // and SUMMONED, got switched earlier
EnBigpo_SpawnCutsceneStage1(this, play);
} else { // ENBIGPO_REVEALEDFIRE
EnBigpo_SetupFlameCirclePositions(this, play);
}
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
@@ -396,7 +395,7 @@ void EnBigpo_SpawnCutsceneStage5(EnBigpo* this) {
Animation_PlayLoop(&this->skelAnime, &gBigpoAwakenStretchAnim);
this->actor.draw = EnBigpo_DrawMainBigpo;
Actor_SetScale(&this->actor, 0.014f);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_APPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_APPEAR);
this->actionFunc = EnBigpo_SpawnCutsceneStage6;
}
@@ -465,14 +464,14 @@ void EnBigpo_SpawnCutsceneStage8(EnBigpo* this, PlayState* play) {
dampe = SubS_FindActor(play, NULL, ACTORCAT_NPC, ACTOR_EN_TK);
if (dampe != NULL) {
// if dampe exists, switch to viewing his running away cutscene
- dampe->params = this->actor.cutscene;
+ dampe->params = this->actor.csId;
} else {
- ActorCutscene_Stop(this->actor.cutscene);
+ CutsceneManager_Stop(this->actor.csId);
}
} else { // ENBIGPO_REGULAR
- ActorCutscene_Stop(this->actor.cutscene);
+ CutsceneManager_Stop(this->actor.csId);
}
- func_800B724C(play, &this->actor, 6);
+ func_800B724C(play, &this->actor, PLAYER_CSMODE_END);
EnBigpo_SetupIdleFlying(this); // setup idle flying
}
}
@@ -483,8 +482,8 @@ void EnBigpo_SetupWarpOut(EnBigpo* this) {
this->rotVelocity = 0x2000;
this->idleTimer = 32;
this->actor.flags &= ~ACTOR_FLAG_1; // targetable OFF
- this->actor.speedXZ = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_DISAPPEAR);
+ this->actor.speed = 0.0f;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_DISAPPEAR);
this->actionFunc = EnBigpo_WarpingOut;
}
@@ -506,7 +505,7 @@ void EnBigpo_SetupWarpIn(EnBigpo* this, PlayState* play) {
f32 distance = CLAMP_MIN(this->actor.xzDistToPlayer, 200.0f);
s16 randomYaw = ((s32)Rand_Next() >> 0x14) + this->actor.yawTowardsPlayer;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_APPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_APPEAR);
Animation_PlayLoop(&this->skelAnime, &gBigpoAwakenStretchAnim);
this->rotVelocity = 0x2000;
this->actor.world.pos.x = (Math_SinS(randomYaw) * distance) + player->actor.world.pos.x;
@@ -557,10 +556,10 @@ void EnBigpo_IdleFlying(EnBigpo* this, PlayState* play) {
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;
- Math_StepToF(&this->actor.speedXZ, 3.0f, 0.2f);
+ Math_StepToF(&this->actor.speed, 3.0f, 0.2f);
func_800B9010(&this->actor, NA_SE_EN_PO_FLY - SFX_FLAG);
- if (Actor_XZDistanceToPoint(&this->actor, &this->actor.home.pos) > 300.0f) {
- this->unk208 = Actor_YawToPoint(&this->actor, &this->actor.home.pos);
+ if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > 300.0f) {
+ this->unk208 = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
}
if (Math_ScaledStepToS(&this->actor.shape.rot.y, this->unk208, 0x200) && (Rand_ZeroOne() < 0.075f)) {
@@ -581,7 +580,7 @@ void EnBigpo_SetupSpinUp(EnBigpo* this) {
this->collider.base.atFlags |= AT_ON;
this->rotVelocity = 0x800;
this->actionFunc = EnBigpo_SpinningUp;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
void EnBigpo_SpinningUp(EnBigpo* this, PlayState* play) {
@@ -604,7 +603,7 @@ void EnBigpo_SpinAttack(EnBigpo* this, PlayState* play) {
s16 yawDiff;
SkelAnime_Update(&this->skelAnime);
- Math_StepToF(&this->actor.speedXZ, 10.0f, 1.0f);
+ Math_StepToF(&this->actor.speed, 10.0f, 1.0f);
Math_SmoothStepToF(&this->actor.world.pos.y, player->actor.world.pos.y, 0.3f, 7.5f, 1.0f);
EnBigpo_UpdateSpin(this);
yawDiff = this->actor.yawTowardsPlayer - this->actor.world.rot.y;
@@ -629,7 +628,7 @@ void EnBigpo_SpinningDown(EnBigpo* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
Math_SmoothStepToF(&this->actor.world.pos.y, player->actor.world.pos.y + 100.0f, 0.3f, 5.0f, 1.0f);
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.2f);
+ Math_StepToF(&this->actor.speed, 0.0f, 0.2f);
if (Math_ScaledStepToS(&this->rotVelocity, 0, 0x200)) {
// spin down complete, re-allow hittable
this->collider.base.colType = COLTYPE_HIT3;
@@ -646,18 +645,18 @@ void EnBigpo_SpinningDown(EnBigpo* this, PlayState* play) {
*/
void EnBigpo_HitStun(EnBigpo* this) {
Animation_MorphToPlayOnce(&this->skelAnime, &gBigpoShockAnim, -6.0f);
- Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, 0, 0x10);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 16);
this->collider.base.acFlags &= ~AC_ON;
func_800BE504(&this->actor, &this->collider);
this->actionFunc = EnBigpo_CheckHealth;
- this->actor.speedXZ = 5.0f;
+ this->actor.speed = 5.0f;
}
/*
* check if just damaged or dead
*/
void EnBigpo_CheckHealth(EnBigpo* this, PlayState* play) {
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.5f);
+ Math_StepToF(&this->actor.speed, 0.0f, 0.5f);
if (SkelAnime_Update(&this->skelAnime)) {
if (this->actor.colChkInfo.health == 0) {
EnBigpo_SetupDeath(this);
@@ -669,7 +668,7 @@ void EnBigpo_CheckHealth(EnBigpo* this, PlayState* play) {
void EnBigpo_SetupDeath(EnBigpo* this) {
this->idleTimer = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actor.hintId = TATL_HINT_ID_NONE;
this->collider.base.ocFlags1 &= ~OC1_ON;
@@ -726,7 +725,7 @@ void EnBigpo_BurnAwayDeath(EnBigpo* this, PlayState* play) {
func_800B9010(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG); // burning sfx
}
if (this->idleTimer == 18) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WIZ_DISAPPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_DISAPPEAR);
}
}
@@ -745,12 +744,12 @@ void EnBigpo_SetupLanternDrop(EnBigpo* this, PlayState* play) {
this->actor.world.pos.y -= 15.0f;
func_800BC154(play, &play->actorCtx, &this->actor, ACTORCAT_MISC);
this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4); // targetable OFF, enemy music OFF
- this->actor.bgCheckFlags &= ~0x400;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_PLAYER_400;
this->actionFunc = EnBigpo_LanternFalling;
}
void EnBigpo_LanternFalling(EnBigpo* this, PlayState* play) {
- if (this->actor.bgCheckFlags & 1 || this->actor.floorHeight == BGCHECK_Y_MIN) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND || this->actor.floorHeight == BGCHECK_Y_MIN) {
if (this->switchFlags != 0xFF) {
Flags_SetSwitch(play, this->switchFlags);
}
@@ -796,7 +795,7 @@ void EnBigpo_SpawnScoopSoul(EnBigpo* this) {
this->actor.scale.x = 0.0f;
this->actor.scale.y = 0.0f;
this->savedHeight = this->actor.world.pos.y;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_METAL_BOX_BOUND); // misnamed?
+ Actor_PlaySfx(&this->actor, NA_SE_EV_METAL_BOX_BOUND); // misnamed?
this->actionFunc = EnBigpo_ScoopSoulAppearing;
}
@@ -819,13 +818,16 @@ void EnBigpo_SetupScoopSoulIdle(EnBigpo* this) {
void EnBigpo_ScoopSoulIdle(EnBigpo* this, PlayState* play) {
DECR(this->idleTimer);
if (Actor_HasParent(&this->actor, play)) {
- Actor_MarkForDeath(&this->actor);
- } else if (this->idleTimer == 0) {
+ Actor_Kill(&this->actor);
+ return;
+ }
+
+ if (this->idleTimer == 0) {
// took too long, soul is leaving
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_LAUGH);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_LAUGH);
EnBigpo_SetupScoopSoulLeaving(this);
} else {
- Actor_PickUp(&this->actor, play, GI_MAX, 35.0f, 60.0f);
+ 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;
}
}
@@ -838,7 +840,7 @@ void EnBigpo_SetupScoopSoulLeaving(EnBigpo* this) {
void EnBigpo_ScoopSoulFadingAway(EnBigpo* this, PlayState* play) {
EnBigpo_AdjustPoAlpha(this, -13);
if (this->mainColor.a == 0) { // fully invisible
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -981,7 +983,7 @@ void EnBigpo_WaitingForDampe(EnBigpo* this, PlayState* play) {
}
void EnBigpo_Die(EnBigpo* this, PlayState* play) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
void EnBigpo_SetupFireRevealed(EnBigpo* this) {
@@ -1045,7 +1047,7 @@ void EnBigpo_FlameCircleCutscene(EnBigpo* this, PlayState* play) {
EnBigpo* parentPoh = (EnBigpo*)this->actor.parent;
Flags_SetSwitch(play, this->switchFlags);
Math_Vec3f_Copy(&parentPoh->fires[this->unk20C].pos, &this->actor.world.pos);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
if (this->unk20C == 0) {
parentPoh->actor.draw = EnBigpo_DrawCircleFlames;
Actor_SetScale(&parentPoh->actor, 0.01f);
@@ -1121,13 +1123,13 @@ s32 EnBigpo_ApplyDamage(EnBigpo* this, PlayState* play) {
if (Actor_ApplyDamage(&this->actor) == 0) {
this->actor.flags &= ~ACTOR_FLAG_1; // targetable OFF
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_DEAD);
Enemy_StartFinishingBlow(play, &this->actor);
if (this->actor.params == ENBIGPO_SUMMONED) { // dampe type
Audio_RestorePrevBgm();
}
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_DAMAGE);
}
// light arrows
@@ -1162,7 +1164,7 @@ void EnBigpo_Update(Actor* thisx, PlayState* play) {
this->unk20C = 0;
}
if (this->unk20C == 40) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_LAUGH);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_LAUGH);
EnBigpo_SetupWarpOut(this);
}
}
@@ -1172,7 +1174,7 @@ void EnBigpo_Update(Actor* thisx, PlayState* play) {
Actor_MoveWithGravity(&this->actor);
}
if (this->actionFunc == EnBigpo_LanternFalling) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 27.0f, 60.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 27.0f, 60.0f, UPDBGCHECKINFO_FLAG_4);
}
if (this->actor.draw == EnBigpo_DrawScoopSoul) {
diff --git a/src/overlays/actors/ovl_En_Bigslime/overlay.cfg b/src/overlays/actors/ovl_En_Bigslime/overlay.cfg
deleted file mode 100644
index c7441440e..000000000
--- a/src/overlays/actors/ovl_En_Bigslime/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Bigslime
-z_en_bigslime.c
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 f65172093..c9b31571f 100644
--- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c
+++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c
@@ -211,7 +211,7 @@ static EnBigslimeTri sBigslimeTri[BIGSLIME_NUM_FACES] = {
{ 142, 126, 127 }, { 130, 111, 145 },
};
-const ActorInit En_Bigslime_InitVars = {
+ActorInit En_Bigslime_InitVars = {
ACTOR_EN_BIGSLIME,
ACTORCAT_BOSS,
FLAGS,
@@ -311,13 +311,11 @@ static InitChainEntry sInitChain[] = {
};
void EnBigslime_Init(Actor* thisx, PlayState* play2) {
- // gSaveContext.save.weekEventReg[KEY] = VALUE
- // KEY | VALUE
static s32 isFrogReturnedFlags[] = {
- (32 << 8) | 0x40, // Woodfall Temple Frog Returned
- (32 << 8) | 0x80, // Great Bay Temple Frog Returned
- (33 << 8) | 0x01, // Southern Swamp Frog Returned
- (33 << 8) | 0x02, // Laundry Pool Frog Returned
+ WEEKEVENTREG_32_40,
+ WEEKEVENTREG_32_80,
+ WEEKEVENTREG_33_01,
+ WEEKEVENTREG_33_02,
};
PlayState* play = play2;
EnBigslime* this = THIS;
@@ -341,44 +339,44 @@ void EnBigslime_Init(Actor* thisx, PlayState* play2) {
this->actor.params = CLAMP(this->actor.params, 1, 4);
if (Flags_GetClear(play, play->roomCtx.curRoom.num)) {
- Actor_MarkForDeath(&this->actor);
- if (!(gSaveContext.save.weekEventReg[isFrogReturnedFlags[this->actor.params - 1] >> 8] &
- (u8)isFrogReturnedFlags[this->actor.params - 1])) {
+ Actor_Kill(&this->actor);
+ if (!CHECK_WEEKEVENTREG(isFrogReturnedFlags[this->actor.params - 1])) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_MINIFROG, this->actor.world.pos.x, this->actor.world.pos.y,
this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, this->actor.params);
}
- } else {
- this->cutscene = this->actor.cutscene;
- this->actor.scale.x = this->actor.scale.z = 0.15f;
- this->actor.scale.y = 0.075f;
- this->vtxScaleX = this->vtxScaleZ = 0.015000001f;
- this->actor.home.pos.x = GBT_ROOM_5_CENTER_X;
- this->actor.home.pos.y = GBT_ROOM_5_MAX_Y - 75.0f;
- this->actor.home.pos.z = GBT_ROOM_5_CENTER_Z;
- for (i = 0; i < MINISLIME_NUM_SPAWN; i++) {
- this->minislime[i] = (EnMinislime*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play,
- ACTOR_EN_MINISLIME, 0.0f, 0.0f, 0.0f, 0, 0, 0, i);
- if (this->minislime[i] == NULL) {
- for (i = i - 1; i >= 0; i--) {
- Actor_MarkForDeath(&this->minislime[i]->actor);
- }
-
- Actor_MarkForDeath(&this->actor);
- return;
- }
- }
-
- this->minislimeFrozenTexAnim = Lib_SegmentedToVirtual(&gMinislimeFrozenTexAnim);
- this->bigslimeFrozenTexAnim = Lib_SegmentedToVirtual(&gBigslimeFrozenTexAnim);
- this->iceShardTexAnim = Lib_SegmentedToVirtual(&gBigslimeIceShardTexAnim);
- this->actor.world.pos.y = GBT_ROOM_5_MIN_Y;
- this->actor.flags &= ~ACTOR_FLAG_1;
- this->actor.shape.shadowAlpha = 255;
- this->gekkoScale = 0.007f;
- this->actor.shape.rot.y = 0;
- this->minislimeToThrow = this->minislime[0];
- EnBigslime_SetupInitEntrance(this);
+ return;
}
+
+ this->csId = this->actor.csId;
+ this->actor.scale.x = this->actor.scale.z = 0.15f;
+ this->actor.scale.y = 0.075f;
+ this->vtxScaleX = this->vtxScaleZ = 0.015000001f;
+ this->actor.home.pos.x = GBT_ROOM_5_CENTER_X;
+ this->actor.home.pos.y = GBT_ROOM_5_MAX_Y - 75.0f;
+ this->actor.home.pos.z = GBT_ROOM_5_CENTER_Z;
+ for (i = 0; i < MINISLIME_NUM_SPAWN; i++) {
+ this->minislime[i] = (EnMinislime*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_MINISLIME,
+ 0.0f, 0.0f, 0.0f, 0, 0, 0, i);
+ if (this->minislime[i] == NULL) {
+ for (i = i - 1; i >= 0; i--) {
+ Actor_Kill(&this->minislime[i]->actor);
+ }
+
+ Actor_Kill(&this->actor);
+ return;
+ }
+ }
+
+ this->minislimeFrozenTexAnim = Lib_SegmentedToVirtual(gMinislimeFrozenTexAnim);
+ this->bigslimeFrozenTexAnim = Lib_SegmentedToVirtual(gBigslimeFrozenTexAnim);
+ this->iceShardTexAnim = Lib_SegmentedToVirtual(gBigslimeIceShardTexAnim);
+ this->actor.world.pos.y = GBT_ROOM_5_MIN_Y;
+ this->actor.flags &= ~ACTOR_FLAG_1;
+ this->actor.shape.shadowAlpha = 255;
+ this->gekkoScale = 0.007f;
+ this->actor.shape.rot.y = 0;
+ this->minislimeToThrow = this->minislime[0];
+ EnBigslime_SetupInitEntrance(this);
}
void EnBigslime_Destroy(Actor* thisx, PlayState* play) {
@@ -538,47 +536,47 @@ void EnBigslime_CheckRoomBoundaries(EnBigslime* this, Vec3f* vtxMax, Vec3f* vtxM
f32 vtxMaxZ;
f32 vtxMinZ;
- this->actor.bgCheckFlags &= ~(0x2 | 0x8 | 0x10);
+ this->actor.bgCheckFlags &= ~(BGCHECKFLAG_GROUND_TOUCH | BGCHECKFLAG_WALL | BGCHECKFLAG_CEILING);
if ((this->actor.world.pos.y + vtxMax->y) > GBT_ROOM_5_MAX_Y) {
this->actor.world.pos.y = GBT_ROOM_5_MAX_Y - vtxMax->y;
- this->actor.bgCheckFlags |= 0x10;
+ this->actor.bgCheckFlags |= BGCHECKFLAG_CEILING;
}
if ((this->actor.world.pos.y + vtxMin->y) <= GBT_ROOM_5_MIN_Y) {
this->actor.world.pos.y = GBT_ROOM_5_MIN_Y - vtxMin->y;
- if (!(this->actor.bgCheckFlags & 1)) {
- this->actor.bgCheckFlags |= 2;
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ this->actor.bgCheckFlags |= BGCHECKFLAG_GROUND_TOUCH;
}
- this->actor.bgCheckFlags |= 1;
+ this->actor.bgCheckFlags |= BGCHECKFLAG_GROUND;
} else {
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
}
- if ((this->actionFunc != EnBigslime_Freeze) || !(this->actor.bgCheckFlags & 1)) {
+ if ((this->actionFunc != EnBigslime_Freeze) || !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
worldPosX = this->actor.world.pos.x;
vtxMaxX = vtxMax->x;
if (GBT_ROOM_5_MAX_X < (worldPosX + vtxMaxX)) {
- this->actor.bgCheckFlags |= 8;
+ this->actor.bgCheckFlags |= BGCHECKFLAG_WALL;
this->actor.world.pos.x = GBT_ROOM_5_MAX_X - vtxMaxX;
} else {
vtxMinX = vtxMin->x;
if ((worldPosX + vtxMinX) < GBT_ROOM_5_MIN_X) {
this->actor.world.pos.x = GBT_ROOM_5_MIN_X - vtxMinX;
- this->actor.bgCheckFlags |= 8;
+ this->actor.bgCheckFlags |= BGCHECKFLAG_WALL;
}
}
worldPosZ = this->actor.world.pos.z;
vtxMaxZ = vtxMax->z;
if (GBT_ROOM_5_MAX_Z < (worldPosZ + vtxMaxZ)) {
- this->actor.bgCheckFlags |= 8;
+ this->actor.bgCheckFlags |= BGCHECKFLAG_WALL;
this->actor.world.pos.z = GBT_ROOM_5_MAX_Z - vtxMaxZ;
} else {
vtxMinZ = vtxMin->z;
if ((worldPosZ + vtxMinZ) < GBT_ROOM_5_MIN_Z) {
this->actor.world.pos.z = GBT_ROOM_5_MIN_Z - vtxMinZ;
- this->actor.bgCheckFlags |= 8;
+ this->actor.bgCheckFlags |= BGCHECKFLAG_WALL;
}
}
}
@@ -728,7 +726,7 @@ void EnBigslime_SetMinislimeBreakLocation(EnBigslime* this) {
void EnBigslime_SetPlayerParams(EnBigslime* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (player->stateFlags2 & 0x80) {
+ if (player->stateFlags2 & PLAYER_STATE2_80) {
player->actor.parent = NULL;
player->unk_AE8 = 100;
func_800B8D98(play, &this->actor, 10.0f, this->actor.world.rot.y, 10.0f);
@@ -771,10 +769,10 @@ void EnBigslime_BreakIntoMinislime(EnBigslime* this, PlayState* play) {
this->actor.hintId = TATL_HINT_ID_GEKKO_GIANT_SLIME;
this->gekkoRot.x = 0;
this->gekkoRot.y = 0;
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
this->formBigslimeTimer = 2;
EnBigslime_AddIceShardEffect(this, play);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_B_SLIME_BREAK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_B_SLIME_BREAK);
EnBigslime_SetupJumpGekko(this);
}
@@ -849,9 +847,9 @@ void EnBigslime_EndCutscene(EnBigslime* this, PlayState* play) {
subCam = Play_GetCamera(play, this->subCamId);
Play_SetCameraAtEye(play, CAM_ID_MAIN, &subCam->at, &subCam->eye);
this->subCamId = SUB_CAM_ID_DONE;
- ActorCutscene_Stop(this->cutscene);
- this->cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene);
- func_800B724C(play, &this->actor, 6);
+ CutsceneManager_Stop(this->csId);
+ this->csId = CutsceneManager_GetAdditionalCsId(this->actor.csId);
+ func_800B724C(play, &this->actor, PLAYER_CSMODE_END);
}
}
@@ -940,7 +938,7 @@ void EnBigslime_SetupCutsceneStartBattle(EnBigslime* this, PlayState* play) {
this->bigslimeCollider[0].base.acFlags &= ~AC_ON;
Math_Vec3f_Copy(&subCam->at, &this->actor.focus.pos);
- func_800B7298(play, &this->actor, 4);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_4);
player->actor.shape.rot.y = this->actor.yawTowardsPlayer + 0x8000;
player->actor.world.pos.x = Math_SinS(this->actor.yawTowardsPlayer) * 347.0f + this->actor.world.pos.x;
@@ -988,7 +986,7 @@ void EnBigslime_SetupCallMinislime(EnBigslime* this, PlayState* play) {
Animation_MorphToPlayOnce(&this->skelAnime, &gGekkoCallAnim, 5.0f);
EnBigslime_GekkoSfxOutsideBigslime(this, NA_SE_EN_FROG_GREET);
this->callTimer = 0;
- func_800B7298(play, &this->actor, 7);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT);
this->actionFunc = EnBigslime_CallMinislime;
}
@@ -1012,7 +1010,7 @@ void EnBigslime_CallMinislime(EnBigslime* this, PlayState* play) {
EnBigslime_InitFallMinislime(this);
play->envCtx.lightSettingOverride = 0xFF;
this->callTimer = 35;
- func_800B7298(play, &this->actor, 4);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_4);
}
}
@@ -1022,11 +1020,11 @@ void EnBigslime_SetupMoveOnCeiling(EnBigslime* this) {
this->actor.velocity.y = 20.0f;
if (this->subCamId != SUB_CAM_ID_DONE) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->ceilingMoveTimer = 20;
} else {
this->ceilingMoveTimer = 320;
- this->actor.speedXZ = 5.0f;
+ this->actor.speed = 5.0f;
}
this->wavySurfaceTimer = 0;
@@ -1053,7 +1051,7 @@ void EnBigslime_MoveOnCeiling(EnBigslime* this, PlayState* play) {
} else if ((this->actor.xzDistToPlayer < 250.0f) || (this->ceilingMoveTimer == 0)) {
EnBigslime_SetupDrop(this);
} else {
- this->actor.speedXZ = (fabsf(Math_SinS(pitch)) * 3.0f) + 5.0f;
+ this->actor.speed = (fabsf(Math_SinS(pitch)) * 3.0f) + 5.0f;
Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 10, 0x800, 0x80);
this->gekkoRot.y = this->actor.world.rot.y;
}
@@ -1062,7 +1060,7 @@ void EnBigslime_MoveOnCeiling(EnBigslime* this, PlayState* play) {
void EnBigslime_SetupDrop(EnBigslime* this) {
this->actor.velocity.y = 0.0f;
this->ceilingDropTimer = 30;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = EnBigslime_Drop;
}
@@ -1085,7 +1083,7 @@ void EnBigslime_Drop(EnBigslime* this, PlayState* play) {
EnBigslime_GekkoSfxOutsideBigslime(this, NA_SE_EN_FROG_DOWN);
this->rotation = 0;
}
- } else if (this->actor.bgCheckFlags & 1) {
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
EnBigslime_SetupSquishFlat(this);
} else {
Math_StepToF(&this->actor.scale.x, 0.15f, 0.0025f);
@@ -1215,7 +1213,7 @@ void EnBigslime_SetTargetVtxToWideCone(EnBigslime* this) {
}
void EnBigslime_SetupSquishFlat(EnBigslime* this) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_B_SLIME_JUMP2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_B_SLIME_JUMP2);
this->squishFlatTimer = 20;
this->actor.scale.x = 0.2f;
this->actor.scale.z = 0.2f;
@@ -1414,7 +1412,7 @@ void EnBigslime_SetupRise(EnBigslime* this) {
Animation_PlayLoop(&this->skelAnime, &gGekkoSwimForwardAnim);
EnBigslime_GekkoSfxOutsideBigslime(this, NA_SE_EN_FROG_JUMP_ABOVE);
EnBigslime_GekkoSfxOutsideBigslime(this, NA_SE_EN_UTSUBO_APPEAR_TRG);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_B_SLIME_JUMP1);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_B_SLIME_JUMP1);
this->riseCounter = 0;
this->bigslimeCollider[0].base.atFlags &= ~AT_ON;
this->actor.gravity = 0.0f;
@@ -1502,7 +1500,7 @@ void EnBigslime_SetupCutsceneGrabPlayer(EnBigslime* this, PlayState* play) {
this->grabPlayerTimer = 15;
this->wavySurfaceTimer = 0;
this->bigslimeCollider[0].base.atFlags &= ~AT_ON;
- this->actor.world.rot.y = Actor_YawToPoint(&this->actor, &this->actor.home.pos);
+ this->actor.world.rot.y = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
yaw = Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) - this->actor.world.rot.y;
if (yaw > 0x4000) {
@@ -1517,7 +1515,7 @@ void EnBigslime_SetupCutsceneGrabPlayer(EnBigslime* this, PlayState* play) {
this->subCamYawGrabPlayer += this->actor.world.rot.y;
Animation_PlayLoop(&this->skelAnime, &gGekkoBoxingStanceAnim);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_B_SLIME_EAT);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_B_SLIME_EAT);
this->actionFunc = EnBigslime_CutsceneGrabPlayer;
}
@@ -1616,7 +1614,7 @@ void EnBigslime_AttackPlayerInBigslime(EnBigslime* this, PlayState* play) {
if (this->numGekkoMeleeAttacks == 0) {
this->numGekkoPosGrabPlayer--;
- if ((gSaveContext.save.playerData.health < 5) || (this->numGekkoPosGrabPlayer == 0)) {
+ if ((gSaveContext.save.saveInfo.playerData.health < 5) || (this->numGekkoPosGrabPlayer == 0)) {
this->numGekkoPosGrabPlayer = 0;
this->gekkoRot.y = this->actor.world.rot.y;
this->gekkoPosOffset.x = Math_SinS(this->gekkoRot.y) * -50.0f;
@@ -1626,7 +1624,7 @@ void EnBigslime_AttackPlayerInBigslime(EnBigslime* this, PlayState* play) {
}
play->damagePlayer(play, -4);
- func_800B8E58(player, player->ageProperties->unk_92 + NA_SE_VO_LI_DAMAGE_S);
+ Player_PlaySfx(player, player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_DAMAGE_S);
this->gekkoRot.y += (s16)(Rand_S16Offset(0x4000, 0x4000) * (Rand_ZeroOne() < 0.5f ? -1 : 1));
this->gekkoPosOffset.x = Math_SinS(this->gekkoRot.y) * -50.0f;
this->gekkoPosOffset.z = Math_CosS(this->gekkoRot.y) * -50.0f;
@@ -1703,13 +1701,13 @@ void EnBigslime_WindupThrowPlayer(EnBigslime* this, PlayState* play) {
this->gekkoPosOffset.z = Math_CosS(this->gekkoRot.y) * -50.0f;
} else {
if (this->windupPunchTimer == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_B_SLIME_REVERSE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_B_SLIME_REVERSE);
EnBigslime_GekkoSfxInsideBigslime(this, NA_SE_EN_FROG_PUNCH1);
}
scale = 0.5f - cos_rad(-this->windupPunchTimer * (M_PI / 5)) * 0.5f;
if (this->windupPunchTimer == -5) {
- if (player->stateFlags2 & 0x80) {
+ if (player->stateFlags2 & PLAYER_STATE2_80) {
player->actor.parent = NULL;
player->unk_AE8 = 100;
}
@@ -1820,9 +1818,9 @@ void EnBigslime_SetupFreeze(EnBigslime* this) {
s32 i;
s32 j;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->freezeTimer = 40;
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->actor.velocity.y = 0.0f;
this->actor.gravity = 0.0f;
} else if ((this->actionFunc == EnBigslime_Rise) && (this->riseCounter < 2)) {
@@ -1900,7 +1898,7 @@ void EnBigslime_Freeze(EnBigslime* this, PlayState* play) {
}
func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
- if (this->actor.bgCheckFlags & 2) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
if (this->freezeTimer == 0) {
EnBigslime_BreakIntoMinislime(this, play);
} else {
@@ -1909,7 +1907,7 @@ void EnBigslime_Freeze(EnBigslime* this, PlayState* play) {
EnBigslime_SetupSquishFlat(this);
}
} else if (this->freezeTimer == 0) {
- if (!(this->actor.bgCheckFlags & 1)) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
EnBigslime_SetupFrozenFall(this);
} else {
EnBigslime_SetupFrozenGround(this);
@@ -2021,14 +2019,14 @@ void EnBigslime_FrozenFall(EnBigslime* this, PlayState* play) {
func_800B8D50(play, &this->actor, 7.0f, this->actor.yawTowardsPlayer, 5.0f, 0x10);
}
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
EnBigslime_BreakIntoMinislime(this, play);
}
}
void EnBigslime_SetupJumpGekko(EnBigslime* this) {
Animation_PlayLoop(&this->skelAnime, &gGekkoJumpForwardAnim);
- this->actor.speedXZ = 8.0f;
+ this->actor.speed = 8.0f;
this->jumpTimer = 100;
this->actor.world.rot.y = this->gekkoRot.y;
this->gekkoYaw = this->actor.yawTowardsPlayer + 0x8000;
@@ -2039,7 +2037,7 @@ void EnBigslime_JumpGekko(EnBigslime* this, PlayState* play) {
s16 yaw;
s16 yawDiff;
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->gekkoCollider.base.acFlags |= AC_ON;
this->actor.flags |= ACTOR_FLAG_1;
}
@@ -2051,15 +2049,16 @@ void EnBigslime_JumpGekko(EnBigslime* this, PlayState* play) {
EnBigslime_GekkoSfxOutsideBigslime(this, NA_SE_EV_WALK_WATER);
}
- if (!(this->actor.bgCheckFlags & 1) || ((this->skelAnime.curFrame > 1.0f) && (this->skelAnime.curFrame < 12.0f))) {
- this->actor.speedXZ = 8.0f;
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) ||
+ ((this->skelAnime.curFrame > 1.0f) && (this->skelAnime.curFrame < 12.0f))) {
+ this->actor.speed = 8.0f;
} else {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
if (Math_SmoothStepToS(&this->actor.world.rot.y, this->gekkoYaw, 5, 0x1000, 0x80) == 0) {
- if (Actor_XZDistanceToPoint(&this->actor, &this->actor.home.pos) > 240.0f) {
- yaw = Actor_YawToPoint(&this->actor, &this->actor.home.pos);
+ if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > 240.0f) {
+ yaw = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
yawDiff = yaw - (s16)(this->actor.yawTowardsPlayer + 0x8000);
this->gekkoYaw =
ABS_ALT(yawDiff) < 0x3000 ? yaw : (yawDiff / 2) + (s16)(this->actor.yawTowardsPlayer + 0x8000);
@@ -2089,8 +2088,8 @@ void EnBigslime_JumpGekko(EnBigslime* this, PlayState* play) {
void EnBigslime_SetupIdleLookAround(EnBigslime* this) {
Animation_PlayOnce(&this->skelAnime, &gGekkoNervousIdleAnim);
this->idleTimer = 60;
- this->actor.speedXZ = 0.0f;
- if (BINANG_SUB(Actor_YawToPoint(&this->actor, &this->actor.home.pos), this->gekkoRot.y) > 0) {
+ this->actor.speed = 0.0f;
+ if (BINANG_SUB(Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos), this->gekkoRot.y) > 0) {
this->gekkoYaw = this->gekkoRot.y + (Rand_Next() >> 20) + 0x2000;
} else {
this->gekkoYaw = this->gekkoRot.y - (Rand_Next() >> 20) - 0x2000;
@@ -2112,7 +2111,7 @@ void EnBigslime_IdleLookAround(EnBigslime* this, PlayState* play) {
if ((this->skelAnime.animation == &gGekkoNervousIdleAnim) &&
Math_ScaledStepToS(&this->gekkoRot.y, this->gekkoYaw, 0x400)) {
- if (BINANG_SUB(Actor_YawToPoint(&this->actor, &this->actor.home.pos), this->gekkoRot.y) > 0) {
+ if (BINANG_SUB(Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos), this->gekkoRot.y) > 0) {
this->gekkoYaw = this->gekkoRot.y + (Rand_Next() >> 20) + 0x2000;
} else {
this->gekkoYaw = this->gekkoRot.y - (Rand_Next() >> 20) - 0x2000;
@@ -2146,7 +2145,7 @@ void EnBigslime_IdleNoticePlayer(EnBigslime* this, PlayState* play) {
void EnBigslime_SetupThrowMinislime(EnBigslime* this) {
Animation_PlayOnce(&this->skelAnime, &gGekkoWindupPunchAnim);
EnBigslime_GekkoSfxOutsideBigslime(this, NA_SE_EN_FROG_HOLD_SLIME);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = EnBigslime_ThrowMinislime;
}
@@ -2170,7 +2169,7 @@ void EnBigslime_SetupDamageGekko(EnBigslime* this, s32 isNotFrozen) {
Animation_MorphToPlayOnce(&this->skelAnime, &gGekkoDamagedAnim, -3.0f);
this->gekkoCollider.base.acFlags &= ~AC_ON;
this->damageSpinTimer = 20;
- this->actor.speedXZ = 10.0f;
+ this->actor.speed = 10.0f;
this->actor.gravity = -2.0f;
this->actor.velocity.y = 0.0f;
if (isNotFrozen) {
@@ -2194,7 +2193,7 @@ void EnBigslime_DamageGekko(EnBigslime* this, PlayState* play) {
this->damageSpinTimer--;
damageSpinTimer = CLAMP_MAX(this->damageSpinTimer, 10);
this->gekkoRot.y += 0x300 * damageSpinTimer;
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.5f);
+ Math_StepToF(&this->actor.speed, 0.0f, 0.5f);
if (this->damageSpinTimer == 0) {
EnBigslime_SetupCutscene(this);
}
@@ -2207,7 +2206,7 @@ void EnBigslime_SetupStunGekko(EnBigslime* this) {
}
this->actionFunc = EnBigslime_StunGekko;
this->skelAnime.playSpeed = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
void EnBigslime_StunGekko(EnBigslime* this, PlayState* play) {
@@ -2226,10 +2225,10 @@ void EnBigslime_StunGekko(EnBigslime* this, PlayState* play) {
void EnBigslime_SetupCutsceneFormBigslime(EnBigslime* this) {
Animation_PlayOnce(&this->skelAnime, &gGekkoJumpUpAnim);
this->gekkoCollider.base.acFlags &= ~AC_ON;
- this->actor.world.rot.x = -Actor_PitchToPoint(&this->actor, &this->actor.home.pos);
- this->actor.world.rot.y = Actor_YawToPoint(&this->actor, &this->actor.home.pos);
+ this->actor.world.rot.x = -Actor_WorldPitchTowardPoint(&this->actor, &this->actor.home.pos);
+ this->actor.world.rot.y = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
this->actionFunc = EnBigslime_CutsceneFormBigslime;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
void EnBigslime_CutsceneFormBigslime(EnBigslime* this, PlayState* play) {
@@ -2247,7 +2246,7 @@ void EnBigslime_SetupFormBigslime(EnBigslime* this) {
this->gekkoRot.x = 0x4000 - this->actor.world.rot.x;
this->formBigslimeTimer = 0;
this->wavySurfaceTimer = 0;
- this->actor.speedXZ = 25.0f;
+ this->actor.speed = 25.0f;
this->gekkoRot.y = this->actor.world.rot.y;
this->formBigslimeCutsceneTimer = 2;
@@ -2283,10 +2282,10 @@ void EnBigslime_FormBigslime(EnBigslime* this, PlayState* play) {
Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.home.pos);
this->actor.gravity = 0.0f;
this->actor.velocity.y = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
Animation_PlayLoop(&this->skelAnime, &gGekkoSwimForwardAnim);
this->formBigslimeCutsceneTimer--;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_B_SLIME_COMBINE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_B_SLIME_COMBINE);
} else if (this->isAnimUpdate) {
this->formBigslimeCutsceneTimer--;
if (this->formBigslimeCutsceneTimer == 0) {
@@ -2326,7 +2325,7 @@ void EnBigslime_SetupCutsceneDefeat(EnBigslime* this, PlayState* play) {
Animation_GetLastFrame(&gGekkoDamagedAnim.common), ANIMMODE_ONCE_INTERP, 0.0f);
this->gekkoCollider.base.acFlags &= ~AC_ON;
this->defeatTimer = 60;
- this->actor.speedXZ = 10.0f;
+ this->actor.speed = 10.0f;
this->actor.gravity = -2.0f;
this->actor.velocity.y = 0.0f;
EnBigslime_GekkoSfxOutsideBigslime(this, NA_SE_EN_FROG_DEAD);
@@ -2336,7 +2335,7 @@ void EnBigslime_SetupCutsceneDefeat(EnBigslime* this, PlayState* play) {
subCamAt.y = this->actor.world.pos.y + 40.0f;
subCamAt.z = this->actor.world.pos.z;
- if (BINANG_SUB(Actor_YawToPoint(&this->actor, &this->actor.home.pos), this->actor.world.rot.y) > 0) {
+ if (BINANG_SUB(Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos), this->actor.world.rot.y) > 0) {
yawOffset = this->actor.world.rot.y + 0x4000;
} else {
yawOffset = this->actor.world.rot.y - 0x4000;
@@ -2365,7 +2364,7 @@ void EnBigslime_CutsceneDefeat(EnBigslime* this, PlayState* play) {
this->defeatTimer--;
defeatTimer = CLAMP_MAX(this->defeatTimer, 10);
this->gekkoRot.y += 0x300 * defeatTimer;
- if (Math_StepToF(&this->actor.speedXZ, 0.0f, 0.5f)) {
+ if (Math_StepToF(&this->actor.speed, 0.0f, 0.5f)) {
EnBigslime_SetupGekkoDespawn(this, play);
} else {
// Continue for the camera to follow Gekko as it spins in defeat
@@ -2509,7 +2508,7 @@ void EnBigslime_Despawn(EnBigslime* this, PlayState* play) {
this->minislime[i]->actor.params = MINISLIME_DESPAWN;
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -2524,31 +2523,31 @@ void EnBigslime_InitEntrance(EnBigslime* this, PlayState* play) {
}
void EnBigslime_SetupCutscene(EnBigslime* this) {
- if (ActorCutscene_GetCurrentIndex() == 0x7D) {
- ActorCutscene_Stop(0x7D);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_DOOR) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_DOOR);
}
if (this->actor.colChkInfo.health == 0) {
- this->cutscene = this->actor.cutscene;
+ this->csId = this->actor.csId;
}
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
this->actionFuncStored = this->actionFunc;
this->actionFunc = EnBigslime_PlayCutscene;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
void EnBigslime_PlayCutscene(EnBigslime* this, PlayState* play) {
- if (ActorCutscene_GetCurrentIndex() == 0x7D) {
- ActorCutscene_Stop(0x7D);
- ActorCutscene_SetIntentToPlay(this->cutscene);
- } else if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_Start(this->cutscene, &this->actor);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_DOOR) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_DOOR);
+ CutsceneManager_Queue(this->csId);
+ } else if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_Start(this->csId, &this->actor);
if (this->actionFuncStored != EnBigslime_SquishFlat) {
- func_800B724C(play, &this->actor, 7);
+ func_800B724C(play, &this->actor, PLAYER_CSMODE_WAIT);
}
- this->subCamId = ActorCutscene_GetCurrentSubCamId(this->cutscene);
+ this->subCamId = CutsceneManager_GetCurrentSubCamId(this->csId);
if (this->actor.colChkInfo.health == 0) {
EnBigslime_SetupCutsceneDefeat(this, play);
} else if ((this->actionFuncStored == EnBigslime_DamageGekko) ||
@@ -2561,7 +2560,7 @@ void EnBigslime_PlayCutscene(EnBigslime* this, PlayState* play) {
EnBigslime_SetupCutsceneStartBattle(this, play);
}
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
}
@@ -2646,7 +2645,7 @@ void EnBigslime_ApplyDamageEffectGekko(EnBigslime* this, PlayState* play) {
EnBigslime_SetupCutscene(this);
} else if (this->actor.colChkInfo.damageEffect == BIGSLIME_DMGEFF_ELECTRIC_STUN) {
this->stunTimer = 40;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
this->gekkoDrawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL;
this->gekkoDrawDmgEffScale = 0.75f;
this->gekkoDrawDmgEffAlpha = 2.0f;
@@ -2654,7 +2653,7 @@ void EnBigslime_ApplyDamageEffectGekko(EnBigslime* this, PlayState* play) {
} else if (this->actor.colChkInfo.damageEffect == BIGSLIME_DMGEFF_STUN ||
this->actor.colChkInfo.damageEffect == BIGSLIME_DMGEFF_DEKU_STUN) {
this->stunTimer = 40;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
EnBigslime_SetupStunGekko(this);
} else if (this->actor.colChkInfo.damageEffect == BIGSLIME_DMGEFF_ICE) {
EnBigslime_GekkoFreeze(this);
@@ -2724,7 +2723,7 @@ void EnBigslime_AddIceShardEffect(EnBigslime* this, PlayState* play) {
}
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ICE_BROKEN);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_ICE_BROKEN);
EnBigslime_InitShockwave(this, play);
}
@@ -2839,7 +2838,9 @@ void EnBigslime_UpdateGekko(Actor* thisx, PlayState* play) {
Actor_MoveWithoutGravity(&this->actor);
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 40.0f, 80.0f, 0x1F);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 40.0f, 80.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 |
+ UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10);
this->gekkoCollider.dim.pos.x = (s16)this->actor.world.pos.x;
this->gekkoCollider.dim.pos.z = (s16)this->actor.world.pos.z;
if (this->gekkoCollider.base.acFlags & AC_ON) {
@@ -2986,16 +2987,16 @@ void EnBigslime_DrawBigslime(Actor* thisx, PlayState* play) {
// Draw Bigslime
gSPSegment(POLY_XLU_DISP++, 0x09, sBigslimeDynamicVtx[this->dynamicVtxState]);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, &gBigslimeNormalDL);
- gSPDisplayList(POLY_XLU_DISP++, &gBigslimeVtxDL);
+ gSPDisplayList(POLY_XLU_DISP++, gBigslimeNormalMaterialDL);
+ gSPDisplayList(POLY_XLU_DISP++, gBigslimeModelDL);
// Draw frozen Bigslime
if ((this->actionFunc == EnBigslime_Freeze) || (this->actionFunc == EnBigslime_FrozenGround) ||
(this->actionFunc == EnBigslime_FrozenFall) || (this->actionFunc == EnBigslime_Melt)) {
AnimatedMat_Draw(play, this->bigslimeFrozenTexAnim);
gSPSegment(POLY_XLU_DISP++, 0x09, sBigslimeTargetVtx);
- gSPDisplayList(POLY_XLU_DISP++, &gBigslimeFrozenVtxDL);
- gSPDisplayList(POLY_XLU_DISP++, &gBigslimeVtxDL);
+ gSPDisplayList(POLY_XLU_DISP++, gBigslimeFrozenMaterialDL);
+ gSPDisplayList(POLY_XLU_DISP++, gBigslimeModelDL);
}
// Draw bubbles inside Bigslime
@@ -3014,7 +3015,7 @@ void EnBigslime_DrawBigslime(Actor* thisx, PlayState* play) {
billboardMtxF->zw =
dynamicVtx->n.ob[2] * this->actor.scale.z * bubblesInfoPtr->scaleVtx + this->actor.world.pos.z;
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, &gBigslimeBubbleDL);
+ gSPDisplayList(POLY_XLU_DISP++, gBigslimeBubbleDL);
}
}
CLOSE_DISPS(play->state.gfxCtx);
@@ -3133,12 +3134,12 @@ void EnBigslime_DrawShatteringEffects(EnBigslime* this, PlayState* play) {
Matrix_Translate(this->frozenPos.x, this->frozenPos.y, this->frozenPos.z, MTXMODE_NEW);
Matrix_Scale(this->shockwaveScale, this->shockwaveScale, this->shockwaveScale, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, &gBigslimeShockwaveDL);
+ gSPDisplayList(POLY_XLU_DISP++, gBigslimeShockwaveDL);
}
// Draw Ice Shards
AnimatedMat_Draw(play, this->iceShardTexAnim);
- gSPDisplayList(POLY_XLU_DISP++, &gBigslimeIceShardDL);
+ gSPDisplayList(POLY_XLU_DISP++, gBigslimeIceShardDL);
for (i = 0; i < BIGSLIME_NUM_ICE_SHARD; i++) {
iceShardEffect = &this->iceShardEffect[i];
@@ -3147,7 +3148,7 @@ void EnBigslime_DrawShatteringEffects(EnBigslime* this, PlayState* play) {
&iceShardEffect->rot);
Matrix_Scale(iceShardEffect->scale, iceShardEffect->scale, iceShardEffect->scale, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, &gBigslimeIceShardVtxDL);
+ gSPDisplayList(POLY_XLU_DISP++, gBigslimeIceShardVtxDL);
}
}
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 c66dd7850..f10938b37 100644
--- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h
+++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h
@@ -66,7 +66,7 @@ typedef struct EnBigslime {
/* 0x02B4 */ u8 shockwaveAlpha;
/* 0x02B5 */ u8 gekkoDrawDmgEffType;
/* 0x02B6 */ s16 gekkoYaw;
- /* 0x02B8 */ s16 cutscene;
+ /* 0x02B8 */ s16 csId;
/* 0x02BA */ union { // multi-use timer
s16 idleTimer;
s16 noticeTimer;
@@ -125,6 +125,4 @@ typedef struct EnBigslime {
/* 0x0A54 */ EnBigslimeIceShardEffect iceShardEffect[BIGSLIME_NUM_ICE_SHARD]; // 312 = 162 (bigslime) + 10 * 15 (minislime)
} EnBigslime; // size = 0x3634
-extern const ActorInit En_Bigslime_InitVars;
-
#endif // Z_EN_BIGSLIME_H
diff --git a/src/overlays/actors/ovl_En_Bji_01/overlay.cfg b/src/overlays/actors/ovl_En_Bji_01/overlay.cfg
deleted file mode 100644
index 6455065bd..000000000
--- a/src/overlays/actors/ovl_En_Bji_01/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Bji_01
-z_en_bji_01.c
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 e49b743b8..43e87a90a 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
@@ -29,7 +29,7 @@ void func_809CD77C(EnBji01* this, PlayState* play);
s32 EnBji01_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx);
void EnBji01_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx);
-const ActorInit En_Bji_01_InitVars = {
+ActorInit En_Bji_01_InitVars = {
ACTOR_EN_BJI_01,
ACTORCAT_NPC,
FLAGS,
@@ -75,7 +75,7 @@ void func_809CCDE0(EnBji01* this, PlayState* play) {
s32 pad[2];
Math_Vec3f_Copy(&pitchTarget, &player->actor.world.pos);
- pitchTarget.y = player->bodyPartsPos[7].y + 3.0f;
+ pitchTarget.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
SubS_TrackPointStep(&this->actor.world.pos, &this->actor.focus.pos, this->actor.shape.rot.y,
&player->actor.world.pos, &pitchTarget, &this->headZRotStep, &this->headXRotStep,
&this->torsoZRotStep, &this->torsoXRotStep, 0x1554, 0x1FFE, 0xE38, 0x1C70);
@@ -109,46 +109,46 @@ void func_809CCEE8(EnBji01* this, PlayState* play) {
} else {
this->moonsTear = (ObjMoonStone*)SubS_FindActor(play, NULL, ACTORCAT_PROP, ACTOR_OBJ_MOON_STONE);
}
- func_800B8500(&this->actor, play, 60.0f, 10.0f, PLAYER_AP_NONE);
+ func_800B8500(&this->actor, play, 60.0f, 10.0f, PLAYER_IA_NONE);
}
}
void func_809CD028(EnBji01* this, PlayState* play) {
- f32 timeBeforeMoonCrash;
+ f32 timeUntilMoonCrash;
switch (this->actor.params) {
case SHIKASHI_TYPE_DEFAULT:
case SHIKASHI_TYPE_FINISHED_CONVERSATION:
switch (gSaveContext.save.playerForm) {
case PLAYER_FORM_DEKU:
- if (gSaveContext.save.weekEventReg[17] & 0x10) {
- if (gSaveContext.save.weekEventReg[74] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_17_10)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_74_80)) {
this->textId = 0x5F4;
} else {
this->textId = 0x5E2;
}
} else {
this->textId = 0x5EC;
- gSaveContext.save.weekEventReg[17] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_17_10);
}
break;
case PLAYER_FORM_HUMAN:
if (Player_GetMask(play) == PLAYER_MASK_KAFEIS_MASK) {
this->textId = 0x236A;
- } else if (gSaveContext.save.weekEventReg[74] & 0x10) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_74_10)) {
this->textId = 0x5F6;
} else {
this->textId = 0x5F5;
- gSaveContext.save.weekEventReg[74] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_74_10);
}
break;
case PLAYER_FORM_GORON:
case PLAYER_FORM_ZORA:
- if (gSaveContext.save.weekEventReg[75] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_08)) {
this->textId = 0x5E4;
} else {
this->textId = 0x5DC;
- gSaveContext.save.weekEventReg[75] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_75_08);
}
break;
}
@@ -156,13 +156,13 @@ void func_809CD028(EnBji01* this, PlayState* play) {
case SHIKASHI_TYPE_LOOKED_THROUGH_TELESCOPE:
switch (gSaveContext.save.playerForm) {
case PLAYER_FORM_DEKU:
- if (gSaveContext.save.weekEventReg[74] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_74_80)) {
this->textId = 0x5F2;
} else {
this->textId = 0x5F1;
}
func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel,
- PLAYER_AP_NONE);
+ PLAYER_IA_NONE);
break;
case PLAYER_FORM_HUMAN:
this->textId = 0x5F7;
@@ -177,11 +177,8 @@ void func_809CD028(EnBji01* this, PlayState* play) {
this->textId = 0x5EA;
break;
case 3:
- // Calculates the time left before the moon crashes.
- // The day begins at CLOCK_TIME(6, 0) so it must be offset.
- timeBeforeMoonCrash = (4 - CURRENT_DAY) * DAY_LENGTH -
- (u16)(((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0));
- if (timeBeforeMoonCrash < CLOCK_TIME_F(1, 0)) {
+ timeUntilMoonCrash = TIME_UNTIL_MOON_CRASH;
+ if (timeUntilMoonCrash < CLOCK_TIME_F(1, 0)) {
this->textId = 0x5E8;
} else {
this->textId = 0x5EB;
@@ -211,21 +208,21 @@ void EnBji01_DialogueHandler(EnBji01* this, PlayState* play) {
switch (play->msgCtx.choiceIndex) {
case 0:
func_8019F208();
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_809CD634(this, play);
break;
case 1:
func_8019F230();
switch (gSaveContext.save.playerForm) {
case PLAYER_FORM_DEKU:
- func_80151938(play, 0x5F0);
+ Message_ContinueTextbox(play, 0x5F0);
break;
case PLAYER_FORM_HUMAN:
- func_80151938(play, 0x5F8);
+ Message_ContinueTextbox(play, 0x5F8);
break;
case PLAYER_FORM_GORON:
case PLAYER_FORM_ZORA:
- func_80151938(play, 0x5E1);
+ Message_ContinueTextbox(play, 0x5E1);
break;
}
break;
@@ -238,16 +235,16 @@ void EnBji01_DialogueHandler(EnBji01* this, PlayState* play) {
switch (play->msgCtx.currentTextId) {
case 0x5DE:
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationInfo, 3, &this->animIndex);
- func_80151938(play, 0x5DF);
+ Message_ContinueTextbox(play, 0x5DF);
break;
case 0x5E4:
- func_80151938(play, 0x5E7);
+ Message_ContinueTextbox(play, 0x5E7);
break;
case 0x5E5:
- func_80151938(play, 0x5E0);
+ Message_ContinueTextbox(play, 0x5E0);
break;
case 0x5E7:
- func_80151938(play, 0x5E5);
+ Message_ContinueTextbox(play, 0x5E5);
break;
case 0x5DC:
case 0x5DD:
@@ -257,11 +254,11 @@ void EnBji01_DialogueHandler(EnBji01* this, PlayState* play) {
case 0x5EE:
case 0x5F2:
case 0x5F5:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x5F0:
case 0x5F6:
- func_80151938(play, 0x5EF);
+ Message_ContinueTextbox(play, 0x5EF);
break;
case 0x5E1:
case 0x5E8:
@@ -273,7 +270,7 @@ void EnBji01_DialogueHandler(EnBji01* this, PlayState* play) {
case 0x5F4:
case 0x5F7:
case 0x5F8:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actor.flags &= ~ACTOR_FLAG_10000;
this->actor.params = SHIKASHI_TYPE_FINISHED_CONVERSATION;
func_809CCE98(this, play);
@@ -295,7 +292,7 @@ void EnBji01_DialogueHandler(EnBji01* this, PlayState* play) {
void func_809CD634(EnBji01* this, PlayState* play) {
AudioSfx_MuteBanks((1 << BANK_PLAYER) | (1 << BANK_ITEM) | (1 << BANK_ENV) | (1 << BANK_ENEMY) |
(1 << BANK_OCARINA) | (1 << BANK_VOICE));
- Audio_QueueSeqCmd(0xE0000101);
+ SEQCMD_DISABLE_PLAY_SEQUENCES(true);
play->nextEntrance = ENTRANCE(TERMINA_FIELD, 10); /* Telescope entrance */
gSaveContext.respawn[RESPAWN_MODE_DOWN].entrance = play->nextEntrance;
func_80169EFC(&play->state); /* Load new entrance? */
@@ -340,7 +337,7 @@ void EnBji01_Init(Actor* thisx, PlayState* play) {
this->animIndex = -1;
Actor_SetScale(&this->actor, 0.01f);
- SubS_FillCutscenesList(&this->actor, this->cutscenes, ARRAY_COUNT(this->cutscenes));
+ SubS_FillCutscenesList(&this->actor, this->csIdList, ARRAY_COUNT(this->csIdList));
this->moonsTear = (ObjMoonStone*)SubS_FindActor(play, NULL, ACTORCAT_PROP, ACTOR_OBJ_MOON_STONE);
switch (gSaveContext.save.entrance) {
@@ -349,15 +346,17 @@ void EnBji01_Init(Actor* thisx, PlayState* play) {
this->actor.params = SHIKASHI_TYPE_DEFAULT;
func_809CCE98(this, play);
break;
+
case ENTRANCE(ASTRAL_OBSERVATORY, 2): /* Telescope entrance */
this->actor.flags |= ACTOR_FLAG_10000;
AudioSfx_MuteBanks(0);
- Audio_QueueSeqCmd(0xE0000100);
+ SEQCMD_DISABLE_PLAY_SEQUENCES(false);
this->actor.params = SHIKASHI_TYPE_LOOKED_THROUGH_TELESCOPE;
func_809CCE98(this, play);
break;
+
default:
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
break;
}
}
@@ -374,7 +373,7 @@ void EnBji01_Update(Actor* thisx, PlayState* play) {
s32 pad;
this->actionFunc(this, play);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
SkelAnime_Update(&this->skelAnime);
if (this->blinkTimer-- <= 0) {
diff --git a/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.h b/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.h
index 8ab601e1b..84c346a1c 100644
--- a/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.h
+++ b/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.h
@@ -31,10 +31,8 @@ typedef struct EnBji01 {
/* 0x2A6 */ s16 headZRotStep;
/* 0x2A8 */ s16 headXRotStep;
/* 0x2AA */ u16 textId;
- /* 0x2AC */ s16 cutscenes[1];
+ /* 0x2AC */ s16 csIdList[1];
/* 0x2B0 */ ObjMoonStone* moonsTear;
} EnBji01; // size = 0x2B4
-extern const ActorInit En_Bji_01_InitVars;
-
#endif // Z_EN_BJI_01_H
diff --git a/src/overlays/actors/ovl_En_Bjt/overlay.cfg b/src/overlays/actors/ovl_En_Bjt/overlay.cfg
deleted file mode 100644
index ab6f05a54..000000000
--- a/src/overlays/actors/ovl_En_Bjt/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Bjt
-z_en_bjt.c
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 788759e3c..5ebfca40f 100644
--- a/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c
+++ b/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c
@@ -46,7 +46,7 @@ static u8 sMsgEventScript[] = {
0x10, 0x2C, 0x29, 0x49, 0x0C, 0x2F, 0x00, 0x00, 0x0C, 0x2D, 0x00, 0x0D, 0x12, 0x10, 0x2D, 0x00, 0x0D, 0x12, 0x10,
};
-const ActorInit En_Bjt_InitVars = {
+ActorInit En_Bjt_InitVars = {
ACTOR_EN_BJT,
ACTORCAT_NPC,
FLAGS,
@@ -143,27 +143,27 @@ void EnBjt_UpdateCollision(EnBjt* this, PlayState* play) {
s32 EnBjt_TakeItem(s32 exchangeItem) {
switch (exchangeItem) {
- case PLAYER_AP_LETTER_TO_KAFEI:
+ case PLAYER_IA_LETTER_TO_KAFEI:
Inventory_DeleteItem(ITEM_LETTER_TO_KAFEI, SLOT(ITEM_LETTER_TO_KAFEI));
break;
- case PLAYER_AP_DEED_SWAMP:
+ case PLAYER_IA_DEED_SWAMP:
Inventory_DeleteItem(ITEM_DEED_SWAMP, SLOT(ITEM_DEED_SWAMP));
break;
- case PLAYER_AP_DEED_MOUNTAIN:
+ case PLAYER_IA_DEED_MOUNTAIN:
Inventory_DeleteItem(ITEM_DEED_MOUNTAIN, SLOT(ITEM_DEED_MOUNTAIN));
break;
- case PLAYER_AP_DEED_OCEAN:
+ case PLAYER_IA_DEED_OCEAN:
Inventory_DeleteItem(ITEM_DEED_OCEAN, SLOT(ITEM_DEED_OCEAN));
break;
- case PLAYER_AP_DEED_LAND:
+ case PLAYER_IA_DEED_LAND:
Inventory_DeleteItem(ITEM_DEED_LAND, SLOT(ITEM_DEED_LAND));
break;
- case PLAYER_AP_LETTER_MAMA:
+ case PLAYER_IA_LETTER_MAMA:
Inventory_DeleteItem(ITEM_LETTER_MAMA, SLOT(ITEM_LETTER_MAMA));
break;
@@ -182,7 +182,7 @@ s32 EnBjt_Appear(EnBjt* this) {
s32 finished = false;
if (!this->playedSfx) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_TOILET_HAND_APPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_TOILET_HAND_APPEAR);
this->playedSfx = true;
}
@@ -207,7 +207,7 @@ s32 EnBjt_Vanish(EnBjt* this) {
s32 finished = false;
if (!this->playedSfx) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_TOILET_HAND_VANISH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_TOILET_HAND_VANISH);
this->playedSfx = true;
}
@@ -236,7 +236,7 @@ typedef enum {
s32 EnBjt_ChooseBehaviour(Actor* thisx, PlayState* play) {
Player* player = GET_PLAYER(play);
EnBjt* this = THIS;
- s32 itemAP;
+ PlayerItemAction itemAction;
s32 scriptBranch = 0;
switch (this->behaviour) {
@@ -249,19 +249,20 @@ s32 EnBjt_ChooseBehaviour(Actor* thisx, PlayState* play) {
}
// Fallthrough
case TEXT_STATE_16:
- itemAP = func_80123810(play);
- if ((itemAP == PLAYER_AP_DEED_LAND) || (itemAP == PLAYER_AP_LETTER_TO_KAFEI) ||
- (itemAP == PLAYER_AP_DEED_SWAMP) || (itemAP == PLAYER_AP_DEED_MOUNTAIN) ||
- (itemAP == PLAYER_AP_DEED_OCEAN) || (itemAP == PLAYER_AP_LETTER_MAMA)) {
+ itemAction = func_80123810(play);
+
+ if ((itemAction == PLAYER_IA_DEED_LAND) || (itemAction == PLAYER_IA_LETTER_TO_KAFEI) ||
+ (itemAction == PLAYER_IA_DEED_SWAMP) || (itemAction == PLAYER_IA_DEED_MOUNTAIN) ||
+ (itemAction == PLAYER_IA_DEED_OCEAN) || (itemAction == PLAYER_IA_LETTER_MAMA)) {
EnBjt_ChangeAnim(this, TOILET_HAND_ANIM_WAITING_MORPH);
this->playedSfx = false;
this->behaviour++;
scriptBranch = 1; // Right item
- } else if (itemAP < 0) {
+ } else if (itemAction <= PLAYER_IA_MINUS1) {
this->playedSfx = false;
this->behaviour++;
scriptBranch = 3; // Not showing item
- } else if (itemAP != 0) {
+ } else if (itemAction != PLAYER_IA_NONE) {
this->playedSfx = false;
this->behaviour++;
scriptBranch = 2; // Wrong item
@@ -274,9 +275,9 @@ s32 EnBjt_ChooseBehaviour(Actor* thisx, PlayState* play) {
break;
case TOILET_HAND_BEHAVIOUR_TAKE_ITEM:
- if (player->exchangeItemId != PLAYER_AP_NONE) {
+ if (player->exchangeItemId != PLAYER_IA_NONE) {
EnBjt_TakeItem(player->exchangeItemId);
- player->exchangeItemId = PLAYER_AP_NONE;
+ player->exchangeItemId = PLAYER_IA_NONE;
}
if (EnBjt_Vanish(this)) {
this->timer = 60;
@@ -291,7 +292,7 @@ s32 EnBjt_ChooseBehaviour(Actor* thisx, PlayState* play) {
this->playedSfx = false;
this->behaviour++;
} else if (this->timer == 10) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_TOILET_WATER);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_TOILET_WATER);
}
break;
@@ -361,9 +362,8 @@ s32 EnBjt_ChooseAnimation(EnBjt* this, PlayState* play) {
void EnBjt_Talk(EnBjt* this, PlayState* play) {
s16 yaw = this->actor.yawTowardsPlayer;
- // TODO: Casting to remove warning for now
- if (func_8010BF58(&this->actor, play, (s32)sMsgEventScript, this->msgEventCallback, &this->msgEventArg4)) {
- this->actor.flags &= ~ACTOR_FLAG_100;
+ if (func_8010BF58(&this->actor, play, sMsgEventScript, this->msgEventCallback, &this->msgEventArg4)) {
+ this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED;
SubS_UpdateFlags(&this->stateFlags, 3, 7);
this->stateFlags &= ~TOILET_HAND_STATE_TALKING;
this->msgEventArg4 = 0;
@@ -390,7 +390,7 @@ void EnBjt_FollowSchedule(EnBjt* this, PlayState* play) {
} else if (this->stateFlags & TOILET_HAND_STATE_VISIBLE) {
// Vanish if player goes too far away or heart piece given
if ((fabsf(this->actor.playerHeightRel) > 70.0f) || (this->actor.xzDistToPlayer > 140.0f) ||
- (gSaveContext.save.weekEventReg[90] & 0x80)) {
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_90_80)) {
SubS_UpdateFlags(&this->stateFlags, 0, 7);
this->playedSfx = false;
this->stateFlags &= ~TOILET_HAND_STATE_VISIBLE;
@@ -399,14 +399,14 @@ void EnBjt_FollowSchedule(EnBjt* this, PlayState* play) {
} else {
// Appear if player approaches and heart piece not given
if ((fabsf(this->actor.playerHeightRel) < 20.0f) && (this->actor.xzDistToPlayer < 70.0f) &&
- !(gSaveContext.save.weekEventReg[90] & 0x80)) {
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_90_80)) {
this->stateFlags |= TOILET_HAND_STATE_APPEARING;
this->playedSfx = false;
}
}
this->scheduleResult = scheduleOutput.result;
} else {
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
Actor_SetScale(&this->actor, 0.0f);
this->stateFlags = 0;
this->msgEventCallback = NULL;
@@ -426,7 +426,7 @@ void EnBjt_Init(Actor* thisx, PlayState* play) {
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit);
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
Actor_SetScale(&this->actor, 0.0f);
this->scheduleResult = TOILET_HAND_SCH_NONE;
@@ -446,7 +446,7 @@ void EnBjt_Update(Actor* thisx, PlayState* play) {
if (this->scheduleResult != TOILET_HAND_SCH_NONE) {
EnBjt_UpdateSkelAnime(this);
- func_8013C964(&this->actor, play, 60.0f, 10.0f, PLAYER_AP_NONE, this->stateFlags & 7);
+ func_8013C964(&this->actor, play, 60.0f, 10.0f, PLAYER_IA_NONE, this->stateFlags & 7);
Actor_SetFocus(&this->actor, 26.0f);
EnBjt_UpdateCollision(this, play);
}
diff --git a/src/overlays/actors/ovl_En_Bjt/z_en_bjt.h b/src/overlays/actors/ovl_En_Bjt/z_en_bjt.h
index f26be4d22..9ce5adf0e 100644
--- a/src/overlays/actors/ovl_En_Bjt/z_en_bjt.h
+++ b/src/overlays/actors/ovl_En_Bjt/z_en_bjt.h
@@ -32,6 +32,4 @@ typedef struct EnBjt {
} EnBjt; // size = 0x25C
-extern const ActorInit En_Bjt_InitVars;
-
#endif // Z_EN_BJT_H
diff --git a/src/overlays/actors/ovl_En_Boj_01/overlay.cfg b/src/overlays/actors/ovl_En_Boj_01/overlay.cfg
deleted file mode 100644
index 01b4cce6e..000000000
--- a/src/overlays/actors/ovl_En_Boj_01/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Boj_01
-z_en_boj_01.c
diff --git a/src/overlays/actors/ovl_En_Boj_01/z_en_boj_01.c b/src/overlays/actors/ovl_En_Boj_01/z_en_boj_01.c
index 29510c9d7..bd4b0e499 100644
--- a/src/overlays/actors/ovl_En_Boj_01/z_en_boj_01.c
+++ b/src/overlays/actors/ovl_En_Boj_01/z_en_boj_01.c
@@ -15,7 +15,7 @@ void EnBoj01_Destroy(Actor* thisx, PlayState* play);
void EnBoj01_Update(Actor* thisx, PlayState* play);
void EnBoj01_Draw(Actor* thisx, PlayState* play);
-const ActorInit En_Boj_01_InitVars = {
+ActorInit En_Boj_01_InitVars = {
ACTOR_EN_BOJ_01,
ACTORCAT_NPC,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Boj_01/z_en_boj_01.h b/src/overlays/actors/ovl_En_Boj_01/z_en_boj_01.h
index cfee748df..78f4968c2 100644
--- a/src/overlays/actors/ovl_En_Boj_01/z_en_boj_01.h
+++ b/src/overlays/actors/ovl_En_Boj_01/z_en_boj_01.h
@@ -10,6 +10,4 @@ typedef struct EnBoj01 {
/* 0x144 */ char unk_144[0x1D0];
} EnBoj01; // size = 0x314
-extern const ActorInit En_Boj_01_InitVars;
-
#endif // Z_EN_BOJ_01_H
diff --git a/src/overlays/actors/ovl_En_Boj_02/overlay.cfg b/src/overlays/actors/ovl_En_Boj_02/overlay.cfg
deleted file mode 100644
index 7deb95ef2..000000000
--- a/src/overlays/actors/ovl_En_Boj_02/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Boj_02
-z_en_boj_02.c
diff --git a/src/overlays/actors/ovl_En_Boj_02/z_en_boj_02.c b/src/overlays/actors/ovl_En_Boj_02/z_en_boj_02.c
index d68f44bd5..89f6ba0cb 100644
--- a/src/overlays/actors/ovl_En_Boj_02/z_en_boj_02.c
+++ b/src/overlays/actors/ovl_En_Boj_02/z_en_boj_02.c
@@ -15,7 +15,7 @@ void EnBoj02_Destroy(Actor* thisx, PlayState* play);
void EnBoj02_Update(Actor* thisx, PlayState* play);
void EnBoj02_Draw(Actor* thisx, PlayState* play);
-const ActorInit En_Boj_02_InitVars = {
+ActorInit En_Boj_02_InitVars = {
ACTOR_EN_BOJ_02,
ACTORCAT_NPC,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Boj_02/z_en_boj_02.h b/src/overlays/actors/ovl_En_Boj_02/z_en_boj_02.h
index 1ef9785ef..c27d05d38 100644
--- a/src/overlays/actors/ovl_En_Boj_02/z_en_boj_02.h
+++ b/src/overlays/actors/ovl_En_Boj_02/z_en_boj_02.h
@@ -10,6 +10,4 @@ typedef struct EnBoj02 {
/* 0x144 */ char unk_144[0x4D8];
} EnBoj02; // size = 0x61C
-extern const ActorInit En_Boj_02_InitVars;
-
#endif // Z_EN_BOJ_02_H
diff --git a/src/overlays/actors/ovl_En_Boj_03/overlay.cfg b/src/overlays/actors/ovl_En_Boj_03/overlay.cfg
deleted file mode 100644
index 90f393836..000000000
--- a/src/overlays/actors/ovl_En_Boj_03/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Boj_03
-z_en_boj_03.c
diff --git a/src/overlays/actors/ovl_En_Boj_03/z_en_boj_03.c b/src/overlays/actors/ovl_En_Boj_03/z_en_boj_03.c
index 46477ec33..0c55b79a6 100644
--- a/src/overlays/actors/ovl_En_Boj_03/z_en_boj_03.c
+++ b/src/overlays/actors/ovl_En_Boj_03/z_en_boj_03.c
@@ -15,7 +15,7 @@ void EnBoj03_Destroy(Actor* thisx, PlayState* play);
void EnBoj03_Update(Actor* thisx, PlayState* play);
void EnBoj03_Draw(Actor* thisx, PlayState* play);
-const ActorInit En_Boj_03_InitVars = {
+ActorInit En_Boj_03_InitVars = {
ACTOR_EN_BOJ_03,
ACTORCAT_NPC,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Boj_03/z_en_boj_03.h b/src/overlays/actors/ovl_En_Boj_03/z_en_boj_03.h
index eac4fc691..12776093d 100644
--- a/src/overlays/actors/ovl_En_Boj_03/z_en_boj_03.h
+++ b/src/overlays/actors/ovl_En_Boj_03/z_en_boj_03.h
@@ -10,6 +10,4 @@ typedef struct EnBoj03 {
/* 0x144 */ char unk_144[0x4D8];
} EnBoj03; // size = 0x61C
-extern const ActorInit En_Boj_03_InitVars;
-
#endif // Z_EN_BOJ_03_H
diff --git a/src/overlays/actors/ovl_En_Boj_04/overlay.cfg b/src/overlays/actors/ovl_En_Boj_04/overlay.cfg
deleted file mode 100644
index fd93a1079..000000000
--- a/src/overlays/actors/ovl_En_Boj_04/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Boj_04
-z_en_boj_04.c
diff --git a/src/overlays/actors/ovl_En_Boj_04/z_en_boj_04.c b/src/overlays/actors/ovl_En_Boj_04/z_en_boj_04.c
index 2e080483d..7fe308520 100644
--- a/src/overlays/actors/ovl_En_Boj_04/z_en_boj_04.c
+++ b/src/overlays/actors/ovl_En_Boj_04/z_en_boj_04.c
@@ -15,7 +15,7 @@ void EnBoj04_Destroy(Actor* thisx, PlayState* play);
void EnBoj04_Update(Actor* thisx, PlayState* play);
void EnBoj04_Draw(Actor* thisx, PlayState* play);
-const ActorInit En_Boj_04_InitVars = {
+ActorInit En_Boj_04_InitVars = {
ACTOR_EN_BOJ_04,
ACTORCAT_NPC,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Boj_04/z_en_boj_04.h b/src/overlays/actors/ovl_En_Boj_04/z_en_boj_04.h
index 9681073e8..4b05014fb 100644
--- a/src/overlays/actors/ovl_En_Boj_04/z_en_boj_04.h
+++ b/src/overlays/actors/ovl_En_Boj_04/z_en_boj_04.h
@@ -10,6 +10,4 @@ typedef struct EnBoj04 {
/* 0x144 */ char unk_144[0x4D8];
} EnBoj04; // size = 0x61C
-extern const ActorInit En_Boj_04_InitVars;
-
#endif // Z_EN_BOJ_04_H
diff --git a/src/overlays/actors/ovl_En_Boj_05/overlay.cfg b/src/overlays/actors/ovl_En_Boj_05/overlay.cfg
deleted file mode 100644
index 038e0e91c..000000000
--- a/src/overlays/actors/ovl_En_Boj_05/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Boj_05
-z_en_boj_05.c
diff --git a/src/overlays/actors/ovl_En_Boj_05/z_en_boj_05.c b/src/overlays/actors/ovl_En_Boj_05/z_en_boj_05.c
index 3b1508b7b..da6816840 100644
--- a/src/overlays/actors/ovl_En_Boj_05/z_en_boj_05.c
+++ b/src/overlays/actors/ovl_En_Boj_05/z_en_boj_05.c
@@ -15,7 +15,7 @@ void EnBoj05_Destroy(Actor* thisx, PlayState* play);
void EnBoj05_Update(Actor* thisx, PlayState* play);
void EnBoj05_Draw(Actor* thisx, PlayState* play);
-const ActorInit En_Boj_05_InitVars = {
+ActorInit En_Boj_05_InitVars = {
ACTOR_EN_BOJ_05,
ACTORCAT_NPC,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Boj_05/z_en_boj_05.h b/src/overlays/actors/ovl_En_Boj_05/z_en_boj_05.h
index bed1ad78e..b2e5e7c7e 100644
--- a/src/overlays/actors/ovl_En_Boj_05/z_en_boj_05.h
+++ b/src/overlays/actors/ovl_En_Boj_05/z_en_boj_05.h
@@ -10,6 +10,4 @@ typedef struct EnBoj05 {
/* 0x144 */ char unk_144[0x4D8];
} EnBoj05; // size = 0x61C
-extern const ActorInit En_Boj_05_InitVars;
-
#endif // Z_EN_BOJ_05_H
diff --git a/src/overlays/actors/ovl_En_Bom/overlay.cfg b/src/overlays/actors/ovl_En_Bom/overlay.cfg
deleted file mode 100644
index c75252039..000000000
--- a/src/overlays/actors/ovl_En_Bom/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Bom
-z_en_bom.c
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 d4fe409cd..4ebdbe916 100644
--- a/src/overlays/actors/ovl_En_Bom/z_en_bom.c
+++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.c
@@ -17,11 +17,12 @@ void EnBom_Destroy(Actor* thisx, PlayState* play);
void EnBom_Update(Actor* thisx, PlayState* play);
void EnBom_Draw(Actor* thisx, PlayState* play);
-void func_80871058(EnBom* this, PlayState* play);
-void func_808714D4(EnBom* this, PlayState* play);
+void EnBom_Move(EnBom* this, PlayState* play);
+void EnBom_WaitForRelease(EnBom* this, PlayState* play);
+
void func_80872648(PlayState* play, Vec3f* arg1);
void func_808726DC(PlayState* play, Vec3f* arg1, Vec3f* arg2, Vec3f* arg3, s32 arg4);
-void func_80872BC0(PlayState* play, s32 arg1);
+void EnBom_DrawKeg(PlayState* play, s32 arg1);
typedef struct {
/* 0x00 */ Vec3f pos;
@@ -30,9 +31,9 @@ typedef struct {
/* 0x1A */ s16 rotX;
} PowderKegFuseSegment; // size = 0x1C
-static PowderKegFuseSegment sPowderKegFuseSegments[16];
+PowderKegFuseSegment sPowderKegFuseSegments[16];
-const ActorInit En_Bom_InitVars = {
+ActorInit En_Bom_InitVars = {
ACTOR_EN_BOM,
ACTORCAT_EXPLOSIVES,
FLAGS,
@@ -173,11 +174,11 @@ void EnBom_Init(Actor* thisx, PlayState* play) {
this->actor.flags |= ACTOR_FLAG_100000;
if (Actor_HasParent(&this->actor, play)) {
- this->actionFunc = func_808714D4;
+ this->actionFunc = EnBom_WaitForRelease;
this->actor.room = -1;
Actor_SetScale(&this->actor, enBomScales[this->isPowderKeg]);
} else {
- this->actionFunc = func_80871058;
+ this->actionFunc = EnBom_Move;
gSaveContext.powderKegTimer = 0;
}
}
@@ -192,24 +193,26 @@ void EnBom_Destroy(Actor* thisx, PlayState* play) {
}
}
-void func_80871058(EnBom* this, PlayState* play) {
+void EnBom_Move(EnBom* this, PlayState* play) {
static Vec3f D_80872E68[] = {
{ 2.0f, -6.0f, -0.3f },
{ 1.5f, -5.0f, -0.6f },
{ 0.2f, -6.0f, -0.1f },
};
+ // if bomb has a parent actor, the bomb hasnt been released yet
if (Actor_HasParent(&this->actor, play)) {
- this->actionFunc = func_808714D4;
+ this->actionFunc = EnBom_WaitForRelease;
this->actor.room = -1;
return;
}
- if ((this->actor.velocity.y > 0.0f) && (this->actor.bgCheckFlags & 0x10)) {
+ if ((this->actor.velocity.y > 0.0f) && (this->actor.bgCheckFlags & BGCHECKFLAG_CEILING)) {
this->actor.velocity.y = -this->actor.velocity.y;
}
- if ((this->actor.speedXZ != 0.0f) && (this->actor.bgCheckFlags & 8)) {
+ // rebound bomb off the wall it hits
+ if ((this->actor.speed != 0.0f) && (this->actor.bgCheckFlags & BGCHECKFLAG_WALL)) {
s16 yDiff = BINANG_SUB(this->actor.wallYaw, this->actor.world.rot.y);
if (ABS_ALT(yDiff) > 0x4000) {
@@ -217,30 +220,30 @@ void func_80871058(EnBom* this, PlayState* play) {
BINANG_SUB(this->actor.wallYaw - this->actor.world.rot.y + this->actor.wallYaw, 0x8000);
}
- Actor_PlaySfxAtPos(&this->actor, this->isPowderKeg ? NA_SE_EV_PUT_DOWN_WOODBOX : NA_SE_EV_BOMB_BOUND);
+ Actor_PlaySfx(&this->actor, this->isPowderKeg ? NA_SE_EV_PUT_DOWN_WOODBOX : NA_SE_EV_BOMB_BOUND);
Actor_MoveWithGravity(&this->actor);
- this->actor.speedXZ *= 0.7f;
- this->actor.bgCheckFlags &= ~8;
+ this->actor.speed *= 0.7f;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_WALL;
}
- if (!(this->actor.bgCheckFlags & 1)) {
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.08f);
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ Math_StepToF(&this->actor.speed, 0.0f, 0.08f);
} else {
Vec3f* sp58;
- u32 sp54 = func_800C99D4(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId);
- Vec3f sp48;
- s16 sp46;
+ FloorType floorType = SurfaceType_GetFloorType(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId);
+ Vec3f slopeNormal;
+ s16 downwardSlopeYaw;
f32 sp40;
f32 sp3C;
f32 sp38;
sp58 = &D_80872E68[this->isPowderKeg];
- if (sp54 == 5) {
+ if (floorType == FLOOR_TYPE_5) {
sp58 = &D_80872E68[2];
}
- if ((sp54 == 4) || (sp54 == 14) || (sp54 == 15)) {
+ if ((floorType == FLOOR_TYPE_4) || (floorType == FLOOR_TYPE_14) || (floorType == FLOOR_TYPE_15)) {
s16 sp36;
Math_ApproachF(&this->actor.shape.yOffset, 0.0f, 0.1f, 50.0f);
@@ -251,64 +254,65 @@ void func_80871058(EnBom* this, PlayState* play) {
Math_ApproachF(&this->actor.shape.yOffset, 700.0f, 1.0f, 700.0f);
}
- sp40 = Math_SinS(this->actor.world.rot.y) * this->actor.speedXZ;
- sp3C = Math_CosS(this->actor.world.rot.y) * this->actor.speedXZ;
- func_800B75A0(this->actor.floorPoly, &sp48, &sp46);
+ sp40 = Math_SinS(this->actor.world.rot.y) * this->actor.speed;
+ sp3C = Math_CosS(this->actor.world.rot.y) * this->actor.speed;
+ Actor_GetSlopeDirection(this->actor.floorPoly, &slopeNormal, &downwardSlopeYaw);
- sp40 += 3.0f * sp48.x;
- sp3C += 3.0f * sp48.z;
+ sp40 += 3.0f * slopeNormal.x;
+ sp3C += 3.0f * slopeNormal.z;
sp38 = sqrtf(SQ(sp40) + SQ(sp3C));
- if ((sp38 < this->actor.speedXZ) ||
- (SurfaceType_GetSlope(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) == 1)) {
+ if ((sp38 < this->actor.speed) || (SurfaceType_GetFloorEffect(&play->colCtx, this->actor.floorPoly,
+ this->actor.floorBgId) == FLOOR_EFFECT_1)) {
if (sp38 > 16.0f) {
- this->actor.speedXZ = 16.0f;
+ this->actor.speed = 16.0f;
} else {
- this->actor.speedXZ = sp38;
+ this->actor.speed = sp38;
}
- this->actor.world.rot.y = Math_FAtan2F(sp3C, sp40);
+ this->actor.world.rot.y = Math_Atan2S_XY(sp3C, sp40);
}
- if (!Math_StepToF(&this->actor.speedXZ, 0.0f, sp58->x)) {
+ if (!Math_StepToF(&this->actor.speed, 0.0f, sp58->x)) {
s16 temp = this->actor.world.rot.y;
s32 pad;
if (ABS_ALT(BINANG_SUB(this->actor.world.rot.y, this->actor.shape.rot.y)) > 0x4000) {
temp = BINANG_ROT180(temp);
}
- Math_ScaledStepToS(&this->actor.shape.rot.y, temp, this->actor.speedXZ * 100.0f);
- this->unk_1FA += (s16)(this->actor.speedXZ * 800.0f);
+ Math_ScaledStepToS(&this->actor.shape.rot.y, temp, this->actor.speed * 100.0f);
+ this->unk_1FA += (s16)(this->actor.speed * 800.0f);
}
- if (this->actor.bgCheckFlags & 2) {
- Actor_PlaySfxAtPos(&this->actor, this->isPowderKeg ? NA_SE_EV_TRE_BOX_BOUND : NA_SE_EV_BOMB_BOUND);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
+ Actor_PlaySfx(&this->actor, this->isPowderKeg ? NA_SE_EV_TRE_BOX_BOUND : NA_SE_EV_BOMB_BOUND);
if (this->actor.velocity.y < sp58->y) {
- if ((sp54 == 4) || (sp54 == 14) || (sp54 == 15)) {
+ if ((floorType == FLOOR_TYPE_4) || (floorType == FLOOR_TYPE_14) || (floorType == FLOOR_TYPE_15)) {
this->actor.velocity.y = 0.0f;
} else {
this->actor.velocity.y = this->actor.velocity.y * sp58->z;
}
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
}
} else if (this->timer >= 4) {
- Actor_LiftActor(&this->actor, play);
+ Actor_OfferCarry(&this->actor, play);
}
}
Actor_MoveWithGravity(&this->actor);
}
-void func_808714D4(EnBom* this, PlayState* play) {
+void EnBom_WaitForRelease(EnBom* this, PlayState* play) {
+ // if parent is NULL bomb has been released
if (Actor_HasNoParent(&this->actor, play)) {
- this->actionFunc = func_80871058;
+ this->actionFunc = EnBom_Move;
this->actor.room = play->roomCtx.curRoom.num;
this->actor.flags &= ~ACTOR_FLAG_100000;
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
Math_Vec3s_ToVec3f(&this->actor.prevPos, &this->actor.home.rot);
if (this->isPowderKeg) {
gSaveContext.powderKegTimer = 0;
}
- func_80871058(this, play);
+ EnBom_Move(this, play);
} else {
Math_Vec3f_ToVec3s(&this->actor.home.rot, &this->actor.parent->world.pos);
if (this->isPowderKeg) {
@@ -318,12 +322,12 @@ void func_808714D4(EnBom* this, PlayState* play) {
Math_ScaledStepToS(&this->unk_1FA, 0, 2000);
}
-void func_808715B8(EnBom* this, PlayState* play) {
+void EnBom_Explode(EnBom* this, PlayState* play) {
static s16 D_80872E8C[] = { 100, 200 };
static Color_RGBA8 D_80872E90 = { 185, 140, 70, 255 };
static Color_RGBA8 D_80872E94 = { 255, 255, 255, 255 };
s32 i;
- s32 temp_s0;
+ FloorType floorType;
f32 temp_f20;
s32 pad;
f32 spCC;
@@ -347,7 +351,7 @@ void func_808715B8(EnBom* this, PlayState* play) {
this->collider2.base.atFlags &= ~OC1_TYPE_1;
}
- if (this->actor.params == ENBOM_1) {
+ if (this->actor.params == BOMB_TYPE_EXPLOSION) {
CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider2.base);
}
@@ -377,7 +381,7 @@ void func_808715B8(EnBom* this, PlayState* play) {
if (this->timer == 0) {
func_80123590(play, &this->actor);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
if ((this->timer & 1) == 0) {
@@ -390,11 +394,11 @@ void func_808715B8(EnBom* this, PlayState* play) {
spB4.y = this->actor.world.pos.y + 500.0f;
spB4.z = this->actor.world.pos.z + spC0.z;
if (BgCheck_EntityRaycastFloor3(&play->colCtx, &spB0, &spAC, &spB4) != BGCHECK_Y_MIN) {
- temp_s0 = func_800C99D4(&play->colCtx, spB0, spAC);
+ floorType = SurfaceType_GetFloorType(&play->colCtx, spB0, spAC);
temp_f20 = BgCheck_EntityRaycastFloor1(&play->colCtx, &spB0, &spB4);
- if ((temp_s0 == 4) || (temp_s0 == 15) || (temp_s0 == 14)) {
- if (temp_s0 == 4) {
+ if ((floorType == FLOOR_TYPE_4) || (floorType == FLOOR_TYPE_15) || (floorType == FLOOR_TYPE_14)) {
+ if (floorType == FLOOR_TYPE_4) {
sp84 = D_80872E90;
sp80 = D_80872E90;
} else {
@@ -423,46 +427,46 @@ static s16 D_80872E98[] = { 3, 5 };
static s16 D_80872E9C[] = { 10, 15 };
void EnBom_Update(Actor* thisx, PlayState* play) {
- Vec3f spA4 = { 0.0f, 0.0f, 0.0f };
- Vec3f sp98 = { 0.0f, 0.1f, 0.0f };
- Vec3f sp8C = { 0.0f, 0.0f, 0.0f };
- Vec3f sp80;
- Vec3f sp74 = { 0.0f, 0.6f, 0.0f };
- Color_RGBA8 sp70 = { 255, 255, 255, 255 };
+ Vec3f effVelocity = { 0.0f, 0.0f, 0.0f };
+ Vec3f bomb2Accel = { 0.0f, 0.1f, 0.0f }; // unused
+ Vec3f effAccel = { 0.0f, 0.0f, 0.0f };
+ Vec3f effPos;
+ Vec3f dustAccel = { 0.0f, 0.6f, 0.0f };
+ Color_RGBA8 dustColor = { 255, 255, 255, 255 };
EnBom* this = THIS;
s32 pad;
Player* player = GET_PLAYER(play);
- if (player->stateFlags1 & 2) {
+ if (player->stateFlags1 & PLAYER_STATE1_2) {
return;
}
if (Player_GetMask(play) == PLAYER_MASK_GIANT) {
- Actor_MarkForDeath(thisx);
+ Actor_Kill(thisx);
return;
}
if (this->unk_1FC != 0) {
this->unk_1FC--;
- Math_ApproachZeroF(&thisx->speedXZ, 1.0f, 1.0f);
+ Math_ApproachZeroF(&thisx->speed, 1.0f, 1.0f);
Actor_MoveWithGravity(thisx);
- Actor_UpdateBgCheckInfo(play, thisx, 35.0f, 10.0f, 36.0f, 4);
+ Actor_UpdateBgCheckInfo(play, thisx, 35.0f, 10.0f, 36.0f, UPDBGCHECKINFO_FLAG_4);
if (this->unk_1FC == 0) {
if (this->isPowderKeg) {
gSaveContext.powderKegTimer = 0;
}
- Actor_MarkForDeath(thisx);
+ Actor_Kill(thisx);
}
} else {
thisx->gravity = -1.2f;
if (this->timer != 0) {
- if (!this->isPowderKeg || (func_808715B8 == this->actionFunc) || !Play_InCsMode(play)) {
+ if (!this->isPowderKeg || (EnBom_Explode == this->actionFunc) || !Play_InCsMode(play)) {
this->timer--;
}
}
if ((!this->isPowderKeg && (this->timer == 67)) || (this->isPowderKeg && (this->timer <= 2400))) {
- Actor_PlaySfxAtPos(thisx, NA_SE_PL_TAKE_OUT_SHIELD);
+ Actor_PlaySfx(thisx, NA_SE_PL_TAKE_OUT_SHIELD);
Actor_SetScale(thisx, enBomScales[this->isPowderKeg]);
}
@@ -472,18 +476,21 @@ void EnBom_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
- Actor_UpdateBgCheckInfo(play, thisx, 35.0f, 10.0f, 36.0f, 0x1F);
- if (thisx->params == ENBOM_0) {
+ Actor_UpdateBgCheckInfo(play, thisx, 35.0f, 10.0f, 36.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 |
+ UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10);
+ if (thisx->params == BOMB_TYPE_BODY) {
static Vec3us D_80872ED4[] = {
{ 40, 20, 100 },
{ 300, 60, 600 },
};
Vec3us* sp60 = &D_80872ED4[this->isPowderKeg];
- sp74.y = 0.2f;
- Math_Vec3f_Copy(&sp80, &thisx->home.pos);
+ // spawn spark effect on even frames
+ dustAccel.y = 0.2f;
+ Math_Vec3f_Copy(&effPos, &thisx->home.pos);
if ((play->gameplayFrames % 2) == 0) {
- EffectSsGSpk_SpawnFuse(play, thisx, &sp80, &spA4, &sp8C);
+ EffectSsGSpk_SpawnFuse(play, thisx, &effPos, &effVelocity, &effAccel);
}
if (this->isPowderKeg) {
func_801A0810(&thisx->projectedPos, NA_SE_IT_BIG_BOMB_IGNIT - SFX_FLAG,
@@ -491,25 +498,30 @@ void EnBom_Update(Actor* thisx, PlayState* play) {
: (this->flashSpeedScale == 3) ? 1
: 2);
} else {
- Actor_PlaySfxAtPos(thisx, NA_SE_IT_BOMB_IGNIT - SFX_FLAG);
+ Actor_PlaySfx(thisx, NA_SE_IT_BOMB_IGNIT - SFX_FLAG);
}
- sp80.y += 3.0f;
- func_800B0DE0(play, &sp80, &spA4, &sp74, &sp70, &sp70, 50, 5);
+ effPos.y += 3.0f;
+ func_800B0DE0(play, &effPos, &effVelocity, &dustAccel, &dustColor, &dustColor, 50, 5);
if ((this->collider1.base.acFlags & AC_HIT) ||
((this->collider1.base.ocFlags1 & OC1_HIT) && ((this->collider1.base.oc->category == ACTORCAT_ENEMY) ||
(this->collider1.base.oc->category == ACTORCAT_BOSS)))) {
this->timer = 0;
thisx->shape.rot.z = 0;
- } else if ((this->timer > 100) && (Player_IsBurningStickInRange(play, &thisx->world.pos, 30.0f, 50.0f))) {
- this->timer = 100;
+ } else {
+ // if a lit stick touches the bomb, set timer to 100
+ // these bombs never have a timer over 70, so this isn't used
+ if ((this->timer > 100) && Player_IsBurningStickInRange(play, &thisx->world.pos, 30.0f, 50.0f)) {
+ this->timer = 100;
+ }
}
- sp74.y = 0.2f;
- sp80 = thisx->world.pos;
- sp80.y += 10.0f;
+ dustAccel.y = 0.2f;
+ effPos = thisx->world.pos;
+ effPos.y += 10.0f;
+ // double bomb flash speed and adjust red color at certain times during the countdown
if ((this->timer == sp60->x) || (this->timer == sp60->y) || (this->timer == 3)) {
thisx->shape.rot.z = 0;
this->flashSpeedScale >>= 1;
@@ -526,12 +538,12 @@ void EnBom_Update(Actor* thisx, PlayState* play) {
}
if (this->timer == 0) {
- sp80 = thisx->world.pos;
- sp80.y += 10.0f;
+ effPos = thisx->world.pos;
+ effPos.y += 10.0f;
if (Actor_HasParent(thisx, play)) {
- sp80.y += 30.0f;
+ effPos.y += 30.0f;
}
- Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, sp80.x, sp80.y - 10.0f, sp80.z, 0, 0, 0,
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, effPos.x, effPos.y - 10.0f, effPos.z, 0, 0, 0,
this->isPowderKeg);
func_800BC848(thisx, play, D_80872E98[this->isPowderKeg], D_80872E9C[this->isPowderKeg]);
play->envCtx.lightSettings.diffuseColor1[0] = play->envCtx.lightSettings.diffuseColor1[1] =
@@ -539,30 +551,32 @@ void EnBom_Update(Actor* thisx, PlayState* play) {
play->envCtx.lightSettings.ambientColor[0] = play->envCtx.lightSettings.ambientColor[1] =
play->envCtx.lightSettings.ambientColor[2] = 250;
Camera_AddQuake(&play->mainCamera, 2, 11, 8);
- thisx->params = ENBOM_1;
+ thisx->params = BOMB_TYPE_EXPLOSION;
this->timer = 10;
thisx->flags |= (ACTOR_FLAG_20 | ACTOR_FLAG_100000);
- this->actionFunc = func_808715B8;
+ this->actionFunc = EnBom_Explode;
if (this->isPowderKeg) {
gSaveContext.powderKegTimer = 0;
- Actor_PlaySfxAtPos(thisx, NA_SE_IT_BIG_BOMB_EXPLOSION);
+ Actor_PlaySfx(thisx, NA_SE_IT_BIG_BOMB_EXPLOSION);
} else {
- Actor_PlaySfxAtPos(thisx, NA_SE_IT_BOMB_EXPLOSION);
+ Actor_PlaySfx(thisx, NA_SE_IT_BOMB_EXPLOSION);
}
}
}
Actor_SetFocus(thisx, 20.0f);
- if (thisx->params <= ENBOM_0) {
+ if (thisx->params <= BOMB_TYPE_BODY) {
Collider_UpdateCylinder(thisx, &this->collider1);
+
+ // if link is not holding the bomb anymore and bump conditions are met, subscribe to OC
if (!Actor_HasParent(thisx, play) && (this->unk_1F8 != 0)) {
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider1.base);
}
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider1.base);
}
- if ((enBomScales[this->isPowderKeg] <= thisx->scale.x) && (thisx->params != ENBOM_1)) {
+ if ((enBomScales[this->isPowderKeg] <= thisx->scale.x) && (thisx->params != BOMB_TYPE_EXPLOSION)) {
if (thisx->depthInWater >= 20.0f) {
Vec3f sp54;
@@ -579,9 +593,9 @@ void EnBom_Update(Actor* thisx, PlayState* play) {
thisx->velocity.y = (KREG(83) * 0.1f) + -2.0f;
thisx->gravity = (KREG(84) * 0.1f) + -0.5f;
this->unk_1FC = KREG(81) + 10;
- } else if (thisx->bgCheckFlags & 0x40) {
- thisx->bgCheckFlags &= ~0x40;
- Actor_PlaySfxAtPos(thisx, NA_SE_EV_BOMB_DROP_WATER);
+ } else if (thisx->bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) {
+ thisx->bgCheckFlags &= ~BGCHECKFLAG_WATER_TOUCH;
+ Actor_PlaySfx(thisx, NA_SE_EV_BOMB_DROP_WATER);
}
}
}
@@ -600,7 +614,7 @@ void EnBom_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- if (this->actor.params == ENBOM_0) {
+ if (this->actor.params == BOMB_TYPE_BODY) {
func_8012C28C(play->state.gfxCtx);
Collider_UpdateSpheres(0, &this->collider2);
@@ -644,7 +658,7 @@ void EnBom_Draw(Actor* thisx, PlayState* play) {
gSPDisplayList(POLY_OPA_DISP++, gPowderKegGoronSkullDL);
func_808726DC(play, &this->actor.home.pos, &sp58, &sp4C, this->timer);
- func_80872BC0(play, this->timer);
+ EnBom_DrawKeg(play, this->timer);
}
}
@@ -678,9 +692,9 @@ void func_808726DC(PlayState* play, Vec3f* arg1, Vec3f* arg2, Vec3f* arg3, s32 a
Math_Vec3f_Copy(&fuseSegmentPtr->pos, arg1);
Math_Vec3f_Diff(arg2, arg1, &spCC);
- fuseSegmentPtr->rotY = Math_FAtan2F(spCC.z, spCC.x);
+ fuseSegmentPtr->rotY = Math_Atan2S_XY(spCC.z, spCC.x);
distXZ = sqrtf(SQXZ(spCC));
- fuseSegmentPtr->rotX = Math_FAtan2F(distXZ, spCC.y);
+ fuseSegmentPtr->rotX = Math_Atan2S_XY(distXZ, spCC.y);
spB0 = (arg4 / 240) + 1;
@@ -718,9 +732,9 @@ void func_808726DC(PlayState* play, Vec3f* arg1, Vec3f* arg2, Vec3f* arg3, s32 a
spCC.z = 0.0f;
}
- fuseSegmentPtr2->rotY = Math_FAtan2F(spCC.z, spCC.x);
+ fuseSegmentPtr2->rotY = Math_Atan2S_XY(spCC.z, spCC.x);
distXZ = sqrtf(SQXZ(spCC));
- fuseSegmentPtr2->rotX = Math_FAtan2F(distXZ, spCC.y);
+ fuseSegmentPtr2->rotX = Math_Atan2S_XY(distXZ, spCC.y);
fuseSegmentPtr2->rotY =
(s16)CLAMP(BINANG_SUB(fuseSegmentPtr2->rotY, fuseSegmentPtr->rotY), -8000, 8000) + fuseSegmentPtr->rotY;
@@ -768,7 +782,7 @@ void func_808726DC(PlayState* play, Vec3f* arg1, Vec3f* arg2, Vec3f* arg3, s32 a
Math_Vec3f_Copy(arg1, &fuseSegmentPtr->pos);
}
-void func_80872BC0(PlayState* play, s32 arg1) {
+void EnBom_DrawKeg(PlayState* play, s32 arg1) {
s32 temp_s5;
s32 i;
PowderKegFuseSegment* fuseSegmentPtr = &sPowderKegFuseSegments[0];
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 fe8eaadf1..bf568cd6a 100644
--- a/src/overlays/actors/ovl_En_Bom/z_en_bom.h
+++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.h
@@ -11,10 +11,10 @@ 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)
-enum {
- /* 0 */ ENBOM_0,
- /* 1 */ ENBOM_1,
-};
+typedef enum {
+ /* 0 */ BOMB_TYPE_BODY,
+ /* 1 */ BOMB_TYPE_EXPLOSION,
+} BombType;
typedef struct EnBom {
/* 0x000 */ Actor actor;
@@ -31,6 +31,4 @@ typedef struct EnBom {
/* 0x200 */ EnBomActionFunc actionFunc;
} EnBom; // size = 0x204
-extern const ActorInit En_Bom_InitVars;
-
#endif // Z_EN_BOM_H
diff --git a/src/overlays/actors/ovl_En_Bom_Bowl_Man/overlay.cfg b/src/overlays/actors/ovl_En_Bom_Bowl_Man/overlay.cfg
deleted file mode 100644
index 2d762ca9b..000000000
--- a/src/overlays/actors/ovl_En_Bom_Bowl_Man/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Bom_Bowl_Man
-z_en_bom_bowl_man.c
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 21fc9901f..ae45b0cc5 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
@@ -37,7 +37,7 @@ s32 D_809C6100 = 0;
s32 D_809C6104 = 0;
-const ActorInit En_Bom_Bowl_Man_InitVars = {
+ActorInit En_Bom_Bowl_Man_InitVars = {
ACTOR_EN_BOM_BOWL_MAN,
ACTORCAT_NPC,
FLAGS,
@@ -97,15 +97,15 @@ void EnBomBowlMan_Init(Actor* thisx, PlayState* play) {
this->path = SubS_GetPathByIndex(play, this->unk_29A, 0x3F);
this->unk_2C8 = 80.0f;
- if ((gSaveContext.save.entrance == ENTRANCE(EAST_CLOCK_TOWN, 2)) && (gSaveContext.save.weekEventReg[73] & 0x80) &&
+ if ((gSaveContext.save.entrance == ENTRANCE(EAST_CLOCK_TOWN, 2)) && CHECK_WEEKEVENTREG(WEEKEVENTREG_73_80) &&
!CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) {
- this->unk_2D6 = this->actor.cutscene;
- if (this->unk_2D6 == 0) {
- Actor_MarkForDeath(&this->actor);
+ this->csId3 = this->actor.csId;
+ if (this->csId3 == 0) {
+ Actor_Kill(&this->actor);
}
func_809C52B4(this);
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -123,27 +123,27 @@ void func_809C49CC(EnBomBowlMan* this) {
if ((this->unk_2F8 == 5) &&
(Animation_OnFrame(&this->skelAnime, 9.0f) || Animation_OnFrame(&this->skelAnime, 10.0f) ||
Animation_OnFrame(&this->skelAnime, 17.0f) || Animation_OnFrame(&this->skelAnime, 18.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOMBERS_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_WALK);
}
if ((this->unk_2F8 == 0xB) &&
(Animation_OnFrame(&this->skelAnime, 4.0f) || Animation_OnFrame(&this->skelAnime, 8.0f) ||
Animation_OnFrame(&this->skelAnime, 12.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOMBERS_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_WALK);
}
if ((this->unk_2F8 == 0x12) &&
(Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 2.0f) ||
Animation_OnFrame(&this->skelAnime, 4.0f) || Animation_OnFrame(&this->skelAnime, 6.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOMBERS_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_WALK);
}
if ((this->unk_2F8 == 0xF) && Animation_OnFrame(&this->skelAnime, 15.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOMBERS_LAND);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_LAND);
}
if ((this->unk_2F8 == 6) && Animation_OnFrame(&this->skelAnime, 8.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOMBERS_LAND);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_LAND);
}
}
@@ -158,7 +158,7 @@ void func_809C4B50(EnBomBowlMan* this) {
void func_809C4B6C(EnBomBowlMan* this) {
if ((this->unk_29A != ENBOMBOWLMAN_FF00_MINUS1) && (this->path != NULL)) {
if (!SubS_CopyPointFromPath(this->path, this->unk_298, &this->unk_2A0)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
}
@@ -173,9 +173,9 @@ void func_809C4BC4(EnBomBowlMan* this, PlayState* play) {
func_809C4B50(this);
func_809C493C(this, 0, 1.0f);
- for (i = 0; i < ARRAY_COUNT(gSaveContext.save.bomberCode); i++) {
+ for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.bomberCode); i++) {
Math_Vec3f_Copy(&sp7C, &this->actor.home.pos);
- code = gSaveContext.save.bomberCode[i];
+ code = gSaveContext.save.saveInfo.bomberCode[i];
if (code == 1) {
Math_Vec3f_Copy(&this->actor.world.pos, &D_809C61A0[i]);
this->unk_2D8[code] = this;
@@ -192,18 +192,18 @@ void func_809C4BC4(EnBomBowlMan* this, PlayState* play) {
}
}
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->unk_2D0);
- } else if (!ActorCutscene_GetCanPlayNext(this->unk_2D0)) {
- ActorCutscene_SetIntentToPlay(this->unk_2D0);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csId1);
+ } else if (!CutsceneManager_IsNext(this->csId1)) {
+ CutsceneManager_Queue(this->csId1);
}
func_809C493C(this, 3, 1.0f);
this->unk_2D4 = this->actor.yawTowardsPlayer;
this->unk_290 = this->actor.yawTowardsPlayer;
- gSaveContext.save.weekEventReg[73] &= (u8)~0x10;
- gSaveContext.save.weekEventReg[85] &= (u8)~2;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_73_10);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_85_02);
this->unk_29C = 0;
this->actionFunc = func_809C4DA4;
}
@@ -214,18 +214,18 @@ void func_809C4DA4(EnBomBowlMan* this, PlayState* play) {
if (this->unk_2B8 == 0) {
Player* player = GET_PLAYER(play);
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->unk_2D0);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csId1);
return;
}
- if (!ActorCutscene_GetCanPlayNext(this->unk_2D0)) {
- ActorCutscene_SetIntentToPlay(this->unk_2D0);
+ if (!CutsceneManager_IsNext(this->csId1)) {
+ CutsceneManager_Queue(this->csId1);
return;
}
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D0, &this->actor);
+ CutsceneManager_StartWithPlayerCs(this->csId1, &this->actor);
this->unk_2B8 = 1;
this->unk_2C0 = 0;
this->unk_2D4 = this->actor.yawTowardsPlayer;
@@ -242,13 +242,13 @@ void func_809C4DA4(EnBomBowlMan* this, PlayState* play) {
s32 pad;
s32 sp28 = false;
- func_801477B4(play);
+ Message_CloseTextbox(play);
switch (this->unk_2C0) {
case 0:
this->unk_2C0 = 1;
D_809C6104 = 1;
- Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(this->unk_2D0)),
+ Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(this->csId1)),
&this->unk_2D8[0]->actor);
this->unk_2D4 = 0;
this->unk_2BC = 10;
@@ -268,7 +268,7 @@ void func_809C4DA4(EnBomBowlMan* this, PlayState* play) {
case 2:
if (player->transformation == PLAYER_FORM_HUMAN) {
this->unk_2B8 = 2;
- ActorCutscene_Stop(this->unk_2D0);
+ CutsceneManager_Stop(this->csId1);
func_809C59A4(this, play);
sp28 = true;
} else {
@@ -276,13 +276,13 @@ void func_809C4DA4(EnBomBowlMan* this, PlayState* play) {
play->msgCtx.msgLength = 0;
func_809C493C(this, 1, 1.0f);
D_809C6100 = 1;
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->unk_2D2);
- } else if (!ActorCutscene_GetCanPlayNext(this->unk_2D2)) {
- ActorCutscene_SetIntentToPlay(this->unk_2D2);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csId2);
+ } else if (!CutsceneManager_IsNext(this->csId2)) {
+ CutsceneManager_Queue(this->csId2);
}
- ActorCutscene_Stop(this->unk_2D0);
+ CutsceneManager_Stop(this->csId1);
this->actionFunc = func_809C5B1C;
sp28 = true;
}
@@ -299,7 +299,7 @@ void func_809C4DA4(EnBomBowlMan* this, PlayState* play) {
case 4:
if (this->unk_2B8 != 2) {
- ActorCutscene_Stop(this->unk_2D0);
+ CutsceneManager_Stop(this->csId1);
}
play->msgCtx.msgLength = 0;
func_809C493C(this, 1, 1.0f);
@@ -319,9 +319,9 @@ void func_809C4DA4(EnBomBowlMan* this, PlayState* play) {
if (!sp28) {
if (player->transformation == PLAYER_FORM_HUMAN) {
- func_80151938(play, D_809C618C[this->unk_2C0]);
+ Message_ContinueTextbox(play, D_809C618C[this->unk_2C0]);
} else {
- func_80151938(play, D_809C6198[this->unk_2C0]);
+ Message_ContinueTextbox(play, D_809C6198[this->unk_2C0]);
}
}
}
@@ -336,14 +336,14 @@ void func_809C51B4(EnBomBowlMan* this, PlayState* play) {
gSaveContext.nextCutsceneIndex = 0;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_86;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
- gSaveContext.save.weekEventReg[75] &= (u8)~0x40;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_75_40);
if (player->transformation == PLAYER_FORM_HUMAN) {
- gSaveContext.save.weekEventReg[84] |= 0x80;
- gSaveContext.save.weekEventReg[77] &= (u8)~2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_84_80);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_77_02);
} else {
- gSaveContext.save.weekEventReg[73] |= 0x20;
- gSaveContext.save.weekEventReg[85] &= (u8)~1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_73_20);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_85_01);
}
}
}
@@ -351,7 +351,7 @@ void func_809C51B4(EnBomBowlMan* this, PlayState* play) {
void func_809C52B4(EnBomBowlMan* this) {
this->actor.draw = NULL;
this->actor.flags |= ACTOR_FLAG_10;
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->actor.flags &= ~ACTOR_FLAG_1;
this->actor.world.pos.x = 1340.0f;
this->actor.world.pos.z = -1795.0f;
@@ -365,11 +365,11 @@ void func_809C5310(EnBomBowlMan* this, PlayState* play) {
if (player->actor.world.pos.x < 1510.0f) {
if (player->transformation != PLAYER_FORM_DEKU) {
if (this->actor.xzDistToPlayer < this->unk_2C8) {
- func_800B7298(play, &this->actor, 7);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT);
func_809C53A4(this);
}
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
}
@@ -401,7 +401,7 @@ void func_809C5408(EnBomBowlMan* this, PlayState* play) {
void func_809C5524(EnBomBowlMan* this, PlayState* play) {
this->actor.textId = 0x730;
- if (!(gSaveContext.save.weekEventReg[85] & 2)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02)) {
this->actor.textId = 0x72F;
}
func_809C493C(this, 3, 1.0f);
@@ -411,7 +411,7 @@ void func_809C5524(EnBomBowlMan* this, PlayState* play) {
void func_809C5598(EnBomBowlMan* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
if ((this->actor.textId == 0x72F) || (this->actor.textId == 0x730)) {
this->actor.textId = 0x731;
} else if (this->actor.textId == 0x731) {
@@ -423,7 +423,7 @@ void func_809C5598(EnBomBowlMan* this, PlayState* play) {
} else if (this->actor.textId == 0x734) {
this->actor.textId = 0x715;
} else if (this->actor.textId == 0x715) {
- func_800B7298(play, &this->actor, 6);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_END);
func_809C493C(this, 17, 1.0f);
func_809C59A4(this, play);
return;
@@ -435,11 +435,11 @@ void func_809C5598(EnBomBowlMan* this, PlayState* play) {
func_80151BB4(play, 0x24);
func_80151BB4(play, 0x25);
func_80151BB4(play, 0);
- func_800B7298(play, &this->actor, 7);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT);
this->actionFunc = func_809C5738;
return;
}
- func_80151938(play, this->actor.textId);
+ Message_ContinueTextbox(play, this->actor.textId);
}
}
@@ -452,25 +452,25 @@ void func_809C5738(EnBomBowlMan* this, PlayState* play) {
((play->msgCtx.msgMode == 0) || (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE))) {
this->unk_2C2 = 1;
func_809C4B6C(this);
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->unk_2D6);
- } else if (!ActorCutscene_GetCanPlayNext(this->unk_2D6)) {
- ActorCutscene_SetIntentToPlay(this->unk_2D6);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csId3);
+ } else if (!CutsceneManager_IsNext(this->csId3)) {
+ CutsceneManager_Queue(this->csId3);
} else {
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D6, &this->actor);
+ CutsceneManager_StartWithPlayerCs(this->csId3, &this->actor);
this->unk_2C2 = 2;
func_809C493C(this, 18, 1.0f);
}
}
} else if (this->unk_2C2 == 1) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->unk_2D6);
- } else if (!ActorCutscene_GetCanPlayNext(this->unk_2D6)) {
- ActorCutscene_SetIntentToPlay(this->unk_2D6);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csId3);
+ } else if (!CutsceneManager_IsNext(this->csId3)) {
+ CutsceneManager_Queue(this->csId3);
} else {
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D6, &this->actor);
+ CutsceneManager_StartWithPlayerCs(this->csId3, &this->actor);
this->unk_2C2 = 2;
func_809C493C(this, 18, 1.0f);
}
@@ -483,19 +483,20 @@ void func_809C5738(EnBomBowlMan* this, PlayState* play) {
(this->path != NULL)) {
this->unk_298++;
if (this->unk_298 >= this->path->count) {
- gSaveContext.save.weekEventReg[84] |= 0x80;
- gSaveContext.save.weekEventReg[83] &= (u8)~4;
- ActorCutscene_Stop(this->unk_2D6);
- Actor_MarkForDeath(&this->actor);
- } else {
- func_809C4B6C(this);
+ SET_WEEKEVENTREG(WEEKEVENTREG_84_80);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_83_04);
+ CutsceneManager_Stop(this->csId3);
+ Actor_Kill(&this->actor);
+ return;
}
+
+ func_809C4B6C(this);
}
}
}
void func_809C59A4(EnBomBowlMan* this, PlayState* play) {
- Actor_PickUp(&this->actor, play, GI_BOMBERS_NOTEBOOK, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_BOMBERS_NOTEBOOK, 300.0f, 300.0f);
this->unk_29C = 1;
this->actionFunc = func_809C59F0;
}
@@ -509,10 +510,10 @@ void func_809C59F0(EnBomBowlMan* this, PlayState* play) {
} else {
this->actor.textId = 0x716;
}
- func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_IA_MINUS1);
this->actionFunc = func_809C5AA4;
} else {
- Actor_PickUp(&this->actor, play, GI_BOMBERS_NOTEBOOK, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_BOMBERS_NOTEBOOK, 300.0f, 300.0f);
}
}
@@ -524,18 +525,18 @@ void func_809C5AA4(EnBomBowlMan* this, PlayState* play) {
this->actionFunc = func_809C5598;
}
} else {
- func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_IA_MINUS1);
}
}
void func_809C5B1C(EnBomBowlMan* this, PlayState* play) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->unk_2D2);
- } else if (!ActorCutscene_GetCanPlayNext(this->unk_2D2)) {
- ActorCutscene_SetIntentToPlay(this->unk_2D2);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csId2);
+ } else if (!CutsceneManager_IsNext(this->csId2)) {
+ CutsceneManager_Queue(this->csId2);
} else {
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D2, &this->actor);
+ CutsceneManager_StartWithPlayerCs(this->csId2, &this->actor);
func_809C5BA0(this);
}
}
@@ -552,7 +553,7 @@ void func_809C5BA0(EnBomBowlMan* this) {
void func_809C5BF4(EnBomBowlMan* this, PlayState* play) {
f32 sp2C = this->skelAnime.curFrame;
- s32 subCam;
+ Camera* subCam;
if ((D_809C6104 != 0) && (this->unk_2F8 != 15)) {
func_809C493C(this, 15, 1.0f);
@@ -573,12 +574,12 @@ void func_809C5BF4(EnBomBowlMan* this, PlayState* play) {
}
if (this->unk_2F4 == 0) {
- subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(this->unk_2D2));
+ subCam = Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(this->csId2));
if (D_809C6100 > 5) {
Player* player = GET_PLAYER(play);
- func_801477B4(play);
+ Message_CloseTextbox(play);
Camera_SetTargetActor(subCam, &this->unk_2D8[0]->actor);
func_809C493C(this, 13, 1.0f);
D_809C6100 = 0;
@@ -629,7 +630,9 @@ void EnBomBowlMan_Update(Actor* thisx, PlayState* play) {
this->unk_2F2 = (s32)Rand_ZeroFloat(60.0f) + 20;
}
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
}
s32 EnBomBowlMan_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
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 5f630e4e6..e958b84a1 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
@@ -17,46 +17,44 @@ typedef void (*EnBomBowlManActionFunc)(struct EnBomBowlMan*, PlayState*);
#define ENBOMBOWLMAN_FF00_MINUS1 -1
typedef struct EnBomBowlMan {
- /* 0x0000 */ Actor actor;
- /* 0x0144 */ SkelAnime skelAnime;
- /* 0x0188 */ Vec3s jointTable[21];
- /* 0x0206 */ Vec3s morphTable[21];
- /* 0x0284 */ EnBomBowlManActionFunc actionFunc;
- /* 0x0288 */ s16 unk_288;
- /* 0x028A */ s16 unk_28A;
- /* 0x028C */ UNK_TYPE1 unk28C[2];
- /* 0x028E */ s16 unk_28E;
- /* 0x0290 */ s16 unk_290;
- /* 0x0292 */ UNK_TYPE1 unk292[2];
- /* 0x0294 */ Path* path;
- /* 0x0298 */ s16 unk_298;
- /* 0x029A */ s16 unk_29A;
- /* 0x029C */ s16 unk_29C;
- /* 0x029E */ s16 unk_29E;
- /* 0x02A0 */ Vec3f unk_2A0;
- /* 0x02AC */ UNK_TYPE1 unk2AC[0xC];
- /* 0x02B8 */ s16 unk_2B8;
- /* 0x02BA */ s16 unk_2BA;
- /* 0x02BC */ s16 unk_2BC;
- /* 0x02BE */ UNK_TYPE1 unk2BE[2];
- /* 0x02C0 */ s16 unk_2C0;
- /* 0x02C2 */ s16 unk_2C2;
- /* 0x02C4 */ f32 unk_2C4;
- /* 0x02C8 */ f32 unk_2C8;
- /* 0x02CC */ s16 unk_2CC[2];
- /* 0x02D0 */ s16 unk_2D0;
- /* 0x02D2 */ s16 unk_2D2;
- /* 0x02D4 */ s16 unk_2D4;
- /* 0x02D6 */ s16 unk_2D6;
- /* 0x02D8 */ struct EnBomBowlMan* unk_2D8[5];
- /* 0x02EC */ UNK_TYPE1 unk2EC[0x4];
- /* 0x02F0 */ s16 unk_2F0;
- /* 0x02F2 */ s16 unk_2F2;
- /* 0x02F4 */ s16 unk_2F4;
- /* 0x02F6 */ s16 unk_2F6;
- /* 0x02F8 */ s32 unk_2F8;
+ /* 0x000 */ Actor actor;
+ /* 0x144 */ SkelAnime skelAnime;
+ /* 0x188 */ Vec3s jointTable[21];
+ /* 0x206 */ Vec3s morphTable[21];
+ /* 0x284 */ EnBomBowlManActionFunc actionFunc;
+ /* 0x288 */ s16 unk_288;
+ /* 0x28A */ s16 unk_28A;
+ /* 0x28C */ UNK_TYPE1 unk28C[2];
+ /* 0x28E */ s16 unk_28E;
+ /* 0x290 */ s16 unk_290;
+ /* 0x292 */ UNK_TYPE1 unk292[2];
+ /* 0x294 */ Path* path;
+ /* 0x298 */ s16 unk_298;
+ /* 0x29A */ s16 unk_29A;
+ /* 0x29C */ s16 unk_29C;
+ /* 0x29E */ s16 unk_29E;
+ /* 0x2A0 */ Vec3f unk_2A0;
+ /* 0x2AC */ UNK_TYPE1 unk2AC[0xC];
+ /* 0x2B8 */ s16 unk_2B8;
+ /* 0x2BA */ s16 unk_2BA;
+ /* 0x2BC */ s16 unk_2BC;
+ /* 0x2BE */ UNK_TYPE1 unk2BE[2];
+ /* 0x2C0 */ s16 unk_2C0;
+ /* 0x2C2 */ s16 unk_2C2;
+ /* 0x2C4 */ f32 unk_2C4;
+ /* 0x2C8 */ f32 unk_2C8;
+ /* 0x2CC */ s16 csIdList[2];
+ /* 0x2D0 */ s16 csId1;
+ /* 0x2D2 */ s16 csId2;
+ /* 0x2D4 */ s16 unk_2D4;
+ /* 0x2D6 */ s16 csId3;
+ /* 0x2D8 */ struct EnBomBowlMan* unk_2D8[5];
+ /* 0x2EC */ UNK_TYPE1 unk2EC[0x4];
+ /* 0x2F0 */ s16 unk_2F0;
+ /* 0x2F2 */ s16 unk_2F2;
+ /* 0x2F4 */ s16 unk_2F4;
+ /* 0x2F6 */ s16 unk_2F6;
+ /* 0x2F8 */ s32 unk_2F8;
} EnBomBowlMan; // size = 0x2FC
-extern const ActorInit En_Bom_Bowl_Man_InitVars;
-
#endif // Z_EN_BOM_BOWL_MAN_H
diff --git a/src/overlays/actors/ovl_En_Bom_Chu/overlay.cfg b/src/overlays/actors/ovl_En_Bom_Chu/overlay.cfg
deleted file mode 100644
index d1b0f7dc2..000000000
--- a/src/overlays/actors/ovl_En_Bom_Chu/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Bom_Chu
-z_en_bom_chu.c
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 b1b9f8d14..a2246b442 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
@@ -25,7 +25,7 @@ void EnBomChu_Move(EnBomChu* this, PlayState* play);
void EnBomChu_Explode(EnBomChu* this, PlayState* play);
void EnBomChu_WaitForDeath(EnBomChu* this, PlayState* play);
-const ActorInit En_Bom_Chu_InitVars = {
+ActorInit En_Bom_Chu_InitVars = {
ACTOR_EN_BOM_CHU,
ACTORCAT_EXPLOSIVES,
FLAGS,
@@ -177,14 +177,14 @@ void EnBomChu_WaitForRelease(EnBomChu* this, PlayState* play) {
} else if (Actor_HasNoParent(&this->actor, play)) {
player = GET_PLAYER(play);
Math_Vec3f_Copy(&this->actor.world.pos, &player->actor.world.pos);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
this->actor.shape.rot.y = player->actor.shape.rot.y;
this->actor.flags |= ACTOR_FLAG_1;
func_800B8EF4(play, &this->actor);
this->isMoving = true;
- this->actor.speedXZ = 8.0f;
+ this->actor.speed = 8.0f;
this->movingSpeed = 8.0f;
EnBomChu_SetupMove(this);
}
@@ -193,7 +193,7 @@ void EnBomChu_WaitForRelease(EnBomChu* this, PlayState* play) {
s32 EnBomChu_IsOnCollisionPoly(PlayState* play, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** poly,
s32* bgId) {
if ((BgCheck_EntityLineTest1(&play->colCtx, posA, posB, posResult, poly, true, true, true, true, bgId)) &&
- (!(func_800C9A4C(&play->colCtx, *poly, *bgId) & 0x30))) {
+ !(SurfaceType_GetWallFlags(&play->colCtx, *poly, *bgId) & (WALL_FLAG_4 | WALL_FLAG_5))) {
return true;
}
@@ -233,7 +233,7 @@ void EnBomChu_Move(EnBomChu* this, PlayState* play) {
bgIdUpDown = bgIdSide = BGCHECK_SCENE;
isFloorPolyValid = false;
- this->actor.speedXZ = this->movingSpeed;
+ this->actor.speed = this->movingSpeed;
lineLength = 2.0f * this->movingSpeed;
if ((this->timer == 0) || (this->collider.base.acFlags & AC_HIT) || (this->collider.base.ocFlags1 & OC1_HIT)) {
@@ -259,7 +259,7 @@ void EnBomChu_Move(EnBomChu* this, PlayState* play) {
isFloorPolyValid = EnBomChu_UpdateFloorPoly(this, polySide, play);
Math_Vec3f_Copy(&this->actor.world.pos, &posSide);
this->actor.floorBgId = bgIdSide;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
} else {
if (this->actor.floorPoly != polyUpDown) {
isFloorPolyValid = EnBomChu_UpdateFloorPoly(this, polyUpDown, play);
@@ -269,7 +269,7 @@ void EnBomChu_Move(EnBomChu* this, PlayState* play) {
this->actor.floorBgId = bgIdUpDown;
}
} else {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
lineLength *= 3.0f;
Math_Vec3f_Copy(&posA, &posB);
@@ -316,8 +316,8 @@ void EnBomChu_Move(EnBomChu* this, PlayState* play) {
func_800B8F98(&this->actor, NA_SE_IT_BOMBCHU_MOVE - SFX_FLAG);
}
- if (this->actor.speedXZ != 0.0f) {
- this->movingSpeed = this->actor.speedXZ;
+ if (this->actor.speed != 0.0f) {
+ this->movingSpeed = this->actor.speed;
}
}
@@ -336,7 +336,7 @@ void EnBomChu_Explode(EnBomChu* this, PlayState* play) {
}
this->timer = 1;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->actor.depthInWater > 0.0f) {
for (i = 0; i < 40; i++) {
@@ -350,7 +350,7 @@ void EnBomChu_Explode(EnBomChu* this, PlayState* play) {
void EnBomChu_WaitForDeath(EnBomChu* this, PlayState* play) {
if (this->timer == 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -408,7 +408,7 @@ void EnBomChu_HandleNonSceneCollision(EnBomChu* this, PlayState* play) {
Math_Vec3f_Copy(&originalWorldPos, &this->actor.world.pos);
Math_Vec3f_Copy(&originalAxisUp, &this->axisUp);
yaw = this->actor.shape.rot.y;
- BgCheck2_UpdateActorAttachedToMesh(&play->colCtx, this->actor.floorBgId, &this->actor);
+ DynaPolyActor_TransformCarriedActor(&play->colCtx, this->actor.floorBgId, &this->actor);
if (yaw != this->actor.shape.rot.y) {
yaw = this->actor.shape.rot.y - yaw;
@@ -441,7 +441,7 @@ void EnBomChu_HandleNonSceneCollision(EnBomChu* this, PlayState* play) {
isFloorPolyValid = EnBomChu_UpdateFloorPoly(this, poly, play);
Math_Vec3f_Copy(&this->actor.world.pos, &originalWorldPos);
this->actor.floorBgId = bgId;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (isFloorPolyValid) {
EnBomChu_UpdateRotation(this);
@@ -512,23 +512,23 @@ void EnBomChu_Update(Actor* thisx, PlayState* play) {
this->actor.depthInWater = waterY - this->actor.world.pos.y;
if (this->actor.depthInWater < 0.0f) {
- if (this->actor.bgCheckFlags & 0x20) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER) {
EnBomChu_SpawnRipplesAndSplashes(this, play, waterY, true);
}
- this->actor.bgCheckFlags &= ~0x20;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_WATER;
return;
}
- if (!(this->actor.bgCheckFlags & 0x20) && (this->timer != 120)) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_WATER) && (this->timer != 120)) {
EnBomChu_SpawnRipplesAndSplashes(this, play, waterY, true);
} else {
EffectSsBubble_Spawn(play, &this->actor.world.pos, 0.0f, 3.0f, 15.0f, 0.25f);
}
- this->actor.bgCheckFlags |= 0x20;
+ this->actor.bgCheckFlags |= BGCHECKFLAG_WATER;
} else {
- this->actor.bgCheckFlags &= ~0x20;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_WATER;
this->actor.depthInWater = BGCHECK_Y_MIN;
}
}
diff --git a/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.h b/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.h
index 35998aeac..686bbb384 100644
--- a/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.h
+++ b/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.h
@@ -25,6 +25,4 @@ typedef struct EnBomChu {
/* 0x188 */ ColliderSphere collider;
} EnBomChu; // size = 0x1E0
-extern const ActorInit En_Bom_Chu_InitVars;
-
#endif // Z_EN_BOM_CHU_H
diff --git a/src/overlays/actors/ovl_En_Bombal/overlay.cfg b/src/overlays/actors/ovl_En_Bombal/overlay.cfg
deleted file mode 100644
index a715cfbf5..000000000
--- a/src/overlays/actors/ovl_En_Bombal/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Bombal
-z_en_bombal.c
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 a4fc5d484..b67ca6820 100644
--- a/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c
+++ b/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c
@@ -25,7 +25,7 @@ void EnBombal_InitEffects(EnBombal* this, Vec3f* pos, s16 fadeDelay);
void EnBombal_UpdateEffects(EnBombal* this, PlayState* play);
void EnBombal_DrawEffects(EnBombal*, PlayState*);
-const ActorInit En_Bombal_InitVars = {
+ActorInit En_Bombal_InitVars = {
ACTOR_EN_BOMBAL,
ACTORCAT_PROP,
FLAGS,
@@ -66,7 +66,7 @@ void EnBombal_Init(Actor* thisx, PlayState* play) {
this->actor.targetMode = 6;
this->actor.colChkInfo.health = 1;
this->scale = 0.1f;
- this->cutscene = this->actor.cutscene;
+ this->csId = this->actor.csId;
func_80C05B24(this);
}
@@ -92,8 +92,8 @@ void func_80C05B3C(EnBombal* this, PlayState* play) {
if (this->collider.base.acFlags & AC_HIT) {
player = GET_PLAYER(play);
this->collider.base.acFlags &= ~AC_HIT;
- if (!(gSaveContext.save.weekEventReg[75] & 0x40) && !(gSaveContext.save.weekEventReg[73] & 0x10) &&
- !(gSaveContext.save.weekEventReg[85] & 2)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_40) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10) &&
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02)) {
player->stateFlags1 |= ACTOR_FLAG_20;
this->actor.flags |= ACTOR_FLAG_100000;
}
@@ -107,18 +107,18 @@ void func_80C05C44(EnBombal* this, PlayState* play) {
s32 i;
Vec3f pos;
- if (!(gSaveContext.save.weekEventReg[75] & 0x40) && !(gSaveContext.save.weekEventReg[73] & 0x10) &&
- !(gSaveContext.save.weekEventReg[85] & 2)) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_40) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10) &&
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02)) {
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csId);
return;
}
- if (!ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ if (!CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_Queue(this->csId);
} else {
- ActorCutscene_StartAndSetUnkLinkFields(this->cutscene, &this->actor);
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->actor);
phi_s0 = true;
}
} else {
@@ -135,8 +135,8 @@ void func_80C05C44(EnBombal* this, PlayState* play) {
EnBombal_InitEffects(this, &pos, 10);
}
- gSaveContext.save.weekEventReg[83] |= 4;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_MUJURA_BALLOON_BROKEN);
+ SET_WEEKEVENTREG(WEEKEVENTREG_83_04);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_MUJURA_BALLOON_BROKEN);
this->timer = 30;
this->isPopped = true;
this->actionFunc = func_80C05DE8;
@@ -145,12 +145,15 @@ void func_80C05C44(EnBombal* this, PlayState* play) {
void func_80C05DE8(EnBombal* this, PlayState* play) {
if (this->timer == 0) {
- if (!(gSaveContext.save.weekEventReg[75] & 0x40) && !(gSaveContext.save.weekEventReg[73] & 0x10) &&
- !(gSaveContext.save.weekEventReg[85] & 2)) {
- ActorCutscene_Stop(this->cutscene);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_40) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10) &&
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02)) {
+ CutsceneManager_Stop(this->csId);
}
- Actor_MarkForDeath(&this->actor);
- } else if (this->timer < 10) {
+ Actor_Kill(&this->actor);
+ return;
+ }
+
+ if (this->timer < 10) {
this->actor.colChkInfo.health = 0;
}
}
@@ -266,7 +269,7 @@ void EnBombal_DrawEffects(EnBombal* this, PlayState* play) {
gDPSetEnvColor(POLY_XLU_DISP++, 250, 180, 255, sPtr->alpha);
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
- Matrix_RotateZF(DEGF_TO_RADF(play->state.frames * 20.0f), MTXMODE_APPLY);
+ Matrix_RotateZF(DEG_TO_RAD(play->state.frames * 20.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++, &gSunSparkleModelDL);
diff --git a/src/overlays/actors/ovl_En_Bombal/z_en_bombal.h b/src/overlays/actors/ovl_En_Bombal/z_en_bombal.h
index a678fe1d8..67550c59b 100644
--- a/src/overlays/actors/ovl_En_Bombal/z_en_bombal.h
+++ b/src/overlays/actors/ovl_En_Bombal/z_en_bombal.h
@@ -23,13 +23,11 @@ typedef struct EnBombal {
/* 0x144 */ EnBombalActionFunc actionFunc;
/* 0x148 */ s16 timer;
/* 0x14A */ s16 isPopped;
- /* 0x14C */ s16 cutscene;
+ /* 0x14C */ s16 csId;
/* 0x150 */ f32 scale;
/* 0x154 */ f32 oscillationAngle;
/* 0x158 */ ColliderCylinder collider;
/* 0x1A4 */ EnBombalEffect effects[200];
} EnBombal; // size = 0x2A44
-extern const ActorInit En_Bombal_InitVars;
-
#endif // Z_EN_BOMBAL_H
diff --git a/src/overlays/actors/ovl_En_Bombers/overlay.cfg b/src/overlays/actors/ovl_En_Bombers/overlay.cfg
deleted file mode 100644
index 95cb0c1f8..000000000
--- a/src/overlays/actors/ovl_En_Bombers/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Bombers
-z_en_bombers.c
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 7d4fbbafb..64f900f32 100644
--- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c
+++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c
@@ -25,7 +25,7 @@ void func_80C042F8(EnBombers* this);
void func_80C04354(EnBombers* this, PlayState* play);
void func_80C043C8(EnBombers* this, PlayState* play);
-const ActorInit En_Bombers_InitVars = {
+ActorInit En_Bombers_InitVars = {
ACTOR_EN_BOMBERS,
ACTORCAT_NPC,
FLAGS,
@@ -104,45 +104,47 @@ void EnBombers_Init(Actor* thisx, PlayState* play) {
this->unk_2BE = ENBOMBERS_GET_F(&this->actor);
if (this->unk_2BC == ENBOMBERS_F0_0) {
- if ((gSaveContext.save.weekEventReg[73] & 0x10) || (gSaveContext.save.weekEventReg[85] & 2)) {
- Actor_MarkForDeath(&this->actor);
- } else {
- this->unk_2BE++;
- func_80C03ACC(this);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10) || CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02)) {
+ Actor_Kill(&this->actor);
+ return;
}
- } else if (((gSaveContext.save.weekEventReg[73] & 0x10) || (gSaveContext.save.weekEventReg[85] & 2)) &&
- (((this->unk_2BE == ENBOMBERS_F_0) && (gSaveContext.save.weekEventReg[76] & 1)) ||
- ((this->unk_2BE == ENBOMBERS_F_1) && (gSaveContext.save.weekEventReg[76] & 2)) ||
- ((this->unk_2BE == ENBOMBERS_F_2) && (gSaveContext.save.weekEventReg[76] & 4)) ||
- ((this->unk_2BE == ENBOMBERS_F_3) && (gSaveContext.save.weekEventReg[76] & 8)) ||
- ((this->unk_2BE == ENBOMBERS_F_4) && (gSaveContext.save.weekEventReg[76] & 0x10)))) {
- if (gSaveContext.save.weekEventReg[75] & 0x40) {
+
+ this->unk_2BE++;
+ func_80C03ACC(this);
+ } else if ((CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10) || CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02)) &&
+ (((this->unk_2BE == ENBOMBERS_F_0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_76_01)) ||
+ ((this->unk_2BE == ENBOMBERS_F_1) && CHECK_WEEKEVENTREG(WEEKEVENTREG_76_02)) ||
+ ((this->unk_2BE == ENBOMBERS_F_2) && CHECK_WEEKEVENTREG(WEEKEVENTREG_76_04)) ||
+ ((this->unk_2BE == ENBOMBERS_F_3) && CHECK_WEEKEVENTREG(WEEKEVENTREG_76_08)) ||
+ ((this->unk_2BE == ENBOMBERS_F_4) && CHECK_WEEKEVENTREG(WEEKEVENTREG_76_10)))) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_40)) {
if (this->unk_2BE == ENBOMBERS_F_0) {
EnBomBowlMan* bomBowlMan = (EnBomBowlMan*)Actor_Spawn(
&play->actorCtx, play, ACTOR_EN_BOM_BOWL_MAN, this->actor.world.pos.x, this->actor.world.pos.y,
this->actor.world.pos.z, 0, this->actor.world.rot.y, 0, 0);
if (bomBowlMan != NULL) {
- s32 cs = this->actor.cutscene;
+ s32 csId = this->actor.csId;
s32 i = 0;
// clang-format off
- while (cs != -1) { bomBowlMan->unk_2CC[i] = cs; cs = ActorCutscene_GetAdditionalCutscene(cs); i++; }
+ while (csId != CS_ID_NONE) { bomBowlMan->csIdList[i] = csId; csId = CutsceneManager_GetAdditionalCsId(csId); i++; }
// clang-format on
- gSaveContext.save.weekEventReg[76] &= (u8)~1;
- gSaveContext.save.weekEventReg[76] &= (u8)~2;
- gSaveContext.save.weekEventReg[76] &= (u8)~4;
- gSaveContext.save.weekEventReg[76] &= (u8)~8;
- gSaveContext.save.weekEventReg[76] &= (u8)~0x10;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_76_01);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_76_02);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_76_04);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_76_08);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_76_10);
}
}
- Actor_MarkForDeath(&this->actor);
- } else {
- func_80C042F8(this);
+ Actor_Kill(&this->actor);
+ return;
}
+
+ func_80C042F8(this);
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -163,13 +165,13 @@ void func_80C038B4(EnBombers* this) {
if ((this->unk_2C4 == 2) &&
(Animation_OnFrame(&this->skelAnime, 9.0f) || Animation_OnFrame(&this->skelAnime, 10.0f) ||
Animation_OnFrame(&this->skelAnime, 17.0f) || Animation_OnFrame(&this->skelAnime, 18.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOMBERS_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_WALK);
}
if ((this->unk_2C4 == 15) &&
(Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 2.0f) ||
Animation_OnFrame(&this->skelAnime, 4.0f) || Animation_OnFrame(&this->skelAnime, 6.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOMBERS_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_WALK);
}
}
@@ -180,7 +182,7 @@ void func_80C039A8(EnBombers* this, PlayState* play) {
switch (player->transformation) {
case PLAYER_FORM_HUMAN:
this->actor.textId = 0x73D;
- if (gSaveContext.save.weekEventReg[84] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_80)) {
this->actor.textId = 0x74B;
}
break;
@@ -194,14 +196,14 @@ void func_80C039A8(EnBombers* this, PlayState* play) {
break;
case PLAYER_FORM_DEKU:
- if (gSaveContext.save.weekEventReg[73] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_20)) {
this->actor.textId = 0x75A;
- } else if (gSaveContext.save.weekEventReg[73] & 0x40) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_40)) {
this->actor.textId = 0x749;
- if (((this->unk_2BE == ENBOMBERS_F_1) && (gSaveContext.save.weekEventReg[74] & 1)) ||
- ((this->unk_2BE == ENBOMBERS_F_2) && (gSaveContext.save.weekEventReg[74] & 2)) ||
- ((this->unk_2BE == ENBOMBERS_F_3) && (gSaveContext.save.weekEventReg[74] & 4)) ||
- ((this->unk_2BE == ENBOMBERS_F_4) && (gSaveContext.save.weekEventReg[74] & 8))) {
+ if (((this->unk_2BE == ENBOMBERS_F_1) && CHECK_WEEKEVENTREG(WEEKEVENTREG_74_01)) ||
+ ((this->unk_2BE == ENBOMBERS_F_2) && CHECK_WEEKEVENTREG(WEEKEVENTREG_74_02)) ||
+ ((this->unk_2BE == ENBOMBERS_F_3) && CHECK_WEEKEVENTREG(WEEKEVENTREG_74_04)) ||
+ ((this->unk_2BE == ENBOMBERS_F_4) && CHECK_WEEKEVENTREG(WEEKEVENTREG_74_08))) {
this->actor.textId = 0x74A;
}
} else {
@@ -336,7 +338,7 @@ void func_80C03FAC(EnBombers* this, PlayState* play) {
if ((this->unk_2A6 == Message_GetState(&play->msgCtx)) && Message_ShouldAdvance(play)) {
sp2A = 0;
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->unk_2A6 = TEXT_STATE_5;
if ((this->actor.textId == 0x73D) || (this->actor.textId == 0x73E) || (this->actor.textId == 0x73F)) {
@@ -393,22 +395,22 @@ void func_80C03FAC(EnBombers* this, PlayState* play) {
} else if (this->actor.textId == 0x748) {
switch (this->unk_2BE) {
case ENBOMBERS_F_1:
- gSaveContext.save.weekEventReg[74] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_74_01);
break;
case ENBOMBERS_F_2:
- gSaveContext.save.weekEventReg[74] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_74_02);
break;
case ENBOMBERS_F_3:
- gSaveContext.save.weekEventReg[74] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_74_04);
break;
case ENBOMBERS_F_4:
- gSaveContext.save.weekEventReg[74] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_74_08);
break;
}
- gSaveContext.save.weekEventReg[73] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_73_40);
}
switch (sp2A) {
@@ -418,7 +420,7 @@ void func_80C03FAC(EnBombers* this, PlayState* play) {
break;
case 1:
- func_80151938(play, this->actor.textId);
+ Message_ContinueTextbox(play, this->actor.textId);
break;
}
}
@@ -447,7 +449,7 @@ void func_80C04354(EnBombers* this, PlayState* play) {
void func_80C043C8(EnBombers* this, PlayState* play) {
Math_SmoothStepToS(&this->unk_288, this->unk_28E, 1, 0x3E8, 0);
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80C042F8(this);
}
}
@@ -485,7 +487,9 @@ void EnBombers_Update(Actor* thisx, PlayState* play) {
}
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
this->actor.uncullZoneForward = 500.0f;
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
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 538b0d8b5..85c5ecdb3 100644
--- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h
+++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h
@@ -50,6 +50,4 @@ typedef struct EnBombers {
/* 0x2C8 */ ColliderCylinder collider;
} EnBombers; // size = 0x314
-extern const ActorInit En_Bombers_InitVars;
-
#endif // Z_EN_BOMBERS_H
diff --git a/src/overlays/actors/ovl_En_Bombers2/overlay.cfg b/src/overlays/actors/ovl_En_Bombers2/overlay.cfg
deleted file mode 100644
index 6cbb956fe..000000000
--- a/src/overlays/actors/ovl_En_Bombers2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Bombers2
-z_en_bombers2.c
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 9f70629e6..b47a9630f 100644
--- a/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c
+++ b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c
@@ -23,7 +23,7 @@ void EnBombers2_ChangeAnim(EnBombers2* this, s32 animIndex, f32 playSpeed);
void func_80C04D00(EnBombers2* this);
void func_80C050B8(EnBombers2* this, PlayState* play);
-const ActorInit En_Bombers2_InitVars = {
+ActorInit En_Bombers2_InitVars = {
ACTOR_EN_BOMBERS2,
ACTORCAT_NPC,
FLAGS,
@@ -94,15 +94,16 @@ void EnBombers2_Init(Actor* thisx, PlayState* play) {
this->jointTable, OBJECT_CS_LIMB_MAX);
this->actor.targetMode = 6;
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
- if ((gSaveContext.save.weekEventReg[73] & 0x80) || (gSaveContext.save.entrance == ENTRANCE(EAST_CLOCK_TOWN, 2))) {
+
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_80) || (gSaveContext.save.entrance == ENTRANCE(EAST_CLOCK_TOWN, 2))) {
this->actor.world.pos.x += Math_SinS(this->actor.home.rot.y + 0xC100) * 50.0f;
cos = Math_CosS(this->actor.home.rot.y + 0xC100) * 50.0f;
this->unk_2AC = 1;
this->actor.world.pos.z += cos;
}
- this->cutscene = this->actor.cutscene;
- if (this->cutscene == 0) {
- Actor_MarkForDeath(&this->actor);
+ this->csId = this->actor.csId;
+ if (this->csId == 0) {
+ Actor_Kill(&this->actor);
}
func_80C04B40(this);
}
@@ -165,7 +166,7 @@ void func_80C04BA0(EnBombers2* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->unk_2B6 = this->actor.world.rot.y;
- gSaveContext.save.weekEventReg[86] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_86_02);
func_80C04D00(this);
return;
}
@@ -219,7 +220,8 @@ void func_80C04D8C(EnBombers2* this, PlayState* play) {
s32 correctDigits;
for (i = 0; i < ARRAY_COUNT(this->correctDigitSlots); i++) {
- if (!(this->correctDigitSlots[i]) && (play->msgCtx.unk12054[i] == gSaveContext.save.bomberCode[i])) {
+ if (!(this->correctDigitSlots[i]) &&
+ (play->msgCtx.unk12054[i] == gSaveContext.save.saveInfo.bomberCode[i])) {
this->correctDigitSlots[i] = true;
}
}
@@ -232,15 +234,15 @@ void func_80C04D8C(EnBombers2* this, PlayState* play) {
if (correctDigits >= 5) {
this->textIdIndex = 6;
this->actor.textId = sTextIds[this->textIdIndex];
- func_80151938(play, this->actor.textId);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_PIECE_OF_HEART);
+ Message_ContinueTextbox(play, this->actor.textId);
+ Actor_PlaySfx(&this->actor, NA_SE_SY_PIECE_OF_HEART);
this->talkState = TEXT_STATE_5;
return;
}
}
if (Text_GetFaceReaction(play, 0x15) != 0) {
this->unk_28E = 0;
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80C04B40(this);
} else {
s32 j;
@@ -251,13 +253,13 @@ void func_80C04D8C(EnBombers2* this, PlayState* play) {
case 5:
case 7:
this->unk_28E = 0;
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80C04B40(this);
break;
case 2:
this->textIdIndex = 3;
this->actor.textId = sTextIds[this->textIdIndex];
- func_80151938(play, this->actor.textId);
+ Message_ContinueTextbox(play, this->actor.textId);
this->talkState = TEXT_STATE_15;
break;
case 3:
@@ -265,15 +267,15 @@ void func_80C04D8C(EnBombers2* this, PlayState* play) {
this->correctDigitSlots[j] = false;
}
this->textIdIndex = 4;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_ERROR);
+ Actor_PlaySfx(&this->actor, NA_SE_SY_ERROR);
this->actor.textId = sTextIds[this->textIdIndex];
- func_80151938(play, this->actor.textId);
+ Message_ContinueTextbox(play, this->actor.textId);
this->talkState = TEXT_STATE_5;
break;
case 4:
this->textIdIndex = 5;
this->actor.textId = sTextIds[this->textIdIndex];
- func_80151938(play, this->actor.textId);
+ Message_ContinueTextbox(play, this->actor.textId);
this->talkState = TEXT_STATE_5;
break;
case 6:
@@ -307,13 +309,13 @@ void func_80C050B8(EnBombers2* this, PlayState* play) {
void func_80C0520C(EnBombers2* this, PlayState* play) {
if (this->unk_2A8 == 0) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->cutscene);
- } else if (ActorCutscene_GetCanPlayNext(this->cutscene) == 0) {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csId);
+ } else if (!CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_Queue(this->csId);
} else {
- ActorCutscene_StartAndSetUnkLinkFields(this->cutscene, &this->actor);
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->actor);
this->unk_2A8 = 1;
}
} else {
@@ -321,16 +323,16 @@ void func_80C0520C(EnBombers2* this, PlayState* play) {
if ((fabsf(this->unk_29C.x - this->actor.world.pos.x) < 3.0f) &&
(fabsf(this->unk_29C.z - this->actor.world.pos.z) < 3.0f)) {
this->unk_2B6 = this->actor.yawTowardsPlayer;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (fabsf(this->actor.world.rot.y - this->actor.yawTowardsPlayer) < 100.0f) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->talkState = TEXT_STATE_5;
this->textIdIndex = 7;
EnBombers2_ChangeAnim(this, 6, 1.0f);
this->unk_2A8 = 0;
this->unk_2C0 = 1;
- gSaveContext.save.weekEventReg[73] |= 0x80;
- ActorCutscene_Stop(this->cutscene);
+ SET_WEEKEVENTREG(WEEKEVENTREG_73_80);
+ CutsceneManager_Stop(this->csId);
this->unk_2AC = 1;
this->actor.textId = sTextIds[this->textIdIndex];
Message_StartTextbox(play, this->actor.textId, &this->actor);
@@ -356,7 +358,7 @@ void EnBombers2_Update(Actor* thisx, PlayState* play) {
if ((this->animIndex == 2) &&
(Animation_OnFrame(&this->skelAnime, 9.0f) || Animation_OnFrame(&this->skelAnime, 10.0f) ||
Animation_OnFrame(&this->skelAnime, 17.0f) || Animation_OnFrame(&this->skelAnime, 18.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOMBERS_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_WALK);
}
this->actor.shape.rot.y = this->actor.world.rot.y;
if (this->unk_2C0 != 2) {
@@ -399,7 +401,9 @@ void EnBombers2_Update(Actor* thisx, PlayState* play) {
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
if (this->unk_2AC == 0) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
}
Math_Vec3f_Copy(&this->actor.world.pos, &sp34);
}
diff --git a/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.h b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.h
index 0a62fd704..9e6f6b577 100644
--- a/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.h
+++ b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.h
@@ -27,7 +27,7 @@ typedef struct EnBombers2 {
/* 0x2A8 */ s32 unk_2A8;
/* 0x2AC */ u8 unk_2AC;
/* 0x2AE */ s16 animIndex;
- /* 0x2B0 */ s16 cutscene;
+ /* 0x2B0 */ s16 csId;
/* 0x2B2 */ s16 unk_2B2;
/* 0x2B4 */ s16 unk_2B4;
/* 0x2B6 */ s16 unk_2B6;
@@ -41,6 +41,4 @@ typedef struct EnBombers2 {
/* 0x2D0 */ ColliderCylinder collider;
} EnBombers2; // size = 0x31C
-extern const ActorInit En_Bombers2_InitVars;
-
#endif // Z_EN_BOMBERS2_H
diff --git a/src/overlays/actors/ovl_En_Bombf/overlay.cfg b/src/overlays/actors/ovl_En_Bombf/overlay.cfg
deleted file mode 100644
index 831b98c2f..000000000
--- a/src/overlays/actors/ovl_En_Bombf/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Bombf
-z_en_bombf.c
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 4eb0ea456..2493d819b 100644
--- a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c
+++ b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c
@@ -24,7 +24,7 @@ void func_808AEE3C(EnBombf* this, PlayState* play);
void func_808AEF68(EnBombf* this, PlayState* play);
void func_808AEFD4(EnBombf* this, PlayState* play);
-const ActorInit En_Bombf_InitVars = {
+ActorInit En_Bombf_InitVars = {
ACTOR_EN_BOMBF,
ACTORCAT_PROP,
FLAGS,
@@ -156,19 +156,19 @@ void func_808AEAE0(EnBombf* this, PlayState* play) {
func_800B8C20(&this->actor, &bombf->actor, play);
this->timer = 180;
this->unk_204 = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_PL_PULL_UP_ROCK);
+ Actor_PlaySfx(&this->actor, NA_SE_PL_PULL_UP_ROCK);
this->actor.flags &= ~ACTOR_FLAG_1;
} else {
player->actor.child = NULL;
player->heldActor = NULL;
player->interactRangeActor = NULL;
this->actor.parent = NULL;
- player->stateFlags1 &= ~0x800;
+ player->stateFlags1 &= ~PLAYER_STATE1_800;
}
} else if ((this->colliderCylinder.base.acFlags & AC_HIT) &&
((this->colliderCylinder.info.acHitInfo->toucher.dmgFlags & 0x13828) ||
((this->colliderCylinder.info.acHitInfo->toucher.dmgFlags & 0x200) &&
- (player->transformation == PLAYER_FORM_GORON) && (player->actor.speedXZ > 15.0f)))) {
+ (player->transformation == PLAYER_FORM_GORON) && (player->actor.speed > 15.0f)))) {
this->colliderCylinder.base.acFlags &= ~AC_HIT;
if (this->colliderCylinder.base.ac->category != ACTORCAT_BOSS) {
bombf = (EnBombf*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOMBF, this->actor.world.pos.x,
@@ -193,14 +193,14 @@ void func_808AEAE0(EnBombf* this, PlayState* play) {
}
} else {
if (!Actor_HasParent(&this->actor, play)) {
- Actor_LiftActor(&this->actor, play);
+ Actor_OfferCarry(&this->actor, play);
return;
}
player->actor.child = NULL;
player->heldActor = NULL;
player->interactRangeActor = NULL;
this->actor.parent = NULL;
- player->stateFlags1 &= ~0x800;
+ player->stateFlags1 &= ~PLAYER_STATE1_800;
this->actor.world.pos = this->actor.home.pos;
}
}
@@ -217,7 +217,7 @@ void func_808AEAE0(EnBombf* this, PlayState* play) {
player->heldActor = NULL;
player->interactRangeActor = NULL;
this->actor.parent = NULL;
- player->stateFlags1 &= ~0x800;
+ player->stateFlags1 &= ~PLAYER_STATE1_800;
this->actor.world.pos = this->actor.home.pos;
}
}
@@ -232,27 +232,27 @@ void func_808AEE3C(EnBombf* this, PlayState* play) {
}
this->unk_204 = 1.0f;
- if (!(this->actor.bgCheckFlags & 1)) {
- Math_SmoothStepToF(&this->actor.speedXZ, 0.0f, 1.0f, 0.025f, 0.0f);
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ Math_SmoothStepToF(&this->actor.speed, 0.0f, 1.0f, 0.025f, 0.0f);
return;
}
- Math_SmoothStepToF(&this->actor.speedXZ, 0.0f, 1.0f, 1.5f, 0.0f);
- if (this->actor.bgCheckFlags & 2) {
+ Math_SmoothStepToF(&this->actor.speed, 0.0f, 1.0f, 1.5f, 0.0f);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
func_800B8EF4(play, &this->actor);
if (this->actor.velocity.y < -6.0f) {
this->actor.velocity.y *= -0.3f;
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
}
} else if (this->timer >= 4) {
- Actor_LiftActor(&this->actor, play);
+ Actor_OfferCarry(&this->actor, play);
}
}
void func_808AEF68(EnBombf* this, PlayState* play) {
if (Actor_HasNoParent(&this->actor, play)) {
EnBombf_SetupAction(this, func_808AEE3C);
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
func_808AEE3C(this, play);
} else {
this->actor.velocity.y = 0.0f;
@@ -299,13 +299,13 @@ void func_808AEFD4(EnBombf* this, PlayState* play) {
if (this->timer == 0) {
Player* player = GET_PLAYER(play);
- if ((player->stateFlags1 & 0x800) && (&this->actor == player->heldActor)) {
+ if ((player->stateFlags1 & PLAYER_STATE1_800) && (&this->actor == player->heldActor)) {
player->actor.child = NULL;
player->heldActor = NULL;
player->interactRangeActor = NULL;
- player->stateFlags1 &= ~0x800;
+ player->stateFlags1 &= ~PLAYER_STATE1_800;
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -336,29 +336,33 @@ void EnBombf_Update(Actor* thisx, PlayState* play) {
if (this->actor.gravity != 0.0f) {
DREG(6) = 1;
- Actor_UpdateBgCheckInfo(play, &this->actor, 5.0f, 10.0f, 0.0f, 0x1F);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 5.0f, 10.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 |
+ UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10);
DREG(6) = 0;
}
if (ENBOMBF_GET(&this->actor) == ENBOMBF_0) {
- if ((this->actor.velocity.y > 0.0f) && (this->actor.bgCheckFlags & 0x10)) {
+ if ((this->actor.velocity.y > 0.0f) && (this->actor.bgCheckFlags & BGCHECKFLAG_CEILING)) {
this->actor.velocity.y = -this->actor.velocity.y;
}
- if ((this->actor.speedXZ != 0.0f) && (this->actor.bgCheckFlags & 8)) {
+ if ((this->actor.speed != 0.0f) && (this->actor.bgCheckFlags & BGCHECKFLAG_WALL)) {
s16 yDiff = BINANG_SUB(this->actor.wallYaw, this->actor.world.rot.y);
if (ABS_ALT(yDiff) > 0x4000) {
this->actor.world.rot.y =
BINANG_SUB(this->actor.wallYaw - this->actor.world.rot.y + this->actor.wallYaw, 0x8000);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOMB_BOUND);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BOMB_BOUND);
Actor_MoveWithGravity(&this->actor);
DREG(6) = 1;
- Actor_UpdateBgCheckInfo(play, &this->actor, 5.0f, 10.0f, 0.0f, 0x1F);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 5.0f, 10.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 |
+ UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10);
DREG(6) = 0;
- this->actor.speedXZ *= 0.7f;
- this->actor.bgCheckFlags &= ~8;
+ this->actor.speed *= 0.7f;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_WALL;
}
if ((this->colliderCylinder.base.acFlags & AC_HIT) ||
@@ -378,7 +382,7 @@ void EnBombf_Update(Actor* thisx, PlayState* play) {
if ((play->gameplayFrames % 2) == 0) {
EffectSsGSpk_SpawnFuse(play, &this->actor, &sp68, &sp8C, &sp74);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_BOMB_IGNIT - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_BOMB_IGNIT - SFX_FLAG);
sp68.y += 3.0f;
func_800B0DE0(play, &sp68, &sp8C, &sp5C, &sp58, &sp58, 0x32, 5);
}
@@ -407,7 +411,7 @@ void EnBombf_Update(Actor* thisx, PlayState* play) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, sp68.x, sp68.y, sp68.z, 0, 0, 0,
CLEAR_TAG_SMALL_EXPLOSION);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_BOMB_EXPLOSION);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_BOMB_EXPLOSION);
play->envCtx.lightSettings.diffuseColor1[0] = play->envCtx.lightSettings.diffuseColor1[1] =
play->envCtx.lightSettings.diffuseColor1[2] = 250;
@@ -439,24 +443,27 @@ void EnBombf_Update(Actor* thisx, PlayState* play) {
if ((this->actor.scale.x >= 0.01f) && (ENBOMBF_GET(&this->actor) != ENBOMBF_1)) {
if (this->actor.depthInWater >= 20.0f) {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 30, NA_SE_IT_BOMB_UNEXPLOSION);
- Actor_MarkForDeath(&this->actor);
- } else if (this->actor.bgCheckFlags & 0x40) {
- this->actor.bgCheckFlags &= ~0x40;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOMB_DROP_WATER);
+ Actor_Kill(&this->actor);
+ return;
+ }
+
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) {
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_WATER_TOUCH;
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BOMB_DROP_WATER);
}
}
}
Gfx* func_808AF86C(GraphicsContext* gfxCtx, PlayState* play) {
- Gfx* head = GRAPH_ALLOC(gfxCtx, sizeof(Gfx) * 6);
- Gfx* gfx = head;
+ Gfx* gfxHead = GRAPH_ALLOC(gfxCtx, 5 * sizeof(Gfx));
+ Gfx* gfx = gfxHead;
Matrix_ReplaceRotation(&play->billboardMtxF);
gSPMatrix(gfx++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPEndDisplayList(gfx++);
- return head;
+ return gfxHead;
}
void EnBombf_Draw(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.h b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.h
index 18a2a32ed..55b7f7bae 100644
--- a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.h
+++ b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.h
@@ -26,6 +26,4 @@ typedef struct EnBombf {
/* 0x204 */ f32 unk_204;
} EnBombf; // size = 0x208
-extern const ActorInit En_Bombf_InitVars;
-
#endif // Z_EN_BOMBF_H
diff --git a/src/overlays/actors/ovl_En_Bomjima/overlay.cfg b/src/overlays/actors/ovl_En_Bomjima/overlay.cfg
deleted file mode 100644
index 61e77897f..000000000
--- a/src/overlays/actors/ovl_En_Bomjima/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Bomjima
-z_en_bomjima.c
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 48b953ffe..aad6d9bc3 100644
--- a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c
+++ b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c
@@ -53,7 +53,7 @@ typedef enum EN_BOMJIMA_ACTION {
static s32 D_80C009F0 = 0;
static s32 D_80C009F4 = 0;
-const ActorInit En_Bomjima_InitVars = {
+ActorInit En_Bomjima_InitVars = {
ACTOR_EN_BOMJIMA,
ACTORCAT_NPC,
FLAGS,
@@ -119,7 +119,7 @@ s16 D_80C00AF8[] = {
void EnBomjima_Init(Actor* thisx, PlayState* play) {
EnBomjima* this = THIS;
- s32 cs;
+ s32 csId;
s32 i;
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
@@ -128,19 +128,19 @@ void EnBomjima_Init(Actor* thisx, PlayState* play) {
SkelAnime_InitFlex(play, &this->skelAnime, &object_cs_Skel_00F82C, &gBomberIdleAnim, this->jointTable,
this->morphTable, OBJECT_CS_LIMB_MAX);
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
- gSaveContext.save.weekEventReg[83] &= (u8)~4;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_83_04);
this->actor.targetMode = 0;
this->unk_2E6 = ENBOMJIMA_GET_F0(&this->actor);
this->unk_2E4 = ENBOMJIMA_GET_F(&this->actor);
Actor_SetScale(&this->actor, 0.01f);
if (this->unk_2E6 == 0) {
- cs = this->actor.cutscene;
+ csId = this->actor.csId;
i = 0;
- while (cs != -1) {
+ while (csId != CS_ID_NONE) {
// clang-format off
- this->cutscenes[i] = cs; cs = ActorCutscene_GetAdditionalCutscene(cs);
+ this->csIdList[i] = csId; csId = CutsceneManager_GetAdditionalCsId(csId);
// clang-format on
i++;
}
@@ -150,9 +150,9 @@ void EnBomjima_Init(Actor* thisx, PlayState* play) {
func_80BFFCFC(this);
}
- if ((gSaveContext.save.weekEventReg[75] & 0x40) || (gSaveContext.save.weekEventReg[73] & 0x10) ||
- (gSaveContext.save.weekEventReg[85] & 2)) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_40) || CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10) ||
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02)) {
+ Actor_Kill(&this->actor);
}
}
@@ -177,12 +177,12 @@ void func_80BFE32C(EnBomjima* this, PlayState* play, s32 arg2) {
case 0:
if (player->transformation == PLAYER_FORM_DEKU) {
this->actor.textId = 0x759;
- if (!(gSaveContext.save.weekEventReg[73] & 0x20)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_73_20)) {
this->actor.textId = 0x708;
}
} else if (player->transformation == PLAYER_FORM_HUMAN) {
this->actor.textId = 0x75A;
- if (!(gSaveContext.save.weekEventReg[84] & 0x80)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_84_80)) {
this->actor.textId = 0x719;
}
} else if ((this->unk_2C8 == 1) || (this->unk_2C8 == 2)) {
@@ -219,21 +219,21 @@ void func_80BFE524(EnBomjima* this) {
if ((this->animIndex == 5) &&
(Animation_OnFrame(&this->skelAnime, 9.0f) || Animation_OnFrame(&this->skelAnime, 10.0f) ||
Animation_OnFrame(&this->skelAnime, 17.0f) || Animation_OnFrame(&this->skelAnime, 18.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOMBERS_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_WALK);
}
if ((this->animIndex == 18) &&
(Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 2.0f) ||
Animation_OnFrame(&this->skelAnime, 4.0f) || Animation_OnFrame(&this->skelAnime, 6.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOMBERS_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_WALK);
}
if ((this->animIndex == 15) && Animation_OnFrame(&this->skelAnime, 15.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOMBERS_LAND);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_LAND);
}
if ((this->animIndex == 6) && Animation_OnFrame(&this->skelAnime, 8.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOMBERS_LAND);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_LAND);
}
}
@@ -340,8 +340,8 @@ void func_80BFEA94(EnBomjima* this, PlayState* play) {
this->bombal = (EnBombal*)actor;
Math_Vec3f_Copy(&this->unk_2B0, &actor->world.pos);
- if (this->bombalCutscene == 0) {
- this->bombalCutscene = this->bombal->actor.cutscene;
+ if (this->bombalCsId == 0) {
+ this->bombalCsId = this->bombal->actor.csId;
}
func_80BFEB1C(this);
break;
@@ -362,18 +362,18 @@ void func_80BFEB64(EnBomjima* this, PlayState* play) {
func_80BFE32C(this, play, 0);
if (player->transformation == PLAYER_FORM_DEKU) {
- if (gSaveContext.save.weekEventReg[73] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_20)) {
this->unk_2C8 = 3;
func_80BFE32C(this, play, 3);
- } else if (gSaveContext.save.weekEventReg[77] & 2) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_02)) {
this->unk_2C8 = 11;
func_80BFE32C(this, play, 2);
}
} else if (player->transformation == PLAYER_FORM_HUMAN) {
- if (gSaveContext.save.weekEventReg[84] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_80)) {
this->unk_2C8 = 0;
func_80BFE32C(this, play, 3);
- } else if (gSaveContext.save.weekEventReg[85] & 1) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_85_01)) {
this->unk_2C8 = 11;
func_80BFE32C(this, play, 2);
}
@@ -389,7 +389,7 @@ void func_80BFEB64(EnBomjima* this, PlayState* play) {
return;
}
- if (ActorCutscene_GetCurrentIndex() == -1) {
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_NONE) {
func_800B8614(&this->actor, play, 70.0f);
}
@@ -409,7 +409,7 @@ void func_80BFEB64(EnBomjima* this, PlayState* play) {
this->unk_2DC = Math_Vec3f_Yaw(&this->actor.world.pos, &this->bombal->actor.world.pos);
if (Animation_OnFrame(&this->skelAnime, 19.0f)) {
this->unk_2C0 = 5;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOMBERS_SHOT_BREATH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_SHOT_BREATH);
}
if (this->unk_2C0 == 1) {
@@ -465,17 +465,17 @@ void func_80BFEFF0(EnBomjima* this) {
void func_80BFF03C(EnBomjima* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->cutscenes[0]);
- } else if (!ActorCutscene_GetCanPlayNext(this->cutscenes[0])) {
- ActorCutscene_SetIntentToPlay(this->cutscenes[0]);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csIdList[0]);
+ } else if (!CutsceneManager_IsNext(this->csIdList[0])) {
+ CutsceneManager_Queue(this->csIdList[0]);
} else {
- player->stateFlags1 &= ~0x20;
- gSaveContext.save.weekEventReg[83] &= (u8)~4;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_83_04);
this->actor.world.rot.y = Camera_GetCamDirYaw(GET_ACTIVE_CAM(play));
this->unk_2DC = Camera_GetCamDirYaw(GET_ACTIVE_CAM(play));
- ActorCutscene_StartAndSetUnkLinkFields(this->cutscenes[0], &this->actor);
+ CutsceneManager_StartWithPlayerCs(this->csIdList[0], &this->actor);
func_80BFF120(this);
}
}
@@ -494,7 +494,7 @@ void func_80BFF174(EnBomjima* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (this->cutsceneTimer == 1) {
- ActorCutscene_Stop(this->cutscenes[0]);
+ CutsceneManager_Stop(this->csIdList[0]);
this->cutsceneEnded = true;
}
@@ -518,11 +518,11 @@ void func_80BFF174(EnBomjima* this, PlayState* play) {
}
if (player->transformation == PLAYER_FORM_DEKU) {
- if (gSaveContext.save.weekEventReg[73] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_20)) {
this->unk_2C8 = 3;
func_80BFE32C(this, play, 3);
} else {
- if (!(gSaveContext.save.weekEventReg[77] & 2)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_77_02)) {
if (this->unk_2E8 == 0) {
this->unk_2C8 = 4;
} else {
@@ -534,11 +534,11 @@ void func_80BFF174(EnBomjima* this, PlayState* play) {
func_80BFE32C(this, play, 2);
}
} else if (player->transformation == PLAYER_FORM_HUMAN) {
- if (gSaveContext.save.weekEventReg[84] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_80)) {
this->unk_2C8 = 0;
func_80BFE32C(this, play, 3);
} else {
- if (!(gSaveContext.save.weekEventReg[85] & 1)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_85_01)) {
if (this->unk_2EA == 0) {
this->unk_2C8 = 4;
} else {
@@ -576,11 +576,11 @@ void func_80BFF430(EnBomjima* this, PlayState* play) {
if (bombal != NULL) {
bombal->scale = 0.0f;
- bombal->cutscene = this->bombalCutscene;
+ bombal->csId = this->bombalCsId;
Actor_ChangeFocus(&this->actor, play, &bombal->actor);
- gSaveContext.save.weekEventReg[83] &= (u8)~4;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_83_04);
func_80BFE65C(this);
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80BFEA94;
}
}
@@ -594,7 +594,7 @@ void func_80BFF4F4(EnBomjima* this) {
void func_80BFF52C(EnBomjima* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
if (play->msgCtx.choiceIndex == 0) {
Player* player = GET_PLAYER(play);
@@ -608,7 +608,7 @@ void func_80BFF52C(EnBomjima* this, PlayState* play) {
} else {
this->actor.textId = D_80C00A70[this->unk_2C8];
}
- func_80151938(play, this->actor.textId);
+ Message_ContinueTextbox(play, this->actor.textId);
play_sound(NA_SE_SY_FOUND);
func_80BFE494(this, 15, 1.0f);
this->action = EN_BOMJIMA_ACTION_5;
@@ -626,7 +626,7 @@ void func_80BFF52C(EnBomjima* this, PlayState* play) {
this->actor.textId = D_80C00A70[this->unk_2C8];
this->unk_2EA = 1;
}
- func_80151938(play, this->actor.textId);
+ Message_ContinueTextbox(play, this->actor.textId);
func_80C00234(this);
}
}
@@ -637,7 +637,7 @@ void func_80BFF6CC(EnBomjima* this, PlayState* play) {
if (this->animLastFrame <= curFrame) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80BFE494(this, 1, 1.0f);
this->actionFunc = func_80BFF754;
}
@@ -653,14 +653,14 @@ void func_80BFF754(EnBomjima* this, PlayState* play) {
f32 y;
f32 z;
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->cutscenes[1]);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csIdList[1]);
return;
}
- if (!ActorCutscene_GetCanPlayNext(this->cutscenes[1])) {
- ActorCutscene_SetIntentToPlay(this->cutscenes[1]);
+ if (!CutsceneManager_IsNext(this->csIdList[1])) {
+ CutsceneManager_Queue(this->csIdList[1]);
return;
}
@@ -690,7 +690,7 @@ void func_80BFF754(EnBomjima* this, PlayState* play) {
}
D_80C009F0 = 0;
- ActorCutscene_StartAndSetUnkLinkFields(this->cutscenes[1], &this->actor);
+ CutsceneManager_StartWithPlayerCs(this->csIdList[1], &this->actor);
this->actionFunc = func_80BFF9B0;
}
@@ -701,31 +701,31 @@ void func_80BFF9B0(EnBomjima* this, PlayState* play) {
D_80C009F0 = 0;
this->unk_2C8 = 9;
if (player->transformation == PLAYER_FORM_DEKU) {
- gSaveContext.save.weekEventReg[73] |= 0x10;
- gSaveContext.save.weekEventReg[77] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_73_10);
+ SET_WEEKEVENTREG(WEEKEVENTREG_77_02);
} else {
- gSaveContext.save.weekEventReg[85] |= 2;
- gSaveContext.save.weekEventReg[85] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_85_02);
+ SET_WEEKEVENTREG(WEEKEVENTREG_85_01);
}
- gSaveContext.save.weekEventReg[11] &= (u8)~1;
- gSaveContext.save.weekEventReg[11] &= (u8)~2;
- gSaveContext.save.weekEventReg[11] &= (u8)~4;
- gSaveContext.save.weekEventReg[11] &= (u8)~8;
- gSaveContext.save.weekEventReg[11] &= (u8)~0x10;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_11_01);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_11_02);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_11_04);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_11_08);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_11_10);
- gSaveContext.save.weekEventReg[76] &= (u8)~1;
- gSaveContext.save.weekEventReg[76] &= (u8)~2;
- gSaveContext.save.weekEventReg[76] &= (u8)~4;
- gSaveContext.save.weekEventReg[76] &= (u8)~8;
- gSaveContext.save.weekEventReg[76] &= (u8)~0x10;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_76_01);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_76_02);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_76_04);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_76_08);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_76_10);
- gSaveContext.save.bombersCaughtNum = 0;
- gSaveContext.save.bombersCaughtOrder[0] = 0;
- gSaveContext.save.bombersCaughtOrder[1] = 0;
- gSaveContext.save.bombersCaughtOrder[2] = 0;
- gSaveContext.save.bombersCaughtOrder[3] = 0;
- gSaveContext.save.bombersCaughtOrder[4] = 0;
+ gSaveContext.save.saveInfo.bombersCaughtNum = 0;
+ gSaveContext.save.saveInfo.bombersCaughtOrder[0] = 0;
+ gSaveContext.save.saveInfo.bombersCaughtOrder[1] = 0;
+ gSaveContext.save.saveInfo.bombersCaughtOrder[2] = 0;
+ gSaveContext.save.saveInfo.bombersCaughtOrder[3] = 0;
+ gSaveContext.save.saveInfo.bombersCaughtOrder[4] = 0;
func_80BFE494(this, 3, 1.0f);
this->unk_2C8 = 9;
@@ -735,14 +735,14 @@ void func_80BFF9B0(EnBomjima* this, PlayState* play) {
} else {
this->actor.textId = D_80C00A70[this->unk_2C8];
}
- func_80151938(play, this->actor.textId);
+ Message_ContinueTextbox(play, this->actor.textId);
this->actionFunc = func_80BFFB40;
}
}
void func_80BFFB40(EnBomjima* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80BFE494(this, 15, 1.0f);
D_80C009F0 = 100;
this->unk_2DC = 0;
@@ -768,13 +768,13 @@ void func_80BFFBC4(EnBomjima* this, PlayState* play) {
Math_SmoothStepToS(&this->unk_290, this->unk_2DC, 1, 5000, 0);
if (D_80C009F0 >= 104) {
D_80C009F0 = 0;
- func_801477B4(play);
+ Message_CloseTextbox(play);
play->nextEntrance = Entrance_CreateFromSpawn(6);
gSaveContext.nextCutsceneIndex = 0;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_86;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
- ActorCutscene_Stop(this->cutscenes[1]);
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
+ CutsceneManager_Stop(this->csIdList[1]);
}
}
@@ -848,7 +848,7 @@ void func_80BFFF54(EnBomjima* this, PlayState* play) {
if (this->animIndex == 8) {
if ((D_80C009F4 == 1) && Animation_OnFrame(&this->skelAnime, 7.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_HUMAN_BOUND);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_HUMAN_BOUND);
D_80C009F4 = 2;
}
@@ -935,8 +935,8 @@ void func_80C00284(EnBomjima* this, PlayState* play) {
if ((this->action == EN_BOMJIMA_ACTION_4) || (this->unk_2CA == 1) ||
((this->unk_2CA == 3) && (this->unk_2C8 >= 2))) {
this->unk_28E = 0;
- if (player->stateFlags1 & 0x20) {
- player->stateFlags1 &= ~0x20;
+ if (player->stateFlags1 & PLAYER_STATE1_20) {
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
}
if ((this->bombal == 0) || (this->bombal->actor.update == NULL) ||
@@ -944,13 +944,13 @@ void func_80C00284(EnBomjima* this, PlayState* play) {
func_80BFF3F0(this);
} else {
func_80BFE65C(this);
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80BFEA94;
}
return;
}
- func_801477B4(play);
+ Message_CloseTextbox(play);
switch (this->unk_2CA) {
case 0:
@@ -984,7 +984,7 @@ void func_80C00284(EnBomjima* this, PlayState* play) {
}
this->actor.textId = D_80C00A70[this->unk_2C8];
}
- func_80151938(play, this->actor.textId);
+ Message_ContinueTextbox(play, this->actor.textId);
if ((this->unk_2C8 == 7) || (this->unk_2C8 == 12)) {
func_80BFF4F4(this);
}
@@ -993,7 +993,7 @@ void func_80C00284(EnBomjima* this, PlayState* play) {
case 3:
this->unk_2C8++;
this->actor.textId = D_80C00A8C[this->unk_2C8];
- func_80151938(play, this->actor.textId);
+ Message_ContinueTextbox(play, this->actor.textId);
if (this->unk_2C8 >= 2) {
func_80BFE494(this, 17, 1.0f);
}
@@ -1044,7 +1044,9 @@ void EnBomjima_Update(Actor* thisx, PlayState* play) {
}
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
this->actor.uncullZoneForward = 500.0f;
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
diff --git a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.h b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.h
index 046e8813c..b8196b344 100644
--- a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.h
+++ b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.h
@@ -40,7 +40,7 @@ typedef struct EnBomjima {
/* 0x2CA */ s16 unk_2CA;
/* 0x2CC */ f32 animLastFrame;
/* 0x2D0 */ f32 unk_2D0;
- /* 0x2D4 */ s16 cutscenes[2];
+ /* 0x2D4 */ s16 csIdList[2];
/* 0x2D8 */ UNK_TYPE1 unk2D8[4]; // maybe a part of the above?
/* 0x2DC */ s16 unk_2DC;
/* 0x2DE */ s16 cutsceneEnded;
@@ -52,10 +52,8 @@ typedef struct EnBomjima {
/* 0x2EA */ s16 unk_2EA;
/* 0x2EC */ s32 animIndex;
/* 0x2F0 */ EnBombal* bombal;
- /* 0x2F4 */ s16 bombalCutscene;
+ /* 0x2F4 */ s16 bombalCsId;
/* 0x2F8 */ ColliderCylinder collider;
} EnBomjima; // size = 0x344
-extern const ActorInit En_Bomjima_InitVars;
-
#endif // Z_EN_BOMJIMA_H
diff --git a/src/overlays/actors/ovl_En_Bomjimb/overlay.cfg b/src/overlays/actors/ovl_En_Bomjimb/overlay.cfg
deleted file mode 100644
index 3b2ee6496..000000000
--- a/src/overlays/actors/ovl_En_Bomjimb/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Bomjimb
-z_en_bomjimb.c
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 300d83958..7cc78d9cf 100644
--- a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c
+++ b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c
@@ -40,7 +40,7 @@ void func_80C02DAC(EnBomjimb* this, PlayState* play);
static Actor* D_80C03170 = NULL;
-const ActorInit En_Bomjimb_InitVars = {
+ActorInit En_Bomjimb_InitVars = {
ACTOR_EN_BOMJIMB,
ACTORCAT_NPC,
FLAGS,
@@ -115,48 +115,48 @@ void EnBomjimb_Init(Actor* thisx, PlayState* play) {
this->unk_2C6 = ENBOMJIMB_F0_0;
}
- if ((gSaveContext.save.weekEventReg[73] & 0x10) || (gSaveContext.save.weekEventReg[85] & 2)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10) || CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02)) {
switch (this->unk_2C8) {
case ENBOMJIMB_F_0:
- if (gSaveContext.save.weekEventReg[11] & 1) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_11_01)) {
+ Actor_Kill(&this->actor);
return;
}
break;
case ENBOMJIMB_F_1:
- if (gSaveContext.save.weekEventReg[11] & 2) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_11_02)) {
+ Actor_Kill(&this->actor);
return;
}
break;
case ENBOMJIMB_F_2:
- if (gSaveContext.save.weekEventReg[11] & 4) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_11_04)) {
+ Actor_Kill(&this->actor);
return;
}
break;
case ENBOMJIMB_F_3:
- if (gSaveContext.save.weekEventReg[11] & 8) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_11_08)) {
+ Actor_Kill(&this->actor);
return;
}
break;
case ENBOMJIMB_F_4:
- if (gSaveContext.save.weekEventReg[11] & 0x10) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_11_10)) {
+ Actor_Kill(&this->actor);
return;
}
break;
}
}
- if ((!(gSaveContext.save.weekEventReg[73] & 0x10) && !(gSaveContext.save.weekEventReg[85] & 2)) ||
- (gSaveContext.save.weekEventReg[75] & 0x40)) {
- Actor_MarkForDeath(&this->actor);
+ if ((!CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02)) ||
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_75_40)) {
+ Actor_Kill(&this->actor);
return;
}
@@ -185,20 +185,20 @@ void func_80C011CC(EnBomjimb* this) {
if ((this->unk_2DC == 5) &&
(Animation_OnFrame(&this->skelAnime, 9.0f) || Animation_OnFrame(&this->skelAnime, 10.0f) ||
Animation_OnFrame(&this->skelAnime, 17.0f) || Animation_OnFrame(&this->skelAnime, 18.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOMBERS_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_WALK);
}
if ((this->unk_2DC == 19) &&
(Animation_OnFrame(&this->skelAnime, 2.0f) || Animation_OnFrame(&this->skelAnime, 6.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOMBERS_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_WALK);
}
if ((this->unk_2DC == 18) && Animation_OnFrame(&this->skelAnime, 15.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOMBERS_LAND);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_LAND);
}
if ((this->unk_2DC == 7) && Animation_OnFrame(&this->skelAnime, 8.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOMBERS_LAND);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BOMBERS_LAND);
}
}
@@ -215,7 +215,7 @@ s32 func_80C012FC(EnBomjimb* this, PlayState* play) {
if (!Play_InCsMode(play) && (this->actor.xzDistToPlayer < 40.0f) &&
(fabsf(player->actor.world.pos.y - this->actor.world.pos.y) < 50.0f) && (play->msgCtx.msgLength == 0)) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
func_80C02740(this, play);
return true;
}
@@ -333,7 +333,7 @@ void func_80C014E4(EnBomjimb* this, PlayState* play) {
break;
}
- if (player->stateFlags3 != 0x1000000) {
+ if (player->stateFlags3 != PLAYER_STATE3_1000000) {
phi_f0 = 200.0f;
abs = ABS_ALT(BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.world.rot.y));
@@ -368,7 +368,7 @@ void func_80C01A24(EnBomjimb* this, PlayState* play) {
if ((this->unk_2E4 != NULL) && (this->unk_2E4->update != NULL)) {
((EnNiw*)this->unk_2E4)->unk2BC.z = 90000.0f;
}
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->unk_2E4 = NULL;
this->actor.gravity = -2.0f;
func_80C02108(this);
@@ -380,10 +380,10 @@ void func_80C01A24(EnBomjimb* this, PlayState* play) {
}
if (this->unk_2C0 != 0) {
- Math_ApproachF(&this->actor.speedXZ, 6.0f, 0.5f, 2.0f);
+ Math_ApproachF(&this->actor.speed, 6.0f, 0.5f, 2.0f);
}
- if ((this->unk_2C0 != 0) && !(this->actor.bgCheckFlags & 1)) {
+ if ((this->unk_2C0 != 0) && !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
func_80C01B40(this);
}
}
@@ -395,13 +395,13 @@ void func_80C01B40(EnBomjimb* this) {
}
void func_80C01B74(EnBomjimb* this, PlayState* play) {
- Math_ApproachF(&this->actor.speedXZ, 6.0f, 0.5f, 2.0f);
- if ((this->collider.base.acFlags & AC_HIT) || (this->actor.bgCheckFlags & 1)) {
+ Math_ApproachF(&this->actor.speed, 6.0f, 0.5f, 2.0f);
+ if ((this->collider.base.acFlags & AC_HIT) || (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
this->collider.base.acFlags &= ~AC_HIT;
if ((this->unk_2E4 != NULL) && (this->unk_2E4->update != NULL)) {
((EnNiw*)this->unk_2E4)->unk2BC.z = 90000.0f;
}
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->unk_2E4 = NULL;
this->actor.gravity = -2.0f;
func_80C02108(this);
@@ -419,7 +419,7 @@ void func_80C01C18(EnBomjimb* this, PlayState* play) {
this->unk_294.z = this->unk_2E4->world.pos.z;
}
}
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->unk_2CA = 2;
this->actionFunc = func_80C01CD0;
}
@@ -450,8 +450,8 @@ void func_80C01CD0(EnBomjimb* this, PlayState* play) {
this->actor.draw = NULL;
}
- if ((this->unk_2C0 == 0) && (this->unk_2E4->bgCheckFlags & 1)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_PUT_DOWN_WOODBOX);
+ if ((this->unk_2C0 == 0) && (this->unk_2E4->bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_PUT_DOWN_WOODBOX);
this->unk_2C0 = 1;
}
@@ -538,7 +538,7 @@ void func_80C0217C(EnBomjimb* this, PlayState* play) {
return;
}
- if (player->stateFlags3 == 0x1000000) {
+ if (player->stateFlags3 == PLAYER_STATE3_1000000) {
Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 1, 3000, 0);
func_80C01494(this);
return;
@@ -553,7 +553,7 @@ void func_80C0217C(EnBomjimb* this, PlayState* play) {
return;
}
- Math_ApproachF(&this->actor.speedXZ, 8.0f, 0.5f, 2.0f);
+ Math_ApproachF(&this->actor.speed, 8.0f, 0.5f, 2.0f);
Math_Vec3f_Copy(&sp74, &this->actor.world.pos);
sp74.x += Math_SinS(this->actor.world.rot.y) * 50.0f;
@@ -611,7 +611,7 @@ void func_80C0217C(EnBomjimb* this, PlayState* play) {
void func_80C0250C(EnBomjimb* this) {
func_80C0113C(this, 15, 1.0f);
this->unk_2D4 = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->unk_2D6 = BINANG_ROT180(this->actor.yawTowardsPlayer);
func_80C012E0(this);
this->unk_2CA = 6;
@@ -631,7 +631,7 @@ void func_80C02570(EnBomjimb* this, PlayState* play) {
this->unk_2D6 = BINANG_ROT180(this->actor.yawTowardsPlayer);
func_80C0113C(this, 19, 2.0f);
this->actionFunc = func_80C0217C;
- } else if ((player->stateFlags3 == 0x1000000) || (this->actor.xzDistToPlayer > 410.0f)) {
+ } else if ((player->stateFlags3 == PLAYER_STATE3_1000000) || (this->actor.xzDistToPlayer > 410.0f)) {
Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 1, 3000, 0);
func_80C01494(this);
}
@@ -640,7 +640,7 @@ void func_80C02570(EnBomjimb* this, PlayState* play) {
void func_80C0267C(EnBomjimb* this) {
func_80C012E0(this);
func_80C0113C(this, 8, 1.0f);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
this->unk_2AE = 40;
this->unk_2C2 = 0;
@@ -666,7 +666,7 @@ void func_80C02740(EnBomjimb* this, PlayState* play) {
if ((player->transformation != PLAYER_FORM_DEKU) && (player->transformation != PLAYER_FORM_HUMAN)) {
func_80C0113C(this, 17, 1.0f);
Message_StartTextbox(play, 0x72E, &this->actor);
- player->stateFlags1 |= 0x10000000;
+ player->stateFlags1 |= PLAYER_STATE1_10000000;
player->actor.freezeTimer = 3;
func_80C012E0(this);
this->unk_2CA = 9;
@@ -674,11 +674,11 @@ void func_80C02740(EnBomjimb* this, PlayState* play) {
return;
}
- if (((player->transformation == PLAYER_FORM_DEKU) && !(gSaveContext.save.weekEventReg[73] & 0x10)) ||
- ((player->transformation == PLAYER_FORM_HUMAN) && !(gSaveContext.save.weekEventReg[85] & 2))) {
+ if (((player->transformation == PLAYER_FORM_DEKU) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10)) ||
+ ((player->transformation == PLAYER_FORM_HUMAN) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02))) {
func_80C0113C(this, 17, 1.0f);
Message_StartTextbox(play, 0x72E, &this->actor);
- player->stateFlags1 |= 0x10000000;
+ player->stateFlags1 |= PLAYER_STATE1_10000000;
player->actor.freezeTimer = 3;
func_80C012E0(this);
this->unk_2CA = 9;
@@ -686,47 +686,48 @@ void func_80C02740(EnBomjimb* this, PlayState* play) {
return;
}
- Message_StartTextbox(play, D_80C03230[((void)0, gSaveContext.save.bombersCaughtNum)], &this->actor);
- gSaveContext.save.bombersCaughtOrder[((void)0, gSaveContext.save.bombersCaughtNum)] = this->unk_2C8 + 1;
- gSaveContext.save.bombersCaughtNum++;
+ Message_StartTextbox(play, D_80C03230[((void)0, gSaveContext.save.saveInfo.bombersCaughtNum)], &this->actor);
+ gSaveContext.save.saveInfo.bombersCaughtOrder[((void)0, gSaveContext.save.saveInfo.bombersCaughtNum)] =
+ this->unk_2C8 + 1;
+ gSaveContext.save.saveInfo.bombersCaughtNum++;
- if (gSaveContext.save.bombersCaughtNum > 4) {
+ if (gSaveContext.save.saveInfo.bombersCaughtNum > 4) {
Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_PIECE_OF_HEART);
+ Actor_PlaySfx(&this->actor, NA_SE_SY_PIECE_OF_HEART);
}
switch (this->unk_2C8) {
case ENBOMJIMB_F_0:
- gSaveContext.save.weekEventReg[76] |= 1;
- gSaveContext.save.weekEventReg[11] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_76_01);
+ SET_WEEKEVENTREG(WEEKEVENTREG_11_01);
break;
case ENBOMJIMB_F_1:
- gSaveContext.save.weekEventReg[76] |= 2;
- gSaveContext.save.weekEventReg[11] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_76_02);
+ SET_WEEKEVENTREG(WEEKEVENTREG_11_02);
break;
case ENBOMJIMB_F_2:
- gSaveContext.save.weekEventReg[76] |= 4;
- gSaveContext.save.weekEventReg[11] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_76_04);
+ SET_WEEKEVENTREG(WEEKEVENTREG_11_04);
break;
case ENBOMJIMB_F_3:
- gSaveContext.save.weekEventReg[76] |= 8;
- gSaveContext.save.weekEventReg[11] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_76_08);
+ SET_WEEKEVENTREG(WEEKEVENTREG_11_08);
break;
case ENBOMJIMB_F_4:
- gSaveContext.save.weekEventReg[76] |= 0x10;
- gSaveContext.save.weekEventReg[11] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_76_10);
+ SET_WEEKEVENTREG(WEEKEVENTREG_11_10);
break;
}
if (!Play_InCsMode(play)) {
Player* player = GET_PLAYER(play);
- player->stateFlags1 |= 0x10000000;
+ player->stateFlags1 |= PLAYER_STATE1_10000000;
player->actor.freezeTimer = 3;
}
this->unk_2CA = 8;
@@ -749,7 +750,7 @@ void func_80C02A14(EnBomjimb* this, PlayState* play) {
player->actor.freezeTimer = 3;
if (this->unk_2E0 == 0) {
if (Animation_OnFrame(&this->skelAnime, 7.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_HUMAN_BOUND);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_HUMAN_BOUND);
this->unk_2E0 = 1;
}
}
@@ -760,12 +761,12 @@ void func_80C02A14(EnBomjimb* this, PlayState* play) {
}
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
- if ((this->unk_2CA == 8) && (gSaveContext.save.bombersCaughtNum >= 5)) {
+ Message_CloseTextbox(play);
+ if ((this->unk_2CA == 8) && (gSaveContext.save.saveInfo.bombersCaughtNum >= 5)) {
func_80C02CA4(this, play);
} else {
if (this->unk_2CA == 8) {
- player->stateFlags1 &= ~0x10000000;
+ player->stateFlags1 &= ~PLAYER_STATE1_10000000;
}
func_80C01FD4(this);
}
@@ -779,9 +780,9 @@ void func_80C02BCC(EnBomjimb* this, PlayState* play) {
if (this->unk_2C0 == 0) {
player->actor.freezeTimer = 3;
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->unk_2C0 = 1;
- player->stateFlags1 &= ~0x10000000;
+ player->stateFlags1 &= ~PLAYER_STATE1_10000000;
}
} else if (this->actor.xzDistToPlayer > 200.0f) {
func_80C01494(this);
@@ -799,10 +800,10 @@ void func_80C02CA4(EnBomjimb* this, PlayState* play) {
gSaveContext.nextCutsceneIndex = 0;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_86;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
}
- gSaveContext.save.weekEventReg[75] |= 0x40;
- gSaveContext.save.weekEventReg[83] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_75_40);
+ SET_WEEKEVENTREG(WEEKEVENTREG_83_04);
this->actionFunc = func_80C02DAC;
}
@@ -840,7 +841,7 @@ void EnBomjimb_Update(Actor* thisx, PlayState* play2) {
if (this->unk_2CA == 0) {
if ((this->unk_2E4 != NULL) && (this->unk_2E4->update != NULL)) {
Math_Vec3f_Copy(&this->unk_2E4->world.pos, &this->actor.world.pos);
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->unk_2E4->world.pos.y = this->actor.world.pos.y + 35.0f;
} else {
this->unk_2E4->world.pos.y = this->actor.world.pos.y + 25.0f;
@@ -858,7 +859,9 @@ void EnBomjimb_Update(Actor* thisx, PlayState* play2) {
}
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
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 8b73ef972..f411f21a2 100644
--- a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.h
+++ b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.h
@@ -61,6 +61,4 @@ typedef struct EnBomjimb {
/* 0x2E8 */ ColliderCylinder collider;
} EnBomjimb; // size = 0x334
-extern const ActorInit En_Bomjimb_InitVars;
-
#endif // Z_EN_BOMJIMB_H
diff --git a/src/overlays/actors/ovl_En_Boom/overlay.cfg b/src/overlays/actors/ovl_En_Boom/overlay.cfg
deleted file mode 100644
index d0ff420fd..000000000
--- a/src/overlays/actors/ovl_En_Boom/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Boom
-z_en_boom.c
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 2c68e20f8..4abfad7b1 100644
--- a/src/overlays/actors/ovl_En_Boom/z_en_boom.c
+++ b/src/overlays/actors/ovl_En_Boom/z_en_boom.c
@@ -19,7 +19,7 @@ void EnBoom_Draw(Actor* thisx, PlayState* play);
void EnBoom_SetupAction(EnBoom* this, EnBoomActionFunc actionFunc);
void func_808A2918(EnBoom* this, PlayState* play);
-const ActorInit En_Boom_InitVars = {
+ActorInit En_Boom_InitVars = {
ACTOR_EN_BOOM,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -63,22 +63,23 @@ void EnBoom_SetupAction(EnBoom* this, EnBoomActionFunc actionFunc) {
void func_808A24DC(EnBoom* this, PlayState* play) {
WaterBox* sp54;
f32 sp50 = this->actor.world.pos.y;
- u16 sp4E = this->actor.bgCheckFlags & 0x20;
+ u16 sp4E = this->actor.bgCheckFlags & BGCHECKFLAG_WATER;
if (WaterBox_GetSurface1(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &sp50, &sp54) &&
(this->actor.world.pos.y < sp50)) {
Vec3f sp40;
- this->actor.bgCheckFlags |= 0x20;
+ this->actor.bgCheckFlags |= BGCHECKFLAG_WATER;
sp40.x = this->actor.world.pos.x;
sp40.y = this->actor.world.pos.y - 20.0f;
sp40.z = this->actor.world.pos.z;
EffectSsBubble_Spawn(play, &sp40, 20.0f, 10.0f, 20.0f, 0.13f);
} else {
- this->actor.bgCheckFlags &= ~0x20;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_WATER;
}
- if ((this->actor.bgCheckFlags & 0x40) && ((this->actor.bgCheckFlags & 0x20) != sp4E)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) &&
+ ((this->actor.bgCheckFlags & BGCHECKFLAG_WATER) != sp4E)) {
Vec3f sp34;
Math_Vec3f_Diff(&this->actor.world.pos, &this->actor.prevPos, &sp34);
@@ -95,14 +96,14 @@ void func_808A24DC(EnBoom* this, PlayState* play) {
EffectSsGSplash_Spawn(play, &sp34, NULL, NULL, 0, 300);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_DIVE_INTO_WATER_L);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_DIVE_INTO_WATER_L);
EffectSsGRipple_Spawn(play, &sp34, 100, 500, 0);
EffectSsGRipple_Spawn(play, &sp34, 100, 500, 4);
EffectSsGRipple_Spawn(play, &sp34, 100, 500, 8);
}
- this->actor.bgCheckFlags |= 0x40;
+ this->actor.bgCheckFlags |= BGCHECKFLAG_WATER_TOUCH;
}
void EnBoom_Init(Actor* thisx, PlayState* play) {
@@ -155,10 +156,10 @@ void EnBoom_Destroy(Actor* thisx, PlayState* play) {
temp->child = NULL;
} else {
player->boomerangActor = NULL;
- player->stateFlags1 &= ~0x2000000;
+ player->stateFlags1 &= ~PLAYER_STATE1_2000000;
}
}
- player->stateFlags3 |= 0x800000;
+ player->stateFlags3 |= PLAYER_STATE3_800000;
}
}
@@ -177,9 +178,9 @@ void func_808A2918(EnBoom* this, PlayState* play) {
sp7C = this->player;
if (sp7C != NULL) {
- sp72 = Actor_YawToPoint(&this->actor, &sp7C->focus.pos);
+ sp72 = Actor_WorldYawTowardPoint(&this->actor, &sp7C->focus.pos);
sp70 = this->actor.world.rot.y - sp72;
- sp6E = Actor_PitchToPoint(&this->actor, &sp7C->focus.pos);
+ sp6E = Actor_WorldPitchTowardPoint(&this->actor, &sp7C->focus.pos);
sp6C = this->actor.world.rot.x - sp6E;
sp64 = (200.0f - Math_Vec3f_DistXYZ(&this->actor.world.pos, &sp7C->focus.pos)) * 0.005f;
@@ -262,12 +263,12 @@ void func_808A2918(EnBoom* this, PlayState* play) {
Math_Vec3f_Copy(&sp7C->world.pos, &player->actor.world.pos);
if (sp7C->id == ACTOR_EN_ITEM00) {
sp7C->gravity = -0.9f;
- sp7C->bgCheckFlags &= ~3;
+ sp7C->bgCheckFlags &= ~(BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH);
} else {
sp7C->flags &= ~ACTOR_FLAG_2000;
}
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -286,7 +287,7 @@ void EnBoom_Update(Actor* thisx, PlayState* play) {
Player* player = GET_PLAYER(play);
Actor* actor;
- if (!(player->stateFlags1 & 0x20000000)) {
+ if (!(player->stateFlags1 & PLAYER_STATE1_20000000)) {
this->actionFunc(this, play);
if (((actor = this->actor.child) != NULL) || ((actor = this->actor.parent) != NULL)) {
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 45e3618ed..e5e3fa2b3 100644
--- a/src/overlays/actors/ovl_En_Boom/z_en_boom.h
+++ b/src/overlays/actors/ovl_En_Boom/z_en_boom.h
@@ -21,6 +21,4 @@ typedef struct EnBoom {
/* 0x1F0 */ EnBoomActionFunc actionFunc;
} EnBoom; // size = 0x1F4
-extern const ActorInit En_Boom_InitVars;
-
#endif // Z_EN_BOOM_H
diff --git a/src/overlays/actors/ovl_En_Box/overlay.cfg b/src/overlays/actors/ovl_En_Box/overlay.cfg
deleted file mode 100644
index bdbd8b754..000000000
--- a/src/overlays/actors/ovl_En_Box/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Box
-z_en_box.c
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 bc33adc0c..302547c26 100644
--- a/src/overlays/actors/ovl_En_Box/z_en_box.c
+++ b/src/overlays/actors/ovl_En_Box/z_en_box.c
@@ -53,10 +53,10 @@ void func_80868B74(EnBox* this, PlayState* play);
void EnBox_WaitOpen(EnBox* this, PlayState* play);
void EnBox_Open(EnBox* this, PlayState* play);
-void func_80867FBC(func_80867BDC_a0* arg0, PlayState* play, s32 arg2);
-void func_80867FE4(func_80867BDC_a0* arg0, PlayState* play);
+void func_80867FBC(struct_80867BDC_a0* arg0, PlayState* play, s32 arg2);
+void func_80867FE4(struct_80867BDC_a0* arg0, PlayState* play);
-const ActorInit En_Box_InitVars = {
+ActorInit En_Box_InitVars = {
ACTOR_EN_BOX,
ACTORCAT_CHEST,
FLAGS,
@@ -87,7 +87,7 @@ void EnBox_SetupAction(EnBox* this, EnBoxActionFunc func) {
this->actionFunc = func;
}
-void func_80867BDC(func_80867BDC_a0* arg0, PlayState* play, Vec3f* pos) {
+void func_80867BDC(struct_80867BDC_a0* arg0, PlayState* play, Vec3f* pos) {
arg0->pos = *pos;
arg0->unk_0C = NULL;
arg0->unk_10 = NULL;
@@ -96,7 +96,7 @@ void func_80867BDC(func_80867BDC_a0* arg0, PlayState* play, Vec3f* pos) {
arg0->unk_1C = 0;
}
-void func_80867C14(func_80867BDC_a0* arg0, PlayState* play) {
+void func_80867C14(struct_80867BDC_a0* arg0, PlayState* play) {
arg0->unk_18++;
if (arg0->unk_18 > 85) {
arg0->unk_18 = 85;
@@ -115,7 +115,7 @@ void func_80867C14(func_80867BDC_a0* arg0, PlayState* play) {
arg0->unk_14++;
}
-void func_80867C8C(func_80867BDC_a0* arg0, PlayState* play) {
+void func_80867C8C(struct_80867BDC_a0* arg0, PlayState* play) {
s32 temp_s6 = arg0->unk_18 - arg0->unk_1C;
s32 i;
f32 pad;
@@ -146,7 +146,7 @@ void func_80867C8C(func_80867BDC_a0* arg0, PlayState* play) {
func_8012C2DC(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++, gOwlStatueWhiteFlashDL);
+ gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL);
}
Matrix_Pop();
gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -154,13 +154,13 @@ void func_80867C8C(func_80867BDC_a0* arg0, PlayState* play) {
}
}
-void func_80867FBC(func_80867BDC_a0* arg0, PlayState* play, s32 arg2) {
+void func_80867FBC(struct_80867BDC_a0* arg0, PlayState* play, s32 arg2) {
arg0->unk_0C = func_80867C14;
arg0->unk_10 = func_80867C8C;
arg0->unk_20 = arg2;
}
-void func_80867FE4(func_80867BDC_a0* arg0, PlayState* play) {
+void func_80867FE4(struct_80867BDC_a0* arg0, PlayState* play) {
arg0->unk_0C = NULL;
arg0->unk_10 = NULL;
func_80867BDC(arg0, play, &arg0->pos);
@@ -187,7 +187,7 @@ void EnBox_ClipToGround(EnBox* this, PlayState* play) {
void EnBox_Init(Actor* thisx, PlayState* play) {
s32 pad;
EnBox* this = THIS;
- s16 cutsceneIdx;
+ s16 csId;
CollisionHeader* colHeader;
f32 animFrame;
f32 animFrameEnd;
@@ -213,7 +213,7 @@ void EnBox_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.world.rot.x = 0x7FFF;
this->collectableFlag = 0;
} else {
- func_800C636C(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCeilingCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->collectableFlag = (this->dyna.actor.world.rot.x & 0x7F);
this->dyna.actor.world.rot.x = 0;
}
@@ -228,7 +228,7 @@ void EnBox_Init(Actor* thisx, PlayState* play) {
animFrame = animFrameEnd;
} else if (((this->type == ENBOX_TYPE_BIG_SWITCH_FLAG_FALL) || (this->type == ENBOX_TYPE_SMALL_SWITCH_FLAG_FALL)) &&
!Flags_GetSwitch(play, this->switchFlag)) {
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
if (Rand_ZeroOne() < 0.5f) {
this->movementFlags |= ENBOX_MOVE_FALL_ANGLE_SIDE;
}
@@ -240,7 +240,7 @@ void EnBox_Init(Actor* thisx, PlayState* play) {
} else if (((this->type == ENBOX_TYPE_BIG_ROOM_CLEAR) || (this->type == ENBOX_TYPE_SMALL_ROOM_CLEAR)) &&
!Flags_GetClear(play, this->dyna.actor.room)) {
EnBox_SetupAction(this, EnBox_AppearOnRoomClear);
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
if (this->movementFlags & ENBOX_MOVE_0x80) {
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y + 50.0f;
} else {
@@ -254,7 +254,7 @@ void EnBox_Init(Actor* thisx, PlayState* play) {
} else if (((this->type == ENBOX_TYPE_BIG_SWITCH_FLAG) || (this->type == ENBOX_TYPE_SMALL_SWITCH_FLAG)) &&
!Flags_GetSwitch(play, this->switchFlag)) {
EnBox_SetupAction(this, EnBox_AppearSwitchFlag);
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
if (this->movementFlags & ENBOX_MOVE_0x80) {
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y + 50.0f;
} else {
@@ -265,7 +265,7 @@ void EnBox_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.flags |= ACTOR_FLAG_10;
} else {
if ((this->type == ENBOX_TYPE_BIG_INVISIBLE) || (this->type == ENBOX_TYPE_SMALL_INVISIBLE)) {
- this->dyna.actor.flags |= ACTOR_FLAG_80;
+ this->dyna.actor.flags |= ACTOR_FLAG_REACT_TO_LENS;
}
EnBox_SetupAction(this, EnBox_WaitOpen);
this->movementFlags |= ENBOX_MOVE_IMMOBILE;
@@ -290,17 +290,17 @@ void EnBox_Init(Actor* thisx, PlayState* play) {
Actor_SetFocus(&this->dyna.actor, 40.0f);
}
- this->cutsceneIdxA = -1;
- this->cutsceneIdxB = -1;
- cutsceneIdx = this->dyna.actor.cutscene;
+ this->csId1 = CS_ID_NONE;
+ this->csId2 = CS_ID_NONE;
+ csId = this->dyna.actor.csId;
- while (cutsceneIdx != -1) {
- if (func_800F2178(cutsceneIdx) == 1) {
- this->cutsceneIdxB = cutsceneIdx;
+ while (csId != CS_ID_NONE) {
+ if (CutsceneManager_GetCutsceneCustomValue(csId) == 1) {
+ this->csId2 = csId;
} else {
- this->cutsceneIdxA = cutsceneIdx;
+ this->csId1 = csId;
}
- cutsceneIdx = ActorCutscene_GetAdditionalCutscene(cutsceneIdx);
+ csId = CutsceneManager_GetAdditionalCsId(csId);
}
func_80867BDC(&this->unk_1F4, play, &this->dyna.actor.home.pos);
}
@@ -345,7 +345,7 @@ void EnBox_Fall(EnBox* this, PlayState* play) {
this->alpha = 255;
this->movementFlags &= ~ENBOX_MOVE_IMMOBILE;
- if (this->dyna.actor.bgCheckFlags & 1) {
+ if (this->dyna.actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->movementFlags |= ENBOX_MOVE_UNUSED;
if (this->movementFlags & ENBOX_MOVE_FALL_ANGLE_SIDE) {
this->movementFlags &= ~ENBOX_MOVE_FALL_ANGLE_SIDE;
@@ -374,10 +374,10 @@ void EnBox_Fall(EnBox* this, PlayState* play) {
}
void EnBox_FallOnSwitchFlag(EnBox* this, PlayState* play) {
- func_800B8C50(&this->dyna.actor, play);
+ Actor_SetClosestSecretDistance(&this->dyna.actor, play);
if (this->unk_1A0 >= 0) {
EnBox_SetupAction(this, EnBox_Fall);
- func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
} else if (this->unk_1A0 >= -11) {
this->unk_1A0++;
} else if (Flags_GetSwitch(play, this->switchFlag)) {
@@ -386,34 +386,34 @@ void EnBox_FallOnSwitchFlag(EnBox* this, PlayState* play) {
}
void EnBox_AppearSwitchFlag(EnBox* this, PlayState* play) {
- func_800B8C50(&this->dyna.actor, play);
+ Actor_SetClosestSecretDistance(&this->dyna.actor, play);
if (Flags_GetSwitch(play, this->switchFlag)) {
- if (ActorCutscene_GetCanPlayNext(this->cutsceneIdxA)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->cutsceneIdxA, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->csId1)) {
+ CutsceneManager_StartWithPlayerCs(this->csId1, &this->dyna.actor);
EnBox_SetupAction(this, func_80868AFC);
this->unk_1A0 = -30;
} else {
- ActorCutscene_SetIntentToPlay(this->cutsceneIdxA);
+ CutsceneManager_Queue(this->csId1);
}
}
}
void EnBox_AppearOnRoomClear(EnBox* this, PlayState* play) {
- func_800B8C50(&this->dyna.actor, play);
+ Actor_SetClosestSecretDistance(&this->dyna.actor, play);
if (Flags_GetClearTemp(play, this->dyna.actor.room)) {
- if (ActorCutscene_GetCanPlayNext(this->cutsceneIdxA)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->cutsceneIdxA, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->csId1)) {
+ CutsceneManager_StartWithPlayerCs(this->csId1, &this->dyna.actor);
Flags_SetClear(play, this->dyna.actor.room);
EnBox_SetupAction(this, func_80868AFC);
this->unk_1A0 = -30;
} else {
- ActorCutscene_SetIntentToPlay(this->cutsceneIdxA);
+ CutsceneManager_Queue(this->csId1);
}
}
}
void func_80868AFC(EnBox* this, PlayState* play) {
- if ((func_800F22C4(this->cutsceneIdxA, &this->dyna.actor) != 0) || (this->unk_1A0 != 0)) {
+ if ((func_800F22C4(this->csId1, &this->dyna.actor) != 0) || (this->unk_1A0 != 0)) {
EnBox_SetupAction(this, func_80868B74);
this->unk_1A0 = 0;
func_80867FBC(&this->unk_1F4, play, (this->movementFlags & ENBOX_MOVE_0x80) != 0);
@@ -422,7 +422,7 @@ void func_80868AFC(EnBox* this, PlayState* play) {
}
void func_80868B74(EnBox* this, PlayState* play) {
- func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
if (this->unk_1A0 < 0) {
this->unk_1A0++;
} else if (this->unk_1A0 < 40) {
@@ -432,11 +432,11 @@ void func_80868B74(EnBox* this, PlayState* play) {
this->dyna.actor.world.pos.y += 1.25f;
}
this->unk_1A0++;
- if ((this->cutsceneIdxA != -1) && ActorCutscene_GetCurrentIndex() == this->cutsceneIdxA) {
+ if ((this->csId1 != -1) && CutsceneManager_GetCurrentCsId() == this->csId1) {
if (this->unk_1A0 == 2) {
- func_800B724C(play, &this->dyna.actor, 4);
+ func_800B724C(play, &this->dyna.actor, PLAYER_CSMODE_4);
} else if (this->unk_1A0 == 22) {
- func_800B724C(play, &this->dyna.actor, 1);
+ func_800B724C(play, &this->dyna.actor, PLAYER_CSMODE_1);
}
}
} else if (this->unk_1A0 < 60) {
@@ -445,7 +445,7 @@ void func_80868B74(EnBox* this, PlayState* play) {
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y;
} else {
EnBox_SetupAction(this, EnBox_WaitOpen);
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ CutsceneManager_Stop(this->dyna.actor.csId);
}
}
@@ -460,8 +460,8 @@ void EnBox_WaitOpen(EnBox* this, PlayState* play) {
this->alpha = 255;
this->movementFlags |= ENBOX_MOVE_IMMOBILE;
- if ((this->unk_1EC != 0) && ((this->cutsceneIdxB < 0) || (ActorCutscene_GetCurrentIndex() == this->cutsceneIdxB) ||
- (ActorCutscene_GetCurrentIndex() == -1))) {
+ if ((this->unk_1EC != 0) && ((this->csId2 < 0) || (CutsceneManager_GetCurrentCsId() == this->csId2) ||
+ (CutsceneManager_GetCurrentCsId() == CS_ID_NONE))) {
if (this->unk_1EC < 0) {
animHeader = &gBoxChestOpenAnim;
playbackSpeed = 1.5f;
@@ -508,7 +508,7 @@ void EnBox_WaitOpen(EnBox* this, PlayState* play) {
if ((this->getItemId == GI_MASK_GIANT) && (INV_CONTENT(ITEM_MASK_GIANT) == ITEM_MASK_GIANT)) {
this->getItemId = GI_RECOVERY_HEART;
}
- Actor_PickUpNearby(&this->dyna.actor, play, -this->getItemId);
+ Actor_OfferGetItemNearby(&this->dyna.actor, play, -this->getItemId);
}
if (Flags_GetTreasure(play, ENBOX_GET_CHEST_FLAG(&this->dyna.actor))) {
EnBox_SetupAction(this, EnBox_Open);
@@ -519,7 +519,7 @@ void EnBox_WaitOpen(EnBox* this, PlayState* play) {
void EnBox_Open(EnBox* this, PlayState* play) {
s32 pad;
- this->dyna.actor.flags &= ~ACTOR_FLAG_80;
+ this->dyna.actor.flags &= ~ACTOR_FLAG_REACT_TO_LENS;
if (SkelAnime_Update(&this->skelAnime)) {
if (this->unk_1EC > 0) {
@@ -612,7 +612,8 @@ void EnBox_Update(Actor* thisx, PlayState* play) {
}
if (!(this->movementFlags & ENBOX_MOVE_IMMOBILE)) {
Actor_MoveWithGravity(&this->dyna.actor);
- Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, 0x1C);
+ Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10);
}
Actor_SetFocus(&this->dyna.actor, 40.0f);
if ((this->getItemId == GI_ICE_TRAP) && (this->actionFunc == EnBox_Open) && (this->skelAnime.curFrame > 45.0f) &&
@@ -658,32 +659,34 @@ void EnBox_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
}
Gfx* EnBox_SetRenderMode1(GraphicsContext* gfxCtx) {
- Gfx* dl = GRAPH_ALLOC(gfxCtx, sizeof(Gfx) * 2);
+ Gfx* gfxHead = GRAPH_ALLOC(gfxCtx, sizeof(Gfx));
+ Gfx* gfx = gfxHead;
- gSPEndDisplayList(dl);
- return dl;
+ gSPEndDisplayList(gfx++);
+
+ return gfxHead;
}
Gfx* EnBox_SetRenderMode2(GraphicsContext* gfxCtx) {
- Gfx* dl = GRAPH_ALLOC(gfxCtx, sizeof(Gfx) * 2);
- Gfx* cur = dl;
+ Gfx* gfxHead = GRAPH_ALLOC(gfxCtx, 2 * sizeof(Gfx));
+ Gfx* gfx = gfxHead;
gDPSetRenderMode(
- cur++, AA_EN | Z_CMP | Z_UPD | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL | G_RM_FOG_SHADE_A,
+ gfx++, AA_EN | Z_CMP | Z_UPD | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL | G_RM_FOG_SHADE_A,
AA_EN | Z_CMP | Z_UPD | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL |
GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA));
- gSPEndDisplayList(cur++);
- return dl;
+ gSPEndDisplayList(gfx++);
+ return gfxHead;
}
Gfx* EnBox_SetRenderMode3(GraphicsContext* gfxCtx) {
- Gfx* dl = GRAPH_ALLOC(gfxCtx, sizeof(Gfx) * 2);
- Gfx* cur = dl;
+ Gfx* gfxHead = GRAPH_ALLOC(gfxCtx, 2 * sizeof(Gfx));
+ Gfx* gfx = gfxHead;
- gDPSetRenderMode(cur++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2);
- gSPEndDisplayList(cur++);
- return dl;
+ gDPSetRenderMode(gfx++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2);
+ gSPEndDisplayList(gfx++);
+ return gfxHead;
}
void EnBox_Draw(Actor* thisx, PlayState* play) {
@@ -696,7 +699,7 @@ void EnBox_Draw(Actor* thisx, PlayState* play) {
}
if (((this->alpha == 255) && (this->type != ENBOX_TYPE_BIG_INVISIBLE) &&
(this->type != ENBOX_TYPE_SMALL_INVISIBLE)) ||
- (!CHECK_FLAG_ALL(this->dyna.actor.flags, ACTOR_FLAG_80) &&
+ (!CHECK_FLAG_ALL(this->dyna.actor.flags, ACTOR_FLAG_REACT_TO_LENS) &&
((this->type == ENBOX_TYPE_BIG_INVISIBLE) || (this->type == ENBOX_TYPE_SMALL_INVISIBLE)))) {
gDPPipeSync(POLY_OPA_DISP++);
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
diff --git a/src/overlays/actors/ovl_En_Box/z_en_box.h b/src/overlays/actors/ovl_En_Box/z_en_box.h
index cd164c924..75d9f09c9 100644
--- a/src/overlays/actors/ovl_En_Box/z_en_box.h
+++ b/src/overlays/actors/ovl_En_Box/z_en_box.h
@@ -5,12 +5,12 @@
#include "objects/object_box/object_box.h"
struct EnBox;
-struct func_80867BDC_a0;
+struct struct_80867BDC_a0;
typedef void (*EnBoxActionFunc)(struct EnBox*, PlayState*);
-typedef void (*EnBoxUnkFunc)(struct func_80867BDC_a0* arg0, PlayState* play);
+typedef void (*EnBoxUnkFunc)(struct struct_80867BDC_a0* arg0, PlayState* play);
-typedef struct func_80867BDC_a0 {
+typedef struct struct_80867BDC_a0 {
/* 0x00 */ Vec3f pos;
/* 0x0C */ EnBoxUnkFunc unk_0C;
/* 0x10 */ EnBoxUnkFunc unk_10;
@@ -18,7 +18,7 @@ typedef struct func_80867BDC_a0 {
/* 0x18 */ s32 unk_18;
/* 0x1C */ s32 unk_1C;
/* 0x20 */ s32 unk_20;
-} func_80867BDC_a0; //size 0x24
+} struct_80867BDC_a0; // size 0x24
typedef enum {
/* 0 */ ENBOX_TYPE_BIG, // big
@@ -59,14 +59,12 @@ typedef struct EnBox {
/* 0x1F1 */ u8 type;
/* 0x1F2 */ u8 iceSmokeTimer;
/* 0x1F3 */ s8 unk_1F3;
- /* 0x1F4 */ func_80867BDC_a0 unk_1F4;
- /* 0x218 */ s16 cutsceneIdxA;
- /* 0x21A */ s16 cutsceneIdxB;
+ /* 0x1F4 */ struct_80867BDC_a0 unk_1F4;
+ /* 0x218 */ s16 csId1;
+ /* 0x21A */ s16 csId2;
/* 0x21C */ s32 getItemId;
/* 0x220 */ s32 collectableFlag;
} EnBox; // size = 0x224
-extern const ActorInit En_Box_InitVars;
-
#endif // Z_EN_BOX_H
diff --git a/src/overlays/actors/ovl_En_Bsb/overlay.cfg b/src/overlays/actors/ovl_En_Bsb/overlay.cfg
deleted file mode 100644
index 8542407fe..000000000
--- a/src/overlays/actors/ovl_En_Bsb/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Bsb
-z_en_bsb.c
diff --git a/src/overlays/actors/ovl_En_Bsb/z_en_bsb.c b/src/overlays/actors/ovl_En_Bsb/z_en_bsb.c
index 4ad558a0a..6c6e832c8 100644
--- a/src/overlays/actors/ovl_En_Bsb/z_en_bsb.c
+++ b/src/overlays/actors/ovl_En_Bsb/z_en_bsb.c
@@ -112,7 +112,7 @@ static DamageTable D_80C0F9E0 = {
/* Powder Keg */ DMG_ENTRY(1, 0xD),
};
-const ActorInit En_Bsb_InitVars = {
+ActorInit En_Bsb_InitVars = {
ACTOR_EN_BSB,
ACTORCAT_PROP,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Bsb/z_en_bsb.h b/src/overlays/actors/ovl_En_Bsb/z_en_bsb.h
index 38ec4078f..f3cd4b7d6 100644
--- a/src/overlays/actors/ovl_En_Bsb/z_en_bsb.h
+++ b/src/overlays/actors/ovl_En_Bsb/z_en_bsb.h
@@ -11,9 +11,9 @@ typedef struct EnBsb {
/* 0x0000 */ Actor actor;
/* 0x0144 */ char unk_144[0x140];
/* 0x0284 */ EnBsbActionFunc actionFunc;
- /* 0x0288 */ char unk_288[0xED0];
+ /* 0x0288 */ char unk_288[0x54];
+ /* 0x02DC */ s32 unk2DC;
+ /* 0x02E0 */ char unk2E0[0xE78];
} EnBsb; // size = 0x1158
-extern const ActorInit En_Bsb_InitVars;
-
#endif // Z_EN_BSB_H
diff --git a/src/overlays/actors/ovl_En_Bu/overlay.cfg b/src/overlays/actors/ovl_En_Bu/overlay.cfg
deleted file mode 100644
index 970a005fb..000000000
--- a/src/overlays/actors/ovl_En_Bu/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Bu
-z_en_bu.c
diff --git a/src/overlays/actors/ovl_En_Bu/z_en_bu.c b/src/overlays/actors/ovl_En_Bu/z_en_bu.c
index fb8c119da..043f1ebb7 100644
--- a/src/overlays/actors/ovl_En_Bu/z_en_bu.c
+++ b/src/overlays/actors/ovl_En_Bu/z_en_bu.c
@@ -17,7 +17,7 @@ void EnBu_Draw(Actor* thisx, PlayState* play);
void EnBu_DoNothing(EnBu* this, PlayState* play);
-const ActorInit En_Bu_InitVars = {
+ActorInit En_Bu_InitVars = {
ACTOR_EN_BU,
ACTORCAT_ENEMY,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Bu/z_en_bu.h b/src/overlays/actors/ovl_En_Bu/z_en_bu.h
index 0f828477c..05149742f 100644
--- a/src/overlays/actors/ovl_En_Bu/z_en_bu.h
+++ b/src/overlays/actors/ovl_En_Bu/z_en_bu.h
@@ -14,6 +14,4 @@ typedef struct EnBu {
/* 0x18C */ Gfx* displayListPtr;
} EnBu; // size = 0x190
-extern const ActorInit En_Bu_InitVars;
-
#endif // Z_EN_BU_H
diff --git a/src/overlays/actors/ovl_En_Bubble/overlay.cfg b/src/overlays/actors/ovl_En_Bubble/overlay.cfg
deleted file mode 100644
index 9c86d2e3f..000000000
--- a/src/overlays/actors/ovl_En_Bubble/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Bubble
-z_en_bubble.c
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 06c5c33b1..1c0c2cfc4 100644
--- a/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c
+++ b/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c
@@ -19,7 +19,7 @@ void EnBubble_Wait(EnBubble* this, PlayState* play);
void EnBubble_Pop(EnBubble* this, PlayState* play);
void EnBubble_Regrow(EnBubble* this, PlayState* play);
-const ActorInit En_Bubble_InitVars = {
+ActorInit En_Bubble_InitVars = {
ACTOR_EN_BUBBLE,
ACTORCAT_ENEMY,
FLAGS,
@@ -247,10 +247,10 @@ void EnBubble_Fly(EnBubble* this, PlayState* play) {
this->velocityFromBounce.y = this->bounceDirection.y * bounceSpeed;
this->velocityFromBounce.z = this->bounceDirection.z * bounceSpeed;
this->yVelocity = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_AWA_BOUND);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_AWA_BOUND);
this->modelRotSpeed = 128.0f;
this->modelEllipticity = 0.48f;
- } else if ((this->actor.bgCheckFlags & 0x20) && (bounceDirection.y < 0.0f)) {
+ } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_WATER) && (bounceDirection.y < 0.0f)) {
normal.x = normal.z = 0.0f;
normal.y = 1.0f;
EnBubble_Vec3fNormalizedReflect(&bounceDirection, &normal, &bounceDirection);
@@ -266,7 +266,7 @@ void EnBubble_Fly(EnBubble* this, PlayState* play) {
this->velocityFromBounce.y = (this->bounceDirection.y * bounceSpeed);
this->velocityFromBounce.z = (this->bounceDirection.z * bounceSpeed);
this->yVelocity = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_AWA_BOUND);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_AWA_BOUND);
this->modelRotSpeed = 128.0f;
this->modelEllipticity = 0.48f;
}
@@ -366,7 +366,7 @@ void EnBubble_Wait(EnBubble* this, PlayState* play) {
void EnBubble_Pop(EnBubble* this, PlayState* play) {
if (EnBubble_Explosion(this, play) > -1) {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 60, NA_SE_EN_AWA_BREAK);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -392,7 +392,8 @@ void EnBubble_Update(Actor* thisx, PlayState* play) {
EnBubble* this = (EnBubble*)thisx;
Actor_UpdatePos(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 16.0f, 16.0f, 0.0f, 7);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 16.0f, 16.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4);
this->actionFunc(this, play);
Actor_SetFocus(&this->actor, this->actor.shape.yOffset);
}
@@ -409,9 +410,9 @@ void EnBubble_Draw(Actor* thisx, PlayState* play) {
Math_SmoothStepToF(&this->modelEllipticity, 0.08f, 0.2f, 1000.0f, 0.0f);
Matrix_ReplaceRotation(&play->billboardMtxF);
Matrix_Scale(this->modelWidth + 1.0f, this->modelHeight + 1.0f, 1.0f, MTXMODE_APPLY);
- Matrix_RotateZF(DEGF_TO_RADF((f32)play->state.frames) * this->modelRotSpeed, MTXMODE_APPLY);
+ Matrix_RotateZF(DEG_TO_RAD((f32)play->state.frames) * this->modelRotSpeed, MTXMODE_APPLY);
Matrix_Scale(this->modelEllipticity + 1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
- Matrix_RotateZF(DEGF_TO_RADF(-(f32)play->state.frames) * this->modelRotSpeed, MTXMODE_APPLY);
+ Matrix_RotateZF(DEG_TO_RAD(-(f32)play->state.frames) * this->modelRotSpeed, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gBubbleDL);
diff --git a/src/overlays/actors/ovl_En_Bubble/z_en_bubble.h b/src/overlays/actors/ovl_En_Bubble/z_en_bubble.h
index 7affed807..86e2358b4 100644
--- a/src/overlays/actors/ovl_En_Bubble/z_en_bubble.h
+++ b/src/overlays/actors/ovl_En_Bubble/z_en_bubble.h
@@ -32,6 +32,4 @@ typedef struct EnBubble {
/* 0x254 */ f32 yVelocity;
} EnBubble; // size = 0x258
-extern const ActorInit En_Bubble_InitVars;
-
#endif // Z_EN_BUBBLE_H
diff --git a/src/overlays/actors/ovl_En_Butte/overlay.cfg b/src/overlays/actors/ovl_En_Butte/overlay.cfg
deleted file mode 100644
index 04a22c108..000000000
--- a/src/overlays/actors/ovl_En_Butte/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Butte
-z_en_butte.c
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 93bc67792..05072da72 100644
--- a/src/overlays/actors/ovl_En_Butte/z_en_butte.c
+++ b/src/overlays/actors/ovl_En_Butte/z_en_butte.c
@@ -53,7 +53,7 @@ static ColliderJntSphInit sJntSphInit = {
sJntSphElementsInit,
};
-const ActorInit En_Butte_InitVars = {
+ActorInit En_Butte_InitVars = {
ACTOR_EN_BUTTE,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -155,7 +155,7 @@ void func_8091C178(EnButte* this, PlayState* play) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 200, 200, 180, sp48);
gDPSetEnvColor(POLY_XLU_DISP++, 200, 200, 210, 255);
- gSPDisplayList(POLY_XLU_DISP++, gOwlStatueWhiteFlashDL);
+ gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL);
CLOSE_DISPS(play->state.gfxCtx);
}
@@ -241,7 +241,7 @@ void func_8091C794(EnButte* this, PlayState* play) {
s16 yaw;
func_8091C524(this);
- Math_SmoothStepToF(&this->actor.speedXZ, sp4C->unk_04, sp4C->unk_08, sp4C->unk_0C, 0.0f);
+ Math_SmoothStepToF(&this->actor.speed, sp4C->unk_04, sp4C->unk_08, sp4C->unk_0C, 0.0f);
if (this->unk_24F == 1) {
distSq = SQ(100.0f);
@@ -276,9 +276,8 @@ void func_8091C794(EnButte* this, PlayState* play) {
func_8091C6B4(this);
- playSpeed =
- (((this->actor.speedXZ * 0.5f) + (Rand_ZeroOne() * 0.2f)) + ((1.0f - Math_SinS(this->unk_258)) * 0.15f)) +
- ((1.0f - Math_SinS(this->unk_256)) * 0.3f) + sp38;
+ playSpeed = (((this->actor.speed * 0.5f) + (Rand_ZeroOne() * 0.2f)) + ((1.0f - Math_SinS(this->unk_258)) * 0.15f)) +
+ ((1.0f - Math_SinS(this->unk_256)) * 0.3f) + sp38;
this->skelAnime.playSpeed = CLAMP(playSpeed, 0.2f, 1.5f);
SkelAnime_Update(&this->skelAnime);
@@ -287,7 +286,8 @@ void func_8091C794(EnButte* this, PlayState* play) {
func_8091C0A0(this, &D_8091D324[this->unk_24E]);
}
- if ((ENBUTTE_GET_1(&this->actor) == ENBUTTE_1) && (player->itemActionParam == 7) && (this->unk_252 <= 0) &&
+ if ((ENBUTTE_GET_1(&this->actor) == ENBUTTE_1) && (player->heldItemAction == PLAYER_IA_STICK) &&
+ (this->unk_252 <= 0) &&
((Math3D_XZDistanceSquared(player->actor.world.pos.x, player->actor.world.pos.z, this->actor.home.pos.x,
this->actor.home.pos.z) < SQ(120.0f)) ||
(this->actor.xzDistToPlayer < 60.0f))) {
@@ -317,7 +317,7 @@ void func_8091CBB4(EnButte* this, PlayState* play) {
s16 yaw;
func_8091C5EC(this);
- Math_SmoothStepToF(&this->actor.speedXZ, sp5C->unk_04, sp5C->unk_08, sp5C->unk_0C, 0.0f);
+ Math_SmoothStepToF(&this->actor.speed, sp5C->unk_04, sp5C->unk_08, sp5C->unk_0C, 0.0f);
sp40 = 0.0f;
if ((this->unk_24E != 0) && (this->unk_24C < 12)) {
@@ -343,7 +343,7 @@ void func_8091CBB4(EnButte* this, PlayState* play) {
func_8091C6B4(this);
- playSpeed = ((this->actor.speedXZ * 0.5f) + (Rand_ZeroOne() * 0.2f) + ((1.0f - Math_SinS(this->unk_258)) * 0.15f)) +
+ playSpeed = ((this->actor.speed * 0.5f) + (Rand_ZeroOne() * 0.2f) + ((1.0f - Math_SinS(this->unk_258)) * 0.15f)) +
((1.0f - Math_SinS(this->unk_256)) * 0.3f) + sp40;
this->skelAnime.playSpeed = CLAMP(playSpeed, 0.2f, 1.5f);
SkelAnime_Update(&this->skelAnime);
@@ -355,7 +355,7 @@ void func_8091CBB4(EnButte* this, PlayState* play) {
distSq = Math3D_XZDistanceSquared(this->actor.world.pos.x, this->actor.world.pos.z, this->actor.home.pos.x,
this->actor.home.pos.z);
- if ((player->itemActionParam != 7) || !(fabsf(player->actor.speedXZ) < 1.8f) || (this->unk_252 > 0) ||
+ if ((player->heldItemAction != PLAYER_IA_STICK) || !(fabsf(player->actor.speed) < 1.8f) || (this->unk_252 > 0) ||
!(distSq < SQ(320.0f))) {
func_8091C748(this);
} else if ((distSq > SQ(240.0f)) &&
@@ -396,7 +396,7 @@ void func_8091D070(EnButte* this) {
void func_8091D090(EnButte* this, PlayState* play) {
if (this->unk_24C <= 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
diff --git a/src/overlays/actors/ovl_En_Butte/z_en_butte.h b/src/overlays/actors/ovl_En_Butte/z_en_butte.h
index 2d7a6a0bc..4bcaf440c 100644
--- a/src/overlays/actors/ovl_En_Butte/z_en_butte.h
+++ b/src/overlays/actors/ovl_En_Butte/z_en_butte.h
@@ -33,6 +33,4 @@ typedef struct EnButte {
/* 0x25C */ f32 unk_25C;
} EnButte; // size = 0x260
-extern const ActorInit En_Butte_InitVars;
-
#endif // Z_EN_BUTTE_H
diff --git a/src/overlays/actors/ovl_En_Cha/overlay.cfg b/src/overlays/actors/ovl_En_Cha/overlay.cfg
deleted file mode 100644
index a409e7d55..000000000
--- a/src/overlays/actors/ovl_En_Cha/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Cha
-z_en_cha.c
diff --git a/src/overlays/actors/ovl_En_Cha/z_en_cha.c b/src/overlays/actors/ovl_En_Cha/z_en_cha.c
index 0fb85a756..cbe96e0f0 100644
--- a/src/overlays/actors/ovl_En_Cha/z_en_cha.c
+++ b/src/overlays/actors/ovl_En_Cha/z_en_cha.c
@@ -18,7 +18,7 @@ void EnCha_Draw(Actor* thisx, PlayState* play);
void EnCha_Idle(EnCha* this, PlayState* play);
-const ActorInit En_Cha_InitVars = {
+ActorInit En_Cha_InitVars = {
ACTOR_EN_CHA,
ACTORCAT_PROP,
FLAGS,
@@ -61,7 +61,7 @@ void EnCha_Init(Actor* thisx, PlayState* play) {
this->actor.home.rot.z = 0;
this->actionFunc = EnCha_Idle;
this->actor.home.rot.x = this->actor.home.rot.z;
- gSaveContext.save.weekEventReg[60] &= (u8)~4;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_60_04);
}
void EnCha_Destroy(Actor* thisx, PlayState* play) {
@@ -72,27 +72,27 @@ void EnCha_Destroy(Actor* thisx, PlayState* play) {
void EnCha_Ring(EnCha* this, PlayState* play) {
EnCha_Idle(this, play);
- if (this->actor.cutscene == -1) {
+ if (this->actor.csId == CS_ID_NONE) {
this->actionFunc = EnCha_Idle;
- } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ } else if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
this->actionFunc = EnCha_Idle;
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
void EnCha_Idle(EnCha* this, PlayState* play) {
- if (gSaveContext.save.weekEventReg[60] & 4) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_DOOR_BELL);
- gSaveContext.save.weekEventReg[60] &= (u8)~4;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_60_04)) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_DOOR_BELL);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_60_04);
this->actor.home.rot.z = 0x7D0;
}
if (this->collider.base.acFlags & AC_HIT) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_DOOR_BELL);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_DOOR_BELL);
this->actor.home.rot.z = 0x7D0;
- if (!(gSaveContext.save.weekEventReg[51] & 4)) {
- gSaveContext.save.weekEventReg[51] |= 4;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_51_04)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_51_04);
this->actionFunc = EnCha_Ring;
}
}
diff --git a/src/overlays/actors/ovl_En_Cha/z_en_cha.h b/src/overlays/actors/ovl_En_Cha/z_en_cha.h
index b3cfe7312..845ebc163 100644
--- a/src/overlays/actors/ovl_En_Cha/z_en_cha.h
+++ b/src/overlays/actors/ovl_En_Cha/z_en_cha.h
@@ -13,6 +13,4 @@ typedef struct EnCha {
/* 0x190 */ EnChaActionFunc actionFunc;
} EnCha; // size = 0x194
-extern const ActorInit En_Cha_InitVars;
-
#endif // Z_EN_CHA_H
diff --git a/src/overlays/actors/ovl_En_Clear_Tag/overlay.cfg b/src/overlays/actors/ovl_En_Clear_Tag/overlay.cfg
deleted file mode 100644
index edfefada0..000000000
--- a/src/overlays/actors/ovl_En_Clear_Tag/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Clear_Tag
-z_en_clear_tag.c
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 c457a623e..21278af9f 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
@@ -31,7 +31,7 @@ void EnClearTag_Draw(Actor* thisx, PlayState* play);
void EnClearTag_UpdateEffects(EnClearTag* this, PlayState* play);
void EnClearTag_DrawEffects(Actor* thisx, PlayState* play);
-const ActorInit En_Clear_Tag_InitVars = {
+ActorInit En_Clear_Tag_InitVars = {
ACTOR_EN_CLEAR_TAG,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -284,8 +284,8 @@ void EnClearTag_CreateLightRayEffect(EnClearTag* this, Vec3f* pos, Vec3f* veloci
effect->actionTimer = Rand_ZeroFloat(10.0f);
- effect->rotationY = Math_Acot2F(effect->velocity.z, effect->velocity.x);
- effect->rotationX = -Math_Acot2F(sqrtf(SQXZ(effect->velocity)), effect->velocity.y);
+ effect->rotationY = Math_Atan2F_XY(effect->velocity.z, effect->velocity.x);
+ effect->rotationX = -Math_Atan2F_XY(sqrtf(SQXZ(effect->velocity)), effect->velocity.y);
effect->envColor.r = 255.0f;
effect->envColor.g = 255.0f;
@@ -326,8 +326,8 @@ void EnClearTag_CreateIsolatedLightRayEffect(EnClearTag* this, Vec3f* pos, Vec3f
effect->actionTimer = Rand_ZeroFloat(10.0f);
- effect->rotationY = Math_Acot2F(effect->velocity.z, effect->velocity.x);
- effect->rotationX = -Math_Acot2F(sqrtf(SQXZ(effect->velocity)), effect->velocity.y);
+ effect->rotationY = Math_Atan2F_XY(effect->velocity.z, effect->velocity.x);
+ effect->rotationX = -Math_Atan2F_XY(sqrtf(SQXZ(effect->velocity)), effect->velocity.y);
effect->envColor.r = sLightRayEnvColor[colorIndex].x;
effect->envColor.g = sLightRayEnvColor[colorIndex].y;
@@ -463,12 +463,12 @@ void EnClearTag_Init(Actor* thisx, PlayState* play) {
}
// Initialize flash effect
- Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 30.0f, 100.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 30.0f, 100.0f, UPDBGCHECKINFO_FLAG_4);
pos = this->actor.world.pos;
EnClearTag_CreateFlashEffect(this, &pos, sFlashMaxScale[thisx->params], this->actor.floorHeight);
// Is not underwater
- if (!(this->actor.bgCheckFlags & 0x20)) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_WATER)) {
if (thisx->params < 10) {
pos.y = this->actor.world.pos.y - 40.0f;
@@ -549,18 +549,18 @@ void EnClearTag_UpdateCamera(EnClearTag* this, PlayState* play) {
player->actor.world.pos.z = -950.0f;
}
- player->actor.speedXZ = 0.0f;
+ player->actor.speed = 0.0f;
if (this->activeTimer == 0) {
this->cameraState = 1;
}
}
break;
case 1:
- Cutscene_Start(play, &play->csCtx);
+ Cutscene_StartManual(play, &play->csCtx);
this->subCamId = Play_CreateSubCamera(play);
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_ACTIVE);
- func_800B7298(play, &this->actor, 4);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_4);
mainCam = Play_GetCamera(play, CAM_ID_MAIN);
this->subCamEye.x = mainCam->eye.x;
this->subCamEye.y = mainCam->eye.y;
@@ -578,15 +578,15 @@ void EnClearTag_UpdateCamera(EnClearTag* this, PlayState* play) {
player->actor.world.pos.z = -950.0f;
}
- player->actor.speedXZ = 0.0f;
+ player->actor.speed = 0.0f;
if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) {
mainCam = Play_GetCamera(play, CAM_ID_MAIN);
mainCam->eye = this->subCamEye;
mainCam->eyeNext = this->subCamEye;
mainCam->at = this->subCamAt;
func_80169AFC(play, this->subCamId, 0);
- Cutscene_End(play, &play->csCtx);
- func_800B7298(play, &this->actor, 6);
+ Cutscene_StopManual(play, &play->csCtx);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_END);
this->cameraState = 0;
this->subCamId = SUB_CAM_ID_DONE;
this->activeTimer = 20;
@@ -615,7 +615,7 @@ void EnClearTag_Update(Actor* thisx, PlayState* play) {
} else if (this->activeTimer != 0) {
EnClearTag_UpdateEffects(this, play);
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
diff --git a/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h b/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h
index c14cc36fd..677fcc698 100644
--- a/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h
+++ b/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h
@@ -41,6 +41,4 @@ typedef struct EnClearTag {
/* 0x2E78 */ Vec3f subCamAt;
} EnClearTag; // size = 0x2E84
-extern const ActorInit En_Clear_Tag_InitVars;
-
#endif // Z_EN_CLEAR_TAG_H
diff --git a/src/overlays/actors/ovl_En_Cne_01/overlay.cfg b/src/overlays/actors/ovl_En_Cne_01/overlay.cfg
deleted file mode 100644
index 7678c1374..000000000
--- a/src/overlays/actors/ovl_En_Cne_01/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Cne_01
-z_en_cne_01.c
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 993076ba8..7fc741ebe 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
@@ -20,7 +20,7 @@ void EnCne01_Walk(EnHy* this, PlayState* play);
void EnCne01_FaceForward(EnHy* this, PlayState* play);
void EnCne01_Talk(EnHy* this, PlayState* play);
-const ActorInit En_Cne_01_InitVars = {
+ActorInit En_Cne_01_InitVars = {
ACTOR_EN_CNE_01,
ACTORCAT_NPC,
FLAGS,
@@ -103,7 +103,7 @@ void EnCne01_UpdateModel(EnCne01* this, PlayState* play) {
EnHy_UpdateSkelAnime(&this->enHy, play);
if (SubS_AngleDiffLessEqual(this->enHy.actor.shape.rot.y, 0x36B0, this->enHy.actor.yawTowardsPlayer)) {
point.x = player->actor.world.pos.x;
- point.y = player->bodyPartsPos[7].y + 3.0f;
+ point.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
point.z = player->actor.world.pos.z;
SubS_TrackPoint(&point, &this->enHy.actor.focus.pos, &this->enHy.actor.shape.rot, &this->enHy.trackTarget,
&this->enHy.headRot, &this->enHy.torsoRot, &sTrackOptions);
@@ -142,7 +142,7 @@ s32 func_809CB4A0(EnCne01* this, PlayState* play) {
Actor_GetScreenPos(play, &this->enHy.actor, &x, &y);
//! @bug: Both x and y conditionals are always true, || should be an &&
if (!this->enHy.waitingOnInit && ((x >= 0) || (x < SCREEN_WIDTH)) && ((y >= 0) || (y < SCREEN_HEIGHT))) {
- func_800B85E0(&this->enHy.actor, play, 30.0f, PLAYER_AP_MAGIC_BEANS);
+ func_800B85E0(&this->enHy.actor, play, 30.0f, PLAYER_IA_MAGIC_BEANS);
}
return true;
}
@@ -210,7 +210,7 @@ void EnCne01_Init(Actor* thisx, PlayState* play) {
if ((this->enHy.animObjIndex < 0) || (this->enHy.headObjIndex < 0) || (this->enHy.skelUpperObjIndex < 0) ||
(this->enHy.skelLowerObjIndex < 0)) {
- Actor_MarkForDeath(&this->enHy.actor);
+ Actor_Kill(&this->enHy.actor);
}
this->enHy.actor.draw = NULL;
Collider_InitCylinder(play, &this->enHy.collider);
@@ -234,7 +234,7 @@ void EnCne01_Update(Actor* thisx, PlayState* play) {
EnCne01_TestIsTalking(this, play);
this->enHy.actionFunc(&this->enHy, play);
- Actor_UpdateBgCheckInfo(play, &this->enHy.actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->enHy.actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
EnCne01_UpdateModel(this, play);
func_809CB4A0(this, play);
}
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 0b9e1e08b..253025760 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
@@ -14,6 +14,4 @@ typedef struct EnCne01 {
/* 0x3EC */ UNK_TYPE1 unk_3EC[0x230];
} EnCne01; // size = 0x61C
-extern const ActorInit En_Cne_01_InitVars;
-
#endif // Z_EN_CNE_01_H
diff --git a/src/overlays/actors/ovl_En_Col_Man/overlay.cfg b/src/overlays/actors/ovl_En_Col_Man/overlay.cfg
deleted file mode 100644
index 4f2df34a6..000000000
--- a/src/overlays/actors/ovl_En_Col_Man/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Col_Man
-z_en_col_man.c
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 0b909d61f..6f7d32de1 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
@@ -47,7 +47,7 @@ static ColliderCylinderInit sCylinderInit = {
{ 10, 11, 1, { 0, 0, 0 } },
};
-const ActorInit En_Col_Man_InitVars = {
+ActorInit En_Col_Man_InitVars = {
ACTOR_EN_COL_MAN,
ACTORCAT_MISC,
FLAGS,
@@ -94,7 +94,7 @@ void EnColMan_Destroy(Actor* thisx, PlayState* play) {
}
void func_80AFDD60(EnColMan* this) {
- if (!(gSaveContext.save.weekEventReg[56] & 2)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_56_02)) {
this->actor.draw = func_80AFE414;
this->actor.shape.yOffset = 700.0f;
if (this->actor.params == EN_COL_MAN_HEART_PIECE) {
@@ -114,33 +114,33 @@ void func_80AFDD60(EnColMan* this) {
}
void func_80AFDE00(EnColMan* this, PlayState* play) {
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
if (this->actor.params == EN_COL_MAN_HEART_PIECE) {
this->actor.params = EN_COL_MAN_RECOVERY_HEART;
- this->actor.speedXZ = 2.0f;
+ this->actor.speed = 2.0f;
this->actor.velocity.y = 8.0f;
} else {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
}
- if (!(gSaveContext.save.weekEventReg[56] & 2)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_56_02)) {
this->actor.shape.rot.y += 0x3E8;
}
if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL;
this->actor.draw = NULL;
this->actionFunc = EnColMan_SetHeartPieceCollectedAndKill;
- } else if (!(gSaveContext.save.weekEventReg[56] & 2)) {
- Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 40.0f, 40.0f);
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_56_02)) {
+ Actor_OfferGetItem(&this->actor, play, GI_HEART_PIECE, 40.0f, 40.0f);
} else {
- Actor_PickUp(&this->actor, play, GI_RECOVERY_HEART, 40.0f, 40.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_RECOVERY_HEART, 40.0f, 40.0f);
}
}
void EnColMan_SetHeartPieceCollectedAndKill(EnColMan* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) {
- gSaveContext.save.weekEventReg[56] |= 2;
- Actor_MarkForDeath(&this->actor);
+ SET_WEEKEVENTREG(WEEKEVENTREG_56_02);
+ Actor_Kill(&this->actor);
}
}
@@ -161,13 +161,13 @@ void func_80AFDFB4(EnColMan* this, PlayState* play) {
this->scale = (BREG(55) / 10000.0f) + 0.0015f;
- if ((this->actor.bgCheckFlags & 1) && (this->actor.velocity.y < 0.0f)) {
+ 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.speedXZ = 2.0f + BREG(56) + Rand_ZeroFloat(2.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;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_ANSATSUSYA_ROCK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_ANSATSUSYA_ROCK);
return;
}
@@ -183,7 +183,7 @@ void func_80AFDFB4(EnColMan* this, PlayState* play) {
Rand_ZeroFloat(50.0f) + 60.0f, 30, Rand_ZeroFloat(5.0f) + 20.0f);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -210,8 +210,8 @@ void func_80AFE25C(EnColMan* this, PlayState* play) {
}
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_BOMB_EXPLOSION);
- Actor_MarkForDeath(&this->actor);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_BOMB_EXPLOSION);
+ Actor_Kill(&this->actor);
}
}
@@ -222,7 +222,9 @@ void EnColMan_Update(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->actor, this->scale);
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 30.0f, 30.0f, 0x1F);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 30.0f, 30.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 |
+ UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10);
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
}
@@ -244,7 +246,7 @@ void func_80AFE4AC(Actor* thisx, PlayState* play) {
func_8012C2DC(play->state.gfxCtx);
func_8012C28C(play->state.gfxCtx);
OPEN_DISPS(play->state.gfxCtx);
- POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP);
+ POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
POLY_OPA_DISP = func_8012C724(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);
@@ -266,7 +268,7 @@ void func_80AFE584(Actor* thisx, PlayState* play) {
void func_80AFE650(Actor* thisx, PlayState* play) {
func_8012C28C(play->state.gfxCtx);
OPEN_DISPS(play->state.gfxCtx);
- POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP);
+ POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
POLY_OPA_DISP = func_8012C724(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);
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 1e8f540dc..977bf2473 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
@@ -24,6 +24,4 @@ typedef enum {
/* 4 */ EN_COL_MAN_GAMEPLAY_BOMB,
} EnColManType;
-extern const ActorInit En_Col_Man_InitVars;
-
#endif // Z_EN_COL_MAN_H
diff --git a/src/overlays/actors/ovl_En_Cow/overlay.cfg b/src/overlays/actors/ovl_En_Cow/overlay.cfg
deleted file mode 100644
index d7215aa84..000000000
--- a/src/overlays/actors/ovl_En_Cow/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Cow
-z_en_cow.c
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 df6093690..beed3fb26 100644
--- a/src/overlays/actors/ovl_En_Cow/z_en_cow.c
+++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.c
@@ -27,7 +27,7 @@ void EnCow_DoTail(EnCow* this, PlayState* play);
void EnCow_UpdateTail(Actor* thisx, PlayState* play);
void EnCow_DrawTail(Actor* thisx, PlayState* play);
-const ActorInit En_Cow_InitVars = {
+ActorInit En_Cow_InitVars = {
ACTOR_EN_COW,
ACTORCAT_NPC,
FLAGS,
@@ -116,9 +116,9 @@ void EnCow_Init(Actor* thisx, PlayState* play) {
this->actionFunc = EnCow_Idle;
- if (!(gSaveContext.save.weekEventReg[22] & 1) && (CURRENT_DAY != 1) &&
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) && (CURRENT_DAY != 1) &&
(EN_COW_TYPE(thisx) == EN_COW_TYPE_ABDUCTED)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -153,7 +153,7 @@ void EnCow_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->actor, 0.01f);
this->flags = 0;
- gSaveContext.save.weekEventReg[87] &= (u8)~1;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_87_01);
}
void EnCow_Destroy(Actor* thisx, PlayState* play) {
@@ -202,7 +202,7 @@ void EnCow_UpdateAnimation(EnCow* this, PlayState* play) {
void EnCow_TalkEnd(EnCow* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
this->actor.flags &= ~ACTOR_FLAG_10000;
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = EnCow_Idle;
}
}
@@ -219,26 +219,26 @@ void EnCow_GiveMilkWait(EnCow* this, PlayState* play) {
this->actor.parent = NULL;
this->actionFunc = EnCow_GiveMilkEnd;
} else {
- Actor_PickUp(&this->actor, play, GI_MILK, 10000.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MILK, 10000.0f, 100.0f);
}
}
void EnCow_GiveMilk(EnCow* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
this->actor.flags &= ~ACTOR_FLAG_10000;
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = EnCow_GiveMilkWait;
- Actor_PickUp(&this->actor, play, GI_MILK, 10000.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MILK, 10000.0f, 100.0f);
}
}
void EnCow_CheckForEmptyBottle(EnCow* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
if (Inventory_HasEmptyBottle()) {
- func_80151938(play, 0x32C9); // Text to give milk.
+ Message_ContinueTextbox(play, 0x32C9); // Text to give milk.
this->actionFunc = EnCow_GiveMilk;
} else {
- func_80151938(play, 0x32CA); // Text if you don't have an empty bottle.
+ Message_ContinueTextbox(play, 0x32CA); // Text if you don't have an empty bottle.
this->actionFunc = EnCow_TalkEnd;
}
}
@@ -289,8 +289,8 @@ void EnCow_Idle(EnCow* this, PlayState* play) {
if (this->actor.xzDistToPlayer < 150.0f &&
ABS_ALT((s16)(this->actor.yawTowardsPlayer - this->actor.shape.rot.y)) < 25000) {
if (func_801A5100() == 4) {
- if (!(gSaveContext.save.weekEventReg[87] & 1)) {
- gSaveContext.save.weekEventReg[87] |= 1;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_87_01)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_87_01);
if (Inventory_HasEmptyBottle()) {
this->actor.textId = 0x32C9; // Text to give milk.
} else {
@@ -301,7 +301,7 @@ void EnCow_Idle(EnCow* this, PlayState* play) {
this->actionFunc = EnCow_Talk;
}
} else {
- gSaveContext.save.weekEventReg[87] &= (u8)~1;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_87_01);
}
}
@@ -340,11 +340,11 @@ void EnCow_Update(Actor* thisx, PlayState* play2) {
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
if (SkelAnime_Update(&this->skelAnime)) {
if (this->skelAnime.animation == &gCowChewAnim) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_COW_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_COW_CRY);
Animation_Change(&this->skelAnime, &gCowMooAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gCowMooAnim),
ANIMMODE_ONCE, 1.0f);
} else {
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 1fd6a36a9..3c73b747f 100644
--- a/src/overlays/actors/ovl_En_Cow/z_en_cow.h
+++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.h
@@ -32,6 +32,4 @@ typedef struct EnCow {
/* 0x0274 */ EnCowActionFunc actionFunc;
} EnCow; // size = 0x278
-extern const ActorInit En_Cow_InitVars;
-
#endif // Z_EN_COW_H
diff --git a/src/overlays/actors/ovl_En_Crow/overlay.cfg b/src/overlays/actors/ovl_En_Crow/overlay.cfg
deleted file mode 100644
index deb12c01d..000000000
--- a/src/overlays/actors/ovl_En_Crow/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Crow
-z_en_crow.c
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 c04462c44..623d12f0e 100644
--- a/src/overlays/actors/ovl_En_Crow/z_en_crow.c
+++ b/src/overlays/actors/ovl_En_Crow/z_en_crow.c
@@ -27,7 +27,7 @@ void EnCrow_SetupRespawn(EnCrow* this);
void EnCrow_TurnAway(EnCrow* this, PlayState* play);
void EnCrow_Respawn(EnCrow* this, PlayState* play);
-const ActorInit En_Crow_InitVars = {
+ActorInit En_Crow_InitVars = {
ACTOR_EN_CROW,
ACTORCAT_ENEMY,
FLAGS,
@@ -163,36 +163,36 @@ void EnCrow_FlyIdle(EnCrow* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
onInitialAnimFrame = Animation_OnFrame(&this->skelAnime, 0.0f);
- this->actor.speedXZ = (Rand_ZeroOne() * 1.5f) + 3.0f;
+ this->actor.speed = (Rand_ZeroOne() * 1.5f) + 3.0f;
if ((this->actor.parent != NULL) && (this->actor.parent->home.rot.z == 0)) {
this->actor.home.pos.x = this->actor.parent->world.pos.x;
this->actor.home.pos.z = this->actor.parent->world.pos.z;
- dist = Actor_XZDistanceToPoint(&this->actor, &this->actor.parent->world.pos);
+ dist = Actor_WorldDistXZToPoint(&this->actor, &this->actor.parent->world.pos);
} else {
dist = 450.0f;
this->actor.flags |= ACTOR_FLAG_1;
}
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
this->yawTarget = this->actor.wallYaw;
- } else if (Actor_XZDistanceToPoint(&this->actor, &this->actor.home.pos) > 300.0f) {
- this->yawTarget = Actor_YawToPoint(&this->actor, &this->actor.home.pos);
+ } else if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > 300.0f) {
+ this->yawTarget = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
}
if ((Math_SmoothStepToS(&this->actor.shape.rot.y, this->yawTarget, 5, 0x300, 0x10) == 0) && onInitialAnimFrame &&
(Rand_ZeroOne() < 0.1f)) {
- yaw = (Actor_YawToPoint(&this->actor, &this->actor.home.pos) - this->actor.shape.rot.y);
+ yaw = (Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos) - this->actor.shape.rot.y);
if (yaw > 0) {
this->yawTarget += Rand_S16Offset(0x1000, 0x1000);
} else {
this->yawTarget -= Rand_S16Offset(0x1000, 0x1000);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KAICHO_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KAICHO_CRY);
}
- if ((this->actor.depthInWater > -40.0f) || (this->actor.bgCheckFlags & 1)) {
+ if ((this->actor.depthInWater > -40.0f) || (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
this->pitchTarget = -0x1000;
} else if (this->actor.world.pos.y < (this->actor.home.pos.y - 50.0f)) {
this->pitchTarget = -Rand_S16Offset(0x800, 0x800);
@@ -211,7 +211,7 @@ void EnCrow_FlyIdle(EnCrow* this, PlayState* play) {
this->pitchTarget = CLAMP(this->pitchTarget, -0x1000, 0x1000);
}
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
Math_ScaledStepToS(&this->actor.shape.rot.x, -0x100, 0x400);
}
@@ -233,7 +233,7 @@ void EnCrow_FlyIdle(EnCrow* this, PlayState* play) {
void EnCrow_SetupDiveAttack(EnCrow* this) {
this->timer = 300;
this->actionFunc = EnCrow_DiveAttack;
- this->actor.speedXZ = 4.0f;
+ this->actor.speed = 4.0f;
this->skelAnime.playSpeed = 2.0f;
}
@@ -258,27 +258,28 @@ void EnCrow_DiveAttack(EnCrow* this, PlayState* play) {
}
targetPos.x = this->actor.child->world.pos.x;
targetPos.z = this->actor.child->world.pos.z;
- pitchTarget = Actor_PitchToPoint(&this->actor, &targetPos);
+ pitchTarget = Actor_WorldPitchTowardPoint(&this->actor, &targetPos);
pitchTarget = CLAMP(pitchTarget, -0x3000, 0x3000);
Math_SmoothStepToS(&this->actor.shape.rot.x, pitchTarget, 2, 0x400, 0x40);
} else {
Math_SmoothStepToS(&this->actor.shape.rot.x, -0x800, 2, 0x100, 0x10);
}
- if (isFacingActor || (Actor_XZDistanceBetweenActors(&this->actor, this->actor.child) > 80.0f)) {
- Math_SmoothStepToS(&this->actor.shape.rot.y, Actor_YawBetweenActors(&this->actor, this->actor.child), 4, 0xC00,
- 0xC0);
+ if (isFacingActor || (Actor_WorldDistXZToActor(&this->actor, this->actor.child) > 80.0f)) {
+ Math_SmoothStepToS(&this->actor.shape.rot.y, Actor_WorldYawTowardActor(&this->actor, this->actor.child), 4,
+ 0xC00, 0xC0);
}
if (((this->timer == 0) || ((&player->actor != this->actor.child) && (this->actor.child->home.rot.z != 0)) ||
((&player->actor == this->actor.child) &&
((Player_GetMask(play) == PLAYER_MASK_STONE) || (player->stateFlags1 & PLAYER_STATE1_800000))) ||
- ((this->collider.base.atFlags & AT_HIT) || (this->actor.bgCheckFlags & 9))) ||
+ ((this->collider.base.atFlags & AT_HIT) ||
+ (this->actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_WALL)))) ||
(this->actor.depthInWater > -40.0f)) {
if (this->collider.base.atFlags & AT_HIT) {
this->collider.base.atFlags &= ~AT_HIT;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KAICHO_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KAICHO_ATTACK);
}
EnCrow_SetupFlyIdle(this);
}
@@ -295,15 +296,15 @@ void EnCrow_CheckIfFrozen(EnCrow* this, PlayState* play) {
void EnCrow_SetupDamaged(EnCrow* this, PlayState* play) {
f32 scale;
- this->actor.speedXZ *= Math_CosS(this->actor.world.rot.x);
+ this->actor.speed *= Math_CosS(this->actor.world.rot.x);
this->actor.velocity.y = 0.0f;
Animation_Change(&this->skelAnime, &gGuayFlyAnim, 0.4f, 0.0f, 0.0f, ANIMMODE_LOOP_INTERP, -3.0f);
this->actor.shape.yOffset = 0.0f;
this->actor.targetArrowOffset = 0.0f;
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
scale = (this->actor.scale.x * 100.0f);
this->actor.world.pos.y += 20.0f * scale;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KAICHO_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KAICHO_DEAD);
if (this->actor.colChkInfo.damageEffect == GUAY_DMGEFF_ICE) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
@@ -323,9 +324,9 @@ void EnCrow_SetupDamaged(EnCrow* this, PlayState* play) {
this->drawDmgEffFrozenSteamScale = 0.5f;
}
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 40);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 40);
if (this->actor.flags & ACTOR_FLAG_8000) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
this->collider.base.acFlags &= ~AC_ON;
@@ -335,7 +336,7 @@ void EnCrow_SetupDamaged(EnCrow* this, PlayState* play) {
}
void EnCrow_Damaged(EnCrow* this, PlayState* play) {
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.5f);
+ Math_StepToF(&this->actor.speed, 0.0f, 0.5f);
this->actor.colorFilterTimer = 40;
if (!(this->actor.flags & ACTOR_FLAG_8000)) {
@@ -343,13 +344,13 @@ void EnCrow_Damaged(EnCrow* this, PlayState* play) {
Math_ScaledStepToS(&this->actor.shape.rot.x, 0x4000, 0x200);
this->actor.shape.rot.z += 0x1780;
}
- if ((this->actor.bgCheckFlags & 1) || (this->actor.floorHeight == BGCHECK_Y_MIN)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->actor.floorHeight == BGCHECK_Y_MIN)) {
EnCrow_CheckIfFrozen(this, play);
func_800B3030(play, &this->actor.world.pos, &gZeroVec3f, &gZeroVec3f, this->actor.scale.x * 10000.0f, 0, 0);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 11, NA_SE_EN_EXTINCT);
if (this->actor.parent != NULL) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
EnCrow_SetupDie(this);
@@ -385,22 +386,22 @@ void EnCrow_Die(EnCrow* this, PlayState* play) {
void EnCrow_SetupTurnAway(EnCrow* this) {
this->timer = 100;
this->pitchTarget = -0x1000;
- this->actor.speedXZ = 3.5f;
+ this->actor.speed = 3.5f;
this->yawTarget = this->actor.yawTowardsPlayer + 0x8000;
this->skelAnime.playSpeed = 2.0f;
if (this->actor.colChkInfo.damageEffect == GUAY_DMGEFF_STUN) {
- Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40);
} else {
- Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
this->actionFunc = EnCrow_TurnAway;
}
void EnCrow_TurnAway(EnCrow* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
this->yawTarget = this->actor.wallYaw;
} else {
this->yawTarget = this->actor.yawTowardsPlayer + 0x8000;
@@ -506,7 +507,8 @@ void EnCrow_Update(Actor* thisx, PlayState* play) {
height = 0.0f;
Actor_MoveWithGravity(&this->actor);
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f * scale, 25.0f * scale, 50.0f * scale, 7);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f * scale, 25.0f * scale, 50.0f * scale,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4);
} else {
height = 0.0f;
}
@@ -528,7 +530,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))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KAICHO_FLUTTER);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KAICHO_FLUTTER);
}
if (this->drawDmgEffAlpha > 0.0f) {
if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
diff --git a/src/overlays/actors/ovl_En_Crow/z_en_crow.h b/src/overlays/actors/ovl_En_Crow/z_en_crow.h
index 86ffba903..527f822f6 100644
--- a/src/overlays/actors/ovl_En_Crow/z_en_crow.h
+++ b/src/overlays/actors/ovl_En_Crow/z_en_crow.h
@@ -31,6 +31,4 @@ typedef struct EnCrow {
/* 0x298 */ f32 drawDmgEffScale;
} EnCrow; // size = 0x29C
-extern const ActorInit En_Crow_InitVars;
-
#endif // Z_EN_CROW_H
diff --git a/src/overlays/actors/ovl_En_Dai/overlay.cfg b/src/overlays/actors/ovl_En_Dai/overlay.cfg
deleted file mode 100644
index 6a1c6a929..000000000
--- a/src/overlays/actors/ovl_En_Dai/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Dai
-z_en_dai.c
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 6abf4da13..7b3f97ded 100644
--- a/src/overlays/actors/ovl_En_Dai/z_en_dai.c
+++ b/src/overlays/actors/ovl_En_Dai/z_en_dai.c
@@ -19,7 +19,7 @@ void EnDai_Draw(Actor* thisx, PlayState* play);
void func_80B3F00C(EnDai* this, PlayState* play);
void func_80B3EF90(EnDai* this, PlayState* play);
-const ActorInit En_Dai_InitVars = {
+ActorInit En_Dai_InitVars = {
ACTOR_EN_DAI,
ACTORCAT_NPC,
FLAGS,
@@ -176,13 +176,13 @@ s32 func_80B3E5DC(EnDai* this, s32 arg1) {
s32 func_80B3E69C(EnDai* this, PlayState* play) {
s32 ret = false;
- if ((play->csCtx.state != 0) && (play->sceneId == SCENE_12HAKUGINMAE) && (play->csCtx.currentCsIndex == 0) &&
- !(gSaveContext.save.weekEventReg[30] & 1)) {
+ if ((play->csCtx.state != CS_STATE_IDLE) && (play->sceneId == SCENE_12HAKUGINMAE) &&
+ (play->csCtx.scriptIndex == 0) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_30_01)) {
if (!(this->unk_1CE & 0x10)) {
Flags_SetSwitch(play, 20);
this->unk_1CE |= (0x80 | 0x10);
this->unk_1CE &= ~(0x100 | 0x20);
- this->unk_1CC = 0xFF;
+ this->cueId = 255;
this->unk_1DC = 0;
this->unk_1CD = 0;
this->unk_1F0 = D_80B3FBF0;
@@ -192,7 +192,7 @@ s32 func_80B3E69C(EnDai* this, PlayState* play) {
} else if (this->unk_1CE & 0x10) {
this->unk_1CE &= ~0x10;
this->unk_1CE |= 0x200;
- gSaveContext.save.weekEventReg[30] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_30_01);
this->actionFunc = func_80B3F00C;
}
@@ -240,7 +240,7 @@ static s32 D_80B3FC8C[] = {
0x920C0F0C, 0x930C1211, 0x5520100E, 0x0C940C12, 0x10000000,
};
-s16 func_80B3E8BC(EnDai* this, s32 arg1) {
+s16 func_80B3E8BC(EnDai* this, s32 cueId) {
static f32 D_80B3FCB4[] = {
1.0f, 6.0f, 16.0f, 19.0f, 46.0f, 48.0f, 50.0f, 52.0f, 54.0f, 1.0f, 6.0f, 36.0f,
};
@@ -256,10 +256,10 @@ s16 func_80B3E8BC(EnDai* this, s32 arg1) {
s32 i;
s32 end;
- if (arg1 == 3) {
+ if (cueId == 3) {
end = 9;
i = 0;
- } else if (arg1 == 4) {
+ } else if (cueId == 4) {
end = 12;
i = 9;
} else {
@@ -291,7 +291,7 @@ s32 func_80B3E96C(EnDai* this, PlayState* play) {
break;
case 1:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SNOWSTORM_HARD);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SNOWSTORM_HARD);
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_WEATHER_TAG, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, 0x1388, 0x708, 0x3E8, 0);
func_80B3E5DC(this, 3);
@@ -351,8 +351,8 @@ s32 func_80B3EC84(EnDai* this) {
};
static Vec3f D_80B3FD7C[] = {
- { 1.0f, 1.0f, 1.0f }, { 1.0f, 0.8, 0.8 }, { 1.0f, 1.1f, 1.1f }, { 1.0f, 1.3f, 1.3f }, { 1.0f, 0.7f, 0.9f },
- { 1.0f, 0.8, 0.9f }, { 1.0f, 0.7f, 0.9f }, { 1.0f, 0.8, 0.9f }, { 1.0f, 1.0f, 1.0f },
+ { 1.0f, 1.0f, 1.0f }, { 1.0f, 0.8f, 0.8f }, { 1.0f, 1.1f, 1.1f }, { 1.0f, 1.3f, 1.3f }, { 1.0f, 0.7f, 0.9f },
+ { 1.0f, 0.8f, 0.9f }, { 1.0f, 0.7f, 0.9f }, { 1.0f, 0.8f, 0.9f }, { 1.0f, 1.0f, 1.0f },
};
s32 i;
@@ -379,7 +379,10 @@ s32 func_80B3ED88(EnDai* this) {
static s16 D_80B3FE00[] = { 1, 2, 3 };
static Vec3f D_80B3FE08[] = {
- 1.0f, 1.0f, 1.0f, 1.0f, 1.2f, 1.2f, 1.0f, 0.7f, 0.8f, 1.0f, 1.0f, 1.0f,
+ { 1.0f, 1.0f, 1.0f },
+ { 1.0f, 1.2f, 1.2f },
+ { 1.0f, 0.7f, 0.8f },
+ { 1.0f, 1.0f, 1.0f },
};
s32 i;
@@ -399,12 +402,12 @@ s32 func_80B3ED88(EnDai* this) {
}
void func_80B3EE8C(EnDai* this, PlayState* play) {
- s16 cutscene = this->actor.cutscene;
+ s16 csId = this->actor.csId;
- if (ActorCutscene_GetCanPlayNext(cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(cutscene, &this->actor);
+ if (CutsceneManager_IsNext(csId)) {
+ CutsceneManager_StartWithPlayerCs(csId, &this->actor);
} else {
- ActorCutscene_SetIntentToPlay(cutscene);
+ CutsceneManager_Queue(csId);
}
}
@@ -415,7 +418,7 @@ void func_80B3EEDC(EnDai* this, PlayState* play) {
(play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY)) {
func_80B3E5DC(this, 1);
this->actionFunc = func_80B3EE8C;
- } else if (!(player->stateFlags2 & 0x08000000)) {
+ } else if (!(player->stateFlags2 & PLAYER_STATE2_8000000)) {
func_80B3E96C(this, play);
this->unk_A6C = 0;
} else if (this->unk_A6C == 0) {
@@ -442,21 +445,21 @@ void func_80B3F044(EnDai* this, PlayState* play) {
static s32 D_80B3FE38[] = {
0, 0, 6, 7, 8,
};
- s32 sp2C = 0;
- s32 sp28;
+ s32 cueChannel = 0;
+ s32 cueId;
- if (Cutscene_CheckActorAction(play, 472)) {
- sp2C = Cutscene_GetActorActionIndex(play, 472);
- sp28 = play->csCtx.actorActions[sp2C]->action;
- if (this->unk_1CC != (u8)sp28) {
- func_80B3E5DC(this, D_80B3FE38[sp28]);
- switch (sp28) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_472)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_472);
+ cueId = play->csCtx.actorCues[cueChannel]->id;
+ if (this->cueId != (u8)cueId) {
+ func_80B3E5DC(this, D_80B3FE38[cueId]);
+ switch (cueId) {
case 1:
this->unk_1E0 = 0.0f;
break;
case 2:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ROLL_AND_FALL);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_ROLL_AND_FALL);
break;
case 3:
@@ -464,10 +467,10 @@ void func_80B3F044(EnDai* this, PlayState* play) {
break;
}
}
- this->unk_1CC = sp28;
+ this->cueId = cueId;
}
- switch (this->unk_1CC) {
+ switch (this->cueId) {
case 1:
this->unk_1E0 += 1.0f;
if (this->unk_1E0 < 30.0f) {
@@ -478,34 +481,34 @@ void func_80B3F044(EnDai* this, PlayState* play) {
break;
case 2:
- if (play->csCtx.frames == 360) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DAIGOLON_SLEEP3 - SFX_FLAG);
+ if (play->csCtx.curFrame == 360) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DAIGOLON_SLEEP3 - SFX_FLAG);
}
if (Animation_OnFrame(&this->skelAnime, 43.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_GORON_BOUND_1);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_GORON_BOUND_1);
}
- this->unk_1D6 = func_80B3E8BC(this, this->unk_1CC);
+ this->unk_1D6 = func_80B3E8BC(this, this->cueId);
break;
case 3:
if (Animation_OnFrame(&this->skelAnime, 6.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DAIGOLON_SLEEP1);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DAIGOLON_SLEEP1);
}
- this->unk_1D6 = func_80B3E8BC(this, this->unk_1CC);
+ this->unk_1D6 = func_80B3E8BC(this, this->cueId);
break;
case 4:
if (Animation_OnFrame(&this->skelAnime, 30.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DAIGOLON_SLEEP2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DAIGOLON_SLEEP2);
}
if (Animation_OnFrame(&this->skelAnime, 35.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_GORON_BOUND_0);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_GORON_BOUND_0);
}
- this->unk_1D6 = func_80B3E8BC(this, this->unk_1CC);
+ this->unk_1D6 = func_80B3E8BC(this, this->cueId);
break;
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, sp2C);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
}
void EnDai_Init(Actor* thisx, PlayState* play) {
@@ -522,7 +525,7 @@ void EnDai_Init(Actor* thisx, PlayState* play) {
this->unk_1CE = 0;
this->unk_1D6 = 0;
- if (gSaveContext.save.weekEventReg[33] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) {
SubS_UpdateFlags(&this->unk_1CE, 3, 7);
this->unk_1CE |= 0x80;
this->unk_1CD = 0xFF;
@@ -530,8 +533,8 @@ void EnDai_Init(Actor* thisx, PlayState* play) {
return;
}
- if (gSaveContext.save.weekEventReg[30] & 1) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_30_01)) {
+ Actor_Kill(&this->actor);
return;
}
@@ -557,11 +560,11 @@ void EnDai_Update(Actor* thisx, PlayState* play) {
func_80B3E460(this);
} else {
this->actionFunc(this, play);
- if (!(player->stateFlags2 & 0x8000000)) {
+ if (!(player->stateFlags2 & PLAYER_STATE2_8000000)) {
SkelAnime_Update(&this->skelAnime);
func_80B3E834(this);
if (!(this->unk_1CE & 0x200)) {
- func_8013C964(&this->actor, play, 0.0f, 0.0f, PLAYER_AP_NONE, this->unk_1CE & 7);
+ func_8013C964(&this->actor, play, 0.0f, 0.0f, PLAYER_IA_NONE, this->unk_1CE & 7);
}
func_80B3E460(this);
}
@@ -642,7 +645,7 @@ void func_80B3F78C(EnDai* this, PlayState* play) {
if (play->actorCtx.lensActorsDrawn) {
this->unk_1CE |= 0x40;
} else {
- Actor_RecordUndrawnActor(play, &this->actor);
+ Actor_AddToLensActors(play, &this->actor);
this->unk_1CE &= ~0x40;
}
diff --git a/src/overlays/actors/ovl_En_Dai/z_en_dai.h b/src/overlays/actors/ovl_En_Dai/z_en_dai.h
index 0b0316d05..35928388f 100644
--- a/src/overlays/actors/ovl_En_Dai/z_en_dai.h
+++ b/src/overlays/actors/ovl_En_Dai/z_en_dai.h
@@ -26,7 +26,7 @@ typedef struct EnDai {
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ EnDaiActionFunc actionFunc;
/* 0x18C */ MtxF unk_18C;
- /* 0x1CC */ u8 unk_1CC;
+ /* 0x1CC */ u8 cueId;
/* 0x1CD */ u8 unk_1CD;
/* 0x1CE */ u16 unk_1CE;
/* 0x1D0 */ s32 unk_1D0;
@@ -46,6 +46,4 @@ typedef struct EnDai {
/* 0xA70 */ s32 unk_A70;
} EnDai; // size = 0xA74
-extern const ActorInit En_Dai_InitVars;
-
#endif // Z_EN_DAI_H
diff --git a/src/overlays/actors/ovl_En_Daiku/overlay.cfg b/src/overlays/actors/ovl_En_Daiku/overlay.cfg
deleted file mode 100644
index cde668b4b..000000000
--- a/src/overlays/actors/ovl_En_Daiku/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Daiku
-z_en_daiku.c
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 45777c681..b988155c7 100644
--- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c
+++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c
@@ -21,7 +21,7 @@ void func_80943BC0(EnDaiku* this);
void func_80943BDC(EnDaiku* this, PlayState* play);
void func_809438F8(EnDaiku* this, PlayState* play);
-const ActorInit En_Daiku_InitVars = {
+ActorInit En_Daiku_InitVars = {
ACTOR_EN_DAIKU,
ACTORCAT_NPC,
FLAGS,
@@ -87,13 +87,12 @@ void EnDaiku_Init(Actor* thisx, PlayState* play) {
this->collider.dim.radius = 30;
this->collider.dim.height = 60;
this->collider.dim.yShift = 0;
- this->actor.flags |= ACTOR_FLAG_8000000;
- if ((gSaveContext.save.weekEventReg[63] & 0x80) ||
- ((gSaveContext.save.day == 3) && gSaveContext.save.isNight)) {
- Actor_MarkForDeath(&this->actor);
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_80) || ((gSaveContext.save.day == 3) && gSaveContext.save.isNight)) {
+ Actor_Kill(&this->actor);
}
} else if ((gSaveContext.save.day == 3) && gSaveContext.save.isNight) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
Math_Vec3f_Copy(&this->unk_26C, &this->actor.world.pos);
@@ -137,7 +136,7 @@ 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)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
}
@@ -245,7 +244,7 @@ void func_80943BDC(EnDaiku* this, PlayState* play) {
}
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80943820(this);
}
}
@@ -259,7 +258,7 @@ void EnDaiku_Update(Actor* thisx, PlayState* play) {
}
if ((this->unk_278 == ENDAIKU_PARAMS_FF_0) && (gSaveContext.save.day == 3) && (gSaveContext.save.isNight)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -279,7 +278,9 @@ void EnDaiku_Update(Actor* thisx, PlayState* play) {
Actor_MoveWithGravity(&this->actor);
Math_SmoothStepToS(&this->unk_260, this->unk_266, 1, 0xBB8, 0);
Math_SmoothStepToS(&this->unk_25E, this->unk_264, 1, 0xBB8, 0);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
this->actor.uncullZoneForward = 650.0f;
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
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 4f93b3ea1..4a3c9b444 100644
--- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h
+++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h
@@ -7,8 +7,8 @@ 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_FF(thisx) ((thisx)->params & 0xFF)
+#define ENDAIKU_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF)
enum {
/* 0x0 */ ENDAIKU_PARAMS_FF_0,
@@ -45,6 +45,4 @@ typedef struct EnDaiku {
/* 0x29C */ ColliderCylinder collider;
} EnDaiku; // size = 0x2E8
-extern const ActorInit En_Daiku_InitVars;
-
#endif // Z_EN_DAIKU_H
diff --git a/src/overlays/actors/ovl_En_Daiku2/overlay.cfg b/src/overlays/actors/ovl_En_Daiku2/overlay.cfg
deleted file mode 100644
index c5eafa2b8..000000000
--- a/src/overlays/actors/ovl_En_Daiku2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Daiku2
-z_en_daiku2.c
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 b7b46b5af..d8a8a78e8 100644
--- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c
+++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c
@@ -32,7 +32,7 @@ void func_80BE71D8(EnDaiku2* this, PlayState* play);
void func_80BE7504(EnDaiku2* this, Vec3f* arg1, Vec3f* arg2, Vec3f* arg3, f32 arg4, s16 arg5);
void func_80BE7718(EnDaiku2* this, PlayState* play);
-const ActorInit En_Daiku2_InitVars = {
+ActorInit En_Daiku2_InitVars = {
ACTOR_EN_DAIKU2,
ACTORCAT_NPC,
FLAGS,
@@ -71,7 +71,7 @@ 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)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
}
@@ -93,7 +93,7 @@ void EnDaiku2_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->actor, 0.01f);
if (!this->unk_280) {
if (day == 3) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -105,7 +105,7 @@ void EnDaiku2_Init(Actor* thisx, PlayState* play) {
Math_Vec3f_Copy(&this->actor.world.pos, &this->unk_268);
}
} else if (day != 3) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -167,7 +167,7 @@ void func_80BE65B4(EnDaiku2* this, PlayState* play) {
switch (gSaveContext.save.day - 1) {
case 0:
this->unk_28A = 0;
- if (gSaveContext.save.weekEventReg[64] & 2) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_64_02)) {
this->unk_28A = 6;
}
func_80BE6408(this, 8);
@@ -175,7 +175,7 @@ void func_80BE65B4(EnDaiku2* this, PlayState* play) {
case 1:
this->unk_28A = 2;
- if (gSaveContext.save.weekEventReg[64] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_64_04)) {
this->unk_28A = 7;
}
func_80BE6408(this, 8);
@@ -234,7 +234,7 @@ void func_80BE66E4(EnDaiku2* this, PlayState* play) {
func_800B8614(&this->actor, play, 80.0f);
if ((this->unk_276 == 8) && Animation_OnFrame(&this->skelAnime, 6.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ROCK_BROKEN);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_ROCK_BROKEN);
for (i = 0; i < 10; i++) {
Math_Vec3f_Copy(&sp70, &this->actor.world.pos);
@@ -297,7 +297,7 @@ void func_80BE6BC0(EnDaiku2* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
s32 day = gSaveContext.save.day - 1;
- func_801477B4(play);
+ Message_CloseTextbox(play);
if (this->unk_288 == 2) {
this->actionFunc = func_80BE6D40;
@@ -305,15 +305,15 @@ void func_80BE6BC0(EnDaiku2* this, PlayState* play) {
this->actionFunc = func_80BE6EF0;
} else if ((this->unk_28A == 0) || (this->unk_28A == 2)) {
this->unk_28A++;
- func_80151938(play, sTextIds[this->unk_28A]);
+ Message_ContinueTextbox(play, sTextIds[this->unk_28A]);
} else {
switch (day) {
case 0:
- gSaveContext.save.weekEventReg[64] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_64_02);
break;
case 1:
- gSaveContext.save.weekEventReg[64] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_64_04);
break;
}
func_80BE65B4(this, play);
@@ -453,7 +453,9 @@ void EnDaiku2_Update(Actor* thisx, PlayState* play) {
Actor_SetFocus(&this->actor, 65.0f);
Actor_MoveWithGravity(&this->actor);
Math_ApproachF(&this->unk_260, this->unk_264, 0.3f, 2.0f);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
func_80BE7600(this, play);
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 dab4096c0..130a06a23 100644
--- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h
+++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h
@@ -7,9 +7,9 @@ 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_8000(thisx) (((thisx)->params >> 15) & 0x1);
+#define ENDAIKU2_GET_7F(thisx) ((thisx)->params & 0x7F)
+#define ENDAIKU2_GET_1F80(thisx) (((thisx)->params >> 7) & 0x3F)
+#define ENDAIKU2_GET_8000(thisx) (((thisx)->params >> 15) & 0x1)
enum {
/* -1 */ ENDAIKU2_GET_7F_MINUS1 = -1,
@@ -53,6 +53,4 @@ typedef struct EnDaiku2 {
/* 0xD7C */ ColliderCylinder collider;
} EnDaiku2; // size = 0xDC8
-extern const ActorInit En_Daiku2_InitVars;
-
#endif // Z_EN_DAIKU2_H
diff --git a/src/overlays/actors/ovl_En_Death/overlay.cfg b/src/overlays/actors/ovl_En_Death/overlay.cfg
deleted file mode 100644
index 17c27c850..000000000
--- a/src/overlays/actors/ovl_En_Death/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Death
-z_en_death.c
diff --git a/src/overlays/actors/ovl_En_Death/z_en_death.c b/src/overlays/actors/ovl_En_Death/z_en_death.c
index b0f03af7c..dd05c2d48 100644
--- a/src/overlays/actors/ovl_En_Death/z_en_death.c
+++ b/src/overlays/actors/ovl_En_Death/z_en_death.c
@@ -38,7 +38,7 @@ void func_808C7D34(EnDeath* this, PlayState* play);
void func_808C7DCC(EnDeath* this, PlayState* play);
#if 0
-const ActorInit En_Death_InitVars = {
+ActorInit En_Death_InitVars = {
ACTOR_EN_DEATH,
ACTORCAT_ENEMY,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Death/z_en_death.h b/src/overlays/actors/ovl_En_Death/z_en_death.h
index bc4e326bb..16863cf83 100644
--- a/src/overlays/actors/ovl_En_Death/z_en_death.h
+++ b/src/overlays/actors/ovl_En_Death/z_en_death.h
@@ -14,6 +14,4 @@ typedef struct EnDeath {
/* 0x18C */ char unk_18C[0x7AC];
} EnDeath; // size = 0x938
-extern const ActorInit En_Death_InitVars;
-
#endif // Z_EN_DEATH_H
diff --git a/src/overlays/actors/ovl_En_Dekubaba/overlay.cfg b/src/overlays/actors/ovl_En_Dekubaba/overlay.cfg
deleted file mode 100644
index cb209dea4..000000000
--- a/src/overlays/actors/ovl_En_Dekubaba/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Dekubaba
-z_en_dekubaba.c
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 d05ac1003..e969abffa 100644
--- a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c
+++ b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c
@@ -5,6 +5,8 @@
*/
#include "z_en_dekubaba.h"
+#include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h"
+#include "objects/gameplay_keep/gameplay_keep.h"
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_400)
@@ -15,24 +17,32 @@ void EnDekubaba_Destroy(Actor* thisx, PlayState* play);
void EnDekubaba_Update(Actor* thisx, PlayState* play);
void EnDekubaba_Draw(Actor* thisx, PlayState* play);
-void func_808B1B14(EnDekubaba* this, PlayState* play);
-void func_808B1CF0(EnDekubaba* this, PlayState* play);
-void func_808B2240(EnDekubaba* this, PlayState* play);
-void func_808B2660(EnDekubaba* this, PlayState* play);
-void func_808B28B4(EnDekubaba* this, PlayState* play);
-void func_808B29C4(EnDekubaba* this, PlayState* play);
-void func_808B2CB8(EnDekubaba* this, PlayState* play);
-void func_808B3078(EnDekubaba* this, PlayState* play);
-void func_808B3280(EnDekubaba* this, PlayState* play);
-void func_808B3404(EnDekubaba* this, PlayState* play);
-void func_808B37E8(EnDekubaba* this, PlayState* play);
-void func_808B3B48(EnDekubaba* this, PlayState* play);
-void func_808B3C50(EnDekubaba* this, PlayState* play);
-void func_808B3DA8(EnDekubaba* this, PlayState* play);
-void func_808B3EE8(EnDekubaba* this, PlayState* play);
+void EnDekubaba_SetupWait(EnDekubaba* this);
+void EnDekubaba_Wait(EnDekubaba* this, PlayState* play);
+void EnDekubaba_SetupGrow(EnDekubaba* this);
+void EnDekubaba_Grow(EnDekubaba* this, PlayState* play);
+void EnDekubaba_SetupRetract(EnDekubaba* this);
+void EnDekubaba_Retract(EnDekubaba* this, PlayState* play);
+void EnDekubaba_DecideLunge(EnDekubaba* this, PlayState* play);
+void EnDekubaba_SetupPrepareLunge(EnDekubaba* this);
+void EnDekubaba_PrepareLunge(EnDekubaba* this, PlayState* play);
+void EnDekubaba_SetupLunge(EnDekubaba* this);
+void EnDekubaba_Lunge(EnDekubaba* this, PlayState* play);
+void EnDekubaba_SetupPullBack(EnDekubaba* this);
+void EnDekubaba_PullBack(EnDekubaba* this, PlayState* play);
+void EnDekubaba_Recover(EnDekubaba* this, PlayState* play);
+void EnDekubaba_Hit(EnDekubaba* this, PlayState* play);
+void EnDekubaba_PrunedSomersaultDie(EnDekubaba* this, PlayState* play);
+void EnDekubaba_SetupShrinkDie(EnDekubaba* this);
+void EnDekubaba_ShrinkDie(EnDekubaba* this, PlayState* play);
+void EnDekubaba_SetupStunnedVertical(EnDekubaba* this);
+void EnDekubaba_StunnedVertical(EnDekubaba* this, PlayState* play);
+void EnDekubaba_Sway(EnDekubaba* this, PlayState* play);
+void EnDekubaba_Frozen(EnDekubaba* this, PlayState* play);
+void EnDekubaba_SetupDeadStickDrop(EnDekubaba* this, PlayState* play);
+void EnDekubaba_DeadStickDrop(EnDekubaba* this, PlayState* play);
-#if 0
-const ActorInit En_Dekubaba_InitVars = {
+ActorInit En_Dekubaba_InitVars = {
ACTOR_EN_DEKUBABA,
ACTORCAT_ENEMY,
FLAGS,
@@ -44,188 +54,1334 @@ const ActorInit En_Dekubaba_InitVars = {
(ActorFunc)EnDekubaba_Draw,
};
-// static ColliderJntSphElementInit sJntSphElementsInit[7] = {
-static ColliderJntSphElementInit D_808B4D60[7] = {
+static ColliderJntSphElementInit sJntSphElementsInit[7] = {
{
- { ELEMTYPE_UNK0, { 0xF7CFFFFF, 0x00, 0x08 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_ON | TOUCH_SFX_HARD, BUMP_ON | BUMP_HOOKABLE, OCELEM_ON, },
+ {
+ ELEMTYPE_UNK0,
+ { 0xF7CFFFFF, 0x00, 0x08 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_ON | TOUCH_SFX_HARD,
+ BUMP_ON | BUMP_HOOKABLE,
+ OCELEM_ON,
+ },
{ 1, { { 0, 100, 1000 }, 15 }, 100 },
},
{
- { ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_NONE, OCELEM_ON, },
+ {
+ ELEMTYPE_UNK0,
+ { 0x00000000, 0x00, 0x00 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_NONE,
+ OCELEM_ON,
+ },
{ 51, { { 0, 0, 1500 }, 8 }, 100 },
},
{
- { ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_NONE, OCELEM_NONE, },
+ {
+ ELEMTYPE_UNK0,
+ { 0x00000000, 0x00, 0x00 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_NONE,
+ OCELEM_NONE,
+ },
{ 52, { { 0, 0, 500 }, 8 }, 100 },
},
{
- { ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_NONE, OCELEM_NONE, },
+ {
+ ELEMTYPE_UNK0,
+ { 0x00000000, 0x00, 0x00 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_NONE,
+ OCELEM_NONE,
+ },
{ 53, { { 0, 0, 1500 }, 8 }, 100 },
},
{
- { ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_NONE, OCELEM_NONE, },
+ {
+ ELEMTYPE_UNK0,
+ { 0x00000000, 0x00, 0x00 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_NONE,
+ OCELEM_NONE,
+ },
{ 54, { { 0, 0, 500 }, 8 }, 100 },
},
{
- { ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_NONE, OCELEM_NONE, },
+ {
+ ELEMTYPE_UNK0,
+ { 0x00000000, 0x00, 0x00 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_NONE,
+ OCELEM_NONE,
+ },
{ 55, { { 0, 0, 1500 }, 8 }, 100 },
},
{
- { ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_NONE, OCELEM_NONE, },
+ {
+ ELEMTYPE_UNK0,
+ { 0x00000000, 0x00, 0x00 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_NONE,
+ OCELEM_NONE,
+ },
{ 56, { { 0, 0, 500 }, 8 }, 100 },
},
};
-// static ColliderJntSphInit sJntSphInit = {
-static ColliderJntSphInit D_808B4E5C = {
- { COLTYPE_HIT6, AT_ON | AT_TYPE_ENEMY, AC_ON | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_JNTSPH, },
- ARRAY_COUNT(sJntSphElementsInit), D_808B4D60, // sJntSphElementsInit,
+static ColliderJntSphInit sJntSphInit = {
+ {
+ COLTYPE_HIT6,
+ AT_ON | AT_TYPE_ENEMY,
+ AC_ON | AC_TYPE_PLAYER,
+ OC1_ON | OC1_TYPE_ALL,
+ OC2_TYPE_1,
+ COLSHAPE_JNTSPH,
+ },
+ ARRAY_COUNT(sJntSphElementsInit),
+ sJntSphElementsInit,
};
-// sColChkInfoInit
-static CollisionCheckInfoInit D_808B4E6C = { 2, 25, 25, MASS_IMMOVABLE };
+static CollisionCheckInfoInit sColChkInfoInit = { 2, 25, 25, MASS_IMMOVABLE };
-// static DamageTable sDamageTable = {
-static DamageTable D_808B4E74 = {
- /* Deku Nut */ DMG_ENTRY(0, 0x1),
- /* Deku Stick */ DMG_ENTRY(3, 0x0),
- /* Horse trample */ DMG_ENTRY(1, 0x0),
- /* Explosives */ DMG_ENTRY(1, 0x0),
- /* Zora boomerang */ DMG_ENTRY(1, 0xF),
- /* Normal arrow */ DMG_ENTRY(3, 0x0),
- /* UNK_DMG_0x06 */ DMG_ENTRY(0, 0x0),
- /* Hookshot */ DMG_ENTRY(0, 0xD),
- /* Goron punch */ DMG_ENTRY(2, 0x0),
- /* Sword */ DMG_ENTRY(1, 0xF),
- /* Goron pound */ DMG_ENTRY(4, 0x0),
- /* Fire arrow */ DMG_ENTRY(1, 0x2),
- /* Ice arrow */ DMG_ENTRY(3, 0x3),
- /* Light arrow */ DMG_ENTRY(3, 0x4),
- /* Goron spikes */ DMG_ENTRY(1, 0x0),
- /* Deku spin */ DMG_ENTRY(1, 0xF),
- /* Deku bubble */ DMG_ENTRY(3, 0x0),
- /* Deku launch */ DMG_ENTRY(2, 0x0),
- /* UNK_DMG_0x12 */ DMG_ENTRY(0, 0x1),
- /* Zora barrier */ DMG_ENTRY(0, 0x5),
- /* Normal shield */ DMG_ENTRY(0, 0x0),
- /* Light ray */ DMG_ENTRY(0, 0x0),
- /* Thrown object */ DMG_ENTRY(1, 0x0),
- /* Zora punch */ DMG_ENTRY(1, 0x0),
- /* Spin attack */ DMG_ENTRY(1, 0xF),
- /* Sword beam */ DMG_ENTRY(0, 0x0),
- /* Normal Roll */ DMG_ENTRY(0, 0x0),
- /* UNK_DMG_0x1B */ DMG_ENTRY(0, 0x0),
- /* UNK_DMG_0x1C */ DMG_ENTRY(0, 0x0),
- /* Unblockable */ DMG_ENTRY(0, 0x0),
- /* UNK_DMG_0x1E */ DMG_ENTRY(0, 0x0),
- /* Powder Keg */ DMG_ENTRY(1, 0x0),
+typedef enum {
+ /* 0x0 */ DEKUBABA_DMGEFF_NONE,
+ /* 0x1 */ DEKUBABA_DMGEFF_NUT,
+ /* 0x2 */ DEKUBABA_DMGEFF_FIRE,
+ /* 0x3 */ DEKUBABA_DMGEFF_ICE,
+ /* 0x4 */ DEKUBABA_DMGEFF_LIGHT,
+ /* 0x5 */ DEKUBABA_DMGEFF_ELECTRIC,
+ /* 0xD */ DEKUBABA_DMGEFF_HOOKSHOT = 0xD,
+ /* 0xF */ DEKUBABA_DMGEFF_CUT = 0xF
+} DekuBabaDamageEffect;
+
+static DamageTable sDamageTable = {
+ /* Deku Nut */ DMG_ENTRY(0, DEKUBABA_DMGEFF_NUT),
+ /* Deku Stick */ DMG_ENTRY(3, DEKUBABA_DMGEFF_NONE),
+ /* Horse trample */ DMG_ENTRY(1, DEKUBABA_DMGEFF_NONE),
+ /* Explosives */ DMG_ENTRY(1, DEKUBABA_DMGEFF_NONE),
+ /* Zora boomerang */ DMG_ENTRY(1, DEKUBABA_DMGEFF_CUT),
+ /* Normal arrow */ DMG_ENTRY(3, DEKUBABA_DMGEFF_NONE),
+ /* UNK_DMG_0x06 */ DMG_ENTRY(0, DEKUBABA_DMGEFF_NONE),
+ /* Hookshot */ DMG_ENTRY(0, DEKUBABA_DMGEFF_HOOKSHOT),
+ /* Goron punch */ DMG_ENTRY(2, DEKUBABA_DMGEFF_NONE),
+ /* Sword */ DMG_ENTRY(1, DEKUBABA_DMGEFF_CUT),
+ /* Goron pound */ DMG_ENTRY(4, DEKUBABA_DMGEFF_NONE),
+ /* Fire arrow */ DMG_ENTRY(1, DEKUBABA_DMGEFF_FIRE),
+ /* Ice arrow */ DMG_ENTRY(3, DEKUBABA_DMGEFF_ICE),
+ /* Light arrow */ DMG_ENTRY(3, DEKUBABA_DMGEFF_LIGHT),
+ /* Goron spikes */ DMG_ENTRY(1, DEKUBABA_DMGEFF_NONE),
+ /* Deku spin */ DMG_ENTRY(1, DEKUBABA_DMGEFF_CUT),
+ /* Deku bubble */ DMG_ENTRY(3, DEKUBABA_DMGEFF_NONE),
+ /* Deku launch */ DMG_ENTRY(2, DEKUBABA_DMGEFF_NONE),
+ /* UNK_DMG_0x12 */ DMG_ENTRY(0, DEKUBABA_DMGEFF_NUT),
+ /* Zora barrier */ DMG_ENTRY(0, DEKUBABA_DMGEFF_ELECTRIC),
+ /* Normal shield */ DMG_ENTRY(0, DEKUBABA_DMGEFF_NONE),
+ /* Light ray */ DMG_ENTRY(0, DEKUBABA_DMGEFF_NONE),
+ /* Thrown object */ DMG_ENTRY(1, DEKUBABA_DMGEFF_NONE),
+ /* Zora punch */ DMG_ENTRY(1, DEKUBABA_DMGEFF_NONE),
+ /* Spin attack */ DMG_ENTRY(1, DEKUBABA_DMGEFF_CUT),
+ /* Sword beam */ DMG_ENTRY(0, DEKUBABA_DMGEFF_NONE),
+ /* Normal Roll */ DMG_ENTRY(0, DEKUBABA_DMGEFF_NONE),
+ /* UNK_DMG_0x1B */ DMG_ENTRY(0, DEKUBABA_DMGEFF_NONE),
+ /* UNK_DMG_0x1C */ DMG_ENTRY(0, DEKUBABA_DMGEFF_NONE),
+ /* Unblockable */ DMG_ENTRY(0, DEKUBABA_DMGEFF_NONE),
+ /* UNK_DMG_0x1E */ DMG_ENTRY(0, DEKUBABA_DMGEFF_NONE),
+ /* Powder Keg */ DMG_ENTRY(1, DEKUBABA_DMGEFF_NONE),
};
-// static InitChainEntry sInitChain[] = {
-static InitChainEntry D_808B4E94[] = {
+static InitChainEntry sInitChain[] = {
ICHAIN_F32(targetArrowOffset, 1500, ICHAIN_STOP),
};
-#endif
+void EnDekubaba_Init(Actor* thisx, PlayState* play) {
+ EnDekubaba* this = THIS;
+ s32 i;
-extern ColliderJntSphElementInit D_808B4D60[7];
-extern ColliderJntSphInit D_808B4E5C;
-extern CollisionCheckInfoInit D_808B4E6C;
-extern DamageTable D_808B4E74;
-extern InitChainEntry D_808B4E94[];
+ Actor_ProcessInitChain(&this->actor, sInitChain);
+ ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 22.0f);
+ SkelAnime_Init(play, &this->skelAnime, &gDekuBabaSkel, &gDekuBabaFastChompAnim, this->jointTable, this->morphTable,
+ DEKUBABA_LIMB_MAX);
+ Collider_InitAndSetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colliderElements);
+ CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
-extern UNK_TYPE D_06000208;
-extern UNK_TYPE D_060002B8;
-extern UNK_TYPE D_060010F0;
-extern UNK_TYPE D_06001330;
-extern UNK_TYPE D_06001828;
+ if (this->actor.params == DEKUBABA_BIG) {
+ this->size = 2.5f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/EnDekubaba_Init.s")
+ for (i = 0; i < sJntSphInit.count; i++) {
+ this->collider.elements[i].dim.worldSphere.radius = this->collider.elements[i].dim.modelSphere.radius =
+ (sJntSphElementsInit[i].dim.modelSphere.radius * 2.50f);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/EnDekubaba_Destroy.s")
+ this->actor.colChkInfo.health = 4;
+ // Big Deku Baba hint does not exist in MM
+ this->actor.hintId = TATL_HINT_ID_BIO_DEKU_BABA;
+ this->actor.targetMode = 2;
+ } else {
+ this->size = 1.0f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B1530.s")
+ for (i = 0; i < sJntSphInit.count; i++) {
+ this->collider.elements[i].dim.worldSphere.radius = this->collider.elements[i].dim.modelSphere.radius;
+ }
+ this->actor.hintId = TATL_HINT_ID_DEKU_BABA;
+ this->actor.targetMode = 1;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B15B8.s")
+ EnDekubaba_SetupWait(this);
+ this->timer = 0;
+ this->boundFloor = NULL;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B16BC.s")
+void EnDekubaba_Destroy(Actor* thisx, PlayState* play) {
+ EnDekubaba* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B1798.s")
+ Collider_DestroyJntSph(play, &this->collider);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B1814.s")
+void EnDekubaba_DisableHitboxes(EnDekubaba* this) {
+ s32 i;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B18A8.s")
+ for (i = 1; i < ARRAY_COUNT(this->colliderElements); i++) {
+ this->collider.elements[i].info.bumperFlags &= ~BUMP_ON;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B1B14.s")
+void EnDekubaba_UpdateHeadPosition(EnDekubaba* this) {
+ f32 horizontalHeadShift = (Math_CosS(this->stemSectionAngle[0]) + Math_CosS(this->stemSectionAngle[1]) +
+ Math_CosS(this->stemSectionAngle[2])) *
+ 20.0f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B1BC0.s")
+ this->actor.world.pos.x =
+ this->actor.home.pos.x + Math_SinS(this->actor.shape.rot.y) * (horizontalHeadShift * this->size);
+ this->actor.world.pos.y =
+ this->actor.home.pos.y - (Math_SinS(this->stemSectionAngle[0]) + Math_SinS(this->stemSectionAngle[1]) +
+ Math_SinS(this->stemSectionAngle[2])) *
+ 20.0f * this->size;
+ this->actor.world.pos.z =
+ this->actor.home.pos.z + Math_CosS(this->actor.shape.rot.y) * (horizontalHeadShift * this->size);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B1CF0.s")
+void EnDekubaba_SetFireLightEffects(EnDekubaba* this, PlayState* play, s32 index) {
+ ColliderJntSphElement* sphElement;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B2158.s")
+ if (this->actor.colChkInfo.damageEffect == DEKUBABA_DMGEFF_FIRE) {
+ this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
+ this->drawDmgEffScale = 0.75f;
+ this->drawDmgEffAlpha = 4.0f;
+ } else if (this->actor.colChkInfo.damageEffect == DEKUBABA_DMGEFF_LIGHT) {
+ this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
+ this->drawDmgEffScale = 0.75f;
+ this->drawDmgEffAlpha = 4.0f;
+ sphElement = &this->collider.elements[index];
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, sphElement->info.bumper.hitPos.x,
+ sphElement->info.bumper.hitPos.y, sphElement->info.bumper.hitPos.z, 0, 0, 0,
+ CLEAR_TAG_SMALL_LIGHT_RAYS);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B2240.s")
+void EnDekubaba_SetFrozenEffects(EnDekubaba* this) {
+ this->drawDmgEffScale = 0.75f;
+ this->drawDmgEffFrozenSteamScale = 1.125f;
+ this->drawDmgEffAlpha = 1.0f;
+ this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
+ this->collider.base.colType = COLTYPE_HIT3;
+ this->timer = 80;
+ this->actor.flags &= ~ACTOR_FLAG_400;
+ Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 80);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B2608.s")
+void EnDekubaba_SpawnIceEffects(EnDekubaba* this, PlayState* play) {
+ if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
+ this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
+ this->collider.base.colType = COLTYPE_HIT6;
+ this->drawDmgEffAlpha = 0.0f;
+ Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), 4,
+ this->size * 0.3f, this->size * 0.2f);
+ this->actor.flags |= ACTOR_FLAG_400;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B2660.s")
+void EnDekubaba_SetupWait(EnDekubaba* this) {
+ s32 i;
+ ColliderJntSphElement* element;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B2890.s")
+ this->actor.shape.rot.x = -0x4000;
+ this->stemSectionAngle[0] = this->stemSectionAngle[1] = this->stemSectionAngle[2] = this->actor.shape.rot.x;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B28B4.s")
+ this->actor.world.pos.x = this->actor.home.pos.x;
+ this->actor.world.pos.z = this->actor.home.pos.z;
+ this->actor.world.pos.y = this->actor.home.pos.y + 14.0f * this->size;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B2980.s")
+ Actor_SetScale(&this->actor, this->size * 0.01f * 0.5f);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B29C4.s")
+ this->collider.base.colType = COLTYPE_HARD;
+ this->collider.base.acFlags |= AC_HARD;
+ this->timer = 45;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B2C40.s")
+ for (i = 1; i < ARRAY_COUNT(this->colliderElements); i++) {
+ element = &this->collider.elements[i];
+ element->dim.worldSphere.center.x = this->actor.world.pos.x;
+ element->dim.worldSphere.center.y = (s32)this->actor.world.pos.y - 7;
+ element->dim.worldSphere.center.z = this->actor.world.pos.z;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B2CB8.s")
+ this->actionFunc = EnDekubaba_Wait;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B3044.s")
+void EnDekubaba_Wait(EnDekubaba* this, PlayState* play) {
+ if (this->timer != 0) {
+ this->timer--;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B3078.s")
+ this->actor.world.pos.x = this->actor.home.pos.x;
+ this->actor.world.pos.z = this->actor.home.pos.z;
+ this->actor.world.pos.y = this->actor.home.pos.y + 14.0f * this->size;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B3170.s")
+ if ((this->timer == 0) && (this->actor.xzDistToPlayer < 200.0f * this->size) &&
+ (fabsf(this->actor.playerHeightRel) < 30.0f * this->size)) {
+ EnDekubaba_SetupGrow(this);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B3280.s")
+void EnDekubaba_SetupGrow(EnDekubaba* this) {
+ s32 i;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B3390.s")
+ Animation_Change(&this->skelAnime, &gDekuBabaFastChompAnim,
+ Animation_GetLastFrame(&gDekuBabaFastChompAnim) * (1.0f / 15), 0.0f,
+ Animation_GetLastFrame(&gDekuBabaFastChompAnim), ANIMMODE_ONCE, 0.0f);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B3404.s")
+ this->timer = 15;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B3768.s")
+ for (i = 2; i < ARRAY_COUNT(this->colliderElements); i++) {
+ this->collider.elements[i].info.ocElemFlags |= OCELEM_ON;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B37E8.s")
+ this->collider.base.colType = COLTYPE_HIT6;
+ this->collider.base.acFlags &= ~AC_HARD;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEKU_WAKEUP);
+ this->actionFunc = EnDekubaba_Grow;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B39AC.s")
+void EnDekubaba_Grow(EnDekubaba* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+ f32 headDistHorizontal;
+ f32 headDistVertical;
+ f32 headShiftX;
+ f32 headShiftZ;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B3B48.s")
+ if (this->timer != 0) {
+ this->timer--;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B3BE4.s")
+ SkelAnime_Update(&this->skelAnime);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B3C50.s")
+ this->actor.scale.x = this->actor.scale.y = this->actor.scale.z =
+ this->size * 0.01f * (0.5f + (15 - this->timer) * 0.5f / 15.0f);
+ Math_ScaledStepToS(&this->actor.shape.rot.x, 0x1800, 0x800);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B3D74.s")
+ headDistVertical = sin_rad(CLAMP_MAX((15 - this->timer) * (1.0f / 15), 0.7f) * M_PI) * 32.0f + 14.0f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B3DA8.s")
+ if (this->actor.shape.rot.x < -0x38E3) {
+ headDistHorizontal = 0.0f;
+ } else if (this->actor.shape.rot.x < -0x238E) {
+ Math_ScaledStepToS(&this->stemSectionAngle[0], -0x5555, 0x38E);
+ headDistHorizontal = Math_CosS(this->stemSectionAngle[0]) * 20.0f;
+ } else if (this->actor.shape.rot.x < -0xE38) {
+ Math_ScaledStepToS(&this->stemSectionAngle[0], -0xAAA, 0x38E);
+ Math_ScaledStepToS(&this->stemSectionAngle[1], -0x5555, 0x38E);
+ Math_ScaledStepToS(&this->stemSectionAngle[2], -0x5555, 0x222);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B3E40.s")
+ headDistHorizontal = 20.0f * (Math_CosS(this->stemSectionAngle[0]) + Math_CosS(this->stemSectionAngle[1])) +
+ (headDistVertical -
+ 20.0f * (-Math_SinS(this->stemSectionAngle[0]) - Math_SinS(this->stemSectionAngle[1]))) *
+ Math_CosS(this->stemSectionAngle[2]) / -Math_SinS(this->stemSectionAngle[2]);
+ } else {
+ Math_ScaledStepToS(&this->stemSectionAngle[0], -0xAAA, 0x38E);
+ Math_ScaledStepToS(&this->stemSectionAngle[1], -0x31C7, 0x222);
+ Math_ScaledStepToS(&this->stemSectionAngle[2], -0x5555, 0x222);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B3EE8.s")
+ headDistHorizontal = 20.0f * (Math_CosS(this->stemSectionAngle[0]) + Math_CosS(this->stemSectionAngle[1])) +
+ (headDistVertical -
+ 20.0f * (-Math_SinS(this->stemSectionAngle[0]) - Math_SinS(this->stemSectionAngle[1]))) *
+ Math_CosS(this->stemSectionAngle[2]) / -Math_SinS(this->stemSectionAngle[2]);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B3F50.s")
+ if (this->timer < 10) {
+ Math_ApproachS(&this->actor.shape.rot.y, Math_Vec3f_Yaw(&this->actor.home.pos, &player->actor.world.pos), 2,
+ 0xE38);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/EnDekubaba_Update.s")
+ this->actor.world.pos.y = this->actor.home.pos.y + (headDistVertical * this->size);
+ //! FAKE:
+ headShiftX = headDistHorizontal;
+ headShiftX = headShiftX * this->size * Math_SinS(this->actor.shape.rot.y);
+ headShiftZ = headDistHorizontal;
+ headShiftZ = headShiftZ * this->size * Math_CosS(this->actor.shape.rot.y);
+ this->actor.world.pos.x = this->actor.home.pos.x + headShiftX;
+ this->actor.world.pos.z = this->actor.home.pos.z + headShiftZ;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B4548.s")
+ EffectSsHahen_SpawnBurst(play, &this->actor.home.pos, this->size * 3.0f, 0, this->size * 12.0f, this->size * 5.0f,
+ 1, HAHEN_OBJECT_DEFAULT, 10, NULL);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B465C.s")
+ if (this->timer == 0) {
+ if (Math_Vec3f_DistXZ(&this->actor.home.pos, &player->actor.world.pos) < 240.0f * this->size) {
+ EnDekubaba_SetupPrepareLunge(this);
+ } else {
+ EnDekubaba_SetupRetract(this);
+ }
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B48FC.s")
+void EnDekubaba_SetupRetract(EnDekubaba* this) {
+ s32 i;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B49C8.s")
+ Animation_Change(&this->skelAnime, &gDekuBabaFastChompAnim, -1.5f, Animation_GetLastFrame(&gDekuBabaFastChompAnim),
+ 0.0f, ANIMMODE_ONCE, -3.0f);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/func_808B4ABC.s")
+ this->timer = 15;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dekubaba/EnDekubaba_Draw.s")
+ for (i = 2; i < ARRAY_COUNT(this->colliderElements); i++) {
+ this->collider.elements[i].info.ocElemFlags &= ~OCELEM_ON;
+ }
+
+ this->actionFunc = EnDekubaba_Retract;
+}
+
+void EnDekubaba_Retract(EnDekubaba* this, PlayState* play) {
+ f32 headDistHorizontal;
+ f32 headDistVertical;
+ f32 xShift;
+ f32 zShift;
+
+ if (this->timer != 0) {
+ this->timer--;
+ }
+
+ SkelAnime_Update(&this->skelAnime);
+
+ this->actor.scale.x = this->actor.scale.y = this->actor.scale.z =
+ 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;
+
+ if (this->actor.shape.rot.x < -0x38E3) {
+ headDistHorizontal = 0.0f;
+ } else if (this->actor.shape.rot.x < -0x238E) {
+ Math_ScaledStepToS(&this->stemSectionAngle[0], -0x4000, 0x555);
+ headDistHorizontal = Math_CosS(this->stemSectionAngle[0]) * 20.0f;
+ } else if (this->actor.shape.rot.x < -0xE38) {
+ Math_ScaledStepToS(&this->stemSectionAngle[0], -0x5555, 0x555);
+ Math_ScaledStepToS(&this->stemSectionAngle[1], -0x4000, 0x555);
+ Math_ScaledStepToS(&this->stemSectionAngle[2], -0x4000, 0x333);
+
+ headDistHorizontal = 20.0f * (Math_CosS(this->stemSectionAngle[0]) + Math_CosS(this->stemSectionAngle[1])) +
+ (headDistVertical -
+ 20.0f * (-Math_SinS(this->stemSectionAngle[0]) - Math_SinS(this->stemSectionAngle[1]))) *
+ Math_CosS(this->stemSectionAngle[2]) / -Math_SinS(this->stemSectionAngle[2]);
+ } else {
+ Math_ScaledStepToS(&this->stemSectionAngle[0], -0x5555, 0x555);
+ Math_ScaledStepToS(&this->stemSectionAngle[1], -0x5555, 0x333);
+ Math_ScaledStepToS(&this->stemSectionAngle[2], -0x4000, 0x333);
+
+ headDistHorizontal = 20.0f * (Math_CosS(this->stemSectionAngle[0]) + Math_CosS(this->stemSectionAngle[1])) +
+ (headDistVertical -
+ 20.0f * (-Math_SinS(this->stemSectionAngle[0]) - Math_SinS(this->stemSectionAngle[1]))) *
+ Math_CosS(this->stemSectionAngle[2]) / -Math_SinS(this->stemSectionAngle[2]);
+ }
+
+ this->actor.world.pos.y = this->actor.home.pos.y + (headDistVertical * this->size);
+ xShift = headDistHorizontal * this->size * Math_SinS(this->actor.shape.rot.y);
+ zShift = headDistHorizontal * this->size * Math_CosS(this->actor.shape.rot.y);
+ this->actor.world.pos.x = this->actor.home.pos.x + xShift;
+ this->actor.world.pos.z = this->actor.home.pos.z + zShift;
+
+ EffectSsHahen_SpawnBurst(play, &this->actor.home.pos, this->size * 3.0f, 0, this->size * 12.0f, this->size * 5.0f,
+ 1, HAHEN_OBJECT_DEFAULT, 10, NULL);
+ if (this->timer == 0) {
+ EnDekubaba_SetupWait(this);
+ }
+}
+
+void EnDekubaba_SetupDecideLunge(EnDekubaba* this) {
+ this->timer = Animation_GetLastFrame(&gDekuBabaFastChompAnim) * 2;
+ Animation_MorphToLoop(&this->skelAnime, &gDekuBabaFastChompAnim, -3.0f);
+ this->actionFunc = EnDekubaba_DecideLunge;
+}
+
+void EnDekubaba_DecideLunge(EnDekubaba* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+
+ SkelAnime_Update(&this->skelAnime);
+ if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 12.0f)) {
+ if (this->actor.params == DEKUBABA_BIG) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEKU_MOUTH);
+ } else {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_MIZUBABA1_MOUTH);
+ }
+ }
+
+ if (this->timer != 0) {
+ this->timer--;
+ }
+
+ Math_ApproachS(&this->actor.shape.rot.y, Math_Vec3f_Yaw(&this->actor.home.pos, &player->actor.world.pos), 2,
+ (this->timer % 5) * 0x222);
+
+ if (this->timer < 10) {
+ this->stemSectionAngle[0] += 0x16C;
+ this->stemSectionAngle[1] += 0x16C;
+ this->stemSectionAngle[2] += 0xB6;
+ this->actor.shape.rot.x += 0x222;
+ } else if (this->timer < 20) {
+ this->stemSectionAngle[0] -= 0x16C;
+ this->stemSectionAngle[1] += 0x111;
+ this->actor.shape.rot.x += 0x16C;
+ } else if (this->timer < 30) {
+ this->stemSectionAngle[1] -= 0x111;
+ this->actor.shape.rot.x -= 0xB6;
+ } else {
+ this->stemSectionAngle[1] -= 0xB6;
+ this->stemSectionAngle[2] += 0xB6;
+ this->actor.shape.rot.x -= 0x16C;
+ }
+
+ EnDekubaba_UpdateHeadPosition(this);
+
+ if ((240.0f * this->size) < Math_Vec3f_DistXZ(&this->actor.home.pos, &player->actor.world.pos)) {
+ EnDekubaba_SetupRetract(this);
+ } else if ((this->timer == 0) || (this->actor.xzDistToPlayer < (80.0f * this->size))) {
+ EnDekubaba_SetupPrepareLunge(this);
+ }
+}
+
+void EnDekubaba_SetupPrepareLunge(EnDekubaba* this) {
+ this->timer = 8;
+ this->skelAnime.playSpeed = 0.0f;
+ this->actionFunc = EnDekubaba_PrepareLunge;
+}
+
+void EnDekubaba_PrepareLunge(EnDekubaba* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+
+ if (this->timer != 0) {
+ this->timer--;
+ }
+
+ Math_SmoothStepToS(&this->actor.shape.rot.x, 0x1800, 2, 0xE38, 0x71C);
+ Math_ApproachS(&this->actor.shape.rot.y, Math_Vec3f_Yaw(&this->actor.home.pos, &player->actor.world.pos), 2, 0xE38);
+ Math_ScaledStepToS(this->stemSectionAngle, 0xAAA, 0x444);
+ Math_ScaledStepToS(&this->stemSectionAngle[1], -0x4718, 0x888);
+ Math_ScaledStepToS(&this->stemSectionAngle[2], -0x6AA4, 0x888);
+
+ if (this->timer == 0) {
+ EnDekubaba_SetupLunge(this);
+ }
+
+ EnDekubaba_UpdateHeadPosition(this);
+}
+
+void EnDekubaba_SetupLunge(EnDekubaba* this) {
+ Animation_PlayOnce(&this->skelAnime, &gDekuBabaPauseChompAnim);
+ this->timer = 0;
+ this->actionFunc = EnDekubaba_Lunge;
+}
+
+void EnDekubaba_Lunge(EnDekubaba* this, PlayState* play) {
+ static Color_RGBA8 sDustPrimColor = { 105, 255, 105, 255 };
+ static Color_RGBA8 sDustEnvColor = { 150, 250, 150, 0 };
+ s32 allStepsDone;
+ s16 curFrame10;
+ Vec3f velocity;
+
+ SkelAnime_Update(&this->skelAnime);
+
+ if (this->timer == 0) {
+ if (Animation_OnFrame(&this->skelAnime, 1.0f)) {
+ if (this->actor.params == DEKUBABA_BIG) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEKU_ATTACK);
+ } else {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_MIZUBABA1_ATTACK);
+ }
+ }
+
+ Math_ScaledStepToS(&this->actor.shape.rot.x, 0, 0x222);
+
+ curFrame10 = (s32)(this->skelAnime.curFrame * 10.0f);
+
+ allStepsDone = true;
+ allStepsDone &= Math_ScaledStepToS(&this->stemSectionAngle[0], -0xE38, curFrame10 + 0x38E);
+ allStepsDone &= Math_ScaledStepToS(&this->stemSectionAngle[1], -0xE38, curFrame10 + 0x71C);
+ allStepsDone &= Math_ScaledStepToS(&this->stemSectionAngle[2], -0xE38, curFrame10 + 0xE38);
+ if (allStepsDone) {
+ Animation_PlayLoopSetSpeed(&this->skelAnime, &gDekuBabaFastChompAnim, 4.0f);
+ velocity.x = Math_SinS(this->actor.shape.rot.y) * 5.0f;
+ velocity.y = 0.0f;
+ velocity.z = Math_CosS(this->actor.shape.rot.y) * 5.0f;
+ func_800B0DE0(play, &this->actor.world.pos, &velocity, &gZeroVec3f, &sDustPrimColor, &sDustEnvColor, 1,
+ (s32)(this->size * 100.0f));
+ this->timer = 1;
+ }
+ } else if (this->timer > 10) {
+ EnDekubaba_SetupPullBack(this);
+ } else {
+ this->timer++;
+
+ if ((this->timer >= 4) && !Actor_IsFacingPlayer(&this->actor, 0x16C)) {
+ Math_ApproachS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0xF, 0x71C);
+ }
+
+ if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 12.0f)) {
+ if (this->actor.params == DEKUBABA_BIG) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEKU_MOUTH);
+ } else {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_MIZUBABA1_MOUTH);
+ }
+ }
+ }
+
+ EnDekubaba_UpdateHeadPosition(this);
+}
+
+void EnDekubaba_SetupPullBack(EnDekubaba* this) {
+ Animation_Change(&this->skelAnime, &gDekuBabaPauseChompAnim, 1.0f, 15.0f,
+ Animation_GetLastFrame(&gDekuBabaPauseChompAnim), ANIMMODE_ONCE, -3.0f);
+ this->timer = 0;
+ this->actionFunc = EnDekubaba_PullBack;
+}
+
+void EnDekubaba_PullBack(EnDekubaba* this, PlayState* play) {
+ Vec3f dustPos;
+ f32 xIncr;
+ f32 zIncr;
+ s32 i;
+
+ SkelAnime_Update(&this->skelAnime);
+
+ if (this->timer == 0) {
+ Math_ScaledStepToS(&this->actor.shape.rot.x, -0x93E, 0x38E);
+ Math_ScaledStepToS(&this->stemSectionAngle[0], -0x888, 0x16C);
+ Math_ScaledStepToS(&this->stemSectionAngle[1], -0x888, 0x16C);
+
+ if (Math_ScaledStepToS(&this->stemSectionAngle[2], -0x888, 0x16C)) {
+ xIncr = Math_SinS(this->actor.shape.rot.y) * 30.0f * this->size;
+ zIncr = Math_CosS(this->actor.shape.rot.y) * 30.0f * this->size;
+ dustPos = this->actor.home.pos;
+
+ for (i = 0; i < 3; i++) {
+ func_800B1210(play, &dustPos, &gZeroVec3f, &gZeroVec3f, (s32)(this->size * 500.0f),
+ (s32)(this->size * 50.0f));
+ dustPos.x += xIncr;
+ dustPos.z += zIncr;
+ }
+
+ this->timer = 1;
+ }
+ } else if (this->timer == 11) {
+ Math_ScaledStepToS(&this->actor.shape.rot.x, -0x93E, 0x200);
+ Math_ScaledStepToS(this->stemSectionAngle, -0xAAA, 0x200);
+ Math_ScaledStepToS(&this->stemSectionAngle[2], -0x5C71, 0x200);
+
+ if (Math_ScaledStepToS(&this->stemSectionAngle[1], 0x238C, 0x200)) {
+ this->timer = 12;
+ }
+ } else if (this->timer == 18) {
+ Math_ScaledStepToS(&this->actor.shape.rot.x, 0x2AA8, 0xAAA);
+
+ if (Math_ScaledStepToS(&this->stemSectionAngle[0], 0x1554, 0x5B0)) {
+ this->timer = 25;
+ }
+
+ Math_ScaledStepToS(&this->stemSectionAngle[1], -0x38E3, 0xAAA);
+ Math_ScaledStepToS(&this->stemSectionAngle[2], -0x5C71, 0x2D8);
+ } else if (this->timer == 25) {
+ Math_ScaledStepToS(&this->actor.shape.rot.x, -0x5550, 0xAAA);
+
+ if (Math_ScaledStepToS(&this->stemSectionAngle[0], -0x6388, 0x93E)) {
+ this->timer = 26;
+ }
+
+ Math_ScaledStepToS(&this->stemSectionAngle[1], -0x3FFC, 0x4FA);
+ Math_ScaledStepToS(&this->stemSectionAngle[2], -0x238C, 0x444);
+ } else if (this->timer == 26) {
+ Math_ScaledStepToS(&this->actor.shape.rot.x, 0x1800, 0x93E);
+
+ if (Math_ScaledStepToS(&this->stemSectionAngle[0], -0x1555, 0x71C)) {
+ this->timer = 27;
+ }
+
+ Math_ScaledStepToS(&this->stemSectionAngle[1], -0x38E3, 0x2D8);
+ Math_ScaledStepToS(&this->stemSectionAngle[2], -0x5C71, 0x5B0);
+ } else if (this->timer >= 27) {
+ this->timer++;
+ if (this->timer > 30) {
+ if (this->actor.xzDistToPlayer < (80.0f * this->size)) {
+ EnDekubaba_SetupPrepareLunge(this);
+ } else {
+ EnDekubaba_SetupDecideLunge(this);
+ }
+ }
+ } else {
+ this->timer++;
+ if (this->timer == 10) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEKU_SCRAPE);
+ }
+
+ if (this->timer >= 12) {
+ Math_ScaledStepToS(&this->stemSectionAngle[2], -0x5C71, 0x88);
+ }
+ }
+
+ EnDekubaba_UpdateHeadPosition(this);
+}
+
+void EnDekubaba_SetupRecover(EnDekubaba* this) {
+ this->timer = 9;
+ this->collider.base.acFlags |= AC_ON;
+ this->skelAnime.playSpeed = -1.0f;
+ this->actionFunc = EnDekubaba_Recover;
+}
+
+void EnDekubaba_Recover(EnDekubaba* this, PlayState* play) {
+ s32 anyStepsDone;
+
+ SkelAnime_Update(&this->skelAnime);
+
+ if (this->timer > 8) {
+ anyStepsDone = Math_SmoothStepToS(&this->actor.shape.rot.x, 0x1800, 1, 0x11C6, 0x71C);
+ anyStepsDone |= Math_SmoothStepToS(&this->stemSectionAngle[0], -0x1555, 1, 0xAAA, 0x71C);
+ anyStepsDone |= Math_SmoothStepToS(&this->stemSectionAngle[1], -0x38E3, 1, 0xE38, 0x71C);
+ anyStepsDone |= Math_SmoothStepToS(&this->stemSectionAngle[2], -0x5C71, 1, 0x11C6, 0x71C);
+ if (!anyStepsDone) {
+ this->timer = 8;
+ }
+ } else {
+ if (this->timer != 0) {
+ this->timer--;
+ }
+
+ if (this->timer == 0) {
+ EnDekubaba_SetupDecideLunge(this);
+ }
+ }
+
+ EnDekubaba_UpdateHeadPosition(this);
+}
+
+typedef enum {
+ /* 0 */ DEKUBABA_HIT_NO_STUN,
+ /* 1 */ DEKUBABA_HIT_STUN_OTHER,
+ /* 2 */ DEKUBABA_HIT_STUN_NUT,
+ /* 3 */ DEKUBABA_HIT_STUN_ELECTRIC
+} DekuBabaHitType;
+
+void EnDekubaba_SetupHit(EnDekubaba* this, s32 hitType) {
+ Animation_MorphToPlayOnce(&this->skelAnime, &gDekuBabaPauseChompAnim, -5.0f);
+ this->timer = hitType;
+ this->collider.base.acFlags &= ~AC_ON;
+ Actor_SetScale(&this->actor, this->size * 0.01f);
+
+ if (hitType == DEKUBABA_HIT_STUN_NUT) {
+ Actor_SetColorFilter(&this->actor, 0, 155, 0, 42);
+ } else if (hitType == DEKUBABA_HIT_STUN_ELECTRIC) {
+ Actor_SetColorFilter(&this->actor, 0, 155, 0, 42);
+ this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_LARGE;
+ this->drawDmgEffScale = 0.75f;
+ this->drawDmgEffAlpha = 2.0f;
+ } else {
+ Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 42);
+ }
+ this->actionFunc = EnDekubaba_Hit;
+}
+
+/**
+ * Hit by a weapon or hit something when lunging.
+ */
+void EnDekubaba_Hit(EnDekubaba* this, PlayState* play) {
+ s32 allStepsDone;
+
+ SkelAnime_Update(&this->skelAnime);
+ allStepsDone = true;
+ allStepsDone &= Math_ScaledStepToS(&this->actor.shape.rot.x, -0x4000, 0xE38);
+ allStepsDone &= Math_ScaledStepToS(this->stemSectionAngle, -0x4000, 0xE38);
+ allStepsDone &= Math_ScaledStepToS(&this->stemSectionAngle[1], -0x4000, 0xE38);
+ allStepsDone &= Math_ScaledStepToS(&this->stemSectionAngle[2], -0x4000, 0xE38);
+ if (allStepsDone) {
+ if (this->actor.colChkInfo.health == 0) {
+ EnDekubaba_SetupShrinkDie(this);
+ } else {
+ this->collider.base.acFlags |= AC_ON;
+
+ if (this->timer == DEKUBABA_HIT_NO_STUN) {
+ if (this->actor.xzDistToPlayer < (80.0f * this->size)) {
+ EnDekubaba_SetupPrepareLunge(this);
+ } else {
+ EnDekubaba_SetupRecover(this);
+ }
+ } else {
+ EnDekubaba_SetupStunnedVertical(this);
+ }
+ }
+ }
+
+ EnDekubaba_UpdateHeadPosition(this);
+}
+
+void EnDekubaba_SetupPrunedSomersaultDie(EnDekubaba* this) {
+ this->timer = 0;
+ this->skelAnime.playSpeed = 0.0f;
+ this->actor.gravity = -0.8f;
+ this->actor.velocity.y = 4.0f;
+ this->actor.world.rot.y = this->actor.shape.rot.y + 0x8000;
+ this->actor.speed = this->size * 3.0f;
+ this->collider.base.acFlags &= ~AC_ON;
+ this->actor.flags |= ACTOR_FLAG_10 | ACTOR_FLAG_20;
+ this->actionFunc = EnDekubaba_PrunedSomersaultDie;
+}
+
+void EnDekubaba_PrunedSomersaultDie(EnDekubaba* this, PlayState* play) {
+ s32 i;
+ Vec3f dustPos;
+ f32 deltaX;
+ f32 deltaY;
+ f32 deltaZ;
+
+ Math_StepToF(&this->actor.speed, 0.0f, this->size * 0.1f);
+
+ if (this->timer == 0) {
+ Math_ScaledStepToS(&this->actor.shape.rot.x, 0x4800, 0x71C);
+ Math_ScaledStepToS(this->stemSectionAngle, 0x4800, 0x71C);
+ Math_ScaledStepToS(&this->stemSectionAngle[1], 0x4800, 0x71C);
+
+ EffectSsHahen_SpawnBurst(play, &this->actor.world.pos, this->size * 3.0f, 0, (s32)(this->size * 12.0f),
+ (s32)(this->size * 5.0f), 1, HAHEN_OBJECT_DEFAULT, 10, NULL);
+
+ if ((this->actor.scale.x > 0.005f) &&
+ ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) || (this->actor.bgCheckFlags & BGCHECKFLAG_WALL))) {
+ this->actor.scale.z = 0.0f;
+ this->actor.scale.y = 0.0f;
+ this->actor.scale.x = 0.0f;
+ this->actor.speed = 0.0f;
+ this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4);
+ EffectSsHahen_SpawnBurst(play, &this->actor.world.pos, this->size * 3.0f, 0, (s32)(this->size * 12.0f),
+ (s32)(this->size * 5.0f), 15, HAHEN_OBJECT_DEFAULT, 10, NULL);
+ }
+
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_ATTACK);
+ this->timer = 1;
+ }
+ } else if (this->timer == 1) {
+ dustPos = this->actor.world.pos;
+
+ deltaY = 20.0f * Math_SinS(this->actor.shape.rot.x);
+ deltaX = -20.0f * Math_CosS(this->actor.shape.rot.x) * Math_SinS(this->actor.shape.rot.y);
+ deltaZ = -20.0f * Math_CosS(this->actor.shape.rot.x) * Math_CosS(this->actor.shape.rot.y);
+
+ for (i = 0; i < 4; i++) {
+ func_800B1210(play, &dustPos, &gZeroVec3f, &gZeroVec3f, 500, 50);
+ dustPos.x += deltaX;
+ dustPos.y += deltaY;
+ dustPos.z += deltaZ;
+ }
+
+ func_800B1210(play, &this->actor.home.pos, &gZeroVec3f, &gZeroVec3f, (s32)(this->size * 500.0f),
+ (s32)(this->size * 100.0f));
+ EnDekubaba_SetupDeadStickDrop(this, play);
+ }
+}
+
+void EnDekubaba_SetupShrinkDie(EnDekubaba* this) {
+ Animation_Change(&this->skelAnime, &gDekuBabaFastChompAnim, -1.5f, Animation_GetLastFrame(&gDekuBabaFastChompAnim),
+ 0.0f, ANIMMODE_ONCE, -3.0f);
+ this->collider.base.acFlags &= ~AC_ON;
+ this->actionFunc = EnDekubaba_ShrinkDie;
+}
+
+/**
+ * Die and drop Deku Nuts (Deku Stick drop is handled elsewhere).
+ */
+void EnDekubaba_ShrinkDie(EnDekubaba* this, PlayState* play) {
+ Math_StepToF(&this->actor.world.pos.y, this->actor.home.pos.y, this->size * 5.0f);
+
+ if (Math_StepToF(&this->actor.scale.x, this->size * 0.1f * 0.01f, this->size * 0.1f * 0.01f)) {
+ func_800B1210(play, &this->actor.home.pos, &gZeroVec3f, &gZeroVec3f, (s32)(this->size * 500.0f),
+ (s32)(this->size * 100.0f));
+
+ if (!this->actor.dropFlag) {
+ Item_DropCollectible(play, &this->actor.world.pos, ITEM00_NUTS_1);
+ if (this->actor.params == DEKUBABA_BIG) {
+ Item_DropCollectible(play, &this->actor.world.pos, ITEM00_NUTS_1);
+ Item_DropCollectible(play, &this->actor.world.pos, ITEM00_NUTS_1);
+ }
+ } else {
+ Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0x30);
+ }
+ Actor_Kill(&this->actor);
+ }
+
+ this->actor.scale.y = this->actor.scale.z = this->actor.scale.x;
+ this->actor.shape.rot.z += 0x1C70;
+ EffectSsHahen_SpawnBurst(play, &this->actor.home.pos, this->size * 3.0f, 0, (s32)(this->size * 12.0f),
+ (s32)(this->size * 5.0f), 1, HAHEN_OBJECT_DEFAULT, 10, NULL);
+}
+
+void EnDekubaba_SetupStunnedVertical(EnDekubaba* this) {
+ s32 i;
+
+ for (i = 1; i < ARRAY_COUNT(this->colliderElements); i++) {
+ this->collider.elements[i].info.bumperFlags |= BUMP_ON;
+ }
+
+ if (this->timer == 1) {
+ Animation_Change(&this->skelAnime, &gDekuBabaFastChompAnim, 4.0f, 0.0f,
+ Animation_GetLastFrame(&gDekuBabaFastChompAnim), ANIMMODE_LOOP, -3.0f);
+ this->timer = 0x28;
+ } else {
+ Animation_Change(&this->skelAnime, &gDekuBabaFastChompAnim, 0.0f, 0.0f,
+ Animation_GetLastFrame(&gDekuBabaFastChompAnim), ANIMMODE_LOOP, -3.0f);
+ if (this->timer == 2) {
+ this->timer = 40;
+ } else {
+ this->timer = 40;
+ }
+ }
+
+ this->actor.world.pos.x = this->actor.home.pos.x;
+ this->actor.world.pos.y = this->actor.home.pos.y + (60.0f * this->size);
+ this->actor.world.pos.z = this->actor.home.pos.z;
+ this->actionFunc = EnDekubaba_StunnedVertical;
+}
+
+void EnDekubaba_StunnedVertical(EnDekubaba* this, PlayState* play) {
+ SkelAnime_Update(&this->skelAnime);
+
+ if (this->timer != 0) {
+ this->timer--;
+ }
+
+ if (this->timer == 0) {
+ EnDekubaba_DisableHitboxes(this);
+
+ if (this->actor.xzDistToPlayer < (80.0f * this->size)) {
+ EnDekubaba_SetupPrepareLunge(this);
+ } else {
+ EnDekubaba_SetupRecover(this);
+ }
+ }
+}
+
+void EnDekubaba_SetupSway(EnDekubaba* this) {
+ this->targetSwayAngle = -0x6000;
+ this->stemSectionAngle[2] = -0x5000;
+ this->stemSectionAngle[1] = -0x4800;
+ EnDekubaba_DisableHitboxes(this);
+ Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 35);
+ this->collider.base.acFlags &= ~AC_ON;
+ this->actionFunc = EnDekubaba_Sway;
+}
+
+/**
+ * Sway back and forth with decaying amplitude until close enough to vertical.
+ */
+void EnDekubaba_Sway(EnDekubaba* this, PlayState* play) {
+ s16 angleToVertical;
+
+ SkelAnime_Update(&this->skelAnime);
+ Math_ScaledStepToS(&this->actor.shape.rot.x, this->stemSectionAngle[0], 0x71C);
+ Math_ScaledStepToS(this->stemSectionAngle, this->stemSectionAngle[1], 0x71C);
+ Math_ScaledStepToS(&this->stemSectionAngle[1], this->stemSectionAngle[2], 0x71C);
+ if (Math_ScaledStepToS(&this->stemSectionAngle[2], this->targetSwayAngle, 0x71C) != 0) {
+ this->targetSwayAngle = -0x4000 - (s32)((this->targetSwayAngle + 0x4000) * 0.8f);
+ }
+
+ angleToVertical = this->targetSwayAngle + 0x4000;
+
+ if (ABS_ALT(angleToVertical) < 0x100) {
+ this->collider.base.acFlags |= AC_ON;
+ if (this->actor.xzDistToPlayer < (80.0f * this->size)) {
+ EnDekubaba_SetupPrepareLunge(this);
+ } else {
+ EnDekubaba_SetupRecover(this);
+ }
+ }
+ EnDekubaba_UpdateHeadPosition(this);
+}
+
+void EnDekubaba_SetupFrozen(EnDekubaba* this) {
+ EnDekubaba_SetFrozenEffects(this);
+ this->actionFunc = EnDekubaba_Frozen;
+}
+
+void EnDekubaba_Frozen(EnDekubaba* this, PlayState* play) {
+ if (this->timer != 0) {
+ this->timer--;
+ }
+ if (this->timer == 0) {
+ EnDekubaba_SpawnIceEffects(this, play);
+
+ if (this->actor.colChkInfo.health == 0) {
+ EnDekubaba_SetupShrinkDie(this);
+ } else if (this->actor.xzDistToPlayer < (80.0f * this->size)) {
+ EnDekubaba_SetupPrepareLunge(this);
+ } else {
+ EnDekubaba_SetupRecover(this);
+ }
+ }
+}
+
+void EnDekubaba_SetupDeadStickDrop(EnDekubaba* this, PlayState* play) {
+ Actor_SetScale(&this->actor, 0.03f);
+ this->actor.shape.rot.x -= 0x4000;
+ this->actor.shape.yOffset = 1000.0f;
+ this->actor.gravity = 0.0f;
+ this->actor.velocity.y = 0.0f;
+ this->actor.shape.shadowScale = 3.0f;
+ func_800BC154(play, &play->actorCtx, &this->actor, ACTORCAT_MISC);
+ this->actor.flags &= ~ACTOR_FLAG_20;
+ this->timer = 200;
+ this->drawDmgEffAlpha = 0.0f;
+ this->actionFunc = EnDekubaba_DeadStickDrop;
+}
+
+void EnDekubaba_DeadStickDrop(EnDekubaba* this, PlayState* play) {
+ if (this->timer != 0) {
+ this->timer--;
+ }
+
+ if (Actor_HasParent(&this->actor, play) || (this->timer == 0)) {
+ Actor_Kill(&this->actor);
+ return;
+ }
+
+ Actor_OfferGetItemNearby(&this->actor, play, GI_STICKS_1);
+}
+
+/* Update and associated functions */
+
+void EnDekubaba_UpdateDamage(EnDekubaba* this, PlayState* play) {
+ s32 newHealth;
+ s32 i;
+ ColliderJntSphElement* sphElement;
+
+ if (this->collider.base.acFlags & AC_HIT) {
+ this->collider.base.acFlags &= ~AC_HIT;
+ Actor_SetDropFlagJntSph(&this->actor, &this->collider);
+
+ if ((this->collider.base.colType != COLTYPE_HARD) &&
+ (this->actor.colChkInfo.damageEffect != DEKUBABA_DMGEFF_HOOKSHOT)) {
+ sphElement = &this->collider.elements[0];
+ for (i = 0; i < ARRAY_COUNT(this->colliderElements); i++, sphElement++) {
+ if (sphElement->info.bumperFlags & BUMP_HIT) {
+ break;
+ }
+ }
+
+ if ((i != ARRAY_COUNT(this->colliderElements)) &&
+ ((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) ||
+ (!(sphElement->info.acHitInfo->toucher.dmgFlags & 0xDB0B3)))) {
+ EnDekubaba_SpawnIceEffects(this, play);
+ newHealth = this->actor.colChkInfo.health - this->actor.colChkInfo.damage;
+
+ if (this->actionFunc != EnDekubaba_StunnedVertical) {
+ if (this->actor.colChkInfo.damageEffect == DEKUBABA_DMGEFF_ICE) {
+ EnDekubaba_SetupFrozen(this);
+ } else if (this->actor.colChkInfo.damageEffect == DEKUBABA_DMGEFF_ELECTRIC) {
+ EnDekubaba_SetupHit(this, DEKUBABA_HIT_STUN_ELECTRIC);
+ } else if (this->actor.colChkInfo.damageEffect == DEKUBABA_DMGEFF_NUT) {
+ EnDekubaba_SetupHit(this, DEKUBABA_HIT_STUN_NUT);
+ } else {
+ EnDekubaba_SetFireLightEffects(this, play, i);
+
+ if (this->actionFunc == EnDekubaba_PullBack) {
+ if (newHealth <= 0) {
+ newHealth = 1;
+ }
+
+ EnDekubaba_SetupHit(this, DEKUBABA_HIT_STUN_OTHER);
+ } else {
+ EnDekubaba_SetupHit(this, DEKUBABA_HIT_NO_STUN);
+ }
+ }
+ } else {
+ if (this->actor.colChkInfo.damageEffect == DEKUBABA_DMGEFF_CUT) {
+ if (newHealth > 0) {
+ EnDekubaba_SetupSway(this);
+ } else {
+ EnDekubaba_SetupPrunedSomersaultDie(this);
+ }
+ } else if (this->actor.colChkInfo.damageEffect == DEKUBABA_DMGEFF_ELECTRIC) {
+ EnDekubaba_SetupHit(this, DEKUBABA_HIT_STUN_ELECTRIC);
+ } else if (this->actor.colChkInfo.damageEffect == DEKUBABA_DMGEFF_NUT) {
+ EnDekubaba_SetupHit(this, DEKUBABA_HIT_STUN_NUT);
+ } else if (this->actor.colChkInfo.damageEffect == DEKUBABA_DMGEFF_ICE) {
+ EnDekubaba_SetupFrozen(this);
+ } else {
+ EnDekubaba_SetFireLightEffects(this, play, i);
+ EnDekubaba_SetupHit(this, DEKUBABA_HIT_NO_STUN);
+ }
+ }
+
+ if (newHealth < 0) {
+ this->actor.colChkInfo.health = 0;
+ } else {
+ this->actor.colChkInfo.health = newHealth;
+ }
+ } else {
+ return;
+ }
+ } else {
+ return;
+ }
+ } else if ((play->actorCtx.unk2 != 0) && (this->actor.xyzDistToPlayerSq < SQ(200.0f)) &&
+ (this->collider.base.colType != COLTYPE_HARD) && (this->actionFunc != EnDekubaba_StunnedVertical) &&
+ (this->actionFunc != EnDekubaba_Hit) && (this->actor.colChkInfo.health != 0)) {
+ this->actor.colChkInfo.health--;
+ this->actor.dropFlag = 0;
+ EnDekubaba_SetupHit(this, DEKUBABA_HIT_STUN_OTHER);
+ } else {
+ return;
+ }
+
+ if (this->actor.colChkInfo.health != 0) {
+ if ((this->timer == 2) || (this->timer == 3)) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ } else {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEKU_DAMAGE);
+ }
+ } else {
+ Enemy_StartFinishingBlow(play, &this->actor);
+
+ if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
+ this->timer = 3;
+ this->collider.base.acFlags &= ~AC_ON;
+ } else if (this->drawDmgEffAlpha > 1.5f) {
+ this->drawDmgEffAlpha = 1.5f;
+ }
+
+ if (this->actor.params == DEKUBABA_BIG) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEKU_DEAD);
+ } else {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEKU_JR_DEAD);
+ }
+ }
+}
+
+void EnDekubaba_Update(Actor* thisx, PlayState* play) {
+ s32 pad;
+ EnDekubaba* this = THIS;
+
+ if (this->collider.base.atFlags & AT_HIT) {
+ this->collider.base.atFlags &= ~AT_HIT;
+ EnDekubaba_SetupRecover(this);
+ }
+
+ EnDekubaba_UpdateDamage(this, play);
+ this->actionFunc(this, play);
+
+ if (this->actionFunc == EnDekubaba_PrunedSomersaultDie) {
+ Actor_MoveWithGravity(&this->actor);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, this->size * 15.0f, 10.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
+ } else if (this->actionFunc != EnDekubaba_DeadStickDrop) {
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
+ if (this->boundFloor == NULL) {
+ this->boundFloor = this->actor.floorPoly;
+ }
+ }
+
+ if (this->actionFunc == EnDekubaba_Lunge) {
+ CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
+ this->actor.flags |= ACTOR_FLAG_1000000;
+ }
+
+ if (this->collider.base.acFlags & AC_ON) {
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
+ }
+
+ if (this->actionFunc != EnDekubaba_DeadStickDrop) {
+ CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
+ }
+
+ if (this->drawDmgEffAlpha > 0.0f) {
+ if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
+ Math_StepToF(&this->drawDmgEffAlpha, 0.0f, 0.05f);
+ this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.375f;
+ this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 0.75f);
+ } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.75f, 0.75f / 40)) {
+ func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
+ }
+ }
+}
+
+/* Draw functions */
+
+void EnDekubaba_DrawStemRetracted(EnDekubaba* this, PlayState* play) {
+ f32 horizontalScale;
+ s32 i;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ horizontalScale = this->size * 0.01f;
+
+ Matrix_Translate(this->actor.home.pos.x, this->actor.home.pos.y + (-6.0f * this->size), this->actor.home.pos.z,
+ MTXMODE_NEW);
+ Matrix_RotateZYX(this->stemSectionAngle[0], this->actor.shape.rot.y, 0, MTXMODE_APPLY);
+ Matrix_Scale(horizontalScale, horizontalScale, horizontalScale, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gDekuBabaStemTopDL);
+
+ for (i = 1; i < ARRAY_COUNT(this->bodyPartsPos); i++) {
+ Matrix_MultZero(&this->bodyPartsPos[i]);
+ }
+
+ Actor_SetFocus(&this->actor, 0.0f);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void EnDekubaba_DrawStemExtended(EnDekubaba* this, PlayState* play) {
+ static Gfx* sStemDLists[] = { gDekuBabaStemTopDL, gDekuBabaStemMiddleDL, gDekuBabaStemBaseDL };
+ MtxF mf;
+ s32 i;
+ f32 scale;
+ f32 horizontalStepSize;
+ s32 stemSections;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ if (this->actionFunc == EnDekubaba_PrunedSomersaultDie) {
+ stemSections = 2;
+ } else {
+ stemSections = 3;
+ }
+
+ scale = this->size * 0.01f;
+ Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW);
+ Matrix_Scale(scale, scale, scale, MTXMODE_APPLY);
+ Matrix_Get(&mf);
+
+ for (i = 0; i < stemSections; i++) {
+ mf.yw += 20.0f * Math_SinS(this->stemSectionAngle[i]) * this->size;
+ horizontalStepSize = Math_CosS(this->stemSectionAngle[i]) * 20.0f * this->size;
+ mf.xw -= horizontalStepSize * Math_SinS(this->actor.shape.rot.y);
+ mf.zw -= horizontalStepSize * Math_CosS(this->actor.shape.rot.y);
+
+ Matrix_Put(&mf);
+ Matrix_RotateZYX(this->stemSectionAngle[i], this->actor.shape.rot.y, 0, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, sStemDLists[i]);
+
+ Collider_UpdateSpheres(51 + 2 * i, &this->collider);
+ Collider_UpdateSpheres(52 + 2 * i, &this->collider);
+
+ if (i == 0) {
+ if (this->actionFunc != EnDekubaba_Sway) {
+ this->actor.focus.pos.x = mf.xw;
+ this->actor.focus.pos.y = mf.yw;
+ this->actor.focus.pos.z = mf.zw;
+ } else {
+ this->actor.focus.pos.x = this->actor.home.pos.x;
+ this->actor.focus.pos.y = this->actor.home.pos.y + (40.0f * this->size);
+ this->actor.focus.pos.z = this->actor.home.pos.z;
+ }
+ }
+
+ Matrix_MultZero(&this->bodyPartsPos[i + 1]);
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void EnDekubaba_DrawStemBasePruned(EnDekubaba* this, PlayState* play) {
+ OPEN_DISPS(play->state.gfxCtx);
+
+ Matrix_RotateZYX(this->stemSectionAngle[2], this->actor.shape.rot.y, 0, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gDekuBabaStemBaseDL);
+
+ Collider_UpdateSpheres(55, &this->collider);
+ Collider_UpdateSpheres(56, &this->collider);
+
+ Matrix_MultZero(&this->bodyPartsPos[3]);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void EnDekubaba_DrawShadow(EnDekubaba* this, PlayState* play) {
+ MtxF mf;
+ f32 horizontalScale;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C448(play->state.gfxCtx);
+
+ gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, 255);
+
+ func_800C0094(this->boundFloor, this->actor.home.pos.x, this->actor.home.pos.y, this->actor.home.pos.z, &mf);
+ Matrix_Mult(&mf, MTXMODE_NEW);
+ horizontalScale = this->size * 0.15f;
+ Matrix_Scale(horizontalScale, 1.0f, horizontalScale, MTXMODE_APPLY);
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, gCircleShadowDL);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void EnDekubaba_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
+ EnDekubaba* this = THIS;
+
+ if (limbIndex == DEKUBABA_LIMB_ROOT) {
+ Collider_UpdateSpheres(limbIndex, &this->collider);
+ }
+}
+
+void EnDekubaba_Draw(Actor* thisx, PlayState* play) {
+ EnDekubaba* this = THIS;
+ f32 scale;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C28C(play->state.gfxCtx);
+ Math_Vec3f_Copy(&this->bodyPartsPos[0], &this->actor.world.pos);
+
+ if (this->actionFunc != EnDekubaba_DeadStickDrop) {
+ SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, EnDekubaba_PostLimbDraw,
+ &this->actor);
+ if (this->actionFunc == EnDekubaba_Wait) {
+ EnDekubaba_DrawStemRetracted(this, play);
+ } else {
+ EnDekubaba_DrawStemExtended(this, play);
+ }
+
+ scale = this->size * 0.01f;
+ Matrix_Translate(this->actor.home.pos.x, this->actor.home.pos.y, this->actor.home.pos.z, MTXMODE_NEW);
+ Matrix_RotateYS(this->actor.home.rot.y, MTXMODE_APPLY);
+ Matrix_Scale(scale, scale, scale, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gDekuBabaBaseLeavesDL);
+
+ if (this->actionFunc == EnDekubaba_PrunedSomersaultDie) {
+ EnDekubaba_DrawStemBasePruned(this, play);
+ }
+ if (this->boundFloor != NULL) {
+ EnDekubaba_DrawShadow(this, play);
+ }
+
+ // Display solid until 40 frames left, then blink until killed.
+ } else if ((this->timer > 40) || ((this->timer % 2) != 0)) {
+ Matrix_Translate(0.0f, 0.0f, 200.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++, gDekuBabaStickDropDL);
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+ Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos),
+ this->drawDmgEffScale * this->size, this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha,
+ this->drawDmgEffType);
+}
diff --git a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.h b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.h
index 923f336aa..b1c7f98bc 100644
--- a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.h
+++ b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.h
@@ -2,18 +2,35 @@
#define Z_EN_DEKUBABA_H
#include "global.h"
+#include "objects/object_dekubaba/object_dekubaba.h"
struct EnDekubaba;
typedef void (*EnDekubabaActionFunc)(struct EnDekubaba*, PlayState*);
+typedef enum {
+ /* 0 */ DEKUBABA_NORMAL,
+ /* 1 */ DEKUBABA_BIG
+} DekuBabaType;
+
typedef struct EnDekubaba {
/* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0x44];
+ /* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ EnDekubabaActionFunc actionFunc;
- /* 0x18C */ char unk_18C[0x290];
+ /* 0x18C */ u8 drawDmgEffType;
+ /* 0x18E */ s16 timer;
+ /* 0x190 */ s16 targetSwayAngle;
+ /* 0x192 */ s16 stemSectionAngle[3];
+ /* 0x198 */ Vec3s jointTable[DEKUBABA_LIMB_MAX];
+ /* 0x1C8 */ Vec3s morphTable[DEKUBABA_LIMB_MAX];
+ /* 0x1F8 */ f32 size;
+ /* 0x1FC */ f32 drawDmgEffAlpha;
+ /* 0x200 */ f32 drawDmgEffScale;
+ /* 0x204 */ f32 drawDmgEffFrozenSteamScale;
+ /* 0x208 */ Vec3f bodyPartsPos[4];
+ /* 0x238 */ CollisionPoly* boundFloor;
+ /* 0x23C */ ColliderJntSph collider;
+ /* 0x25C */ ColliderJntSphElement colliderElements[7];
} EnDekubaba; // size = 0x41C
-extern const ActorInit En_Dekubaba_InitVars;
-
#endif // Z_EN_DEKUBABA_H
diff --git a/src/overlays/actors/ovl_En_Dekunuts/overlay.cfg b/src/overlays/actors/ovl_En_Dekunuts/overlay.cfg
deleted file mode 100644
index dbbc3d2ed..000000000
--- a/src/overlays/actors/ovl_En_Dekunuts/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Dekunuts
-z_en_dekunuts.c
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 0f37266e2..2496a4cc2 100644
--- a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c
+++ b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c
@@ -39,7 +39,7 @@ void func_808BE4D4(EnDekunuts* this, PlayState* play);
void func_808BE680(EnDekunuts* this);
void func_808BE6C4(EnDekunuts* this, PlayState* play);
-const ActorInit En_Dekunuts_InitVars = {
+ActorInit En_Dekunuts_InitVars = {
ACTOR_EN_DEKUNUTS,
ACTORCAT_ENEMY,
FLAGS,
@@ -153,7 +153,7 @@ void func_808BD348(EnDekunuts* this) {
this->drawDmgEffAlpha = 1.0f;
this->collider.base.colType = COLTYPE_HIT3;
this->unk_190 = 80;
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 80);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 80);
}
void func_808BD3B4(EnDekunuts* this, PlayState* play) {
@@ -188,7 +188,7 @@ void func_808BD49C(EnDekunuts* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, 9.0f)) {
this->collider.base.acFlags |= AC_ON;
} else if (Animation_OnFrame(&this->skelAnime, 8.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_UP);
}
this->collider.dim.height = (s32)((CLAMP(this->skelAnime.curFrame, 9.0f, 12.0f) - 9.0f) * 9.0f) + 5;
@@ -299,7 +299,7 @@ void func_808BDA4C(EnDekunuts* this, PlayState* play) {
sp58.x = player->actor.world.pos.x;
sp58.z = player->actor.world.pos.z;
sp58.y = player->actor.world.pos.y + 40.0f;
- pitch = Actor_PitchToPoint(&this->actor, &sp58);
+ pitch = Actor_WorldPitchTowardPoint(&this->actor, &sp58);
pitch = CLAMP(pitch, -0x3800, -0x2000);
if (this->skelAnime.curFrame < 7.0f) {
Math_ScaledStepToS(&this->actor.world.rot.x, pitch, 0x800);
@@ -320,7 +320,7 @@ void func_808BDA4C(EnDekunuts* this, PlayState* play) {
if (Actor_Spawn(&play->actorCtx, play, ACTOR_EN_NUTSBALL, pos.x, pos.y, pos.z, this->actor.world.rot.x,
this->actor.shape.rot.y, 0, params) != NULL) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_THROW);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_THROW);
}
} else if ((this->unk_190 >= 2) && Animation_OnFrame(&this->skelAnime, 12.0f)) {
Animation_MorphToPlayOnce(&this->skelAnime, &gDekuScrubSpitAnim, -3.0f);
@@ -333,7 +333,7 @@ void func_808BDA4C(EnDekunuts* this, PlayState* play) {
void func_808BDC9C(EnDekunuts* this) {
Animation_MorphToPlayOnce(&this->skelAnime, &gDekuScrubBurrowAnim, -5.0f);
this->unk_190 = 0;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_DOWN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DOWN);
this->actionFunc = func_808BDD54;
}
@@ -341,7 +341,7 @@ void func_808BDCF0(EnDekunuts* this) {
Animation_MorphToPlayOnce(&this->skelAnime, &gDekuScrubBurrowAnim, -5.0f);
this->collider.base.acFlags &= ~AC_ON;
this->unk_190 = 80;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_DOWN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DOWN);
this->actionFunc = func_808BDD54;
}
@@ -369,7 +369,7 @@ void func_808BDE7C(EnDekunuts* this) {
Animation_MorphToPlayOnce(&this->skelAnime, &gDekuScrubUnburrowAnim, -3.0f);
this->collider.dim.height = 37;
this->actor.colChkInfo.mass = 50;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DAMAGE);
this->actor.world.rot.x = 0;
this->actor.flags |= ACTOR_FLAG_20;
this->collider.base.acFlags &= ~AC_ON;
@@ -405,20 +405,20 @@ void func_808BDFB8(EnDekunuts* this, PlayState* play) {
}
if (this->unk_18C != 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_WALK);
this->unk_18C = 0;
} else {
this->unk_18C = 1;
}
- Math_StepToF(&this->actor.speedXZ, 7.5f, 1.0f);
+ Math_StepToF(&this->actor.speed, 7.5f, 1.0f);
if (!Math_SmoothStepToS(&this->actor.world.rot.y, this->unk_192, 1, 0xE38, 0xB6)) {
- if (this->actor.bgCheckFlags & 0x20) {
- this->unk_192 = Actor_YawToPoint(&this->actor, &this->actor.home.pos);
- } else if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER) {
+ this->unk_192 = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
this->unk_192 = this->actor.wallYaw;
} else if (this->unk_18D == 0) {
- yaw = Actor_YawToPoint(&this->actor, &this->actor.home.pos);
+ yaw = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
yaw2 = yaw - this->actor.yawTowardsPlayer;
if (ABS_ALT(yaw2) > 0x2000) {
this->unk_192 = yaw;
@@ -431,11 +431,11 @@ void func_808BDFB8(EnDekunuts* this, PlayState* play) {
}
this->actor.shape.rot.y = BINANG_ROT180(this->actor.world.rot.y);
- if ((this->unk_18D == 0) && (Actor_XZDistanceToPoint(&this->actor, &this->actor.home.pos) < 20.0f) &&
+ if ((this->unk_18D == 0) && (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) < 20.0f) &&
(fabsf(this->actor.world.pos.y - this->actor.home.pos.y) < 2.0f)) {
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
this->actor.flags &= ~ACTOR_FLAG_20;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
func_808BDC9C(this);
} else if (this->unk_190 == 0) {
func_808BE1CC(this);
@@ -445,7 +445,7 @@ void func_808BDFB8(EnDekunuts* this, PlayState* play) {
void func_808BE1CC(EnDekunuts* this) {
Animation_PlayLoop(&this->skelAnime, &gDekuScrubPantingAnim);
this->unk_190 = 3;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->unk_18D != 0) {
this->unk_18D--;
}
@@ -468,7 +468,7 @@ void func_808BE22C(EnDekunuts* this, PlayState* play) {
void func_808BE294(EnDekunuts* this, s32 arg1) {
Animation_MorphToPlayOnce(&this->skelAnime, &gDekuScrubDamageAnim, -3.0f);
if (this->actor.params == ENDEKUNUTS_GET_FF00_0) {
- this->actor.speedXZ = 10.0f;
+ this->actor.speed = 10.0f;
if (arg1 != 0) {
func_800BE504(&this->actor, &this->collider);
}
@@ -477,20 +477,21 @@ void func_808BE294(EnDekunuts* this, s32 arg1) {
this->actor.world.rot.x = 0;
this->collider.base.acFlags &= ~AC_ON;
this->actionFunc = func_808BE358;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_DAMAGE);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_CUTBODY);
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, Animation_GetLastFrame(&gDekuScrubDamageAnim));
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_CUTBODY);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA,
+ Animation_GetLastFrame(&gDekuScrubDamageAnim));
}
void func_808BE358(EnDekunuts* this, PlayState* play) {
- Math_StepToF(&this->actor.speedXZ, 0.0f, 1.0f);
+ Math_StepToF(&this->actor.speed, 0.0f, 1.0f);
if (SkelAnime_Update(&this->skelAnime)) {
func_808BE484(this);
}
}
void func_808BE3A8(EnDekunuts* this) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->actor.velocity.y > 0.0f) {
this->actor.velocity.y = 0.0f;
}
@@ -520,8 +521,8 @@ void func_808BE3FC(EnDekunuts* this, PlayState* play) {
void func_808BE484(EnDekunuts* this) {
Animation_PlayOnce(&this->skelAnime, &gDekuScrubDieAnim);
this->actionFunc = func_808BE4D4;
- this->actor.speedXZ = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_DEAD);
+ this->actor.speed = 0.0f;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DEAD);
}
void func_808BE4D4(EnDekunuts* this, PlayState* play) {
@@ -544,7 +545,7 @@ void func_808BE4D4(EnDekunuts* this, PlayState* play) {
DEKU_FLOWER_PARAMS(DEKU_FLOWER_TYPE_PINK_WITH_INITIAL_BOUNCE));
EffectSsHahen_SpawnBurst(play, &this->actor.home.pos, 6.0f, 0, 6, 2, 15, OBJECT_DEKUNUTS, 10,
gDekuScrubFlowerFragmentDL);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -593,8 +594,8 @@ void func_808BE73C(EnDekunuts* this, PlayState* play) {
if (this->actor.colChkInfo.damageEffect == 1) {
this->unk_190 = 40;
- Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
func_808BE3A8(this);
return;
}
@@ -642,7 +643,9 @@ void EnDekunuts_Update(Actor* thisx, PlayState* play) {
func_808BE73C(this, play);
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, this->collider.dim.radius, this->collider.dim.height, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, this->collider.dim.radius, this->collider.dim.height,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
Collider_UpdateCylinder(&this->actor, &this->collider);
if (this->collider.base.acFlags & AC_ON) {
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 596369c62..59b6677a0 100644
--- a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.h
+++ b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.h
@@ -8,13 +8,13 @@ struct EnDekunuts;
typedef void (*EnDekunutsActionFunc)(struct EnDekunuts*, PlayState*);
-#define ENDEKUNUTS_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF);
+#define ENDEKUNUTS_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF)
enum {
- /* 0x0 */ ENDEKUNUTS_GET_FF00_0,
- /* 0x1 */ ENDEKUNUTS_GET_FF00_1,
- /* 0x2 */ ENDEKUNUTS_GET_FF00_2,
- /* 0xFF*/ ENDEKUNUTS_GET_FF00_FF = 0xFF,
+ /* 0x00 */ ENDEKUNUTS_GET_FF00_0,
+ /* 0x01 */ ENDEKUNUTS_GET_FF00_1,
+ /* 0x02 */ ENDEKUNUTS_GET_FF00_2,
+ /* 0xFF */ ENDEKUNUTS_GET_FF00_FF = 0xFF
};
typedef struct EnDekunuts {
@@ -36,6 +36,4 @@ typedef struct EnDekunuts {
/* 0x27C */ ColliderCylinder collider;
} EnDekunuts; // size = 0x2C8
-extern const ActorInit En_Dekunuts_InitVars;
-
#endif // Z_EN_DEKUNUTS_H
diff --git a/src/overlays/actors/ovl_En_Demo_heishi/overlay.cfg b/src/overlays/actors/ovl_En_Demo_heishi/overlay.cfg
deleted file mode 100644
index bff118f72..000000000
--- a/src/overlays/actors/ovl_En_Demo_heishi/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Demo_heishi
-z_en_demo_heishi.c
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 47e11a2e8..986953d0f 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
@@ -30,7 +30,7 @@ typedef enum {
/* 4 */ DEMOHEISHI_ANIM_STAND_UP
} EnDemoheishiAnimation;
-const ActorInit En_Demo_heishi_InitVars = {
+ActorInit En_Demo_heishi_InitVars = {
ACTOR_EN_DEMO_HEISHI,
ACTORCAT_NPC,
FLAGS,
@@ -125,7 +125,7 @@ void EnDemoheishi_Idle(EnDemoheishi* this, PlayState* play) {
s32 absYawDiff;
s16 yawDiff;
- this->actor.flags &= ~ACTOR_FLAG_8000000;
+ this->actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON;
yawDiff = this->actor.yawTowardsPlayer - this->actor.world.rot.y;
absYawDiff = ABS_ALT(yawDiff);
@@ -143,7 +143,7 @@ void EnDemoheishi_SetupTalk(EnDemoheishi* this) {
void EnDemoheishi_Talk(EnDemoheishi* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
EnDemoheishi_SetupIdle(this);
}
}
@@ -160,7 +160,9 @@ void EnDemoheishi_Update(Actor* thisx, PlayState* play) {
this->actor.shape.rot.y = this->actor.world.rot.y;
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
Actor_SetScale(&this->actor, 0.01f);
EnDemoheishi_SetHeadRotation(this);
diff --git a/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.h b/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.h
index c14fa5326..9d9714b95 100644
--- a/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.h
+++ b/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.h
@@ -26,8 +26,6 @@ typedef struct EnDemoheishi {
/* 0x270 */ s16 isTalking;
/* 0x272 */ s16 textIdIndex;
/* 0x274 */ ColliderCylinder colliderCylinder;
-} EnDemoheishi; //size = 0x2C0
-
-extern const ActorInit En_Demo_heishi_InitVars;
+} EnDemoheishi; // size = 0x2C0
#endif // Z_EN_DEMO_HEISHI_H
diff --git a/src/overlays/actors/ovl_En_Dg/overlay.cfg b/src/overlays/actors/ovl_En_Dg/overlay.cfg
deleted file mode 100644
index b9e928116..000000000
--- a/src/overlays/actors/ovl_En_Dg/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Dg
-z_en_dg.c
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 de2c586e9..360cf2c49 100644
--- a/src/overlays/actors/ovl_En_Dg/z_en_dg.c
+++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.c
@@ -10,6 +10,8 @@
#define THIS ((EnDg*)thisx)
+//! TODO: this file require macros for its uses of weekEventReg
+
void EnDg_Init(Actor* thisx, PlayState* play);
void EnDg_Destroy(Actor* thisx, PlayState* play);
void EnDg_Update(Actor* thisx, PlayState* play);
@@ -36,7 +38,7 @@ void EnDg_Thrown(EnDg* this, PlayState* play);
void EnDg_SetupTalk(EnDg* this, PlayState* play);
void EnDg_Talk(EnDg* this, PlayState* play);
-const ActorInit En_Dg_InitVars = {
+ActorInit En_Dg_InitVars = {
ACTOR_EN_DG,
ACTORCAT_ENEMY,
FLAGS,
@@ -235,7 +237,7 @@ void EnDg_UpdateCollision(EnDg* this, PlayState* play) {
Collider_ResetCylinderOC(play, &this->collider.base);
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 26.0f, 10.0f, 0.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 26.0f, 10.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
}
void EnDg_GetFloorRot(EnDg* this, Vec3f* floorRot) {
@@ -250,8 +252,8 @@ void EnDg_GetFloorRot(EnDg* this, Vec3f* floorRot) {
sinf(0.0f);
cosf(0.0f);
- floorRot->x = -Math_Acot2F(1.0f, -nz * ny);
- floorRot->z = Math_Acot2F(1.0f, -nx * ny);
+ floorRot->x = -Math_Atan2F_XY(1.0f, -nz * ny);
+ floorRot->z = Math_Atan2F_XY(1.0f, -nx * ny);
}
}
@@ -279,7 +281,7 @@ s32 EnDg_HasReachedPoint(EnDg* this, Path* path, s32 pointIndex) {
diffZ = points[currentPoint + 1].z - points[currentPoint - 1].z;
}
- func_8017B7F8(&point, RADF_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d);
+ func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d);
if (((this->actor.world.pos.x * px) + (pz * this->actor.world.pos.z) + d) > 0.0f) {
reached = true;
@@ -308,7 +310,7 @@ s16 EnDg_GetYRotation(Path* path, s32 index, Vec3f* pos, f32* distSq) {
*distSq = SQ(diffX) + SQ(diffZ);
- return RADF_TO_BINANG(Math_Acot2F(diffZ, diffX));
+ return RAD_TO_BINANG(Math_Atan2F_XY(diffZ, diffX));
}
/**
@@ -320,7 +322,7 @@ void EnDg_MoveAlongPath(EnDg* this, PlayState* play) {
if (this->path != NULL) {
yRotation = EnDg_GetYRotation(this->path, this->currentPoint, &this->actor.world.pos, &distSq);
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
yRotation = this->actor.wallYaw;
}
@@ -336,24 +338,24 @@ void EnDg_MoveAlongPath(EnDg* this, PlayState* play) {
if ((this->index == ENDG_INDEX_SWAMP_SPIDER_HOUSE) ||
((this->index == ENDG_INDEX_ROMANI_RANCH) && (play->sceneId == SCENE_OMOYA))) {
- Math_ApproachF(&this->actor.speedXZ, 1.0f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 1.0f, 0.2f, 1.0f);
} else if (this->index == ENDG_INDEX_ROMANI_RANCH) {
- Math_ApproachF(&this->actor.speedXZ, 3.5f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 3.5f, 0.2f, 1.0f);
} else if (play->sceneId == SCENE_CLOCKTOWER) {
- Math_ApproachF(&this->actor.speedXZ, 3.5f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 3.5f, 0.2f, 1.0f);
} else if (sRacetrackDogInfo[this->index].textId & 0x11) {
- Math_ApproachF(&this->actor.speedXZ, 1.0f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 1.0f, 0.2f, 1.0f);
} else {
- Math_ApproachF(&this->actor.speedXZ, 3.5f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 3.5f, 0.2f, 1.0f);
}
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
void EnDg_SpawnFloorDustRing(EnDg* this, PlayState* play) {
s16 curFrame = this->skelAnime.curFrame;
- s16 mod = (this->actor.speedXZ > 6.0f) ? 2 : 3;
+ s16 mod = (this->actor.speed > 6.0f) ? 2 : 3;
Vec3f pos;
if (((this->index + curFrame) % mod) == 0) {
@@ -366,36 +368,36 @@ void EnDg_SpawnFloorDustRing(EnDg* this, PlayState* play) {
void EnDg_PlaySfxWalk(EnDg* this) {
if (Animation_OnFrame(&this->skelAnime, 1.0f) || Animation_OnFrame(&this->skelAnime, 7.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_MONKEY_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_MONKEY_WALK);
}
}
void EnDg_PlaySfxBark(EnDg* this, f32 frame) {
if (Animation_OnFrame(&this->skelAnime, frame)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SMALL_DOG_BARK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SMALL_DOG_BARK);
}
}
void EnDg_PlaySfxAngryBark(EnDg* this, f32 frame) {
if (Animation_OnFrame(&this->skelAnime, frame)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SMALL_DOG_ANG_BARK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SMALL_DOG_ANG_BARK);
}
}
void EnDg_PlaySfxWhine(EnDg* this) {
if (Animation_OnFrame(&this->skelAnime, 23.0f) || Animation_OnFrame(&this->skelAnime, 28.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SMALL_DOG_WHINE);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SMALL_DOG_WHINE);
}
}
void EnDg_PlaySfxGrowl(EnDg* this, f32 frame) {
if (Animation_OnFrame(&this->skelAnime, frame)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SMALL_DOG_GROAN);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SMALL_DOG_GROAN);
}
}
void EnDg_SetupIdleMove(EnDg* this, PlayState* play) {
- if (!(this->actor.bgCheckFlags & 0x20)) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_WATER)) {
if ((this->index == ENDG_INDEX_SWAMP_SPIDER_HOUSE) ||
((this->index == ENDG_INDEX_ROMANI_RANCH) && (play->sceneId == SCENE_OMOYA))) {
EnDg_ChangeAnim(&this->skelAnime, sAnimationInfo, DOG_ANIM_WALK);
@@ -424,13 +426,13 @@ void EnDg_UpdateTextId(EnDg* this) {
// the range of 0x3538 to 0x3545.
if (this->index % 2) {
sRacetrackDogInfo[this->index].textId =
- 0x3538 + ((gSaveContext.save.weekEventReg[42 + (this->index / 2)] & 0xF0) >> 4);
+ 0x3538 + ((gSaveContext.save.saveInfo.weekEventReg[42 + (this->index / 2)] & 0xF0) >> 4);
} else {
sRacetrackDogInfo[this->index].textId =
- 0x3538 + (gSaveContext.save.weekEventReg[42 + (this->index / 2)] & 0x0F);
+ 0x3538 + (gSaveContext.save.saveInfo.weekEventReg[42 + (this->index / 2)] & 0x0F);
}
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
// As a sanity check, this makes sure the text ID is something in the expected range of 0x3538 to 0x3546.
@@ -471,26 +473,26 @@ void EnDg_StartTextBox(EnDg* this, PlayState* play) {
*/
void EnDg_TryPickUp(EnDg* this, PlayState* play) {
if (sIsAnyDogHeld && !(this->dogFlags & DOG_FLAG_HELD)) {
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->dogFlags |= DOG_FLAG_HELD;
} else if (!sIsAnyDogHeld && (this->dogFlags & DOG_FLAG_HELD)) {
- this->actor.flags &= ~ACTOR_FLAG_8000000;
+ this->actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON;
this->dogFlags &= ~DOG_FLAG_HELD;
}
if (Actor_HasParent(&this->actor, play)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SMALL_DOG_BARK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SMALL_DOG_BARK);
this->grabState = DOG_GRAB_STATE_HELD;
sSelectedRacetrackDogInfo = sRacetrackDogInfo[this->index];
if (!sIsAnyDogHeld) {
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
sIsAnyDogHeld = true;
this->dogFlags |= DOG_FLAG_HELD;
}
EnDg_ChangeAnim(&this->skelAnime, sAnimationInfo, DOG_ANIM_SIT_DOWN);
this->actor.flags &= ~ACTOR_FLAG_1;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (Player_GetMask(play) == PLAYER_MASK_TRUTH) {
this->actor.flags |= ACTOR_FLAG_10000;
func_800B8614(&this->actor, play, 100.0f);
@@ -499,7 +501,7 @@ void EnDg_TryPickUp(EnDg* this, PlayState* play) {
this->actionFunc = EnDg_Held;
}
} else {
- Actor_LiftActor(&this->actor, play);
+ Actor_OfferCarry(&this->actor, play);
}
}
@@ -547,7 +549,7 @@ s32 EnDg_FindFollowerForBremenMask(PlayState* play) {
void EnDg_CheckForBremenMaskMarch(EnDg* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (player->stateFlags3 & 0x20000000) { // bremen mask march
+ if (player->stateFlags3 & PLAYER_STATE3_20000000) {
if (sBremenMaskFollowerIndex == ENDG_INDEX_NO_BREMEN_MASK_FOLLOWER) {
EnDg_FindFollowerForBremenMask(play);
}
@@ -560,7 +562,7 @@ void EnDg_CheckForBremenMaskMarch(EnDg* this, PlayState* play) {
} else if ((this->actionFunc == EnDg_ApproachPlayer) || (this->actionFunc == EnDg_SitNextToPlayer)) {
if (DECR(this->bremenBarkTimer) == 0) {
this->bremenBarkTimer = 10;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SMALL_DOG_BARK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SMALL_DOG_BARK);
}
}
}
@@ -606,7 +608,7 @@ s32 EnDg_ShouldReactToNonHumanPlayer(EnDg* this, PlayState* play) {
void EnDg_ChooseActionForForm(EnDg* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (!(this->actor.bgCheckFlags & 0x20)) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_WATER)) {
switch (player->transformation) {
case PLAYER_FORM_HUMAN:
if (this->behavior != DOG_BEHAVIOR_HUMAN) {
@@ -618,7 +620,7 @@ void EnDg_ChooseActionForForm(EnDg* this, PlayState* play) {
case PLAYER_FORM_ZORA:
this->dogFlags &= ~DOG_FLAG_JUMP_ATTACKING;
- if ((this->behavior != DOG_BEHAVIOR_ZORA) && (player->actor.speedXZ > 1.0f)) {
+ if ((this->behavior != DOG_BEHAVIOR_ZORA) && (player->actor.speed > 1.0f)) {
this->behavior = DOG_BEHAVIOR_ZORA;
EnDg_ChangeAnim(&this->skelAnime, sAnimationInfo, DOG_ANIM_RUN);
this->actionFunc = EnDg_ApproachPlayer;
@@ -632,7 +634,7 @@ void EnDg_ChooseActionForForm(EnDg* this, PlayState* play) {
case PLAYER_FORM_GORON:
this->dogFlags &= ~DOG_FLAG_JUMP_ATTACKING;
- if ((this->behavior != DOG_BEHAVIOR_GORON) && (player->actor.speedXZ > 1.0f)) {
+ if ((this->behavior != DOG_BEHAVIOR_GORON) && (player->actor.speed > 1.0f)) {
this->behavior = DOG_BEHAVIOR_GORON;
EnDg_ChangeAnim(&this->skelAnime, sAnimationInfo, DOG_ANIM_WALK_BACKWARDS);
this->timer = 50;
@@ -647,7 +649,7 @@ void EnDg_ChooseActionForForm(EnDg* this, PlayState* play) {
case PLAYER_FORM_DEKU:
this->dogFlags &= ~DOG_FLAG_JUMP_ATTACKING;
- if ((this->behavior != DOG_BEHAVIOR_DEKU) && (player->actor.speedXZ > 1.0f)) {
+ if ((this->behavior != DOG_BEHAVIOR_DEKU) && (player->actor.speed > 1.0f)) {
this->behavior = DOG_BEHAVIOR_DEKU;
EnDg_ChangeAnim(&this->skelAnime, sAnimationInfo, DOG_ANIM_RUN);
this->actionFunc = EnDg_ApproachPlayerToAttack;
@@ -678,7 +680,7 @@ void EnDg_IdleMove(EnDg* this, PlayState* play) {
EnDg_CheckForBremenMaskMarch(this, play);
EnDg_PlaySfxWalk(this);
- if (!(this->actor.bgCheckFlags & 1)) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
this->actionFunc = EnDg_Fall;
}
@@ -702,7 +704,7 @@ void EnDg_IdleBark(EnDg* this, PlayState* play) {
EnDg_PlaySfxBark(this, 13.0f);
EnDg_PlaySfxBark(this, 19.0f);
- if (!(this->actor.bgCheckFlags & 1)) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
this->actionFunc = EnDg_Fall;
}
@@ -726,12 +728,12 @@ void EnDg_BackAwayFromGoron(EnDg* this, PlayState* play) {
this->actionFunc = EnDg_RunAwayFromGoron;
} else {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 4, 0x3E8, 1);
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
this->actor.shape.rot.y = this->actor.wallYaw;
}
this->actor.world.rot.y = this->actor.shape.rot.y;
- Math_ApproachF(&this->actor.speedXZ, -1.5f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, -1.5f, 0.2f, 1.0f);
Actor_MoveWithGravity(&this->actor);
}
@@ -750,7 +752,7 @@ void EnDg_RunAwayFromGoron(EnDg* this, PlayState* play) {
if (this->actor.xzDistToPlayer < 250.0f) {
Math_ApproachS(&this->actor.shape.rot.y, -this->actor.yawTowardsPlayer, 4, 0xC00);
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
yRotation = this->actor.wallYaw;
} else {
yRotation = 0;
@@ -758,27 +760,27 @@ void EnDg_RunAwayFromGoron(EnDg* this, PlayState* play) {
Math_SmoothStepToS(&this->actor.world.rot.y, yRotation, 4, 0x3E8, 1);
this->actor.world.rot.y = this->actor.shape.rot.y;
- if (player->actor.speedXZ != 0.0f) {
- Math_ApproachF(&this->actor.speedXZ, player->actor.speedXZ, 0.2f, 1.0f);
+ if (player->actor.speed != 0.0f) {
+ Math_ApproachF(&this->actor.speed, player->actor.speed, 0.2f, 1.0f);
} else {
- Math_ApproachF(&this->actor.speedXZ, 3.5f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 3.5f, 0.2f, 1.0f);
}
} else {
EnDg_ChangeAnim(&this->skelAnime, sAnimationInfo, DOG_ANIM_BARK);
this->actionFunc = EnDg_BarkAtGoron;
}
- if (this->actor.speedXZ > 7.0f) {
- this->actor.speedXZ = 7.0f;
+ if (this->actor.speed > 7.0f) {
+ this->actor.speed = 7.0f;
}
Actor_MoveWithGravity(&this->actor);
EnDg_PlaySfxWalk(this);
if (Animation_OnFrame(&this->skelAnime, 3.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SMALL_DOG_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SMALL_DOG_CRY);
} else if (Animation_OnFrame(&this->skelAnime, 6.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_MONKEY_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_MONKEY_WALK);
}
}
@@ -803,13 +805,13 @@ void EnDg_ApproachPlayerToAttack(EnDg* this, PlayState* play) {
this->actor.velocity.y = 0.0f;
this->actor.gravity = -3.0f;
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
this->actor.shape.rot.y = this->actor.wallYaw;
}
this->actor.world.rot.y = this->actor.shape.rot.y;
if (this->actor.xzDistToPlayer < 70.0f) {
- Math_ApproachZeroF(&this->actor.speedXZ, 0.2f, 1.0f);
+ Math_ApproachZeroF(&this->actor.speed, 0.2f, 1.0f);
if (Animation_OnFrame(&this->skelAnime, 7.0f)) {
s16 yawDiff = ABS_ALT(player->actor.shape.rot.y - this->actor.shape.rot.y);
@@ -825,7 +827,7 @@ void EnDg_ApproachPlayerToAttack(EnDg* this, PlayState* play) {
}
} else {
Math_ApproachS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 4, 0xC00);
- Math_ApproachF(&this->actor.speedXZ, 5.0f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 5.0f, 0.2f, 1.0f);
}
Actor_MoveWithGravity(&this->actor);
@@ -839,7 +841,7 @@ void EnDg_ApproachPlayerToAttack(EnDg* this, PlayState* play) {
*/
void EnDg_RunAfterAttacking(EnDg* this, PlayState* play) {
this->dogFlags &= ~DOG_FLAG_BOUNCED;
- Math_ApproachF(&this->actor.speedXZ, 3.5f, 0.1f, 0.5f);
+ Math_ApproachF(&this->actor.speed, 3.5f, 0.1f, 0.5f);
Actor_MoveWithGravity(&this->actor);
if (DECR(this->attackTimer) == 0) {
this->attackTimer = 20;
@@ -857,7 +859,7 @@ void EnDg_RunAfterAttacking(EnDg* this, PlayState* play) {
void EnDg_SitNextToPlayer(EnDg* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (!(this->actor.bgCheckFlags & 1)) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
this->actionFunc = EnDg_Fall;
}
@@ -865,7 +867,7 @@ void EnDg_SitNextToPlayer(EnDg* this, PlayState* play) {
Math_ApproachS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 4, 0xC00);
this->actor.world.rot.y = this->actor.shape.rot.y;
} else {
- if (player->stateFlags3 & 0x20000000) { // bremen mask march
+ if (player->stateFlags3 & PLAYER_STATE3_20000000) {
EnDg_ChangeAnim(&this->skelAnime, sAnimationInfo, DOG_ANIM_WALK);
} else {
EnDg_ChangeAnim(&this->skelAnime, sAnimationInfo, DOG_ANIM_RUN);
@@ -891,7 +893,7 @@ void EnDg_JumpAttack(EnDg* this, PlayState* play) {
this->dogFlags &= ~DOG_FLAG_JUMP_ATTACKING;
this->dogFlags |= DOG_FLAG_BOUNCED;
this->collider.base.atFlags &= ~AT_BOUNCED;
- this->actor.speedXZ *= -1.0f;
+ this->actor.speed *= -1.0f;
EnDg_ChangeAnim(&this->skelAnime, sAnimationInfo, DOG_ANIM_RUN);
this->actionFunc = EnDg_RunAfterAttacking;
return;
@@ -917,9 +919,9 @@ void EnDg_JumpAttack(EnDg* this, PlayState* play) {
sAnimationInfo[DOG_ANIM_JUMP_ATTACK].playSpeed = 1.2f;
this->actor.velocity.y = 2.0f * rand + 3.0f;
- this->actor.speedXZ = 8.0f + rand;
+ this->actor.speed = 8.0f + rand;
} else if (curFrame > 20) {
- Math_ApproachF(&this->actor.speedXZ, 2.5f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 2.5f, 0.2f, 1.0f);
}
if (curFrame > 23) {
@@ -947,7 +949,7 @@ void EnDg_WalkToPlayer(EnDg* this, PlayState* play) {
} else {
Math_ApproachS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 4, 0xC00);
this->actor.world.rot.y = this->actor.shape.rot.y;
- Math_ApproachF(&this->actor.speedXZ, 2.0f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 2.0f, 0.2f, 1.0f);
Actor_MoveWithGravity(&this->actor);
}
@@ -958,13 +960,13 @@ void EnDg_WalkToPlayer(EnDg* this, PlayState* play) {
void EnDg_SetupBremenMaskApproachPlayer(EnDg* this, PlayState* play) {
if (func_801A46F8() == 1) {
this->bremenBarkTimer = 10;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SMALL_DOG_BARK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SMALL_DOG_BARK);
this->actionFunc = EnDg_ApproachPlayer;
}
}
void EnDg_Fall(EnDg* this, PlayState* play) {
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
EnDg_ChangeAnim(&this->skelAnime, sAnimationInfo, DOG_ANIM_RUN);
this->actionFunc = EnDg_IdleMove;
}
@@ -992,14 +994,14 @@ void EnDg_ApproachPlayer(EnDg* this, PlayState* play) {
if (this->actor.xzDistToPlayer < 40.0f) {
EnDg_ChangeAnim(&this->skelAnime, sAnimationInfo, DOG_ANIM_SIT_DOWN);
this->actionFunc = EnDg_SitNextToPlayer;
- } else if (player->stateFlags3 & 0x20000000) { // bremen mask march
+ } else if (player->stateFlags3 & PLAYER_STATE3_20000000) {
if ((this->actor.xzDistToPlayer > 40.0f) && (player->linearVelocity == 0.0f)) {
- Math_ApproachF(&this->actor.speedXZ, 1.5f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 1.5f, 0.2f, 1.0f);
} else {
- Math_ApproachF(&this->actor.speedXZ, player->actor.speedXZ, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, player->actor.speed, 0.2f, 1.0f);
}
} else {
- Math_ApproachF(&this->actor.speedXZ, 3.5f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 3.5f, 0.2f, 1.0f);
}
EnDg_CheckForBremenMaskMarch(this, play);
@@ -1024,14 +1026,14 @@ void EnDg_SlowlyBackUpBeforeAttacking(EnDg* this, PlayState* play) {
}
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 4, 0x3E8, 1);
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
this->actor.shape.rot.y = this->actor.wallYaw;
EnDg_ChangeAnim(&this->skelAnime, sAnimationInfo, DOG_ANIM_JUMP_ATTACK);
this->actionFunc = EnDg_JumpAttack;
}
this->actor.world.rot.y = this->actor.shape.rot.y;
- Math_ApproachF(&this->actor.speedXZ, -1.0f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, -1.0f, 0.2f, 1.0f);
Actor_MoveWithGravity(&this->actor);
EnDg_PlaySfxWalk(this);
EnDg_PlaySfxGrowl(this, 4.0f);
@@ -1052,17 +1054,17 @@ void EnDg_BackAwayFromPlayer(EnDg* this, PlayState* play) {
this->actionFunc = EnDg_BarkAtPlayer;
} else {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 4, 0x3E8, 1);
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
this->actor.shape.rot.y = this->actor.wallYaw;
}
this->actor.world.rot.y = this->actor.shape.rot.y;
- Math_ApproachF(&this->actor.speedXZ, -2.0f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, -2.0f, 0.2f, 1.0f);
Actor_MoveWithGravity(&this->actor);
}
EnDg_PlaySfxWalk(this);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SMALL_DOG_GROAN);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SMALL_DOG_GROAN);
}
/**
@@ -1104,11 +1106,11 @@ void EnDg_SetupSwim(EnDg* this, PlayState* play) {
this->actor.gravity = 0.0f;
this->actor.velocity.y = -3.0f;
this->swimTimer = 10;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOMB_DROP_WATER);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BOMB_DROP_WATER);
this->actionFunc = EnDg_Swim;
}
- Math_ApproachF(&this->actor.speedXZ, 1.0f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 1.0f, 0.2f, 1.0f);
Actor_MoveWithGravity(&this->actor);
}
@@ -1136,7 +1138,7 @@ void EnDg_Swim(EnDg* this, PlayState* play) {
if (DECR(this->swimTimer) == 0) {
if (!(this->dogFlags & DOG_FLAG_SWIMMING)) {
this->dogFlags |= DOG_FLAG_SWIMMING;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_OUT_OF_WATER);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_OUT_OF_WATER);
}
this->swimTimer = 5;
@@ -1156,7 +1158,7 @@ void EnDg_Swim(EnDg* this, PlayState* play) {
// over. For example, if the player throws the dog at a tall wall next to some water,
// this code will make the dog "skip" along the water's surface, assuming the floor
// height is low enough to make it try to jump out.
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
if (!WaterBox_GetSurface1(play, &play->colCtx, pos.x, pos.z, &waterSurface, &waterBox)) {
if (floorHeight > -100.0f) {
this->dogFlags &= ~DOG_FLAG_SWIMMING;
@@ -1174,20 +1176,20 @@ void EnDg_Swim(EnDg* this, PlayState* play) {
} else {
yRotation = this->actor.wallYaw;
}
- } else if ((this->actor.bgCheckFlags & 1) && !(this->actor.bgCheckFlags & 0x20)) {
+ } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && !(this->actor.bgCheckFlags & BGCHECKFLAG_WATER)) {
this->actor.gravity = -3.0f;
this->dogFlags &= ~DOG_FLAG_SWIMMING;
this->behavior = DOG_BEHAVIOR_DEFAULT;
this->timer = Rand_S16Offset(60, 60);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_OUT_OF_WATER);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_OUT_OF_WATER);
EnDg_ChangeAnim(&this->skelAnime, sAnimationInfo, DOG_ANIM_RUN);
- Math_ApproachF(&this->actor.speedXZ, 3.5f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 3.5f, 0.2f, 1.0f);
this->actionFunc = EnDg_IdleMove;
}
Math_SmoothStepToS(&this->actor.world.rot.y, yRotation, 4, 0x3E8, 1);
this->actor.shape.rot.y = this->actor.world.rot.y;
- Math_ApproachF(&this->actor.speedXZ, 0.5f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 0.5f, 0.2f, 1.0f);
Actor_MoveWithGravity(&this->actor);
}
@@ -1214,23 +1216,23 @@ void EnDg_JumpOutOfWater(EnDg* this, PlayState* play) {
this->actor.velocity.y = -1.0f;
}
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
this->actor.world.pos.y = pos.y;
this->actor.velocity.y = 10.0f;
EffectSsGSplash_Spawn(play, &pos, NULL, NULL, 0, 800);
}
- if (!(this->actor.bgCheckFlags & 0x20)) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_WATER)) {
this->behavior = DOG_BEHAVIOR_DEFAULT;
this->actor.velocity.y = 10.0f;
this->actor.gravity = -3.0f;
this->timer = Rand_S16Offset(60, 60);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_OUT_OF_WATER);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_OUT_OF_WATER);
EnDg_ChangeAnim(&this->skelAnime, sAnimationInfo, DOG_ANIM_RUN);
this->actionFunc = EnDg_IdleMove;
- Math_ApproachF(&this->actor.speedXZ, 3.5f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 3.5f, 0.2f, 1.0f);
} else {
- Math_ApproachF(&this->actor.speedXZ, 0.5f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 0.5f, 0.2f, 1.0f);
}
Actor_MoveWithGravity(&this->actor);
@@ -1241,7 +1243,7 @@ void EnDg_Held(EnDg* this, PlayState* play) {
this->grabState = DOG_GRAB_STATE_THROWN_OR_SITTING_AFTER_THROW;
this->actor.flags |= ACTOR_FLAG_1;
if (sIsAnyDogHeld) {
- this->actor.flags &= ~ACTOR_FLAG_8000000;
+ this->actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON;
sIsAnyDogHeld = false;
this->dogFlags &= ~DOG_FLAG_HELD;
}
@@ -1258,13 +1260,13 @@ void EnDg_Held(EnDg* this, PlayState* play) {
void EnDg_Thrown(EnDg* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
if (this->dogFlags & DOG_FLAG_THROWN) {
this->dogFlags &= ~DOG_FLAG_THROWN;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_MONKEY_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_MONKEY_WALK);
}
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.gravity = -3.0f;
if (player->transformation == PLAYER_FORM_HUMAN) {
EnDg_TryPickUp(this, play);
@@ -1340,7 +1342,7 @@ void EnDg_Update(Actor* thisx, PlayState* play) {
Vec3f floorRot = { 0.0f, 0.0f, 0.0f };
this->selectedDogIndex = sSelectedRacetrackDogInfo.index;
- if (!(player->stateFlags1 & 0x20) || (play->sceneId != SCENE_CLOCKTOWER)) {
+ if (!(player->stateFlags1 & PLAYER_STATE1_20) || (play->sceneId != SCENE_CLOCKTOWER)) {
if (EnDg_ShouldReactToNonHumanPlayer(this, play)) {
EnDg_ChooseActionForForm(this, play);
} else if (this->behavior != DOG_BEHAVIOR_DEFAULT) {
@@ -1348,7 +1350,7 @@ void EnDg_Update(Actor* thisx, PlayState* play) {
EnDg_SetupIdleMove(this, play);
}
- if ((this->actor.bgCheckFlags & 0x40) && Actor_HasNoParent(&this->actor, play)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) && Actor_HasNoParent(&this->actor, play)) {
EnDg_ChangeAnim(&this->skelAnime, sAnimationInfo, DOG_ANIM_SWIM);
this->actionFunc = EnDg_SetupSwim;
}
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 2b2bdd7cb..62c01a011 100644
--- a/src/overlays/actors/ovl_En_Dg/z_en_dg.h
+++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.h
@@ -65,6 +65,4 @@ typedef struct EnDg {
/* 0x294 */ Vec3f curRot;
} EnDg; // size = 0x2A0
-extern const ActorInit En_Dg_InitVars;
-
#endif // Z_EN_DG_H
diff --git a/src/overlays/actors/ovl_En_Dinofos/overlay.cfg b/src/overlays/actors/ovl_En_Dinofos/overlay.cfg
deleted file mode 100644
index 61af26795..000000000
--- a/src/overlays/actors/ovl_En_Dinofos/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Dinofos
-z_en_dinofos.c
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 506e5eb47..535b0d65f 100644
--- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c
+++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c
@@ -57,7 +57,7 @@ void func_8089C398(EnDinofos* this);
void func_8089C164(EnDinofos* this);
void func_8089C244(EnDinofos* this);
-const ActorInit En_Dinofos_InitVars = {
+ActorInit En_Dinofos_InitVars = {
ACTOR_EN_DINOFOS,
ACTORCAT_ENEMY,
FLAGS,
@@ -248,7 +248,7 @@ static TexturePtr D_8089E33C[] = {
object_dinofos_Tex_009030,
};
-static s16 D_8089E34C = -1;
+static s16 sCsId = CS_ID_NONE;
static s32 D_8089E350 = 0;
static InitChainEntry sInitChain[] = {
@@ -291,13 +291,13 @@ void EnDinofos_Init(Actor* thisx, PlayState* play) {
}
this->unk_28B = 0;
- if (thisx->cutscene == -1) {
+ if (thisx->csId == CS_ID_NONE) {
func_8089B7B0(this);
} else {
this->actor.flags |= ACTOR_FLAG_100000;
this->actor.gravity = 0.0f;
this->actor.velocity.y = 0.0f;
- D_8089E34C = thisx->cutscene;
+ sCsId = thisx->csId;
func_8089D2E0(this);
}
@@ -367,9 +367,9 @@ void func_8089ABF4(EnDinofos* this, PlayState* play) {
Play_SetCameraAtEye(play, CAM_ID_MAIN, &subCam->at, &subCam->eye);
this->subCamId = SUB_CAM_ID_DONE;
- ActorCutscene_Stop(this->actor.cutscene);
+ CutsceneManager_Stop(this->actor.csId);
if (this->actor.colChkInfo.health == 0) {
- func_800B724C(play, &this->actor, 6);
+ func_800B724C(play, &this->actor, PLAYER_CSMODE_END);
}
}
}
@@ -382,7 +382,7 @@ void func_8089AC70(EnDinofos* this) {
this->drawDmgEffAlpha = 1.0f;
this->unk_290 = 80;
this->actor.flags &= ~ACTOR_FLAG_400;
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 80);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 80);
}
void func_8089ACEC(EnDinofos* this, PlayState* play) {
@@ -415,20 +415,20 @@ s32 func_8089AE00(EnDinofos* this, PlayState* play) {
temp_v0 = func_800BC270(play, &this->actor, 80.0f, 0x138B0);
if (temp_v0 != NULL) {
- temp_v1 = (Actor_YawBetweenActors(&this->actor, temp_v0) - this->actor.shape.rot.y) - this->unk_28E;
+ temp_v1 = (Actor_WorldYawTowardActor(&this->actor, temp_v0) - this->actor.shape.rot.y) - this->unk_28E;
if (ABS_ALT(temp_v1) < 0x3000) {
func_8089D11C(this, temp_v1 + this->unk_28E);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_RIZA_WARAU);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_RIZA_WARAU);
return true;
}
}
temp_v0 = func_800BC444(play, &this->actor, 80.0f);
if ((temp_v0 != NULL) && (temp_v0->id == ACTOR_EN_BOM_CHU)) {
- temp_v1_2 = (Actor_YawBetweenActors(&this->actor, temp_v0) - this->actor.shape.rot.y) - this->unk_28E;
+ temp_v1_2 = (Actor_WorldYawTowardActor(&this->actor, temp_v0) - this->actor.shape.rot.y) - this->unk_28E;
if (ABS_ALT(temp_v1_2) < 0x3000) {
func_8089C024(this, 1);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_RIZA_WARAU);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_RIZA_WARAU);
return true;
}
}
@@ -445,7 +445,7 @@ s32 func_8089AE00(EnDinofos* this, PlayState* play) {
} else {
func_8089C024(this, 3);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_RIZA_WARAU);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_RIZA_WARAU);
return true;
}
@@ -496,7 +496,7 @@ void func_8089B288(EnDinofos* this, PlayState* play) {
void func_8089B320(EnDinofos* this) {
this->actor.gravity = -2.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_RIZA_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_RIZA_CRY);
this->unk_2BC.x = (Math_SinS(this->actor.shape.rot.y - 0x0E00) * 86.0f) + this->actor.world.pos.x;
this->unk_2BC.y = this->actor.floorHeight + 6.0f;
this->unk_2BC.z = (Math_CosS(this->actor.shape.rot.y - 0x0E00) * 86.0f) + this->actor.world.pos.z;
@@ -523,7 +523,7 @@ void func_8089B3D4(EnDinofos* this, PlayState* play) {
}
Play_SetCameraAtEye(play, this->subCamId, &subCamAt, &subCam->eye);
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
func_8089B4A4(this);
}
}
@@ -536,7 +536,7 @@ void func_8089B4A4(EnDinofos* this) {
this->unk_2BC.x = (Math_SinS(this->actor.shape.rot.y + 0x200) * 123.0f) + this->actor.world.pos.x;
this->unk_2BC.y = this->actor.floorHeight + 11.0f;
this->unk_2BC.z = (Math_CosS(this->actor.shape.rot.y + 0x200) * 123.0f) + this->actor.world.pos.z;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BOMCHU_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BOMCHU_WALK);
this->unk_290 = 0;
this->unk_292 = -1;
this->actionFunc = func_8089B580;
@@ -578,13 +578,13 @@ void func_8089B6E8(EnDinofos* this) {
void func_8089B72C(EnDinofos* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, 2.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_RIZA_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_RIZA_ATTACK);
}
if (SkelAnime_Update(&this->skelAnime)) {
func_8089ABF4(this, play);
this->actor.flags &= ~ACTOR_FLAG_100000;
- this->actor.cutscene = -1;
+ this->actor.csId = CS_ID_NONE;
func_8089B7B0(this);
}
}
@@ -593,7 +593,7 @@ void func_8089B7B0(EnDinofos* this) {
Animation_MorphToLoop(&this->skelAnime, &object_dinofos_Anim_002E40, -4.0f);
this->unk_290 = (s32)Rand_ZeroFloat(20.0f) + 40;
this->unk_292 = 30;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
func_8089AD70(this);
this->actionFunc = func_8089B834;
@@ -625,9 +625,9 @@ void func_8089B8B0(EnDinofos* this, PlayState* play) {
phi_f0 = 70.0f;
}
if (this->actor.xzDistToPlayer <= phi_f0) {
- this->actor.speedXZ = -3.5f;
+ this->actor.speed = -3.5f;
} else {
- this->actor.speedXZ = 3.5f;
+ this->actor.speed = 3.5f;
}
}
@@ -650,9 +650,9 @@ void func_8089B98C(EnDinofos* this, PlayState* play) {
Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0x100);
this->actor.world.rot.y = this->actor.shape.rot.y;
if (this->actor.xzDistToPlayer <= phi_f0) {
- Math_StepToF(&this->actor.speedXZ, -7.0f, 0.5f);
+ Math_StepToF(&this->actor.speed, -7.0f, 0.5f);
} else {
- Math_StepToF(&this->actor.speedXZ, 7.0f, 0.5f);
+ Math_StepToF(&this->actor.speed, 7.0f, 0.5f);
}
if (this->actor.xzDistToPlayer < 80.0f) {
@@ -666,7 +666,7 @@ void func_8089B98C(EnDinofos* this, PlayState* play) {
}
if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 6.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_RIZA_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_RIZA_WALK);
}
}
}
@@ -674,7 +674,7 @@ void func_8089B98C(EnDinofos* this, PlayState* play) {
void func_8089BAC0(EnDinofos* this) {
if (this->actionFunc != func_8089BB60) {
Animation_MorphToLoop(&this->skelAnime, &object_dinofos_Anim_000580, -4.0f);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
if (BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.shape.rot.y) > 0) {
this->unk_28C = BINANG_ADD(this->actor.shape.rot.y, 0x4000);
@@ -701,20 +701,20 @@ void func_8089BBB4(EnDinofos* this, PlayState* play) {
s16 rotY = player->actor.shape.rot.y - this->actor.shape.rot.y;
if (ABS_ALT(rotY) > 0x7800) {
if (Rand_ZeroOne() < 0.5f) {
- this->actor.speedXZ = 6.0f;
+ this->actor.speed = 6.0f;
} else {
- this->actor.speedXZ = -6.0f;
+ this->actor.speed = -6.0f;
}
} else if (rotY >= 0) {
- this->actor.speedXZ = 6.0f;
+ this->actor.speed = 6.0f;
} else {
- this->actor.speedXZ = -6.0f;
+ this->actor.speed = -6.0f;
}
if (this->actionFunc == func_8089D1E0) {
- this->skelAnime.playSpeed = this->actor.speedXZ * 0.166666671634f;
+ this->skelAnime.playSpeed = this->actor.speed * 0.166666671634f;
} else {
- Animation_Change(&this->skelAnime, &object_dinofos_Anim_00D62C, this->actor.speedXZ * 0.166666671634f, 0.0f,
+ Animation_Change(&this->skelAnime, &object_dinofos_Anim_00D62C, this->actor.speed * 0.166666671634f, 0.0f,
0.0f, ANIMMODE_LOOP, -4.0f);
}
@@ -733,8 +733,8 @@ void func_8089BD28(EnDinofos* this, PlayState* play) {
Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0xBB8);
if (!func_8089AE00(this, play)) {
- if (this->actor.bgCheckFlags & 8) {
- if (this->actor.speedXZ >= 0.0f) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
+ if (this->actor.speed >= 0.0f) {
phi_v0 = BINANG_ADD(this->actor.shape.rot.y, 0x4000);
} else {
phi_v0 = BINANG_SUB(this->actor.shape.rot.y, 0x4000);
@@ -742,23 +742,23 @@ void func_8089BD28(EnDinofos* this, PlayState* play) {
phi_v0 = this->actor.wallYaw - phi_v0;
if (ABS_ALT(phi_v0) > 0x4000) {
- this->actor.speedXZ *= -0.8f;
- if (this->actor.speedXZ < 0.0f) {
- this->actor.speedXZ -= 0.5f;
+ this->actor.speed *= -0.8f;
+ if (this->actor.speed < 0.0f) {
+ this->actor.speed -= 0.5f;
} else {
- this->actor.speedXZ += 0.5f;
+ this->actor.speed += 0.5f;
}
}
}
phi_v0 = BINANG_SUB(player->actor.shape.rot.y, this->actor.shape.rot.y);
if ((phi_v0 >= 0) && (phi_v0 < 0x7800)) {
- this->actor.speedXZ += 0.125f;
+ this->actor.speed += 0.125f;
} else if ((phi_v0 < 0) && (phi_v0 > -0x7800)) {
- this->actor.speedXZ -= 0.125f;
+ this->actor.speed -= 0.125f;
}
- if (this->actor.speedXZ > 0.0f) {
+ if (this->actor.speed > 0.0f) {
this->skelAnime.playSpeed = 1.0f;
} else {
this->skelAnime.playSpeed = -1.0f;
@@ -787,7 +787,7 @@ void func_8089BD28(EnDinofos* this, PlayState* play) {
}
if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 5.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_RIZA_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_RIZA_WALK);
}
}
}
@@ -804,7 +804,7 @@ void func_8089C024(EnDinofos* this, s32 arg1) {
}
}
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->unk_290 = arg1;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = func_8089C0DC;
@@ -825,33 +825,33 @@ void func_8089C0DC(EnDinofos* this, PlayState* play) {
void func_8089C164(EnDinofos* this) {
if (this->unk_290 == 2) {
- this->actor.speedXZ = -10.0f;
+ this->actor.speed = -10.0f;
this->actor.velocity.y = 9.0f;
this->colliderJntSph.base.acFlags |= AC_ON;
} else {
this->actor.velocity.y = 12.5f;
if (this->unk_290 == 0) {
- this->actor.speedXZ = 4.5f;
+ this->actor.speed = 4.5f;
}
}
- this->actor.bgCheckFlags &= ~1;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_RIZA_JUMP);
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_RIZA_JUMP);
this->actionFunc = func_8089C1F8;
}
void func_8089C1F8(EnDinofos* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
func_8089C398(this);
}
}
void func_8089C244(EnDinofos* this) {
- this->actor.bgCheckFlags &= ~1;
- this->actor.speedXZ = 8.0f;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
+ this->actor.speed = 8.0f;
this->actor.velocity.y = 16.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_RIZA_JUMP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_RIZA_JUMP);
this->unk_290 = 0;
this->unk_292 = -1;
this->actionFunc = func_8089C2A8;
@@ -867,7 +867,7 @@ void func_8089C2A8(EnDinofos* this, PlayState* play) {
Animation_Change(&this->skelAnime, &object_dinofos_Anim_0025B4, 1.0f, 7.0f, 13.0f, ANIMMODE_ONCE, -2.0f);
}
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->colliderQuad.base.atFlags &= ~AT_ON;
func_8089C398(this);
}
@@ -880,15 +880,15 @@ void func_8089C398(EnDinofos* this) {
this->skelAnime.endFrame = Animation_GetLastFrame(&object_dinofos_Anim_0025B4);
}
- if (this->actor.speedXZ < 0.0f) {
+ if (this->actor.speed < 0.0f) {
this->unk_290 = 1;
} else {
this->unk_290 = 0;
}
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
func_8089AD70(this);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BOMCHU_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BOMCHU_WALK);
this->actionFunc = func_8089C44C;
}
@@ -906,10 +906,10 @@ void func_8089C44C(EnDinofos* this, PlayState* play) {
void func_8089C4F8(EnDinofos* this) {
Animation_PlayOnce(&this->skelAnime, &object_dinofos_Anim_0025B4);
this->colliderQuad.base.atFlags &= ~AT_BOUNCED;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_RIZA_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_RIZA_CRY);
this->unk_290 = 0;
this->unk_292 = -1;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = func_8089C56C;
}
@@ -928,7 +928,7 @@ void func_8089C56C(EnDinofos* this, PlayState* play) {
} else if (Animation_OnFrame(&this->skelAnime, 13.0f)) {
this->colliderQuad.base.atFlags &= ~AT_ON;
} else if (Animation_OnFrame(&this->skelAnime, 11.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_RIZA_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_RIZA_ATTACK);
} else if (this->skelAnime.curFrame < 7.0f) {
func_8089AE00(this, play);
}
@@ -941,14 +941,14 @@ void func_8089C690(EnDinofos* this) {
if (this->actionFunc != func_8089C2A8) {
this->actor.world.rot.y = this->actor.shape.rot.y;
} else {
- this->actor.speedXZ = 3.0f;
+ this->actor.speed = 3.0f;
}
this->actionFunc = func_8089C724;
}
void func_8089C724(EnDinofos* this, PlayState* play) {
- if (this->actor.bgCheckFlags & 1) {
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.5f);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ Math_StepToF(&this->actor.speed, 0.0f, 0.5f);
}
if (SkelAnime_Update(&this->skelAnime)) {
@@ -957,7 +957,7 @@ void func_8089C724(EnDinofos* this, PlayState* play) {
}
void func_8089C784(EnDinofos* this) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->actor.velocity.y > 0.0f) {
this->actor.velocity.y = 0.0f;
}
@@ -972,7 +972,7 @@ void func_8089C7B8(EnDinofos* this, PlayState* play) {
if (this->unk_290 == 0) {
func_8089ACEC(this, play);
if (this->actor.colChkInfo.health == 0) {
- if (this->actor.cutscene == -1) {
+ if (this->actor.csId == CS_ID_NONE) {
func_8089CFAC(this);
} else {
func_8089D2E0(this);
@@ -989,22 +989,22 @@ void func_8089C87C(EnDinofos* this, s32 arg1) {
Animation_PlayOnce(&this->skelAnime, &object_dinofos_Anim_00D21C);
func_800BE5CC(&this->actor, &this->colliderJntSph, arg1);
this->actor.shape.rot.y = BINANG_ROT180(this->actor.world.rot.y);
- this->actor.speedXZ = 10.0f;
+ this->actor.speed = 10.0f;
if (this->actor.velocity.y > 0.0f) {
this->actor.velocity.y = 0.0f;
}
this->unk_28E = 0;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_RIZA_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_RIZA_DAMAGE);
this->colliderJntSph.base.acFlags &= ~AC_ON;
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 18);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 18);
this->actionFunc = func_8089C938;
}
void func_8089C938(EnDinofos* this, PlayState* play) {
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.5f);
- if (SkelAnime_Update(&this->skelAnime) && (this->actor.bgCheckFlags & 1)) {
+ Math_StepToF(&this->actor.speed, 0.0f, 0.5f);
+ if (SkelAnime_Update(&this->skelAnime) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
if (this->actor.colChkInfo.health == 0) {
- if (this->actor.cutscene == -1) {
+ if (this->actor.csId == CS_ID_NONE) {
func_8089CFAC(this);
} else {
func_8089D2E0(this);
@@ -1021,18 +1021,18 @@ void func_8089C938(EnDinofos* this, PlayState* play) {
void func_8089CA14(EnDinofos* this) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_dinofos_Anim_001040, -5.0f);
this->colliderJntSph.base.acFlags |= AC_ON;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = func_8089CA74;
}
void func_8089CA74(EnDinofos* this, PlayState* play) {
Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0x800);
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.5f);
+ Math_StepToF(&this->actor.speed, 0.0f, 0.5f);
if (SkelAnime_Update(&this->skelAnime)) {
func_8089CB10(this, play);
} else if (!func_8089AE00(this, play) && Animation_OnFrame(&this->skelAnime, 12.0f)) {
- this->actor.speedXZ = 8.0f;
+ this->actor.speed = 8.0f;
}
}
@@ -1042,7 +1042,7 @@ void func_8089CB10(EnDinofos* this, PlayState* play) {
Animation_PlayLoop(&this->skelAnime, &object_dinofos_Anim_0013C0);
this->unk_290 = 20;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->colliderJntSph.base.atFlags |= AT_ON;
func_8089AD70(this);
@@ -1129,8 +1129,8 @@ void func_8089CF70(EnDinofos* this, PlayState* play) {
void func_8089CFAC(EnDinofos* this) {
Animation_PlayOnce(&this->skelAnime, &object_dinofos_Anim_00ABD0);
this->actor.flags &= ~ACTOR_FLAG_1;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_RIZA_DEAD);
- this->actor.speedXZ = 0.0f;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_RIZA_DEAD);
+ this->actor.speed = 0.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = func_8089D018;
}
@@ -1145,7 +1145,7 @@ void func_8089D018(EnDinofos* this, PlayState* play) {
}
if (temp_v0 <= 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
this->unk_288 = 0;
} else {
this->unk_288 = temp_v0;
@@ -1157,17 +1157,17 @@ void func_8089D018(EnDinofos* this, PlayState* play) {
this->actor.shape.shadowAlpha = this->unk_288;
} else if (Animation_OnFrame(&this->skelAnime, 26.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GERUDOFT_DOWN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GERUDOFT_DOWN);
}
}
void func_8089D11C(EnDinofos* this, s16 arg1) {
if (arg1 >= 0) {
- this->actor.speedXZ = -15.0f;
+ this->actor.speed = -15.0f;
} else {
- this->actor.speedXZ = 15.0f;
+ this->actor.speed = 15.0f;
}
- Animation_Change(&this->skelAnime, &object_dinofos_Anim_00D62C, this->actor.speedXZ * (1.0f / 7.5f), 0.0f, 0.0f,
+ Animation_Change(&this->skelAnime, &object_dinofos_Anim_00D62C, this->actor.speed * (1.0f / 7.5f), 0.0f, 0.0f,
ANIMMODE_LOOP, -4.0f);
this->actor.world.rot.y = BINANG_ADD(this->actor.shape.rot.y, 0x4000);
this->unk_292 = 10;
@@ -1178,10 +1178,10 @@ void func_8089D11C(EnDinofos* this, s16 arg1) {
void func_8089D1E0(EnDinofos* this, PlayState* play) {
Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0xBB8);
- Math_StepToF(&this->actor.speedXZ, 0.0f, 2.0f);
+ Math_StepToF(&this->actor.speed, 0.0f, 2.0f);
this->skelAnime.playSpeed =
- (1.0f + fabsf(this->actor.speedXZ * (1.0f / 15.0f))) * ((this->actor.speedXZ >= 0.0f) ? 1.0f : -1.0f);
+ (1.0f + fabsf(this->actor.speed * (1.0f / 15.0f))) * ((this->actor.speed >= 0.0f) ? 1.0f : -1.0f);
this->actor.world.rot.y = BINANG_ADD(this->actor.shape.rot.y, 0x4000);
SkelAnime_Update(&this->skelAnime);
if (this->unk_292 != 0) {
@@ -1191,26 +1191,26 @@ void func_8089D1E0(EnDinofos* this, PlayState* play) {
}
if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 5.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_RIZA_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_RIZA_WALK);
}
}
void func_8089D2E0(EnDinofos* this) {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
this->actionFunc = func_8089D318;
}
void func_8089D318(EnDinofos* this, PlayState* play) {
Vec3f subCamEye;
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
+ if (CutsceneManager_IsNext(this->actor.csId)) {
if (this->actor.colChkInfo.health == 0) {
- ActorCutscene_Start(this->actor.cutscene, &this->actor);
- func_800B724C(play, &this->actor, 7);
+ CutsceneManager_Start(this->actor.csId, &this->actor);
+ func_800B724C(play, &this->actor, PLAYER_CSMODE_WAIT);
} else {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
}
- this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene);
+ this->subCamId = CutsceneManager_GetCurrentSubCamId(this->actor.csId);
if (this->actor.colChkInfo.health == 0) {
subCamEye.x = (Math_SinS(this->actor.shape.rot.y) * 150.0f) + this->actor.focus.pos.x;
subCamEye.y = this->actor.focus.pos.y;
@@ -1221,7 +1221,7 @@ void func_8089D318(EnDinofos* this, PlayState* play) {
func_8089B100(this, play);
}
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
@@ -1273,12 +1273,12 @@ s32 func_8089D60C(EnDinofos* this, PlayState* play) {
Enemy_StartFinishingBlow(play, &this->actor);
D_8089E350--;
if (D_8089E350 == 0) {
- if (D_8089E34C != -1) {
- this->actor.cutscene = D_8089E34C;
+ if (sCsId != CS_ID_NONE) {
+ this->actor.csId = sCsId;
}
}
- if (this->actor.cutscene != -1) {
+ if (this->actor.csId != CS_ID_NONE) {
Audio_RestorePrevBgm();
}
}
@@ -1303,19 +1303,19 @@ s32 func_8089D60C(EnDinofos* this, PlayState* play) {
if (this->actor.colChkInfo.damageEffect == 1) {
this->unk_290 = 40;
- Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
func_8089C784(this);
return true;
}
if (this->actor.colChkInfo.damageEffect == 5) {
this->unk_290 = 40;
- Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40);
this->drawDmgEffScale = 0.55f;
this->drawDmgEffAlpha = 2.0f;
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_MEDIUM;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
func_8089C784(this);
return true;
}
@@ -1356,7 +1356,9 @@ void EnDinofos_Update(Actor* thisx, PlayState* play2) {
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 25.0f, 30.0f, 60.0f, 0x5D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 25.0f, 30.0f, 60.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_40);
if (this->actionFunc != func_8089C7B8) {
if ((this->actor.depthInWater > 0.0f) && (this->actor.depthInWater < 10.0f)) {
if (!((play->gameplayFrames % 4) & 1)) {
diff --git a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.h b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.h
index fcdf48c32..4284d5595 100644
--- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.h
+++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.h
@@ -39,6 +39,4 @@ typedef struct EnDinofos {
/* 0x5C4 */ ColliderQuad colliderQuad;
} EnDinofos; // size = 0x644
-extern const ActorInit En_Dinofos_InitVars;
-
#endif // Z_EN_DINOFOS_H
diff --git a/src/overlays/actors/ovl_En_Dnb/overlay.cfg b/src/overlays/actors/ovl_En_Dnb/overlay.cfg
deleted file mode 100644
index 074d3340a..000000000
--- a/src/overlays/actors/ovl_En_Dnb/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Dnb
-z_en_dnb.c
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 b9bc34d99..8edd1b580 100644
--- a/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c
+++ b/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c
@@ -8,7 +8,7 @@
#include "objects/object_hanareyama_obj/object_hanareyama_obj.h"
#include "objects/gameplay_keep/gameplay_keep.h"
-#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_80)
+#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_REACT_TO_LENS)
#define THIS ((EnDnb*)thisx)
@@ -21,7 +21,7 @@ s32 func_80A507C0(EnDnbUnkStruct* arg0, Vec3f arg1, Vec3f arg2, u8 arg3, f32 arg
s32 func_80A5086C(EnDnbUnkStruct* arg0);
s32 func_80A50950(EnDnbUnkStruct* arg0, PlayState* play2);
-const ActorInit En_Dnb_InitVars = {
+ActorInit En_Dnb_InitVars = {
ACTOR_EN_DNB,
ACTORCAT_BG,
FLAGS,
@@ -104,7 +104,7 @@ void EnDnb_Init(Actor* thisx, PlayState* play) {
s32 i;
s16* alloc;
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_hanareyama_obj_Colheader_004D8C);
alloc = Lib_SegmentedToVirtual(object_hanareyama_obj_Vec_004710);
@@ -275,7 +275,9 @@ s32 func_80A50950(EnDnbUnkStruct* arg0, PlayState* play2) {
}
Matrix_Push();
- if (1) {};
+ //! 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);
diff --git a/src/overlays/actors/ovl_En_Dnb/z_en_dnb.h b/src/overlays/actors/ovl_En_Dnb/z_en_dnb.h
index 17ee19abe..aa17663bf 100644
--- a/src/overlays/actors/ovl_En_Dnb/z_en_dnb.h
+++ b/src/overlays/actors/ovl_En_Dnb/z_en_dnb.h
@@ -41,6 +41,4 @@ typedef struct EnDnb {
/* 0x0D38 */ EnDnbUnkStruct unk_0D38[256];
} EnDnb; // size = 0x3538
-extern const ActorInit En_Dnb_InitVars;
-
#endif // Z_EN_DNB_H
diff --git a/src/overlays/actors/ovl_En_Dnh/overlay.cfg b/src/overlays/actors/ovl_En_Dnh/overlay.cfg
deleted file mode 100644
index 85a45176f..000000000
--- a/src/overlays/actors/ovl_En_Dnh/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Dnh
-z_en_dnh.c
diff --git a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c
index f1b78f25d..9413b046c 100644
--- a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c
+++ b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c
@@ -19,7 +19,7 @@ void func_80A50F38(EnDnh* this, PlayState* play);
void func_80A50F9C(EnDnh* this, PlayState* play);
#if 0
-const ActorInit En_Dnh_InitVars = {
+ActorInit En_Dnh_InitVars = {
ACTOR_EN_DNH,
ACTORCAT_NPC,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.h b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.h
index e26b9a7c0..c2331d777 100644
--- a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.h
+++ b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.h
@@ -13,6 +13,4 @@ typedef struct EnDnh {
/* 0x148 */ char unk_148[0x74];
} EnDnh; // size = 0x1BC
-extern const ActorInit En_Dnh_InitVars;
-
#endif // Z_EN_DNH_H
diff --git a/src/overlays/actors/ovl_En_Dnk/overlay.cfg b/src/overlays/actors/ovl_En_Dnk/overlay.cfg
deleted file mode 100644
index 93ce82d2c..000000000
--- a/src/overlays/actors/ovl_En_Dnk/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Dnk
-z_en_dnk.c
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 346246f86..7d59ebeec 100644
--- a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c
+++ b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c
@@ -24,7 +24,7 @@ void func_80A52134(EnDnk* this, PlayState* play);
static s16 D_80A521A0 = 0;
-const ActorInit En_Dnk_InitVars = {
+ActorInit En_Dnk_InitVars = {
ACTOR_EN_DNK,
ACTORCAT_NPC,
FLAGS,
@@ -213,8 +213,8 @@ void func_80A51648(EnDnk* this, PlayState* play) {
}
void func_80A51890(EnDnk* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 126)) {
- Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, 126));
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_126)) {
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_126));
}
}
@@ -242,7 +242,7 @@ void EnDnk_Init(Actor* thisx, PlayState* play) {
if (this->unk_28E >= 0) {
this->actionFunc = func_80A51648;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
this->unk_2A2 = D_80A521A0;
@@ -423,7 +423,7 @@ void func_80A52018(Actor* thisx, PlayState* play) {
}
void func_80A52074(EnDnk* this, PlayState* play) {
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 80:
func_8019F128(NA_SE_EN_DEKNUTS_DANCE1);
break;
@@ -433,21 +433,21 @@ void func_80A52074(EnDnk* this, PlayState* play) {
break;
case 438:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEKNUTS_DANCE_BIG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEKNUTS_DANCE_BIG);
break;
case 493:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_APPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_APPEAR);
break;
}
- if ((play->csCtx.frames >= 198) && (play->csCtx.frames < 438)) {
+ if ((play->csCtx.curFrame >= 198) && (play->csCtx.curFrame < 438)) {
func_8019F128(NA_SE_EN_DEKNUTS_DANCE - SFX_FLAG);
}
}
void func_80A52134(EnDnk* this, PlayState* play) {
- if ((play->csCtx.state != 0) && (ENDNK_GET_3C(&this->actor) == 4) && (play->sceneId == SCENE_SPOT00) &&
+ if ((play->csCtx.state != CS_STATE_IDLE) && (ENDNK_GET_3C(&this->actor) == 4) && (play->sceneId == SCENE_SPOT00) &&
(gSaveContext.sceneLayer == 2)) {
func_80A52074(this, play);
}
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 9b6913548..f0665f1b5 100644
--- a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h
+++ b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h
@@ -40,6 +40,4 @@ typedef struct EnDnk {
/* 0x2A2 */ s16 unk_2A2;
} EnDnk; // size = 0x2A4
-extern const ActorInit En_Dnk_InitVars;
-
#endif // Z_EN_DNK_H
diff --git a/src/overlays/actors/ovl_En_Dno/overlay.cfg b/src/overlays/actors/ovl_En_Dno/overlay.cfg
deleted file mode 100644
index 9aa2bd93c..000000000
--- a/src/overlays/actors/ovl_En_Dno/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Dno
-z_en_dno.c
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 685c3a511..a9128b1bd 100644
--- a/src/overlays/actors/ovl_En_Dno/z_en_dno.c
+++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.c
@@ -89,7 +89,7 @@ static AnimationSpeedInfo sAnimations[] = {
{ &gDekuButlerGrieveAnim, 1.0f, ANIMMODE_LOOP, 0.0f },
};
-const ActorInit En_Dno_InitVars = {
+ActorInit En_Dno_InitVars = {
ACTOR_EN_DNO,
ACTORCAT_NPC,
FLAGS,
@@ -222,7 +222,7 @@ void EnDno_Init(Actor* thisx, PlayState* play) {
actor = SubS_FindActor(play, actor, ACTORCAT_NPC, ACTOR_EN_DNO);
if (actor != NULL) {
if (actor != thisx) {
- Actor_MarkForDeath(thisx);
+ Actor_Kill(thisx);
break;
}
actor = actor->next;
@@ -235,7 +235,7 @@ void EnDno_Init(Actor* thisx, PlayState* play) {
this->morphTable, DEKU_BUTLER_LIMB_MAX);
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, thisx, &sCylinderInit);
- Actor_UpdateBgCheckInfo(play, thisx, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, thisx, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
Animation_Change(&this->skelAnime, sAnimations[EN_DNO_ANIM_IDLE_WITH_CANDLE].animation, 1.0f, 0.0f,
Animation_GetLastFrame(sAnimations[EN_DNO_ANIM_IDLE_WITH_CANDLE].animation),
sAnimations[EN_DNO_ANIM_IDLE_WITH_CANDLE].mode,
@@ -243,14 +243,14 @@ void EnDno_Init(Actor* thisx, PlayState* play) {
this->unk_3BE = 0x3E93;
this->unk_3C0 = 60.0f;
this->unk_3B0 = 0;
- this->unk_468 = 99;
+ this->cueId = 99;
this->skelAnime.playSpeed = 0.0f;
switch (EN_DNO_GET_C000(thisx)) {
case EN_DNO_GET_C000_0:
func_80A71788(this, play);
- if (!(gSaveContext.save.weekEventReg[23] & 0x20) || (gSaveContext.save.weekEventReg[93] & 2)) {
- Actor_MarkForDeath(thisx);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20) || CHECK_WEEKEVENTREG(WEEKEVENTREG_93_02)) {
+ Actor_Kill(thisx);
} else {
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE_WITH_CANDLE,
&this->animIndex);
@@ -264,14 +264,14 @@ void EnDno_Init(Actor* thisx, PlayState* play) {
break;
case EN_DNO_GET_C000_1:
- if (gSaveContext.save.weekEventReg[23] & 0x20) {
- Actor_MarkForDeath(thisx);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) {
+ Actor_Kill(thisx);
} else {
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE,
&this->animIndex);
this->unk_460 = SubS_FindActor(play, NULL, ACTORCAT_NPC, ACTOR_EN_DNQ);
if (this->unk_460 == NULL) {
- Actor_MarkForDeath(thisx);
+ Actor_Kill(thisx);
} else {
this->actionFunc = func_80A71B68;
}
@@ -307,11 +307,11 @@ void func_80A71B68(EnDno* this, PlayState* play) {
this->unk_452 = 0;
this->actor.textId = 0;
if (CHECK_QUEST_ITEM(QUEST_SONG_SONATA)) {
- if (gSaveContext.save.weekEventReg[27] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_27_01)) {
if (!(this->unk_3B0 & 0x20)) {
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_PRAYER_LOOP,
&this->animIndex);
- this->actor.shape.rot.y = Actor_YawBetweenActors(&this->actor, this->unk_460);
+ this->actor.shape.rot.y = Actor_WorldYawTowardActor(&this->actor, this->unk_460);
}
} else {
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE, &this->animIndex);
@@ -347,8 +347,8 @@ void func_80A71C3C(EnDno* this, PlayState* play) {
}
case EN_DNO_ANIM_PRAYER_LOOP:
- Math_SmoothStepToS(&this->actor.shape.rot.y, Actor_YawBetweenActors(&this->actor, this->unk_460), 2, 0xE38,
- 0x222);
+ Math_SmoothStepToS(&this->actor.shape.rot.y, Actor_WorldYawTowardActor(&this->actor, this->unk_460), 2,
+ 0xE38, 0x222);
break;
}
@@ -374,17 +374,17 @@ void func_80A71C3C(EnDno* this, PlayState* play) {
void func_80A71E54(EnDno* this, PlayState* play) {
if (CHECK_QUEST_ITEM(QUEST_SONG_SONATA)) {
- if (gSaveContext.save.weekEventReg[27] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_27_01)) {
this->textId = 0x811;
} else {
this->textId = 0x80F;
- gSaveContext.save.weekEventReg[27] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_27_01);
}
- } else if (gSaveContext.save.weekEventReg[26] & 0x80) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_26_80)) {
this->textId = 0x80B;
} else {
this->textId = 0x80C;
- gSaveContext.save.weekEventReg[26] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_26_80);
}
if (this->textId != 0x811) {
@@ -436,12 +436,12 @@ void func_80A71F18(EnDno* this, PlayState* play) {
&this->animIndex);
}
Math_ScaledStepToS(&this->actor.shape.rot.y,
- Actor_YawBetweenActors(&this->actor, this->unk_460), 0x71C);
+ Actor_WorldYawTowardActor(&this->actor, this->unk_460), 0x71C);
break;
case EN_DNO_ANIM_IMPLORE_END:
if (this->skelAnime.curFrame == this->skelAnime.endFrame) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE,
&this->animIndex);
func_80A71B68(this, play);
@@ -474,7 +474,7 @@ void func_80A71F18(EnDno* this, PlayState* play) {
case EN_DNO_ANIM_IMPLORE_END:
if (this->skelAnime.curFrame == this->skelAnime.endFrame) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE,
&this->animIndex);
func_80A71B68(this, play);
@@ -485,13 +485,13 @@ void func_80A71F18(EnDno* this, PlayState* play) {
case 0x80C:
if (Message_ShouldAdvance(play)) {
- func_80151938(play, 0x80D);
+ Message_ContinueTextbox(play, 0x80D);
}
break;
case 0x80D:
if (Message_ShouldAdvance(play)) {
- func_80151938(play, 0x80E);
+ Message_ContinueTextbox(play, 0x80E);
}
break;
@@ -505,21 +505,21 @@ void func_80A71F18(EnDno* this, PlayState* play) {
&this->animIndex);
}
} else if ((this->animIndex == EN_DNO_ANIM_IDLE) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80A71B68(this, play);
}
break;
case 0x80F:
if (Message_ShouldAdvance(play)) {
- func_80151938(play, 0x810);
+ Message_ContinueTextbox(play, 0x810);
}
break;
case 0x810:
if (Message_ShouldAdvance(play)) {
this->unk_3B0 |= 0x20;
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80A71B68(this, play);
break;
}
@@ -541,7 +541,7 @@ void func_80A71F18(EnDno* this, PlayState* play) {
case 0x811:
if (Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80A71B68(this, play);
}
break;
@@ -573,7 +573,7 @@ void func_80A724B8(EnDno* this, PlayState* play) {
}
void func_80A7256C(EnDno* this, PlayState* play) {
- func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_IA_MINUS1);
}
void func_80A72598(EnDno* this, PlayState* play) {
@@ -617,7 +617,7 @@ void func_80A725F8(EnDno* this, PlayState* play) {
case 2:
if (Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0x2D8)) {
- gSaveContext.save.weekEventReg[93] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_93_02);
Message_StartTextbox(play, 0x802, &this->actor);
}
break;
@@ -637,7 +637,7 @@ void func_80A725F8(EnDno* this, PlayState* play) {
if (this->skelAnime.curFrame <= 23.0f) {
this->unk_452 = 3;
if (Animation_OnFrame(&this->skelAnime, 23.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_OPEN_AMBRELLA);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_OPEN_AMBRELLA);
}
} else if (this->skelAnime.curFrame <= 24.0f) {
this->unk_452 = 4;
@@ -675,8 +675,8 @@ void func_80A725F8(EnDno* this, PlayState* play) {
} else {
this->getItemId = GI_MASK_SCENTS;
}
- Actor_PickUp(&this->actor, play, this->getItemId, 60.0f, 60.0f);
- func_801477B4(play);
+ Actor_OfferGetItem(&this->actor, play, this->getItemId, 60.0f, 60.0f);
+ Message_CloseTextbox(play);
func_80A72B84(this, play);
}
break;
@@ -699,14 +699,14 @@ void func_80A725F8(EnDno* this, PlayState* play) {
}
} else if ((this->animIndex == EN_DNO_ANIM_GREETING_WITH_CANDLE) &&
(this->skelAnime.curFrame == this->skelAnime.endFrame)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80A72438(this, play);
}
break;
case 0x806:
if (Message_ShouldAdvance(play)) {
- func_80151938(play, 0x800);
+ Message_ContinueTextbox(play, 0x800);
}
break;
@@ -741,13 +741,13 @@ void func_80A72BA4(EnDno* this, PlayState* play) {
this->actor.parent = NULL;
this->actionFunc = func_80A72598;
} else {
- Actor_PickUp(&this->actor, play, this->getItemId, 60.0f, 60.0f);
+ Actor_OfferGetItem(&this->actor, play, this->getItemId, 60.0f, 60.0f);
}
}
void func_80A72C04(EnDno* this, PlayState* play) {
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_START_RACE_START, &this->animIndex);
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8);
Math_Vec3f_Copy(&this->unk_334, &this->actor.world.pos);
SubS_ActorPathing_Init(play, &this->unk_334, &this->actor, &this->actorPath, play->setupPathList,
@@ -762,7 +762,7 @@ void func_80A72C04(EnDno* this, PlayState* play) {
}
void func_80A72CF8(EnDno* this, PlayState* play) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_WARP1, this->actor.world.pos.x + 80.0f,
this->actor.floorHeight, this->actor.world.pos.z, 0, 0, 0, 0x201);
}
@@ -779,21 +779,21 @@ s32 EnDno_ActorPathing_UpdateActorInfo(PlayState* play, ActorPathing* actorPath)
thisx->gravity = 0.0f;
temp_v0 = thisx->yawTowardsPlayer - thisx->world.rot.y;
if ((temp_v0 <= 0x4000) && (temp_v0 >= -0x4000)) {
- Math_SmoothStepToF(&thisx->speedXZ, 15.0f, 0.8f, 1.0f, 0.01f);
+ Math_SmoothStepToF(&thisx->speed, 15.0f, 0.8f, 1.0f, 0.01f);
} else {
if (thisx->xzDistToPlayer <= 80.0f) {
- Math_SmoothStepToF(&thisx->speedXZ, 8.0f, 0.5f, 0.5f, 0.01f);
+ Math_SmoothStepToF(&thisx->speed, 8.0f, 0.5f, 0.5f, 0.01f);
} else if (thisx->xzDistToPlayer <= 360.0f) {
- Math_SmoothStepToF(&thisx->speedXZ, 7.0f, 0.5f, 0.5f, 0.01f);
+ Math_SmoothStepToF(&thisx->speed, 7.0f, 0.5f, 0.5f, 0.01f);
} else {
- Math_SmoothStepToF(&thisx->speedXZ, 3.5f, 0.5f, 0.5f, 0.01f);
+ Math_SmoothStepToF(&thisx->speed, 3.5f, 0.5f, 0.5f, 0.01f);
}
}
- if (actorPath->distSqToCurPoint < SQ(thisx->speedXZ)) {
+ if (actorPath->distSqToCurPoint < SQ(thisx->speed)) {
ret = true;
} else {
- sp38 = thisx->speedXZ / sqrtf(actorPath->distSqToCurPointXZ);
+ sp38 = thisx->speed / sqrtf(actorPath->distSqToCurPointXZ);
sp2C = ABS(actorPath->rotToCurPoint.x - thisx->world.rot.x);
temp_v0_2 = sp2C;
temp_v0_2 *= sp38;
@@ -810,11 +810,11 @@ s32 EnDno_ActorPathing_UpdateActorInfo(PlayState* play, ActorPathing* actorPath)
s32 EnDno_ActorPathing_Move(PlayState* play, ActorPathing* actorPath) {
Actor* thisx = actorPath->actor;
EnDno* this = (EnDno*)thisx;
- f32 sp24 = Math_CosS(-thisx->world.rot.x) * thisx->speedXZ;
+ f32 sp24 = Math_CosS(-thisx->world.rot.x) * thisx->speed;
f32 sp20 = gFramerateDivisorHalf;
thisx->velocity.x = Math_SinS(thisx->world.rot.y) * sp24;
- thisx->velocity.y = Math_SinS(-thisx->world.rot.x) * thisx->speedXZ;
+ thisx->velocity.y = Math_SinS(-thisx->world.rot.x) * thisx->speed;
thisx->velocity.z = Math_CosS(thisx->world.rot.y) * sp24;
this->unk_334.x += (this->actor.velocity.x * sp20) + this->actor.colChkInfo.displacement.x;
@@ -864,7 +864,7 @@ void func_80A730A0(EnDno* this, PlayState* play) {
func_800B9010(&this->actor, NA_SE_EV_BUTLER_FRY - SFX_FLAG);
if (this->actorPath.flags & ACTOR_PATHING_REACHED_END_PERMANENT) {
Math_Vec3f_Copy(&this->actor.world.pos, &this->actorPath.curPoint);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.velocity.x = 0.0f;
this->actor.velocity.y = 0.0f;
this->actor.velocity.z = 0.0f;
@@ -873,10 +873,10 @@ void func_80A730A0(EnDno* this, PlayState* play) {
}
void func_80A73244(EnDno* this, PlayState* play) {
- this->actor.flags &= ~ACTOR_FLAG_8000000;
+ this->actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON;
this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8);
this->unk_328 = 2;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
Flags_UnsetSwitch(play, EN_DNO_GET_RACE_STARTED_SWITCH_FLAG(&this->actor));
gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_STOP;
this->unk_44E = 0;
@@ -903,7 +903,7 @@ void func_80A732C8(EnDno* this, PlayState* play) {
}
if (Animation_OnFrame(&this->skelAnime, 4.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CLOSE_AMBRELLA);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CLOSE_AMBRELLA);
this->unk_452 = 4;
} else if (Animation_OnFrame(&this->skelAnime, 5.0f)) {
this->unk_452 = 3;
@@ -916,12 +916,12 @@ void func_80A732C8(EnDno* this, PlayState* play) {
void func_80A73408(EnDno* this, PlayState* play) {
s32 phi_a2;
u8 sp33 = true;
- s32 temp_v0;
+ s32 cueChannel;
- if (Cutscene_CheckActorAction(play, 475)) {
- temp_v0 = Cutscene_GetActorActionIndex(play, 475);
- if (this->unk_468 != play->csCtx.actorActions[temp_v0]->action) {
- switch (play->csCtx.actorActions[temp_v0]->action) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_475)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_475);
+ if (this->cueId != play->csCtx.actorCues[cueChannel]->id) {
+ switch (play->csCtx.actorCues[cueChannel]->id) {
case 1:
phi_a2 = 13;
break;
@@ -940,12 +940,14 @@ void func_80A73408(EnDno* this, PlayState* play) {
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, phi_a2, &this->animIndex);
}
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, temp_v0);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
}
if ((Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) &&
(this->animIndex == EN_DNO_ANIM_SHOCK_START)) {
- if (0) {};
+ //! FAKE:
+ if (1) {}
+
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_SHOCK_LOOP, &this->animIndex);
}
}
@@ -958,7 +960,7 @@ void EnDno_Update(Actor* thisx, PlayState* play) {
func_80A73408(this, play);
this->actionFunc(this, play);
if (this->unk_3B0 & 4) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
}
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
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 db07a969b..f9a55cd4e 100644
--- a/src/overlays/actors/ovl_En_Dno/z_en_dno.h
+++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.h
@@ -47,9 +47,7 @@ typedef struct EnDno {
/* 0x460 */ Actor* unk_460;
/* 0x464 */ u16 textId;
/* 0x466 */ s16 unk_466;
- /* 0x468 */ u8 unk_468;
+ /* 0x468 */ u8 cueId;
} EnDno; // size = 0x46C
-extern const ActorInit En_Dno_InitVars;
-
#endif // Z_EN_DNO_H
diff --git a/src/overlays/actors/ovl_En_Dnp/overlay.cfg b/src/overlays/actors/ovl_En_Dnp/overlay.cfg
deleted file mode 100644
index ea78e5340..000000000
--- a/src/overlays/actors/ovl_En_Dnp/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Dnp
-z_en_dnp.c
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 63371ee2f..fd1557e3f 100644
--- a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c
+++ b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c
@@ -8,7 +8,6 @@
*/
#include "z_en_dnp.h"
-#include "objects/object_dnq/object_dnq.h"
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10)
@@ -25,7 +24,15 @@ void func_80B3D338(EnDnp* this, PlayState* play);
void func_80B3D3F8(EnDnp* this, PlayState* play);
void func_80B3D558(EnDnp* this, PlayState* play);
-const ActorInit En_Dnp_InitVars = {
+typedef enum {
+ /* 0 */ EN_DNP_EYE_OPEN,
+ /* 1 */ EN_DNP_EYE_HALF,
+ /* 2 */ EN_DNP_EYE_CLOSED,
+ /* 3 */ EN_DNP_EYE_ANGRY,
+ /* 4 */ EN_DNP_EYE_MAX,
+} EnDnpEyeIndex;
+
+ActorInit En_Dnp_InitVars = {
ACTOR_EN_DNP,
ACTORCAT_NPC,
FLAGS,
@@ -59,33 +66,63 @@ static ColliderCylinderInit sCylinderInit = {
static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE };
+typedef enum {
+ /* -1 */ EN_DNP_ANIM_NONE = -1,
+ /* 0 */ EN_DNP_ANIM_JUMP_KICK, // Can be triggered by a cutscene, but no cutscene in the final game does so
+ /* 1 */ EN_DNP_ANIM_HURRY,
+ /* 2 */ EN_DNP_ANIM_CUTSCENE_HURRY,
+ /* 3 */ EN_DNP_ANIM_HURRY_END,
+ /* 4 */ EN_DNP_ANIM_SCOLD, // Unused
+ /* 5 */ EN_DNP_ANIM_LAUGH_START,
+ /* 6 */ EN_DNP_ANIM_LAUGH_LOOP,
+ /* 7 */ EN_DNP_ANIM_TURN_AROUND,
+ /* 8 */ EN_DNP_ANIM_BOW,
+ /* 9 */ EN_DNP_ANIM_RUN, // Unused
+ /* 10 */ EN_DNP_ANIM_THINK_START,
+ /* 11 */ EN_DNP_ANIM_THINK_LOOP,
+ /* 12 */ EN_DNP_ANIM_ARMS_TOGETHER_START,
+ /* 13 */ EN_DNP_ANIM_ARMS_TOGETHER_LOOP,
+ /* 14 */ EN_DNP_ANIM_GREETING,
+ /* 15 */ EN_DNP_ANIM_IDLE,
+ /* 16 */ EN_DNP_ANIM_CUTSCENE_IDLE,
+ /* 17 */ EN_DNP_ANIM_UNUSED_WALK, // Unused
+ /* 18 */ EN_DNP_ANIM_WALK, // Can be triggered by a cutscene, but no cutscene in the final game does so
+ /* 19 */ EN_DNP_ANIM_ANGRY_START,
+ /* 20 */ EN_DNP_ANIM_ANGRY_LOOP,
+ /* 21 */ EN_DNP_ANIM_JUMP,
+ /* 22 */ EN_DNP_ANIM_BOUNCE_START,
+ /* 23 */ EN_DNP_ANIM_BOUNCE_LOOP,
+ /* 24 */ EN_DNP_ANIM_GLARE_START,
+ /* 25 */ EN_DNP_ANIM_GLARE_LOOP
+} EnDnpAnimation;
+
static AnimationInfoS sAnimationInfo[] = {
- { &object_dnq_Anim_0007D8, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
- { &object_dnq_Anim_0021DC, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_dnq_Anim_0021DC, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_dnq_Anim_0026B8, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
- { &object_dnq_Anim_004D08, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
- { &object_dnq_Anim_0071F4, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
- { &object_dnq_Anim_007960, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_dnq_Anim_008588, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
- { &object_dnq_Anim_00A900, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_dnq_Anim_00AEB8, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_dnq_Anim_00B754, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
- { &object_dnq_Anim_00674C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_dnq_Anim_00BAD8, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
- { &object_dnq_Anim_006B74, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_dnq_Anim_012428, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_dnq_Anim_00B324, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_dnq_Anim_00B324, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_dnq_Anim_0115B8, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_dnq_Anim_0115B8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_dnq_Anim_00923C, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
- { &object_dnq_Anim_009AA0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_dnq_Anim_00125C, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
- { &object_dnq_Anim_0017F8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
- { &object_dnq_Anim_001C1C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_dnq_Anim_0057AC, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
- { &object_dnq_Anim_00625C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+ { &gDekuPrincessJumpKickAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
+ { &gDekuPrincessHurryAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ { &gDekuPrincessHurryAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+ { &gDekuPrincessHurryEndAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
+ { &gDekuPrincessScoldAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
+ { &gDekuPrincessLaughStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
+ { &gDekuPrincessLaughLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+ { &gDekuPrincessTurnAroundAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
+ { &gDekuPrincessBowAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+ { &gDekuPrincessRunAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+ { &gDekuPrincessThinkStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
+ { &gDekuPrincessThinkLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+ { &gDekuPrincessArmsTogetherStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
+ { &gDekuPrincessArmsTogetherLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+ { &gDekuPrincessGreetingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+ { &gDekuPrincessIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ { &gDekuPrincessIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+ { &gDekuPrincessWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+ { &gDekuPrincessWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ { &gDekuPrincessAngryStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
+ { &gDekuPrincessAngryLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+ { &gDekuPrincessJumpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
+ { &gDekuPrincessBounceStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
+ { &gDekuPrincessBounceLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+ { &gDekuPrincessGlareStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
+ { &gDekuPrincessGlareLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
};
static s32 D_80B3DE58[] = {
@@ -93,52 +130,53 @@ static s32 D_80B3DE58[] = {
};
s32 func_80B3CA20(EnDnp* this) {
- if ((this->unk_340 == 2) || (this->unk_340 == 9)) {
+ if ((this->animIndex == EN_DNP_ANIM_CUTSCENE_HURRY) || (this->animIndex == EN_DNP_ANIM_RUN)) {
if (Animation_OnFrame(&this->skelAnime, 1.0f) || Animation_OnFrame(&this->skelAnime, 5.0f) ||
Animation_OnFrame(&this->skelAnime, 9.0f) || Animation_OnFrame(&this->skelAnime, 13.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEKUHIME_TURN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEKUHIME_TURN);
}
- } else if ((this->unk_340 == 24) || (this->unk_340 == 7)) {
+ } else if ((this->animIndex == EN_DNP_ANIM_GLARE_START) || (this->animIndex == EN_DNP_ANIM_TURN_AROUND)) {
if (Animation_OnFrame(&this->skelAnime, 1.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEKUHIME_TURN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEKUHIME_TURN);
}
- } else if (this->unk_340 == 14) {
+ } else if (this->animIndex == EN_DNP_ANIM_GREETING) {
if (Animation_OnFrame(&this->skelAnime, 7.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEKUHIME_GREET);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEKUHIME_GREET);
}
if (Animation_OnFrame(&this->skelAnime, 22.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEKUHIME_GREET2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEKUHIME_GREET2);
}
- } else if (this->unk_340 == 8) {
+ } else if (this->animIndex == EN_DNP_ANIM_BOW) {
if (Animation_OnFrame(&this->skelAnime, 9.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEKUHIME_GREET);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEKUHIME_GREET);
}
if (Animation_OnFrame(&this->skelAnime, 18.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEKUHIME_GREET2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEKUHIME_GREET2);
}
- } else if ((this->unk_340 == 17) && (this->unk_340 == 18)) {
+ } else if ((this->animIndex == EN_DNP_ANIM_UNUSED_WALK) && (this->animIndex == EN_DNP_ANIM_WALK)) {
+ //! @bug: Impossible to reach, && should be an ||
if (Animation_OnFrame(&this->skelAnime, 7.0f) || Animation_OnFrame(&this->skelAnime, 15.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEKUHIME_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEKUHIME_WALK);
}
- } else if (this->unk_340 == 21) {
+ } else if (this->animIndex == EN_DNP_ANIM_JUMP) {
if (Animation_OnFrame(&this->skelAnime, 17.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEKUHIME_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEKUHIME_WALK);
}
- } else if (this->unk_340 == 23) {
+ } else if (this->animIndex == EN_DNP_ANIM_BOUNCE_LOOP) {
if (Animation_OnFrame(&this->skelAnime, 3.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEKUHIME_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEKUHIME_WALK);
}
}
return 0;
}
-s32 func_80B3CC38(EnDnp* this, s32 arg1) {
+s32 EnDnp_ChangeAnim(EnDnp* this, s32 animIndex) {
s32 ret = false;
- if (arg1 != this->unk_340) {
- this->unk_340 = arg1;
- ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg1);
+ if (animIndex != this->animIndex) {
+ this->animIndex = animIndex;
+ ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex);
}
return ret;
@@ -154,11 +192,11 @@ void func_80B3CC80(EnDnp* this, PlayState* play) {
}
void func_80B3CD1C(EnDnp* this) {
- if ((this->unk_322 & 0x80) && (DECR(this->unk_334) == 0)) {
- this->unk_336++;
- if (this->unk_336 >= 4) {
- this->unk_334 = Rand_S16Offset(30, 30);
- this->unk_336 = 0;
+ if ((this->unk_322 & 0x80) && (DECR(this->blinkTimer) == 0)) {
+ this->eyeIndex++;
+ if (this->eyeIndex >= EN_DNP_EYE_MAX) {
+ this->blinkTimer = Rand_S16Offset(30, 30);
+ this->eyeIndex = EN_DNP_EYE_OPEN;
}
}
}
@@ -174,11 +212,14 @@ s32 func_80B3CDA4(EnDnp* this, PlayState* play) {
Math_SmoothStepToS(&this->unk_332, temp_s0, 3, 0x2AA8, 0x1);
sp30 = player->actor.world.pos;
- sp30.y = player->bodyPartsPos[7].y + 3.0f;
+ sp30.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
sp3C = this->actor.world.pos;
sp3C.y += 10.0f;
pitch = Math_Vec3f_Pitch(&sp3C, &sp30);
- if (1) {};
+
+ //! FAKE
+ if (1) {}
+
Math_SmoothStepToS(&this->unk_330, pitch, 3, 0x2AA8, 0x1);
return 1;
@@ -209,7 +250,7 @@ s32 func_80B3CF60(EnDnp* this, PlayState* play) {
this->unk_322 |= 8;
this->actionFunc = func_80B3D3F8;
ret = true;
- } else if (!(gSaveContext.save.weekEventReg[23] & 0x20) && Actor_HasParent(&this->actor, play)) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20) && Actor_HasParent(&this->actor, play)) {
SubS_UpdateFlags(&this->unk_322, 0, 7);
this->unk_322 &= ~0x500;
this->actor.parent = NULL;
@@ -224,11 +265,11 @@ s32 func_80B3CF60(EnDnp* this, PlayState* play) {
s32 func_80B3D044(EnDnp* this, PlayState* play) {
s32 ret = false;
- if (play->csCtx.state != 0) {
+ if (play->csCtx.state != CS_STATE_IDLE) {
if (!(this->unk_322 & 0x200)) {
this->unk_322 |= (0x200 | 0x10);
this->actor.flags &= ~ACTOR_FLAG_1;
- this->unk_324 = 0xFF;
+ this->cueId = 255;
}
SubS_UpdateFlags(&this->unk_322, 0, 7);
this->actionFunc = func_80B3D11C;
@@ -244,47 +285,51 @@ s32 func_80B3D044(EnDnp* this, PlayState* play) {
}
void func_80B3D11C(EnDnp* this, PlayState* play) {
- static s32 D_80B3DE74[] = {
- 0, 16, 14, 10, 18, 12, 5, 7, 2, 19, 21, 22, 24, 8,
+ static s32 sCsAnimations[] = {
+ EN_DNP_ANIM_JUMP_KICK, EN_DNP_ANIM_CUTSCENE_IDLE, EN_DNP_ANIM_GREETING,
+ EN_DNP_ANIM_THINK_START, EN_DNP_ANIM_WALK, EN_DNP_ANIM_ARMS_TOGETHER_START,
+ EN_DNP_ANIM_LAUGH_START, EN_DNP_ANIM_TURN_AROUND, EN_DNP_ANIM_CUTSCENE_HURRY,
+ EN_DNP_ANIM_ANGRY_START, EN_DNP_ANIM_JUMP, EN_DNP_ANIM_BOUNCE_START,
+ EN_DNP_ANIM_GLARE_START, EN_DNP_ANIM_BOW,
};
- s32 temp_v0;
- s32 val;
+ s32 cueChannel;
+ s32 cueId;
- if (!(gSaveContext.save.weekEventReg[29] & 0x40) && (play->sceneId == SCENE_MITURIN) &&
- (play->csCtx.currentCsIndex == 0)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_29_40) && (play->sceneId == SCENE_MITURIN) && (play->csCtx.scriptIndex == 0)) {
this->unk_322 |= 0x20;
- gSaveContext.save.weekEventReg[29] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_29_40);
}
- if (Cutscene_CheckActorAction(play, 101)) {
- temp_v0 = Cutscene_GetActorActionIndex(play, 101);
- val = play->csCtx.actorActions[temp_v0]->action;
- if (this->unk_324 != (u8)val) {
- func_80B3CC38(this, D_80B3DE74[val]);
- if (this->unk_340 == 16) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_101)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_101);
+ cueId = play->csCtx.actorCues[cueChannel]->id;
+ if (this->cueId != (u8)cueId) {
+ EnDnp_ChangeAnim(this, sCsAnimations[cueId]);
+ if (this->animIndex == EN_DNP_ANIM_CUTSCENE_IDLE) {
this->unk_322 |= 8;
} else {
this->unk_322 &= ~8;
}
- if (this->unk_340 == 19) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_DHVO04);
+ if (this->animIndex == EN_DNP_ANIM_ANGRY_START) {
+ Actor_PlaySfx(&this->actor, NA_SE_VO_DHVO04);
}
- if (this->unk_340 == 24) {
+ if (this->animIndex == EN_DNP_ANIM_GLARE_START) {
this->unk_322 &= ~0x80;
- this->unk_336 = 3;
- this->unk_334 = 0;
+ this->eyeIndex = EN_DNP_EYE_ANGRY;
+ this->blinkTimer = 0;
}
}
- this->unk_324 = val;
- if (((this->unk_340 == 10) || (this->unk_340 == 12) || (this->unk_340 == 5) || (this->unk_340 == 19) ||
- (this->unk_340 == 22) || (this->unk_340 == 24)) &&
+ this->cueId = cueId;
+ if (((this->animIndex == EN_DNP_ANIM_THINK_START) || (this->animIndex == EN_DNP_ANIM_ARMS_TOGETHER_START) ||
+ (this->animIndex == EN_DNP_ANIM_LAUGH_START) || (this->animIndex == EN_DNP_ANIM_ANGRY_START) ||
+ (this->animIndex == EN_DNP_ANIM_BOUNCE_START) || (this->animIndex == EN_DNP_ANIM_GLARE_START)) &&
Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- func_80B3CC38(this, this->unk_340 + 1);
+ EnDnp_ChangeAnim(this, this->animIndex + 1);
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, temp_v0);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
}
}
@@ -300,14 +345,17 @@ void func_80B3D338(EnDnp* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if ((this->unk_32E != 0) && (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING)) {
- Actor_MarkForDeath(&this->actor);
- } else if (this->unk_32E == 0) {
+ Actor_Kill(&this->actor);
+ return;
+ }
+
+ if (this->unk_32E == 0) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->unk_32E = 1;
} else {
this->actor.textId = 0x971;
player->actor.textId = this->actor.textId;
- func_800B8500(&this->actor, play, 9999.9f, 9999.9f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 9999.9f, 9999.9f, PLAYER_IA_MINUS1);
}
}
}
@@ -323,7 +371,7 @@ void func_80B3D3F8(EnDnp* this, PlayState* play) {
}
void func_80B3D47C(EnDnp* this, PlayState* play) {
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
Math_SmoothStepToF(&this->actor.scale.x, 0.0085f, 0.1f, 0.01f, 0.001f);
if ((s32)(this->actor.scale.x * 10000.0f) >= 85) {
this->actor.flags |= ACTOR_FLAG_1;
@@ -338,11 +386,11 @@ void func_80B3D47C(EnDnp* this, PlayState* play) {
}
void func_80B3D558(EnDnp* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
- gSaveContext.save.weekEventReg[23] |= 0x20;
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
+ SET_WEEKEVENTREG(WEEKEVENTREG_23_20);
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
@@ -350,36 +398,38 @@ void EnDnp_Init(Actor* thisx, PlayState* play) {
EnDnp* this = THIS;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 16.0f);
- SkelAnime_InitFlex(play, &this->skelAnime, &object_dnq_Skel_010D60, NULL, this->jointTable, this->morphTable, 26);
- this->unk_340 = -1;
- func_80B3CC38(this, 15);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gDekuPrincessSkel, NULL, this->jointTable, this->morphTable,
+ DEKU_PRINCESS_LIMB_MAX);
+ this->animIndex = EN_DNP_ANIM_NONE;
+ EnDnp_ChangeAnim(this, EN_DNP_ANIM_IDLE);
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit);
this->unk_322 = 0;
this->actor.targetMode = 0;
this->unk_322 |= (0x100 | 0x80 | 0x10);
this->actor.gravity = -1.0f;
- if (ENDNP_GET_7(&this->actor) == ENDNP_GET_7_1) {
+ if (EN_DNP_GET_TYPE(&this->actor) == EN_DNP_TYPE_RELEASED_FROM_BOTTLE) {
this->actor.flags &= ~ACTOR_FLAG_1;
Actor_SetScale(&this->actor, 0.00085000007f);
SubS_UpdateFlags(&this->unk_322, 0, 7);
this->actor.shape.rot.x = 0;
this->actor.world.rot.x = this->actor.shape.rot.x;
- this->actor.cutscene = 0x10;
+ this->actor.csId = 16;
this->actionFunc = func_80B3D47C;
- } else if (((ENDNP_GET_7(&this->actor) == ENDNP_GET_7_0) && !Inventory_HasItemInBottle(ITEM_DEKU_PRINCESS) &&
- !(gSaveContext.save.weekEventReg[23] & 0x20)) ||
- ((ENDNP_GET_7(&this->actor) == ENDNP_GET_7_2) && (gSaveContext.save.weekEventReg[23] & 0x20))) {
+ } else if (((EN_DNP_GET_TYPE(&this->actor) == EN_DNP_TYPE_WOODFALL_TEMPLE) &&
+ !Inventory_HasItemInBottle(ITEM_DEKU_PRINCESS) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) ||
+ ((EN_DNP_GET_TYPE(&this->actor) == EN_DNP_TYPE_DEKU_KINGS_CHAMBER) &&
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20))) {
Actor_SetScale(&this->actor, 0.0085f);
SubS_UpdateFlags(&this->unk_322, 3, 7);
this->unk_322 |= 0x400;
- if ((play->sceneId == SCENE_MITURIN) && (gSaveContext.save.weekEventReg[29] & 0x40)) {
+ if ((play->sceneId == SCENE_MITURIN) && CHECK_WEEKEVENTREG(WEEKEVENTREG_29_40)) {
this->unk_322 |= 0x20;
- func_80B3CC38(this, 1);
+ EnDnp_ChangeAnim(this, EN_DNP_ANIM_HURRY);
}
this->actionFunc = func_80B3D2D4;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -406,13 +456,13 @@ void EnDnp_Update(Actor* thisx, PlayState* play) {
func_80B3CD1C(this);
func_80B3CEC0(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
sp2C = this->collider.dim.radius + 50;
sp28 = this->collider.dim.height + 30;
- if ((this->unk_322 & 0x400) && !(gSaveContext.save.weekEventReg[23] & 0x20)) {
- Actor_PickUp(&this->actor, play, GI_MAX, sp2C, sp28);
+ if ((this->unk_322 & 0x400) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) {
+ Actor_OfferGetItem(&this->actor, play, GI_MAX, sp2C, sp28);
}
- func_8013C964(&this->actor, play, sp2C, sp28, PLAYER_AP_NONE, this->unk_322 & 7);
+ func_8013C964(&this->actor, play, sp2C, sp28, PLAYER_IA_NONE, this->unk_322 & 7);
Actor_SetFocus(&this->actor, 30.0f);
func_80B3CC80(this, play);
}
@@ -467,7 +517,7 @@ void EnDnp_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
}
}
- if (limbIndex == 12) {
+ if (limbIndex == DEKU_PRINCESS_LIMB_HEAD) {
func_80B3D974(this->unk_330 + 0x4000, this->unk_332 + this->actor.shape.rot.y + 0x4000, &this->unk_1D8,
&this->unk_1E4, phi_v1, phi_v0);
Matrix_Pop();
@@ -481,11 +531,11 @@ void EnDnp_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
}
void EnDnp_Draw(Actor* thisx, PlayState* play) {
- static TexturePtr D_80B3DEAC[] = {
- object_dnq_Tex_0103D0,
- object_dnq_Tex_0105D0,
- object_dnq_Tex_0107D0,
- object_dnq_Tex_0109D0,
+ static TexturePtr sEyeTextures[] = {
+ gDekuPrincessEyeOpenTex,
+ gDekuPrincessEyeHalfTex,
+ gDekuPrincessEyeClosedTex,
+ gDekuPrincessEyeAngryTex,
};
EnDnp* this = THIS;
@@ -494,7 +544,7 @@ void EnDnp_Draw(Actor* thisx, PlayState* play) {
func_8012C28C(play->state.gfxCtx);
- gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80B3DEAC[this->unk_336]));
+ gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex]));
SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
this->skelAnime.dListCount, NULL, EnDnp_PostLimbDraw, EnDnp_TransformLimbDraw,
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 e76180afe..64f0baf93 100644
--- a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.h
+++ b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.h
@@ -2,18 +2,19 @@
#define Z_EN_DNP_H
#include "global.h"
+#include "objects/object_dnq/object_dnq.h"
struct EnDnp;
typedef void (*EnDnpActionFunc)(struct EnDnp*, PlayState*);
-#define ENDNP_GET_7(thisx) ((thisx)->params & 7)
+#define EN_DNP_GET_TYPE(thisx) ((thisx)->params & 7)
-enum {
- /* 0x0 */ ENDNP_GET_7_0,
- /* 0x1 */ ENDNP_GET_7_1,
- /* 0x2 */ ENDNP_GET_7_2,
-};
+typedef enum {
+ /* 0x0 */ EN_DNP_TYPE_WOODFALL_TEMPLE,
+ /* 0x1 */ EN_DNP_TYPE_RELEASED_FROM_BOTTLE,
+ /* 0x2 */ EN_DNP_TYPE_DEKU_KINGS_CHAMBER,
+} EnDnpType;
typedef struct EnDnp {
/* 0x000 */ Actor actor;
@@ -22,22 +23,20 @@ typedef struct EnDnp {
/* 0x18C */ ColliderCylinder collider;
/* 0x1D8 */ Vec3f unk_1D8;
/* 0x1E4 */ Vec3s unk_1E4;
- /* 0x1EA */ Vec3s jointTable[26];
- /* 0x286 */ Vec3s morphTable[26];
+ /* 0x1EA */ Vec3s jointTable[DEKU_PRINCESS_LIMB_MAX];
+ /* 0x286 */ Vec3s morphTable[DEKU_PRINCESS_LIMB_MAX];
/* 0x322 */ u16 unk_322;
- /* 0x324 */ u8 unk_324;
+ /* 0x324 */ u8 cueId;
/* 0x328 */ s32 unk_328;
/* 0x32C */ UNK_TYPE1 unk_32C[0x2];
/* 0x32E */ s16 unk_32E;
/* 0x330 */ s16 unk_330;
/* 0x332 */ s16 unk_332;
- /* 0x334 */ s16 unk_334;
- /* 0x336 */ s16 unk_336;
+ /* 0x334 */ s16 blinkTimer;
+ /* 0x336 */ s16 eyeIndex;
/* 0x338 */ s16 unk_338;
/* 0x33A */ UNK_TYPE1 unk_33A[0x6];
- /* 0x340 */ s32 unk_340;
+ /* 0x340 */ s32 animIndex;
} EnDnp; // size = 0x344
-extern const ActorInit En_Dnp_InitVars;
-
#endif // Z_EN_DNP_H
diff --git a/src/overlays/actors/ovl_En_Dnq/overlay.cfg b/src/overlays/actors/ovl_En_Dnq/overlay.cfg
deleted file mode 100644
index 169a41621..000000000
--- a/src/overlays/actors/ovl_En_Dnq/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Dnq
-z_en_dnq.c
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 3e252c034..c328b02d6 100644
--- a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c
+++ b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c
@@ -8,7 +8,6 @@
*/
#include "z_en_dnq.h"
-#include "objects/object_dno/object_dno.h"
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8)
@@ -26,7 +25,7 @@ static s32 D_80A53400[] = {
0x0C0E089D, 0x0C0F089E, 0x0C111202, 0x100E089F, 0x0C100000, 0x0E08A10C, 0x0F08A20C, 0x10000000,
};
-const ActorInit En_Dnq_InitVars = {
+ActorInit En_Dnq_InitVars = {
ACTOR_EN_DNQ,
ACTORCAT_NPC,
FLAGS,
@@ -61,30 +60,30 @@ static ColliderCylinderInit sCylinderInit = {
static CollisionCheckInfoInit2 sColChkInfoInit = { 1, 0, 0, 0, MASS_IMMOVABLE };
static AnimationInfoS sAnimationInfo[] = {
- { &object_dno_Anim_008328, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_dno_Anim_008328, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_dno_Anim_007528, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
- { &object_dno_Anim_0006F0, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
- { &object_dno_Anim_000BF8, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_dno_Anim_002690, 0.0f, 0, -1, ANIMMODE_ONCE, 0 },
- { &object_dno_Anim_002690, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
- { &object_dno_Anim_003408, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_dno_Anim_006984, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
- { &object_dno_Anim_005E18, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
- { &object_dno_Anim_005A14, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
- { &object_dno_Anim_005284, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
- { &object_dno_Anim_001AEC, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
- { &object_dno_Anim_001100, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
- { &object_dno_Anim_004EA0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_dno_Anim_00F504, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_dno_Anim_0047B8, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_dno_Anim_003DBC, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
- { &object_dno_Anim_005A14, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
- { &object_dno_Anim_003DBC, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+ { &gDekuKingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ { &gDekuKingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+ { &gDekuKingSurpriseAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
+ { &gDekuKingJumpedOnStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
+ { &gDekuKingJumpedOnLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+ { &gDekuKingJumpedOnEndAnim, 0.0f, 0, -1, ANIMMODE_ONCE, 0 },
+ { &gDekuKingJumpedOnEndAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
+ { &gDekuKingLyingDownTwitchAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+ { &gDekuKingWailLoopAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
+ { &gDekuKingFootStampStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
+ { &gDekuKingFootStampLoopAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
+ { &gDekuKingWailStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
+ { &gDekuKingMarchAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
+ { &gDekuKingSpinScepterAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
+ { &gDekuKingIntimidateAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+ { &gDekuKingPointScepterAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+ { &gDekuKingJumpAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+ { &gDekuKingLaughAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
+ { &gDekuKingFootStampLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+ { &gDekuKingLaughAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
};
s32 EnDnq_ValidatePictograph(PlayState* play, Actor* thisx) {
- return Snap_ValidatePictograph(play, thisx, PICTOGRAPH_DEKU_KING, &thisx->focus.pos, &thisx->world.rot, 120.0f,
+ return Snap_ValidatePictograph(play, thisx, PICTO_VALID_DEKU_KING, &thisx->focus.pos, &thisx->world.rot, 120.0f,
480.0f, 0x38E3);
}
@@ -122,10 +121,10 @@ void func_80A52604(EnDnq* this, PlayState* play) {
s32 func_80A52648(EnDnq* this, PlayState* play) {
s32 ret = false;
- if (play->csCtx.state != 0) {
+ if (play->csCtx.state != CS_STATE_IDLE) {
if (!(this->unk_37C & 0x20)) {
this->picto.actor.flags &= ~ACTOR_FLAG_1;
- this->unk_1DC = 0xFF;
+ this->cueId = 255;
this->unk_37C |= 0x20;
}
SubS_UpdateFlags(&this->unk_37C, 0, 7);
@@ -133,7 +132,7 @@ s32 func_80A52648(EnDnq* this, PlayState* play) {
} else {
if (this->unk_37C & 0x20) {
this->picto.actor.flags |= ACTOR_FLAG_1;
- this->unk_1DC = 0xFF;
+ this->cueId = 255;
this->unk_37C &= ~0x20;
SubS_UpdateFlags(&this->unk_37C, 3, 7);
}
@@ -260,7 +259,7 @@ s32 func_80A52B68(EnDnq* this, PlayState* play) {
Player* player = GET_PLAYER(play);
u16 temp = play->msgCtx.currentTextId;
- if ((player->stateFlags1 & 0x40) && (player->targetActor == &this->picto.actor)) {
+ if ((player->stateFlags1 & PLAYER_STATE1_40) && (player->talkActor == &this->picto.actor)) {
switch (temp) {
case 0x89B:
func_80A5257C(this, 18);
@@ -310,7 +309,7 @@ void func_80A52C6C(EnDnq* this, PlayState* play) {
}
s32* func_80A52CF8(EnDnq* this, PlayState* play) {
- if (gSaveContext.save.weekEventReg[23] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) {
return &D_80A53400[14];
}
@@ -344,11 +343,11 @@ void func_80A52DC8(EnDnq* this, PlayState* play) {
SubS_UpdateFlags(&this->unk_37C, 0, 7);
}
- if (!(gSaveContext.save.weekEventReg[23] & 0x20)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) {
this->unk_390 = 70.0f;
if (Inventory_HasItemInBottle(ITEM_DEKU_PRINCESS) && !Play_InCsMode(play) &&
- (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) && (ActorCutscene_GetCurrentIndex() == -1)) {
- if ((DECR(this->unk_384) == 0) && (gSaveContext.save.weekEventReg[29] & 0x40)) {
+ (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) && (CutsceneManager_GetCurrentCsId() == CS_ID_NONE)) {
+ if ((DECR(this->unk_384) == 0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_29_40)) {
Message_StartTextbox(play, 0x969, NULL);
this->unk_384 = 200;
}
@@ -362,7 +361,7 @@ void func_80A52DC8(EnDnq* this, PlayState* play) {
this->picto.actor.xzDistToPlayer = this->unk_394;
- if (gSaveContext.save.weekEventReg[83] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_83_08)) {
func_80A52A78(this, play);
} else if (this->unk_3A4 == 0) {
Math_ApproachS(&this->picto.actor.shape.rot.y, this->picto.actor.world.rot.y, 3, 0x2AA8);
@@ -392,19 +391,19 @@ void func_80A53038(EnDnq* this, PlayState* play) {
static s32 D_80A535FC[] = {
0, 1, 2, 3, 5, 6,
};
- s32 temp_v0;
- u32 temp_v1;
+ s32 cueChannel;
+ u32 cueId;
- if (Cutscene_CheckActorAction(play, 105)) {
- temp_v0 = Cutscene_GetActorActionIndex(play, 105);
- temp_v1 = play->csCtx.actorActions[temp_v0]->action;
- if (this->unk_1DC != (u8)temp_v1) {
- func_80A5257C(this, D_80A535FC[temp_v1]);
- this->unk_1DC = temp_v1;
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_105)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_105);
+ cueId = play->csCtx.actorCues[cueChannel]->id;
+ if (this->cueId != (u8)cueId) {
+ func_80A5257C(this, D_80A535FC[cueId]);
+ this->cueId = cueId;
}
if ((this->unk_398 == 4) && Animation_OnFrame(&this->skelAnime, 2.0f)) {
- Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_KINGNUTS_DAMAGE);
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_KINGNUTS_DAMAGE);
}
if (((this->unk_398 == 3) || (this->unk_398 == 6)) &&
@@ -412,7 +411,7 @@ void func_80A53038(EnDnq* this, PlayState* play) {
func_80A5257C(this, this->unk_398 + 1);
}
- Cutscene_ActorTranslateAndYaw(&this->picto.actor, play, temp_v0);
+ Cutscene_ActorTranslateAndYaw(&this->picto.actor, play, cueChannel);
}
}
@@ -420,7 +419,8 @@ void EnDnq_Init(Actor* thisx, PlayState* play) {
EnDnq* this = THIS;
ActorShape_Init(&this->picto.actor.shape, 0.0f, NULL, 14.0f);
- SkelAnime_InitFlex(play, &this->skelAnime, &object_dno_Skel_00EB48, NULL, this->jointTable, this->morphTable, 33);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gDekuKingSkel, NULL, this->jointTable, this->morphTable,
+ DEKU_KING_LIMB_MAX);
this->unk_398 = -1;
func_80A5257C(this, 0);
Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &sCylinderInit);
@@ -430,7 +430,7 @@ void EnDnq_Init(Actor* thisx, PlayState* play) {
this->unk_386 = 0;
this->unk_37C = 0;
SubS_UpdateFlags(&this->unk_37C, 3, 7);
- if (gSaveContext.save.weekEventReg[9] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_09_80)) {
this->unk_3A4 = 1;
} else {
this->unk_3A4 = 0;
@@ -455,11 +455,11 @@ void EnDnq_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
func_80A52B68(this, play);
SkelAnime_Update(&this->skelAnime);
- Actor_UpdateBgCheckInfo(play, &this->picto.actor, 30.0f, 12.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->picto.actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
this->unk_394 = this->picto.actor.xzDistToPlayer;
func_80A52C6C(this, play);
func_8013C964(&this->picto.actor, play, this->unk_390, fabsf(this->picto.actor.playerHeightRel) + 1.0f,
- PLAYER_AP_NONE, this->unk_37C & 7);
+ PLAYER_IA_NONE, this->unk_37C & 7);
this->picto.actor.xzDistToPlayer = this->unk_394;
Actor_SetFocus(&this->picto.actor, 46.0f);
func_80A52604(this, play);
diff --git a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.h b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.h
index 9e4bbd52a..6ede37a55 100644
--- a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.h
+++ b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.h
@@ -2,6 +2,7 @@
#define Z_EN_DNQ_H
#include "global.h"
+#include "objects/object_dno/object_dno.h"
#include "z64snap.h"
struct EnDnq;
@@ -13,10 +14,10 @@ typedef struct EnDnq {
/* 0x148 */ SkelAnime skelAnime;
/* 0x18C */ EnDnqActionFunc actionFunc;
/* 0x190 */ ColliderCylinder collider;
- /* 0x1DC */ u8 unk_1DC;
+ /* 0x1DC */ u8 cueId;
/* 0x1E0 */ s32 unk_1E0;
- /* 0x1E4 */ Vec3s jointTable[33];
- /* 0x2AA */ Vec3s morphTable[33];
+ /* 0x1E4 */ Vec3s jointTable[DEKU_KING_LIMB_MAX];
+ /* 0x2AA */ Vec3s morphTable[DEKU_KING_LIMB_MAX];
/* 0x370 */ Vec3f unk_370;
/* 0x37C */ u16 unk_37C;
/* 0x37E */ s16 unk_37E;
@@ -34,6 +35,4 @@ typedef struct EnDnq {
/* 0x3A4 */ s32 unk_3A4;
} EnDnq; // size = 0x3A8
-extern const ActorInit En_Dnq_InitVars;
-
#endif // Z_EN_DNQ_H
diff --git a/src/overlays/actors/ovl_En_Dns/overlay.cfg b/src/overlays/actors/ovl_En_Dns/overlay.cfg
deleted file mode 100644
index 3fc03b217..000000000
--- a/src/overlays/actors/ovl_En_Dns/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Dns
-z_en_dns.c
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 f8588614f..1f754f1d5 100644
--- a/src/overlays/actors/ovl_En_Dns/z_en_dns.c
+++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.c
@@ -39,7 +39,7 @@ static s32 D_8092DCB0[] = {
0x0E08330C, 0x09000015, 0x1C014016, 0x10000000, 0x0E082E0C, 0x10000000,
};
-const ActorInit En_Dns_InitVars = {
+ActorInit En_Dns_InitVars = {
ACTOR_EN_DNS,
ACTORCAT_NPC,
FLAGS,
@@ -92,7 +92,7 @@ void func_8092C5C0(EnDns* this) {
if (((this->animIndex == EN_DNS_ANIM_WALK_1) || (this->animIndex == EN_DNS_ANIM_WALK_2) ||
(this->animIndex == EN_DNS_ANIM_RUN_START) || (this->animIndex == EN_DNS_ANIM_RUN_LOOP)) &&
(Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 3.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_WALK);
}
}
@@ -144,7 +144,7 @@ void func_8092C740(EnDns* this, PlayState* play) {
this->unk_2CE = CLAMP(this->unk_2CE, -0x3FFC, 0x3FFC);
Math_Vec3f_Copy(&sp28, &player->actor.world.pos);
- sp28.y = player->bodyPartsPos[7].y + 3.0f;
+ sp28.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
Math_Vec3f_Copy(&sp34, &this->actor.world.pos);
sp34.y += 10.0f;
temp = Math_Vec3f_Pitch(&sp34, &sp28);
@@ -180,7 +180,7 @@ void func_8092C934(EnDns* this) {
s32* func_8092C9BC(EnDns* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (!(gSaveContext.save.weekEventReg[23] & 0x20)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) {
if (player->transformation != PLAYER_FORM_DEKU) {
return &D_8092DCB0[16];
} else if (this->unk_2FC != 0) {
@@ -205,19 +205,19 @@ s32* func_8092C9BC(EnDns* this, PlayState* play) {
return 0;
}
-s32 func_8092CA74(EnDns* this) {
+s32 EnDns_GetCueType(EnDns* this) {
switch (ENDNS_GET_7(&this->actor)) {
case ENDNS_GET_7_0:
- return 465;
+ return CS_CMD_ACTOR_CUE_465;
case ENDNS_GET_7_1:
- return 466;
+ return CS_CMD_ACTOR_CUE_466;
case ENDNS_GET_7_2:
- return 467;
+ return CS_CMD_ACTOR_CUE_467;
case ENDNS_GET_7_3:
- return 468;
+ return CS_CMD_ACTOR_CUE_468;
}
return 0;
@@ -249,13 +249,13 @@ s32 func_8092CAD0(EnDns* this, PlayState* play) {
s32 func_8092CB98(EnDns* this, PlayState* play) {
s32 phi_v1 = 0;
- if (play->csCtx.state != 0) {
+ if (play->csCtx.state != CS_STATE_IDLE) {
if (!(this->unk_2C6 & 0x80)) {
- this->unk_2C8 = func_8092CA74(this);
+ this->cueType = EnDns_GetCueType(this);
this->actor.flags &= ~ACTOR_FLAG_1;
SubS_UpdateFlags(&this->unk_2C6, 0, 7);
this->unk_2C6 |= 0x80;
- this->unk_1D8 = 0xFF;
+ this->cueId = 255;
}
phi_v1 = 1;
} else if (this->unk_2C6 & 0x80) {
@@ -272,7 +272,8 @@ s32 func_8092CC68(PlayState* play) {
s32 ret = false;
s16 bgId;
- if (!Play_InCsMode(play) && (player->actor.bgCheckFlags & 1) && (player->transformation != PLAYER_FORM_DEKU)) {
+ if (!Play_InCsMode(play) && (player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) &&
+ (player->transformation != PLAYER_FORM_DEKU)) {
bgId = player->actor.floorBgId;
if (SurfaceType_GetSceneExitIndex(&play->colCtx, player->actor.floorPoly, bgId) != 4) {
ret = true;
@@ -315,7 +316,7 @@ s32 func_8092CE38(EnDns* this) {
this->unk_2C6 &= ~0x200;
this->skelAnime.curFrame = 0.0f;
if (this->unk_2D2 == 2) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_JUMP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_JUMP);
}
this->unk_2D2++;
if (this->unk_2D2 >= 3) {
@@ -328,7 +329,7 @@ s32 func_8092CE38(EnDns* this) {
this->actor.world.rot.y = BINANG_ROT180(this->actor.world.rot.y);
this->unk_2E4 = 0.0f;
this->actor.shape.rot.y = this->actor.world.rot.y;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_JUMP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_JUMP);
} else if (this->skelAnime.curFrame < 13.0f) {
frame = this->skelAnime.curFrame;
this->actor.shape.rot.y = this->actor.world.rot.y;
@@ -339,7 +340,7 @@ s32 func_8092CE38(EnDns* this) {
} else {
if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 6.0f) ||
Animation_OnFrame(&this->skelAnime, 13.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_WALK);
}
if (this->skelAnime.curFrame > 7.0f) {
@@ -359,14 +360,14 @@ s32 func_8092D068(EnDns* this) {
s32 ret = false;
if (ENDNS_GET_8000(&this->actor)) {
- if (gSaveContext.save.weekEventReg[23] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) {
ret = true;
}
} else if (ENDNS_GET_4000(&this->actor)) {
- if ((gSaveContext.save.weekEventReg[9] & 0x80) && !(gSaveContext.save.weekEventReg[23] & 0x20)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_09_80) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) {
ret = true;
}
- } else if (!(gSaveContext.save.weekEventReg[9] & 0x80) && !(gSaveContext.save.weekEventReg[23] & 0x20)) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_09_80) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) {
ret = true;
}
@@ -397,16 +398,16 @@ void func_8092D1B8(EnDns* this, PlayState* play) {
}
if (!ENDNS_GET_4000(&this->actor) || (this->unk_2D2 != 0)) {
- if (!(gSaveContext.save.weekEventReg[23] & 0x20) && !(gSaveContext.eventInf[1] & 0x20) && func_8092CC68(play)) {
- player->stateFlags1 |= 0x20;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20) && !CHECK_EVENTINF(EVENTINF_15) && func_8092CC68(play)) {
+ player->stateFlags1 |= PLAYER_STATE1_20;
this->unk_2C6 |= 0x100;
SubS_UpdateFlags(&this->unk_2C6, 4, 7);
play_sound(NA_SE_SY_FOUND);
- gSaveContext.eventInf[1] |= 0x20;
+ SET_EVENTINF(EVENTINF_15);
this->unk_2F4 = func_8092CCEC;
func_8092C63C(this, EN_DNS_ANIM_WALK_1);
this->actionFunc = EnDns_DoNothing;
- } else if (gSaveContext.eventInf[1] & 0x40) {
+ } else if (CHECK_EVENTINF(EVENTINF_16)) {
func_8092CCEC(this, play);
func_8092C63C(this, EN_DNS_ANIM_WALK_1);
this->actionFunc = func_8092D330;
@@ -440,8 +441,8 @@ void func_8092D330(EnDns* this, PlayState* play) {
play->nextEntrance = ENTRANCE(DEKU_PALACE, 1);
gSaveContext.nextCutsceneIndex = 0;
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_03;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
}
}
@@ -456,7 +457,7 @@ void func_8092D4D8(EnDns* this, PlayState* play) {
SubS_UpdateFlags(&this->unk_2C6, 3, 7);
this->unk_2F4 = NULL;
if (ENDNS_GET_4000(&this->actor)) {
- if (!(gSaveContext.eventInf[1] & 0x20)) {
+ if (!CHECK_EVENTINF(EVENTINF_15)) {
this->skelAnime.curFrame = this->unk_2F0;
this->actor.world.rot.y = this->unk_2DA;
func_8092C63C(this, EN_DNS_ANIM_DANCE);
@@ -478,15 +479,15 @@ void func_8092D5E8(EnDns* this, PlayState* play) {
EN_DNS_ANIM_SURPRISE_START,
EN_DNS_ANIM_RUN_START,
};
- s32 temp_v0;
- u32 temp_v1;
+ s32 cueChannel;
+ u32 cueId;
- if (Cutscene_CheckActorAction(play, this->unk_2C8)) {
- temp_v0 = Cutscene_GetActorActionIndex(play, this->unk_2C8);
- temp_v1 = play->csCtx.actorActions[temp_v0]->action;
- if (this->unk_1D8 != (u8)temp_v1) {
- func_8092C63C(this, D_8092DE0C[temp_v1]);
- this->unk_1D8 = temp_v1;
+ if (Cutscene_IsCueInChannel(play, this->cueType)) {
+ cueChannel = Cutscene_GetCueChannel(play, this->cueType);
+ cueId = play->csCtx.actorCues[cueChannel]->id;
+ if (this->cueId != (u8)cueId) {
+ func_8092C63C(this, D_8092DE0C[cueId]);
+ this->cueId = cueId;
}
if (((this->animIndex == EN_DNS_ANIM_SURPRISE_START) || (this->animIndex == EN_DNS_ANIM_RUN_START)) &&
@@ -494,7 +495,7 @@ void func_8092D5E8(EnDns* this, PlayState* play) {
func_8092C63C(this, this->animIndex + 1);
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, temp_v0);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
}
}
@@ -502,7 +503,7 @@ void EnDns_Init(Actor* thisx, PlayState* play) {
EnDns* this = THIS;
if (!func_8092D068(this)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -521,14 +522,14 @@ void EnDns_Init(Actor* thisx, PlayState* play) {
SubS_UpdateFlags(&this->unk_2C6, 3, 7);
this->unk_2C6 |= (0x40 | 0x10);
this->unk_2C6 |= 0x200;
- if (gSaveContext.save.weekEventReg[9] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_09_80)) {
this->unk_2FC = 1;
} else {
this->unk_2FC = 0;
}
this->actionFunc = func_8092D1B8;
- gSaveContext.eventInf[1] &= (u8)~0x20;
- gSaveContext.eventInf[1] &= (u8)~0x40;
+ CLEAR_EVENTINF(EVENTINF_15);
+ CLEAR_EVENTINF(EVENTINF_16);
}
void EnDns_Destroy(Actor* thisx, PlayState* play) {
@@ -549,8 +550,8 @@ void EnDns_Update(Actor* thisx, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
func_8092C934(this);
func_8092C86C(this, play);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4);
- func_8013C964(&this->actor, play, 80.0f, 40.0f, PLAYER_AP_NONE, this->unk_2C6 & 7);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
+ func_8013C964(&this->actor, play, 80.0f, 40.0f, PLAYER_IA_NONE, this->unk_2C6 & 7);
Actor_SetFocus(&this->actor, 34.0f);
func_8092C6FC(this, play);
func_8092C5C0(this);
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 3a382c192..4b730abd3 100644
--- a/src/overlays/actors/ovl_En_Dns/z_en_dns.h
+++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.h
@@ -25,8 +25,7 @@ typedef struct EnDns {
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ EnDnsActionFunc actionFunc;
/* 0x18C */ ColliderCylinder collider;
- /* 0x1D8 */ u8 unk_1D8;
- /* 0x1D9 */ UNK_TYPE1 unk_1D9[0x3];
+ /* 0x1D8 */ u8 cueId;
/* 0x1DC */ s32 unk_1DC;
/* 0x1E0 */ s32* unk_1E0;
/* 0x1E4 */ Gfx* unk_1E4[13];
@@ -35,7 +34,7 @@ typedef struct EnDns {
/* 0x22A */ Vec3s jointTable[KINGS_CHAMBER_DEKU_GUARD_LIMB_MAX];
/* 0x278 */ Vec3s morphTable[KINGS_CHAMBER_DEKU_GUARD_LIMB_MAX];
/* 0x2C6 */ u16 unk_2C6;
- /* 0x2C8 */ u16 unk_2C8;
+ /* 0x2C8 */ u16 cueType;
/* 0x2CA */ UNK_TYPE1 unk_2CA[0x2];
/* 0x2CC */ s16 unk_2CC;
/* 0x2CE */ s16 unk_2CE;
@@ -57,6 +56,4 @@ typedef struct EnDns {
/* 0x2FC */ s32 unk_2FC;
} EnDns; // size = 0x300
-extern const ActorInit En_Dns_InitVars;
-
#endif // Z_EN_DNS_H
diff --git a/src/overlays/actors/ovl_En_Dodongo/overlay.cfg b/src/overlays/actors/ovl_En_Dodongo/overlay.cfg
deleted file mode 100644
index 05d2f0a6e..000000000
--- a/src/overlays/actors/ovl_En_Dodongo/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Dodongo
-z_en_dodongo.c
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 cd3710a3b..a57814337 100644
--- a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c
+++ b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c
@@ -35,7 +35,7 @@ void func_808786C8(EnDodongo* this, PlayState* play);
void func_80878724(EnDodongo* this);
void func_808787B0(EnDodongo* this, PlayState* play);
-const ActorInit En_Dodongo_InitVars = {
+ActorInit En_Dodongo_InitVars = {
ACTOR_EN_DODONGO,
ACTORCAT_ENEMY,
FLAGS,
@@ -358,7 +358,7 @@ void func_80876930(EnDodongo* this, PlayState* play, Vec3f* arg2) {
s16 temp2;
f32 temp3;
- if (func_800C9BB8(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) == COLPOLY_SURFACE_SNOW) {
+ if (SurfaceType_GetMaterial(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) == SURFACE_MATERIAL_SNOW) {
sp80 = &D_8087932C;
sp7C = &D_80879330;
} else {
@@ -420,7 +420,7 @@ void func_80876CAC(EnDodongo* this) {
this->drawDmgEffAlpha = 1.0f;
this->timer = 80;
this->actor.flags &= ~ACTOR_FLAG_400;
- Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, 0, 80);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 80);
}
void func_80876D28(EnDodongo* this, PlayState* play) {
@@ -536,7 +536,7 @@ s32 func_80877278(EnDodongo* this, PlayState* play) {
void func_808773C4(EnDodongo* this) {
Animation_MorphToLoop(&this->skelAnime, &object_dodongo_Anim_004C20, -4.0f);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->timer = Rand_S16Offset(30, 50);
this->actionFunc = func_80877424;
}
@@ -556,7 +556,7 @@ void func_80877424(EnDodongo* this, PlayState* play) {
void func_80877494(EnDodongo* this) {
Animation_MorphToLoop(&this->skelAnime, &object_dodongo_Anim_008B1C, -4.0f);
- this->actor.speedXZ = this->unk_334 * 1.5f;
+ this->actor.speed = this->unk_334 * 1.5f;
this->timer = Rand_S16Offset(50, 70);
this->actionFunc = func_80877500;
}
@@ -568,13 +568,13 @@ void func_80877500(EnDodongo* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (Animation_OnFrame(&this->skelAnime, 19.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DODO_J_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DODO_J_WALK);
sp30.x = this->collider1Elements[2].dim.worldSphere.center.x;
sp30.y = this->collider1Elements[2].dim.worldSphere.center.y;
sp30.z = this->collider1Elements[2].dim.worldSphere.center.z;
func_80876930(this, play, &sp30);
} else if (Animation_OnFrame(&this->skelAnime, 39.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DODO_J_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DODO_J_WALK);
sp30.x = this->collider1Elements[1].dim.worldSphere.center.x;
sp30.y = this->collider1Elements[1].dim.worldSphere.center.y;
sp30.z = this->collider1Elements[1].dim.worldSphere.center.z;
@@ -587,14 +587,15 @@ void func_80877500(EnDodongo* this, PlayState* play) {
Math_ScaledStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 0x1F4);
if (this->actor.xzDistToPlayer < (100.0f * this->unk_334)) {
if ((ABS_ALT(temp_v1) < 0x1388) && (this->actor.playerHeightRel < 60.0f) &&
- !(player->stateFlags1 & 0x800000)) {
+ !(player->stateFlags1 & PLAYER_STATE1_800000)) {
func_808777A8(this);
}
}
} else {
- if ((Actor_XZDistanceToPoint(&this->actor, &this->actor.home.pos) > 150.0f) ||
+ if ((Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > 150.0f) ||
(Player_GetMask(play) == PLAYER_MASK_STONE)) {
- Math_ScaledStepToS(&this->actor.world.rot.y, Actor_YawToPoint(&this->actor, &this->actor.home.pos), 0x1F4);
+ Math_ScaledStepToS(&this->actor.world.rot.y, Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos),
+ 0x1F4);
}
this->timer--;
@@ -615,7 +616,7 @@ void func_808777A8(EnDodongo* this) {
Sphere16* sph;
Animation_MorphToPlayOnce(&this->skelAnime, &object_dodongo_Anim_0028F0, -4.0f);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
for (i = 0; i < ARRAY_COUNT(this->collider3Elements); i++) {
sph = &this->collider3.elements[i].dim.worldSphere;
@@ -640,7 +641,7 @@ void func_8087784C(EnDodongo* this, PlayState* play) {
f32 temp_f12;
if (Animation_OnFrame(&this->skelAnime, 24.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DODO_J_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DODO_J_CRY);
}
if (func_8087721C(this)) {
@@ -695,7 +696,7 @@ void func_80877DE0(EnDodongo* this) {
this->actor.flags |= ACTOR_FLAG_10;
this->timer = 25;
this->actionFunc = func_80877E60;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
void func_80877E60(EnDodongo* this, PlayState* play) {
@@ -727,9 +728,9 @@ void func_80877E60(EnDodongo* this, PlayState* play) {
}
if (Animation_OnFrame(&this->skelAnime, 28.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DODO_J_EAT);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DODO_J_EAT);
if (this->actor.child != NULL) {
- Actor_MarkForDeath(this->actor.child);
+ Actor_Kill(this->actor.child);
this->actor.child = NULL;
}
this->actor.flags &= ~ACTOR_FLAG_10;
@@ -750,14 +751,14 @@ void func_80877E60(EnDodongo* this, PlayState* play) {
this->unk_334 * 10.0f, 10);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_BOMB_EXPLOSION);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_BOMB_EXPLOSION);
if (this->actor.colChkInfo.health <= 4) {
this->actor.colChkInfo.health = 0;
Enemy_StartFinishingBlow(play, &this->actor);
} else {
this->actor.colChkInfo.health -= 4;
}
- Actor_SetColorFilter(&this->actor, 0x4000, 0x78, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 120, COLORFILTER_BUFFLAG_OPA, 8);
}
} else if (Animation_OnFrame(&this->skelAnime, 24.0f)) {
this->timer--;
@@ -809,7 +810,7 @@ void func_80878354(EnDodongo* this) {
sp18 = &object_dodongo_Anim_003B14;
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DODO_J_TAIL);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DODO_J_TAIL);
Animation_PlayOnceSetSpeed(&this->skelAnime, sp18, 2.0f);
this->timer = 0;
this->collider1.base.atFlags |= AT_ON;
@@ -823,7 +824,7 @@ void func_80878424(EnDodongo* this, PlayState* play) {
this->timer++;
if (SkelAnime_Update(&this->skelAnime)) {
- if (!(player->stateFlags1 & 0x800000) && (Player_GetMask(play) != PLAYER_MASK_STONE)) {
+ if (!(player->stateFlags1 & PLAYER_STATE1_800000) && (Player_GetMask(play) != PLAYER_MASK_STONE)) {
this->collider1.base.atFlags &= ~AT_ON;
func_808777A8(this);
} else {
@@ -848,7 +849,7 @@ void func_80878424(EnDodongo* this, PlayState* play) {
void func_80878594(EnDodongo* this) {
this->actionFunc = func_808785B0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
void func_808785B0(EnDodongo* this, PlayState* play) {
@@ -870,11 +871,11 @@ void func_808785B0(EnDodongo* this, PlayState* play) {
void func_8087864C(EnDodongo* this) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_dodongo_Anim_001A44, -4.0f);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DODO_J_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DODO_J_DAMAGE);
this->timer = 0;
this->unk_304 = 0;
- this->actor.speedXZ = 0.0f;
- Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, 0, 8);
+ this->actor.speed = 0.0f;
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
this->actionFunc = func_808786C8;
}
@@ -892,10 +893,10 @@ void func_80878724(EnDodongo* this) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_dodongo_Anim_0013C4, -8.0f);
this->timer = 0;
this->unk_304 = 0;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DODO_J_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DODO_J_DEAD);
this->actor.flags &= ~ACTOR_FLAG_1;
- this->actor.speedXZ = 0.0f;
- Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, 0, 8);
+ this->actor.speed = 0.0f;
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
this->actionFunc = func_808787B0;
}
@@ -907,7 +908,7 @@ void func_808787B0(EnDodongo* this, PlayState* play) {
func_80876DC4(this, play);
}
} else if (this->actor.colorFilterTimer == 0) {
- Actor_SetColorFilter(&this->actor, 0x4000, 0x78, 0, 4);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 120, COLORFILTER_BUFFLAG_OPA, 4);
}
if (SkelAnime_Update(&this->skelAnime)) {
@@ -920,7 +921,7 @@ void func_808787B0(EnDodongo* this, PlayState* play) {
this->timer = 8;
}
} else if (Animation_OnFrame(&this->skelAnime, 52.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GERUDOFT_DOWN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GERUDOFT_DOWN);
}
if (this->timer != 0) {
@@ -931,7 +932,7 @@ void func_808787B0(EnDodongo* this, PlayState* play) {
} else {
Item_DropCollectible(play, &this->actor.world.pos, ITEM00_RUPEE_PURPLE);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
}
@@ -993,13 +994,13 @@ void EnDodongo_UpdateDamage(EnDodongo* this, PlayState* play) {
}
} else if (this->actor.colChkInfo.damageEffect == 1) {
this->timer = 40;
- Actor_SetColorFilter(&this->actor, 0, 0xFF, 0, 40);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
func_80878594(this);
} else if (this->actor.colChkInfo.damageEffect == 5) {
this->timer = 40;
- Actor_SetColorFilter(&this->actor, 0, 0xFF, 0, 40);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL;
this->drawDmgEffScale = 0.75f;
this->drawDmgEffAlpha = 2.0f;
@@ -1023,9 +1024,11 @@ void EnDodongo_Update(Actor* thisx, PlayState* play2) {
EnDodongo_UpdateDamage(this, play);
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 75.0f, 60.0f, 70.0f, 0x1D);
- if (this->actor.bgCheckFlags & 2) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GERUDOFT_DOWN);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 75.0f, 60.0f, 70.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GERUDOFT_DOWN);
}
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider1.base);
diff --git a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.h b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.h
index a196b1f8c..3cc80b0d1 100644
--- a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.h
+++ b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.h
@@ -36,6 +36,4 @@ typedef struct EnDodongo {
/* 0x754 */ ColliderJntSphElement collider3Elements[3];
} EnDodongo; // size = 0x814
-extern const ActorInit En_Dodongo_InitVars;
-
#endif // Z_EN_DODONGO_H
diff --git a/src/overlays/actors/ovl_En_Door/overlay.cfg b/src/overlays/actors/ovl_En_Door/overlay.cfg
deleted file mode 100644
index 9c737bc9d..000000000
--- a/src/overlays/actors/ovl_En_Door/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Door
-z_en_door.c
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 5d2822d78..e2b225e23 100644
--- a/src/overlays/actors/ovl_En_Door/z_en_door.c
+++ b/src/overlays/actors/ovl_En_Door/z_en_door.c
@@ -57,7 +57,7 @@ u8 D_808675E4[] = {
/* 0x1C */ SCHEDULE_CMD_RET_NONE(),
/* 0x1D */ SCHEDULE_CMD_RET_VAL_S(8),
/* 0x1F */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(2, 0x3C - 0x23),
- /* 0x23 */ SCHEDULE_CMD_CHECK_FLAG_S(0x1C, 0x08, 0x2E - 0x27),
+ /* 0x23 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_28_08, 0x2E - 0x27),
/* 0x27 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(13, 0, 0x2D - 0x2B),
/* 0x2B */ SCHEDULE_CMD_RET_VAL_S(9),
/* 0x2D */ SCHEDULE_CMD_RET_NONE(),
@@ -93,14 +93,14 @@ u8 D_8086764C[] = {
u8 D_80867658[] = {
/* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(2, 0x13 - 0x04),
- /* 0x04 */ SCHEDULE_CMD_CHECK_FLAG_S(0x1C, 0x08, 0x0A - 0x08),
+ /* 0x04 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_28_08, 0x0A - 0x08),
/* 0x08 */ SCHEDULE_CMD_RET_VAL_S(12),
/* 0x0A */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 10, 22, 0, 0x12 - 0x10),
/* 0x10 */ SCHEDULE_CMD_RET_VAL_S(12),
/* 0x12 */ SCHEDULE_CMD_RET_NONE(),
/* 0x13 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(3, 0x28 - 0x17),
/* 0x17 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(13, 0, 0x28 - 0x1B),
- /* 0x1B */ SCHEDULE_CMD_CHECK_FLAG_S(0x33, 0x08, 0x21 - 0x1F),
+ /* 0x1B */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_08, 0x21 - 0x1F),
/* 0x1F */ SCHEDULE_CMD_RET_VAL_S(12),
/* 0x21 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(22, 0, 0x27 - 0x25),
/* 0x25 */ SCHEDULE_CMD_RET_VAL_S(12),
@@ -231,7 +231,7 @@ u8 D_8086773C[] = {
u8 D_80867744[] = {
/* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(2, 0x08 - 0x04),
- /* 0x04 */ SCHEDULE_CMD_CHECK_FLAG_S(0x63, 0x80, 0x0E - 0x08),
+ /* 0x04 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_99_80, 0x0E - 0x08),
/* 0x08 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(20, 0, 0x14 - 0x0C),
/* 0x0C */ SCHEDULE_CMD_RET_VAL_S(27),
/* 0x0E */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(18, 0, 0x14 - 0x12),
@@ -240,12 +240,12 @@ u8 D_80867744[] = {
};
u8 D_8086775C[] = {
- /* 0x00 */ SCHEDULE_CMD_CHECK_FLAG_S(0x34, 0x20, 0x1B - 0x04),
- /* 0x04 */ SCHEDULE_CMD_CHECK_FLAG_S(0x4B, 0x20, 0x1B - 0x08),
- /* 0x08 */ SCHEDULE_CMD_CHECK_FLAG_S(0x0E, 0x04, 0x0E - 0x0C),
+ /* 0x00 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE, 0x1B - 0x04),
+ /* 0x04 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_75_20, 0x1B - 0x08),
+ /* 0x08 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_14_04, 0x0E - 0x0C),
/* 0x0C */ SCHEDULE_CMD_RET_VAL_S(29),
- /* 0x0E */ SCHEDULE_CMD_CHECK_FLAG_S(0x3B, 0x01, 0x1A - 0x12),
- /* 0x12 */ SCHEDULE_CMD_CHECK_FLAG_S(0x3D, 0x02, 0x18 - 0x16),
+ /* 0x0E */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_59_01, 0x1A - 0x12),
+ /* 0x12 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_61_02, 0x18 - 0x16),
/* 0x16 */ SCHEDULE_CMD_RET_VAL_S(30),
/* 0x18 */ SCHEDULE_CMD_RET_VAL_S(31),
/* 0x1A */ SCHEDULE_CMD_RET_NONE(),
@@ -277,7 +277,7 @@ u8* D_8086778C[] = {
D_80867734, D_8086773C, D_80867744, D_8086775C, D_80867778, D_8086777C, D_80867780, D_80867784,
};
-const ActorInit En_Door_InitVars = {
+ActorInit En_Door_InitVars = {
ACTOR_EN_DOOR,
ACTORCAT_DOOR,
FLAGS,
@@ -420,7 +420,7 @@ void EnDoor_Init(Actor* thisx, PlayState* play2) {
objectInfo = &sObjInfo[15];
objectBankIndex = Object_GetIndex(&play->objectCtx, objectInfo->objectId);
if (objectBankIndex != 0) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
}
@@ -457,7 +457,7 @@ void func_80866A5C(EnDoor* this, PlayState* play) {
this->unk_1A6 = 10;
}
} else if ((this->unk_1A4 == 4) &&
- (Actor_XZDistanceBetweenActors(&this->dyna.actor, &GET_PLAYER(play)->actor) > 120.0f)) {
+ (Actor_WorldDistXZToActor(&this->dyna.actor, &GET_PLAYER(play)->actor) > 120.0f)) {
this->actionFunc = func_8086704C;
this->dyna.actor.world.rot.y = -0x1800;
}
@@ -465,62 +465,58 @@ void func_80866A5C(EnDoor* this, PlayState* play) {
}
void func_80866B20(EnDoor* this, PlayState* play) {
- static s32 D_80867BC0[4];
+ static s32 D_80867BC0;
Player* player = GET_PLAYER(play);
- Vec3f playerPosRelToDoor;
- s16 temp_a2;
- s16 yawDiff;
- s32 temp_a1_2;
- s32 temp_t0;
- u8 temp_a1;
if (Actor_ProcessTalkRequest(&this->dyna.actor, &play->state) && (this->dyna.actor.textId == 0x1821)) {
- D_80867BC0[0] = 1;
+ D_80867BC0 = true;
}
if (this->unk_1A1 != 0) {
this->actionFunc = func_80867144;
Animation_PlayOnceSetSpeed(&this->skelAnime, sAnimations[this->animIndex],
- (player->stateFlags1 & 0x8000000) ? 0.75f : 1.5f);
+ (player->stateFlags1 & PLAYER_STATE1_8000000) ? 0.75f : 1.5f);
if (this->unk_1A6 != 0) {
- gSaveContext.save.inventory.dungeonKeys[gSaveContext.mapIndex]--;
+ gSaveContext.save.saveInfo.inventory.dungeonKeys[gSaveContext.mapIndex]--;
Flags_SetSwitch(play, this->switchFlag);
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK);
}
} else if (this->unk_1A7 != 0) {
this->actionFunc = func_80866F94;
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_DOOR_OPEN);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_DOOR_OPEN);
} else if (!Player_InCsMode(play)) {
+ Vec3f playerPosRelToDoor;
+
Actor_OffsetOfPointInActorCoords(&this->dyna.actor, &playerPosRelToDoor, &player->actor.world.pos);
- if ((D_80867BC0[0] != 0) || ((fabsf(playerPosRelToDoor.y) < 20.0f) && (fabsf(playerPosRelToDoor.x) < 20.0f) &&
- (fabsf(playerPosRelToDoor.z) < 50.0f))) {
- yawDiff = player->actor.shape.rot.y - this->dyna.actor.shape.rot.y;
+ 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;
+
if (playerPosRelToDoor.z > 0.0f) {
yawDiff = (0x8000 - yawDiff);
}
if (ABS_ALT(yawDiff) < 0x3000) {
- player->doorType = 1;
+ player->doorType = PLAYER_DOORTYPE_HANDLE;
player->doorDirection = playerPosRelToDoor.z >= 0.0f ? 1.0f : -1.0f;
player->doorActor = &this->dyna.actor;
if (this->unk_1A6 != 0) {
- if (gSaveContext.save.inventory.dungeonKeys[((void)0, gSaveContext.mapIndex)] <= 0) {
- player->doorType = -1;
+ if (gSaveContext.save.saveInfo.inventory.dungeonKeys[((void)0, gSaveContext.mapIndex)] <= 0) {
+ player->doorType = PLAYER_DOORTYPE_TALKING;
this->dyna.actor.textId = 0x1802;
} else {
player->doorTimer = 10;
}
} else if (this->unk_1A4 == 4) {
- player->doorType = -1;
+ player->doorType = PLAYER_DOORTYPE_TALKING;
this->dyna.actor.textId = 0x1800;
} else if ((this->unk_1A4 == 0) || (this->unk_1A4 == 2) || (this->unk_1A4 == 3)) {
- s32 textIdOffset;
+ 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;
- temp_t0 = (play->actorCtx.unkC & 0x2AA) >> 1;
- temp_a2 = D_801AED48[this->switchFlag & 7];
- temp_a1_2 = play->actorCtx.unkC & 0x155;
- textIdOffset = (this->switchFlag >> 3) & 0xF;
- if (((this->unk_1A4 == 0) && (((temp_t0 | temp_a1_2) & temp_a2) == 0)) ||
- ((this->unk_1A4 == 2) && ((temp_a2 & temp_a1_2) == 0)) ||
- ((this->unk_1A4 == 3) && ((temp_a2 & temp_t0) == 0))) {
+ if (((this->unk_1A4 == 0) && !((halfDaysDayBit | halfDaysNightBit) & temp_a2)) ||
+ ((this->unk_1A4 == 2) && !(halfDaysNightBit & temp_a2)) ||
+ ((this->unk_1A4 == 3) && !(halfDaysDayBit & temp_a2))) {
s16 baseTextId = 0x182D;
if (this->unk_1A4 == 3) {
@@ -528,22 +524,24 @@ void func_80866B20(EnDoor* this, PlayState* play) {
} else if (this->unk_1A4 == 2) {
baseTextId = 0x181D;
}
- player->doorType = -1;
+ player->doorType = PLAYER_DOORTYPE_TALKING;
this->dyna.actor.textId = baseTextId + textIdOffset;
}
} else if ((this->unk_1A4 == 5) && (playerPosRelToDoor.z > 0.0f)) {
- ScheduleOutput sp30;
+ ScheduleOutput scheduleOutput;
- if (Schedule_RunScript(play, D_8086778C[this->switchFlag], &sp30) != 0) {
- this->dyna.actor.textId = sp30.result + 0x1800;
+ if (Schedule_RunScript(play, D_8086778C[this->switchFlag], &scheduleOutput)) {
+ this->dyna.actor.textId = scheduleOutput.result + 0x1800;
- player->doorType = ((this->dyna.actor.textId == 0x1821) && (D_80867BC0[0] != 0)) ? 5 : -1;
+ player->doorType = ((this->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_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_DOOR_OPEN);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_DOOR_OPEN);
this->actionFunc = func_80867080;
}
}
@@ -564,7 +562,7 @@ void func_80866F94(EnDoor* this, PlayState* play) {
} else {
if (Math_ScaledStepToS(&this->dyna.actor.world.rot.y, 0, 0x7D0)) {
this->actionFunc = func_80866B20;
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_AUTO_DOOR_CLOSE);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_AUTO_DOOR_CLOSE);
}
}
}
@@ -585,7 +583,7 @@ void func_80867080(EnDoor* this, PlayState* play) {
void func_808670F0(EnDoor* this, PlayState* play) {
if (Math_ScaledStepToS(&this->dyna.actor.world.rot.y, 0, 0x700)) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_DOOR_CLOSE);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_DOOR_CLOSE);
this->actionFunc = func_80866B20;
}
}
@@ -599,7 +597,7 @@ void func_80867144(EnDoor* this, PlayState* play) {
this->actionFunc = func_80866B20;
this->unk_1A1 = 0;
} else if (Animation_OnFrame(&this->skelAnime, sAnimOpenFrames[this->animIndex])) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_OC_DOOR_OPEN);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_OC_DOOR_OPEN);
if (this->skelAnime.playSpeed < 1.5f) {
numEffects = (s32)(Rand_ZeroOne() * 30.0f) + 50;
for (i = 0; i < numEffects; i++) {
@@ -607,7 +605,7 @@ void func_80867144(EnDoor* this, PlayState* play) {
}
}
} else if (Animation_OnFrame(&this->skelAnime, sAnimCloseFrames[this->animIndex])) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_DOOR_CLOSE);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_DOOR_CLOSE);
}
}
}
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 359f34cd2..bea44a122 100644
--- a/src/overlays/actors/ovl_En_Door/z_en_door.h
+++ b/src/overlays/actors/ovl_En_Door/z_en_door.h
@@ -26,6 +26,4 @@ typedef struct EnDoor {
/* 0x1C8 */ EnDoorActionFunc actionFunc;
} EnDoor;
-extern const ActorInit En_Door_InitVars;
-
#endif // Z_EN_DOOR_H
diff --git a/src/overlays/actors/ovl_En_Door_Etc/overlay.cfg b/src/overlays/actors/ovl_En_Door_Etc/overlay.cfg
deleted file mode 100644
index fa6a13d8a..000000000
--- a/src/overlays/actors/ovl_En_Door_Etc/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Door_Etc
-z_en_door_etc.c
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 a17ce6193..8959dde7a 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
@@ -20,7 +20,7 @@ void func_80AC21A0(EnDoorEtc* this, PlayState* play);
void func_80AC2354(EnDoorEtc* this, PlayState* play);
void EnDoorEtc_Draw(Actor* thisx, PlayState* play);
-const ActorInit En_Door_Etc_InitVars = {
+ActorInit En_Door_Etc_InitVars = {
ACTOR_EN_DOOR_ETC,
ACTORCAT_DOOR,
FLAGS,
@@ -106,7 +106,7 @@ void EnDoorEtc_Init(Actor* thisx, PlayState* play2) {
}
objectIndex = Object_GetIndex(&play->objectCtx, objectInfo->objectId);
if (objectIndex < 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
this->objectIndex = objectIndex;
this->dListIndex = objectInfo->dListIndex;
@@ -214,7 +214,7 @@ void func_80AC2354(EnDoorEtc* this, PlayState* play) {
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;
- Actor_MarkForDeath(door);
+ Actor_Kill(door);
this->actionFunc = func_80AC21A0;
this->actor.textId = 0x239B;
Actor_SetFocus(&this->actor, 70.0f);
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 cbcdf2f54..49ca83f2a 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
@@ -22,6 +22,4 @@ typedef struct EnDoorEtc {
/* 0x1F8 */ EnDoorEtcActionFunc actionFunc;
} EnDoorEtc; // size = 0x1FC
-extern const ActorInit En_Door_Etc_InitVars;
-
#endif // Z_EN_DOOR_ETC_H
diff --git a/src/overlays/actors/ovl_En_Dragon/overlay.cfg b/src/overlays/actors/ovl_En_Dragon/overlay.cfg
deleted file mode 100644
index 2720fb7f1..000000000
--- a/src/overlays/actors/ovl_En_Dragon/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Dragon
-z_en_dragon.c
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 c8b1c9823..605d0d807 100644
--- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c
+++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c
@@ -50,7 +50,7 @@ typedef enum {
static s32 sNumPythonsDead = 0;
-const ActorInit En_Dragon_InitVars = {
+ActorInit En_Dragon_InitVars = {
ACTOR_EN_DRAGON,
ACTORCAT_ENEMY,
FLAGS,
@@ -244,7 +244,7 @@ void EnDragon_Init(Actor* thisx, PlayState* play) {
this->action = DEEP_PYTHON_ACTION_IDLE;
this->actor.hintId = TATL_HINT_ID_DEEP_PYTHON;
this->scale = 0.5f;
- this->actor.flags &= ~ACTOR_FLAG_8000000;
+ this->actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON;
EnDragon_SetupRetreatOrIdle(this);
}
@@ -345,9 +345,9 @@ void EnDragon_RetreatOrIdle(EnDragon* this, PlayState* play) {
EnDragon_SetupExtend(this);
} else if ((this->timer != 0) && (fabsf(this->actor.world.pos.x - this->actor.home.pos.x) > 101.0f) &&
(fabsf(this->actor.world.pos.z - this->actor.home.pos.z) > 101.0f)) {
- this->actor.speedXZ = -100.0f;
+ this->actor.speed = -100.0f;
} else {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if ((fabsf(this->actor.world.pos.x - this->actor.home.pos.x) > 4.0f) &&
(fabsf(this->actor.world.pos.z - this->actor.home.pos.z) > 4.0f)) {
@@ -362,7 +362,7 @@ void EnDragon_RetreatOrIdle(EnDragon* this, PlayState* play) {
void EnDragon_SetupExtend(EnDragon* this) {
this->state = 0;
this->behindJawRetreatTimer = this->state;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_UTSUBO_APPEAR_TRG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_UTSUBO_APPEAR_TRG);
this->retreatTimer = 250;
this->actionFunc = EnDragon_Extend;
}
@@ -375,25 +375,25 @@ void EnDragon_Extend(EnDragon* this, PlayState* play) {
EnDragon_SpawnBubbles(this, play, this->jawPos);
if (this->action >= DEEP_PYTHON_ACTION_DAMAGE) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_UTSUBO_BACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_UTSUBO_BACK);
EnDragon_SetupRetreatOrIdle(this);
} else if (this->retreatTimer == 0) {
this->action = DEEP_PYTHON_ACTION_RETREAT;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_UTSUBO_BACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_UTSUBO_BACK);
EnDragon_SetupRetreatOrIdle(this);
} else if (this->state == DEEP_PYTHON_EXTEND_STATE_NOT_FULLY_EXTENDED) {
Vec3f extendedPos;
Math_Vec3f_Copy(&extendedPos, &this->burrowEntrancePos);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_UTSUBO_APPEAR - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_UTSUBO_APPEAR - SFX_FLAG);
extendedPos.x += Math_SinS(this->actor.world.rot.y) * -530.0f;
extendedPos.z += Math_CosS(this->actor.world.rot.y) * -530.0f;
- this->actor.speedXZ = 40.0f;
+ this->actor.speed = 40.0f;
Math_SmoothStepToS(&this->jawZRotation, 0xFA0, 5, 0xBB8, 0x14);
if ((fabsf(this->actor.world.pos.x - extendedPos.x) < 51.0f) &&
(fabsf(this->actor.world.pos.z - extendedPos.z) < 51.0f)) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
Math_ApproachF(&this->actor.world.pos.x, extendedPos.x, 0.3f, 50.0f);
Math_ApproachF(&this->actor.world.pos.z, extendedPos.z, 0.3f, 50.0f);
if ((fabsf(this->actor.world.pos.x - extendedPos.x) < 4.0f) &&
@@ -439,7 +439,7 @@ void EnDragon_Extend(EnDragon* this, PlayState* play) {
this->behindJawRetreatTimer++;
if (this->behindJawRetreatTimer > 60) {
this->action = DEEP_PYTHON_ACTION_RETREAT;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_UTSUBO_BACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_UTSUBO_BACK);
EnDragon_SetupRetreatOrIdle(this);
}
}
@@ -447,7 +447,7 @@ void EnDragon_Extend(EnDragon* this, PlayState* play) {
}
void EnDragon_SetSubCamEyeAt(EnDragon* this, PlayState* play, Vec3f subCamEye, Vec3f subCamAt) {
- this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene);
+ this->subCamId = CutsceneManager_GetCurrentSubCamId(this->actor.csId);
Math_Vec3f_Copy(&this->subCamEye, &subCamEye);
Math_Vec3f_Copy(&this->subCamAt, &subCamAt);
Play_SetCameraAtEye(play, this->subCamId, &this->subCamAt, &this->subCamEye);
@@ -458,10 +458,10 @@ void EnDragon_SetupGrab(EnDragon* this, PlayState* play) {
Vec3f extendedPos;
s16 yaw;
- if (!ActorCutscene_GetCanPlayNext(this->grabCutsceneIndex)) {
- ActorCutscene_SetIntentToPlay(this->grabCutsceneIndex);
+ if (!CutsceneManager_IsNext(this->grabCsId)) {
+ CutsceneManager_Queue(this->grabCsId);
} else {
- ActorCutscene_StartAndSetUnkLinkFields(this->grabCutsceneIndex, &this->actor);
+ CutsceneManager_StartWithPlayerCs(this->grabCsId, &this->actor);
Math_Vec3f_Copy(&extendedPos, &this->burrowEntrancePos);
extendedPos.x += Math_SinS(this->actor.world.rot.y) * -530.0f;
extendedPos.z += Math_CosS(this->actor.world.rot.y) * -530.0f;
@@ -496,7 +496,7 @@ void EnDragon_Grab(EnDragon* this, PlayState* play) {
Vec3f pos; // used as both the extended position and the camera eye
Vec3f subCamAt;
- this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene);
+ this->subCamId = CutsceneManager_GetCurrentSubCamId(this->actor.csId);
SkelAnime_Update(&this->skelAnime);
if (this->grabTimer == 0) {
@@ -513,7 +513,7 @@ void EnDragon_Grab(EnDragon* this, PlayState* play) {
pos.z += Math_CosS(this->actor.world.rot.y) * -930.0f;
Math_Vec3f_Copy(&this->actor.world.pos, &pos);
this->jawZRotation = 0x1450;
- this->actor.speedXZ = 60.0f;
+ this->actor.speed = 60.0f;
}
this->grabTimer++;
@@ -535,7 +535,7 @@ void EnDragon_Grab(EnDragon* this, PlayState* play) {
if (this->grabTimer > sMaxGrabTimerPerPython[this->pythonIndex]) {
if (this->state == DEEP_PYTHON_GRAB_STATE_START) {
- func_800B7298(play, &this->actor, 6);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_END);
this->state = DEEP_PYTHON_GRAB_STATE_GRABBED;
}
@@ -543,7 +543,7 @@ void EnDragon_Grab(EnDragon* this, PlayState* play) {
player->actor.parent = &this->actor;
player->unk_AE8 = 50;
this->action = DEEP_PYTHON_ACTION_GRAB;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_UTSUBO_EAT);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_UTSUBO_EAT);
EnDragon_SetupAttack(this);
}
}
@@ -572,8 +572,8 @@ void EnDragon_Attack(EnDragon* this, PlayState* play) {
//! @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
- func_800B8E58((Player*)this, player->ageProperties->unk_92 + NA_SE_VO_LI_DAMAGE_S);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_UTSUBO_BITE);
+ Player_PlaySfx((Player*)&this->actor, player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_DAMAGE_S);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_UTSUBO_BITE);
CollisionCheck_GreenBlood(play, NULL, &player->actor.world.pos);
}
@@ -603,7 +603,7 @@ void EnDragon_Attack(EnDragon* this, PlayState* play) {
Math_ApproachF(&this->actor.world.pos.z, pos.z, 0.3f, 200.0f);
if ((this->state <= DEEP_PYTHON_ATTACK_STATE_START) && (this->endFrame <= currentFrame)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_UTSUBO_BITE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_UTSUBO_BITE);
if (this->animIndex != DEEP_PYTHON_ANIM_LARGE_SIDE_SWAY) {
EnDragon_ChangeAnim(this, DEEP_PYTHON_ANIM_LARGE_SIDE_SWAY);
}
@@ -612,13 +612,13 @@ void EnDragon_Attack(EnDragon* this, PlayState* play) {
}
if (((this->state != DEEP_PYTHON_ATTACK_STATE_START) && (this->endFrame <= currentFrame)) ||
- (!(player->stateFlags2 & 0x80)) || ((this->collider.elements[0].info.bumperFlags & BUMP_HIT)) ||
+ (!(player->stateFlags2 & PLAYER_STATE2_80)) || ((this->collider.elements[0].info.bumperFlags & BUMP_HIT)) ||
(this->collider.elements[1].info.bumperFlags & BUMP_HIT) ||
(this->collider.elements[2].info.bumperFlags & BUMP_HIT)) {
player->actor.parent = NULL;
this->grabWaitTimer = 30;
- ActorCutscene_Stop(this->grabCutsceneIndex);
- if (player->stateFlags2 & 0x80) {
+ CutsceneManager_Stop(this->grabCsId);
+ if (player->stateFlags2 & PLAYER_STATE2_80) {
player->unk_AE8 = 100;
}
@@ -634,10 +634,10 @@ void EnDragon_Attack(EnDragon* this, PlayState* play) {
}
void EnDragon_SetupDead(EnDragon* this, PlayState* play) {
- if (!ActorCutscene_GetCanPlayNext(this->deathCutsceneIndex)) {
- ActorCutscene_SetIntentToPlay(this->deathCutsceneIndex);
+ if (!CutsceneManager_IsNext(this->deathCsId)) {
+ CutsceneManager_Queue(this->deathCsId);
} else {
- ActorCutscene_StartAndSetUnkLinkFields(this->deathCutsceneIndex, &this->actor);
+ CutsceneManager_StartWithPlayerCs(this->deathCsId, &this->actor);
this->endFrame = Animation_GetLastFrame(&gDeepPythonSmallSideSwayAnim);
Animation_Change(&this->skelAnime, &gDeepPythonSmallSideSwayAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f);
this->timer = 20;
@@ -655,7 +655,7 @@ void EnDragon_Dead(EnDragon* this, PlayState* play) {
if ((this->timer != 0) && (fabsf(this->actor.world.pos.x - this->actor.home.pos.x) > 121.0f) &&
(fabsf(this->actor.world.pos.z - this->actor.home.pos.z) > 121.0f)) {
- this->actor.speedXZ = -120.0f;
+ this->actor.speed = -120.0f;
if (((this->pythonIndex & 1) == 0) && (Rand_ZeroOne() < 0.5f)) {
//! @bug: !play->gameplayFrames is 0 essentially all the time, so this code never runs.
if (((!play->gameplayFrames) & 0x1F)) {
@@ -667,7 +667,7 @@ void EnDragon_Dead(EnDragon* this, PlayState* play) {
return;
}
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if ((fabsf(this->actor.world.pos.x - this->actor.home.pos.x) > 20.0f) &&
(fabsf(this->actor.world.pos.z - this->actor.home.pos.z) > 20.0f)) {
Math_ApproachF(&this->actor.world.pos.x, this->actor.home.pos.x, 0.3f, 300.0f);
@@ -682,45 +682,45 @@ void EnDragon_Dead(EnDragon* this, PlayState* play) {
seahorsePos.y += -100.0f + BREG(33);
seahorsePos.z += (Math_CosS((this->actor.parent->world.rot.y + 0x8000)) * (500.0f + BREG(38)));
if (Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_OT, seahorsePos.x, seahorsePos.y,
- seahorsePos.z, 0, this->actor.shape.rot.y, 0, 0x4000, this->actor.cutscene,
- this->actor.unk20, NULL)) {
- gSaveContext.save.weekEventReg[13] |= 1;
+ seahorsePos.z, 0, this->actor.shape.rot.y, 0, 0x4000, this->actor.csId,
+ this->actor.halfDaysBits, NULL)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_13_01);
switch (this->pythonIndex) {
case 0:
- gSaveContext.save.weekEventReg[83] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_83_10);
break;
case 1:
- gSaveContext.save.weekEventReg[83] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_83_20);
break;
case 2:
- gSaveContext.save.weekEventReg[83] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_83_40);
break;
case 3:
- gSaveContext.save.weekEventReg[83] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_83_80);
break;
case 4:
- gSaveContext.save.weekEventReg[84] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_84_01);
break;
case 5:
- gSaveContext.save.weekEventReg[84] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_84_02);
break;
case 6:
- gSaveContext.save.weekEventReg[84] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_84_04);
break;
case 7:
- gSaveContext.save.weekEventReg[84] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_84_08);
break;
}
}
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
void EnDragon_UpdateDamage(EnDragon* this, PlayState* play) {
@@ -735,14 +735,14 @@ void EnDragon_UpdateDamage(EnDragon* this, PlayState* play) {
(this->collider.elements[6].info.bumperFlags & BUMP_HIT) ||
(this->collider.elements[7].info.bumperFlags & BUMP_HIT)) {
Actor_ApplyDamage(&this->actor);
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 25);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 25);
if (this->actor.colChkInfo.health > 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_UTSUBO_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_UTSUBO_DAMAGE);
this->action = DEEP_PYTHON_ACTION_DAMAGE;
} else {
Enemy_StartFinishingBlow(play, &this->actor);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_UTSUBO_DEAD);
- this->actor.flags |= ACTOR_FLAG_8000000;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_UTSUBO_DEAD);
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->actor.flags &= ~ACTOR_FLAG_1;
this->actor.flags |= ACTOR_FLAG_100000;
this->action = DEEP_PYTHON_ACTION_SETUP_DEAD;
@@ -754,7 +754,7 @@ void EnDragon_UpdateDamage(EnDragon* this, PlayState* play) {
if ((this->action == DEEP_PYTHON_ACTION_EXTEND) && (this->grabWaitTimer == 0) &&
(player->invincibilityTimer == 0) && (this->collider.elements[0].info.ocElemFlags & OCELEM_HIT) &&
(!(func_800B64FC(play, 1000.0f, &this->actor.world.pos, &sp30) >= 0.0f) || (sp30 != 1))) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->action = DEEP_PYTHON_ACTION_GRAB;
this->actor.flags |= ACTOR_FLAG_100000;
this->actionFunc = EnDragon_SetupGrab;
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 321d0ad95..2d5f31b54 100644
--- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h
+++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h
@@ -47,8 +47,8 @@ typedef struct EnDragon {
/* 0x2BA */ s16 action;
/* 0x2BC */ UNK_TYPE1 unk_2BC[0x2];
/* 0x2BE */ s16 state;
- /* 0x2C0 */ s16 grabCutsceneIndex;
- /* 0x2C2 */ s16 deathCutsceneIndex;
+ /* 0x2C0 */ s16 grabCsId;
+ /* 0x2C2 */ s16 deathCsId;
/* 0x2C4 */ UNK_TYPE1 unk_2C4[0x4];
/* 0x2C8 */ s16 subCamId;
/* 0x2CA */ s16 grabTimer; // Counts up from the time a grab starts until the time the actor begins attacking
@@ -61,6 +61,4 @@ typedef struct EnDragon {
/* 0x2FC */ ColliderJntSphElement colliderElements[8];
} EnDragon; // size = 0x4FC
-extern const ActorInit En_Dragon_InitVars;
-
#endif // Z_EN_DRAGON_H
diff --git a/src/overlays/actors/ovl_En_Drs/overlay.cfg b/src/overlays/actors/ovl_En_Drs/overlay.cfg
deleted file mode 100644
index 7a0ab3db7..000000000
--- a/src/overlays/actors/ovl_En_Drs/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Drs
-z_en_drs.c
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 5ecab4fd4..7e232d5bd 100644
--- a/src/overlays/actors/ovl_En_Drs/z_en_drs.c
+++ b/src/overlays/actors/ovl_En_Drs/z_en_drs.c
@@ -17,7 +17,7 @@ void EnDrs_Draw(Actor* thisx, PlayState* play);
void EnDrs_Idle(EnDrs* this, PlayState* play);
-const ActorInit En_Drs_InitVars = {
+ActorInit En_Drs_InitVars = {
ACTOR_EN_DRS,
ACTORCAT_PROP,
FLAGS,
@@ -108,7 +108,7 @@ void EnDrs_PostLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3s* rot
// Anju removes the Moon Mask at the start of the Couple's Mask cutscene
// after that it will no longer be rendered.
- if (!(gSaveContext.save.weekEventReg[87] & 2) && (limbIndex == WEDDING_DRESS_MANNEQUIN_LIMB_MASK)) {
+ 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);
diff --git a/src/overlays/actors/ovl_En_Drs/z_en_drs.h b/src/overlays/actors/ovl_En_Drs/z_en_drs.h
index d86121efb..d811ae780 100644
--- a/src/overlays/actors/ovl_En_Drs/z_en_drs.h
+++ b/src/overlays/actors/ovl_En_Drs/z_en_drs.h
@@ -19,6 +19,4 @@ typedef struct EnDrs {
/* 0x208 */ s8 moonMaskObjBankIndex;
} EnDrs; // size = 0x20C */
-extern const ActorInit En_Drs_InitVars;
-
#endif // Z_EN_DRS_H
diff --git a/src/overlays/actors/ovl_En_Ds2n/overlay.cfg b/src/overlays/actors/ovl_En_Ds2n/overlay.cfg
deleted file mode 100644
index d0764f1c1..000000000
--- a/src/overlays/actors/ovl_En_Ds2n/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ds2n
-z_en_ds2n.c
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 7e517ce09..67dff9c41 100644
--- a/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c
+++ b/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c
@@ -20,7 +20,7 @@ void EnDs2n_Draw(Actor* thisx, PlayState* play);
void EnDs2n_Idle(EnDs2n* this, PlayState* play);
-const ActorInit En_Ds2n_InitVars = {
+ActorInit En_Ds2n_InitVars = {
ACTOR_EN_DS2N,
ACTORCAT_NPC,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.h b/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.h
index c7155ed74..f2a6c0725 100644
--- a/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.h
+++ b/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.h
@@ -22,6 +22,4 @@ typedef struct EnDs2n {
} EnDs2n; // size = 0x234
-extern const ActorInit En_Ds2n_InitVars;
-
#endif // Z_EN_DS2N_H
diff --git a/src/overlays/actors/ovl_En_Dt/overlay.cfg b/src/overlays/actors/ovl_En_Dt/overlay.cfg
deleted file mode 100644
index 6eb553237..000000000
--- a/src/overlays/actors/ovl_En_Dt/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Dt
-z_en_dt.c
diff --git a/src/overlays/actors/ovl_En_Dt/z_en_dt.c b/src/overlays/actors/ovl_En_Dt/z_en_dt.c
index d4b809027..0ac7dcb4b 100644
--- a/src/overlays/actors/ovl_En_Dt/z_en_dt.c
+++ b/src/overlays/actors/ovl_En_Dt/z_en_dt.c
@@ -16,7 +16,7 @@ void EnDt_Update(Actor* thisx, PlayState* play);
void EnDt_Draw(Actor* thisx, PlayState* play);
#if 0
-const ActorInit En_Dt_InitVars = {
+ActorInit En_Dt_InitVars = {
ACTOR_EN_DT,
ACTORCAT_NPC,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Dt/z_en_dt.h b/src/overlays/actors/ovl_En_Dt/z_en_dt.h
index 78b098789..6afbf8cd2 100644
--- a/src/overlays/actors/ovl_En_Dt/z_en_dt.h
+++ b/src/overlays/actors/ovl_En_Dt/z_en_dt.h
@@ -14,6 +14,4 @@ typedef struct EnDt {
/* 0x240 */ char unk_240[0xA0];
} EnDt; // size = 0x2E0
-extern const ActorInit En_Dt_InitVars;
-
#endif // Z_EN_DT_H
diff --git a/src/overlays/actors/ovl_En_Dy_Extra/overlay.cfg b/src/overlays/actors/ovl_En_Dy_Extra/overlay.cfg
deleted file mode 100644
index 04c14d5ce..000000000
--- a/src/overlays/actors/ovl_En_Dy_Extra/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Dy_Extra
-z_en_dy_extra.c
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 7770cc3ec..b25e4eb47 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
@@ -19,7 +19,7 @@ void EnDyExtra_Draw(Actor* thisx, PlayState* play);
void func_80A61334(EnDyExtra* this, PlayState* play);
void func_80A613C8(EnDyExtra* this, PlayState* play);
-const ActorInit En_Dy_Extra_InitVars = {
+ActorInit En_Dy_Extra_InitVars = {
ACTOR_EN_DY_EXTRA,
ACTORCAT_PROP,
FLAGS,
@@ -65,7 +65,7 @@ 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) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -80,7 +80,7 @@ void EnDyExtra_Update(Actor* thisx, PlayState* play) {
EnDyExtra* this = THIS;
DECR(this->unk14C);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_PL_SPIRAL_HEAL_BEAM - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_PL_SPIRAL_HEAL_BEAM - SFX_FLAG);
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.h b/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.h
index 6d5d93ec4..0e5d8614b 100644
--- a/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.h
+++ b/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.h
@@ -19,6 +19,4 @@ typedef struct EnDyExtra {
/* 0x160 */ Vec3f unk160;
} EnDyExtra; // size = 0x16C
-extern const ActorInit En_Dy_Extra_InitVars;
-
#endif // Z_EN_DY_EXTRA_H
diff --git a/src/overlays/actors/ovl_En_Egblock/overlay.cfg b/src/overlays/actors/ovl_En_Egblock/overlay.cfg
deleted file mode 100644
index c80635d34..000000000
--- a/src/overlays/actors/ovl_En_Egblock/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Egblock
-z_en_egblock.c
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 4607e2909..509e4fa9a 100644
--- a/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c
+++ b/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c
@@ -1,22 +1,35 @@
/*
* File: z_en_egblock.c
* Overlay: ovl_En_Egblock
- * Description: Eyegore Block
+ * Description: Unused pillar. Eyegore can destroy it.
*/
#include "z_en_egblock.h"
+#include "objects/object_eg/object_eg.h"
-#define FLAGS (ACTOR_FLAG_8000000)
+#define FLAGS (ACTOR_FLAG_CANT_LOCK_ON)
#define THIS ((EnEgblock*)thisx)
+typedef enum {
+ /* 0 */ EGBLOCK_EFFECT_DEBRIS_SOLID,
+ /* 1 */ EGBLOCK_EFFECT_DEBRIS_FLAT,
+} EnEgblockEffectType;
+
void EnEgblock_Init(Actor* thisx, PlayState* play);
void EnEgblock_Destroy(Actor* thisx, PlayState* play);
void EnEgblock_Update(Actor* thisx, PlayState* play);
-void EnEgblock_Draw(Actor* thisx, PlayState* play);
+void EnEgblock_Draw(Actor* thisx, PlayState* play2);
-#if 0
-const ActorInit En_Egblock_InitVars = {
+void EnEgblock_Active(EnEgblock* this, PlayState* play);
+void EnEgblock_DoNothing(EnEgblock* this, PlayState* play);
+void EnEgblock_Inactive(EnEgblock* this, PlayState* play);
+
+void EnEgblock_SpawnEffect(EnEgblock* this, Vec3f* pos, s16 lifetime, s16 arg3);
+void EnEgblock_UpdateEffects(EnEgblock* this, PlayState* play);
+void EnEgblock_DrawEffects(EnEgblock* this, PlayState* play);
+
+ActorInit En_Egblock_InitVars = {
ACTOR_EN_EGBLOCK,
ACTORCAT_PROP,
FLAGS,
@@ -28,28 +41,191 @@ const ActorInit En_Egblock_InitVars = {
(ActorFunc)EnEgblock_Draw,
};
-#endif
+void EnEgblock_Init(Actor* thisx, PlayState* play) {
+ EnEgblock* this = THIS;
+ CollisionHeader* colHeader = NULL;
+ s32 pad;
-extern UNK_TYPE D_06001698;
-extern UNK_TYPE D_06001820;
-extern UNK_TYPE D_06001BF8;
+ DynaPolyActor_Init(&this->dyna, 0);
+ CollisionHeader_GetVirtual(&gEyegoreBlockCol, &colHeader);
+ this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
+ this->dyna.actor.colChkInfo.mass = MASS_IMMOVABLE;
+ this->inactive = false;
+ Actor_SetScale(&this->dyna.actor, 0.5f);
+ this->type = EGBLOCK_GET_TYPE(&this->dyna.actor);
+ this->paramF80 = EGBLOCK_GET_PARAM_F80(&this->dyna.actor);
+ this->param7F = EGBLOCK_GET_PARAM_7F(&this->dyna.actor);
+ if (this->type == EGBLOCK_TYPE_ACTIVE) {
+ this->dyna.actor.colChkInfo.health = 1;
+ this->actionFunc = EnEgblock_Active;
+ } else {
+ this->actionFunc = EnEgblock_DoNothing;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egblock/EnEgblock_Init.s")
+void EnEgblock_Destroy(Actor* thisx, PlayState* play) {
+ EnEgblock* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egblock/EnEgblock_Destroy.s")
+ if (this->dyna.actor.colChkInfo.health == 1) {
+ DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egblock/func_80ABA8A4.s")
+void EnEgblock_Active(EnEgblock* this, PlayState* play) {
+ if (this->dyna.actor.colChkInfo.health <= 0) {
+ s32 i;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egblock/func_80ABA988.s")
+ //! @bug Egblock doesn't have an effect with index 2, so half of these spawns do nothing.
+ for (i = 0; i < ARRAY_COUNT(this->effects); i++) {
+ EnEgblock_SpawnEffect(this, &this->dyna.actor.world.pos, 30, (i & 1) + EGBLOCK_EFFECT_DEBRIS_FLAT);
+ }
+ DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
+ Actor_SpawnFloorDustRing(play, &this->dyna.actor, &this->dyna.actor.world.pos, 30.0f, 30, 10.0f, 100, 30, true);
+ this->inactive = true;
+ this->timer = 50;
+ this->actionFunc = EnEgblock_Inactive;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egblock/func_80ABA9B8.s")
+void EnEgblock_Inactive(EnEgblock* this, PlayState* play) {
+ if (this->timer == 0) {
+ Actor_Kill(&this->dyna.actor);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egblock/EnEgblock_Update.s")
+void EnEgblock_DoNothing(EnEgblock* this, PlayState* play) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egblock/EnEgblock_Draw.s")
+void EnEgblock_Update(Actor* thisx, PlayState* play) {
+ EnEgblock* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egblock/func_80ABAAF4.s")
+ this->actionFunc(this, play);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egblock/func_80ABACB4.s")
+ DECR(this->timer);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egblock/func_80ABAE64.s")
+ EnEgblock_UpdateEffects(this, play);
+}
+
+void EnEgblock_Draw(Actor* thisx, PlayState* play2) {
+ PlayState* play = play2;
+ EnEgblock* this = THIS;
+
+ func_8012C28C(play->state.gfxCtx);
+
+ if (this->inactive != true) {
+ 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++, 0x00, 0x80, 255, 255, 255, 255);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255);
+ gSPDisplayList(POLY_OPA_DISP++, gEyegoreBlockDL);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+
+ EnEgblock_DrawEffects(this, play);
+}
+
+void EnEgblock_SpawnEffect(EnEgblock* this, Vec3f* pos, s16 lifetime, s16 arg3) {
+ EnEgblockEffect* effect = this->effects;
+ s16 i;
+
+ for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) {
+ if (!effect->isActive) {
+ effect->isActive = true;
+ effect->pos = *pos;
+ effect->pos.x += randPlusMinusPoint5Scaled(50.0f);
+ effect->pos.z += randPlusMinusPoint5Scaled(50.0f);
+ effect->timer = lifetime;
+ effect->alpha = 255;
+ effect->type = arg3;
+ effect->accel.x = Rand_ZeroOne() - 0.5f;
+ effect->accel.y = -1.0f;
+ effect->accel.z = Rand_ZeroOne() - 0.5f;
+ effect->velocity.x = 2.0f * (Rand_ZeroOne() - 0.5f);
+ 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);
+ break;
+ }
+ }
+}
+
+void EnEgblock_UpdateEffects(EnEgblock* this, PlayState* play) {
+ EnEgblockEffect* effect = this->effects;
+ s32 i;
+
+ for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) {
+ if (effect->isActive) {
+ if (effect->type != EGBLOCK_EFFECT_DEBRIS_SOLID) {
+ effect->rot.x -= 0x64;
+ effect->rot.y -= 0x64;
+ effect->rot.z -= 0x64;
+ }
+
+ effect->pos.x += effect->velocity.x;
+ effect->pos.y += effect->velocity.y;
+ effect->pos.z += effect->velocity.z;
+
+ effect->velocity.x += effect->accel.x;
+ effect->velocity.y += effect->accel.y;
+ effect->velocity.z += effect->accel.z;
+
+ if (effect->timer) {
+ effect->timer--;
+ } else {
+ effect->alpha -= 10;
+ if (effect->alpha < 10) {
+ effect->isActive = false;
+ }
+ }
+ }
+ }
+}
+
+void EnEgblock_DrawEffects(EnEgblock* this, PlayState* play) {
+ GraphicsContext* gfxCtx = play->state.gfxCtx;
+ EnEgblockEffect* effect = this->effects;
+ s16 i;
+
+ OPEN_DISPS(gfxCtx);
+
+ func_8012C28C(play->state.gfxCtx);
+
+ for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) {
+ if (effect->isActive) {
+ switch (effect->type) {
+ case EGBLOCK_EFFECT_DEBRIS_SOLID:
+ case EGBLOCK_EFFECT_DEBRIS_FLAT:
+ Matrix_Push();
+
+ Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW);
+ Matrix_Scale(effect->scale, effect->scale, effect->scale, MTXMODE_APPLY);
+ Matrix_RotateYS(effect->rot.y, MTXMODE_APPLY);
+ Matrix_RotateXS(effect->rot.x, MTXMODE_APPLY);
+ Matrix_RotateZS(effect->rot.z, MTXMODE_APPLY);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x80, 255, 255, 255, 255);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, effect->alpha);
+
+ if (effect->type == EGBLOCK_EFFECT_DEBRIS_SOLID) {
+ gSPDisplayList(POLY_OPA_DISP++, gEyegoreEffectSolidDebrisDL);
+ } else {
+ gSPDisplayList(POLY_OPA_DISP++, gEyegoreEffectFlatDebrisDL);
+ }
+
+ Matrix_Pop();
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+
+ CLOSE_DISPS(gfxCtx);
+}
diff --git a/src/overlays/actors/ovl_En_Egblock/z_en_egblock.h b/src/overlays/actors/ovl_En_Egblock/z_en_egblock.h
index d1222a5eb..2d875c4d2 100644
--- a/src/overlays/actors/ovl_En_Egblock/z_en_egblock.h
+++ b/src/overlays/actors/ovl_En_Egblock/z_en_egblock.h
@@ -7,13 +7,40 @@ struct EnEgblock;
typedef void (*EnEgblockActionFunc)(struct EnEgblock*, PlayState*);
+#define EGBLOCK_GET_PARAM_7F(thisx) ((thisx)->params & 0x7F)
+#define EGBLOCK_GET_PARAM_F80(thisx) (((thisx)->params >> 7) & 0x1F)
+#define EGBLOCK_GET_TYPE(thisx) (((thisx)->params >> 12) & 0xF)
+
+#define EGBLOCK_PARAMS(type, param1, param2) ((((type) & 0xF) << 12) | (((param1) & 0x1F) << 7) | ((param2) & 0x7F))
+
+#define EGBLOCK_TYPE_ACTIVE 0
+
+#define EGBLOCK_EFFECT_COUNT 50
+
+typedef struct {
+ /* 0x00 */ u8 isActive;
+ /* 0x04 */ Vec3f pos;
+ /* 0x10 */ s16 alpha;
+ /* 0x12 */ s16 timer;
+ /* 0x14 */ s16 type;
+ /* 0x18 */ Vec3f velocity;
+ /* 0x24 */ Vec3f accel;
+ /* 0x30 */ Vec3s rot;
+ /* 0x38 */ f32 scale;
+} EnEgblockEffect; // size = 0x3C
+
typedef struct EnEgblock {
- /* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0x5C];
+ /* 0x000 */ DynaPolyActor dyna;
+ /* 0x15C */ UNK_TYPE1 unk_15C[0x44]; // SkelAnime?
/* 0x1A0 */ EnEgblockActionFunc actionFunc;
- /* 0x1A4 */ char unk_1A4[0xC10];
+ /* 0x1A4 */ s16 type;
+ /* 0x1A6 */ s16 paramF80;
+ /* 0x1A8 */ s16 param7F;
+ /* 0x1AA */ s16 timer;
+ /* 0x1AC */ s16 inactive;
+ /* 0x1AE */ UNK_TYPE1 unk_1AE[2];
+ /* 0x1B0 */ UNK_TYPE1 unk_1B0[0x4C]; // ColliderCylinder?
+ /* 0x1FC */ EnEgblockEffect effects[EGBLOCK_EFFECT_COUNT];
} EnEgblock; // size = 0xDB4
-extern const ActorInit En_Egblock_InitVars;
-
#endif // Z_EN_EGBLOCK_H
diff --git a/src/overlays/actors/ovl_En_Egol/overlay.cfg b/src/overlays/actors/ovl_En_Egol/overlay.cfg
deleted file mode 100644
index 1073044cd..000000000
--- a/src/overlays/actors/ovl_En_Egol/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Egol
-z_en_egol.c
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 373d06583..6f9c0e73a 100644
--- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c
+++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c
@@ -5,109 +5,295 @@
*/
#include "z_en_egol.h"
+#include "objects/object_eg/object_eg.h"
+#include "objects/gameplay_keep/gameplay_keep.h"
+#include "overlays/actors/ovl_En_Estone/z_en_estone.h"
+#include "overlays/actors/ovl_En_Arrow/z_en_arrow.h"
+#include "overlays/effects/ovl_Effect_Ss_Hitmark/z_eff_ss_hitmark.h"
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_80000000)
#define THIS ((EnEgol*)thisx)
+typedef enum {
+ /* 0 */ EYEGORE_ACTION_WAIT,
+ /* 1 */ EYEGORE_ACTION_STAND,
+ /* 2 */ EYEGORE_ACTION_WALK,
+ /* 3 */ EYEGORE_ACTION_RETREAT,
+ /* 4 */ EYEGORE_ACTION_LASER,
+ /* 5 */ EYEGORE_ACTION_SLAM,
+ /* 6 */ EYEGORE_ACTION_PUNCH,
+ /* 7 */ EYEGORE_ACTION_SLAM_WAIT,
+ /* 8 */ EYEGORE_ACTION_STUNNED,
+ /* 9 */ EYEGORE_ACTION_STUN_END,
+ /* 10 */ EYEGORE_ACTION_SLAM_END,
+ /* 11 */ EYEGORE_ACTION_DAMAGED,
+ /* 12 */ EYEGORE_ACTION_STOP,
+ /* 13 */ EYEGORE_ACTION_DYING,
+ /* 14 */ EYEGORE_ACTION_DEAD
+} EnEgolAction;
+
+typedef enum {
+ /* 0 */ EYEGORE_EFFECT_IMPACT,
+ /* 1 */ EYEGORE_EFFECT_PIECE_LARGE,
+ /* 2 */ EYEGORE_EFFECT_PIECE_SMALL,
+ /* 3 */ EYEGORE_EFFECT_DEBRIS,
+} EnEgolEffectType;
+
+typedef enum {
+ /* 0 */ EYEGORE_ANIM_STAND,
+ /* 1 */ EYEGORE_ANIM_WALK,
+ /* 2 */ EYEGORE_ANIM_SLAM,
+ /* 3 */ EYEGORE_ANIM_SLAM_WAIT,
+ /* 4 */ EYEGORE_ANIM_SLAM_END,
+ /* 5 */ EYEGORE_ANIM_DAMAGED,
+ /* 6 */ EYEGORE_ANIM_DEATH,
+ /* 7 */ EYEGORE_ANIM_LASER,
+ /* 8 */ EYEGORE_ANIM_LASER_END, // unused
+ /* 9 */ EYEGORE_ANIM_STUNNED,
+ /* 10 */ EYEGORE_ANIM_STUN_END,
+ /* 11 */ EYEGORE_ANIM_RETREAT,
+ /* 12 */ EYEGORE_ANIM_SIT,
+ /* 13 */ EYEGORE_ANIM_LEFT_PUNCH,
+ /* 14 */ EYEGORE_ANIM_RIGHT_PUNCH,
+ /* 15 */ EYEGORE_ANIM_MAX,
+} EnEgolAnimation;
+
+typedef enum {
+ /* 0 */ EYEGORE_LASER_OFF,
+ /* 1 */ EYEGORE_LASER_START,
+ /* 2 */ EYEGORE_LASER_CHARGING,
+ /* 3 */ EYEGORE_LASER_FIRE,
+ /* 7 */ EYEGORE_LASER_ON = 7,
+} EnEgolLaserState;
+
void EnEgol_Init(Actor* thisx, PlayState* play);
void EnEgol_Destroy(Actor* thisx, PlayState* play);
void EnEgol_Update(Actor* thisx, PlayState* play);
-void EnEgol_Draw(Actor* thisx, PlayState* play);
+void EnEgol_Draw(Actor* thisx, PlayState* play2);
-#if 0
-// static ColliderJntSphElementInit sJntSphElementsInit[6] = {
-static ColliderJntSphElementInit D_80A80C64[6] = {
+void EnEgol_SetupWait(EnEgol* this);
+void EnEgol_Wait(EnEgol* this, PlayState* play);
+void EnEgol_SetupStand(EnEgol* this);
+void EnEgol_Stand(EnEgol* this, PlayState* play);
+void EnEgol_SetupWalk(EnEgol* this);
+void EnEgol_Walk(EnEgol* this, PlayState* play);
+void EnEgol_SetupRetreat(EnEgol* this);
+void EnEgol_Retreat(EnEgol* this, PlayState* play);
+void EnEgol_SetupLaser(EnEgol* this);
+void EnEgol_Laser(EnEgol* this, PlayState* play);
+void EnEgol_SetupStop(EnEgol* this);
+void EnEgol_Stop(EnEgol* this, PlayState* play);
+void EnEgol_SetupSlam(EnEgol* this);
+void EnEgol_Slam(EnEgol* this, PlayState* play);
+void EnEgol_SetupPunch(EnEgol* this);
+void EnEgol_Punch(EnEgol* this, PlayState* play);
+void EnEgol_SetupSlamWait(EnEgol* this);
+void EnEgol_SlamWait(EnEgol* this, PlayState* play);
+void EnEgol_SetupStunned(EnEgol* this);
+void EnEgol_Stunned(EnEgol* this, PlayState* play);
+void EnEgol_SetupStunEnd(EnEgol* this);
+void EnEgol_StunEnd(EnEgol* this, PlayState* play);
+void EnEgol_SetupSlamEnd(EnEgol* this);
+void EnEgol_SlamEnd(EnEgol* this, PlayState* play);
+void EnEgol_SetupDamaged(EnEgol* this);
+void EnEgol_Damaged(EnEgol* this, PlayState* play);
+void EnEgol_StartDeathCutscene(EnEgol* this, PlayState* play);
+void EnEgol_Death(EnEgol* this, PlayState* play);
+
+void EnEgol_SpawnEffect(EnEgol* this, Vec3f* pos, Vec3s* rot, s16 lifetime, f32 scale, s16 type);
+void EnEgol_UpdateEffects(EnEgol* this, PlayState* play);
+void EnEgol_DrawEffects(EnEgol* this, PlayState* play);
+
+static ColliderJntSphElementInit sEyeJntSphElementsInit[1] = {
{
- { ELEMTYPE_UNK2, { 0xF7CFFFFF, 0x04, 0x10 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_ON | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, },
- { 6, { { 0, 0, 0 }, 0 }, 1 },
- },
- {
- { ELEMTYPE_UNK2, { 0xF7CFFFFF, 0x04, 0x10 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_ON | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, },
- { 9, { { 0, 0, 0 }, 0 }, 1 },
- },
- {
- { ELEMTYPE_UNK2, { 0xF7CFFFFF, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, },
- { 3, { { 0, 0, 0 }, 0 }, 1 },
- },
- {
- { ELEMTYPE_UNK2, { 0xF7CFFFFF, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_NONE, },
- { 4, { { 0, 0, 0 }, 0 }, 1 },
- },
- {
- { ELEMTYPE_UNK2, { 0xF7CFFFFF, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_NONE, },
- { 7, { { 0, 0, 0 }, 0 }, 1 },
- },
- {
- { ELEMTYPE_UNK2, { 0xF7CFFFFF, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, },
- { 23, { { 0, 0, 0 }, 0 }, 1 },
+ {
+ ELEMTYPE_UNK2,
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_ON,
+ OCELEM_NONE,
+ },
+ { EYEGORE_LIMB_EYE_COLLIDER, { { 0, 0, 0 }, 0 }, 1 },
},
};
-// static ColliderJntSphInit sJntSphInit = {
-static ColliderJntSphInit D_80A80D3C = {
- { COLTYPE_METAL, AT_ON | AT_TYPE_ENEMY, AC_ON | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_JNTSPH, },
- ARRAY_COUNT(sJntSphElementsInit), D_80A80C64, // sJntSphElementsInit,
-};
-
-// static ColliderJntSphElementInit sJntSphElementsInit[1] = {
-static ColliderJntSphElementInit D_80A80C40[1] = {
+static ColliderJntSphElementInit sBodySphElementsInit[6] = {
{
- { ELEMTYPE_UNK2, { 0xF7CFFFFF, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_NONE, },
- { 14, { { 0, 0, 0 }, 0 }, 1 },
+ {
+ ELEMTYPE_UNK2,
+ { 0xF7CFFFFF, 0x04, 0x10 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_ON | TOUCH_SFX_NORMAL,
+ BUMP_ON,
+ OCELEM_ON,
+ },
+ { EYEGORE_LIMB_LEFT_HAND, { { 0, 0, 0 }, 0 }, 1 },
+ },
+ {
+ {
+ ELEMTYPE_UNK2,
+ { 0xF7CFFFFF, 0x04, 0x10 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_ON | TOUCH_SFX_NORMAL,
+ BUMP_ON,
+ OCELEM_ON,
+ },
+ { EYEGORE_LIMB_RIGHT_HAND, { { 0, 0, 0 }, 0 }, 1 },
+ },
+ {
+ {
+ ELEMTYPE_UNK2,
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_ON,
+ OCELEM_ON,
+ },
+ { EYEGORE_LIMB_HEAD, { { 0, 0, 0 }, 0 }, 1 },
+ },
+ {
+ {
+ ELEMTYPE_UNK2,
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_ON,
+ OCELEM_NONE,
+ },
+ { EYEGORE_LIMB_LEFT_SHOULDER, { { 0, 0, 0 }, 0 }, 1 },
+ },
+ {
+ {
+ ELEMTYPE_UNK2,
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_ON,
+ OCELEM_NONE,
+ },
+ { EYEGORE_LIMB_RIGHT_SHOULDER, { { 0, 0, 0 }, 0 }, 1 },
+ },
+ {
+ {
+ ELEMTYPE_UNK2,
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_ON,
+ OCELEM_ON,
+ },
+ { EYEGORE_LIMB_FAULDS, { { 0, 0, 0 }, 0 }, 1 },
},
};
-// static ColliderJntSphInit sJntSphInit = {
-static ColliderJntSphInit D_80A80D4C = {
- { COLTYPE_NONE, AT_ON | AT_TYPE_ENEMY, AC_ON | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_JNTSPH, },
- ARRAY_COUNT(sJntSphElementsInit), D_80A80C40, // sJntSphElementsInit,
+static ColliderJntSphInit sBodyJntSphInit = {
+ {
+ COLTYPE_METAL,
+ AT_ON | AT_TYPE_ENEMY,
+ AC_ON | AC_TYPE_PLAYER,
+ OC1_ON | OC1_TYPE_ALL,
+ OC2_TYPE_1,
+ COLSHAPE_JNTSPH,
+ },
+ ARRAY_COUNT(sBodySphElementsInit),
+ sBodySphElementsInit,
};
-// static ColliderQuadInit sQuadInit = {
-static ColliderQuadInit D_80A80D5C = {
- { COLTYPE_NONE, AT_ON | AT_TYPE_ENEMY, AC_NONE, OC1_NONE, OC2_NONE, COLSHAPE_QUAD, },
- { ELEMTYPE_UNK0, { 0xF7CFFFFF, 0x07, 0x10 }, { 0x00000000, 0x00, 0x00 }, TOUCH_ON | TOUCH_SFX_NORMAL | TOUCH_UNK7, BUMP_NONE, OCELEM_NONE, },
+static ColliderJntSphInit sEyeJntSphInit = {
+ {
+ COLTYPE_NONE,
+ AT_ON | AT_TYPE_ENEMY,
+ AC_ON | AC_TYPE_PLAYER,
+ OC1_ON | OC1_TYPE_ALL,
+ OC2_TYPE_1,
+ COLSHAPE_JNTSPH,
+ },
+ ARRAY_COUNT(sEyeJntSphElementsInit),
+ sEyeJntSphElementsInit,
+};
+
+static ColliderQuadInit sLaserQuadInit = {
+ {
+ COLTYPE_NONE,
+ AT_ON | AT_TYPE_ENEMY,
+ AC_NONE,
+ OC1_NONE,
+ OC2_NONE,
+ COLSHAPE_QUAD,
+ },
+ {
+ ELEMTYPE_UNK0,
+ { 0xF7CFFFFF, 0x07, 0x10 },
+ { 0x00000000, 0x00, 0x00 },
+ TOUCH_ON | TOUCH_SFX_NORMAL | TOUCH_UNK7,
+ 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 } } },
};
-// static DamageTable sDamageTable = {
-static DamageTable D_80A80DAC = {
- /* Deku Nut */ DMG_ENTRY(0, 0xF),
- /* Deku Stick */ DMG_ENTRY(0, 0xF),
- /* Horse trample */ DMG_ENTRY(0, 0x0),
- /* Explosives */ DMG_ENTRY(2, 0xE),
- /* Zora boomerang */ DMG_ENTRY(1, 0xE),
- /* Normal arrow */ DMG_ENTRY(1, 0xE),
- /* UNK_DMG_0x06 */ DMG_ENTRY(0, 0x0),
- /* Hookshot */ DMG_ENTRY(1, 0xE),
- /* Goron punch */ DMG_ENTRY(1, 0xE),
- /* Sword */ DMG_ENTRY(0, 0xF),
- /* Goron pound */ DMG_ENTRY(0, 0xF),
- /* Fire arrow */ DMG_ENTRY(2, 0xE),
- /* Ice arrow */ DMG_ENTRY(2, 0xE),
- /* Light arrow */ DMG_ENTRY(2, 0x4),
- /* Goron spikes */ DMG_ENTRY(1, 0xE),
- /* Deku spin */ DMG_ENTRY(1, 0xE),
- /* Deku bubble */ DMG_ENTRY(1, 0xE),
- /* Deku launch */ DMG_ENTRY(2, 0xE),
- /* UNK_DMG_0x12 */ DMG_ENTRY(0, 0xF),
- /* Zora barrier */ DMG_ENTRY(0, 0x0),
- /* Normal shield */ DMG_ENTRY(0, 0x0),
- /* Light ray */ DMG_ENTRY(0, 0xF),
- /* Thrown object */ DMG_ENTRY(1, 0xE),
- /* Zora punch */ DMG_ENTRY(1, 0xE),
- /* Spin attack */ DMG_ENTRY(0, 0xF),
- /* Sword beam */ DMG_ENTRY(0, 0x0),
- /* Normal Roll */ DMG_ENTRY(0, 0x0),
- /* UNK_DMG_0x1B */ DMG_ENTRY(0, 0x0),
- /* UNK_DMG_0x1C */ DMG_ENTRY(0, 0x0),
- /* Unblockable */ DMG_ENTRY(0, 0x0),
- /* UNK_DMG_0x1E */ DMG_ENTRY(0, 0x0),
- /* Powder Keg */ DMG_ENTRY(1, 0xF),
+typedef enum {
+ /* 0x0 */ EYEGORE_DMGEFF_IMMUNE_0,
+ /* 0x4 */ EYEGORE_DMGEFF_LIGHT_ARROW = 4,
+ /* 0xE */ EYEGORE_DMGEFF_NONE = 0xE,
+ /* 0xF */ EYEGORE_DMGEFF_IMMUNE_F,
+} EnEgolDamageEffect;
+
+static DamageTable sDamageTable = {
+ /* Deku Nut */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_F),
+ /* Deku Stick */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_F),
+ /* Horse trample */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_0),
+ /* Explosives */ DMG_ENTRY(2, EYEGORE_DMGEFF_NONE),
+ /* Zora boomerang */ DMG_ENTRY(1, EYEGORE_DMGEFF_NONE),
+ /* Normal arrow */ DMG_ENTRY(1, EYEGORE_DMGEFF_NONE),
+ /* UNK_DMG_0x06 */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_0),
+ /* Hookshot */ DMG_ENTRY(1, EYEGORE_DMGEFF_NONE),
+ /* Goron punch */ DMG_ENTRY(1, EYEGORE_DMGEFF_NONE),
+ /* Sword */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_F),
+ /* Goron pound */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_F),
+ /* Fire arrow */ DMG_ENTRY(2, EYEGORE_DMGEFF_NONE),
+ /* Ice arrow */ DMG_ENTRY(2, EYEGORE_DMGEFF_NONE),
+ /* Light arrow */ DMG_ENTRY(2, EYEGORE_DMGEFF_LIGHT_ARROW),
+ /* Goron spikes */ DMG_ENTRY(1, EYEGORE_DMGEFF_NONE),
+ /* Deku spin */ DMG_ENTRY(1, EYEGORE_DMGEFF_NONE),
+ /* Deku bubble */ DMG_ENTRY(1, EYEGORE_DMGEFF_NONE),
+ /* Deku launch */ DMG_ENTRY(2, EYEGORE_DMGEFF_NONE),
+ /* UNK_DMG_0x12 */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_F),
+ /* Zora barrier */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_0),
+ /* Normal shield */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_0),
+ /* Light ray */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_F),
+ /* Thrown object */ DMG_ENTRY(1, EYEGORE_DMGEFF_NONE),
+ /* Zora punch */ DMG_ENTRY(1, EYEGORE_DMGEFF_NONE),
+ /* Spin attack */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_F),
+ /* Sword beam */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_0),
+ /* Normal Roll */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_0),
+ /* UNK_DMG_0x1B */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_0),
+ /* UNK_DMG_0x1C */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_0),
+ /* Unblockable */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_0),
+ /* UNK_DMG_0x1E */ DMG_ENTRY(0, EYEGORE_DMGEFF_IMMUNE_0),
+ /* Powder Keg */ DMG_ENTRY(1, EYEGORE_DMGEFF_IMMUNE_F),
};
-const ActorInit En_Egol_InitVars = {
+static Color_RGB8 sEyePrimColors[] = {
+ { 175, 255, 255 }, // light cyan
+ { 195, 245, 10 }, // lime green
+ { 255, 55, 205 }, // magenta
+};
+
+static Color_RGB8 sEyeEnvColors[] = {
+ { 255, 115, 155 }, // pink
+ { 40, 155, 155 }, // dark cyan
+ { 215, 255, 255 }, // light cyan
+};
+
+static Color_RGB8 sLightOrbColors[] = {
+ { 255, 255, 255 }, // white
+ { 255, 255, 255 }, // white
+};
+
+ActorInit En_Egol_InitVars = {
ACTOR_EN_EGOL,
ACTORCAT_ENEMY,
FLAGS,
@@ -119,99 +305,1347 @@ const ActorInit En_Egol_InitVars = {
(ActorFunc)EnEgol_Draw,
};
-#endif
+void EnEgol_ChangeAnim(EnEgol* this, s32 animation) {
+ static AnimationHeader* sAnimations[EYEGORE_ANIM_MAX] = {
+ &gEyegoreStandAnim, &gEyegoreWalkAnim, &gEyegoreSlamAnim,
+ &gEyegoreSlamWaitAnim, &gEyegoreSlamEndAnim, &gEyegoreDamagedAnim,
+ &gEyegoreDeathAnim, &gEyegoreLaserAnim, &gEyegoreUnusedLaserEndAnim,
+ &gEyegoreStunnedAnim, &gEyegoreStunEndAnim, &gEyegoreRetreatAnim,
+ &gEyegoreSitAnim, &gEyegoreLeftPunchAnim, &gEyegoreRightPunchAnim,
+ };
+ static u8 sAnimModes[EYEGORE_ANIM_MAX] = {
+ ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE,
+ ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE,
+ ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_ONCE, ANIMMODE_ONCE,
+ };
+ this->animation = animation;
+ this->animEndFrame = Animation_GetLastFrame(sAnimations[this->animation]);
+ Animation_Change(&this->skelAnime, sAnimations[this->animation], 1.0f, 0.0f, this->animEndFrame,
+ sAnimModes[this->animation], 0.0f);
+}
-extern ColliderJntSphElementInit D_80A80C64[6];
-extern ColliderJntSphInit D_80A80D3C;
-extern ColliderJntSphElementInit D_80A80C40[1];
-extern ColliderJntSphInit D_80A80D4C;
-extern ColliderQuadInit D_80A80D5C;
-extern DamageTable D_80A80DAC;
+void EnEgol_FootstepEffects(EnEgol* this, PlayState* play, f32 leftFootFrame, f32 rightFootFrame) {
+ if (Animation_OnFrame(&this->skelAnime, leftFootFrame) || Animation_OnFrame(&this->skelAnime, rightFootFrame)) {
+ Vec3f spawnPos;
+ Player* player = GET_PLAYER(play);
+ s32 quakeSize;
+ s32 pad;
-extern UNK_TYPE D_06000040;
-extern UNK_TYPE D_060094E4;
-extern UNK_TYPE D_0600EE4C;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_WALK);
+ quakeSize = 4 - (s32)(fabsf(player->actor.world.pos.y - this->actor.world.pos.y) * 0.02f);
+ if (quakeSize > 4) {
+ quakeSize = 4;
+ } else if (quakeSize < 1) {
+ quakeSize = 1;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7C990.s")
+ if (player->stateFlags3 != PLAYER_STATE3_1000000) {
+ func_800BC848(&this->actor, play, quakeSize, 2);
+ }
+ if (Animation_OnFrame(&this->skelAnime, leftFootFrame)) {
+ Math_Vec3f_Copy(&spawnPos, &this->leftFootPos);
+ spawnPos.y = this->actor.floorHeight;
+ Actor_SpawnFloorDustRing(play, &this->actor, &spawnPos, 0.0f, 10, 6.0f, 50, 30, true);
+ } else {
+ Math_Vec3f_Copy(&spawnPos, &this->rightFootPos);
+ spawnPos.y = this->actor.floorHeight;
+ Actor_SpawnFloorDustRing(play, &this->actor, &spawnPos, 0.0f, 10, 6.0f, 50, 30, true);
+ }
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7CA18.s")
+void EnEgol_DestroyBlocks(EnEgol* this, PlayState* play, Vec3f pos1, Vec3f pos2) {
+ Actor* prop = play->actorCtx.actorLists[ACTORCAT_PROP].first;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7CBC4.s")
+ while (prop != NULL) {
+ if (prop->id != ACTOR_EN_EGBLOCK) {
+ prop = prop->next;
+ continue;
+ }
+ if (prop->colChkInfo.health > 0) {
+ Vec3f blockTo1;
+ Vec3f blockTo2;
+ f32 dist1;
+ f32 dist2;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7CD08.s")
+ blockTo1.x = pos1.x - prop->world.pos.x;
+ blockTo1.y = pos1.y - prop->world.pos.y;
+ blockTo1.z = pos1.z - prop->world.pos.z;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/EnEgol_Init.s")
+ blockTo2.x = pos2.x - prop->world.pos.x;
+ blockTo2.y = pos2.y - prop->world.pos.y;
+ blockTo2.z = pos2.z - prop->world.pos.z;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/EnEgol_Destroy.s")
+ dist1 = sqrtf(SQXZ(blockTo1));
+ dist2 = sqrtf(SQXZ(blockTo2));
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7D140.s")
+ if ((dist1 < 40.0f) || (dist2 < 40.0f)) {
+ dist1 = sqrtf(SQ(blockTo1.y));
+ dist2 = sqrtf(SQ(blockTo2.y));
+ if ((dist1 < 40.0f) || (dist2 < 40.0f)) {
+ prop->colChkInfo.health = 0;
+ Actor_PlaySfx(&this->actor, NA_SE_EV_WALL_BROKEN);
+ break;
+ }
+ }
+ }
+ prop = prop->next;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7D168.s")
+void EnEgol_GetWaypoint(EnEgol* this) {
+ if ((this->pathIndex != -1) && (this->path != NULL) &&
+ !SubS_CopyPointFromPath(this->path, this->waypoint, &this->waypointPos)) {
+ Actor_Kill(&this->actor);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7D1E4.s")
+#define EYEGORE_SET_SPH_DIM(element, centerX, centerY, centerZ, radiusV, scaleV) \
+ element.dim.modelSphere.radius = radiusV; \
+ element.dim.scale = scaleV; \
+ element.dim.modelSphere.center.x = centerX; \
+ element.dim.modelSphere.center.y = centerY; \
+ element.dim.modelSphere.center.z = centerZ
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7D240.s")
+void EnEgol_Init(Actor* thisx, PlayState* play) {
+ EnEgol* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7D27C.s")
+ this->actor.gravity = -2.0f;
+ Actor_SetScale(&this->actor, 0.015f);
+ this->actor.colChkInfo.damageTable = &sDamageTable;
+ ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 60.0f);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7D2C4.s")
+ this->actor.colChkInfo.mass = MASS_IMMOVABLE;
+ this->actor.hintId = TATL_HINT_ID_EYEGORE;
+ this->actor.colChkInfo.health = 8;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7D710.s")
+ SkelAnime_InitFlex(play, &this->skelAnime, &gEyegoreSkel, &gEyegoreStandAnim, this->jointTable, this->morphTable,
+ EYEGORE_LIMB_MAX);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7D780.s")
+ Collider_InitAndSetJntSph(play, &this->bodyCollider, &this->actor, &sBodyJntSphInit, this->bodyElements);
+ Collider_InitAndSetJntSph(play, &this->eyeCollider, &this->actor, &sEyeJntSphInit, this->eyeElements);
+ Collider_InitAndSetQuad(play, &this->laserCollider, &this->actor, &sLaserQuadInit);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7DAAC.s")
+ this->pathIndex = EYEGORE_GET_PATH(&this->actor);
+ if (this->pathIndex == 0x3F) {
+ this->pathIndex = -1;
+ Actor_Kill(&this->actor);
+ return;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7DAF0.s")
+ this->wakeupRange = this->actor.world.rot.x * 20.0f;
+ this->actor.world.rot.x = 0;
+ if (this->wakeupRange < 0.0f) {
+ this->wakeupRange = 200.0f;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7E2E8.s")
+ this->minLaserRange = this->actor.world.rot.z * 20.0f;
+ this->actor.world.rot.z = 0;
+ if (this->minLaserRange < 0.0f) {
+ this->minLaserRange = 200.0f;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7E344.s")
+ this->path = SubS_GetPathByIndex(play, this->pathIndex, 0x3F);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7E478.s")
+ EYEGORE_SET_SPH_DIM(this->eyeCollider.elements[0], 500, 0, 0, 26, 1.0f);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7E4B4.s")
+ EYEGORE_SET_SPH_DIM(this->bodyCollider.elements[0], 1800, 100, 0, 20, 1.0f);
+ EYEGORE_SET_SPH_DIM(this->bodyCollider.elements[1], 1800, 100, 0, 20, 1.0f);
+ EYEGORE_SET_SPH_DIM(this->bodyCollider.elements[2], 1000, -500, 0, 35, 1.0f);
+ EYEGORE_SET_SPH_DIM(this->bodyCollider.elements[3], 200, 200, 0, 25, 1.0f);
+ EYEGORE_SET_SPH_DIM(this->bodyCollider.elements[4], 300, 200, 0, 25, 1.0f);
+ EYEGORE_SET_SPH_DIM(this->bodyCollider.elements[5], 2100, -300, 0, 37, 1.0f);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7E7EC.s")
+ this->switchFlag = EYEGORE_GET_SWITCH(&this->actor);
+ if (this->switchFlag == 0x7F) {
+ this->switchFlag = -1;
+ }
+ if ((this->switchFlag > -1) && Flags_GetSwitch(play, this->switchFlag)) {
+ Actor_Kill(&this->actor);
+ return;
+ }
+ EnEgol_SetupWait(this);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7E820.s")
+void EnEgol_Destroy(Actor* thisx, PlayState* play) {
+ EnEgol* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7E924.s")
+ Collider_DestroyJntSph(play, &this->bodyCollider);
+ Collider_DestroyJntSph(play, &this->eyeCollider);
+ Collider_DestroyQuad(play, &this->laserCollider);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7E970.s")
+void EnEgol_SetupWait(EnEgol* this) {
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
+ this->action = EYEGORE_ACTION_WAIT;
+ this->actionFunc = EnEgol_Wait;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7E9D0.s")
+void EnEgol_Wait(EnEgol* this, PlayState* play) {
+ f32 curFrame = this->skelAnime.curFrame;
+ s16 angleToFacing = this->actor.shape.rot.y - this->actor.yawTowardsPlayer;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7EA28.s")
+ if ((curFrame >= this->animEndFrame) && (ABS_ALT(angleToFacing) < 0x3000) &&
+ (this->actor.xzDistToPlayer < this->wakeupRange)) {
+ EnEgol_SetupStand(this);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7EA88.s")
+void EnEgol_SetupStand(EnEgol* this) {
+ EnEgol_ChangeAnim(this, EYEGORE_ANIM_STAND);
+ this->actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON;
+ this->action = EYEGORE_ACTION_STAND;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_STAND);
+ this->actionFunc = EnEgol_Stand;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7EAD8.s")
+void EnEgol_Stand(EnEgol* this, PlayState* play) {
+ f32 curFrame = this->skelAnime.curFrame;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7EB14.s")
+ if (curFrame >= this->animEndFrame) {
+ EnEgol_SetupWalk(this);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7EB54.s")
+void EnEgol_SetupWalk(EnEgol* this) {
+ EnEgol_ChangeAnim(this, EYEGORE_ANIM_WALK);
+ this->laserCount = 0;
+ EnEgol_GetWaypoint(this);
+ this->action = EYEGORE_ACTION_WALK;
+ this->actionFunc = EnEgol_Walk;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7EB90.s")
+void EnEgol_Walk(EnEgol* this, PlayState* play) {
+ s16 angleToFacing = this->actor.world.rot.y - this->actor.yawTowardsPlayer;
+ f32 curFrame = this->skelAnime.curFrame;
+ Player* player = GET_PLAYER(play);
+ Vec3f spawnPos;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7EBDC.s")
+ Math_SmoothStepToS(&this->headRot, 0, 1, 0x3E8, 0);
+ Math_Vec3f_Copy(&spawnPos, &gZeroVec3f);
+ if (curFrame >= this->animEndFrame) {
+ this->laserCount++;
+ if (this->laserCount > 0) {
+ this->laserCount = 0;
+ if (this->actor.xzDistToPlayer > this->minLaserRange) {
+ EnEgol_SetupLaser(this);
+ return;
+ }
+ }
+ }
+ if ((this->actor.world.pos.y - 50.0f) <= player->actor.world.pos.y) {
+ if (Animation_OnFrame(&this->skelAnime, 24.0f)) {
+ Math_Vec3f_Copy(&spawnPos, &this->rightFootPos);
+ spawnPos.y = this->actor.floorHeight + 2.0f;
+ EnEgol_SpawnEffect(this, &spawnPos, &gZeroVec3s, 100, 0.005f, EYEGORE_EFFECT_IMPACT);
+ }
+ if (Animation_OnFrame(&this->skelAnime, 9.0f)) {
+ Math_Vec3f_Copy(&spawnPos, &this->leftFootPos);
+ spawnPos.y = this->actor.floorHeight + 2.0f;
+ EnEgol_SpawnEffect(this, &spawnPos, &gZeroVec3s, 100, 0.005f, EYEGORE_EFFECT_IMPACT);
+ }
+ }
+ if ((ABS_ALT(angleToFacing) < 0x3000) && (this->actor.xzDistToPlayer < 100.0f)) {
+ EnEgol_SetupSlam(this);
+ } else {
+ s16 angleBehind;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7EC84.s")
+ if (!((this->skelAnime.curFrame == 0.0f) ||
+ ((9.0f <= this->skelAnime.curFrame) && (this->skelAnime.curFrame <= 15.0f)) ||
+ ((24.0f <= this->skelAnime.curFrame) && (this->skelAnime.curFrame <= 29.0f)))) {
+ Math_ApproachF(&this->actor.world.pos.x, this->waypointPos.x, 0.5f,
+ fabsf(Math_SinS(this->actor.world.rot.y) * 4.0f));
+ Math_ApproachF(&this->actor.world.pos.z, this->waypointPos.z, 0.5f,
+ fabsf(Math_CosS(this->actor.world.rot.y) * 4.0f));
+ }
+ Math_SmoothStepToS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &this->waypointPos), 1,
+ 0x7D0, 0);
+ EnEgol_FootstepEffects(this, play, 9.0f, 24.0f);
+ angleBehind = this->actor.world.rot.y - this->actor.yawTowardsPlayer + 0x8000;
+ if (ABS_ALT(angleBehind) < 0x2000) {
+ this->waypoint--;
+ if (this->waypoint < 0) {
+ this->waypoint = 0;
+ }
+ EnEgol_SetupStop(this);
+ } else {
+ f32 dx = this->actor.world.pos.x - this->waypointPos.x;
+ f32 dz = this->actor.world.pos.z - this->waypointPos.z;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7ED14.s")
+ if (sqrtf(SQ(dx) + SQ(dz)) < 4.0f) {
+ if (this->path != NULL) {
+ this->waypoint++;
+ if (this->waypoint >= this->path->count) {
+ this->waypoint -= 2;
+ if (this->waypoint < 0) {
+ this->waypoint = 0;
+ }
+ EnEgol_SetupStop(this);
+ }
+ EnEgol_GetWaypoint(this);
+ }
+ }
+ if (this->actor.wallBgId != BGCHECK_SCENE) {
+ EnEgol_DestroyBlocks(this, play, this->rightFootPos, this->leftFootPos);
+ }
+ }
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7EFB8.s")
+void EnEgol_SetupRetreat(EnEgol* this) {
+ EnEgol_ChangeAnim(this, EYEGORE_ANIM_RETREAT);
+ this->laserCount = 0;
+ EnEgol_GetWaypoint(this);
+ this->actor.world.rot.y = Math_Vec3f_Yaw(&this->actor.world.pos, &this->waypointPos);
+ this->actor.shape.rot.y = this->actor.world.rot.y + 0x8000;
+ this->action = EYEGORE_ACTION_RETREAT;
+ this->actionFunc = EnEgol_Retreat;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/EnEgol_Update.s")
+void EnEgol_Retreat(EnEgol* this, PlayState* play) {
+ s16 angleToFacing = this->actor.world.rot.y - this->actor.yawTowardsPlayer;
+ Vec3f toWaypoint;
+ Vec3f spawnPos;
+ Player* player = GET_PLAYER(play);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7F8E8.s")
+ 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);
+ }
+ Math_Vec3f_Copy(&spawnPos, &gZeroVec3f);
+ if ((this->actor.world.pos.y - 50.0f) <= player->actor.world.pos.y) {
+ if (Animation_OnFrame(&this->skelAnime, 5.0f)) {
+ Math_Vec3f_Copy(&spawnPos, &this->rightFootPos);
+ spawnPos.y = this->actor.floorHeight + 2.0f;
+ EnEgol_SpawnEffect(this, &spawnPos, &gZeroVec3s, 100, 0.005f, EYEGORE_EFFECT_IMPACT);
+ }
+ if (Animation_OnFrame(&this->skelAnime, 0.0f)) {
+ Math_Vec3f_Copy(&spawnPos, &this->leftFootPos);
+ spawnPos.y = this->actor.floorHeight + 2.0f;
+ EnEgol_SpawnEffect(this, &spawnPos, &gZeroVec3s, 100, 0.005f, EYEGORE_EFFECT_IMPACT);
+ }
+ }
+ Math_ApproachF(&this->actor.world.pos.x, this->waypointPos.x, 0.5f,
+ fabsf(Math_SinS(this->actor.world.rot.y) * 10.0f));
+ Math_ApproachF(&this->actor.world.pos.z, this->waypointPos.z, 0.5f,
+ fabsf(Math_CosS(this->actor.world.rot.y) * 10.0f));
+ Math_SmoothStepToS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &this->waypointPos), 1, 0x7D0,
+ 0);
+ Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.world.rot.y + 0x8000, 1, 0x7D0, 0);
+ EnEgol_FootstepEffects(this, play, 5.0f, 0.0f);
+ toWaypoint.x = this->actor.world.pos.x - this->waypointPos.x;
+ toWaypoint.z = this->actor.world.pos.z - this->waypointPos.z;
+ if (sqrtf(SQXZ(toWaypoint)) < 4.0f) {
+ this->waypoint--;
+ if (this->waypoint < 0) {
+ this->waypoint = 0;
+ EnEgol_SetupStop(this);
+ }
+ EnEgol_GetWaypoint(this);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A7FAFC.s")
+void EnEgol_SetupLaser(EnEgol* this) {
+ EnEgol_ChangeAnim(this, EYEGORE_ANIM_LASER);
+ this->actionTimer = 0;
+ this->laserCount = 0;
+ this->action = EYEGORE_ACTION_LASER;
+ this->actionFunc = EnEgol_Laser;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/EnEgol_Draw.s")
+void EnEgol_Laser(EnEgol* this, PlayState* play) {
+ static s16 sLaserAngles[3] = { 0x1F40, 0xBB8, 0x7D0 };
+ s32 pad1;
+ Vec3f stonePos;
+ s32 pad2;
+ CollisionPoly* colPoly;
+ Vec3f hitPos;
+ s32 bgId;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A80508.s")
+ if ((ABS_ALT((s16)(this->actor.world.rot.y - this->actor.yawTowardsPlayer)) < 0x3000) &&
+ (this->actor.xzDistToPlayer < 100.0f)) {
+ this->chargingLaser = false;
+ this->chargeLevel = 0;
+ this->actionTimer = 0;
+ this->laserState = EYEGORE_LASER_OFF;
+ Math_Vec3f_Copy(&this->laserScale, &gZeroVec3f);
+ Math_Vec3f_Copy(&this->laserScaleTarget, &gZeroVec3f);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[1], &this->laserBase);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[3], &this->laserBase);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[0], &this->laserBase);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[2], &this->laserBase);
+ EnEgol_SetupSlam(this);
+ } else if (this->actor.xzDistToPlayer < this->minLaserRange) {
+ this->chargingLaser = false;
+ this->chargeLevel = 0;
+ this->actionTimer = 0;
+ this->laserState = EYEGORE_LASER_OFF;
+ Math_Vec3f_Copy(&this->laserScale, &gZeroVec3f);
+ Math_Vec3f_Copy(&this->laserScaleTarget, &gZeroVec3f);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[1], &this->laserBase);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[3], &this->laserBase);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[0], &this->laserBase);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[2], &this->laserBase);
+ EnEgol_SetupWalk(this);
+ } else {
+ if (this->chargingLaser) {
+ switch (this->chargeLevel) {
+ case 0:
+ this->waitTimer = 10;
+ this->chargeLevel++;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A80750.s")
+ case 1:
+ Math_ApproachF(&this->chargeLightScale, 8.0f, 0.5f, 2.5f);
+ if (this->waitTimer == 0) {
+ this->waitTimer = 10;
+ this->chargeLevel++;
+ }
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Egol/func_80A80904.s")
+ case 2:
+ Math_ApproachF(&this->chargeLightScale, 1.0f, 0.5f, 1.0f);
+ if (this->waitTimer == 0) {
+ this->chargeLevel = 0;
+ this->laserState = EYEGORE_LASER_FIRE;
+ this->chargingLaser = false;
+ this->chargeLightScale = 0.0f;
+ }
+ break;
+
+ default:
+ break;
+ }
+ this->chargeLightRot += 0x7D0;
+ }
+ if ((this->laserState != EYEGORE_LASER_OFF) || (this->laserCount != 0)) {
+ Math_SmoothStepToS(&this->headRot, -0x2710, 5, 0x1F4, 5);
+ } else {
+ Math_SmoothStepToS(&this->headRot, 0, 5, 0x1F4, 5);
+ }
+ if (this->laserState == EYEGORE_LASER_OFF) {
+ if (this->laserCount >= 3) {
+ EnEgol_SetupWalk(this);
+ } else {
+ this->laserRot.x = sLaserAngles[this->laserCount];
+ this->laserScaleTarget.z = 0.0f;
+ this->laserScale.z = 0.0f;
+ if (this->laserCount == 0) {
+ this->laserState = EYEGORE_LASER_START;
+ } else {
+ this->laserState = EYEGORE_LASER_FIRE;
+ this->laserScaleTarget.x = 0.03f;
+ this->laserScaleTarget.y = 0.03f;
+ }
+ this->laserCount++;
+ }
+ } else if (this->laserState >= EYEGORE_LASER_FIRE) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_BEAM - SFX_FLAG);
+ if (this->laserState != EYEGORE_LASER_OFF) {
+ EnEgol_DestroyBlocks(this, play, this->laserCollider.dim.quad[0], this->laserCollider.dim.quad[1]);
+ }
+ //! @bug this should check walls, too
+ if ((this->actionTimer == 0) && BgCheck_EntityLineTest1(&play->colCtx, &this->laserCollider.dim.quad[3],
+ &this->laserCollider.dim.quad[1], &hitPos, &colPoly,
+ false, true, false, true, &bgId)) {
+ Vec3s rotToNorm;
+ f32 nx;
+ f32 ny;
+ f32 nz;
+ s32 pad3;
+ s32 i;
+ s32 quakeSize;
+ Player* player = GET_PLAYER(play);
+
+ nx = COLPOLY_GET_NORMAL(colPoly->normal.x);
+ ny = COLPOLY_GET_NORMAL(colPoly->normal.y);
+ nz = COLPOLY_GET_NORMAL(colPoly->normal.z);
+
+ /*! @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 = RAD_TO_BINANG_ALT2(-func_80086B30(-nz * ny, 1.0f));
+ rotToNorm.z = RAD_TO_BINANG_ALT2(func_80086B30(-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);
+ }
+ quakeSize = 4 - (s32)(fabsf(player->actor.world.pos.y - this->actor.world.pos.y) * 0.02f);
+ if (quakeSize > 4) {
+ quakeSize = 4;
+ } else if (quakeSize < 1) {
+ quakeSize = 1;
+ }
+ if (player->stateFlags3 != PLAYER_STATE3_1000000) {
+ func_800BC848(&this->actor, play, quakeSize, 2);
+ }
+ Actor_PlaySfx(&this->actor, NA_SE_EV_EXPLOSION);
+ func_800B31BC(play, &hitPos, 40, -2, 255, 20);
+ func_800BBFB0(play, &hitPos, 6.0f, 2, 120, 20, true);
+
+ if ((this->actor.world.pos.y - 50.0f <= player->actor.world.pos.y) &&
+ (this->actor.floorBgId == BGCHECK_SCENE)) {
+ Math_Vec3f_Copy(&stonePos, &hitPos);
+ stonePos.x += Math_SinS(this->actor.world.rot.y) * 60.0f;
+ stonePos.z += Math_CosS(this->actor.world.rot.y) * 60.0f;
+ for (i = 0; i < 3; i++) {
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ESTONE, stonePos.x, stonePos.y, stonePos.z, 0,
+ this->actor.world.rot.y, 0, ENESTONE_TYPE_SMALL);
+ }
+ }
+ if (this->actor.world.pos.y - 50.0f <= player->actor.world.pos.y) {
+ for (i = 0; i < 10; i++) {
+ EnEgol_SpawnEffect(this, &hitPos, &gZeroVec3s, 30, (Rand_ZeroFloat(1.0f) * 0.1f) + 0.2f,
+ EYEGORE_EFFECT_DEBRIS);
+ }
+ }
+ this->actionTimer = 1;
+ }
+ if (this->actionTimer != 0) {
+ this->actionTimer++;
+ if (this->actionTimer >= 5) {
+ this->laserState = EYEGORE_LASER_OFF;
+ Math_Vec3f_Copy(&this->laserScale, &gZeroVec3f);
+ Math_Vec3f_Copy(&this->laserScaleTarget, &gZeroVec3f);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[1], &this->laserBase);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[3], &this->laserBase);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[0], &this->laserBase);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[2], &this->laserBase);
+ this->actionTimer = 0;
+ }
+ }
+ Math_ApproachF(&this->laserScale.x, this->laserScaleTarget.x, 0.5f, 0.5f);
+ Math_ApproachF(&this->laserScale.y, this->laserScaleTarget.y, 0.5f, 0.5f);
+ Math_ApproachF(&this->laserScale.z, this->laserScaleTarget.z, 0.5f, 0.5f);
+ }
+ }
+}
+
+void EnEgol_SetupStop(EnEgol* this) {
+ if (!this->isRetreating) {
+ EnEgol_ChangeAnim(this, EYEGORE_ANIM_LASER);
+ } else {
+ EnEgol_ChangeAnim(this, EYEGORE_ANIM_STUN_END);
+ }
+ this->action = EYEGORE_ACTION_STOP;
+ this->actionFunc = EnEgol_Stop;
+}
+
+void EnEgol_Stop(EnEgol* this, PlayState* play) {
+ s32 isHome = false;
+ f32 curFrame = this->skelAnime.curFrame;
+ s16 angleToHome;
+
+ EnEgol_FootstepEffects(this, play, 28.0f, 13.0f);
+ if (this->isRetreating) {
+ Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 5, 0xBB8, 5);
+ this->actor.world.rot.y = this->actor.shape.rot.y;
+ angleToHome = this->actor.world.rot.y - this->actor.home.rot.y;
+ }
+ if (!this->isRetreating) {
+ isHome = true;
+ } else if (ABS_ALT(angleToHome) < 0x64) {
+ this->actor.world.rot.y = this->actor.shape.rot.y = this->actor.home.rot.y;
+ isHome = true;
+ }
+ if (isHome && (curFrame >= this->animEndFrame)) {
+ this->isRetreating ^= true;
+ if (!this->isRetreating) {
+ EnEgol_ChangeAnim(this, EYEGORE_ANIM_SIT);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_SIT);
+ this->laserCount = 0;
+ this->actionFunc = EnEgol_Wait;
+ } else {
+ EnEgol_SetupRetreat(this);
+ }
+ }
+}
+
+void EnEgol_SetupSlam(EnEgol* this) {
+ EnEgol_ChangeAnim(this, EYEGORE_ANIM_SLAM);
+ this->action = EYEGORE_ACTION_SLAM;
+ this->actionFunc = EnEgol_Slam;
+}
+
+void EnEgol_Slam(EnEgol* this, PlayState* play) {
+ f32 curFrame = this->skelAnime.curFrame;
+
+ Math_SmoothStepToS(&this->headRot, 0, 1, 0x3E8, 0);
+ if (Animation_OnFrame(&this->skelAnime, 17.0f)) {
+ s32 i;
+ s32 spawnCount;
+ Player* player = GET_PLAYER(play);
+ Vec3f spawnPos;
+ f32 dyToPlayer = fabsf(player->actor.world.pos.y - this->actor.world.pos.y);
+ s32 quakeSize;
+
+ Actor_PlaySfx(&this->actor, NA_SE_EV_EXPLOSION);
+ quakeSize = 4 - (s32)(dyToPlayer * 0.02f);
+ if (quakeSize > 4) {
+ quakeSize = 4;
+ } else if (quakeSize < 1) {
+ quakeSize = 1;
+ }
+ func_800BC848(&this->actor, play, quakeSize, 2);
+ if (this->actor.floorBgId == BGCHECK_SCENE) {
+ Math_Vec3f_Copy(&spawnPos, &this->actor.world.pos);
+ spawnPos.x += Math_SinS(this->actor.world.rot.y) * 60.0f;
+ spawnPos.y = this->actor.floorHeight;
+ spawnPos.z += Math_CosS(this->actor.world.rot.y) * 60.0f;
+ spawnCount = Rand_S16Offset(1, 3);
+ for (i = 0; i < spawnCount; i++) {
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ESTONE, spawnPos.x, spawnPos.y, spawnPos.z, 0,
+ this->actor.world.rot.y, 0, ENESTONE_TYPE_LARGE);
+ }
+ Actor_SpawnFloorDustRing(play, &this->actor, &spawnPos, 30.0f, 30, 10.0f, 100, 30, true);
+ Math_Vec3f_Copy(&spawnPos, &this->actor.world.pos);
+ spawnPos.x += Math_SinS(this->actor.world.rot.y) * 55.0f;
+ spawnPos.y = this->actor.floorHeight + 2.0f;
+ spawnPos.z += Math_CosS(this->actor.world.rot.y) * 55.0f;
+ EnEgol_SpawnEffect(this, &spawnPos, &gZeroVec3s, 100, 0.03f, EYEGORE_EFFECT_IMPACT);
+ }
+ EnEgol_DestroyBlocks(this, play, this->rightHandPos, this->leftHandPos);
+ }
+ if (this->animEndFrame <= curFrame) {
+ EnEgol_SetupSlamWait(this);
+ } else if ((this->skelAnime.curFrame <= 17.0f) && (this->skelAnime.curFrame >= 10.0f)) {
+ CollisionCheck_SetAT(play, &play->colChkCtx, &this->bodyCollider.base);
+ }
+}
+
+void EnEgol_SetupPunch(EnEgol* this) {
+ this->bodyCollider.elements[0].dim.modelSphere.radius = 40;
+ this->bodyCollider.elements[1].dim.modelSphere.radius = 40;
+ this->hitPlayer = false;
+ this->action = EYEGORE_ACTION_PUNCH;
+ this->actionFunc = EnEgol_Punch;
+}
+
+void EnEgol_Punch(EnEgol* this, PlayState* play) {
+ f32 curFrame = this->skelAnime.curFrame;
+
+ Math_SmoothStepToS(&this->headRot, 0, 1, 0x3E8, 0);
+ if (curFrame >= this->animEndFrame) {
+ this->bodyCollider.elements[0].dim.modelSphere.radius = 20;
+ this->bodyCollider.elements[1].dim.modelSphere.radius = 20;
+ EnEgol_SetupWalk(this);
+ } else if (!this->hitPlayer) {
+ if ((this->bodyCollider.elements[0].info.toucherFlags & TOUCH_HIT) ||
+ (this->bodyCollider.elements[1].info.toucherFlags & TOUCH_HIT)) {
+ this->hitPlayer = true;
+ func_800B8D50(play, &this->actor, 10.0f, this->actor.home.rot.y, 10.0f, 0);
+ }
+ if (!(this->bodyCollider.base.atFlags & AT_BOUNCED)) {
+ CollisionCheck_SetAT(play, &play->colChkCtx, &this->bodyCollider.base);
+ }
+ }
+}
+
+void EnEgol_SetupSlamWait(EnEgol* this) {
+ EnEgol_ChangeAnim(this, EYEGORE_ANIM_SLAM_WAIT);
+ this->actionTimer = 0;
+ this->eyeCollider.elements[0].info.elemType = ELEMTYPE_UNK1;
+ this->action = EYEGORE_ACTION_SLAM_WAIT;
+ this->actionFunc = EnEgol_SlamWait;
+}
+
+void EnEgol_SlamWait(EnEgol* this, PlayState* play) {
+ f32 curFrame = this->skelAnime.curFrame;
+
+ if (curFrame >= this->animEndFrame) {
+ this->actionTimer++;
+ if (this->actionTimer > 20) {
+ this->eyeCollider.elements[0].info.elemType = ELEMTYPE_UNK2;
+ EnEgol_SetupSlamEnd(this);
+ }
+ }
+}
+
+void EnEgol_SetupStunned(EnEgol* this) {
+ EnEgol_ChangeAnim(this, EYEGORE_ANIM_STUNNED);
+ this->actionTimer = 0;
+ this->eyeCollider.elements[0].info.elemType = ELEMTYPE_UNK1;
+ this->bodyCollider.elements[0].dim.modelSphere.radius = 0;
+ this->bodyCollider.elements[1].dim.modelSphere.radius = 0;
+ this->action = EYEGORE_ACTION_STUNNED;
+ this->actionFunc = EnEgol_Stunned;
+}
+
+void EnEgol_Stunned(EnEgol* this, PlayState* play) {
+ f32 curFrame = this->skelAnime.curFrame;
+
+ if (curFrame >= this->animEndFrame) {
+ this->actionTimer++;
+ if (this->actionTimer > 80) {
+ this->eyeCollider.elements->info.elemType = ELEMTYPE_UNK2;
+ EnEgol_SetupStunEnd(this);
+ }
+ }
+}
+
+void EnEgol_SetupStunEnd(EnEgol* this) {
+ this->bodyCollider.elements[0].dim.modelSphere.radius = 20;
+ this->bodyCollider.elements[1].dim.modelSphere.radius = 20;
+ EnEgol_ChangeAnim(this, EYEGORE_ANIM_STUN_END);
+ this->action = EYEGORE_ACTION_STUN_END;
+ this->actionFunc = EnEgol_StunEnd;
+}
+
+void EnEgol_StunEnd(EnEgol* this, PlayState* play) {
+ f32 curFrame = this->skelAnime.curFrame;
+
+ if (curFrame >= this->animEndFrame) {
+ EnEgol_SetupWalk(this);
+ }
+}
+
+void EnEgol_SetupSlamEnd(EnEgol* this) {
+ EnEgol_ChangeAnim(this, EYEGORE_ANIM_SLAM_END);
+ this->actionTimer = 0;
+ this->action = EYEGORE_ACTION_SLAM_END;
+ this->actionFunc = EnEgol_SlamEnd;
+}
+
+void EnEgol_SlamEnd(EnEgol* this, PlayState* play) {
+ f32 curFrame = this->skelAnime.curFrame;
+
+ if (curFrame >= this->animEndFrame) {
+ EnEgol_SetupWalk(this);
+ }
+}
+
+void EnEgol_SetupDamaged(EnEgol* this) {
+ EnEgol_ChangeAnim(this, EYEGORE_ANIM_DAMAGED);
+ this->bodyCollider.elements[0].dim.modelSphere.radius = 20;
+ this->bodyCollider.elements[1].dim.modelSphere.radius = 20;
+ this->action = EYEGORE_ACTION_DAMAGED;
+ this->actionFunc = EnEgol_Damaged;
+}
+
+void EnEgol_Damaged(EnEgol* this, PlayState* play) {
+ f32 curFrame = this->skelAnime.curFrame;
+
+ if (curFrame >= this->animEndFrame) {
+ if (this->actor.colChkInfo.health > 0) {
+ EnEgol_SetupWalk(this);
+ } else {
+ Enemy_StartFinishingBlow(play, &this->actor);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_DEAD);
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
+ this->actor.flags &= ~ACTOR_FLAG_1;
+ this->actor.flags |= ACTOR_FLAG_100000;
+ this->actionFunc = EnEgol_StartDeathCutscene;
+ }
+ }
+}
+
+void EnEgol_StartDeathCutscene(EnEgol* this, PlayState* play) {
+ if (!CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_Queue(this->actor.csId);
+ } else {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
+ this->subCamId = CutsceneManager_GetCurrentSubCamId(this->actor.csId);
+ this->subCamFovTarget = 60.0f;
+ EnEgol_ChangeAnim(this, EYEGORE_ANIM_DEATH);
+ this->action = EYEGORE_ACTION_DYING;
+ this->actionFunc = EnEgol_Death;
+ this->actor.shape.shadowScale = 0.0f;
+ }
+}
+
+void EnEgol_Death(EnEgol* this, PlayState* play) {
+ f32 curFrame = this->skelAnime.curFrame;
+ Vec3f atOffset;
+
+ this->subCamAt.x = 0.0f;
+ this->subCamAt.y = 60.0f;
+ this->subCamAt.z = 260.0f;
+ Math_Vec3f_Copy(&atOffset, &this->subCamAt);
+ OLib_DbCameraVec3fSum(&this->actor.world, &atOffset, &this->subCamAt, 1);
+ this->subCamEye.x = this->actor.world.pos.x;
+ this->subCamEye.y = this->actor.world.pos.y + 70.0f;
+ this->subCamEye.z = this->actor.world.pos.z;
+ Math_ApproachF(&this->subCamFov, this->subCamFovTarget, 0.3f, 10.0f);
+ Play_SetCameraAtEye(play, this->subCamId, &this->subCamEye, &this->subCamAt);
+ Play_SetCameraFov(play, this->subCamId, this->subCamFov);
+ if ((this->action == EYEGORE_ACTION_DEAD) && (this->waitTimer == 1)) {
+ if (this->switchFlag > -1) {
+ Flags_SetSwitch(play, this->switchFlag);
+ }
+ CutsceneManager_Stop(this->actor.csId);
+ Actor_Kill(&this->actor);
+ } else {
+ if (Animation_OnFrame(&this->skelAnime, 46.0f)) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_EXPLOSION);
+ func_800BC848(&this->actor, play, 10, 5);
+ }
+ if ((curFrame >= this->animEndFrame) && (this->action != EYEGORE_ACTION_DEAD)) {
+ s32 i;
+
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.world.pos.x, this->actor.world.pos.y,
+ this->actor.world.pos.z, 0, 0, 0, CLEAR_TAG_SMALL_EXPLOSION);
+ this->waitTimer = 30;
+ Actor_PlaySfx(&this->actor, NA_SE_IT_BOMB_EXPLOSION);
+ this->action = EYEGORE_ACTION_DEAD;
+ for (i = 0; i < 20; i++) {
+ EnEgol_SpawnEffect(this, &this->actor.world.pos, &gZeroVec3s, 10.0f + Rand_ZeroFloat(20.0f),
+ 0.01f + (0.02f * Rand_ZeroFloat(1.0f)), (i & 1) + EYEGORE_EFFECT_PIECE_LARGE);
+ }
+ }
+ }
+}
+
+typedef enum {
+ /* 0 */ EYEGORE_HIT_NONE,
+ /* 1 */ EYEGORE_HIT_DAMAGE,
+ /* 2 */ EYEGORE_HIT_IMMUNE, // Makes hitmarks, but no reaction
+} EyegoreHitReaction;
+
+void EnEgol_CollisionCheck(EnEgol* this, PlayState* play) {
+ s16 angleToFacing = this->actor.world.rot.y - this->actor.yawTowardsPlayer;
+ s32 reaction = EYEGORE_HIT_NONE;
+
+ if ((this->action == EYEGORE_ACTION_LASER) && (this->laserCollider.base.atFlags & AT_BOUNCED)) {
+ this->laserCollider.base.atFlags &= ~AT_HIT;
+ this->laserCollider.base.atFlags &= ~AT_BOUNCED;
+ this->actionTimer = 0;
+ this->laserState = EYEGORE_LASER_OFF;
+ Math_Vec3f_Copy(&this->laserScale, &gZeroVec3f);
+ Math_Vec3f_Copy(&this->laserScaleTarget, &gZeroVec3f);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[1], &this->laserBase);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[3], &this->laserBase);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[0], &this->laserBase);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[2], &this->laserBase);
+ EnEgol_SetupWalk(this);
+ }
+ if (this->eyeCollider.elements[0].info.bumperFlags & BUMP_HIT) {
+ reaction = EYEGORE_HIT_IMMUNE;
+ switch (this->actor.colChkInfo.damageEffect) {
+ case EYEGORE_DMGEFF_LIGHT_ARROW:
+ if (ABS_ALT(angleToFacing) < 0x3000) {
+ if ((this->action == EYEGORE_ACTION_STUNNED) || (this->action == EYEGORE_ACTION_SLAM_WAIT)) {
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.focus.pos.x,
+ this->actor.focus.pos.y, this->actor.focus.pos.z, 0, 0, 0,
+ CLEAR_TAG_LARGE_LIGHT_RAYS);
+ this->dmgEffectTimer = 20;
+ reaction = EYEGORE_HIT_DAMAGE;
+ } else if ((this->action >= EYEGORE_ACTION_WALK) && (this->action <= EYEGORE_ACTION_STUN_END) &&
+ !this->isRetreating) {
+ reaction = EYEGORE_HIT_NONE;
+ this->chargingLaser = false;
+ this->chargeLevel = 0;
+ this->actionTimer = 0;
+ this->laserState = EYEGORE_LASER_OFF;
+ Math_Vec3f_Copy(&this->laserScale, &gZeroVec3f);
+ Math_Vec3f_Copy(&this->laserScaleTarget, &gZeroVec3f);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[1], &this->laserBase);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[3], &this->laserBase);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[0], &this->laserBase);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[2], &this->laserBase);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 120, COLORFILTER_BUFFLAG_OPA,
+ 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ EnEgol_SetupStunned(this);
+ }
+ }
+ break;
+
+ case EYEGORE_DMGEFF_NONE:
+ if ((this->action == EYEGORE_ACTION_SLAM_WAIT) || (this->action == EYEGORE_ACTION_STUNNED)) {
+ reaction = EYEGORE_HIT_DAMAGE;
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+ if (reaction == EYEGORE_HIT_DAMAGE) {
+ Actor_ApplyDamage(&this->actor);
+ CollisionCheck_BlueBlood(play, NULL, &this->eyePos);
+ CollisionCheck_BlueBlood(play, NULL, &this->eyePos);
+ CollisionCheck_BlueBlood(play, NULL, &this->eyePos);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 25);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_DAMAGE);
+ EnEgol_SetupDamaged(this);
+ } else if (reaction == EYEGORE_HIT_IMMUNE) {
+ Vec3f hitPos;
+
+ hitPos.x = this->eyeCollider.elements[0].info.bumper.hitPos.x;
+ hitPos.y = this->eyeCollider.elements[0].info.bumper.hitPos.y;
+ hitPos.z = this->eyeCollider.elements[0].info.bumper.hitPos.z;
+ Actor_PlaySfx(&this->actor, NA_SE_IT_SHIELD_BOUND);
+ EffectSsHitmark_SpawnFixedScale(play, EFFECT_HITMARK_METAL, &hitPos);
+ CollisionCheck_SpawnShieldParticlesMetal(play, &hitPos);
+ }
+}
+
+void EnEgol_Update(Actor* thisx, PlayState* play) {
+ EnEgol* this = THIS;
+ Player* player = GET_PLAYER(play);
+ s32 pad;
+
+ if (!((this->action == EYEGORE_ACTION_PUNCH) || (this->action == EYEGORE_ACTION_RETREAT) ||
+ (this->action >= EYEGORE_ACTION_DYING))) {
+ s16 angleToFacing = this->actor.shape.rot.y - this->actor.yawTowardsPlayer;
+ s16 angleBehind = this->actor.world.rot.y - this->actor.yawTowardsPlayer + 0x8000;
+
+ if ((ABS_ALT(angleToFacing) > 0x1888) && (ABS_ALT(angleBehind) > 0x2000) &&
+ (this->actor.xzDistToPlayer < 100.0f)) {
+ if (angleToFacing < 0) {
+ if (this->animation != EYEGORE_ANIM_LEFT_PUNCH) {
+ EnEgol_ChangeAnim(this, EYEGORE_ANIM_LEFT_PUNCH);
+ }
+ } else if (this->animation != EYEGORE_ANIM_RIGHT_PUNCH) {
+ EnEgol_ChangeAnim(this, EYEGORE_ANIM_RIGHT_PUNCH);
+ }
+ this->chargingLaser = false;
+ this->chargeLevel = 0;
+ this->actionTimer = 0;
+ this->laserState = EYEGORE_LASER_OFF;
+ Math_Vec3f_Copy(&this->laserScale, &gZeroVec3f);
+ Math_Vec3f_Copy(&this->laserScaleTarget, &gZeroVec3f);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[1], &this->laserBase);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[3], &this->laserBase);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[0], &this->laserBase);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[2], &this->laserBase);
+ EnEgol_SetupPunch(this);
+ }
+ }
+ if (this->action != EYEGORE_ACTION_WAIT) {
+ SkelAnime_Update(&this->skelAnime);
+ }
+ if (this->laserState == EYEGORE_LASER_OFF) {
+ Math_ApproachZeroF(&this->laserLightScale, 0.5f, 0.5f);
+ } else if (this->laserState >= EYEGORE_LASER_FIRE) {
+ Math_ApproachF(&this->laserLightScale, 1.0f, 0.5f, 0.5f);
+ }
+ Actor_SetScale(&this->actor, 0.015f);
+
+ if (!((this->action == EYEGORE_ACTION_STOP) || (this->action == EYEGORE_ACTION_RETREAT))) {
+ this->actor.shape.rot.y = this->actor.world.rot.y;
+ }
+ this->texScroll += 12;
+ DECR(this->waitTimer);
+ DECR(this->eyeShutTimer);
+ DECR(this->dmgEffectTimer);
+
+ EnEgol_UpdateEffects(this, play);
+ this->actionFunc(this, play);
+ Math_Vec3f_Copy(&this->actor.focus.pos, &this->eyePos);
+ this->actor.focus.rot.x = this->actor.world.rot.x;
+ this->actor.focus.rot.y = this->actor.world.rot.y;
+ this->actor.focus.rot.z = this->actor.world.rot.z;
+ if (!((this->action == EYEGORE_ACTION_SLAM_WAIT) || (this->action == EYEGORE_ACTION_WAIT) ||
+ (this->action == EYEGORE_ACTION_RETREAT) || (this->action == EYEGORE_ACTION_STAND) ||
+ (this->action == EYEGORE_ACTION_LASER) || (this->action == EYEGORE_ACTION_STUNNED) ||
+ (this->action == EYEGORE_ACTION_DAMAGED) || (this->action == EYEGORE_ACTION_DYING))) {
+
+ this->pupilRot.x = Math_Vec3f_Pitch(&this->eyePos, &player->actor.world.pos);
+ this->pupilRot.y = -Math_Vec3f_Yaw(&this->eyePos, &player->actor.world.pos);
+
+ this->pupilRot.y += this->actor.world.rot.y;
+
+ if (this->pupilRot.x > 0x7D0) {
+ this->pupilRot.x = 0x7D0;
+ } else if (this->pupilRot.x < -0x7D0) {
+ this->pupilRot.x = -0x7D0;
+ }
+ if (this->pupilRot.y > 0x1770) {
+ this->pupilRot.y = 0x1770;
+ } else if (this->pupilRot.y < -0x1770) {
+ this->pupilRot.y = -0x1770;
+ }
+ } else {
+ this->pupilRot.x = this->pupilRot.y = 0;
+ }
+ if (this->eyeShutTimer == 0) {
+ if (((this->action == EYEGORE_ACTION_WALK) || (this->action == EYEGORE_ACTION_LASER)) && !this->isRetreating) {
+ Actor* projectile = func_800BC270(play, &this->actor, 80.0f, 0x138B0);
+ // 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))) {
+ this->eyelidRotTarget = 0xFA0;
+ this->eyeShutTimer = 20;
+ if (this->action == EYEGORE_ACTION_LASER) {
+ this->chargingLaser = false;
+ this->chargeLevel = 0;
+ this->actionTimer = 0;
+ this->laserState = EYEGORE_LASER_OFF;
+ Math_Vec3f_Copy(&this->laserScale, &gZeroVec3f);
+ Math_Vec3f_Copy(&this->laserScaleTarget, &gZeroVec3f);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[1], &this->laserBase);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[3], &this->laserBase);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[0], &this->laserBase);
+ Math_Vec3f_Copy(&this->laserCollider.dim.quad[2], &this->laserBase);
+ EnEgol_SetupWalk(this);
+ }
+ }
+ } else {
+ this->eyelidRotTarget = 0;
+ }
+ } else if (this->eyeShutTimer == 1) {
+ this->eyelidRotTarget = 0;
+ }
+ Math_SmoothStepToS(&this->eyelidRot, this->eyelidRotTarget, 1, 0x7D0, 0);
+ EnEgol_CollisionCheck(this, play);
+ Actor_MoveWithGravity(&this->actor);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 50.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
+ if (this->action != EYEGORE_ACTION_DEAD) {
+ //! @bug This should be ||, not &&. As is, the check always succeeds.
+ if (!((this->action == EYEGORE_ACTION_DAMAGED) && (this->action == EYEGORE_ACTION_DYING))) {
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->eyeCollider.base);
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->bodyCollider.base);
+ }
+ CollisionCheck_SetOC(play, &play->colChkCtx, &this->bodyCollider.base);
+ }
+ if (this->laserState >= EYEGORE_LASER_ON) {
+ CollisionCheck_SetAT(play, &play->colChkCtx, &this->laserCollider.base);
+ }
+}
+
+s32 EnEgol_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
+ EnEgol* this = THIS;
+
+ if (limbIndex == EYEGORE_LIMB_HEAD) {
+ rot->z += this->headRot;
+ }
+ if (limbIndex == EYEGORE_LIMB_UPPER_EYELID) {
+ rot->z += this->eyelidRot;
+ }
+ if (limbIndex == EYEGORE_LIMB_LOWER_EYELID) {
+ rot->z += -1 * this->eyelidRot;
+ }
+ if (limbIndex == EYEGORE_LIMB_PUPIL) {
+ rot->y += this->pupilRot.y;
+ rot->z += this->pupilRot.x;
+ }
+ if (limbIndex == EYEGORE_LIMB_EYEBALL) {
+ s32 eyeColorIndex = 0;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ if ((this->action == EYEGORE_ACTION_DAMAGED) || (this->action == EYEGORE_ACTION_DYING)) {
+ eyeColorIndex = 2;
+ } else if ((this->action == EYEGORE_ACTION_STUNNED) || (this->action == EYEGORE_ACTION_SLAM_WAIT)) {
+ eyeColorIndex = 1;
+ }
+ this->eyePrimColor.r = sEyePrimColors[eyeColorIndex].r;
+ this->eyePrimColor.g = sEyePrimColors[eyeColorIndex].g;
+ this->eyePrimColor.b = sEyePrimColors[eyeColorIndex].b;
+ this->eyeEnvColor.r = sEyeEnvColors[eyeColorIndex].r;
+ this->eyeEnvColor.g = sEyeEnvColors[eyeColorIndex].g;
+ this->eyeEnvColor.b = sEyeEnvColors[eyeColorIndex].b;
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0xFF, (u8)this->eyePrimColor.r, (u8)this->eyePrimColor.g,
+ (u8)this->eyePrimColor.b, 255);
+ gDPSetEnvColor(POLY_OPA_DISP++, (u8)this->eyeEnvColor.r, (u8)this->eyeEnvColor.g, (u8)this->eyeEnvColor.b, 255);
+ gSPSegment(POLY_OPA_DISP++, 0x09, func_8012CB28(play->state.gfxCtx, 0, this->texScroll));
+
+ CLOSE_DISPS(play->state.gfxCtx);
+ }
+ return false;
+}
+
+void EnEgol_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
+ EnEgol* this = THIS;
+ Vec3f footOffset = { 1000.0f, 0.0f, 0.0f };
+ Vec3f zeroVec = { 0.0f, 0.0f, 0.0f };
+
+ if (limbIndex == EYEGORE_LIMB_LEFT_HAND) {
+ Matrix_MultVec3f(&gZeroVec3f, &this->leftHandPos);
+ }
+ if (limbIndex == EYEGORE_LIMB_RIGHT_HAND) {
+ Matrix_MultVec3f(&gZeroVec3f, &this->rightHandPos);
+ }
+ if (limbIndex == EYEGORE_LIMB_LASER_ATTACH) {
+ Matrix_MultVec3f(&gZeroVec3f, &this->eyePos);
+ }
+ if ((limbIndex == EYEGORE_LIMB_LASER_ATTACH) && (this->laserState >= EYEGORE_LASER_FIRE)) {
+ Vec3f laserLengthZ = { 0.0f, 0.0f, 0.0f };
+ Vec3f laserVec;
+ f32 targetScale;
+ f32 targetHeight;
+
+ Matrix_MultVec3f(&zeroVec, &this->laserBase);
+ this->laserCollider.dim.quad[3].x =
+ this->laserBase.x + Math_SinS(this->actor.world.rot.y + 0x4000) * this->laserScale.x * 77.0f;
+ this->laserCollider.dim.quad[3].y = this->laserBase.y;
+ this->laserCollider.dim.quad[3].z =
+ this->laserBase.z + Math_CosS(this->actor.world.rot.y + 0x4000) * this->laserScale.x * 77.0f;
+ this->laserCollider.dim.quad[2].x =
+ this->laserBase.x + Math_SinS(this->actor.world.rot.y + 0xC000) * this->laserScale.x * 77.0f;
+ this->laserCollider.dim.quad[2].y = this->laserBase.y;
+ this->laserCollider.dim.quad[2].z =
+ this->laserBase.z + Math_CosS(this->actor.world.rot.y + 0xC000) * this->laserScale.x * 77.0f;
+
+ targetScale = this->laserScale.z;
+ targetHeight = this->laserCollider.dim.quad[3].y;
+
+ while ((targetHeight + 20.0f > this->actor.floorHeight) && (targetScale < 10.0f)) {
+ Matrix_Push();
+ Matrix_RotateYS(this->actor.world.rot.y, MTXMODE_NEW);
+ Matrix_RotateXS(this->laserRot.x, MTXMODE_APPLY);
+ laserLengthZ.z = targetScale * 700.0f;
+ Matrix_MultVec3f(&laserLengthZ, &laserVec);
+ Matrix_Pop();
+ targetHeight = this->laserCollider.dim.quad[3].y + laserVec.y;
+ targetScale += 0.01f;
+ }
+ this->laserScaleTarget.z = targetScale;
+ Matrix_Push();
+ Matrix_RotateYS(this->actor.world.rot.y, MTXMODE_NEW);
+ Matrix_RotateXS(this->laserRot.x, MTXMODE_APPLY);
+ laserLengthZ.z = this->laserScale.z * 700.0f;
+ Matrix_MultVec3f(&laserLengthZ, &laserVec);
+ Matrix_Pop();
+ this->laserCollider.dim.quad[1].x = this->laserCollider.dim.quad[3].x + laserVec.x;
+ this->laserCollider.dim.quad[1].y = this->laserCollider.dim.quad[3].y + laserVec.y;
+ this->laserCollider.dim.quad[1].z = this->laserCollider.dim.quad[3].z + laserVec.z;
+ this->laserCollider.dim.quad[0].x = this->laserCollider.dim.quad[2].x + laserVec.x;
+ this->laserCollider.dim.quad[0].y = this->laserCollider.dim.quad[2].y + laserVec.y;
+ this->laserCollider.dim.quad[0].z = this->laserCollider.dim.quad[2].z + laserVec.z;
+ Collider_SetQuadVertices(&this->laserCollider, &this->laserCollider.dim.quad[0],
+ &this->laserCollider.dim.quad[1], &this->laserCollider.dim.quad[2],
+ &this->laserCollider.dim.quad[3]);
+ this->laserState = EYEGORE_LASER_ON;
+ }
+ if ((limbIndex == EYEGORE_LIMB_LASER_ATTACH) && (this->laserState == EYEGORE_LASER_START)) {
+ this->chargingLaser = true;
+ this->laserState = EYEGORE_LASER_CHARGING;
+ this->laserScaleTarget.x = 0.03f;
+ this->laserScaleTarget.y = 0.03f;
+ }
+ if (limbIndex == EYEGORE_LIMB_LEFT_FOOT) {
+ Matrix_MultVec3f(&footOffset, &this->leftFootPos);
+ }
+ if (limbIndex == EYEGORE_LIMB_RIGHT_FOOT) {
+ Matrix_MultVec3f(&footOffset, &this->rightFootPos);
+ }
+ if ((limbIndex == EYEGORE_LIMB_HEAD) || (limbIndex == EYEGORE_LIMB_LEFT_SHOULDER) ||
+ (limbIndex == EYEGORE_LIMB_LEFT_ARM) || (limbIndex == EYEGORE_LIMB_LEFT_HAND) ||
+ (limbIndex == EYEGORE_LIMB_RIGHT_SHOULDER) || (limbIndex == EYEGORE_LIMB_RIGHT_ARM) ||
+ (limbIndex == EYEGORE_LIMB_RIGHT_HAND) || (limbIndex == EYEGORE_LIMB_UPPER_EYELID) ||
+ (limbIndex == EYEGORE_LIMB_LOWER_EYELID) || (limbIndex == EYEGORE_LIMB_HIPS) ||
+ (limbIndex == EYEGORE_LIMB_LEFT_SHIN) || (limbIndex == EYEGORE_LIMB_RIGHT_SHIN)) {
+ Matrix_MultZero(&this->limbPos[this->limbPosIndex]);
+ this->limbPosIndex++;
+ if (this->limbPosIndex >= ARRAY_COUNT(this->limbPos)) {
+ this->limbPosIndex = 0;
+ }
+ }
+ Collider_UpdateSpheres(limbIndex, &this->bodyCollider);
+ Collider_UpdateSpheres(limbIndex, &this->eyeCollider);
+}
+
+void EnEgol_Draw(Actor* thisx, PlayState* play2) {
+ PlayState* play = play2;
+ EnEgol* this = THIS;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C28C(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,
+ EnEgol_OverrideLimbDraw, EnEgol_PostLimbDraw, &this->actor);
+ POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
+ }
+ if (this->dmgEffectTimer != 0) {
+ f32 drawDmgEffAlpha = 0.05f * this->dmgEffectTimer;
+
+ Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), 0.8f, 0.8f,
+ drawDmgEffAlpha, ACTOR_DRAW_DMGEFF_LIGHT_ORBS);
+ }
+ if (this->laserState >= EYEGORE_LASER_FIRE) {
+ this->laserRot.y = this->actor.world.rot.y;
+ gSPSegment(POLY_OPA_DISP++, 0x08, func_8012CB28(play->state.gfxCtx, 0, this->texScroll));
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
+ Matrix_Translate(this->laserBase.x, this->laserBase.y, this->laserBase.z, MTXMODE_NEW);
+ Matrix_RotateZYX(this->laserRot.x, this->laserRot.y, 0, MTXMODE_APPLY);
+ Matrix_Scale(this->laserScale.x, this->laserScale.y, this->laserScale.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++, gEyegoreLaserDL);
+ }
+ if (((this->action == EYEGORE_ACTION_LASER) && (this->laserState >= EYEGORE_LASER_FIRE)) || this->chargingLaser) {
+ func_8012C2DC(play->state.gfxCtx);
+ gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL);
+ if (!this->chargingLaser) {
+ s32 i;
+ f32 laserLightScaleMod;
+ f32 laserLightAlpha;
+
+ gDPSetEnvColor(POLY_XLU_DISP++, 155, 255, 255, 128);
+ Matrix_Translate(this->eyePos.x, this->eyePos.y, this->eyePos.z, MTXMODE_NEW);
+ Matrix_Scale(this->laserLightScale, this->laserLightScale, this->laserLightScale, MTXMODE_APPLY);
+
+ laserLightScaleMod = 10.0f;
+ laserLightAlpha = 80.0f;
+ for (i = 0; i < ARRAY_COUNT(sLightOrbColors); i++) {
+ Matrix_Push();
+ Matrix_Scale(laserLightScaleMod, laserLightScaleMod, laserLightScaleMod, MTXMODE_APPLY);
+ Matrix_ReplaceRotation(&play->billboardMtxF);
+ gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, sLightOrbColors[i].r, sLightOrbColors[i].g, sLightOrbColors[i].b,
+ laserLightAlpha);
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx),
+ G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL);
+ Matrix_Pop();
+ laserLightScaleMod = 3.0f;
+ laserLightAlpha = 200.0f;
+ }
+ } else {
+ gDPSetEnvColor(POLY_XLU_DISP++, 155, 255, 255, 128);
+ Matrix_Translate(this->eyePos.x, this->eyePos.y, this->eyePos.z, MTXMODE_NEW);
+ Matrix_Scale(this->chargeLightScale, this->chargeLightScale, this->chargeLightScale, MTXMODE_APPLY);
+ Matrix_Push();
+ Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY);
+ Matrix_ReplaceRotation(&play->billboardMtxF);
+ Matrix_RotateZS(this->chargeLightRot, MTXMODE_APPLY);
+ gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255);
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL);
+ Matrix_Pop();
+ }
+ }
+ EnEgol_DrawEffects(this, play);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void EnEgol_SpawnEffect(EnEgol* this, Vec3f* pos, Vec3s* rot, s16 lifetime, f32 scale, s16 type) {
+ EnEgolEffect* effect = this->effects;
+ s16 i;
+
+ for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) {
+ if (!effect->isActive) {
+ effect->isActive = true;
+ effect->scale = scale;
+ effect->pos = *pos;
+ effect->timer = lifetime;
+ effect->alpha = 255;
+ effect->type = type;
+ effect->rot.x = randPlusMinusPoint5Scaled(0x7530);
+ effect->rot.y = randPlusMinusPoint5Scaled(0x7530);
+ effect->rot.z = randPlusMinusPoint5Scaled(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);
+ effect->velocity.y = 10.0f + (10.0f * Rand_ZeroOne());
+ effect->velocity.z = 4.0f * (Rand_ZeroOne() - 0.5f);
+ break;
+ } else if (effect->type == EYEGORE_EFFECT_DEBRIS) {
+ effect->accel.y = -1.0f;
+ effect->velocity.x = 0.5f * (Rand_ZeroOne() - 0.5f);
+ effect->velocity.y = 5.0f + (5.0f * Rand_ZeroOne());
+ effect->velocity.z = 0.5f * (Rand_ZeroOne() - 0.5f);
+ effect->timer = 20.0f + Rand_ZeroFloat(10.0f);
+ break;
+ } else if (effect->type == EYEGORE_EFFECT_IMPACT) {
+ effect->rot.x = rot->x;
+ effect->rot.y = 0;
+ effect->rot.z = rot->z;
+ break;
+ }
+ }
+ }
+}
+
+void EnEgol_UpdateEffects(EnEgol* this, PlayState* play) {
+ EnEgolEffect* effect = this->effects;
+ s32 i;
+
+ for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) {
+ if (effect->isActive) {
+ if (this->action == EYEGORE_ACTION_DYING) {
+ effect->timer = 0;
+ }
+ if (effect->type != EYEGORE_EFFECT_IMPACT) {
+ effect->rot.x += 0x100;
+ effect->rot.z += 0x130;
+
+ effect->pos.x += effect->velocity.x;
+ effect->pos.y += effect->velocity.y;
+ effect->pos.z += effect->velocity.z;
+
+ effect->velocity.y += effect->accel.y;
+ }
+ if (effect->timer != 0) {
+ effect->timer--;
+ } else if (effect->type == EYEGORE_EFFECT_IMPACT) {
+ effect->alpha -= 10;
+ if (effect->alpha < 10) {
+ effect->isActive = false;
+ }
+ } else {
+ effect->isActive = false;
+ }
+ }
+ }
+}
+
+void EnEgol_DrawEffects(EnEgol* this, PlayState* play) {
+ GraphicsContext* gfxCtx = play->state.gfxCtx;
+ EnEgolEffect* effect = this->effects;
+ s16 i;
+
+ OPEN_DISPS(gfxCtx);
+
+ func_8012C28C(play->state.gfxCtx);
+ for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) {
+ if (effect->isActive) {
+ Matrix_Push();
+
+ Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW);
+ Matrix_RotateXS(effect->rot.x, MTXMODE_APPLY);
+ Matrix_RotateYS(effect->rot.y, MTXMODE_APPLY);
+ Matrix_RotateZS(effect->rot.z, MTXMODE_APPLY);
+ Matrix_Scale(effect->scale, effect->scale, effect->scale, MTXMODE_APPLY);
+
+ switch (effect->type) {
+ case EYEGORE_EFFECT_IMPACT:
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 155, 155, 155, 255);
+ Matrix_Translate(0.0f, 50.0f, 0.0f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, effect->alpha);
+ gSPDisplayList(POLY_OPA_DISP++, gEyegoreEffectImpactDL);
+ break;
+
+ case EYEGORE_EFFECT_PIECE_LARGE:
+ case EYEGORE_EFFECT_PIECE_SMALL:
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 255, 255, 255);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, effect->alpha);
+ if (effect->type == EYEGORE_EFFECT_PIECE_LARGE) {
+ gSPDisplayList(POLY_OPA_DISP++, gEyegoreEffectLargeBodyPieceDL);
+ } else {
+ gSPDisplayList(POLY_OPA_DISP++, gEyegoreEffectSmallBodyPieceDL);
+ }
+ break;
+
+ case EYEGORE_EFFECT_DEBRIS:
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 255, 255, 255);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255);
+ gSPDisplayList(POLY_OPA_DISP++, gEyegoreEffectSolidDebrisDL);
+ break;
+
+ default:
+ break;
+ }
+ Matrix_Pop();
+ }
+ }
+
+ CLOSE_DISPS(gfxCtx);
+}
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 9e0097152..cec69e5a1 100644
--- a/src/overlays/actors/ovl_En_Egol/z_en_egol.h
+++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.h
@@ -2,18 +2,94 @@
#define Z_EN_EGOL_H
#include "global.h"
+#include "objects/object_eg/object_eg.h"
struct EnEgol;
typedef void (*EnEgolActionFunc)(struct EnEgol*, PlayState*);
+#define EYEGORE_GET_PATH(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_EFFECT_COUNT 100
+
+typedef struct {
+ /* 0x00 */ u8 isActive;
+ /* 0x04 */ Vec3f pos;
+ /* 0x10 */ s16 alpha;
+ /* 0x12 */ s16 timer;
+ /* 0x14 */ s16 type;
+ /* 0x18 */ Vec3f velocity;
+ /* 0x24 */ Vec3f accel;
+ /* 0x30 */ Vec3s rot;
+ /* 0x38 */ f32 scale;
+} EnEgolEffect; // size = 0x3C
+
typedef struct EnEgol {
/* 0x0000 */ Actor actor;
- /* 0x0144 */ char unk_144[0x164];
+ /* 0x0144 */ SkelAnime skelAnime;
+ /* 0x0188 */ Vec3s jointTable[EYEGORE_LIMB_MAX];
+ /* 0x0218 */ Vec3s morphTable[EYEGORE_LIMB_MAX];
/* 0x02A8 */ EnEgolActionFunc actionFunc;
- /* 0x02AC */ char unk_2AC[0x1BC4];
+ /* 0x02AC */ Path* path;
+ /* 0x02B0 */ s16 waypoint;
+ /* 0x02B2 */ s16 action;
+ /* 0x02B4 */ s16 waitTimer;
+ /* 0x02B6 */ s16 eyeShutTimer;
+ /* 0x02B4 */ s16 headRot;
+ /* 0x02BA */ s16 switchFlag;
+ /* 0x02BC */ s16 dmgEffectTimer;
+ /* 0x02C0 */ Vec3f limbPos[12];
+ /* 0x0350 */ s16 limbPosIndex;
+ /* 0x0352 */ s16 pathIndex;
+ /* 0x0354 */ s32 animation;
+ /* 0x0358 */ u8 isRetreating;
+ /* 0x035C */ f32 animEndFrame;
+ /* 0x0360 */ f32 wakeupRange;
+ /* 0x0364 */ f32 minLaserRange;
+ /* 0x0368 */ UNK_TYPE1 unk_368[4]; // f32?
+ /* 0x036C */ f32 laserLightScale;
+ /* 0x0370 */ f32 chargeLightScale;
+ /* 0x0374 */ s16 eyelidRot;
+ /* 0x0376 */ s16 eyelidRotTarget;
+ /* 0x0378 */ s16 actionTimer;
+ /* 0x037C */ s32 laserCount;
+ /* 0x0380 */ s32 chargingLaser;
+ /* 0x0384 */ s16 chargeLightRot;
+ /* 0x0388 */ s32 chargeLevel;
+ /* 0x038C */ s32 hitPlayer;
+ /* 0x0390 */ UNK_TYPE1 unk_390[0xC]; // Vec3f?
+ /* 0x039C */ Vec3f eyePos;
+ /* 0x03A8 */ Vec3f laserBase;
+ /* 0x03B4 */ Vec3f laserScale;
+ /* 0x03C0 */ Vec3f laserScaleTarget;
+ /* 0x03CC */ UNK_TYPE1 unk_3CC[0xC]; // Vec3f?
+ /* 0x03D8 */ Vec3f leftFootPos;
+ /* 0x03E4 */ Vec3f rightFootPos;
+ /* 0x03F0 */ Vec3f leftHandPos;
+ /* 0x03FC */ Vec3f rightHandPos;
+ /* 0x0408 */ Vec3f waypointPos;
+ /* 0x0414 */ Vec3s pupilRot;
+ /* 0x041A */ Vec3s laserRot;
+ /* 0x0420 */ Color_RGB16 eyePrimColor;
+ /* 0x0426 */ Color_RGB16 eyeEnvColor;
+ /* 0x042C */ s16 laserState;
+ /* 0x0430 */ s32 texScroll;
+ /* 0x0434 */ EnEgolEffect effects[EYEGORE_EFFECT_COUNT];
+ /* 0x1BA4 */ ColliderJntSph bodyCollider;
+ /* 0x1BC4 */ ColliderJntSphElement bodyElements[6];
+ /* 0x1D44 */ ColliderJntSph eyeCollider;
+ /* 0x1D64 */ ColliderJntSphElement eyeElements[1];
+ /* 0x1DA4 */ ColliderQuad laserCollider;
+ /* 0x1E24 */ UNK_TYPE1 unk_1E24[4];
+ /* 0x1E28 */ s16 subCamId;
+ /* 0x1E2C */ f32 subCamFov;
+ /* 0x1E30 */ f32 subCamFovTarget;
+ /* 0x1E34 */ Vec3f subCamAt;
+ /* 0x1E40 */ Vec3f subCamEye;
+ /* 0x1E4C */ UNK_TYPE1 unk_1E4C[0x24]; // Vec3f[3]?
} EnEgol; // size = 0x1E70
-extern const ActorInit En_Egol_InitVars;
-
#endif // Z_EN_EGOL_H
diff --git a/src/overlays/actors/ovl_En_Elf/overlay.cfg b/src/overlays/actors/ovl_En_Elf/overlay.cfg
deleted file mode 100644
index cc1ddac28..000000000
--- a/src/overlays/actors/ovl_En_Elf/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Elf
-z_en_elf.c
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 aa4768a76..615d59196 100644
--- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c
+++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c
@@ -33,7 +33,7 @@ void func_8088F5F4(EnElf* this, PlayState* play, s32 sparkleLife);
void func_8089010C(Actor* thisx, PlayState* play);
void func_808908D0(Vec3f* vec, PlayState* play, u32 action);
-const ActorInit En_Elf_InitVars = {
+ActorInit En_Elf_InitVars = {
ACTOR_EN_ELF,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -233,7 +233,7 @@ void func_8088C9CC(EnElf* this, PlayState* play) {
this->unk_244 = 2;
this->unk_248 = 0x400;
this->unk_254 = 2.0f;
- this->actor.speedXZ = 1.5f;
+ this->actor.speed = 1.5f;
this->unk_26C = func_8088C920;
this->unk_25C = (s32)Rand_ZeroFloat(8.0f) + 4;
} else {
@@ -297,7 +297,7 @@ void func_8088CC48(EnElf* this, PlayState* play) {
this->unk_25C = 0;
this->disappearTimer = 240;
if ((this->fairyFlags & 0x400) && Flags_GetCollectible(play, this->unk_260)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -355,10 +355,11 @@ void EnElf_Init(Actor* thisx, PlayState* play2) {
this->elfMsg = NULL;
this->unk_234 = NULL;
this->unk_269 = 20;
- if ((gSaveContext.save.playerData.tatlTimer >= 25800) || (gSaveContext.save.playerData.tatlTimer < 3000)) {
- gSaveContext.save.playerData.tatlTimer = 0;
+ if ((gSaveContext.save.saveInfo.playerData.tatlTimer >= 25800) ||
+ (gSaveContext.save.saveInfo.playerData.tatlTimer < 3000)) {
+ gSaveContext.save.saveInfo.playerData.tatlTimer = 0;
}
- this->unk_266 = ElfMessage_GetFirstCycleHint(play);
+ this->unk_266 = QuestHint_GetTatlTextId(play);
break;
case 1:
@@ -420,7 +421,7 @@ void EnElf_Init(Actor* thisx, PlayState* play2) {
break;
case 8:
- Actor_MarkForDeath(thisx);
+ Actor_Kill(thisx);
return;
case 3:
@@ -558,24 +559,24 @@ void func_8088D9BC(EnElf* this, PlayState* play) {
Vec3f* vec = &this->unk_224;
if (this->fairyFlags & 0x4000) {
- Math_SmoothStepToF(&this->actor.speedXZ, 5.0f, 0.5f, 1.0f, 0.01f);
+ Math_SmoothStepToF(&this->actor.speed, 5.0f, 0.5f, 1.0f, 0.01f);
} else {
- Math_SmoothStepToF(&this->actor.speedXZ, this->unk_254, 0.2f, 0.5f, 0.01f);
+ Math_SmoothStepToF(&this->actor.speed, this->unk_254, 0.2f, 0.5f, 0.01f);
}
switch (this->unk_244) {
case 0:
- targetYaw = Math_FAtan2F(-(this->actor.world.pos.z - vec->z), -(this->actor.world.pos.x - vec->x));
+ targetYaw = Math_Atan2S_XY(-(this->actor.world.pos.z - vec->z), -(this->actor.world.pos.x - vec->x));
break;
case 3:
- targetYaw = Math_FAtan2F(-(this->actor.world.pos.z - player->actor.world.pos.z),
- -(this->actor.world.pos.x - player->actor.world.pos.x));
+ targetYaw = Math_Atan2S_XY(-(this->actor.world.pos.z - player->actor.world.pos.z),
+ -(this->actor.world.pos.x - player->actor.world.pos.x));
break;
case 2:
- targetYaw = Math_FAtan2F(this->actor.world.pos.z - player->actor.world.pos.z,
- this->actor.world.pos.x - player->actor.world.pos.x);
+ targetYaw = Math_Atan2S_XY(this->actor.world.pos.z - player->actor.world.pos.z,
+ this->actor.world.pos.x - player->actor.world.pos.x);
break;
default:
@@ -606,7 +607,7 @@ void func_8088DB4C(EnElf* this, Vec3f* arg1, f32 arg2, f32 arg3, f32 arg4) {
xzVelocity = sqrtf(SQ(xVelTarget) + SQ(zVelTarget));
clampedXZ = CLAMP(xzVelocity, arg2, arg3);
- this->actor.speedXZ = clampedXZ;
+ this->actor.speed = clampedXZ;
if ((xzVelocity != clampedXZ) && (xzVelocity != 0.0f)) {
xzVelocity = clampedXZ / xzVelocity;
@@ -627,7 +628,7 @@ s32 func_8088DCA4(EnElf* this) {
if (this->disappearTimer > -10) {
Actor_SetScale(&this->actor, (this->disappearTimer + 10) * 0.008f * 0.1f);
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return true;
}
}
@@ -658,7 +659,7 @@ void func_8088DD34(EnElf* this, PlayState* play) {
if (this->fairyFlags & 0x400) {
Flags_SetCollectible(play, this->unk_260);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -700,7 +701,7 @@ void func_8088DD34(EnElf* this, PlayState* play) {
}
if (this->fairyFlags & 0x2000) {
- Actor_PickUp(&this->actor, play, GI_MAX, 80.0f, 60.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MAX, 80.0f, 60.0f);
}
}
@@ -717,9 +718,9 @@ void func_8088E018(EnElf* this, PlayState* play) {
parentPos.y += (1500.0f * this->actor.scale.y) + 40.0f;
func_8088D660(this, &parentPos, 0.2f);
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
- this->unk_258 = Math_FAtan2F(this->actor.velocity.z, this->actor.velocity.x);
+ this->unk_258 = Math_Atan2S_XY(this->actor.velocity.z, this->actor.velocity.x);
}
void func_8088E0E0(EnElf* this, PlayState* play) {
@@ -762,13 +763,13 @@ void func_8088E0F0(EnElf* this, PlayState* play) {
}
if (this->unk_224.y < -10.0f) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
- this->unk_258 = Math_FAtan2F(this->actor.velocity.z, this->actor.velocity.x);
+ this->unk_258 = Math_Atan2S_XY(this->actor.velocity.z, this->actor.velocity.x);
func_8088F5F4(this, play, 32);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FIATY_HEAL - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FIATY_HEAL - SFX_FLAG);
}
void func_8088E304(EnElf* this, PlayState* play) {
@@ -776,7 +777,7 @@ void func_8088E304(EnElf* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (this->unk_224.y > 200.0f) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -799,10 +800,10 @@ void func_8088E304(EnElf* this, PlayState* play) {
this->unk_224.z = Math_SinS(this->unk_248) * -this->unk_254;
this->unk_248 += this->unk_24C;
- func_8088D7F8(this, &player->bodyPartsPos[0]);
- this->unk_258 = Math_FAtan2F(this->actor.velocity.z, this->actor.velocity.x);
+ func_8088D7F8(this, &player->bodyPartsPos[PLAYER_BODYPART_WAIST]);
+ this->unk_258 = Math_Atan2S_XY(this->actor.velocity.z, this->actor.velocity.x);
func_8088F5F4(this, play, 0x20);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FIATY_HEAL - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FIATY_HEAL - SFX_FLAG);
}
void func_8088E484(EnElf* this, PlayState* play) {
@@ -823,11 +824,11 @@ void func_8088E484(EnElf* this, PlayState* play) {
this->unk_254 = 1.0f;
}
- func_8088D7F8(this, &player->bodyPartsPos[0]);
+ func_8088D7F8(this, &player->bodyPartsPos[PLAYER_BODYPART_WAIST]);
Actor_SetScale(&this->actor, (1.0f - (SQ(this->unk_250) * SQ(1.0f / 9.0f))) * 0.008f);
- this->unk_258 = Math_FAtan2F(this->actor.velocity.z, this->actor.velocity.x);
+ this->unk_258 = Math_Atan2S_XY(this->actor.velocity.z, this->actor.velocity.x);
func_8088F5F4(this, play, 32);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FIATY_HEAL - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FIATY_HEAL - SFX_FLAG);
}
void func_8088E5A8(EnElf* this, PlayState* play) {
@@ -844,18 +845,18 @@ void func_8088E60C(EnElf* this, PlayState* play) {
s16 glowLightRadius;
Player* player = GET_PLAYER(play);
- if (player->stateFlags1 & 0x400) {
+ if (player->stateFlags1 & PLAYER_STATE1_400) {
glowLightRadius = 200;
} else {
glowLightRadius = 100;
}
- if ((this->unk_244 == 6) || (player->stateFlags1 & 2) || (this->fairyFlags & 0x8000)) {
+ if ((this->unk_244 == 6) || (player->stateFlags1 & PLAYER_STATE1_2) || (this->fairyFlags & 0x8000)) {
glowLightRadius = 0;
}
- if (Cutscene_CheckActorAction(play, 201)) {
- if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 201)]->action == 6) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_201)) {
+ if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_201)]->id == 6) {
glowLightRadius = 0;
}
}
@@ -872,7 +873,7 @@ void func_8088E60C(EnElf* this, PlayState* play) {
Lights_PointGlowSetInfo(&this->lightInfoGlow, this->actor.world.pos.x, this->actor.world.pos.y,
this->actor.world.pos.z, 255, 255, 255, glowLightRadius);
- this->unk_258 = Math_FAtan2F(this->actor.velocity.z, this->actor.velocity.x);
+ this->unk_258 = Math_Atan2S_XY(this->actor.velocity.z, this->actor.velocity.x);
Actor_SetScale(&this->actor, this->actor.scale.x);
}
@@ -882,18 +883,18 @@ void func_8088E850(EnElf* this, PlayState* play) {
Actor* arrowPointedActor;
f32 xScale;
f32 distFromLinksHead;
- u32 sp38;
+ u32 cueChannel;
func_8088F214(this, play);
func_8088E5A8(this, play);
xScale = 0.0f;
- if (Cutscene_CheckActorAction(play, 201)) {
- sp38 = Cutscene_GetActorActionIndex(play, 201);
- func_808908D0(&nextPos, play, sp38);
- this->actor.shape.rot.y = play->csCtx.actorActions[sp38]->urot.y;
- this->actor.shape.rot.x = play->csCtx.actorActions[sp38]->urot.x;
- if (play->csCtx.actorActions[sp38]->action == 5) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_201)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_201);
+ func_808908D0(&nextPos, play, cueChannel);
+ this->actor.shape.rot.y = play->csCtx.actorCues[cueChannel]->rot.y;
+ this->actor.shape.rot.x = play->csCtx.actorCues[cueChannel]->rot.x;
+ if (play->csCtx.actorCues[cueChannel]->id == 5) {
func_8088F5F4(this, play, 16);
}
@@ -903,23 +904,22 @@ void func_8088E850(EnElf* this, PlayState* play) {
func_8088D660(this, &nextPos, 0.2f);
}
- if ((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 0) &&
- (play->csCtx.currentCsIndex == 0) &&
- ((play->csCtx.frames == 149) || (play->csCtx.frames == 381) || (play->csCtx.frames == 591))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
+ if ((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 0) && (play->csCtx.scriptIndex == 0) &&
+ ((play->csCtx.curFrame == 149) || (play->csCtx.curFrame == 381) || (play->csCtx.curFrame == 591))) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
}
- if ((play->sceneId == SCENE_SECOM) && (gSaveContext.sceneLayer == 0) && (play->csCtx.currentCsIndex == 4) &&
- (play->csCtx.frames == 95)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
+ if ((play->sceneId == SCENE_SECOM) && (gSaveContext.sceneLayer == 0) && (play->csCtx.scriptIndex == 4) &&
+ (play->csCtx.curFrame == 95)) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
}
} else {
this->actor.shape.rot.x = 0;
- distFromLinksHead = Math_Vec3f_DistXYZ(&player->bodyPartsPos[8], &this->actor.world.pos);
+ distFromLinksHead = Math_Vec3f_DistXYZ(&player->bodyPartsPos[PLAYER_BODYPART_HAT], &this->actor.world.pos);
switch (this->unk_244) {
case 5:
- func_8088D660(this, &player->bodyPartsPos[8], 1.0f - (this->unk_24A * 0.033333335f));
- xScale = Math_Vec3f_DistXYZ(&player->bodyPartsPos[8], &this->actor.world.pos);
+ func_8088D660(this, &player->bodyPartsPos[PLAYER_BODYPART_HAT], 1.0f - (this->unk_24A * 0.033333335f));
+ xScale = Math_Vec3f_DistXYZ(&player->bodyPartsPos[PLAYER_BODYPART_HAT], &this->actor.world.pos);
if (distFromLinksHead < 7.0f) {
this->unk_25C = 0;
@@ -935,12 +935,12 @@ void func_8088E850(EnElf* this, PlayState* play) {
break;
case 6:
- func_8088D660(this, &player->bodyPartsPos[8], 0.2f);
- this->actor.world.pos = player->bodyPartsPos[8];
+ func_8088D660(this, &player->bodyPartsPos[PLAYER_BODYPART_HAT], 0.2f);
+ this->actor.world.pos = player->bodyPartsPos[PLAYER_BODYPART_HAT];
break;
case 9:
- nextPos = player->bodyPartsPos[8];
+ nextPos = player->bodyPartsPos[PLAYER_BODYPART_HAT];
nextPos.y += 1500.0f * this->actor.scale.y;
func_8088D7F8(this, &nextPos);
@@ -967,8 +967,8 @@ void func_8088E850(EnElf* this, PlayState* play) {
default:
arrowPointedActor = play->actorCtx.targetContext.arrowPointedActor;
- if ((player->stateFlags1 & 0x40) && (player->targetActor != NULL)) {
- Math_Vec3f_Copy(&nextPos, &player->targetActor->focus.pos);
+ if ((player->stateFlags1 & PLAYER_STATE1_40) && (player->talkActor != NULL)) {
+ Math_Vec3f_Copy(&nextPos, &player->talkActor->focus.pos);
} else {
Math_Vec3f_Copy(&nextPos, &play->actorCtx.targetContext.unk0);
}
@@ -976,7 +976,7 @@ void func_8088E850(EnElf* this, PlayState* play) {
if (arrowPointedActor != NULL) {
func_8088DB4C(this, &nextPos, 0.0f, 30.0f, 0.2f);
- if (this->actor.speedXZ >= 5.0f) {
+ if (this->actor.speed >= 5.0f) {
func_8088F5F4(this, play, 0x10);
}
} else {
@@ -994,7 +994,7 @@ void func_8088E850(EnElf* this, PlayState* play) {
if (distFromLinksHead > 100.0f) {
this->fairyFlags |= 2;
if (this->unk_269 == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BELL_DASH_NORMAL);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BELL_DASH_NORMAL);
}
this->unk_25C = 100;
}
@@ -1015,7 +1015,7 @@ void func_8088E850(EnElf* this, PlayState* play) {
func_8088E60C(this, play);
- if (!Cutscene_CheckActorAction(play, 0xC9)) {
+ if (!Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_201)) {
this->actor.shape.rot.y = this->unk_258;
}
}
@@ -1064,7 +1064,7 @@ void func_8088EFA4(EnElf* this, PlayState* play) {
this->unk_268 = 0;
this->unk_238 = 1.0f;
if (!this->unk_269) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BELL_DASH_NORMAL);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BELL_DASH_NORMAL);
}
} else if (this->unk_268 == 0) {
if ((arrayPointerActor == NULL) ||
@@ -1085,15 +1085,15 @@ void func_8088EFA4(EnElf* this, PlayState* play) {
}
if (this->fairyFlags & 1) {
- if ((arrayPointerActor == NULL) || (player->unk_730 == NULL)) {
+ if ((arrayPointerActor == NULL) || (player->targetedActor == NULL)) {
this->fairyFlags ^= 1;
}
- } else if ((arrayPointerActor != NULL) && (player->unk_730 != NULL)) {
+ } else if ((arrayPointerActor != NULL) && (player->targetedActor != NULL)) {
u8 temp = this->unk_269;
- u16 targetSfxId = this->unk_269 == 0 ? NA_SE_PL_WALK_GROUND - SFX_FLAG : NA_SE_PL_WALK_GROUND - SFX_FLAG;
+ u16 targetSfxId = (this->unk_269 == 0) ? NA_SE_NONE : NA_SE_NONE;
if (!temp) {
- Actor_PlaySfxAtPos(&this->actor, targetSfxId);
+ Actor_PlaySfx(&this->actor, targetSfxId);
}
this->fairyFlags |= 1;
}
@@ -1105,9 +1105,9 @@ void func_8088F214(EnElf* this, PlayState* play) {
Player* player = GET_PLAYER(play);
s32 pad;
- if (play->csCtx.state != 0) {
- if (Cutscene_CheckActorAction(play, 201)) {
- switch (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 201)]->action) {
+ if (play->csCtx.state != CS_STATE_IDLE) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_201)) {
+ switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_201)]->id) {
case 4:
sp34 = 7;
break;
@@ -1133,13 +1133,13 @@ void func_8088F214(EnElf* this, PlayState* play) {
func_800B9010(&this->actor, NA_SE_EV_BELL_ANGER - SFX_FLAG);
} else {
arrowPointedActor = play->actorCtx.targetContext.arrowPointedActor;
- if (player->stateFlags1 & 0x400) {
+ if (player->stateFlags1 & PLAYER_STATE1_400) {
sp34 = 10;
this->unk_25C = 100;
} else if ((arrowPointedActor == NULL) || (arrowPointedActor->category == 4)) {
if (arrowPointedActor != NULL) {
this->unk_25C = 100;
- player->stateFlags2 |= 0x100000;
+ player->stateFlags2 |= PLAYER_STATE2_100000;
sp34 = 0;
} else {
switch (this->unk_244) {
@@ -1147,9 +1147,9 @@ void func_8088F214(EnElf* this, PlayState* play) {
if (this->unk_25C != 0) {
this->unk_25C--;
sp34 = 0;
- } else if (!(player->stateFlags1 & 0x40)) {
+ } else if (!(player->stateFlags1 & PLAYER_STATE1_40)) {
if (this->unk_269 == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_NAVY_VANISH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_NAVY_VANISH);
}
sp34 = 5;
} else {
@@ -1163,7 +1163,7 @@ void func_8088F214(EnElf* this, PlayState* play) {
this->unk_24A--;
sp34 = 5;
} else {
- player->stateFlags2 |= 0x100000;
+ player->stateFlags2 |= PLAYER_STATE2_100000;
sp34 = 0;
}
} else {
@@ -1195,34 +1195,34 @@ void func_8088F214(EnElf* this, PlayState* play) {
switch (sp34) {
case 0:
- if (!(player->stateFlags2 & 0x100000)) {
+ if (!(player->stateFlags2 & PLAYER_STATE2_100000)) {
sp34 = 5;
if (this->unk_269 == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_NAVY_VANISH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_NAVY_VANISH);
}
}
break;
case 6:
- if (player->stateFlags2 & 0x100000) {
+ if (player->stateFlags2 & PLAYER_STATE2_100000) {
sp34 = 9;
this->unk_25C = 0x2A;
if (this->unk_269 == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BELL_DASH_NORMAL);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BELL_DASH_NORMAL);
}
- } else if (player->stateFlags1 & 0x40) {
- player->stateFlags2 |= 0x100000;
+ } else if (player->stateFlags1 & PLAYER_STATE1_40) {
+ player->stateFlags2 |= PLAYER_STATE2_100000;
sp34 = 0;
this->unk_25C = 0;
}
break;
case 5:
- player->stateFlags2 &= ~0x100000;
+ player->stateFlags2 &= ~PLAYER_STATE2_100000;
break;
default:
- player->stateFlags2 |= 0x100000;
+ player->stateFlags2 |= PLAYER_STATE2_100000;
break;
}
}
@@ -1230,8 +1230,8 @@ void func_8088F214(EnElf* this, PlayState* play) {
if (sp34 != this->unk_244) {
func_8088C51C(this, sp34);
if (sp34 == 9) {
- this->unk_254 = Math_Vec3f_DistXZ(&player->bodyPartsPos[8], &this->actor.world.pos);
- this->unk_248 = Math_Vec3f_Yaw(&this->actor.world.pos, &player->bodyPartsPos[8]);
+ this->unk_254 = Math_Vec3f_DistXZ(&player->bodyPartsPos[PLAYER_BODYPART_HAT], &this->actor.world.pos);
+ this->unk_248 = Math_Vec3f_Yaw(&this->actor.world.pos, &player->bodyPartsPos[PLAYER_BODYPART_HAT]);
}
}
}
@@ -1281,11 +1281,13 @@ void func_8088FA38(EnElf* this, PlayState* play) {
if (this->unk_234 != NULL) {
refPos = this->unk_234->world.pos;
} else {
- if ((player->unk_730 == NULL) || (&player->actor == player->unk_730) || (&this->actor == player->unk_730) ||
- (this->unk_264 & 4)) {
- refPos.x = player->bodyPartsPos[7].x + (Math_SinS(player->actor.shape.rot.y) * 20.0f);
- refPos.y = player->bodyPartsPos[7].y + 5.0f;
- refPos.z = player->bodyPartsPos[7].z + (Math_CosS(player->actor.shape.rot.y) * 20.0f);
+ if ((player->targetedActor == NULL) || (&player->actor == player->targetedActor) ||
+ (&this->actor == player->targetedActor) || (this->unk_264 & 4)) {
+ refPos.x =
+ player->bodyPartsPos[PLAYER_BODYPART_HEAD].x + (Math_SinS(player->actor.shape.rot.y) * 20.0f);
+ refPos.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 5.0f;
+ refPos.z =
+ player->bodyPartsPos[PLAYER_BODYPART_HEAD].z + (Math_CosS(player->actor.shape.rot.y) * 20.0f);
this->unk_264 &= ~4;
}
}
@@ -1297,7 +1299,7 @@ void func_8088FA38(EnElf* this, PlayState* play) {
refPos = this->actor.focus.pos;
func_8088DB4C(this, &refPos, 0, 30.0f, 0.2f);
- if (this->actor.speedXZ >= 5.0f) {
+ if (this->actor.speed >= 5.0f) {
func_8088F5F4(this, play, 0x10);
}
@@ -1322,19 +1324,19 @@ void func_8088FC34(EnElf* this, PlayState* play) {
}
void func_8088FD04(EnElf* this) {
- if (ActorCutscene_GetCurrentIndex() == this->actor.cutscene) {
+ if (CutsceneManager_GetCurrentCsId() == this->actor.csId) {
this->unk_264 &= ~1;
this->unk_264 |= 2;
- } else if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ } else if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->actor.csId);
this->unk_264 |= 1;
- } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_Start(this->actor.cutscene, &this->actor);
+ } else if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_Start(this->actor.csId, &this->actor);
this->unk_264 &= ~1;
this->unk_264 |= 2;
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
this->unk_264 |= 1;
}
}
@@ -1345,8 +1347,8 @@ void func_8088FDCC(EnElf* this) {
this->fairyFlags &= ~0x20;
this->actor.focus.pos = this->actor.world.pos;
this->unk_234 = NULL;
- if ((this->unk_264 & 2) && (this->actor.cutscene != 0x7C)) {
- ActorCutscene_Stop(this->actor.cutscene);
+ if ((this->unk_264 & 2) && (this->actor.csId != CS_ID_GLOBAL_TALK)) {
+ CutsceneManager_Stop(this->actor.csId);
}
this->unk_264 &= ~0x20;
}
@@ -1374,11 +1376,11 @@ void func_8088FE64(Actor* thisx, PlayState* play2) {
switch (play->msgCtx.choiceIndex) {
case 0:
- func_80151938(play, play->msgCtx.currentTextId - 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId - 1);
break;
case 1:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
}
}
@@ -1388,7 +1390,7 @@ void func_8088FE64(Actor* thisx, PlayState* play2) {
if (Message_ShouldAdvance(play)) {
switch (play->msgCtx.currentTextId) {
case 0x240:
- func_80151938(play, 0x245);
+ Message_ContinueTextbox(play, 0x245);
break;
case 0x21D:
@@ -1405,28 +1407,28 @@ void func_8088FE64(Actor* thisx, PlayState* play2) {
case 0x244:
switch (CURRENT_DAY) {
case 1:
- func_80151938(play, 0x246);
+ Message_ContinueTextbox(play, 0x246);
break;
case 2:
- func_80151938(play, 0x247);
+ Message_ContinueTextbox(play, 0x247);
break;
case 3:
if (!gSaveContext.save.isNight) {
- func_80151938(play, 0x248);
+ Message_ContinueTextbox(play, 0x248);
} else if ((gSaveContext.save.time < CLOCK_TIME(6, 0)) &&
- (gSaveContext.save.weekEventReg[74] & 0x20)) {
- func_80151938(play, 0x225);
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_74_20)) {
+ Message_ContinueTextbox(play, 0x225);
} else {
- func_80151938(play, 0x249);
+ Message_ContinueTextbox(play, 0x249);
}
break;
}
break;
default:
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_8088FDCC(this);
break;
}
@@ -1449,16 +1451,17 @@ void func_8089010C(Actor* thisx, PlayState* play) {
s32 pad;
EnElf* this = THIS;
Player* player = GET_PLAYER(play);
- u16 temp_v0 = ElfMessage_GetFirstCycleHint(play);
+ u16 temp_v0 = QuestHint_GetTatlTextId(play);
if (temp_v0 != this->unk_266) {
this->unk_266 = temp_v0;
- gSaveContext.save.playerData.tatlTimer = 0;
+ gSaveContext.save.saveInfo.playerData.tatlTimer = 0;
}
- if ((player->tatlTextId == 0) && (player->unk_730 == NULL)) {
- if ((gSaveContext.save.playerData.tatlTimer >= 600) && (gSaveContext.save.playerData.tatlTimer <= 3000)) {
- player->tatlTextId = ElfMessage_GetFirstCycleHint(play);
+ if ((player->tatlTextId == 0) && (player->targetedActor == NULL)) {
+ if ((gSaveContext.save.saveInfo.playerData.tatlTimer >= 600) &&
+ (gSaveContext.save.saveInfo.playerData.tatlTimer <= 3000)) {
+ player->tatlTextId = QuestHint_GetTatlTextId(play);
}
}
@@ -1470,9 +1473,9 @@ void func_8089010C(Actor* thisx, PlayState* play) {
func_8019FDC8(&gSfxDefaultPos, NA_SE_VO_NA_LISTEN, 0x20);
thisx->focus.pos = thisx->world.pos;
- if (thisx->textId == ElfMessage_GetFirstCycleHint(play)) {
+ if (thisx->textId == QuestHint_GetTatlTextId(play)) {
this->fairyFlags |= 0x80;
- gSaveContext.save.playerData.tatlTimer = 3001;
+ gSaveContext.save.saveInfo.playerData.tatlTimer = 3001;
}
this->fairyFlags |= 0x10;
@@ -1480,9 +1483,9 @@ void func_8089010C(Actor* thisx, PlayState* play) {
thisx->update = func_8088FE64;
func_8088C51C(this, 3);
if (this->elfMsg != NULL) {
- this->elfMsg->flags |= ACTOR_FLAG_100;
- thisx->cutscene = this->elfMsg->cutscene;
- if (thisx->cutscene != -1) {
+ this->elfMsg->flags |= ACTOR_FLAG_TALK_REQUESTED;
+ thisx->csId = this->elfMsg->csId;
+ if (thisx->csId != CS_ID_NONE) {
func_8088FD04(this);
}
if (this->elfMsg->home.rot.x == -0x961) {
@@ -1490,7 +1493,7 @@ void func_8089010C(Actor* thisx, PlayState* play) {
Actor_ChangeFocus(thisx, play, this->elfMsg);
}
} else {
- thisx->cutscene = -1;
+ thisx->csId = CS_ID_NONE;
}
thisx->flags &= ~ACTOR_FLAG_10000;
} else if (this->unk_264 & 4) {
@@ -1503,10 +1506,10 @@ void func_8089010C(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
if (!Play_InCsMode(play)) {
- if (gSaveContext.save.playerData.tatlTimer < 25800) {
- gSaveContext.save.playerData.tatlTimer++;
+ if (gSaveContext.save.saveInfo.playerData.tatlTimer < 25800) {
+ gSaveContext.save.saveInfo.playerData.tatlTimer++;
} else if (!(this->fairyFlags & 0x80)) {
- gSaveContext.save.playerData.tatlTimer = 0;
+ gSaveContext.save.saveInfo.playerData.tatlTimer = 0;
}
}
}
@@ -1523,7 +1526,7 @@ void func_8089010C(Actor* thisx, PlayState* play) {
this->unk_269--;
}
- if (!this->unk_269 && (play->csCtx.state != 0)) {
+ if (!this->unk_269 && (play->csCtx.state != CS_STATE_IDLE)) {
this->unk_269 = 1;
}
}
@@ -1576,10 +1579,10 @@ void EnElf_Draw(Actor* thisx, PlayState* play) {
if (player->currentMask != PLAYER_MASK_GIANT) {
if (!(this->fairyFlags & 8) &&
- (!Cutscene_CheckActorAction(play, 201) ||
- (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 201)]->action != 6)) &&
- (!(player->stateFlags1 & 0x100000) || (kREG(90) < this->actor.projectedPos.z))) {
- Gfx* dListHead = GRAPH_ALLOC(play->state.gfxCtx, sizeof(Gfx) * 4);
+ (!Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_201) ||
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_201)]->id != 6)) &&
+ (!(player->stateFlags1 & PLAYER_STATE1_100000) || (kREG(90) < this->actor.projectedPos.z))) {
+ Gfx* gfx = GRAPH_ALLOC(play->state.gfxCtx, 4 * sizeof(Gfx));
f32 alphaScale;
s32 envAlpha;
@@ -1592,19 +1595,19 @@ void EnElf_Draw(Actor* thisx, PlayState* play) {
alphaScale = (this->disappearTimer < 0) ? (this->disappearTimer * 0.0011666666f) + 1.0f : 1.0f;
- gSPSegment(POLY_XLU_DISP++, 0x08, dListHead);
+ gSPSegment(POLY_XLU_DISP++, 0x08, gfx);
- gDPPipeSync(dListHead++);
- gDPSetPrimColor(dListHead++, 0, 0x01, (u8)(s8)this->innerColor.r, (u8)(s8)this->innerColor.g,
+ gDPPipeSync(gfx++);
+ gDPSetPrimColor(gfx++, 0, 0x01, (u8)(s8)this->innerColor.r, (u8)(s8)this->innerColor.g,
(u8)(s8)this->innerColor.b, (u8)(s8)(this->innerColor.a * alphaScale));
if (this->fairyFlags & 4) {
- gDPSetRenderMode(dListHead++, G_RM_PASS, G_RM_CLD_SURF2);
+ gDPSetRenderMode(gfx++, G_RM_PASS, G_RM_CLD_SURF2);
} else {
- gDPSetRenderMode(dListHead++, G_RM_PASS, G_RM_ZB_CLD_SURF2);
+ gDPSetRenderMode(gfx++, G_RM_PASS, G_RM_ZB_CLD_SURF2);
}
- gSPEndDisplayList(dListHead);
+ gSPEndDisplayList(gfx);
gDPSetEnvColor(POLY_XLU_DISP++, (u8)(s8)this->outerColor.r, (u8)(s8)this->outerColor.g,
(u8)(s8)this->outerColor.b, (u8)(s8)(envAlpha * alphaScale));
@@ -1620,17 +1623,17 @@ void EnElf_Draw(Actor* thisx, PlayState* play) {
void func_808908D0(Vec3f* vec, PlayState* play, u32 action) {
Vec3f startPos;
Vec3f endPos;
- CsCmdActorAction* npcAction = play->csCtx.actorActions[action];
+ CsCmdActorCue* cue = play->csCtx.actorCues[action];
f32 lerp;
- startPos.x = npcAction->startPos.x;
- startPos.y = npcAction->startPos.y;
- startPos.z = npcAction->startPos.z;
+ startPos.x = cue->startPos.x;
+ startPos.y = cue->startPos.y;
+ startPos.z = cue->startPos.z;
- endPos.x = npcAction->endPos.x;
- endPos.y = npcAction->endPos.y;
- endPos.z = npcAction->endPos.z;
+ endPos.x = cue->endPos.x;
+ endPos.y = cue->endPos.y;
+ endPos.z = cue->endPos.z;
- lerp = Environment_LerpWeight(npcAction->endFrame, npcAction->startFrame, play->csCtx.frames);
+ lerp = Environment_LerpWeight(cue->endFrame, cue->startFrame, play->csCtx.curFrame);
VEC3F_LERPIMPDST(vec, &startPos, &endPos, lerp);
}
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 64d53744f..680d59158 100644
--- a/src/overlays/actors/ovl_En_Elf/z_en_elf.h
+++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.h
@@ -60,6 +60,4 @@ typedef enum {
/* 0x07 */ ENELF_TYPE_7
} FairyType;
-extern const ActorInit En_Elf_InitVars;
-
#endif // Z_EN_ELF_H
diff --git a/src/overlays/actors/ovl_En_Elfbub/overlay.cfg b/src/overlays/actors/ovl_En_Elfbub/overlay.cfg
deleted file mode 100644
index 91957fdd0..000000000
--- a/src/overlays/actors/ovl_En_Elfbub/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Elfbub
-z_en_elfbub.c
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 42a4a06d8..12026b8b9 100644
--- a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c
+++ b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c
@@ -20,7 +20,7 @@ void EnElfbub_Draw(Actor* thisx, PlayState* play2);
void EnElfbub_Pop(EnElfbub* this, PlayState* play);
void EnElfbub_Idle(EnElfbub* this, PlayState* play);
-const ActorInit En_Elfbub_InitVars = {
+ActorInit En_Elfbub_InitVars = {
ACTOR_EN_ELFBUB,
ACTORCAT_MISC,
FLAGS,
@@ -57,7 +57,7 @@ void EnElfbub_Init(Actor* thisx, PlayState* play) {
Actor* childActor;
if (Flags_GetSwitch(play, ENELFBUB_GET_SWITCHFLAG(&this->actor))) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -117,7 +117,7 @@ void EnElfbub_Pop(EnElfbub* this, PlayState* play) {
}
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 60, NA_SE_EN_AWA_BREAK);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
diff --git a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.h b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.h
index cab77c8a4..50c6bd672 100644
--- a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.h
+++ b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.h
@@ -21,6 +21,4 @@ typedef struct EnElfbub {
/* 0x1A0 */ EnElfbubActionFunc actionFunc;
} EnElfbub; // size = 0x1A4
-extern const ActorInit En_Elfbub_InitVars;
-
#endif // Z_EN_ELFBUB_H
diff --git a/src/overlays/actors/ovl_En_Elfgrp/overlay.cfg b/src/overlays/actors/ovl_En_Elfgrp/overlay.cfg
deleted file mode 100644
index a371edb2f..000000000
--- a/src/overlays/actors/ovl_En_Elfgrp/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Elfgrp
-z_en_elfgrp.c
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 897641a9e..a3f17f605 100644
--- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c
+++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c
@@ -11,6 +11,8 @@
#define THIS ((EnElfgrp*)thisx)
+//! TODO: this file require macros for its uses of weekEventReg
+
void EnElfgrp_Init(Actor* thisx, PlayState* play);
void EnElfgrp_Destroy(Actor* thisx, PlayState* play);
void EnElfgrp_Update(Actor* thisx, PlayState* play);
@@ -33,7 +35,7 @@ void func_80A3A77C(EnElfgrp* this, PlayState* play);
void func_80A3A7FC(EnElfgrp* this, PlayState* play);
void func_80A3A8F8(EnElfgrp* this, PlayState* play);
-const ActorInit En_Elfgrp_InitVars = {
+ActorInit En_Elfgrp_InitVars = {
ACTOR_EN_ELFGRP,
ACTORCAT_PROP,
FLAGS,
@@ -45,14 +47,14 @@ const ActorInit En_Elfgrp_InitVars = {
(ActorFunc)NULL,
};
-void func_80A396B0(EnElfgrp* this, s32 arg1) {
- while (arg1 > 0) {
- if (this->actor.cutscene == -1) {
+void func_80A396B0(EnElfgrp* this, s32 numCutscenes) {
+ while (numCutscenes > 0) {
+ if (this->actor.csId == CS_ID_NONE) {
break;
}
- this->actor.cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene);
+ this->actor.csId = CutsceneManager_GetAdditionalCsId(this->actor.csId);
- arg1--;
+ numCutscenes--;
}
}
@@ -91,7 +93,7 @@ void EnElfgrp_Init(Actor* thisx, PlayState* play) {
switch (this->unk_147) {
case ENELFGRP_1:
- if (gSaveContext.save.weekEventReg[23] & 2) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_02)) {
func_80A396B0(this, 1);
} else {
this->unk_14A |= 4;
@@ -99,13 +101,13 @@ void EnElfgrp_Init(Actor* thisx, PlayState* play) {
break;
case ENELFGRP_2:
- if (gSaveContext.save.playerData.isDoubleMagicAcquired == true) {
+ if (gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired == true) {
func_80A396B0(this, 1);
}
break;
case ENELFGRP_3:
- if (gSaveContext.save.playerData.doubleDefense) {
+ if (gSaveContext.save.saveInfo.playerData.doubleDefense) {
func_80A396B0(this, 1);
}
break;
@@ -123,7 +125,7 @@ void EnElfgrp_Init(Actor* thisx, PlayState* play) {
this->actor.textId = (this->unk_147 * 3) + 0x581;
} else {
this->actionFunc = func_80A3A8F8;
- if ((gSaveContext.save.weekEventReg[9] & this->unk_146)) {
+ if ((gSaveContext.save.saveInfo.weekEventReg[9] & this->unk_146)) {
this->actor.textId = (this->unk_147 * 3) + 0x580;
} else {
this->actor.textId = (this->unk_147 * 3) + 0x57F;
@@ -146,7 +148,7 @@ void EnElfgrp_Init(Actor* thisx, PlayState* play) {
this->unk_14A |= 2;
func_80A396B0(this, 6);
}
- } else if ((gSaveContext.save.weekEventReg[8] & 0x80)) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_80)) {
func_80A39DC8(this, play, 24, 0);
this->actionFunc = func_80A3A398;
if (INV_CONTENT(ITEM_MASK_DEKU) == ITEM_MASK_DEKU) {
@@ -156,13 +158,13 @@ void EnElfgrp_Init(Actor* thisx, PlayState* play) {
func_80A396B0(this, 3);
this->unk_14A |= 2;
}
- } else if (gSaveContext.save.playerData.isMagicAcquired == true) {
+ } else if (gSaveContext.save.saveInfo.playerData.isMagicAcquired == true) {
func_80A396B0(this, 1);
}
} else {
func_80A39DC8(this, play, 24, 0);
this->actionFunc = func_80A3A8F8;
- if ((gSaveContext.save.weekEventReg[9] & this->unk_146)) {
+ if ((gSaveContext.save.saveInfo.weekEventReg[9] & this->unk_146)) {
this->actor.textId = 0x580;
} else {
this->actor.textId = 0x578;
@@ -181,7 +183,7 @@ s32 func_80A39BD0(PlayState* play, s32 arg2) {
return 0;
}
- return (((void)0, gSaveContext.save.inventory.strayFairies[arg2 - 1]) - func_80A39C1C(play, arg2)) + 10;
+ return (((void)0, gSaveContext.save.saveInfo.inventory.strayFairies[arg2 - 1]) - func_80A39C1C(play, arg2)) + 10;
}
s32 func_80A39C1C(PlayState* play, s32 arg1) {
@@ -205,13 +207,13 @@ s32 func_80A39C1C(PlayState* play, s32 arg1) {
}
if (arg1 == 0) {
- if (gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 & 1) {
+ if (gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 & 1) {
return 25;
}
return 24;
}
- temp_v1 = (gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 >> (((arg1 - 1) * 5) + 1)) & 0x1F;
+ temp_v1 = (gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 >> (((arg1 - 1) * 5) + 1)) & 0x1F;
if (temp_v1 < 10) {
temp_v1 = 10;
} else if (temp_v1 > 25) {
@@ -227,13 +229,13 @@ void func_80A39CD4(PlayState* play, s32 arg1, s32 arg2) {
if (arg1 == 0) {
if (arg2 == 25) {
- gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 |= 1;
+ gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 |= 1;
} else {
- gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 &= ~1;
+ gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 &= ~1;
}
} else {
- gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 &= ~(0x1F << ((arg1 * 5) - 4));
- gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 |= arg2 << ((arg1 * 5) - 4);
+ gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 &= ~(0x1F << ((arg1 * 5) - 4));
+ gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 |= arg2 << ((arg1 * 5) - 4);
}
}
@@ -343,9 +345,9 @@ void func_80A3A044(PlayState* play) {
}
void func_80A3A0AC(EnElfgrp* this, PlayState* play) {
- if (!Cutscene_CheckActorAction(play, 0x64)) {
+ if (!Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_100)) {
this->actionFunc = func_80A3A600;
- ActorCutscene_Stop(this->actor.cutscene);
+ CutsceneManager_Stop(this->actor.csId);
}
}
@@ -384,12 +386,12 @@ void func_80A3A210(EnElfgrp* this, PlayState* play) {
}
void func_80A3A274(EnElfgrp* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 0x64)) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_100)) {
if (this->unk_14A & 1) {
func_800B9010(&this->actor, NA_SE_PL_CHIBI_FAIRY_HEAL - SFX_FLAG);
}
- switch (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x64)]->action) {
+ switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_100)]->id) {
case 2:
if (!(this->unk_14A & 1)) {
if (this->unk_147 == ENELFGRP_0) {
@@ -412,8 +414,8 @@ void func_80A3A274(EnElfgrp* this, PlayState* play) {
}
void func_80A3A398(EnElfgrp* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
this->actionFunc = func_80A3A274;
Flags_UnsetSwitch(play, ENELFGRP_GET_FE00(&this->actor));
if (this->unk_14A & 2) {
@@ -421,7 +423,7 @@ void func_80A3A398(EnElfgrp* this, PlayState* play) {
}
if ((this->unk_14A & 4) != 0) {
- gSaveContext.save.weekEventReg[23] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_23_02);
}
if (this->unk_14A & 0x10) {
@@ -429,7 +431,7 @@ void func_80A3A398(EnElfgrp* this, PlayState* play) {
}
this->unk_14A &= ~8;
} else if (this->actor.xzDistToPlayer < 350.0f) {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
@@ -441,9 +443,10 @@ void func_80A3A484(EnElfgrp* this, PlayState* play) {
}
void func_80A3A4AC(EnElfgrp* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 0x64)) {
- s32 temp = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x64)]->action;
- if (temp == 3) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_100)) {
+ s32 cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_100)]->id;
+
+ if (cueId == 3) {
this->actionFunc = func_80A3A484;
this->unk_144 = 90;
}
@@ -451,10 +454,10 @@ void func_80A3A4AC(EnElfgrp* this, PlayState* play) {
}
void func_80A3A520(EnElfgrp* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 0x67)) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_103)) {
this->actionFunc = func_80A3A600;
- } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ } else if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
this->actionFunc = func_80A3A4AC;
Flags_SetSwitch(play, ENELFGRP_GET_FE00(&this->actor));
@@ -466,7 +469,7 @@ void func_80A3A520(EnElfgrp* this, PlayState* play) {
Flags_SetSwitch(play, this->actor.home.rot.z);
}
} else if (this->actor.xzDistToPlayer < 350.0f) {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
@@ -483,11 +486,11 @@ void func_80A3A610(EnElfgrp* this, PlayState* play) {
if (this->unk_144 > 0) {
player->actor.freezeTimer = 100;
- player->stateFlags1 |= 0x20000000;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FAIRY_GROUP_HEAL - SFX_FLAG);
+ player->stateFlags1 |= PLAYER_STATE1_20000000;
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_GROUP_HEAL - SFX_FLAG);
} else {
player->actor.freezeTimer = 0;
- player->stateFlags1 &= ~0x20000000;
+ player->stateFlags1 &= ~PLAYER_STATE1_20000000;
this->actionFunc = func_80A3A600;
this->unk_14A |= 8;
}
@@ -499,7 +502,7 @@ void func_80A3A6F4(EnElfgrp* this, PlayState* play) {
if (Actor_TextboxIsClosing(&this->actor, play)) {
player->actor.freezeTimer = 100;
- player->stateFlags1 |= 0x20000000;
+ player->stateFlags1 |= PLAYER_STATE1_20000000;
this->unk_144 = func_80A39FBC(play);
this->actionFunc = func_80A3A610;
this->unk_14A &= ~8;
@@ -510,7 +513,7 @@ void func_80A3A77C(EnElfgrp* this, PlayState* play) {
Player* player = GET_PLAYER(play);
player->actor.freezeTimer = 100;
- player->stateFlags1 |= 0x20000000;
+ player->stateFlags1 |= PLAYER_STATE1_20000000;
if (Actor_TextboxIsClosing(&this->actor, play)) {
this->unk_144 = func_80A39FBC(play);
this->actionFunc = func_80A3A610;
@@ -522,7 +525,7 @@ void func_80A3A7FC(EnElfgrp* this, PlayState* play) {
s32 temp_s0;
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- gSaveContext.save.weekEventReg[9] |= this->unk_146;
+ gSaveContext.save.saveInfo.weekEventReg[9] |= this->unk_146;
this->actionFunc = func_80A3A6F4;
temp_s0 = func_80A39BD0(play, this->unk_147);
func_80A39DC8(this, play, temp_s0, 1);
@@ -542,7 +545,7 @@ void func_80A3A8F8(EnElfgrp* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- gSaveContext.save.weekEventReg[9] |= this->unk_146;
+ gSaveContext.save.saveInfo.weekEventReg[9] |= this->unk_146;
this->actionFunc = func_80A3A6F4;
return;
}
@@ -558,10 +561,10 @@ void func_80A3A8F8(EnElfgrp* this, PlayState* play) {
if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) {
this->actor.flags &= ~ACTOR_FLAG_10000;
player->actor.freezeTimer = 100;
- player->stateFlags1 |= 0x20000000;
+ player->stateFlags1 |= PLAYER_STATE1_20000000;
Message_StartTextbox(play, this->actor.textId, &this->actor);
this->actionFunc = func_80A3A77C;
- gSaveContext.save.weekEventReg[9] |= this->unk_146;
+ gSaveContext.save.saveInfo.weekEventReg[9] |= this->unk_146;
} else {
this->actor.flags |= ACTOR_FLAG_10000;
func_800B8614(&this->actor, play, 100.0f);
@@ -577,7 +580,7 @@ void EnElfgrp_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
if (this->unk_14A & 8) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FAIRY_GROUP_FRY - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_GROUP_FRY - SFX_FLAG);
}
if (this->unk_144 != 0) {
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 8536b806e..975b08c2c 100644
--- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h
+++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h
@@ -28,6 +28,4 @@ typedef struct EnElfgrp {
/* 0x14C */ EnElfgrpActionFunc actionFunc;
} EnElfgrp; // size = 0x150
-extern const ActorInit En_Elfgrp_InitVars;
-
#endif // Z_EN_ELFGRP_H
diff --git a/src/overlays/actors/ovl_En_Elforg/overlay.cfg b/src/overlays/actors/ovl_En_Elforg/overlay.cfg
deleted file mode 100644
index 124b13ce0..000000000
--- a/src/overlays/actors/ovl_En_Elforg/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Elforg
-z_en_elforg.c
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 12d804fba..871665cc6 100644
--- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c
+++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c
@@ -22,7 +22,7 @@ void EnElforg_FreeFloating(EnElforg* this, PlayState* play);
void EnElforg_SetupTrappedByEnemy(EnElforg* this, PlayState* play);
void EnElforg_HiddenByCollider(EnElforg* this, PlayState* play);
-const ActorInit En_Elforg_InitVars = {
+ActorInit En_Elforg_InitVars = {
ACTOR_EN_ELFORG,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -55,7 +55,7 @@ static ColliderCylinderInit sCylinderInit = {
};
void EnElforg_InitializeParams(EnElforg* this) {
- this->actor.speedXZ = 1.0f;
+ this->actor.speed = 1.0f;
this->targetSpeedXZ = 1.0f;
this->actor.velocity.y = 0.0f;
this->actor.world.rot.y = randPlusMinusPoint5Scaled(0x10000);
@@ -80,22 +80,22 @@ void EnElforg_Init(Actor* thisx, PlayState* play) {
switch (STRAY_FAIRY_TYPE(thisx)) {
case STRAY_FAIRY_TYPE_CLOCK_TOWN:
- if (gSaveContext.save.weekEventReg[8] & 0x80) {
- Actor_MarkForDeath(thisx);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_80)) {
+ Actor_Kill(thisx);
return;
}
break;
case STRAY_FAIRY_TYPE_COLLECTIBLE:
if (Flags_GetCollectible(play, STRAY_FAIRY_FLAG(thisx))) {
- Actor_MarkForDeath(thisx);
+ Actor_Kill(thisx);
return;
}
break;
default:
if (Flags_GetSwitch(play, STRAY_FAIRY_FLAG(thisx))) {
- Actor_MarkForDeath(thisx);
+ Actor_Kill(thisx);
return;
}
break;
@@ -189,22 +189,22 @@ void EnElforg_SpawnSparkles(EnElforg* this, PlayState* play, s32 life) {
void EnElforg_ApproachTargetYPosition(EnElforg* this, Vec3f* targetPos) {
f32 yDifference = targetPos->y - this->actor.world.pos.y;
- if (fabsf(yDifference) < this->actor.speedXZ) {
+ if (fabsf(yDifference) < this->actor.speed) {
this->actor.world.pos.y = targetPos->y;
} else if (yDifference > 0.0f) {
- this->actor.world.pos.y += this->actor.speedXZ;
+ this->actor.world.pos.y += this->actor.speed;
} else {
- this->actor.world.pos.y -= this->actor.speedXZ;
+ this->actor.world.pos.y -= this->actor.speed;
}
}
void EnElforg_ApproachTargetSpeedXZ(EnElforg* this) {
- if (this->actor.speedXZ > this->targetSpeedXZ) {
- this->actor.speedXZ *= 0.9f;
- } else if (this->actor.speedXZ < (this->targetSpeedXZ - 0.1f)) {
- this->actor.speedXZ += 0.1f;
+ if (this->actor.speed > this->targetSpeedXZ) {
+ this->actor.speed *= 0.9f;
+ } else if (this->actor.speed < (this->targetSpeedXZ - 0.1f)) {
+ this->actor.speed += 0.1f;
} else {
- this->actor.speedXZ = this->targetSpeedXZ;
+ this->actor.speed = this->targetSpeedXZ;
}
}
@@ -220,7 +220,7 @@ void EnElforg_MoveToTargetFairyFountain(EnElforg* this, Vec3f* homePos) {
EnElforg_ApproachTargetYPosition(this, homePos);
xDifference = this->actor.world.pos.x - homePos->x;
zDifference = this->actor.world.pos.z - homePos->z;
- targetAngle = Math_FAtan2F(-zDifference, -xDifference);
+ targetAngle = Math_Atan2S_XY(-zDifference, -xDifference);
xzDistance = sqrtf(SQ(xDifference) + SQ(zDifference));
if ((this->targetDistanceFromHome + 10.0f) < xzDistance) {
@@ -247,7 +247,7 @@ void EnElforg_MoveToTarget(EnElforg* this, Vec3f* targetPos) {
this->actor.shape.yOffset += 100.0f * Math_SinS(this->timer << 9);
EnElforg_ApproachTargetYPosition(this, targetPos);
- targetAngle = Math_FAtan2F(-(this->actor.world.pos.z - targetPos->z), -(this->actor.world.pos.x - targetPos->x));
+ targetAngle = Math_Atan2S_XY(-(this->actor.world.pos.z - targetPos->z), -(this->actor.world.pos.x - targetPos->x));
if (this->targetSpeedXZ > 2.0f) {
Math_SmoothStepToS(&this->actor.world.rot.y, targetAngle, 2, 0x400, 0x100);
@@ -292,8 +292,8 @@ void EnElforg_TurnInFairy(EnElforg* this, PlayState* play) {
// flying towards the fountain's center.
SkelAnime_Update(&this->skelAnime);
this->actor.shape.yOffset *= 0.9f;
- this->actor.speedXZ = 5.0f;
- EnElforg_ApproachTargetYPosition(this, &player->bodyPartsPos[0]);
+ this->actor.speed = 5.0f;
+ EnElforg_ApproachTargetYPosition(this, &player->bodyPartsPos[PLAYER_BODYPART_WAIST]);
xzDistToPlayer = this->actor.xzDistToPlayer;
if (xzDistToPlayer < 0.0f) {
@@ -374,7 +374,7 @@ void EnElforg_FreeFloatingFairyFountain(EnElforg* this, PlayState* play) {
Actor_SetScale(&this->actor, this->actor.scale.x * 0.9f);
if (this->actor.scale.x < 0.001f) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
}
@@ -393,14 +393,14 @@ void EnElforg_CirclePlayer(EnElforg* this, PlayState* play) {
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.y = player->bodyPartsPos[0].y;
+ this->actor.world.pos.y = player->bodyPartsPos[PLAYER_BODYPART_WAIST].y;
EnElforg_SpawnSparkles(this, play, 16);
}
void EnElforg_FairyCollected(EnElforg* this, PlayState* play) {
EnElforg_CirclePlayer(this, play);
if (this->timer > 80) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -412,7 +412,7 @@ void EnElforg_SetupFairyCollected(EnElforg* this, PlayState* play) {
Player* player = GET_PLAYER(play);
this->actor.world.pos.x = playerActor->world.pos.x;
- this->actor.world.pos.y = player->bodyPartsPos[0].y;
+ this->actor.world.pos.y = player->bodyPartsPos[PLAYER_BODYPART_WAIST].y;
this->actor.world.pos.z = playerActor->world.pos.z;
this->actionFunc = EnElforg_FairyCollected;
this->timer = 0;
@@ -425,21 +425,22 @@ void EnElforg_ClockTownFairyCollected(EnElforg* this, PlayState* play) {
EnElforg_CirclePlayer(this, play);
player->actor.freezeTimer = 100;
- player->stateFlags1 |= 0x20000000;
+ player->stateFlags1 |= PLAYER_STATE1_20000000;
if (Actor_TextboxIsClosing(&this->actor, play)) {
player->actor.freezeTimer = 0;
- player->stateFlags1 &= ~0x20000000;
- Actor_MarkForDeath(&this->actor);
- gSaveContext.save.weekEventReg[8] |= 0x80;
- ActorCutscene_Stop(0x7C);
- } else {
- func_800B9010(&this->actor, NA_SE_PL_CHIBI_FAIRY_HEAL - SFX_FLAG);
- if (ActorCutscene_GetCurrentIndex() != 0x7C) {
- if (ActorCutscene_GetCanPlayNext(0x7C)) {
- ActorCutscene_Start(0x7C, &this->actor);
- } else {
- ActorCutscene_SetIntentToPlay(0x7C);
- }
+ player->stateFlags1 &= ~PLAYER_STATE1_20000000;
+ Actor_Kill(&this->actor);
+ SET_WEEKEVENTREG(WEEKEVENTREG_08_80);
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ return;
+ }
+
+ func_800B9010(&this->actor, NA_SE_PL_CHIBI_FAIRY_HEAL - SFX_FLAG);
+ if (CutsceneManager_GetCurrentCsId() != CS_ID_GLOBAL_TALK) {
+ if (CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) {
+ CutsceneManager_Start(CS_ID_GLOBAL_TALK, &this->actor);
+ } else {
+ CutsceneManager_Queue(CS_ID_GLOBAL_TALK);
}
}
}
@@ -451,7 +452,7 @@ void EnElforg_FreeFloating(EnElforg* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (Player_GetMask(play) == PLAYER_MASK_GREAT_FAIRY) {
- pos = player->bodyPartsPos[0];
+ pos = player->bodyPartsPos[PLAYER_BODYPART_WAIST];
this->targetSpeedXZ = 5.0f;
EnElforg_MoveToTarget(this, &pos);
} else {
@@ -480,25 +481,26 @@ void EnElforg_FreeFloating(EnElforg* this, PlayState* play) {
if (STRAY_FAIRY_TYPE(&this->actor) == STRAY_FAIRY_TYPE_CLOCK_TOWN) {
player->actor.freezeTimer = 100;
- player->stateFlags1 |= 0x20000000;
+ player->stateFlags1 |= PLAYER_STATE1_20000000;
// Bring me back to North Clock Town!
Message_StartTextbox(play, 0x579, NULL);
this->actionFunc = EnElforg_ClockTownFairyCollected;
- ActorCutscene_SetIntentToPlay(0x7C);
+ CutsceneManager_Queue(CS_ID_GLOBAL_TALK);
return;
}
if (Map_IsInDungeonOrBossArea(play)) {
- gSaveContext.save.inventory.strayFairies[gSaveContext.dungeonIndex]++;
+ gSaveContext.save.saveInfo.inventory.strayFairies[gSaveContext.dungeonIndex]++;
// You found a Stray Fairy!
Message_StartTextbox(play, 0x11, NULL);
- if (gSaveContext.save.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] >= 15) {
+ if (gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] >= 15) {
Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900);
}
}
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, 7);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4);
func_80ACCBB8(this, play);
if (Player_GetMask(play) == PLAYER_MASK_GREAT_FAIRY) {
if (!(this->strayFairyFlags & STRAY_FAIRY_FLAG_GREAT_FAIRYS_MASK_EQUIPPED)) {
@@ -538,7 +540,7 @@ void EnElforg_TrappedByEnemy(EnElforg* this, PlayState* play) {
EnElforg_InitializeParams(this);
this->actionFunc = EnElforg_FreeFloating;
this->actor.draw = EnElforg_Draw;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHIBI_FAIRY_SAVED);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHIBI_FAIRY_SAVED);
} else {
// The enemy is still alive, so have the Stray Fairy
// track the enemy in case it's moving around.
@@ -572,7 +574,7 @@ void EnElforg_HiddenByCollider(EnElforg* this, PlayState* play) {
this->actor.draw = EnElforg_Draw;
this->actor.world.pos.y += 40.0f;
this->actor.home.pos.y += 40.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHIBI_FAIRY_SAVED);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHIBI_FAIRY_SAVED);
} else {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
}
diff --git a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.h b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.h
index 5de48e955..798982b09 100644
--- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.h
+++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.h
@@ -55,6 +55,4 @@ typedef struct EnElforg {
/* 0x22C */ EnElforgActionFunc actionFunc;
} EnElforg; // size = 0x230
-extern const ActorInit En_Elforg_InitVars;
-
#endif // Z_EN_ELFORG_H
diff --git a/src/overlays/actors/ovl_En_Encount1/overlay.cfg b/src/overlays/actors/ovl_En_Encount1/overlay.cfg
deleted file mode 100644
index 132566c38..000000000
--- a/src/overlays/actors/ovl_En_Encount1/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Encount1
-z_en_encount1.c
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 0305af8ef..a39a03567 100644
--- a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c
+++ b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c
@@ -6,7 +6,7 @@
#include "z_en_encount1.h"
-#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_100000 | ACTOR_FLAG_8000000)
+#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_100000 | ACTOR_FLAG_CANT_LOCK_ON)
#define THIS ((EnEncount1*)thisx)
@@ -15,7 +15,7 @@ void EnEncount1_Update(Actor* thisx, PlayState* play);
void func_808E0954(EnEncount1* this, PlayState* play);
-const ActorInit En_Encount1_InitVars = {
+ActorInit En_Encount1_InitVars = {
ACTOR_EN_ENCOUNT1,
ACTORCAT_PROP,
FLAGS,
@@ -40,7 +40,7 @@ void EnEncount1_Init(Actor* thisx, PlayState* play) {
EnEncount1* this = THIS;
if (this->actor.params <= 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -128,7 +128,7 @@ void func_808E0954(EnEncount1* this, PlayState* play) {
case EN_ENCOUNT1_SKULLFISH_2:
if ((this->path != NULL) && (!SubS_CopyPointFromPath(this->path, 0, &spawnPos))) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
break;
}
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 8906d523e..52e0fb30c 100644
--- a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h
+++ b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h
@@ -34,6 +34,4 @@ typedef struct EnEncount1 {
/* 0x160 */ f32 unk_160;
} EnEncount1; // size = 0x164
-extern const ActorInit En_Encount1_InitVars;
-
#endif // Z_EN_ENCOUNT1_H
diff --git a/src/overlays/actors/ovl_En_Encount2/overlay.cfg b/src/overlays/actors/ovl_En_Encount2/overlay.cfg
deleted file mode 100644
index 31c83ff6f..000000000
--- a/src/overlays/actors/ovl_En_Encount2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Encount2
-z_en_encount2.c
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 506f14790..7450e3427 100644
--- a/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c
+++ b/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c
@@ -25,7 +25,7 @@ void EnEncount2_InitEffects(EnEncount2* this, Vec3f* pos, s16 fadeDelay);
void EnEncount2_UpdateEffects(EnEncount2* this, PlayState* play);
void EnEncount2_DrawEffects(EnEncount2* this, PlayState* play);
-const ActorInit En_Encount2_InitVars = {
+ActorInit En_Encount2_InitVars = {
ACTOR_EN_ENCOUNT2,
ACTORCAT_PROP,
FLAGS,
@@ -113,7 +113,7 @@ void EnEncount2_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.targetMode = 6;
this->dyna.actor.colChkInfo.health = 1;
- this->scale = 0.1;
+ this->scale = 0.1f;
this->switchFlag = ENCOUNT2_GET_SWITCH_FLAG(&this->dyna.actor);
if (this->switchFlag == 0x7F) {
@@ -121,7 +121,7 @@ void EnEncount2_Init(Actor* thisx, PlayState* play) {
}
if ((this->switchFlag >= 0) && (Flags_GetSwitch(play, this->switchFlag))) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
@@ -171,7 +171,7 @@ void EnEncount2_Popped(EnEncount2* this, PlayState* play) {
EnEncount2_InitEffects(this, &curPos, 10);
}
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_MUJURA_BALLOON_BROKEN);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_MUJURA_BALLOON_BROKEN);
this->deathTimer = 30;
this->actionFunc = EnEncount2_Die;
}
@@ -181,7 +181,7 @@ void EnEncount2_Die(EnEncount2* this, PlayState* play) {
if (this->switchFlag >= 0) {
Flags_SetSwitch(play, this->switchFlag);
}
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
}
@@ -284,7 +284,7 @@ void EnEncount2_DrawEffects(EnEncount2* this, PlayState* play) {
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255);
gDPSetEnvColor(POLY_XLU_DISP++, 250, 180, 255, sPtr->alpha);
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
- Matrix_RotateZF(DEGF_TO_RADF(play->state.frames * 20.0f), MTXMODE_APPLY);
+ Matrix_RotateZF(DEG_TO_RAD(play->state.frames * 20.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++, gSunSparkleModelDL);
}
diff --git a/src/overlays/actors/ovl_En_Encount2/z_en_encount2.h b/src/overlays/actors/ovl_En_Encount2/z_en_encount2.h
index 9927653e2..0a9cb1394 100644
--- a/src/overlays/actors/ovl_En_Encount2/z_en_encount2.h
+++ b/src/overlays/actors/ovl_En_Encount2/z_en_encount2.h
@@ -35,6 +35,4 @@ typedef struct EnEncount2 {
#define ENCOUNT2_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F)
-extern const ActorInit En_Encount2_InitVars;
-
#endif // Z_EN_ENCOUNT2_H
diff --git a/src/overlays/actors/ovl_En_Encount3/overlay.cfg b/src/overlays/actors/ovl_En_Encount3/overlay.cfg
deleted file mode 100644
index 552775655..000000000
--- a/src/overlays/actors/ovl_En_Encount3/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Encount3
-z_en_encount3.c
diff --git a/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c b/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c
index ead07b294..b2d172cfc 100644
--- a/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c
+++ b/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c
@@ -6,7 +6,7 @@
#include "z_en_encount3.h"
-#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_8000000)
+#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_CANT_LOCK_ON)
#define THIS ((EnEncount3*)thisx)
@@ -20,7 +20,7 @@ void func_809AD194(EnEncount3* this, PlayState* play);
void func_809AD1EC(EnEncount3* this, PlayState* play);
#if 0
-const ActorInit En_Encount3_InitVars = {
+ActorInit En_Encount3_InitVars = {
ACTOR_EN_ENCOUNT3,
ACTORCAT_ENEMY,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Encount3/z_en_encount3.h b/src/overlays/actors/ovl_En_Encount3/z_en_encount3.h
index 2b0bb59d8..9ebc87303 100644
--- a/src/overlays/actors/ovl_En_Encount3/z_en_encount3.h
+++ b/src/overlays/actors/ovl_En_Encount3/z_en_encount3.h
@@ -13,6 +13,4 @@ typedef struct EnEncount3 {
/* 0x148 */ char unk_148[0x84];
} EnEncount3; // size = 0x1CC
-extern const ActorInit En_Encount3_InitVars;
-
#endif // Z_EN_ENCOUNT3_H
diff --git a/src/overlays/actors/ovl_En_Encount4/overlay.cfg b/src/overlays/actors/ovl_En_Encount4/overlay.cfg
deleted file mode 100644
index 124d2e4b4..000000000
--- a/src/overlays/actors/ovl_En_Encount4/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Encount4
-z_en_encount4.c
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 a244d6d0a..8d9a18cf1 100644
--- a/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c
+++ b/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c
@@ -6,7 +6,7 @@
#include "z_en_encount4.h"
-#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_8000000)
+#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_CANT_LOCK_ON)
#define THIS ((EnEncount4*)thisx)
@@ -20,8 +20,7 @@ void func_809C42A8(EnEncount4* this, PlayState* play);
void func_809C4598(EnEncount4* this, PlayState* play);
void func_809C464C(EnEncount4* this, PlayState* play);
-#if 0
-const ActorInit En_Encount4_InitVars = {
+ActorInit En_Encount4_InitVars = {
ACTOR_EN_ENCOUNT4,
ACTORCAT_PROP,
FLAGS,
@@ -33,20 +32,180 @@ const ActorInit En_Encount4_InitVars = {
(ActorFunc)NULL,
};
-#endif
+s16 D_809C46D0[] = {
+ 0x4000, 0xC000, 0x4000, 0, 0xC000,
+};
+f32 D_809C46DC[] = {
+ 200.0f, 200.0f, 100.0f, 0.0f, 100.0f,
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount4/EnEncount4_Init.s")
+void EnEncount4_Init(Actor* thisx, PlayState* play) {
+ s32 pad;
+ EnEncount4* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount4/EnEncount4_Destroy.s")
+ this->unk_148 = ENENCOUNT4_GET_F000(thisx);
+ this->switchFlag = ENENCOUNT4_GET_FLAG(thisx);
+ if (this->switchFlag == 0x7F) {
+ this->switchFlag = -1;
+ }
+ if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) {
+ Actor_Kill(&this->actor);
+ return;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount4/func_809C3FD8.s")
+ this->actor.flags &= ~ACTOR_FLAG_1;
+ this->actionFunc = func_809C3FD8;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount4/func_809C4078.s")
+void EnEncount4_Destroy(Actor* thisx, PlayState* play) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount4/func_809C42A8.s")
+void func_809C3FD8(EnEncount4* this, PlayState* play) {
+ Actor* actor;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount4/func_809C4598.s")
+ this->unk_14E = 0;
+ if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) {
+ this->timer = 100;
+ this->actionFunc = func_809C464C;
+ } else {
+ actor = play->actorCtx.actorLists[ACTORCAT_BOSS].first;
+ while (actor != NULL) {
+ if (actor->id != ACTOR_EN_BSB) {
+ actor = actor->next;
+ } else {
+ this->captainKeeta = (EnBsb*)actor;
+ this->actionFunc = func_809C4078;
+ break;
+ }
+ }
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount4/func_809C464C.s")
+void func_809C4078(EnEncount4* this, PlayState* play) {
+ s16 rotY;
+ Vec3f pos;
+ s32 fireWallParams;
+ s32 i;
+ EnBsb* captainKeeta = this->captainKeeta;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Encount4/EnEncount4_Update.s")
+ if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) {
+ this->timer = 100;
+ this->actionFunc = func_809C464C;
+ } else if (BREG(1) == 0) {
+ if ((this->captainKeeta->actor.id != ACTOR_EN_BSB) || (captainKeeta->actor.update == NULL)) {
+ Actor_Kill(&this->actor);
+ return;
+ }
+
+ if ((this->unk_148 != 0) || (this->actor.xzDistToPlayer < 240.0f)) {
+ if ((this->unk_148 == 0) && (captainKeeta->unk2DC != 0)) {
+ Actor_Kill(&this->actor);
+ return;
+ }
+
+ fireWallParams = BGFIREWALL_PARAMS_0;
+ if ((this->unk_148 == 0) || (captainKeeta->unk2DC != 0)) {
+ i = 0;
+ if (this->unk_148 != 0) {
+ fireWallParams = BGFIREWALL_PARAMS_1;
+ i = 2;
+ }
+ while (i < ARRAY_COUNT(D_809C46DC)) {
+ rotY = D_809C46D0[i] + this->actor.world.rot.y;
+ pos.x = Math_SinS(rotY) * D_809C46DC[i] + this->actor.world.pos.x;
+ pos.y = this->actor.world.pos.y;
+ pos.z = Math_CosS(rotY) * D_809C46DC[i] + this->actor.world.pos.z;
+ Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_BG_FIRE_WALL, pos.x, pos.y, pos.z, 0,
+ this->actor.world.rot.y, 0, fireWallParams);
+ i++;
+ }
+ this->actionFunc = func_809C42A8;
+ }
+ }
+ }
+}
+
+void func_809C42A8(EnEncount4* this, PlayState* play) {
+ Player* actor = GET_PLAYER(play);
+ EnBsb* captainKeeta = this->captainKeeta;
+ Vec3f pos;
+ f32 yIntersect;
+ s16 yRot;
+ CollisionPoly* colPoly;
+ s32 bgId;
+
+ if ((this->switchFlag >= 0) && (Flags_GetSwitch(play, this->switchFlag))) {
+ this->timer = 100;
+ this->actionFunc = func_809C464C;
+
+ return;
+ }
+
+ if (this->unk_148 == 1) {
+ if ((this->captainKeeta->actor.id != ACTOR_EN_BSB) || (captainKeeta->actor.update == NULL)) {
+ Actor_Kill(&this->actor);
+ }
+
+ return;
+ } else if (this->unk_14E >= 2) {
+ this->timer = 100;
+ this->actionFunc = func_809C464C;
+
+ return;
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_85_40) || (this->unk_14C >= 2) ||
+ (this->actor.xzDistToPlayer > 240.0f)) {
+ return;
+ }
+
+ pos.x = (Math_SinS(this->actor.world.rot.y) * 30.0f) + this->actor.world.pos.x;
+ pos.y = actor->actor.floorHeight + 120.0f;
+ pos.z = (Math_CosS(this->actor.world.rot.y) * 30.0f) + this->actor.world.pos.z;
+ yIntersect = BgCheck_EntityRaycastFloor5(&play->colCtx, &colPoly, &bgId, &this->actor, &pos);
+ if ((yIntersect <= BGCHECK_Y_MIN) || ((actor->actor.depthInWater != BGCHECK_Y_MIN) &&
+ (yIntersect < (actor->actor.world.pos.y - actor->actor.depthInWater)))) {
+ return;
+ }
+
+ pos.y = yIntersect;
+ yRot = (s32)Rand_ZeroFloat(512.0f) + this->actor.world.rot.y + 0x3800;
+ 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));
+ if (Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_SKB, pos.x, pos.y, pos.z, 0, 0, 0,
+ ENSKB_PARAMS_0) != NULL) {
+ this->unk_14C++;
+ if (this->unk_14C >= 2) {
+ this->actionFunc = func_809C4598;
+ }
+ }
+}
+
+void func_809C4598(EnEncount4* this, PlayState* play) {
+ if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) {
+ this->timer = 100;
+ this->actionFunc = func_809C464C;
+ } else if (this->unk_14E >= 2) {
+ this->timer = 100;
+ if (this->switchFlag >= 0) {
+ Flags_SetSwitch(play, this->switchFlag);
+ }
+ this->actionFunc = func_809C464C;
+ } else if (this->unk_14C == 0) {
+ this->actionFunc = func_809C42A8;
+ }
+}
+
+void func_809C464C(EnEncount4* this, PlayState* play) {
+ if (this->timer == 0) {
+ Actor_Kill(&this->actor);
+ }
+}
+
+void EnEncount4_Update(Actor* thisx, PlayState* play) {
+ EnEncount4* this = THIS;
+
+ DECR(this->timer);
+ this->actionFunc(this, play);
+}
diff --git a/src/overlays/actors/ovl_En_Encount4/z_en_encount4.h b/src/overlays/actors/ovl_En_Encount4/z_en_encount4.h
index 499da9663..a692f796a 100644
--- a/src/overlays/actors/ovl_En_Encount4/z_en_encount4.h
+++ b/src/overlays/actors/ovl_En_Encount4/z_en_encount4.h
@@ -2,21 +2,26 @@
#define Z_EN_ENCOUNT4_H
#include "global.h"
+#include "overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.h"
+#include "overlays/actors/ovl_En_Bsb/z_en_bsb.h"
+#include "overlays/actors/ovl_En_Skb/z_en_skb.h"
struct EnEncount4;
typedef void (*EnEncount4ActionFunc)(struct EnEncount4*, PlayState*);
+#define ENENCOUNT4_GET_FLAG(thisx) ((thisx)->params & 0x7F)
+#define ENENCOUNT4_GET_F000(thisx) (((thisx)->params >> 0xC) & 0xF)
+
typedef struct EnEncount4 {
- /* 0x0000 */ Actor actor;
- /* 0x0144 */ EnEncount4ActionFunc actionFunc;
- /* 0x0148 */ char unk_148[0x4];
- /* 0x014C */ s16 unk_14C;
- /* 0x014E */ s16 unk_14E;
- /* 0x0150 */ s16 unk_150;
- /* 0x0152 */ char unk_152[0x6];
+ /* 0x000 */ Actor actor;
+ /* 0x144 */ EnEncount4ActionFunc actionFunc;
+ /* 0x148 */ s16 unk_148;
+ /* 0x14A */ s16 switchFlag;
+ /* 0x14C */ s16 unk_14C;
+ /* 0x14E */ s16 unk_14E;
+ /* 0x150 */ s16 timer;
+ /* 0x154 */ EnBsb* captainKeeta;
} EnEncount4; // size = 0x158
-extern const ActorInit En_Encount4_InitVars;
-
#endif // Z_EN_ENCOUNT4_H
diff --git a/src/overlays/actors/ovl_En_Ending_Hero/overlay.cfg b/src/overlays/actors/ovl_En_Ending_Hero/overlay.cfg
deleted file mode 100644
index a512a6a47..000000000
--- a/src/overlays/actors/ovl_En_Ending_Hero/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ending_Hero
-z_en_ending_hero.c
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 946c19c99..2996ccc23 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
@@ -19,7 +19,7 @@ void EnEndingHero_Draw(Actor* thisx, PlayState* play);
void func_80C1E748(EnEndingHero* this);
void func_80C1E764(EnEndingHero* this, PlayState* play);
-const ActorInit En_Ending_Hero_InitVars = {
+ActorInit En_Ending_Hero_InitVars = {
ACTOR_EN_ENDING_HERO,
ACTORCAT_NPC,
FLAGS,
@@ -68,16 +68,18 @@ void EnEndingHero_Update(Actor* thisx, PlayState* play) {
}
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
}
-static TexturePtr D_80C1E970[] = {
- object_dt_Tex_007350, object_dt_Tex_009590, object_dt_Tex_009F90, object_dt_Tex_00A790, object_dt_Tex_00AB90,
+static TexturePtr sEyeTextures[] = {
+ gDotourEyeShockTex, gDotourEyeOpenTex, gDotourEyeClosedTex, gDotourEyeLookDownTex, gDotourEyeSquintTex,
};
-static TexturePtr D_80C1E984[] = {
- object_dt_Tex_007750,
- object_dt_Tex_00A390,
- object_dt_Tex_00A490,
+static TexturePtr sEyebrowTextures[] = {
+ gDotourEyebrowHighTex,
+ gDotourEyebrowMidTex,
+ gDotourEyebrowLowTex,
};
void EnEndingHero_Draw(Actor* thisx, PlayState* play) {
@@ -88,13 +90,13 @@ void EnEndingHero_Draw(Actor* thisx, PlayState* play) {
func_8012C28C(play->state.gfxCtx);
func_8012C2DC(play->state.gfxCtx);
- gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C1E970[this->unk242]));
+ gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->unk242]));
if (this->unk242 < 3) {
index = this->unk242;
}
- gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C1E984[index]));
+ gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sEyebrowTextures[index]));
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_Hero/z_en_ending_hero.h b/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.h
index 098f2ffe0..6049e3449 100644
--- a/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.h
+++ b/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.h
@@ -18,6 +18,4 @@ typedef struct EnEndingHero {
/* 0x244 */ u16 unk244;
} EnEndingHero; // size = 0x248
-extern const ActorInit En_Ending_Hero_InitVars;
-
#endif // Z_EN_ENDING_HERO_H
diff --git a/src/overlays/actors/ovl_En_Ending_Hero2/overlay.cfg b/src/overlays/actors/ovl_En_Ending_Hero2/overlay.cfg
deleted file mode 100644
index eeddcc9c7..000000000
--- a/src/overlays/actors/ovl_En_Ending_Hero2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ending_Hero2
-z_en_ending_hero2.c
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 f33c9d682..0cc20358a 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
@@ -19,7 +19,7 @@ void EnEndingHero2_Draw(Actor* thisx, PlayState* play);
void func_80C232E8(EnEndingHero2* this);
void func_80C23304(EnEndingHero2* this, PlayState* play);
-const ActorInit En_Ending_Hero2_InitVars = {
+ActorInit En_Ending_Hero2_InitVars = {
ACTOR_EN_ENDING_HERO2,
ACTORCAT_NPC,
FLAGS,
@@ -61,7 +61,9 @@ void EnEndingHero2_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
}
void EnEndingHero2_Draw(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.h b/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.h
index 80ee813fa..2ad3b4914 100644
--- a/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.h
+++ b/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.h
@@ -16,6 +16,4 @@ typedef struct EnEndingHero2 {
/* 0x27C */ u16 unk27C;
} EnEndingHero2; // size = 0x280
-extern const ActorInit En_Ending_Hero2_InitVars;
-
#endif // Z_EN_ENDING_HERO2_H
diff --git a/src/overlays/actors/ovl_En_Ending_Hero3/overlay.cfg b/src/overlays/actors/ovl_En_Ending_Hero3/overlay.cfg
deleted file mode 100644
index 13ddc6d82..000000000
--- a/src/overlays/actors/ovl_En_Ending_Hero3/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ending_Hero3
-z_en_ending_hero3.c
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 6cd6de0f9..aba7c4488 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
@@ -19,7 +19,7 @@ void EnEndingHero3_Draw(Actor* thisx, PlayState* play);
void func_80C23518(EnEndingHero3* this);
void func_80C23534(EnEndingHero3* this, PlayState* play);
-const ActorInit En_Ending_Hero3_InitVars = {
+ActorInit En_Ending_Hero3_InitVars = {
ACTOR_EN_ENDING_HERO3,
ACTORCAT_NPC,
FLAGS,
@@ -61,7 +61,9 @@ void EnEndingHero3_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
}
void EnEndingHero3_Draw(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.h b/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.h
index 2a30f1d9c..0887df1ab 100644
--- a/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.h
+++ b/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.h
@@ -16,6 +16,4 @@ typedef struct EnEndingHero3 {
/* 0x258 */ u16 unk258;
} EnEndingHero3; // size = 0x25C
-extern const ActorInit En_Ending_Hero3_InitVars;
-
#endif // Z_EN_ENDING_HERO3_H
diff --git a/src/overlays/actors/ovl_En_Ending_Hero4/overlay.cfg b/src/overlays/actors/ovl_En_Ending_Hero4/overlay.cfg
deleted file mode 100644
index 314fdd562..000000000
--- a/src/overlays/actors/ovl_En_Ending_Hero4/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ending_Hero4
-z_en_ending_hero4.c
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 716237321..39e920b9e 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
@@ -19,7 +19,7 @@ void EnEndingHero4_Draw(Actor* thisx, PlayState* play);
void func_80C23748(EnEndingHero4* this);
void func_80C23764(EnEndingHero4* this, PlayState* play);
-const ActorInit En_Ending_Hero4_InitVars = {
+ActorInit En_Ending_Hero4_InitVars = {
ACTOR_EN_ENDING_HERO4,
ACTORCAT_NPC,
FLAGS,
@@ -61,7 +61,9 @@ void EnEndingHero4_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
}
void EnEndingHero4_Draw(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.h b/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.h
index 2f050f2df..4cada4183 100644
--- a/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.h
+++ b/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.h
@@ -16,6 +16,4 @@ typedef struct EnEndingHero4 {
/* 0x258 */ u16 unk258;
} EnEndingHero4; // size = 0x25C
-extern const ActorInit En_Ending_Hero4_InitVars;
-
#endif // Z_EN_ENDING_HERO4_H
diff --git a/src/overlays/actors/ovl_En_Ending_Hero5/overlay.cfg b/src/overlays/actors/ovl_En_Ending_Hero5/overlay.cfg
deleted file mode 100644
index 1b49c5572..000000000
--- a/src/overlays/actors/ovl_En_Ending_Hero5/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ending_Hero5
-z_en_ending_hero5.c
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 4d87fe0ed..ddf866f94 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
@@ -19,7 +19,7 @@ void EnEndingHero5_Draw(Actor* thisx, PlayState* play);
void func_80C23980(EnEndingHero5* this);
void func_80C2399C(EnEndingHero5* this, PlayState* play);
-const ActorInit En_Ending_Hero5_InitVars = {
+ActorInit En_Ending_Hero5_InitVars = {
ACTOR_EN_ENDING_HERO5,
ACTORCAT_NPC,
FLAGS,
@@ -62,7 +62,9 @@ void EnEndingHero5_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
}
Gfx* D_80C23BF0[] = { object_daiku_DL_0070C0, object_daiku_DL_006FB0, object_daiku_DL_006E80, object_daiku_DL_006D70,
diff --git a/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.h b/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.h
index 4b26b03db..9e3dab09e 100644
--- a/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.h
+++ b/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.h
@@ -17,6 +17,4 @@ typedef struct EnEndingHero5 {
/* 0x25C */ s32 unk25C;
} EnEndingHero5; // size = 0x260
-extern const ActorInit En_Ending_Hero5_InitVars;
-
#endif // Z_EN_ENDING_HERO5_H
diff --git a/src/overlays/actors/ovl_En_Ending_Hero6/overlay.cfg b/src/overlays/actors/ovl_En_Ending_Hero6/overlay.cfg
deleted file mode 100644
index d6911ffa0..000000000
--- a/src/overlays/actors/ovl_En_Ending_Hero6/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ending_Hero6
-z_en_ending_hero6.c
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 d6da2f978..5324518de 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
@@ -24,7 +24,7 @@ void EnEndingHero6_InitSkelAnime(EnEndingHero6* this, s32 npcIndex);
void EnEndingHero6_SetupIdle(EnEndingHero6* this);
void EnEndingHero6_Idle(EnEndingHero6* this, PlayState* play);
-const ActorInit En_Ending_Hero6_InitVars = {
+ActorInit En_Ending_Hero6_InitVars = {
ACTOR_EN_ENDING_HERO6,
ACTORCAT_NPC,
FLAGS,
@@ -101,7 +101,9 @@ void EnEndingHero6_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
}
void EnEndingHero6_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
@@ -121,9 +123,9 @@ void EnEndingHero6_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec
}
void EnEndingHero6_Draw(Actor* thisx, PlayState* play) {
- static TexturePtr D_80C24280[] = { object_dt_Tex_007350, object_dt_Tex_009590, object_dt_Tex_009F90,
- object_dt_Tex_00A790, object_dt_Tex_00AB90 };
- static TexturePtr D_80C24294[] = { object_dt_Tex_007750, object_dt_Tex_00A390, object_dt_Tex_00A490 };
+ static TexturePtr sEyeTextures[] = { gDotourEyeShockTex, gDotourEyeOpenTex, gDotourEyeClosedTex,
+ gDotourEyeLookDownTex, gDotourEyeSquintTex };
+ static TexturePtr sEyebrowTextures[] = { gDotourEyebrowHighTex, gDotourEyebrowMidTex, gDotourEyebrowLowTex };
s32 pad;
EnEndingHero6* this = THIS;
s32 index = 0;
@@ -156,13 +158,13 @@ void EnEndingHero6_Draw(Actor* thisx, PlayState* play) {
}
if (this->npcIndex == 0) {
- gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C24280[this->eyeState]));
+ gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeState]));
if (this->eyeState < 3) {
index = this->eyeState;
}
- gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C24294[index]));
+ gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sEyebrowTextures[index]));
}
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
diff --git a/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.h b/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.h
index f30d09a7a..76af1d67f 100644
--- a/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.h
+++ b/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.h
@@ -23,6 +23,4 @@ typedef struct EnEndingHero6 {
/* 0x290 */ s16 isIdle;
} EnEndingHero6; // size = 0x294
-extern const ActorInit En_Ending_Hero6_InitVars;
-
#endif // Z_EN_ENDING_HERO6_H
diff --git a/src/overlays/actors/ovl_En_Estone/overlay.cfg b/src/overlays/actors/ovl_En_Estone/overlay.cfg
deleted file mode 100644
index b847b42fa..000000000
--- a/src/overlays/actors/ovl_En_Estone/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Estone
-z_en_estone.c
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 006166e4b..4081bd8e7 100644
--- a/src/overlays/actors/ovl_En_Estone/z_en_estone.c
+++ b/src/overlays/actors/ovl_En_Estone/z_en_estone.c
@@ -1,10 +1,12 @@
/*
* File: z_en_estone.c
* Overlay: ovl_En_Estone
- * Description: Eyegore Rubble
+ * Description: Rubble from Eyegore's attacks
*/
#include "z_en_estone.h"
+#include "objects/object_eg/object_eg.h"
+#include "objects/gameplay_keep/gameplay_keep.h"
#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20)
@@ -12,14 +14,16 @@
void EnEstone_Init(Actor* thisx, PlayState* play);
void EnEstone_Destroy(Actor* thisx, PlayState* play);
-void EnEstone_Update(Actor* thisx, PlayState* play);
-void EnEstone_Draw(Actor* thisx, PlayState* play);
+void EnEstone_Update(Actor* thisx, PlayState* play2);
+void EnEstone_Draw(Actor* thisx, PlayState* play2);
-void func_80A9A1DC(EnEstone* this, PlayState* play);
-void func_80A9A4B0(EnEstone* this, PlayState* play);
+void EnEstone_Active(EnEstone* this, PlayState* play);
+void EnEstone_Inactive(EnEstone* this, PlayState* play);
+void EnEstone_SpawnEffect(EnEstone* this, Vec3f* pos, Vec3f* velocity, Vec3f* accel, f32 scale, s16 lifetime);
+void EnEstone_UpdateEffects(EnEstone* this, PlayState* play);
+void EnEstone_DrawEffects(EnEstone* this, PlayState* play);
-#if 0
-const ActorInit En_Estone_InitVars = {
+ActorInit En_Estone_InitVars = {
ACTOR_EN_ESTONE,
ACTORCAT_PROP,
FLAGS,
@@ -31,33 +35,252 @@ const ActorInit En_Estone_InitVars = {
(ActorFunc)EnEstone_Draw,
};
-// static ColliderCylinderInit sCylinderInit = {
-static ColliderCylinderInit D_80A9AB70 = {
- { COLTYPE_HARD, AT_ON | AT_TYPE_ENEMY, AC_ON | AC_TYPE_PLAYER, OC1_NONE, OC2_TYPE_2, COLSHAPE_CYLINDER, },
- { ELEMTYPE_UNK0, { 0xF7CFFFFF, 0x00, 0x04 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_ON | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_NONE, },
+static ColliderCylinderInit sCylinderInit = {
+ {
+ COLTYPE_HARD,
+ AT_ON | AT_TYPE_ENEMY,
+ AC_ON | AC_TYPE_PLAYER,
+ OC1_NONE,
+ OC2_TYPE_2,
+ COLSHAPE_CYLINDER,
+ },
+ {
+ ELEMTYPE_UNK0,
+ { 0xF7CFFFFF, 0x00, 0x04 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_ON | TOUCH_SFX_NORMAL,
+ BUMP_ON,
+ OCELEM_NONE,
+ },
{ 30, 30, -10, { 0, 0, 0 } },
};
-#endif
+void EnEstone_Init(Actor* thisx, PlayState* play) {
+ EnEstone* this = THIS;
+ Vec3f accel;
+ Vec3f velocity;
+ f32 scale;
+ s32 i;
+ s32 pad;
-extern ColliderCylinderInit D_80A9AB70;
+ 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;
+ Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
+ this->actor.colChkInfo.mass = MASS_IMMOVABLE;
+ this->actor.world.rot.y += (s16)randPlusMinusPoint5Scaled(0x2710);
+ this->actor.shape.rot.y = this->actor.world.rot.y;
-extern UNK_TYPE D_06010240;
+ if (this->actor.params == ENESTONE_TYPE_LARGE) {
+ this->actor.speed = Rand_ZeroFloat(5.0f) + 2.0f;
+ this->scale = (Rand_ZeroFloat(1.0f) * 0.005f) + 0.005f;
+ this->actor.velocity.y = Rand_ZeroFloat(10.0f) + 15.0f;
+ this->actor.gravity = -2.0f;
+ } else {
+ this->actor.speed = Rand_ZeroFloat(3.0f) + 1.0f;
+ this->scale = (Rand_ZeroFloat(1.0f) * 0.003f) + 0.003f;
+ this->actor.velocity.y = Rand_ZeroFloat(5.0f) + 7.0f;
+ this->actor.gravity = -1.0f;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Estone/EnEstone_Init.s")
+ this->collider.dim.radius = this->scale * 3000.0f;
+ this->collider.dim.height = this->scale * 3000.0f;
+ this->collider.dim.yShift = this->scale * -1300.0f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Estone/EnEstone_Destroy.s")
+ for (i = 0; i < 7; i++) {
+ accel.x = 0.5f * (Rand_ZeroOne() - 0.5f);
+ accel.y = -1.0f;
+ accel.z = 0.5f * (Rand_ZeroOne() - 0.5f);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Estone/func_80A9A1DC.s")
+ velocity.x = 2.0f * (Rand_ZeroOne() - 0.5f);
+ velocity.y = 8.0f + (Rand_ZeroOne() * 10.0f);
+ velocity.z = 2.0f * (Rand_ZeroOne() - 0.5f);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Estone/func_80A9A4B0.s")
+ scale = (Rand_ZeroFloat(1.0f) * 0.001f) + 0.001f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Estone/EnEstone_Update.s")
+ EnEstone_SpawnEffect(this, &this->actor.world.pos, &velocity, &accel, scale, 70);
+ }
+ this->timer = 5;
+ this->inactive = false;
+ Actor_SetScale(&this->actor, 1.0f);
+ this->actionFunc = EnEstone_Active;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Estone/EnEstone_Draw.s")
+void EnEstone_Destroy(Actor* thisx, PlayState* play) {
+ EnEstone* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Estone/func_80A9A774.s")
+ Collider_DestroyCylinder(play, &this->collider);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Estone/func_80A9A870.s")
+void EnEstone_Active(EnEstone* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+ Vec3f accel;
+ Vec3f velocity;
+ s32 i;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Estone/func_80A9A9C0.s")
+ if ((this->actor.floorHeight == -10000.0f) || ((player->actor.world.pos.y - 200.0f) > this->actor.world.pos.y)) {
+ Actor_Kill(&this->actor);
+ return;
+ }
+ if (((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.velocity.y < 0.0f)) ||
+ (this->collider.base.atFlags & AT_BOUNCED)) {
+ this->collider.base.atFlags &= ~AT_BOUNCED;
+ if (this->actor.params == ENESTONE_TYPE_LARGE) {
+ for (i = 0; i < 2; i++) {
+ accel.x = 2.0f * (Rand_ZeroOne() - 0.5f);
+ accel.y = -1.0f;
+ accel.z = 2.0f * (Rand_ZeroOne() - 0.5f);
+ velocity.x = 3.0f * (Rand_ZeroOne() - 0.5f);
+ velocity.y = 5.0f + (Rand_ZeroOne() * 10.0f);
+ velocity.z = 3.0f * (Rand_ZeroOne() - 0.5f);
+ EnEstone_SpawnEffect(this, &this->actor.world.pos, &velocity, &accel,
+ 0.003f + (0.002f * Rand_ZeroFloat(1.0f)), 20);
+ }
+ }
+ Math_Vec3f_Copy(&velocity, &this->actor.world.pos);
+ velocity.y = this->actor.floorHeight;
+ Actor_SpawnFloorDustRing(play, &this->actor, &velocity, 0.0f, 10, 6.0f, 50, 30, true);
+ this->actor.velocity.y = this->actor.gravity = 0.0f;
+ this->actor.speed *= 0.3f;
+ this->actor.shape.shadowScale = 0.0f;
+ this->inactive = true;
+ this->timer = 50;
+ Actor_PlaySfx(&this->actor, NA_SE_EV_WALL_BROKEN);
+ this->actionFunc = EnEstone_Inactive;
+ } else {
+ //! FAKE: https://decomp.me/scratch/YiPVN
+ label:
+ this->actor.shape.shadowScale = 4500.0f * this->scale;
+ Actor_SetScale(&this->actor, this->scale);
+ }
+}
+
+void EnEstone_Inactive(EnEstone* this, PlayState* play) {
+ if (this->timer == 0) {
+ Actor_Kill(&this->actor);
+ }
+}
+
+void EnEstone_Update(Actor* thisx, PlayState* play2) {
+ PlayState* play = play2;
+ EnEstone* this = THIS;
+
+ DECR(this->timer);
+
+ this->actionFunc(this, play);
+
+ this->rot.x -= this->rotVel.x;
+ this->rot.y -= this->rotVel.y;
+ this->rot.z -= this->rotVel.z;
+
+ Actor_MoveWithGravity(&this->actor);
+ if ((this->timer == 0) && !this->inactive) {
+ Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 50.0f, 100.0f,
+ UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10);
+ }
+ if (!this->inactive) {
+ Collider_UpdateCylinder(&this->actor, &this->collider);
+ CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
+ }
+ EnEstone_UpdateEffects(this, play);
+}
+
+void EnEstone_Draw(Actor* thisx, PlayState* play2) {
+ PlayState* play = play2;
+ EnEstone* this = THIS;
+
+ if (this->inactive != true) {
+ Matrix_Push();
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW);
+ Matrix_RotateXFApply(DEG_TO_RAD(this->rot.x));
+ Matrix_RotateYF(DEG_TO_RAD(this->rot.y), MTXMODE_APPLY);
+ Matrix_RotateZF(DEG_TO_RAD(this->rot.z), MTXMODE_APPLY);
+ Matrix_Scale(this->scale, this->scale, this->scale, MTXMODE_APPLY);
+ Matrix_Translate(0.0f, 0.0f, 0.0f, MTXMODE_APPLY);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 255, 255, 255);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gEyegoreStoneDL);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+
+ Matrix_Pop();
+ }
+ EnEstone_DrawEffects(this, play);
+}
+
+void EnEstone_SpawnEffect(EnEstone* this, Vec3f* pos, Vec3f* velocity, Vec3f* accel, f32 scale, s16 lifetime) {
+ EnEstoneEffect* effect = this->effects;
+ s16 i;
+
+ for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) {
+ if (!effect->isActive) {
+ effect->isActive = true;
+ effect->pos = *pos;
+ effect->velocity = *velocity;
+ effect->accel = *accel;
+ effect->scale = scale;
+ effect->timer = lifetime;
+ effect->rot.x = randPlusMinusPoint5Scaled(0x7530);
+ effect->rot.y = randPlusMinusPoint5Scaled(0x7530);
+ effect->rot.z = randPlusMinusPoint5Scaled(0x7530);
+ break;
+ }
+ }
+}
+
+void EnEstone_UpdateEffects(EnEstone* this, PlayState* play) {
+ EnEstoneEffect* effect = this->effects;
+ s32 i;
+
+ for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) {
+ if (effect->isActive) {
+ effect->rot.x += 0x100;
+ effect->rot.z += 0x130;
+
+ effect->pos.x += effect->velocity.x;
+ effect->pos.y += effect->velocity.y;
+ effect->pos.z += effect->velocity.z;
+
+ effect->velocity.y += effect->accel.y;
+ if ((effect->pos.y < this->actor.floorHeight) && (effect->velocity.y < 0.0f)) {
+ effect->timer = 0;
+ Actor_SpawnFloorDustRing(play, &this->actor, &effect->pos, 0.0f, 5, 3.0f, 30, 15, true);
+ }
+ if (effect->timer != 0) {
+ effect->timer--;
+ } else {
+ effect->isActive = false;
+ }
+ }
+ }
+}
+
+void EnEstone_DrawEffects(EnEstone* this, PlayState* play) {
+ EnEstoneEffect* effect = this->effects;
+ GraphicsContext* gfxCtx = play->state.gfxCtx;
+ s16 i;
+
+ OPEN_DISPS(gfxCtx);
+
+ func_8012C28C(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);
+ Matrix_RotateXS(effect->rot.x, MTXMODE_APPLY);
+ Matrix_RotateYS(effect->rot.y, MTXMODE_APPLY);
+ Matrix_RotateZS(effect->rot.z, MTXMODE_APPLY);
+ Matrix_Scale(effect->scale, effect->scale, effect->scale, MTXMODE_APPLY);
+ Matrix_Translate(0.0f, 0.0f, 0.0f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x80, 255, 255, 255, 255);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255);
+ gSPDisplayList(POLY_OPA_DISP++, gameplay_keep_DL_06AB30);
+ }
+ }
+
+ CLOSE_DISPS(gfxCtx);
+}
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 b265bf4de..ceb26c9c6 100644
--- a/src/overlays/actors/ovl_En_Estone/z_en_estone.h
+++ b/src/overlays/actors/ovl_En_Estone/z_en_estone.h
@@ -7,12 +7,33 @@ struct EnEstone;
typedef void (*EnEstoneActionFunc)(struct EnEstone*, PlayState*);
+#define ENESTONE_EFFECT_COUNT 200
+
+typedef enum {
+ /* 0 */ ENESTONE_TYPE_LARGE,
+ /* 1 */ ENESTONE_TYPE_SMALL,
+} EnEstoneType;
+
+typedef struct {
+ /* 0x00 */ u8 isActive;
+ /* 0x04 */ Vec3f pos;
+ /* 0x10 */ Vec3f velocity;
+ /* 0x1C */ Vec3f accel;
+ /* 0x28 */ Vec3s rot;
+ /* 0x30 */ f32 scale;
+ /* 0x34 */ s16 timer;
+} EnEstoneEffect; // size = 0x38
+
typedef struct EnEstone {
/* 0x0000 */ Actor actor;
/* 0x0144 */ EnEstoneActionFunc actionFunc;
- /* 0x0148 */ char unk_148[0x2C2C];
+ /* 0x0148 */ f32 scale;
+ /* 0x014C */ Vec3f rot;
+ /* 0x0158 */ Vec3f rotVel;
+ /* 0x0164 */ s16 timer;
+ /* 0x0166 */ s16 inactive;
+ /* 0x0168 */ ColliderCylinder collider;
+ /* 0x01B4 */ EnEstoneEffect effects[ENESTONE_EFFECT_COUNT];
} EnEstone; // size = 0x2D74
-extern const ActorInit En_Estone_InitVars;
-
#endif // Z_EN_ESTONE_H
diff --git a/src/overlays/actors/ovl_En_Fall/overlay.cfg b/src/overlays/actors/ovl_En_Fall/overlay.cfg
deleted file mode 100644
index 48cfdea22..000000000
--- a/src/overlays/actors/ovl_En_Fall/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Fall
-z_en_fall.c
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 d7d3e446e..a43d39c7c 100644
--- a/src/overlays/actors/ovl_En_Fall/z_en_fall.c
+++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.c
@@ -62,7 +62,7 @@ typedef struct {
EnFallDebrisEffect debrisEffects[EN_FALL_DEBRIS_EFFECT_COUNT];
-const ActorInit En_Fall_InitVars = {
+ActorInit En_Fall_InitVars = {
ACTOR_EN_FALL,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -178,7 +178,7 @@ void EnFall_Init(Actor* thisx, PlayState* play) {
}
if (objectIndex < 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
this->objIndex = objectIndex;
@@ -220,8 +220,8 @@ void EnFall_Setup(EnFall* this, PlayState* play) {
this->actor.draw = EnFall_Moon_Draw;
this->actionFunc = EnFall_StoppedClosedMouthMoon_PerformCutsceneActions;
Actor_SetScale(&this->actor, this->scale * 3.0f);
- if (!(gSaveContext.save.weekEventReg[25] & 2)) {
- Actor_MarkForDeath(&this->actor);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_25_02)) {
+ Actor_Kill(&this->actor);
}
break;
@@ -229,8 +229,8 @@ void EnFall_Setup(EnFall* this, PlayState* play) {
this->actionFunc = EnFall_ClockTowerOrTitleScreenMoon_PerformCutsceneActions;
Actor_SetScale(&this->actor, this->scale * 3.0f);
this->actor.draw = EnFall_Moon_Draw;
- if (gSaveContext.save.weekEventReg[25] & 2) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_02)) {
+ Actor_Kill(&this->actor);
}
break;
@@ -280,12 +280,12 @@ void EnFall_Setup(EnFall* this, PlayState* play) {
this->actionFunc = EnFall_MoonsTear_Fall;
Actor_SetScale(&this->actor, 0.02f);
if (!(play->actorCtx.flags & ACTORCTX_FLAG_1)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
moon = EnFall_MoonsTear_GetTerminaFieldMoon(play);
this->actor.child = moon;
if (moon == NULL) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
break;
@@ -315,43 +315,43 @@ void EnFall_Setup(EnFall* this, PlayState* play) {
void EnFall_CrashingMoon_HandleGiantsCutscene(EnFall* this, PlayState* play) {
static s32 sGiantsCutsceneState = 0;
- if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 1) && (play->csCtx.currentCsIndex == 0)) {
+ if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 1) && (play->csCtx.scriptIndex == 0)) {
switch (sGiantsCutsceneState) {
case 0:
- if (play->csCtx.state != 0) {
+ if (play->csCtx.state != CS_STATE_IDLE) {
sGiantsCutsceneState += 2;
}
break;
case 2:
- if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOWLA) && CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT) &&
+ if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA) && CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT) &&
CHECK_QUEST_ITEM(QUEST_REMAINS_GYORG) && CHECK_QUEST_ITEM(QUEST_REMAINS_TWINMOLD)) {
- if (gSaveContext.save.weekEventReg[93] & 4) {
- if (ActorCutscene_GetCanPlayNext(0xC)) {
- ActorCutscene_Start(0xC, &this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_93_04)) {
+ if (CutsceneManager_IsNext(12)) {
+ CutsceneManager_Start(12, &this->actor);
sGiantsCutsceneState++;
} else {
- ActorCutscene_SetIntentToPlay(0xC);
+ CutsceneManager_Queue(12);
}
- } else if (ActorCutscene_GetCanPlayNext(0xB)) {
- ActorCutscene_Start(0xB, &this->actor);
- gSaveContext.save.weekEventReg[93] |= 4;
+ } else if (CutsceneManager_IsNext(11)) {
+ CutsceneManager_Start(11, &this->actor);
+ SET_WEEKEVENTREG(WEEKEVENTREG_93_04);
sGiantsCutsceneState++;
} else {
- ActorCutscene_SetIntentToPlay(0xB);
+ CutsceneManager_Queue(11);
}
- } else if (play->csCtx.frames > 1600) {
+ } else if (play->csCtx.curFrame > 1600) {
play->nextEntrance = ENTRANCE(CLOCK_TOWER_ROOFTOP, 0);
gSaveContext.nextCutsceneIndex = 0xFFF2;
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_02;
- gSaveContext.nextTransitionType = TRANS_TYPE_02;
+ play->transitionType = TRANS_TYPE_FADE_BLACK;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
sGiantsCutsceneState = 9;
}
break;
case 9:
- play->csCtx.frames--;
+ play->csCtx.curFrame--;
break;
}
}
@@ -359,15 +359,15 @@ void EnFall_CrashingMoon_HandleGiantsCutscene(EnFall* this, PlayState* play) {
void EnFall_CrashingMoon_PerformCutsceneActions(EnFall* this, PlayState* play) {
EnFall_CrashingMoon_HandleGiantsCutscene(this, play);
- if (Cutscene_CheckActorAction(play, 0x85)) {
- if (Cutscene_CheckActorAction(play, 133) &&
- play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 133)]->action == 1) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_133)) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_133) &&
+ play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_133)]->id == 1) {
this->actor.draw = NULL;
} else {
this->actor.draw = EnFall_Moon_Draw;
- if (Cutscene_CheckActorAction(play, 133) &&
- play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 133)]->action == 2) {
- Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, 133));
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_133) &&
+ play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_133)]->id == 2) {
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_133));
}
}
} else {
@@ -376,11 +376,11 @@ void EnFall_CrashingMoon_PerformCutsceneActions(EnFall* this, PlayState* play) {
}
void EnFall_StoppedOpenMouthMoon_PerformCutsceneActions(EnFall* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 133)) {
- switch (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 133)]->action) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_133)) {
+ switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_133)]->id) {
case 3:
if (this->eyeGlowIntensity == 0.0f) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_MOON_EYE_FLASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_MOON_EYE_FLASH);
}
this->eyeGlowIntensity += 1 / 30.0f;
if (this->eyeGlowIntensity > 1.0f) {
@@ -396,10 +396,10 @@ void EnFall_StoppedOpenMouthMoon_PerformCutsceneActions(EnFall* this, PlayState*
}
void EnFall_StoppedClosedMouthMoon_PerformCutsceneActions(EnFall* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 133)) {
- switch (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 133)]->action) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_133)) {
+ switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_133)]->id) {
case 2:
- Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, 133));
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_133));
break;
case 4:
@@ -409,41 +409,41 @@ void EnFall_StoppedClosedMouthMoon_PerformCutsceneActions(EnFall* this, PlayStat
}
if ((play->sceneId == SCENE_OKUJOU) && (gSaveContext.sceneLayer == 2)) {
- switch (play->csCtx.currentCsIndex) {
+ switch (play->csCtx.scriptIndex) {
case 0:
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 1060:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_MOON_SCREAM1);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_MOON_SCREAM1);
break;
case 1089:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_MOON_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_MOON_CRY);
break;
case 1303:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SLIP_MOON);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SLIP_MOON);
break;
}
- if (play->csCtx.frames >= 1145) {
+ if (play->csCtx.curFrame >= 1145) {
func_800B9010(&this->actor, NA_SE_EV_FALL_POWER - SFX_FLAG);
}
break;
case 1:
- switch (play->csCtx.frames) {
+ switch (play->csCtx.curFrame) {
case 561:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_MOON_SCREAM1);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_MOON_SCREAM1);
break;
case 590:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_MOON_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_MOON_CRY);
break;
case 737:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SLIP_MOON);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SLIP_MOON);
break;
}
- if (play->csCtx.frames >= 650) {
+ if (play->csCtx.curFrame >= 650) {
func_800B9010(&this->actor, NA_SE_EV_FALL_POWER - SFX_FLAG);
}
break;
@@ -452,7 +452,7 @@ void EnFall_StoppedClosedMouthMoon_PerformCutsceneActions(EnFall* this, PlayStat
}
void EnFall_ClockTowerOrTitleScreenMoon_PerformCutsceneActions(EnFall* this, PlayState* play) {
- if (play->csCtx.state != 0 && play->sceneId == SCENE_OKUJOU) {
+ if ((play->csCtx.state != CS_STATE_IDLE) && (play->sceneId == SCENE_OKUJOU)) {
func_800B9010(&this->actor, NA_SE_EV_MOON_FALL - SFX_FLAG);
}
}
@@ -463,16 +463,16 @@ void EnFall_ClockTowerOrTitleScreenMoon_PerformCutsceneActions(EnFall* this, Pla
void EnFall_Moon_PerformDefaultActions(EnFall* this, PlayState* play) {
u16 currentDay;
- if (Cutscene_CheckActorAction(play, 133)) {
- if (Cutscene_CheckActorAction(play, 133) &&
- play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 133)]->action == 1) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_133)) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_133) &&
+ play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_133)]->id == 1) {
this->actor.draw = NULL;
} else {
Actor_SetScale(&this->actor, this->scale * 3.6f);
this->actor.draw = EnFall_Moon_Draw;
- if (Cutscene_CheckActorAction(play, 133) &&
- play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 133)]->action == 2) {
- Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, 133));
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_133) &&
+ play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_133)]->id == 2) {
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_133));
}
}
} else {
@@ -499,7 +499,7 @@ void EnFall_MoonsTear_Initialize(EnFall* this) {
}
this->actor.world.rot.y = Math_Vec3f_Yaw(&this->actor.world.pos, &this->actor.home.pos);
this->actor.world.rot.x = Math_Vec3f_Pitch(&this->actor.world.pos, &this->actor.home.pos);
- this->actor.speedXZ = Math_Vec3f_DistXYZ(&this->actor.world.pos, &this->actor.home.pos) / 82.0f;
+ this->actor.speed = Math_Vec3f_DistXYZ(&this->actor.world.pos, &this->actor.home.pos) / 82.0f;
this->actor.shape.rot.x = this->actor.world.rot.x;
this->actor.shape.rot.y = this->actor.world.rot.y;
}
@@ -510,16 +510,17 @@ void EnFall_MoonsTear_DoNothing(EnFall* this, PlayState* play) {
void EnFall_MoonsTear_Fall(EnFall* this, PlayState* play) {
s32 pad;
- if (Cutscene_CheckActorAction(play, 517) &&
- play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 517)]->action == 2 && this->actor.draw == NULL) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_517) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_517)]->id == 2) &&
+ (this->actor.draw == NULL)) {
EnFall_MoonsTear_Initialize(this);
}
if (this->actor.draw != NULL) {
- if (Math_Vec3f_StepTo(&this->actor.world.pos, &this->actor.home.pos, this->actor.speedXZ) <= 0.0f) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_GORON_BOUND_1);
- gSaveContext.save.weekEventReg[74] |= 0x80;
- gSaveContext.save.weekEventReg[74] |= 0x20;
+ if (Math_Vec3f_StepTo(&this->actor.world.pos, &this->actor.home.pos, this->actor.speed) <= 0.0f) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_GORON_BOUND_1);
+ SET_WEEKEVENTREG(WEEKEVENTREG_74_80);
+ SET_WEEKEVENTREG(WEEKEVENTREG_74_20);
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_TEST, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, -2);
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.world.pos.x, this->actor.world.pos.y,
@@ -574,11 +575,11 @@ void EnFall_Fireball_SetPerVertexAlpha(f32 fireballAlpha) {
void EnFall_Fireball_Update(Actor* thisx, PlayState* play) {
EnFall* this = THIS;
- if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 0) && (play->csCtx.currentCsIndex == 2)) {
- play->skyboxCtx.rotY -= 0.05f;
+ if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 0) && (play->csCtx.scriptIndex == 2)) {
+ play->skyboxCtx.rot.y -= 0.05f;
}
- if (Cutscene_CheckActorAction(play, 450)) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_450)) {
this->actor.draw = EnFall_Fireball_Draw;
if (this->flags & FLAG_FIRE_BALL_INTENSIFIES) {
this->fireballIntensity += 0.01f;
@@ -586,9 +587,9 @@ void EnFall_Fireball_Update(Actor* thisx, PlayState* play) {
this->fireballIntensity = 1.0f;
}
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, 450));
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, 450));
- switch (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 450)]->action) {
+ switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, 450)]->id) {
default:
this->actor.draw = NULL;
this->fireballAlpha = 0;
@@ -625,7 +626,7 @@ void EnFall_Fireball_Update(Actor* thisx, PlayState* play) {
this->actor.draw = NULL;
}
- if (Cutscene_CheckActorAction(play, 0x1C2) && this->fireballAlpha > 0) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_450) && (this->fireballAlpha > 0)) {
func_8019F128(NA_SE_EV_MOON_FALL_LAST - SFX_FLAG);
}
Actor_SetScale(&this->actor, this->scale * 1.74f);
@@ -682,9 +683,9 @@ s32 EnFall_RisingDebris_InitializeEffect(EnFall* this) {
void EnFall_RisingDebris_Update(Actor* thisx, PlayState* play) {
EnFall* this = THIS;
- if (Cutscene_CheckActorAction(play, 451)) {
- if (Cutscene_CheckActorAction(play, 451) &&
- play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 451)]->action == 2) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_451)) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_451) &&
+ play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_451)]->id == 2) {
EnFall_RisingDebris_UpdateEffects(this);
EnFall_RisingDebris_InitializeEffect(this);
} else if (this->activeDebrisEffectCount != 0) {
@@ -699,10 +700,10 @@ void EnFall_RisingDebris_Update(Actor* thisx, PlayState* play) {
void EnFall_FireRing_Update(Actor* thisx, PlayState* play) {
EnFall* this = THIS;
- if (Cutscene_CheckActorAction(play, 450) &&
- play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 450)]->action == 5) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_450) &&
+ play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_450)]->id == 5) {
if (!(this->flags & FLAG_FIRE_RING_APPEARS)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_DM_RING_EXPLOSION);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_DM_RING_EXPLOSION);
}
this->flags |= FLAG_FIRE_RING_APPEARS;
}
@@ -784,7 +785,7 @@ void EnFall_LodMoon_Draw(Actor* thisx, PlayState* play) {
gSPDisplayList(POLY_OPA_DISP++, gLodmoonEyesDL);
gSPLoadGeometryMode(POLY_OPA_DISP++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH);
gSPDisplayList(POLY_OPA_DISP++, gLodmoonMoonDL);
- POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP);
+ POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
CLOSE_DISPS(play->state.gfxCtx);
}
@@ -798,7 +799,7 @@ void EnFall_LodMoon_DrawWithoutLerp(Actor* thisx, PlayState* play) {
* to be 9000 units away before drawing it.
*/
void EnFall_LodMoon_DrawWithLerp(Actor* thisx, PlayState* play) {
- f32 distanceToEye = Actor_DistanceToPoint(thisx, &play->view.eye);
+ f32 distanceToEye = Actor_WorldDistXYZToPoint(thisx, &play->view.eye);
f32 scale;
Vec3f translation;
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 21746b683..c9eaaf44f 100644
--- a/src/overlays/actors/ovl_En_Fall/z_en_fall.h
+++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.h
@@ -50,6 +50,4 @@ typedef struct EnFall {
/* 0x160 */ EnFallActionFunc actionFunc;
} EnFall; // size = 0x164
-extern const ActorInit En_Fall_InitVars;
-
#endif // Z_EN_FALL_H
diff --git a/src/overlays/actors/ovl_En_Fall2/overlay.cfg b/src/overlays/actors/ovl_En_Fall2/overlay.cfg
deleted file mode 100644
index 4219364f5..000000000
--- a/src/overlays/actors/ovl_En_Fall2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Fall2
-z_en_fall2.c
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 58ab4e591..28a6cc74c 100644
--- a/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c
+++ b/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c
@@ -21,7 +21,7 @@ void func_80C1B9D4(EnFall2* this, PlayState* play);
void func_80C1B8F0(EnFall2* this);
void func_80C1B9D4(EnFall2* this, PlayState* play);
-const ActorInit En_Fall2_InitVars = {
+ActorInit En_Fall2_InitVars = {
ACTOR_EN_FALL2,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -44,7 +44,7 @@ void EnFall2_Init(Actor* thisx, PlayState* play) {
this->unk2DC = Lib_SegmentedToVirtual(object_fall2_Matanimheader_008840);
Actor_SetScale(&this->actor, 0.02f);
this->actionFunc = func_80C1B9D4;
- this->csActionIndex = 0x231;
+ this->cueType = CS_CMD_ACTOR_CUE_561;
this->alphaLevel = 0.0f;
}
@@ -92,13 +92,13 @@ void EnFall2_DoNothing(EnFall2* this, PlayState* play) {
void func_80C1B8B4(EnFall2* this) {
this->actor.draw = EnFall2_Draw;
- if (this->csActorAction == 1) {
+ if (this->cueId == 1) {
Actor_SetScale(&this->actor, 0.02f);
}
}
void func_80C1B8F0(EnFall2* this) {
- switch (this->csActorAction) {
+ switch (this->cueId) {
case 1:
if (this->alphaLevel < 1.0f) {
this->alphaLevel += 1.0f / 30.0f;
@@ -125,12 +125,10 @@ void func_80C1B8F0(EnFall2* this) {
void func_80C1B9D4(EnFall2* this, PlayState* play) {
func_80183DE0(&this->skeletonInfo);
- if (Cutscene_CheckActorAction(play, this->csActionIndex)) {
- Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->csActionIndex));
- if (this->csActorAction !=
- play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->csActionIndex)]->action) {
- this->csActorAction =
- play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->csActionIndex)]->action;
+ if (Cutscene_IsCueInChannel(play, this->cueType)) {
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType));
+ if (this->cueId != play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id) {
+ this->cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id;
func_80C1B8B4(this);
}
func_80C1B8F0(this);
@@ -158,7 +156,7 @@ void EnFall2_Draw(Actor* thisx, PlayState* play) {
func_8012C2DC(play->state.gfxCtx);
AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(object_fall2_Matanimheader_008840));
- mtx = GRAPH_ALLOC(play->state.gfxCtx, ALIGN16(this->skeletonInfo.unk_18->unk_1 * sizeof(Mtx)));
+ mtx = GRAPH_ALLOC(play->state.gfxCtx, this->skeletonInfo.unk_18->unk_1 * sizeof(Mtx));
if (mtx != NULL) {
func_8012C2DC(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_En_Fall2/z_en_fall2.h b/src/overlays/actors/ovl_En_Fall2/z_en_fall2.h
index 5ac33b27d..3555595f3 100644
--- a/src/overlays/actors/ovl_En_Fall2/z_en_fall2.h
+++ b/src/overlays/actors/ovl_En_Fall2/z_en_fall2.h
@@ -15,11 +15,9 @@ typedef struct EnFall2 {
/* 0x228 */ Vec3s unk228[30];
/* 0x2DC */ AnimatedMaterial* unk2DC;
/* 0x2E0 */ f32 alphaLevel;
- /* 0x2E4 */ s16 csActorAction;
- /* 0x2E6 */ u16 csActionIndex;
+ /* 0x2E4 */ s16 cueId;
+ /* 0x2E6 */ u16 cueType;
/* 0x2E8 */ EnFall2ActionFunc actionFunc;
} EnFall2; // size = 0x2EC
-extern const ActorInit En_Fall2_InitVars;
-
#endif // Z_EN_FALL2_H
diff --git a/src/overlays/actors/ovl_En_Famos/overlay.cfg b/src/overlays/actors/ovl_En_Famos/overlay.cfg
deleted file mode 100644
index 375bd1638..000000000
--- a/src/overlays/actors/ovl_En_Famos/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Famos
-z_en_famos.c
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 b6b93aded..3d68d34d7 100644
--- a/src/overlays/actors/ovl_En_Famos/z_en_famos.c
+++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.c
@@ -51,7 +51,7 @@ void EnFamos_SetupDeathFade(EnFamos* this);
void EnFamos_DeathFade(EnFamos* this, PlayState* play);
void EnFamos_DrawDebris(EnFamos* this, PlayState* play);
-const ActorInit En_Famos_InitVars = {
+ActorInit En_Famos_InitVars = {
ACTOR_EN_FAMOS,
ACTORCAT_ENEMY,
FLAGS,
@@ -273,7 +273,7 @@ void EnFamos_SetupDeathDebris(EnFamos* this) {
s32 EnFamos_IsPlayerSeen(EnFamos* this, PlayState* play) {
if ((Player_GetMask(play) != PLAYER_MASK_STONE) &&
- (Actor_XZDistanceToPoint(&GET_PLAYER(play)->actor, &this->calmPos) < this->aggroDistance) &&
+ (Actor_WorldDistXZToPoint(&GET_PLAYER(play)->actor, &this->calmPos) < this->aggroDistance) &&
Actor_IsFacingPlayer(&this->actor, 0x5000)) {
return true;
} else {
@@ -308,12 +308,12 @@ void EnFamos_UpdateFlipStatus(EnFamos* this) {
if (this->hasFinishedRotating == true) {
if (this->animatedMaterialIndex != FAMOS_ANIMATED_MAT_NORMAL) {
this->animatedMaterialIndex = FAMOS_ANIMATED_MAT_NORMAL;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FAMOS_REVERSE2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FAMOS_REVERSE2);
} else {
this->animatedMaterialIndex = FAMOS_ANIMATED_MAT_FLIPPED;
this->flippedTimer = 100;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FAMOS_REVERSE1);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EYEGOLE_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FAMOS_REVERSE1);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_DAMAGE);
}
this->hasFinishedRotating = false;
}
@@ -322,7 +322,7 @@ void EnFamos_UpdateFlipStatus(EnFamos* this) {
this->flippedTimer--;
if (this->flippedTimer == 0) {
if (this->animatedMaterialIndex != FAMOS_ANIMATED_MAT_NORMAL) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FAMOS_REVERSE2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FAMOS_REVERSE2);
}
this->animatedMaterialIndex = FAMOS_ANIMATED_MAT_NORMAL;
@@ -347,7 +347,7 @@ void EnFamos_UpdateFlipStatus(EnFamos* this) {
*/
void EnFamos_SetupStillIdle(EnFamos* this) {
this->actionFunc = EnFamos_StillIdle;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
void EnFamos_StillIdle(EnFamos* this, PlayState* play) {
@@ -374,9 +374,9 @@ void EnFamos_SetupPathingIdle(EnFamos* this) {
}
Math_Vec3s_ToVec3f(&this->targetDest, &this->pathPoints[this->currentPathNode]);
- this->targetYaw = Actor_YawToPoint(&this->actor, &this->targetDest);
+ this->targetYaw = Actor_WorldYawTowardPoint(&this->actor, &this->targetDest);
this->actionFunc = EnFamos_PathingIdle;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
void EnFamos_PathingIdle(EnFamos* this, PlayState* play) {
@@ -396,10 +396,10 @@ void EnFamos_PathingIdle(EnFamos* this, PlayState* play) {
* Famos lost player; Turning to face back toward home.
*/
void EnFamos_SetupTurnHome(EnFamos* this) {
- this->targetYaw = Actor_YawToPoint(&this->actor, &this->calmPos);
+ this->targetYaw = Actor_WorldYawTowardPoint(&this->actor, &this->calmPos);
Math_Vec3f_Copy(&this->targetDest, &this->calmPos);
this->actionFunc = EnFamos_TurnHome;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
void EnFamos_TurnHome(EnFamos* this, PlayState* play) {
@@ -416,14 +416,14 @@ void EnFamos_TurnHome(EnFamos* this, PlayState* play) {
*/
void EnFamos_SetupReturnHome(EnFamos* this) {
this->actor.world.rot.y = this->actor.shape.rot.y;
- this->actor.world.rot.x = -Actor_PitchToPoint(&this->actor, &this->targetDest);
+ this->actor.world.rot.x = -Actor_WorldPitchTowardPoint(&this->actor, &this->targetDest);
this->actionFunc = EnFamos_ReturnHome;
}
void EnFamos_ReturnHome(EnFamos* this, PlayState* play) {
- f32 distanceToHome = Actor_XZDistanceToPoint(&this->actor, &this->targetDest);
+ f32 distanceToHome = Actor_WorldDistXZToPoint(&this->actor, &this->targetDest);
- this->actor.shape.rot.y = Actor_YawToPoint(&this->actor, &this->targetDest);
+ this->actor.shape.rot.y = Actor_WorldYawTowardPoint(&this->actor, &this->targetDest);
this->actor.world.rot.y = this->actor.shape.rot.y;
EnFamos_UpdateBobbingHeight(this);
if (this->isCalm) {
@@ -439,9 +439,9 @@ void EnFamos_ReturnHome(EnFamos* this, PlayState* play) {
EnFamos_SetupStillIdle(this);
}
} else if (distanceToHome < 40.0f) {
- Math_StepToF(&this->actor.speedXZ, 0.5f, 0.3f);
+ Math_StepToF(&this->actor.speed, 0.5f, 0.3f);
} else {
- Math_StepToF(&this->actor.speedXZ, 3.0f, 0.3f);
+ Math_StepToF(&this->actor.speed, 3.0f, 0.3f);
}
}
@@ -451,7 +451,7 @@ void EnFamos_ReturnHome(EnFamos* this, PlayState* play) {
void EnFamos_SetupAlert(EnFamos* this) {
this->actor.world.rot.y = this->actor.shape.rot.y;
this->stateTimer = 8;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->isCalm == true) {
this->isCalm = false;
@@ -497,16 +497,16 @@ void EnFamos_Chase(EnFamos* this, PlayState* play) {
abovePlayerPos.x = player->actor.world.pos.x;
abovePlayerPos.y = player->actor.world.pos.y + 100.0f;
abovePlayerPos.z = player->actor.world.pos.z;
- this->actor.world.rot.x = -Actor_PitchToPoint(&this->actor, &abovePlayerPos);
- Math_StepToF(&this->actor.speedXZ, 6.0f, 0.5f);
+ this->actor.world.rot.x = -Actor_WorldPitchTowardPoint(&this->actor, &abovePlayerPos);
+ Math_StepToF(&this->actor.speed, 6.0f, 0.5f);
- surfaceType = func_800C9B18(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId);
+ 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)) {
EnFamos_SetupAttackAim(this);
} else if ((Player_GetMask(play) == PLAYER_MASK_STONE) ||
- (this->aggroDistance < Actor_XZDistanceToPoint(&GET_PLAYER(play)->actor, &this->calmPos)) ||
+ (this->aggroDistance < Actor_WorldDistXZToPoint(&GET_PLAYER(play)->actor, &this->calmPos)) ||
!Actor_IsFacingPlayer(&this->actor, 0x6000)) {
EnFamos_SetupScanForPlayer(this);
}
@@ -514,8 +514,8 @@ void EnFamos_Chase(EnFamos* this, PlayState* play) {
void EnFamos_SetupAttackAim(EnFamos* this) {
Animation_PlayOnce(&this->skelAnime, &gFamosShakeAnim);
- this->actor.speedXZ = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_AMOS_VOICE);
+ this->actor.speed = 0.0f;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_AMOS_VOICE);
this->actionFunc = EnFamos_AttackAim;
}
@@ -537,14 +537,14 @@ void EnFamos_Attack(EnFamos* this, PlayState* play) {
s32 hitFloor;
u32 surfaceType;
- Math_StepToF(&this->actor.speedXZ, 20.0f, 2.0f);
+ Math_StepToF(&this->actor.speed, 20.0f, 2.0f);
this->stateTimer--;
if (this->stateTimer == 0) {
this->emblemCollider.base.acFlags &= ~AC_ON;
}
- surfaceType = func_800C9B18(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId);
- hitFloor = this->actor.bgCheckFlags & 1;
+ 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)) {
this->collider1.base.atFlags &= ~AT_ON;
this->collider2.base.atFlags |= AT_ON;
@@ -585,8 +585,8 @@ void EnFamos_SetupFinishAttack(EnFamos* this) {
SkelAnime_Update(&this->skelAnime);
this->emblemCollider.base.acFlags |= AC_ON;
this->stateTimer = 3;
- this->actor.speedXZ = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_EXPLOSION);
+ this->actor.speed = 0.0f;
+ Actor_PlaySfx(&this->actor, NA_SE_EV_EXPLOSION);
this->actionFunc = EnFamos_FinishAttack;
}
@@ -604,12 +604,12 @@ void EnFamos_FinishAttack(EnFamos* this, PlayState* play) {
void EnFamos_SetupAttackRebound(EnFamos* this) {
this->actor.world.rot.x = 0x4000;
this->actionFunc = EnFamos_AttackRebound;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
void EnFamos_AttackRebound(EnFamos* this, PlayState* play) {
- Math_StepToF(&this->actor.speedXZ, 5.0f, 0.3f);
- if (this->actor.speedXZ > 1.0f) {
+ Math_StepToF(&this->actor.speed, 5.0f, 0.3f);
+ if (this->actor.speed > 1.0f) {
if (ABS_ALT(this->flipRot) > 0x4000) {
func_800B9010(&this->actor, NA_SE_EN_FAMOS_FLOAT_REVERSE - SFX_FLAG);
} else {
@@ -617,8 +617,8 @@ void EnFamos_AttackRebound(EnFamos* this, PlayState* play) {
}
}
- if ((this->baseHeight < this->actor.world.pos.y) || (this->actor.bgCheckFlags & 0x10)) { // touching ceiling
- this->actor.speedXZ = 0.0f;
+ if ((this->baseHeight < this->actor.world.pos.y) || (this->actor.bgCheckFlags & BGCHECKFLAG_CEILING)) {
+ this->actor.speed = 0.0f;
EnFamos_SetupChase(this);
}
}
@@ -629,7 +629,7 @@ void EnFamos_AttackRebound(EnFamos* this, PlayState* play) {
void EnFamos_SetupScanForPlayer(EnFamos* this) {
this->stateTimer = 60;
this->actionFunc = EnFamos_ScanForPlayer;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
void EnFamos_ScanForPlayer(EnFamos* this, PlayState* play) {
@@ -651,11 +651,11 @@ void EnFamos_ScanForPlayer(EnFamos* this, PlayState* play) {
void EnFamos_SetupDeathSlam(EnFamos* this) {
this->emblemCollider.base.acFlags &= ~AC_ON;
this->stateTimer = 20;
- this->actor.speedXZ = 0.0f;
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 20);
+ this->actor.speed = 0.0f;
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 20);
this->flippedTimer = -1;
this->actor.world.pos.y = this->actor.floorHeight - 60.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EYEGOLE_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_DEAD);
this->actionFunc = EnFamos_DeathSlam;
}
@@ -673,7 +673,7 @@ void EnFamos_DeathSlam(EnFamos* this, PlayState* play) {
void EnFamos_SetupDeathExplosion(EnFamos* this) {
this->actor.world.rot.x = 0x4000;
- Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, false, 4);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 4);
this->stateTimer = 25;
Math_Vec3f_Copy(&this->targetDest, &this->actor.world.pos);
this->actor.flags |= ACTOR_FLAG_10;
@@ -681,9 +681,9 @@ void EnFamos_SetupDeathExplosion(EnFamos* this) {
}
void EnFamos_DeathExplosion(EnFamos* this, PlayState* play) {
- Math_StepToF(&this->actor.speedXZ, 3.0f, 0.3f);
+ Math_StepToF(&this->actor.speed, 3.0f, 0.3f);
if (this->actor.colorFilterTimer == 0) {
- Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, false, 4);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 4);
}
this->actor.world.pos.x = randPlusMinusPoint5Scaled(5.0f) + this->targetDest.x;
@@ -691,7 +691,7 @@ void EnFamos_DeathExplosion(EnFamos* this, PlayState* play) {
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, ENBOM_0);
+ this->actor.world.pos.y + 40.0f, this->actor.world.pos.z, 0, 0, 0, BOMB_TYPE_BODY);
if (explosion != NULL) {
explosion->timer = 0; // instant explosion
}
@@ -712,7 +712,7 @@ void EnFamos_SetupDeathFade(EnFamos* this) {
this->actor.flags &= ~ACTOR_FLAG_1;
this->actor.shape.shadowDraw = NULL;
this->actionFunc = EnFamos_DeathFade;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
void EnFamos_DeathFade(EnFamos* this, PlayState* play) {
@@ -723,7 +723,7 @@ void EnFamos_DeathFade(EnFamos* this, PlayState* play) {
if (enBom != NULL) {
enBom->parent = NULL;
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -766,9 +766,11 @@ void EnFamos_Update(Actor* thisx, PlayState* play) {
}
if (this->flippedTimer >= 0) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 30.0f, 80.0f, 0x1F);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 30.0f, 80.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 |
+ UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10);
if ((this->actionFunc == EnFamos_Attack) && (this->animatedMaterialIndex != FAMOS_ANIMATED_MAT_NORMAL) &&
- (this->actor.bgCheckFlags & 1)) { // touch floor
+ (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
this->actor.world.pos.y -= 60.0f;
}
}
diff --git a/src/overlays/actors/ovl_En_Fg/overlay.cfg b/src/overlays/actors/ovl_En_Fg/overlay.cfg
deleted file mode 100644
index 712186262..000000000
--- a/src/overlays/actors/ovl_En_Fg/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Fg
-z_en_fg.c
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 cacc2e728..868c43533 100644
--- a/src/overlays/actors/ovl_En_Fg/z_en_fg.c
+++ b/src/overlays/actors/ovl_En_Fg/z_en_fg.c
@@ -24,7 +24,7 @@ void EnFg_AddDust(EnFgEffectDust* dustEffect, Vec3f* worldPos);
void EnFg_UpdateDust(EnFgEffectDust* dustEffect);
void EnFg_DrawDust(PlayState* play, EnFgEffectDust* dustEffect);
-const ActorInit En_Fg_InitVars = {
+ActorInit En_Fg_InitVars = {
ACTOR_EN_FG,
ACTORCAT_NPC,
FLAGS,
@@ -178,7 +178,7 @@ void EnFg_Idle(EnFg* this, PlayState* play) {
switch (EnFg_GetDamageEffect(this)) {
case FG_DMGEFFECT_DEKUSTICK:
this->actor.flags &= ~ACTOR_FLAG_1;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FROG_CRY_1);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_CRY_1);
this->skelAnime.playSpeed = 0.0f;
this->actor.shape.shadowDraw = NULL;
this->actor.scale.x *= 1.5f;
@@ -204,7 +204,7 @@ void EnFg_Idle(EnFg* this, PlayState* play) {
break;
case FG_DMGEFFECT_EXPLOSION:
this->actor.flags &= ~ACTOR_FLAG_1;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FROG_CRY_0);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_CRY_0);
if (1) {}
this->actor.params = FG_BLACK;
this->skelAnime.playSpeed = 0.0f;
@@ -212,7 +212,7 @@ void EnFg_Idle(EnFg* this, PlayState* play) {
this->actor.world.rot.y = Math_Vec3f_Yaw(&ac->world.pos, &this->actor.world.pos);
this->actor.shape.rot = this->actor.world.rot;
this->actor.velocity.y = 10.0f;
- this->actor.speedXZ = 3.0f;
+ this->actor.speed = 3.0f;
this->actor.gravity = -0.8f;
this->bounceCounter = 1;
this->timer = 0;
@@ -220,7 +220,7 @@ void EnFg_Idle(EnFg* this, PlayState* play) {
break;
default:
if (DECR(this->timer) == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FROG_JUMP);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_JUMP);
EnFg_ChangeAnim(&this->skelAnime, 3);
this->actor.velocity.y = 10.0f;
this->timer = Rand_S16Offset(30, 30);
@@ -255,7 +255,7 @@ void EnFg_Jump(EnFg* this, PlayState* play) {
break;
case FG_DMGEFFECT_EXPLOSION:
this->actor.flags &= ~ACTOR_FLAG_1;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FROG_CRY_0);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_CRY_0);
EnFg_ChangeAnim(&this->skelAnime, 0);
this->actor.params = FG_BLACK;
this->skelAnime.playSpeed = 0.0f;
@@ -263,7 +263,7 @@ void EnFg_Jump(EnFg* this, PlayState* play) {
this->actor.world.rot.y = Math_Vec3f_Yaw(&ac->world.pos, &this->actor.world.pos);
this->actor.shape.rot = this->actor.world.rot;
this->actor.velocity.y = 10.0f;
- this->actor.speedXZ = 3.0f;
+ this->actor.speed = 3.0f;
this->actor.gravity = -0.8f;
this->bounceCounter = 1;
this->timer = 0;
@@ -275,7 +275,7 @@ void EnFg_Jump(EnFg* this, PlayState* play) {
this->skelAnime.playSpeed = 0.0f;
}
- if ((this->actor.velocity.y <= 0.0f) && (this->actor.bgCheckFlags & 1)) {
+ if ((this->actor.velocity.y <= 0.0f) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
EnFg_ChangeAnim(&this->skelAnime, 0);
this->actionFunc = EnFg_Idle;
this->actor.velocity.y = 0.0f;
@@ -289,7 +289,7 @@ void EnFg_DoNothing(EnFg* this, PlayState* play) {
}
void EnFg_Knockback(EnFg* this, PlayState* play) {
- if ((this->actor.velocity.y <= 0.0f) && (this->actor.bgCheckFlags & 1)) {
+ if ((this->actor.velocity.y <= 0.0f) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
this->bounceCounter++;
if (this->bounceCounter < 4) {
this->actor.shape.rot.x += 0x1000;
@@ -298,7 +298,7 @@ void EnFg_Knockback(EnFg* this, PlayState* play) {
this->actionFunc = EnFg_DoNothing;
}
} else {
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
this->actor.world.rot.y = this->actor.wallYaw;
this->actor.shape.rot = this->actor.world.rot;
}
@@ -338,14 +338,15 @@ void EnFg_Update(Actor* thisx, PlayState* play) {
s32 flagSet;
flag = this->actor.flags;
- flagSet = ((flag & 0x2000) == 0x2000);
+ flagSet = CHECK_FLAG_ALL(flag, ACTOR_FLAG_2000);
if (1) {}
if (!flagSet) {
- flagSet = ((flag & 0x8000) == 0x8000);
+ flagSet = CHECK_FLAG_ALL(flag, ACTOR_FLAG_8000);
if (1) {}
if (!flagSet) {
this->actionFunc(this, play);
- Actor_UpdateBgCheckInfo(play, &this->actor, BASE_REG(16, 0), BASE_REG(16, 1), 0.0f, 0x5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, sREG(0), sREG(1), 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
}
}
diff --git a/src/overlays/actors/ovl_En_Fire_Rock/overlay.cfg b/src/overlays/actors/ovl_En_Fire_Rock/overlay.cfg
deleted file mode 100644
index e1d38e60a..000000000
--- a/src/overlays/actors/ovl_En_Fire_Rock/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Fire_Rock
-z_en_fire_rock.c
diff --git a/src/overlays/actors/ovl_En_Fire_Rock/z_en_fire_rock.c b/src/overlays/actors/ovl_En_Fire_Rock/z_en_fire_rock.c
index da1c94559..90801ef44 100644
--- a/src/overlays/actors/ovl_En_Fire_Rock/z_en_fire_rock.c
+++ b/src/overlays/actors/ovl_En_Fire_Rock/z_en_fire_rock.c
@@ -15,7 +15,7 @@ void EnFireRock_Destroy(Actor* thisx, PlayState* play);
void EnFireRock_Update(Actor* thisx, PlayState* play);
void EnFireRock_Draw(Actor* thisx, PlayState* play);
-const ActorInit En_Fire_Rock_InitVars = {
+ActorInit En_Fire_Rock_InitVars = {
ACTOR_EN_FIRE_ROCK,
ACTORCAT_ENEMY,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Fire_Rock/z_en_fire_rock.h b/src/overlays/actors/ovl_En_Fire_Rock/z_en_fire_rock.h
index 84c437ac1..e2b32aaf9 100644
--- a/src/overlays/actors/ovl_En_Fire_Rock/z_en_fire_rock.h
+++ b/src/overlays/actors/ovl_En_Fire_Rock/z_en_fire_rock.h
@@ -10,6 +10,4 @@ typedef struct EnFireRock {
/* 0x144 */ char unk_144[0x94];
} EnFireRock; // size = 0x1D8
-extern const ActorInit En_Fire_Rock_InitVars;
-
#endif // Z_EN_FIRE_ROCK_H
diff --git a/src/overlays/actors/ovl_En_Firefly/overlay.cfg b/src/overlays/actors/ovl_En_Firefly/overlay.cfg
deleted file mode 100644
index 8b88be0b8..000000000
--- a/src/overlays/actors/ovl_En_Firefly/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Firefly
-z_en_firefly.c
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 ba43ec2a4..bc4e3d743 100644
--- a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c
+++ b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c
@@ -44,7 +44,7 @@ typedef enum {
/* 2 */ KEESE_AURA_ICE
} KeeseAuraType;
-const ActorInit En_Firefly_InitVars = {
+ActorInit En_Firefly_InitVars = {
ACTOR_EN_FIREFLY,
ACTORCAT_ENEMY,
FLAGS,
@@ -140,7 +140,7 @@ void EnFirefly_Init(Actor* thisx, PlayState* play) {
CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
if (this->actor.params & KEESE_INVISIBLE) {
- this->actor.flags |= ACTOR_FLAG_80;
+ this->actor.flags |= ACTOR_FLAG_REACT_TO_LENS;
this->actor.params = KEESE_GET_MAIN_TYPE(thisx);
this->isInvisible = true;
}
@@ -208,19 +208,20 @@ s32 EnFirefly_ReturnToPerch(EnFirefly* this, PlayState* play) {
return false;
}
- if (Actor_XZDistanceToPoint(&player->actor, &this->actor.home.pos) > 300.0f) {
- distFromHome = Actor_DistanceToPoint(&this->actor, &this->actor.home.pos);
+ if (Actor_WorldDistXZToPoint(&player->actor, &this->actor.home.pos) > 300.0f) {
+ distFromHome = Actor_WorldDistXYZToPoint(&this->actor, &this->actor.home.pos);
if (distFromHome < 5.0f) {
EnFirefly_SetupPerch(this);
} else {
if (distFromHome * 0.05f < 1.0f) {
- this->actor.speedXZ *= distFromHome * 0.05f;
+ this->actor.speed *= distFromHome * 0.05f;
}
- Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_YawToPoint(&this->actor, &this->actor.home.pos), 0x300);
+ Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos),
+ 0x300);
Math_ScaledStepToS(&this->actor.shape.rot.x,
- Actor_PitchToPoint(&this->actor, &this->actor.home.pos) + 0x1554, 0x100);
+ Actor_WorldPitchTowardPoint(&this->actor, &this->actor.home.pos) + 0x1554, 0x100);
}
return true;
@@ -242,7 +243,7 @@ s32 EnFirefly_SeekTorch(EnFirefly* this, PlayState* play) {
while (findTorch != NULL) {
if ((findTorch->actor.id == ACTOR_OBJ_SYOKUDAI) && (findTorch->snuffTimer != OBJ_SYOKUDAI_SNUFF_OUT)) {
- currentDist = Actor_DistanceBetweenActors(&this->actor, &findTorch->actor);
+ currentDist = Actor_WorldDistXYZToActor(&this->actor, &findTorch->actor);
if (currentDist < currentMinDist) {
currentMinDist = currentDist;
closestTorch = findTorch;
@@ -256,12 +257,13 @@ s32 EnFirefly_SeekTorch(EnFirefly* this, PlayState* play) {
flamePos.y = closestTorch->actor.world.pos.y + 52.0f + 30.0f;
flamePos.z = closestTorch->actor.world.pos.z;
- if (Actor_DistanceToPoint(&this->actor, &flamePos) < 15.0f) {
+ if (Actor_WorldDistXYZToPoint(&this->actor, &flamePos) < 15.0f) {
EnFirefly_Ignite(this);
} else {
- Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_YawBetweenActors(&this->actor, &closestTorch->actor),
+ Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_WorldYawTowardActor(&this->actor, &closestTorch->actor),
0x300);
- Math_ScaledStepToS(&this->actor.shape.rot.x, Actor_PitchToPoint(&this->actor, &flamePos) + 0x1554, 0x100);
+ Math_ScaledStepToS(&this->actor.shape.rot.x, Actor_WorldPitchTowardPoint(&this->actor, &flamePos) + 0x1554,
+ 0x100);
}
return true;
@@ -272,8 +274,8 @@ s32 EnFirefly_SeekTorch(EnFirefly* this, PlayState* play) {
void EnFirefly_SetupFlyIdle(EnFirefly* this) {
this->timer = Rand_S16Offset(70, 100);
- this->actor.speedXZ = (Rand_ZeroOne() * 1.5f) + 1.5f;
- Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_YawToPoint(&this->actor, &this->actor.home.pos), 0x300);
+ this->actor.speed = (Rand_ZeroOne() * 1.5f) + 1.5f;
+ Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos), 0x300);
this->pitchTarget = ((this->maxAltitude < this->actor.world.pos.y) ? 0xC00 : -0xC00) + 0x1554;
this->skelAnime.playSpeed = 1.0f;
this->actionFunc = EnFirefly_FlyIdle;
@@ -289,15 +291,15 @@ void EnFirefly_FlyIdle(EnFirefly* this, PlayState* play) {
}
isSkelAnimeUpdated = Animation_OnFrame(&this->skelAnime, 0.0f);
- this->actor.speedXZ = (Rand_ZeroOne() * 1.5f) + 1.5f;
+ this->actor.speed = (Rand_ZeroOne() * 1.5f) + 1.5f;
if (!EnFirefly_ReturnToPerch(this, play) && !EnFirefly_SeekTorch(this, play)) {
if (isSkelAnimeUpdated) {
rand = Rand_ZeroOne();
if (rand < 0.5f) {
- Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_YawToPoint(&this->actor, &this->actor.home.pos),
- 0x300);
+ 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);
}
@@ -315,9 +317,10 @@ void EnFirefly_FlyIdle(EnFirefly* this, PlayState* play) {
this->pitchTarget = 0x2154;
}
} else {
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->pitchTarget = 0x954;
- } else if ((this->actor.bgCheckFlags & 0x10) || (this->maxAltitude < this->actor.world.pos.y)) {
+ } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_CEILING) ||
+ (this->maxAltitude < this->actor.world.pos.y)) {
this->pitchTarget = 0x2154;
}
}
@@ -325,7 +328,7 @@ void EnFirefly_FlyIdle(EnFirefly* this, PlayState* play) {
Math_ScaledStepToS(&this->actor.shape.rot.x, this->pitchTarget, 0x100);
}
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.wallYaw, 2, 0xC00, 0x300);
}
@@ -338,13 +341,13 @@ void EnFirefly_SetupFall(EnFirefly* this, PlayState* play) {
this->timer = 40;
this->actor.velocity.y = 0.0f;
Animation_Change(&this->skelAnime, &object_firefly_Anim_00017C, 0.0f, 6.0f, 6.0f, ANIMMODE_ONCE, 0.0f);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FFLY_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FFLY_DEAD);
this->actor.flags |= ACTOR_FLAG_10;
if (this->isInvisible) {
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0x2000, 40);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_XLU, 40);
} else {
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 40);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 40);
}
if (this->actor.colChkInfo.damageEffect == KEESE_DMGEFF_ICE) {
@@ -370,7 +373,7 @@ void EnFirefly_SetupFall(EnFirefly* this, PlayState* play) {
}
if (this->actor.flags & ACTOR_FLAG_8000) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
this->actionFunc = EnFirefly_Fall;
@@ -379,7 +382,7 @@ void EnFirefly_SetupFall(EnFirefly* this, PlayState* play) {
// Fall to the ground after being hit
void EnFirefly_Fall(EnFirefly* this, PlayState* play) {
this->actor.colorFilterTimer = 40;
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.5f);
+ Math_StepToF(&this->actor.speed, 0.0f, 0.5f);
if (!(this->actor.flags & ACTOR_FLAG_8000)) {
if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
@@ -387,7 +390,7 @@ void EnFirefly_Fall(EnFirefly* this, PlayState* play) {
this->actor.shape.rot.y -= 0x300;
}
- if ((this->actor.bgCheckFlags & 1) || (this->actor.floorHeight == BGCHECK_Y_MIN)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->actor.floorHeight == BGCHECK_Y_MIN)) {
EnFirefly_SpawnIceEffects(this, play);
EnFirefly_SetupDie(this);
}
@@ -396,7 +399,7 @@ void EnFirefly_Fall(EnFirefly* this, PlayState* play) {
void EnFirefly_SetupDie(EnFirefly* this) {
this->timer = 15;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = EnFirefly_Die;
}
@@ -411,7 +414,7 @@ void EnFirefly_Die(EnFirefly* this, PlayState* play) {
if (this->timer == 0) {
Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0xA0);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -432,9 +435,9 @@ void EnFirefly_DiveAttack(EnFirefly* this, PlayState* play) {
this->timer--;
}
- Math_StepToF(&this->actor.speedXZ, 4.0f, 0.5f);
+ Math_StepToF(&this->actor.speed, 4.0f, 0.5f);
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.wallYaw, 2, 0xC00, 0x300);
Math_ScaledStepToS(&this->actor.shape.rot.x, this->pitchTarget, 0x100);
} else if (Actor_IsFacingPlayer(&this->actor, 0x2800)) {
@@ -447,19 +450,19 @@ void EnFirefly_DiveAttack(EnFirefly* this, PlayState* play) {
preyPos.x = player->actor.world.pos.x;
preyPos.y = player->actor.world.pos.y + 20.0f;
preyPos.z = player->actor.world.pos.z;
- Math_SmoothStepToS(&this->actor.shape.rot.x, Actor_PitchToPoint(&this->actor, &preyPos) + 0x1554, 2, 0x400,
- 0x100);
+ Math_SmoothStepToS(&this->actor.shape.rot.x, Actor_WorldPitchTowardPoint(&this->actor, &preyPos) + 0x1554, 2,
+ 0x400, 0x100);
} else {
this->skelAnime.playSpeed = 1.5f;
if (this->actor.xzDistToPlayer > 80.0f) {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 2, 0xC00, 0x300);
}
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->pitchTarget = 0x954;
}
- if ((this->actor.bgCheckFlags & 0x10) || (this->maxAltitude < this->actor.world.pos.y)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_CEILING) || (this->maxAltitude < this->actor.world.pos.y)) {
this->pitchTarget = 0x2154;
} else {
this->pitchTarget = 0x954;
@@ -478,7 +481,7 @@ void EnFirefly_SetupRebound(EnFirefly* this) {
this->actor.world.rot.x = 0x7000;
this->timer = 18;
this->skelAnime.playSpeed = 1.0f;
- this->actor.speedXZ = 2.5f;
+ this->actor.speed = 2.5f;
this->actionFunc = EnFirefly_Rebound;
}
@@ -487,7 +490,7 @@ void EnFirefly_Rebound(EnFirefly* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
Math_ScaledStepToS(&this->actor.shape.rot.x, 0, 0x100);
Math_StepToF(&this->actor.velocity.y, 0.0f, 0.4f);
- if (Math_StepToF(&this->actor.speedXZ, 0.0f, 0.15f)) {
+ if (Math_StepToF(&this->actor.speed, 0.0f, 0.15f)) {
if (this->timer != 0) {
this->timer--;
}
@@ -519,20 +522,21 @@ void EnFirefly_FlyAway(EnFirefly* this, PlayState* play) {
return;
}
- Math_StepToF(&this->actor.speedXZ, 3.0f, 0.3f);
+ Math_StepToF(&this->actor.speed, 3.0f, 0.3f);
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->pitchTarget = 0x954;
- } else if ((this->actor.bgCheckFlags & 0x10) || (this->maxAltitude < this->actor.world.pos.y)) {
+ } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_CEILING) || (this->maxAltitude < this->actor.world.pos.y)) {
this->pitchTarget = 0x2154;
} else {
this->pitchTarget = 0x954;
}
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.wallYaw, 2, 0xC00, 0x300);
} else {
- Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_YawToPoint(&this->actor, &this->actor.home.pos), 0x300);
+ Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos),
+ 0x300);
}
Math_ScaledStepToS(&this->actor.shape.rot.x, this->pitchTarget, 0x100);
@@ -540,24 +544,24 @@ void EnFirefly_FlyAway(EnFirefly* this, PlayState* play) {
void EnFirefly_SetupStunned(EnFirefly* this) {
if (this->isInvisible) {
- Actor_SetColorFilter(&this->actor, 0, 255, 0x2000, this->timer);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_XLU, this->timer);
} else {
- Actor_SetColorFilter(&this->actor, 0, 255, 0, this->timer);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, this->timer);
}
if (this->actionFunc != EnFirefly_Stunned) {
this->actor.velocity.y = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
this->auraType = KEESE_AURA_NONE;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
this->actionFunc = EnFirefly_Stunned;
}
void EnFirefly_Stunned(EnFirefly* this, PlayState* play) {
Math_ScaledStepToS(&this->actor.shape.rot.x, 0x1554, 0x100);
- if ((this->actor.bgCheckFlags & 1) || (this->actor.floorHeight == BGCHECK_Y_MIN)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->actor.floorHeight == BGCHECK_Y_MIN)) {
if (this->timer != 0) {
this->timer--;
}
@@ -583,7 +587,7 @@ void EnFirefly_Stunned(EnFirefly* this, PlayState* play) {
void EnFirefly_SetupPerch(EnFirefly* this) {
this->timer = 1;
this->actionFunc = EnFirefly_Perch;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
// When perching, sit on collision and flap at random intervals
@@ -608,7 +612,7 @@ void EnFirefly_SetupDisturbDiveAttack(EnFirefly* this) {
this->actor.shape.rot.x = 0x1554;
this->actor.shape.rot.y = this->actor.yawTowardsPlayer;
this->timer = 50;
- this->actor.speedXZ = 3.0f;
+ this->actor.speed = 3.0f;
this->actionFunc = EnFirefly_DisturbDiveAttack;
}
@@ -627,7 +631,8 @@ void EnFirefly_DisturbDiveAttack(EnFirefly* this, PlayState* play) {
preyPos.x = player->actor.world.pos.x;
preyPos.y = player->actor.world.pos.y + 20.0f;
preyPos.z = player->actor.world.pos.z;
- Math_ScaledStepToS(&this->actor.shape.rot.x, Actor_PitchToPoint(&this->actor, &preyPos) + 0x1554, 0x100);
+ Math_ScaledStepToS(&this->actor.shape.rot.x, Actor_WorldPitchTowardPoint(&this->actor, &preyPos) + 0x1554,
+ 0x100);
Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0x300);
}
@@ -672,7 +677,7 @@ void EnFirefly_Update(Actor* thisx, PlayState* play2) {
if (this->collider.base.atFlags & AT_HIT) {
this->collider.base.atFlags &= ~AT_HIT;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FFLY_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FFLY_ATTACK);
if (this->currentType != KEESE_NORMAL) {
EnFirefly_Extinguish(this);
@@ -698,7 +703,8 @@ void EnFirefly_Update(Actor* thisx, PlayState* play2) {
}
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 15.0f, 7);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 15.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4);
this->collider.dim.worldSphere.center.x = this->actor.world.pos.x;
this->collider.dim.worldSphere.center.y = (s32)this->actor.world.pos.y + 10;
this->collider.dim.worldSphere.center.z = this->actor.world.pos.z;
@@ -712,7 +718,7 @@ void EnFirefly_Update(Actor* thisx, PlayState* play2) {
this->actor.world.rot.y = this->actor.shape.rot.y;
if (Animation_OnFrame(&this->skelAnime, 5.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FFLY_FLY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FFLY_FLY);
}
}
diff --git a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.h b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.h
index ffb295e6a..6ac9fb008 100644
--- a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.h
+++ b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.h
@@ -38,6 +38,4 @@ typedef struct EnFirefly {
/* 0x31C */ ColliderSphere collider;
} EnFirefly; // size = 0x374
-extern const ActorInit En_Firefly_InitVars;
-
#endif // Z_EN_FIREFLY_H
diff --git a/src/overlays/actors/ovl_En_Firefly2/overlay.cfg b/src/overlays/actors/ovl_En_Firefly2/overlay.cfg
deleted file mode 100644
index 0872be9ea..000000000
--- a/src/overlays/actors/ovl_En_Firefly2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Firefly2
-z_en_firefly2.c
diff --git a/src/overlays/actors/ovl_En_Firefly2/z_en_firefly2.c b/src/overlays/actors/ovl_En_Firefly2/z_en_firefly2.c
index b3b446ef3..6c105caa2 100644
--- a/src/overlays/actors/ovl_En_Firefly2/z_en_firefly2.c
+++ b/src/overlays/actors/ovl_En_Firefly2/z_en_firefly2.c
@@ -15,7 +15,7 @@ void EnFirefly2_Destroy(Actor* thisx, PlayState* play);
void EnFirefly2_Update(Actor* thisx, PlayState* play);
void EnFirefly2_Draw(Actor* thisx, PlayState* play);
-const ActorInit En_Firefly2_InitVars = {
+ActorInit En_Firefly2_InitVars = {
ACTOR_EN_FIREFLY2,
ACTORCAT_ENEMY,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Firefly2/z_en_firefly2.h b/src/overlays/actors/ovl_En_Firefly2/z_en_firefly2.h
index c60f26ae2..b1e8179e1 100644
--- a/src/overlays/actors/ovl_En_Firefly2/z_en_firefly2.h
+++ b/src/overlays/actors/ovl_En_Firefly2/z_en_firefly2.h
@@ -10,6 +10,4 @@ typedef struct EnFirefly2 {
/* 0x144 */ char unk_144[0x228];
} EnFirefly2; // size = 0x36C
-extern const ActorInit En_Firefly2_InitVars;
-
#endif // Z_EN_FIREFLY2_H
diff --git a/src/overlays/actors/ovl_En_Fish/overlay.cfg b/src/overlays/actors/ovl_En_Fish/overlay.cfg
deleted file mode 100644
index a78daf631..000000000
--- a/src/overlays/actors/ovl_En_Fish/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Fish
-z_en_fish.c
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 0479ba261..b70ce1ae7 100644
--- a/src/overlays/actors/ovl_En_Fish/z_en_fish.c
+++ b/src/overlays/actors/ovl_En_Fish/z_en_fish.c
@@ -68,7 +68,7 @@ static Color_RGB8 D_8091FA94[] = {
{ 215, 97, 7 },
};
-const ActorInit En_Fish_InitVars = {
+ActorInit En_Fish_InitVars = {
ACTOR_EN_FISH,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -264,7 +264,7 @@ void func_8091DEE4(EnFish* this) {
this->actor.gravity = 0.0f;
this->actor.terminalVelocity = 0.0f;
this->unk_240 = Rand_S16Offset(5, D_8091FACC[this->unk_278]);
- this->unk_248 = 0;
+ this->updBgCheckInfoFlags = 0;
this->unk_26E = 400;
this->unk_272 = 400;
this->unk_268 = 0;
@@ -278,12 +278,12 @@ void func_8091DF68(Actor* thisx, PlayState* play) {
EnFish* this = THIS;
func_8091DD48(this);
- Math_SmoothStepToF(&thisx->speedXZ, 0.0f, 0.05f, 0.3f, 0.0f);
+ Math_SmoothStepToF(&thisx->speed, 0.0f, 0.05f, 0.3f, 0.0f);
- if ((thisx->speedXZ * 1.4f) + 0.8f > 2.0f) {
+ if ((thisx->speed * 1.4f) + 0.8f > 2.0f) {
this->skelAnime.playSpeed = 2.0f;
} else {
- this->skelAnime.playSpeed = (thisx->speedXZ * 1.4f) + 0.8f;
+ this->skelAnime.playSpeed = (thisx->speed * 1.4f) + 0.8f;
}
this->unk_270 >>= 1;
@@ -314,7 +314,7 @@ void func_8091E070(EnFish* this) {
phi_a1 = D_8091FAD4[this->unk_278];
}
this->unk_240 = Rand_S16Offset(15, phi_a1);
- this->unk_248 = 0;
+ this->updBgCheckInfoFlags = 0;
this->unk_26E = 400;
this->unk_272 = 400;
this->unk_26C = 0;
@@ -327,7 +327,7 @@ void func_8091E128(Actor* thisx, PlayState* play) {
EnFish* this = THIS;
func_8091DD48(this);
- Math_SmoothStepToF(&thisx->speedXZ, 1.8f, 0.08f, 0.4f, 0.0f);
+ Math_SmoothStepToF(&thisx->speed, 1.8f, 0.08f, 0.4f, 0.0f);
if ((func_8091D630(&thisx->world.pos, &thisx->home.pos) > SQ(80.0f)) || (this->unk_240 < 4)) {
this->unk_270 = this->unk_264;
@@ -342,10 +342,10 @@ void func_8091E128(Actor* thisx, PlayState* play) {
this->unk_24C = 0.0f;
}
- if ((thisx->speedXZ * 1.5f) + 0.8f > 4.0f) {
+ if ((thisx->speed * 1.5f) + 0.8f > 4.0f) {
this->skelAnime.playSpeed = 4.0f;
} else {
- this->skelAnime.playSpeed = (thisx->speedXZ * 1.5f) + 0.8f;
+ this->skelAnime.playSpeed = (thisx->speed * 1.5f) + 0.8f;
}
if (this->unk_240 <= 0) {
@@ -361,7 +361,7 @@ void func_8091E2E0(EnFish* this) {
this->actor.gravity = 0.0f;
this->actor.terminalVelocity = 0.0f;
this->unk_240 = Rand_S16Offset(10, 40);
- this->unk_248 = 0;
+ this->updBgCheckInfoFlags = 0;
this->unk_26E = 400;
this->unk_272 = 400;
this->unk_268 = 0;
@@ -378,7 +378,7 @@ void func_8091E34C(Actor* thisx, PlayState* play2) {
s32 pad;
func_8091DD48(this);
- Math_SmoothStepToF(&thisx->speedXZ, 4.2f, 0.08f, 1.4f, 0.0f);
+ Math_SmoothStepToF(&thisx->speed, 4.2f, 0.08f, 1.4f, 0.0f);
if (func_8091D630(&thisx->world.pos, &thisx->home.pos) > SQ(160.0f)) {
this->unk_270 = this->unk_264;
@@ -418,10 +418,10 @@ void func_8091E34C(Actor* thisx, PlayState* play2) {
this->unk_24C = 0.0f;
}
- if ((thisx->speedXZ * 1.5f) + 0.8f > 4.0f) {
+ if ((thisx->speed * 1.5f) + 0.8f > 4.0f) {
this->skelAnime.playSpeed = 4.0f;
} else {
- this->skelAnime.playSpeed = (thisx->speedXZ * 1.5f) + 0.8f;
+ this->skelAnime.playSpeed = (thisx->speed * 1.5f) + 0.8f;
}
if ((this->unk_240 <= 0) || (!sp3C && (sp38 == 0))) {
@@ -440,7 +440,7 @@ void func_8091E5EC(EnFish* this) {
this->unk_26C = 0;
func_8091D660(this);
this->unk_240 = Rand_S16Offset(10, 30);
- this->unk_248 = 0;
+ this->updBgCheckInfoFlags = 0;
this->unkFunc = func_8091E658;
}
@@ -453,7 +453,7 @@ void func_8091E658(Actor* thisx, PlayState* play) {
s16 sp32;
func_8091DD48(this);
- Math_SmoothStepToF(&thisx->speedXZ, 1.8f, 0.1f, 0.5f, 0.0f);
+ Math_SmoothStepToF(&thisx->speed, 1.8f, 0.1f, 0.5f, 0.0f);
if (func_8091D630(&thisx->world.pos, &thisx->home.pos) > SQ(80.0f)) {
this->unk_270 = this->unk_264;
@@ -475,10 +475,10 @@ void func_8091E658(Actor* thisx, PlayState* play) {
this->unk_24C = 1.2f;
}
- if ((thisx->speedXZ * 1.5f) + 0.8f > 4.0f) {
+ if ((thisx->speed * 1.5f) + 0.8f > 4.0f) {
this->skelAnime.playSpeed = 4.0f;
} else {
- this->skelAnime.playSpeed = (thisx->speedXZ * 1.5f) + 0.8f;
+ this->skelAnime.playSpeed = (thisx->speed * 1.5f) + 0.8f;
}
if (this->unk_240 <= 0) {
@@ -493,7 +493,7 @@ void func_8091E810(EnFish* this) {
this->actor.terminalVelocity = -10.0f;
this->actor.shape.yOffset = 0.0f;
func_8091D6C4(this);
- this->unk_248 = 5;
+ this->updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4;
this->unkFunc = func_8091E880;
this->unk_24C = 0.0f;
this->unk_240 = 300;
@@ -502,16 +502,16 @@ void func_8091E810(EnFish* this) {
void func_8091E880(Actor* thisx, PlayState* play) {
EnFish* this = THIS;
- Math_SmoothStepToF(&this->actor.speedXZ, 0.0f, 0.1f, 0.1f, 0.0f);
+ Math_SmoothStepToF(&this->actor.speed, 0.0f, 0.1f, 0.1f, 0.0f);
this->unk_26E = 0x43;
this->unk_272 = 0x43;
this->unk_268 = 0x4000;
this->unk_26C = -0x4000;
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->unk_240 = 400;
func_8091E9A4(this);
- } else if (this->actor.bgCheckFlags & 0x20) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_DIVE_INTO_WATER_L);
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_DIVE_INTO_WATER_L);
func_8091D840(thisx, play, 10, 15.0f);
if (func_8091DA14(this, play)) {
func_8091EF30(this);
@@ -520,7 +520,7 @@ void func_8091E880(Actor* thisx, PlayState* play) {
}
} else if ((this->unk_240 <= 0) && (this->actor.params == ENFISH_0) &&
(this->actor.floorHeight < BGCHECK_Y_MIN + 10)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -551,10 +551,10 @@ void func_8091E9A4(EnFish* this) {
this->actor.shape.yOffset = 300.0f;
func_8091D6C4(this);
this->unkFunc = func_8091EAF0;
- this->unk_248 = 5;
+ this->updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4;
this->unk_24C = 0.0f;
if (sp24 && (this->actor.draw != NULL)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FISH_LEAP);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FISH_LEAP);
}
}
@@ -563,7 +563,7 @@ void func_8091EAF0(Actor* thisx, PlayState* play) {
s32 sp40 = play->state.frames;
s16 phi_v1;
- Math_SmoothStepToF(&this->actor.speedXZ, Rand_ZeroOne() * 0.2f, 0.1f, 0.1f, 0.0f);
+ Math_SmoothStepToF(&this->actor.speed, Rand_ZeroOne() * 0.2f, 0.1f, 0.1f, 0.0f);
phi_v1 = (s16)((((sp40 >> 5) & 2) | ((sp40 >> 2) & 1)) << 0xB) * 0.3f;
if (sp40 & 4) {
phi_v1 *= -1;
@@ -582,20 +582,23 @@ void func_8091EAF0(Actor* thisx, PlayState* play) {
}
if (this->unk_240 <= 0) {
- Actor_MarkForDeath(&this->actor);
- } else if (this->unk_240 <= 60) {
+ Actor_Kill(&this->actor);
+ return;
+ }
+
+ if (this->unk_240 <= 60) {
if (sp40 & 4) {
this->actor.draw = EnFish_Draw;
} else {
this->actor.draw = NULL;
}
- } else if (this->actor.bgCheckFlags & 0x20) {
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER) {
if (func_8091DA14(this, play)) {
func_8091EF30(this);
} else {
func_8091ECF4(this);
}
- } else if (this->actor.bgCheckFlags & 1) {
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
func_8091E9A4(this);
}
}
@@ -609,7 +612,7 @@ void func_8091ECF4(EnFish* this) {
this->unk_240 = 200;
func_8091D660(this);
this->unkFunc = func_8091ED70;
- this->unk_248 = 5;
+ this->updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4;
this->unk_24C = 0.0f;
}
@@ -622,12 +625,12 @@ void func_8091ED70(Actor* thisx, PlayState* play) {
func_8091D840(thisx, play, 2, 25.0f);
}
- Math_SmoothStepToF(&thisx->speedXZ, 2.8f, 0.1f, 0.4f, 0.0f);
+ Math_SmoothStepToF(&thisx->speed, 2.8f, 0.1f, 0.4f, 0.0f);
- if ((thisx->bgCheckFlags & 8) || !(thisx->bgCheckFlags & 0x20)) {
+ if ((thisx->bgCheckFlags & BGCHECKFLAG_WALL) || !(thisx->bgCheckFlags & BGCHECKFLAG_WATER)) {
sp2E = Math_Vec3f_Yaw(&thisx->world.pos, &thisx->home.pos);
thisx->home.rot.y = Rand_S16Offset(-100, 100) + sp2E;
- thisx->speedXZ *= 0.5f;
+ thisx->speed *= 0.5f;
}
this->unk_268 = 0;
@@ -637,7 +640,7 @@ void func_8091ED70(Actor* thisx, PlayState* play) {
this->unk_270 = 2000;
this->unk_272 = 0x29B;
- if (thisx->bgCheckFlags & 1) {
+ if (thisx->bgCheckFlags & BGCHECKFLAG_GROUND) {
Math_StepToF(&thisx->world.pos.y, thisx->home.pos.y - 4.0f, 2.0f);
} else {
Math_StepToF(&thisx->world.pos.y, thisx->home.pos.y - 10.0f, 2.0f);
@@ -648,14 +651,14 @@ void func_8091ED70(Actor* thisx, PlayState* play) {
func_8091D728(this);
}
- if ((thisx->speedXZ * 1.5f) + 1.0f > 4.8f) {
+ if ((thisx->speed * 1.5f) + 1.0f > 4.8f) {
this->skelAnime.playSpeed = 4.8f;
} else {
- this->skelAnime.playSpeed = (thisx->speedXZ * 1.5f) + 1.0f;
+ this->skelAnime.playSpeed = (thisx->speed * 1.5f) + 1.0f;
}
if (this->unk_240 <= 0) {
- Actor_MarkForDeath(thisx);
+ Actor_Kill(thisx);
}
}
@@ -674,7 +677,7 @@ void func_8091EF30(EnFish* this) {
this->unk_240 = 15;
this->unk_279 = 10;
this->unkFunc = func_8091EFE8;
- this->unk_248 = 5;
+ this->updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4;
this->unk_24C = 0.0f;
}
@@ -688,7 +691,7 @@ void func_8091EFE8(Actor* thisx, PlayState* play) {
s16 sp2E;
if (sp3C == 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -697,18 +700,19 @@ void func_8091EFE8(Actor* thisx, PlayState* play) {
}
if (this->unk_277 == 0) {
- Math_SmoothStepToF(&this->actor.speedXZ, 2.8f, 0.1f, 0.4f, 0.0f);
+ Math_SmoothStepToF(&this->actor.speed, 2.8f, 0.1f, 0.4f, 0.0f);
if (this->unk_240 < 6) {
- this->actor.speedXZ *= 0.75f;
+ this->actor.speed *= 0.75f;
}
}
- if ((this->actor.bgCheckFlags & 8) && !(this->actor.bgCheckFlags & 0x20)) {
- this->actor.speedXZ *= 0.5f;
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) && !(this->actor.bgCheckFlags & BGCHECKFLAG_WATER)) {
+ this->actor.speed *= 0.5f;
}
- if (((Rand_Next() >> 0x1B) == 0) || ((this->actor.bgCheckFlags & 8) && ((Rand_Next() >> 0x1E) == 0)) ||
- !(this->actor.bgCheckFlags & 0x20)) {
+ if (((Rand_Next() >> 0x1B) == 0) ||
+ ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) && ((Rand_Next() >> 0x1E) == 0)) ||
+ !(this->actor.bgCheckFlags & BGCHECKFLAG_WATER)) {
temp_f0 = Rand_ZeroOne();
sp34 = (1.0f - SQ(temp_f0)) * sp3C->home.rot.x;
sp30 = Rand_ZeroOne() * sp3C->home.rot.z;
@@ -757,10 +761,10 @@ void func_8091EFE8(Actor* thisx, PlayState* play) {
}
this->actor.velocity.y *= 0.8f;
- if ((this->actor.speedXZ * 1.5f) + 1.0f > 4.8f) {
+ if ((this->actor.speed * 1.5f) + 1.0f > 4.8f) {
this->skelAnime.playSpeed = 4.8f;
} else {
- this->skelAnime.playSpeed = (this->actor.speedXZ * 1.5f) + 1.0f;
+ this->skelAnime.playSpeed = (this->actor.speed * 1.5f) + 1.0f;
}
}
@@ -768,7 +772,7 @@ void func_8091F344(EnFish* this) {
this->actor.gravity = 0.0f;
this->actor.terminalVelocity = 0.0f;
this->unk_240 = Rand_S16Offset(5, 35);
- this->unk_248 = 1;
+ this->updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1;
this->unk_268 = 0;
this->unk_26C = 0;
this->unk_26E = 1500;
@@ -801,7 +805,7 @@ void func_8091F3BC(Actor* thisx, PlayState* play) {
func_8091DD48(this);
Math_StepToF(&this->actor.world.pos.y, this->actor.home.pos.y, 2.0f);
- Math_SmoothStepToF(&this->actor.speedXZ, sp3C->x, sp3C->y, sp3C->z, 0.0f);
+ Math_SmoothStepToF(&this->actor.speed, sp3C->x, sp3C->y, sp3C->z, 0.0f);
this->unk_24C = 0.0f;
if (func_8091D630(&this->actor.world.pos, &this->actor.home.pos) > SQ(15.0f)) {
@@ -817,7 +821,7 @@ void func_8091F3BC(Actor* thisx, PlayState* play) {
phi_f0 = 0.0f;
}
- temp_f2 = this->actor.speedXZ + 0.4f + phi_f0;
+ temp_f2 = this->actor.speed + 0.4f + phi_f0;
this->skelAnime.playSpeed = CLAMP(temp_f2, 0.5f, 1.6f);
if (this->unk_240 <= 0) {
@@ -852,7 +856,7 @@ void func_8091F5A4(Actor* thisx, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
func_8091D7C4(this);
Actor_MoveWithGravity(&this->actor);
- if (this->unk_248 != 0) {
+ if (this->updBgCheckInfoFlags != 0) {
u32 temp = (play->sceneId != SCENE_LABO);
phi_f0 = BREG(1) + 10.0f;
@@ -860,7 +864,7 @@ void func_8091F5A4(Actor* thisx, PlayState* play) {
if (temp) {
phi_f0 = 6.0f;
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 17.5f, phi_f0, 0.0f, this->unk_248);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 17.5f, phi_f0, 0.0f, this->updBgCheckInfoFlags);
}
if ((this->actor.xzDistToPlayer < 70.0f) && (this->unkFunc != func_8091EFE8)) {
@@ -878,12 +882,13 @@ void func_8091F5A4(Actor* thisx, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL;
if (this->actor.params == ENFISH_0) {
- Actor_MarkForDeath(&this->actor);
- } else {
- func_8091D904(this);
+ Actor_Kill(&this->actor);
+ return;
}
+
+ func_8091D904(this);
} else if (func_8091DDF4(this, play)) {
- Actor_PickUp(&this->actor, play, GI_MAX, 80.0f, 25.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MAX, 80.0f, 25.0f);
}
}
}
@@ -892,7 +897,7 @@ void func_8091F830(Actor* thisx, PlayState* play) {
EnFish* this = THIS;
if (this->actor.params == ENFISH_1) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
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 4596c79b1..d3941906c 100644
--- a/src/overlays/actors/ovl_En_Fish/z_en_fish.h
+++ b/src/overlays/actors/ovl_En_Fish/z_en_fish.h
@@ -26,7 +26,7 @@ typedef struct EnFish {
/* 0x242 */ s16 unk_242;
/* 0x244 */ s16 unk_244;
/* 0x246 */ s16 unk_246;
- /* 0x248 */ s32 unk_248;
+ /* 0x248 */ s32 updBgCheckInfoFlags;
/* 0x24C */ f32 unk_24C;
/* 0x250 */ f32 unk_250;
/* 0x254 */ f32 unk_254;
@@ -48,6 +48,4 @@ typedef struct EnFish {
/* 0x279 */ s8 unk_279;
} EnFish; // size = 0x27C
-extern const ActorInit En_Fish_InitVars;
-
#endif // Z_EN_FISH_H
diff --git a/src/overlays/actors/ovl_En_Fish2/overlay.cfg b/src/overlays/actors/ovl_En_Fish2/overlay.cfg
deleted file mode 100644
index cba83b735..000000000
--- a/src/overlays/actors/ovl_En_Fish2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Fish2
-z_en_fish2.c
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 a0575eb9a..b7952c1bc 100644
--- a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c
+++ b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c
@@ -49,7 +49,7 @@ static s32 D_80B2B2EC = 0;
static s32 D_80B2B2F0 = 0;
static Actor* D_80B2B2F4 = NULL;
-const ActorInit En_Fish2_InitVars = {
+ActorInit En_Fish2_InitVars = {
ACTOR_EN_FISH2,
ACTORCAT_PROP,
FLAGS,
@@ -151,7 +151,7 @@ s32 func_80B28478(EnFish2* this) {
void EnFish2_Init(Actor* thisx, PlayState* play) {
EnFish2* this = THIS;
s32 i;
- s32 cs;
+ s32 csId;
Math_Vec3f_Copy(&this->unk_324, &this->actor.home.pos);
this->unk_344 = D_80B2B2F0;
@@ -163,36 +163,36 @@ void EnFish2_Init(Actor* thisx, PlayState* play) {
this->morphTable, 24);
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
if (this->unk_344 == 0) {
- if (gSaveContext.save.weekEventReg[81] & 0x10) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_81_10)) {
this->unk_2C0 = 1;
}
- if (gSaveContext.save.weekEventReg[81] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_81_20)) {
this->unk_2C0 = 2;
}
- if (gSaveContext.save.weekEventReg[81] & 0x40) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_81_40)) {
this->unk_2C0 = 3;
}
} else {
- if (gSaveContext.save.weekEventReg[81] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_81_80)) {
this->unk_2C0 = 1;
}
- if (gSaveContext.save.weekEventReg[82] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_82_01)) {
this->unk_2C0 = 2;
}
- if (gSaveContext.save.weekEventReg[82] & 2) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_82_02)) {
this->unk_2C0 = 3;
}
}
- cs = this->actor.cutscene;
+ csId = this->actor.csId;
this->unk_330 = D_80B2B370[this->unk_2C0];
i = 0;
// clang-format off
- while (cs != -1) { this->unk_2BA[i] = cs; cs = ActorCutscene_GetAdditionalCutscene(cs); i++; }
+ while (csId != CS_ID_NONE) { this->csIdList[i] = csId; csId = CutsceneManager_GetAdditionalCsId(csId); i++; }
// clang-format on
Collider_InitAndSetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colliderElements);
@@ -211,7 +211,7 @@ void EnFish2_Init(Actor* thisx, PlayState* play) {
} else if (this->actor.params != 0) {
this->unk_2B4 = 10;
this->actor.draw = NULL;
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->actionFunc = func_80B2A01C;
}
}
@@ -235,7 +235,7 @@ void func_80B287F4(EnFish2* this, s32 arg1) {
if (arg1 == 0) {
this->unk_338 = 410.0f - this->unk_2C4;
}
- Math_ApproachF(&this->unk_350->speedXZ, (D_80B2B380[0] - this->unk_330) * this->unk_338, 0.1f, 0.4f);
+ Math_ApproachF(&this->unk_350->speed, (D_80B2B380[0] - this->unk_330) * this->unk_338, 0.1f, 0.4f);
}
Math_Vec3f_Copy(&sp2C, &this->unk_350->world.pos);
this->unk_34A = Math_Vec3f_Yaw(&this->actor.world.pos, &sp2C);
@@ -377,14 +377,14 @@ void func_80B28C14(EnFish2* this, PlayState* play) {
}
if (this->unk_2B4 == 0) {
- Math_ApproachF(&this->actor.speedXZ, (D_80B2B380[0] - this->unk_330) * 400.0f, 0.3f, 0.3f);
- if (this->actor.speedXZ > 3.0f) {
- this->actor.speedXZ = 3.0f;
- } else if (this->actor.speedXZ < 1.5f) {
- this->actor.speedXZ = 1.5f;
+ Math_ApproachF(&this->actor.speed, (D_80B2B380[0] - this->unk_330) * 400.0f, 0.3f, 0.3f);
+ if (this->actor.speed > 3.0f) {
+ this->actor.speed = 3.0f;
+ } else if (this->actor.speed < 1.5f) {
+ this->actor.speed = 1.5f;
}
} else {
- Math_ApproachZeroF(&this->actor.speedXZ, 0.3f, 0.3f);
+ Math_ApproachZeroF(&this->actor.speed, 0.3f, 0.3f);
}
if ((D_80B2B2E8 == 0) && (D_80B2B2E0 != 2)) {
@@ -404,7 +404,7 @@ void func_80B28C14(EnFish2* this, PlayState* play) {
} else if ((itemAction->update != NULL) && (itemAction->params == 0) &&
(fabsf(itemAction->world.pos.x - this->actor.world.pos.x) < 100.0f) &&
(fabsf(itemAction->world.pos.z - this->actor.world.pos.z) < 100.0f) &&
- (itemAction->bgCheckFlags & 0x20)) {
+ (itemAction->bgCheckFlags & BGCHECKFLAG_WATER)) {
this->unk_350 = itemAction;
if (D_80B2B2E0 == 0) {
EnFish2* fish;
@@ -416,7 +416,7 @@ void func_80B28C14(EnFish2* this, PlayState* play) {
if (this->unk_354 != NULL) {
D_80B2B2E4 = 0;
D_80B2B2E0 = 1;
- fish->unk_2BA[0] = this->unk_2BA[0];
+ fish->csIdList[0] = this->csIdList[0];
fish->unk_350 = this->unk_350;
}
}
@@ -436,7 +436,7 @@ void func_80B29128(EnFish2* this) {
void func_80B2913C(EnFish2* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80B28B5C(this);
}
}
@@ -448,7 +448,7 @@ void func_80B29194(EnFish2* this) {
}
this->unk_2C4 = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->unk_2C8 == 0) {
this->unk_34C = 400;
Math_Vec3f_Copy(&this->actor.world.pos, &this->unk_324);
@@ -463,12 +463,12 @@ void func_80B29194(EnFish2* this) {
void func_80B29250(EnFish2* this, PlayState* play) {
if (!func_80B28478(this)) {
- Math_ApproachF(&this->actor.speedXZ, (D_80B2B380[0] - this->unk_330) * 1000.0f, 0.3f, 0.3f);
+ Math_ApproachF(&this->actor.speed, (D_80B2B380[0] - this->unk_330) * 1000.0f, 0.3f, 0.3f);
- if (this->actor.speedXZ > 4.0f) {
- this->actor.speedXZ = 4.0f;
- } else if (this->actor.speedXZ < 2.0f) {
- this->actor.speedXZ = 2.0f;
+ if (this->actor.speed > 4.0f) {
+ this->actor.speed = 4.0f;
+ } else if (this->actor.speed < 2.0f) {
+ this->actor.speed = 2.0f;
}
func_80B287F4(this, 0);
@@ -492,12 +492,12 @@ void func_80B293C4(EnFish2* this, PlayState* play) {
if (func_80B28478(this) == 0) {
func_80B287F4(this, 1);
- Math_ApproachF(&this->actor.speedXZ, (*D_80B2B380 - this->unk_330) * 1000.0f, 0.3f, 0.3f);
+ Math_ApproachF(&this->actor.speed, (*D_80B2B380 - this->unk_330) * 1000.0f, 0.3f, 0.3f);
- if (this->actor.speedXZ > 3.0f) {
- this->actor.speedXZ = 3.0f;
- } else if (this->actor.speedXZ < 1.0f) {
- this->actor.speedXZ = 1.0f;
+ if (this->actor.speed > 3.0f) {
+ this->actor.speed = 3.0f;
+ } else if (this->actor.speed < 1.0f) {
+ this->actor.speed = 1.0f;
}
if (this->unk_2CC <= currentFrame) {
@@ -526,11 +526,11 @@ void func_80B2951C(EnFish2* this) {
}
this->unk_2B4 = 10;
- this->actor.speedXZ = 3.0f;
- Actor_MarkForDeath(this->unk_350);
+ this->actor.speed = 3.0f;
+ Actor_Kill(this->unk_350);
this->unk_350 = NULL;
D_80B2B2F4 = &this->actor;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DODO_M_EAT);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DODO_M_EAT);
this->actionFunc = func_80B295A4;
}
@@ -542,7 +542,7 @@ void func_80B295A4(EnFish2* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
Math_SmoothStepToS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &play->view.eye), 1, 0x1388, 0);
- Math_ApproachZeroF(&this->actor.speedXZ, 0.3f, 0.3f);
+ 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);
@@ -576,7 +576,7 @@ void func_80B29778(EnFish2* this) {
}
this->actionFunc = func_80B297FC;
this->unk_324.y = this->unk_2D4;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
void func_80B297FC(EnFish2* this, PlayState* play) {
@@ -605,7 +605,7 @@ void func_80B297FC(EnFish2* this, PlayState* play) {
if ((fabsf(this->actor.world.pos.x - this->unk_324.x) < 2.0f) &&
(this->actor.world.pos.y < (this->unk_2D4 + 3.0f)) &&
(fabsf(this->actor.world.pos.z - this->unk_324.z) < 2.0f)) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->unk_34A = BINANG_ROT180(this->actor.home.rot.y);
this->unk_2C4++;
this->actor.velocity.y = 0.0f;
@@ -619,18 +619,18 @@ void func_80B297FC(EnFish2* this, PlayState* play) {
this->unk_2C0++;
if (this->unk_344 == 0) {
if (this->unk_2C0 == 1) {
- gSaveContext.save.weekEventReg[81] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_81_10);
} else if (this->unk_2C0 == 2) {
- gSaveContext.save.weekEventReg[81] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_81_20);
} else if (this->unk_2C0 == 3) {
- gSaveContext.save.weekEventReg[81] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_81_40);
}
} else if (this->unk_2C0 == 1) {
- gSaveContext.save.weekEventReg[81] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_81_80);
} else if (this->unk_2C0 == 2) {
- gSaveContext.save.weekEventReg[82] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_82_01);
} else if (this->unk_2C0 == 3) {
- gSaveContext.save.weekEventReg[82] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_82_02);
}
if (this->unk_2B0 != 0) {
@@ -638,7 +638,7 @@ void func_80B297FC(EnFish2* this, PlayState* play) {
}
this->unk_2B6 = 4;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FISH_GROW_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FISH_GROW_UP);
this->unk_2C4++;
}
break;
@@ -770,8 +770,8 @@ void func_80B29EE4(EnFish2* this, PlayState* play) {
this->unk_2C4++;
}
this->unk_338 = 410.0f - this->unk_2C4;
- Math_ApproachF(&this->actor.speedXZ, 2.0f, 0.3f, 0.3f);
- Math_ApproachF(&this->unk_350->speedXZ, (D_80B2B380[0] - this->unk_330) * this->unk_338, 0.1f, 0.4f);
+ Math_ApproachF(&this->actor.speed, 2.0f, 0.3f, 0.3f);
+ Math_ApproachF(&this->unk_350->speed, (D_80B2B380[0] - this->unk_330) * this->unk_338, 0.1f, 0.4f);
func_80B289DC(this, play);
Math_Vec3f_Copy(&sp2C, &this->unk_350->world.pos);
this->unk_34A = Math_Vec3f_Yaw(&this->actor.world.pos, &sp2C);
@@ -784,11 +784,11 @@ void func_80B29EE4(EnFish2* this, PlayState* play) {
void func_80B2A01C(EnFish2* this, PlayState* play) {
if (this->unk_2B4 == 0) {
- if (!ActorCutscene_GetCanPlayNext(this->unk_2BA[0])) {
- ActorCutscene_SetIntentToPlay(this->unk_2BA[0]);
+ if (!CutsceneManager_IsNext(this->csIdList[0])) {
+ CutsceneManager_Queue(this->csIdList[0]);
} else {
this->unk_2B4 = 15;
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_2BA[0], &this->actor);
+ CutsceneManager_StartWithPlayerCs(this->csIdList[0], &this->actor);
this->actionFunc = func_80B2A094;
}
}
@@ -801,13 +801,13 @@ void func_80B2A094(EnFish2* this, PlayState* play) {
D_80B2B2E4 = 1;
}
- this->subCamId = ActorCutscene_GetCurrentSubCamId(this->unk_2BA[0]);
+ this->subCamId = CutsceneManager_GetCurrentSubCamId(this->csIdList[0]);
if (D_80B2B2EC != 0) {
D_80B2B2EC++;
if (D_80B2B2EC > 200) {
- Actor_MarkForDeath(&this->actor);
- ActorCutscene_Stop(this->unk_2BA[0]);
+ Actor_Kill(&this->actor);
+ CutsceneManager_Stop(this->csIdList[0]);
return;
}
}
@@ -862,8 +862,8 @@ void func_80B2A23C(EnFish2* this, PlayState* play) {
if ((this->unk_2B4 == 0) && (D_80B2B2E4 == 3)) {
D_80B2B2E0 = D_80B2B2EC = D_80B2B2E4 = 0;
D_80B2B2F4 = NULL;
- ActorCutscene_Stop(this->unk_2BA[0]);
- Actor_MarkForDeath(&this->actor);
+ CutsceneManager_Stop(this->csIdList[0]);
+ Actor_Kill(&this->actor);
}
}
@@ -887,15 +887,15 @@ void func_80B2A498(EnFish2* this, PlayState* play) {
temp_v0 = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_COL_MAN, sp80.x, sp80.y, sp80.z, 0,
this->actor.world.rot.y, 0, 0);
if (temp_v0 != NULL) {
- temp_v0->speedXZ = 4.0f;
+ temp_v0->speed = 4.0f;
temp_v0->velocity.y = 15.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_PIECE_OF_HEART);
- gSaveContext.save.weekEventReg[81] &= (u8)~0x10;
- gSaveContext.save.weekEventReg[81] &= (u8)~0x20;
- gSaveContext.save.weekEventReg[81] &= (u8)~0x40;
- gSaveContext.save.weekEventReg[81] &= (u8)~0x80;
- gSaveContext.save.weekEventReg[82] &= (u8)~1;
- gSaveContext.save.weekEventReg[82] &= (u8)~2;
+ Actor_PlaySfx(&this->actor, NA_SE_SY_PIECE_OF_HEART);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_81_10);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_81_20);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_81_40);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_81_80);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_82_01);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_82_02);
}
}
@@ -987,7 +987,8 @@ void EnFish2_Update(Actor* thisx, PlayState* play2) {
this->unk_33C = 25.0f - ((this->unk_330 - 0.01f) * 1000.0f);
Actor_SetScale(&this->actor, this->unk_330);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0, 15.0f, 10.0f, 7);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0, 15.0f, 10.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4);
if (this->actor.params != 2) {
this->unk_2D4 = this->actor.floorHeight + (this->unk_330 * 1000.0f);
diff --git a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.h b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.h
index 67dfa98f7..20b1ff21b 100644
--- a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.h
+++ b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.h
@@ -28,7 +28,7 @@ typedef struct EnFish2 {
/* 0x02B4 */ s16 unk_2B4;
/* 0x02B6 */ s16 unk_2B6;
/* 0x02B8 */ s16 unk_2B8;
- /* 0x02BA */ s16 unk_2BA[3];
+ /* 0x02BA */ s16 csIdList[3];
/* 0x02C0 */ s32 unk_2C0;
/* 0x02C4 */ s32 unk_2C4;
/* 0x02C8 */ u8 unk_2C8;
@@ -60,6 +60,4 @@ typedef struct EnFish2 {
/* 0x03F8 */ EnFish2UnkStruct unk_3F8[200];
} EnFish2; // size = 0x2018
-extern const ActorInit En_Fish2_InitVars;
-
#endif // Z_EN_FISH2_H
diff --git a/src/overlays/actors/ovl_En_Fishing/overlay.cfg b/src/overlays/actors/ovl_En_Fishing/overlay.cfg
deleted file mode 100644
index 193cfdb5f..000000000
--- a/src/overlays/actors/ovl_En_Fishing/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Fishing
-z_en_fishing.c
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 d940a0959..306f1d94d 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"
@@ -201,7 +201,7 @@ s16 D_80917272;
u8 D_80917274;
Vec3f D_80917278;
-const ActorInit En_Fishing_InitVars = {
+ActorInit En_Fishing_InitVars = {
ACTOR_EN_FISHING,
ACTORCAT_NPC,
FLAGS,
@@ -835,7 +835,7 @@ void EnFishing_Init(Actor* thisx, PlayState* play2) {
if (sLinkAge != 1) {
// HIGH_SCORE(HS_FISHING) from OoT
- if (gSaveContext.save.unk_EE4 & 0x1000) {
+ if (gSaveContext.save.saveInfo.unk_EC0 & 0x1000) {
D_8090CD08 = 0;
} else {
D_8090CD08 = 1;
@@ -846,25 +846,25 @@ void EnFishing_Init(Actor* thisx, PlayState* play2) {
D_8090CD04 = 20;
play->specialEffects = sFishingEffects;
- REG(15) = 1; // gTimeIncrement in OoT
+ R_TIME_SPEED = 1;
D_809171FC = 0;
D_809171F6 = 10;
- Audio_QueueSeqCmd(0x100100FF);
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 1);
if (sLinkAge == 1) {
- if (gSaveContext.save.unk_EE4 & 0x7F) {
- D_809171CC = gSaveContext.save.unk_EE4 & 0x7F;
+ if (gSaveContext.save.saveInfo.unk_EC0 & 0x7F) {
+ D_809171CC = gSaveContext.save.saveInfo.unk_EC0 & 0x7F;
} else {
D_809171CC = 40.0f;
}
- } else if (gSaveContext.save.unk_EE4 & 0x7F000000) {
- D_809171CC = (gSaveContext.save.unk_EE4 & 0x7F000000) >> 0x18;
+ } else if (gSaveContext.save.saveInfo.unk_EC0 & 0x7F000000) {
+ D_809171CC = (gSaveContext.save.saveInfo.unk_EC0 & 0x7F000000) >> 0x18;
} else {
D_809171CC = 45.0f;
}
- D_809171D1 = (gSaveContext.save.unk_EE4 & 0xFF0000) >> 0x10;
+ D_809171D1 = (gSaveContext.save.saveInfo.unk_EC0 & 0xFF0000) >> 0x10;
if ((D_809171D1 & 7) == 7) {
play->roomCtx.unk7A[0] = 90;
D_809171CA = 1;
@@ -945,7 +945,7 @@ void EnFishing_Init(Actor* thisx, PlayState* play2) {
return;
}
- thisx->bgCheckFlags |= 0x800; // Added in MM
+ thisx->bgCheckFlags |= BGCHECKFLAG_PLAYER_800; // Added in MM
if ((thisx->params < 115) || (thisx->params == 200)) {
SkelAnime_InitFlex(play, &this->skelAnime, &gFishingFishSkel, &gFishingFishAnim, NULL, NULL, 0);
@@ -1130,7 +1130,7 @@ void EnFishing_UpdateEffects(FishingEffect* effect, PlayState* play) {
if ((effect->unk_2C >= 100) && (Message_GetState(&play->msgCtx) == TEXT_STATE_5)) {
if (Message_ShouldAdvance(play) || (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
Rupees_ChangeBy(-50);
effect->unk_2C = -1;
}
@@ -1158,7 +1158,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) {
for (i = 0; i < 100; i++) {
if (effect->type == FS_EFF_RIPPLE) {
if (flag == 0) {
- gSPDisplayList(POLY_XLU_DISP++, gFishingRippleSetupDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFishingRippleMaterialDL);
gDPSetEnvColor(POLY_XLU_DISP++, 155, 155, 155, 0);
flag++;
}
@@ -1170,7 +1170,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, gFishingRippleVtxDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFishingRippleModelDL);
}
effect++;
}
@@ -1180,7 +1180,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) {
for (i = 0; i < 100; i++) {
if (effect->type == FS_EFF_DUST_SPLASH) {
if (flag == 0) {
- gSPDisplayList(POLY_XLU_DISP++, gFishingDustSplashSetupDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFishingDustSplashMaterialDL);
gDPSetEnvColor(POLY_XLU_DISP++, 200, 200, 200, 0);
flag++;
}
@@ -1193,7 +1193,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, gFishingDustSplashVtxDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFishingDustSplashModelDL);
}
effect++;
}
@@ -1203,7 +1203,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) {
for (i = 0; i < 100; i++) {
if (effect->type == FS_EFF_WATER_DUST) {
if (flag == 0) {
- gSPDisplayList(POLY_OPA_DISP++, gFishingWaterDustSetupDL);
+ gSPDisplayList(POLY_OPA_DISP++, gFishingWaterDustMaterialDL);
gDPSetEnvColor(POLY_OPA_DISP++, 40, 90, 80, 128);
flag++;
}
@@ -1220,7 +1220,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) {
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_OPA_DISP++, gFishingWaterDustVtxDL);
+ gSPDisplayList(POLY_OPA_DISP++, gFishingWaterDustModelDL);
}
effect++;
}
@@ -1230,7 +1230,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) {
for (i = 0; i < 100; i++) {
if (effect->type == FS_EFF_BUBBLE) {
if (flag == 0) {
- gSPDisplayList(POLY_XLU_DISP++, gFishingBubbleSetupDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFishingBubbleMaterialDL);
gDPSetEnvColor(POLY_XLU_DISP++, 150, 150, 150, 0);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255);
flag++;
@@ -1242,7 +1242,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, gFishingBubbleVtxDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFishingBubbleModelDL);
}
effect++;
}
@@ -1266,7 +1266,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, gFishingRainDropVtxDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFishingRainDropModelDL);
}
effect++;
}
@@ -1278,7 +1278,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) {
for (i = 30; i < EFFECT_COUNT; i++) {
if (effect->type == FS_EFF_RAIN_RIPPLE) {
if (flag == 0) {
- gSPDisplayList(POLY_XLU_DISP++, gFishingRippleSetupDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFishingRippleMaterialDL);
gDPSetEnvColor(POLY_XLU_DISP++, 155, 155, 155, 0);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 130);
flag++;
@@ -1289,7 +1289,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, gFishingRippleVtxDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFishingRippleModelDL);
}
effect++;
}
@@ -1299,7 +1299,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) {
for (i = 30; i < EFFECT_COUNT; i++) {
if (effect->type == FS_EFF_RAIN_SPLASH) {
if (flag == 0) {
- gSPDisplayList(POLY_XLU_DISP++, gFishingRainSplashSetupDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFishingRainSplashMaterialDL);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, KREG(19) + 80);
flag++;
}
@@ -1317,7 +1317,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, gFishingRainSplashVtxDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFishingRainSplashModelDL);
}
effect++;
}
@@ -1325,9 +1325,9 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) {
effect = firstEffect;
if (effect->type == FS_EFF_OWNER_HAT) {
Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW);
- Matrix_RotateYF((sEffOwnerHatRot.y * M_PI) / 32768, MTXMODE_APPLY);
- Matrix_RotateXFApply((sEffOwnerHatRot.x * M_PI) / 32768);
- Matrix_RotateZF((sEffOwnerHatRot.z * M_PI) / 32768, MTXMODE_APPLY);
+ Matrix_RotateYF(BINANG_TO_RAD_ALT2(sEffOwnerHatRot.y), MTXMODE_APPLY);
+ Matrix_RotateXFApply(BINANG_TO_RAD_ALT2(sEffOwnerHatRot.x));
+ Matrix_RotateZF(BINANG_TO_RAD_ALT2(sEffOwnerHatRot.z), MTXMODE_APPLY);
Matrix_Scale(effect->unk_30, effect->unk_30, effect->unk_30, MTXMODE_APPLY);
Matrix_Translate(-1250.0f, 0.0f, 0.0f, MTXMODE_APPLY);
Matrix_RotateXFApply(M_PI / 2);
@@ -1481,9 +1481,9 @@ void EnFishing_UpdateLine(PlayState* play, Vec3f* basePos, Vec3f* pos, Vec3f* ro
dy = spD8 - (pos + i - 1)->y;
dz = (pos + i)->z - (pos + i - 1)->z;
- ry = Math_Acot2F(dz, dx);
+ ry = Math_Atan2F_XY(dz, dx);
dist = sqrtf(SQ(dx) + SQ(dz));
- rx = -Math_Acot2F(dist, dy);
+ rx = -Math_Atan2F_XY(dist, dy);
(rot + i - 1)->y = ry;
(rot + i - 1)->x = rx;
@@ -1517,9 +1517,9 @@ void EnFishing_UpdateLinePos(Vec3f* pos) {
dy = (pos + i)->y - (pos + i + 1)->y;
dz = (pos + i)->z - (pos + i + 1)->z;
- ry = Math_Acot2F(dz, dx);
+ ry = Math_Atan2F_XY(dz, dx);
dist = sqrtf(SQ(dx) + SQ(dz));
- rx = -Math_Acot2F(dist, dy);
+ rx = -Math_Atan2F_XY(dist, dy);
Matrix_RotateYF(ry, MTXMODE_NEW);
Matrix_RotateXFApply(rx);
@@ -1559,9 +1559,9 @@ void EnFishing_DrawLureHook(PlayState* play, Vec3f* pos, Vec3f* refPos, u8 hookI
dy = refPos->y - pos->y + offsetY;
dz = refPos->z - pos->z;
- ry = Math_Acot2F(dz, dx);
+ ry = Math_Atan2F_XY(dz, dx);
dist = sqrtf(SQ(dx) + SQ(dz));
- rx = -Math_Acot2F(dist, dy);
+ rx = -Math_Atan2F_XY(dist, dy);
Matrix_RotateYF(ry, MTXMODE_NEW);
Matrix_RotateXFApply(rx);
@@ -1573,7 +1573,7 @@ void EnFishing_DrawLureHook(PlayState* play, Vec3f* pos, Vec3f* refPos, u8 hookI
Matrix_Translate(pos->x, pos->y, pos->z, MTXMODE_NEW);
- if ((player->actor.speedXZ == 0.0f) && (D_809101B4 == 0.0f)) {
+ if ((player->actor.speed == 0.0f) && (D_809101B4 == 0.0f)) {
Math_ApproachF(&sLureHookRotY[hookIndex], ry, 0.1f, 0.3f);
} else {
sLureHookRotY[hookIndex] = ry;
@@ -1659,7 +1659,7 @@ void EnFishing_UpdateSinkingLure(PlayState* play) {
}
if (D_8090CD14 == 5) {
- Matrix_RotateYF(player->actor.shape.rot.y * (M_PI / 32768), MTXMODE_NEW);
+ Matrix_RotateYF(BINANG_TO_RAD(player->actor.shape.rot.y), MTXMODE_NEW);
sp94.x = 5.0f;
sp94.y = 0.0f;
sp94.z = 3.0f;
@@ -1680,9 +1680,9 @@ void EnFishing_UpdateSinkingLure(PlayState* play) {
dy = (pos + i)->y - (pos + i - 1)->y + offsetY;
dz = (pos + i)->z - (pos + i - 1)->z + offsetZ;
- ry = Math_Acot2F(dz, dx);
+ ry = Math_Atan2F_XY(dz, dx);
dist = sqrtf(SQ(dx) + SQ(dz));
- rx = -Math_Acot2F(dist, dy);
+ rx = -Math_Atan2F_XY(dist, dy);
Matrix_RotateYF(ry, MTXMODE_NEW);
Matrix_RotateXFApply(rx);
@@ -1710,7 +1710,7 @@ void EnFishing_DrawSinkingLure(PlayState* play) {
if (sLurePos.y < WATER_SURFACE_Y(play)) {
func_8012C28C(play->state.gfxCtx);
- gSPDisplayList(POLY_OPA_DISP++, gFishingSinkingLureSegmentSetupDL);
+ gSPDisplayList(POLY_OPA_DISP++, gFishingSinkingLureSegmentMaterialDL);
for (i = SINKING_LURE_SEG_COUNT - 1; i >= 0; i--) {
if ((i + D_80911F20) < SINKING_LURE_SEG_COUNT) {
@@ -1721,13 +1721,13 @@ void EnFishing_DrawSinkingLure(PlayState* play) {
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_OPA_DISP++, gFishingSinkingLureSegmentVtxDL);
+ gSPDisplayList(POLY_OPA_DISP++, gFishingSinkingLureSegmentModelDL);
}
}
} else {
func_8012C2DC(play->state.gfxCtx);
- gSPDisplayList(POLY_XLU_DISP++, gFishingSinkingLureSegmentSetupDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFishingSinkingLureSegmentMaterialDL);
for (i = SINKING_LURE_SEG_COUNT - 1; i >= 0; i--) {
if ((i + D_80911F20) < SINKING_LURE_SEG_COUNT) {
@@ -1738,7 +1738,7 @@ void EnFishing_DrawSinkingLure(PlayState* play) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, gFishingSinkingLureSegmentVtxDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFishingSinkingLureSegmentModelDL);
}
}
}
@@ -1772,7 +1772,7 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot)
sLurePos = sFishingHookedFish->fishMouthPos;
if ((D_8090CD14 == 5) && (D_80917206 == 2)) {
- Matrix_RotateYF(player->actor.shape.rot.y * (M_PI / 32768), MTXMODE_NEW);
+ Matrix_RotateYF(BINANG_TO_RAD(player->actor.shape.rot.y), MTXMODE_NEW);
posSrc.x = 2.0f;
posSrc.y = 0.0f;
posSrc.z = 0.0f;
@@ -1784,7 +1784,7 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot)
sLurePos = sReelLinePos[LINE_SEG_COUNT - 1];
sLureRot.x = sReelLineRot[LINE_SEG_COUNT - 2].x + M_PI;
- if ((player->actor.speedXZ == 0.0f) && (D_80917200 == 0)) {
+ if ((player->actor.speed == 0.0f) && (D_80917200 == 0)) {
Math_ApproachF(&sLureRot.y, sReelLineRot[LINE_SEG_COUNT - 2].y, 0.1f, 0.2f);
} else {
sLureRot.y = sReelLineRot[LINE_SEG_COUNT - 2].y;
@@ -1850,7 +1850,7 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot)
Matrix_Scale(D_809101C8, 1.0f, dist, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, gFishingLineVtxDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFishingLineModelDL);
} else {
for (i = spB4; i < LINE_SEG_COUNT - 1; i++) {
if ((i == LINE_SEG_COUNT - 3) && (D_80917206 == 0) && (D_8090CD14 == 3)) {
@@ -1878,7 +1878,7 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot)
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, gFishingLineVtxDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFishingLineModelDL);
break;
}
@@ -1888,7 +1888,7 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot)
Matrix_Scale(D_809101C8, 1.0f, 0.005f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, gFishingLineVtxDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFishingLineModelDL);
}
}
@@ -2151,7 +2151,7 @@ void EnFishing_UpdateLure(EnFishing* this, PlayState* play) {
Math_ApproachF(&D_809101C0, 195.0f, 1.0f, 1.0f);
- if (player->stateFlags1 & 0x8000000) {
+ if (player->stateFlags1 & PLAYER_STATE1_8000000) {
D_80917204 = 0;
player->unk_B28 = 0;
}
@@ -2159,7 +2159,7 @@ void EnFishing_UpdateLure(EnFishing* this, PlayState* play) {
if (D_80917204 == 0) {
if ((D_80917200 == 0) && (player->unk_B28 == 1)) {
D_80917204 = 37;
- func_801477B4(play);
+ Message_CloseTextbox(play);
}
} else {
sLureRot.x = sReelLineRot[LINE_SEG_COUNT - 2].x + M_PI;
@@ -2168,7 +2168,7 @@ void EnFishing_UpdateLure(EnFishing* this, PlayState* play) {
if (D_80917204 == 18) {
D_8090CD14 = 1;
sLurePos = sRodTipPos;
- Matrix_RotateYF(BINANG_TO_RAD(player->actor.shape.rot.y), MTXMODE_NEW);
+ Matrix_RotateYF(BINANG_TO_RAD_ALT(player->actor.shape.rot.y), MTXMODE_NEW);
sp90.x = 0.0f;
sp90.y = 0.0f;
sp90.z = 25.0f;
@@ -2214,7 +2214,7 @@ void EnFishing_UpdateLure(EnFishing* this, PlayState* play) {
sLureRot.y = sReelLineRot[LINE_SEG_COUNT - 2].y;
} else {
sLureRot.x = 0.0f;
- sLureRot.y = Math_Acot2F(spD0, spD8) + M_PI;
+ sLureRot.y = Math_Atan2F_XY(spD0, spD8) + M_PI;
}
phi_f16 = sqrtf(SQ(spD8) + SQ(spD4) + SQ(spD0));
@@ -2230,13 +2230,14 @@ void EnFishing_UpdateLure(EnFishing* this, PlayState* play) {
Vec3f sp80 = this->actor.world.pos;
this->actor.prevPos = this->actor.world.pos = sLurePos;
- Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 30.0f, 30.0f, 0x43);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 30.0f, 30.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_40);
this->actor.world.pos = sp80;
- if (this->actor.bgCheckFlags & 0x10) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_CEILING) {
D_80917238.y = -0.5f;
}
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
if (D_80917238.y > 0.0f) {
D_80917238.y = 0.0f;
}
@@ -2399,7 +2400,7 @@ void EnFishing_UpdateLure(EnFishing* this, PlayState* play) {
sp90.x = player->actor.world.pos.x - sLurePos.x;
sp90.z = player->actor.world.pos.z - sLurePos.z;
- sp90.y = Math_Acot2F(sp90.z, sp90.x);
+ sp90.y = Math_Atan2F_XY(sp90.z, sp90.x);
D_809101B0 = (sp70 * D_809101BC) + sp90.y;
D_809101BC *= -1.0f;
@@ -2444,7 +2445,7 @@ void EnFishing_UpdateLure(EnFishing* this, PlayState* play) {
sLureRot.x = 0.0f;
if (CHECK_BTN_ALL(input->press.button, BTN_B)) {
D_809101C0 += 6.0f;
- Audio_PlaySfxAtPos(&D_8090D614, NA_SE_PL_WALK_SAND);
+ Audio_PlaySfxAtPos(&D_8090D614, NA_SE_PL_WALK_GROUND + SURFACE_SFX_OFFSET_SAND);
}
} else {
if (D_809101C0 > 150.0f) {
@@ -2456,9 +2457,9 @@ void EnFishing_UpdateLure(EnFishing* this, PlayState* play) {
}
Math_ApproachZeroF(&D_809101B4, 1.0f, 0.3f);
- Math_ApproachS(&D_809101B8, (D_809101B0 * 32768.0f) / M_PI, 3, spDC);
+ Math_ApproachS(&D_809101B8, RAD_TO_BINANG_ALT2(D_809101B0), 3, spDC);
- sLureRot.y = (D_809101B8 / 32768.0f) * M_PI;
+ sLureRot.y = BINANG_TO_RAD_ALT(D_809101B8);
sp90.x = 0.0f;
sp90.y = 0.0f;
@@ -2494,7 +2495,8 @@ void EnFishing_UpdateLure(EnFishing* this, PlayState* play) {
sp58 = this->actor.world.pos;
this->actor.prevPos = this->actor.world.pos = sLurePos;
- Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 30.0f, 30.0f, 0x44);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 30.0f, 30.0f,
+ UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40);
this->actor.world.pos = sp58;
D_80917278.y += -0.5f;
@@ -2713,7 +2715,7 @@ void func_809038A4(EnFishing* this, Input* input) {
sp24 = SQ(sp34.x) + SQ(sp34.y) + SQ(sp34.z);
if ((D_8090CD14 == 3) && (this->unk_19A == 0) && (D_8090CD0C == 0)) {
- Matrix_RotateYF((-this->actor.shape.rot.y / 32768.0f) * M_PI, MTXMODE_NEW);
+ Matrix_RotateYF(BINANG_TO_RAD_ALT(-this->actor.shape.rot.y), MTXMODE_NEW);
Matrix_MultVec3f(&sp34, &sp28);
if ((sp28.z > 0.0f) || (this->unk_1A4 < 40.0f)) {
@@ -2788,13 +2790,13 @@ void func_80903C60(EnFishing* this, u8 arg1) {
}
}
- Actor_PlaySfxAtPos(&this->actor, sfxId);
+ Actor_PlaySfx(&this->actor, sfxId);
}
void EnFishing_HandleAquariumDialog(EnFishing* this, PlayState* play) {
if (sLinkAge == 1) {
- if (gSaveContext.save.unk_EE4 & 0x7F) {
- if (gSaveContext.save.unk_EE4 & 0x80) {
+ if (gSaveContext.save.saveInfo.unk_EC0 & 0x7F) {
+ if (gSaveContext.save.saveInfo.unk_EC0 & 0x80) {
this->actor.textId = 0x40B1;
} else {
this->actor.textId = 0x4089;
@@ -2802,8 +2804,8 @@ void EnFishing_HandleAquariumDialog(EnFishing* this, PlayState* play) {
} else {
this->actor.textId = 0x40AE;
}
- } else if (gSaveContext.save.unk_EE4 & 0x7F000000) {
- if (gSaveContext.save.unk_EE4 & 0x80000000) {
+ } else if (gSaveContext.save.saveInfo.unk_EC0 & 0x7F000000) {
+ if (gSaveContext.save.saveInfo.unk_EC0 & 0x80000000) {
this->actor.textId = 0x40B1;
} else {
this->actor.textId = 0x4089;
@@ -2870,9 +2872,9 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
this->actor.uncullZoneScale = 50.0f;
if (this->unk_148 == 0) {
- sp118 = (player->actor.speedXZ * 0.15f) + 0.25f;
+ sp118 = (player->actor.speed * 0.15f) + 0.25f;
} else {
- sp118 = (player->actor.speedXZ * 0.3f) + 0.25f;
+ sp118 = (player->actor.speed * 0.3f) + 0.25f;
}
if ((D_80917200 != 0) || (sSubCamId != SUB_CAM_ID_DONE) ||
@@ -2963,10 +2965,10 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
sp12C = this->unk_1AC.y - this->actor.world.pos.y;
sp128 = this->unk_1AC.z - this->actor.world.pos.z;
- spFC = Math_FAtan2F(sp128, sp130);
+ spFC = Math_Atan2S_XY(sp128, sp130);
sp124 = sqrtf(SQ(sp130) + SQ(sp128));
- spFE = Math_FAtan2F(sp124, sp12C);
+ spFE = Math_Atan2S_XY(sp124, sp12C);
sp124 = sqrtf(SQ(sp130) + SQ(sp128) + SQ(sp12C));
if ((this->unk_198 != 0) && (this->unk_150 != 2) && (this->unk_150 != 3) && (this->unk_150 != 4)) {
@@ -3017,7 +3019,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
case 10:
this->unk_1AC = this->actor.home.pos;
- Math_ApproachF(&this->actor.speedXZ, 2.0f, 1.0f, 0.5f);
+ Math_ApproachF(&this->actor.speed, 2.0f, 1.0f, 0.5f);
Math_ApproachF(&this->unk_1A8, 4096.0f, 1.0f, 256.0f);
if (sp124 < 40.0f) {
@@ -3039,7 +3041,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
case 11:
this->unk_1AC = this->actor.home.pos;
- Math_ApproachF(&this->actor.speedXZ, 0.0f, 1.0f, 0.05f);
+ Math_ApproachF(&this->actor.speed, 0.0f, 1.0f, 0.05f);
Math_ApproachF(&this->unk_1A8, 0.0f, 1.0f, 256.0f);
if (sp124 >= 40.0f) {
@@ -3069,7 +3071,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
break;
case 0:
- Math_ApproachF(&this->actor.speedXZ, 1.0f, 1.0f, 0.05f);
+ Math_ApproachF(&this->actor.speed, 1.0f, 1.0f, 0.05f);
Math_ApproachF(&this->unk_1A8, 0.0f, 1.0f, 256.0f);
if (this->unk_172[0] == 0) {
@@ -3106,14 +3108,14 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
if ((this->actor.xzDistToPlayer < (250.0f * sp118)) || (this->unk_172[1] != 0)) {
Math_ApproachF(&this->unk_1A8, 8192.0f, 1.0f, 768.0f);
- Math_ApproachF(&this->actor.speedXZ, 4.2f, 1.0f, 0.75);
+ Math_ApproachF(&this->actor.speed, 4.2f, 1.0f, 0.75);
this->unk_188 = 1.2f;
this->unk_18C = 4000.0f;
this->unk_172[0] = 20;
} else {
this->unk_188 = 1.0f;
this->unk_18C = 2000.0f;
- Math_ApproachF(&this->actor.speedXZ, 1.5f, 1.0f, 0.1f);
+ Math_ApproachF(&this->actor.speed, 1.5f, 1.0f, 0.1f);
}
if ((this->unk_172[0] == 0) || (sp124 < 50.0f)) {
@@ -3135,7 +3137,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
Math_ApproachS(&this->unk_15E, 0, 0x14, 0x20);
if ((this->actor.xzDistToPlayer < (250.0f * sp118)) || (this->unk_172[1] != 0)) {
- Math_ApproachF(&this->actor.speedXZ, 3.0f, 1.0f, 0.75);
+ Math_ApproachF(&this->actor.speed, 3.0f, 1.0f, 0.75);
this->unk_188 = 1.0f;
this->unk_172[0] = 20;
this->unk_18C = 4000.0f;
@@ -3149,12 +3151,12 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
} else if (sp124 > 50.0f) {
this->unk_188 = 0.8f;
this->unk_18C = 1500.0f;
- Math_ApproachF(&this->actor.speedXZ, 1.0f, 1.0f, 0.1f);
+ Math_ApproachF(&this->actor.speed, 1.0f, 1.0f, 0.1f);
Math_ApproachF(&this->unk_1A8, 2048.0f, 1.0f, 128.0f);
} else {
this->unk_188 = 0.4f;
this->unk_18C = 500.0f;
- Math_ApproachZeroF(&this->actor.speedXZ, 1.0f, 0.02f);
+ Math_ApproachZeroF(&this->actor.speed, 1.0f, 0.02f);
Math_ApproachF(&this->unk_1A8, 0.0f, 1.0f, 256.0f);
}
@@ -3183,11 +3185,11 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
Math_ApproachS(&this->unk_15E, -0x1000, 0x14, 0x100);
if (this->actor.world.pos.y < (WATER_SURFACE_Y(play) - 20.0f)) {
- Math_ApproachF(&this->actor.speedXZ, 0.5f, 1.0f, 0.1f);
+ Math_ApproachF(&this->actor.speed, 0.5f, 1.0f, 0.1f);
} else {
- Math_ApproachZeroF(&this->actor.speedXZ, 1.0f, 0.01f);
+ Math_ApproachZeroF(&this->actor.speed, 1.0f, 0.01f);
- if ((this->actor.speedXZ == 0.0f) || (this->actor.world.pos.y > (WATER_SURFACE_Y(play) - 5.0f))) {
+ if ((this->actor.speed == 0.0f) || (this->actor.world.pos.y > (WATER_SURFACE_Y(play) - 5.0f))) {
this->unk_1AC.x = Rand_ZeroFloat(300.0f);
this->unk_1AC.z = Rand_ZeroFloat(300.0f);
this->unk_1AC.y = this->actor.floorHeight + 10.0f;
@@ -3201,7 +3203,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
EnFishing_SpawnRipple(&this->actor.projectedPos, play->specialEffects, &spB8, 30.0f, 400.0f,
150, 90);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_PL_CATCH_BOOMERANG);
+ Actor_PlaySfx(&this->actor, NA_SE_PL_CATCH_BOOMERANG);
break;
}
}
@@ -3221,7 +3223,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
if (sp124 > 40.0f) {
this->unk_188 = 0.7f;
this->unk_18C = 1200.0f;
- Math_ApproachF(&this->actor.speedXZ, 0.5f, 1.0f, 0.01f);
+ Math_ApproachF(&this->actor.speed, 0.5f, 1.0f, 0.01f);
Math_ApproachF(&this->unk_1A8, 2048.0f, 1.0f, 128.0f);
} else {
this->unk_150 = -1;
@@ -3284,7 +3286,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
this->unk_18C = 500.0f;
this->unk_172[0] = Rand_ZeroFloat(10.0f) + 2.0f;
}
- Math_ApproachF(&this->actor.speedXZ, -0.2f, 1.0f, 0.1f);
+ Math_ApproachF(&this->actor.speed, -0.2f, 1.0f, 0.1f);
this->unk_156 = 1;
} else {
if (this->unk_156 != 0) {
@@ -3292,7 +3294,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
this->unk_1A8 = 0.0f;
this->unk_18C = 3000.0f;
}
- Math_ApproachF(&this->actor.speedXZ, 3.0f, 1.0f, 0.15f);
+ Math_ApproachF(&this->actor.speed, 3.0f, 1.0f, 0.15f);
this->unk_156 = 0;
}
@@ -3376,7 +3378,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
this->unk_1AC.z = sLurePos.z + sp100.z;
this->unk_1AC.y = sLurePos.y - 10.0f;
this->unk_1A8 = 4096.0f;
- Math_ApproachF(&this->actor.speedXZ, this->unk_180 * 0.8f, 1.0f, 1.0f);
+ Math_ApproachF(&this->actor.speed, this->unk_180 * 0.8f, 1.0f, 1.0f);
if ((D_8090CD14 != 3) || (sLurePos.y > (WATER_SURFACE_Y(play) + 5.0f)) ||
(sqrtf(SQ(sLurePos.x) + SQ(sLurePos.z)) > 800.0f)) {
@@ -3401,7 +3403,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
this->unk_149 = 50;
sp134 = 2;
this->unk_1AC = sLurePos;
- Math_ApproachF(&this->actor.speedXZ, this->unk_180, 1.0f, 1.0f);
+ Math_ApproachF(&this->actor.speed, this->unk_180, 1.0f, 1.0f);
if ((D_8090CD14 != 3) || (this->unk_172[0] == 0) || (sLurePos.y > (WATER_SURFACE_Y(play) + 5.0f)) ||
(sqrtf(SQ(sLurePos.x) + SQ(sLurePos.z)) > 800.0f)) {
@@ -3466,7 +3468,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
case -3:
this->unk_149 = 50;
this->unk_1AC = sLurePos;
- Math_ApproachF(&this->actor.speedXZ, 2.0f, 1.0f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 2.0f, 1.0f, 1.0f);
if ((D_8090CD14 != 3) || (this->unk_172[0] == 0) || (sLurePos.y > (WATER_SURFACE_Y(play) + 5.0f)) ||
(sqrtf(SQ(sLurePos.x) + SQ(sLurePos.z)) > 800.0f)) {
@@ -3477,7 +3479,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
this->unk_18C = 2000.0f;
} else if (sp124 < 10.0f) {
if (sLurePos.y > (WATER_SURFACE_Y(play) - 10.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_JUMP_OUT_WATER);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_JUMP_OUT_WATER);
play_sound(NA_SE_PL_CATCH_BOOMERANG);
}
@@ -3539,7 +3541,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
this->unk_190 = 1.7f;
this->unk_194 = 7000.0f;
D_80917274 = 1;
- Audio_QueueSeqCmd(0x881A); // Changed from 0x81A in OoT
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_ENEMY | 0x800 | SEQ_FLAG_ASYNC);
D_809171F6 = 0;
if (this->unk_148 == 1) {
@@ -3598,8 +3600,8 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
for (spA2 = 0; spA2 < 100; spA2++) {
- Matrix_RotateYF(randPlusMinusPoint5Scaled(2.3561945f) +
- (((this->actor.yawTowardsPlayer + 0x8000) / 32768.0f) * M_PI),
+ Matrix_RotateYF(randPlusMinusPoint5Scaled(0.75f * M_PI) +
+ BINANG_TO_RAD_ALT(this->actor.yawTowardsPlayer + 0x8000),
MTXMODE_NEW);
Matrix_MultVec3f(&sp10C, &sp100);
@@ -3640,17 +3642,17 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
D_8091726C = 0.0f;
this->unk_188 = 1.6f;
this->unk_18C = 6000.0f;
- Math_ApproachF(&this->actor.speedXZ, 7.5f, 1.0f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 7.5f, 1.0f, 1.0f);
Math_ApproachS(&this->unk_168, 0x4E20, 2, 0xFA0);
} else {
if ((D_80917274 == 0) && (D_80917206 == 2)) {
this->unk_188 = 1.0f;
this->unk_18C = 2000.0f;
- Math_ApproachF(&this->actor.speedXZ, 3.0f, 1.0f, 0.2f);
+ Math_ApproachF(&this->actor.speed, 3.0f, 1.0f, 0.2f);
} else {
this->unk_188 = 1.4f;
this->unk_18C = 5000.0f;
- Math_ApproachF(&this->actor.speedXZ, 5.0f, 1.0f, 0.5f);
+ Math_ApproachF(&this->actor.speed, 5.0f, 1.0f, 0.5f);
}
if (this->unk_148 == 0) {
@@ -3675,7 +3677,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
D_8091726C = 1.3f - (this->unk_1A4 * 0.00899f * 1.4f);
}
- Math_ApproachF(&this->actor.speedXZ, 2.0f, 1.0f, 0.5f);
+ Math_ApproachF(&this->actor.speed, 2.0f, 1.0f, 0.5f);
if (this->unk_172[1] == 0) {
this->unk_14A = 0;
@@ -3696,7 +3698,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
}
if (D_80917274 || (D_80917206 != 2)) {
- if (this->actor.speedXZ < 3.0f) {
+ if (this->actor.speed < 3.0f) {
if (D_809171FE & 8) {
sp100.x = -0.8f;
} else {
@@ -3719,11 +3721,11 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
if ((SQ(sp10C.x) + SQ(sp10C.y) + SQ(sp10C.z)) > SQ(20.0f)) {
Math_ApproachF(&this->actor.world.pos.x, sReelLinePos[LINE_SEG_COUNT - 2].x, 0.2f,
- 2.0f * (this->actor.speedXZ * 1.5f));
+ 2.0f * (this->actor.speed * 1.5f));
Math_ApproachF(&this->actor.world.pos.y, sReelLinePos[LINE_SEG_COUNT - 2].y, 0.2f,
- 2.0f * (this->actor.speedXZ * 1.5f) * 5.0f * 0.1f);
+ 2.0f * (this->actor.speed * 1.5f) * 5.0f * 0.1f);
Math_ApproachF(&this->actor.world.pos.z, sReelLinePos[LINE_SEG_COUNT - 2].z, 0.2f,
- 2.0f * (this->actor.speedXZ * 1.5f));
+ 2.0f * (this->actor.speed * 1.5f));
}
if (CHECK_BTN_ALL(input->cur.button, BTN_A) || (input->rel.stick_y < -30)) {
@@ -3743,14 +3745,14 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
if ((D_80917272 == 0) && (D_80917274 == 0)) {
// Assignment of OoT's D_80B7E086 here removed in MM
- if (((sLinkAge == 1) && (gSaveContext.save.unk_EE4 & 0x400)) ||
- ((sLinkAge != 1) && (gSaveContext.save.unk_EE4 & 0x800))) {
+ if (((sLinkAge == 1) && (gSaveContext.save.saveInfo.unk_EC0 & 0x400)) ||
+ ((sLinkAge != 1) && (gSaveContext.save.saveInfo.unk_EC0 & 0x800))) {
// Assignment of OoT's D_80B7A67C here removed in MM, this is now an empty branch
}
} else {
// Assignment of OoT's D_80B7E086 here removed in MM
Rumble_Override(0.0f, 1, 3, 1);
- Audio_QueueSeqCmd(0x100A00FF);
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 10);
}
this->unk_150 = this->unk_152 = 0;
@@ -3774,7 +3776,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
player->unk_B28 = 3;
Rumble_Override(0.0f, 1, 3, 1);
D_809171D8++;
- Cutscene_Start(play, &play->csCtx);
+ Cutscene_StartManual(play, &play->csCtx);
D_8090CD4C = 100;
D_80911F48 = 45.0f;
D_8090CD14 = 5;
@@ -3803,7 +3805,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
sp10C.y = 10.0f;
sp10C.z = 50.0f;
}
- Matrix_RotateYF((player->actor.shape.rot.y / 32768.0f) * M_PI, MTXMODE_NEW);
+ Matrix_RotateYF(BINANG_TO_RAD_ALT(player->actor.shape.rot.y), MTXMODE_NEW);
Matrix_MultVec3f(&sp10C, &sSubCamEye);
sSubCamEye.x += player->actor.world.pos.x;
@@ -3818,7 +3820,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
}
if (this->unk_172[0] == 90) {
- Audio_QueueSeqCmd(0x8924); // changed from 0x924 in OoT
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_GET_HEART | 0x900 | SEQ_FLAG_ASYNC);
D_8090CCFC = 40;
if (this->unk_148 == 0) {
@@ -3847,9 +3849,12 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
sp10C.y = -10.0f;
sp10C.z = 5.0f;
Matrix_MultVec3f(&sp10C, &sp100);
- Math_ApproachF(&this->actor.world.pos.x, player->bodyPartsPos[15].x + sp100.x, 1.0f, 6.0f);
- Math_ApproachF(&this->actor.world.pos.y, player->bodyPartsPos[15].y + sp100.y, 1.0f, 6.0f);
- Math_ApproachF(&this->actor.world.pos.z, player->bodyPartsPos[15].z + sp100.z, 1.0f, 6.0f);
+ Math_ApproachF(&this->actor.world.pos.x, player->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].x + sp100.x, 1.0f,
+ 6.0f);
+ Math_ApproachF(&this->actor.world.pos.y, player->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].y + sp100.y, 1.0f,
+ 6.0f);
+ Math_ApproachF(&this->actor.world.pos.z, player->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].z + sp100.z, 1.0f,
+ 6.0f);
D_809101C0 = 188.0f;
@@ -3859,13 +3864,13 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) ||
Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) {
if (Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
if (play->msgCtx.choiceIndex == 0) {
if (D_8090CCF0 == 0.0f) {
D_8090CCF0 = this->unk_1A4;
D_809171D0 = this->unk_148;
D_809171D2 = D_80917206;
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else if ((this->unk_148 == 0) && (D_809171D0 == 0) &&
((s16)this->unk_1A4 < (s16)D_8090CCF0)) {
this->unk_1CD = 1;
@@ -3891,7 +3896,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) ||
Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) {
if (Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
if (play->msgCtx.choiceIndex != 0) {
f32 temp1 = D_8090CCF0;
s16 temp2 = D_809171D0;
@@ -3929,7 +3934,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
D_809101C4 = 520.0f;
D_809101C0 = 195.0f;
- Audio_QueueSeqCmd(0x100A00FF);
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 10);
D_809171F6 = 20;
D_8090CD4C = 3;
}
@@ -3951,7 +3956,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
D_8090CF18 = 3;
}
- Math_ApproachF(&this->actor.speedXZ, 5.0f, 1.0f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 5.0f, 1.0f, 1.0f);
if (sp124 < 20.0f) {
Math_ApproachS(&this->unk_168, 0x4E20, 2, 0xFA0);
@@ -4010,7 +4015,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
spF6 = -0x1F40;
}
- if (this->actor.speedXZ >= 3.2f) {
+ if (this->actor.speed >= 3.2f) {
Math_ApproachS(&this->unk_166, spF6, 2, 0x4E20);
} else {
Math_ApproachS(&this->unk_166, spF6, 3, 0xBB8);
@@ -4046,7 +4051,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
Math_ApproachS(&this->unk_15A, this->unk_160, spF0, spEE);
Math_ApproachS(&this->unk_15C, this->unk_162, spFA, 0x2000);
- if (this->actor.speedXZ <= 0.5f) {
+ if (this->actor.speed <= 0.5f) {
Math_ApproachS(&this->actor.shape.rot.x, 0, 10, this->unk_170);
Math_ApproachS(&this->unk_170, 0x500, 1, 0x20);
} else {
@@ -4077,14 +4082,14 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
if ((this->actor.world.pos.y < WATER_SURFACE_Y(play)) &&
(this->actor.world.pos.y > (WATER_SURFACE_Y(play) - 10.0f)) && !(this->unk_154 & 1) &&
- (this->actor.speedXZ > 0.0f)) {
+ (this->actor.speed > 0.0f)) {
Vec3f pos = this->actor.world.pos;
pos.y = WATER_SURFACE_Y(play);
EnFishing_SpawnRipple(&this->actor.projectedPos, play->specialEffects, &pos, 80.0f, 500.0f, 150, 90);
}
- if ((this->actor.speedXZ > 0.0f) || (this->unk_150 == 5)) {
+ if ((this->actor.speed > 0.0f) || (this->unk_150 == 5)) {
f32 velocityY = this->actor.velocity.y;
spD8 = this->unk_1A4 * 0.1f;
@@ -4093,24 +4098,25 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
this->actor.prevPos.y -= spD8;
this->actor.velocity.y = -1.0f;
if (KREG(90) == 0) { // Check added in MM
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 30.0f, 100.0f, 0x45);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 30.0f, 100.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40);
}
this->actor.world.pos.y += spD8;
this->actor.prevPos.y += spD8;
this->actor.velocity.y = velocityY;
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
this->unk_198 = 20;
}
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
if (this->actor.world.pos.y > WATER_SURFACE_Y(play)) {
this->unk_17C = Rand_ZeroFloat(3.0f) + 3.0f;
this->actor.velocity.x = this->actor.world.pos.x * -0.003f;
this->actor.velocity.z = this->actor.world.pos.z * -0.003f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FISH_LEAP);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FISH_LEAP);
func_809036BC(this, play);
if (Rand_ZeroOne() < 0.5f) {
@@ -4222,20 +4228,20 @@ void EnFishing_DrawFish(Actor* thisx, PlayState* play) {
func_8012C28C(play->state.gfxCtx);
Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW);
- Matrix_RotateYF(((this->unk_15A + this->actor.shape.rot.y) / 32768.0f) * M_PI, MTXMODE_APPLY);
- Matrix_RotateXFApply(((this->unk_158 + this->actor.shape.rot.x) / 32768.0f) * M_PI);
- Matrix_RotateZF(((this->unk_15C + this->actor.shape.rot.z) / 32768.0f) * M_PI, MTXMODE_APPLY);
+ Matrix_RotateYF(BINANG_TO_RAD_ALT(this->unk_15A + this->actor.shape.rot.y), MTXMODE_APPLY);
+ Matrix_RotateXFApply(BINANG_TO_RAD_ALT(this->unk_158 + this->actor.shape.rot.x));
+ Matrix_RotateZF(BINANG_TO_RAD_ALT(this->unk_15C + this->actor.shape.rot.z), MTXMODE_APPLY);
Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY);
if (this->unk_148 == 0) {
- Matrix_RotateYF((this->unk_164 * (M_PI / 32768)) - (M_PI / 2), MTXMODE_APPLY);
+ Matrix_RotateYF(BINANG_TO_RAD(this->unk_164) - (M_PI / 2), MTXMODE_APPLY);
Matrix_Translate(0.0f, 0.0f, this->unk_164 * 10.0f * 0.01f, MTXMODE_APPLY);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnFishing_FishOverrideLimbDraw, EnFishing_FishPostLimbDraw, &this->actor);
} else {
Matrix_Translate(0.0f, 0.0f, 3000.0f, MTXMODE_APPLY);
- Matrix_RotateYF(this->unk_164 * (M_PI / 32768), MTXMODE_APPLY);
+ Matrix_RotateYF(BINANG_TO_RAD(this->unk_164), MTXMODE_APPLY);
Matrix_Translate(0.0f, 0.0f, -3000.0f, MTXMODE_APPLY);
Matrix_RotateYF(-(M_PI / 2), MTXMODE_APPLY);
@@ -4250,7 +4256,7 @@ void EnFishing_HandleReedContact(FishingProp* prop, Vec3f* entityPos) {
f32 distXZ = sqrtf(SQ(dx) + SQ(dz));
if (distXZ <= 20.0f) {
- prop->rotY = Math_Acot2F(dz, dx);
+ prop->rotY = Math_Atan2F_XY(dz, dx);
Math_ApproachF(&prop->rotX, (20.0f - distXZ) * 0.03f, 0.2f, 0.2f);
}
@@ -4262,7 +4268,7 @@ void EnFishing_HandleLilyPadContact(FishingProp* prop, Vec3f* entityPos, u8 fish
f32 distXZ = sqrtf(SQ(dx) + SQ(dz));
if (distXZ <= 40.0f) {
- Math_ApproachS(&prop->lilyPadAngle, Math_FAtan2F(dz, dx), 10, 0x300);
+ Math_ApproachS(&prop->lilyPadAngle, Math_Atan2S_XY(dz, dx), 10, 0x300);
}
if (fishTimer && (distXZ <= 60.0f)) {
@@ -4351,7 +4357,7 @@ void EnFishing_DrawPondProps(PlayState* play) {
for (i = 0; i < POND_PROP_COUNT; i++) {
if (prop->type == FS_PROP_REED) {
if (flag == 0) {
- gSPDisplayList(POLY_XLU_DISP++, gFishingReedSetupDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFishingReedMaterialDL);
flag++;
}
@@ -4364,7 +4370,7 @@ void EnFishing_DrawPondProps(PlayState* play) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, gFishingReedVtxDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFishingReedModelDL);
}
}
@@ -4376,7 +4382,7 @@ void EnFishing_DrawPondProps(PlayState* play) {
for (i = 0; i < POND_PROP_COUNT; i++) {
if (prop->type == FS_PROP_WOOD_POST) {
if (flag == 0) {
- gSPDisplayList(POLY_OPA_DISP++, gFishingWoodPostSetupDL);
+ gSPDisplayList(POLY_OPA_DISP++, gFishingWoodPostMaterialDL);
flag++;
}
@@ -4386,7 +4392,7 @@ void EnFishing_DrawPondProps(PlayState* play) {
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_OPA_DISP++, gFishingWoodPostVtxDL);
+ gSPDisplayList(POLY_OPA_DISP++, gFishingWoodPostModelDL);
}
}
@@ -4398,20 +4404,20 @@ void EnFishing_DrawPondProps(PlayState* play) {
for (i = 0; i < POND_PROP_COUNT; i++) {
if (prop->type == FS_PROP_LILY_PAD) {
if (flag == 0) {
- gSPDisplayList(POLY_XLU_DISP++, gFishingLilyPadSetupDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFishingLilyPadMaterialDL);
flag++;
}
if (prop->shouldDraw) {
Matrix_Translate(prop->pos.x, prop->pos.y, prop->pos.z, MTXMODE_NEW);
Matrix_Scale(prop->scale, 1.0f, prop->scale, MTXMODE_APPLY);
- Matrix_RotateYF(prop->lilyPadAngle * (M_PI / 32768), MTXMODE_APPLY);
+ Matrix_RotateYF(BINANG_TO_RAD(prop->lilyPadAngle), MTXMODE_APPLY);
Matrix_Translate(0.0f, 0.0f, 20.0f, MTXMODE_APPLY);
Matrix_RotateYF(prop->rotY, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, gFishingLilyPadVtxDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFishingLilyPadModelDL);
}
}
@@ -4423,7 +4429,7 @@ void EnFishing_DrawPondProps(PlayState* play) {
for (i = 0; i < POND_PROP_COUNT; i++) {
if (prop->type == FS_PROP_ROCK) {
if (flag == 0) {
- gSPDisplayList(POLY_OPA_DISP++, gFishingRockSetupDL);
+ gSPDisplayList(POLY_OPA_DISP++, gFishingRockMaterialDL);
flag++;
}
@@ -4434,7 +4440,7 @@ void EnFishing_DrawPondProps(PlayState* play) {
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_OPA_DISP++, gFishingRockVtxDL);
+ gSPDisplayList(POLY_OPA_DISP++, gFishingRockModelDL);
}
}
@@ -4557,9 +4563,9 @@ void EnFishing_UpdateGroupFishes(PlayState* play) {
dx = fish->unk_10.x - fish->pos.x;
dy = fish->unk_10.y - fish->pos.y;
dz = fish->unk_10.z - fish->pos.z;
- spD4 = Math_FAtan2F(dz, dx);
+ spD4 = Math_Atan2S_XY(dz, dx);
dist = sqrtf(SQ(dx) + SQ(dz));
- spD6 = Math_FAtan2F(dist, dy);
+ 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);
@@ -4650,20 +4656,20 @@ void EnFishing_DrawGroupFishes(PlayState* play) {
for (i = 0; i < GROUP_FISH_COUNT; i++) {
if (fish->type != FS_GROUP_FISH_NONE) {
if (flag == 0) {
- gSPDisplayList(POLY_OPA_DISP++, gFishingGroupFishSetupDL);
+ gSPDisplayList(POLY_OPA_DISP++, gFishingGroupFishMaterialDL);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 155, 155, 155, 255);
flag++;
}
if (fish->shouldDraw) {
Matrix_Translate(fish->pos.x, fish->pos.y, fish->pos.z, MTXMODE_NEW);
- Matrix_RotateYF(((f32)fish->unk_3E * M_PI) / 32768.0f, MTXMODE_APPLY);
- Matrix_RotateXFApply((-(f32)fish->unk_3C * M_PI) / 32768.0f);
+ Matrix_RotateYF(BINANG_TO_RAD_ALT2(fish->unk_3E), MTXMODE_APPLY);
+ Matrix_RotateXFApply(BINANG_TO_RAD_ALT2(-(f32)fish->unk_3C));
Matrix_Scale(fish->unk_2C * scale, scale, scale, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_OPA_DISP++, gFishingGroupFishVtxDL);
+ gSPDisplayList(POLY_OPA_DISP++, gFishingGroupFishModelDL);
}
}
fish++;
@@ -4679,7 +4685,7 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) {
case 0:
if (D_809171FC == 0) {
if (sLinkAge != 1) {
- if ((gSaveContext.save.unk_EE4 & 0x100) && !(gSaveContext.save.unk_EE4 & 0x200)) {
+ if ((gSaveContext.save.saveInfo.unk_EC0 & 0x100) && !(gSaveContext.save.saveInfo.unk_EC0 & 0x200)) {
this->actor.textId = 0x4093;
} else {
this->actor.textId = 0x407B;
@@ -4697,9 +4703,9 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) {
if (D_809171FC == 0) {
this->unk_154 = 1;
if (sLinkAge != 1) {
- gSaveContext.save.unk_EE4 |= 0x200;
+ gSaveContext.save.saveInfo.unk_EC0 |= 0x200;
} else {
- gSaveContext.save.unk_EE4 |= 0x100;
+ gSaveContext.save.saveInfo.unk_EC0 |= 0x100;
}
} else {
this->unk_154 = 10;
@@ -4711,26 +4717,26 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) {
case 1:
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
switch (play->msgCtx.choiceIndex) {
case 0:
- if (gSaveContext.save.playerData.rupees >= 20) {
+ if (gSaveContext.save.saveInfo.playerData.rupees >= 20) {
Rupees_ChangeBy(-20);
if (!Rumble_ControllerOneHasRumblePak()) {
this->actor.textId = 0x407C;
} else {
this->actor.textId = 0x407D;
}
- func_80151938(play, this->actor.textId);
+ Message_ContinueTextbox(play, this->actor.textId);
this->unk_154 = 2;
} else {
- func_80151938(play, 0x407E);
+ Message_ContinueTextbox(play, 0x407E);
this->unk_154 = 3;
}
break;
case 1:
- func_80151938(play, 0x2D);
+ Message_ContinueTextbox(play, 0x2D);
this->unk_154 = 3;
break;
}
@@ -4739,15 +4745,15 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) {
case 2:
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
- func_80151938(play, 0x407F);
+ Message_CloseTextbox(play);
+ Message_ContinueTextbox(play, 0x407F);
this->unk_154 = 4;
}
break;
case 3:
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->unk_154 = 0;
}
if (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) {
@@ -4757,16 +4763,16 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) {
case 4:
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
switch (play->msgCtx.choiceIndex) {
case 0:
D_8090CCF8 = D_809171CC;
- func_80151938(play, 0x4080);
+ Message_ContinueTextbox(play, 0x4080);
this->unk_154 = 5;
break;
case 1:
- func_80151938(play, 0x407F);
+ Message_ContinueTextbox(play, 0x407F);
break;
}
}
@@ -4774,7 +4780,7 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) {
case 5:
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
play->interfaceCtx.unk_27E = 1;
play->startPlayerFishing(play);
@@ -4782,8 +4788,8 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) {
D_8090CD04 = 20;
this->unk_154 = 0;
- if ((gSaveContext.save.unk_EE4 & 0xFF0000) < 0xFF0000) {
- gSaveContext.save.unk_EE4 += 0x10000;
+ if ((gSaveContext.save.saveInfo.unk_EC0 & 0xFF0000) < 0xFF0000) {
+ gSaveContext.save.saveInfo.unk_EC0 += 0x10000;
}
}
break;
@@ -4791,11 +4797,11 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) {
case 10:
if (D_8090CD0C != 0) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
switch (play->msgCtx.choiceIndex) {
case 0:
- func_80151938(play, 0x40B2);
+ Message_ContinueTextbox(play, 0x40B2);
D_8090CD08 = 1;
D_8090CD0C = 0;
this->unk_154 = 20;
@@ -4807,7 +4813,7 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) {
}
} else {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
switch (play->msgCtx.choiceIndex) {
case 0:
@@ -4831,12 +4837,12 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) {
this->actor.textId = 0x409B;
this->unk_154 = 11;
}
- func_80151938(play, this->actor.textId);
+ Message_ContinueTextbox(play, this->actor.textId);
break;
case 1:
if (D_8090CD00 > 36000) {
D_8090CD00 = 30000;
- func_80151938(play, 0x4088);
+ Message_ContinueTextbox(play, 0x4088);
} else {
if (D_809171CA == 0) {
if (D_809171D6 == 0) {
@@ -4845,9 +4851,9 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) {
}
if ((D_80917206 == 2) && (D_8090D638[D_809171D6] == 0x408D)) {
- func_80151938(play, 0x40AF);
+ Message_ContinueTextbox(play, 0x40AF);
} else {
- func_80151938(play, D_8090D638[D_809171D6]);
+ Message_ContinueTextbox(play, D_8090D638[D_809171D6]);
}
D_809171D6++;
@@ -4866,9 +4872,9 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) {
break;
case 2:
if (D_809171D8 == 0) {
- func_80151938(play, 0x4085);
+ Message_ContinueTextbox(play, 0x4085);
} else if (sLinkAge == 1) {
- func_80151938(play, 0x4092);
+ Message_ContinueTextbox(play, 0x4092);
}
this->unk_154 = 22;
break;
@@ -4883,7 +4889,7 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) {
Message_ShouldAdvance(play)) {
s32 getItemId;
- func_801477B4(play);
+ Message_CloseTextbox(play);
if (D_809171D0 == 0) {
D_809171CC = D_8090CCF0;
@@ -4892,29 +4898,29 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) {
if (sLinkAge == 1) {
f32 temp;
- gSaveContext.save.unk_EE4 &= 0xFFFFFF00;
- gSaveContext.save.unk_EE4 |= ((s16)D_809171CC & 0x7F);
- temp = (gSaveContext.save.unk_EE4 & 0x7F000000) >> 0x18;
+ gSaveContext.save.saveInfo.unk_EC0 &= 0xFFFFFF00;
+ gSaveContext.save.saveInfo.unk_EC0 |= ((s16)D_809171CC & 0x7F);
+ temp = (gSaveContext.save.saveInfo.unk_EC0 & 0x7F000000) >> 0x18;
if (temp < D_809171CC) {
- gSaveContext.save.unk_EE4 &= 0xFFFFFF;
- gSaveContext.save.unk_EE4 |= ((s16)D_809171CC & 0x7F) << 0x18;
+ gSaveContext.save.saveInfo.unk_EC0 &= 0xFFFFFF;
+ gSaveContext.save.saveInfo.unk_EC0 |= ((s16)D_809171CC & 0x7F) << 0x18;
if (D_809171D2 == 2) {
- gSaveContext.save.unk_EE4 |= 0x80000000;
+ gSaveContext.save.saveInfo.unk_EC0 |= 0x80000000;
}
}
if (D_809171D2 == 2) {
- gSaveContext.save.unk_EE4 |= 0x80;
+ gSaveContext.save.saveInfo.unk_EC0 |= 0x80;
this->unk_154 = 0;
break;
}
} else {
- gSaveContext.save.unk_EE4 &= 0xFFFFFF;
- gSaveContext.save.unk_EE4 |= ((s16)D_809171CC & 0x7F) << 0x18;
+ gSaveContext.save.saveInfo.unk_EC0 &= 0xFFFFFF;
+ gSaveContext.save.saveInfo.unk_EC0 |= ((s16)D_809171CC & 0x7F) << 0x18;
if (D_809171D2 == 2) {
- gSaveContext.save.unk_EE4 |= 0x80000000;
+ gSaveContext.save.saveInfo.unk_EC0 |= 0x80000000;
this->unk_154 = 0;
break;
}
@@ -4931,14 +4937,14 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) {
}
if (sLinkAge == 1) {
- if ((D_809171CC >= 50.0f) && !(gSaveContext.save.unk_EE4 & 0x400)) {
- gSaveContext.save.unk_EE4 |= 0x400;
+ if ((D_809171CC >= 50.0f) && !(gSaveContext.save.saveInfo.unk_EC0 & 0x400)) {
+ gSaveContext.save.saveInfo.unk_EC0 |= 0x400;
getItemId = GI_HEART_PIECE;
sSinkingLureLocation = Rand_ZeroFloat(3.999f) + 1.0f;
}
} else {
- if ((D_809171CC >= 60.0f) && !(gSaveContext.save.unk_EE4 & 0x800)) {
- gSaveContext.save.unk_EE4 |= 0x800;
+ if ((D_809171CC >= 60.0f) && !(gSaveContext.save.saveInfo.unk_EC0 & 0x800)) {
+ gSaveContext.save.saveInfo.unk_EC0 |= 0x800;
getItemId = GI_SKULL_TOKEN;
sSinkingLureLocation = Rand_ZeroFloat(3.999f) + 1.0f;
}
@@ -4949,21 +4955,21 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) {
}
this->actor.parent = NULL;
- Actor_PickUp(&this->actor, play, getItemId, 2000.0f, 1000.0f);
+ Actor_OfferGetItem(&this->actor, play, getItemId, 2000.0f, 1000.0f);
this->unk_154 = 23;
}
break;
case 20:
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->unk_154 = 0;
}
break;
case 21:
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
switch (play->msgCtx.choiceIndex) {
case 0:
@@ -4971,9 +4977,9 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) {
break;
case 1:
if (D_809171D8 == 0) {
- func_80151938(play, 0x4085);
+ Message_ContinueTextbox(play, 0x4085);
} else if (sLinkAge == 1) {
- func_80151938(play, 0x4092);
+ Message_ContinueTextbox(play, 0x4092);
}
this->unk_154 = 22;
break;
@@ -4998,7 +5004,7 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
this->unk_154 = 24;
} else {
- Actor_PickUp(&this->actor, play, GI_SKULL_TOKEN, 2000.0f, 1000.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_SKULL_TOKEN, 2000.0f, 1000.0f);
}
break;
@@ -5101,9 +5107,9 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
}
if (D_8090CD08 == 0) {
- gSaveContext.save.unk_EE4 |= 0x1000;
+ gSaveContext.save.saveInfo.unk_EC0 |= 0x1000;
} else if (D_8090CD08 == 1) {
- gSaveContext.save.unk_EE4 &= ~0x1000;
+ gSaveContext.save.saveInfo.unk_EC0 &= ~0x1000;
}
if (D_8090CCFC != 0) {
@@ -5129,7 +5135,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
if ((D_809171FC != 0) && (D_8090CD4C == 0) && (player->actor.world.pos.z > 1360.0f) &&
(fabsf(player->actor.world.pos.x) < 25.0f)) {
player->actor.world.pos.z = 1360.0f;
- player->actor.speedXZ = 0.0f;
+ player->actor.speed = 0.0f;
if (D_8090CD50 == 0) {
D_8090CD4C = 10;
@@ -5144,7 +5150,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
D_8090CD4C = 20;
Rumble_Override(0.0f, 150, 10, 10);
play_sound(NA_SE_SY_TRE_BOX_APPEAR);
- Audio_QueueSeqCmd(0x101400FF);
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 20);
}
if (D_8090CD50 != 0) {
@@ -5176,7 +5182,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
spFC.x = sLurePos.x - player->actor.world.pos.x;
spFC.z = sLurePos.z - player->actor.world.pos.z;
lureDistXZ = sqrtf(SQXZ(spFC));
- Matrix_RotateYF(Math_Acot2F(spFC.z, spFC.x), MTXMODE_NEW);
+ Matrix_RotateYF(Math_Atan2F_XY(spFC.z, spFC.x), MTXMODE_NEW);
sp114.x = 0.0f;
sp114.y = 0.0f;
@@ -5272,7 +5278,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
mainCam->at = sSubCamAt;
}
func_80169AFC(play, sSubCamId, 0);
- Cutscene_End(play, &play->csCtx);
+ Cutscene_StopManual(play, &play->csCtx);
D_8090CD4C = 0;
sSubCamId = SUB_CAM_ID_DONE;
func_800F6834(play, 0);
@@ -5282,11 +5288,11 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
break;
case 10:
- Cutscene_Start(play, &play->csCtx);
+ Cutscene_StartManual(play, &play->csCtx);
sSubCamId = Play_CreateSubCamera(play);
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
Play_ChangeCameraStatus(play, sSubCamId, CAM_STATUS_ACTIVE);
- func_800B7298(play, &this->actor, 4);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_4);
mainCam = Play_GetCamera(play, CAM_ID_MAIN);
sSubCamEye.x = mainCam->eye.x;
@@ -5302,7 +5308,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
// fallthrough
case 11:
player->actor.world.pos.z = 1360.0f;
- player->actor.speedXZ = 0.0f;
+ player->actor.speed = 0.0f;
if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) {
Camera* mainCam = Play_GetCamera(play, CAM_ID_MAIN);
@@ -5312,8 +5318,8 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
mainCam->at = sSubCamAt;
func_80169AFC(play, sSubCamId, 0);
- Cutscene_End(play, &play->csCtx);
- func_800B7298(play, &this->actor, 6);
+ Cutscene_StopManual(play, &play->csCtx);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_END);
D_8090CD4C = 0;
sSubCamId = SUB_CAM_ID_DONE;
D_8090CD50 = 30;
@@ -5323,11 +5329,11 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
break;
case 20:
- Cutscene_Start(play, &play->csCtx);
+ Cutscene_StartManual(play, &play->csCtx);
sSubCamId = Play_CreateSubCamera(play);
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
Play_ChangeCameraStatus(play, sSubCamId, CAM_STATUS_ACTIVE);
- func_800B7298(play, &this->actor, 4);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_4);
mainCam = Play_GetCamera(play, CAM_ID_MAIN);
sSubCamEye.x = mainCam->eye.x;
@@ -5352,13 +5358,13 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
case 22:
if (D_8090CD50 == 30) {
- Audio_QueueSeqCmd(0x8922); // changed from 0x922 to 0x8922 in MM
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_GET_ITEM | 0x900 | SEQ_FLAG_ASYNC);
}
D_8090CD54 = 1;
Math_ApproachF(&D_80911F64, 71.0f, 0.5f, 3.0f);
- Matrix_RotateYF(BINANG_TO_RAD(player->actor.shape.rot.y), MTXMODE_NEW);
+ Matrix_RotateYF(BINANG_TO_RAD_ALT(player->actor.shape.rot.y), MTXMODE_NEW);
sp114.x = Math_SinS(play->gameplayFrames * 0x1000);
sp114.y = D_80911F64;
@@ -5403,7 +5409,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
if (Message_ShouldAdvance(play)) {
Camera* mainCam = Play_GetCamera(play, CAM_ID_MAIN);
- func_801477B4(play);
+ Message_CloseTextbox(play);
if (play->msgCtx.choiceIndex == 0) {
D_80917206 = 2;
D_809171D6 = 0;
@@ -5413,8 +5419,8 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
mainCam->eyeNext = sSubCamEye;
mainCam->at = sSubCamAt;
func_80169AFC(play, sSubCamId, 0);
- Cutscene_End(play, &play->csCtx);
- func_800B7298(play, &this->actor, 6); // arg2 changed from 7 to 6 in MM
+ Cutscene_StopManual(play, &play->csCtx);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_END);
D_8090CD4C = 0;
sSubCamId = SUB_CAM_ID_DONE;
player->unk_B28 = -5;
@@ -5450,7 +5456,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
}
if ((player->actor.floorHeight < (WATER_SURFACE_Y(play) - 3.0f)) &&
- (player->actor.world.pos.y < (player->actor.floorHeight + 3.0f)) && (player->actor.speedXZ > 1.0f) &&
+ (player->actor.world.pos.y < (player->actor.floorHeight + 3.0f)) && (player->actor.speed > 1.0f) &&
((play->gameplayFrames % 2) == 0)) {
Vec3f pos;
@@ -5461,7 +5467,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
}
if ((player->actor.floorHeight < WATER_SURFACE_Y(play)) &&
- (player->actor.floorHeight > (WATER_SURFACE_Y(play) - 10.0f)) && (player->actor.speedXZ >= 4.0f) &&
+ (player->actor.floorHeight > (WATER_SURFACE_Y(play) - 10.0f)) && (player->actor.speed >= 4.0f) &&
((play->gameplayFrames % 4) == 0)) {
s16 i;
@@ -5633,15 +5639,15 @@ void EnFishing_DrawOwner(Actor* thisx, PlayState* play) {
if (D_809171F6 == 0) {
if (sLinkAge != 1) {
- Audio_QueueSeqCmd(0x8019); // Changed from 0x19 in OoT
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_CLEAR_EVENT | SEQ_FLAG_ASYNC);
} else {
- Audio_QueueSeqCmd(0x8027); // Changed from 0x27 in OoT
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_MUSIC_BOX_HOUSE | SEQ_FLAG_ASYNC);
}
if (sLinkAge != 1) {
- Audio_QueueSeqCmd(0x8019); // Changed from 0x19 in OoT
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_CLEAR_EVENT | SEQ_FLAG_ASYNC);
} else {
- Audio_QueueSeqCmd(0x8027); // Changed from 0x27 in OoT
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_MUSIC_BOX_HOUSE | SEQ_FLAG_ASYNC);
}
}
}
diff --git a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.h b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.h
index 5af536dbb..a3dcb3a95 100644
--- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.h
+++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.h
@@ -61,6 +61,4 @@ typedef struct EnFishing {
/* 0x248 */ ColliderJntSphElement colliderElements[12];
} EnFishing; // size = 0x548
-extern const ActorInit En_Fishing_InitVars;
-
#endif // Z_EN_FISHING_H
diff --git a/src/overlays/actors/ovl_En_Floormas/overlay.cfg b/src/overlays/actors/ovl_En_Floormas/overlay.cfg
deleted file mode 100644
index 16ece1e42..000000000
--- a/src/overlays/actors/ovl_En_Floormas/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Floormas
-z_en_floormas.c
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 92330d25a..ffd456af4 100644
--- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c
+++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c
@@ -59,7 +59,7 @@ void func_808D2D30(EnFloormas* this, PlayState* play);
void func_808D2DC0(EnFloormas* this, PlayState* play);
void func_808D3754(Actor* thisx, PlayState* play);
-const ActorInit En_Floormas_InitVars = {
+ActorInit En_Floormas_InitVars = {
ACTOR_EN_FLOORMAS,
ACTORCAT_ENEMY,
FLAGS,
@@ -163,7 +163,7 @@ void EnFloormas_Init(Actor* thisx, PlayState* play2) {
this->actor.params = ENFLOORMAS_GET_7FFF(&this->actor);
if (params != 0) {
- this->actor.flags |= ACTOR_FLAG_80;
+ this->actor.flags |= ACTOR_FLAG_REACT_TO_LENS;
this->actor.draw = func_808D3754;
}
@@ -176,18 +176,18 @@ void EnFloormas_Init(Actor* thisx, PlayState* play2) {
this->actor.parent = Actor_SpawnAsChildAndCutscene(
&play->actorCtx, play, ACTOR_EN_FLOORMAS, this->actor.world.pos.x, this->actor.world.pos.y,
- this->actor.world.pos.z, 0, 0, 0, params + 0x10, -1, this->actor.unk20, NULL);
+ this->actor.world.pos.z, 0, 0, 0, params + 0x10, CS_ID_NONE, this->actor.halfDaysBits, NULL);
if (this->actor.parent == NULL) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
this->actor.child = Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_FLOORMAS, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0,
- params + 0x10, -1, this->actor.unk20, NULL);
+ params + 0x10, CS_ID_NONE, this->actor.halfDaysBits, NULL);
if (this->actor.child == NULL) {
- Actor_MarkForDeath(this->actor.parent);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(this->actor.parent);
+ Actor_Kill(&this->actor);
return;
}
@@ -224,7 +224,7 @@ void func_808D0930(EnFloormas* this, PlayState* play) {
func_808D19D4((EnFloormas*)this->actor.child);
func_808D19D4((EnFloormas*)this->actor.parent);
func_808D19D4(this);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KUSAMUSHI_HIDE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KUSAMUSHI_HIDE);
} else {
Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0x90);
func_808D1ED4(this, play);
@@ -239,7 +239,7 @@ void func_808D09CC(EnFloormas* this) {
this->collider.base.colType = COLTYPE_HIT3;
this->unk_18E = 80;
this->actor.flags &= ~(ACTOR_FLAG_200 | ACTOR_FLAG_400);
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 80);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 80);
}
void func_808D0A48(EnFloormas* this, PlayState* play) {
@@ -259,7 +259,7 @@ void func_808D0A48(EnFloormas* this, PlayState* play) {
void func_808D0B08(EnFloormas* this) {
Animation_PlayOnce(&this->skelAnime, &gWallmasterIdleAnim);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = func_808D0B50;
}
@@ -301,7 +301,7 @@ void func_808D0CE4(EnFloormas* this) {
}
this->unk_18E = Rand_S16Offset(2, 4);
- this->actor.speedXZ = 1.5f;
+ this->actor.speed = 1.5f;
this->actionFunc = func_808D0D70;
}
@@ -316,12 +316,12 @@ void func_808D0D70(EnFloormas* this, PlayState* play) {
if ((temp_v0 != 0) || Animation_OnFrame(&this->skelAnime, 12.0f) || Animation_OnFrame(&this->skelAnime, 24.0f) ||
Animation_OnFrame(&this->skelAnime, 36.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FALL_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FALL_WALK);
}
if ((this->actor.xzDistToPlayer < 320.0f) && Actor_IsFacingPlayer(&this->actor, 0x4000)) {
func_808D0F50(this);
- } else if (this->actor.bgCheckFlags & 8) {
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
this->unk_190 = this->actor.wallYaw;
func_808D108C(this);
} else if ((this->actor.xzDistToPlayer < 400.0f) && !Actor_IsFacingPlayer(&this->actor, 0x4000)) {
@@ -334,7 +334,7 @@ void func_808D0D70(EnFloormas* this, PlayState* play) {
void func_808D0ECC(EnFloormas* this) {
Animation_PlayOnce(&this->skelAnime, &gWallmasterStopWalkAnim);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = func_808D0F14;
}
@@ -346,7 +346,7 @@ void func_808D0F14(EnFloormas* this, PlayState* play) {
void func_808D0F50(EnFloormas* this) {
this->unk_18E = 0;
- this->actor.speedXZ = 5.0f;
+ this->actor.speed = 5.0f;
this->skelAnime.playSpeed = 3.0f;
this->actionFunc = func_808D0F80;
}
@@ -355,12 +355,12 @@ void func_808D0F80(EnFloormas* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 12.0f) ||
Animation_OnFrame(&this->skelAnime, 24.0f) || Animation_OnFrame(&this->skelAnime, 36.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FALL_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FALL_WALK);
}
Math_ApproachS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 3, 0x71C);
if ((this->actor.xzDistToPlayer < 280.0f) && Actor_IsFacingPlayer(&this->actor, 0x2000) &&
- !(this->actor.bgCheckFlags & 8)) {
+ !(this->actor.bgCheckFlags & BGCHECKFLAG_WALL)) {
func_808D1380(this, play);
} else if (this->actor.xzDistToPlayer > 400.0f) {
func_808D0CE4(this);
@@ -370,7 +370,7 @@ void func_808D0F80(EnFloormas* this, PlayState* play) {
void func_808D108C(EnFloormas* this) {
s16 sp36 = this->unk_190 - this->actor.shape.rot.y;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (sp36 > 0) {
Animation_MorphToPlayOnce(&this->skelAnime, &gFloormasterTurnAnim, -3.0f);
} else {
@@ -400,9 +400,9 @@ void func_808D11BC(EnFloormas* this, PlayState* play) {
if (((this->skelAnime.playSpeed > 0.0f) && Animation_OnFrame(&this->skelAnime, 21.0f)) ||
((this->skelAnime.playSpeed < 0.0f) && Animation_OnFrame(&this->skelAnime, 6.0f))) {
if (this->actor.scale.x > 0.009f) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FALL_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FALL_WALK);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FLOORMASTER_SM_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FLOORMASTER_SM_WALK);
}
}
@@ -419,11 +419,11 @@ void func_808D11BC(EnFloormas* this, PlayState* play) {
void func_808D1380(EnFloormas* this, PlayState* play) {
Animation_Change(&this->skelAnime, &gWallmasterHoverAnim, 3.0f, 0.0f, Animation_GetLastFrame(&gWallmasterHoverAnim),
ANIMMODE_ONCE, -3.0f);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.gravity = 0.0f;
func_808D08D0(this);
Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos, 15.0f, 6, 20.0f, 300, 100, 1);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FLOORMASTER_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FLOORMASTER_ATTACK);
this->actionFunc = func_808D1458;
}
@@ -460,7 +460,7 @@ void func_808D14DC(EnFloormas* this, PlayState* play) {
void func_808D161C(EnFloormas* this) {
this->unk_18E = 25;
this->actor.gravity = -0.15f;
- this->actor.speedXZ = 0.5f;
+ this->actor.speed = 0.5f;
this->actionFunc = func_808D1650;
}
@@ -471,7 +471,7 @@ void func_808D1650(EnFloormas* this, PlayState* play) {
this->unk_18E--;
}
- Math_StepToF(&this->actor.speedXZ, 15.0f, SQ(this->actor.speedXZ) * (1.0f / 3.0f));
+ Math_StepToF(&this->actor.speed, 15.0f, SQ(this->actor.speed) * (1.0f / 3.0f));
Math_ScaledStepToS(&this->actor.shape.rot.x, -0x1680, 0x140);
temp_f0_2 = this->actor.world.pos.y - this->actor.floorHeight;
@@ -485,14 +485,14 @@ void func_808D1650(EnFloormas* this, PlayState* play) {
func_808D14DC(this, play);
}
- if ((this->actor.bgCheckFlags & 8) || (this->unk_18E == 0)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) || (this->unk_18E == 0)) {
func_808D1740(this);
}
}
void func_808D1740(EnFloormas* this) {
Animation_Change(&this->skelAnime, &gWallmasterJumpAnim, 1.0f, 41.0f, 42.0f, ANIMMODE_ONCE, 5.0f);
- if ((this->actor.speedXZ < 0.0f) || (this->actionFunc != func_808D1650)) {
+ if ((this->actor.speed < 0.0f) || (this->actionFunc != func_808D1650)) {
this->unk_18E = 30;
} else {
this->unk_18E = 45;
@@ -502,31 +502,31 @@ void func_808D1740(EnFloormas* this) {
}
void func_808D17EC(EnFloormas* this, PlayState* play) {
- s32 sp24 = this->actor.bgCheckFlags & 1;
+ s32 sp24 = this->actor.bgCheckFlags & BGCHECKFLAG_GROUND;
- if (this->actor.bgCheckFlags & 2) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
if (this->actor.params != ENFLOORMAS_GET_7FFF_40) {
func_808D0908(this);
}
if (this->actor.velocity.y < -4.0f) {
if (this->actor.scale.x > 0.009f) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FALL_LAND);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FALL_LAND);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FLOORMASTER_SM_LAND);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FLOORMASTER_SM_LAND);
}
}
}
- if (this->actor.bgCheckFlags & 8) {
- this->actor.speedXZ = 0.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
+ this->actor.speed = 0.0f;
}
if (sp24 != 0) {
- Math_StepToF(&this->actor.speedXZ, 0.0f, 2.0f);
+ Math_StepToF(&this->actor.speed, 0.0f, 2.0f);
}
- if ((this->actor.speedXZ > 0.0f) && ((this->actor.world.pos.y - this->actor.floorHeight) < 12.0f)) {
+ if ((this->actor.speed > 0.0f) && ((this->actor.world.pos.y - this->actor.floorHeight) < 12.0f)) {
func_808D14DC(this, play);
}
@@ -558,7 +558,7 @@ void func_808D19D4(EnFloormas* this) {
this->drawDmgEffAlpha = 0.0f;
Actor_SetScale(&this->actor, 0.004f);
this->actor.flags |= ACTOR_FLAG_10;
- if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_80)) {
+ if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_REACT_TO_LENS)) {
this->actor.draw = func_808D3754;
} else {
this->actor.draw = EnFloormas_Draw;
@@ -575,28 +575,28 @@ void func_808D19D4(EnFloormas* this) {
this->actor.flags &= ~ACTOR_FLAG_400;
this->actor.flags |= ACTOR_FLAG_200;
this->actor.colChkInfo.health = 1;
- this->actor.speedXZ = 4.0f;
+ this->actor.speed = 4.0f;
this->actor.velocity.y = 7.0f;
this->actionFunc = func_808D1B44;
}
void func_808D1B44(EnFloormas* this, PlayState* play) {
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
if (SkelAnime_Update(&this->skelAnime)) {
this->actor.flags |= ACTOR_FLAG_1;
this->unk_194 = 50;
func_808D0C14(this);
}
- Math_StepToF(&this->actor.speedXZ, 0.0f, 1.0f);
+ Math_StepToF(&this->actor.speed, 0.0f, 1.0f);
}
- if (this->actor.bgCheckFlags & 2) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FLOORMASTER_SM_LAND);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FLOORMASTER_SM_LAND);
}
}
void func_808D1BCC(EnFloormas* this) {
Animation_PlayLoopSetSpeed(&this->skelAnime, &gWallmasterWalkAnim, 4.5f);
- this->actor.speedXZ = 5.0f;
+ this->actor.speed = 5.0f;
this->actionFunc = func_808D1C1C;
}
@@ -607,12 +607,12 @@ void func_808D1C1C(EnFloormas* this, PlayState* play) {
}
if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 18.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FLOORMASTER_SM_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FLOORMASTER_SM_WALK);
}
if (this->unk_194 == 0) {
func_808D1D0C(this);
- } else if (this->actor.bgCheckFlags & 8) {
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
this->unk_190 = this->actor.wallYaw;
func_808D108C(this);
} else if (this->actor.xzDistToPlayer < 120.0f) {
@@ -624,7 +624,7 @@ void func_808D1D0C(EnFloormas* this) {
if (this->actionFunc != func_808D1C1C) {
Animation_PlayLoopSetSpeed(&this->skelAnime, &gWallmasterWalkAnim, 4.5f);
}
- this->actor.speedXZ = 5.0f;
+ this->actor.speed = 5.0f;
this->actionFunc = func_808D1D6C;
}
@@ -634,10 +634,10 @@ void func_808D1D6C(EnFloormas* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 18.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FLOORMASTER_SM_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FLOORMASTER_SM_WALK);
}
- flags = this->actor.bgCheckFlags & 8;
+ flags = this->actor.bgCheckFlags & BGCHECKFLAG_WALL;
if (flags) {
this->unk_190 = this->actor.wallYaw;
func_808D108C(this);
@@ -651,9 +651,9 @@ void func_808D1D6C(EnFloormas* this, PlayState* play) {
return;
}
- Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_YawBetweenActors(&this->actor, sp2C), 0x38E);
+ Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_WorldYawTowardActor(&this->actor, sp2C), 0x38E);
- if (Actor_XZDistanceBetweenActors(&this->actor, sp2C) < 80.0f) {
+ if (Actor_WorldDistXZToActor(&this->actor, sp2C) < 80.0f) {
func_808D2484(this);
}
} else {
@@ -667,7 +667,7 @@ void func_808D1D6C(EnFloormas* this, PlayState* play) {
void func_808D1ED4(EnFloormas* this, PlayState* play) {
Vec3f sp34;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.velocity.y = 0.0f;
sp34.x = this->actor.world.pos.x;
sp34.y = this->actor.world.pos.y + 15.0f;
@@ -686,7 +686,7 @@ void func_808D1F7C(EnFloormas* this, PlayState* play) {
void func_808D1FD4(EnFloormas* this) {
Animation_Change(&this->skelAnime, &gWallmasterJumpAnim, 2.0f, 0.0f, 41.0f, ANIMMODE_ONCE, 0.0f);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = func_808D2040;
}
@@ -697,12 +697,12 @@ void func_808D2040(EnFloormas* this, PlayState* play) {
if (this->skelAnime.curFrame < 20.0f) {
Math_ApproachS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 2, 0xE38);
} else if (Animation_OnFrame(&this->skelAnime, 20.0f)) {
- this->actor.speedXZ = 5.0f;
+ this->actor.speed = 5.0f;
this->actor.velocity.y = 7.0f;
- } else if (this->actor.bgCheckFlags & 2) {
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
this->unk_18E = 50;
- this->actor.speedXZ = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FLOORMASTER_SM_LAND);
+ this->actor.speed = 0.0f;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FLOORMASTER_SM_LAND);
func_808D1740(this);
} else if ((this->actor.playerHeightRel < -10.0f) && (this->collider.base.ocFlags1 & OC1_HIT) &&
(&player->actor == this->collider.base.oc)) {
@@ -716,10 +716,10 @@ void func_808D217C(EnFloormas* this, Player* player) {
Animation_Change(&this->skelAnime, &gWallmasterJumpAnim, 1.0f, 36.0f, 45.0f, ANIMMODE_ONCE, -3.0f);
this->actor.flags &= ~ACTOR_FLAG_1;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.velocity.y = 0.0f;
func_808D08D0(this);
- ptr = &D_808D3900[(void)0, gSaveContext.save.playerForm];
+ ptr = &D_808D3900[GET_PLAYER_FORM];
this->actor.home.pos.x = ptr->z * Math_SinS(this->actor.shape.rot.y);
this->actor.home.pos.y = CLAMP(-this->actor.playerHeightRel, ptr->x, ptr->y);
this->actor.home.pos.z = ptr->z * Math_CosS(this->actor.shape.rot.y);
@@ -745,7 +745,7 @@ void func_808D22C8(EnFloormas* this, PlayState* play) {
Math_Vec3f_Sum(&player->actor.world.pos, &this->actor.home.pos, &this->actor.world.pos);
- if (!(player->stateFlags2 & 0x80) || (player->invincibilityTimer < 0)) {
+ if (!(player->stateFlags2 & PLAYER_STATE2_80) || (player->invincibilityTimer < 0)) {
EnFloormas* parent = (EnFloormas*)this->actor.parent;
EnFloormas* child = (EnFloormas*)this->actor.child;
@@ -759,18 +759,18 @@ void func_808D22C8(EnFloormas* this, PlayState* play) {
this->actor.shape.rot.x = 0;
this->actor.velocity.y = 6.0f;
this->actor.flags |= ACTOR_FLAG_1;
- this->actor.speedXZ = -3.0f;
+ this->actor.speed = -3.0f;
func_808D1740(this);
} else if ((this->unk_190 % 20) == 0) {
- func_800B8E58(player, NA_SE_VO_LI_DAMAGE_S + player->ageProperties->unk_92);
+ Player_PlaySfx(player, NA_SE_VO_LI_DAMAGE_S + player->ageProperties->voiceSfxIdOffset);
play->damagePlayer(play, -4);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FLOORMASTER_SM_STICK - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FLOORMASTER_SM_STICK - SFX_FLAG);
}
void func_808D2484(EnFloormas* this) {
Animation_Change(&this->skelAnime, &gWallmasterJumpAnim, 2.0f, 0.0f, 41.0f, ANIMMODE_ONCE, 0.0f);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = func_808D24F0;
}
@@ -783,7 +783,7 @@ void func_808D24F0(EnFloormas* this, PlayState* play) {
} else if (this->actor.child->params == ENFLOORMAS_GET_7FFF_40) {
phi_s1 = this->actor.child;
} else {
- if (this->actor.bgCheckFlags & 2) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
this->actor.params = ENFLOORMAS_GET_7FFF_10;
func_808D1740(this);
}
@@ -791,24 +791,24 @@ void func_808D24F0(EnFloormas* this, PlayState* play) {
}
if (Animation_OnFrame(&this->skelAnime, 20.0f)) {
- this->actor.speedXZ = 5.0f;
+ this->actor.speed = 5.0f;
this->actor.velocity.y = 7.0f;
} else if (this->skelAnime.curFrame < 20.0f) {
- Math_ApproachS(&this->actor.shape.rot.y, Actor_YawBetweenActors(&this->actor, phi_s1), 2, 0xE38);
+ Math_ApproachS(&this->actor.shape.rot.y, Actor_WorldYawTowardActor(&this->actor, phi_s1), 2, 0xE38);
} else if (((phi_s1->world.pos.y - this->actor.world.pos.y) < -10.0f) &&
(fabsf(this->actor.world.pos.x - phi_s1->world.pos.x) < 10.0f) &&
(fabsf(this->actor.world.pos.z - phi_s1->world.pos.z) < 10.0f)) {
func_808D2A20(this);
this->collider.base.ocFlags1 |= OC1_ON;
- } else if (this->actor.bgCheckFlags & 2) {
- this->actor.speedXZ = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FLOORMASTER_SM_LAND);
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
+ this->actor.speed = 0.0f;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FLOORMASTER_SM_LAND);
func_808D1740(this);
}
if ((fabsf(this->actor.world.pos.x - phi_s1->world.pos.x) < 5.0f) &&
(fabsf(this->actor.world.pos.z - phi_s1->world.pos.z) < 5.0f)) {
- Math_StepToF(&this->actor.speedXZ, 0.0f, 2.0f);
+ Math_StepToF(&this->actor.speed, 0.0f, 2.0f);
}
}
@@ -817,7 +817,7 @@ void func_808D2700(EnFloormas* this) {
this->unk_18E = 0;
this->unk_194 = 1500;
this->actor.params = ENFLOORMAS_GET_7FFF_40;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
func_808D08D0(this);
this->actionFunc = func_808D2764;
}
@@ -862,7 +862,7 @@ void func_808D2764(EnFloormas* this, PlayState* play) {
this->actor.scale.y = this->actor.scale.z = this->actor.scale.x;
if (((temp_f2 == 0.007f) || (temp_f2 == 0.004f)) && (temp_f2 != this->actor.scale.x)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FLOORMASTER_EXPAND);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FLOORMASTER_EXPAND);
}
this->collider.dim.radius = sCylinderInit.dim.radius * 100.0f * this->actor.scale.x;
@@ -898,7 +898,7 @@ void func_808D2A20(EnFloormas* this) {
if ((parent->actionFunc == func_808D2AA8) && (child->actionFunc == func_808D2AA8)) {
func_808D2AB8(parent);
func_808D2AB8(child);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
this->actor.draw = NULL;
this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_10);
@@ -917,14 +917,14 @@ void func_808D2AB8(EnFloormas* this) {
}
void func_808D2AF4(EnFloormas* this, PlayState* play) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
void func_808D2B18(EnFloormas* this) {
Animation_MorphToPlayOnce(&this->skelAnime, &gWallmasterDamageAnim, -3.0f);
func_800BE504(&this->actor, &this->collider);
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 20);
- this->actor.speedXZ = 5.0f;
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 20);
+ this->actor.speed = 5.0f;
this->actor.velocity.y = 5.5f;
if (this->actor.params == ENFLOORMAS_GET_7FFF_40) {
EnFloormas* parent = (EnFloormas*)this->actor.parent;
@@ -944,7 +944,7 @@ void func_808D2B18(EnFloormas* this) {
}
void func_808D2C08(EnFloormas* this, PlayState* play) {
- if (SkelAnime_Update(&this->skelAnime) && (this->actor.bgCheckFlags & 1)) {
+ if (SkelAnime_Update(&this->skelAnime) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
if (this->actor.colChkInfo.health == 0) {
func_808D0930(this, play);
} else {
@@ -954,18 +954,18 @@ void func_808D2C08(EnFloormas* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, 13.0f)) {
if (this->actor.scale.x > 0.009f) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EYEGOLE_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_ATTACK);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EYEGOLE_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_ATTACK);
}
}
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.2f);
+ Math_StepToF(&this->actor.speed, 0.0f, 0.2f);
}
void func_808D2CDC(EnFloormas* this) {
Animation_PlayOnce(&this->skelAnime, &gWallmasterRecoverFromDamageAnim);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.velocity.y = 0.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = func_808D2D30;
@@ -978,7 +978,7 @@ void func_808D2D30(EnFloormas* this, PlayState* play) {
}
void func_808D2D6C(EnFloormas* this) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->actor.velocity.y > 0.0f) {
this->actor.velocity.y = 0.0f;
}
@@ -1022,14 +1022,14 @@ void func_808D2E34(EnFloormas* this, PlayState* play) {
if (this->collider.base.colType != COLTYPE_HARD) {
if (!Actor_ApplyDamage(&this->actor)) {
if (this->actor.scale.x > 0.009f) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DAIOCTA_REVERSE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DAIOCTA_REVERSE);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FLOORMASTER_SM_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FLOORMASTER_SM_DEAD);
}
Enemy_StartFinishingBlow(play, &this->actor);
this->actor.flags &= ~ACTOR_FLAG_1;
} else if (this->actor.colChkInfo.damage != 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FALL_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FALL_DAMAGE);
}
func_808D0A48(this, play);
@@ -1044,13 +1044,15 @@ void func_808D2E34(EnFloormas* this, PlayState* play) {
func_808D2D6C(this);
} else if (this->actor.colChkInfo.damageEffect == 1) {
this->unk_18E = 40;
- Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA,
+ 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
func_808D2D6C(this);
} else if (this->actor.colChkInfo.damageEffect == 5) {
this->unk_18E = 40;
- Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA,
+ 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
this->drawDmgEffScale = 0.55f;
this->drawDmgEffAlpha = 2.0f;
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_MEDIUM;
@@ -1085,8 +1087,8 @@ void EnFloormas_Update(Actor* thisx, PlayState* play) {
if (this->actionFunc != func_808D2AA8) {
if (this->collider.base.atFlags & AT_HIT) {
this->collider.base.atFlags &= ~AT_HIT;
- this->actor.speedXZ *= -0.5f;
- this->actor.speedXZ = CLAMP_MAX(this->actor.speedXZ, -5.0f);
+ this->actor.speed *= -0.5f;
+ this->actor.speed = CLAMP_MAX(this->actor.speed, -5.0f);
this->actor.velocity.y = 5.0f;
func_808D1740(this);
}
@@ -1102,7 +1104,9 @@ void EnFloormas_Update(Actor* thisx, PlayState* play) {
Actor_MoveWithGravity(&this->actor);
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, this->actor.scale.x * 3000.0f, 0.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, this->actor.scale.x * 3000.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
Collider_UpdateCylinder(&this->actor, &this->collider);
if (this->actionFunc == func_808D1650) {
this->actor.flags |= ACTOR_FLAG_1000000;
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 c4500973f..002f9e67c 100644
--- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.h
+++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.h
@@ -36,6 +36,4 @@ typedef struct EnFloormas {
/* 0x354 */ ColliderCylinder collider;
} EnFloormas; // size = 0x3A0
-extern const ActorInit En_Floormas_InitVars;
-
#endif // Z_EN_FLOORMAS_H
diff --git a/src/overlays/actors/ovl_En_Fr/overlay.cfg b/src/overlays/actors/ovl_En_Fr/overlay.cfg
deleted file mode 100644
index b21ec2145..000000000
--- a/src/overlays/actors/ovl_En_Fr/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Fr
-z_en_fr.c
diff --git a/src/overlays/actors/ovl_En_Fr/z_en_fr.c b/src/overlays/actors/ovl_En_Fr/z_en_fr.c
index a8276e649..0b645b302 100644
--- a/src/overlays/actors/ovl_En_Fr/z_en_fr.c
+++ b/src/overlays/actors/ovl_En_Fr/z_en_fr.c
@@ -14,7 +14,7 @@ void EnFr_Init(Actor* thisx, PlayState* play);
void EnFr_Destroy(Actor* thisx, PlayState* play);
void EnFr_Update(Actor* thisx, PlayState* play);
-const ActorInit En_Fr_InitVars = {
+ActorInit En_Fr_InitVars = {
ACTOR_EN_FR,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -30,10 +30,11 @@ void EnFr_Init(Actor* thisx, PlayState* play) {
EnFr* this = THIS;
if (Flags_GetSwitch(play, ENFR_GET_SWITCHFLAG(&this->actor))) {
- Actor_MarkForDeath(&this->actor);
- } else {
- this->actor.targetMode = ENFR_GET_TARGETMODE(&this->actor);
+ Actor_Kill(&this->actor);
+ return;
}
+
+ this->actor.targetMode = ENFR_GET_TARGETMODE(&this->actor);
}
void EnFr_Destroy(Actor* thisx, PlayState* play) {
@@ -43,8 +44,11 @@ void EnFr_Update(Actor* thisx, PlayState* play) {
EnFr* this = THIS;
if (Flags_GetSwitch(play, ENFR_GET_SWITCHFLAG(&this->actor))) {
- Actor_MarkForDeath(&this->actor);
- } else if (this->actor.xyzDistToPlayerSq < SQ(IREG(29))) {
+ Actor_Kill(&this->actor);
+ return;
+ }
+
+ if (this->actor.xyzDistToPlayerSq < SQ(IREG(29))) {
this->actor.flags &= ~ACTOR_FLAG_40000000;
} else {
this->actor.flags |= ACTOR_FLAG_40000000;
diff --git a/src/overlays/actors/ovl_En_Fr/z_en_fr.h b/src/overlays/actors/ovl_En_Fr/z_en_fr.h
index f0de1936d..27682ce40 100644
--- a/src/overlays/actors/ovl_En_Fr/z_en_fr.h
+++ b/src/overlays/actors/ovl_En_Fr/z_en_fr.h
@@ -12,6 +12,4 @@ typedef struct EnFr {
/* 0x000 */ Actor actor;
} EnFr; // size = 0x144
-extern const ActorInit En_Fr_InitVars;
-
#endif // Z_EN_FR_H
diff --git a/src/overlays/actors/ovl_En_Fsn/overlay.cfg b/src/overlays/actors/ovl_En_Fsn/overlay.cfg
deleted file mode 100644
index c173063cf..000000000
--- a/src/overlays/actors/ovl_En_Fsn/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Fsn
-z_en_fsn.c
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 45206159e..8130f3cc9 100644
--- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c
+++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c
@@ -69,7 +69,7 @@ typedef enum {
/* 13 */ FSN_ANIM_MAX
} FsnAnimation;
-const ActorInit En_Fsn_InitVars = {
+ActorInit En_Fsn_InitVars = {
ACTOR_EN_FSN,
ACTORCAT_NPC,
FLAGS,
@@ -153,7 +153,7 @@ u16 EnFsn_GetWelcome(PlayState* play) {
void EnFsn_HandleConversationBackroom(EnFsn* this, PlayState* play) {
switch (this->textId) {
case 0:
- if (!(gSaveContext.save.weekEventReg[80] & 0x10)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_80_10)) {
this->textId = 0x29E0;
break;
} else {
@@ -166,7 +166,7 @@ void EnFsn_HandleConversationBackroom(EnFsn* this, PlayState* play) {
this->flags |= ENFSN_GIVE_ITEM;
this->flags |= ENFSN_GAVE_LETTER_TO_MAMA;
this->getItemId = GI_LETTER_TO_MAMA;
- gSaveContext.save.weekEventReg[80] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_80_10);
this->textId = 0x29F1;
break;
} else {
@@ -186,7 +186,7 @@ void EnFsn_HandleConversationBackroom(EnFsn* this, PlayState* play) {
this->flags |= ENFSN_GIVE_ITEM;
this->flags |= ENFSN_GAVE_LETTER_TO_MAMA;
this->getItemId = GI_LETTER_TO_MAMA;
- gSaveContext.save.weekEventReg[80] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_80_10);
this->textId = 0x29F1;
break;
case 0x29F1:
@@ -212,7 +212,7 @@ void EnFsn_HandleSetupResumeInteraction(EnFsn* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play) &&
this->cutsceneState == ENFSN_CUTSCENESTATE_STOPPED) {
Actor_ProcessTalkRequest(&this->actor, &play->state);
- func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
if (ENFSN_IS_SHOP(&this->actor)) {
this->actor.textId = 0;
}
@@ -228,21 +228,21 @@ void EnFsn_UpdateCollider(EnFsn* this, PlayState* play) {
}
void EnFsn_HandleLookToShopkeeperBuyingCutscene(EnFsn* this) {
- if ((this->cutsceneState == ENFSN_CUTSCENESTATE_PLAYING) &&
- (this->lookToShopkeeperBuyingCutscene != this->cutscene) && (this->actor.textId == 0x29CE)) {
- ActorCutscene_Stop(this->cutscene);
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if ((this->cutsceneState == ENFSN_CUTSCENESTATE_PLAYING) && (this->lookToShopkeeperBuyingCsId != this->csId) &&
+ (this->actor.textId == 0x29CE)) {
+ CutsceneManager_Stop(this->csId);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookToShopkeeperBuyingCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookToShopkeeperBuyingCsId;
+ CutsceneManager_Queue(this->csId);
this->cutsceneState = ENFSN_CUTSCENESTATE_WAITING;
} else if (this->cutsceneState == ENFSN_CUTSCENESTATE_WAITING) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_Start(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_Start(this->csId, &this->actor);
this->cutsceneState = ENFSN_CUTSCENESTATE_PLAYING;
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
}
}
@@ -301,8 +301,8 @@ void EnFsn_CursorLeftRight(EnFsn* this) {
}
s16 EnFsn_GetThirdDayItemId(void) {
- if (!(gSaveContext.save.weekEventReg[33] & 4) && CURRENT_DAY == 3) {
- if (!(gSaveContext.save.weekEventReg[33] & 8) && !(gSaveContext.save.weekEventReg[79] & 0x40)) {
+ 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;
}
return SI_MASK_ALL_NIGHT;
@@ -335,7 +335,7 @@ s32 EnFsn_HasItemsToSell(void) {
}
if ((STOLEN_ITEM_1 != STOLEN_ITEM_NONE) || (STOLEN_ITEM_2 != STOLEN_ITEM_NONE) ||
- !(gSaveContext.save.weekEventReg[33] & 4)) {
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_33_04)) {
return true;
}
@@ -387,7 +387,7 @@ void EnFsn_SpawnShopItems(EnFsn* this, PlayState* play) {
void EnFsn_EndInteraction(EnFsn* this, PlayState* play) {
if (this->cutsceneState == ENFSN_CUTSCENESTATE_PLAYING) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->cutsceneState = ENFSN_CUTSCENESTATE_STOPPED;
}
Actor_ProcessTalkRequest(&this->actor, &play->state);
@@ -417,7 +417,7 @@ s32 EnFsn_TestEndInteraction(EnFsn* this, PlayState* play, Input* input) {
s32 EnFsn_TestCancelOption(EnFsn* this, PlayState* play, Input* input) {
if (CHECK_BTN_ALL(input->press.button, BTN_B)) {
this->actionFunc = this->prevActionFunc;
- func_80151938(play, this->items[this->cursorIndex]->actor.textId);
+ Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId);
return true;
}
return false;
@@ -441,9 +441,9 @@ s32 EnFsn_FacingShopkeeperDialogResult(EnFsn* this, PlayState* play) {
func_8019F208();
if (CURRENT_DAY != 3) {
this->actor.textId = 0x29FB;
- } else if (gSaveContext.save.weekEventReg[33] & 4) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_04)) {
this->actor.textId = 0x29FF;
- } else if (!(gSaveContext.save.weekEventReg[33] & 8) && !(gSaveContext.save.weekEventReg[79] & 0x40)) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_79_40)) {
this->actor.textId = 0x29D7;
} else {
this->actor.textId = 0x29D8;
@@ -468,7 +468,7 @@ s32 EnFsn_HasPlayerSelectedItem(EnFsn* this, PlayState* play, Input* input) {
if (EnFsn_TestItemSelected(play)) {
if (!this->items[this->cursorIndex]->isOutOfStock) {
this->prevActionFunc = this->actionFunc;
- func_80151938(play, this->items[this->cursorIndex]->choiceTextId);
+ Message_ContinueTextbox(play, this->items[this->cursorIndex]->choiceTextId);
play_sound(NA_SE_SY_DECIDE);
this->stickLeftPrompt.isEnabled = false;
this->stickRightPrompt.isEnabled = false;
@@ -737,11 +737,11 @@ void EnFsn_Idle(EnFsn* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
if (this->cutsceneState == ENFSN_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookToShopkeeperCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookToShopkeeperCsId;
+ CutsceneManager_Queue(this->csId);
this->cutsceneState = ENFSN_CUTSCENESTATE_WAITING;
}
this->actor.textId = EnFsn_GetWelcome(play);
@@ -766,7 +766,7 @@ void EnFsn_Haggle(EnFsn* this, PlayState* play) {
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex);
} else {
if (this->animIndex == FSN_ANIM_SLAM_COUNTER_LOOP && Animation_OnFrame(&this->skelAnime, 18.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_HANKO);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_HANKO);
}
if (this->flags & ENFSN_CALM_DOWN) {
this->flags &= ~ENFSN_CALM_DOWN;
@@ -783,7 +783,7 @@ void EnFsn_Haggle(EnFsn* this, PlayState* play) {
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex);
} else {
if (Animation_OnFrame(&this->skelAnime, 28.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_HANKO);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_HANKO);
}
return;
}
@@ -797,11 +797,11 @@ void EnFsn_Haggle(EnFsn* this, PlayState* play) {
void EnFsn_BeginInteraction(EnFsn* this, PlayState* play) {
if (this->cutsceneState == ENFSN_CUTSCENESTATE_WAITING) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->cutsceneState = ENFSN_CUTSCENESTATE_PLAYING;
if (Player_GetMask(play) == PLAYER_MASK_NONE) {
- func_8011552C(play, 16);
+ func_8011552C(play, DO_ACTION_NEXT);
if (EnFsn_HasItemsToSell()) {
this->actionFunc = EnFsn_AskBuyOrSell;
} else {
@@ -812,7 +812,7 @@ void EnFsn_BeginInteraction(EnFsn* this, PlayState* play) {
this->actionFunc = EnFsn_SetupEndInteractionImmediately;
}
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
}
}
@@ -839,7 +839,7 @@ void EnFsn_StartBuying(EnFsn* this, PlayState* play) {
this->actionFunc = EnFsn_DeterminePrice;
break;
case 0x29CF:
- player->exchangeItemId = PLAYER_AP_NONE;
+ player->exchangeItemId = PLAYER_IA_NONE;
this->actionFunc = EnFsn_SetupDeterminePrice;
break;
}
@@ -861,10 +861,9 @@ void EnFsn_AskBuyOrSell(EnFsn* this, PlayState* play) {
Message_StartTextbox(play, this->actor.textId, &this->actor);
break;
case 0x29D2:
- if (gSaveContext.save.weekEventReg[33] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_04)) {
this->actor.textId = 0x2A01;
- } else if (!(gSaveContext.save.weekEventReg[33] & 8) &&
- !(gSaveContext.save.weekEventReg[79] & 0x40)) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_79_40)) {
this->actor.textId = 0x29D3;
} else {
this->actor.textId = 0x29D4;
@@ -881,7 +880,7 @@ void EnFsn_AskBuyOrSell(EnFsn* this, PlayState* play) {
}
}
} else if (talkState == TEXT_STATE_CHOICE) {
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
if (!EnFsn_TestEndInteraction(this, play, CONTROLLER1(&play->state)) && Message_ShouldAdvance(play)) {
switch (play->msgCtx.choiceIndex) {
case 0:
@@ -916,12 +915,13 @@ void EnFsn_SetupDeterminePrice(EnFsn* this, PlayState* play) {
void EnFsn_DeterminePrice(EnFsn* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- s32 itemActionParam;
+ PlayerItemAction itemAction;
u8 buttonItem;
if (Message_GetState(&play->msgCtx) == TEXT_STATE_16) {
- itemActionParam = func_80123810(play);
- if (itemActionParam > PLAYER_AP_NONE) {
+ itemAction = func_80123810(play);
+
+ if (itemAction > PLAYER_IA_NONE) {
buttonItem = GET_CUR_FORM_BTN_ITEM(player->heldItemButton);
this->price = (buttonItem < ITEM_MOON_TEAR) ? gItemPrices[buttonItem] : 0;
if (this->price > 0) {
@@ -933,8 +933,8 @@ void EnFsn_DeterminePrice(EnFsn* this, PlayState* play) {
this->actionFunc = EnFsn_StartBuying;
}
this->actor.textId = player->actor.textId;
- func_801477B4(play);
- } else if (itemActionParam < PLAYER_AP_NONE) {
+ Message_CloseTextbox(play);
+ } else if (itemAction <= PLAYER_IA_MINUS1) {
if (CURRENT_DAY == 3) {
this->actor.textId = 0x29DF;
} else {
@@ -958,7 +958,7 @@ void EnFsn_MakeOffer(EnFsn* this, PlayState* play) {
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
if (this->cutsceneState == ENFSN_CUTSCENESTATE_PLAYING) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->cutsceneState = ENFSN_CUTSCENESTATE_STOPPED;
}
switch (this->price) {
@@ -982,7 +982,7 @@ void EnFsn_MakeOffer(EnFsn* this, PlayState* play) {
break;
case 1:
func_8019F230();
- player->exchangeItemId = PLAYER_AP_NONE;
+ player->exchangeItemId = PLAYER_IA_NONE;
this->actionFunc = EnFsn_SetupDeterminePrice;
break;
}
@@ -997,13 +997,13 @@ void EnFsn_GiveItem(EnFsn* this, PlayState* play) {
}
this->actor.parent = NULL;
if (ENFSN_IS_SHOP(&this->actor) && !this->isSelling) {
- func_80123D50(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_AP_BOTTLE);
+ Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY);
}
this->actionFunc = EnFsn_SetupResumeInteraction;
} else if (this->isSelling == true) {
- Actor_PickUp(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f);
} else {
- Actor_PickUp(&this->actor, play, this->getItemId, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, this->getItemId, 300.0f, 300.0f);
}
}
@@ -1021,70 +1021,70 @@ void EnFsn_ResumeInteraction(EnFsn* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
if (ENFSN_IS_SHOP(&this->actor)) {
if (!this->isSelling) {
- this->cutscene = this->lookToShopkeeperBuyingCutscene;
+ this->csId = this->lookToShopkeeperBuyingCsId;
this->actor.textId = 0x29D0;
} else {
- this->cutscene = this->lookToShopkeeperCutscene;
+ this->csId = this->lookToShopkeeperCsId;
this->actor.textId = (this->numSellingItems <= 0) ? 0x29DE : 0x29D6;
}
Message_StartTextbox(play, this->actor.textId, &this->actor);
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
this->actionFunc = EnFsn_ResumeShoppingInteraction;
} else {
EnFsn_HandleConversationBackroom(this, play);
this->actionFunc = EnFsn_ConverseBackroom;
}
} else {
- func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
}
}
void EnFsn_ResumeShoppingInteraction(EnFsn* this, PlayState* play) {
if (this->cutsceneState == ENFSN_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->cutsceneState = ENFSN_CUTSCENESTATE_PLAYING;
if (!this->isSelling) {
this->actionFunc = EnFsn_AskCanBuyMore;
} else if (this->actor.textId != 0x29D6) {
this->actionFunc = EnFsn_AskCanBuyAterRunningOutOfItems;
} else {
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
this->stickLeftPrompt.isEnabled = false;
this->stickRightPrompt.isEnabled = true;
this->actionFunc = EnFsn_FaceShopkeeperSelling;
}
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = !this->isSelling ? this->lookToShopkeeperBuyingCutscene : this->lookToShopkeeperCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = !this->isSelling ? this->lookToShopkeeperBuyingCsId : this->lookToShopkeeperCsId;
+ CutsceneManager_Queue(this->csId);
}
}
}
void EnFsn_LookToShelf(EnFsn* this, PlayState* play) {
if (this->cutsceneState == ENFSN_CUTSCENESTATE_PLAYING) {
- ActorCutscene_Stop(this->cutscene);
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ CutsceneManager_Stop(this->csId);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookToShelfCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookToShelfCsId;
+ CutsceneManager_Queue(this->csId);
this->cutsceneState = ENFSN_CUTSCENESTATE_WAITING;
} else if (this->cutsceneState == ENFSN_CUTSCENESTATE_WAITING) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene) != 0) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->cutsceneState = ENFSN_CUTSCENESTATE_PLAYING;
EnFsn_UpdateCursorPos(this, play);
this->actionFunc = EnFsn_BrowseShelf;
- func_80151938(play, this->items[this->cursorIndex]->actor.textId);
+ Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId);
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
}
}
@@ -1103,12 +1103,12 @@ void EnFsn_BrowseShelf(EnFsn* this, PlayState* play) {
this->stickLeftPrompt.isEnabled = true;
EnFsn_UpdateCursorPos(this, play);
if (talkstate == TEXT_STATE_5) {
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
if (!EnFsn_HasPlayerSelectedItem(this, play, CONTROLLER1(&play->state))) {
EnFsn_CursorLeftRight(this);
if (this->cursorIndex != prevCursorIdx) {
play_sound(NA_SE_SY_CURSOR);
- func_80151938(play, this->items[this->cursorIndex]->actor.textId);
+ Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId);
}
}
}
@@ -1117,24 +1117,24 @@ void EnFsn_BrowseShelf(EnFsn* this, PlayState* play) {
void EnFsn_LookToShopkeeperFromShelf(EnFsn* this, PlayState* play) {
if (this->cutsceneState == ENFSN_CUTSCENESTATE_PLAYING) {
- ActorCutscene_Stop(this->cutscene);
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ CutsceneManager_Stop(this->csId);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookToShopkeeperFromShelfCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookToShopkeeperFromShelfCsId;
+ CutsceneManager_Queue(this->csId);
this->cutsceneState = ENFSN_CUTSCENESTATE_WAITING;
} else if (this->cutsceneState == ENFSN_CUTSCENESTATE_WAITING) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->cutsceneState = ENFSN_CUTSCENESTATE_PLAYING;
this->stickLeftPrompt.isEnabled = false;
this->stickRightPrompt.isEnabled = true;
this->actor.textId = 0x29D6;
- func_80151938(play, this->actor.textId);
+ Message_ContinueTextbox(play, this->actor.textId);
this->actionFunc = EnFsn_FaceShopkeeperSelling;
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
}
}
@@ -1145,16 +1145,16 @@ void EnFsn_HandleCanPlayerBuyItem(EnFsn* this, PlayState* play) {
switch (item->canBuyFunc(play, item)) {
case CANBUY_RESULT_SUCCESS_2:
func_8019F208();
- gSaveContext.save.weekEventReg[33] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_33_04);
case CANBUY_RESULT_SUCCESS_1:
if (this->cutsceneState == ENFSN_CUTSCENESTATE_PLAYING) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->cutsceneState = ENFSN_CUTSCENESTATE_STOPPED;
}
func_8019F208();
item = this->items[this->cursorIndex];
item->buyFanfareFunc(play, item);
- Actor_PickUp(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f);
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
@@ -1173,12 +1173,12 @@ void EnFsn_HandleCanPlayerBuyItem(EnFsn* this, PlayState* play) {
break;
case CANBUY_RESULT_NEED_RUPEES:
play_sound(NA_SE_SY_ERROR);
- func_80151938(play, 0x29F0);
+ Message_ContinueTextbox(play, 0x29F0);
this->actionFunc = EnFsn_PlayerCannotBuy;
break;
case CANBUY_RESULT_CANNOT_GET_NOW:
play_sound(NA_SE_SY_ERROR);
- func_80151938(play, 0x29DD);
+ Message_ContinueTextbox(play, 0x29DD);
this->actionFunc = EnFsn_PlayerCannotBuy;
break;
}
@@ -1205,7 +1205,7 @@ void EnFsn_SelectItem(EnFsn* this, PlayState* play) {
u8 talkState = Message_GetState(&play->msgCtx);
if (EnFsn_TakeItemOffShelf(this) && (talkState == TEXT_STATE_CHOICE)) {
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
if (!EnFsn_TestCancelOption(this, play, CONTROLLER1(&play->state)) && Message_ShouldAdvance(play)) {
switch (play->msgCtx.choiceIndex) {
case 0:
@@ -1214,7 +1214,7 @@ void EnFsn_SelectItem(EnFsn* this, PlayState* play) {
case 1:
func_8019F230();
this->actionFunc = this->prevActionFunc;
- func_80151938(play, this->items[this->cursorIndex]->actor.textId);
+ Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId);
}
}
}
@@ -1223,7 +1223,7 @@ void EnFsn_SelectItem(EnFsn* this, PlayState* play) {
void EnFsn_PlayerCannotBuy(EnFsn* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
this->actionFunc = this->prevActionFunc;
- func_80151938(play, this->items[this->cursorIndex]->actor.textId);
+ Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId);
}
}
@@ -1231,15 +1231,15 @@ void EnFsn_AskCanBuyMore(EnFsn* this, PlayState* play) {
u8 talkState = Message_GetState(&play->msgCtx);
if (this->cutsceneState == ENFSN_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->cutsceneState = ENFSN_CUTSCENESTATE_PLAYING;
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookToShopkeeperCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookToShopkeeperCsId;
+ CutsceneManager_Queue(this->csId);
}
}
if (talkState == TEXT_STATE_CHOICE) {
@@ -1277,15 +1277,15 @@ void EnFsn_AskCanBuyAterRunningOutOfItems(EnFsn* this, PlayState* play) {
u8 talkState = Message_GetState(&play->msgCtx);
if (this->cutsceneState == ENFSN_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->cutsceneState = ENFSN_CUTSCENESTATE_PLAYING;
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookToShopkeeperCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookToShopkeeperCsId;
+ CutsceneManager_Queue(this->csId);
}
}
if (talkState == TEXT_STATE_CHOICE) {
@@ -1325,7 +1325,7 @@ void EnFsn_FaceShopkeeperSelling(EnFsn* this, PlayState* play) {
u8 cursorIndex;
if (talkState == TEXT_STATE_CHOICE) {
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
if (!EnFsn_TestEndInteraction(this, play, CONTROLLER1(&play->state)) &&
(!Message_ShouldAdvance(play) || !EnFsn_FacingShopkeeperDialogResult(this, play)) &&
this->stickAccumX > 0) {
@@ -1333,7 +1333,7 @@ void EnFsn_FaceShopkeeperSelling(EnFsn* this, PlayState* play) {
if (cursorIndex != CURSOR_INVALID) {
this->cursorIndex = cursorIndex;
this->actionFunc = EnFsn_LookToShelf;
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
this->stickRightPrompt.isEnabled = false;
play_sound(NA_SE_SY_CURSOR);
}
@@ -1380,10 +1380,10 @@ void EnFsn_ConverseBackroom(EnFsn* this, PlayState* play) {
}
void EnFsn_GetCutscenes(EnFsn* this) {
- this->lookToShopkeeperCutscene = this->actor.cutscene;
- this->lookToShelfCutscene = ActorCutscene_GetAdditionalCutscene(this->lookToShopkeeperCutscene);
- this->lookToShopkeeperFromShelfCutscene = ActorCutscene_GetAdditionalCutscene(this->lookToShelfCutscene);
- this->lookToShopkeeperBuyingCutscene = ActorCutscene_GetAdditionalCutscene(this->lookToShopkeeperFromShelfCutscene);
+ this->lookToShopkeeperCsId = this->actor.csId;
+ this->lookToShelfCsId = CutsceneManager_GetAdditionalCsId(this->lookToShopkeeperCsId);
+ this->lookToShopkeeperFromShelfCsId = CutsceneManager_GetAdditionalCsId(this->lookToShelfCsId);
+ this->lookToShopkeeperBuyingCsId = CutsceneManager_GetAdditionalCsId(this->lookToShopkeeperFromShelfCsId);
}
void EnFsn_Blink(EnFsn* this) {
@@ -1416,8 +1416,8 @@ void EnFsn_Init(Actor* thisx, PlayState* play) {
EnFsn_GetCutscenes(this);
EnFsn_InitShop(this, play);
} else {
- if ((gSaveContext.save.weekEventReg[33] & 8) || (gSaveContext.save.weekEventReg[79] & 0x40)) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08) || CHECK_WEEKEVENTREG(WEEKEVENTREG_79_40)) {
+ Actor_Kill(&this->actor);
return;
}
Collider_InitCylinder(play, &this->collider);
diff --git a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.h b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.h
index 6bf337be7..f214dcbd9 100644
--- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.h
+++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.h
@@ -33,11 +33,11 @@ typedef struct EnFsn {
/* 0x364 */ s16 eyeTexIndex;
/* 0x366 */ s16 blinkTimer;
/* 0x368 */ s16 cutsceneState;
- /* 0x36A */ s16 cutscene;
- /* 0x36C */ s16 lookToShopkeeperCutscene;
- /* 0x36E */ s16 lookToShelfCutscene;
- /* 0x370 */ s16 lookToShopkeeperFromShelfCutscene;
- /* 0x372 */ s16 lookToShopkeeperBuyingCutscene;
+ /* 0x36A */ s16 csId;
+ /* 0x36C */ s16 lookToShopkeeperCsId;
+ /* 0x36E */ s16 lookToShelfCsId;
+ /* 0x370 */ s16 lookToShopkeeperFromShelfCsId;
+ /* 0x372 */ s16 lookToShopkeeperBuyingCsId;
/* 0x374 */ s16 price;
/* 0x376 */ u16 textId;
/* 0x378 */ u8 isSelling;
@@ -68,6 +68,4 @@ typedef struct EnFsn {
/* 0x44E */ u16 flags;
} EnFsn; // size = 0x450
-extern const ActorInit En_Fsn_InitVars;
-
#endif // Z_EN_FSN_H
diff --git a/src/overlays/actors/ovl_En_Fu/overlay.cfg b/src/overlays/actors/ovl_En_Fu/overlay.cfg
deleted file mode 100644
index 0cc55f8eb..000000000
--- a/src/overlays/actors/ovl_En_Fu/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Fu
-z_en_fu.c
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 c0be81361..7435d0ddc 100644
--- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c
+++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c
@@ -12,7 +12,7 @@
#include "objects/object_mu/object_mu.h"
#include "objects/gameplay_keep/gameplay_keep.h"
-#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000 | ACTOR_FLAG_8000000)
+#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON)
#define THIS ((EnFu*)thisx)
@@ -55,7 +55,7 @@ void func_80964694(EnFu* this, EnFuUnkStruct* ptr, Vec3f* arg2, s32 len);
void func_809647EC(PlayState* play, EnFuUnkStruct* ptr, s32 len);
void func_80964950(PlayState* play, EnFuUnkStruct* ptr, s32 len);
-const ActorInit En_Fu_InitVars = {
+ActorInit En_Fu_InitVars = {
ACTOR_EN_FU,
ACTORCAT_NPC,
FLAGS,
@@ -119,7 +119,7 @@ void func_809616E0(EnFu* this, PlayState* play) {
for (i = 0; i < this->unk_520; i++) {
temp_f20 = this->actor.world.pos.x - this->unk_538[i].x;
temp_f22 = this->actor.world.pos.z - this->unk_538[i].z;
- atan = Math_FAtan2F(temp_f22, temp_f20);
+ atan = Math_Atan2S_XY(temp_f22, temp_f20);
if (!spA0 || ((i % 2) != 0)) {
Actor_Spawn(&play->actorCtx, play, this->unk_544, this->unk_538[i].x, this->unk_538[i].y,
@@ -229,8 +229,8 @@ void EnFu_Init(Actor* thisx, PlayState* play) {
void EnFu_Destroy(Actor* thisx, PlayState* play) {
EnFu* this = THIS;
- gSaveContext.save.weekEventReg[63] &= (u8)~1;
- gSaveContext.save.weekEventReg[8] &= (u8)~1;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_08_01);
Collider_DestroyCylinder(play, &this->collider);
}
@@ -254,7 +254,7 @@ void func_80961D7C(PlayState* play) {
Actor* explosive = play->actorCtx.actorLists[ACTORCAT_EXPLOSIVES].first;
while (explosive != NULL) {
- if ((explosive->id == ACTOR_EN_BOM) && (explosive->bgCheckFlags & 1)) {
+ if ((explosive->id == ACTOR_EN_BOM) && (explosive->bgCheckFlags & BGCHECKFLAG_GROUND)) {
EnBom* bomb = (EnBom*)explosive;
if (bomb->actor.floorBgId != BGCHECK_SCENE) {
@@ -274,7 +274,7 @@ void func_80961E88(PlayState* play) {
Actor* explosive = play->actorCtx.actorLists[ACTORCAT_EXPLOSIVES].first;
while (explosive != NULL) {
- Actor_MarkForDeath(explosive);
+ Actor_Kill(explosive);
explosive = explosive->next;
}
}
@@ -388,9 +388,9 @@ void func_80962340(EnFu* this, PlayState* play) {
if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) {
Message_StartTextbox(play, 0x287E, &this->actor);
this->unk_552 = 0x287E;
- } else if ((CURRENT_DAY == 3) && (gSaveContext.save.weekEventReg[22] & 0x10) &&
- (gSaveContext.save.weekEventReg[22] & 0x20)) {
- if ((gSaveContext.save.weekEventReg[22] & 0x40)) {
+ } else if ((CURRENT_DAY == 3) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_10) &&
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_22_20)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_40)) {
Message_StartTextbox(play, 0x2883, &this->actor);
this->unk_552 = 0x2883;
} else {
@@ -410,7 +410,7 @@ void func_80962340(EnFu* this, PlayState* play) {
this->unk_552 = 0x2889;
}
this->actor.flags &= ~ACTOR_FLAG_10000;
- player->stateFlags1 &= ~0x20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
this->unk_54A = 1;
} else {
Message_StartTextbox(play, 0x283C, &this->actor);
@@ -429,7 +429,7 @@ 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.playerData.rupees >= 10) {
+ if (gSaveContext.save.saveInfo.playerData.rupees >= 10) {
func_8019F208();
Rupees_ChangeBy(-10);
func_80963DE4(this, play);
@@ -532,13 +532,13 @@ void func_80962660(EnFu* this, PlayState* play) {
break;
case 0x287D:
- gSaveContext.save.weekEventReg[63] |= 1;
- gSaveContext.save.weekEventReg[63] &= (u8)~2;
- func_801477B4(play);
- player->stateFlags1 |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED);
+ Message_CloseTextbox(play);
+ player->stateFlags1 |= PLAYER_STATE1_20;
this->unk_53C = 0;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
- func_801A2BB8(NA_BGM_TIMED_MINI_GAME);
+ Audio_PlaySubBgm(NA_BGM_TIMED_MINI_GAME);
if (this->unk_542 == 0) {
if (this->unk_546 == 1) {
func_80961EC8(play);
@@ -560,7 +560,7 @@ void func_80962660(EnFu* this, PlayState* play) {
case 0x287E:
case 0x2880:
case 0x2883:
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80963540(this);
func_80963560(this, play);
break;
@@ -605,8 +605,8 @@ void func_809628D0(EnFu* this, PlayState* play) {
case 0x2884:
case 0x2887:
case 0x288A:
- gSaveContext.save.weekEventReg[63] &= (u8)~1;
- gSaveContext.save.weekEventReg[63] &= (u8)~2;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED);
func_809622FC(this);
break;
@@ -644,7 +644,7 @@ void func_80962A10(EnFu* this, PlayState* play) {
}
play_sound(NA_SE_SY_FOUND);
- player->stateFlags1 &= ~0x20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
Interface_StartTimer(TIMER_ID_MINIGAME_2, 60);
if (this->unk_546 == 1) {
func_809616E0(this, play);
@@ -652,7 +652,7 @@ void func_80962A10(EnFu* this, PlayState* play) {
this->unk_546 = 1;
}
- if ((gSaveContext.save.playerForm == PLAYER_FORM_DEKU) && gSaveContext.save.playerData.isMagicAcquired) {
+ if ((gSaveContext.save.playerForm == PLAYER_FORM_DEKU) && gSaveContext.save.saveInfo.playerData.isMagicAcquired) {
Magic_Add(play, MAGIC_FILL_TO_CAPACITY);
}
@@ -680,8 +680,8 @@ void func_80962BCC(EnFu* this, PlayState* play) {
}
play_sound(NA_SE_SY_FOUND);
- player->stateFlags1 &= ~0x20;
- player->stateFlags3 |= 0x400000;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
+ player->stateFlags3 |= PLAYER_STATE3_400000;
Interface_StartTimer(TIMER_ID_MINIGAME_2, 60);
if (this->unk_546 == 1) {
@@ -711,8 +711,8 @@ void func_80962D60(EnFu* this, PlayState* play) {
}
play_sound(NA_SE_SY_FOUND);
- player->stateFlags1 &= ~0x20;
- player->stateFlags3 |= 0x400000;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
+ player->stateFlags3 |= PLAYER_STATE3_400000;
Interface_StartTimer(TIMER_ID_MINIGAME_2, 60);
if (this->unk_546 == 1) {
@@ -727,9 +727,9 @@ void func_80962D60(EnFu* this, PlayState* play) {
void func_80962EBC(EnFu* this, PlayState* play) {
if (this->unk_542 != 0) {
- if (this->actor.cutscene != -1) {
+ if (this->actor.csId != CS_ID_NONE) {
Camera_ChangeDataIdx(play->cameraPtrs[CAM_ID_MAIN],
- ActorCutscene_GetCutscene(this->actor.cutscene)->csCamSceneDataId);
+ CutsceneManager_GetCutsceneEntry(this->actor.csId)->csCamId);
}
}
}
@@ -737,7 +737,7 @@ void func_80962EBC(EnFu* this, PlayState* play) {
void func_80962F10(EnFu* this) {
this->unk_548 = 0;
this->actor.flags &= ~ACTOR_FLAG_1;
- gSaveContext.save.weekEventReg[8] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_08_01);
this->actionFunc = func_80962F4C;
}
@@ -748,7 +748,7 @@ void func_80962F4C(EnFu* this, PlayState* play) {
switch (this->unk_542) {
case 0:
if (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) {
- player->stateFlags3 |= 0x400;
+ player->stateFlags3 |= PLAYER_STATE3_400;
}
break;
@@ -775,12 +775,12 @@ void func_80962F4C(EnFu* this, PlayState* play) {
Message_StartTextbox(play, 0x288B, &this->actor);
}
- if ((!DynaPolyActor_IsInRidingRotatingState((DynaPolyActor*)this->actor.child) &&
- (player->actor.bgCheckFlags & 1)) ||
+ if ((!DynaPolyActor_IsPlayerAbove((DynaPolyActor*)this->actor.child) &&
+ (player->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) ||
(gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] <= SECONDS_TO_TIMER(0)) || (this->unk_548 == this->unk_54C)) {
- player->stateFlags3 &= ~0x400000;
+ player->stateFlags3 &= ~PLAYER_STATE3_400000;
func_80961E88(play);
- player->stateFlags1 |= 0x20;
+ player->stateFlags1 |= PLAYER_STATE1_20;
if (this->unk_548 < this->unk_54C) {
if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] == SECONDS_TO_TIMER(0)) {
Message_StartTextbox(play, 0x2885, &this->actor);
@@ -789,18 +789,18 @@ void func_80962F4C(EnFu* this, PlayState* play) {
Message_StartTextbox(play, 0x2888, &this->actor);
this->unk_552 = 0x2888;
}
- func_801A2C20();
+ Audio_StopSubBgm();
gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] = SECONDS_TO_TIMER(0);
gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_STOP;
this->unk_548 = 0;
func_809632D0(this);
} else {
this->unk_548 = 0;
- func_801A2C20();
+ Audio_StopSubBgm();
gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] = SECONDS_TO_TIMER(0);
gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_STOP;
Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900);
- func_8011B4E0(play, 1);
+ Interface_SetPerfectLetters(play, PERFECT_LETTERS_TYPE_1);
this->unk_54A = 3;
func_809632D0(this);
}
@@ -824,7 +824,7 @@ void func_809632D0(EnFu* this) {
Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
}
- gSaveContext.save.weekEventReg[8] &= (u8)~1;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_08_01);
if (this->unk_2D4 != NULL) {
BgFuMizu* mizu = this->unk_2D4;
@@ -843,12 +843,12 @@ void func_80963350(EnFu* this, PlayState* play) {
if ((this->unk_54A == 0) &&
(((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) ||
((Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) && (play->msgCtx.stateTimer == 1)))) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->unk_54A = 2;
D_80964C24 = 1;
}
- if ((this->unk_54A == 3) && (play->interfaceCtx.unk_286 == 0)) {
+ if ((this->unk_54A == 3) && !play->interfaceCtx.perfectLettersOn) {
this->unk_54A = 2;
D_80964C24 = 1;
}
@@ -878,10 +878,10 @@ void func_80963560(EnFu* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL;
func_80963610(this);
- } else if ((this->unk_552 == 0x2880) && !(gSaveContext.save.weekEventReg[22] & 0x80)) {
- Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f);
+ } else if ((this->unk_552 == 0x2880) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_80)) {
+ Actor_OfferGetItem(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f);
} else {
- Actor_PickUp(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f);
}
this->actor.child->freezeTimer = 10;
}
@@ -895,13 +895,13 @@ void func_80963630(EnFu* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- if ((gSaveContext.save.weekEventReg[22] & 0x10) && (gSaveContext.save.weekEventReg[22] & 0x20) &&
- (CURRENT_DAY == 3) && (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) {
- if (gSaveContext.save.weekEventReg[22] & 0x40) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_10) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_20) && (CURRENT_DAY == 3) &&
+ (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_40)) {
Message_StartTextbox(play, 0x2884, &this->actor);
this->unk_552 = 0x2884;
- } else if (!(gSaveContext.save.weekEventReg[22] & 0x80)) {
- gSaveContext.save.weekEventReg[22] |= 0x80;
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_80)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_22_80);
Message_StartTextbox(play, 0x2882, &this->actor);
this->unk_552 = 0x2882;
} else {
@@ -920,22 +920,22 @@ void func_80963630(EnFu* this, PlayState* play) {
if (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) {
switch (CURRENT_DAY) {
case 1:
- gSaveContext.save.weekEventReg[22] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_22_10);
break;
case 2:
- gSaveContext.save.weekEventReg[22] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_22_20);
break;
case 3:
- gSaveContext.save.weekEventReg[22] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_22_40);
break;
}
}
- player->stateFlags1 &= ~0x20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
} else {
this->actor.child->freezeTimer = 10;
- func_800B85E0(&this->actor, play, 500.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 500.0f, PLAYER_IA_MINUS1);
}
}
@@ -1019,7 +1019,7 @@ void func_809639D0(EnFu* this, PlayState* play) {
if (CUR_UPG_VALUE(UPG_BOMB_BAG) == 0) {
Message_StartTextbox(play, 0x2853, &this->actor);
this->unk_552 = 0x2853;
- } else if (gSaveContext.save.weekEventReg[22] & 0x10) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_10)) {
Message_StartTextbox(play, 0x284D, &this->actor);
this->unk_552 = 0x284D;
} else if (this->unk_53E == 1) {
@@ -1043,7 +1043,7 @@ void func_809639D0(EnFu* this, PlayState* play) {
} else if (CUR_UPG_VALUE(UPG_BOMB_BAG) == 0) {
Message_StartTextbox(play, 0x2853, &this->actor);
this->unk_552 = 0x2853;
- } else if (!(gSaveContext.save.weekEventReg[22] & 0x10)) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_10)) {
if (this->unk_53E == 1) {
Message_StartTextbox(play, 0x285B, &this->actor);
this->unk_552 = 0x285B;
@@ -1052,7 +1052,7 @@ void func_809639D0(EnFu* this, PlayState* play) {
Message_StartTextbox(play, 0x285D, &this->actor);
this->unk_552 = 0x285D;
}
- } else if (gSaveContext.save.weekEventReg[22] & 0x20) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_20)) {
Message_StartTextbox(play, 0x2855, &this->actor);
this->unk_552 = 0x2855;
} else if (this->unk_53E == 1) {
@@ -1076,15 +1076,15 @@ void func_809639D0(EnFu* this, PlayState* play) {
} else if (CUR_UPG_VALUE(UPG_QUIVER) == 0) {
Message_StartTextbox(play, 0x284B, &this->actor);
this->unk_552 = 0x284B;
- } else if (gSaveContext.save.weekEventReg[22] & 0x40) {
- if ((gSaveContext.save.weekEventReg[22] & 0x10) && (gSaveContext.save.weekEventReg[22] & 0x20)) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_40)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_10) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_20)) {
Message_StartTextbox(play, 0x285F, &this->actor);
this->unk_552 = 0x285F;
} else {
Message_StartTextbox(play, 0x2861, &this->actor);
this->unk_552 = 0x2861;
}
- } else if ((gSaveContext.save.weekEventReg[22] & 0x10) && (gSaveContext.save.weekEventReg[22] & 0x20)) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_10) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_20)) {
if (this->unk_53E == 1) {
Message_StartTextbox(play, 0x2863, &this->actor);
this->unk_552 = 0x2863;
@@ -1093,7 +1093,7 @@ void func_809639D0(EnFu* this, PlayState* play) {
Message_StartTextbox(play, 0x2865, &this->actor);
this->unk_552 = 0x2865;
}
- } else if ((gSaveContext.save.weekEventReg[22] & 0x10) || (gSaveContext.save.weekEventReg[22] & 0x20)) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_10) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_20)) {
if (this->unk_53E == 1) {
Message_StartTextbox(play, 0x2867, &this->actor);
this->unk_552 = 0x2867;
@@ -1139,7 +1139,7 @@ void func_80963DE4(EnFu* this, PlayState* play) {
}
void func_80963EAC(EnFu* this, PlayState* play) {
- if (gSaveContext.save.playerData.isMagicAcquired) {
+ if (gSaveContext.save.saveInfo.playerData.isMagicAcquired) {
if (this->unk_540 == 1) {
Message_StartTextbox(play, 0x2847, &this->actor);
this->unk_552 = 0x2847;
@@ -1174,9 +1174,9 @@ void func_80963F88(EnFu* this, PlayState* play) {
void func_80963FF8(EnFu* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (player->stateFlags1 & 0x100000) {
+ if (player->stateFlags1 & PLAYER_STATE1_100000) {
play->actorCtx.unk268 = 1;
- play->actorCtx.unk_26C.press.button = 0x8000;
+ play->actorCtx.unk_26C.press.button = BTN_A;
} else {
play->actorCtx.unk268 = 1;
}
@@ -1337,7 +1337,7 @@ void EnFu_Update(Actor* thisx, PlayState* play) {
func_809642E0(this, play);
Actor_MoveWithGravity(&this->actor);
func_8096209C(this, play);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
SkelAnime_Update(&this->skelAnime);
func_80961D7C(play);
func_809640D8(this, play);
@@ -1448,7 +1448,7 @@ void func_80964950(PlayState* play, EnFuUnkStruct* ptr, s32 len) {
OPEN_DISPS(play->state.gfxCtx);
- POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP);
+ POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP);
for (i = 0; i < len; i++, ptr++) {
diff --git a/src/overlays/actors/ovl_En_Fu/z_en_fu.h b/src/overlays/actors/ovl_En_Fu/z_en_fu.h
index e35c961e7..44f769a8c 100644
--- a/src/overlays/actors/ovl_En_Fu/z_en_fu.h
+++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.h
@@ -52,6 +52,4 @@ typedef struct EnFu {
/* 0x552 */ u16 unk_552;
} EnFu; // size = 0x554
-extern const ActorInit En_Fu_InitVars;
-
#endif // Z_EN_FU_H
diff --git a/src/overlays/actors/ovl_En_Fu_Kago/overlay.cfg b/src/overlays/actors/ovl_En_Fu_Kago/overlay.cfg
deleted file mode 100644
index 9a946e309..000000000
--- a/src/overlays/actors/ovl_En_Fu_Kago/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Fu_Kago
-z_en_fu_kago.c
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 a2fc00b22..e976e01dc 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
@@ -28,7 +28,7 @@ void func_80AD0028(EnFuKago* this, PlayState* play);
void func_80AD0274(EnFuKago* this);
void func_80AD0288(EnFuKago* this, PlayState* play);
-const ActorInit En_Fu_Kago_InitVars = {
+ActorInit En_Fu_Kago_InitVars = {
ACTOR_EN_FU_KAGO,
ACTORCAT_BG,
FLAGS,
@@ -86,7 +86,7 @@ void EnFuKago_Init(Actor* thisx, PlayState* play) {
CollisionHeader* sp34 = NULL;
Actor* npc = play->actorCtx.actorLists[ACTORCAT_NPC].first;
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
CollisionHeader_GetVirtual(&object_fu_mato_Colheader_0015C0, &sp34);
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, sp34);
Actor_SetScale(&this->dyna.actor, 0.1f);
@@ -100,7 +100,7 @@ void EnFuKago_Init(Actor* thisx, PlayState* play) {
}
if (npc == NULL) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
@@ -136,7 +136,7 @@ s32 func_80ACF8B8(EnFuKago* this, PlayState* play) {
return false;
}
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_SY_TRE_BOX_APPEAR);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_SY_TRE_BOX_APPEAR);
return true;
} else {
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
@@ -227,8 +227,8 @@ void func_80ACFA78(EnFuKago* this, PlayState* play) {
this->unk_338 = 60;
this->unk_33A = 1;
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_WOODBOX_BREAK);
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WOODBOX_BREAK);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->actionFunc = func_80AD0028;
}
@@ -342,7 +342,7 @@ void func_80AD0288(EnFuKago* this, PlayState* play) {
scale->z = scale->x;
scale->y = scale->x;
if (scale->x == 0.0f) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
}
diff --git a/src/overlays/actors/ovl_En_Fu_Kago/z_en_fu_kago.h b/src/overlays/actors/ovl_En_Fu_Kago/z_en_fu_kago.h
index 909e7b24d..48bd69a27 100644
--- a/src/overlays/actors/ovl_En_Fu_Kago/z_en_fu_kago.h
+++ b/src/overlays/actors/ovl_En_Fu_Kago/z_en_fu_kago.h
@@ -27,6 +27,4 @@ typedef struct EnFuKago {
/* 0x33C */ s16 unk_33C;
} EnFuKago; // size = 0x340
-extern const ActorInit En_Fu_Kago_InitVars;
-
#endif // Z_EN_FU_KAGO_H
diff --git a/src/overlays/actors/ovl_En_Fu_Mato/overlay.cfg b/src/overlays/actors/ovl_En_Fu_Mato/overlay.cfg
deleted file mode 100644
index 78253baff..000000000
--- a/src/overlays/actors/ovl_En_Fu_Mato/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Fu_Mato
-z_en_fu_mato.c
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 19aa9dd2a..c42278805 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
@@ -27,7 +27,7 @@ void func_80ACECFC(EnFuMato* this, PlayState* play);
void func_80ACEFC4(EnFuMato* this);
void func_80ACEFD8(EnFuMato* this, PlayState* play);
-const ActorInit En_Fu_Mato_InitVars = {
+ActorInit En_Fu_Mato_InitVars = {
ACTOR_EN_FU_MATO,
ACTORCAT_BG,
FLAGS,
@@ -75,7 +75,7 @@ void EnFuMato_Init(Actor* thisx, PlayState* play) {
Actor* actor = play->actorCtx.actorLists[ACTORCAT_NPC].first;
EnFu* fu;
- DynaPolyActor_Init(&this->dyna, 3);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y);
CollisionHeader_GetVirtual(&object_fu_mato_Colheader_0023D4, &sp2C);
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, sp2C);
Actor_SetScale(&this->dyna.actor, 0.1f);
@@ -92,7 +92,7 @@ void EnFuMato_Init(Actor* thisx, PlayState* play) {
}
if (actor == NULL) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
@@ -156,7 +156,7 @@ void func_80ACE51C(EnFuMato* this, PlayState* play) {
}
}
- this->dyna.actor.speedXZ = 2.0f;
+ this->dyna.actor.speed = 2.0f;
this->dyna.actor.shape.rot.y = Math_Vec3f_Yaw(&this->dyna.actor.world.pos, &this->dyna.actor.parent->world.pos);
Actor_MoveWithGravity(&this->dyna.actor);
@@ -174,7 +174,7 @@ void func_80ACE680(EnFuMato* this) {
this->unk_2FC.y = Rand_Next() & 0xFFF;
this->unk_2FC.z = Rand_Next() & 0xFFF;
this->unk_302 = 3;
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_WOODPLATE_BOUND);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WOODPLATE_BOUND);
this->actionFunc = func_80ACE718;
}
@@ -185,14 +185,15 @@ void func_80ACE718(EnFuMato* this, PlayState* play) {
this->dyna.actor.velocity.y += this->dyna.actor.gravity;
Actor_UpdatePos(&this->dyna.actor);
- Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 15.0f, 30.0f, 60.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 15.0f, 30.0f, 60.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
- if ((this->dyna.actor.bgCheckFlags & 1) || (this->dyna.actor.world.pos.y < -500.0f)) {
+ if ((this->dyna.actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->dyna.actor.world.pos.y < -500.0f)) {
Vec3f sp3C = { 0.0f, 0.0f, 0.0f };
Vec3f sp30 = { 0.0f, 2.0f, 0.0f };
func_800B3030(play, &this->dyna.actor.world.pos, &sp3C, &sp30, 20, 40, 2);
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
}
@@ -241,7 +242,7 @@ void func_80ACE850(EnFuMato* this, PlayState* play) {
this->dyna.actor.freezeTimer = 2;
EffectSsHahen_SpawnBurst(play, &this->dyna.actor.world.pos, 13.0f, 0, 7, 8, 20, HAHEN_OBJECT_DEFAULT, 10, NULL);
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_WOODPLATE_BROKEN);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WOODPLATE_BROKEN);
this->actionFunc = func_80ACECFC;
}
@@ -329,8 +330,9 @@ void func_80ACECFC(EnFuMato* this, PlayState* play) {
}
if (this->unk_302 == 1) {
- Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 15.0f, 30.0f, 60.0f, 5);
- if (this->dyna.actor.bgCheckFlags & 1) {
+ Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 15.0f, 30.0f, 60.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
+ if (this->dyna.actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
func_80ACEB2C(this);
}
}
@@ -352,7 +354,7 @@ void func_80ACEFD8(EnFuMato* this, PlayState* play) {
Math_SmoothStepToF(&scale->x, 0.0f, 0.1f, 0.005f, 0.005f);
scale->y = scale->z = scale->x;
if (scale->x == 0.0f) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
}
@@ -368,7 +370,7 @@ s32 func_80ACF04C(EnFuMato* this, PlayState* play) {
this->collider.base.acFlags &= ~AC_HIT;
this->collider.base.ocFlags1 &= ~OC1_HIT;
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_SY_TRE_BOX_APPEAR);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_SY_TRE_BOX_APPEAR);
fu->unk_548++;
if ((fu->unk_542 == 2) || (gSaveContext.save.playerForm == PLAYER_FORM_DEKU)) {
diff --git a/src/overlays/actors/ovl_En_Fu_Mato/z_en_fu_mato.h b/src/overlays/actors/ovl_En_Fu_Mato/z_en_fu_mato.h
index d24ac91d5..2065784d7 100644
--- a/src/overlays/actors/ovl_En_Fu_Mato/z_en_fu_mato.h
+++ b/src/overlays/actors/ovl_En_Fu_Mato/z_en_fu_mato.h
@@ -34,6 +34,4 @@ typedef struct EnFuMato {
/* 0x30A */ s16 unk_30A;
} EnFuMato; // size = 0x30C
-extern const ActorInit En_Fu_Mato_InitVars;
-
#endif // Z_EN_FU_MATO_H
diff --git a/src/overlays/actors/ovl_En_Fz/overlay.cfg b/src/overlays/actors/ovl_En_Fz/overlay.cfg
deleted file mode 100644
index 0eba400a5..000000000
--- a/src/overlays/actors/ovl_En_Fz/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Fz
-z_en_fz.c
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 58d5a6f5f..fe4e6636b 100644
--- a/src/overlays/actors/ovl_En_Fz/z_en_fz.c
+++ b/src/overlays/actors/ovl_En_Fz/z_en_fz.c
@@ -49,7 +49,7 @@ void func_809340BC(EnFz* this, Vec3f* a, Vec3f* b, Vec3f* c, f32 arg4, f32 arg5,
void func_80934178(EnFz* this, PlayState* play);
void func_80934464(EnFz* this, PlayState* play);
-const ActorInit En_Fz_InitVars = {
+ActorInit En_Fz_InitVars = {
ACTOR_EN_FZ,
ACTORCAT_ENEMY,
FLAGS,
@@ -188,7 +188,7 @@ void EnFz_Init(Actor* thisx, PlayState* play) {
this->unk_BCE = 0;
this->unk_BD7 = 1;
this->unk_BD8 = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.uncullZoneScale = 400.0f;
this->unk_BAC = this->actor.world.pos.y;
this->unk_BB4 = this->actor.world.pos.y;
@@ -359,12 +359,12 @@ void func_80932C98(EnFz* this, PlayState* play) {
Vec3f sp3C;
if (this->unk_BCD != 0) {
- if ((this->actor.bgCheckFlags & 8) ||
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) ||
!Actor_TestFloorInDirection(&this->actor, play, 60.0f, this->actor.world.rot.y)) {
- this->actor.bgCheckFlags &= ~0x8;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_WALL;
this->unk_BCD = 0;
this->unk_BBC = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
}
@@ -375,8 +375,8 @@ void func_80932C98(EnFz* this, PlayState* play) {
if ((parent->update == NULL) || (parent->colChkInfo.health <= 0)) {
this->actor.colChkInfo.health = 0;
this->unk_BC4 = 5;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FREEZAD_DEAD);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ICE_BROKEN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FREEZAD_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_ICE_BROKEN);
sp3C.x = this->actor.world.pos.x;
sp3C.y = this->actor.world.pos.y;
sp3C.z = this->actor.world.pos.z;
@@ -388,8 +388,8 @@ void func_80932C98(EnFz* this, PlayState* play) {
if ((this->actor.colChkInfo.health != 0) && (this->unk_BC4 == 1)) {
this->actor.colChkInfo.health = 0;
this->unk_BC4 = 5;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FREEZAD_DEAD);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ICE_BROKEN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FREEZAD_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_ICE_BROKEN);
sp3C.x = this->actor.world.pos.x;
sp3C.y = this->actor.world.pos.y;
sp3C.z = this->actor.world.pos.z;
@@ -405,7 +405,7 @@ void func_80932C98(EnFz* this, PlayState* play) {
this->unk_BCD = 0;
this->unk_BBC = 0.0f;
this->collider1.base.acFlags &= ~AC_HIT;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->unk_BCA = 10;
func_809330D4(this);
} else if (this->collider2.base.acFlags & AC_BOUNCED) {
@@ -420,9 +420,9 @@ void func_80932C98(EnFz* this, PlayState* play) {
case 15:
Actor_ApplyDamage(&this->actor);
- Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, 0x2000, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_XLU, 8);
if (this->actor.colChkInfo.health != 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FREEZAD_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FREEZAD_DAMAGE);
sp3C.x = this->actor.world.pos.x;
sp3C.y = this->actor.world.pos.y;
sp3C.z = this->actor.world.pos.z;
@@ -430,8 +430,8 @@ void func_80932C98(EnFz* this, PlayState* play) {
this->unk_BCF++;
break;
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FREEZAD_DEAD);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ICE_BROKEN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FREEZAD_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_ICE_BROKEN);
sp3C.x = this->actor.world.pos.x;
sp3C.y = this->actor.world.pos.y;
sp3C.z = this->actor.world.pos.z;
@@ -440,7 +440,7 @@ void func_80932C98(EnFz* this, PlayState* play) {
break;
case 2:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FREEZAD_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FREEZAD_DEAD);
func_80933790(this);
break;
}
@@ -572,7 +572,7 @@ void func_809333D8(EnFz* this, PlayState* play) {
void func_80933414(EnFz* this) {
this->unk_BD6 = 1;
this->unk_BBC = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->unk_BCA = 40;
this->actionFunc = func_80933444;
}
@@ -649,7 +649,7 @@ void func_809336C0(EnFz* this, PlayState* play) {
this->unk_BBC = 0.0f;
this->actor.gravity = 0.0f;
this->actor.velocity.y = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->unk_BCC = 1;
this->unk_BCE = 0;
this->unk_BD8 = 1;
@@ -663,7 +663,7 @@ void func_809336C0(EnFz* this, PlayState* play) {
void func_80933760(EnFz* this, PlayState* play) {
if (this->unk_BCA == 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -672,7 +672,7 @@ void func_80933790(EnFz* this) {
this->unk_BCE = 0;
this->unk_BD8 = 1;
this->actor.flags &= ~ACTOR_FLAG_1;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->unk_BBC = 0.0f;
this->actionFunc = func_809337D4;
}
@@ -821,10 +821,10 @@ void EnFz_Update(Actor* thisx, PlayState* play) {
}
}
- Math_StepToF(&this->actor.speedXZ, this->unk_BBC, 0.2f);
+ Math_StepToF(&this->actor.speed, this->unk_BBC, 0.2f);
Actor_MoveWithGravity(&this->actor);
if (this->unk_BCC != 0) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
}
D_809347AC[this->unk_BD6](this);
@@ -1003,7 +1003,7 @@ void func_80934464(EnFz* this, PlayState* play) {
gDPPipeSync(POLY_XLU_DISP++);
if (flag == 0) {
- gSPDisplayList(POLY_XLU_DISP++, gFrozenSteamDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFrozenSteamMaterialDL);
flag++;
}
@@ -1017,7 +1017,7 @@ void func_80934464(EnFz* this, PlayState* play) {
Matrix_Scale(ptr->unk_30, ptr->unk_30, 1.0f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, gFrozenSteamVtxDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFrozenSteamModelDL);
}
}
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 58d1fb6d4..539560c88 100644
--- a/src/overlays/actors/ovl_En_Fz/z_en_fz.h
+++ b/src/overlays/actors/ovl_En_Fz/z_en_fz.h
@@ -70,6 +70,4 @@ typedef struct EnFz {
/* 0xBD9 */ u8 unk_BD9;
} EnFz; /* size = 0xBDC */
-extern const ActorInit En_Fz_InitVars;
-
#endif // Z_EN_FZ_H
diff --git a/src/overlays/actors/ovl_En_Gakufu/overlay.cfg b/src/overlays/actors/ovl_En_Gakufu/overlay.cfg
deleted file mode 100644
index 9f421707a..000000000
--- a/src/overlays/actors/ovl_En_Gakufu/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Gakufu
-z_en_gakufu.c
diff --git a/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.c b/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.c
index cc19acb63..add0814bd 100644
--- a/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.c
+++ b/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.c
@@ -25,7 +25,7 @@ void EnGakufu_GiveReward(EnGakufu* this, PlayState* play);
void EnGakufu_PlayRewardCutscene(EnGakufu* this, PlayState* play);
void EnGakufu_WaitForSong(EnGakufu* this, PlayState* play);
-const ActorInit En_Gakufu_InitVars = {
+ActorInit En_Gakufu_InitVars = {
ACTOR_EN_GAKUFU,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -115,9 +115,12 @@ void EnGakufu_ProcessNotes(EnGakufu* this) {
songIndex = this->songIndex;
ocarinaSongButtons = &gOcarinaSongButtons[songIndex];
+
+ //! FAKE:
+ if (1) {}
songNumButtons = gOcarinaSongButtons[this->songIndex].numButtons;
- for (i = 0; i < songNumButtons; i++) {
+ for (i = 0; i < (u8)songNumButtons; i++) {
this->buttonIndex[i] = ocarinaSongButtons->buttonIndex[i];
}
@@ -142,20 +145,20 @@ void EnGakufu_Init(Actor* thisx, PlayState* play) {
this->actor.flags &= ~ACTOR_FLAG_2000000;
if (EnGakufu_IsPlayerInRange(this, play)) {
- gSaveContext.eventInf[3] |= 2;
+ SET_EVENTINF(EVENTINF_31);
} else {
- gSaveContext.eventInf[3] &= (u8)~2;
+ CLEAR_EVENTINF(EVENTINF_31);
}
this->actionFunc = EnGakufu_WaitForSong;
- gSaveContext.eventInf[3] &= (u8)~4;
+ CLEAR_EVENTINF(EVENTINF_32);
}
void EnGakufu_Destroy(Actor* thisx, PlayState* play) {
EnGakufu* this = THIS;
if (GAKUFU_GET_TYPE(&this->actor) != GAKUFU_MILK_BAR) {
- gSaveContext.eventInf[3] &= (u8)~2;
+ CLEAR_EVENTINF(EVENTINF_31);
}
}
@@ -207,7 +210,7 @@ void EnGakufu_GiveReward(EnGakufu* this, PlayState* play) {
play_sound(NA_SE_SY_CORRECT_CHIME);
- hour = gSaveContext.save.time * (24.0f / 0x10000); // TIME_TO_HOURS_F
+ hour = TIME_TO_HOURS_F(gSaveContext.save.time);
for (i = 0; i < 3; i++) {
Item_DropCollectible(play, &sRewardDropsSpawnTerminaFieldPos, sRewardDrops[i + sRewardDropsIndex[hour]]);
}
@@ -216,35 +219,35 @@ void EnGakufu_GiveReward(EnGakufu* this, PlayState* play) {
}
void EnGakufu_PlayRewardCutscene(EnGakufu* this, PlayState* play) {
- if (this->actor.cutscene == -1) {
+ if (this->actor.csId == CS_ID_NONE) {
EnGakufu_GiveReward(this, play);
- } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ } else if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
EnGakufu_GiveReward(this, play);
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
/**
* Waits for the notes on the wall to be played and updates the corresponding flags
- * (gSaveContext.eventInf[3] & 2) is checking if Player is within range of the wall
- * (gSaveContext.eventInf[3] & 4) is checking if Player has played the notes of the wall
+ * EVENTINF_31 is used to track if Player is within range of the wall
+ * EVENTINF_32 is used to track if Player has played the notes of the wall
*/
void EnGakufu_WaitForSong(EnGakufu* this, PlayState* play) {
- if (gSaveContext.eventInf[3] & 2) {
- if (gSaveContext.eventInf[3] & 4) {
- gSaveContext.eventInf[3] &= (u8)~2;
- gSaveContext.eventInf[3] &= (u8)~4;
+ if (CHECK_EVENTINF(EVENTINF_31)) {
+ if (CHECK_EVENTINF(EVENTINF_32)) {
+ CLEAR_EVENTINF(EVENTINF_31);
+ CLEAR_EVENTINF(EVENTINF_32);
this->actionFunc = EnGakufu_PlayRewardCutscene;
EnGakufu_PlayRewardCutscene(this, play);
this->actor.draw = NULL;
} else if (!EnGakufu_IsPlayerInRange(this, play)) {
- gSaveContext.eventInf[3] &= (u8)~2;
+ CLEAR_EVENTINF(EVENTINF_31);
}
} else if (EnGakufu_IsPlayerInRange(this, play)) {
- gSaveContext.eventInf[3] |= 2;
+ SET_EVENTINF(EVENTINF_31);
}
}
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 c9db31b75..04d9c7159 100644
--- a/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.h
+++ b/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.h
@@ -21,6 +21,4 @@ typedef struct EnGakufu {
/* 0x150 */ EnGakufuActionFunc actionFunc;
} EnGakufu; // size = 0x154
-extern const ActorInit En_Gakufu_InitVars;
-
#endif // Z_EN_GAKUFU_H
diff --git a/src/overlays/actors/ovl_En_Gamelupy/overlay.cfg b/src/overlays/actors/ovl_En_Gamelupy/overlay.cfg
deleted file mode 100644
index a9b07ebae..000000000
--- a/src/overlays/actors/ovl_En_Gamelupy/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Gamelupy
-z_en_gamelupy.c
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 e01193378..9f45748df 100644
--- a/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.c
+++ b/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.c
@@ -23,7 +23,7 @@ void func_80AF6944(EnGamelupy* this);
void func_80AF6994(EnGamelupy* this);
void func_80AF6A38(EnGamelupy* this);
-const ActorInit En_Gamelupy_InitVars = {
+ActorInit En_Gamelupy_InitVars = {
ACTOR_EN_GAMELUPY,
ACTORCAT_PROP,
FLAGS,
@@ -126,7 +126,7 @@ void func_80AF6994(EnGamelupy* this) {
void func_80AF69A8(EnGamelupy* this, PlayState* play) {
if (this->collider.base.ocFlags1 & OC1_HIT) {
- *this->unk_198 += 0x32;
+ *this->unk_198 += 50;
if (this->rupeeIndex == 1) {
Rupees_ChangeBy(5);
} else {
@@ -140,7 +140,7 @@ void func_80AF69A8(EnGamelupy* this, PlayState* play) {
void func_80AF6A38(EnGamelupy* this) {
this->unk_19C = 0;
this->actor.gravity = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_GET_RUPY);
+ Actor_PlaySfx(&this->actor, NA_SE_SY_GET_RUPY);
this->actionFunc = func_80AF6A78;
}
@@ -149,7 +149,7 @@ void func_80AF6A78(EnGamelupy* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (this->unk_19C > 30) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
this->unk_19C++;
this->actor.world.pos = player->actor.world.pos;
@@ -171,7 +171,7 @@ void EnGamelupy_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 32.0f, 30.0f, 0.0f, 0xC);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 32.0f, 30.0f, 0.0f, UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8);
func_80AF6B40(this, play);
}
diff --git a/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.h b/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.h
index 4ee6a5b11..5d45f3168 100644
--- a/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.h
+++ b/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.h
@@ -18,6 +18,4 @@ typedef struct EnGamelupy {
/* 0x1A0 */ s16 unk_1A0;
} EnGamelupy; // size = 0x1A4
-extern const ActorInit En_Gamelupy_InitVars;
-
#endif // Z_EN_GAMELUPY_H
diff --git a/src/overlays/actors/ovl_En_Gb2/overlay.cfg b/src/overlays/actors/ovl_En_Gb2/overlay.cfg
deleted file mode 100644
index d604decdc..000000000
--- a/src/overlays/actors/ovl_En_Gb2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Gb2
-z_en_gb2.c
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 45d6661eb..14afe3270 100644
--- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c
+++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c
@@ -36,7 +36,7 @@ void func_80B111AC(EnGb2* this, PlayState* play);
void func_80B11268(EnGb2* this, PlayState* play);
void func_80B11344(EnGb2* this, PlayState* play);
-const ActorInit En_Gb2_InitVars = {
+ActorInit En_Gb2_InitVars = {
ACTOR_EN_GB2,
ACTORCAT_NPC,
FLAGS,
@@ -120,8 +120,8 @@ s32 func_80B0F660(EnGb2* this, PlayState* play) {
}
void func_80B0F6DC(EnGb2* this) {
- if (!(gSaveContext.save.weekEventReg[54] & 0x20)) {
- gSaveContext.save.weekEventReg[54] |= 0x20;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_54_20)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_54_20);
this->unk_26E = 0x14D0;
} else {
this->unk_26E = 0x14D1;
@@ -131,15 +131,15 @@ void func_80B0F6DC(EnGb2* this) {
}
void func_80B0F728(EnGb2* this, PlayState* play) {
- if (gSaveContext.eventInf[4] & 0x10) {
+ if (CHECK_EVENTINF(EVENTINF_44)) {
func_80B0FBF0(this, play);
this->unk_26E = 0x14E1;
- if (gSaveContext.eventInf[4] & 0x80) {
+ if (CHECK_EVENTINF(EVENTINF_47)) {
this->unk_288 = 10;
} else {
this->unk_288 = 30;
}
- } else if (gSaveContext.eventInf[4] & 0x20) {
+ } else if (CHECK_EVENTINF(EVENTINF_45)) {
func_80B0FBF0(this, play);
this->unk_26E = 0x14E0;
this->unk_26C |= 2;
@@ -147,9 +147,9 @@ void func_80B0F728(EnGb2* this, PlayState* play) {
this->unk_26E = 0x14DC;
}
- gSaveContext.eventInf[4] &= (u8)~0x10;
- gSaveContext.eventInf[4] &= (u8)~0x20;
- gSaveContext.eventInf[4] &= (u8)~0x40;
+ CLEAR_EVENTINF(EVENTINF_44);
+ CLEAR_EVENTINF(EVENTINF_45);
+ CLEAR_EVENTINF(EVENTINF_46);
this->actionFunc = func_80B10584;
}
@@ -159,11 +159,11 @@ u16 func_80B0F7FC(EnGb2* this) {
return 0x14D1;
case 0x14D1:
- if (gSaveContext.eventInf[4] & 0x80) {
+ if (CHECK_EVENTINF(EVENTINF_47)) {
return 0x14E4;
}
- if (gSaveContext.save.playerData.health > 48) {
+ if (gSaveContext.save.saveInfo.playerData.health > 48) {
return 0x14D2;
}
@@ -171,7 +171,7 @@ u16 func_80B0F7FC(EnGb2* this) {
return 0x14D3;
case 0x14E4:
- if (gSaveContext.save.playerData.health > 48) {
+ if (gSaveContext.save.saveInfo.playerData.health > 48) {
return 0x14D2;
}
@@ -179,7 +179,7 @@ u16 func_80B0F7FC(EnGb2* this) {
return 0x14D3;
case 0x14D2:
- if (gSaveContext.eventInf[4] & 0x80) {
+ if (CHECK_EVENTINF(EVENTINF_47)) {
return 0x14E5;
}
return 0x14D4;
@@ -208,7 +208,7 @@ u16 func_80B0F8F8(EnGb2* this) {
case 0x14DE:
this->unk_26C |= 2;
- gSaveContext.save.weekEventReg[54] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_54_80);
return 0x14DF;
case 0x14E1:
@@ -226,7 +226,7 @@ u16 func_80B0F97C(EnGb2* this) {
return 0x14F7;
case 0x14F7:
- gSaveContext.save.weekEventReg[76] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_76_80);
this->unk_26C |= 2;
return 0x14F8;
@@ -241,9 +241,9 @@ u16 func_80B0F97C(EnGb2* this) {
}
void func_80B0FA04(EnGb2* this) {
- this->unk_282[0] = this->actor.cutscene;
- this->unk_282[1] = ActorCutscene_GetAdditionalCutscene(this->unk_282[0]);
- this->unk_282[2] = ActorCutscene_GetAdditionalCutscene(this->unk_282[1]);
+ this->csIdList[0] = this->actor.csId;
+ this->csIdList[1] = CutsceneManager_GetAdditionalCsId(this->csIdList[0]);
+ this->csIdList[2] = CutsceneManager_GetAdditionalCsId(this->csIdList[1]);
}
s32 func_80B0FA48(EnGb2* this, PlayState* play) {
@@ -259,7 +259,7 @@ s32 func_80B0FA48(EnGb2* this, PlayState* play) {
return false;
case PLAYER_MASK_CAPTAIN:
- if (!(gSaveContext.save.weekEventReg[80] & 0x40)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_80_40)) {
this->unk_26E = 0x14EB;
return false;
}
@@ -267,7 +267,7 @@ s32 func_80B0FA48(EnGb2* this, PlayState* play) {
return true;
}
- if (!(gSaveContext.save.weekEventReg[80] & 0x20)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_80_20)) {
this->unk_26E = 0x14EF;
return false;
} else {
@@ -370,9 +370,9 @@ void func_80B0FE7C(PlayState* play) {
}
void func_80B0FEBC(EnGb2* this, PlayState* play) {
- if ((play->msgCtx.ocarinaMode == OCARINA_SONG_ELEGY) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING)) {
+ if ((play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING)) {
play->msgCtx.ocarinaMode = 4;
- gSaveContext.eventInf[4] |= 0x80;
+ SET_EVENTINF(EVENTINF_47);
this->unk_26E = 0x14D1;
this->unk_288 = 10;
}
@@ -395,7 +395,7 @@ void func_80B0FFA8(EnGb2* this, PlayState* play) {
play->msgCtx.stateTimer = 4;
this->unk_26E = 0x14D1;
this->unk_288 = 30;
- gSaveContext.eventInf[4] &= (u8)~0x80;
+ CLEAR_EVENTINF(EVENTINF_47);
this->unk_26C &= ~2;
this->actionFunc = func_80B0FEBC;
} else {
@@ -407,7 +407,7 @@ void func_80B0FFA8(EnGb2* this, PlayState* play) {
if (this->unk_26E == 0x14D5) {
switch (play->msgCtx.choiceIndex) {
case 0:
- if (gSaveContext.save.playerData.rupees < this->unk_288) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < this->unk_288) {
play_sound(NA_SE_SY_ERROR);
this->unk_26E = 0x14D7;
this->unk_26C |= 2;
@@ -433,7 +433,7 @@ void func_80B0FFA8(EnGb2* this, PlayState* play) {
Rupees_ChangeBy(-this->unk_288);
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
- func_800B7298(play, NULL, 7);
+ func_800B7298(play, NULL, PLAYER_CSMODE_WAIT);
this->actionFunc = func_80B11344;
break;
@@ -451,10 +451,10 @@ void func_80B0FFA8(EnGb2* this, PlayState* play) {
void func_80B10240(EnGb2* this, PlayState* play) {
this->unk_27C = D_80B119B0[this->unk_280].unk_00;
this->unk_27E = D_80B119B0[this->unk_280].unk_10;
- this->unk_282[0] = this->actor.cutscene;
+ this->csIdList[0] = this->actor.csId;
this->unk_268 = NULL;
- if (ActorCutscene_GetCanPlayNext(this->unk_282[0])) {
- ActorCutscene_Start(this->unk_282[0], &this->actor);
+ if (CutsceneManager_IsNext(this->csIdList[0])) {
+ CutsceneManager_Start(this->csIdList[0], &this->actor);
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, this->unk_27C, D_80B119B0[this->unk_280].unk_04.x,
D_80B119B0[this->unk_280].unk_04.y, D_80B119B0[this->unk_280].unk_04.z, 0, 0, 0,
this->unk_27E);
@@ -463,7 +463,7 @@ void func_80B10240(EnGb2* this, PlayState* play) {
}
this->actionFunc = func_80B10344;
} else {
- ActorCutscene_SetIntentToPlay(this->unk_282[0]);
+ CutsceneManager_Queue(this->csIdList[0]);
}
}
@@ -488,8 +488,8 @@ void func_80B10344(EnGb2* this, PlayState* play) {
if (this->unk_280 == 3) {
this->unk_26C &= ~0x200;
gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_STOP;
- func_800FE498();
- gSaveContext.eventInf[4] |= 0x40;
+ Environment_StartTime();
+ SET_EVENTINF(EVENTINF_46);
func_80B0FE7C(play);
} else if (this->unk_280 == 2) {
if (this->unk_26C & 0x400) {
@@ -505,10 +505,10 @@ void func_80B10344(EnGb2* this, PlayState* play) {
}
}
- if (gSaveContext.save.playerData.health < 49) {
+ if (gSaveContext.save.saveInfo.playerData.health < 49) {
gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_STOP;
- gSaveContext.eventInf[4] |= 0x40;
- gSaveContext.eventInf[4] |= 0x20;
+ SET_EVENTINF(EVENTINF_46);
+ SET_EVENTINF(EVENTINF_45);
if ((this->unk_268 != NULL) && (this->unk_268->update == NULL)) {
this->unk_268 = NULL;
@@ -521,8 +521,8 @@ void func_80B10344(EnGb2* this, PlayState* play) {
func_80B0FE7C(play);
} else if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_1] == SECONDS_TO_TIMER(0)) {
gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_STOP;
- gSaveContext.eventInf[4] |= 0x40;
- gSaveContext.eventInf[4] |= 0x10;
+ SET_EVENTINF(EVENTINF_46);
+ SET_EVENTINF(EVENTINF_44);
if ((this->unk_268 != NULL) && (this->unk_268->update == NULL)) {
this->unk_268 = NULL;
@@ -564,7 +564,7 @@ void func_80B10634(EnGb2* this, PlayState* play) {
} else {
this->unk_26E = 0x14D1;
this->unk_288 = 30;
- gSaveContext.eventInf[4] &= (u8)~0x80;
+ CLEAR_EVENTINF(EVENTINF_47);
this->actionFunc = func_80B0FEBC;
}
} else {
@@ -575,7 +575,7 @@ void func_80B10634(EnGb2* this, PlayState* play) {
} else if ((talkState == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) {
switch (play->msgCtx.choiceIndex) {
case 0:
- if (gSaveContext.save.playerData.rupees < this->unk_288) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < this->unk_288) {
play_sound(NA_SE_SY_ERROR);
this->unk_26E = 0x14D7;
this->unk_26C |= 2;
@@ -585,7 +585,7 @@ void func_80B10634(EnGb2* this, PlayState* play) {
Rupees_ChangeBy(-this->unk_288);
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
- func_800B7298(play, NULL, 7);
+ func_800B7298(play, NULL, PLAYER_CSMODE_WAIT);
this->actionFunc = func_80B11344;
}
break;
@@ -601,23 +601,23 @@ void func_80B10634(EnGb2* this, PlayState* play) {
}
void func_80B10868(EnGb2* this, PlayState* play) {
- if (ActorCutscene_GetCurrentIndex() != this->unk_282[2]) {
- if (ActorCutscene_GetCanPlayNext(this->unk_282[this->unk_290])) {
+ if (CutsceneManager_GetCurrentCsId() != this->csIdList[2]) {
+ if (CutsceneManager_IsNext(this->csIdList[this->csIdIndex])) {
this->actionFunc = func_80B10A48;
- ActorCutscene_StartAndSetFlag(this->unk_282[this->unk_290], &this->actor);
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csIdList[this->csIdIndex], &this->actor);
} else {
- ActorCutscene_SetIntentToPlay(this->unk_282[this->unk_290]);
+ CutsceneManager_Queue(this->csIdList[this->csIdIndex]);
}
} else {
- this->unk_290 = 1;
- ActorCutscene_SetIntentToPlay(this->unk_282[this->unk_290]);
+ this->csIdIndex = 1;
+ CutsceneManager_Queue(this->csIdList[this->csIdIndex]);
}
}
void func_80B10924(EnGb2* this, PlayState* play) {
s32 sp24;
- if (gSaveContext.save.weekEventReg[54] & 0x40) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_40)) {
sp24 = 5;
} else {
sp24 = 12;
@@ -626,13 +626,13 @@ void func_80B10924(EnGb2* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL;
if (sp24 == 12) {
- gSaveContext.save.weekEventReg[54] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_54_40);
} else {
Rupees_ChangeBy(50);
}
this->actionFunc = func_80B109DC;
} else {
- Actor_PickUp(&this->actor, play, sp24, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, sp24, 300.0f, 300.0f);
}
}
@@ -641,7 +641,7 @@ void func_80B109DC(EnGb2* this, PlayState* play) {
Message_StartTextbox(play, this->unk_26E, &this->actor);
this->actionFunc = func_80B10634;
} else {
- func_800B85E0(&this->actor, play, 300.0f, -1);
+ func_800B85E0(&this->actor, play, 300.0f, PLAYER_IA_MINUS1);
}
}
@@ -652,25 +652,26 @@ void func_80B10A48(EnGb2* this, PlayState* play) {
switch (ENGB2_GET_7(&this->actor)) {
case ENGB2_7_0:
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
break;
case ENGB2_7_1:
- ActorCutscene_Stop(this->unk_282[this->unk_290]);
- Actor_MarkForDeath(&this->actor);
+ CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
+ Actor_Kill(&this->actor);
break;
case ENGB2_7_2:
- ActorCutscene_Stop(this->unk_282[this->unk_290]);
+ CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
if (this->unk_26E == 0x14FB) {
Flags_SetSwitch(play, ENGB2_GET_7F8(&this->actor));
- Actor_MarkForDeath(&this->actor);
- } else {
- this->actor.draw = NULL;
- this->unk_26C |= 0x100;
- this->actor.flags &= ~ACTOR_FLAG_1;
- this->actionFunc = func_80B111AC;
+ Actor_Kill(&this->actor);
+ return;
}
+
+ this->actor.draw = NULL;
+ this->unk_26C |= 0x100;
+ this->actor.flags &= ~ACTOR_FLAG_1;
+ this->actionFunc = func_80B111AC;
break;
}
}
@@ -693,7 +694,7 @@ void func_80B10B5C(EnGb2* this, PlayState* play) {
this->unk_26C |= 2;
}
Message_StartTextbox(play, this->unk_26E, &this->actor);
- this->unk_290 = 1;
+ this->csIdIndex = 1;
this->unk_26C &= ~0x40;
this->actionFunc = func_80B10DAC;
} else if ((this->actor.xzDistToPlayer < 300.0f) && this->actor.isTargeted) {
@@ -706,12 +707,12 @@ void func_80B10B5C(EnGb2* this, PlayState* play) {
this->actor.flags &= ~ACTOR_FLAG_10000;
Message_StartTextbox(play, this->unk_26E, &this->actor);
if (this->unk_26E == 0x14EB) {
- gSaveContext.save.weekEventReg[80] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_80_40);
} else if (this->unk_26E == 0x14EF) {
- gSaveContext.save.weekEventReg[80] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_80_20);
}
this->unk_26C &= ~0x20;
- this->unk_290 = 0;
+ this->csIdIndex = 0;
this->unk_26C |= 0x80;
this->actionFunc = func_80B10DAC;
} else if (this->actor.xzDistToPlayer < 300.0f) {
@@ -725,9 +726,9 @@ void func_80B10B5C(EnGb2* this, PlayState* play) {
}
void func_80B10DAC(EnGb2* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->unk_282[this->unk_290])) {
+ if (CutsceneManager_IsNext(this->csIdList[this->csIdIndex])) {
if (ENGB2_GET_7(&this->actor) == ENGB2_7_1) {
- if (this->unk_290 != 2) {
+ if (this->csIdIndex != 2) {
this->actionFunc = func_80B10E98;
} else {
Flags_SetSwitch(play, ENGB2_GET_7F8(&this->actor));
@@ -736,12 +737,12 @@ void func_80B10DAC(EnGb2* this, PlayState* play) {
} else {
this->actionFunc = func_80B110F8;
}
- ActorCutscene_StartAndSetFlag(this->unk_282[this->unk_290], &this->actor);
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csIdList[this->csIdIndex], &this->actor);
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- ActorCutscene_SetIntentToPlay(this->unk_282[this->unk_290]);
+ CutsceneManager_Queue(this->csIdList[this->csIdIndex]);
}
}
@@ -752,14 +753,14 @@ void func_80B10E98(EnGb2* this, PlayState* play) {
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
if ((this->unk_26E != 0x14E8) && (this->unk_26E != 0x14EA)) {
- ActorCutscene_Stop(this->unk_282[this->unk_290]);
+ CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
this->actionFunc = func_80B10B5C;
} else if (Flags_GetSwitch(play, ENGB2_GET_7F8(&this->actor))) {
this->actionFunc = func_80B10A48;
} else {
- ActorCutscene_Stop(this->unk_282[this->unk_290]);
- this->unk_290 = 2;
- ActorCutscene_SetIntentToPlay(this->unk_282[this->unk_290]);
+ CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
+ this->csIdIndex = 2;
+ CutsceneManager_Queue(this->csIdList[this->csIdIndex]);
this->actionFunc = func_80B10DAC;
}
} else {
@@ -769,9 +770,9 @@ void func_80B10E98(EnGb2* this, PlayState* play) {
Message_StartTextbox(play, this->unk_26E, &this->actor);
temp = this->unk_26E;
if ((temp == 0x14E7) || (temp == 0x14E9) || (temp == 0x14EC) || (temp == 0x14F0)) {
- ActorCutscene_Stop(this->unk_282[this->unk_290]);
- this->unk_290 = 1;
- ActorCutscene_SetIntentToPlay(this->unk_282[this->unk_290]);
+ CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
+ this->csIdIndex = 1;
+ CutsceneManager_Queue(this->csIdList[this->csIdIndex]);
this->actionFunc = func_80B10DAC;
}
}
@@ -831,15 +832,15 @@ void func_80B111AC(EnGb2* this, PlayState* play) {
this->actor.world.pos.x = D_80B11A00[index][0];
this->actor.world.pos.y = D_80B11A00[index][1];
this->actor.world.pos.z = D_80B11A00[index][2];
- this->actor.world.rot.y = D_80B11A00[index][3] * 182.04445f;
+ this->actor.world.rot.y = DEG_TO_BINANG(D_80B11A00[index][3]);
this->actor.shape.rot.y = this->actor.world.rot.y;
this->actionFunc = func_80B11268;
}
void func_80B11268(EnGb2* this, PlayState* play) {
if (play->roomCtx.curRoom.num == 1) {
- this->unk_290 = 0;
- this->unk_282[0] = this->actor.cutscene;
+ this->csIdIndex = 0;
+ this->csIdList[0] = this->actor.csId;
if (Flags_GetClear(play, 2) && Flags_GetClear(play, 3) && Flags_GetClear(play, 4) && Flags_GetClear(play, 5)) {
this->unk_28A = 0xFF;
this->unk_26C &= ~0x100;
@@ -869,7 +870,7 @@ void EnGb2_Init(Actor* thisx, PlayState* play) {
EnGb2* this = THIS;
if (func_80B0F660(this, play)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -884,14 +885,14 @@ void EnGb2_Init(Actor* thisx, PlayState* play) {
switch (ENGB2_GET_7(&this->actor)) {
case ENGB2_7_0:
- if (gSaveContext.save.weekEventReg[54] & 0x80) {
- Actor_MarkForDeath(&this->actor);
- } else if (gSaveContext.save.weekEventReg[52] & 0x20) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_80)) {
+ Actor_Kill(&this->actor);
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE)) {
+ Actor_Kill(&this->actor);
}
if (gSaveContext.save.entrance == ENTRANCE(GHOST_HUT, 1)) {
- func_800FE484();
+ Environment_StopTime();
this->actionFunc = func_80B10240;
break;
}
@@ -900,7 +901,7 @@ void EnGb2_Init(Actor* thisx, PlayState* play) {
this->actor.flags |= ACTOR_FLAG_10;
this->actor.flags |= ACTOR_FLAG_2000000;
- if (gSaveContext.eventInf[4] & 0x40) {
+ if (CHECK_EVENTINF(EVENTINF_46)) {
func_80B0F728(this, play);
} else {
func_80B0FBF0(this, play);
@@ -909,13 +910,13 @@ void EnGb2_Init(Actor* thisx, PlayState* play) {
break;
case ENGB2_7_1:
- if ((play->curSpawn == 1) || (gSaveContext.save.weekEventReg[80] & 0x80)) {
- Actor_MarkForDeath(&this->actor);
+ if ((play->curSpawn == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_80_80)) {
+ Actor_Kill(&this->actor);
return;
}
if (Flags_GetSwitch(play, ENGB2_GET_7F8(thisx))) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -926,20 +927,20 @@ void EnGb2_Init(Actor* thisx, PlayState* play) {
break;
case ENGB2_7_2:
- this->unk_290 = 0;
- this->unk_282[0] = this->actor.cutscene;
+ this->csIdIndex = 0;
+ this->csIdList[0] = this->actor.csId;
if (Flags_GetSwitch(play, ENGB2_GET_7F8(thisx))) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
if (Flags_GetClear(play, 2) && Flags_GetClear(play, 3) && Flags_GetClear(play, 4) &&
Flags_GetClear(play, 5)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
- if (gSaveContext.save.weekEventReg[76] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_76_80)) {
this->actor.draw = NULL;
this->unk_26C |= 0x100;
this->actor.flags &= ~ACTOR_FLAG_1;
@@ -952,7 +953,7 @@ void EnGb2_Init(Actor* thisx, PlayState* play) {
break;
default:
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
}
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 cb53ada3b..87cee9e99 100644
--- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h
+++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h
@@ -31,13 +31,11 @@ typedef struct EnGb2 {
/* 0x27C */ s16 unk_27C;
/* 0x27E */ s16 unk_27E;
/* 0x280 */ s16 unk_280;
- /* 0x282 */ s16 unk_282[3];
+ /* 0x282 */ s16 csIdList[3];
/* 0x288 */ s16 unk_288;
/* 0x28A */ u8 unk_28A;
/* 0x28C */ s32 unk_28C;
- /* 0x290 */ s16 unk_290;
+ /* 0x290 */ s16 csIdIndex;
} EnGb2; // size = 0x294
-extern const ActorInit En_Gb2_InitVars;
-
#endif // Z_EN_GB2_H
diff --git a/src/overlays/actors/ovl_En_Ge1/overlay.cfg b/src/overlays/actors/ovl_En_Ge1/overlay.cfg
deleted file mode 100644
index ebd643e2a..000000000
--- a/src/overlays/actors/ovl_En_Ge1/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ge1
-z_en_ge1.c
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 c8e85a3ac..6cfbb4718 100644
--- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c
+++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c
@@ -15,7 +15,7 @@ void EnGe1_Destroy(Actor* thisx, PlayState* play);
void EnGe1_Update(Actor* thisx, PlayState* play);
void EnGe1_Draw(Actor* thisx, PlayState* play);
-const ActorInit En_Ge1_InitVars = {
+ActorInit En_Ge1_InitVars = {
ACTOR_EN_GE1,
ACTORCAT_NPC,
FLAGS,
@@ -88,7 +88,7 @@ void EnGe1_Init(Actor* thisx, PlayState* play) {
this->picto.actor.colChkInfo.mass = MASS_IMMOVABLE;
this->picto.actor.targetMode = 6;
Actor_SetScale(&this->picto.actor, 0.01f);
- this->animIndex = this->csAction = -1; // GERUDO_WHITE_ANIM_NONE
+ this->animIndex = this->cueId = -1; // GERUDO_WHITE_ANIM_NONE
this->stateFlags = 0;
EnGe1_ChangeAnim(this, GERUDO_WHITE_ANIM_ARMS_FOLDED, ANIMMODE_LOOP, 0.0f);
this->actionFunc = EnGe1_Wait;
@@ -189,19 +189,20 @@ void EnGe1_SetupPath(EnGe1* this, PlayState* play) {
Vec3s* point;
Vec3f nextPoint;
- this->curPoint = 0;
+ this->curPointIndex = 0;
+
if (GERUDO_WHITE_GET_PATH(&this->picto.actor) != 0x3F) {
this->path = &play->setupPathList[GERUDO_WHITE_GET_PATH(&this->picto.actor)];
if (this->path != NULL) {
point = Lib_SegmentedToVirtual(this->path->points);
Math_Vec3s_ToVec3f(&this->picto.actor.world.pos, point);
- this->curPoint++;
+ this->curPointIndex++;
point++;
Math_Vec3s_ToVec3f(&nextPoint, point);
this->picto.actor.world.rot.y = Math_Vec3f_Yaw(&this->picto.actor.world.pos, &nextPoint);
this->picto.actor.world.rot.x = Math_Vec3f_Pitch(&this->picto.actor.world.pos, &nextPoint);
- this->picto.actor.speedXZ = 15.0f;
+ this->picto.actor.speed = 15.0f;
}
} else {
this->path = NULL;
@@ -214,7 +215,7 @@ void EnGe1_SetupPath(EnGe1* this, PlayState* play) {
s32 EnGe1_FollowPath(EnGe1* this) {
s32 pad;
Path* path = this->path;
- Vec3s* points;
+ Vec3s* curPoint;
Vec3f point;
s16 yawTarget;
s16 pitchTarget;
@@ -223,10 +224,10 @@ s32 EnGe1_FollowPath(EnGe1* this) {
return true;
}
- points = Lib_SegmentedToVirtual(this->path->points);
- points += this->curPoint;
+ curPoint = Lib_SegmentedToVirtual(this->path->points);
+ curPoint += this->curPointIndex;
- Math_Vec3s_ToVec3f(&point, points);
+ Math_Vec3s_ToVec3f(&point, curPoint);
yawTarget = Math_Vec3f_Yaw(&this->picto.actor.world.pos, &point);
pitchTarget = Math_Vec3f_Pitch(&this->picto.actor.world.pos, &point);
Math_SmoothStepToS(&this->picto.actor.world.rot.y, yawTarget, 0xA, 0x3E8, 0x64);
@@ -242,9 +243,9 @@ s32 EnGe1_FollowPath(EnGe1* this) {
void EnGe1_Scream(EnGe1* this) {
if ((s32)Rand_ZeroFloat(2.0f) == 0) {
- Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_VO_FPVO00);
+ Actor_PlaySfx(&this->picto.actor, NA_SE_VO_FPVO00);
} else {
- Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_VO_FPVO01);
+ Actor_PlaySfx(&this->picto.actor, NA_SE_VO_FPVO01);
}
}
@@ -254,16 +255,16 @@ void EnGe1_Wait(EnGe1* this, PlayState* play) {
}
void EnGe1_PerformCutsceneActions(EnGe1* this, PlayState* play) {
- s16 csAction;
+ s16 cueId;
- if (SkelAnime_Update(&this->skelAnime) && (this->csAction == 3)) {
+ if (SkelAnime_Update(&this->skelAnime) && (this->cueId == 3)) {
EnGe1_ChangeAnim(this, GERUDO_WHITE_ANIM_STIFF_SHIVERING, ANIMMODE_LOOP, 0.0f);
}
- if (Cutscene_CheckActorAction(play, 0x79)) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_121)) {
this->picto.actor.draw = EnGe1_Draw;
- csAction = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x79)]->action;
- switch (csAction) {
+ cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_121)]->id;
+ switch (cueId) {
case 8:
this->stateFlags &= ~GERUDO_WHITE_STATE_DISABLE_MOVEMENT;
break;
@@ -274,14 +275,15 @@ void EnGe1_PerformCutsceneActions(EnGe1* this, PlayState* play) {
default:
this->stateFlags &= ~GERUDO_WHITE_STATE_DISABLE_MOVEMENT;
- Cutscene_ActorTranslateAndYaw(&this->picto.actor, play, Cutscene_GetActorActionIndex(play, 0x79));
+ Cutscene_ActorTranslateAndYaw(&this->picto.actor, play,
+ Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_121));
break;
}
- if (this->csAction != csAction) {
- this->csAction = csAction;
+ if (this->cueId != cueId) {
+ this->cueId = cueId;
- switch (this->csAction) {
+ switch (this->cueId) {
// Aveil cutscene
case 1:
EnGe1_ChangeAnim(this, GERUDO_WHITE_ANIM_ARMS_FOLDED, ANIMMODE_LOOP, 0.0f);
@@ -308,7 +310,7 @@ void EnGe1_PerformCutsceneActions(EnGe1* this, PlayState* play) {
break;
case 7:
- Actor_MarkForDeath(&this->picto.actor);
+ Actor_Kill(&this->picto.actor);
break;
// Twister cutscene
@@ -329,32 +331,37 @@ void EnGe1_PerformCutsceneActions(EnGe1* this, PlayState* play) {
if ((this->animIndex == GERUDO_WHITE_ANIM_TRUDGING_OFF) &&
(Animation_OnFrame(&this->skelAnime, 12.0f) || Animation_OnFrame(&this->skelAnime, 25.0f))) {
- Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EV_PIRATE_WALK);
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EV_PIRATE_WALK);
}
if ((this->animIndex == GERUDO_WHITE_ANIM_SALUTE) && Animation_OnFrame(&this->skelAnime, 14.0f)) {
- Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EV_PIRATE_WALK);
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EV_PIRATE_WALK);
}
} else {
this->picto.actor.draw = NULL;
}
- if (this->csAction == 9) {
- if ((this->curPoint < this->path->count) && EnGe1_FollowPath(this)) {
- this->curPoint++;
- }
+ switch (this->cueId) {
+ case 9:
+ if ((this->curPointIndex < this->path->count) && EnGe1_FollowPath(this)) {
+ this->curPointIndex++;
+ }
- // Tumble in the air
- this->picto.actor.shape.rot.x += 0x3E8;
- this->picto.actor.shape.rot.y += 0x7D0;
- this->picto.actor.shape.rot.z += 0x1F4;
+ // Tumble in the air
+ this->picto.actor.shape.rot.x += 0x3E8;
+ this->picto.actor.shape.rot.y += 0x7D0;
+ this->picto.actor.shape.rot.z += 0x1F4;
- if (this->screamTimer > 0) {
- this->screamTimer--;
- } else {
- this->screamTimer = (s32)(Rand_ZeroFloat(10.0f) + 20.0f);
- EnGe1_Scream(this);
- }
+ if (this->screamTimer > 0) {
+ this->screamTimer--;
+ } else {
+ this->screamTimer = (s32)(Rand_ZeroFloat(10.0f) + 20.0f);
+ EnGe1_Scream(this);
+ }
+ break;
+
+ default:
+ break;
}
}
@@ -369,7 +376,8 @@ void EnGe1_Update(Actor* thisx, PlayState* play) {
if (!(this->stateFlags & GERUDO_WHITE_STATE_DISABLE_MOVEMENT)) {
Actor_MoveWithGravity(&this->picto.actor);
}
- Actor_UpdateBgCheckInfo(play, &this->picto.actor, 40.0f, 25.0f, 40.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->picto.actor, 40.0f, 25.0f, 40.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
this->actionFunc(this, play);
this->torsoRot.x = this->torsoRot.y = this->torsoRot.z = 0;
@@ -384,10 +392,10 @@ void EnGe1_Update(Actor* thisx, PlayState* play) {
}
s32 EnGe1_ValidatePictograph(PlayState* play, Actor* thisx) {
- s32 ret = Snap_ValidatePictograph(play, thisx, PICTOGRAPH_PIRATE_GOOD, &thisx->focus.pos, &thisx->shape.rot, 10.0f,
+ s32 ret = Snap_ValidatePictograph(play, thisx, PICTO_VALID_PIRATE_GOOD, &thisx->focus.pos, &thisx->shape.rot, 10.0f,
400.0f, -1);
- ret |= Snap_ValidatePictograph(play, thisx, PICTOGRAPH_PIRATE_TOO_FAR, &thisx->focus.pos, &thisx->shape.rot, 10.0f,
+ ret |= Snap_ValidatePictograph(play, thisx, PICTO_VALID_PIRATE_TOO_FAR, &thisx->focus.pos, &thisx->shape.rot, 10.0f,
1200.0f, -1);
return ret;
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 ae6cc601e..63a2a3c7f 100644
--- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.h
+++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.h
@@ -29,17 +29,15 @@ typedef struct EnGe1 {
/* 0x2A4 */ Vec3s headRot;
/* 0x2AA */ Vec3s torsoRot;
/* 0x2B0 */ Path* path;
- /* 0x2B4 */ s32 curPoint;
+ /* 0x2B4 */ s32 curPointIndex;
/* 0x2B8 */ s16 eyeIndex;
/* 0x2BA */ s16 blinkTimer;
/* 0x2BC */ u16 stateFlags;
/* 0x2BE */ s16 animIndex;
- /* 0x2C0 */ s16 csAction;
+ /* 0x2C0 */ s16 cueId;
/* 0x2C2 */ s16 screamTimer;
/* 0x2C4 */ u8 hairstyle;
/* 0x2C8 */ EnGe1ActionFunc actionFunc;
} EnGe1; // size = 0x2CC
-extern const ActorInit En_Ge1_InitVars;
-
#endif // Z_EN_GE1_H
diff --git a/src/overlays/actors/ovl_En_Ge2/overlay.cfg b/src/overlays/actors/ovl_En_Ge2/overlay.cfg
deleted file mode 100644
index 965bfcf19..000000000
--- a/src/overlays/actors/ovl_En_Ge2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ge2
-z_en_ge2.c
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 c05db47fd..922472f9a 100644
--- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c
+++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c
@@ -15,19 +15,15 @@ void EnGe2_Destroy(Actor* thisx, PlayState* play);
void EnGe2_Update(Actor* thisx, PlayState* play);
void EnGe2_Draw(Actor* thisx, PlayState* play);
-void func_80B8BCEC(EnGe2* this, PlayState* play);
-void func_80B8BD38(EnGe2* this, PlayState* play);
-void func_80B8BE08(EnGe2* this, PlayState* play);
-void func_80B8BF04(EnGe2* this, PlayState* play);
-void func_80B8C048(EnGe2* this, PlayState* play);
-void func_80B8C0B0(EnGe2* this, PlayState* play);
-void func_80B8C45C(EnGe2* this, PlayState* play);
-void func_80B8C59C(EnGe2* this, PlayState* play);
-void func_80B8C644(EnGe2* this, PlayState* play);
-void func_80B8C9B8(EnGe2* this, PlayState* play);
+s32 EnGe2_SetupPath(EnGe2* this, PlayState* play);
-#if 0
-const ActorInit En_Ge2_InitVars = {
+void EnGe2_LookAround(EnGe2* this, PlayState* play);
+void EnGe2_Walk(EnGe2* this, PlayState* play);
+void EnGe2_GuardStationary(EnGe2* this, PlayState* play);
+
+s32 EnGe2_ValidatePictograph(PlayState* play, Actor* thisx);
+
+ActorInit En_Ge2_InitVars = {
ACTOR_EN_GE2,
ACTORCAT_NPC,
FLAGS,
@@ -39,78 +35,743 @@ const ActorInit En_Ge2_InitVars = {
(ActorFunc)EnGe2_Draw,
};
-// static ColliderCylinderInit sCylinderInit = {
-static ColliderCylinderInit D_80B8CE40 = {
- { COLTYPE_NONE, AT_NONE, AC_ON | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, },
- { ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0x038BFBB3, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, },
+typedef enum {
+ /* 0 */ GERUDO_PURPLE_DETECTION_UNDETECTED,
+ /* 1 */ GERUDO_PURPLE_DETECTION_HEARD,
+ /* 2 */ GERUDO_PURPLE_DETECTION_PROXIMITY //!< Higher priority
+} GerudoPurpleDetection;
+
+typedef enum {
+ /* 0 */ GERUDO_PURPLE_PATHSTATUS_NORMAL, //!< not near waypoint
+ /* 1 */ GERUDO_PURPLE_PATHSTATUS_AT_POINT, //!< no path or new waypoint
+ /* 2 */ GERUDO_PURPLE_PATHSTATUS_END //!< reached end of path
+} GerudoPurplePathStatus;
+
+#define GERUDO_PURPLE_STATE_PATH_REVERSE (1 << 0) //!< Follow path backwards instead of forwards.
+#define GERUDO_PURPLE_STATE_KO (1 << 1)
+#define GERUDO_PURPLE_STATE_STUNNED (1 << 2) //!< Specifically by Deku Nuts
+#define GERUDO_PURPLE_STATE_DISABLE_MOVEMENT \
+ (1 << 3) //!< Disable normal movement to let pathing function control it completely.
+#define GERUDO_PURPLE_STATE_CAPTURING (1 << 5) //!< Set but not used
+
+static ColliderCylinderInit sCylinderInit = {
+ {
+ COLTYPE_NONE,
+ AT_NONE,
+ AC_ON | AC_TYPE_PLAYER,
+ OC1_ON | OC1_TYPE_ALL,
+ OC2_TYPE_1,
+ COLSHAPE_CYLINDER,
+ },
+ {
+ ELEMTYPE_UNK0,
+ { 0x00000000, 0x00, 0x00 },
+ { 0x038BFBB3, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_ON,
+ OCELEM_ON,
+ },
{ 30, 60, 0, { 0, 0, 0 } },
};
-#endif
+void EnGe2_Init(Actor* thisx, PlayState* play) {
+ s32 pad;
+ EnGe2* this = THIS;
-extern ColliderCylinderInit D_80B8CE40;
+ ActorShape_Init(&this->picto.actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gGerudoPurpleSkel, NULL, this->jointTable, this->morphTable,
+ GERUDO_PURPLE_LIMB_MAX);
+ Animation_PlayLoop(&this->skelAnime, &gGerudoPurpleWalkingAnim);
-extern UNK_TYPE D_06008DD8;
-extern UNK_TYPE D_060091D0;
-extern UNK_TYPE D_06009D1C;
-extern UNK_TYPE D_0600A344;
+ Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &sCylinderInit);
+ this->picto.actor.colChkInfo.mass = MASS_IMMOVABLE;
+ Actor_SetScale(&this->picto.actor, 0.01f);
+ this->picto.actor.uncullZoneForward = 1200.0f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/EnGe2_Init.s")
+ if (this->picto.actor.world.rot.z == 0) {
+ this->verticalDetectRange = 40.0f;
+ } else {
+ this->verticalDetectRange = fabsf(this->picto.actor.world.rot.z * 20.0f);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/EnGe2_Destroy.s")
+ this->picto.actor.world.rot.x = this->picto.actor.shape.rot.x = 0;
+ this->picto.actor.world.rot.z = this->picto.actor.shape.rot.z = 0;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8B514.s")
+ this->picto.actor.targetMode = 6;
+ this->stateFlags = 0;
+ this->detectedStatus = GERUDO_PURPLE_DETECTION_UNDETECTED;
+ this->cueId = -1;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8B5AC.s")
+ this->picto.actor.terminalVelocity = -9.0f;
+ this->picto.actor.gravity = -1.0f;
+ this->picto.actor.speed = 1.5f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8B6B4.s")
+ this->actionFunc = EnGe2_Walk;
+ this->picto.validationFunc = EnGe2_ValidatePictograph;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8B7A8.s")
+ EnGe2_SetupPath(this, play);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8B848.s")
+ this->picto.actor.flags |= ACTOR_FLAG_10;
+ if (play->actorCtx.flags & ACTORCTX_FLAG_1) {
+ this->picto.actor.flags |= (ACTOR_FLAG_10 | ACTOR_FLAG_20);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8B90C.s")
+ switch (GERUDO_PURPLE_GET_TYPE(&this->picto.actor)) {
+ case GERUDO_PURPLE_TYPE_BOAT_SENTRY:
+ Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f,
+ Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, 0.0f);
+ this->actionFunc = EnGe2_GuardStationary;
+ this->picto.actor.speed = 0.0f;
+ this->picto.actor.uncullZoneForward = 4000.0f;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8BA40.s")
+ case GERUDO_PURPLE_TYPE_AVEIL_GUARD:
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_83_02)) {
+ Actor_Kill(&this->picto.actor);
+ }
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8BB3C.s")
+ default:
+ break;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8BC1C.s")
+void EnGe2_Destroy(Actor* thisx, PlayState* play) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8BC78.s")
+// Detect Player through hearing or proximity
+GerudoPurpleDetection EnGe2_DetectPlayer(PlayState* play, EnGe2* this) {
+ if (this->picto.actor.xzDistToPlayer > 250.0f) {
+ return GERUDO_PURPLE_DETECTION_UNDETECTED;
+ } else if ((Player_GetMask(play) != PLAYER_MASK_STONE) && (this->picto.actor.xzDistToPlayer < 50.0f)) {
+ return GERUDO_PURPLE_DETECTION_PROXIMITY;
+ } else if (func_800B715C(play)) {
+ return GERUDO_PURPLE_DETECTION_HEARD;
+ } else {
+ return GERUDO_PURPLE_DETECTION_UNDETECTED;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8BCEC.s")
+/**
+ * Spotted Player with line-of-sight
+ *
+ * @param play PlayState
+ * @param thisx Actor to use for range and angle checks
+ * @param pos Position to check from
+ * @param yaw Center of yaw range to check
+ * @param yawRange Spread of angles from `yaw` to check. If 0, do not check yaw
+ * @param xzRange Horizontal range to check
+ * @param yRange Vertical range to check
+ * @return true if Player is visible with these settings
+ */
+s32 EnGe2_LookForPlayer(PlayState* play, Actor* actor, Vec3f* pos, s16 yaw, s16 yawRange, f32 xzRange, f32 yRange) {
+ s16 yawToPlayer;
+ Vec3f posResult;
+ CollisionPoly* outPoly;
+ Player* player = GET_PLAYER(play);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8BD38.s")
+ if (Player_GetMask(play) == PLAYER_MASK_STONE) {
+ return false;
+ }
+ if (actor->xzDistToPlayer > xzRange) {
+ return false;
+ }
+ if (fabsf(actor->playerHeightRel) > yRange) {
+ return false;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8BD90.s")
+ yawToPlayer = actor->yawTowardsPlayer - yaw;
+ if ((yawRange > 0) && (yawRange < ABS_ALT(yawToPlayer))) {
+ return false;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8BE08.s")
+ if (BgCheck_AnyLineTest1(&play->colCtx, pos, &player->bodyPartsPos[7], &posResult, &outPoly, false)) {
+ return false;
+ } else {
+ return true;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8BF04.s")
+/* Path functions */
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8BFC8.s")
+/**
+ * Set up the path if it exists, choose the end and direction
+ *
+ * @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 (this->path != NULL) {
+ Path* path = this->path;
+ Vec3s* points = Lib_SegmentedToVirtual(path->points);
+ f32 diffX = points[0].x - this->picto.actor.world.pos.x;
+ f32 diffZ = points[0].z - this->picto.actor.world.pos.z;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8C048.s")
+ if ((SQ(diffX) + SQ(diffZ)) < SQ(10.0f)) {
+ this->curPointIndex = 0;
+ this->stateFlags &= ~GERUDO_PURPLE_STATE_PATH_REVERSE;
+ } else {
+ this->curPointIndex = path->count - 1;
+ this->stateFlags |= GERUDO_PURPLE_STATE_PATH_REVERSE;
+ return true;
+ }
+ }
+ } else {
+ this->path = NULL;
+ this->curPointIndex = 0;
+ }
+ return false;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8C0B0.s")
+void EnGe2_GetNextPath(EnGe2* this, PlayState* play) {
+ Path* curPath;
+ Path* nextPath;
+ Vec3s* points;
+ u8 unk1;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8C13C.s")
+ this->curPointIndex = 0;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8C45C.s")
+ 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];
+ this->path = nextPath;
+ points = Lib_SegmentedToVirtual(nextPath->points);
+ this->picto.actor.world.pos.x = points[0].x;
+ this->picto.actor.world.pos.z = points[0].z;
+ } else {
+ this->path = NULL;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8C59C.s")
+void EnGe2_SetupBlownAwayPath(EnGe2* this, PlayState* play) {
+ s32 pad;
+ Vec3s* points;
+ Vec3f nextPoint;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8C644.s")
+ this->curPointIndex = 0;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8C9B8.s")
+ if (GERUDO_PURPLE_GET_PATH(&this->picto.actor) != GERUDO_PURPLE_PATH_NONE) {
+ this->path = &play->setupPathList[GERUDO_PURPLE_GET_PATH(&this->picto.actor)];
+ if (this->path != NULL) {
+ points = Lib_SegmentedToVirtual(this->path->points);
+ Math_Vec3s_ToVec3f(&this->picto.actor.world.pos, points);
+ this->curPointIndex++;
+ points++;
+ Math_Vec3s_ToVec3f(&nextPoint, points);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/EnGe2_Update.s")
+ this->picto.actor.world.rot.y = Math_Vec3f_Yaw(&this->picto.actor.world.pos, &nextPoint);
+ this->picto.actor.world.rot.x = Math_Vec3f_Pitch(&this->picto.actor.world.pos, &nextPoint);
+ this->picto.actor.speed = 15.0f;
+ }
+ } else {
+ this->path = NULL;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8CC0C.s")
+GerudoPurplePathStatus EnGe2_FollowPath(EnGe2* this) {
+ Path* path = this->path;
+ Vec3s* curPoint;
+ f32 diffX;
+ f32 diffZ;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8CCB4.s")
+ if (path == NULL) {
+ return GERUDO_PURPLE_PATHSTATUS_AT_POINT;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/func_80B8CCFC.s")
+ curPoint = (Vec3s*)Lib_SegmentedToVirtual(path->points);
+ curPoint += this->curPointIndex;
+ diffX = curPoint->x - this->picto.actor.world.pos.x;
+ diffZ = curPoint->z - this->picto.actor.world.pos.z;
+ this->picto.actor.world.rot.y = Math_Atan2S(diffX, diffZ);
+ Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.world.rot.y, 2, 0x7D0, 0xC8);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ge2/EnGe2_Draw.s")
+ if ((SQ(diffX) + SQ(diffZ)) < SQ(10.0f)) {
+ if (this->stateFlags & GERUDO_PURPLE_STATE_PATH_REVERSE) {
+ this->curPointIndex--;
+ if (this->curPointIndex < 0) {
+ return GERUDO_PURPLE_PATHSTATUS_END;
+ }
+ } else {
+ this->curPointIndex++;
+ if (this->curPointIndex >= path->count) {
+ return GERUDO_PURPLE_PATHSTATUS_END;
+ }
+ }
+ return GERUDO_PURPLE_PATHSTATUS_AT_POINT;
+ }
+
+ return GERUDO_PURPLE_PATHSTATUS_NORMAL;
+}
+
+/**
+ * Used for Blown Away cutscene path.
+ */
+s32 EnGe2_FollowPathWithoutGravity(EnGe2* this) {
+ s32 pad;
+ Vec3s* curPoint;
+ Path* path = this->path;
+ Vec3f point;
+ s16 yawTarget;
+ s16 pitchTarget;
+
+ if (this->path == NULL) {
+ return true;
+ }
+
+ curPoint = Lib_SegmentedToVirtual(path->points);
+ curPoint += this->curPointIndex;
+
+ Math_Vec3s_ToVec3f(&point, curPoint);
+ yawTarget = Math_Vec3f_Yaw(&this->picto.actor.world.pos, &point);
+ pitchTarget = Math_Vec3f_Pitch(&this->picto.actor.world.pos, &point);
+ Math_SmoothStepToS(&this->picto.actor.world.rot.y, yawTarget, 0xA, 0x3E8, 0x64);
+ Math_SmoothStepToS(&this->picto.actor.world.rot.x, pitchTarget, 6, 0x7D0, 0xC8);
+ this->picto.actor.speed = 15.0f;
+
+ Actor_MoveWithoutGravityReverse(&this->picto.actor);
+
+ if (Math_Vec3f_DistXYZ(&this->picto.actor.world.pos, &point) < 40.0f) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+/* Action and helper functions */
+
+void EnGe2_SpawnEffects(EnGe2* this, PlayState* play) {
+ static Vec3f effectVelocity = { 0.0f, -0.05f, 0.0f };
+ static Vec3f effectAccel = { 0.0f, -0.025f, 0.0f };
+ static Color_RGBA8 effectPrimColor = { 255, 255, 255, 0 };
+ static Color_RGBA8 effectEnvColor = { 255, 150, 0, 0 };
+ s16 effectAngle = play->state.frames * 0x2800;
+ Vec3f effectPos;
+
+ effectPos.x = (Math_CosS(effectAngle) * 5.0f) + this->picto.actor.focus.pos.x;
+ effectPos.y = this->picto.actor.focus.pos.y + 10.0f;
+ effectPos.z = (Math_SinS(effectAngle) * 5.0f) + this->picto.actor.focus.pos.z;
+ EffectSsKirakira_SpawnDispersed(play, &effectPos, &effectVelocity, &effectAccel, &effectPrimColor, &effectEnvColor,
+ 1000, 16);
+}
+
+void EnGe2_Scream(EnGe2* this) {
+ if ((s32)Rand_ZeroFloat(2.0f) == 0) {
+ Actor_PlaySfx(&this->picto.actor, NA_SE_VO_FPVO00);
+ } else {
+ Actor_PlaySfx(&this->picto.actor, NA_SE_VO_FPVO01);
+ }
+}
+
+/**
+ * Wait for timer to finish, then set up the captured/thrown out transition.
+ */
+void EnGe2_ThrowPlayerOut(EnGe2* this, PlayState* play) {
+ if (this->timer > 0) {
+ this->timer--;
+ } else if (play->nextEntrance != play->setupExitList[GERUDO_PURPLE_GET_EXIT(&this->picto.actor)]) {
+ play->nextEntrance = play->setupExitList[GERUDO_PURPLE_GET_EXIT(&this->picto.actor)];
+ play->transitionTrigger = TRANS_TRIGGER_START;
+ play->transitionType = TRANS_TYPE_38;
+ }
+}
+
+/**
+ * Used if Aveil spots Player.
+ */
+void EnGe2_TurnToPlayerFast(EnGe2* this, PlayState* play) {
+ SkelAnime_Update(&this->skelAnime);
+ Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 2, 0x1000, 0x200);
+}
+
+void EnGe2_CapturePlayer(EnGe2* this, PlayState* play) {
+ SkelAnime_Update(&this->skelAnime);
+ Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 2, 0x400, 0x100);
+ EnGe2_ThrowPlayerOut(this, play);
+}
+
+void EnGe2_SetupCapturePlayer(EnGe2* this) {
+ this->picto.actor.speed = 0.0f;
+ this->actionFunc = EnGe2_CapturePlayer;
+ Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f,
+ Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, -8.0f);
+}
+
+void EnGe2_Charge(EnGe2* this, PlayState* play) {
+ SkelAnime_Update(&this->skelAnime);
+ Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 2, 0x400, 0x100);
+ this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y;
+
+ if (this->picto.actor.xzDistToPlayer < 50.0f) {
+ EnGe2_SetupCapturePlayer(this);
+ } else if (!(this->picto.actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ this->picto.actor.world.pos = this->picto.actor.prevPos;
+ EnGe2_SetupCapturePlayer(this);
+ }
+
+ if (this->timer > 0) {
+ this->timer--;
+ } else {
+ EnGe2_ThrowPlayerOut(this, play);
+ }
+
+ if (Animation_OnFrame(&this->skelAnime, 2.0f) || Animation_OnFrame(&this->skelAnime, 6.0f)) {
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EV_PIRATE_WALK);
+ }
+}
+
+void EnGe2_SetupCharge(EnGe2* this, PlayState* play) {
+ SkelAnime_Update(&this->skelAnime);
+ Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 2, 0x400, 0x100);
+ this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y;
+
+ if (this->picto.actor.shape.rot.y == this->picto.actor.yawTowardsPlayer) {
+ Animation_Change(&this->skelAnime, &gGerudoPurpleChargingAnim, 1.0f, 0.0f,
+ Animation_GetLastFrame(&gGerudoPurpleChargingAnim), 0, -8.0f);
+ this->timer = 50;
+ this->picto.actor.speed = 4.0f;
+ this->actionFunc = EnGe2_Charge;
+ }
+}
+
+void EnGe2_SetupLookAround(EnGe2* this) {
+ Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f,
+ Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, -8.0f);
+ this->timer = 60;
+ this->picto.actor.speed = 0.0f;
+ this->actionFunc = EnGe2_LookAround;
+}
+
+void EnGe2_Stunned(EnGe2* this, PlayState* play) {
+ if (this->picto.actor.colorFilterTimer == 0) {
+ EnGe2_SetupLookAround(this);
+ this->detectedStatus = GERUDO_PURPLE_DETECTION_UNDETECTED;
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
+ this->stateFlags &= ~GERUDO_PURPLE_STATE_STUNNED;
+ }
+}
+
+void EnGe2_KnockedOut(EnGe2* this, PlayState* play) {
+ SkelAnime_Update(&this->skelAnime);
+ EnGe2_SpawnEffects(this, play);
+
+ if (this->timer > 0) {
+ this->timer--;
+ } else {
+ EnGe2_SetupLookAround(this);
+ this->detectedStatus = GERUDO_PURPLE_DETECTION_UNDETECTED;
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
+ this->stateFlags &= ~GERUDO_PURPLE_STATE_KO;
+ this->picto.actor.flags |= ACTOR_FLAG_1;
+ }
+}
+
+/**
+ * Carries out various patrol functions:
+ * - Turning to Player if being arrested
+ * - Turning to Player if spotted by Aveil
+ * - Looking for Player
+ * - Managing collisions and collider
+ */
+void EnGe2_PatrolDuties(EnGe2* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+ f32 visionRange = gSaveContext.save.isNight ? 200.0f : 280.0f;
+
+ if (player->csMode == 0x1A) {
+ this->picto.actor.speed = 0.0f;
+ this->actionFunc = EnGe2_SetupCharge;
+ Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f,
+ Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, -8.0f);
+ this->stateFlags |= GERUDO_PURPLE_STATE_CAPTURING;
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_80_08)) {
+ this->picto.actor.speed = 0.0f;
+ this->actionFunc = EnGe2_TurnToPlayerFast;
+ Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f,
+ Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, -8.0f);
+ } else if (EnGe2_LookForPlayer(play, &this->picto.actor, &this->picto.actor.focus.pos,
+ this->picto.actor.shape.rot.y, 0x1800, visionRange, this->verticalDetectRange)) {
+ if ((GERUDO_PURPLE_GET_EXIT(&this->picto.actor) != GERUDO_PURPLE_EXIT_NONE) && !Play_InCsMode(play)) {
+ this->picto.actor.speed = 0.0f;
+ func_800B7298(play, &this->picto.actor, 0x1A);
+ func_801000A4(NA_SE_SY_FOUND);
+ Message_StartTextbox(play, 0x1194, &this->picto.actor);
+ this->actionFunc = EnGe2_SetupCharge;
+ Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f,
+ Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, -8.0f);
+ }
+ } else if (this->collider.base.acFlags & AC_HIT) {
+ if ((this->collider.info.acHitInfo != NULL) &&
+ (this->collider.info.acHitInfo->toucher.dmgFlags & DMG_DEKU_NUT)) {
+ Actor_SetColorFilter(&this->picto.actor, 0, 120, 0, 400);
+ this->picto.actor.speed = 0.0f;
+ this->actionFunc = EnGe2_Stunned;
+ this->stateFlags |= GERUDO_PURPLE_STATE_STUNNED;
+ } else {
+ Animation_Change(&this->skelAnime, &gGerudoPurpleFallingToGroundAnim, 1.0f, 0.0f,
+ Animation_GetLastFrame(&gGerudoPurpleFallingToGroundAnim), 2, -8.0f);
+ this->timer = 200;
+ this->picto.actor.speed = 0.0f;
+ this->actionFunc = EnGe2_KnockedOut;
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_DEAD);
+ this->picto.actor.flags &= ~ACTOR_FLAG_1;
+ this->stateFlags |= GERUDO_PURPLE_STATE_KO;
+ }
+ } else if (this->picto.actor.home.rot.x == 0) {
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
+ }
+}
+
+void EnGe2_LookAround(EnGe2* this, PlayState* play) {
+ u8 detectedStatus;
+
+ SkelAnime_Update(&this->skelAnime);
+
+ detectedStatus = EnGe2_DetectPlayer(play, this);
+ if (detectedStatus != GERUDO_PURPLE_DETECTION_UNDETECTED) {
+ this->timer = 100;
+ this->yawTarget = this->picto.actor.yawTowardsPlayer;
+
+ if (this->detectedStatus < detectedStatus) {
+ this->detectedStatus = detectedStatus;
+ }
+ }
+
+ if (this->timer > 0) {
+ this->timer--;
+ } else {
+ this->actionFunc = EnGe2_Walk;
+ Animation_Change(&this->skelAnime, &gGerudoPurpleWalkingAnim, 1.0f, 0.0f,
+ Animation_GetLastFrame(&gGerudoPurpleWalkingAnim), 0, -8.0f);
+ this->headRot.y = 0;
+ this->detectedStatus = GERUDO_PURPLE_DETECTION_UNDETECTED;
+ }
+
+ switch (this->detectedStatus) {
+ case GERUDO_PURPLE_DETECTION_HEARD:
+ Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->yawTarget, 2, 0x3E8, 0x1F4);
+ break;
+
+ case GERUDO_PURPLE_DETECTION_PROXIMITY:
+ Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->yawTarget, 2, 0xBB8, 0x3E8);
+ break;
+
+ default:
+ break;
+ }
+
+ this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y;
+ EnGe2_PatrolDuties(this, play);
+}
+
+void EnGe2_Walk(EnGe2* this, PlayState* play) {
+ SkelAnime_Update(&this->skelAnime);
+ this->picto.actor.speed = 1.5f;
+
+ switch (EnGe2_FollowPath(this)) {
+ case GERUDO_PURPLE_PATHSTATUS_END:
+ EnGe2_SetupPath(this, play);
+ break;
+
+ case GERUDO_PURPLE_PATHSTATUS_AT_POINT:
+ EnGe2_SetupLookAround(this);
+ this->detectedStatus = GERUDO_PURPLE_DETECTION_UNDETECTED;
+ break;
+
+ default: // GERUDO_PURPLE_PATHSTATUS_NORMAL
+ break;
+ }
+
+ this->detectedStatus = EnGe2_DetectPlayer(play, this);
+ if (this->detectedStatus != GERUDO_PURPLE_DETECTION_UNDETECTED) {
+ EnGe2_SetupLookAround(this);
+ this->yawTarget = this->picto.actor.yawTowardsPlayer;
+ }
+ EnGe2_PatrolDuties(this, play);
+}
+
+void EnGe2_PerformCutsceneActions(EnGe2* this, PlayState* play) {
+ SkelAnime_Update(&this->skelAnime);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_476)) {
+ s16 cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_476)]->id;
+
+ if (this->cueId != cueId) {
+ this->cueId = cueId;
+
+ switch (cueId) {
+ case ENGE2_CUEID_BEEHIVE_PATROL:
+ Animation_Change(&this->skelAnime, &gGerudoPurpleLookingAboutAnim, 1.0f, 0.0f,
+ Animation_GetLastFrame(&gGerudoPurpleLookingAboutAnim), 0, -8.0f);
+ EnGe2_GetNextPath(this, play);
+ break;
+
+ case ENGE2_CUEID_BEEHIVE_RUN_AWAY:
+ Animation_Change(&this->skelAnime, &gGerudoPurpleRunningAwayCutsceneAnim, 1.0f, 0.0f,
+ Animation_GetLastFrame(&gGerudoPurpleRunningAwayCutsceneAnim), 0, -5.0f);
+ this->screamTimer = (s32)(Rand_ZeroFloat(10.0f) + 20.0f);
+ break;
+
+ case ENGE2_CUEID_BEEHIVE_EXIT:
+ Actor_Kill(&this->picto.actor);
+ break;
+
+ case ENGE2_CUEID_GBT_ENTR_STAND_STILL:
+ Animation_Change(&this->skelAnime, &gGerudoPurpleGreatBayCutsceneAnim, 0.0f, 0.0f, 0.0f, 2, 0.0f);
+ break;
+
+ case ENGE2_CUEID_GBT_ENTR_BLOWN_AWAY:
+ Animation_Change(&this->skelAnime, &gGerudoPurpleGreatBayCutsceneAnim, 0.0f, 1.0f, 1.0f, 2, 0.0f);
+ EnGe2_SetupBlownAwayPath(this, play);
+ this->stateFlags |= GERUDO_PURPLE_STATE_DISABLE_MOVEMENT;
+ this->screamTimer = (s32)(Rand_ZeroFloat(10.0f) + 20.0f);
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+
+ switch (this->cueId) {
+ case ENGE2_CUEID_BEEHIVE_RUN_AWAY:
+ EnGe2_FollowPath(this);
+ this->picto.actor.speed = 5.0f;
+
+ if (Animation_OnFrame(&this->skelAnime, 2.0f) || Animation_OnFrame(&this->skelAnime, 6.0f)) {
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EV_PIRATE_WALK);
+ }
+
+ if (this->screamTimer > 0) {
+ this->screamTimer--;
+ } else {
+ this->screamTimer = (s32)(Rand_ZeroFloat(10.0f) + 20.0f);
+ EnGe2_Scream(this);
+ }
+ break;
+
+ case ENGE2_CUEID_GBT_ENTR_BLOWN_AWAY:
+ if ((this->curPointIndex < this->path->count) && EnGe2_FollowPathWithoutGravity(this)) {
+ this->curPointIndex++;
+ }
+
+ // Tumble in the air
+ this->picto.actor.shape.rot.x += 0x3E8;
+ this->picto.actor.shape.rot.y += 0x7D0;
+ this->picto.actor.shape.rot.z += 0x1F4;
+
+ if (this->screamTimer > 0) {
+ this->screamTimer--;
+ } else {
+ this->screamTimer = (s32)(Rand_ZeroFloat(10.0f) + 20.0f);
+ EnGe2_Scream(this);
+ }
+ break;
+
+ default:
+ break;
+ }
+}
+
+// Used for those on boats
+void EnGe2_GuardStationary(EnGe2* this, PlayState* play) {
+ SkelAnime_Update(&this->skelAnime);
+ if (EnGe2_LookForPlayer(play, &this->picto.actor, &this->picto.actor.focus.pos, this->picto.actor.shape.rot.y,
+ 0x4000, 720.0f, this->verticalDetectRange)) {
+ if ((GERUDO_PURPLE_GET_EXIT(&this->picto.actor) != GERUDO_PURPLE_EXIT_NONE) && !Play_InCsMode(play)) {
+ func_800B7298(play, &this->picto.actor, 0x1A);
+ func_801000A4(NA_SE_SY_FOUND);
+ Message_StartTextbox(play, 0x1194, &this->picto.actor);
+ this->timer = 50;
+ EnGe2_SetupCapturePlayer(this);
+ }
+ }
+
+ if (this->picto.actor.playerHeightRel < -150.0f) {
+ this->picto.actor.draw = NULL;
+ } else {
+ this->picto.actor.draw = EnGe2_Draw;
+ }
+}
+
+void EnGe2_Update(Actor* thisx, PlayState* play) {
+ s32 pad;
+ EnGe2* this = THIS;
+
+ if (!(this->stateFlags & GERUDO_PURPLE_STATE_DISABLE_MOVEMENT)) {
+ Actor_MoveWithGravity(&this->picto.actor);
+ }
+ Actor_UpdateBgCheckInfo(play, &this->picto.actor, 40.0f, 25.0f, 40.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
+ Collider_UpdateCylinder(&this->picto.actor, &this->collider);
+ CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
+
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_476)) {
+ this->actionFunc = EnGe2_PerformCutsceneActions;
+ this->stateFlags &= ~GERUDO_PURPLE_STATE_KO;
+ this->stateFlags &= ~GERUDO_PURPLE_STATE_PATH_REVERSE;
+ this->picto.actor.flags |= ACTOR_FLAG_20;
+ this->picto.actor.speed = 0.0f;
+ }
+
+ this->actionFunc(this, play);
+
+ // Blinking
+ if (this->stateFlags & GERUDO_PURPLE_STATE_KO) {
+ this->eyeIndex = 2;
+ } else if (!(this->stateFlags & GERUDO_PURPLE_STATE_STUNNED)) {
+ if (DECR(this->blinkTimer) == 0) {
+ this->blinkTimer = Rand_S16Offset(60, 60);
+ }
+ this->eyeIndex = this->blinkTimer;
+ if (this->eyeIndex >= 3) {
+ this->eyeIndex = 0;
+ }
+ }
+}
+
+s32 EnGe2_ValidatePictograph(PlayState* play, Actor* thisx) {
+ s32 ret = Snap_ValidatePictograph(play, thisx, PICTO_VALID_PIRATE_GOOD, &thisx->focus.pos, &thisx->shape.rot, 10.0f,
+ 400.0f, -1);
+
+ ret |= Snap_ValidatePictograph(play, thisx, PICTO_VALID_PIRATE_TOO_FAR, &thisx->focus.pos, &thisx->shape.rot, 10.0f,
+ 1200.0f, -1);
+ return ret;
+}
+
+s32 EnGe2_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
+ EnGe2* this = THIS;
+
+ if (limbIndex == GERUDO_PURPLE_NECK_LIMB) {
+ rot->x += this->headRot.y;
+ rot->z += this->headRot.x;
+ }
+ return false;
+}
+
+void EnGe2_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
+ static Vec3f sFocusOffset = { 600.0f, 700.0f, 0.0f };
+
+ if (limbIndex == GERUDO_PURPLE_HEAD_LIMB) {
+ Matrix_MultVec3f(&sFocusOffset, &thisx->focus.pos);
+ }
+}
+
+void EnGe2_Draw(Actor* thisx, PlayState* play) {
+ static TexturePtr sEyeTextures[] = {
+ gGerudoPurpleEyeOpenTex,
+ gGerudoPurpleEyeHalfTex,
+ gGerudoPurpleEyeClosedTex,
+ };
+ s32 pad;
+ EnGe2* this = THIS;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C5B0(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,
+ EnGe2_OverrideLimbDraw, EnGe2_PostLimbDraw, &this->picto.actor);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
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 f0d97869d..0a85e3bfe 100644
--- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.h
+++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.h
@@ -2,17 +2,59 @@
#define Z_EN_GE2_H
#include "global.h"
+#include "z64snap.h"
+#include "objects/object_gla/object_gla.h"
struct EnGe2;
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_PARAMS(path, type, exit) (((path) & 0x1F) | (((type) & 7) << 5) | (((exit) & 0x3F) << 10))
+
+#define GERUDO_PURPLE_EXIT_NONE 0x1F
+#define GERUDO_PURPLE_PATH_NONE 0x3F
+
+typedef enum {
+ /* 0 */ GERUDO_PURPLE_TYPE_CUTSCENE,
+ /* 1 */ GERUDO_PURPLE_TYPE_BOAT_SENTRY, //!< on boats
+ /* 2 */ GERUDO_PURPLE_TYPE_AVEIL_GUARD,
+ /* 7 */ GERUDO_PURPLE_TYPE_FORTRESS = 7 //!< In both courtyard and rooms
+} GerudoPurpleType;
+
+//! TODO: work out where to put this
+typedef enum {
+ /* 1 */ ENGE2_CUEID_BEEHIVE_PATROL = 1,
+ /* 2 */ ENGE2_CUEID_BEEHIVE_RUN_AWAY,
+ /* 3 */ ENGE2_CUEID_BEEHIVE_EXIT,
+ /* 4 */ ENGE2_CUEID_GBT_ENTR_STAND_STILL,
+ /* 5 */ ENGE2_CUEID_GBT_ENTR_BLOWN_AWAY
+} EnGe2CsAction;
+
typedef struct EnGe2 {
- /* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0x1C4];
+ /* 0x000 */ PictoActor picto;
+ /* 0x148 */ ColliderCylinder collider;
+ /* 0x194 */ SkelAnime skelAnime;
+ /* 0x1D8 */ Vec3s jointTable[GERUDO_PURPLE_LIMB_MAX];
+ /* 0x25C */ Vec3s morphTable[GERUDO_PURPLE_LIMB_MAX];
+ /* 0x2E0 */ s16 eyeIndex;
+ /* 0x2E2 */ s16 blinkTimer;
+ /* 0x2E4 */ Vec3s headRot;
+ /* 0x2E8 */ Vec3s torsoRot; // unused, inferred from similar usage in other actors
+ /* 0x2F0 */ Path* path;
+ /* 0x2F4 */ s32 curPointIndex;
+ /* 0x2F8 */ u16 stateFlags;
+ /* 0x2FA */ s16 yawTarget; //!< used when Player detected to fix the yaw to turn to
+ /* 0x2FC */ f32 verticalDetectRange; //!< vertical range to look for the player within
+ /* 0x300 */ u8 timer;
+ /* 0x301 */ u8 detectedStatus;
+ /* 0x302 */ s16 cueId;
+ /* 0x304 */ s16 unk304; // unused
+ /* 0x306 */ s16 screamTimer;
/* 0x308 */ EnGe2ActionFunc actionFunc;
} EnGe2; // size = 0x30C
-extern const ActorInit En_Ge2_InitVars;
-
#endif // Z_EN_GE2_H
diff --git a/src/overlays/actors/ovl_En_Ge3/overlay.cfg b/src/overlays/actors/ovl_En_Ge3/overlay.cfg
deleted file mode 100644
index 5eec23b4b..000000000
--- a/src/overlays/actors/ovl_En_Ge3/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ge3
-z_en_ge3.c
diff --git a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c
index 50e4ed613..1f680e9e8 100644
--- a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c
+++ b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.c
@@ -16,7 +16,7 @@ void EnGe3_Update(Actor* thisx, PlayState* play);
void EnGe3_Draw(Actor* thisx, PlayState* play);
#if 0
-const ActorInit En_Ge3_InitVars = {
+ActorInit En_Ge3_InitVars = {
ACTOR_EN_GE3,
ACTORCAT_NPC,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.h b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.h
index 10912aae0..909ed7599 100644
--- a/src/overlays/actors/ovl_En_Ge3/z_en_ge3.h
+++ b/src/overlays/actors/ovl_En_Ge3/z_en_ge3.h
@@ -13,6 +13,4 @@ typedef struct EnGe3 {
/* 0x31C */ EnGe3ActionFunc actionFunc;
} EnGe3; // size = 0x320
-extern const ActorInit En_Ge3_InitVars;
-
#endif // Z_EN_GE3_H
diff --git a/src/overlays/actors/ovl_En_Geg/overlay.cfg b/src/overlays/actors/ovl_En_Geg/overlay.cfg
deleted file mode 100644
index 412bb71c1..000000000
--- a/src/overlays/actors/ovl_En_Geg/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Geg
-z_en_geg.c
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 1766b8e32..4b5e8e311 100644
--- a/src/overlays/actors/ovl_En_Geg/z_en_geg.c
+++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.c
@@ -37,7 +37,7 @@ void func_80BB32AC(EnGeg* this, PlayState* play);
void func_80BB3318(EnGeg* this, PlayState* play);
void func_80BB347C(EnGeg* this, PlayState* play);
-const ActorInit En_Geg_InitVars = {
+ActorInit En_Geg_InitVars = {
ACTOR_EN_GEG,
ACTORCAT_NPC,
FLAGS,
@@ -217,18 +217,18 @@ void func_80BB178C(EnGeg* this, PlayState* play) {
if (collider != NULL) {
CollisionCheck_SetOC(play, &play->colChkCtx, collider);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
}
}
s32 func_80BB18FC(EnGeg* this, Actor* actor) {
- if (actor->bgCheckFlags & 1) {
+ if (actor->bgCheckFlags & BGCHECKFLAG_GROUND) {
f32 sp24 = Math_Vec3f_DistXZ(&this->actor.world.pos, &actor->world.pos);
f32 sp20 = Math_Vec3f_DiffY(&this->actor.world.pos, &actor->world.pos);
if ((sp24 < 150.0f) && (fabsf(sp20) < 5.0f)) {
this->unk_230 |= 0x20;
- actor->speedXZ = 0.0f;
+ actor->speed = 0.0f;
actor->velocity.y = 0.0f;
this->actor.child = actor;
actor->parent = &this->actor;
@@ -304,10 +304,10 @@ u8 func_80BB1B14(EnGeg* this, PlayState* play) {
void func_80BB1C1C(EnGeg* this) {
u16 i;
- this->unk_49C[0] = this->actor.cutscene;
+ this->csIdList[0] = this->actor.csId;
- for (i = 1; i < ARRAY_COUNT(this->unk_49C); i++) {
- this->unk_49C[i] = ActorCutscene_GetAdditionalCutscene(this->unk_49C[i - 1]);
+ for (i = 1; i < ARRAY_COUNT(this->csIdList); i++) {
+ this->csIdList[i] = CutsceneManager_GetAdditionalCsId(this->csIdList[i - 1]);
}
}
@@ -355,7 +355,7 @@ s32 func_80BB1D64(EnGeg* this, PlayState* play) {
sp40 = player->actor.world.pos;
} else {
sp40 = player->actor.world.pos;
- sp40.y = player->bodyPartsPos[7].y + 3.0f;
+ sp40.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
}
sp34 = this->actor.world.pos;
@@ -432,15 +432,15 @@ void func_80BB221C(EnGeg* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state) && (this->unk_230 & 4)) {
if (sp27 == 1) {
this->unk_496 = 0xD66;
- this->unk_49A = this->unk_49C[3];
+ this->nextCsId = this->csIdList[3];
} else if (sp27 == 2) {
this->unk_496 = 0xD64;
- this->unk_49A = this->unk_49C[2];
+ this->nextCsId = this->csIdList[2];
this->unk_230 &= ~4;
} else if (sp27 == 3) {
this->unk_230 |= 0x200;
this->unk_496 = 0xD64;
- this->unk_49A = this->unk_49C[2];
+ this->nextCsId = this->csIdList[2];
this->unk_230 &= ~4;
}
Message_StartTextbox(play, this->unk_496, &this->actor);
@@ -453,7 +453,7 @@ void func_80BB221C(EnGeg* this, PlayState* play) {
}
} else {
this->unk_230 &= ~4;
- if (gSaveContext.save.weekEventReg[35] & 0x40) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_35_40)) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state) && (this->unk_230 & 8)) {
this->unk_496 = 0xD62;
Message_StartTextbox(play, this->unk_496, &this->actor);
@@ -464,9 +464,9 @@ void func_80BB221C(EnGeg* this, PlayState* play) {
this->unk_230 |= 8;
}
} else if (Actor_ProcessTalkRequest(&this->actor, &play->state) && (this->unk_230 & 8)) {
- gSaveContext.save.weekEventReg[35] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_35_40);
this->unk_496 = 0xD5E;
- this->unk_49A = this->unk_49C[0];
+ this->nextCsId = this->csIdList[0];
Message_StartTextbox(play, this->unk_496, &this->actor);
this->actionFunc = func_80BB2520;
this->unk_230 &= ~8;
@@ -481,18 +481,18 @@ void func_80BB221C(EnGeg* this, PlayState* play) {
void func_80BB2520(EnGeg* this, PlayState* play) {
if (this->unk_230 & 0x10) {
- ActorCutscene_Stop(this->unk_498);
+ CutsceneManager_Stop(this->csId);
this->unk_230 &= ~0x10;
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->unk_498 = this->unk_49A;
- ActorCutscene_SetIntentToPlay(this->unk_498);
+ this->csId = this->nextCsId;
+ CutsceneManager_Queue(this->csId);
return;
}
- if (ActorCutscene_GetCanPlayNext(this->unk_498)) {
- ActorCutscene_StartAndSetFlag(this->unk_498, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->unk_230 |= 0x10;
switch (this->unk_496) {
@@ -517,7 +517,7 @@ void func_80BB2520(EnGeg* this, PlayState* play) {
break;
case 0xD67:
- this->unk_498 = this->unk_49C[5];
+ this->csId = this->csIdList[5];
this->actionFunc = func_80BB2B1C;
break;
@@ -534,11 +534,11 @@ void func_80BB2520(EnGeg* this, PlayState* play) {
break;
}
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->unk_498 = this->unk_49A;
- ActorCutscene_SetIntentToPlay(this->unk_498);
+ this->csId = this->nextCsId;
+ CutsceneManager_Queue(this->csId);
}
}
@@ -546,12 +546,12 @@ void func_80BB26EC(EnGeg* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
switch (this->unk_496) {
case 0xD5E:
- this->unk_49A = this->unk_49C[1];
+ this->nextCsId = this->csIdList[1];
this->actionFunc = func_80BB2520;
break;
case 0xD61:
- ActorCutscene_Stop(this->unk_498);
+ CutsceneManager_Stop(this->csId);
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
this->unk_230 &= ~0x10;
@@ -574,7 +574,7 @@ void func_80BB27D4(EnGeg* this, PlayState* play) {
break;
case 0xD69:
- this->unk_49A = this->unk_49C[6];
+ this->nextCsId = this->csIdList[6];
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
this->actionFunc = func_80BB2520;
@@ -594,7 +594,7 @@ void func_80BB27D4(EnGeg* this, PlayState* play) {
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
this->unk_230 &= ~0x10;
- this->unk_49A = this->unk_49C[7];
+ this->nextCsId = this->csIdList[7];
this->actionFunc = func_80BB2520;
break;
@@ -620,11 +620,11 @@ void func_80BB2944(EnGeg* this, PlayState* play) {
if (this->unk_496 == 0xD67) {
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
- this->unk_49A = this->unk_49C[4];
+ this->nextCsId = this->csIdList[4];
this->actionFunc = func_80BB2520;
} else {
this->unk_496 = func_80BB16D0(this);
- func_80151938(play, this->unk_496);
+ Message_ContinueTextbox(play, this->unk_496);
}
}
}
@@ -632,7 +632,7 @@ void func_80BB2944(EnGeg* this, PlayState* play) {
void func_80BB2A54(EnGeg* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
if (this->unk_496 == 0xD65) {
- ActorCutscene_Stop(this->unk_498);
+ CutsceneManager_Stop(this->csId);
this->unk_230 &= ~0x10;
this->unk_244 = 65;
play->msgCtx.msgMode = 0x43;
@@ -654,16 +654,16 @@ void func_80BB2B1C(EnGeg* this, PlayState* play) {
this->actor.child->world.pos = this->unk_4B4;
this->actor.child->shape.rot = this->actor.shape.rot;
- if (ActorCutscene_GetCurrentIndex() != this->unk_49C[4]) {
- if (ActorCutscene_GetCanPlayNext(this->unk_498)) {
- gSaveContext.save.weekEventReg[37] |= 8;
+ if (CutsceneManager_GetCurrentCsId() != this->csIdList[4]) {
+ if (CutsceneManager_IsNext(this->csId)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_37_08);
if (this->actor.child != NULL) {
- Actor_MarkForDeath(this->actor.child);
+ Actor_Kill(this->actor.child);
}
this->unk_230 |= 0x10;
- ActorCutscene_StartAndSetFlag(this->unk_498, &this->actor);
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->unk_496 = 0xD68;
- func_80151938(play, this->unk_496);
+ Message_ContinueTextbox(play, this->unk_496);
this->unk_248 = Object_GetIndex(&play->objectCtx, OBJECT_TAISOU);
if (this->unk_248 >= 0) {
this->unk_4AC = 13;
@@ -671,10 +671,10 @@ void func_80BB2B1C(EnGeg* this, PlayState* play) {
}
this->actionFunc = func_80BB27D4;
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- ActorCutscene_SetIntentToPlay(this->unk_498);
+ CutsceneManager_Queue(this->csId);
}
} else {
temp_f20 = this->unk_4E0 * 0.005f;
@@ -711,12 +711,12 @@ void func_80BB2E00(EnGeg* this, PlayState* play) {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 5, 0x1000, 0x100);
this->actor.world.rot.y = this->actor.shape.rot.y;
if (sp2E == sp2C) {
- ActorCutscene_Stop(this->unk_498);
+ CutsceneManager_Stop(this->csId);
this->unk_4AC = 20;
func_80BB2020(this, play);
this->actionFunc = func_80BB30B4;
} else if (Animation_OnFrame(&this->skelAnime, 24.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_STAND_IMT);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_STAND_IMT);
}
} else if (this->unk_4AC == 4) {
if (Animation_OnFrame(&this->skelAnime, 0.0f)) {
@@ -729,7 +729,7 @@ void func_80BB2E00(EnGeg* this, PlayState* play) {
this->actionFunc = func_80BB3318;
}
} else if (Animation_OnFrame(&this->skelAnime, 24.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_SIT_IMT);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_SIT_IMT);
}
}
}
@@ -739,24 +739,24 @@ void func_80BB2F7C(EnGeg* this, PlayState* play) {
this->actor.shape.rot.y = this->actor.world.rot.y;
if ((this->actor.xzDistToPlayer < 150.0f) && (fabsf(this->actor.playerHeightRel) < 10.0f) &&
- (this->actor.bgCheckFlags & 1)) {
+ (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
this->unk_4AC = 2;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->unk_230 &= ~1;
this->actor.shape.yOffset = 0.0f;
func_80BB2020(this, play);
this->actionFunc = func_80BB2E00;
} else {
- this->actor.speedXZ = 5.0f;
+ this->actor.speed = 5.0f;
Actor_MoveWithGravity(&this->actor);
}
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
if (this->unk_230 & 0x80) {
func_800B9010(&this->actor, NA_SE_EN_GOLON_SIRLOIN_ROLL - SFX_FLAG);
} else {
this->unk_230 |= 0x80;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EYEGOLE_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_ATTACK);
}
}
}
@@ -798,13 +798,13 @@ void func_80BB31B8(EnGeg* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL;
- gSaveContext.save.weekEventReg[61] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_61_01);
if (getItemId == GI_MASK_DON_GERO) {
this->unk_230 |= 0x40;
}
this->actionFunc = func_80BB32AC;
} else {
- Actor_PickUp(&this->actor, play, getItemId, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, getItemId, 300.0f, 300.0f);
}
}
@@ -813,7 +813,7 @@ void func_80BB32AC(EnGeg* this, PlayState* play) {
Message_StartTextbox(play, this->unk_496, &this->actor);
this->actionFunc = func_80BB27D4;
} else {
- func_800B85E0(&this->actor, play, 400.0f, -1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
}
}
@@ -837,11 +837,11 @@ void func_80BB3318(EnGeg* this, PlayState* play) {
this->actor.shape.rot.y, this->actor.floorPoly, this->actor.floorBgId);
}
- if (ActorCutscene_GetCurrentIndex() != this->unk_49C[7]) {
+ if (CutsceneManager_GetCurrentCsId() != this->csIdList[7]) {
func_800AEF44(Effect_GetByIndex(this->unk_4DC));
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
- Math_ApproachF(&this->actor.speedXZ, 10.0f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 10.0f, 0.2f, 1.0f);
Actor_MoveWithGravity(&this->actor);
}
@@ -861,8 +861,8 @@ void EnGeg_Init(Actor* thisx, PlayState* play) {
s32 pad2;
s32 sp34[] = { 0x3E, 0xF64 };
- if (gSaveContext.save.weekEventReg[61] & 1) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_61_01)) {
+ Actor_Kill(&this->actor);
return;
}
@@ -879,7 +879,7 @@ void EnGeg_Init(Actor* thisx, PlayState* play) {
if (this->actor.update != NULL) {
this->unk_248 = Object_GetIndex(&play->objectCtx, OBJECT_OF1D_MAP);
if (this->unk_248 < 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -1058,7 +1058,7 @@ void func_80BB3BE0(EnGeg* this, PlayState* play) {
}
void func_80BB3CB4(EnGeg* this, PlayState* play) {
- f32 sp24 = play->state.frames * this->actor.speedXZ * 1400.0f;
+ f32 sp24 = play->state.frames * this->actor.speed * 1400.0f;
OPEN_DISPS(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_En_Geg/z_en_geg.h b/src/overlays/actors/ovl_En_Geg/z_en_geg.h
index 4a20068bd..71639bdac 100644
--- a/src/overlays/actors/ovl_En_Geg/z_en_geg.h
+++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.h
@@ -33,9 +33,9 @@ typedef struct EnGeg {
/* 0x484 */ Vec3f unk_484;
/* 0x490 */ Vec3s unk_490;
/* 0x496 */ u16 unk_496;
- /* 0x498 */ s16 unk_498;
- /* 0x49A */ s16 unk_49A;
- /* 0x49C */ s16 unk_49C[8];
+ /* 0x498 */ s16 csId;
+ /* 0x49A */ s16 nextCsId;
+ /* 0x49C */ s16 csIdList[8];
/* 0x4AC */ s32 unk_4AC;
/* 0x4B0 */ s16 unk_4B0;
/* 0x4B4 */ Vec3f unk_4B4;
@@ -46,6 +46,4 @@ typedef struct EnGeg {
/* 0x4E4 */ Vec3f unk_4E4;
} EnGeg; // size = 0x4F0
-extern const ActorInit En_Geg_InitVars;
-
#endif // Z_EN_GEG_H
diff --git a/src/overlays/actors/ovl_En_Gg/overlay.cfg b/src/overlays/actors/ovl_En_Gg/overlay.cfg
deleted file mode 100644
index 5c782de1b..000000000
--- a/src/overlays/actors/ovl_En_Gg/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Gg
-z_en_gg.c
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 e2ebab0d5..81d1c6bb6 100644
--- a/src/overlays/actors/ovl_En_Gg/z_en_gg.c
+++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.c
@@ -8,7 +8,7 @@
#include "objects/gameplay_keep/gameplay_keep.h"
#include "objects/object_gg/object_gg.h"
-#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_80)
+#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_REACT_TO_LENS)
#define THIS ((EnGg*)thisx)
@@ -26,7 +26,7 @@ void func_80B359DC(EnGg* this, PlayState* play);
void func_80B363E8(EnGgStruct* ptr, PlayState* play, Vec3f* arg1, Vec3f* arg2, Vec3f* arg3);
void func_80B364D4(EnGgStruct* ptr, PlayState* play);
-const ActorInit En_Gg_InitVars = {
+ActorInit En_Gg_InitVars = {
ACTOR_EN_GG,
ACTORCAT_NPC,
FLAGS,
@@ -123,13 +123,13 @@ s32 func_80B34FB4(EnGg* this, PlayState* play) {
s16 pitch;
sp40 = player->actor.world.pos;
- sp40.y = player->bodyPartsPos[7].y + 3.0f;
+ sp40.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
sp34 = this->actor.world.pos;
sp34.y += 70.0f;
pitch = Math_Vec3f_Pitch(&sp34, &sp40);
if ((this->actor.xzDistToPlayer < 250.0f) && (this->actor.xzDistToPlayer > 50.0f) &&
- (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_80) || (gSaveContext.save.weekEventReg[19] & 0x80))) {
+ (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_REACT_TO_LENS) || CHECK_WEEKEVENTREG(WEEKEVENTREG_19_80))) {
Math_SmoothStepToS(&this->unk_2E8, pitch, 4, 0x2AA8, 1);
} else {
Math_SmoothStepToS(&this->unk_2E8, 0, 4, 0x2AA8, 1);
@@ -144,7 +144,8 @@ void func_80B35108(EnGg* this, PlayState* play) {
this->collider.dim.pos.z = this->actor.world.pos.z;
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 30.0f, 30.0f, 7);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 30.0f, 30.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4);
}
void func_80B351A4(EnGg* this) {
@@ -212,7 +213,7 @@ void func_80B352A4(EnGg* this, PlayState* play) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
break;
}
- gSaveContext.save.weekEventReg[19] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_19_80);
this->actionFunc = func_80B3556C;
} else if ((this->unk_2E6 == 0) && ((this->actor.textId == 0xCED) || (this->actor.textId == 0xCEE))) {
if (sp26 < (lastFrame - 1)) {
@@ -225,21 +226,21 @@ void func_80B352A4(EnGg* this, PlayState* play) {
}
void func_80B35450(EnGg* this, PlayState* play) {
- if ((gSaveContext.save.weekEventReg[91] & 0x10) && (play->csCtx.state == 0)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_91_10) && (play->csCtx.state == CS_STATE_IDLE)) {
func_80B359DC(this, play);
}
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_80)) {
+ if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_REACT_TO_LENS)) {
Actor_DeactivateLens(play);
}
this->unk_308 = 1;
this->actionFunc = func_80B352A4;
} else if ((this->actor.xzDistToPlayer < 200.0f) && (this->actor.xzDistToPlayer > 50.0f)) {
- if (gSaveContext.save.weekEventReg[19] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_80)) {
func_800B863C(&this->actor, play);
this->actor.textId = 0xCEE;
- } else if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_80)) {
+ } else if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_REACT_TO_LENS)) {
func_800B863C(&this->actor, play);
this->actor.textId = 0xCE5;
}
@@ -252,7 +253,7 @@ void func_80B3556C(EnGg* this, PlayState* play) {
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
this->unk_308 = 0;
- this->actor.flags &= ~ACTOR_FLAG_80;
+ this->actor.flags &= ~ACTOR_FLAG_REACT_TO_LENS;
func_80B35250(this);
} else {
this->actor.textId = func_80B357F0(this);
@@ -264,15 +265,15 @@ void func_80B3556C(EnGg* this, PlayState* play) {
void func_80B35634(EnGg* this, PlayState* play) {
s32 pad;
- s32 actionIndex;
+ s32 cueChannel;
- if (Cutscene_CheckActorAction(play, 119)) {
- actionIndex = Cutscene_GetActorActionIndex(play, 119);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_119)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_119);
- if (this->unk_2DB != play->csCtx.actorActions[actionIndex]->action) {
- this->unk_2DB = play->csCtx.actorActions[actionIndex]->action;
+ if (this->cueId != play->csCtx.actorCues[cueChannel]->id) {
+ this->cueId = play->csCtx.actorCues[cueChannel]->id;
- switch (play->csCtx.actorActions[actionIndex]->action) {
+ switch (play->csCtx.actorCues[cueChannel]->id) {
case 1:
this->unk_2DA = 0;
this->unk_2E6 = 0;
@@ -319,7 +320,7 @@ void func_80B35634(EnGg* this, PlayState* play) {
break;
case 8:
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
default:
@@ -333,10 +334,10 @@ void func_80B35634(EnGg* this, PlayState* play) {
func_80B358D8(this, play);
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
this->actor.shape.yOffset = 0.0f;
} else {
- this->unk_2DB = 99;
+ this->cueId = 99;
}
}
@@ -390,32 +391,32 @@ void func_80B359DC(EnGg* this, PlayState* play) {
if (this->actor.xzDistToPlayer < 200.0f) {
if (this->unk_306 == 0) {
- if (player->stateFlags2 & 0x8000000) {
+ if (player->stateFlags2 & PLAYER_STATE2_8000000) {
this->unk_306 = 1;
play_sound(NA_SE_SY_TRE_BOX_APPEAR);
}
- } else if (!(player->stateFlags2 & 0x8000000)) {
+ } else if (!(player->stateFlags2 & PLAYER_STATE2_8000000)) {
this->unk_306 = 0;
}
if ((player->transformation == PLAYER_FORM_HUMAN) && (play->msgCtx.ocarinaMode == 3) &&
(play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING)) {
- if (!(gSaveContext.save.weekEventReg[19] & 0x80)) {
- gSaveContext.save.weekEventReg[19] |= 0x80;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_19_80)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_19_80);
}
this->unk_307 = true;
}
- if (ActorCutscene_GetCanPlayNext(this->unk_2DC)) {
- ActorCutscene_Start(this->unk_2DC, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_Start(this->csId, &this->actor);
this->unk_307 = false;
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
if (this->unk_307) {
- ActorCutscene_SetIntentToPlay(this->unk_2DC);
+ CutsceneManager_Queue(this->csId);
}
}
} else {
@@ -530,7 +531,7 @@ void func_80B35C84(EnGgStruct* ptr, PlayState* play) {
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++, gOwlStatueWhiteFlashDL);
+ gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL);
}
Matrix_Pop();
@@ -554,7 +555,7 @@ void func_80B35C84(EnGgStruct* ptr, PlayState* play) {
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++, gOwlStatueWhiteFlashDL);
+ gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL);
}
Matrix_Pop();
@@ -607,7 +608,7 @@ void func_80B3610C(EnGgStruct* ptr, PlayState* play) {
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++, gOwlStatueWhiteFlashDL);
+ gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL);
}
Matrix_Pop();
@@ -647,12 +648,12 @@ void EnGg_Init(Actor* thisx, PlayState* play) {
EnGg* this = THIS;
if (INV_CONTENT(ITEM_MASK_GORON) == ITEM_MASK_GORON) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f);
- this->actor.bgCheckFlags |= 0x400;
+ this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_400;
SkelAnime_InitFlex(play, &this->skelAnime, &object_gg_Skel_00F6C0, &object_gg_Anim_00F578, this->jointTable,
this->morphTable, 20);
@@ -660,12 +661,12 @@ void EnGg_Init(Actor* thisx, PlayState* play) {
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
- gSaveContext.save.weekEventReg[20] &= (u8)~4;
- gSaveContext.save.weekEventReg[20] &= (u8)~8;
- gSaveContext.save.weekEventReg[20] &= (u8)~0x10;
- this->actor.flags &= ~ACTOR_FLAG_80;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_04);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_08);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_10);
+ this->actor.flags &= ~ACTOR_FLAG_REACT_TO_LENS;
this->unk_310 = this->actor.home.pos.y;
- this->unk_2DC = this->actor.cutscene;
+ this->csId = this->actor.csId;
this->actor.flags |= ACTOR_FLAG_2000000;
this->unk_308 = 0;
this->unk_309 = 0;
@@ -683,22 +684,22 @@ void EnGg_Update(Actor* thisx, PlayState* play) {
EnGg* this = THIS;
if (play->actorCtx.lensMaskSize == LENS_MASK_ACTIVE_SIZE) {
- this->actor.flags |= ACTOR_FLAG_80;
+ this->actor.flags |= ACTOR_FLAG_REACT_TO_LENS;
this->actor.flags |= ACTOR_FLAG_1;
} else {
- this->actor.flags &= ~ACTOR_FLAG_80;
+ this->actor.flags &= ~ACTOR_FLAG_REACT_TO_LENS;
this->actor.flags &= ~ACTOR_FLAG_1;
}
- if (gSaveContext.save.weekEventReg[19] & 0x80) {
- if (play->csCtx.state == 0) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_80)) {
+ if (play->csCtx.state == CS_STATE_IDLE) {
this->actor.flags |= ACTOR_FLAG_1;
} else {
this->actor.flags &= ~ACTOR_FLAG_1;
}
}
- if ((play->csCtx.state == 0) &&
+ if ((play->csCtx.state == CS_STATE_IDLE) &&
((this->unk_2DA != 14) && (this->unk_2DA != 11) && (this->unk_2DA != 12) && (this->unk_2DA != 13))) {
func_80B364D4(&this->unk_344, play);
}
@@ -708,10 +709,10 @@ void EnGg_Update(Actor* thisx, PlayState* play) {
func_80B35968(this, play);
}
- if (!(gSaveContext.save.weekEventReg[91] & 0x10) &&
- ((gSaveContext.save.weekEventReg[19] & 0x80) || CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_80) ||
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_91_10) &&
+ (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_80) || CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_REACT_TO_LENS) ||
(this->unk_308 == 1))) {
- gSaveContext.save.weekEventReg[91] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_91_10);
}
this->actionFunc(this, play);
@@ -722,7 +723,7 @@ void EnGg_Update(Actor* thisx, PlayState* play) {
Actor_MoveWithoutGravity(&this->actor);
SkelAnime_Update(&this->skelAnime);
- if (play->csCtx.state == 0) {
+ if (play->csCtx.state == CS_STATE_IDLE) {
func_80B3584C(this);
} else {
this->unk_2E8 = 0;
@@ -789,7 +790,7 @@ void EnGg_Draw(Actor* thisx, PlayState* play) {
this->unk_344.unk_38(&this->unk_344, play);
}
- if (gSaveContext.save.weekEventReg[19] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_80)) {
func_8012C28C(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80B36DFC[this->unk_2E2]));
@@ -797,7 +798,7 @@ void EnGg_Draw(Actor* thisx, PlayState* play) {
POLY_OPA_DISP =
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_80) || (this->unk_308 == 1)) {
+ } else if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_REACT_TO_LENS) || (this->unk_308 == 1)) {
func_8012C2DC(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(D_80B36DFC[this->unk_2E2]));
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 421168e99..cc744cffa 100644
--- a/src/overlays/actors/ovl_En_Gg/z_en_gg.h
+++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.h
@@ -34,8 +34,8 @@ typedef struct EnGg {
/* 0x25C */ Vec3s morphTable[20];
/* 0x2D4 */ UNK_TYPE1 unk_2D4[0x6];
/* 0x2DA */ u8 unk_2DA;
- /* 0x2DB */ u8 unk_2DB;
- /* 0x2DC */ s16 unk_2DC;
+ /* 0x2DB */ u8 cueId;
+ /* 0x2DC */ s16 csId;
/* 0x2DE */ UNK_TYPE1 unk2DE[4];
/* 0x2E2 */ s16 unk_2E2;
/* 0x2E4 */ s16 unk_2E4;
@@ -57,6 +57,4 @@ typedef struct EnGg {
/* 0x344 */ EnGgStruct unk_344;
} EnGg; // size = 0x390
-extern const ActorInit En_Gg_InitVars;
-
#endif // Z_EN_GG_H
diff --git a/src/overlays/actors/ovl_En_Gg2/overlay.cfg b/src/overlays/actors/ovl_En_Gg2/overlay.cfg
deleted file mode 100644
index 24b42b858..000000000
--- a/src/overlays/actors/ovl_En_Gg2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Gg2
-z_en_gg2.c
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 47eac3051..fdd099fff 100644
--- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c
+++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c
@@ -7,7 +7,7 @@
#include "z_en_gg2.h"
#include "objects/object_gg/object_gg.h"
-#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_80)
+#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_REACT_TO_LENS)
#define THIS ((EnGg2*)thisx)
@@ -27,7 +27,7 @@ void func_80B3B5D4(EnGg2* this, PlayState* play);
s32 func_80B3B648(EnGg2* this, Path* path, s32 arg2_);
f32 func_80B3B7E4(Path* path, s32 arg1, Vec3f* arg2, Vec3s* arg3);
-const ActorInit En_Gg2_InitVars = {
+ActorInit En_Gg2_InitVars = {
ACTOR_EN_GG2,
ACTORCAT_NPC,
FLAGS,
@@ -81,7 +81,7 @@ s32 func_80B3AC94(EnGg2* this, PlayState* play) {
s16 pitch;
sp40 = player->actor.world.pos;
- sp40.y = player->bodyPartsPos[7].y + 3.0f;
+ sp40.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
sp34 = this->actor.world.pos;
sp34.y += 70.0f;
@@ -89,7 +89,7 @@ s32 func_80B3AC94(EnGg2* this, PlayState* play) {
pitch = Math_Vec3f_Pitch(&sp34, &sp40);
if ((this->actor.xzDistToPlayer < 250.0f) && (this->actor.xzDistToPlayer > 50.0f) &&
- CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_80)) {
+ CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_REACT_TO_LENS)) {
Math_SmoothStepToS(&this->unk_2F4, pitch, 4, 0x2AA8, 1);
} else {
Math_SmoothStepToS(&this->unk_2F4, 0, 4, 0x2AA8, 1);
@@ -159,14 +159,14 @@ void func_80B3AFB0(EnGg2* this, PlayState* play) {
this->unk_2F0 = 1;
this->actionFunc = func_80B3AE60;
} else if ((this->actor.xzDistToPlayer < 100.0f) && (this->actor.xzDistToPlayer > 50.0f) &&
- CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_80)) {
+ CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_REACT_TO_LENS)) {
func_800B863C(&this->actor, play);
this->actor.textId = 0xCE4;
}
}
void func_80B3B05C(EnGg2* this, PlayState* play) {
- if ((this->actor.xzDistToPlayer < 100.0f) && CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_80)) {
+ if ((this->actor.xzDistToPlayer < 100.0f) && CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_REACT_TO_LENS)) {
this->actionFunc = func_80B3B5D4;
}
}
@@ -192,19 +192,19 @@ void func_80B3B120(EnGg2* this, PlayState* play) {
if (func_80B3B648(this, this->unk_1D8, this->unk_1DC) != 0) {
if (this->unk_1DC >= (this->unk_1D8->count - 2)) {
this->actionFunc = func_80B3AE60;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
} else {
this->unk_1DC++;
}
}
- Math_ApproachF(&this->actor.speedXZ, 5.0f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 5.0f, 0.2f, 1.0f);
}
}
void func_80B3B21C(EnGg2* this, PlayState* play) {
- this->actor.speedXZ = 0.0f;
- if ((this->actor.xzDistToPlayer < 100.0f) && CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_80)) {
- this->unk_2E4 = ActorCutscene_GetAdditionalCutscene(this->unk_2E4);
+ this->actor.speed = 0.0f;
+ if ((this->actor.xzDistToPlayer < 100.0f) && CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_REACT_TO_LENS)) {
+ this->csId = CutsceneManager_GetAdditionalCsId(this->csId);
this->actionFunc = func_80B3B5D4;
}
}
@@ -214,17 +214,17 @@ void func_80B3B294(EnGg2* this, PlayState* play) {
if (this->unk_2F1 == 0) {
if (play->sceneId == SCENE_11GORONNOSATO) {
- gSaveContext.save.weekEventReg[20] |= 4;
- gSaveContext.save.weekEventReg[20] &= (u8)~8;
- gSaveContext.save.weekEventReg[20] &= (u8)~0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_20_04);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_08);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_10);
} else if (play->sceneId == SCENE_17SETUGEN) {
- gSaveContext.save.weekEventReg[20] &= (u8)~4;
- gSaveContext.save.weekEventReg[20] |= 8;
- gSaveContext.save.weekEventReg[20] &= (u8)~0x10;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_04);
+ SET_WEEKEVENTREG(WEEKEVENTREG_20_08);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_10);
} else if (play->sceneId == SCENE_10YUKIYAMANOMURA) {
- gSaveContext.save.weekEventReg[20] &= (u8)~4;
- gSaveContext.save.weekEventReg[20] &= (u8)~8;
- gSaveContext.save.weekEventReg[20] |= 0x10;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_04);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_08);
+ SET_WEEKEVENTREG(WEEKEVENTREG_20_10);
}
if (this->unk_1D8 != NULL) {
@@ -240,23 +240,23 @@ void func_80B3B294(EnGg2* this, PlayState* play) {
} else {
this->unk_2F1 = 1;
if (play->sceneId == SCENE_11GORONNOSATO) {
- gSaveContext.save.weekEventReg[20] |= 4;
- gSaveContext.save.weekEventReg[20] &= (u8)~8;
- gSaveContext.save.weekEventReg[20] &= (u8)~0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_20_04);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_08);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_10);
} else if (play->sceneId == SCENE_17SETUGEN) {
- gSaveContext.save.weekEventReg[20] &= (u8)~4;
- gSaveContext.save.weekEventReg[20] |= 8;
- gSaveContext.save.weekEventReg[20] &= (u8)~0x10;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_04);
+ SET_WEEKEVENTREG(WEEKEVENTREG_20_08);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_10);
} else if (play->sceneId == SCENE_10YUKIYAMANOMURA) {
- gSaveContext.save.weekEventReg[20] &= (u8)~4;
- gSaveContext.save.weekEventReg[20] &= (u8)~8;
- gSaveContext.save.weekEventReg[20] |= 0x10;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_04);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_08);
+ SET_WEEKEVENTREG(WEEKEVENTREG_20_10);
}
}
}
}
}
- Math_ApproachF(&this->actor.speedXZ, 5.0f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 5.0f, 0.2f, 1.0f);
}
void func_80B3B4B0(EnGg2* this, PlayState* play) {
@@ -274,14 +274,14 @@ void func_80B3B4B0(EnGg2* this, PlayState* play) {
}
void func_80B3B5D4(EnGg2* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->unk_2E4)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_2E4, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->actor);
this->actionFunc = func_80B3AE60;
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- ActorCutscene_SetIntentToPlay(this->unk_2E4);
+ CutsceneManager_Queue(this->csId);
}
}
@@ -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, RADF_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C);
+ func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(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;
@@ -356,62 +356,62 @@ void EnGg2_Init(Actor* thisx, PlayState* play2) {
EnGg2* this = THIS;
if (INV_CONTENT(ITEM_MASK_GORON) == ITEM_MASK_GORON) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
- if (gSaveContext.save.weekEventReg[91] & 0x10) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_91_10)) {
+ Actor_Kill(&this->actor);
return;
}
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f);
- this->actor.bgCheckFlags |= 0x400;
+ 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->actor.flags &= ~ACTOR_FLAG_80;
+ this->actor.flags &= ~ACTOR_FLAG_REACT_TO_LENS;
this->unk_2F0 = 0;
this->unk_2F1 = 0;
this->unk_2F2 = 0;
this->unk_2F4 = 0;
this->unk_2F6 = 0;
- this->unk_2E4 = this->actor.cutscene;
+ this->csId = this->actor.csId;
this->unk_2EC = 20;
this->unk_2EA = 0;
if (play->sceneId == SCENE_11GORONNOSATO) {
- gSaveContext.save.weekEventReg[20] &= (u8)~4;
- gSaveContext.save.weekEventReg[20] &= (u8)~8;
- gSaveContext.save.weekEventReg[20] &= (u8)~0x10;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_04);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_08);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_10);
this->unk_2EE = 0;
Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 0);
this->actionFunc = func_80B3AFB0;
} else if (play->sceneId == SCENE_17SETUGEN) {
- if ((gSaveContext.save.weekEventReg[20] & 4) && !(gSaveContext.save.weekEventReg[20] & 8) &&
- !(gSaveContext.save.weekEventReg[20] & 0x10)) {
- gSaveContext.save.weekEventReg[20] &= (u8)~4;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_04) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_20_08) &&
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_20_10)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_04);
this->unk_2EE = 8;
Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 0);
this->actionFunc = func_80B3B05C;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else if (play->sceneId == SCENE_10YUKIYAMANOMURA) {
- if (!(gSaveContext.save.weekEventReg[20] & 4) && (gSaveContext.save.weekEventReg[20] & 8) &&
- !(gSaveContext.save.weekEventReg[20] & 0x10)) {
- gSaveContext.save.weekEventReg[20] &= (u8)~8;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_20_04) && CHECK_WEEKEVENTREG(WEEKEVENTREG_20_08) &&
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_20_10)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_08);
this->unk_2EE = 8;
Actor_ChangeAnimationByInfo(&this->skelAnime, D_80B3BF00, 0);
this->actionFunc = func_80B3B05C;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else {
- gSaveContext.save.weekEventReg[20] &= (u8)~4;
- gSaveContext.save.weekEventReg[20] &= (u8)~8;
- gSaveContext.save.weekEventReg[20] &= (u8)~0x10;
- Actor_MarkForDeath(&this->actor);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_04);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_08);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_10);
+ Actor_Kill(&this->actor);
}
}
@@ -422,13 +422,13 @@ void EnGg2_Update(Actor* thisx, PlayState* play) {
EnGg2* this = THIS;
if (play->actorCtx.lensMaskSize == LENS_MASK_ACTIVE_SIZE) {
- this->actor.flags |= ACTOR_FLAG_80;
+ this->actor.flags |= ACTOR_FLAG_REACT_TO_LENS;
this->actor.flags |= ACTOR_FLAG_1;
if ((this->unk_2EE == 5) && (this->unk_2EE == 7)) {
this->actor.flags &= ~ACTOR_FLAG_1;
}
} else {
- this->actor.flags &= ~ACTOR_FLAG_80;
+ this->actor.flags &= ~ACTOR_FLAG_REACT_TO_LENS;
this->actor.flags &= ~ACTOR_FLAG_1;
}
@@ -481,7 +481,7 @@ void EnGg2_Draw(Actor* thisx, PlayState* play) {
func_8012C2DC(play->state.gfxCtx);
- if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_80) || (this->unk_2F0 == 1)) {
+ 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]));
POLY_XLU_DISP =
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 21c1f8441..ff7aec4a6 100644
--- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h
+++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h
@@ -21,7 +21,7 @@ typedef struct EnGg2 {
/* 0x1EC */ Vec3s jointTable[20];
/* 0x264 */ Vec3s morphTable[20];
/* 0x2DC */ UNK_TYPE1 unk2DC[0x8];
- /* 0x2E4 */ s16 unk_2E4;
+ /* 0x2E4 */ s16 csId;
/* 0x2E6 */ UNK_TYPE1 unk2E6[4];
/* 0x2EA */ s16 unk_2EA;
/* 0x2EC */ s16 unk_2EC;
@@ -35,6 +35,4 @@ typedef struct EnGg2 {
/* 0x304 */ Vec3f unk_304;
} EnGg2; // size = 0x310
-extern const ActorInit En_Gg2_InitVars;
-
#endif // Z_EN_GG2_H
diff --git a/src/overlays/actors/ovl_En_Giant/overlay.cfg b/src/overlays/actors/ovl_En_Giant/overlay.cfg
deleted file mode 100644
index a56d149b7..000000000
--- a/src/overlays/actors/ovl_En_Giant/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Giant
-z_en_giant.c
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 7d2819ff9..07c01b288 100644
--- a/src/overlays/actors/ovl_En_Giant/z_en_giant.c
+++ b/src/overlays/actors/ovl_En_Giant/z_en_giant.c
@@ -51,28 +51,28 @@ typedef enum {
} GiantAnimation;
/**
- * Used as values for csAction. The UNKNOWN ones are never used in-game.
+ * Used as values for cueId. The UNKNOWN ones are never used in-game.
*/
typedef enum {
- /* 0 */ GIANT_CS_ACTION_NONE,
- /* 1 */ GIANT_CS_ACTION_IDLE,
- /* 2 */ GIANT_CS_ACTION_WALKING,
- /* 3 */ GIANT_CS_ACTION_LOOKING_UP,
- /* 4 */ GIANT_CS_ACTION_RAISING_ARMS,
- /* 5 */ GIANT_CS_ACTION_STRUGGLING,
- /* 6 */ GIANT_CS_ACTION_FALLING_OVER,
- /* 7 */ GIANT_CS_ACTION_IDLE_FADE_IN,
- /* 8 */ GIANT_CS_ACTION_TALKING,
- /* 9 */ GIANT_CS_ACTION_DONE_TALKING,
- /* 10 */ GIANT_CS_ACTION_TEACHING_OATH_TO_ORDER,
- /* 11 */ GIANT_CS_ACTION_PLAYER_LEARNED_OATH_TO_ORDER,
- /* 12 */ GIANT_CS_ACTION_UNKNOWN_12,
- /* 13 */ GIANT_CS_ACTION_UNKNOWN_13,
- /* 14 */ GIANT_CS_ACTION_UNKNOWN_14,
- /* 15 */ GIANT_CS_ACTION_HOLDING_UP_MOON_IN_CLOCK_TOWER
-} GiantCsActionIndex;
+ /* 0 */ GIANT_CUE_ID_NONE,
+ /* 1 */ GIANT_CUE_ID_IDLE,
+ /* 2 */ GIANT_CUE_ID_WALKING,
+ /* 3 */ GIANT_CUE_ID_LOOKING_UP,
+ /* 4 */ GIANT_CUE_ID_RAISING_ARMS,
+ /* 5 */ GIANT_CUE_ID_STRUGGLING,
+ /* 6 */ GIANT_CUE_ID_FALLING_OVER,
+ /* 7 */ GIANT_CUE_ID_IDLE_FADE_IN,
+ /* 8 */ GIANT_CUE_ID_TALKING,
+ /* 9 */ GIANT_CUE_ID_DONE_TALKING,
+ /* 10 */ GIANT_CUE_ID_TEACHING_OATH_TO_ORDER,
+ /* 11 */ GIANT_CUE_ID_PLAYER_LEARNED_OATH_TO_ORDER,
+ /* 12 */ GIANT_CUE_ID_UNKNOWN_12,
+ /* 13 */ GIANT_CUE_ID_UNKNOWN_13,
+ /* 14 */ GIANT_CUE_ID_UNKNOWN_14,
+ /* 15 */ GIANT_CUE_ID_HOLDING_UP_MOON_IN_CLOCK_TOWER
+} GiantCueId;
-const ActorInit En_Giant_InitVars = {
+ActorInit En_Giant_InitVars = {
ACTOR_EN_GIANT,
ACTORCAT_NPC,
FLAGS,
@@ -110,7 +110,7 @@ s32 EnGiant_IsImprisoned(EnGiant* this) {
case GIANT_TYPE_SWAMP_CLOCK_TOWER_SUCCESS:
case GIANT_TYPE_SWAMP_GIANTS_CHAMBER_AND_ENDING:
case GIANT_TYPE_SWAMP_CLOCK_TOWER_FAILURE:
- if (!CHECK_QUEST_ITEM(QUEST_REMAINS_ODOWLA)) {
+ if (!CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA)) {
return true;
}
break;
@@ -154,41 +154,45 @@ void EnGiant_Init(Actor* thisx, PlayState* play) {
SkelAnime_InitFlex(play, &this->skelAnime, &gGiantSkel, &gGiantLargeStrideAnim, this->jointTable, this->morphTable,
GIANT_LIMB_MAX);
EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP);
- this->csAction = GIANT_CS_ACTION_NONE;
+ this->cueId = GIANT_CUE_ID_NONE;
this->actionFunc = EnGiant_PerformCutsceneActions;
this->actor.draw = NULL;
this->alpha = 0;
this->actor.velocity.y = -10.0f;
this->actor.terminalVelocity = -10.0f;
this->actor.gravity = -5.0f;
+
switch (type) {
case GIANT_TYPE_CANYON_TERMINA_FIELD:
case GIANT_TYPE_CANYON_CLOCK_TOWER_SUCCESS:
case GIANT_TYPE_CANYON_GIANTS_CHAMBER_AND_ENDING:
- this->actorActionCommand = 454;
+ this->cueType = CS_CMD_ACTOR_CUE_454;
break;
+
case GIANT_TYPE_SWAMP_TERMINA_FIELD:
case GIANT_TYPE_SWAMP_CLOCK_TOWER_SUCCESS:
case GIANT_TYPE_SWAMP_GIANTS_CHAMBER_AND_ENDING:
- this->actorActionCommand = 455;
+ this->cueType = CS_CMD_ACTOR_CUE_455;
break;
+
case GIANT_TYPE_OCEAN_TERMINA_FIELD:
case GIANT_TYPE_OCEAN_CLOCK_TOWER_SUCCESS:
case GIANT_TYPE_OCEAN_GIANTS_CHAMBER_AND_ENDING:
- this->actorActionCommand = 456;
+ this->cueType = CS_CMD_ACTOR_CUE_456;
break;
+
default:
- this->actorActionCommand = 453;
+ this->cueType = CS_CMD_ACTOR_CUE_453;
break;
}
if (GIANT_TYPE_IS_CLOCK_TOWER_SUCCESS(type)) {
- if (!(gSaveContext.save.weekEventReg[25] & 2)) {
- Actor_MarkForDeath(&this->actor);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_25_02)) {
+ Actor_Kill(&this->actor);
return;
}
- this->actorActionCommand = 0x1C5;
+ this->cueType = CS_CMD_ACTOR_CUE_453;
Actor_SetScale(&this->actor, 0.32f);
this->actionFunc = EnGiant_PerformClockTowerSuccessActions;
Animation_Change(&this->skelAnime, &gGiantRaisedArmsStartAnim, 0.0f,
@@ -210,7 +214,7 @@ void EnGiant_Init(Actor* thisx, PlayState* play) {
this->actor.terminalVelocity = 0.0f;
this->actor.gravity = 0.0f;
if (EnGiant_IsImprisoned(this)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -259,65 +263,80 @@ void EnGiant_ChangeToStartOrLoopAnimation(EnGiant* this, s16 requestedAnimIndex)
}
/**
- * Immediately switches to the specified animation for this cutscene action.
+ * Immediately switches to the specified animation for this cueId.
*/
-void EnGiant_ChangeAnimBasedOnCsAction(EnGiant* this) {
- switch (this->csAction) {
- case GIANT_CS_ACTION_IDLE:
+void EnGiant_ChangeAnimBasedOnCueId(EnGiant* this) {
+ switch (this->cueId) {
+ case GIANT_CUE_ID_IDLE:
EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP);
break;
- case GIANT_CS_ACTION_WALKING:
+
+ case GIANT_CUE_ID_WALKING:
EnGiant_ChangeAnim(this, GIANT_ANIM_WALKING_LOOP);
break;
- case GIANT_CS_ACTION_STRUGGLING:
+
+ case GIANT_CUE_ID_STRUGGLING:
EnGiant_ChangeAnim(this, GIANT_ANIM_STRUGGLE_START);
break;
- case GIANT_CS_ACTION_FALLING_OVER:
+
+ case GIANT_CUE_ID_FALLING_OVER:
EnGiant_ChangeAnim(this, GIANT_ANIM_FALLING_OVER);
break;
- case GIANT_CS_ACTION_IDLE_FADE_IN:
+
+ case GIANT_CUE_ID_IDLE_FADE_IN:
EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP);
this->alpha = 0;
break;
- case GIANT_CS_ACTION_TALKING:
+
+ case GIANT_CUE_ID_TALKING:
EnGiant_ChangeAnim(this, GIANT_ANIM_BIG_CALL_START);
break;
- case GIANT_CS_ACTION_DONE_TALKING:
+
+ case GIANT_CUE_ID_DONE_TALKING:
EnGiant_ChangeAnim(this, GIANT_ANIM_BIG_CALL_END);
break;
- case GIANT_CS_ACTION_TEACHING_OATH_TO_ORDER:
+
+ case GIANT_CUE_ID_TEACHING_OATH_TO_ORDER:
EnGiant_ChangeAnim(this, GIANT_ANIM_SMALL_CALL_START);
break;
- case GIANT_CS_ACTION_PLAYER_LEARNED_OATH_TO_ORDER:
+
+ case GIANT_CUE_ID_PLAYER_LEARNED_OATH_TO_ORDER:
EnGiant_ChangeAnim(this, GIANT_ANIM_SMALL_CALL_END);
break;
- case GIANT_CS_ACTION_UNKNOWN_12:
+
+ case GIANT_CUE_ID_UNKNOWN_12:
EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP);
break;
- case GIANT_CS_ACTION_UNKNOWN_13:
+
+ case GIANT_CUE_ID_UNKNOWN_13:
EnGiant_ChangeAnim(this, GIANT_ANIM_WALKING_LOOP);
break;
- case GIANT_CS_ACTION_UNKNOWN_14:
+
+ case GIANT_CUE_ID_UNKNOWN_14:
if (this->animIndex != GIANT_ANIM_WALKING_LOOP) {
EnGiant_ChangeAnim(this, GIANT_ANIM_WALKING_LOOP);
}
break;
- case GIANT_CS_ACTION_HOLDING_UP_MOON_IN_CLOCK_TOWER:
+
+ case GIANT_CUE_ID_HOLDING_UP_MOON_IN_CLOCK_TOWER:
Animation_Change(&this->skelAnime, &gGiantRaisedArmsStartAnim, 0.0f,
Animation_GetLastFrame(&gGiantRaisedArmsStartAnim) - 1.0f,
Animation_GetLastFrame(&gGiantRaisedArmsStartAnim), ANIMMODE_ONCE, 0.0f);
break;
+
+ default:
+ break;
}
}
void EnGiant_UpdateAlpha(EnGiant* this) {
- switch (this->csAction) {
- case GIANT_CS_ACTION_FALLING_OVER:
+ switch (this->cueId) {
+ case GIANT_CUE_ID_FALLING_OVER:
if (this->skelAnime.curFrame >= 90.0f && this->alpha > 0) {
this->alpha -= 12;
}
break;
- case GIANT_CS_ACTION_UNKNOWN_14:
+ case GIANT_CUE_ID_UNKNOWN_14:
this->alpha -= 12;
break;
default:
@@ -336,30 +355,30 @@ void EnGiant_UpdateAlpha(EnGiant* this) {
*/
void EnGiant_PlayAndUpdateAnimation(EnGiant* this) {
if (SkelAnime_Update(&this->skelAnime) &&
- (this->animIndex != GIANT_ANIM_FALLING_OVER || this->csAction != GIANT_CS_ACTION_FALLING_OVER)) {
+ (this->animIndex != GIANT_ANIM_FALLING_OVER || this->cueId != GIANT_CUE_ID_FALLING_OVER)) {
EnGiant_ChangeAnim(this, this->animIndex);
- switch (this->csAction) {
- case GIANT_CS_ACTION_LOOKING_UP:
+ switch (this->cueId) {
+ case GIANT_CUE_ID_LOOKING_UP:
EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_LOOK_UP_START);
break;
- case GIANT_CS_ACTION_RAISING_ARMS:
+ case GIANT_CUE_ID_RAISING_ARMS:
EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_RAISED_ARMS_START);
break;
- case GIANT_CS_ACTION_STRUGGLING:
+ case GIANT_CUE_ID_STRUGGLING:
EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_STRUGGLE_START);
break;
- case GIANT_CS_ACTION_FALLING_OVER:
+ case GIANT_CUE_ID_FALLING_OVER:
// Unused
EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_FALLING_OVER);
break;
- case GIANT_CS_ACTION_TALKING:
+ case GIANT_CUE_ID_TALKING:
EnGiant_ChangeAnim(this, GIANT_ANIM_BIG_CALL_LOOP);
break;
- case GIANT_CS_ACTION_DONE_TALKING:
- case GIANT_CS_ACTION_PLAYER_LEARNED_OATH_TO_ORDER:
+ 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_CS_ACTION_TEACHING_OATH_TO_ORDER:
+ case GIANT_CUE_ID_TEACHING_OATH_TO_ORDER:
EnGiant_ChangeAnim(this, GIANT_ANIM_SMALL_CALL_LOOP);
break;
}
@@ -371,10 +390,10 @@ void EnGiant_PlaySound(EnGiant* this) {
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_PlaySfxAtPos(&this->actor, NA_SE_EV_KYOJIN_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_KYOJIN_WALK);
}
if (this->animIndex == GIANT_ANIM_FALLING_OVER && Animation_OnFrame(&this->skelAnime, 40.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_KYOJIN_VOICE_FAIL);
+ 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) ||
@@ -388,30 +407,28 @@ void EnGiant_PlaySound(EnGiant* this) {
}
}
-void EnGiant_UpdatePosition(EnGiant* this, PlayState* play, u32 actionIndex) {
- CsCmdActorAction* actorAction = play->csCtx.actorActions[actionIndex];
- f32 startPosY = actorAction->startPos.y;
+void EnGiant_UpdatePosition(EnGiant* this, PlayState* play, u32 cueChannel) {
+ CsCmdActorCue* cue = play->csCtx.actorCues[cueChannel];
+ f32 startPosY = cue->startPos.y;
s32 pad[2];
- f32 endPosY = actorAction->endPos.y;
- f32 scale = Environment_LerpWeight(actorAction->endFrame, actorAction->startFrame, play->csCtx.frames);
+ f32 endPosY = cue->endPos.y;
+ f32 scale = Environment_LerpWeight(cue->endFrame, cue->startFrame, play->csCtx.curFrame);
this->actor.world.pos.y = ((endPosY - startPosY) * scale) + startPosY;
}
void EnGiant_PerformClockTowerSuccessActions(EnGiant* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, this->actorActionCommand)) {
- EnGiant_UpdatePosition(this, play, Cutscene_GetActorActionIndex(play, this->actorActionCommand));
- if (this->csAction !=
- play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->actorActionCommand)]->action) {
- this->csAction =
- play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->actorActionCommand)]->action;
- EnGiant_ChangeAnimBasedOnCsAction(this);
+ if (Cutscene_IsCueInChannel(play, this->cueType)) {
+ EnGiant_UpdatePosition(this, play, Cutscene_GetCueChannel(play, this->cueType));
+ if (this->cueId != play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id) {
+ this->cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id;
+ EnGiant_ChangeAnimBasedOnCueId(this);
}
EnGiant_UpdateAlpha(this);
}
EnGiant_PlaySound(this);
- if (this->csAction == GIANT_CS_ACTION_STRUGGLING) {
+ if (this->cueId == GIANT_CUE_ID_STRUGGLING) {
func_800B9010(&this->actor, NA_SE_IT_KYOJIN_BEARING - SFX_FLAG);
}
EnGiant_PlayAndUpdateAnimation(this);
@@ -424,13 +441,11 @@ void EnGiant_PlayClockTowerFailureAnimation(EnGiant* this, PlayState* play) {
void EnGiant_PerformCutsceneActions(EnGiant* this, PlayState* play) {
this->actor.draw = EnGiant_Draw;
- if (Cutscene_CheckActorAction(play, this->actorActionCommand)) {
- Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->actorActionCommand));
- if (this->csAction !=
- play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->actorActionCommand)]->action) {
- this->csAction =
- play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->actorActionCommand)]->action;
- EnGiant_ChangeAnimBasedOnCsAction(this);
+ if (Cutscene_IsCueInChannel(play, this->cueType)) {
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType));
+ if (this->cueId != play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id) {
+ this->cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id;
+ EnGiant_ChangeAnimBasedOnCueId(this);
}
EnGiant_UpdateAlpha(this);
}
@@ -449,7 +464,7 @@ void EnGiant_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
if (this->blinkTimer == 0) {
blinkTimerTemp = 0;
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 3b2cac192..45e89dd55 100644
--- a/src/overlays/actors/ovl_En_Giant/z_en_giant.h
+++ b/src/overlays/actors/ovl_En_Giant/z_en_giant.h
@@ -48,8 +48,8 @@ typedef struct EnGiant {
/* 0x188 */ Vec3s jointTable[GIANT_LIMB_MAX];
/* 0x1E8 */ Vec3s morphTable[GIANT_LIMB_MAX];
/* 0x248 */ s16 animIndex;
- /* 0x24A */ u16 actorActionCommand;
- /* 0x24C */ u16 csAction;
+ /* 0x24A */ u16 cueType;
+ /* 0x24C */ u16 cueId;
/* 0x24E */ s16 alpha;
/* 0x250 */ u16 sfxId;
/* 0x254 */ MtxF headDrawMtxF;
@@ -58,6 +58,4 @@ typedef struct EnGiant {
/* 0x298 */ EnGiantActionFunc actionFunc;
} EnGiant; // size = 0x29C
-extern const ActorInit En_Giant_InitVars;
-
#endif // Z_EN_GIANT_H
diff --git a/src/overlays/actors/ovl_En_Ginko_Man/overlay.cfg b/src/overlays/actors/ovl_En_Ginko_Man/overlay.cfg
deleted file mode 100644
index 5d02f02dc..000000000
--- a/src/overlays/actors/ovl_En_Ginko_Man/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ginko_Man
-z_en_ginko_man.c
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 758d3eae0..fba0c1118 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
@@ -30,7 +30,7 @@ void EnGinkoMan_Stamp(EnGinkoMan* this, PlayState* play);
void EnGinkoMan_Dialogue(EnGinkoMan* this, PlayState* play);
void EnGinkoMan_SwitchAnimation(EnGinkoMan* this, PlayState* play);
-const ActorInit En_Ginko_Man_InitVars = {
+ActorInit En_Ginko_Man_InitVars = {
ACTOR_EN_GINKO_MAN,
ACTORCAT_NPC,
FLAGS,
@@ -89,7 +89,7 @@ void EnGinkoMan_Idle(EnGinkoMan* this, PlayState* play) {
EnGinkoMan_SwitchAnimation(this, play);
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- if ((gSaveContext.save.bankRupees & 0xFFFF) == 0) {
+ if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) == 0) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_LEGSMACKING);
Message_StartTextbox(play, 0x44C, &this->actor);
this->curTextId = 0x44C; // would you like to make an account
@@ -118,7 +118,7 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) {
switch (this->curTextId) {
case 0x44C: // "Hey there, little guy! Won't you deposit some Rupees? (first dialogue)
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING);
- if (gSaveContext.save.weekEventReg[10] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_10_08)) {
Message_StartTextbox(play, 0x44E, &this->actor);
this->curTextId = 0x44E; //" ...So, what'll it be? Deposit Rupees Don't deposit Rupees"
} else {
@@ -153,7 +153,7 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_LEGSMACKING);
}
- play->msgCtx.bankRupees = gSaveContext.save.bankRupees & 0xFFFF;
+ play->msgCtx.bankRupees = gSaveContext.save.saveInfo.bankRupees & 0xFFFF;
Message_StartTextbox(play, 0x45A, &this->actor);
this->curTextId = 0x45A; // "All right, little guy, now I've got a total of [rupees] from you!"
}
@@ -164,22 +164,22 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) {
this->curTextId = 0x44E; //" ...So, what'll it be? Deposit Rupees Don't deposit Rupees"
break;
case 0x45A: // "All right, little guy, now I've got a total of [rupees] from you!"
- if (((gSaveContext.save.bankRupees & 0xFFFF) >= 200) && (this->previousBankValue < 200) &&
- !(gSaveContext.save.weekEventReg[59] & 0x40)) {
- gSaveContext.save.weekEventReg[59] |= 0x40;
+ if (((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 200) && (this->previousBankValue < 200) &&
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_40)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_59_40);
Message_StartTextbox(play, 0x45B, &this->actor);
this->curTextId = 0x45B; // "What's this? You've already saved up 200 Rupees!?!
- } else if (((gSaveContext.save.bankRupees & 0xFFFF) >= 1000) && ((this->previousBankValue) < 1000) &&
- !(gSaveContext.save.weekEventReg[59] & 0x80)) {
- gSaveContext.save.weekEventReg[59] |= 0x80;
+ } else if (((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 1000) &&
+ ((this->previousBankValue) < 1000) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_80)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_59_80);
Message_StartTextbox(play, 0x45C, &this->actor);
this->curTextId = 0x45C; // "What's this? You've already saved up 1000 Rupees!?!
- } else if ((gSaveContext.save.bankRupees & 0xFFFF) >= 5000) {
- if ((this->previousBankValue < 5000) && !(gSaveContext.save.weekEventReg[60] & 1)) {
- gSaveContext.save.weekEventReg[60] |= 1;
+ } else if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 5000) {
+ if ((this->previousBankValue < 5000) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_60_01)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_60_01);
Message_StartTextbox(play, 0x45D, &this->actor);
this->curTextId = 0x45D; // "What's this? You've already saved up 5000 Rupees?!
- } else if (this->previousBankValue < (s16)(gSaveContext.save.bankRupees & 0xFFFF)) {
+ } else if (this->previousBankValue < (s16)(gSaveContext.save.saveInfo.bankRupees & 0xFFFF)) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING);
Message_StartTextbox(play, 0x45E, &this->actor);
this->curTextId =
@@ -199,7 +199,7 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) {
case 0x45C: // given 1000 reward
case 0x45D: // given 5000 reward
this->isStampChecked = false;
- func_801477B4(play);
+ Message_CloseTextbox(play);
EnGinkoMan_SetupBankAward(this);
EnGinkoMan_BankAward(this, play);
break;
@@ -221,7 +221,7 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) {
break;
case 0x465: // "There! Now I'll know you when I see you!"
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_LEGSMACKING);
- play->msgCtx.bankRupees = gSaveContext.save.bankRupees & 0xFFFF;
+ play->msgCtx.bankRupees = gSaveContext.save.saveInfo.bankRupees & 0xFFFF;
Message_StartTextbox(play, 0x45A, &this->actor);
this->curTextId = 0x45A; // "All right, little guy, now I've got a total of [rupees] from you!"
break;
@@ -237,10 +237,10 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) {
case 0x46C: // "Ah, yes...[Link], right? If I remember, you're the little guy who deposited [rupees]."
case 0x47E: // "Your deposits total [rupees]."
if (this->choiceDepositWithdrawl == GINKOMAN_CHOICE_DEPOSIT) {
- if ((u32)(gSaveContext.save.bankRupees & 0xFFFF) >= 5000) {
+ if ((u32)(gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 5000) {
Message_StartTextbox(play, 0x45F, &this->actor);
this->curTextId = 0x45F; // "Excuuuse me! But I can't take anymore deposits!
- } else if (gSaveContext.save.playerData.rupees == 0) {
+ } else if (gSaveContext.save.saveInfo.playerData.rupees == 0) {
Message_StartTextbox(play, 0x458, &this->actor);
this->curTextId =
0x458; // "Hmm...You play mean jokes, little guy! You haven't even got a single Rupee!
@@ -270,7 +270,7 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) {
break;
case 0x470: // "Is that so? Come back and deposit some after saving up a bunch!"
if (Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->isStampChecked = false;
EnGinkoMan_SetupIdle(this); // change to waiting for approach
}
@@ -288,12 +288,12 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) {
case 0x473: // Use it wisely...
case 0x474: // "Aw, you're taking out all that? If you spend it like that, it'll all be gone before you know
// it!"
- if ((gSaveContext.save.bankRupees & 0xFFFF) == 0) {
+ if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) == 0) {
Message_StartTextbox(play, 0x478, &this->actor);
// "Look, little guy, all the Rupees you deposited are gone, so you can't use that stamp anymore."
this->curTextId = 0x478;
} else {
- play->msgCtx.bankRupees = gSaveContext.save.bankRupees & 0xFFFF;
+ play->msgCtx.bankRupees = gSaveContext.save.saveInfo.bankRupees & 0xFFFF;
Message_StartTextbox(play, 0x45A, &this->actor);
this->curTextId = 0x45A; // "All right, little guy, now I've got a total of [rupees] from you!"
}
@@ -319,12 +319,12 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) {
switch (this->curTextId) {
case 0x44E: // "...So, what'll it be?
if (play->msgCtx.choiceIndex == GINKOMAN_CHOICE_YES) {
- if ((gSaveContext.save.bankRupees & 0xFFFF) >= 5000) {
+ if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 5000) {
play_sound(NA_SE_SY_ERROR);
Message_StartTextbox(play, 0x45F, &this->actor);
this->curTextId = 0x45F; // bank full, cannot accept more
} else {
- if (gSaveContext.save.playerData.rupees > 0) {
+ if (gSaveContext.save.saveInfo.playerData.rupees > 0) {
func_8019F208();
Message_StartTextbox(play, 0x44F, &this->actor);
this->curTextId = 0x44F; // "All right! so..."
@@ -342,7 +342,7 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) {
break;
case 0x452: // Really? are you really depositing rupees?
if (play->msgCtx.choiceIndex == GINKOMAN_CHOICE_YES) {
- if (gSaveContext.save.playerData.rupees < play->msgCtx.bankRupeesSelected) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.bankRupeesSelected) {
play_sound(NA_SE_SY_ERROR);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING);
Message_StartTextbox(play, 0x459, &this->actor);
@@ -361,20 +361,20 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) {
this->curTextId = 0x453; // That's it? That aint nothing at all
}
- if ((gSaveContext.save.bankRupees & 0xFFFF) == 0) {
+ if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) == 0) {
this->isNewAccount = true;
}
Rupees_ChangeBy(-play->msgCtx.bankRupeesSelected);
- this->previousBankValue = gSaveContext.save.bankRupees & 0xFFFF;
- gSaveContext.save.bankRupees =
- ((gSaveContext.save.bankRupees & 0xFFFF) + play->msgCtx.bankRupeesSelected) |
- (gSaveContext.save.bankRupees & 0xFFFF0000);
+ this->previousBankValue = gSaveContext.save.saveInfo.bankRupees & 0xFFFF;
+ gSaveContext.save.saveInfo.bankRupees =
+ ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) + play->msgCtx.bankRupeesSelected) |
+ (gSaveContext.save.saveInfo.bankRupees & 0xFFFF0000);
}
} else { // GINKOMAN_CHOICE_NO
func_8019F230();
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING);
- if ((gSaveContext.save.bankRupees & 0xFFFF) == 0) {
+ if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) == 0) {
Message_StartTextbox(play, 0x456, &this->actor);
this->curTextId = 0x456; // Is that so? think about it
} else {
@@ -403,14 +403,14 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) {
break;
case 0x471: // Are you really withdrawling [selected rupees]?
if (play->msgCtx.choiceIndex == GINKOMAN_CHOICE_YES) {
- if ((s32)((gSaveContext.save.bankRupees & 0xFFFF)) <
+ if ((s32)((gSaveContext.save.saveInfo.bankRupees & 0xFFFF)) <
((s32)(play->msgCtx.bankRupeesSelected + this->serviceFee))) {
play_sound(NA_SE_SY_ERROR);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_LEGSMACKING);
Message_StartTextbox(play, 0x476, &this->actor);
this->curTextId = 0x476; // you dont have enough deposited to withdrawl
} else if (CUR_CAPACITY(UPG_WALLET) <
- (play->msgCtx.bankRupeesSelected + gSaveContext.save.playerData.rupees)) {
+ (play->msgCtx.bankRupeesSelected + gSaveContext.save.saveInfo.playerData.rupees)) {
// check if wallet is big enough
play_sound(NA_SE_SY_ERROR);
Message_StartTextbox(play, 0x475, &this->actor);
@@ -428,11 +428,11 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) {
this->curTextId = 0x472; // It's a waste to take out such a tiny bit
}
- this->previousBankValue = (s16)(gSaveContext.save.bankRupees & 0xFFFF);
- gSaveContext.save.bankRupees =
- (((gSaveContext.save.bankRupees & 0xFFFF) - play->msgCtx.bankRupeesSelected) -
+ this->previousBankValue = (s16)(gSaveContext.save.saveInfo.bankRupees & 0xFFFF);
+ gSaveContext.save.saveInfo.bankRupees =
+ (((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) - play->msgCtx.bankRupeesSelected) -
this->serviceFee) |
- (gSaveContext.save.bankRupees & 0xFFFF0000);
+ (gSaveContext.save.saveInfo.bankRupees & 0xFFFF0000);
Rupees_ChangeBy(play->msgCtx.bankRupeesSelected);
}
} else {
@@ -510,7 +510,7 @@ void EnGinkoMan_Dialogue(EnGinkoMan* this, PlayState* play) {
if ((this->skelAnime.animation == &object_boj_Anim_0008C0) &&
Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BANK_MAN_HAND_HIT);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BANK_MAN_HAND_HIT);
}
}
@@ -524,17 +524,17 @@ void EnGinkoMan_BankAward(EnGinkoMan* this, PlayState* play) {
this->actor.parent = NULL;
EnGinkoMan_SetupBankAward2(this);
} else if (this->curTextId == 0x45B) { // "Whats this, you already saved up 200?"
- if (!(gSaveContext.save.weekEventReg[10] & 8)) {
- Actor_PickUp(&this->actor, play, GI_WALLET_ADULT + CUR_UPG_VALUE(UPG_WALLET), 500.0f, 100.0f);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_10_08)) {
+ Actor_OfferGetItem(&this->actor, play, GI_WALLET_ADULT + CUR_UPG_VALUE(UPG_WALLET), 500.0f, 100.0f);
} else {
- Actor_PickUp(&this->actor, play, GI_RUPEE_BLUE, 500.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_RUPEE_BLUE, 500.0f, 100.0f);
}
} else if (this->curTextId == 0x45C) { // "Whats this, you already saved up 5000?"
- Actor_PickUp(&this->actor, play, GI_RUPEE_BLUE, 500.0f, 100.0f);
- } else if (!(gSaveContext.save.weekEventReg[59] & 8)) {
- Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_RUPEE_BLUE, 500.0f, 100.0f);
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_59_08)) {
+ Actor_OfferGetItem(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f);
} else {
- Actor_PickUp(&this->actor, play, GI_RUPEE_BLUE, 500.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_RUPEE_BLUE, 500.0f, 100.0f);
}
}
@@ -546,10 +546,10 @@ void EnGinkoMan_SetupBankAward2(EnGinkoMan* this) {
// separate function to handle bank rewards... called while the player is receiving the award
void EnGinkoMan_BankAward2(EnGinkoMan* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- if (!(gSaveContext.save.weekEventReg[10] & 8) && (this->curTextId == 0x45B)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_10_08) && (this->curTextId == 0x45B)) {
// "What's this? You've already saved up 200 Rupees!?! Well, little guy, here's your special gift. Take
// it!"
- gSaveContext.save.weekEventReg[10] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_10_08);
Message_StartTextbox(play, 0x47A, &this->actor);
this->curTextId = 0x47A; // Message after receiving reward for depositing 200 rupees.
} else {
@@ -561,13 +561,13 @@ void EnGinkoMan_BankAward2(EnGinkoMan* this, PlayState* play) {
EnGinkoMan_SetupDialogue(this);
} else if (this->curTextId == 0x45D) { // saved up 5000 rupees for HP
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) {
- if (!(gSaveContext.save.weekEventReg[59] & 8)) {
- gSaveContext.save.weekEventReg[59] |= 8;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_59_08)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_59_08);
}
EnGinkoMan_SetupIdle(this);
}
} else {
- func_800B85E0(&this->actor, play, 500.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 500.0f, PLAYER_IA_MINUS1);
}
}
@@ -579,7 +579,7 @@ void EnGinkoMan_SetupStamp(EnGinkoMan* this) {
void EnGinkoMan_Stamp(EnGinkoMan* this, PlayState* play) {
if ((this->curTextId == 0x464) // "Hey, relax! It doesn't leave any marks, and it's not gonna hurt."
&& (Animation_OnFrame(&this->skelAnime, 10.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_HANKO); // "stamp"
+ Actor_PlaySfx(&this->actor, NA_SE_EV_HANKO); // "stamp"
}
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
@@ -591,7 +591,7 @@ void EnGinkoMan_Stamp(EnGinkoMan* this, PlayState* play) {
break;
case 0x469: // "Excuse me, but let me take a look at you..."
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING);
- play->msgCtx.bankRupees = (gSaveContext.save.bankRupees & 0xFFFF);
+ play->msgCtx.bankRupees = (gSaveContext.save.saveInfo.bankRupees & 0xFFFF);
if ((CURRENT_DAY == 3) && (gSaveContext.save.isNight == true)) {
Message_StartTextbox(play, 0x46C, &this->actor);
this->curTextId = 0x46C; // "Ah, yes...[Link], right?
diff --git a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.h b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.h
index 808ea7c2f..b8a19d0f3 100644
--- a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.h
+++ b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.h
@@ -24,8 +24,6 @@ typedef struct EnGinkoMan {
/* 0x264 */ s16 animTimer;
} EnGinkoMan; // size = 0x268
-extern const ActorInit En_Ginko_Man_InitVars;
-
#define GINKOMAN_CHOICE_DEPOSIT 0
#define GINKOMAN_CHOICE_WITHDRAWL 1
#define GINKOMAN_CHOICE_CANCEL 2
diff --git a/src/overlays/actors/ovl_En_GirlA/overlay.cfg b/src/overlays/actors/ovl_En_GirlA/overlay.cfg
deleted file mode 100644
index 2083a3377..000000000
--- a/src/overlays/actors/ovl_En_GirlA/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_GirlA
-z_en_girla.c
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 74486b30c..90e449be3 100644
--- a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c
+++ b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c
@@ -51,7 +51,7 @@ void EnGirlA_BuyShieldMirror(PlayState* play, EnGirlA* this);
void EnGirlA_BuyFanfare(PlayState* play, EnGirlA* this);
-const ActorInit En_GirlA_InitVars = {
+ActorInit En_GirlA_InitVars = {
ACTOR_EN_GIRLA,
ACTORCAT_PROP,
FLAGS,
@@ -159,15 +159,15 @@ void EnGirlA_SetupAction(EnGirlA* this, EnGirlAActionFunc action) {
void EnGirlA_InitObjIndex(EnGirlA* this, PlayState* play) {
s16 params = this->actor.params;
- //! @bug: Condition is impossible, && should be an ||
- if (params >= SI_MAX && params < SI_POTION_RED_1) {
- Actor_MarkForDeath(&this->actor);
+ if ((params >= SI_MAX) && (params < SI_POTION_RED_1)) {
+ //! @bug: Impossible to reach, && should be an ||
+ Actor_Kill(&this->actor);
return;
}
this->objIndex = Object_GetIndex(&play->objectCtx, sShopItemEntries[params].objectId);
if (this->objIndex < 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -188,7 +188,7 @@ s32 EnGirlA_CanBuyPotionRed(PlayState* play, EnGirlA* this) {
if (!Inventory_HasEmptyBottle()) {
return CANBUY_RESULT_NEED_EMPTY_BOTTLE;
}
- if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS_2;
@@ -198,23 +198,23 @@ s32 EnGirlA_CanBuyPotionGreen(PlayState* play, EnGirlA* this) {
if (!Inventory_HasEmptyBottle()) {
return CANBUY_RESULT_NEED_EMPTY_BOTTLE;
}
- if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS_2;
}
s32 EnGirlA_CanBuyPotionBlue(PlayState* play, EnGirlA* this) {
- if (!(gSaveContext.save.weekEventReg[53] & 8)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_53_08)) {
return CANBUY_RESULT_CANNOT_GET_NOW;
}
if (!Inventory_HasEmptyBottle()) {
return CANBUY_RESULT_NEED_EMPTY_BOTTLE;
}
- if (!(gSaveContext.save.weekEventReg[53] & 0x10)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_53_10)) {
return CANBUY_RESULT_SUCCESS_2;
}
- if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS_2;
@@ -227,7 +227,7 @@ s32 EnGirlA_CanBuyArrows(PlayState* play, EnGirlA* this) {
if (AMMO(ITEM_BOW) >= CUR_CAPACITY(UPG_QUIVER)) {
return CANBUY_RESULT_NO_ROOM_2;
}
- if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS_2;
@@ -237,7 +237,7 @@ s32 EnGirlA_CanBuyNuts(PlayState* play, EnGirlA* this) {
if (CUR_CAPACITY(UPG_NUTS) != 0 && CUR_CAPACITY(UPG_NUTS) <= AMMO(ITEM_NUT)) {
return CANBUY_RESULT_NO_ROOM;
}
- if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
if (Item_CheckObtainability(ITEM_NUT) == ITEM_NONE) {
@@ -250,7 +250,7 @@ s32 EnGirlA_CanBuyShieldHero(PlayState* play, EnGirlA* this) {
if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD) != EQUIP_VALUE_SHIELD_NONE) {
return CANBUY_RESULT_NO_ROOM;
}
- if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS_1;
@@ -260,7 +260,7 @@ s32 EnGirlA_CanBuyStick(PlayState* play, EnGirlA* this) {
if (CUR_CAPACITY(UPG_STICKS) != 0 && AMMO(ITEM_STICK) >= CUR_CAPACITY(UPG_STICKS)) {
return CANBUY_RESULT_NO_ROOM;
}
- if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
if (Item_CheckObtainability(ITEM_STICK) == ITEM_NONE) {
@@ -270,7 +270,7 @@ s32 EnGirlA_CanBuyStick(PlayState* play, EnGirlA* this) {
}
s32 EnGirlA_CanBuyMaskAllNight(PlayState* play, EnGirlA* this) {
- if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS_2;
@@ -280,7 +280,7 @@ s32 EnGirlA_CanBuyBombBagCuriosityShop(PlayState* play, EnGirlA* this) {
if (GET_CUR_UPG_VALUE(UPG_BOMB_BAG) >= 2) {
return CANBUY_RESULT_CANNOT_GET_NOW;
}
- if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS_2;
@@ -293,7 +293,7 @@ s32 EnGirlA_CanBuyBombBag20BombShop(PlayState* play, EnGirlA* this) {
if (GET_CUR_UPG_VALUE(UPG_BOMB_BAG) >= 2) {
return CANBUY_RESULT_HAVE_BETTER;
}
- if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS_1;
@@ -306,7 +306,7 @@ s32 EnGirlA_CanBuyBombBag30BombShop(PlayState* play, EnGirlA* this) {
if (GET_CUR_UPG_VALUE(UPG_BOMB_BAG) == 3) {
return CANBUY_RESULT_HAVE_BETTER;
}
- if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS_1;
@@ -319,7 +319,7 @@ s32 EnGirlA_CanBuyBombchus(PlayState* play, EnGirlA* this) {
if (AMMO(ITEM_BOMBCHU) >= CUR_CAPACITY(UPG_BOMB_BAG)) {
return CANBUY_RESULT_NO_ROOM;
}
- if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
if (Item_CheckObtainability(ITEM_BOMBCHU) == ITEM_NONE) {
@@ -335,21 +335,21 @@ s32 EnGirlA_CanBuyBombs(PlayState* play, EnGirlA* this) {
if (AMMO(ITEM_BOMB) >= CUR_CAPACITY(UPG_BOMB_BAG)) {
return CANBUY_RESULT_NO_ROOM;
}
- if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS_2;
}
s32 EnGirlA_CanBuyBottleStolen(PlayState* play, EnGirlA* this) {
- if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS_1;
}
s32 EnGirlA_CanBuySword(PlayState* play, EnGirlA* this) {
- if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS_1;
@@ -359,7 +359,7 @@ s32 EnGirlA_CanBuyShieldMirror(PlayState* play, EnGirlA* this) {
if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD) != EQUIP_VALUE_SHIELD_NONE) {
return CANBUY_RESULT_NO_ROOM;
}
- if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS_1;
@@ -369,7 +369,7 @@ s32 EnGirlA_CanBuyFairy(PlayState* play, EnGirlA* this) {
if (!Inventory_HasEmptyBottle()) {
return CANBUY_RESULT_NEED_EMPTY_BOTTLE;
}
- if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS_2;
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 cb48f591d..f61b50b5a 100644
--- a/src/overlays/actors/ovl_En_GirlA/z_en_girla.h
+++ b/src/overlays/actors/ovl_En_GirlA/z_en_girla.h
@@ -107,8 +107,6 @@ typedef enum {
/* 0x2B */ SI_MAX
} EnGirlAShopItemId;
-extern const ActorInit En_GirlA_InitVars;
-
/*
* Shopkeeper Common Defines
*/
diff --git a/src/overlays/actors/ovl_En_Gk/overlay.cfg b/src/overlays/actors/ovl_En_Gk/overlay.cfg
deleted file mode 100644
index 15b8f08e6..000000000
--- a/src/overlays/actors/ovl_En_Gk/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Gk
-z_en_gk.c
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 601faff4b..40cf72a98 100644
--- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c
+++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c
@@ -33,7 +33,7 @@ void func_80B5253C(EnGk* this, PlayState* play);
void func_80B525E0(EnGk* this, PlayState* play);
void func_80B52654(EnGk* this, PlayState* play);
-const ActorInit En_Gk_InitVars = {
+ActorInit En_Gk_InitVars = {
ACTOR_EN_GK,
ACTORCAT_NPC,
FLAGS,
@@ -120,7 +120,7 @@ u16 func_80B50410(EnGk* this, PlayState* play) {
if (play->sceneId == SCENE_17SETUGEN2) {
if (player->transformation == PLAYER_FORM_GORON) {
- if (!(gSaveContext.save.weekEventReg[40] & 0x80)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_40_80)) {
switch (this->unk_31C) {
case 0xE7A:
return 0xE7B;
@@ -133,7 +133,7 @@ u16 func_80B50410(EnGk* this, PlayState* play) {
case 0xE7E:
return 0xE7F;
case 0xE7F:
- gSaveContext.save.weekEventReg[40] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_40_80);
this->unk_1E4 |= 1;
return 0xE80;
default:
@@ -143,7 +143,7 @@ u16 func_80B50410(EnGk* this, PlayState* play) {
this->unk_1E4 |= 1;
return 0xE81;
}
- } else if (!(gSaveContext.save.weekEventReg[41] & 1)) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_41_01)) {
switch (this->unk_31C) {
case 0xE82:
return 0xE83;
@@ -154,7 +154,7 @@ u16 func_80B50410(EnGk* this, PlayState* play) {
case 0xE7E:
return 0xE7F;
case 0xE7F:
- gSaveContext.save.weekEventReg[41] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_41_01);
this->unk_1E4 |= 1;
return 0xE80;
default:
@@ -166,12 +166,12 @@ u16 func_80B50410(EnGk* this, PlayState* play) {
}
} else if (play->sceneId == SCENE_GORONRACE) {
if (player->transformation == PLAYER_FORM_GORON) {
- if (!(gSaveContext.save.weekEventReg[41] & 4)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_41_04)) {
if (this->unk_31C == 0xE88) {
- if (!(gSaveContext.save.weekEventReg[41] & 8) || Inventory_HasEmptyBottle()) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_41_08) || Inventory_HasEmptyBottle()) {
return 0xE89;
}
- gSaveContext.save.weekEventReg[41] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_41_04);
this->unk_1E4 |= 1;
return 0xE94;
}
@@ -179,10 +179,10 @@ u16 func_80B50410(EnGk* this, PlayState* play) {
}
if ((this->unk_31C == 0xE8D) || (this->unk_31C == 0xE98)) {
- if (!(gSaveContext.save.weekEventReg[41] & 8) || Inventory_HasEmptyBottle()) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_41_08) || Inventory_HasEmptyBottle()) {
return 0xE89;
}
- gSaveContext.save.weekEventReg[41] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_41_04);
this->unk_1E4 |= 1;
return 0xE94;
}
@@ -193,12 +193,12 @@ u16 func_80B50410(EnGk* this, PlayState* play) {
return 0xE98;
}
- if (!(gSaveContext.save.weekEventReg[41] & 2)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_41_02)) {
switch (this->unk_31C) {
case 0xE85:
return 0xE86;
case 0xE86:
- gSaveContext.save.weekEventReg[41] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_41_02);
this->unk_1E4 |= 1;
return 0xE87;
default:
@@ -216,7 +216,7 @@ u16 func_80B50410(EnGk* this, PlayState* play) {
u16 func_80B50710(EnGk* this) {
switch (this->unk_31C) {
case 0xE8E:
- gSaveContext.save.weekEventReg[41] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_41_04);
this->unk_1E4 &= ~0x10;
this->unk_1E4 |= 1;
return 0xE8F;
@@ -225,7 +225,7 @@ u16 func_80B50710(EnGk* this) {
return 0xE8B;
case 0xE8B:
- gSaveContext.save.weekEventReg[41] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_41_04);
this->unk_1E4 |= 0x10;
this->unk_1E4 |= 1;
return 0xE8C;
@@ -240,18 +240,19 @@ void func_80B507A0(EnGk* this, PlayState* play) {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
- Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 30.0f, 30.0f, 7);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 30.0f, 30.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4);
}
s32 func_80B50854(EnGk* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (!(this->unk_1E4 & 0x40)) {
- if (player->stateFlags2 & 0x8000000) {
+ if (player->stateFlags2 & PLAYER_STATE2_8000000) {
this->unk_1E4 |= 0x40;
play_sound(NA_SE_SY_TRE_BOX_APPEAR);
}
- } else if (!(player->stateFlags2 & 0x8000000)) {
+ } else if (!(player->stateFlags2 & PLAYER_STATE2_8000000)) {
this->unk_1E4 &= ~0x40;
}
@@ -268,7 +269,7 @@ s32 func_80B50854(EnGk* this, PlayState* play) {
void func_80B50954(EnGk* this) {
if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 4.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLONKID_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLONKID_WALK);
}
}
@@ -373,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, RADF_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C);
+ func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(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;
@@ -442,7 +443,7 @@ s32 func_80B5100C(EnGk* this, PlayState* play) {
this->unk_324 = CLAMP(this->unk_324, -0x1C70, 0x1C70);
sp40 = player->actor.world.pos;
- sp40.y = player->bodyPartsPos[7].y + 3.0f;
+ sp40.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
sp34 = this->actor.world.pos;
sp34.y += 70.0f;
@@ -510,19 +511,19 @@ void func_80B51410(EnGk* this, PlayState* play) {
this->unk_1E4 |= 0x20;
}
- if (ActorCutscene_GetCanPlayNext(this->unk_318)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLONKID_SOB_TALK);
- ActorCutscene_Start(this->unk_318, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLONKID_SOB_TALK);
+ CutsceneManager_Start(this->csId, &this->actor);
this->unk_1E4 &= ~0x20;
return;
}
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
if (this->unk_1E4 & 0x20) {
- ActorCutscene_SetIntentToPlay(this->unk_318);
+ CutsceneManager_Queue(this->csId);
}
} else {
this->unk_1E4 &= ~0x20;
@@ -531,16 +532,16 @@ void func_80B51410(EnGk* this, PlayState* play) {
void func_80B51510(EnGk* this, PlayState* play) {
s32 pad;
- s32 actionIndex;
+ s32 cueChannel;
if (this) {}
- if (Cutscene_CheckActorAction(play, 479)) {
- actionIndex = Cutscene_GetActorActionIndex(play, 479);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_479)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_479);
- if (play->csCtx.actorActions[actionIndex]->action != this->unk_31B) {
- this->unk_31B = play->csCtx.actorActions[actionIndex]->action;
- switch (play->csCtx.actorActions[actionIndex]->action) {
+ if (this->cueId != play->csCtx.actorCues[cueChannel]->id) {
+ this->cueId = play->csCtx.actorCues[cueChannel]->id;
+ switch (play->csCtx.actorCues[cueChannel]->id) {
case 1:
this->unk_31A = 0;
this->unk_2E4 = 0;
@@ -584,10 +585,10 @@ void func_80B51510(EnGk* this, PlayState* play) {
func_80B51308(this, play);
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
this->actor.shape.yOffset = 0.0f;
} else {
- this->unk_31B = 0x63;
+ this->cueId = 99;
}
}
@@ -630,7 +631,7 @@ void func_80B51760(EnGk* this, PlayState* play) {
}
} else {
if (Flags_GetSwitch(play, ENGK_GET_3F00(&this->actor))) {
- gSaveContext.save.weekEventReg[40] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_40_40);
this->actionFunc = func_80B51D9C;
return;
}
@@ -661,9 +662,9 @@ void func_80B51970(EnGk* this, PlayState* play) {
if (((talkState == TEXT_STATE_DONE) || (talkState == TEXT_STATE_5)) && Message_ShouldAdvance(play)) {
if ((this->unk_31C == 0xE84) || (this->unk_31C == 0xE99)) {
- ActorCutscene_Stop(this->unk_318);
- this->unk_318 = ActorCutscene_GetAdditionalCutscene(this->unk_318);
- ActorCutscene_SetIntentToPlay(this->unk_318);
+ CutsceneManager_Stop(this->csId);
+ this->csId = CutsceneManager_GetAdditionalCsId(this->csId);
+ CutsceneManager_Queue(this->csId);
this->actionFunc = func_80B51D9C;
return;
}
@@ -722,8 +723,8 @@ void func_80B51B40(EnGk* this, PlayState* play) {
if (this->unk_31C == 0xE8F) {
play->nextEntrance = ENTRANCE(GORON_RACETRACK, 1);
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_03;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
Magic_Add(play, MAGIC_FILL_TO_CAPACITY);
} else {
this->actionFunc = func_80B51760;
@@ -772,8 +773,8 @@ void func_80B51B40(EnGk* this, PlayState* play) {
void func_80B51D9C(EnGk* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (ActorCutscene_GetCanPlayNext(this->unk_318)) {
- ActorCutscene_StartAndSetFlag(this->unk_318, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
if (this->unk_1E4 & 4) {
this->unk_1E4 &= ~4;
this->unk_2E4 = 6;
@@ -790,10 +791,10 @@ void func_80B51D9C(EnGk* this, PlayState* play) {
this->actionFunc = func_80B51970;
}
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- ActorCutscene_SetIntentToPlay(this->unk_318);
+ CutsceneManager_Queue(this->csId);
}
func_80B50954(this);
}
@@ -809,19 +810,19 @@ void func_80B51EA4(EnGk* this, PlayState* play) {
sp36 = this->actor.shape.rot.y - sp38.y;
if (func_80B50C78(this, this->path, this->unk_1EC)) {
if (this->unk_1EC >= (this->path->count - 1)) {
- ActorCutscene_Stop(this->unk_318);
- Actor_MarkForDeath(&this->actor);
+ CutsceneManager_Stop(this->csId);
+ Actor_Kill(&this->actor);
} else {
this->unk_1EC++;
}
}
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
sp38.y = this->actor.wallYaw;
}
if (ABS_ALT(sp36) < 0x2AAA) {
- Math_ApproachF(&this->actor.speedXZ, 3.0f, 0.2f, 0.5f);
+ Math_ApproachF(&this->actor.speed, 3.0f, 0.2f, 0.5f);
}
Actor_MoveWithGravity(&this->actor);
}
@@ -829,7 +830,7 @@ void func_80B51EA4(EnGk* this, PlayState* play) {
}
void func_80B51FD0(EnGk* this, PlayState* play) {
- if (!(gSaveContext.save.weekEventReg[22] & 4)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
if (this->unk_1E4 & 2) {
func_801A4748(&this->actor.projectedPos, NA_SE_EN_GOLON_KID_CRY - SFX_FLAG);
} else {
@@ -841,13 +842,13 @@ void func_80B51FD0(EnGk* this, PlayState* play) {
void func_80B5202C(EnGk* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (play->csCtx.state == 0) {
+ if (play->csCtx.state == CS_STATE_IDLE) {
func_80B51410(this, play);
}
if (!func_80B50854(this, play)) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- gSaveContext.save.weekEventReg[24] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_24_80);
this->actionFunc = func_80B51698;
} else if ((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) {
func_800B863C(&this->actor, play);
@@ -859,7 +860,8 @@ void func_80B5202C(EnGk* this, PlayState* play) {
}
if (this->unk_1E4 & 2) {
- if ((play->msgCtx.ocarinaMode != 1) && (play->msgCtx.ocarinaMode != 3) && (play->csCtx.state == 0)) {
+ if ((play->msgCtx.ocarinaMode != 1) && (play->msgCtx.ocarinaMode != 3) &&
+ (play->csCtx.state == CS_STATE_IDLE)) {
func_801A4748(&this->actor.projectedPos, NA_SE_EN_GOLON_KID_CRY - SFX_FLAG);
}
} else {
@@ -895,9 +897,9 @@ 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)) {
- gSaveContext.save.weekEventReg[22] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_22_04);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_SIT_IMT);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_SIT_IMT);
this->unk_350 = 0x4000;
this->actionFunc = func_80B52654;
}
@@ -906,7 +908,7 @@ void func_80B5227C(EnGk* this, PlayState* play) {
void func_80B52340(EnGk* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->unk_1E4 |= 4;
- if (gSaveContext.eventInf[1] & 2) {
+ if (CHECK_EVENTINF(EVENTINF_11)) {
this->unk_31C = 0xE90;
this->actionFunc = func_80B52430;
} else {
@@ -955,7 +957,7 @@ void func_80B52430(EnGk* this, PlayState* play) {
void func_80B5253C(EnGk* this, PlayState* play) {
s32 sp24;
- if (gSaveContext.save.weekEventReg[41] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_41_08)) {
sp24 = 0x93;
} else {
sp24 = 0x6A;
@@ -964,11 +966,11 @@ void func_80B5253C(EnGk* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL;
if (sp24 == 0x6A) {
- gSaveContext.save.weekEventReg[41] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_41_08);
}
this->actionFunc = func_80B525E0;
} else {
- Actor_PickUp(&this->actor, play, sp24, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, sp24, 300.0f, 300.0f);
}
}
@@ -978,14 +980,14 @@ void func_80B525E0(EnGk* this, PlayState* play) {
Message_StartTextbox(play, this->unk_31C, &this->actor);
this->actionFunc = func_80B52430;
} else {
- func_800B85E0(&this->actor, play, 400.0f, -1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
}
}
void func_80B52654(EnGk* this, PlayState* play) {
this->unk_350 += 0x400;
- if ((this->unk_1E4 & 0x80) && (play->csCtx.frames == 250)) {
- gSaveContext.save.weekEventReg[22] |= 4;
+ if ((this->unk_1E4 & 0x80) && (play->csCtx.curFrame == 250)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_22_04);
}
this->unk_354 = Math_SinS(this->unk_350) * 0.006f * 0.06f;
@@ -993,7 +995,7 @@ void func_80B52654(EnGk* this, PlayState* play) {
this->actor.scale.z = 0.006f - this->unk_354;
this->actor.scale.x = 0.006f + this->unk_354;
if (this->unk_350 == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLONKID_SNORE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLONKID_SNORE);
}
}
@@ -1020,14 +1022,14 @@ void EnGk_Init(Actor* thisx, PlayState* play) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 5);
if (play->sceneId == SCENE_17SETUGEN2) {
if (Flags_GetSwitch(play, ENGK_GET_3F00(&this->actor))) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
- this->unk_318 = this->actor.cutscene;
+ this->csId = this->actor.csId;
this->path = SubS_GetPathByIndex(play, ENGK_GET_F0(&this->actor), 0xF);
this->actionFunc = func_80B51760;
}
} else if (play->sceneId == SCENE_GORONRACE) {
- if (gSaveContext.save.weekEventReg[33] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) {
if (gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 1)) {
this->actionFunc = func_80B51760;
} else if (gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 2)) {
@@ -1036,23 +1038,23 @@ void EnGk_Init(Actor* thisx, PlayState* play) {
this->actionFunc = func_80B51760;
}
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else if (ENGK_GET_F(&this->actor) == ENGK_F_2) {
- if (!(gSaveContext.save.weekEventReg[22] & 4)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
this->actionFunc = func_80B51FD0;
this->actor.draw = NULL;
this->actor.flags |= ACTOR_FLAG_10;
this->actor.flags &= ~ACTOR_FLAG_1;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
- } else if (!(gSaveContext.save.weekEventReg[22] & 4)) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
this->unk_2E4 = 0;
- this->unk_318 = this->actor.cutscene;
+ this->csId = this->actor.csId;
this->actor.flags |= ACTOR_FLAG_10;
this->actor.flags |= ACTOR_FLAG_2000000;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
@@ -1074,7 +1076,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) && !(gSaveContext.save.weekEventReg[22] & 4))) {
+ ((ENGK_GET_F(&this->actor) == ENGK_F_0) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04))) {
func_80B507A0(this, play);
SkelAnime_Update(&this->skelAnime);
Actor_TrackPlayer(play, &this->actor, &this->unk_1D8, &this->unk_1DE, this->actor.focus.pos);
@@ -1226,14 +1228,14 @@ TexturePtr D_80B533E4[] = {
void EnGk_Draw(Actor* thisx, PlayState* play) {
s32 pad;
EnGk* this = THIS;
- Vec3f sp5C;
- Vec3f sp50;
+ Vec3f pos;
+ Vec3f scale;
OPEN_DISPS(play->state.gfxCtx);
func_8012C28C(play->state.gfxCtx);
- if ((ENGK_GET_F(&this->actor) == ENGK_F_0) && (gSaveContext.save.weekEventReg[22] & 4)) {
+ if ((ENGK_GET_F(&this->actor) == ENGK_F_0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
Matrix_RotateXS(-0x4000, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -1242,12 +1244,12 @@ void EnGk_Draw(Actor* thisx, PlayState* play) {
func_8012C2DC(play->state.gfxCtx);
- sp5C = this->actor.world.pos;
- sp50.x = 0.2f;
- sp50.y = 0.2f;
- sp50.z = 0.2f;
+ pos = this->actor.world.pos;
+ scale.x = 0.2f;
+ scale.y = 0.2f;
+ scale.z = 0.2f;
- func_800BC620(&sp5C, &sp50, 255, play);
+ func_800BC620(&pos, &scale, 255, play);
} else {
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80B533E4[this->unk_2E0]));
@@ -1259,20 +1261,21 @@ void EnGk_Draw(Actor* thisx, PlayState* play) {
func_8012C2DC(play->state.gfxCtx);
if ((this->unk_2E4 == 0) || (this->unk_2E4 == 1) || (this->unk_2E4 == 2) || (this->unk_2E4 == 3) ||
(this->unk_2E4 == 4)) {
- sp5C.x = this->actor.world.pos.x - 15.0f;
- sp5C.y = this->actor.world.pos.y;
- sp5C.z = this->actor.world.pos.z;
+ pos.x = this->actor.world.pos.x - 15.0f;
+ pos.y = this->actor.world.pos.y;
+ pos.z = this->actor.world.pos.z;
- sp50.x = 0.2f;
- sp50.y = 0.2f;
- sp50.z = 0.2f;
+ scale.x = 0.2f;
+ scale.y = 0.2f;
+ scale.z = 0.2f;
} else {
- sp5C = this->actor.world.pos;
- sp50.x = 0.2f;
- sp50.y = 0.2f;
- sp50.z = 0.2f;
+ pos = this->actor.world.pos;
+ scale.x = 0.2f;
+ scale.y = 0.2f;
+ scale.z = 0.2f;
}
- func_800BC620(&sp5C, &sp50, 255, play);
+
+ func_800BC620(&pos, &scale, 255, play);
}
}
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 61610d684..0f74c1d65 100644
--- a/src/overlays/actors/ovl_En_Gk/z_en_gk.h
+++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.h
@@ -39,9 +39,9 @@ typedef struct EnGk {
/* 0x2F4 */ Vec3f unk_2F4;
/* 0x300 */ Vec3f unk_300;
/* 0x30C */ Vec3f unk_30C;
- /* 0x318 */ s16 unk_318;
+ /* 0x318 */ s16 csId;
/* 0x31A */ u8 unk_31A;
- /* 0x31B */ u8 unk_31B;
+ /* 0x31B */ u8 cueId;
/* 0x31C */ u16 unk_31C;
/* 0x31E */ s16 unk_31E;
/* 0x320 */ s16 unk_320;
@@ -56,6 +56,4 @@ typedef struct EnGk {
/* 0x354 */ f32 unk_354;
} EnGk; // size = 0x358
-extern const ActorInit En_Gk_InitVars;
-
#endif // Z_EN_GK_H
diff --git a/src/overlays/actors/ovl_En_Gm/overlay.cfg b/src/overlays/actors/ovl_En_Gm/overlay.cfg
deleted file mode 100644
index d39cd1d30..000000000
--- a/src/overlays/actors/ovl_En_Gm/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Gm
-z_en_gm.c
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 c85815ee7..f31dd7cd2 100644
--- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c
+++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c
@@ -80,7 +80,7 @@ static u8 D_80951820[] = {
/* 0x134 */ SCHEDULE_CMD_RET_TIME(12, 55, 13, 0, 20),
/* 0x13A */ SCHEDULE_CMD_RET_NONE(),
/* 0x13B */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_L(2, 0x1EB - 0x140),
- /* 0x140 */ SCHEDULE_CMD_CHECK_FLAG_L(0x32, 0x01, 0x1CD - 0x145),
+ /* 0x140 */ SCHEDULE_CMD_CHECK_FLAG_L(WEEKEVENTREG_50_01, 0x1CD - 0x145),
/* 0x145 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_YADOYA, 0x17A - 0x149),
/* 0x149 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(6, 0, 18, 0, 0x174 - 0x14F),
/* 0x14F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(18, 0, 21, 0, 0x16E - 0x155),
@@ -155,7 +155,7 @@ static s32 D_80951C2C[] = { 0x0E295A2D, 0x000A0C10 };
static s32 D_80951C34[] = { 0x0E29622D, 0x000A0C10 };
-const ActorInit En_Gm_InitVars = {
+ActorInit En_Gm_InitVars = {
ACTOR_EN_GM,
ACTORCAT_NPC,
FLAGS,
@@ -328,7 +328,7 @@ s32 func_8094E054(EnGm* this, PlayState* play, s32 arg2) {
s32 func_8094E0F8(EnGm* this, PlayState* play) {
s32 ret = false;
- if ((this->unk_260 != play->roomCtx.curRoom.num) && (play->roomCtx.unk31 == 0)) {
+ if ((this->unk_260 != play->roomCtx.curRoom.num) && (play->roomCtx.status == 0)) {
this->unk_260 = play->roomCtx.curRoom.num;
this->unk_262 = SubS_GetObjectIndex(OBJECT_IN2, play);
this->actor.draw = NULL;
@@ -425,48 +425,48 @@ void func_8094E2D0(EnGm* this) {
}
}
-s32 func_8094E454(EnGm* this, s16 arg1) {
+s32 func_8094E454(EnGm* this, s16 csId) {
s32 ret = false;
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(arg1);
- } else if (ActorCutscene_GetCanPlayNext(arg1)) {
- ActorCutscene_StartAndSetUnkLinkFields(arg1, &this->actor);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(csId);
+ } else if (CutsceneManager_IsNext(csId)) {
+ CutsceneManager_StartWithPlayerCs(csId, &this->actor);
ret = true;
} else {
- ActorCutscene_SetIntentToPlay(arg1);
+ CutsceneManager_Queue(csId);
}
return ret;
}
-s16 func_8094E4D0(EnGm* this, s32 arg1) {
+s16 func_8094E4D0(EnGm* this, s32 numCutscenes) {
s32 i;
- s16 cutscene = this->actor.cutscene;
+ s16 csId = this->actor.csId;
- for (i = 0; i < arg1; i++) {
- cutscene = ActorCutscene_GetAdditionalCutscene(cutscene);
+ for (i = 0; i < numCutscenes; i++) {
+ csId = CutsceneManager_GetAdditionalCsId(csId);
}
- return cutscene;
+ return csId;
}
s32 func_8094E52C(EnGm* this, PlayState* play) {
s32 pad;
- s16 sp2A = func_8094E4D0(this, 0);
+ s16 csId = func_8094E4D0(this, 0);
s32 ret = false;
switch (this->unk_3E0) {
case 0:
- if (!func_8094E454(this, sp2A)) {
+ if (!func_8094E454(this, csId)) {
break;
}
case 2:
- if (!(gSaveContext.save.weekEventReg[86] & 0x40) && (this->unk_3E0 == 2)) {
- ActorCutscene_Stop(sp2A);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_86_40) && (this->unk_3E0 == 2)) {
+ CutsceneManager_Stop(csId);
} else {
- Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)), &this->actor);
+ Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)), &this->actor);
}
this->unk_3E0++;
ret = true;
@@ -474,14 +474,15 @@ s32 func_8094E52C(EnGm* this, PlayState* play) {
case 1:
if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) {
- Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)), this->actor.child);
+ Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)),
+ this->actor.child);
}
this->unk_3E0++;
ret = true;
break;
case 3:
- ActorCutscene_Stop(sp2A);
+ CutsceneManager_Stop(csId);
this->unk_3E0++;
ret = true;
break;
@@ -492,7 +493,7 @@ s32 func_8094E52C(EnGm* this, PlayState* play) {
s32 func_8094E69C(EnGm* this, PlayState* play) {
Camera* subCam;
- s16 sp4A = func_8094E4D0(this, 0);
+ s16 csId = func_8094E4D0(this, 0);
s16 sp48;
Vec3f sp3C;
Vec3f sp30;
@@ -500,7 +501,7 @@ s32 func_8094E69C(EnGm* this, PlayState* play) {
switch (this->unk_3E0) {
case 0:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHAIR_ROLL);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIR_ROLL);
func_8094E054(this, play, 2);
this->unk_3E2 = 0;
this->unk_3E0++;
@@ -530,10 +531,10 @@ s32 func_8094E69C(EnGm* this, PlayState* play) {
break;
case 2:
- if (func_8094E454(this, sp4A)) {
+ if (func_8094E454(this, csId)) {
case 4:
case 6:
- subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp4A));
+ subCam = Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId));
Camera_SetTargetActor(subCam, &this->actor);
this->unk_3E0++;
ret = true;
@@ -544,7 +545,7 @@ s32 func_8094E69C(EnGm* this, PlayState* play) {
case 5:
case 7:
if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) {
- subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp4A));
+ subCam = Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId));
Camera_SetTargetActor(subCam, this->actor.child);
}
this->unk_3E0++;
@@ -552,8 +553,8 @@ s32 func_8094E69C(EnGm* this, PlayState* play) {
break;
case 8:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHAIR_ROLL);
- ActorCutscene_Stop(sp4A);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIR_ROLL);
+ CutsceneManager_Stop(csId);
this->unk_3E2 = 0;
this->unk_3E0++;
break;
@@ -632,12 +633,12 @@ s32 func_8094EB1C(EnGm* this, PlayState* play) {
switch (this->unk_3E0) {
case 0:
- if ((gSaveContext.save.weekEventReg[50] & 1) || (gSaveContext.save.weekEventReg[51] & 0x80) ||
- (gSaveContext.save.weekEventReg[75] & 2)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_50_01) || CHECK_WEEKEVENTREG(WEEKEVENTREG_51_80) ||
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_75_02)) {
ret = true;
break;
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHAIR_ROLL);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIR_ROLL);
func_8094E054(this, play, 2);
this->unk_3E2 = 0;
this->unk_3E0++;
@@ -657,7 +658,7 @@ s32 func_8094EB1C(EnGm* this, PlayState* play) {
break;
case 2:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHAIR_ROLL);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIR_ROLL);
this->unk_3E2 = 0;
this->unk_3E0++;
@@ -739,14 +740,14 @@ s32 func_8094EE84(EnGm* this, PlayState* play) {
this->actor.child = this->unk_268;
this->unk_264 = func_8094EDBC(this, play);
- if ((this->unk_258 == 5) && !(gSaveContext.save.weekEventReg[50] & 1) &&
- !(gSaveContext.save.weekEventReg[51] & 0x80) && !(gSaveContext.save.weekEventReg[75] & 2)) {
+ if ((this->unk_258 == 5) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_50_01) &&
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_51_80) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_75_02)) {
this->unk_3A4 |= 0x20;
} else if ((this->unk_258 != 1) && (this->unk_258 != 5) && (this->unk_258 != 7)) {
this->unk_3A4 |= 0x20;
}
- if ((this->unk_258 == 3) && (gSaveContext.save.weekEventReg[75] & 1)) {
+ if ((this->unk_258 == 3) && CHECK_WEEKEVENTREG(WEEKEVENTREG_75_01)) {
this->unk_3A4 &= ~0x20;
}
@@ -760,13 +761,13 @@ s32 func_8094EE84(EnGm* this, PlayState* play) {
s32 func_8094EFC4(EnGm* this, PlayState* play) {
s32 ret = false;
- if (play->csCtx.state != 0) {
+ if (play->csCtx.state != CS_STATE_IDLE) {
if (this->unk_3F8 == 0) {
if ((play->sceneId == SCENE_MILK_BAR) && (gSaveContext.sceneLayer == 2)) {
func_8094E054(this, play, 0);
this->unk_258 = 255;
}
- this->unk_259 = 255;
+ this->cueId = 255;
this->unk_3F8 = 1;
}
ret = true;
@@ -860,7 +861,7 @@ void func_8094F3D0(EnGm* this, PlayState* play) {
s32 talkState = Message_GetState(&play->msgCtx);
s32 textId = play->msgCtx.currentTextId;
- if ((&this->actor == player->targetActor) && ((textId < 0xFF) || (textId > 0x200)) && (talkState == TEXT_STATE_3) &&
+ if ((&this->actor == player->talkActor) && ((textId < 0xFF) || (textId > 0x200)) && (talkState == TEXT_STATE_3) &&
(this->prevTalkState == TEXT_STATE_3)) {
if ((play->state.frames % 3) == 0) {
if (this->unk_3AC == 120.0f) {
@@ -892,7 +893,7 @@ s32 func_8094F53C(EnGm* this, PlayState* play) {
Actor* al = func_8094DEE0(this, play, ACTORCAT_NPC, ACTOR_EN_AL);
Actor* toto = func_8094DEE0(this, play, ACTORCAT_NPC, ACTOR_EN_TOTO);
- if (player->stateFlags1 & 0x440) {
+ if (player->stateFlags1 & (PLAYER_STATE1_40 | PLAYER_STATE1_400)) {
this->unk_3A4 |= 0x400;
if (this->unk_3A6 != sp32) {
switch (sp32) {
@@ -965,7 +966,7 @@ s32 func_8094F53C(EnGm* this, PlayState* play) {
if ((this->unk_3E8 == 6) && !(play->actorCtx.flags & ACTORCTX_FLAG_5) &&
Animation_OnFrame(&this->skelAnime, 20.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_HANKO);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_HANKO);
}
return false;
@@ -1105,7 +1106,7 @@ s32 func_8094FCC4(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
func_8094E054(this, play, 0);
} else {
func_8094E054(this, play, 9);
- this->skelAnime.moveFlags = 0x10;
+ this->skelAnime.moveFlags = ANIM_FLAG_NOMOVE;
}
this->unk_3A4 |= 0x100;
this->unk_3A4 |= 0x200;
@@ -1137,7 +1138,7 @@ s32 func_8094FE10(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
func_8094E054(this, play, 11);
SubS_UpdateFlags(&this->unk_3A4, 3, 7);
this->unk_268 = al;
- if (!(gSaveContext.save.weekEventReg[86] & 0x20)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_86_20)) {
this->unk_3C8 = 2;
this->unk_3CA = 2;
this->unk_3CC = 8;
@@ -1181,7 +1182,7 @@ s32 func_8094FF04(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
} else {
Math_Vec3f_Copy(&this->actor.world.pos, &sp30);
func_8094E054(this, play, 9);
- this->skelAnime.moveFlags = 0x10;
+ this->skelAnime.moveFlags = ANIM_FLAG_NOMOVE;
}
this->unk_400 = 0;
this->unk_3A4 |= 0x100;
@@ -1352,7 +1353,7 @@ s32 func_80950490(EnGm* this, PlayState* play) {
};
s32 pad;
- if ((gSaveContext.save.weekEventReg[50] & 1) || (gSaveContext.save.weekEventReg[51] & 0x80)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_50_01) || CHECK_WEEKEVENTREG(WEEKEVENTREG_51_80)) {
if (this->unk_400 == 0) {
this->unk_3C8 = 1;
this->unk_3CA = 1;
@@ -1412,7 +1413,7 @@ s32 func_80950690(EnGm* this, PlayState* play) {
al = func_8094DEE0(this, play, ACTORCAT_NPC, ACTOR_EN_AL);
toto = func_8094DEE0(this, play, ACTORCAT_NPC, ACTOR_EN_TOTO);
if ((al != NULL) && (al->update != NULL) && (toto != NULL) && (toto->update != NULL) &&
- !(player->stateFlags1 & 0x40)) {
+ !(player->stateFlags1 & PLAYER_STATE1_40)) {
if (DECR(this->unk_3B8) == 0) {
if (al == this->unk_268) {
this->unk_268 = toto;
@@ -1427,7 +1428,7 @@ s32 func_80950690(EnGm* this, PlayState* play) {
case 7:
this->unk_3D0 += 992;
if (DECR(this->unk_3B8) == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_GO_SLEEP);
+ Actor_PlaySfx(&this->actor, NA_SE_VO_GO_SLEEP);
this->unk_3B8 = 30;
}
break;
@@ -1465,7 +1466,7 @@ s32 func_80950804(EnGm* this, PlayState* play) {
Lib_Vec3f_TranslateAndRotateY(&this->unk_278, this->actor.world.rot.y, &sp38, &this->actor.world.pos);
this->unk_3BA += this->timePathTimeSpeed;
if (Animation_OnFrame(&this->skelAnime, 3.0f) || Animation_OnFrame(&this->skelAnime, 13.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_PIRATE_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_PIRATE_WALK);
}
}
@@ -1521,7 +1522,7 @@ s32 func_8095097C(EnGm* this, PlayState* play) {
this->timePathWaypoint = sp50;
this->timePathTargetPos = timePathTargetPos;
} else if (Animation_OnFrame(&this->skelAnime, 3.0f) || Animation_OnFrame(&this->skelAnime, 13.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_PIRATE_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_PIRATE_WALK);
}
return false;
}
@@ -1582,7 +1583,7 @@ void func_80950C24(EnGm* this, PlayState* play) {
void func_80950CDC(EnGm* this, PlayState* play) {
ScheduleOutput sp20;
- this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed);
+ this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
if (!Schedule_RunScript(play, D_80951820, &sp20) ||
((this->unk_258 != sp20.result) && !func_80950280(this, play, &sp20))) {
@@ -1634,20 +1635,20 @@ void func_80950F2C(EnGm* this, PlayState* play) {
s32 pad;
Vec3f sp3C;
Vec3f sp30;
- s32 sp2C;
+ s32 cueId;
s16 yaw;
- if (Cutscene_CheckActorAction(play, 526)) {
- sp2C = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 526)]->action;
- if (this->unk_259 != (sp2C & 0xFF)) {
- if (sp2C == 3) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHAIR_ROLL);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_526)) {
+ cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_526)]->id;
+ if (this->cueId != (u8)cueId) {
+ if (cueId == 3) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIR_ROLL);
}
- this->unk_259 = sp2C;
- func_8094E054(this, play, sp50[sp2C]);
+ this->cueId = cueId;
+ func_8094E054(this, play, sp50[cueId]);
}
- if ((this->unk_259 == 3) && (this->unk_268 != NULL) && (this->unk_268->update != NULL)) {
+ if ((this->cueId == 3) && (this->unk_268 != NULL) && (this->unk_268->update != NULL)) {
Math_Vec3f_Copy(&sp3C, &player->actor.world.pos);
Math_Vec3f_Copy(&sp30, &this->actor.world.pos);
yaw = Math_Vec3f_Yaw(&sp30, &sp3C);
@@ -1665,7 +1666,7 @@ void EnGm_Init(Actor* thisx, PlayState* play) {
EnGm* this = THIS;
if (func_8094DEE0(this, play, ACTORCAT_NPC, ACTOR_EN_GM)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -1711,10 +1712,10 @@ void EnGm_Update(Actor* thisx, PlayState* play) {
func_8094DFF8(this, play);
func_8094E2D0(this);
func_8094F2E8(this);
- func_8013C964(&this->actor, play, this->unk_3B4, 30.0f, PLAYER_AP_NONE, this->unk_3A4 & 7);
+ func_8013C964(&this->actor, play, this->unk_3B4, 30.0f, PLAYER_IA_NONE, this->unk_3A4 & 7);
if ((this->unk_258 != 3) && (this->unk_258 != 5) && (this->unk_258 != 8)) {
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
}
func_8094E1DC(this, play);
}
@@ -1763,7 +1764,7 @@ void EnGm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
Vec3f sp30;
s32 pad2;
- if ((ActorCutscene_GetCurrentIndex() == -1) && (limbIndex == 16)) {
+ if ((CutsceneManager_GetCurrentCsId() == CS_ID_NONE) && (limbIndex == 16)) {
Matrix_MultVec3f(&D_80951E24, &this->actor.focus.pos);
Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot);
}
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 0f74de16b..6eede0744 100644
--- a/src/overlays/actors/ovl_En_Gm/z_en_gm.h
+++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.h
@@ -26,7 +26,7 @@ typedef struct EnGm {
/* 0x250 */ s32 timePathWaypoint;
/* 0x254 */ s32 timePathElapsedTime;
/* 0x258 */ u8 unk_258;
- /* 0x259 */ u8 unk_259;
+ /* 0x259 */ u8 cueId;
/* 0x25C */ s32 unk_25C;
/* 0x260 */ s8 unk_260;
/* 0x261 */ s8 unk_261;
@@ -76,6 +76,4 @@ typedef struct EnGm {
/* 0x400 */ s32 unk_400;
} EnGm; // size = 0x404
-extern const ActorInit En_Gm_InitVars;
-
#endif // Z_EN_GM_H
diff --git a/src/overlays/actors/ovl_En_Go/overlay.cfg b/src/overlays/actors/ovl_En_Go/overlay.cfg
deleted file mode 100644
index 3ab4530a4..000000000
--- a/src/overlays/actors/ovl_En_Go/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Go
-z_en_go.c
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 8692fbba1..a0c7e3180 100644
--- a/src/overlays/actors/ovl_En_Go/z_en_go.c
+++ b/src/overlays/actors/ovl_En_Go/z_en_go.c
@@ -78,7 +78,7 @@ 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 };
-const ActorInit En_Go_InitVars = {
+ActorInit En_Go_InitVars = {
ACTOR_EN_GO,
ACTORCAT_NPC,
FLAGS,
@@ -525,7 +525,7 @@ void func_80A1213C(EnGo* this, PlayState* play) {
s32 func_80A121F4(PlayState* play) {
Player* player = GET_PLAYER(play);
- if ((player->transformation == PLAYER_FORM_GORON) && (player->stateFlags3 & 0x2000000)) {
+ if ((player->transformation == PLAYER_FORM_GORON) && (player->stateFlags3 & PLAYER_STATE3_2000000)) {
return false;
}
return true;
@@ -538,8 +538,8 @@ s32 func_80A1222C(EnGo* this, PlayState* play) {
if (((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == 3) &&
(play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY) && (this->unk_3EC == 0) &&
(this->actor.xzDistToPlayer < 400.0f)) ||
- (!(gSaveContext.save.weekEventReg[22] & 4) && (play->sceneId == SCENE_16GORON_HOUSE) &&
- (gSaveContext.sceneLayer == 0) && (this->unk_3EC == 0) && (play->csCtx.currentCsIndex == 1))) {
+ (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04) && (play->sceneId == SCENE_16GORON_HOUSE) &&
+ (gSaveContext.sceneLayer == 0) && (this->unk_3EC == 0) && (play->csCtx.scriptIndex == 1))) {
ret = true;
}
return ret;
@@ -637,7 +637,7 @@ void func_80A12660(EnGo* this, PlayState* play) {
void func_80A126BC(EnGo* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (!(player->stateFlags2 & 0x4000)) {
+ if (!(player->stateFlags2 & PLAYER_STATE2_4000)) {
if (this->unk_3C6 != 0) {
this->unk_3C6--;
}
@@ -710,12 +710,12 @@ s32 func_80A12868(EnGo* this, PlayState* play) {
}
s32 func_80A12954(EnGo* this, PlayState* play) {
- if ((ENGO_GET_F(&this->actor) == ENGO_F_4) && (play->csCtx.state != 0) && (this->actor.draw != NULL) &&
+ 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) &&
- (play->csCtx.currentCsIndex == 0)) {
+ (play->csCtx.scriptIndex == 0)) {
if (this->unk_3F0 == 0) {
this->actor.flags &= ~ACTOR_FLAG_1;
- this->unk_394 = 255;
+ this->cueId = 255;
this->unk_3F0 = 1;
this->unk_18C = this->actionFunc;
}
@@ -723,7 +723,7 @@ s32 func_80A12954(EnGo* this, PlayState* play) {
this->actionFunc = func_80A14FC8;
} else if (this->unk_3F0 != 0) {
this->actor.flags |= ACTOR_FLAG_1;
- this->unk_394 = 255;
+ this->cueId = 255;
this->unk_3F0 = 0;
SubS_UpdateFlags(&this->unk_390, 3, 7);
this->actionFunc = this->unk_18C;
@@ -756,22 +756,22 @@ s32 func_80A12A64(EnGo* this, PlayState* play) {
}
s32 func_80A12B78(EnGo* this, PlayState* play) {
- if (play->csCtx.state == 0) {
+ if (play->csCtx.state == CS_STATE_IDLE) {
if (this->unk_3DC == 4) {
if (Animation_OnFrame(&this->skelAnime, 2.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_CIRCLE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_CIRCLE);
}
if (Animation_OnFrame(&this->skelAnime, 22.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_SIT_IMT);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_SIT_IMT);
}
} else if ((this->unk_3DC == 2) || (this->unk_3DC == 3)) {
if (Animation_OnFrame(&this->skelAnime, 2.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_CIRCLE_OFF);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_CIRCLE_OFF);
}
if (Animation_OnFrame(&this->skelAnime, 24.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_STAND_IMT);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_STAND_IMT);
}
}
}
@@ -830,7 +830,7 @@ s32 func_80A12E80(EnGo* this, PlayState* play) {
return false;
}
- if (player->stateFlags1 & 0x40) {
+ if (player->stateFlags1 & PLAYER_STATE1_40) {
if (this->unk_392 != temp) {
switch (temp) {
case 0xE1A:
@@ -945,7 +945,7 @@ void func_80A132C8(EnGo* this, PlayState* play) {
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) ||
- (gSaveContext.save.weekEventReg[21] & 4) || (gSaveContext.save.weekEventReg[21] & 8)) {
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_21_04) || CHECK_WEEKEVENTREG(WEEKEVENTREG_21_08)) {
SubS_UpdateFlags(&this->unk_390, 3, 7);
} else {
SubS_UpdateFlags(&this->unk_390, 4, 7);
@@ -953,7 +953,7 @@ void func_80A132C8(EnGo* this, PlayState* play) {
}
void func_80A133A8(EnGo* this, PlayState* play) {
- if (gSaveContext.save.weekEventReg[21] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_21_08)) {
SubS_UpdateFlags(&this->unk_390, 3, 7);
} else {
SubS_UpdateFlags(&this->unk_390, 4, 7);
@@ -988,21 +988,21 @@ Actor* func_80A13400(EnGo* this, PlayState* play) {
}
void func_80A134B0(EnGo* this, PlayState* play, s32 arg2) {
- if ((gSaveContext.save.weekEventReg[18] & 0x80) || (play->actorCtx.flags & ACTORCTX_FLAG_0) || arg2) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_18_80) || (play->actorCtx.flags & ACTORCTX_FLAG_0) || arg2) {
this->colliderSphere.dim.modelSphere.radius = 300;
} else {
this->colliderSphere.dim.modelSphere.radius = 380;
}
}
-s32 func_80A134F4(EnGo* this, s16 arg1) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- } else if (ActorCutscene_GetCanPlayNext(arg1)) {
- ActorCutscene_StartAndSetUnkLinkFields(arg1, &this->actor);
+s32 func_80A134F4(EnGo* this, s16 csId) {
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ } else if (CutsceneManager_IsNext(csId)) {
+ CutsceneManager_StartWithPlayerCs(csId, &this->actor);
return true;
}
- ActorCutscene_SetIntentToPlay(arg1);
+ CutsceneManager_Queue(csId);
return false;
}
@@ -1012,7 +1012,7 @@ s32 func_80A13564(EnGo* this, f32 arg1, f32 arg2, s32 arg3) {
f32 temp_f14 = this->actor.velocity.y + this->actor.gravity;
s32 ret;
- if (this->actor.bgCheckFlags & 2) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
ret = true;
} else {
if (temp_f14 > 0.0f) {
@@ -1112,8 +1112,8 @@ s32 func_80A13B1C(EnGo* this, PlayState* play) {
switch (this->unk_3C0) {
case 0:
- this->unk_3B8 = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene);
- if (func_80A134F4(this, this->unk_3B8)) {
+ this->csId = CutsceneManager_GetAdditionalCsId(this->actor.csId);
+ if (func_80A134F4(this, this->csId)) {
this->unk_3C4 = 1;
this->unk_3C0 = 1;
} else {
@@ -1121,26 +1121,26 @@ s32 func_80A13B1C(EnGo* this, PlayState* play) {
}
case 1:
- if (ActorCutscene_GetCurrentIndex() != this->unk_3B8) {
- this->unk_3B8 = ActorCutscene_GetAdditionalCutscene(this->unk_3B8);
+ if (CutsceneManager_GetCurrentCsId() != this->csId) {
+ this->csId = CutsceneManager_GetAdditionalCsId(this->csId);
this->unk_3C0 = 2;
} else {
break;
}
case 2:
- if (func_80A134F4(this, this->unk_3B8)) {
+ if (func_80A134F4(this, this->csId)) {
this->unk_3C0 = 3;
} else {
break;
}
case 3:
- if (ActorCutscene_GetCanPlayNext(0x7C)) {
- ActorCutscene_StartAndSetUnkLinkFields(0x7C, NULL);
+ if (CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) {
+ CutsceneManager_StartWithPlayerCs(CS_ID_GLOBAL_TALK, NULL);
this->unk_3C0 = 4;
- } else if (ActorCutscene_GetCurrentIndex() == this->unk_3B8) {
- ActorCutscene_SetIntentToPlay(0x7C);
+ } else if (CutsceneManager_GetCurrentCsId() == this->csId) {
+ CutsceneManager_Queue(CS_ID_GLOBAL_TALK);
}
}
@@ -1165,7 +1165,7 @@ s32 func_80A13B1C(EnGo* this, PlayState* play) {
case 3:
this->unk_3C2++;
if (this->unk_3C2 >= 10) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_JUMP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_JUMP);
this->actor.velocity.y = 10.0f;
this->actor.gravity = -1.0f;
this->unk_3C4++;
@@ -1174,11 +1174,11 @@ s32 func_80A13B1C(EnGo* this, PlayState* play) {
case 4:
if (func_80A13564(this, 10.0f, 0.004f, 6)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_LAND_BIG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_LAND_BIG);
func_80A13728(this, play);
this->unk_3C4++;
this->unk_3C2 = 0;
- gSaveContext.save.weekEventReg[88] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_88_40);
}
break;
@@ -1198,19 +1198,19 @@ s32 func_80A13B1C(EnGo* this, PlayState* play) {
if (this->unk_3C0 >= 65) {
switch (player->transformation) {
case PLAYER_FORM_HUMAN:
- gSaveContext.save.weekEventReg[88] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_88_80);
break;
case PLAYER_FORM_GORON:
- gSaveContext.save.weekEventReg[89] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_89_04);
break;
case PLAYER_FORM_ZORA:
- gSaveContext.save.weekEventReg[89] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_89_02);
break;
case PLAYER_FORM_DEKU:
- gSaveContext.save.weekEventReg[89] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_89_01);
break;
}
ret = true;
@@ -1230,8 +1230,8 @@ s32 func_80A13E80(EnGo* this, PlayState* play) {
switch (this->unk_3C0) {
case 0:
- this->unk_3B8 = this->actor.cutscene;
- if (func_80A134F4(this, this->unk_3B8)) {
+ this->csId = this->actor.csId;
+ if (func_80A134F4(this, this->csId)) {
this->unk_3C0++;
}
break;
@@ -1242,7 +1242,7 @@ s32 func_80A13E80(EnGo* this, PlayState* play) {
case 2:
if (Animation_OnFrame(&this->skelAnime, 16.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_GORON_HAND_HIT);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_GORON_HAND_HIT);
}
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
@@ -1258,7 +1258,7 @@ s32 func_80A13E80(EnGo* this, PlayState* play) {
case 3:
if (this->unk_3C2 >= 60) {
- ActorCutscene_Stop(this->unk_3B8);
+ CutsceneManager_Stop(this->csId);
this->unk_3C2 = 0;
this->unk_3C0 = 0;
ret = true;
@@ -1376,11 +1376,11 @@ void func_80A143A8(EnGo* this, PlayState* play) {
void func_80A14430(EnGo* this, PlayState* play) {
if (((gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 0)) ||
(gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 2))) &&
- (gSaveContext.save.weekEventReg[33] & 0x80)) {
+ (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE))) {
func_80A14018(this, play);
this->actionFunc = func_80A149B0;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -1390,7 +1390,7 @@ void func_80A1449C(EnGo* this, PlayState* play) {
func_80A14104(this, play);
this->actionFunc = func_80A149B0;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -1413,8 +1413,8 @@ void func_80A144F4(EnGo* this, PlayState* play) {
void func_80A145AC(EnGo* this, PlayState* play) {
if ((ENGO_GET_70(&this->actor) == ENGO_70_1) &&
(((play->sceneId == SCENE_10YUKIYAMANOMURA2) && (gSaveContext.sceneLayer == 1) &&
- (play->csCtx.currentCsIndex == 0)) ||
- !(gSaveContext.save.weekEventReg[21] & 8))) {
+ (play->csCtx.scriptIndex == 0)) ||
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_21_08))) {
this->actor.child = func_80A13400(this, play);
this->actor.child->child = &this->actor;
func_80A141D4(this, play);
@@ -1426,7 +1426,7 @@ void func_80A145AC(EnGo* this, PlayState* play) {
}
void func_80A14668(EnGo* this, PlayState* play) {
- if (!(gSaveContext.save.weekEventReg[22] & 4)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
func_80A14324(this, play);
this->actionFunc = func_80A149B0;
} else {
@@ -1505,7 +1505,7 @@ void func_80A14798(EnGo* this, PlayState* play) {
break;
default:
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
break;
}
}
@@ -1515,7 +1515,7 @@ void func_80A149B0(EnGo* this, PlayState* play) {
s16 sp26 = this->actor.world.rot.y;
if ((ENGO_GET_F(&this->actor) == ENGO_F_2) && (gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 1))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_GORON_CHEER - SFX_FLAG);
+ 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);
@@ -1571,7 +1571,7 @@ void func_80A14B30(EnGo* this, PlayState* play) {
this->unk_390 &= ~0x200;
this->unk_390 |= 0x8000;
this->actor.shape.yOffset = 0.0f;
- } else if ((this->unk_3EC != 0) && (gSaveContext.save.weekEventReg[22] & 4)) {
+ } 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;
@@ -1582,7 +1582,7 @@ void func_80A14B30(EnGo* this, PlayState* play) {
} else {
sfxId = NA_SE_EN_GOLON_SNORE2;
}
- Actor_PlaySfxAtPos(&this->actor, sfxId);
+ Actor_PlaySfx(&this->actor, sfxId);
}
this->unk_3AE += 0x400;
this->actor.shape.yOffset = (this->actor.scale.y / this->unk_3A4) * 14.0f;
@@ -1611,7 +1611,7 @@ void func_80A14E14(EnGo* this, PlayState* play) {
}
void func_80A14E74(EnGo* this, PlayState* play) {
- if (func_80A134F4(this, this->actor.cutscene)) {
+ if (func_80A134F4(this, this->actor.csId)) {
this->actionFunc = func_80A14EB0;
}
}
@@ -1620,12 +1620,12 @@ void func_80A14EB0(EnGo* this, PlayState* play) {
EnGo* sp24 = (EnGo*)this->actor.child;
if ((s32)(this->unk_39C * 3.0f) != 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ICE_MELT_LEVEL - SFX_FLAG);
+ 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 {
- ActorCutscene_Stop(this->actor.cutscene);
+ 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);
@@ -1640,35 +1640,35 @@ void func_80A14FC8(EnGo* this, PlayState* play) {
s32 sp38[] = {
0, 2, 6, 20, 18, 5, 5, 15,
};
- u16 actorActionCmd = 0;
- s32 sp30;
- s32 actionIndex;
+ u16 cueType = 0;
+ s32 cueId;
+ s32 cueChannel;
switch (ENGO_GET_70(&this->actor)) {
case ENGO_70_0:
- actorActionCmd = 128;
+ cueType = CS_CMD_ACTOR_CUE_128;
break;
case ENGO_70_1:
- actorActionCmd = 129;
+ cueType = CS_CMD_ACTOR_CUE_129;
break;
}
- if ((actorActionCmd == 128) || (actorActionCmd == 129)) {
- if (Cutscene_CheckActorAction(play, actorActionCmd)) {
- actionIndex = Cutscene_GetActorActionIndex(play, actorActionCmd);
- sp30 = play->csCtx.actorActions[actionIndex]->action;
+ if ((cueType == CS_CMD_ACTOR_CUE_128) || (cueType == CS_CMD_ACTOR_CUE_129)) {
+ if (Cutscene_IsCueInChannel(play, cueType)) {
+ cueChannel = Cutscene_GetCueChannel(play, cueType);
+ cueId = play->csCtx.actorCues[cueChannel]->id;
- if (this->unk_394 != (u8)sp30) {
- this->unk_394 = sp30;
- func_80A12C48(this, play, sp38[sp30]);
+ 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;
- switch (sp30) {
+ switch (cueId) {
case 1:
this->unk_390 |= 0x80;
this->skelAnime.curFrame = this->skelAnime.endFrame;
@@ -1681,7 +1681,7 @@ void func_80A14FC8(EnGo* this, PlayState* play) {
}
}
- switch (this->unk_394) {
+ switch (this->cueId) {
case 3:
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) && (this->unk_3DC == 20)) {
func_80A12C48(this, play, 21);
@@ -1696,7 +1696,7 @@ void func_80A14FC8(EnGo* this, PlayState* play) {
case 6:
if ((s32)(this->unk_39C * 3.0f) != 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ICE_MELT_LEVEL - SFX_FLAG);
+ 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);
@@ -1706,53 +1706,53 @@ void func_80A14FC8(EnGo* this, PlayState* play) {
break;
}
- if (actorActionCmd == 128) {
- switch (play->csCtx.frames) {
+ if (cueType == 128) {
+ switch (play->csCtx.curFrame) {
case 55:
case 100:
case 130:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_COLD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_COLD);
break;
case 185:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_WAKE_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_WAKE_UP);
break;
case 250:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_EYE_BIG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_EYE_BIG);
break;
case 465:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_IWAIGORON_SOLO);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_IWAIGORON_SOLO);
break;
case 490:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_VOICE_EATFULL);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_VOICE_EATFULL);
break;
}
- } else if (actorActionCmd == 129) {
- switch (play->csCtx.frames) {
+ } else if (cueType == 129) {
+ switch (play->csCtx.curFrame) {
case 360:
case 390:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_COLD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_COLD);
break;
case 430:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_WAKE_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_WAKE_UP);
break;
case 450:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_EYE_BIG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_EYE_BIG);
break;
case 480:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_VOICE_EATFULL);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_VOICE_EATFULL);
break;
}
}
SubS_FillLimbRotTables(play, this->unk_3CE, this->unk_3C8, ARRAY_COUNT(this->unk_3CE));
- Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
}
}
}
@@ -1763,16 +1763,16 @@ void func_80A153FC(EnGo* this, PlayState* play) {
Vec3f sp44;
if ((this->unk_390 & 0x1000) && (this->actor.colChkInfo.damageEffect == 0xF)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SNOWBALL_BROKEN);
+ 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);
this->actor.shape.rot.x = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_COLD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_COLD);
if (gSaveContext.save.day == 3) {
func_80A141D4(this, play);
@@ -1783,7 +1783,7 @@ void func_80A153FC(EnGo* this, PlayState* play) {
}
} else if (this->unk_284 != NULL) {
if (this->unk_390 & 0x800) {
- func_800B8E58(GET_PLAYER(play), NA_SE_PL_BODY_HIT);
+ Player_PlaySfx(GET_PLAYER(play), NA_SE_PL_BODY_HIT);
func_800B8D50(play, &this->actor, 2.0f, this->actor.yawTowardsPlayer, 0.0f, 0);
}
@@ -1801,22 +1801,22 @@ void func_80A153FC(EnGo* this, PlayState* play) {
Math_ApproachS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&sp50, &sp44), 4, 0x38E);
this->actor.shape.rot.y = this->actor.world.rot.y;
- if (this->actor.bgCheckFlags & 1) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BIGBALL_ROLL - SFX_FLAG);
+ 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,
this->actor.shape.rot.y, this->actor.floorPoly, this->actor.floorBgId);
} else {
func_800AEF44(Effect_GetByIndex(this->unk_3E8));
}
- this->actor.speedXZ = 4.0f;
- this->actor.shape.rot.x += (s16)(this->actor.speedXZ * 546.0f);
+ this->actor.speed = 4.0f;
+ this->actor.shape.rot.x += (s16)(this->actor.speed * 546.0f);
Actor_MoveWithGravity(&this->actor);
}
}
s32* func_80A15684(EnGo* this, PlayState* play) {
- static s32 D_80A16704[] = {
+ static s32* D_80A16704[] = {
D_80A16100,
D_80A16164,
};
@@ -1929,15 +1929,15 @@ void EnGo_Update(Actor* thisx, PlayState* play) {
} else {
phi_f0 = this->colliderCylinder.dim.radius + 40;
}
- func_8013C964(&this->actor, play, phi_f0, 20.0f, PLAYER_AP_NONE, this->unk_390 & 7);
+ 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_AP_NONE, this->unk_390 & 7);
+ func_8013C964(&this->actor, play, phi_f0, 20.0f, PLAYER_IA_NONE, this->unk_390 & 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)) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
}
func_80A122EC(this);
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 0278a70df..9d12dfdce 100644
--- a/src/overlays/actors/ovl_En_Go/z_en_go.h
+++ b/src/overlays/actors/ovl_En_Go/z_en_go.h
@@ -67,7 +67,7 @@ typedef struct EnGo {
/* 0x38C */ Actor* unk_38C;
/* 0x390 */ u16 unk_390;
/* 0x392 */ u16 unk_392;
- /* 0x394 */ u8 unk_394;
+ /* 0x394 */ u8 cueId;
/* 0x398 */ f32 unk_398;
/* 0x39C */ f32 unk_39C;
/* 0x3A0 */ f32 unk_3A0;
@@ -79,7 +79,7 @@ typedef struct EnGo {
/* 0x3B2 */ s16 unk_3B2;
/* 0x3B4 */ s16 unk_3B4;
/* 0x3B6 */ s16 unk_3B6;
- /* 0x3B8 */ s16 unk_3B8;
+ /* 0x3B8 */ s16 csId;
/* 0x3BA */ s16 unk_3BA;
/* 0x3BC */ s16 unk_3BC;
/* 0x3BE */ s16 unk_3BE;
@@ -101,6 +101,4 @@ typedef struct EnGo {
/* 0x3F8 */ EnGoStruct unk_3F8[32];
} EnGo; // size = 0xB78
-extern const ActorInit En_Go_InitVars;
-
#endif // Z_EN_GO_H
diff --git a/src/overlays/actors/ovl_En_Goroiwa/overlay.cfg b/src/overlays/actors/ovl_En_Goroiwa/overlay.cfg
deleted file mode 100644
index 0f4bb5a32..000000000
--- a/src/overlays/actors/ovl_En_Goroiwa/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Goroiwa
-z_en_goroiwa.c
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 1f173114d..b07d1f2c7 100644
--- a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c
+++ b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c
@@ -33,7 +33,7 @@ void func_80941FA4(EnGoroiwa* this, PlayState* play);
void func_80942084(EnGoroiwa* this);
void func_809420F0(EnGoroiwa* this, PlayState* play);
-const ActorInit En_Goroiwa_InitVars = {
+ActorInit En_Goroiwa_InitVars = {
ACTOR_EN_GOROIWA,
ACTORCAT_PROP,
FLAGS,
@@ -358,7 +358,7 @@ s32 func_8093F34C(EnGoroiwa* this) {
f32 x;
f32 z;
- Math_StepToF(&this->actor.speedXZ, D_80942DFC[this->unk_1E4], 0.3f);
+ Math_StepToF(&this->actor.speed, D_80942DFC[this->unk_1E4], 0.3f);
Actor_UpdateVelocityWithGravity(&this->actor);
temp_v0 = &this->unk_1D0[this->unk_1D8];
this->actor.velocity.y *= 0.97f;
@@ -368,7 +368,7 @@ s32 func_8093F34C(EnGoroiwa* this) {
tempX = x - this->actor.world.pos.x;
tempZ = z - this->actor.world.pos.z;
- if (SQ(this->actor.speedXZ + 1.0f) < (SQ(tempX) + SQ(tempZ))) {
+ if (SQ(this->actor.speed + 1.0f) < (SQ(tempX) + SQ(tempZ))) {
this->actor.world.pos.x += this->actor.velocity.x;
this->actor.world.pos.y += this->actor.velocity.y;
this->actor.world.pos.z += this->actor.velocity.z;
@@ -393,12 +393,12 @@ s32 func_8093F498(EnGoroiwa* this) {
sp2C.y = temp_v0->y;
sp2C.z = temp_v0->z;
- Math_StepToF(&this->actor.speedXZ, D_80942DFC[this->unk_1E4], 0.3f);
+ Math_StepToF(&this->actor.speed, D_80942DFC[this->unk_1E4], 0.3f);
Math_Vec3f_Diff(&sp2C, &this->actor.world.pos, &this->actor.velocity);
temp_f0 = Math3D_Vec3fMagnitude(&this->actor.velocity);
- if ((this->actor.speedXZ + 1.0f) < temp_f0) {
- Math_Vec3f_Scale(&this->actor.velocity, this->actor.speedXZ / temp_f0);
+ if ((this->actor.speed + 1.0f) < temp_f0) {
+ Math_Vec3f_Scale(&this->actor.velocity, this->actor.speed / temp_f0);
this->actor.world.pos.x += this->actor.velocity.x;
this->actor.world.pos.y += this->actor.velocity.y;
this->actor.world.pos.z += this->actor.velocity.z;
@@ -483,7 +483,7 @@ s32 func_8093F6F8(EnGoroiwa* this, PlayState* play) {
func_8093EF54(play, &sp48, &D_80942E30[ENGOROIWA_GET_C000(&this->actor)],
&D_80942E3C[ENGOROIWA_GET_C000(&this->actor)], this->actor.scale.x);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BIGBALL_BOUND);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BIGBALL_BOUND);
}
}
}
@@ -894,7 +894,7 @@ void func_80940E38(EnGoroiwa* this, PlayState* play) {
if (this->actor.flags & ACTOR_FLAG_40) {
if (this->actor.xzDistToPlayer < 1000.0f) {
- sp5C = (1000.0f - this->actor.xzDistToPlayer) * 0.0012f * (this->actor.speedXZ * 0.1f);
+ sp5C = (1000.0f - this->actor.xzDistToPlayer) * 0.0012f * (this->actor.speed * 0.1f);
if (Rand_ZeroOne() < sp5C) {
this->unk_1CE += 20000;
sp46 = (s32)Rand_ZeroFloat(20000.0f) + this->unk_1CE;
@@ -965,12 +965,12 @@ void EnGoroiwa_Init(Actor* thisx, PlayState* play) {
func_8093E9B0(this, play);
if (sp28 == 0x7F8) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
if (sp2C->count < 2) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -1049,7 +1049,7 @@ s32 func_8094156C(EnGoroiwa* this, PlayState* play) {
temp2 = Math_SinS(ptr->unk_1E);
temp3 = Math_SinS(this->actor.world.rot.y);
- ptr->unk_0C = ((1.0f / D_80942DFC[this->unk_1E4]) * (temp3 * 14.0f * this->actor.speedXZ)) +
+ ptr->unk_0C = ((1.0f / D_80942DFC[this->unk_1E4]) * (temp3 * 14.0f * this->actor.speed)) +
(temp2 * (temp + 5.0f));
ptr->unk_10 = (Rand_ZeroOne() * 11.0f) + 20.0f;
@@ -1057,7 +1057,7 @@ s32 func_8094156C(EnGoroiwa* this, PlayState* play) {
temp = Rand_ZeroOne();
temp2 = Math_CosS(ptr->unk_1E);
temp3 = Math_CosS(this->actor.world.rot.y);
- ptr->unk_14 = ((1.0f / D_80942DFC[this->unk_1E4]) * ((temp3 * 14.0f) * this->actor.speedXZ)) +
+ ptr->unk_14 = ((1.0f / D_80942DFC[this->unk_1E4]) * ((temp3 * 14.0f) * this->actor.speed)) +
(temp2 * (temp + 5.0f));
ptr->unk_1C = 0;
@@ -1134,7 +1134,7 @@ void func_80941A10(EnGoroiwa* this, PlayState* play) {
s32 pad2;
if (!func_8094156C(this, play)) {
- if ((this->collider.base.atFlags & AT_HIT) && !(player->stateFlags3 & 0x80000)) {
+ if ((this->collider.base.atFlags & AT_HIT) && !(player->stateFlags3 & PLAYER_STATE3_80000)) {
s32 sp34 = this->actor.home.rot.z & 3;
if (sp34 == 2) {
@@ -1168,7 +1168,7 @@ void func_80941A10(EnGoroiwa* this, PlayState* play) {
func_80941DB4(this);
}
- func_800B8E58(player, NA_SE_PL_BODY_HIT);
+ Player_PlaySfx(player, NA_SE_PL_BODY_HIT);
if ((sp34 == 1) || (sp34 == 2)) {
this->unk_1CC = 50;
@@ -1207,8 +1207,8 @@ void func_80941A10(EnGoroiwa* this, PlayState* play) {
}
}
- if (this->actor.bgCheckFlags & 1) {
- Actor_PlaySfxAtPos(&this->actor, D_80942E9C[this->unk_1E4][this->actor.home.rot.x & 1]);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ Actor_PlaySfx(&this->actor, D_80942E9C[this->unk_1E4][this->actor.home.rot.x & 1]);
}
}
}
@@ -1218,14 +1218,14 @@ void func_80941DB4(EnGoroiwa* this) {
func_8093EAB0(this, 6);
this->actor.gravity = -0.86f;
this->actor.terminalVelocity = -15.0f;
- this->actor.speedXZ *= 0.15f;
+ this->actor.speed *= 0.15f;
this->actor.velocity.y = 5.0f;
this->unk_1C4 = 1.0f;
}
void func_80941E28(EnGoroiwa* this, PlayState* play) {
func_8093F34C(this);
- if ((this->actor.bgCheckFlags & 1) && (this->actor.velocity.y < 0.0f)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.velocity.y < 0.0f)) {
if ((this->unk_1E5 & 8) && ((this->actor.home.rot.z & 3) == 1)) {
func_8093EDB0(this);
}
@@ -1237,7 +1237,7 @@ void func_80941EB4(EnGoroiwa* this) {
static s16 D_80942EAC[] = { 20, 6, 20 };
this->actionFunc = func_80941F10;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
func_8093EAB0(this, 6);
this->unk_1C8 = D_80942EAC[this->actor.home.rot.z & 3];
this->unk_1C4 = 0.0f;
@@ -1257,23 +1257,23 @@ void func_80941F54(EnGoroiwa* this) {
this->actionFunc = func_80941FA4;
func_8093EAB0(this, 7);
this->unk_1C4 = 0.0f;
- this->actor.velocity.y = fabsf(this->actor.speedXZ) * 0.1f;
+ this->actor.velocity.y = fabsf(this->actor.speed) * 0.1f;
}
void func_80941FA4(EnGoroiwa* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (func_8094156C(this, play) == 0) {
- if ((this->collider.base.atFlags & AT_HIT) && !(player->stateFlags3 & 0x80000)) {
+ if ((this->collider.base.atFlags & AT_HIT) && !(player->stateFlags3 & PLAYER_STATE3_80000)) {
func_800B8D50(play, &this->actor, 2.0f, this->actor.yawTowardsPlayer, 0.0f, 0);
- func_800B8E58(player, NA_SE_PL_BODY_HIT);
+ Player_PlaySfx(player, NA_SE_PL_BODY_HIT);
if (((this->actor.home.rot.z & 3) == 1) || ((this->actor.home.rot.z & 3) == 2)) {
this->unk_1CC = 50;
}
} else if (func_8093F5EC(this)) {
func_8093FC00(this);
func_809419D0(this);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
}
}
@@ -1283,7 +1283,7 @@ void func_80942084(EnGoroiwa* this) {
func_8093EAB0(this, 7);
this->unk_1C4 = 0.3f;
this->unk_1CA = 0;
- this->actor.velocity.y = fabsf(this->actor.speedXZ) * -0.3f;
+ this->actor.velocity.y = fabsf(this->actor.speed) * -0.3f;
this->unk_1E5 |= 0x10;
this->unk_1E5 &= ~0x20;
}
@@ -1292,9 +1292,9 @@ void func_809420F0(EnGoroiwa* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (func_8094156C(this, play) == 0) {
- if ((this->collider.base.atFlags & AT_HIT) && !(player->stateFlags3 & 0x80000)) {
+ if ((this->collider.base.atFlags & AT_HIT) && !(player->stateFlags3 & PLAYER_STATE3_80000)) {
func_800B8D50(play, &this->actor, 2.0f, this->actor.yawTowardsPlayer, 0.0f, 0);
- func_800B8E58(player, NA_SE_PL_BODY_HIT);
+ Player_PlaySfx(player, NA_SE_PL_BODY_HIT);
if (((this->actor.home.rot.z & 3) == 1) || ((this->actor.home.rot.z & 3) == 2)) {
this->unk_1CC = 50;
}
@@ -1302,7 +1302,7 @@ void func_809420F0(EnGoroiwa* this, PlayState* play) {
func_8093FC00(this);
func_809419D0(this);
this->unk_1E5 &= ~0x10;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
}
}
@@ -1418,7 +1418,7 @@ void func_80942604(EnGoroiwa* this, PlayState* play) {
if (this->unk_1C8 > 0) {
this->unk_1C8--;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -1431,16 +1431,17 @@ void EnGoroiwa_Update(Actor* thisx, PlayState* play) {
Vec3f sp50;
f32 sp4C;
s32 sp48 = true;
- u32 temp_v0_2;
+ FloorType floorType;
CollisionPoly* tmp;
- if (!(player->stateFlags1 & (0x30000000 | 0x80 | 0x40))) {
+ if (!(player->stateFlags1 &
+ (PLAYER_STATE1_40 | PLAYER_STATE1_80 | PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000))) {
if (this->unk_1CC > 0) {
this->unk_1CC--;
}
- if ((ENGOROIWA_GET_3000(&this->actor) == ENGOROIWA_3000_2) && (this->actor.bgCheckFlags & 1) &&
- (this->actionFunc == func_80941A10) && (this->actor.speedXZ > 2.0f)) {
+ if ((ENGOROIWA_GET_3000(&this->actor) == ENGOROIWA_3000_2) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) &&
+ (this->actionFunc == func_80941A10) && (this->actor.speed > 2.0f)) {
Math_StepToF(&this->actor.scale.x, 0.16f,
(this->actor.xzDistToPlayer < 400.0f) ? this->unk_1E0 * 1.4f : this->unk_1E0);
@@ -1452,9 +1453,9 @@ void EnGoroiwa_Update(Actor* thisx, PlayState* play) {
if (this->actor.flags & ACTOR_FLAG_40) {
tmp = this->actor.floorPoly;
if (tmp != NULL) {
- temp_v0_2 = func_800C99D4(&play->colCtx, tmp, this->actor.floorBgId);
+ floorType = SurfaceType_GetFloorType(&play->colCtx, tmp, this->actor.floorBgId);
- if ((temp_v0_2 == 14) || (temp_v0_2 == 15)) {
+ if ((floorType == FLOOR_TYPE_14) || (floorType == FLOOR_TYPE_15)) {
if (!(this->unk_1E5 & 0x40)) {
sp50.x = this->actor.world.pos.x;
sp50.y = this->actor.floorHeight;
@@ -1484,7 +1485,8 @@ void EnGoroiwa_Update(Actor* thisx, PlayState* play) {
switch (ENGOROIWA_GET_400(&this->actor)) {
case ENGOROIWA_400_1:
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 0x1C);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10);
break;
case ENGOROIWA_400_0:
@@ -1496,12 +1498,12 @@ void EnGoroiwa_Update(Actor* thisx, PlayState* play) {
if (this->actor.floorHeight > BGCHECK_Y_MIN) {
this->actor.floorBgId = bgId;
if (this->actor.world.pos.y <= (this->actor.floorHeight + 2.0f)) {
- this->actor.bgCheckFlags |= 1;
+ this->actor.bgCheckFlags |= BGCHECKFLAG_GROUND;
} else {
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
}
} else {
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
this->actor.floorBgId = 50;
}
break;
@@ -1515,7 +1517,7 @@ void EnGoroiwa_Update(Actor* thisx, PlayState* play) {
func_8093E938(this);
if ((this->unk_1E5 & 1) && (this->unk_1CC <= 0) &&
- (!(player->stateFlags3 & 0x2000000) || (player->transformation != PLAYER_FORM_GORON) ||
+ (!(player->stateFlags3 & PLAYER_STATE3_2000000) || (player->transformation != PLAYER_FORM_GORON) ||
((params != ENGOROIWA_C000_1) && (params != ENGOROIWA_C000_2)))) {
CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
} else {
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 fc4f66f51..e672355e5 100644
--- a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.h
+++ b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.h
@@ -81,6 +81,4 @@ typedef struct EnGoroiwa {
/* 0x248 */ s32 unk_248;
} EnGoroiwa; // size = 0x24C
-extern const ActorInit En_Goroiwa_InitVars;
-
#endif // Z_EN_GOROIWA_H
diff --git a/src/overlays/actors/ovl_En_Grasshopper/overlay.cfg b/src/overlays/actors/ovl_En_Grasshopper/overlay.cfg
deleted file mode 100644
index a5fa8bb0a..000000000
--- a/src/overlays/actors/ovl_En_Grasshopper/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Grasshopper
-z_en_grasshopper.c
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 aa2ce4915..2bd6fec69 100644
--- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c
+++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c
@@ -137,7 +137,7 @@ static DamageTable sDamageTable = {
/* Powder Keg */ DMG_ENTRY(1, EN_GRASSHOPPER_DMGEFF_HOOK),
};
-const ActorInit En_Grasshopper_InitVars = {
+ActorInit En_Grasshopper_InitVars = {
ACTOR_EN_GRASSHOPPER,
ACTORCAT_ENEMY,
FLAGS,
@@ -354,7 +354,7 @@ void EnGrasshopper_Fly(EnGrasshopper* this, PlayState* play) {
f32 targetSpeed;
Vec3f collisionCheckPos;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BATTA_FLY - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BATTA_FLY - SFX_FLAG);
diffX = this->flyingHomePos.x - this->actor.world.pos.x;
diffZ = this->flyingHomePos.z - this->actor.world.pos.z;
if ((this->type != EN_GRASSHOPPER_TYPE_WOODFALL_TEMPLE_FINAL_ROOM) &&
@@ -390,18 +390,18 @@ void EnGrasshopper_Fly(EnGrasshopper* this, PlayState* play) {
}
}
- if ((Player_GetMask(play) != PLAYER_MASK_STONE) && !(gSaveContext.eventInf[4] & 2) && !this->shouldTurn &&
+ if ((Player_GetMask(play) != PLAYER_MASK_STONE) && !CHECK_EVENTINF(EVENTINF_41) && !this->shouldTurn &&
(this->actor.xzDistToPlayer < 200.0f)) {
EnGrasshopper_SetupApproachPlayer(this, play);
} else {
Math_SmoothStepToS(&this->actor.world.rot.z, this->targetRot.z, 5, 0x3E8, 5);
this->targetRot.z *= 0.8f;
if (this->waitTimer != 0) {
- Math_ApproachZeroF(&this->actor.speedXZ, 0.2f, 0.5f);
+ Math_ApproachZeroF(&this->actor.speed, 0.2f, 0.5f);
} else {
this->targetRot.z = (this->actor.world.rot.y - this->targetRot.y) * 0.2f;
targetSpeed = (this->index * 0.1f) + 4.0f;
- Math_ApproachF(&this->actor.speedXZ, targetSpeed, 0.4f, 0.7f);
+ Math_ApproachF(&this->actor.speed, targetSpeed, 0.4f, 0.7f);
Math_ApproachF(&this->rotationalVelocity, 2000.0f, 1.0f, 50.0f);
Math_SmoothStepToS(&this->actor.world.rot.y, this->targetRot.y, 5, this->rotationalVelocity, 5);
if (this->timer == 0) {
@@ -430,7 +430,7 @@ void EnGrasshopper_RoamInCircles(EnGrasshopper* this, PlayState* play) {
Vec3f collisionCheckPos;
Player* player = GET_PLAYER(play);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BATTA_FLY - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BATTA_FLY - SFX_FLAG);
if (Player_GetMask(play) == PLAYER_MASK_STONE) {
EnGrasshopper_SetupFly(this);
} else {
@@ -450,7 +450,8 @@ void EnGrasshopper_RoamInCircles(EnGrasshopper* this, PlayState* play) {
collisionCheckPos.y = this->actor.world.pos.y;
collisionCheckPos.z = (Math_CosS(this->actor.shape.rot.y) * 100.0f) + this->actor.world.pos.z;
- if ((this->actor.bgCheckFlags & 8) || BgCheck_SphVsFirstPoly(&play->colCtx, &collisionCheckPos, 10.0f)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) ||
+ BgCheck_SphVsFirstPoly(&play->colCtx, &collisionCheckPos, 10.0f)) {
EnGrasshopper_SetupBank(this);
} else if (player->stateFlags1 & PLAYER_STATE1_8000000) {
this->collider.elements[0].info.toucherFlags |= (TOUCH_ON | TOUCH_SFX_WOOD);
@@ -464,7 +465,7 @@ void EnGrasshopper_RoamInCircles(EnGrasshopper* this, PlayState* play) {
rotationSpeed = this->index + 70;
targetSpeed = (this->index * 0.05f) + 4.0f;
this->targetRot.y = Math_Atan2S(diffX, diffZ);
- Math_ApproachF(&this->actor.speedXZ, targetSpeed, 0.4f, 0.8f);
+ Math_ApproachF(&this->actor.speed, targetSpeed, 0.4f, 0.8f);
Math_SmoothStepToS(&this->actor.world.rot.y, this->targetRot.y, rotationSpeed, 0xFA0, 0xA);
}
}
@@ -474,11 +475,11 @@ void EnGrasshopper_RoamInCircles(EnGrasshopper* this, PlayState* play) {
* Unused in the final game.
*/
void EnGrasshopper_SetupBank(EnGrasshopper* this) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BATTA_FLY - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BATTA_FLY - SFX_FLAG);
this->targetBankRot.y = this->actor.world.rot.y + 0x8000;
this->action = EN_GRASSHOPPER_ACTION_BANK;
this->bankState = EN_GRASSHOPPER_BANK_STATE_BANKING;
- this->actor.speedXZ = 2.0f;
+ this->actor.speed = 2.0f;
this->actionFunc = EnGrasshopper_Bank;
}
@@ -487,7 +488,7 @@ void EnGrasshopper_SetupBank(EnGrasshopper* this) {
* it flies forward for 100 frames.
*/
void EnGrasshopper_Bank(EnGrasshopper* this, PlayState* play) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BATTA_FLY - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BATTA_FLY - SFX_FLAG);
switch (this->bankState) {
case EN_GRASSHOPPER_BANK_STATE_BANKING:
Math_SmoothStepToS(&this->actor.world.rot.y, this->targetBankRot.y, 0x64, 0x3E8, 0x3E8);
@@ -529,9 +530,9 @@ void EnGrasshopper_SetupBounced(EnGrasshopper* this) {
void EnGrasshopper_Bounced(EnGrasshopper* this, PlayState* play) {
f32 targetSpeed;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BATTA_FLY - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BATTA_FLY - SFX_FLAG);
targetSpeed = (this->index * 0.05f) + 7.0f;
- Math_ApproachF(&this->actor.speedXZ, targetSpeed, 0.4f, 0.8f);
+ Math_ApproachF(&this->actor.speed, targetSpeed, 0.4f, 0.8f);
Math_SmoothStepToS(&this->actor.world.rot.z, this->targetRot.z, 5, 0x3E8, 5);
this->targetRot.z *= 0.8f;
Math_SmoothStepToS(&this->actor.world.rot.y, this->targetRot.y, 5, this->rotationalVelocity, 5);
@@ -564,7 +565,7 @@ void EnGrasshopper_ApproachPlayer(EnGrasshopper* this, PlayState* play) {
WaterBox* waterBox;
Vec3f splashPos;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BATTA_FLY - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BATTA_FLY - SFX_FLAG);
this->bobPhase += 0xAF0;
this->targetApproachPos.y = (Math_SinS(this->bobPhase) * 10.0f) + (player->actor.world.pos.y + 120.0f);
@@ -603,11 +604,11 @@ void EnGrasshopper_SetupAttack(EnGrasshopper* this) {
EnGrasshopper_ChangeAnim(this, EN_GRASSHOPPER_ANIM_ATTACK);
this->approachSpeed = 0.0f;
Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 0xA, 0xFA0, 0xA);
- this->actor.speedXZ = 3.0f;
+ this->actor.speed = 3.0f;
this->baseFlyHeight = this->actor.world.pos.y;
this->collider.elements[0].info.toucherFlags &= ~(TOUCH_ON | TOUCH_SFX_WOOD);
this->collider.elements[1].info.toucherFlags |= (TOUCH_ON | TOUCH_SFX_WOOD);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BATTA_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BATTA_ATTACK);
this->action = EN_GRASSHOPPER_ACTION_ATTACK;
this->actionFunc = EnGrasshopper_Attack;
}
@@ -675,7 +676,7 @@ void EnGrasshopper_SetupWaitAfterAttack(EnGrasshopper* this) {
Math_ApproachF(&this->actor.world.pos.y, this->targetPosY, 0.1f, 10.0f);
this->action = EN_GRASSHOPPER_ACTION_WAIT_AFTER_ATTACK;
this->waitTimer = 20;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->collider.elements[1].info.toucherFlags &= ~(TOUCH_ON | TOUCH_SFX_WOOD);
this->actionFunc = EnGrasshopper_WaitAfterAttack;
}
@@ -697,7 +698,7 @@ void EnGrasshopper_SetupDamaged(EnGrasshopper* this, PlayState* play) {
Vec3f damagedVelocity;
EnGrasshopper_ChangeAnim(this, EN_GRASSHOPPER_ANIM_DAMAGE);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.flags |= ACTOR_FLAG_1;
this->approachSpeed = 0.0f;
this->collider.elements[1].info.toucherFlags &= ~(TOUCH_ON | TOUCH_SFX_WOOD);
@@ -712,7 +713,7 @@ void EnGrasshopper_SetupDamaged(EnGrasshopper* this, PlayState* play) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
}
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
this->action = EN_GRASSHOPPER_ACTION_DAMAGED;
this->actionFunc = EnGrasshopper_Damaged;
}
@@ -726,8 +727,8 @@ void EnGrasshopper_Damaged(EnGrasshopper* this, PlayState* play) {
void EnGrasshopper_SetupDead(EnGrasshopper* this, PlayState* play) {
EnGrasshopper_ChangeAnim(this, EN_GRASSHOPPER_ANIM_DEAD);
- this->actor.flags |= ACTOR_FLAG_8000000;
- this->actor.speedXZ = 0.0f;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
+ this->actor.speed = 0.0f;
this->approachSpeed = 0.0f;
this->actor.velocity.y = 5.0f;
this->actor.gravity = -0.5f;
@@ -737,9 +738,9 @@ void EnGrasshopper_SetupDead(EnGrasshopper* this, PlayState* play) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
}
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 25);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 25);
Enemy_StartFinishingBlow(play, &this->actor);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BATTA_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BATTA_DEAD);
this->action = EN_GRASSHOPPER_ACTION_DEAD;
this->actionFunc = EnGrasshopper_Dead;
}
@@ -768,7 +769,7 @@ void EnGrasshopper_Dead(EnGrasshopper* this, PlayState* play) {
void EnGrasshopper_SetupFall(EnGrasshopper* this) {
EnGrasshopper_ChangeAnim(this, EN_GRASSHOPPER_ANIM_FALL);
this->action = EN_GRASSHOPPER_ACTION_FALL;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->approachSpeed = 0.0f;
this->actionFunc = EnGrasshopper_Fall;
}
@@ -782,8 +783,8 @@ void EnGrasshopper_Fall(EnGrasshopper* this, PlayState* play) {
s32 isUnderWater = false;
this->actor.shape.rot.y += 0x1388;
- if ((this->actor.floorHeight <= -32000.0f) || (this->actor.floorHeight >= 32000.0f)) {
- Actor_MarkForDeath(&this->actor);
+ if ((this->actor.floorHeight <= BGCHECK_Y_MIN) || (this->actor.floorHeight >= BGCHECK_Y_MAX)) {
+ Actor_Kill(&this->actor);
return;
}
@@ -840,7 +841,7 @@ void EnGrasshopper_Fall(EnGrasshopper* this, PlayState* play) {
SoundSource_PlaySfxEachFrameAtFixedWorldPos(play, &this->actor.world.pos, 10,
NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG);
Item_DropCollectibleRandom(play, NULL, &this->actor.world.pos, 0x60);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -874,7 +875,7 @@ void EnGrasshopper_UpdateDamage(EnGrasshopper* this, PlayState* play) {
return;
}
} else if (this->actor.colChkInfo.damageEffect == EN_GRASSHOPPER_DMGEFF_LIGHT_ORB) {
- Actor_SetColorFilter(&this->actor, 0x8000, 255, 0, 25);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_GRAY, 255, COLORFILTER_BUFFLAG_OPA, 25);
this->drawDmgEffTimer = 20;
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.focus.pos.x, this->actor.focus.pos.y,
@@ -887,7 +888,7 @@ void EnGrasshopper_UpdateDamage(EnGrasshopper* this, PlayState* play) {
if (attackDealsDamage) {
Actor_ApplyDamage(&this->actor);
if (this->actor.colChkInfo.health > 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BATTA_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BATTA_DAMAGE);
EnGrasshopper_SetupDamaged(this, play);
} else {
EnGrasshopper_SetupDead(this, play);
@@ -919,7 +920,9 @@ void EnGrasshopper_Update(Actor* thisx, PlayState* play) {
Math_ApproachZeroF(&this->damagedVelocity.y, 1.0f, 2.0f);
Math_ApproachZeroF(&this->damagedVelocity.z, 1.0f, 2.0f);
if ((this->action != EN_GRASSHOPPER_ACTION_FALL) && (this->type != EN_GRASSHOPPER_TYPE_WOODFALL)) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 60.0f, 60.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 60.0f, 60.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
}
this->actor.shape.rot.z = this->actor.world.rot.z;
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 d414e4100..8056253f6 100644
--- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h
+++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h
@@ -75,6 +75,4 @@ typedef struct EnGrasshopper {
/* 0x0570 */ EnGrasshopperEffect effects[EN_GRASSHOPPER_EFFECT_COUNT];
} EnGrasshopper; // size = 0x1870
-extern const ActorInit En_Grasshopper_InitVars;
-
#endif // Z_EN_GRASSHOPPER_H
diff --git a/src/overlays/actors/ovl_En_Gs/overlay.cfg b/src/overlays/actors/ovl_En_Gs/overlay.cfg
deleted file mode 100644
index 0fc22a856..000000000
--- a/src/overlays/actors/ovl_En_Gs/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Gs
-z_en_gs.c
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 3927305ad..2f4257347 100644
--- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c
+++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c
@@ -37,7 +37,7 @@ s32 func_809995A4(EnGs* this, PlayState* play);
void func_80999A8C(EnGs* this, PlayState* play);
void func_80999AC0(EnGs* this);
-const ActorInit En_Gs_InitVars = {
+ActorInit En_Gs_InitVars = {
ACTOR_EN_GS,
ACTORCAT_PROP,
FLAGS,
@@ -112,7 +112,7 @@ s8 func_80997A90(s16 arg0, s16 arg1) {
if ((arg0 == 0) || ((arg0 != 1) && (arg0 != 2) && (arg0 == 3))) {
phi_v1 = 0;
} else {
- phi_v1 = (gSaveContext.save.unk_EC4 >> (arg1 * 3)) & 7;
+ phi_v1 = (gSaveContext.save.saveInfo.unk_EA0 >> (arg1 * 3)) & 7;
}
return phi_v1;
}
@@ -156,7 +156,7 @@ void EnGs_Init(Actor* thisx, PlayState* play) {
this->unk_1F4 = this->unk_1FA;
Math_Vec3f_Copy(&this->unk_1B0[0], &gOneVec3f);
Math_Vec3f_Copy(&this->unk_1B0[1], &gOneVec3f);
- SubS_FillCutscenesList(&this->actor, this->unk_212, ARRAY_COUNT(this->unk_212));
+ SubS_FillCutscenesList(&this->actor, this->csIdList, ARRAY_COUNT(this->csIdList));
func_801A5080(0);
if (this->actor.params == ENGS_1) {
Actor_SetScale(&this->actor, 0.15f);
@@ -170,7 +170,7 @@ void EnGs_Destroy(Actor* thisx, PlayState* play) {
EnGs* this = THIS;
Collider_DestroyCylinder(play, &this->collider);
- func_80165690();
+ Play_DisableMotionBlur();
}
void func_80997D14(EnGs* this, PlayState* play) {
@@ -184,7 +184,7 @@ void func_80997D38(EnGs* this, PlayState* play) {
if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) {
if (this->actor.xzDistToPlayer <= D_8099A408[this->actor.params]) {
func_8013E8F8(&this->actor, play, D_8099A408[this->actor.params], D_8099A408[this->actor.params],
- PLAYER_AP_NONE, 0x2000, 0x2000);
+ PLAYER_IA_NONE, 0x2000, 0x2000);
}
}
@@ -249,7 +249,7 @@ void func_80997E4C(EnGs* this, PlayState* play) {
this->unk_210 = this->unk_195 + 0x20F7;
break;
}
- func_80151938(play, this->unk_210);
+ Message_ContinueTextbox(play, this->unk_210);
break;
default:
@@ -262,7 +262,8 @@ void func_80997E4C(EnGs* this, PlayState* play) {
}
void func_80997FF0(EnGs* this, PlayState* play) {
- if (SubS_StartActorCutscene(&this->actor, play->playerActorCsIds[0], -1, SUBS_CUTSCENE_NORMAL)) {
+ if (SubS_StartCutscene(&this->actor, play->playerCsIds[PLAYER_CS_ID_ITEM_OCARINA], CS_ID_NONE,
+ SUBS_CUTSCENE_NORMAL)) {
func_80998040(this, play);
}
}
@@ -281,7 +282,7 @@ void func_8099807C(EnGs* this, PlayState* play) {
if (!Flags_GetSwitch(play, this->unk_196)) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, this->actor.world.pos.x,
this->actor.world.pos.y + 40.0f, this->actor.world.pos.z, 0, 0, 0, 2);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BUTTERFRY_TO_FAIRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BUTTERFRY_TO_FAIRY);
Flags_SetSwitch(play, this->unk_196);
}
break;
@@ -290,7 +291,7 @@ void func_8099807C(EnGs* this, PlayState* play) {
if (!Flags_GetSwitch(play, this->unk_196)) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, this->actor.world.pos.x,
this->actor.world.pos.y + 40.0f, this->actor.world.pos.z, 0, 0, 0, 7);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BUTTERFRY_TO_FAIRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BUTTERFRY_TO_FAIRY);
Flags_SetSwitch(play, this->unk_196);
}
break;
@@ -338,8 +339,8 @@ void func_8099807C(EnGs* this, PlayState* play) {
}
void func_80998300(EnGs* this, PlayState* play) {
- if (this->actor.cutscene != -1) {
- ActorCutscene_Stop(play->playerActorCsIds[0]);
+ if (this->actor.csId != CS_ID_NONE) {
+ CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_ITEM_OCARINA]);
}
}
@@ -349,8 +350,8 @@ f32 func_80998334(EnGs* this, PlayState* play, f32* arg2, f32* arg3, s16* arg4,
if (arg9 == 0) {
sp2C = Math_SmoothStepToF(arg2, *arg3, arg5, arg6, arg7);
- this->unk_1B0[0].x = (sinf(DEGF_TO_RADF((*arg4 % arg8) * (1.0f / arg8) * 360.0f)) * *arg2) + 1.0f;
- this->unk_1B0[0].y = 1.0f - (sinf(DEGF_TO_RADF((*arg4 % arg8) * (1.0f / arg8) * 360.0f)) * *arg2);
+ this->unk_1B0[0].x = (sinf(DEG_TO_RAD((*arg4 % arg8) * (1.0f / arg8) * 360.0f)) * *arg2) + 1.0f;
+ this->unk_1B0[0].y = 1.0f - (sinf(DEG_TO_RAD((*arg4 % arg8) * (1.0f / arg8) * 360.0f)) * *arg2);
(*arg4)++;
}
return sp2C;
@@ -372,7 +373,7 @@ void func_809984F4(EnGs* this, PlayState* play) {
}
} while (gossipStone != NULL);
- func_800B7298(play, &this->actor, 7);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT);
this->actionFunc = func_809985B8;
}
@@ -380,7 +381,7 @@ void func_809985B8(EnGs* this, PlayState* play) {
EnGs* gossipStone;
Vec3f sp38;
- if (SubS_StartActorCutscene(&this->actor, this->unk_212[0], -1, SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) {
+ if (SubS_StartCutscene(&this->actor, this->csIdList[0], CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) {
Player* player = GET_PLAYER(play);
Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_NEW);
@@ -388,8 +389,8 @@ void func_809985B8(EnGs* this, PlayState* play) {
Math_Vec3f_Sum(&player->actor.world.pos, &sp38, &player->actor.world.pos);
Math_Vec3f_Copy(&player->actor.prevPos, &player->actor.world.pos);
this->unk_200 = 0.0f;
- gSaveContext.save.unk_EC4 = ((u32)gSaveContext.save.unk_EC4 & ~(7 << (this->unk_198 * 3))) |
- ((this->unk_194 & 7) << (this->unk_198 * 3));
+ gSaveContext.save.saveInfo.unk_EA0 = ((u32)gSaveContext.save.saveInfo.unk_EA0 & ~(7 << (this->unk_198 * 3))) |
+ ((this->unk_194 & 7) << (this->unk_198 * 3));
gossipStone = NULL;
do {
@@ -411,7 +412,7 @@ void func_809985B8(EnGs* this, PlayState* play) {
void func_80998704(EnGs* this, PlayState* play) {
this->unk_19D = 0;
this->unk_19A &= ~(0x100 | 0x4);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_G_STONE_CHANGE_COLOR);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_G_STONE_CHANGE_COLOR);
this->actionFunc = func_8099874C;
}
@@ -446,11 +447,11 @@ void func_8099874C(EnGs* this, PlayState* play) {
if ((this->unk_19C == 5) && (this->unk_194 != 0)) {
s32 i;
- ActorCutscene_Stop(this->unk_212[0]);
+ CutsceneManager_Stop(this->csIdList[0]);
phi_v0 = 1;
for (i = 0; i < 4; i++) {
- if (((gSaveContext.save.unk_EC4 >> (i * 3)) & 7) != (u32)this->unk_194) {
+ if (((gSaveContext.save.saveInfo.unk_EA0 >> (i * 3)) & 7) != (u32)this->unk_194) {
phi_v0 = 0;
}
}
@@ -459,29 +460,29 @@ void func_8099874C(EnGs* this, PlayState* play) {
this->unk_20C = -1;
switch (this->unk_194) {
case 1:
- if (!(gSaveContext.save.weekEventReg[77] & 8)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_77_08)) {
this->unk_20C = 6;
- gSaveContext.save.weekEventReg[77] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_77_08);
}
break;
case 3:
- if (!(gSaveContext.save.weekEventReg[77] & 0x10)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_77_10)) {
this->unk_20C = 6;
- gSaveContext.save.weekEventReg[77] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_77_10);
}
break;
case 2:
- if (!(gSaveContext.save.weekEventReg[77] & 0x20)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_77_20)) {
this->unk_20C = 6;
- gSaveContext.save.weekEventReg[77] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_77_20);
}
break;
}
- if (!(gSaveContext.save.weekEventReg[90] & 0x10)) {
- gSaveContext.save.weekEventReg[90] |= 0x10;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_90_10)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_90_10);
this->unk_20C = 12;
}
@@ -500,7 +501,7 @@ void func_8099874C(EnGs* this, PlayState* play) {
}
void func_809989B4(EnGs* this, PlayState* play) {
- Actor_PickUp(&this->actor, play, this->unk_20C, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
+ Actor_OfferGetItem(&this->actor, play, this->unk_20C, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
this->actionFunc = func_809989F4;
}
@@ -509,7 +510,7 @@ void func_809989F4(EnGs* this, PlayState* play) {
this->actor.parent = NULL;
func_80997D14(this, play);
} else {
- Actor_PickUp(&this->actor, play, this->unk_20C, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
+ Actor_OfferGetItem(&this->actor, play, this->unk_20C, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
}
}
@@ -518,7 +519,7 @@ s32 func_80998A48(EnGs* this, PlayState* play) {
if (this->unk_19D == 0) {
this->unk_216 = 200;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_ATTACK);
this->unk_1D4 = 0;
this->unk_19A |= 1;
@@ -536,7 +537,7 @@ s32 func_80998A48(EnGs* this, PlayState* play) {
if ((this->actor.params != ENGS_0) && !Play_InCsMode(play) &&
(Message_GetState(&play->msgCtx) == TEXT_STATE_NONE)) {
this->unk_216 = 0;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FAIVE_LUPY_COUNT);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FAIVE_LUPY_COUNT);
Message_StartTextbox(play, 0x20D2, NULL);
}
this->unk_19A &= ~1;
@@ -551,7 +552,7 @@ s32 func_80998BBC(EnGs* this, PlayState* play) {
if (this->unk_19D == 0) {
this->unk_216 = 200;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_ATTACK);
this->unk_1DC = 0.3f;
this->unk_1E0 = 0.0f;
@@ -563,7 +564,7 @@ s32 func_80998BBC(EnGs* this, PlayState* play) {
this->unk_197 &= 0xF;
this->unk_19D = 1;
} else if (this->unk_19D == 1) {
- this->unk_19E[0].z = (this->unk_1D4 % 8) * 0.125f * 360.0f * (0x10000 / 360.0f);
+ this->unk_19E[0].z = DEG_TO_BINANG((this->unk_1D4 % 8) * 0.125f * 360.0f);
this->unk_19E[1].z = -this->unk_19E[0].z;
if (func_80998334(this, play, &this->unk_1DC, &this->unk_1E0, &this->unk_1D4, 0.8f, 0.005f, 0.001f, 7, 0) ==
0.0f) {
@@ -582,7 +583,7 @@ s32 func_80998D44(EnGs* this, PlayState* play) {
this->unk_216 = 200;
this->unk_1DC = this->unk_1B0[0].y - 1.0f;
this->unk_1E0 = -0.8f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_G_STONE_CRUSH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_G_STONE_CRUSH);
this->unk_19A |= 1;
this->unk_21C = 40;
this->unk_21E = 11;
@@ -613,7 +614,7 @@ s32 func_80998D44(EnGs* this, PlayState* play) {
this->unk_21C = 10;
this->unk_21E = 10;
this->unk_1DC = 0.5f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_ATTACK);
this->unk_19D += 1;
}
} else if ((this->unk_19D == 4) && (func_80998334(this, play, &this->unk_1DC, &this->unk_1E0, &this->unk_1D4, 1.0f,
@@ -648,7 +649,7 @@ s32 func_80998F9C(EnGs* this, PlayState* play) {
if (this->unk_19D == 1) {
Math_SmoothStepToF(&this->unk_1E4, this->unk_1E8, 1.0f, 0.1f, 0.001f);
sp48 = Math_SmoothStepToF(&this->unk_1DC, this->unk_1E0, 1.0f, this->unk_1E4, 0.001f);
- this->unk_19E[0].y += (s32)(this->unk_1DC * (0x10000 / 360.0f));
+ this->unk_19E[0].y += (s32)DEG_TO_BINANG_ALT3(this->unk_1DC);
if (sp48 == 0.0f) {
this->unk_1D4 = 0;
this->unk_19D = 2;
@@ -656,13 +657,13 @@ s32 func_80998F9C(EnGs* this, PlayState* play) {
}
if (this->unk_19D == 2) {
- this->unk_19E[0].y += (s32)(this->unk_1DC * (0x10000 / 360.0f));
+ this->unk_19E[0].y += (s32)DEG_TO_BINANG_ALT3(this->unk_1DC);
if (this->unk_1D4++ > 40) {
this->unk_1DC = this->unk_1B0[0].y - 1.0f;
this->unk_1E0 = 1.5f;
this->unk_1E4 = this->unk_1B0[1].y - 1.0f;
this->unk_1E8 = -0.3f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_STONE_GROW_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_STONE_GROW_UP);
this->unk_19D = 3;
}
}
@@ -712,7 +713,7 @@ s32 func_80998F9C(EnGs* this, PlayState* play) {
this->unk_1E8 = 0.0f;
this->unk_1F0 = 0.0f;
this->unk_1EC = 0.5f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_ATTACK);
this->unk_21C = 20;
this->unk_21E = 2;
this->unk_19D = 6;
@@ -725,8 +726,8 @@ s32 func_80998F9C(EnGs* this, PlayState* play) {
sp40 = Math_SmoothStepToF(&this->unk_1EC, this->unk_1F0, 0.8f, 0.02f, 0.001f);
this->unk_1B0[0].x = this->unk_1E4 + 1.0f;
this->unk_1B0[0].y = this->unk_1DC + 1.0f;
- this->unk_1B0[0].x += sinf(DEGF_TO_RADF((this->unk_1D4 % 10) * 0.1f * 360.0f)) * this->unk_1EC;
- this->unk_1B0[0].y += sinf(DEGF_TO_RADF((this->unk_1D4 % 10) * 0.1f * 360.0f)) * this->unk_1EC;
+ this->unk_1B0[0].x += sinf(DEG_TO_RAD((this->unk_1D4 % 10) * 0.1f * 360.0f)) * this->unk_1EC;
+ this->unk_1B0[0].y += sinf(DEG_TO_RAD((this->unk_1D4 % 10) * 0.1f * 360.0f)) * this->unk_1EC;
this->unk_1D4++;
if ((sp48 == 0.0f) && (sp44 == 0.0f) && (sp40 == 0.0f)) {
this->unk_216 = 0;
@@ -735,7 +736,7 @@ s32 func_80998F9C(EnGs* this, PlayState* play) {
}
if ((u16)this->unk_19E[0].y < sp3A) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_STONE_ROLLING);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_STONE_ROLLING);
}
return sp4C;
@@ -842,14 +843,14 @@ s32 func_809995A4(EnGs* this, PlayState* play) {
}
if (this->unk_19D == 4) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 60.0f, 3);
- if (this->actor.bgCheckFlags & (0x10 | 0x8)) {
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 60.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2);
+ if (this->actor.bgCheckFlags & (BGCHECKFLAG_WALL | BGCHECKFLAG_CEILING)) {
Vec3f sp54;
sp54.x = this->actor.world.pos.x;
sp54.y = this->actor.world.pos.y;
sp54.z = this->actor.world.pos.z;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_BOMB_EXPLOSION);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_BOMB_EXPLOSION);
EffectSsBomb2_SpawnLayered(play, &sp54, &bomb2Velocity, &bomb2Accel, 100, 20);
this->unk_1D4 = 10;
this->unk_19A |= 8;
@@ -871,7 +872,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);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
sp7C = 0;
}
}
@@ -881,7 +882,7 @@ s32 func_809995A4(EnGs* this, PlayState* play) {
void func_80999A8C(EnGs* this, PlayState* play) {
if (this->unk_1D4-- <= 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -902,16 +903,16 @@ void func_80999AC0(EnGs* this) {
void func_80999B34(EnGs* this) {
if (this->unk_216 > 0) {
if (this->unk_218 == 0) {
- func_8016566C(this->unk_216);
+ Play_EnableMotionBlur(this->unk_216);
this->unk_218 = this->unk_216;
} else {
- func_80165658(this->unk_218);
+ Play_SetMotionBlurAlpha(this->unk_218);
}
} else if (this->unk_218 > 0) {
Math_StepToS(&this->unk_218, this->unk_216, 20);
- func_80165658(this->unk_218);
+ Play_SetMotionBlurAlpha(this->unk_218);
if (this->unk_218 <= 0) {
- func_80165690();
+ Play_DisableMotionBlur();
}
}
}
@@ -1012,7 +1013,7 @@ void EnGs_Update(Actor* thisx, PlayState* play) {
} else if (func_800B8718(&this->actor, &play->state)) {
this->unk_19A |= 0x200;
this->collider.base.acFlags &= ~AC_HIT;
- if (this->actor.cutscene != -1) {
+ if (this->actor.csId != CS_ID_NONE) {
this->actionFunc = func_80997FF0;
} else {
func_80998040(this, play);
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 eed8d75f9..fb2d62816 100644
--- a/src/overlays/actors/ovl_En_Gs/z_en_gs.h
+++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.h
@@ -49,7 +49,7 @@ typedef struct EnGs {
/* 0x208 */ s32 unk_208;
/* 0x20C */ s32 unk_20C;
/* 0x210 */ u16 unk_210;
- /* 0x212 */ s16 unk_212[2];
+ /* 0x212 */ s16 csIdList[2];
/* 0x216 */ s16 unk_216;
/* 0x218 */ s16 unk_218;
/* 0x21A */ s16 unk_21A;
@@ -57,6 +57,4 @@ typedef struct EnGs {
/* 0x21E */ s16 unk_21E;
} EnGs; // size = 0x220
-extern const ActorInit En_Gs_InitVars;
-
#endif // Z_EN_GS_H
diff --git a/src/overlays/actors/ovl_En_Guard_Nuts/overlay.cfg b/src/overlays/actors/ovl_En_Guard_Nuts/overlay.cfg
deleted file mode 100644
index 135b80f6c..000000000
--- a/src/overlays/actors/ovl_En_Guard_Nuts/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Guard_Nuts
-z_en_guard_nuts.c
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 a08d0835f..f5925f524 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
@@ -25,7 +25,7 @@ void EnGuardNuts_Burrow(EnGuardNuts* this, PlayState* play);
void EnGuardNuts_SetupUnburrow(EnGuardNuts* this, PlayState* play);
void EnGuardNuts_Unburrow(EnGuardNuts* this, PlayState* play);
-const ActorInit En_Guard_Nuts_InitVars = {
+ActorInit En_Guard_Nuts_InitVars = {
ACTOR_EN_GUARD_NUTS,
ACTORCAT_NPC,
FLAGS,
@@ -109,7 +109,7 @@ void EnGuardNuts_Init(Actor* thisx, PlayState* play) {
sGuardCount++;
// If you have returned deku princess guards will init burrowed.
- if (!(gSaveContext.save.weekEventReg[23] & 0x20)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) {
EnGuardNuts_SetupWait(this);
} else {
EnGuardNuts_Burrow(this, play);
@@ -158,10 +158,10 @@ void EnGuardNuts_Wait(EnGuardNuts* this, PlayState* play) {
if (player->transformation == PLAYER_FORM_DEKU) {
// this is the palace of...
this->guardTextIndex = 0;
- if ((gSaveContext.save.weekEventReg[17] & 4) && (!this->hasCompletedConversation)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_17_04) && (!this->hasCompletedConversation)) {
// I told you not to enter!!
this->guardTextIndex = 7;
- } else if (gSaveContext.save.weekEventReg[12] & 0x40) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_40)) {
// come to see the monkey again?
this->guardTextIndex = 4;
}
@@ -232,9 +232,9 @@ void func_80ABB590(EnGuardNuts* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
if (D_80ABBE38[this->guardTextIndex] != 1) {
if (D_80ABBE38[this->guardTextIndex] == 2) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
D_80ABBE20 = 2;
- gSaveContext.save.weekEventReg[12] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_12_40);
EnGuardNuts_Burrow(this, play);
} else {
this->guardTextIndex++;
@@ -247,11 +247,11 @@ void func_80ABB590(EnGuardNuts* this, PlayState* play) {
} else if (this->guardTextIndex != 3) {
this->targetHeadPos.x = 0;
this->targetHeadPos.y = this->targetHeadPos.x;
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->state = GUARD_NUTS_UNK_STATE;
this->actionFunc = EnGuardNuts_Unburrow;
} else {
- func_801477B4(play);
+ Message_CloseTextbox(play);
EnGuardNuts_SetupWait(this);
}
}
@@ -276,10 +276,10 @@ void EnGuardNuts_Burrow(EnGuardNuts* this, PlayState* play) {
digPos.y = this->actor.floorHeight;
EffectSsHahen_SpawnBurst(play, &digPos, 4.0f, 0, 10, 3, 15, HAHEN_OBJECT_DEFAULT, 10, NULL);
this->targetHeadPos.y = 0;
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->targetHeadPos.x = this->targetHeadPos.y;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_DOWN);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DOWN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_UP);
this->actionFunc = EnGuardNuts_SetupUnburrow;
}
@@ -300,18 +300,18 @@ void EnGuardNuts_Unburrow(EnGuardNuts* this, PlayState* play) {
Vec3f digPos;
// If you have returned Deku Princess, guards will not unburrow
- if (!(gSaveContext.save.weekEventReg[23] & 0x20)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) {
yawDiff = ABS_ALT(BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.home.rot.y));
if ((yawDiff < 0x4000) && ((D_80ABBE20 == 0) || (this->actor.xzDistToPlayer > 150.0f))) {
Math_Vec3f_Copy(&digPos, &this->actor.world.pos);
digPos.y = this->actor.floorHeight;
EffectSsHahen_SpawnBurst(play, &digPos, 4.0f, 0, 10, 3, 15, HAHEN_OBJECT_DEFAULT, 10, NULL);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_UP);
D_80ABBE20 = 0;
if (this->guardTextIndex == 9) {
this->hasCompletedConversation = true;
}
- this->actor.flags &= ~ACTOR_FLAG_8000000;
+ this->actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON;
EnGuardNuts_SetupWait(this);
}
}
@@ -329,7 +329,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)))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_WALK);
}
this->actionFunc(this, play);
@@ -345,7 +345,9 @@ void EnGuardNuts_Update(Actor* thisx, PlayState* play) {
}
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 60.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 60.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
if ((this->state != GUARD_NUTS_BURROWED_STATE) && (this->state != GUARD_NUTS_UNK_STATE)) {
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
diff --git a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.h b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.h
index 6f45691ad..8cbe26f03 100644
--- a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.h
+++ b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.h
@@ -29,6 +29,4 @@ typedef struct EnGuardNuts {
/* 0x244 */ ColliderCylinder collider;
} EnGuardNuts; // size = 0x290
-extern const ActorInit En_Guard_Nuts_InitVars;
-
#endif // Z_EN_GUARD_NUTS_H
diff --git a/src/overlays/actors/ovl_En_Guruguru/overlay.cfg b/src/overlays/actors/ovl_En_Guruguru/overlay.cfg
deleted file mode 100644
index 727ca7b59..000000000
--- a/src/overlays/actors/ovl_En_Guruguru/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Guruguru
-z_en_guruguru.c
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 a57effdcc..a6f5f98b3 100644
--- a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c
+++ b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c
@@ -27,7 +27,7 @@ void func_80BC7520(EnGuruguru* this, PlayState* play);
extern ColliderCylinderInit D_80BC79A0;
-const ActorInit En_Guruguru_InitVars = {
+ActorInit En_Guruguru_InitVars = {
ACTOR_EN_GURUGURU,
ACTORCAT_NPC,
FLAGS,
@@ -83,17 +83,17 @@ void EnGuruguru_Init(Actor* thisx, PlayState* play) {
if (this->actor.params == 0) {
func_80BC6E10(this);
} else if (this->actor.params == 2) {
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->actor.draw = NULL;
this->actor.flags &= ~ACTOR_FLAG_1;
this->actionFunc = EnGuruguru_DoNothing;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else if (this->actor.params == 1) {
func_80BC6E10(this);
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -119,10 +119,10 @@ void func_80BC6E10(EnGuruguru* this) {
this->textIdIndex = 0;
this->unk270 = 0;
if (this->actor.params == 0) {
- if (gSaveContext.save.weekEventReg[38] & 0x10) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_38_10)) {
this->textIdIndex = 1;
}
- } else if (gSaveContext.save.weekEventReg[38] & 0x40) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_38_40)) {
this->textIdIndex = 2;
} else {
this->textIdIndex = 3;
@@ -131,8 +131,8 @@ void func_80BC6E10(EnGuruguru* this) {
this->headZRotTarget = 0;
this->unk268 = 1;
this->actor.textId = textIDs[this->textIdIndex];
- if ((this->textIdIndex == 0 || this->textIdIndex == 1) && (gSaveContext.save.weekEventReg[77] & 4)) {
- if (!(gSaveContext.save.weekEventReg[88] & 4)) {
+ if ((this->textIdIndex == 0 || this->textIdIndex == 1) && CHECK_WEEKEVENTREG(WEEKEVENTREG_77_04)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_88_04)) {
this->actor.textId = 0x295F;
} else {
this->actor.textId = 0x2960;
@@ -153,7 +153,7 @@ void func_80BC6F14(EnGuruguru* this, PlayState* play) {
this->textIdIndex = 3;
if (player->transformation == PLAYER_FORM_DEKU) {
this->textIdIndex = 13;
- if (gSaveContext.save.weekEventReg[79] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_04)) {
this->textIdIndex = 14;
}
}
@@ -208,20 +208,20 @@ void func_80BC7068(EnGuruguru* this, PlayState* play) {
}
}
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->headZRotTarget = 0;
if ((this->textIdIndex == 13) || (this->textIdIndex == 14)) {
func_80151BB4(play, 0x13);
- gSaveContext.save.weekEventReg[79] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_79_04);
func_80BC6E10(this);
return;
}
if (this->actor.params == 0) {
if (this->actor.textId == 0x295F) {
- gSaveContext.save.weekEventReg[88] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_88_04);
}
if (this->actor.textId == 0x292A) {
- gSaveContext.save.weekEventReg[38] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_38_10);
}
func_80151BB4(play, 0x13);
func_80BC6E10(this);
@@ -232,7 +232,7 @@ void func_80BC7068(EnGuruguru* this, PlayState* play) {
return;
}
if (this->textIdIndex == 12) {
- gSaveContext.save.weekEventReg[38] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_38_40);
func_801A3B48(0);
func_80151BB4(play, 0x36);
func_80151BB4(play, 0x13);
@@ -257,11 +257,11 @@ void func_80BC7068(EnGuruguru* this, PlayState* play) {
}
if ((this->unk268 != 0) && (this->textIdIndex >= 7)) {
this->skelAnime.playSpeed = 2.0f;
- func_801A29D4(3, 1.18921f, 2);
+ Audio_SetSeqTempoAndFreq(3, 1.18921f, 2);
func_801A3B48(0);
} else {
if (this->skelAnime.playSpeed == 2.0f) {
- func_801A29D4(3, 1.0f, 2);
+ Audio_SetSeqTempoAndFreq(3, 1.0f, 2);
}
if (this->unk268 == 0) {
func_801A3B48(1);
@@ -271,7 +271,7 @@ void func_80BC7068(EnGuruguru* this, PlayState* play) {
this->skelAnime.playSpeed = 1.0f;
}
this->unk266 = 1;
- func_80151938(play, textIDs[this->textIdIndex]);
+ Message_ContinueTextbox(play, textIDs[this->textIdIndex]);
return;
}
func_801A3B48(0);
@@ -295,12 +295,12 @@ void func_80BC7440(EnGuruguru* this, PlayState* play) {
this->textIdIndex++;
this->actor.textId = textIDs[this->textIdIndex];
func_801A3B48(1);
- func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_IA_MINUS1);
this->unk268 = 0;
- gSaveContext.save.weekEventReg[38] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_38_40);
this->actionFunc = func_80BC7520;
} else {
- Actor_PickUp(&this->actor, play, GI_MASK_BREMEN, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MASK_BREMEN, 300.0f, 300.0f);
}
}
@@ -309,7 +309,7 @@ void func_80BC7520(EnGuruguru* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->actionFunc = func_80BC7068;
} else {
- func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_IA_MINUS1);
}
}
@@ -321,11 +321,11 @@ void EnGuruguru_Update(Actor* thisx, PlayState* play) {
if (!gSaveContext.save.isNight) {
if (this->actor.params == 1) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
} else if (this->actor.params == 0 || this->actor.params == 2) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -363,7 +363,9 @@ void EnGuruguru_Update(Actor* thisx, PlayState* play) {
Actor_MoveWithGravity(&this->actor);
Math_SmoothStepToS(&this->headXRot, this->headXRotTarget, 1, 3000, 0);
Math_SmoothStepToS(&this->headZRot, this->headZRotTarget, 1, 1000, 0);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
}
diff --git a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.h b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.h
index 0262cd41d..0158e3ddc 100644
--- a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.h
+++ b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.h
@@ -30,6 +30,4 @@ typedef struct EnGuruguru {
/* 0x278 */ ColliderCylinder collider;
} EnGuruguru; // size = 0x2C4
-extern const ActorInit En_Guruguru_InitVars;
-
#endif // Z_EN_GURUGURU_H
diff --git a/src/overlays/actors/ovl_En_Hakurock/overlay.cfg b/src/overlays/actors/ovl_En_Hakurock/overlay.cfg
deleted file mode 100644
index 93c363b8d..000000000
--- a/src/overlays/actors/ovl_En_Hakurock/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Hakurock
-z_en_hakurock.c
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 174c507d1..44e42d01a 100644
--- a/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c
+++ b/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c
@@ -32,7 +32,7 @@ void func_80B22750(EnHakurock* this, PlayState* play);
void func_80B228F4(Actor* thisx, PlayState* play);
void EnHakurock_Draw(Actor* thisx, PlayState* play);
-const ActorInit En_Hakurock_InitVars = {
+ActorInit En_Hakurock_InitVars = {
ACTOR_EN_HAKUROCK,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -165,7 +165,7 @@ void func_80B21EA4(EnHakurock* this, s32 arg1) {
}
void func_80B21FFC(EnHakurock* this) {
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
this->collider.base.atFlags &= ~AT_HIT;
this->collider.base.ocFlags1 &= ~OC1_HIT;
this->actor.draw = NULL;
@@ -186,7 +186,7 @@ void func_80B22040(EnHakurock* this, PlayState* play) {
void func_80B220A8(EnHakurock* this) {
this->actor.params = EN_HAKUROCK_TYPE_BOULDER;
this->actor.draw = func_80B228F4;
- this->actor.speedXZ = Rand_ZeroFloat(3.5f) + 2.5f;
+ this->actor.speed = Rand_ZeroFloat(3.5f) + 2.5f;
this->actor.velocity.y = Rand_ZeroFloat(4.5f) + 18.0f;
Actor_SetScale(&this->actor, (Rand_ZeroFloat(5.0f) + 15.0f) * 0.001f);
this->actor.world.rot.y = ((s32)Rand_Next() >> 0x12) + this->actor.parent->shape.rot.y + 0x8000;
@@ -210,8 +210,8 @@ void func_80B221E8(EnHakurock* this, PlayState* play) {
this->actor.shape.rot.z += 0xB00;
if ((this->collider.base.atFlags & AT_HIT) || ((this->counter == 0) && (this->collider.base.ocFlags1 & OC1_HIT)) ||
- ((this->actor.bgCheckFlags & 1) && (this->actor.velocity.y < 0.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ROCK_BROKEN);
+ ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.velocity.y < 0.0f))) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_ROCK_BROKEN);
func_80B21EA4(this, 0);
func_80B21FFC(this);
}
@@ -244,9 +244,9 @@ void func_80B2242C(EnHakurock* this, PlayState* play) {
if ((this->collider.base.ocFlags1 & OC1_HIT) && (this->collider.base.oc == this->actor.parent)) {
func_80B21EA4(this, 1);
func_80B21FFC(this);
- } else if ((this->actor.bgCheckFlags & 1)) {
+ } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
func_80B21EA4(this, 2);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_OBJECT_STICK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_OBJECT_STICK);
func_80B224C0(this);
}
}
@@ -276,7 +276,8 @@ void func_80B22500(EnHakurock* this, PlayState* play) {
(this->collider.base.oc->params == EN_HAKUROCK_TYPE_UNK_2))) {
func_80B21EA4(this, 3);
func_80B21FFC(this);
- } else if ((&player->actor == this->collider.base.oc) && ((player->stateFlags3 & 0x81000) != 0) &&
+ } 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);
@@ -322,7 +323,8 @@ void EnHakurock_Update(Actor* thisx, PlayState* play) {
rockParams = this->actor.params;
if ((rockParams == EN_HAKUROCK_TYPE_BOULDER) || (rockParams == EN_HAKUROCK_TYPE_UNK_2)) {
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, this->collider.dim.radius, 0.0f, 0x85);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, this->collider.dim.radius, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_80);
if (this->actor.floorHeight == BGCHECK_Y_MIN) {
func_80B21FFC(this);
} else {
@@ -352,7 +354,7 @@ void EnHakurock_Draw(Actor* thisx, PlayState* play) {
func_8012C28C(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++, object_boss_hakugin_DL_011100);
- gSPDisplayList(POLY_OPA_DISP++, object_boss_hakugin_DL_011178);
+ gSPDisplayList(POLY_OPA_DISP++, gGohtStalactiteMaterialDL);
+ gSPDisplayList(POLY_OPA_DISP++, gGohtStalactiteModelDL);
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.h b/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.h
index 93931e9f3..4934c7fc8 100644
--- a/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.h
+++ b/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.h
@@ -22,6 +22,4 @@ typedef struct EnHakurock {
/* 0x14C */ ColliderCylinder collider;
} EnHakurock; // size = 0x198
-extern const ActorInit En_Hakurock_InitVars;
-
#endif // Z_EN_HAKUROCK_H
diff --git a/src/overlays/actors/ovl_En_Hanabi/overlay.cfg b/src/overlays/actors/ovl_En_Hanabi/overlay.cfg
deleted file mode 100644
index 67feefe27..000000000
--- a/src/overlays/actors/ovl_En_Hanabi/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Hanabi
-z_en_hanabi.c
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 6b354dd94..c54703ef9 100644
--- a/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c
+++ b/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c
@@ -21,7 +21,7 @@ void func_80B23910(EnHanabi* this, PlayState* play);
void func_80B23934(EnHanabi* this, PlayState* play);
void EnHanabi_Draw(Actor* thisx, PlayState* play);
-const ActorInit En_Hanabi_InitVars = {
+ActorInit En_Hanabi_InitVars = {
ACTOR_EN_HANABI,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -297,7 +297,7 @@ void func_80B236C8(EnHanabi* this, PlayState* play) {
this->actor.home.rot.y += (s16)((Rand_ZeroFloat(40.0f) + 80.0f) * 256.0f);
this->unk_144 = (s32)Rand_ZeroFloat(5.0f) + 20;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_OC_FIREWORKS);
+ Actor_PlaySfx(&this->actor, NA_SE_OC_FIREWORKS);
func_80B235CC(this, &sp34, sp28);
}
}
@@ -305,7 +305,7 @@ void func_80B236C8(EnHanabi* this, PlayState* play) {
void func_80B23894(EnHanabi* this, PlayState* play) {
func_80B236C8(this, play);
if (func_80B22F34(this->unk_148) == 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -324,15 +324,15 @@ void func_80B23910(EnHanabi* this, PlayState* play) {
void func_80B23934(EnHanabi* this, PlayState* play) {
if ((gSaveContext.save.entrance == ENTRANCE(TERMINA_FIELD, 1)) && (gSaveContext.sceneLayer == 7)) {
- if (play->csCtx.frames > 1650) {
+ if (play->csCtx.curFrame > 1650) {
func_80B236C8(this, play);
func_800B8FE8(&this->actor, NA_SE_EV_FIREWORKS_LAUNCH - SFX_FLAG);
}
}
- if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 7) && (play->csCtx.currentCsIndex == 0) &&
- (play->csCtx.frames == 610)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_KYOJIN_GROAN);
+ if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 7) && (play->csCtx.scriptIndex == 0) &&
+ (play->csCtx.curFrame == 610)) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_KYOJIN_GROAN);
}
}
diff --git a/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.h b/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.h
index a219ab2ba..4c0c2e216 100644
--- a/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.h
+++ b/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.h
@@ -32,6 +32,4 @@ typedef struct EnHanabi {
/* 0x4654 */ EnHanabiActionFunc actionFunc;
} EnHanabi; // size = 0x4658
-extern const ActorInit En_Hanabi_InitVars;
-
#endif // Z_EN_HANABI_H
diff --git a/src/overlays/actors/ovl_En_Hata/overlay.cfg b/src/overlays/actors/ovl_En_Hata/overlay.cfg
deleted file mode 100644
index e670da262..000000000
--- a/src/overlays/actors/ovl_En_Hata/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Hata
-z_en_hata.c
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 5eb2292fc..4a01b663e 100644
--- a/src/overlays/actors/ovl_En_Hata/z_en_hata.c
+++ b/src/overlays/actors/ovl_En_Hata/z_en_hata.c
@@ -16,7 +16,7 @@ void EnHata_Destroy(Actor* thisx, PlayState* play);
void EnHata_Update(Actor* thisx, PlayState* play2);
void EnHata_Draw(Actor* thisx, PlayState* play);
-const ActorInit En_Hata_InitVars = {
+ActorInit En_Hata_InitVars = {
ACTOR_EN_HATA,
ACTORCAT_PROP,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Hata/z_en_hata.h b/src/overlays/actors/ovl_En_Hata/z_en_hata.h
index fc96f302a..155460f60 100644
--- a/src/overlays/actors/ovl_En_Hata/z_en_hata.h
+++ b/src/overlays/actors/ovl_En_Hata/z_en_hata.h
@@ -17,6 +17,4 @@ typedef struct EnHata {
/* 0x2A4 */ Vec3f unk_2A4;
} EnHata; /* size = 0x2B0 */
-extern const ActorInit En_Hata_InitVars;
-
#endif // Z_EN_HATA_H
diff --git a/src/overlays/actors/ovl_En_Heishi/overlay.cfg b/src/overlays/actors/ovl_En_Heishi/overlay.cfg
deleted file mode 100644
index 3b8a0e40e..000000000
--- a/src/overlays/actors/ovl_En_Heishi/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Heishi
-z_en_heishi.c
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 b69429d1a..5fa9f5ea2 100644
--- a/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c
+++ b/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c
@@ -28,7 +28,7 @@ typedef enum {
/* 4 */ HEISHI_ANIM_STAND_UP
} EnHeishiAnimation;
-const ActorInit En_Heishi_InitVars = {
+ActorInit En_Heishi_InitVars = {
ACTOR_EN_HEISHI,
ACTORCAT_NPC,
FLAGS,
@@ -72,24 +72,22 @@ void EnHeishi_Init(Actor* thisx, PlayState* play) {
if (this->paramsCopy == 0) {
this->shouldSetHeadRotation = 1;
- if (!(gSaveContext.save.weekEventReg[63] & 0x80) &&
- !((gSaveContext.save.day == 3) && gSaveContext.save.isNight)) {
- Actor_MarkForDeath(&this->actor);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_63_80) && !((gSaveContext.save.day == 3) && gSaveContext.save.isNight)) {
+ Actor_Kill(&this->actor);
}
} else {
this->colliderCylinder.dim.radius = 30;
this->colliderCylinder.dim.height = 60;
this->colliderCylinder.dim.yShift = 0;
- if ((gSaveContext.save.weekEventReg[63] & 0x80) ||
- ((gSaveContext.save.day == 3) && gSaveContext.save.isNight)) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_80) || ((gSaveContext.save.day == 3) && gSaveContext.save.isNight)) {
+ Actor_Kill(&this->actor);
}
}
this->actor.targetMode = 6;
this->actor.gravity = -3.0f;
Collider_InitAndSetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInit);
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
EnHeishi_SetupIdle(this);
}
@@ -152,22 +150,25 @@ void EnHeishi_Update(Actor* thisx, PlayState* play) {
this->actor.shape.rot.y = this->actor.world.rot.y;
if ((this->paramsCopy != 0) && (gSaveContext.save.day == 3) && gSaveContext.save.isNight) {
- Actor_MarkForDeath(&this->actor);
- } else {
- this->actionFunc(this, play);
- Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 29);
- Actor_SetScale(&this->actor, 0.01f);
- if (this->shouldSetHeadRotation) {
- EnHeishi_SetHeadRotation(this);
- }
-
- Actor_SetFocus(&this->actor, 60.0f);
- Math_SmoothStepToS(&this->headRotX, this->headRotXTarget, 1, 3000, 0);
- Math_SmoothStepToS(&this->headRotY, this->headRotYTarget, 1, 1000, 0);
- Collider_UpdateCylinder(&this->actor, &this->colliderCylinder);
- CollisionCheck_SetOC(play, &play->colChkCtx, &this->colliderCylinder.base);
+ Actor_Kill(&this->actor);
+ return;
}
+
+ this->actionFunc(this, play);
+ Actor_MoveWithGravity(&this->actor);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
+ Actor_SetScale(&this->actor, 0.01f);
+ if (this->shouldSetHeadRotation) {
+ EnHeishi_SetHeadRotation(this);
+ }
+
+ Actor_SetFocus(&this->actor, 60.0f);
+ Math_SmoothStepToS(&this->headRotX, this->headRotXTarget, 1, 3000, 0);
+ Math_SmoothStepToS(&this->headRotY, this->headRotYTarget, 1, 1000, 0);
+ Collider_UpdateCylinder(&this->actor, &this->colliderCylinder);
+ CollisionCheck_SetOC(play, &play->colChkCtx, &this->colliderCylinder.base);
}
s32 EnHeishi_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
diff --git a/src/overlays/actors/ovl_En_Hg/overlay.cfg b/src/overlays/actors/ovl_En_Hg/overlay.cfg
deleted file mode 100644
index d3037b31d..000000000
--- a/src/overlays/actors/ovl_En_Hg/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Hg
-z_en_hg.c
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 07b256487..34e1d1e15 100644
--- a/src/overlays/actors/ovl_En_Hg/z_en_hg.c
+++ b/src/overlays/actors/ovl_En_Hg/z_en_hg.c
@@ -15,22 +15,39 @@ void EnHg_Destroy(Actor* thisx, PlayState* play);
void EnHg_Update(Actor* thisx, PlayState* play);
void EnHg_Draw(Actor* thisx, PlayState* play);
-void func_80BCF354(EnHg* this);
-void func_80BCF398(EnHg* this, PlayState* play);
-void func_80BCF468(EnHg* this);
-void func_80BCF468(EnHg* this);
-void func_80BCF4AC(EnHg* this, PlayState* play);
-void func_80BCF5F0(EnHg* this);
-void func_80BCF634(EnHg* this, PlayState* play);
-void func_80BCF68C(EnHg* this);
-void func_80BCF6D0(EnHg* this, PlayState* play);
-void func_80BCF8A0(EnHg* this, PlayState* play);
-void func_80BCF93C(EnHg* this);
-void func_80BCF95C(EnHg* this, PlayState* play);
+void EnHg_SetupWait(EnHg* this);
+void EnHg_Wait(EnHg* this, PlayState* play);
+void EnHg_SetupChasePlayer(EnHg* this);
+void EnHg_ChasePlayer(EnHg* this, PlayState* play);
+void EnHg_SetupChasePlayerWait(EnHg* this);
+void EnHg_ChasePlayerWait(EnHg* this, PlayState* play);
+void EnHg_SetupReactToHit(EnHg* this);
+void EnHg_ReactToHit(EnHg* this, PlayState* play);
+void EnHg_PlayCutscene(EnHg* this, PlayState* play);
+void EnHg_SetupCsAction(EnHg* this);
+void EnHg_HandleCsAction(EnHg* this, PlayState* play);
s32 EnHg_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx);
void EnHg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx);
-const ActorInit En_Hg_InitVars = {
+typedef enum {
+ /* 0 */ HG_ANIM_IDLE,
+ /* 1 */ HG_ANIM_LURCH_FORWARD,
+ /* 2 */ HG_ANIM_RECOIL,
+ /* 3 */ HG_ANIM_LEAN_FORWARD,
+ /* 4 */ HG_ANIM_REACH_FORWARD,
+ /* 5 */ HG_ANIM_CURL_UP,
+ /* 6 */ HG_ANIM_CROUCHED_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,
+} HgCsIndex;
+
+ActorInit En_Hg_InitVars = {
ACTOR_EN_HG,
ACTORCAT_PROP,
FLAGS,
@@ -102,43 +119,43 @@ static CollisionCheckInfoInit2 sColChkInfoInit2 = {
};
static AnimationInfo sAnimationInfo[] = {
- { &object_harfgibud_Anim_00260C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- { &object_harfgibud_Anim_009D44, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- { &object_harfgibud_Anim_00A164, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- { &object_harfgibud_Anim_000370, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
- { &object_harfgibud_Anim_001138, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
- { &object_harfgibud_Anim_0015D4, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
- { &object_harfgibud_Anim_001960, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
- { &object_harfgibud_Anim_00AE1C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+ { &gPamelasFatherIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ { &gPamelasFatherLurchForwardAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ { &gPamelasFatherRecoilFromHitAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ { &gPamelasFatherLeanForwardAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
+ { &gPamelasFatherReachForwardAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+ { &gPamelasFatherCurlUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
+ { &gPamelasFatherCrouchedPanicAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+ { &gPamelasFatherPanicAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
};
-static u32 D_80BD00C8 = false;
+static u32 sHasSoundPlayed = false;
void EnHg_Init(Actor* thisx, PlayState* play) {
EnHg* this = THIS;
- s16 currentCutscene = this->actor.cutscene;
+ s16 csId = this->actor.csId;
s32 i;
ActorShape_Init(&this->actor.shape, 0.0f, NULL, 36.0f);
- SkelAnime_InitFlex(play, &this->skelAnime, &gHarfgibudGibdoSkel, &object_harfgibud_Anim_00260C, this->jointTable,
- this->morphTable, HARFGIBUD_GIBDO_LIMB_MAX);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gPamelasFatherGibdoSkel, &gPamelasFatherIdleAnim, this->jointTable,
+ this->morphTable, PAMELAS_FATHER_GIBDO_LIMB_MAX);
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit2);
- if ((gSaveContext.save.weekEventReg[75] & 0x20) || (gSaveContext.save.weekEventReg[52] & 0x20)) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) || CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE)) {
+ Actor_Kill(&this->actor);
}
this->actor.targetMode = 1;
this->actor.colChkInfo.health = 0;
this->actor.gravity = -1.0f;
- for (i = 0; i < ARRAY_COUNT(this->cutscenes); i++) {
- if (currentCutscene == -1) {
+ for (i = 0; i < ARRAY_COUNT(this->csIdList); i++) {
+ if (csId == CS_ID_NONE) {
break;
}
- this->cutscenes[i] = currentCutscene;
- currentCutscene = ActorCutscene_GetAdditionalCutscene(currentCutscene);
+ this->csIdList[i] = csId;
+ csId = CutsceneManager_GetAdditionalCsId(csId);
}
- func_80BCF354(this);
+ EnHg_SetupWait(this);
}
void EnHg_Destroy(Actor* thisx, PlayState* play) {
@@ -147,35 +164,35 @@ void EnHg_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->collider);
}
-void func_80BCF354(EnHg* this) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
- this->actionFunc = func_80BCF398;
+void EnHg_SetupWait(EnHg* this) {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_IDLE);
+ this->actionFunc = EnHg_Wait;
}
-void func_80BCF398(EnHg* this, PlayState* play) {
+void EnHg_Wait(EnHg* this, PlayState* play) {
if (this->actor.colChkInfo.health == 1) {
- if ((this->actor.xzDistToPlayer < 200.0f && this->actor.playerHeightRel < 40.0f) &&
- !Cutscene_CheckActorAction(play, 0x1E3)) {
- func_80BCF468(this);
+ if (((this->actor.xzDistToPlayer < 200.0f) && (this->actor.playerHeightRel < 40.0f)) &&
+ !Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_483)) {
+ EnHg_SetupChasePlayer(this);
}
- if ((gSaveContext.sceneLayer == 0) && (play->csCtx.currentCsIndex == 0) &&
- ((play->csCtx.frames == 20) || (play->csCtx.frames == 60))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_HALF_REDEAD_SURPRISE);
+ if ((gSaveContext.sceneLayer == 0) && (play->csCtx.scriptIndex == 0) &&
+ ((play->csCtx.curFrame == 20) || (play->csCtx.curFrame == 60))) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_HALF_REDEAD_SURPRISE);
}
}
}
-void func_80BCF468(EnHg* this) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1);
- this->actionFunc = func_80BCF4AC;
+void EnHg_SetupChasePlayer(EnHg* this) {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_LURCH_FORWARD);
+ this->actionFunc = EnHg_ChasePlayer;
}
-void func_80BCF4AC(EnHg* this, PlayState* play) {
+void EnHg_ChasePlayer(EnHg* this, PlayState* play) {
Player* player = GET_PLAYER(play);
s32 pad;
- this->actor.speedXZ = 1.6f;
- if (!(player->stateFlags2 & 0x08000000) && Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) {
+ this->actor.speed = 1.6f;
+ if (!(player->stateFlags2 & PLAYER_STATE2_8000000) && Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) {
if (((this->skelAnime.curFrame > 9.0f) && (this->skelAnime.curFrame < 16.0f)) ||
((this->skelAnime.curFrame > 44.0f) && (this->skelAnime.curFrame < 51.0f))) {
Actor_MoveWithGravity(&this->actor);
@@ -184,38 +201,39 @@ void func_80BCF4AC(EnHg* this, PlayState* play) {
}
if ((Math_Vec3f_DistXZ(&this->actor.world.pos, &this->actor.home.pos) > 200.0f) &&
(Math_Vec3f_DistXZ(&player->actor.world.pos, &this->actor.home.pos) > 200.0f)) {
- func_80BCF5F0(this);
+ EnHg_SetupChasePlayerWait(this);
}
}
}
-void func_80BCF5F0(EnHg* this) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
- this->actionFunc = func_80BCF634;
+void EnHg_SetupChasePlayerWait(EnHg* this) {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_IDLE);
+ this->actionFunc = EnHg_ChasePlayerWait;
}
-void func_80BCF634(EnHg* this, PlayState* play) {
+void EnHg_ChasePlayerWait(EnHg* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (Math_Vec3f_DistXZ(&player->actor.world.pos, &this->actor.home.pos) < 200.0f) {
- func_80BCF468(this);
+ EnHg_SetupChasePlayer(this);
}
}
-void func_80BCF68C(EnHg* this) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
- this->actionFunc = func_80BCF6D0;
+void EnHg_SetupReactToHit(EnHg* this) {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_RECOIL);
+ this->actionFunc = EnHg_ReactToHit;
}
-void func_80BCF6D0(EnHg* this, PlayState* play) {
+void EnHg_ReactToHit(EnHg* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- func_80BCF5F0(this);
+ EnHg_SetupChasePlayerWait(this);
}
}
-void func_80BCF710(EnHg* this, PlayState* play) {
+void EnHg_HandleTatlDialog(EnHg* this, PlayState* play) {
if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
+ // "...Sort of looks different..."
Message_StartTextbox(play, 0x24F, &this->actor);
} else {
func_800B8614(&this->actor, play, 80.0f);
@@ -223,164 +241,182 @@ void func_80BCF710(EnHg* this, PlayState* play) {
}
}
-void func_80BCF778(EnHg* this, PlayState* play) {
+void EnHg_PlayRedeadSfx(EnHg* this, PlayState* play) {
if (this->actor.colChkInfo.health == 1) {
- if (this->actionFunc == func_80BCF4AC || this->actionFunc == func_80BCF6D0 ||
- this->actionFunc == func_80BCF634) {
+ if ((this->actionFunc == EnHg_ChasePlayer) || (this->actionFunc == EnHg_ReactToHit) ||
+ (this->actionFunc == EnHg_ChasePlayerWait)) {
func_800B9010(&this->actor, NA_SE_EN_HALF_REDEAD_LOOP - SFX_FLAG);
}
}
}
-void func_80BCF7D8(EnHg* this, PlayState* play) {
- if (this->actor.colChkInfo.health) {
+void EnHg_UpdateCollision(EnHg* this, PlayState* play) {
+ if (this->actor.colChkInfo.health != 0) {
if (this->collider.base.acFlags & AC_HIT) {
this->collider.base.acFlags &= ~AC_HIT;
- func_80BCF68C(this);
+ EnHg_SetupReactToHit(this);
}
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
- if (this->actionFunc != func_80BCF6D0 && this->actionFunc != func_80BCF8A0 &&
- this->actionFunc != func_80BCF95C) {
+ if ((this->actionFunc != EnHg_ReactToHit) && (this->actionFunc != EnHg_PlayCutscene) &&
+ (this->actionFunc != EnHg_HandleCsAction)) {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
}
}
}
-void func_80BCF88C(EnHg* this) {
- this->actionFunc = func_80BCF8A0;
+void EnHg_SetupCutscene(EnHg* this) {
+ this->actionFunc = EnHg_PlayCutscene;
}
-void func_80BCF8A0(EnHg* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->cutscenes[this->unk218])) {
- ActorCutscene_Start(this->cutscenes[this->unk218], &this->actor);
- func_80BCF93C(this);
+void EnHg_PlayCutscene(EnHg* this, PlayState* play) {
+ if (CutsceneManager_IsNext(this->csIdList[this->csIdIndex])) {
+ CutsceneManager_Start(this->csIdList[this->csIdIndex], &this->actor);
+ EnHg_SetupCsAction(this);
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- ActorCutscene_SetIntentToPlay(this->cutscenes[this->unk218]);
+ CutsceneManager_Queue(this->csIdList[this->csIdIndex]);
}
}
-void func_80BCF93C(EnHg* this) {
- this->cutscenes[3] = 0x63;
- this->cutscenes[2] = 0;
- this->actionFunc = func_80BCF95C;
+void EnHg_SetupCsAction(EnHg* this) {
+ this->csIdList[3] = 99;
+ this->csIdList[2] = 0;
+ this->actionFunc = EnHg_HandleCsAction;
}
-void func_80BCF95C(EnHg* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 484)) {
- s32 actionIndex = Cutscene_GetActorActionIndex(play, 484);
+void EnHg_HandleCsAction(EnHg* this, PlayState* play) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_484)) {
+ s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_484);
- if (this->cutscenes[3] != play->csCtx.actorActions[actionIndex]->action) {
- this->cutscenes[3] = play->csCtx.actorActions[actionIndex]->action;
- switch (play->csCtx.actorActions[actionIndex]->action) {
+ if (this->csIdList[3] != play->csCtx.actorCues[cueChannel]->id) {
+ this->csIdList[3] = play->csCtx.actorCues[cueChannel]->id;
+ switch (play->csCtx.actorCues[cueChannel]->id) {
case 1:
this->animIndex = 0;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_IDLE);
break;
+
case 2:
- this->cutscenes[2] = 0;
- this->animIndex = 3;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
+ this->csIdList[2] = 0;
+ this->animIndex = HG_ANIM_LEAN_FORWARD;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_LEAN_FORWARD);
break;
+
case 3:
- this->cutscenes[2] = 0;
- this->animIndex = 5;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 5);
+ this->csIdList[2] = 0;
+ this->animIndex = HG_ANIM_CURL_UP;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_CURL_UP);
break;
+
case 4:
- this->cutscenes[2] = 0;
- this->animIndex = 7;
- if ((this->unk218 == 1) || (this->unk218 == 3)) {
+ this->csIdList[2] = 0;
+ this->animIndex = HG_ANIM_PANIC;
+ if ((this->csIdIndex == HG_CS_GET_MASK) || (this->csIdIndex == HG_CS_SONG_OF_HEALING)) {
func_8019F128(NA_SE_EN_HALF_REDEAD_TRANS);
}
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 7);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_PANIC);
break;
+
case 5:
- this->animIndex = 1;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1);
+ this->animIndex = HG_ANIM_LURCH_FORWARD;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_LURCH_FORWARD);
break;
+
case 6:
- gSaveContext.save.weekEventReg[75] |= 0x20;
- Actor_MarkForDeath(&this->actor);
+ SET_WEEKEVENTREG(WEEKEVENTREG_75_20);
+ Actor_Kill(&this->actor);
break;
}
- } else {
- if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- switch (this->animIndex) {
- case 3:
- this->animIndex = 4;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4);
- break;
- case 5:
- this->animIndex = 6;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 6);
- break;
- }
+ } else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ switch (this->animIndex) {
+ case HG_ANIM_LEAN_FORWARD:
+ this->animIndex = HG_ANIM_REACH_FORWARD;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_REACH_FORWARD);
+ break;
+
+ case HG_ANIM_CURL_UP:
+ this->animIndex = HG_ANIM_CROUCHED_PANIC;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_CROUCHED_PANIC);
+ break;
}
}
+
switch (this->animIndex) {
- case 3:
- case 4:
+ case HG_ANIM_LEAN_FORWARD:
+ case HG_ANIM_REACH_FORWARD:
func_800B9010(&this->actor, NA_SE_EN_HALF_REDEAD_LOOP - SFX_FLAG);
break;
- case 5:
- case 6:
+
+ case HG_ANIM_CURL_UP:
+ case HG_ANIM_CROUCHED_PANIC:
func_800B9010(&this->actor, NA_SE_EN_HALF_REDEAD_SCREAME - SFX_FLAG);
break;
- case 7:
- if ((this->unk218 == 0) || (this->unk218 == 2)) {
+
+ case HG_ANIM_PANIC:
+ if ((this->csIdIndex == HG_CS_FIRST_ENCOUNTER) || (this->csIdIndex == HG_CS_SUBSEQUENT_ENCOUNTER)) {
func_800B9010(&this->actor, NA_SE_EN_HALF_REDEAD_SCREAME - SFX_FLAG);
}
break;
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex);
+
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
return;
- } else if (play->csCtx.state == 0) {
- func_80BCF354(this);
+
+ } else if (play->csCtx.state == CS_STATE_IDLE) {
+ EnHg_SetupWait(this);
}
- this->cutscenes[3] = 0x63;
+
+ this->csIdList[3] = 99;
}
-void func_80BCFC0C(EnHg* this, PlayState* play) {
+void EnHg_WaitForPlayerAction(EnHg* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (this->actor.colChkInfo.health == 1 && !(fabsf(this->actor.playerHeightRel) >= 80.0f)) {
- if (player->stateFlags2 & 0x08000000) {
- if (!D_80BD00C8) {
- play_sound(NA_SE_SY_TRE_BOX_APPEAR);
- }
- D_80BD00C8 = true;
- } else {
- D_80BD00C8 = false;
+ // If the player has gone upstairs this interaction will not trigger
+ if ((this->actor.colChkInfo.health != 1) || (fabsf(this->actor.playerHeightRel) >= 80.0f)) {
+ return;
+ }
+
+ if (player->stateFlags2 & PLAYER_STATE2_8000000) {
+ if (!sHasSoundPlayed) {
+ play_sound(NA_SE_SY_TRE_BOX_APPEAR);
}
- if (play->msgCtx.ocarinaMode == 3) {
- if (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING &&
- gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) {
- if (INV_CONTENT(ITEM_MASK_GIBDO) == ITEM_MASK_GIBDO) {
- this->unk218 = 3;
+ sHasSoundPlayed = true;
+ } else {
+ sHasSoundPlayed = false;
+ }
+
+ if (play->msgCtx.ocarinaMode == 3) {
+ if ((play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) &&
+ (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) {
+ if (INV_CONTENT(ITEM_MASK_GIBDO) == ITEM_MASK_GIBDO) {
+ this->csIdIndex = HG_CS_SONG_OF_HEALING;
+ } else {
+ this->csIdIndex = HG_CS_GET_MASK;
+ }
+
+ EnHg_SetupCutscene(this);
+ }
+
+ } else {
+ if ((this->actor.xzDistToPlayer < 60.0f) && (fabsf(this->actor.playerHeightRel) < 40.0f)) {
+ if ((this->actionFunc != EnHg_PlayCutscene) && (this->actionFunc != EnHg_HandleCsAction)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_61_02)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_61_02);
+ this->csIdIndex = HG_CS_FIRST_ENCOUNTER;
} else {
- this->unk218 = 1;
+ this->csIdIndex = HG_CS_SUBSEQUENT_ENCOUNTER;
}
- func_80BCF88C(this);
+
+ EnHg_SetupCutscene(this);
+ return;
}
- } else {
- if (this->actor.xzDistToPlayer < 60.0f && fabsf(this->actor.playerHeightRel) < 40.0f) {
- if ((this->actionFunc != func_80BCF8A0) && (this->actionFunc != func_80BCF95C)) {
- if (!(gSaveContext.save.weekEventReg[61] & 2)) {
- gSaveContext.save.weekEventReg[61] |= 2;
- this->unk218 = 0;
- } else {
- this->unk218 = 2;
- }
- func_80BCF88C(this);
- return;
- }
- }
- func_80BCF710(this, play);
}
+
+ EnHg_HandleTatlDialog(this, play);
}
}
@@ -389,10 +425,10 @@ void EnHg_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
SkelAnime_Update(&this->skelAnime);
- func_80BCF7D8(this, play);
- func_80BCFC0C(this, play);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 25.0f, 0.0f, 5);
- func_80BCF778(this, play);
+ EnHg_UpdateCollision(this, play);
+ EnHg_WaitForPlayerAction(this, play);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 25.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
+ EnHg_PlayRedeadSfx(this, play);
}
s32 EnHg_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
@@ -401,9 +437,9 @@ s32 EnHg_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po
void EnHg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
EnHg* this = THIS;
- if (limbIndex == HARFGIBUD_GIBDO_LIMB_EYEBROWS) {
- Matrix_Get(&this->unk1D8);
- } else if (limbIndex == HARFGIBUD_GIBDO_LIMB_HEAD) {
+ if (limbIndex == PAMELAS_FATHER_GIBDO_LIMB_EYEBROWS) {
+ Matrix_Get(&this->mf);
+ } else if (limbIndex == PAMELAS_FATHER_GIBDO_LIMB_HEAD) {
Matrix_MultZero(&this->actor.focus.pos);
}
}
@@ -415,8 +451,8 @@ void EnHg_Draw(Actor* thisx, PlayState* play) {
func_8012C28C(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnHg_OverrideLimbDraw, EnHg_PostLimbDraw, &this->actor);
- Matrix_Put(&this->unk1D8);
+ 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++, gHarfgibudGibdoEyebrowsDL);
+ gSPDisplayList(POLY_OPA_DISP++, gPamelasFatherGibdoEyebrowsDL);
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_Hg/z_en_hg.h b/src/overlays/actors/ovl_En_Hg/z_en_hg.h
index c81d61d49..b79269e9b 100644
--- a/src/overlays/actors/ovl_En_Hg/z_en_hg.h
+++ b/src/overlays/actors/ovl_En_Hg/z_en_hg.h
@@ -14,15 +14,13 @@ typedef struct EnHg {
/* 0x144 */ ColliderCylinder collider;
/* 0x190 */ SkelAnime skelAnime;
/* 0x1D4 */ EnHgActionFunc actionFunc;
- /* 0x1D8 */ MtxF unk1D8;
- /* 0x218 */ s32 unk218;
+ /* 0x1D8 */ MtxF mf;
+ /* 0x218 */ s32 csIdIndex;
/* 0x21C */ s32 animIndex;
- /* 0x220 */ Vec3s jointTable[HARFGIBUD_GIBDO_LIMB_MAX];
- /* 0x292 */ Vec3s morphTable[HARFGIBUD_GIBDO_LIMB_MAX];
+ /* 0x220 */ Vec3s jointTable[PAMELAS_FATHER_GIBDO_LIMB_MAX];
+ /* 0x292 */ Vec3s morphTable[PAMELAS_FATHER_GIBDO_LIMB_MAX];
/* 0x304 */ UNK_TYPE1 pad304[0xC];
- /* 0x310 */ u16 cutscenes[4];
+ /* 0x310 */ u16 csIdList[4];
} EnHg; // size = 0x318
-extern const ActorInit En_Hg_InitVars;
-
#endif // Z_EN_HG_H
diff --git a/src/overlays/actors/ovl_En_Hgo/overlay.cfg b/src/overlays/actors/ovl_En_Hgo/overlay.cfg
deleted file mode 100644
index 242079637..000000000
--- a/src/overlays/actors/ovl_En_Hgo/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Hgo
-z_en_hgo.c
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 53e4e91c3..bbef58b1a 100644
--- a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c
+++ b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c
@@ -15,19 +15,40 @@ void EnHgo_Destroy(Actor* thisx, PlayState* play);
void EnHgo_Update(Actor* thisx, PlayState* play);
void EnHgo_Draw(Actor* thisx, PlayState* play);
-void func_80BD03EC(EnHgo* this);
-void func_80BD0410(EnHgo* this, PlayState* play);
-void func_80BD0434(EnHgo* this, PlayState* play);
-void func_80BD049C(EnHgo* this);
-void func_80BD04E0(EnHgo* this, PlayState* play);
+void EnHgo_SetupDoNothing(EnHgo* this);
+void EnHgo_DoNothing(EnHgo* this, PlayState* play);
+void EnHgo_UpdateCollision(EnHgo* this, PlayState* play);
+void EnHgo_SetupTalk(EnHgo* this);
+void EnHgo_Talk(EnHgo* this, PlayState* play);
void EnHgo_SetupDialogueHandler(EnHgo* this);
void EnHgo_DefaultDialogueHandler(EnHgo* this, PlayState* play);
-void func_80BD06FC(EnHgo* this, PlayState* play);
-s32 func_80BD0898(EnHgo* this, PlayState* play);
+void EnHgo_HandlePlayerChoice(EnHgo* this, PlayState* play);
+s32 EnHgo_HandleCsAction(EnHgo* this, PlayState* play);
s32 EnHgo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx);
void EnHgo_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* pos, Actor* thisx);
-const ActorInit En_Hgo_InitVars = {
+#define TALK_FLAG_NONE 0
+#define TALK_FLAG_HAS_SPOKEN_WITH_HUMAN (1 << 0)
+#define TALK_FLAG_HAS_SPOKEN_WITH_OTHER_MASK_FORM (1 << 1)
+#define TALK_FLAG_HAS_SPOKEN_WITH_GIBDO_MASK (1 << 2)
+
+typedef enum {
+ /* 0 */ HGO_EYE_OPEN,
+ /* 1 */ HGO_EYE_HALF,
+ /* 2 */ HGO_EYE_CLOSED
+} EyeState;
+
+typedef enum {
+ /* 0 */ HGO_ANIM_ARMS_FOLDED,
+ /* 1 */ HGO_ANIM_ASTONISHED,
+ /* 2 */ HGO_ANIM_KNEEL_DOWN_AND_HUG,
+ /* 3 */ HGO_ANIM_CONSOLE,
+ /* 4 */ HGO_ANIM_CONSOLE_HEAD_UP,
+ /* 5 */ HGO_ANIM_REACH_DOWN_TO_LIFT,
+ /* 6 */ HGO_ANIM_TOSS,
+} HgoAnimation;
+
+ActorInit En_Hgo_InitVars = {
ACTOR_EN_HGO,
ACTORCAT_NPC,
FLAGS,
@@ -40,13 +61,13 @@ const ActorInit En_Hgo_InitVars = {
};
static AnimationInfo sAnimationInfo[] = {
- { &object_harfgibud_Anim_00B644, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- { &object_harfgibud_Anim_013684, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
- { &object_harfgibud_Anim_0152EC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
- { &object_harfgibud_Anim_015C70, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
- { &object_harfgibud_Anim_0165F0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
- { &object_harfgibud_Anim_014220, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
- { &object_harfgibud_Anim_014A9C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+ { &gPamelasFatherArmsFoldedAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ { &gPamelasFatherAstonishedAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+ { &gPamelasFatherKneelDownAndHugAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
+ { &gPamelasFatherConsoleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+ { &gPamelasFatherConsoleHeadUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+ { &gPamelasFatherReachDownToLiftAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
+ { &gPamelasFatherTossAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
};
static ColliderCylinderInit sCylinderInit = {
@@ -71,33 +92,28 @@ static ColliderCylinderInit sCylinderInit = {
static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE };
-static TexturePtr sEyeTextures[] = {
- object_harfgibud_Tex_011138,
- object_harfgibud_Tex_011938,
- object_harfgibud_Tex_012138,
-};
-
void EnHgo_Init(Actor* thisx, PlayState* play) {
- EnHgo* this = THIS;
s32 pad;
+ EnHgo* this = THIS;
ActorShape_Init(&thisx->shape, 0.0f, ActorShadow_DrawCircle, 36.0f);
- SkelAnime_InitFlex(play, &this->skelAnime, &gHarfgibudHumanSkel, &object_harfgibud_Anim_00B644, this->jointTable,
- this->morphTable, HARFGIBUD_HUMAN_LIMB_MAX);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gPamelasFatherHumanSkel, &gPamelasFatherArmsFoldedAnim,
+ this->jointTable, this->morphTable, PAMELAS_FATHER_HUMAN_LIMB_MAX);
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo2(&thisx->colChkInfo, NULL, &sColChkInfoInit);
thisx->targetMode = 6;
- this->unk_30C = 0;
- this->unk_30E = 0;
- this->unk_314 = 0;
- this->unk_310 = 0;
- this->unk_312 = 0;
- if ((gSaveContext.save.weekEventReg[75] & 0x20) || (gSaveContext.save.weekEventReg[52] & 0x20)) {
- func_80BD049C(this);
+
+ this->eyeIndex = 0;
+ this->blinkTimer = 0;
+ this->textId = 0;
+ this->talkFlags = TALK_FLAG_NONE;
+ this->isInCutscene = false;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) || CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE)) {
+ EnHgo_SetupTalk(this);
} else {
thisx->draw = NULL;
- func_80BD03EC(this);
+ EnHgo_SetupDoNothing(this);
}
}
@@ -107,59 +123,59 @@ void EnHgo_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->collider);
}
-void func_80BD03EC(EnHgo* this) {
+void EnHgo_SetupDoNothing(EnHgo* this) {
this->actor.flags &= ~ACTOR_FLAG_1;
- this->actionFunc = func_80BD0410;
+ this->actionFunc = EnHgo_DoNothing;
}
-void func_80BD0410(EnHgo* this, PlayState* play) {
+void EnHgo_DoNothing(EnHgo* this, PlayState* play) {
}
-void func_80BD0420(EnHgo* this) {
- this->actionFunc = func_80BD0434;
+void EnHgo_SetupInitCollision(EnHgo* this) {
+ this->actionFunc = EnHgo_UpdateCollision;
}
-void func_80BD0434(EnHgo* this, PlayState* play) {
+void EnHgo_UpdateCollision(EnHgo* this, PlayState* play) {
this->collider.dim.pos.x = this->actor.focus.pos.x;
this->collider.dim.pos.y = this->actor.world.pos.y;
this->collider.dim.pos.z = this->actor.focus.pos.z;
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
}
-void func_80BD049C(EnHgo* this) {
+void EnHgo_SetupTalk(EnHgo* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
- this->actionFunc = func_80BD04E0;
+ this->actionFunc = EnHgo_Talk;
}
-void func_80BD04E0(EnHgo* this, PlayState* play) {
+void EnHgo_Talk(EnHgo* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
if (Player_GetMask(play) == PLAYER_MASK_GIBDO) {
- if (!(this->unk_310 & 4)) {
- this->unk_310 |= 4;
+ if (!(this->talkFlags & TALK_FLAG_HAS_SPOKEN_WITH_GIBDO_MASK)) {
+ this->talkFlags |= TALK_FLAG_HAS_SPOKEN_WITH_GIBDO_MASK;
Message_StartTextbox(play, 0x15A5, &this->actor);
- this->unk_314 = 0x15A5; // That mask is a gibdo
+ this->textId = 0x15A5; // That mask is a gibdo
} else {
Message_StartTextbox(play, 0x15A7, &this->actor);
- this->unk_314 = 0x15A7; // can I research that mask
+ this->textId = 0x15A7; // can I research that mask
}
} else if (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) {
- if (!(this->unk_310 & 1)) {
- this->unk_310 |= 1;
+ if (!(this->talkFlags & TALK_FLAG_HAS_SPOKEN_WITH_HUMAN)) {
+ this->talkFlags |= TALK_FLAG_HAS_SPOKEN_WITH_HUMAN;
Message_StartTextbox(play, 0x158F, &this->actor);
- this->unk_314 = 0x158F; // Isn't this a fairy
+ this->textId = 0x158F; // Isn't this a fairy
} else {
Message_StartTextbox(play, 0x1593, &this->actor);
- this->unk_314 = 0x1593; // Never seen a fairy this lively
+ this->textId = 0x1593; // Never seen a fairy this lively
}
} else {
- if (!(this->unk_310 & 2)) {
- this->unk_310 |= 2;
+ if (!(this->talkFlags & TALK_FLAG_HAS_SPOKEN_WITH_OTHER_MASK_FORM)) {
+ this->talkFlags |= TALK_FLAG_HAS_SPOKEN_WITH_OTHER_MASK_FORM;
Message_StartTextbox(play, 0x1595, &this->actor);
- this->unk_314 = 0x1595; // ghost radar is reacting
+ this->textId = 0x1595; // ghost radar is reacting
} else {
Message_StartTextbox(play, 0x1598, &this->actor);
- this->unk_314 = 0x1598; // you seem to be similar to a ghost
+ this->textId = 0x1598; // you seem to be similar to a ghost
}
}
EnHgo_SetupDialogueHandler(this);
@@ -182,12 +198,12 @@ void EnHgo_DefaultDialogueHandler(EnHgo* this, PlayState* play) {
break;
case TEXT_STATE_5:
- func_80BD06FC(this, play);
+ EnHgo_HandlePlayerChoice(this, play);
break;
case TEXT_STATE_DONE:
if (Message_ShouldAdvance(play)) {
- func_80BD049C(this);
+ EnHgo_SetupTalk(this);
}
break;
}
@@ -196,140 +212,161 @@ void EnHgo_DefaultDialogueHandler(EnHgo* this, PlayState* play) {
this->actor.shape.rot.y = this->actor.world.rot.y;
}
-void func_80BD06FC(EnHgo* this, PlayState* play) {
+// Handles the next dialogue based on player's selection
+void EnHgo_HandlePlayerChoice(EnHgo* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
- switch (this->unk_314) {
+ switch (this->textId) {
case 0x158F:
Message_StartTextbox(play, 0x1590, &this->actor);
- this->unk_314 = 0x1590;
+ this->textId = 0x1590;
break;
+
case 0x1590:
- if (gSaveContext.save.weekEventReg[14] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04)) {
Message_StartTextbox(play, 0x1591, &this->actor);
- this->unk_314 = 0x1591;
+ this->textId = 0x1591;
break;
}
+
Message_StartTextbox(play, 0x1592, &this->actor);
- this->unk_314 = 0x1592;
+ this->textId = 0x1592;
break;
+
case 0x1591:
Message_StartTextbox(play, 0x1592, &this->actor);
- this->unk_314 = 0x1592;
+ this->textId = 0x1592;
break;
+
case 0x1593:
Message_StartTextbox(play, 0x1594, &this->actor);
- this->unk_314 = 0x1594;
+ this->textId = 0x1594;
break;
+
case 0x1595:
Message_StartTextbox(play, 0x1596, &this->actor);
- this->unk_314 = 0x1596;
+ this->textId = 0x1596;
break;
+
case 0x1596:
Message_StartTextbox(play, 0x1597, &this->actor);
- this->unk_314 = 0x1597;
+ this->textId = 0x1597;
break;
+
case 0x1598:
Message_StartTextbox(play, 0x1599, &this->actor);
- this->unk_314 = 0x1599;
+ this->textId = 0x1599;
break;
+
case 0x15A5:
Message_StartTextbox(play, 0x15A6, &this->actor);
- this->unk_314 = 0x15A6;
+ this->textId = 0x15A6;
break;
+
case 0x15A6:
Message_StartTextbox(play, 0x15A7, &this->actor);
- this->unk_314 = 0x15A7;
+ this->textId = 0x15A7;
break;
+
case 0x15A7:
- func_801477B4(play);
- func_80BD049C(this);
+ Message_CloseTextbox(play);
+ EnHgo_SetupTalk(this);
break;
}
}
}
-s32 func_80BD0898(EnHgo* this, PlayState* play) {
- s32 actionIndex;
+s32 EnHgo_HandleCsAction(EnHgo* this, PlayState* play) {
+ s32 cueChannel;
- if (Cutscene_CheckActorAction(play, 486)) {
- actionIndex = Cutscene_GetActorActionIndex(play, 486);
- if (this->unk_316 != play->csCtx.actorActions[actionIndex]->action) {
- this->unk_316 = play->csCtx.actorActions[actionIndex]->action;
- switch (play->csCtx.actorActions[actionIndex]->action) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_486)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_486);
+ if (this->cueId != play->csCtx.actorCues[cueChannel]->id) {
+ this->cueId = play->csCtx.actorCues[cueChannel]->id;
+ switch (play->csCtx.actorCues[cueChannel]->id) {
case 1:
- this->unk_218 = 0;
+ this->animIndex = HGO_ANIM_ARMS_FOLDED;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
break;
+
case 2:
this->actor.draw = EnHgo_Draw;
- this->unk_218 = 1;
+ this->animIndex = HGO_ANIM_ASTONISHED;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1);
break;
+
case 3:
- this->unk_218 = 2;
+ this->animIndex = HGO_ANIM_KNEEL_DOWN_AND_HUG;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
break;
+
case 4:
- this->unk_218 = 3;
+ this->animIndex = HGO_ANIM_CONSOLE;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
break;
+
case 5:
- this->unk_218 = 4;
+ this->animIndex = HGO_ANIM_CONSOLE_HEAD_UP;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4);
break;
+
case 6:
- this->unk_218 = 5;
+ this->animIndex = HGO_ANIM_REACH_DOWN_TO_LIFT;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 5);
break;
}
} else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- switch (this->unk_218) {
- case 1:
- if ((Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) && (this->unk_312 == 0)) {
- this->unk_312 = 1;
+ switch (this->animIndex) {
+ case HGO_ANIM_ASTONISHED:
+ if ((Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) &&
+ (this->isInCutscene == false)) {
+ this->isInCutscene = true;
if ((gSaveContext.sceneLayer == 0) &&
- ((play->csCtx.currentCsIndex == 2) || (play->csCtx.currentCsIndex == 4))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_GBVO02);
+ ((play->csCtx.scriptIndex == 2) || (play->csCtx.scriptIndex == 4))) {
+ Actor_PlaySfx(&this->actor, NA_SE_VO_GBVO02);
}
}
break;
- case 2:
- this->unk_218 = 3;
+
+ case HGO_ANIM_KNEEL_DOWN_AND_HUG:
+ this->animIndex = HGO_ANIM_CONSOLE;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
break;
- case 5:
- this->unk_218 = 6;
+
+ case HGO_ANIM_REACH_DOWN_TO_LIFT:
+ this->animIndex = HGO_ANIM_TOSS;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 6);
}
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
return true;
}
- if ((play->csCtx.state == 0) && (((gSaveContext.save.weekEventReg[75]) & 0x20)) &&
- (this->actionFunc == func_80BD0410)) {
+
+ if ((play->csCtx.state == CS_STATE_IDLE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) &&
+ (this->actionFunc == EnHgo_DoNothing)) {
this->actor.shape.rot.y = this->actor.world.rot.y;
Actor_Spawn(&play->actorCtx, play, ACTOR_ELF_MSG2, this->actor.focus.pos.x, this->actor.focus.pos.y,
this->actor.focus.pos.z, 7, 0, 0, 0x7F5A);
- func_80BD0420(this);
+ EnHgo_SetupInitCollision(this);
}
- this->unk_316 = 0x63;
+
+ this->cueId = 99;
return false;
}
-void func_80BD0B8C(EnHgo* this, PlayState* play) {
+void EnHgo_UpdateModel(EnHgo* this, PlayState* play) {
Actor_TrackPlayer(play, &this->actor, &this->headRot, &this->torsoRot, this->actor.focus.pos);
- if (this->unk_30E > 2) {
- this->unk_30E--;
- } else if (this->unk_30E == 2) {
- this->unk_30C = 1;
- this->unk_30E = 1;
- } else if (this->unk_30E == 1) {
- this->unk_30C = 2;
- this->unk_30E = 0;
+ if (this->blinkTimer > 2) {
+ this->blinkTimer--;
+ } else if (this->blinkTimer == 2) {
+ this->eyeIndex = HGO_EYE_HALF;
+ this->blinkTimer = 1;
+ } else if (this->blinkTimer == 1) {
+ this->eyeIndex = HGO_EYE_CLOSED;
+ this->blinkTimer = 0;
} else {
- this->unk_30C = 0;
- this->unk_30E = 60;
+ this->eyeIndex = HGO_EYE_OPEN;
+ this->blinkTimer = 60;
}
}
@@ -339,13 +376,13 @@ void EnHgo_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
SkelAnime_Update(&this->skelAnime);
- if (func_80BD0898(this, play)) {
+ if (EnHgo_HandleCsAction(this, play)) {
Actor_TrackNone(&this->headRot, &this->torsoRot);
- } else if (this->actionFunc != func_80BD0410) {
- if (this->actionFunc != func_80BD0434) {
+ } else if (this->actionFunc != EnHgo_DoNothing) {
+ if (this->actionFunc != EnHgo_UpdateCollision) {
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
- func_80BD0B8C(this, play);
+ EnHgo_UpdateModel(this, play);
}
}
}
@@ -353,7 +390,7 @@ void EnHgo_Update(Actor* thisx, PlayState* play) {
s32 EnHgo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
EnHgo* this = THIS;
- if (limbIndex == HARFGIBUD_HUMAN_LIMB_HEAD) {
+ if (limbIndex == PAMELAS_FATHER_HUMAN_LIMB_HEAD) {
rot->x += this->headRot.y;
rot->z += this->headRot.x;
}
@@ -363,22 +400,28 @@ s32 EnHgo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
void EnHgo_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* pos, Actor* thisx) {
EnHgo* this = THIS;
- if (limbIndex == HARFGIBUD_HUMAN_LIMB_HEAD) {
- Matrix_Get(&this->unk_1D8);
+ if (limbIndex == PAMELAS_FATHER_HUMAN_LIMB_HEAD) {
+ Matrix_Get(&this->mf);
Matrix_MultZero(&this->actor.focus.pos);
}
}
+static TexturePtr sEyeTextures[] = {
+ gPamelasFatherHumanEyeOpenTex,
+ gPamelasFatherHumanEyeHalfTex,
+ gPamelasFatherHumanEyeClosedTex,
+};
+
void EnHgo_Draw(Actor* thisx, PlayState* play) {
EnHgo* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
func_8012C28C(play->state.gfxCtx);
- gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->unk_30C]));
+ 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->unk_1D8);
+ 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++, gHarfgibudHumanEyebrowsDL);
+ gSPDisplayList(POLY_OPA_DISP++, gPamelasFatherHumanEyebrowsDL);
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.h b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.h
index 34e4ebdc4..da7b7c40e 100644
--- a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.h
+++ b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.h
@@ -13,20 +13,18 @@ typedef struct EnHgo {
/* 0x144 */ ColliderCylinder collider;
/* 0x190 */ SkelAnime skelAnime;
/* 0x1D4 */ EnHgoActionFunc actionFunc;
- /* 0x1D8 */ MtxF unk_1D8;
- /* 0x218 */ s32 unk_218;
- /* 0x21C */ Vec3s jointTable[HARFGIBUD_HUMAN_LIMB_MAX];
- /* 0x28E */ Vec3s morphTable[HARFGIBUD_HUMAN_LIMB_MAX];
+ /* 0x1D8 */ MtxF mf;
+ /* 0x218 */ s32 animIndex;
+ /* 0x21C */ Vec3s jointTable[PAMELAS_FATHER_HUMAN_LIMB_MAX];
+ /* 0x28E */ Vec3s morphTable[PAMELAS_FATHER_HUMAN_LIMB_MAX];
/* 0x300 */ Vec3s headRot;
/* 0x306 */ Vec3s torsoRot; // Set, but not used
- /* 0x30C */ s16 unk_30C;
- /* 0x30E */ s16 unk_30E;
- /* 0x310 */ s16 unk_310;
- /* 0x312 */ s16 unk_312;
- /* 0x314 */ u16 unk_314;
- /* 0x316 */ u16 unk_316;
+ /* 0x30C */ s16 eyeIndex;
+ /* 0x30E */ s16 blinkTimer;
+ /* 0x310 */ s16 talkFlags;
+ /* 0x312 */ s16 isInCutscene;
+ /* 0x314 */ u16 textId;
+ /* 0x316 */ u16 cueId;
} EnHgo; // size = 0x318
-extern const ActorInit En_Hgo_InitVars;
-
#endif // Z_EN_HGO_H
diff --git a/src/overlays/actors/ovl_En_Hidden_Nuts/overlay.cfg b/src/overlays/actors/ovl_En_Hidden_Nuts/overlay.cfg
deleted file mode 100644
index 491a14d60..000000000
--- a/src/overlays/actors/ovl_En_Hidden_Nuts/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Hidden_Nuts
-z_en_hidden_nuts.c
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 81cb9850c..29a7c6a8e 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
@@ -31,7 +31,7 @@ void func_80BDBB48(EnHiddenNuts* this, PlayState* play);
void func_80BDBE70(EnHiddenNuts* this, PlayState* play);
void func_80BDBED4(EnHiddenNuts* this, PlayState* play);
-const ActorInit En_Hidden_Nuts_InitVars = {
+ActorInit En_Hidden_Nuts_InitVars = {
ACTOR_EN_HIDDEN_NUTS,
ACTORCAT_PROP,
FLAGS,
@@ -95,17 +95,17 @@ void EnHiddenNuts_Init(Actor* thisx, PlayState* play) {
}
if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
if (this->unk_21E == 0x1F) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
this->path = SubS_GetPathByIndex(play, this->unk_21E, 0x3F);
- this->unk_226 = this->actor.cutscene;
+ this->csId = this->actor.csId;
func_801A5080(2);
func_80BDB268(this);
}
@@ -145,9 +145,9 @@ void func_80BDB2B8(EnHiddenNuts* this, PlayState* play) {
Player* player = GET_PLAYER(play);
s32 i;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NEMURI_SLEEP - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NEMURI_SLEEP - SFX_FLAG);
- if (player->stateFlags2 & 0x8000000) {
+ if (player->stateFlags2 & PLAYER_STATE2_8000000) {
if (this->unk_20A == 0) {
play_sound(NA_SE_SY_TRE_BOX_APPEAR);
this->unk_20A = 1;
@@ -202,7 +202,7 @@ void func_80BDB580(EnHiddenNuts* this) {
void func_80BDB59C(EnHiddenNuts* this, PlayState* play) {
s32 i;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NEMURI_SLEEP - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NEMURI_SLEEP - SFX_FLAG);
if (this->unk_218 == 0) {
Vec3f sp98 = { 0.0f, 0.0f, 0.0f };
@@ -226,16 +226,16 @@ void func_80BDB59C(EnHiddenNuts* this, PlayState* play) {
}
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80BDB268(this);
}
}
void func_80BDB788(EnHiddenNuts* this) {
this->actor.flags |= ACTOR_FLAG_10;
- this->actor.flags |= ACTOR_FLAG_8000000;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_UP);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_DEAD);
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DEAD);
this->unk_21A = 2;
this->actionFunc = func_80BDB7E8;
}
@@ -243,18 +243,18 @@ void func_80BDB788(EnHiddenNuts* this) {
void func_80BDB7E8(EnHiddenNuts* this, PlayState* play) {
Vec3f sp3C;
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->unk_226);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csId);
return;
}
- if (!ActorCutscene_GetCanPlayNext(this->unk_226)) {
- ActorCutscene_SetIntentToPlay(this->unk_226);
+ if (!CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_Queue(this->csId);
return;
}
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_226, &this->actor);
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->actor);
this->unk_228 = -1200.0f;
Math_Vec3f_Copy(&sp3C, &this->actor.world.pos);
@@ -262,7 +262,7 @@ void func_80BDB7E8(EnHiddenNuts* this, PlayState* play) {
EffectSsHahen_SpawnBurst(play, &sp3C, 4.0f, 0, 10, 3, 15, HAHEN_OBJECT_DEFAULT, 10, NULL);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_UP);
func_80BDB1B4(this, 7);
this->actionFunc = func_80BDB8F4;
}
@@ -287,7 +287,7 @@ void func_80BDB978(EnHiddenNuts* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 8.0f) ||
Animation_OnFrame(&this->skelAnime, 18.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUT_FAINT);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUT_FAINT);
}
if (this->unk_22C <= curFrame) {
@@ -309,14 +309,14 @@ void func_80BDBA28(EnHiddenNuts* this, PlayState* play) {
EffectSsHahen_SpawnBurst(play, &sp44, 4.0f, 0, 10, 3, 15, HAHEN_OBJECT_DEFAULT, 10, NULL);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_UP);
this->unk_208 = 1;
if ((this->path != NULL) && !SubS_CopyPointFromPath(this->path, this->unk_208, &this->unk_20C)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
- this->actor.speedXZ = 2.0f;
+ this->actor.speed = 2.0f;
this->actor.gravity = -2.0f;
this->actor.velocity.y = 4.0f;
this->actor.world.rot.y = Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_20C);
@@ -345,14 +345,14 @@ void func_80BDBB48(EnHiddenNuts* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 5.0f) ||
Animation_OnFrame(&this->skelAnime, 10.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_WALK_WATER);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_WALK_WATER);
sp4E = 1;
}
}
if ((sp4E != 0) && (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 5.0f) ||
Animation_OnFrame(&this->skelAnime, 10.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_WALK);
}
Math_SmoothStepToS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_20C), 1, 0x1388, 0);
@@ -360,7 +360,7 @@ void func_80BDBB48(EnHiddenNuts* this, PlayState* play) {
if (this->unk_220 == 2) {
if (this->unk_22C <= sp58) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.velocity.y = 0.0f;
func_80BDB1B4(this, 6);
}
@@ -377,7 +377,7 @@ void func_80BDBB48(EnHiddenNuts* this, PlayState* play) {
if (this->unk_208 >= this->path->count) {
func_80BDBE70(this, play);
} else if ((this->path != NULL) && !SubS_CopyPointFromPath(this->path, this->unk_208, &this->unk_20C)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
}
@@ -400,9 +400,9 @@ void func_80BDBED4(EnHiddenNuts* this, PlayState* play) {
Math_Vec3f_Copy(&sp38, &this->actor.world.pos);
sp38.y = this->actor.floorHeight;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_DOWN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DOWN);
EffectSsHahen_SpawnBurst(play, &sp38, 4.0f, 0, 10, 3, 15, HAHEN_OBJECT_DEFAULT, 10, NULL);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -423,7 +423,9 @@ void EnHiddenNuts_Update(Actor* thisx, PlayState* play) {
if (this->unk_21A >= 4) {
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 40.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 40.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
}
Collider_UpdateCylinder(&this->actor, &this->collider);
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 a8edd1d75..435e4662c 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
@@ -26,13 +26,11 @@ typedef struct EnHiddenNuts {
/* 0x21E */ s16 unk_21E;
/* 0x220 */ s32 unk_220;
/* 0x224 */ s16 unk_224;
- /* 0x226 */ s16 unk_226;
+ /* 0x226 */ s16 csId;
/* 0x228 */ f32 unk_228;
/* 0x22C */ f32 unk_22C;
/* 0x230 */ UNK_TYPE1 unk230[4];
/* 0x234 */ ColliderCylinder collider;
} EnHiddenNuts; // size = 0x280
-extern const ActorInit En_Hidden_Nuts_InitVars;
-
#endif // Z_EN_HIDDEN_NUTS_H
diff --git a/src/overlays/actors/ovl_En_Hint_Skb/overlay.cfg b/src/overlays/actors/ovl_En_Hint_Skb/overlay.cfg
deleted file mode 100644
index 95449a9a4..000000000
--- a/src/overlays/actors/ovl_En_Hint_Skb/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Hint_Skb
-z_en_hint_skb.c
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 46a52a9fa..09a110dbf 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
@@ -39,7 +39,7 @@ s32 func_80C21414(EnHintSkb* this);
void func_80C21468(EnHintSkb* this, PlayState* play);
void func_80C215E4(PlayState* play, EnHintSkb* this, Vec3f* arg2);
-const ActorInit En_Hint_Skb_InitVars = {
+ActorInit En_Hint_Skb_InitVars = {
ACTOR_EN_HINT_SKB,
ACTORCAT_NPC,
FLAGS,
@@ -182,13 +182,13 @@ void func_80C1FE20(EnHintSkb* this, PlayState* play) {
void func_80C1FE30(EnHintSkb* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
- this->actor.speedXZ = 1.6f;
+ this->actor.speed = 1.6f;
this->actionFunc = func_80C1FE80;
}
void func_80C1FE80(EnHintSkb* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, 8.0f) || Animation_OnFrame(&this->skelAnime, 15.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_WALK);
}
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 1, 750, 0);
this->actor.world.rot.y = this->actor.shape.rot.y;
@@ -199,7 +199,7 @@ void func_80C1FE80(EnHintSkb* this, PlayState* play) {
void func_80C1FF30(EnHintSkb* this) {
this->collider.base.atFlags &= ~AT_BOUNCED;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
this->actionFunc = func_80C1FF88;
}
@@ -211,7 +211,7 @@ void func_80C1FF88(EnHintSkb* this, PlayState* play) {
}
if (Animation_OnFrame(&this->skelAnime, 3.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_ATTACK);
}
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
@@ -241,23 +241,23 @@ void func_80C200B8(EnHintSkb* this, PlayState* play) {
}
void func_80C2011C(EnHintSkb* this) {
- if (this->actor.bgCheckFlags & 1) {
- this->actor.speedXZ = 0.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ this->actor.speed = 0.0f;
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
this->actionFunc = func_80C2016C;
}
void func_80C2016C(EnHintSkb* this, PlayState* play) {
- if (this->actor.bgCheckFlags & 2) {
- this->actor.speedXZ = 0.0f;
- } else if (this->actor.bgCheckFlags & 1) {
- if (this->actor.speedXZ < 0.0f) {
- this->actor.speedXZ += 0.05f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
+ this->actor.speed = 0.0f;
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ if (this->actor.speed < 0.0f) {
+ this->actor.speed += 0.05f;
}
}
- if ((this->actor.colorFilterTimer == 0) && (this->actor.bgCheckFlags & 1)) {
+ if ((this->actor.colorFilterTimer == 0) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
if (this->actor.colChkInfo.health == 0) {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EN_STALKID_DEAD);
func_80C20484(this);
@@ -276,40 +276,41 @@ void func_80C20274(EnHintSkb* this) {
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 8);
this->actor.gravity = -1.0f;
- this->actor.speedXZ = 1.0f;
+ this->actor.speed = 1.0f;
} else {
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
- if (this->actor.bgCheckFlags & 1) {
- this->actor.speedXZ = -4.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ this->actor.speed = -4.0f;
}
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE);
this->actionFunc = func_80C20334;
}
void func_80C20334(EnHintSkb* this, PlayState* play) {
- if (this->actor.bgCheckFlags & 2) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
s32 i;
for (i = 0; i < 10; i++) {
func_80C215E4(play, this, &this->actor.world.pos);
}
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
- if (this->actor.bgCheckFlags & 1) {
- if (this->actor.speedXZ < 0.0f) {
- this->actor.speedXZ += 0.05f;
- } else if (this->actor.speedXZ != 0.0f) {
- this->actor.speedXZ -= 0.05f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ if (this->actor.speed < 0.0f) {
+ this->actor.speed += 0.05f;
+ } else if (this->actor.speed != 0.0f) {
+ this->actor.speed -= 0.05f;
}
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 1, 2500, 0);
}
Math_SmoothStepToS(&this->actor.shape.rot.x, 0, 16, 2000, 100);
- if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) && (this->actor.bgCheckFlags & 1)) {
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) &&
+ (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
this->actor.world.rot = this->actor.shape.rot;
func_80C1FE30(this);
}
@@ -318,8 +319,8 @@ void func_80C20334(EnHintSkb* this, PlayState* play) {
void func_80C20484(EnHintSkb* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4);
this->unk_3E8 |= 4;
- if (this->actor.bgCheckFlags & 1) {
- this->actor.speedXZ = -6.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ this->actor.speed = -6.0f;
}
this->actionFunc = func_80C204F0;
}
@@ -330,14 +331,14 @@ void func_80C204F0(EnHintSkb* this, PlayState* play) {
}
Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0x10);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
void func_80C20540(EnHintSkb* this) {
- if (this->actor.bgCheckFlags & 1) {
- this->actor.speedXZ = 0.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ this->actor.speed = 0.0f;
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
this->actionFunc = func_80C20590;
}
@@ -347,9 +348,9 @@ void func_80C20590(EnHintSkb* this, PlayState* play) {
this->drawDmgEffScale = 0.0f;
this->drawDmgEffAlpha = 0.0f;
if (this->actor.colChkInfo.health != 0) {
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE);
this->unk_3E8 |= 1;
func_80C20274(this);
} else {
@@ -362,8 +363,8 @@ void func_80C20590(EnHintSkb* this, PlayState* play) {
}
void func_80C2066C(EnHintSkb* this) {
- if (this->actor.bgCheckFlags & 1) {
- this->actor.speedXZ = 0.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ this->actor.speed = 0.0f;
}
this->actionFunc = func_80C2069C;
}
@@ -374,9 +375,9 @@ void func_80C2069C(EnHintSkb* this, PlayState* play) {
this->drawDmgEffScale = 0.0f;
this->drawDmgEffAlpha = 0.0f;
if (this->actor.colChkInfo.health != 0) {
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE);
this->unk_3E8 |= 1;
func_80C20274(this);
} else {
@@ -388,7 +389,7 @@ void func_80C2069C(EnHintSkb* this, PlayState* play) {
void func_80C2075C(EnHintSkb* this) {
this->unk_3E0 = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = func_80C2077C;
}
@@ -401,7 +402,7 @@ void func_80C2077C(EnHintSkb* this, PlayState* play) {
this->unk_3E6 = 0x1147;
if (this->skelAnime.animation == &object_skb_Anim_00697C) {
play->msgCtx.msgMode = 0x44;
- this->actor.speedXZ = 2.4f;
+ this->actor.speed = 2.4f;
this->actor.gravity = -1.0f;
this->actor.velocity.y = 3.0f;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 8);
@@ -452,10 +453,10 @@ void func_80C208D0(EnHintSkb* this, PlayState* play) {
}
if (this->unk_3E6 == 0x1147) {
- if (this->actor.bgCheckFlags & 2) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
s32 i;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
for (i = 0; i < 10; i++) {
func_80C215E4(play, this, &this->actor.world.pos);
@@ -470,7 +471,7 @@ void func_80C208D0(EnHintSkb* this, PlayState* play) {
}
}
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 5, 0x71C, 0xB6);
this->actor.shape.rot.y = this->actor.world.rot.y;
}
@@ -569,7 +570,7 @@ void func_80C20C24(EnHintSkb* this, PlayState* play) {
break;
case 0x1151:
- func_801477B4(play);
+ Message_CloseTextbox(play);
if (this->unk_3E8 & 0x10) {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EN_STALKID_DEAD);
func_80C20484(this);
@@ -611,7 +612,8 @@ void func_80C20D64(EnHintSkb* this, PlayState* play) {
void func_80C20E90(EnHintSkb* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if ((this->actor.bgCheckFlags & 0x60) && (this->actor.depthInWater >= 40.0f)) {
+ if ((this->actor.bgCheckFlags & (BGCHECKFLAG_WATER | BGCHECKFLAG_WATER_TOUCH)) &&
+ (this->actor.depthInWater >= 40.0f)) {
this->actor.colChkInfo.health = 0;
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EN_STALKID_DEAD);
func_80C20484(this);
@@ -661,12 +663,12 @@ void func_80C20E90(EnHintSkb* this, PlayState* play) {
this->drawDmgEffTimer = 40;
this->drawDmgEffAlpha = 1.0f;
this->drawDmgEffScale = 0.0f;
- Actor_SetColorFilter(&this->actor, 0, 120, 0, 40);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 120, COLORFILTER_BUFFLAG_OPA, 40);
func_80C2011C(this);
break;
case 1:
- Actor_SetColorFilter(&this->actor, 0, 120, 0, 40);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 120, COLORFILTER_BUFFLAG_OPA, 40);
func_80C2011C(this);
break;
@@ -675,14 +677,14 @@ void func_80C20E90(EnHintSkb* this, PlayState* play) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
this->drawDmgEffAlpha = 1.0f;
this->drawDmgEffScale = 0.0f;
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_DAMAGE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE);
this->unk_3E8 |= 1;
func_80C20274(this);
break;
case 3:
if (this->actor.colChkInfo.health != 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE);
this->drawDmgEffTimer = 80;
} else {
this->drawDmgEffTimer = 3;
@@ -690,7 +692,7 @@ void func_80C20E90(EnHintSkb* this, PlayState* play) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_SFX;
this->drawDmgEffAlpha = 1.0f;
this->drawDmgEffScale = 0.5f;
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
func_80C20540(this);
break;
case 4:
@@ -698,8 +700,8 @@ void func_80C20E90(EnHintSkb* this, PlayState* play) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
this->drawDmgEffAlpha = 1.0f;
this->drawDmgEffScale = 0.5f;
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_DAMAGE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
func_80C2066C(this);
break;
@@ -717,8 +719,8 @@ void func_80C20E90(EnHintSkb* this, PlayState* play) {
}
case 13:
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_DAMAGE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
func_80C20274(this);
break;
@@ -836,7 +838,9 @@ void EnHintSkb_Update(Actor* thisx, PlayState* play) {
}
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 30.0f, 60.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 30.0f, 60.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
func_80C21250(this, play);
func_80C20D64(this, play);
func_80C21320(this, play);
diff --git a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.h b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.h
index 44fd8c4ef..22f72084d 100644
--- a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.h
+++ b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.h
@@ -32,6 +32,4 @@ typedef struct EnHintSkb {
/* 0x3E9 */ u8 drawDmgEffType;
} EnHintSkb; // size = 0x3EC
-extern const ActorInit En_Hint_Skb_InitVars;
-
#endif // Z_EN_HINT_SKB_H
diff --git a/src/overlays/actors/ovl_En_Hit_Tag/overlay.cfg b/src/overlays/actors/ovl_En_Hit_Tag/overlay.cfg
deleted file mode 100644
index e7ee964c9..000000000
--- a/src/overlays/actors/ovl_En_Hit_Tag/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Hit_Tag
-z_en_hit_tag.c
diff --git a/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.c b/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.c
index 17dfeb34e..c76d92106 100644
--- a/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.c
+++ b/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.c
@@ -16,7 +16,7 @@ void EnHitTag_Update(Actor* thisx, PlayState* play);
void EnHitTag_WaitForHit(EnHitTag* this, PlayState* play);
-const ActorInit En_Hit_Tag_InitVars = {
+ActorInit En_Hit_Tag_InitVars = {
ACTOR_EN_HIT_TAG,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -57,7 +57,7 @@ void EnHitTag_Init(Actor* thisx, PlayState* play) {
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
Collider_UpdateCylinder(&this->actor, &this->collider);
if (Flags_GetSwitch(play, ENHITTAG_GET_SWITCHFLAG(thisx))) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -73,7 +73,7 @@ void EnHitTag_WaitForHit(EnHitTag* this, PlayState* play) {
if (this->collider.base.acFlags & AC_HIT) {
play_sound(NA_SE_SY_GET_RUPY);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
dropLocation.x = this->actor.world.pos.x;
dropLocation.y = this->actor.world.pos.y;
dropLocation.z = this->actor.world.pos.z;
diff --git a/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.h b/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.h
index 0a1383e0a..e2effa078 100644
--- a/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.h
+++ b/src/overlays/actors/ovl_En_Hit_Tag/z_en_hit_tag.h
@@ -15,6 +15,4 @@ typedef struct EnHitTag {
/* 0x190 */ EnHitTagActionFunc actionFunc;
} EnHitTag; // size = 0x194
-extern const ActorInit En_Hit_Tag_InitVars;
-
#endif // Z_EN_HIT_TAG_H
diff --git a/src/overlays/actors/ovl_En_Holl/overlay.cfg b/src/overlays/actors/ovl_En_Holl/overlay.cfg
deleted file mode 100644
index 35c8d8f8e..000000000
--- a/src/overlays/actors/ovl_En_Holl/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Holl
-z_en_holl.c
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 0e58e2b85..096b92fdd 100644
--- a/src/overlays/actors/ovl_En_Holl/z_en_holl.c
+++ b/src/overlays/actors/ovl_En_Holl/z_en_holl.c
@@ -57,7 +57,7 @@ void EnHoll_TransparentIdle(EnHoll* this, PlayState* play);
void EnHoll_VerticalBgCoverIdle(EnHoll* this, PlayState* play);
void EnHoll_RoomTransitionIdle(EnHoll* this, PlayState* play);
-const ActorInit En_Holl_InitVars = {
+ActorInit En_Holl_InitVars = {
ACTOR_EN_HOLL,
ACTORCAT_DOOR,
FLAGS,
@@ -151,13 +151,15 @@ void EnHoll_VisibleIdle(EnHoll* this, PlayState* play) {
f32 playerDistFromCentralPlane;
if (this->type == EN_HOLL_TYPE_DEFAULT) {
- u32 actorCtxBitmask = (play->actorCtx.unkC & 0x2AA) >> 1 | (play->actorCtx.unkC & 0x155);
+ u32 halfDaysBit =
+ ((play->actorCtx.halfDaysBit & HALFDAYBIT_DAWNS) >> 1) | (play->actorCtx.halfDaysBit & HALFDAYBIT_NIGHTS);
u32 zActorBitmask = D_801AED48[EN_HOLL_GET_Z_ACTOR_BITMASK_INDEX(&this->actor)];
- if (!(actorCtxBitmask & zActorBitmask)) {
- Actor_MarkForDeath(&this->actor);
+ if (!(halfDaysBit & zActorBitmask)) {
+ Actor_Kill(&this->actor);
return;
}
+
if (this == sInstancePlayingSound) {
func_800B9010(&this->actor, NA_SE_EV_INVISIBLE_MONKEY - SFX_FLAG);
}
@@ -180,7 +182,7 @@ void EnHoll_VisibleIdle(EnHoll* this, PlayState* play) {
u32 enHollId = EN_HOLL_GET_ID(&this->actor);
if (sLoadingPlaneDistance < playerDistFromCentralPlane) {
- if ((play->roomCtx.prevRoom.num >= 0) && (play->roomCtx.unk31 == 0)) {
+ if ((play->roomCtx.prevRoom.num >= 0) && (play->roomCtx.status == 0)) {
this->actor.room = play->doorCtx.transitionActorList[enHollId].sides[this->playerSide].room;
if (play->roomCtx.prevRoom.num == this->actor.room) {
EnHoll_ChangeRooms(play);
@@ -218,7 +220,7 @@ void EnHoll_VisibleIdle(EnHoll* this, PlayState* play) {
void EnHoll_TransparentIdle(EnHoll* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- s32 useViewEye = gDbgCamEnabled || play->csCtx.state != 0;
+ s32 useViewEye = gDbgCamEnabled || (play->csCtx.state != CS_STATE_IDLE);
Vec3f transformedPlayerPos;
f32 enHollTop;
f32 playerDistFromCentralPlane;
@@ -296,7 +298,7 @@ void EnHoll_VerticalIdle(EnHoll* this, PlayState* play) {
}
void EnHoll_RoomTransitionIdle(EnHoll* this, PlayState* play) {
- if (play->roomCtx.unk31 == 0) {
+ if (play->roomCtx.status == 0) {
func_8012EBF8(play, &play->roomCtx);
if (play->bgCoverAlpha == 0) {
this->bgCoverAlphaActive = false;
@@ -310,7 +312,7 @@ void EnHoll_Update(Actor* thisx, PlayState* play) {
Player* player = GET_PLAYER(play);
if ((play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF) &&
- !(player->stateFlags1 & 0x200)) {
+ !(player->stateFlags1 & PLAYER_STATE1_200)) {
this->actionFunc(this, play);
}
}
diff --git a/src/overlays/actors/ovl_En_Holl/z_en_holl.h b/src/overlays/actors/ovl_En_Holl/z_en_holl.h
index 39c35220c..e4d8791ba 100644
--- a/src/overlays/actors/ovl_En_Holl/z_en_holl.h
+++ b/src/overlays/actors/ovl_En_Holl/z_en_holl.h
@@ -71,6 +71,4 @@ typedef struct EnHoll {
#define EN_HOLL_SCALE_ALPHA(playerDistFromCentralPlane) ((playerDistFromCentralPlane - sTransparencyPlaneDistance) * (255 / (sTranslucencyPlaneDistance - sTransparencyPlaneDistance)))
#define EN_HOLL_SCALE_BG_COVER_ALPHA(playerDistFromCentralPlane) ((EN_HOLL_ACTIVATION_PLANE_DISTANCE_VERTICAL - playerDistFromCentralPlane) * (255 / (EN_HOLL_ACTIVATION_PLANE_DISTANCE_VERTICAL - EN_HOLL_LOADING_PLANE_DISTANCE_VERTICAL)))
-extern const ActorInit En_Holl_InitVars;
-
#endif // Z_EN_HOLL_H
diff --git a/src/overlays/actors/ovl_En_Honotrap/overlay.cfg b/src/overlays/actors/ovl_En_Honotrap/overlay.cfg
deleted file mode 100644
index 4a20640de..000000000
--- a/src/overlays/actors/ovl_En_Honotrap/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Honotrap
-z_en_honotrap.c
diff --git a/src/overlays/actors/ovl_En_Honotrap/z_en_honotrap.c b/src/overlays/actors/ovl_En_Honotrap/z_en_honotrap.c
index 9f6b6b98a..d57fb078b 100644
--- a/src/overlays/actors/ovl_En_Honotrap/z_en_honotrap.c
+++ b/src/overlays/actors/ovl_En_Honotrap/z_en_honotrap.c
@@ -31,7 +31,7 @@ void func_8092F7BC(EnHonotrap* this, PlayState* play);
void func_8092F878(EnHonotrap* this, PlayState* play);
#if 0
-const ActorInit En_Honotrap_InitVars = {
+ActorInit En_Honotrap_InitVars = {
ACTOR_EN_HONOTRAP,
ACTORCAT_PROP,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Honotrap/z_en_honotrap.h b/src/overlays/actors/ovl_En_Honotrap/z_en_honotrap.h
index bf4b08fd7..570269fe2 100644
--- a/src/overlays/actors/ovl_En_Honotrap/z_en_honotrap.h
+++ b/src/overlays/actors/ovl_En_Honotrap/z_en_honotrap.h
@@ -13,6 +13,4 @@ typedef struct EnHonotrap {
/* 0x148 */ char unk_148[0x17C];
} EnHonotrap; // size = 0x2C4
-extern const ActorInit En_Honotrap_InitVars;
-
#endif // Z_EN_HONOTRAP_H
diff --git a/src/overlays/actors/ovl_En_Horse/overlay.cfg b/src/overlays/actors/ovl_En_Horse/overlay.cfg
deleted file mode 100644
index 90043637c..000000000
--- a/src/overlays/actors/ovl_En_Horse/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Horse
-z_en_horse.c
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 d822ba674..df4f17d4c 100644
--- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c
+++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c
@@ -50,40 +50,40 @@ void func_80881290(EnHorse* this, PlayState* play);
void func_8088159C(EnHorse* this, PlayState* play);
void func_80881634(EnHorse* this);
void func_8088168C(EnHorse* this);
-void EnHorse_CsMoveInit(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void EnHorse_CsMoveToPoint(EnHorse* this, PlayState* play, CsCmdActorAction* action);
+void EnHorse_CsMoveInit(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void EnHorse_CsMoveToPoint(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
void EnHorse_CsPlayHighJumpAnim(EnHorse* this, PlayState* play);
-void EnHorse_CsJumpInit(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void EnHorse_CsJump(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void EnHorse_CsRearingInit(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void EnHorse_CsRearing(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void EnHorse_WarpMoveInit(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void EnHorse_CsWarpMoveToPoint(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void EnHorse_CsWarpRearingInit(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void EnHorse_CsWarpRearing(EnHorse* this, PlayState* play, CsCmdActorAction* action);
+void EnHorse_CsJumpInit(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void EnHorse_CsJump(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void EnHorse_CsRearingInit(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void EnHorse_CsRearing(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void EnHorse_WarpMoveInit(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void EnHorse_CsWarpMoveToPoint(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void EnHorse_CsWarpRearingInit(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void EnHorse_CsWarpRearing(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
void EnHorse_InitCutscene(EnHorse* this, PlayState* play);
void EnHorse_InitHorsebackArchery(EnHorse* this);
void EnHorse_UpdateHbaAnim(EnHorse* this);
-void func_80883BEC(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void func_80883CB0(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void func_80883D64(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void func_80883DE0(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void func_80883E10(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void func_80883EA0(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void func_80883F18(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void func_80883F98(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void func_80884010(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void func_808840C4(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void func_80884194(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void func_8088424C(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void func_80884314(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void func_808843B4(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void func_80884444(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void func_808844E0(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void func_80884564(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void func_80884604(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void func_808846B4(EnHorse* this, PlayState* play, CsCmdActorAction* action);
-void func_808846DC(EnHorse* this, PlayState* play, CsCmdActorAction* action);
+void func_80883BEC(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void func_80883CB0(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void func_80883D64(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void func_80883DE0(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void func_80883E10(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void func_80883EA0(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void func_80883F18(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void func_80883F98(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void func_80884010(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void func_808840C4(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void func_80884194(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void func_8088424C(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void func_80884314(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void func_808843B4(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void func_80884444(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void func_808844E0(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void func_80884564(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void func_80884604(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void func_808846B4(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
+void func_808846DC(EnHorse* this, PlayState* play, CsCmdActorCue* cue);
void func_808846F0(EnHorse* this, PlayState* play);
void func_80884994(EnHorse* this);
void func_80884D04(EnHorse* this, PlayState* play);
@@ -91,7 +91,7 @@ void EnHorse_StickDirection(Vec2f* curStick, f32* stickMag, s16* angle);
s32 EnHorse_GetMountSide(EnHorse* this, PlayState* play);
typedef struct {
- s32 csAction;
+ s32 cueId;
s32 csFuncIdx;
} CsActionEntry;
@@ -144,7 +144,7 @@ static SkeletonHeader* sSkeletonHeaders[] = {
NULL, NULL, &object_horse_link_child_Skel_00A480, NULL, NULL,
};
-const ActorInit En_Horse_InitVars = {
+ActorInit En_Horse_InitVars = {
ACTOR_EN_HORSE,
ACTORCAT_BG,
FLAGS,
@@ -345,7 +345,7 @@ void func_8087B7C0(EnHorse* this, PlayState* play, Path* path) {
func_8017D7C0(this->actor.world.pos.x, this->actor.world.pos.z, sp80.x, sp80.z, sp8C.x, sp8C.z, &sp70);
- if ((this->actor.bgCheckFlags & 8) || (this->unk_1EC & 4)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) || (this->unk_1EC & 4)) {
EnHorse_RotateToPoint(this, play, &sp8C, 0xC80);
if (this->unk_1EC & 4) {
this->unk_1EC &= ~4;
@@ -402,81 +402,81 @@ void func_8087B7C0(EnHorse* this, PlayState* play, Path* path) {
this->unk_58C = 0x2B;
}
this->unk_58C--;
- if (this->actor.speedXZ > 5.0f) {
- this->actor.speedXZ -= 0.5f;
+ if (this->actor.speed > 5.0f) {
+ this->actor.speed -= 0.5f;
}
} else if (this->unk_590 > 0) {
if (this->unk_590 == 0x1F4) {
if (this->rider != NULL) {
- Actor_PlaySfxAtPos(&this->rider->actor, NA_SE_VO_IN_CRY_0);
+ Actor_PlaySfx(&this->rider->actor, NA_SE_VO_IN_CRY_0);
}
}
this->unk_590--;
- if (this->actor.speedXZ < this->unk_398) {
- this->actor.speedXZ += 1.0f;
+ if (this->actor.speed < this->unk_398) {
+ this->actor.speed += 1.0f;
} else {
- this->actor.speedXZ -= 0.5f;
+ this->actor.speed -= 0.5f;
}
} else if (this->actor.params == ENHORSE_5) {
s16 sp4A;
if (sp68 >= this->curRaceWaypoint) {
- if (this->actor.speedXZ < this->unk_398) {
- this->actor.speedXZ += 0.5f;
+ if (this->actor.speed < this->unk_398) {
+ this->actor.speed += 0.5f;
} else {
- this->actor.speedXZ -= 0.5f;
+ this->actor.speed -= 0.5f;
}
this->unk_394 |= 1;
return;
}
- sp4A = Actor_YawBetweenActors(&this->actor, &GET_PLAYER(play)->actor) - this->actor.world.rot.y;
+ sp4A = Actor_WorldYawTowardActor(&this->actor, &GET_PLAYER(play)->actor) - this->actor.world.rot.y;
if ((fabsf(Math_SinS(sp4A)) < 0.9f) && (Math_CosS(sp4A) > 0.0f)) {
- if (this->actor.speedXZ < this->unk_398) {
- this->actor.speedXZ += 0.5f;
+ if (this->actor.speed < this->unk_398) {
+ this->actor.speed += 0.5f;
} else {
- this->actor.speedXZ -= 0.25f;
+ this->actor.speed -= 0.25f;
}
this->unk_394 |= 1;
} else {
- if (this->actor.speedXZ < 13.0f) {
- this->actor.speedXZ += 0.4f;
+ if (this->actor.speed < 13.0f) {
+ this->actor.speed += 0.4f;
} else {
- this->actor.speedXZ -= 0.2f;
+ this->actor.speed -= 0.2f;
}
this->unk_394 &= ~1;
}
} else if (sp68 >= this->curRaceWaypoint) {
- if (this->actor.speedXZ < this->unk_398) {
- this->actor.speedXZ += 0.5f;
+ if (this->actor.speed < this->unk_398) {
+ this->actor.speed += 0.5f;
} else {
- this->actor.speedXZ -= 0.5f;
+ this->actor.speed -= 0.5f;
}
this->unk_394 |= 1;
} else if ((sp68 + 1) == this->curRaceWaypoint) {
- s16 sp48 = Actor_YawBetweenActors(&this->actor, &GET_PLAYER(play)->actor) - this->actor.world.rot.y;
+ s16 sp48 = Actor_WorldYawTowardActor(&this->actor, &GET_PLAYER(play)->actor) - this->actor.world.rot.y;
if ((fabsf(Math_SinS(sp48)) < 0.9f) && (Math_CosS(sp48) > 0.0f)) {
- if (this->actor.speedXZ < this->unk_398) {
- this->actor.speedXZ += 0.5f;
+ if (this->actor.speed < this->unk_398) {
+ this->actor.speed += 0.5f;
} else {
- this->actor.speedXZ -= 0.25f;
+ this->actor.speed -= 0.25f;
}
this->unk_394 |= 1;
} else {
- if (this->actor.speedXZ < 12.0f) {
- this->actor.speedXZ += 0.4f;
+ if (this->actor.speed < 12.0f) {
+ this->actor.speed += 0.4f;
} else {
- this->actor.speedXZ -= 0.2f;
+ this->actor.speed -= 0.2f;
}
this->unk_394 &= ~1;
}
} else {
- if (this->actor.speedXZ < 13.0f) {
- this->actor.speedXZ += 0.4f;
+ if (this->actor.speed < 13.0f) {
+ this->actor.speed += 0.4f;
} else {
- this->actor.speedXZ -= 0.2f;
+ this->actor.speed -= 0.2f;
}
this->unk_394 &= ~1;
}
@@ -622,7 +622,7 @@ s32 EnHorse_Spawn(EnHorse* this, PlayState* play) {
this->actor.world.pos.z = spawnPos.z;
this->actor.prevPos = this->actor.world.pos;
this->actor.world.rot.y = 0;
- this->actor.shape.rot.y = Actor_YawBetweenActors(&this->actor, &GET_PLAYER(play)->actor);
+ this->actor.shape.rot.y = Actor_WorldYawTowardActor(&this->actor, &GET_PLAYER(play)->actor);
spawn = true;
SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, &this->actor.world.pos, &this->actor.projectedPos,
&this->actor.projectedW);
@@ -648,7 +648,7 @@ s32 EnHorse_Spawn(EnHorse* this, PlayState* play) {
this->actor.world.pos.z = spawnPos.z;
this->actor.prevPos = this->actor.world.pos;
this->actor.world.rot.y = 0;
- this->actor.shape.rot.y = Actor_YawBetweenActors(&this->actor, &GET_PLAYER(play)->actor);
+ this->actor.shape.rot.y = Actor_WorldYawTowardActor(&this->actor, &GET_PLAYER(play)->actor);
spawn = true;
SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, &this->actor.world.pos, &this->actor.projectedPos,
&this->actor.projectedW);
@@ -672,9 +672,9 @@ s32 EnHorse_PlayerCanMove(EnHorse* this, PlayState* play) {
if ((player->stateFlags1 & PLAYER_STATE1_1) || (func_800B7128(GET_PLAYER(play)) == true) ||
(player->stateFlags1 & PLAYER_STATE1_100000) ||
(((this->stateFlags & ENHORSE_FLAG_19) || (this->stateFlags & ENHORSE_FLAG_29)) && !this->inRace) ||
- (this->action == ENHORSE_ACTION_HBA) || (player->actor.flags & ACTOR_FLAG_100) ||
- (play->csCtx.state != CS_STATE_0) || (ActorCutscene_GetCurrentIndex() != -1) ||
- (player->stateFlags1 & PLAYER_STATE1_20) || (player->csMode != 0)) {
+ (this->action == ENHORSE_ACTION_HBA) || (player->actor.flags & ACTOR_FLAG_TALK_REQUESTED) ||
+ (play->csCtx.state != CS_STATE_IDLE) || (CutsceneManager_GetCurrentCsId() != CS_ID_NONE) ||
+ (player->stateFlags1 & PLAYER_STATE1_20) || (player->csMode != PLAYER_CSMODE_0)) {
return false;
}
return true;
@@ -721,7 +721,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
this->unk_528 = 80.0f;
this->boostSpeed = 12;
if ((this->bankIndex = Object_GetIndex(&play->objectCtx, OBJECT_HA)) < 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
this->unk_1EC |= 1;
@@ -743,7 +743,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
this->type = HORSE_TYPE_BANDIT;
this->boostSpeed = 12;
if ((this->bankIndex = Object_GetIndex(&play->objectCtx, OBJECT_HA)) < 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
this->unk_1EC |= 1;
@@ -751,7 +751,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
} else {
this->type = HORSE_TYPE_EPONA;
this->boostSpeed = 15;
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
this->actor.params &= ~(ENHORSE_PARAM_DONKEY | ENHORSE_PARAM_4000 | ENHORSE_PARAM_BANDIT);
@@ -792,15 +792,15 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
this->stateFlags = 0;
}
- if (((play->sceneId == SCENE_KOEPONARACE) && (GET_RACE_FLAGS == 1)) ||
- ((gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0)) && Cutscene_GetSceneLayer(play))) {
+ if (((play->sceneId == SCENE_KOEPONARACE) && (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_START)) ||
+ ((gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0)) && (Cutscene_GetSceneLayer(play) != 0))) {
this->stateFlags |= ENHORSE_FLAG_25;
}
thisx->gravity = -3.5f;
ActorShape_Init(&thisx->shape, 0.0f, ActorShadow_DrawHorse, 20.0f);
this->action = ENHORSE_ACTION_IDLE;
- thisx->speedXZ = 0.0f;
+ thisx->speed = 0.0f;
if (this->type == HORSE_TYPE_2) {
sJntSphInit.elements[0].dim.limb = 13;
@@ -875,11 +875,11 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) {
EnHorse_InitCutscene(this, play);
} else if (thisx->params == ENHORSE_10) {
EnHorse_InitHorsebackArchery(this);
- func_80112AFC(play);
+ Interface_InitMinigame(play);
} else if (thisx->params == ENHORSE_14) {
func_808846F0(this, play);
if ((play->sceneId == SCENE_LOST_WOODS) && !Cutscene_IsPlaying(play)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else if (thisx->params == ENHORSE_16) {
func_8087C9F8(this);
@@ -989,7 +989,7 @@ void EnHorse_Freeze(EnHorse* this, PlayState* play) {
}
void EnHorse_Frozen(EnHorse* this, PlayState* play) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->noInputTimer--;
if (this->noInputTimer < 0) {
this->colliderCylinder1.base.ocFlags1 |= OC1_ON;
@@ -1001,10 +1001,10 @@ void EnHorse_Frozen(EnHorse* this, PlayState* play) {
EnHorse_StartMountedIdleResetAnim(this);
} else if (this->actor.params == ENHORSE_11) {
this->actor.params = ENHORSE_7;
- if (play->csCtx.state != CS_STATE_0) {
+ if (play->csCtx.state != CS_STATE_IDLE) {
EnHorse_StartMountedIdle(this);
} else {
- this->actor.speedXZ = 8.0f;
+ this->actor.speed = 8.0f;
EnHorse_StartGalloping(this);
}
} else if (this->prevAction == ENHORSE_ACTION_IDLE) {
@@ -1035,10 +1035,10 @@ void EnHorse_UpdateSpeed(EnHorse* this, PlayState* play, f32 brakeDecel, f32 bra
f32 temp_f12;
if (!EnHorse_PlayerCanMove(this, play)) {
- if (this->actor.speedXZ > 8.0f) {
- this->actor.speedXZ -= decel;
- } else if (this->actor.speedXZ < 0.0f) {
- this->actor.speedXZ = 0.0f;
+ if (this->actor.speed > 8.0f) {
+ this->actor.speed -= decel;
+ } else if (this->actor.speed < 0.0f) {
+ this->actor.speed = 0.0f;
}
return;
}
@@ -1047,63 +1047,62 @@ void EnHorse_UpdateSpeed(EnHorse* this, PlayState* play, f32 brakeDecel, f32 bra
EnHorse_StickDirection(&this->curStick, &stickMag, &stickAngle);
if (Math_CosS(stickAngle) <= brakeAngle) {
- this->actor.speedXZ -= brakeDecel;
- this->actor.speedXZ = CLAMP_MIN(this->actor.speedXZ, 0.0f);
+ this->actor.speed -= brakeDecel;
+ this->actor.speed = CLAMP_MIN(this->actor.speed, 0.0f);
return;
}
if (stickMag < minStickMag) {
this->stateFlags &= ~ENHORSE_BOOST;
this->stateFlags &= ~ENHORSE_BOOST_DECEL;
- this->actor.speedXZ -= decel;
- if (this->actor.speedXZ < 0.0f) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed -= decel;
+ if (this->actor.speed < 0.0f) {
+ this->actor.speed = 0.0f;
}
return;
}
if (this->stateFlags & ENHORSE_BOOST) {
if ((16 - this->boostTimer) > 0) {
- this->actor.speedXZ =
- (((EnHorse_SlopeSpeedMultiplier(this, play) * this->boostSpeed) - this->actor.speedXZ) /
- (16.0f - this->boostTimer)) +
- this->actor.speedXZ;
+ this->actor.speed = (((EnHorse_SlopeSpeedMultiplier(this, play) * this->boostSpeed) - this->actor.speed) /
+ (16.0f - this->boostTimer)) +
+ this->actor.speed;
} else {
- this->actor.speedXZ = EnHorse_SlopeSpeedMultiplier(this, play) * this->boostSpeed;
+ this->actor.speed = EnHorse_SlopeSpeedMultiplier(this, play) * this->boostSpeed;
}
- if ((EnHorse_SlopeSpeedMultiplier(this, play) * this->boostSpeed) <= this->actor.speedXZ) {
+ if ((EnHorse_SlopeSpeedMultiplier(this, play) * this->boostSpeed) <= this->actor.speed) {
this->stateFlags &= ~ENHORSE_BOOST;
this->stateFlags |= ENHORSE_BOOST_DECEL;
}
} else if (this->stateFlags & ENHORSE_BOOST_DECEL) {
- if (this->actor.speedXZ > baseSpeed) {
- this->actor.speedXZ -= 0.06f;
- } else if (this->actor.speedXZ < baseSpeed) {
- this->actor.speedXZ = baseSpeed;
+ if (this->actor.speed > baseSpeed) {
+ this->actor.speed -= 0.06f;
+ } else if (this->actor.speed < baseSpeed) {
+ this->actor.speed = baseSpeed;
this->stateFlags &= ~ENHORSE_BOOST_DECEL;
}
} else {
- if (this->actor.speedXZ <= (baseSpeed * (1.0f / 54.0f) * stickMag)) {
+ if (this->actor.speed <= (baseSpeed * (1.0f / 54.0f) * stickMag)) {
phi_f0 = 1.0f;
} else {
phi_f0 = -1.0f;
}
- this->actor.speedXZ += phi_f0 * 50.0f * 0.01f;
+ this->actor.speed += phi_f0 * 50.0f * 0.01f;
- if (this->actor.speedXZ > baseSpeed) {
- this->actor.speedXZ -= decel;
- if (this->actor.speedXZ < baseSpeed) {
- this->actor.speedXZ = baseSpeed;
+ if (this->actor.speed > baseSpeed) {
+ this->actor.speed -= decel;
+ if (this->actor.speed < baseSpeed) {
+ this->actor.speed = baseSpeed;
}
}
}
temp_f12 = stickAngle * (1 / 32236.f);
- turn = stickAngle * temp_f12 * temp_f12 * (2.2f - (this->actor.speedXZ * (1.0f / this->boostSpeed)));
- turn = CLAMP(turn, -turnSpeed * (2.2f - (1.7f * this->actor.speedXZ * (1.0f / this->boostSpeed))),
- turnSpeed * (2.2f - (1.7f * this->actor.speedXZ * (1.0f / this->boostSpeed))));
+ turn = stickAngle * temp_f12 * temp_f12 * (2.2f - (this->actor.speed * (1.0f / this->boostSpeed)));
+ turn = CLAMP(turn, -turnSpeed * (2.2f - (1.7f * this->actor.speed * (1.0f / this->boostSpeed))),
+ turnSpeed * (2.2f - (1.7f * this->actor.speed * (1.0f / this->boostSpeed))));
this->actor.world.rot.y += turn;
this->actor.shape.rot.y = this->actor.world.rot.y;
}
@@ -1131,6 +1130,7 @@ void EnHorse_StartMountedIdle(EnHorse* this) {
}
}
}
+
curFrame = this->skin.skelAnime.curFrame;
Animation_Change(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex], 1.0f, curFrame,
Animation_GetLastFrame(sAnimationHeaders[this->type][this->animIndex]), ANIMMODE_ONCE, -3.0f);
@@ -1140,7 +1140,7 @@ void EnHorse_MountedIdle(EnHorse* this, PlayState* play) {
f32 mag;
s16 angle = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
EnHorse_StickDirection(&this->curStick, &mag, &angle);
if (mag > 10.0f) {
if (EnHorse_PlayerCanMove(this, play) == true) {
@@ -1187,7 +1187,7 @@ void EnHorse_MountedIdleWhinnying(EnHorse* this, PlayState* play) {
f32 stickMag;
s16 stickAngle = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
EnHorse_StickDirection(&this->curStick, &stickMag, &stickAngle);
if (stickMag > 10.0f) {
if (EnHorse_PlayerCanMove(this, play) == true) {
@@ -1221,7 +1221,7 @@ void EnHorse_MountedTurn(EnHorse* this, PlayState* play) {
s16 clampedYaw;
s16 stickAngle;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
EnHorse_PlayWalkingSound(this);
if (EnHorse_PlayerCanMove(this, play) == true) {
EnHorse_StickDirection(&this->curStick, &stickMag, &stickAngle);
@@ -1299,15 +1299,15 @@ void EnHorse_MountedWalk(EnHorse* this, PlayState* play) {
((this->noInputTimer > 0) && (this->noInputTimer < (this->noInputTimerMax - 20)))) {
EnHorse_UpdateSpeed(this, play, 0.3f, -0.5f, 10.0f, 0.06f, 3.0f, 0x320);
} else {
- this->actor.speedXZ = 3.0f;
+ this->actor.speed = 3.0f;
}
- if (this->actor.speedXZ == 0.0f) {
+ if (this->actor.speed == 0.0f) {
this->stateFlags &= ~ENHORSE_FLAG_9;
EnHorse_StartMountedIdleResetAnim(this);
this->noInputTimer = 0;
this->noInputTimerMax = 0;
- } else if (this->actor.speedXZ > 3.0f) {
+ } else if (this->actor.speed > 3.0f) {
this->stateFlags &= ~ENHORSE_FLAG_9;
EnHorse_StartTrotting(this);
this->noInputTimer = 0;
@@ -1323,9 +1323,9 @@ void EnHorse_MountedWalk(EnHorse* this, PlayState* play) {
if (this->waitTimer <= 0) {
this->stateFlags &= ~ENHORSE_FLAG_9;
- this->skin.skelAnime.playSpeed = this->actor.speedXZ * 0.75f;
- if ((SkelAnime_Update(&this->skin.skelAnime) || (this->actor.speedXZ == 0.0f)) && (this->noInputTimer <= 0)) {
- if (this->actor.speedXZ > 3.0f) {
+ this->skin.skelAnime.playSpeed = this->actor.speed * 0.75f;
+ if ((SkelAnime_Update(&this->skin.skelAnime) || (this->actor.speed == 0.0f)) && (this->noInputTimer <= 0)) {
+ if (this->actor.speed > 3.0f) {
EnHorse_StartTrotting(this);
this->noInputTimer = 0;
this->noInputTimerMax = 0;
@@ -1339,7 +1339,7 @@ void EnHorse_MountedWalk(EnHorse* this, PlayState* play) {
}
} else {
this->waitTimer--;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
}
@@ -1362,18 +1362,18 @@ void EnHorse_MountedTrot(EnHorse* this, PlayState* play) {
EnHorse_UpdateSpeed(this, play, 0.3f, -0.5f, 10.0f, 0.06f, 6.0f, 800);
EnHorse_StickDirection(&this->curStick, &stickMag, &stickAngle);
- if (this->actor.speedXZ < 3.0f) {
+ if (this->actor.speed < 3.0f) {
EnHorse_StartWalkingInterruptable(this);
}
- this->skin.skelAnime.playSpeed = this->actor.speedXZ * 0.375f;
+ this->skin.skelAnime.playSpeed = this->actor.speed * 0.375f;
if (SkelAnime_Update(&this->skin.skelAnime)) {
func_8087C178(this);
Rumble_Request(0.0f, 60, 8, 255);
- if (this->actor.speedXZ >= 6.0f) {
+ if (this->actor.speed >= 6.0f) {
EnHorse_StartGallopingInterruptable(this);
- } else if (this->actor.speedXZ < 3.0f) {
+ } else if (this->actor.speed < 3.0f) {
EnHorse_StartWalkingInterruptable(this);
} else {
EnHorse_MountedTrotReset(this);
@@ -1427,14 +1427,14 @@ void EnHorse_MountedGallop(EnHorse* this, PlayState* play) {
EnHorse_UpdateSpeed(this, play, 0.3f, -0.5f, 10.0f, 0.06f, 8.0f, 800);
} else if (this->noInputTimer > 0) {
this->noInputTimer--;
- this->actor.speedXZ = 8.0f;
+ this->actor.speed = 8.0f;
}
- if (this->actor.speedXZ < 6.0f) {
+ if (this->actor.speed < 6.0f) {
EnHorse_StartTrotting(this);
}
- this->skin.skelAnime.playSpeed = this->actor.speedXZ * 0.3f;
+ this->skin.skelAnime.playSpeed = this->actor.speed * 0.3f;
if (SkelAnime_Update(&this->skin.skelAnime)) {
func_8087C1C0(this);
@@ -1442,7 +1442,7 @@ void EnHorse_MountedGallop(EnHorse* this, PlayState* play) {
if (EnHorse_PlayerCanMove(this, play) == true) {
if ((stickMag >= 10.0f) && (Math_CosS(stickAngle) <= -0.5f)) {
EnHorse_StartBraking(this, play);
- } else if (this->actor.speedXZ < 6.0f) {
+ } else if (this->actor.speed < 6.0f) {
EnHorse_StartTrotting(this);
} else {
EnHorse_MountedGallopReset(this);
@@ -1490,7 +1490,7 @@ void EnHorse_MountedRearing(EnHorse* this, PlayState* play) {
f32 stickMag;
s16 stickAngle;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->curFrame > 25.0f) {
if (!(this->stateFlags & ENHORSE_LAND2_SOUND)) {
this->stateFlags |= ENHORSE_LAND2_SOUND;
@@ -1559,17 +1559,17 @@ void EnHorse_StartBraking(EnHorse* this, PlayState* play) {
}
void EnHorse_Stopping(EnHorse* this, PlayState* play) {
- if (this->actor.speedXZ > 0.0f) {
- this->actor.speedXZ -= 0.6f;
- if (this->actor.speedXZ < 0.0f) {
- this->actor.speedXZ = 0.0f;
+ if (this->actor.speed > 0.0f) {
+ this->actor.speed -= 0.6f;
+ if (this->actor.speed < 0.0f) {
+ this->actor.speed = 0.0f;
}
}
if ((this->stateFlags & ENHORSE_STOPPING_NEIGH_SOUND) && (this->skin.skelAnime.curFrame > 29.0f)) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if ((Rand_ZeroOne() > 0.5f) &&
- ((gSaveContext.save.entrance != ENTRANCE(ROMANI_RANCH, 0)) || !Cutscene_GetSceneLayer(play))) {
+ ((gSaveContext.save.entrance != ENTRANCE(ROMANI_RANCH, 0)) || (Cutscene_GetSceneLayer(play) == 0))) {
if (this->stateFlags & ENHORSE_DRAW) {
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH);
@@ -1585,9 +1585,9 @@ void EnHorse_Stopping(EnHorse* this, PlayState* play) {
}
if (this->skin.skelAnime.curFrame > 29.0f) {
- this->actor.speedXZ = 0.0f;
- } else if ((this->actor.speedXZ > 3.0f) && (this->stateFlags & ENHORSE_FORCE_REVERSING)) {
- this->actor.speedXZ = 3.0f;
+ this->actor.speed = 0.0f;
+ } else if ((this->actor.speed > 3.0f) && (this->stateFlags & ENHORSE_FORCE_REVERSING)) {
+ this->actor.speed = 3.0f;
}
if (SkelAnime_Update(&this->skin.skelAnime)) {
@@ -1629,29 +1629,29 @@ void EnHorse_Reverse(EnHorse* this, PlayState* play) {
((this->noInputTimer > 0) && (this->noInputTimer < (this->noInputTimerMax - 20)))) {
if ((stickMag < 10.0f) && (this->noInputTimer <= 0)) {
EnHorse_StartMountedIdleResetAnim(this);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
return;
} else if (stickMag < 10.0f) {
stickAngle = -0x7FFF;
} else if (Math_CosS(stickAngle) > -0.5f) {
this->noInputTimerMax = 0;
EnHorse_StartMountedIdleResetAnim(this);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
return;
}
} else if (stickMag < 10.0f) {
stickAngle = -0x7FFF;
}
- } else if ((player->actor.flags & ACTOR_FLAG_100) || (play->csCtx.state != CS_STATE_0) ||
- (ActorCutscene_GetCurrentIndex() != -1) || (player->stateFlags1 & PLAYER_STATE1_20)) {
+ } else if ((player->actor.flags & ACTOR_FLAG_TALK_REQUESTED) || (play->csCtx.state != CS_STATE_IDLE) ||
+ (CutsceneManager_GetCurrentCsId() != CS_ID_NONE) || (player->stateFlags1 & PLAYER_STATE1_20)) {
EnHorse_StartMountedIdleResetAnim(this);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
return;
} else {
stickAngle = -0x7FFF;
}
- this->actor.speedXZ = -2.0f;
+ this->actor.speed = -2.0f;
turnAmount = -0x8000 - stickAngle;
turnAmount = CLAMP(turnAmount, -2400.0f, 2400.0f);
this->actor.world.rot.y += turnAmount;
@@ -1664,7 +1664,7 @@ void EnHorse_Reverse(EnHorse* this, PlayState* play) {
}
}
- this->skin.skelAnime.playSpeed = this->actor.speedXZ * 0.5f * 1.5f;
+ this->skin.skelAnime.playSpeed = this->actor.speed * 0.5f * 1.5f;
if (SkelAnime_Update(&this->skin.skelAnime) && (this->noInputTimer <= 0) &&
(EnHorse_PlayerCanMove(this, play) == true)) {
@@ -1723,8 +1723,8 @@ void EnHorse_LowJump(EnHorse* this, PlayState* play) {
this->stateFlags |= ENHORSE_JUMPING;
- if (this->actor.speedXZ < 12.0f) {
- this->actor.speedXZ = 12.0f;
+ if (this->actor.speed < 12.0f) {
+ this->actor.speed = 12.0f;
}
if (this->actor.floorHeight != BGCHECK_Y_MIN) {
@@ -1821,8 +1821,8 @@ void EnHorse_HighJump(EnHorse* this, PlayState* play) {
this->stateFlags |= ENHORSE_JUMPING;
- if (this->actor.speedXZ < 13.0f) {
- this->actor.speedXZ = 13.0f;
+ if (this->actor.speed < 13.0f) {
+ this->actor.speed = 13.0f;
}
if (this->actor.floorHeight != BGCHECK_Y_MIN) {
@@ -1907,7 +1907,7 @@ void EnHorse_Inactive(EnHorse* this, PlayState* play) {
void EnHorse_PlayIdleAnimation(EnHorse* this, s32 anim, f32 morphFrames, f32 startFrames) {
this->action = ENHORSE_ACTION_IDLE;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if ((anim != ENHORSE_ANIM_IDLE) && (anim != ENHORSE_ANIM_WHINNY) && (anim != ENHORSE_ANIM_REARING)) {
anim = ENHORSE_ANIM_IDLE;
@@ -1962,7 +1962,7 @@ void EnHorse_StartIdleRidable(EnHorse* this) {
}
void EnHorse_Idle(EnHorse* this, PlayState* play) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
EnHorse_IdleAnimSounds(this, play);
if ((D_801BDAA4 != 0) && (this->type == HORSE_TYPE_2)) {
@@ -2025,7 +2025,7 @@ void EnHorse_StartMovingAnimation(EnHorse* this, s32 anim, f32 morphFrames, f32
void EnHorse_SetFollowAnimation(EnHorse* this, PlayState* play) {
s32 anim = ENHORSE_ANIM_WALK;
- f32 distToPlayer = Actor_XZDistanceBetweenActors(&this->actor, &GET_PLAYER(play)->actor);
+ f32 distToPlayer = Actor_WorldDistXZToActor(&this->actor, &GET_PLAYER(play)->actor);
if (distToPlayer > 400.0f) {
anim = ENHORSE_ANIM_GALLOP;
@@ -2062,7 +2062,7 @@ void EnHorse_FollowPlayer(EnHorse* this, PlayState* play) {
f32 distToPlayer;
D_801BDAA4 = 0;
- distToPlayer = Actor_XZDistanceBetweenActors(&this->actor, &GET_PLAYER(play)->actor);
+ 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) &&
!(this->stateFlags & ENHORSE_TURNING_TO_PLAYER)) {
@@ -2070,7 +2070,7 @@ void EnHorse_FollowPlayer(EnHorse* this, PlayState* play) {
this->animIndex = ENHORSE_ANIM_REARING;
this->stateFlags |= ENHORSE_TURNING_TO_PLAYER;
- this->angleToPlayer = Actor_YawBetweenActors(&this->actor, &GET_PLAYER(play)->actor);
+ this->angleToPlayer = Actor_WorldYawTowardActor(&this->actor, &GET_PLAYER(play)->actor);
angleDiff = (f32)this->angleToPlayer - this->actor.world.rot.y;
if (angleDiff > 0x7FFF) {
@@ -2101,18 +2101,18 @@ void EnHorse_FollowPlayer(EnHorse* this, PlayState* play) {
}
if (this->animIndex == ENHORSE_ANIM_GALLOP) {
- this->actor.speedXZ = 8.0f;
- this->skin.skelAnime.playSpeed = this->actor.speedXZ * 0.3f;
+ this->actor.speed = 8.0f;
+ this->skin.skelAnime.playSpeed = this->actor.speed * 0.3f;
} else {
if (this->animIndex == ENHORSE_ANIM_TROT) {
- this->actor.speedXZ = 6.0f;
- this->skin.skelAnime.playSpeed = this->actor.speedXZ * 0.375f;
+ this->actor.speed = 6.0f;
+ this->skin.skelAnime.playSpeed = this->actor.speed * 0.375f;
} else if (this->animIndex == ENHORSE_ANIM_WALK) {
- this->actor.speedXZ = 3.0f;
+ this->actor.speed = 3.0f;
EnHorse_PlayWalkingSound(this);
- this->skin.skelAnime.playSpeed = this->actor.speedXZ * 0.75f;
+ this->skin.skelAnime.playSpeed = this->actor.speed * 0.75f;
} else {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->skin.skelAnime.playSpeed = 1.0f;
}
}
@@ -2151,7 +2151,7 @@ void EnHorse_FollowPlayer(EnHorse* this, PlayState* play) {
void EnHorse_InitIngoHorse(EnHorse* this) {
this->curRaceWaypoint = 0;
this->soundTimer = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
EnHorse_UpdateIngoHorseAnim(this);
if (this->stateFlags & ENHORSE_DRAW) {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_IT_INGO_HORSE_NEIGH);
@@ -2176,17 +2176,17 @@ void EnHorse_UpdateIngoHorseAnim(EnHorse* this) {
this->action = ENHORSE_ACTION_INGO_RACE;
this->stateFlags &= ~ENHORSE_SANDDUST_SOUND;
- if (this->actor.speedXZ == 0.0f) {
+ if (this->actor.speed == 0.0f) {
if (this->animIndex != ENHORSE_ANIM_IDLE) {
animChanged = true;
}
this->animIndex = ENHORSE_ANIM_IDLE;
- } else if (this->actor.speedXZ <= 3.0f) {
+ } else if (this->actor.speed <= 3.0f) {
if (this->animIndex != ENHORSE_ANIM_WALK) {
animChanged = true;
}
this->animIndex = ENHORSE_ANIM_WALK;
- } else if (this->actor.speedXZ <= 6.0f) {
+ } else if (this->actor.speed <= 6.0f) {
if (this->animIndex != ENHORSE_ANIM_TROT) {
animChanged = true;
}
@@ -2199,16 +2199,16 @@ void EnHorse_UpdateIngoHorseAnim(EnHorse* this) {
}
if (this->animIndex == ENHORSE_ANIM_WALK) {
- animSpeed = this->actor.speedXZ * 0.5f;
+ animSpeed = this->actor.speed * 0.5f;
} else if (this->animIndex == ENHORSE_ANIM_TROT) {
- animSpeed = this->actor.speedXZ * 0.25f;
+ animSpeed = this->actor.speed * 0.25f;
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN);
}
} else if (this->animIndex == ENHORSE_ANIM_GALLOP) {
- animSpeed = this->actor.speedXZ * 0.2f;
+ animSpeed = this->actor.speed * 0.2f;
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN);
} else {
@@ -2239,26 +2239,26 @@ void EnHorse_UpdateIngoRace(EnHorse* this, PlayState* play) {
}
if (!this->inRace) {
- this->actor.speedXZ = 0.0f;
- this->rider->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
+ this->rider->actor.speed = 0.0f;
if (this->animIndex != ENHORSE_ANIM_IDLE) {
EnHorse_UpdateIngoHorseAnim(this);
}
}
if (this->animIndex == ENHORSE_ANIM_WALK) {
- playSpeed = this->actor.speedXZ * 0.5f;
+ playSpeed = this->actor.speed * 0.5f;
} else if (this->animIndex == ENHORSE_ANIM_TROT) {
- playSpeed = this->actor.speedXZ * 0.25f;
+ playSpeed = this->actor.speed * 0.25f;
} else if (this->animIndex == ENHORSE_ANIM_GALLOP) {
- playSpeed = this->actor.speedXZ * 0.2f;
+ playSpeed = this->actor.speed * 0.2f;
} else {
playSpeed = 1.0f;
}
this->skin.skelAnime.playSpeed = playSpeed;
if (SkelAnime_Update(&this->skin.skelAnime) ||
- ((this->animIndex == ENHORSE_ANIM_IDLE) && (this->actor.speedXZ != 0.0f))) {
+ ((this->animIndex == ENHORSE_ANIM_IDLE) && (this->actor.speed != 0.0f))) {
EnHorse_UpdateIngoHorseAnim(this);
}
}
@@ -2295,8 +2295,8 @@ void func_80881398(EnHorse* this, PlayState* play) {
f32 curFrame;
this->stateFlags |= ENHORSE_JUMPING;
- if (this->actor.speedXZ < 14.0f) {
- this->actor.speedXZ = 14.0f;
+ if (this->actor.speed < 14.0f) {
+ this->actor.speed = 14.0f;
}
animeUpdated = SkelAnime_Update(&this->skin.skelAnime);
@@ -2351,7 +2351,7 @@ void func_8088159C(EnHorse* this, PlayState* play) {
void func_80881634(EnHorse* this) {
this->curRaceWaypoint = 0;
this->soundTimer = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
func_8088168C(this);
if (this->stateFlags & ENHORSE_DRAW) {
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_IT_INGO_HORSE_NEIGH);
@@ -2366,17 +2366,17 @@ void func_8088168C(EnHorse* this) {
this->action = ENHORSE_ACTION_5;
this->stateFlags &= ~ENHORSE_SANDDUST_SOUND;
- if (this->actor.speedXZ == 0.0f) {
+ if (this->actor.speed == 0.0f) {
if (this->animIndex != ENHORSE_ANIM_IDLE) {
animChanged = true;
}
this->animIndex = ENHORSE_ANIM_IDLE;
- } else if (this->actor.speedXZ <= 3.0f) {
+ } else if (this->actor.speed <= 3.0f) {
if (this->animIndex != ENHORSE_ANIM_WALK) {
animChanged = true;
}
this->animIndex = ENHORSE_ANIM_WALK;
- } else if (this->actor.speedXZ <= 6.0f) {
+ } else if (this->actor.speed <= 6.0f) {
if (this->animIndex != ENHORSE_ANIM_TROT) {
animChanged = true;
}
@@ -2389,16 +2389,16 @@ void func_8088168C(EnHorse* this) {
}
if (this->animIndex == ENHORSE_ANIM_WALK) {
- animSpeed = this->actor.speedXZ * 0.5f;
+ animSpeed = this->actor.speed * 0.5f;
} else if (this->animIndex == ENHORSE_ANIM_TROT) {
- animSpeed = this->actor.speedXZ * 0.25f;
+ animSpeed = this->actor.speed * 0.25f;
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN);
} else {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_HORSE_RUN);
}
} else if (this->animIndex == ENHORSE_ANIM_GALLOP) {
- animSpeed = this->actor.speedXZ * 0.2f;
+ animSpeed = this->actor.speed * 0.2f;
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN);
} else {
@@ -2433,8 +2433,8 @@ void func_808819D8(EnHorse* this, PlayState* play) {
}
if (!this->inRace) {
- this->actor.speedXZ = 0.0f;
- this->rider->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
+ this->rider->actor.speed = 0.0f;
if (this->animIndex != ENHORSE_ANIM_IDLE) {
EnHorse_UpdateIngoHorseAnim(this);
}
@@ -2449,29 +2449,29 @@ void func_808819D8(EnHorse* this, PlayState* play) {
}
if (!this->inRace) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->animIndex != ENHORSE_ANIM_IDLE) {
func_8088168C(this);
}
}
if (this->animIndex == ENHORSE_ANIM_WALK) {
- animSpeed = this->actor.speedXZ * 0.5f;
+ animSpeed = this->actor.speed * 0.5f;
} else if (this->animIndex == ENHORSE_ANIM_TROT) {
- animSpeed = this->actor.speedXZ * 0.25f;
+ animSpeed = this->actor.speed * 0.25f;
} else if (this->animIndex == ENHORSE_ANIM_GALLOP) {
- animSpeed = this->actor.speedXZ * 0.2f;
+ animSpeed = this->actor.speed * 0.2f;
} else {
animSpeed = 1.0f;
}
this->skin.skelAnime.playSpeed = animSpeed;
if (SkelAnime_Update(&this->skin.skelAnime) ||
- ((this->animIndex == ENHORSE_ANIM_IDLE) && (this->actor.speedXZ != 0.0f))) {
+ ((this->animIndex == ENHORSE_ANIM_IDLE) && (this->actor.speed != 0.0f))) {
func_8088168C(this);
}
- if (GET_RACE_FLAGS == 3) {
+ if (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_3) {
this->rider->unk488 = 7;
} else {
EnHorse_SetIngoAnimation(this->animIndex, this->skin.skelAnime.curFrame, this->unk_394 & 1,
@@ -2479,35 +2479,35 @@ void func_808819D8(EnHorse* this, PlayState* play) {
}
}
-void EnHorse_CsMoveInit(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
+void EnHorse_CsMoveInit(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
this->animIndex = ENHORSE_ANIM_GALLOP;
this->cutsceneAction = 1;
Animation_PlayOnceSetSpeed(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex],
- this->actor.speedXZ * 0.2f * 1.5f);
+ this->actor.speed * 0.2f * 1.5f);
}
-void EnHorse_CsMoveToPoint(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
+void EnHorse_CsMoveToPoint(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
Vec3f endPos;
s32 pad;
- endPos.x = action->endPos.x;
- endPos.y = action->endPos.y;
- endPos.z = action->endPos.z;
+ endPos.x = cue->endPos.x;
+ endPos.y = cue->endPos.y;
+ endPos.z = cue->endPos.z;
if (Math3D_Distance(&endPos, &this->actor.world.pos) > 8.0f) {
EnHorse_RotateToPoint(this, play, &endPos, 0x320);
- this->actor.speedXZ = 8.0f;
- this->skin.skelAnime.playSpeed = this->actor.speedXZ * 0.3f;
+ this->actor.speed = 8.0f;
+ this->skin.skelAnime.playSpeed = this->actor.speed * 0.3f;
} else {
this->actor.world.pos = endPos;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
if (SkelAnime_Update(&this->skin.skelAnime)) {
func_8087C1C0(this);
Rumble_Request(0.0f, 120, 8, 255);
Animation_PlayOnceSetSpeed(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex],
- this->actor.speedXZ * 0.3f);
+ this->actor.speed * 0.3f);
}
}
@@ -2543,25 +2543,25 @@ void EnHorse_CsPlayHighJumpAnim(EnHorse* this, PlayState* play) {
Rumble_Request(0.0f, 170, 10, 10);
}
-void EnHorse_CsJumpInit(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
+void EnHorse_CsJumpInit(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
EnHorse_CsSetAnimHighJump(this, play);
this->cutsceneAction = 2;
this->cutsceneFlags &= ~1;
}
-void EnHorse_CsJump(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
+void EnHorse_CsJump(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
f32 curFrame;
f32 y;
Vec3s* jointTable;
s32 pad[2];
if (this->cutsceneFlags & 1) {
- EnHorse_CsMoveToPoint(this, play, action);
+ EnHorse_CsMoveToPoint(this, play, cue);
return;
}
curFrame = this->skin.skelAnime.curFrame;
- this->actor.speedXZ = 13.0f;
+ this->actor.speed = 13.0f;
this->stateFlags |= ENHORSE_JUMPING;
if (curFrame > 19.0f) {
@@ -2608,7 +2608,7 @@ void EnHorse_CsJump(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
}
}
-void EnHorse_CsRearingInit(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
+void EnHorse_CsRearingInit(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
this->animIndex = ENHORSE_ANIM_REARING;
this->cutsceneAction = 3;
this->cutsceneFlags &= ~4;
@@ -2624,8 +2624,8 @@ void EnHorse_CsRearingInit(EnHorse* this, PlayState* play, CsCmdActorAction* act
Animation_GetLastFrame(sAnimationHeaders[this->type][this->animIndex]), ANIMMODE_ONCE, -3.0f);
}
-void EnHorse_CsRearing(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
- this->actor.speedXZ = 0.0f;
+void EnHorse_CsRearing(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
+ this->actor.speed = 0.0f;
if (this->curFrame > 25.0f) {
if (!(this->stateFlags & ENHORSE_LAND2_SOUND)) {
this->stateFlags |= ENHORSE_LAND2_SOUND;
@@ -2652,53 +2652,53 @@ void EnHorse_CsRearing(EnHorse* this, PlayState* play, CsCmdActorAction* action)
}
}
-void EnHorse_WarpMoveInit(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
- this->actor.world.pos.x = action->startPos.x;
- this->actor.world.pos.y = action->startPos.y;
- this->actor.world.pos.z = action->startPos.z;
+void EnHorse_WarpMoveInit(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
+ this->actor.world.pos.x = cue->startPos.x;
+ this->actor.world.pos.y = cue->startPos.y;
+ this->actor.world.pos.z = cue->startPos.z;
this->actor.prevPos = this->actor.world.pos;
- this->actor.world.rot.y = action->urot.y;
+ this->actor.world.rot.y = cue->rot.y;
this->actor.shape.rot = this->actor.world.rot;
this->animIndex = ENHORSE_ANIM_GALLOP;
this->cutsceneAction = 4;
Animation_PlayOnceSetSpeed(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex],
- this->actor.speedXZ * 0.3f);
+ this->actor.speed * 0.3f);
}
-void EnHorse_CsWarpMoveToPoint(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
+void EnHorse_CsWarpMoveToPoint(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
Vec3f endPos;
s32 pad;
- endPos.x = action->endPos.x;
- endPos.y = action->endPos.y;
- endPos.z = action->endPos.z;
+ endPos.x = cue->endPos.x;
+ endPos.y = cue->endPos.y;
+ endPos.z = cue->endPos.z;
if (Math3D_Distance(&endPos, &this->actor.world.pos) > 8.0f) {
EnHorse_RotateToPoint(this, play, &endPos, 0x320);
- this->actor.speedXZ = 8.0f;
- this->skin.skelAnime.playSpeed = this->actor.speedXZ * 0.3f;
+ this->actor.speed = 8.0f;
+ this->skin.skelAnime.playSpeed = this->actor.speed * 0.3f;
} else {
this->actor.world.pos = endPos;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
if (SkelAnime_Update(&this->skin.skelAnime)) {
func_8087C1C0(this);
Rumble_Request(0.0f, 120, 8, 255);
Animation_PlayOnceSetSpeed(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex],
- this->actor.speedXZ * 0.3f);
+ this->actor.speed * 0.3f);
}
}
-void EnHorse_CsWarpRearingInit(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
- this->actor.world.pos.x = action->startPos.x;
- this->actor.world.pos.y = action->startPos.y;
- this->actor.world.pos.z = action->startPos.z;
+void EnHorse_CsWarpRearingInit(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
+ this->actor.world.pos.x = cue->startPos.x;
+ this->actor.world.pos.y = cue->startPos.y;
+ this->actor.world.pos.z = cue->startPos.z;
this->actor.prevPos = this->actor.world.pos;
- this->actor.world.rot.y = action->urot.y;
+ this->actor.world.rot.y = cue->rot.y;
this->actor.shape.rot = this->actor.world.rot;
this->animIndex = ENHORSE_ANIM_REARING;
@@ -2717,8 +2717,8 @@ void EnHorse_CsWarpRearingInit(EnHorse* this, PlayState* play, CsCmdActorAction*
Animation_GetLastFrame(sAnimationHeaders[this->type][this->animIndex]), ANIMMODE_ONCE, -3.0f);
}
-void EnHorse_CsWarpRearing(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
- this->actor.speedXZ = 0.0f;
+void EnHorse_CsWarpRearing(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
+ this->actor.speed = 0.0f;
if (this->curFrame > 25.0f) {
if (!(this->stateFlags & ENHORSE_LAND2_SOUND)) {
this->stateFlags |= ENHORSE_LAND2_SOUND;
@@ -2749,19 +2749,19 @@ void EnHorse_InitCutscene(EnHorse* this, PlayState* play) {
this->playerControlled = false;
this->action = ENHORSE_ACTION_CS_UPDATE;
this->cutsceneAction = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
-s32 EnHorse_GetCutsceneFunctionIndex(s32 csAction) {
+s32 EnHorse_GetCutsceneFunctionIndex(s32 cueId) {
s32 numActions = ARRAY_COUNT(sCsActionTable); // prevents unrolling
s32 i;
for (i = 0; i < numActions; i++) {
- if (csAction == sCsActionTable[i].csAction) {
+ if (cueId == sCsActionTable[i].cueId) {
return sCsActionTable[i].csFuncIdx;
}
- if (csAction < sCsActionTable[i].csAction) {
+ if (cueId < sCsActionTable[i].cueId) {
return 0;
}
}
@@ -2770,9 +2770,9 @@ s32 EnHorse_GetCutsceneFunctionIndex(s32 csAction) {
void EnHorse_CutsceneUpdate(EnHorse* this, PlayState* play) {
s32 csFunctionIdx;
- CsCmdActorAction* playerAction = play->csCtx.playerAction;
+ CsCmdActorCue* playerCue = play->csCtx.playerCue;
- if (play->csCtx.state == CS_STATE_3) {
+ if (play->csCtx.state == CS_STATE_STOP) {
this->playerControlled = true;
this->actor.params = ENHORSE_12;
this->action = ENHORSE_ACTION_IDLE;
@@ -2780,23 +2780,23 @@ void EnHorse_CutsceneUpdate(EnHorse* this, PlayState* play) {
return;
}
- if (playerAction != NULL) {
- csFunctionIdx = EnHorse_GetCutsceneFunctionIndex(playerAction->action);
+ if (playerCue != NULL) {
+ csFunctionIdx = EnHorse_GetCutsceneFunctionIndex(playerCue->id);
if (csFunctionIdx != 0) {
if (csFunctionIdx != this->cutsceneAction) {
if (this->cutsceneAction == 0) {
- 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->actor.world.pos.x = playerCue->startPos.x;
+ this->actor.world.pos.y = playerCue->startPos.y;
+ this->actor.world.pos.z = playerCue->startPos.z;
- this->actor.world.rot.y = playerAction->urot.y;
+ this->actor.world.rot.y = playerCue->rot.y;
this->actor.shape.rot = this->actor.world.rot;
this->actor.prevPos = this->actor.world.pos;
}
this->cutsceneAction = csFunctionIdx;
- sCutsceneInitFuncs[csFunctionIdx](this, play, playerAction);
+ sCutsceneInitFuncs[csFunctionIdx](this, play, playerCue);
}
- sCutsceneActionFuncs[this->cutsceneAction](this, play, playerAction);
+ sCutsceneActionFuncs[this->cutsceneAction](this, play, playerCue);
}
}
}
@@ -2828,12 +2828,12 @@ s32 EnHorse_UpdateHbaRaceInfo(EnHorse* this, PlayState* play, RaceInfo* raceInfo
}
this->actor.shape.rot.y = this->actor.world.rot.y;
- if ((this->actor.speedXZ < raceInfo->waypoints[this->curRaceWaypoint].speed) && !(this->hbaFlags & 1)) {
- this->actor.speedXZ += 0.4f;
+ if ((this->actor.speed < raceInfo->waypoints[this->curRaceWaypoint].speed) && !(this->hbaFlags & 1)) {
+ this->actor.speed += 0.4f;
} else {
- this->actor.speedXZ -= 0.4f;
- if (this->actor.speedXZ < 0.0f) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed -= 0.4f;
+ if (this->actor.speed < 0.0f) {
+ this->actor.speed = 0.0f;
}
}
return false;
@@ -2844,7 +2844,7 @@ void EnHorse_InitHorsebackArchery(EnHorse* this) {
this->soundTimer = 0;
this->curRaceWaypoint = 0;
this->hbaTimer = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
EnHorse_UpdateHbaAnim(this);
}
@@ -2853,17 +2853,17 @@ void EnHorse_UpdateHbaAnim(EnHorse* this) {
f32 animSpeed;
this->action = ENHORSE_ACTION_HBA;
- if (this->actor.speedXZ == 0.0f) {
+ if (this->actor.speed == 0.0f) {
if (this->animIndex != ENHORSE_ANIM_IDLE) {
animChanged = true;
}
this->animIndex = ENHORSE_ANIM_IDLE;
- } else if (this->actor.speedXZ <= 3.0f) {
+ } else if (this->actor.speed <= 3.0f) {
if (this->animIndex != ENHORSE_ANIM_WALK) {
animChanged = true;
}
this->animIndex = ENHORSE_ANIM_WALK;
- } else if (this->actor.speedXZ <= 6.0f) {
+ } else if (this->actor.speed <= 6.0f) {
if (this->animIndex != ENHORSE_ANIM_TROT) {
animChanged = true;
}
@@ -2876,9 +2876,9 @@ void EnHorse_UpdateHbaAnim(EnHorse* this) {
}
if (this->animIndex == ENHORSE_ANIM_WALK) {
- animSpeed = this->actor.speedXZ * 0.5f;
+ animSpeed = this->actor.speed * 0.5f;
} else if (this->animIndex == ENHORSE_ANIM_TROT) {
- animSpeed = this->actor.speedXZ * 0.25f;
+ animSpeed = this->actor.speed * 0.25f;
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN);
} else {
@@ -2886,7 +2886,7 @@ void EnHorse_UpdateHbaAnim(EnHorse* this) {
}
Rumble_Request(0.0f, 60, 8, 255);
} else if (this->animIndex == ENHORSE_ANIM_GALLOP) {
- animSpeed = this->actor.speedXZ * 0.2f;
+ animSpeed = this->actor.speed * 0.2f;
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_RUN);
} else {
@@ -2916,46 +2916,47 @@ void EnHorse_UpdateHorsebackArchery(EnHorse* this, PlayState* play) {
EnHorse_PlayWalkingSound(this);
}
- if (play->interfaceCtx.hbaAmmo == 0) {
+ if (play->interfaceCtx.minigameAmmo == 0) {
this->hbaTimer++;
}
- sp28 = Audio_IsSequencePlaying(0x41);
+ sp28 = Audio_IsSequencePlaying(NA_BGM_HORSE_GOAL);
EnHorse_UpdateHbaRaceInfo(this, play, &sHbaInfo);
- if (((this->hbaFlags & 1) || (this->hbaTimer > 45)) && (sp28 != 1) && (gSaveContext.minigameState != 3)) {
- gSaveContext.save.cutscene = 0;
+ if (((this->hbaFlags & 1) || (this->hbaTimer > 45)) && (sp28 != 1) &&
+ (gSaveContext.minigameStatus != MINIGAME_STATUS_END)) {
+ gSaveContext.save.cutsceneIndex = 0;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_64;
}
- if (play->interfaceCtx.hbaAmmo) {}
+ if (play->interfaceCtx.minigameAmmo) {}
- if (((play->interfaceCtx.hbaAmmo == 0) || (this->hbaFlags & 2)) && (this->hbaFlags & 4)) {
+ if (((play->interfaceCtx.minigameAmmo == 0) || (this->hbaFlags & 2)) && (this->hbaFlags & 4)) {
this->hbaFlags &= ~4;
- Audio_QueueSeqCmd(0x8041);
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_HORSE_GOAL | SEQ_FLAG_ASYNC);
}
if (this->hbaStarted == 0) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->animIndex != ENHORSE_ANIM_IDLE) {
EnHorse_UpdateHbaAnim(this);
}
}
if (this->animIndex == ENHORSE_ANIM_WALK) {
- playSpeed = this->actor.speedXZ * 0.5f;
+ playSpeed = this->actor.speed * 0.5f;
} else if (this->animIndex == ENHORSE_ANIM_TROT) {
- playSpeed = this->actor.speedXZ * 0.25f;
+ playSpeed = this->actor.speed * 0.25f;
} else if (this->animIndex == ENHORSE_ANIM_GALLOP) {
- playSpeed = this->actor.speedXZ * 0.2f;
+ playSpeed = this->actor.speed * 0.2f;
} else {
playSpeed = 1.0f;
}
this->skin.skelAnime.playSpeed = playSpeed;
if (SkelAnime_Update(&this->skin.skelAnime) ||
- ((this->animIndex == ENHORSE_ANIM_IDLE) && (this->actor.speedXZ != 0.0f))) {
+ ((this->animIndex == ENHORSE_ANIM_IDLE) && (this->actor.speed != 0.0f))) {
EnHorse_UpdateHbaAnim(this);
}
}
@@ -2984,36 +2985,36 @@ void EnHorse_FleePlayer(EnHorse* this, PlayState* play) {
if (playerDistToHome > 300.0f) {
if (distToHome > 150.0f) {
- this->actor.speedXZ += 0.4f;
- if (this->actor.speedXZ > 8.0f) {
- this->actor.speedXZ = 8.0f;
+ this->actor.speed += 0.4f;
+ if (this->actor.speed > 8.0f) {
+ this->actor.speed = 8.0f;
}
} else {
- this->actor.speedXZ -= 0.5f;
- if (this->actor.speedXZ < 0.0f) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed -= 0.5f;
+ if (this->actor.speed < 0.0f) {
+ this->actor.speed = 0.0f;
}
}
} else if (distToPlayer < 300.0f) {
- this->actor.speedXZ += 0.4f;
- if (this->actor.speedXZ > 8.0f) {
- this->actor.speedXZ = 8.0f;
+ this->actor.speed += 0.4f;
+ if (this->actor.speed > 8.0f) {
+ this->actor.speed = 8.0f;
}
} else {
- this->actor.speedXZ -= 0.5f;
- if (this->actor.speedXZ < 0.0f) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed -= 0.5f;
+ if (this->actor.speed < 0.0f) {
+ this->actor.speed = 0.0f;
}
}
- if (this->actor.speedXZ >= 6.0f) {
- this->skin.skelAnime.playSpeed = this->actor.speedXZ * 0.3f;
+ if (this->actor.speed >= 6.0f) {
+ this->skin.skelAnime.playSpeed = this->actor.speed * 0.3f;
nextAnimIndex = ENHORSE_ANIM_GALLOP;
- } else if (this->actor.speedXZ >= 3.0f) {
- this->skin.skelAnime.playSpeed = this->actor.speedXZ * 0.375f;
+ } else if (this->actor.speed >= 3.0f) {
+ this->skin.skelAnime.playSpeed = this->actor.speed * 0.375f;
nextAnimIndex = ENHORSE_ANIM_TROT;
- } else if (this->actor.speedXZ > 0.1f) {
- this->skin.skelAnime.playSpeed = this->actor.speedXZ * 0.75f;
+ } else if (this->actor.speed > 0.1f) {
+ this->skin.skelAnime.playSpeed = this->actor.speed * 0.75f;
nextAnimIndex = ENHORSE_ANIM_WALK;
EnHorse_PlayWalkingSound(this);
} else {
@@ -3030,7 +3031,7 @@ void EnHorse_FleePlayer(EnHorse* this, PlayState* play) {
(nextAnimIndex == ENHORSE_ANIM_WALK)) {
if (playerDistToHome < 300.0f) {
yaw = player->actor.shape.rot.y;
- yaw += ((Actor_YawBetweenActors(&this->actor, &player->actor) > 0) ? 1 : -1) * 0x3FFF;
+ yaw += ((Actor_WorldYawTowardActor(&this->actor, &player->actor) > 0) ? 1 : -1) * 0x3FFF;
} else {
yaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->actor.home.pos) - this->actor.world.rot.y;
}
@@ -3107,28 +3108,28 @@ void EnHorse_FleePlayer(EnHorse* this, PlayState* play) {
}
}
-void func_80883B70(EnHorse* this, CsCmdActorAction* action) {
- this->actor.world.pos.x = action->startPos.x;
- this->actor.world.pos.y = action->startPos.y;
- this->actor.world.pos.z = action->startPos.z;
+void func_80883B70(EnHorse* this, CsCmdActorCue* cue) {
+ this->actor.world.pos.x = cue->startPos.x;
+ this->actor.world.pos.y = cue->startPos.y;
+ this->actor.world.pos.z = cue->startPos.z;
- this->actor.world.rot.y = action->urot.y;
+ this->actor.world.rot.y = cue->rot.y;
this->actor.shape.rot = this->actor.world.rot;
this->actor.prevPos = this->actor.world.pos;
}
-void func_80883BEC(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
- func_80883B70(this, action);
+void func_80883BEC(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
+ func_80883B70(this, cue);
this->animIndex = ENHORSE_ANIM_IDLE;
- this->unk_3E0 = 1;
+ this->cueId = 1;
this->stateFlags &= ~ENHORSE_SANDDUST_SOUND;
Animation_Change(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex], 1.0f, 0.0f,
Animation_GetLastFrame(sAnimationHeaders[this->type][this->animIndex]), ANIMMODE_ONCE, 0.0f);
this->stateFlags |= ENHORSE_SANDDUST_SOUND;
}
-void func_80883CB0(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
+void func_80883CB0(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
EnHorse_IdleAnimSounds(this, play);
if (SkelAnime_Update(&this->skin.skelAnime)) {
this->animIndex = ENHORSE_ANIM_IDLE;
@@ -3137,74 +3138,74 @@ void func_80883CB0(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
}
}
-void func_80883D64(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
- func_80883B70(this, action);
- this->unk_3E0 = 2;
+void func_80883D64(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
+ func_80883B70(this, cue);
+ this->cueId = 2;
Animation_Change(&this->skin.skelAnime, &object_horse_link_child_Anim_00A8DC, 0.0f, 0.0f,
Animation_GetLastFrame(&object_horse_link_child_Anim_00A8DC), ANIMMODE_ONCE, 0.0f);
}
-void func_80883DE0(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
+void func_80883DE0(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
SkelAnime_Update(&this->skin.skelAnime);
}
-void func_80883E10(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
- func_80883B70(this, action);
- this->unk_3E0 = 3;
+void func_80883E10(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
+ func_80883B70(this, cue);
+ this->cueId = 3;
Animation_Change(&this->skin.skelAnime, &object_horse_link_child_Anim_00A8DC, 1.0f, 0.0f,
Animation_GetLastFrame(&object_horse_link_child_Anim_00A8DC), ANIMMODE_ONCE, -3.0f);
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH);
}
-void func_80883EA0(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
+void func_80883EA0(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
if (SkelAnime_Update(&this->skin.skelAnime)) {
Animation_Change(&this->skin.skelAnime, &object_horse_link_child_Anim_00B3E0, 1.0f, 11.0f,
Animation_GetLastFrame(&object_horse_link_child_Anim_00B3E0), ANIMMODE_ONCE, 0.0f);
}
}
-void func_80883F18(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
- func_80883B70(this, action);
- this->unk_3E0 = 4;
+void func_80883F18(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
+ func_80883B70(this, cue);
+ this->cueId = 4;
Animation_Change(&this->skin.skelAnime, &object_horse_link_child_Anim_00AD08, 1.0f, 0.0f,
Animation_GetLastFrame(&object_horse_link_child_Anim_00AD08), ANIMMODE_ONCE, -3.0f);
}
-void func_80883F98(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
+void func_80883F98(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
if (Animation_OnFrame(&this->skin.skelAnime, Animation_GetLastFrame(&object_horse_link_child_Anim_00AD08) - 1.0f)) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_LAND2);
}
SkelAnime_Update(&this->skin.skelAnime);
}
-void func_80884010(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
- func_80883B70(this, action);
- this->unk_3E0 = 5;
+void func_80884010(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
+ func_80883B70(this, cue);
+ this->cueId = 5;
this->animIndex = ENHORSE_ANIM_WALK;
Animation_Change(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex], 1.0f, 0.0f,
Animation_GetLastFrame(sAnimationHeaders[this->type][this->animIndex]), ANIMMODE_ONCE, -3.0f);
}
-void func_808840C4(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
+void func_808840C4(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
EnHorse_PlayWalkingSound(this);
- Cutscene_ActorTranslateAndYaw(&this->actor, play, this->unk_530);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, this->cueChannel);
if (SkelAnime_Update(&this->skin.skelAnime)) {
Animation_Change(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex], 1.0f, 0.0f,
Animation_GetLastFrame(sAnimationHeaders[this->type][this->animIndex]), ANIMMODE_ONCE, 0.0f);
}
}
-void func_80884194(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
- func_80883B70(this, action);
- this->unk_3E0 = 6;
+void func_80884194(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
+ func_80883B70(this, cue);
+ this->cueId = 6;
this->animIndex = ENHORSE_ANIM_GALLOP;
Animation_Change(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex], 1.0f, 0.0f,
Animation_GetLastFrame(sAnimationHeaders[this->type][this->animIndex]), ANIMMODE_ONCE, -3.0f);
func_8087C1C0(this);
}
-void func_8088424C(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
- Cutscene_ActorTranslateAndYaw(&this->actor, play, this->unk_530);
+void func_8088424C(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, this->cueChannel);
if (SkelAnime_Update(&this->skin.skelAnime)) {
Animation_Change(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex], 1.0f, 0.0f,
Animation_GetLastFrame(sAnimationHeaders[this->type][this->animIndex]), ANIMMODE_ONCE, 0.0f);
@@ -3212,36 +3213,36 @@ void func_8088424C(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
}
}
-void func_80884314(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
+void func_80884314(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
ActorShape_Init(&this->actor.shape, 0.0f, NULL, 20.0f);
- func_80883B70(this, action);
- this->unk_3E0 = 7;
+ func_80883B70(this, cue);
+ this->cueId = 7;
Animation_Change(&this->skin.skelAnime, &object_horse_link_child_Anim_00D178, 1.0f, 0.0f,
Animation_GetLastFrame(&object_horse_link_child_Anim_00D178), ANIMMODE_ONCE, 0.0f);
Audio_PlaySfxAtPos(&this->unk_218, NA_SE_EV_KID_HORSE_NEIGH);
}
-void func_808843B4(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
+void func_808843B4(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
SkelAnime_Update(&this->skin.skelAnime);
if (this->curFrame > 42.0f) {
if (((s32)this->curFrame % 11) == 0) {
func_8087C1C0(this);
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, this->unk_530);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, this->cueChannel);
}
}
-void func_80884444(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
+void func_80884444(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
ActorShape_Init(&this->actor.shape, 0.0f, NULL, 20.0f);
- func_80883B70(this, action);
+ func_80883B70(this, cue);
this->cutsceneAction = 8;
Animation_Change(&this->skin.skelAnime, &object_horse_link_child_Anim_00D4E8, 1.0f, 0.0f,
Animation_GetLastFrame(&object_horse_link_child_Anim_00D4E8), ANIMMODE_ONCE, 0.0f);
func_8087C1C0(this);
}
-void func_808844E0(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
- Cutscene_ActorTranslateAndYaw(&this->actor, play, this->unk_530);
+void func_808844E0(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, this->cueChannel);
if (SkelAnime_Update(&this->skin.skelAnime)) {
Animation_Change(&this->skin.skelAnime, &object_horse_link_child_Anim_00D4E8, 1.0f, 0.0f,
Animation_GetLastFrame(&object_horse_link_child_Anim_00D4E8), ANIMMODE_ONCE, 0.0f);
@@ -3249,17 +3250,17 @@ void func_808844E0(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
}
}
-void func_80884564(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
+void func_80884564(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
ActorShape_Init(&this->actor.shape, 0.0f, NULL, 20.0f);
- func_80883B70(this, action);
+ func_80883B70(this, cue);
this->cutsceneAction = 8;
Animation_Change(&this->skin.skelAnime, &object_horse_link_child_Anim_00BDE0, 1.0f, 0.0f,
Animation_GetLastFrame(&object_horse_link_child_Anim_00BDE0), ANIMMODE_ONCE, -3.0f);
func_8087C1C0(this);
}
-void func_80884604(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
- Cutscene_ActorTranslateAndYaw(&this->actor, play, this->unk_530);
+void func_80884604(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, this->cueChannel);
if (SkelAnime_Update(&this->skin.skelAnime)) {
Animation_Change(&this->skin.skelAnime, &object_horse_link_child_Anim_00BDE0, 1.0f, 0.0f,
Animation_GetLastFrame(&object_horse_link_child_Anim_00BDE0), ANIMMODE_ONCE, 0.0f);
@@ -3270,48 +3271,48 @@ void func_80884604(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
}
}
-void func_808846B4(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
- Actor_MarkForDeath(&this->actor);
+void func_808846B4(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
+ Actor_Kill(&this->actor);
}
-void func_808846DC(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
+void func_808846DC(EnHorse* this, PlayState* play, CsCmdActorCue* cue) {
}
void func_808846F0(EnHorse* this, PlayState* play) {
this->playerControlled = false;
this->action = ENHORSE_ACTION_21;
- this->unk_3E0 = -1;
- this->actor.speedXZ = 0.0f;
+ this->cueId = -1;
+ this->actor.speed = 0.0f;
}
void func_80884718(EnHorse* this, PlayState* play) {
- CsCmdActorAction* action;
+ CsCmdActorCue* cue;
- if (Cutscene_CheckActorAction(play, 0x70)) {
- this->unk_530 = Cutscene_GetActorActionIndex(play, 0x70);
- action = play->csCtx.actorActions[this->unk_530];
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_112)) {
+ this->cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_112);
+ cue = play->csCtx.actorCues[this->cueChannel];
this->unk_1EC |= 0x20;
- if (this->unk_3E0 != action->action) {
- if (this->unk_3E0 == -1) {
- this->actor.world.pos.x = action->startPos.x;
- this->actor.world.pos.y = action->startPos.y;
- this->actor.world.pos.z = action->startPos.z;
+ if (this->cueId != cue->id) {
+ if (this->cueId == -1) {
+ this->actor.world.pos.x = cue->startPos.x;
+ this->actor.world.pos.y = cue->startPos.y;
+ this->actor.world.pos.z = cue->startPos.z;
- this->actor.world.rot.y = action->urot.y;
+ this->actor.world.rot.y = cue->rot.y;
this->actor.shape.rot = this->actor.world.rot;
this->actor.prevPos = this->actor.world.pos;
}
- this->unk_3E0 = action->action;
- if (D_808890F0[this->unk_3E0] != NULL) {
- D_808890F0[this->unk_3E0](this, play, action);
+ this->cueId = cue->id;
+ if (D_808890F0[this->cueId] != NULL) {
+ D_808890F0[this->cueId](this, play, cue);
}
}
- if (D_8088911C[this->unk_3E0] != NULL) {
- D_8088911C[this->unk_3E0](this, play, action);
+ if (D_8088911C[this->cueId] != NULL) {
+ D_8088911C[this->cueId](this, play, cue);
}
}
}
@@ -3327,9 +3328,9 @@ void func_808848C8(EnHorse* this, PlayState* play) {
Vec3f sp24 = { -1916.0f, -106.0f, -523.0f };
EnHorse_PlayWalkingSound(this);
- this->actor.speedXZ = 4.0f;
+ this->actor.speed = 4.0f;
func_800F415C(&this->actor, &sp24, 2000);
- this->skin.skelAnime.playSpeed = this->actor.speedXZ * 0.75f;
+ this->skin.skelAnime.playSpeed = this->actor.speed * 0.75f;
SkelAnime_Update(&this->skin.skelAnime);
if (Math3D_Distance(&sp24, &this->actor.world.pos) < 30.0f) {
this->stateFlags &= ~ENHORSE_UNRIDEABLE;
@@ -3381,12 +3382,12 @@ void func_80884A40(EnHorse* this, PlayState* play) {
}
if ((this->unk_538 == OBJ_UM_ANIM_TROT) || (this->unk_538 == OBJ_UM_ANIM_GALLOP)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_HORSE_RUN);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_HORSE_RUN);
} else if (this->unk_538 == OBJ_UM_ANIM_IDLE) {
if (this->animIndex == ENHORSE_ANIM_IDLE) {
EnHorse_IdleAnimSounds(this, play);
} else if (this->animIndex == ENHORSE_ANIM_WHINNY) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_HORSE_GROAN);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_HORSE_GROAN);
}
}
}
@@ -3395,12 +3396,12 @@ void func_80884A40(EnHorse* this, PlayState* play) {
void func_80884D04(EnHorse* this, PlayState* play) {
f32 playSpeed;
- this->actor.speedXZ = 10.0f;
+ this->actor.speed = 10.0f;
this->action = ENHORSE_ACTION_25;
this->unk_540 = this->actor.world.pos;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_INGO_HORSE_NEIGH);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_INGO_HORSE_NEIGH);
this->animIndex = ENHORSE_ANIM_GALLOP;
- playSpeed = this->actor.speedXZ * 0.2f;
+ playSpeed = this->actor.speed * 0.2f;
Animation_Change(&this->skin.skelAnime, sAnimationHeaders[this->type][this->animIndex],
sPlaybackSpeeds[this->animIndex] * playSpeed * 2.5f, 0.0f,
Animation_GetLastFrame(sAnimationHeaders[this->type][this->animIndex]), ANIMMODE_ONCE, 0.0f);
@@ -3471,7 +3472,7 @@ s32 EnHorse_CalcFloorHeight(EnHorse* this, PlayState* play, Vec3f* pos, Collisio
if ((COLPOLY_GET_NORMAL((*polyFloor)->normal.y) < 0.81915206f) ||
SurfaceType_IsHorseBlocked(&play->colCtx, *polyFloor, *bgId) ||
- (func_800C99D4(&play->colCtx, *polyFloor, *bgId) == 7)) {
+ (SurfaceType_GetFloorType(&play->colCtx, *polyFloor, *bgId) == FLOOR_TYPE_7)) {
return 3; // Horse blocked surface
}
@@ -3491,13 +3492,13 @@ void EnHorse_ObstructMovement(EnHorse* this, PlayState* play, s32 obstacleType,
if ((this->action == ENHORSE_ACTION_5) || (this->action == ENHORSE_ACTION_6)) {
this->actor.world.pos = this->actor.prevPos;
this->actor.world.rot.y -= 0x640;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.shape.rot.y = this->actor.world.rot.y;
this->unk_1EC |= 4;
} else if (this->action == ENHORSE_ACTION_25) {
this->unk_1EC |= 0x80;
this->actor.world.pos = this->actor.prevPos;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
} else if ((play->sceneId != SCENE_KOEPONARACE) || (this->unk_1EC & 2)) {
this->unk_1EC &= ~2;
this->actor.world.pos = this->lastPos;
@@ -3537,7 +3538,7 @@ void EnHorse_CheckFloors(EnHorse* this, PlayState* play) {
f32 nx;
f32 ny;
f32 nz;
- s32 galloping = this->actor.speedXZ > 8.0f;
+ s32 galloping = this->actor.speed > 8.0f;
s32 status;
f32 waterHeight;
WaterBox* waterbox;
@@ -3598,7 +3599,7 @@ void EnHorse_CheckFloors(EnHorse* this, PlayState* play) {
pos.y = this->yFront;
dist = Math3D_DistPlaneToPos(nx, ny, nz, this->actor.floorPoly->dist, &pos);
- if ((frontFloor != this->actor.floorPoly) && (this->actor.speedXZ >= 0.0f) &&
+ if ((frontFloor != this->actor.floorPoly) && (this->actor.speed >= 0.0f) &&
((!(this->stateFlags & ENHORSE_JUMPING) && (dist < -40.0f)) ||
((this->stateFlags & ENHORSE_JUMPING) && (dist < -200.0f)))) {
EnHorse_ObstructMovement(this, play, 4, galloping);
@@ -3609,7 +3610,7 @@ void EnHorse_CheckFloors(EnHorse* this, PlayState* play) {
pos.y = this->yBack;
dist = Math3D_DistPlaneToPos(nx, ny, nz, this->actor.floorPoly->dist, &pos);
- if ((backFloor != this->actor.floorPoly) && (this->actor.speedXZ <= 0.0f) &&
+ if ((backFloor != this->actor.floorPoly) && (this->actor.speed <= 0.0f) &&
((!(this->stateFlags & ENHORSE_JUMPING) && (dist < -40.0f)) ||
((this->stateFlags & ENHORSE_JUMPING) && (dist < -200.0f)))) {
EnHorse_ObstructMovement(this, play, 5, galloping);
@@ -3618,8 +3619,8 @@ void EnHorse_CheckFloors(EnHorse* this, PlayState* play) {
if ((ny < 0.81915206f) ||
SurfaceType_IsHorseBlocked(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) ||
- (func_800C99D4(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) == 7)) {
- if (this->actor.speedXZ >= 0.0f) {
+ (SurfaceType_GetFloorType(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) == FLOOR_TYPE_7)) {
+ if (this->actor.speed >= 0.0f) {
EnHorse_ObstructMovement(this, play, 4, galloping);
} else {
EnHorse_ObstructMovement(this, play, 5, galloping);
@@ -3738,14 +3739,18 @@ void EnHorse_UpdateBgCheckInfo(EnHorse* this, PlayState* play) {
if ((this->actor.params != ENHORSE_4) && (this->actor.params != ENHORSE_5) && (this->actor.params != ENHORSE_19) &&
(this->actor.params != ENHORSE_20) && (this->actor.params != ENHORSE_18)) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 35.0f, 100.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 35.0f, 100.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
} else {
- Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 35.0f, 100.0f, 0x1C);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 35.0f, 100.0f,
+ UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10);
}
- if ((this->actor.bgCheckFlags & 8) && (Math_CosS(this->actor.wallYaw - this->actor.world.rot.y) < -0.3f)) {
- if (this->actor.speedXZ > 4.0f) {
- this->actor.speedXZ -= 1.0f;
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) &&
+ (Math_CosS(this->actor.wallYaw - this->actor.world.rot.y) < -0.3f)) {
+ if (this->actor.speed > 4.0f) {
+ this->actor.speed -= 1.0f;
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST);
} else {
@@ -3761,8 +3766,8 @@ void EnHorse_UpdateBgCheckInfo(EnHorse* this, PlayState* play) {
((horseJump->actor.params & 0xFF) == 5)) {
this->stateFlags |= ENHORSE_FLAG_28;
this->unk_3E8 += ((-10.0f / this->actor.scale.y) - this->unk_3E8) * 0.5f;
- if (this->actor.speedXZ > 2.0f) {
- this->actor.speedXZ -= 1.0f;
+ if (this->actor.speed > 2.0f) {
+ this->actor.speed -= 1.0f;
if (this->type == HORSE_TYPE_2) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_SANDDUST);
} else {
@@ -3775,13 +3780,13 @@ void EnHorse_UpdateBgCheckInfo(EnHorse* this, PlayState* play) {
}
}
- if ((this->stateFlags & ENHORSE_JUMPING) || (this->stateFlags & ENHORSE_FLAG_28) || (this->actor.speedXZ < 0.0f) ||
+ if ((this->stateFlags & ENHORSE_JUMPING) || (this->stateFlags & ENHORSE_FLAG_28) || (this->actor.speed < 0.0f) ||
(this->action == ENHORSE_ACTION_STOPPING) || (this->action == ENHORSE_ACTION_MOUNTED_REARING)) {
return;
}
- if (this->actor.speedXZ > 8.0f) {
- if (this->actor.speedXZ < 12.8f) {
+ if (this->actor.speed > 8.0f) {
+ if (this->actor.speed < 12.8f) {
intersectDist = 160.0f;
movingFast = false;
} else {
@@ -3886,7 +3891,7 @@ void EnHorse_UpdateBgCheckInfo(EnHorse* this, PlayState* play) {
temp_f0 = COLPOLY_GET_NORMAL(obstacleFloor->normal.y);
if ((temp_f0 < 0.81915206f) || SurfaceType_IsHorseBlocked(&play->colCtx, obstacleFloor, bgId) ||
- (func_800C99D4(&play->colCtx, obstacleFloor, bgId) == 7)) {
+ (SurfaceType_GetFloorType(&play->colCtx, obstacleFloor, bgId) == FLOOR_TYPE_7)) {
if ((Math_CosS(sp7E) < 0.9f) && (movingFast == true) && (this->playerControlled == true) &&
(this->action != ENHORSE_ACTION_STOPPING) && (play->sceneId != SCENE_KOEPONARACE)) {
this->stateFlags |= ENHORSE_FORCE_REVERSING;
@@ -3949,7 +3954,7 @@ void EnHorse_UpdateBgCheckInfo(EnHorse* this, PlayState* play) {
temp_f0 = COLPOLY_GET_NORMAL(obstacleFloor->normal.y);
if ((temp_f0 < 0.81915206f) || SurfaceType_IsHorseBlocked(&play->colCtx, obstacleFloor, bgId) ||
- (func_800C99D4(&play->colCtx, obstacleFloor, bgId) == 7)) {
+ (SurfaceType_GetFloorType(&play->colCtx, obstacleFloor, bgId) == FLOOR_TYPE_7)) {
if ((movingFast == true) && (this->playerControlled == true) && (this->action != ENHORSE_ACTION_STOPPING) &&
(play->sceneId != SCENE_KOEPONARACE)) {
this->stateFlags |= ENHORSE_FORCE_REVERSING;
@@ -3971,9 +3976,9 @@ void EnHorse_UpdateBgCheckInfo(EnHorse* this, PlayState* play) {
EnHorse_Stub1(this);
this->postDrawFunc = EnHorse_LowJumpInit;
} else if ((movingFast == true) &&
- (((this->actor.speedXZ < 13.8f) && ((19.0f * temp_f0) < obstacleHeight) &&
+ (((this->actor.speed < 13.8f) && ((19.0f * temp_f0) < obstacleHeight) &&
(obstacleHeight <= (72.0f * temp_f0))) ||
- ((this->actor.speedXZ > 13.8f) && (obstacleHeight <= (112.0f * temp_f0))))) {
+ ((this->actor.speed > 13.8f) && (obstacleHeight <= (112.0f * temp_f0))))) {
EnHorse_Stub2(this);
this->postDrawFunc = EnHorse_HighJumpInit;
}
@@ -4067,7 +4072,7 @@ void EnHorse_RegenBoost(EnHorse* this, PlayState* play) {
void EnHorse_UpdatePlayerDir(EnHorse* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- s16 angle = Actor_YawBetweenActors(&this->actor, &player->actor) - this->actor.world.rot.y;
+ s16 angle = Actor_WorldYawTowardActor(&this->actor, &player->actor) - this->actor.world.rot.y;
f32 s = Math_SinS(angle);
f32 c = Math_CosS(angle);
@@ -4094,7 +4099,7 @@ void EnHorse_TiltBody(EnHorse* this, PlayState* play) {
s32 targetRoll;
s16 turnVel;
- speed = this->actor.speedXZ / this->boostSpeed;
+ speed = this->actor.speed / this->boostSpeed;
turnVel = this->actor.shape.rot.y - this->lastYaw;
targetRoll = -((s16)((2730.0f * speed) * (turnVel / 960.00006f)));
rollDiff = targetRoll - this->actor.world.rot.z;
@@ -4117,7 +4122,8 @@ s32 EnHorse_UpdateConveyors(EnHorse* this, PlayState* play) {
s16 conveyorDir;
if ((this->actor.floorPoly == NULL) || (&this->actor != player->rideActor) ||
- !SurfaceType_GetConveyorSpeed(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId)) {
+ (SurfaceType_GetConveyorSpeed(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) ==
+ CONVEYOR_SPEED_DISABLED)) {
return false;
}
@@ -4221,8 +4227,8 @@ void EnHorse_Update(Actor* thisx, PlayState* play2) {
EnHorse_RegenBoost(this, play);
}
- if (ActorCutscene_GetCurrentIndex() != -1) {
- thisx->speedXZ = 0.0f;
+ if (CutsceneManager_GetCurrentCsId() != CS_ID_NONE) {
+ thisx->speed = 0.0f;
}
if (this->action != ENHORSE_ACTION_25) {
@@ -4250,8 +4256,8 @@ void EnHorse_Update(Actor* thisx, PlayState* play2) {
}
if (this->colliderJntSph.elements->info.ocElemFlags & OCELEM_HIT) {
- if (thisx->speedXZ > 10.0f) {
- thisx->speedXZ -= 1.0f;
+ if (thisx->speed > 10.0f) {
+ thisx->speed -= 1.0f;
}
}
@@ -4349,13 +4355,13 @@ void EnHorse_Update(Actor* thisx, PlayState* play2) {
}
}
- if ((thisx->speedXZ == 0.0f) && !(this->stateFlags & ENHORSE_FLAG_19)) {
+ if ((thisx->speed == 0.0f) && !(this->stateFlags & ENHORSE_FLAG_19)) {
thisx->colChkInfo.mass = MASS_IMMOVABLE;
} else {
thisx->colChkInfo.mass = MASS_HEAVY;
}
- if (thisx->speedXZ >= 5.0f) {
+ if (thisx->speed >= 5.0f) {
this->colliderCylinder1.base.atFlags |= AT_ON;
} else {
this->colliderCylinder1.base.atFlags &= ~AT_ON;
@@ -4397,7 +4403,7 @@ s32 EnHorse_PlayerDirToMountSide(EnHorse* this, PlayState* play, Player* player)
s32 EnHorse_MountSideCheck(EnHorse* this, PlayState* play, Player* player) {
s32 mountSide;
- if (Actor_XZDistanceBetweenActors(&this->actor, &player->actor) > 75.0f) {
+ if (Actor_WorldDistXZToActor(&this->actor, &player->actor) > 75.0f) {
return 0;
}
@@ -4405,7 +4411,7 @@ s32 EnHorse_MountSideCheck(EnHorse* this, PlayState* play, Player* player) {
return 0;
}
- if (Math_CosS(Actor_YawBetweenActors(&player->actor, &this->actor) - player->actor.world.rot.y) <
+ if (Math_CosS(Actor_WorldYawTowardActor(&player->actor, &this->actor) - player->actor.world.rot.y) <
0.17364818f) { // cos(80 degrees)
return 0;
}
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 97ab2c898..b2c58bcad 100644
--- a/src/overlays/actors/ovl_En_Horse/z_en_horse.h
+++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.h
@@ -11,7 +11,7 @@ struct EnIn;
typedef void (*EnHorseActionFunc)(struct EnHorse*, PlayState*);
typedef void (*EnHorsePostdrawFunc)(struct EnHorse*, PlayState*);
-typedef void (*EnHorseCsFunc)(struct EnHorse*, PlayState*, CsCmdActorAction*);
+typedef void (*EnHorseCsFunc)(struct EnHorse*, PlayState*, CsCmdActorCue*);
#define ENHORSE_BOOST (1 << 0) /* 0x1 */
#define ENHORSE_BOOST_DECEL (1 << 1) /* 0x2 */
@@ -190,7 +190,7 @@ typedef struct EnHorse {
/* 0x3BC */ Vec3f frontLeftHoof;
/* 0x3C8 */ Vec3f backRightHoof;
/* 0x3D4 */ Vec3f backLeftHoof;
- /* 0x3E0 */ s32 unk_3E0;
+ /* 0x3E0 */ s32 cueId;
/* 0x3E4 */ UNK_TYPE1 unk_3E4[0x4];
/* 0x3E8 */ f32 unk_3E8;
/* 0x3EC */ s16 unk_3EC;
@@ -198,7 +198,7 @@ typedef struct EnHorse {
/* 0x48A */ Vec3s morphTable[OBJECT_HA_1_LIMB_MAX];
/* 0x528 */ f32 unk_528;
/* 0x52C */ s32 unk_52C;
- /* 0x530 */ s32 unk_530;
+ /* 0x530 */ s32 cueChannel;
/* 0x534 */ s32 unk_534;
/* 0x538 */ s32 unk_538;
/* 0x53C */ s32 unk_53C;
diff --git a/src/overlays/actors/ovl_En_Horse_Game_Check/overlay.cfg b/src/overlays/actors/ovl_En_Horse_Game_Check/overlay.cfg
deleted file mode 100644
index b950cc9c2..000000000
--- a/src/overlays/actors/ovl_En_Horse_Game_Check/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Horse_Game_Check
-z_en_horse_game_check.c
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 99d4eca14..5e7619cd2 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
@@ -35,7 +35,7 @@ s32 func_808F99B0(EnHorseGameCheck* this, PlayState* play);
s32 func_808F99C4(EnHorseGameCheck* this, PlayState* play);
s32 func_808F99D8(EnHorseGameCheck* this, PlayState* play);
-const ActorInit En_Horse_Game_Check_InitVars = {
+ActorInit En_Horse_Game_Check_InitVars = {
ACTOR_EN_HORSE_GAME_CHECK,
ACTORCAT_BG,
FLAGS,
@@ -59,8 +59,8 @@ s32 func_808F8AA0(EnHorseGameCheck* this, PlayState* play) {
DynaPolyActor_Init(&this->dyna, 0);
- if (GET_RACE_FLAGS != RACE_FLAG_START) {
- Actor_MarkForDeath(&this->dyna.actor);
+ if (GET_WEEKEVENTREG_RACE_FLAGS != WEEKEVENTREG_RACE_FLAG_START) {
+ Actor_Kill(&this->dyna.actor);
return false;
}
@@ -116,13 +116,13 @@ s32 func_808F8CCC(EnHorseGameCheck* this, PlayState* play2) {
this->unk_168 = 0;
this->unk_174 = 0;
- if (GET_RACE_FLAGS != RACE_FLAG_START) {
- Actor_MarkForDeath(&this->dyna.actor);
+ if (GET_WEEKEVENTREG_RACE_FLAGS != WEEKEVENTREG_RACE_FLAG_START) {
+ Actor_Kill(&this->dyna.actor);
return false;
}
Interface_StartTimer(TIMER_ID_MINIGAME_2, 0);
- play->interfaceCtx.unk_280 = 1;
+ play->interfaceCtx.minigameState = MINIGAME_STATE_COUNTDOWN_SETUP_3;
this->horse1 = (EnHorse*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -1149.0f, -106.0f, 470.0f, 0, 0x7FFF, 0,
ENHORSE_PARAMS(ENHORSE_PARAM_BANDIT, ENHORSE_4));
@@ -140,7 +140,7 @@ s32 func_808F8CCC(EnHorseGameCheck* this, PlayState* play2) {
Camera_ChangeSetting(play->cameraPtrs[CAM_ID_MAIN], CAM_SET_FREE0);
Play_SetCameraAtEye(play, CAM_ID_MAIN, &mainCamAt, &mainCamEye);
Play_SetCameraFov(play, CAM_ID_MAIN, 45.0f);
- func_800FE484();
+ Environment_StopTime();
return false;
}
@@ -156,20 +156,20 @@ s32 func_808F8EB0(EnHorseGameCheck* this, PlayState* play) {
return false;
}
- if (GET_RACE_FLAGS == RACE_FLAG_3) {
+ if (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_3) {
play->transitionType = TRANS_TYPE_64;
- gSaveContext.nextTransitionType = TRANS_TYPE_02;
- } else if (GET_RACE_FLAGS == RACE_FLAG_2) {
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
+ } else if (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_2) {
play->transitionType = TRANS_TYPE_80;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
- } else if (GET_RACE_FLAGS == RACE_FLAG_4) {
- SET_RACE_FLAGS(RACE_FLAG_3);
- play->transitionType = TRANS_TYPE_02;
- gSaveContext.nextTransitionType = TRANS_TYPE_02;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
+ } else if (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_4) {
+ SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_3);
+ play->transitionType = TRANS_TYPE_FADE_BLACK;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
}
D_801BDA9C = 0;
- if (player->stateFlags1 & 0x800000) {
+ if (player->stateFlags1 & PLAYER_STATE1_800000) {
D_801BDAA0 = 1;
}
play->nextEntrance = ENTRANCE(GORMAN_TRACK, 2);
@@ -212,10 +212,10 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) {
if ((this->unk_168 > 50) && !(this->unk_164 & 2)) {
this->unk_164 |= 2;
- } else if ((play->interfaceCtx.unk_280 >= 8) && !(this->unk_164 & 1)) {
+ } else if ((play->interfaceCtx.minigameState >= MINIGAME_STATE_COUNTDOWN_GO) && !(this->unk_164 & 1)) {
this->unk_164 |= 1;
horse->inRace = true;
- } else if ((play->interfaceCtx.unk_280 >= 8) && !(this->unk_164 & 8)) {
+ } else if ((play->interfaceCtx.minigameState >= MINIGAME_STATE_COUNTDOWN_GO) && !(this->unk_164 & 8)) {
EnHorse* horse = this->horse1;
horse->inRace = true;
@@ -248,11 +248,11 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) {
}
if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] >= SECONDS_TO_TIMER(180)) {
- Audio_QueueSeqCmd(0x8041);
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_HORSE_GOAL | SEQ_FLAG_ASYNC);
play_sound(NA_SE_SY_START_SHOT);
this->unk_164 |= 0x40000;
gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6;
- SET_RACE_FLAGS(RACE_FLAG_4);
+ SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_4);
this->unk_174 = 60;
}
@@ -281,11 +281,11 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) {
if ((this->unk_164 & 0x4000) && (horseGameCheck != NULL) &&
(horseGameCheck->dyna.actor.id == ACTOR_EN_HORSE_GAME_CHECK) &&
(horseGameCheck->unk_15C == ENHORSEGAMECHECK_FF_7) && !(this->unk_164 & 0x40000)) {
- Audio_QueueSeqCmd(0x8041);
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_HORSE_GOAL | SEQ_FLAG_ASYNC);
play_sound(NA_SE_SY_START_SHOT);
this->unk_164 |= 0x40000;
gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6;
- SET_RACE_FLAGS(RACE_FLAG_3);
+ SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_3);
this->unk_174 = 60;
}
@@ -314,11 +314,11 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) {
if ((this->unk_164 & 0x200000) && (horseGameCheck != NULL) &&
(horseGameCheck->dyna.actor.id == ACTOR_EN_HORSE_GAME_CHECK) &&
(horseGameCheck->unk_15C == ENHORSEGAMECHECK_FF_7) && !(this->unk_164 & 0x02000000)) {
- Audio_QueueSeqCmd(0x8041);
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_HORSE_GOAL | SEQ_FLAG_ASYNC);
play_sound(NA_SE_SY_START_SHOT);
this->unk_164 |= 0x02000000;
gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6;
- SET_RACE_FLAGS(RACE_FLAG_3);
+ SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_3);
this->unk_174 = 60;
}
@@ -343,11 +343,11 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) {
if ((this->unk_164 & 0x80) && (horseGameCheck != NULL) &&
(horseGameCheck->dyna.actor.id == ACTOR_EN_HORSE_GAME_CHECK) &&
(horseGameCheck->unk_15C == ENHORSEGAMECHECK_FF_7) && !(this->unk_164 & 0x800)) {
- Audio_QueueSeqCmd(0x8041);
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_HORSE_GOAL | SEQ_FLAG_ASYNC);
play_sound(NA_SE_SY_START_SHOT);
this->unk_164 |= 0x800;
gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6;
- SET_RACE_FLAGS(RACE_FLAG_2);
+ SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_2);
this->unk_174 = 60;
}
return true;
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 f07aafc1d..d43f1f90c 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
@@ -25,22 +25,6 @@ enum {
/* 10 */ ENHORSEGAMECHECK_FF_MAX,
};
-#define RACE_FLAG_END 0
-#define RACE_FLAG_START 1
-#define RACE_FLAG_2 2
-#define RACE_FLAG_3 3
-#define RACE_FLAG_4 4
-#define RACE_FLAGS 7
-
-#define GET_RACE_FLAGS (gSaveContext.save.weekEventReg[92] & RACE_FLAGS)
-
-#define SET_RACE_FLAGS(flag) \
- { \
- gSaveContext.save.weekEventReg[92] &= (u8)~RACE_FLAGS; \
- gSaveContext.save.weekEventReg[92] = \
- gSaveContext.save.weekEventReg[92] | (u8)((gSaveContext.save.weekEventReg[92] & ~RACE_FLAGS) | (flag)); \
- } (void)0
-
typedef struct EnHorseGameCheck {
/* 0x000 */ DynaPolyActor dyna;
/* 0x15C */ s32 unk_15C;
@@ -55,6 +39,4 @@ typedef struct EnHorseGameCheck {
/* 0x180 */ UNK_TYPE1 pad180[0x38];
} EnHorseGameCheck; // size = 0x1B8
-extern const ActorInit En_Horse_Game_Check_InitVars;
-
#endif // Z_EN_HORSE_GAME_CHECK_H
diff --git a/src/overlays/actors/ovl_En_Horse_Link_Child/overlay.cfg b/src/overlays/actors/ovl_En_Horse_Link_Child/overlay.cfg
deleted file mode 100644
index 09ec53e20..000000000
--- a/src/overlays/actors/ovl_En_Horse_Link_Child/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Horse_Link_Child
-z_en_horse_link_child.c
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 d5b23bdae..8c77bb2a0 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
@@ -26,7 +26,7 @@ void func_808DF620(EnHorseLinkChild* this, PlayState* play);
void func_808DF788(EnHorseLinkChild* this);
void func_808DF838(EnHorseLinkChild* this, PlayState* play);
-const ActorInit En_Horse_Link_Child_InitVars = {
+ActorInit En_Horse_Link_Child_InitVars = {
ACTOR_EN_HORSE_LINK_CHILD,
ACTORCAT_BG,
FLAGS,
@@ -120,11 +120,11 @@ f32 func_808DE728(EnHorseLinkChild* this) {
f32 phi_fv1;
if (this->unk_148 == 2) {
- phi_fv1 = D_808DFF18[this->unk_148] * this->actor.speedXZ * (1.0f / 2.0f);
+ phi_fv1 = D_808DFF18[this->unk_148] * this->actor.speed * (1.0f / 2.0f);
} else if (this->unk_148 == 3) {
- phi_fv1 = D_808DFF18[this->unk_148] * this->actor.speedXZ * (1.0f / 3.0f);
+ phi_fv1 = D_808DFF18[this->unk_148] * this->actor.speed * (1.0f / 3.0f);
} else if (this->unk_148 == 4) {
- phi_fv1 = D_808DFF18[this->unk_148] * this->actor.speedXZ * (1.0f / 5.0f);
+ phi_fv1 = D_808DFF18[this->unk_148] * this->actor.speed * (1.0f / 5.0f);
} else {
phi_fv1 = D_808DFF18[this->unk_148];
}
@@ -142,7 +142,7 @@ void EnHorseLinkChild_Init(Actor* thisx, PlayState* play) {
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawHorse, 20.0f);
this->unk_144 = 1;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.focus.pos = this->actor.world.pos;
this->actor.focus.pos.y += 70.0f;
@@ -186,7 +186,7 @@ void func_808DE9A8(EnHorseLinkChild* this) {
}
void func_808DEA0C(EnHorseLinkChild* this, PlayState* play) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (SkelAnime_Update(&this->skin.skelAnime)) {
func_808DE9A8(this);
}
@@ -194,7 +194,7 @@ void func_808DEA0C(EnHorseLinkChild* this, PlayState* play) {
void func_808DEA54(EnHorseLinkChild* this, s32 arg1) {
this->unk_144 = 2;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if ((arg1 != 0) && (arg1 != 1)) {
arg1 = 0;
@@ -208,7 +208,7 @@ void func_808DEA54(EnHorseLinkChild* this, s32 arg1) {
}
void func_808DEB14(EnHorseLinkChild* this, PlayState* play) {
- f32 sp44 = Actor_XZDistanceBetweenActors(&this->actor, &GET_PLAYER(play)->actor);
+ f32 sp44 = Actor_WorldDistXZToActor(&this->actor, &GET_PLAYER(play)->actor);
s32 phi_v0;
if (SkelAnime_Update(&this->skin.skelAnime)) {
@@ -237,7 +237,7 @@ void func_808DEB14(EnHorseLinkChild* this, PlayState* play) {
void func_808DECA0(EnHorseLinkChild* this) {
this->unk_144 = 1;
this->unk_148 = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
Animation_Change(&this->skin.skelAnime, D_808DFEC0[this->unk_148], func_808DE728(this), 0.0f,
Animation_GetLastFrame(D_808DFEC0[this->unk_148]), ANIMMODE_ONCE, -5.0f);
}
@@ -248,7 +248,7 @@ void func_808DED40(EnHorseLinkChild* this, PlayState* play) {
s32 phi_v0;
if ((this->unk_148 == 4) || (this->unk_148 == 3) || (this->unk_148 == 2)) {
- temp_a0 = Actor_YawBetweenActors(&this->actor, &GET_PLAYER(play)->actor) - this->actor.world.rot.y;
+ temp_a0 = Actor_WorldYawTowardActor(&this->actor, &GET_PLAYER(play)->actor) - this->actor.world.rot.y;
if (temp_a0 > 0x12C) {
this->actor.world.rot.y += 0x12C;
} else if (temp_a0 < -0x12C) {
@@ -260,7 +260,7 @@ void func_808DED40(EnHorseLinkChild* this, PlayState* play) {
}
if (SkelAnime_Update(&this->skin.skelAnime)) {
- temp_fv0 = Actor_XZDistanceBetweenActors(&this->actor, &GET_PLAYER(play)->actor);
+ temp_fv0 = Actor_WorldDistXZToActor(&this->actor, &GET_PLAYER(play)->actor);
if (temp_fv0 > 1000.0f) {
func_808DEA54(this, 0);
return;
@@ -268,14 +268,14 @@ void func_808DED40(EnHorseLinkChild* this, PlayState* play) {
if ((temp_fv0 < 1000.0f) && (temp_fv0 >= 300.0f)) {
phi_v0 = 4;
- this->actor.speedXZ = 6.0f;
+ this->actor.speed = 6.0f;
} else if ((temp_fv0 < 300.0f) && (temp_fv0 >= 150.0f)) {
phi_v0 = 3;
- this->actor.speedXZ = 4.0f;
+ this->actor.speed = 4.0f;
} else if ((temp_fv0 < 150.0f) && (temp_fv0 >= 70.0f)) {
phi_v0 = 2;
this->unk_1E8 = 0;
- this->actor.speedXZ = 2.0f;
+ this->actor.speed = 2.0f;
} else {
func_808DEA54(this, 1);
return;
@@ -295,7 +295,7 @@ void func_808DED40(EnHorseLinkChild* this, PlayState* play) {
void func_808DEFE8(EnHorseLinkChild* this) {
this->unk_144 = 3;
this->unk_148 = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
Animation_Change(&this->skin.skelAnime, D_808DFEC0[this->unk_148], func_808DE728(this), 0.0f,
Animation_GetLastFrame(D_808DFEC0[this->unk_148]), ANIMMODE_ONCE, -5.0f);
}
@@ -309,7 +309,7 @@ void func_808DF088(EnHorseLinkChild* this, PlayState* play) {
if (Math3D_Distance(&player->actor.world.pos, &this->actor.home.pos) < 250.0f) {
sp32 = player->actor.shape.rot.y;
- if (Actor_YawBetweenActors(&this->actor, &player->actor) > 0) {
+ if (Actor_WorldYawTowardActor(&this->actor, &player->actor) > 0) {
phi_v0 = 1;
} else {
phi_v0 = -1;
@@ -340,28 +340,29 @@ void func_808DF194(EnHorseLinkChild* this, PlayState* play) {
func_808DF088(this, play);
player = GET_PLAYER(play);
- sp50 = Actor_XZDistanceBetweenActors(&this->actor, &player->actor);
+ sp50 = Actor_WorldDistXZToActor(&this->actor, &player->actor);
sp48 = this->unk_148;
sp4C = SkelAnime_Update(&this->skin.skelAnime);
if ((sp4C != 0) || (this->unk_148 == 1) || (this->unk_148 == 0)) {
- if ((gSaveContext.save.weekEventReg[1] & 0x20)) {
+ // The carry-over of this flag from OoT was not done correctly
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_ENTERED_ZORA_HALL)) {
f32 sp44 = Math3D_Distance(&this->actor.world.pos, &this->actor.home.pos);
s32 pad;
if (Math3D_Distance(&player->actor.world.pos, &this->actor.home.pos) > 250.0f) {
if (sp44 >= 300.0f) {
sp48 = 4;
- this->actor.speedXZ = 6.0f;
+ this->actor.speed = 6.0f;
} else if ((sp44 < 300.0f) && (sp44 >= 150.0f)) {
sp48 = 3;
- this->actor.speedXZ = 4.0f;
+ this->actor.speed = 4.0f;
} else if ((sp44 < 150.0f) && (sp44 >= 70.0f)) {
sp48 = 2;
this->unk_1E8 = 0;
- this->actor.speedXZ = 2.0f;
+ this->actor.speed = 2.0f;
} else {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->unk_148 == 0) {
sp48 = (sp4C == 1) ? 1 : 0;
} else {
@@ -370,16 +371,16 @@ void func_808DF194(EnHorseLinkChild* this, PlayState* play) {
}
} else if (sp50 < 200.0f) {
sp48 = 4;
- this->actor.speedXZ = 6.0f;
+ this->actor.speed = 6.0f;
} else if (sp50 < 300.0f) {
sp48 = 3;
- this->actor.speedXZ = 4.0f;
+ this->actor.speed = 4.0f;
} else if (sp50 < 400.0f) {
sp48 = 2;
this->unk_1E8 = 0;
- this->actor.speedXZ = 2.0f;
+ this->actor.speed = 2.0f;
} else {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->unk_148 == 0) {
sp48 = (sp4C == 1) ? 1 : 0;
} else {
@@ -387,7 +388,7 @@ void func_808DF194(EnHorseLinkChild* this, PlayState* play) {
}
}
} else {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->unk_148 == 0) {
sp48 = (sp4C == 1) ? 1 : 0;
} else {
@@ -431,8 +432,8 @@ void func_808DF620(EnHorseLinkChild* this, PlayState* play) {
return;
}
- this->actor.speedXZ = 0.0f;
- sp36 = Actor_YawBetweenActors(&this->actor, &GET_PLAYER(play)->actor) - this->actor.world.rot.y;
+ this->actor.speed = 0.0f;
+ 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);
@@ -454,7 +455,7 @@ void func_808DF788(EnHorseLinkChild* this) {
this->unk_144 = 4;
this->unk_148 = 2;
this->unk_1E0 = 0;
- this->actor.speedXZ = 2.0f;
+ this->actor.speed = 2.0f;
Animation_Change(&this->skin.skelAnime, D_808DFEC0[this->unk_148], func_808DE728(this), 0.0f,
Animation_GetLastFrame(D_808DFEC0[this->unk_148]), ANIMMODE_ONCE, -5.0f);
}
@@ -479,7 +480,7 @@ void func_808DF838(EnHorseLinkChild* this, PlayState* play) {
if (SkelAnime_Update(&this->skin.skelAnime)) {
if (this->unk_1E0 == 0) {
- phi_fv0 = Actor_XZDistanceBetweenActors(&this->actor, &GET_PLAYER(play)->actor);
+ phi_fv0 = Actor_WorldDistXZToActor(&this->actor, &GET_PLAYER(play)->actor);
} else {
phi_fv0 = Math3D_Distance(&this->actor.world.pos, &this->actor.home.pos);
}
@@ -487,25 +488,25 @@ void func_808DF838(EnHorseLinkChild* this, PlayState* play) {
if (this->unk_1E0 == 0) {
if (phi_fv0 >= 300.0f) {
phi_v0 = 4;
- this->actor.speedXZ = 6.0f;
+ this->actor.speed = 6.0f;
} else if (phi_fv0 >= 150.0f) {
phi_v0 = 3;
- this->actor.speedXZ = 4.0f;
+ this->actor.speed = 4.0f;
} else {
phi_v0 = 2;
this->unk_1E8 = 0;
- this->actor.speedXZ = 2.0f;
+ this->actor.speed = 2.0f;
}
} else if (phi_fv0 >= 300.0f) {
phi_v0 = 4;
- this->actor.speedXZ = 6.0f;
+ this->actor.speed = 6.0f;
} else if (phi_fv0 >= 150.0f) {
phi_v0 = 3;
- this->actor.speedXZ = 4.0f;
+ this->actor.speed = 4.0f;
} else if (phi_fv0 >= 70.0f) {
phi_v0 = 2;
this->unk_1E8 = 0;
- this->actor.speedXZ = 2.0f;
+ this->actor.speed = 2.0f;
} else {
func_808DF560(this);
return;
@@ -528,7 +529,9 @@ void EnHorseLinkChild_Update(Actor* thisx, PlayState* play) {
D_808DFF30[this->unk_144](this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 55.0f, 100.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 55.0f, 100.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
this->actor.focus.pos = this->actor.world.pos;
this->actor.focus.pos.y += 70.0f;
diff --git a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.h b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.h
index 660261ca2..62fac6a63 100644
--- a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.h
+++ b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.h
@@ -23,6 +23,4 @@ typedef struct EnHorseLinkChild {
/* 0x298 */ UNK_TYPE1 unk298[4];
} EnHorseLinkChild; // size = 0x29C
-extern const ActorInit En_Horse_Link_Child_InitVars;
-
#endif // Z_EN_HORSE_LINK_CHILD_H
diff --git a/src/overlays/actors/ovl_En_Hs/overlay.cfg b/src/overlays/actors/ovl_En_Hs/overlay.cfg
deleted file mode 100644
index dab1cacf7..000000000
--- a/src/overlays/actors/ovl_En_Hs/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Hs
-z_en_hs.c
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 5fec47594..4d535292f 100644
--- a/src/overlays/actors/ovl_En_Hs/z_en_hs.c
+++ b/src/overlays/actors/ovl_En_Hs/z_en_hs.c
@@ -23,7 +23,7 @@ void EnHs_SceneTransitToBunnyHoodDialogue(EnHs* this, PlayState* play);
void func_80953354(EnHs* this, PlayState* play);
void func_8095345C(EnHs* this, PlayState* play);
-const ActorInit En_Hs_InitVars = {
+ActorInit En_Hs_InitVars = {
ACTOR_EN_HS,
ACTORCAT_NPC,
FLAGS,
@@ -150,7 +150,7 @@ void func_80952FE0(EnHs* this, PlayState* play) {
} else {
this->actionFunc = func_80953180;
this->stateFlags &= ~4;
- func_80151938(play, 0x33F6);
+ Message_ContinueTextbox(play, 0x33F6);
func_80952DFC(play);
}
this->stateTimer++;
@@ -162,13 +162,13 @@ void func_80953098(EnHs* this, PlayState* play) {
this->actionFunc = func_8095345C;
this->actor.flags |= ACTOR_FLAG_10000;
this->stateFlags |= 0x10;
- func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1);
} else {
this->stateFlags |= 8;
if (INV_CONTENT(ITEM_MASK_BUNNY) == ITEM_MASK_BUNNY) {
- Actor_PickUp(&this->actor, play, GI_RUPEE_RED, 10000.0f, 50.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_RUPEE_RED, 10000.0f, 50.0f);
} else {
- Actor_PickUp(&this->actor, play, GI_MASK_BUNNY, 10000.0f, 50.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MASK_BUNNY, 10000.0f, 50.0f);
}
}
}
@@ -178,20 +178,20 @@ void func_80953180(EnHs* this, PlayState* play) {
switch (play->msgCtx.currentTextId) {
case 0x33F4: // text: laughing that they are all roosters (!)
case 0x33F6: // text: Grog regrets not being able to see his chicks reach adult hood
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_8095345C;
break;
case 0x33F7: // text: notice his chicks are grown up, happy, wants to give you bunny hood
this->actor.flags &= ~ACTOR_FLAG_10000;
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80953098;
func_80953098(this, play);
break;
case 0x33F9: // text: laughing that they are all roosters (.)
this->actor.flags &= ~ACTOR_FLAG_10000;
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_8095345C;
break;
@@ -204,7 +204,7 @@ void func_80953180(EnHs* this, PlayState* play) {
break;
default:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_8095345C;
break;
}
@@ -218,14 +218,14 @@ void EnHs_SceneTransitToBunnyHoodDialogue(EnHs* this, PlayState* play) {
if (DECR(this->stateTimer) == 0) {
play->nextEntrance = play->setupExitList[HS_GET_EXIT_INDEX(&this->actor)];
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.weekEventReg[25] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_25_08);
this->actionFunc = EnHs_DoNothing;
}
}
void func_80953354(EnHs* this, PlayState* play) {
if (!Play_InCsMode(play)) {
- func_800B7298(play, &this->actor, 7);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT);
this->actionFunc = EnHs_SceneTransitToBunnyHoodDialogue;
}
}
@@ -239,7 +239,7 @@ void func_809533A0(EnHs* this, PlayState* play) {
} else if (this->stateFlags & 0x10) {
sp1E = 0x33F9;
this->stateFlags &= ~0x10;
- } else if (gSaveContext.save.weekEventReg[25] & 8) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_08)) {
sp1E = 0x33F4;
} else {
sp1E = 0x33F5;
@@ -264,7 +264,7 @@ void func_8095345C(EnHs* this, PlayState* play) {
this->actionFunc = func_80953354;
this->stateTimer = 40;
} else if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_10000)) {
- func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1);
this->stateFlags |= 1;
} else if ((this->actor.xzDistToPlayer < 120.0f) && Player_IsFacingActor(&this->actor, 0x2000, play)) {
func_800B8614(&this->actor, play, 130.0f);
@@ -282,7 +282,7 @@ void EnHs_Update(Actor* thisx, PlayState* play) {
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
if (SkelAnime_Update(&this->skelAnime)) {
this->skelAnime.curFrame = 0.0f;
diff --git a/src/overlays/actors/ovl_En_Hs/z_en_hs.h b/src/overlays/actors/ovl_En_Hs/z_en_hs.h
index d72c72d15..79f94fd4b 100644
--- a/src/overlays/actors/ovl_En_Hs/z_en_hs.h
+++ b/src/overlays/actors/ovl_En_Hs/z_en_hs.h
@@ -34,6 +34,4 @@ typedef struct EnHs {
/* 0x394 */ EnHsActionFunc actionFunc;
} EnHs; // size = 0x398
-extern const ActorInit En_Hs_InitVars;
-
#endif // Z_EN_HS_H
diff --git a/src/overlays/actors/ovl_En_Hs2/overlay.cfg b/src/overlays/actors/ovl_En_Hs2/overlay.cfg
deleted file mode 100644
index a34ed88c5..000000000
--- a/src/overlays/actors/ovl_En_Hs2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Hs2
-z_en_hs2.c
diff --git a/src/overlays/actors/ovl_En_Hs2/z_en_hs2.c b/src/overlays/actors/ovl_En_Hs2/z_en_hs2.c
index a251dd113..8273d8789 100644
--- a/src/overlays/actors/ovl_En_Hs2/z_en_hs2.c
+++ b/src/overlays/actors/ovl_En_Hs2/z_en_hs2.c
@@ -17,7 +17,7 @@ void EnHs2_Draw(Actor* thisx, PlayState* play);
void EnHs2_DoNothing(EnHs2* this, PlayState* play);
-const ActorInit En_Hs2_InitVars = {
+ActorInit En_Hs2_InitVars = {
ACTOR_EN_HS2,
ACTORCAT_NPC,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Hs2/z_en_hs2.h b/src/overlays/actors/ovl_En_Hs2/z_en_hs2.h
index 2c7568235..69836605d 100644
--- a/src/overlays/actors/ovl_En_Hs2/z_en_hs2.h
+++ b/src/overlays/actors/ovl_En_Hs2/z_en_hs2.h
@@ -13,6 +13,4 @@ typedef struct EnHs2 {
/* 0x394 */ EnHs2ActionFunc actionFunc;
} EnHs2; // size = 0x398
-extern const ActorInit En_Hs2_InitVars;
-
#endif // Z_EN_HS2_H
diff --git a/src/overlays/actors/ovl_En_Ig/overlay.cfg b/src/overlays/actors/ovl_En_Ig/overlay.cfg
deleted file mode 100644
index fa0125cbf..000000000
--- a/src/overlays/actors/ovl_En_Ig/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ig
-z_en_ig.c
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 bc1ca559b..e053a8528 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(0x4B, 0x10, 0x1A - 0x19),
+ /* 0x15 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_75_10, 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(0x4B, 0x10, 0x8A - 0x71),
+ /* 0x6D */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_75_10, 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(),
@@ -89,7 +89,7 @@ static s32 D_80BF33F0[] = {
0x10000000,
};
-const ActorInit En_Ig_InitVars = {
+ActorInit En_Ig_InitVars = {
ACTOR_EN_IG,
ACTORCAT_NPC,
FLAGS,
@@ -320,49 +320,49 @@ void func_80BF15EC(EnIg* this) {
}
}
-s32 func_80BF16C8(EnIg* this, s16 arg1) {
+s32 func_80BF16C8(EnIg* this, s16 csId) {
s32 ret = false;
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(arg1);
- } else if (ActorCutscene_GetCanPlayNext(arg1)) {
- ActorCutscene_StartAndSetUnkLinkFields(arg1, &this->actor);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(csId);
+ } else if (CutsceneManager_IsNext(csId)) {
+ CutsceneManager_StartWithPlayerCs(csId, &this->actor);
ret = true;
} else {
- ActorCutscene_SetIntentToPlay(arg1);
+ CutsceneManager_Queue(csId);
}
return ret;
}
-s16 func_80BF1744(EnIg* this, s32 arg1) {
- s16 cs = -1;
+s16 func_80BF1744(EnIg* this, s32 numCutscenes) {
+ s16 csId = CS_ID_NONE;
s32 i;
if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) {
- cs = this->actor.child->cutscene;
- for (i = 0; i < arg1; i++) {
- cs = ActorCutscene_GetAdditionalCutscene(cs);
+ csId = this->actor.child->csId;
+ for (i = 0; i < numCutscenes; i++) {
+ csId = CutsceneManager_GetAdditionalCsId(csId);
}
}
- return cs;
+ return csId;
}
s32 func_80BF17BC(EnIg* this, PlayState* play) {
s32 pad;
- s16 sp2A;
+ s16 csId;
s32 ret;
- sp2A = func_80BF1744(this, 0);
+ csId = func_80BF1744(this, 0);
ret = false;
switch (this->unk_3F6) {
case 0:
- if (func_80BF16C8(this, sp2A)) {
+ if (func_80BF16C8(this, csId)) {
case 2:
case 4:
if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) {
- Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)),
+ Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)),
this->actor.child);
}
this->unk_3F6++;
@@ -372,18 +372,18 @@ s32 func_80BF17BC(EnIg* this, PlayState* play) {
case 1:
case 3:
- if (!(gSaveContext.save.weekEventReg[75] & 0x10) && (this->unk_3F6 == 3)) {
- ActorCutscene_Stop(sp2A);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_10) && (this->unk_3F6 == 3)) {
+ CutsceneManager_Stop(csId);
this->unk_3F6 = 5;
} else {
- Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)), &this->actor);
+ Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)), &this->actor);
}
this->unk_3F6++;
ret = true;
break;
case 5:
- ActorCutscene_Stop(sp2A);
+ CutsceneManager_Stop(csId);
this->unk_3F6++;
ret = true;
break;
@@ -469,7 +469,7 @@ s32 func_80BF1B40(EnIg* this, PlayState* play) {
u16 temp = play->msgCtx.currentTextId;
s32 pad;
- if (player->stateFlags1 & 0xC40) {
+ if (player->stateFlags1 & (PLAYER_STATE1_40 | PLAYER_STATE1_400 | PLAYER_STATE1_800)) {
this->unk_3D0 |= 0x400;
if (this->unk_3D2 != temp) {
if ((this->unk_3FC == 2) || (this->unk_3FC == 3)) {
@@ -750,7 +750,7 @@ s32 func_80BF2470(EnIg* this, PlayState* play) {
Lib_Vec3f_TranslateAndRotateY(&this->unk_2B0, this->actor.world.rot.y, &sp38, &this->actor.world.pos);
this->unk_3E2 += this->timePathTimeSpeed;
if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 13.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_PIRATE_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_PIRATE_WALK);
}
}
return false;
@@ -804,7 +804,7 @@ s32 func_80BF25E8(EnIg* this, PlayState* play) {
this->timePathWaypoint = sp50;
this->timePathTargetPos = timePathTargetPos;
} else if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 13.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_PIRATE_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_PIRATE_WALK);
}
return false;
}
@@ -816,9 +816,9 @@ s32 func_80BF2890(EnIg* this, PlayState* play) {
if (!(this->unk_3D0 & 0x100) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
if (this->unk_408 != 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_SNORE1);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_SNORE1);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_SNORE2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_SNORE2);
}
this->unk_408 ^= 1;
}
@@ -876,7 +876,7 @@ void func_80BF2A50(EnIg* this, PlayState* play) {
void func_80BF2AF8(EnIg* this, PlayState* play) {
ScheduleOutput sp20;
- this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed);
+ this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
if (!Schedule_RunScript(play, D_80BF3260, &sp20) ||
((this->scheduleResult != sp20.result) && !func_80BF2368(this, play, &sp20))) {
@@ -950,9 +950,9 @@ void EnIg_Update(Actor* thisx, PlayState* play) {
func_80BF1258(this);
func_80BF13E4(this);
func_80BF15EC(this);
- func_8013C964(&this->actor, play, 60.0f, 30.0f, PLAYER_AP_NONE, this->unk_3D0 & 7);
+ func_8013C964(&this->actor, play, 60.0f, 30.0f, PLAYER_IA_NONE, this->unk_3D0 & 7);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
func_80BF1354(this, play);
}
}
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 5ff18dfef..c3fd0c3fb 100644
--- a/src/overlays/actors/ovl_En_Ig/z_en_ig.h
+++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.h
@@ -62,6 +62,4 @@ typedef struct EnIg {
/* 0x408 */ s32 unk_408;
} EnIg; // size = 0x40C
-extern const ActorInit En_Ig_InitVars;
-
#endif // Z_EN_IG_H
diff --git a/src/overlays/actors/ovl_En_Ik/overlay.cfg b/src/overlays/actors/ovl_En_Ik/overlay.cfg
deleted file mode 100644
index c4cc60ed3..000000000
--- a/src/overlays/actors/ovl_En_Ik/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ik
-z_en_ik.c
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 92f73dac5..fc7fafdcf 100644
--- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c
+++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c
@@ -74,7 +74,7 @@ static Gfx* sIronKnuckleArmorType[3][3] = {
{ gIronKnuckleWhiteArmorMaterialDL, gIronKnuckleGoldArmorMaterialDL, gIronKnuckleGoldArmorMaterialDL },
};
-const ActorInit En_Ik_InitVars = {
+ActorInit En_Ik_InitVars = {
ACTOR_EN_IK,
ACTORCAT_ENEMY,
FLAGS,
@@ -300,7 +300,7 @@ void EnIk_Freeze(EnIk* this) {
this->drawDmgEffAlpha = 1.0f;
this->timer = 80;
this->actor.flags &= ~ACTOR_FLAG_400;
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 80);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 80);
}
void EnIk_Thaw(EnIk* this, PlayState* play) {
@@ -375,7 +375,7 @@ void EnIk_SetupIdle(EnIk* this) {
Animation_Change(&this->skelAnime, &gIronKnuckleEndHorizontalAttackAnim, 1.0f, frameCount, frameCount,
ANIMMODE_ONCE, this->timer);
this->actionFunc = EnIk_Idle;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
void EnIk_Idle(EnIk* this, PlayState* play) {
@@ -386,7 +386,7 @@ void EnIk_Idle(EnIk* this, PlayState* play) {
EnIk_CheckActions(this, play);
}
} else if (this->colliderCylinder.base.acFlags & AC_HIT) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_IRONNACK_ARMOR_HIT);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_IRONNACK_ARMOR_HIT);
Audio_PlayBgm_StorePrevBgm(NA_BGM_MINI_BOSS);
this->actor.hintId = TATL_HINT_ID_IRON_KNUCKLE;
this->colliderCylinder.base.acFlags &= ~AC_HIT;
@@ -397,7 +397,7 @@ void EnIk_Idle(EnIk* this, PlayState* play) {
void EnIk_SetupWalk(EnIk* this) {
Animation_MorphToLoop(&this->skelAnime, &gIronKnuckleWalkAnim, -4.0f);
- this->actor.speedXZ = 0.9f;
+ this->actor.speed = 0.9f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = EnIk_WalkTowardsPlayer;
}
@@ -407,10 +407,10 @@ void EnIk_WalkTowardsPlayer(EnIk* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 16.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_IRONNACK_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_IRONNACK_WALK);
}
yawDiff = this->actor.wallYaw - this->actor.shape.rot.y;
- if ((this->actor.bgCheckFlags & 8) && (ABS_ALT(yawDiff) >= 0x4000)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) && (ABS_ALT(yawDiff) >= 0x4000)) {
yawDiff = (this->actor.yawTowardsPlayer > 0) ? this->actor.wallYaw - 0x4000 : this->actor.wallYaw + 0x4000;
Math_ScaledStepToS(&this->actor.shape.rot.y, yawDiff, 0x320);
} else {
@@ -424,8 +424,8 @@ void EnIk_WalkTowardsPlayer(EnIk* this, PlayState* play) {
void EnIk_SetupRun(EnIk* this) {
Animation_MorphToLoop(&this->skelAnime, &gIronKnuckleRunAnim, -4.0f);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_TWINROBA_SHOOT_VOICE);
- this->actor.speedXZ = 2.5f;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_TWINROBA_SHOOT_VOICE);
+ this->actor.speed = 2.5f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = EnIk_RunTowardsPlayer;
}
@@ -435,10 +435,10 @@ void EnIk_RunTowardsPlayer(EnIk* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (Animation_OnFrame(&this->skelAnime, 2.0f) || Animation_OnFrame(&this->skelAnime, 9.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_IRONNACK_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_IRONNACK_WALK);
}
yawDiff = this->actor.wallYaw - this->actor.shape.rot.y;
- if ((this->actor.bgCheckFlags & 8) && (ABS_ALT(yawDiff) >= 0x4000)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) && (ABS_ALT(yawDiff) >= 0x4000)) {
yawDiff = (this->actor.yawTowardsPlayer > 0) ? this->actor.wallYaw - 0x4000 : this->actor.wallYaw + 0x4000;
Math_ScaledStepToS(&this->actor.shape.rot.y, yawDiff, 0x4B0);
} else {
@@ -454,7 +454,7 @@ void EnIk_SetupVerticalAttack(EnIk* this) {
s32 pad;
f32 playbackSpeed;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->drawArmorFlags) {
playbackSpeed = 1.5f;
} else {
@@ -473,13 +473,13 @@ void EnIk_VerticalAttack(EnIk* this, PlayState* play) {
this->timer++;
if (!(this->skelAnime.curFrame < 7.0f) || !EnIk_IsChangingAction(this, play)) {
if (Animation_OnFrame(&this->skelAnime, 15.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_IRONNACK_SWING_AXE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_IRONNACK_SWING_AXE);
} else if (Animation_OnFrame(&this->skelAnime, 21.0f)) {
particlePos.x = (Math_SinS((this->actor.shape.rot.y + 0x6A4)) * 70.0f) + this->actor.world.pos.x;
particlePos.z = (Math_CosS((this->actor.shape.rot.y + 0x6A4)) * 70.0f) + this->actor.world.pos.z;
particlePos.y = this->actor.world.pos.y;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_IRONNACK_HIT_GND);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_IRONNACK_HIT_GND);
Camera_AddQuake(GET_ACTIVE_CAM(play), 2, 25, 5);
Rumble_Request(this->actor.xyzDistToPlayerSq, 180, 20, 100);
CollisionCheck_SpawnShieldParticles(play, &particlePos);
@@ -488,11 +488,11 @@ 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.speedXZ = sin_rad((this->skelAnime.curFrame - 13.0f) * (M_PI / 20)) * 10.0f;
+ this->actor.speed = sin_rad((this->skelAnime.curFrame - 13.0f) * (M_PI / 20)) * 10.0f;
}
} else {
this->colliderQuad.base.atFlags &= ~AT_ON;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
if ((this->drawArmorFlags) && (this->skelAnime.curFrame < 13.0f)) {
@@ -508,7 +508,7 @@ void EnIk_VerticalAttack(EnIk* this, PlayState* play) {
void EnIk_SetupTakeOutAxe(EnIk* this) {
Animation_PlayOnce(&this->skelAnime, &gIronKnuckleEndVerticalAttackAnim);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_IRONNACK_PULLOUT);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_IRONNACK_PULLOUT);
this->actionFunc = EnIk_TakeOutAxe;
}
@@ -525,7 +525,7 @@ void EnIk_TakeOutAxe(EnIk* this, PlayState* play) {
}
void EnIk_SetupHorizontalDoubleAttack(EnIk* this) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
Animation_Change(&this->skelAnime, &gIronKnuckleHorizontalAttackAnim, (this->drawArmorFlags) ? 1.3f : 1.0f, 0.0f,
Animation_GetLastFrame(&gIronKnuckleHorizontalAttackAnim.common), ANIMMODE_ONCE_INTERP,
(this->drawArmorFlags) ? 4.0f : 10.0f);
@@ -539,7 +539,7 @@ void EnIk_HorizontalDoubleAttack(EnIk* this, PlayState* play) {
this->timer++;
if ((Animation_OnFrame(&this->skelAnime, 1.0f)) || (Animation_OnFrame(&this->skelAnime, 13.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_IRONNACK_SWING_AXE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_IRONNACK_SWING_AXE);
}
if (((this->skelAnime.curFrame > 1.0f) && (this->skelAnime.curFrame < 9.0f)) ||
((this->skelAnime.curFrame > 12.0f) && (this->skelAnime.curFrame < 20.0f))) {
@@ -551,12 +551,12 @@ void EnIk_HorizontalDoubleAttack(EnIk* this, PlayState* play) {
} else {
phi_f2 = this->skelAnime.curFrame - 1.0f;
}
- this->actor.speedXZ = sin_rad((M_PI / 8) * phi_f2) * 4.5f;
+ this->actor.speed = sin_rad((M_PI / 8) * phi_f2) * 4.5f;
}
this->colliderQuad.base.atFlags |= AT_ON;
} else {
this->colliderQuad.base.atFlags &= ~AT_ON;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
if (SkelAnime_Update(&this->skelAnime)) {
EnIk_SetupEndHorizontalAttack(this);
@@ -566,7 +566,7 @@ void EnIk_HorizontalDoubleAttack(EnIk* this, PlayState* play) {
void EnIk_SetupSingleHorizontalAttack(EnIk* this) {
f32 playSpeed;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->drawArmorFlags) {
this->actor.world.rot.z = 0x1000;
playSpeed = 1.3f;
@@ -584,7 +584,7 @@ void EnIk_SetupSingleHorizontalAttack(EnIk* this) {
void EnIk_SingleHorizontalAttack(EnIk* this, PlayState* play) {
this->timer++;
if (Animation_OnFrame(&this->skelAnime, 13.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_IRONNACK_SWING_AXE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_IRONNACK_SWING_AXE);
}
if ((this->skelAnime.curFrame > 12.0f) && (this->skelAnime.curFrame < 20.0f)) {
this->colliderQuad.base.atFlags |= AT_ON;
@@ -611,7 +611,7 @@ void EnIk_EndHorizontalAttack(EnIk* this, PlayState* play) {
}
void EnIk_SetupBlock(EnIk* this) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
Animation_Change(&this->skelAnime, &gIronKnuckleBlockAnim, 2.0f, 0.0f,
Animation_GetLastFrame(&gIronKnuckleBlockAnim), ANIMMODE_ONCE, -2.0f);
this->timer = 20;
@@ -634,7 +634,7 @@ void EnIk_SetupReactToAttack(EnIk* this, s32 arg1) {
if (arg1) {
func_800BE504(&this->actor, &this->colliderCylinder);
}
- this->actor.speedXZ = 6.0f;
+ this->actor.speed = 6.0f;
temp_v0 = (this->actor.world.rot.y - this->actor.shape.rot.y) + 0x8000;
if (ABS_ALT(temp_v0) <= 0x4000) {
Animation_MorphToPlayOnce(&this->skelAnime, &gIronKnuckleFrontHitAnim, -4.0f);
@@ -645,13 +645,13 @@ void EnIk_SetupReactToAttack(EnIk* this, s32 arg1) {
}
void EnIk_ReactToAttack(EnIk* this, PlayState* play) {
- Math_StepToF(&this->actor.speedXZ, 0.0f, 1.0f);
+ Math_StepToF(&this->actor.speed, 0.0f, 1.0f);
if (this->subCamId != SUB_CAM_ID_DONE) {
Play_SetCameraAtEye(play, this->subCamId, &this->actor.focus.pos, &Play_GetCamera(play, this->subCamId)->eye);
}
if (SkelAnime_Update(&this->skelAnime)) {
if (this->subCamId != SUB_CAM_ID_DONE) {
- ActorCutscene_Stop(this->actor.cutscene);
+ CutsceneManager_Stop(this->actor.csId);
this->subCamId = SUB_CAM_ID_DONE;
EnIk_SetupIdle(this);
} else {
@@ -664,10 +664,10 @@ void EnIk_ReactToAttack(EnIk* this, PlayState* play) {
}
void EnIk_SetupDie(EnIk* this) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
Animation_MorphToPlayOnce(&this->skelAnime, &gIronKnuckleDeathAnim, -4.0f);
this->timer = 24;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_IRONNACK_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_IRONNACK_DEAD);
this->actionFunc = EnIk_Die;
}
@@ -693,19 +693,19 @@ void EnIk_Die(EnIk* this, PlayState* play) {
}
if (this->timer == 0) {
Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0xB0);
- ActorCutscene_Stop(this->actor.cutscene);
- Actor_MarkForDeath(&this->actor);
+ CutsceneManager_Stop(this->actor.csId);
+ Actor_Kill(&this->actor);
}
}
} else if (Animation_OnFrame(&this->skelAnime, 23.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_IRONNACK_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_IRONNACK_WALK);
}
}
void EnIk_SetupFrozen(EnIk* this) {
this->invincibilityFrames = 0;
this->actionFunc = EnIk_Frozen;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
void EnIk_Frozen(EnIk* this, PlayState* play) {
@@ -723,8 +723,8 @@ void EnIk_Frozen(EnIk* this, PlayState* play) {
}
void EnIk_SetupCutscene(EnIk* this) {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
- this->actor.speedXZ = 0.0f;
+ CutsceneManager_Queue(this->actor.csId);
+ this->actor.speed = 0.0f;
if (this->actor.colChkInfo.health != 0) {
func_800BE504(&this->actor, &this->colliderCylinder);
}
@@ -735,10 +735,10 @@ void EnIk_PlayCutscene(EnIk* this, PlayState* play) {
Vec3f subCamEye;
this->invincibilityFrames = 12;
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- if (this->actor.cutscene != -1) {
- ActorCutscene_StartAndSetFlag(this->actor.cutscene, &this->actor);
- this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene);
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ if (this->actor.csId != CS_ID_NONE) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->actor.csId, &this->actor);
+ this->subCamId = CutsceneManager_GetCurrentSubCamId(this->actor.csId);
subCamEye.x = (Math_SinS((this->actor.shape.rot.y - 0x2000)) * 120.0f) + this->actor.focus.pos.x;
subCamEye.y = this->actor.focus.pos.y + 20.0f;
subCamEye.z = (Math_CosS((this->actor.shape.rot.y - 0x2000)) * 120.0f) + this->actor.focus.pos.z;
@@ -750,7 +750,7 @@ void EnIk_PlayCutscene(EnIk* this, PlayState* play) {
EnIk_SetupDie(this);
}
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
@@ -776,7 +776,7 @@ void EnIk_UpdateDamage(EnIk* this, PlayState* play) {
if ((this->actor.colChkInfo.damageEffect != DMG_EFF_IMMUNE) &&
((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) ||
(!(this->colliderCylinder.info.acHitInfo->toucher.dmgFlags & 0xDB0B3)))) {
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 12);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 12);
this->invincibilityFrames = 12;
EnIk_Thaw(this, play);
this->colliderQuad.base.atFlags &= ~AT_ON;
@@ -793,7 +793,7 @@ void EnIk_UpdateDamage(EnIk* this, PlayState* play) {
this->drawArmorFlags = 1;
this->colliderCylinder.base.colType = 3;
this->actor.colChkInfo.damageTable = &sDamageTableNoArmor;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_IRONNACK_ARMOR_OFF_DEMO);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_IRONNACK_ARMOR_OFF_DEMO);
EnIk_SetupCutscene(this);
} else if (this->drawArmorFlags) {
if (this->actor.colChkInfo.damageEffect == DMG_EFF_ICE) {
@@ -811,7 +811,7 @@ void EnIk_UpdateDamage(EnIk* this, PlayState* play) {
} else if (this->actor.colChkInfo.damageEffect == DMG_EFF_LIGHT_SPARKS) {
EnIk_HitArmor(this, play);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_IRONNACK_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_IRONNACK_DAMAGE);
if (this->actor.colChkInfo.health != 0) {
EnIk_SetupReactToAttack(this, true);
} else {
@@ -819,8 +819,8 @@ void EnIk_UpdateDamage(EnIk* this, PlayState* play) {
}
}
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_IRONNACK_ARMOR_HIT);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_IRONNACK_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_IRONNACK_ARMOR_HIT);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_IRONNACK_DAMAGE);
if (this->actor.colChkInfo.damageEffect == 4) {
EnIk_HitArmor(this, play);
}
@@ -870,7 +870,9 @@ void EnIk_Update(Actor* thisx, PlayState* play2) {
}
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 75.0f, 30.0f, 30.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 75.0f, 30.0f, 30.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
this->actor.focus.rot.y = this->actor.shape.rot.y;
CollisionCheck_SetOC(play, &play->colChkCtx, &this->colliderCylinder.base);
if (this->invincibilityFrames == 0) {
@@ -1064,7 +1066,7 @@ void EnIk_UpdateArmorDraw(EnIk* this, PlayState* play) {
}
void EnIk_Draw(Actor* thisx, PlayState* play) {
- static Vec3f D_8092C200 = { 0.53f, 0.53f, 0.53f };
+ static Vec3f sScale = { 0.53f, 0.53f, 0.53f };
EnIk* this = THIS;
Gfx* gfx;
Gfx** gfxArmorType;
@@ -1091,7 +1093,7 @@ void EnIk_Draw(Actor* thisx, PlayState* play) {
if (this->actor.colorFilterTimer != 0) {
func_800AE5A0(play);
}
- func_800BC620(&this->actor.focus.pos, &D_8092C200, 255, play);
+ func_800BC620(&this->actor.focus.pos, &sScale, 255, play);
Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale,
this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType);
diff --git a/src/overlays/actors/ovl_En_Ik/z_en_ik.h b/src/overlays/actors/ovl_En_Ik/z_en_ik.h
index a02c4845e..3489329b1 100644
--- a/src/overlays/actors/ovl_En_Ik/z_en_ik.h
+++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.h
@@ -48,6 +48,4 @@ typedef struct EnIk {
/* 0x0550 */ IronKnuckleEffect effects[7];
} EnIk; // size = 0x668
-extern const ActorInit En_Ik_InitVars;
-
#endif // Z_EN_IK_H
diff --git a/src/overlays/actors/ovl_En_In/overlay.cfg b/src/overlays/actors/ovl_En_In/overlay.cfg
deleted file mode 100644
index 2a1b953aa..000000000
--- a/src/overlays/actors/ovl_En_In/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_In
-z_en_in.c
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 e5f56d857..8bedd48cf 100644
--- a/src/overlays/actors/ovl_En_In/z_en_in.c
+++ b/src/overlays/actors/ovl_En_In/z_en_in.c
@@ -22,7 +22,7 @@ void func_808F3690(EnIn* this, PlayState* play);
void func_808F5A34(EnIn* this, PlayState* play);
s32 func_808F5994(EnIn* this, PlayState* play, Vec3f* arg2, s16 arg3);
-const ActorInit En_In_InitVars = {
+ActorInit En_In_InitVars = {
ACTOR_EN_IN,
ACTORCAT_NPC,
FLAGS,
@@ -169,12 +169,12 @@ s32 func_808F3178(EnIn* this, PlayState* play) {
u8 tmp;
this->unk260 = tmp = SubS_IsFloorAbove(play, &this->unk248, -6.0f);
- if (this->unk260 != 0 && prevUnk260 == 0 && tmp) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_PL_WALK_CONCRETE);
+ if ((this->unk260 != 0) && (prevUnk260 == 0) && tmp) {
+ Actor_PlaySfx(&this->actor, NA_SE_PL_WALK_GROUND + SURFACE_SFX_OFFSET_STONE);
}
this->unk261 = tmp = SubS_IsFloorAbove(play, &this->unk254, -6.0f);
- if (this->unk261 != 0 && prevUnk261 == 0 && tmp) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_PL_WALK_CONCRETE);
+ if ((this->unk261 != 0) && (prevUnk261 == 0) && tmp) {
+ Actor_PlaySfx(&this->actor, NA_SE_PL_WALK_GROUND + SURFACE_SFX_OFFSET_STONE);
}
return 0;
@@ -214,7 +214,7 @@ s32 func_808F3334(EnIn* this, PlayState* play) {
if (this->colliderJntSph.base.atFlags & AT_BOUNCED) {
return 0;
}
- Actor_PlaySfxAtPos(&player->actor, NA_SE_PL_BODY_HIT);
+ Actor_PlaySfx(&player->actor, NA_SE_PL_BODY_HIT);
func_800B8D98(play, &this->actor, 3.0f, this->actor.yawTowardsPlayer, 6.0f);
}
return 1;
@@ -224,7 +224,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)) &&
- !(gSaveContext.save.weekEventReg[22] & 1);
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01);
return ret;
}
@@ -238,7 +238,7 @@ void func_808F3414(EnIn* this, PlayState* play) {
}
if (SubS_AngleDiffLessEqual(this->actor.shape.rot.y, 0x2710, this->actor.yawTowardsPlayer)) {
point.x = player->actor.world.pos.x;
- point.y = player->bodyPartsPos[7].y + 3.0f;
+ point.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
point.z = player->actor.world.pos.z;
SubS_TrackPoint(&point, &this->actor.focus.pos, &this->actor.shape.rot, &this->trackTarget, &this->headRot,
&this->torsoRot, &sTrackOptions);
@@ -287,8 +287,8 @@ void func_808F3690(EnIn* this, PlayState* play) {
s16 sp36;
Vec3f sp28;
- Math_SmoothStepToF(&this->actor.speedXZ, 1.0f, 0.4f, 1000.0f, 0.0f);
- sp36 = this->actor.speedXZ * 400.0f;
+ Math_SmoothStepToF(&this->actor.speed, 1.0f, 0.4f, 1000.0f, 0.0f);
+ sp36 = this->actor.speed * 400.0f;
if (SubS_CopyPointFromPath(this->path, this->unk244, &sp28) && SubS_MoveActorToPoint(&this->actor, &sp28, sp36)) {
this->unk244++;
if (this->unk244 >= this->path->count) {
@@ -313,7 +313,7 @@ void func_808F374C(EnIn* this, PlayState* play) {
}
}
if (this->skelAnime.animation == &object_in_Anim_0198A8 && Animation_OnFrame(&this->skelAnime, 20.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_IN_CRY_0);
+ Actor_PlaySfx(&this->actor, NA_SE_VO_IN_CRY_0);
}
if (SkelAnime_Update(&this->skelAnime)) {
this->unk488 %= ARRAY_COUNT(sAnimations);
@@ -336,7 +336,7 @@ void func_808F38F8(EnIn* this, PlayState* play) {
}
void func_808F395C(EnIn* this, PlayState* play) {
- if (this->unk4B0 == RACE_FLAG_END) {
+ if (this->unk4B0 == WEEKEVENTREG_RACE_FLAG_END) {
this->actionFunc = func_808F5A94;
}
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
@@ -352,33 +352,33 @@ void func_808F39DC(EnIn* this, PlayState* play) {
u16 textId = 0;
if (gSaveContext.save.day != 3) {
- switch (GET_RACE_FLAGS) {
- case RACE_FLAG_2:
+ switch (GET_WEEKEVENTREG_RACE_FLAGS) {
+ case WEEKEVENTREG_RACE_FLAG_2:
textId = 0x347A;
break;
- case RACE_FLAG_3:
+ case WEEKEVENTREG_RACE_FLAG_3:
textId = 0x3476;
break;
}
- SET_RACE_FLAGS(RACE_FLAG_END);
+ SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_END);
} else {
- switch (GET_RACE_FLAGS) {
- case RACE_FLAG_2:
+ switch (GET_WEEKEVENTREG_RACE_FLAGS) {
+ case WEEKEVENTREG_RACE_FLAG_2:
textId = 0x349D;
break;
- case RACE_FLAG_3:
+ case WEEKEVENTREG_RACE_FLAG_3:
textId = 0x3499;
break;
}
- SET_RACE_FLAGS(RACE_FLAG_END);
+ SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_END);
}
this->actor.flags |= ACTOR_FLAG_10000;
this->actor.textId = textId;
this->actionFunc = func_808F395C;
- if (this->unk4B0 == RACE_FLAG_2) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_IN_LOST);
+ if (this->unk4B0 == WEEKEVENTREG_RACE_FLAG_2) {
+ Actor_PlaySfx(&this->actor, NA_SE_VO_IN_LOST);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_IN_JOY0);
+ Actor_PlaySfx(&this->actor, NA_SE_VO_IN_JOY0);
}
}
@@ -388,7 +388,7 @@ void func_808F3AD4(EnIn* this, PlayState* play) {
this->unk48C = 1;
this->actionFunc = func_808F5A94;
} else {
- func_800B85E0(&this->actor, play, 200.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1);
}
}
@@ -402,7 +402,7 @@ void func_808F3B40(EnIn* this, PlayState* play) {
textId = gSaveContext.save.day != 3 ? 0x3481 : 0x34A4;
this->actor.textId = textId;
} else {
- Actor_PickUp(&this->actor, play, GI_MILK, 500.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MILK, 500.0f, 100.0f);
}
}
@@ -412,7 +412,7 @@ void func_808F3BD4(EnIn* this, PlayState* play) {
this->unk48C = 1;
this->actionFunc = func_808F5A94;
} else {
- func_800B85E0(&this->actor, play, 200.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1);
}
}
@@ -426,7 +426,7 @@ void func_808F3C40(EnIn* this, PlayState* play) {
textId = gSaveContext.save.day != 3 ? 0x346A : 0x3492;
this->actor.textId = textId;
} else {
- Actor_PickUp(&this->actor, play, GI_MILK, 500.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MILK, 500.0f, 100.0f);
}
}
@@ -436,7 +436,7 @@ void func_808F3CD4(EnIn* this, PlayState* play) {
this->unk48C = 1;
this->actionFunc = func_808F5A94;
} else {
- func_800B85E0(&this->actor, play, 200.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1);
}
}
@@ -450,7 +450,7 @@ void func_808F3D40(EnIn* this, PlayState* play) {
this->actor.textId = textId;
this->actor.flags |= ACTOR_FLAG_10000;
} else {
- Actor_PickUp(&this->actor, play, GI_MASK_GARO, 500.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MASK_GARO, 500.0f, 100.0f);
}
}
@@ -458,7 +458,7 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) {
u16 textId = 0;
if (Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER) {
- if (!(gSaveContext.save.weekEventReg[63] & 0x40)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40)) {
textId = 0x34A9;
} else if (this->unk4AC & 8) {
textId = 0x34B1;
@@ -475,14 +475,14 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) {
textId = 0x345C;
} else if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) {
textId = 0x3460;
- } else if (!(gSaveContext.save.weekEventReg[15] & 8)) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_15_08)) {
textId = 0x3458;
} else {
textId = 0x345B;
}
break;
case 1:
- if (!(gSaveContext.save.weekEventReg[15] & 0x10)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_15_10)) {
textId = 0x3463;
} else {
textId = 0x346B;
@@ -494,7 +494,7 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) {
} else if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA ||
gSaveContext.save.playerForm == PLAYER_FORM_GORON) {
textId = 0x3484;
- } else if (!(gSaveContext.save.weekEventReg[56] & 4)) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_56_04)) {
textId = 0x346D;
} else {
textId = 0x3482;
@@ -505,7 +505,7 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) {
textId = 0x348A;
} else if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) {
textId = 0x348B;
- } else if (!(gSaveContext.save.weekEventReg[16] & 1)) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_16_01)) {
textId = 0x3486;
} else {
textId = 0x3489;
@@ -514,7 +514,7 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) {
case 5:
if (func_808F33B8()) {
textId = 0x34B3;
- } else if (!(gSaveContext.save.weekEventReg[16] & 2)) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_16_02)) {
textId = 0x348E;
} else {
textId = 0x3493;
@@ -526,7 +526,7 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) {
} else if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA ||
gSaveContext.save.playerForm == PLAYER_FORM_GORON) {
textId = 0x34A7;
- } else if (!(gSaveContext.save.weekEventReg[16] & 4)) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_16_04)) {
textId = 0x3495;
} else {
textId = 0x34A5;
@@ -576,9 +576,9 @@ s32 func_808F4150(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx)
if (msgCtx->choiceIndex == 0) {
func_8019F208();
- if (gSaveContext.save.playerData.rupees >= play->msgCtx.unk1206C) {
+ if (gSaveContext.save.saveInfo.playerData.rupees >= play->msgCtx.unk1206C) {
Rupees_ChangeBy(-play->msgCtx.unk1206C);
- if (!(gSaveContext.save.weekEventReg[57] & 1)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_57_01)) {
func_808F4108(this, play, 0x3474);
} else if (this->unk4AC & 8) {
func_808F4108(this, play, 0x3475);
@@ -602,9 +602,9 @@ s32 func_808F4270(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx,
if (msgCtx->choiceIndex == 0) {
func_8019F208();
- if (gSaveContext.save.playerData.rupees >= fee) {
+ if (gSaveContext.save.saveInfo.playerData.rupees >= fee) {
Rupees_ChangeBy(-fee);
- if (!(gSaveContext.save.weekEventReg[57] & 1)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_57_01)) {
if (arg4 != 0) {
Actor_ContinueText(play, &this->actor, 0x3474);
} else {
@@ -635,7 +635,7 @@ s32 func_808F4270(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx,
s32 func_808F43E0(EnIn* this) {
this->unk48C = 0;
this->actor.textId = 0;
- SET_RACE_FLAGS(RACE_FLAG_END);
+ SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_END);
return 0;
}
@@ -652,7 +652,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
break;
case 0x34A9:
func_808F4108(this, play, 0x34AA);
- gSaveContext.save.weekEventReg[63] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_63_40);
ret = false;
break;
case 0x34AA:
@@ -683,7 +683,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
case 0:
switch (textId) {
case 0x3458:
- gSaveContext.save.weekEventReg[15] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_15_08);
Actor_ContinueText(play, &this->actor, 0x3459);
ret = false;
break;
@@ -732,7 +732,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
case 1:
switch (textId) {
case 0x3463:
- gSaveContext.save.weekEventReg[15] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_15_10);
Actor_ContinueText(play, &this->actor, 0x3464);
ret = false;
break;
@@ -747,10 +747,10 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
case 0x3466:
if (msgCtx->choiceIndex == 0) {
func_8019F208();
- if (gSaveContext.save.playerData.rupees >= play->msgCtx.unk1206C) {
+ if (gSaveContext.save.saveInfo.playerData.rupees >= play->msgCtx.unk1206C) {
if (Inventory_HasEmptyBottle()) {
this->actionFunc = func_808F3C40;
- Actor_PickUp(&this->actor, play, GI_MILK, 500.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MILK, 500.0f, 100.0f);
Rupees_ChangeBy(-play->msgCtx.unk1206C);
ret = true;
} else {
@@ -808,21 +808,21 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
break;
case 0x3472:
func_808F43E0(this);
- gSaveContext.save.weekEventReg[56] &= (u8)~8;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08);
func_80151BB4(play, 0x11);
ret = true;
break;
case 0x3473:
- gSaveContext.save.weekEventReg[56] &= (u8)~8;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08);
func_80151BB4(play, 0x11);
break;
case 0x3475:
- SET_RACE_FLAGS(RACE_FLAG_START);
+ SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_START);
func_800FD750(NA_BGM_HORSE);
play->nextEntrance = ENTRANCE(GORMAN_TRACK, 5);
- play->transitionType = TRANS_TYPE_05;
+ play->transitionType = TRANS_TYPE_FADE_WHITE_FAST;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.weekEventReg[57] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_57_01);
break;
case 0x3478:
if (msgCtx->choiceIndex == 0) {
@@ -830,14 +830,14 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
ret = false;
} else {
func_8019F230();
- gSaveContext.save.weekEventReg[56] &= (u8)~8;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08);
func_808F4108(this, play, 0x3479);
ret = false;
}
break;
case 0x347B:
func_808F4108(this, play, 0x347C);
- gSaveContext.save.weekEventReg[56] &= (u8)~8;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08);
ret = false;
break;
}
@@ -846,8 +846,8 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
switch (textId) {
case 0x346D:
func_808F4108(this, play, 0x346E);
- gSaveContext.save.weekEventReg[56] |= 4;
- gSaveContext.save.weekEventReg[56] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_56_04);
+ SET_WEEKEVENTREG(WEEKEVENTREG_56_08);
ret = false;
break;
case 0x346F:
@@ -856,7 +856,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
break;
case 0x3482:
func_808F4108(this, play, 0x3483);
- gSaveContext.save.weekEventReg[56] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_56_08);
ret = false;
break;
case 0x3484:
@@ -876,7 +876,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
ret = false;
break;
case 0x3477:
- gSaveContext.save.weekEventReg[56] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_56_08);
func_808F4108(this, play, 0x3478);
ret = false;
break;
@@ -887,7 +887,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
Actor_ContinueText(play, &this->actor, 0x347E);
ret = false;
} else {
- gSaveContext.save.weekEventReg[56] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_56_08);
func_808F4108(this, play, 0x347B);
ret = false;
}
@@ -896,7 +896,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
func_808F35D8(this, play);
if (Inventory_HasEmptyBottle()) {
this->actionFunc = func_808F3B40;
- Actor_PickUp(&this->actor, play, GI_MILK, 500.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MILK, 500.0f, 100.0f);
ret = true;
} else {
Actor_ContinueText(play, &this->actor, 0x347F);
@@ -920,7 +920,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
break;
case 0x347C:
this->actionFunc = func_808F3D40;
- Actor_PickUp(&this->actor, play, GI_MASK_GARO, 500.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MASK_GARO, 500.0f, 100.0f);
func_808F35D8(this, play);
ret = true;
break;
@@ -943,7 +943,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
switch (textId) {
case 0x3486:
Actor_ContinueText(play, &this->actor, 0x3487);
- gSaveContext.save.weekEventReg[16] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_16_01);
ret = false;
break;
case 0x3487:
@@ -984,7 +984,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
case 0x348E:
case 0x34B3:
Actor_ContinueText(play, &this->actor, 0x348F);
- gSaveContext.save.weekEventReg[16] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_16_02);
ret = false;
break;
case 0x3493:
@@ -999,10 +999,10 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
case 0x3490:
if (msgCtx->choiceIndex == 0) {
func_8019F208();
- if (gSaveContext.save.playerData.rupees >= play->msgCtx.unk1206C) {
+ if (gSaveContext.save.saveInfo.playerData.rupees >= play->msgCtx.unk1206C) {
if (Inventory_HasEmptyBottle()) {
this->actionFunc = func_808F3C40;
- Actor_PickUp(&this->actor, play, GI_MILK, 500.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MILK, 500.0f, 100.0f);
Rupees_ChangeBy(-play->msgCtx.unk1206C);
ret = true;
} else {
@@ -1036,8 +1036,8 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
break;
case 0x3495:
func_808F4108(this, play, 0x3496);
- gSaveContext.save.weekEventReg[16] |= 4;
- gSaveContext.save.weekEventReg[56] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_16_04);
+ SET_WEEKEVENTREG(WEEKEVENTREG_56_08);
ret = false;
break;
case 0x3497:
@@ -1052,11 +1052,11 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
break;
case 0x34A5:
func_808F4108(this, play, 0x34A6);
- gSaveContext.save.weekEventReg[56] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_56_08);
ret = false;
break;
case 0x3473:
- gSaveContext.save.weekEventReg[56] &= (u8)~8;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08);
func_80151BB4(play, 0x11);
break;
case 0x3474:
@@ -1064,12 +1064,12 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
ret = false;
break;
case 0x3475:
- SET_RACE_FLAGS(RACE_FLAG_START);
+ SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_START);
func_800FD750(NA_BGM_HORSE);
play->nextEntrance = ENTRANCE(GORMAN_TRACK, 5);
- play->transitionType = TRANS_TYPE_05;
+ play->transitionType = TRANS_TYPE_FADE_WHITE_FAST;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.weekEventReg[57] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_57_01);
break;
case 0x349D:
EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_1);
@@ -1078,14 +1078,14 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
Actor_ContinueText(play, &this->actor, 0x34A1);
ret = false;
} else {
- gSaveContext.save.weekEventReg[56] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_56_08);
func_808F4108(this, play, 0x349E);
ret = false;
}
break;
case 0x349F:
this->actionFunc = func_808F3D40;
- Actor_PickUp(&this->actor, play, GI_MASK_GARO, 500.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MASK_GARO, 500.0f, 100.0f);
func_808F35D8(this, play);
ret = true;
break;
@@ -1100,7 +1100,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
func_808F35D8(this, play);
if (Inventory_HasEmptyBottle()) {
this->actionFunc = func_808F3B40;
- Actor_PickUp(&this->actor, play, GI_MILK, 500.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MILK, 500.0f, 100.0f);
ret = true;
} else {
Actor_ContinueText(play, &this->actor, 0x34A2);
@@ -1161,13 +1161,13 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) {
break;
case 0x3472:
func_808F43E0(this);
- gSaveContext.save.weekEventReg[56] &= (u8)~8;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08);
func_80151BB4(play, 0x11);
ret = true;
break;
case 0x349E:
func_808F4108(this, play, 0x349F);
- gSaveContext.save.weekEventReg[56] &= (u8)~8;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08);
ret = false;
break;
}
@@ -1188,7 +1188,7 @@ s32 func_808F5674(PlayState* play, EnIn* this, s32 arg2) {
case TEXT_STATE_CHOICE:
case TEXT_STATE_5:
if (Message_ShouldAdvance(play) && func_808F4414(play, this, arg2)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
ret = true;
}
break;
@@ -1210,7 +1210,7 @@ s32 func_808F5728(PlayState* play, EnIn* this, s32 arg2, s32* arg3) {
return 0;
}
if (*arg3 == 3) {
- func_80151938(play, this->actor.textId);
+ Message_ContinueTextbox(play, this->actor.textId);
*arg3 = 1;
return 0;
}
@@ -1303,8 +1303,8 @@ void func_808F5A94(EnIn* this, PlayState* play) {
void func_808F5B58(EnIn* this, PlayState* play) {
if (func_800F41E4(play, &play->actorCtx)) {
- if ((Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER && gSaveContext.save.weekEventReg[63] & 0x40) ||
- gSaveContext.save.weekEventReg[56] & 8) {
+ if ((Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40)) ||
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_56_08)) {
if (gSaveContext.save.day == 3) {
func_808F5728(play, this, 6, &this->unk48C);
} else {
@@ -1312,7 +1312,7 @@ void func_808F5B58(EnIn* this, PlayState* play) {
}
}
} else if (Player_GetMask(play) != PLAYER_MASK_CIRCUS_LEADER ||
- (Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER && gSaveContext.save.weekEventReg[63] & 0x40)) {
+ (Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40))) {
if (gSaveContext.save.day == 3) {
func_808F5728(play, this, 4, &this->unk48C);
} else {
@@ -1322,11 +1322,11 @@ void func_808F5B58(EnIn* this, PlayState* play) {
}
void func_808F5C98(EnIn* this, PlayState* play) {
- if (this->unk4B0 == RACE_FLAG_END) {
+ if (this->unk4B0 == WEEKEVENTREG_RACE_FLAG_END) {
this->actionFunc = func_808F5B58;
}
- if ((Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER && gSaveContext.save.weekEventReg[63] & 0x40) ||
- gSaveContext.save.weekEventReg[56] & 8) {
+ if ((Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40)) ||
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_56_08)) {
if (gSaveContext.save.day != 3) {
func_808F5728(play, this, 2, &this->unk48C);
} else {
@@ -1334,10 +1334,10 @@ void func_808F5C98(EnIn* this, PlayState* play) {
}
}
if (this->unk4A8 == 2) {
- if (this->unk4B0 == RACE_FLAG_2) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_IN_LOST);
+ if (this->unk4B0 == WEEKEVENTREG_RACE_FLAG_2) {
+ Actor_PlaySfx(&this->actor, NA_SE_VO_IN_LOST);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_IN_JOY0);
+ Actor_PlaySfx(&this->actor, NA_SE_VO_IN_JOY0);
}
this->unk4A8 = 3;
} else if (this->unk4A8 < 3) {
@@ -1366,7 +1366,7 @@ void EnIn_Init(Actor* thisx, PlayState* play) {
this->unk48C = 0;
this->unk4AC = 0;
type = ENIN_GET_TYPE(thisx);
- this->unk4B0 = GET_RACE_FLAGS;
+ this->unk4B0 = GET_WEEKEVENTREG_RACE_FLAGS;
if (type == ENIN_HORSE_RIDER_BLUE_SHIRT || type == ENIN_BLUE_SHIRT) {
this->unk4AC |= 8;
}
@@ -1387,19 +1387,21 @@ void EnIn_Init(Actor* thisx, PlayState* play) {
this->path = SubS_GetPathByIndex(play, ENIN_GET_PATH(&this->actor), 0x3F);
this->unk23D = 0;
if (type == ENIN_YELLOW_SHIRT || type == ENIN_BLUE_SHIRT) {
- if (GET_RACE_FLAGS == RACE_FLAG_2 || GET_RACE_FLAGS == RACE_FLAG_3) {
- gSaveContext.save.weekEventReg[56] &= (u8)~8;
+ if ((GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_2) ||
+ (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_3)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08);
this->unk4A8 = 0;
this->unk4AC |= 2;
func_808F35AC(this, play);
this->unk23C = 0;
D_801BDAA0 = 0;
- if (GET_RACE_FLAGS == RACE_FLAG_2) {
+
+ if (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_2) {
EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_6);
} else {
EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_4);
}
- if (GET_RACE_FLAGS == RACE_FLAG_2) {
+ if (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_2) {
this->skelAnime.curFrame = ((Rand_ZeroOne() * 0.6f) + 0.2f) * this->skelAnime.endFrame;
}
if (this->unk4AC & 8) {
@@ -1408,8 +1410,8 @@ void EnIn_Init(Actor* thisx, PlayState* play) {
this->actionFunc = func_808F5C98;
}
} else {
- if (GET_RACE_FLAGS != RACE_FLAG_START) {
- gSaveContext.save.weekEventReg[56] &= (u8)~8;
+ if (GET_WEEKEVENTREG_RACE_FLAGS != WEEKEVENTREG_RACE_FLAG_START) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08);
this->unk23C = 0;
this->unk4AC |= 2;
if (type == ENIN_BLUE_SHIRT) {
@@ -1417,26 +1419,26 @@ void EnIn_Init(Actor* thisx, PlayState* play) {
EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_0);
this->actionFunc = func_808F5A94;
} else {
- if (gSaveContext.save.weekEventReg[52] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) {
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);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_0);
this->actionFunc = func_808F5A94;
}
}
} else {
- if (gSaveContext.save.weekEventReg[52] & 1) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) {
+ Actor_Kill(&this->actor);
} else {
EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_7);
this->actionFunc = func_808F5B58;
}
}
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
} else {
@@ -1466,7 +1468,7 @@ void EnIn_Update(Actor* thisx, PlayState* play) {
this->unk4AC &= ~0x40;
}
this->actionFunc(this, play);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 0x4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
func_808F3414(this, play);
func_808F32A0(this, play);
}
@@ -1479,7 +1481,7 @@ void func_808F6334(EnIn* this, PlayState* play) {
this->unk4C4 = CLAMP(this->unk4C4, 0.0f, 80.0f);
Matrix_Translate(this->unk4C4, 0.0f, 0.0f, MTXMODE_APPLY);
- if ((&this->actor == player->targetActor) &&
+ if ((&this->actor == player->talkActor) &&
!((play->msgCtx.currentTextId >= 0xFF) && (play->msgCtx.currentTextId <= 0x200)) &&
(talkState == TEXT_STATE_3) && (this->prevTalkState == TEXT_STATE_3)) {
if (!(play->state.frames & 1)) {
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 9221c94ce..dd32ac9c6 100644
--- a/src/overlays/actors/ovl_En_In/z_en_in.h
+++ b/src/overlays/actors/ovl_En_In/z_en_in.h
@@ -83,6 +83,4 @@ typedef struct EnIn {
/* 0x4C0 */ s32 prevTalkState;
} EnIn; // size = 0x4CC
-extern const ActorInit En_In_InitVars;
-
#endif // Z_EN_IN_H
diff --git a/src/overlays/actors/ovl_En_Insect/overlay.cfg b/src/overlays/actors/ovl_En_Insect/overlay.cfg
deleted file mode 100644
index f439a7c1b..000000000
--- a/src/overlays/actors/ovl_En_Insect/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Insect
-z_en_insect.c
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 e985f6b5c..866f1d1b8 100644
--- a/src/overlays/actors/ovl_En_Insect/z_en_insect.c
+++ b/src/overlays/actors/ovl_En_Insect/z_en_insect.c
@@ -32,7 +32,7 @@ void func_8091B984(EnInsect* this, PlayState* play);
s16 D_8091BD60 = 0;
-const ActorInit En_Insect_InitVars = {
+ActorInit En_Insect_InitVars = {
ACTOR_EN_INSECT,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -112,7 +112,7 @@ void func_8091A9E4(EnInsect* this) {
return;
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_MUSI_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_MUSI_WALK);
this->unk_316 = 3.0f / CLAMP_MIN(this->skelAnime.playSpeed, 0.1f);
if (this->unk_316 < 2) {
@@ -181,9 +181,9 @@ void func_8091AC78(EnInsect* this) {
void func_8091ACC4(EnInsect* this, PlayState* play) {
f32 temp_f2;
- Math_SmoothStepToF(&this->actor.speedXZ, 0.0f, 0.1f, 0.5f, 0.0f);
+ Math_SmoothStepToF(&this->actor.speed, 0.0f, 0.1f, 0.5f, 0.0f);
- temp_f2 = (Rand_ZeroOne() * 0.8f) + (this->actor.speedXZ * 1.2f);
+ temp_f2 = (Rand_ZeroOne() * 0.8f) + (this->actor.speed * 1.2f);
if (temp_f2 < 0.0f) {
this->skelAnime.playSpeed = 0.0f;
} else {
@@ -201,7 +201,7 @@ void func_8091ACC4(EnInsect* this, PlayState* play) {
if ((this->unk_30C & 4) && (this->unk_314 <= 0)) {
func_8091B3D0(this);
- } else if ((this->unk_30C & 1) && (this->actor.bgCheckFlags & 0x40)) {
+ } else if ((this->unk_30C & 1) && (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH)) {
func_8091B618(this);
} else if (this->actor.xzDistToPlayer < 40.0f) {
func_8091B030(this);
@@ -218,7 +218,7 @@ void func_8091AE5C(EnInsect* this, PlayState* play) {
s32 pad;
f32 temp_f0;
- Math_SmoothStepToF(&this->actor.speedXZ, 1.5f, 0.1f, 0.5f, 0.0f);
+ Math_SmoothStepToF(&this->actor.speed, 1.5f, 0.1f, 0.5f, 0.0f);
if ((EnInsect_XZDistanceSquared(&this->actor.world.pos, &this->actor.home.pos) > SQ(40.0f)) ||
(this->unk_312 < 4)) {
@@ -231,7 +231,7 @@ void func_8091AE5C(EnInsect* this, PlayState* play) {
this->actor.shape.rot.y = this->actor.world.rot.y;
- temp_f0 = this->actor.speedXZ * 1.4f;
+ temp_f0 = this->actor.speed * 1.4f;
this->skelAnime.playSpeed = CLAMP(temp_f0, 0.7f, 1.9f);
SkelAnime_Update(&this->skelAnime);
@@ -241,7 +241,7 @@ void func_8091AE5C(EnInsect* this, PlayState* play) {
if ((this->unk_30C & 4) && (this->unk_314 <= 0)) {
func_8091B3D0(this);
- } else if ((this->unk_30C & 1) && (this->actor.bgCheckFlags & 0x40)) {
+ } else if ((this->unk_30C & 1) && (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH)) {
func_8091B618(this);
} else if (this->actor.xzDistToPlayer < 40.0f) {
func_8091B030(this);
@@ -261,7 +261,7 @@ void func_8091B07C(EnInsect* this, PlayState* play) {
s16 yaw;
s32 sp38 = this->actor.xzDistToPlayer < 40.0f;
- Math_SmoothStepToF(&this->actor.speedXZ, 1.8f, 0.1f, 0.5f, 0.0f);
+ Math_SmoothStepToF(&this->actor.speed, 1.8f, 0.1f, 0.5f, 0.0f);
if ((EnInsect_XZDistanceSquared(&this->actor.world.pos, &this->actor.home.pos) > SQ(160.0f)) ||
(this->unk_312 < 4)) {
@@ -284,13 +284,13 @@ void func_8091B07C(EnInsect* this, PlayState* play) {
this->actor.shape.rot.y = this->actor.world.rot.y;
- speed = this->actor.speedXZ * 1.6f;
+ speed = this->actor.speed * 1.6f;
this->skelAnime.playSpeed = CLAMP(speed, 0.8f, 1.9f);
SkelAnime_Update(&this->skelAnime);
if ((this->unk_312 <= 0) || !sp38) {
func_8091AC78(this);
- } else if ((this->unk_30C & 1) && (this->actor.bgCheckFlags & 0x40)) {
+ } else if ((this->unk_30C & 1) && (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH)) {
func_8091B618(this);
}
}
@@ -299,7 +299,7 @@ void func_8091B274(EnInsect* this) {
this->unk_312 = 200;
Actor_SetScale(&this->actor, 0.001f);
this->actor.draw = NULL;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->skelAnime.playSpeed = 0.3f;
this->actionFunc = func_8091B2D8;
this->unk_30C &= ~0x100;
@@ -310,7 +310,7 @@ void func_8091B2D8(EnInsect* this, PlayState* play) {
this->actor.draw = EnInsect_Draw;
} else if (this->unk_312 == 0) {
if (this->unk_30C & 4) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -325,7 +325,7 @@ void func_8091B2D8(EnInsect* this, PlayState* play) {
void func_8091B3D0(EnInsect* this) {
this->unk_312 = 60;
this->skelAnime.playSpeed = 1.9f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALTURA_BOUND);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALTURA_BOUND);
Math_Vec3f_Copy(&this->actor.home.pos, &this->actor.world.pos);
this->actionFunc = func_8091B440;
this->unk_30C &= ~0x100;
@@ -336,7 +336,7 @@ void func_8091B440(EnInsect* this, PlayState* play) {
s32 pad[2];
Vec3f sp34;
- Math_SmoothStepToF(&this->actor.speedXZ, 0.0f, 0.1f, 0.5f, 0.0f);
+ Math_SmoothStepToF(&this->actor.speed, 0.0f, 0.1f, 0.5f, 0.0f);
Math_StepToS(&this->actor.shape.rot.x, 0x2AAA, 0x160);
Actor_SetScale(&this->actor, CLAMP_MIN(this->actor.scale.x - 0.0002f, 0.001f));
@@ -355,7 +355,7 @@ void func_8091B440(EnInsect* this, PlayState* play) {
}
if (this->unk_312 <= 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -373,9 +373,9 @@ void func_8091B670(EnInsect* this, PlayState* play) {
Vec3f sp40;
if (this->unk_312 > 80) {
- Math_StepToF(&this->actor.speedXZ, 0.6f, 0.08f);
+ Math_StepToF(&this->actor.speed, 0.6f, 0.08f);
} else {
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.02f);
+ Math_StepToF(&this->actor.speed, 0.0f, 0.02f);
}
this->actor.velocity.y = 0.0f;
@@ -409,7 +409,7 @@ void func_8091B670(EnInsect* this, PlayState* play) {
if ((this->unk_312 <= 0) || ((this->unk_30C & 4) && (this->unk_314 <= 0))) {
func_8091B928(this);
- } else if (!(this->actor.bgCheckFlags & 0x40)) {
+ } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH)) {
func_8091AC78(this);
}
}
@@ -417,7 +417,7 @@ void func_8091B670(EnInsect* this, PlayState* play) {
void func_8091B928(EnInsect* this) {
this->unk_312 = 100;
this->actor.velocity.y = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.terminalVelocity = -0.8f;
this->actor.gravity = -0.04f;
this->unk_30C &= ~1;
@@ -436,13 +436,13 @@ void func_8091B984(EnInsect* this, PlayState* play) {
}
if (this->unk_312 <= 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
void EnInsect_Update(Actor* thisx, PlayState* play) {
EnInsect* this = THIS;
- s32 phi_v0;
+ s32 updBgCheckInfoFlags;
if ((this->actor.child != NULL) && (this->actor.child->update == NULL) && (&this->actor != this->actor.child)) {
this->actor.child = NULL;
@@ -462,7 +462,7 @@ void EnInsect_Update(Actor* thisx, PlayState* play) {
Actor_MoveWithGravity(&this->actor);
if (this->unk_30C & 0x100) {
if (this->unk_30C & 1) {
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
func_8091A9E4(this);
}
} else {
@@ -470,14 +470,14 @@ void EnInsect_Update(Actor* thisx, PlayState* play) {
}
}
- phi_v0 = 0;
+ updBgCheckInfoFlags = 0;
if (this->unk_30C & 1) {
- phi_v0 = 4;
+ updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_4;
}
- if (phi_v0 != 0) {
- phi_v0 |= 0x40;
- Actor_UpdateBgCheckInfo(play, &this->actor, 8.0f, 5.0f, 0.0f, phi_v0);
+ if (updBgCheckInfoFlags != 0) {
+ updBgCheckInfoFlags |= UPDBGCHECKINFO_FLAG_40;
+ Actor_UpdateBgCheckInfo(play, &this->actor, 8.0f, 5.0f, 0.0f, updBgCheckInfoFlags);
}
if (Actor_HasParent(&this->actor, play)) {
@@ -494,7 +494,7 @@ void EnInsect_Update(Actor* thisx, PlayState* play) {
}
if (!(this->unk_30C & 8) && (D_8091BD60 < 4) && EnInsect_InBottleRange(this, play) &&
- Actor_PickUp(&this->actor, play, GI_MAX, 60.0f, 30.0f)) {
+ Actor_OfferGetItem(&this->actor, play, GI_MAX, 60.0f, 30.0f)) {
D_8091BD60++;
}
}
diff --git a/src/overlays/actors/ovl_En_Insect/z_en_insect.h b/src/overlays/actors/ovl_En_Insect/z_en_insect.h
index ae8304cae..ea4025414 100644
--- a/src/overlays/actors/ovl_En_Insect/z_en_insect.h
+++ b/src/overlays/actors/ovl_En_Insect/z_en_insect.h
@@ -25,6 +25,4 @@ typedef struct EnInsect {
/* 0x316 */ s16 unk_316;
} EnInsect; // size = 0x318
-extern const ActorInit En_Insect_InitVars;
-
#endif // Z_EN_INSECT_H
diff --git a/src/overlays/actors/ovl_En_Invadepoh/overlay.cfg b/src/overlays/actors/ovl_En_Invadepoh/overlay.cfg
deleted file mode 100644
index a05f98b61..000000000
--- a/src/overlays/actors/ovl_En_Invadepoh/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Invadepoh
-z_en_invadepoh.c
diff --git a/src/overlays/actors/ovl_En_Invadepoh/z_en_invadepoh.c b/src/overlays/actors/ovl_En_Invadepoh/z_en_invadepoh.c
index 326e196d5..d6069391b 100644
--- a/src/overlays/actors/ovl_En_Invadepoh/z_en_invadepoh.c
+++ b/src/overlays/actors/ovl_En_Invadepoh/z_en_invadepoh.c
@@ -266,10 +266,11 @@ void EnInvadepoh_func_80B439B0(s32 arg0, s32 arg1) {
arg1 = CLAMP_MIN(arg1, 0);
if ((arg0 % 2) == 0) {
- gSaveContext.save.unk_E88[arg0 >> 1] = (gSaveContext.save.unk_E88[arg0 >> 1] & 0xFFFF0000) | (arg1 & 0xFFFF);
+ gSaveContext.save.saveInfo.unk_E64[arg0 >> 1] =
+ (gSaveContext.save.saveInfo.unk_E64[arg0 >> 1] & 0xFFFF0000) | (arg1 & 0xFFFF);
} else {
- gSaveContext.save.unk_E88[arg0 >> 1] =
- (gSaveContext.save.unk_E88[arg0 >> 1] & 0xFFFF) | ((arg1 & 0xFFFF) << 0x10);
+ gSaveContext.save.saveInfo.unk_E64[arg0 >> 1] =
+ (gSaveContext.save.saveInfo.unk_E64[arg0 >> 1] & 0xFFFF) | ((arg1 & 0xFFFF) << 0x10);
}
}
@@ -277,19 +278,19 @@ s32 EnInvadepoh_func_80B43A24(s32 arg0) {
u32 var_v1;
if ((arg0 % 2) == 0) {
- var_v1 = gSaveContext.save.unk_E88[arg0 >> 1] & 0xFFFF;
+ var_v1 = gSaveContext.save.saveInfo.unk_E64[arg0 >> 1] & 0xFFFF;
} else {
- var_v1 = (gSaveContext.save.unk_E88[arg0 >> 1] & 0xFFFF0000) >> 0x10;
+ var_v1 = (gSaveContext.save.saveInfo.unk_E64[arg0 >> 1] & 0xFFFF0000) >> 0x10;
}
return var_v1 + CLOCK_TIME(2, 30);
}
void EnInvadepoh_func_80B43A74(s32 arg0) {
- gSaveContext.save.unk_E88[4] = (gSaveContext.save.unk_E88[4] & ~0xFF) | (arg0 & 0xFF);
+ gSaveContext.save.saveInfo.unk_E64[4] = (gSaveContext.save.saveInfo.unk_E64[4] & ~0xFF) | (arg0 & 0xFF);
}
s32 EnInvadepoh_func_80B43A9C(void) {
- return gSaveContext.save.unk_E88[4] & 0xFF;
+ return gSaveContext.save.saveInfo.unk_E64[4] & 0xFF;
}
s32 EnInvadepoh_func_80B43AB0(void) {
@@ -452,7 +453,7 @@ s32 EnInvadepoh_func_80B440B8(EnInvadepoh* thisx, f32 arg1, f32 arg2) {
}
sp40 = (sp44->x - sp48->x);
sp3C = (sp44->z - sp48->z);
- sp1E = Math_FAtan2F(sp3C, sp40);
+ sp1E = Math_Atan2S_XY(sp3C, sp40);
sp38 = Math_CosS(sp1E);
sp34 = Math_SinS(sp1E);
sp30 = this->actor.world.pos.x - sp48->x;
@@ -675,13 +676,13 @@ void EnInvadepoh_func_80B447C0(EnInvadepoh* this, PlayState* play) {
void EnInvadepoh_func_80B44A90(EnInvadepoh* this, PlayState* play) {
if (this->actor.bgCheckFlags & 1) {
this->actor.velocity.y *= 0.3f;
- this->actor.speedXZ *= 0.8f;
+ this->actor.speed *= 0.8f;
} else if (this->actor.bgCheckFlags & 8) {
this->actor.velocity.y *= 0.8f;
- this->actor.speedXZ *= 0.3f;
+ this->actor.speed *= 0.3f;
} else {
this->actor.velocity.y *= 0.8f;
- this->actor.speedXZ *= 0.8f;
+ this->actor.speed *= 0.8f;
}
Actor_MoveWithGravity(&this->actor);
Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 40.0f, 0.0f, 5);
@@ -754,7 +755,7 @@ s32 EnInvadepoh_func_80B44C80(EnInvadepoh* this, PlayState* play) {
sp54.y = 0.0f;
sp54.z = temp_a2z - this->actor.world.pos.z;
- if (this->actor.speedXZ > 0.0f) {
+ if (this->actor.speed > 0.0f) {
if (Math3D_AngleBetweenVectors(&sp6C, &sp60, &sp44)) {
sp40 = 1;
} else if (sp44 <= 0.0f) {
@@ -765,7 +766,7 @@ s32 EnInvadepoh_func_80B44C80(EnInvadepoh* this, PlayState* play) {
sp48.y = 0.0f;
sp48.z = ((sp60.z + sp54.z) * 0.9f) + sp6C.z;
- Math_SmoothStepToS(&this->actor.world.rot.y, Math_FAtan2F(sp48.z, sp48.x), 4, 0xFA0, 0x64);
+ Math_SmoothStepToS(&this->actor.world.rot.y, Math_Atan2S_XY(sp48.z, sp48.x), 4, 0xFA0, 0x64);
Actor_MoveWithGravity(&this->actor);
Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 15.0f, 0.0f,
EnInvadepoh_func_80B440B8(this, 50.0f, 15.0f) ? 4 : 5);
@@ -875,7 +876,7 @@ void EnInvadepoh_func_80B451A0(EnInvadepoh* this, PlayState* play) {
}
}
if (D_80B4E940 == 0) {
- if (gSaveContext.save.weekEventReg[22] & 1) {
+ if (gSaveContext.save.saveInfo.weekEventReg[22] & 1) {
D_80B4E940 = 3;
} else {
D_80B4E940 = 4;
@@ -953,12 +954,12 @@ void EnInvadepoh_func_80B4560C(EnInvadepoh* this, PlayState* play, u16 arg2) {
}
void EnInvadepoh_func_80B45648(EnInvadepoh* this) {
- s16 var_s1 = this->actor.cutscene;
+ s16 var_s1 = this->actor.csId;
s32 i;
for (i = 0; i < 3; i++) {
D_80B50404[i] = var_s1;
- var_s1 = ActorCutscene_GetAdditionalCutscene(var_s1);
+ var_s1 = CutsceneManager_GetAdditionalCsId(var_s1);
}
}
@@ -1352,7 +1353,7 @@ void EnInvadepoh_func_80B4627C(Actor* thisx, PlayState* play) {
} else {
EnInvadepoh_func_80B454BC(this, play);
EnInvadepoh_func_80B452EC(this, play);
- Audio_QueueSeqCmd(0x8000 | NA_BGM_ALIEN_INVASION);
+ AudioSeq_QueueSeqCmd(0x8000 | NA_BGM_ALIEN_INVASION);
EnInvadepoh_func_80B46F88(this);
}
} else if (D_80B4E940 == 3) {
@@ -1477,7 +1478,7 @@ void EnInvadepoh_func_80B46644(Actor* thisx, PlayState* play) {
Actor_Kill(&this->actor);
}
if (temp_v1 == ENINVADEPOH_ROMANI_CONFUSED) {
- if (gSaveContext.save.weekEventReg[22] & 1) {
+ if (gSaveContext.save.saveInfo.weekEventReg[22] & 1) {
Actor_Kill(&this->actor);
}
} else if (temp_v1 == ENINVADEPOH_ROMANI_NIGHT_1) {
@@ -1491,7 +1492,7 @@ void EnInvadepoh_func_80B46644(Actor* thisx, PlayState* play) {
Actor_Kill(&this->actor);
}
} else if (temp_v1 == ENINVADEPOH_ROMANI_NIGHT_3) {
- if (!(gSaveContext.save.weekEventReg[22] & 1)) {
+ if (!(gSaveContext.save.saveInfo.weekEventReg[22] & 1)) {
Actor_Kill(&this->actor);
}
D_80B503F4 = this;
@@ -1571,7 +1572,7 @@ void EnInvadepoh_func_80B46A80(Actor* thisx, PlayState* play) {
if (this->unk_2F4 < 0) {
Actor_Kill(&this->actor);
}
- if (!(gSaveContext.save.weekEventReg[22] & 1)) {
+ if (!(gSaveContext.save.saveInfo.weekEventReg[22] & 1)) {
Actor_Kill(&this->actor);
}
D_80B503F8 = this;
@@ -1716,11 +1717,11 @@ void EnInvadepoh_func_80B46E20(EnInvadepoh* this) {
void EnInvadepoh_func_80B46E44(EnInvadepoh* this, PlayState* play) {
if (this->unk_2F0 > 0) {
this->unk_2F0--;
- } else if (ActorCutscene_GetCanPlayNext(D_80B50404[0])) {
- ActorCutscene_StartAndSetUnkLinkFields(D_80B50404[0], &this->actor);
+ } else if (CutsceneManager_IsNext(D_80B50404[0])) {
+ CutsceneManager_StartWithPlayerCs(D_80B50404[0], &this->actor);
EnInvadepoh_func_80B46EC0(this);
} else {
- ActorCutscene_SetIntentToPlay(D_80B50404[0]);
+ CutsceneManager_Queue(D_80B50404[0]);
}
}
@@ -1743,8 +1744,8 @@ void EnInvadepoh_func_80B46EE8(EnInvadepoh* this, PlayState* play) {
}
this->unk_2F0--;
if (this->unk_2F0 <= 0) {
- ActorCutscene_Stop(D_80B50404[0]);
- Audio_QueueSeqCmd(0x8000 | NA_BGM_ALIEN_INVASION);
+ CutsceneManager_Stop(D_80B50404[0]);
+ AudioSeq_QueueSeqCmd(0x8000 | NA_BGM_ALIEN_INVASION);
EnInvadepoh_func_80B46F88(this);
}
}
@@ -1763,7 +1764,7 @@ void EnInvadepoh_func_80B46FA8(EnInvadepoh* this, PlayState* play) {
s32 i;
if ((gSaveContext.save.time < CLOCK_TIME(6, 00)) && (gSaveContext.save.time >= CLOCK_TIME(5, 15))) {
- gSaveContext.save.weekEventReg[22] |= 1;
+ gSaveContext.save.saveInfo.weekEventReg[22] |= 1;
EnInvadepoh_func_80B47064(this);
} else {
EnInvadepoh_func_80B457A0(this);
@@ -1782,11 +1783,11 @@ void EnInvadepoh_func_80B47064(EnInvadepoh* this) {
}
void EnInvadepoh_func_80B47084(EnInvadepoh* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(D_80B50404[1])) {
- ActorCutscene_StartAndSetUnkLinkFields(D_80B50404[1], &this->actor);
+ if (CutsceneManager_IsNext(D_80B50404[1])) {
+ CutsceneManager_StartWithPlayerCs(D_80B50404[1], &this->actor);
EnInvadepoh_func_80B470E0(this);
} else {
- ActorCutscene_SetIntentToPlay(D_80B50404[1]);
+ CutsceneManager_Queue(D_80B50404[1]);
}
}
@@ -1848,7 +1849,7 @@ void EnInvadepoh_func_80B47298(EnInvadepoh* this, PlayState* play) {
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_72;
gSaveContext.nextTransitionType = TRANS_TYPE_72;
- gSaveContext.save.weekEventReg[89] |= 0x10;
+ gSaveContext.save.saveInfo.weekEventReg[89] |= 0x10;
EnInvadepoh_func_80B47304(this);
}
@@ -2120,7 +2121,7 @@ void EnInvadepoh_func_80B47D30(Actor* thisx, PlayState* play2) {
if (D_80B4E940 == 3) {
if ((this->actionFunc == EnInvadepoh_func_80B477B4) || (this->actionFunc == EnInvadepoh_func_80B47600)) {
- thisx->speedXZ = 0.0f;
+ thisx->speed = 0.0f;
thisx->velocity.y = 0.0f;
thisx->gravity = 0.0f;
EnInvadepoh_func_80B47830(this);
@@ -2131,8 +2132,8 @@ void EnInvadepoh_func_80B47D30(Actor* thisx, PlayState* play2) {
} else if (this->unk_2A0.base.acFlags & AC_HIT) {
Actor* hitbox = this->unk_2A0.base.ac;
- thisx->speedXZ = hitbox->speedXZ * 0.5f;
- thisx->speedXZ = CLAMP(thisx->speedXZ, -60.0f, 60.0f);
+ thisx->speed = hitbox->speed * 0.5f;
+ thisx->speed = CLAMP(thisx->speed, -60.0f, 60.0f);
thisx->world.rot.y = hitbox->world.rot.y;
thisx->gravity = 0.0f;
@@ -2382,18 +2383,18 @@ void EnInvadepoh_func_80B487B4(EnInvadepoh* this) {
void EnInvadepoh_func_80B48848(EnInvadepoh* this, PlayState* play) {
s32 pad;
- Math_StepToF(&this->actor.speedXZ, 1.6f, 0.1f);
- if (EnInvadepoh_func_80B44B84(this, play, this->actor.speedXZ, 50.0f)) {
+ Math_StepToF(&this->actor.speed, 1.6f, 0.1f);
+ if (EnInvadepoh_func_80B44B84(this, play, this->actor.speed, 50.0f)) {
EnInvadepoh_func_80B44514(this);
this->unk_370 = 0xC8;
- this->actor.speedXZ *= 0.25f;
+ this->actor.speed *= 0.25f;
} else {
Math_StepToS(&this->unk_370, 0x7D0, 0x46);
}
EnInvadepoh_func_80B43E6C(this, 6, this->unk_370, 0x46);
if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_40) &&
(Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 7.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_ROMANI_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_ROMANI_WALK);
}
if (this->unk_2F0 > 0) {
this->unk_2F0--;
@@ -2441,8 +2442,8 @@ void EnInvadepoh_func_80B48948(EnInvadepoh* this) {
void EnInvadepoh_func_80B48AD4(EnInvadepoh* this, PlayState* play) {
EnInvadePohUnkStruct_324* temp_s0 = &this->unk_324;
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.2f);
- if (EnInvadepoh_func_80B44B84(this, play, this->actor.speedXZ, 50.0f)) {
+ Math_StepToF(&this->actor.speed, 0.0f, 0.2f);
+ if (EnInvadepoh_func_80B44B84(this, play, this->actor.speed, 50.0f)) {
EnInvadepoh_func_80B44514(this);
}
if (this->unk_374 == 0) {
@@ -2497,7 +2498,7 @@ void EnInvadepoh_func_80B48AD4(EnInvadepoh* this, PlayState* play) {
void EnInvadepoh_func_80B48DE4(EnInvadepoh* this) {
EnInvadePohUnkStruct_324* temp_v0 = &this->unk_324;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
Animation_MorphToLoop(&this->skelAnime, &gRomaniIdleAnim, -10.0f);
this->unk_370 = 0;
temp_v0->unk_30 = 0.05f;
@@ -2649,14 +2650,14 @@ void EnInvadepoh_func_80B49454(EnInvadepoh* this, PlayState* play) {
}
Math_Vec3f_Sum(&D_80B4EDD0[this->unk_3AC], &this->actor.home.pos, &sp30);
if (Math3D_Vec3fDistSq(&this->actor.world.pos, &sp30) < SQ(400.0f)) {
- this->actor.speedXZ *= 0.8f;
+ this->actor.speed *= 0.8f;
} else {
- Math_StepToF(&this->actor.speedXZ, 170.0f, 21.0f);
- this->actor.speedXZ *= 0.98f;
+ Math_StepToF(&this->actor.speed, 170.0f, 21.0f);
+ this->actor.speed *= 0.98f;
}
if (EnInvadepoh_func_80B450C0(&this->actor.world.pos.x, &this->actor.world.pos.z, sp30.x, sp30.z,
- this->actor.speedXZ)) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed)) {
+ this->actor.speed = 0.0f;
}
if (sp30.y < this->actor.world.pos.y) {
Math_StepToF(&this->actor.gravity, -12.0f, 7.0f);
@@ -2691,9 +2692,9 @@ void EnInvadepoh_func_80B49670(EnInvadepoh* this, PlayState* play) {
sp30.z = this->actor.home.pos.z;
Math_SmoothStepToS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &sp30), 0xA, 0xBB8, 0x64);
if ((play->gameplayFrames % 0x40) < 14) {
- Math_StepToF(&this->actor.speedXZ, 5.0f, 1.0f);
+ Math_StepToF(&this->actor.speed, 5.0f, 1.0f);
} else {
- this->actor.speedXZ *= 0.97f;
+ this->actor.speed *= 0.97f;
}
this->actor.gravity = (sp30.y < this->actor.world.pos.y) ? -0.5f : 2.0f;
this->actor.velocity.y *= 0.97f;
@@ -2720,7 +2721,7 @@ void EnInvadepoh_func_80B497EC(EnInvadepoh* this, PlayState* play) {
sp30.y = this->actor.home.pos.y + D_80B4E934.y + 400.0f;
sp30.z = this->actor.home.pos.z + D_80B4E934.z;
Math_SmoothStepToS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &sp30), 4, 0x1F40, (s16)0x64);
- Math_StepToF(&this->actor.speedXZ, 70.0f, 3.0f);
+ Math_StepToF(&this->actor.speed, 70.0f, 3.0f);
this->actor.gravity = (sp30.y < this->actor.world.pos.y) ? -2.0f : 2.0f;
this->actor.velocity.y *= 0.97f;
Actor_MoveWithGravity(&this->actor);
@@ -2741,7 +2742,7 @@ void EnInvadepoh_func_80B49904(EnInvadepoh* this) {
}
void EnInvadepoh_func_80B4994C(EnInvadepoh* this, PlayState* play) {
- Math_StepToF(&this->actor.speedXZ, 150.0f, 4.0f);
+ Math_StepToF(&this->actor.speed, 150.0f, 4.0f);
this->actor.velocity.y *= 0.95f;
Actor_MoveWithGravity(&this->actor);
if (this->unk_2F0 > 0) {
@@ -2755,7 +2756,7 @@ void EnInvadepoh_func_80B499BC(EnInvadepoh* this) {
this->unk_2F0 = 40;
this->unk_3A0 = 0.2f;
this->unk_3A4 = 0.01f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->unk_3AA = 0xBB8;
this->actionFunc = EnInvadepoh_func_80B49A00;
}
@@ -2768,7 +2769,7 @@ void EnInvadepoh_func_80B49A00(EnInvadepoh* this, PlayState* play) {
sp30.y = this->actor.home.pos.y + 800.0f;
sp30.z = this->actor.home.pos.z;
Math_SmoothStepToS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &sp30), 4, 0x1F40, 0x64);
- Math_StepToF(&this->actor.speedXZ, 30.0f, 3.0f);
+ Math_StepToF(&this->actor.speed, 30.0f, 3.0f);
this->actor.velocity.y *= 0.98f;
this->actor.gravity = (sp30.y < this->actor.world.pos.y) ? -0.5f : 2.0f;
Actor_MoveWithGravity(&this->actor);
@@ -2821,7 +2822,7 @@ void EnInvadepoh_func_80B49C38(EnInvadepoh* this, PlayState* play) {
s32 pad;
if (temp_v0_2 > 0) {
- temp_v0_2 = (gGameInfo->data[0xF] * -16.0f / temp_v0_2) - 0.5f;
+ temp_v0_2 = (gRegEditor->data[0xF] * -16.0f / temp_v0_2) - 0.5f;
this->unk_378 = EnInvadepoh_func_80B45550(this, play, 6400.0f, temp_v0_2);
}
}
@@ -2832,7 +2833,7 @@ void EnInvadepoh_func_80B49C38(EnInvadepoh* this, PlayState* play) {
}
if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_40) &&
(Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 7.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_ROMANI_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_ROMANI_WALK);
}
if (this->unk_320 >= 0.9999f) {
Actor_Kill(&this->actor);
@@ -2862,7 +2863,7 @@ void EnInvadepoh_func_80B49DFC(EnInvadepoh* this, PlayState* play) {
if (Actor_TextboxIsClosing(&this->actor, play)) {
if (this->actor.textId == 0x332D) { // It's almost time, Grasshopper...
- gSaveContext.save.weekEventReg[54] |= 0x10;
+ gSaveContext.save.saveInfo.weekEventReg[54] |= 0x10;
this->actor.textId = 0x332E; // If you run out of arrows...
}
EnInvadepoh_func_80B49BD0(this);
@@ -2888,8 +2889,8 @@ void EnInvadepoh_func_80B49F88(Actor* thisx, PlayState* play2) {
EnInvadepoh_func_80B44C24(this, play);
EnInvadepoh_func_80B43F0C(this);
EnInvadepoh_func_80B4516C(this);
- if (gSaveContext.save.weekEventReg[21] & 0x20) {
- if (gSaveContext.save.weekEventReg[54] & 0x10) {
+ if (gSaveContext.save.saveInfo.weekEventReg[21] & 0x20) {
+ if (gSaveContext.save.saveInfo.weekEventReg[54] & 0x10) {
this->actor.textId = 0x332E; // If you run out of arrows...
} else {
this->actor.textId = 0x332D; // It's almost time, Grasshopper...
@@ -3033,11 +3034,11 @@ void EnInvadepoh_func_80B4A614(EnInvadepoh* this) {
void EnInvadepoh_func_80B4A67C(EnInvadepoh* this, PlayState* play) {
s32 pad;
- Math_StepToF(&this->actor.speedXZ, 5.0f, 1.0f);
- if (EnInvadepoh_func_80B44B84(this, play, this->actor.speedXZ, 50.0f) != 0) {
+ Math_StepToF(&this->actor.speed, 5.0f, 1.0f);
+ if (EnInvadepoh_func_80B44B84(this, play, this->actor.speed, 50.0f) != 0) {
EnInvadepoh_func_80B44640(this);
this->unk_370 = 0x5DC;
- this->actor.speedXZ *= 0.5f;
+ this->actor.speed *= 0.5f;
} else {
Math_StepToS(&this->unk_370, 0x190, 0x32);
}
@@ -3053,7 +3054,7 @@ void EnInvadepoh_func_80B4A67C(EnInvadepoh* this, PlayState* play) {
}
if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_40) &&
(Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 7.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_ROMANI_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_ROMANI_WALK);
}
if (this->unk_309 == this->unk_308) {
EnInvadepoh_func_80B4A2C0(this);
@@ -3082,7 +3083,7 @@ void EnInvadepoh_func_80B4A81C(EnInvadepoh* this, PlayState* play) {
temp_s0->unk_26.y = CLAMP((s16)(temp_v1 * 0.7f), -0x1F40, 0x1F40);
if (Actor_TextboxIsClosing(&this->actor, play)) {
if (this->actor.textId == 0x332D) { // It's almost time, Grasshopper
- gSaveContext.save.weekEventReg[54] |= 0x10;
+ gSaveContext.save.saveInfo.weekEventReg[54] |= 0x10;
this->actor.textId = 0x332E; // If you run out of arrows...
}
if (this->unk_309 == this->unk_308) {
@@ -3121,8 +3122,8 @@ void EnInvadepoh_func_80B4A9C8(Actor* thisx, PlayState* play2) {
EnInvadepoh_func_80B43F0C(this);
func_800B4AEC(play, &this->actor, 50.0f);
EnInvadepoh_func_80B4516C(this);
- if (gSaveContext.save.weekEventReg[21] & 0x20) {
- if (gSaveContext.save.weekEventReg[54] & 0x10) {
+ if (gSaveContext.save.saveInfo.weekEventReg[21] & 0x20) {
+ if (gSaveContext.save.saveInfo.weekEventReg[54] & 0x10) {
this->actor.textId = 0x332E; // If you run out of arrows...
} else {
this->actor.textId = 0x332D; // It's almost time, Grasshopper...
@@ -3171,7 +3172,7 @@ void EnInvadepoh_func_80B4ACDC(EnInvadepoh* this) {
}
void EnInvadepoh_func_80B4ACF0(EnInvadepoh* this, PlayState* play) {
- if (gSaveContext.save.weekEventReg[22] & 1) {
+ if (gSaveContext.save.saveInfo.weekEventReg[22] & 1) {
this->actor.draw = EnInvadepoh_func_80B4E324;
this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8);
EnInvadepoh_func_80B4AD3C(this);
@@ -3199,7 +3200,7 @@ void EnInvadepoh_func_80B4ADB8(EnInvadepoh* this) {
void EnInvadepoh_func_80B4ADCC(EnInvadepoh* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == 5) && Message_ShouldAdvance(play)) {
if (this->unk_376 == 0x3331) { // We did it...We won.
- if (gSaveContext.save.weekEventReg[22] & 2) {
+ if (gSaveContext.save.saveInfo.weekEventReg[22] & 2) {
EnInvadepoh_func_80B4560C(this, play, 0x3334); // I have to get back to bed...
func_80151BB4(play, 0x1D);
func_80151BB4(play, 5);
@@ -3209,7 +3210,7 @@ void EnInvadepoh_func_80B4ADCC(EnInvadepoh* this, PlayState* play) {
} else if (this->unk_376 == 0x3333) { // Here's Romani's thanks
EnInvadepoh_func_80B4AEC0(this);
} else if (this->unk_376 == 0x3334) { // I have to get back to bed...
- func_801477B4(play);
+ Message_CloseTextbox(play);
EnInvadepoh_func_80B4B024(this);
}
}
@@ -3224,15 +3225,15 @@ void EnInvadepoh_func_80B4AEDC(EnInvadepoh* this, PlayState* play) {
if (this->unk_2F0 > 0) {
this->unk_2F0--;
if (this->unk_2F0 == 0) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
}
}
if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL;
- gSaveContext.save.weekEventReg[22] |= 2;
+ gSaveContext.save.saveInfo.weekEventReg[22] |= 2;
EnInvadepoh_func_80B4AF80(this);
} else {
- Actor_PickUp(&this->actor, play, 0x60, 2000.0f, 2000.0f);
+ Actor_OfferGetItem(&this->actor, play, 0x60, 2000.0f, 2000.0f);
}
}
@@ -3248,7 +3249,7 @@ void EnInvadepoh_func_80B4AF94(EnInvadepoh* this, PlayState* play) {
func_80151BB4(play, 5);
EnInvadepoh_func_80B4ADB8(this);
} else {
- func_800B85E0(&this->actor, play, 2000.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 2000.0f, PLAYER_IA_MINUS1);
}
}
@@ -3320,7 +3321,7 @@ void EnInvadepoh_func_80B4B3DC(EnInvadepoh* this) {
s32 pad;
if (Animation_OnFrame(&this->skelAnime, 1.0f) || Animation_OnFrame(&this->skelAnime, 7.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_MONKEY_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_MONKEY_WALK);
}
}
@@ -3331,7 +3332,7 @@ void EnInvadepoh_func_80B4B430(EnInvadepoh* this) {
}
void EnInvadepoh_func_80B4B484(EnInvadepoh* this, PlayState* play) {
- Math_StepToF(&this->actor.speedXZ, 1.1f, 0.5f);
+ Math_StepToF(&this->actor.speed, 1.1f, 0.5f);
if (EnInvadepoh_func_80B44C80(this, play)) {
EnInvadepoh_func_80B44690(this);
}
@@ -3353,7 +3354,7 @@ void EnInvadepoh_func_80B4B510(EnInvadepoh* this) {
}
void EnInvadepoh_func_80B4B564(EnInvadepoh* this, PlayState* play) {
- Math_StepToF(&this->actor.speedXZ, 3.8f, 0.45f);
+ Math_StepToF(&this->actor.speed, 3.8f, 0.45f);
if (this->unk_3BC >= 0) {
f32 temp_fv0;
Vec3f sp28;
@@ -3361,11 +3362,11 @@ void EnInvadepoh_func_80B4B564(EnInvadepoh* this, PlayState* play) {
Math_Vec3s_ToVec3f(&sp28, &this->unk_30C[this->unk_3BC]);
temp_fv0 = Math3D_Vec3fDistSq(&this->actor.world.pos, &sp28);
if (temp_fv0 < SQ(80.0f)) {
- this->actor.speedXZ *= 0.85f;
+ this->actor.speed *= 0.85f;
} else if (temp_fv0 < SQ(150.0f)) {
- this->actor.speedXZ *= 0.93f;
+ this->actor.speed *= 0.93f;
} else if (temp_fv0 < SQ(250.0f)) {
- this->actor.speedXZ *= 0.96f;
+ this->actor.speed *= 0.96f;
}
if ((this->unk_309 == this->unk_3BC) || (temp_fv0 < SQ(50.0f))) {
this->unk_2F0 = 0;
@@ -3379,7 +3380,7 @@ void EnInvadepoh_func_80B4B564(EnInvadepoh* this, PlayState* play) {
this->unk_2F0--;
} else if (this->unk_3BC >= 0) {
if ((D_80B50348 == 0) && (Rand_ZeroOne() < 0.4f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SMALL_DOG_GROAN);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SMALL_DOG_GROAN);
}
EnInvadepoh_func_80B4B724(this);
} else {
@@ -3395,12 +3396,12 @@ void EnInvadepoh_func_80B4B724(EnInvadepoh* this) {
void EnInvadepoh_func_80B4B768(EnInvadepoh* this, PlayState* play) {
s32 pad;
- Math_StepToF(&this->actor.speedXZ, 0.0f, 1.0f);
- Math_SmoothStepToS(&this->actor.world.rot.y, Actor_YawBetweenActors(&this->actor, &D_80B5040C->actor), 5, 0x1388,
+ Math_StepToF(&this->actor.speed, 0.0f, 1.0f);
+ Math_SmoothStepToS(&this->actor.world.rot.y, Actor_WorldYawTowardActor(&this->actor, &D_80B5040C->actor), 5, 0x1388,
(s16)0x64);
EnInvadepoh_func_80B44E90(this, play);
if (Animation_OnFrame(&this->skelAnime, 13.0f) || Animation_OnFrame(&this->skelAnime, 19.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SMALL_DOG_ANG_BARK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SMALL_DOG_ANG_BARK);
}
if (this->unk_29C != 0) {
EnInvadepoh_func_80B4B510(this);
@@ -3413,7 +3414,7 @@ void EnInvadepoh_func_80B4B820(EnInvadepoh* this) {
}
void EnInvadepoh_func_80B4B864(EnInvadepoh* this, PlayState* play) {
- Math_StepToF(&this->actor.speedXZ, 0.5f, 1.0f);
+ Math_StepToF(&this->actor.speed, 0.5f, 1.0f);
EnInvadepoh_func_80B44E90(this, play);
if (this->unk_29C != 0) {
EnInvadepoh_func_80B4B510(this);
@@ -3568,7 +3569,7 @@ void EnInvadepoh_func_80B4BC4C(EnInvadepoh* this, PlayState* play) {
if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_40) &&
(Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 12.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_ROMANI_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_ROMANI_WALK);
}
if (gSaveContext.save.time > CLOCK_TIME(20, 15)) {
Actor_Kill(&this->actor);
@@ -3736,7 +3737,7 @@ void EnInvadepoh_func_80B4C730(EnInvadepoh* this, PlayState* play) {
s32 temp_v0_2 = func_800FE620(play);
if (temp_v0_2 > 0) {
- temp_v0_2 = (gGameInfo->data[0xF] * -23.0f / temp_v0_2) - 0.5f;
+ temp_v0_2 = (gRegEditor->data[0xF] * -23.0f / temp_v0_2) - 0.5f;
this->unk_378 = EnInvadepoh_func_80B45550(this, play, 6400.0f, temp_v0_2);
}
}
@@ -3762,7 +3763,7 @@ void EnInvadepoh_func_80B4C730(EnInvadepoh* this, PlayState* play) {
}
if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_40) &&
(Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 7.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_ROMANI_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_ROMANI_WALK);
}
if (this->unk_320 >= 0.9999f) {
Actor_Kill(&this->actor);
@@ -4301,7 +4302,7 @@ void EnInvadepoh_func_80B4E3F0(Actor* thisx, PlayState* play2) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), 2);
gDPSetPrimColor(POLY_XLU_DISP++, 0xFF, 0x80, 255, 255, 0, 180);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 50, 0, 0);
- gSPDisplayList(POLY_XLU_DISP++, gOwlStatueWhiteFlashDL);
+ gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL);
if (EnInvadepoh_func_80B456A8(play, &sp5C)) {
func_800F9824(play, &play->envCtx, &play->view, play->state.gfxCtx, sp5C, 20.0f, 9.0f, 0, 0);
diff --git a/src/overlays/actors/ovl_En_Invadepoh_Demo/overlay.cfg b/src/overlays/actors/ovl_En_Invadepoh_Demo/overlay.cfg
deleted file mode 100644
index 192412f5f..000000000
--- a/src/overlays/actors/ovl_En_Invadepoh_Demo/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Invadepoh_Demo
-z_en_invadepoh_demo.c
diff --git a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c
index 4391beecd..6a73eceec 100644
--- a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c
+++ b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.c
@@ -23,7 +23,7 @@ void func_80C19EC0(EnInvadepohDemo* this, PlayState* play);
void func_80C19F7C(EnInvadepohDemo* this, PlayState* play);
#if 0
-const ActorInit En_Invadepoh_Demo_InitVars = {
+ActorInit En_Invadepoh_Demo_InitVars = {
ACTOR_EN_INVADEPOH_DEMO,
ACTORCAT_PROP,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.h b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.h
index 35cbb4da9..ff13ca668 100644
--- a/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.h
+++ b/src/overlays/actors/ovl_En_Invadepoh_Demo/z_en_invadepoh_demo.h
@@ -13,6 +13,4 @@ typedef struct EnInvadepohDemo {
/* 0x148 */ char unk_148[0x180];
} EnInvadepohDemo; // size = 0x2C8
-extern const ActorInit En_Invadepoh_Demo_InitVars;
-
#endif // Z_EN_INVADEPOH_DEMO_H
diff --git a/src/overlays/actors/ovl_En_Invisible_Ruppe/overlay.cfg b/src/overlays/actors/ovl_En_Invisible_Ruppe/overlay.cfg
deleted file mode 100644
index 18c1eed56..000000000
--- a/src/overlays/actors/ovl_En_Invisible_Ruppe/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Invisible_Ruppe
-z_en_invisible_ruppe.c
diff --git a/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.c b/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.c
index d7bda5180..d2aceba29 100644
--- a/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.c
+++ b/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.c
@@ -18,7 +18,7 @@ void func_80C258A0(EnInvisibleRuppe* this, PlayState* play);
void func_80C2590C(EnInvisibleRuppe* this, PlayState* play);
void func_80C259E8(EnInvisibleRuppe* this, PlayState* play);
-const ActorInit En_Invisible_Ruppe_InitVars = {
+ActorInit En_Invisible_Ruppe_InitVars = {
ACTOR_EN_INVISIBLE_RUPPE,
ACTORCAT_NPC,
FLAGS,
@@ -55,12 +55,12 @@ static ColliderCylinderInit sCylinderInit = {
void func_80C258A0(EnInvisibleRuppe* this, PlayState* play) {
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
- Actor_UpdateBgCheckInfo(play, &this->actor, 32.0f, 30.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 32.0f, 30.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
}
void func_80C2590C(EnInvisibleRuppe* this, PlayState* play) {
if (this->collider.base.ocFlags1 & OC1_HIT) {
- switch (INVISIBLERUPPE_GET_3(this)) {
+ switch (INVISIBLERUPPE_GET_3(&this->actor)) {
case 0:
play_sound(NA_SE_SY_GET_RUPY);
Item_DropCollectible(play, &this->actor.world.pos, 0x8000 | ITEM00_RUPEE_GREEN);
@@ -86,21 +86,21 @@ void func_80C2590C(EnInvisibleRuppe* this, PlayState* play) {
}
void func_80C259E8(EnInvisibleRuppe* this, PlayState* play) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
void EnInvisibleRuppe_Init(Actor* thisx, PlayState* play) {
s32 pad;
EnInvisibleRuppe* this = THIS;
- this->unk_190 = INVISIBLERUPPE_GET_1FC(this);
+ this->unk_190 = INVISIBLERUPPE_GET_1FC(&this->actor);
if (this->unk_190 == 0x7F) {
this->unk_190 = -1;
}
if ((this->unk_190 >= 0) && Flags_GetSwitch(play, this->unk_190)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
diff --git a/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.h b/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.h
index 49d9bd6ef..d703a3511 100644
--- a/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.h
+++ b/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.h
@@ -7,8 +7,8 @@ struct EnInvisibleRuppe;
typedef void (*EnInvisibleRuppeActionFunc)(struct EnInvisibleRuppe*, PlayState*);
-#define INVISIBLERUPPE_GET_3(thisx) ((thisx)->actor.params & 3)
-#define INVISIBLERUPPE_GET_1FC(thisx) (((thisx)->actor.params & 0x1FC) >> 2)
+#define INVISIBLERUPPE_GET_3(thisx) ((thisx)->params & 3)
+#define INVISIBLERUPPE_GET_1FC(thisx) (((thisx)->params & 0x1FC) >> 2)
typedef struct EnInvisibleRuppe {
/* 0x000 */ Actor actor;
@@ -18,6 +18,4 @@ typedef struct EnInvisibleRuppe {
/* 0x194 */ EnInvisibleRuppeActionFunc actionFunc;
} EnInvisibleRuppe; // size = 0x198
-extern const ActorInit En_Invisible_Ruppe_InitVars;
-
#endif // Z_EN_INVISIBLE_RUPPE_H
diff --git a/src/overlays/actors/ovl_En_Ishi/overlay.cfg b/src/overlays/actors/ovl_En_Ishi/overlay.cfg
deleted file mode 100644
index 689d8deb5..000000000
--- a/src/overlays/actors/ovl_En_Ishi/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ishi
-z_en_ishi.c
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 5ebc15a02..254c9ad67 100644
--- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c
+++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c
@@ -44,7 +44,7 @@ static s16 D_8095F690 = 0;
static s16 D_8095F694 = 0;
-const ActorInit En_Ishi_InitVars = {
+ActorInit En_Ishi_InitVars = {
ACTOR_EN_ISHI,
ACTORCAT_PROP,
FLAGS,
@@ -191,11 +191,11 @@ void func_8095D804(Actor* thisx, PlayState* play) {
spB8.z = ((Rand_ZeroOne() - 0.5f) * 8.0f) + this->actor.world.pos.z;
Math_Vec3f_Copy(&spC4, &this->actor.velocity);
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
spC4.x *= 0.6f;
spC4.y *= -0.3f;
spC4.z *= 0.6f;
- } else if (this->actor.bgCheckFlags & 8) {
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
spC4.x *= -0.5f;
spC4.y *= 0.5f;
spC4.z *= -0.5f;
@@ -230,11 +230,11 @@ void func_8095DABC(Actor* thisx, PlayState* play) {
Math_Vec3f_Copy(&spD8, &this->actor.velocity);
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
spD8.x *= 0.9f;
spD8.y *= -0.8f;
spD8.z *= 0.9f;
- } else if (this->actor.bgCheckFlags & 8) {
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
spD8.x *= -0.9f;
spD8.y *= 0.8f;
spD8.z *= -0.9f;
@@ -265,11 +265,11 @@ void func_8095DDA8(EnIshi* this, PlayState* play) {
Vec3f sp2C;
Math_Vec3f_Copy(&sp2C, &this->actor.world.pos);
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
sp2C.x += 2.0f * this->actor.velocity.x;
sp2C.y -= 2.0f * this->actor.velocity.y;
sp2C.z += 2.0f * this->actor.velocity.z;
- } else if (this->actor.bgCheckFlags & 8) {
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
sp2C.x -= 2.0f * this->actor.velocity.x;
sp2C.y += 2.0f * this->actor.velocity.y;
sp2C.z -= 2.0f * this->actor.velocity.z;
@@ -281,11 +281,11 @@ void func_8095DE9C(EnIshi* this, PlayState* play) {
Vec3f sp2C;
Math_Vec3f_Copy(&sp2C, &this->actor.world.pos);
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
sp2C.x += 2.0f * this->actor.velocity.x;
sp2C.y -= 2.0f * this->actor.velocity.y;
sp2C.z += 2.0f * this->actor.velocity.z;
- } else if (this->actor.bgCheckFlags & 8) {
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
sp2C.x -= 2.0f * this->actor.velocity.x;
sp2C.y += 2.0f * this->actor.velocity.y;
sp2C.z -= 2.0f * this->actor.velocity.z;
@@ -318,7 +318,7 @@ void func_8095DFF0(EnIshi* this, PlayState* play) {
Matrix_MultVecY(1.0f, &sp30);
sp2C = Math3D_Parallel(&sp30, &D_8095F778);
if (sp2C < 0.707f) {
- temp_v1_2 = Math_FAtan2F(sp30.z, sp30.x) - sp3C->world.rot.y;
+ temp_v1_2 = Math_Atan2S_XY(sp30.z, sp30.x) - sp3C->world.rot.y;
if (ABS_ALT(temp_v1_2) > 0x4000) {
sp3C->world.rot.y = BINANG_ROT180(sp3C->world.rot.y);
}
@@ -354,7 +354,7 @@ void func_8095E204(EnIshi* this, PlayState* play) {
for (i = 0; i < 3; i++) {
if (Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_INSECT, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 1,
- this->actor.cutscene, this->actor.unk20, NULL) == NULL) {
+ this->actor.csId, this->actor.halfDaysBits, NULL) == NULL) {
break;
}
}
@@ -386,7 +386,7 @@ void EnIshi_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sInitChain[sp34]);
- if (play->csCtx.state != 0) {
+ if (play->csCtx.state != CS_STATE_IDLE) {
this->actor.uncullZoneForward += 1000.0f;
}
@@ -398,7 +398,7 @@ void EnIshi_Init(Actor* thisx, PlayState* play) {
func_8095D6E0(&this->actor, play);
if ((sp34 == 1) && Flags_GetSwitch(play, ENISHI_GET_FE00(&this->actor))) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -415,7 +415,7 @@ void EnIshi_Init(Actor* thisx, PlayState* play) {
this->actor.shape.yOffset = D_8095F6C0[sp34];
if ((sp30 == 0) && !func_8095D758(this, play, 0)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -425,7 +425,7 @@ void EnIshi_Init(Actor* thisx, PlayState* play) {
this->unk_196 = Object_GetIndex(&play->objectCtx, D_8095F6E8[ENISHI_GET_8(&this->actor)]);
if (this->unk_196 < 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -490,7 +490,7 @@ void func_8095E660(EnIshi* this, PlayState* play) {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, D_8095F6D4[sp38], D_8095F6D0[sp38]);
D_8095F6D8[sp38](&this->actor, play);
D_8095F6E0[sp38](this, play);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -513,9 +513,9 @@ void func_8095E660(EnIshi* this, PlayState* play) {
if ((this->actor.xzDistToPlayer < 90.0f) && (sp30 == 0)) {
if (sp38 == 1) {
- Actor_PickUp(&this->actor, play, GI_NONE, 80.0f, 20.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_NONE, 80.0f, 20.0f);
} else {
- Actor_PickUp(&this->actor, play, GI_NONE, 50.0f, 10.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_NONE, 50.0f, 10.0f);
}
}
}
@@ -541,7 +541,9 @@ void func_8095E95C(EnIshi* this, PlayState* play) {
func_8095E14C(this);
func_8095E180(&this->actor.velocity, D_8095F6C8[ENISHI_GET_1(&this->actor)]);
Actor_UpdatePos(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 7.5f, 35.0f, 0.0f, 0xC5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 7.5f, 35.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40 |
+ UPDBGCHECKINFO_FLAG_80);
} else {
sp30.x = this->actor.world.pos.x;
sp30.y = this->actor.world.pos.y + 20.0f;
@@ -554,8 +556,8 @@ void func_8095E95C(EnIshi* this, PlayState* play) {
void func_8095EA70(EnIshi* this) {
f32 sp24;
- this->actor.velocity.x = Math_SinS(this->actor.world.rot.y) * this->actor.speedXZ;
- this->actor.velocity.z = Math_CosS(this->actor.world.rot.y) * this->actor.speedXZ;
+ this->actor.velocity.x = Math_SinS(this->actor.world.rot.y) * this->actor.speed;
+ this->actor.velocity.z = Math_CosS(this->actor.world.rot.y) * this->actor.speed;
if (!ENISHI_GET_1(&this->actor)) {
sp24 = Rand_ZeroOne() - 0.9f;
D_8095F690 = sp24 * 11000.0f;
@@ -585,11 +587,11 @@ void func_8095EBDC(EnIshi* this, PlayState* play) {
this->unk_194--;
- if ((this->actor.bgCheckFlags & 9) || temp_v0 || (this->unk_194 <= 0)) {
+ if ((this->actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_WALL)) || temp_v0 || (this->unk_194 <= 0)) {
func_8095DF90(this, play);
D_8095F6D8[sp70](&this->actor, play);
- if (!(this->actor.bgCheckFlags & 0x20)) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_WATER)) {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, D_8095F6D4[sp70], D_8095F6D0[sp70]);
D_8095F6E0[sp70](this, play);
}
@@ -604,11 +606,11 @@ void func_8095EBDC(EnIshi* this, PlayState* play) {
Rumble_Request(this->actor.xyzDistToPlayerSq, 255, 20, 150);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
- if (this->actor.bgCheckFlags & 0x40) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) {
if (sp70 == 0) {
sp58.x = this->actor.world.pos.x;
sp58.y = this->actor.world.pos.y + this->actor.depthInWater;
@@ -639,7 +641,7 @@ void func_8095EBDC(EnIshi* this, PlayState* play) {
D_8095F694 >>= 2;
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EV_DIVE_INTO_WATER_L);
- this->actor.bgCheckFlags &= ~0x40;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_WATER_TOUCH;
}
Math_StepToF(&this->actor.shape.yOffset, 0.0f, 2.0f);
@@ -648,7 +650,9 @@ void func_8095EBDC(EnIshi* this, PlayState* play) {
Actor_UpdatePos(&this->actor);
this->actor.shape.rot.x += D_8095F690;
this->actor.shape.rot.y += D_8095F694;
- Actor_UpdateBgCheckInfo(play, &this->actor, 7.5f, 35.0f, 0.0f, 0xC5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 7.5f, 35.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40 |
+ UPDBGCHECKINFO_FLAG_80);
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
@@ -656,7 +660,7 @@ void func_8095EBDC(EnIshi* this, PlayState* play) {
void func_8095F060(EnIshi* this) {
this->actor.flags |= ACTOR_FLAG_10;
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
this->actionFunc = func_8095F0A4;
}
@@ -664,15 +668,15 @@ void func_8095F0A4(EnIshi* this, PlayState* play) {
s32 pad;
s32 sp28 = ENISHI_GET_1(&this->actor);
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, D_8095F6D4[sp28], D_8095F6D0[sp28]);
D_8095F6D8[sp28](&this->actor, play);
D_8095F6E0[sp28](this, play);
this->actor.draw = NULL;
func_8095F180(this);
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
@@ -681,10 +685,10 @@ void func_8095F180(EnIshi* this) {
}
void func_8095F194(EnIshi* this, PlayState* play) {
- if (this->actor.cutscene < 0) {
- Actor_MarkForDeath(&this->actor);
- } else if (ActorCutscene_GetCurrentIndex() != this->actor.cutscene) {
- Actor_MarkForDeath(&this->actor);
+ if (this->actor.csId < 0) {
+ Actor_Kill(&this->actor);
+ } else if (CutsceneManager_GetCurrentCsId() != this->actor.csId) {
+ Actor_Kill(&this->actor);
}
}
diff --git a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.h b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.h
index 080abbf4a..65381f638 100644
--- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.h
+++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.h
@@ -28,6 +28,4 @@ typedef struct EnIshi {
/* 0x197 */ u8 unk_197;
} EnIshi; // size = 0x198
-extern const ActorInit En_Ishi_InitVars;
-
#endif // Z_EN_ISHI_H
diff --git a/src/overlays/actors/ovl_En_Ja/overlay.cfg b/src/overlays/actors/ovl_En_Ja/overlay.cfg
deleted file mode 100644
index aab759e94..000000000
--- a/src/overlays/actors/ovl_En_Ja/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ja
-z_en_ja.c
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 f615c05fe..1c65efed8 100644
--- a/src/overlays/actors/ovl_En_Ja/z_en_ja.c
+++ b/src/overlays/actors/ovl_En_Ja/z_en_ja.c
@@ -50,7 +50,7 @@ s32 D_80BC366C[] = {
0x0E29440C, 0x170E2945, 0x0C180E29, 0x460C170E, 0x29470C09, 0x0000180E, 0x293B0C09, 0x00001000,
};
-const ActorInit En_Ja_InitVars = {
+ActorInit En_Ja_InitVars = {
ACTOR_EN_JA,
ACTORCAT_NPC,
FLAGS,
@@ -177,7 +177,7 @@ s32 func_80BC1B60(EnJa* this, PlayState* play) {
this->unk_35A = CLAMP(this->unk_35A, -0x1C70, 0x1C70);
if (this->unk_1D8.player->actor.id == ACTOR_PLAYER) {
- sp40.y = this->unk_1D8.player->bodyPartsPos[7].y + 3.0f;
+ sp40.y = this->unk_1D8.player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
} else {
Math_Vec3f_Copy(&sp40, &this->unk_1D8.player->actor.focus.pos);
}
@@ -220,7 +220,7 @@ void func_80BC1E40(EnJa* this, PlayState* play) {
f32 phi_f0;
if (((play->msgCtx.currentTextId < 0xFF) || (play->msgCtx.currentTextId > 0x200)) && (talkState == TEXT_STATE_3) &&
- (this->prevTalkState == TEXT_STATE_3) && (&this->actor == player->targetActor)) {
+ (this->prevTalkState == TEXT_STATE_3) && (&this->actor == player->talkActor)) {
if ((play->state.frames % 2) == 0) {
if (this->unk_348 != 0.0f) {
this->unk_348 = 0.0f;
@@ -301,7 +301,7 @@ void func_80BC2150(EnJa* this, PlayState* play) {
void func_80BC21A8(EnJa* this, PlayState* play) {
ScheduleOutput sp18;
- this->unk_35C = REG(15) + ((void)0, gSaveContext.save.daySpeed);
+ this->unk_35C = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
if (!Schedule_RunScript(play, D_80BC35F0, &sp18) ||
((this->unk_1D8.unk_00 != sp18.result) && !func_80BC20D0(this, play, &sp18))) {
this->actor.shape.shadowDraw = NULL;
@@ -385,11 +385,11 @@ void EnJa_Update(Actor* thisx, PlayState* play) {
radius = this->collider.dim.radius + 30;
height = this->collider.dim.height + 10;
- func_8013C964(&this->actor, play, radius, height, PLAYER_AP_NONE, this->unk_340 & 7);
+ func_8013C964(&this->actor, play, radius, height, PLAYER_IA_NONE, this->unk_340 & 7);
if (this->unk_1D8.unk_00 != 2) {
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
}
func_80BC1984(this, play);
}
diff --git a/src/overlays/actors/ovl_En_Ja/z_en_ja.h b/src/overlays/actors/ovl_En_Ja/z_en_ja.h
index e2fd8287f..00746ec63 100644
--- a/src/overlays/actors/ovl_En_Ja/z_en_ja.h
+++ b/src/overlays/actors/ovl_En_Ja/z_en_ja.h
@@ -60,6 +60,4 @@ typedef struct EnJa {
/* 0x374 */ s32 prevTalkState;
} EnJa; // size = 0x378
-extern const ActorInit En_Ja_InitVars;
-
#endif // Z_EN_JA_H
diff --git a/src/overlays/actors/ovl_En_Jc_Mato/overlay.cfg b/src/overlays/actors/ovl_En_Jc_Mato/overlay.cfg
deleted file mode 100644
index 361e01617..000000000
--- a/src/overlays/actors/ovl_En_Jc_Mato/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Jc_Mato
-z_en_jc_mato.c
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 ced184e68..05855bb20 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
@@ -20,7 +20,7 @@ s32 EnJcMato_CheckForHit(EnJcMato* this, PlayState* play);
void EnJcMato_SetupIdle(EnJcMato* this);
void EnJcMato_Idle(EnJcMato* this, PlayState* play);
-const ActorInit En_Jc_Mato_InitVars = {
+ActorInit En_Jc_Mato_InitVars = {
ACTOR_EN_JC_MATO,
ACTORCAT_PROP,
FLAGS,
@@ -93,8 +93,8 @@ s32 EnJcMato_CheckForHit(EnJcMato* this, PlayState* play) {
this->collider.dim.worldSphere.center.z = this->pos.z;
if ((this->collider.base.acFlags & AC_HIT) && !this->hitFlag && (this->actor.colChkInfo.damageEffect == 0xF)) {
this->collider.base.acFlags &= ~AC_HIT;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
- play->interfaceCtx.unk_25C = 1;
+ Actor_PlaySfx(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
+ play->interfaceCtx.minigamePoints = 1;
this->hitFlag = true;
return 1;
} else {
@@ -111,7 +111,7 @@ void EnJcMato_SetupIdle(EnJcMato* this) {
void EnJcMato_Idle(EnJcMato* this, PlayState* play) {
if (this->hitFlag) {
if (DECR(this->despawnTimer) == 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
}
@@ -140,7 +140,7 @@ void EnJcMato_Update(Actor* thisx, PlayState* play) {
EnJcMato* this = THIS;
this->actionFunc(this, play);
- if (!(gSaveContext.eventInf[4] & 1)) {
+ if (!CHECK_EVENTINF(EVENTINF_40)) {
EnJcMato_CheckForHit(this, play);
}
}
diff --git a/src/overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.h b/src/overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.h
index 165a768e2..f2c64c37c 100644
--- a/src/overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.h
+++ b/src/overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.h
@@ -16,6 +16,4 @@ typedef struct EnJcMato {
/* 0x1A4 */ Vec3f pos;
} EnJcMato; // size = 0x1B0
-extern const ActorInit En_Jc_Mato_InitVars;
-
#endif // Z_EN_JC_MATO_H
diff --git a/src/overlays/actors/ovl_En_Jg/overlay.cfg b/src/overlays/actors/ovl_En_Jg/overlay.cfg
deleted file mode 100644
index a60b43afc..000000000
--- a/src/overlays/actors/ovl_En_Jg/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Jg
-z_en_jg.c
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 60ebb2474..451b9e553 100644
--- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c
+++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c
@@ -64,7 +64,7 @@ typedef enum {
/* 0x3 */ EN_JG_ACTION_LULLABY_INTRO_CS,
} EnJgAction;
-const ActorInit En_Jg_InitVars = {
+ActorInit En_Jg_InitVars = {
ACTOR_EN_JG,
ACTORCAT_NPC,
FLAGS,
@@ -194,7 +194,8 @@ void EnJg_UpdateCollision(EnJg* this, PlayState* play) {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 30.0f, 30.0f, 7);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 30.0f, 30.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4);
}
s16 EnJg_GetWalkingYRotation(Path* path, s32 pointIndex, Vec3f* pos, f32* distSQ) {
@@ -214,7 +215,7 @@ s16 EnJg_GetWalkingYRotation(Path* path, s32 pointIndex, Vec3f* pos, f32* distSQ
*distSQ = SQ(diffX) + SQ(diffZ);
- return RADF_TO_BINANG(Math_Acot2F(diffZ, diffX));
+ return RAD_TO_BINANG(Math_Atan2F_XY(diffZ, diffX));
}
s32 EnJg_ReachedPoint(EnJg* this, Path* path, s32 pointIndex) {
@@ -241,7 +242,7 @@ s32 EnJg_ReachedPoint(EnJg* this, Path* path, s32 pointIndex) {
diffZ = points[currentPoint + 1].z - points[currentPoint - 1].z;
}
- func_8017B7F8(&point, RADF_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d);
+ func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d);
if (((this->actor.world.pos.x * px) + (pz * this->actor.world.pos.z) + d) > 0.0f) {
reached = true;
@@ -250,32 +251,32 @@ s32 EnJg_ReachedPoint(EnJg* this, Path* path, s32 pointIndex) {
return reached;
}
-s16 EnJg_GetCutsceneForTeachingLullabyIntro(EnJg* this) {
+s16 EnJg_GetCsIdForTeachingLullabyIntro(EnJg* this) {
s16 temp = this->actor.yawTowardsPlayer - this->actor.shape.rot.y;
if (temp > 0) {
- return this->actor.cutscene;
+ return this->actor.csId;
}
- return ActorCutscene_GetAdditionalCutscene(this->actor.cutscene);
+ return CutsceneManager_GetAdditionalCsId(this->actor.csId);
}
void EnJg_SetupGoronShrineCheer(EnJg* this) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
if (this->focusedShrineGoronParam == 10) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
this->actionFunc = EnJg_GoronShrineTalk;
} else {
- this->cutscene = 0x7C;
+ this->csId = CS_ID_GLOBAL_TALK;
}
} else {
- this->cutscene = ActorCutscene_GetAdditionalCutscene(this->cutscene);
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ this->csId = CutsceneManager_GetAdditionalCsId(this->csId);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
}
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
this->actionFunc = EnJg_GoronShrineCheer;
switch (this->textId) {
@@ -373,7 +374,7 @@ void EnJg_GoronShrineTalk(EnJg* this, PlayState* play) {
}
void EnJg_GoronShrineCheer(EnJg* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
+ if (CutsceneManager_IsNext(this->csId)) {
switch (this->textId) {
case 0xDD0: // The greatest Goron hero of all?
case 0xDD2: // The immortal Goron?
@@ -382,26 +383,26 @@ void EnJg_GoronShrineCheer(EnJg* this, PlayState* play) {
case 0xDD6: // Darmani, greatest in the world!
// Focus on a specifc Goron for these lines
this->shrineGoron = EnJg_GetShrineGoronToFocusOn(play, this->focusedShrineGoronParam);
- ActorCutscene_Start(this->cutscene, this->shrineGoron);
+ CutsceneManager_Start(this->csId, this->shrineGoron);
Camera_SetTargetActor(play->cameraPtrs[CAM_ID_MAIN], this->shrineGoron);
break;
default:
// Focus on the whole group for these lines
- ActorCutscene_Start(this->cutscene, &this->actor);
+ CutsceneManager_Start(this->csId, &this->actor);
Camera_SetTargetActor(play->cameraPtrs[CAM_ID_MAIN], this->shrineGoron);
break;
}
this->actionFunc = EnJg_GoronShrineTalk;
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
if (this->focusedShrineGoronParam == 10) {
this->actionFunc = EnJg_GoronShrineTalk;
} else {
- ActorCutscene_Stop(0x7C);
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
}
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
}
@@ -434,7 +435,7 @@ void EnJg_AlternateTalkOrWalkInPlace(EnJg* this, PlayState* play) {
this->actionFunc = EnJg_Walk;
}
} else if (this->animIndex == EN_JG_ANIM_WALK) {
- Math_ApproachF(&this->actor.speedXZ, 0.0f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 0.0f, 0.2f, 1.0f);
EnJg_CheckIfTalkingToPlayerAndHandleFreezeTimer(this, play);
}
}
@@ -445,7 +446,7 @@ void EnJg_Walk(EnJg* this, PlayState* play) {
if (this->path != NULL) {
yRotation = EnJg_GetWalkingYRotation(this->path, this->currentPoint, &this->actor.world.pos, &distSQ);
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
yRotation = this->actor.wallYaw;
}
@@ -459,10 +460,10 @@ void EnJg_Walk(EnJg* this, PlayState* play) {
this->actionFunc = EnJg_AlternateTalkOrWalkInPlace;
} else {
this->currentPoint++;
- Math_ApproachF(&this->actor.speedXZ, 0.5f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 0.5f, 0.2f, 1.0f);
}
} else {
- Math_ApproachF(&this->actor.speedXZ, 0.5f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 0.5f, 0.2f, 1.0f);
}
}
@@ -493,14 +494,14 @@ void EnJg_Talk(EnJg* this, PlayState* play) {
temp = this->textId;
if ((temp == 0xDBB) || (temp == 0xDBC)) {
- if (!(gSaveContext.save.weekEventReg[24] & 0x80)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_24_80)) {
// The player hasn't talked to the Goron Child at least once, so they can't learn
// the Lullaby Intro. End the current conversation with the player.
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
this->flags &= ~FLAG_LOOKING_AT_PLAYER;
this->actionFunc = EnJg_SetupWalk;
- } else if (((gSaveContext.save.weekEventReg[24] & 0x40)) ||
+ } else if ((CHECK_WEEKEVENTREG(WEEKEVENTREG_24_40)) ||
(CHECK_QUEST_ITEM(QUEST_SONG_LULLABY) || CHECK_QUEST_ITEM(QUEST_SONG_LULLABY_INTRO))) {
// The player already has the Lullaby or Lullaby Intro, so say "I'm counting on you"
this->textId = EnJg_GetNextTextId(this);
@@ -513,11 +514,11 @@ void EnJg_Talk(EnJg* this, PlayState* play) {
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
this->flags &= ~FLAG_LOOKING_AT_PLAYER;
- this->cutscene = EnJg_GetCutsceneForTeachingLullabyIntro(this);
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ this->csId = EnJg_GetCsIdForTeachingLullabyIntro(this);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
this->actionFunc = EnJg_TeachLullabyIntro;
}
} else {
@@ -608,31 +609,31 @@ void EnJg_EndFrozenInteraction(EnJg* this, PlayState* play) {
}
void EnJg_TeachLullabyIntro(EnJg* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_Start(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_Start(this->csId, &this->actor);
this->actionFunc = EnJg_LullabyIntroCutsceneAction;
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
}
void EnJg_LullabyIntroCutsceneAction(EnJg* this, PlayState* play) {
s32 pad;
- if (Cutscene_CheckActorAction(play, 470)) {
- s32 actionIndex = Cutscene_GetActorActionIndex(play, 470);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_470)) {
+ s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_470);
- if (this->csAction != play->csCtx.actorActions[actionIndex]->action) {
- this->csAction = play->csCtx.actorActions[actionIndex]->action;
+ if (this->cueId != play->csCtx.actorCues[cueChannel]->id) {
+ this->cueId = play->csCtx.actorCues[cueChannel]->id;
- switch (play->csCtx.actorActions[actionIndex]->action) {
+ switch (play->csCtx.actorCues[cueChannel]->id) {
case 1:
this->cutsceneAnimIndex = EN_JG_ANIM_CUTSCENE_IDLE;
if (this->drum != NULL) {
- Actor_MarkForDeath(this->drum);
+ Actor_Kill(this->drum);
this->drum = NULL;
}
break;
@@ -687,7 +688,7 @@ void EnJg_LullabyIntroCutsceneAction(EnJg* this, PlayState* play) {
this->drum = Actor_SpawnAsChildAndCutscene(
&play->actorCtx, play, ACTOR_OBJ_JG_GAKKI, 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,
- this->actor.params, this->actor.cutscene, this->actor.unk20, NULL);
+ this->actor.params, this->actor.csId, this->actor.halfDaysBits, NULL);
}
if (this->cutsceneAnimIndex == EN_JG_ANIM_TAKING_OUT_DRUM) {
@@ -698,9 +699,9 @@ void EnJg_LullabyIntroCutsceneAction(EnJg* this, PlayState* play) {
}
}
} else {
- this->csAction = 99;
+ this->cueId = 99;
this->freezeTimer = 1000;
- gSaveContext.save.weekEventReg[24] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_24_40);
this->actionFunc = EnJg_Idle;
}
}
@@ -757,10 +758,10 @@ s32 EnJg_GetNextTextId(EnJg* this) {
case 0xDCF: // Spring has come thanks to you
this->focusedShrineGoronParam = 3;
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
this->actionFunc = EnJg_GoronShrineCheer;
return 0xDD0; // The greatest Goron hero of all?
@@ -830,7 +831,7 @@ s32 EnJg_GetNextTextId(EnJg* this) {
return 0xDDC; // Everyone would accept you
case 0xDDC: // Everyone would accept you
- gSaveContext.save.weekEventReg[77] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_77_80);
return 0xDDD; // Think it over slowly
default:
@@ -848,7 +849,7 @@ s32 EnJg_GetStartingConversationTextId(EnJg* this, PlayState* play) {
if (!EN_JG_IS_IN_GORON_SHRINE(&this->actor)) {
if (player->transformation == PLAYER_FORM_GORON) {
- if ((gSaveContext.save.weekEventReg[24] & 0x10) || CHECK_QUEST_ITEM(QUEST_SONG_LULLABY) ||
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_10) || CHECK_QUEST_ITEM(QUEST_SONG_LULLABY) ||
CHECK_QUEST_ITEM(QUEST_SONG_LULLABY_INTRO)) {
// The player has already talked as a Goron at least once.
return 0xDBC; // Following me won't do you any good
@@ -858,7 +859,7 @@ s32 EnJg_GetStartingConversationTextId(EnJg* this, PlayState* play) {
return 0xDB6; // "Hunh???"
}
- if (gSaveContext.save.weekEventReg[24] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_20)) {
// The player has already talked as a non-Goron at least once.
return 0xDB5; // This is our problem (repeat)
}
@@ -868,7 +869,7 @@ s32 EnJg_GetStartingConversationTextId(EnJg* this, PlayState* play) {
}
if (player->transformation == PLAYER_FORM_GORON) {
- if (gSaveContext.save.weekEventReg[77] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_80)) {
// The player has heard the Goron Shrine cheer as a Goron at least once.
return 0xDDE; // Come back after entering the race
}
@@ -903,14 +904,14 @@ void EnJg_CheckIfTalkingToPlayerAndHandleFreezeTimer(EnJg* this, PlayState* play
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->flags |= FLAG_LOOKING_AT_PLAYER;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->textId == 0xDAC) {
this->action = EN_JG_ACTION_FIRST_THAW;
} else if (this->textId == 0xDAE) {
- gSaveContext.save.weekEventReg[24] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_24_20);
} else if (this->textId == 0xDB6) {
- gSaveContext.save.weekEventReg[24] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_24_10);
}
Message_StartTextbox(play, this->textId, &this->actor);
@@ -948,7 +949,7 @@ void EnJg_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->actor, 0.01f);
if (!EN_JG_IS_IN_GORON_SHRINE(thisx)) {
- if ((play->sceneId == SCENE_SPOT00) && (gSaveContext.sceneLayer == 7) && (play->csCtx.currentCsIndex == 0)) {
+ if ((play->sceneId == SCENE_SPOT00) && (gSaveContext.sceneLayer == 7) && (play->csCtx.scriptIndex == 0)) {
// This is the elder that appears in the cutscene for learning the full Goron Lullaby.
this->animIndex = EN_JG_ANIM_IDLE;
this->action = EN_JG_ACTION_LULLABY_INTRO_CS;
@@ -967,7 +968,7 @@ void EnJg_Init(Actor* thisx, PlayState* play) {
} else {
// This is the elder that appears in Goron Shrine in spring.
this->animIndex = EN_JG_ANIM_IDLE;
- this->cutscene = this->actor.cutscene;
+ this->csId = this->actor.csId;
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex);
this->actionFunc = EnJg_GoronShrineIdle;
}
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 8564f8ad1..ad8eee0a8 100644
--- a/src/overlays/actors/ovl_En_Jg/z_en_jg.h
+++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.h
@@ -32,14 +32,12 @@ typedef struct EnJg {
/* 0x3A4 */ Vec3f breathPos;
/* 0x3B0 */ Vec3f breathVelocity;
/* 0x3BC */ Vec3f breathAccel;
- /* 0x3C8 */ s16 cutscene;
+ /* 0x3C8 */ s16 csId;
/* 0x3CA */ u8 cutsceneAnimIndex;
- /* 0x3CB */ u8 csAction;
+ /* 0x3CB */ u8 cueId;
/* 0x3CC */ u16 flags;
/* 0x3CE */ u16 textId;
/* 0x3D0 */ u8 focusedShrineGoronParam;
} EnJg; // size = 0x3D4
-extern const ActorInit En_Jg_InitVars;
-
#endif // Z_EN_JG_H
diff --git a/src/overlays/actors/ovl_En_Jgame_Tsn/overlay.cfg b/src/overlays/actors/ovl_En_Jgame_Tsn/overlay.cfg
deleted file mode 100644
index 9d3fbbf9d..000000000
--- a/src/overlays/actors/ovl_En_Jgame_Tsn/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Jgame_Tsn
-z_en_jgame_tsn.c
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 f88e7c074..5efca1bcd 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
@@ -36,7 +36,7 @@ void func_80C147B4(EnJgameTsn* this, PlayState* play);
s32 func_80C149B0(PlayState* play, EnJgameTsnStruct* arg1);
s32 func_80C14BCC(EnJgameTsn* this, PlayState* play);
-const ActorInit En_Jgame_Tsn_InitVars = {
+ActorInit En_Jgame_Tsn_InitVars = {
ACTOR_EN_JGAME_TSN,
ACTORCAT_NPC,
FLAGS,
@@ -112,7 +112,7 @@ void func_80C13A2C(EnJgameTsn* this, PlayState* play) {
s32 i;
if (path == NULL) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
for (i = 0; i < ARRAY_COUNT(this->unk_1D8); i++) {
@@ -121,7 +121,7 @@ void func_80C13A2C(EnJgameTsn* this, PlayState* play) {
path = &play->setupPathList[path->unk1];
if (path == NULL) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -130,7 +130,7 @@ void func_80C13A2C(EnJgameTsn* this, PlayState* play) {
path = &play->setupPathList[path->unk1];
if (path == NULL) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
this->unk_200.points = Lib_SegmentedToVirtual(path->points);
@@ -141,7 +141,7 @@ void EnJgameTsn_Destroy(Actor* thisx, PlayState* play) {
EnJgameTsn* this = THIS;
Collider_DestroyCylinder(play, &this->collider);
- gSaveContext.save.weekEventReg[90] &= (u8)~0x20;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_20);
}
void func_80C13B74(EnJgameTsn* this) {
@@ -189,11 +189,12 @@ void func_80C13BB8(EnJgameTsn* this, PlayState* play) {
func_800B8614(&this->actor, play, 80.0f);
}
- if ((player->actor.bgCheckFlags & 1) && !(player->stateFlags1 & 0x2000) && (this->unk_2FE == 0) &&
- (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) && func_80C149B0(play, &this->unk_1F8)) {
+ if ((player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && !(player->stateFlags1 & PLAYER_STATE1_2000) &&
+ (this->unk_2FE == 0) && (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) &&
+ func_80C149B0(play, &this->unk_1F8)) {
this->unk_2FE = 1;
func_80C13E6C(this);
- } else if (!(player->actor.bgCheckFlags & 1)) {
+ } else if (!(player->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
this->unk_2FE = 0;
}
@@ -230,15 +231,15 @@ void func_80C13F88(EnJgameTsn* this) {
}
void func_80C13F9C(EnJgameTsn* this, PlayState* play) {
- if (this->actor.cutscene != -1) {
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ if (this->actor.csId != CS_ID_NONE) {
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
func_80C14030(this);
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
} else {
func_80C14030(this);
@@ -267,8 +268,8 @@ void func_80C14044(EnJgameTsn* this, PlayState* play) {
case TEXT_STATE_DONE:
if (Message_ShouldAdvance(play)) {
- if (ActorCutscene_GetCurrentIndex() == this->actor.cutscene) {
- ActorCutscene_Stop(this->actor.cutscene);
+ if (CutsceneManager_GetCurrentCsId() == this->actor.csId) {
+ CutsceneManager_Stop(this->actor.csId);
}
func_80C13B74(this);
}
@@ -282,11 +283,11 @@ void func_80C14044(EnJgameTsn* this, PlayState* play) {
void func_80C1410C(EnJgameTsn* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- player->stateFlags1 |= 0x20;
- func_801A2BB8(0x25);
- play->interfaceCtx.unk_280 = 1;
- func_80112AFC(play);
- gSaveContext.save.weekEventReg[90] |= 0x20;
+ player->stateFlags1 |= PLAYER_STATE1_20;
+ Audio_PlaySubBgm(0x25);
+ play->interfaceCtx.minigameState = MINIGAME_STATE_COUNTDOWN_SETUP_3;
+ Interface_InitMinigame(play);
+ SET_WEEKEVENTREG(WEEKEVENTREG_90_20);
Interface_StartTimer(TIMER_ID_MINIGAME_2, 120);
this->actionFunc = func_80C1418C;
}
@@ -294,9 +295,9 @@ void func_80C1410C(EnJgameTsn* this, PlayState* play) {
void func_80C1418C(EnJgameTsn* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (play->interfaceCtx.unk_280 == 8) {
+ if (play->interfaceCtx.minigameState == MINIGAME_STATE_COUNTDOWN_GO) {
func_80C141DC(this);
- player->stateFlags1 &= ~0x20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
}
}
@@ -334,30 +335,31 @@ void func_80C14230(EnJgameTsn* this, PlayState* play) {
this->unk_2FC++;
- if ((player->actor.bgCheckFlags & 2) && func_80C149B0(play, &this->unk_200)) {
+ if ((player->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) && func_80C149B0(play, &this->unk_200)) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
Message_StartTextbox(play, 0x109F, &this->actor);
this->unk_300 = 0x109F;
- player->stateFlags1 |= 0x20;
+ player->stateFlags1 |= PLAYER_STATE1_20;
*this->unk_208[this->unk_218] &= ~OBJLUPYGAMELIFT_IGNITE_FIRE;
- func_801A2C20();
+ Audio_StopSubBgm();
func_80C14030(this);
- } else if ((player->actor.bgCheckFlags & 0x40) || (player->actor.bgCheckFlags & 0x20)) {
+ } else if ((player->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) ||
+ (player->actor.bgCheckFlags & BGCHECKFLAG_WATER)) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
Message_StartTextbox(play, 0x10A0, &this->actor);
this->unk_300 = 0x10A0;
- player->stateFlags1 |= 0x20;
+ player->stateFlags1 |= PLAYER_STATE1_20;
*this->unk_208[this->unk_218] &= ~OBJLUPYGAMELIFT_IGNITE_FIRE;
- func_801A2C20();
+ Audio_StopSubBgm();
func_80C14030(this);
}
if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] == SECONDS_TO_TIMER(0)) {
Message_StartTextbox(play, 0x10A1, &this->actor);
this->unk_300 = 0x10A1;
- player->stateFlags1 |= 0x20;
+ player->stateFlags1 |= PLAYER_STATE1_20;
*this->unk_208[this->unk_218] &= ~OBJLUPYGAMELIFT_IGNITE_FIRE;
- func_801A2C20();
+ Audio_StopSubBgm();
func_80C14030(this);
}
}
@@ -370,7 +372,7 @@ void func_80C144F8(EnJgameTsn* this, PlayState* play) {
play->nextEntrance = ENTRANCE(GREAT_BAY_COAST, 13);
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_80;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
}
void func_80C14540(EnJgameTsn* this) {
@@ -379,14 +381,14 @@ void func_80C14540(EnJgameTsn* this) {
void func_80C14554(EnJgameTsn* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
- if (!(gSaveContext.save.weekEventReg[82] & 0x10)) {
- gSaveContext.save.weekEventReg[82] |= 0x10;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_82_10)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_82_10);
}
func_80C145FC(this);
- } else if (gSaveContext.save.weekEventReg[82] & 0x10) {
- Actor_PickUp(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f);
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_82_10)) {
+ Actor_OfferGetItem(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f);
} else {
- Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f);
}
}
@@ -400,14 +402,14 @@ void func_80C14610(EnJgameTsn* this, PlayState* play) {
this->unk_300 = 0x10A4;
func_80C14030(this);
} else {
- func_800B85E0(&this->actor, play, 200.0f, -1);
+ func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1);
}
}
void func_80C14684(EnJgameTsn* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
if (play->msgCtx.choiceIndex == 0) {
- if (gSaveContext.save.playerData.rupees >= 20) {
+ if (gSaveContext.save.saveInfo.playerData.rupees >= 20) {
Message_StartTextbox(play, 0x109E, &this->actor);
this->unk_300 = 0x109E;
Rupees_ChangeBy(-20);
@@ -466,10 +468,10 @@ void func_80C147B4(EnJgameTsn* this, PlayState* play) {
break;
case 0x109E:
- if (ActorCutscene_GetCurrentIndex() == this->actor.cutscene) {
- ActorCutscene_Stop(this->actor.cutscene);
+ if (CutsceneManager_GetCurrentCsId() == this->actor.csId) {
+ CutsceneManager_Stop(this->actor.csId);
}
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80C1476C(this, play);
func_80C1410C(this, play);
break;
@@ -477,15 +479,15 @@ void func_80C147B4(EnJgameTsn* this, PlayState* play) {
case 0x109F:
case 0x10A0:
case 0x10A1:
- func_801477B4(play);
- gSaveContext.minigameState = 3;
+ Message_CloseTextbox(play);
+ gSaveContext.minigameStatus = MINIGAME_STATUS_END;
gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_STOP;
- gSaveContext.save.weekEventReg[90] &= (u8)~0x20;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_20);
func_80C144E4(this);
break;
case 0x10A3:
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80C14540(this);
func_80C14554(this, play);
break;
@@ -549,7 +551,7 @@ s32 func_80C14BCC(EnJgameTsn* this, PlayState* play) {
s32 i;
s32 phi_s3 = -1;
- if (player->actor.bgCheckFlags & 2) {
+ if (player->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
for (i = 0; i < ARRAY_COUNT(this->unk_1D8); i++) {
if (func_80C149B0(play, &this->unk_1D8[i])) {
phi_s3 = i;
@@ -561,19 +563,19 @@ s32 func_80C14BCC(EnJgameTsn* this, PlayState* play) {
}
if (phi_s3 == this->unk_218) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
*this->unk_208[phi_s3] |= OBJLUPYGAMELIFT_DISPLAY_CORRECT;
- play->interfaceCtx.unk_25C = 1;
+ play->interfaceCtx.minigamePoints = 1;
return true;
}
if (*this->unk_208[phi_s3] & OBJLUPYGAMELIFT_IGNITE_FIRE) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
*this->unk_208[phi_s3] |= OBJLUPYGAMELIFT_DISPLAY_CORRECT;
- play->interfaceCtx.unk_25C = 1;
+ play->interfaceCtx.minigamePoints = 1;
} else {
*this->unk_208[phi_s3] |= OBJLUPYGAMELIFT_DISPLAY_INCORRECT;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_ERROR);
+ Actor_PlaySfx(&this->actor, NA_SE_SY_ERROR);
}
}
diff --git a/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.h b/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.h
index 5fdf911cc..c32a51565 100644
--- a/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.h
+++ b/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.h
@@ -37,6 +37,4 @@ typedef struct EnJgameTsn {
/* 0x300 */ u16 unk_300;
} EnJgameTsn; // size = 0x304
-extern const ActorInit En_Jgame_Tsn_InitVars;
-
#endif // Z_EN_JGAME_TSN_H
diff --git a/src/overlays/actors/ovl_En_Js/overlay.cfg b/src/overlays/actors/ovl_En_Js/overlay.cfg
deleted file mode 100644
index 6923c80b4..000000000
--- a/src/overlays/actors/ovl_En_Js/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Js
-z_en_js.c
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 457f62d77..8f48622c8 100644
--- a/src/overlays/actors/ovl_En_Js/z_en_js.c
+++ b/src/overlays/actors/ovl_En_Js/z_en_js.c
@@ -27,7 +27,7 @@ void func_8096A104(EnJs* this, PlayState* play);
void func_8096A38C(EnJs* this, PlayState* play);
void func_8096A6F4(EnJs* this, PlayState* play);
-const ActorInit En_Js_InitVars = {
+ActorInit En_Js_InitVars = {
ACTOR_EN_JS,
ACTORCAT_NPC,
FLAGS,
@@ -60,7 +60,7 @@ static ColliderCylinderInit sCylinderInit = {
};
static Gfx* D_8096ABCC[] = {
- gMoonChildMajorasMaskDL, gMoonChildOdalwasMaskDL, gMoonChildGohtsMaskDL,
+ gMoonChildMajorasMaskDL, gMoonChildOdolwasMaskDL, gMoonChildGohtsMaskDL,
gMoonChildGyorgsMaskDL, gMoonChildTwinmoldsMaskDL,
};
@@ -76,7 +76,7 @@ Vec3f D_8096AC30 = { 500.0f, -500.0f, 0.0f };
void EnJs_Init(Actor* thisx, PlayState* play) {
s32 pad;
- s16 cs;
+ s16 csId;
s32 i;
EnJs* this = THIS;
@@ -92,17 +92,17 @@ void EnJs_Init(Actor* thisx, PlayState* play) {
this->actor.terminalVelocity = -9.0f;
this->actor.gravity = -1.0f;
- cs = this->actor.cutscene;
+ csId = this->actor.csId;
- for (i = 0; i < ARRAY_COUNT(this->cutscenes); i++) {
- this->cutscenes[i] = cs;
- if (cs != -1) {
- this->actor.cutscene = cs;
- cs = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene);
+ for (i = 0; i < ARRAY_COUNT(this->csIdList); i++) {
+ this->csIdList[i] = csId;
+ if (csId != CS_ID_NONE) {
+ this->actor.csId = csId;
+ csId = CutsceneManager_GetAdditionalCsId(this->actor.csId);
}
}
- this->cutsceneIndex = -1;
+ this->csIdIndex = -1;
switch (ENJS_GET_TYPE(&this->actor)) {
case 0:
@@ -110,11 +110,11 @@ void EnJs_Init(Actor* thisx, PlayState* play) {
this->actionFunc = func_8096A6F4;
Animation_PlayLoop(&this->skelAnime, &gMoonChildSittingAnim);
- func_8016566C(0x3C);
+ Play_EnableMotionBlur(60);
- if (gSaveContext.save.weekEventReg[84] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_20)) {
Inventory_DeleteItem(ITEM_MASK_FIERCE_DEITY, SLOT(ITEM_MASK_FIERCE_DEITY));
- gSaveContext.save.weekEventReg[84] &= (u8)~0x20;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_84_20);
}
break;
case 1:
@@ -126,7 +126,7 @@ void EnJs_Init(Actor* thisx, PlayState* play) {
this->actionFunc = func_80969B5C;
func_80968A5C(this);
if (func_809692A8(ENJS_GET_TYPE(&this->actor) + 4)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
break;
@@ -151,7 +151,7 @@ void EnJs_Destroy(Actor* thisx, PlayState* play) {
paramsF = ENJS_GET_TYPE(&this->actor);
switch (paramsF) {
case 0:
- func_80165690();
+ Play_DisableMotionBlur();
break;
case 5:
case 6:
@@ -254,7 +254,7 @@ s32 func_80968CB8(EnJs* this) {
return true;
}
- Math_StepToF(&this->actor.speedXZ, this->unk_2B4, 0.5f);
+ Math_StepToF(&this->actor.speed, this->unk_2B4, 0.5f);
return false;
}
@@ -372,34 +372,34 @@ s32 EnJs_GetRemainingMasks(void) {
return count;
}
-void EnJs_TakeMask(s32 actionParams, s32 childType) {
+void EnJs_TakeMask(s32 itemActions, s32 childType) {
u8* masksGivenOnMoon = gSaveContext.masksGivenOnMoon;
s32 temp = 0;
if ((childType >= 0) && (childType < 9)) {
- actionParams -= PLAYER_AP_MASK_TRUTH;
+ itemActions -= PLAYER_IA_MASK_TRUTH;
childType *= 3;
- if (actionParams < 8) {
- masksGivenOnMoon[childType] |= 1 << actionParams;
- masksGivenOnMoon[temp] |= 1 << actionParams;
+ if (itemActions < 8) {
+ masksGivenOnMoon[childType] |= 1 << itemActions;
+ masksGivenOnMoon[temp] |= 1 << itemActions;
return;
}
- actionParams -= 8;
+ itemActions -= 8;
childType++;
temp++;
- if (actionParams < 8) {
- masksGivenOnMoon[childType] |= 1 << actionParams;
- masksGivenOnMoon[temp] |= 1 << actionParams;
+ if (itemActions < 8) {
+ masksGivenOnMoon[childType] |= 1 << itemActions;
+ masksGivenOnMoon[temp] |= 1 << itemActions;
return;
}
- actionParams -= 8;
+ itemActions -= 8;
childType++;
temp++;
- if (actionParams < 6) {
- masksGivenOnMoon[childType] |= 1 << actionParams;
- masksGivenOnMoon[temp] |= 1 << actionParams;
+ if (itemActions < 6) {
+ masksGivenOnMoon[childType] |= 1 << itemActions;
+ masksGivenOnMoon[temp] |= 1 << itemActions;
}
}
}
@@ -475,20 +475,20 @@ void func_80969400(s32 arg0) {
void func_80969494(EnJs* this, PlayState* play) {
func_80968A5C(this);
- func_801477B4(play);
- this->actor.flags &= ~ACTOR_FLAG_100;
+ Message_CloseTextbox(play);
+ this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED;
this->actionFunc = func_80969B5C;
}
void func_809694E8(EnJs* this, PlayState* play) {
- func_801477B4(play);
- this->actor.flags &= ~ACTOR_FLAG_100;
+ Message_CloseTextbox(play);
+ this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED;
this->actionFunc = func_8096A104;
}
void func_80969530(EnJs* this, PlayState* play) {
- func_801477B4(play);
- this->actor.flags &= ~ACTOR_FLAG_100;
+ Message_CloseTextbox(play);
+ this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED;
this->actionFunc = func_8096A6F4;
if ((this->actor.home.rot.y == this->actor.shape.rot.y) && (this->unk_2B8 & 0x10)) {
Animation_Change(&this->skelAnime, &gMoonChildGettingUpAnim, -1.0f,
@@ -511,17 +511,17 @@ s32 func_809695FC(EnJs* this, PlayState* play) {
}
void func_80969688(EnJs* this) {
- if (this->cutsceneIndex != -1) {
- if (ActorCutscene_GetCurrentIndex() == this->cutscenes[this->cutsceneIndex]) {
- ActorCutscene_Stop(this->cutscenes[this->cutsceneIndex]);
+ if (this->csIdIndex != -1) {
+ if (CutsceneManager_GetCurrentCsId() == this->csIdList[this->csIdIndex]) {
+ CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
}
- this->cutsceneIndex = -1;
+ this->csIdIndex = -1;
}
}
-void func_809696EC(EnJs* this, s16 arg1) {
+void func_809696EC(EnJs* this, s16 csIdIndex) {
func_80969688(this);
- this->cutsceneIndex = arg1;
+ this->csIdIndex = csIdIndex;
}
void func_8096971C(EnJs* this, PlayState* play) {
@@ -529,35 +529,37 @@ void func_8096971C(EnJs* this, PlayState* play) {
}
void func_80969748(EnJs* this, PlayState* play) {
- s32 itemActionParam;
+ PlayerItemAction itemAction;
Player* player = GET_PLAYER(play);
SkelAnime_Update(&this->skelAnime);
Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 6, 0x1838, 0x64);
this->actor.shape.rot.y = this->actor.world.rot.y;
if (Message_GetState(&play->msgCtx) == TEXT_STATE_16) {
- itemActionParam = func_80123810(play);
- if (itemActionParam != PLAYER_AP_NONE) {
+ itemAction = func_80123810(play);
+
+ if (itemAction != PLAYER_IA_NONE) {
this->actionFunc = func_80969898;
}
- if (itemActionParam > PLAYER_AP_NONE) {
- func_801477B4(play);
- if ((itemActionParam >= PLAYER_AP_MASK_TRUTH) && (itemActionParam <= PLAYER_AP_MASK_GIANT)) {
- EnJs_TakeMask(itemActionParam, ENJS_GET_TYPE(&this->actor));
- Inventory_UnequipItem(itemActionParam - 4);
+ if (itemAction > PLAYER_IA_NONE) {
+ Message_CloseTextbox(play);
+ if ((itemAction >= PLAYER_IA_MASK_TRUTH) && (itemAction <= PLAYER_IA_MASK_GIANT)) {
+ EnJs_TakeMask(itemAction, ENJS_GET_TYPE(&this->actor));
+ Inventory_UnequipItem(itemAction - 4);
if (!func_809692A8(ENJS_GET_TYPE(&this->actor))) {
player->actor.textId = 0x2212;
} else {
player->actor.textId = 0x2213;
}
- } else if ((itemActionParam >= PLAYER_AP_MASK_FIERCE_DEITY) && (itemActionParam <= PLAYER_AP_MASK_DEKU)) {
+ } else if ((itemAction >= PLAYER_IA_MASK_FIERCE_DEITY) && (itemAction <= PLAYER_IA_MASK_DEKU)) {
player->actor.textId = 0x2211;
} else {
player->actor.textId = 0x2210;
}
}
- if (itemActionParam <= PLAYER_AP_MINUS1) {
- func_80151938(play, 0x2216);
+
+ if (itemAction <= PLAYER_IA_MINUS1) {
+ Message_ContinueTextbox(play, 0x2216);
}
}
}
@@ -575,11 +577,11 @@ void func_80969898(EnJs* this, PlayState* play) {
switch (play->msgCtx.choiceIndex) {
case 0:
func_8019F208();
- func_80151938(play, 0x2217);
+ Message_ContinueTextbox(play, 0x2217);
break;
case 1:
func_8019F230();
- func_80151938(play, 0x2216);
+ Message_ContinueTextbox(play, 0x2216);
break;
}
}
@@ -590,24 +592,24 @@ void func_80969898(EnJs* this, PlayState* play) {
case 0x220C:
this->unk_2B8 |= 1;
if (!func_8096933C(ENJS_GET_TYPE(&this->actor))) {
- func_80151938(play, 0x220F);
+ Message_ContinueTextbox(play, 0x220F);
break;
}
- func_80151938(play, 0x220D);
+ Message_ContinueTextbox(play, 0x220D);
break;
case 0x220D:
case 0x2213:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x220E:
- func_80151938(play, 0xFF);
+ Message_ContinueTextbox(play, 0xFF);
this->actionFunc = func_80969748;
break;
case 0x2210:
case 0x2211:
case 0x2212:
- player->exchangeItemId = PLAYER_AP_NONE;
- func_80151938(play, 0xFF);
+ player->exchangeItemId = PLAYER_IA_NONE;
+ Message_ContinueTextbox(play, 0xFF);
this->actionFunc = func_80969748;
break;
case 0x2214:
@@ -665,7 +667,7 @@ void func_80969B5C(EnJs* this, PlayState* play) {
}
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->actionFunc = func_80969898;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->unk_2B4 = 0.0f;
func_80969AA0(this, play);
} else if ((this->actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->actor, 0x3000, play)) {
@@ -675,35 +677,38 @@ void func_80969B5C(EnJs* this, PlayState* play) {
}
void func_80969C54(EnJs* this, PlayState* play) {
- s32 itemActionParam;
+ PlayerItemAction itemAction;
Player* player = GET_PLAYER(play);
SkelAnime_Update(&this->skelAnime);
Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 6, 0x1838, 0x64);
this->actor.shape.rot.y = this->actor.world.rot.y;
if (Message_GetState(&play->msgCtx) == TEXT_STATE_16) {
- itemActionParam = func_80123810(play);
- if (itemActionParam != PLAYER_AP_NONE) {
+ itemAction = func_80123810(play);
+
+ if (itemAction != PLAYER_IA_NONE) {
this->actionFunc = func_80969DA4;
}
- if (itemActionParam > PLAYER_AP_NONE) {
- func_801477B4(play);
- if ((itemActionParam >= PLAYER_AP_MASK_TRUTH) && (itemActionParam <= PLAYER_AP_MASK_GIANT)) {
- EnJs_TakeMask(itemActionParam, ENJS_GET_TYPE(&this->actor));
- Inventory_UnequipItem(itemActionParam - 4);
+
+ if (itemAction > PLAYER_IA_NONE) {
+ Message_CloseTextbox(play);
+ if ((itemAction >= PLAYER_IA_MASK_TRUTH) && (itemAction <= PLAYER_IA_MASK_GIANT)) {
+ EnJs_TakeMask(itemAction, ENJS_GET_TYPE(&this->actor));
+ Inventory_UnequipItem(itemAction - 4);
if (!func_809692A8(ENJS_GET_TYPE(&this->actor))) {
player->actor.textId = 0x2221;
} else {
player->actor.textId = 0x2222;
}
- } else if ((itemActionParam >= PLAYER_AP_MASK_FIERCE_DEITY) && (itemActionParam <= PLAYER_AP_MASK_DEKU)) {
+ } else if ((itemAction >= PLAYER_IA_MASK_FIERCE_DEITY) && (itemAction <= PLAYER_IA_MASK_DEKU)) {
player->actor.textId = 0x2220;
} else {
player->actor.textId = 0x221D;
}
}
- if (itemActionParam <= PLAYER_AP_MINUS1) {
- func_80151938(play, 0x221E);
+
+ if (itemAction <= PLAYER_IA_MINUS1) {
+ Message_ContinueTextbox(play, 0x221E);
}
}
}
@@ -729,7 +734,7 @@ void func_80969DA4(EnJs* this, PlayState* play) {
break;
case 1:
func_8019F230();
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
}
}
@@ -739,16 +744,16 @@ void func_80969DA4(EnJs* this, PlayState* play) {
switch (play->msgCtx.currentTextId) {
case 0x221B:
if (!func_8096933C(ENJS_GET_TYPE(&this->actor))) {
- func_80151938(play, 0x2219);
+ Message_ContinueTextbox(play, 0x2219);
break;
}
- func_80151938(play, 0x221C);
+ Message_ContinueTextbox(play, 0x221C);
break;
case 0x2224:
case 0x2226:
case 0x2228:
case 0x222A:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x2225:
case 0x2227:
@@ -760,34 +765,34 @@ void func_80969DA4(EnJs* this, PlayState* play) {
}
break;
case 0x2222:
- player->exchangeItemId = PLAYER_AP_NONE;
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ player->exchangeItemId = PLAYER_IA_NONE;
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x2223:
switch (ENJS_GET_TYPE(&this->actor)) {
case 5:
- func_80151938(play, 0x2224);
+ Message_ContinueTextbox(play, 0x2224);
break;
case 6:
- func_80151938(play, 0x2226);
+ Message_ContinueTextbox(play, 0x2226);
break;
case 7:
- func_80151938(play, 0x2228);
+ Message_ContinueTextbox(play, 0x2228);
break;
case 8:
- func_80151938(play, 0x222A);
+ Message_ContinueTextbox(play, 0x222A);
break;
}
break;
case 0x221C:
- func_80151938(play, 0xFF);
+ Message_ContinueTextbox(play, 0xFF);
this->actionFunc = func_80969C54;
break;
case 0x221D:
case 0x2220:
case 0x2221:
- player->exchangeItemId = PLAYER_AP_NONE;
- func_80151938(play, 0xFF);
+ player->exchangeItemId = PLAYER_IA_NONE;
+ Message_ContinueTextbox(play, 0xFF);
this->actionFunc = func_80969C54;
break;
default:
@@ -850,10 +855,10 @@ void func_8096A1E8(EnJs* this, PlayState* play) {
this->actor.flags &= ~ACTOR_FLAG_10000;
this->actionFunc = func_8096A38C;
Message_StartTextbox(play, 0x2208, &this->actor);
- gSaveContext.save.weekEventReg[84] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_84_20);
func_809696EC(this, 0);
} else {
- func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1);
}
}
@@ -865,9 +870,9 @@ void func_8096A2C0(EnJs* this, PlayState* play) {
this->actor.parent = NULL;
this->actor.flags |= ACTOR_FLAG_10000;
this->actionFunc = func_8096A1E8;
- func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1);
} else {
- Actor_PickUp(&this->actor, play, GI_MASK_FIERCE_DEITY, 10000.0f, 1000.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MASK_FIERCE_DEITY, 10000.0f, 1000.0f);
}
}
@@ -893,12 +898,12 @@ void func_8096A38C(EnJs* this, PlayState* play) {
case 0x21FC:
switch (play->msgCtx.choiceIndex) {
case 0:
- func_80151938(play, 0x21FE);
+ Message_ContinueTextbox(play, 0x21FE);
Animation_MorphToPlayOnce(&this->skelAnime, &gMoonChildGettingUpAnim, -5.0f);
this->unk_2B8 |= 0x10;
break;
case 1:
- func_80151938(play, 0x21FD);
+ Message_ContinueTextbox(play, 0x21FD);
break;
}
break;
@@ -906,11 +911,11 @@ void func_8096A38C(EnJs* this, PlayState* play) {
case 0x21FE:
switch (play->msgCtx.choiceIndex) {
case 0:
- func_80151938(play, 0x2200);
+ Message_ContinueTextbox(play, 0x2200);
func_809696EC(this, 0);
break;
case 1:
- func_80151938(play, 0x21FF);
+ Message_ContinueTextbox(play, 0x21FF);
break;
}
break;
@@ -918,12 +923,12 @@ void func_8096A38C(EnJs* this, PlayState* play) {
case 0x2203:
switch (play->msgCtx.choiceIndex) {
case 0:
- func_80151938(play, 0x2205);
+ Message_ContinueTextbox(play, 0x2205);
Animation_MorphToPlayOnce(&this->skelAnime, &gMoonChildGettingUpAnim, -5.0f);
this->unk_2B8 |= 0x10;
break;
case 1:
- func_80151938(play, 0x2204);
+ Message_ContinueTextbox(play, 0x2204);
break;
}
}
@@ -936,21 +941,21 @@ void func_8096A38C(EnJs* this, PlayState* play) {
case 0x2205:
case 0x2206:
case 0x2209:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x2200:
case 0x2208:
func_809696EC(this, 1);
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x2207:
if (INV_CONTENT(ITEM_MASK_FIERCE_DEITY) == ITEM_MASK_FIERCE_DEITY) {
- func_80151938(play, 0x2208);
+ Message_ContinueTextbox(play, 0x2208);
func_809696EC(this, 0);
} else {
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_8096A2C0;
func_8096A2C0(this, play);
}
@@ -1010,18 +1015,18 @@ void EnJs_Update(Actor* thisx, PlayState* play) {
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 25.0f, 40.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 25.0f, 40.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
this->actionFunc(this, play);
- if ((this->cutsceneIndex != -1) && (ActorCutscene_GetCurrentIndex() != this->cutscenes[this->cutsceneIndex])) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->cutscenes[this->cutsceneIndex]);
- } else if (ActorCutscene_GetCanPlayNext(this->cutscenes[this->cutsceneIndex])) {
- ActorCutscene_Start(this->cutscenes[this->cutsceneIndex], &this->actor);
+ if ((this->csIdIndex != -1) && (CutsceneManager_GetCurrentCsId() != this->csIdList[this->csIdIndex])) {
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csIdList[this->csIdIndex]);
+ } else if (CutsceneManager_IsNext(this->csIdList[this->csIdIndex])) {
+ CutsceneManager_Start(this->csIdList[this->csIdIndex], &this->actor);
} else {
- ActorCutscene_SetIntentToPlay(this->cutscenes[this->cutsceneIndex]);
+ CutsceneManager_Queue(this->csIdList[this->csIdIndex]);
}
}
}
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 534557e66..c4dd3e3a2 100644
--- a/src/overlays/actors/ovl_En_Js/z_en_js.h
+++ b/src/overlays/actors/ovl_En_Js/z_en_js.h
@@ -24,11 +24,9 @@ typedef struct EnJs {
/* 0x2B8 */ u16 unk_2B8;
/* 0x2BA */ s16 maskType;
/* 0x2BC */ s16 unk_2BC;
- /* 0x2BE */ s16 cutscenes[2];
- /* 0x2C2 */ s16 cutsceneIndex;
+ /* 0x2BE */ s16 csIdList[2];
+ /* 0x2C2 */ s16 csIdIndex;
/* 0x2C4 */ EnJsActionFunc actionFunc;
} EnJs; // size = 0x2C8
-extern const ActorInit En_Js_InitVars;
-
#endif // Z_EN_JS_H
diff --git a/src/overlays/actors/ovl_En_Jso/overlay.cfg b/src/overlays/actors/ovl_En_Jso/overlay.cfg
deleted file mode 100644
index 050d8bc67..000000000
--- a/src/overlays/actors/ovl_En_Jso/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Jso
-z_en_jso.c
diff --git a/src/overlays/actors/ovl_En_Jso/z_en_jso.c b/src/overlays/actors/ovl_En_Jso/z_en_jso.c
index 4baeaafa9..f36629d27 100644
--- a/src/overlays/actors/ovl_En_Jso/z_en_jso.c
+++ b/src/overlays/actors/ovl_En_Jso/z_en_jso.c
@@ -69,7 +69,7 @@ static DamageTable D_809B0F48 = {
/* Powder Keg */ DMG_ENTRY(1, 0xF),
};
-const ActorInit En_Jso_InitVars = {
+ActorInit En_Jso_InitVars = {
ACTOR_EN_JSO,
ACTORCAT_ENEMY,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Jso/z_en_jso.h b/src/overlays/actors/ovl_En_Jso/z_en_jso.h
index e2961c3ae..7f5db0757 100644
--- a/src/overlays/actors/ovl_En_Jso/z_en_jso.h
+++ b/src/overlays/actors/ovl_En_Jso/z_en_jso.h
@@ -14,6 +14,4 @@ typedef struct EnJso {
/* 0x27C */ char unk_27C[0xD70];
} EnJso; // size = 0xFEC
-extern const ActorInit En_Jso_InitVars;
-
#endif // Z_EN_JSO_H
diff --git a/src/overlays/actors/ovl_En_Jso2/overlay.cfg b/src/overlays/actors/ovl_En_Jso2/overlay.cfg
deleted file mode 100644
index 907202195..000000000
--- a/src/overlays/actors/ovl_En_Jso2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Jso2
-z_en_jso2.c
diff --git a/src/overlays/actors/ovl_En_Jso2/z_en_jso2.c b/src/overlays/actors/ovl_En_Jso2/z_en_jso2.c
index 874cac6bd..b7ad94d93 100644
--- a/src/overlays/actors/ovl_En_Jso2/z_en_jso2.c
+++ b/src/overlays/actors/ovl_En_Jso2/z_en_jso2.c
@@ -71,7 +71,7 @@ static DamageTable D_80A7B4F0 = {
/* Powder Keg */ DMG_ENTRY(1, 0xF),
};
-const ActorInit En_Jso2_InitVars = {
+ActorInit En_Jso2_InitVars = {
ACTOR_EN_JSO2,
ACTORCAT_ENEMY,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Jso2/z_en_jso2.h b/src/overlays/actors/ovl_En_Jso2/z_en_jso2.h
index 30f7872d5..274aaa284 100644
--- a/src/overlays/actors/ovl_En_Jso2/z_en_jso2.h
+++ b/src/overlays/actors/ovl_En_Jso2/z_en_jso2.h
@@ -14,6 +14,4 @@ typedef struct EnJso2 {
/* 0x027C */ char unk_27C[0xE14];
} EnJso2; // size = 0x1090
-extern const ActorInit En_Jso2_InitVars;
-
#endif // Z_EN_JSO2_H
diff --git a/src/overlays/actors/ovl_En_Kaizoku/overlay.cfg b/src/overlays/actors/ovl_En_Kaizoku/overlay.cfg
deleted file mode 100644
index 4f77e7de7..000000000
--- a/src/overlays/actors/ovl_En_Kaizoku/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Kaizoku
-z_en_kaizoku.c
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 6e4130576..7d8f46f91 100644
--- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c
+++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c
@@ -12,46 +12,144 @@
void EnKaizoku_Init(Actor* thisx, PlayState* play);
void EnKaizoku_Destroy(Actor* thisx, PlayState* play);
-void EnKaizoku_Update(Actor* thisx, PlayState* play);
+void EnKaizoku_Update(Actor* thisx, PlayState* play2);
+void EnKaizoku_Draw(Actor* thisx, PlayState* play);
-#if 0
-// static DamageTable sDamageTable = {
-static DamageTable D_80B8AB3C = {
- /* Deku Nut */ DMG_ENTRY(0, 0x1),
- /* Deku Stick */ DMG_ENTRY(1, 0xF),
- /* Horse trample */ DMG_ENTRY(0, 0x0),
- /* Explosives */ DMG_ENTRY(1, 0xF),
- /* Zora boomerang */ DMG_ENTRY(0, 0x1),
- /* Normal arrow */ DMG_ENTRY(1, 0xF),
- /* UNK_DMG_0x06 */ DMG_ENTRY(0, 0x0),
- /* Hookshot */ DMG_ENTRY(0, 0x1),
- /* Goron punch */ DMG_ENTRY(1, 0xE),
- /* Sword */ DMG_ENTRY(1, 0xE),
- /* Goron pound */ DMG_ENTRY(0, 0xD),
- /* Fire arrow */ DMG_ENTRY(2, 0x2),
- /* Ice arrow */ DMG_ENTRY(2, 0x3),
- /* Light arrow */ DMG_ENTRY(2, 0x4),
- /* Goron spikes */ DMG_ENTRY(1, 0xE),
- /* Deku spin */ DMG_ENTRY(0, 0x1),
- /* Deku bubble */ DMG_ENTRY(1, 0xE),
- /* Deku launch */ DMG_ENTRY(2, 0xE),
- /* UNK_DMG_0x12 */ DMG_ENTRY(0, 0x1),
- /* Zora barrier */ DMG_ENTRY(0, 0x5),
- /* Normal shield */ DMG_ENTRY(0, 0x0),
- /* Light ray */ DMG_ENTRY(0, 0x0),
- /* Thrown object */ DMG_ENTRY(1, 0xE),
- /* Zora punch */ DMG_ENTRY(1, 0xE),
- /* Spin attack */ DMG_ENTRY(1, 0xD),
- /* Sword beam */ DMG_ENTRY(0, 0x0),
- /* Normal Roll */ DMG_ENTRY(0, 0x0),
- /* UNK_DMG_0x1B */ DMG_ENTRY(0, 0x0),
- /* UNK_DMG_0x1C */ DMG_ENTRY(0, 0x0),
- /* Unblockable */ DMG_ENTRY(0, 0x0),
- /* UNK_DMG_0x1E */ DMG_ENTRY(0, 0x0),
- /* Powder Keg */ DMG_ENTRY(1, 0xE),
+s32 EnKaizoku_ValidatePictograph(PlayState* play, Actor* actor);
+void func_80B85F48(EnKaizoku* this);
+void func_80B85FA8(EnKaizoku* this, PlayState* play);
+void func_80B868B8(EnKaizoku* this, PlayState* play);
+void func_80B86B58(EnKaizoku* this);
+void func_80B86B74(EnKaizoku* this, PlayState* play);
+void func_80B872A4(EnKaizoku* this);
+void func_80B872F4(EnKaizoku* this, PlayState* play);
+void func_80B874D8(EnKaizoku* this, PlayState* play);
+void func_80B8760C(EnKaizoku* this, PlayState* play);
+void func_80B87900(EnKaizoku* this);
+void func_80B8798C(EnKaizoku* this, PlayState* play);
+void func_80B87C7C(EnKaizoku* this);
+void func_80B87CF8(PlayState* play, Vec3f* pos);
+void func_80B87D3C(EnKaizoku* this, PlayState* play);
+void func_80B87E28(EnKaizoku* this);
+void func_80B87E9C(EnKaizoku* this, PlayState* play);
+void func_80B87F70(EnKaizoku* this);
+void func_80B87FDC(EnKaizoku* this, PlayState* play2);
+void func_80B88214(EnKaizoku* this);
+void func_80B88278(EnKaizoku* this, PlayState* play);
+void func_80B8833C(EnKaizoku* this);
+void func_80B88378(EnKaizoku* this, PlayState* play);
+void func_80B88770(EnKaizoku* this);
+void func_80B887AC(EnKaizoku* this, PlayState* play);
+void func_80B88910(EnKaizoku* this);
+void func_80B88964(EnKaizoku* this, PlayState* play);
+void func_80B88CD8(EnKaizoku* this);
+void func_80B88D6C(EnKaizoku* this, PlayState* play);
+void func_80B89280(EnKaizoku* this, PlayState* play);
+void func_80B894C0(EnKaizoku* this, PlayState* play);
+void func_80B8971C(EnKaizoku* this, PlayState* play);
+
+typedef enum EnKaizokuAction {
+ /* 0 */ KAIZOKU_ACTION_0,
+ /* 1 */ KAIZOKU_ACTION_1,
+ /* 2 */ KAIZOKU_ACTION_2,
+ /* 3 */ KAIZOKU_ACTION_3,
+ /* 4 */ KAIZOKU_ACTION_4,
+ /* 5 */ KAIZOKU_ACTION_5,
+ /* 6 */ KAIZOKU_ACTION_6,
+ /* 7 */ KAIZOKU_ACTION_7,
+ /* 8 */ KAIZOKU_ACTION_8,
+ /* 9 */ KAIZOKU_ACTION_9,
+ /* 10 */ KAIZOKU_ACTION_10,
+ /* 11 */ KAIZOKU_ACTION_11,
+ /* 12 */ KAIZOKU_ACTION_12,
+ /* 13 */ KAIZOKU_ACTION_13,
+ /* 14 */ KAIZOKU_ACTION_14,
+ /* 15 */ KAIZOKU_ACTION_15,
+ /* 16 */ KAIZOKU_ACTION_16
+} EnKaizokuAction;
+
+u16 D_80B8A8D0[] = {
+ 0x11A4, 0x11A5, 0x11A6, 0x11A7, 0x11A8, 0x11A9, 0x11AA, 0x11AB, 0x11AC, 0x11AD,
};
-const ActorInit En_Kaizoku_InitVars = {
+Vec3f D_80B8A8E4[] = {
+ { -70.0f, 9.0f, 30.0f }, { -70.0f, 9.0f, 30.0f }, { -70.0f, 9.0f, 30.0f }, { 41.0f, 55.0f, 11.0f },
+ { 41.0f, 55.0f, 11.0f }, { 70.0f, 45.0f, 35.0f }, { 80.0f, 45.0f, 25.0f }, { 0.0f, 0.0f, 0.0f },
+ { -70.0f, 9.0f, 30.0f }, { -70.0f, 9.0f, 30.0f }, { -70.0f, 9.0f, 30.0f }, { 41.0f, 55.0f, 11.0f },
+ { 41.0f, 55.0f, 11.0f }, { 70.0f, 45.0f, 25.0f }, { 80.0f, 45.0f, 25.0f }, { 0.0f, 0.0f, 0.0f },
+ { 90.0f, 9.0f, -30.0f }, { 90.0f, 9.0f, -30.0f }, { 90.0f, 9.0f, -30.0f }, { -41.0f, 55.0f, -11.0f },
+ { -41.0f, 55.0f, -11.0f }, { -70.0f, 45.0f, -25.0f }, { -80.0f, 45.0f, -25.0f }, { 0.0f, 0.0f, 0.0f },
+};
+
+Vec3f D_80B8AA04[] = {
+ { 120.0f, 60.0f, -20.0f }, { 120.0f, 60.0f, -20.0f }, { 120.0f, 60.0f, -20.0f }, { -470.0f, 30.0f, -140.0f },
+ { -470.0f, 30.0f, -140.0f }, { -410.0f, 80.0f, -130.0f }, { -410.0f, 80.0f, -130.0f }, { 0.0f, 0.0f, 0.0f },
+ { 120.0f, 60.0f, -20.0f }, { 120.0f, 60.0f, -20.0f }, { 120.0f, 60.0f, -20.0f }, { -470.0f, 30.0f, -140.0f },
+ { -470.0f, 30.0f, -140.0f }, { -410.0f, 80.0f, -130.0f }, { -410.0f, 80.0f, -130.0f }, { 0.0f, 0.0f, 0.0f },
+ { -120.0f, 60.0f, 20.0f }, { -120.0f, 60.0f, 20.0f }, { -120.0f, 60.0f, 20.0f }, { 470.0f, 30.0f, 140.0f },
+ { 470.0f, 30.0f, 140.0f }, { 410.0f, 80.0f, 130.0f }, { 410.0f, 80.0f, 130.0f }, { 0.0f, 0.0f, 0.0f },
+};
+
+Color_RGBA8 D_80B8AB24[] = {
+ { 255, 255, 90, 255 },
+ { 55, 25, 80, 255 },
+ { 5, 195, 110, 255 },
+};
+
+Color_RGBA8 D_80B8AB30[] = {
+ { 255, 130, 10, 255 },
+ { 185, 130, 210, 255 },
+ { 135, 195, 80, 255 },
+};
+
+typedef enum EnKaizokuDamageEffect {
+ /* 0x0 */ KAIZOKU_DMGEFF_NONE,
+ /* 0x1 */ KAIZOKU_DMGEFF_1,
+ /* 0x2 */ KAIZOKU_DMGEFF_2,
+ /* 0x3 */ KAIZOKU_DMGEFF_FREEZE,
+ /* 0x4 */ KAIZOKU_DMGEFF_4,
+ /* 0x5 */ KAIZOKU_DMGEFF_5,
+ /* 0xD */ KAIZOKU_DMGEFF_D = 0xD,
+ /* 0xE */ KAIZOKU_DMGEFF_E,
+ /* 0xF */ KAIZOKU_DMGEFF_F
+} EnKaizokuDamageEffect;
+
+static DamageTable sDamageTable = {
+ /* Deku Nut */ DMG_ENTRY(0, KAIZOKU_DMGEFF_1),
+ /* Deku Stick */ DMG_ENTRY(1, KAIZOKU_DMGEFF_F),
+ /* Horse trample */ DMG_ENTRY(0, KAIZOKU_DMGEFF_NONE),
+ /* Explosives */ DMG_ENTRY(1, KAIZOKU_DMGEFF_F),
+ /* Zora boomerang */ DMG_ENTRY(0, KAIZOKU_DMGEFF_1),
+ /* Normal arrow */ DMG_ENTRY(1, KAIZOKU_DMGEFF_F),
+ /* UNK_DMG_0x06 */ DMG_ENTRY(0, KAIZOKU_DMGEFF_NONE),
+ /* Hookshot */ DMG_ENTRY(0, KAIZOKU_DMGEFF_1),
+ /* Goron punch */ DMG_ENTRY(1, KAIZOKU_DMGEFF_E),
+ /* Sword */ DMG_ENTRY(1, KAIZOKU_DMGEFF_E),
+ /* Goron pound */ DMG_ENTRY(0, KAIZOKU_DMGEFF_D),
+ /* Fire arrow */ DMG_ENTRY(2, KAIZOKU_DMGEFF_2),
+ /* Ice arrow */ DMG_ENTRY(2, KAIZOKU_DMGEFF_FREEZE),
+ /* Light arrow */ DMG_ENTRY(2, KAIZOKU_DMGEFF_4),
+ /* Goron spikes */ DMG_ENTRY(1, KAIZOKU_DMGEFF_E),
+ /* Deku spin */ DMG_ENTRY(0, KAIZOKU_DMGEFF_1),
+ /* Deku bubble */ DMG_ENTRY(1, KAIZOKU_DMGEFF_E),
+ /* Deku launch */ DMG_ENTRY(2, KAIZOKU_DMGEFF_E),
+ /* UNK_DMG_0x12 */ DMG_ENTRY(0, KAIZOKU_DMGEFF_1),
+ /* Zora barrier */ DMG_ENTRY(0, KAIZOKU_DMGEFF_5),
+ /* Normal shield */ DMG_ENTRY(0, KAIZOKU_DMGEFF_NONE),
+ /* Light ray */ DMG_ENTRY(0, KAIZOKU_DMGEFF_NONE),
+ /* Thrown object */ DMG_ENTRY(1, KAIZOKU_DMGEFF_E),
+ /* Zora punch */ DMG_ENTRY(1, KAIZOKU_DMGEFF_E),
+ /* Spin attack */ DMG_ENTRY(1, KAIZOKU_DMGEFF_D),
+ /* Sword beam */ DMG_ENTRY(0, KAIZOKU_DMGEFF_NONE),
+ /* Normal Roll */ DMG_ENTRY(0, KAIZOKU_DMGEFF_NONE),
+ /* UNK_DMG_0x1B */ DMG_ENTRY(0, KAIZOKU_DMGEFF_NONE),
+ /* UNK_DMG_0x1C */ DMG_ENTRY(0, KAIZOKU_DMGEFF_NONE),
+ /* Unblockable */ DMG_ENTRY(0, KAIZOKU_DMGEFF_NONE),
+ /* UNK_DMG_0x1E */ DMG_ENTRY(0, KAIZOKU_DMGEFF_NONE),
+ /* Powder Keg */ DMG_ENTRY(1, KAIZOKU_DMGEFF_E),
+};
+
+ActorInit En_Kaizoku_InitVars = {
ACTOR_EN_KAIZOKU,
ACTORCAT_ENEMY,
FLAGS,
@@ -63,120 +161,2006 @@ const ActorInit En_Kaizoku_InitVars = {
(ActorFunc)NULL,
};
-// static ColliderCylinderInit sCylinderInit = {
-static ColliderCylinderInit D_80B8AB7C = {
- { COLTYPE_NONE, AT_NONE, AC_ON | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, },
- { ELEMTYPE_UNK4, { 0x00000000, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON | BUMP_HOOKABLE, OCELEM_ON, },
+static ColliderCylinderInit sCylinderInit = {
+ {
+ COLTYPE_NONE,
+ AT_NONE,
+ AC_ON | AC_TYPE_PLAYER,
+ OC1_ON | OC1_TYPE_ALL,
+ OC2_TYPE_1,
+ COLSHAPE_CYLINDER,
+ },
+ {
+ ELEMTYPE_UNK4,
+ { 0x00000000, 0x00, 0x00 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_ON | BUMP_HOOKABLE,
+ OCELEM_ON,
+ },
{ 20, 50, 0, { 0, 0, 0 } },
};
-// static ColliderQuadInit sQuadInit = {
-static ColliderQuadInit D_80B8ABA8 = {
- { COLTYPE_NONE, AT_ON | AT_TYPE_PLAYER | AT_TYPE_ENEMY, AC_NONE, OC1_NONE, OC2_NONE, COLSHAPE_QUAD, },
- { ELEMTYPE_UNK4, { 0xF7CFFFFF, 0x00, 0x00 }, { 0x00000000, 0x00, 0x00 }, TOUCH_ON | TOUCH_SFX_NORMAL | TOUCH_UNK7, BUMP_NONE, OCELEM_NONE, },
+static ColliderQuadInit sQuadInit = {
+ {
+ COLTYPE_NONE,
+ AT_ON | AT_TYPE_PLAYER | AT_TYPE_ENEMY,
+ AC_NONE,
+ OC1_NONE,
+ OC2_NONE,
+ COLSHAPE_QUAD,
+ },
+ {
+ ELEMTYPE_UNK4,
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ { 0x00000000, 0x00, 0x00 },
+ TOUCH_ON | TOUCH_SFX_NORMAL | TOUCH_UNK7,
+ 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 } } },
};
-#endif
+static AnimationHeader* sAnimations[EN_KAIZOKU_ANIM_MAX] = {
+ &object_kz_Anim_00F8E4, // EN_KAIZOKU_ANIM_0
+ &object_kz_Anim_00EF9C, // EN_KAIZOKU_ANIM_1
+ &object_kz_Anim_00E1C8, // EN_KAIZOKU_ANIM_2
+ &object_kz_Anim_00DBE4, // EN_KAIZOKU_ANIM_3
+ &object_kz_Anim_0058B8, // EN_KAIZOKU_ANIM_4
+ &object_kz_Anim_004860, // EN_KAIZOKU_ANIM_5
+ &object_kz_Anim_002730, // EN_KAIZOKU_ANIM_6
+ &object_kz_Anim_001578, // EN_KAIZOKU_ANIM_7
+ &object_kz_Anim_001390, // EN_KAIZOKU_ANIM_8
+ &object_kz_Anim_0003CC, // EN_KAIZOKU_ANIM_9
+ &object_kz_Anim_000F5C, // EN_KAIZOKU_ANIM_10
+ &object_kz_Anim_00E8BC, // EN_KAIZOKU_ANIM_11
+ &object_kz_Anim_00ED1C, // EN_KAIZOKU_ANIM_12
+ &object_kz_Anim_005644, // EN_KAIZOKU_ANIM_13
+ &object_kz_Anim_00F288, // EN_KAIZOKU_ANIM_14
+ &object_kz_Anim_0043E4, // EN_KAIZOKU_ANIM_15
+ &object_kz_Anim_003A3C, // EN_KAIZOKU_ANIM_16
+ &object_kz_Anim_002BA0, // EN_KAIZOKU_ANIM_17
+ &object_kz_Anim_001E9C, // EN_KAIZOKU_ANIM_18
+};
-extern DamageTable D_80B8AB3C;
-extern ColliderCylinderInit D_80B8AB7C;
-extern ColliderQuadInit D_80B8ABA8;
+static u8 sAnimationModes[EN_KAIZOKU_ANIM_MAX] = {
+ ANIMMODE_LOOP, // EN_KAIZOKU_ANIM_0
+ ANIMMODE_LOOP, // EN_KAIZOKU_ANIM_1
+ ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_2
+ ANIMMODE_LOOP, // EN_KAIZOKU_ANIM_3
+ ANIMMODE_LOOP, // EN_KAIZOKU_ANIM_4
+ ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_5
+ ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_6
+ ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_7
+ ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_8
+ ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_9
+ ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_10
+ ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_11
+ ANIMMODE_LOOP, // EN_KAIZOKU_ANIM_12
+ ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_13
+ ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_14
+ ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_15
+ ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_16
+ ANIMMODE_LOOP, // EN_KAIZOKU_ANIM_17
+ ANIMMODE_ONCE, // EN_KAIZOKU_ANIM_18
+};
-extern UNK_TYPE D_060058B8;
+void EnKaizoku_Init(Actor* thisx, PlayState* play) {
+ s32 pad;
+ EnKaizoku* this = THIS;
+ Player* player = GET_PLAYER(play);
+ EffectBlureInit1 blureInit;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/EnKaizoku_Init.s")
+ this->picto.actor.hintId = TATL_HINT_ID_PIRATE;
+ this->picto.actor.targetMode = 3;
+ this->picto.actor.colChkInfo.mass = 80;
+ ActorShape_Init(&this->picto.actor.shape, 0.0f, ActorShadow_DrawFeet, 0.0f);
+ this->unk_2CA = this->picto.actor.world.rot.z;
+ this->picto.actor.colChkInfo.health = 8;
+ this->exitIndex = KAIZOKU_GET_EXIT_INDEX(&this->picto.actor);
+ this->switchFlag = KAIZOKU_GET_SWITCHFLAG(&this->picto.actor);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/EnKaizoku_Destroy.s")
+ if (this->unk_2CA >= 2) {
+ this->unk_2CA = 0;
+ } else if (this->unk_2CA == 2) {
+ this->unk_2CA = 0;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B85858.s")
+ this->unk_2EC = this->picto.actor.world.rot.z;
+ this->picto.actor.world.rot.z = 0;
+ this->picto.actor.colChkInfo.damageTable = &sDamageTable;
+ SkelAnime_InitFlex(play, &this->skelAnime, &gKaizokuSkel, &object_kz_Anim_0058B8, this->jointTable,
+ this->morphTable, KAIZOKU_LIMB_MAX);
+ Collider_InitAndSetCylinder(play, &this->bodyCollider, &this->picto.actor, &sCylinderInit);
+ Collider_InitAndSetQuad(play, &this->swordCollider, &this->picto.actor, &sQuadInit);
+ blureInit.p1StartColor[0] = blureInit.p1StartColor[1] = blureInit.p1StartColor[2] = blureInit.p1StartColor[3] =
+ blureInit.p2StartColor[0] = blureInit.p2StartColor[1] = blureInit.p2StartColor[2] = blureInit.p1EndColor[0] =
+ blureInit.p1EndColor[1] = blureInit.p1EndColor[2] = blureInit.p2EndColor[0] = blureInit.p2EndColor[1] =
+ blureInit.p2EndColor[2] = 255;
+ blureInit.p2StartColor[3] = 64;
+ blureInit.p1EndColor[3] = blureInit.p2EndColor[3] = 0;
+ blureInit.elemDuration = 8;
+ blureInit.unkFlag = 0;
+ blureInit.calcMode = 2;
+ Effect_Add(play, &this->blureIndex, EFFECT_BLURE1, 0, 0, &blureInit);
+ Actor_SetScale(&this->picto.actor, 0.0125f);
+ this->picto.actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
+ this->picto.actor.flags &= ~ACTOR_FLAG_1;
+ if (this->switchFlag == 127) {
+ this->switchFlag = -1;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B85900.s")
+ if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) {
+ Actor_Kill(&this->picto.actor);
+ return;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B85A00.s")
+ this->bodyCollider.dim.radius = 20;
+ this->bodyCollider.dim.height = 65;
+ this->bodyCollider.dim.yShift = 0;
+ this->csId = this->picto.actor.csId;
+ this->picto.actor.world.pos.y = player->actor.world.pos.y + 160.0f;
+ this->picto.validationFunc = EnKaizoku_ValidatePictograph;
+ this->picto.actor.flags |= ACTOR_FLAG_400;
+ func_80B85F48(this);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B85E18.s")
+void EnKaizoku_Destroy(Actor* thisx, PlayState* play) {
+ EnKaizoku* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B85EA0.s")
+ Effect_Destroy(play, this->blureIndex);
+ Collider_DestroyCylinder(play, &this->bodyCollider);
+ Collider_DestroyQuad(play, &this->swordCollider);
+ Audio_RestorePrevBgm();
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B85F48.s")
+s32 func_80B85858(EnKaizoku* this, PlayState* play) {
+ Actor* itemAction;
+ Player* player = GET_PLAYER(play);
+ s16 prevAction = this->action;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B85FA8.s")
+ 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;
+ }
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B86804.s")
+ if (prevAction != this->action) {
+ return true;
+ } else {
+ return false;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B868B8.s")
+void func_80B85900(EnKaizoku* this) {
+ if (this->action == KAIZOKU_ACTION_1) {
+ this->headRot.y = Math_SinS(this->lookTimer * 0x1068) * 0x22D8;
+ } else if (this->action != KAIZOKU_ACTION_13) {
+ if ((this->action == KAIZOKU_ACTION_9) || (this->action == KAIZOKU_ACTION_11)) {
+ Math_SmoothStepToS(&this->headRot.y, this->picto.actor.yawTowardsPlayer - this->picto.actor.shape.rot.y, 1,
+ 500, 0);
+ this->headRot.y = CLAMP(this->headRot.y, -0x256F, 0x256F);
+ } else {
+ this->headRot.y = 0;
+ }
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B86B58.s")
+s32 func_80B85A00(EnKaizoku* this, PlayState* play, s16 arg2) {
+ Player* player = GET_PLAYER(play);
+ s16 sp32 = ABS_ALT(this->picto.actor.wallYaw - this->picto.actor.shape.rot.y);
+ s16 sp30 = ABS_ALT(this->picto.actor.yawTowardsPlayer - this->picto.actor.shape.rot.y);
+ Actor* explosiveActor;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B86B74.s")
+ if (func_800BE184(play, &this->picto.actor, 100.0f, 0x2710, 0x4000, this->picto.actor.shape.rot.y)) {
+ if (player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_START) {
+ if (this->action != KAIZOKU_ACTION_2) {
+ func_80B874D8(this, play);
+ }
+ return true;
+ } else {
+ func_80B87900(this);
+ return true;
+ }
+ } else if (func_800BE184(play, &this->picto.actor, 100.0f, 0x5DC0, 0x2AA8, this->picto.actor.shape.rot.y)) {
+ this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer;
+ if ((this->picto.actor.bgCheckFlags & BGCHECKFLAG_WALL) && (ABS_ALT(sp32) < 0x2EE0) &&
+ (this->picto.actor.xzDistToPlayer < 90.0f)) {
+ if (this->action != KAIZOKU_ACTION_6) {
+ func_80B87C7C(this);
+ }
+ return true;
+ } else if (player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_START) {
+ if (this->action != KAIZOKU_ACTION_2) {
+ func_80B874D8(this, play);
+ }
+ } else if (this->picto.actor.xzDistToPlayer < BREG(11) + 180.0f) {
+ func_80B87900(this);
+ } else if (this->action != KAIZOKU_ACTION_7) {
+ func_80B87E28(this);
+ }
+ return true;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B872A4.s")
+ explosiveActor = Actor_FindNearby(play, &this->picto.actor, -1, ACTORCAT_EXPLOSIVES, 80.0f);
+ if (explosiveActor != NULL) {
+ this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B872F4.s")
+ if (((this->picto.actor.bgCheckFlags & BGCHECKFLAG_WALL) && (sp32 < 0x2EE0)) ||
+ (explosiveActor->id == ACTOR_EN_BOM_CHU)) {
+ if ((explosiveActor->id == ACTOR_EN_BOM_CHU) &&
+ (Actor_WorldDistXYZToActor(&this->picto.actor, explosiveActor) < 80.0f) &&
+ (BINANG_ADD(this->picto.actor.shape.rot.y - explosiveActor->world.rot.y, 0x8000) < 0x4000)) {
+ if (this->action != KAIZOKU_ACTION_6) {
+ func_80B87C7C(this);
+ }
+ } else {
+ func_80B87900(this);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B874D8.s")
+ return true;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B8760C.s")
+ if (this->action != KAIZOKU_ACTION_7) {
+ func_80B87E28(this);
+ }
+ return true;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B87900.s")
+ if (arg2) {
+ s16 sp2A;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B8798C.s")
+ //! FAKE:
+ label:;
+ if (sp30 >= 10000) {
+ 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->action != KAIZOKU_ACTION_9) {
+ func_80B87F70(this);
+ return 1;
+ }
+ } else if (this->action != KAIZOKU_ACTION_3) {
+ func_80B88CD8(this);
+ }
+ }
+ return true;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B87C7C.s")
+ return false;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B87CF8.s")
+void EnKaizoku_ChangeAnim(EnKaizoku* this, EnKaizokuAnimation animIndex) {
+ this->animIndex = animIndex;
+ this->frameCount = Animation_GetLastFrame(sAnimations[this->animIndex]);
+ Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->frameCount,
+ sAnimationModes[this->animIndex], 0.0f);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B87D3C.s")
+s32 EnKaizoku_ValidatePictograph(PlayState* play, Actor* actor) {
+ s32 ret = Snap_ValidatePictograph(play, actor, PICTO_VALID_PIRATE_GOOD, &actor->focus.pos, &actor->shape.rot, 10.0f,
+ 400.0f, -1);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B87E28.s")
+ ret |= Snap_ValidatePictograph(play, actor, PICTO_VALID_PIRATE_TOO_FAR, &actor->focus.pos, &actor->shape.rot, 10.0f,
+ 1200.0f, -1);
+ return ret;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B87E9C.s")
+void func_80B85F48(EnKaizoku* this) {
+ Math_Vec3f_Copy(&this->unk_2F8, &gZeroVec3f);
+ Math_Vec3f_Copy(&this->unk_304, &gZeroVec3f);
+ this->unk_2D8 = 1;
+ this->action = KAIZOKU_ACTION_0;
+ this->actionFunc = func_80B85FA8;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B87F70.s")
+void func_80B85FA8(EnKaizoku* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+ f32 curFrame = this->skelAnime.curFrame;
+ s32 sp54;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B87FDC.s")
+ switch (this->unk_59C) {
+ case 0:
+ if (!(this->picto.actor.xzDistToPlayer < 200.0f)) {
+ break;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B88214.s")
+ if (!CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_Queue(this->csId);
+ return;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B88278.s")
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->picto.actor);
+ func_800B7298(play, &this->picto.actor, 0x15);
+ this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId);
+ this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B8833C.s")
+ sp54 = (this->unk_2CA * 4) + this->unk_2C8;
+ if (this->unk_2EC != 2) {
+ player->actor.world.pos.x = this->picto.actor.home.pos.x + 90.0f;
+ player->actor.world.pos.z = this->picto.actor.home.pos.z + 30.0f;
+ } else {
+ player->actor.world.pos.x = this->picto.actor.home.pos.x - 90.0f;
+ player->actor.world.pos.z = this->picto.actor.home.pos.z - 30.0f;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B88378.s")
+ player->actor.speed = 0.0f;
+ this->picto.actor.world.pos.x = this->picto.actor.home.pos.x;
+ this->picto.actor.world.pos.z = this->picto.actor.home.pos.z;
+ Message_StartTextbox(play, D_80B8A8D0[sp54], &this->picto.actor);
+ this->unk_2C8++;
+ this->picto.actor.flags &= ~ACTOR_FLAG_1;
+ player->actor.shape.rot.y = player->actor.world.rot.y =
+ Math_Vec3f_Yaw(&player->actor.world.pos, &this->picto.actor.world.pos);
+ Math_Vec3f_Copy(&this->subCamEye, &this->unk_5C8);
+ Math_Vec3f_Copy(&this->subCamAt, &this->unk_5D4);
+ this->subCamUp.x = -0.11f;
+ this->picto.actor.draw = EnKaizoku_Draw;
+ this->unk_598 = 0;
+ Audio_SetMainBgmVolume(0, 0xA);
+ this->unk_59C++;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B88770.s")
+ case 1:
+ player->actor.shape.rot.y = player->actor.world.rot.y =
+ Math_Vec3f_Yaw(&player->actor.world.pos, &this->picto.actor.world.pos);
+ this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B887AC.s")
+ if (this->unk_2EC != 2) {
+ player->actor.world.pos.x = this->picto.actor.home.pos.x + 90.0f;
+ player->actor.world.pos.z = this->picto.actor.home.pos.z + 30.0f;
+ } else {
+ player->actor.world.pos.x = this->picto.actor.home.pos.x - 90.0f;
+ player->actor.world.pos.z = this->picto.actor.home.pos.z - 30.0f;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B88910.s")
+ if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
+ Message_CloseTextbox(play);
+ EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_11);
+ this->unk_598 = 0;
+ this->unk_59C++;
+ this->picto.actor.gravity = -2.0f;
+ }
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B88964.s")
+ case 2:
+ if (this->picto.actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ if (this->unk_2D8 != 0) {
+ this->unk_2D8 = 0;
+ this->picto.actor.world.pos.y = this->picto.actor.floorHeight;
+ this->picto.actor.velocity.y = 0.0f;
+ func_800B7298(play, &this->picto.actor, 4);
+ Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->leftFootPos, 3.0f, 2, 2.0f, 0, 0, 0);
+ Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->rightFootPos, 3.0f, 2, 2.0f, 0, 0, 0);
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_ONGND);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B88CD8.s")
+ if (curFrame >= 11.0f) {
+ this->unk_59C++;
+ this->unk_598 = 0;
+ this->subCamUp.x = 0.0f;
+ }
+ }
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B88D6C.s")
+ case 3:
+ if (this->frameCount <= curFrame) {
+ sp54 = this->unk_2CA * 4 + this->unk_2C8;
+ if (Player_GetMask(play) == PLAYER_MASK_STONE) {
+ if (D_80B8A8D0[sp54] == 0x11A5) {
+ sp54 = 8;
+ } else if (D_80B8A8D0[sp54] == 0x11A9) {
+ sp54 = 9;
+ }
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B891B8.s")
+ Message_StartTextbox(play, D_80B8A8D0[sp54], &this->picto.actor);
+ EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_12);
+ this->unk_2C8++;
+ this->unk_598 = 0;
+ this->unk_59C++;
+ }
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B89280.s")
+ case 4:
+ if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
+ Message_CloseTextbox(play);
+ this->unk_598 = 0;
+ this->unk_59C++;
+ Audio_SetMainBgmVolume(0x7F, 0);
+ Audio_PlayBgm_StorePrevBgm(NA_BGM_MINI_BOSS);
+ EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_13);
+ }
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B893CC.s")
+ case 5:
+ Math_ApproachF(&this->unk_5E0, 2.0f, 0.2f, 1.0f);
+ if (Animation_OnFrame(&this->skelAnime, 20.0f)) {
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_BOSU_SWORD);
+ }
+ if (curFrame >= 30.0f) {
+ this->unk_598 = 0;
+ this->unk_59C++;
+ }
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B894C0.s")
+ case 6:
+ Math_ApproachF(&this->unk_5E0, 5.0f, 0.3f, 1.0f);
+ if (this->frameCount <= curFrame) {
+ this->unk_598 = 7;
+ this->unk_2F8.x = 1.0f;
+ this->unk_59C++;
+ this->unk_2F8.y = 1.0f;
+ this->unk_2F8.z = 1.0f;
+ this->unk_304.x = 1.0f;
+ this->unk_304.y = 1.0f;
+ this->unk_304.z = 1.0f;
+ }
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B8960C.s")
+ case 7:
+ if (this->unk_598 == 0) {
+ func_800B7298(play, &this->picto.actor, 6);
+ CutsceneManager_Stop(this->csId);
+ this->unk_59C = 0;
+ this->subCamId = 0;
+ this->picto.actor.flags &= ~ACTOR_FLAG_100000;
+ this->picto.actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON;
+ this->picto.actor.flags |= ACTOR_FLAG_1;
+ func_80B872A4(this);
+ }
+ break;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B8971C.s")
+ if (this->unk_59C < 7) {
+ s32 temp_v0_3 = this->unk_2EC * 8;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B89A08.s")
+ temp_v0_3 += this->unk_59C;
+ this->unk_5C8.x = D_80B8A8E4[temp_v0_3].x + this->picto.actor.home.pos.x;
+ this->unk_5C8.y = D_80B8A8E4[temp_v0_3].y + player->actor.world.pos.y;
+ this->unk_5C8.z = D_80B8A8E4[temp_v0_3].z + this->picto.actor.home.pos.z;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/EnKaizoku_Update.s")
+ this->unk_5D4.x = D_80B8AA04[temp_v0_3].x + this->picto.actor.home.pos.x;
+ this->unk_5D4.y = D_80B8AA04[temp_v0_3].y + player->actor.world.pos.y;
+ this->unk_5D4.z = D_80B8AA04[temp_v0_3].z + this->picto.actor.home.pos.z;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B8A318.s")
+ if (this->unk_59C >= 5) {
+ if (curFrame >= 6.0f) {
+ Math_ApproachF(&this->unk_2F8.x, 1.0f, 0.3f, 0.3f);
+ this->unk_2F8.z = this->unk_2F8.y = this->unk_2F8.x;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B8A468.s")
+ if (curFrame >= 22.0f) {
+ Math_ApproachF(&this->unk_304.x, 1.0f, 0.3f, 0.3f);
+ this->unk_304.z = this->unk_304.y = this->unk_304.x;
+ }
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B8A6B0.s")
+ if (this->unk_59C >= 5) {
+ 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);
+ Math_ApproachF(&this->subCamEye.z, this->unk_5C8.z, 0.5f, this->unk_5E0);
+ Math_ApproachF(&this->subCamAt.x, this->unk_5D4.x, 0.5f, this->unk_5E0);
+ Math_ApproachF(&this->subCamAt.y, this->unk_5D4.y, 0.5f, this->unk_5E0);
+ Math_ApproachF(&this->subCamAt.z, this->unk_5D4.z, 0.5f, this->unk_5E0);
+ } else {
+ Math_Vec3f_Copy(&this->subCamEye, &this->unk_5C8);
+ Math_Vec3f_Copy(&this->subCamAt, &this->unk_5D4);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B8A718.s")
+ if (this->subCamId != 0) {
+ this->subCamUp.y = 1.0f;
+ this->subCamUp.z = 0.0f;
+ Play_SetCameraAtEyeUp(play, this->subCamId, &this->subCamAt, &this->subCamEye, &this->subCamUp);
+ }
+}
+
+void func_80B86804(EnKaizoku* this, PlayState* play) {
+ if (this->subCamId == 0) {
+ if (!CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_Queue(this->csId);
+ return;
+ }
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->picto.actor);
+ }
+
+ func_800B7298(play, &this->picto.actor, 0x60);
+ this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId);
+ this->unk_2B2 = 30;
+ this->picto.actor.flags &= ~ACTOR_FLAG_1;
+ this->unk_598 = 0;
+ this->unk_59C = 0;
+ this->unk_2D8 = 0;
+ this->action = KAIZOKU_ACTION_0;
+ this->actionFunc = func_80B868B8;
+ this->picto.actor.speed = 0.0f;
+}
+
+void func_80B868B8(EnKaizoku* this, PlayState* play) {
+ f32 curFrame = this->skelAnime.curFrame;
+
+ Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 1, 4000, 1);
+ this->subCamEye.x = Math_SinS(this->picto.actor.yawTowardsPlayer) * 155.0f + this->picto.actor.world.pos.x;
+ this->subCamEye.y = this->picto.actor.world.pos.y + 10.0f;
+ this->subCamEye.z = Math_CosS(this->picto.actor.yawTowardsPlayer) * 115.0f + this->picto.actor.world.pos.z;
+
+ this->subCamAt.x = Math_SinS(this->picto.actor.yawTowardsPlayer) + this->picto.actor.world.pos.x;
+ this->subCamAt.y = this->picto.actor.world.pos.y + 30.0f;
+ this->subCamAt.z = Math_CosS(this->picto.actor.yawTowardsPlayer) * 11.0f + this->picto.actor.world.pos.z;
+
+ switch (this->unk_59C) {
+ case 0:
+ if (this->frameCount <= curFrame) {
+ EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_14);
+ this->unk_2C8 = 3;
+ this->unk_598 = 0;
+ this->unk_59C++;
+ }
+ break;
+
+ case 1:
+ if (this->frameCount <= curFrame) {
+ s32 textId;
+
+ EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_15);
+ textId = this->unk_2CA * 4 + this->unk_2C8;
+ Message_StartTextbox(play, D_80B8A8D0[textId], &this->picto.actor);
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_LAST2_SHOUT);
+ this->unk_598 = 0;
+ this->unk_59C++;
+ }
+ break;
+
+ case 2:
+ if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
+ Message_CloseTextbox(play);
+ func_800B7298(play, &this->picto.actor, 6);
+ CutsceneManager_Stop(this->csId);
+ this->subCamId = 0;
+ play->nextEntrance = play->setupExitList[this->exitIndex];
+ gSaveContext.nextCutsceneIndex = 0;
+ Scene_SetExitFade(play);
+ play->transitionTrigger = TRANS_TRIGGER_START;
+ this->unk_59C++;
+ this->action = KAIZOKU_ACTION_16;
+ }
+
+ break;
+ }
+
+ if (this->subCamId != 0) {
+ this->subCamUp.x = 0.0f;
+ this->subCamUp.y = 1.0f;
+ this->subCamUp.z = 0.0f;
+ Play_SetCameraAtEyeUp(play, this->subCamId, &this->subCamAt, &this->subCamEye, &this->subCamUp);
+ }
+}
+
+void func_80B86B58(EnKaizoku* this) {
+ this->unk_2D8 = 0;
+ this->action = KAIZOKU_ACTION_0;
+ this->actionFunc = func_80B86B74;
+}
+
+void func_80B86B74(EnKaizoku* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+ s32 textId;
+ f32 curFrame = this->skelAnime.curFrame;
+
+ if (this->unk_59C < 2) {
+ Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 1, 0xFA0, 1);
+ player->actor.world.pos.x = this->picto.actor.home.pos.x + 90.0f;
+ player->actor.world.pos.z = this->picto.actor.home.pos.z + 30.0f;
+ this->picto.actor.world.pos.x = this->picto.actor.home.pos.x;
+ this->picto.actor.world.pos.z = this->picto.actor.home.pos.z;
+ this->unk_5C8.x = player->actor.world.pos.x + 39.0f;
+ this->unk_5C8.y = player->actor.world.pos.y + 4.0f;
+ this->unk_5C8.z = player->actor.world.pos.z - 41.0f;
+ this->unk_5D4.x = player->actor.world.pos.x - 150.0f;
+ this->unk_5D4.y = player->actor.world.pos.y + 60.0f;
+ this->unk_5D4.z = player->actor.world.pos.z + 50.0f;
+ }
+
+ player->actor.shape.rot.y = player->actor.world.rot.y =
+ Math_Vec3f_Yaw(&player->actor.world.pos, &this->picto.actor.world.pos);
+ switch (this->unk_59C) {
+ case 0:
+ EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_17);
+ this->unk_2C8 = 2;
+ textId = this->unk_2CA * 4 + this->unk_2C8;
+ Message_StartTextbox(play, D_80B8A8D0[textId], &this->picto.actor);
+ this->unk_2D9 = 0;
+ this->unk_598 = 0;
+ this->unk_59C++;
+ break;
+
+ case 1:
+ if (this->frameCount <= curFrame) {
+ if (this->unk_2D9 == 0) {
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_DAMM_BREATH);
+ this->unk_2D9 = 1;
+ } else {
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_BREATH);
+ }
+ }
+
+ if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
+ Message_CloseTextbox(play);
+ EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_18);
+ func_800B7298(play, &this->picto.actor, 0x85);
+ this->unk_5A0 = 0;
+ this->unk_598 = 0;
+ this->unk_59C++;
+ }
+ break;
+
+ case 2:
+ this->unk_5C8.x = player->actor.world.pos.x + 77.0f;
+ this->unk_5C8.y = player->actor.world.pos.y + 84.0f;
+ this->unk_5C8.z = player->actor.world.pos.z - 71.0f;
+
+ this->unk_5D4.x = player->actor.world.pos.x - 110.0f;
+ this->unk_5D4.y = player->actor.world.pos.y;
+ this->unk_5D4.z = player->actor.world.pos.z + 30.0f;
+ this->unk_5A0++;
+ if (curFrame >= 1.0f) {
+ Math_ApproachZeroF(&this->unk_2F8.x, 0.3f, 0.3f);
+ Math_ApproachZeroF(&this->unk_304.x, 0.3f, 0.3f);
+ this->unk_2F8.z = this->unk_2F8.y = this->unk_2F8.x;
+ this->unk_304.z = this->unk_304.y = this->unk_304.x;
+ }
+ if (this->unk_5A0 == 0x12) {
+ Actor* temp_v0_2;
+
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_SHOUT);
+ temp_v0_2 = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ARROW, this->picto.actor.world.pos.x,
+ this->picto.actor.world.pos.y + 10.0f, this->picto.actor.world.pos.z,
+ this->picto.actor.shape.rot.x, this->picto.actor.shape.rot.y,
+ this->picto.actor.shape.rot.z, -8);
+ if (temp_v0_2 != NULL) {
+ temp_v0_2->gravity = -10.0f;
+ play->envCtx.fillScreen = true;
+ }
+ }
+
+ if (this->unk_5A0 >= 0x12) {
+ Math_ApproachF(&this->unk_5EC, 60.0f, 1.0f, 20.0f);
+ this->unk_5E8 = this->unk_5EC / 60.0f;
+ play->envCtx.screenFillColor[3] = this->unk_5E8 * 255.0f;
+ play->envCtx.screenFillColor[0] = play->envCtx.screenFillColor[1] = play->envCtx.screenFillColor[2] =
+ 255;
+ }
+
+ if ((this->frameCount <= curFrame) && (this->unk_5A0 >= 0x28)) {
+ this->picto.actor.draw = NULL;
+ this->unk_598 = 10;
+ Math_Vec3f_Copy(&this->unk_2F8, &gZeroVec3f);
+ Math_Vec3f_Copy(&this->unk_304, &gZeroVec3f);
+ this->unk_59C++;
+ }
+ break;
+
+ case 3:
+ if (this->unk_598 == 0) {
+ Math_ApproachZeroF(&this->unk_5EC, 0.5f, 10.0f);
+ this->unk_5E8 = this->unk_5EC / 60.0f;
+ play->envCtx.screenFillColor[3] = this->unk_5E8 * 255.0f;
+ if (play->envCtx.screenFillColor[3] < 10) {
+ play->envCtx.screenFillColor[0] = 0;
+ play->envCtx.screenFillColor[1] = 0;
+ play->envCtx.screenFillColor[2] = 0;
+ play->envCtx.screenFillColor[3] = 0;
+ play->envCtx.fillScreen = false;
+ this->unk_59C = 0;
+ this->subCamId = 0;
+ func_800B7298(play, &this->picto.actor, 6);
+ CutsceneManager_Stop(this->csId);
+ if (this->switchFlag >= 0) {
+ Flags_SetSwitch(play, this->switchFlag);
+ }
+ Actor_Kill(&this->picto.actor);
+ }
+ }
+ 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);
+ Math_ApproachF(&this->subCamEye.z, this->unk_5C8.z, 0.5f, this->unk_5E0);
+ Math_ApproachF(&this->subCamAt.x, this->unk_5D4.x, 0.5f, this->unk_5E0);
+ Math_ApproachF(&this->subCamAt.y, this->unk_5D4.y, 0.5f, this->unk_5E0);
+ 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) {
+ this->subCamUp.x = 0.0f;
+ this->subCamUp.z = 0.0f;
+ this->subCamUp.y = 1.0f;
+ Play_SetCameraAtEyeUp(play, this->subCamId, &this->subCamAt, &this->subCamEye, &this->subCamUp);
+ }
+}
+
+void func_80B872A4(EnKaizoku* this) {
+ this->picto.actor.speed = 0.0f;
+ EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_0);
+ this->action = KAIZOKU_ACTION_1;
+ this->actionFunc = func_80B872F4;
+ this->picto.actor.shape.shadowScale = 90.0f;
+}
+
+void func_80B872F4(EnKaizoku* this, PlayState* play) {
+ Player* player = GET_PLAYER(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)) {
+ 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)) {
+ if ((this->picto.actor.xzDistToPlayer < 400.0f && this->picto.actor.xzDistToPlayer > 150.0f) &&
+ (Rand_ZeroOne() < 0.7f)) {
+ if ((Rand_ZeroOne() > 0.5f) || (ABS_ALT(yawDiff) < 0x3000)) {
+ func_80B88214(this);
+ } else {
+ func_80B88910(this);
+ }
+ } else if (Rand_ZeroOne() > 0.1f) {
+ func_80B8833C(this);
+ } else {
+ func_80B88CD8(this);
+ }
+ } else {
+ func_80B88770(this);
+ }
+ }
+}
+
+void func_80B874D8(EnKaizoku* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+
+ EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_3);
+ if (Math_SinS(player->actor.shape.rot.y - this->picto.actor.shape.rot.y) > 0.0f) {
+ this->picto.actor.speed = -10.0f;
+ } else if (Math_SinS(player->actor.shape.rot.y - this->picto.actor.shape.rot.y) < 0.0f) {
+ this->picto.actor.speed = 10.0f;
+ } else if (Rand_ZeroOne() > 0.5f) {
+ this->picto.actor.speed = 10.0f;
+ } else {
+ this->picto.actor.speed = -10.0f;
+ }
+
+ this->skelAnime.playSpeed = 1.0f;
+ this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y;
+ this->unk_2B2 = 6;
+ this->action = KAIZOKU_ACTION_2;
+ this->unk_2E0 = 0.0f;
+ this->actionFunc = func_80B8760C;
+}
+
+void func_80B8760C(EnKaizoku* this, PlayState* play) {
+ s16 var_v0;
+ s32 temp_ft0;
+ s32 temp_ft1;
+
+ this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer + 0x3A98;
+ if ((this->picto.actor.bgCheckFlags & BGCHECKFLAG_WALL) ||
+ !Actor_TestFloorInDirection(&this->picto.actor, play, this->picto.actor.speed,
+ this->picto.actor.shape.rot.y + 0x4000)) {
+ if (this->picto.actor.bgCheckFlags & BGCHECKFLAG_WALL) {
+ if (this->picto.actor.speed >= 0.0f) {
+ var_v0 = this->picto.actor.shape.rot.y + 0x4000;
+ } else {
+ var_v0 = this->picto.actor.shape.rot.y - 0x4000;
+ }
+ var_v0 = this->picto.actor.wallYaw - var_v0;
+ } else {
+ this->picto.actor.speed *= -0.8f;
+ var_v0 = 0;
+ }
+
+ if (ABS_ALT(var_v0) > 0x4000) {
+ func_80B87C7C(this);
+ return;
+ }
+ }
+
+ if (this->picto.actor.xzDistToPlayer <= 65.0f) {
+ Math_ApproachF(&this->unk_2E0, -4.0f, 1.0f, 1.5f);
+ } else if (this->picto.actor.xzDistToPlayer > 40.0f) {
+ Math_ApproachF(&this->unk_2E0, 4.0f, 1.0f, 1.5f);
+ } else {
+ Math_ApproachZeroF(&this->unk_2E0, 1.0f, 6.65f);
+ }
+
+ if (this->unk_2E0 != 0.0f) {
+ this->picto.actor.world.pos.x += Math_SinS(this->picto.actor.yawTowardsPlayer) * this->unk_2E0;
+ this->picto.actor.world.pos.z += Math_CosS(this->picto.actor.yawTowardsPlayer) * this->unk_2E0;
+ }
+
+ 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))) {
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_GERUDOFT_WALK);
+ }
+
+ if (!(play->gameplayFrames & 0x5F)) {
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_BREATH);
+ }
+
+ if (this->unk_2B2 == 0) {
+ this->picto.actor.shape.rot.y = this->picto.actor.yawTowardsPlayer;
+ if (!func_80B85858(this, play)) {
+ if (this->picto.actor.xzDistToPlayer <= 70.0f) {
+ func_80B87F70(this);
+ } else {
+ func_80B87E28(this);
+ }
+ }
+ } else {
+ if (this->picto.actor.speed >= 0.0f) {
+ this->picto.actor.shape.rot.y += 0x4000;
+ } else {
+ this->picto.actor.shape.rot.y -= 0x4000;
+ }
+ }
+}
+
+void func_80B87900(EnKaizoku* this) {
+ EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_7);
+
+ if (this->swordState != 0) {
+ this->swordState = -1;
+ }
+ this->unk_2D8 = 0;
+ this->picto.actor.speed = 0.0f;
+ this->unk_2B2 = Rand_S16Offset(10, 10);
+ this->bodyCollider.base.acFlags |= AC_HARD;
+ this->lookTimer = 12;
+ this->action = KAIZOKU_ACTION_12;
+ this->actionFunc = func_80B8798C;
+}
+
+void func_80B8798C(EnKaizoku* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+ s16 temp_v0;
+
+ this->unk_2D8 = 1;
+ if (this->unk_2B2 == 0) {
+ this->skelAnime.playSpeed = 1.0f;
+ }
+ 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 (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;
+ func_80B874D8(this, play);
+ } else if (!(play->gameplayFrames & 1)) {
+ func_80B87900(this);
+ } else {
+ this->bodyCollider.base.acFlags &= ~AC_HARD;
+ func_80B87E28(this);
+ }
+ } else {
+ temp_v0 = player->actor.shape.rot.y - this->picto.actor.shape.rot.y;
+ if (ABS_ALT(temp_v0) < 0x4000) {
+ this->bodyCollider.base.acFlags &= ~AC_HARD;
+ func_80B87F70(this);
+ } else {
+ this->bodyCollider.base.acFlags &= ~AC_HARD;
+ func_80B88CD8(this);
+ }
+ }
+ } else {
+ this->bodyCollider.base.acFlags &= ~AC_HARD;
+ func_80B88CD8(this);
+ }
+ } 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;
+ func_80B874D8(this, play);
+ } else if (!func_80B85858(this, play)) {
+ if (!(play->gameplayFrames & 1)) {
+ if (this->picto.actor.xzDistToPlayer < 100.0f && Rand_ZeroOne() > 0.7f) {
+ this->bodyCollider.base.acFlags &= ~AC_HARD;
+ func_80B87C7C(this);
+ } else {
+ this->bodyCollider.base.acFlags &= ~AC_HARD;
+ func_80B87E28(this);
+ }
+ } else {
+ func_80B87900(this);
+ }
+ }
+ }
+}
+
+void func_80B87C7C(EnKaizoku* this) {
+ EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_8);
+ this->picto.actor.speed = 6.5f;
+ this->picto.actor.velocity.y = 15.0f;
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_TEKU_JUMP);
+ this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y;
+ this->bodyCollider.info.elemType = ELEMTYPE_UNK4;
+ this->bodyCollider.base.colType = COLTYPE_NONE;
+ this->swordCollider.info.elemType = ELEMTYPE_UNK4;
+ this->action = KAIZOKU_ACTION_6;
+ this->actionFunc = func_80B87D3C;
+}
+
+Color_RGBA8 D_80B8AC58 = { 200, 160, 120, 255 };
+Color_RGBA8 D_80B8AC5C = { 130, 90, 50, 255 };
+
+Vec3f D_80B8AC60 = { 0.0f, -1.5f, 0.0f };
+Vec3f D_80B8AC6C = { 0.0f, -0.2f, 0.0f };
+
+void func_80B87CF8(PlayState* play, Vec3f* pos) {
+ EffectSsKirakira_SpawnSmall(play, pos, &D_80B8AC60, &D_80B8AC6C, &D_80B8AC58, &D_80B8AC5C);
+}
+
+void func_80B87D3C(EnKaizoku* this, PlayState* play) {
+ f32 curFrame = this->skelAnime.curFrame;
+
+ Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 1, 0xFA0, 1);
+ if (this->picto.actor.velocity.y >= 5.0f) {
+ func_80B87CF8(play, &this->leftFootPos);
+ func_80B87CF8(play, &this->rightFootPos);
+ }
+
+ this->unk_2D8 = 0;
+ if ((this->frameCount <= curFrame) &&
+ (this->picto.actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH))) {
+ this->bodyCollider.info.elemType = ELEMTYPE_UNK1;
+ this->bodyCollider.base.colType = COLTYPE_HIT3;
+ this->swordCollider.info.elemType = ELEMTYPE_UNK2;
+ this->picto.actor.shape.rot.x = 0;
+ this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y = this->picto.actor.yawTowardsPlayer;
+ this->picto.actor.speed = 0.0f;
+ this->picto.actor.velocity.y = 0.0f;
+ this->picto.actor.world.pos.y = this->picto.actor.floorHeight;
+ func_80B87F70(this);
+ }
+}
+
+void func_80B87E28(EnKaizoku* this) {
+ EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_8);
+ this->picto.actor.speed = -8.0f;
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_TEKU_JUMP);
+ this->bodyCollider.info.elemType = ELEMTYPE_UNK4;
+ this->bodyCollider.base.colType = COLTYPE_NONE;
+ this->swordCollider.info.elemType = ELEMTYPE_UNK4;
+ this->action = KAIZOKU_ACTION_7;
+ this->actionFunc = func_80B87E9C;
+ this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer;
+}
+
+void func_80B87E9C(EnKaizoku* this, PlayState* play) {
+ f32 curFrame = this->skelAnime.curFrame;
+
+ this->unk_2D8 = 0;
+ if (this->frameCount <= curFrame) {
+ if ((this->picto.actor.xzDistToPlayer < 170.0f) && (this->picto.actor.xzDistToPlayer > 140.0f) &&
+ (Rand_ZeroOne() < 0.2f)) {
+ func_80B88910(this);
+ } else {
+ func_80B87900(this);
+ }
+ }
+ if (!(play->state.frames & 0x5F)) {
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_BREATH);
+ }
+}
+
+void func_80B87F70(EnKaizoku* this) {
+ EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_9);
+ this->unk_2D0 = 0;
+ this->swordCollider.base.atFlags &= ~AT_BOUNCED;
+ this->picto.actor.speed = 0.0f;
+ AudioSfx_StopByPosAndId(&this->picto.actor.projectedPos, NA_SE_EN_PIRATE_BREATH);
+ this->action = KAIZOKU_ACTION_9;
+ this->actionFunc = func_80B87FDC;
+}
+
+void func_80B87FDC(EnKaizoku* this, PlayState* play2) {
+ PlayState* play = play2;
+ f32 curFrame;
+ s16 sp2E;
+ s16 sp2C;
+ Player* player = GET_PLAYER(play2);
+
+ curFrame = this->skelAnime.curFrame;
+ sp2E = ABS_ALT(player->actor.shape.rot.y - this->picto.actor.shape.rot.y);
+ sp2C = ABS_ALT(this->picto.actor.yawTowardsPlayer - this->picto.actor.shape.rot.y);
+ this->picto.actor.speed = 0.0f;
+
+ if (Animation_OnFrame(&this->skelAnime, 1.0f)) {
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_ATTACK);
+ this->swordState = 1;
+ } else if (Animation_OnFrame(&this->skelAnime, 6.0f)) {
+ this->swordState = -1;
+ }
+
+ if (this->swordCollider.base.atFlags & AT_BOUNCED) {
+ this->swordState = -1;
+ this->swordCollider.base.atFlags &= ~(AT_BOUNCED | AT_HIT);
+ func_80B87E28(this);
+ return;
+ }
+
+ this->unk_2D8 = 0;
+ if (this->frameCount <= curFrame) {
+ if (!Actor_IsFacingPlayer(&this->picto.actor, 0x1554)) {
+ func_80B872A4(this);
+
+ if (sp2C > 0x4000) {
+ this->lookTimer = 20;
+ }
+ } else {
+ if (Rand_ZeroOne() > 0.7f || this->picto.actor.xzDistToPlayer >= 120.0f) {
+ func_80B872A4(this);
+ return;
+ }
+
+ this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer;
+
+ if (BREG(12) * 0.1f + 0.01f * 40.0f < Rand_ZeroOne()) {
+ func_80B87900(this);
+ } else if (sp2E <= 0x2710) {
+ if (sp2C > 0x4000) {
+ this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer;
+ func_80B88CD8(this);
+ } else {
+ func_80B85A00(this, play, true);
+ }
+ } else {
+ func_80B88CD8(this);
+ }
+ }
+ }
+}
+
+void func_80B88214(EnKaizoku* this) {
+ EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_8);
+ this->unk_2B2 = 0;
+ this->picto.actor.speed = 10.0f;
+ this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y = this->picto.actor.yawTowardsPlayer;
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_TEKU_JUMP);
+ this->action = KAIZOKU_ACTION_5;
+ this->actionFunc = func_80B88278;
+}
+
+void func_80B88278(EnKaizoku* this, PlayState* play) {
+ f32 curFrame = this->skelAnime.curFrame;
+
+ this->unk_2D8 = 0;
+ if (this->frameCount <= curFrame) {
+ this->picto.actor.speed = 0.0f;
+ if (!Actor_IsFacingPlayer(&this->picto.actor, 0x1554)) {
+ func_80B872A4(this);
+ this->unk_2B2 = Rand_ZeroOne() * 5.0f + 5.0f;
+ } else {
+ func_80B87F70(this);
+ }
+ }
+ if (!(play->gameplayFrames & 0x5F)) {
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_BREATH);
+ }
+}
+
+void func_80B8833C(EnKaizoku* this) {
+ EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_4);
+ this->action = KAIZOKU_ACTION_4;
+ this->actionFunc = func_80B88378;
+}
+
+void func_80B88378(EnKaizoku* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+ s32 sp30;
+ s32 sp2C;
+ s16 sp2A;
+
+ if (!func_80B85858(this, play)) {
+ Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 1, 0x2EE, 0);
+ this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y;
+ if (this->picto.actor.xzDistToPlayer <= 40.0f) {
+ Math_ApproachF(&this->picto.actor.speed, -8.0f, 1.0f, 1.5f);
+ } else if (this->picto.actor.xzDistToPlayer > 55.0f) {
+ Math_ApproachF(&this->picto.actor.speed, 8.0f, 1.0f, 1.5f);
+ } else {
+ Math_ApproachZeroF(&this->picto.actor.speed, 2.0f, 6.65f);
+ }
+
+ 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) {
+ this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer;
+ if (Rand_ZeroOne() > 0.7f) {
+ func_80B88CD8(this);
+ return;
+ }
+ }
+
+ sp30 = this->skelAnime.curFrame - this->skelAnime.playSpeed;
+ sp2C = this->skelAnime.curFrame + this->skelAnime.playSpeed;
+ if (!Actor_IsFacingPlayer(&this->picto.actor, 0x11C7)) {
+ if (Rand_ZeroOne() > 0.5f) {
+ func_80B88CD8(this);
+ } else {
+ func_80B872A4(this);
+ }
+ } else if (this->picto.actor.xzDistToPlayer < 90.0f) {
+ if ((Rand_ZeroOne() > 0.03f) || ((this->picto.actor.xzDistToPlayer <= 65.0f) && (sp2A < 0x4000))) {
+ func_80B87F70(this);
+ } else if (Actor_OtherIsTargeted(play, &this->picto.actor) && (Rand_ZeroOne() > 0.5f)) {
+ func_80B87E28(this);
+ } else {
+ func_80B88CD8(this);
+ }
+ }
+
+ if (!func_80B85A00(this, play, false)) {
+ 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) {
+ func_80B88214(this);
+ } else {
+ func_80B88910(this);
+ }
+ } else {
+ func_80B88CD8(this);
+ return;
+ }
+ }
+
+ if (!(play->gameplayFrames & 0x5F)) {
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_BREATH);
+ }
+
+ if ((this->skelAnime.curFrame != 0.0f) && ((sp30 < 0 && sp2C > 0) || (sp30 < 4 && sp2C >= 5))) {
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_GERUDOFT_WALK);
+ }
+ }
+ }
+}
+
+void func_80B88770(EnKaizoku* this) {
+ EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_3);
+ this->action = KAIZOKU_ACTION_10;
+ this->actionFunc = func_80B887AC;
+}
+
+void func_80B887AC(EnKaizoku* this, PlayState* play) {
+ s16 temp_v0;
+ s16 var_a2;
+
+ if (!func_80B85858(this, play) && !func_80B85A00(this, play, false)) {
+ temp_v0 = this->picto.actor.yawTowardsPlayer - this->picto.actor.shape.rot.y;
+ if (temp_v0 > 0) {
+ var_a2 = (s16)(temp_v0 * 0.25f) + 0x7D0;
+ } else {
+ var_a2 = (s16)(temp_v0 * 0.25f) - 0x7D0;
+ }
+ this->picto.actor.shape.rot.y += var_a2;
+ this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y;
+ this->skelAnime.playSpeed = 1.0f;
+
+ if (Actor_IsFacingPlayer(&this->picto.actor, 0x1388)) {
+ if (Rand_ZeroOne() > 0.8f) {
+ func_80B88CD8(this);
+ } else {
+ func_80B8833C(this);
+ }
+ }
+ if (!(play->gameplayFrames & 0x5F)) {
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_BREATH);
+ }
+ }
+}
+
+void func_80B88910(EnKaizoku* this) {
+ EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_10);
+ this->swordCollider.base.atFlags &= ~(AT_BOUNCED | AT_HIT);
+ this->unk_2D0 = 0;
+ this->action = KAIZOKU_ACTION_11;
+ this->actionFunc = func_80B88964;
+ this->picto.actor.speed = 0.0f;
+}
+
+void func_80B88964(EnKaizoku* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+ f32 curFrame = this->skelAnime.curFrame;
+ s16 v1;
+ s16 a0;
+ s32 pad;
+
+ if (this->unk_2D0 < 2) {
+ if (this->swordCollider.base.atFlags & AT_BOUNCED) {
+ this->swordCollider.base.atFlags &= ~(AT_BOUNCED | AT_HIT);
+ this->unk_2D0 = 1;
+ this->skelAnime.playSpeed = 1.0f;
+ }
+ }
+
+ if (this->skelAnime.curFrame <= 8.0f) {
+ this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer;
+ } else {
+ if (Animation_OnFrame(&this->skelAnime, 13.0f)) {
+ Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->leftFootPos, 3.0f, 2, 2.0f, 0, 0, 0);
+ Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->rightFootPos, 3.0f, 2, 2.0f, 0, 0, 0);
+ this->swordState = 1;
+ this->picto.actor.speed = 10.0f;
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_ATTACK);
+ } else if (Animation_OnFrame(&this->skelAnime, 21.0f)) {
+ this->picto.actor.speed = 0.0f;
+ } else if (Animation_OnFrame(&this->skelAnime, 24.0f)) {
+ this->swordState = -1;
+ }
+ }
+
+ this->unk_2D8 = 0;
+ 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;
+ this->lookTimer = 46;
+ return;
+ }
+
+ if (this->unk_2D0 != 0) {
+ func_80B87E28(this);
+ return;
+ }
+
+ if ((Rand_ZeroOne() > 0.7f) || (this->picto.actor.xzDistToPlayer >= 120.0f)) {
+ func_80B872A4(this);
+ this->unk_2B2 = Rand_ZeroOne() * 5.0f + 5.0f;
+ return;
+ }
+
+ this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer;
+ if (BREG(12) * 0.1f + 0.01f * 40.0f < Rand_ZeroOne()) {
+ func_80B87900(this);
+ return;
+ }
+
+ v1 = ABS_ALT(player->actor.shape.rot.y - this->picto.actor.shape.rot.y);
+ if (v1 <= 0x2710) {
+
+ a0 = ABS_ALT(this->picto.actor.yawTowardsPlayer - this->picto.actor.shape.rot.y);
+ if (a0 > 0x4000) {
+ this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer;
+ func_80B88CD8(this);
+ } else {
+ func_80B85A00(this, play, true);
+ }
+ } else {
+ func_80B88CD8(this);
+ }
+ }
+}
+
+void func_80B88CD8(EnKaizoku* this) {
+ EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_3);
+ this->picto.actor.speed = randPlusMinusPoint5Scaled(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;
+ this->action = KAIZOKU_ACTION_3;
+ this->actionFunc = func_80B88D6C;
+ this->unk_2E0 = 0.0f;
+}
+
+void func_80B88D6C(EnKaizoku* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+ s16 sp2A;
+ s32 temp_ft4;
+ s32 temp_ft5;
+ s16 yaw;
+
+ Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 1, 0xFA0, 1);
+ if (!func_80B85858(this, play) && !func_80B85A00(this, play, false)) {
+ this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y + 0x4000;
+ sp2A = player->actor.shape.rot.y + 0x8000;
+ if (Math_SinS(sp2A - this->picto.actor.shape.rot.y) >= 0.0f) {
+ this->picto.actor.speed -= 0.25f;
+ if (this->picto.actor.speed < -8.0f) {
+ this->picto.actor.speed = -8.0f;
+ }
+ } else if (Math_SinS((sp2A - this->picto.actor.shape.rot.y)) < 0.0f) {
+ this->picto.actor.speed += 0.25f;
+ if (this->picto.actor.speed > 8.0f) {
+ this->picto.actor.speed = 8.0f;
+ }
+ }
+
+ if ((this->picto.actor.bgCheckFlags & BGCHECKFLAG_WALL) ||
+ !Actor_TestFloorInDirection(&this->picto.actor, play, this->picto.actor.speed,
+ this->picto.actor.shape.rot.y + 0x4000)) {
+
+ if (this->picto.actor.bgCheckFlags & BGCHECKFLAG_WALL) {
+ if (this->picto.actor.speed >= 0.0f) {
+ yaw = this->picto.actor.shape.rot.y + 0x4000;
+ } else {
+ yaw = this->picto.actor.shape.rot.y - 0x4000;
+ }
+ yaw = this->picto.actor.wallYaw - yaw;
+ } else {
+ this->picto.actor.speed *= -0.8f;
+ yaw = 0;
+ }
+
+ if (ABS_ALT(yaw) > 0x4000) {
+ this->picto.actor.speed *= -0.8f;
+ if (this->picto.actor.speed < 0.0f) {
+ this->picto.actor.speed -= 0.5f;
+ } else {
+ this->picto.actor.speed += 0.5f;
+ }
+ }
+ }
+
+ if (this->picto.actor.xzDistToPlayer <= 65.0f) {
+ Math_ApproachF(&this->unk_2E0, -4.0f, 1.0f, 1.5f);
+ } else if (this->picto.actor.xzDistToPlayer > 40.0f) {
+ Math_ApproachF(&this->unk_2E0, 4.0f, 1.0f, 1.5f);
+ } else {
+ Math_ApproachZeroF(&this->unk_2E0, 1.0f, 6.65f);
+ }
+
+ if (this->unk_2E0 != 0.0f) {
+ this->picto.actor.world.pos.x += Math_SinS(this->picto.actor.shape.rot.y) * this->unk_2E0;
+ this->picto.actor.world.pos.z += Math_CosS(this->picto.actor.shape.rot.y) * this->unk_2E0;
+ }
+
+ 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))) {
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_GERUDOFT_WALK);
+ }
+ }
+
+ if (!(play->gameplayFrames & 0x5F)) {
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_BREATH);
+ }
+
+ if (this->picto.actor.xzDistToPlayer <= 65.0f) {
+ func_80B87F70(this);
+ } else if (this->unk_2B2 == 0) {
+ if (Actor_OtherIsTargeted(play, &this->picto.actor) && (Rand_ZeroOne() > 0.5f)) {
+ func_80B87E28(this);
+ } else {
+ func_80B872A4(this);
+ }
+ }
+ }
+}
+
+// EnKaizoku_SetupStunned
+void func_80B891B8(EnKaizoku* this) {
+ if (this->picto.actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ this->picto.actor.speed = 0.0f;
+ }
+
+ if (this->action == KAIZOKU_ACTION_11) {
+ EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_5);
+ }
+
+ if (((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) ||
+ (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) &&
+ (this->unk_2B8 == 0)) {
+ this->unk_2B8 = 0;
+ this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
+ }
+
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_COMMON_FREEZE);
+ this->unk_2D8 = 1;
+
+ if ((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_SFX) &&
+ (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) {
+ this->unk_2B6 = 40;
+ }
+
+ this->action = KAIZOKU_ACTION_13;
+ this->actionFunc = func_80B89280;
+}
+
+// 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) {
+ this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
+ }
+ }
+
+ if (this->picto.actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
+ this->picto.actor.speed = 0.0f;
+ }
+
+ if (this->picto.actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ if (this->picto.actor.speed < 0.0f) {
+ this->picto.actor.speed += 0.05f;
+ }
+ }
+
+ if ((this->unk_2B6 == 0) && (this->unk_2B8 == 0) && !CHECK_FLAG_ALL(this->picto.actor.flags, ACTOR_FLAG_2000) &&
+ (this->picto.actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ 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) {
+ Actor_SpawnIceEffects(play, &this->picto.actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), 2,
+ 0.7f, 0.4f);
+ this->unk_2B8 = 0;
+ this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
+ this->picto.actor.flags |= ACTOR_FLAG_400;
+ }
+ }
+}
+
+void func_80B893CC(EnKaizoku* this, PlayState* play) {
+ Vec3f sp34;
+
+ Matrix_RotateYS(this->picto.actor.yawTowardsPlayer, MTXMODE_NEW);
+ Matrix_MultVecZ(-10.0f, &sp34);
+ Math_Vec3f_Copy(&this->unk_3C4, &sp34);
+ this->lookTimer = 0;
+ this->unk_2D8 = 0;
+ this->picto.actor.speed = 0.0f;
+ EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_5);
+
+ if (((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) ||
+ (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) &&
+ (this->unk_2B8 != 0)) {
+ Actor_SpawnIceEffects(play, &this->picto.actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), 2, 0.7f,
+ 0.4f);
+ this->unk_2B8 = 0;
+ this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
+ this->picto.actor.flags |= ACTOR_FLAG_400;
+ }
+
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_DAMAGE);
+ this->action = KAIZOKU_ACTION_14;
+ this->actionFunc = func_80B894C0;
+}
+
+void func_80B894C0(EnKaizoku* this, PlayState* play) {
+ s16 temp_v0;
+
+ Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 1, 4500, 0);
+ if (!func_80B85858(this, play) && !func_80B85A00(this, play, false) && (this->unk_3C4.x < 1.0f) &&
+ (this->unk_3C4.z < 1.0f)) {
+ temp_v0 = this->picto.actor.wallYaw - this->picto.actor.shape.rot.y;
+ if (this->picto.actor.bgCheckFlags & BGCHECKFLAG_WALL) {
+ if (ABS_ALT(temp_v0) < 0x3000 && (this->picto.actor.xzDistToPlayer < 90.0f)) {
+ func_80B87C7C(this);
+ return;
+ }
+ }
+
+ if (this->picto.actor.xzDistToPlayer <= 65.0f && ((play->gameplayFrames % 8) != 0)) {
+ this->swordCollider.info.elemType = ELEMTYPE_UNK2;
+ func_80B87F70(this);
+ } else {
+ func_80B87E28(this);
+ }
+ }
+}
+
+void func_80B8960C(EnKaizoku* this, PlayState* play) {
+ Vec3f sp24;
+
+ this->picto.actor.flags |= ACTOR_FLAG_100000;
+ Matrix_RotateYS(this->picto.actor.yawTowardsPlayer, MTXMODE_NEW);
+ Matrix_MultVecZ(-10.0f, &sp24);
+ Math_Vec3f_Copy(&this->unk_3C4, &sp24);
+ EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_16);
+
+ if (((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) ||
+ (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) &&
+ (this->unk_2B8 == 0)) {
+ this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
+ }
+ this->picto.actor.speed = 0.0f;
+ this->unk_2D8 = 1;
+ func_800B7298(play, &this->picto.actor, 0x7B);
+ Enemy_StartFinishingBlow(play, &this->picto.actor);
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_DEAD);
+ this->picto.actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
+ this->picto.actor.flags &= ~ACTOR_FLAG_1;
+ this->picto.actor.flags &= ~ACTOR_FLAG_400;
+ this->unk_598 = 0;
+ this->unk_59C = 0;
+ this->action = KAIZOKU_ACTION_15;
+ this->actionFunc = func_80B8971C;
+}
+
+void func_80B8971C(EnKaizoku* this, PlayState* play) {
+ f32 curFrame = this->skelAnime.curFrame;
+ Player* player;
+
+ if (this->picto.actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
+ this->picto.actor.speed = 0.0f;
+ }
+
+ if (this->picto.actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ Math_SmoothStepToF(&this->picto.actor.speed, 0.0f, 1.0f, 0.5f, 0.0f);
+ }
+
+ if ((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) ||
+ (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) {
+ if (this->unk_2B8 == 0) {
+ return;
+ }
+ Actor_SpawnIceEffects(play, &this->picto.actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), 2, 0.7f,
+ 0.4f);
+ this->unk_2B8 = 0;
+ this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
+ }
+
+ if (curFrame >= 25.0f) {
+ player = GET_PLAYER(play);
+ if (this->subCamId == 0) {
+ if (!CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_Queue(this->csId);
+ return;
+ }
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->picto.actor);
+ this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId);
+ }
+
+ Math_Vec3f_Copy(&this->unk_3C4, &gZeroVec3f);
+ player->actor.world.pos.x = this->picto.actor.home.pos.x + 90.0f;
+ player->actor.world.pos.z = this->picto.actor.home.pos.z + 30.0f;
+ this->picto.actor.world.pos.x = this->picto.actor.home.pos.x;
+ this->picto.actor.world.pos.z = this->picto.actor.home.pos.z;
+
+ this->subCamEye.x = this->unk_5C8.x = player->actor.world.pos.x + 39.0f;
+ this->subCamEye.y = this->unk_5C8.y = player->actor.world.pos.y + 4.0f;
+ this->subCamEye.z = this->unk_5C8.z = player->actor.world.pos.z - 41.0f;
+
+ this->subCamAt.x = this->unk_5D4.x = player->actor.world.pos.x - 150.0f;
+ this->subCamAt.y = this->unk_5D4.y = player->actor.world.pos.y + 60.0f;
+ this->subCamAt.z = this->unk_5D4.z = player->actor.world.pos.z + 50.0f;
+
+ 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) {
+ this->subCamUp.x = 0.0f;
+ this->subCamUp.y = 1.0f;
+ this->subCamUp.z = 0.0f;
+ Play_SetCameraAtEyeUp(play, this->subCamId, &this->subCamAt, &this->subCamEye, &this->subCamUp);
+ }
+ }
+
+ Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 1, 0xFA0, 1);
+ SkelAnime_Update(&this->skelAnime);
+ if (this->frameCount <= curFrame) {
+ this->unk_2D8 = 0;
+ func_80B86B58(this);
+ } else if (Animation_OnFrame(&this->skelAnime, 10.0f)) {
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_GERUDOFT_DOWN);
+ }
+}
+
+void func_80B89A08(EnKaizoku* this, PlayState* play) {
+ s32 sp64 = 0;
+ Vec3f sp58;
+ s32 i;
+
+ if (gSaveContext.save.saveInfo.playerData.health <= 0x10) {
+ this->swordCollider.info.toucher.damage = 0;
+ } else {
+ this->swordCollider.info.toucher.damage = 4;
+ }
+
+ 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->picto.actor.flags |= ACTOR_FLAG_100000;
+
+ if (!CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_Queue(this->csId);
+ this->actionFunc = func_80B86804;
+ } else {
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->picto.actor);
+ this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId);
+ this->actionFunc = func_80B86804;
+ }
+ return;
+ } else if ((this->action == KAIZOKU_ACTION_11) && (this->swordCollider.base.at == &GET_PLAYER(play)->actor)) {
+ func_800B8D98(play, &this->picto.actor, 3.0f, this->picto.actor.yawTowardsPlayer, 1.0f);
+ Health_ChangeBy(play, -0xC);
+ if ((gSaveContext.save.saveInfo.playerData.health <= 0x10) && (this->action != KAIZOKU_ACTION_16)) {
+ Health_ChangeBy(play, 0x10);
+ this->unk_2D0 = 2;
+ this->subCamId = 0;
+ this->picto.actor.flags |= ACTOR_FLAG_100000;
+
+ if (!CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_Queue(this->csId);
+ this->actionFunc = func_80B86804;
+ } else {
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->picto.actor);
+ this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId);
+ this->actionFunc = func_80B86804;
+ }
+ return;
+ }
+ }
+
+ if (this->swordCollider.base.at->id == ACTOR_OBJ_TARU) {
+ this->swordCollider.base.at->home.rot.z = 1;
+ }
+ }
+
+ if ((this->picto.actor.bgCheckFlags & BGCHECKFLAG_WALL) && (this->picto.actor.wallBgId != BG_ACTOR_MAX) &&
+ ((this->action == KAIZOKU_ACTION_2) || (this->action == KAIZOKU_ACTION_3) ||
+ (this->action == KAIZOKU_ACTION_4) || (this->action == KAIZOKU_ACTION_1))) {
+ func_80B87F70(this);
+ }
+
+ if ((this->bodyCollider.base.acFlags & AC_HIT) && (this->action > KAIZOKU_ACTION_0) && (this->unk_2D0 < 2) &&
+ (this->action != KAIZOKU_ACTION_6) && (this->action != KAIZOKU_ACTION_12) &&
+ (this->action != KAIZOKU_ACTION_14) && (this->action != KAIZOKU_ACTION_15)) {
+ Actor_SetDropFlag(&this->picto.actor, &this->bodyCollider.info);
+ AudioSfx_StopByPosAndId(&this->picto.actor.projectedPos, NA_SE_EN_PIRATE_BREATH);
+
+ switch (this->picto.actor.colChkInfo.damageEffect) {
+ case KAIZOKU_DMGEFF_5:
+ if (((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_SFX) &&
+ (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) ||
+ (this->unk_2B8 == 0)) {
+ this->unk_2B8 = 40;
+ this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_MEDIUM;
+ }
+ /* fallthrough */
+ case KAIZOKU_DMGEFF_1:
+ if (((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_SFX) &&
+ (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) ||
+ this->unk_2B8 == 0) {
+ Actor_SetColorFilter(&this->picto.actor, COLORFILTER_COLORFLAG_BLUE, 120, COLORFILTER_BUFFLAG_OPA,
+ 40);
+ this->bodyCollider.info.elemType = ELEMTYPE_UNK1;
+ this->bodyCollider.base.colType = COLTYPE_HIT3;
+ this->swordCollider.info.elemType = ELEMTYPE_UNK2;
+ func_80B891B8(this);
+ }
+ break;
+
+ case KAIZOKU_DMGEFF_F:
+ if ((this->action != KAIZOKU_ACTION_5) && (this->action != KAIZOKU_ACTION_7) &&
+ (this->action < KAIZOKU_ACTION_14)) {
+ sp64 = 1;
+ }
+ break;
+
+ case KAIZOKU_DMGEFF_E:
+ sp64 = 1;
+ break;
+
+ case KAIZOKU_DMGEFF_D:
+ if (this->action == KAIZOKU_ACTION_13) {
+ sp64 = 1;
+ } else if (this->action != KAIZOKU_ACTION_6) {
+ func_80B87C7C(this);
+ }
+ break;
+
+ case KAIZOKU_DMGEFF_2:
+ if ((this->action != KAIZOKU_ACTION_5) && (this->action != KAIZOKU_ACTION_7) &&
+ (this->action < KAIZOKU_ACTION_14)) {
+ this->unk_2B8 = 40;
+ this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
+ sp64 = 1;
+ }
+ break;
+
+ case KAIZOKU_DMGEFF_FREEZE:
+ if (((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_SFX) &&
+ (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) ||
+ (this->unk_2B8 == 0)) {
+ Actor_ApplyDamage(&this->picto.actor);
+ this->bodyCollider.info.elemType = ELEMTYPE_UNK1;
+ this->bodyCollider.base.colType = COLTYPE_HIT3;
+ this->swordCollider.info.elemType = ELEMTYPE_UNK4;
+ this->unk_2B8 = 80;
+ this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_SFX;
+ this->drawDmgEffScale = 0.0f;
+ this->drawDmgEffFrozenSteamScale = 1.5f;
+ this->picto.actor.flags &= ~ACTOR_FLAG_400;
+ if (this->picto.actor.colChkInfo.health <= 0) {
+ func_80B8960C(this, play);
+ } else {
+ func_80B891B8(this);
+ }
+ }
+ break;
+
+ case KAIZOKU_DMGEFF_4:
+ if (((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_SFX) &&
+ (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) ||
+ (this->unk_2B8 == 0)) {
+ this->unk_2B8 = 20;
+ this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->picto.actor.focus.pos.x,
+ this->picto.actor.focus.pos.y, this->picto.actor.focus.pos.z, 0, 0, 0,
+ CLEAR_TAG_LARGE_LIGHT_RAYS);
+ sp64 = 1;
+ }
+ break;
+ }
+
+ if (sp64) {
+ Actor_SetColorFilter(&this->picto.actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
+ Actor_ApplyDamage(&this->picto.actor);
+ if (this->picto.actor.colChkInfo.health <= 0) {
+ func_80B8960C(this, play);
+ return;
+ }
+
+ this->bodyCollider.info.elemType = ELEMTYPE_UNK1;
+ this->bodyCollider.base.colType = COLTYPE_HIT3;
+ this->swordCollider.info.elemType = ELEMTYPE_UNK4;
+ Math_Vec3f_Copy(&sp58, &this->picto.actor.focus.pos);
+ for (i = 0; i < 3; i++) {
+ sp58.y += Rand_ZeroFloat(20.0f);
+ CollisionCheck_BlueBlood(play, NULL, &sp58);
+ }
+
+ func_80B893CC(this, play);
+ }
+ } else if (this->bodyCollider.base.acFlags & AC_HIT) {
+ if ((this->action != KAIZOKU_ACTION_6) && (this->action != KAIZOKU_ACTION_14) &&
+ (this->action != KAIZOKU_ACTION_15)) {
+ Vec3f pos;
+ Player* player = GET_PLAYER(play);
+
+ pos.x = this->bodyCollider.info.bumper.hitPos.x;
+ pos.y = this->bodyCollider.info.bumper.hitPos.y;
+ 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;
+ }
+
+ this->bodyCollider.base.acFlags &= ~AC_HIT;
+ Actor_PlaySfx(&this->picto.actor, NA_SE_IT_SHIELD_BOUND);
+ EffectSsHitmark_SpawnFixedScale(play, 3, &pos);
+ CollisionCheck_SpawnShieldParticlesMetal(play, &pos);
+ }
+ }
+}
+
+static Vec3f sFootOffset = { 300.0f, 0.0f, 0.0f };
+
+static Vec3f sSwordTipOffset = { 0.0f, -3000.0f, 0.0f };
+static Vec3f sSwordHiltOffset = { 400.0f, 0.0f, 0.0f };
+
+static Vec3f sSwordQuadOffset1 = { 1600.0f, -4000.0f, 0.0f };
+static Vec3f sSwordQuadOffset0 = { -3000.0f, -2000.0f, 1300.0f };
+static Vec3f sSwordQuadOffset3 = { -3000.0f, -2000.0f, -1300.0f };
+static Vec3f sSwordQuadOffset2 = { 1000.0f, 1000.0f, 0.0f };
+
+static TexturePtr sEyeTextures[] = {
+ gKaizokuEyeOpenTex,
+ gKaizokuEyeHalfTex,
+ gKaizokuEyeClosedTex,
+ gKaizokuEyeHalfTex,
+};
+
+void EnKaizoku_Update(Actor* thisx, PlayState* play2) {
+ EnKaizoku* this = THIS;
+ PlayState* play = play2;
+ Vec3f sp34;
+ s32 pad;
+
+ if (this->unk_2D8 == 0) {
+ SkelAnime_Update(&this->skelAnime);
+ }
+
+ if (this->action != KAIZOKU_ACTION_0) {
+ func_80B85900(this);
+ }
+
+ if (this->blinkTimer != 0) {
+ this->blinkTimer--;
+ }
+ if (this->unk_2B2 != 0) {
+ this->unk_2B2--;
+ }
+ if (this->lookTimer != 0) {
+ this->lookTimer--;
+ }
+ if (this->unk_2B6 != 0) {
+ this->unk_2B6--;
+ }
+ if (this->unk_598 != 0) {
+ this->unk_598--;
+ }
+ if (this->unk_2B8 != 0) {
+ this->unk_2B8--;
+ }
+
+ this->actionFunc(this, play);
+ Actor_MoveWithGravity(&this->picto.actor);
+ if (this->action != KAIZOKU_ACTION_0) {
+ func_80B89A08(this, play);
+ }
+ if (this->action != KAIZOKU_ACTION_0) {
+ Actor_SetFocus(&this->picto.actor, 60.0f);
+ }
+
+ Actor_SetScale(&this->picto.actor, 0.0125f);
+ if (this->blinkTimer == 0) {
+ this->eyeIndex++;
+ if (this->eyeIndex >= ARRAY_COUNT(sEyeTextures)) {
+ this->eyeIndex = 0;
+ this->blinkTimer = Rand_S16Offset(20, 60);
+ }
+ }
+
+ if (this->picto.actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ Matrix_RotateYS(this->picto.actor.shape.rot.y + this->unk_2F4, 0);
+ Matrix_MultVecZ(this->unk_2F0, &sp34);
+ this->picto.actor.world.pos.x += this->unk_3C4.x + sp34.x;
+ this->picto.actor.world.pos.z += this->unk_3C4.z + sp34.z;
+ Math_ApproachZeroF(&this->unk_3C4.x, 1.0f, 2.0f);
+ Math_ApproachZeroF(&this->unk_3C4.z, 1.0f, 2.0f);
+ Math_ApproachZeroF(&this->unk_2F0, 1.0f, 5.0f);
+ }
+
+ Actor_UpdateBgCheckInfo(play, &this->picto.actor, 35.0f, 40.0f, 35.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 |
+ UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10);
+ Collider_UpdateCylinder(&this->picto.actor, &this->bodyCollider);
+ CollisionCheck_SetOC(play, &play->colChkCtx, &this->bodyCollider.base);
+ if ((this->unk_2D0 < 2) && (this->action != KAIZOKU_ACTION_0)) {
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->bodyCollider.base);
+ }
+ if (this->swordState > 0) {
+ CollisionCheck_SetAT(play, &play->colChkCtx, &this->swordCollider.base);
+ }
+}
+
+s32 EnKaizoku_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
+ EnKaizoku* this = THIS;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ if (limbIndex == KAIZOKU_LIMB_05) {
+ *dList = NULL;
+ }
+
+ if (limbIndex == KAIZOKU_LIMB_03) {
+ rot->z += this->headRot.x;
+ rot->x += this->headRot.y;
+ rot->y += this->headRot.z;
+ } else if (limbIndex == KAIZOKU_LIMB_06) {
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetEnvColor(POLY_OPA_DISP++, D_80B8AB24[this->unk_2EC].r, D_80B8AB24[this->unk_2EC].g,
+ D_80B8AB24[this->unk_2EC].b, 255);
+ } else {
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetEnvColor(POLY_OPA_DISP++, D_80B8AB30[this->unk_2EC].r, D_80B8AB30[this->unk_2EC].g,
+ D_80B8AB30[this->unk_2EC].b, 255);
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+
+ return false;
+}
+
+void EnKaizoku_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
+ Vec3f swordTip;
+ Vec3f swordHilt;
+ EnKaizoku* this = THIS;
+
+ if (limbIndex == KAIZOKU_LIMB_R_SWORD) {
+ Matrix_MultVec3f(&sSwordQuadOffset1, &this->swordCollider.dim.quad[1]);
+ Matrix_MultVec3f(&sSwordQuadOffset0, &this->swordCollider.dim.quad[0]);
+ Matrix_MultVec3f(&sSwordQuadOffset3, &this->swordCollider.dim.quad[3]);
+ Matrix_MultVec3f(&sSwordQuadOffset2, &this->swordCollider.dim.quad[2]);
+ Collider_SetQuadVertices(&this->swordCollider, &this->swordCollider.dim.quad[0],
+ &this->swordCollider.dim.quad[1], &this->swordCollider.dim.quad[2],
+ &this->swordCollider.dim.quad[3]);
+ Matrix_MultVec3f(&sSwordTipOffset, &swordTip);
+ Matrix_MultVec3f(&sSwordHiltOffset, &swordHilt);
+
+ if ((this->swordState == 1) && ((this->action == KAIZOKU_ACTION_9) || (this->action == KAIZOKU_ACTION_11))) {
+ EffectBlure_AddVertex(Effect_GetByIndex(this->blureIndex), &swordTip, &swordHilt);
+ } else if (this->swordState != 0) {
+ EffectBlure_AddSpace(Effect_GetByIndex(this->blureIndex));
+ this->swordState = 0;
+ }
+ } else {
+ Actor_SetFeetPos(&this->picto.actor, limbIndex, KAIZOKU_LIMB_L_FOOT, &sFootOffset, KAIZOKU_LIMB_R_FOOT,
+ &sFootOffset);
+ }
+
+ if (limbIndex == KAIZOKU_LIMB_L_FOOT) {
+ Matrix_MultVec3f(&sFootOffset, &this->leftFootPos);
+ } else if (limbIndex == KAIZOKU_LIMB_R_FOOT) {
+ 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) {
+ Matrix_MultZero(&this->bodyPartsPos[this->bodyPartsPosIndex]);
+
+ this->bodyPartsPosIndex++;
+ if (this->bodyPartsPosIndex >= ARRAY_COUNT(this->bodyPartsPos)) {
+ this->bodyPartsPosIndex = 0;
+ }
+ }
+}
+
+void EnKaizoku_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
+ EnKaizoku* this = THIS;
+
+ if (limbIndex == KAIZOKU_LIMB_R_SWORD) {
+ Matrix_Scale(this->unk_2F8.x, this->unk_2F8.y, this->unk_2F8.z, MTXMODE_APPLY);
+ }
+ if (limbIndex == KAIZOKU_LIMB_10) {
+ Matrix_Scale(this->unk_304.x, this->unk_304.y, this->unk_304.z, MTXMODE_APPLY);
+ }
+}
+
+void EnKaizoku_Draw(Actor* thisx, PlayState* play) {
+ f32 pad[4];
+ f32 drawDmgEffAlpha;
+ EnKaizoku* this = THIS;
+
+ func_8012C2DC(play->state.gfxCtx);
+ func_8012C28C(play->state.gfxCtx);
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->eyeIndex]));
+ SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
+ this->skelAnime.dListCount, EnKaizoku_OverrideLimbDraw, EnKaizoku_PostLimbDraw,
+ EnKaizoku_TransformLimbDraw, &this->picto.actor);
+
+ if (this->unk_2B8 != 0) {
+ drawDmgEffAlpha = this->unk_2B8 * 0.05f;
+
+ if ((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) ||
+ (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) {
+ this->drawDmgEffScale += 0.3f;
+ if (this->drawDmgEffScale > 0.5f) {
+ this->drawDmgEffScale = 0.5f;
+ }
+ Math_ApproachF(&this->drawDmgEffFrozenSteamScale, this->drawDmgEffScale, 0.1f, 0.04f);
+ } else {
+ this->drawDmgEffScale = 0.8f;
+ this->drawDmgEffFrozenSteamScale = 0.8f;
+ }
+
+ Actor_DrawDamageEffects(play, &this->picto.actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos),
+ this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, drawDmgEffAlpha,
+ this->drawDmgEffType);
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
diff --git a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h
index 8ef208926..6366c4f7f 100644
--- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h
+++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h
@@ -2,21 +2,98 @@
#define Z_EN_KAIZOKU_H
#include "global.h"
+#include "z64snap.h"
+#include "objects/object_kz/object_kz.h"
+
+#define KAIZOKU_GET_EXIT_INDEX(thisx) ((thisx)->params & 0x3F)
+#define KAIZOKU_GET_SWITCHFLAG(thisx) (((thisx)->params >> 6) & 0x7F)
struct EnKaizoku;
typedef void (*EnKaizokuActionFunc)(struct EnKaizoku*, PlayState*);
+typedef enum EnKaizokuAnimation {
+ /* 0 */ EN_KAIZOKU_ANIM_0,
+ /* 1 */ EN_KAIZOKU_ANIM_1,
+ /* 2 */ EN_KAIZOKU_ANIM_2,
+ /* 3 */ EN_KAIZOKU_ANIM_3,
+ /* 4 */ EN_KAIZOKU_ANIM_4,
+ /* 5 */ EN_KAIZOKU_ANIM_5,
+ /* 6 */ EN_KAIZOKU_ANIM_6,
+ /* 7 */ EN_KAIZOKU_ANIM_7,
+ /* 8 */ EN_KAIZOKU_ANIM_8,
+ /* 9 */ EN_KAIZOKU_ANIM_9,
+ /* 10 */ EN_KAIZOKU_ANIM_10,
+ /* 11 */ EN_KAIZOKU_ANIM_11,
+ /* 12 */ EN_KAIZOKU_ANIM_12,
+ /* 13 */ EN_KAIZOKU_ANIM_13,
+ /* 14 */ EN_KAIZOKU_ANIM_14,
+ /* 15 */ EN_KAIZOKU_ANIM_15,
+ /* 16 */ EN_KAIZOKU_ANIM_16,
+ /* 17 */ EN_KAIZOKU_ANIM_17,
+ /* 18 */ EN_KAIZOKU_ANIM_18,
+ /* 19 */ EN_KAIZOKU_ANIM_MAX
+} EnKaizokuAnimation;
+
typedef struct EnKaizoku {
- /* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0x168];
+ /* 0x000 */ PictoActor picto;
+ /* 0x148 */ SkelAnime skelAnime;
+ /* 0x18C */ Vec3s jointTable[KAIZOKU_LIMB_MAX];
+ /* 0x21C */ Vec3s morphTable[KAIZOKU_LIMB_MAX];
/* 0x2AC */ EnKaizokuActionFunc actionFunc;
- /* 0x2B0 */ char unk_2B0[0x40];
+ /* 0x2B0 */ s16 action;
+ /* 0x2B2 */ s16 unk_2B2;
+ /* 0x2B4 */ s16 lookTimer;
+ /* 0x2B6 */ s16 unk_2B6;
+ /* 0x2B8 */ s16 unk_2B8;
+ /* 0x2BA */ s16 drawDmgEffType;
+ /* 0x2BC */ s16 switchFlag;
+ /* 0x2BE */ s16 unk_2BE;
+ /* 0x2C0 */ f32 drawDmgEffScale;
+ /* 0x2C4 */ f32 drawDmgEffFrozenSteamScale;
+ /* 0x2C8 */ s16 unk_2C8;
+ /* 0x2CA */ s16 unk_2CA;
+ /* 0x2CC */ s16 eyeIndex;
+ /* 0x2CE */ s16 blinkTimer;
+ /* 0x2D0 */ s16 unk_2D0;
+ /* 0x2D2 */ s16 swordState;
+ /* 0x2D4 */ s16 exitIndex;
+ /* 0x2D6 */ s16 csId;
+ /* 0x2D8 */ u8 unk_2D8;
+ /* 0x2D9 */ u8 unk_2D9;
+ /* 0x2DC */ f32 frameCount;
+ /* 0x2E0 */ f32 unk_2E0;
+ /* 0x2E4 */ EnKaizokuAnimation animIndex;
+ /* 0x2E8 */ s32 bodyPartsPosIndex;
+ /* 0x2EC */ s32 unk_2EC;
/* 0x2F0 */ f32 unk_2F0;
/* 0x2F4 */ s16 unk_2F4;
- /* 0x2F6 */ char unk_2F6[0x2FA];
+ /* 0x2F8 */ Vec3f unk_2F8;
+ /* 0x304 */ Vec3f unk_304;
+ /* 0x310 */ Vec3f bodyPartsPos[15];
+ /* 0x3C4 */ Vec3f unk_3C4;
+ /* 0x3D0 */ s32 blureIndex;
+ /* 0x3D4 */ ColliderCylinder bodyCollider;
+ /* 0x420 */ ColliderQuad swordCollider;
+ /* 0x4A0 */ ColliderTris blockCollider; // Unused. Inferred from OoT
+ /* 0x4C0 */ ColliderTrisElement blockElements[2]; // Unused. Inferred from OoT
+ /* 0x578 */ Vec3s headRot;
+ /* 0x580 */ Vec3f rightFootPos;
+ /* 0x58C */ Vec3f leftFootPos;
+ /* 0x598 */ s32 unk_598;
+ /* 0x59C */ s16 unk_59C;
+ /* 0x59E */ s16 subCamId;
+ /* 0x5A0 */ s16 unk_5A0;
+ /* 0x5A2 */ s16 unk_5A2;
+ /* 0x5A4 */ Vec3f subCamEye;
+ /* 0x5B0 */ Vec3f subCamAt;
+ /* 0x5BC */ Vec3f subCamUp;
+ /* 0x5C8 */ Vec3f unk_5C8;
+ /* 0x5D4 */ Vec3f unk_5D4;
+ /* 0x5E0 */ f32 unk_5E0;
+ /* 0x5E4 */ f32 unk_5E4;
+ /* 0x5E8 */ f32 unk_5E8;
+ /* 0x5EC */ f32 unk_5EC;
} EnKaizoku; // size = 0x5F0
-extern const ActorInit En_Kaizoku_InitVars;
-
#endif // Z_EN_KAIZOKU_H
diff --git a/src/overlays/actors/ovl_En_Kakasi/overlay.cfg b/src/overlays/actors/ovl_En_Kakasi/overlay.cfg
deleted file mode 100644
index f933ca862..000000000
--- a/src/overlays/actors/ovl_En_Kakasi/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Kakasi
-z_en_kakasi.c
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 3acbece16..19fd2c19f 100644
--- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c
+++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c
@@ -67,7 +67,7 @@ static ColliderCylinderInit D_80971D80 = {
{ 20, 70, 0, { 0, 0, 0 } },
};
-const ActorInit En_Kakasi_InitVars = {
+ActorInit En_Kakasi_InitVars = {
ACTOR_EN_KAKASI,
ACTORCAT_NPC,
FLAGS,
@@ -143,7 +143,7 @@ void EnKakasi_Destroy(Actor* thisx, PlayState* play) {
void EnKakasi_Init(Actor* thisx, PlayState* play) {
EnKakasi* this = THIS;
- s32 tempCutscene;
+ s32 csId;
s32 i;
Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &D_80971D80);
@@ -169,22 +169,22 @@ void EnKakasi_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->picto.actor, 0.01f);
i = 0;
- tempCutscene = this->picto.actor.cutscene;
- while (tempCutscene != -1) {
+ csId = this->picto.actor.csId;
+ while (csId != CS_ID_NONE) {
//! FAKE:
- tempCutscene = ActorCutscene_GetAdditionalCutscene(this->actorCutscenes[i] = tempCutscene);
+ csId = CutsceneManager_GetAdditionalCsId(this->csIdList[i] = csId);
i++;
}
if (this->aboveGroundStatus != 0) {
- if (gSaveContext.save.weekEventReg[79] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_08)) {
this->aboveGroundStatus = ENKAKASI_ABOVE_GROUND_TYPE;
this->songSummonDist = 80.0f;
EnKakasi_SetupIdleUnderground(this);
} else {
Actor_SetFocus(&this->picto.actor, 60.0f);
this->picto.validationFunc = EnKakasi_ValidatePictograph;
- if (gSaveContext.save.weekEventReg[83] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_83_01)) {
EnKakasi_InitTimeSkipDialogue(this);
} else {
EnKakasi_SetupIdleStanding(this);
@@ -210,24 +210,24 @@ 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 (Animation_OnFrame(&this->skelanime, 1.0f) || Animation_OnFrame(&this->skelanime, 8.0f)) {
- Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EV_KAKASHI_SWING);
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EV_KAKASHI_SWING);
}
}
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_PlaySfxAtPos(&this->picto.actor, NA_SE_EV_KAKASHI_SWING);
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EV_KAKASHI_SWING);
}
if (Animation_OnFrame(&this->skelanime, 1.0f) || Animation_OnFrame(&this->skelanime, 9.0f) ||
Animation_OnFrame(&this->skelanime, 16.0f)) {
- Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_IT_KAKASHI_JUMP);
+ Actor_PlaySfx(&this->picto.actor, NA_SE_IT_KAKASHI_JUMP);
}
if (Animation_OnFrame(&this->skelanime, 18.0f)) {
- Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EV_KAKASHI_ROLL);
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EV_KAKASHI_ROLL);
}
}
if (this->animIndex == ENKAKASI_ANIM_SPIN_REACH_OFFER || this->animIndex == ENKAKASI_ANIM_TWIRL) {
if (Animation_OnFrame(&this->skelanime, 1.0f)) {
- Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EV_KAKASH_LONGI_ROLL);
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EV_KAKASH_LONGI_ROLL);
}
}
}
@@ -301,24 +301,24 @@ void EnKakasi_TimeSkipDialogue(EnKakasi* this, PlayState* play) {
if (gSaveContext.respawnFlag != -4 && gSaveContext.respawnFlag != -8) {
if (gSaveContext.save.time != CLOCK_TIME(6, 0) && gSaveContext.save.time != CLOCK_TIME(18, 0) &&
- !(gSaveContext.eventInf[1] & 0x80)) {
+ !CHECK_EVENTINF(EVENTINF_17)) {
if (this->picto.actor.textId == 0) {
// dialogue after skipped time 'did you feel that? went by in an instant'
this->picto.actor.textId = 0x1653;
- gSaveContext.save.weekEventReg[83] &= (u8)~1;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_83_01);
this->talkState = TEXT_STATE_5;
- player->stateFlags1 |= 0x20;
+ player->stateFlags1 |= PLAYER_STATE1_20;
this->picto.actor.flags |= ACTOR_FLAG_10000;
}
if (Actor_ProcessTalkRequest(&this->picto.actor, &play->state)) {
- player->stateFlags1 &= ~0x20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
this->unkState196 = 2;
this->picto.actor.flags &= ~ACTOR_FLAG_10000;
this->actionFunc = EnKakasi_RegularDialogue;
} else {
- func_800B8500(&this->picto.actor, play, 9999.9f, 9999.9f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->picto.actor, play, 9999.9f, 9999.9f, PLAYER_IA_MINUS1);
}
}
}
@@ -346,7 +346,7 @@ void EnKakasi_IdleStanding(EnKakasi* this, PlayState* play) {
EnKakasi_SetupDialogue(this);
return;
}
- if (play->actorCtx.flags & ACTORCTX_FLAG_2) {
+ 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) {
@@ -409,16 +409,16 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) {
}
if (this->unkState1A8 == 2 && this->unkState196 == 2) {
- func_800B7298(play, &this->picto.actor, 0x49);
+ func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_73);
this->unkState1A8 = 0;
}
if ((this->talkState == Message_GetState(&play->msgCtx)) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
if (this->talkState == TEXT_STATE_5) {
// bad song input
if (this->unkState196 == 2 && this->picto.actor.textId == 0x1647) {
- func_800B7298(play, &this->picto.actor, 6);
+ func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_END);
}
// after timeskip
@@ -440,23 +440,23 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) {
this->picto.actor.textId = 0x1645;
}
- func_80151938(play, this->picto.actor.textId);
+ 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) {
- func_800B7298(play, &this->picto.actor, 4);
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]);
+ func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_4);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csIdList[0]);
this->actionFunc = EnKakasi_DancingRemark;
} else {
- if (!ActorCutscene_GetCanPlayNext(this->actorCutscenes[0])) {
- ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]);
+ if (!CutsceneManager_IsNext(this->csIdList[0])) {
+ CutsceneManager_Queue(this->csIdList[0]);
this->actionFunc = EnKakasi_DancingRemark;
} else {
- ActorCutscene_StartAndSetUnkLinkFields(this->actorCutscenes[0], &this->picto.actor);
- this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene);
+ CutsceneManager_StartWithPlayerCs(this->csIdList[0], &this->picto.actor);
+ this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId);
this->actionFunc = EnKakasi_DancingRemark;
}
}
@@ -538,7 +538,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) {
}
}
}
- func_80151938(play, this->picto.actor.textId);
+ Message_ContinueTextbox(play, this->picto.actor.textId);
}
}
@@ -561,19 +561,19 @@ void EnKakasi_OcarinaRemark(EnKakasi* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
func_80152434(play, 0x35);
this->unkState1A8 = 0;
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csIdList[0]);
this->actionFunc = EnKakasi_TeachingSong;
- } else if (ActorCutscene_GetCanPlayNext(this->actorCutscenes[0]) == 0) {
- ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]);
+ } else if (!CutsceneManager_IsNext(this->csIdList[0])) {
+ CutsceneManager_Queue(this->csIdList[0]);
this->actionFunc = EnKakasi_TeachingSong;
} else {
this->unkState1A8 = 1;
- ActorCutscene_StartAndSetUnkLinkFields(this->actorCutscenes[0], &this->picto.actor);
- this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene);
+ CutsceneManager_StartWithPlayerCs(this->csIdList[0], &this->picto.actor);
+ this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId);
Math_Vec3f_Copy(&this->unk22C, &this->picto.actor.home.pos);
this->actionFunc = EnKakasi_TeachingSong;
}
@@ -586,17 +586,17 @@ void EnKakasi_TeachingSong(EnKakasi* this, PlayState* play) {
EnKakasi_CheckPlayerPosition(this, play);
Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.home.rot.y, 1, 3000, 0);
if (this->unkState1A8 == 0) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csIdList[0]);
return;
}
- if (ActorCutscene_GetCanPlayNext(this->actorCutscenes[0]) == 0) {
- ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]);
+ if (!CutsceneManager_IsNext(this->csIdList[0])) {
+ CutsceneManager_Queue(this->csIdList[0]);
return;
}
- ActorCutscene_StartAndSetUnkLinkFields(this->actorCutscenes[0], &this->picto.actor);
- this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene);
+ CutsceneManager_StartWithPlayerCs(this->csIdList[0], &this->picto.actor);
+ this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId);
Math_Vec3f_Copy(&this->unk22C, &this->picto.actor.home.pos);
this->unkState1A8 = 1;
this->unkState1A8 = 1;
@@ -619,8 +619,8 @@ void EnKakasi_TeachingSong(EnKakasi* this, PlayState* play) {
if (play->msgCtx.ocarinaMode == 4) { // song failed
this->unk190 = 0;
this->unkCounter1A4 = 0;
- ActorCutscene_Stop(this->actorCutscenes[0]);
- Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_YASE_DEAD);
+ 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;
@@ -652,7 +652,7 @@ void EnKakasi_PostSongLearnTwirl(EnKakasi* this, PlayState* play) {
}
void EnKakasi_SetupPostSongLearnDialogue(EnKakasi* this, PlayState* play) {
- ActorCutscene_Stop(this->actorCutscenes[0]);
+ CutsceneManager_Stop(this->csIdList[0]);
play->msgCtx.ocarinaMode = 4;
this->unk190 = 0;
this->unkCounter1A4 = 0;
@@ -674,8 +674,8 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) {
Math_SmoothStepToS(&player->actor.shape.rot.y, this->picto.actor.yawTowardsPlayer + 0x8000, 5, 1000, 0);
if (this->unk190 == 0) {
- func_801477B4(play);
- func_800B7298(play, &this->picto.actor, 0x56);
+ Message_CloseTextbox(play);
+ func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_86);
this->picto.actor.textId = 0x1648;
Message_StartTextbox(play, (this->picto.actor.textId), &this->picto.actor);
this->unkState1A8 = 0;
@@ -699,19 +699,19 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) {
}
if (this->unkState1A8 == 0) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csIdList[0]);
return;
}
- if (ActorCutscene_GetCanPlayNext(this->actorCutscenes[0]) == 0) {
- ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]);
+ if (!CutsceneManager_IsNext(this->csIdList[0])) {
+ CutsceneManager_Queue(this->csIdList[0]);
return;
}
Math_Vec3f_Copy(&this->unk22C, &this->picto.actor.home.pos);
- ActorCutscene_StartAndSetUnkLinkFields(this->actorCutscenes[0], &this->picto.actor);
- this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene);
- func_800B7298(play, &this->picto.actor, 0x56);
+ CutsceneManager_StartWithPlayerCs(this->csIdList[0], &this->picto.actor);
+ this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId);
+ func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_86);
this->unkState1A8 = 1;
}
@@ -735,7 +735,7 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) {
if ((this->unkState1A8 != 0) && (Message_GetState(&play->msgCtx) == this->talkState) &&
Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
if (this->talkState == TEXT_STATE_5) {
this->unk190++;
@@ -744,7 +744,7 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) {
}
if (this->picto.actor.textId == 0x1648) {
- func_800B7298(play, &this->picto.actor, 7);
+ func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_WAIT);
this->picto.actor.textId = 0x1649;
if (this->animIndex != ENKAKASI_ANIM_ARMS_CROSSED_ROCKING) {
EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_ARMS_CROSSED_ROCKING);
@@ -778,7 +778,7 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) {
this->picto.actor.textId = 0x1661;
}
}
- func_80151938(play, this->picto.actor.textId);
+ Message_ContinueTextbox(play, this->picto.actor.textId);
}
}
@@ -789,18 +789,18 @@ void EnKakasi_DancingRemark(EnKakasi* this, PlayState* play) {
u32 currentDay = gSaveContext.save.day;
this->unkState196 = 3;
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]);
- } else if (ActorCutscene_GetCanPlayNext(this->actorCutscenes[0]) == 0) {
- ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csIdList[0]);
+ } else if (!CutsceneManager_IsNext(this->csIdList[0])) {
+ CutsceneManager_Queue(this->csIdList[0]);
} else {
- ActorCutscene_StartAndSetUnkLinkFields(this->actorCutscenes[0], &this->picto.actor);
- this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene);
+ CutsceneManager_StartWithPlayerCs(this->csIdList[0], &this->picto.actor);
+ this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId);
if (currentDay == 3 && gSaveContext.save.isNight) {
EnKakasi_SetupDigAway(this);
} else {
- func_801A2BB8(NA_BGM_SARIAS_SONG);
+ Audio_PlaySubBgm(NA_BGM_SARIAS_SONG);
EnKakasi_SetupDanceNightAway(this);
}
}
@@ -813,7 +813,7 @@ void EnKakasi_SetupDanceNightAway(EnKakasi* this) {
this->subCamFovNext = 60.0f;
EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_TWIRL);
Math_Vec3f_Copy(&this->unk22C, &this->picto.actor.home.pos);
- func_8016566C(0xB4);
+ Play_EnableMotionBlur(180);
this->actionFunc = EnKakasi_DancingNightAway;
}
@@ -916,8 +916,8 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) {
this->unk190++;
this->unk204 = 0xA;
if (this->unk190 == 0xE) {
- func_800B7298(play, &this->picto.actor, 0x49);
- func_80165690();
+ func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_73);
+ Play_DisableMotionBlur();
this->unk204 = 0x14;
}
}
@@ -930,19 +930,21 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) {
player = GET_PLAYER(play);
Play_SetRespawnData(&play->state, RESPAWN_MODE_DOWN, Entrance_CreateFromSpawn(0), player->unk_3CE,
- 0xBFF, &player->unk_3C0, player->unk_3CC);
+ PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B), &player->unk_3C0, player->unk_3CC);
func_80169EFC(&play->state);
- if (0) {}
+ //! FAKE
+ if (1) {}
+
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;
- gSaveContext.eventInf[2] |= 0x80;
+ SET_EVENTINF(EVENTINF_27);
} else {
gSaveContext.save.time = CLOCK_TIME(18, 0);
gSaveContext.respawnFlag = -8;
}
- gSaveContext.save.weekEventReg[83] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_83_01);
this->unk190 = 0;
this->actionFunc = EnKakasi_DoNothing;
}
@@ -1005,15 +1007,15 @@ void EnKakasi_DiggingAway(EnKakasi* this, PlayState* play) {
} else {
Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->picto.actor.world.pos,
this->picto.actor.shape.shadowScale - 20.0f, 5, 4.0f, 200, 10, 1);
- Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_AKINDONUTS_HIDE);
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_AKINDONUTS_HIDE);
}
}
Math_ApproachF(&this->picto.actor.shape.yOffset, -6000.0f, 0.5f, 200.0f);
if (fabsf(this->picto.actor.shape.yOffset + 6000.0f) < 10.0f) {
- gSaveContext.save.weekEventReg[79] |= 8;
- func_800B7298(play, &this->picto.actor, 6);
- ActorCutscene_Stop(this->actorCutscenes[0]);
+ SET_WEEKEVENTREG(WEEKEVENTREG_79_08);
+ func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_END);
+ CutsceneManager_Stop(this->csIdList[0]);
this->aboveGroundStatus = ENKAKASI_ABOVE_GROUND_TYPE;
this->songSummonDist = 80.0f;
EnKakasi_SetupIdleUnderground(this);
@@ -1023,38 +1025,36 @@ void EnKakasi_DiggingAway(EnKakasi* this, PlayState* play) {
void EnKakasi_SetupIdleUnderground(EnKakasi* this) {
this->picto.actor.shape.yOffset = -7000.0;
this->picto.actor.draw = NULL;
- this->picto.actor.flags |= ACTOR_FLAG_8000000;
+ this->picto.actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->unkState196 = 5;
this->actionFunc = EnKakasi_IdleUnderground;
}
void EnKakasi_IdleUnderground(EnKakasi* this, PlayState* play) {
- if ((gSaveContext.save.weekEventReg[79] & 8) && this->picto.actor.xzDistToPlayer < this->songSummonDist &&
+ 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_8000000;
+ this->picto.actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON;
play->msgCtx.ocarinaMode = 4;
this->actionFunc = EnKakasi_SetupRiseOutOfGround;
}
}
void EnKakasi_SetupRiseOutOfGround(EnKakasi* this, PlayState* play) {
- s32 cutsceneIndex;
+ s32 csIdIndex;
- cutsceneIndex = 0;
+ csIdIndex = 0;
if (this->aboveGroundStatus == ENKAKASI_ABOVE_GROUND_TYPE) {
- cutsceneIndex = 1;
+ csIdIndex = 1;
}
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->actorCutscenes[cutsceneIndex]);
-
- } else if (ActorCutscene_GetCanPlayNext(this->actorCutscenes[cutsceneIndex]) == 0) {
- ActorCutscene_SetIntentToPlay(this->actorCutscenes[cutsceneIndex]);
-
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csIdList[csIdIndex]);
+ } else if (!CutsceneManager_IsNext(this->csIdList[csIdIndex])) {
+ CutsceneManager_Queue(this->csIdList[csIdIndex]);
} else {
- ActorCutscene_StartAndSetUnkLinkFields(this->actorCutscenes[cutsceneIndex], &this->picto.actor);
- Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_AKINDONUTS_HIDE);
+ CutsceneManager_StartWithPlayerCs(this->csIdList[csIdIndex], &this->picto.actor);
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_AKINDONUTS_HIDE);
this->picto.actor.draw = EnKakasi_Draw;
this->unkState196 = 6;
this->actionFunc = EnKakasi_RisingOutOfGround;
@@ -1071,7 +1071,7 @@ void EnKakasi_RisingOutOfGround(EnKakasi* this, PlayState* play) {
if ((play->gameplayFrames % 8) == 0) {
Actor_SpawnFloorDustRing(play, &this->picto.actor, &this->picto.actor.world.pos,
this->picto.actor.shape.shadowScale - 20.0f, 10, 8.0f, 500, 10, 1);
- Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_AKINDONUTS_HIDE);
+ Actor_PlaySfx(&this->picto.actor, NA_SE_EN_AKINDONUTS_HIDE);
}
Math_ApproachF(&this->picto.actor.shape.yOffset, 0.0f, 0.5f, 200.0f);
} else {
@@ -1100,7 +1100,7 @@ void EnKakasi_RisenDialogue(EnKakasi* this, PlayState* play) {
Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 5, 1000, 0);
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
EnKakasi_SetupIdleRisen(this);
}
}
@@ -1134,7 +1134,8 @@ void EnKakasi_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->picto.actor);
- Actor_UpdateBgCheckInfo(play, &this->picto.actor, 50.0f, 50.0f, 100.0f, 0x1C);
+ Actor_UpdateBgCheckInfo(play, &this->picto.actor, 50.0f, 50.0f, 100.0f,
+ UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10);
if (this->picto.actor.draw != NULL) {
Collider_UpdateCylinder(&this->picto.actor, &this->collider);
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
diff --git a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.h b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.h
index 59ef3272a..cff35d183 100644
--- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.h
+++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.h
@@ -21,7 +21,7 @@ typedef struct EnKakasi {
/* 0x1A4 */ s32 unkCounter1A4; // counter, counts up to F while he digs away, reused elsewhere
/* 0x1A8 */ s32 unkState1A8;
/* 0x1AC */ s16 talkState;
- /* 0x1AE */ s16 actorCutscenes[3];
+ /* 0x1AE */ s16 csIdList[3];
/* 0x1B4 */ f32 animeFrameCount;
/* 0x1B8 */ f32 unkHeight;
/* 0x1BC */ Vec3f unk1BC; // set by post limbdraw func for one limb
@@ -40,8 +40,6 @@ typedef struct EnKakasi {
/* 0x254 */ ColliderCylinder collider;
} EnKakasi; // size = 0x2A0
-extern const ActorInit En_Kakasi_InitVars;
-
#define ENKAKASI_ABOVE_GROUND_TYPE 2
#define KAKASI_GET_SUMMON_DISTANCE(thisx) (((thisx)->params >> 0x8) & 0xFF)
diff --git a/src/overlays/actors/ovl_En_Kame/overlay.cfg b/src/overlays/actors/ovl_En_Kame/overlay.cfg
deleted file mode 100644
index 8f2bff1c1..000000000
--- a/src/overlays/actors/ovl_En_Kame/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Kame
-z_en_kame.c
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 c1ea3ae46..9777c7433 100644
--- a/src/overlays/actors/ovl_En_Kame/z_en_kame.c
+++ b/src/overlays/actors/ovl_En_Kame/z_en_kame.c
@@ -41,7 +41,7 @@ void func_80AD8364(EnKame* this);
void func_80AD8388(EnKame* this, PlayState* play);
void func_80AD8D64(Actor* thisx, PlayState* play);
-const ActorInit En_Kame_InitVars = {
+ActorInit En_Kame_InitVars = {
ACTOR_EN_KAME,
ACTORCAT_ENEMY,
FLAGS,
@@ -170,7 +170,7 @@ void func_80AD6F9C(EnKame* this) {
this->collider.base.colType = COLTYPE_HIT3;
this->unk_2A2 = 80;
this->actor.flags &= ~ACTOR_FLAG_400;
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 80);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 80);
}
void func_80AD7018(EnKame* this, PlayState* play) {
@@ -185,7 +185,7 @@ void func_80AD7018(EnKame* this, PlayState* play) {
void func_80AD70A0(EnKame* this) {
Animation_MorphToPlayOnce(&this->skelAnime1, &object_tl_Anim_004210, -5.0f);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = func_80AD70EC;
}
@@ -193,11 +193,11 @@ void func_80AD70EC(EnKame* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (Animation_OnFrame(&this->skelAnime1, 10.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PAMET_VOICE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_VOICE);
this->unk_2A0 = 40;
}
- if ((Player_GetMask(play) != PLAYER_MASK_STONE) && !(player->stateFlags1 & 0x800000) &&
+ if ((Player_GetMask(play) != PLAYER_MASK_STONE) && !(player->stateFlags1 & PLAYER_STATE1_800000) &&
(this->actor.xzDistToPlayer < 240.0f)) {
func_80AD73A8(this);
} else if (SkelAnime_Update(&this->skelAnime1)) {
@@ -207,7 +207,7 @@ void func_80AD70EC(EnKame* this, PlayState* play) {
void func_80AD71B4(EnKame* this) {
Animation_MorphToLoop(&this->skelAnime1, &object_tl_Anim_00823C, -5.0f);
- this->actor.speedXZ = 0.5f;
+ this->actor.speed = 0.5f;
this->unk_29E = Animation_GetLastFrame(&object_tl_Anim_00823C) * ((s32)Rand_ZeroFloat(5.0f) + 3);
this->unk_2A4 = this->actor.shape.rot.y;
this->collider.base.acFlags |= (AC_HARD | AC_ON);
@@ -218,7 +218,7 @@ void func_80AD71B4(EnKame* this) {
void func_80AD7254(EnKame* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if ((Player_GetMask(play) != PLAYER_MASK_STONE) && !(player->stateFlags1 & 0x800000) &&
+ if ((Player_GetMask(play) != PLAYER_MASK_STONE) && !(player->stateFlags1 & PLAYER_STATE1_800000) &&
(this->actor.xzDistToPlayer < 240.0f)) {
func_80AD73A8(this);
return;
@@ -229,15 +229,15 @@ void func_80AD7254(EnKame* this, PlayState* play) {
if (this->unk_2A4 != this->actor.shape.rot.y) {
Math_ScaledStepToS(&this->actor.shape.rot.y, this->unk_2A4, 0x100);
this->actor.world.rot.y = this->actor.shape.rot.y;
- } else if (Actor_XZDistanceToPoint(&this->actor, &this->actor.home.pos) > 40.0f) {
- this->unk_2A4 = Actor_YawToPoint(&this->actor, &this->actor.home.pos) + ((s32)Rand_Next() >> 0x14);
+ } else if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > 40.0f) {
+ this->unk_2A4 = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos) + ((s32)Rand_Next() >> 0x14);
}
this->unk_29E--;
if (this->unk_29E == 0) {
func_80AD70A0(this);
} else if (Animation_OnFrame(&this->skelAnime1, 0.0f) || Animation_OnFrame(&this->skelAnime1, 15.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PAMET_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_WALK);
}
}
@@ -246,9 +246,9 @@ void func_80AD73A8(EnKame* this) {
this->unk_29E = 0;
this->unk_2AC = 1.0f;
this->unk_2A8 = 1.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->unk_2A0 == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PAMET_VOICE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_VOICE);
}
this->actionFunc = func_80AD7424;
}
@@ -257,7 +257,7 @@ void func_80AD7424(EnKame* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (SkelAnime_Update(&this->skelAnime1)) {
- if ((Player_GetMask(play) != PLAYER_MASK_STONE) && !(player->stateFlags1 & 0x800000) &&
+ if ((Player_GetMask(play) != PLAYER_MASK_STONE) && !(player->stateFlags1 & PLAYER_STATE1_800000) &&
((this->unk_29E == 0) || (this->actor.xzDistToPlayer < 120.0f))) {
func_80AD76CC(this);
} else {
@@ -278,7 +278,7 @@ void func_80AD7424(EnKame* this, PlayState* play) {
}
void func_80AD7568(EnKame* this) {
- this->actor.speedXZ = this->unk_2A6 * (5.0f / 7552);
+ this->actor.speed = this->unk_2A6 * (5.0f / 7552);
this->actor.shape.rot.z = this->unk_2A6 * 0.11016949f;
}
@@ -287,13 +287,14 @@ void func_80AD75A8(EnKame* this, PlayState* play) {
static Color_RGBA8 D_80AD8E58 = { 180, 180, 180, 255 };
static Vec3f D_80AD8E5C = { 0.0f, 0.75f, 0.0f };
- if ((this->actor.bgCheckFlags & 1) && (this->actor.speedXZ >= 3.0f)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.speed >= 3.0f)) {
if ((play->gameplayFrames % 2) == 0) {
- u32 temp_v0 = func_800C9BB8(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId);
+ SurfaceMaterial surfaceMaterial =
+ SurfaceType_GetMaterial(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId);
- if ((temp_v0 == 0) || (temp_v0 == 1)) {
+ if ((surfaceMaterial == SURFACE_MATERIAL_DIRT) || (surfaceMaterial == SURFACE_MATERIAL_SAND)) {
func_800B1210(play, &this->actor.world.pos, &D_80AD8E5C, &gZeroVec3f, 550, 100);
- } else if (temp_v0 == 14) {
+ } else if (surfaceMaterial == SURFACE_MATERIAL_SNOW) {
func_800B0DE0(play, &this->actor.world.pos, &D_80AD8E5C, &gZeroVec3f, &D_80AD8E54, &D_80AD8E58, 550,
100);
}
@@ -312,11 +313,11 @@ void func_80AD76CC(EnKame* this) {
this->unk_2AC = 0.5f;
func_80AD7568(this);
this->unk_29E = 15;
- this->actor.speedXZ = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PAMET_CUTTER_ON);
+ this->actor.speed = 0.0f;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_CUTTER_ON);
this->unk_2BC.y = this->actor.home.pos.y - 100.0f;
} else {
- this->actor.world.rot.y = Actor_YawToPoint(&this->actor, &this->actor.home.pos);
+ this->actor.world.rot.y = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
Math_Vec3f_Copy(&this->unk_2BC, &this->actor.home.pos);
this->unk_29E = 0;
}
@@ -363,12 +364,12 @@ void func_80AD7948(EnKame* this, PlayState* play) {
func_80AD75A8(this, play);
if (this->unk_29E == -1) {
- s16 temp_v0 = Actor_YawToPoint(&this->actor, &this->unk_2BC) - this->actor.world.rot.y;
+ s16 temp_v0 = Actor_WorldYawTowardPoint(&this->actor, &this->unk_2BC) - this->actor.world.rot.y;
temp_v1 = ABS_ALT(temp_v0);
- if ((this->actor.bgCheckFlags & 8) || (temp_v1 > 0x3000) ||
- (Actor_XZDistanceToPoint(&this->actor, &this->unk_2BC) < 50.0f)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) || (temp_v1 > 0x3000) ||
+ (Actor_WorldDistXZToPoint(&this->actor, &this->unk_2BC) < 50.0f)) {
s8 pad;
if (this->unk_2BC.y < this->actor.home.pos.y) {
@@ -383,7 +384,7 @@ void func_80AD7948(EnKame* this, PlayState* play) {
if (Math_ScaledStepToS(&this->unk_2A6, this->unk_29E, (s32)(this->unk_2A6 * 0.09f) + 45)) {
if (this->unk_29E == 0) {
if (this->unk_2AC >= 1.0f) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PAMET_CUTTER_OFF);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_CUTTER_OFF);
}
this->unk_2AC -= 0.1f;
this->collider.base.atFlags &= ~AT_ON;
@@ -401,7 +402,7 @@ void func_80AD7948(EnKame* this, PlayState* play) {
void func_80AD7B18(EnKame* this) {
this->actor.draw = EnKame_Draw;
Animation_MorphToPlayOnce(&this->skelAnime1, &object_tl_Anim_0031DC, -3.0f);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->unk_2AC = 0.1f;
this->unk_2A8 = 1.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
@@ -434,13 +435,13 @@ void func_80AD7C54(EnKame* this) {
}
this->actor.draw = EnKame_Draw;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->collider.base.acFlags &= ~AC_ON;
this->collider.base.atFlags &= ~AT_ON;
this->collider.base.atFlags &= ~(AT_BOUNCED | AT_HIT);
this->actor.flags &= ~ACTOR_FLAG_10;
this->actor.shape.rot.z = 0;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PAMET_REVERSE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_REVERSE);
this->actionFunc = func_80AD7D40;
}
@@ -460,7 +461,7 @@ void func_80AD7DA4(EnKame* this) {
this->collider.base.acFlags |= AC_ON;
this->collider.base.acFlags &= ~AC_HARD;
this->collider.base.colType = COLTYPE_HIT6;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = func_80AD7E0C;
}
@@ -472,7 +473,7 @@ void func_80AD7E0C(EnKame* this, PlayState* play) {
Animation_PlayOnce(&this->skelAnime1, &object_tl_Anim_0027D8);
} else {
Animation_PlayOnce(&this->skelAnime1, &object_tl_Anim_002F88);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PAMET_ROAR);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_ROAR);
}
}
} else {
@@ -482,7 +483,7 @@ void func_80AD7E0C(EnKame* this, PlayState* play) {
void func_80AD7EC0(EnKame* this) {
Animation_MorphToPlayOnce(&this->skelAnime1, &object_tl_Anim_002510, -3.0f);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PAMET_WAKEUP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_WAKEUP);
this->actionFunc = func_80AD7F10;
}
@@ -498,7 +499,7 @@ void func_80AD7F10(EnKame* this, PlayState* play) {
}
void func_80AD7FA4(EnKame* this) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->actor.velocity.y > 0.0f) {
this->actor.velocity.y = 0.0f;
}
@@ -523,11 +524,11 @@ void func_80AD7FF8(EnKame* this, PlayState* play) {
}
void func_80AD8060(EnKame* this) {
- s16 sp36 = Animation_GetLastFrame(&object_tl_Anim_0008B4);
+ s16 lastFrame = Animation_GetLastFrame(&object_tl_Anim_0008B4);
- Animation_Change(&this->skelAnime1, &object_tl_Anim_0008B4, 1.0f, 0.0f, sp36, ANIMMODE_ONCE, -3.0f);
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, sp36);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PAMET_DAMAGE);
+ Animation_Change(&this->skelAnime1, &object_tl_Anim_0008B4, 1.0f, 0.0f, lastFrame, ANIMMODE_ONCE, -3.0f);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, lastFrame);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_DAMAGE);
this->collider.base.acFlags &= ~AC_ON;
this->actionFunc = func_80AD810C;
}
@@ -540,12 +541,12 @@ void func_80AD810C(EnKame* this, PlayState* play) {
void func_80AD8148(EnKame* this, PlayState* play) {
Animation_PlayLoop(&this->skelAnime1, &object_tl_Anim_000AF4);
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 20);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 20);
this->collider.base.acFlags &= ~AC_ON;
this->collider.base.atFlags &= ~AT_ON;
this->collider.base.atFlags &= ~(AC_HARD | AC_HIT);
this->actor.velocity.y = 15.0f;
- this->actor.speedXZ = 1.5f;
+ this->actor.speed = 1.5f;
if (play != NULL) {
Enemy_StartFinishingBlow(play, &this->actor);
if (this->actor.draw == func_80AD8D64) {
@@ -554,24 +555,24 @@ void func_80AD8148(EnKame* this, PlayState* play) {
func_800BE504(&this->actor, &this->collider);
}
}
- this->actor.bgCheckFlags &= ~0x1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
this->actor.flags &= ~ACTOR_FLAG_1;
this->actor.flags |= ACTOR_FLAG_10;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PAMET_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PAMET_DEAD);
this->unk_29E = 0;
this->actionFunc = func_80AD825C;
}
void func_80AD825C(EnKame* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime1);
- if ((this->actor.bgCheckFlags & 1) && (this->actor.velocity.y < 0.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_HIPLOOP_LAND);
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.velocity.y < 0.0f)) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_HIPLOOP_LAND);
func_80AD8364(this);
} else {
if (this->unk_29E == 1) {
this->actor.colorFilterTimer = 100;
} else if (this->actor.colorFilterTimer == 0) {
- Actor_SetColorFilter(&this->actor, 0xC000, 255, 0, 100);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_NONE, 255, COLORFILTER_BUFFLAG_OPA, 100);
}
this->actor.shape.rot.x += Rand_S16Offset(0x700, 0x1400);
this->actor.shape.rot.y += (s16)Rand_ZeroFloat(5120.0f);
@@ -581,7 +582,7 @@ void func_80AD825C(EnKame* this, PlayState* play) {
void func_80AD8364(EnKame* this) {
this->unk_29E = 20;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = func_80AD8388;
}
@@ -600,7 +601,7 @@ void func_80AD8388(EnKame* this, PlayState* play) {
this->actor.scale.x -= 0.001f;
if (this->actor.scale.x <= 0.0f) {
Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0x60);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
this->actor.scale.y = this->actor.scale.x;
this->actor.scale.z = this->actor.scale.x;
@@ -643,16 +644,16 @@ void func_80AD84C0(EnKame* this, PlayState* play) {
} else if (!(this->collider.base.acFlags & AC_HARD)) {
if (this->actor.colChkInfo.damageEffect == 5) {
this->unk_2A2 = 40;
- Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
this->drawDmgEffScale = 0.6f;
this->drawDmgEffAlpha = 2.0f;
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL;
func_80AD7FA4(this);
} else if (this->actor.colChkInfo.damageEffect == 1) {
this->unk_2A2 = 40;
- Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
func_80AD7FA4(this);
} else if (this->actor.colChkInfo.damageEffect == 3) {
func_80AD6F9C(this);
@@ -706,7 +707,7 @@ void EnKame_Update(Actor* thisx, PlayState* play) {
if ((this->collider.base.atFlags & AT_HIT) && (this->collider.base.atFlags & AT_BOUNCED)) {
this->collider.base.atFlags &= ~(AT_BOUNCED | AT_HIT);
func_80AD76CC(this);
- if (Actor_XZDistanceToPoint(&this->actor, &this->unk_2BC) < 50.0f) {
+ if (Actor_WorldDistXZToPoint(&this->actor, &this->unk_2BC) < 50.0f) {
this->collider.base.atFlags &= ~AT_ON;
}
this->unk_2A6 = 0x3B00;
@@ -716,7 +717,9 @@ void EnKame_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 60.0f, 40.0f, 0x1F);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 60.0f, 40.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 |
+ UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10);
if (this->actor.shape.shadowDraw != NULL) {
Actor_SetFocus(&this->actor, 25.0f);
diff --git a/src/overlays/actors/ovl_En_Kame/z_en_kame.h b/src/overlays/actors/ovl_En_Kame/z_en_kame.h
index 6e0aa371b..b6ebc3a23 100644
--- a/src/overlays/actors/ovl_En_Kame/z_en_kame.h
+++ b/src/overlays/actors/ovl_En_Kame/z_en_kame.h
@@ -33,6 +33,4 @@ typedef struct EnKame {
/* 0x340 */ ColliderCylinder collider;
} EnKame; // size = 0x38C
-extern const ActorInit En_Kame_InitVars;
-
#endif // Z_EN_KAME_H
diff --git a/src/overlays/actors/ovl_En_Kanban/overlay.cfg b/src/overlays/actors/ovl_En_Kanban/overlay.cfg
deleted file mode 100644
index 1ae4caed5..000000000
--- a/src/overlays/actors/ovl_En_Kanban/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Kanban
-z_en_kanban.c
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 5113c1291..c4ef32e31 100644
--- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c
+++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c
@@ -17,7 +17,7 @@ void EnKanban_Destroy(Actor* thisx, PlayState* play);
void EnKanban_Update(Actor* thisx, PlayState* play);
void EnKanban_Draw(Actor* thisx, PlayState* play);
-const ActorInit En_Kanban_InitVars = {
+ActorInit En_Kanban_InitVars = {
ACTOR_EN_KANBAN,
ACTORCAT_PROP,
FLAGS,
@@ -163,7 +163,7 @@ void EnKanban_Init(Actor* thisx, PlayState* play) {
this->bounceX = 1;
this->partFlags = 0xFFFF;
- Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 50.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 50.0f, UPDBGCHECKINFO_FLAG_4);
func_80954960(this);
}
}
@@ -209,7 +209,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
Vec3f offset;
EnKanban* piece;
EnKanban* signpost;
- s32 temp_v0_18;
+ FloorType floorType;
f32 phi_f0;
s32 pad2;
@@ -277,7 +277,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
piece->partFlags = sCutFlags[this->cutType] & this->partFlags;
if (piece->partFlags == 0) {
- Actor_MarkForDeath(&piece->actor);
+ Actor_Kill(&piece->actor);
return;
}
@@ -359,10 +359,10 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
if ((hitItem->toucher.dmgFlags & 0x10) || (hitItem->toucher.dmgFlags & 8) ||
(hitItem->toucher.dmgFlags & 0x80000000)) {
piece->actor.velocity.y = Rand_ZeroFloat(3.0f) + 6.0f;
- piece->actor.speedXZ = Rand_ZeroFloat(4.0f) + 6.0f;
+ piece->actor.speed = Rand_ZeroFloat(4.0f) + 6.0f;
} else {
piece->actor.velocity.y = Rand_ZeroFloat(2.0f) + 3.0f;
- piece->actor.speedXZ = Rand_ZeroFloat(2.0f) + 3.0f;
+ piece->actor.speed = Rand_ZeroFloat(2.0f) + 3.0f;
}
if (piece->partCount >= 4) {
@@ -384,7 +384,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
piece->actor.flags &= ~ACTOR_FLAG_1;
piece->actor.flags |= ACTOR_FLAG_2000000;
this->cutMarkTimer = 5;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_SWORD_STRIKE);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_SWORD_STRIKE);
}
}
}
@@ -423,7 +423,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
f32 tempY;
f32 tempZ;
f32 tempWaterDepth;
- u16 tempBgFlags;
+ u16 bgCheckFlags;
u8 onGround;
if (this->unk_198 != 0) {
@@ -433,27 +433,28 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
Actor_MoveWithGravity(&this->actor);
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 10.0f, 50.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 10.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
tempX = this->actor.world.pos.x;
tempY = this->actor.world.pos.y;
tempZ = this->actor.world.pos.z;
- tempBgFlags = this->actor.bgCheckFlags;
+ bgCheckFlags = this->actor.bgCheckFlags;
tempWaterDepth = this->actor.depthInWater;
this->actor.world.pos.z += ((this->actor.world.pos.y - this->actor.floorHeight) * -50.0f) / 100.0f;
- Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 50.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 50.0f, UPDBGCHECKINFO_FLAG_4);
func_80954960(this);
this->actor.world.pos.x = tempX;
this->actor.world.pos.y = tempY;
this->actor.world.pos.z = tempZ;
- this->actor.bgCheckFlags = tempBgFlags;
+ this->actor.bgCheckFlags = bgCheckFlags;
this->actor.depthInWater = tempWaterDepth;
if (1) {}
- onGround = (this->actor.bgCheckFlags & 1);
+ onGround = (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND);
if (this->spinXFlag != 0) {
this->spinRot.x += this->spinVel.x;
@@ -495,16 +496,16 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
this->spinVel.z = -0xC00;
}
- if (this->actor.bgCheckFlags & 8) {
- if (!(this->actor.bgCheckFlags & 1)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_WOODPLATE_BOUND);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_WOODPLATE_BOUND);
}
- this->actor.speedXZ *= -0.5f;
+ this->actor.speed *= -0.5f;
}
- if (this->actor.bgCheckFlags & 0x40) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) {
this->actionState = ENKANBAN_WATER;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOMB_DROP_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);
@@ -516,11 +517,11 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
}
if (onGround) {
- temp_v0_18 = func_800C99D4(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId);
+ floorType = SurfaceType_GetFloorType(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId);
- if ((temp_v0_18 == 15) || (temp_v0_18 == 14)) {
+ if ((floorType == FLOOR_TYPE_15) || (floorType == FLOOR_TYPE_14)) {
this->unk_197 = 1;
- } else if (temp_v0_18 == 5) {
+ } else if (floorType == FLOOR_TYPE_5) {
this->unk_197 = -1;
}
@@ -539,12 +540,12 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
if (this->unk_197 != 0) {
if (this->unk_197 > 0) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
} else if ((this->floorRot.x > 0.1f) || (this->floorRot.z > 0.1f)) {
this->airTimer = 10;
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
this->actionState = ENKANBAN_GROUND;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
goto nextCase;
} else {
Vec3f spC8;
@@ -556,14 +557,14 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
Math_ApproachF(&this->actor.velocity.z, spC8.z, 0.5f, (KREG(21) * 0.01f) + 0.3f);
this->actor.world.rot.y = Math_Atan2S(spC8.x, spC8.z);
this->unk_198 = 1;
- this->actor.speedXZ = sqrtf(SQXZ(this->actor.velocity));
+ this->actor.speed = sqrtf(SQXZ(this->actor.velocity));
}
} else {
this->unk_198 = 0;
- Math_ApproachZeroF(&this->actor.speedXZ, 1, 0.1f);
+ Math_ApproachZeroF(&this->actor.speed, 1, 0.1f);
}
} else {
- this->actor.speedXZ *= 0.7f;
+ this->actor.speed *= 0.7f;
}
if (this->spinRot.x == 0) {
@@ -622,9 +623,9 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
if (bounced) {
if (this->unk_197 > 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_PL_WALK_SNOW);
+ Actor_PlaySfx(&this->actor, NA_SE_PL_WALK_GROUND + SURFACE_SFX_OFFSET_SNOW);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_WOODPLATE_BOUND);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_WOODPLATE_BOUND);
}
}
@@ -673,7 +674,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
signpost = (EnKanban*)this->actor.parent;
if (signpost->partFlags == 0xFFFF) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
phi_f0 = 0.0f;
@@ -687,38 +688,39 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
s16 rippleDelay;
s32 rippleScale;
- if ((player->actor.speedXZ > 0.0f) && (player->actor.world.pos.y < this->actor.world.pos.y) &&
+ if ((player->actor.speed > 0.0f) && (player->actor.world.pos.y < this->actor.world.pos.y) &&
(this->actor.xyzDistToPlayerSq < SQ(50.0f))) {
- Math_ApproachF(&this->actor.speedXZ, player->actor.speedXZ, 1.0f, 0.2f);
- if (this->actor.speedXZ > 1.0f) {
- this->actor.speedXZ = 1.0f;
+ Math_ApproachF(&this->actor.speed, player->actor.speed, 1.0f, 0.2f);
+ if (this->actor.speed > 1.0f) {
+ this->actor.speed = 1.0f;
}
if (Math_SmoothStepToS(&this->actor.world.rot.y, BINANG_ROT180(this->actor.yawTowardsPlayer), 1,
0x1000, 0) > 0) {
- this->spinVel.y = this->actor.speedXZ * 1000.0f;
+ this->spinVel.y = this->actor.speed * 1000.0f;
} else {
- this->spinVel.y = this->actor.speedXZ * -1000.0f;
+ this->spinVel.y = this->actor.speed * -1000.0f;
}
}
- if (this->actor.bgCheckFlags & 1) {
- this->actor.speedXZ = 0.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ this->actor.speed = 0.0f;
}
Actor_MoveWithGravity(&this->actor);
- if (this->actor.speedXZ != 0.0f) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 50.0f, 5);
- if (this->actor.bgCheckFlags & 8) {
- this->actor.speedXZ *= -0.5f;
+ if (this->actor.speed != 0.0f) {
+ Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
+ this->actor.speed *= -0.5f;
if (this->spinVel.y > 0) {
this->spinVel.y = -2000;
} else {
this->spinVel.y = 2000;
}
}
- Math_ApproachZeroF(&this->actor.speedXZ, 1.0f, 0.15f);
+ Math_ApproachZeroF(&this->actor.speed, 1.0f, 0.15f);
}
this->actor.shape.rot.y += this->spinVel.y;
Math_ApproachS(&this->spinVel.y, 0, 1, 0x3A);
@@ -728,9 +730,9 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
Math_ApproachZeroF(&this->floorRot.x, 0.5f, 0.2f);
Math_ApproachZeroF(&this->floorRot.z, 0.5f, 0.2f);
- if (fabsf(this->actor.speedXZ) > 1.0f) {
+ if (fabsf(this->actor.speed) > 1.0f) {
rippleDelay = 0;
- } else if (fabsf(this->actor.speedXZ) > 0.5f) {
+ } else if (fabsf(this->actor.speed) > 0.5f) {
rippleDelay = 3;
} else {
rippleDelay = 7;
@@ -756,12 +758,12 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
this->bounceX = Rand_ZeroFloat(10.0f) + 6.0f;
this->bounceZ = Rand_ZeroFloat(10.0f) + 6.0f;
this->actor.velocity.y = 2.0f + hammerStrength;
- this->actor.speedXZ = Rand_ZeroFloat(1.0f);
+ this->actor.speed = Rand_ZeroFloat(1.0f);
} else {
this->bounceX = Rand_ZeroFloat(7.0f) + 3.0f;
this->bounceZ = Rand_ZeroFloat(7.0f) + 3.0f;
this->actor.velocity.y = 3.0f + hammerStrength;
- this->actor.speedXZ = Rand_ZeroFloat(1.5f);
+ this->actor.speed = Rand_ZeroFloat(1.5f);
}
this->spinVel.y = randPlusMinusPoint5Scaled(0x1800);
@@ -801,12 +803,12 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
this->bounceX = Rand_ZeroFloat(10.0f) + 6.0f;
this->bounceZ = Rand_ZeroFloat(10.0f) + 6.0f;
this->actor.velocity.y = 2.5f + bombStrength;
- this->actor.speedXZ = 3.0f + bombStrength;
+ this->actor.speed = 3.0f + bombStrength;
} else {
this->bounceX = Rand_ZeroFloat(7.0f) + 3.0f;
this->bounceZ = Rand_ZeroFloat(7.0f) + 3.0f;
this->actor.velocity.y = 5.0f + bombStrength;
- this->actor.speedXZ = 4.0f + bombStrength;
+ this->actor.speed = 4.0f + bombStrength;
}
this->spinVel.y = randPlusMinusPoint5Scaled(0x1800);
@@ -852,7 +854,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
signpost->invincibilityTimer = 5;
if (signpost->partFlags == 0xFFFF) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
Matrix_RotateYS(signpost->actor.shape.rot.y, MTXMODE_NEW);
@@ -876,7 +878,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
(this->floorRot.z == 0.0f)) {
signpost->partFlags |= this->partFlags;
signpost->actor.flags |= ACTOR_FLAG_1;
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
break;
diff --git a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.h b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.h
index 201364bc0..e54bb3fad 100644
--- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.h
+++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.h
@@ -105,6 +105,4 @@ typedef struct EnKanban {
#define ENKANBAN_PIECE ((s16)0xFFDD)
#define ENKANBAN_FISHING 0x300
-extern const ActorInit En_Kanban_InitVars;
-
#endif // Z_EN_KANBAN_H
diff --git a/src/overlays/actors/ovl_En_Karebaba/overlay.cfg b/src/overlays/actors/ovl_En_Karebaba/overlay.cfg
deleted file mode 100644
index 004503847..000000000
--- a/src/overlays/actors/ovl_En_Karebaba/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Karebaba
-z_en_karebaba.c
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 61c1c5b3c..0c0078fd3 100644
--- a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c
+++ b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c
@@ -1,13 +1,12 @@
/*
* File: z_en_karebaba.c
* Overlay: ovl_En_Karebaba
- * Description: Wilted Deku Baba
+ * Description: Wilted Deku Baba and Mini Baba
*/
#include "z_en_karebaba.h"
#include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h"
#include "objects/gameplay_keep/gameplay_keep.h"
-#include "objects/object_dekubaba/object_dekubaba.h"
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4)
@@ -18,29 +17,28 @@ void EnKarebaba_Destroy(Actor* thisx, PlayState* play);
void EnKarebaba_Update(Actor* thisx, PlayState* play2);
void EnKarebaba_Draw(Actor* thisx, PlayState* play);
-void func_808F155C(EnKarebaba* this);
-void func_808F15B0(EnKarebaba* this, PlayState* play);
-void func_808F1648(EnKarebaba* this);
-void func_808F169C(EnKarebaba* this, PlayState* play);
-void func_808F16FC(EnKarebaba* this);
-void func_808F1778(EnKarebaba* this, PlayState* play);
-void func_808F1878(EnKarebaba* this);
-void func_808F190C(EnKarebaba* this, PlayState* play);
-void func_808F1A3C(EnKarebaba* this);
-void func_808F1A58(EnKarebaba* this, PlayState* play);
-void func_808F1BF8(EnKarebaba* this);
-void func_808F1C84(EnKarebaba* this, PlayState* play);
-void func_808F1FAC(EnKarebaba* this);
-void func_808F200C(EnKarebaba* this, PlayState* play);
-void func_808F20FC(EnKarebaba* this, PlayState* play);
-void func_808F21A4(EnKarebaba* this, PlayState* play);
-void func_808F220C(EnKarebaba* this);
-void func_808F228C(EnKarebaba* this, PlayState* play);
-void func_808F238C(EnKarebaba* this);
-void func_808F241C(EnKarebaba* this, PlayState* play);
-void func_808F254C(EnKarebaba* this, PlayState* play);
+void EnKarebaba_SetupGrow(EnKarebaba* this);
+void EnKarebaba_Grow(EnKarebaba* this, PlayState* play);
+void EnKarebaba_SetupIdle(EnKarebaba* this);
+void EnKarebaba_Idle(EnKarebaba* this, PlayState* play);
+void EnKarebaba_SetupAwaken(EnKarebaba* this);
+void EnKarebaba_Awaken(EnKarebaba* this, PlayState* play);
+void EnKarebaba_SetupUpright(EnKarebaba* this);
+void EnKarebaba_Upright(EnKarebaba* this, PlayState* play);
+void EnKarebaba_SetupSpin(EnKarebaba* this);
+void EnKarebaba_Spin(EnKarebaba* this, PlayState* play);
+void EnKarebaba_SetupDying(EnKarebaba* this);
+void EnKarebaba_Dying(EnKarebaba* this, PlayState* play);
+void EnKarebaba_SetupShrinkDie(EnKarebaba* this);
+void EnKarebaba_ShrinkDie(EnKarebaba* this, PlayState* play);
+void EnKarebaba_SetupDeadItemDrop(EnKarebaba* this, PlayState* play);
+void EnKarebaba_DeadItemDrop(EnKarebaba* this, PlayState* play);
+void EnKarebaba_SetupRetract(EnKarebaba* this);
+void EnKarebaba_Retract(EnKarebaba* this, PlayState* play);
+void EnKarebaba_SetupDead(EnKarebaba* this);
+void EnKarebaba_Dead(EnKarebaba* this, PlayState* play);
-const ActorInit En_Karebaba_InitVars = {
+ActorInit En_Karebaba_InitVars = {
ACTOR_EN_KAREBABA,
ACTORCAT_ENEMY,
FLAGS,
@@ -52,7 +50,7 @@ const ActorInit En_Karebaba_InitVars = {
(ActorFunc)EnKarebaba_Draw,
};
-static ColliderCylinderInit sCylinderInit1 = {
+static ColliderCylinderInit sHurtCylinderInit = {
{
COLTYPE_HARD,
AT_NONE,
@@ -72,7 +70,7 @@ static ColliderCylinderInit sCylinderInit1 = {
{ 7, 25, 0, { 0, 0, 0 } },
};
-static ColliderCylinderInit sCylinderInit2 = {
+static ColliderCylinderInit sAttackCylinderInit = {
{
COLTYPE_HARD,
AT_ON | AT_TYPE_ENEMY,
@@ -94,39 +92,47 @@ static ColliderCylinderInit sCylinderInit2 = {
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,
+} DekuBabaDamageEffect;
+
static DamageTable sDamageTable = {
- /* Deku Nut */ DMG_ENTRY(0, 0x0),
- /* Deku Stick */ DMG_ENTRY(3, 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(0, 0x0),
- /* Hookshot */ DMG_ENTRY(1, 0x0),
- /* Goron punch */ DMG_ENTRY(2, 0x0),
- /* Sword */ DMG_ENTRY(1, 0x0),
- /* Goron pound */ DMG_ENTRY(1, 0x0),
- /* Fire arrow */ DMG_ENTRY(1, 0x2),
- /* Ice arrow */ DMG_ENTRY(2, 0x3),
- /* Light arrow */ DMG_ENTRY(2, 0x4),
- /* Goron spikes */ DMG_ENTRY(1, 0x0),
- /* Deku spin */ DMG_ENTRY(1, 0x0),
- /* Deku bubble */ DMG_ENTRY(1, 0x0),
- /* Deku launch */ DMG_ENTRY(2, 0x0),
- /* UNK_DMG_0x12 */ DMG_ENTRY(0, 0x0),
- /* Zora barrier */ DMG_ENTRY(1, 0x5),
- /* Normal shield */ DMG_ENTRY(0, 0x0),
- /* Light ray */ DMG_ENTRY(0, 0x0),
- /* Thrown object */ DMG_ENTRY(1, 0x0),
- /* Zora punch */ DMG_ENTRY(1, 0x0),
- /* Spin attack */ DMG_ENTRY(1, 0x0),
- /* Sword beam */ DMG_ENTRY(0, 0x0),
- /* Normal Roll */ DMG_ENTRY(0, 0x0),
- /* UNK_DMG_0x1B */ DMG_ENTRY(0, 0x0),
- /* UNK_DMG_0x1C */ DMG_ENTRY(0, 0x0),
- /* Unblockable */ DMG_ENTRY(0, 0x0),
- /* UNK_DMG_0x1E */ DMG_ENTRY(0, 0x0),
- /* Powder Keg */ DMG_ENTRY(1, 0x0),
+ /* Deku Nut */ DMG_ENTRY(0, KAREBABA_DMGEFF_NONE),
+ /* Deku Stick */ DMG_ENTRY(3, KAREBABA_DMGEFF_NONE),
+ /* Horse trample */ DMG_ENTRY(1, KAREBABA_DMGEFF_NONE),
+ /* Explosives */ DMG_ENTRY(1, KAREBABA_DMGEFF_NONE),
+ /* Zora boomerang */ DMG_ENTRY(1, KAREBABA_DMGEFF_NONE),
+ /* Normal arrow */ DMG_ENTRY(1, KAREBABA_DMGEFF_NONE),
+ /* UNK_DMG_0x06 */ DMG_ENTRY(0, KAREBABA_DMGEFF_NONE),
+ /* Hookshot */ DMG_ENTRY(1, KAREBABA_DMGEFF_NONE),
+ /* Goron punch */ DMG_ENTRY(2, KAREBABA_DMGEFF_NONE),
+ /* Sword */ DMG_ENTRY(1, KAREBABA_DMGEFF_NONE),
+ /* Goron pound */ DMG_ENTRY(1, KAREBABA_DMGEFF_NONE),
+ /* Fire arrow */ DMG_ENTRY(1, KAREBABA_DMGEFF_FIRE),
+ /* Ice arrow */ DMG_ENTRY(2, KAREBABA_DMGEFF_ICE),
+ /* Light arrow */ DMG_ENTRY(2, KAREBABA_DMGEFF_LIGHT),
+ /* Goron spikes */ DMG_ENTRY(1, KAREBABA_DMGEFF_NONE),
+ /* Deku spin */ DMG_ENTRY(1, KAREBABA_DMGEFF_NONE),
+ /* Deku bubble */ DMG_ENTRY(1, KAREBABA_DMGEFF_NONE),
+ /* Deku launch */ DMG_ENTRY(2, KAREBABA_DMGEFF_NONE),
+ /* UNK_DMG_0x12 */ DMG_ENTRY(0, KAREBABA_DMGEFF_NONE),
+ /* Zora barrier */ DMG_ENTRY(1, KAREBABA_DMGEFF_ELECTRIC),
+ /* Normal shield */ DMG_ENTRY(0, KAREBABA_DMGEFF_NONE),
+ /* Light ray */ DMG_ENTRY(0, KAREBABA_DMGEFF_NONE),
+ /* Thrown object */ DMG_ENTRY(1, KAREBABA_DMGEFF_NONE),
+ /* Zora punch */ DMG_ENTRY(1, KAREBABA_DMGEFF_NONE),
+ /* Spin attack */ DMG_ENTRY(1, KAREBABA_DMGEFF_NONE),
+ /* Sword beam */ DMG_ENTRY(0, KAREBABA_DMGEFF_NONE),
+ /* Normal Roll */ DMG_ENTRY(0, KAREBABA_DMGEFF_NONE),
+ /* UNK_DMG_0x1B */ DMG_ENTRY(0, KAREBABA_DMGEFF_NONE),
+ /* UNK_DMG_0x1C */ DMG_ENTRY(0, KAREBABA_DMGEFF_NONE),
+ /* Unblockable */ DMG_ENTRY(0, KAREBABA_DMGEFF_NONE),
+ /* UNK_DMG_0x1E */ DMG_ENTRY(0, KAREBABA_DMGEFF_NONE),
+ /* Powder Keg */ DMG_ENTRY(1, KAREBABA_DMGEFF_NONE),
};
static InitChainEntry sInitChain[] = {
@@ -134,444 +140,441 @@ static InitChainEntry sInitChain[] = {
ICHAIN_U8(targetMode, 1, ICHAIN_STOP),
};
-Color_RGBA8 D_808F2E28 = { 0, 0, 0, 0 };
-
-Gfx* D_808F2E2C[] = { object_dekubaba_DL_001330, object_dekubaba_DL_001628, object_dekubaba_DL_001828 };
-
void EnKarebaba_Init(Actor* thisx, PlayState* play) {
EnKarebaba* this = THIS;
Actor_ProcessInitChain(&this->actor, sInitChain);
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 22.0f);
- SkelAnime_Init(play, &this->skelAnime, &object_dekubaba_Skel_002A40, &object_dekubaba_Anim_0002B8, this->jointTable,
- this->morphTable, 8);
+ SkelAnime_Init(play, &this->skelAnime, &gDekuBabaSkel, &gDekuBabaFastChompAnim, this->jointTable, this->morphTable,
+ DEKUBABA_LIMB_MAX);
- Collider_InitAndSetCylinder(play, &this->collider2, &this->actor, &sCylinderInit1);
- Collider_UpdateCylinder(&this->actor, &this->collider2);
- Collider_InitAndSetCylinder(play, &this->collider1, &this->actor, &sCylinderInit2);
- Collider_UpdateCylinder(&this->actor, &this->collider1);
+ Collider_InitAndSetCylinder(play, &this->hurtCollider, &this->actor, &sHurtCylinderInit);
+ Collider_UpdateCylinder(&this->actor, &this->hurtCollider);
+ Collider_InitAndSetCylinder(play, &this->attackCollider, &this->actor, &sAttackCylinderInit);
+ Collider_UpdateCylinder(&this->actor, &this->attackCollider);
CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
- this->unk_22C = NULL;
- if (this->actor.params == ENKAREBABA_2) {
+ this->boundFloor = NULL;
+ if (this->actor.params == KAREBABA_MINI) {
this->actor.hintId = TATL_HINT_ID_MINI_BABA;
} else {
this->actor.hintId = TATL_HINT_ID_WILTED_DEKU_BABA;
}
if (this->actor.params == ENKAREBABA_0) {
- func_808F155C(this);
+ EnKarebaba_SetupGrow(this);
} else {
- func_808F1648(this);
+ EnKarebaba_SetupIdle(this);
}
}
void EnKarebaba_Destroy(Actor* thisx, PlayState* play) {
EnKarebaba* this = THIS;
- Collider_DestroyCylinder(play, &this->collider2);
- Collider_DestroyCylinder(play, &this->collider1);
+ Collider_DestroyCylinder(play, &this->hurtCollider);
+ Collider_DestroyCylinder(play, &this->attackCollider);
}
-void func_808F1374(EnKarebaba* this, PlayState* play) {
- s32 phi_a3;
+void EnKarebaba_SpawnIceEffects(EnKarebaba* this, PlayState* play) {
+ s32 limbPosCount;
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
this->drawDmgEffAlpha = 0.0f;
- if (this->actor.params == ENKAREBABA_2) {
- phi_a3 = 1;
+
+ if (this->actor.params == KAREBABA_MINI) {
+ limbPosCount = 1;
} else {
- phi_a3 = 4;
+ limbPosCount = 4;
}
- Actor_SpawnIceEffects(play, &this->actor, this->limbPos, phi_a3, 4, 0.3f, 0.2f);
+ Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, limbPosCount, 4, 0.3f, 0.2f);
}
}
-void func_808F13FC(EnKarebaba* this, PlayState* play) {
- if (this->actor.colChkInfo.damageEffect == 2) {
+void EnKarebaba_SetDamageEffects(EnKarebaba* this, PlayState* play) {
+ if (this->actor.colChkInfo.damageEffect == KAREBABA_DMGEFF_FIRE) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
this->drawDmgEffScale = 0.75f;
this->drawDmgEffAlpha = 3.0f;
- } else if (this->actor.colChkInfo.damageEffect == 4) {
+ } else if (this->actor.colChkInfo.damageEffect == KAREBABA_DMGEFF_LIGHT) {
this->drawDmgEffScale = 0.75f;
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
this->drawDmgEffAlpha = 3.0f;
- Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->collider2.info.bumper.hitPos.x,
- this->collider2.info.bumper.hitPos.y, this->collider2.info.bumper.hitPos.z, 0, 0, 0,
+
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->hurtCollider.info.bumper.hitPos.x,
+ this->hurtCollider.info.bumper.hitPos.y, this->hurtCollider.info.bumper.hitPos.z, 0, 0, 0,
CLEAR_TAG_SMALL_LIGHT_RAYS);
- } else if (this->actor.colChkInfo.damageEffect == 3) {
+ } else if (this->actor.colChkInfo.damageEffect == KAREBABA_DMGEFF_ICE) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
this->drawDmgEffScale = 0.75f;
this->drawDmgEffAlpha = 1.0f;
this->drawDmgEffFrozenSteamScale = 1.125f;
- } else if (this->actor.colChkInfo.damageEffect == 5) {
+ } else if (this->actor.colChkInfo.damageEffect == KAREBABA_DMGEFF_ELECTRIC) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_MEDIUM;
this->drawDmgEffScale = 0.75f;
this->drawDmgEffAlpha = 3.0f;
}
}
-void func_808F152C(EnKarebaba* this) {
- this->collider2.dim.radius = 7;
- this->collider2.dim.height = 25;
- this->collider2.base.colType = COLTYPE_HARD;
- this->collider2.base.acFlags |= AC_HARD;
- this->collider1.dim.height = 25;
+void EnKarebaba_ResetColliders(EnKarebaba* this) {
+ this->hurtCollider.dim.radius = 7;
+ this->hurtCollider.dim.height = 25;
+ this->hurtCollider.base.colType = COLTYPE_HARD;
+ this->hurtCollider.base.acFlags |= AC_HARD;
+ this->attackCollider.dim.height = 25;
}
-void func_808F155C(EnKarebaba* this) {
+void EnKarebaba_SetupGrow(EnKarebaba* this) {
Actor_SetScale(&this->actor, 0.0f);
this->actor.shape.rot.x = -0x4000;
- this->unk_1EE = 0;
+ this->timer = 0;
this->actor.world.pos.y = this->actor.home.pos.y + 14.0f;
- this->actionFunc = func_808F15B0;
+ this->actionFunc = EnKarebaba_Grow;
}
-void func_808F15B0(EnKarebaba* this, PlayState* play) {
- f32 sp1C;
+void EnKarebaba_Grow(EnKarebaba* this, PlayState* play) {
+ f32 scale;
- this->unk_1EE++;
- sp1C = this->unk_1EE * 0.05f;
- Actor_SetScale(&this->actor, 0.005f * sp1C);
- this->actor.world.pos.y = this->actor.home.pos.y + (14.0f * sp1C);
- if (this->unk_1EE == 20) {
- func_808F1648(this);
+ this->timer++;
+ scale = this->timer * 0.05f;
+ Actor_SetScale(&this->actor, 0.005f * scale);
+ this->actor.world.pos.y = this->actor.home.pos.y + (14.0f * scale);
+ if (this->timer == 20) {
+ EnKarebaba_SetupIdle(this);
}
}
-void func_808F1648(EnKarebaba* this) {
+void EnKarebaba_SetupIdle(EnKarebaba* this) {
Actor_SetScale(&this->actor, 0.005f);
this->actor.shape.rot.x = -0x4000;
this->actor.world.pos.y = this->actor.home.pos.y + 14.0f;
- this->actionFunc = func_808F169C;
+ this->actionFunc = EnKarebaba_Idle;
}
-void func_808F169C(EnKarebaba* this, PlayState* play) {
+void EnKarebaba_Idle(EnKarebaba* this, PlayState* play) {
if ((this->actor.xzDistToPlayer < 200.0f) && (fabsf(this->actor.playerHeightRel) < 30.0f)) {
- func_808F16FC(this);
+ EnKarebaba_SetupAwaken(this);
}
}
-void func_808F16FC(EnKarebaba* this) {
- Animation_Change(&this->skelAnime, &object_dekubaba_Anim_0002B8, 4.0f, 0.0f,
- Animation_GetLastFrame(&object_dekubaba_Anim_0002B8), ANIMMODE_LOOP, -3.0f);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEKU_WAKEUP);
- this->actionFunc = func_808F1778;
+void EnKarebaba_SetupAwaken(EnKarebaba* this) {
+ Animation_Change(&this->skelAnime, &gDekuBabaFastChompAnim, 4.0f, 0.0f,
+ Animation_GetLastFrame(&gDekuBabaFastChompAnim), ANIMMODE_LOOP, -3.0f);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEKU_WAKEUP);
+ this->actionFunc = EnKarebaba_Awaken;
}
-void func_808F1778(EnKarebaba* this, PlayState* play) {
+void EnKarebaba_Awaken(EnKarebaba* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
- if (Math_StepToF(&this->actor.scale.x, 0.01f, 0.0005f) && (this->actor.params == ENKAREBABA_2)) {
- func_808F1878(this);
+ if (Math_StepToF(&this->actor.scale.x, 0.01f, 0.0005f) && (this->actor.params == KAREBABA_MINI)) {
+ EnKarebaba_SetupUpright(this);
}
- this->actor.scale.z = this->actor.scale.x;
- this->actor.scale.y = this->actor.scale.x;
+ this->actor.scale.y = this->actor.scale.z = this->actor.scale.x;
if ((this->actor.params == ENKAREBABA_1) &&
Math_StepToF(&this->actor.world.pos.y, this->actor.home.pos.y + 60.0f, 5.0f)) {
- func_808F1878(this);
+ EnKarebaba_SetupUpright(this);
}
- this->actor.shape.rot.y += 0x1999;
+ this->actor.shape.rot.y += 0x10000 / 10;
EffectSsHahen_SpawnBurst(play, &this->actor.home.pos, 3.0f, 0, 12, 5, 1, HAHEN_OBJECT_DEFAULT, 10, NULL);
}
-void func_808F1878(EnKarebaba* this) {
- if (this->actionFunc != func_808F1A58) {
+void EnKarebaba_SetupUpright(EnKarebaba* this) {
+ if (this->actionFunc != EnKarebaba_Spin) {
Actor_SetScale(&this->actor, 0.01f);
- this->collider2.base.colType = COLTYPE_HIT6;
- this->collider2.base.acFlags &= ~AC_HARD;
- this->collider2.dim.radius = 15;
+ this->hurtCollider.base.colType = COLTYPE_HIT6;
+ this->hurtCollider.base.acFlags &= ~AC_HARD;
+ this->hurtCollider.dim.radius = 15;
if (this->actor.params == ENKAREBABA_1) {
- this->collider2.dim.height = 80;
- this->collider1.dim.height = 80;
+ this->hurtCollider.dim.height = 80;
+ this->attackCollider.dim.height = 80;
} else {
- this->collider2.dim.height = 35;
- this->collider1.dim.height = 35;
+ this->hurtCollider.dim.height = 35;
+ this->attackCollider.dim.height = 35;
}
}
- this->unk_1EE = 40;
- this->actionFunc = func_808F190C;
+ this->timer = 40;
+ this->actionFunc = EnKarebaba_Upright;
}
-void func_808F190C(EnKarebaba* this, PlayState* play) {
+void EnKarebaba_Upright(EnKarebaba* this, PlayState* play) {
Player* player = GET_PLAYER(play);
SkelAnime_Update(&this->skelAnime);
- if (this->unk_1EE != 0) {
- this->unk_1EE--;
+ if (this->timer != 0) {
+ this->timer--;
}
if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 12.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_MIZUBABA1_MOUTH);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_MIZUBABA1_MOUTH);
}
- if (this->collider2.base.acFlags & AC_HIT) {
- func_808F13FC(this, play);
+ if (this->hurtCollider.base.acFlags & AC_HIT) {
+ EnKarebaba_SetDamageEffects(this, play);
if (this->actor.params == ENKAREBABA_1) {
- func_808F1BF8(this);
+ EnKarebaba_SetupDying(this);
} else {
- func_808F1FAC(this);
+ EnKarebaba_SetupShrinkDie(this);
}
Enemy_StartFinishingBlow(play, &this->actor);
} else if (Math_Vec3f_DistXZ(&this->actor.home.pos, &player->actor.world.pos) > 240.0f) {
- func_808F220C(this);
- } else if ((this->unk_1EE == 0) && (this->actor.params == ENKAREBABA_1)) {
- func_808F1A3C(this);
+ EnKarebaba_SetupRetract(this);
+ } else if ((this->timer == 0) && (this->actor.params == ENKAREBABA_1)) {
+ EnKarebaba_SetupSpin(this);
}
}
-void func_808F1A3C(EnKarebaba* this) {
- this->unk_1EE = 40;
- this->actionFunc = func_808F1A58;
+void EnKarebaba_SetupSpin(EnKarebaba* this) {
+ this->timer = 40;
+ this->actionFunc = EnKarebaba_Spin;
}
-void func_808F1A58(EnKarebaba* this, PlayState* play) {
- s32 phi_v0;
- f32 sp28;
+void EnKarebaba_Spin(EnKarebaba* this, PlayState* play) {
+ s32 temp; // Used for cylinder radius and shape rotations
+ f32 headDistHorizontal;
- if (this->unk_1EE != 0) {
- this->unk_1EE--;
+ if (this->timer != 0) {
+ this->timer--;
}
SkelAnime_Update(&this->skelAnime);
if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 12.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_MIZUBABA1_MOUTH);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_MIZUBABA1_MOUTH);
}
- phi_v0 = 20 - this->unk_1EE;
- phi_v0 = 20 - ABS_ALT(phi_v0);
- if (phi_v0 > 10) {
- phi_v0 = 10;
+ temp = 20 - this->timer;
+ temp = 20 - ABS_ALT(temp);
+ if (temp > 10) {
+ temp = 10;
}
- this->collider1.dim.radius = sCylinderInit2.dim.radius + (phi_v0 * 2);
- this->actor.shape.rot.x = 0xC000 - (phi_v0 << 8);
- this->actor.shape.rot.y += phi_v0 * 0x2C0;
+ this->attackCollider.dim.radius = sAttackCylinderInit.dim.radius + (temp * 2);
+ this->actor.shape.rot.x = 0xC000 - temp * 0x100;
+ this->actor.shape.rot.y += temp * 0x2C0;
this->actor.world.pos.y = (Math_SinS(this->actor.shape.rot.x) * -60.0f) + this->actor.home.pos.y;
- sp28 = Math_CosS(this->actor.shape.rot.x) * 60.0f;
- this->actor.world.pos.x = (Math_SinS(this->actor.shape.rot.y) * sp28) + this->actor.home.pos.x;
- this->actor.world.pos.z = (Math_CosS(this->actor.shape.rot.y) * sp28) + this->actor.home.pos.z;
+ headDistHorizontal = Math_CosS(this->actor.shape.rot.x) * 60.0f;
+ this->actor.world.pos.x = (Math_SinS(this->actor.shape.rot.y) * headDistHorizontal) + this->actor.home.pos.x;
+ this->actor.world.pos.z = (Math_CosS(this->actor.shape.rot.y) * headDistHorizontal) + this->actor.home.pos.z;
- if (this->collider2.base.acFlags & AC_HIT) {
- func_808F13FC(this, play);
- func_808F1BF8(this);
+ if (this->hurtCollider.base.acFlags & AC_HIT) {
+ EnKarebaba_SetDamageEffects(this, play);
+ EnKarebaba_SetupDying(this);
Enemy_StartFinishingBlow(play, &this->actor);
- } else if (this->unk_1EE == 0) {
- func_808F1878(this);
+ } else if (this->timer == 0) {
+ EnKarebaba_SetupUpright(this);
}
}
-void func_808F1BF8(EnKarebaba* this) {
+void EnKarebaba_SetupDying(EnKarebaba* this) {
if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
- this->unk_1EE = 0;
+ this->timer = 0;
this->actor.gravity = -0.8f;
this->actor.velocity.y = 4.0f;
this->actor.world.rot.y = BINANG_ROT180(this->actor.shape.rot.y);
- this->actor.speedXZ = 3.0f;
+ this->actor.speed = 3.0f;
} else {
- this->unk_1EE = 3;
+ this->timer = 3;
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEKU_JR_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEKU_JR_DEAD);
this->actor.flags |= (ACTOR_FLAG_10 | ACTOR_FLAG_20);
- this->actionFunc = func_808F1C84;
+ this->actionFunc = EnKarebaba_Dying;
}
-void func_808F1C84(EnKarebaba* this, PlayState* play) {
+void EnKarebaba_Dying(EnKarebaba* this, PlayState* play) {
s32 i;
- Vec3f sp78;
- f32 temp_f20;
- f32 temp_f22;
- f32 temp_f24;
+ Vec3f dustPos;
+ f32 xIncr;
+ f32 zIncr;
+ f32 yIncr;
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
- this->unk_1EE--;
- if (this->unk_1EE == 0) {
+ this->timer--;
+ if (this->timer == 0) {
this->actor.gravity = -0.8f;
- this->actor.speedXZ = 3.0f;
+ this->actor.speed = 3.0f;
this->actor.velocity.y = 4.0f;
this->actor.world.rot.y = BINANG_ROT180(this->actor.shape.rot.y);
- func_808F1374(this, play);
+ EnKarebaba_SpawnIceEffects(this, play);
}
} else {
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.1f);
+ Math_StepToF(&this->actor.speed, 0.0f, 0.1f);
- if (this->unk_1EE == 0) {
+ if (this->timer == 0) {
Math_ScaledStepToS(&this->actor.shape.rot.x, 0x4800, 0x71C);
EffectSsHahen_SpawnBurst(play, &this->actor.world.pos, 3.0f, 0, 12, 5, 1, HAHEN_OBJECT_DEFAULT, 10, NULL);
- if ((this->actor.scale.x > 0.005f) && ((this->actor.bgCheckFlags & 2) || (this->actor.bgCheckFlags & 8))) {
+ if ((this->actor.scale.x > 0.005f) && ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) ||
+ (this->actor.bgCheckFlags & BGCHECKFLAG_WALL))) {
this->actor.scale.z = 0.0f;
this->actor.scale.y = 0.0f;
this->actor.scale.x = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_4);
EffectSsHahen_SpawnBurst(play, &this->actor.world.pos, 3.0f, 0, 12, 5, 15, HAHEN_OBJECT_DEFAULT, 10,
NULL);
}
- if (this->actor.bgCheckFlags & 2) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EYEGOLE_ATTACK);
- this->unk_1EE = 1;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_ATTACK);
+ this->timer = 1;
}
- } else if (this->unk_1EE == 1) {
- Math_Vec3f_Copy(&sp78, &this->actor.world.pos);
+ } else if (this->timer == 1) {
+ Math_Vec3f_Copy(&dustPos, &this->actor.world.pos);
- temp_f24 = Math_SinS(this->actor.shape.rot.x) * 20.0f;
- temp_f20 = (-20.0f * Math_CosS(this->actor.shape.rot.x)) * Math_SinS(this->actor.shape.rot.y);
- temp_f22 = (-20.0f * Math_CosS(this->actor.shape.rot.x)) * Math_CosS(this->actor.shape.rot.y);
+ yIncr = Math_SinS(this->actor.shape.rot.x) * 20.0f;
+ xIncr = -20.0f * Math_CosS(this->actor.shape.rot.x) * Math_SinS(this->actor.shape.rot.y);
+ zIncr = -20.0f * Math_CosS(this->actor.shape.rot.x) * Math_CosS(this->actor.shape.rot.y);
for (i = 0; i < 4; i++) {
- func_800B1210(play, &sp78, &gZeroVec3f, &gZeroVec3f, 500, 50);
- sp78.x += temp_f20;
- sp78.y += temp_f24;
- sp78.z += temp_f22;
+ func_800B1210(play, &dustPos, &gZeroVec3f, &gZeroVec3f, 500, 50);
+ dustPos.x += xIncr;
+ dustPos.y += yIncr;
+ dustPos.z += zIncr;
}
func_800B1210(play, &this->actor.home.pos, &gZeroVec3f, &gZeroVec3f, 500, 100);
- func_808F20FC(this, play);
+ EnKarebaba_SetupDeadItemDrop(this, play);
}
}
}
-void func_808F1FAC(EnKarebaba* this) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEKU_JR_DEAD);
+void EnKarebaba_SetupShrinkDie(EnKarebaba* this) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEKU_JR_DEAD);
this->actor.flags |= (ACTOR_FLAG_10 | ACTOR_FLAG_20);
this->actor.flags &= ~ACTOR_FLAG_1;
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
- this->unk_1EE = 3;
+ this->timer = 3;
}
- this->actionFunc = func_808F200C;
+ this->actionFunc = EnKarebaba_ShrinkDie;
}
-void func_808F200C(EnKarebaba* this, PlayState* play) {
+void EnKarebaba_ShrinkDie(EnKarebaba* this, PlayState* play) {
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
- this->unk_1EE--;
- if (this->unk_1EE == 0) {
- func_808F1374(this, play);
+ this->timer--;
+ if (this->timer == 0) {
+ EnKarebaba_SpawnIceEffects(this, play);
}
} else {
if (Math_StepToF(&this->actor.scale.x, 0.0f, 0.0005f)) {
Item_DropCollectible(play, &this->actor.world.pos, ITEM00_NUTS_1);
- func_808F238C(this);
+ EnKarebaba_SetupDead(this);
} else {
EffectSsHahen_SpawnBurst(play, &this->actor.world.pos, 3.0f, 0, 12, 5, 1, HAHEN_OBJECT_DEFAULT, 10, NULL);
Math_StepToF(&this->actor.world.pos.y, this->actor.home.pos.y, 1.0f);
}
- this->actor.scale.y = this->actor.scale.x;
- this->actor.scale.z = this->actor.scale.x;
+
+ this->actor.scale.z = this->actor.scale.y = this->actor.scale.x;
}
}
-void func_808F20FC(EnKarebaba* this, PlayState* play) {
+void EnKarebaba_SetupDeadItemDrop(EnKarebaba* this, PlayState* play) {
Actor_SetScale(&this->actor, 0.03f);
this->actor.shape.rot.x -= 0x4000;
this->actor.shape.yOffset = 1000.0f;
this->actor.gravity = 0.0f;
this->actor.velocity.y = 0.0f;
this->actor.shape.shadowScale = 3.0f;
- func_800BC154(play, &play->actorCtx, &this->actor, 8);
- this->unk_1EE = 200;
+ func_800BC154(play, &play->actorCtx, &this->actor, ACTORCAT_MISC);
+ this->timer = 200;
this->actor.flags &= ~ACTOR_FLAG_20;
this->drawDmgEffAlpha = 0.0f;
- this->actionFunc = func_808F21A4;
+ this->actionFunc = EnKarebaba_DeadItemDrop;
}
-void func_808F21A4(EnKarebaba* this, PlayState* play) {
- if (this->unk_1EE != 0) {
- this->unk_1EE--;
+void EnKarebaba_DeadItemDrop(EnKarebaba* this, PlayState* play) {
+ if (this->timer != 0) {
+ this->timer--;
}
- if (Actor_HasParent(&this->actor, play) || (this->unk_1EE == 0)) {
- func_808F238C(this);
+ if (Actor_HasParent(&this->actor, play) || (this->timer == 0)) {
+ EnKarebaba_SetupDead(this);
} else {
- Actor_PickUpNearby(&this->actor, play, GI_STICKS_1);
+ Actor_OfferGetItemNearby(&this->actor, play, GI_STICKS_1);
}
}
-void func_808F220C(EnKarebaba* this) {
- Animation_Change(&this->skelAnime, &object_dekubaba_Anim_0002B8, -3.0f,
- Animation_GetLastFrame(&object_dekubaba_Anim_0002B8), 0.0f, ANIMMODE_ONCE, -3.0f);
- func_808F152C(this);
- this->actionFunc = func_808F228C;
+void EnKarebaba_SetupRetract(EnKarebaba* this) {
+ Animation_Change(&this->skelAnime, &gDekuBabaFastChompAnim, -3.0f, Animation_GetLastFrame(&gDekuBabaFastChompAnim),
+ 0.0f, ANIMMODE_ONCE, -3.0f);
+ EnKarebaba_ResetColliders(this);
+ this->actionFunc = EnKarebaba_Retract;
}
-void func_808F228C(EnKarebaba* this, PlayState* play) {
+void EnKarebaba_Retract(EnKarebaba* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
- if (Math_StepToF(&this->actor.scale.x, 0.005f, 0.0005f) && (this->actor.params == ENKAREBABA_2)) {
- func_808F1648(this);
+ if (Math_StepToF(&this->actor.scale.x, 0.005f, 0.0005f) && (this->actor.params == KAREBABA_MINI)) {
+ EnKarebaba_SetupIdle(this);
}
- this->actor.scale.z = this->actor.scale.x;
- this->actor.scale.y = this->actor.scale.x;
+ this->actor.scale.y = this->actor.scale.z = this->actor.scale.x;
if ((this->actor.params == ENKAREBABA_1) &&
Math_StepToF(&this->actor.world.pos.y, this->actor.home.pos.y + 14.0f, 5.0f)) {
- func_808F1648(this);
+ EnKarebaba_SetupIdle(this);
}
- this->actor.shape.rot.y += 0x1999;
+ this->actor.shape.rot.y += 0x10000 / 10;
EffectSsHahen_SpawnBurst(play, &this->actor.home.pos, 3.0f, 0, 12, 5, 1, HAHEN_OBJECT_DEFAULT, 10, NULL);
}
-void func_808F238C(EnKarebaba* this) {
- Animation_Change(&this->skelAnime, &object_dekubaba_Anim_0002B8, 0.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f);
- func_808F152C(this);
+void EnKarebaba_SetupDead(EnKarebaba* this) {
+ Animation_Change(&this->skelAnime, &gDekuBabaFastChompAnim, 0.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f);
+ EnKarebaba_ResetColliders(this);
this->actor.shape.rot.x = -0x4000;
- this->unk_1EE = 200;
+ this->timer = 200;
this->actor.parent = NULL;
this->actor.shape.shadowScale = 0.0f;
this->drawDmgEffAlpha = 0.0f;
Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.home.pos);
- this->actionFunc = func_808F254C;
+ this->actionFunc = EnKarebaba_Dead;
}
-void func_808F241C(EnKarebaba* this, PlayState* play) {
- f32 sp1C;
+void EnKarebaba_Regrow(EnKarebaba* this, PlayState* play) {
+ f32 scale;
- this->unk_1EE++;
- sp1C = this->unk_1EE * 0.05f;
- Actor_SetScale(&this->actor, 0.005f * sp1C);
- this->actor.world.pos.y = this->actor.home.pos.y + (14.0f * sp1C);
+ this->timer++;
+ scale = this->timer * 0.05f;
+ Actor_SetScale(&this->actor, 0.005f * scale);
+ this->actor.world.pos.y = this->actor.home.pos.y + (14.0f * scale);
- if (this->unk_1EE == 20) {
+ if (this->timer == 20) {
this->actor.flags &= ~ACTOR_FLAG_10;
this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_4);
if (this->actor.params == ENKAREBABA_1) {
- func_800BC154(play, &play->actorCtx, &this->actor, 5);
+ func_800BC154(play, &play->actorCtx, &this->actor, ACTORCAT_ENEMY);
}
- func_808F1648(this);
+ EnKarebaba_SetupIdle(this);
}
}
-void func_808F24F8(EnKarebaba* this) {
+void EnKarebaba_SetupRegrow(EnKarebaba* this) {
this->actor.shape.yOffset = 0.0f;
this->actor.shape.shadowScale = 22.0f;
- this->collider1.dim.radius = sCylinderInit2.dim.radius;
+ this->attackCollider.dim.radius = sAttackCylinderInit.dim.radius;
Actor_SetScale(&this->actor, 0.0f);
- this->actionFunc = func_808F241C;
+ this->actionFunc = EnKarebaba_Regrow;
}
-void func_808F254C(EnKarebaba* this, PlayState* play) {
+void EnKarebaba_Dead(EnKarebaba* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
- if (this->unk_1EE != 0) {
- this->unk_1EE--;
+ if (this->timer != 0) {
+ this->timer--;
}
- if (this->unk_1EE == 0) {
- func_808F24F8(this);
+ if (this->timer == 0) {
+ EnKarebaba_SetupRegrow(this);
}
}
@@ -591,30 +594,31 @@ void EnKarebaba_Update(Actor* thisx, PlayState* play2) {
} else {
this->drawDmgEffScale = this->drawDmgEffScale;
}
- } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.75f, 0.01875f)) {
+ } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.75f, 0.75f / 40)) {
func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
}
}
- if (this->actionFunc != func_808F254C) {
- if (this->actionFunc == func_808F1C84) {
+ if (this->actionFunc != EnKarebaba_Dead) {
+ if (this->actionFunc == EnKarebaba_Dying) {
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 15.0f, 10.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 15.0f, 10.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
} else {
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
- if (this->unk_22C == 0) {
- this->unk_22C = this->actor.floorPoly;
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
+ if (this->boundFloor == 0) {
+ this->boundFloor = this->actor.floorPoly;
}
}
- if ((this->actionFunc != func_808F1C84) && (this->actionFunc != func_808F200C) &&
- (this->actionFunc != func_808F21A4)) {
- if ((this->actionFunc != func_808F241C) && (this->actionFunc != func_808F15B0)) {
- CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider1.base);
- CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider2.base);
+ if ((this->actionFunc != EnKarebaba_Dying) && (this->actionFunc != EnKarebaba_ShrinkDie) &&
+ (this->actionFunc != EnKarebaba_DeadItemDrop)) {
+ if ((this->actionFunc != EnKarebaba_Regrow) && (this->actionFunc != EnKarebaba_Grow)) {
+ CollisionCheck_SetAT(play, &play->colChkCtx, &this->attackCollider.base);
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->hurtCollider.base);
}
- CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider1.base);
+ CollisionCheck_SetOC(play, &play->colChkCtx, &this->attackCollider.base);
Actor_SetFocus(&this->actor, (this->actor.scale.x * 10.0f) / 0.01f);
max = this->actor.home.pos.y + 40.0f;
@@ -625,8 +629,8 @@ void EnKarebaba_Update(Actor* thisx, PlayState* play2) {
}
}
-void func_808F280C(EnKarebaba* this, PlayState* play) {
- MtxF sp40;
+void EnKarebaba_DrawShadow(EnKarebaba* this, PlayState* play) {
+ MtxF mf;
OPEN_DISPS(play->state.gfxCtx);
@@ -634,10 +638,9 @@ void func_808F280C(EnKarebaba* this, PlayState* play) {
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, 255);
- func_800C0094(this->unk_22C, this->actor.home.pos.x, this->actor.home.pos.y, this->actor.home.pos.z, &sp40);
- Matrix_Mult(&sp40, MTXMODE_NEW);
+ func_800C0094(this->boundFloor, this->actor.home.pos.x, this->actor.home.pos.y, this->actor.home.pos.z, &mf);
+ Matrix_Mult(&mf, MTXMODE_NEW);
Matrix_Scale(0.15f, 1.0f, 0.15f, MTXMODE_APPLY);
-
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gCircleShadowDL);
@@ -645,53 +648,53 @@ void func_808F280C(EnKarebaba* this, PlayState* play) {
}
void EnKarebaba_Draw(Actor* thisx, PlayState* play) {
+ static Color_RGBA8 sFogColor = { 0, 0, 0, 0 };
+ static Gfx* sStemDLists[] = { gDekuBabaStemTopDL, gDekuBabaStemMiddleDL, gDekuBabaStemBaseDL };
EnKarebaba* this = THIS;
s32 i;
- s32 sp94;
+ s32 stemSections;
s16 limbCount;
- f32 sp8C = 0.01f;
+ f32 scale = 0.01f;
OPEN_DISPS(play->state.gfxCtx);
func_8012C28C(play->state.gfxCtx);
- Math_Vec3f_Copy(this->limbPos, &this->actor.world.pos);
+ Math_Vec3f_Copy(this->bodyPartsPos, &this->actor.world.pos);
- if (this->actionFunc == func_808F21A4) {
- if ((this->unk_1EE > 40) || (this->unk_1EE & 1)) {
+ if (this->actionFunc == EnKarebaba_DeadItemDrop) {
+ if ((this->timer > 40) || (this->timer & 1)) {
Matrix_Translate(0.0f, 0.0f, 200.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++, object_dekubaba_DL_003070);
+ gSPDisplayList(POLY_OPA_DISP++, gDekuBabaStickDropDL);
}
- } else if (this->actionFunc != func_808F254C) {
- func_800AE2A0(play, &D_808F2E28, 1, 2);
+ } else if (this->actionFunc != EnKarebaba_Dead) {
+ func_800AE2A0(play, &sFogColor, 1, 2);
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, NULL);
Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW);
- if ((this->actionFunc == func_808F241C) || (this->actionFunc == func_808F200C) ||
- (this->actionFunc == func_808F15B0)) {
- sp8C = this->unk_1EE * 0.0005f;
+ if ((this->actionFunc == EnKarebaba_Regrow) || (this->actionFunc == EnKarebaba_ShrinkDie) ||
+ (this->actionFunc == EnKarebaba_Grow)) {
+ scale = this->timer * 0.0005f;
}
- Matrix_Scale(sp8C, sp8C, sp8C, MTXMODE_APPLY);
+ Matrix_Scale(scale, scale, scale, MTXMODE_APPLY);
Matrix_RotateZYX(this->actor.shape.rot.x, this->actor.shape.rot.y, 0, MTXMODE_APPLY);
- if (this->actor.params == ENKAREBABA_2) {
- sp94 = 1;
- } else if (this->actionFunc == func_808F1C84) {
- sp94 = 2;
+ if (this->actor.params == KAREBABA_MINI) {
+ stemSections = 1;
+ } else if (this->actionFunc == EnKarebaba_Dying) {
+ stemSections = 2;
} else {
- sp94 = 3;
+ stemSections = 3;
}
- for (i = 0; i < sp94; i++) {
+ for (i = 0; i < stemSections; i++) {
Matrix_Translate(0.0f, 0.0f, -2000.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++, D_808F2E2C[i]);
+ gSPDisplayList(POLY_OPA_DISP++, sStemDLists[i]);
- Matrix_MultZero(&this->limbPos[1 + i]);
- if ((i == 0) && (this->actionFunc == func_808F1C84)) {
+ Matrix_MultZero(&this->bodyPartsPos[1 + i]);
+ if ((i == 0) && (this->actionFunc == EnKarebaba_Dying)) {
Matrix_MultZero(&this->actor.focus.pos);
}
}
@@ -699,41 +702,39 @@ void EnKarebaba_Draw(Actor* thisx, PlayState* play) {
func_800AE5A0(play);
}
- func_800AE2A0(play, &D_808F2E28, 1, 2);
+ func_800AE2A0(play, &sFogColor, 1, 2);
Matrix_Translate(this->actor.home.pos.x, this->actor.home.pos.y, this->actor.home.pos.z, MTXMODE_NEW);
- if (this->actionFunc != func_808F15B0) {
- sp8C = 0.01f;
+ if (this->actionFunc != EnKarebaba_Grow) {
+ scale = 0.01f;
}
- Matrix_Scale(sp8C, sp8C, sp8C, MTXMODE_APPLY);
+ Matrix_Scale(scale, scale, scale, MTXMODE_APPLY);
Matrix_RotateYS(this->actor.home.rot.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++, object_dekubaba_DL_0010F0);
+ gSPDisplayList(POLY_OPA_DISP++, gDekuBabaBaseLeavesDL);
- if (this->actionFunc == func_808F1C84) {
+ if (this->actionFunc == EnKarebaba_Dying) {
Matrix_RotateZYX(-0x4000, this->actor.shape.rot.y - this->actor.home.rot.y, 0, 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_dekubaba_DL_001828);
+ gSPDisplayList(POLY_OPA_DISP++, gDekuBabaStemBaseDL);
- Matrix_MultZero(&this->limbPos[3]);
+ Matrix_MultZero(&this->bodyPartsPos[3]);
}
func_800AE5A0(play);
- if (this->actor.params == ENKAREBABA_2) {
+ if (this->actor.params == KAREBABA_MINI) {
limbCount = 1;
} else {
- limbCount = ARRAY_COUNT(this->limbPos);
+ limbCount = ARRAY_COUNT(this->bodyPartsPos);
}
- Actor_DrawDamageEffects(play, &this->actor, this->limbPos, limbCount, this->drawDmgEffScale,
+ Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, limbCount, this->drawDmgEffScale,
this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType);
- if (this->unk_22C != 0) {
- func_808F280C(this, play);
+ if (this->boundFloor != 0) {
+ EnKarebaba_DrawShadow(this, play);
}
CLOSE_DISPS(play->state.gfxCtx);
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 9d41245e6..aa05aec0a 100644
--- a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.h
+++ b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.h
@@ -2,34 +2,33 @@
#define Z_EN_KAREBABA_H
#include "global.h"
+#include "objects/object_dekubaba/object_dekubaba.h"
struct EnKarebaba;
typedef void (*EnKarebabaActionFunc)(struct EnKarebaba*, PlayState*);
-enum {
- /* 0 */ ENKAREBABA_0,
- /* 1 */ ENKAREBABA_1,
- /* 2 */ ENKAREBABA_2,
-};
+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,
+} KarebabaType;
typedef struct EnKarebaba {
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ EnKarebabaActionFunc actionFunc;
- /* 0x18C */ Vec3s jointTable[8];
- /* 0x1BC */ Vec3s morphTable[8];
+ /* 0x18C */ Vec3s jointTable[DEKUBABA_LIMB_MAX];
+ /* 0x1BC */ Vec3s morphTable[DEKUBABA_LIMB_MAX];
/* 0x1EC */ u8 drawDmgEffType;
- /* 0x1EE */ s16 unk_1EE;
+ /* 0x1EE */ s16 timer;
/* 0x1F0 */ f32 drawDmgEffAlpha;
/* 0x1F4 */ f32 drawDmgEffScale;
/* 0x1F8 */ f32 drawDmgEffFrozenSteamScale;
- /* 0x1FC */ Vec3f limbPos[4];
- /* 0x22C */ CollisionPoly* unk_22C;
- /* 0x230 */ ColliderCylinder collider1;
- /* 0x27C */ ColliderCylinder collider2;
+ /* 0x1FC */ Vec3f bodyPartsPos[4];
+ /* 0x22C */ CollisionPoly* boundFloor;
+ /* 0x230 */ ColliderCylinder attackCollider;
+ /* 0x27C */ ColliderCylinder hurtCollider;
} EnKarebaba; // size = 0x2C8
-extern const ActorInit En_Karebaba_InitVars;
-
#endif // Z_EN_KAREBABA_H
diff --git a/src/overlays/actors/ovl_En_Kbt/overlay.cfg b/src/overlays/actors/ovl_En_Kbt/overlay.cfg
deleted file mode 100644
index d9195b4b0..000000000
--- a/src/overlays/actors/ovl_En_Kbt/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Kbt
-z_en_kbt.c
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 78d903207..b3b8ca295 100644
--- a/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c
+++ b/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c
@@ -22,7 +22,7 @@ Actor* func_80B3403C(PlayState* play);
void func_80B34314(EnKbt* this, PlayState* play);
void func_80B34598(EnKbt* this, PlayState* play);
-const ActorInit En_Kbt_InitVars = {
+ActorInit En_Kbt_InitVars = {
ACTOR_EN_KBT,
ACTORCAT_NPC,
FLAGS,
@@ -71,12 +71,12 @@ void EnKbt_Destroy(Actor* thisx, PlayState* play) {
}
s32 func_80B33E64(PlayState* play) {
- return gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 & 1;
+ return gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 & 1;
}
s32 func_80B33E8C(PlayState* play) {
if ((CURRENT_DAY == 3) ||
- ((CURRENT_DAY == 2) && (gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 & 2))) {
+ ((CURRENT_DAY == 2) && (gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 & 2))) {
return true;
}
return false;
diff --git a/src/overlays/actors/ovl_En_Kbt/z_en_kbt.h b/src/overlays/actors/ovl_En_Kbt/z_en_kbt.h
index dbbb96e76..eb491bf28 100644
--- a/src/overlays/actors/ovl_En_Kbt/z_en_kbt.h
+++ b/src/overlays/actors/ovl_En_Kbt/z_en_kbt.h
@@ -23,6 +23,4 @@ typedef struct EnKbt {
/* 0x288 */ EnKbtActionFunc actionFunc;
} EnKbt; // size = 0x28C
-extern const ActorInit En_Kbt_InitVars;
-
#endif // Z_EN_KBT_H
diff --git a/src/overlays/actors/ovl_En_Kendo_Js/overlay.cfg b/src/overlays/actors/ovl_En_Kendo_Js/overlay.cfg
deleted file mode 100644
index dd63f4c4a..000000000
--- a/src/overlays/actors/ovl_En_Kendo_Js/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Kendo_Js
-z_en_kendo_js.c
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 d90bdf93d..c72aa9f5f 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
@@ -8,7 +8,7 @@
#include "overlays/actors/ovl_En_Maruta/z_en_maruta.h"
#include "objects/object_js/object_js.h"
-#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000 | ACTOR_FLAG_8000000)
+#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON)
#define THIS ((EnKendoJs*)thisx)
@@ -37,7 +37,7 @@ s32 func_80B278C4(PlayState* play, Vec3f arg1);
void func_80B279F0(EnKendoJs* this, PlayState* play, s32 arg2);
void func_80B27A90(EnKendoJs* this, PlayState* play);
-const ActorInit En_Kendo_Js_InitVars = {
+ActorInit En_Kendo_Js_InitVars = {
ACTOR_EN_KENDO_JS,
ACTORCAT_NPC,
FLAGS,
@@ -117,15 +117,15 @@ void EnKendoJs_Init(Actor* thisx, PlayState* play) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_KANBAN, this->actor.home.pos.x, this->actor.home.pos.y,
this->actor.home.pos.z - 10.0f, this->actor.home.rot.x, this->actor.home.rot.y,
this->actor.home.rot.z, 0x10);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4);
}
} else if (ENKENDOJS_GET_FF(&this->actor) == ENKENDOJS_FF_1) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
if (ENKENDOJS_GET_FF(&this->actor) != ENKENDOJS_FF_1) {
Path* path = &play->setupPathList[ENKENDOJS_GET_FF00(&this->actor)];
@@ -148,7 +148,7 @@ void EnKendoJs_Destroy(Actor* thisx, PlayState* play) {
EnKendoJs* this = THIS;
Collider_DestroyCylinder(play, &this->collider);
- gSaveContext.save.weekEventReg[82] &= (u8)~8;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_82_08);
}
void func_80B26538(EnKendoJs* this) {
@@ -193,7 +193,8 @@ void func_80B2654C(EnKendoJs* this, PlayState* play) {
} else if ((Player_GetMask(play) != PLAYER_MASK_NONE) && (Player_GetMask(play) < PLAYER_MASK_GIANT)) {
u16 sp2E = Player_GetMask(play) + 0x273C;
- if (0) {}
+ //! FAKE:
+ if (1) {}
Message_StartTextbox(play, sp2E, &this->actor);
this->unk_288 = sp2E;
@@ -223,7 +224,7 @@ void func_80B26758(EnKendoJs* this, PlayState* play) {
Message_StartTextbox(play, 0x272C, &this->actor);
this->unk_288 = 0x272C;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
- } else if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) {
+ } else if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) {
play_sound(NA_SE_SY_ERROR);
Message_StartTextbox(play, 0x2718, &this->actor);
this->unk_288 = 0x2718;
@@ -241,7 +242,7 @@ void func_80B26758(EnKendoJs* this, PlayState* play) {
Message_StartTextbox(play, 0x272C, &this->actor);
this->unk_288 = 0x272C;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
- } else if (gSaveContext.save.playerData.rupees < play->msgCtx.unk12070) {
+ } else if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk12070) {
play_sound(NA_SE_SY_ERROR);
Message_StartTextbox(play, 0x2718, &this->actor);
this->unk_288 = 0x2718;
@@ -280,13 +281,13 @@ void func_80B269A4(EnKendoJs* this, PlayState* play) {
break;
case 0x2719:
- func_801477B4(play);
- player->stateFlags1 |= 0x20;
+ Message_CloseTextbox(play);
+ player->stateFlags1 |= PLAYER_STATE1_20;
func_80B2701C(this);
break;
case 0x271A:
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80B2714C(this);
break;
@@ -296,15 +297,15 @@ void func_80B269A4(EnKendoJs* this, PlayState* play) {
break;
case 0x273B:
- func_801477B4(play);
- func_80112AFC(play);
- player->stateFlags1 |= 0x20;
+ Message_CloseTextbox(play);
+ Interface_InitMinigame(play);
+ player->stateFlags1 |= PLAYER_STATE1_20;
func_80B273D0(this);
break;
case 0x272D:
- func_801477B4(play);
- gSaveContext.minigameState = 3;
+ Message_CloseTextbox(play);
+ gSaveContext.minigameStatus = MINIGAME_STATUS_END;
func_80B276C4(this);
func_80B276D8(this, play);
break;
@@ -334,10 +335,10 @@ void func_80B26AFC(EnKendoJs* this, PlayState* play) {
}
if ((this->unk_288 == 0x272E) || (this->unk_288 == 0x272F) || (this->unk_288 == 0x2730)) {
- gSaveContext.minigameState = 3;
+ gSaveContext.minigameStatus = MINIGAME_STATUS_END;
}
- player->stateFlags1 &= ~0x20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
func_80B26538(this);
}
@@ -358,18 +359,18 @@ s32 func_80B26BF8(EnKendoJs* this, PlayState* play) {
return 0;
}
- if ((player->meleeWeaponState != 0) || (player->stateFlags3 & 0x8000000) ||
- (player->stateFlags2 & 0x80000)) {
+ if ((player->meleeWeaponState != 0) || (player->stateFlags3 & PLAYER_STATE3_8000000) ||
+ (player->stateFlags2 & PLAYER_STATE2_80000)) {
return 1;
}
break;
case 1:
- if ((player->stateFlags3 & 0x8000000)) {
+ if ((player->stateFlags3 & PLAYER_STATE3_8000000)) {
return 0;
}
- if ((player->meleeWeaponState != 0) || (player->stateFlags2 & 0x80000)) {
+ if ((player->meleeWeaponState != 0) || (player->stateFlags2 & PLAYER_STATE2_80000)) {
return 1;
}
break;
@@ -379,8 +380,8 @@ s32 func_80B26BF8(EnKendoJs* this, PlayState* play) {
return 0;
}
- if ((player->meleeWeaponState != 0) || (player->stateFlags3 & 0x8000000) ||
- (player->stateFlags2 & 0x80000)) {
+ if ((player->meleeWeaponState != 0) || (player->stateFlags3 & PLAYER_STATE3_8000000) ||
+ (player->stateFlags2 & PLAYER_STATE2_80000)) {
return 1;
}
this->unk_28E = 0;
@@ -393,7 +394,8 @@ s32 func_80B26BF8(EnKendoJs* this, PlayState* play) {
return 0;
}
- if ((this->unk_28E == 1) || (player->stateFlags3 & 0x8000000) || (player->stateFlags2 & 0x80000)) {
+ if ((this->unk_28E == 1) || (player->stateFlags3 & PLAYER_STATE3_8000000) ||
+ (player->stateFlags2 & PLAYER_STATE2_80000)) {
this->unk_28E = 0;
return 1;
}
@@ -406,7 +408,8 @@ s32 func_80B26BF8(EnKendoJs* this, PlayState* play) {
return 0;
}
- if ((this->unk_28E == 1) || (player->stateFlags3 & 0x8000000) || (player->stateFlags2 & 0x80000)) {
+ if ((this->unk_28E == 1) || (player->stateFlags3 & PLAYER_STATE3_8000000) ||
+ (player->stateFlags2 & PLAYER_STATE2_80000)) {
this->unk_28E = 0;
return 1;
}
@@ -418,7 +421,8 @@ s32 func_80B26BF8(EnKendoJs* this, PlayState* play) {
return 0;
}
- if ((this->unk_28E == 1) || (player->stateFlags3 & 0x8000000) || (player->stateFlags2 & 0x80000)) {
+ if ((this->unk_28E == 1) || (player->stateFlags3 & PLAYER_STATE3_8000000) ||
+ (player->stateFlags2 & PLAYER_STATE2_80000)) {
this->unk_28E = 0;
return 1;
}
@@ -431,7 +435,8 @@ s32 func_80B26BF8(EnKendoJs* this, PlayState* play) {
return 0;
}
- if ((this->unk_28E == 1) || (player->stateFlags3 & 0x8000000) || (player->stateFlags2 & 0x80000)) {
+ if ((this->unk_28E == 1) || (player->stateFlags3 & PLAYER_STATE3_8000000) ||
+ (player->stateFlags2 & PLAYER_STATE2_80000)) {
this->unk_28E = 0;
return 1;
}
@@ -456,7 +461,7 @@ s32 func_80B26F6C(EnKendoJs* this, PlayState* play) {
switch (this->unk_288) {
case 0x271D:
- if (Player_GetMeleeWeaponHeld(player) != 0) {
+ if (Player_GetMeleeWeaponHeld(player) != PLAYER_MELEEWEAPON_NONE) {
Message_StartTextbox(play, 0x272A, &this->actor);
this->unk_288 = 0x272A;
return true;
@@ -488,7 +493,7 @@ void func_80B27030(EnKendoJs* this, PlayState* play) {
this->actor.flags |= ACTOR_FLAG_10000;
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->actor.flags &= ~ACTOR_FLAG_10000;
- player->stateFlags1 &= ~0x20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
func_80B279F0(this, play, 0);
Message_StartTextbox(play, 0x271A, &this->actor);
this->unk_288 = 0x271A;
@@ -500,7 +505,7 @@ void func_80B27030(EnKendoJs* this, PlayState* play) {
}
void func_80B2714C(EnKendoJs* this) {
- gSaveContext.save.weekEventReg[82] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_82_08);
this->unk_28C = 1;
this->unk_290 = 0;
this->unk_284 = 0;
@@ -519,8 +524,8 @@ void func_80B27188(EnKendoJs* this, PlayState* play) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
}
this->unk_286 = 2;
- func_801477B4(play);
- player->stateFlags1 &= ~0x20;
+ Message_CloseTextbox(play);
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
}
} else if (this->unk_286 == 2) {
this->unk_286 = 1;
@@ -530,15 +535,15 @@ void func_80B27188(EnKendoJs* this, PlayState* play) {
switch (func_80B26BF8(this, play)) {
case 0:
this->unk_286 = 0;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
- player->stateFlags1 |= 0x20;
+ Actor_PlaySfx(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
+ player->stateFlags1 |= PLAYER_STATE1_20;
func_80B26EB4(this, play);
break;
case 1:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_ERROR);
+ Actor_PlaySfx(&this->actor, NA_SE_SY_ERROR);
this->unk_286 = 0;
- player->stateFlags1 |= 0x20;
+ player->stateFlags1 |= PLAYER_STATE1_20;
Message_StartTextbox(play, 0x2729, &this->actor);
this->unk_288 = 0x2729;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
@@ -561,14 +566,14 @@ void func_80B27188(EnKendoJs* this, PlayState* play) {
}
if (this->unk_284 == 7) {
- gSaveContext.save.weekEventReg[82] &= (u8)~8;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_82_08);
func_80B26AE8(this);
}
}
}
void func_80B273D0(EnKendoJs* this) {
- gSaveContext.save.weekEventReg[82] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_82_08);
this->unk_290 = 120;
this->unk_284 = 0;
this->unk_286 = 1;
@@ -583,7 +588,7 @@ void func_80B2740C(EnKendoJs* this, PlayState* play) {
if (func_80B278C4(play, sp18)) {
this->unk_28C = 0;
- player->stateFlags1 &= ~0x20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
this->actionFunc = func_80B274BC;
}
}
@@ -600,8 +605,8 @@ void func_80B274BC(EnKendoJs* this, PlayState* play) {
Message_StartTextbox(play, 0x272E, &this->actor);
this->unk_288 = 0x272E;
}
- player->stateFlags1 |= 0x20;
- gSaveContext.save.weekEventReg[82] &= (u8)~8;
+ player->stateFlags1 |= PLAYER_STATE1_20;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_82_08);
func_80B26AE8(this);
return;
}
@@ -621,16 +626,16 @@ void func_80B274BC(EnKendoJs* this, PlayState* play) {
if (this->unk_28E == 1) {
if ((player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_START) ||
(player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_FINISH)) {
- play->interfaceCtx.unk_25C = 3;
+ play->interfaceCtx.minigamePoints = 3;
if (gSaveContext.minigameScore >= 27) {
- player->stateFlags1 |= 0x20;
+ player->stateFlags1 |= PLAYER_STATE1_20;
}
} else if (player->meleeWeaponAnimation == PLAYER_MWA_STAB_1H) {
- play->interfaceCtx.unk_25C = 2;
+ play->interfaceCtx.minigamePoints = 2;
} else {
- play->interfaceCtx.unk_25C = 1;
+ play->interfaceCtx.minigamePoints = 1;
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
this->unk_28E = 0;
}
func_80B2783C(this, play);
@@ -644,10 +649,10 @@ void func_80B276D8(EnKendoJs* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL;
func_80B27760(this);
- } else if (!(gSaveContext.save.weekEventReg[63] & 0x20)) {
- Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 800.0f, 100.0f);
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_63_20)) {
+ Actor_OfferGetItem(&this->actor, play, GI_HEART_PIECE, 800.0f, 100.0f);
} else {
- Actor_PickUp(&this->actor, play, GI_RUPEE_RED, 800.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_RUPEE_RED, 800.0f, 100.0f);
}
}
@@ -659,8 +664,8 @@ void func_80B27774(EnKendoJs* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- if (!(gSaveContext.save.weekEventReg[63] & 0x20)) {
- gSaveContext.save.weekEventReg[63] |= 0x20;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_63_20)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_63_20);
Message_StartTextbox(play, 0x272F, &this->actor);
this->unk_288 = 0x272F;
} else {
@@ -668,16 +673,16 @@ void func_80B27774(EnKendoJs* this, PlayState* play) {
this->unk_288 = 0x2730;
}
func_80B26AE8(this);
- player->stateFlags1 &= ~0x20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
} else {
- func_800B85E0(&this->actor, play, 1000.0f, -1);
+ func_800B85E0(&this->actor, play, 1000.0f, PLAYER_IA_MINUS1);
}
}
void func_80B2783C(EnKendoJs* this, PlayState* play) {
- if (this->actor.cutscene != -1) {
+ if (this->actor.csId != CS_ID_NONE) {
Camera_ChangeDataIdx(play->cameraPtrs[CAM_ID_MAIN],
- ActorCutscene_GetCutscene(this->actor.cutscene)->csCamSceneDataId);
+ CutsceneManager_GetCutsceneEntry(this->actor.csId)->csCamId);
}
}
diff --git a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.h b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.h
index 2d49058e8..1992f7234 100644
--- a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.h
+++ b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.h
@@ -32,6 +32,4 @@ typedef struct EnKendoJs {
/* 0x292 */ u8 unk_292;
} EnKendoJs; // size = 0x294
-extern const ActorInit En_Kendo_Js_InitVars;
-
#endif // Z_EN_KENDO_JS_H
diff --git a/src/overlays/actors/ovl_En_Kgy/overlay.cfg b/src/overlays/actors/ovl_En_Kgy/overlay.cfg
deleted file mode 100644
index 9a9ddfd5c..000000000
--- a/src/overlays/actors/ovl_En_Kgy/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Kgy
-z_en_kgy.c
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 c9349b2c5..f30f55a33 100644
--- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c
+++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c
@@ -31,7 +31,7 @@ void func_80B425A0(EnKgy* this, PlayState* play);
void func_80B42714(EnKgy* this, PlayState* play);
void func_80B42D28(EnKgy* this, PlayState* play);
-const ActorInit En_Kgy_InitVars = {
+ActorInit En_Kgy_InitVars = {
ACTOR_EN_KGY,
ACTORCAT_NPC,
FLAGS,
@@ -45,7 +45,7 @@ const ActorInit En_Kgy_InitVars = {
void EnKgy_Init(Actor* thisx, PlayState* play) {
EnKgy* this = THIS;
- s16 cs;
+ s16 csId;
s32 i;
Actor_SetScale(&this->actor, 0.01f);
@@ -58,10 +58,11 @@ void EnKgy_Init(Actor* thisx, PlayState* play) {
this->zubora = EnKgy_FindZubora(play);
this->iceBlock = EnKgy_FindIceBlock(play);
Flags_UnsetSwitch(play, ENKGY_GET_FE00(&this->actor) + 1);
- if (Flags_GetSwitch(play, ENKGY_GET_FE00(&this->actor)) || (gSaveContext.save.weekEventReg[33] & 0x80)) {
+ if (Flags_GetSwitch(play, ENKGY_GET_FE00(&this->actor)) ||
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) {
Flags_SetSwitch(play, ENKGY_GET_FE00(&this->actor) + 1);
play->envCtx.lightSettingOverride = 1;
- gSaveContext.save.weekEventReg[21] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_21_01);
if (!func_80B40D64(play)) {
EnKgy_ChangeAnim(this, 4, ANIMMODE_LOOP, 0);
this->actionFunc = func_80B425A0;
@@ -78,7 +79,7 @@ void EnKgy_Init(Actor* thisx, PlayState* play) {
this->actor.textId = 0xC50;
}
} else {
- if (gSaveContext.save.weekEventReg[20] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_80)) {
EnKgy_ChangeAnim(this, 4, ANIMMODE_LOOP, 0);
} else {
EnKgy_ChangeAnim(this, 0, ANIMMODE_LOOP, 0);
@@ -86,12 +87,12 @@ void EnKgy_Init(Actor* thisx, PlayState* play) {
this->actionFunc = func_80B42D28;
}
- cs = this->actor.cutscene;
- for (i = 0; i < ARRAY_COUNT(this->unk_2D4); i++) {
- this->unk_2D4[i] = cs;
- if (cs != -1) {
- this->actor.cutscene = cs;
- cs = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene);
+ csId = this->actor.csId;
+ for (i = 0; i < ARRAY_COUNT(this->csIdList); i++) {
+ this->csIdList[i] = csId;
+ if (csId != CS_ID_NONE) {
+ this->actor.csId = csId;
+ csId = CutsceneManager_GetAdditionalCsId(this->actor.csId);
}
}
@@ -151,33 +152,33 @@ ObjIcePoly* EnKgy_FindIceBlock(PlayState* play) {
}
void func_80B40C74(PlayState* play) {
- gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 |= 1;
+ gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 |= 1;
if (CURRENT_DAY == 1) {
- gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 |= 2;
+ gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 |= 2;
} else {
- gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 &= ~2;
+ gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 &= ~2;
}
}
void func_80B40D00(PlayState* play) {
- gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 |= 4;
+ gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 |= 4;
}
void func_80B40D30(PlayState* play) {
- gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 &= ~7;
+ gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 &= ~7;
}
s32 func_80B40D64(PlayState* play) {
- return gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 & 1;
+ return gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 & 1;
}
s32 func_80B40D8C(PlayState* play) {
- return gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 & 4;
+ return gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 & 4;
}
s32 func_80B40DB4(PlayState* play) {
if ((CURRENT_DAY == 3) ||
- ((CURRENT_DAY == 2) && (gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 & 2))) {
+ ((CURRENT_DAY == 2) && (gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 & 2))) {
return true;
}
return false;
@@ -203,7 +204,7 @@ s32 func_80B40E54(EnKgy* this) {
}
void func_80B40E74(EnKgy* this, PlayState* play, u16 textId) {
- func_80151938(play, textId);
+ Message_ContinueTextbox(play, textId);
this->actor.textId = textId;
func_80B40E18(this, this->actor.textId);
}
@@ -227,14 +228,14 @@ void func_80B40EE8(EnKgy* this, PlayState* play) {
}
}
- if ((this->unk_2E0 != -1) && (ActorCutscene_GetCurrentIndex() != this->unk_2D4[this->unk_2E0])) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->unk_2D4[this->unk_2E0]);
- } else if (ActorCutscene_GetCanPlayNext(this->unk_2D4[this->unk_2E0])) {
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D4[this->unk_2E0], &this->actor);
+ if ((this->csIdIndex != -1) && (CutsceneManager_GetCurrentCsId() != this->csIdList[this->csIdIndex])) {
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csIdList[this->csIdIndex]);
+ } else if (CutsceneManager_IsNext(this->csIdList[this->csIdIndex])) {
+ CutsceneManager_StartWithPlayerCs(this->csIdList[this->csIdIndex], &this->actor);
} else {
- ActorCutscene_SetIntentToPlay(this->unk_2D4[this->unk_2E0]);
+ CutsceneManager_Queue(this->csIdList[this->csIdIndex]);
}
}
@@ -250,7 +251,7 @@ void func_80B40EE8(EnKgy* this, PlayState* play) {
}
if (((temp_f0 < 0.15f) && (temp_f0 > -0.15f)) || (this->unk_2E6 == 0)) {
- func_80151938(play, this->actor.textId);
+ Message_ContinueTextbox(play, this->actor.textId);
this->unk_29C &= ~0x2;
func_80B40E18(this, this->actor.textId);
@@ -304,7 +305,7 @@ void func_80B411DC(EnKgy* this, PlayState* play, s32 arg2) {
case 0:
this->unk_2B4 = this->unk_2A8;
this->actor.focus.pos = this->unk_2A8;
- this->unk_2E0 = 0;
+ this->csIdIndex = 0;
break;
case 1:
@@ -312,7 +313,7 @@ void func_80B411DC(EnKgy* this, PlayState* play, s32 arg2) {
this->unk_2B4 = this->zubora->actor.focus.pos;
this->actor.focus.pos = this->zubora->actor.focus.pos;
}
- this->unk_2E0 = 1;
+ this->csIdIndex = 1;
break;
case 2:
@@ -320,7 +321,7 @@ void func_80B411DC(EnKgy* this, PlayState* play, s32 arg2) {
this->unk_2B4 = this->iceBlock->actor.world.pos;
this->actor.focus.pos = this->iceBlock->actor.focus.pos;
}
- this->unk_2E0 = 2;
+ this->csIdIndex = 2;
break;
case 3:
@@ -328,7 +329,7 @@ void func_80B411DC(EnKgy* this, PlayState* play, s32 arg2) {
if (this->zubora != NULL) {
this->actor.focus.pos = this->zubora->actor.focus.pos;
}
- this->unk_2E0 = 3;
+ this->csIdIndex = 3;
break;
case 4:
@@ -336,13 +337,13 @@ void func_80B411DC(EnKgy* this, PlayState* play, s32 arg2) {
this->unk_2B4 = this->zubora->actor.focus.pos;
this->actor.focus.pos = this->zubora->actor.focus.pos;
}
- this->unk_2E0 = 4;
+ this->csIdIndex = 4;
break;
}
}
void func_80B41368(EnKgy* this, PlayState* play, s32 arg2) {
- ActorCutscene_Stop(this->unk_2D4[this->unk_2E0]);
+ CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
func_80B411DC(this, play, arg2);
this->unk_2E6 = 20;
this->unk_29C |= 2;
@@ -353,8 +354,8 @@ void func_80B413C8(EnKgy* this) {
this->unk_2B4 = sp1C;
this->actor.focus.pos = sp1C;
- ActorCutscene_Stop(this->unk_2D4[this->unk_2E0]);
- this->unk_2E0 = -1;
+ CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
+ this->csIdIndex = -1;
this->unk_2E6 = 0;
this->unk_29C &= ~2;
}
@@ -443,7 +444,7 @@ void func_80B4163C(EnKgy* this, PlayState* play) {
this->lightInfo.params.point.y = this->unk_2C0.y;
this->lightInfo.params.point.z = this->unk_2C0.z;
this->unk_300 = 200;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SWORD_FORGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SWORD_FORGE);
break;
}
@@ -456,9 +457,9 @@ void func_80B4163C(EnKgy* this, PlayState* play) {
void func_80B417B8(EnKgy* this, PlayState* play) {
func_80B4163C(this, play);
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80B413C8(this);
- this->actor.flags &= ~ACTOR_FLAG_100;
+ this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED;
this->actionFunc = func_80B419B0;
func_80B40E18(this, 7);
}
@@ -467,12 +468,12 @@ void func_80B417B8(EnKgy* this, PlayState* play) {
void func_80B41858(EnKgy* this, PlayState* play) {
func_80B4163C(this, play);
- if (ActorCutscene_GetCanPlayNext(this->unk_2D4[5])) {
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D4[5], &this->actor);
+ if (CutsceneManager_IsNext(this->csIdList[5])) {
+ CutsceneManager_StartWithPlayerCs(this->csIdList[5], &this->actor);
this->actionFunc = func_80B419B0;
func_80B40E18(this, 7);
} else {
- ActorCutscene_SetIntentToPlay(this->unk_2D4[5]);
+ CutsceneManager_Queue(this->csIdList[5]);
}
}
@@ -481,12 +482,12 @@ void func_80B418C4(EnKgy* this, PlayState* play) {
if ((this->unk_2E4 <= 0) && !(this->unk_29C & 2) && (func_80B40E54(this) == 0) &&
(Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play) &&
((play->msgCtx.currentTextId == 0xC4E) || (play->msgCtx.currentTextId == 0xC4F))) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actor.textId = 0xC4F;
func_80B413C8(this);
- ActorCutscene_SetIntentToPlay(this->unk_2D4[5]);
+ CutsceneManager_Queue(this->csIdList[5]);
this->actionFunc = func_80B41858;
- this->actor.flags &= ~ACTOR_FLAG_100;
+ this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED;
}
func_80B40EE8(this, play);
}
@@ -496,7 +497,7 @@ void func_80B419B0(EnKgy* this, PlayState* play) {
Player* player = GET_PLAYER(play);
func_80B4163C(this, play);
- if (Actor_ProcessTalkRequest(&this->actor, &play->state) || (&this->actor == player->targetActor)) {
+ if (Actor_ProcessTalkRequest(&this->actor, &play->state) || (&this->actor == player->talkActor)) {
func_80B411DC(this, play, 4);
func_80B40E18(this, this->actor.textId);
if (this->actor.textId == 0xC37) {
@@ -518,19 +519,19 @@ void func_80B41A48(EnKgy* this, PlayState* play) {
}
void func_80B41ACC(EnKgy* this, PlayState* play) {
- s32 itemActionParam;
+ PlayerItemAction itemAction;
Player* player = GET_PLAYER(play);
SkelAnime_Update(&this->skelAnime);
if (Message_GetState(&play->msgCtx) == TEXT_STATE_16) {
- itemActionParam = func_80123810(play);
- if (itemActionParam != PLAYER_AP_NONE) {
+ itemAction = func_80123810(play);
+ if (itemAction != PLAYER_IA_NONE) {
this->actionFunc = func_80B41E18;
}
- if (itemActionParam > PLAYER_AP_NONE) {
- func_801477B4(play);
- if (itemActionParam == PLAYER_AP_BOTTLE_GOLD_DUST) {
+ if (itemAction > PLAYER_IA_NONE) {
+ Message_CloseTextbox(play);
+ if (itemAction == PLAYER_IA_BOTTLE_GOLD_DUST) {
if (this->unk_29C & 0x10) {
this->actor.textId = 0xC55;
player->actor.textId = 0xC55;
@@ -547,7 +548,7 @@ void func_80B41ACC(EnKgy* this, PlayState* play) {
player->actor.textId = 0xC47;
}
this->unk_29C |= 8;
- } else if (itemActionParam < PLAYER_AP_NONE) {
+ } else if (itemAction <= PLAYER_IA_MINUS1) {
if (this->unk_29C & 0x10) {
this->actor.textId = 0xC57;
} else {
@@ -564,7 +565,7 @@ void func_80B41ACC(EnKgy* this, PlayState* play) {
void func_80B41C30(EnKgy* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (&this->actor != player->targetActor) {
+ if (&this->actor != player->talkActor) {
this->actionFunc = func_80B42508;
}
}
@@ -573,7 +574,7 @@ void func_80B41C54(EnKgy* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (Actor_TextboxIsClosing(&this->actor, play)) {
this->actionFunc = func_80B41C30;
- this->actor.flags &= ~ACTOR_FLAG_100;
+ this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED;
}
func_80B40EE8(this, play);
}
@@ -586,7 +587,7 @@ void func_80B41CBC(EnKgy* this, PlayState* play) {
this->actionFunc = func_80B41E18;
func_80B411DC(this, play, 4);
} else {
- func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1);
}
}
@@ -595,9 +596,9 @@ void func_80B41D64(EnKgy* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
this->actionFunc = func_80B41CBC;
this->actor.flags |= ACTOR_FLAG_10000;
- func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1);
} else {
- Actor_PickUp(&this->actor, play, this->unk_2EA, 2000.0f, 1000.0f);
+ Actor_OfferGetItem(&this->actor, play, this->unk_2EA, 2000.0f, 1000.0f);
}
func_80B40EE8(this, play);
}
@@ -621,7 +622,7 @@ void func_80B41E18(EnKgy* this, PlayState* play) {
case 0xC3B:
switch (play->msgCtx.choiceIndex) {
case 0:
- if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) {
play_sound(NA_SE_SY_ERROR);
func_80B40E74(this, play, 0xC3F);
} else {
@@ -678,7 +679,7 @@ void func_80B41E18(EnKgy* this, PlayState* play) {
case 0xC39:
case 0xC52:
case 0xC54:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80B425A0;
func_80B413C8(this);
func_80B40E18(this, 5);
@@ -698,7 +699,7 @@ void func_80B41E18(EnKgy* this, PlayState* play) {
break;
case 0xC3D:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80B41C54;
this->actor.textId = 0xC3E;
func_80B413C8(this);
@@ -734,7 +735,7 @@ void func_80B41E18(EnKgy* this, PlayState* play) {
case 0xC57:
this->unk_29C &= ~0x8;
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80B41C54;
this->actor.textId = 0xC58;
func_80B413C8(this);
@@ -743,8 +744,8 @@ void func_80B41E18(EnKgy* this, PlayState* play) {
case 0xC46:
case 0xC55:
- func_80123D50(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_AP_BOTTLE);
- player->exchangeItemId = PLAYER_AP_NONE;
+ Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY);
+ player->exchangeItemId = PLAYER_IA_NONE;
this->unk_29C &= ~0x8;
play->msgCtx.msgLength = 0;
func_80B41368(this, play, 4);
@@ -759,7 +760,7 @@ void func_80B41E18(EnKgy* this, PlayState* play) {
case 0xC47:
func_80B40BC0(this, 1);
if (this->unk_29C & 8) {
- player->exchangeItemId = PLAYER_AP_NONE;
+ player->exchangeItemId = PLAYER_IA_NONE;
this->unk_29C &= ~8;
}
func_80B40EBC(this, play, textId);
@@ -780,7 +781,7 @@ void func_80B41E18(EnKgy* this, PlayState* play) {
case 0xC4A:
case 0xC4B:
func_80B40BC0(this, 4);
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80B41C54;
this->actor.textId = 0xC4B;
func_80B413C8(this);
@@ -795,10 +796,10 @@ void func_80B41E18(EnKgy* this, PlayState* play) {
this->unk_2EA = 56;
this->actor.textId = 0xC51;
}
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80B41D64;
func_80B413C8(this);
- Actor_PickUp(&this->actor, play, this->unk_2EA, 2000.0f, 1000.0f);
+ Actor_OfferGetItem(&this->actor, play, this->unk_2EA, 2000.0f, 1000.0f);
break;
case 0xC51:
@@ -810,7 +811,7 @@ void func_80B41E18(EnKgy* this, PlayState* play) {
break;
case 0xC56:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80B41C54;
this->actor.textId = 0xC56;
func_80B413C8(this);
@@ -831,7 +832,7 @@ void func_80B42508(EnKgy* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
this->actor.focus.pos = this->unk_2A8;
- if (Actor_ProcessTalkRequest(&this->actor, &play->state) || (&this->actor == player->targetActor)) {
+ if (Actor_ProcessTalkRequest(&this->actor, &play->state) || (&this->actor == player->talkActor)) {
this->actionFunc = func_80B41E18;
func_80B411DC(this, play, 4);
func_80B40E18(this, this->actor.textId);
@@ -855,9 +856,9 @@ void func_80B42660(EnKgy* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
this->actor.focus.pos = this->unk_2A8;
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80B413C8(this);
- this->actor.flags &= ~ACTOR_FLAG_100;
+ this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED;
this->actionFunc = func_80B42714;
func_80B40E18(this, 7);
}
@@ -870,7 +871,7 @@ void func_80B42714(EnKgy* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
this->actor.focus.pos = this->unk_2A8;
- if (Actor_ProcessTalkRequest(&this->actor, &play->state) || (&this->actor == player->targetActor)) {
+ if (Actor_ProcessTalkRequest(&this->actor, &play->state) || (&this->actor == player->talkActor)) {
func_80B411DC(this, play, 4);
func_80B40E18(this, this->actor.textId);
if (this->actor.textId == 0xC37) {
@@ -918,7 +919,7 @@ void func_80B427C8(EnKgy* this, PlayState* play) {
break;
case 0xC34:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80B41C54;
func_80B413C8(this);
func_80B40E18(this, 6);
@@ -948,7 +949,7 @@ void func_80B4296C(EnKgy* this, PlayState* play) {
this->actor.flags &= ~ACTOR_FLAG_10000;
} else {
this->actor.flags |= ACTOR_FLAG_10000;
- func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_NONE);
+ func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_NONE);
}
}
@@ -1032,7 +1033,7 @@ void func_80B42A8C(EnKgy* this, PlayState* play) {
case 0xC2C:
case 0xC2F:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80B42D28;
func_80B413C8(this);
func_80B40E18(this, 1);
@@ -1054,7 +1055,7 @@ void func_80B42D28(EnKgy* this, PlayState* play) {
func_80B40BC0(this, 1);
} else {
EnKgy_ChangeAnim(this, 5, ANIMMODE_ONCE, -5.0f);
- gSaveContext.save.weekEventReg[20] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_20_80);
}
func_80B411DC(this, play, 0);
func_80B40E18(this, this->actor.textId);
@@ -1062,7 +1063,7 @@ void func_80B42D28(EnKgy* this, PlayState* play) {
if (Flags_GetSwitch(play, ENKGY_GET_FE00(&this->actor))) {
this->actor.textId = 0xC30;
this->actionFunc = func_80B4296C;
- gSaveContext.save.weekEventReg[21] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_21_01);
} else if (this->actor.xzDistToPlayer < 200.0f) {
if (this->unk_2D2 == 4) {
this->actor.textId = 0xC2D;
@@ -1134,7 +1135,7 @@ void func_80B43074(EnKgy* this, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
func_8012C28C(play->state.gfxCtx);
- func_800B8050(&this->actor, play, MTXMODE_NEW);
+ func_800B8050(&this->actor, play, 0);
Matrix_Push();
Matrix_Translate(-800.0f, 3100.0f, 8400.0f, MTXMODE_APPLY);
Matrix_RotateXS(0x4000, MTXMODE_APPLY);
@@ -1149,10 +1150,10 @@ void func_80B43074(EnKgy* this, PlayState* play) {
gSPMatrix(gfx, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
if (func_80B40D8C(play)) {
- gSPDisplayList(&gfx[1], gameplay_keep_DL_001D00);
+ gSPDisplayList(&gfx[1], gRazorSwordHandleDL);
gSPDisplayList(&gfx[2], object_kgy_DL_00F180);
} else {
- gSPDisplayList(&gfx[1], gameplay_keep_DL_0021A8);
+ gSPDisplayList(&gfx[1], gKokiriSwordHandleDL);
gSPDisplayList(&gfx[2], object_kgy_DL_00E8F0);
}
POLY_OPA_DISP = &gfx[3];
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 ce7deceb4..8207678fd 100644
--- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h
+++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h
@@ -25,8 +25,8 @@ typedef struct EnKgy {
/* 0x2C0 */ Vec3f unk_2C0;
/* 0x2CC */ Vec3s unk_2CC;
/* 0x2D2 */ s16 unk_2D2;
- /* 0x2D4 */ s16 unk_2D4[6];
- /* 0x2E0 */ s16 unk_2E0;
+ /* 0x2D4 */ s16 csIdList[6];
+ /* 0x2E0 */ s16 csIdIndex;
/* 0x2E2 */ s16 unk_2E2;
/* 0x2E4 */ s16 unk_2E4;
/* 0x2E6 */ s16 unk_2E6;
@@ -38,6 +38,4 @@ typedef struct EnKgy {
/* 0x304 */ EnKgyActionFunc actionFunc;
} EnKgy; // size = 0x308
-extern const ActorInit En_Kgy_InitVars;
-
#endif // Z_EN_KGY_H
diff --git a/src/overlays/actors/ovl_En_Kitan/overlay.cfg b/src/overlays/actors/ovl_En_Kitan/overlay.cfg
deleted file mode 100644
index cd24348d5..000000000
--- a/src/overlays/actors/ovl_En_Kitan/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Kitan
-z_en_kitan.c
diff --git a/src/overlays/actors/ovl_En_Kitan/z_en_kitan.c b/src/overlays/actors/ovl_En_Kitan/z_en_kitan.c
index f928c2393..c9d40c1e7 100644
--- a/src/overlays/actors/ovl_En_Kitan/z_en_kitan.c
+++ b/src/overlays/actors/ovl_En_Kitan/z_en_kitan.c
@@ -15,7 +15,7 @@ void EnKitan_Destroy(Actor* thisx, PlayState* play);
void EnKitan_Update(Actor* thisx, PlayState* play);
#if 0
-const ActorInit En_Kitan_InitVars = {
+ActorInit En_Kitan_InitVars = {
ACTOR_EN_KITAN,
ACTORCAT_NPC,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Kitan/z_en_kitan.h b/src/overlays/actors/ovl_En_Kitan/z_en_kitan.h
index 2ef14c942..9d2ae096b 100644
--- a/src/overlays/actors/ovl_En_Kitan/z_en_kitan.h
+++ b/src/overlays/actors/ovl_En_Kitan/z_en_kitan.h
@@ -13,6 +13,4 @@ typedef struct EnKitan {
/* 0x2D8 */ EnKitanActionFunc actionFunc;
} EnKitan; // size = 0x2DC
-extern const ActorInit En_Kitan_InitVars;
-
#endif // Z_EN_KITAN_H
diff --git a/src/overlays/actors/ovl_En_Knight/overlay.cfg b/src/overlays/actors/ovl_En_Knight/overlay.cfg
deleted file mode 100644
index 150eab3c7..000000000
--- a/src/overlays/actors/ovl_En_Knight/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Knight
-z_en_knight.c
diff --git a/src/overlays/actors/ovl_En_Knight/z_en_knight.c b/src/overlays/actors/ovl_En_Knight/z_en_knight.c
index 17d0e3752..0d80d6020 100644
--- a/src/overlays/actors/ovl_En_Knight/z_en_knight.c
+++ b/src/overlays/actors/ovl_En_Knight/z_en_knight.c
@@ -193,7 +193,7 @@ static ColliderCylinderInit D_809BDC64 = {
{ 20, 40, 0, { 0, 0, 0 } },
};
-const ActorInit En_Knight_InitVars = {
+ActorInit En_Knight_InitVars = {
ACTOR_EN_KNIGHT,
ACTORCAT_BOSS,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Knight/z_en_knight.h b/src/overlays/actors/ovl_En_Knight/z_en_knight.h
index 167a96682..2d413fea3 100644
--- a/src/overlays/actors/ovl_En_Knight/z_en_knight.h
+++ b/src/overlays/actors/ovl_En_Knight/z_en_knight.h
@@ -26,6 +26,4 @@ typedef struct EnKnight {
/* 0x68C */ char pad68C[0x48];
} EnKnight; // size = 0x6D4
-extern const ActorInit En_Knight_InitVars;
-
#endif // Z_EN_KNIGHT_H
diff --git a/src/overlays/actors/ovl_En_Kujiya/overlay.cfg b/src/overlays/actors/ovl_En_Kujiya/overlay.cfg
deleted file mode 100644
index a47b9648b..000000000
--- a/src/overlays/actors/ovl_En_Kujiya/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Kujiya
-z_en_kujiya.c
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 df95a6988..f3005ca05 100644
--- a/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c
+++ b/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c
@@ -9,7 +9,7 @@
#include "z_en_kujiya.h"
#include "objects/object_kujiya/object_kujiya.h"
-#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_8000000)
+#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_CANT_LOCK_ON)
#define THIS ((EnKujiya*)thisx)
@@ -34,7 +34,7 @@ void EnKujiya_TurnToOpen(EnKujiya* this, PlayState* play);
void EnKujiya_SetupTurnToClosed(EnKujiya* this);
void EnKujiya_TurnToClosed(EnKujiya* this, PlayState* play);
-const ActorInit En_Kujiya_InitVars = {
+ActorInit En_Kujiya_InitVars = {
ACTOR_EN_KUJIYA,
ACTORCAT_NPC,
FLAGS,
@@ -46,13 +46,13 @@ const ActorInit En_Kujiya_InitVars = {
(ActorFunc)EnKujiya_Draw,
};
-#define CHECK_LOTTERY_NUMBERS \
- (((u32)((void)0, gSaveContext.save.lotteryCodes[CURRENT_DAY - 1][0]) == \
- ((((void)0, gSaveContext.save.lotteryCodeGuess & 0xFFFF) & 0xF00) >> 8)) && \
- ((u32)((void)0, gSaveContext.save.lotteryCodes[CURRENT_DAY - 1][1]) == \
- ((((void)0, gSaveContext.save.lotteryCodeGuess & 0xFFFF) & 0xF0) >> 4)) && \
- ((u32)((void)0, gSaveContext.save.lotteryCodes[CURRENT_DAY - 1][2]) == \
- (((void)0, gSaveContext.save.lotteryCodeGuess & 0xFFFF) & 0xF)))
+#define CHECK_LOTTERY_NUMBERS \
+ (((u32)((void)0, gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][0]) == \
+ ((((void)0, gSaveContext.save.saveInfo.lotteryCodeGuess & 0xFFFF) & 0xF00) >> 8)) && \
+ ((u32)((void)0, gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][1]) == \
+ ((((void)0, gSaveContext.save.saveInfo.lotteryCodeGuess & 0xFFFF) & 0xF0) >> 4)) && \
+ ((u32)((void)0, gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][2]) == \
+ (((void)0, gSaveContext.save.saveInfo.lotteryCodeGuess & 0xFFFF) & 0xF)))
void EnKujiya_Init(Actor* thisx, PlayState* play) {
EnKujiya* this = THIS;
@@ -111,7 +111,7 @@ void EnKujiya_Wait(EnKujiya* this, PlayState* play) {
void EnKujiya_HandlePlayerChoice(EnKujiya* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
if (play->msgCtx.choiceIndex == 0) { // Buy
- if (gSaveContext.save.playerData.rupees < 10) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < 10) {
play_sound(NA_SE_SY_ERROR);
Message_StartTextbox(play, 0x2B62, &this->actor);
this->textId = 0x2B62; // Not enough Rupees
@@ -147,7 +147,7 @@ void EnKujiya_ChooseNextDialogue(EnKujiya* this, PlayState* play) {
case 0x2B60:
EnKujiya_SetBoughtTicket();
- func_801477B4(play);
+ Message_CloseTextbox(play);
EnKujiya_SetupTurnToClosed(this);
break;
@@ -169,7 +169,7 @@ void EnKujiya_ChooseNextDialogue(EnKujiya* this, PlayState* play) {
break;
case 0x2B66:
- func_801477B4(play);
+ Message_CloseTextbox(play);
EnKujiya_SetupGivePrize(this);
EnKujiya_GivePrize(this, play);
break;
@@ -218,7 +218,7 @@ void EnKujiya_GivePrize(EnKujiya* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
EnKujiya_SetupFinishGivePrize(this);
} else {
- Actor_PickUp(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f);
}
}
@@ -235,19 +235,19 @@ void EnKujiya_FinishGivePrize(EnKujiya* this, PlayState* play) {
s32 EnKujiya_CheckBoughtTicket(void) {
switch (CURRENT_DAY) {
case 1:
- if (gSaveContext.save.weekEventReg[33] & 0x10) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_10)) {
return true;
}
break;
case 2:
- if (gSaveContext.save.weekEventReg[33] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_20)) {
return true;
}
break;
case 3:
- if (gSaveContext.save.weekEventReg[33] & 0x40) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_40)) {
return true;
}
break;
@@ -258,15 +258,15 @@ s32 EnKujiya_CheckBoughtTicket(void) {
void EnKujiya_SetBoughtTicket(void) {
switch (CURRENT_DAY) {
case 1:
- gSaveContext.save.weekEventReg[33] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_33_10);
break;
case 2:
- gSaveContext.save.weekEventReg[33] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_33_20);
break;
case 3:
- gSaveContext.save.weekEventReg[33] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_33_40);
break;
}
}
@@ -277,15 +277,15 @@ void EnKujiya_SetBoughtTicket(void) {
void EnKujiya_UnsetBoughtTicket(void) {
switch (CURRENT_DAY) {
case 1:
- gSaveContext.save.weekEventReg[33] &= (u8)~0x10;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_33_10);
break;
case 2:
- gSaveContext.save.weekEventReg[33] &= (u8)~0x20;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_33_20);
break;
case 3:
- gSaveContext.save.weekEventReg[33] &= (u8)~0x40;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_33_40);
break;
}
}
@@ -296,18 +296,18 @@ void EnKujiya_SetupTurnToOpen(EnKujiya* this) {
}
void EnKujiya_TurnToOpen(EnKujiya* this, PlayState* play) {
- if (this->actor.cutscene != -1) {
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ if (this->actor.csId != CS_ID_NONE) {
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
if (!Math_SmoothStepToS(&this->actor.shape.rot.y, 0x7555, 0xA, 0x16C, 0x16C)) {
if (this->timer > 20) {
- if (ActorCutscene_GetCurrentIndex() == this->actor.cutscene) {
- ActorCutscene_Stop(this->actor.cutscene);
+ if (CutsceneManager_GetCurrentCsId() == this->actor.csId) {
+ CutsceneManager_Stop(this->actor.csId);
}
EnKujiya_SetupWait(this);
} else {
@@ -324,18 +324,18 @@ void EnKujiya_SetupTurnToClosed(EnKujiya* this) {
}
void EnKujiya_TurnToClosed(EnKujiya* this, PlayState* play) {
- if (this->actor.cutscene != -1) {
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ if (this->actor.csId != CS_ID_NONE) {
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
if (!Math_SmoothStepToS(&this->actor.shape.rot.y, 0, 0xA, 0x16C, 0x16C)) {
if (this->timer > 20) {
- if (ActorCutscene_GetCurrentIndex() == this->actor.cutscene) {
- ActorCutscene_Stop(this->actor.cutscene);
+ if (CutsceneManager_GetCurrentCsId() == this->actor.csId) {
+ CutsceneManager_Stop(this->actor.csId);
}
EnKujiya_SetupWait(this);
} else {
diff --git a/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.h b/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.h
index 69fad156e..5d449963b 100644
--- a/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.h
+++ b/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.h
@@ -14,6 +14,4 @@ typedef struct EnKujiya {
/* 0x14A */ s16 textId;
} EnKujiya; // size = 0x14C
-extern const ActorInit En_Kujiya_InitVars;
-
#endif // Z_EN_KUJIYA_H
diff --git a/src/overlays/actors/ovl_En_Kusa/overlay.cfg b/src/overlays/actors/ovl_En_Kusa/overlay.cfg
deleted file mode 100644
index 9cded0ca3..000000000
--- a/src/overlays/actors/ovl_En_Kusa/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Kusa
-z_en_kusa.c
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 2ab13422a..2af87ea90 100644
--- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c
+++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c
@@ -4,6 +4,7 @@
* Description: Grass / Bush
*/
+#include "prevent_bss_reordering.h"
#include "z_en_kusa.h"
#include "objects/object_kusa/object_kusa.h"
#include "objects/gameplay_keep/gameplay_keep.h"
@@ -57,7 +58,7 @@ s16 D_80936CDC;
s16 D_80936CDE;
s16 D_80936CE0;
-const ActorInit En_Kusa_InitVars = {
+ActorInit En_Kusa_InitVars = {
ACTOR_EN_KUSA,
ACTORCAT_PROP,
FLAGS,
@@ -328,7 +329,7 @@ void EnKusa_SpawnBugs(EnKusa* this, PlayState* play) {
for (numBugs = 0; numBugs < 3; numBugs++) {
Actor* bug = Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_INSECT, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 1,
- this->actor.cutscene, this->actor.unk20, 0);
+ this->actor.csId, this->actor.halfDaysBits, 0);
if (bug == NULL) {
break;
@@ -365,7 +366,7 @@ void EnKusa_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sInitChain);
- if (play->csCtx.state != 0) {
+ if (play->csCtx.state != CS_STATE_IDLE) {
this->actor.uncullZoneForward += 1000.0f;
}
EnKusa_InitCollider(&this->actor, play);
@@ -385,7 +386,7 @@ void EnKusa_Init(Actor* thisx, PlayState* play) {
this->actor.world.rot.y = this->actor.shape.rot.y;
}
if (!EnKusa_SnapToFloor(this, play, 0.0f)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
if (EnKusa_GetWaterBox(this, play)) {
@@ -394,7 +395,7 @@ void EnKusa_Init(Actor* thisx, PlayState* play) {
this->objIndex = Object_GetIndex(&play->objectCtx, objectIds[(KUSA_GET_TYPE(&this->actor))]);
if (this->objIndex < 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -470,12 +471,12 @@ void EnKusa_WaitForInteract(EnKusa* this, PlayState* play) {
}
}
if (KUSA_GET_TYPE(&this->actor) == ENKUSA_TYPE_BUSH) {
- Actor_MarkForDeath(&this->actor);
- } else {
- EnKusa_SetupCut(this);
- this->isCut = true;
+ Actor_Kill(&this->actor);
+ return;
}
+ EnKusa_SetupCut(this);
+ this->isCut = true;
} else {
if (!(this->collider.base.ocFlags1 & OC1_TYPE_PLAYER) && (this->actor.xzDistToPlayer > 12.0f)) {
this->collider.base.ocFlags1 |= OC1_TYPE_PLAYER;
@@ -489,7 +490,7 @@ void EnKusa_WaitForInteract(EnKusa* this, PlayState* play) {
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
if (this->actor.xzDistToPlayer < 100.0f) {
if (KUSA_GET_TYPE(&this->actor) != ENKUSA_TYPE_GRASS_2) {
- Actor_LiftActor(&this->actor, play);
+ Actor_OfferCarry(&this->actor, play);
}
}
}
@@ -511,14 +512,16 @@ void EnKusa_LiftedUp(EnKusa* this, PlayState* play) {
if (Actor_HasNoParent(&this->actor, play)) {
this->actor.room = play->roomCtx.curRoom.num;
EnKusa_SetupFall(this);
- this->actor.velocity.x = this->actor.speedXZ * Math_SinS(this->actor.world.rot.y);
- this->actor.velocity.z = this->actor.speedXZ * Math_CosS(this->actor.world.rot.y);
+ this->actor.velocity.x = this->actor.speed * Math_SinS(this->actor.world.rot.y);
+ this->actor.velocity.z = this->actor.speed * Math_CosS(this->actor.world.rot.y);
this->actor.colChkInfo.mass = 80;
this->actor.gravity = -0.1f;
EnKusa_UpdateVelY(this);
EnKusa_RandScaleVecToZero(&this->actor.velocity, 0.005f);
Actor_UpdatePos(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 7.5f, 35.0f, 0.0f, 0xC5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 7.5f, 35.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40 |
+ UPDBGCHECKINFO_FLAG_80);
this->actor.gravity = -3.2f;
} else {
pos.x = this->actor.world.pos.x;
@@ -551,8 +554,9 @@ void EnKusa_Fall(EnKusa* this, PlayState* play) {
this->collider.base.atFlags &= ~AT_HIT;
}
this->timer++;
- if ((this->actor.bgCheckFlags & 0xB) || wasHit || (this->timer >= 100)) {
- if (!(this->actor.bgCheckFlags & 0x20)) {
+ if ((this->actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH | BGCHECKFLAG_WALL)) || wasHit ||
+ (this->timer >= 100)) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_WATER)) {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_EV_PLANT_BROKEN);
}
EnKusa_SpawnFragments(this, play);
@@ -560,7 +564,7 @@ void EnKusa_Fall(EnKusa* this, PlayState* play) {
switch (KUSA_GET_TYPE(&this->actor)) {
case ENKUSA_TYPE_BUSH:
case ENKUSA_TYPE_GRASS:
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
break;
case ENKUSA_TYPE_REGROWING_GRASS:
@@ -570,7 +574,7 @@ void EnKusa_Fall(EnKusa* this, PlayState* play) {
}
} else {
- if (this->actor.bgCheckFlags & 0x40) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) {
contactPos.y = this->actor.world.pos.y + this->actor.depthInWater;
for (angleOffset = 0, i = 0; i < 4; i++, angleOffset += 0x4000) {
contactPos.x =
@@ -592,7 +596,7 @@ void EnKusa_Fall(EnKusa* this, PlayState* play) {
rotSpeedXtarget >>= 1;
rotSpeedY >>= 1;
rotSpeedYtarget >>= 1;
- this->actor.bgCheckFlags &= ~0x40;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_WATER_TOUCH;
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EV_DIVE_INTO_WATER_L);
}
EnKusa_UpdateVelY(this);
@@ -602,7 +606,9 @@ void EnKusa_Fall(EnKusa* this, PlayState* play) {
this->actor.shape.rot.y += rotSpeedY;
EnKusa_RandScaleVecToZero(&this->actor.velocity, 0.05f);
Actor_UpdatePos(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 7.5f, 35.0f, 0.0f, 0xC5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 7.5f, 35.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40 |
+ UPDBGCHECKINFO_FLAG_80);
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
@@ -682,7 +688,8 @@ void EnKusa_Update(Actor* thisx, PlayState* play2) {
} else {
this->actor.shape.yOffset = 0.0f;
}
- if ((kusaGameplayFrames != play->gameplayFrames) && (play->roomCtx.curRoom.unk3 == 0)) {
+ if ((kusaGameplayFrames != play->gameplayFrames) &&
+ (play->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_0)) {
EnKusa_Sway();
kusaGameplayFrames = play->gameplayFrames;
}
@@ -694,12 +701,13 @@ void EnKusa_DrawBush(Actor* thisx, PlayState* play2) {
if ((this->actor.projectedPos.z <= 1200.0f) || ((this->isInWater & 1) && (this->actor.projectedPos.z < 1300.0f))) {
- if ((play->roomCtx.curRoom.unk3 == 0) && (this->actionFunc == EnKusa_WaitForInteract) &&
- (this->actor.projectedPos.z > -150.0f) && (this->actor.projectedPos.z < 400.0f)) {
+ if ((play->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_0) &&
+ (this->actionFunc == EnKusa_WaitForInteract) && (this->actor.projectedPos.z > -150.0f) &&
+ (this->actor.projectedPos.z < 400.0f)) {
EnKusa_ApplySway(&D_80936AD8[this->kusaMtxIdx]);
}
- Gfx_DrawDListOpa(play, gKusaBushType1);
+ Gfx_DrawDListOpa(play, gKusaBushType1DL);
} else if (this->actor.projectedPos.z < 1300.0f) {
s32 alpha;
@@ -711,7 +719,7 @@ void EnKusa_DrawBush(Actor* thisx, PlayState* play2) {
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);
- gSPDisplayList(POLY_XLU_DISP++, gKusaBushType2);
+ gSPDisplayList(POLY_XLU_DISP++, gKusaBushType2DL);
CLOSE_DISPS(play->state.gfxCtx);
}
@@ -723,7 +731,8 @@ void EnKusa_DrawGrass(Actor* thisx, PlayState* play) {
if (this->isCut) {
Gfx_DrawDListOpa(play, gKusaStump);
} else {
- if ((play->roomCtx.curRoom.unk3 == 0) && (this->actionFunc == EnKusa_WaitForInteract)) {
+ if ((play->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_0) &&
+ (this->actionFunc == EnKusa_WaitForInteract)) {
if ((this->actor.projectedPos.z > -150.0f) && (this->actor.projectedPos.z < 400.0f)) {
EnKusa_ApplySway(&D_80936AD8[this->kusaMtxIdx]);
}
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 eca474d5f..56f55af3e 100644
--- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h
+++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h
@@ -25,8 +25,6 @@ typedef struct EnKusa {
/* 0x198 */ u8 isInWater;
} EnKusa; // size = 0x19C
-extern const ActorInit En_Kusa_InitVars;
-
#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)
diff --git a/src/overlays/actors/ovl_En_Kusa2/overlay.cfg b/src/overlays/actors/ovl_En_Kusa2/overlay.cfg
deleted file mode 100644
index 0e08a700b..000000000
--- a/src/overlays/actors/ovl_En_Kusa2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Kusa2
-z_en_kusa2.c
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 fdf3cc9ac..8e2d194a6 100644
--- a/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c
+++ b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c
@@ -4,6 +4,7 @@
* 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"
@@ -44,16 +45,16 @@ void func_80A5E6F0(Actor* thisx, PlayState* play);
void func_80A5E9B4(Actor* thisx, PlayState* play);
void func_80A5EA48(Actor* thisx, PlayState* play);
-static EnKusa2UnkBssStruct D_80A5F1C0;
-static u32 D_80A60900;
-static MtxF D_80A60908[8];
-static s16 D_80A60B08;
-static s16 D_80A60B0A;
-static s16 D_80A60B0C;
-static s16 D_80A60B0E;
-static s16 D_80A60B10;
+EnKusa2UnkBssStruct D_80A5F1C0;
+u32 D_80A60900;
+MtxF D_80A60908[8];
+s16 D_80A60B08;
+s16 D_80A60B0A;
+s16 D_80A60B0C;
+s16 D_80A60B0E;
+s16 D_80A60B10;
-const ActorInit En_Kusa2_InitVars = {
+ActorInit En_Kusa2_InitVars = {
ACTOR_EN_KUSA2,
ACTORCAT_PROP,
FLAGS,
@@ -85,11 +86,11 @@ static ColliderCylinderInit sCylinderInit = {
{ 6, 44, 0, { 0, 0, 0 } },
};
-static u8 D_80A5EAEC = 1;
-static s16 D_80A5EAF0 = 0;
-static Vec3s D_80A5EAF4 = { 0, 0, 0 };
-static Vec3s D_80A5EAFC = { 0, 0, 0 };
-static Vec3s D_80A5EB04 = { 0, 0, 0 };
+u8 D_80A5EAEC = 1;
+s16 D_80A5EAF0 = 0;
+Vec3s D_80A5EAF4 = { 0, 0, 0 };
+Vec3s D_80A5EAFC = { 0, 0, 0 };
+Vec3s D_80A5EB04 = { 0, 0, 0 };
void func_80A5B160(EnKusa2* this, PlayState* play) {
s32 i;
@@ -101,7 +102,7 @@ void func_80A5B160(EnKusa2* this, PlayState* play) {
ptr = this->unk_194;
actor = (EnKusa2*)Actor_SpawnAsChildAndCutscene(
&play->actorCtx, play, ACTOR_EN_KUSA2, this->actor.world.pos.x, this->actor.world.pos.y,
- this->actor.world.pos.z, 0, Rand_Next() >> 0x10, 0, 1, this->actor.cutscene, this->actor.unk20, NULL);
+ this->actor.world.pos.z, 0, Rand_Next() >> 0x10, 0, 1, this->actor.csId, this->actor.halfDaysBits, NULL);
*ptr = actor;
if (*ptr != NULL) {
@@ -117,7 +118,7 @@ void func_80A5B160(EnKusa2* this, PlayState* play) {
actor = (EnKusa2*)Actor_SpawnAsChildAndCutscene(
&play->actorCtx, play, ACTOR_EN_KUSA2, (Math_SinS(temp_s1) * 80.0f) + this->actor.world.pos.x,
this->actor.world.pos.y, (Math_CosS(temp_s1) * 80.0f) + this->actor.world.pos.z, 0, Rand_Next() >> 0x10,
- 0, 1, this->actor.cutscene, this->actor.unk20, NULL);
+ 0, 1, this->actor.csId, this->actor.halfDaysBits, NULL);
*ptr = actor;
if (*ptr != NULL) {
(*ptr)->actor.room = this->actor.room;
@@ -136,7 +137,7 @@ void func_80A5B334(EnKusa2* this, PlayState* play) {
if (*ptr != NULL) {
if (!Actor_HasParent(&(*ptr)->actor, play)) {
- Actor_MarkForDeath(&(*ptr)->actor);
+ Actor_Kill(&(*ptr)->actor);
}
*ptr = NULL;
}
@@ -158,7 +159,8 @@ void func_80A5B3BC(EnKusa2* this) {
void func_80A5B490(EnKusa2* this, PlayState* play) {
Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_KITAN, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0,
- ENKUSA2_GET_7F00(&this->actor) << 9, this->actor.cutscene, this->actor.unk20, NULL);
+ ENKUSA2_GET_7F00(&this->actor) << 9, this->actor.csId, this->actor.halfDaysBits,
+ NULL);
}
void func_80A5B508(void) {
@@ -268,7 +270,8 @@ s32 func_80A5BA58(EnKusa2* this, PlayState* play) {
}
void func_80A5BAFC(EnKusa2* this, PlayState* play) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 35.0f, 0.0f, 0x45);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 35.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40);
}
void func_80A5BB40(EnKusa2* this, PlayState* play, s32 arg2) {
@@ -379,7 +382,7 @@ s32 func_80A5BFD8(EnKusa2* this, PlayState* play) {
func_80A5BD14(this, play, (this->collider.info.acHitInfo->toucher.dmgFlags & 0x1000000) ? 1 : 0);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_EV_PLANT_BROKEN);
func_80A5BD94(this);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return true;
}
return false;
@@ -700,7 +703,7 @@ void func_80A5CB74(EnKusa2* this) {
sp3E = Rand_S16Offset(-10000, 20000) + this->actor.world.rot.y;
if (this->unk_1C0 != NULL) {
- sp36 = Actor_YawBetweenActors(&this->actor, &this->unk_1C0->actor);
+ sp36 = Actor_WorldYawTowardActor(&this->actor, &this->unk_1C0->actor);
sp3C = Rand_S16Offset(-4000, 8000) + sp36;
} else {
sp3C = 0;
@@ -878,18 +881,19 @@ void EnKusa2_Init(Actor* thisx, PlayState* play) {
} else {
Collider_InitCylinder(play, &this->collider);
if (!func_80A5BA58(this, play)) {
- Actor_MarkForDeath(&this->actor);
- } else {
- Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
- Collider_UpdateCylinder(&this->actor, &this->collider);
- this->actor.colChkInfo.mass = MASS_IMMOVABLE;
- this->unk_1CE = D_80A5EAF0 & 7;
- D_80A5EAF0++;
- this->actor.shape.shadowAlpha = 0;
- this->unk_1CF = 255;
- this->actor.shape.shadowScale = 1.0f;
- func_80A5D7A4(this);
+ Actor_Kill(&this->actor);
+ return;
}
+
+ Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
+ Collider_UpdateCylinder(&this->actor, &this->collider);
+ this->actor.colChkInfo.mass = MASS_IMMOVABLE;
+ this->unk_1CE = D_80A5EAF0 & 7;
+ D_80A5EAF0++;
+ this->actor.shape.shadowAlpha = 0;
+ this->unk_1CF = 255;
+ this->actor.shape.shadowScale = 1.0f;
+ func_80A5D7A4(this);
}
}
@@ -974,12 +978,12 @@ void func_80A5D7C4(EnKusa2* this, PlayState* 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_YawBetweenActors(&this->unk_1C0->actor, &this->actor);
+ sp2A = Actor_WorldYawTowardActor(&this->unk_1C0->actor, &this->actor);
this->actor.home.rot.y = Rand_S16Offset(-1500, 3000) + sp2A;
}
this->unk_1C8 = Rand_S16Offset(72, 16);
this->actor.velocity.y = 8.8f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_WALK);
func_80A5DC70(this);
}
@@ -988,7 +992,7 @@ void func_80A5D7C4(EnKusa2* this, PlayState* play) {
if (this->actor.xzDistToPlayer < 400.0f) {
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
if (this->actor.xzDistToPlayer < 100.0f) {
- Actor_LiftActor(&this->actor, play);
+ Actor_OfferCarry(&this->actor, play);
}
}
}
@@ -1036,7 +1040,7 @@ void func_80A5D9C8(EnKusa2* this, PlayState* play) {
this->actor.colChkInfo.mass = 80;
this->actor.home.rot.y = this->actor.world.rot.y;
this->actor.velocity.y = 12.5f;
- this->actor.speedXZ += 3.0f;
+ this->actor.speed += 3.0f;
Actor_MoveWithGravity(&this->actor);
func_80A5BAFC(this, play);
func_80A5CD0C(this);
@@ -1053,7 +1057,7 @@ void func_80A5D9C8(EnKusa2* this, PlayState* play) {
this->unk_1D0--;
if (this->unk_1D0 <= 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KUSAMUSHI_VIBE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KUSAMUSHI_VIBE);
this->unk_1D0 = (Rand_Next() >> 0x1D) + 14;
}
@@ -1085,18 +1089,18 @@ void func_80A5DC98(EnKusa2* this, PlayState* play) {
func_80A5BF38(this, 4);
func_80A5BF84(this, play);
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
func_80A5CD0C(this);
func_80A5BB40(this, play, 1);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_WALK);
func_80A5DE18(this);
- } else if (this->actor.bgCheckFlags & 0x20) {
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER) {
func_80A5BDB0(this, play);
func_80A5E418(this);
} else if (this->unk_1CA > 0) {
this->unk_1CA--;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
}
@@ -1120,14 +1124,14 @@ void func_80A5DEB4(EnKusa2* this, PlayState* play) {
if (this->unk_1D0 > 0) {
this->unk_1D0--;
if (this->unk_1D0 == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KUSAMUSHI_VIBE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KUSAMUSHI_VIBE);
}
}
if (this->unk_1D1 > 0) {
this->unk_1D1--;
if (this->unk_1D1 == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KUSAMUSHI_VIBE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KUSAMUSHI_VIBE);
}
}
@@ -1135,10 +1139,10 @@ void func_80A5DEB4(EnKusa2* this, PlayState* play) {
Math_StepToF(&this->actor.scale.x, 0.4f, 0.032f);
this->unk_1C4 += 0x4650;
this->actor.scale.z = this->actor.scale.x;
- this->actor.speedXZ = fabsf(Math_CosS(this->unk_1C4) + 0.5f) * 1.5f;
+ this->actor.speed = fabsf(Math_CosS(this->unk_1C4) + 0.5f) * 1.5f;
- if (this->actor.speedXZ < 0.0f) {
- this->actor.speedXZ = 0.0f;
+ if (this->actor.speed < 0.0f) {
+ this->actor.speed = 0.0f;
}
Actor_MoveWithGravity(&this->actor);
@@ -1155,7 +1159,7 @@ void func_80A5DEB4(EnKusa2* this, PlayState* play) {
func_80A5CD0C(this);
}
- if (this->actor.bgCheckFlags & 0x20) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER) {
func_80A5BDB0(this, play);
func_80A5E418(this);
} else {
@@ -1163,16 +1167,16 @@ void func_80A5DEB4(EnKusa2* this, PlayState* play) {
if (this->unk_1C8 <= 0) {
func_80A5CD0C(this);
func_80A5BB40(this, play, 4);
- this->actor.speedXZ += 4.0f;
+ this->actor.speed += 4.0f;
this->actor.velocity.y = (Rand_ZeroOne() * 4.0f) + 15.0f;
func_80A5E1D8(this);
- } else if (this->actor.bgCheckFlags & 1) {
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->unk_1CA--;
if (this->unk_1CA <= 0) {
func_80A5CD0C(this);
func_80A5BB40(this, play, 2);
this->actor.velocity.y = (Rand_ZeroOne() * 6.0f) + 7.0f;
- this->actor.speedXZ += 2.0f;
+ this->actor.speed += 2.0f;
if (this->actor.yawTowardsPlayer < this->actor.world.rot.y) {
sp20 = 10000;
} else {
@@ -1198,9 +1202,9 @@ void func_80A5E1D8(EnKusa2* this) {
void func_80A5E210(EnKusa2* this, PlayState* play) {
Math_StepToF(&this->actor.gravity, -4.0f, 0.5f);
- if (this->actor.bgCheckFlags & 1) {
- this->actor.speedXZ *= 0.4f;
- if (this->actor.bgCheckFlags & 2) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ this->actor.speed *= 0.4f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
func_80A5D178(this);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EN_KUSAMUSHI_HIDE);
}
@@ -1227,7 +1231,7 @@ void func_80A5E210(EnKusa2* this, PlayState* play) {
if (this->actor.velocity.y > 1.0f) {
Math_StepToF(&this->actor.scale.y, 0.24000001f, 0.080000006f);
Math_StepToF(&this->actor.scale.x, 0.32000002f, 0.040000003f);
- } else if (this->actor.bgCheckFlags & 1) {
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
Math_StepToF(&this->actor.scale.y, 0.0f, 0.120000005f);
Math_StepToF(&this->actor.scale.x, 0.48000002f, 0.120000005f);
} else {
@@ -1241,7 +1245,7 @@ void func_80A5E210(EnKusa2* this, PlayState* play) {
if (this->unk_1B8 != NULL) {
this->unk_1B8->unk_28 = func_80A5C718;
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -1251,7 +1255,7 @@ void func_80A5E418(EnKusa2* this) {
this->actor.velocity.y *= 0.25f;
this->actor.velocity.z *= 0.1f;
this->actor.draw = func_80A5EA48;
- this->actor.speedXZ *= 0.1f;
+ this->actor.speed *= 0.1f;
this->actor.gravity *= 0.25f;
this->unk_1CC = Rand_S16Offset(-800, 1600);
this->actionFunc = func_80A5E4BC;
@@ -1267,13 +1271,14 @@ void func_80A5E4BC(EnKusa2* this, PlayState* play) {
this->actor.shape.rot.x -= 0x5DC;
this->actor.shape.rot.y += this->unk_1CC;
- if ((this->actor.bgCheckFlags & 0x20) && (this->actor.depthInWater > 5.0f) && (Rand_ZeroOne() < 0.8f)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WATER) && (this->actor.depthInWater > 5.0f) &&
+ (Rand_ZeroOne() < 0.8f)) {
EffectSsBubble_Spawn(play, &this->actor.world.pos, 20.0f, 10.0f, 20.0f, (Rand_ZeroOne() * 0.08f) + 0.04f);
}
this->unk_1CF -= 15;
if (this->unk_1CF <= 15) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -1288,7 +1293,7 @@ void func_80A5E604(Actor* thisx, PlayState* play) {
} else {
this->actor.draw = func_80A5E6F0;
- if (play->roomCtx.curRoom.unk3 == 0) {
+ if (play->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_0) {
func_80A5B508();
}
func_80A5CAF4(&D_80A5F1C0);
@@ -1342,7 +1347,7 @@ void func_80A5E80C(PlayState* play, s32 arg1) {
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);
- gSPDisplayList(POLY_XLU_DISP++, gKusaBushType2);
+ gSPDisplayList(POLY_XLU_DISP++, gKusaBushType2DL);
CLOSE_DISPS(play->state.gfxCtx);
}
@@ -1351,11 +1356,11 @@ void EnKusa2_Draw(Actor* thisx, PlayState* play) {
EnKusa2* this = THIS;
if (this->actor.projectedPos.z <= 1200.0f) {
- if ((play->roomCtx.curRoom.unk3 == 0) && (this->actor.projectedPos.z > -150.0f) &&
+ if ((play->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_0) && (this->actor.projectedPos.z > -150.0f) &&
(this->actor.projectedPos.z < 400.0f)) {
func_80A5B954(&D_80A60908[this->unk_1CE], 0.0015f);
}
- Gfx_DrawDListOpa(play, gKusaBushType1);
+ Gfx_DrawDListOpa(play, gKusaBushType1DL);
} else if (this->actor.projectedPos.z < 1300.0f) {
func_80A5E80C(play, (1300.0f - this->actor.projectedPos.z) * 2.55f);
}
@@ -1369,14 +1374,14 @@ void func_80A5E9B4(Actor* thisx, PlayState* play) {
sp18.z = thisx->shape.rot.z + D_80A5EAFC.z;
Matrix_SetTranslateRotateYXZ(thisx->world.pos.x, thisx->world.pos.y, thisx->world.pos.z, &sp18);
Matrix_Scale(thisx->scale.x, thisx->scale.y, thisx->scale.z, MTXMODE_APPLY);
- Gfx_DrawDListOpa(play, gKusaBushType1);
+ Gfx_DrawDListOpa(play, gKusaBushType1DL);
}
void func_80A5EA48(Actor* thisx, PlayState* play) {
EnKusa2* this = THIS;
if (this->unk_1CF == 0xFF) {
- Gfx_DrawDListOpa(play, gKusaBushType1);
+ Gfx_DrawDListOpa(play, gKusaBushType1DL);
} else {
func_80A5E80C(play, this->unk_1CF);
}
diff --git a/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.h b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.h
index eb8276ac6..f1245dd50 100644
--- a/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.h
+++ b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.h
@@ -81,6 +81,4 @@ typedef struct EnKusa2 {
/* 0x1D1 */ s8 unk_1D1;
} EnKusa2; // size = 0x1D4
-extern const ActorInit En_Kusa2_InitVars;
-
#endif // Z_EN_KUSA2_H
diff --git a/src/overlays/actors/ovl_En_Lift_Nuts/overlay.cfg b/src/overlays/actors/ovl_En_Lift_Nuts/overlay.cfg
deleted file mode 100644
index df2faa5f0..000000000
--- a/src/overlays/actors/ovl_En_Lift_Nuts/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Lift_Nuts
-z_en_lift_nuts.c
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 85e57c550..0bd619a9c 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
@@ -15,8 +15,41 @@ void EnLiftNuts_Destroy(Actor* thisx, PlayState* play);
void EnLiftNuts_Update(Actor* thisx, PlayState* play);
void EnLiftNuts_Draw(Actor* thisx, PlayState* play);
-#if 0
-const ActorInit En_Lift_Nuts_InitVars = {
+void func_80AEA910(EnLiftNuts* this, PlayState* play);
+
+s32 func_80AE9B8C(void);
+void func_80AE9F28(EnLiftNuts* this);
+void func_80AE9F70(EnLiftNuts* this, PlayState* play);
+void func_80AEA044(EnLiftNuts* this, PlayState* play);
+void func_80AEA0B4(EnLiftNuts* this);
+void func_80AEA128(EnLiftNuts* this, PlayState* play);
+void func_80AEA1A0(EnLiftNuts* this, PlayState* play);
+void func_80AEABF0(EnLiftNuts* this);
+void func_80AEAC64(EnLiftNuts* this, PlayState* play);
+void func_80AEACF8(EnLiftNuts* this, PlayState* play);
+void func_80AEAEAC(EnLiftNuts* this);
+void func_80AEAF14(EnLiftNuts* this, PlayState* play);
+void func_80AEAF8C(EnLiftNuts* this);
+void func_80AEAFA0(EnLiftNuts* this, PlayState* play);
+void func_80AEB114(EnLiftNuts* this);
+void func_80AEB148(EnLiftNuts* this, PlayState* play);
+void func_80AEB1C8(EnLiftNuts* this);
+void func_80AEB230(EnLiftNuts* this, PlayState* play);
+void func_80AEB280(EnLiftNuts* this);
+void func_80AEB294(EnLiftNuts* this, PlayState* play);
+void func_80AEB3E0(EnLiftNuts* this, PlayState* play);
+void func_80AEB428(EnLiftNuts* this, PlayState* play);
+void func_80AEB584(EnLiftNuts* this);
+void func_80AEB598(EnLiftNuts* this, PlayState* play);
+void func_80AEB684(EnLiftNuts* this);
+void func_80AEB698(EnLiftNuts* this, PlayState* play);
+void func_80AEB828(EnLiftNuts* this);
+void func_80AEB8A4(EnLiftNuts* this, PlayState* play);
+void func_80AEB934(EnLiftNuts* this, PlayState* play);
+void func_80AEB974(EnLiftNuts* this);
+void func_80AEB9E0(EnLiftNuts* this, PlayState* play);
+
+ActorInit En_Lift_Nuts_InitVars = {
ACTOR_EN_LIFT_NUTS,
ACTORCAT_NPC,
FLAGS,
@@ -28,111 +61,955 @@ const ActorInit En_Lift_Nuts_InitVars = {
(ActorFunc)EnLiftNuts_Draw,
};
-// static ColliderCylinderInit sCylinderInit = {
-static ColliderCylinderInit D_80AEBF28 = {
- { COLTYPE_NONE, AT_NONE, AC_NONE, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_2, COLSHAPE_CYLINDER, },
- { ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0x00000000, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_NONE, OCELEM_ON, },
+static AnimationInfo sAnimations[] = {
+ { &object_dnt_Anim_005488, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ { &object_dnt_Anim_00B0B4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ { &object_dnt_Anim_004AA0, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f },
+ { &object_dnt_Anim_0029E8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f },
+ { &object_dnt_Anim_005CA8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
+ { &object_dnt_Anim_0038CC, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ { &object_dnt_Anim_003CC0, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
+ { &object_dnt_Anim_0012F4, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f },
+ { &object_dnt_Anim_004700, 0.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f },
+ { &object_dnt_Anim_001BC8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ { &object_dnt_Anim_003438, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -2.0f },
+ { &object_dnt_Anim_001E2C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ { &object_dnt_Anim_000994, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f },
+ { &object_dnt_Anim_002268, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
+ { &object_dnt_Anim_002F08, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ { &object_dnt_Anim_00577C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ { &object_dnt_Anim_004E38, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f },
+ { &object_dnt_Anim_0029E8, 1.0f, 4.0f, 0.0f, ANIMMODE_ONCE, -4.0f },
+ { &object_dnt_Anim_0029E8, 1.0f, 8.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
+};
+
+Gfx* D_80AEBF18[] = {
+ object_dnt_DL_008290,
+ object_dnt_DL_001350,
+ object_dnt_DL_001420,
+ NULL,
+};
+
+static ColliderCylinderInit sCylinderInit = {
+ {
+ COLTYPE_NONE,
+ AT_NONE,
+ AC_NONE,
+ OC1_ON | OC1_TYPE_ALL,
+ OC2_TYPE_2,
+ COLSHAPE_CYLINDER,
+ },
+ {
+ ELEMTYPE_UNK0,
+ { 0x00000000, 0x00, 0x00 },
+ { 0x00000000, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_NONE,
+ OCELEM_ON,
+ },
{ 25, 75, 0, { 0, 0, 0 } },
};
-// sColChkInfoInit
-static CollisionCheckInfoInit2 D_80AEBF54 = { 0, 0, 0, 0, MASS_IMMOVABLE };
+static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE };
-#endif
+void func_80AE9A20(EnLiftNuts* this, PlayState* play) {
+ static s16 D_80AEBF60 = 0;
+ static s32 D_80AEBF64 = false;
-extern ColliderCylinderInit D_80AEBF28;
-extern CollisionCheckInfoInit2 D_80AEBF54;
+ if (!D_80AEBF64) {
+ func_800B6584(play, ACTOR_EN_GAMELUPY, &D_80AEBF60, sizeof(s16));
+ D_80AEBF64 = true;
+ }
+ this->ptr_1EC = &D_80AEBF60;
+}
-extern UNK_TYPE D_060029E8;
+void func_80AE9A80(EnLiftNuts* this, PlayState* play) {
+ static s16 D_80AEBF68 = false;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AE9A20.s")
+ if (!D_80AEBF68) {
+ func_800B6608(play, ACTOR_EN_GAMELUPY);
+ D_80AEBF68 = true;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AE9A80.s")
+s32 func_80AE9AC4(EnLiftNuts* this, s32 arg1) {
+ static s32 D_80AEBF6C = 0;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AE9AC4.s")
+ switch (arg1) {
+ case 0:
+ if (D_80AEBF6C == 0) {
+ return true;
+ }
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AE9B4C.s")
+ case 1:
+ if (D_80AEBF6C == 0) {
+ this->unk_34E = 1;
+ D_80AEBF6C = 1;
+ return true;
+ }
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AE9B8C.s")
+ case 2:
+ if (D_80AEBF6C == 1) {
+ this->unk_34E = 0;
+ D_80AEBF6C = 0;
+ return true;
+ }
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AE9BCC.s")
+ default:
+ break;
+ }
+ return false;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/EnLiftNuts_Init.s")
+s32 func_80AE9B4C(s32 arg0, s32 arg1) {
+ static s32 D_80AEBF70 = 0;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/EnLiftNuts_Destroy.s")
+ if (arg0 == 0) {
+ if (D_80AEBF70 == arg1) {
+ return true;
+ }
+ } else if (arg0 == 1) {
+ D_80AEBF70 = arg1;
+ return true;
+ }
+ return false;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AE9F28.s")
+s32 func_80AE9B8C() {
+ s32 ret = 0;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AE9F70.s")
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_10)) {
+ ret = 1;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AE9FC8.s")
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_20)) {
+ ret++;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEA044.s")
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_40)) {
+ ret++;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEA0B4.s")
+ return ret;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEA128.s")
+void func_80AE9BCC(EnLiftNuts* this, PlayState* play) {
+ if ((this->actionFunc != func_80AEB934) && (this->actionFunc != func_80AEB8A4) &&
+ (this->actionFunc != func_80AEACF8) && (this->actionFunc != func_80AEAC64) &&
+ (this->actionFunc != func_80AEA044) && (this->actionFunc != func_80AEB598) &&
+ (this->actionFunc != func_80AEB698) && !func_80AE9B4C(0, 3) && (func_80AE9B8C() == 3) &&
+ (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) && (this->actor.xzDistToPlayer < 150.0f)) {
+ func_80AEB828(this);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEA1A0.s")
+void EnLiftNuts_Init(Actor* thisx, PlayState* play) {
+ EnLiftNuts* this = THIS;
+ Path* path;
+ Vec3s* pathPos;
+ s32 pad;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEA7A4.s")
+ ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 35.0f);
+ SkelAnime_InitFlex(play, &this->skelAnime, &object_dnt_Skel_00AC70, &object_dnt_Anim_0029E8, this->jointTable,
+ this->morphTable, OBJECT_DNT_LIMB_MAX);
+ Collider_InitCylinder(play, &this->collider);
+ Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
+ CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
+ if (this->actor.floorBgId != BGCHECK_SCENE) {
+ DynaPolyActor* bgActor = DynaPoly_GetActor(&play->colCtx, this->actor.floorBgId);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEA910.s")
+ if (bgActor != NULL) {
+ this->actor.world.pos = bgActor->actor.world.pos;
+ this->actor.home.pos = bgActor->actor.world.pos;
+ }
+ }
+ this->actor.targetMode = 0;
+ this->unk_354 = 0;
+ this->unk_34E = 0;
+ this->unk_356 = 0;
+ this->unk_1E4 = 0;
+ this->unk_1E8 = 0;
+ this->actor.gravity = -2.0f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEABF0.s")
+ path = &play->setupPathList[ENLIFTNUTS_GET_FF00(&this->actor)];
+ pathPos = Lib_SegmentedToVirtual(path->points);
+ this->vec_1D8.x = pathPos->x;
+ this->vec_1D8.y = pathPos->y;
+ this->vec_1D8.z = pathPos->z;
+ func_80AE9A20(this, play);
+ if (!Flags_GetSwitch(play, 0x41)) {
+ func_80AE9B4C(1, 0);
+ func_80AE9F28(this);
+ } else if (func_80AE9AC4(this, 0)) {
+ Player* player = GET_PLAYER(play);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEAC64.s")
+ player->stateFlags1 |= PLAYER_STATE1_20;
+ func_80AE9AC4(this, 1);
+ func_80AE9B4C(1, 3);
+ func_80AEA0B4(this);
+ } else {
+ func_80AE9F28(this);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEACF8.s")
+void EnLiftNuts_Destroy(Actor* thisx, PlayState* play) {
+ EnLiftNuts* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEAEAC.s")
+ Collider_DestroyCylinder(play, &this->collider);
+ func_80AE9A80(this, play);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEAF14.s")
+void func_80AE9F28(EnLiftNuts* this) {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 18);
+ this->actionFunc = func_80AE9F70;
+ this->unk_354 = 0;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEAF8C.s")
+void func_80AE9F70(EnLiftNuts* this, PlayState* play) {
+ if (this->unk_354 < 40) {
+ this->unk_354++;
+ } else if (this->actor.xzDistToPlayer < 100.0f) {
+ func_80AEA0B4(this);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEAFA0.s")
+void func_80AE9FC8(EnLiftNuts* this) {
+ if (this->actionFunc == func_80AEA1A0) {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 17);
+ } else {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 3);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEB114.s")
+ Actor_PlaySfx(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
+ this->actionFunc = func_80AEA044;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEB148.s")
+void func_80AEA044(EnLiftNuts* this, PlayState* play) {
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ func_80AE9F28(this);
+ } else if (Animation_OnFrame(&this->skelAnime, 5.0f)) {
+ func_80AEB9E0(this, play);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEB1C8.s")
+void func_80AEA0B4(EnLiftNuts* this) {
+ if (func_80AE9B4C(0, 1)) {
+ this->actionFunc = func_80AEA1A0;
+ } else {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
+ this->actionFunc = func_80AEA128;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEB230.s")
+void func_80AEA128(EnLiftNuts* this, PlayState* play) {
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 15);
+ this->actionFunc = func_80AEA1A0;
+ } else if (Animation_OnFrame(&this->skelAnime, 8.0f)) {
+ func_80AEB9E0(this, play);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEB280.s")
+void func_80AEA1A0(EnLiftNuts* this, PlayState* play) {
+ 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);
+ }
+ if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
+ if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) {
+ 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)) {
+ Message_StartTextbox(play, 0x27F7, &this->actor);
+ this->textId = 0x27F7;
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_10)) {
+ Message_StartTextbox(play, 0x27D9, &this->actor);
+ this->textId = 0x27D9;
+ } else {
+ Message_StartTextbox(play, 0x27DA, &this->actor);
+ this->textId = 0x27DA;
+ }
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEB294.s")
+ case 2:
+ 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_20)) {
+ Message_StartTextbox(play, 0x27DB, &this->actor);
+ this->textId = 0x27DB;
+ break;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEB3E0.s")
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_10)) {
+ Message_StartTextbox(play, 0x27DC, &this->actor);
+ this->textId = 0x27DC;
+ } else {
+ Message_StartTextbox(play, 0x27DD, &this->actor);
+ this->textId = 0x27DD;
+ }
+ }
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEB428.s")
+ case 3:
+ 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)) {
+ Message_StartTextbox(play, 0x27DE, &this->actor);
+ this->textId = 0x27DE;
+ } else if (func_80AE9B8C() == 2) {
+ Message_StartTextbox(play, 0x27DF, &this->actor);
+ this->textId = 0x27DF;
+ } else if (func_80AE9B8C() == 1) {
+ Message_StartTextbox(play, 0x27E0, &this->actor);
+ this->textId = 0x27E0;
+ } else {
+ Message_StartTextbox(play, 0x27E1, &this->actor);
+ this->textId = 0x27E1;
+ }
+ break;
+ }
+ } else if (func_80AE9B4C(0, 3)) {
+ if (Flags_GetSwitch(play, 0x40)) {
+ Flags_UnsetSwitch(play, 0x40);
+ Inventory_SaveDekuPlaygroundHighScore(4);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_10) && CHECK_WEEKEVENTREG(WEEKEVENTREG_14_20) &&
+ CURRENT_DAY == 3) {
+ this->unk_354 = 0;
+ Message_StartTextbox(play, 0x27F4, &this->actor);
+ this->textId = 0x27F4;
+ } else {
+ Message_StartTextbox(play, 0x27EE, &this->actor);
+ this->textId = 0x27EE;
+ }
+ } 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) {
+ Message_StartTextbox(play, 0x27F9, &this->actor);
+ this->textId = 0x27F9;
+ } else {
+ Message_StartTextbox(play, 0x27EB, &this->actor);
+ this->textId = 0x27EB;
+ }
+ } else {
+ Message_StartTextbox(play, 0x27ED, &this->actor);
+ this->textId = 0x27ED;
+ }
+ }
+ Flags_UnsetSwitch(play, 0x41);
+ this->actor.flags &= ~ACTOR_FLAG_10000;
+ } else if (!Flags_GetSwitch(play, 0x42)) {
+ Flags_SetSwitch(play, 0x42);
+ Message_StartTextbox(play, 0x27E6, &this->actor);
+ this->textId = 0x27E6;
+ } else {
+ switch (CURRENT_DAY) {
+ case 1:
+ Message_StartTextbox(play, 0x27E7, &this->actor);
+ this->textId = 0x27E7;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEB584.s")
+ case 2:
+ Message_StartTextbox(play, 0x27E8, &this->actor);
+ this->textId = 0x27E8;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEB598.s")
+ case 3:
+ Message_StartTextbox(play, 0x27E9, &this->actor);
+ this->textId = 0x27E9;
+ break;
+ }
+ }
+ } else {
+ Message_StartTextbox(play, 0x27D8, &this->actor);
+ this->textId = 0x27D8;
+ }
+ func_80AEABF0(this);
+ } 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) {
+ func_800B8614(&this->actor, play, 100.0f);
+ }
+ }
+ Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0xA, 0x1000, 0x500);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEB684.s")
+void func_80AEA7A4(EnLiftNuts* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEB698.s")
+ if (Message_ShouldAdvance(play)) {
+ switch (this->textId) {
+ case 0x27E2:
+ if (play->msgCtx.choiceIndex == 0) { // Yes
+ if (gSaveContext.save.saveInfo.playerData.rupees >= 10) {
+ func_8019F208();
+ Message_StartTextbox(play, 0x27E5, &this->actor);
+ this->textId = 0x27E5;
+ Rupees_ChangeBy(-10);
+ } else {
+ play_sound(NA_SE_SY_ERROR);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 1);
+ Message_StartTextbox(play, 0x27E4, &this->actor);
+ this->textId = 0x27E4;
+ }
+ } else {
+ func_8019F230();
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 1);
+ Message_StartTextbox(play, 0x27E3, &this->actor);
+ this->textId = 0x27E3;
+ }
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEB828.s")
+ case 0x238D:
+ if (play->msgCtx.choiceIndex == 0) { // Yes
+ player->stateFlags1 |= PLAYER_STATE1_20;
+ func_80AEB1C8(this);
+ } else {
+ func_80AE9FC8(this);
+ }
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEB8A4.s")
+ default:
+ func_80AE9FC8(this);
+ break;
+ }
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEB934.s")
+void func_80AEA910(EnLiftNuts* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEB974.s")
+ if (Message_ShouldAdvance(play)) {
+ switch (this->textId) {
+ case 0x27D9:
+ case 0x27DA:
+ case 0x27DB:
+ case 0x27DC:
+ case 0x27DD:
+ case 0x27DE:
+ case 0x27DF:
+ case 0x27E0:
+ case 0x27E1:
+ Message_StartTextbox(play, 0x27E2, &this->actor);
+ this->textId = 0x27E2;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEB9E0.s")
+ case 0x27E3:
+ case 0x27E4:
+ func_80AE9FC8(this);
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEBB30.s")
+ case 0x27E5:
+ Message_CloseTextbox(play);
+ player->stateFlags1 |= PLAYER_STATE1_20;
+ func_80AEAEAC(this);
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/EnLiftNuts_Update.s")
+ case 0x27E6:
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 1);
+ switch (CURRENT_DAY) {
+ case 1:
+ Message_StartTextbox(play, 0x27E7, &this->actor);
+ this->textId = 0x27E7;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEBC18.s")
+ case 2:
+ Message_StartTextbox(play, 0x27E8, &this->actor);
+ this->textId = 0x27E8;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/func_80AEBC90.s")
+ case 3:
+ Message_StartTextbox(play, 0x27E9, &this->actor);
+ this->textId = 0x27E9;
+ break;
+ }
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Lift_Nuts/EnLiftNuts_Draw.s")
+ case 0x27E7:
+ case 0x27E8:
+ case 0x27E9:
+ Message_StartTextbox(play, 0x27FA, &this->actor);
+ this->textId = 0x27FA;
+ break;
+
+ case 0x27FA:
+ Message_CloseTextbox(play);
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
+ func_80AEB114(this);
+ break;
+
+ case 0x27EE:
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 0x10);
+ Message_StartTextbox(play, 0x27EF, &this->actor);
+ this->textId = 0x27EF;
+ break;
+
+ case 0x27EF:
+ Message_CloseTextbox(play);
+ func_80AEB584(this);
+ func_80AEB598(this, play);
+ break;
+
+ case 0x27F1:
+ Message_StartTextbox(play, 0x27F2, &this->actor);
+ this->textId = 0x27F2;
+ break;
+
+ case 0x27F2:
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 1);
+ Message_StartTextbox(play, 0x27F3, &this->actor);
+ this->textId = 0x27F3;
+ break;
+
+ case 0x27F4:
+ Message_CloseTextbox(play);
+ func_80AEB584(this);
+ func_80AEB598(this, play);
+ break;
+
+ case 0x27F5:
+ Message_CloseTextbox(play);
+ func_80AE9B4C(1, 0);
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
+ func_80AE9FC8(this);
+ break;
+
+ case 0x27F9:
+ Message_StartTextbox(play, 0x27ED, &this->actor);
+ this->textId = 0x27ED;
+ break;
+ }
+ }
+}
+
+void func_80AEABF0(EnLiftNuts* this) {
+ this->unk_354 = 0;
+
+ if (this->actionFunc != func_80AEB698) {
+ if (func_80AE9B4C(0, 0)) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
+ }
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 16);
+ }
+ this->actionFunc = func_80AEAC64;
+}
+
+void func_80AEAC64(EnLiftNuts* this, PlayState* play) {
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ if ((this->textId == 0x27EE) || (this->textId == 0x27F4) || (this->textId == 0x27F5)) {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 10);
+ } else {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 0);
+ }
+ this->actionFunc = func_80AEACF8;
+ }
+}
+
+void func_80AEACF8(EnLiftNuts* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+
+ switch (Message_GetState(&play->msgCtx)) {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ break;
+
+ case 4:
+ func_80AEA7A4(this, play);
+ break;
+
+ case 5:
+ func_80AEA910(this, play);
+ break;
+
+ case 6:
+ if (Message_ShouldAdvance(play)) {
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
+ func_80AE9FC8(this);
+ func_80AE9AC4(this, 2);
+ if (func_80AE9B4C(0, 3)) {
+ func_80AE9B4C(1, 0);
+ }
+ }
+ break;
+ }
+
+ Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0xA, 0x2000, 0x500);
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ switch (this->textId) {
+ case 0x27EE:
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 11);
+ break;
+
+ case 0x27EF:
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 1);
+ break;
+
+ case 0x27F4:
+ if (this->unk_354 == 0) {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 11);
+ this->unk_354++;
+ } else if (this->unk_354 == 4) {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 12);
+ this->unk_354 = 0;
+ } else {
+ this->unk_354++;
+ }
+ break;
+ }
+ }
+ func_80AEB974(this);
+}
+
+void func_80AEAEAC(EnLiftNuts* this) {
+ this->actor.speed = 2.0f;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 1);
+ func_80AE9AC4(this, 1);
+ func_80AE9B4C(1, 1);
+ this->actionFunc = func_80AEAF14;
+}
+
+void func_80AEAF14(EnLiftNuts* this, PlayState* play) {
+ f32 dist;
+
+ Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 10, 0x1000, 0x500);
+ dist = Math_Vec3f_StepTo(&this->actor.world.pos, &this->vec_1D8, this->actor.speed);
+ this->actor.world.pos.y += this->actor.gravity;
+
+ if (dist == 0.0f) {
+ func_80AEAF8C(this);
+ }
+}
+
+void func_80AEAF8C(EnLiftNuts* this) {
+ this->actionFunc = func_80AEAFA0;
+}
+
+void func_80AEAFA0(EnLiftNuts* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+ f32 dist;
+ f32 temp_fv0;
+ s16 yaw;
+ s16 sp28;
+ s16 yawDiff;
+
+ sp28 = this->actor.yawTowardsPlayer - 0x8000;
+ yaw = Math_Vec3f_Yaw(&player->actor.world.pos, &this->actor.home.pos);
+ yawDiff = yaw - sp28;
+ dist = Math_Vec3f_DistXZ(&player->actor.world.pos, &this->actor.home.pos);
+
+ if (this->actor.xzDistToPlayer < dist) {
+ if (ABS_ALT(yawDiff) < 0x2000) {
+ yaw = (yawDiff > 0) ? (yaw + 0x2000) : (yaw - 0x2000);
+ }
+ }
+ if (dist < 5.0f) {
+ temp_fv0 = 10.0f;
+ } else if (dist < 30.0f) {
+ temp_fv0 = 40.0f;
+ } else {
+ temp_fv0 = 80.0f;
+ }
+
+ play->actorCtx.unk268 = 1;
+ func_800B6F20(play, &play->actorCtx.unk_26C, temp_fv0, yaw);
+ if (dist < 5.0f) {
+ func_80AEA0B4(this);
+ }
+}
+
+void func_80AEB114(EnLiftNuts* this) {
+ Audio_PlaySubBgm(NA_BGM_TIMED_MINI_GAME);
+ this->actionFunc = func_80AEB148;
+}
+
+void func_80AEB148(EnLiftNuts* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+
+ if (player->stateFlags3 & PLAYER_STATE3_200) {
+ this->actor.speed = 2.0f;
+ SET_EVENTINF(EVENTINF_34);
+ Interface_StartTimer(4, 0);
+ func_80AE9B4C(1, 2);
+ Actor_PlaySfx(&this->actor, NA_SE_SY_FOUND);
+ func_80AEB280(this);
+ }
+}
+
+void func_80AEB1C8(EnLiftNuts* this) {
+ this->actor.speed = 2.0f;
+ SET_EVENTINF(EVENTINF_34);
+ Interface_StartTimer(4, 0);
+ func_80AE9B4C(1, 2);
+ this->actionFunc = func_80AEB230;
+}
+
+void func_80AEB230(EnLiftNuts* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+
+ if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] > 0) {
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
+ func_80AEB280(this);
+ }
+}
+
+void func_80AEB280(EnLiftNuts* this) {
+ this->actionFunc = func_80AEB294;
+}
+
+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->stateFlags1 |= PLAYER_STATE1_20;
+ Flags_SetSwitch(play, 0x41);
+ func_80AEB3E0(this, play);
+ }
+
+ if (*this->ptr_1EC == 300) {
+ player->stateFlags1 |= PLAYER_STATE1_20;
+
+ if (((void)0, gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2]) <
+ gSaveContext.save.saveInfo.dekuPlaygroundHighScores[CURRENT_DAY - 1]) {
+ Flags_SetSwitch(play, 0x40);
+ }
+ Flags_SetSwitch(play, 0x41);
+ func_80AEB3E0(this, play);
+ }
+}
+
+void func_80AEB3E0(EnLiftNuts* this, PlayState* play) {
+ play_sound(NA_SE_SY_FOUND);
+ this->unk_354 = 0;
+ gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6;
+ this->actionFunc = func_80AEB428;
+}
+
+void func_80AEB428(EnLiftNuts* this, PlayState* play) {
+ s32 pad;
+
+ if (this->unk_354 == 10) {
+ if (((void)0, gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2]) >
+ gSaveContext.save.saveInfo.dekuPlaygroundHighScores[CURRENT_DAY - 1]) {
+ Message_StartTextbox(play, 0x27EA, &this->actor);
+ this->textId = 0x27EA;
+ } else if (*this->ptr_1EC == 300) {
+ Message_StartTextbox(play, 0x27F8, &this->actor);
+ this->textId = 0x27F8;
+ } else {
+ Message_StartTextbox(play, 0x27EC, &this->actor);
+ this->textId = 0x27EC;
+ }
+ } else if (this->unk_354 == 30) {
+ CLEAR_EVENTINF(EVENTINF_34);
+ gSaveContext.respawn[RESPAWN_MODE_DOWN].entrance = ENTRANCE(DEKU_SCRUB_PLAYGROUND, 1);
+ gSaveContext.nextCutsceneIndex = 0;
+ func_80169EFC(&play->state);
+ gSaveContext.respawnFlag = -2;
+ play->transitionType = TRANS_TYPE_64;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
+ }
+ this->unk_354++;
+}
+
+void func_80AEB584(EnLiftNuts* this) {
+ this->actionFunc = func_80AEB598;
+}
+
+void func_80AEB598(EnLiftNuts* this, PlayState* play) {
+ if (Actor_HasParent(&this->actor, play)) {
+ this->actor.parent = NULL;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_10) && CHECK_WEEKEVENTREG(WEEKEVENTREG_14_20) && (CURRENT_DAY == 3) &&
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_14_80)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_14_80);
+ }
+ func_80AEB684(this);
+ } else if ((this->textId == 0x27F4) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_14_80)) {
+ Actor_OfferGetItem(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f);
+ } else {
+ Actor_OfferGetItem(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f);
+ }
+}
+
+void func_80AEB684(EnLiftNuts* this) {
+ this->actionFunc = func_80AEB698;
+}
+
+void func_80AEB698(EnLiftNuts* this, PlayState* play) {
+ if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_10) && CHECK_WEEKEVENTREG(WEEKEVENTREG_14_20) && (CURRENT_DAY == 3)) {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 13);
+ Message_StartTextbox(play, 0x27F5, &this->actor);
+ this->textId = 0x27F5;
+ } else if (func_80AE9B8C() > 0) {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 1);
+ Message_StartTextbox(play, 0x27F0, &this->actor);
+ this->textId = 0x27F0;
+ } else {
+ Message_StartTextbox(play, 0x27F1, &this->actor);
+ this->textId = 0x27F1;
+ }
+ this->actor.flags &= ~ACTOR_FLAG_10000;
+ func_80AEABF0(this);
+ switch (CURRENT_DAY) {
+ case 1:
+ SET_WEEKEVENTREG(WEEKEVENTREG_14_10);
+ break;
+
+ case 2:
+ SET_WEEKEVENTREG(WEEKEVENTREG_14_20);
+ break;
+
+ case 3:
+ SET_WEEKEVENTREG(WEEKEVENTREG_14_40);
+ break;
+
+ default:
+ break;
+ }
+ } else {
+ func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1);
+ }
+}
+
+void func_80AEB828(EnLiftNuts* this) {
+ if (!func_80AE9B4C(0, 4)) {
+ func_80AE9B4C(1, 4);
+ this->unk_356 = 1;
+ }
+ if (this->actionFunc == func_80AE9F70) {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 15);
+ }
+ this->unk_354 = 0;
+ this->actionFunc = func_80AEB8A4;
+}
+
+void func_80AEB8A4(EnLiftNuts* this, PlayState* play) {
+ if (this->unk_354 == 22) {
+ if (this->unk_356 == 1) {
+ Message_StartTextbox(play, 0x27F6, &this->actor);
+ this->textId = 0x27F6;
+ }
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 17);
+ this->actionFunc = func_80AEB934;
+ }
+ this->unk_354++;
+}
+
+void func_80AEB934(EnLiftNuts* this, PlayState* play) {
+ if (Animation_OnFrame(&this->skelAnime, 5.0f)) {
+ func_80AEB9E0(this, play);
+ }
+}
+
+void func_80AEB974(EnLiftNuts* this) {
+ s16 textId = this->textId;
+
+ switch (textId) {
+ default:
+ this->unk_1E4 = 0;
+ break;
+
+ case 0x27EE:
+ case 0x27EF:
+ this->unk_1E4 = 1;
+ break;
+
+ case 0x27F5:
+ this->unk_1E4 = 2;
+ break;
+
+ case 0x27F4:
+ if (this->unk_354 == 0) {
+ this->unk_1E4 = 2;
+ break;
+ }
+ this->unk_1E4 = 1;
+ }
+}
+
+void func_80AEB9E0(EnLiftNuts* this, PlayState* play) {
+ Vec3f worldPos = this->actor.world.pos;
+ Vec3f velocity;
+ Vec3f accel;
+ Color_RGBA8 primColor = { 170, 130, 90, 255 };
+ Color_RGBA8 envColor = { 100, 60, 20, 255 };
+ s32 i;
+
+ accel.y = 0.0f;
+
+ for (i = 0; i < 30; i++) {
+ velocity.x = Rand_Centered() * 15.0f;
+ velocity.y = Rand_ZeroOne() * 2.0f;
+ velocity.z = Rand_Centered() * 15.0f;
+
+ accel.x = -0.2f * velocity.x;
+ accel.z = -0.2f * velocity.z;
+
+ func_800B0EB0(play, &worldPos, &velocity, &accel, &primColor, &envColor, 80, 25, 10);
+ }
+}
+
+void func_80AEBB30(EnLiftNuts* this, PlayState* play) {
+ Collider_UpdateCylinder(&this->actor, &this->collider);
+ CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
+}
+
+void EnLiftNuts_Update(Actor* thisx, PlayState* play) {
+ EnLiftNuts* this = THIS;
+
+ SkelAnime_Update(&this->skelAnime);
+ this->actionFunc(this, play);
+ func_80AEBB30(this, play);
+ Actor_UpdateBgCheckInfo(play, thisx, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
+ func_80AE9BCC(this, play);
+
+ if (func_80AE9B4C(0, 2)) {
+ thisx->flags &= ~ACTOR_FLAG_1;
+ }
+}
+
+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) {
+ *dList = NULL;
+ }
+
+ if (limbIndex == OBJECT_DNT_LIMB_1A) {
+ *dList = D_80AEBF18[this->unk_1E4];
+ }
+ return false;
+}
+
+void EnLiftNuts_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
+ static Vec3f sFocusOffset = { 0.0f, 0.0f, 0.0f };
+
+ if (limbIndex == OBJECT_DNT_LIMB_19) {
+ Matrix_MultVec3f(&sFocusOffset, &thisx->focus.pos);
+ }
+}
+
+void EnLiftNuts_Draw(Actor* thisx, PlayState* play) {
+ EnLiftNuts* this = THIS;
+
+ func_8012C28C(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_Lift_Nuts/z_en_lift_nuts.h b/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.h
index ad6014dd9..9a54132a4 100644
--- a/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.h
+++ b/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.h
@@ -2,18 +2,31 @@
#define Z_EN_LIFT_NUTS_H
#include "global.h"
+#include "objects/object_dnt/object_dnt.h"
struct EnLiftNuts;
typedef void (*EnLiftNutsActionFunc)(struct EnLiftNuts*, PlayState*);
+#define ENLIFTNUTS_GET_FF00(thisx) (((thisx)->params & 0xFF00) >> 8)
+
typedef struct EnLiftNuts {
/* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0x90];
+ /* 0x144 */ ColliderCylinder collider;
+ /* 0x190 */ SkelAnime skelAnime;
/* 0x1D4 */ EnLiftNutsActionFunc actionFunc;
- /* 0x1D8 */ char unk_1D8[0x180];
+ /* 0x1D8 */ Vec3f vec_1D8;
+ /* 0x1E4 */ s32 unk_1E4;
+ /* 0x1E8 */ s32 unk_1E8;
+ /* 0x1EC */ s16* ptr_1EC;
+ /* 0x1F0 */ Vec3s jointTable[OBJECT_DNT_LIMB_MAX];
+ /* 0x298 */ Vec3s morphTable[OBJECT_DNT_LIMB_MAX];
+ /* 0x340 */ UNK_TYPE1 unk_340[0xC];
+ /* 0x34C */ s16 textId;
+ /* 0x34E */ s16 unk_34E;
+ /* 0x350 */ UNK_TYPE1 unk_350[0x4];
+ /* 0x354 */ s16 unk_354;
+ /* 0x356 */ s16 unk_356;
} EnLiftNuts; // size = 0x358
-extern const ActorInit En_Lift_Nuts_InitVars;
-
#endif // Z_EN_LIFT_NUTS_H
diff --git a/src/overlays/actors/ovl_En_Light/overlay.cfg b/src/overlays/actors/ovl_En_Light/overlay.cfg
deleted file mode 100644
index 763d0ad6d..000000000
--- a/src/overlays/actors/ovl_En_Light/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Light
-z_en_light.c
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 e50cf0da5..830484996 100644
--- a/src/overlays/actors/ovl_En_Light/z_en_light.c
+++ b/src/overlays/actors/ovl_En_Light/z_en_light.c
@@ -18,7 +18,7 @@ void EnLight_Draw(Actor* thisx, PlayState* play);
void func_80865F38(Actor* thisx, PlayState* play);
-const ActorInit En_Light_InitVars = {
+ActorInit En_Light_InitVars = {
ACTOR_EN_LIGHT,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -52,7 +52,7 @@ void EnLight_Init(Actor* thisx, PlayState* play) {
EnLight* this = THIS;
if (!ENLIGHT_GET_4000(&this->actor)) {
- if ((gSaveContext.gameMode == 3) || ENLIGHT_GET_2000(&this->actor)) {
+ if ((gSaveContext.gameMode == GAMEMODE_END_CREDITS) || ENLIGHT_GET_2000(&this->actor)) {
Lights_PointNoGlowSetInfo(&this->lightInfo, this->actor.world.pos.x,
((this->actor.params < 0) ? 1 : 40) + (s32)this->actor.world.pos.y,
this->actor.world.pos.z, 255, 255, 180, -1);
@@ -112,7 +112,7 @@ void EnLight_Update(Actor* thisx, PlayState* play) {
func_80865BF8(this, play);
if ((this->actor.params >= 0) && !ENLIGHT_GET_4000(&this->actor)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_TORCH - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_TORCH - SFX_FLAG);
}
}
@@ -156,7 +156,7 @@ void func_80865F38(Actor* thisx, PlayState* play) {
func_80865BF8(this, play);
if ((this->actor.params >= 0) && (sp2C == true)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_TORCH - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_TORCH - SFX_FLAG);
}
}
diff --git a/src/overlays/actors/ovl_En_Light/z_en_light.h b/src/overlays/actors/ovl_En_Light/z_en_light.h
index b17f55fd7..17762d7fa 100644
--- a/src/overlays/actors/ovl_En_Light/z_en_light.h
+++ b/src/overlays/actors/ovl_En_Light/z_en_light.h
@@ -20,6 +20,4 @@ typedef struct EnLight {
/* 0x14C */ LightInfo lightInfo;
} EnLight; // size = 0x15C
-extern const ActorInit En_Light_InitVars;
-
#endif // Z_EN_LIGHT_H
diff --git a/src/overlays/actors/ovl_En_Look_Nuts/overlay.cfg b/src/overlays/actors/ovl_En_Look_Nuts/overlay.cfg
deleted file mode 100644
index 8d594952f..000000000
--- a/src/overlays/actors/ovl_En_Look_Nuts/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Look_Nuts
-z_en_look_nuts.c
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 6fd949feb..7cd1c3369 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
@@ -24,7 +24,7 @@ void EnLookNuts_RunToPlayer(EnLookNuts* this, PlayState* play);
void EnLookNuts_SetupSendPlayerToSpawn(EnLookNuts* this);
void EnLookNuts_SendPlayerToSpawn(EnLookNuts* this, PlayState* play);
-const ActorInit En_Look_Nuts_InitVars = {
+ActorInit En_Look_Nuts_InitVars = {
ACTOR_EN_LOOK_NUTS,
ACTORCAT_NPC,
FLAGS,
@@ -111,7 +111,7 @@ void EnLookNuts_Init(Actor* thisx, PlayState* play) {
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
this->actor.targetMode = 1;
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->pathLocation = LOOKNUTS_GET_PATROL_LOCATION(&this->actor);
this->switchFlag = LOOKNUTS_GET_SCENE_FLAG(&this->actor);
this->spawnIndex = LOOKNUTS_GET_SPAWN_INDEX(&this->actor);
@@ -120,11 +120,11 @@ void EnLookNuts_Init(Actor* thisx, PlayState* play) {
this->switchFlag = -1;
}
if ((this->switchFlag >= 0) && (Flags_GetSwitch(play, this->switchFlag))) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
if (this->pathLocation == 0x1F) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -151,17 +151,17 @@ void EnLookNuts_Patrol(EnLookNuts* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (Play_InCsMode(play)) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
return;
}
- this->actor.speedXZ = 2.0f;
+ this->actor.speed = 2.0f;
if (Animation_OnFrame(&this->skelAnime, 1.0f) || Animation_OnFrame(&this->skelAnime, 5.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_WALK);
}
if (D_80A6862C != 0) {
- Math_ApproachZeroF(&this->actor.speedXZ, 0.3f, 1.0f);
+ Math_ApproachZeroF(&this->actor.speed, 0.3f, 1.0f);
return;
}
@@ -207,7 +207,7 @@ void EnLookNuts_StandAndWait(EnLookNuts* this, PlayState* play) {
s16 randOffset;
SkelAnime_Update(&this->skelAnime);
- Math_ApproachZeroF(&this->actor.speedXZ, 0.3f, 1.0f);
+ Math_ApproachZeroF(&this->actor.speed, 0.3f, 1.0f);
if (!Play_InCsMode(play) && (D_80A6862C == 0) && (this->eventTimer == 0)) {
this->eventTimer = 10;
switch (this->waitTimer) {
@@ -273,13 +273,13 @@ void EnLookNuts_DetectedPlayer(EnLookNuts* this, PlayState* play) {
void EnLookNuts_RunToPlayer(EnLookNuts* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (Animation_OnFrame(&this->skelAnime, 1.0f) || Animation_OnFrame(&this->skelAnime, 5.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_WALK);
}
- this->actor.speedXZ = 4.0f;
+ this->actor.speed = 4.0f;
Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 1, 0xBB8, 0);
if ((this->actor.xzDistToPlayer < 70.0f) || (this->eventTimer == 0)) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
EnLookNuts_SetupSendPlayerToSpawn(this);
}
}
@@ -295,12 +295,12 @@ void EnLookNuts_SendPlayerToSpawn(EnLookNuts* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 1, 0xBB8, 0);
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
play->nextEntrance = Entrance_CreateFromSpawn(this->spawnIndex);
gSaveContext.nextCutsceneIndex = 0;
Scene_SetExitFade(play);
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.weekEventReg[17] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_17_04);
}
}
@@ -355,11 +355,11 @@ void EnLookNuts_Update(Actor* thisx, PlayState* play) {
if ((this->isPlayerDetected == true) || (this->actor.xzDistToPlayer < 20.0f)) {
Player* player = GET_PLAYER(play);
- if (!(player->stateFlags3 & 0x100) && !Play_InCsMode(play)) {
+ if (!(player->stateFlags3 & PLAYER_STATE3_100) && !Play_InCsMode(play)) {
Math_Vec3f_Copy(&this->headRotTarget, &gZeroVec3f);
this->state = PALACE_GUARD_RUNNING_TO_PLAYER;
play_sound(NA_SE_SY_FOUND);
- func_800B7298(play, &this->actor, 0x1A);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_26);
D_80A6862C = 1;
this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_10);
this->actor.gravity = 0.0f;
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 9d5a1eb24..b72215ce6 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
@@ -35,6 +35,4 @@ typedef struct EnLookNuts {
/* 0x244 */ ColliderCylinder collider;
} EnLookNuts; // size = 0x290
-extern const ActorInit En_Look_Nuts_InitVars;
-
#endif // Z_EN_LOOK_NUTS_H
diff --git a/src/overlays/actors/ovl_En_M_Fire1/overlay.cfg b/src/overlays/actors/ovl_En_M_Fire1/overlay.cfg
deleted file mode 100644
index 1d43db731..000000000
--- a/src/overlays/actors/ovl_En_M_Fire1/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_M_Fire1
-z_en_m_fire1.c
diff --git a/src/overlays/actors/ovl_En_M_Fire1/z_en_m_fire1.c b/src/overlays/actors/ovl_En_M_Fire1/z_en_m_fire1.c
index e42e70ca3..14a9c4add 100644
--- a/src/overlays/actors/ovl_En_M_Fire1/z_en_m_fire1.c
+++ b/src/overlays/actors/ovl_En_M_Fire1/z_en_m_fire1.c
@@ -14,7 +14,7 @@ void EnMFire1_Init(Actor* thisx, PlayState* play);
void EnMFire1_Destroy(Actor* thisx, PlayState* play);
void EnMFire1_Update(Actor* thisx, PlayState* play);
-const ActorInit En_M_Fire1_InitVars = {
+ActorInit En_M_Fire1_InitVars = {
ACTOR_EN_M_FIRE1,
ACTORCAT_MISC,
FLAGS,
@@ -68,9 +68,10 @@ void EnMFire1_Update(Actor* thisx, PlayState* play) {
s32 pad;
if (Math_StepToF(&this->timer, 1.0f, 0.2f)) {
- Actor_MarkForDeath(&this->actor);
- } else {
- Collider_UpdateCylinder(&this->actor, &this->collider);
- CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
+ Actor_Kill(&this->actor);
+ return;
}
+
+ Collider_UpdateCylinder(&this->actor, &this->collider);
+ CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
}
diff --git a/src/overlays/actors/ovl_En_M_Fire1/z_en_m_fire1.h b/src/overlays/actors/ovl_En_M_Fire1/z_en_m_fire1.h
index fd5504e15..144e48d4d 100644
--- a/src/overlays/actors/ovl_En_M_Fire1/z_en_m_fire1.h
+++ b/src/overlays/actors/ovl_En_M_Fire1/z_en_m_fire1.h
@@ -11,6 +11,4 @@ typedef struct EnMFire1 {
/* 0x190 */ f32 timer;
} EnMFire1; // size = 0x194
-extern const ActorInit En_M_Fire1_InitVars;
-
#endif // Z_EN_M_FIRE1_H
diff --git a/src/overlays/actors/ovl_En_M_Thunder/overlay.cfg b/src/overlays/actors/ovl_En_M_Thunder/overlay.cfg
deleted file mode 100644
index 5de5ce33a..000000000
--- a/src/overlays/actors/ovl_En_M_Thunder/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_M_Thunder
-z_en_m_thunder.c
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 1fa4589b5..0586b2111 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
@@ -29,7 +29,7 @@ void EnMThunder_UnkType_Attack(EnMThunder* this, PlayState* play);
#define ENMTHUNDER_TYPE_MAX 4
-const ActorInit En_M_Thunder_InitVars = {
+ActorInit En_M_Thunder_InitVars = {
ACTOR_EN_M_THUNDER,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -129,21 +129,21 @@ void EnMThunder_Init(Actor* thisx, PlayState* play) {
this->isCharging = false;
if (player->stateFlags2 & PLAYER_STATE2_20000) {
- if (!gSaveContext.save.playerData.isMagicAcquired || (gSaveContext.magicState != MAGIC_STATE_IDLE) ||
+ if (!gSaveContext.save.saveInfo.playerData.isMagicAcquired || (gSaveContext.magicState != MAGIC_STATE_IDLE) ||
((ENMTHUNDER_GET_MAGIC_COST(&this->actor) != 0) &&
!Magic_Consume(play, ENMTHUNDER_GET_MAGIC_COST(&this->actor), MAGIC_CONSUME_NOW))) {
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,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
player->stateFlags2 &= ~PLAYER_STATE2_20000;
this->isCharging = false;
- if (gSaveContext.save.weekEventReg[23] & 2) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_02)) {
player->unk_B08[0] = 1.0f;
this->collider.info.toucher.damage = sDamages[this->type + ENMTHUNDER_TYPE_MAX];
this->subtype = ENMTHUNDER_SUBTYPE_SPIN_GREAT;
@@ -216,9 +216,12 @@ void EnMThunder_Spin_AttackNoMagic(EnMThunder* this, PlayState* play) {
AudioSfx_PlaySfx(NA_SE_IT_SWORD_SWING_HARD, &player->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
}
- Actor_MarkForDeath(&this->actor);
- } else if (!(player->stateFlags1 & PLAYER_STATE1_1000)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
+ return;
+ }
+
+ if (!(player->stateFlags1 & PLAYER_STATE1_1000)) {
+ Actor_Kill(&this->actor);
}
}
@@ -260,7 +263,7 @@ void EnMThunder_Charge(EnMThunder* this, PlayState* play) {
AudioSfx_PlaySfx(NA_SE_IT_SWORD_SWING_HARD, &player->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -313,7 +316,7 @@ void EnMThunder_Charge(EnMThunder* this, PlayState* play) {
if (this->actor.child != NULL) {
this->actor.child->parent = NULL;
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -341,7 +344,7 @@ void EnMThunder_Charge(EnMThunder* this, PlayState* play) {
}
if (Play_InCsMode(play)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -367,7 +370,7 @@ void EnMThunder_Spin_Attack(EnMThunder* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (Math_StepToF(&this->lightColorFrac, 0.0f, 0.0625f)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
Math_SmoothStepToF(&this->actor.scale.x, (s32)this->scaleTarget, 0.6f, 0.8f, 0.0f);
Actor_SetScale(&this->actor, this->actor.scale.x);
@@ -391,7 +394,7 @@ void EnMThunder_Spin_Attack(EnMThunder* this, PlayState* play) {
func_808B5EEC(this, play);
if (Play_InCsMode(play)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -406,7 +409,7 @@ void EnMThunder_SwordBeam_Attack(EnMThunder* this, PlayState* play) {
}
if (Math_StepToF(&this->lightColorFrac, 0.0f, 0.05f)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
sp2C = -80.0f * Math_CosS(this->actor.world.rot.x);
@@ -441,7 +444,7 @@ void EnMThunder_SwordBeam_Attack(EnMThunder* this, PlayState* play) {
void EnMThunder_UnkType_Attack(EnMThunder* this, PlayState* play) {
if (Math_StepToF(&this->lightColorFrac, 0.0f, 0.0625f)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
Math_SmoothStepToF(&this->actor.scale.x, (s32)this->scaleTarget, 0.6f, 0.8f, 0.0f);
Actor_SetScale(&this->actor, this->actor.scale.x);
diff --git a/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.h b/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.h
index 7ac851e92..9842eeb78 100644
--- a/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.h
+++ b/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.h
@@ -37,6 +37,4 @@ typedef struct EnMThunder {
/* 0x1C2 */ u8 isCharging;
} EnMThunder; // size = 0x1C4
-extern const ActorInit En_M_Thunder_InitVars;
-
#endif // Z_EN_M_THUNDER_H
diff --git a/src/overlays/actors/ovl_En_Ma4/overlay.cfg b/src/overlays/actors/ovl_En_Ma4/overlay.cfg
deleted file mode 100644
index 3a0c5af88..000000000
--- a/src/overlays/actors/ovl_En_Ma4/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ma4
-z_en_ma4.c
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 0860857c8..1242de4ba 100644
--- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c
+++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c
@@ -54,7 +54,7 @@ typedef enum {
/* 3 */ MA4_STATE_AFTERDESCRIBETHEMCS,
} EnMa4State;
-const ActorInit En_Ma4_InitVars = {
+ActorInit En_Ma4_InitVars = {
ACTOR_EN_MA4,
ACTORCAT_NPC,
FLAGS,
@@ -142,19 +142,21 @@ void EnMa4_ChangeAnim(EnMa4* this, s32 animIndex) {
void func_80ABDD9C(EnMa4* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- s16 flag;
+ s16 trackingMode;
- if (this->unk_1D8.unk_00 == 0 &&
+ if ((this->interactInfo.talkState == NPC_TALK_STATE_IDLE) &&
((this->skelAnime.animation == &gRomaniRunAnim) || (this->skelAnime.animation == &gRomaniLookAroundAnim) ||
(this->skelAnime.animation == &gRomaniShootBowAnim))) {
- flag = 1;
+ trackingMode = NPC_TRACKING_NONE;
} else {
- flag = (this->type == MA4_TYPE_ALIENS_WON && this->actionFunc != EnMa4_DialogueHandler) ? 1 : 0;
+ trackingMode = ((this->type == MA4_TYPE_ALIENS_WON) && (this->actionFunc != EnMa4_DialogueHandler))
+ ? NPC_TRACKING_NONE
+ : NPC_TRACKING_PLAYER_AUTO_TURN;
}
- this->unk_1D8.unk_18 = player->actor.world.pos;
- this->unk_1D8.unk_18.y -= -10.0f;
- func_800BD888(&this->actor, &this->unk_1D8, 0, flag);
+ this->interactInfo.trackPos = player->actor.world.pos;
+ this->interactInfo.trackPos.y -= -10.0f;
+ Npc_TrackPoint(&this->actor, &this->interactInfo, 0, trackingMode);
}
void EnMa4_InitPath(EnMa4* this, PlayState* play) {
@@ -188,11 +190,11 @@ void EnMa4_Init(Actor* thisx, PlayState* play) {
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &D_80AC00DC);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
Actor_SetScale(&this->actor, 0.01f);
this->actor.targetMode = 0;
- this->unk_1D8.unk_00 = 0;
+ this->interactInfo.talkState = NPC_TALK_STATE_IDLE;
this->unk_334 = 0;
this->hasBow = true;
this->mouthTexIndex = 0;
@@ -200,7 +202,7 @@ void EnMa4_Init(Actor* thisx, PlayState* play) {
if (CURRENT_DAY == 1) {
this->type = MA4_TYPE_DAY1;
- } else if (gSaveContext.save.weekEventReg[22] & 1) { // Aliens defeated
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
this->type = MA4_TYPE_ALIENS_DEFEATED;
} else {
this->type = MA4_TYPE_ALIENS_WON;
@@ -238,7 +240,7 @@ void EnMa4_Destroy(Actor* thisx, PlayState* play) {
EnMa4* this = THIS;
Collider_DestroyCylinder(play, &this->collider);
- gSaveContext.save.weekEventReg[8] &= (u8)~1;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_08_01);
}
// Running in circles in the ranch
@@ -260,14 +262,14 @@ void EnMa4_RunInCircles(EnMa4* this, PlayState* play) {
sAnimIndex = 13;
}
} else {
- this->actor.speedXZ = 2.7f;
+ this->actor.speed = 2.7f;
EnMa4_ChangeAnim(this, 9);
sAnimIndex = 9;
}
}
if (sAnimIndex == 13 && Animation_OnFrame(&this->skelAnime, 37.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ROMANI_BOW_FLICK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_ROMANI_BOW_FLICK);
}
sp34.x = this->pathPoints[this->pathIndex].x;
@@ -279,7 +281,7 @@ void EnMa4_RunInCircles(EnMa4* this, PlayState* play) {
Math_SmoothStepToS(&this->actor.shape.rot.y, sp2E, 5, 0x3000, 0x100);
} else {
if ((D_80AC0254 == 0) && ((Rand_Next() % 4) == 0)) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
D_80AC0254 = 2;
EnMa4_ChangeAnim(this, 3);
sAnimIndex = 3;
@@ -296,11 +298,11 @@ void EnMa4_RunInCircles(EnMa4* this, PlayState* play) {
}
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
Actor_MoveWithGravity(&this->actor);
if (this->skelAnime.animation == &gRomaniRunAnim) {
if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 4.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_ROMANI_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_ROMANI_WALK);
}
}
}
@@ -309,14 +311,14 @@ void EnMa4_SetupWait(EnMa4* this) {
if ((this->state != MA4_STATE_AFTERHORSEBACKGAME) && (this->state != MA4_STATE_AFTERDESCRIBETHEMCS)) {
if (this->type != MA4_TYPE_ALIENS_WON) {
EnMa4_ChangeAnim(this, 9);
- this->actor.speedXZ = 2.7f;
+ this->actor.speed = 2.7f;
} else {
EnMa4_ChangeAnim(this, 15);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
} else {
EnMa4_ChangeAnim(this, 1);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
this->actor.gravity = -0.2f;
@@ -347,7 +349,7 @@ void EnMa4_Wait(EnMa4* this, PlayState* play) {
EnMa4_StartDialogue(this, play);
EnMa4_SetupDialogueHandler(this);
} else if (this->type != MA4_TYPE_ALIENS_WON || ABS_ALT(yaw) < 0x4000) {
- if (!(player->stateFlags1 & 0x800000)) {
+ if (!(player->stateFlags1 & PLAYER_STATE1_800000)) {
func_800B8614(&this->actor, play, 100.0f);
}
}
@@ -372,7 +374,7 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) {
case 0x3341:
if (play->msgCtx.choiceIndex == 0) {
func_8019F208();
- gSaveContext.save.weekEventReg[21] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_21_20);
Message_StartTextbox(play, 0x3343, &this->actor);
this->textId = 0x3343;
} else {
@@ -388,7 +390,7 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) {
case 0x3346:
if (play->msgCtx.choiceIndex == 0) {
func_8019F208();
- gSaveContext.save.weekEventReg[21] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_21_20);
Message_StartTextbox(play, 0x3343, &this->actor);
this->textId = 0x3343;
} else {
@@ -449,7 +451,7 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) {
// "Try again?"
if (play->msgCtx.choiceIndex == 0) { // Yes
func_8019F208();
- func_801477B4(play);
+ Message_CloseTextbox(play);
EnMa4_SetupBeginHorsebackGame(this);
} else { // No
if (this->type == MA4_TYPE_ALIENS_DEFEATED) {
@@ -492,7 +494,7 @@ void EnMa4_ChooseNextDialogue(EnMa4* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
switch (this->textId) {
case 0x2390:
- func_801477B4(play);
+ Message_CloseTextbox(play);
EnMa4_SetupBeginHorsebackGame(this);
break;
@@ -527,7 +529,7 @@ void EnMa4_ChooseNextDialogue(EnMa4* this, PlayState* play) {
break;
case 0x333E:
- func_801477B4(play);
+ Message_CloseTextbox(play);
EnMa4_SetupBeginDescribeThemCs(this);
break;
@@ -564,7 +566,7 @@ void EnMa4_ChooseNextDialogue(EnMa4* this, PlayState* play) {
break;
case 0x334A:
- func_801477B4(play);
+ Message_CloseTextbox(play);
EnMa4_SetupBeginHorsebackGame(this);
break;
@@ -595,15 +597,15 @@ void EnMa4_ChooseNextDialogue(EnMa4* this, PlayState* play) {
Message_StartTextbox(play, 0x334C, &this->actor);
this->textId = 0x334C;
} else {
- func_801477B4(play);
- player->stateFlags1 |= 0x20;
+ Message_CloseTextbox(play);
+ player->stateFlags1 |= PLAYER_STATE1_20;
EnMa4_SetupBeginEponasSongCs(this);
EnMa4_BeginEponasSongCs(this, play);
}
break;
case 0x3358:
- if ((gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) || !(CHECK_QUEST_ITEM(QUEST_SONG_EPONA))) {
+ 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);
@@ -666,7 +668,7 @@ void EnMa4_BeginHorsebackGame(EnMa4* this, PlayState* play) {
gSaveContext.nextCutsceneIndex = 0xFFF0;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_80;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
}
void EnMa4_HorsebackGameCheckPlayerInteractions(EnMa4* this, PlayState* play) {
@@ -688,20 +690,20 @@ void EnMa4_HorsebackGameTalking(EnMa4* this, PlayState* play) {
void EnMa4_InitHorsebackGame(EnMa4* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- play->interfaceCtx.unk_280 = 1;
+ play->interfaceCtx.minigameState = MINIGAME_STATE_COUNTDOWN_SETUP_3;
Interface_StartTimer(TIMER_ID_MINIGAME_2, 0);
- gSaveContext.save.weekEventReg[8] |= 1;
- func_80112AFC(play);
- player->stateFlags1 |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_08_01);
+ Interface_InitMinigame(play);
+ player->stateFlags1 |= PLAYER_STATE1_20;
this->actionFunc = EnMa4_SetupHorsebackGameWait;
}
void EnMa4_SetupHorsebackGameWait(EnMa4* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (play->interfaceCtx.unk_280 == 8) {
+ if (play->interfaceCtx.minigameState == MINIGAME_STATE_COUNTDOWN_GO) {
this->actionFunc = EnMa4_HorsebackGameWait;
- player->stateFlags1 &= ~0x20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
}
}
@@ -709,12 +711,12 @@ void EnMa4_HorsebackGameWait(EnMa4* this, PlayState* play) {
static s16 D_80AC0258 = 0;
Player* player = GET_PLAYER(play);
- player->stateFlags3 |= 0x400;
+ player->stateFlags3 |= PLAYER_STATE3_400;
EnMa4_HorsebackGameCheckPlayerInteractions(this, play);
if (this->poppedBalloonCounter != D_80AC0258) {
D_80AC0258 = this->poppedBalloonCounter;
- play->interfaceCtx.unk_25C = 1;
+ play->interfaceCtx.minigamePoints = 1;
}
if ((gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] >= SECONDS_TO_TIMER(120)) ||
@@ -726,17 +728,17 @@ void EnMa4_HorsebackGameWait(EnMa4* this, PlayState* play) {
}
void EnMa4_SetupHorsebackGameEnd(EnMa4* this, PlayState* play) {
- gSaveContext.save.weekEventReg[8] &= (u8)~1;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_08_01);
this->actionFunc = EnMa4_HorsebackGameEnd;
- Audio_QueueSeqCmd(NA_BGM_STOP);
- Audio_QueueSeqCmd(NA_BGM_HORSE_GOAL | 0x8000);
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0);
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_HORSE_GOAL | SEQ_FLAG_ASYNC);
}
void EnMa4_HorsebackGameEnd(EnMa4* this, PlayState* play) {
static s32 sFrameCounter = 0;
Player* player = GET_PLAYER(play);
- if (player->stateFlags1 & 0x100000) {
+ if (player->stateFlags1 & PLAYER_STATE1_100000) {
play->actorCtx.unk268 = 1;
play->actorCtx.unk_26C.press.button = BTN_A;
} else {
@@ -760,10 +762,10 @@ void EnMa4_HorsebackGameEnd(EnMa4* this, PlayState* play) {
if (this->poppedBalloonCounter == 10) {
play->transitionType = TRANS_TYPE_80;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
} else {
play->transitionType = TRANS_TYPE_64;
- gSaveContext.nextTransitionType = TRANS_TYPE_02;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
}
this->poppedBalloonCounter = 0;
@@ -778,16 +780,16 @@ void EnMa4_SetupBeginEponasSongCs(EnMa4* this) {
// Epona's Song cutscene is an ActorCutscene
void EnMa4_BeginEponasSongCs(EnMa4* this, PlayState* play) {
- s16 cutsceneIndex = this->actor.cutscene;
+ s16 csId = this->actor.csId;
- if (ActorCutscene_GetCanPlayNext(cutsceneIndex) != 0) {
- ActorCutscene_Start(cutsceneIndex, &this->actor);
+ if (CutsceneManager_IsNext(csId)) {
+ CutsceneManager_Start(csId, &this->actor);
EnMa4_SetupEponasSongCs(this);
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- ActorCutscene_SetIntentToPlay(cutsceneIndex);
+ CutsceneManager_Queue(csId);
}
}
@@ -796,17 +798,17 @@ void EnMa4_SetupEponasSongCs(EnMa4* this) {
this->actionFunc = EnMa4_EponasSongCs;
}
-static u16 D_80AC0260 = 99;
+static u16 sCueId = 99;
void EnMa4_EponasSongCs(EnMa4* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 120)) {
- s32 actionIndex = Cutscene_GetActorActionIndex(play, 120);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_120)) {
+ s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_120);
- if (play->csCtx.frames == play->csCtx.actorActions[actionIndex]->startFrame) {
- if (play->csCtx.actorActions[actionIndex]->action != D_80AC0260) {
- D_80AC0260 = play->csCtx.actorActions[actionIndex]->action;
+ if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) {
+ if (sCueId != play->csCtx.actorCues[cueChannel]->id) {
+ sCueId = play->csCtx.actorCues[cueChannel]->id;
this->animTimer = 0;
- switch (play->csCtx.actorActions[actionIndex]->action) {
+ switch (play->csCtx.actorCues[cueChannel]->id) {
case 1:
this->hasBow = true;
EnMa4_ChangeAnim(this, 1);
@@ -820,16 +822,16 @@ void EnMa4_EponasSongCs(EnMa4* this, PlayState* play) {
}
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex);
- if (D_80AC0260 == 2 && this->animTimer == 0 && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
+ if (sCueId == 2 && this->animTimer == 0 && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
EnMa4_ChangeAnim(this, 7);
}
} else {
Player* player = GET_PLAYER(play);
- player->stateFlags1 |= 0x20;
- func_800B85E0(&this->actor, play, 200.0f, PLAYER_AP_MINUS1);
- D_80AC0260 = 99;
+ player->stateFlags1 |= PLAYER_STATE1_20;
+ func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1);
+ sCueId = 99;
this->hasBow = true;
EnMa4_SetupEndEponasSongCs(this);
}
@@ -844,13 +846,13 @@ void EnMa4_EndEponasSongCs(EnMa4* this, PlayState* play) {
this->actor.flags |= ACTOR_FLAG_10000;
if (Actor_ProcessTalkRequest(&this->actor, &play->state) != 0) {
- player->stateFlags1 &= ~0x20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
Message_StartTextbox(play, 0x334C, &this->actor);
this->textId = 0x334C;
this->actor.flags &= ~ACTOR_FLAG_10000;
EnMa4_SetupDialogueHandler(this);
} else {
- func_800B85E0(&this->actor, play, 200.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1);
}
}
@@ -863,7 +865,7 @@ void EnMa4_BeginDescribeThemCs(EnMa4* this, PlayState* play) {
gSaveContext.nextCutsceneIndex = 0xFFF5;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_64;
- gSaveContext.nextTransitionType = TRANS_TYPE_02;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
}
void EnMa4_StartDialogue(EnMa4* this, PlayState* play) {
@@ -873,7 +875,7 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) {
switch (this->type) {
case MA4_TYPE_DAY1:
if (gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) {
- if ((gSaveContext.save.weekEventReg[21] & 0x80)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_21_80)) {
EnMa4_SetFaceExpression(this, 3, 3);
Message_StartTextbox(play, 0x3337, &this->actor);
this->textId = 0x3337;
@@ -881,11 +883,11 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) {
} else {
Message_StartTextbox(play, 0x3335, &this->actor);
this->textId = 0x3335;
- gSaveContext.save.weekEventReg[21] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_21_80);
}
} else if (this->state == MA4_STATE_DEFAULT) {
- if ((gSaveContext.save.weekEventReg[21] & 0x40)) {
- if (!(gSaveContext.save.weekEventReg[21] & 0x20)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_21_40)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_21_20)) {
Message_StartTextbox(play, 0x3346, &this->actor);
this->textId = 0x3346;
} else {
@@ -895,7 +897,7 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) {
} else {
Message_StartTextbox(play, 0x3338, &this->actor);
this->textId = 0x3338;
- gSaveContext.save.weekEventReg[21] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_21_40);
}
} else if (this->state == MA4_STATE_AFTERHORSEBACKGAME) {
if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] >= SECONDS_TO_TIMER(120)) {
@@ -905,9 +907,9 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) {
this->textId = 0x336D;
} else {
time = gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2];
- if ((s32)time < (s32)gSaveContext.save.horseBackBalloonHighScore) {
+ if ((s32)time < (s32)gSaveContext.save.saveInfo.horseBackBalloonHighScore) {
// [Score] New record!
- gSaveContext.save.horseBackBalloonHighScore = time;
+ gSaveContext.save.saveInfo.horseBackBalloonHighScore = time;
EnMa4_SetFaceExpression(this, 0, 3);
Message_StartTextbox(play, 0x3350, &this->actor);
this->textId = 0x3350;
@@ -929,7 +931,7 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) {
case MA4_TYPE_ALIENS_DEFEATED:
if (gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) {
- if ((gSaveContext.save.weekEventReg[21] & 0x80)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_21_80)) {
EnMa4_SetFaceExpression(this, 3, 3);
Message_StartTextbox(play, 0x3337, &this->actor);
this->textId = 0x3337;
@@ -937,7 +939,7 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) {
} else {
Message_StartTextbox(play, 0x3335, &this->actor);
this->textId = 0x3335;
- gSaveContext.save.weekEventReg[21] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_21_80);
}
} else if (this->state == MA4_STATE_DEFAULT) {
Message_StartTextbox(play, 0x3354, &this->actor);
@@ -949,8 +951,8 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) {
this->textId = 0x3356;
} else {
time = gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2];
- if ((s32)time < (s32)gSaveContext.save.horseBackBalloonHighScore) {
- gSaveContext.save.horseBackBalloonHighScore = time;
+ if ((s32)time < (s32)gSaveContext.save.saveInfo.horseBackBalloonHighScore) {
+ gSaveContext.save.saveInfo.horseBackBalloonHighScore = time;
EnMa4_SetFaceExpression(this, 0, 3);
Message_StartTextbox(play, 0x3350, &this->actor);
this->textId = 0x3350;
@@ -976,9 +978,9 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) {
this->textId = 0x3356;
} else {
time = gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2];
- if ((s32)time < (s32)gSaveContext.save.horseBackBalloonHighScore) {
+ if ((s32)time < (s32)gSaveContext.save.saveInfo.horseBackBalloonHighScore) {
// New record
- gSaveContext.save.horseBackBalloonHighScore = time;
+ gSaveContext.save.saveInfo.horseBackBalloonHighScore = time;
Message_StartTextbox(play, 0x335D, &this->actor);
this->textId = 0x335D;
} else {
@@ -1027,17 +1029,17 @@ void EnMa4_Update(Actor* thisx, PlayState* play) {
s32 EnMa4_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
EnMa4* this = THIS;
- Vec3s sp4;
+ Vec3s limbRot;
if (limbIndex == ROMANI_LIMB_HEAD) {
- sp4 = this->unk_1D8.unk_08;
- rot->x = rot->x + sp4.y;
- rot->z = rot->z + sp4.x;
+ limbRot = this->interactInfo.headRot;
+ rot->x += limbRot.y;
+ rot->z += limbRot.x;
}
if (limbIndex == ROMANI_LIMB_TORSO) {
- sp4 = this->unk_1D8.unk_0E;
- rot->x = rot->x - sp4.y;
- rot->z = rot->z - sp4.x;
+ limbRot = this->interactInfo.torsoRot;
+ rot->x -= limbRot.y;
+ rot->z -= limbRot.x;
}
return false;
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 148e2ef30..91876c938 100644
--- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.h
+++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.h
@@ -13,7 +13,7 @@ typedef struct EnMa4 {
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ EnMa4ActionFunc actionFunc;
/* 0x18C */ ColliderCylinder collider;
- /* 0x1D8 */ struct_800BD888_arg1 unk_1D8;
+ /* 0x1D8 */ NpcInteractInfo interactInfo;
/* 0x200 */ Vec3s* pathPoints;
/* 0x204 */ Vec3s jointTable[ROMANI_LIMB_MAX];
/* 0x28E */ UNK_TYPE1 unk28E[0x6];
@@ -35,6 +35,4 @@ typedef struct EnMa4 {
/* 0x33E */ u16 textId;
} EnMa4; // size = 0x340
-extern const ActorInit En_Ma4_InitVars;
-
#endif // Z_EN_MA4_H
diff --git a/src/overlays/actors/ovl_En_Ma_Yto/overlay.cfg b/src/overlays/actors/ovl_En_Ma_Yto/overlay.cfg
deleted file mode 100644
index a1085bf0e..000000000
--- a/src/overlays/actors/ovl_En_Ma_Yto/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ma_Yto
-z_en_ma_yto.c
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 49d7a06fb..6d0b027eb 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
@@ -69,7 +69,7 @@ s32 EnMaYto_HasSpokenToPlayerToday(void);
s32 EnMaYto_HasSpokenToPlayer(void);
void EnMaYto_SetTalkedFlag(void);
-const ActorInit En_Ma_Yto_InitVars = {
+ActorInit En_Ma_Yto_InitVars = {
ACTOR_EN_MA_YTO,
ACTORCAT_NPC,
FLAGS,
@@ -153,7 +153,7 @@ void EnMaYto_Init(Actor* thisx, PlayState* play) {
this->unk320 = 0;
this->eyeTexIndex = 0;
- if (CURRENT_DAY == 1 || (gSaveContext.save.weekEventReg[22] & 1)) {
+ if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
EnMaYto_SetFaceExpression(this, 0, 1);
} else {
EnMaYto_SetFaceExpression(this, 5, 2);
@@ -163,7 +163,7 @@ void EnMaYto_Init(Actor* thisx, PlayState* play) {
this->blinkTimer = 100;
this->type = EN_MA_YTO_GET_TYPE(&this->actor);
if (!EnMaYto_CheckValidSpawn(this, play)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -174,7 +174,7 @@ void EnMaYto_Init(Actor* thisx, PlayState* play) {
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit2);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
if (EnMaYto_TryFindRomani(this, play) == 1) {
EnMaYto_SetupKeepLookingForRomani(this);
@@ -186,19 +186,19 @@ 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 && !(gSaveContext.save.weekEventReg[22] & 1)) {
+ if (CURRENT_DAY == 3 && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
return false;
}
break;
case MA_YTO_TYPE_DINNER:
- if (CURRENT_DAY != 1 && (gSaveContext.save.weekEventReg[22] & 1)) {
+ if (CURRENT_DAY != 1 && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
return false;
}
break;
case MA_YTO_TYPE_BARN:
- if (gSaveContext.save.weekEventReg[22] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
if (((this->actor.params & 0x0F00) >> 8) != 0) {
return false;
}
@@ -211,9 +211,8 @@ s32 EnMaYto_CheckValidSpawn(EnMaYto* this, PlayState* play) {
break;
case MA_YTO_TYPE_AFTERMILKRUN:
- // if (!(ProtectedCremia) && !(gSaveContext.save.weekEventReg[52] & 2)) || (PlayedMilkMinigame))
- if ((!(gSaveContext.save.weekEventReg[52] & 1) && !(gSaveContext.save.weekEventReg[52] & 2)) ||
- (gSaveContext.save.weekEventReg[14] & 1)) {
+ if ((!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_02)) ||
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_14_01)) {
return false;
}
break;
@@ -240,8 +239,7 @@ void EnMaYto_InitAnimation(EnMaYto* this, PlayState* play) {
break;
case MA_YTO_TYPE_BARN:
- // if (AliensDefeated)
- if (gSaveContext.save.weekEventReg[22] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
EnMaYto_ChangeAnim(this, 12);
} else {
EnMaYto_ChangeAnim(this, 8);
@@ -279,7 +277,7 @@ void EnMaYto_ChooseAction(EnMaYto* this, PlayState* play) {
case MA_YTO_TYPE_AFTERMILKRUN:
this->unk310 = 0;
- if (INV_CONTENT(ITEM_MASK_ROMANI) == ITEM_MASK_ROMANI && (gSaveContext.save.weekEventReg[52] & 1) &&
+ if ((INV_CONTENT(ITEM_MASK_ROMANI) == ITEM_MASK_ROMANI) && CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01) &&
(Rand_Next() & 0x80)) {
EnMaYto_SetupBeginWarmFuzzyFeelingCs(this);
} else {
@@ -334,7 +332,7 @@ s32 EnMaYto_TryFindRomani(EnMaYto* this, PlayState* play) {
return 0;
case MA_YTO_TYPE_DINNER:
- if (!(gSaveContext.save.weekEventReg[22] & 1) && CURRENT_DAY == 2) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) && (CURRENT_DAY == 2)) {
return 0;
}
if (EnMaYto_SearchRomani(this, play)) {
@@ -343,8 +341,7 @@ s32 EnMaYto_TryFindRomani(EnMaYto* this, PlayState* play) {
return 1;
case MA_YTO_TYPE_BARN:
- // if (AliensDefeated)
- if (gSaveContext.save.weekEventReg[22] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
if (EnMaYto_SearchRomani(this, play)) {
return 2;
}
@@ -498,7 +495,7 @@ void EnMaYto_DefaultChooseNextDialogue(EnMaYto* this, PlayState* play) {
}
void EnMaYto_SetupDinnerWait(EnMaYto* this) {
- if (CURRENT_DAY == 1 || (gSaveContext.save.weekEventReg[22] & 1)) {
+ if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
func_80B90E50(this, 0);
this->unk31E = 0;
} else {
@@ -539,7 +536,7 @@ void EnMaYto_DinnerWait(EnMaYto* this, PlayState* play) {
}
void EnMaYto_SetupDinnerDialogueHandler(EnMaYto* this) {
- if (CURRENT_DAY == 1 || (gSaveContext.save.weekEventReg[22] & 1)) {
+ if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
func_80B90E50(this, 1);
} else {
func_80B90E50(this, 2);
@@ -690,7 +687,7 @@ void EnMaYto_DinnerChooseNextDialogue(EnMaYto* this, PlayState* play) {
}
void EnMaYto_SetupBarnWait(EnMaYto* this) {
- if (CURRENT_DAY == 1 || (gSaveContext.save.weekEventReg[22] & 1)) {
+ if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
EnMaYto_ChangeAnim(this, 13);
func_80B90E50(this, 0);
this->unk31E = 0;
@@ -718,7 +715,7 @@ void EnMaYto_BarnWait(EnMaYto* this, PlayState* play) {
Actor_ChangeFocus(&this->actor, play, &this->actor);
EnMaYto_BarnStartDialogue(this, play);
EnMaYto_SetupBarnDialogueHandler(this);
- } else if (!(gSaveContext.save.weekEventReg[22] & 1) || ABS_ALT(direction) < 0x2000) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) || ABS_ALT(direction) < 0x2000) {
func_800B8614(&this->actor, play, 100.0f);
child = this->actor.child;
@@ -730,7 +727,7 @@ void EnMaYto_BarnWait(EnMaYto* this, PlayState* play) {
}
void EnMaYto_SetupBarnDialogueHandler(EnMaYto* this) {
- if (CURRENT_DAY == 1 || (gSaveContext.save.weekEventReg[22] & 1)) {
+ if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
func_80B90E50(this, 1);
} else {
func_80B90E50(this, 2);
@@ -878,7 +875,7 @@ void EnMaYto_BarnChooseNextDialogue(EnMaYto* this, PlayState* play) {
}
void EnMaYto_SetupAfterMilkRunInit(EnMaYto* this) {
- if (gSaveContext.save.weekEventReg[52] & 1) { // if (ProtectedCremia)
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) {
EnMaYto_SetFaceExpression(this, 3, 1);
} else {
Audio_PlayFanfare(NA_BGM_FAILURE_1);
@@ -893,16 +890,15 @@ void EnMaYto_AfterMilkRunInit(EnMaYto* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->actor.flags &= ~ACTOR_FLAG_10000;
- if (gSaveContext.save.weekEventReg[52] & 1) { // if (ProtectedCremia)
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) {
Message_StartTextbox(play, 0x33C1, &this->actor);
this->textId = 0x33C1;
} else {
- // Fails milk minigame
+ // Failed milk minigame
EnMaYto_SetFaceExpression(this, 5, 2);
Message_StartTextbox(play, 0x33C0, &this->actor);
this->textId = 0x33C0;
- // Attempted Cremia Cart Ride
- gSaveContext.save.weekEventReg[14] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_14_01);
this->unk310 = 4;
EnMaYto_SetupPostMilkRunWaitDialogueEnd(this);
func_80151BB4(play, 6);
@@ -948,7 +944,7 @@ void EnMaYto_AfterMilkRunChooseNextDialogue(EnMaYto* this, PlayState* play) {
break;
case 0x33C2:
- func_801477B4(play);
+ Message_CloseTextbox(play);
EnMaYto_SetupPostMilkRunGiveReward(this);
EnMaYto_PostMilkRunGiveReward(this, play);
break;
@@ -964,10 +960,10 @@ void EnMaYto_PostMilkRunGiveReward(EnMaYto* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
EnMaYto_SetupPostMilkRunExplainReward(this);
} else if (INV_CONTENT(ITEM_MASK_ROMANI) == ITEM_MASK_ROMANI) {
- Actor_PickUp(&this->actor, play, GI_RUPEE_HUGE, 500.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_RUPEE_HUGE, 500.0f, 100.0f);
this->unk310 = 2;
} else {
- Actor_PickUp(&this->actor, play, GI_MASK_ROMANI, 500.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MASK_ROMANI, 500.0f, 100.0f);
this->unk310 = 1;
}
}
@@ -983,8 +979,7 @@ void EnMaYto_PostMilkRunExplainReward(EnMaYto* this, PlayState* play) {
EnMaYto_SetFaceExpression(this, 0, 1);
Message_StartTextbox(play, 0x33C3, &this->actor);
this->textId = 0x33C3;
- // Attempted Cremia Cart Ride
- gSaveContext.save.weekEventReg[14] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_14_01);
this->unk310 = 3;
func_80151BB4(play, 0x20);
func_80151BB4(play, 0x1F);
@@ -995,14 +990,13 @@ void EnMaYto_PostMilkRunExplainReward(EnMaYto* this, PlayState* play) {
EnMaYto_SetFaceExpression(this, 0, 1);
Message_StartTextbox(play, 0x33D0, &this->actor);
this->textId = 0x33D0;
- // Attempted Cremia Cart Ride
- gSaveContext.save.weekEventReg[14] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_14_01);
this->unk310 = 3;
func_80151BB4(play, 6);
EnMaYto_SetupPostMilkRunWaitDialogueEnd(this);
}
} else {
- func_800B85E0(&this->actor, play, 200.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1);
}
}
@@ -1011,14 +1005,14 @@ void EnMaYto_SetupBeginWarmFuzzyFeelingCs(EnMaYto* this) {
}
void EnMaYto_BeginWarmFuzzyFeelingCs(EnMaYto* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_Start(this->actor.cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_Start(this->actor.csId, &this->actor);
EnMaYto_SetupWarmFuzzyFeelingCs(this);
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
@@ -1027,27 +1021,26 @@ void EnMaYto_SetupWarmFuzzyFeelingCs(EnMaYto* this) {
this->actionFunc = EnMaYto_WarmFuzzyFeelingCs;
}
-static u16 D_80B915F0 = 99;
+static u16 sCueId = 99;
void EnMaYto_WarmFuzzyFeelingCs(EnMaYto* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 556)) {
- s32 csActionIndex = Cutscene_GetActorActionIndex(play, 556);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_556)) {
+ s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_556);
- if (play->csCtx.frames == play->csCtx.actorActions[csActionIndex]->startFrame) {
- u16 action = play->csCtx.actorActions[csActionIndex]->action;
+ if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) {
+ u16 cueId = play->csCtx.actorCues[cueChannel]->id;
if (1) {}
- if (action != D_80B915F0) {
- D_80B915F0 = action;
- switch (action) {
+ if (cueId != sCueId) {
+ sCueId = cueId;
+ switch (cueId) {
case 1:
EnMaYto_ChangeAnim(this, 0);
break;
case 2:
- // Attempted Cremia Cart Ride
- gSaveContext.save.weekEventReg[14] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_14_01);
EnMaYto_ChangeAnim(this, 18);
break;
@@ -1058,13 +1051,13 @@ void EnMaYto_WarmFuzzyFeelingCs(EnMaYto* this, PlayState* play) {
}
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, csActionIndex);
- if (D_80B915F0 == 2 && this->skelAnime.animation == &gCremiaHugStartAnim &&
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
+ if (sCueId == 2 && this->skelAnime.animation == &gCremiaHugStartAnim &&
Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
EnMaYto_ChangeAnim(this, 20);
}
} else {
- D_80B915F0 = 99;
+ sCueId = 99;
}
}
@@ -1075,8 +1068,8 @@ 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) {
- func_800B7298(play, &this->actor, 7);
- func_801477B4(play);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT);
+ Message_CloseTextbox(play);
}
}
@@ -1098,7 +1091,7 @@ void EnMaYto_PostMilkRunEnd(EnMaYto* this, PlayState* play) {
gSaveContext.nextCutsceneIndex = 0;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_80;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
}
void EnMaYto_DefaultStartDialogue(EnMaYto* this, PlayState* play) {
@@ -1228,8 +1221,7 @@ void EnMaYto_DinnerStartDialogue(EnMaYto* this, PlayState* play) {
}
void EnMaYto_BarnStartDialogue(EnMaYto* this, PlayState* play) {
- // if (AliensDefeated)
- if (gSaveContext.save.weekEventReg[22] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
if (CURRENT_DAY == 2) {
if (this->unk310 == 1) {
Message_StartTextbox(play, 0x33AE, &this->actor);
@@ -1276,29 +1268,29 @@ void EnMaYto_ChangeAnim(EnMaYto* this, s32 animIndex) {
void func_80B90C78(EnMaYto* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- s16 flag;
+ s16 trackingMode;
SkelAnime_Update(&this->skelAnime);
- flag = this->unk31E == 2 ? true : false;
+ trackingMode = (this->unk31E == 2) ? NPC_TRACKING_NONE : NPC_TRACKING_PLAYER_AUTO_TURN;
if (this->unk31E == 0) {
- this->unk_1D8.unk_18 = player->actor.world.pos;
- this->unk_1D8.unk_14 = 0.0f;
+ this->interactInfo.trackPos = player->actor.world.pos;
+ this->interactInfo.yOffset = 0.0f;
} else if (this->unk31E == 1) {
- Math_Vec3f_StepTo(&this->unk_1D8.unk_18, &this->actor.child->world.pos, 8.0f);
- this->unk_1D8.unk_14 = 0.0f;
+ Math_Vec3f_StepTo(&this->interactInfo.trackPos, &this->actor.child->world.pos, 8.0f);
+ this->interactInfo.yOffset = 0.0f;
}
if (this->unk320 == 0) {
if (this->actionFunc == EnMaYto_WarmFuzzyFeelingCs) {
- this->unk_1D8.unk_08.y = 0;
- this->unk_1D8.unk_08.x = 0;
+ this->interactInfo.headRot.y = 0;
+ this->interactInfo.headRot.x = 0;
} else {
- func_800BD888(&this->actor, &this->unk_1D8, 0xD, flag);
+ Npc_TrackPoint(&this->actor, &this->interactInfo, 13, trackingMode);
}
} else {
- Math_SmoothStepToS(&this->unk_1D8.unk_08.y, 0, 3, 0x71C, 0xB6);
- Math_SmoothStepToS(&this->unk_1D8.unk_08.x, 0x18E3, 5, 0x71C, 0xB6);
+ Math_SmoothStepToS(&this->interactInfo.headRot.y, 0, 3, 0x71C, 0xB6);
+ Math_SmoothStepToS(&this->interactInfo.headRot.x, 0x18E3, 5, 0x71C, 0xB6);
}
EnMaYto_UpdateEyes(this);
@@ -1352,7 +1344,7 @@ void EnMaYto_SetFaceExpression(EnMaYto* this, s16 overrideEyeTexIndex, s16 mouth
}
void EnMaYto_InitFaceExpression(EnMaYto* this) {
- if (CURRENT_DAY == 1 || (gSaveContext.save.weekEventReg[22] & 1)) {
+ if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
EnMaYto_SetFaceExpression(this, 0, 1);
EnMaYto_SetRomaniFaceExpression(this, 0, 0);
} else {
@@ -1364,19 +1356,19 @@ void EnMaYto_InitFaceExpression(EnMaYto* this) {
s32 EnMaYto_HasSpokenToPlayerToday(void) {
switch (CURRENT_DAY) {
case 1:
- if (gSaveContext.save.weekEventReg[13] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_04)) {
return true;
}
break;
case 2:
- if (gSaveContext.save.weekEventReg[13] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_08)) {
return true;
}
break;
case 3:
- if (gSaveContext.save.weekEventReg[13] & 0x10) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_10)) {
return true;
}
break;
@@ -1385,20 +1377,20 @@ s32 EnMaYto_HasSpokenToPlayerToday(void) {
}
s32 EnMaYto_HasSpokenToPlayer(void) {
- // Please note each case doesn't have their respective `break`s.
+ // Please note no case here has a `break`.
switch (CURRENT_DAY) {
case 3:
- if (gSaveContext.save.weekEventReg[13] & 0x10) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_10)) {
return true;
}
case 2:
- if (gSaveContext.save.weekEventReg[13] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_08)) {
return true;
}
case 1:
- if (gSaveContext.save.weekEventReg[13] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_04)) {
return true;
}
}
@@ -1408,15 +1400,15 @@ s32 EnMaYto_HasSpokenToPlayer(void) {
void EnMaYto_SetTalkedFlag(void) {
switch (CURRENT_DAY) {
case 1:
- gSaveContext.save.weekEventReg[13] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_13_04);
break;
case 2:
- gSaveContext.save.weekEventReg[13] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_13_08);
break;
case 3:
- gSaveContext.save.weekEventReg[13] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_13_10);
break;
}
}
@@ -1431,26 +1423,26 @@ void EnMaYto_Update(Actor* thisx, PlayState* play) {
s32 EnMaYto_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
EnMaYto* this = THIS;
- Vec3s sp4;
+ Vec3s limbRot;
if (limbIndex == CREMIA_LIMB_HEAD) {
- sp4 = this->unk_1D8.unk_08;
+ limbRot = this->interactInfo.headRot;
- rot->x += sp4.y;
- rot->z += sp4.x;
+ rot->x += limbRot.y;
+ rot->z += limbRot.x;
} else if (limbIndex == CREMIA_LIMB_TORSO) {
- if (this->skelAnime.animation != &gCremiaSittingPetCowAnim &&
- this->skelAnime.animation != &gCremiaSittingLookDownAnim) {
- sp4 = this->unk_1D8.unk_0E;
+ if ((this->skelAnime.animation != &gCremiaSittingPetCowAnim) &&
+ (this->skelAnime.animation != &gCremiaSittingLookDownAnim)) {
+ limbRot = this->interactInfo.torsoRot;
- rot->x += sp4.y;
- if (this->skelAnime.animation == &gCremiaIdleAnim || this->skelAnime.animation == &gCremiaSittingAnim ||
- this->skelAnime.animation == &gCremiaSittingLookDownAnim) {
- rot->z += sp4.x;
+ rot->x += limbRot.y;
+ if ((this->skelAnime.animation == &gCremiaIdleAnim) || (this->skelAnime.animation == &gCremiaSittingAnim) ||
+ (this->skelAnime.animation == &gCremiaSittingLookDownAnim)) {
+ rot->z += limbRot.x;
}
}
}
- return 0;
+ return false;
}
void EnMaYto_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
@@ -1466,7 +1458,7 @@ void EnMaYto_Draw(Actor* thisx, PlayState* play) {
s32 pad;
OPEN_DISPS(play->state.gfxCtx);
- if (this->type == MA_YTO_TYPE_BARN && (gSaveContext.save.weekEventReg[22] & 1)) { // Aliens defeated
+ if (this->type == MA_YTO_TYPE_BARN && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gCremiaWoodenBoxDL);
}
diff --git a/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.h b/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.h
index e21b30c29..208e41270 100644
--- a/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.h
+++ b/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.h
@@ -13,7 +13,7 @@ typedef struct EnMaYto {
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ EnMaYtoActionFunc actionFunc;
/* 0x18C */ ColliderCylinder collider;
- /* 0x1D8 */ struct_800BD888_arg1 unk_1D8;
+ /* 0x1D8 */ NpcInteractInfo interactInfo;
/* 0x200 */ s32 unk200; // unused
/* 0x204 */ s32 type;
/* 0x208 */ Vec3s jointTable[CREMIA_LIMB_MAX];
@@ -30,8 +30,6 @@ typedef struct EnMaYto {
/* 0x322 */ u16 textId;
} EnMaYto; // size = 0x324
-extern const ActorInit En_Ma_Yto_InitVars;
-
typedef enum {
/* 0 */ MA_YTO_TYPE_DEFAULT, // Strokes cow on day 1
/* 1 */ MA_YTO_TYPE_BARN,
diff --git a/src/overlays/actors/ovl_En_Ma_Yts/overlay.cfg b/src/overlays/actors/ovl_En_Ma_Yts/overlay.cfg
deleted file mode 100644
index c185a0e53..000000000
--- a/src/overlays/actors/ovl_En_Ma_Yts/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ma_Yts
-z_en_ma_yts.c
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 5fcf1c7f0..edf0e41f2 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
@@ -29,7 +29,7 @@ void EnMaYts_SetFaceExpression(EnMaYts* this, s16 overrideEyeTexIndex, s16 mouth
void EnMaYts_DrawSleeping(Actor* thisx, PlayState* play);
-const ActorInit En_Ma_Yts_InitVars = {
+ActorInit En_Ma_Yts_InitVars = {
ACTOR_EN_MA_YTS,
ACTORCAT_NPC,
FLAGS,
@@ -121,17 +121,17 @@ void EnMaYts_ChangeAnim(EnMaYts* this, s32 animIndex) {
void func_80B8D12C(EnMaYts* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- s16 flag = this->unk_32C == 2 ? true : false;
+ s16 trackingMode = (this->unk_32C == 2) ? NPC_TRACKING_NONE : NPC_TRACKING_PLAYER_AUTO_TURN;
if (this->unk_32C == 0 || this->actor.parent == NULL) {
- this->unk_1D8.unk_18 = player->actor.world.pos;
- this->unk_1D8.unk_18.y -= -10.0f;
+ this->interactInfo.trackPos = player->actor.world.pos;
+ this->interactInfo.trackPos.y -= -10.0f;
} else {
- Math_Vec3f_StepTo(&this->unk_1D8.unk_18, &this->actor.parent->world.pos, 8.0f);
- this->unk_1D8.unk_18.y -= -10.0f;
+ Math_Vec3f_StepTo(&this->interactInfo.trackPos, &this->actor.parent->world.pos, 8.0f);
+ this->interactInfo.trackPos.y -= -10.0f;
}
- func_800BD888(&this->actor, &this->unk_1D8, 0, flag);
+ Npc_TrackPoint(&this->actor, &this->interactInfo, 0, trackingMode);
}
void EnMaYts_InitAnimation(EnMaYts* this, PlayState* play) {
@@ -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 || (gSaveContext.save.weekEventReg[22] & 1)) {
+ if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
EnMaYts_ChangeAnim(this, 14);
} else {
EnMaYts_ChangeAnim(this, 18);
@@ -177,14 +177,14 @@ s32 EnMaYts_CheckValidSpawn(EnMaYts* this, PlayState* play) {
case 2:
// Failing the alien invasion
- if (!(gSaveContext.save.weekEventReg[22] & 1)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
return false;
}
break;
case 3:
// "Winning" the alien invasion
- if (gSaveContext.save.weekEventReg[22] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
return false;
}
break;
@@ -193,7 +193,7 @@ s32 EnMaYts_CheckValidSpawn(EnMaYts* this, PlayState* play) {
case MA_YTS_TYPE_BARN:
// Failing the alien invasion
- if (!(gSaveContext.save.weekEventReg[22] & 1)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
return false;
} else if (gSaveContext.save.time >= CLOCK_TIME(20, 0) && CURRENT_DAY == 3) {
return false;
@@ -202,7 +202,7 @@ s32 EnMaYts_CheckValidSpawn(EnMaYts* this, PlayState* play) {
case MA_YTS_TYPE_SLEEPING:
// "Winning" the alien invasion
- if (gSaveContext.save.weekEventReg[22] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
return false;
}
break;
@@ -220,7 +220,7 @@ void EnMaYts_Init(Actor* thisx, PlayState* play) {
this->type = EN_MA_YTS_GET_TYPE(thisx);
if (!EnMaYts_CheckValidSpawn(this, play)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 18.0f);
@@ -235,10 +235,10 @@ void EnMaYts_Init(Actor* thisx, PlayState* play) {
this->collider.dim.radius = 40;
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 0x4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
Actor_SetScale(&this->actor, 0.01f);
- this->unk_1D8.unk_00 = 0;
+ this->interactInfo.talkState = NPC_TALK_STATE_IDLE;
this->unk_200 = 0;
this->blinkTimer = 0;
@@ -248,7 +248,7 @@ void EnMaYts_Init(Actor* thisx, PlayState* play) {
this->hasBow = false;
}
- if (CURRENT_DAY == 1 || (gSaveContext.save.weekEventReg[22] & 1)) {
+ if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
this->overrideEyeTexIndex = 0;
this->eyeTexIndex = 0;
this->mouthTexIndex = 0;
@@ -266,7 +266,7 @@ 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 && (gSaveContext.save.weekEventReg[22] & 1)) {
+ } else if (CURRENT_DAY == 2 && gSaveContext.save.isNight == 1 && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
EnMaYts_SetupStartDialogue(this);
} else {
EnMaYts_SetupDoNothing(this);
@@ -296,9 +296,9 @@ void EnMaYts_StartDialogue(EnMaYts* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
if (!(gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) {
- if (!(gSaveContext.save.weekEventReg[65] & 0x80)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_65_80)) {
// Saying to non-human Link: "Cremia went to town."
- gSaveContext.save.weekEventReg[65] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_65_80);
EnMaYts_SetFaceExpression(this, 0, 0);
Message_StartTextbox(play, 0x335F, &this->actor);
this->textId = 0x335F;
@@ -310,8 +310,8 @@ void EnMaYts_StartDialogue(EnMaYts* this, PlayState* play) {
func_80151BB4(play, 5);
}
} else if (Player_GetMask(play) != PLAYER_MASK_NONE) {
- if (!(gSaveContext.save.weekEventReg[65] & 0x40)) {
- gSaveContext.save.weekEventReg[65] |= 0x40;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_65_40)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_65_40);
EnMaYts_SetFaceExpression(this, 0, 0);
Message_StartTextbox(play, 0x3363, &this->actor);
this->textId = 0x3363;
@@ -321,14 +321,14 @@ void EnMaYts_StartDialogue(EnMaYts* this, PlayState* play) {
this->textId = 0x3366;
func_80151BB4(play, 5);
}
- } else if (!(gSaveContext.save.weekEventReg[21] & 0x20)) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_21_20)) {
EnMaYts_SetFaceExpression(this, 0, 0);
Message_StartTextbox(play, 0x3367, &this->actor);
this->textId = 0x3367;
} else {
- if (!(gSaveContext.save.weekEventReg[65] & 0x20)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_65_20)) {
// Saying to Grasshopper: "Cremia went to town."
- gSaveContext.save.weekEventReg[65] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_65_20);
EnMaYts_SetFaceExpression(this, 4, 2);
Message_StartTextbox(play, 0x3369, &this->actor);
this->textId = 0x3369;
@@ -377,16 +377,16 @@ void EnMaYts_SetupEndCreditsHandler(EnMaYts* this) {
this->actionFunc = EnMaYts_EndCreditsHandler;
}
-static u16 D_80B8E32C = 99;
+static u16 sCueId = 99;
void EnMaYts_EndCreditsHandler(EnMaYts* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 120)) {
- s32 actionIndex = Cutscene_GetActorActionIndex(play, 120);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_120)) {
+ s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_120);
- if (play->csCtx.frames == play->csCtx.actorActions[actionIndex]->startFrame) {
- if (play->csCtx.actorActions[actionIndex]->action != D_80B8E32C) {
- D_80B8E32C = play->csCtx.actorActions[actionIndex]->action;
+ if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) {
+ if (sCueId != play->csCtx.actorCues[cueChannel]->id) {
+ sCueId = play->csCtx.actorCues[cueChannel]->id;
this->endCreditsFlag = 0;
- switch (play->csCtx.actorActions[actionIndex]->action) {
+ switch (play->csCtx.actorCues[cueChannel]->id) {
case 1:
this->hasBow = true;
EnMaYts_ChangeAnim(this, 0);
@@ -410,14 +410,14 @@ void EnMaYts_EndCreditsHandler(EnMaYts* this, PlayState* play) {
}
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex);
- if ((D_80B8E32C == 2) && (this->endCreditsFlag == 0) &&
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
+ if ((sCueId == 2) && (this->endCreditsFlag == 0) &&
Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
this->endCreditsFlag++;
EnMaYts_ChangeAnim(this, 5);
}
} else {
- D_80B8E32C = 99;
+ sCueId = 99;
this->hasBow = true;
}
}
@@ -501,18 +501,18 @@ void EnMaYts_Update(Actor* thisx, PlayState* play) {
s32 EnMaYts_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
EnMaYts* this = THIS;
- Vec3s sp4;
+ Vec3s limbRot;
if (limbIndex == ROMANI_LIMB_HEAD) {
- sp4 = this->unk_1D8.unk_08;
- rot->x += sp4.y;
+ limbRot = this->interactInfo.headRot;
+ rot->x += limbRot.y;
if ((this->skelAnime.animation == &gRomaniIdleAnim) || (this->skelAnime.animation == &gRomaniSittingAnim)) {
- rot->z += sp4.x;
+ rot->z += limbRot.x;
}
} else if (limbIndex == ROMANI_LIMB_TORSO) {
- sp4 = this->unk_1D8.unk_0E;
- rot->x += sp4.y;
- rot->z += sp4.x;
+ limbRot = this->interactInfo.torsoRot;
+ rot->x += limbRot.y;
+ rot->z += limbRot.x;
}
return false;
diff --git a/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.h b/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.h
index e34ef3d0e..65e7a0eb6 100644
--- a/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.h
+++ b/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.h
@@ -13,7 +13,7 @@ typedef struct EnMaYts {
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ EnMaYtsActionFunc actionFunc;
/* 0x18C */ ColliderCylinder collider;
- /* 0x1D8 */ struct_800BD888_arg1 unk_1D8;
+ /* 0x1D8 */ NpcInteractInfo interactInfo;
/* 0x200 */ s32 unk_200; // Set, but not used
/* 0x204 */ Vec3s jointTable[ROMANI_LIMB_MAX];
/* 0x28E */ UNK_TYPE1 unk_28E[0x6];
@@ -31,8 +31,6 @@ typedef struct EnMaYts {
/* 0x338 */ u16 textId;
} EnMaYts; // size = 0x33C
-extern const ActorInit En_Ma_Yts_InitVars;
-
typedef enum {
/* 0 */ MA_YTS_TYPE_BARN,
/* 1 */ MA_YTS_TYPE_SITTING,
diff --git a/src/overlays/actors/ovl_En_Mag/overlay.cfg b/src/overlays/actors/ovl_En_Mag/overlay.cfg
deleted file mode 100644
index 14fce0372..000000000
--- a/src/overlays/actors/ovl_En_Mag/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Mag
-z_en_mag.c
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 b7199cb1d..15aa42bda 100644
--- a/src/overlays/actors/ovl_En_Mag/z_en_mag.c
+++ b/src/overlays/actors/ovl_En_Mag/z_en_mag.c
@@ -85,7 +85,7 @@ static s16 sZeldaEffectColorTargetIndex = 0;
static s16 sTextAlphaTargetIndex = 0;
static s16 sTextAlphaTimer = 20;
-const ActorInit En_Mag_InitVars = {
+ActorInit En_Mag_InitVars = {
ACTOR_EN_MAG,
ACTORCAT_PROP,
FLAGS,
@@ -239,7 +239,7 @@ void EnMag_Update(Actor* thisx, PlayState* play) {
CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) ||
CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_B)) {
- if (!EnvFlags_Get(play, 4)) {
+ if (!CutsceneFlags_Get(play, 4)) {
play_sound(NA_SE_SY_PIECE_OF_HEART);
this->state = MAG_STATE_CALLED;
this->unk11F00 = 0;
@@ -383,16 +383,16 @@ void EnMag_Update(Actor* thisx, PlayState* play) {
CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_B)) {
if (play->transitionTrigger != TRANS_TRIGGER_START) {
Audio_SetCutsceneFlag(false);
- D_801BB12C++;
- if (D_801BB12C >= 2) {
- D_801BB12C = 0;
+ gOpeningEntranceIndex++;
+ if (gOpeningEntranceIndex >= 2) {
+ gOpeningEntranceIndex = 0;
}
play_sound(NA_SE_SY_PIECE_OF_HEART);
- gSaveContext.gameMode = 2; // Go to FileChoose
+ gSaveContext.gameMode = GAMEMODE_FILE_SELECT;
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_02;
+ play->transitionType = TRANS_TYPE_FADE_BLACK;
play->nextEntrance = ENTRANCE(CUTSCENE, 0);
- gSaveContext.save.cutscene = 0;
+ gSaveContext.save.cutsceneIndex = 0;
gSaveContext.sceneLayer = 0;
}
this->unk11F54 = 15;
@@ -438,12 +438,12 @@ void EnMag_Update(Actor* thisx, PlayState* play) {
}
if (this->state == MAG_STATE_INITIAL) {
- if (EnvFlags_Get(play, 3)) {
+ if (CutsceneFlags_Get(play, 3)) {
this->unk11F02 = 40;
this->state = MAG_STATE_FADE_IN_MASK_EFFECTS;
}
} else if (this->state < MAG_STATE_FADE_OUT) {
- if (EnvFlags_Get(play, 4)) {
+ if (CutsceneFlags_Get(play, 4)) {
this->state = MAG_STATE_FADE_OUT;
}
}
diff --git a/src/overlays/actors/ovl_En_Mag/z_en_mag.h b/src/overlays/actors/ovl_En_Mag/z_en_mag.h
index d55d63ccb..9515abc71 100644
--- a/src/overlays/actors/ovl_En_Mag/z_en_mag.h
+++ b/src/overlays/actors/ovl_En_Mag/z_en_mag.h
@@ -47,6 +47,4 @@ typedef struct EnMag {
/* 0x11F74 */ UNK_TYPE1 unk11F74[4];
} EnMag; // size = 0x11F78
-extern const ActorInit En_Mag_InitVars;
-
#endif // Z_EN_MAG_H
diff --git a/src/overlays/actors/ovl_En_Maruta/overlay.cfg b/src/overlays/actors/ovl_En_Maruta/overlay.cfg
deleted file mode 100644
index 6816a8c92..000000000
--- a/src/overlays/actors/ovl_En_Maruta/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Maruta
-z_en_maruta.c
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 4c7a1ddf8..95890455c 100644
--- a/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c
+++ b/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c
@@ -36,7 +36,7 @@ void func_80B38060(EnMaruta* this, Vec3f* arg1);
void func_80B3828C(Vec3f* arg0, Vec3f* arg1, s16 arg2, s16 arg3, s32 arg4);
void func_80B382E4(PlayState* play, Vec3f arg1);
-const ActorInit En_Maruta_InitVars = {
+ActorInit En_Maruta_InitVars = {
ACTOR_EN_MARUTA,
ACTORCAT_PROP,
FLAGS,
@@ -317,7 +317,7 @@ void func_80B37428(EnMaruta* this, PlayState* play) {
kendoJs->unk_28C--;
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -332,7 +332,7 @@ void func_80B374B8(EnMaruta* this) {
void func_80B374FC(EnMaruta* this, PlayState* play) {
if (this->unk_21E == 40) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -476,7 +476,7 @@ void func_80B37A8C(EnMaruta* this) {
void func_80B37AA0(EnMaruta* this, PlayState* play) {
if (this->actor.scale.y == 0.0f) {
if (this->actor.scale.x == 0.0f) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
Math_SmoothStepToF(&this->actor.scale.x, 0.0f, 0.2f, 0.01f, 0.001f);
@@ -525,7 +525,7 @@ void func_80B37CA0(EnMaruta* this, PlayState* play) {
((this->actionFunc == func_80B37428) && !(this->actor.world.pos.y < (this->actor.floorHeight - 20.0f)))) {
if ((this->collider.base.acFlags & AC_HIT) && (this->actionFunc == func_80B372CC)) {
this->collider.base.acFlags &= ~AC_HIT;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_SWORD_STRIKE);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_SWORD_STRIKE);
if (D_80B386CC[player->meleeWeaponAnimation] != 0) {
s32 temp = D_80B386CC[player->meleeWeaponAnimation] + 1;
@@ -587,7 +587,7 @@ void func_80B37EC0(EnMaruta* this, PlayState* play) {
if (this->actor.velocity.y < -this->actor.gravity) {
func_80B382E4(play, sp34);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_LOG_BOUND);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_LOG_BOUND);
this->actor.velocity.y *= -0.6f;
func_80B38060(this, &sp34);
}
diff --git a/src/overlays/actors/ovl_En_Maruta/z_en_maruta.h b/src/overlays/actors/ovl_En_Maruta/z_en_maruta.h
index 1af506c58..0216ba383 100644
--- a/src/overlays/actors/ovl_En_Maruta/z_en_maruta.h
+++ b/src/overlays/actors/ovl_En_Maruta/z_en_maruta.h
@@ -27,6 +27,4 @@ typedef struct EnMaruta {
/* 0x220 */ s16 unk_220;
} EnMaruta; // size = 0x224
-extern const ActorInit En_Maruta_InitVars;
-
#endif // Z_EN_MARUTA_H
diff --git a/src/overlays/actors/ovl_En_Minideath/overlay.cfg b/src/overlays/actors/ovl_En_Minideath/overlay.cfg
deleted file mode 100644
index deffea103..000000000
--- a/src/overlays/actors/ovl_En_Minideath/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Minideath
-z_en_minideath.c
diff --git a/src/overlays/actors/ovl_En_Minideath/z_en_minideath.c b/src/overlays/actors/ovl_En_Minideath/z_en_minideath.c
index fd0001166..d47992114 100644
--- a/src/overlays/actors/ovl_En_Minideath/z_en_minideath.c
+++ b/src/overlays/actors/ovl_En_Minideath/z_en_minideath.c
@@ -29,7 +29,7 @@ void func_808CB6D4(EnMinideath* this, PlayState* play);
void func_808CB7CC(EnMinideath* this, PlayState* play);
#if 0
-const ActorInit En_Minideath_InitVars = {
+ActorInit En_Minideath_InitVars = {
ACTOR_EN_MINIDEATH,
ACTORCAT_ENEMY,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Minideath/z_en_minideath.h b/src/overlays/actors/ovl_En_Minideath/z_en_minideath.h
index 427bafa1e..0a08318ab 100644
--- a/src/overlays/actors/ovl_En_Minideath/z_en_minideath.h
+++ b/src/overlays/actors/ovl_En_Minideath/z_en_minideath.h
@@ -13,6 +13,4 @@ typedef struct EnMinideath {
/* 0x148 */ char unk_148[0x164];
} EnMinideath; // size = 0x2AC
-extern const ActorInit En_Minideath_InitVars;
-
#endif // Z_EN_MINIDEATH_H
diff --git a/src/overlays/actors/ovl_En_Minifrog/overlay.cfg b/src/overlays/actors/ovl_En_Minifrog/overlay.cfg
deleted file mode 100644
index db7e2a842..000000000
--- a/src/overlays/actors/ovl_En_Minifrog/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Minifrog
-z_en_minifrog.c
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 399a8f659..7ac16e1b0 100644
--- a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c
+++ b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c
@@ -26,7 +26,7 @@ void EnMinifrog_UpdateMissingFrog(Actor* thisx, PlayState* play);
void EnMinifrog_YellowFrogDialog(EnMinifrog* this, PlayState* play);
void EnMinifrog_SetupYellowFrogDialog(EnMinifrog* this, PlayState* play);
-const ActorInit En_Minifrog_InitVars = {
+ActorInit En_Minifrog_InitVars = {
ACTOR_EN_MINIFROG,
ACTORCAT_NPC,
FLAGS,
@@ -66,14 +66,8 @@ static TexturePtr D_808A4D74[] = {
object_fr_Tex_005BA0,
};
-// gSaveContext.save.weekEventReg[KEY] = VALUE
-// KEY | VALUE
static u16 isFrogReturnedFlags[] = {
- (0 << 8) | 0x00, // NULL
- (32 << 8) | 0x40, // Woodfall Temple Frog Returned
- (32 << 8) | 0x80, // Great Bay Temple Frog Returned
- (33 << 8) | 0x01, // Southern Swamp Frog Returned
- (33 << 8) | 0x02, // Laundry Pool Frog Returned
+ 0, WEEKEVENTREG_32_40, WEEKEVENTREG_32_80, WEEKEVENTREG_33_01, WEEKEVENTREG_33_02,
};
static s32 isInitialized = false;
@@ -94,7 +88,7 @@ void EnMinifrog_Init(Actor* thisx, PlayState* play) {
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
if (!isInitialized) {
- for (i = 0; i < 2; i++) {
+ for (i = 0; i < ARRAY_COUNT(D_808A4D74); i++) {
D_808A4D74[i] = Lib_SegmentedToVirtual(D_808A4D74[i]);
}
isInitialized = true;
@@ -105,31 +99,30 @@ void EnMinifrog_Init(Actor* thisx, PlayState* play) {
this->frogIndex = MINIFROG_YELLOW;
}
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = EnMinifrog_Idle;
this->jumpState = MINIFROG_STATE_GROUND;
this->flags = 0;
this->timer = 0;
if (1) {}
+
if (!EN_MINIFROG_IS_RETURNED(&this->actor)) {
- if ((this->frogIndex == MINIFROG_YELLOW) ||
- ((gSaveContext.save.weekEventReg[isFrogReturnedFlags[this->frogIndex] >> 8] &
- (u8)isFrogReturnedFlags[this->frogIndex]))) {
- Actor_MarkForDeath(&this->actor);
- } else {
- this->timer = 30;
- this->actionFunc = EnMinifrog_SpawnGrowAndShrink;
- this->actor.textId = 0xD81; // "Ah! Don Gero! It has been so long."
- this->actor.colChkInfo.mass = 30;
+ if ((this->frogIndex == MINIFROG_YELLOW) || CHECK_WEEKEVENTREG(isFrogReturnedFlags[this->frogIndex])) {
+ Actor_Kill(&this->actor);
+ return;
}
+
+ this->timer = 30;
+ this->actionFunc = EnMinifrog_SpawnGrowAndShrink;
+ this->actor.textId = 0xD81;
+ this->actor.colChkInfo.mass = 30;
} else { // Frogs in mountain village
if (this->frogIndex == MINIFROG_YELLOW) {
this->actor.textId = 0;
this->actionFunc = EnMinifrog_SetupYellowFrogDialog;
- // Not spoken to MINIFROG_YELLOW
- if (!(gSaveContext.save.weekEventReg[34] & 1)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_34_01)) {
this->actor.flags |= ACTOR_FLAG_10000;
}
@@ -140,8 +133,7 @@ void EnMinifrog_Init(Actor* thisx, PlayState* play) {
this->actor.flags &= ~ACTOR_FLAG_1;
// Frog has been returned
- if ((gSaveContext.save.weekEventReg[isFrogReturnedFlags[this->frogIndex] >> 8] &
- (u8)isFrogReturnedFlags[this->frogIndex])) {
+ if (CHECK_WEEKEVENTREG(isFrogReturnedFlags[this->frogIndex])) {
this->actionFunc = EnMinifrog_SetupNextFrogInit;
} else {
this->actor.draw = NULL;
@@ -195,14 +187,14 @@ void EnMinifrog_Jump(EnMinifrog* this) {
switch (this->jumpState) {
case MINIFROG_STATE_JUMP:
if (Animation_OnFrame(&this->skelAnime, 4.0f)) {
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
this->actor.velocity.y = 6.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FROG_JUMP);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_JUMP);
this->jumpState = MINIFROG_STATE_AIR;
}
break;
case MINIFROG_STATE_AIR:
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->jumpState = MINIFROG_STATE_GROUND;
Animation_MorphToLoop(&this->skelAnime, &object_fr_Anim_001534, -2.5f);
SkelAnime_Update(&this->skelAnime);
@@ -262,51 +254,49 @@ void EnMinifrog_ReturnFrogCutscene(EnMinifrog* this, PlayState* play) {
EnMinifrog_SetJumpState(this);
switch (play->msgCtx.currentTextId) {
- case 0xD81: // "Ah! Don Gero! It has been so long."
- case 0xD83: // "Could it be... Has spring finally come to the mountains?"
- case 0xD84: // "That look...It is true! Winter was so long that I began to lose all hope."
- case 0xD86: // "Could it be... You came all this way looking for me?"
- case 0xD87: // "Ah! You need not say a thing. Upon seeing that face, I understand!" ...
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ case 0xD81:
+ case 0xD83:
+ case 0xD84:
+ case 0xD86:
+ case 0xD87:
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
- case 0xD82: // "What has brought you all this way?"
- if (gSaveContext.save.weekEventReg[33] & 0x80) { // Mountain village is unfrozen
- func_80151938(play, 0xD83); // "Could it be... Has spring finally come to the mountains?"
+ case 0xD82:
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) {
+ Message_ContinueTextbox(play, 0xD83);
} else {
- func_80151938(play, 0xD86); // "Could it be... You came all this way looking for me?"
+ Message_ContinueTextbox(play, 0xD86);
}
- gSaveContext.save.weekEventReg[isFrogReturnedFlags[this->frogIndex] >> 8] =
- ((void)0, gSaveContext.save.weekEventReg[isFrogReturnedFlags[this->frogIndex] >> 8]) |
- (u8)isFrogReturnedFlags[this->frogIndex];
+ SET_WEEKEVENTREG(isFrogReturnedFlags[this->frogIndex]);
break;
- case 0xD85: // "I understand. I shall head for the mountains immediately."
+ case 0xD85:
default:
- func_801477B4(play);
+ Message_CloseTextbox(play);
EnMinifrog_SpawnDust(this, play);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 30, NA_SE_EN_NPC_FADEAWAY);
- if (this->actor.cutscene != -1) {
- if (ActorCutscene_GetCurrentIndex() == this->actor.cutscene) {
- ActorCutscene_Stop(this->actor.cutscene);
+ if (this->actor.csId != CS_ID_NONE) {
+ if (CutsceneManager_GetCurrentCsId() == this->actor.csId) {
+ CutsceneManager_Stop(this->actor.csId);
}
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
}
if (this->flags & 1) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
- } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_Start(this->actor.cutscene, &this->actor);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->actor.csId);
+ } else if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_Start(this->actor.csId, &this->actor);
this->flags &= ~1;
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
}
@@ -329,7 +319,7 @@ void EnMinifrog_Idle(EnMinifrog* this, PlayState* play) {
EnMinifrog_JumpTimer(this);
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->actionFunc = EnMinifrog_ReturnFrogCutscene;
- if (this->actor.cutscene != -1) {
+ if (this->actor.csId != CS_ID_NONE) {
this->flags |= 1;
}
} else if ((this->actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->actor, 0x3000, play) &&
@@ -348,7 +338,7 @@ void EnMinifrog_SetupNextFrogInit(EnMinifrog* this, PlayState* play) {
missingFrog = nextFrog->frog;
if (nextFrog->frog != NULL) {
this->actor.home.rot.y =
- (s16)Actor_YawBetweenActors(&this->actor, &missingFrog->actor); // Set home to missing frog
+ (s16)Actor_WorldYawTowardActor(&this->actor, &missingFrog->actor); // Set home to missing frog
EnMinifrog_TurnToMissingFrog(this);
} else {
EnMinifrog_TurnToPlayer(this);
@@ -364,10 +354,9 @@ void EnMinifrog_SetupNextFrogInit(EnMinifrog* this, PlayState* play) {
void EnMinifrog_CheckChoirSuccess(EnMinifrog* this, PlayState* play) {
this->actionFunc = EnMinifrog_YellowFrogDialog;
if (this->frog != NULL) {
- func_80151938(play, 0xD78); // "Unfortunately, it seems not all of our members have gathered."
+ Message_ContinueTextbox(play, 0xD78);
} else {
- func_80151938(play,
- 0xD7C); // "The conducting was spectacular. And all of our members rose to the occasion!"
+ Message_ContinueTextbox(play, 0xD7C);
}
EnMinifrog_SetJumpState(this);
@@ -377,19 +366,19 @@ void EnMinifrog_CheckChoirSuccess(EnMinifrog* this, PlayState* play) {
void EnMinifrog_ContinueChoirCutscene(EnMinifrog* this, PlayState* play) {
EnMinifrog_Jump(this);
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
EnMinifrog_CheckChoirSuccess(this, play);
return; // necessary to match
- } else if (ActorCutscene_GetCanPlayNext(0x7C)) {
- ActorCutscene_Start(0x7C, NULL);
+ } else if (CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) {
+ CutsceneManager_Start(CS_ID_GLOBAL_TALK, NULL);
EnMinifrog_CheckChoirSuccess(this, play);
return; // necessary to match
- } else if (this->actor.cutscene != -1 && ActorCutscene_GetCurrentIndex() == this->actor.cutscene) {
- ActorCutscene_Stop(this->actor.cutscene);
- ActorCutscene_SetIntentToPlay(0x7C);
+ } else if ((this->actor.csId != CS_ID_NONE) && (CutsceneManager_GetCurrentCsId() == this->actor.csId)) {
+ CutsceneManager_Stop(this->actor.csId);
+ CutsceneManager_Queue(CS_ID_GLOBAL_TALK);
return; // necessary to match
} else {
- ActorCutscene_SetIntentToPlay(0x7C);
+ CutsceneManager_Queue(CS_ID_GLOBAL_TALK);
}
}
@@ -411,7 +400,7 @@ void EnMinifrog_NextFrogReturned(EnMinifrog* this, PlayState* play) {
this->actionFunc = EnMinifrog_ContinueChoirCutscene;
this->flags &= ~(0x2 << MINIFROG_YELLOW | 0x2 << MINIFROG_CYAN | 0x2 << MINIFROG_PINK | 0x2 << MINIFROG_BLUE |
0x2 << MINIFROG_WHITE);
- play->setPlayerTalkAnim(play, &gPlayerAnim_link_normal_talk_free_wait, 0);
+ play->setPlayerTalkAnim(play, &gPlayerAnim_link_normal_talk_free_wait, ANIMMODE_LOOP);
}
}
@@ -437,12 +426,12 @@ void EnMinifrog_SetupNextFrogChoir(EnMinifrog* this, PlayState* play) {
this->actor.home.rot.z = 0;
this->actionFunc = EnMinifrog_NextFrogMissing;
this->timer = 60;
- this->actor.home.rot.y = Actor_YawBetweenActors(&this->actor, &this->frog->actor);
+ this->actor.home.rot.y = Actor_WorldYawTowardActor(&this->actor, &this->frog->actor);
func_801A1F88();
this->flags &= ~0x100;
this->flags &= ~(0x2 << MINIFROG_YELLOW | 0x2 << MINIFROG_CYAN | 0x2 << MINIFROG_PINK | 0x2 << MINIFROG_BLUE |
0x2 << MINIFROG_WHITE);
- play->setPlayerTalkAnim(play, &gPlayerAnim_link_normal_talk_free_wait, 0);
+ play->setPlayerTalkAnim(play, &gPlayerAnim_link_normal_talk_free_wait, ANIMMODE_LOOP);
} else if (this->timer <= 0) {
this->actionFunc = EnMinifrog_NextFrogReturned;
this->timer = 30;
@@ -451,20 +440,20 @@ void EnMinifrog_SetupNextFrogChoir(EnMinifrog* this, PlayState* play) {
void EnMinifrog_BeginChoirCutscene(EnMinifrog* this, PlayState* play) {
EnMinifrog_Jump(this);
- if (this->actor.cutscene == -1) {
+ if (this->actor.csId == CS_ID_NONE) {
this->actionFunc = EnMinifrog_SetupNextFrogChoir;
- } else if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
- } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_Start(this->actor.cutscene, &this->actor);
+ } else if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->actor.csId);
+ } else if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_Start(this->actor.csId, &this->actor);
this->actionFunc = EnMinifrog_SetupNextFrogChoir;
this->timer = 5;
func_801A1F00(3, NA_BGM_FROG_SONG);
this->flags |= 0x100;
- play->setPlayerTalkAnim(play, &gPlayerAnim_pn_gakkiplay, 0);
+ play->setPlayerTalkAnim(play, &gPlayerAnim_pn_gakkiplay, ANIMMODE_LOOP);
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
@@ -472,10 +461,10 @@ void EnMinifrog_EndChoir(EnMinifrog* this, PlayState* play) {
EnMinifrog_TurnToPlayer(this);
EnMinifrog_Jump(this);
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- Message_StartTextbox(play, 0xD7E, &this->actor); // "Let us do it again sometime."
+ Message_StartTextbox(play, 0xD7E, &this->actor);
this->actionFunc = EnMinifrog_YellowFrogDialog;
} else {
- func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1);
}
}
@@ -486,9 +475,9 @@ void EnMinifrog_GetFrogHP(EnMinifrog* this, PlayState* play) {
this->actor.parent = NULL;
this->actionFunc = EnMinifrog_EndChoir;
this->actor.flags |= ACTOR_FLAG_10000;
- func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_NONE);
+ func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_NONE);
} else {
- Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 10000.0f, 50.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_HEART_PIECE, 10000.0f, 50.0f);
}
}
@@ -506,7 +495,7 @@ void EnMinifrog_YellowFrogDialog(EnMinifrog* this, PlayState* play) {
break;
case 1: // No
func_8019F230();
- func_80151938(play, 0xD7E); // "Let us do it again sometime."
+ Message_ContinueTextbox(play, 0xD7E);
break;
}
}
@@ -516,40 +505,38 @@ void EnMinifrog_YellowFrogDialog(EnMinifrog* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
EnMinifrog_SetJumpState(this);
switch (play->msgCtx.currentTextId) {
- case 0xD76: // "I have been waiting for you, Don Gero. Forgive me if I'm mistaken, but it looks like
- // you've lost a little weight..."
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ case 0xD76:
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
this->actor.flags &= ~ACTOR_FLAG_10000;
- gSaveContext.save.weekEventReg[34] |= 1; // Spoken to MINIFROG_YELLOW
+ SET_WEEKEVENTREG(WEEKEVENTREG_34_01);
break;
- case 0xD78: // "Unfortunately, it seems not all of our members have gathered."
- case 0xD79: // "Perhaps it is because winter was too long? They must not have realized that spring
- // has come to the mountains..."
- case 0xD7A: // "And when the great Don Gero has come for us, too...What a pity."
- case 0xD7F: // "Well, if it isn't the great Don Gero."
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ case 0xD78:
+ case 0xD79:
+ case 0xD7A:
+ case 0xD7F:
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
- case 0xD77: // "Let us begin our chorus"
+ case 0xD77:
this->actionFunc = EnMinifrog_BeginChoirCutscene;
play->msgCtx.msgLength = 0;
break;
- case 0xD7C: // "The conducting was spectacular. And all of our members rose to the occasion!"
- if (gSaveContext.save.weekEventReg[35] & 0x80) { // Obtained Heart Piece
- func_80151938(play, 0xD7E);
+ case 0xD7C:
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_35_80)) { // Obtained Heart Piece
+ Message_ContinueTextbox(play, 0xD7E);
} else {
- func_80151938(play, 0xD7D); // Get Heart Piece
- gSaveContext.save.weekEventReg[35] |= 0x80;
+ Message_ContinueTextbox(play, 0xD7D); // Get Heart Piece
+ SET_WEEKEVENTREG(WEEKEVENTREG_35_80);
}
break;
- case 0xD7D: // "This is how deeply we were moved by your spectacular conducting..."
- func_801477B4(play);
+ case 0xD7D:
+ Message_CloseTextbox(play);
this->actionFunc = EnMinifrog_GetFrogHP;
EnMinifrog_GetFrogHP(this, play);
break;
- case 0xD7B: // "Where in the world could the other members be, and what could they be doing?"
- case 0xD7E: // "Let us do it again sometime."
+ case 0xD7B:
+ case 0xD7E:
default:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = EnMinifrog_SetupYellowFrogDialog;
this->actor.flags &= ~ACTOR_FLAG_10000;
break;
@@ -567,12 +554,10 @@ void EnMinifrog_SetupYellowFrogDialog(EnMinifrog* this, PlayState* play) {
EnMinifrog_JumpTimer(this);
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->actionFunc = EnMinifrog_YellowFrogDialog;
- if (!(gSaveContext.save.weekEventReg[34] & 1)) { // Not spoken with MINIFROG_YELLOW
- Message_StartTextbox(play, 0xD76,
- &this->actor); // "I have been waiting for you, Don Gero. Forgive me if I'm mistaken,
- // but it looks like you've lost a little weight..."
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_34_01)) {
+ Message_StartTextbox(play, 0xD76, &this->actor);
} else {
- Message_StartTextbox(play, 0xD7F, &this->actor); // "Well, if it isn't the great Don Gero."
+ Message_StartTextbox(play, 0xD7F, &this->actor);
}
} else if ((this->actor.xzDistToPlayer < 150.0f) &&
(Player_IsFacingActor(&this->actor, 0x3000, play) ||
@@ -588,7 +573,9 @@ void EnMinifrog_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 25.0f, 12.0f, 0.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 25.0f, 12.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
this->actor.focus.rot.y = this->actor.shape.rot.y;
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 a71caa650..9a3801d91 100644
--- a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.h
+++ b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.h
@@ -38,6 +38,4 @@ typedef struct EnMinifrog {
/* 0x2B8 */ ColliderCylinder collider;
} EnMinifrog; // size = 0x304
-extern const ActorInit En_Minifrog_InitVars;
-
#endif // Z_EN_MINIFROG_H
diff --git a/src/overlays/actors/ovl_En_Minislime/overlay.cfg b/src/overlays/actors/ovl_En_Minislime/overlay.cfg
deleted file mode 100644
index 795b335cb..000000000
--- a/src/overlays/actors/ovl_En_Minislime/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Minislime
-z_en_minislime.c
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 cdf3ad957..4aa052549 100644
--- a/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c
+++ b/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c
@@ -41,7 +41,7 @@ void EnMinislime_MoveToGekko(EnMinislime* this, PlayState* play);
void EnMinislime_SetupGekkoThrow(EnMinislime* this);
void EnMinislime_GekkoThrow(EnMinislime* this, PlayState* play);
-const ActorInit En_Minislime_InitVars = {
+ActorInit En_Minislime_InitVars = {
ACTOR_EN_MINISLIME,
ACTORCAT_BOSS,
FLAGS,
@@ -140,36 +140,36 @@ void EnMinislime_CheckBackgroundCollision(EnMinislime* this) {
f32 scaleY = this->actor.scale.y * 400.0f;
f32 scaleZ = this->actor.scale.z * 400.0f;
- this->actor.bgCheckFlags &= ~(0x10 | 0x8 | 0x2);
+ this->actor.bgCheckFlags &= ~(BGCHECKFLAG_GROUND_TOUCH | BGCHECKFLAG_WALL | BGCHECKFLAG_CEILING);
if ((this->actor.world.pos.y + scaleY) > GBT_ROOM_5_MAX_Y) {
- this->actor.bgCheckFlags |= 0x10;
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags |= BGCHECKFLAG_CEILING;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
this->actor.world.pos.y = GBT_ROOM_5_MAX_Y - scaleY;
} else if ((this->actor.world.pos.y - scaleY) < GBT_ROOM_5_MIN_Y) {
this->actor.world.pos.y = GBT_ROOM_5_MIN_Y + scaleY;
- if (!(this->actor.bgCheckFlags & 1)) {
- this->actor.bgCheckFlags |= 2;
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ this->actor.bgCheckFlags |= BGCHECKFLAG_GROUND_TOUCH;
}
- this->actor.bgCheckFlags |= 1;
+ this->actor.bgCheckFlags |= BGCHECKFLAG_GROUND;
} else {
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
}
if ((this->actor.world.pos.x + scaleX) > GBT_ROOM_5_MAX_X) {
- this->actor.bgCheckFlags |= 8;
+ this->actor.bgCheckFlags |= BGCHECKFLAG_WALL;
this->actor.world.pos.x = GBT_ROOM_5_MAX_X - scaleX;
} else if ((this->actor.world.pos.x - scaleX) < GBT_ROOM_5_MIN_X) {
this->actor.world.pos.x = GBT_ROOM_5_MIN_X + scaleX;
- this->actor.bgCheckFlags |= 8;
+ this->actor.bgCheckFlags |= BGCHECKFLAG_WALL;
}
if ((this->actor.world.pos.z + scaleZ) > GBT_ROOM_5_MAX_Z) {
- this->actor.bgCheckFlags |= 8;
+ this->actor.bgCheckFlags |= BGCHECKFLAG_WALL;
this->actor.world.pos.z = GBT_ROOM_5_MAX_Z - scaleZ;
} else if ((this->actor.world.pos.z - scaleZ) < GBT_ROOM_5_MIN_Z) {
this->actor.world.pos.z = GBT_ROOM_5_MIN_Z + scaleZ;
- this->actor.bgCheckFlags |= 8;
+ this->actor.bgCheckFlags |= BGCHECKFLAG_WALL;
}
}
@@ -202,7 +202,7 @@ void EnMinislime_AddIceShardEffect(EnMinislime* this) {
}
this->frozenAlpha = 0;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ICE_BROKEN);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_ICE_BROKEN);
}
void EnMinislime_AddIceSmokeEffect(EnMinislime* this, PlayState* play) {
@@ -240,14 +240,14 @@ void EnMinislime_SetupFall(EnMinislime* this, PlayState* play) {
this->collider.base.atFlags |= AT_ON;
this->collider.base.acFlags |= AC_ON;
this->collider.base.ocFlags1 |= OC1_ON;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.gravity = -2.0f;
if (this->actionFunc != EnMinislime_GekkoThrow) {
this->actor.scale.x = 0.095f;
this->actor.scale.z = 0.095f;
this->actor.scale.y = 0.10700001f;
- if (Actor_XZDistanceBetweenActors(&this->actor, &player->actor) < 225.0f) {
- yaw = Actor_YawBetweenActors(&player->actor, &this->actor);
+ if (Actor_WorldDistXZToActor(&this->actor, &player->actor) < 225.0f) {
+ yaw = Actor_WorldYawTowardActor(&player->actor, &this->actor);
this->actor.world.pos.x = Math_SinS(yaw) * 225.0f + player->actor.world.pos.x;
this->actor.world.pos.z = Math_CosS(yaw) * 225.0f + player->actor.world.pos.z;
}
@@ -259,7 +259,7 @@ void EnMinislime_Fall(EnMinislime* this, PlayState* play) {
Math_StepToF(&this->actor.scale.x, 0.17999999f, 0.003f);
Math_StepToF(&this->actor.scale.y, 0.05f, 0.003f);
this->actor.scale.z = this->actor.scale.x;
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
EnMinislime_SetupGrowAndShrink(this);
}
}
@@ -267,11 +267,11 @@ void EnMinislime_Fall(EnMinislime* this, PlayState* play) {
void EnMinislime_SetupBreakFromBigslime(EnMinislime* this) {
f32 velY;
- this->actor.world.rot.y = Actor_YawBetweenActors(this->actor.parent, &this->actor);
+ this->actor.world.rot.y = Actor_WorldYawTowardActor(this->actor.parent, &this->actor);
this->actor.shape.rot.y = this->actor.world.rot.y;
- this->actor.speedXZ = Math_CosS(this->actor.world.rot.x) * 15.0f;
+ this->actor.speed = Math_CosS(this->actor.world.rot.x) * 15.0f;
velY = Math_SinS(this->actor.world.rot.x) * 15.0f;
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
this->actor.velocity.y = velY + 2.0f;
this->actor.gravity = -1.0f;
this->frozenScale = 0.1f;
@@ -289,7 +289,7 @@ void EnMinislime_BreakFromBigslime(EnMinislime* this, PlayState* play) {
this->actor.shape.rot.x += this->actor.world.rot.x;
if (this->actor.velocity.y < 0.0f) {
this->collider.base.ocFlags1 |= OC1_ON;
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
EnMinislime_AddIceShardEffect(this);
this->attackTimer = 40;
EnMinislime_SetupGrowAndShrink(this);
@@ -300,7 +300,7 @@ void EnMinislime_BreakFromBigslime(EnMinislime* this, PlayState* play) {
void EnMinislime_SetupIceArrowDamage(EnMinislime* this) {
this->collider.base.atFlags &= ~AT_ON;
this->frozenTimer = 80;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->frozenScale = 0.1f;
this->actionFunc = EnMinislime_IceArrowDamage;
}
@@ -341,7 +341,7 @@ void EnMinislime_IceArrowDamage(EnMinislime* this, PlayState* play) {
return;
}
- if (this->actor.bgCheckFlags & 2) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
EnMinislime_AddIceShardEffect(this);
EnMinislime_SetupGrowAndShrink(this);
}
@@ -354,7 +354,7 @@ void EnMinislime_SetupFireArrowDamage(EnMinislime* this) {
this->actor.shape.rot.z = 0;
this->actor.world.rot.x = 0;
this->collider.base.acFlags &= ~AC_ON;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = EnMinislime_FireArrowDamage;
}
@@ -385,13 +385,13 @@ void EnMinislime_SetupGrowAndShrink(EnMinislime* this) {
this->actor.shape.rot.y = 0;
this->actor.shape.rot.z = 0;
this->actor.world.rot.x = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
Math_Vec3f_Copy(&this->actor.home.pos, &this->actor.world.pos);
this->growShrinkTimer = 42;
this->actor.scale.x = 0.19f;
this->actor.scale.y = 0.044999998f;
this->actor.scale.z = 0.19f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_SLIME_JUMP2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_SLIME_JUMP2);
this->actionFunc = EnMinislime_GrowAndShrink;
}
@@ -425,8 +425,8 @@ void EnMinislime_Idle(EnMinislime* this, PlayState* play) {
this->idleTimer--;
speedXZ = sin_rad(this->idleTimer * (M_PI / 10));
- this->actor.speedXZ = speedXZ * 1.5f;
- this->actor.speedXZ = CLAMP_MIN(this->actor.speedXZ, 0.0f);
+ 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.z, 0.3f - this->actor.scale.x, 0.010000001f);
@@ -434,8 +434,8 @@ void EnMinislime_Idle(EnMinislime* this, PlayState* play) {
if (this->actor.xzDistToPlayer < 300.0f) {
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
} else {
- if (Actor_XZDistanceToPoint(&this->actor, &this->actor.home.pos) < 200.0f) {
- this->actor.world.rot.y = Actor_YawToPoint(&this->actor, &this->actor.home.pos);
+ if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) < 200.0f) {
+ this->actor.world.rot.y = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
} else {
this->actor.world.rot.y += (s16)((s32)Rand_Next() >> 0x13);
}
@@ -451,9 +451,9 @@ void EnMinislime_Idle(EnMinislime* this, PlayState* play) {
}
void EnMinislime_SetupBounce(EnMinislime* this) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->bounceTimer = (this->actionFunc == EnMinislime_GrowAndShrink) ? 1 : 4;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_SLIME_JUMP1);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_SLIME_JUMP1);
this->actionFunc = EnMinislime_Bounce;
}
@@ -466,7 +466,7 @@ void EnMinislime_Bounce(EnMinislime* this, PlayState* play) {
if (this->bounceTimer == 0) {
this->actor.gravity = -2.0f;
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
- this->actor.speedXZ = 1.0f;
+ this->actor.speed = 1.0f;
this->actor.velocity.y = 12.0f;
this->actor.shape.rot.y = this->actor.world.rot.y;
}
@@ -478,7 +478,7 @@ void EnMinislime_Bounce(EnMinislime* this, PlayState* play) {
} else {
Math_StepToF(&this->actor.scale.x, 0.17999999f, 0.003f);
Math_StepToF(&this->actor.scale.y, 0.05f, 0.003f);
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
EnMinislime_SetupGrowAndShrink(this);
return;
}
@@ -490,9 +490,9 @@ void EnMinislime_Bounce(EnMinislime* this, PlayState* play) {
void EnMinislime_SetupMoveToBigslime(EnMinislime* this) {
this->actor.gravity = 0.0f;
- this->actor.speedXZ = 15.0f;
- this->actor.shape.rot.x = Actor_PitchToPoint(&this->actor, &this->actor.parent->home.pos);
- this->actor.shape.rot.y = Actor_YawToPoint(&this->actor, &this->actor.parent->home.pos);
+ this->actor.speed = 15.0f;
+ this->actor.shape.rot.x = Actor_WorldPitchTowardPoint(&this->actor, &this->actor.parent->home.pos);
+ this->actor.shape.rot.y = Actor_WorldYawTowardPoint(&this->actor, &this->actor.parent->home.pos);
this->actor.world.rot.x = -this->actor.shape.rot.x;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->collider.base.atFlags &= ~AT_ON;
@@ -517,7 +517,7 @@ void EnMinislime_MoveToBigslime(EnMinislime* this, PlayState* play) {
EnMinislime_SetupDisappear(this);
} else if ((this->actor.scale.x > 0.0f) && (this->actor.world.pos.y > (GBT_ROOM_5_MAX_Y - 100.0f))) {
this->actor.params = MINISLIME_SETUP_DISAPPEAR;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
Actor_SetScale(&this->actor, 0.0f);
}
}
@@ -526,7 +526,7 @@ void EnMinislime_SetupKnockback(EnMinislime* this) {
this->collider.base.acFlags &= ~AC_ON;
this->collider.base.ocFlags1 |= OC1_ON;
this->knockbackTimer = 30;
- this->actor.speedXZ = 20.0f;
+ this->actor.speed = 20.0f;
func_800BE504(&this->actor, &this->collider);
this->actionFunc = EnMinislime_Knockback;
}
@@ -535,7 +535,7 @@ void EnMinislime_Knockback(EnMinislime* this, PlayState* play) {
f32 sqrtFrozenTimer;
this->knockbackTimer--;
- Math_StepToF(&this->actor.speedXZ, 0.0f, 1.0f);
+ 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.z = this->actor.scale.x;
@@ -556,7 +556,7 @@ void EnMinislime_SetupDefeatIdle(EnMinislime* this) {
this->idleTimer = 20;
this->collider.base.atFlags &= ~(AT_ON | AT_HIT);
this->collider.base.acFlags &= ~(AC_ON | AC_HIT);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->frozenAlpha > 20) {
EnMinislime_AddIceShardEffect(this);
}
@@ -621,11 +621,11 @@ void EnMinislime_SetupDespawn(EnMinislime* this) {
}
void EnMinislime_Despawn(EnMinislime* this, PlayState* play) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
void EnMinislime_SetupMoveToGekko(EnMinislime* this) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.gravity = 0.0f;
this->actor.velocity.y = 0.0f;
this->collider.base.acFlags &= ~AC_ON;
@@ -657,11 +657,11 @@ void EnMinislime_SetupGekkoThrow(EnMinislime* this) {
this->collider.base.acFlags |= AC_ON;
this->collider.base.ocFlags1 |= OC1_ON;
xzDistToPlayer = CLAMP_MIN(this->actor.xzDistToPlayer, 200.0f);
- this->actor.speedXZ = 17.5f;
+ this->actor.speed = 17.5f;
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
this->actor.gravity = -1.0f;
this->actor.velocity.y = ((xzDistToPlayer - 200.0f) * 0.01f) + 3.0f;
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
this->throwTimer = 10;
this->actionFunc = EnMinislime_GekkoThrow;
}
@@ -678,7 +678,7 @@ void EnMinislime_GekkoThrow(EnMinislime* this, PlayState* play) {
this->throwTimer = 10;
}
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
EnMinislime_SetupGrowAndShrink(this);
}
}
@@ -713,7 +713,7 @@ void EnMinislime_Update(Actor* thisx, PlayState* play) {
s32 pad;
Vec3f vec1;
- if ((this->actor.params == MINISLIME_DEFEAT_IDLE) && (this->actor.bgCheckFlags & 1)) {
+ if ((this->actor.params == MINISLIME_DEFEAT_IDLE) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
EnMinislime_SetupDefeatIdle(this);
} else if (this->actor.params == MINISLIME_DEFEAT_MELT) {
EnMinislime_SetupDefeatMelt(this, play);
@@ -761,7 +761,7 @@ void EnMinislime_Update(Actor* thisx, PlayState* play) {
this->attackTimer--;
}
- if (this->actor.bgCheckFlags & 2) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
player = GET_PLAYER(play);
vec1.x = this->actor.world.pos.x;
vec1.z = this->actor.world.pos.z;
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 28629f464..77cabe9b6 100644
--- a/src/overlays/actors/ovl_En_Minislime/z_en_minislime.h
+++ b/src/overlays/actors/ovl_En_Minislime/z_en_minislime.h
@@ -50,6 +50,4 @@ typedef struct EnMinislime {
/* 0x160 */ ColliderCylinder collider;
} EnMinislime; // size = 0x1AC
-extern const ActorInit En_Minislime_InitVars;
-
#endif // Z_EN_MINISLIME_H
diff --git a/src/overlays/actors/ovl_En_Mk/overlay.cfg b/src/overlays/actors/ovl_En_Mk/overlay.cfg
deleted file mode 100644
index 7463d059a..000000000
--- a/src/overlays/actors/ovl_En_Mk/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Mk
-z_en_mk.c
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 dc5e75579..20f32028e 100644
--- a/src/overlays/actors/ovl_En_Mk/z_en_mk.c
+++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.c
@@ -23,7 +23,7 @@ void func_80959C94(EnMk* this, PlayState* play);
void func_80959D28(EnMk* this, PlayState* play);
void func_80959E18(EnMk* this, PlayState* play);
-const ActorInit En_Mk_InitVars = {
+ActorInit En_Mk_InitVars = {
ACTOR_EN_MK,
ACTORCAT_NPC,
FLAGS,
@@ -76,7 +76,7 @@ s32 func_809592E0(EnMk* this, s16 index) {
void EnMk_Init(Actor* thisx, PlayState* play) {
EnMk* this = THIS;
- s16 cs;
+ s16 csId;
s32 i;
this->actor.terminalVelocity = -4.0f;
@@ -101,16 +101,16 @@ void EnMk_Init(Actor* thisx, PlayState* play) {
this->unk_27A |= 2;
}
- cs = this->actor.cutscene;
- for (i = 0; i < ARRAY_COUNT(this->unk_276); i++) {
- this->unk_276[i] = cs;
- if (cs != -1) {
- this->actor.cutscene = cs;
- cs = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene);
+ csId = this->actor.csId;
+ for (i = 0; i < ARRAY_COUNT(this->csIdList); i++) {
+ this->csIdList[i] = csId;
+ if (csId != CS_ID_NONE) {
+ this->actor.csId = csId;
+ csId = CutsceneManager_GetAdditionalCsId(this->actor.csId);
}
}
- this->actor.cutscene = this->unk_276[0];
+ this->actor.csId = this->csIdList[0];
}
void EnMk_Destroy(Actor* thisx, PlayState* play) {
@@ -120,20 +120,20 @@ void EnMk_Destroy(Actor* thisx, PlayState* play) {
}
s32 func_80959524(PlayState* play) {
- return gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 & 7;
+ return gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 & 7;
}
void func_8095954C(EnMk* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 0x7F)) {
- Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, 0x7F));
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_127)) {
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_127));
- switch (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x7F)]->action) {
+ switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_127)]->id) {
case 1:
case 2:
case 3:
case 4:
case 5:
- func_809592E0(this, play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x7F)]->action - 1);
+ func_809592E0(this, play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_127)]->id - 1);
break;
}
} else {
@@ -147,7 +147,7 @@ void func_80959624(EnMk* this, PlayState* play) {
if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) {
if (this->unk_27A & 4) {
textId = 0xFB9;
- } else if (gSaveContext.save.weekEventReg[55] & 0x80) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) {
textId = 0xFBC;
} else {
textId = 0xFBB;
@@ -170,7 +170,7 @@ void func_809596A0(EnMk* this, PlayState* play) {
switch (Message_GetState(&play->msgCtx)) {
case TEXT_STATE_5:
if (Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80959774;
}
break;
@@ -202,17 +202,17 @@ void func_80959844(EnMk* this, PlayState* play) {
if ((this->unk_27A & 2) && (func_80959524(play) >= 7)) {
textId = 0xFB3;
- } else if (gSaveContext.save.weekEventReg[20] & 0x40) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_40)) {
textId = 0xFB9;
- } else if (gSaveContext.save.weekEventReg[19] & 0x40) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_40)) {
textId = 0xFB5;
} else if (func_80959524(play) >= 7) {
textId = 0xFB3;
} else {
switch (gSaveContext.save.playerForm) {
case PLAYER_FORM_DEKU:
- if (gSaveContext.save.weekEventReg[19] & 0x10) {
- if (gSaveContext.save.weekEventReg[55] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_10)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) {
textId = 0xFAF;
} else {
textId = 0xFAE;
@@ -223,8 +223,8 @@ void func_80959844(EnMk* this, PlayState* play) {
break;
case PLAYER_FORM_GORON:
- if (gSaveContext.save.weekEventReg[19] & 8) {
- if (gSaveContext.save.weekEventReg[55] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_08)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) {
textId = 0xFAB;
} else {
textId = 0xFAA;
@@ -238,8 +238,8 @@ void func_80959844(EnMk* this, PlayState* play) {
case PLAYER_FORM_HUMAN:
if (func_80959524(play) > 0) {
textId = 0xFA7;
- } else if (gSaveContext.save.weekEventReg[19] & 4) {
- if (gSaveContext.save.weekEventReg[55] & 0x80) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_04)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) {
textId = 0xFBF;
} else {
textId = 0xFA6;
@@ -252,7 +252,7 @@ void func_80959844(EnMk* this, PlayState* play) {
default:
if (func_80959524(play) > 0) {
textId = 0xFB0;
- } else if (gSaveContext.save.weekEventReg[19] & 0x20) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_20)) {
textId = 0xFB2;
} else {
textId = 0xFB1;
@@ -279,16 +279,16 @@ void func_80959A24(EnMk* this, PlayState* play) {
case 0xFA4:
case 0xFAA:
case 0xFAE:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0xFA2:
- if (gSaveContext.save.weekEventReg[55] & 0x80) {
- func_801477B4(play);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) {
+ Message_CloseTextbox(play);
this->actionFunc = func_80959E18;
- break;
+ } else {
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
}
- func_80151938(play, play->msgCtx.currentTextId + 1);
break;
case 0xFA5:
@@ -303,53 +303,53 @@ void func_80959A24(EnMk* this, PlayState* play) {
case 0xFBD:
case 0xFBE:
case 0xFBF:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80959E18;
break;
case 0xFA0:
- gSaveContext.save.weekEventReg[19] |= 4;
- func_80151938(play, 0xFA1);
+ SET_WEEKEVENTREG(WEEKEVENTREG_19_04);
+ Message_ContinueTextbox(play, 0xFA1);
break;
case 0xFA8:
- gSaveContext.save.weekEventReg[19] |= 8;
- if (gSaveContext.save.weekEventReg[55] & 0x80) {
- func_80151938(play, 0xFBD);
- break;
+ SET_WEEKEVENTREG(WEEKEVENTREG_19_08);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) {
+ Message_ContinueTextbox(play, 0xFBD);
+ } else {
+ Message_ContinueTextbox(play, 0xFA9);
}
- func_80151938(play, 0xFA9);
break;
case 0xFAC:
- gSaveContext.save.weekEventReg[19] |= 0x10;
- if (gSaveContext.save.weekEventReg[55] & 0x80) {
- func_80151938(play, 0xFBE);
- break;
+ SET_WEEKEVENTREG(WEEKEVENTREG_19_10);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) {
+ Message_ContinueTextbox(play, 0xFBE);
+ } else {
+ Message_ContinueTextbox(play, 0xFAD);
}
- func_80151938(play, 0xFAD);
break;
case 0xFB1:
- gSaveContext.save.weekEventReg[19] |= 0x20;
- func_801477B4(play);
+ SET_WEEKEVENTREG(WEEKEVENTREG_19_20);
+ Message_CloseTextbox(play);
this->actionFunc = func_80959E18;
break;
case 0xFB3:
case 0xFB4:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80959E18;
this->actor.flags &= ~ACTOR_FLAG_10000;
break;
case 0xFB5:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80959E18;
break;
default:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80959E18;
break;
}
@@ -365,15 +365,15 @@ void func_80959C94(EnMk* this, PlayState* play) {
Message_StartTextbox(play, 0xFB3, &this->actor);
} else {
this->actor.flags |= ACTOR_FLAG_10000;
- func_800B8500(&this->actor, play, 350.0f, 1000.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 350.0f, 1000.0f, PLAYER_IA_MINUS1);
}
}
void func_80959D28(EnMk* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
- if ((play->csCtx.state == 0) && (this->actor.cutscene == -1)) {
- if (gSaveContext.save.weekEventReg[20] & 0x40) {
+ if ((play->csCtx.state == CS_STATE_IDLE) && (this->actor.csId == CS_ID_NONE)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_40)) {
this->unk_27A &= ~1;
this->actionFunc = func_80959774;
this->actor.home.rot.y += 0x4E20;
@@ -381,14 +381,14 @@ void func_80959D28(EnMk* this, PlayState* play) {
} else {
this->actionFunc = func_80959E18;
}
- this->actor.cutscene = this->unk_276[0];
+ this->actor.csId = this->csIdList[0];
} else {
- if (this->actor.cutscene != -1) {
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
- this->actor.cutscene = -1;
+ if (this->actor.csId != CS_ID_NONE) {
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
+ this->actor.csId = CS_ID_NONE;
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
func_8095954C(this, play);
@@ -401,7 +401,7 @@ void func_80959E18(EnMk* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
- if (gSaveContext.save.weekEventReg[20] & 0x40) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_40)) {
this->unk_27A &= ~1;
this->actionFunc = func_80959774;
this->actor.home.rot.y += 0x4E20;
@@ -412,13 +412,13 @@ void func_80959E18(EnMk* this, PlayState* play) {
play->msgCtx.ocarinaMode = 4;
this->actionFunc = func_80959D28;
if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) {
- this->actor.cutscene = this->unk_276[0];
- gSaveContext.save.weekEventReg[20] |= 0x40;
+ this->actor.csId = this->csIdList[0];
+ SET_WEEKEVENTREG(WEEKEVENTREG_20_40);
Item_Give(play, ITEM_SONG_NOVA);
} else {
- this->actor.cutscene = this->unk_276[1];
+ this->actor.csId = this->csIdList[1];
}
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
} else if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
func_80959844(this, play);
this->actionFunc = func_80959A24;
@@ -428,7 +428,7 @@ void func_80959E18(EnMk* this, PlayState* play) {
} else if ((this->actor.xzDistToPlayer < 120.0f) && (ABS_ALT(sp22) <= 0x4300)) {
this->unk_27A |= 1;
func_800B8614(&this->actor, play, 200.0f);
- if (!(gSaveContext.save.weekEventReg[20] & 0x40) && (gSaveContext.save.weekEventReg[19] & 0x40)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_20_40) && CHECK_WEEKEVENTREG(WEEKEVENTREG_19_40)) {
func_800B874C(&this->actor, play, 200.0f, 100.0f);
}
} else {
@@ -445,11 +445,11 @@ void EnMk_Update(Actor* thisx, PlayState* play) {
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
this->actionFunc(this, play);
- if ((this->unk_27A & 1) && !Cutscene_CheckActorAction(play, 0x7F)) {
+ if ((this->unk_27A & 1) && !Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_127)) {
Actor_TrackPlayer(play, &this->actor, &this->unk_270, &sp38, this->actor.focus.pos);
} else {
Math_SmoothStepToS(&this->unk_270.x, 0, 6, 0x1838, 0x64);
diff --git a/src/overlays/actors/ovl_En_Mk/z_en_mk.h b/src/overlays/actors/ovl_En_Mk/z_en_mk.h
index ed6cd6997..518b0406d 100644
--- a/src/overlays/actors/ovl_En_Mk/z_en_mk.h
+++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.h
@@ -15,12 +15,10 @@ typedef struct EnMk {
/* 0x1D4 */ Vec3s jointTable[OBJECT_MK_LIMB_MAX];
/* 0x222 */ Vec3s morphTable[OBJECT_MK_LIMB_MAX];
/* 0x270 */ Vec3s unk_270;
- /* 0x276 */ s16 unk_276[2];
+ /* 0x276 */ s16 csIdList[2];
/* 0x27A */ u16 unk_27A;
/* 0x27C */ s16 unk_27C;
/* 0x280 */ EnMkActionFunc actionFunc;
} EnMk; // size = 0x284
-extern const ActorInit En_Mk_InitVars;
-
#endif // Z_EN_MK_H
diff --git a/src/overlays/actors/ovl_En_Mkk/overlay.cfg b/src/overlays/actors/ovl_En_Mkk/overlay.cfg
deleted file mode 100644
index 490c7cd58..000000000
--- a/src/overlays/actors/ovl_En_Mkk/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Mkk
-z_en_mkk.c
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 c8cc1abb1..4f1ddc660 100644
--- a/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c
+++ b/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c
@@ -35,7 +35,7 @@ void func_80A4E67C(EnMkk* this);
void func_80A4E84C(EnMkk* this);
void func_80A4EBBC(EnMkk* this, PlayState* play);
-const ActorInit En_Mkk_InitVars = {
+ActorInit En_Mkk_InitVars = {
ACTOR_EN_MKK,
ACTORCAT_ENEMY,
FLAGS,
@@ -256,31 +256,31 @@ void func_80A4E2E8(EnMkk* this, PlayState* play) {
s32 sp20;
this->unk_14E--;
- if ((this->actor.params == 1) && (this->actor.bgCheckFlags & 1) && (this->actor.speedXZ > 2.5f) &&
+ if ((this->actor.params == 1) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.speed > 2.5f) &&
((play->gameplayFrames % 3) == 0)) {
func_80A4E22C(this, play);
}
if (this->unk_14E > 0) {
- Math_StepToF(&this->actor.speedXZ, 5.0f, 0.7f);
+ Math_StepToF(&this->actor.speed, 5.0f, 0.7f);
sp20 = false;
} else {
- sp20 = Math_StepToF(&this->actor.speedXZ, 0.0f, 0.7f);
+ sp20 = Math_StepToF(&this->actor.speed, 0.0f, 0.7f);
}
if ((player->stateFlags3 & 0x100) || (Player_GetMask(play) == PLAYER_MASK_STONE)) {
- Math_ScaledStepToS(&this->unk_150, Actor_YawToPoint(&this->actor, &this->actor.home.pos), 0x400);
+ Math_ScaledStepToS(&this->unk_150, Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos), 0x400);
} else if ((player->stateFlags2 & 0x80) || (player->actor.freezeTimer > 0)) {
Math_ScaledStepToS(&this->unk_150, this->actor.yawTowardsPlayer + 0x8000, 0x400);
} else {
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.speedXZ)) + this->unk_150;
+ (s32)(sin_rad(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;
func_80A4E190(this);
} else if ((this->unk_149 == 0) && (!(player->stateFlags3 & 0x100)) &&
- (Player_GetMask(play) != PLAYER_MASK_STONE) && (this->actor.bgCheckFlags & 1) &&
+ (Player_GetMask(play) != PLAYER_MASK_STONE) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) &&
(Actor_IsFacingPlayer(&this->actor, 0x1800)) && (this->actor.xzDistToPlayer < 120.0f) &&
(fabsf(this->actor.playerHeightRel) < 100.0f)) {
func_80A4E58C(this);
@@ -289,9 +289,9 @@ void func_80A4E2E8(EnMkk* this, PlayState* play) {
void func_80A4E58C(EnMkk* this) {
this->unk_14B |= 1;
- this->actor.speedXZ = 3.0f;
+ this->actor.speed = 3.0f;
this->actor.velocity.y = 5.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KUROSUKE_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KUROSUKE_ATTACK);
this->collider.base.atFlags |= AT_ON;
Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0x800);
this->actionFunc = func_80A4E60C;
@@ -301,7 +301,7 @@ void func_80A4E60C(EnMkk* this, PlayState* play) {
if (this->collider.base.atFlags & AT_HIT) {
this->collider.base.atFlags &= ~(AT_ON | AT_HIT);
}
- if ((this->actor.velocity.y < 0.0f) && (this->actor.bgCheckFlags & 1)) {
+ if ((this->actor.velocity.y < 0.0f) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
this->unk_149 = 2;
this->collider.base.atFlags &= ~AT_ON;
func_80A4E2B8(this);
@@ -313,35 +313,35 @@ void func_80A4E67C(EnMkk* this) {
this->actor.flags &= ~ACTOR_FLAG_1;
this->collider.base.acFlags &= ~AC_ON;
this->actor.flags |= ACTOR_FLAG_10;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_DEAD);
this->alpha = 254;
func_800BE568(&this->actor, &this->collider);
- this->actor.speedXZ = 7.0f;
+ this->actor.speed = 7.0f;
this->actor.shape.rot.y = this->actor.world.rot.y;
this->actor.velocity.y = 5.0f;
this->actor.gravity = -1.3f;
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
this->actionFunc = func_80A4E72C;
}
void func_80A4E72C(EnMkk* this, PlayState* play) {
Vec3f temp;
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
if (this->actor.velocity.y > -1.0f) {
temp.x = this->actor.world.pos.x;
temp.y = this->actor.world.pos.y + 15.0f;
temp.z = this->actor.world.pos.z;
EffectSsDeadDb_Spawn(play, &temp, &gZeroVec3f, &gZeroVec3f, &sEffPrimColors[this->actor.params],
&sEffEnvColors[this->actor.params], 0x46, 4, 0xC);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EXTINCT);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EXTINCT);
if (this->unk_14C != 0) {
Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, this->unk_14C * 0x10);
}
func_80A4EEF4(this);
} else {
this->actor.velocity.y *= -0.8f;
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
}
}
}
@@ -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.speedXZ * sin_rad(this->unk_14E * (M_PI / 5))));
+ (s32)(1228.8f * this->actor.speed * sin_rad(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.speedXZ * sin_rad(this->unk_14E * (M_PI / 5))));
+ (s32)(1228.8f * this->actor.speed * sin_rad(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.speedXZ * sin_rad(this->unk_14E * (M_PI / 5))));
+ (s32)(1228.8f * this->actor.speed * sin_rad(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.speedXZ * sin_rad(this->unk_14E * (M_PI / 5))));
+ (s32)(1228.8f * this->actor.speed * sin_rad(this->unk_14E * (M_PI / 5))));
}
}
@@ -415,13 +415,15 @@ void EnMkk_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
this->actor.world.rot.y = this->actor.shape.rot.y;
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
if (this->actor.params == 0) {
func_80A4E84C(this);
}
if (Actor_IsFacingPlayer(&this->actor, 0x3000)) {
player = GET_PLAYER(play);
- this->actor.shape.rot.x = Actor_PitchToPoint(&this->actor, &player->actor.focus.pos);
+ this->actor.shape.rot.x = Actor_WorldPitchTowardPoint(&this->actor, &player->actor.focus.pos);
this->actor.shape.rot.x = CLAMP(this->actor.shape.rot.x, -0x1800, 0x1800);
}
Actor_SetFocus(&this->actor, 10.0f);
@@ -483,11 +485,11 @@ void func_80A4EF74(EnMkk* this, PlayState* play) {
Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.home.pos);
Math_Vec3f_Copy(&this->unk_154, &this->actor.world.pos);
Math_Vec3f_Copy(&this->unk_160, &this->actor.world.pos);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.velocity.y = 0.0f;
func_80A4EDF0(this);
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else {
this->alpha = newAlpha;
diff --git a/src/overlays/actors/ovl_En_Mkk/z_en_mkk.h b/src/overlays/actors/ovl_En_Mkk/z_en_mkk.h
index a8e047284..80efcd577 100644
--- a/src/overlays/actors/ovl_En_Mkk/z_en_mkk.h
+++ b/src/overlays/actors/ovl_En_Mkk/z_en_mkk.h
@@ -29,6 +29,4 @@ typedef struct EnMkk {
/* 0x17C */ ColliderSphere collider;
} EnMkk; // size = 0x1D4
-extern const ActorInit En_Mkk_InitVars;
-
#endif // Z_EN_MKK_H
diff --git a/src/overlays/actors/ovl_En_Mm/overlay.cfg b/src/overlays/actors/ovl_En_Mm/overlay.cfg
deleted file mode 100644
index db9f54ab3..000000000
--- a/src/overlays/actors/ovl_En_Mm/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Mm
-z_en_mm.c
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 8e2c5260b..67a0a1e77 100644
--- a/src/overlays/actors/ovl_En_Mm/z_en_mm.c
+++ b/src/overlays/actors/ovl_En_Mm/z_en_mm.c
@@ -21,7 +21,7 @@ void func_80965DB4(EnMm* this, PlayState* play);
void func_8096611C(EnMm* this, PlayState* play);
void EnMm_SetupAction(EnMm* this, EnMmActionFunc actionFunc);
-const ActorInit En_Mm_InitVars = {
+ActorInit En_Mm_InitVars = {
ACTOR_EN_MM,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -74,9 +74,9 @@ void EnMm_Init(Actor* thisx, PlayState* play) {
EnMm* this = THIS;
EnMmActionFunc action;
- if ((this->actor.params >= 0) && ((!(gSaveContext.save.weekEventReg[37] & 0x10)) ||
- (gSaveContext.save.weekEventReg[37] & 8) || (gSaveContext.unk_1014 != 0))) {
- Actor_MarkForDeath(&this->actor);
+ if ((this->actor.params >= 0) && (!CHECK_WEEKEVENTREG(WEEKEVENTREG_37_10) ||
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_37_08) || (gSaveContext.unk_1014 != 0))) {
+ Actor_Kill(&this->actor);
return;
}
Actor_ProcessInitChain(&this->actor, sInitChain);
@@ -87,7 +87,7 @@ void EnMm_Init(Actor* thisx, PlayState* play) {
func_80965BBC(this);
return;
}
- if (this->actor.cutscene >= 0) {
+ if (this->actor.csId >= 0) {
action = func_80965D3C;
} else {
action = func_80965DB4;
@@ -102,20 +102,20 @@ void EnMm_Destroy(Actor* thisx, PlayState* play) {
}
void func_80965D3C(EnMm* this, PlayState* play) {
- s16 cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene);
+ s16 csId = CutsceneManager_GetAdditionalCsId(this->actor.csId);
- if (ActorCutscene_GetCanPlayNext(cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(cutscene, &this->actor);
+ if (CutsceneManager_IsNext(csId)) {
+ CutsceneManager_StartWithPlayerCs(csId, &this->actor);
EnMm_SetupAction(this, func_80965DB4);
} else {
- ActorCutscene_SetIntentToPlay(cutscene);
+ CutsceneManager_Queue(csId);
}
}
void func_80965DB4(EnMm* this, PlayState* play) {
s16 direction;
- Vec3f sp50;
- s16 unused;
+ Vec3f slopeNormal;
+ s16 downwardSlopeYaw;
f32 temp_f14;
f32 temp_f12;
f32 temp_f2;
@@ -124,54 +124,55 @@ void func_80965DB4(EnMm* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
func_80965BBC(this);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_PL_PULL_UP_ROCK);
+ Actor_PlaySfx(&this->actor, NA_SE_PL_PULL_UP_ROCK);
} else {
- if ((this->actor.velocity.y > 0.0f) && (this->actor.bgCheckFlags & 0x10)) {
+ if ((this->actor.velocity.y > 0.0f) && (this->actor.bgCheckFlags & BGCHECKFLAG_CEILING)) {
this->actor.velocity.y = 0.0f;
}
- if ((this->actor.speedXZ != 0.0f) && (this->actor.bgCheckFlags & 8)) {
+ if ((this->actor.speed != 0.0f) && (this->actor.bgCheckFlags & BGCHECKFLAG_WALL)) {
angle = BINANG_SUB(this->actor.world.rot.y, BINANG_ROT180(this->actor.wallYaw));
this->actor.world.rot.y += BINANG_SUB(0x8000, (s16)(angle * 2));
- this->actor.speedXZ *= 0.5f;
+ this->actor.speed *= 0.5f;
CollisionCheck_SpawnShieldParticles(play, &this->actor.world.pos);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_HUMAN_BOUND);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_HUMAN_BOUND);
}
- if (!(this->actor.bgCheckFlags & 1)) {
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.08f);
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ Math_StepToF(&this->actor.speed, 0.0f, 0.08f);
} else {
- temp_f14 = Math_SinS(this->actor.world.rot.y) * this->actor.speedXZ;
- temp_f12 = Math_CosS(this->actor.world.rot.y) * this->actor.speedXZ;
- func_800B75A0(this->actor.floorPoly, &sp50, &unused);
- temp_f14 += 3.0f * sp50.x;
- temp_f12 += 3.0f * sp50.z;
+ temp_f14 = Math_SinS(this->actor.world.rot.y) * this->actor.speed;
+ temp_f12 = Math_CosS(this->actor.world.rot.y) * this->actor.speed;
+ Actor_GetSlopeDirection(this->actor.floorPoly, &slopeNormal, &downwardSlopeYaw);
+ temp_f14 += 3.0f * slopeNormal.x;
+ temp_f12 += 3.0f * slopeNormal.z;
temp_f2 = sqrtf(SQ(temp_f14) + SQ(temp_f12));
- if ((temp_f2 < this->actor.speedXZ) ||
- (SurfaceType_GetSlope(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) == 1)) {
- this->actor.speedXZ = CLAMP_MAX(temp_f2, 16.0f);
- this->actor.world.rot.y = Math_FAtan2F(temp_f12, temp_f14);
+ if ((temp_f2 < this->actor.speed) ||
+ (SurfaceType_GetFloorEffect(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) ==
+ FLOOR_EFFECT_1)) {
+ this->actor.speed = CLAMP_MAX(temp_f2, 16.0f);
+ this->actor.world.rot.y = Math_Atan2S_XY(temp_f12, temp_f14);
}
- if (!Math_StepToF(&this->actor.speedXZ, 0.0f, 1.0f)) {
+ if (!Math_StepToF(&this->actor.speed, 0.0f, 1.0f)) {
direction = this->actor.world.rot.y;
if (ABS_ALT(BINANG_SUB(this->actor.world.rot.y, this->actor.shape.rot.y)) > 0x4000) {
direction = BINANG_ROT180(direction);
}
- Math_ScaledStepToS(&this->actor.shape.rot.y, direction, this->actor.speedXZ * 100.0f);
- this->unk_190 += (s16)(this->actor.speedXZ * 800.0f);
+ Math_ScaledStepToS(&this->actor.shape.rot.y, direction, this->actor.speed * 100.0f);
+ this->unk_190 += (s16)(this->actor.speed * 800.0f);
}
- if (this->actor.bgCheckFlags & 2) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
if (this->actor.velocity.y < -6.0f) {
this->actor.velocity.y *= -0.3f;
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_HUMAN_BOUND);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_HUMAN_BOUND);
} else {
- Actor_PickUp(&this->actor, play, GI_NONE, 50.0f, 30.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_NONE, 50.0f, 30.0f);
}
}
@@ -186,7 +187,7 @@ void func_8096611C(EnMm* this, PlayState* play) {
if (Actor_HasNoParent(&this->actor, play)) {
EnMm_SetupAction(this, func_80965DB4);
this->actor.room = play->roomCtx.curRoom.num;
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
Math_Vec3s_ToVec3f(&this->actor.prevPos, &this->actor.home.rot);
gSaveContext.unk_1014 = 0;
} else {
@@ -200,7 +201,9 @@ void EnMm_Update(Actor* thisx, PlayState* play) {
Collider_ResetCylinderAC(play, &this->collider.base);
this->actionFunc(this, play);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 10.0f, 20.0f, 31);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 10.0f, 20.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 |
+ UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10);
Actor_SetFocus(&this->actor, 20.0f);
}
diff --git a/src/overlays/actors/ovl_En_Mm2/overlay.cfg b/src/overlays/actors/ovl_En_Mm2/overlay.cfg
deleted file mode 100644
index ee3394df9..000000000
--- a/src/overlays/actors/ovl_En_Mm2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Mm2
-z_en_mm2.c
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 d049bdba0..48a379304 100644
--- a/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c
+++ b/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c
@@ -18,7 +18,7 @@ void EnMm2_Draw(Actor* thisx, PlayState* play);
void EnMm2_Reading(EnMm2* this, PlayState* play);
void EnMm2_WaitForRead(EnMm2* this, PlayState* play);
-const ActorInit En_Mm2_InitVars = {
+ActorInit En_Mm2_InitVars = {
ACTOR_EN_MM2,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -49,7 +49,7 @@ void EnMm2_Reading(EnMm2* this, PlayState* play) {
switch (Message_GetState(&play->msgCtx)) {
case TEXT_STATE_5:
if (Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = EnMm2_WaitForRead;
}
break;
diff --git a/src/overlays/actors/ovl_En_Mm2/z_en_mm2.h b/src/overlays/actors/ovl_En_Mm2/z_en_mm2.h
index 1b3dcc0aa..4f961e1c0 100644
--- a/src/overlays/actors/ovl_En_Mm2/z_en_mm2.h
+++ b/src/overlays/actors/ovl_En_Mm2/z_en_mm2.h
@@ -14,6 +14,4 @@ typedef struct EnMm2 {
/* 0x18C */ UNK_TYPE1 unk_18C[0x128];
} EnMm2; // size = 0x2B4
-extern const ActorInit En_Mm2_InitVars;
-
#endif // Z_EN_MM2_H
diff --git a/src/overlays/actors/ovl_En_Mm3/overlay.cfg b/src/overlays/actors/ovl_En_Mm3/overlay.cfg
deleted file mode 100644
index d1162759f..000000000
--- a/src/overlays/actors/ovl_En_Mm3/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Mm3
-z_en_mm3.c
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 ac3c8322e..366bddef3 100644
--- a/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c
+++ b/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c
@@ -29,7 +29,7 @@ void func_80A6FEEC(EnMm3* this, PlayState* play);
s32 func_80A6FFAC(EnMm3* this, PlayState* play);
void func_80A70084(EnMm3* this, PlayState* play);
-const ActorInit En_Mm3_InitVars = {
+ActorInit En_Mm3_InitVars = {
ACTOR_EN_MM3,
ACTORCAT_NPC,
FLAGS,
@@ -92,7 +92,7 @@ void EnMm3_Init(Actor* thisx, PlayState* play) {
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, NULL, &sColChkInfoInit);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
this->actor.parent = NULL;
this->actor.targetMode = 0;
this->unk_1DC = 1;
@@ -106,7 +106,7 @@ void EnMm3_Init(Actor* thisx, PlayState* play) {
void EnMm3_Destroy(Actor* thisx, PlayState* play) {
EnMm3* this = THIS;
- gSaveContext.save.weekEventReg[63] &= (u8)~1;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
Collider_DestroyCylinder(play, &this->collider);
}
@@ -148,7 +148,7 @@ void func_80A6F3B4(EnMm3* this, PlayState* play) {
case 0x278E:
if (play->msgCtx.choiceIndex == 0) {
if (this->unk_2B2 & 0x20) {
- if (gSaveContext.save.playerData.rupees >= play->msgCtx.unk1206C) {
+ if (gSaveContext.save.saveInfo.playerData.rupees >= play->msgCtx.unk1206C) {
func_8019F208();
Message_StartTextbox(play, 0x2790, &this->actor);
this->unk_2B4 = 0x2790;
@@ -174,7 +174,7 @@ void func_80A6F3B4(EnMm3* this, PlayState* play) {
case 0x279A:
if (play->msgCtx.choiceIndex == 0) {
- if (gSaveContext.save.playerData.rupees >= play->msgCtx.unk1206C) {
+ if (gSaveContext.save.saveInfo.playerData.rupees >= play->msgCtx.unk1206C) {
func_8019F208();
Message_StartTextbox(play, 0x2790, &this->actor);
this->unk_2B4 = 0x2790;
@@ -271,7 +271,7 @@ void func_80A6F5E4(EnMm3* this, PlayState* play) {
break;
case 0x2793:
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80A6FE1C(this);
func_80A6FE30(this, play);
break;
@@ -279,7 +279,7 @@ void func_80A6F5E4(EnMm3* this, PlayState* play) {
case 0x2795:
case 0x2796:
case 0x2797:
- if (gSaveContext.save.weekEventReg[63] & 2) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED)) {
Message_StartTextbox(play, 0x279B, &this->actor);
this->unk_2B4 = 0x279B;
func_80151BB4(play, 0xB);
@@ -341,18 +341,18 @@ void func_80A6F9DC(EnMm3* this, PlayState* play) {
if (this->unk_2B4 == 0x2790) {
Player* player = GET_PLAYER(play);
- player->stateFlags1 |= 0x20;
+ player->stateFlags1 |= PLAYER_STATE1_20;
if (Player_GetMask(play) == PLAYER_MASK_BUNNY) {
Interface_StartPostmanTimer(0, POSTMAN_MINIGAME_BUNNY_HOOD_ON);
} else {
Interface_StartPostmanTimer(0, POSTMAN_MINIGAME_BUNNY_HOOD_OFF);
}
- func_801477B4(play);
+ Message_CloseTextbox(play);
play_sound(NA_SE_SY_START_SHOT);
func_80A6FBA0(this);
} else {
- gSaveContext.save.weekEventReg[63] &= (u8)~1;
- gSaveContext.save.weekEventReg[63] &= (u8)~2;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED);
func_80A6F270(this);
}
}
@@ -365,7 +365,7 @@ void func_80A6F9DC(EnMm3* this, PlayState* play) {
if (((this->unk_2B4 == 0x279D) || (this->unk_2B4 == 0x27A0) || (this->unk_2B4 == 0x278B)) &&
Animation_OnFrame(&this->skelAnime, 8.0f) && (this->unk_2AE == 0)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_LIE_DOWN_ON_BED);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_LIE_DOWN_ON_BED);
this->unk_2AE = 1;
}
}
@@ -373,9 +373,9 @@ void func_80A6F9DC(EnMm3* this, PlayState* play) {
void func_80A6FBA0(EnMm3* this) {
AudioSfx_MuteBanks((1 << BANK_PLAYER) | (1 << BANK_ITEM) | (1 << BANK_ENV) | (1 << BANK_ENEMY) |
(1 << BANK_OCARINA) | (1 << BANK_VOICE));
- func_801A0238(0, 5);
- gSaveContext.save.weekEventReg[63] |= 1;
- gSaveContext.save.weekEventReg[63] &= (u8)~2;
+ Audio_SetMainBgmVolume(0, 5);
+ SET_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED);
this->actionFunc = func_80A6FBFC;
}
@@ -383,7 +383,7 @@ void func_80A6FBFC(EnMm3* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (gSaveContext.timerStates[TIMER_ID_POSTMAN] == TIMER_STATE_POSTMAN_END) {
- player->stateFlags1 &= ~0x20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
this->actor.flags |= ACTOR_FLAG_10000;
if (gSaveContext.timerCurTimes[TIMER_ID_POSTMAN] > SECONDS_TO_TIMER(15)) {
gSaveContext.timerCurTimes[TIMER_ID_POSTMAN] = SECONDS_TO_TIMER(15);
@@ -400,7 +400,7 @@ void func_80A6FBFC(EnMm3* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
AudioSfx_MuteBanks(0);
- func_801A0238(0x7F, 5);
+ Audio_SetMainBgmVolume(0x7F, 5);
Message_StartTextbox(play, 0x2791, &this->actor);
this->unk_2B4 = 0x2791;
this->unk_2AC = 7;
@@ -425,15 +425,15 @@ void func_80A6FE1C(EnMm3* this) {
void func_80A6FE30(EnMm3* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
- if (!(gSaveContext.save.weekEventReg[77] & 1)) {
- gSaveContext.save.weekEventReg[77] |= 1;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_77_01)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_77_01);
}
this->actor.parent = NULL;
func_80A6FED8(this);
- } else if (gSaveContext.save.weekEventReg[77] & 1) {
- Actor_PickUp(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f);
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_01)) {
+ Actor_OfferGetItem(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f);
} else {
- Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f);
}
}
@@ -445,7 +445,7 @@ void func_80A6FEEC(EnMm3* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- player->stateFlags1 &= ~0x20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
Message_StartTextbox(play, 0x2794, &this->actor);
this->unk_2B4 = 0x2794;
func_80151BB4(play, 0xB);
@@ -453,7 +453,7 @@ void func_80A6FEEC(EnMm3* this, PlayState* play) {
this->actor.flags &= ~ACTOR_FLAG_10000;
func_80A6F9C8(this);
} else {
- func_800B85E0(&this->actor, play, 200.0f, -1);
+ func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1);
}
}
diff --git a/src/overlays/actors/ovl_En_Mm3/z_en_mm3.h b/src/overlays/actors/ovl_En_Mm3/z_en_mm3.h
index 1cc1946f5..e6b512723 100644
--- a/src/overlays/actors/ovl_En_Mm3/z_en_mm3.h
+++ b/src/overlays/actors/ovl_En_Mm3/z_en_mm3.h
@@ -30,6 +30,4 @@ typedef struct EnMm3 {
/* 0x2B4 */ u16 unk_2B4;
} EnMm3; // size = 0x2B8
-extern const ActorInit En_Mm3_InitVars;
-
#endif // Z_EN_MM3_H
diff --git a/src/overlays/actors/ovl_En_Mnk/overlay.cfg b/src/overlays/actors/ovl_En_Mnk/overlay.cfg
deleted file mode 100644
index 456c850ac..000000000
--- a/src/overlays/actors/ovl_En_Mnk/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Mnk
-z_en_mnk.c
diff --git a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c
index 14c235f51..ef064969e 100644
--- a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c
+++ b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.c
@@ -16,7 +16,7 @@ void EnMnk_Update(Actor* thisx, PlayState* play);
void EnMnk_Draw(Actor* thisx, PlayState* play);
#if 0
-const ActorInit En_Mnk_InitVars = {
+ActorInit En_Mnk_InitVars = {
ACTOR_EN_MNK,
ACTORCAT_NPC,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.h b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.h
index 9baee87f0..e2f739ada 100644
--- a/src/overlays/actors/ovl_En_Mnk/z_en_mnk.h
+++ b/src/overlays/actors/ovl_En_Mnk/z_en_mnk.h
@@ -14,6 +14,4 @@ typedef struct EnMnk {
/* 0x3E8 */ EnMnkActionFunc actionFunc;
} EnMnk; // size = 0x3EC
-extern const ActorInit En_Mnk_InitVars;
-
#endif // Z_EN_MNK_H
diff --git a/src/overlays/actors/ovl_En_Ms/overlay.cfg b/src/overlays/actors/ovl_En_Ms/overlay.cfg
deleted file mode 100644
index f8f57266e..000000000
--- a/src/overlays/actors/ovl_En_Ms/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ms
-z_en_ms.c
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 01b5c4bec..3cbf7e2ad 100644
--- a/src/overlays/actors/ovl_En_Ms/z_en_ms.c
+++ b/src/overlays/actors/ovl_En_Ms/z_en_ms.c
@@ -21,7 +21,7 @@ void EnMs_Talk(EnMs* this, PlayState* play);
void EnMs_Sell(EnMs* this, PlayState* play);
void EnMs_TalkAfterPurchase(EnMs* this, PlayState* play);
-const ActorInit En_Ms_InitVars = {
+ActorInit En_Ms_InitVars = {
ACTOR_EN_MS,
ACTORCAT_NPC,
FLAGS,
@@ -69,7 +69,7 @@ void EnMs_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->actor, 0.015f);
this->actor.colChkInfo.mass = MASS_IMMOVABLE; // Eating Magic Beans all day will do that to you
this->actionFunc = EnMs_Wait;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.velocity.y = 0.0f;
this->actor.gravity = -1.0f;
}
@@ -83,7 +83,7 @@ void EnMs_Destroy(Actor* thisx, PlayState* play) {
void EnMs_Wait(EnMs* this, PlayState* play) {
s16 yawDiff = this->actor.yawTowardsPlayer - this->actor.shape.rot.y;
- if (gSaveContext.save.inventory.items[SLOT_MAGIC_BEANS] == ITEM_NONE) {
+ if (gSaveContext.save.saveInfo.inventory.items[SLOT_MAGIC_BEANS] == ITEM_NONE) {
this->actor.textId = 0x92E; // "[...] You're the first customer [...]"
} else {
this->actor.textId = 0x932; // "[...] So you liked my Magic Beans [...]"
@@ -106,9 +106,9 @@ void EnMs_Talk(EnMs* this, PlayState* play) {
case TEXT_STATE_5:
if (Message_ShouldAdvance(play)) {
- func_801477B4(play);
- Actor_PickUp(&this->actor, play, GI_MAGIC_BEANS, this->actor.xzDistToPlayer,
- this->actor.playerHeightRel);
+ Message_CloseTextbox(play);
+ Actor_OfferGetItem(&this->actor, play, GI_MAGIC_BEANS, this->actor.xzDistToPlayer,
+ this->actor.playerHeightRel);
this->actionFunc = EnMs_Sell;
}
break;
@@ -117,16 +117,16 @@ void EnMs_Talk(EnMs* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
switch (play->msgCtx.choiceIndex) {
case 0: // yes
- func_801477B4(play);
- if (gSaveContext.save.playerData.rupees < 10) {
+ Message_CloseTextbox(play);
+ if (gSaveContext.save.saveInfo.playerData.rupees < 10) {
play_sound(NA_SE_SY_ERROR);
- func_80151938(play, 0x935); // "[...] You don't have enough Rupees."
+ Message_ContinueTextbox(play, 0x935); // "[...] You don't have enough Rupees."
} else if (AMMO(ITEM_MAGIC_BEANS) >= 20) {
play_sound(NA_SE_SY_ERROR);
- func_80151938(play, 0x937); // "[...] You can't carry anymore."
+ Message_ContinueTextbox(play, 0x937); // "[...] You can't carry anymore."
} else {
func_8019F208();
- Actor_PickUp(&this->actor, play, GI_MAGIC_BEANS, 90.0f, 10.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MAGIC_BEANS, 90.0f, 10.0f);
Rupees_ChangeBy(-10);
this->actionFunc = EnMs_Sell;
}
@@ -135,7 +135,7 @@ void EnMs_Talk(EnMs* this, PlayState* play) {
case 1: // no
default:
func_8019F230();
- func_80151938(play, 0x934); // "[...] Well, if your mood changes [...]"
+ Message_ContinueTextbox(play, 0x934); // "[...] Well, if your mood changes [...]"
break;
}
}
@@ -149,19 +149,19 @@ void EnMs_Talk(EnMs* this, PlayState* play) {
void EnMs_Sell(EnMs* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
this->actor.textId = 0;
- func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_AP_NONE);
+ func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_IA_NONE);
this->actionFunc = EnMs_TalkAfterPurchase;
} else {
- Actor_PickUp(&this->actor, play, GI_MAGIC_BEANS, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
+ Actor_OfferGetItem(&this->actor, play, GI_MAGIC_BEANS, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
}
}
void EnMs_TalkAfterPurchase(EnMs* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- func_80151938(play, 0x936); // "You can plant 'em whenever you want [...]"
+ Message_ContinueTextbox(play, 0x936); // "You can plant 'em whenever you want [...]"
this->actionFunc = EnMs_Talk;
} else {
- func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_IA_MINUS1);
}
}
diff --git a/src/overlays/actors/ovl_En_Ms/z_en_ms.h b/src/overlays/actors/ovl_En_Ms/z_en_ms.h
index dcff0cb58..aa46b820d 100644
--- a/src/overlays/actors/ovl_En_Ms/z_en_ms.h
+++ b/src/overlays/actors/ovl_En_Ms/z_en_ms.h
@@ -16,6 +16,4 @@ typedef struct EnMs {
/* 0x1F8 */ ColliderCylinder collider;
} EnMs; // size = 0x244
-extern const ActorInit En_Ms_InitVars;
-
#endif // Z_EN_MS_H
diff --git a/src/overlays/actors/ovl_En_Mt_tag/overlay.cfg b/src/overlays/actors/ovl_En_Mt_tag/overlay.cfg
deleted file mode 100644
index dcf4dadff..000000000
--- a/src/overlays/actors/ovl_En_Mt_tag/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Mt_tag
-z_en_mt_tag.c
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 ed67013d8..c94a94b12 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
@@ -28,7 +28,7 @@ typedef enum {
GORON_RACE_CHEAT_TRYING_TO_REACH_GOAL_FROM_BEHIND,
} PlayerCheatStatus;
-const ActorInit En_Mt_tag_InitVars = {
+ActorInit En_Mt_tag_InitVars = {
ACTOR_EN_MT_TAG,
ACTORCAT_BG,
FLAGS,
@@ -77,7 +77,7 @@ s32 EnMttag_IsInFinishLine(Vec3f* pos) {
* and, if so, what kind of cheating the player is performing.
*/
s32 EnMttag_CheckPlayerCheatStatus(Vec3f* pos) {
- if (!(gSaveContext.eventInf[1] & 1)) {
+ if (!CHECK_EVENTINF(EVENTINF_10)) {
if (Math3D_XZBoundCheck(-466.0f, -386.0f, -687.0f, 193.0f, pos->x, pos->z)) {
// The race hasn't started yet, but the player is beyond the starting line.
return GORON_RACE_CHEAT_FALSE_START;
@@ -220,7 +220,8 @@ s32 EnMttag_UpdateCheckpoints(EnMttag* this, PlayState* play) {
}
if ((currentCheckpoints[0] > 0) && (currentCheckpoints[0] < highestCurrentCheckpoint) &&
- (player->actor.bgCheckFlags & 1) && ((highestCurrentCheckpoint - currentCheckpoints[0]) >= 24)) {
+ (player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) &&
+ ((highestCurrentCheckpoint - currentCheckpoints[0]) >= 24)) {
playerIsLikelyToLose = true;
}
@@ -234,7 +235,7 @@ s32 EnMttag_UpdateCheckpoints(EnMttag* this, PlayState* play) {
s32 EnMttag_ExitRace(PlayState* play, s32 transitionType, s32 nextTransitionType) {
CUR_FORM_EQUIP(EQUIP_SLOT_B) = ITEM_SWORD_KOKIRI;
play->nextEntrance = ENTRANCE(GORON_RACETRACK, 2);
- if (gSaveContext.save.weekEventReg[33] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) {
// Spring
gSaveContext.nextCutsceneIndex = 0xFFF0;
} else {
@@ -245,7 +246,7 @@ s32 EnMttag_ExitRace(PlayState* play, s32 transitionType, s32 nextTransitionType
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = transitionType;
gSaveContext.nextTransitionType = nextTransitionType;
- func_801477B4(play);
+ Message_CloseTextbox(play);
return 1;
}
@@ -255,8 +256,8 @@ s32 EnMttag_ExitRace(PlayState* play, s32 transitionType, s32 nextTransitionType
void EnMttag_ShowFalseStartMessage(EnMttag* this, PlayState* play) {
gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_OFF;
Message_StartTextbox(play, 0xE95, NULL); // An entrant made a false start
- func_800B7298(play, &this->actor, 7);
- Audio_QueueSeqCmd(0x101400FF);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT);
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 20);
this->actionFunc = EnMttag_PotentiallyRestartRace;
}
@@ -266,7 +267,7 @@ void EnMttag_ShowFalseStartMessage(EnMttag* this, PlayState* play) {
*/
void EnMttag_ShowCantWinMessage(EnMttag* this, PlayState* play) {
Message_StartTextbox(play, 0xE97, NULL); // You can't win now...
- func_800B7298(play, &this->actor, 7);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT);
this->actionFunc = EnMttag_HandleCantWinChoice;
}
@@ -274,11 +275,11 @@ void EnMttag_ShowCantWinMessage(EnMttag* this, PlayState* play) {
* Shows the cutscene that pans over the race track and shows all five race entrants.
*/
void EnMttag_ShowIntroCutscene(EnMttag* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
this->actionFunc = EnMttag_WaitForIntroCutsceneToEnd;
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
@@ -287,8 +288,8 @@ void EnMttag_ShowIntroCutscene(EnMttag* this, PlayState* play) {
* from showing again and starts the race.
*/
void EnMttag_WaitForIntroCutsceneToEnd(EnMttag* this, PlayState* play) {
- if (ActorCutscene_GetCurrentIndex() != this->actor.cutscene) {
- gSaveContext.save.weekEventReg[12] |= 2;
+ if (CutsceneManager_GetCurrentCsId() != this->actor.csId) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_12_02);
this->actionFunc = EnMttag_RaceStart;
}
}
@@ -311,17 +312,17 @@ void EnMttag_RaceStart(EnMttag* this, PlayState* play) {
}
EnMttag_ShowFalseStartMessage(this, play);
- gSaveContext.eventInf[1] |= 8;
+ SET_EVENTINF(EVENTINF_13);
} else {
if (DECR(this->timer) == 60) {
Interface_StartTimer(TIMER_ID_MINIGAME_2, 0);
- play->interfaceCtx.unk_280 = 1;
- Audio_QueueSeqCmd(NA_BGM_GORON_RACE | 0x8000);
+ play->interfaceCtx.minigameState = MINIGAME_STATE_COUNTDOWN_SETUP_3;
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_GORON_RACE | SEQ_FLAG_ASYNC);
play->envCtx.unk_E4 = 0xFE;
- player->stateFlags1 &= ~0x20;
- } else if ((this->timer < 60) && (play->interfaceCtx.unk_280 == 8)) {
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
+ } else if ((this->timer < 60) && (play->interfaceCtx.minigameState == MINIGAME_STATE_COUNTDOWN_GO)) {
this->timer = 0;
- gSaveContext.eventInf[1] |= 1;
+ SET_EVENTINF(EVENTINF_10);
this->actionFunc = EnMttag_Race;
}
}
@@ -361,16 +362,16 @@ void EnMttag_Race(EnMttag* this, PlayState* play) {
if (EnMttag_IsInFinishLine(playerPos)) {
gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6;
play_sound(NA_SE_SY_START_SHOT);
- Audio_QueueSeqCmd(NA_BGM_GORON_GOAL | 0x8000);
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_GORON_GOAL | SEQ_FLAG_ASYNC);
this->timer = 55;
- gSaveContext.eventInf[1] |= 2;
+ SET_EVENTINF(EVENTINF_11);
this->actionFunc = EnMttag_RaceFinish;
} else if (EnMttag_IsAnyRaceGoronOverFinishLine(this)) {
gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_6;
play_sound(NA_SE_SY_START_SHOT);
- Audio_QueueSeqCmd(NA_BGM_GORON_GOAL | 0x8000);
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_GORON_GOAL | SEQ_FLAG_ASYNC);
this->timer = 55;
- gSaveContext.eventInf[1] |= 4;
+ SET_EVENTINF(EVENTINF_12);
this->actionFunc = EnMttag_RaceFinish;
} else {
playerCheatStatus = EnMttag_CheckPlayerCheatStatus(playerPos);
@@ -382,10 +383,10 @@ void EnMttag_Race(EnMttag* this, PlayState* play) {
}
EnMttag_ShowFalseStartMessage(this, play);
- gSaveContext.eventInf[1] |= 8;
+ SET_EVENTINF(EVENTINF_13);
} else if ((EnMttag_UpdateCheckpoints(this, play)) && (this->timer == 0)) {
EnMttag_ShowCantWinMessage(this, play);
- gSaveContext.eventInf[1] |= 8;
+ SET_EVENTINF(EVENTINF_13);
}
}
}
@@ -396,15 +397,15 @@ void EnMttag_Race(EnMttag* this, PlayState* play) {
*/
void EnMttag_RaceFinish(EnMttag* this, PlayState* play) {
if (DECR(this->timer) == 0) {
- if ((gSaveContext.eventInf[1] & 2)) {
+ if (CHECK_EVENTINF(EVENTINF_11)) {
// Player won
- EnMttag_ExitRace(play, TRANS_TYPE_03, TRANS_TYPE_03);
+ EnMttag_ExitRace(play, TRANS_TYPE_FADE_WHITE, TRANS_TYPE_FADE_WHITE);
} else {
// A non-player Goron won
- EnMttag_ExitRace(play, TRANS_TYPE_02, TRANS_TYPE_02);
+ EnMttag_ExitRace(play, TRANS_TYPE_FADE_BLACK, TRANS_TYPE_FADE_BLACK);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -420,7 +421,7 @@ void EnMttag_PotentiallyRestartRace(EnMttag* this, PlayState* play) {
if (this->shouldRestartRace) {
play->nextEntrance = ENTRANCE(GORON_RACETRACK, 1);
- if (gSaveContext.save.weekEventReg[33] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) {
// Spring
gSaveContext.nextCutsceneIndex = 0xFFF0;
} else {
@@ -429,21 +430,21 @@ void EnMttag_PotentiallyRestartRace(EnMttag* this, PlayState* play) {
}
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_02;
- gSaveContext.nextTransitionType = TRANS_TYPE_02;
- func_801477B4(play);
- func_800B7298(play, &this->actor, 7);
+ play->transitionType = TRANS_TYPE_FADE_BLACK;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
+ Message_CloseTextbox(play);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT);
Magic_Add(play, MAGIC_FILL_TO_CAPACITY);
- gSaveContext.eventInf[1] &= (u8)~1;
- gSaveContext.eventInf[1] &= (u8)~2;
- gSaveContext.eventInf[1] &= (u8)~4;
- gSaveContext.eventInf[1] &= (u8)~8;
+ CLEAR_EVENTINF(EVENTINF_10);
+ CLEAR_EVENTINF(EVENTINF_11);
+ CLEAR_EVENTINF(EVENTINF_12);
+ CLEAR_EVENTINF(EVENTINF_13);
gSaveContext.eventInf[2] = ((gSaveContext.eventInf[2] & 0xF) + 1) | (gSaveContext.eventInf[2] & 0xF0);
} else {
- EnMttag_ExitRace(play, TRANS_TYPE_02, TRANS_TYPE_02);
+ EnMttag_ExitRace(play, TRANS_TYPE_FADE_BLACK, TRANS_TYPE_FADE_BLACK);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -457,19 +458,20 @@ void EnMttag_HandleCantWinChoice(EnMttag* this, PlayState* play) {
// Exit the race
func_8019F230();
gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_OFF;
- EnMttag_ExitRace(play, TRANS_TYPE_02, TRANS_TYPE_02);
- gSaveContext.eventInf[1] &= (u8)~8;
- gSaveContext.eventInf[1] |= 4;
- Actor_MarkForDeath(&this->actor);
- } else {
- // Keep racing
- func_8019F208();
- func_801477B4(play);
- func_800B7298(play, &this->actor, 6);
- gSaveContext.eventInf[1] &= (u8)~8;
- this->timer = 100;
- this->actionFunc = EnMttag_Race;
+ EnMttag_ExitRace(play, TRANS_TYPE_FADE_BLACK, TRANS_TYPE_FADE_BLACK);
+ CLEAR_EVENTINF(EVENTINF_13);
+ SET_EVENTINF(EVENTINF_12);
+ Actor_Kill(&this->actor);
+ return;
}
+
+ // Keep racing
+ func_8019F208();
+ Message_CloseTextbox(play);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_END);
+ CLEAR_EVENTINF(EVENTINF_13);
+ this->timer = 100;
+ this->actionFunc = EnMttag_Race;
}
}
@@ -479,16 +481,16 @@ void EnMttag_Init(Actor* thisx, PlayState* play) {
if (gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 1)) {
player = GET_PLAYER(play);
- player->stateFlags1 |= 0x20;
+ player->stateFlags1 |= PLAYER_STATE1_20;
this->raceInitialized = false;
this->timer = 100;
- gSaveContext.eventInf[1] &= (u8)~1;
- gSaveContext.eventInf[1] &= (u8)~2;
- gSaveContext.eventInf[1] &= (u8)~4;
- gSaveContext.eventInf[1] &= (u8)~8;
+ CLEAR_EVENTINF(EVENTINF_10);
+ CLEAR_EVENTINF(EVENTINF_11);
+ CLEAR_EVENTINF(EVENTINF_12);
+ CLEAR_EVENTINF(EVENTINF_13);
- if (!(gSaveContext.save.weekEventReg[12] & 2)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_02)) {
this->actionFunc = EnMttag_ShowIntroCutscene;
} else {
s32 requiredScopeTemp;
@@ -496,7 +498,7 @@ void EnMttag_Init(Actor* thisx, PlayState* play) {
this->actionFunc = EnMttag_RaceStart;
}
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
diff --git a/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.h b/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.h
index 34f86048c..19ebdb8d8 100644
--- a/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.h
+++ b/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.h
@@ -18,6 +18,4 @@ typedef struct EnMttag {
/* 0x164 */ s32 shouldRestartRace;
} EnMttag; // size = 0x168
-extern const ActorInit En_Mt_tag_InitVars;
-
#endif // Z_EN_MT_TAG_H
diff --git a/src/overlays/actors/ovl_En_Mushi2/overlay.cfg b/src/overlays/actors/ovl_En_Mushi2/overlay.cfg
deleted file mode 100644
index d8a7c2e85..000000000
--- a/src/overlays/actors/ovl_En_Mushi2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Mushi2
-z_en_mushi2.c
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 4e6c471af..4bf4db0e0 100644
--- a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c
+++ b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c
@@ -32,7 +32,7 @@ void func_80A6AE7C(EnMushi2* this, PlayState* play);
void func_80A6B078(EnMushi2* this);
void func_80A6B0D8(EnMushi2* this, PlayState* play);
-const ActorInit En_Mushi2_InitVars = {
+ActorInit En_Mushi2_InitVars = {
ACTOR_EN_MUSHI2,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -178,7 +178,7 @@ void func_80A68A78(EnMushi2* this, PlayState* play) {
Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_MUSHI2, 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 + (D_80A6B998 + i)->unk_02, this->actor.shape.rot.z,
- (D_80A6B998 + i)->unk_00, this->actor.cutscene, this->actor.unk20, NULL);
+ (D_80A6B998 + i)->unk_00, this->actor.csId, this->actor.halfDaysBits, NULL);
}
}
@@ -204,7 +204,7 @@ void func_80A68BC8(EnMushi2* this) {
if (this->unk_36C > 0) {
this->unk_36C--;
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_MUSI_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_MUSI_WALK);
this->unk_36C = 3.0f / CLAMP_MIN(this->skelAnime.playSpeed, 0.12f);
if (this->unk_36C < 2) {
@@ -275,9 +275,9 @@ s32 func_80A68DD4(EnMushi2* this, PlayState* play) {
}
void func_80A68ED8(EnMushi2* this) {
- this->actor.velocity.x = this->actor.speedXZ * this->unk_328.x;
- this->actor.velocity.y = this->actor.speedXZ * this->unk_328.y;
- this->actor.velocity.z = this->actor.speedXZ * this->unk_328.z;
+ this->actor.velocity.x = this->actor.speed * this->unk_328.x;
+ this->actor.velocity.y = this->actor.speed * this->unk_328.y;
+ this->actor.velocity.z = this->actor.speed * this->unk_328.z;
Actor_UpdatePos(&this->actor);
}
@@ -439,7 +439,8 @@ void func_80A69388(EnMushi2* this) {
}
void func_80A69424(EnMushi2* this, PlayState* play) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 8.0f, 9.0f, 0.0f, 0x45);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 8.0f, 9.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40);
}
s32 func_80A69468(EnMushi2* this, PlayState* play) {
@@ -658,7 +659,7 @@ void func_80A69D3C(EnMushi2* this) {
sp38 = Math3D_XZLengthSquared(sp40, sp3C);
if (fabsf(sp38) > 0.010000001f) {
- s16 temp_v0 = Math_FAtan2F(sp3C, sp40);
+ s16 temp_v0 = Math_Atan2S_XY(sp3C, sp40);
temp_v0 = CLAMP(temp_v0, -3000, 3000);
func_80A68F9C(this, temp_v0);
}
@@ -797,7 +798,7 @@ void func_80A6A36C(EnMushi2* this, PlayState* play) {
s32 pad;
s32 sp20 = false;
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.2f);
+ Math_StepToF(&this->actor.speed, 0.0f, 0.2f);
this->actor.velocity.y -= this->actor.velocity.y * D_80A6BA14[ENMUSHI2_GET_3(&this->actor)];
Actor_MoveWithGravity(&this->actor);
func_80A69424(this, play);
@@ -816,11 +817,14 @@ void func_80A6A36C(EnMushi2* this, PlayState* play) {
}
if (sp20 && (this->unk_36A <= 0)) {
- Actor_MarkForDeath(&this->actor);
- } else if (this->actor.bgCheckFlags & 0x20) {
+ Actor_Kill(&this->actor);
+ return;
+ }
+
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER) {
func_80A6AAA4(this);
- } else if (this->actor.bgCheckFlags & 1) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GERUDOFT_WALK);
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GERUDOFT_WALK);
func_80A68F24(this);
func_80A691EC(this, this->actor.floorPoly, -1.0f);
func_80A69388(this);
@@ -850,11 +854,11 @@ void func_80A6A5C0(EnMushi2* this, PlayState* play) {
EnMushi2* this2 = this;
func_80A69D3C(this);
- Math_SmoothStepToF(&this->actor.speedXZ, this->unk_35C, 0.1f, 0.5f, 0.0f);
+ Math_SmoothStepToF(&this->actor.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.speedXZ *= temp;
+ this->actor.speed *= temp;
}
func_80A68ED8(this);
@@ -863,7 +867,7 @@ void func_80A6A5C0(EnMushi2* this, PlayState* play) {
func_80A69388(this);
}
- this->skelAnime.playSpeed = this->actor.speedXZ * 1.6f;
+ this->skelAnime.playSpeed = this->actor.speed * 1.6f;
this2->skelAnime.playSpeed = CLAMP(this2->skelAnime.playSpeed, 0.1f, 1.9f);
if ((this->unk_36A <= 0) || func_80A68BA0(this)) {
@@ -893,7 +897,7 @@ void func_80A6A794(EnMushi2* this) {
void func_80A6A824(EnMushi2* this, PlayState* play) {
EnMushi2* this2 = this;
- Math_SmoothStepToF(&this->actor.speedXZ, this->unk_35C, 0.1f, 0.5f, 0.0f);
+ Math_SmoothStepToF(&this->actor.speed, this->unk_35C, 0.1f, 0.5f, 0.0f);
func_80A68ED8(this);
func_80A697C4(this, play);
@@ -901,7 +905,7 @@ void func_80A6A824(EnMushi2* this, PlayState* play) {
func_80A69388(this);
}
- this->skelAnime.playSpeed = (Rand_ZeroOne() * 0.8f) + (this->actor.speedXZ * 1.2f);
+ this->skelAnime.playSpeed = (Rand_ZeroOne() * 0.8f) + (this->actor.speed * 1.2f);
this2->skelAnime.playSpeed = CLAMP(this2->skelAnime.playSpeed, 0.0f, 1.9f);
if ((this->unk_36A <= 0) || func_80A68BA0(this)) {
@@ -960,9 +964,9 @@ void func_80A6AB08(EnMushi2* this, PlayState* play) {
s16 temp;
if (this->unk_368 > 80) {
- Math_StepToF(&this->actor.speedXZ, 0.6f, 0.08f);
+ Math_StepToF(&this->actor.speed, 0.6f, 0.08f);
} else {
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.02f);
+ Math_StepToF(&this->actor.speed, 0.0f, 0.02f);
}
Actor_MoveWithGravity(&this->actor);
@@ -1002,7 +1006,7 @@ void func_80A6AB08(EnMushi2* this, PlayState* play) {
func_80A6A094(this);
func_80A6A0D8(this);
func_80A6AE14(this);
- } else if (!(this->actor.bgCheckFlags & 0x20)) {
+ } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_WATER)) {
func_80A6A794(this);
}
}
@@ -1022,8 +1026,8 @@ void func_80A6AE7C(EnMushi2* this, PlayState* play) {
this->actor.shape.rot.x -= 0x1F4;
this->actor.shape.rot.y += 0xC8;
- this->actor.speedXZ += (Rand_ZeroOne() - 0.5f) * 0.16f;
- this->actor.speedXZ *= 0.9f;
+ this->actor.speed += (Rand_ZeroOne() - 0.5f) * 0.16f;
+ this->actor.speed *= 0.9f;
this->actor.world.rot.y += (s16)((Rand_ZeroOne() - 0.5f) * 2000.0f);
this->actor.gravity = -0.04f - (Rand_ZeroOne() * 0.02f);
this->actor.velocity.y *= 0.95f;
@@ -1038,7 +1042,7 @@ void func_80A6AE7C(EnMushi2* this, PlayState* play) {
}
if (this->unk_368 <= 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -1046,7 +1050,7 @@ void func_80A6B078(EnMushi2* this) {
this->unk_30C &= ~1;
this->unk_368 = 50;
this->skelAnime.playSpeed = 1.9f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALTURA_BOUND);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALTURA_BOUND);
func_80A68B6C(this);
this->actionFunc = func_80A6B0D8;
}
@@ -1055,7 +1059,7 @@ void func_80A6B0D8(EnMushi2* this, PlayState* play) {
s32 pad[2];
f32 temp_f2;
- Math_SmoothStepToF(&this->actor.speedXZ, 0.0f, 0.4f, 1.2f, 0.0f);
+ Math_SmoothStepToF(&this->actor.speed, 0.0f, 0.4f, 1.2f, 0.0f);
temp_f2 = this->actor.scale.x - 0.0002f;
Actor_SetScale(&this->actor, CLAMP_MIN(temp_f2, 0.001f));
@@ -1074,19 +1078,20 @@ void func_80A6B0D8(EnMushi2* this, PlayState* play) {
}
this->actor.velocity.x =
- (this->actor.speedXZ * this->unk_328.x) + (-0.01f * this->unk_31C.x) + (this->unk_310.x * temp_f2);
+ (this->actor.speed * this->unk_328.x) + (-0.01f * this->unk_31C.x) + (this->unk_310.x * temp_f2);
this->actor.velocity.y =
- (this->actor.speedXZ * this->unk_328.y) + (-0.01f * this->unk_31C.y) + (this->unk_310.y * temp_f2);
+ (this->actor.speed * this->unk_328.y) + (-0.01f * this->unk_31C.y) + (this->unk_310.y * temp_f2);
this->actor.velocity.z =
- (this->actor.speedXZ * this->unk_328.z) + (-0.01f * this->unk_31C.z) + (this->unk_310.z * temp_f2);
+ (this->actor.speed * this->unk_328.z) + (-0.01f * this->unk_31C.z) + (this->unk_310.z * temp_f2);
if ((this->actor.flags & ACTOR_FLAG_40) && (this->unk_368 > 20) && (Rand_ZeroOne() < 0.15f)) {
Vec3f sp48;
s32 sp44 = 0;
if (this->poly != NULL) {
- u32 temp_v0 = func_800C99D4(&play->colCtx, this->poly, this->polyBgId);
- if ((temp_v0 == 5) || (temp_v0 == 14) || (temp_v0 == 15)) {
+ FloorType floorType = SurfaceType_GetFloorType(&play->colCtx, this->poly, this->polyBgId);
+
+ if ((floorType == FLOOR_TYPE_5) || (floorType == FLOOR_TYPE_14) || (floorType == FLOOR_TYPE_15)) {
sp44 = 1;
}
}
@@ -1105,7 +1110,7 @@ void func_80A6B0D8(EnMushi2* this, PlayState* play) {
func_80A6A094(this);
func_80A6A0D8(this);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -1123,7 +1128,7 @@ void EnMushi2_Update(Actor* thisx, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
func_80A6A094(this);
func_80A6A0D8(this);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -1156,7 +1161,7 @@ void EnMushi2_Update(Actor* thisx, PlayState* play) {
if ((temp != BGCHECK_SCENE) &&
((this->actionFunc == func_80A6A5C0) || (this->actionFunc == func_80A6A824) ||
(this->actionFunc == func_80A6A9E4) || (this->actionFunc == func_80A6B0D8)) &&
- BgCheck2_UpdateActorAttachedToMesh(&play->colCtx, temp, &this->actor)) {
+ DynaPolyActor_TransformCarriedActor(&play->colCtx, temp, &this->actor)) {
func_80A68F24(this);
}
@@ -1222,7 +1227,7 @@ void EnMushi2_Update(Actor* thisx, PlayState* play) {
}
if ((this->unk_30C & 1) && func_80A68DD4(this, play)) {
- Actor_PickUp(&this->actor, play, GI_MAX, 60.0f, 30.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MAX, 60.0f, 30.0f);
}
}
}
diff --git a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.h b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.h
index 159116928..1a776a52a 100644
--- a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.h
+++ b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.h
@@ -45,6 +45,4 @@ typedef struct EnMushi2 {
/* 0x370 */ s16 unk_370;
} EnMushi2; // size = 0x374
-extern const ActorInit En_Mushi2_InitVars;
-
#endif // Z_EN_MUSHI2_H
diff --git a/src/overlays/actors/ovl_En_Muto/overlay.cfg b/src/overlays/actors/ovl_En_Muto/overlay.cfg
deleted file mode 100644
index 3fd3e42b5..000000000
--- a/src/overlays/actors/ovl_En_Muto/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Muto
-z_en_muto.c
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 8a657ad2a..7c9d1e9b2 100644
--- a/src/overlays/actors/ovl_En_Muto/z_en_muto.c
+++ b/src/overlays/actors/ovl_En_Muto/z_en_muto.c
@@ -24,7 +24,7 @@ void EnMuto_SetupDialogue(EnMuto* this, PlayState* play);
void EnMuto_InDialogue(EnMuto* this, PlayState* play);
s32 EnMuto_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx);
-const ActorInit En_Muto_InitVars = {
+ActorInit En_Muto_InitVars = {
ACTOR_EN_MUTO,
ACTORCAT_NPC,
FLAGS,
@@ -70,20 +70,20 @@ void EnMuto_Init(Actor* thisx, PlayState* play) {
if (!this->isInMayorsRoom) {
this->shouldSetHeadRotation = true;
this->textIdIndex = 2;
- if (gSaveContext.save.weekEventReg[60] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_60_80)) {
this->textIdIndex = 3;
}
if (gSaveContext.save.day != 3 || !gSaveContext.save.isNight) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else {
this->collider.dim.radius = 30;
this->collider.dim.height = 60;
this->collider.dim.yShift = 0;
- if (gSaveContext.save.weekEventReg[63] & 0x80 || (gSaveContext.save.day == 3 && gSaveContext.save.isNight)) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_80) || ((gSaveContext.save.day == 3) && gSaveContext.save.isNight)) {
+ Actor_Kill(&this->actor);
}
}
@@ -136,7 +136,7 @@ void EnMuto_Idle(EnMuto* this, PlayState* play) {
if (!this->isInMayorsRoom) {
player = GET_PLAYER(play);
if (player->transformation == PLAYER_FORM_DEKU) {
- if (!(gSaveContext.save.weekEventReg[88] & 8)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_88_08)) {
this->actor.textId = 0x62C;
} else {
this->actor.textId = 0x62B;
@@ -164,7 +164,7 @@ void EnMuto_Idle(EnMuto* this, PlayState* play) {
}
} else {
this->textIdIndex = 0;
- if (gSaveContext.save.weekEventReg[60] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_60_08)) {
this->textIdIndex = 1;
}
if (Player_GetMask(play) == PLAYER_MASK_COUPLE) {
@@ -199,13 +199,13 @@ void EnMuto_InDialogue(EnMuto* this, PlayState* play) {
if (!this->isInMayorsRoom) {
this->yawTowardsTarget = this->actor.yawTowardsPlayer;
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
if (this->actor.textId == 0x62C) {
- gSaveContext.save.weekEventReg[88] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_88_08);
}
if (this->actor.textId == 0x624) {
- gSaveContext.save.weekEventReg[60] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_60_80);
}
this->textIdIndex = 3;
@@ -255,7 +255,7 @@ void EnMuto_Update(Actor* thisx, PlayState* play2) {
}
if (this->isInMayorsRoom && gSaveContext.save.day == 3 && gSaveContext.save.isNight) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -272,7 +272,9 @@ void EnMuto_Update(Actor* thisx, PlayState* play2) {
Math_SmoothStepToS(&this->headRot.x, this->headRotTarget.x, 1, 0x3E8, 0);
Math_SmoothStepToS(&this->waistRot.y, this->waistRotTarget.y, 1, 0xBB8, 0);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
this->actor.uncullZoneForward = 500.0f;
diff --git a/src/overlays/actors/ovl_En_Muto/z_en_muto.h b/src/overlays/actors/ovl_En_Muto/z_en_muto.h
index e05e29492..6ac984c8d 100644
--- a/src/overlays/actors/ovl_En_Muto/z_en_muto.h
+++ b/src/overlays/actors/ovl_En_Muto/z_en_muto.h
@@ -30,6 +30,4 @@ typedef struct EnMuto {
/* 0x294 */ ColliderCylinder collider;
} EnMuto; // size = 0x2E0
-extern const ActorInit En_Muto_InitVars;
-
#endif // Z_EN_MUTO_H
diff --git a/src/overlays/actors/ovl_En_Nb/overlay.cfg b/src/overlays/actors/ovl_En_Nb/overlay.cfg
deleted file mode 100644
index 27d485b84..000000000
--- a/src/overlays/actors/ovl_En_Nb/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Nb
-z_en_nb.c
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 9e27fe605..c5a8b2498 100644
--- a/src/overlays/actors/ovl_En_Nb/z_en_nb.c
+++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.c
@@ -5,6 +5,7 @@
*/
#include "z_en_nb.h"
+#include "objects/object_nb/object_nb.h"
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20)
@@ -15,11 +16,101 @@ void EnNb_Destroy(Actor* thisx, PlayState* play);
void EnNb_Update(Actor* thisx, PlayState* play);
void EnNb_Draw(Actor* thisx, PlayState* play);
-void func_80BC0D84(EnNb* this, PlayState* play);
+void EnNb_FollowSchedule(EnNb* this, PlayState* play);
void func_80BC0EAC(EnNb* this, PlayState* play);
-#if 0
-const ActorInit En_Nb_InitVars = {
+void func_80BC08E0(EnNb* this, PlayState* play);
+void func_80BC0978(EnNb* this, PlayState* play);
+
+s32 func_80BC00AC(Actor* thisx, PlayState* play);
+s32 func_80BC01DC(Actor* thisx, PlayState* play);
+
+#define EN_NB_FLAG_NONE (0)
+#define EN_NB_FLAG_1 (1 << 0)
+#define EN_NB_FLAG_2 (1 << 1)
+#define EN_NB_FLAG_4 (1 << 2)
+#define EN_NB_FLAG_8 (1 << 3)
+#define EN_NB_FLAG_10 (1 << 4)
+#define EN_NB_FLAG_20 (1 << 5)
+#define EN_NB_FLAG_40 (1 << 6)
+#define EN_NB_FLAG_80 (1 << 7)
+#define EN_NB_FLAG_100 (1 << 8)
+#define EN_NB_FLAG_200 (1 << 9)
+#define EN_NB_FLAG_400 (1 << 10)
+
+typedef enum EnNbScheduleResult {
+ /* 0 */ EN_NB_SCH_NONE,
+ /* 1 */ EN_NB_SCH_1,
+ /* 2 */ EN_NB_SCH_2,
+ /* 3 */ EN_NB_SCH_3,
+ /* 4 */ EN_NB_SCH_4,
+} EnNbScheduleResult;
+
+static u8 sScheduleScript[] = {
+ /* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(3, 0x21 - 0x04),
+ /* 0x04 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_YADOYA, 0x12 - 0x08),
+ /* 0x08 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(6, 0, 18, 0, 0x0F - 0x0E),
+ /* 0x0E */ SCHEDULE_CMD_RET_NONE(),
+ /* 0x0F */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_3),
+ /* 0x12 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_OMOYA, 0x20 - 0x16),
+ /* 0x16 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(18, 0, 6, 0, 0x1D - 0x1C),
+ /* 0x1C */ SCHEDULE_CMD_RET_NONE(),
+ /* 0x1D */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_4),
+ /* 0x20 */ SCHEDULE_CMD_RET_NONE(),
+ /* 0x21 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_YADOYA, 0x72 - 0x25),
+ /* 0x25 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(1, 0x47 - 0x29),
+ /* 0x29 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(8, 0, 12, 0, 0x44 - 0x2F),
+ /* 0x2F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(12, 0, 12, 15, 0x41 - 0x35),
+ /* 0x35 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(12, 15, 18, 0, 0x3E - 0x3B),
+ /* 0x3B */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_3),
+ /* 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),
+ /* 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),
+ /* 0x57 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(8, 0, 12, 0, 0x70 - 0x5D),
+ /* 0x5D */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(12, 0, 12, 15, 0x6E - 0x63),
+ /* 0x63 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(12, 15, 18, 0, 0x6C - 0x69),
+ /* 0x69 */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_3),
+ /* 0x6C */ SCHEDULE_CMD_RET_VAL_S(EN_NB_SCH_1),
+ /* 0x6E */ SCHEDULE_CMD_RET_VAL_S(EN_NB_SCH_2),
+ /* 0x70 */ SCHEDULE_CMD_RET_VAL_S(EN_NB_SCH_1),
+ /* 0x72 */ SCHEDULE_CMD_RET_NONE(),
+};
+
+u8 D_80BC1464[] = {
+ 0x1B, 0x04, 0x08, 0x00, 0x6A, 0x0A, 0x00, 0x10, 0x00, 0x08, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x0E,
+ 0x29, 0x12, 0x2D, 0x00, 0x0E, 0x0C, 0x10, 0x0E, 0x29, 0x01, 0x2D, 0x00, 0x0E, 0x0C, 0x10, 0x0E, 0x29, 0x02, 0x0C,
+ 0x0F, 0x29, 0x03, 0x0C, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x22, 0x31, 0x2D, 0x00, 0x0E, 0x12, 0x10, 0x30, 0x1C,
+ 0x04, 0x04, 0x0E, 0x29, 0x04, 0x0C, 0x20, 0x00, 0x03, 0x00, 0x04, 0x15, 0x09, 0x00, 0xC4, 0x09, 0x00, 0x00, 0x0F,
+ 0x29, 0x05, 0x0C, 0x15, 0x09, 0x00, 0xB9, 0x30, 0x1D, 0x04, 0x04, 0x0E, 0x29, 0x0B, 0x0C, 0x20, 0x00, 0x03, 0x00,
+ 0x04, 0x15, 0x09, 0x00, 0xA8, 0x09, 0x00, 0x00, 0x0F, 0x29, 0x0C, 0x0C, 0x15, 0x09, 0x00, 0x9D, 0x20, 0x00, 0x03,
+ 0x00, 0x17, 0x1B, 0x04, 0x04, 0x00, 0x09, 0x0E, 0x29, 0x11, 0x2D, 0x00, 0x0E, 0x0C, 0x16, 0x10, 0x0E, 0x29, 0x0A,
+ 0x2D, 0x00, 0x0E, 0x0C, 0x16, 0x10, 0x1B, 0x04, 0x04, 0x00, 0x3B, 0x0E, 0x29, 0x0D, 0x0C, 0x05, 0x00, 0x00, 0x00,
+ 0x0A, 0x00, 0x00, 0x0E, 0x29, 0x10, 0x2D, 0x00, 0x0E, 0x0C, 0x12, 0x16, 0x10, 0x0E, 0x29, 0x0E, 0x00, 0x32, 0x04,
+ 0x00, 0x59, 0x0C, 0x0F, 0x29, 0x0F, 0x0C, 0x12, 0x06, 0x00, 0x0C, 0x00, 0x00, 0x13, 0x00, 0x0C, 0x2F, 0x00, 0x00,
+ 0x2E, 0x2D, 0x00, 0x2A, 0x2D, 0x00, 0x0E, 0x11, 0x32, 0x04, 0x0C, 0x16, 0x10, 0x0E, 0x29, 0x06, 0x0C, 0x05, 0x00,
+ 0x0A, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x29, 0x07, 0x2D, 0x00, 0x0E, 0x0C, 0x12, 0x16, 0x10, 0x0E, 0x29, 0x08, 0x00,
+ 0x32, 0x02, 0x00, 0x1E, 0x0C, 0x0F, 0x29, 0x09, 0x0C, 0x12, 0x06, 0x00, 0x0C, 0x00, 0x00, 0x13, 0x00, 0x0C, 0x2F,
+ 0x00, 0x00, 0x2E, 0x2D, 0x00, 0x29, 0x2D, 0x00, 0x0E, 0x11, 0x32, 0x02, 0x0C, 0x16, 0x10, 0x2D, 0x00, 0x0E, 0x0C,
+ 0x12, 0x16, 0x10, 0x00, 0x00, 0x00,
+};
+
+u8 D_80BC1574[] = {
+ 0x09, 0x00, 0x00, 0x0E, 0x28, 0xC7, 0x0C, 0x09, 0x00, 0x00, 0x17, 0x0E, 0x28, 0xC8, 0x0C, 0x09, 0x00,
+ 0x00, 0x18, 0x0E, 0x28, 0xC9, 0x0C, 0x09, 0x00, 0x00, 0x17, 0x0E, 0x28, 0xCA, 0x0C, 0x09, 0x00, 0x00,
+ 0x18, 0x0E, 0x28, 0xCB, 0x0C, 0x09, 0x00, 0x00, 0x17, 0x0E, 0x28, 0xCC, 0x0C, 0x09, 0x00, 0x00, 0x18,
+ 0x0E, 0x28, 0xCD, 0x0C, 0x09, 0x00, 0x00, 0x17, 0x0E, 0x28, 0xCE, 0x0C, 0x09, 0x00, 0x00, 0x18, 0x0E,
+ 0x28, 0xCF, 0x2D, 0x00, 0x01, 0x2D, 0x00, 0x0E, 0x0C, 0x09, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+};
+
+u8 D_80BC15C8[] = {
+ 0x0E, 0x23, 0x62, 0x2D, 0x00, 0x0E, 0x0C, 0x10,
+};
+
+ActorInit En_Nb_InitVars = {
ACTOR_EN_NB,
ACTORCAT_NPC,
FLAGS,
@@ -31,81 +122,676 @@ const ActorInit En_Nb_InitVars = {
(ActorFunc)EnNb_Draw,
};
-// static ColliderCylinderInit sCylinderInit = {
-static ColliderCylinderInit D_80BC15F0 = {
- { COLTYPE_HIT1, AT_NONE, AC_NONE, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, },
- { ELEMTYPE_UNK1, { 0x00000000, 0x00, 0x00 }, { 0x00000000, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_NONE, OCELEM_ON, },
+static ColliderCylinderInit sCylinderInit = {
+ {
+ COLTYPE_HIT1,
+ AT_NONE,
+ AC_NONE,
+ OC1_ON | OC1_TYPE_ALL,
+ OC2_TYPE_1,
+ COLSHAPE_CYLINDER,
+ },
+ {
+ ELEMTYPE_UNK1,
+ { 0x00000000, 0x00, 0x00 },
+ { 0x00000000, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_NONE,
+ OCELEM_ON,
+ },
{ 10, 68, 0, { 0, 0, 0 } },
};
-// sColChkInfoInit
-static CollisionCheckInfoInit2 D_80BC161C = { 0, 0, 0, 0, MASS_IMMOVABLE };
+static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE };
-#endif
+static AnimationInfoS sAnimationInfo[] = {
+ { &gNbIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // EN_NB_ANIM_0
+ { &gNbIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // EN_NB_ANIM_1
+ { &gNbTalkAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // EN_NB_ANIM_TALK_ONCE
+ { &gNbTalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // EN_NB_ANIM_TALK_LOOP
+ { &gNbAngryAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // EN_NB_ANIM_ANGRY
+ { &gNbRelievedAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // EN_NB_ANIM_RELIEVED
+};
-extern ColliderCylinderInit D_80BC15F0;
-extern CollisionCheckInfoInit2 D_80BC161C;
+Actor* EnNb_FindActor(EnNb* this, PlayState* play, u8 actorCategory, s16 actorId) {
+ Actor* thisx;
+ Actor* actor = NULL;
-extern UNK_TYPE D_06008C40;
+ while (true) {
+ actor = SubS_FindActor(play, actor, actorCategory, actorId);
+ if (actor == NULL) {
+ break;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BBFDB0.s")
+ thisx = &this->actor;
+ if ((actor != thisx) && (actor->update != NULL)) {
+ break;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BBFE60.s")
+ if (actor->next == NULL) {
+ actor = NULL;
+ break;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BBFE8C.s")
+ actor = actor->next;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BBFF24.s")
+ return actor;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BBFF90.s")
+void EnNb_UpdateSkelAnime(EnNb* this) {
+ this->skelAnime.playSpeed = this->animPlaySpeed;
+ SkelAnime_Update(&this->skelAnime);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BBFFD4.s")
+s32 EnNb_ChangeAnim(EnNb* this, EnNbAnimation animIndex) {
+ s32 shouldChange = false;
+ s32 didAnimationChange = false;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BC0050.s")
+ if ((animIndex == EN_NB_ANIM_0) || (animIndex == EN_NB_ANIM_1)) {
+ if ((this->animIndex != EN_NB_ANIM_0) && (this->animIndex != EN_NB_ANIM_1)) {
+ shouldChange = true;
+ }
+ } else if (animIndex != this->animIndex) {
+ shouldChange = true;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BC00AC.s")
+ if (shouldChange) {
+ this->animIndex = animIndex;
+ didAnimationChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex);
+ this->animPlaySpeed = this->skelAnime.playSpeed;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BC01DC.s")
+ return didAnimationChange;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BC045C.s")
+void func_80BBFF24(EnNb* this, PlayState* play) {
+ f32 yDiff;
+ s32 pad;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BC04FC.s")
+ Collider_UpdateCylinder(&this->actor, &this->collider);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BC05A8.s")
+ yDiff = this->actor.focus.pos.y - this->actor.world.pos.y;
+ this->collider.dim.height = yDiff;
+ CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BC06C4.s")
+Actor* func_80BBFF90(EnNb* this, PlayState* play) {
+ Actor* actor;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BC0800.s")
+ if (this->scheduleResult == EN_NB_SCH_2) {
+ actor = EnNb_FindActor(this, play, ACTORCAT_NPC, ACTOR_EN_AN);
+ } else {
+ actor = &GET_PLAYER(play)->actor;
+ }
+ return actor;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BC08E0.s")
+s32 func_80BBFFD4(EnNb* this, s16 csId) {
+ s32 ret = false;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BC0978.s")
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(csId);
+ } else if (CutsceneManager_IsNext(csId)) {
+ CutsceneManager_StartWithPlayerCs(csId, &this->actor);
+ ret = true;
+ } else {
+ CutsceneManager_Queue(csId);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BC0A18.s")
+ return ret;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BC0B98.s")
+s16 func_80BC0050(EnNb* this, s32 numCutscenes) {
+ s16 csId = this->actor.csId;
+ s32 i;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BC0C0C.s")
+ for (i = 0; i < numCutscenes; i++) {
+ csId = CutsceneManager_GetAdditionalCsId(csId);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BC0C80.s")
+ return csId;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BC0D08.s")
+typedef enum EnNbBehaviour {
+ /* 0 */ ENNB_BEHAVIOUR_0,
+ /* 1 */ ENNB_BEHAVIOUR_1,
+ /* 2 */ ENNB_BEHAVIOUR_2,
+ /* 3 */ ENNB_BEHAVIOUR_3,
+ /* 4 */ ENNB_BEHAVIOUR_4,
+ /* 5 */ ENNB_BEHAVIOUR_5,
+ /* 6 */ ENNB_BEHAVIOUR_6,
+ /* 7 */ ENNB_BEHAVIOUR_7,
+ /* 8 */ ENNB_BEHAVIOUR_8,
+ /* 9 */ ENNB_BEHAVIOUR_9
+} EnNbBehaviour;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BC0D1C.s")
+s32 func_80BC00AC(Actor* thisx, PlayState* play) {
+ EnNb* this = THIS;
+ s16 csId = func_80BC0050(this, 0);
+ s32 ret = false;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BC0D84.s")
+ switch (this->behaviour) {
+ case ENNB_BEHAVIOUR_0:
+ if (!func_80BBFFD4(this, csId)) {
+ break;
+ }
+ // fallthrough
+ case ENNB_BEHAVIOUR_2:
+ case ENNB_BEHAVIOUR_4:
+ case ENNB_BEHAVIOUR_6:
+ case ENNB_BEHAVIOUR_8:
+ Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)), &this->actor);
+ this->behaviour++;
+ ret = true;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BC0EAC.s")
+ case ENNB_BEHAVIOUR_1:
+ case ENNB_BEHAVIOUR_3:
+ case ENNB_BEHAVIOUR_5:
+ case ENNB_BEHAVIOUR_7:
+ if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) {
+ Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)),
+ this->actor.child);
+ }
+ this->behaviour++;
+ ret = true;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/EnNb_Init.s")
+ case ENNB_BEHAVIOUR_9:
+ CutsceneManager_Stop(csId);
+ this->behaviour++;
+ ret = true;
+ break;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/EnNb_Destroy.s")
+ return ret;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/EnNb_Update.s")
+s32 func_80BC01DC(Actor* thisx, PlayState* play) {
+ EnNb* this = THIS;
+ s32 pad;
+ s32 ret = false;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BC1174.s")
+ switch (this->behaviour) {
+ case ENNB_BEHAVIOUR_0:
+ if (Player_GetMask(play) == PLAYER_MASK_ALL_NIGHT) {
+ this->behaviour = ENNB_BEHAVIOUR_1;
+ } else {
+ this->behaviour = ENNB_BEHAVIOUR_5;
+ }
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BC11B4.s")
+ case ENNB_BEHAVIOUR_1:
+ // Setup a black fill-screen, although initialize to 0 alpha
+ Play_FillScreen(&play->state, true, 0, 0, 0, 0);
+ this->storyTimer = 40;
+ this->behaviour = (u16)(this->behaviour + 1);
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BC1278.s")
+ case ENNB_BEHAVIOUR_2:
+ // Slowly increase alpha to fill the screen with a black rectangle
+ R_PLAY_FILL_SCREEN_ALPHA = (s16)(s32)(255.0f - (((f32)ABS_ALT(20 - this->storyTimer) / 20.0f) * 255.0f));
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/EnNb_Draw.s")
+ if (this->storyTimer == 20) {
+ if (CHECK_EVENTINF(EVENTINF_42)) {
+ // play->interfaceCtx.storyType = STORY_TYPE_MASK_FESTIVAL;
+ play->interfaceCtx.storyType = 0;
+ } else {
+ // play->interfaceCtx.storyType = STORY_TYPE_GIANTS_LEAVING;
+ play->interfaceCtx.storyType = 1;
+ }
+ // play->interfaceCtx.storyState = STORY_STATE_FADE_IN;
+ play->interfaceCtx.storyState = 6;
+ R_STORY_FILL_SCREEN_ALPHA = 255;
+ }
+
+ if (DECR(this->storyTimer) == 0) {
+ this->behaviour++;
+ }
+ break;
+
+ case ENNB_BEHAVIOUR_3:
+ // play->interfaceCtx.storyState = STORY_STATE_SETUP_IDLE;
+ play->interfaceCtx.storyState = 4;
+ this->behaviour++;
+ ret = true;
+ break;
+
+ case ENNB_BEHAVIOUR_4:
+ // play->interfaceCtx.storyState = STORY_STATE_FADE_OUT;
+ play->interfaceCtx.storyState = 5;
+ this->behaviour++;
+ // fallthrough
+ case ENNB_BEHAVIOUR_5:
+ if (!CHECK_EVENTINF(EVENTINF_42)) {
+ gSaveContext.save.time = CLOCK_TIME(8, 0);
+ Sram_IncrementDay();
+ } else {
+ func_800FE658(120.0f);
+ }
+
+ this->behaviour++;
+ play->nextEntrance = ENTRANCE(STOCK_POT_INN, 2);
+ gSaveContext.nextCutsceneIndex = 0;
+ play->transitionTrigger = TRANS_TRIGGER_START;
+ play->transitionType = TRANS_TYPE_FADE_BLACK;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK_SLOW;
+ SET_EVENTINF(EVENTINF_43);
+ break;
+ }
+
+ return ret;
+}
+
+u8* func_80BC045C(EnNb* this, PlayState* play) {
+ if (CHECK_EVENTINF(EVENTINF_43)) {
+ this->msgEventCallback = func_80BC01DC;
+ return D_80BC1464;
+ } else if (this->scheduleResult == EN_NB_SCH_2) {
+ this->msgEventCallback = func_80BC00AC;
+ return D_80BC1574;
+ } else if (Player_GetMask(play) == PLAYER_MASK_KAFEIS_MASK) {
+ return D_80BC15C8;
+ } else {
+ this->msgEventCallback = func_80BC01DC;
+ return D_80BC1464;
+ }
+}
+
+s32 func_80BC04FC(EnNb* this, PlayState* play) {
+ s32 ret = false;
+
+ if (this->stateFlags & (EN_NB_FLAG_1 | EN_NB_FLAG_2 | EN_NB_FLAG_4)) {
+ if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
+ this->stateFlags |= EN_NB_FLAG_20;
+ SubS_UpdateFlags(&this->stateFlags, EN_NB_FLAG_NONE, EN_NB_FLAG_1 | EN_NB_FLAG_2 | EN_NB_FLAG_4);
+ this->behaviour = ENNB_BEHAVIOUR_0;
+ this->msgEventCallback = NULL;
+ this->actor.child = this->unk_1E8;
+ this->msgEventScript = func_80BC045C(this, play);
+ this->stateFlags |= EN_NB_FLAG_20;
+ this->actionFunc = func_80BC0EAC;
+ ret = true;
+ }
+ }
+ return ret;
+}
+
+void func_80BC05A8(EnNb* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+ TextState talkState = Message_GetState(&play->msgCtx);
+ u16 textId = play->msgCtx.currentTextId;
+
+ if ((&this->actor == player->talkActor) && ((textId < 0xFF) || (textId > 0x200)) && (talkState == TEXT_STATE_3) &&
+ (this->prevTalkState == TEXT_STATE_3)) {
+ if ((play->state.frames % 3) == 0) {
+ if (this->unk_26C == 120.0f) {
+ this->unk_26C = 0.0f;
+ } else {
+ this->unk_26C = 120.0f;
+ }
+ }
+ } else {
+ this->unk_26C = 0.0f;
+ }
+
+ Math_SmoothStepToF(&this->unk_270, this->unk_26C, 0.8f, 40.0f, 10.0f);
+ Matrix_Translate(this->unk_270, 0.0f, 0.0f, MTXMODE_APPLY);
+ this->prevTalkState = talkState;
+}
+
+void func_80BC06C4(EnNb* this) {
+ s32 pad;
+ Vec3f sp40;
+ Vec3f sp34;
+ Player* player;
+
+ Math_Vec3f_Copy(&sp40, &this->unk_1E8->world.pos);
+ Math_Vec3f_Copy(&sp34, &this->actor.world.pos);
+ Math_ApproachS(&this->headRotY, Math_Vec3f_Yaw(&sp34, &sp40) - this->actor.shape.rot.y, 4, 0x2AA8);
+
+ this->headRotY = CLAMP(this->headRotY, -0x1FFE, 0x1FFE);
+
+ Math_Vec3f_Copy(&sp34, &this->actor.focus.pos);
+
+ if (this->unk_1E8->id == ACTOR_PLAYER) {
+ player = (Player*)this->unk_1E8;
+
+ sp40.y = player->bodyPartsPos[7].y + 3.0f;
+ } else {
+ Math_Vec3f_Copy(&sp40, &this->unk_1E8->focus.pos);
+ }
+
+ Math_ApproachS(&this->headRotZ, Math_Vec3f_Pitch(&sp34, &sp40), 4, 0x2AA8);
+
+ this->headRotZ = CLAMP(this->headRotZ, -0x1554, 0x1554);
+}
+
+void func_80BC0800(EnNb* this) {
+ if (this->stateFlags & EN_NB_FLAG_20) {
+ if ((this->unk_1E8 != NULL) && (this->unk_1E8->update != NULL)) {
+ if (DECR(this->unk_282) == 0) {
+ func_80BC06C4(this);
+ this->stateFlags &= ~EN_NB_FLAG_400;
+ this->stateFlags |= EN_NB_FLAG_100;
+ return;
+ }
+ }
+ }
+
+ if (this->stateFlags & EN_NB_FLAG_100) {
+ this->stateFlags &= ~EN_NB_FLAG_100;
+ this->headRotZ = 0;
+ this->headRotY = 0;
+ this->unk_282 = 20;
+ } else if (DECR(this->unk_282) == 0) {
+ this->stateFlags |= EN_NB_FLAG_400;
+ }
+}
+
+// Related to both stories?
+void func_80BC08E0(EnNb* this, PlayState* play) {
+ if (this->unk_284 == 0) {
+ EnNb_ChangeAnim(this, EN_NB_ANIM_TALK_ONCE);
+ this->stateFlags |= EN_NB_FLAG_400;
+ this->unk_284++;
+ } else if ((this->unk_284 == 1) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ EnNb_ChangeAnim(this, EN_NB_ANIM_1);
+ this->stateFlags &= ~EN_NB_FLAG_400;
+ this->unk_284++;
+ }
+}
+
+void func_80BC0978(EnNb* this, PlayState* play) {
+ if (this->unk_284 == 0) {
+ EnNb_ChangeAnim(this, EN_NB_ANIM_RELIEVED);
+ this->stateFlags &= ~EN_NB_FLAG_20;
+ this->stateFlags |= EN_NB_FLAG_400;
+ this->unk_284++;
+ } else if ((this->unk_284 == 1) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ EnNb_ChangeAnim(this, EN_NB_ANIM_TALK_LOOP);
+ this->stateFlags &= ~EN_NB_FLAG_400;
+ this->unk_284++;
+ }
+}
+
+s32 func_80BC0A18(EnNb* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+ u16 currentTextId = play->msgCtx.currentTextId;
+
+ if (player->stateFlags1 & PLAYER_STATE1_40) {
+ this->stateFlags |= EN_NB_FLAG_80;
+
+ if (this->textId != currentTextId) {
+ switch (currentTextId) {
+ case 0x28CF:
+ this->stateFlags |= EN_NB_FLAG_20;
+ EnNb_ChangeAnim(this, EN_NB_ANIM_TALK_LOOP);
+ break;
+
+ case 0x2904: // "You want to hear the carnival of time story? ..."
+ case 0x290B: // "You want to hear the four giants story? ..."
+ this->unk_18C = func_80BC08E0;
+ this->unk_284 = 0;
+ break;
+
+ case 0x28CD:
+ this->unk_18C = func_80BC0978;
+ this->unk_284 = 0;
+ break;
+
+ case 0x28CB: // "I told you I already ate!"
+ EnNb_ChangeAnim(this, EN_NB_ANIM_ANGRY);
+ break;
+
+ case 0x28C7:
+ case 0x2901:
+ case 0x2902:
+ case 0x2906:
+ case 0x290D:
+ case 0x2912:
+ EnNb_ChangeAnim(this, EN_NB_ANIM_TALK_LOOP);
+ break;
+ }
+ }
+
+ this->textId = currentTextId;
+ } else if (this->stateFlags & EN_NB_FLAG_80) {
+ this->unk_18C = NULL;
+ this->textId = 0;
+ this->stateFlags &= ~EN_NB_FLAG_80;
+ EnNb_ChangeAnim(this, EN_NB_ANIM_1);
+ }
+
+ if (this->unk_18C != NULL) {
+ this->unk_18C(this, play);
+ }
+
+ return 0;
+}
+
+s32 func_80BC0B98(EnNb* this, PlayState* play, ScheduleOutput* scheduleOutput) {
+ s32 success = false;
+
+ if (EnNb_FindActor(this, play, ACTORCAT_NPC, ACTOR_EN_AN) != NULL) {
+ SubS_UpdateFlags(&this->stateFlags, EN_NB_FLAG_1 | EN_NB_FLAG_2, EN_NB_FLAG_1 | EN_NB_FLAG_2 | EN_NB_FLAG_4);
+ this->stateFlags |= EN_NB_FLAG_20;
+ EnNb_ChangeAnim(this, EN_NB_ANIM_0);
+ success = true;
+ }
+
+ return success;
+}
+
+s32 func_80BC0C0C(EnNb* this, PlayState* play, ScheduleOutput* scheduleOutput) {
+ if (!CHECK_EVENTINF(EVENTINF_43)) {
+ SubS_UpdateFlags(&this->stateFlags, EN_NB_FLAG_1 | EN_NB_FLAG_2, EN_NB_FLAG_1 | EN_NB_FLAG_2 | EN_NB_FLAG_4);
+ } else {
+ SubS_UpdateFlags(&this->stateFlags, EN_NB_FLAG_4, EN_NB_FLAG_1 | EN_NB_FLAG_2 | EN_NB_FLAG_4);
+ }
+ EnNb_ChangeAnim(this, EN_NB_ANIM_0);
+
+ return true;
+}
+
+s32 EnNb_ProcessScheduleOutput(EnNb* this, PlayState* play, ScheduleOutput* scheduleOutput) {
+ s32 success;
+
+ this->actor.flags |= ACTOR_FLAG_1;
+ this->actor.targetMode = 0;
+ this->stateFlags = EN_NB_FLAG_NONE;
+ this->unk_274 = 40.0f;
+
+ switch (scheduleOutput->result) {
+ default:
+ success = false;
+ break;
+
+ case EN_NB_SCH_1:
+ case EN_NB_SCH_3:
+ case EN_NB_SCH_4:
+ success = func_80BC0C0C(this, play, scheduleOutput);
+ break;
+
+ case EN_NB_SCH_2:
+ success = func_80BC0B98(this, play, scheduleOutput);
+ break;
+ }
+ return success;
+}
+
+s32 func_80BC0D08(EnNb* this, PlayState* play) {
+ return 0;
+}
+
+void EnNb_HandleSchedule(EnNb* this, PlayState* play) {
+ if ((this->scheduleResult == EN_NB_SCH_1) || (this->scheduleResult == EN_NB_SCH_2) ||
+ (this->scheduleResult == EN_NB_SCH_3) || (this->scheduleResult == EN_NB_SCH_4)) {
+ func_80BC0D08(this, play);
+ }
+
+ Math_ApproachS(&this->actor.shape.rot.y, this->actor.world.rot.y, 3, 0x2AA8);
+}
+
+void EnNb_FollowSchedule(EnNb* this, PlayState* play) {
+ ScheduleOutput scheduleOutput;
+
+ this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
+
+ if (CHECK_EVENTINF(EVENTINF_43)) {
+ scheduleOutput.result = EN_NB_SCH_1;
+ EnNb_ProcessScheduleOutput(this, play, &scheduleOutput);
+ this->actor.shape.shadowDraw = ActorShadow_DrawCircle;
+ this->actor.flags |= ACTOR_FLAG_1;
+ } else if (!Schedule_RunScript(play, sScheduleScript, &scheduleOutput) ||
+ ((this->scheduleResult != scheduleOutput.result) &&
+ !EnNb_ProcessScheduleOutput(this, play, &scheduleOutput))) {
+ this->actor.shape.shadowDraw = NULL;
+ this->actor.flags &= ~ACTOR_FLAG_1;
+ scheduleOutput.result = EN_NB_SCH_NONE;
+ } else {
+ this->actor.shape.shadowDraw = ActorShadow_DrawCircle;
+ this->actor.flags |= ACTOR_FLAG_1;
+ }
+
+ this->scheduleResult = scheduleOutput.result;
+ this->unk_1E8 = func_80BBFF90(this, play);
+ EnNb_HandleSchedule(this, play);
+}
+
+void func_80BC0EAC(EnNb* this, PlayState* play) {
+ if (func_8010BF58(&this->actor, play, this->msgEventScript, this->msgEventCallback, &this->msgEventArg4)) {
+ if (CHECK_EVENTINF(EVENTINF_43)) {
+ CLEAR_EVENTINF(EVENTINF_42);
+ CLEAR_EVENTINF(EVENTINF_43);
+ }
+
+ SubS_UpdateFlags(&this->stateFlags, EN_NB_FLAG_1 | EN_NB_FLAG_2, EN_NB_FLAG_1 | EN_NB_FLAG_2 | EN_NB_FLAG_4);
+ if (this->scheduleResult != EN_NB_SCH_2) {
+ this->stateFlags &= ~EN_NB_FLAG_20;
+ }
+
+ this->actor.child = NULL;
+ this->stateFlags |= EN_NB_FLAG_400;
+ this->unk_282 = 20;
+ this->msgEventArg4 = 0;
+ this->actionFunc = EnNb_FollowSchedule;
+ }
+}
+
+void EnNb_Init(Actor* thisx, PlayState* play) {
+ EnNb* this = THIS;
+
+ ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gNbSkel, NULL, this->jointTable, this->morphTable, NB_LIMB_MAX);
+
+ this->animIndex = EN_NB_ANIM_INVALID;
+ EnNb_ChangeAnim(this, EN_NB_ANIM_0);
+
+ Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
+ CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit);
+ Actor_SetScale(&this->actor, 0.01f);
+ this->stateFlags = EN_NB_FLAG_NONE;
+
+ if (CHECK_EVENTINF(EVENTINF_43)) {
+ SubS_UpdateFlags(&this->stateFlags, EN_NB_FLAG_4, EN_NB_FLAG_1 | EN_NB_FLAG_2 | EN_NB_FLAG_4);
+ } else {
+ CLEAR_EVENTINF(EVENTINF_42);
+ CLEAR_EVENTINF(EVENTINF_43);
+ }
+
+ this->actionFunc = EnNb_FollowSchedule;
+ this->actionFunc(this, play);
+}
+
+void EnNb_Destroy(Actor* thisx, PlayState* play) {
+ EnNb* this = THIS;
+
+ Collider_DestroyCylinder(play, &this->collider);
+ play->interfaceCtx.storyState = 3;
+}
+
+void EnNb_Update(Actor* thisx, PlayState* play) {
+ EnNb* this = THIS;
+
+ func_80BC04FC(this, play);
+ this->actionFunc(this, play);
+ func_80BC0A18(this, play);
+
+ if (this->scheduleResult != EN_NB_SCH_NONE) {
+ EnNb_UpdateSkelAnime(this);
+ func_80BC0800(this);
+ if (Actor_IsFacingPlayer(&this->actor, 0x38E0)) {
+ func_8013C964(&this->actor, play, this->unk_274, 30.0f, ITEM_OCARINA,
+ this->stateFlags & (EN_NB_FLAG_1 | EN_NB_FLAG_2 | EN_NB_FLAG_4));
+ }
+ func_80BBFF24(this, play);
+ }
+}
+
+s32 EnNb_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
+ EnNb* this = THIS;
+
+ if (limbIndex == NB_LIMB_HEAD) {
+ func_80BC05A8(this, play);
+ }
+
+ return false;
+}
+
+void EnNb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
+ EnNb* this = THIS;
+ Vec3f focusTarget;
+
+ if ((CutsceneManager_GetCurrentCsId() == CS_ID_NONE) && (limbIndex == NB_LIMB_HEAD)) {
+ Matrix_MultVec3f(&gZeroVec3f, &focusTarget);
+ Math_ApproachF(&thisx->focus.pos.x, focusTarget.x, 0.6f, 10000.0f);
+ Math_ApproachF(&thisx->focus.pos.y, focusTarget.y, 0.6f, 10000.0f);
+ Math_ApproachF(&thisx->focus.pos.z, focusTarget.z, 0.6f, 10000.0f);
+ Math_Vec3s_Copy(&thisx->focus.rot, &thisx->world.rot);
+ }
+}
+
+void EnNb_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
+ EnNb* this = THIS;
+ s32 stepRot;
+ s32 overrideRot;
+
+ if (!(this->stateFlags & EN_NB_FLAG_400)) {
+ overrideRot = false;
+ if (this->stateFlags & EN_NB_FLAG_100) {
+ overrideRot = true;
+ stepRot = true;
+ } else {
+ stepRot = true;
+ }
+ } else {
+ overrideRot = false;
+ stepRot = false;
+ }
+
+ if (limbIndex == NB_LIMB_HEAD) {
+ SubS_UpdateLimb(this->headRotZ + 0x4000, this->headRotY + this->actor.shape.rot.y + 0x4000,
+ &this->headComputedPos, &this->headComputedRot, stepRot, overrideRot);
+ Matrix_Pop();
+ Matrix_Translate(this->headComputedPos.x, this->headComputedPos.y, this->headComputedPos.z, MTXMODE_NEW);
+ Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY);
+ Matrix_RotateYS(this->headComputedRot.y, MTXMODE_APPLY);
+ Matrix_RotateXS(this->headComputedRot.x, MTXMODE_APPLY);
+ Matrix_RotateZS(this->headComputedRot.z, MTXMODE_APPLY);
+ Matrix_Push();
+ }
+}
+
+void EnNb_Draw(Actor* thisx, PlayState* play) {
+ EnNb* this = THIS;
+
+ if (this->scheduleResult != EN_NB_SCH_NONE) {
+ func_8012C5B0(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 b094456d9..f11464c79 100644
--- a/src/overlays/actors/ovl_En_Nb/z_en_nb.h
+++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.h
@@ -2,18 +2,57 @@
#define Z_EN_NB_H
#include "global.h"
+#include "objects/object_nb/object_nb.h"
struct EnNb;
typedef void (*EnNbActionFunc)(struct EnNb*, PlayState*);
+typedef s32 (*EnNbUnkFunc)(Actor*, PlayState*);
+typedef void (*EnNbUnkFunc2)(struct EnNb*, PlayState*);
+
+typedef enum EnNbAnimation {
+ /* -1 */ EN_NB_ANIM_INVALID = -1,
+ /* 0 */ EN_NB_ANIM_0,
+ /* 1 */ EN_NB_ANIM_1,
+ /* 2 */ EN_NB_ANIM_TALK_ONCE,
+ /* 3 */ EN_NB_ANIM_TALK_LOOP,
+ /* 4 */ EN_NB_ANIM_ANGRY,
+ /* 5 */ EN_NB_ANIM_RELIEVED,
+} EnNbAnimation;
typedef struct EnNb {
/* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0x44];
+ /* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ EnNbActionFunc actionFunc;
- /* 0x18C */ char unk_18C[0x110];
+ /* 0x18C */ EnNbUnkFunc2 unk_18C;
+ /* 0x190 */ ColliderCylinder collider;
+ /* 0x1DC */ u8 scheduleResult;
+ /* 0x1E0 */ u8* msgEventScript;
+ /* 0x1E4 */ s32 msgEventArg4;
+ /* 0x1E8 */ Actor* unk_1E8;
+ /* 0x1EC */ UNK_TYPE1 unk_1EC[4];
+ /* 0x1F0 */ Vec3f headComputedPos;
+ /* 0x1FC */ Vec3s headComputedRot;
+ /* 0x202 */ Vec3s jointTable[NB_LIMB_MAX];
+ /* 0x232 */ Vec3s morphTable[NB_LIMB_MAX];
+ /* 0x262 */ u16 stateFlags;
+ /* 0x264 */ u16 textId;
+ /* 0x268 */ f32 animPlaySpeed;
+ /* 0x26C */ f32 unk_26C; // Related to unk_270
+ /* 0x270 */ f32 unk_270; // headDisplacement? controls how much the upper part of the head moves when she talks
+ /* 0x274 */ f32 unk_274;
+ /* 0x278 */ UNK_TYPE1 unk_278[4];
+ /* 0x27C */ s16 headRotZ; // Slightly rotates head when talking
+ /* 0x27E */ s16 headRotY;
+ /* 0x280 */ s16 timePathTimeSpeed;
+ /* 0x282 */ s16 unk_282; // timer?
+ /* 0x284 */ s16 unk_284; // storyState?
+ /* 0x286 */ s16 storyTimer;
+ /* 0x288 */ s16 behaviour;
+ /* 0x28C */ EnNbUnkFunc msgEventCallback;
+ /* 0x290 */ EnNbAnimation animIndex;
+ /* 0x294 */ UNK_TYPE1 unk_294[4];
+ /* 0x294 */ TextState prevTalkState;
} EnNb; // size = 0x29C
-extern const ActorInit En_Nb_InitVars;
-
#endif // Z_EN_NB_H
diff --git a/src/overlays/actors/ovl_En_Neo_Reeba/overlay.cfg b/src/overlays/actors/ovl_En_Neo_Reeba/overlay.cfg
deleted file mode 100644
index b5d488d53..000000000
--- a/src/overlays/actors/ovl_En_Neo_Reeba/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Neo_Reeba
-z_en_neo_reeba.c
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 bf91c7516..960767b11 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
@@ -36,7 +36,7 @@ void EnNeoReeba_SetupDeathEffects(EnNeoReeba* this);
void EnNeoReeba_PlayDeathEffects(EnNeoReeba* this, PlayState* play);
void EnNeoReeba_SpawnIce(EnNeoReeba* this, PlayState* play);
-const ActorInit En_Neo_Reeba_InitVars = {
+ActorInit En_Neo_Reeba_InitVars = {
ACTOR_EN_NEO_REEBA,
ACTORCAT_ENEMY,
FLAGS,
@@ -171,7 +171,7 @@ void EnNeoReeba_WaitUnderground(EnNeoReeba* this, PlayState* play) {
s32 pad;
Player* player = GET_PLAYER(play);
- if ((Actor_XZDistanceToPoint(&player->actor, &this->actor.home.pos) < 200.0f) &&
+ if ((Actor_WorldDistXZToPoint(&player->actor, &this->actor.home.pos) < 200.0f) &&
(Player_GetMask(play) != PLAYER_MASK_STONE) && (fabsf(this->actor.playerHeightRel) < 100.0f)) {
EnNeoReeba_SetupRise(this);
}
@@ -199,7 +199,7 @@ void EnNeoReeba_SetupChooseAction(EnNeoReeba* this) {
void EnNeoReeba_ChooseAction(EnNeoReeba* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- f32 distToPlayer = Actor_XZDistanceToPoint(&player->actor, &this->actor.home.pos);
+ f32 distToPlayer = Actor_WorldDistXZToPoint(&player->actor, &this->actor.home.pos);
if ((distToPlayer > 200.0f) || (fabsf(this->actor.playerHeightRel) > 100.0f)) {
EnNeoReeba_SetupSink(this);
@@ -207,8 +207,8 @@ void EnNeoReeba_ChooseAction(EnNeoReeba* this, PlayState* play) {
if (this->actionTimer == 0) {
if ((distToPlayer < 140.0f) && (fabsf(this->actor.playerHeightRel) < 100.0f)) {
this->targetPos = player->actor.world.pos;
- this->targetPos.x += 10.0f * player->actor.speedXZ * Math_SinS(player->actor.world.rot.y);
- this->targetPos.z += 10.0f * player->actor.speedXZ * Math_CosS(player->actor.world.rot.y);
+ this->targetPos.x += 10.0f * player->actor.speed * Math_SinS(player->actor.world.rot.y);
+ this->targetPos.z += 10.0f * player->actor.speed * Math_CosS(player->actor.world.rot.y);
EnNeoReeba_SetupMove(this);
} else {
EnNeoReeba_SetupReturnHome(this);
@@ -224,7 +224,7 @@ void EnNeoReeba_ChooseAction(EnNeoReeba* this, PlayState* play) {
void EnNeoReeba_SetupSink(EnNeoReeba* this) {
this->sinkRiseRate = 0.0f;
this->skelAnime.playSpeed = 2.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
this->actionFunc = EnNeoReeba_Sink;
}
@@ -247,7 +247,7 @@ void EnNeoReeba_SetupRise(EnNeoReeba* this) {
this->actor.draw = EnNeoReeba_Draw;
this->sinkRiseRate = 300.0f;
this->skelAnime.playSpeed = 2.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_APPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_APPEAR);
this->actor.flags |= ACTOR_FLAG_1;
this->actionFunc = EnNeoReeba_RiseOutOfGround;
}
@@ -268,28 +268,28 @@ void EnNeoReeba_RiseOutOfGround(EnNeoReeba* this, PlayState* play) {
}
void EnNeoReeba_SetupMove(EnNeoReeba* this) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_RIVA_MOVE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_RIVA_MOVE);
this->sfxTimer = 10;
this->actionTimer = 60;
this->actionFunc = EnNeoReeba_Move;
this->skelAnime.playSpeed = 2.0f;
- this->actor.speedXZ = 14.0f;
+ this->actor.speed = 14.0f;
}
void EnNeoReeba_Move(EnNeoReeba* this, PlayState* play) {
- f32 remainingDist = Math_Vec3f_StepToXZ(&this->actor.world.pos, &this->targetPos, this->actor.speedXZ);
+ f32 remainingDist = Math_Vec3f_StepToXZ(&this->actor.world.pos, &this->targetPos, this->actor.speed);
Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos, this->actor.shape.shadowScale, 1, 4.0f, 0xFA,
0xA, 1);
if (remainingDist < 2.0f) {
EnNeoReeba_SetupChooseAction(this);
- } else if (remainingDist < 40.0f && this->actor.speedXZ > 3.0f) {
- this->actor.speedXZ -= 2.0f;
+ } else if (remainingDist < 40.0f && this->actor.speed > 3.0f) {
+ this->actor.speed -= 2.0f;
}
if (this->sfxTimer == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_RIVA_MOVE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_RIVA_MOVE);
this->sfxTimer = 10;
} else {
this->sfxTimer--;
@@ -304,21 +304,21 @@ void EnNeoReeba_Move(EnNeoReeba* this, PlayState* play) {
void EnNeoReeba_SetupReturnHome(EnNeoReeba* this) {
this->actionFunc = EnNeoReeba_ReturnHome;
- this->actor.speedXZ = 6.0f;
+ this->actor.speed = 6.0f;
}
void EnNeoReeba_ReturnHome(EnNeoReeba* this, PlayState* play) {
Player* player = GET_PLAYER(play);
s32 pad;
- f32 remainingDist = Math_Vec3f_StepToXZ(&this->actor.world.pos, &this->actor.home.pos, this->actor.speedXZ);
+ f32 remainingDist = Math_Vec3f_StepToXZ(&this->actor.world.pos, &this->actor.home.pos, this->actor.speed);
if (remainingDist < 2.0f) {
EnNeoReeba_SetupChooseAction(this);
- } else if (remainingDist < 40.0f && this->actor.speedXZ > 3.0f) {
- this->actor.speedXZ -= 1.0f;
+ } else if (remainingDist < 40.0f && this->actor.speed > 3.0f) {
+ this->actor.speed -= 1.0f;
}
- if (Actor_XZDistanceToPoint(&player->actor, &this->actor.home.pos) > 200.0f ||
+ if (Actor_WorldDistXZToPoint(&player->actor, &this->actor.home.pos) > 200.0f ||
fabsf(this->actor.playerHeightRel) > 100.0f) {
EnNeoReeba_SetupSink(this);
}
@@ -333,7 +333,7 @@ void EnNeoReeba_SetupBounce(EnNeoReeba* this) {
}
void EnNeoReeba_Bounce(EnNeoReeba* this, PlayState* play) {
- if (Math_Vec3f_StepToXZ(&this->actor.world.pos, &this->targetPos, this->actor.speedXZ) < 2.0f) {
+ if (Math_Vec3f_StepToXZ(&this->actor.world.pos, &this->targetPos, this->actor.speed) < 2.0f) {
EnNeoReeba_SetupChooseAction(this);
}
@@ -345,7 +345,7 @@ void EnNeoReeba_Bounce(EnNeoReeba* this, PlayState* play) {
}
void EnNeoReeba_SetupStun(EnNeoReeba* this) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
this->actionFunc = EnNeoReeba_Stunned;
}
@@ -378,7 +378,7 @@ void EnNeoReeba_SetupFrozen(EnNeoReeba* this) {
this->stunTimer = 12;
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
this->actionFunc = EnNeoReeba_Frozen;
}
@@ -407,8 +407,8 @@ void EnNeoReeba_SetupDamageAnim(EnNeoReeba* this) {
this->velToTarget.x = Math_SinS(this->actor.yawTowardsPlayer) * -12.0f;
this->velToTarget.z = Math_CosS(this->actor.yawTowardsPlayer) * -12.0f;
this->rotationSpeed = 4551.0f;
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 25);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_RIVA_DAMAGE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 25);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_RIVA_DAMAGE);
this->actionFunc = EnNeoReeba_DamageAnim;
}
@@ -444,11 +444,11 @@ void EnNeoReeba_SetupDeathEffects(EnNeoReeba* this) {
this->velToTarget.z = Math_CosS(this->actor.yawTowardsPlayer) * -12.0f;
this->rotationSpeed = 3640.0f;
- Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, 0, 25);
- this->actor.flags |= ACTOR_FLAG_8000000;
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 25);
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->actor.flags &= ~ACTOR_FLAG_1;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_RIVA_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_RIVA_DEAD);
this->actionFunc = EnNeoReeba_PlayDeathEffects;
}
@@ -466,7 +466,7 @@ void EnNeoReeba_PlayDeathEffects(EnNeoReeba* this, PlayState* play) {
if (this->actor.scale.x < 0.01f) {
func_800B3030(play, &this->actor.world.pos, &sDeadDbAccel, &sDeadDbVel, 120, 0, 0);
Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0x60);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else {
if (this->actionTimer <= 10) {
@@ -562,12 +562,12 @@ void EnNeoReeba_HandleHit(EnNeoReeba* this, PlayState* play) {
this->stunTimer = 40;
this->drawEffectAlpha = 1.0f;
this->drawEffectScale = 2.0f;
- Actor_SetColorFilter(&this->actor, 0, 0x78, 0, 40);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 120, COLORFILTER_BUFFLAG_OPA, 40);
EnNeoReeba_SetupStun(this);
break;
case EN_NEO_REEBA_DMGEFF_STUN:
- Actor_SetColorFilter(&this->actor, 0, 0x78, 0, 40);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 120, COLORFILTER_BUFFLAG_OPA, 40);
EnNeoReeba_SetupStun(this);
break;
}
@@ -604,7 +604,7 @@ void EnNeoReeba_UpdatePosition(EnNeoReeba* this, PlayState* play) {
Math_ApproachZeroF(&this->velToTarget.x, 1.0f, 2.0f);
Math_ApproachZeroF(&this->velToTarget.z, 1.0f, 2.0f);
- Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 40.0f, 40.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 40.0f, 40.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
}
}
diff --git a/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.h b/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.h
index a739d96db..2cd24c88e 100644
--- a/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.h
+++ b/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.h
@@ -31,6 +31,4 @@ typedef struct EnNeoReeba {
/* 0x310 */ u8 drawEffectType;
} EnNeoReeba; // size = 0x314
-extern const ActorInit En_Neo_Reeba_InitVars;
-
#endif // Z_EN_NEO_REEBA_H
diff --git a/src/overlays/actors/ovl_En_Nimotsu/overlay.cfg b/src/overlays/actors/ovl_En_Nimotsu/overlay.cfg
deleted file mode 100644
index 8558fc330..000000000
--- a/src/overlays/actors/ovl_En_Nimotsu/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Nimotsu
-z_en_nimotsu.c
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 11872a0a1..807bbd849 100644
--- a/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c
+++ b/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c
@@ -18,7 +18,7 @@ void EnNimotsu_Draw(Actor* thisx, PlayState* play);
void EnNimotsu_UpdateCollision(EnNimotsu* this, PlayState* play);
-const ActorInit En_Nimotsu_InitVars = {
+ActorInit En_Nimotsu_InitVars = {
ACTOR_EN_NIMOTSU,
ACTORCAT_PROP,
FLAGS,
@@ -53,7 +53,7 @@ static ColliderCylinderInit sCylinderInit = {
void EnNimotsu_UpdateCollision(EnNimotsu* this, PlayState* play) {
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
- Actor_UpdateBgCheckInfo(play, &this->actor, 32.0f, 30.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 32.0f, 30.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
}
void EnNimotsu_Init(Actor* thisx, PlayState* play) {
@@ -81,7 +81,7 @@ void EnNimotsu_Update(Actor* thisx, PlayState* play) {
Actor_MoveWithGravity(&this->actor);
- if (!(this->dustDone & 1) && (this->actor.bgCheckFlags & 1)) {
+ if (!(this->dustDone & 1) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
if (DECR(this->timer) == 0) {
this->dustDone |= 1;
}
diff --git a/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.h b/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.h
index e839c9393..88e4a1f42 100644
--- a/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.h
+++ b/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.h
@@ -13,6 +13,4 @@ typedef struct EnNimotsu {
/* 0x1DA */ s16 timer;
} EnNimotsu; // size = 0x1DC
-extern const ActorInit En_Nimotsu_InitVars;
-
#endif // Z_EN_NIMOTSU_H
diff --git a/src/overlays/actors/ovl_En_Niw/overlay.cfg b/src/overlays/actors/ovl_En_Niw/overlay.cfg
deleted file mode 100644
index 26dacb3bb..000000000
--- a/src/overlays/actors/ovl_En_Niw/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Niw
-z_en_niw.c
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 112871c90..bded43eda 100644
--- a/src/overlays/actors/ovl_En_Niw/z_en_niw.c
+++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.c
@@ -48,7 +48,7 @@ enum EnNiwState {
/* 8 */ NIW_STATE_HOPPING,
};
-const ActorInit En_Niw_InitVars = {
+ActorInit En_Niw_InitVars = {
ACTOR_EN_NIW,
ACTORCAT_PROP,
FLAGS,
@@ -86,41 +86,20 @@ static ColliderCylinderInit sCylinderInit = {
{ 15, 25, 4, { 0, 0, 0 } },
};
-static Vec3f D_808934C4 = {
- 90000.0f,
- 90000.0f,
- 90000.0f,
-};
-
-static InitChainEntry sInitChain[] = {
- ICHAIN_U8(targetMode, 6, ICHAIN_CONTINUE),
- ICHAIN_F32_DIV1000(gravity, -2000, ICHAIN_CONTINUE),
- ICHAIN_F32(targetArrowOffset, 0, ICHAIN_STOP),
-};
-
-static Vec3f D_808934DC = {
- 90000.0f,
- 90000.0f,
- 90000.0f,
-};
-
-static Vec3f D_808934E8 = {
- 90000.0f,
- 90000.0f,
- 90000.0f,
-};
-
-static s32 pad = 0;
-
void EnNiw_Init(Actor* thisx, PlayState* play) {
+ static InitChainEntry sInitChain[] = {
+ ICHAIN_U8(targetMode, 6, ICHAIN_CONTINUE),
+ ICHAIN_F32_DIV1000(gravity, -2000, ICHAIN_CONTINUE),
+ ICHAIN_F32(targetArrowOffset, 0, ICHAIN_STOP),
+ };
EnNiw* this = THIS;
- Vec3f dTemp = D_808934C4;
+ Vec3f D_808934C4 = { 90000.0f, 90000.0f, 90000.0f };
if (this->actor.params < 0) { // all scene spawned cucco are (-1)
this->actor.params = NIW_TYPE_REGULAR;
}
- Math_Vec3f_Copy(&this->unk2BC, &dTemp);
+ Math_Vec3f_Copy(&this->unk2BC, &D_808934C4);
this->niwType = this->actor.params;
Actor_ProcessInitChain(&this->actor, sInitChain);
@@ -138,9 +117,6 @@ void EnNiw_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->actor, 0.01f);
if (this->niwType == NIW_TYPE_UNK1) {
- // @Bug this unused variant is broken and crashes on spawn (EnNiw_Update expects a parent, NULL)
- // if modified to change niwType to TYPE_REGULAR here, new size is smaller than normal
- // theory: was meant to be a small hand held cucco for grog to show the player
Actor_SetScale(&this->actor, (BREG(86) / 10000.0f) + 0.004f);
}
@@ -154,13 +130,13 @@ void EnNiw_Init(Actor* thisx, PlayState* play) {
}
if (this->niwType == NIW_TYPE_HELD) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHICKEN_CRY_M);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHICKEN_CRY_M);
this->sfxTimer1 = 30;
this->heldTimer = 30;
this->actor.flags &= ~ACTOR_FLAG_1; // targetable OFF
this->niwState = NIW_STATE_HELD;
this->actionFunc = EnNiw_Held;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->unk2BC.z = 0.0f;
this->actor.velocity.y = 0.0f;
this->actor.gravity = 0.0f;
@@ -319,8 +295,8 @@ void EnNiw_UpdateRunning(EnNiw* this, PlayState* play, s32 isStormCucco) {
if (this->hopTimer == 0) {
this->hopTimer = 3;
- if (this->actor.bgCheckFlags & 1) { // hit floor
- this->actor.velocity.y = 3.5f; // hopping up while running away
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ this->actor.velocity.y = 3.5f; // hopping up while running away
}
}
@@ -336,8 +312,7 @@ void EnNiw_UpdateRunning(EnNiw* this, PlayState* play, s32 isStormCucco) {
runningDirection = -runningAngles[isStormCucco];
}
- if (isStormCucco == true &&
- (this->runAwayTimer == 0 || (this->actor.bgCheckFlags & 8))) { // bgCheckFlags 8: hit a wall
+ if (isStormCucco == true && (this->runAwayTimer == 0 || (this->actor.bgCheckFlags & BGCHECKFLAG_WALL))) {
this->runAwayTimer = 150;
if (this->yawTimer == 0) {
this->yawTimer = 70;
@@ -366,17 +341,17 @@ void EnNiw_Idle(EnNiw* this, PlayState* play) {
s16 nextAnimIndex;
if (this->niwType == NIW_TYPE_REGULAR) {
- if (Actor_HasParent(&this->actor, play)) { // picked up
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHICKEN_CRY_M); // crow
+ if (Actor_HasParent(&this->actor, play)) { // picked up
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHICKEN_CRY_M); // crow
this->sfxTimer1 = 30;
this->heldTimer = 30;
this->actor.flags &= ~ACTOR_FLAG_1; // targetable OFF
this->niwState = NIW_STATE_HELD;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = EnNiw_Held;
return;
} else {
- Actor_LiftActor(&this->actor, play);
+ Actor_OfferCarry(&this->actor, play);
}
} else { // NIW_TYPE_UNK1 || NIW_TYPE_HELD
this->unkIdleTimer2 = 10;
@@ -414,8 +389,8 @@ void EnNiw_Idle(EnNiw* this, PlayState* play) {
} else {
this->unkIdleTimer = 4;
- if (this->actor.bgCheckFlags & 1) { // hit floor
- this->actor.speedXZ = 0.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ this->actor.speed = 0.0f;
this->actor.velocity.y = 3.5f; // hopping up and down
}
}
@@ -451,7 +426,7 @@ void EnNiw_Idle(EnNiw* this, PlayState* play) {
}
void EnNiw_Held(EnNiw* this, PlayState* play) {
- Vec3f vec3fcopy = D_808934DC;
+ Vec3f D_808934DC = { 90000.0f, 90000.0f, 90000.0f };
s16 rotZ;
if (this->heldTimer == 0) {
@@ -476,7 +451,7 @@ void EnNiw_Held(EnNiw* this, PlayState* play) {
this->actor.shape.rot.z = 0;
rotZ = this->actor.shape.rot.z;
this->actor.velocity.y = 8.0f;
- this->actor.speedXZ = 4.0f;
+ this->actor.speed = 4.0f;
this->actor.gravity = -2.0f;
this->niwState = NIW_STATE_FALLING;
this->unk2EC = 0;
@@ -484,7 +459,7 @@ void EnNiw_Held(EnNiw* this, PlayState* play) {
this->actor.shape.rot.y = rotZ;
this->actor.shape.rot.x = rotZ;
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
- Math_Vec3f_Copy(&this->unk2BC, &vec3fcopy);
+ Math_Vec3f_Copy(&this->unk2BC, &D_808934DC);
this->actor.flags |= ACTOR_FLAG_1; // targetable ON
this->actionFunc = EnNiw_Thrown;
}
@@ -494,16 +469,16 @@ void EnNiw_Held(EnNiw* this, PlayState* play) {
void EnNiw_Thrown(EnNiw* this, PlayState* play) {
if (this->unk2EC == 0) {
- if (this->actor.bgCheckFlags & 1) { // hit floor
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->unk2EC = 1;
this->hoppingTimer = 80; // hop timer
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.velocity.y = 4.0f;
} else {
return; // wait until back on floor
}
} else {
- if (this->actor.bgCheckFlags & 1) { // hit floor
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->sfxTimer1 = 0;
this->actor.velocity.y = 4.0f; // vertical hop
this->unk29E = 1;
@@ -519,17 +494,17 @@ void EnNiw_Thrown(EnNiw* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
// picked up again before could run off
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHICKEN_CRY_M); // crow
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHICKEN_CRY_M); // crow
this->sfxTimer1 = 30;
this->unk2EC = 0;
this->heldTimer = 30;
this->actor.flags &= ~ACTOR_FLAG_1; // targetable OFF
this->niwState = NIW_STATE_HELD;
this->actionFunc = EnNiw_Held;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
} else {
if (this->hoppingTimer > 5) {
- Actor_LiftActor(&this->actor, play);
+ Actor_OfferCarry(&this->actor, play);
}
EnNiw_AnimateWingHead(this, play, NIW_ANIM_PECKING_AND_WAVING);
}
@@ -544,8 +519,8 @@ void EnNiw_Swimming(EnNiw* this, PlayState* play) {
EnNiw_SpawnAttackNiw(this, play); // spawn attack niw
}
- this->actor.speedXZ = 2.0f;
- if (this->actor.bgCheckFlags & 0x20) { // touching water
+ this->actor.speed = 2.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER) {
this->actor.gravity = 0.0f;
if (this->actor.depthInWater > 15.0f) {
this->actor.world.pos.y += 2.0f;
@@ -557,21 +532,21 @@ void EnNiw_Swimming(EnNiw* this, PlayState* play) {
EffectSsGRipple_Spawn(play, &ripplePos, 100, 500, 30);
}
- if (this->actor.bgCheckFlags & 8) { // hit a wall
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
this->actor.velocity.y = 10.0f; // fly up in straight line
- this->actor.speedXZ = 1.0f;
+ this->actor.speed = 1.0f;
}
} else {
this->actor.gravity = -2.0f;
- if (this->actor.bgCheckFlags & 8) { // hit a wall
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
this->actor.velocity.y = 10.0f; // fly up in straight line
- this->actor.speedXZ = 1.0f;
+ this->actor.speed = 1.0f;
this->actor.gravity = 0.0f;
} else {
- this->actor.speedXZ = 4.0f;
+ this->actor.speed = 4.0f;
}
- if (this->actor.bgCheckFlags & 1) { // hit floor
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->actor.gravity = -2.0f;
this->runAwayTimer = 100;
this->swimRippleTimer = 0;
@@ -629,7 +604,7 @@ void EnNiw_SetupCuccoStorm(EnNiw* this, PlayState* play) {
this->targetLimbRots[1] = 0.0f;
this->targetLimbRots[2] = 0.0f;
this->unkTimer24C = 10;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHICKEN_CRY_M);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHICKEN_CRY_M);
}
if (this->cuccoStormTimer == 0) {
@@ -646,7 +621,7 @@ void EnNiw_SetupCuccoStorm(EnNiw* this, PlayState* play) {
void EnNiw_CuccoStorm(EnNiw* this, PlayState* play) {
EnNiw_SpawnAttackNiw(this, play);
if (this->cuccoStormTimer == 1) { // not countdown to 0? mistype?
- this->actor.speedXZ = 3.0f;
+ this->actor.speed = 3.0f;
this->isRunningRight = Rand_ZeroFloat(1.99f);
this->generalTimer1 = 0;
this->unkTimer24E = this->generalTimer1;
@@ -662,12 +637,12 @@ void EnNiw_SetupRunAway(EnNiw* this) {
this->isRunningRight = Rand_ZeroFloat(1.99f);
this->niwState = NIW_STATE_RUNNING;
this->actionFunc = EnNiw_RunAway;
- this->actor.speedXZ = 4.0f;
+ this->actor.speed = 4.0f;
}
void EnNiw_RunAway(EnNiw* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- Vec3f tempVec3f = D_808934E8;
+ Vec3f D_808934E8 = { 90000.0f, 90000.0f, 90000.0f };
s16 temp298;
f32 dX;
f32 dZ;
@@ -678,12 +653,12 @@ void EnNiw_RunAway(EnNiw* this, PlayState* play) {
this->unk2A4.z = this->unk2B0.z = this->actor.world.pos.z;
this->generalTimer2 = this->generalTimer1 = this->unk298 = 0;
this->unk300 = this->unk304 = 0;
- this->actor.speedXZ = 0;
+ this->actor.speed = 0;
this->targetLimbRots[8] = 0;
this->targetLimbRots[6] = 0;
this->targetLimbRots[5] = 0;
this->targetLimbRots[7] = 0;
- Math_Vec3f_Copy(&this->unk2BC, &tempVec3f);
+ Math_Vec3f_Copy(&this->unk2BC, &D_808934E8);
EnNiw_SetupIdle(this);
@@ -702,7 +677,7 @@ void EnNiw_RunAway(EnNiw* this, PlayState* play) {
}
void EnNiw_LandBeforeIdle(EnNiw* this, PlayState* play) {
- if (this->actor.bgCheckFlags & 1) { // hit floor
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
EnNiw_SetupIdle(this);
}
}
@@ -715,7 +690,7 @@ void EnNiw_CheckRage(EnNiw* this, PlayState* play) {
this->iframeTimer = 10;
this->sfxTimer1 = 30;
this->unk29E = 1;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHICKEN_CRY_M); // crow
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHICKEN_CRY_M); // crow
this->runAwayTimer = 100;
this->unk2EC = 0;
EnNiw_SetupRunAway(this);
@@ -746,13 +721,13 @@ void EnNiw_CheckRage(EnNiw* this, PlayState* play) {
this->actionFunc = EnNiw_Trigger;
this->unk304 = 0.0f;
this->unk300 = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
} else {
this->iframeTimer = 10;
this->sfxTimer1 = 30;
this->unk29E = 1;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHICKEN_CRY_M); // crow
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHICKEN_CRY_M); // crow
this->runAwayTimer = 100;
this->unk2EC = 0;
EnNiw_SetupRunAway(this);
@@ -837,7 +812,9 @@ void EnNiw_Update(Actor* thisx, PlayState* play) {
Actor_SetFocus(&this->actor, this->unk308);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 60.0f, 0x1F);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 60.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 |
+ 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) {
@@ -857,7 +834,7 @@ void EnNiw_Update(Actor* thisx, PlayState* play) {
this->actor.world.pos.y = this->actor.home.pos.y + 300.0f;
}
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.gravity = -2.0f;
Math_Vec3f_Copy(&this->unk2A4, &this->actor.home.pos);
Math_Vec3f_Copy(&this->unk2B0, &this->actor.home.pos);
@@ -890,8 +867,8 @@ void EnNiw_Update(Actor* thisx, PlayState* play) {
return;
}
- if ((this->actor.bgCheckFlags & 0x20) && // touching water
- this->actor.depthInWater > 15.0f && this->niwState != NIW_STATE_SWIMMING) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WATER) && (this->actor.depthInWater > 15.0f) &&
+ (this->niwState != NIW_STATE_SWIMMING)) {
this->actor.velocity.y = 0.0f;
this->actor.gravity = 0.0f;
Math_Vec3f_Copy(&pos, &this->actor.world.pos);
@@ -911,16 +888,16 @@ void EnNiw_Update(Actor* thisx, PlayState* play) {
EnNiw_CheckRage(this, play);
if (this->flutterSfxTimer == 0 && this->niwState == NIW_STATE_HELD) {
this->flutterSfxTimer = 7;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_CHICKEN_FLUTTER);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_CHICKEN_FLUTTER);
}
if (this->sfxTimer1 == 0) {
if (this->niwState != NIW_STATE_IDLE) {
this->sfxTimer1 = 30;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHICKEN_CRY_A);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHICKEN_CRY_A);
} else {
this->sfxTimer1 = 300;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHICKEN_CRY_N);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHICKEN_CRY_N);
}
}
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 c1cec3b88..c60397535 100644
--- a/src/overlays/actors/ovl_En_Niw/z_en_niw.h
+++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.h
@@ -79,7 +79,7 @@ typedef struct EnNiw {
/* 0x2E8 */ s16 yawTowardsPlayer;
/* 0x2EA */ s16 headRotationToggle;
/* 0x2EC */ s16 unk2EC;
- /* 0x2EE */ UNK_TYPE1 pad2EE[0x6];
+ /* 0x2EE */ UNK_TYPE1 pad2EE[0x6];
/* 0x2F4 */ f32 unusedFloat2F4; // set in EnNiw_Update if Cucco falls off map, never read
/* 0x2F8 */ f32 unusedFloat2F8;
/* 0x2FC */ f32 unusedFloat2FC;
@@ -91,12 +91,13 @@ typedef struct EnNiw {
/* 0x35C */ EnNiwFeather feathers[NIW_FEATHER_COUNT];
} EnNiw; // size = 0x7BC
-// in init, any value below zero becomes zero
-// however, in vanilla, only 0xFFFF (-1) exists in scene spawns, actors can spawn 0x0
-#define NIW_TYPE_VANILLA 0xFFFF
-#define NIW_TYPE_REGULAR 0
-#define NIW_TYPE_UNK1 1
-#define NIW_TYPE_HELD 2 // spawns held by the bomber kid in east clock town during hide and seek
+typedef enum {
+ /* -1 */ NIW_TYPE_VANILLA = -1, // Will be converted to 0, in vanilla exists only in scene spawns
+ /* 0 */ NIW_TYPE_REGULAR,
+ /* 1 */ NIW_TYPE_UNK1, // This unused variant must be spawned as a child, as it expects a NON-NULL parent.
+ // Theory: This was meant to be a small hand held cucco for Grog to show the player
+ /* 2 */ NIW_TYPE_HELD // spawns held by the bomber kid in east clock town during hide and seek
+} NiwType;
// the attacking cuccos are not here, they are a different actor: [ ovl_En_Attack_Niw ]
typedef enum {
diff --git a/src/overlays/actors/ovl_En_Nnh/overlay.cfg b/src/overlays/actors/ovl_En_Nnh/overlay.cfg
deleted file mode 100644
index 01d2bec04..000000000
--- a/src/overlays/actors/ovl_En_Nnh/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Nnh
-z_en_nnh.c
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 5597bf9f6..0187e1c88 100644
--- a/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c
+++ b/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c
@@ -21,7 +21,7 @@ void EnNnh_WaitForDialogue(EnNnh* this, PlayState* play);
void EnNnh_SetupDialogue(EnNnh* this);
void EnNnh_Dialogue(EnNnh* this, PlayState* play);
-const ActorInit En_Nnh_InitVars = {
+ActorInit En_Nnh_InitVars = {
ACTOR_EN_NNH,
ACTORCAT_PROP,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Nnh/z_en_nnh.h b/src/overlays/actors/ovl_En_Nnh/z_en_nnh.h
index 344ccb345..bcbf9caeb 100644
--- a/src/overlays/actors/ovl_En_Nnh/z_en_nnh.h
+++ b/src/overlays/actors/ovl_En_Nnh/z_en_nnh.h
@@ -13,6 +13,4 @@ typedef struct EnNnh {
/* 0x190 */ EnNnhActionFunc actionFunc;
} EnNnh; // size = 0x194
-extern const ActorInit En_Nnh_InitVars;
-
#endif // Z_EN_NNH_H
diff --git a/src/overlays/actors/ovl_En_Nutsball/overlay.cfg b/src/overlays/actors/ovl_En_Nutsball/overlay.cfg
deleted file mode 100644
index cc188400c..000000000
--- a/src/overlays/actors/ovl_En_Nutsball/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Nutsball
-z_en_nutsball.c
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 c93e531be..9c6fe4a9d 100644
--- a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c
+++ b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c
@@ -19,7 +19,7 @@ void EnNutsball_Draw(Actor* thisx, PlayState* play);
void EnNutsball_InitColliderParams(EnNutsball* this);
-const ActorInit En_Nutsball_InitVars = {
+ActorInit En_Nutsball_InitVars = {
ACTOR_EN_NUTSBALL,
ACTORCAT_PROP,
FLAGS,
@@ -57,7 +57,7 @@ void EnNutsball_Init(Actor* thisx, PlayState* play) {
ActorShape_Init(&this->actor.shape, 400.0f, ActorShadow_DrawCircle, 13.0f);
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
this->actor.shape.rot.y = 0;
- this->actor.speedXZ = 10.0f;
+ this->actor.speed = 10.0f;
if (this->actor.params == 2) {
this->timer = 1;
this->timerThreshold = 0;
@@ -97,18 +97,19 @@ void EnNutsball_Update(Actor* thisx, PlayState* play2) {
s32 bgId;
CollisionPoly* poly;
- if (!(player->stateFlags1 & 0x300000C0)) {
+ if (!(player->stateFlags1 &
+ (PLAYER_STATE1_40 | PLAYER_STATE1_80 | PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000))) {
this->timer--;
if (this->timer < 0) {
this->actor.velocity.y += this->actor.gravity;
spdXZ = sqrtf((this->actor.velocity.x * this->actor.velocity.x) +
(this->actor.velocity.z * this->actor.velocity.z));
- this->actor.world.rot.x = Math_FAtan2F(spdXZ, this->actor.velocity.y);
+ this->actor.world.rot.x = Math_Atan2S_XY(spdXZ, this->actor.velocity.y);
}
this->actor.home.rot.z += 0x2AA8;
- if ((this->actor.bgCheckFlags & 8) || (this->actor.bgCheckFlags & 1) || (this->actor.bgCheckFlags & 16) ||
- (this->collider.base.atFlags & AT_HIT) || (this->collider.base.acFlags & AC_HIT) ||
- (this->collider.base.ocFlags1 & OC1_HIT)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) || (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) ||
+ (this->actor.bgCheckFlags & BGCHECKFLAG_CEILING) || (this->collider.base.atFlags & AT_HIT) ||
+ (this->collider.base.acFlags & AC_HIT) || (this->collider.base.ocFlags1 & OC1_HIT)) {
if ((player->currentShield == PLAYER_SHIELD_HEROS_SHIELD) && (this->collider.base.atFlags & AT_HIT) &&
(this->collider.base.atFlags & AT_TYPE_ENEMY) && (this->collider.base.atFlags & AT_BOUNCED)) {
EnNutsball_InitColliderParams(this);
@@ -125,28 +126,30 @@ void EnNutsball_Update(Actor* thisx, PlayState* play2) {
} else {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_EN_OCTAROCK_ROCK);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else {
if (this->timer == -300) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
Actor_MoveWithoutGravity(&this->actor);
Math_Vec3f_Copy(&worldPos, &this->actor.world.pos);
- Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 5.0f, 10.0f, 0x7);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 5.0f, 10.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4);
- if (this->actor.bgCheckFlags & 8) {
- if (func_800C9A4C(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId) & 0x30) {
- this->actor.bgCheckFlags &= ~8;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
+ if (SurfaceType_GetWallFlags(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId) &
+ (WALL_FLAG_4 | WALL_FLAG_5)) {
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_WALL;
if (BgCheck_EntityLineTest1(&play->colCtx, &this->actor.prevPos, &worldPos, &this->actor.world.pos,
&poly, true, false, false, true, &bgId)) {
- if (func_800C9A4C(&play->colCtx, poly, bgId) & 0x30) {
+ if (SurfaceType_GetWallFlags(&play->colCtx, poly, bgId) & (WALL_FLAG_4 | WALL_FLAG_5)) {
this->actor.world.pos.x += this->actor.velocity.x * 0.01f;
this->actor.world.pos.z += this->actor.velocity.z * 0.01f;
} else {
- this->actor.bgCheckFlags |= 8;
+ this->actor.bgCheckFlags |= BGCHECKFLAG_WALL;
}
} else {
Math_Vec3f_Copy(&this->actor.world.pos, &worldPos);
diff --git a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.h b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.h
index a8ae31da2..04e807727 100644
--- a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.h
+++ b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.h
@@ -12,6 +12,4 @@ typedef struct EnNutsball {
/* 0x148 */ ColliderCylinder collider;
} EnNutsball; // size = 0x194
-extern const ActorInit En_Nutsball_InitVars;
-
#endif // Z_EN_NUTSBALL_H
diff --git a/src/overlays/actors/ovl_En_Nwc/overlay.cfg b/src/overlays/actors/ovl_En_Nwc/overlay.cfg
deleted file mode 100644
index d479e7da4..000000000
--- a/src/overlays/actors/ovl_En_Nwc/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Nwc
-z_en_nwc.c
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 3f66f7f70..b11e8c408 100644
--- a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c
+++ b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c
@@ -41,7 +41,7 @@ enum EnNiwState {
/* 4 */ NWC_STATE_RUNNING, // running from the player after failed breman march
};
-const ActorInit En_Nwc_InitVars = {
+ActorInit En_Nwc_InitVars = {
ACTOR_EN_NWC,
ACTORCAT_PROP,
FLAGS,
@@ -64,15 +64,14 @@ void EnNwc_Init(Actor* thisx, PlayState* play) {
niwObjectIndex = Object_GetIndex(&play->objectCtx, OBJECT_NIW);
if (niwObjectIndex < 0) {
// niw object does not exist, we need it for tranformation, despawn
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
- if (gSaveContext.save.weekEventReg[25] & 8) {
- // if breman mask was already used, replace with adult EnNiw
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_08)) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_NIW, this->actor.world.pos.x, this->actor.world.pos.y,
this->actor.world.pos.z, 0, this->actor.world.rot.y, 0, NIW_TYPE_REGULAR);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -147,7 +146,7 @@ s32 EnNwc_PlayerReleasedBremanMarch(EnNwc* this, PlayState* play) {
return false;
}
- if (player->stateFlags3 & 0x20000000) { // breman mask march
+ if (player->stateFlags3 & PLAYER_STATE3_20000000) {
return false;
}
@@ -165,8 +164,7 @@ s32 EnNwc_IsFound(EnNwc* this, PlayState* play) {
return false;
}
- if (player->stateFlags3 & 0x20000000 && // breman mask march
- this->actor.xzDistToPlayer < 100.0f) {
+ if ((player->stateFlags3 & PLAYER_STATE3_20000000) && this->actor.xzDistToPlayer < 100.0f) {
return true;
}
@@ -174,7 +172,7 @@ s32 EnNwc_IsFound(EnNwc* this, PlayState* play) {
}
void EnNwc_ChangeState(EnNwc* this, s16 newState) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
switch (newState) {
case NWC_STATE_CHECK_BREMAN:
this->stateTimer = 10;
@@ -211,7 +209,7 @@ void EnNwc_ChangeState(EnNwc* this, s16 newState) {
* If previously checking for breman -> select random (NWC_STATE_TURNING, NWC_STATE_HOPPING_FORWARD)
*/
void EnNwc_ToggleState(EnNwc* this) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->state != NWC_STATE_CHECK_BREMAN) {
EnNwc_ChangeState(this, NWC_STATE_CHECK_BREMAN);
} else {
@@ -278,7 +276,7 @@ void EnNwc_Follow(EnNwc* this, PlayState* play) {
s16 targetUpperBodyRot = 0;
s16 targetFootRot = 0;
- if (this->actor.speedXZ > 0.0f) {
+ if (this->actor.speed > 0.0f) {
if (this->stateTimer & 4) {
targetFootRot = 0x1B58;
targetUpperBodyRot = -0x2710;
@@ -295,7 +293,7 @@ void EnNwc_Follow(EnNwc* this, PlayState* play) {
this->actor.velocity.y = 2.0f; // hop up and down
}
if ((this->stateTimer & 0x1B) == 24) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHICK_SONG);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHICK_SONG);
}
}
@@ -308,13 +306,13 @@ void EnNwc_Follow(EnNwc* this, PlayState* play) {
this->grog->actor.home.rot.x += 2; // increment grog's adult tranformation counter
EnNwc_SpawnDust(this, play);
Actor_SetScale(&this->actor, 0.002f);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHICK_TO_CHICKEN);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHICK_TO_CHICKEN);
}
}
Math_Vec3f_Diff(&chickCoords[this->actor.home.rot.z], &this->actor.world.pos, &targetVector);
if (SQXZ(targetVector) < SQ(5.0f)) { // too close to keep moving, stop
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
// first nwc in the line follows player, the rest follow the previous one
if (this->actor.home.rot.z == 1) {
@@ -331,7 +329,7 @@ void EnNwc_Follow(EnNwc* this, PlayState* play) {
} else if (this->randomRot < -0x1388) {
this->randomRot = -0x1388;
}
- this->actor.speedXZ = 2.0f;
+ this->actor.speed = 2.0f;
newRotY = Math_Vec3f_Yaw(&this->actor.world.pos, &chickCoords[this->actor.home.rot.z]) + this->randomRot;
}
@@ -358,9 +356,9 @@ void EnNwc_Follow(EnNwc* this, PlayState* play) {
}
if (this->grog->actor.home.rot.x >= 20) { // all chicks have turned into adult cucco, stop and crow
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHICKEN_CRY_M);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHICKEN_CRY_M);
this->actionFunc = EnNwc_CrowAtTheEnd;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
Actor_SetScale(&this->actor, 0.01f);
}
}
@@ -380,14 +378,14 @@ void EnNwc_HopForward(EnNwc* this, PlayState* play) {
this->actor.velocity.y = 2.0f; // hop up and down
}
if ((this->stateTimer & 0xB) == 8) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHICK_SONG);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHICK_SONG);
}
// they only move forward while off the ground, which gives the visual of them hopping to move
- if (this->actor.bgCheckFlags & 0x1) { // touching floor
- this->actor.speedXZ = 0.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ this->actor.speed = 0.0f;
} else {
- this->actor.speedXZ = 2.0f;
+ this->actor.speed = 2.0f;
}
}
@@ -406,11 +404,11 @@ void EnNwc_RunAway(EnNwc* this, PlayState* play) {
this->actor.velocity.y = 2.0f; // hop up and down
}
if ((this->stateTimer & 0xB) == 8) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHICK_SONG);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHICK_SONG);
}
- this->actor.speedXZ = 2.0f;
- if (this->actor.bgCheckFlags & 0x8) { // touching wall
+ this->actor.speed = 2.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
EnNwc_ToggleState(this);
}
}
@@ -431,11 +429,11 @@ void EnNwc_Turn(EnNwc* this, PlayState* play) {
}
if ((this->stateTimer & 0xB) == 8) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CHICK_SONG);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CHICK_SONG);
}
// they only rotate when off the ground, giving the visual that they turn by hopping
- if (!(this->actor.bgCheckFlags & 0x1)) { // NOT touching floor
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->fallingRotY, 0xA, 0x1000, 0x800);
this->actor.world.rot.y = this->actor.shape.rot.y;
}
@@ -459,7 +457,7 @@ void EnNwc_Update(Actor* thisx, PlayState* play) {
EnNwc* this = THIS;
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
this->actionFunc(this, play);
if (this->hasGrownUp & 1) {
this->actor.objBankIndex = this->niwObjectIndex;
diff --git a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.h b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.h
index 8d2d34c6a..51c017dff 100644
--- a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.h
+++ b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.h
@@ -35,6 +35,4 @@ typedef struct EnNwc {
/* 0x264 */ EnNwcActionFunc actionFunc;
} EnNwc; // size = 0x268
-extern const ActorInit En_Nwc_InitVars;
-
#endif // Z_EN_NWC_H
diff --git a/src/overlays/actors/ovl_En_Okarina_Effect/overlay.cfg b/src/overlays/actors/ovl_En_Okarina_Effect/overlay.cfg
deleted file mode 100644
index 02325ddea..000000000
--- a/src/overlays/actors/ovl_En_Okarina_Effect/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Okarina_Effect
-z_en_okarina_effect.c
diff --git a/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c b/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c
index ae3b3f04c..df778f1a7 100644
--- a/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c
+++ b/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c
@@ -19,7 +19,7 @@ void func_8096B104(EnOkarinaEffect* this, PlayState* play);
void func_8096B174(EnOkarinaEffect* this, PlayState* play);
void func_8096B1FC(EnOkarinaEffect* this, PlayState* play);
-const ActorInit En_Okarina_Effect_InitVars = {
+ActorInit En_Okarina_Effect_InitVars = {
ACTOR_EN_OKARINA_EFFECT,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -42,7 +42,7 @@ void EnOkarinaEffect_Init(Actor* thisx, PlayState* play) {
EnOkarinaEffect* this = THIS;
if (play->envCtx.unk_F2[1]) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
EnOkarinaEffect_SetupAction(this, func_8096B104);
}
@@ -58,7 +58,7 @@ void func_8096B104(EnOkarinaEffect* this, PlayState* play) {
void func_8096B174(EnOkarinaEffect* this, PlayState* play) {
DECR(this->unk144);
- if ((play->pauseCtx.state == 0) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) &&
+ if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) &&
(play->msgCtx.msgLength == 0) && !FrameAdvance_IsEnabled(&play->state) && (this->unk144 == 0)) {
EnOkarinaEffect_SetupAction(this, func_8096B1FC);
}
@@ -73,7 +73,7 @@ void func_8096B1FC(EnOkarinaEffect* this, PlayState* play) {
}
}
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
diff --git a/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.h b/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.h
index 67fa74b2c..b633ab390 100644
--- a/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.h
+++ b/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.h
@@ -14,6 +14,4 @@ typedef struct EnOkarinaEffect {
/* 0x148 */ EnOkarinaEffectActionFunc actionFunc;
} EnOkarinaEffect; // size = 0x14C
-extern const ActorInit En_Okarina_Effect_InitVars;
-
#endif // Z_EN_OKARINA_EFFECT_H
diff --git a/src/overlays/actors/ovl_En_Okarina_Tag/overlay.cfg b/src/overlays/actors/ovl_En_Okarina_Tag/overlay.cfg
deleted file mode 100644
index 908da1888..000000000
--- a/src/overlays/actors/ovl_En_Okarina_Tag/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Okarina_Tag
-z_en_okarina_tag.c
diff --git a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c
index 40cb4ba24..01cbb5dda 100644
--- a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c
+++ b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c
@@ -6,7 +6,7 @@
#include "z_en_okarina_tag.h"
-#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_2000000 | ACTOR_FLAG_8000000)
+#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON)
#define THIS ((EnOkarinaTag*)thisx)
@@ -17,7 +17,7 @@ void EnOkarinaTag_Update(Actor* thisx, PlayState* play);
void func_8093E518(EnOkarinaTag* this, PlayState* play);
void func_8093E68C(EnOkarinaTag* this, PlayState* play);
-const ActorInit En_Okarina_Tag_InitVars = {
+ActorInit En_Okarina_Tag_InitVars = {
ACTOR_EN_OKARINA_TAG,
ACTORCAT_SWITCH,
FLAGS,
@@ -81,7 +81,7 @@ void func_8093E518(EnOkarinaTag* this, PlayState* play) {
var_v1 = this->unk14A;
if (var_v1 == 6) {
var_v1 = 0xA;
- if (gSaveContext.save.unk_F65 == 0) {
+ if (gSaveContext.save.saveInfo.unk_F41 == 0) {
return;
}
}
diff --git a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.h b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.h
index 8dd51805c..0dd15c1c9 100644
--- a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.h
+++ b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.h
@@ -22,6 +22,4 @@ typedef struct EnOkarinaTag {
/* 0x158 */ f32 unk158;
} EnOkarinaTag; // size = 0x15C
-extern const ActorInit En_Okarina_Tag_InitVars;
-
#endif // Z_EN_OKARINA_TAG_H
diff --git a/src/overlays/actors/ovl_En_Okuta/overlay.cfg b/src/overlays/actors/ovl_En_Okuta/overlay.cfg
deleted file mode 100644
index 8863e7169..000000000
--- a/src/overlays/actors/ovl_En_Okuta/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Okuta
-z_en_okuta.c
diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c
index 938696e88..8241c7e5c 100644
--- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c
+++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c
@@ -28,7 +28,7 @@ void func_8086F57C(EnOkuta* this, PlayState* play);
void func_8086F694(EnOkuta* this, PlayState* play);
#if 0
-const ActorInit En_Okuta_InitVars = {
+ActorInit En_Okuta_InitVars = {
ACTOR_EN_OKUTA,
ACTORCAT_ENEMY,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.h b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.h
index c23a4db36..93a68ae38 100644
--- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.h
+++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.h
@@ -14,6 +14,4 @@ typedef struct EnOkuta {
/* 0x18C */ char unk_18C[0x1A8];
} EnOkuta; // size = 0x334
-extern const ActorInit En_Okuta_InitVars;
-
#endif // Z_EN_OKUTA_H
diff --git a/src/overlays/actors/ovl_En_Onpuman/overlay.cfg b/src/overlays/actors/ovl_En_Onpuman/overlay.cfg
deleted file mode 100644
index 50f24d4ac..000000000
--- a/src/overlays/actors/ovl_En_Onpuman/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Onpuman
-z_en_onpuman.c
diff --git a/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c b/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c
index 59b3140bc..cd20f489c 100644
--- a/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c
+++ b/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c
@@ -16,7 +16,7 @@ void EnOnpuman_Update(Actor* thisx, PlayState* play);
void func_80B121D8(EnOnpuman* this, PlayState* play);
-const ActorInit En_Onpuman_InitVars = {
+ActorInit En_Onpuman_InitVars = {
ACTOR_EN_ONPUMAN,
ACTORCAT_NPC,
FLAGS,
@@ -86,14 +86,14 @@ Actor* func_80B11F44(PlayState* play) {
void func_80B11F78(EnOnpuman* this, PlayState* play) {
if (play->msgCtx.ocarinaMode == 4) {
this->actionFunc = func_80B121D8;
- if (this->actor.cutscene != -1) {
- ActorCutscene_Stop(this->actor.cutscene);
+ if (this->actor.csId != CS_ID_NONE) {
+ CutsceneManager_Stop(this->actor.csId);
}
} else if (play->msgCtx.ocarinaMode == 3) {
play_sound(NA_SE_SY_CORRECT_CHIME);
play->msgCtx.ocarinaMode = 4;
- if (this->actor.cutscene != -1) {
- ActorCutscene_Stop(this->actor.cutscene);
+ if (this->actor.csId != CS_ID_NONE) {
+ CutsceneManager_Stop(this->actor.csId);
}
this->actionFunc = func_80B121D8;
}
@@ -106,11 +106,11 @@ void func_80B1202C(EnOnpuman* this, PlayState* play2) {
switch (play->msgCtx.currentTextId) {
case 0x8D4:
this->unk_2A4 |= 1;
- func_80151938(play, 0x8DA);
+ Message_ContinueTextbox(play, 0x8DA);
break;
case 0x8DA:
- func_80151938(play, 0x8D6);
+ Message_ContinueTextbox(play, 0x8D6);
if (this->unk_2A0 != NULL) {
this->unk_2A0->home.rot.x = 0x50;
}
@@ -126,13 +126,13 @@ void func_80B1202C(EnOnpuman* this, PlayState* play2) {
}
}
if (this->unk_2A4 & 1) {
- if (this->actor.cutscene == -1) {
+ if (this->actor.csId == CS_ID_NONE) {
this->unk_2A4 &= ~1;
- } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
+ } else if (CutsceneManager_IsNext(this->actor.csId)) {
this->unk_2A4 &= ~1;
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
}
@@ -140,7 +140,7 @@ void func_80B1202C(EnOnpuman* this, PlayState* play2) {
void func_80B1217C(EnOnpuman* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && (Message_ShouldAdvance(play))) {
this->actionFunc = func_80B121D8;
- func_801477B4(play);
+ Message_CloseTextbox(play);
}
}
@@ -172,6 +172,6 @@ void EnOnpuman_Update(Actor* thisx, PlayState* play) {
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
this->actionFunc(this, play);
}
diff --git a/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.h b/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.h
index 88cd1e4df..581ea35dd 100644
--- a/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.h
+++ b/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.h
@@ -16,6 +16,4 @@ typedef struct EnOnpuman {
/* 0x2A8 */ EnOnpumanActionFunc actionFunc;
} EnOnpuman; // size = 0x2AC
-extern const ActorInit En_Onpuman_InitVars;
-
#endif // Z_EN_ONPUMAN_H
diff --git a/src/overlays/actors/ovl_En_Osk/overlay.cfg b/src/overlays/actors/ovl_En_Osk/overlay.cfg
deleted file mode 100644
index 3d963dc09..000000000
--- a/src/overlays/actors/ovl_En_Osk/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Osk
-z_en_osk.c
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 0180a2e67..3f10f6771 100644
--- a/src/overlays/actors/ovl_En_Osk/z_en_osk.c
+++ b/src/overlays/actors/ovl_En_Osk/z_en_osk.c
@@ -22,7 +22,7 @@ void func_80BF61EC(EnOsk* this, PlayState* play);
void func_80BF656C(EnOsk* this, PlayState* play);
void func_80BF6A20(EnOsk* this, PlayState* play);
-const ActorInit En_Osk_InitVars = {
+ActorInit En_Osk_InitVars = {
ACTOR_EN_OSK,
ACTORCAT_NPC,
FLAGS,
@@ -66,7 +66,7 @@ void EnOsk_Init(Actor* thisx, PlayState* play) {
this->actionFunc = func_80BF5F60;
this->unk_254 = -1;
- this->unk_256 = -1;
+ this->cueId = -1;
this->actor.flags &= ~ACTOR_FLAG_1;
switch (ENOSK_GET_F(&this->actor)) {
@@ -75,7 +75,7 @@ void EnOsk_Init(Actor* thisx, PlayState* play) {
this->jointTable, this->morphTable, 7);
Animation_PlayLoop(&this->skelAnime, &object_ikn_demo_Anim_006808);
this->actionFunc = func_80BF656C;
- this->unk_258 = 0x210;
+ this->cueType = CS_CMD_ACTOR_CUE_528;
break;
case ENOSK_2:
@@ -83,7 +83,7 @@ void EnOsk_Init(Actor* thisx, PlayState* play) {
this->jointTable, this->morphTable, 7);
Animation_PlayLoop(&this->skelAnime, &object_ikn_demo_Anim_006808);
this->actionFunc = func_80BF6A20;
- this->unk_258 = 0x211;
+ this->cueType = CS_CMD_ACTOR_CUE_529;
break;
default:
@@ -92,7 +92,7 @@ void EnOsk_Init(Actor* thisx, PlayState* play) {
this->jointTable, this->morphTable, 17);
Animation_PlayLoop(&this->skelAnime, &object_ikn_demo_Anim_0000B8);
this->actionFunc = func_80BF61EC;
- this->unk_258 = 0x212;
+ this->cueType = CS_CMD_ACTOR_CUE_530;
this->actor.home.rot.z = 0;
this->unk_25C = 0.0f;
break;
@@ -129,12 +129,12 @@ void func_80BF5F60(EnOsk* this, PlayState* play) {
}
void func_80BF5F70(EnOsk* this) {
- if ((this->unk_256 != 1) && (this->unk_256 != 6)) {
+ if ((this->cueId != 1) && (this->cueId != 6)) {
this->actor.draw = EnOsk_Draw;
Actor_SetScale(&this->actor, 0.017f);
}
- switch (this->unk_256) {
+ switch (this->cueId) {
case 1:
this->actor.draw = NULL;
break;
@@ -181,20 +181,20 @@ void func_80BF609C(EnOsk* this, PlayState* play) {
case 0:
if (Animation_OnFrame(&this->skelAnime, this->unk_25C) ||
Animation_OnFrame(&this->skelAnime, this->unk_25C + 8.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BOSU_TALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BOSU_TALK);
}
break;
case 1:
if (Animation_OnFrame(&this->skelAnime, this->unk_25C)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BOSU_TALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BOSU_TALK);
}
break;
case 2:
if (Animation_OnFrame(&this->skelAnime, this->unk_25C) ||
Animation_OnFrame(&this->skelAnime, this->unk_25C + 6.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BOSU_TALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BOSU_TALK);
}
break;
}
@@ -205,10 +205,10 @@ void func_80BF609C(EnOsk* this, PlayState* play) {
void func_80BF61EC(EnOsk* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
- if (Cutscene_CheckActorAction(play, this->unk_258)) {
- Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->unk_258));
- if (this->unk_256 != play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->unk_258)]->action) {
- this->unk_256 = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->unk_258)]->action;
+ if (Cutscene_IsCueInChannel(play, this->cueType)) {
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType));
+ if (this->cueId != play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id) {
+ this->cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id;
func_80BF5F70(this);
}
func_80BF609C(this, play);
@@ -216,7 +216,7 @@ void func_80BF61EC(EnOsk* this, PlayState* play) {
this->actor.draw = NULL;
}
- if (this->unk_256 == 6) {
+ if (this->cueId == 6) {
if (this->actor.scale.x > 0.85f * 0.001f) {
this->actor.scale.x -= 0.85f * 0.001f;
Actor_SetScale(&this->actor, this->actor.scale.x);
@@ -229,12 +229,12 @@ void func_80BF61EC(EnOsk* this, PlayState* play) {
}
void func_80BF6314(EnOsk* this) {
- if ((this->unk_256 != 1) && (this->unk_256 != 9)) {
+ if ((this->cueId != 1) && (this->cueId != 9)) {
this->actor.draw = EnOsk_Draw;
Actor_SetScale(&this->actor, 0.013f);
}
- switch (this->unk_256) {
+ switch (this->cueId) {
case 1:
this->actor.draw = NULL;
break;
@@ -280,19 +280,19 @@ void func_80BF6478(EnOsk* this) {
case 1:
if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 6.0f) ||
Animation_OnFrame(&this->skelAnime, 11.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEBU_HEAD_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEBU_HEAD_UP);
}
break;
case 3:
if (Animation_OnFrame(&this->skelAnime, 11.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEBU_HEAD_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEBU_HEAD_UP);
}
break;
case 4:
if (Animation_OnFrame(&this->skelAnime, 5.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEBU_HEAD_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEBU_HEAD_UP);
}
break;
@@ -329,10 +329,10 @@ void func_80BF656C(EnOsk* this, PlayState* play) {
}
}
- if (Cutscene_CheckActorAction(play, this->unk_258)) {
- Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->unk_258));
- if (this->unk_256 != play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->unk_258)]->action) {
- this->unk_256 = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->unk_258)]->action;
+ if (Cutscene_IsCueInChannel(play, this->cueType)) {
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType));
+ if (this->cueId != play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id) {
+ this->cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id;
func_80BF6314(this);
}
func_80BF6478(this);
@@ -340,12 +340,12 @@ void func_80BF656C(EnOsk* this, PlayState* play) {
this->actor.draw = NULL;
}
- if ((this->unk_256 == 2) && (this->actor.scale.x < 13.0f * 0.001f)) {
+ if ((this->cueId == 2) && (this->actor.scale.x < 13.0f * 0.001f)) {
this->actor.scale.x += 0.65f * 0.001f;
Actor_SetScale(&this->actor, this->actor.scale.x);
}
- if (this->unk_256 == 9) {
+ if (this->cueId == 9) {
if (this->actor.scale.x > 0.65f * 0.001f) {
this->actor.scale.x -= 0.65f * 0.001f;
Actor_SetScale(&this->actor, this->actor.scale.x);
@@ -358,12 +358,12 @@ void func_80BF656C(EnOsk* this, PlayState* play) {
}
void func_80BF67A8(EnOsk* this) {
- if ((this->unk_256 != 1) && (this->unk_256 != 8)) {
+ if ((this->cueId != 1) && (this->cueId != 8)) {
this->actor.draw = EnOsk_Draw;
Actor_SetScale(&this->actor, 0.013f);
}
- switch (this->unk_256) {
+ switch (this->cueId) {
case 1:
this->actor.draw = NULL;
break;
@@ -406,31 +406,31 @@ void func_80BF68E0(EnOsk* this) {
case 7:
if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 6.0f) ||
Animation_OnFrame(&this->skelAnime, 11.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEBU_HEAD_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEBU_HEAD_UP);
}
break;
case 2:
if (Animation_OnFrame(&this->skelAnime, 4.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEBU_HEAD_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEBU_HEAD_UP);
}
break;
case 4:
if (Animation_OnFrame(&this->skelAnime, 5.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEBU_HEAD_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEBU_HEAD_UP);
}
break;
case 5:
if ((Animation_OnFrame(&this->skelAnime, 6.0f)) || Animation_OnFrame(&this->skelAnime, 11.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEBU_HEAD_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEBU_HEAD_UP);
}
break;
case 8:
if (Animation_OnFrame(&this->skelAnime, 13.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEBU_HEAD_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DEBU_HEAD_UP);
}
break;
}
@@ -466,10 +466,10 @@ void func_80BF6A20(EnOsk* this, PlayState* play) {
}
}
- if (Cutscene_CheckActorAction(play, this->unk_258)) {
- Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->unk_258));
- if (this->unk_256 != play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->unk_258)]->action) {
- this->unk_256 = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->unk_258)]->action;
+ if (Cutscene_IsCueInChannel(play, this->cueType)) {
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType));
+ if (this->cueId != play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id) {
+ this->cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id;
func_80BF67A8(this);
}
func_80BF68E0(this);
@@ -477,7 +477,7 @@ void func_80BF6A20(EnOsk* this, PlayState* play) {
this->actor.draw = NULL;
}
- if (this->unk_256 == 8) {
+ if (this->cueId == 8) {
if (this->actor.scale.x > 0.65f * 0.001f) {
this->actor.scale.x -= 0.65f * 0.001f;
Actor_SetScale(&this->actor, this->actor.scale.x);
diff --git a/src/overlays/actors/ovl_En_Osk/z_en_osk.h b/src/overlays/actors/ovl_En_Osk/z_en_osk.h
index d8a4be4ce..c83cc5d91 100644
--- a/src/overlays/actors/ovl_En_Osk/z_en_osk.h
+++ b/src/overlays/actors/ovl_En_Osk/z_en_osk.h
@@ -18,12 +18,10 @@ typedef struct EnOsk {
/* 0x188 */ Vec3s jointTable[17];
/* 0x1EE */ Vec3s morphTable[17];
/* 0x254 */ s16 unk_254;
- /* 0x256 */ s16 unk_256;
- /* 0x258 */ u16 unk_258;
+ /* 0x256 */ s16 cueId;
+ /* 0x258 */ u16 cueType;
/* 0x25C */ f32 unk_25C;
/* 0x260 */ EnOskActionFunc actionFunc;
} EnOsk; // size = 0x264
-extern const ActorInit En_Osk_InitVars;
-
#endif // Z_EN_OSK_H
diff --git a/src/overlays/actors/ovl_En_Osn/overlay.cfg b/src/overlays/actors/ovl_En_Osn/overlay.cfg
deleted file mode 100644
index 59f9f2343..000000000
--- a/src/overlays/actors/ovl_En_Osn/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Osn
-z_en_osn.c
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 1f9cb3da8..6cc29578a 100644
--- a/src/overlays/actors/ovl_En_Osn/z_en_osn.c
+++ b/src/overlays/actors/ovl_En_Osn/z_en_osn.c
@@ -16,7 +16,69 @@ void EnOsn_Destroy(Actor* thisx, PlayState* play);
void EnOsn_Update(Actor* thisx, PlayState* play);
void EnOsn_Draw(Actor* thisx, PlayState* play);
-const ActorInit En_Osn_InitVars = {
+void EnOsn_Idle(EnOsn* this, PlayState* play);
+void EnOsn_StartCutscene(EnOsn* this, PlayState* play);
+void EnOsn_HandleCsAction(EnOsn* this, PlayState* play);
+void EnOsn_Talk(EnOsn* this, PlayState* play);
+
+#define OSN_STATE_SPECIAL_CONVERSTATION (1 << 0)
+#define OSN_STATE_MET_HUMAN (1 << 1)
+#define OSN_STATE_MET_DEKU (1 << 2)
+#define OSN_STATE_MET_GORON (1 << 3)
+#define OSN_STATE_MET_ZORA (1 << 4)
+#define OSN_STATE_END_CONVERSATION (1 << 5)
+
+#define OSN_MASK_TEXT_GREAT_FAIRY (1 << 0)
+#define OSN_MASK_TEXT_GIBDO (1 << 1)
+#define OSN_MASK_TEXT_TRUTH (1 << 2)
+#define OSN_MASK_TEXT_GIANT (1 << 3)
+#define OSN_MASK_TEXT_KAFEIS (1 << 4)
+#define OSN_MASK_TEXT_DON_GERO (1 << 5)
+#define OSN_MASK_TEXT_BLAST (1 << 6)
+#define OSN_MASK_TEXT_COUPLE (1 << 7)
+#define OSN_MASK_TEXT_SCENTS (1 << 8)
+#define OSN_MASK_TEXT_KAMARO (1 << 9)
+#define OSN_MASK_TEXT_STONE (1 << 10)
+#define OSN_MASK_TEXT_POSTMAN (1 << 11)
+#define OSN_MASK_TEXT_BUNNY (1 << 12)
+#define OSN_MASK_TEXT_CAPTAIN (1 << 13)
+#define OSN_MASK_TEXT_BREMEN (1 << 14)
+#define OSN_MASK_TEXT_CIRCUS_LEADER (1 << 15)
+#define OSN_MASK_TEXT_KEATON (1 << 16)
+#define OSN_MASK_TEXT_GARO (1 << 17)
+#define OSN_MASK_TEXT_ALL_NIGHT (1 << 18)
+#define OSN_MASK_TEXT_ROMANI (1 << 19)
+
+typedef enum {
+ /* 0 */ OSN_ANIM_IDLE,
+ /* 1 */ OSN_ANIM_ARMS_OUT,
+ /* 2 */ OSN_ANIM_BOWING,
+ /* 3 */ OSN_ANIM_REMINISCE,
+ /* 4 */ OSN_ANIM_HANDS_CLASPED,
+ /* 5 */ OSN_ANIM_BELIEVE,
+ /* 6 */ OSN_ANIM_THINK,
+ /* 7 */ OSN_ANIM_SHAKE_HEAD,
+ /* 8 */ OSN_ANIM_ORGAN_TALK,
+ /* 9 */ OSN_ANIM_ORGAN_PLAY,
+ /* 10 */ OSN_ANIM_SHAKE,
+ /* 11 */ OSN_ANIM_CHOKE,
+ /* 12 */ OSN_ANIM_DESPAIR,
+ /* 13 */ OSN_ANIM_FAST_BOWS,
+ /* 14 */ OSN_ANIM_HAND_OUT,
+ /* 15 */ OSN_ANIM_LYING_DOWN_FACE_UP,
+ /* 16 */ OSN_ANIM_LYING_DOWN_FACE_DOWN,
+ /* 17 */ OSN_ANIM_MASK_LOOK_AT,
+ /* 18 */ OSN_ANIM_TURN_AROUND_START,
+ /* 19 */ OSN_ANIM_TURN_AROUND_LOOP,
+ /* 20 */ OSN_ANIM_WALK_AWAY,
+ /* 21 */ OSN_ANIM_MASK_LOOK_FROM_START,
+ /* 22 */ OSN_ANIM_MASK_LOOK_FROM_LOOP,
+ /* 23 */ OSN_ANIM_HAND_OUT_2, // Exact same as OSN_ANIM_HAND_OUT
+ /* 24 */ OSN_ANIM_WALK_AWAY_END, // Only the last frame of OSN_ANIM_WALK_AWAY
+ /* 25 */ OSN_ANIM_MAX
+} OsnAnimation;
+
+ActorInit En_Osn_InitVars = {
ACTOR_EN_OSN,
ACTORCAT_NPC,
FLAGS,
@@ -29,31 +91,31 @@ const ActorInit En_Osn_InitVars = {
};
static AnimationInfo sAnimationInfo[] = {
- { &object_osn_Anim_0201BC, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
- { &object_osn_Anim_002F74, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
- { &object_osn_Anim_0037C4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
- { &object_osn_Anim_004320, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
- { &object_osn_Anim_004C8C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
- { &object_osn_Anim_0094E4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
- { &object_osn_Anim_009BB8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
- { &object_osn_Anim_00AC60, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
- { &object_osn_Anim_001614, 1.0f, 1.0f, 39.0f, ANIMMODE_LOOP, 0.0f },
- { &object_osn_Anim_001034, 1.0f, 1.0f, 70.0f, ANIMMODE_LOOP, 0.0f },
- { &object_osn_Anim_00AE9C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
- { &object_osn_Anim_003A1C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
- { &object_osn_Anim_0055F8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
- { &object_osn_Anim_007220, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
- { &object_osn_Anim_00A444, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
- { &object_osn_Anim_0000C4, 0.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
- { &object_osn_Anim_0000C4, 0.0f, 1.0f, 1.0f, ANIMMODE_ONCE, 0.0f },
- { &object_osn_Anim_006D48, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
- { &object_osn_Anim_001D6C, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
- { &object_osn_Anim_002634, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
- { &object_osn_Anim_008D80, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
- { &object_osn_Anim_005D78, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
- { &object_osn_Anim_006564, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
- { &object_osn_Anim_00A444, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
- { &object_osn_Anim_008D80, 0.0f, 77.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
+ { &gHappyMaskSalesmanIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+ { &gHappyMaskSalesmanArmsOutAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+ { &gHappyMaskSalesmanBowingAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+ { &gHappyMaskSalesmanReminisceAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+ { &gHappyMaskSalesmanHandsClaspedAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+ { &gHappyMaskSalesmanBelieveAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+ { &gHappyMaskSalesmanThinkAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+ { &gHappyMaskSalesmanShakeHeadAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+ { &gHappyMaskSalesmanOrganTalkAnim, 1.0f, 1.0f, 39.0f, ANIMMODE_LOOP, 0.0f },
+ { &gHappyMaskSalesmanOrganPlayAnim, 1.0f, 1.0f, 70.0f, ANIMMODE_LOOP, 0.0f },
+ { &gHappyMaskSalesmanShakeAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+ { &gHappyMaskSalesmanChokeAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+ { &gHappyMaskSalesmanDespairAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+ { &gHappyMaskSalesmanFastBowsAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+ { &gHappyMaskSalesmanHandOutAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+ { &gHappyMaskSalesmanLyingDownAnim, 0.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
+ { &gHappyMaskSalesmanLyingDownAnim, 0.0f, 1.0f, 1.0f, ANIMMODE_ONCE, 0.0f },
+ { &gHappyMaskSalesmanMaskLookAtAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+ { &gHappyMaskSalesmanTurnAroundStartAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
+ { &gHappyMaskSalesmanTurnAroundLoopAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+ { &gHappyMaskSalesmanWalkAwayAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
+ { &gHappyMaskSalesmanMaskLookFromStartAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
+ { &gHappyMaskSalesmanMaskLookFromLoopAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+ { &gHappyMaskSalesmanHandOutAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+ { &gHappyMaskSalesmanWalkAwayAnim, 0.0f, 77.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
};
static ColliderCylinderInit sCylinderInit = {
@@ -117,12 +179,7 @@ static InitChainEntry sInitChain[] = {
ICHAIN_U8(targetMode, 0, ICHAIN_STOP),
};
-void func_80AD1634(EnOsn*, PlayState*);
-void func_80AD16A8(EnOsn*, PlayState*);
-void func_80AD14C8(EnOsn*, PlayState*);
-void func_80AD19A0(EnOsn* this, PlayState* play);
-
-void func_80AD0830(EnOsn* this, PlayState* play) {
+void EnOsn_UpdateCollider(EnOsn* this, PlayState* play) {
this->collider.dim.pos.x = this->actor.world.pos.x;
this->collider.dim.pos.y = this->actor.world.pos.y;
this->collider.dim.pos.z = this->actor.world.pos.z;
@@ -130,226 +187,267 @@ void func_80AD0830(EnOsn* this, PlayState* play) {
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
}
-s32 func_80AD08B0(PlayState* play) {
+s32 EnOsn_GetMaskText(PlayState* play) {
switch (Player_GetMask(play)) {
case PLAYER_MASK_GREAT_FAIRY:
return 0x1FD6;
+
case PLAYER_MASK_GIBDO:
return 0x1FD8;
+
case PLAYER_MASK_TRUTH:
return 0x1FDA;
+
case PLAYER_MASK_GIANT:
return 0x1FDC;
+
case PLAYER_MASK_KAFEIS_MASK:
return 0x1FDE;
+
case PLAYER_MASK_DON_GERO:
return 0x1FE0;
+
case PLAYER_MASK_BLAST:
return 0x1FE2;
+
case PLAYER_MASK_COUPLE:
return 0x1FE4;
+
case PLAYER_MASK_SCENTS:
return 0x1FE6;
+
case PLAYER_MASK_KAMARO:
return 0x1FE8;
+
case PLAYER_MASK_STONE:
return 0x1FEA;
+
case PLAYER_MASK_POSTMAN:
return 0x1FEC;
+
case PLAYER_MASK_BUNNY:
return 0x1FEE;
+
case PLAYER_MASK_CAPTAIN:
return 0x1FF0;
+
case PLAYER_MASK_BREMEN:
return 0x1FF2;
+
case PLAYER_MASK_CIRCUS_LEADER:
return 0x1FF4;
+
case PLAYER_MASK_KEATON:
return 0x1FF6;
+
case PLAYER_MASK_GARO:
return 0x1FF8;
+
case PLAYER_MASK_ALL_NIGHT:
return 0x1FFA;
+
case PLAYER_MASK_ROMANI:
return 0x1FFC;
+
default:
return 0;
}
}
-void func_80AD0998(EnOsn* this) {
+void EnOsn_TurnAround(EnOsn* this) {
s16 curFrame = this->skelAnime.curFrame;
- s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_1EC].animation);
+ s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation);
- if (this->unk_1EC == 0x12 && curFrame == lastFrame) {
- this->unk_1EC = 0x13;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0x13);
+ if ((this->animIndex == OSN_ANIM_TURN_AROUND_START) && (curFrame == lastFrame)) {
+ this->animIndex = OSN_ANIM_TURN_AROUND_LOOP;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, OSN_ANIM_TURN_AROUND_LOOP);
}
}
-void func_80AD0A24(EnOsn* this) {
+void EnOsn_LookFromMask(EnOsn* this) {
s16 curFrame = this->skelAnime.curFrame;
- s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_1EC].animation);
+ s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation);
- if (this->unk_1EC == 0x15 && curFrame == lastFrame) {
- this->unk_1EC = 0x16;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0x16);
+ if ((this->animIndex == OSN_ANIM_MASK_LOOK_FROM_START) && (curFrame == lastFrame)) {
+ this->animIndex = OSN_ANIM_MASK_LOOK_FROM_LOOP;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, OSN_ANIM_MASK_LOOK_FROM_LOOP);
}
}
-void func_80AD0AB0(EnOsn* this) {
+void EnOsn_FadeOut(EnOsn* this) {
s16 curFrame = this->skelAnime.curFrame;
- s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->unk_1EC].animation);
+ s16 lastFrame = Animation_GetLastFrame(sAnimationInfo[this->animIndex].animation);
if (curFrame == lastFrame) {
- this->unk_1FA -= 8;
- if (this->unk_1FA < 8) {
- this->unk_1FA = 0;
- Actor_MarkForDeath(&this->actor);
+ this->alpha -= 8;
+ if (this->alpha < 8) {
+ this->alpha = 0;
+ Actor_Kill(&this->actor);
}
}
}
-s32 func_80AD0B38(EnOsn* this, PlayState* play) {
+s32 EnOsn_GetInitialMaskText(EnOsn* this, PlayState* play) {
switch (Player_GetMask(play)) {
case PLAYER_MASK_GREAT_FAIRY:
- if (!(this->unk_1F6 & 1)) {
- this->unk_1F6 |= 1;
+ if (!(this->maskTextFlags & OSN_MASK_TEXT_GREAT_FAIRY)) {
+ this->maskTextFlags |= OSN_MASK_TEXT_GREAT_FAIRY;
return 0x1FD1;
}
break;
+
case PLAYER_MASK_GIBDO:
- if (!(this->unk_1F6 & 2)) {
- this->unk_1F6 |= 2;
+ if (!(this->maskTextFlags & OSN_MASK_TEXT_GIBDO)) {
+ this->maskTextFlags |= OSN_MASK_TEXT_GIBDO;
return 0x1FD1;
}
break;
+
case PLAYER_MASK_TRUTH:
- if (!(this->unk_1F6 & 4)) {
- this->unk_1F6 |= 4;
+ if (!(this->maskTextFlags & OSN_MASK_TEXT_TRUTH)) {
+ this->maskTextFlags |= OSN_MASK_TEXT_TRUTH;
return 0x1FD1;
}
break;
+
case PLAYER_MASK_GIANT:
- if (!(this->unk_1F6 & 8)) {
- this->unk_1F6 |= 8;
+ if (!(this->maskTextFlags & OSN_MASK_TEXT_GIANT)) {
+ this->maskTextFlags |= OSN_MASK_TEXT_GIANT;
return 0x1FD1;
}
break;
+
case PLAYER_MASK_KAFEIS_MASK:
- if (!(this->unk_1F6 & 0x10)) {
- this->unk_1F6 |= 0x10;
+ if (!(this->maskTextFlags & OSN_MASK_TEXT_KAFEIS)) {
+ this->maskTextFlags |= OSN_MASK_TEXT_KAFEIS;
return 0x1FD1;
}
break;
+
case PLAYER_MASK_DON_GERO:
- if (!(this->unk_1F6 & 0x20)) {
- this->unk_1F6 |= 0x20;
+ if (!(this->maskTextFlags & OSN_MASK_TEXT_DON_GERO)) {
+ this->maskTextFlags |= OSN_MASK_TEXT_DON_GERO;
return 0x1FD1;
}
break;
+
case PLAYER_MASK_BLAST:
- if (!(this->unk_1F6 & 0x40)) {
- this->unk_1F6 |= 0x40;
+ if (!(this->maskTextFlags & OSN_MASK_TEXT_BLAST)) {
+ this->maskTextFlags |= OSN_MASK_TEXT_BLAST;
return 0x1FD1;
}
break;
+
case PLAYER_MASK_COUPLE:
- if (!(this->unk_1F6 & 0x80)) {
- this->unk_1F6 |= 0x80;
+ if (!(this->maskTextFlags & OSN_MASK_TEXT_COUPLE)) {
+ this->maskTextFlags |= OSN_MASK_TEXT_COUPLE;
return 0x1FD1;
}
break;
+
case PLAYER_MASK_SCENTS:
- if (!(this->unk_1F6 & 0x100)) {
- this->unk_1F6 |= 0x100;
+ if (!(this->maskTextFlags & OSN_MASK_TEXT_SCENTS)) {
+ this->maskTextFlags |= OSN_MASK_TEXT_SCENTS;
return 0x1FD1;
}
break;
+
case PLAYER_MASK_KAMARO:
- if (!(this->unk_1F6 & 0x200)) {
- this->unk_1F6 |= 0x200;
+ if (!(this->maskTextFlags & OSN_MASK_TEXT_KAMARO)) {
+ this->maskTextFlags |= OSN_MASK_TEXT_KAMARO;
return 0x1FD1;
}
break;
+
case PLAYER_MASK_STONE:
- if (!(this->unk_1F6 & 0x400)) {
- this->unk_1F6 |= 0x400;
+ if (!(this->maskTextFlags & OSN_MASK_TEXT_STONE)) {
+ this->maskTextFlags |= OSN_MASK_TEXT_STONE;
return 0x1FD1;
}
break;
+
case PLAYER_MASK_POSTMAN:
- if (!(this->unk_1F6 & 0x800)) {
- this->unk_1F6 |= 0x800;
+ if (!(this->maskTextFlags & OSN_MASK_TEXT_POSTMAN)) {
+ this->maskTextFlags |= OSN_MASK_TEXT_POSTMAN;
return 0x1FD2;
}
break;
+
case PLAYER_MASK_BUNNY:
- if (!(this->unk_1F6 & 0x1000)) {
- this->unk_1F6 |= 0x1000;
+ if (!(this->maskTextFlags & OSN_MASK_TEXT_BUNNY)) {
+ this->maskTextFlags |= OSN_MASK_TEXT_BUNNY;
return 0x1FD2;
}
break;
+
case PLAYER_MASK_CAPTAIN:
- if (!(this->unk_1F6 & 0x2000)) {
- this->unk_1F6 |= 0x2000;
+ if (!(this->maskTextFlags & OSN_MASK_TEXT_CAPTAIN)) {
+ this->maskTextFlags |= OSN_MASK_TEXT_CAPTAIN;
return 0x1FD1;
}
break;
+
case PLAYER_MASK_BREMEN:
- if (!(this->unk_1F6 & 0x4000)) {
- this->unk_1F6 |= 0x4000;
+ if (!(this->maskTextFlags & OSN_MASK_TEXT_BREMEN)) {
+ this->maskTextFlags |= OSN_MASK_TEXT_BREMEN;
return 0x1FD1;
}
break;
+
case PLAYER_MASK_CIRCUS_LEADER:
- if (!(this->unk_1F6 & 0x8000)) {
- this->unk_1F6 |= 0x8000;
+ if (!(this->maskTextFlags & OSN_MASK_TEXT_CIRCUS_LEADER)) {
+ this->maskTextFlags |= OSN_MASK_TEXT_CIRCUS_LEADER;
return 0x1FD1;
}
break;
+
case PLAYER_MASK_KEATON:
- if (!(this->unk_1F6 & 0x10000)) {
- this->unk_1F6 |= 0x10000;
+ if (!(this->maskTextFlags & OSN_MASK_TEXT_KEATON)) {
+ this->maskTextFlags |= OSN_MASK_TEXT_KEATON;
return 0x1FD1;
}
break;
+
case PLAYER_MASK_GARO:
- if (!(this->unk_1F6 & 0x20000)) {
- this->unk_1F6 |= 0x20000;
+ if (!(this->maskTextFlags & OSN_MASK_TEXT_GARO)) {
+ this->maskTextFlags |= OSN_MASK_TEXT_GARO;
return 0x1FD1;
}
break;
+
case PLAYER_MASK_ALL_NIGHT:
- if (!(this->unk_1F6 & 0x40000)) {
- this->unk_1F6 |= 0x40000;
+ if (!(this->maskTextFlags & OSN_MASK_TEXT_ALL_NIGHT)) {
+ this->maskTextFlags |= OSN_MASK_TEXT_ALL_NIGHT;
return 0x1FD1;
}
break;
+
case PLAYER_MASK_ROMANI:
- if (!(this->unk_1F6 & 0x80000)) {
- this->unk_1F6 |= 0x80000;
+ if (!(this->maskTextFlags & OSN_MASK_TEXT_ROMANI)) {
+ this->maskTextFlags |= OSN_MASK_TEXT_ROMANI;
return 0x1FD1;
}
break;
+
default:
break;
}
- this->unk_1EA |= 0x20;
- if (gSaveContext.save.day == 3 && gSaveContext.save.time >= CLOCK_TIME(5, 0) &&
- gSaveContext.save.time < CLOCK_TIME(6, 0)) {
+ this->stateFlags |= OSN_STATE_END_CONVERSATION;
+ if ((gSaveContext.save.day == 3) && (gSaveContext.save.time >= CLOCK_TIME(5, 0)) &&
+ (gSaveContext.save.time < CLOCK_TIME(6, 0))) {
return 0x2006;
}
return 0x1FCD;
}
-s32 func_80AD0E10(EnOsn* this, PlayState* play) {
+s32 EnOsn_GetInitialText(EnOsn* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if ((gSaveContext.save.inventory.items[SLOT_OCARINA] != ITEM_NONE) && CHECK_QUEST_ITEM(QUEST_SONG_HEALING)) {
- if (this->unk_1EA & 1) {
- this->unk_1EA |= 0x20;
- if ((gSaveContext.save.inventory.items[SLOT_OCARINA] != ITEM_NONE) &&
+ if ((gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] != ITEM_NONE) &&
+ CHECK_QUEST_ITEM(QUEST_SONG_HEALING)) {
+ if (this->stateFlags & OSN_STATE_SPECIAL_CONVERSTATION) {
+ this->stateFlags |= OSN_STATE_END_CONVERSATION;
+ if ((gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] != ITEM_NONE) &&
(INV_CONTENT(ITEM_MASK_DEKU) == ITEM_MASK_DEKU)) {
if ((gSaveContext.save.day == 3) && (gSaveContext.save.time >= CLOCK_TIME(5, 0)) &&
(gSaveContext.save.time < CLOCK_TIME(6, 0))) {
@@ -361,70 +459,72 @@ s32 func_80AD0E10(EnOsn* this, PlayState* play) {
}
if (player->transformation == PLAYER_FORM_DEKU) {
- if (this->unk_1EA & 4) {
- this->unk_1EA |= 0x20;
+ if (this->stateFlags & OSN_STATE_MET_DEKU) {
+ this->stateFlags |= OSN_STATE_END_CONVERSATION;
if ((gSaveContext.save.day == 3) && (gSaveContext.save.time >= CLOCK_TIME(5, 0)) &&
(gSaveContext.save.time < CLOCK_TIME(6, 0))) {
return 0x2006;
}
return 0x1FCD;
}
- this->unk_1EA |= 4;
+ this->stateFlags |= OSN_STATE_MET_DEKU;
return 0x1FC8;
}
if (player->transformation == PLAYER_FORM_GORON) {
- if (this->unk_1EA & 8) {
- this->unk_1EA |= 0x20;
+ if (this->stateFlags & OSN_STATE_MET_GORON) {
+ this->stateFlags |= OSN_STATE_END_CONVERSATION;
if ((gSaveContext.save.day == 3) && (gSaveContext.save.time >= CLOCK_TIME(5, 0)) &&
(gSaveContext.save.time < CLOCK_TIME(6, 0))) {
return 0x2006;
+ } else {
+ return 0x1FCD;
}
- return 0x1FCD;
}
- this->unk_1EA |= 8;
- if (gSaveContext.save.weekEventReg[76] & 0x20) {
+ this->stateFlags |= OSN_STATE_MET_GORON;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_76_20)) {
return 0x1FC8;
+ } else {
+ SET_WEEKEVENTREG(WEEKEVENTREG_76_20);
+ return 0x1FCE;
}
-
- gSaveContext.save.weekEventReg[76] |= 0x20;
- return 0x1FCE;
}
if (player->transformation == PLAYER_FORM_ZORA) {
- if (this->unk_1EA & 0x10) {
- this->unk_1EA |= 0x20;
+ if (this->stateFlags & OSN_STATE_MET_ZORA) {
+ this->stateFlags |= OSN_STATE_END_CONVERSATION;
if ((gSaveContext.save.day == 3) && (gSaveContext.save.time >= CLOCK_TIME(5, 0)) &&
(gSaveContext.save.time < CLOCK_TIME(6, 0))) {
return 0x2006;
}
return 0x1FCD;
}
- this->unk_1EA |= 0x10;
- if (gSaveContext.save.weekEventReg[76] & 0x40) {
+
+ this->stateFlags |= OSN_STATE_MET_ZORA;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_76_40)) {
return 0x1FC8;
}
- gSaveContext.save.weekEventReg[76] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_76_40);
return 0x1FD0;
}
if (Player_GetMask(play) == PLAYER_MASK_NONE) {
- if (this->unk_1EA & 2) {
- this->unk_1EA |= 0x20;
+ if (this->stateFlags & OSN_STATE_MET_HUMAN) {
+ this->stateFlags |= OSN_STATE_END_CONVERSATION;
if ((gSaveContext.save.day == 3) && (gSaveContext.save.time >= CLOCK_TIME(5, 0)) &&
(gSaveContext.save.time < CLOCK_TIME(6, 0))) {
return 0x2006;
}
return 0x1FCD;
}
- this->unk_1EA |= 2;
+ this->stateFlags |= OSN_STATE_MET_HUMAN;
return 0x1FC8;
}
- return func_80AD0B38(this, play);
+ return EnOsn_GetInitialMaskText(this, play);
}
- this->unk_1EA |= 0x20;
+ this->stateFlags |= OSN_STATE_END_CONVERSATION;
if ((gSaveContext.save.day == 3) && (gSaveContext.save.time >= CLOCK_TIME(5, 0)) &&
(gSaveContext.save.time < CLOCK_TIME(6, 0))) {
return 0x2004;
@@ -433,123 +533,123 @@ s32 func_80AD0E10(EnOsn* this, PlayState* play) {
return 0x1FAE;
}
-void func_80AD10FC(EnOsn* this, PlayState* play) {
- switch (this->unk_1F4) {
+void EnOsn_HandleConversation(EnOsn* this, PlayState* play) {
+ switch (this->textId) {
case 0x1FC8:
- this->unk_1F4 = 0x1FC9;
+ this->textId = 0x1FC9;
break;
case 0x1FC9:
- this->unk_1F4 = 0x1FCA;
+ this->textId = 0x1FCA;
break;
case 0x1FCA:
- if ((gSaveContext.save.day == 3 && gSaveContext.save.time >= CLOCK_TIME(5, 0)) &&
- gSaveContext.save.time < CLOCK_TIME(6, 0)) {
- this->unk_1F4 = 0x2007;
+ if ((gSaveContext.save.day == 3) && (gSaveContext.save.time >= CLOCK_TIME(5, 0)) &&
+ (gSaveContext.save.time < CLOCK_TIME(6, 0))) {
+ this->textId = 0x2007;
} else {
- this->unk_1F4 = 0x1FCB;
+ this->textId = 0x1FCB;
}
break;
case 0x1FCB:
case 0x2007:
- this->unk_1F4 = 0x1FCC;
- this->unk_1EA |= 0x20;
+ this->textId = 0x1FCC;
+ this->stateFlags |= OSN_STATE_END_CONVERSATION;
break;
case 0x1FCE:
case 0x1FD0:
- this->unk_1F4 = 0x1FCF;
+ this->textId = 0x1FCF;
break;
case 0x1FCF:
- this->unk_1F4 = 0x1FCA;
+ this->textId = 0x1FCA;
break;
case 0x1FD1:
case 0x1FD2:
- this->unk_1F4 = func_80AD08B0(play);
+ this->textId = EnOsn_GetMaskText(play);
break;
case 0x1FD6:
- this->unk_1F4 = 0x1FD7;
+ this->textId = 0x1FD7;
break;
case 0x1FD8:
- this->unk_1F4 = 0x1FD9;
+ this->textId = 0x1FD9;
break;
case 0x1FDA:
- this->unk_1F4 = 0x1FDB;
+ this->textId = 0x1FDB;
break;
case 0x1FDC:
- this->unk_1F4 = 0x1FDD;
+ this->textId = 0x1FDD;
break;
case 0x1FDE:
- this->unk_1F4 = 0x1FDF;
+ this->textId = 0x1FDF;
break;
case 0x1FE0:
- this->unk_1F4 = 0x1FE1;
+ this->textId = 0x1FE1;
break;
case 0x1FE2:
- this->unk_1F4 = 0x1FE3;
+ this->textId = 0x1FE3;
break;
case 0x1FE4:
- this->unk_1F4 = 0x1FE5;
+ this->textId = 0x1FE5;
break;
case 0x1FE6:
- this->unk_1F4 = 0x1FE7;
+ this->textId = 0x1FE7;
break;
case 0x1FE8:
- this->unk_1F4 = 0x1FE9;
+ this->textId = 0x1FE9;
break;
case 0x1FEA:
- this->unk_1F4 = 0x1FEB;
+ this->textId = 0x1FEB;
break;
case 0x1FEC:
- this->unk_1F4 = 0x1FED;
+ this->textId = 0x1FED;
break;
case 0x1FEE:
- this->unk_1F4 = 0x1FEF;
+ this->textId = 0x1FEF;
break;
case 0x1FF0:
- this->unk_1F4 = 0x1FF1;
+ this->textId = 0x1FF1;
break;
case 0x1FF2:
- this->unk_1F4 = 0x1FF3;
+ this->textId = 0x1FF3;
break;
case 0x1FF4:
- this->unk_1F4 = 0x1FF5;
+ this->textId = 0x1FF5;
break;
case 0x1FF6:
- this->unk_1F4 = 0x1FF7;
+ this->textId = 0x1FF7;
break;
case 0x1FF8:
- this->unk_1F4 = 0x1FF9;
+ this->textId = 0x1FF9;
break;
case 0x1FFA:
- this->unk_1F4 = 0x1FFB;
+ this->textId = 0x1FFB;
break;
case 0x1FFC:
- this->unk_1F4 = 0x1FFD;
+ this->textId = 0x1FFD;
break;
case 0x1FD7:
@@ -563,7 +663,7 @@ void func_80AD10FC(EnOsn* this, PlayState* play) {
case 0x1FF7:
case 0x1FF9:
case 0x1FFB:
- this->unk_1F4 = 0x1FD3;
+ this->textId = 0x1FD3;
break;
case 0x1FD9:
@@ -574,206 +674,230 @@ void func_80AD10FC(EnOsn* this, PlayState* play) {
case 0x1FEF:
case 0x1FF5:
case 0x1FFD:
- this->unk_1F4 = 0x1FD4;
+ this->textId = 0x1FD4;
break;
case 0x1FE5:
- this->unk_1F4 = 0x1FFE;
+ this->textId = 0x1FFE;
break;
case 0x1FD3:
case 0x1FD4:
case 0x1FFE:
- this->unk_1F4 = 0x1FD5;
- this->unk_1EA |= 0x20;
+ this->textId = 0x1FD5;
+ this->stateFlags |= OSN_STATE_END_CONVERSATION;
}
- Message_StartTextbox(play, this->unk_1F4, &this->actor);
+ Message_StartTextbox(play, this->textId, &this->actor);
}
-void func_80AD1398(EnOsn* this) {
- this->cutscene = this->actor.cutscene;
- if ((gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) ||
+void EnOsn_InitCutscene(EnOsn* this) {
+ this->csId = this->actor.csId;
+ if ((gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] == ITEM_NONE) ||
(INV_CONTENT(ITEM_MASK_DEKU) == ITEM_MASK_DEKU)) {
- this->cutscene = ActorCutscene_GetAdditionalCutscene(this->cutscene);
+ this->csId = CutsceneManager_GetAdditionalCsId(this->csId);
- if ((gSaveContext.save.inventory.items[SLOT_OCARINA] != ITEM_NONE) ||
+ if ((gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] != ITEM_NONE) ||
(INV_CONTENT(ITEM_MASK_DEKU) == ITEM_MASK_DEKU)) {
- this->cutscene = ActorCutscene_GetAdditionalCutscene(this->cutscene);
+ this->csId = CutsceneManager_GetAdditionalCsId(this->csId);
}
}
}
-void func_80AD144C(EnOsn* this, PlayState* play) {
- u32 sp1C = Flags_GetSwitch(play, 0);
- this->cutscene = this->actor.cutscene;
+void EnOsn_ChooseAction(EnOsn* this, PlayState* play) {
+ u32 isFlagSet = Flags_GetSwitch(play, 0);
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
- if (sp1C == 0) {
- this->actionFunc = func_80AD16A8;
+ this->csId = this->actor.csId;
+
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, OSN_ANIM_IDLE);
+ if (!isFlagSet) {
+ this->actionFunc = EnOsn_HandleCsAction;
} else {
- this->actionFunc = func_80AD14C8;
- }
-}
-
-void func_80AD14C8(EnOsn* this, PlayState* play) {
- s16 temp_v1 = this->actor.yawTowardsPlayer - this->actor.shape.rot.y;
-
- if (gSaveContext.save.inventory.items[SLOT_OCARINA] != ITEM_NONE && !CHECK_QUEST_ITEM(QUEST_SONG_HEALING)) {
- if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- this->actionFunc = func_80AD1634;
- } else if ((((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) && (temp_v1 < 0x4000)) &&
- (temp_v1 > -0x4000)) {
- func_800B863C(&this->actor, play);
- this->actor.textId = 0xFFFF;
- }
- } else {
- if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- this->unk_1F4 = func_80AD0E10(this, play);
- Message_StartTextbox(play, this->unk_1F4, &this->actor);
- this->actionFunc = func_80AD19A0;
- } else if ((((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) && (temp_v1 < 0x4000)) &&
- (temp_v1 > -0x4000)) {
- func_800B863C(&this->actor, play);
- }
- }
-}
-
-void func_80AD1634(EnOsn* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_Start(this->cutscene, &this->actor);
- this->actionFunc = func_80AD16A8;
- return;
- }
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- }
- ActorCutscene_SetIntentToPlay(this->cutscene);
-}
-
-void func_80AD16A8(EnOsn* this, PlayState* play) {
- u8 pad;
- s32 actionIndex;
-
- if (Cutscene_CheckActorAction(play, 130)) {
- actionIndex = Cutscene_GetActorActionIndex(play, 130);
- this->unk_1F0 = 0;
- if (this->unk_1ED != play->csCtx.actorActions[actionIndex]->action) {
- this->unk_1ED = play->csCtx.actorActions[actionIndex]->action;
- switch (play->csCtx.actorActions[actionIndex]->action) {
- case 1:
- this->unk_1EC = 2;
- break;
- case 2:
- this->unk_1EC = 1;
- break;
- case 3:
- this->unk_1EC = 7;
- break;
- case 4:
- this->unk_1EC = 3;
- break;
- case 5:
- this->unk_1EC = 6;
- break;
- case 6:
- this->unk_1EC = 5;
- break;
- case 7:
- this->unk_1EC = 4;
- break;
- case 8:
- this->unk_1EC = 0;
- break;
- case 10:
- this->unk_1EC = 8;
- break;
- case 11:
- this->unk_1EC = 9;
- break;
- case 13:
- this->unk_1EC = 0xA;
- break;
- case 15:
- this->unk_1EC = 0xB;
- break;
- case 16:
- this->unk_1EC = 0xC;
- break;
- case 17:
- this->unk_1EC = 0xD;
- break;
- case 18:
- this->unk_1EC = 0xE;
- break;
- case 19:
- this->unk_1EC = 0x11;
- break;
- case 20:
- this->unk_1EC = 0x12;
- break;
- case 21:
- this->unk_1EC = 0x14;
- break;
- case 22:
- this->unk_1EC = 0x15;
- break;
- case 23:
- this->unk_1EC = 0x17;
- break;
- case 24:
- this->unk_1EC = 0x18;
- break;
- default:
- this->unk_1EC = 0;
- break;
- }
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->unk_1EC);
- }
-
- if ((this->unk_1EC == 5) && (play->sceneId == SCENE_SPOT00) && (gSaveContext.sceneLayer == 0xB) &&
- (play->csCtx.frames == 400)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_OMVO00);
- }
- if (this->unk_1EC == 0x12) {
- func_80AD0998(this);
- }
- if (this->unk_1EC == 0x15) {
- func_80AD0A24(this);
- }
- if (this->unk_1EC == 0x18) {
- func_80AD0AB0(this);
- }
- if ((this->unk_1EC == 0x14) &&
- (((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_PlaySfxAtPos(&this->actor, NA_SE_EV_OMENYA_WALK);
- }
- Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex);
- } else {
- this->unk_1F0 = 1;
- this->unk_1ED = 0x63;
- func_80AD144C(this, play);
- }
-}
-
-void func_80AD19A0(EnOsn* this, PlayState* play) {
- u8 talkState = Message_GetState(&play->msgCtx);
-
- if (((talkState == TEXT_STATE_DONE) || (talkState == TEXT_STATE_5)) && Message_ShouldAdvance(play)) {
- if (this->unk_1EA & 0x20) {
- this->unk_1EA &= ~0x20;
- play->msgCtx.msgMode = 0x43;
- play->msgCtx.stateTimer = 4;
- this->actionFunc = func_80AD14C8;
- } else {
- func_80AD10FC(this, play);
- }
+ this->actionFunc = EnOsn_Idle;
}
}
void EnOsn_Idle(EnOsn* this, PlayState* play) {
+ s16 yaw = this->actor.yawTowardsPlayer - this->actor.shape.rot.y;
+
+ if ((gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] != ITEM_NONE) &&
+ !CHECK_QUEST_ITEM(QUEST_SONG_HEALING)) {
+ if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
+ this->actionFunc = EnOsn_StartCutscene;
+ } else if (((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) && (yaw < 0x4000) &&
+ (yaw > -0x4000)) {
+ func_800B863C(&this->actor, play);
+ this->actor.textId = 0xFFFF;
+ }
+ } else if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
+ this->textId = EnOsn_GetInitialText(this, play);
+ Message_StartTextbox(play, this->textId, &this->actor);
+ this->actionFunc = EnOsn_Talk;
+ } else if (((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) && (yaw < 0x4000) && (yaw > -0x4000)) {
+ func_800B863C(&this->actor, play);
+ }
+}
+
+void EnOsn_StartCutscene(EnOsn* this, PlayState* play) {
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_Start(this->csId, &this->actor);
+ this->actionFunc = EnOsn_HandleCsAction;
+ } else {
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ }
+ CutsceneManager_Queue(this->csId);
+ }
+}
+
+void EnOsn_HandleCsAction(EnOsn* this, PlayState* play) {
+ u8 pad;
+ s32 cueChannel;
+
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_130)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_130);
+ this->shouldRotateHead = false;
+ if (this->cueId != play->csCtx.actorCues[cueChannel]->id) {
+ this->cueId = play->csCtx.actorCues[cueChannel]->id;
+ switch (play->csCtx.actorCues[cueChannel]->id) {
+ case 1:
+ this->animIndex = OSN_ANIM_BOWING;
+ break;
+
+ case 2:
+ this->animIndex = OSN_ANIM_ARMS_OUT;
+ break;
+
+ case 3:
+ this->animIndex = OSN_ANIM_SHAKE_HEAD;
+ break;
+
+ case 4:
+ this->animIndex = OSN_ANIM_REMINISCE;
+ break;
+
+ case 5:
+ this->animIndex = OSN_ANIM_THINK;
+ break;
+
+ case 6:
+ this->animIndex = OSN_ANIM_BELIEVE;
+ break;
+
+ case 7:
+ this->animIndex = OSN_ANIM_HANDS_CLASPED;
+ break;
+
+ case 8:
+ this->animIndex = OSN_ANIM_IDLE;
+ break;
+
+ case 10:
+ this->animIndex = OSN_ANIM_ORGAN_TALK;
+ break;
+
+ case 11:
+ this->animIndex = OSN_ANIM_ORGAN_PLAY;
+ break;
+
+ case 13:
+ this->animIndex = OSN_ANIM_SHAKE;
+ break;
+
+ case 15:
+ this->animIndex = OSN_ANIM_CHOKE;
+ break;
+
+ case 16:
+ this->animIndex = OSN_ANIM_DESPAIR;
+ break;
+
+ case 17:
+ this->animIndex = OSN_ANIM_FAST_BOWS;
+ break;
+
+ case 18:
+ this->animIndex = OSN_ANIM_HAND_OUT;
+ break;
+
+ case 19:
+ this->animIndex = OSN_ANIM_MASK_LOOK_AT;
+ break;
+
+ case 20:
+ this->animIndex = OSN_ANIM_TURN_AROUND_START;
+ break;
+
+ case 21:
+ this->animIndex = OSN_ANIM_WALK_AWAY;
+ break;
+
+ case 22:
+ this->animIndex = OSN_ANIM_MASK_LOOK_FROM_START;
+ break;
+
+ case 23:
+ this->animIndex = OSN_ANIM_HAND_OUT_2;
+ break;
+
+ case 24:
+ this->animIndex = OSN_ANIM_WALK_AWAY_END;
+ break;
+
+ default:
+ this->animIndex = OSN_ANIM_IDLE;
+ break;
+ }
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex);
+ }
+
+ if ((this->animIndex == OSN_ANIM_BELIEVE) && (play->sceneId == SCENE_SPOT00) &&
+ (gSaveContext.sceneLayer == 0xB) && (play->csCtx.curFrame == 400)) {
+ Actor_PlaySfx(&this->actor, NA_SE_VO_OMVO00);
+ }
+
+ if (this->animIndex == OSN_ANIM_TURN_AROUND_START) {
+ EnOsn_TurnAround(this);
+ }
+
+ if (this->animIndex == OSN_ANIM_MASK_LOOK_FROM_START) {
+ EnOsn_LookFromMask(this);
+ }
+
+ if (this->animIndex == OSN_ANIM_WALK_AWAY_END) {
+ EnOsn_FadeOut(this);
+ }
+
+ 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)))) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_OMENYA_WALK);
+ }
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
+ } else {
+ this->shouldRotateHead = true;
+ this->cueId = 99;
+ EnOsn_ChooseAction(this, play);
+ }
+}
+
+void EnOsn_Talk(EnOsn* this, PlayState* play) {
+ u8 talkState = Message_GetState(&play->msgCtx);
+
+ if (((talkState == TEXT_STATE_DONE) || (talkState == TEXT_STATE_5)) && Message_ShouldAdvance(play)) {
+ if (this->stateFlags & OSN_STATE_END_CONVERSATION) {
+ this->stateFlags &= ~OSN_STATE_END_CONVERSATION;
+ play->msgCtx.msgMode = 0x43;
+ play->msgCtx.stateTimer = 4;
+ this->actionFunc = EnOsn_Idle;
+ } else {
+ EnOsn_HandleConversation(this, play);
+ }
+ }
+}
+
+void EnOsn_DoNothing(EnOsn* this, PlayState* play) {
}
void EnOsn_Init(Actor* thisx, PlayState* play) {
@@ -782,55 +906,55 @@ void EnOsn_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sInitChain);
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f);
- SkelAnime_InitFlex(play, &this->skelAnime, &object_osn_Skel_0202F0, &object_osn_Anim_0201BC, NULL, NULL, 0);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gHappyMaskSalesmanSkel, &gHappyMaskSalesmanIdleAnim, NULL, NULL, 0);
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
- this->unk_1FA = 255;
- switch (ENOSN_GET_3(&this->actor)) {
- case 0:
+ this->alpha = 255;
+
+ switch (ENOSN_GET_TYPE(&this->actor)) {
+ case OSN_TYPE_CHOOSE:
if (((gSaveContext.save.entrance == ENTRANCE(CLOCK_TOWER_INTERIOR, 2)) ||
(gSaveContext.save.entrance == ENTRANCE(CLOCK_TOWER_INTERIOR, 3))) ||
(gSaveContext.save.entrance == ENTRANCE(CLOCK_TOWER_INTERIOR, 6))) {
- this->unk_1EA |= 1;
+ this->stateFlags |= OSN_STATE_SPECIAL_CONVERSTATION;
}
- this->unk_1F0 = 1;
+ this->shouldRotateHead = true;
if (play->sceneId == SCENE_INSIDETOWER) {
if ((gSaveContext.save.entrance == ENTRANCE(CLOCK_TOWER_INTERIOR, 2)) ||
(gSaveContext.save.entrance == ENTRANCE(CLOCK_TOWER_INTERIOR, 6))) {
- this->actionFunc = func_80AD16A8;
- return;
+ this->actionFunc = EnOsn_HandleCsAction;
+ } else if (gSaveContext.save.entrance == ENTRANCE(CLOCK_TOWER_INTERIOR, 3)) {
+ EnOsn_InitCutscene(this);
+ this->actionFunc = EnOsn_StartCutscene;
+ } else {
+ EnOsn_ChooseAction(this, play);
}
- if (gSaveContext.save.entrance == ENTRANCE(CLOCK_TOWER_INTERIOR, 3)) {
- func_80AD1398(this);
- this->actionFunc = func_80AD1634;
- return;
- }
- func_80AD144C(this, play);
- return;
+ } else {
+ EnOsn_ChooseAction(this, play);
}
- func_80AD144C(this, play);
break;
- case 1:
- this->unk_1EC = 0xF;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->unk_1EC);
- this->actionFunc = EnOsn_Idle;
+ case OSN_TYPE_LIE_FACE_DOWN:
+ this->animIndex = OSN_ANIM_LYING_DOWN_FACE_UP;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex);
+ this->actionFunc = EnOsn_DoNothing;
break;
- case 2:
- this->unk_1EC = 0x10;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->unk_1EC);
- this->actionFunc = EnOsn_Idle;
+ case OSN_TYPE_LIE_FACE_UP:
+ this->animIndex = OSN_ANIM_LYING_DOWN_FACE_DOWN;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex);
+ this->actionFunc = EnOsn_DoNothing;
break;
- case 3:
+ case OSN_TYPE_CUTSCENE:
this->actor.flags &= ~ACTOR_FLAG_1;
- this->actionFunc = func_80AD16A8;
+ this->actionFunc = EnOsn_HandleCsAction;
break;
default:
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
+ break;
}
}
@@ -844,33 +968,35 @@ void EnOsn_Destroy(Actor* thisx, PlayState* play) {
void EnOsn_Update(Actor* thisx, PlayState* play) {
s32 pad;
EnOsn* this = THIS;
- u32 sp34;
+ u32 isFlagSet = Flags_GetSwitch(play, 0);
- sp34 = Flags_GetSwitch(play, 0);
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
SkelAnime_Update(&this->skelAnime);
- if (!ENOSN_GET_3(&this->actor)) {
- if (sp34 != 0) {
+
+ if (ENOSN_GET_TYPE(&this->actor) == OSN_TYPE_CHOOSE) {
+ if (isFlagSet) {
this->actor.flags |= ACTOR_FLAG_1;
- func_80AD0830(this, play);
+ EnOsn_UpdateCollider(this, play);
this->actor.draw = EnOsn_Draw;
} else {
this->actor.draw = NULL;
this->actor.flags &= ~ACTOR_FLAG_1;
}
}
- Actor_TrackPlayer(play, &this->actor, &this->unk_1D8, &this->unk_1DE, this->actor.focus.pos);
+
+ Actor_TrackPlayer(play, &this->actor, &this->headRot, &this->torsoRot, this->actor.focus.pos);
}
s32 EnOsn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx,
Gfx** gfx) {
EnOsn* this = (EnOsn*)thisx;
- if (this->unk_1F0 && limbIndex == 11) {
- Matrix_RotateXS(this->unk_1D8.y, MTXMODE_APPLY);
+ if (this->shouldRotateHead && (limbIndex == HAPPY_MASK_SALESMAN_LIMB_HEAD)) {
+ Matrix_RotateXS(this->headRot.y, MTXMODE_APPLY);
}
- if ((this->unk_1EC == 9 || this->unk_1EC == 8) && limbIndex == 10) {
+ if (((this->animIndex == OSN_ANIM_ORGAN_PLAY) || (this->animIndex == OSN_ANIM_ORGAN_TALK)) &&
+ (limbIndex == HAPPY_MASK_SALESMAN_LIMB_BACKPACK)) {
*dList = NULL;
}
return false;
@@ -878,48 +1004,51 @@ s32 EnOsn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
void EnOsn_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx, Gfx** gfx) {
EnOsn* this = (EnOsn*)thisx;
- Vec3f sp30 = { 0.0f, 0.0f, 0.0f };
- Vec3s sp28 = { 0x9920, -0x384, -0x320 };
+ Vec3f headOffset = { 0.0f, 0.0f, 0.0f };
+ Vec3s leftHandRot = { 0x9920, -0x384, -0x320 };
- if (limbIndex == 11) {
- Matrix_MultVec3f(&sp30, &thisx->focus.pos);
+ if (limbIndex == HAPPY_MASK_SALESMAN_LIMB_HEAD) {
+ Matrix_MultVec3f(&headOffset, &this->actor.focus.pos);
}
- if (((this->unk_1EC == 17) || (this->unk_1EC == 21) || (this->unk_1EC == 22)) && (limbIndex == 6)) {
+ if (((this->animIndex == OSN_ANIM_MASK_LOOK_AT) || (this->animIndex == OSN_ANIM_MASK_LOOK_FROM_START) ||
+ (this->animIndex == OSN_ANIM_MASK_LOOK_FROM_LOOP)) &&
+ (limbIndex == HAPPY_MASK_SALESMAN_LIMB_LEFT_HAND)) {
Matrix_Push();
Matrix_Translate(-400.0f, 1100.0f, -200.0f, MTXMODE_APPLY);
- Matrix_RotateXS(sp28.x, MTXMODE_APPLY);
- Matrix_RotateYS(sp28.y, MTXMODE_APPLY);
- Matrix_RotateZS(sp28.z, MTXMODE_APPLY);
+ Matrix_RotateXS(leftHandRot.x, MTXMODE_APPLY);
+ Matrix_RotateYS(leftHandRot.y, MTXMODE_APPLY);
+ Matrix_RotateZS(leftHandRot.z, MTXMODE_APPLY);
gSPMatrix((*gfx)++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList((*gfx)++, &object_osn_DL_0192A0);
+ gSPDisplayList((*gfx)++, &gHappyMaskSalesmanMajorasMaskDL);
Matrix_Pop();
}
}
void EnOsn_Draw(Actor* thisx, PlayState* play) {
- static TexturePtr D_80AD2588 = object_osn_Tex_0166F8;
- static TexturePtr D_80AD258C = object_osn_Tex_016EF8;
- static TexturePtr D_80AD2590 = object_osn_Tex_0176F8;
- static TexturePtr D_80AD2594 = object_osn_Tex_017EF8;
- static TexturePtr D_80AD2598 = object_osn_Tex_0182F8;
+ static TexturePtr sEyeClosedHappyTex = gHappyMaskSalesmanEyeClosedHappyTex;
+ static TexturePtr sEyeOpenTex = gHappyMaskSalesmanEyeOpenTex;
+ static TexturePtr sEyeClosedAngryTex = gHappyMaskSalesmanEyeClosedAngryTex;
+ static TexturePtr sSmileTex = gHappyMaskSalesmanSmileTex;
+ static TexturePtr sFrownTex = gHappyMaskSalesmanFrownTex;
s32 pad;
EnOsn* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
- if (this->unk_1FA == 0xFF) {
+ if (this->alpha == 255) {
func_8012C28C(play->state.gfxCtx);
- if ((this->unk_1EC == 0xB) || (this->unk_1EC == 0xC) || (this->unk_1EC == 0x17) ||
- (play->msgCtx.currentTextId == 0x1FCA)) {
- gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80AD258C));
- gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80AD2594));
- } else if ((this->unk_1EC == 7) || (this->unk_1EC == 3) || (this->unk_1EC == 0xD)) {
- gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80AD2590));
- gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80AD2598));
+ 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));
+ gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sSmileTex));
+ } else if ((this->animIndex == OSN_ANIM_SHAKE_HEAD) || (this->animIndex == OSN_ANIM_REMINISCE) ||
+ (this->animIndex == OSN_ANIM_FAST_BOWS)) {
+ gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeClosedAngryTex));
+ gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sFrownTex));
} else {
- gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80AD2588));
- gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80AD2594));
+ gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeClosedHappyTex));
+ gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sSmileTex));
}
gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255);
Scene_SetRenderModeXlu(play, 0, 1);
@@ -928,9 +1057,9 @@ void EnOsn_Draw(Actor* thisx, PlayState* play) {
EnOsn_OverrideLimbDraw, EnOsn_PostLimbDraw, &this->actor, POLY_OPA_DISP);
} else {
func_8012C2DC(play->state.gfxCtx);
- gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(D_80AD2588));
- gSPSegment(POLY_XLU_DISP++, 0x09, Lib_SegmentedToVirtual(D_80AD2594));
- gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, this->unk_1FA);
+ 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);
Scene_SetRenderModeXlu(play, 1, 2);
POLY_XLU_DISP =
SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
diff --git a/src/overlays/actors/ovl_En_Osn/z_en_osn.h b/src/overlays/actors/ovl_En_Osn/z_en_osn.h
index fdc8ed2c7..906c0b6c9 100644
--- a/src/overlays/actors/ovl_En_Osn/z_en_osn.h
+++ b/src/overlays/actors/ovl_En_Osn/z_en_osn.h
@@ -7,27 +7,32 @@ struct EnOsn;
typedef void (*EnOsnActionFunc)(struct EnOsn*, PlayState*);
+#define ENOSN_GET_TYPE(this) ((thisx)->params & 3)
+
+typedef enum {
+ /* 0 */ OSN_TYPE_CHOOSE, // Will choose between Idle and Cutscene
+ /* 1 */ OSN_TYPE_LIE_FACE_DOWN,
+ /* 2 */ OSN_TYPE_LIE_FACE_UP,
+ /* 3 */ OSN_TYPE_CUTSCENE
+} OsnType;
+
typedef struct EnOsn {
/* 0x000 */ Actor actor;
/* 0x144 */ ColliderCylinder collider;
/* 0x190 */ SkelAnime skelAnime;
/* 0x1D4 */ EnOsnActionFunc actionFunc;
- /* 0x1D8 */ Vec3s unk_1D8;
- /* 0x1DE */ Vec3s unk_1DE;
+ /* 0x1D8 */ Vec3s headRot;
+ /* 0x1DE */ Vec3s torsoRot;
/* 0x1E4 */ UNK_TYPE1 unk_1E4[0x6];
- /* 0x1EA */ u16 unk_1EA;
- /* 0x1EC */ u8 unk_1EC;
- /* 0x1ED */ u8 unk_1ED;
- /* 0x1EE */ s16 cutscene;
- /* 0x1F0 */ u8 unk_1F0;
+ /* 0x1EA */ u16 stateFlags;
+ /* 0x1EC */ u8 animIndex;
+ /* 0x1ED */ u8 cueId;
+ /* 0x1EE */ s16 csId;
+ /* 0x1F0 */ u8 shouldRotateHead;
/* 0x1F1 */ UNK_TYPE1 unk_1F1[0x3];
- /* 0x1F4 */ u16 unk_1F4;
- /* 0x1F6 */ s32 unk_1F6;
- /* 0x1FA */ u8 unk_1FA;
+ /* 0x1F4 */ u16 textId;
+ /* 0x1F6 */ s32 maskTextFlags;
+ /* 0x1FA */ u8 alpha;
} EnOsn; // size = 0x1FB
-extern const ActorInit En_Osn_InitVars;
-
-#define ENOSN_GET_3(this) ((thisx)->params & 3)
-
#endif // Z_EN_OSN_H
diff --git a/src/overlays/actors/ovl_En_Ossan/overlay.cfg b/src/overlays/actors/ovl_En_Ossan/overlay.cfg
deleted file mode 100644
index be58d6c1e..000000000
--- a/src/overlays/actors/ovl_En_Ossan/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ossan
-z_en_ossan.c
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 618a30986..2444acca5 100644
--- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c
+++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c
@@ -92,7 +92,7 @@ typedef enum {
/* 12 */ ANI_ANIM_MAX
} AniAnimation;
-const ActorInit En_Ossan_InitVars = {
+ActorInit En_Ossan_InitVars = {
ACTOR_EN_OSSAN,
ACTORCAT_NPC,
FLAGS,
@@ -212,19 +212,19 @@ void EnOssan_CheckValidSpawn(EnOssan* this) {
case 2:
if (gSaveContext.save.time <= CLOCK_TIME(21, 30) && gSaveContext.save.time > CLOCK_TIME(6, 00)) {
if (this->actor.params != ENOSSAN_CURIOSITY_SHOP_MAN) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else if (this->actor.params == ENOSSAN_CURIOSITY_SHOP_MAN) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
break;
case 3:
if (this->actor.params == ENOSSAN_CURIOSITY_SHOP_MAN) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
if (!(gSaveContext.save.time <= CLOCK_TIME(22, 00) && gSaveContext.save.time >= CLOCK_TIME(6, 00))) {
if (this->actor.params != ENOSSAN_CURIOSITY_SHOP_MAN) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
break;
@@ -265,15 +265,15 @@ void EnOssan_Init(Actor* thisx, PlayState* play) {
EnOssan* this = THIS;
s16 id;
- //! @bug Condition is impossible, params cannot be both greater then 1 AND less then 0.
- if (this->actor.params > ENOSSAN_PART_TIME_WORKER && this->actor.params < ENOSSAN_CURIOSITY_SHOP_MAN) {
- Actor_MarkForDeath(&this->actor);
+ if ((this->actor.params > ENOSSAN_PART_TIME_WORKER) && (this->actor.params < ENOSSAN_CURIOSITY_SHOP_MAN)) {
+ //! @bug: Impossible to reach, && should be an ||
+ Actor_Kill(&this->actor);
return;
}
id = sObjectIds[this->actor.params];
this->objIndex = Object_GetIndex(&play->objectCtx, id);
if (this->objIndex < 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
EnOssan_CheckValidSpawn(this);
@@ -306,11 +306,11 @@ void EnOssan_EndInteraction(PlayState* play, EnOssan* this) {
this->drawCursor = 0;
this->stickLeftPrompt.isEnabled = false;
this->stickRightPrompt.isEnabled = false;
- player->stateFlags2 &= ~0x20000000;
+ player->stateFlags2 &= ~PLAYER_STATE2_20000000;
play->interfaceCtx.unk_222 = 0;
play->interfaceCtx.unk_224 = 0;
if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_PLAYING) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->cutsceneState = ENOSSAN_CUTSCENESTATE_STOPPED;
}
if (this->actor.params == ENOSSAN_CURIOSITY_SHOP_MAN) {
@@ -332,14 +332,14 @@ s32 EnOssan_TestEndInteraction(EnOssan* this, PlayState* play, Input* input) {
s32 EnOssan_TestCancelOption(EnOssan* this, PlayState* play, Input* input) {
if (CHECK_BTN_ALL(input->press.button, BTN_B)) {
this->actionFunc = this->prevActionFunc;
- func_80151938(play, this->items[this->cursorIndex]->actor.textId);
+ Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId);
return true;
}
return false;
}
void EnOssan_SetupStartShopping(PlayState* play, EnOssan* this, u8 skipHello) {
- func_8011552C(play, 0x10);
+ func_8011552C(play, DO_ACTION_NEXT);
if (!skipHello) {
EnOssan_SetupAction(this, EnOssan_Hello);
} else {
@@ -349,8 +349,8 @@ void EnOssan_SetupStartShopping(PlayState* play, EnOssan* this, u8 skipHello) {
void EnOssan_StartShopping(PlayState* play, EnOssan* this) {
EnOssan_SetupAction(this, EnOssan_FaceShopkeeper);
- func_80151938(play, 0x640);
- func_8011552C(play, 6);
+ Message_ContinueTextbox(play, 0x640);
+ func_8011552C(play, DO_ACTION_DECIDE);
this->stickRightPrompt.isEnabled = true;
this->stickLeftPrompt.isEnabled = true;
}
@@ -366,14 +366,14 @@ void EnOssan_Idle(EnOssan* this, PlayState* play) {
SubS_FillLimbRotTables(play, this->limbRotTableY, this->limbRotTableZ, ARRAY_COUNT(this->limbRotTableY));
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- player->stateFlags2 |= 0x20000000;
+ player->stateFlags2 |= PLAYER_STATE2_20000000;
EnOssan_SetupAction(this, EnOssan_BeginInteraction);
if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookToShopkeeperCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookToShopkeeperCsId;
+ CutsceneManager_Queue(this->csId);
this->cutsceneState = ENOSSAN_CUTSCENESTATE_WAITING;
}
} else {
@@ -397,11 +397,11 @@ void EnOssan_BeginInteraction(EnOssan* this, PlayState* play) {
frameCount = 0;
}
if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_WAITING) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->cutsceneState = ENOSSAN_CUTSCENESTATE_PLAYING;
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
}
if (this->actor.params == ENOSSAN_CURIOSITY_SHOP_MAN) {
@@ -586,7 +586,7 @@ void EnOssan_Hello(EnOssan* this, PlayState* play) {
SubS_ChangeAnimationByInfoS(&this->skelAnime, animationInfo, ANI_ANIM_APOLOGY_LOOP);
}
if ((this->animIndex == FSN_ANIM_SLAM_COUNTER_LOOP) && Animation_OnFrame(&this->skelAnime, 18.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_HANKO);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_HANKO);
}
}
@@ -602,8 +602,8 @@ s32 EnOssan_FacingShopkeeperDialogResult(EnOssan* this, PlayState* play) {
SubS_ChangeAnimationByInfoS(&this->skelAnime, animationInfo, 9);
}
EnOssan_SetupAction(this, EnOssan_TalkToShopkeeper);
- func_80151938(play, sTalkOptionTextIds[this->actor.params]);
- func_8011552C(play, 6);
+ Message_ContinueTextbox(play, sTalkOptionTextIds[this->actor.params]);
+ func_8011552C(play, DO_ACTION_DECIDE);
this->stickLeftPrompt.isEnabled = false;
this->stickRightPrompt.isEnabled = false;
return true;
@@ -622,15 +622,15 @@ void EnOssan_FaceShopkeeper(EnOssan* this, PlayState* play) {
u8 cursorIndex;
if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookToShopkeeperCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookToShopkeeperCsId;
+ CutsceneManager_Queue(this->csId);
this->cutsceneState = ENOSSAN_CUTSCENESTATE_WAITING;
} else {
if (talkState == TEXT_STATE_CHOICE) {
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
if (!EnOssan_TestEndInteraction(this, play, CONTROLLER1(&play->state)) &&
(!Message_ShouldAdvance(play) || !EnOssan_FacingShopkeeperDialogResult(this, play))) {
if (this->stickAccumX < 0) {
@@ -638,7 +638,7 @@ void EnOssan_FaceShopkeeper(EnOssan* this, PlayState* play) {
if (cursorIndex != CURSOR_INVALID) {
this->cursorIndex = cursorIndex;
EnOssan_SetupAction(this, EnOssan_LookToLeftShelf);
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
this->stickLeftPrompt.isEnabled = false;
play_sound(NA_SE_SY_CURSOR);
}
@@ -647,7 +647,7 @@ void EnOssan_FaceShopkeeper(EnOssan* this, PlayState* play) {
if (cursorIndex != CURSOR_INVALID) {
this->cursorIndex = cursorIndex;
EnOssan_SetupAction(this, EnOssan_LookToRightShelf);
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
this->stickRightPrompt.isEnabled = false;
play_sound(NA_SE_SY_CURSOR);
}
@@ -676,26 +676,26 @@ void EnOssan_TalkToShopkeeper(EnOssan* this, PlayState* play) {
void EnOssan_LookToLeftShelf(EnOssan* this, PlayState* play) {
if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_PLAYING) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->cutsceneState = ENOSSAN_CUTSCENESTATE_STOPPED;
}
if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookToLeftShelfCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookToLeftShelfCsId;
+ CutsceneManager_Queue(this->csId);
this->cutsceneState = ENOSSAN_CUTSCENESTATE_WAITING;
} else {
if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_WAITING) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->cutsceneState = ENOSSAN_CUTSCENESTATE_PLAYING;
EnOssan_UpdateCursorPos(play, this);
EnOssan_SetupAction(this, EnOssan_BrowseLeftShelf);
- func_80151938(play, this->items[this->cursorIndex]->actor.textId);
+ Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId);
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
}
this->stickAccumX = 0;
@@ -704,26 +704,26 @@ void EnOssan_LookToLeftShelf(EnOssan* this, PlayState* play) {
void EnOssan_LookToRightShelf(EnOssan* this, PlayState* play) {
if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_PLAYING) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->cutsceneState = ENOSSAN_CUTSCENESTATE_STOPPED;
}
if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookToRightShelfCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookToRightShelfCsId;
+ CutsceneManager_Queue(this->csId);
this->cutsceneState = ENOSSAN_CUTSCENESTATE_WAITING;
} else {
if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_WAITING) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->cutsceneState = ENOSSAN_CUTSCENESTATE_PLAYING;
EnOssan_UpdateCursorPos(play, this);
EnOssan_SetupAction(this, EnOssan_BrowseRightShelf);
- func_80151938(play, this->items[this->cursorIndex]->actor.textId);
+ Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId);
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
}
this->stickAccumX = 0;
@@ -824,7 +824,7 @@ s32 EnOssan_HasPlayerSelectedItem(PlayState* play, EnOssan* this, Input* input)
if (EnOssan_TestItemSelected(play)) {
if (!item->isOutOfStock) {
this->prevActionFunc = this->actionFunc;
- func_80151938(play, this->items[this->cursorIndex]->choiceTextId);
+ Message_ContinueTextbox(play, this->items[this->cursorIndex]->choiceTextId);
this->stickLeftPrompt.isEnabled = false;
this->stickRightPrompt.isEnabled = false;
play_sound(NA_SE_SY_DECIDE);
@@ -853,7 +853,7 @@ void EnOssan_BrowseLeftShelf(EnOssan* this, PlayState* play) {
this->stickRightPrompt.isEnabled = true;
EnOssan_UpdateCursorPos(play, this);
if (talkState == TEXT_STATE_5) {
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
if (!EnOssan_HasPlayerSelectedItem(play, this, CONTROLLER1(&play->state))) {
if (this->moveHorizontal) {
if (this->stickAccumX > 0) {
@@ -888,7 +888,7 @@ void EnOssan_BrowseLeftShelf(EnOssan* this, PlayState* play) {
}
EnOssan_CursorUpDown(this);
if (this->cursorIndex != prevCursorIndex) {
- func_80151938(play, this->items[this->cursorIndex]->actor.textId);
+ Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId);
play_sound(NA_SE_SY_CURSOR);
}
}
@@ -911,7 +911,7 @@ void EnOssan_BrowseRightShelf(EnOssan* this, PlayState* play) {
this->stickLeftPrompt.isEnabled = true;
EnOssan_UpdateCursorPos(play, this);
if (talkState == TEXT_STATE_5) {
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
if (!EnOssan_HasPlayerSelectedItem(play, this, CONTROLLER1(&play->state))) {
if (this->moveHorizontal != 0) {
if (this->stickAccumX < 0) {
@@ -946,7 +946,7 @@ void EnOssan_BrowseRightShelf(EnOssan* this, PlayState* play) {
}
EnOssan_CursorUpDown(this);
if (this->cursorIndex != prevCursorIndex) {
- func_80151938(play, this->items[this->cursorIndex]->actor.textId);
+ Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId);
play_sound(NA_SE_SY_CURSOR);
}
}
@@ -956,24 +956,24 @@ void EnOssan_BrowseRightShelf(EnOssan* this, PlayState* play) {
void EnOssan_LookToShopkeeperFromShelf(EnOssan* this, PlayState* play) {
if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_PLAYING) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->cutsceneState = ENOSSAN_CUTSCENESTATE_STOPPED;
}
if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookToShopKeeperFromShelfCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookToShopKeeperFromShelfCsId;
+ CutsceneManager_Queue(this->csId);
this->cutsceneState = ENOSSAN_CUTSCENESTATE_WAITING;
} else if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_WAITING) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->cutsceneState = ENOSSAN_CUTSCENESTATE_PLAYING;
EnOssan_UpdateCursorPos(play, this);
EnOssan_StartShopping(play, this);
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
}
}
@@ -981,22 +981,22 @@ void EnOssan_LookToShopkeeperFromShelf(EnOssan* this, PlayState* play) {
void EnOssan_SetupBuyItemWithFanfare(PlayState* play, EnOssan* this) {
Player* player = GET_PLAYER(play);
- Actor_PickUp(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f);
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
- player->stateFlags2 &= ~0x20000000;
+ player->stateFlags2 &= ~PLAYER_STATE2_20000000;
Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
this->drawCursor = 0;
EnOssan_SetupAction(this, EnOssan_BuyItemWithFanfare);
}
void EnOssan_SetupCannotBuy(PlayState* play, EnOssan* this, u16 textId) {
- func_80151938(play, textId);
+ Message_ContinueTextbox(play, textId);
EnOssan_SetupAction(this, EnOssan_CannotBuy);
}
void EnOssan_SetupBuy(PlayState* play, EnOssan* this, u16 textId) {
- func_80151938(play, textId);
+ Message_ContinueTextbox(play, textId);
EnOssan_SetupAction(this, EnOssan_CanBuy);
}
@@ -1006,7 +1006,7 @@ void EnOssan_HandleCanBuyItem(PlayState* play, EnOssan* this) {
switch (item->canBuyFunc(play, item)) {
case CANBUY_RESULT_SUCCESS_1:
if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_PLAYING) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->cutsceneState = ENOSSAN_CUTSCENESTATE_STOPPED;
}
func_8019F208();
@@ -1052,7 +1052,7 @@ void EnOssan_SelectItem(EnOssan* this, PlayState* play) {
u8 talkState = Message_GetState(&play->msgCtx);
if (EnOssan_TakeItemOffShelf(this) && (talkState == TEXT_STATE_CHOICE)) {
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
if (!EnOssan_TestCancelOption(this, play, CONTROLLER1(&play->state)) && Message_ShouldAdvance(play)) {
switch (play->msgCtx.choiceIndex) {
case 0:
@@ -1061,7 +1061,7 @@ void EnOssan_SelectItem(EnOssan* this, PlayState* play) {
case 1:
func_8019F230();
this->actionFunc = this->prevActionFunc;
- func_80151938(play, this->items[this->cursorIndex]->actor.textId);
+ Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId);
break;
}
}
@@ -1071,7 +1071,7 @@ void EnOssan_SelectItem(EnOssan* this, PlayState* play) {
void EnOssan_CannotBuy(EnOssan* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
this->actionFunc = this->prevActionFunc;
- func_80151938(play, this->items[this->cursorIndex]->actor.textId);
+ Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId);
}
}
@@ -1084,7 +1084,7 @@ void EnOssan_CanBuy(EnOssan* this, PlayState* play) {
item = this->items[this->cursorIndex];
item->restockFunc(play, item);
this->actionFunc = this->prevActionFunc;
- func_80151938(play, this->items[this->cursorIndex]->actor.textId);
+ Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId);
}
}
@@ -1093,7 +1093,7 @@ void EnOssan_BuyItemWithFanfare(EnOssan* this, PlayState* play) {
this->actor.parent = NULL;
EnOssan_SetupAction(this, EnOssan_SetupItemPurchased);
} else {
- Actor_PickUp(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f);
}
}
@@ -1103,13 +1103,13 @@ void EnOssan_SetupItemPurchased(EnOssan* this, PlayState* play) {
play->msgCtx.stateTimer = 4;
EnOssan_SetupAction(this, EnOssan_ItemPurchased);
if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookToShopkeeperCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookToShopkeeperCsId;
+ CutsceneManager_Queue(this->csId);
}
- func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
}
}
@@ -1119,7 +1119,7 @@ void EnOssan_ContinueShopping(EnOssan* this, PlayState* play) {
EnGirlA* item;
if (talkState == TEXT_STATE_CHOICE) {
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
if (Message_ShouldAdvance(play)) {
EnOssan_ResetItemPosition(this);
item = this->items[this->cursorIndex];
@@ -1129,10 +1129,10 @@ void EnOssan_ContinueShopping(EnOssan* this, PlayState* play) {
case 0:
func_8019F208();
player->actor.shape.rot.y = BINANG_ROT180(player->actor.shape.rot.y);
- player->stateFlags2 |= 0x20000000;
+ player->stateFlags2 |= PLAYER_STATE2_20000000;
Message_StartTextbox(play, this->textId, &this->actor);
EnOssan_SetupStartShopping(play, this, true);
- func_800B85E0(&this->actor, play, 100.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 100.0f, PLAYER_IA_MINUS1);
break;
case 1:
default:
@@ -1147,10 +1147,10 @@ void EnOssan_ContinueShopping(EnOssan* this, PlayState* play) {
item = this->items[this->cursorIndex];
item->restockFunc(play, item);
player->actor.shape.rot.y = BINANG_ROT180(player->actor.shape.rot.y);
- player->stateFlags2 |= 0x20000000;
+ player->stateFlags2 |= PLAYER_STATE2_20000000;
Message_StartTextbox(play, this->textId, &this->actor);
EnOssan_SetupStartShopping(play, this, true);
- func_800B85E0(&this->actor, play, 100.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 100.0f, PLAYER_IA_MINUS1);
}
}
@@ -1158,23 +1158,23 @@ void EnOssan_ItemPurchased(EnOssan* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
- player->stateFlags2 |= 0x20000000;
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
+ player->stateFlags2 |= PLAYER_STATE2_20000000;
EnOssan_SetupAction(this, EnOssan_ContinueShopping);
this->cutsceneState = ENOSSAN_CUTSCENESTATE_PLAYING;
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookToShopkeeperCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookToShopkeeperCsId;
+ CutsceneManager_Queue(this->csId);
}
}
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- func_80151938(play, 0x642);
+ Message_ContinueTextbox(play, 0x642);
} else {
- func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
}
}
@@ -1386,19 +1386,19 @@ u16 EnOssan_CuriosityShopMan_GetWelcome(EnOssan* this, PlayState* play) {
switch (player->transformation) {
case PLAYER_FORM_DEKU:
this->animIndex = FSN_ANIM_SLAM_COUNTER_START;
- if (gSaveContext.save.weekEventReg[18] & 0x10) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_18_10)) {
return sWelcomeDekuTextIds[ENOSSAN_CURIOSITY_SHOP_MAN];
}
return sWelcomeDekuFirstTimeTextIds[ENOSSAN_CURIOSITY_SHOP_MAN];
case PLAYER_FORM_ZORA:
this->animIndex = FSN_ANIM_LEAN_FORWARD_START;
- if (gSaveContext.save.weekEventReg[18] & 8) {
+ 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 (gSaveContext.save.weekEventReg[18] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_18_04)) {
return sWelcomeGoronTextIds[ENOSSAN_CURIOSITY_SHOP_MAN];
}
return sWelcomeGoronFirstTimeTextIds[ENOSSAN_CURIOSITY_SHOP_MAN];
@@ -1417,17 +1417,17 @@ u16 EnOssan_PartTimer_GetWelcome(EnOssan* this, PlayState* play) {
}
switch (player->transformation) {
case PLAYER_FORM_DEKU:
- if (gSaveContext.save.weekEventReg[55] & 0x10) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_10)) {
return sWelcomeDekuTextIds[ENOSSAN_PART_TIME_WORKER];
}
return sWelcomeDekuFirstTimeTextIds[ENOSSAN_PART_TIME_WORKER];
case PLAYER_FORM_ZORA:
- if (gSaveContext.save.weekEventReg[55] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_08)) {
return sWelcomeZoraTextIds[ENOSSAN_PART_TIME_WORKER];
}
return sWelcomeZoraFirstTimeTextIds[ENOSSAN_PART_TIME_WORKER];
case PLAYER_FORM_GORON:
- if (gSaveContext.save.weekEventReg[55] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_04)) {
return sWelcomeGoronTextIds[ENOSSAN_PART_TIME_WORKER];
}
return sWelcomeGoronFirstTimeTextIds[ENOSSAN_PART_TIME_WORKER];
@@ -1438,22 +1438,22 @@ u16 EnOssan_PartTimer_GetWelcome(EnOssan* this, PlayState* play) {
void EnOssan_SetHaveMet(EnOssan* this) {
switch (this->textId) {
case 0x06A9:
- gSaveContext.save.weekEventReg[18] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_18_10);
break;
case 0x06C6:
- gSaveContext.save.weekEventReg[55] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_55_10);
break;
case 0x06A7:
- gSaveContext.save.weekEventReg[18] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_18_08);
break;
case 0x06C4:
- gSaveContext.save.weekEventReg[55] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_55_08);
break;
case 0x06A5:
- gSaveContext.save.weekEventReg[18] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_18_04);
break;
case 0x06C2:
- gSaveContext.save.weekEventReg[55] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_55_04);
break;
}
}
@@ -1474,7 +1474,7 @@ void EnOssan_InitShop(EnOssan* this, PlayState* play) {
this->cursorPos.y = this->cursorPos.x = 100.0f;
this->cutsceneState = ENOSSAN_CUTSCENESTATE_STOPPED;
- this->cutscene = this->lookToShopkeeperCutscene;
+ this->csId = this->lookToShopkeeperCsId;
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
this->actor.colChkInfo.cylRadius = 50;
this->stickAccumX = this->stickAccumY = 0;
@@ -1538,10 +1538,10 @@ void EnOssan_InitShop(EnOssan* this, PlayState* play) {
}
void EnOssan_GetCutscenes(EnOssan* this, PlayState* play) {
- this->lookToShopkeeperCutscene = this->actor.cutscene;
- this->lookToLeftShelfCutscene = ActorCutscene_GetAdditionalCutscene(this->lookToShopkeeperCutscene);
- this->lookToRightShelfCutscene = ActorCutscene_GetAdditionalCutscene(this->lookToLeftShelfCutscene);
- this->lookToShopKeeperFromShelfCutscene = ActorCutscene_GetAdditionalCutscene(this->lookToRightShelfCutscene);
+ this->lookToShopkeeperCsId = this->actor.csId;
+ this->lookToLeftShelfCsId = CutsceneManager_GetAdditionalCsId(this->lookToShopkeeperCsId);
+ this->lookToRightShelfCsId = CutsceneManager_GetAdditionalCsId(this->lookToLeftShelfCsId);
+ this->lookToShopKeeperFromShelfCsId = CutsceneManager_GetAdditionalCsId(this->lookToRightShelfCsId);
}
void EnOssan_Update(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.h b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.h
index 20d669ea4..c5de183d5 100644
--- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.h
+++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.h
@@ -43,11 +43,11 @@ typedef struct EnOssan {
/* 0x2B0 */ u8 arrowAnimState;
/* 0x2B1 */ u8 stickAnimState;
/* 0x2B4 */ f32 shopItemSelectedTween;
- /* 0x2B8 */ s16 lookToShopkeeperCutscene;
- /* 0x2BA */ s16 lookToLeftShelfCutscene;
- /* 0x2BC */ s16 lookToRightShelfCutscene;
- /* 0x2BE */ s16 lookToShopKeeperFromShelfCutscene;
- /* 0x2C0 */ s16 cutscene;
+ /* 0x2B8 */ s16 lookToShopkeeperCsId;
+ /* 0x2BA */ s16 lookToLeftShelfCsId;
+ /* 0x2BC */ s16 lookToRightShelfCsId;
+ /* 0x2BE */ s16 lookToShopKeeperFromShelfCsId;
+ /* 0x2C0 */ s16 csId;
/* 0x2C2 */ s16 cutsceneState;
/* 0x2C4 */ u16 textId;
/* 0x2C6 */ Vec3s headRot;
@@ -72,6 +72,4 @@ typedef enum {
/* 1 */ ENOSSAN_PART_TIME_WORKER
} EnOssanWorker;
-extern const ActorInit En_Ossan_InitVars;
-
#endif // Z_EN_OSSAN_H
diff --git a/src/overlays/actors/ovl_En_Ot/overlay.cfg b/src/overlays/actors/ovl_En_Ot/overlay.cfg
deleted file mode 100644
index 53a5992e9..000000000
--- a/src/overlays/actors/ovl_En_Ot/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ot
-z_en_ot.c
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 bf93b729f..a4d820364 100644
--- a/src/overlays/actors/ovl_En_Ot/z_en_ot.c
+++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.c
@@ -5,7 +5,6 @@
*/
#include "z_en_ot.h"
-#include "prevent_bss_reordering.h"
#include "objects/object_ot/object_ot.h"
#include "objects/gameplay_keep/gameplay_keep.h"
@@ -59,11 +58,11 @@ EnOtUnkStruct* func_80B5DF58(EnOtUnkStruct* arg0, u8 arg1, Vec3f* arg2, Vec3s* a
void func_80B5E078(PlayState* play, EnOtUnkStruct* arg1, s32 arg2);
void func_80B5E1D8(PlayState* play, EnOtUnkStruct* arg1, s32 arg2);
-static EnOt* D_80B5E880;
-static EnOt* D_80B5E884;
-static EnOt* D_80B5E888;
+EnOt* D_80B5E880;
+EnOt* D_80B5E884;
+EnOt* D_80B5E888;
-const ActorInit En_Ot_InitVars = {
+ActorInit En_Ot_InitVars = {
ACTOR_EN_OT,
ACTORCAT_NPC,
FLAGS,
@@ -141,7 +140,7 @@ void EnOt_Init(Actor* thisx, PlayState* play) {
this->unk_33C = ENOT_GET_C000(&this->actor);
if (this->unk_33C == 0) {
D_80B5E880 = this;
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8);
this->actor.update = func_80B5DB6C;
this->actor.draw = NULL;
@@ -162,7 +161,7 @@ void EnOt_Init(Actor* thisx, PlayState* play) {
this->actor.shape.rot.z = 0;
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
this->actor.gravity = 0.0f;
- SubS_FillCutscenesList(&this->actor, this->cutscenes, ARRAY_COUNT(this->cutscenes));
+ SubS_FillCutscenesList(&this->actor, this->csIdList, ARRAY_COUNT(this->csIdList));
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, 0, &this->animIndex);
this->skelAnime.curFrame = Rand_ZeroOne() * this->skelAnime.endFrame;
this->lightNode = LightContext_InsertLight(play, &play->lightCtx, &this->lightInfo);
@@ -180,7 +179,7 @@ void EnOt_Init(Actor* thisx, PlayState* play) {
this->actor.world.pos.y = BgCheck_EntityRaycastFloor3(&play->colCtx, &this->actor.floorPoly, &bgId,
&this->actor.world.pos) +
50.0f;
- if (gSaveContext.save.weekEventReg[84] & 0x10) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_10)) {
Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_NEW);
Matrix_MultVecZ(52.519997f, &sp64);
Math_Vec3f_Sum(&this->actor.world.pos, &sp64, &sp64);
@@ -195,13 +194,13 @@ void EnOt_Init(Actor* thisx, PlayState* play) {
this->unk_394.y = this->actor.world.pos.y;
this->unk_394.z = (this->actor.world.pos.z + this->unk_360->actor.world.pos.z) * 0.5f;
Math_Vec3f_Copy(&this->unk_360->unk_394, &this->unk_394);
- if (gSaveContext.save.weekEventReg[32] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_32_01)) {
func_80B5C244(this, play);
} else {
func_80B5C684(this, play);
}
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else if ((D_80B5E888 != NULL) && (D_80B5E888->unk_32C & 1)) {
this->unk_360 = D_80B5E888;
@@ -219,7 +218,7 @@ void EnOt_Init(Actor* thisx, PlayState* play) {
break;
case 1:
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
break;
}
break;
@@ -230,7 +229,7 @@ void EnOt_Init(Actor* thisx, PlayState* play) {
switch (this->unk_344) {
case 0:
Actor_SetScale(&this->actor, 0.0f);
- if (!(gSaveContext.save.weekEventReg[13] & 1)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_13_01)) {
Actor_SetScale(&this->actor, 0.0f);
func_80B5C910(this, play);
} else {
@@ -250,8 +249,8 @@ void EnOt_Init(Actor* thisx, PlayState* play) {
case 1:
Actor_SetScale(&this->actor, 0.012999999f);
- if (gSaveContext.save.weekEventReg[84] & 0x10) {
- if (gSaveContext.save.weekEventReg[32] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_10)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_32_01)) {
func_80B5C244(this, play);
} else {
func_80B5C684(this, play);
@@ -264,8 +263,8 @@ void EnOt_Init(Actor* thisx, PlayState* play) {
break;
case 3:
- if (!(gSaveContext.save.weekEventReg[26] & 8)) {
- this->actor.flags |= ACTOR_FLAG_8000000;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_26_08)) {
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8);
Actor_SetScale(&this->actor, 0.0064999997f);
this->collider.dim.radius *= 0.5f;
@@ -274,7 +273,7 @@ void EnOt_Init(Actor* thisx, PlayState* play) {
this->actor.update = func_80B5DAEC;
func_80B5C634(this, play);
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
break;
}
@@ -301,20 +300,20 @@ void func_80B5BB38(Color_RGB8* arg0, Color_RGB8* arg1, f32 arg2) {
void func_80B5BDA8(EnOt* this, PlayState* play) {
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, 1, &this->animIndex);
- SubS_FillCutscenesList(&this->actor, this->cutscenes, ARRAY_COUNT(this->cutscenes));
+ SubS_FillCutscenesList(&this->actor, this->csIdList, ARRAY_COUNT(this->csIdList));
this->actionFunc = func_80B5BE04;
}
void func_80B5BE04(EnOt* this, PlayState* play) {
switch (this->unk_388) {
case 0:
- if (SubS_StartActorCutscene(&this->actor, this->cutscenes[2], -1, SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) {
+ if (SubS_StartCutscene(&this->actor, this->csIdList[2], CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) {
func_80B5BF60(this, play);
}
break;
case 1:
- if (SubS_StartActorCutscene(&this->actor, this->cutscenes[3], -1, SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) {
+ if (SubS_StartCutscene(&this->actor, this->csIdList[3], CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) {
func_80B5BF60(this, play);
}
break;
@@ -327,10 +326,10 @@ void func_80B5BE88(EnOt* this, PlayState* play) {
}
void func_80B5BED4(EnOt* this, PlayState* play) {
- func_800BE33C(&this->actor.world.pos, &this->unk_360->actor.world.pos, &this->actor.world.rot, 0);
- Math_SmoothStepToS(&this->actor.shape.rot.y, Actor_YawBetweenActors(&this->actor, &this->unk_360->actor), 3, 0xE38,
- 0x38E);
- this->actor.speedXZ = 3.5f;
+ func_800BE33C(&this->actor.world.pos, &this->unk_360->actor.world.pos, &this->actor.world.rot, false);
+ Math_SmoothStepToS(&this->actor.shape.rot.y, Actor_WorldYawTowardActor(&this->actor, &this->unk_360->actor), 3,
+ 0xE38, 0x38E);
+ this->actor.speed = 3.5f;
this->actor.world.pos.y = this->unk_360->actor.world.pos.y;
Actor_MoveWithoutGravityReverse(&this->actor);
}
@@ -349,10 +348,10 @@ void func_80B5BFB8(EnOt* this, PlayState* play) {
Math_StepToF(&this->actor.world.pos.y, temp_f0, 2.0f);
}
- Math_SmoothStepToS(&this->actor.shape.rot.y, Actor_YawBetweenActors(&this->actor, &this->unk_360->actor), 3, 0xE38,
- 0x38E);
+ Math_SmoothStepToS(&this->actor.shape.rot.y, Actor_WorldYawTowardActor(&this->actor, &this->unk_360->actor), 3,
+ 0xE38, 0x38E);
- if (Actor_DistanceBetweenActors(&this->actor, &this->unk_360->actor) <= 52.519997f) {
+ if (Actor_WorldDistXYZToActor(&this->actor, &this->unk_360->actor) <= 52.519997f) {
this->unk_73C = 50;
Matrix_RotateYS(this->actor.world.rot.y, MTXMODE_NEW);
Matrix_MultVecZ(52.519997f, &sp34);
@@ -376,13 +375,13 @@ void func_80B5BFB8(EnOt* this, PlayState* play) {
}
void func_80B5C154(EnOt* this, PlayState* play) {
- if (gSaveContext.save.weekEventReg[32] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_32_01)) {
this->getItemId = GI_RUPEE_RED;
} else {
this->getItemId = GI_HEART_PIECE;
- gSaveContext.save.weekEventReg[32] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_32_01);
}
- Actor_PickUp(&this->actor, play, this->getItemId, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
+ Actor_OfferGetItem(&this->actor, play, this->getItemId, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
this->actionFunc = func_80B5C1CC;
}
@@ -392,7 +391,8 @@ void func_80B5C1CC(EnOt* this, PlayState* play) {
func_80B5C244(this, play);
func_80B5C244(this->unk_360, play);
} else {
- Actor_PickUp(&this->actor, play, this->getItemId, this->actor.xzDistToPlayer, this->actor.playerHeightRel);
+ Actor_OfferGetItem(&this->actor, play, this->getItemId, this->actor.xzDistToPlayer,
+ this->actor.playerHeightRel);
}
}
@@ -401,7 +401,7 @@ void func_80B5C244(EnOt* this, PlayState* play) {
}
void func_80B5C25C(EnOt* this, PlayState* play) {
- this->unk_390 = Actor_YawBetweenActors(&this->actor, &this->unk_360->actor);
+ this->unk_390 = Actor_WorldYawTowardActor(&this->actor, &this->unk_360->actor);
Math_SmoothStepToS(&this->actor.shape.rot.y, this->unk_390, 3, 0xE38, 0x38E);
if (BINANG_SUB(BINANG_ROT180(this->unk_360->actor.shape.rot.y), this->actor.shape.rot.y) < 0x38E) {
this->unk_32C |= 0x80;
@@ -412,9 +412,9 @@ void func_80B5C25C(EnOt* this, PlayState* play) {
this->unk_360->unk_32C |= 0x100;
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, 2, &this->animIndex);
SubS_ChangeAnimationBySpeedInfo(&this->unk_360->skelAnime, sAnimations, 2, &this->unk_360->animIndex);
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8);
- this->unk_360->actor.flags |= ACTOR_FLAG_8000000;
+ this->unk_360->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->unk_360->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8);
func_80B5C9A8(this->unk_360, play);
func_80B5C3B8(this, play);
@@ -450,7 +450,7 @@ void func_80B5C3D8(EnOt* this, PlayState* play) {
Math_Vec3f_Copy(&this->actor.world.pos, &this->unk_348);
Math_Vec3f_Copy(&this->unk_360->actor.world.pos, &this->unk_360->unk_348);
- temp = Actor_YawBetweenActors(&this->actor, &this->unk_360->actor);
+ temp = Actor_WorldYawTowardActor(&this->actor, &this->unk_360->actor);
this->actor.shape.rot.y = temp;
this->unk_360->actor.shape.rot.y = BINANG_ROT180(temp);
@@ -482,13 +482,13 @@ void func_80B5C634(EnOt* this, PlayState* play) {
}
void func_80B5C64C(EnOt* this, PlayState* play) {
- if (gSaveContext.save.weekEventReg[26] & 8) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_26_08)) {
+ Actor_Kill(&this->actor);
}
}
void func_80B5C684(EnOt* this, PlayState* play) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, 0, &this->animIndex);
this->actionFunc = func_80B5C6DC;
}
@@ -499,20 +499,20 @@ void func_80B5C6DC(EnOt* this, PlayState* play) {
s16 sp3E;
Vec3f sp30;
- sp3E = Actor_YawToPoint(&player->actor, &this->unk_394);
+ sp3E = Actor_WorldYawTowardPoint(&player->actor, &this->unk_394);
Matrix_RotateYS(BINANG_ADD(sp3E, 0x4000), MTXMODE_NEW);
if (this->unk_33C == 2) {
Matrix_MultVecZ(26.259998f, &sp30);
} else {
if (this->unk_73C == 0) {
- gSaveContext.save.weekEventReg[84] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_84_10);
switch (this->unk_388) {
case 0:
- ActorCutscene_Stop(this->cutscenes[2]);
+ CutsceneManager_Stop(this->csIdList[2]);
break;
case 1:
- ActorCutscene_Stop(this->cutscenes[3]);
+ CutsceneManager_Stop(this->csIdList[3]);
break;
}
this->unk_73C = -1;
@@ -527,7 +527,7 @@ void func_80B5C6DC(EnOt* this, PlayState* play) {
Math_SmoothStepToF(&this->actor.world.pos.x, this->unk_348.x, 1.0f, 2.0f, 0.01f);
Math_SmoothStepToF(&this->actor.world.pos.z, this->unk_348.z, 1.0f, 2.0f, 0.01f);
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 3, 0xE38, 0x38E);
- if ((gSaveContext.save.weekEventReg[84] & 0x10) && (this->unk_33C == 1)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_10) && (this->unk_33C == 1)) {
this->actor.textId = 0;
this->unk_384 = 1;
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
@@ -535,7 +535,7 @@ void func_80B5C6DC(EnOt* this, PlayState* play) {
this->unk_360->unk_3A0 = this->unk_3A0;
func_80B5C9A8(this, play);
func_80B5D114(this, play);
- } else if ((player->actor.bgCheckFlags & 1) && !func_801242B4(player) &&
+ } else if ((player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && !func_801242B4(player) &&
(this->actor.xzDistToPlayer < 130.0f)) {
func_800B8614(&this->actor, play, 130.0f);
}
@@ -555,8 +555,8 @@ void func_80B5C910(EnOt* this, PlayState* play) {
void func_80B5C950(EnOt* this, PlayState* play) {
if (this->unk_32C & 8) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SEAHORSE_OUT_BOTTLE);
- gSaveContext.save.weekEventReg[25] |= 4;
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SEAHORSE_OUT_BOTTLE);
+ SET_WEEKEVENTREG(WEEKEVENTREG_25_04);
func_80B5CAD0(this, play);
}
}
@@ -576,7 +576,7 @@ void func_80B5C9D0(EnOt* this, PlayState* play) {
this->actor.world.rot.x = this->actor.world.rot.x;
this->actor.world.rot.y = this->actor.world.rot.y;
this->actor.world.rot.z = this->actor.world.rot.z;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SEAHORSE_OUT_BOTTLE);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SEAHORSE_OUT_BOTTLE);
this->actionFunc = func_80B5CA30;
}
@@ -591,7 +591,7 @@ void func_80B5CA30(EnOt* this, PlayState* play) {
}
void func_80B5CAD0(EnOt* this, PlayState* play) {
- SubS_FillCutscenesList(&this->actor, this->cutscenes, ARRAY_COUNT(this->cutscenes) / 2);
+ SubS_FillCutscenesList(&this->actor, this->csIdList, ARRAY_COUNT(this->csIdList) / 2);
this->actionFunc = func_80B5CB0C;
}
@@ -606,7 +606,7 @@ void func_80B5CB0C(EnOt* this, PlayState* play) {
void func_80B5CBA0(EnOt* this, PlayState* play) {
this->actor.flags |= ACTOR_FLAG_10000;
- func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_AP_NONE);
+ func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_IA_NONE);
this->actionFunc = func_80B5CBEC;
}
@@ -617,7 +617,7 @@ void func_80B5CBEC(EnOt* this, PlayState* play) {
} else {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 3, 0xE38, 0x38E);
this->actor.world.rot.y = this->actor.shape.rot.y;
- func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_AP_NONE);
+ func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_IA_NONE);
}
}
@@ -626,10 +626,10 @@ void func_80B5CC88(EnOt* this, PlayState* play) {
}
void func_80B5CCA0(EnOt* this, PlayState* play) {
- if (SubS_StartActorCutscene(&this->actor, this->cutscenes[0], 0x7C, SUBS_CUTSCENE_NORMAL)) {
+ if (SubS_StartCutscene(&this->actor, this->csIdList[0], CS_ID_GLOBAL_TALK, SUBS_CUTSCENE_NORMAL)) {
Player* player = GET_PLAYER(play);
- player->stateFlags2 |= 0x20000000;
+ player->stateFlags2 |= PLAYER_STATE2_20000000;
func_80B5CCF4(this, play);
}
}
@@ -650,7 +650,7 @@ void func_80B5CD40(EnOt* this, PlayState* play) {
this->actor.world.rot.y = this->actor.shape.rot.y;
if (1) {}
if (!temp) {
- gSaveContext.save.weekEventReg[23] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_23_10);
Message_StartTextbox(play, 0x1069, NULL);
}
break;
@@ -665,8 +665,8 @@ void func_80B5CD40(EnOt* this, PlayState* play) {
case TEXT_STATE_DONE:
if (Message_ShouldAdvance(play) && (play->msgCtx.currentTextId == 0x1069)) {
this->unk_32C |= 4;
- ActorCutscene_Stop(this->cutscenes[0]);
- player->stateFlags2 &= ~0x20000000;
+ CutsceneManager_Stop(this->csIdList[0]);
+ player->stateFlags2 &= ~PLAYER_STATE2_20000000;
func_80B5CE6C(this, play);
}
break;
@@ -693,15 +693,16 @@ void func_80B5CEC8(EnOt* this, PlayState* play) {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 3, 0xE38, 0x38E);
if (this->unk_32C & 0x800) {
this->actor.flags |= ACTOR_FLAG_10000;
- func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_AP_NONE);
+ func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_IA_NONE);
} else {
this->actor.flags &= ~ACTOR_FLAG_10000;
- if ((player->actor.bgCheckFlags & 1) && !func_801242B4(player) && (this->actor.xzDistToPlayer < 130.0f)) {
+ if ((player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && !func_801242B4(player) &&
+ (this->actor.xzDistToPlayer < 130.0f)) {
func_800B8614(&this->actor, play, 130.0f);
}
}
- if (!(gSaveContext.save.weekEventReg[84] & 0x10) && (ENOT_GET_C000(&this->actor) == 1)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_84_10) && (ENOT_GET_C000(&this->actor) == 1)) {
if ((fabsf(this->actor.xzDistToPlayer) <= 130.0f) && (fabsf(this->actor.playerHeightRel) <= 130.0f)) {
player->unk_B2B = 29;
}
@@ -754,7 +755,7 @@ void func_80B5D160(EnOt* this, PlayState* play) {
phi_a1 = 0x1069;
}
} else if (Flags_GetSwitch(play, ENOT_GET_3F80(&this->actor))) {
- if (gSaveContext.save.weekEventReg[23] & 0x10) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_10)) {
phi_a1 = 0x106C;
} else {
phi_a1 = 0x106B;
@@ -803,12 +804,12 @@ void func_80B5D160(EnOt* this, PlayState* play) {
break;
case 0x10A5:
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80B5CE6C(this, play);
break;
case 0x106D:
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80B5C154(this, play);
break;
}
@@ -820,11 +821,11 @@ void func_80B5D160(EnOt* this, PlayState* play) {
s32 EnOt_ActorPathing_Move(PlayState* play, ActorPathing* actorPath) {
Actor* thisx = actorPath->actor;
EnOt* this = (EnOt*)thisx;
- f32 sp24 = Math_CosS(-thisx->world.rot.x) * thisx->speedXZ;
+ f32 sp24 = Math_CosS(-thisx->world.rot.x) * thisx->speed;
f32 sp20 = gFramerateDivisorHalf;
thisx->velocity.x = Math_SinS(thisx->world.rot.y) * sp24;
- thisx->velocity.y = Math_SinS(-thisx->world.rot.x) * thisx->speedXZ;
+ thisx->velocity.y = Math_SinS(-thisx->world.rot.x) * thisx->speed;
thisx->velocity.z = Math_CosS(thisx->world.rot.y) * sp24;
this->unk_330.x += (thisx->velocity.x * sp20) + thisx->colChkInfo.displacement.x;
@@ -846,7 +847,7 @@ s32 EnOt_ActorPathing_UpdateActorInfo(PlayState* play, ActorPathing* actorPath)
s32 sp34;
thisx->gravity = 0.0f;
- Math_SmoothStepToF(&thisx->speedXZ, 10.0f, 0.8f, 2.0f, 0.0f);
+ Math_SmoothStepToF(&thisx->speed, 10.0f, 0.8f, 2.0f, 0.0f);
sp50.x = actorPath->curPoint.x - thisx->world.pos.x;
sp50.y = actorPath->curPoint.y - thisx->world.pos.y;
@@ -857,10 +858,10 @@ s32 EnOt_ActorPathing_UpdateActorInfo(PlayState* play, ActorPathing* actorPath)
sp44.z = actorPath->curPoint.z - actorPath->prevPoint.z;
temp = Math3D_Parallel(&sp50, &sp44);
- if ((actorPath->distSqToCurPointXZ < SQ(thisx->speedXZ)) || (temp <= 0.0f)) {
+ if ((actorPath->distSqToCurPointXZ < SQ(thisx->speed)) || (temp <= 0.0f)) {
ret = true;
} else {
- temp = SQ(thisx->speedXZ) / actorPath->distSqToCurPoint;
+ temp = SQ(thisx->speed) / actorPath->distSqToCurPoint;
sp34 = ABS(actorPath->rotToCurPoint.x - thisx->world.rot.x);
sp2C = (s32)(sp34 * temp) + 0xAAA;
@@ -885,9 +886,9 @@ void func_80B5D648(EnOt* this, PlayState* play) {
this->actorPath.pointOffset.y = 0.0f;
this->actorPath.pointOffset.z = 0.0f;
this->actor.gravity = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, 1, &this->animIndex);
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8);
Flags_SetSwitch(play, ENOT_GET_3F80(&this->actor));
this->actionFunc = func_80B5D750;
@@ -915,7 +916,7 @@ void func_80B5D750(EnOt* this, PlayState* play) {
}
if ((this->unk_32C & 1) && (this->actor.xzDistToPlayer <= 180.0f)) {
- this->actor.flags &= ~ACTOR_FLAG_8000000;
+ this->actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON;
this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8);
if (D_80B5E884 != 0) {
func_80B5C9A8(this, play);
@@ -930,11 +931,11 @@ void EnOt_Update(Actor* thisx, PlayState* play) {
EnOt* this = THIS;
if ((this->animIndex == 1) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SEAHORSE_SWIM);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SEAHORSE_SWIM);
}
this->actionFunc(this, play);
- if (this->actor.bgCheckFlags & 0x20) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER) {
if (DECR(this->unk_354) == 0) {
if (this->actor.flags & ACTOR_FLAG_40) {
s32 i;
@@ -947,7 +948,7 @@ void EnOt_Update(Actor* thisx, PlayState* play) {
}
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 10.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 10.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
if (this->actor.world.pos.y <= this->actor.floorHeight + 50.0f) {
this->actor.world.pos.y = this->actor.floorHeight + 50.0f;
@@ -985,20 +986,20 @@ void func_80B5DB6C(Actor* thisx, PlayState* play) {
EnOt* this = THIS;
Player* player = GET_PLAYER(play);
- if (!(gSaveContext.save.weekEventReg[84] & 0x10) && !(this->unk_32C & 8)) {
- if (gSaveContext.save.weekEventReg[25] & 4) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_84_10) && !(this->unk_32C & 8)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_04)) {
Vec3f sp50;
func_80B5B2E0(play, &this->actor.world.pos, ENOT_GET_7F(&this->actor), &sp50, &this->unk_340);
if (Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_OT, sp50.x, sp50.y, sp50.z, 0,
this->actor.shape.rot.y, 1, ENOT_GET_3FFF(&this->actor) | 0x8000,
- this->actor.cutscene, this->actor.unk20, NULL) != NULL) {
+ this->actor.csId, this->actor.halfDaysBits, NULL) != NULL) {
this->unk_32C |= 8;
}
} else if (D_80B5E888 != NULL) {
s32 sp4C = false;
- if (gSaveContext.save.weekEventReg[13] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_01)) {
if (!SurfaceType_IsHorseBlocked(&play->colCtx, player->actor.floorPoly, player->actor.floorBgId)) {
sp4C = true;
}
@@ -1010,7 +1011,7 @@ void func_80B5DB6C(Actor* thisx, PlayState* play) {
temp->unk_32C |= 8;
temp->unk_346 = ENOT_GET_7F(&this->actor);
temp->actor.params = this->actor.params;
- temp->actor.cutscene = this->actor.cutscene;
+ temp->actor.csId = this->actor.csId;
this->unk_32C |= 8;
}
} else if (SurfaceType_IsHorseBlocked(&play->colCtx, player->actor.floorPoly, player->actor.floorBgId)) {
@@ -1137,7 +1138,7 @@ void func_80B5E1D8(PlayState* play, EnOtUnkStruct* arg1, s32 arg2) {
OPEN_DISPS(play->state.gfxCtx);
- POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP);
+ POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP);
for (i = 0; i < arg2; i++, arg1++) {
diff --git a/src/overlays/actors/ovl_En_Ot/z_en_ot.h b/src/overlays/actors/ovl_En_Ot/z_en_ot.h
index 5399e2278..8b01c6654 100644
--- a/src/overlays/actors/ovl_En_Ot/z_en_ot.h
+++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.h
@@ -45,7 +45,7 @@ typedef struct EnOt {
/* 0x346 */ s16 unk_346;
/* 0x348 */ Vec3f unk_348;
/* 0x354 */ s16 unk_354;
- /* 0x356 */ s16 cutscenes[4];
+ /* 0x356 */ s16 csIdList[4];
/* 0x360 */ struct EnOt* unk_360;
/* 0x364 */ LightNode* lightNode;
/* 0x368 */ LightInfo lightInfo;
@@ -64,6 +64,4 @@ typedef struct EnOt {
/* 0x74C */ Vec3f unk_74C;
} EnOt; // size = 0x758
-extern const ActorInit En_Ot_InitVars;
-
#endif // Z_EN_OT_H
diff --git a/src/overlays/actors/ovl_En_Owl/overlay.cfg b/src/overlays/actors/ovl_En_Owl/overlay.cfg
deleted file mode 100644
index c3609f992..000000000
--- a/src/overlays/actors/ovl_En_Owl/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Owl
-z_en_owl.c
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 8b636787d..f71d227f6 100644
--- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c
+++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c
@@ -48,7 +48,7 @@ typedef enum {
/* 0x01 */ OWL_OK
} EnOwlMessageChoice;
-const ActorInit En_Owl_InitVars = {
+ActorInit En_Owl_InitVars = {
ACTOR_EN_OWL,
ACTORCAT_NPC,
FLAGS,
@@ -102,19 +102,19 @@ void EnOwl_Init(Actor* thisx, PlayState* play) {
s32 pad;
EnOwl* this = THIS;
s32 i;
- s16 cutscene = this->actor.cutscene;
+ s16 csId = this->actor.csId;
s32 owlType;
s32 switchFlag;
- for (i = 0; i < ARRAY_COUNT(this->unk_400); i++) {
- this->unk_400[i] = cutscene;
- if (cutscene != -1) {
- this->actor.cutscene = cutscene;
- cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene);
+ for (i = 0; i < ARRAY_COUNT(this->csIdList); i++) {
+ this->csIdList[i] = csId;
+ if (csId != CS_ID_NONE) {
+ this->actor.csId = csId;
+ csId = CutsceneManager_GetAdditionalCsId(this->actor.csId);
}
}
- this->actor.cutscene = this->unk_400[0];
+ this->actor.csId = this->csIdList[0];
Actor_ProcessInitChain(&this->actor, sInitChain);
if (ENOWL_GET_TYPE(&this->actor) == ENOWL_GET_TYPE_30) {
Actor_SetScale(&this->actor, 0.1f);
@@ -144,28 +144,28 @@ void EnOwl_Init(Actor* thisx, PlayState* play) {
this->unk_409 = 4;
this->unk_40B = this->unk_408 = 0;
this->unk_40C = 4;
- this->unk_406 = -1;
+ this->csIdIndex = -1;
owlType = ENOWL_GET_TYPE(&this->actor);
switchFlag = ENOWL_GET_SWITCHFLAG(&this->actor);
switch (owlType) {
case ENOWL_GET_TYPE_1:
if ((switchFlag < 0x7F) && Flags_GetSwitch(play, switchFlag)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
break;
case ENOWL_GET_TYPE_2:
- if (gSaveContext.save.inventory.items[ITEM_LENS] == ITEM_LENS) {
- Actor_MarkForDeath(&this->actor);
+ if (gSaveContext.save.saveInfo.inventory.items[ITEM_LENS] == ITEM_LENS) {
+ Actor_Kill(&this->actor);
return;
}
break;
case ENOWL_GET_TYPE_3:
if (CHECK_QUEST_ITEM(QUEST_SONG_SOARING)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
break;
@@ -183,7 +183,7 @@ void EnOwl_Init(Actor* thisx, PlayState* play) {
case ENOWL_GET_TYPE_2:
this->actionFunc = func_8095BE0C;
- if (gSaveContext.save.weekEventReg[9] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_09_20)) {
this->actor.textId = 0xBF0;
} else {
this->actor.textId = 0xBEA;
@@ -229,7 +229,7 @@ s32 func_8095A978(EnOwl* this, PlayState* play, u16 textId, f32 targetDist, f32
this->actor.textId = textId;
if (this->actor.xzDistToPlayer < targetDist) {
this->actor.flags |= ACTOR_FLAG_10000;
- func_800B8500(&this->actor, play, targetDist, arg4, PLAYER_AP_NONE);
+ func_800B8500(&this->actor, play, targetDist, arg4, PLAYER_IA_NONE);
}
return false;
@@ -242,7 +242,7 @@ s32 func_8095A9FC(EnOwl* this, PlayState* play, u16 textId) {
this->actor.textId = textId;
if (this->actor.xzDistToPlayer < 120.0f) {
- func_800B8500(&this->actor, play, 350.0f, 1000.0f, PLAYER_AP_NONE);
+ func_800B8500(&this->actor, play, 350.0f, 1000.0f, PLAYER_IA_NONE);
}
return false;
@@ -292,7 +292,7 @@ void func_8095ABA8(EnOwl* this) {
void func_8095ABF0(EnOwl* this, PlayState* play) {
if (Actor_TextboxIsClosing(&this->actor, play)) {
- Audio_QueueSeqCmd(0x110000FF);
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 0);
func_8095AAD0(this, play);
this->actor.flags &= ~ACTOR_FLAG_10000;
}
@@ -301,7 +301,7 @@ void func_8095ABF0(EnOwl* this, PlayState* play) {
// Unused?
void func_8095AC50(EnOwl* this, PlayState* play) {
if (Actor_TextboxIsClosing(&this->actor, play)) {
- Audio_QueueSeqCmd(0x110000FF);
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 0);
if ((this->unk_3DA % 64) == 0) {
func_8095AAD0(this, play);
} else {
@@ -315,11 +315,11 @@ void func_8095AC50(EnOwl* this, PlayState* play) {
void func_8095ACEC(EnOwl* this) {
this->actionFlags &= ~0x40;
- if (this->unk_406 >= 0) {
- if (ActorCutscene_GetCurrentIndex() == this->unk_400[this->unk_406]) {
- ActorCutscene_Stop(this->unk_400[this->unk_406]);
+ if (this->csIdIndex >= 0) {
+ if (CutsceneManager_GetCurrentCsId() == this->csIdList[this->csIdIndex]) {
+ CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
}
- this->unk_406 = -1;
+ this->csIdIndex = -1;
}
}
@@ -327,12 +327,12 @@ void func_8095AD54(EnOwl* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) {
switch (play->msgCtx.choiceIndex) {
case OWL_REPEAT:
- func_80151938(play, 0x7D1);
+ Message_ContinueTextbox(play, 0x7D1);
this->actionFunc = func_8095AE00;
break;
case OWL_OK:
- func_80151938(play, 0x7D3);
+ Message_ContinueTextbox(play, 0x7D3);
this->actionFunc = func_8095ABF0;
break;
}
@@ -341,14 +341,14 @@ void func_8095AD54(EnOwl* this, PlayState* play) {
void func_8095AE00(EnOwl* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_80151938(play, 0x7D2);
+ Message_ContinueTextbox(play, 0x7D2);
this->actionFunc = func_8095AD54;
}
}
void func_8095AE60(EnOwl* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_80151938(play, 0x7D1);
+ Message_ContinueTextbox(play, 0x7D1);
this->actionFunc = func_8095AE00;
}
}
@@ -367,10 +367,10 @@ void func_8095AF2C(EnOwl* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
if (play->msgCtx.currentTextId == 0xBFE) {
func_8095ACEC(this);
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_8095ABF0;
} else {
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
}
}
break;
@@ -387,7 +387,7 @@ void func_8095AFEC(EnOwl* this, PlayState* play) {
if (func_8095A978(this, play, 0xBF6, 200.0f, 100.0f)) {
Audio_PlayFanfare(NA_BGM_OWL);
this->actionFunc = func_8095AF2C;
- this->unk_406 = 0;
+ this->csIdIndex = 0;
this->actionFlags |= 0x40;
}
}
@@ -411,7 +411,7 @@ void func_8095B0C8(EnOwl* this) {
Vec3s* points = Lib_SegmentedToVirtual(this->path->points);
points += this->unk_3F8;
- this->unk_3EC = Math_FAtan2F(points->z - this->actor.world.pos.z, points->x - this->actor.world.pos.x);
+ this->unk_3EC = Math_Atan2S_XY(points->z - this->actor.world.pos.z, points->x - this->actor.world.pos.x);
this->unk_3F0 = points->y;
}
@@ -419,23 +419,23 @@ void func_8095B158(EnOwl* this) {
if (Animation_OnFrame(&this->skelAnime1, 2.0f) || Animation_OnFrame(&this->skelAnime1, 9.0f) ||
Animation_OnFrame(&this->skelAnime1, 23.0f) || Animation_OnFrame(&this->skelAnime1, 40.0f) ||
Animation_OnFrame(&this->skelAnime1, 58.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_OWL_FLUTTER);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_OWL_FLUTTER);
}
}
void func_8095B1E4(EnOwl* this, PlayState* play) {
- if (this->actor.speedXZ < 6.0f) {
- this->actor.speedXZ += 1.0f;
+ if (this->actor.speed < 6.0f) {
+ this->actor.speed += 1.0f;
}
if (this->actor.xzDistToPlayer > 6000.0f) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
void func_8095B254(EnOwl* this, PlayState* play) {
- if (this->actor.speedXZ < 6.0f) {
- this->actor.speedXZ += 1.0f;
+ if (this->actor.speed < 6.0f) {
+ this->actor.speed += 1.0f;
}
if (this->actionFlags & 1) {
@@ -478,7 +478,7 @@ void func_8095B3DC(EnOwl* this, PlayState* play) {
void func_8095B480(EnOwl* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (player->stateFlags3 & 0x10000000) {
+ if (player->stateFlags3 & PLAYER_STATE3_10000000) {
this->actor.textId = 0xBF1;
EnOwl_ChangeMode(this, func_8095BF58, func_8095C484, &this->skelAnime2, &object_owl_Anim_00CDB0, 0.0f);
this->eyeTexIndex = 0;
@@ -491,7 +491,7 @@ void func_8095B480(EnOwl* this, PlayState* play) {
this->unk_3EC = this->actor.home.rot.y;
this->actor.world.pos = this->actor.home.pos;
func_8095A510(this, play);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = func_8095BE0C;
}
}
@@ -502,10 +502,10 @@ void func_8095B574(EnOwl* this, PlayState* play) {
this->actionFunc = func_8095BA84;
Audio_PlayFanfare(NA_BGM_OWL);
this->actionFlags |= 0x40;
- this->unk_406 = 2;
+ this->csIdIndex = 2;
} else if (this->actor.xzDistToPlayer < 200.0f) {
this->actor.flags |= ACTOR_FLAG_10000;
- func_800B8500(&this->actor, play, 200.0f, 400.0f, PLAYER_AP_NONE);
+ func_800B8500(&this->actor, play, 200.0f, 400.0f, PLAYER_IA_NONE);
} else {
this->actor.flags &= ~ACTOR_FLAG_10000;
}
@@ -540,8 +540,8 @@ void func_8095B76C(EnOwl* this, PlayState* play) {
Math_SmoothStepToS(&this->actor.world.rot.y, sp4A, 6, 0x800, 0x200);
this->actor.shape.rot.y = this->actor.world.rot.y;
- if (sp44 < SQ(this->actor.speedXZ)) {
- this->actor.speedXZ = 0.0f;
+ if (sp44 < SQ(this->actor.speed)) {
+ this->actor.speed = 0.0f;
points = Lib_SegmentedToVirtual(this->path->points);
points += this->unk_3F8;
@@ -564,13 +564,13 @@ void func_8095B76C(EnOwl* this, PlayState* play) {
}
func_8095B0C8(this);
} else if (sp44 < SQ(21.0f)) {
- if (this->actor.speedXZ > 1.0f) {
- this->actor.speedXZ -= 1.0f;
+ if (this->actor.speed > 1.0f) {
+ this->actor.speed -= 1.0f;
} else {
- this->actor.speedXZ = 1.0f;
+ this->actor.speed = 1.0f;
}
- } else if (this->actor.speedXZ < 6.0f) {
- this->actor.speedXZ += 1.0f;
+ } else if (this->actor.speed < 6.0f) {
+ this->actor.speed += 1.0f;
}
func_8095B06C(this);
@@ -613,17 +613,17 @@ void func_8095BA84(EnOwl* this, PlayState* play) {
switch (play->msgCtx.choiceIndex) {
case 0:
func_8019F208();
- if (gSaveContext.save.weekEventReg[9] & 0x40) {
- func_80151938(play, 0xBF4);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_09_40)) {
+ Message_ContinueTextbox(play, 0xBF4);
} else {
- gSaveContext.save.weekEventReg[9] |= 0x40;
- func_80151938(play, 0xBED);
+ SET_WEEKEVENTREG(WEEKEVENTREG_09_40);
+ Message_ContinueTextbox(play, 0xBED);
}
break;
case 1:
func_8019F230();
- func_80151938(play, 0xBEF);
+ Message_ContinueTextbox(play, 0xBEF);
break;
}
break;
@@ -632,12 +632,12 @@ void func_8095BA84(EnOwl* this, PlayState* play) {
switch (play->msgCtx.choiceIndex) {
case 0:
func_8019F208();
- func_80151938(play, 0xBF4);
+ Message_ContinueTextbox(play, 0xBF4);
return;
case 1:
func_8019F230();
- func_80151938(play, 0xBF3);
+ Message_ContinueTextbox(play, 0xBF3);
return;
}
break;
@@ -649,23 +649,23 @@ void func_8095BA84(EnOwl* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
switch (play->msgCtx.currentTextId) {
case 0xBEA:
- gSaveContext.save.weekEventReg[9] |= 0x20;
- func_80151938(play, 0xBEB);
+ SET_WEEKEVENTREG(WEEKEVENTREG_09_20);
+ Message_ContinueTextbox(play, 0xBEB);
break;
case 0xBEB:
case 0xBF0:
- func_80151938(play, 0xBEC);
+ Message_ContinueTextbox(play, 0xBEC);
break;
case 0xBED:
case 0xBF4:
- func_80151938(play, 0xBEE);
+ Message_ContinueTextbox(play, 0xBEE);
break;
case 0xBEE:
- func_801477B4(play);
- Audio_QueueSeqCmd(0x110000FF);
+ Message_CloseTextbox(play);
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 0);
EnOwl_ChangeMode(this, func_8095B9FC, func_8095C484, &this->skelAnime1, &object_owl_Anim_00CB94,
0.0f);
this->eyeTexIndex = 0;
@@ -674,14 +674,14 @@ void func_8095BA84(EnOwl* this, PlayState* play) {
this->actor.flags &= ~ACTOR_FLAG_10000;
this->actor.home.rot.x = 0;
func_8095ACEC(this);
- this->unk_406 = 0;
+ this->csIdIndex = 0;
this->actionFlags |= 0x40;
break;
case 0xBEF:
case 0xBF3:
- func_801477B4(play);
- Audio_QueueSeqCmd(0x110000FF);
+ Message_CloseTextbox(play);
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 0);
func_8095ACEC(this);
this->actor.flags &= ~ACTOR_FLAG_10000;
this->actor.textId = 0xBF0;
@@ -689,12 +689,12 @@ void func_8095BA84(EnOwl* this, PlayState* play) {
break;
case 0xBF1:
- func_80151938(play, 0xBF2);
+ Message_ContinueTextbox(play, 0xBF2);
break;
case 0xBF5:
- func_801477B4(play);
- Audio_QueueSeqCmd(0x110000FF);
+ Message_CloseTextbox(play);
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 0);
this->actor.flags &= ~ACTOR_FLAG_10000;
EnOwl_ChangeMode(this, func_8095B3DC, func_8095C484, &this->skelAnime1, &object_owl_Anim_00CB94,
0.0f);
@@ -714,15 +714,15 @@ void func_8095BE0C(EnOwl* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->actionFunc = func_8095BA84;
Audio_PlayFanfare(NA_BGM_OWL);
- this->unk_406 = 1;
+ this->csIdIndex = 1;
this->actionFlags |= 0x40;
} else if (this->actor.textId == 0xBF0) {
if (this->actor.isTargeted) {
- func_800B8500(&this->actor, play, 200.0f, 200.0f, PLAYER_AP_NONE);
+ func_800B8500(&this->actor, play, 200.0f, 200.0f, PLAYER_IA_NONE);
}
} else if (this->actor.xzDistToPlayer < 200.0f) {
this->actor.flags |= ACTOR_FLAG_10000;
- func_800B8500(&this->actor, play, 200.0f, 200.0f, PLAYER_AP_NONE);
+ func_800B8500(&this->actor, play, 200.0f, 200.0f, PLAYER_IA_NONE);
} else {
this->actor.flags &= ~ACTOR_FLAG_10000;
}
@@ -740,13 +740,13 @@ void func_8095BF58(EnOwl* this, PlayState* play) {
void func_8095BF78(EnOwl* this, PlayState* play) {
this->actor.flags |= ACTOR_FLAG_20;
if (this->actor.xzDistToPlayer > 6000.0f) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
Math_SmoothStepToS(&this->actor.world.rot.y, this->unk_3EC, 2, 0x80, 0x40);
this->actor.shape.rot.y = this->actor.world.rot.y;
- if (this->actor.speedXZ < 16.0f) {
- this->actor.speedXZ += 0.5f;
+ if (this->actor.speed < 16.0f) {
+ this->actor.speed += 0.5f;
}
if ((this->unk_3E4 + 1000.0f) < this->actor.world.pos.y) {
@@ -767,11 +767,11 @@ void func_8095C09C(EnOwl* this, PlayState* play) {
if (this->skelAnime1.curFrame > 45.0f) {
this->actor.velocity.y = 2.0f;
this->actor.gravity = 0.0f;
- this->actor.speedXZ = 8.0f;
+ this->actor.speed = 8.0f;
} else if (this->skelAnime1.curFrame > 17.0f) {
this->actor.velocity.y = 6.0f;
this->actor.gravity = 0.0f;
- this->actor.speedXZ = 4.0f;
+ this->actor.speed = 4.0f;
}
if (this->actionFlags & 1) {
@@ -865,16 +865,16 @@ s32 func_8095C510(EnOwl* this) {
void func_8095C568(EnOwl* this) {
if (this->actionFlags & 0x40) {
- if ((this->unk_406 < 0) || (this->unk_400[this->unk_406] < 0)) {
+ if ((this->csIdIndex < 0) || (this->csIdList[this->csIdIndex] < 0)) {
this->actionFlags &= ~0x40;
- } else if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->unk_400[this->unk_406]);
- } else if (ActorCutscene_GetCanPlayNext(this->unk_400[this->unk_406])) {
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_400[this->unk_406], &this->actor);
+ } else if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csIdList[this->csIdIndex]);
+ } else if (CutsceneManager_IsNext(this->csIdList[this->csIdIndex])) {
+ CutsceneManager_StartWithPlayerCs(this->csIdList[this->csIdIndex], &this->actor);
this->actionFlags &= ~0x40;
} else {
- ActorCutscene_SetIntentToPlay(this->unk_400[this->unk_406]);
+ CutsceneManager_Queue(this->csIdList[this->csIdIndex]);
}
}
}
@@ -894,12 +894,12 @@ void EnOwl_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
func_8095C568(this);
- Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, 4);
+ 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_PlaySfxAtPos(&this->actor, NA_SE_EN_OWL_FLUTTER);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_OWL_FLUTTER);
}
if (this->actionFlags & 2) {
@@ -1066,24 +1066,24 @@ void func_8095CCF4(Actor* thisx, PlayState* play) {
EnOwl* this = THIS;
Player* player = GET_PLAYER(play);
- if (player->stateFlags3 & 0x10000000) {
- Actor_MarkForDeath(&this->actor);
+ if (player->stateFlags3 & PLAYER_STATE3_10000000) {
+ Actor_Kill(&this->actor);
return;
}
if (this->actor.world.pos.y < (this->unk_3F0 - 1000.0f)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
this->actor.world.pos.y -= 1.0f;
- Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, 4);
- if (this->actor.bgCheckFlags & 1) {
+ Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, UPDBGCHECKINFO_FLAG_4);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->unk_3DA = (this->unk_3DA >> 3) * 7;
if (this->unk_3DC > 0) {
this->unk_3DC--;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
}
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 781fd308c..5e02aba94 100644
--- a/src/overlays/actors/ovl_En_Owl/z_en_owl.h
+++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.h
@@ -44,8 +44,8 @@ typedef struct EnOwl {
/* 0x3F4 */ Path* path;
/* 0x3F8 */ s32 unk_3F8;
/* 0x3FC */ s32 unk_3FC;
- /* 0x400 */ s16 unk_400[3];
- /* 0x406 */ s16 unk_406;
+ /* 0x400 */ s16 csIdList[3];
+ /* 0x406 */ s16 csIdIndex;
/* 0x408 */ u8 unk_408;
/* 0x409 */ u8 unk_409;
/* 0x40A */ u8 unk_40A;
@@ -56,6 +56,4 @@ typedef struct EnOwl {
/* 0x414 */ EnOwlFunc unk_414;
} EnOwl; // size = 0x418
-extern const ActorInit En_Owl_InitVars;
-
#endif // Z_EN_OWL_H
diff --git a/src/overlays/actors/ovl_En_Pamera/overlay.cfg b/src/overlays/actors/ovl_En_Pamera/overlay.cfg
deleted file mode 100644
index 544499e92..000000000
--- a/src/overlays/actors/ovl_En_Pamera/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Pamera
-z_en_pamera.c
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 075ced540..dab8f591e 100644
--- a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c
+++ b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c
@@ -69,7 +69,7 @@ void func_80BDA288(EnPamera* this);
void func_80BDA2E0(EnPamera* this, PlayState* play);
void func_80BDA344(Actor* thisx, PlayState* play);
-const ActorInit En_Pamera_InitVars = {
+ActorInit En_Pamera_InitVars = {
ACTOR_EN_PAMERA,
ACTORCAT_NPC,
FLAGS,
@@ -153,17 +153,19 @@ void EnPamera_Init(Actor* thisx, PlayState* play) {
} else {
func_80BD8588(this, play);
func_80BD8658(this);
+
if (1) {}
- if (!(gSaveContext.save.weekEventReg[14] & 4) || (gSaveContext.save.weekEventReg[52] & 0x20) ||
- (gSaveContext.save.weekEventReg[75] & 0x20) || (gSaveContext.save.entrance == ENTRANCE(IKANA_CANYON, 9))) {
- Actor_MarkForDeath(&this->actor);
+
+ 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);
}
- if (gSaveContext.save.weekEventReg[61] & 4) {
- if (!(gSaveContext.save.weekEventReg[59] & 1) ||
- (gSaveContext.save.entrance != ENTRANCE(IKANA_CANYON, 2))) {
+
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_61_04)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_59_01) || (gSaveContext.save.entrance != ENTRANCE(IKANA_CANYON, 2))) {
if ((gSaveContext.save.entrance != ENTRANCE(IKANA_CANYON, 2)) &&
- (gSaveContext.save.weekEventReg[59] & 1)) {
- gSaveContext.save.weekEventReg[59] &= (u8)~1;
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_59_01)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_59_01);
}
func_80BD8700(this);
} else {
@@ -174,7 +176,7 @@ void EnPamera_Init(Actor* thisx, PlayState* play) {
func_80BD8CCC(this);
}
} else {
- gSaveContext.save.weekEventReg[59] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_59_01);
func_80BD8FF0(this);
}
}
@@ -199,9 +201,9 @@ void func_80BD8588(EnPamera* this, PlayState* play) {
Vec3f sp28;
if (path == NULL) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
- if (gSaveContext.save.weekEventReg[61] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_61_04)) {
path = &play->setupPathList[path->unk1];
}
this->pathPoints = Lib_SegmentedToVirtual(path->points);
@@ -214,14 +216,14 @@ void func_80BD8588(EnPamera* this, PlayState* play) {
void func_80BD8658(EnPamera* this) {
s32 i;
- s16 nextCutscene = this->actor.cutscene;
+ s16 csId = this->actor.csId;
- for (i = 0; i < ARRAY_COUNT(this->cutscenes); i++) {
- if (nextCutscene == -1) {
+ for (i = 0; i < ARRAY_COUNT(this->csIdList); i++) {
+ if (csId == CS_ID_NONE) {
break;
}
- this->cutscenes[i] = nextCutscene;
- nextCutscene = ActorCutscene_GetAdditionalCutscene(nextCutscene);
+ this->csIdList[i] = csId;
+ csId = CutsceneManager_GetAdditionalCsId(csId);
}
}
@@ -240,20 +242,20 @@ void func_80BD8700(EnPamera* this) {
void func_80BD8758(EnPamera* this, PlayState* play) {
if (this->hideInisdeTimer++ > 1800) {
- if (ActorCutscene_GetCanPlayNext(this->cutscenes[0]) && (this->cutscenes[0] != -1)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->cutscenes[0], &this->actor);
- Camera_SetToTrackActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(this->cutscenes[0])),
+ if (CutsceneManager_IsNext(this->csIdList[0]) && (this->csIdList[0] != -1)) {
+ CutsceneManager_StartWithPlayerCs(this->csIdList[0], &this->actor);
+ Camera_SetToTrackActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(this->csIdList[0])),
&this->actor);
- this->actor.speedXZ = 1.5f;
+ this->actor.speed = 1.5f;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1);
this->actor.shape.rot.y = this->actor.home.rot.y;
this->actor.world.rot.y = this->actor.home.rot.y;
func_80BD9338(this, play);
func_80BD8908(this);
- } else if ((this->cutscenes[0] != -1) && (this->actor.xzDistToPlayer < 1000.0f)) {
- ActorCutscene_SetIntentToPlay(this->cutscenes[0]);
+ } else if ((this->csIdList[0] != -1) && (this->actor.xzDistToPlayer < 1000.0f)) {
+ CutsceneManager_Queue(this->csIdList[0]);
} else {
- this->actor.speedXZ = 1.5f;
+ this->actor.speed = 1.5f;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1);
this->actor.shape.rot.y = this->actor.home.rot.y;
this->actor.world.rot.y = this->actor.home.rot.y;
@@ -288,9 +290,9 @@ void func_80BD8964(EnPamera* this, PlayState* play) {
vec.z = this->pathPoints->z;
if (Math_Vec3f_StepTo(&this->actor.world.pos, &vec, 1.0f) < 5.0f) {
- this->actor.speedXZ = 1.5f;
+ this->actor.speed = 1.5f;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1);
- gSaveContext.save.weekEventReg[59] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_59_01);
func_80BD8B50(this);
}
}
@@ -305,10 +307,10 @@ void func_80BD8A7C(EnPamera* this, PlayState* play) {
0x3000, 0x100);
this->actor.world.rot.y = this->actor.shape.rot.y;
if (Math_Vec3f_StepTo(&this->actor.world.pos, &this->actor.home.pos, 1.5f) < 10.0f) {
- gSaveContext.save.weekEventReg[59] &= (u8)~1;
- if (!(gSaveContext.save.weekEventReg[61] & 4)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_59_01);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_61_04)) {
func_80BD92D0(this, play);
- gSaveContext.save.weekEventReg[61] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_61_04);
}
func_80BD8700(this);
}
@@ -327,7 +329,7 @@ void func_80BD8B70(EnPamera* this, PlayState* play) {
vec.y = this->pathPoints[this->pathIndex].y;
vec.z = this->pathPoints[this->pathIndex].z;
sp32 = Math_Vec3f_Yaw(&this->actor.world.pos, &vec);
- if (Math_Vec3f_StepToXZ(&this->actor.world.pos, &vec, this->actor.speedXZ) > 10.0f) {
+ 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)) {
@@ -336,20 +338,20 @@ void func_80BD8B70(EnPamera* this, PlayState* play) {
func_80BD8CCC(this);
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
this->actor.world.pos.y += this->actor.gravity;
}
void func_80BD8CCC(EnPamera* this) {
this->hideInisdeTimer = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
this->actionFunc = func_80BD8D1C;
}
void func_80BD8D1C(EnPamera* this, PlayState* play) {
if (this->hideInisdeTimer++ > 200) {
- this->actor.speedXZ = 1.5f;
+ this->actor.speed = 1.5f;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1);
func_80BD8D80(this);
}
@@ -371,7 +373,7 @@ void func_80BD8DB0(EnPamera* this, PlayState* play) {
vec.y = this->pathPoints[this->pathIndex].y;
vec.z = this->pathPoints[this->pathIndex].z;
sp32 = Math_Vec3f_Yaw(&this->actor.world.pos, &vec);
- if (Math_Vec3f_StepToXZ(&this->actor.world.pos, &vec, this->actor.speedXZ) > 10.0f) {
+ 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) {
@@ -380,7 +382,7 @@ void func_80BD8DB0(EnPamera* this, PlayState* play) {
func_80BD9338(this, play);
func_80BD8A38(this);
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
this->actor.world.pos.y += this->actor.gravity;
}
@@ -394,7 +396,7 @@ void func_80BD8F60(EnPamera* this, PlayState* play) {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0xA, 0x3000, 0x1000);
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
- this->actor.speedXZ = 3.0f;
+ this->actor.speed = 3.0f;
func_80BD93CC(this, 0, 0);
func_80BD8D80(this);
}
@@ -423,17 +425,17 @@ 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_80BD8DB0) || (this->actor.speedXZ != 3.0f)) &&
+ ((this->actionFunc != func_80BD8DB0) || (this->actor.speed != 3.0f)) &&
((this->actor.xzDistToPlayer < 150.0f) ||
((this->actionFunc == func_80BD909C) &&
(Math_Vec3f_DistXZ(&this->actor.home.pos, &player->actor.world.pos) < 200.0f)))) {
- if ((ActorCutscene_GetCanPlayNext(this->cutscenes[1])) && ((this->cutscenes[1] != -1))) {
- ActorCutscene_StartAndSetUnkLinkFields(this->cutscenes[1], &this->actor);
- Camera_SetToTrackActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(this->cutscenes[1])),
+ if ((CutsceneManager_IsNext(this->csIdList[1])) && ((this->csIdList[1] != -1))) {
+ CutsceneManager_StartWithPlayerCs(this->csIdList[1], &this->actor);
+ Camera_SetToTrackActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(this->csIdList[1])),
&this->actor);
EnPamera_LookDownWell(this);
- } else if (this->cutscenes[1] != -1) {
- ActorCutscene_SetIntentToPlay(this->cutscenes[1]);
+ } else if (this->csIdList[1] != -1) {
+ CutsceneManager_Queue(this->csIdList[1]);
} else {
EnPamera_LookDownWell(this);
}
@@ -499,11 +501,11 @@ void func_80BD93F4(EnPamera* this, PlayState* play) {
(this->actionFunc == func_80BD8964) || (this->actionFunc == func_80BD8A7C)) {
if (this->skelAnime.animation == &object_pamera_Anim_008AE0) {
if (Animation_OnFrame(&this->skelAnime, 9.0f) || Animation_OnFrame(&this->skelAnime, 18.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_PAMERA_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_PAMERA_WALK);
}
} else if ((this->skelAnime.animation == &object_pamera_Anim_008E38) &&
(Animation_OnFrame(&this->skelAnime, 2.0f) || Animation_OnFrame(&this->skelAnime, 6.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_PAMERA_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_PAMERA_WALK);
}
}
}
@@ -511,7 +513,7 @@ void func_80BD93F4(EnPamera* this, PlayState* play) {
void func_80BD94E0(EnPamera* this, PlayState* play) {
if ((this->actionFunc != func_80BD8B70) && (this->actionFunc != func_80BD8964) &&
(this->actionFunc != func_80BD909C) && (this->actionFunc != func_80BD8D1C) &&
- ((this->actionFunc != func_80BD8DB0) || (this->actor.speedXZ == 3.0f))) {
+ ((this->actionFunc != func_80BD8DB0) || (this->actor.speed == 3.0f))) {
Actor_TrackPlayer(play, &this->actor, &this->headRot, &this->torsoRot, this->actor.focus.pos);
} else {
Actor_TrackNone(&this->headRot, &this->torsoRot);
@@ -567,7 +569,7 @@ void func_80BD9840(EnPamera* this, PlayState* play) {
this->actor.update = func_80BDA344;
this->actor.flags |= ACTOR_FLAG_2000000;
this->actor.flags |= ACTOR_FLAG_100000;
- if ((gSaveContext.save.weekEventReg[75] & 0x20) || (gSaveContext.save.weekEventReg[52] & 0x20)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) || CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE)) {
func_80BD9E60(this);
func_80BD9938(this);
} else {
@@ -575,7 +577,7 @@ void func_80BD9840(EnPamera* this, PlayState* play) {
func_80BD9E60(this);
func_80BD9904(this);
}
- if (gSaveContext.save.weekEventReg[14] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04)) {
func_801A0204(NA_BGM_MUSIC_BOX_HOUSE);
} else {
func_801A0204(NA_BGM_INSIDE_A_HOUSE);
@@ -603,7 +605,8 @@ void func_80BD994C(EnPamera* this, PlayState* play) {
this->unk_324 = 0x15A8;
} else if ((gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) ||
- ((gSaveContext.save.weekEventReg[52] & 0x20) && (!(gSaveContext.save.weekEventReg[75] & 0x20)))) {
+ (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE) &&
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20))) {
func_80BD93CC(this, 1, 0);
Message_StartTextbox(play, 0x158E, &this->actor);
this->unk_324 = 0x158E;
@@ -678,7 +681,7 @@ void func_80BD9B4C(EnPamera* this, PlayState* play) {
break;
case 0x158E:
case 0x15A8:
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80BD9C70(this, play);
break;
}
@@ -689,18 +692,18 @@ void func_80BD9C70(EnPamera* this, PlayState* play) {
play->nextEntrance = ENTRANCE(IKANA_CANYON, 2);
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_70;
- gSaveContext.nextTransitionType = TRANS_TYPE_02;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
}
s32 func_80BD9CB8(EnPamera* this, PlayState* play) {
- s32 actionIndex;
+ s32 cueChannel;
- if (Cutscene_CheckActorAction(play, 0x1E5)) {
- actionIndex = Cutscene_GetActorActionIndex(play, 0x1E5);
- if (this->unk_326 != play->csCtx.actorActions[actionIndex]->action) {
- this->unk_326 = play->csCtx.actorActions[actionIndex]->action;
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_485)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_485);
+ if (this->cueId != play->csCtx.actorCues[cueChannel]->id) {
+ this->cueId = play->csCtx.actorCues[cueChannel]->id;
- switch (play->csCtx.actorActions[actionIndex]->action) {
+ switch (play->csCtx.actorCues[cueChannel]->id) {
case 1:
func_80BD9E88(this);
break;
@@ -725,18 +728,18 @@ s32 func_80BD9CB8(EnPamera* this, PlayState* play) {
break;
}
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
this->setupFunc(this, play);
return 1;
}
- if ((play->csCtx.state == 0) && (gSaveContext.save.weekEventReg[75] & 0x20)) {
+ if ((play->csCtx.state == CS_STATE_IDLE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20)) {
if ((this->actionFunc != func_80BD994C) && (this->actionFunc != EnPamera_HandleDialogue)) {
this->actor.shape.rot.y = this->actor.world.rot.y;
func_80BD9904(this);
func_80BD9E60(this);
}
}
- this->unk_326 = 0x63;
+ this->cueId = 99;
return 0;
}
@@ -770,7 +773,7 @@ void func_80BD9F3C(EnPamera* this, PlayState* play) {
Animation_OnFrame(&this->skelAnime, 10.0f) || Animation_OnFrame(&this->skelAnime, 14.0f) ||
Animation_OnFrame(&this->skelAnime, 18.0f) || Animation_OnFrame(&this->skelAnime, 22.0f) ||
Animation_OnFrame(&this->skelAnime, 25.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_PAMERA_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_PAMERA_WALK);
}
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
this->unk_31E = 0;
@@ -818,7 +821,7 @@ void func_80BDA1C8(EnPamera* this, PlayState* play) {
if (this->unk_31E == 1) {
if (Animation_OnFrame(&this->skelAnime, 2.0f) || Animation_OnFrame(&this->skelAnime, 6.0f) ||
Animation_OnFrame(&this->skelAnime, 10.0f) || Animation_OnFrame(&this->skelAnime, 14.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_PAMERA_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_PAMERA_WALK);
}
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
this->unk_31E = 0;
@@ -853,11 +856,11 @@ void func_80BDA344(Actor* thisx, PlayState* play) {
func_80BD9384(this, play);
if (func_80BD9CB8(this, play)) {
// Pamela is outside
- if (gSaveContext.save.weekEventReg[59] & 1) {
- gSaveContext.save.weekEventReg[59] &= (u8)~1;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_59_01)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_59_01);
}
- if (!(gSaveContext.save.weekEventReg[61] & 4)) {
- gSaveContext.save.weekEventReg[61] |= 4;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_61_04)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_61_04);
}
Actor_TrackNone(&this->headRot, &this->torsoRot);
} else {
@@ -866,7 +869,7 @@ void func_80BDA344(Actor* thisx, PlayState* play) {
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
}
- if (gSaveContext.save.weekEventReg[14] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04)) {
play->roomCtx.unk7A[0]++;
}
}
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 cf5611c4e..59bf40e09 100644
--- a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.h
+++ b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.h
@@ -28,15 +28,13 @@ typedef struct EnPamera {
/* 0x312 */ s16 unk_312;
/* 0x314 */ s16 unk_314;
/* 0x316 */ s16 unk_316;
- /* 0x318 */ s16 cutscenes[2];
+ /* 0x318 */ s16 csIdList[2];
/* 0x31C */ s16 hideInisdeTimer;
/* 0x31E */ s16 unk_31E;
/* 0x320 */ UNK_TYPE1 unk_320[0x2];
/* 0x322 */ s16 unk_322;
/* 0x324 */ u16 unk_324;
- /* 0x326 */ u16 unk_326;
+ /* 0x326 */ u16 cueId;
} EnPamera; // size = 0x328
-extern const ActorInit En_Pamera_InitVars;
-
#endif // Z_EN_PAMERA_H
diff --git a/src/overlays/actors/ovl_En_Pametfrog/overlay.cfg b/src/overlays/actors/ovl_En_Pametfrog/overlay.cfg
deleted file mode 100644
index de6a9fa77..000000000
--- a/src/overlays/actors/ovl_En_Pametfrog/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Pametfrog
-z_en_pametfrog.c
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 0582b7ca8..62dff4188 100644
--- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c
+++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c
@@ -67,7 +67,7 @@ void EnPametfrog_SnapperSpawn(EnPametfrog* this, PlayState* play);
void EnPametfrog_SetupTransitionGekkoSnapper(EnPametfrog* this, PlayState* play);
void EnPametfrog_TransitionGekkoSnapper(EnPametfrog* this, PlayState* play);
-const ActorInit En_Pametfrog_InitVars = {
+ActorInit En_Pametfrog_InitVars = {
ACTOR_EN_PAMETFROG,
ACTORCAT_BOSS,
FLAGS,
@@ -171,13 +171,11 @@ static InitChainEntry sInitChain[] = {
ICHAIN_U8(targetMode, 10, ICHAIN_STOP),
};
-// gSaveContext.save.weekEventReg[KEY] = VALUE
-// KEY | VALUE
static s32 isFrogReturnedFlags[] = {
- (32 << 8) | 0x40, // Woodfall Temple Frog Returned
- (32 << 8) | 0x80, // Great Bay Temple Frog Returned
- (33 << 8) | 0x01, // Southern Swamp Frog Returned
- (33 << 8) | 0x02, // Laundry Pool Frog Returned
+ WEEKEVENTREG_32_40,
+ WEEKEVENTREG_32_80,
+ WEEKEVENTREG_33_01,
+ WEEKEVENTREG_33_02,
};
void EnPametfrog_Init(Actor* thisx, PlayState* play) {
@@ -192,9 +190,8 @@ void EnPametfrog_Init(Actor* thisx, PlayState* play) {
Collider_InitAndSetJntSph(play, &this->collider, &this->actor, &sJntSphInit, this->colElement);
this->params = CLAMP(this->actor.params, 1, 4);
if (Flags_GetClear(play, play->roomCtx.curRoom.num)) {
- Actor_MarkForDeath(&this->actor);
- if (!(gSaveContext.save.weekEventReg[isFrogReturnedFlags[this->actor.params - 1] >> 8] &
- (u8)isFrogReturnedFlags[this->actor.params - 1])) {
+ Actor_Kill(&this->actor);
+ if (!CHECK_WEEKEVENTREG(isFrogReturnedFlags[this->actor.params - 1])) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_MINIFROG, this->actor.world.pos.x, this->actor.world.pos.y,
this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, this->params);
}
@@ -205,11 +202,12 @@ void EnPametfrog_Init(Actor* thisx, PlayState* play) {
if (Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_BIGPAMET, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 0) == NULL) {
- Actor_MarkForDeath(&this->actor);
- } else {
- this->actor.params = GEKKO_PRE_SNAPPER;
- EnPametfrog_SetupLookAround(this);
+ Actor_Kill(&this->actor);
+ return;
}
+
+ this->actor.params = GEKKO_PRE_SNAPPER;
+ EnPametfrog_SetupLookAround(this);
}
}
@@ -343,8 +341,8 @@ void EnPametfrog_StopCutscene(EnPametfrog* this, PlayState* play) {
subCam = Play_GetCamera(play, this->subCamId);
Play_SetCameraAtEye(play, CAM_ID_MAIN, &subCam->at, &subCam->eye);
this->subCamId = SUB_CAM_ID_DONE;
- ActorCutscene_Stop(this->cutscene);
- func_800B724C(play, &this->actor, 6);
+ CutsceneManager_Stop(this->csId);
+ func_800B724C(play, &this->actor, PLAYER_CSMODE_END);
}
}
@@ -378,10 +376,10 @@ void EnPametfrog_PlaceSnapper(EnPametfrog* this, PlayState* play) {
void EnPametfrog_JumpOnGround(EnPametfrog* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, 1.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FROG_JUMP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FROG_JUMP);
} else if (Animation_OnFrame(&this->skelAnime, 11.0f)) {
EnPametfrog_JumpWaterEffects(this, play);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_WALK_WATER);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_WALK_WATER);
}
}
@@ -404,8 +402,8 @@ void EnPametfrog_ApplyMagicArrowEffects(EnPametfrog* this, PlayState* play) {
void EnPametfrog_ApplyElectricStun(EnPametfrog* this) {
this->freezeTimer = 40;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
- Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40);
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL;
this->drawDmgEffScale = 0.75f;
this->drawDmgEffAlpha = 2.0f;
@@ -413,8 +411,8 @@ void EnPametfrog_ApplyElectricStun(EnPametfrog* this) {
void EnPametfrog_ApplyStun(EnPametfrog* this) {
this->freezeTimer = 40;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
- Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40);
}
void EnPametfrog_SetupRearOnSnapper(EnPametfrog* this) {
@@ -449,7 +447,7 @@ void EnPametfrog_RearOnSnapper(EnPametfrog* this, PlayState* play) {
rearingPoint.x = this->actor.world.pos.x;
rearingPoint.y = this->actor.world.pos.y + 10.0f;
rearingPoint.z = this->actor.world.pos.z;
- if (actor->world.rot.x < Actor_PitchToPoint(actor, &rearingPoint)) {
+ if (actor->world.rot.x < Actor_WorldPitchTowardPoint(actor, &rearingPoint)) {
EnPametfrog_SetupRearOnSnapperWave(this);
} else {
EnPametfrog_SetupRearOnSnapperRise(this);
@@ -499,19 +497,19 @@ void EnPametfrog_SetupFallOffSnapper(EnPametfrog* this, PlayState* play) {
Animation_PlayOnce(&this->skelAnime, &gGekkoFallInAirAnim);
this->actor.params = GEKKO_FALL_OFF_SNAPPER;
- this->actor.speedXZ = 7.0f;
+ this->actor.speed = 7.0f;
this->actor.velocity.y = 15.0f;
this->actor.world.rot.y = BINANG_ROT180(this->actor.child->world.rot.y);
this->actor.shape.rot.y = this->actor.world.rot.y;
this->actor.flags |= ACTOR_FLAG_1;
this->timer = 30;
this->collider.base.ocFlags1 |= OC1_ON;
- yaw = Actor_YawToPoint(&this->actor, &this->actor.home.pos);
+ yaw = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
subCamEye.x = (Math_SinS(yaw) * 300.0f) + this->actor.focus.pos.x;
subCamEye.y = this->actor.focus.pos.y + 100.0f;
subCamEye.z = (Math_CosS(yaw) * 300.0f) + this->actor.focus.pos.z;
Play_SetCameraAtEye(play, this->subCamId, &this->actor.focus.pos, &subCamEye);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FROG_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FROG_DAMAGE);
this->actionFunc = EnPametfrog_FallOffSnapper;
}
@@ -527,7 +525,7 @@ void EnPametfrog_FallOffSnapper(EnPametfrog* this, PlayState* play) {
sin = sin_rad(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 & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
EnPametfrog_StopCutscene(this, play);
EnPametfrog_SetupJumpToWall(this);
}
@@ -537,22 +535,22 @@ void EnPametfrog_SetupJumpToWall(EnPametfrog* this) {
Animation_Change(&this->skelAnime, &gGekkoJumpForwardAnim, 2.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -2.0f);
this->actor.shape.rot.x = 0;
this->actor.shape.rot.z = 0;
- this->actor.bgCheckFlags &= ~8;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FROG_VOICE2);
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_WALL;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FROG_VOICE2);
this->actionFunc = EnPametfrog_JumpToWall;
}
void EnPametfrog_JumpToWall(EnPametfrog* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
EnPametfrog_JumpOnGround(this, play);
- if ((this->actor.bgCheckFlags & 1) && (this->actor.bgCheckFlags & 8) && (this->actor.wallBgId == BGCHECK_SCENE) &&
- (COLPOLY_GET_NORMAL(this->actor.wallPoly->normal.y) < 0.5f)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) &&
+ (this->actor.wallBgId == BGCHECK_SCENE) && (COLPOLY_GET_NORMAL(this->actor.wallPoly->normal.y) < 0.5f)) {
EnPametfrog_SetupWallCrawl(this);
- } else if (!(this->actor.bgCheckFlags & 1) ||
+ } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) ||
((this->skelAnime.curFrame > 1.0f) && (this->skelAnime.curFrame < 12.0f))) {
- this->actor.speedXZ = 12.0f;
+ this->actor.speed = 12.0f;
} else {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
}
@@ -581,8 +579,8 @@ void EnPametfrog_SetupWallCrawl(EnPametfrog* this) {
this->skelAnime.playSpeed = 1.0f;
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FROG_RUNAWAY);
- this->actor.speedXZ = 8.0f;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FROG_RUNAWAY);
+ this->actor.speed = 8.0f;
this->timer = Rand_S16Offset(35, 15);
this->actionFunc = EnPametfrog_WallCrawl;
}
@@ -604,8 +602,8 @@ void EnPametfrog_WallCrawl(EnPametfrog* this, PlayState* play) {
} else {
SkelAnime_Update(&this->skelAnime);
this->timer--;
- this->actor.speedXZ = 8.0f;
- doubleSpeedXZ = this->actor.speedXZ * 2.0f;
+ this->actor.speed = 8.0f;
+ doubleSpeedXZ = this->actor.speed * 2.0f;
vec1.x = this->actor.world.pos.x + this->unk_2DC.x * 2.0f;
vec1.y = this->actor.world.pos.y + this->unk_2DC.y * 2.0f;
vec1.z = this->actor.world.pos.z + this->unk_2DC.z * 2.0f;
@@ -621,7 +619,7 @@ void EnPametfrog_WallCrawl(EnPametfrog* this, PlayState* play) {
isSuccess = func_8086A2CC(this, poly1);
Math_Vec3f_Copy(&this->actor.world.pos, &worldPos1);
this->actor.floorBgId = bgId1;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
} else {
if (this->actor.floorPoly != poly2) {
isSuccess = func_8086A2CC(this, poly2);
@@ -638,11 +636,11 @@ void EnPametfrog_WallCrawl(EnPametfrog* this, PlayState* play) {
}
if (Animation_OnFrame(&this->skelAnime, 15.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BOMCHU_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BOMCHU_WALK);
}
if (((play->gameplayFrames % 60) == 0) && (Rand_ZeroOne() < 0.8f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FROG_REAL);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FROG_REAL);
}
if ((this->timer == 0) ||
@@ -661,7 +659,7 @@ void EnPametfrog_SetupWallPause(EnPametfrog* this) {
s32 pad;
f32 randFloat;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->skelAnime.playSpeed = 1.5f;
if (this->timer != 0) {
this->wallRotation = this->unk_2E8.y > 0.0f ? (M_PI / 30) : (-M_PI / 30);
@@ -670,7 +668,7 @@ void EnPametfrog_SetupWallPause(EnPametfrog* this) {
this->wallRotation = (Rand_ZeroOne() < 0.5f ? -1 : 1) * (0x1000 + randFloat) * (M_PI / (15 * 0x8000));
}
this->timer = 15;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FROG_RUNAWAY2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FROG_RUNAWAY2);
this->actionFunc = EnPametfrog_WallPause;
}
@@ -688,7 +686,7 @@ void EnPametfrog_WallPause(EnPametfrog* this, PlayState* play) {
Math3D_CrossProduct(&this->unk_2DC, &this->unk_2D0, &this->unk_2E8);
func_8086A238(this);
if (((play->gameplayFrames % 60) == 0) && (Rand_ZeroOne() < 0.8f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FROG_REAL);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FROG_REAL);
}
if (this->timer == 0) {
@@ -702,19 +700,19 @@ void EnPametfrog_SetupClimbDownWall(EnPametfrog* this) {
Animation_Change(&this->skelAnime, &gGekkoJumpForwardAnim, 0.0f, 0.0f,
Animation_GetLastFrame(&gGekkoJumpForwardAnim), ANIMMODE_ONCE, 0.0f);
- this->actor.shape.rot.y = Actor_YawBetweenActors(&this->actor, this->actor.child);
+ this->actor.shape.rot.y = Actor_WorldYawTowardActor(&this->actor, this->actor.child);
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actor.shape.rot.x = 0;
this->actor.shape.rot.z = 0;
this->actor.colChkInfo.mass = 50;
- this->actor.speedXZ = 5.0f;
+ this->actor.speed = 5.0f;
this->collider.base.acFlags &= ~AC_ON;
this->actor.velocity.y = 0.0f;
this->actor.gravity = -1.0f;
- yaw = Actor_YawToPoint(&this->actor, &this->actor.home.pos);
+ yaw = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
this->actor.world.pos.x += 30.0f * Math_SinS(yaw);
this->actor.world.pos.z += 30.0f * Math_CosS(yaw);
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
this->actor.params = GEKKO_RETURN_TO_SNAPPER;
this->actionFunc = EnPametfrog_ClimbDownWall;
}
@@ -722,10 +720,10 @@ void EnPametfrog_SetupClimbDownWall(EnPametfrog* this) {
void EnPametfrog_ClimbDownWall(EnPametfrog* this, PlayState* play) {
s16 yaw;
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
EnPametfrog_SetupRunToSnapper(this);
} else if (this->actor.floorHeight == BGCHECK_Y_MIN) {
- yaw = Actor_YawToPoint(&this->actor, &this->actor.home.pos);
+ yaw = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
this->actor.world.pos.x += 5.0f * Math_SinS(yaw);
this->actor.world.pos.z += 5.0f * Math_CosS(yaw);
if (this->actor.world.pos.y < (this->actor.home.pos.y - 5.0f)) {
@@ -743,15 +741,16 @@ void EnPametfrog_SetupRunToSnapper(EnPametfrog* this) {
void EnPametfrog_RunToSnapper(EnPametfrog* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
EnPametfrog_JumpOnGround(this, play);
- this->actor.shape.rot.y = Actor_YawBetweenActors(&this->actor, this->actor.child);
+ this->actor.shape.rot.y = Actor_WorldYawTowardActor(&this->actor, this->actor.child);
this->actor.world.rot.y = this->actor.shape.rot.y;
- if (!(this->actor.bgCheckFlags & 1) || ((this->skelAnime.curFrame > 1.0f) && (this->skelAnime.curFrame < 12.0f))) {
- this->actor.speedXZ = 12.0f;
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) ||
+ ((this->skelAnime.curFrame > 1.0f) && (this->skelAnime.curFrame < 12.0f))) {
+ this->actor.speed = 12.0f;
} else {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
- if ((this->actor.child->params == 1) && (Actor_XZDistanceBetweenActors(&this->actor, this->actor.child) < 120.0f) &&
+ if ((this->actor.child->params == 1) && (Actor_WorldDistXZToActor(&this->actor, this->actor.child) < 120.0f) &&
Animation_OnFrame(&this->skelAnime, 0.0f)) {
EnPametfrog_SetupJumpOnSnapper(this);
}
@@ -762,12 +761,12 @@ void EnPametfrog_SetupJumpOnSnapper(EnPametfrog* this) {
this->timer = 6;
this->collider.base.ocFlags1 &= ~OC1_ON;
this->collider.base.acFlags &= ~AC_ON;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.velocity.y = 0.0f;
- this->actor.shape.rot.y = Actor_YawBetweenActors(&this->actor, this->actor.child);
+ this->actor.shape.rot.y = Actor_WorldYawTowardActor(&this->actor, this->actor.child);
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actor.params = GEKKO_JUMP_ON_SNAPPER;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FROG_GREET);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FROG_GREET);
this->actionFunc = EnPametfrog_JumpOnSnapper;
}
@@ -813,18 +812,18 @@ void EnPametfrog_SetupFallInAir(EnPametfrog* this, PlayState* play) {
this->actor.params = GEKKO_RETURN_TO_SNAPPER;
}
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.velocity.y = 0.0f;
this->collider.base.acFlags &= ~AC_ON;
this->timer = 10;
if (this->actor.colChkInfo.health == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FROG_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FROG_DEAD);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FROG_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FROG_DAMAGE);
}
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 16);
- yaw = Actor_YawToPoint(&this->actor, &this->actor.home.pos);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 16);
+ yaw = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
this->actor.world.pos.x += 30.0f * Math_SinS(yaw);
this->actor.world.pos.z += 30.0f * Math_CosS(yaw);
if (this->subCamId != SUB_CAM_ID_DONE) {
@@ -862,7 +861,7 @@ void EnPametfrog_FallInAir(EnPametfrog* this, PlayState* play) {
&Play_GetCamera(play, this->subCamId)->eye);
}
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
EnPametfrog_SetupFallOnGround(this, play);
}
}
@@ -877,7 +876,7 @@ void EnPametfrog_SetupFallOnGround(EnPametfrog* this, PlayState* play) {
this->timer = 5;
EnPametfrog_Thaw(this, play);
EnPametfrog_JumpWaterEffects(this, play);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_WALK_WATER);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_WALK_WATER);
this->actionFunc = EnPametfrog_FallOnGround;
}
@@ -900,7 +899,7 @@ void EnPametfrog_FallOnGround(EnPametfrog* this, PlayState* play) {
void EnPametfrog_SetupDefeatGekko(EnPametfrog* this, PlayState* play) {
Vec3f subCamEye;
- s16 yaw = Actor_YawToPoint(this->actor.child, &this->actor.home.pos);
+ s16 yaw = Actor_WorldYawTowardPoint(this->actor.child, &this->actor.home.pos);
s16 yawDiff = this->actor.yawTowardsPlayer - yaw;
yaw = yawDiff > 0 ? yaw - 0x2000 : yaw + 0x2000;
@@ -925,7 +924,7 @@ void EnPametfrog_DefeatGekko(EnPametfrog* this, PlayState* play) {
void EnPametfrog_SetupDefeatSnapper(EnPametfrog* this, PlayState* play) {
Vec3f subCamEye;
- s16 yaw = Actor_YawToPoint(&this->actor, &this->actor.home.pos);
+ s16 yaw = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
s16 yawDiff = this->actor.yawTowardsPlayer - yaw;
yaw = yawDiff > 0 ? yaw - 0x2000 : yaw + 0x2000;
@@ -986,28 +985,28 @@ void EnPametfrog_SpawnFrog(EnPametfrog* this, PlayState* play) {
EnPametfrog_ShakeCamera(this, play, 75.0f * magShake, 10.0f * magShake);
if (this->timer == 0) {
EnPametfrog_StopCutscene(this, play);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
void EnPametfrog_SetupCutscene(EnPametfrog* this) {
if (this->actor.colChkInfo.health == 0) {
- this->cutscene = this->actor.cutscene;
+ this->csId = this->actor.csId;
} else {
- this->cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene);
+ this->csId = CutsceneManager_GetAdditionalCsId(this->actor.csId);
}
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
this->actionFunc = EnPametfrog_PlayCutscene;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.velocity.y = 0.0f;
}
void EnPametfrog_PlayCutscene(EnPametfrog* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_Start(this->cutscene, &this->actor);
- this->subCamId = ActorCutscene_GetCurrentSubCamId(this->cutscene);
- func_800B724C(play, &this->actor, 7);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_Start(this->csId, &this->actor);
+ this->subCamId = CutsceneManager_GetCurrentSubCamId(this->csId);
+ func_800B724C(play, &this->actor, PLAYER_CSMODE_WAIT);
if (this->actor.colChkInfo.health == 0) {
if (this->actor.params == GEKKO_PRE_SNAPPER) {
EnPametfrog_SetupCallSnapper(this, play);
@@ -1018,14 +1017,14 @@ void EnPametfrog_PlayCutscene(EnPametfrog* this, PlayState* play) {
EnPametfrog_SetupFallOffSnapper(this, play);
}
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
}
void EnPametfrog_SetupLookAround(EnPametfrog* this) {
Animation_PlayOnce(&this->skelAnime, &gGekkoLookAroundAnim);
this->collider.base.atFlags &= ~AT_ON;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = EnPametfrog_LookAround;
}
@@ -1055,10 +1054,11 @@ void EnPametfrog_JumpToLink(EnPametfrog* this, PlayState* play) {
this->actor.shape.rot.y = this->actor.world.rot.y;
SkelAnime_Update(&this->skelAnime);
EnPametfrog_JumpOnGround(this, play);
- if (!(this->actor.bgCheckFlags & 1) || (this->skelAnime.curFrame > 1.0f && this->skelAnime.curFrame < 12.0f)) {
- this->actor.speedXZ = 8.0f;
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) ||
+ (this->skelAnime.curFrame > 1.0f && this->skelAnime.curFrame < 12.0f)) {
+ this->actor.speed = 8.0f;
} else {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
if ((this->collider.base.ocFlags1 & OC1_HIT) && (this->collider.base.ocFlags2 & OC2_HIT_PLAYER) &&
@@ -1071,7 +1071,7 @@ void EnPametfrog_JumpToLink(EnPametfrog* this, PlayState* play) {
void EnPametfrog_SetupMeleeAttack(EnPametfrog* this) {
Animation_PlayOnce(&this->skelAnime, &gGekkoBoxingStanceAnim);
this->timer = 7;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = EnPametfrog_MeleeAttack;
}
@@ -1101,9 +1101,9 @@ void EnPametfrog_MeleeAttack(EnPametfrog* this, PlayState* play) {
((this->skelAnime.animation == &gGekkoWindupPunchAnim) && Animation_OnFrame(&this->skelAnime, 27.0f))) {
this->collider.base.atFlags |= AT_ON;
if (this->skelAnime.animation == &gGekkoKickAnim) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FROG_KICK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FROG_KICK);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FROG_PUNCH1);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FROG_PUNCH1);
}
} else {
this->collider.base.atFlags &= ~AT_ON;
@@ -1115,9 +1115,9 @@ void EnPametfrog_SetupDamage(EnPametfrog* this) {
this->timer = 20;
this->collider.base.atFlags &= ~AT_ON;
this->collider.base.acFlags &= ~AC_ON;
- this->actor.speedXZ = 10.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FROG_DAMAGE);
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 20);
+ this->actor.speed = 10.0f;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FROG_DAMAGE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 20);
func_800BE5CC(&this->actor, &this->collider, 0);
this->actor.shape.rot.y = BINANG_ROT180(this->actor.world.rot.y);
this->actionFunc = EnPametfrog_Damage;
@@ -1126,7 +1126,7 @@ void EnPametfrog_SetupDamage(EnPametfrog* this) {
void EnPametfrog_Damage(EnPametfrog* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
this->timer--;
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.5f);
+ Math_StepToF(&this->actor.speed, 0.0f, 0.5f);
if (this->timer == 0) {
if (this->actor.colChkInfo.health > 0) {
EnPametfrog_SetupJumpToLink(this);
@@ -1143,7 +1143,7 @@ void EnPametfrog_SetupStun(EnPametfrog* this) {
}
this->collider.base.atFlags &= ~AT_ON;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->actor.colChkInfo.health == 0) {
this->collider.base.acFlags &= ~AC_ON;
@@ -1170,10 +1170,10 @@ void EnPametfrog_SetupCallSnapper(EnPametfrog* this, PlayState* play) {
s16 yawDiff;
Animation_MorphToPlayOnce(&this->skelAnime, &gGekkoCallAnim, 3.0f);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FROG_GREET);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FROG_GREET);
this->actor.flags &= ~ACTOR_FLAG_1;
this->actor.colChkInfo.health = 6;
- this->actor.world.rot.y = Actor_YawToPoint(&this->actor, &this->actor.home.pos);
+ this->actor.world.rot.y = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
yawDiff = this->actor.yawTowardsPlayer - this->actor.world.rot.y;
if (yawDiff > 0) {
this->actor.world.rot.y -= 0x2000;
@@ -1211,7 +1211,7 @@ void EnPametfrog_SetupSnapperSpawn(EnPametfrog* this, PlayState* play) {
subCamAt.x = this->actor.child->world.pos.x;
subCamAt.z = this->actor.child->world.pos.z;
subCamAt.y = this->actor.child->floorHeight + 50.0f;
- if ((s16)(Actor_YawToPoint(&this->actor, &this->actor.home.pos) - this->actor.shape.rot.y) > 0) {
+ if ((s16)(Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos) - this->actor.shape.rot.y) > 0) {
yaw = this->actor.child->shape.rot.y - 0x1000;
} else {
yaw = this->actor.child->shape.rot.y + 0x1000;
@@ -1287,7 +1287,7 @@ void EnPametfrog_ApplyDamageEffect(EnPametfrog* this, PlayState* play) {
} else if (this->actor.colChkInfo.damageEffect == GEKKO_DMGEFF_ICE) {
EnPametfrog_Freeze(this);
this->freezeTimer = 80;
- Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, 0, 0x50);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 80);
EnPametfrog_SetupStun(this);
} else {
EnPametfrog_Thaw(this, play);
@@ -1343,7 +1343,9 @@ void EnPametfrog_Update(Actor* thisx, PlayState* play) {
if (this->actor.gravity < -0.1f) {
Actor_MoveWithGravity(&this->actor);
arg3 = this->actionFunc == EnPametfrog_FallInAir ? 3.0f : 15.0f;
- Actor_UpdateBgCheckInfo(play, &this->actor, 25.0f, arg3, 3.0f, 0x1F);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 25.0f, arg3, 3.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 |
+ UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10);
} else if (this->freezeTimer == 0) {
Actor_MoveWithoutGravity(&this->actor);
this->actor.floorHeight = this->actor.world.pos.y;
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 81af17129..90bc0cb1b 100644
--- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h
+++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h
@@ -30,7 +30,7 @@ typedef struct EnPametfrog {
/* 0x2AC */ u8 drawDmgEffType;
/* 0x2AD */ u8 wallPauseTimer; // Gekko stops 10 times along wall/ceiling after being blown off of Snapper
/* 0x2AE */ u8 unk_2AE; // True/False
- /* 0x2B0 */ s16 cutscene;
+ /* 0x2B0 */ s16 csId;
/* 0x2B2 */ s16 params;
/* 0x2B4 */ s16 quakeIndex;
/* 0x2B6 */ s16 timer;
@@ -49,6 +49,4 @@ typedef struct EnPametfrog {
/* 0x3A4 */ ColliderJntSphElement colElement[2];
} EnPametfrog; // size = 0x424
-extern const ActorInit En_Pametfrog_InitVars;
-
#endif // Z_EN_PAMETFROG_H
diff --git a/src/overlays/actors/ovl_En_Paper/overlay.cfg b/src/overlays/actors/ovl_En_Paper/overlay.cfg
deleted file mode 100644
index f2b122194..000000000
--- a/src/overlays/actors/ovl_En_Paper/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Paper
-z_en_paper.c
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 fd6ac6778..7659b524b 100644
--- a/src/overlays/actors/ovl_En_Paper/z_en_paper.c
+++ b/src/overlays/actors/ovl_En_Paper/z_en_paper.c
@@ -1,7 +1,11 @@
-/*
- * File: z_en_paper.c
+/**
+ * @file z_en_paper.c
* Overlay: ovl_En_Paper
- * Description: Tingle Confetti
+ * Description: Tingle confetti group
+ *
+ * Complex actor for its length, that creates and manages a group of confetti effects. Each is a triangle of a
+ * particular colour, that rotates around a fixed axis at a randomly-chosen fixed velocity, and is subject to gravity,
+ * drag and wind forces.
*/
#include "z_en_paper.h"
@@ -16,14 +20,14 @@ void EnPaper_Destroy(Actor* thisx, PlayState* play);
void EnPaper_Update(Actor* thisx, PlayState* play);
void EnPaper_Draw(Actor* thisx, PlayState* play);
-void func_80C1F480(EnPaper* this, PlayState* play);
-void func_80C1F4FC(EnPaper* this, PlayState* play);
-void func_80C1F46C(EnPaper* this);
-void func_80C1F4E8(EnPaper* this);
-void func_80C1F55C(EnPaper* this, EnPaperStruct* arg1);
-void func_80C1F6E0(EnPaper* this, EnPaperStruct* arg1);
+void EnPaper_SetupSpreadConfettiGroup(EnPaper* this);
+void EnPaper_SpreadConfettiGroup(EnPaper* this, PlayState* play);
+void EnPaper_SetupFlyConfettiGroup(EnPaper* this);
+void EnPaper_FlyConfettiGroup(EnPaper* this, PlayState* play);
+void EnPaper_InitConfettiPiece(EnPaper* this, EnPaperConfetto* piece);
+void EnPaper_FlyConfettiPiece(EnPaper* this, EnPaperConfetto* piece);
-const ActorInit En_Paper_InitVars = {
+ActorInit En_Paper_InitVars = {
ACTOR_EN_PAPER,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -35,114 +39,155 @@ const ActorInit En_Paper_InitVars = {
(ActorFunc)EnPaper_Draw,
};
-Vec3f D_80C1FC60 = { 0.0f, 0.0f, 1.0f };
+static Vec3f sUnitVecZ = { 0.0f, 0.0f, 1.0f };
void EnPaper_Init(Actor* thisx, PlayState* play) {
EnPaper* this = THIS;
Actor_SetScale(&this->actor, 0.01f);
this->timer = 70;
- this->unk_D78 = D_80C1FC60;
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
- func_80C1F46C(this);
+ this->windForce = sUnitVecZ;
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
+ EnPaper_SetupSpreadConfettiGroup(this);
}
void EnPaper_Destroy(Actor* thisx, PlayState* play) {
}
-void func_80C1F46C(EnPaper* this) {
- this->actionFunc = func_80C1F480;
+void EnPaper_SetupSpreadConfettiGroup(EnPaper* this) {
+ this->actionFunc = EnPaper_SpreadConfettiGroup;
}
-void func_80C1F480(EnPaper* this, PlayState* play) {
+/**
+ * Set up the pieces of confetti.
+ */
+void EnPaper_SpreadConfettiGroup(EnPaper* this, PlayState* play) {
s32 i;
- for (i = 0; i < ARRAY_COUNT(this->unk_148); i++) {
- func_80C1F55C(this, &this->unk_148[i]);
+ for (i = 0; i < ARRAY_COUNT(this->pieces); i++) {
+ EnPaper_InitConfettiPiece(this, &this->pieces[i]);
}
- func_80C1F4E8(this);
+ EnPaper_SetupFlyConfettiGroup(this);
}
-void func_80C1F4E8(EnPaper* this) {
- this->actionFunc = func_80C1F4FC;
+void EnPaper_SetupFlyConfettiGroup(EnPaper* this) {
+ this->actionFunc = EnPaper_FlyConfettiGroup;
}
-void func_80C1F4FC(EnPaper* this, PlayState* play) {
+/**
+ * Main action function for the group.
+ */
+void EnPaper_FlyConfettiGroup(EnPaper* this, PlayState* play) {
s32 i;
- for (i = 0; i < ARRAY_COUNT(this->unk_148); i++) {
- func_80C1F6E0(this, &this->unk_148[i]);
+ for (i = 0; i < ARRAY_COUNT(this->pieces); i++) {
+ EnPaper_FlyConfettiPiece(this, &this->pieces[i]);
}
}
-void func_80C1F55C(EnPaper* this, EnPaperStruct* arg1) {
+void EnPaper_InitConfettiPiece(EnPaper* this, EnPaperConfetto* piece) {
+ // Pick rotation axis randomly (significantly biased towards the z = 0 plane)
Matrix_RotateZYX(Rand_Next(), Rand_Next(), Rand_Next(), MTXMODE_NEW);
- Matrix_MultVec3f(&D_80C1FC60, &arg1->unk_0C);
+ Matrix_MultVec3f(&sUnitVecZ, &piece->rotAxis);
- arg1->unk_18 = this->actor.world.pos;
+ // copy actor position and distribute uniformly in a cube of side 2 around it
+ piece->pos = this->actor.world.pos;
+ piece->pos.x += Rand_Centered() * 4.0f;
+ piece->pos.y += Rand_Centered() * 4.0f;
+ piece->pos.z += Rand_Centered() * 4.0f;
- arg1->unk_18.x += Rand_Centered() * 4.0f;
- arg1->unk_18.y += Rand_Centered() * 4.0f;
- arg1->unk_18.z += Rand_Centered() * 4.0f;
+ // copy actor velocity and distrbute uniformly in a cuboid with sides 9, 6, 9 with actor.velocity in the middle
+ // of the base.
+ piece->vel = this->actor.velocity;
+ piece->vel.x += Rand_Centered() * 9.0f;
+ piece->vel.y += Rand_ZeroOne() * 6.0f;
+ piece->vel.z += Rand_Centered() * 9.0f;
- arg1->unk_24 = this->actor.velocity;
+ // Choose random starting angle and angular velocity
+ piece->angle = Rand_Next();
+ piece->angVel = (Rand_Next() >> 4) + (0x10000 / 180);
- arg1->unk_24.x += Rand_Centered() * 9.0f;
- arg1->unk_24.y += Rand_ZeroOne() * 6.0f;
- arg1->unk_24.z += Rand_Centered() * 9.0f;
-
- arg1->unk_30 = Rand_Next();
- arg1->unk_32 = (Rand_Next() >> 4) + 0x16C;
-
- Matrix_RotateAxisS(arg1->unk_30, &arg1->unk_0C, MTXMODE_NEW);
- Matrix_MultVec3f(&D_80C1FC60, &arg1->unk_00);
+ // Rotate the unit Z-vector by the random starting axis and angle
+ Matrix_RotateAxisS(piece->angle, &piece->rotAxis, MTXMODE_NEW);
+ Matrix_MultVec3f(&sUnitVecZ, &piece->normal);
}
-void func_80C1F6E0(EnPaper* this, EnPaperStruct* arg1) {
- f32 sp1C = Math_CosS(arg1->unk_30);
- f32 sp18 = Math_SinS(arg1->unk_30);
- f32 temp_ft4 = 1.0f - sp1C;
+/**
+ * Main falling function for a single piece, handles dynamics.
+ *
+ * Position \f$ \mathbf{x} \f$ essentially satisfies discretised version of the equation
+ *
+ * \f[
+ * \ddot{\mathbf{x}} = -0.2 \mathbf{n} (\dot{\mathbf{x}} + \mathbf{W}) + \mathbf{g} ,
+ * \f]
+ *
+ * where
+ *
+ * - \f$ \mathbf{n} \f$ is the unit normal to the confetti triangle's plane
+ * - \f$ \mathbf{W} \f$ is the random wind pressure
+ * - \f$ \mathbf{g} \f$ is gravity
+ *
+ * and the product is componentwise: the normal is being used as a cross-sectional area measure rather than vectorially.
+ */
+void EnPaper_FlyConfettiPiece(EnPaper* this, EnPaperConfetto* piece) {
+ f32 cos = Math_CosS(piece->angle);
+ f32 sin = Math_SinS(piece->angle);
+ f32 versin = 1.0f - cos;
- if (arg1->unk_18.y < (this->actor.floorHeight - 40.0f)) {
+ if (piece->pos.y < (this->actor.floorHeight - 40.0f)) {
return;
}
- arg1->unk_24.y += this->actor.gravity;
+ // acceleration due to gravity
+ piece->vel.y += this->actor.gravity;
- arg1->unk_24.x -= 0.2f * fabsf(arg1->unk_00.x) * (arg1->unk_24.x + this->unk_D78.x);
- arg1->unk_24.y -= 0.2f * fabsf(arg1->unk_00.y) * (arg1->unk_24.y + this->unk_D78.y);
- arg1->unk_24.z -= 0.2f * fabsf(arg1->unk_00.z) * (arg1->unk_24.z + this->unk_D78.z);
+ // drag and wind force: normal is used to simulate cross-section size of piece, although
+ piece->vel.x -= 0.2f * fabsf(piece->normal.x) * (piece->vel.x + this->windForce.x);
+ piece->vel.y -= 0.2f * fabsf(piece->normal.y) * (piece->vel.y + this->windForce.y);
+ piece->vel.z -= 0.2f * fabsf(piece->normal.z) * (piece->vel.z + this->windForce.z);
- arg1->unk_30 += arg1->unk_32;
+ // rotate around axis
+ piece->angle += piece->angVel;
- arg1->unk_18.x += arg1->unk_24.x;
- arg1->unk_18.y += arg1->unk_24.y;
- arg1->unk_18.z += arg1->unk_24.z;
+ // move
+ piece->pos.x += piece->vel.x;
+ piece->pos.y += piece->vel.y;
+ piece->pos.z += piece->vel.z;
- arg1->unk_00.x = (arg1->unk_0C.x * temp_ft4 * arg1->unk_0C.z) - (arg1->unk_0C.y * sp18);
- arg1->unk_00.y = (arg1->unk_0C.y * temp_ft4 * arg1->unk_0C.z) + (arg1->unk_0C.x * sp18);
- arg1->unk_00.z = (arg1->unk_0C.z * temp_ft4 * arg1->unk_0C.z) + sp1C;
+ // Rotate unit Z vector about `axis` by `angle` to get forward direction. This is the same calculation as at the
+ // bottom of EnPaper_InitConfettiPiece(), but done manually instead of using any matrix functions.
+ piece->normal.x = (versin * piece->rotAxis.x * piece->rotAxis.z) - (piece->rotAxis.y * sin);
+ piece->normal.y = (versin * piece->rotAxis.y * piece->rotAxis.z) + (piece->rotAxis.x * sin);
+ piece->normal.z = (versin * piece->rotAxis.z * piece->rotAxis.z) + cos;
}
-void func_80C1F87C(EnPaper* this) {
- f32 sp2C = (Rand_Centered() * 4.0f) + 6.0f;
- f32 sp28;
+#define WIND_PITCH_BOUND (0x10000 / 12)
- this->unk_D78.y = Math_SinS(this->actor.shape.rot.x) * -sp2C;
+/**
+ * Sets the wind force for the whole group, using the shape.rot from the previous frame, and picks a new random one
+ * for the next frame.
+ */
+void EnPaper_UpdateWind(EnPaper* this) {
+ f32 strength = (Rand_Centered() * 4.0f) + 6.0f;
+ f32 cosX;
- sp28 = Math_CosS(this->actor.shape.rot.x) * -sp2C;
- this->unk_D78.x = Math_SinS(this->actor.shape.rot.y) * sp28;
- this->unk_D78.z = Math_CosS(this->actor.shape.rot.y) * sp28;
+ this->windForce.y = Math_SinS(this->actor.shape.rot.x) * -strength;
+ cosX = Math_CosS(this->actor.shape.rot.x) * -strength;
+ this->windForce.x = Math_SinS(this->actor.shape.rot.y) * cosX;
+ this->windForce.z = Math_CosS(this->actor.shape.rot.y) * cosX;
+ // New random wind direction. A uniform distribution of the angles in spherical coordinates is not uniformly
+ // distributed on the sphere, so this is biased more towards up and down.
this->actor.shape.rot.x += (s16)(Rand_Next() >> 8);
this->actor.shape.rot.y += (s16)(Rand_Next() >> 6);
- if (ABS_ALT(this->actor.shape.rot.x) > 0x1555) {
+ // Essentially a clamp
+ if (ABS_ALT(this->actor.shape.rot.x) > WIND_PITCH_BOUND) {
if (this->actor.shape.rot.x > 0) {
- this->actor.shape.rot.x = 0x1555;
+ this->actor.shape.rot.x = WIND_PITCH_BOUND;
} else {
- this->actor.shape.rot.x = -0x1555;
+ this->actor.shape.rot.x = -WIND_PITCH_BOUND;
}
}
}
@@ -151,18 +196,19 @@ void EnPaper_Update(Actor* thisx, PlayState* play) {
EnPaper* this = THIS;
this->actionFunc(this, play);
+ EnPaper_UpdateWind(this);
- func_80C1F87C(this);
if (this->timer == 0) {
- Actor_MarkForDeath(&this->actor);
- } else {
- this->timer--;
+ Actor_Kill(&this->actor);
+ return;
}
+
+ this->timer--;
}
void EnPaper_Draw(Actor* thisx, PlayState* play) {
EnPaper* this = THIS;
- EnPaperStruct* ptr = this->unk_148;
+ EnPaperConfetto* piece = this->pieces;
s32 i;
OPEN_DISPS(play->state.gfxCtx);
@@ -173,7 +219,8 @@ void EnPaper_Draw(Actor* thisx, PlayState* play) {
gDPSetCombineLERP(POLY_OPA_DISP++, 0, 0, 0, SHADE, 0, 0, 0, SHADE, PRIMITIVE, 0, COMBINED, 0, 0, 0, 0, COMBINED);
gSPLoadGeometryMode(POLY_OPA_DISP++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH);
- for (i = 0; i < ARRAY_COUNT(this->unk_148); i++, ptr++) {
+ for (i = 0; i < ARRAY_COUNT(this->pieces); i++, piece++) {
+ // colour the first 30 white and 10 each of the other 3 colours
if (i == 0) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
} else if (i == 30) {
@@ -184,14 +231,15 @@ void EnPaper_Draw(Actor* thisx, PlayState* play) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 64, 255, 128, 255);
}
- if ((this->actor.floorHeight - 40.0f) < ptr->unk_18.y) {
- MtxF* mf = GRAPH_ALLOC(play->state.gfxCtx, sizeof(MtxF));
+ if ((this->actor.floorHeight - 40.0f) < piece->pos.y) {
+ Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, sizeof(Mtx));
- func_8017842C(mf, this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, ptr->unk_30, ptr->unk_0C.x,
- ptr->unk_0C.y, ptr->unk_0C.z, ptr->unk_18.x, ptr->unk_18.y, ptr->unk_18.z);
+ Mtx_SetTranslationRotationScaleMtx(mtx, this->actor.scale.x, this->actor.scale.y, this->actor.scale.z,
+ piece->angle, piece->rotAxis.x, piece->rotAxis.y, piece->rotAxis.z,
+ piece->pos.x, piece->pos.y, piece->pos.z);
- gSPMatrix(POLY_OPA_DISP++, mf, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_OPA_DISP++, object_bal_DL_00D5A0);
+ gSPMatrix(POLY_OPA_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gTingleConfettiDL);
}
}
diff --git a/src/overlays/actors/ovl_En_Paper/z_en_paper.h b/src/overlays/actors/ovl_En_Paper/z_en_paper.h
index 457229c3d..a48c6ae88 100644
--- a/src/overlays/actors/ovl_En_Paper/z_en_paper.h
+++ b/src/overlays/actors/ovl_En_Paper/z_en_paper.h
@@ -7,23 +7,23 @@ struct EnPaper;
typedef void (*EnPaperActionFunc)(struct EnPaper*, PlayState*);
+#define ENPAPER_PIECES_COUNT 60
+
typedef struct {
- /* 0x00 */ Vec3f unk_00;
- /* 0x0C */ Vec3f unk_0C;
- /* 0x18 */ Vec3f unk_18;
- /* 0x24 */ Vec3f unk_24;
- /* 0x30 */ s16 unk_30;
- /* 0x32 */ s16 unk_32;
-} EnPaperStruct; // size = 0x34
+ /* 0x00 */ Vec3f normal; // normal to the plane of the confetti piece
+ /* 0x0C */ Vec3f rotAxis; // axis to spin around
+ /* 0x18 */ Vec3f pos;
+ /* 0x24 */ Vec3f vel;
+ /* 0x30 */ s16 angle; // angle to rotate around `rotAxis`
+ /* 0x32 */ s16 angVel; // angular velocity of `angle`
+} EnPaperConfetto; // size = 0x34
typedef struct EnPaper {
/* 0x000 */ Actor actor;
/* 0x144 */ EnPaperActionFunc actionFunc;
- /* 0x148 */ EnPaperStruct unk_148[60];
- /* 0xD78 */ Vec3f unk_D78;
+ /* 0x148 */ EnPaperConfetto pieces[ENPAPER_PIECES_COUNT];
+ /* 0xD78 */ Vec3f windForce;
/* 0xD84 */ s16 timer;
} EnPaper; // size = 0xD88
-extern const ActorInit En_Paper_InitVars;
-
#endif // Z_EN_PAPER_H
diff --git a/src/overlays/actors/ovl_En_Part/overlay.cfg b/src/overlays/actors/ovl_En_Part/overlay.cfg
deleted file mode 100644
index 883554d5b..000000000
--- a/src/overlays/actors/ovl_En_Part/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Part
-z_en_part.c
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 ef348f4cc..2a12b9af8 100644
--- a/src/overlays/actors/ovl_En_Part/z_en_part.c
+++ b/src/overlays/actors/ovl_En_Part/z_en_part.c
@@ -19,7 +19,7 @@ void EnPart_Draw(Actor* thisx, PlayState* play);
void func_80865390(EnPart* this, PlayState* play);
void func_808654C4(EnPart* this, PlayState* play);
-const ActorInit En_Part_InitVars = {
+ActorInit En_Part_InitVars = {
ACTOR_EN_PART,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -52,7 +52,7 @@ void func_80865390(EnPart* this, PlayState* play) {
this->actor.world.rot.y = this->actor.parent->shape.rot.y + 0x8000;
this->unk146 = 100;
this->actor.velocity.y = 7.0f;
- this->actor.speedXZ = 2.0f;
+ this->actor.speed = 2.0f;
this->actor.gravity = -1.0f;
break;
}
@@ -79,7 +79,7 @@ void func_808654C4(EnPart* this, PlayState* play) {
pos.y = this->actor.floorHeight;
func_800B3030(play, &pos, &gZeroVec3f, &gZeroVec3f, this->actor.scale.y * 1400.0f, 7, 0);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 10, NA_SE_EN_EXTINCT);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else if (this->unk146 <= 0) {
switch (this->actor.params) {
@@ -101,7 +101,7 @@ void func_808654C4(EnPart* this, PlayState* play) {
}
break;
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
this->unk146--;
this->zRot += this->unk14C;
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 53a03f281..662e8574e 100644
--- a/src/overlays/actors/ovl_En_Part/z_en_part.h
+++ b/src/overlays/actors/ovl_En_Part/z_en_part.h
@@ -23,6 +23,4 @@ typedef struct EnPart {
/* 0x150 */ Gfx* dList;
} EnPart; // size = 0x154
-extern const ActorInit En_Part_InitVars;
-
#endif // Z_EN_PART_H
diff --git a/src/overlays/actors/ovl_En_Peehat/overlay.cfg b/src/overlays/actors/ovl_En_Peehat/overlay.cfg
deleted file mode 100644
index 588e53bd7..000000000
--- a/src/overlays/actors/ovl_En_Peehat/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Peehat
-z_en_peehat.c
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 cf3cd935f..2f4678b8d 100644
--- a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c
+++ b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c
@@ -38,7 +38,7 @@ void func_80898594(EnPeehat* this, PlayState* play);
void func_80898654(EnPeehat* this);
void func_808986A4(EnPeehat* this, PlayState* play);
-const ActorInit En_Peehat_InitVars = {
+ActorInit En_Peehat_InitVars = {
ACTOR_EN_PEEHAT,
ACTORCAT_ENEMY,
FLAGS,
@@ -234,7 +234,7 @@ void func_80897170(EnPeehat* this) {
this->drawDmgEffAlpha = 1.0f;
this->colliderSphere.base.colType = COLTYPE_HIT3;
this->unk_2B0 = 80;
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 80);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 80);
}
void func_808971DC(EnPeehat* this, PlayState* play) {
@@ -283,7 +283,7 @@ void func_80897390(EnPeehat* this, PlayState* play) {
}
this->unk_2B0 = 8;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PIHAT_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PIHAT_DAMAGE);
}
void func_80897498(EnPeehat* this) {
@@ -327,7 +327,7 @@ void func_80897648(EnPeehat* this) {
Animation_GetLastFrame(&object_ph_Anim_0009C4), ANIMMODE_ONCE, 0.0f);
}
this->unk_2B0 = 16;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PIHAT_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PIHAT_UP);
this->actionFunc = func_808976DC;
}
@@ -378,7 +378,7 @@ void func_80897864(EnPeehat* this) {
void func_80897910(EnPeehat* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- Math_StepToF(&this->actor.speedXZ, 3.0f, 0.25f);
+ Math_StepToF(&this->actor.speed, 3.0f, 0.25f);
Math_StepToF(&this->actor.world.pos.y, this->actor.floorHeight + 80.0f, 3.0f);
SkelAnime_Update(&this->skelAnime);
if (!gSaveContext.save.isNight && (Math_Vec3f_DistXZ(&this->actor.home.pos, &player->actor.world.pos) < 1200.0f)) {
@@ -396,7 +396,7 @@ void func_80897910(EnPeehat* this, PlayState* play) {
void func_80897A34(EnPeehat* this) {
Animation_PlayLoop(&this->skelAnime, &object_ph_Anim_0005C4);
this->unk_2B0 = 30;
- this->actor.speedXZ = 5.3f;
+ this->actor.speed = 5.3f;
this->colliderTris.base.atFlags |= AT_ON;
this->actionFunc = func_80897A94;
}
@@ -432,13 +432,13 @@ void func_80897A94(EnPeehat* this, PlayState* play) {
this->colliderTris.base.atFlags &= ~(AT_BOUNCED | AT_ON);
this->actor.colChkInfo.health = 0;
func_808982E0(this);
- } else if ((this->colliderCylinder.base.acFlags & AC_HIT) || (this->actor.bgCheckFlags & 1)) {
+ } else if ((this->colliderCylinder.base.acFlags & AC_HIT) || (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
func_800B3030(play, &this->actor.world.pos, &gZeroVec3f, &gZeroVec3f, 40, 7, 0);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 11, NA_SE_EN_EXTINCT);
- if (!(this->actor.bgCheckFlags & 1)) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EN_PIHAT_SM_DEAD);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else if (this->colliderTris.base.atFlags & AT_HIT) {
this->colliderTris.base.atFlags &= ~AT_HIT;
if (BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.world.rot.y) > 0) {
@@ -449,7 +449,7 @@ void func_80897A94(EnPeehat* this, PlayState* play) {
this->unk_2B0 = 40;
} else if (this->colliderCylinder.base.ocFlags1 & OC1_HIT) {
this->colliderCylinder.base.ocFlags1 &= ~OC1_HIT;
- if ((BINANG_SUB(Actor_YawBetweenActors(&this->actor, this->colliderCylinder.base.oc),
+ if ((BINANG_SUB(Actor_WorldYawTowardActor(&this->actor, this->colliderCylinder.base.oc),
this->actor.world.rot.y)) > 0) {
this->actor.world.rot.y -= 0x2000;
} else {
@@ -469,12 +469,12 @@ void func_80897D48(EnPeehat* this, PlayState* play) {
Vec3f sp34;
Math_StepToF(&this->actor.shape.yOffset, -1000.0f, 50.0f);
- Math_StepToF(&this->actor.speedXZ, 0.0f, 1.0f);
+ Math_StepToF(&this->actor.speed, 0.0f, 1.0f);
Math_ScaledStepToS(&this->actor.shape.rot.x, 0, 50);
if (SkelAnime_Update(&this->skelAnime)) {
func_80897498(this);
this->actor.world.pos.y = this->actor.floorHeight;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PIHAT_LAND);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PIHAT_LAND);
} else if (this->actor.floorHeight < this->actor.world.pos.y) {
Math_SmoothStepToF(&this->actor.world.pos.y, this->actor.floorHeight, 0.3f, 3.5f, 0.25f);
if ((this->actor.world.pos.y - this->actor.floorHeight) < 60.0f) {
@@ -490,7 +490,7 @@ void func_80897D48(EnPeehat* this, PlayState* play) {
void func_80897EAC(EnPeehat* this) {
Animation_PlayLoop(&this->skelAnime, &object_ph_Anim_0005C4);
- this->actor.speedXZ = Rand_ZeroFloat(0.5f) + 2.5f;
+ this->actor.speed = Rand_ZeroFloat(0.5f) + 2.5f;
this->unk_2B0 = Rand_ZeroFloat(10.0f) + 10.0f;
this->colliderTris.base.atFlags |= AT_ON;
this->colliderSphere.base.acFlags |= AC_ON;
@@ -512,7 +512,7 @@ void func_80897F44(EnPeehat* this, PlayState* play) {
this->unk_2B0--;
if (this->unk_2B0 <= 0) {
- this->actor.speedXZ = Rand_ZeroFloat(0.5f) + 2.5f;
+ this->actor.speed = Rand_ZeroFloat(0.5f) + 2.5f;
this->unk_2B0 = Rand_ZeroFloat(10.0f) + 10.0f;
this->unk_2B6 = randPlusMinusPoint5Scaled(1000.0f);
}
@@ -536,7 +536,7 @@ void func_80897F44(EnPeehat* this, PlayState* play) {
void func_80898124(EnPeehat* this) {
this->actionFunc = func_80898144;
- this->actor.speedXZ = 2.5f;
+ this->actor.speed = 2.5f;
}
void func_80898144(EnPeehat* this, PlayState* play) {
@@ -574,7 +574,7 @@ void func_80898144(EnPeehat* this, PlayState* play) {
void func_808982E0(EnPeehat* this) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ph_Anim_000844, -4.0f);
- this->actor.speedXZ = -9.0f;
+ this->actor.speed = -9.0f;
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
this->actionFunc = func_80898338;
}
@@ -583,12 +583,12 @@ void func_80898338(EnPeehat* this, PlayState* play) {
this->unk_2B4 += this->unk_2B2;
SkelAnime_Update(&this->skelAnime);
- if (Math_StepToF(&this->actor.speedXZ, 0.0f, 0.5f)) {
+ if (Math_StepToF(&this->actor.speed, 0.0f, 0.5f)) {
if (this->actor.params != 0) {
func_800B3030(play, &this->actor.world.pos, &gZeroVec3f, &gZeroVec3f, 40, 7, 0);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 30, NA_SE_EN_EXTINCT);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EN_PIHAT_SM_DEAD);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
func_80897864(this);
}
@@ -599,7 +599,7 @@ void func_80898338(EnPeehat* this, PlayState* play) {
void func_80898414(EnPeehat* this) {
func_800BE568(&this->actor, &this->colliderSphere);
this->unk_2B2 = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = func_80898454;
}
@@ -622,11 +622,11 @@ void func_80898454(EnPeehat* this, PlayState* play) {
void func_808984E0(EnPeehat* this) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ph_Anim_000844, -4.0f);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PIHAT_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PIHAT_DAMAGE);
this->unk_2B2 = 4000;
this->unk_2B0 = 14;
- this->actor.speedXZ = 10.0f;
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 14);
+ this->actor.speed = 10.0f;
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 14);
this->colliderSphere.base.acFlags &= ~AC_ON;
this->unk_2C4 = 0.0f;
if (this->actor.colChkInfo.health == 0) {
@@ -640,7 +640,7 @@ void func_80898594(EnPeehat* this, PlayState* play) {
this->unk_2B4 += this->unk_2B2;
Math_ScaledStepToS(&this->unk_2B2, 4000, 250);
Math_StepToF(&this->actor.world.pos.y, this->actor.floorHeight + 88.5f, 3.0f);
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.5f);
+ Math_StepToF(&this->actor.speed, 0.0f, 0.5f);
this->unk_2B0--;
if (this->unk_2B0 <= 0) {
if (this->actor.colChkInfo.health == 0) {
@@ -672,7 +672,7 @@ void func_808986A4(EnPeehat* this, PlayState* play) {
if (this->unk_2B0 == 0) {
Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0xE0);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -697,16 +697,16 @@ void func_8089874C(EnPeehat* this, PlayState* play) {
if (this->actor.colChkInfo.damageEffect == 5) {
this->unk_2B0 = 40;
- Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
this->drawDmgEffScale = 1.1f;
this->drawDmgEffAlpha = 2.0f;
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_LARGE;
func_80898414(this);
} else if (this->actor.colChkInfo.damageEffect == 1) {
this->unk_2B0 = 40;
- Actor_SetColorFilter(&this->actor, 0, 200, 0, 40);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 200, COLORFILTER_BUFFLAG_OPA, 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
func_80898414(this);
} else if (this->actor.colChkInfo.damageEffect == 3) {
func_80897170(this);
@@ -750,7 +750,7 @@ void EnPeehat_Update(Actor* thisx, PlayState* play2) {
func_8089874C(this, play);
}
Actor_MoveWithGravity(thisx);
- Actor_UpdateBgCheckInfo(play, thisx, 25.0f, 30.0f, 30.0f, 5);
+ Actor_UpdateBgCheckInfo(play, thisx, 25.0f, 30.0f, 30.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
this->actionFunc(this, play);
@@ -930,7 +930,7 @@ void EnPeehat_Draw(Actor* thisx, PlayState* play) {
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnPeehat_OverrideLimbDraw,
(this->actor.params == 0) ? EnPeehat_PostLimbDraw : NULL, &this->actor);
- if ((this->actor.speedXZ != 0.0f) || (this->actor.velocity.y != 0.0f)) {
+ if ((this->actor.speed != 0.0f) || (this->actor.velocity.y != 0.0f)) {
Matrix_MultVecZ(4500.0f, &sp40);
Matrix_MultVecZ(-4500.0f, &sp4C);
Matrix_MultVecX(4500.0f, &sp58);
diff --git a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.h b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.h
index 182dd9175..248599c63 100644
--- a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.h
+++ b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.h
@@ -35,6 +35,4 @@ typedef struct EnPeehat {
/* 0x488 */ ColliderTrisElement colliderTriElements[2];
} EnPeehat; // size = 0x540
-extern const ActorInit En_Peehat_InitVars;
-
#endif // Z_EN_PEEHAT_H
diff --git a/src/overlays/actors/ovl_En_Pm/overlay.cfg b/src/overlays/actors/ovl_En_Pm/overlay.cfg
deleted file mode 100644
index 43905ae8c..000000000
--- a/src/overlays/actors/ovl_En_Pm/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Pm
-z_en_pm.c
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 1f5aebe64..088d5c8a4 100644
--- a/src/overlays/actors/ovl_En_Pm/z_en_pm.c
+++ b/src/overlays/actors/ovl_En_Pm/z_en_pm.c
@@ -132,7 +132,7 @@ static u8 D_80AFAD80[] = {
/* 0x239 */ SCHEDULE_CMD_RET_TIME(10, 21, 10, 35, 44),
/* 0x23F */ SCHEDULE_CMD_RET_NONE(),
/* 0x240 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_L(2, 0x414 - 0x245),
- /* 0x245 */ SCHEDULE_CMD_CHECK_FLAG_L(0x1C, 0x08, 0x2EF - 0x24A),
+ /* 0x245 */ SCHEDULE_CMD_CHECK_FLAG_L(WEEKEVENTREG_28_08, 0x2EF - 0x24A),
/* 0x24A */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(9, 0, 12, 0, 0x117 - 0x251),
/* 0x251 */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(12, 0, 13, 1, 0x2E4 - 0x258),
/* 0x258 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 1, 15, 0, 0x2DC - 0x25E),
@@ -226,8 +226,8 @@ static u8 D_80AFAD80[] = {
/* 0x40D */ SCHEDULE_CMD_RET_TIME(12, 0, 13, 1, 21),
/* 0x413 */ SCHEDULE_CMD_RET_NONE(),
/* 0x414 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_L(3, 0x588 - 0x419),
- /* 0x419 */ SCHEDULE_CMD_CHECK_FLAG_L(0x1C, 0x08, 0x55D - 0x41E),
- /* 0x41E */ SCHEDULE_CMD_CHECK_FLAG_L(0x1C, 0x10, 0x52F - 0x423),
+ /* 0x419 */ SCHEDULE_CMD_CHECK_FLAG_L(WEEKEVENTREG_28_08, 0x55D - 0x41E),
+ /* 0x41E */ SCHEDULE_CMD_CHECK_FLAG_L(WEEKEVENTREG_28_10, 0x52F - 0x423),
/* 0x423 */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(9, 0, 12, 0, 0x117 - 0x42A),
/* 0x42A */ SCHEDULE_CMD_CHECK_TIME_RANGE_L(12, 0, 13, 1, 0x527 - 0x431),
/* 0x431 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(13, 1, 15, 0, 0x446 - 0x437),
@@ -472,7 +472,7 @@ static UNK_TYPE D_80AFB764[] = {
0x52801210,
};
-const ActorInit En_Pm_InitVars = {
+ActorInit En_Pm_InitVars = {
ACTOR_EN_PM,
ACTORCAT_NPC,
FLAGS,
@@ -544,19 +544,19 @@ static AnimationInfoS sAnimationInfo[] = {
};
s32 func_80AF7B40(void) {
- if (gSaveContext.save.weekEventReg[90] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_90_01)) {
return 4;
}
- if (gSaveContext.save.weekEventReg[89] & 0x40) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_89_40)) {
return 3;
}
- if (gSaveContext.save.weekEventReg[89] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_89_08)) {
return 2;
}
- if (gSaveContext.save.weekEventReg[86] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_86_01)) {
return 1;
}
@@ -566,28 +566,28 @@ s32 func_80AF7B40(void) {
s32 func_80AF7BAC(EnPm* this) {
switch (this->unk_38C) {
case 0:
- if (gSaveContext.save.weekEventReg[86] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_86_01)) {
D_801F4E78 = gSaveContext.save.time;
this->unk_38C++;
}
break;
case 1:
- if (gSaveContext.save.weekEventReg[89] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_89_08)) {
D_801F4E78 = gSaveContext.save.time;
this->unk_38C++;
}
break;
case 2:
- if (gSaveContext.save.weekEventReg[89] & 0x40) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_89_40)) {
D_801F4E78 = 0;
this->unk_38C++;
}
break;
case 3:
- if (gSaveContext.save.weekEventReg[90] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_90_01)) {
D_801F4E78 = gSaveContext.save.time;
this->unk_38C++;
}
@@ -789,43 +789,43 @@ Actor* func_80AF8040(EnPm* this, PlayState* play) {
return actor;
}
-s32 func_80AF80F4(EnPm* this, s16 arg1) {
+s32 func_80AF80F4(EnPm* this, s16 csId) {
s32 ret = false;
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(arg1);
- } else if (ActorCutscene_GetCanPlayNext(arg1)) {
- ActorCutscene_StartAndSetUnkLinkFields(arg1, &this->actor);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(csId);
+ } else if (CutsceneManager_IsNext(csId)) {
+ CutsceneManager_StartWithPlayerCs(csId, &this->actor);
ret = true;
} else {
- ActorCutscene_SetIntentToPlay(arg1);
+ CutsceneManager_Queue(csId);
}
return ret;
}
-s16 func_80AF8170(EnPm* this, s32 arg1) {
+s16 func_80AF8170(EnPm* this, s32 numCutscenes) {
s32 i;
- s16 cs = -1;
+ s16 csId = CS_ID_NONE;
if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) {
- cs = this->actor.child->cutscene;
+ csId = this->actor.child->csId;
- for (i = 0; i < arg1; i++) {
- cs = ActorCutscene_GetAdditionalCutscene(cs);
+ for (i = 0; i < numCutscenes; i++) {
+ csId = CutsceneManager_GetAdditionalCsId(csId);
}
}
- return cs;
+ return csId;
}
s32 func_80AF81E8(EnPm* this, PlayState* play) {
s32 pad;
- s16 sp2A = func_80AF8170(this, 0);
+ s16 csId = func_80AF8170(this, 0);
s32 ret = false;
switch (this->unk_378) {
case 0:
- if (!func_80AF80F4(this, sp2A)) {
+ if (!func_80AF80F4(this, csId)) {
break;
}
@@ -833,7 +833,8 @@ s32 func_80AF81E8(EnPm* this, PlayState* play) {
case 4:
case 6:
if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) {
- Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)), this->actor.child);
+ Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)),
+ this->actor.child);
}
this->unk_378++;
ret = true;
@@ -842,17 +843,17 @@ s32 func_80AF81E8(EnPm* this, PlayState* play) {
case 1:
case 3:
case 5:
- if ((gSaveContext.save.weekEventReg[86] & 8) && (this->unk_378 == 3)) {
- ActorCutscene_Stop(sp2A);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_86_08) && (this->unk_378 == 3)) {
+ CutsceneManager_Stop(csId);
} else {
- Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)), &this->actor);
+ Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)), &this->actor);
}
this->unk_378++;
ret = true;
break;
case 7:
- ActorCutscene_Stop(sp2A);
+ CutsceneManager_Stop(csId);
this->unk_378++;
ret = true;
break;
@@ -862,12 +863,12 @@ s32 func_80AF81E8(EnPm* this, PlayState* play) {
s32 func_80AF8348(EnPm* this, PlayState* play) {
s32 pad;
- s16 sp2A = func_80AF8170(this, 0);
+ s16 csId = func_80AF8170(this, 0);
s32 ret = false;
switch (this->unk_378) {
case 0:
- if (!func_80AF80F4(this, sp2A)) {
+ if (!func_80AF80F4(this, csId)) {
break;
}
@@ -875,7 +876,7 @@ s32 func_80AF8348(EnPm* this, PlayState* play) {
case 4:
case 6:
case 8:
- Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)), &this->actor);
+ Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)), &this->actor);
this->unk_378++;
ret = true;
break;
@@ -885,14 +886,15 @@ s32 func_80AF8348(EnPm* this, PlayState* play) {
case 5:
case 7:
if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) {
- Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)), this->actor.child);
+ Camera_SetTargetActor(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(csId)),
+ this->actor.child);
}
this->unk_378++;
ret = true;
break;
case 9:
- ActorCutscene_Stop(sp2A);
+ CutsceneManager_Stop(csId);
this->unk_378++;
ret = true;
break;
@@ -1017,20 +1019,20 @@ s32 func_80AF86F0(EnPm* this, PlayState* play) {
s32 func_80AF87C4(EnPm* this, PlayState* play) {
s32 ret = false;
- if ((play->csCtx.state != 0) && (play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 9) &&
+ if ((play->csCtx.state != CS_STATE_IDLE) && (play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 9) &&
(play->curSpawn == 1)) {
if (!this->unk_380) {
func_80AF7E98(this, 0);
this->unk_258 = 255;
this->unk_380 = true;
- this->actor.speedXZ = 4.0f;
+ this->actor.speed = 4.0f;
this->actor.gravity = -1.0f;
}
ret = true;
} else if (this->unk_380) {
this->unk_258 = 0;
this->unk_380 = false;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
return ret;
}
@@ -1103,31 +1105,29 @@ void func_80AF8AC8(EnPm* this) {
void func_80AF8BA8(s32 arg0) {
static u16 D_80AFB8D4[] = {
- 0x1B02, 0x1B04, 0x1B08, 0x1B10, 0x1B20,
+ WEEKEVENTREG_27_02, WEEKEVENTREG_27_04, WEEKEVENTREG_27_08, WEEKEVENTREG_27_10, WEEKEVENTREG_27_20,
};
static u16 D_80AFB8E0[] = {
- 0x1B40, 0x1B80, 0x1C01, 0x1C02, 0x1C04,
+ WEEKEVENTREG_27_40, WEEKEVENTREG_27_80, WEEKEVENTREG_28_01, WEEKEVENTREG_28_02, WEEKEVENTREG_28_04,
};
- if (!(gSaveContext.save.weekEventReg[88] & 2)) {
- if (gSaveContext.save.weekEventReg[D_80AFB8D4[arg0] >> 8] &
- (D_80AFB8D4[arg0] & (1 | 2 | 4 | 0x38 | 0x40 | 0x80))) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_88_02)) {
+ if (CHECK_WEEKEVENTREG(D_80AFB8D4[arg0])) {
switch (gSaveContext.save.day) {
case 2:
- gSaveContext.save.weekEventReg[28] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_28_08);
break;
case 3:
- gSaveContext.save.weekEventReg[28] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_28_10);
break;
}
- gSaveContext.save.weekEventReg[51] |= 2;
- gSaveContext.save.weekEventReg[90] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_51_02);
+ SET_WEEKEVENTREG(WEEKEVENTREG_90_08);
}
}
- gSaveContext.save.weekEventReg[D_80AFB8E0[arg0] >> 8] =
- ((void)0, gSaveContext.save.weekEventReg[D_80AFB8E0[arg0] >> 8]) | (u8)D_80AFB8E0[arg0];
+ SET_WEEKEVENTREG(D_80AFB8E0[arg0]);
}
void func_80AF8C68(EnPm* this, PlayState* play) {
@@ -1135,7 +1135,7 @@ void func_80AF8C68(EnPm* this, PlayState* play) {
s32 talkState = Message_GetState(&play->msgCtx);
u16 textId = play->msgCtx.currentTextId;
- if ((player->targetActor == &this->actor) && ((textId < 0xFF) || (textId > 0x200)) && (talkState == TEXT_STATE_3) &&
+ if ((player->talkActor == &this->actor) && ((textId < 0xFF) || (textId > 0x200)) && (talkState == TEXT_STATE_3) &&
(this->prevTalkState == TEXT_STATE_3)) {
if ((play->state.frames % 3) == 0) {
if (this->unk_360 == 120.0f) {
@@ -1170,7 +1170,7 @@ s32 func_80AF8DD4(EnPm* this, PlayState* play) {
u16 textId = play->msgCtx.currentTextId;
s32 pad;
- if (player->stateFlags1 & (0x400 | 0x40)) {
+ if (player->stateFlags1 & (PLAYER_STATE1_40 | PLAYER_STATE1_400)) {
this->unk_356 |= 0x400;
if (this->unk_358 != textId) {
if ((this->unk_384 == 0) || (this->unk_384 == 1)) {
@@ -1261,7 +1261,7 @@ s32 func_80AF9008(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
this->unk_36C = scheduleOutput->time1 - scheduleOutput->time0;
this->unk_36E = sp56 - scheduleOutput->time0;
this->actor.flags &= ~ACTOR_FLAG_1;
- if (gSaveContext.save.weekEventReg[90] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_90_08)) {
this->unk_356 |= 0x800;
}
this->unk_356 |= 0x9000;
@@ -1313,7 +1313,7 @@ s32 func_80AF91E8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
this->unk_356 &= ~8;
this->unk_356 &= ~0x10;
if (this->unk_258 == 27) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ROOM_CARTAIN);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_ROOM_CARTAIN);
Flags_UnsetSwitch(play, 0);
}
@@ -1341,7 +1341,7 @@ s32 func_80AF91E8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
default:
SubS_UpdateFlags(&this->unk_356, 3, 7);
func_80AF7E98(this, 0);
- if (gSaveContext.save.weekEventReg[90] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_90_08)) {
this->unk_356 |= 0x800;
}
this->unk_356 |= 0x9000;
@@ -1380,7 +1380,7 @@ s32 func_80AF94AC(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
if (scheduleOutput->result == 24) {
Flags_UnsetSwitch(play, 0);
Flags_UnsetSwitch(play, 1);
- this->unk_394 = PLAYER_AP_NONE;
+ this->unk_394 = PLAYER_IA_NONE;
this->unk_368 = 60.0f;
func_80AF7E98(this, 9);
}
@@ -1433,7 +1433,7 @@ s32 func_80AF95E8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
switch (scheduleOutput->result) {
case 27:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ROOM_CARTAIN);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_ROOM_CARTAIN);
Flags_SetSwitch(play, 0);
this->unk_36C = 20;
SubS_UpdateFlags(&this->unk_356, 3, 7);
@@ -1457,10 +1457,10 @@ s32 func_80AF95E8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
break;
case 23:
- if (gSaveContext.save.weekEventReg[90] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_90_08)) {
this->unk_356 |= 0x800;
}
- gSaveContext.save.weekEventReg[60] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_60_04);
default:
if (scheduleOutput->result == 29) {
@@ -1481,7 +1481,7 @@ s32 func_80AF98A0(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
if (Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_MM3, 116.0f, 26.0f, -219.0f, 0, -0x3F46, 0,
0) != NULL) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
ret = true;
}
return ret;
@@ -1568,7 +1568,7 @@ s32 func_80AF9BF8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) {
this->actor.flags |= ACTOR_FLAG_1;
this->actor.targetMode = 0;
- this->unk_394 = PLAYER_AP_NONE;
+ this->unk_394 = PLAYER_IA_NONE;
this->unk_356 = 0;
this->unk_368 = 40.0f;
@@ -1719,7 +1719,7 @@ s32 func_80AF9D04(EnPm* this, PlayState* play) {
Lib_Vec3f_TranslateAndRotateY(&this->unk_26C, this->actor.world.rot.y, &sp38, &this->actor.world.pos);
this->unk_36E += this->timePathTimeSpeed;
if (Animation_OnFrame(&this->skelAnime, 3.0f) || Animation_OnFrame(&this->skelAnime, 8.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_POSTMAN_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_POSTMAN_WALK);
}
}
return false;
@@ -1776,15 +1776,13 @@ s32 func_80AF9E7C(EnPm* this, PlayState* play) {
this->timePathTargetPos = timePathTargetPos;
} else if ((this->unk_258 != 91) &&
(Animation_OnFrame(&this->skelAnime, 3.0f) || Animation_OnFrame(&this->skelAnime, 8.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_POSTMAN_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_POSTMAN_WALK);
}
if ((this->unk_356 & 0x10) && (this->unk_258 == 90)) {
- u8 val = gSaveContext.save.weekEventReg[89] | 0x40;
-
- gSaveContext.save.weekEventReg[89] = val;
- if (val == 0) {
- gSaveContext.save.weekEventReg[89] |= 0x40;
+ //! @bug Uses SET_WEEKEVENTREG instead of CHECK_WEEKEVENTREG
+ if (!SET_WEEKEVENTREG(WEEKEVENTREG_89_40)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_89_40);
}
}
@@ -1798,7 +1796,7 @@ s32 func_80AFA170(EnPm* this, PlayState* play) {
switch (this->unk_258) {
case 28:
if (gSaveContext.save.time >= CLOCK_TIME(1, 39)) {
- gSaveContext.save.weekEventReg[89] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_89_08);
}
case 16:
@@ -1824,7 +1822,7 @@ s32 func_80AFA170(EnPm* this, PlayState* play) {
}
if ((this->unk_384 == 11) && Animation_OnFrame(&this->skelAnime, 8.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_POSTMACHINE_HIT_OPEN);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_POSTMACHINE_HIT_OPEN);
}
if (this->unk_258 == 19) {
@@ -1869,7 +1867,7 @@ s32 func_80AFA334(EnPm* this, PlayState* play) {
case 21:
case 22:
if (Animation_OnFrame(&this->skelAnime, 0.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_NP_SLEEP_OUT);
+ Actor_PlaySfx(&this->actor, NA_SE_VO_NP_SLEEP_OUT);
}
break;
@@ -1991,7 +1989,7 @@ void func_80AFA4D0(EnPm* this, PlayState* play) {
u16 sp3C = 0;
ScheduleOutput sp2C;
- this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed);
+ this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
if (this->unk_38C != 0) {
time = gSaveContext.save.time - D_801F4E78;
sp3C = gSaveContext.save.time;
@@ -2046,9 +2044,9 @@ void func_80AFA5FC(EnPm* this, PlayState* play) {
void func_80AFA724(EnPm* this, PlayState* play) {
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
if (Animation_OnFrame(&this->skelAnime, 3.0f) || Animation_OnFrame(&this->skelAnime, 8.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_POSTMAN_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_POSTMAN_WALK);
}
}
@@ -2093,7 +2091,7 @@ void EnPm_Update(Actor* thisx, PlayState* play) {
func_80AF8AC8(this);
func_8013C964(&this->actor, play, this->unk_368, 30.0f, this->unk_394, this->unk_356 & 7);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
func_80AF7F68(this, play);
}
}
@@ -2116,11 +2114,11 @@ void EnPm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
switch (limbIndex) {
case 15:
- if (ActorCutscene_GetCurrentIndex() == -1) {
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_NONE) {
Matrix_MultVec3f(&gZeroVec3f, &this->actor.focus.pos);
Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot);
}
- if ((this->unk_356 & 0x8000) && !(gSaveContext.save.weekEventReg[90] & 4)) {
+ if ((this->unk_356 & 0x8000) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_90_04)) {
func_80AF8890(this, gfx, 1);
}
break;
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 de7359d93..c7bf76e37 100644
--- a/src/overlays/actors/ovl_En_Pm/z_en_pm.h
+++ b/src/overlays/actors/ovl_En_Pm/z_en_pm.h
@@ -58,6 +58,4 @@ typedef struct EnPm {
/* 0x39C */ UNK_TYPE1 unk_39C[0x4];
} EnPm; // size = 0x3A0
-extern const ActorInit En_Pm_InitVars;
-
#endif // Z_EN_PM_H
diff --git a/src/overlays/actors/ovl_En_Po_Composer/overlay.cfg b/src/overlays/actors/ovl_En_Po_Composer/overlay.cfg
deleted file mode 100644
index 25791e887..000000000
--- a/src/overlays/actors/ovl_En_Po_Composer/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Po_Composer
-z_en_po_composer.c
diff --git a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c
index e18897cf2..6d14ca25a 100644
--- a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c
+++ b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c
@@ -28,7 +28,7 @@ void func_80BC5830(EnPoComposer* this, PlayState* play);
void func_80BC58E0(EnPoComposer* this, PlayState* play);
#if 0
-const ActorInit En_Po_Composer_InitVars = {
+ActorInit En_Po_Composer_InitVars = {
ACTOR_EN_PO_COMPOSER,
ACTORCAT_ITEMACTION,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.h b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.h
index 3d70aa8a4..a42b5048f 100644
--- a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.h
+++ b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.h
@@ -14,6 +14,4 @@ typedef struct EnPoComposer {
/* 0x238 */ char unk_238[0x108];
} EnPoComposer; // size = 0x340
-extern const ActorInit En_Po_Composer_InitVars;
-
#endif // Z_EN_PO_COMPOSER_H
diff --git a/src/overlays/actors/ovl_En_Po_Fusen/overlay.cfg b/src/overlays/actors/ovl_En_Po_Fusen/overlay.cfg
deleted file mode 100644
index 71a747b65..000000000
--- a/src/overlays/actors/ovl_En_Po_Fusen/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Po_Fusen
-z_en_po_fusen.c
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 a2c537606..beffe3bb8 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
@@ -6,7 +6,6 @@
#include "z_en_po_fusen.h"
#include "overlays/actors/ovl_En_Ma4/z_en_ma4.h"
-#include "objects/object_po_fusen/object_po_fusen.h"
#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_100000 | ACTOR_FLAG_80000000)
@@ -17,7 +16,7 @@ void EnPoFusen_Destroy(Actor* thisx, PlayState* play);
void EnPoFusen_Update(Actor* thisx, PlayState* play);
void EnPoFusen_Draw(Actor* thisx, PlayState* play);
-u16 EnPoFusen_CheckParent(EnPoFusen* this, PlayState* play);
+s32 EnPoFusen_CheckParent(EnPoFusen* this, PlayState* play);
void EnPoFusen_InitNoFuse(EnPoFusen* this);
void EnPoFusen_InitFuse(EnPoFusen* this);
void EnPoFusen_Pop(EnPoFusen* this, PlayState* play);
@@ -25,7 +24,7 @@ void EnPoFusen_Idle(EnPoFusen* this, PlayState* play);
void EnPoFusen_IdleFuse(EnPoFusen* this, PlayState* play);
s32 EnPoFusen_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx);
-const ActorInit En_Po_Fusen_InitVars = {
+ActorInit En_Po_Fusen_InitVars = {
ACTOR_EN_PO_FUSEN,
ACTORCAT_PROP,
FLAGS,
@@ -57,44 +56,49 @@ static ColliderSphereInit sSphereInit = {
{ 0, { { 0, 0, 0 }, 200 }, 100 },
};
+typedef enum {
+ /* 0x0 */ POE_BALLOON_DMGEFF_NONE,
+ /* 0xF */ POE_BALLOON_DMGEFF_POP = 0xF,
+} PoeBalloonDamageEffect;
+
static DamageTable sDamageTable = {
- /* Deku Nut */ DMG_ENTRY(0, 0x0),
- /* Deku Stick */ DMG_ENTRY(0, 0x0),
- /* Horse trample */ DMG_ENTRY(0, 0x0),
- /* Explosives */ DMG_ENTRY(0, 0x0),
- /* Zora boomerang */ DMG_ENTRY(0, 0x0),
- /* Normal arrow */ DMG_ENTRY(1, 0xF),
- /* UNK_DMG_0x06 */ DMG_ENTRY(0, 0x0),
- /* Hookshot */ DMG_ENTRY(0, 0x0),
- /* Goron punch */ DMG_ENTRY(0, 0x0),
- /* Sword */ DMG_ENTRY(0, 0x0),
- /* Goron pound */ DMG_ENTRY(0, 0x0),
- /* Fire arrow */ DMG_ENTRY(1, 0xF),
- /* Ice arrow */ DMG_ENTRY(1, 0xF),
- /* Light arrow */ DMG_ENTRY(1, 0xF),
- /* Goron spikes */ DMG_ENTRY(1, 0xF),
- /* Deku spin */ DMG_ENTRY(0, 0x0),
- /* Deku bubble */ DMG_ENTRY(0, 0x0),
- /* Deku launch */ DMG_ENTRY(0, 0x0),
- /* UNK_DMG_0x12 */ DMG_ENTRY(0, 0x0),
- /* Zora barrier */ DMG_ENTRY(0, 0x0),
- /* Normal shield */ DMG_ENTRY(0, 0x0),
- /* Light ray */ DMG_ENTRY(0, 0x0),
- /* Thrown object */ DMG_ENTRY(0, 0x0),
- /* Zora punch */ DMG_ENTRY(0, 0x0),
- /* Spin attack */ DMG_ENTRY(0, 0x0),
- /* Sword beam */ DMG_ENTRY(0, 0x0),
- /* Normal Roll */ DMG_ENTRY(0, 0x0),
- /* UNK_DMG_0x1B */ DMG_ENTRY(0, 0x0),
- /* UNK_DMG_0x1C */ DMG_ENTRY(0, 0x0),
- /* Unblockable */ DMG_ENTRY(0, 0x0),
- /* UNK_DMG_0x1E */ DMG_ENTRY(0, 0x0),
- /* Powder Keg */ DMG_ENTRY(0, 0x0),
+ /* Deku Nut */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* Deku Stick */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* Horse trample */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* Explosives */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* Zora boomerang */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* Normal arrow */ DMG_ENTRY(1, POE_BALLOON_DMGEFF_POP),
+ /* UNK_DMG_0x06 */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* Hookshot */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* Goron punch */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* Sword */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* Goron pound */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* Fire arrow */ DMG_ENTRY(1, POE_BALLOON_DMGEFF_POP),
+ /* Ice arrow */ DMG_ENTRY(1, POE_BALLOON_DMGEFF_POP),
+ /* Light arrow */ DMG_ENTRY(1, POE_BALLOON_DMGEFF_POP),
+ /* Goron spikes */ DMG_ENTRY(1, POE_BALLOON_DMGEFF_POP),
+ /* Deku spin */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* Deku bubble */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* Deku launch */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* UNK_DMG_0x12 */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* Zora barrier */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* Normal shield */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* Light ray */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* Thrown object */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* Zora punch */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* Spin attack */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* Sword beam */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* Normal Roll */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* UNK_DMG_0x1B */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* UNK_DMG_0x1C */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* Unblockable */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* UNK_DMG_0x1E */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
+ /* Powder Keg */ DMG_ENTRY(0, POE_BALLOON_DMGEFF_NONE),
};
void EnPoFusen_Init(Actor* thisx, PlayState* play) {
EnPoFusen* this = THIS;
- f32 heightTemp;
+ f32 flyingHeightMin;
this->actor.scale.x = this->actor.scale.y = this->actor.scale.z = 0.007f;
this->actor.targetMode = 6;
@@ -103,38 +107,36 @@ void EnPoFusen_Init(Actor* thisx, PlayState* play) {
Collider_InitSphere(play, &this->collider);
Collider_SetSphere(play, &this->collider, &this->actor, &sSphereInit);
- if (0) {}
this->collider.dim.worldSphere.radius = 40;
- SkelAnime_InitFlex(play, &this->anime, &object_po_fusen_Skel_0024F0, &object_po_fusen_Anim_000040, this->jointTable,
- this->morphTable, 10);
+ SkelAnime_InitFlex(play, &this->anime, &gPoeBalloonSkel, &gPoeBalloonEmptyAnim, this->jointTable, this->morphTable,
+ POE_BALLOON_LIMB_MAX);
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 0x4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
if (!EnPoFusen_CheckParent(this, play)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
- heightTemp = this->actor.floorHeight + 90.0f;
- if (this->actor.home.pos.y < heightTemp) {
- this->actor.home.pos.y = heightTemp;
+ flyingHeightMin = this->actor.floorHeight + 90.0f;
+ if (this->actor.home.pos.y < flyingHeightMin) {
+ this->actor.home.pos.y = flyingHeightMin;
}
this->randScaleChange = (Rand_Next() % 0xFFFE) - 0x7FFF;
this->randYRotChange = (Rand_Next() % 0x4B0) - 0x258;
this->avgBaseRotation = 0x10000 / 12;
- this->limb3Rot = 0;
+ this->limbRotYRightUpperArm = 0;
this->limb46Rot = 0;
this->limb57Rot = 0;
- this->limb8Rot = 0;
- this->limb9Rot = 0x71C;
+ this->limbRotLeftHand = 0;
+ this->limbRotChainAndLantern = 0x71C;
this->randBaseRotChange = 0;
- if (ENPOFUSEN_IS_FUSE_TYPE(&this->actor)) {
+ if (POE_BALLOON_IS_FUSE_TYPE(&this->actor)) {
EnPoFusen_InitFuse(this);
- return;
+ } else {
+ EnPoFusen_InitNoFuse(this);
}
-
- EnPoFusen_InitNoFuse(this);
}
void EnPoFusen_Destroy(Actor* thisx, PlayState* play) {
@@ -143,26 +145,28 @@ void EnPoFusen_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroySphere(play, &this->collider);
}
-u16 EnPoFusen_CheckParent(EnPoFusen* this, PlayState* play) {
- Actor* actorPtr;
+/**
+ * Search for Romani's actor, beacuse it's PoFusen's job to update her actor when the balloon is popped.
+ */
+s32 EnPoFusen_CheckParent(EnPoFusen* this, PlayState* play) {
+ Actor* actorIter = play->actorCtx.actorLists[ACTORCAT_NPC].first;
- actorPtr = play->actorCtx.actorLists[ACTORCAT_NPC].first;
- if (ENPOFUSEN_IS_FUSE_TYPE(&this->actor)) {
+ if (POE_BALLOON_IS_FUSE_TYPE(&this->actor)) {
return true;
}
- while (actorPtr != NULL) {
- if (actorPtr->id == ACTOR_EN_MA4) {
- this->actor.parent = actorPtr;
+ while (actorIter != NULL) {
+ if (actorIter->id == ACTOR_EN_MA4) {
+ this->actor.parent = actorIter;
return true;
}
- actorPtr = actorPtr->next;
+ actorIter = actorIter->next;
}
return false;
}
-u16 EnPoFusen_CheckCollision(EnPoFusen* this, PlayState* play) {
+s32 EnPoFusen_CheckCollision(EnPoFusen* this, PlayState* play) {
if (this->actionFunc == EnPoFusen_IdleFuse) {
return false;
}
@@ -171,7 +175,7 @@ u16 EnPoFusen_CheckCollision(EnPoFusen* this, PlayState* play) {
this->collider.dim.worldSphere.center.y = this->actor.world.pos.y + 20.0f;
this->collider.dim.worldSphere.center.z = this->actor.world.pos.z;
- if ((this->collider.base.acFlags & AC_HIT) && (this->actor.colChkInfo.damageEffect == 0xF)) {
+ if ((this->collider.base.acFlags & AC_HIT) && (this->actor.colChkInfo.damageEffect == POE_BALLOON_DMGEFF_POP)) {
this->collider.base.acFlags &= ~AC_HIT;
return true;
}
@@ -191,7 +195,6 @@ void EnPoFusen_Idle(EnPoFusen* this, PlayState* play) {
f32 shadowScaleTmp;
f32 shadowAlphaTmp;
f32 heightOffset;
- f32 f255 = 255.0f;
this->actor.world.pos = this->actor.home.pos;
this->randScaleChange += 0x190;
@@ -203,30 +206,30 @@ void EnPoFusen_Idle(EnPoFusen* this, PlayState* play) {
this->actor.world.pos.y += heightOffset;
this->actor.shape.rot.z = (Math_SinS(this->randBaseRotChange) * 910.0f);
- if ((this->randScaleChange < 0x4000) && (this->randScaleChange >= -0x3FFF)) {
- Math_SmoothStepToS(&this->limb9Rot, 0x38E, 0x14, 0xBB8, 0x64);
+ if ((this->randScaleChange < 0x4000) && (this->randScaleChange > -0x4000)) {
+ Math_SmoothStepToS(&this->limbRotChainAndLantern, 0x38E, 0x14, 0xBB8, 0x64);
} else {
- Math_SmoothStepToS(&this->limb9Rot, 0x71C, 0x8, 0xBB8, 0x64);
+ Math_SmoothStepToS(&this->limbRotChainAndLantern, 0x71C, 0x8, 0xBB8, 0x64);
}
- this->avgBaseRotation = this->limb9Rot * 3;
- this->limb3Rot = (Math_SinS(this->randBaseRotChange + 0x38E3) * this->avgBaseRotation);
+ this->avgBaseRotation = this->limbRotChainAndLantern * 3;
+ this->limbRotYRightUpperArm = (Math_SinS(this->randBaseRotChange + 0x38E3) * this->avgBaseRotation);
this->limb46Rot = (Math_SinS(this->randBaseRotChange) * this->avgBaseRotation);
this->limb57Rot = (Math_SinS(this->randBaseRotChange - 0x38E3) * this->avgBaseRotation);
- this->limb8Rot = (Math_SinS(this->randBaseRotChange - 0x71C6) * this->avgBaseRotation);
+ this->limbRotLeftHand = (Math_SinS(this->randBaseRotChange - 0x71C6) * this->avgBaseRotation);
shadowScaleTmp = ((1.0f - Math_SinS(this->randScaleChange)) * 10.0f) + 50.0f;
shadowAlphaTmp = ((1.0f - Math_SinS(this->randScaleChange)) * 75.0f) + 100.0f;
this->actor.shape.shadowScale = shadowScaleTmp;
- this->actor.shape.shadowAlpha = (shadowAlphaTmp > f255) ? (u8)f255 : (u8)shadowAlphaTmp;
+ this->actor.shape.shadowAlpha = CLAMP_MAX(shadowAlphaTmp, 255.0f);
}
void EnPoFusen_IncrementRomaniPop(EnPoFusen* this) {
Actor* parent = this->actor.parent;
- EnMa4* romani;
if ((parent != NULL) && (parent->id == ACTOR_EN_MA4)) {
- romani = (EnMa4*)parent;
+ EnMa4* romani = (EnMa4*)parent;
+
romani->poppedBalloonCounter++;
}
@@ -237,13 +240,14 @@ void EnPoFusen_IncrementRomaniPop(EnPoFusen* this) {
void EnPoFusen_Pop(EnPoFusen* this, PlayState* play) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.world.pos.x, this->actor.world.pos.y + 20.0f,
this->actor.world.pos.z, 255, 255, 200, CLEAR_TAG_POP);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_BOMB_EXPLOSION);
- Actor_MarkForDeath(&this->actor);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_BOMB_EXPLOSION);
+ Actor_Kill(&this->actor);
}
void EnPoFusen_InitFuse(EnPoFusen* this) {
s16 rotZ = this->actor.shape.rot.z;
- this->fuse = ENPOFUSEN_GET_FUSE_LEN(&this->actor);
+
+ this->fuse = POE_BALLOON_GET_FUSE_LEN(&this->actor);
this->actor.shape.rot.z = 0;
this->randScaleChange = rotZ & 0xFFFF;
this->actionFunc = EnPoFusen_IdleFuse;
@@ -258,6 +262,7 @@ void EnPoFusen_IdleFuse(EnPoFusen* this, PlayState* play) {
void EnPoFusen_Update(Actor* thisx, PlayState* play) {
EnPoFusen* this = THIS;
+
this->actionFunc(this, play);
if (EnPoFusen_CheckCollision(this, play)) {
EnPoFusen_IncrementRomaniPop(this);
@@ -266,39 +271,38 @@ void EnPoFusen_Update(Actor* thisx, PlayState* play) {
s32 EnPoFusen_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
EnPoFusen* this = THIS;
- f32 zScale;
- f32 yScale;
- f32 xScale;
- s16 pad;
- s16 zRot;
- s16 pad2;
- s16 xRot;
- if (limbIndex == 2) {
- zScale = (Math_CosS(this->randScaleChange) * 0.08f) + 1.0f;
- xScale = zScale;
- if (!zScale) {}
+ if (limbIndex == POE_BALLOON_LIMB_BODY) {
+ f32 zScale = (Math_CosS(this->randScaleChange) * 0.08f) + 1.0f;
+ f32 yScale;
+ f32 xScale = zScale;
+ s16 pad;
+ s16 zRot;
+ s16 pad2;
+ s16 xRot;
+
yScale = (Math_SinS(this->randScaleChange) * 0.08f) + 1.0f;
- yScale = yScale * yScale;
+ yScale = SQ(yScale);
xRot = ((Math_SinS(this->randXZRotChange) * 2730.0f));
zRot = ((Math_CosS(this->randXZRotChange) * 2730.0f));
Matrix_RotateZYX(xRot, 0, zRot, MTXMODE_APPLY);
Matrix_Scale(xScale, yScale, zScale, MTXMODE_APPLY);
Matrix_RotateZS(-zRot, MTXMODE_APPLY);
Matrix_RotateXS(-xRot, MTXMODE_APPLY);
- } else if (limbIndex == 3) {
- rot->y += this->limb3Rot;
- } else if (limbIndex == 6) {
+
+ } else if (limbIndex == POE_BALLOON_RIGHT_UPPER_ARM) {
+ rot->y += this->limbRotYRightUpperArm;
+ } else if (limbIndex == POE_BALLOON_LEFT_UPPER_ARM) {
rot->y += this->limb46Rot;
- } else if (limbIndex == 4) {
+ } else if (limbIndex == POE_BALLOON_RIGHT_FOREARM) {
rot->z += this->limb46Rot;
- } else if ((limbIndex == 5) || (limbIndex == 7)) {
+ } else if ((limbIndex == POE_BALLOON_RIGHT_HAND) || (limbIndex == POE_BALLOON_LEFT_FOREARM)) {
rot->z += this->limb57Rot;
- } else if (limbIndex == 8) {
- rot->z += this->limb8Rot;
- } else if (limbIndex == 9) {
- rot->y += (s16)(this->limb9Rot * Math_SinS(this->randBaseRotChange));
- rot->z += (s16)(this->limb9Rot * Math_CosS(this->randBaseRotChange));
+ } else if (limbIndex == POE_BALLOON_LEFT_HAND) {
+ rot->z += this->limbRotLeftHand;
+ } else if (limbIndex == POE_BALLOON_LIMB_CHAIN_AND_LANTERN) {
+ rot->y += (s16)(this->limbRotChainAndLantern * Math_SinS(this->randBaseRotChange));
+ rot->z += (s16)(this->limbRotChainAndLantern * Math_CosS(this->randBaseRotChange));
}
return false;
}
@@ -311,6 +315,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);
SkelAnime_DrawTransformFlexOpa(play, this->anime.skeleton, this->anime.jointTable, this->anime.dListCount,
EnPoFusen_OverrideLimbDraw, EnPoFusen_PostLimbDraw, EnPoFusen_TransformLimbDraw,
diff --git a/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.h b/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.h
index 991b0cf9e..506f046d0 100644
--- a/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.h
+++ b/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.h
@@ -2,11 +2,13 @@
#define Z_EN_PO_FUSEN_H
#include "global.h"
+#include "objects/object_po_fusen/object_po_fusen.h"
struct EnPoFusen;
-#define ENPOFUSEN_GET_FUSE_LEN(thisx) ((thisx)->params & 0x3FF)
-#define ENPOFUSEN_IS_FUSE_TYPE(thisx) ((thisx)->params & 0x8000)
+// The version used in the credits, where we see romani shoot three in a row, are on timer, this is the fuse length.
+#define POE_BALLOON_GET_FUSE_LEN(thisx) ((thisx)->params & 0x3FF)
+#define POE_BALLOON_IS_FUSE_TYPE(thisx) ((thisx)->params & 0x8000)
typedef void (*EnPoFusenActionFunc)(struct EnPoFusen*, PlayState*);
@@ -15,21 +17,19 @@ typedef struct EnPoFusen {
/* 0x144 */ SkelAnime anime;
/* 0x188 */ EnPoFusenActionFunc actionFunc;
/* 0x18C */ ColliderSphere collider;
- /* 0x1E4 */ Vec3s jointTable[0xA];
- /* 0x220 */ Vec3s morphTable[0xA];
+ /* 0x1E4 */ Vec3s jointTable[POE_BALLOON_LIMB_MAX];
+ /* 0x220 */ Vec3s morphTable[POE_BALLOON_LIMB_MAX];
/* 0x25C */ s16 randScaleChange;
/* 0x25E */ s16 randXZRotChange;
/* 0x260 */ s16 randYRotChange;
/* 0x262 */ s16 avgBaseRotation;
- /* 0x264 */ s16 limb3Rot;
+ /* 0x264 */ s16 limbRotYRightUpperArm;
/* 0x266 */ s16 limb46Rot;
/* 0x268 */ s16 limb57Rot;
- /* 0x26A */ s16 limb8Rot;
- /* 0x26C */ s16 limb9Rot;
+ /* 0x26A */ s16 limbRotLeftHand;
+ /* 0x26C */ s16 limbRotChainAndLantern;
/* 0x26E */ s16 randBaseRotChange;
/* 0x270 */ s16 fuse;
} EnPoFusen; // size = 0x274
-extern const ActorInit En_Po_Fusen_InitVars;
-
#endif // Z_EN_PO_FUSEN_H
diff --git a/src/overlays/actors/ovl_En_Po_Sisters/overlay.cfg b/src/overlays/actors/ovl_En_Po_Sisters/overlay.cfg
deleted file mode 100644
index 7c59c1704..000000000
--- a/src/overlays/actors/ovl_En_Po_Sisters/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Po_Sisters
-z_en_po_sisters.c
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 57e32a554..35a972dfc 100644
--- a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c
+++ b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c
@@ -61,7 +61,7 @@ static Color_RGBA8 sPoSisterEnvColors[] = {
{ 0, 150, 0, 255 }, // Amy
};
-const ActorInit En_Po_Sisters_InitVars = {
+ActorInit En_Po_Sisters_InitVars = {
ACTOR_EN_PO_SISTERS,
ACTORCAT_ENEMY,
FLAGS,
@@ -97,46 +97,46 @@ static ColliderCylinderInit sCylinderInit = {
static CollisionCheckInfoInit sColChkInfoInit = { 6, 25, 60, 50 };
typedef enum {
- /* 0x0 */ POSISTERS_DAMAGEEFFECT_NOEFFECT,
- /* 0x1 */ POSISTERS_DAMAGEEFFECT_UNKDMG12, // set in DamageTable, but unused
- /* 0x4 */ POSISTERS_DAMAGEEFFECT_LIGHTARROWS = 0x4,
- /* 0xE */ POSISTERS_DAMAGEEFFECT_SPINATTACK = 0xE,
- /* 0xF */ POSISTERS_DAMAGEEFFECT_DEKUNUT = 0xF,
-} PoSisterDamageEffect;
+ /* 0x0 */ POE_SISTERS_DMGEFF_NONE,
+ /* 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,
+} PoeSisterDamageEffect;
static DamageTable sDamageTable = {
- /* Deku Nut */ DMG_ENTRY(0, POSISTERS_DAMAGEEFFECT_DEKUNUT),
- /* Deku Stick */ DMG_ENTRY(1, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* Horse trample */ DMG_ENTRY(1, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* Explosives */ DMG_ENTRY(1, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* Zora boomerang */ DMG_ENTRY(1, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* Normal arrow */ DMG_ENTRY(1, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* UNK_DMG_0x06 */ DMG_ENTRY(0, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* Hookshot */ DMG_ENTRY(1, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* Goron punch */ DMG_ENTRY(1, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* Sword */ DMG_ENTRY(1, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* Goron pound */ DMG_ENTRY(0, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* Fire arrow */ DMG_ENTRY(1, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* Ice arrow */ DMG_ENTRY(1, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* Light arrow */ DMG_ENTRY(2, POSISTERS_DAMAGEEFFECT_LIGHTARROWS),
- /* Goron spikes */ DMG_ENTRY(1, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* Deku spin */ DMG_ENTRY(1, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* Deku bubble */ DMG_ENTRY(1, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* Deku launch */ DMG_ENTRY(2, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* UNK_DMG_0x12 */ DMG_ENTRY(0, POSISTERS_DAMAGEEFFECT_UNKDMG12),
- /* Zora barrier */ DMG_ENTRY(0, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* Normal shield */ DMG_ENTRY(0, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* Light ray */ DMG_ENTRY(0, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* Thrown object */ DMG_ENTRY(1, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* Zora punch */ DMG_ENTRY(1, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* Spin attack */ DMG_ENTRY(1, POSISTERS_DAMAGEEFFECT_SPINATTACK),
- /* Sword beam */ DMG_ENTRY(0, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* Normal Roll */ DMG_ENTRY(0, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* UNK_DMG_0x1B */ DMG_ENTRY(0, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* UNK_DMG_0x1C */ DMG_ENTRY(0, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* Unblockable */ DMG_ENTRY(0, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* UNK_DMG_0x1E */ DMG_ENTRY(0, POSISTERS_DAMAGEEFFECT_NOEFFECT),
- /* Powder Keg */ DMG_ENTRY(1, POSISTERS_DAMAGEEFFECT_NOEFFECT),
+ /* Deku Nut */ DMG_ENTRY(0, POE_SISTERS_DMGEFF_DEKUNUT),
+ /* Deku Stick */ DMG_ENTRY(1, POE_SISTERS_DMGEFF_NONE),
+ /* Horse trample */ DMG_ENTRY(1, POE_SISTERS_DMGEFF_NONE),
+ /* Explosives */ DMG_ENTRY(1, POE_SISTERS_DMGEFF_NONE),
+ /* Zora boomerang */ DMG_ENTRY(1, POE_SISTERS_DMGEFF_NONE),
+ /* Normal arrow */ DMG_ENTRY(1, POE_SISTERS_DMGEFF_NONE),
+ /* UNK_DMG_0x06 */ DMG_ENTRY(0, POE_SISTERS_DMGEFF_NONE),
+ /* Hookshot */ DMG_ENTRY(1, POE_SISTERS_DMGEFF_NONE),
+ /* Goron punch */ DMG_ENTRY(1, POE_SISTERS_DMGEFF_NONE),
+ /* Sword */ DMG_ENTRY(1, POE_SISTERS_DMGEFF_NONE),
+ /* Goron pound */ DMG_ENTRY(0, POE_SISTERS_DMGEFF_NONE),
+ /* Fire arrow */ DMG_ENTRY(1, POE_SISTERS_DMGEFF_NONE),
+ /* Ice arrow */ DMG_ENTRY(1, POE_SISTERS_DMGEFF_NONE),
+ /* Light arrow */ DMG_ENTRY(2, POE_SISTERS_DMGEFF_LIGHTARROWS),
+ /* Goron spikes */ DMG_ENTRY(1, POE_SISTERS_DMGEFF_NONE),
+ /* Deku spin */ DMG_ENTRY(1, POE_SISTERS_DMGEFF_NONE),
+ /* Deku bubble */ DMG_ENTRY(1, POE_SISTERS_DMGEFF_NONE),
+ /* Deku launch */ DMG_ENTRY(2, POE_SISTERS_DMGEFF_NONE),
+ /* UNK_DMG_0x12 */ DMG_ENTRY(0, POE_SISTERS_DMGEFF_UNKDMG12),
+ /* Zora barrier */ DMG_ENTRY(0, POE_SISTERS_DMGEFF_NONE),
+ /* Normal shield */ DMG_ENTRY(0, POE_SISTERS_DMGEFF_NONE),
+ /* Light ray */ DMG_ENTRY(0, POE_SISTERS_DMGEFF_NONE),
+ /* Thrown object */ DMG_ENTRY(1, POE_SISTERS_DMGEFF_NONE),
+ /* Zora punch */ DMG_ENTRY(1, POE_SISTERS_DMGEFF_NONE),
+ /* Spin attack */ DMG_ENTRY(1, POE_SISTERS_DMGEFF_SPINATTACK),
+ /* Sword beam */ DMG_ENTRY(0, POE_SISTERS_DMGEFF_NONE),
+ /* Normal Roll */ DMG_ENTRY(0, POE_SISTERS_DMGEFF_NONE),
+ /* UNK_DMG_0x1B */ DMG_ENTRY(0, POE_SISTERS_DMGEFF_NONE),
+ /* UNK_DMG_0x1C */ DMG_ENTRY(0, POE_SISTERS_DMGEFF_NONE),
+ /* Unblockable */ DMG_ENTRY(0, POE_SISTERS_DMGEFF_NONE),
+ /* UNK_DMG_0x1E */ DMG_ENTRY(0, POE_SISTERS_DMGEFF_NONE),
+ /* Powder Keg */ DMG_ENTRY(1, POE_SISTERS_DMGEFF_NONE),
};
static InitChainEntry sInitChain[] = {
@@ -146,15 +146,15 @@ static InitChainEntry sInitChain[] = {
// clang-format off
// PoSisters have their own flags variable for cross function behavior detection
-#define POSISTERS_FLAG_CLEAR (0)
-#define POSISTERS_FLAG_CHECK_AC (1 << 0)
-#define POSISTERS_FLAG_UPDATE_SHAPE_ROT (1 << 1)
-#define POSISTERS_FLAG_CHECK_Z_TARGET (1 << 2) // meg doesnt go invis if you ztarget her for too long
-#define POSISTERS_FLAG_MATCH_PLAYER_HEIGHT (1 << 3) // the po is attempting to level with player's height
-#define POSISTERS_FLAG_UPDATE_BGCHECK_INFO (1 << 4)
-#define POSISTERS_FLAG_UPDATE_FIRES (1 << 5) // firePos updated to match limb in PostLimbDraw
-#define POSISTERS_FLAG_REAL_MEG_ROTATION (1 << 6) // real meg rotates different than her clones for one cycle
-#define POSISTERS_FLAG_DRAW_TORCH (1 << 7)
+#define POE_SISTERS_FLAG_CLEAR (0)
+#define POE_SISTERS_FLAG_CHECK_AC (1 << 0)
+#define POE_SISTERS_FLAG_UPDATE_SHAPE_ROT (1 << 1)
+#define POE_SISTERS_FLAG_CHECK_Z_TARGET (1 << 2) // Meg doesnt go invisible if you ztarget her for too long
+#define POE_SISTERS_FLAG_MATCH_PLAYER_HEIGHT (1 << 3) // The Poe is attempting to level with player's height
+#define POE_SISTERS_FLAG_UPDATE_BGCHECK_INFO (1 << 4)
+#define POE_SISTERS_FLAG_UPDATE_FIRES (1 << 5) // firePos updated to match limb in PostLimbDraw
+#define POE_SISTERS_FLAG_REAL_MEG_ROTATION (1 << 6) // Real Meg rotates different than her clones for one cycle
+#define POE_SISTERS_FLAG_DRAW_TORCH (1 << 7)
// clang-format on
void EnPoSisters_Init(Actor* thisx, PlayState* play) {
@@ -163,8 +163,8 @@ void EnPoSisters_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sInitChain);
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 50.0f);
- SkelAnime_Init(play, &this->skelAnime, &gPoSistersSkel, &gPoeSistersSwayAnim, this->jointTable, this->morphTable,
- POSISTERS_LIMB_MAX);
+ SkelAnime_Init(play, &this->skelAnime, &gPoeSistersSkel, &gPoeSistersSwayAnim, this->jointTable, this->morphTable,
+ POE_SISTERS_LIMB_MAX);
this->color.r = 255;
this->color.g = 255;
@@ -176,21 +176,21 @@ void EnPoSisters_Init(Actor* thisx, PlayState* play) {
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
- this->type = ENPOSISTERS_GET_TYPE(thisx);
+ this->type = POE_SISTERS_GET_TYPE(thisx);
this->actor.hintId = this->type + TATL_HINT_ID_POE_SISTER_MEG;
- this->megCloneId = ENPOSISTERS_GET_MEG_CLONE_ID(thisx);
+ this->megCloneId = POE_SISTERS_GET_MEG_CLONE_ID(thisx);
this->floatingBobbingTimer = 32;
this->zTargetTimer = 20;
this->fireCount = 1;
- this->poSisterFlags = POSISTERS_FLAG_UPDATE_FIRES;
+ this->poSisterFlags = POE_SISTERS_FLAG_UPDATE_FIRES;
this->megDistToPlayer = 110.0f;
thisx->flags &= ~ACTOR_FLAG_1;
- if (ENPOSISTERS_GET_OBSERVER_FLAG(&this->actor)) {
- // if flagged observer, they are a floating prop spawned by EnGb2 (po hut proprieter)
+ if (POE_SISTERS_GET_OBSERVER_FLAG(&this->actor)) {
+ // "Flagged observer": non-enemy floating prop spawned by EnGb2 (Poe Hut Proprieter) for display
EnPoSisters_SetupObserverIdle(this);
- } else if (this->type == POSISTER_TYPE_MEG) {
- if (this->megCloneId == POSISTER_MEG_REAL) {
+ } else if (this->type == POE_SISTERS_TYPE_MEG) {
+ if (this->megCloneId == POE_SISTERS_MEG_REAL) {
this->actor.colChkInfo.health = 8;
this->collider.info.toucher.damage = 16;
this->collider.base.ocFlags1 = (OC1_TYPE_PLAYER | OC1_ON);
@@ -242,7 +242,7 @@ void EnPoSisters_MatchPlayerXZ(EnPoSisters* this, PlayState* play) {
Player* player = GET_PLAYER(play);
f32 dist;
- if (this->megCloneId == POSISTER_MEG_REAL || this->actionFunc != EnPoSisters_DamageFlinch) {
+ if (this->megCloneId == POE_SISTERS_MEG_REAL || this->actionFunc != EnPoSisters_DamageFlinch) {
if ((player->meleeWeaponState == 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);
@@ -250,7 +250,7 @@ void EnPoSisters_MatchPlayerXZ(EnPoSisters* this, PlayState* play) {
Math_StepToF(&this->megDistToPlayer, 170.0f, 10.0f);
}
dist = this->megDistToPlayer;
- } else if (this->megCloneId != POSISTER_MEG_REAL) {
+ } else if (this->megCloneId != POE_SISTERS_MEG_REAL) {
dist = this->actor.parent->xzDistToPlayer;
}
@@ -309,7 +309,7 @@ void EnPoSisters_CheckZTarget(EnPoSisters* this, PlayState* play) {
void EnPoSisters_SetupObserverIdle(EnPoSisters* this) {
Animation_MorphToLoop(&this->skelAnime, &gPoeSistersSwayAnim, -3.0f);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->laughTimer = Rand_S16Offset(100, 50);
this->actionFunc = EnPoSisters_ObserverIdle;
}
@@ -318,7 +318,7 @@ void EnPoSisters_ObserverIdle(EnPoSisters* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (DECR(this->laughTimer) == 0) {
this->laughTimer = Rand_S16Offset(100, 50);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_LAUGH2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_LAUGH2);
}
}
@@ -330,7 +330,7 @@ void EnPoSisters_ObserverIdle(EnPoSisters* this, PlayState* play) {
void EnPoSisters_SetupAimlessIdleFlying2(EnPoSisters* this) {
Animation_MorphToLoop(&this->skelAnime, &gPoeSistersSwayAnim, -3.0f);
this->idleFlyingAnimationCounter = Rand_S16Offset(2, 3);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = EnPoSisters_AimlessIdleFlying2;
}
@@ -353,29 +353,32 @@ void EnPoSisters_SetupAimlessIdleFlying(EnPoSisters* this) {
Animation_MorphToLoop(&this->skelAnime, &gPoeSistersFloatAnim, -3.0f);
}
this->idleFlyingAnimationCounter = Rand_S16Offset(15, 3);
- this->poSisterFlags |= (POSISTERS_FLAG_CHECK_Z_TARGET | POSISTERS_FLAG_UPDATE_SHAPE_ROT | POSISTERS_FLAG_CHECK_AC);
+ this->poSisterFlags |=
+ (POE_SISTERS_FLAG_CHECK_Z_TARGET | POE_SISTERS_FLAG_UPDATE_SHAPE_ROT | POE_SISTERS_FLAG_CHECK_AC);
this->actionFunc = EnPoSisters_AimlessIdleFlying;
}
void EnPoSisters_AimlessIdleFlying(EnPoSisters* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
- Math_StepToF(&this->actor.speedXZ, 1.0f, 0.2f);
+ Math_StepToF(&this->actor.speed, 1.0f, 0.2f);
if (Animation_OnFrame(&this->skelAnime, 0.0f)) {
DECR(this->idleFlyingAnimationCounter);
}
if ((this->actor.xzDistToPlayer < 600.0f) && (fabsf(this->actor.playerHeightRel + 5.0f) < 30.0f)) {
EnPoSisters_SetupInvestigating(this);
- } else if ((this->idleFlyingAnimationCounter == 0) && Math_StepToF(&this->actor.speedXZ, 0.0f, 0.2f)) {
+ } else if ((this->idleFlyingAnimationCounter == 0) && Math_StepToF(&this->actor.speed, 0.0f, 0.2f)) {
// ! @bug: this is never reached because speedXZ is reduced
// at the same rate it is increased at the top of this function
EnPoSisters_SetupAimlessIdleFlying2(this);
}
- if (this->actor.bgCheckFlags & 8) { // touching a wall
- Math_ScaledStepToS(&this->actor.world.rot.y, Actor_YawToPoint(&this->actor, &this->actor.home.pos), 0x71C);
- } else if (Actor_XZDistanceToPoint(&this->actor, &this->actor.home.pos) > 600.0f) {
- Math_ScaledStepToS(&this->actor.world.rot.y, Actor_YawToPoint(&this->actor, &this->actor.home.pos), 0x71C);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
+ Math_ScaledStepToS(&this->actor.world.rot.y, Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos),
+ 0x71C);
+ } else if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > 600.0f) {
+ Math_ScaledStepToS(&this->actor.world.rot.y, Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos),
+ 0x71C);
}
}
@@ -392,7 +395,7 @@ void EnPoSisters_Investigating(EnPoSisters* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
yawDiff = this->actor.yawTowardsPlayer - player->actor.shape.rot.y;
- Math_StepToF(&this->actor.speedXZ, 2.0f, 0.2f);
+ Math_StepToF(&this->actor.speed, 2.0f, 0.2f);
if (yawDiff > 0x3000) {
Math_ScaledStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer + 0x3000, 0x71C);
@@ -418,10 +421,10 @@ void EnPoSisters_SetupSpinUp(EnPoSisters* this) {
this->collider.base.acFlags |= AC_HARD;
}
- Animation_MorphToLoop(&this->skelAnime, &gPoSistersAttackAnim, -5.0f);
- this->actor.speedXZ = 0.0f;
- this->spinupTimer = Animation_GetLastFrame(&gPoSistersAttackAnim.common) * 3 + 3;
- this->poSisterFlags &= ~POSISTERS_FLAG_UPDATE_SHAPE_ROT;
+ Animation_MorphToLoop(&this->skelAnime, &gPoeSistersAttackAnim, -5.0f);
+ this->actor.speed = 0.0f;
+ this->spinupTimer = Animation_GetLastFrame(&gPoeSistersAttackAnim.common) * 3 + 3;
+ this->poSisterFlags &= ~POE_SISTERS_FLAG_UPDATE_SHAPE_ROT;
this->actionFunc = EnPoSisters_SpinUp;
}
@@ -430,23 +433,23 @@ void EnPoSisters_SpinUp(EnPoSisters* this, PlayState* play) {
DECR(this->spinupTimer);
this->actor.shape.rot.y += ((s32)((this->skelAnime.endFrame + 1.0f) * 3.0f) - this->spinupTimer) * 0x180;
if ((this->spinupTimer == 18) || (this->spinupTimer == 7)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_ROLL);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_ROLL);
} else if (this->spinupTimer == 0) {
EnPoSisters_SetupSpinAttack(this);
}
}
void EnPoSisters_SetupSpinAttack(EnPoSisters* this) {
- this->actor.speedXZ = 5.0f;
- if (this->type == POSISTER_TYPE_MEG) {
+ this->actor.speed = 5.0f;
+ if (this->type == POE_SISTERS_TYPE_MEG) {
this->collider.base.colType = COLTYPE_METAL;
this->collider.base.acFlags |= AC_HARD;
- Animation_MorphToLoop(&this->skelAnime, &gPoSistersAttackAnim, -5.0f);
+ Animation_MorphToLoop(&this->skelAnime, &gPoeSistersAttackAnim, -5.0f);
}
this->spinTimer = 5;
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
- this->poSisterFlags |= POSISTERS_FLAG_MATCH_PLAYER_HEIGHT;
+ this->poSisterFlags |= POE_SISTERS_FLAG_MATCH_PLAYER_HEIGHT;
this->actionFunc = EnPoSisters_SpinAttack;
}
@@ -462,19 +465,19 @@ void EnPoSisters_SpinAttack(EnPoSisters* this, PlayState* play) {
s16 rotY = this->actor.shape.rot.y - this->actor.world.rot.y;
if (ABS_ALT(rotY) < 0x1000) {
- if (this->type != POSISTER_TYPE_MEG) {
+ if (this->type != POE_SISTERS_TYPE_MEG) {
this->collider.base.colType = COLTYPE_HIT3;
this->collider.base.acFlags &= ~AC_HARD;
EnPoSisters_SetupAimlessIdleFlying(this);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_LAUGH2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_LAUGH2);
EnPoSisters_MegCloneVanish(this, play);
}
}
}
if (Animation_OnFrame(&this->skelAnime, 1.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_ROLL);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_ROLL);
}
}
@@ -484,7 +487,7 @@ void EnPoSisters_SpinAttack(EnPoSisters* this, PlayState* play) {
void EnPoSisters_SetupAttackConnect(EnPoSisters* this) {
Animation_MorphToLoop(&this->skelAnime, &gPoeSistersFloatAnim, -3.0f);
this->actor.world.rot.y = BINANG_ROT180(this->actor.yawTowardsPlayer);
- if (this->type != POSISTER_TYPE_MEG) {
+ if (this->type != POE_SISTERS_TYPE_MEG) {
this->collider.base.colType = COLTYPE_HIT3;
this->collider.base.acFlags &= ~AC_HARD;
}
@@ -494,14 +497,14 @@ void EnPoSisters_SetupAttackConnect(EnPoSisters* this) {
void EnPoSisters_AttackConnectDrift(EnPoSisters* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
- this->actor.shape.rot.y -= (s16)(this->actor.speedXZ * 10.0f * 128.0f);
+ this->actor.shape.rot.y -= (s16)(this->actor.speed * 10.0f * 128.0f);
- if (Math_StepToF(&this->actor.speedXZ, 0.0f, 0.1f)) { // wait to stop moving
+ if (Math_StepToF(&this->actor.speed, 0.0f, 0.1f)) { // wait to stop moving
this->actor.world.rot.y = this->actor.shape.rot.y;
- if (this->type != POSISTER_TYPE_MEG) {
+ if (this->type != POE_SISTERS_TYPE_MEG) {
EnPoSisters_SetupAimlessIdleFlying(this);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_LAUGH2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_LAUGH2);
EnPoSisters_MegCloneVanish(this, play);
}
}
@@ -513,22 +516,23 @@ void EnPoSisters_SetupDamageFlinch(EnPoSisters* this) {
func_800BE504(&this->actor, &this->collider);
}
- if (this->type != POSISTER_TYPE_MEG) {
- this->actor.speedXZ = 10.0f;
+ if (this->type != POE_SISTERS_TYPE_MEG) {
+ this->actor.speed = 10.0f;
}
this->poSisterFlags &=
- ~(POSISTERS_FLAG_MATCH_PLAYER_HEIGHT | POSISTERS_FLAG_UPDATE_SHAPE_ROT | POSISTERS_FLAG_CHECK_AC);
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 16);
+ ~(POE_SISTERS_FLAG_MATCH_PLAYER_HEIGHT | POE_SISTERS_FLAG_UPDATE_SHAPE_ROT | POE_SISTERS_FLAG_CHECK_AC);
+
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 16);
this->actionFunc = EnPoSisters_DamageFlinch;
}
void EnPoSisters_DamageFlinch(EnPoSisters* this, PlayState* play) {
if (SkelAnime_Update(&this->skelAnime) && !(this->actor.flags & ACTOR_FLAG_8000)) {
if (this->actor.colChkInfo.health != 0) {
- if (this->type != POSISTER_TYPE_MEG) {
+ if (this->type != POE_SISTERS_TYPE_MEG) {
EnPoSisters_SetupFlee(this);
- } else if (this->megCloneId != POSISTER_MEG_REAL) {
+ } else if (this->megCloneId != POE_SISTERS_MEG_REAL) {
EnPoSisters_MegCloneVanish(this, NULL);
} else {
EnPoSisters_MegCloneVanish(this, play);
@@ -538,28 +542,28 @@ void EnPoSisters_DamageFlinch(EnPoSisters* this, PlayState* play) {
}
}
- if (this->megCloneId != POSISTER_MEG_REAL) {
+ if (this->megCloneId != POE_SISTERS_MEG_REAL) {
s32 alpha;
Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.parent->shape.rot.y,
- (this->megCloneId == POSISTER_MEG_CLONE2) ? 0x800 : 0x400);
+ (this->megCloneId == POE_SISTERS_MEG_CLONE2) ? 0x800 : 0x400);
alpha = ((this->skelAnime.endFrame - this->skelAnime.curFrame) * 255.0f) / this->skelAnime.endFrame;
this->color.a = CLAMP(alpha, 0, 255);
this->actor.world.pos.y = this->actor.parent->world.pos.y;
EnPoSisters_MatchPlayerXZ(this, play);
- } else if (this->type != POSISTER_TYPE_MEG) {
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.5f);
+ } else if (this->type != POE_SISTERS_TYPE_MEG) {
+ Math_StepToF(&this->actor.speed, 0.0f, 0.5f);
}
}
void EnPoSisters_SetupFlee(EnPoSisters* this) {
- Animation_MorphToLoop(&this->skelAnime, &gPoSistersFleeAnim, -3.0f);
+ Animation_MorphToLoop(&this->skelAnime, &gPoeSistersFleeAnim, -3.0f);
this->actor.world.rot.y = BINANG_ROT180(this->actor.shape.rot.y);
this->fleeTimer = 5;
this->poSisterFlags |=
- (POSISTERS_FLAG_MATCH_PLAYER_HEIGHT | POSISTERS_FLAG_UPDATE_SHAPE_ROT | POSISTERS_FLAG_CHECK_AC);
- this->actor.speedXZ = 5.0f;
+ (POE_SISTERS_FLAG_MATCH_PLAYER_HEIGHT | POE_SISTERS_FLAG_UPDATE_SHAPE_ROT | POE_SISTERS_FLAG_CHECK_AC);
+ this->actor.speed = 5.0f;
this->actionFunc = EnPoSisters_Flee;
}
@@ -570,9 +574,9 @@ void EnPoSisters_Flee(EnPoSisters* this, PlayState* play) {
DECR(this->fleeTimer);
}
- if (this->actor.bgCheckFlags & 8) { // touching a wall
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
this->actor.world.rot.y = this->actor.shape.rot.y;
- this->poSisterFlags |= POSISTERS_FLAG_UPDATE_SHAPE_ROT;
+ this->poSisterFlags |= POE_SISTERS_FLAG_UPDATE_SHAPE_ROT;
EnPoSisters_SetupSpinToInvis(this);
} else if (this->fleeTimer == 0 && this->actor.xzDistToPlayer > 480.0f) {
this->actor.world.rot.y = this->actor.shape.rot.y;
@@ -584,11 +588,11 @@ void EnPoSisters_SetupSpinToInvis(EnPoSisters* this) {
Animation_Change(&this->skelAnime, &gPoeSistersAppearDisappearAnim, 1.5f, 0.0f,
Animation_GetLastFrame(&gPoeSistersAppearDisappearAnim.common), ANIMMODE_ONCE, -3.0f);
this->invisibleTimer = 100; // 5 seconds
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
- this->poSisterFlags &= ~(POSISTERS_FLAG_CHECK_Z_TARGET | POSISTERS_FLAG_CHECK_AC);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_DISAPPEAR);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_LAUGH2);
+ this->poSisterFlags &= ~(POE_SISTERS_FLAG_CHECK_Z_TARGET | POE_SISTERS_FLAG_CHECK_AC);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_DISAPPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_LAUGH2);
this->actionFunc = EnPoSisters_SpinToInvis;
}
@@ -607,7 +611,7 @@ void EnPoSisters_SpinToInvis(EnPoSisters* this, PlayState* play) {
void EnPoSisters_SetupSpinBackToVisible(EnPoSisters* this, PlayState* play) {
Animation_Change(&this->skelAnime, &gPoeSistersAppearDisappearAnim, 1.5f, 0.0f,
Animation_GetLastFrame(&gPoeSistersAppearDisappearAnim.common), ANIMMODE_ONCE, -3.0f);
- if (this->type == POSISTER_TYPE_MEG) {
+ if (this->type == POE_SISTERS_TYPE_MEG) {
this->megDistToPlayer = 110.0f;
EnPoSisters_MatchPlayerXZ(this, play);
this->color.a = 0;
@@ -617,17 +621,17 @@ void EnPoSisters_SetupSpinBackToVisible(EnPoSisters* this, PlayState* play) {
}
this->spinInvisibleTimer = 15;
- this->actor.speedXZ = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_APPEAR);
- this->poSisterFlags &= ~POSISTERS_FLAG_CHECK_AC;
+ this->actor.speed = 0.0f;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_APPEAR);
+ this->poSisterFlags &= ~POE_SISTERS_FLAG_CHECK_AC;
this->actionFunc = EnPoSisters_SpinBackToVisible;
}
void EnPoSisters_SpinBackToVisible(EnPoSisters* this, PlayState* play) {
if (SkelAnime_Update(&this->skelAnime)) {
this->color.a = 255; // fully visible
- if (this->type != POSISTER_TYPE_MEG) {
- this->poSisterFlags |= POSISTERS_FLAG_CHECK_AC;
+ if (this->type != POE_SISTERS_TYPE_MEG) {
+ this->poSisterFlags |= POE_SISTERS_FLAG_CHECK_AC;
this->collider.info.bumper.dmgFlags = ~(0x8000000 | 0x200000 | 0x100000 | 0x40000 | 0x1);
DECR(this->spinInvisibleTimer);
@@ -643,7 +647,7 @@ void EnPoSisters_SpinBackToVisible(EnPoSisters* this, PlayState* play) {
s32 alpha = (this->skelAnime.curFrame * 255.0f) / this->skelAnime.endFrame;
this->color.a = CLAMP(alpha, 0, 255);
- if (this->type == POSISTER_TYPE_MEG) {
+ if (this->type == POE_SISTERS_TYPE_MEG) {
EnPoSisters_MatchPlayerXZ(this, play);
}
}
@@ -651,11 +655,11 @@ void EnPoSisters_SpinBackToVisible(EnPoSisters* this, PlayState* play) {
void EnPoSisters_SetupDeathStage1(EnPoSisters* this) {
this->deathTimer = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.world.pos.y += 42.0f;
this->actor.shape.yOffset = -6000.0f;
this->actor.flags &= ~ACTOR_FLAG_1;
- this->poSisterFlags = POSISTERS_FLAG_CLEAR;
+ this->poSisterFlags = POE_SISTERS_FLAG_CLEAR;
this->actionFunc = EnPoSisters_DeathStage1;
}
@@ -696,7 +700,7 @@ void EnPoSisters_DeathStage1(EnPoSisters* this, PlayState* play) {
}
if (this->deathTimer == 16) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WIZ_DISAPPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_DISAPPEAR);
}
}
@@ -714,35 +718,36 @@ void EnPoSisters_DeathStage2(EnPoSisters* this, PlayState* play) {
this->deathTimer++;
if (this->deathTimer == 32) {
- Actor_MarkForDeath(&this->actor);
- } else {
- EnPoSisters_UpdateDeathFlameSwirl(this, this->deathTimer, &this->actor.world.pos);
+ Actor_Kill(&this->actor);
+ return;
}
+
+ EnPoSisters_UpdateDeathFlameSwirl(this, this->deathTimer, &this->actor.world.pos);
}
void EnPoSisters_SpawnMegClones(EnPoSisters* this, PlayState* play) {
Actor* clone1 = Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_PO_SISTERS,
this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0,
- 0, ENPOSISTERS_PARAMS(false, POSISTER_MEG_CLONE1, POSISTER_TYPE_MEG));
+ 0, POE_SISTERS_PARAMS(false, POE_SISTERS_MEG_CLONE1, POE_SISTERS_TYPE_MEG));
Actor* clone2 = Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_PO_SISTERS,
this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0,
- 0, ENPOSISTERS_PARAMS(false, POSISTER_MEG_CLONE2, POSISTER_TYPE_MEG));
+ 0, POE_SISTERS_PARAMS(false, POE_SISTERS_MEG_CLONE2, POE_SISTERS_TYPE_MEG));
Actor* clone3 = Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_PO_SISTERS,
this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0,
- 0, ENPOSISTERS_PARAMS(false, POSISTER_MEG_CLONE3, POSISTER_TYPE_MEG));
+ 0, POE_SISTERS_PARAMS(false, POE_SISTERS_MEG_CLONE3, POE_SISTERS_TYPE_MEG));
- // if we cannot spawn all clones: abort
+ // If we cannot spawn all clones: Abort
if ((clone1 == NULL) || (clone2 == NULL) || (clone3 == NULL)) {
if (clone1 != NULL) {
- Actor_MarkForDeath(clone1);
+ Actor_Kill(clone1);
}
if (clone2 != NULL) {
- Actor_MarkForDeath(clone2);
+ Actor_Kill(clone2);
}
if (clone3 != NULL) {
- Actor_MarkForDeath(clone3);
+ Actor_Kill(clone3);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -758,7 +763,7 @@ void EnPoSisters_MegCloneVanish(EnPoSisters* this, PlayState* play) {
this->actor.draw = NULL;
this->actor.flags &= ~ACTOR_FLAG_1;
this->invisibleTimer = 100; // 5 seconds
- this->poSisterFlags = POSISTERS_FLAG_UPDATE_FIRES;
+ this->poSisterFlags = POE_SISTERS_FLAG_UPDATE_FIRES;
this->collider.base.colType = COLTYPE_HIT3;
this->collider.base.acFlags &= ~AC_HARD;
@@ -766,10 +771,10 @@ void EnPoSisters_MegCloneVanish(EnPoSisters* this, PlayState* play) {
pos.x = this->actor.world.pos.x;
pos.y = this->actor.world.pos.y + 45.0f;
pos.z = this->actor.world.pos.z;
- func_800B3030(play, &pos, &gZeroVec3f, &gZeroVec3f, 150, 0, 3); // spawns EffectSsDeadDb
+ func_800B3030(play, &pos, &gZeroVec3f, &gZeroVec3f, 150, 0, 3); // Spawns EffectSsDeadDb (flame effects)
}
- Lights_PointSetColorAndRadius(&this->lightInfo, 0, 0, 0, 0); // light OFF
+ Lights_PointSetColorAndRadius(&this->lightInfo, 0, 0, 0, 0); // Light OFF
this->actionFunc = EnPoSisters_MegCloneWaitForSpinBack;
}
@@ -777,7 +782,7 @@ void EnPoSisters_MegCloneWaitForSpinBack(EnPoSisters* this, PlayState* play) {
Player* player = GET_PLAYER(play);
EnPoSisters* parent = (EnPoSisters*)this->actor.parent;
- if (this->megCloneId == POSISTER_MEG_REAL) {
+ if (this->megCloneId == POE_SISTERS_MEG_REAL) {
DECR(this->invisibleTimer);
if (this->invisibleTimer == 0) {
s32 rand = Rand_ZeroFloat(4.0f);
@@ -793,7 +798,7 @@ void EnPoSisters_MegCloneWaitForSpinBack(EnPoSisters* this, PlayState* play) {
EnPoSisters_SetupSpinBackToVisible(this, play);
} else if (parent->actionFunc == EnPoSisters_DeathStage1) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -802,7 +807,7 @@ void EnPoSisters_SetupMegSurroundPlayer(EnPoSisters* this) {
this->color.a = 255;
this->megSurroundTimer = 300; // 15 seconds
this->megClonesRemaining = 3;
- this->poSisterFlags |= (POSISTERS_FLAG_MATCH_PLAYER_HEIGHT | POSISTERS_FLAG_CHECK_AC);
+ this->poSisterFlags |= (POE_SISTERS_FLAG_MATCH_PLAYER_HEIGHT | POE_SISTERS_FLAG_CHECK_AC);
this->actor.flags |= ACTOR_FLAG_1;
this->actionFunc = EnPoSisters_MegSurroundPlayer;
}
@@ -814,47 +819,48 @@ void EnPoSisters_MegSurroundPlayer(EnPoSisters* this, PlayState* play) {
if (this->megClonesRemaining > 0 && this->megSurroundTimer >= 16) {
SkelAnime_Update(&this->skelAnime);
- if (this->megCloneId == POSISTER_MEG_REAL) {
+ if (this->megCloneId == POE_SISTERS_MEG_REAL) {
if (ABS_ALT(16 - this->floatingBobbingTimer) < 14) {
- // every x frames rotate around player, the fewer meg clones remaining the faster they spin
+ // Every N frames rotate around player. The fewer Meg clones remaining the faster they spin.
this->actor.shape.rot.y += (s16)((0x580 - (this->megClonesRemaining * 0x180)) *
fabsf(Math_SinS(this->floatingBobbingTimer * 0x800)));
}
- // twirl the real meg backwards for a bit for visual tell to player
+ // Twirl the real Meg backwards for a bit for a visual tell to player.
if ((this->megSurroundTimer >= 284) || (this->megSurroundTimer <= 30)) {
- this->poSisterFlags |= POSISTERS_FLAG_REAL_MEG_ROTATION;
+ this->poSisterFlags |= POE_SISTERS_FLAG_REAL_MEG_ROTATION;
} else {
- this->poSisterFlags &= ~POSISTERS_FLAG_REAL_MEG_ROTATION;
+ this->poSisterFlags &= ~POE_SISTERS_FLAG_REAL_MEG_ROTATION;
}
} else {
this->actor.shape.rot.y = this->actor.parent->shape.rot.y + (this->megCloneId * 0x4000);
}
}
- if (this->megCloneId == POSISTER_MEG_REAL) {
+ if (this->megCloneId == POE_SISTERS_MEG_REAL) {
if ((this->megSurroundTimer >= 284) || ((this->megSurroundTimer <= 30) && (this->megSurroundTimer >= 16))) {
- this->poSisterFlags |= POSISTERS_FLAG_REAL_MEG_ROTATION;
+ this->poSisterFlags |= POE_SISTERS_FLAG_REAL_MEG_ROTATION;
} else {
- this->poSisterFlags &= ~POSISTERS_FLAG_REAL_MEG_ROTATION;
+ this->poSisterFlags &= ~POE_SISTERS_FLAG_REAL_MEG_ROTATION;
}
}
if (this->megSurroundTimer == 0) {
- if (this->megCloneId == POSISTER_MEG_REAL) {
+ if (this->megCloneId == POE_SISTERS_MEG_REAL) {
EnPoSisters_SetupSpinAttack(this);
} else {
EnPoSisters_MegCloneVanish(this, play);
}
- } else if (this->megCloneId != POSISTER_MEG_REAL) {
+ } else if (this->megCloneId != POE_SISTERS_MEG_REAL) {
parent = (EnPoSisters*)this->actor.parent;
if (parent->actionFunc == EnPoSisters_DamageFlinch) {
- // flinch clones if you hit the real meg
+ // Clones flinch if you hit the real Meg
EnPoSisters_SetupDamageFlinch(this);
}
} else if (this->megClonesRemaining == 0) {
- // all meg clones have been killed, meg waits 15 frames then spin attacks
- // timer is negative because megClonesRemaining and megAttackTimer are the same union'd variable
+ // All Meg clones have been killed: Real Meg waits 15 frames then spin attacks in retaliation
+ // Timer is negative (inrecrements to zero)
+ // because megClonesRemaining and megAttackTimer are the same union'd variable
this->megAttackTimer = -15;
} else if (this->megAttackTimer < 0) {
this->megAttackTimer++;
@@ -871,9 +877,9 @@ void EnPoSisters_MegSurroundPlayer(EnPoSisters* this, PlayState* play) {
*/
void EnPoSisters_SetupSpawnPo(EnPoSisters* this) {
Animation_PlayOnce(&this->skelAnime, &gPoeSistersAppearDisappearAnim);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_APPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_APPEAR);
this->color.a = 0;
- this->poSisterFlags = POSISTERS_FLAG_UPDATE_FIRES;
+ this->poSisterFlags = POE_SISTERS_FLAG_UPDATE_FIRES;
this->actionFunc = EnPoSisters_PoeSpawn;
}
@@ -881,8 +887,8 @@ void EnPoSisters_PoeSpawn(EnPoSisters* this, PlayState* play) {
if (SkelAnime_Update(&this->skelAnime)) {
this->color.a = 255;
this->actor.flags |= ACTOR_FLAG_1;
- this->poSisterFlags |= (POSISTERS_FLAG_UPDATE_BGCHECK_INFO | POSISTERS_FLAG_MATCH_PLAYER_HEIGHT);
- if (this->type == POSISTER_TYPE_MEG) {
+ this->poSisterFlags |= (POE_SISTERS_FLAG_UPDATE_BGCHECK_INFO | POE_SISTERS_FLAG_MATCH_PLAYER_HEIGHT);
+ if (this->type == POE_SISTERS_TYPE_MEG) {
EnPoSisters_MegCloneVanish(this, play);
} else {
EnPoSisters_SetupAimlessIdleFlying(this);
@@ -902,9 +908,9 @@ void EnPoSisters_CheckCollision(EnPoSisters* this, PlayState* play) {
this->collider.base.acFlags &= ~AC_HIT;
Actor_SetDropFlag(&this->actor, &this->collider.info);
- if (this->megCloneId != POSISTER_MEG_REAL) {
+ if (this->megCloneId != POE_SISTERS_MEG_REAL) {
((EnPoSisters*)this->actor.parent)->megClonesRemaining--;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_LAUGH2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_LAUGH2);
EnPoSisters_MegCloneVanish(this, play);
if (Rand_ZeroOne() < 0.2f) {
pos.x = this->actor.world.pos.x;
@@ -913,27 +919,27 @@ void EnPoSisters_CheckCollision(EnPoSisters* this, PlayState* play) {
Item_DropCollectible(play, &pos, ITEM00_ARROWS_10);
}
} else if (this->collider.base.colType != 9) {
- if (this->actor.colChkInfo.damageEffect == POSISTERS_DAMAGEEFFECT_DEKUNUT) {
+ if (this->actor.colChkInfo.damageEffect == POE_SISTERS_DMGEFF_DEKUNUT) {
this->actor.world.rot.y = this->actor.shape.rot.y;
- this->poSisterFlags |= POSISTERS_FLAG_UPDATE_SHAPE_ROT;
+ this->poSisterFlags |= POE_SISTERS_FLAG_UPDATE_SHAPE_ROT;
EnPoSisters_SetupSpinBackToVisible(this, play);
- } else if ((this->type == POSISTER_TYPE_MEG) &&
- (this->actor.colChkInfo.damageEffect == POSISTERS_DAMAGEEFFECT_SPINATTACK) &&
+ } else if ((this->type == POE_SISTERS_TYPE_MEG) &&
+ (this->actor.colChkInfo.damageEffect == POE_SISTERS_DMGEFF_SPINATTACK) &&
(this->actionFunc == EnPoSisters_MegSurroundPlayer)) {
if (this->megClonesRemaining == 0) {
- // all meg clones have been killed, meg waits 45 frames then spin attacks
- // timer is negative because megClonesRemaining and megAttackTimer are the same union'd variable
+ // All Meg clones have been killed: Real Meg waits 45 frames then spin attacks
+ // Timer is negative because megClonesRemaining and megAttackTimer are the same union'd variable
this->megAttackTimer = -45;
}
} else {
if (Actor_ApplyDamage(&this->actor)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_DAMAGE);
} else {
Enemy_StartFinishingBlow(play, &this->actor);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_SISTER_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_SISTER_DEAD);
}
- if (this->actor.colChkInfo.damageEffect == POSISTERS_DAMAGEEFFECT_LIGHTARROWS) {
+ if (this->actor.colChkInfo.damageEffect == POE_SISTERS_DMGEFF_LIGHTARROWS) {
this->drawDmgEffAlpha = 4.0f;
this->drawDmgEffScale = 0.5f;
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->collider.info.bumper.hitPos.x,
@@ -959,20 +965,20 @@ void EnPoSisters_Update(Actor* thisx, PlayState* play) {
}
EnPoSisters_CheckCollision(this, play);
- if (this->poSisterFlags & POSISTERS_FLAG_CHECK_Z_TARGET) {
+ if (this->poSisterFlags & POE_SISTERS_FLAG_CHECK_Z_TARGET) {
EnPoSisters_CheckZTarget(this, play);
}
this->actionFunc(this, play);
- if (this->poSisterFlags & POSISTERS_FLAG_MATCH_PLAYER_HEIGHT) {
+ if (this->poSisterFlags & POE_SISTERS_FLAG_MATCH_PLAYER_HEIGHT) {
EnPoSisters_MatchPlayerY(this, play);
}
Actor_MoveWithGravity(&this->actor);
- if (this->poSisterFlags & POSISTERS_FLAG_UPDATE_BGCHECK_INFO) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 0.0f, 5);
+ if (this->poSisterFlags & POE_SISTERS_FLAG_UPDATE_BGCHECK_INFO) {
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
} else {
checkPos.x = this->actor.world.pos.x;
checkPos.y = this->actor.world.pos.y + 10.0f;
@@ -998,8 +1004,8 @@ void EnPoSisters_Update(Actor* thisx, PlayState* play) {
}
if (this->poSisterFlags &
- (POSISTERS_FLAG_UPDATE_BGCHECK_INFO | POSISTERS_FLAG_MATCH_PLAYER_HEIGHT | POSISTERS_FLAG_CHECK_Z_TARGET |
- POSISTERS_FLAG_UPDATE_SHAPE_ROT | POSISTERS_FLAG_CHECK_AC)) {
+ (POE_SISTERS_FLAG_UPDATE_BGCHECK_INFO | POE_SISTERS_FLAG_MATCH_PLAYER_HEIGHT | POE_SISTERS_FLAG_CHECK_Z_TARGET |
+ POE_SISTERS_FLAG_UPDATE_SHAPE_ROT | POE_SISTERS_FLAG_CHECK_AC)) {
Collider_UpdateCylinder(&this->actor, &this->collider);
if ((this->actionFunc == EnPoSisters_SpinAttack) || (this->actionFunc == EnPoSisters_SpinUp)) {
this->fireCount++;
@@ -1013,7 +1019,7 @@ void EnPoSisters_Update(Actor* thisx, PlayState* play) {
CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
}
- if (this->poSisterFlags & POSISTERS_FLAG_CHECK_AC) {
+ if (this->poSisterFlags & POE_SISTERS_FLAG_CHECK_AC) {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
}
@@ -1023,23 +1029,23 @@ void EnPoSisters_Update(Actor* thisx, PlayState* play) {
if (this->actionFunc == EnPoSisters_Flee) {
this->actor.shape.rot.y = BINANG_ROT180(this->actor.world.rot.y);
- } else if (this->poSisterFlags & POSISTERS_FLAG_UPDATE_SHAPE_ROT) {
+ } else if (this->poSisterFlags & POE_SISTERS_FLAG_UPDATE_SHAPE_ROT) {
this->actor.shape.rot.y = this->actor.world.rot.y;
}
}
}
void EnPoSisters_UpdateColors(EnPoSisters* this) {
- if (this->skelAnime.animation == &gPoSistersAttackAnim) {
+ if (this->skelAnime.animation == &gPoeSistersAttackAnim) {
this->color.r = CLAMP_MAX(this->color.r + 5, 255);
this->color.g = CLAMP_MIN(this->color.g - 5, 50);
this->color.b = CLAMP_MIN(this->color.b - 5, 0);
- } else if (this->skelAnime.animation == &gPoSistersFleeAnim) {
+ } else if (this->skelAnime.animation == &gPoeSistersFleeAnim) {
this->color.r = CLAMP_MAX(this->color.r + 5, 80);
this->color.g = CLAMP_MAX(this->color.g + 5, 255);
this->color.b = CLAMP_MAX(this->color.b + 5, 225);
} else if (this->skelAnime.animation == &gPoeSistersDamagedAnim) {
- // flash every other frame after taking damage
+ // Flash every other frame after taking damage
if (this->actor.colorFilterTimer & 0x2) {
this->color.r = 0;
this->color.g = 0;
@@ -1066,16 +1072,16 @@ void EnPoSisters_UpdateColors(EnPoSisters* this) {
s32 EnPoSisters_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx,
Gfx** gfx) {
static Gfx* gPoSisterBodyDisplayLists[] = {
- gPoSistersMegBodyDL,
- gPoSistersJoelleBodyDL,
- gPoSistersBethBodyDL,
- gPoSistersAmyBodyDL,
+ gPoeSistersMegBodyDL,
+ gPoeSistersJoelleBodyDL,
+ gPoeSistersBethBodyDL,
+ gPoeSistersAmyBodyDL,
};
static Gfx* gPoSisterFaceDisplayLists[] = {
- gPoSistersMegFaceDL,
- gPoSistersJoelleFaceDL,
- gPoSistersBethFaceDL,
- gPoSistersAmyFaceDL,
+ gPoeSistersMegFaceDL,
+ gPoeSistersJoelleFaceDL,
+ gPoeSistersBethFaceDL,
+ gPoeSistersAmyFaceDL,
};
static Color_RGBA8 gPoSisterColors[] = {
{ 80, 0, 100, 0 },
@@ -1085,7 +1091,7 @@ s32 EnPoSisters_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Ve
};
EnPoSisters* this = THIS;
- if (limbIndex == POSISTERS_LIMB_ROOT && (this->poSisterFlags & POSISTERS_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 {
@@ -1093,17 +1099,17 @@ s32 EnPoSisters_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Ve
}
}
- if ((this->color.a == 0) || (limbIndex == POSISTERS_LIMB_TORCH) ||
+ if ((this->color.a == 0) || (limbIndex == POE_SISTERS_LIMB_TORCH) ||
((this->actionFunc == EnPoSisters_DeathStage1) && (this->deathTimer >= 8))) {
*dList = NULL;
- } else if (limbIndex == POSISTERS_LIMB_MAIN_BODY) {
+ } else if (limbIndex == POE_SISTERS_LIMB_MAIN_BODY) {
*dList = gPoSisterBodyDisplayLists[this->type];
- } else if (limbIndex == POSISTERS_LIMB_FACE) {
+ } else if (limbIndex == POE_SISTERS_LIMB_FACE) {
*dList = gPoSisterFaceDisplayLists[this->type];
gDPPipeSync((*gfx)++);
gDPSetEnvColor((*gfx)++, this->color.r, this->color.g, this->color.b, this->color.a);
- } else if (limbIndex == POSISTERS_LIMB_LOWER_BODY) {
+ } else if (limbIndex == POE_SISTERS_LIMB_LOWER_BODY) {
Color_RGBA8* color = &gPoSisterColors[this->type];
gDPPipeSync((*gfx)++);
@@ -1113,46 +1119,47 @@ s32 EnPoSisters_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Ve
return false;
}
-#define POSISTER_LIMBPOS_INVALID -1
+#define POE_SISTERS_LIMBPOS_INVALID -1
void EnPoSisters_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx, Gfx** gfx) {
static Vec3f D_80B1DAFC = { 1000.0f, -1700.0f, 0.0f };
static s8 D_80B1DB08[] = {
- POSISTER_LIMBPOS_INVALID,
- POSISTER_LIMBPOS_INVALID,
+ POE_SISTERS_LIMBPOS_INVALID,
+ POE_SISTERS_LIMBPOS_INVALID,
0,
1,
2,
- POSISTER_LIMBPOS_INVALID,
+ POE_SISTERS_LIMBPOS_INVALID,
3,
- POSISTER_LIMBPOS_INVALID,
- POSISTER_LIMBPOS_INVALID,
- POSISTER_LIMBPOS_INVALID,
- POSISTER_LIMBPOS_INVALID,
- POSISTER_LIMBPOS_INVALID,
+ POE_SISTERS_LIMBPOS_INVALID,
+ POE_SISTERS_LIMBPOS_INVALID,
+ POE_SISTERS_LIMBPOS_INVALID,
+ POE_SISTERS_LIMBPOS_INVALID,
+ POE_SISTERS_LIMBPOS_INVALID,
};
EnPoSisters* this = THIS;
s32 end;
f32 brightness;
- if (D_80B1DB08[limbIndex] != POSISTER_LIMBPOS_INVALID) {
+ if (D_80B1DB08[limbIndex] != POE_SISTERS_LIMBPOS_INVALID) {
Matrix_MultZero(&this->limbPos[D_80B1DB08[limbIndex]]);
- } else if (limbIndex == POSISTERS_LIMB_MAIN_BODY) {
+ } else if (limbIndex == POE_SISTERS_LIMB_MAIN_BODY) {
Matrix_MultVecY(-2500.0f, &this->limbPos[4]);
Matrix_MultVecY(3000.0f, &this->limbPos[5]);
- } else if (limbIndex == POSISTERS_LIMB_FACE) {
+ } else if (limbIndex == POE_SISTERS_LIMB_FACE) {
Matrix_MultVecY(-4000.0f, &this->limbPos[6]);
- } else if (limbIndex == POSISTERS_LIMB_LOWER_BODY) {
+ } else if (limbIndex == POE_SISTERS_LIMB_LOWER_BODY) {
Matrix_MultVecX(3000.0f, &this->limbPos[7]);
}
- if (this->actionFunc == EnPoSisters_DeathStage1 && this->deathTimer >= 8 && limbIndex == POSISTERS_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)++, gPoSistersBurnBodyDL);
+ gSPDisplayList((*gfx)++, gPoeSistersBurnBodyDL);
}
- if (limbIndex == POSISTERS_LIMB_TORCH) {
- if (this->poSisterFlags & POSISTERS_FLAG_UPDATE_FIRES) {
+ if (limbIndex == POE_SISTERS_LIMB_TORCH) {
+ if (this->poSisterFlags & POE_SISTERS_FLAG_UPDATE_FIRES) {
for (end = this->fireCount - 1; end > 0; end--) {
this->firePos[end] = this->firePos[end - 1];
}
@@ -1163,7 +1170,7 @@ void EnPoSisters_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s
if (this->fireCount > 0) {
Color_RGBA8* flameColor = &sPoSisterFlameColors[this->type];
- brightness = Rand_ZeroFloat(0.3f) + 0.7f; // flickering torch light level
+ brightness = Rand_ZeroFloat(0.3f) + 0.7f; // Flickering torch light level
if (this->actionFunc == EnPoSisters_DeathStage2) {
Lights_PointNoGlowSetInfo(&this->lightInfo, this->firePos[0].x, this->firePos[0].y + 15.0f,
@@ -1178,7 +1185,7 @@ void EnPoSisters_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s
Lights_PointSetColorAndRadius(&this->lightInfo, 0, 0, 0, 0);
}
- if (!(this->poSisterFlags & POSISTERS_FLAG_DRAW_TORCH)) {
+ if (!(this->poSisterFlags & POE_SISTERS_FLAG_DRAW_TORCH)) {
Matrix_Get(&this->mtxf);
}
}
@@ -1202,23 +1209,23 @@ void EnPoSisters_Draw(Actor* thisx, PlayState* play) {
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);
- gSPSegment(POLY_OPA_DISP++, 0x09, D_801AEFA0); // empty
+ gSPSegment(POLY_OPA_DISP++, 0x09, D_801AEFA0); // Empty DL
POLY_OPA_DISP =
SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnPoSisters_OverrideLimbDraw,
EnPoSisters_PostLimbDraw, &this->actor, POLY_OPA_DISP);
} else {
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, this->color.a);
- gSPSegment(POLY_XLU_DISP++, 0x09, D_801AEF88); // xlu only DL
+ gSPSegment(POLY_XLU_DISP++, 0x09, D_801AEF88); // XLU only DL
POLY_XLU_DISP =
SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnPoSisters_OverrideLimbDraw,
EnPoSisters_PostLimbDraw, &this->actor, POLY_XLU_DISP);
}
- if (!(this->poSisterFlags & POSISTERS_FLAG_DRAW_TORCH)) {
+ if (!(this->poSisterFlags & POE_SISTERS_FLAG_DRAW_TORCH)) {
Matrix_Put(&this->mtxf);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_OPA_DISP++, gPoSistersDrawTorchDL);
+ gSPDisplayList(POLY_OPA_DISP++, gPoeSistersDrawTorchDL);
}
gSPSegment(
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 368ad9da1..cfb8a1697 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
@@ -8,24 +8,24 @@ struct EnPoSisters;
typedef void (*EnPoSistersActionFunc)(struct EnPoSisters*, PlayState*);
-#define ENPOSISTERS_GET_OBSERVER_FLAG(thisx) ((thisx)->params & 0x1000)
-#define ENPOSISTERS_GET_MEG_CLONE_ID(thisx) (((thisx)->params >> 0xA) & 3)
-#define ENPOSISTERS_GET_TYPE(thisx) (((thisx)->params >> 8) & 3)
+#define POE_SISTERS_GET_OBSERVER_FLAG(thisx) ((thisx)->params & 0x1000)
+#define POE_SISTERS_GET_MEG_CLONE_ID(thisx) (((thisx)->params >> 0xA) & 3)
+#define POE_SISTERS_GET_TYPE(thisx) (((thisx)->params >> 8) & 3)
-#define ENPOSISTERS_PARAMS(observerFlag, megClone, type) (((observerFlag) << 0xC) | ((megClone & 3) << 0xA) | ((type & 3) << 8))
+#define POE_SISTERS_PARAMS(observerFlag, megClone, type) (((observerFlag) << 0xC) | ((megClone & 3) << 0xA) | ((type & 3) << 8))
typedef enum {
- /* 0 */ POSISTER_TYPE_MEG, // purple
- /* 1 */ POSISTER_TYPE_JO, // red
- /* 2 */ POSISTER_TYPE_BETH, // blue
- /* 3 */ POSISTER_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 */ POSISTER_MEG_REAL,
- /* 1 */ POSISTER_MEG_CLONE1,
- /* 2 */ POSISTER_MEG_CLONE2,
- /* 3 */ POSISTER_MEG_CLONE3,
+ /* 0 */ POE_SISTERS_MEG_REAL,
+ /* 1 */ POE_SISTERS_MEG_CLONE1,
+ /* 2 */ POE_SISTERS_MEG_CLONE2,
+ /* 3 */ POE_SISTERS_MEG_CLONE3,
} EnPoSisterMegCloneID;
typedef struct EnPoSisters {
@@ -54,8 +54,8 @@ typedef struct EnPoSisters {
s16 megAttackTimer; // delay until meg spin attacks player (negative frames counting up to 0)
s16 megClonesRemaining; // positive count of meg clones remaining
};
- /* 0x196 */ Vec3s jointTable[POSISTERS_LIMB_MAX];
- /* 0x1DE */ Vec3s morphTable[POSISTERS_LIMB_MAX];
+ /* 0x196 */ Vec3s jointTable[POE_SISTERS_LIMB_MAX];
+ /* 0x1DE */ Vec3s morphTable[POE_SISTERS_LIMB_MAX];
/* 0x226 */ Color_RGBA8 color;
/* 0x22C */ Vec3f firePos[8];
/* 0x28C */ Vec3f limbPos[8]; // passed to Actor_DrawDamageEffects
@@ -68,6 +68,4 @@ typedef struct EnPoSisters {
/* 0x358 */ MtxF mtxf;
} EnPoSisters; // size = 0x398
-extern const ActorInit En_Po_Sisters_InitVars;
-
#endif // Z_EN_PO_SISTERS_H
diff --git a/src/overlays/actors/ovl_En_Poh/overlay.cfg b/src/overlays/actors/ovl_En_Poh/overlay.cfg
deleted file mode 100644
index d83d8bd2f..000000000
--- a/src/overlays/actors/ovl_En_Poh/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Poh
-z_en_poh.c
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 a3718497c..95bd2d474 100644
--- a/src/overlays/actors/ovl_En_Poh/z_en_poh.c
+++ b/src/overlays/actors/ovl_En_Poh/z_en_poh.c
@@ -46,7 +46,7 @@ void func_80B2E3F8(EnPoh* this, PlayState* play);
void func_80B2F328(Actor* thisx, PlayState* play);
void func_80B2F37C(Actor* thisx, PlayState* play);
-const ActorInit En_Poh_InitVars = {
+ActorInit En_Poh_InitVars = {
ACTOR_EN_POH,
ACTORCAT_ENEMY,
FLAGS,
@@ -167,7 +167,7 @@ void EnPoh_Init(Actor* thisx, PlayState* play) {
255, 255, 255, 0);
SkelAnime_Init(play, &this->skelAnime, &object_po_Skel_0050D0, &object_po_Anim_000A60, this->jointTable,
this->morphTable, 21);
- this->actor.bgCheckFlags |= 0x400;
+ this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_400;
func_80B2D0E8(this);
}
@@ -216,7 +216,7 @@ void func_80B2CA4C(EnPoh* this) {
Animation_PlayLoop(&this->skelAnime, &object_po_Anim_0015B0);
this->unk_18E = Rand_S16Offset(2, 3);
this->actionFunc = func_80B2CAA4;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
void func_80B2CAA4(EnPoh* this, PlayState* play) {
@@ -247,13 +247,13 @@ void func_80B2CB60(EnPoh* this) {
void func_80B2CBBC(EnPoh* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
- Math_StepToF(&this->actor.speedXZ, 1.0f, 0.2f);
+ Math_StepToF(&this->actor.speed, 1.0f, 0.2f);
if (Animation_OnFrame(&this->skelAnime, 0.0f) && (this->unk_18E != 0)) {
this->unk_18E--;
}
- if (Actor_XZDistanceToPoint(&this->actor, &this->actor.home.pos) > 400.0f) {
- this->unk_192 = Actor_YawToPoint(&this->actor, &this->actor.home.pos);
+ if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > 400.0f) {
+ this->unk_192 = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
}
Math_ScaledStepToS(&this->actor.world.rot.y, this->unk_192, 0x71C);
@@ -277,7 +277,7 @@ void func_80B2CD14(EnPoh* this) {
Animation_PlayLoop(&this->skelAnime, &object_po_Anim_000A60);
this->actionFunc = func_80B2CD64;
this->unk_18E = 0;
- this->actor.speedXZ = 2.0f;
+ this->actor.speed = 2.0f;
}
void func_80B2CD64(EnPoh* this, PlayState* play) {
@@ -315,15 +315,15 @@ void func_80B2CD64(EnPoh* this, PlayState* play) {
void func_80B2CEC8(EnPoh* this) {
Animation_MorphToLoop(&this->skelAnime, &object_po_Anim_0001A8, -6.0f);
this->unk_18E = 12;
- this->actor.speedXZ = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_LAUGH);
+ this->actor.speed = 0.0f;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_LAUGH);
this->actionFunc = func_80B2CF28;
}
void func_80B2CF28(EnPoh* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (Animation_OnFrame(&this->skelAnime, 0.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_KANTERA);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_KANTERA);
if (this->unk_18E != 0) {
this->unk_18E--;
}
@@ -333,7 +333,7 @@ void func_80B2CF28(EnPoh* this, PlayState* play) {
if (this->unk_18E >= 10) {
Math_ScaledStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 0xAAA);
} else if (this->unk_18E == 9) {
- this->actor.speedXZ = 5.0f;
+ this->actor.speed = 5.0f;
this->skelAnime.playSpeed = 2.0f;
} else if (this->unk_18E == 0) {
func_80B2CB60(this);
@@ -345,13 +345,13 @@ void func_80B2CFF8(EnPoh* this) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_po_Anim_0004EC, -6.0f);
func_800BE504(&this->actor, &this->colliderCylinder);
this->colliderCylinder.base.acFlags &= ~AC_ON;
- this->actor.speedXZ = 5.0f;
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 16);
+ this->actor.speed = 5.0f;
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 16);
this->actionFunc = func_80B2D07C;
}
void func_80B2D07C(EnPoh* this, PlayState* play) {
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.5f);
+ Math_StepToF(&this->actor.speed, 0.0f, 0.5f);
if (SkelAnime_Update(&this->skelAnime)) {
if (this->actor.colChkInfo.health != 0) {
func_80B2DAD0(this);
@@ -379,13 +379,13 @@ void func_80B2D140(EnPoh* this, PlayState* play) {
}
if ((this->skelAnime.playSpeed < 0.5f) && (this->actor.xzDistToPlayer < 280.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_APPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_APPEAR);
this->skelAnime.playSpeed = 1.0f;
}
}
void func_80B2D2C0(EnPoh* this) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->unk_18E = 0;
this->actor.hintId = TATL_HINT_ID_NONE;
@@ -438,14 +438,14 @@ void func_80B2D300(EnPoh* this, PlayState* play) {
}
if (this->unk_18E == 18) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WIZ_DISAPPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_DISAPPEAR);
}
}
void func_80B2D5DC(EnPoh* this) {
Animation_PlayOnce(&this->skelAnime, &object_po_Anim_000A60);
this->actionFunc = func_80B2D628;
- this->actor.speedXZ = -5.0f;
+ this->actor.speed = -5.0f;
}
void func_80B2D628(EnPoh* this, PlayState* play) {
@@ -454,7 +454,7 @@ void func_80B2D628(EnPoh* this, PlayState* play) {
func_80B2CB60(this);
this->unk_18E = 23;
} else {
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.5f);
+ Math_StepToF(&this->actor.speed, 0.0f, 0.5f);
this->actor.shape.rot.y += 0x1000;
}
}
@@ -463,7 +463,7 @@ void func_80B2D694(EnPoh* this) {
Animation_PlayLoop(&this->skelAnime, &object_po_Anim_0015B0);
this->unk_192 = BINANG_ROT180(this->actor.world.rot.y);
this->actionFunc = func_80B2D6EC;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
void func_80B2D6EC(EnPoh* this, PlayState* play) {
@@ -482,10 +482,10 @@ void func_80B2D6EC(EnPoh* this, PlayState* play) {
void func_80B2D76C(EnPoh* this) {
this->unk_18C = 32;
this->unk_192 = 0x2000;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_DISAPPEAR);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_LAUGH);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_DISAPPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_LAUGH);
this->colliderCylinder.base.acFlags &= ~AC_ON;
this->actionFunc = func_80B2D7D4;
}
@@ -513,9 +513,9 @@ void func_80B2D7D4(EnPoh* this, PlayState* play) {
void func_80B2D924(EnPoh* this) {
this->unk_18C = 0;
this->unk_192 = 0x2000;
- this->actor.speedXZ = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKIDS_APPEAR);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_LAUGH);
+ this->actor.speed = 0.0f;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_APPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_LAUGH);
this->colliderCylinder.base.acFlags &= ~AC_ON;
this->actionFunc = func_80B2D980;
}
@@ -539,7 +539,7 @@ void func_80B2D980(EnPoh* this, PlayState* play) {
void func_80B2DAD0(EnPoh* this) {
Animation_MorphToLoop(&this->skelAnime, &object_po_Anim_0006E0, -5.0f);
- this->actor.speedXZ = 5.0f;
+ this->actor.speed = 5.0f;
this->actor.world.rot.y = BINANG_ROT180(this->actor.shape.rot.y);
this->colliderCylinder.base.acFlags |= AC_ON;
this->unk_18E = 200;
@@ -582,13 +582,13 @@ void func_80B2DC50(EnPoh* this, PlayState* play) {
}
void func_80B2DD2C(EnPoh* this, PlayState* play) {
- if ((this->actor.bgCheckFlags & 1) || (this->actor.floorHeight <= BGCHECK_Y_MIN)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->actor.floorHeight <= BGCHECK_Y_MIN)) {
EffectSsHahen_SpawnBurst(play, &this->actor.world.pos, 6.0f, 0, 1, 1, 15, OBJECT_PO, 10, object_po_DL_002D28);
func_80B2E0B0(this);
}
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, UPDBGCHECKINFO_FLAG_4);
}
void func_80B2DDF8(EnPoh* this, s32 arg1) {
@@ -629,7 +629,7 @@ void func_80B2E0B0(EnPoh* this) {
this->actor.home.pos.y = this->actor.world.pos.y;
this->actor.scale.x = 0.0f;
this->actor.scale.y = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_METAL_BOX_BOUND);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_METAL_BOX_BOUND);
this->actionFunc = func_80B2E180;
}
@@ -653,7 +653,7 @@ void func_80B2E1D8(EnPoh* this) {
void func_80B2E230(EnPoh* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -663,7 +663,7 @@ void func_80B2E230(EnPoh* this, PlayState* play) {
return;
}
- Actor_PickUp(&this->actor, play, GI_MAX, 35.0f, 60.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MAX, 35.0f, 60.0f);
this->actor.world.pos.y = (Math_SinS(this->unk_18D * 0x800) * 5.0f) + this->actor.home.pos.y;
if (this->unk_18D) {
this->unk_18D--;
@@ -680,14 +680,14 @@ void func_80B2E230(EnPoh* this, PlayState* play) {
void func_80B2E3B0(EnPoh* this) {
AudioSfx_StopByPosAndId(&this->actor.projectedPos, NA_SE_EN_PO_BIG_CRY - SFX_FLAG);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_LAUGH);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_LAUGH);
this->actionFunc = func_80B2E3F8;
}
void func_80B2E3F8(EnPoh* this, PlayState* play) {
func_80B2DDF8(this, -13);
if (this->unk_197 == 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -696,9 +696,9 @@ void func_80B2E438(EnPoh* this, PlayState* play) {
this->colliderCylinder.base.acFlags &= ~AC_HIT;
if (!Actor_ApplyDamage(&this->actor)) {
Enemy_StartFinishingBlow(play, &this->actor);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_DEAD);
} else if (this->actor.colChkInfo.damage != 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PO_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_DAMAGE);
}
if (this->actor.colChkInfo.damageEffect != 14) {
@@ -1005,7 +1005,7 @@ void func_80B2F37C(Actor* thisx, PlayState* play) {
gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 170, 255, this->unk_197);
gDPSetEnvColor(POLY_XLU_DISP++, this->unk_194, this->unk_195, this->unk_196, 255);
- Matrix_RotateYF((Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000) * (M_PI / 32768), MTXMODE_APPLY);
+ Matrix_RotateYF(BINANG_TO_RAD(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000), MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, object_po_DL_003850);
diff --git a/src/overlays/actors/ovl_En_Poh/z_en_poh.h b/src/overlays/actors/ovl_En_Poh/z_en_poh.h
index 083b44f3f..b07be6195 100644
--- a/src/overlays/actors/ovl_En_Poh/z_en_poh.h
+++ b/src/overlays/actors/ovl_En_Poh/z_en_poh.h
@@ -37,6 +37,4 @@ typedef struct EnPoh {
/* 0x3D8 */ MtxF unk_3D8;
} EnPoh; // size = 0x418
-extern const ActorInit En_Poh_InitVars;
-
#endif // Z_EN_POH_H
diff --git a/src/overlays/actors/ovl_En_Pp/overlay.cfg b/src/overlays/actors/ovl_En_Pp/overlay.cfg
deleted file mode 100644
index 3cca2c18d..000000000
--- a/src/overlays/actors/ovl_En_Pp/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Pp
-z_en_pp.c
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 5d04b7567..5d1d6935e 100644
--- a/src/overlays/actors/ovl_En_Pp/z_en_pp.c
+++ b/src/overlays/actors/ovl_En_Pp/z_en_pp.c
@@ -115,7 +115,7 @@ static DamageTable sDamageTable = {
/* Powder Keg */ DMG_ENTRY(1, EN_PP_DMGEFF_KNOCK_OFF_MASK),
};
-const ActorInit En_Pp_InitVars = {
+ActorInit En_Pp_InitVars = {
ACTOR_EN_PP,
ACTORCAT_ENEMY,
FLAGS,
@@ -446,27 +446,27 @@ void EnPp_PlaySfxForAnimation(EnPp* this) {
case EN_PP_ANIM_WALK:
case EN_PP_ANIM_TURN_TO_FACE_PLAYER:
if (Animation_OnFrame(&this->skelAnime, 0.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_HIPLOOP_FOOTSTEP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_HIPLOOP_FOOTSTEP);
}
break;
case EN_PP_ANIM_WIND_UP:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_HIPLOOP_FOOT - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_HIPLOOP_FOOT - SFX_FLAG);
break;
case EN_PP_ANIM_CHARGE:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_HIPLOOP_RUN - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_HIPLOOP_RUN - SFX_FLAG);
break;
case EN_PP_ANIM_ATTACK:
if (Animation_OnFrame(&this->skelAnime, 0.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_HIPLOOP_PAUSE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_HIPLOOP_PAUSE);
}
break;
case EN_PP_ANIM_ROAR:
if (Animation_OnFrame(&this->skelAnime, 6.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_HIPLOOP_PAUSE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_HIPLOOP_PAUSE);
}
break;
@@ -537,7 +537,7 @@ void EnPp_Idle(EnPp* this, PlayState* play) {
posToLookAt.x += randPlusMinusPoint5Scaled(50.0f);
posToLookAt.z += randPlusMinusPoint5Scaled(50.0f);
this->targetRotY = Math_Vec3f_Yaw(&this->actor.world.pos, &posToLookAt);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->animIndex != EN_PP_ANIM_IDLE) {
EnPp_ChangeAnim(this, EN_PP_ANIM_IDLE);
}
@@ -561,7 +561,7 @@ void EnPp_Idle(EnPp* this, PlayState* play) {
if ((this->maskBounceRotationalVelocity < 0x64) &&
(fabsf(this->actor.world.rot.y - this->targetRotY) < 100.0f)) {
- Math_ApproachF(&this->actor.speedXZ, 1.0f, 0.3f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 1.0f, 0.3f, 1.0f);
}
Math_SmoothStepToS(&this->actor.world.rot.y, this->targetRotY, 1,
@@ -611,7 +611,7 @@ void EnPp_Charge(EnPp* this, PlayState* play) {
Math_SmoothStepToS(&this->maskBounceRotationalVelocity, 0, 1, 0x1F4, 0);
if (!this->actionVar.isCharging) {
- Math_ApproachZeroF(&this->actor.speedXZ, 0.5f, 1.0f);
+ Math_ApproachZeroF(&this->actor.speed, 0.5f, 1.0f);
if (fabsf(this->actor.world.rot.y - this->targetRotY) < 100.0f) {
if (this->chargesInStraightLines) {
this->actor.world.rot.y = this->targetRotY;
@@ -629,13 +629,13 @@ void EnPp_Charge(EnPp* this, PlayState* play) {
}
} else if (this->animIndex == EN_PP_ANIM_CHARGE) {
if (EnPp_CheckCollision(this, play) != EN_PP_COLLISION_RESULT_OK) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
EnPp_SetupRoar(this);
return;
}
if (!this->chargesInStraightLines) {
- Math_ApproachF(&this->actor.speedXZ, 10.0f, 0.3f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 10.0f, 0.3f, 1.0f);
} else {
Math_ApproachF(&this->actor.world.pos.x, this->targetPos.x, 0.5f,
fabsf(Math_SinS(this->targetRotY) * this->chargeAndBounceSpeed));
@@ -661,9 +661,9 @@ void EnPp_Charge(EnPp* this, PlayState* play) {
return;
} else {
if (EN_PP_GET_TYPE(&this->actor) != EN_PP_TYPE_MASKED) {
- this->actor.speedXZ *= -1.0f;
+ this->actor.speed *= -1.0f;
} else {
- this->actor.speedXZ *= -0.5f;
+ this->actor.speed *= -0.5f;
}
EnPp_SetupRoar(this);
@@ -682,7 +682,7 @@ void EnPp_SetupAttack(EnPp* this) {
EnPp_ChangeAnim(this, EN_PP_ANIM_ATTACK);
this->hornColliderOn = true;
this->action = EN_PP_ACTION_ATTACK;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = EnPp_Attack;
}
@@ -711,7 +711,7 @@ void EnPp_SetupBounced(EnPp* this) {
this->targetPos.x += distanceFromWorldPos.x;
this->targetPos.z += distanceFromWorldPos.z;
EnPp_ChangeAnim(this, EN_PP_ANIM_DAMAGE);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->action = EN_PP_ACTION_BOUNCED;
this->chargeAndBounceSpeed = 14.0f;
this->actionFunc = EnPp_Bounced;
@@ -751,7 +751,7 @@ void EnPp_Roar(EnPp* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (EnPp_CheckCollision(this, play) == EN_PP_COLLISION_RESULT_ABOUT_TO_RUN_OFF_LEDGE) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->chargeAndBounceSpeed = 0.0f;
}
@@ -771,8 +771,8 @@ void EnPp_Roar(EnPp* this, PlayState* play) {
}
}
- Math_ApproachZeroF(&this->actor.speedXZ, 0.5f, 1.0f);
- if ((this->actor.speedXZ > 0.3f) && (this->secondaryTimer == 0)) {
+ Math_ApproachZeroF(&this->actor.speed, 0.5f, 1.0f);
+ if ((this->actor.speed > 0.3f) && (this->secondaryTimer == 0)) {
EnPp_SpawnDust(this, play);
this->secondaryTimer = 3;
}
@@ -793,7 +793,7 @@ void EnPp_SetupJump(EnPp* this) {
this->secondaryTimer = 0;
this->actionVar.hasLandedFromJump = false;
this->timer = this->secondaryTimer;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.velocity.y = 20.0f;
this->actor.gravity = -3.0f;
EnPp_ChangeAnim(this, EN_PP_ANIM_JUMP);
@@ -836,7 +836,7 @@ void EnPp_Jump(EnPp* this, PlayState* play) {
Math_SmoothStepToS(&this->actor.world.rot.y, this->targetRotY, 1, 0x1388, 0);
if (!this->actionVar.hasLandedFromJump) {
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->actionVar.hasLandedFromJump = true;
EnPp_ChangeAnim(this, EN_PP_ANIM_LAND);
}
@@ -853,7 +853,7 @@ void EnPp_SetupStunnedOrFrozen(EnPp* this) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
}
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->action = EN_PP_ACTION_STUNNED_OR_FROZEN;
this->actionFunc = EnPp_StunnedOrFrozen;
}
@@ -914,7 +914,7 @@ void EnPp_SetupDamaged(EnPp* this, PlayState* play) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
}
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
this->secondaryTimer = 0;
EnPp_ChangeAnim(this, EN_PP_ANIM_DAMAGE);
this->targetRotY = this->actor.yawTowardsPlayer + 0x8000;
@@ -922,10 +922,10 @@ void EnPp_SetupDamaged(EnPp* this, PlayState* play) {
if (EnPp_CheckCollision(this, play) == EN_PP_COLLISION_RESULT_ABOUT_TO_RUN_OFF_LEDGE) {
this->damagedVelocity.z = 0.0f;
this->damagedVelocity.x = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_HIPLOOP_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_HIPLOOP_DAMAGE);
this->actionFunc = EnPp_Damaged;
}
@@ -957,7 +957,7 @@ void EnPp_Damaged(EnPp* this, PlayState* play) {
if (EnPp_CheckCollision(this, play) == EN_PP_COLLISION_RESULT_ABOUT_TO_RUN_OFF_LEDGE) {
this->damagedVelocity.z = 0.0f;
this->damagedVelocity.x = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
if ((fabsf(this->actor.home.pos.y - this->actor.world.pos.y) > 100.0f) &&
@@ -998,10 +998,10 @@ void EnPp_SetupDead(EnPp* this, PlayState* play) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
}
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 25);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 25);
Enemy_StartFinishingBlow(play, &this->actor);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 30, NA_SE_EN_HIPLOOP_DEAD);
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->actor.flags &= ~ACTOR_FLAG_1;
this->action = EN_PP_ACTION_DEAD;
this->actionFunc = EnPp_Dead;
@@ -1072,7 +1072,7 @@ void EnPp_Dead(EnPp* this, PlayState* play) {
Item_DropCollectibleRandom(play, NULL, &this->actor.world.pos, 0xE0);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -1096,7 +1096,7 @@ void EnPp_Mask_SetupDetach(EnPp* this, PlayState* play) {
}
this->actor.gravity = 0.0f;
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->actor.flags &= ~ACTOR_FLAG_1;
this->actionVar.maskDetachState = EN_PP_MASK_DETACH_STATE_START;
EnPp_ChangeAnim(this, EN_PP_ANIM_IDLE);
@@ -1117,7 +1117,7 @@ void EnPp_Mask_Detach(EnPp* this, PlayState* play) {
this->maskAccelY = 50.0f;
this->maskVelocity.y = -230.0f;
this->maskVelocity.x = -150.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_HIPLOOP_MASC_OFF);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_HIPLOOP_MASC_OFF);
this->actionVar.maskDetachState = EN_PP_MASK_DETACH_STATE_FALL;
break;
@@ -1150,7 +1150,7 @@ void EnPp_Mask_Detach(EnPp* this, PlayState* play) {
&sMaskFireVelocityAndAccel[i], 70, 0, 2);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
break;
@@ -1172,7 +1172,7 @@ void EnPp_BodyPart_SetupMove(EnPp* this) {
this->deadBodyPartRotationalVelocity.x = (this->deadBodyPartIndex * 0x2E) + 0xFF00;
this->deadBodyPartRotationalVelocity.z = (this->deadBodyPartIndex * 0x2E) + 0xFF00;
if (EN_PP_GET_TYPE(&this->actor) != EN_PP_TYPE_BODY_PART_BODY) {
- this->actor.speedXZ = Rand_ZeroFloat(4.0f) + 4.0f;
+ this->actor.speed = Rand_ZeroFloat(4.0f) + 4.0f;
this->actor.world.rot.y = ((s32)randPlusMinusPoint5Scaled(223.0f) + 0x1999) * this->deadBodyPartIndex;
}
@@ -1224,8 +1224,8 @@ void EnPp_BodyPart_Move(EnPp* this, PlayState* play) {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 50, NA_SE_EV_BOMB_DROP_WATER);
}
- if ((this->timer == 0) || (this->actor.bgCheckFlags & 1)) {
- Actor_MarkForDeath(&this->actor);
+ if ((this->timer == 0) || (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ Actor_Kill(&this->actor);
}
}
@@ -1276,8 +1276,9 @@ void EnPp_UpdateDamage(EnPp* this, PlayState* play) {
(this->drawDmgEffTimer == 0)) {
this->drawDmgEffTimer = 40;
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
- Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA,
+ 40);
EnPp_SetupStunnedOrFrozen(this);
}
return;
@@ -1285,8 +1286,9 @@ void EnPp_UpdateDamage(EnPp* this, PlayState* play) {
if (((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_SFX) &&
(this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) ||
(this->drawDmgEffTimer == 0)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
- Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA,
+ 40);
this->secondaryTimer = 40;
EnPp_SetupStunnedOrFrozen(this);
}
@@ -1295,7 +1297,7 @@ void EnPp_UpdateDamage(EnPp* this, PlayState* play) {
(this->actor.colChkInfo.damageEffect != EN_PP_DMGEFF_JUMP)) {
attackDealsDamage = true;
this->hasBeenDamaged = true;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->actor.colChkInfo.damageEffect == EN_PP_DMGEFF_FIRE) {
this->drawDmgEffTimer = 40;
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
@@ -1323,7 +1325,8 @@ void EnPp_UpdateDamage(EnPp* this, PlayState* play) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.focus.pos.x,
this->actor.focus.pos.y, this->actor.focus.pos.z, 0, 0, 0,
CLEAR_TAG_LARGE_LIGHT_RAYS);
- Actor_SetColorFilter(&this->actor, 0x8000, 255, 0, 25);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_GRAY, 255, COLORFILTER_BUFFLAG_OPA,
+ 25);
this->drawDmgEffTimer = 20;
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
}
@@ -1350,7 +1353,7 @@ void EnPp_UpdateDamage(EnPp* this, PlayState* play) {
this->secondaryTimer = 0;
this->timer = 10;
this->maskBounceRotationalVelocity = 0x20D0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->action == EN_PP_ACTION_CHARGE) {
this->actionVar.isCharging = false;
EnPp_ChangeAnim(this, EN_PP_ANIM_TURN_TO_FACE_PLAYER);
@@ -1359,7 +1362,7 @@ void EnPp_UpdateDamage(EnPp* this, PlayState* play) {
this->targetRotY = this->actor.yawTowardsPlayer;
if (EN_PP_GET_TYPE(&this->actor) == EN_PP_TYPE_MASKED) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_SHIELD_BOUND);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_SHIELD_BOUND);
}
}
}
@@ -1413,7 +1416,7 @@ void EnPp_Update(Actor* thisx, PlayState* play) {
if (this->action != EN_PP_ACTION_BODY_PART_MOVE) {
EnPp_UpdateDamage(this, play);
Actor_SetFocus(&this->actor, 40.0f);
- if ((this->action == EN_PP_ACTION_DEAD) || (this->actor.bgCheckFlags & 1)) {
+ if ((this->action == EN_PP_ACTION_DEAD) || (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
this->actor.world.pos.x += this->damagedVelocity.x;
this->actor.world.pos.z += this->damagedVelocity.z;
Math_ApproachZeroF(&this->damagedVelocity.x, 1.0f, 2.0f);
@@ -1421,7 +1424,9 @@ void EnPp_Update(Actor* thisx, PlayState* play) {
}
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 40.0f, 40.0f, 0x1F);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 40.0f, 40.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 |
+ UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10);
if (this->action != EN_PP_ACTION_BODY_PART_MOVE) {
this->actor.shape.rot.y = this->actor.world.rot.y;
}
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 d181c08de..aabbd9e2e 100644
--- a/src/overlays/actors/ovl_En_Pp/z_en_pp.h
+++ b/src/overlays/actors/ovl_En_Pp/z_en_pp.h
@@ -80,6 +80,4 @@ typedef struct EnPp {
/* 0x5DC */ Vec3f damagedVelocity;
} EnPp; // size = 0x5EC
-extern const ActorInit En_Pp_InitVars;
-
#endif // Z_EN_PP_H
diff --git a/src/overlays/actors/ovl_En_Pr/overlay.cfg b/src/overlays/actors/ovl_En_Pr/overlay.cfg
deleted file mode 100644
index efb1dfb56..000000000
--- a/src/overlays/actors/ovl_En_Pr/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Pr
-z_en_pr.c
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 ec8ab91de..ab47e693f 100644
--- a/src/overlays/actors/ovl_En_Pr/z_en_pr.c
+++ b/src/overlays/actors/ovl_En_Pr/z_en_pr.c
@@ -68,7 +68,7 @@ static DamageTable sDamageTable = {
f32 D_80A338C0[PLAYER_FORM_MAX] = { 30.0f, 30.0f, 30.0f, 15.0f, 15.0f };
-const ActorInit En_Pr_InitVars = {
+ActorInit En_Pr_InitVars = {
ACTOR_EN_PR,
ACTORCAT_ENEMY,
FLAGS,
@@ -241,7 +241,7 @@ void func_80A326F0(EnPr* this) {
func_80A3242C(this, 0);
}
this->unk_206 = 0;
- this->actor.speedXZ = 1.0f;
+ this->actor.speed = 1.0f;
this->actionFunc = func_80A32740;
}
@@ -262,7 +262,7 @@ void func_80A32740(EnPr* this, PlayState* play) {
if (this->unk_2C8 < sqrtf(SQ(this->actor.world.pos.x - this->actor.home.pos.x) +
SQ(this->actor.world.pos.z - this->actor.home.pos.z))) {
func_80A32854(this);
- } else if ((this->unk_20E == 0) && (player->stateFlags1 & 0x8000000)) {
+ } else if ((this->unk_20E == 0) && (player->stateFlags1 & PLAYER_STATE1_8000000)) {
if (sqrtf(SQ(player->actor.world.pos.x - this->actor.home.pos.x) +
SQ(player->actor.world.pos.z - this->actor.home.pos.z)) < this->unk_2C8) {
func_80A32AF8(this);
@@ -298,7 +298,7 @@ void func_80A3295C(EnPr* this) {
void func_80A32984(EnPr* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if ((player->stateFlags1 & 0x8000000) && (this->unk_20E == 0)) {
+ if ((player->stateFlags1 & PLAYER_STATE1_8000000) && (this->unk_20E == 0)) {
this->unk_22C = this->actor.world.rot.y;
func_80A32AF8(this);
} else if (!func_80A325E4(this)) {
@@ -343,19 +343,19 @@ void func_80A32AF8(EnPr* this) {
void func_80A32B20(EnPr* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- this->actor.speedXZ = BREG(57) + 3.0f;
+ this->actor.speed = BREG(57) + 3.0f;
Math_SmoothStepToS(&this->unk_22C, this->actor.yawTowardsPlayer, BREG(49) + 1, BREG(50) + 1000, BREG(51));
- this->unk_2B8 = D_80A338C0[(void)0, gSaveContext.save.playerForm] + player->actor.world.pos.y;
+ this->unk_2B8 = D_80A338C0[GET_PLAYER_FORM] + player->actor.world.pos.y;
func_80A324E0(this, play);
- if (!(player->stateFlags1 & 0x8000000)) {
+ if (!(player->stateFlags1 & PLAYER_STATE1_8000000)) {
this->skelAnime.playSpeed = 1.0f;
- this->actor.speedXZ = 1.0f;
+ this->actor.speed = 1.0f;
func_80A32854(this);
} else if (this->unk_2C8 < sqrtf(SQ(player->actor.world.pos.x - this->actor.home.pos.x) +
SQ(player->actor.world.pos.z - this->actor.home.pos.z))) {
this->skelAnime.playSpeed = 1.0f;
- this->actor.speedXZ = 1.0f;
+ this->actor.speed = 1.0f;
func_80A32854(this);
} else if (!func_80A325E4(this) && (this->actor.xzDistToPlayer < 200.0f) &&
(fabsf(player->actor.world.pos.y - this->actor.world.pos.y) < 80.0f)) {
@@ -375,19 +375,19 @@ void func_80A32CDC(EnPr* this) {
void func_80A32D28(EnPr* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (!(player->stateFlags1 & 0x8000000)) {
+ if (!(player->stateFlags1 & PLAYER_STATE1_8000000)) {
this->skelAnime.playSpeed = 1.0f;
- this->actor.speedXZ = 1.0f;
+ this->actor.speed = 1.0f;
func_80A32854(this);
} else {
Math_SmoothStepToS(&this->unk_22C, this->actor.yawTowardsPlayer, BREG(49) + 1, BREG(50) + 1000, BREG(51));
func_80A325E4(this);
- this->unk_2B8 = D_80A338C0[(void)0, gSaveContext.save.playerForm] + player->actor.world.pos.y;
+ this->unk_2B8 = D_80A338C0[GET_PLAYER_FORM] + player->actor.world.pos.y;
func_80A324E0(this, play);
if (this->unk_2C8 < sqrtf(SQ(player->actor.world.pos.x - this->actor.home.pos.x) +
SQ(player->actor.world.pos.z - this->actor.home.pos.z))) {
this->skelAnime.playSpeed = 1.0f;
- this->actor.speedXZ = 1.0f;
+ this->actor.speed = 1.0f;
func_80A32854(this);
}
}
@@ -396,7 +396,7 @@ void func_80A32D28(EnPr* this, PlayState* play) {
void func_80A32E60(EnPr* this) {
func_80A3242C(this, 4);
this->unk_206 = 6;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = func_80A32EA4;
}
@@ -407,10 +407,10 @@ void func_80A32EA4(EnPr* this, PlayState* play) {
if (this->actor.colChkInfo.health <= 0) {
this->unk_206 = 7;
this->unk_20A = 50;
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->unk_2C4 = 0.0f;
Enemy_StartFinishingBlow(play, &this->actor);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BUBLEWALK_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLEWALK_DEAD);
this->unk_216 = 0;
this->actionFunc = func_80A32F48;
} else {
@@ -445,7 +445,7 @@ void func_80A32F48(EnPr* this, PlayState* play) {
if (this->unk_2D2 != 0) {
Math_SmoothStepToS(&this->unk_2D0, 0, 1, 15, 50);
if (this->unk_2D0 < 2) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
}
@@ -463,15 +463,15 @@ void func_80A33098(EnPr* this, PlayState* play) {
this->actor.focus.pos.z, 0, 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS);
}
- if ((player->stateFlags1 & 0x8000000) && (this->actor.colChkInfo.damageEffect == 5)) {
+ if ((player->stateFlags1 & PLAYER_STATE1_8000000) && (this->actor.colChkInfo.damageEffect == 5)) {
this->drawDmgEffAlpha = 40;
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_MEDIUM;
}
if ((this->unk_206 != 6) && (this->unk_206 != 7)) {
Actor_ApplyDamage(&this->actor);
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BUBLEWALK_DAMAGE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLEWALK_DAMAGE);
func_80A32E60(this);
}
}
@@ -536,7 +536,9 @@ void EnPr_Update(Actor* thisx, PlayState* play) {
}
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 30.0f, 20.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 30.0f, 20.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot);
if (this->unk_206 != 7) {
diff --git a/src/overlays/actors/ovl_En_Pr/z_en_pr.h b/src/overlays/actors/ovl_En_Pr/z_en_pr.h
index 6a5fe8b5a..dfa3081ca 100644
--- a/src/overlays/actors/ovl_En_Pr/z_en_pr.h
+++ b/src/overlays/actors/ovl_En_Pr/z_en_pr.h
@@ -54,6 +54,4 @@ typedef struct EnPr {
/* 0x2FC */ ColliderCylinder collider;
} EnPr; // size = 0x348
-extern const ActorInit En_Pr_InitVars;
-
#endif // Z_EN_PR_H
diff --git a/src/overlays/actors/ovl_En_Pr2/overlay.cfg b/src/overlays/actors/ovl_En_Pr2/overlay.cfg
deleted file mode 100644
index 11a975ed0..000000000
--- a/src/overlays/actors/ovl_En_Pr2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Pr2
-z_en_pr2.c
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 4564c679f..a1c2f3f4d 100644
--- a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c
+++ b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c
@@ -81,7 +81,7 @@ static ColliderCylinderInit sCylinderInit = {
{ 17, 32, -10, { 0, 0, 0 } },
};
-const ActorInit En_Pr2_InitVars = {
+ActorInit En_Pr2_InitVars = {
ACTOR_EN_PR2,
ACTORCAT_ENEMY,
FLAGS,
@@ -160,7 +160,7 @@ void EnPr2_Init(Actor* thisx, PlayState* play) {
}
func_80A745C4(this);
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
} else {
@@ -171,10 +171,12 @@ void EnPr2_Init(Actor* thisx, PlayState* play) {
func_80A751B4(this);
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 20.0f, 20.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 20.0f, 20.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
- if (!(this->actor.bgCheckFlags & 0x60)) {
- Actor_MarkForDeath(&this->actor);
+ if (!(this->actor.bgCheckFlags & (BGCHECKFLAG_WATER | BGCHECKFLAG_WATER_TOUCH))) {
+ Actor_Kill(&this->actor);
}
}
@@ -206,7 +208,7 @@ s32 func_80A7429C(EnPr2* this, PlayState* play) {
return false;
}
- if (!(player->stateFlags1 & 0x8000000)) {
+ if (!(player->stateFlags1 & PLAYER_STATE1_8000000)) {
return false;
} else {
return true;
@@ -267,17 +269,17 @@ void func_80A745FC(EnPr2* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PIRANHA_EXIST - SFX_FLAG);
+ 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) {
- Math_ApproachF(&this->actor.speedXZ, 5.0f, 0.3f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 5.0f, 0.3f, 1.0f);
} else {
- Math_ApproachF(&this->actor.speedXZ, 10.0f, 0.3f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 10.0f, 0.3f, 1.0f);
}
if ((this->path != NULL) && !SubS_CopyPointFromPath(this->path, this->unk_1D0, &this->unk_21C)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
Math_ApproachF(&this->actor.world.pos.y, this->unk_21C.y, 0.3f, 5.0f);
@@ -326,7 +328,7 @@ void func_80A748E8(EnPr2* this, PlayState* play) {
Vec3f sp3C;
Math_ApproachF(&this->unk_204, 0.02f, 0.1f, 0.005f);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PIRANHA_EXIST - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PIRANHA_EXIST - SFX_FLAG);
if (fabsf(this->actor.world.rot.y - this->unk_1EE) < 200.0f) {
sp48 = true;
@@ -334,10 +336,10 @@ void func_80A748E8(EnPr2* this, PlayState* play) {
}
if (this->unk_1F4 != 255) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
Math_SmoothStepToS(&this->unk_1F4, 0, 1, 30, 100);
if (this->unk_1F4 < 2) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else {
switch (this->unk_1E0) {
@@ -356,7 +358,7 @@ void func_80A748E8(EnPr2* this, PlayState* play) {
temp_f12 = player->actor.world.pos.z - this->unk_228.z;
sqrtXZ = sqrtf(SQ(temp_f2) + SQ(temp_f12));
- if (sp48 && (player->stateFlags1 & 0x8000000) && (sqrtXZ < this->unk_208)) {
+ if (sp48 && (player->stateFlags1 & PLAYER_STATE1_8000000) && (sqrtXZ < this->unk_208)) {
sp4C = true;
func_80A74DEC(this, play);
}
@@ -370,7 +372,7 @@ void func_80A748E8(EnPr2* this, PlayState* play) {
sp4C = true;
this->unk_1DC = 0;
Math_Vec3f_Copy(&this->unk_21C, &this->unk_228);
- Math_ApproachF(&this->actor.speedXZ, 3.0f, 0.3f, 0.2f);
+ Math_ApproachF(&this->actor.speed, 3.0f, 0.3f, 0.2f);
}
}
break;
@@ -383,7 +385,7 @@ void func_80A748E8(EnPr2* this, PlayState* play) {
this->unk_1D6 = true;
}
- Math_ApproachZeroF(&this->actor.speedXZ, 0.1f, 0.2f);
+ Math_ApproachZeroF(&this->actor.speed, 0.1f, 0.2f);
if (this->unk_1DA == 1) {
this->unk_1D8 = Rand_S16Offset(100, 100);
@@ -393,12 +395,13 @@ void func_80A748E8(EnPr2* this, PlayState* play) {
Math_Vec3f_Copy(&this->unk_21C, &sp3C);
}
} else {
- Math_ApproachF(&this->actor.speedXZ, 2.0f, 0.3f, 0.2f);
+ Math_ApproachF(&this->actor.speed, 2.0f, 0.3f, 0.2f);
Math_Vec3f_Copy(&sp3C, &this->actor.world.pos);
sp3C.x += Math_SinS(this->actor.world.rot.y) * 20.0f;
sp3C.z += Math_CosS(this->actor.world.rot.y) * 20.0f;
if (fabsf(this->actor.world.rot.y - this->unk_1EE) < 100.0f) {
- if (BgCheck_SphVsFirstPoly(&play->colCtx, &sp3C, 20.0f) || (this->actor.bgCheckFlags & 8)) {
+ if (BgCheck_SphVsFirstPoly(&play->colCtx, &sp3C, 20.0f) ||
+ (this->actor.bgCheckFlags & BGCHECKFLAG_WALL)) {
this->unk_1DC = 0;
this->unk_1F2++;
Math_Vec3f_Copy(&this->unk_21C, &this->unk_228);
@@ -430,7 +433,7 @@ void func_80A74DEC(EnPr2* this, PlayState* play) {
this->unk_1F0 = 0;
func_80A74510(this, 1);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PIRANHA_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PIRANHA_ATTACK);
Math_Vec3f_Copy(&this->unk_21C, &player->actor.world.pos);
this->unk_1EE = Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_21C);
@@ -446,16 +449,16 @@ void func_80A74E90(EnPr2* this, PlayState* play) {
WaterBox* sp40;
Math_ApproachF(&this->unk_204, 0.02f, 0.1f, 0.005f);
- if ((this->unk_1D8 == 0) || !(player->stateFlags1 & 0x8000000) || (this->unk_1E0 == 0)) {
+ if ((this->unk_1D8 == 0) || !(player->stateFlags1 & PLAYER_STATE1_8000000) || (this->unk_1E0 == 0)) {
func_80A74888(this);
return;
}
if (this->unk_1F4 != 255) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
Math_SmoothStepToS(&this->unk_1F4, 0, 1, 30, 100);
if (this->unk_1F4 < 2) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else {
SkelAnime_Update(&this->skelAnime);
@@ -470,7 +473,7 @@ void func_80A74E90(EnPr2* this, PlayState* play) {
}
this->unk_21C.y = player->actor.world.pos.y + 30.0f + this->unk_20C;
- Math_ApproachF(&this->actor.speedXZ, 5.0f, 0.3f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 5.0f, 0.3f, 1.0f);
this->unk_1F0 = 0;
if (this->unk_1E0 == 2) {
@@ -514,7 +517,7 @@ void func_80A74E90(EnPr2* this, PlayState* play) {
void func_80A751B4(EnPr2* this) {
this->unk_1EC = 0;
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->actor.flags &= ~ACTOR_FLAG_1;
if (this->unk_1E0 < 10) {
func_80A74510(this, 2);
@@ -532,10 +535,10 @@ void func_80A751B4(EnPr2* this) {
this->actor.shape.rot.y = this->actor.world.rot.y;
this->actor.shape.rot.z = this->actor.world.rot.z;
this->unk_1D8 = 30;
- this->actor.speedXZ = Rand_ZeroFloat(0.5f);
+ this->actor.speed = Rand_ZeroFloat(0.5f);
this->actor.world.rot.y = randPlusMinusPoint5Scaled(0x8000);
}
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 10);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 10);
this->unk_1D4 = 3;
this->actionFunc = func_80A75310;
}
@@ -558,7 +561,7 @@ void func_80A75310(EnPr2* this, PlayState* play) {
this->actor.world.rot.z, i + 10);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
} else {
@@ -601,7 +604,7 @@ void func_80A75310(EnPr2* this, PlayState* play) {
EffectSsBubble_Spawn(play, &sp64, 0.0f, 5.0f, 5.0f, frame);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
}
@@ -614,8 +617,8 @@ void func_80A755D8(EnPr2* this, PlayState* play) {
Actor_ApplyDamage(&this->actor);
if ((this->actor.colChkInfo.health <= 0) && (this->unk_1D4 != 3)) {
Enemy_StartFinishingBlow(play, &this->actor);
- this->actor.speedXZ = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PIRANHA_DEAD);
+ this->actor.speed = 0.0f;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PIRANHA_DEAD);
if (this->unk_218 >= 0) {
Item_DropCollectibleRandom(play, NULL, &this->actor.world.pos, D_80A75C3C[this->unk_218]);
@@ -627,7 +630,7 @@ void func_80A755D8(EnPr2* this, PlayState* play) {
}
if (this->collider.base.atFlags & AT_BOUNCED) {
- this->actor.speedXZ = -10.0f;
+ this->actor.speed = -10.0f;
}
}
@@ -660,7 +663,9 @@ void EnPr2_Update(Actor* thisx, PlayState* play) {
Actor_SetFocus(&this->actor, 10.0f);
func_80A755D8(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0, 10.0f, 20.0f, 0x1F);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0, 10.0f, 20.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 |
+ UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10);
if (this->unk_1D6) {
s32 i;
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 df5afef4e..617a5cc73 100644
--- a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.h
+++ b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.h
@@ -51,6 +51,4 @@ typedef struct EnPr2 {
/* 0x27C */ ColliderCylinder collider;
} EnPr2; // size = 0x2C8
-extern const ActorInit En_Pr2_InitVars;
-
#endif // Z_EN_PR2_H
diff --git a/src/overlays/actors/ovl_En_Prz/overlay.cfg b/src/overlays/actors/ovl_En_Prz/overlay.cfg
deleted file mode 100644
index dc79492a0..000000000
--- a/src/overlays/actors/ovl_En_Prz/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Prz
-z_en_prz.c
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 e5c611578..e34ffe1f6 100644
--- a/src/overlays/actors/ovl_En_Prz/z_en_prz.c
+++ b/src/overlays/actors/ovl_En_Prz/z_en_prz.c
@@ -82,7 +82,7 @@ static ColliderCylinderInit sCylinderInit = {
{ 10, 10, 0, { 0, 0, 0 } },
};
-const ActorInit En_Prz_InitVars = {
+ActorInit En_Prz_InitVars = {
ACTOR_EN_PRZ,
ACTORCAT_ENEMY,
FLAGS,
@@ -119,7 +119,7 @@ void EnPrz_Init(Actor* thisx, PlayState* play) {
this->unk_1E6 = ENPRZ_GET(&this->actor);
this->actor.shape.yOffset = 500.0f;
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->actor.flags &= ~ACTOR_FLAG_1;
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
@@ -218,7 +218,7 @@ s32 func_80A762C0(EnPrz* this, PlayState* play) {
}
void func_80A76388(EnPrz* this) {
- this->actor.speedXZ = randPlusMinusPoint5Scaled(1.0f) + 4.0f;
+ this->actor.speed = randPlusMinusPoint5Scaled(1.0f) + 4.0f;
func_80A75F18(this, 0);
this->unk_1EA = 1;
this->actionFunc = func_80A763E8;
@@ -234,7 +234,7 @@ void func_80A763E8(EnPrz* this, PlayState* play) {
return;
}
- if ((player->stateFlags1 & 0x8000000) && (this->unk_1F2 == 0)) {
+ if ((player->stateFlags1 & PLAYER_STATE1_8000000) && (this->unk_1F2 == 0)) {
func_80A76748(this);
return;
}
@@ -291,7 +291,7 @@ void func_80A76634(EnPrz* this, PlayState* play) {
if (func_80A762C0(this, play) != 0) {
this->unk_1E4 += 0x1500;
this->unk_1E4 += (s16)Rand_ZeroFloat(5000.0f);
- } else if ((player->stateFlags1 & 0x8000000) && (player->actor.floorHeight < 30.0f)) {
+ } else if ((player->stateFlags1 & PLAYER_STATE1_8000000) && (player->actor.floorHeight < 30.0f)) {
this->actionFunc = func_80A763E8;
} else {
this->unk_1EE = 10;
@@ -302,7 +302,7 @@ void func_80A76634(EnPrz* this, PlayState* play) {
}
void func_80A76748(EnPrz* this) {
- this->actor.speedXZ = randPlusMinusPoint5Scaled(1.0f) + 3.0f;
+ this->actor.speed = randPlusMinusPoint5Scaled(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.speedXZ = randPlusMinusPoint5Scaled(1.0f) + 4.0f;
+ this->actor.speed = randPlusMinusPoint5Scaled(1.0f) + 4.0f;
func_80A76604(this, play);
return;
}
@@ -325,7 +325,7 @@ void func_80A767A8(EnPrz* this, PlayState* play) {
distXZ = sqrtf(SQ(player->actor.world.pos.x - this->actor.parent->home.pos.x) +
SQ(player->actor.world.pos.z - this->actor.parent->home.pos.z));
- if (!(player->stateFlags1 & 0x8000000) || (pr->unk_2C8 < distXZ)) {
+ if (!(player->stateFlags1 & PLAYER_STATE1_8000000) || (pr->unk_2C8 < distXZ)) {
this->unk_1F2 = 100;
this->skelAnime.playSpeed = 1.0f;
func_80A76388(this);
@@ -353,17 +353,17 @@ void func_80A767A8(EnPrz* this, PlayState* play) {
this->unk_1C8 = 1;
}
- this->unk_1D8.y = (player->actor.world.pos.y + D_80A771E0[((void)0, gSaveContext.save.playerForm)]) +
+ this->unk_1D8.y = (player->actor.world.pos.y + D_80A771E0[GET_PLAYER_FORM]) +
randPlusMinusPoint5Scaled((2.0f * this->unk_1E6) + 1.0f);
func_80A76070(this, Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_1D8), play);
}
void func_80A76A1C(EnPrz* this) {
this->unk_1E8 = 0;
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->actor.flags &= ~ACTOR_FLAG_1;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BUBLEWALK_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLEWALK_DEAD);
this->unk_1EE = Rand_S16Offset(100, 30);
this->unk_1FC = 0x4000;
@@ -373,10 +373,10 @@ void func_80A76A1C(EnPrz* this) {
}
this->unk_1FE = this->actor.world.rot.y;
- this->actor.speedXZ = Rand_ZeroFloat(0.5f);
+ this->actor.speed = Rand_ZeroFloat(0.5f);
this->actor.world.rot.y = randPlusMinusPoint5Scaled(0x8000);
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 30);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 30);
this->unk_1EE = 50;
func_80A75F18(this, 0);
this->unk_1EA = 7;
@@ -415,7 +415,7 @@ void func_80A76B14(EnPrz* this, PlayState* play) {
EffectSsBubble_Spawn(play, &sp6C, 0.0f, 5.0f, 5.0f, Rand_ZeroFloat(0.03f) + 0.07f);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
}
@@ -441,7 +441,9 @@ void EnPrz_Update(Actor* thisx, PlayState* play) {
}
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 10.0f, 10.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 10.0f, 10.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
if (this->unk_1EA != 7) {
Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot);
diff --git a/src/overlays/actors/ovl_En_Prz/z_en_prz.h b/src/overlays/actors/ovl_En_Prz/z_en_prz.h
index 75087c9bc..db91c7c03 100644
--- a/src/overlays/actors/ovl_En_Prz/z_en_prz.h
+++ b/src/overlays/actors/ovl_En_Prz/z_en_prz.h
@@ -42,6 +42,4 @@ typedef struct EnPrz {
/* 0x224 */ ColliderCylinder collider;
} EnPrz; // size = 0x270
-extern const ActorInit En_Prz_InitVars;
-
#endif // Z_EN_PRZ_H
diff --git a/src/overlays/actors/ovl_En_Pst/overlay.cfg b/src/overlays/actors/ovl_En_Pst/overlay.cfg
deleted file mode 100644
index 857d2ee7e..000000000
--- a/src/overlays/actors/ovl_En_Pst/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Pst
-z_en_pst.c
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 78458e062..cef354c70 100644
--- a/src/overlays/actors/ovl_En_Pst/z_en_pst.c
+++ b/src/overlays/actors/ovl_En_Pst/z_en_pst.c
@@ -118,7 +118,7 @@ s32 D_80B2C488[] = { 0x2C27A40C, 0x10000000 };
s32 D_80B2C490[] = { 0x2C27850C, 0x10000000 };
-const ActorInit En_Pst_InitVars = {
+ActorInit En_Pst_InitVars = {
ACTOR_EN_PST,
ACTORCAT_PROP,
FLAGS,
@@ -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 gSaveContext.save.weekEventReg[27] & 0x2;
+ return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_02);
case POSTBOX_NORTH_CLOCKTOWN:
- return gSaveContext.save.weekEventReg[27] & 0x4;
+ return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_04);
case POSTBOX_EAST_UPPER_CLOCKTOWN:
- return gSaveContext.save.weekEventReg[27] & 0x8;
+ return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_08);
case POSTBOX_EAST_LOWER_CLOCKTOWN:
- return gSaveContext.save.weekEventReg[27] & 0x10;
+ return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_10);
case POSTBOX_SOUTH_LOWER_CLOCKTOWN:
- return gSaveContext.save.weekEventReg[27] & 0x20;
+ return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_20);
default:
return false;
}
@@ -179,22 +179,22 @@ s32 EnPst_HandleLetterDay1(EnPst* this) {
s32 EnPst_HandleLetterDay2(EnPst* this) {
switch (this->actor.params) {
case POSTBOX_SOUTH_UPPER_CLOCKTOWN:
- return gSaveContext.save.weekEventReg[27] & 0x40;
+ return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_40);
case POSTBOX_NORTH_CLOCKTOWN:
- return gSaveContext.save.weekEventReg[27] & 0x80;
+ return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_80);
case POSTBOX_EAST_UPPER_CLOCKTOWN:
- return gSaveContext.save.weekEventReg[28] & 0x1;
+ return CHECK_WEEKEVENTREG(WEEKEVENTREG_28_01);
case POSTBOX_EAST_LOWER_CLOCKTOWN:
- return gSaveContext.save.weekEventReg[28] & 0x2;
+ return CHECK_WEEKEVENTREG(WEEKEVENTREG_28_02);
case POSTBOX_SOUTH_LOWER_CLOCKTOWN:
- return gSaveContext.save.weekEventReg[28] & 0x4;
+ return CHECK_WEEKEVENTREG(WEEKEVENTREG_28_04);
default:
return false;
}
}
s32 EnPst_ChooseBehaviour(Actor* thisx, PlayState* play) {
- s32 itemActionParam = 0;
+ PlayerItemAction itemAction = PLAYER_IA_NONE;
s32 scriptBranch = 0;
EnPst* this = THIS;
@@ -205,17 +205,16 @@ s32 EnPst_ChooseBehaviour(Actor* thisx, PlayState* play) {
case TEXT_STATE_5:
if (Message_ShouldAdvance(play)) {
case TEXT_STATE_16:
- itemActionParam = func_80123810(play);
+ itemAction = func_80123810(play);
scriptBranch = 0;
- if ((itemActionParam == PLAYER_AP_LETTER_TO_KAFEI) ||
- (itemActionParam == PLAYER_AP_LETTER_MAMA)) {
- this->exchangeItemId = itemActionParam;
+ if ((itemAction == PLAYER_IA_LETTER_TO_KAFEI) || (itemAction == PLAYER_IA_LETTER_MAMA)) {
+ this->exchangeItemId = itemAction;
this->behaviour++;
scriptBranch = 1;
- } else if (itemActionParam < PLAYER_AP_NONE) {
+ } else if (itemAction <= PLAYER_IA_MINUS1) {
this->behaviour++;
scriptBranch = 3;
- } else if (itemActionParam != PLAYER_AP_NONE) {
+ } else if (itemAction != PLAYER_IA_NONE) {
this->behaviour++;
scriptBranch = 2;
}
@@ -224,7 +223,7 @@ s32 EnPst_ChooseBehaviour(Actor* thisx, PlayState* play) {
}
break;
case POSTBOX_BEHAVIOUR_TAKE_ITEM:
- if (this->exchangeItemId == PLAYER_AP_LETTER_TO_KAFEI) {
+ if (this->exchangeItemId == PLAYER_IA_LETTER_TO_KAFEI) {
scriptBranch = 1;
}
break;
@@ -253,7 +252,7 @@ s32* EnPst_GetMsgEventScript(EnPst* this, PlayState* play) {
return NULL;
}
} else if (this->stateFlags & 0x20) {
- if (this->exchangeItemId == PLAYER_AP_LETTER_MAMA) {
+ if (this->exchangeItemId == PLAYER_IA_LETTER_MAMA) {
return D_80B2C488;
} else {
return D_80B2C490;
@@ -284,10 +283,10 @@ s32 EnPst_CheckTalk(EnPst* this, PlayState* play) {
if (this->stateFlags & 7) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->stateFlags &= ~0x30;
- if (player->exchangeItemId == PLAYER_AP_LETTER_TO_KAFEI) {
+ if (player->exchangeItemId == PLAYER_IA_LETTER_TO_KAFEI) {
this->stateFlags |= 0x10;
this->exchangeItemId = player->exchangeItemId;
- } else if (player->exchangeItemId != PLAYER_AP_NONE) {
+ } else if (player->exchangeItemId != PLAYER_IA_NONE) {
this->stateFlags |= 0x20;
this->exchangeItemId = player->exchangeItemId;
}
@@ -358,19 +357,19 @@ void EnPst_Talk(EnPst* this, PlayState* play) {
if (EnPst_HandleLetterDay1(this) != this->isLetterToKafeiDeposited) {
switch (gSaveContext.save.day) {
case 1:
- gSaveContext.save.weekEventReg[91] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_91_04);
break;
case 2:
if (EnPst_HandleLetterDay2(this)) {
- gSaveContext.save.weekEventReg[91] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_91_08);
} else {
- gSaveContext.save.weekEventReg[91] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_91_04);
}
break;
default:
- gSaveContext.save.weekEventReg[91] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_91_08);
break;
}
}
@@ -394,7 +393,7 @@ void EnPst_Init(Actor* thisx, PlayState* play) {
this->actor.targetMode = 0;
Actor_SetScale(&this->actor, 0.02f);
this->actionFunc = EnPst_FollowSchedule;
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
}
void EnPst_Destroy(Actor* thisx, PlayState* play) {
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 1f85a1dec..6051924da 100644
--- a/src/overlays/actors/ovl_En_Pst/z_en_pst.h
+++ b/src/overlays/actors/ovl_En_Pst/z_en_pst.h
@@ -36,6 +36,4 @@ typedef struct EnPst {
/* 0x21C */ s32 isLetterToKafeiDeposited;
} EnPst; // size = 0x220
-extern const ActorInit En_Pst_InitVars;
-
#endif // Z_EN_PST_H
diff --git a/src/overlays/actors/ovl_En_Racedog/overlay.cfg b/src/overlays/actors/ovl_En_Racedog/overlay.cfg
deleted file mode 100644
index 6461b9ff5..000000000
--- a/src/overlays/actors/ovl_En_Racedog/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Racedog
-z_en_racedog.c
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 3190e3e36..3ffde38cd 100644
--- a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c
+++ b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c
@@ -15,6 +15,8 @@
#define THIS ((EnRacedog*)thisx)
+//! TODO: this file require macros for its uses of weekEventReg
+
void EnRacedog_Init(Actor* thisx, PlayState* play);
void EnRacedog_Destroy(Actor* thisx, PlayState* play);
void EnRacedog_Update(Actor* thisx, PlayState* play);
@@ -69,7 +71,7 @@ typedef struct {
s16 textId; // Used to determine the dog's condition
} RaceDogInfo;
-const ActorInit En_Racedog_InitVars = {
+ActorInit En_Racedog_InitVars = {
ACTOR_EN_RACEDOG,
ACTORCAT_NPC,
FLAGS,
@@ -257,7 +259,7 @@ void EnRacedog_UpdateCollision(EnRacedog* this, PlayState* play) {
this->collider.dim.pos.y = this->actor.world.pos.y;
this->collider.dim.pos.z = this->actor.world.pos.z;
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
- Actor_UpdateBgCheckInfo(play, &this->actor, 26.0f, 10.0f, 0.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 26.0f, 10.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
}
/**
@@ -286,7 +288,7 @@ s16 EnRacedog_GetYRotation(Path* path, s32 pointIndex, Vec3f* pos, f32* distSQ)
}
*distSQ = SQ(diffX) + SQ(diffZ);
- return RADF_TO_BINANG(Math_Acot2F(diffZRand, diffXRand));
+ return RAD_TO_BINANG(Math_Atan2F_XY(diffZRand, diffXRand));
}
void EnRacedog_GetFloorRot(EnRacedog* this, Vec3f* floorRot) {
@@ -297,7 +299,7 @@ void EnRacedog_GetFloorRot(EnRacedog* this, Vec3f* floorRot) {
ny = COLPOLY_GET_NORMAL(this->actor.floorPoly->normal.y);
nz = COLPOLY_GET_NORMAL(this->actor.floorPoly->normal.z);
- floorRot->x = -Math_Acot2F(1.0f, -nz * ny);
+ floorRot->x = -Math_Atan2F_XY(1.0f, -nz * ny);
}
}
@@ -318,7 +320,7 @@ void EnRacedog_Init(Actor* thisx, PlayState* play) {
if (ENRACEDOG_GET_INDEX(&this->actor) < 14) {
this->index = ENRACEDOG_GET_INDEX(&this->actor);
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
this->selectionArrowGreenPrimColor = 255;
@@ -391,7 +393,7 @@ void EnRacedog_Race(EnRacedog* this, PlayState* play) {
this->collider.dim.radius = 15;
if (this->path != NULL) {
yRotation = EnRacedog_GetYRotation(this->path, this->currentPoint, &this->actor.world.pos, &distSq);
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
yRotation = this->actor.wallYaw;
}
@@ -441,9 +443,10 @@ void EnRacedog_UpdateTextId(EnRacedog* this) {
// range of 0x3539 to 0x3546.
if (this->index % 2) {
sDogInfo[this->index].textId =
- (((gSaveContext.save.weekEventReg[42 + (this->index / 2)]) & 0xF0) >> 4) + 0x3539;
+ (((gSaveContext.save.saveInfo.weekEventReg[42 + (this->index / 2)]) & 0xF0) >> 4) + 0x3539;
} else {
- sDogInfo[this->index].textId = ((gSaveContext.save.weekEventReg[42 + (this->index / 2)]) & 0x0F) + 0x3539;
+ sDogInfo[this->index].textId =
+ ((gSaveContext.save.saveInfo.weekEventReg[42 + (this->index / 2)]) & 0x0F) + 0x3539;
}
// As a sanity check, this makes sure the text ID is something in the expected range of 0x3539 to 0x3546.
@@ -513,16 +516,16 @@ void EnRacedog_UpdateSpeed(EnRacedog* this) {
this->actor.shape.rot.y = this->actor.world.rot.y;
}
- Math_ApproachF(&this->actor.speedXZ, this->targetSpeed, 0.5f, 3.0f);
+ Math_ApproachF(&this->actor.speed, this->targetSpeed, 0.5f, 3.0f);
// The dog that the player has selected has a slightly higher max speed than the other dogs.
if (this->index == this->selectedDogIndex) {
- if (this->actor.speedXZ > 7.5f) {
- this->actor.speedXZ = 7.5f;
+ if (this->actor.speed > 7.5f) {
+ this->actor.speed = 7.5f;
}
} else {
- if (this->actor.speedXZ > 7.0f) {
- this->actor.speedXZ = 7.0f;
+ if (this->actor.speed > 7.0f) {
+ this->actor.speed = 7.0f;
}
}
}
@@ -584,7 +587,7 @@ void EnRacedog_CheckForFinish(EnRacedog* this) {
this->raceStatus == RACEDOG_RACE_STATUS_AFTER_POINT_11) {
sNumberOfDogsFinished++;
if (sNumberOfDogsFinished == 1) {
- Audio_QueueSeqCmd(NA_BGM_HORSE_GOAL | 0x8000);
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_HORSE_GOAL | SEQ_FLAG_ASYNC);
play_sound(NA_SE_SY_START_SHOT);
}
@@ -600,7 +603,7 @@ void EnRacedog_CheckForFinish(EnRacedog* this) {
* to normal speed otherwise.
*/
void EnRacedog_UpdateRunAnimationPlaySpeed(EnRacedog* this) {
- if (this->actor.speedXZ < 3.0f) {
+ if (this->actor.speed < 3.0f) {
sAnimationInfo[RACEDOG_ANIM_RUN].playSpeed = 0.9f;
} else {
sAnimationInfo[RACEDOG_ANIM_RUN].playSpeed = 1.0f;
@@ -658,7 +661,7 @@ s32 EnRacedog_IsOverFinishLine(EnRacedog* this, Vec2f* finishLineCoordinates) {
void EnRacedog_SpawnFloorDustRing(EnRacedog* this, PlayState* play) {
s16 curFrame = this->skelAnime.curFrame;
- s16 mod = (this->actor.speedXZ > 6.0f) ? 2 : 3;
+ s16 mod = (this->actor.speed > 6.0f) ? 2 : 3;
Vec3f pos;
if (((this->index + curFrame) % mod) == 0) {
@@ -673,7 +676,7 @@ void EnRacedog_PlaySfxWalk(EnRacedog* this) {
s16 curFrame = this->skelAnime.curFrame;
if ((curFrame == 1) || (curFrame == 7)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_MONKEY_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_MONKEY_WALK);
}
}
@@ -699,7 +702,7 @@ void EnRacedog_Update(Actor* thisx, PlayState* play) {
}
}
- if (!(this->actor.bgCheckFlags & 1)) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
this->skelAnime.curFrame = 0.0f;
}
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 b0b40be64..9d49ea4c2 100644
--- a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.h
+++ b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.h
@@ -51,6 +51,4 @@ typedef struct EnRacedog {
/* 0x2C4 */ f32 selectionArrowScale;
} EnRacedog; // size = 0x2C8
-extern const ActorInit En_Racedog_InitVars;
-
#endif // Z_EN_RACEDOG_H
diff --git a/src/overlays/actors/ovl_En_Raf/overlay.cfg b/src/overlays/actors/ovl_En_Raf/overlay.cfg
deleted file mode 100644
index 086e64a72..000000000
--- a/src/overlays/actors/ovl_En_Raf/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Raf
-z_en_raf.c
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 a3d91bba9..6a3f1af5a 100644
--- a/src/overlays/actors/ovl_En_Raf/z_en_raf.c
+++ b/src/overlays/actors/ovl_En_Raf/z_en_raf.c
@@ -6,7 +6,7 @@
#include "z_en_raf.h"
-#define FLAGS (ACTOR_FLAG_8000000)
+#define FLAGS (ACTOR_FLAG_CANT_LOCK_ON)
#define THIS ((EnRaf*)thisx)
@@ -67,7 +67,7 @@ typedef enum {
/* 3 */ EN_RAF_PETAL_SCALE_TYPE_IDLE_OR_THROW
} EnRafPetalScaleType;
-const ActorInit En_Raf_InitVars = {
+ActorInit En_Raf_InitVars = {
ACTOR_EN_RAF,
ACTORCAT_PROP,
FLAGS,
@@ -235,8 +235,8 @@ void EnRaf_Init(Actor* thisx, PlayState* play) {
}
if (((this->switchFlag >= 0) || (this->mainType == EN_RAF_TYPE_DORMANT) ||
- (gSaveContext.save.weekEventReg[12] & 1)) &&
- ((Flags_GetSwitch(play, this->switchFlag)) || (this->mainType == EN_RAF_TYPE_DORMANT))) {
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_12_01)) &&
+ (Flags_GetSwitch(play, this->switchFlag) || (this->mainType == EN_RAF_TYPE_DORMANT))) {
s32 i;
for (i = CARNIVOROUS_LILY_PAD_LIMB_TRAP_1_LOWER_SEGMENT; i <= CARNIVOROUS_LILY_PAD_LIMB_TRAP_3_UPPER_SEGMENT;
@@ -310,7 +310,7 @@ void EnRaf_Idle(EnRaf* this, PlayState* play) {
if (this->timer == 0) {
if ((player->transformation != PLAYER_FORM_DEKU) &&
(this->dyna.actor.xzDistToPlayer < (BREG(48) + 80.0f) && (player->invincibilityTimer == 0) &&
- DynaPolyActor_IsInRidingMovingState(&this->dyna) && !(player->stateFlags1 & 0x8000000) &&
+ DynaPolyActor_IsPlayerOnTop(&this->dyna) && !(player->stateFlags1 & PLAYER_STATE1_8000000) &&
play->grabPlayer(play, player))) {
player->actor.parent = &this->dyna.actor;
this->grabTarget = EN_RAF_GRAB_TARGET_PLAYER;
@@ -343,7 +343,7 @@ void EnRaf_Idle(EnRaf* this, PlayState* play) {
zDiff = explosive->world.pos.z - this->dyna.actor.world.pos.z;
if ((fabsf(xDiff) < 80.0f) && (fabsf(yDiff) < 30.0f) && (fabsf(zDiff) < 80.0f) &&
(explosive->update != NULL) && (explosive->velocity.y != 0.0f)) {
- Actor_MarkForDeath(explosive);
+ Actor_Kill(explosive);
this->grabTarget = EN_RAF_GRAB_TARGET_EXPLOSIVE;
this->collider.dim.radius = 30;
this->collider.dim.height = 90;
@@ -360,7 +360,7 @@ void EnRaf_Idle(EnRaf* this, PlayState* play) {
void EnRaf_SetupGrab(EnRaf* this) {
EnRaf_ChangeAnim(this, EN_RAF_ANIM_CLOSE);
this->petalScaleType = EN_RAF_PETAL_SCALE_TYPE_GRAB;
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EN_SUISEN_DRINK);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EN_SUISEN_DRINK);
this->action = EN_RAF_ACTION_GRAB;
this->actionFunc = EnRaf_Grab;
}
@@ -372,7 +372,7 @@ void EnRaf_Grab(EnRaf* this, PlayState* play) {
Player* player = GET_PLAYER(play);
f32 curFrame = this->skelAnime.curFrame;
- if ((this->grabTarget != EN_RAF_GRAB_TARGET_EXPLOSIVE) && (player->stateFlags2 & 0x80) &&
+ if ((this->grabTarget != EN_RAF_GRAB_TARGET_EXPLOSIVE) && (player->stateFlags2 & PLAYER_STATE2_80) &&
(&this->dyna.actor == player->actor.parent)) {
Math_ApproachF(&player->actor.world.pos.x, this->dyna.actor.world.pos.x, 0.3f, 10.0f);
Math_ApproachF(&player->actor.world.pos.y, this->dyna.actor.world.pos.y, 0.3f, 10.0f);
@@ -414,7 +414,7 @@ void EnRaf_Chew(EnRaf* this, PlayState* play) {
targetChewScale = (BREG(51) / 100.0f) + 0.2f;
Math_ApproachF(&this->chewScale, targetChewScale, 0.2f, 0.03f);
- if ((player->stateFlags2 & 0x80) && (this->grabTarget != EN_RAF_GRAB_TARGET_EXPLOSIVE) &&
+ if ((player->stateFlags2 & PLAYER_STATE2_80) && (this->grabTarget != EN_RAF_GRAB_TARGET_EXPLOSIVE) &&
(&this->dyna.actor == player->actor.parent)) {
Math_ApproachF(&player->actor.world.pos.x, this->dyna.actor.world.pos.x, 0.3f, 10.0f);
Math_ApproachF(&player->actor.world.pos.y, this->dyna.actor.world.pos.y, 0.3f, 10.0f);
@@ -426,13 +426,17 @@ void EnRaf_Chew(EnRaf* this, PlayState* play) {
this->chewCount++;
}
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EN_SUISEN_EAT);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EN_SUISEN_EAT);
switch (this->grabTarget) {
case EN_RAF_GRAB_TARGET_PLAYER:
play->damagePlayer(play, -2);
- func_800B8E58((Player*)this, player->ageProperties->unk_92 + NA_SE_VO_LI_DAMAGE_S);
+
+ //! @bug: This function should only pass Player*: it uses *(this + 0x153), which is meant to be
+ //! player->currentMask, but in this case is padding in `DynaPolyActor`
+ Player_PlaySfx((Player*)&this->dyna.actor,
+ player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_DAMAGE_S);
CollisionCheck_GreenBlood(play, NULL, &player->actor.world.pos);
- if ((this->chewCount > (BREG(53) + 5)) || !(player->stateFlags2 & 0x80)) {
+ if ((this->chewCount > (BREG(53) + 5)) || !(player->stateFlags2 & PLAYER_STATE2_80)) {
player->actor.freezeTimer = 10;
EnRaf_SetupThrow(this, play);
return;
@@ -478,7 +482,7 @@ void EnRaf_Throw(EnRaf* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, 10.0f)) {
player->actor.freezeTimer = 0;
player->actor.parent = NULL;
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EN_SUISEN_THROW);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EN_SUISEN_THROW);
func_800B8D50(play, &this->dyna.actor, BREG(55) + 3.0f, this->playerRotYWhenGrabbed + 0x8000, BREG(56) + 10.0f,
0);
} else if (curFrame < 10.0f) {
@@ -508,8 +512,8 @@ void EnRaf_Explode(EnRaf* this, PlayState* play) {
explosionPos.y += 10.0f;
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, explosionPos.x, explosionPos.y, explosionPos.z, 0, 0, 0,
CLEAR_TAG_SMALL_EXPLOSION);
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_IT_BOMB_EXPLOSION);
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EN_SUISEN_DEAD);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_IT_BOMB_EXPLOSION);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EN_SUISEN_DEAD);
if (this->switchFlag >= 0) {
Flags_SetSwitch(play, this->switchFlag);
}
@@ -700,17 +704,17 @@ void EnRaf_Update(Actor* thisx, PlayState* play) {
DECR(this->timer);
this->actionFunc(this, play);
- if ((this->action == EN_RAF_ACTION_IDLE) && (gSaveContext.save.weekEventReg[12] & 1)) {
+ if ((this->action == EN_RAF_ACTION_IDLE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_12_01)) {
this->petalScaleType = EN_RAF_PETAL_SCALE_TYPE_DEAD;
EnRaf_SetupConvulse(this);
return;
}
- if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
if ((this->heightDiffFromPlayer > -0.1f) && !this->isCurrentlyInRidingMovingState) {
this->heightDiffFromPlayer = -20.0f;
this->isCurrentlyInRidingMovingState = true;
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EN_COMMON_WATER_MID);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EN_COMMON_WATER_MID);
}
} else {
this->isCurrentlyInRidingMovingState = false;
diff --git a/src/overlays/actors/ovl_En_Raf/z_en_raf.h b/src/overlays/actors/ovl_En_Raf/z_en_raf.h
index 831346d38..f4659f48b 100644
--- a/src/overlays/actors/ovl_En_Raf/z_en_raf.h
+++ b/src/overlays/actors/ovl_En_Raf/z_en_raf.h
@@ -64,6 +64,4 @@ typedef struct EnRaf {
/* 0x41C */ EnRafEffect effects[EN_RAF_EFFECT_COUNT];
} EnRaf; // size = 0xAE4
-extern const ActorInit En_Raf_InitVars;
-
#endif // Z_EN_RAF_H
diff --git a/src/overlays/actors/ovl_En_Rail_Skb/overlay.cfg b/src/overlays/actors/ovl_En_Rail_Skb/overlay.cfg
deleted file mode 100644
index df550bd19..000000000
--- a/src/overlays/actors/ovl_En_Rail_Skb/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Rail_Skb
-z_en_rail_skb.c
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 bfb701484..10d654cc7 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
@@ -50,7 +50,7 @@ void func_80B726B4(EnRailSkb* this, PlayState* play);
void func_80B72830(EnRailSkb* this, s16 arg1);
s32 func_80B7285C(EnRailSkb* this);
-const ActorInit En_Rail_Skb_InitVars = {
+ActorInit En_Rail_Skb_InitVars = {
ACTOR_EN_RAIL_SKB,
ACTORCAT_ENEMY,
FLAGS,
@@ -248,7 +248,7 @@ void func_80B70D24(EnRailSkb* this, PlayState* play) {
while (actor != NULL) {
if ((actor->id == ACTOR_OBJ_HAKAISI) && func_80B70B04(this, actor->world.pos)) {
if (Flags_GetSwitch(play, (actor->params & 0xFF00) >> 8)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
this->unk_22C = (ObjHakaisi*)actor;
@@ -256,7 +256,7 @@ void func_80B70D24(EnRailSkb* this, PlayState* play) {
}
actor = actor->next;
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
static InitChainEntry sInitChain[] = {
@@ -277,11 +277,11 @@ void EnRailSkb_Init(Actor* thisx, PlayState* play) {
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
if (Flags_GetSwitch(play, ENRAILSKB_GET_FF(&this->actor))) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
Actor_ProcessInitChain(&this->actor, sInitChain);
- this->actor.speedXZ = 1.6f;
+ this->actor.speed = 1.6f;
this->actor.hintId = TATL_HINT_ID_STALCHILD;
this->unk_3F2 = 0;
this->unk_2E4 = -1;
@@ -296,7 +296,7 @@ void EnRailSkb_Init(Actor* thisx, PlayState* play) {
this->unk_3F8 = 0;
}
- if ((play->sceneId == SCENE_BOTI) && (gSaveContext.sceneLayer == 1) && (play->csCtx.currentCsIndex == 0)) {
+ if ((play->sceneId == SCENE_BOTI) && (gSaveContext.sceneLayer == 1) && (play->csCtx.scriptIndex == 0)) {
this->actor.flags |= ACTOR_FLAG_100000;
}
@@ -334,7 +334,7 @@ void func_80B70FF8(EnRailSkb* this, PlayState* play) {
}
void func_80B710AC(EnRailSkb* this) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
this->actionFunc = func_80B710E4;
}
@@ -345,7 +345,7 @@ void func_80B710E4(EnRailSkb* this, PlayState* play) {
}
void func_80B71114(EnRailSkb* this) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
this->actionFunc = func_80B7114C;
}
@@ -355,9 +355,9 @@ void func_80B7114C(EnRailSkb* this, PlayState* play) {
this->drawDmgEffScale = 0.0f;
this->drawDmgEffAlpha = 0.0f;
if (this->actor.colChkInfo.health != 0) {
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE);
this->unk_402 |= 1;
func_80B712FC(this);
} else {
@@ -379,9 +379,9 @@ void func_80B7123C(EnRailSkb* this, PlayState* play) {
this->drawDmgEffScale = 0.0f;
this->drawDmgEffAlpha = 0.0f;
if (this->actor.colChkInfo.health != 0) {
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE);
this->unk_402 |= 1;
func_80B712FC(this);
} else {
@@ -405,7 +405,7 @@ void func_80B71314(EnRailSkb* this, PlayState* play) {
}
void func_80B71354(EnRailSkb* this) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_ATTACK);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
this->actionFunc = func_80B713A4;
}
@@ -452,7 +452,7 @@ void func_80B7151C(EnRailSkb* this) {
this->actor.colChkInfo.health = 2;
this->unk_402 = 0;
this->actor.flags |= ACTOR_FLAG_1;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_APPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_APPEAR);
this->actor.draw = EnRailSkb_Draw;
this->actor.shape.shadowAlpha = 0;
this->actor.shape.rot.y = this->actor.world.rot.y;
@@ -575,7 +575,7 @@ void func_80B71954(EnRailSkb* this, PlayState* play) {
}
void func_80B71A08(EnRailSkb* this) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_ATTACK);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
this->actionFunc = func_80B71A58;
}
@@ -584,7 +584,7 @@ void func_80B71A58(EnRailSkb* this, PlayState* play) {
s16 sp36 = Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_22C->dyna.actor.world.pos);
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_ATTACK);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
if (this->unk_2E8 < this->unk_22C->dyna.actor.colChkInfo.health) {
this->unk_22C->dyna.actor.colChkInfo.health--;
@@ -625,7 +625,7 @@ void func_80B71BB8(EnRailSkb* this, PlayState* play) {
Math_SmoothStepToS(&this->actor.shape.rot.y,
Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_22C->dyna.actor.world.pos), 1, 0x71C, 0xB6);
- if ((this->actor.bgCheckFlags & 1) && (this->unk_22C->dyna.actor.colChkInfo.health == 0)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->unk_22C->dyna.actor.colChkInfo.health == 0)) {
Actor_MoveWithGravity(&this->actor);
} else {
this->actor.velocity.y += this->actor.gravity;
@@ -634,13 +634,13 @@ void func_80B71BB8(EnRailSkb* this, PlayState* play) {
Math_SmoothStepToF(&this->actor.world.pos.z, this->unk_22C->dyna.actor.world.pos.z, 0.6f, 1.6f, 0.1f);
}
- if (this->actor.bgCheckFlags & 2) {
- Actor_MarkForDeath(&this->actor);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
+ Actor_Kill(&this->actor);
return;
}
- if ((sp34 < 50.0f) && (this->actor.bgCheckFlags & 1)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_ATTACK);
+ if ((sp34 < 50.0f) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_ATTACK);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 9);
this->actor.velocity.y = 10.0f;
@@ -732,7 +732,7 @@ void func_80B71F3C(EnRailSkb* this, PlayState* play) {
Message_StartTextbox(play, 0x13F4, &this->actor);
this->unk_400 = 0x13F4;
} else {
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80B71D8C(this, play, func_80B71650);
}
break;
@@ -744,7 +744,7 @@ void func_80B71F3C(EnRailSkb* this, PlayState* play) {
break;
case 0x13F4:
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80B71D8C(this, play, func_80B718B0);
break;
}
@@ -773,7 +773,7 @@ void func_80B72190(EnRailSkb* this, PlayState* play) {
if ((this->actionFunc != func_80B714D8) &&
(Animation_OnFrame(&this->skelAnime, 8.0f) || Animation_OnFrame(&this->skelAnime, 15.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_WALK);
}
if (this->actor.parent == NULL) {
@@ -984,12 +984,12 @@ void func_80B72970(EnRailSkb* this, PlayState* play) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL;
this->drawDmgEffAlpha = 1.0f;
this->drawDmgEffScale = 0.0f;
- Actor_SetColorFilter(&this->actor, 0, 120, 0, 40);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 120, COLORFILTER_BUFFLAG_OPA, 40);
func_80B710AC(this);
break;
case 1:
- Actor_SetColorFilter(&this->actor, 0, 120, 0, 40);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 120, COLORFILTER_BUFFLAG_OPA, 40);
func_80B710AC(this);
break;
@@ -998,8 +998,8 @@ void func_80B72970(EnRailSkb* this, PlayState* play) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
this->drawDmgEffAlpha = 1.0f;
this->drawDmgEffScale = 0.0f;
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_DAMAGE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
this->unk_402 |= 1;
func_80B712FC(this);
@@ -1007,7 +1007,7 @@ void func_80B72970(EnRailSkb* this, PlayState* play) {
case 3:
if (this->actor.colChkInfo.health != 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE);
this->drawDmgEffTimer = 80;
} else {
this->drawDmgEffTimer = 3;
@@ -1015,7 +1015,7 @@ void func_80B72970(EnRailSkb* this, PlayState* play) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_SFX;
this->drawDmgEffAlpha = 1.0f;
this->drawDmgEffScale = 0.5f;
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
func_80B71114(this);
break;
@@ -1024,8 +1024,8 @@ void func_80B72970(EnRailSkb* this, PlayState* play) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
this->drawDmgEffAlpha = 1.0f;
this->drawDmgEffScale = 0.5f;
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_DAMAGE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
func_80B71228(this);
break;
@@ -1043,8 +1043,8 @@ void func_80B72970(EnRailSkb* this, PlayState* play) {
}
case 13:
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_DAMAGE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
func_80B712FC(this);
break;
@@ -1071,7 +1071,7 @@ void EnRailSkb_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
func_80B72190(this, play);
- Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 30.0f, 60.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 30.0f, 60.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
func_80B72970(this, play);
if ((this->actionFunc != func_80B710E4) && (this->actionFunc != func_80B7114C) &&
diff --git a/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.h b/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.h
index 09d3b4c4c..10c2653c4 100644
--- a/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.h
+++ b/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.h
@@ -43,6 +43,4 @@ typedef struct EnRailSkb {
/* 0x403 */ u8 drawDmgEffType;
} EnRailSkb; // size = 0x404
-extern const ActorInit En_Rail_Skb_InitVars;
-
#endif // Z_EN_RAIL_SKB_H
diff --git a/src/overlays/actors/ovl_En_Railgibud/overlay.cfg b/src/overlays/actors/ovl_En_Railgibud/overlay.cfg
deleted file mode 100644
index 6c055c27c..000000000
--- a/src/overlays/actors/ovl_En_Railgibud/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Railgibud
-z_en_railgibud.c
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 50df4d01c..853dbfd61 100644
--- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c
+++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c
@@ -44,7 +44,7 @@ s32 EnRailgibud_MoveToIdealGrabPositionAndRotation(EnRailgibud* this, PlayState*
void EnRailgibud_CheckIfTalkingToPlayer(EnRailgibud* this, PlayState* play);
void EnRailgibud_MainGibdo_DeadUpdate(Actor* thisx, PlayState* play);
void EnRailgibud_InitCutsceneGibdo(EnRailgibud* this, PlayState* play);
-void EnRailgibud_InitActorActionCommand(EnRailgibud* this);
+void EnRailgibud_InitCueType(EnRailgibud* this);
void EnRailgibud_SetupDoNothing(EnRailgibud* this);
void EnRailgibud_DoNothing(EnRailgibud* this, PlayState* play);
void EnRailgibud_SinkIntoGround(EnRailgibud* this, PlayState* play);
@@ -84,7 +84,7 @@ typedef enum {
/* 2 */ EN_RAILGIBUD_GRAB_RELEASE,
} EnRailgibudGrabState;
-const ActorInit En_Railgibud_InitVars = {
+ActorInit En_Railgibud_InitVars = {
ACTOR_EN_RAILGIBUD,
ACTORCAT_ENEMY,
FLAGS,
@@ -272,8 +272,8 @@ void EnRailgibud_Init(Actor* thisx, PlayState* play) {
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
- if (gSaveContext.save.weekEventReg[14] & 4) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04)) {
+ Actor_Kill(&this->actor);
}
EnRailgibud_SetupWalkInCircles(this);
@@ -286,7 +286,7 @@ void EnRailgibud_Destroy(Actor* thisx, PlayState* play) {
}
void EnRailgibud_SetupWalkInCircles(EnRailgibud* this) {
- this->actor.speedXZ = 0.6f;
+ this->actor.speed = 0.6f;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_WALK);
this->actionFunc = EnRailgibud_WalkInCircles;
}
@@ -350,7 +350,7 @@ void EnRailgibud_AttemptPlayerFreeze(EnRailgibud* this, PlayState* play) {
player->actor.freezeTimer = 60;
Rumble_Request(this->actor.xzDistToPlayer, 255, 20, 150);
func_80123E90(play, &this->actor);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_AIM);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_AIM);
EnRailgibud_SetupWalkToPlayer(this);
}
@@ -359,7 +359,7 @@ void EnRailgibud_AttemptPlayerFreeze(EnRailgibud* this, PlayState* play) {
void EnRailgibud_SetupWalkToPlayer(EnRailgibud* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_WALK);
- this->actor.speedXZ = 0.4f;
+ this->actor.speed = 0.4f;
if (this->actionFunc == EnRailgibud_AttemptPlayerFreeze) {
this->playerStunWaitTimer = 80;
@@ -396,7 +396,7 @@ void EnRailgibud_WalkToPlayer(EnRailgibud* this, PlayState* play) {
this->playerStunWaitTimer = 60;
Rumble_Request(this->actor.xzDistToPlayer, 255, 20, 150);
func_80123E90(play, &this->actor);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_AIM);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_AIM);
} else {
this->playerStunWaitTimer--;
}
@@ -412,9 +412,9 @@ void EnRailgibud_WalkToPlayer(EnRailgibud* this, PlayState* play) {
}
if (Animation_OnFrame(&this->skelAnime, 10.0f) || Animation_OnFrame(&this->skelAnime, 22.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_RIZA_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_RIZA_WALK);
} else if (!(play->gameplayFrames & 95)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_CRY);
}
}
@@ -438,7 +438,7 @@ void EnRailgibud_Grab(EnRailgibud* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) && (inPositionToAttack == true)) {
this->grabState = EN_RAILGIBUD_GRAB_ATTACK;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_GRAB_ATTACK);
- } else if (!(player->stateFlags2 & 0x80)) {
+ } else if (!(player->stateFlags2 & PLAYER_STATE2_80)) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_GRAB_END);
this->actor.flags |= ACTOR_FLAG_1;
this->grabState = EN_RAILGIBUD_GRAB_RELEASE;
@@ -450,9 +450,9 @@ void EnRailgibud_Grab(EnRailgibud* this, PlayState* play) {
if (this->grabDamageTimer == 20) {
s16 requiredScopeTemp;
- damageSfxId = player->ageProperties->unk_92 + NA_SE_VO_LI_DAMAGE_S;
+ damageSfxId = player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_DAMAGE_S;
play->damagePlayer(play, -8);
- func_800B8E58(player, damageSfxId);
+ Player_PlaySfx(player, damageSfxId);
Rumble_Request(this->actor.xzDistToPlayer, 240, 1, 12);
this->grabDamageTimer = 0;
} else {
@@ -460,12 +460,12 @@ void EnRailgibud_Grab(EnRailgibud* this, PlayState* play) {
}
if (Animation_OnFrame(&this->skelAnime, 0.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_ATTACK);
}
- if (!(player->stateFlags2 & 0x80) || (player->unk_B62 != 0)) {
- if ((player->unk_B62 != 0) && (player->stateFlags2 & 0x80)) {
- player->stateFlags2 &= ~0x80;
+ if (!(player->stateFlags2 & PLAYER_STATE2_80) || (player->unk_B62 != 0)) {
+ if ((player->unk_B62 != 0) && (player->stateFlags2 & PLAYER_STATE2_80)) {
+ player->stateFlags2 &= ~PLAYER_STATE2_80;
player->unk_AE8 = 100;
}
@@ -490,14 +490,14 @@ void EnRailgibud_Grab(EnRailgibud* this, PlayState* play) {
void EnRailgibud_SetupGrabFail(EnRailgibud* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_DAMAGE);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_DAMAGE);
- this->actor.speedXZ = -2.0f;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_DAMAGE);
+ this->actor.speed = -2.0f;
this->actionFunc = EnRailgibud_GrabFail;
}
void EnRailgibud_GrabFail(EnRailgibud* this, PlayState* play) {
- if (this->actor.speedXZ < 0.0f) {
- this->actor.speedXZ += 0.15f;
+ if (this->actor.speed < 0.0f) {
+ this->actor.speed += 0.15f;
}
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
@@ -530,18 +530,18 @@ void EnRailgibud_TurnAwayAndShakeHead(EnRailgibud* this, PlayState* play) {
void EnRailgibud_SetupWalkToHome(EnRailgibud* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_WALK);
- this->actor.speedXZ = 0.4f;
+ this->actor.speed = 0.4f;
this->actionFunc = EnRailgibud_WalkToHome;
}
void EnRailgibud_WalkToHome(EnRailgibud* this, PlayState* play) {
Math_SmoothStepToS(&this->headRotation.y, 0, 1, 100, 0);
Math_SmoothStepToS(&this->upperBodyRotation.y, 0, 1, 100, 0);
- if (Actor_XZDistanceToPoint(&this->actor, &this->actor.home.pos) < 5.0f) {
- if (this->actor.speedXZ > 0.2f) {
- this->actor.speedXZ -= 0.2f;
+ if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) < 5.0f) {
+ if (this->actor.speed > 0.2f) {
+ this->actor.speed -= 0.2f;
} else {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 1, 200, 10);
@@ -550,7 +550,8 @@ void EnRailgibud_WalkToHome(EnRailgibud* this, PlayState* play) {
EnRailgibud_SetupWalkInCircles(this);
}
} else {
- Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_YawToPoint(&this->actor, &this->actor.home.pos), 450);
+ Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos),
+ 450);
this->actor.world.rot = this->actor.shape.rot;
}
if (EnRailgibud_PlayerInRangeWithCorrectState(this, play)) {
@@ -563,17 +564,17 @@ void EnRailgibud_WalkToHome(EnRailgibud* this, PlayState* play) {
void EnRailgibud_SetupDamage(EnRailgibud* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_DAMAGE);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_DAMAGE);
this->stunTimer = 0;
this->grabWaitTimer = 0;
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
- this->actor.speedXZ = -2.0f;
+ this->actor.speed = -2.0f;
this->actionFunc = EnRailgibud_Damage;
}
void EnRailgibud_Damage(EnRailgibud* this, PlayState* play) {
- if (this->actor.speedXZ < 0.0f) {
- this->actor.speedXZ += 0.15f;
+ if (this->actor.speed < 0.0f) {
+ this->actor.speed += 0.15f;
}
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
@@ -596,9 +597,9 @@ void EnRailgibud_SetupStunned(EnRailgibud* this) {
this->stunTimer = 10;
if (this->drawDmgEffTimer != 0) {
- Actor_SetColorFilter(&this->actor, 0, 0xC8, 0, 0x28);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 200, COLORFILTER_BUFFLAG_OPA, 40);
} else {
- Actor_SetColorFilter(&this->actor, 0, 0xC8, 0, 0x28);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 200, COLORFILTER_BUFFLAG_OPA, 40);
}
this->actionFunc = EnRailgibud_Stunned;
@@ -621,7 +622,7 @@ void EnRailgibud_Stunned(EnRailgibud* this, PlayState* play) {
void EnRailgibud_SetupDead(EnRailgibud* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_DEATH);
this->actor.flags &= ~ACTOR_FLAG_1;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_DEAD);
this->deathTimer = 0;
this->actionFunc = EnRailgibud_Dead;
}
@@ -630,7 +631,7 @@ void EnRailgibud_Dead(EnRailgibud* this, PlayState* play) {
if (this->deathTimer > 300) {
if (this->actor.shape.shadowAlpha == 0) {
if (this->actor.parent != NULL) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
// Don't delete the "main" Gibdo, since that will break the surviving
// Gibdos' ability to start and stop walking forward. Instead, just
@@ -750,9 +751,10 @@ s32 EnRailgibud_PlayerInRangeWithCorrectState(EnRailgibud* this, PlayState* play
return false;
}
- if ((Actor_DistanceToPoint(&player->actor, &this->actor.home.pos) < 100.0f) &&
- !(player->stateFlags1 & (0x200000 | 0x80000 | 0x40000 | 0x4000 | 0x2000 | 0x80)) &&
- !(player->stateFlags2 & (0x4000 | 0x80))) {
+ if (Actor_WorldDistXYZToPoint(&player->actor, &this->actor.home.pos) < 100.0f &&
+ !(player->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_40000 |
+ PLAYER_STATE1_80000 | PLAYER_STATE1_200000)) &&
+ !(player->stateFlags2 & (PLAYER_STATE2_80 | PLAYER_STATE2_4000))) {
return true;
}
@@ -767,7 +769,7 @@ s32 EnRailgibud_PlayerInRangeWithCorrectState(EnRailgibud* this, PlayState* play
s32 EnRailgibud_PlayerOutOfRange(EnRailgibud* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (Actor_DistanceToPoint(&player->actor, &this->actor.home.pos) >= 100.0f) {
+ if (Actor_WorldDistXYZToPoint(&player->actor, &this->actor.home.pos) >= 100.0f) {
return true;
}
@@ -786,7 +788,7 @@ void EnRailgibud_UpdateDamage(EnRailgibud* this, PlayState* play) {
switch (this->actor.colChkInfo.damageEffect) {
case EN_RAILGIBUD_DMGEFF_DAMAGE:
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
if (player->unk_ADC != 0) {
this->unk_405 = player->unk_ADD;
}
@@ -807,7 +809,7 @@ void EnRailgibud_UpdateDamage(EnRailgibud* this, PlayState* play) {
break;
case EN_RAILGIBUD_DMGEFF_FIRE_ARROW:
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
if (this->actor.colChkInfo.health == 0) {
EnRailgibud_SetupDead(this);
} else {
@@ -819,7 +821,7 @@ void EnRailgibud_UpdateDamage(EnRailgibud* this, PlayState* play) {
break;
case EN_RAILGIBUD_DMGEFF_LIGHT_ARROW:
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
if (this->actor.colChkInfo.health == 0) {
EnRailgibud_SetupDead(this);
} else {
@@ -899,13 +901,15 @@ void EnRailgibud_MoveGrabbedPlayerAwayFromWall(EnRailgibud* this, PlayState* pla
Vec3f targetPos;
if ((this->actionFunc == EnRailgibud_Grab) && (this->grabState != EN_RAILGIBUD_GRAB_RELEASE)) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 35.0f, 1);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 35.0f, UPDBGCHECKINFO_FLAG_1);
} else {
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 35.0f, 0x1D);
+ 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 == EnRailgibud_Grab) && (this->grabState == EN_RAILGIBUD_GRAB_START) &&
- (this->actor.bgCheckFlags & 8)) {
+ (this->actor.bgCheckFlags & BGCHECKFLAG_WALL)) {
targetPos = player->actor.world.pos;
targetPos.x += 10.0f * Math_SinS(this->actor.wallYaw);
targetPos.z += 10.0f * Math_CosS(this->actor.wallYaw);
@@ -961,8 +965,8 @@ void EnRailgibud_CheckIfTalkingToPlayer(EnRailgibud* this, PlayState* play) {
this->isInvincible = true;
Message_StartTextbox(play, 0x13B2, &this->actor);
this->textId = 0x13B2;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_AIM);
- this->actor.speedXZ = 0.0f;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_AIM);
+ this->actor.speed = 0.0f;
} else if (CHECK_FLAG_ALL(this->actor.flags, (ACTOR_FLAG_1 | ACTOR_FLAG_8)) &&
!(this->collider.base.acFlags & AC_HIT)) {
func_800B8614(&this->actor, play, 100.0f);
@@ -980,7 +984,7 @@ void EnRailgibud_CheckIfTalkingToPlayer(EnRailgibud* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
this->textId = 0;
this->isInvincible = false;
- this->actor.speedXZ = 0.6f;
+ this->actor.speed = 0.6f;
}
break;
@@ -1102,8 +1106,8 @@ void EnRailgibud_Draw(Actor* thisx, PlayState* play) {
void EnRailgibud_InitCutsceneGibdo(EnRailgibud* this, PlayState* play) {
s32 pad[2];
- EnRailgibud_InitActorActionCommand(this);
- this->csAction = 99;
+ EnRailgibud_InitCueType(this);
+ this->cueId = 99;
this->actor.flags |= ACTOR_FLAG_100000;
this->actor.flags |= ACTOR_FLAG_10;
@@ -1115,37 +1119,37 @@ void EnRailgibud_InitCutsceneGibdo(EnRailgibud* this, PlayState* play) {
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
if (gSaveContext.save.entrance != ENTRANCE(IKANA_CANYON, 9)) { // NOT Cutscene: Music Box House Opens
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
EnRailgibud_SetupDoNothing(this);
this->actor.update = EnRailgibud_Cutscene_Update;
}
-void EnRailgibud_InitActorActionCommand(EnRailgibud* this) {
+void EnRailgibud_InitCueType(EnRailgibud* this) {
switch (ENRAILGIBUD_GET_CUTSCENE_TYPE(&this->actor)) {
case 1:
- this->actorActionCommand = 519;
+ this->cueType = CS_CMD_ACTOR_CUE_519;
break;
case 2:
- this->actorActionCommand = 520;
+ this->cueType = CS_CMD_ACTOR_CUE_520;
break;
case 3:
- this->actorActionCommand = 521;
+ this->cueType = CS_CMD_ACTOR_CUE_521;
break;
case 4:
- this->actorActionCommand = 522;
+ this->cueType = CS_CMD_ACTOR_CUE_522;
break;
case 5:
- this->actorActionCommand = 523;
+ this->cueType = CS_CMD_ACTOR_CUE_523;
break;
default:
- this->actorActionCommand = 519;
+ this->cueType = CS_CMD_ACTOR_CUE_519;
break;
}
}
@@ -1166,20 +1170,20 @@ void EnRailgibud_SinkIntoGround(EnRailgibud* this, PlayState* play) {
if (this->sinkTimer != 0) {
this->sinkTimer--;
} else if (Math_SmoothStepToF(&this->actor.shape.yOffset, -9500.0f, 0.5f, 200.0f, 10.0f) < 10.0f) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
EnRailgibud_SpawnEffectsForSinkingIntoTheGround(this, play, 0);
}
}
s32 EnRailgibud_PerformCutsceneActions(EnRailgibud* this, PlayState* play) {
- s32 actionIndex;
+ s32 cueChannel;
- if (Cutscene_CheckActorAction(play, this->actorActionCommand)) {
- actionIndex = Cutscene_GetActorActionIndex(play, this->actorActionCommand);
- if (this->csAction != play->csCtx.actorActions[actionIndex]->action) {
- this->csAction = play->csCtx.actorActions[actionIndex]->action;
- switch (play->csCtx.actorActions[actionIndex]->action) {
+ if (Cutscene_IsCueInChannel(play, this->cueType)) {
+ cueChannel = Cutscene_GetCueChannel(play, this->cueType);
+ if (this->cueId != play->csCtx.actorCues[cueChannel]->id) {
+ this->cueId = play->csCtx.actorCues[cueChannel]->id;
+ switch (play->csCtx.actorCues[cueChannel]->id) {
case 1:
this->cutsceneAnimIndex = EN_RAILGIBUD_ANIM_IDLE;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_IDLE);
@@ -1187,7 +1191,7 @@ s32 EnRailgibud_PerformCutsceneActions(EnRailgibud* this, PlayState* play) {
case 2:
this->cutsceneAnimIndex = EN_RAILGIBUD_ANIM_SLUMP_START;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_WEAKENED2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_WEAKENED2);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_RAILGIBUD_ANIM_SLUMP_START);
break;
@@ -1217,7 +1221,7 @@ s32 EnRailgibud_PerformCutsceneActions(EnRailgibud* this, PlayState* play) {
}
}
- switch (this->csAction) {
+ switch (this->cueId) {
case 3:
case 4:
if (this->actionFunc == EnRailgibud_SinkIntoGround) {
@@ -1229,20 +1233,20 @@ s32 EnRailgibud_PerformCutsceneActions(EnRailgibud* this, PlayState* play) {
case 5:
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- if (play->csCtx.frames < 280) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_CRY);
+ if (play->csCtx.curFrame < 280) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_CRY);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_WEAKENED1);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_WEAKENED1);
}
}
break;
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
return true;
}
- this->csAction = 99;
+ this->cueId = 99;
return false;
}
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 78655f870..95a2bbd7b 100644
--- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h
+++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h
@@ -47,14 +47,12 @@ typedef struct EnRailgibud {
/* 0x3F6 */ s16 drawDmgEffTimer;
/* 0x3F8 */ s16 type;
/* 0x3FA */ s16 isInvincible;
- /* 0x3FC */ u16 actorActionCommand;
- /* 0x3FE */ u16 csAction;
+ /* 0x3FC */ u16 cueType;
+ /* 0x3FE */ u16 cueId;
/* 0x400 */ u16 textId;
/* 0x402 */ s16 timeInitialized; // unused other than setting it
/* 0x404 */ u8 drawDmgEffType;
/* 0x405 */ s8 unk_405; // related to player->unk_ADD
} EnRailgibud; // size = 0x408
-extern const ActorInit En_Railgibud_InitVars;
-
#endif // Z_EN_RAILGIBUD_H
diff --git a/src/overlays/actors/ovl_En_Rat/overlay.cfg b/src/overlays/actors/ovl_En_Rat/overlay.cfg
deleted file mode 100644
index 3562582ca..000000000
--- a/src/overlays/actors/ovl_En_Rat/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Rat
-z_en_rat.c
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 9057fdb4c..81898dfa6 100644
--- a/src/overlays/actors/ovl_En_Rat/z_en_rat.c
+++ b/src/overlays/actors/ovl_En_Rat/z_en_rat.c
@@ -35,7 +35,7 @@ typedef enum {
/* -1 */ EN_RAT_HOOKED,
} EnRatHookedState;
-const ActorInit En_Rat_InitVars = {
+ActorInit En_Rat_InitVars = {
ACTOR_EN_RAT,
ACTORCAT_ENEMY,
FLAGS,
@@ -293,7 +293,7 @@ void EnRat_ChooseDirection(EnRat* this) {
angle -= 0x8000;
}
} else {
- if (Actor_DistanceToPoint(&this->actor, &this->actor.home.pos) > 50.0f) {
+ if (Actor_WorldDistXYZToPoint(&this->actor, &this->actor.home.pos) > 50.0f) {
Vec3f homeInHome;
Vec3f worldInHome;
Vec3f worldPlusForwardInHome;
@@ -331,7 +331,7 @@ void EnRat_ChooseDirection(EnRat* this) {
}
angle = CLAMP(angle, -0x800, 0x800);
- Matrix_RotateAxisF(angle * (M_PI / 0x8000), &this->axisUp, MTXMODE_NEW);
+ Matrix_RotateAxisF(BINANG_TO_RAD(angle), &this->axisUp, MTXMODE_NEW);
Matrix_MultVec3f(&this->axisForwards, &newAxisForwards);
Math_Vec3f_Copy(&this->axisForwards, &newAxisForwards);
Math3D_CrossProduct(&this->axisUp, &this->axisForwards, &this->axisLeft);
@@ -355,7 +355,8 @@ s32 EnRat_IsOnCollisionPoly(PlayState* play, Vec3f* posA, Vec3f* posB, Vec3f* po
}
if (BgCheck_EntityLineTest1(&play->colCtx, posA, posB, posResult, poly, 1, 1, 1, 1, bgId)) {
- if (!(func_800C9A4C(&play->colCtx, *poly, *bgId) & 0x30) && (!isOnWater || (waterSurface <= posResult->y))) {
+ if (!(SurfaceType_GetWallFlags(&play->colCtx, *poly, *bgId) & (WALL_FLAG_4 | WALL_FLAG_5)) &&
+ (!isOnWater || (waterSurface <= posResult->y))) {
return true;
}
}
@@ -386,7 +387,7 @@ s32 EnRat_IsTouchingSurface(EnRat* this, PlayState* play) {
bgIdUpDown = bgIdSide = BGCHECK_SCENE;
- lineLength = 2.0f * this->actor.speedXZ;
+ lineLength = 2.0f * this->actor.speed;
posA.x = this->actor.world.pos.x + (this->axisUp.x * 5.0f);
posA.y = this->actor.world.pos.y + (this->axisUp.y * 5.0f);
@@ -409,7 +410,7 @@ s32 EnRat_IsTouchingSurface(EnRat* this, PlayState* play) {
this->shouldRotateOntoSurfaces |= EnRat_UpdateFloorPoly(this, polySide, play);
Math_Vec3f_Copy(&this->actor.world.pos, &posSide);
this->actor.floorBgId = bgIdSide;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
} else {
if (polyUpDown != this->actor.floorPoly) {
this->shouldRotateOntoSurfaces |= EnRat_UpdateFloorPoly(this, polyUpDown, play);
@@ -419,7 +420,7 @@ s32 EnRat_IsTouchingSurface(EnRat* this, PlayState* play) {
this->actor.floorBgId = bgIdUpDown;
}
} else {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
lineLength *= 3.0f;
Math_Vec3f_Copy(&posA, &posB);
@@ -494,7 +495,7 @@ void EnRat_HandleNonSceneCollision(EnRat* this, PlayState* play) {
f32 cos;
f32 tempX;
- BgCheck2_UpdateActorAttachedToMesh(&play->colCtx, this->actor.floorBgId, &this->actor);
+ DynaPolyActor_TransformCarriedActor(&play->colCtx, this->actor.floorBgId, &this->actor);
if (yaw != this->actor.shape.rot.y) {
yaw = this->actor.shape.rot.y - yaw;
@@ -535,7 +536,7 @@ void EnRat_SetupRevive(EnRat* this) {
EnRat_InitializeAxes(this);
EnRat_UpdateRotation(this);
this->actor.flags &= ~ACTOR_FLAG_1;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
Animation_PlayLoopSetSpeed(&this->skelAnime, &gRealBombchuSpotAnim, 0.0f);
this->revivePosY = 2666.6667f;
this->actor.draw = NULL;
@@ -573,7 +574,7 @@ void EnRat_Revive(EnRat* this, PlayState* play) {
void EnRat_SetupIdle(EnRat* this) {
Animation_PlayLoop(&this->skelAnime, &gRealBombchuRunAnim);
this->animLoopCounter = 5;
- this->actor.speedXZ = 2.0f;
+ this->actor.speed = 2.0f;
this->actionFunc = EnRat_Idle;
}
@@ -583,16 +584,16 @@ void EnRat_SetupIdle(EnRat* this) {
void EnRat_Idle(EnRat* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- this->actor.speedXZ = 2.0f;
+ this->actor.speed = 2.0f;
if (Animation_OnFrame(&this->skelAnime, 0.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BOMCHU_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BOMCHU_WALK);
if (this->animLoopCounter != 0) {
this->animLoopCounter--;
}
}
if ((this->animLoopCounter == 0) && (Rand_ZeroOne() < 0.05f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BOMCHU_VOICE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BOMCHU_VOICE);
this->animLoopCounter = 5;
}
@@ -606,7 +607,7 @@ void EnRat_SetupSpottedPlayer(EnRat* this) {
this->actor.flags |= ACTOR_FLAG_10;
Animation_MorphToLoop(&this->skelAnime, &gRealBombchuSpotAnim, -5.0f);
this->animLoopCounter = 3;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = EnRat_SpottedPlayer;
}
@@ -615,7 +616,7 @@ void EnRat_SetupSpottedPlayer(EnRat* this) {
*/
void EnRat_SpottedPlayer(EnRat* this, PlayState* play) {
if ((this->animLoopCounter == 3) && Animation_OnFrame(&this->skelAnime, 5.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BOMCHU_AIM);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BOMCHU_AIM);
}
if (Animation_OnFrame(&this->skelAnime, 0.0f)) {
@@ -640,7 +641,7 @@ void EnRat_UpdateSparkOffsets(EnRat* this) {
void EnRat_SetupChasePlayer(EnRat* this) {
Animation_MorphToLoop(&this->skelAnime, &gRealBombchuRunAnim, -5.0f);
- this->actor.speedXZ = 6.1f;
+ this->actor.speed = 6.1f;
EnRat_UpdateSparkOffsets(this);
this->actionFunc = EnRat_ChasePlayer;
}
@@ -659,7 +660,7 @@ void EnRat_ChasePlayer(EnRat* this, PlayState* play) {
Vec3f blureP1;
Vec3f blureP2;
- this->actor.speedXZ = 6.1f;
+ this->actor.speed = 6.1f;
if (this->hasLostTrackOfPlayer) {
if (!(player->stateFlags3 & PLAYER_STATE3_100) && (Player_GetMask(play) != PLAYER_MASK_STONE) &&
Actor_IsFacingPlayer(&this->actor, 0x3000)) {
@@ -674,7 +675,7 @@ void EnRat_ChasePlayer(EnRat* this, PlayState* play) {
this->animLoopCounter--;
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BOMCHU_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BOMCHU_WALK);
}
DECR(this->timer);
@@ -704,7 +705,7 @@ void EnRat_ChasePlayer(EnRat* this, PlayState* play) {
}
if ((this->animLoopCounter == 0) && (Rand_ZeroOne() < 0.05f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BOMCHU_AIM);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BOMCHU_AIM);
this->animLoopCounter = 5;
}
@@ -713,12 +714,12 @@ void EnRat_ChasePlayer(EnRat* this, PlayState* play) {
}
void EnRat_SetupBounced(EnRat* this) {
- this->actor.speedXZ = 5.0f;
+ this->actor.speed = 5.0f;
this->actor.velocity.y = 8.0f;
this->actor.world.rot.y = this->actor.yawTowardsPlayer + 0x8000;
this->actor.gravity = -1.0f;
EnRat_UpdateSparkOffsets(this);
- this->actor.bgCheckFlags &= ~(0x10 | 0x8 | 0x1);
+ this->actor.bgCheckFlags &= ~(BGCHECKFLAG_GROUND | BGCHECKFLAG_WALL | BGCHECKFLAG_CEILING);
this->actionFunc = EnRat_Bounced;
}
@@ -733,14 +734,14 @@ void EnRat_Bounced(EnRat* this, PlayState* play) {
this->timer = 30;
}
- if (this->actor.bgCheckFlags & (0x10 | 0x8 | 0x1)) {
+ if (this->actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_WALL | BGCHECKFLAG_CEILING)) {
EnRat_Explode(this, 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, ENBOM_0);
+ this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, BOMB_TYPE_BODY);
if (bomb != NULL) {
bomb->timer = 0;
@@ -750,7 +751,7 @@ void EnRat_Explode(EnRat* this, PlayState* play) {
Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0x100);
}
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = EnRat_PostDetonation;
}
@@ -762,7 +763,7 @@ void EnRat_PostDetonation(EnRat* this, PlayState* play) {
if (EN_RAT_GET_TYPE(&this->actor) == EN_RAT_TYPE_OVERWORLD) {
EnRat_SetupRevive(this);
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -790,10 +791,10 @@ void EnRat_Update(Actor* thisx, PlayState* play) {
if (this->actor.colChkInfo.damageEffect == EN_RAT_DMGEFF_HOOKSHOT) {
this->damageReaction.hookedState = EN_RAT_HOOK_STARTED;
} else if (this->actor.colChkInfo.damageEffect == EN_RAT_DMGEFF_STUN) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
- Actor_SetColorFilter(&this->actor, 0, 120, 0, 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 120, COLORFILTER_BUFFLAG_OPA, 40);
if (this->actionFunc == EnRat_Bounced) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->actor.velocity.y > 0.0f) {
this->actor.velocity.y = 0.0f;
}
@@ -853,7 +854,8 @@ void EnRat_Update(Actor* thisx, PlayState* play) {
this->actor.floorHeight = this->actor.world.pos.y;
} else {
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 30.0f, 60.0f, 7);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 30.0f, 60.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4);
}
if (SurfaceType_IsWallDamage(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId)) {
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 6dd51d10a..9472e8c31 100644
--- a/src/overlays/actors/ovl_En_Rat/z_en_rat.h
+++ b/src/overlays/actors/ovl_En_Rat/z_en_rat.h
@@ -55,6 +55,4 @@ typedef struct EnRat {
/* 0x268 */ ColliderSphere collider;
} EnRat; // size = 0x2C0
-extern const ActorInit En_Rat_InitVars;
-
#endif // Z_EN_RAT_H
diff --git a/src/overlays/actors/ovl_En_Rd/overlay.cfg b/src/overlays/actors/ovl_En_Rd/overlay.cfg
deleted file mode 100644
index 3864774ca..000000000
--- a/src/overlays/actors/ovl_En_Rd/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Rd
-z_en_rd.c
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 0092189c5..b8e8e4139 100644
--- a/src/overlays/actors/ovl_En_Rd/z_en_rd.c
+++ b/src/overlays/actors/ovl_En_Rd/z_en_rd.c
@@ -97,7 +97,7 @@ typedef enum {
/* 4 */ EN_RD_GRAB_END,
} EnRdGrabState;
-const ActorInit En_Rd_InitVars = {
+ActorInit En_Rd_InitVars = {
ACTOR_EN_RD,
ACTORCAT_ENEMY,
FLAGS,
@@ -266,7 +266,7 @@ void EnRd_Init(Actor* thisx, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (EN_RD_GET_TYPE(&this->actor) == EN_RD_TYPE_INVISIBLE) {
- this->actor.flags |= ACTOR_FLAG_80;
+ this->actor.flags |= ACTOR_FLAG_REACT_TO_LENS;
}
if (EN_RD_GET_TYPE(&this->actor) == EN_RD_TYPE_FROZEN) {
@@ -356,7 +356,7 @@ void EnRd_SetupIdle(EnRd* this) {
this->action = EN_RD_ACTION_IDLE;
this->animationJudderTimer = (Rand_ZeroOne() * 10.0f) + 5.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = EnRd_Idle;
}
@@ -410,7 +410,7 @@ void EnRd_Idle(EnRd* this, PlayState* play) {
}
if ((play->gameplayFrames & 0x5F) == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_CRY);
}
}
@@ -419,7 +419,7 @@ void EnRd_SetupSquattingDance(EnRd* this) {
this->action = EN_RD_ACTION_SQUATTING_DANCE;
this->animationJudderTimer = (Rand_ZeroOne() * 10.0f) + 5.0f;
this->danceEndTimer = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = EnRd_SquattingDance;
}
@@ -454,7 +454,7 @@ void EnRd_SquattingDance(EnRd* this, PlayState* play) {
}
if ((play->gameplayFrames & 0x5F) == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_CRY);
}
}
@@ -463,7 +463,7 @@ void EnRd_SetupClappingDance(EnRd* this) {
this->action = EN_RD_ACTION_CLAPPING_DANCE;
this->animationJudderTimer = (Rand_ZeroOne() * 10.0f) + 5.0f;
this->danceEndTimer = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = EnRd_ClappingDance;
}
@@ -498,14 +498,14 @@ void EnRd_ClappingDance(EnRd* this, PlayState* play) {
}
if ((play->gameplayFrames & 0x5F) == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_CRY);
}
}
void EnRd_EndClappingOrSquattingDanceWhenPlayerIsClose(EnRd* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if ((play->gameplayFrames & 0x5F) == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_CRY);
}
this->danceEndTimer++;
@@ -524,7 +524,7 @@ void EnRd_SetupPirouette(EnRd* this) {
this->action = EN_RD_ACTION_PIROUETTE;
this->animationJudderTimer = (Rand_ZeroOne() * 10.0f) + 5.0f;
this->pirouetteRotationalVelocity = 0x1112;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = EnRd_Pirouette;
}
@@ -558,7 +558,7 @@ void EnRd_Pirouette(EnRd* this, PlayState* play) {
}
if ((play->gameplayFrames & 0x5F) == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_CRY);
}
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
@@ -574,7 +574,7 @@ void EnRd_Pirouette(EnRd* this, PlayState* play) {
void EnRd_EndPirouetteWhenPlayerIsClose(EnRd* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if ((play->gameplayFrames & 0x5F) == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_CRY);
}
this->actor.world.rot.y -= this->pirouetteRotationalVelocity;
@@ -600,7 +600,7 @@ void EnRd_SetupRiseFromCoffin(EnRd* this) {
this->actor.shape.rot.x = -0x4000;
this->actor.gravity = 0.0f;
this->actor.shape.yOffset = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = EnRd_RiseFromCoffin;
}
@@ -613,14 +613,14 @@ void EnRd_RiseFromCoffin(EnRd* this, PlayState* play) {
}
} else {
if (this->actor.world.pos.y == this->actor.home.pos.y) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_CRY);
}
if (Math_SmoothStepToF(&this->actor.world.pos.y, this->actor.home.pos.y + 50.0f, 0.3f, 2.0f, 0.3f) == 0.0f) {
if (this->coffinRiseForwardAccelTimer != 0) {
this->coffinRiseForwardAccelTimer--;
- Math_SmoothStepToF(&this->actor.speedXZ, 6.0f, 0.3f, 1.0f, 0.3f);
- } else if (Math_SmoothStepToF(&this->actor.speedXZ, 0.0f, 0.3f, 1.0f, 0.3f) == 0.0f) {
+ Math_SmoothStepToF(&this->actor.speed, 6.0f, 0.3f, 1.0f, 0.3f);
+ } else if (Math_SmoothStepToF(&this->actor.speed, 0.0f, 0.3f, 1.0f, 0.3f) == 0.0f) {
Math_SmoothStepToS(&this->actor.shape.rot.x, 0, 1, 0x7D0, 0);
}
}
@@ -631,7 +631,7 @@ void EnRd_SetupWalkToPlayer(EnRd* this, PlayState* play) {
f32 frameCount = Animation_GetLastFrame(&gGibdoRedeadWalkAnim);
Animation_Change(&this->skelAnime, &gGibdoRedeadWalkAnim, 1.0f, 4.0f, frameCount, ANIMMODE_LOOP_INTERP, -4.0f);
- this->actor.speedXZ = 0.4f;
+ this->actor.speed = 0.4f;
this->action = EN_RD_ACTION_WALKING_TO_PLAYER_OR_RELEASING_GRAB;
this->actionFunc = EnRd_WalkToPlayer;
}
@@ -642,20 +642,21 @@ void EnRd_WalkToPlayer(EnRd* this, PlayState* play) {
s16 yaw =
((this->actor.yawTowardsPlayer - this->actor.shape.rot.y) - this->headYRotation) - this->upperBodyYRotation;
- this->skelAnime.playSpeed = this->actor.speedXZ;
+ this->skelAnime.playSpeed = this->actor.speed;
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 1, 250, 0);
Math_SmoothStepToS(&this->headYRotation, 0, 1, 100, 0);
Math_SmoothStepToS(&this->upperBodyYRotation, 0, 1, 100, 0);
this->actor.world.rot.y = this->actor.shape.rot.y;
SkelAnime_Update(&this->skelAnime);
- if (Actor_DistanceToPoint(&player->actor, &this->actor.home.pos) >= 150.0f) {
+ if (Actor_WorldDistXYZToPoint(&player->actor, &this->actor.home.pos) >= 150.0f) {
EnRd_SetupWalkToHome(this, play);
}
- if ((ABS_ALT(yaw) < 0x1554) && (Actor_DistanceBetweenActors(&this->actor, &player->actor) <= 150.0f)) {
- if (!(player->stateFlags1 & (0x200000 | 0x80000 | 0x40000 | 0x4000 | 0x2000 | 0x80)) &&
- !(player->stateFlags2 & (0x4000 | 0x80))) {
+ if ((ABS_ALT(yaw) < 0x1554) && (Actor_WorldDistXYZToActor(&this->actor, &player->actor) <= 150.0f)) {
+ if (!(player->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_40000 |
+ PLAYER_STATE1_80000 | PLAYER_STATE1_200000)) &&
+ !(player->stateFlags2 & (PLAYER_STATE2_80 | PLAYER_STATE2_4000))) {
if (this->playerStunWaitTimer == 0) {
if (!(this->flags & EN_RD_FLAG_CANNOT_FREEZE_PLAYER)) {
player->actor.freezeTimer = 40;
@@ -664,7 +665,7 @@ void EnRd_WalkToPlayer(EnRd* this, PlayState* play) {
Rumble_Request(this->actor.xzDistToPlayer, 255, 20, 150);
}
this->playerStunWaitTimer = 60;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_AIM);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_AIM);
}
} else {
EnRd_SetupWalkToHome(this, play);
@@ -675,11 +676,11 @@ void EnRd_WalkToPlayer(EnRd* this, PlayState* play) {
this->grabWaitTimer--;
}
- if (!this->grabWaitTimer && (Actor_DistanceBetweenActors(&this->actor, &player->actor) <= 45.0f) &&
+ if (!this->grabWaitTimer && (Actor_WorldDistXYZToActor(&this->actor, &player->actor) <= 45.0f) &&
Actor_IsFacingPlayer(&this->actor, 0x38E3)) {
player->actor.freezeTimer = 0;
if ((player->transformation == PLAYER_FORM_GORON) || (player->transformation == PLAYER_FORM_DEKU)) {
- if (Actor_DistanceToPoint(&this->actor, &this->actor.home.pos) < 150.0f) {
+ if (Actor_WorldDistXYZToPoint(&this->actor, &this->actor.home.pos) < 150.0f) {
// 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.
EnRd_SetupGrabFail(this);
@@ -699,9 +700,9 @@ void EnRd_WalkToPlayer(EnRd* this, PlayState* play) {
}
if (Animation_OnFrame(&this->skelAnime, 10.0f) || Animation_OnFrame(&this->skelAnime, 22.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_RIZA_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_RIZA_WALK);
} else if ((play->gameplayFrames & 0x5F) == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_CRY);
}
}
@@ -715,12 +716,12 @@ void EnRd_SetupWalkToHome(EnRd* this, PlayState* play) {
void EnRd_WalkToHome(EnRd* this, PlayState* play) {
Player* player = GET_PLAYER(play);
s32 pad;
- s16 sp36 = Actor_YawToPoint(&this->actor, &this->actor.home.pos);
+ s16 sp36 = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
- if (Actor_DistanceToPoint(&this->actor, &this->actor.home.pos) >= 5.0f) {
+ if (Actor_WorldDistXYZToPoint(&this->actor, &this->actor.home.pos) >= 5.0f) {
Math_SmoothStepToS(&this->actor.shape.rot.y, sp36, 1, 450, 0);
} else {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (!Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 1, 450, 0)) {
if (EN_RD_GET_TYPE(&this->actor) != EN_RD_TYPE_CRYING) {
EnRd_SetupIdle(this);
@@ -738,7 +739,7 @@ void EnRd_WalkToHome(EnRd* this, PlayState* play) {
if (!(player->stateFlags1 & (0x200000 | 0x80000 | 0x40000 | 0x4000 | 0x2000 | 0x80)) &&
!(player->stateFlags2 & (0x4000 | 0x80)) && (player->transformation != PLAYER_FORM_GORON) &&
(player->transformation != PLAYER_FORM_DEKU) &&
- (Actor_DistanceToPoint(&player->actor, &this->actor.home.pos) < 150.0f)) {
+ (Actor_WorldDistXYZToPoint(&player->actor, &this->actor.home.pos) < 150.0f)) {
this->actor.targetMode = 0;
EnRd_SetupWalkToPlayer(this, play);
} else if (EN_RD_GET_TYPE(&this->actor) > EN_RD_TYPE_DOES_NOT_MOURN_IF_WALKING) {
@@ -750,9 +751,9 @@ void EnRd_WalkToHome(EnRd* this, PlayState* play) {
}
if (Animation_OnFrame(&this->skelAnime, 10.0f) || Animation_OnFrame(&this->skelAnime, 22.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_RIZA_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_RIZA_WALK);
} else if ((play->gameplayFrames & 0x5F) == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_CRY);
}
}
@@ -778,13 +779,13 @@ void EnRd_WalkToParent(EnRd* this, PlayState* play) {
if (this->actor.parent != NULL) {
parentPos = this->actor.parent->world.pos;
- yaw = Actor_YawToPoint(&this->actor, &parentPos);
+ yaw = Actor_WorldYawTowardPoint(&this->actor, &parentPos);
Math_SmoothStepToS(&this->actor.shape.rot.y, yaw, 1, 250, 0);
- if (Actor_DistanceToPoint(&this->actor, &parentPos) >= 45.0f) {
- this->actor.speedXZ = 0.4f;
+ if (Actor_WorldDistXYZToPoint(&this->actor, &parentPos) >= 45.0f) {
+ this->actor.speed = 0.4f;
} else {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (EN_RD_GET_TYPE(&this->actor) != EN_RD_TYPE_CRYING) {
EnRd_SetupIdle(this);
} else {
@@ -801,9 +802,9 @@ void EnRd_WalkToParent(EnRd* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (Animation_OnFrame(&this->skelAnime, 10.0f) || Animation_OnFrame(&this->skelAnime, 22.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_RIZA_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_RIZA_WALK);
} else if ((play->gameplayFrames & 0x5F) == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_CRY);
}
}
@@ -813,7 +814,7 @@ void EnRd_SetupGrab(EnRd* this) {
this->grabState = 0;
this->grabDamageTimer = 200;
this->action = EN_RD_ACTION_GRABBING;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = EnRd_Grab;
}
@@ -838,9 +839,9 @@ void EnRd_Grab(EnRd* this, PlayState* play) {
Math_SmoothStepToS(&this->upperBodyYRotation, 0, 1, 1500, 0);
case EN_RD_GRAB_ATTACK:
- if (!(player->stateFlags2 & 0x80) || (player->unk_B62 != 0)) {
- if ((player->unk_B62 != 0) && (player->stateFlags2 & 0x80)) {
- player->stateFlags2 &= ~0x80;
+ if (!(player->stateFlags2 & PLAYER_STATE2_80) || (player->unk_B62 != 0)) {
+ if ((player->unk_B62 != 0) && (player->stateFlags2 & PLAYER_STATE2_80)) {
+ player->stateFlags2 &= ~PLAYER_STATE2_80;
player->unk_AE8 = 100;
}
Animation_Change(&this->skelAnime, &gGibdoRedeadGrabEndAnim, 0.5f, 0.0f,
@@ -872,7 +873,7 @@ void EnRd_Grab(EnRd* this, PlayState* play) {
Math_SmoothStepToS(&this->actor.shape.rot.y, player->actor.shape.rot.y, 1, 6000, 0);
if (Animation_OnFrame(&this->skelAnime, 0.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_ATTACK);
}
this->grabDamageTimer--;
@@ -880,7 +881,7 @@ void EnRd_Grab(EnRd* this, PlayState* play) {
play->damagePlayer(play, -8);
Rumble_Request(this->actor.xzDistToPlayer, 240, 1, 12);
this->grabDamageTimer = 20;
- func_800B8E58(player, player->ageProperties->unk_92 + NA_SE_VO_LI_DAMAGE_S);
+ Player_PlaySfx(player, player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_DAMAGE_S);
}
break;
@@ -921,7 +922,7 @@ void EnRd_AttemptPlayerFreeze(EnRd* this, PlayState* play) {
Rumble_Request(this->actor.xzDistToPlayer, 255, 20, 150);
func_80123E90(play, &this->actor);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_AIM);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_AIM);
EnRd_SetupWalkToPlayer(this, play);
}
}
@@ -929,15 +930,15 @@ void EnRd_AttemptPlayerFreeze(EnRd* this, PlayState* play) {
void EnRd_SetupGrabFail(EnRd* this) {
this->action = EN_RD_ACTION_FAILING_GRAB;
Animation_MorphToPlayOnce(&this->skelAnime, &gGibdoRedeadDamageAnim, -6.0f);
- this->actor.speedXZ = -2.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_DAMAGE);
+ this->actor.speed = -2.0f;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_DAMAGE);
this->action = EN_RD_ACTION_FAILING_GRAB;
this->actionFunc = EnRd_GrabFail;
}
void EnRd_GrabFail(EnRd* this, PlayState* play) {
- if (this->actor.speedXZ < 0.0f) {
- this->actor.speedXZ += 0.15f;
+ if (this->actor.speed < 0.0f) {
+ this->actor.speed += 0.15f;
}
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
@@ -1003,12 +1004,12 @@ void EnRd_Crouch(EnRd* this, PlayState* play) {
void EnRd_SetupDamage(EnRd* this) {
this->actor.shape.yOffset = 0.0f;
Animation_MorphToPlayOnce(&this->skelAnime, &gGibdoRedeadDamageAnim, -6.0f);
- if (this->actor.bgCheckFlags & 1) {
- this->actor.speedXZ = -2.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ this->actor.speed = -2.0f;
}
this->actor.flags |= ACTOR_FLAG_1;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_DAMAGE);
this->action = EN_RD_ACTION_DAMAGE;
this->actionFunc = EnRd_Damage;
}
@@ -1016,8 +1017,8 @@ void EnRd_SetupDamage(EnRd* this) {
void EnRd_Damage(EnRd* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (this->actor.speedXZ < 0.0f) {
- this->actor.speedXZ += 0.15f;
+ if (this->actor.speed < 0.0f) {
+ this->actor.speed += 0.15f;
}
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
@@ -1028,7 +1029,7 @@ void EnRd_Damage(EnRd* this, PlayState* play) {
this->actor.world.rot.y = this->actor.shape.rot.y;
if (this->actor.parent != NULL) {
EnRd_SetupWalkToParent(this);
- } else if (Actor_DistanceToPoint(&player->actor, &this->actor.home.pos) >= 150.0f) {
+ } else if (Actor_WorldDistXYZToPoint(&player->actor, &this->actor.home.pos) >= 150.0f) {
EnRd_SetupWalkToHome(this, play);
} else {
EnRd_SetupWalkToPlayer(this, play);
@@ -1042,8 +1043,8 @@ void EnRd_SetupDead(EnRd* this) {
this->action = EN_RD_ACTION_DEAD;
this->deathTimer = 300;
this->actor.flags &= ~ACTOR_FLAG_1;
- this->actor.speedXZ = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_DEAD);
+ this->actor.speed = 0.0f;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_DEAD);
this->actionFunc = EnRd_Dead;
}
@@ -1068,30 +1069,31 @@ void EnRd_Dead(EnRd* this, PlayState* play) {
this->actor.scale.y -= (75.0f / 1000000.0f);
this->alpha -= 5;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else {
this->deathTimer--;
}
} else if (Animation_OnFrame(&this->skelAnime, 33.0f) || Animation_OnFrame(&this->skelAnime, 40.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GERUDOFT_DOWN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GERUDOFT_DOWN);
}
}
void EnRd_SetupStunned(EnRd* this) {
this->action = EN_RD_ACTION_STUNNED;
this->stunTimer = 10;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
if (gSaveContext.sunsSongState != SUNSSONG_INACTIVE) {
this->stunnedBySunsSong = true;
this->sunsSongStunTimer = 600;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_LIGHT_ARROW_HIT);
- Actor_SetColorFilter(&this->actor, 0x8000, 0x80C8, 0, 255);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_LIGHT_ARROW_HIT);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_GRAY, COLORFILTER_INTENSITY_FLAG | 200,
+ COLORFILTER_BUFFLAG_OPA, 255);
} else if (this->damageEffect == EN_RD_DMGEFF_STUN) {
- Actor_SetColorFilter(&this->actor, 0, 0xC8, 0, 40);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 200, COLORFILTER_BUFFLAG_OPA, 40);
} else if (this->damageEffect == EN_RD_DMGEFF_ZORA_MAGIC) {
- Actor_SetColorFilter(&this->actor, 0, 0xC8, 0, 40);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 200, COLORFILTER_BUFFLAG_OPA, 40);
}
this->actionFunc = EnRd_Stunned;
}
@@ -1105,7 +1107,8 @@ void EnRd_Stunned(EnRd* this, PlayState* play) {
if (this->sunsSongStunTimer != 0) {
this->sunsSongStunTimer--;
if (this->sunsSongStunTimer >= 255) {
- Actor_SetColorFilter(&this->actor, 0x8000, 0x80C8, 0, 255);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_GRAY, COLORFILTER_INTENSITY_FLAG | 200,
+ COLORFILTER_BUFFLAG_OPA, 255);
}
if (this->sunsSongStunTimer == 0) {
@@ -1185,7 +1188,7 @@ void EnRd_UpdateDamage(EnRd* this, PlayState* play) {
return;
case EN_RD_DMGEFF_FIRE_ARROW:
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 40);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 40);
this->drawDmgEffTimer = 180;
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
this->stunnedBySunsSong = false;
@@ -1194,7 +1197,7 @@ void EnRd_UpdateDamage(EnRd* this, PlayState* play) {
break;
case EN_RD_DMGEFF_LIGHT_ARROW:
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 40);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 40);
this->drawDmgEffTimer = 60;
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
this->stunnedBySunsSong = false;
@@ -1203,13 +1206,13 @@ void EnRd_UpdateDamage(EnRd* this, PlayState* play) {
break;
case EN_RD_DMGEFF_DAMAGE:
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
this->stunnedBySunsSong = false;
this->sunsSongStunTimer = 0;
break;
case EN_RD_DMGEFF_LIGHT_RAY:
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
this->stunnedBySunsSong = false;
this->sunsSongStunTimer = 0;
this->actor.colChkInfo.health = 0;
@@ -1272,13 +1275,14 @@ void EnRd_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
- if ((this->action != EN_RD_ACTION_GRABBING) && (this->actor.speedXZ != 0.0f)) {
+ if ((this->action != EN_RD_ACTION_GRABBING) && (this->actor.speed != 0.0f)) {
Actor_MoveWithGravity(&this->actor);
}
- if ((this->actor.shape.rot.x == 0) && (this->action != EN_RD_ACTION_GRABBING) &&
- (this->actor.speedXZ != 0.0f)) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 35.0f, 0x1D);
+ if ((this->actor.shape.rot.x == 0) && (this->action != EN_RD_ACTION_GRABBING) && (this->actor.speed != 0.0f)) {
+ 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->action == EN_RD_ACTION_ATTEMPTING_PLAYER_STUN) {
@@ -1324,10 +1328,10 @@ void EnRd_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
}
void EnRd_Draw(Actor* thisx, PlayState* play) {
- static Vec3f D_808D7138 = { 0.25f, 0.25f, 0.25f };
+ static Vec3f sScale = { 0.25f, 0.25f, 0.25f };
s32 pad;
EnRd* this = THIS;
- Vec3f sp54 = this->actor.world.pos;
+ Vec3f pos = this->actor.world.pos;
OPEN_DISPS(play->state.gfxCtx);
@@ -1343,7 +1347,7 @@ void EnRd_Draw(Actor* thisx, PlayState* play) {
SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnRd_OverrideLimbDraw, EnRd_PostLimbDraw, &this->actor, POLY_OPA_DISP);
- func_800BC620(&sp54, &D_808D7138, 255, play);
+ func_800BC620(&pos, &sScale, 255, play);
} else {
func_8012C2DC(play->state.gfxCtx);
@@ -1353,7 +1357,7 @@ void EnRd_Draw(Actor* thisx, PlayState* play) {
POLY_XLU_DISP =
SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnRd_OverrideLimbDraw, NULL, &this->actor, POLY_XLU_DISP);
- func_800BC620(&sp54, &D_808D7138, this->alpha, play);
+ func_800BC620(&pos, &sScale, this->alpha, play);
}
CLOSE_DISPS(play->state.gfxCtx);
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 0affac4f1..f5fbf82cb 100644
--- a/src/overlays/actors/ovl_En_Rd/z_en_rd.h
+++ b/src/overlays/actors/ovl_En_Rd/z_en_rd.h
@@ -72,6 +72,4 @@ typedef struct EnRd {
/* 0x3F1 */ s8 unk_3F1; // related to player->unk_ADD
} EnRd; // size = 0x3F4
-extern const ActorInit En_Rd_InitVars;
-
#endif // Z_EN_RD_H
diff --git a/src/overlays/actors/ovl_En_Recepgirl/overlay.cfg b/src/overlays/actors/ovl_En_Recepgirl/overlay.cfg
deleted file mode 100644
index bec7425de..000000000
--- a/src/overlays/actors/ovl_En_Recepgirl/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Recepgirl
-z_en_recepgirl.c
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 d817d1df4..64313c4be 100644
--- a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c
+++ b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c
@@ -21,7 +21,7 @@ void EnRecepgirl_Wait(EnRecepgirl* this, PlayState* play);
void EnRecepgirl_SetupTalk(EnRecepgirl* this);
void EnRecepgirl_Talk(EnRecepgirl* this, PlayState* play);
-const ActorInit En_Recepgirl_InitVars = {
+ActorInit En_Recepgirl_InitVars = {
ACTOR_EN_RECEPGIRL,
ACTORCAT_NPC,
FLAGS,
@@ -149,8 +149,8 @@ void EnRecepgirl_Talk(EnRecepgirl* this, PlayState* play) {
Flags_SetSwitch(play, this->actor.params);
Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_00AD98, 10.0f);
- if (gSaveContext.save.weekEventReg[63] & 0x80) { // showed Couple's Mask to meeting
- this->actor.textId = 0x2ADF; // Mayor's office is on the left (meeting ended)
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_80)) {
+ this->actor.textId = 0x2ADF; // Mayor's office is on the left (meeting ended)
} else {
this->actor.textId = 0x2ADA; // Mayor's office is on the left (meeting ongoing)
}
@@ -168,7 +168,7 @@ void EnRecepgirl_Talk(EnRecepgirl* this, PlayState* play) {
this->actor.textId = 0x2AE0; // drawing room on the right, don't go in without an appointment
}
}
- func_80151938(play, this->actor.textId);
+ Message_ContinueTextbox(play, this->actor.textId);
}
}
diff --git a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.h b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.h
index b6684fc9e..a0fba9fdc 100644
--- a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.h
+++ b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.h
@@ -17,6 +17,4 @@ typedef struct EnRecepgirl {
/* 0x2AE */ Vec3s headRot;
} EnRecepgirl; // size = 0x2B4
-extern const ActorInit En_Recepgirl_InitVars;
-
#endif // Z_EN_RECEPGIRL_H
diff --git a/src/overlays/actors/ovl_En_Rg/overlay.cfg b/src/overlays/actors/ovl_En_Rg/overlay.cfg
deleted file mode 100644
index 4cbc29697..000000000
--- a/src/overlays/actors/ovl_En_Rg/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Rg
-z_en_rg.c
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 2d976bdd5..d552c5605 100644
--- a/src/overlays/actors/ovl_En_Rg/z_en_rg.c
+++ b/src/overlays/actors/ovl_En_Rg/z_en_rg.c
@@ -22,7 +22,7 @@ void func_80BF4FC4(EnRg* this, PlayState* play);
s32 D_80BF5C10;
-const ActorInit En_Rg_InitVars = {
+ActorInit En_Rg_InitVars = {
ACTOR_EN_RG,
ACTORCAT_NPC,
FLAGS,
@@ -231,7 +231,7 @@ void func_80BF3DC4(EnRg* this, PlayState* play) {
this->collider2.dim.worldSphere.center.y = this->actor.world.pos.y + this->actor.shape.yOffset;
this->collider2.dim.worldSphere.center.z = this->actor.world.pos.z;
- if (this->actor.speedXZ >= 10.0f) {
+ if (this->actor.speed >= 10.0f) {
CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider2.base);
}
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider2.base);
@@ -283,13 +283,13 @@ void func_80BF3FF8(EnRg* this) {
}
s32 func_80BF4024(EnRg* this, PlayState* play) {
- if ((play->csCtx.state == 0) && (this->unk_334 == 1)) {
+ if ((play->csCtx.state == CS_STATE_IDLE) && (this->unk_334 == 1)) {
if (Animation_OnFrame(&this->skelAnime, 2.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_CIRCLE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_CIRCLE);
}
if (Animation_OnFrame(&this->skelAnime, 22.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_SIT_IMT);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_SIT_IMT);
}
}
@@ -318,8 +318,8 @@ void func_80BF40F4(EnRg* this) {
}
s32 func_80BF416C(EnRg* this, PlayState* play) {
- if ((this->actor.bgCheckFlags & 1) && (this->actor.speedXZ >= 0.01f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_ROLLING - SFX_FLAG);
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.speed >= 0.01f)) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_ROLLING - SFX_FLAG);
func_800AE930(&play->colCtx, Effect_GetByIndex(this->unk_340), &this->actor.world.pos, 18.0f,
this->actor.shape.rot.y, this->actor.floorPoly, this->actor.floorBgId);
} else {
@@ -345,9 +345,9 @@ s32 func_80BF42BC(EnRg* this, f32 arg1) {
f32 sp2C;
s32 sp24;
- Math_ApproachF(&this->actor.speedXZ, arg1, 0.3f, 0.5f);
+ Math_ApproachF(&this->actor.speed, arg1, 0.3f, 0.5f);
- sp2C = this->actor.speedXZ * (1.0f / 26);
+ sp2C = this->actor.speed * (1.0f / 26);
if (sp2C > 1.0f) {
sp2C = 1.0f;
}
@@ -410,7 +410,7 @@ s32 func_80BF45B4(EnRg* this) {
s16 temp_v0;
s16 temp_v1;
- if ((this->actor.bgCheckFlags & 8) && (this->actor.speedXZ >= 5.0f)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) && (this->actor.speed >= 5.0f)) {
temp_v1 = this->actor.world.rot.y;
temp_v0 = temp_v1 - BINANG_ROT180(this->actor.wallYaw);
@@ -419,27 +419,27 @@ s32 func_80BF45B4(EnRg* this) {
this->unk_322 = 0xA;
} else if (ABS_ALT(temp_v0) >= 0x1000) {
this->actor.world.rot.y = BINANG_ROT180(BINANG_ROT180(this->actor.wallYaw) - temp_v0);
- this->actor.speedXZ *= 0.75f;
+ this->actor.speed *= 0.75f;
this->unk_322 = 0xA;
} else {
this->actor.world.rot.y = BINANG_ROT180(temp_v1);
ret = 1;
- this->actor.speedXZ *= 0.25f;
+ this->actor.speed *= 0.25f;
}
sp24 = 1;
} else if (this->unk_310 & 0x40) {
- s16 yaw = Actor_YawBetweenActors(&this->actor, ((void)0, this->collider2.base.ac));
+ s16 yaw = Actor_WorldYawTowardActor(&this->actor, ((void)0, this->collider2.base.ac));
sp24 = 2;
if (this->actor.colorFilterTimer == 0) {
- this->actor.speedXZ *= 0.5f;
+ this->actor.speed *= 0.5f;
if ((s16)(yaw - this->actor.world.rot.y) > 0) {
this->actor.world.rot.y -= 0x2000;
} else {
this->actor.world.rot.y += 0x2000;
}
}
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 40);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 40);
this->unk_322 = 0xA;
}
@@ -501,7 +501,7 @@ s32 func_80BF47AC(EnRg* this, PlayState* play) {
void func_80BF4934(EnRg* this) {
if (this->unk_318 == 1) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_DASH);
}
}
@@ -533,7 +533,7 @@ void func_80BF4964(EnRg* this) {
}
if (!(this->unk_310 & 0x400) && !(this->unk_310 & 0x1000) && (this->unk_322 == 0) && (this->unk_324 == 0) &&
- (this->actor.bgCheckFlags & 1)) {
+ (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
if (this->unk_18C == NULL) {
Math_Vec3s_ToVec3f(&sp30, &sp3C[this->unk_33C]);
} else {
@@ -564,8 +564,9 @@ void func_80BF4AB8(EnRg* this, PlayState* play) {
} while (phi_s0 != NULL);
}
- if ((phi_s0 == NULL) && (D_80BF5C10 == 0) && (this->unk_326 == 0) && (player->stateFlags3 & 0x80000) &&
- (player->invincibilityTimer == 0) && func_80BF4220(this, play, &player->actor)) {
+ if ((phi_s0 == NULL) && (D_80BF5C10 == 0) && (this->unk_326 == 0) &&
+ (player->stateFlags3 & PLAYER_STATE3_80000) && (player->invincibilityTimer == 0) &&
+ func_80BF4220(this, play, &player->actor)) {
this->unk_18C = &player->actor;
this->unk_310 |= 0x800;
D_80BF5C10 = 1;
@@ -586,7 +587,7 @@ void func_80BF4AB8(EnRg* this, PlayState* play) {
this->unk_320 = CLAMP_MAX(this->unk_320, 0x190);
} else if (this->collider2.base.at->id == ACTOR_PLAYER) {
this->unk_326 = 0x28;
- if (player->stateFlags3 & 0x1000) {
+ if (player->stateFlags3 & PLAYER_STATE3_1000) {
player->linearVelocity *= 0.5f;
player->unk_B08[0] = player->linearVelocity;
player->unk_B08[1] += player->linearVelocity * 0.05f;
@@ -624,8 +625,8 @@ s32 func_80BF4DA8(EnRg* this) {
s32 i;
for (i = 0; i < ARRAY_COUNT(D_80BF596C); i++) {
- temp_f20 = Actor_XZDistanceToPoint(&this->actor, &D_80BF596C[i]);
- temp_v1 = Actor_YawToPoint(&this->actor, &D_80BF596C[i]) - this->actor.world.rot.y;
+ temp_f20 = Actor_WorldDistXZToPoint(&this->actor, &D_80BF596C[i]);
+ temp_v1 = Actor_WorldYawTowardPoint(&this->actor, &D_80BF596C[i]) - this->actor.world.rot.y;
if ((temp_f20 < 100.0f) && (ABS_ALT(temp_v1) < 0xC00)) {
if (temp_v1 > 0) {
@@ -658,7 +659,7 @@ void func_80BF4EBC(EnRg* this, PlayState* play) {
this->actor.shape.yOffset = 14.0f;
this->actionFunc = func_80BF4FC4;
}
- } else if (gSaveContext.save.weekEventReg[12] & 2) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_02)) {
if (DECR(this->unk_318) == 0) {
func_80BF409C(this, 1);
this->unk_310 &= ~8;
@@ -675,10 +676,10 @@ void func_80BF4FC4(EnRg* this, PlayState* play) {
this->unk_344 = func_80BF4560(this, play);
if (!Play_InCsMode(play)) {
- if (this->actor.bgCheckFlags & 2) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
if (this->unk_310 & 0x400) {
this->unk_310 &= ~0x400;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
if (this->unk_344 != -1) {
@@ -687,7 +688,7 @@ void func_80BF4FC4(EnRg* this, PlayState* play) {
this->unk_33C++;
}
}
- } else if ((this->actor.bgCheckFlags & 1) && !(this->unk_310 & 0x1000) &&
+ } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && !(this->unk_310 & 0x1000) &&
func_80BF4D64(&this->actor.world.pos)) {
this->unk_310 |= 0x1000;
}
@@ -697,7 +698,7 @@ void func_80BF4FC4(EnRg* this, PlayState* play) {
this->unk_310 &= ~0x800;
}
- if (gSaveContext.eventInf[1] & 1) {
+ if (CHECK_EVENTINF(EVENTINF_10)) {
if (DECR(this->unk_318) == 0) {
func_80BF47AC(this, play);
@@ -750,7 +751,7 @@ void EnRg_Init(Actor* thisx, PlayState* play) {
this->actor.gravity = -1.0f;
SubS_UpdateFlags(&this->unk_310, 3, 7);
- if (!(gSaveContext.save.weekEventReg[12] & 2)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_02)) {
this->unk_318 = Rand_S16Offset(30, 30);
}
@@ -758,7 +759,7 @@ void EnRg_Init(Actor* thisx, PlayState* play) {
this->unk_31E = 0;
this->actionFunc = func_80BF4EBC;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -785,7 +786,9 @@ void EnRg_Update(Actor* thisx, PlayState* play) {
func_80BF4024(this, play);
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 0.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
if (this->actor.floorHeight <= BGCHECK_Y_MIN) {
Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.prevPos);
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 fe0a000b6..4db0b58e0 100644
--- a/src/overlays/actors/ovl_En_Rg/z_en_rg.h
+++ b/src/overlays/actors/ovl_En_Rg/z_en_rg.h
@@ -52,6 +52,4 @@ typedef struct EnRg {
/* 0x34C */ EnRgStruct unk_34C[32];
} EnRg; // size = 0xACC
-extern const ActorInit En_Rg_InitVars;
-
#endif // Z_EN_RG_H
diff --git a/src/overlays/actors/ovl_En_River_Sound/overlay.cfg b/src/overlays/actors/ovl_En_River_Sound/overlay.cfg
deleted file mode 100644
index 82d1e4c4a..000000000
--- a/src/overlays/actors/ovl_En_River_Sound/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_River_Sound
-z_en_river_sound.c
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 b164e6aab..ae7da7d1b 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
@@ -14,7 +14,7 @@ void EnRiverSound_Init(Actor* thisx, PlayState* play);
void EnRiverSound_Update(Actor* thisx, PlayState* play);
void EnRiverSound_Draw(Actor* thisx, PlayState* play);
-const ActorInit En_River_Sound_InitVars = {
+ActorInit En_River_Sound_InitVars = {
ACTOR_EN_RIVER_SOUND,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -36,7 +36,7 @@ void EnRiverSound_Init(Actor* thisx, PlayState* play) {
pathIndex = RS_GET_PATH_INDEX(&this->actor);
this->actor.params = RS_GET_TYPE(&this->actor);
if (pathIndex == 0xFF) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -86,7 +86,7 @@ void EnRiverSound_Draw(Actor* thisx, PlayState* play) {
s16 params = this->actor.params;
if (params < RS_RIVER_DEFAULT_LOW_FREQ) {
- Actor_PlaySfxAtPos(&this->actor, gAudioEnvironmentalSfx[params]);
+ Actor_PlaySfx(&this->actor, gAudioEnvironmentalSfx[params]);
} else {
Audio_PlaySfxForRiver(&this->actor.projectedPos, freqScale[this->soundFreqIndex]);
}
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 b8dbcc513..eff4fbb47 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
@@ -45,6 +45,4 @@ typedef struct EnRiverSound {
/* 0x148 */ Vec3s* pathPoints;
} EnRiverSound; // size = 0x14C
-extern const ActorInit En_River_Sound_InitVars;
-
#endif // Z_EN_RIVER_SOUND_H
diff --git a/src/overlays/actors/ovl_En_Rr/overlay.cfg b/src/overlays/actors/ovl_En_Rr/overlay.cfg
deleted file mode 100644
index d7730c1f0..000000000
--- a/src/overlays/actors/ovl_En_Rr/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Rr
-z_en_rr.c
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 daf11baa6..85086d228 100644
--- a/src/overlays/actors/ovl_En_Rr/z_en_rr.c
+++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.c
@@ -28,7 +28,7 @@ void func_808FB710(EnRr* this, PlayState* play);
void func_808FAD1C(EnRr* this, PlayState* play);
void func_808FB398(EnRr* this, PlayState* play);
-const ActorInit En_Rr_InitVars = {
+ActorInit En_Rr_InitVars = {
ACTOR_EN_RR,
ACTORCAT_ENEMY,
FLAGS,
@@ -197,7 +197,7 @@ void func_808FA11C(EnRr* this) {
this->drawDmgEffFrozenSteamScale = 1.2750001f;
this->drawDmgEffAlpha = 1.0f;
this->actor.flags &= ~ACTOR_FLAG_400;
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 80);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 80);
}
void func_808FA19C(EnRr* this, PlayState* play) {
@@ -214,8 +214,8 @@ void func_808FA19C(EnRr* this, PlayState* play) {
}
void func_808FA238(EnRr* this, f32 arg1) {
- this->actor.speedXZ = arg1;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_LIKE_WALK);
+ this->actor.speed = arg1;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_LIKE_WALK);
}
void func_808FA260(EnRr* this) {
@@ -236,7 +236,7 @@ void func_808FA260(EnRr* this) {
this->actionFunc = func_808FB088;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_LIKE_UNARI);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_LIKE_UNARI);
}
void func_808FA344(EnRr* this) {
@@ -271,7 +271,7 @@ void func_808FA3F8(EnRr* this, Player* player) {
this->actor.flags &= ~ACTOR_FLAG_1;
this->unk_1F0 = 8;
this->unk_1E1 = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->unk_218 = 0.0f;
this->unk_210 = 0.0f;
this->unk_204 = 0.15f;
@@ -286,7 +286,7 @@ void func_808FA3F8(EnRr* this, Player* player) {
}
this->actionFunc = func_808FB1C0;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_SUISEN_DRINK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_SUISEN_DRINK);
}
void func_808FA4F4(EnRr* this, PlayState* play) {
@@ -296,7 +296,7 @@ void func_808FA4F4(EnRr* this, PlayState* play) {
f32 sp30;
f32 sp2C;
- if (player->stateFlags2 & 0x80) {
+ if (player->stateFlags2 & PLAYER_STATE2_80) {
player->actor.parent = NULL;
player->unk_AE8 = 100;
this->actor.flags |= ACTOR_FLAG_1;
@@ -331,7 +331,7 @@ void func_808FA4F4(EnRr* this, PlayState* play) {
player->actor.world.pos.z += sp30 * Math_CosS(this->actor.shape.rot.y);
func_800B8D50(play, &this->actor, sp30, this->actor.shape.rot.y, sp2C, sp38);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_SUISEN_THROW);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_SUISEN_THROW);
}
}
@@ -344,7 +344,7 @@ void func_808FA6B8(EnRr* this) {
} else {
this->unk_1EC = 40;
}
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, this->unk_1EC);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, this->unk_1EC);
this->unk_1E6 = 20;
this->unk_1F6 = 2500;
@@ -360,7 +360,7 @@ void func_808FA6B8(EnRr* this) {
}
this->actionFunc = func_808FB398;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_LIKE_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_LIKE_DAMAGE);
}
void func_808FA7AC(EnRr* this) {
@@ -405,7 +405,7 @@ void func_808FA910(EnRr* this) {
this->unk_1E4 = 0;
this->unk_214 = 0.0f;
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 40);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 40);
this->unk_210 = 0.0f;
for (i = 0; i < ARRAY_COUNT(this->unk_324); i++) {
@@ -415,7 +415,7 @@ void func_808FA910(EnRr* this) {
}
this->actionFunc = func_808FB42C;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_LIKE_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_LIKE_DEAD);
this->actor.flags &= ~ACTOR_FLAG_1;
}
@@ -482,8 +482,8 @@ s32 func_808FAA94(EnRr* this, PlayState* play) {
func_808FA910(this);
}
} else if (this->actor.colChkInfo.damageEffect == 1) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
- Actor_SetColorFilter(&this->actor, 0, 255, 0, 80);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 80);
this->unk_1EE = 80;
func_808FA9CC(this);
} else if (this->actor.colChkInfo.damageEffect == 3) {
@@ -571,10 +571,11 @@ void func_808FAF94(EnRr* this, PlayState* play) {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 10, 500, 0);
this->actor.world.rot.y = this->actor.shape.rot.y;
- if ((this->unk_1E6 == 0) && !(player->stateFlags2 & 0x80) && (Player_GetMask(play) != PLAYER_MASK_STONE) &&
+ if ((this->unk_1E6 == 0) && !(player->stateFlags2 & PLAYER_STATE2_80) &&
+ (Player_GetMask(play) != PLAYER_MASK_STONE) &&
(this->actor.xzDistToPlayer < (8421.053f * this->actor.scale.x))) {
func_808FA260(this);
- } else if ((this->actor.xzDistToPlayer < 400.0f) && (this->actor.speedXZ == 0.0f)) {
+ } else if ((this->actor.xzDistToPlayer < 400.0f) && (this->actor.speed == 0.0f)) {
func_808FA238(this, 2.0f);
}
}
@@ -631,7 +632,7 @@ void func_808FB1C0(EnRr* this, PlayState* play) {
Rumble_Request(this->actor.xyzDistToPlayerSq, 120, 2, 120);
if (!(this->unk_1E4 & 7)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EYEGOLE_DEMO_EYE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_DEMO_EYE);
}
player->unk_AE8 = 0;
@@ -714,8 +715,11 @@ void func_808FB42C(EnRr* this, PlayState* play) {
Item_DropCollectible(play, &this->actor.world.pos, ITEM00_SHIELD_HERO);
}
Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0x90);
- Actor_MarkForDeath(&this->actor);
- } else if (this->unk_1E4 == 88) {
+ Actor_Kill(&this->actor);
+ return;
+ }
+
+ if (this->unk_1E4 == 88) {
Vec3f sp74;
sp74.x = this->actor.world.pos.x;
@@ -738,7 +742,7 @@ void func_808FB680(EnRr* this, PlayState* play) {
} else {
Math_SmoothStepToS(&this->actor.shape.rot.y, BINANG_ROT180(this->actor.yawTowardsPlayer), 10, 1000, 0);
this->actor.world.rot.y = this->actor.shape.rot.y;
- if (this->actor.speedXZ == 0.0f) {
+ if (this->actor.speed == 0.0f) {
func_808FA238(this, 2.0f);
}
}
@@ -797,19 +801,21 @@ void EnRr_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
if (this->actor.params == ENRR_2) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
} else {
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.1f);
+ Math_StepToF(&this->actor.speed, 0.0f, 0.1f);
}
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, this->collider1.dim.radius, 0.0f, 0x5D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, this->collider1.dim.radius, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_40);
func_808FB794(this, play);
if (this->unk_1FC > 0) {
Player* player = GET_PLAYER(play);
- if (!(player->stateFlags2 & 0x80)) {
+ if (!(player->stateFlags2 & PLAYER_STATE2_80)) {
this->unk_1FC--;
if (this->unk_1FC == 0) {
this->collider1.base.ocFlags1 |= OC1_TYPE_PLAYER;
@@ -870,20 +876,18 @@ void EnRr_Update(Actor* thisx, PlayState* play) {
void EnRr_Draw(Actor* thisx, PlayState* play2) {
PlayState* play = play2;
EnRr* this = THIS;
- Mtx* matrix;
+ Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, 4 * sizeof(Mtx));
Vec3f* vecPtr;
s32 i;
EnRrStruct* ptr;
Vec3f spA4;
f32 temp_f20;
- matrix = GRAPH_ALLOC(play->state.gfxCtx, sizeof(Mtx) * 4);
-
OPEN_DISPS(play->state.gfxCtx);
func_8012C28C(play->state.gfxCtx);
- gSPSegment(POLY_OPA_DISP++, 0x0C, matrix);
+ gSPSegment(POLY_OPA_DISP++, 0x0C, mtx);
gSPSegment(POLY_OPA_DISP++, 0x08,
Gfx_TwoTexScroll(play->state.gfxCtx, 0, (this->unk_1E8 * 0) & 0x7F, (this->unk_1E8 * 0) & 0x3F, 0x20,
0x10, 1, (this->unk_1E8 * 0) & 0x3F, (this->unk_1E8 * -6) & 0x7F, 0x20, 0x10));
@@ -910,7 +914,7 @@ void EnRr_Draw(Actor* thisx, PlayState* play2) {
Matrix_RotateZYX(ptr->unk_1A.x, ptr->unk_1A.y, ptr->unk_1A.z, MTXMODE_APPLY);
Matrix_Push();
Matrix_Scale(temp_f20, 1.0f, temp_f20, MTXMODE_APPLY);
- Matrix_ToMtx(matrix);
+ Matrix_ToMtx(mtx);
if ((i & 1) != 0) {
Matrix_RotateYS(0x2000, MTXMODE_APPLY);
@@ -921,7 +925,7 @@ void EnRr_Draw(Actor* thisx, PlayState* play2) {
Matrix_MultVecX(1842.1053f, vecPtr++);
Matrix_MultVecX(-1842.1053f, vecPtr++);
Matrix_Pop();
- matrix++;
+ mtx++;
if (i == 3) {
Matrix_MultZero(&spA4);
}
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 072e78105..e996cfb12 100644
--- a/src/overlays/actors/ovl_En_Rr/z_en_rr.h
+++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.h
@@ -62,6 +62,4 @@ typedef struct EnRr {
/* 0x324 */ EnRrStruct unk_324[5];
} EnRr; // size = 0x3C4
-extern const ActorInit En_Rr_InitVars;
-
#endif // Z_EN_RR_H
diff --git a/src/overlays/actors/ovl_En_Rsn/overlay.cfg b/src/overlays/actors/ovl_En_Rsn/overlay.cfg
deleted file mode 100644
index f99efb1a6..000000000
--- a/src/overlays/actors/ovl_En_Rsn/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Rsn
-z_en_rsn.c
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 d7a4f9170..4f6dd1dc1 100644
--- a/src/overlays/actors/ovl_En_Rsn/z_en_rsn.c
+++ b/src/overlays/actors/ovl_En_Rsn/z_en_rsn.c
@@ -18,7 +18,7 @@ void EnRsn_Draw(Actor* thisx, PlayState* play);
void func_80C25D84(EnRsn* this, PlayState* play);
-const ActorInit En_Rsn_InitVars = {
+ActorInit En_Rsn_InitVars = {
ACTOR_EN_RSN,
ACTORCAT_NPC,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Rsn/z_en_rsn.h b/src/overlays/actors/ovl_En_Rsn/z_en_rsn.h
index b54014438..438a49b1e 100644
--- a/src/overlays/actors/ovl_En_Rsn/z_en_rsn.h
+++ b/src/overlays/actors/ovl_En_Rsn/z_en_rsn.h
@@ -16,6 +16,4 @@ typedef struct EnRsn {
/* 0x1DE */ Vec3s unk1DE;
} EnRsn; // size = 0x1E4
-extern const ActorInit En_Rsn_InitVars;
-
#endif // Z_EN_RSN_H
diff --git a/src/overlays/actors/ovl_En_Ru/overlay.cfg b/src/overlays/actors/ovl_En_Ru/overlay.cfg
deleted file mode 100644
index 408030385..000000000
--- a/src/overlays/actors/ovl_En_Ru/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ru
-z_en_ru.c
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 1a57cba7b..527d41b99 100644
--- a/src/overlays/actors/ovl_En_Ru/z_en_ru.c
+++ b/src/overlays/actors/ovl_En_Ru/z_en_ru.c
@@ -17,7 +17,7 @@ void EnRu_Draw(Actor* thisx, PlayState* play);
void EnRu_DoNothing(EnRu* this, PlayState* play);
-const ActorInit En_Ru_InitVars = {
+ActorInit En_Ru_InitVars = {
ACTOR_EN_RU,
ACTORCAT_NPC,
FLAGS,
@@ -138,35 +138,36 @@ s32 EnRu_ChangeAnim(SkelAnime* skelAnime, s16 animIndex) {
s32 EnRu_PlayWalkingSound(EnRu* this, PlayState* play) {
u8 leftWasGrounded;
u8 rightWasGrounded;
- s32 waterSfxId;
+ SurfaceSfxOffset surfaceSfxOffset;
s16 sfxId;
u8 isFootGrounded;
leftWasGrounded = this->isLeftFootGrounded;
rightWasGrounded = this->isRightFootGrounded;
- if (this->actor.bgCheckFlags & 0x20) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER) {
if (this->actor.depthInWater < 20.0f) {
- waterSfxId = NA_SE_PL_WALK_WATER0 - SFX_FLAG;
+ surfaceSfxOffset = SURFACE_SFX_OFFSET_WATER_SHALLOW;
} else {
- waterSfxId = NA_SE_PL_WALK_WATER1 - SFX_FLAG;
+ surfaceSfxOffset = SURFACE_SFX_OFFSET_WATER_DEEP;
}
- sfxId = waterSfxId + SFX_FLAG;
+ sfxId = NA_SE_PL_WALK_GROUND + surfaceSfxOffset;
} else {
- sfxId = SurfaceType_GetSfx(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) + SFX_FLAG;
+ sfxId = NA_SE_PL_WALK_GROUND +
+ SurfaceType_GetSfxOffset(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId);
}
this->isLeftFootGrounded = isFootGrounded = SubS_IsFloorAbove(play, &this->leftFootPos, -6.0f);
if (this->isLeftFootGrounded && !leftWasGrounded && isFootGrounded) {
- Actor_PlaySfxAtPos(&this->actor, sfxId);
+ Actor_PlaySfx(&this->actor, sfxId);
}
this->isRightFootGrounded = isFootGrounded = SubS_IsFloorAbove(play, &this->rightFootPos, -6.0f);
if (this->isRightFootGrounded && !rightWasGrounded && isFootGrounded) {
- Actor_PlaySfxAtPos(&this->actor, sfxId);
+ Actor_PlaySfx(&this->actor, sfxId);
}
return false;
@@ -250,7 +251,7 @@ void EnRu_Update(Actor* thisx, PlayState* play) {
EnRu* this = THIS;
this->actionFunc(this, play);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
EnRu_UpdateModel(this, play);
EnRu_UpdateCollider(this, play);
}
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 b1144f88d..081f3bbd8 100644
--- a/src/overlays/actors/ovl_En_Ru/z_en_ru.h
+++ b/src/overlays/actors/ovl_En_Ru/z_en_ru.h
@@ -38,6 +38,4 @@ typedef struct EnRu {
/* 0x450 */ s16 blinkTimer;
} EnRu; // size = 0x454
-extern const ActorInit En_Ru_InitVars;
-
#endif // Z_EN_RU_H
diff --git a/src/overlays/actors/ovl_En_Ruppecrow/overlay.cfg b/src/overlays/actors/ovl_En_Ruppecrow/overlay.cfg
deleted file mode 100644
index 63f0bbb60..000000000
--- a/src/overlays/actors/ovl_En_Ruppecrow/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ruppecrow
-z_en_ruppecrow.c
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 98f7b0a11..e270f1515 100644
--- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c
+++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c
@@ -40,7 +40,7 @@ void EnRuppecrow_FlyWhileDroppingRupees(EnRuppecrow*, PlayState*);
void EnRuppecrow_UpdateSpeed(EnRuppecrow*, PlayState*);
void EnRuppecrow_FlyToDespawn(EnRuppecrow*, PlayState*);
-const ActorInit En_Ruppecrow_InitVars = {
+ActorInit En_Ruppecrow_InitVars = {
ACTOR_EN_RUPPECROW,
ACTORCAT_ENEMY,
FLAGS,
@@ -130,7 +130,8 @@ s32 EnRuppecrow_UpdateCollision(EnRuppecrow* this, PlayState* play) {
this->collider.elements->dim.worldSphere.center.z = this->actor.world.pos.z;
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
- Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f, 25.0f, 50.0f, 0x07);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f, 25.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4);
return true;
}
@@ -162,7 +163,7 @@ s32 EnRuppecrow_ReachedPointClockwise(EnRuppecrow* this, Path* path, s32 pointIn
}
}
- func_8017B7F8(&point, RADF_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d);
+ func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d);
if (((this->actor.world.pos.x * px) + (pz * this->actor.world.pos.z) + d) > 0.0f) {
reached = true;
}
@@ -197,7 +198,7 @@ s32 EnRuppecrow_ReachedPointCounterClockwise(EnRuppecrow* this, Path* path, s32
}
}
- func_8017B7F8(&point, RADF_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d);
+ func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d);
if (((this->actor.world.pos.x * px) + (pz * this->actor.world.pos.z) + d) > 0.0f) {
reached = true;
}
@@ -240,7 +241,7 @@ s32 EnRuppecrow_CanSpawnBlueRupees(PlayState* play) {
case PLAYER_FORM_ZORA:
return false;
case PLAYER_FORM_HUMAN:
- if (player->stateFlags1 & 0x800000) {
+ if (player->stateFlags1 & PLAYER_STATE1_800000) {
return true;
} else {
return false;
@@ -257,7 +258,7 @@ void EnRuppecrow_UpdateRupees(EnRuppecrow* this) {
for (rupeeIndex = 0; rupeeIndex < ENRUPPECROW_RUPEE_COUNT; rupeeIndex++) {
rupee = this->rupees[rupeeIndex];
if (rupee != NULL && rupee->unk152 == 0) {
- Actor_MarkForDeath(&rupee->actor);
+ Actor_Kill(&rupee->actor);
}
}
}
@@ -268,7 +269,7 @@ void EnRuppecrow_SpawnRupee(EnRuppecrow* this, PlayState* play) {
EnItem00* rupee;
s16 rupeeIndex = this->rupeeIndex;
- if (!(player->stateFlags3 & 0x1000)) {
+ if (!(player->stateFlags3 & PLAYER_STATE3_1000)) {
xOffset = (this->rupeeIndex & 1) ? 10.0f : -10.0f;
} else {
xOffset = 0.0f;
@@ -282,7 +283,7 @@ void EnRuppecrow_SpawnRupee(EnRuppecrow* this, PlayState* play) {
this->rupees[rupeeIndex] = rupee;
this->rupees[rupeeIndex]->actor.gravity = -5.0f;
this->rupees[rupeeIndex]->actor.velocity.y = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_RUPY_FALL);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_RUPY_FALL);
rupee = this->rupees[rupeeIndex];
rupee->unk152 = 60;
this->rupees[rupeeIndex]->actor.flags |= ACTOR_FLAG_10;
@@ -293,7 +294,7 @@ void EnRuppecrow_SpawnRupee(EnRuppecrow* this, PlayState* play) {
this->rupees[rupeeIndex] = rupee;
this->rupees[rupeeIndex]->actor.gravity = -5.0f;
this->rupees[rupeeIndex]->actor.velocity.y = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_RUPY_FALL);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_RUPY_FALL);
rupee = this->rupees[rupeeIndex];
rupee->unk152 = 60;
this->rupees[rupeeIndex]->actor.flags |= ACTOR_FLAG_10;
@@ -305,7 +306,7 @@ void EnRuppecrow_SpawnRupee(EnRuppecrow* this, PlayState* play) {
this->rupees[rupeeIndex] = rupee;
this->rupees[rupeeIndex]->actor.gravity = -5.0f;
this->rupees[rupeeIndex]->actor.velocity.y = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_RUPY_FALL);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_RUPY_FALL);
rupee = this->rupees[rupeeIndex];
rupee->unk152 = 60;
this->rupees[rupeeIndex]->actor.flags |= ACTOR_FLAG_10;
@@ -316,7 +317,7 @@ void EnRuppecrow_SpawnRupee(EnRuppecrow* this, PlayState* play) {
this->rupees[rupeeIndex] = rupee;
this->rupees[rupeeIndex]->actor.gravity = -5.0f;
this->rupees[rupeeIndex]->actor.velocity.y = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_RUPY_FALL);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_RUPY_FALL);
rupee = this->rupees[rupeeIndex];
rupee->unk152 = 60;
this->rupees[rupeeIndex]->actor.flags |= ACTOR_FLAG_10;
@@ -329,7 +330,7 @@ void EnRuppecrow_UpdatePosition(EnRuppecrow* this, PlayState* play) {
Vec3s nextPointDirection;
EnRuppecrow_GetPointDirection(this->path, this->currentPoint, &this->actor.world, &nextPointDirection);
- if (this->actor.bgCheckFlags & 0x8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
nextPointDirection.y = this->actor.wallYaw;
}
@@ -407,7 +408,7 @@ void EnRuppecrow_UpdateSpeed(EnRuppecrow* this, PlayState* play) {
this->speedModifier = 7.0f;
break;
case PLAYER_FORM_GORON:
- if (player->stateFlags3 & 0x1000) { // Goron Link is curled
+ if (player->stateFlags3 & PLAYER_STATE3_1000) { // Goron Link is curled
this->speedModifier = 19.0f;
} else {
this->speedModifier = 7.0f;
@@ -417,7 +418,7 @@ void EnRuppecrow_UpdateSpeed(EnRuppecrow* this, PlayState* play) {
this->speedModifier = 7.0f;
break;
case PLAYER_FORM_HUMAN:
- if (player->stateFlags1 & 0x800000) {
+ if (player->stateFlags1 & PLAYER_STATE1_800000) {
this->speedModifier = 16.0f;
} else {
this->speedModifier = 7.0f;
@@ -438,18 +439,18 @@ void EnRuppecrow_UpdateSpeed(EnRuppecrow* this, PlayState* play) {
void EnRuppecrow_HandleDeath(EnRuppecrow* this) {
f32 scale;
- this->actor.speedXZ *= Math_CosS(this->actor.world.rot.x);
+ this->actor.speed *= Math_CosS(this->actor.world.rot.x);
this->actor.velocity.y = 0.0f;
Animation_Change(&this->skelAnime, &gGuayFlyAnim, 0.4f, 0.0f, 0.0f, ANIMMODE_LOOP_INTERP, -3.0f);
this->actor.shape.yOffset = 0.0f;
this->actor.targetArrowOffset = 0.0f;
- this->actor.bgCheckFlags &= ~0x1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
scale = this->actor.scale.x * 100.0f;
this->actor.world.pos.y += 20.0f * scale;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KAICHO_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KAICHO_DEAD);
this->unk_2CC = 0.5f;
if (this->actor.colChkInfo.damageEffect == 0x3) {
@@ -464,9 +465,9 @@ void EnRuppecrow_HandleDeath(EnRuppecrow* this) {
this->unk_2C8 = 5.0f;
}
- Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, 0x0, 0x28);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 40);
if (this->actor.flags & ACTOR_FLAG_8000) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
this->collider.base.acFlags &= ~AC_ON;
@@ -492,7 +493,7 @@ void EnRuppecrow_HandleSong(EnRuppecrow* this, PlayState* play) {
Player* player = GET_PLAYER(play);
EnRuppecrow_UpdatePosition(this, play);
- if (this->actor.xzDistToPlayer < 1000.0f && EnRuppecrow_CheckPlayedMatchingSong(play)) {
+ if ((this->actor.xzDistToPlayer < 1000.0f) && EnRuppecrow_CheckPlayedMatchingSong(play)) {
// If Link is in front, the guay will turn around and go the other way
if (Actor_IsFacingPlayer(&this->actor, 0x4000)) {
this->isGoingCounterClockwise |= 1;
@@ -503,14 +504,14 @@ void EnRuppecrow_HandleSong(EnRuppecrow* this, PlayState* play) {
}
}
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
this->actionFunc = EnRuppecrow_HandleSongCutscene;
}
- if (player->stateFlags2 & 0x8000000) {
- Math_ApproachF(&this->actor.speedXZ, 0.0f, 0.1f, 1.0f);
+ if (player->stateFlags2 & PLAYER_STATE2_8000000) {
+ Math_ApproachF(&this->actor.speed, 0.0f, 0.1f, 1.0f);
} else {
- Math_ApproachF(&this->actor.speedXZ, 6.0f, 0.1f, 0.1f);
+ Math_ApproachF(&this->actor.speed, 6.0f, 0.1f, 0.1f);
}
Actor_MoveWithoutGravity(&this->actor);
@@ -518,19 +519,19 @@ void EnRuppecrow_HandleSong(EnRuppecrow* this, PlayState* play) {
this->actor.shape.yOffset = Math_SinS(this->yOffset) * 500.0f;
if ((play->state.frames % 43) == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KAICHO_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KAICHO_CRY);
}
}
void EnRuppecrow_HandleSongCutscene(EnRuppecrow* this, PlayState* play) {
EnRuppecrow_UpdatePosition(this, play);
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_Start(this->actor.cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_Start(this->actor.csId, &this->actor);
EnRuppecrow_UpdateSpeed(this, play);
this->actionFunc = EnRuppecrow_FlyWhileDroppingRupees;
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
Actor_MoveWithoutGravity(&this->actor);
@@ -546,16 +547,16 @@ void EnRuppecrow_FlyWhileDroppingRupees(EnRuppecrow* this, PlayState* play) {
//! @bug: Source of the "Termina Field Guay Glitch"; guay will no longer fall if killed after this point
this->actor.gravity = 0.0f;
- Math_ApproachF(&this->actor.speedXZ, 6.0f, 0.2f, 0.5f);
+ Math_ApproachF(&this->actor.speed, 6.0f, 0.2f, 0.5f);
Math_ApproachF(&this->actor.velocity.y, 3.0f, 0.2f, 0.5f);
this->actionFunc = EnRuppecrow_FlyToDespawn;
this->skelAnime.playSpeed = 1.0f;
Actor_MoveWithGravity(&this->actor);
} else {
- if (ActorCutscene_GetCurrentIndex() != this->actor.cutscene) {
+ if (CutsceneManager_GetCurrentCsId() != this->actor.csId) {
EnRuppecrow_UpdateSpeed(this, play);
- Math_ApproachF(&this->actor.speedXZ, this->speedModifier, 0.2f, 0.5f);
+ Math_ApproachF(&this->actor.speed, this->speedModifier, 0.2f, 0.5f);
}
Actor_MoveWithoutGravity(&this->actor);
@@ -563,21 +564,21 @@ void EnRuppecrow_FlyWhileDroppingRupees(EnRuppecrow* this, PlayState* play) {
this->actor.shape.yOffset = Math_SinS(this->yOffset) * 500.0f;
if ((play->state.frames % 43) == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KAICHO_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KAICHO_CRY);
}
}
}
void EnRuppecrow_FlyToDespawn(EnRuppecrow* this, PlayState* play) {
- if (this->actor.bgCheckFlags & 0x8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
this->actor.world.rot.y *= -0x1;
}
- Math_ApproachF(&this->actor.speedXZ, this->speedModifier, 0.1f, 0.1f);
+ Math_ApproachF(&this->actor.speed, this->speedModifier, 0.1f, 0.1f);
Math_ApproachF(&this->actor.velocity.y, 3.0f, 0.2f, 0.5f);
if (this->actor.world.pos.y > 1000.0f || this->actor.xzDistToPlayer > 2000.0f) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
this->yOffset += 0x800;
this->actor.shape.yOffset = Math_SinS(this->yOffset) * 500.0f;
@@ -585,13 +586,13 @@ void EnRuppecrow_FlyToDespawn(EnRuppecrow* this, PlayState* play) {
Actor_MoveWithGravity(&this->actor);
if ((play->state.frames % 43) == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KAICHO_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KAICHO_CRY);
}
}
}
void EnRuppecrow_FallToDespawn(EnRuppecrow* this, PlayState* play) {
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.5f);
+ Math_StepToF(&this->actor.speed, 0.0f, 0.5f);
if (this->currentEffect != ENRUPPECROW_EFFECT_ICE) {
Math_StepToF(&this->unk_2C8, 0.0f, 0.05f);
@@ -608,13 +609,13 @@ void EnRuppecrow_FallToDespawn(EnRuppecrow* this, PlayState* play) {
this->actor.shape.rot.z += 0x1780;
}
- if (this->actor.bgCheckFlags & 0x1 || this->actor.floorHeight == BGCHECK_Y_MIN) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->actor.floorHeight == BGCHECK_Y_MIN)) {
EnRuppecrow_ShatterIce(this, play);
func_800B3030(play, &this->actor.world.pos, &gZeroVec3f, &gZeroVec3f, (this->actor.scale.x * 10000.0f), 0x0,
0x0);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 0xB, NA_SE_EN_EXTINCT);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
}
@@ -643,7 +644,7 @@ void EnRuppecrow_Init(Actor* thisx, PlayState* play2) {
if (this->path != NULL) {
this->actionFunc = EnRuppecrow_HandleSong;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&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 620e4b9ac..887cd8c6b 100644
--- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.h
+++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.h
@@ -37,6 +37,4 @@ typedef struct EnRuppecrow {
/* 0x2D4 */ Vec3f limbPos[ENRUPPECROW_LIMB_POS_COUNT];
} EnRuppecrow; // size = 0x304
-extern const ActorInit En_Ruppecrow_InitVars;
-
#endif // Z_EN_RUPPECROW_H
diff --git a/src/overlays/actors/ovl_En_Rz/overlay.cfg b/src/overlays/actors/ovl_En_Rz/overlay.cfg
deleted file mode 100644
index 10c34f949..000000000
--- a/src/overlays/actors/ovl_En_Rz/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Rz
-z_en_rz.c
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 902e60419..c870027bb 100644
--- a/src/overlays/actors/ovl_En_Rz/z_en_rz.c
+++ b/src/overlays/actors/ovl_En_Rz/z_en_rz.c
@@ -5,6 +5,7 @@
*/
#include "z_en_rz.h"
+#include "assets/objects/gameplay_keep/gameplay_keep.h"
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8)
@@ -15,22 +16,40 @@ void EnRz_Destroy(Actor* thisx, PlayState* play);
void EnRz_Update(Actor* thisx, PlayState* play);
void EnRz_Draw(Actor* thisx, PlayState* play);
+void EnRz_ActorShadowFunc(Actor* thisx, Lights* mapper, PlayState* play);
+void EnRz_ChangeAnim(PlayState*, EnRz*, s16 animIndex, u8 animMode, f32 morphFrames);
+s32 EnRz_SetupPath(EnRz* this, PlayState* play);
+EnRz* EnRz_FindSister(EnRz* this, PlayState*);
void func_80BFC058(EnRz* this, PlayState* play);
void func_80BFC078(EnRz* this, PlayState* play);
-void func_80BFC19C(EnRz* this, PlayState* play);
-void func_80BFC214(EnRz* this, PlayState* play);
-void func_80BFC270(EnRz* this, PlayState* play);
-void func_80BFC2F4(EnRz* this, PlayState* play);
-void func_80BFC36C(EnRz* this, PlayState* play);
void func_80BFC3F8(EnRz* this, PlayState* play);
-void func_80BFC608(EnRz* this, PlayState* play);
void func_80BFC674(EnRz* this, PlayState* play);
-void func_80BFC728(EnRz* this, PlayState* play);
void func_80BFC7E0(EnRz* this, PlayState* play);
-void func_80BFC8F8(EnRz* this, PlayState* play);
+void EnRz_Walk(EnRz* this, PlayState* play);
-#if 0
-const ActorInit En_Rz_InitVars = {
+#define EN_RZ_STATE_1 (1 << 0)
+#define EN_RZ_STATE_2 (1 << 1)
+
+typedef enum {
+ /* 0 */ EN_RZ_ANIM_THINKING,
+ /* 1 */ EN_RZ_ANIM_STANDING,
+ /* 2 */ EN_RZ_ANIM_WALKING,
+ /* 3 */ EN_RZ_ANIM_SITTING,
+ /* 4 */ EN_RZ_ANIM_APPLAUDING,
+ /* 5 */ EN_RZ_ANIM_ON_KNEES,
+ /* 6 */ EN_RZ_ANIM_DANCE,
+ /* 7 */ EN_RZ_ANIM_LINK_NORMAL_WAIT_FREE,
+ /* 8 */ EN_RZ_ANIM_LINK_DANCE,
+ /* 9 */ EN_RZ_ANIM_MAX
+} EnRzAnimation;
+
+typedef enum {
+ /* 0 */ EN_RZ_PATHSTATUS_NORMAL, //!< not near waypoint
+ /* 1 */ EN_RZ_PATHSTATUS_AT_POINT, //!< no path or new waypoint
+ /* 2 */ EN_RZ_PATHSTATUS_END //!< reached end of path
+} EnRzPathStatus;
+
+ActorInit En_Rz_InitVars = {
ACTOR_EN_RZ,
ACTORCAT_NPC,
FLAGS,
@@ -42,80 +61,649 @@ const ActorInit En_Rz_InitVars = {
(ActorFunc)EnRz_Draw,
};
-// static ColliderCylinderInit sCylinderInit = {
-static ColliderCylinderInit D_80BFCCF4 = {
- { COLTYPE_NONE, AT_NONE, AC_ON | AC_TYPE_ENEMY, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, },
- { ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, },
+static TexturePtr sEyeTextures[] = {
+ object_rz_Tex_00BC50, object_rz_Tex_00C190, object_rz_Tex_00C590, object_rz_Tex_00C990, object_rz_Tex_00CD90,
+};
+
+static ColliderCylinderInit sCylinderInit = {
+ {
+ COLTYPE_NONE,
+ AT_NONE,
+ AC_ON | AC_TYPE_ENEMY,
+ OC1_ON | OC1_TYPE_ALL,
+ OC2_TYPE_1,
+ COLSHAPE_CYLINDER,
+ },
+ {
+ ELEMTYPE_UNK0,
+ { 0x00000000, 0x00, 0x00 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_ON,
+ OCELEM_ON,
+ },
{ 20, 40, 0, { 0, 0, 0 } },
};
-#endif
+void EnRz_Init(Actor* thisx, PlayState* play) {
+ EnRz* this = THIS;
+ s16 csId = this->actor.csId;
+ s32 i;
-extern ColliderCylinderInit D_80BFCCF4;
+ for (i = 0; i < ARRAY_COUNT(this->csIdList); i++) {
+ this->csIdList[i] = csId;
+ if (csId != CS_ID_NONE) {
+ this->actor.csId = csId;
+ csId = CutsceneManager_GetAdditionalCsId(this->actor.csId);
+ }
+ }
-extern UNK_TYPE D_06003A20;
-extern UNK_TYPE D_0600D768;
+ Actor_SetScale(&this->actor, 0.01f);
+ ActorShape_Init(&this->actor.shape, 0.0f, EnRz_ActorShadowFunc, 20.0f);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/EnRz_Init.s")
+ // @bug this alignment is because of player animations, but should be using ALIGN16
+ SkelAnime_InitFlex(play, &this->skelAnime, &object_rz_Skel_00D8D8, &gRosaSistersStandingAnim,
+ (uintptr_t)this->jointTable & ~0xF, (uintptr_t)this->morphTable & ~0xF, OBJECT_RZ_LIMB_MAX);
+ Animation_PlayLoop(&this->skelAnime, &gRosaSistersStandingAnim);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFB780.s")
+ Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
+ this->actor.colChkInfo.mass = MASS_IMMOVABLE;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFB864.s")
+ this->actionFunc = func_80BFC058;
+ EnRz_SetupPath(this, play);
+ this->animIndex = EN_RZ_ANIM_MAX;
+ this->actor.targetMode = 0;
+ this->actor.terminalVelocity = -9.0f;
+ this->actor.gravity = -1.0f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFB9E4.s")
+ switch (EN_RZ_GET_TYPE(thisx)) {
+ case EN_RZ_TYPE_1:
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_77_04)) {
+ Actor_Kill(&this->actor);
+ return;
+ }
+ EnRz_ChangeAnim(play, this, EN_RZ_ANIM_SITTING, ANIMMODE_LOOP, 0.0f);
+ this->actionFunc = func_80BFC674;
+ this->actor.shape.yOffset = -1500.0f;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFBA1C.s")
+ case EN_RZ_TYPE_2:
+ this->actor.flags |= ACTOR_FLAG_10;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_04)) {
+ EnRz_ChangeAnim(play, this, EN_RZ_ANIM_LINK_DANCE, ANIMMODE_LOOP, 0.0f);
+ } else {
+ EnRz_ChangeAnim(play, this, EN_RZ_ANIM_DANCE, ANIMMODE_LOOP, 0.0f);
+ }
+ this->actionFunc = func_80BFC3F8;
+ this->sister = EnRz_FindSister(this, play);
+ this->actor.uncullZoneForward = 300.0f;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFBA50.s")
+ default: // EN_RZ_TYPE_0
+ this->stateFlags |= EN_RZ_STATE_2;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_04)) {
+ Actor_Kill(&this->actor);
+ return;
+ }
+ EnRz_ChangeAnim(play, this, EN_RZ_ANIM_WALKING, ANIMMODE_LOOP, 0.0f);
+ this->actionFunc = EnRz_Walk;
+ if (EN_RZ_GET_SISTER(&this->actor) == EN_RZ_JUDO) {
+ this->actor.textId = 0x291C;
+ } else { // EN_RZ_MARILLA
+ this->actor.textId = 0x2920;
+ }
+ break;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFBB44.s")
+ if (EN_RZ_GET_SISTER(&this->actor) == EN_RZ_JUDO) {
+ this->cueType = CS_CMD_ACTOR_CUE_550;
+ } else { // EN_RZ_MARILLA
+ this->cueType = CS_CMD_ACTOR_CUE_551;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFBC78.s")
+ this->cueId = 0;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFBCEC.s")
+/**
+ * Custom shadow draw function of type ActorShadowFunc.
+ */
+void EnRz_ActorShadowFunc(Actor* thisx, Lights* mapper, PlayState* play) {
+ Vec3f oldPos;
+ EnRz* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFBD54.s")
+ if (this->animIndex == EN_RZ_ANIM_LINK_DANCE) {
+ f32 tempScale = (((27.0f - this->shadowPos.y) + this->actor.world.pos.y) * ((1 / 2.25f) * 0.001f)) + 0.01f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFBDA0.s")
+ this->actor.scale.x = tempScale;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFBDFC.s")
+ Math_Vec3f_Copy(&oldPos, &this->actor.world.pos);
+ Math_Vec3f_Copy(&this->actor.world.pos, &this->shadowPos);
+ func_800B4AEC(play, &this->actor, 50.0f);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/EnRz_Destroy.s")
+ if (oldPos.y < this->actor.floorHeight) {
+ this->actor.world.pos.y = this->actor.floorHeight;
+ } else {
+ this->actor.world.pos.y = oldPos.y;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFBE70.s")
+ ActorShadow_DrawCircle(&this->actor, mapper, play);
+ Math_Vec3f_Copy(&this->actor.world.pos, &oldPos);
+ this->actor.scale.x = 0.01f;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFBFAC.s")
+void EnRz_ChangeAnim(PlayState* play, EnRz* this, s16 animIndex, u8 animMode, f32 morphFrames) {
+ // N.B. both of these arrays must be the same length due to how the animations are chosen
+ static AnimationHeader* sJudoAnimations[] = {
+ &gRosaSistersThinkingAnim, &gRosaSistersStandingAnim, &gRosaSistersWalkingWhileThinkingAnim,
+ &gRosaSistersSittingAnim, &gRosaSistersApplaudingAnim, &gRosaSistersOnKneesAnim,
+ &gRosaSistersDancingAnim,
+ };
+ static AnimationHeader* sMarillaAnimations[] = {
+ &gRosaSistersStandingAnim, &gRosaSistersStandingAnim, &gRosaSistersWalkingAnim, &gRosaSistersSittingAnim,
+ &gRosaSistersApplaudingAnim, &gRosaSistersOnKneesAnim, &gRosaSistersDancingAnim,
+ };
+ static PlayerAnimationHeader* sPlayerAnimations[] = {
+ &gPlayerAnim_link_normal_wait_free,
+ &gPlayerAnim_alink_dance_loop,
+ };
+ f32 endFrame;
+ AnimationHeader** animationPtr;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFC058.s")
+ if (EN_RZ_GET_SISTER(&this->actor) == EN_RZ_JUDO) {
+ animationPtr = sJudoAnimations;
+ } else { // EN_RZ_MARILLA
+ animationPtr = sMarillaAnimations;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFC078.s")
+ if ((animIndex >= EN_RZ_ANIM_THINKING) && (animIndex < EN_RZ_ANIM_MAX) &&
+ ((animIndex != this->animIndex) || (animMode != ANIMMODE_LOOP))) {
+ if (animIndex >= ARRAY_COUNT(sJudoAnimations)) {
+ endFrame = Animation_GetLastFrame(sPlayerAnimations[animIndex - ARRAY_COUNT(sJudoAnimations)]);
+ if (animMode == ANIMMODE_LOOP) {
+ PlayerAnimation_Change(play, &this->skelAnime,
+ sPlayerAnimations[animIndex - ARRAY_COUNT(sJudoAnimations)], 2.0f / 3.0f, 0.0f,
+ endFrame, ANIMMODE_LOOP, morphFrames);
+ } else {
+ PlayerAnimation_Change(play, &this->skelAnime,
+ sPlayerAnimations[animIndex - ARRAY_COUNT(sJudoAnimations)], 2.0f / 3.0f, 0.0f,
+ endFrame, ANIMMODE_LOOP, morphFrames);
+ }
+ } else {
+ Animation_Change(&this->skelAnime, animationPtr[animIndex], 1.0f, 0.0f,
+ Animation_GetLastFrame(animationPtr[animIndex]), animMode, morphFrames);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFC19C.s")
+ this->animIndex = animIndex;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFC214.s")
+void func_80BFB9E4(PlayState* play, EnRz* this, s16 animIndex) {
+ EnRz_ChangeAnim(play, this, animIndex, ANIMMODE_LOOP, -5.0f);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFC270.s")
+void func_80BFBA1C(PlayState* play, EnRz* this, s16 animIndex) {
+ EnRz_ChangeAnim(play, this, animIndex, ANIMMODE_LOOP, 0.0f);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFC2F4.s")
+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 (this->path != NULL) {
+ Path* path = this->path;
+ Vec3s* points = (Vec3s*)Lib_SegmentedToVirtual(path->points);
+ f32 diffX = points->x - this->actor.world.pos.x;
+ f32 diffY = points->z - this->actor.world.pos.z;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFC36C.s")
+ if ((SQ(diffX) + SQ(diffY)) < SQ(10.0f)) {
+ this->curPointIndex = 0;
+ this->stateFlags &= ~EN_RZ_STATE_1;
+ } else {
+ this->curPointIndex = path->count - 1;
+ this->stateFlags |= EN_RZ_STATE_1;
+ return true;
+ }
+ }
+ } else {
+ this->path = NULL;
+ this->curPointIndex = 0;
+ }
+ return false;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFC3F8.s")
+EnRzPathStatus EnRz_GetPathStatus(EnRz* this) {
+ Path* path = this->path;
+ Vec3s* curPoint;
+ f32 diffX;
+ f32 diffZ;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFC608.s")
+ if (path == NULL) {
+ return EN_RZ_PATHSTATUS_AT_POINT;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFC674.s")
+ curPoint = &((Vec3s*)Lib_SegmentedToVirtual(path->points))[this->curPointIndex];
+ diffX = curPoint->x - this->actor.world.pos.x;
+ diffZ = curPoint->z - this->actor.world.pos.z;
+ this->actor.world.rot.y = Math_Atan2S(diffX, diffZ);
+ Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.world.rot.y, 2, 0x07D0, 0xC8);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFC728.s")
+ if ((SQ(diffX) + SQ(diffZ)) < SQ(10.0f)) {
+ if (this->stateFlags & EN_RZ_STATE_1) {
+ this->curPointIndex--;
+ if (this->curPointIndex < 0) {
+ return EN_RZ_PATHSTATUS_END;
+ }
+ } else {
+ this->curPointIndex++;
+ if (this->curPointIndex >= path->count) {
+ return EN_RZ_PATHSTATUS_END;
+ }
+ }
+ return EN_RZ_PATHSTATUS_AT_POINT;
+ }
+ return EN_RZ_PATHSTATUS_NORMAL;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFC7E0.s")
+s32 EnRz_CanTalk(EnRz* this, PlayState* play) {
+ if ((this->actor.xzDistToPlayer < 80.0f) && (fabsf(this->actor.playerHeightRel) < 20.0f) &&
+ Player_IsFacingActor(&this->actor, 0x3000, play)) {
+ return true;
+ }
+ return false;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFC8AC.s")
+s32 func_80BFBCEC(EnRz* this, PlayState* play) {
+ s32 pad;
+ Player* player = GET_PLAYER(play);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFC8F8.s")
+ if ((this->actor.xzDistToPlayer < 100.0f) && Actor_IsFacingPlayer(&this->actor, 0x3000) &&
+ (player->stateFlags2 & PLAYER_STATE2_2000000)) {
+ return true;
+ }
+ return false;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/EnRz_Update.s")
+s32 EnRz_UpdateSkelAnime(EnRz* this, PlayState* play) {
+ if (this->animIndex < EN_RZ_ANIM_LINK_NORMAL_WAIT_FREE) {
+ return SkelAnime_Update(&this->skelAnime);
+ } else {
+ return PlayerAnimation_Update(play, &this->skelAnime);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFCAD0.s")
+EnRz* EnRz_FindSister(EnRz* this, PlayState* play) {
+ Actor* npc = play->actorCtx.actorLists[ACTORCAT_NPC].first;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/EnRz_Draw.s")
+ while (npc != NULL) {
+ if ((npc->id == ACTOR_EN_RZ) && (EN_RZ_GET_TYPE(&this->actor) == EN_RZ_GET_TYPE(npc))) {
+ if (&this->actor != npc) {
+ return (EnRz*)npc;
+ }
+ }
+ npc = npc->next;
+ }
+ return NULL;
+}
+
+void func_80BFBDFC(PlayState* play) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_80)) {
+ func_80151BB4(play, 0x27);
+ }
+ func_80151BB4(play, 0xC);
+}
+
+void EnRz_Destroy(Actor* thisx, PlayState* play) {
+ EnRz* this = THIS;
+
+ Collider_DestroyCylinder(play, &this->collider);
+}
+
+s32 func_80BFBE70(EnRz* this, PlayState* play) {
+ u16 cueId;
+
+ if ((EN_RZ_GET_SISTER(&this->actor) == EN_RZ_JUDO) && (this->animIndex == EN_RZ_ANIM_APPLAUDING)) {
+ func_800B9010(&this->actor, NA_SE_EV_CLAPPING_2P - SFX_FLAG);
+ }
+
+ if (Cutscene_IsCueInChannel(play, this->cueType)) {
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType));
+ cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id;
+ if (this->cueId != cueId) {
+ this->cueId = cueId;
+ switch (this->cueId) {
+ case 1:
+ func_80BFBA1C(play, this, EN_RZ_ANIM_STANDING);
+ break;
+
+ case 2:
+ func_80BFBA1C(play, this, EN_RZ_ANIM_ON_KNEES);
+ break;
+
+ case 3:
+ func_80BFBA1C(play, this, EN_RZ_ANIM_APPLAUDING);
+ break;
+
+ case 4:
+ func_80BFBA1C(play, this, EN_RZ_ANIM_LINK_DANCE);
+ break;
+ }
+ }
+ return true;
+ }
+
+ return false;
+}
+
+s32 func_80BFBFAC(EnRz* this, PlayState* play) {
+ if (this->actor.csId == CS_ID_NONE) {
+ Message_StartTextbox(play, 0x2925, &this->actor);
+ this->actionFunc = func_80BFC078;
+ } else if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->actor.csId);
+ return false;
+ } else if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_Start(this->actor.csId, &this->actor);
+ return true;
+ } else {
+ CutsceneManager_Queue(this->actor.csId);
+ }
+ return false;
+}
+
+void func_80BFC058(EnRz* this, PlayState* play) {
+ EnRz_UpdateSkelAnime(this, play);
+}
+
+void func_80BFC078(EnRz* this, PlayState* play) {
+ s32 pad;
+ Vec3f sp28;
+
+ EnRz_UpdateSkelAnime(this, play);
+
+ if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
+ switch (play->msgCtx.currentTextId) {
+ case 0x2927:
+ case 0x2928:
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
+ SET_WEEKEVENTREG(WEEKEVENTREG_77_04);
+ break;
+
+ default:
+ Message_CloseTextbox(play);
+ this->actionFunc = func_80BFC3F8;
+ if (this->animIndex != EN_RZ_ANIM_LINK_DANCE) {
+ func_80BFB9E4(play, this, EN_RZ_ANIM_DANCE);
+ if (this->sister != NULL) {
+ func_80BFB9E4(play, this->sister, EN_RZ_ANIM_DANCE);
+ }
+ }
+ break;
+ }
+ }
+
+ if (EN_RZ_GET_SISTER(&this->actor) == EN_RZ_JUDO) {
+ sp28.x = this->actor.projectedPos.x;
+ sp28.y = this->actor.projectedPos.y;
+ sp28.z = this->actor.projectedPos.z;
+ func_801A1FB4(3, &sp28, NA_BGM_ROSA_SISTERS, 900.0f);
+ }
+}
+
+void func_80BFC19C(EnRz* this, PlayState* play) {
+ EnRz_UpdateSkelAnime(this, play);
+ if (!func_80BFBE70(this, play)) {
+ this->actionFunc = func_80BFC3F8;
+ func_80BFBA1C(play, this, EN_RZ_ANIM_LINK_DANCE);
+ if (this->sister != NULL) {
+ func_80BFBA1C(play, this->sister, EN_RZ_ANIM_LINK_DANCE);
+ }
+ }
+}
+
+void func_80BFC214(EnRz* this, PlayState* play) {
+ EnRz_UpdateSkelAnime(this, play);
+ if (!func_80BFBE70(this, play) && func_80BFBFAC(this, play)) {
+ this->actionFunc = func_80BFC19C;
+ }
+}
+
+void func_80BFC270(EnRz* this, PlayState* play) {
+ EnRz_UpdateSkelAnime(this, play);
+ if (Actor_HasParent(&this->actor, play)) {
+ this->actor.parent = NULL;
+ this->actionFunc = func_80BFC214;
+ func_80BFBDFC(play);
+ } else {
+ Actor_OfferGetItem(&this->actor, play, GI_HEART_PIECE, 2000.0f, 1000.0f);
+ }
+}
+
+void func_80BFC2F4(EnRz* this, PlayState* play) {
+ EnRz_UpdateSkelAnime(this, play);
+ if (!func_80BFBE70(this, play)) {
+ Message_CloseTextbox(play);
+ Actor_OfferGetItem(&this->actor, play, GI_HEART_PIECE, 2000.0f, 1000.0f);
+ this->actionFunc = func_80BFC270;
+ }
+}
+
+void func_80BFC36C(EnRz* this, PlayState* play) {
+ EnRz_UpdateSkelAnime(this, play);
+ if (func_80BFBFAC(this, play)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_77_04);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_80)) {
+ this->actionFunc = func_80BFC214;
+ } else {
+ this->actionFunc = func_80BFC2F4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_75_80);
+ }
+ this->actor.csId = this->csIdList[1];
+ }
+}
+
+void func_80BFC3F8(EnRz* this, PlayState* play) {
+ s32 pad;
+ Vec3f bgmPos;
+
+ EnRz_UpdateSkelAnime(this, play);
+
+ if (this->sister == NULL) {
+ this->sister = EnRz_FindSister(this, play);
+ }
+
+ if (!func_80BFBE70(this, play)) {
+ if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
+ this->actionFunc = func_80BFC078;
+
+ if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_10000)) {
+ this->actionFunc = func_80BFC36C;
+ this->actor.csId = this->csIdList[0];
+ this->actor.flags &= ~ACTOR_FLAG_10000;
+ } else if (Player_GetMask(play) == PLAYER_MASK_KAMARO) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_04)) {
+ Message_StartTextbox(play, 0x2925, &this->actor);
+ func_80BFBDFC(play);
+ } else {
+ Message_StartTextbox(play, 0x2926, &this->actor);
+ func_80BFBDFC(play);
+ }
+ } else {
+ Message_StartTextbox(play, 0x2926, &this->actor);
+ func_80BFBDFC(play);
+ }
+
+ } else if (EnRz_CanTalk(this, play)) {
+ if (func_80BFBCEC(this, play) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_77_04) && this->sister != NULL) {
+ this->actor.flags |= ACTOR_FLAG_10000;
+ func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1);
+ } else {
+ this->actor.flags &= ~ACTOR_FLAG_10000;
+ func_800B8614(&this->actor, play, 120.0f);
+ }
+ }
+
+ if (EN_RZ_GET_SISTER(&this->actor) == EN_RZ_JUDO) {
+ bgmPos.x = this->actor.projectedPos.x;
+ bgmPos.y = this->actor.projectedPos.y;
+ bgmPos.z = this->actor.projectedPos.z;
+ func_801A1FB4(3, &bgmPos, NA_BGM_ROSA_SISTERS, 900.0f);
+ }
+ }
+}
+
+void func_80BFC608(EnRz* this, PlayState* play) {
+ EnRz_UpdateSkelAnime(this, play);
+
+ if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
+ Message_CloseTextbox(play);
+ this->actionFunc = func_80BFC674;
+ }
+}
+
+void func_80BFC674(EnRz* this, PlayState* play) {
+ EnRz_UpdateSkelAnime(this, play);
+
+ if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
+ this->actionFunc = func_80BFC608;
+ if (Player_GetMask(play) == PLAYER_MASK_KAMARO) {
+ Message_StartTextbox(play, 0x2925, &this->actor);
+ } else {
+ Message_StartTextbox(play, 0x2924, &this->actor);
+ }
+ } else if (EnRz_CanTalk(this, play)) {
+ func_800B8614(&this->actor, play, 120.0f);
+ }
+}
+
+void func_80BFC728(EnRz* this, PlayState* play) {
+ EnRz_UpdateSkelAnime(this, play);
+
+ if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
+ Message_CloseTextbox(play);
+ this->actionFunc = func_80BFC7E0;
+ this->actor.textId++;
+ if (EN_RZ_GET_SISTER(&this->actor) == EN_RZ_JUDO) {
+ if (this->actor.textId >= 0x2920) {
+ this->actor.textId = 0x291C;
+ }
+ } else if (this->actor.textId >= 0x2924) {
+ this->actor.textId = 0x2920;
+ }
+ }
+}
+
+void func_80BFC7E0(EnRz* this, PlayState* play) {
+ EnRz_UpdateSkelAnime(this, play);
+
+ if (this->timer > 0) {
+ this->timer--;
+ } else {
+ this->actionFunc = EnRz_Walk;
+ func_80BFB9E4(play, this, EN_RZ_ANIM_WALKING);
+ }
+
+ if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
+ this->actionFunc = func_80BFC728;
+ func_80BFB9E4(play, this, EN_RZ_ANIM_THINKING);
+ this->actor.speed = 0.0f;
+ func_80BFBDFC(play);
+ } else if (EnRz_CanTalk(this, play)) {
+ func_800B8614(&this->actor, play, 120.0f);
+ }
+}
+
+void EnRz_StopToThink(EnRz* this, PlayState* play) {
+ this->timer = 100;
+ this->actionFunc = func_80BFC7E0;
+ this->actor.speed = 0.0f;
+ func_80BFB9E4(play, this, EN_RZ_ANIM_THINKING);
+}
+
+void EnRz_Walk(EnRz* this, PlayState* play) {
+ EnRz_UpdateSkelAnime(this, play);
+ this->actor.speed = 1.5f;
+
+ switch (EnRz_GetPathStatus(this)) {
+ case EN_RZ_PATHSTATUS_END:
+ EnRz_SetupPath(this, play);
+ EnRz_StopToThink(this, play);
+ break;
+
+ case EN_RZ_PATHSTATUS_AT_POINT:
+ EnRz_StopToThink(this, play);
+ break;
+
+ default:
+ break;
+ }
+
+ if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
+ this->actionFunc = func_80BFC728;
+ func_80BFB9E4(play, this, EN_RZ_ANIM_THINKING);
+ this->actor.speed = 0.0f;
+ func_80BFBDFC(play);
+ } else if (EnRz_CanTalk(this, play)) {
+ func_800B8614(&this->actor, play, 120.0f);
+ }
+}
+
+void EnRz_Update(Actor* thisx, PlayState* play) {
+ s32 pad;
+ EnRz* this = THIS;
+
+ Collider_UpdateCylinder(&this->actor, &this->collider);
+ CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
+ Actor_MoveWithGravity(&this->actor);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 25.0f, 40.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
+
+ this->actionFunc(this, play);
+
+ if (DECR(this->blinkTimer) == 0) {
+ this->blinkTimer = Rand_S16Offset(60, 60);
+ }
+
+ this->eyeIndex = this->blinkTimer;
+ if (this->eyeIndex > 2) {
+ this->eyeIndex = 0;
+ }
+}
+
+void EnRz_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
+ static Vec3f sFocusOffsetPos = { 500.0f, -500.0f, 0.0f };
+ EnRz* this = THIS;
+
+ if (limbIndex == OBJECT_RZ_LIMB_0B) {
+ Matrix_MultVec3f(&sFocusOffsetPos, &thisx->focus.pos);
+ }
+ if (limbIndex == OBJECT_RZ_LIMB_03) {
+ Matrix_MultVec3f(&gZeroVec3f, &this->shadowPos);
+ }
+}
+
+void EnRz_Draw(Actor* thisx, PlayState* play) {
+ EnRz* this = THIS;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C28C(play->state.gfxCtx);
+
+ if (EN_RZ_GET_SISTER(&this->actor) == EN_RZ_JUDO) {
+ AnimatedMat_DrawStepOpa(play, Lib_SegmentedToVirtual(&object_rz_Matanimheader_00D768), 0);
+ } else { // EN_RZ_MARILLA
+ AnimatedMat_DrawStepOpa(play, Lib_SegmentedToVirtual(&object_rz_Matanimheader_00D768), 1);
+ }
+
+ if (this->animIndex == EN_RZ_ANIM_APPLAUDING) {
+ gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sEyeTextures[4]));
+ } else if (this->stateFlags & EN_RZ_STATE_2) {
+ gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sEyeTextures[3]));
+ } else {
+ gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex]));
+ }
+
+ SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL,
+ EnRz_PostLimbDraw, &this->actor);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
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 5106d1413..c6d8fe3c8 100644
--- a/src/overlays/actors/ovl_En_Rz/z_en_rz.h
+++ b/src/overlays/actors/ovl_En_Rz/z_en_rz.h
@@ -2,6 +2,22 @@
#define Z_EN_RZ_H
#include "global.h"
+#include "assets/objects/object_rz/object_rz.h"
+
+#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)
+
+typedef enum {
+ /* 0 */ EN_RZ_JUDO, // in red
+ /* 1 */ EN_RZ_MARILLA // in blue
+} EnRzSister;
+
+typedef enum {
+ /* 0 */ EN_RZ_TYPE_0,
+ /* 1 */ EN_RZ_TYPE_1,
+ /* 2 */ EN_RZ_TYPE_2
+} EnRzType;
struct EnRz;
@@ -9,10 +25,25 @@ typedef void (*EnRzActionFunc)(struct EnRz*, PlayState*);
typedef struct EnRz {
/* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0x2EC];
+ /* 0x144 */ SkelAnime skelAnime;
+ /* 0x188 */ Vec3s jointTable[OBJECT_RZ_LIMB_MAX];
+ /* 0x20C */ UNK_TYPE1 pad20C[0x94];
+ /* 0x2A0 */ Vec3s morphTable[OBJECT_RZ_LIMB_MAX];
+ /* 0x324 */ UNK_TYPE1 pad324[0x94];
+ /* 0x3B8 */ Path* path;
+ /* 0x3BC */ s32 curPointIndex;
+ /* 0x3C0 */ ColliderCylinder collider;
+ /* 0x40C */ struct EnRz* sister;
+ /* 0x410 */ s16 eyeIndex;
+ /* 0x412 */ s16 blinkTimer;
+ /* 0x414 */ Vec3f shadowPos;
+ /* 0x420 */ u16 stateFlags;
+ /* 0x422 */ s16 animIndex;
+ /* 0x424 */ s16 timer;
+ /* 0x426 */ u16 cueType;
+ /* 0x428 */ u16 cueId;
+ /* 0x42A */ s16 csIdList[2];
/* 0x430 */ EnRzActionFunc actionFunc;
} EnRz; // size = 0x434
-extern const ActorInit En_Rz_InitVars;
-
#endif // Z_EN_RZ_H
diff --git a/src/overlays/actors/ovl_En_S_Goro/overlay.cfg b/src/overlays/actors/ovl_En_S_Goro/overlay.cfg
deleted file mode 100644
index 195f952ea..000000000
--- a/src/overlays/actors/ovl_En_S_Goro/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_S_Goro
-z_en_s_goro.c
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 fbfe32252..14904e5b7 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
@@ -94,7 +94,7 @@ typedef enum EnSGoroAnimation {
/* 0xF */ EN_S_GORO_ANIM_IDLE_STAND
} EnSGoroAnimation;
-const ActorInit En_S_Goro_InitVars = {
+ActorInit En_S_Goro_InitVars = {
ACTOR_EN_S_GORO,
ACTORCAT_NPC,
FLAGS,
@@ -235,16 +235,16 @@ 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 (!(gSaveContext.save.weekEventReg[22] & 4)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
if (player->transformation == PLAYER_FORM_GORON) {
- if (!(gSaveContext.save.weekEventReg[36] & 2)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_02)) {
switch (this->textId) {
case 0xCFB:
return 0xCFC;
case 0xCFC:
return 0xCFD;
case 0xCFD:
- gSaveContext.save.weekEventReg[36] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_36_02);
this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE;
return 0xCFE;
default:
@@ -255,8 +255,8 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) {
return 0xCFE;
}
} else {
- if (!(gSaveContext.save.weekEventReg[36] & 1)) {
- gSaveContext.save.weekEventReg[36] |= 1;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_01)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_36_01);
return 0xCF9;
}
this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE;
@@ -266,9 +266,9 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) {
// Scene flag - Checks whether the chandelier has been lit
if (!Flags_GetSwitch(play, EN_S_GORO_SCENEFLAG_INDEX(&this->actor))) {
if (player->transformation == PLAYER_FORM_GORON) {
- if (!(gSaveContext.save.weekEventReg[36] & 8)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_08)) {
if (this->textId == 0xD02) {
- gSaveContext.save.weekEventReg[36] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_36_08);
this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE;
return 0xD03;
}
@@ -277,10 +277,10 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) {
this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE;
return 0xD04;
}
- if (!(gSaveContext.save.weekEventReg[36] & 4)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_04)) {
if (this->textId == 0xCFF) {
this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE;
- gSaveContext.save.weekEventReg[36] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_36_04);
return 0xD00;
}
return 0xCFF;
@@ -288,9 +288,9 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) {
this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE;
return 0xD01;
}
- if (!(gSaveContext.save.weekEventReg[36] & 0x10)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_10)) {
if (this->textId == 0xD05) {
- gSaveContext.save.weekEventReg[36] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_36_10);
this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE;
return 0xD06;
}
@@ -302,14 +302,14 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) {
break;
case EN_S_GORO_TYPE_SHRINE_WINTER_B:
- if (!(gSaveContext.save.weekEventReg[22] & 4)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
if (player->transformation == PLAYER_FORM_GORON) {
- if (!(gSaveContext.save.weekEventReg[36] & 0x40)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_40)) {
switch (this->textId) {
case 0xD15:
return 0xD16;
case 0xD16:
- gSaveContext.save.weekEventReg[36] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_36_40);
this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE;
return 0xD17;
default:
@@ -320,20 +320,20 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) {
return 0xD17;
}
} else {
- if (!(gSaveContext.save.weekEventReg[36] & 0x20)) {
- gSaveContext.save.weekEventReg[36] |= 0x20;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_20)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_36_20);
return 0xD13;
}
this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE;
return 0xD14;
}
} else if (player->transformation == PLAYER_FORM_GORON) {
- if (!(gSaveContext.save.weekEventReg[37] & 1)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_37_01)) {
switch (this->textId) {
case 0xD1E:
return 0xD1F;
case 0xD1F:
- gSaveContext.save.weekEventReg[37] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_37_01);
this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE;
return 0xD20;
default:
@@ -344,7 +344,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) {
return 0xD21;
}
} else {
- if (!(gSaveContext.save.weekEventReg[36] & 0x80)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_80)) {
switch (this->textId) {
case 0xD18:
return 0xD19;
@@ -353,7 +353,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) {
case 0xD1A:
return 0xD1B;
case 0xD1B:
- gSaveContext.save.weekEventReg[36] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_36_80);
this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE;
return 0xD1C;
default:
@@ -367,16 +367,16 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) {
break;
case EN_S_GORO_TYPE_SHRINE_WINTER_C:
- if (!(gSaveContext.save.weekEventReg[22] & 4)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
if (player->transformation == PLAYER_FORM_GORON) {
- if (!(gSaveContext.save.weekEventReg[37] & 2)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_37_02)) {
switch (this->textId) {
case 0xD09:
return 0xD0A;
case 0xD0A:
return 0xD0B;
case 0xD0B:
- gSaveContext.save.weekEventReg[37] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_37_02);
this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE;
return 0xD0C;
default:
@@ -391,12 +391,12 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) {
return 0xD08;
}
} else if (player->transformation == PLAYER_FORM_GORON) {
- if (!(gSaveContext.save.weekEventReg[37] & 4)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_37_04)) {
switch (this->textId) {
case 0xD0E:
return 0xD0F;
case 0xD0F:
- gSaveContext.save.weekEventReg[37] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_37_04);
this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE;
return 0xD10;
default:
@@ -414,7 +414,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) {
case EN_S_GORO_TYPE_SHRINE_SPRING_A:
if (player->transformation == PLAYER_FORM_GORON) {
- if (gSaveContext.save.weekEventReg[77] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_80)) {
if (this->textId == 0xDE3) {
this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE;
return 0xDE4;
@@ -429,7 +429,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) {
case EN_S_GORO_TYPE_SHRINE_SPRING_B:
if (player->transformation == PLAYER_FORM_GORON) {
- if (gSaveContext.save.weekEventReg[77] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_80)) {
if (this->textId == 0xDE7) {
this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE;
return 0xDE8;
@@ -444,7 +444,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) {
case EN_S_GORO_TYPE_SHRINE_SPRING_C:
if (player->transformation == PLAYER_FORM_GORON) {
- if (gSaveContext.save.weekEventReg[77] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_80)) {
if (this->textId == 0xDEB) {
this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE;
return 0xDEC;
@@ -459,7 +459,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) {
case EN_S_GORO_TYPE_SHRINE_SPRING_D:
if (player->transformation == PLAYER_FORM_GORON) {
- if (gSaveContext.save.weekEventReg[77] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_80)) {
if (this->textId == 0xDF1) {
this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE;
return 0xDF2;
@@ -482,7 +482,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) {
case EN_S_GORO_TYPE_SHRINE_SPRING_E:
if (player->transformation == PLAYER_FORM_GORON) {
- if (gSaveContext.save.weekEventReg[77] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_80)) {
if (this->textId == 0xDF6) {
this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE;
return 0xDF7;
@@ -500,7 +500,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) {
case EN_S_GORO_TYPE_SHRINE_SPRING_F:
if (player->transformation == PLAYER_FORM_GORON) {
- if (gSaveContext.save.weekEventReg[77] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_80)) {
switch (this->textId) {
case 0xDFB:
return 0xDFC;
@@ -701,7 +701,7 @@ u16 EnSGoro_BombshopGoron_NextTextId(EnSGoro* this, PlayState* play) {
return 0x673;
}
this->powderKegPrice = play->msgCtx.unk1206C;
- if (gSaveContext.save.playerData.rupees < this->powderKegPrice) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < this->powderKegPrice) {
this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE;
this->actionFlags |= EN_S_GORO_ACTIONFLAG_TIRED;
play_sound(NA_SE_SY_ERROR);
@@ -765,13 +765,13 @@ void EnSGoro_UpdateSleeping(EnSGoro* this, PlayState* play) {
if (this->snorePhase == 0) {
if (this->actionFlags & EN_S_GORO_ACTIONFLAG_SNOREPHASE) {
this->actionFlags &= ~EN_S_GORO_ACTIONFLAG_SNOREPHASE;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_SNORE2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_SNORE2);
} else {
this->actionFlags |= EN_S_GORO_ACTIONFLAG_SNOREPHASE;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_SNORE1);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_SNORE1);
}
}
- } else if (gSaveContext.save.weekEventReg[22] & 4) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
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) || (gSaveContext.save.weekEventReg[22] & 4))) {
+ ((((EnGk*)this->otherGoron)->unk_1E4 & 0x80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04))) {
this->actionFlags |= EN_S_GORO_ACTIONFLAG_GKQUIET_ACKNOWLEDGED;
this->animInfoIndex = EN_S_GORO_ANIM_ROLLUP;
@@ -963,7 +963,7 @@ s32 EnSGoro_UpdateRotationToPlayer(EnSGoro* this, PlayState* play) {
this->bodyRotY = CLAMP(this->bodyRotY, -0x1C70, 0x1C70);
playerPos = player->actor.world.pos;
- playerPos.y = player->bodyPartsPos[7].y + 3.0f;
+ playerPos.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
thisPos = this->actor.world.pos;
thisPos.y += 70.0f;
@@ -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 (gSaveContext.save.weekEventReg[22] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) {
this->actionFlags |= EN_S_GORO_ACTIONFLAG_GKQUIET_ACKNOWLEDGED;
this->actionFlags |= EN_S_GORO_ACTIONFLAG_EYESOPEN;
this->animInfoIndex = EN_S_GORO_ANIM_SHIVER_A;
@@ -1096,7 +1096,7 @@ void EnSGoro_SetupAction(EnSGoro* this, PlayState* play) {
this->actor.shape.yOffset = EN_S_GORO_ROLLEDUP_YOFFSET;
break;
default:
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
break;
}
}
@@ -1245,7 +1245,7 @@ void EnSGoro_ShopGoron_Talk(EnSGoro* this, PlayState* play) {
if ((this->textId == 0x675) || (this->textId == 0x676)) {
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
- Actor_PickUp(&this->actor, play, GI_POWDER_KEG, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_POWDER_KEG, 300.0f, 300.0f);
this->actionFunc = EnSGoro_ShopGoron_TakePayment;
} else {
Message_StartTextbox(play, this->textId, &this->actor);
@@ -1262,7 +1262,7 @@ void EnSGoro_ShopGoron_TakePayment(EnSGoro* this, PlayState* play) {
Rupees_ChangeBy(-this->powderKegPrice);
this->actionFunc = EnSGoro_ShopGoron_FinishTransaction;
} else {
- Actor_PickUp(&this->actor, play, GI_POWDER_KEG, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_POWDER_KEG, 300.0f, 300.0f);
}
}
@@ -1271,7 +1271,7 @@ void EnSGoro_ShopGoron_FinishTransaction(EnSGoro* this, PlayState* play) {
Message_StartTextbox(play, this->textId, &this->actor);
this->actionFunc = EnSGoro_ShopGoron_Talk;
} else {
- func_800B85E0(&this->actor, play, 400.0f, -1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
}
}
@@ -1311,7 +1311,7 @@ void EnSGoro_Init(Actor* thisx, PlayState* play) {
this->loadedObjIndex = objIndex;
if (objIndex < 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
this->actor.draw = EnSGoro_Draw;
@@ -1328,7 +1328,7 @@ void EnSGoro_Update(Actor* thisx, PlayState* play) {
EnSGoro* this = (EnSGoro*)thisx;
this->actionFunc(this, play);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->loadedObjIndex].segment);
SkelAnime_Update(&this->skelAnime);
if (this->animInfoIndex != EN_S_GORO_ANIM_SLEEPY) {
diff --git a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.h b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.h
index 0d7ac9edb..5777af17b 100644
--- a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.h
+++ b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.h
@@ -11,8 +11,6 @@ struct EnSGoro;
typedef void (*EnSGoroActionFunc)(struct EnSGoro*, PlayState*);
-extern const ActorInit En_S_Goro_InitVars;
-
typedef struct EnSGoro {
/* 0x000 */ Actor actor;
/* 0x144 */ Actor* otherGoron;
diff --git a/src/overlays/actors/ovl_En_Sb/overlay.cfg b/src/overlays/actors/ovl_En_Sb/overlay.cfg
deleted file mode 100644
index 12658e763..000000000
--- a/src/overlays/actors/ovl_En_Sb/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Sb
-z_en_sb.c
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 adcb78115..b34ee8c64 100644
--- a/src/overlays/actors/ovl_En_Sb/z_en_sb.c
+++ b/src/overlays/actors/ovl_En_Sb/z_en_sb.c
@@ -25,7 +25,7 @@ void EnSb_Lunge(EnSb* this, PlayState* play);
void EnSb_Bounce(EnSb* this, PlayState* play);
void EnSb_ReturnToIdle(EnSb* this, PlayState* play);
-const ActorInit En_Sb_InitVars = {
+ActorInit En_Sb_InitVars = {
ACTOR_EN_SB,
ACTORCAT_ENEMY,
FLAGS,
@@ -118,7 +118,7 @@ void EnSb_Init(Actor* thisx, PlayState* play) {
this->isDead = false;
this->actor.colChkInfo.mass = 90;
this->actor.shape.rot.y = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.gravity = -0.35f;
this->fireCount = 0;
this->unk_252 = 0;
@@ -155,7 +155,7 @@ void EnSb_SetupOpen(EnSb* this) {
ANIMMODE_ONCE, 0.0f);
this->state = SHELLBLADE_OPEN;
this->actionFunc = EnSb_Open;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KUSAMUSHI_VIBE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KUSAMUSHI_VIBE);
}
void EnSb_SetupWaitOpen(EnSb* this) {
@@ -172,7 +172,7 @@ void EnSb_SetupLunge(EnSb* this) {
Animation_Change(&this->skelAnime, &object_sb_Anim_000124, playbackSpeed, 0.0f, frameCount, ANIMMODE_ONCE, 0);
this->state = SHELLBLADE_LUNGE;
this->actionFunc = EnSb_Lunge;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KUSAMUSHI_VIBE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KUSAMUSHI_VIBE);
}
void EnSb_SetupBounce(EnSb* this) {
@@ -191,12 +191,12 @@ void EnSb_SetupIdle(EnSb* this, s32 changeSpeed) {
this->state = SHELLBLADE_WAIT_CLOSED;
if (changeSpeed) {
if (this->actor.depthInWater > 0.0f) {
- this->actor.speedXZ = -5.0f;
+ this->actor.speed = -5.0f;
if (this->actor.velocity.y < 0.0f) {
this->actor.velocity.y = 2.1f;
}
} else {
- this->actor.speedXZ = -6.0f;
+ this->actor.speed = -6.0f;
if (this->actor.velocity.y < 0.0f) {
this->actor.velocity.y = 1.4f;
}
@@ -253,11 +253,11 @@ void EnSb_TurnAround(EnSb* this, PlayState* play) {
this->actor.world.rot.y = this->yawAngle;
if (this->actor.depthInWater > 0.0f) {
this->actor.velocity.y = 3.0f;
- this->actor.speedXZ = 5.0f;
+ this->actor.speed = 5.0f;
this->actor.gravity = -0.35f;
} else {
this->actor.velocity.y = 2.0f;
- this->actor.speedXZ = 6.0f;
+ this->actor.speed = 6.0f;
this->actor.gravity = -2.0f;
}
EnSb_SpawnBubbles(play, this);
@@ -267,12 +267,12 @@ void EnSb_TurnAround(EnSb* this, PlayState* play) {
}
void EnSb_Lunge(EnSb* this, PlayState* play) {
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.2f);
- if (this->actor.velocity.y <= -0.1f || this->actor.bgCheckFlags & 2) {
+ Math_StepToF(&this->actor.speed, 0.0f, 0.2f);
+ if ((this->actor.velocity.y <= -0.1f) || (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH)) {
if (!(this->actor.depthInWater > 0.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EYEGOLE_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_ATTACK);
}
- this->actor.bgCheckFlags &= ~2;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND_TOUCH;
EnSb_SetupBounce(this);
}
}
@@ -282,25 +282,25 @@ void EnSb_Bounce(EnSb* this, PlayState* play) {
f32 currentFrame = currentFrame = this->skelAnime.curFrame;
f32 frameCount = frameCount = Animation_GetLastFrame(&object_sb_Anim_0000B4);
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.2f);
+ Math_StepToF(&this->actor.speed, 0.0f, 0.2f);
if (currentFrame == frameCount) {
if (this->bounceCounter != 0) {
this->bounceCounter--;
this->attackTimer = 1;
if (this->actor.depthInWater > 0.0f) {
this->actor.velocity.y = 3.0f;
- this->actor.speedXZ = 5.0f;
+ this->actor.speed = 5.0f;
this->actor.gravity = -0.35f;
} else {
this->actor.velocity.y = 2.0f;
- this->actor.speedXZ = 6.0f;
+ this->actor.speed = 6.0f;
this->actor.gravity = -2.0f;
}
EnSb_SpawnBubbles(play, this);
EnSb_SetupLunge(this);
- } else if (this->actor.bgCheckFlags & 1) {
- this->actor.bgCheckFlags &= ~2;
- this->actor.speedXZ = 0.0f;
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND_TOUCH;
+ this->actor.speed = 0.0f;
this->attackTimer = 1;
EnSb_SetupWaitClosed(this);
}
@@ -310,14 +310,14 @@ void EnSb_Bounce(EnSb* this, PlayState* play) {
void EnSb_ReturnToIdle(EnSb* this, PlayState* play) {
if (this->attackTimer != 0) {
this->attackTimer--;
- if (this->actor.bgCheckFlags & 1) {
- this->actor.bgCheckFlags &= ~1;
- this->actor.speedXZ = 0.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
+ this->actor.speed = 0.0f;
}
- } else if (this->actor.bgCheckFlags & 1) {
- this->actor.bgCheckFlags &= ~1;
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
this->actionFunc = EnSb_Idle;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
}
@@ -331,7 +331,7 @@ void EnSb_UpdateDamage(EnSb* this, PlayState* play) {
hitPlayer = 0;
if (this->vulnerableTimer != 0) {
Actor_ApplyDamage(&this->actor);
- Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, 0x2000, 80);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_XLU, 80);
hitPlayer = 1;
}
}
@@ -368,22 +368,23 @@ void EnSb_Update(Actor* thisx, PlayState* play) {
this->actor.params = 1;
}
Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0x80);
- Actor_MarkForDeath(&this->actor);
- } else {
- Actor_SetFocus(&this->actor, 20.0f);
- Actor_MoveWithGravity(&this->actor);
- this->actionFunc(this, play);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 25.0f, 20.0f, 5);
- EnSb_UpdateDamage(this, play);
- if (player->stateFlags1 & 0x8000000) {
- Collider_UpdateCylinder(&this->actor, &this->collider);
- if (this->vulnerableTimer == 0) {
- CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
- }
- CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
- }
- SkelAnime_Update(&this->skelAnime);
+ Actor_Kill(&this->actor);
+ return;
}
+
+ Actor_SetFocus(&this->actor, 20.0f);
+ Actor_MoveWithGravity(&this->actor);
+ this->actionFunc(this, play);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 25.0f, 20.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
+ EnSb_UpdateDamage(this, play);
+ if (player->stateFlags1 & PLAYER_STATE1_8000000) {
+ Collider_UpdateCylinder(&this->actor, &this->collider);
+ if (this->vulnerableTimer == 0) {
+ CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
+ }
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
+ }
+ SkelAnime_Update(&this->skelAnime);
}
void EnSb_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
diff --git a/src/overlays/actors/ovl_En_Sb/z_en_sb.h b/src/overlays/actors/ovl_En_Sb/z_en_sb.h
index f2b3e68e8..b27322226 100644
--- a/src/overlays/actors/ovl_En_Sb/z_en_sb.h
+++ b/src/overlays/actors/ovl_En_Sb/z_en_sb.h
@@ -33,6 +33,4 @@ typedef struct EnSb {
/* 0x253 */ u8 isDrawn;
} EnSb; // size = 0x254
-extern const ActorInit En_Sb_InitVars;
-
#endif // Z_EN_SB_H
diff --git a/src/overlays/actors/ovl_En_Sc_Ruppe/overlay.cfg b/src/overlays/actors/ovl_En_Sc_Ruppe/overlay.cfg
deleted file mode 100644
index 2262aa0bb..000000000
--- a/src/overlays/actors/ovl_En_Sc_Ruppe/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Sc_Ruppe
-z_en_sc_ruppe.c
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 3eb978314..be449e0a3 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
@@ -23,7 +23,7 @@ typedef struct {
/* 0x4 */ s16 amount;
} RuppeInfo;
-const ActorInit En_Sc_Ruppe_InitVars = {
+ActorInit En_Sc_Ruppe_InitVars = {
ACTOR_EN_SC_RUPPE,
ACTORCAT_NPC,
FLAGS,
@@ -67,44 +67,44 @@ static ColliderCylinderInit sCylinderInit = {
void EnScRuppe_UpdateCollision(EnScRuppe* this, PlayState* play) {
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
- Actor_UpdateBgCheckInfo(play, &this->actor, 32.0f, 30.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 32.0f, 30.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
}
s32 func_80BD697C(s16 ruppeIndex) {
switch (ruppeIndex) {
case RUPEE_GREEN:
- if (gSaveContext.save.weekEventReg[53] & 4) {
- gSaveContext.save.weekEventReg[53] &= (u8)~4;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_04)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_53_04);
return true;
}
break;
case RUPEE_BLUE:
- if (gSaveContext.save.weekEventReg[53] & 0x80) {
- gSaveContext.save.weekEventReg[53] &= (u8)~0x80;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_80)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_53_80);
return true;
}
break;
case RUPEE_RED:
- if (gSaveContext.save.weekEventReg[54] & 1) {
- gSaveContext.save.weekEventReg[54] &= (u8)~1;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_01)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_54_01);
return true;
}
break;
case RUPEE_ORANGE:
- if (gSaveContext.save.weekEventReg[54] & 2) {
- gSaveContext.save.weekEventReg[54] &= (u8)~2;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_02)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_54_02);
return true;
}
break;
case RUPEE_PURPLE:
- if (gSaveContext.save.weekEventReg[54] & 4) {
- gSaveContext.save.weekEventReg[54] &= (u8)~4;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_04)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_54_04);
return true;
}
break;
case RUPEE_UNUSED:
- if ((gSaveContext.save.weekEventReg[54] & 8)) {
- gSaveContext.save.weekEventReg[54] &= (u8)~8;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_08)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_54_08);
return true;
}
break;
@@ -116,7 +116,7 @@ void func_80BD6A8C(EnScRuppe* this, PlayState* play) {
if (this->collider.base.ocFlags1 & OC1_HIT) {
this->ruppeDisplayTime = 0;
this->actor.gravity = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_GET_RUPY);
+ Actor_PlaySfx(&this->actor, NA_SE_SY_GET_RUPY);
Rupees_ChangeBy(sRupeeInfo[this->ruppeIndex].amount);
this->actionFunc = func_80BD6B18;
}
@@ -129,7 +129,7 @@ void func_80BD6B18(EnScRuppe* this, PlayState* play) {
if (this->ruppeDisplayTime > 30) {
if (func_80BD697C(this->ruppeIndex)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else {
f32 scale;
@@ -156,7 +156,7 @@ void EnScRuppe_Init(Actor* thisx, PlayState* play) {
if ((this->ruppeIndex < RUPEE_GREEN) || (this->ruppeIndex >= RUPEE_UNUSED)) {
this->ruppeIndex = RUPEE_GREEN;
}
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = func_80BD6A8C;
this->actor.gravity = -0.5f;
this->actor.shape.yOffset = 700.0f;
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 80d7ed20e..8ef0f4c56 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
@@ -26,6 +26,4 @@ typedef enum {
/* 5 */ RUPEE_UNUSED,
} RupeeType;
-extern const ActorInit En_Sc_Ruppe_InitVars;
-
#endif // Z_EN_SC_RUPPE_H
diff --git a/src/overlays/actors/ovl_En_Scopecoin/overlay.cfg b/src/overlays/actors/ovl_En_Scopecoin/overlay.cfg
deleted file mode 100644
index 2c605c8bc..000000000
--- a/src/overlays/actors/ovl_En_Scopecoin/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Scopecoin
-z_en_scopecoin.c
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 4bccdb846..d2a9d525e 100644
--- a/src/overlays/actors/ovl_En_Scopecoin/z_en_scopecoin.c
+++ b/src/overlays/actors/ovl_En_Scopecoin/z_en_scopecoin.c
@@ -16,7 +16,7 @@ void EnScopecoin_Destroy(Actor* thisx, PlayState* play);
void EnScopecoin_Update(Actor* thisx, PlayState* play);
void EnScopecoin_Draw(Actor* thisx, PlayState* play);
-const ActorInit En_Scopecoin_InitVars = {
+ActorInit En_Scopecoin_InitVars = {
ACTOR_EN_SCOPECOIN,
ACTORCAT_NPC,
FLAGS,
@@ -35,7 +35,7 @@ void EnScopecoin_Spin(EnScopecoin* this, PlayState* play) {
void EnScopecoin_CheckCollectible(EnScopecoin* this, PlayState* play) {
if (Flags_GetCollectible(play, OBJMUPICT_GET_RUPEE_FLAG(&this->actor))) {
Item_DropCollectible(play, &this->actor.world.pos, ITEM00_RUPEE_RED);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -53,7 +53,7 @@ void EnScopecoin_Init(Actor* thisx, PlayState* play) {
if (play->actorCtx.flags & ACTORCTX_FLAG_1) {
if ((this->rupeeIndex == 2) || (this->rupeeIndex == 6)) {
if (Flags_GetCollectible(play, OBJMUPICT_GET_RUPEE_FLAG(&this->actor))) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
}
@@ -62,13 +62,13 @@ void EnScopecoin_Init(Actor* thisx, PlayState* play) {
} else {
if ((this->rupeeIndex == 2) || (this->rupeeIndex == 6)) {
if (Flags_GetCollectible(play, OBJMUPICT_GET_RUPEE_FLAG(&this->actor))) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
this->actor.draw = NULL;
this->actionFunc = EnScopecoin_CheckCollectible;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
}
diff --git a/src/overlays/actors/ovl_En_Scopecoin/z_en_scopecoin.h b/src/overlays/actors/ovl_En_Scopecoin/z_en_scopecoin.h
index 8fd9b142c..4dda736f8 100644
--- a/src/overlays/actors/ovl_En_Scopecoin/z_en_scopecoin.h
+++ b/src/overlays/actors/ovl_En_Scopecoin/z_en_scopecoin.h
@@ -16,6 +16,4 @@ typedef struct EnScopecoin {
/* 0x148 */ s16 rupeeIndex;
} EnScopecoin; // size = 0x14C
-extern const ActorInit En_Scopecoin_InitVars;
-
#endif // Z_EN_SCOPECOIN_H
diff --git a/src/overlays/actors/ovl_En_Scopecrow/overlay.cfg b/src/overlays/actors/ovl_En_Scopecrow/overlay.cfg
deleted file mode 100644
index 880bf5539..000000000
--- a/src/overlays/actors/ovl_En_Scopecrow/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Scopecrow
-z_en_scopecrow.c
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 a4fcb6cb3..321c790d1 100644
--- a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c
+++ b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c
@@ -18,7 +18,7 @@ void EnScopecrow_Draw(Actor* thisx, PlayState* play);
void func_80BCD590(EnScopecrow* this, PlayState* play);
void func_80BCD640(EnScopecrow* this, PlayState* play);
-const ActorInit En_Scopecrow_InitVars = {
+ActorInit En_Scopecrow_InitVars = {
ACTOR_EN_SCOPECROW,
ACTORCAT_NPC,
FLAGS,
@@ -69,40 +69,46 @@ void func_80BCD000(EnScopecrow* this, PlayState* play) {
s32 func_80BCD09C(s16 arg0) {
switch (arg0) {
case 0:
- if (gSaveContext.save.weekEventReg[53] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_04)) {
return true;
+ } else {
+ return false;
}
- return false;
case 1:
- if (gSaveContext.save.weekEventReg[53] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_80)) {
return true;
+ } else {
+ return false;
}
- return false;
case 2:
- if (gSaveContext.save.weekEventReg[54] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_01)) {
return true;
+ } else {
+ return false;
}
- return false;
case 3:
- if (gSaveContext.save.weekEventReg[54] & 2) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_02)) {
return true;
+ } else {
+ return false;
}
- return false;
case 4:
- if (gSaveContext.save.weekEventReg[54] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_04)) {
return true;
+ } else {
+ return false;
}
- return false;
case 5:
- if (gSaveContext.save.weekEventReg[54] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_08)) {
return true;
+ } else {
+ return false;
}
- return false;
}
return false;
@@ -111,43 +117,43 @@ s32 func_80BCD09C(s16 arg0) {
s32 func_80BCD1AC(s16 arg0) {
switch (arg0) {
case 0:
- if (!(gSaveContext.save.weekEventReg[53] & 4)) {
- gSaveContext.save.weekEventReg[53] |= 4;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_53_04)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_53_04);
return true;
}
break;
case 1:
- if (!(gSaveContext.save.weekEventReg[53] & 0x80)) {
- gSaveContext.save.weekEventReg[53] |= 0x80;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_53_80)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_53_80);
return true;
}
break;
case 2:
- if (!(gSaveContext.save.weekEventReg[54] & 1)) {
- gSaveContext.save.weekEventReg[54] |= 1;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_54_01)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_54_01);
return true;
}
break;
case 3:
- if (!(gSaveContext.save.weekEventReg[54] & 2)) {
- gSaveContext.save.weekEventReg[54] |= 2;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_54_02)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_54_02);
return true;
}
break;
case 4:
- if (!(gSaveContext.save.weekEventReg[54] & 4)) {
- gSaveContext.save.weekEventReg[54] |= 4;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_54_04)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_54_04);
return true;
}
break;
case 5:
- if (!(gSaveContext.save.weekEventReg[54] & 8)) {
- gSaveContext.save.weekEventReg[54] |= 8;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_54_08)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_54_08);
return true;
}
break;
@@ -160,7 +166,7 @@ void func_80BCD2BC(EnScopecrow* this, PlayState* play) {
Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_SC_RUPPE, 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, this->actor.params,
- this->actor.cutscene, this->actor.unk20, NULL);
+ this->actor.csId, this->actor.halfDaysBits, NULL);
}
s32 func_80BCD334(EnScopecrow* this, Path* path, s32 pointIndex) {
@@ -186,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, RADF_TO_BINANG(func_80086B30(phi_fa0, phi_fa1)), &sp3C.z, &sp3C.y, &sp3C.x);
+ func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(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;
@@ -230,7 +236,7 @@ void func_80BCD640(EnScopecrow* this, PlayState* play) {
if (this->path != NULL) {
func_80BCD4D0(this->path, this->unk_1FC, &this->actor.world.pos, &sp30);
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
sp30.y = this->actor.wallYaw;
}
@@ -244,14 +250,14 @@ void func_80BCD640(EnScopecrow* this, PlayState* play) {
}
if (this->unk_1FC >= (this->path->count - 1)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
this->unk_1FC++;
}
}
}
- Math_ApproachF(&this->actor.speedXZ, 6.0f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 6.0f, 0.2f, 1.0f);
Actor_MoveWithoutGravity(&this->actor);
this->unk_264 += 0x1000;
this->actor.shape.yOffset = Math_SinS(this->unk_264) * 500.0f;
@@ -288,15 +294,15 @@ void EnScopecrow_Init(Actor* thisx, PlayState* play) {
this->actor.world.pos = sp3C;
this->actor.world.pos.y = BgCheck_EntityRaycastFloor1(&play->colCtx, &sp4C, &sp3C);
if (this->actor.world.pos.y == BGCHECK_Y_MIN) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
func_80BCD2BC(this, play);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -323,11 +329,11 @@ void EnScopecrow_Init(Actor* thisx, PlayState* play) {
return;
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
void EnScopecrow_Destroy(Actor* thisx, PlayState* play) {
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 60775383e..30f002fb5 100644
--- a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.h
+++ b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.h
@@ -27,6 +27,4 @@ typedef struct EnScopecrow {
/* 0x264 */ s16 unk_264;
} EnScopecrow; // size = 0x268
-extern const ActorInit En_Scopecrow_InitVars;
-
#endif // Z_EN_SCOPECROW_H
diff --git a/src/overlays/actors/ovl_En_Scopenuts/overlay.cfg b/src/overlays/actors/ovl_En_Scopenuts/overlay.cfg
deleted file mode 100644
index 5989378a1..000000000
--- a/src/overlays/actors/ovl_En_Scopenuts/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Scopenuts
-z_en_scopenuts.c
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 fd0ced593..07e2646a0 100644
--- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c
+++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c
@@ -33,7 +33,7 @@ void func_80BCC288(EnScopenuts* this, PlayState* play);
s32 func_80BCC2AC(EnScopenuts* this, Path* path, s32 arg2_);
f32 func_80BCC448(Path* path, s32 arg1, Vec3f* arg2, Vec3s* arg3);
-const ActorInit En_Scopenuts_InitVars = {
+ActorInit En_Scopenuts_InitVars = {
ACTOR_EN_SCOPENUTS,
ACTORCAT_NPC,
FLAGS,
@@ -126,19 +126,19 @@ void func_80BCAC40(EnScopenuts* this, PlayState* play) {
}
void func_80BCAD64(EnScopenuts* this, s16 arg1) {
- f32 sp24 = Math_CosS(this->actor.world.rot.x) * this->actor.speedXZ;
+ f32 sp24 = Math_CosS(this->actor.world.rot.x) * this->actor.speed;
switch (arg1) {
case 1:
- this->actor.velocity.y = this->actor.speedXZ;
+ this->actor.velocity.y = this->actor.speed;
this->actor.velocity.x = 0.0f;
this->actor.velocity.z = 0.0f;
break;
case 2:
- this->actor.velocity.x = Math_SinS(this->actor.world.rot.y) * this->actor.speedXZ;
+ this->actor.velocity.x = Math_SinS(this->actor.world.rot.y) * this->actor.speed;
this->actor.velocity.y = 0.0f;
- this->actor.velocity.z = Math_CosS(this->actor.world.rot.y) * this->actor.speedXZ;
+ this->actor.velocity.z = Math_CosS(this->actor.world.rot.y) * this->actor.speed;
break;
case 3:
@@ -149,7 +149,7 @@ void func_80BCAD64(EnScopenuts* this, s16 arg1) {
default:
this->actor.velocity.x = Math_SinS(this->actor.world.rot.y) * sp24;
- this->actor.velocity.y = Math_SinS(this->actor.world.rot.x) * this->actor.speedXZ;
+ this->actor.velocity.y = Math_SinS(this->actor.world.rot.x) * this->actor.speed;
this->actor.velocity.z = Math_CosS(this->actor.world.rot.y) * sp24;
break;
}
@@ -163,14 +163,14 @@ void func_80BCAE78(EnScopenuts* this, PlayState* play) {
}
if (this->unk_328 & 2) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
}
}
s16 func_80BCAF0C(EnScopenuts* this) {
switch (this->unk_33C) {
case 0x0:
- if (gSaveContext.save.weekEventReg[53] & 2) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_02)) {
this->unk_328 |= 1;
return 0x1638;
}
@@ -208,7 +208,7 @@ void func_80BCB078(EnScopenuts* this, PlayState* play) {
if (this->path != NULL) {
func_80BCC448(this->path, this->unk_334, &this->actor.world.pos, &sp30);
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
sp30.y = this->actor.wallYaw;
}
Math_SmoothStepToS(&this->actor.world.rot.y, sp30.y, 10, 300, 0);
@@ -219,7 +219,7 @@ void func_80BCB078(EnScopenuts* this, PlayState* play) {
if (func_80BCC2AC(this, this->path, this->unk_334)) {
if (this->unk_334 >= (this->path->count - 1)) {
this->actionFunc = func_80BCB1C8;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.gravity = -1.0f;
return;
}
@@ -228,9 +228,9 @@ void func_80BCB078(EnScopenuts* this, PlayState* play) {
}
if (this->unk_334 >= (this->path->count - 2)) {
- Math_ApproachF(&this->actor.speedXZ, 1.5f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 1.5f, 0.2f, 1.0f);
} else {
- Math_ApproachF(&this->actor.speedXZ, 5.0f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 5.0f, 0.2f, 1.0f);
}
Actor_MoveWithoutGravity(&this->actor);
}
@@ -238,9 +238,9 @@ void func_80BCB078(EnScopenuts* this, PlayState* play) {
void func_80BCB1C8(EnScopenuts* this, PlayState* play) {
this->unk_350 *= 0.92f;
Actor_SetScale(&this->actor, this->unk_350);
- if (this->actor.bgCheckFlags & 1) {
- gSaveContext.save.weekEventReg[52] |= 0x40;
- Actor_MarkForDeath(&this->actor);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_52_40);
+ Actor_Kill(&this->actor);
}
}
@@ -252,7 +252,7 @@ void func_80BCB230(EnScopenuts* this, PlayState* play) {
if ((((this->actor.playerHeightRel < 50.0f) && (this->actor.playerHeightRel > -50.0f)) ? true : false) &&
((this->actor.xzDistToPlayer < 200.0f) ? true : false)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
this->actionFunc = func_80BCB4DC;
this->unk_348 = 3;
this->collider.dim.height = 64;
@@ -262,12 +262,12 @@ void func_80BCB230(EnScopenuts* this, PlayState* play) {
if ((this->unk_348 == 4) || (this->unk_348 == 18)) {
this->unk_348 = 17;
this->collider.dim.height = 0;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_DOWN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DOWN);
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 17);
} else if (this->unk_348 == 2) {
this->unk_348 = 16;
this->collider.dim.height = 32;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_UP);
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 16);
} else if (this->unk_348 == 17) {
if (DECR(this->unk_34E) == 0) {
@@ -334,7 +334,7 @@ void func_80BCB6D0(EnScopenuts* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
switch (play->msgCtx.choiceIndex) {
case 0:
- if (gSaveContext.save.playerData.rupees < this->unk_358) {
+ if (gSaveContext.save.saveInfo.playerData.rupees < this->unk_358) {
play_sound(NA_SE_SY_ERROR);
this->unk_33C = 0x1636;
this->unk_328 |= 1;
@@ -360,7 +360,7 @@ void func_80BCB6D0(EnScopenuts* this, PlayState* play) {
}
}
} else if (talkState == TEXT_STATE_DONE) {
- func_800B85E0(&this->actor, play, 400.0f, -1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
this->actionFunc = func_80BCB980;
}
}
@@ -368,10 +368,10 @@ void func_80BCB6D0(EnScopenuts* this, PlayState* play) {
void func_80BCB90C(EnScopenuts* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL;
- gSaveContext.save.weekEventReg[53] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_53_02);
this->actionFunc = func_80BCB6D0;
} else {
- Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_HEART_PIECE, 300.0f, 300.0f);
}
}
@@ -382,7 +382,7 @@ void func_80BCB980(EnScopenuts* this, PlayState* play) {
Message_StartTextbox(play, this->unk_33C, &this->actor);
this->actionFunc = func_80BCB6D0;
} else {
- func_800B85E0(&this->actor, play, 400.0f, -1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
}
}
@@ -448,14 +448,14 @@ void func_80BCBA00(EnScopenuts* this, PlayState* play) {
}
if (this->unk_36C == 0) {
- if (ActorCutscene_GetCanPlayNext(this->unk_338)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_338, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->actor);
this->unk_36C = 1;
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- ActorCutscene_SetIntentToPlay(this->unk_338);
+ CutsceneManager_Queue(this->csId);
return;
}
}
@@ -464,7 +464,7 @@ void func_80BCBA00(EnScopenuts* this, PlayState* play) {
this->unk_35A = 3;
this->unk_348 = 19;
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 19);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_DOWN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DOWN);
this->unk_328 &= ~2;
this->unk_34E = 50;
this->unk_328 |= 8;
@@ -528,7 +528,7 @@ void func_80BCBD28(EnScopenuts* this, PlayState* play) {
this->unk_368 = 0.3f;
this->unk_348 = 9;
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 9);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
func_80BCAC40(this, play);
this->actionFunc = func_80BCBF0C;
}
@@ -564,7 +564,7 @@ void func_80BCBFFC(EnScopenuts* this, PlayState* play) {
if (this->path != NULL) {
sp34 = func_80BCC448(this->path, this->unk_334, &this->actor.world.pos, &sp38);
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
sp38.y = this->actor.wallYaw;
}
@@ -593,40 +593,40 @@ void func_80BCBFFC(EnScopenuts* this, PlayState* play) {
if (sp32 == 3) {
if (this->unk_334 >= (this->path->count - 1)) {
- ActorCutscene_Stop(this->unk_338);
- gSaveContext.save.weekEventReg[52] &= (u8)~0x40;
+ CutsceneManager_Stop(this->csId);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_52_40);
this->actionFunc = func_80BCC288;
} else {
this->unk_334++;
}
}
} else if (this->actor.playerHeightRel > 500.0f) {
- ActorCutscene_Stop(this->unk_338);
+ CutsceneManager_Stop(this->csId);
this->actionFunc = func_80BCC288;
}
- Math_ApproachF(&this->actor.speedXZ, 1.0f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 1.0f, 0.2f, 1.0f);
func_80BCAD64(this, sp32);
if (this->unk_36C == 2) {
- if (ActorCutscene_GetCanPlayNext(this->unk_338)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_338, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->actor);
this->unk_36C = 3;
} else {
- ActorCutscene_SetIntentToPlay(this->unk_338);
+ CutsceneManager_Queue(this->csId);
return;
}
} else if ((this->unk_36C == 1) && (this->unk_36E == 20)) {
- ActorCutscene_Stop(this->unk_338);
- this->unk_338 = ActorCutscene_GetAdditionalCutscene(this->unk_338);
- ActorCutscene_SetIntentToPlay(this->unk_338);
+ CutsceneManager_Stop(this->csId);
+ this->csId = CutsceneManager_GetAdditionalCsId(this->csId);
+ CutsceneManager_Queue(this->csId);
this->unk_36C = 2;
}
this->unk_36E++;
}
void func_80BCC288(EnScopenuts* this, PlayState* play) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
s32 func_80BCC2AC(EnScopenuts* this, Path* path, s32 arg2_) {
@@ -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, RADF_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C);
+ func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(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;
@@ -684,9 +684,9 @@ void EnScopenuts_Init(Actor* thisx, PlayState* play) {
s32 pad;
EnScopenuts* this = THIS;
- if (!(gSaveContext.save.weekEventReg[74] & 0x40) &&
- (gSaveContext.save.inventory.items[ITEM_OCARINA] == ITEM_NONE)) {
- Actor_MarkForDeath(&this->actor);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_74_40) &&
+ (gSaveContext.save.saveInfo.inventory.items[ITEM_OCARINA] == ITEM_NONE)) {
+ Actor_Kill(&this->actor);
return;
}
@@ -702,28 +702,28 @@ void EnScopenuts_Init(Actor* thisx, PlayState* play) {
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
this->unk_328 |= 2;
this->unk_328 |= 4;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (ENSCOPENUTS_GET_3E0(&this->actor) == ENSCOPENUTS_3E0_0) {
- if (gSaveContext.save.weekEventReg[52] & 0x40) {
- Actor_MarkForDeath(&this->actor);
+ 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->actor.draw = NULL;
this->actionFunc = func_80BCAFA8;
this->actor.gravity = 0.0f;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else if (ENSCOPENUTS_GET_3E0(&this->actor) == ENSCOPENUTS_3E0_1) {
- if (gSaveContext.save.weekEventReg[52] & 0x40) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_40)) {
this->path = SubS_GetPathByIndex(play, ENSCOPENUTS_GET_FC00(&this->actor), 0x3F);
if (this->path == NULL) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
this->actor.gravity = -1.0f;
this->actor.draw = EnScopenuts_Draw;
- this->unk_338 = this->actor.cutscene;
+ this->csId = this->actor.csId;
this->unk_33C = 0;
this->unk_358 = 150;
this->unk_348 = 4;
@@ -732,10 +732,10 @@ void EnScopenuts_Init(Actor* thisx, PlayState* play) {
this->actionFunc = func_80BCB230;
}
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&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 3f6f43544..ef2ea74d8 100644
--- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.h
+++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.h
@@ -24,7 +24,7 @@ typedef struct EnScopenuts {
/* 0x32C */ f32 unk_32C;
/* 0x330 */ Path* path;
/* 0x334 */ s32 unk_334;
- /* 0x338 */ s16 unk_338;
+ /* 0x338 */ s16 csId;
/* 0x33A */ UNK_TYPE1 unk33A[2];
/* 0x33C */ u16 unk_33C;
/* 0x33E */ s16 unk_33E;
@@ -47,6 +47,4 @@ typedef struct EnScopenuts {
/* 0x372 */ s16 unk_372;
} EnScopenuts; // size = 0x374
-extern const ActorInit En_Scopenuts_InitVars;
-
#endif // Z_EN_SCOPENUTS_H
diff --git a/src/overlays/actors/ovl_En_Sda/overlay.cfg b/src/overlays/actors/ovl_En_Sda/overlay.cfg
deleted file mode 100644
index 694122dd7..000000000
--- a/src/overlays/actors/ovl_En_Sda/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Sda
-z_en_sda.c
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 19fac24a8..8835d92da 100644
--- a/src/overlays/actors/ovl_En_Sda/z_en_sda.c
+++ b/src/overlays/actors/ovl_En_Sda/z_en_sda.c
@@ -20,7 +20,7 @@ void func_80947668(u8* shadowTexture, Player* player, PlayState* play);
Vec3f D_80947EA0[16];
-const ActorInit En_Sda_InitVars = {
+ActorInit En_Sda_InitVars = {
ACTOR_EN_SDA,
ACTORCAT_BOSS,
FLAGS,
@@ -50,8 +50,8 @@ u8 D_80947AEC[] = {
2, 2, 2, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 3,
};
-s8 D_80947AFC[] = {
- 2, 9, 10, 11, 12, 13, 14, 0, 15, -1, 3, 4, 5, 6, 7, 8, -1, 1, 0, 0,
+s8 D_80947AFC[PLAYER_BODYPART_MAX] = {
+ 2, 9, 10, 11, 12, 13, 14, 0, 15, -1, 3, 4, 5, 6, 7, 8, -1, 1,
};
Vec3f D_80947B10[] = {
@@ -93,7 +93,7 @@ void EnSda_Update(Actor* thisx, PlayState* play) {
void EnSda_Draw(Actor* thisx, PlayState* play) {
EnSda* this = THIS;
Player* player;
- u8* shadowTexture = GRAPH_ALLOC(play->state.gfxCtx, 64 * 64);
+ u8* shadowTex = GRAPH_ALLOC(play->state.gfxCtx, 64 * 64);
if (this->actor.params == ENSDA_1) {
player = (Player*)this->actor.parent;
@@ -102,10 +102,10 @@ void EnSda_Draw(Actor* thisx, PlayState* play) {
}
player->actor.shape.shadowAlpha = 0;
- func_8094702C(this, shadowTexture, player, play);
+ func_8094702C(this, shadowTex, player, play);
if (KREG(0) < 5) {
- func_80947668(shadowTexture, player, play);
+ func_80947668(shadowTex, player, play);
}
}
@@ -242,7 +242,7 @@ void func_8094702C(EnSda* this, u8* shadowTexture, Player* player, PlayState* pl
Matrix_RotateXFNew((BREG(50) + 70) / 100.0f);
- for (i = 0; i < 18; i++) {
+ for (i = 0; i < PLAYER_BODYPART_MAX; i++) {
if (D_80947AFC[i] >= 0) {
D_80947EA0[D_80947AFC[i]] = player->bodyPartsPos[i];
}
diff --git a/src/overlays/actors/ovl_En_Sda/z_en_sda.h b/src/overlays/actors/ovl_En_Sda/z_en_sda.h
index ff17a2538..fd11ad5bc 100644
--- a/src/overlays/actors/ovl_En_Sda/z_en_sda.h
+++ b/src/overlays/actors/ovl_En_Sda/z_en_sda.h
@@ -11,6 +11,4 @@ typedef struct EnSda {
/* 0x000 */ Actor actor;
} EnSda; // size = 0x144
-extern const ActorInit En_Sda_InitVars;
-
#endif // Z_EN_SDA_H
diff --git a/src/overlays/actors/ovl_En_Sekihi/overlay.cfg b/src/overlays/actors/ovl_En_Sekihi/overlay.cfg
deleted file mode 100644
index 96c2eae2f..000000000
--- a/src/overlays/actors/ovl_En_Sekihi/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Sekihi
-z_en_sekihi.c
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 8e0ad276c..538f7d304 100644
--- a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c
+++ b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c
@@ -24,7 +24,7 @@ void func_80A44DE8(EnSekihi* this, PlayState* play);
void func_80A450B0(EnSekihi* this, PlayState* play);
void EnSekihi_DoNothing(EnSekihi* this, PlayState* play);
-const ActorInit En_Sekihi_InitVars = {
+ActorInit En_Sekihi_InitVars = {
ACTOR_EN_SEKIHI,
ACTORCAT_PROP,
FLAGS,
@@ -55,22 +55,26 @@ void EnSekihi_Init(Actor* thisx, PlayState* play) {
s32 pad;
if ((params < SEKIHI_TYPE_0 || params >= SEKIHI_TYPE_MAX) || sOpaDLists[params] == NULL) {
- Actor_MarkForDeath(&this->dyna.actor);
- } else {
- if ((params == SEKIHI_TYPE_4) && (((gSaveContext.save.skullTokenCount & 0xFFFF)) >= 30)) {
- gSaveContext.save.weekEventReg[13] |= 0x20;
- }
- objectIndex = Object_GetIndex(&play->objectCtx, sObjectIds[params]);
- if (objectIndex >= 0) {
- this->objectIndex = objectIndex;
- }
- this->actionFunc = func_80A44DE8;
- this->opaDList = sOpaDLists[params];
- this->xluDList = sXluDLists[params];
- this->dyna.actor.textId = sTextIds[params];
- this->dyna.actor.focus.pos.y = this->dyna.actor.world.pos.y + 60.0f;
- Actor_SetScale(&this->dyna.actor, 0.1f);
+ Actor_Kill(&this->dyna.actor);
+ return;
}
+
+ if ((params == SEKIHI_TYPE_4) &&
+ ((gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF) >= SPIDER_HOUSE_TOKENS_REQUIRED)) {
+ // For some reason the mikau grave sets the flag instead of something in the spider house on exit.
+ SET_WEEKEVENTREG(WEEKEVENTREG_OCEANSIDE_SPIDER_HOUSE_BUYER_MOVED_IN);
+ }
+
+ objectIndex = Object_GetIndex(&play->objectCtx, sObjectIds[params]);
+ if (objectIndex >= 0) {
+ this->objectIndex = objectIndex;
+ }
+ this->actionFunc = func_80A44DE8;
+ this->opaDList = sOpaDLists[params];
+ this->xluDList = sXluDLists[params];
+ this->dyna.actor.textId = sTextIds[params];
+ this->dyna.actor.focus.pos.y = this->dyna.actor.world.pos.y + 60.0f;
+ Actor_SetScale(&this->dyna.actor, 0.1f);
}
void EnSekihi_Destroy(Actor* thisx, PlayState* play) {
@@ -104,7 +108,7 @@ void func_80A44DE8(EnSekihi* this, PlayState* play) {
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
if ((params == SEKIHI_TYPE_4) && (INV_CONTENT(ITEM_MASK_ZORA) != ITEM_MASK_ZORA)) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
}
}
@@ -116,15 +120,15 @@ void func_80A44F40(EnSekihi* this, PlayState* play) {
switch (play->msgCtx.choiceIndex) {
case 0:
func_8019F208();
- func_80151938(play, 0x101A);
+ Message_ContinueTextbox(play, 0x101A);
break;
case 1:
func_8019F208();
- func_80151938(play, 0x101B);
+ Message_ContinueTextbox(play, 0x101B);
break;
case 2:
func_8019F230();
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80A450B0;
break;
}
@@ -136,11 +140,11 @@ void func_80A44F40(EnSekihi* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
switch (play->msgCtx.currentTextId) {
case 0x1018:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x101A:
case 0x101B:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80A450B0;
break;
}
diff --git a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.h b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.h
index e626b616d..0c26dab71 100644
--- a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.h
+++ b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.h
@@ -2,6 +2,8 @@
#define Z_EN_SEKIHI_H
#include "global.h"
+#include "overlays/actors/ovl_En_Si/z_en_si.h"
+
#define ENSIKIHI_GET_TYPE(thisx) ((thisx)->params & 0xF)
@@ -26,6 +28,4 @@ typedef enum SekihiType {
/* 0x5 */ SEKIHI_TYPE_MAX
} SekihiType;
-extern const ActorInit En_Sekihi_InitVars;
-
#endif // Z_EN_SEKIHI_H
diff --git a/src/overlays/actors/ovl_En_Sellnuts/overlay.cfg b/src/overlays/actors/ovl_En_Sellnuts/overlay.cfg
deleted file mode 100644
index f3b9a3eca..000000000
--- a/src/overlays/actors/ovl_En_Sellnuts/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Sellnuts
-z_en_sellnuts.c
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 d4a726887..871bb85a8 100644
--- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c
+++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c
@@ -49,7 +49,7 @@ static u16 D_80ADD938[] = { 0x0615, 0x060F, 0x060F };
static u8 D_80ADD940 = 0;
-const ActorInit En_Sellnuts_InitVars = {
+ActorInit En_Sellnuts_InitVars = {
ACTOR_EN_SELLNUTS,
ACTORCAT_NPC,
FLAGS,
@@ -118,7 +118,7 @@ void func_80ADADD0(EnSellnuts* this, PlayState* play) {
}
if (this->unk_338 & 1) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
}
}
@@ -294,7 +294,7 @@ void func_80ADB254(EnSellnuts* this, PlayState* play) {
Math_ApproachS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 2, 0xE38);
if (((this->actor.playerHeightRel < 50.0f) && (this->actor.playerHeightRel > -50.0f) ? true : false) &&
((this->actor.xzDistToPlayer < 200.0f) ? true : false)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
this->actionFunc = func_80ADB4F4;
this->unk_34C = 3;
this->collider.dim.height = 64;
@@ -303,12 +303,12 @@ void func_80ADB254(EnSellnuts* this, PlayState* play) {
if ((this->unk_34C == 4) || (this->unk_34C == 18)) {
this->unk_34C = 17;
this->collider.dim.height = 0;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_DOWN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DOWN);
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 17);
} else if (this->unk_34C == 2) {
this->unk_34C = 16;
this->collider.dim.height = 32;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_UP);
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 16);
} else if (this->unk_34C == 17) {
if (DECR(this->unk_34E) == 0) {
@@ -341,28 +341,28 @@ void func_80ADB544(EnSellnuts* this, PlayState* play) {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 3, 0x7D0, 0);
this->actor.world.rot.y = this->actor.shape.rot.y;
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- if (Player_GetExchangeItemId(play) == PLAYER_AP_MOON_TEAR) {
+ if (Player_GetExchangeItemId(play) == PLAYER_IA_MOON_TEAR) {
player->actor.textId = D_80ADD928[this->unk_33A];
this->unk_340 = player->actor.textId;
this->actionFunc = func_80ADBAB8;
} else {
switch (this->unk_340) {
case 0x60E:
- gSaveContext.save.weekEventReg[17] |= 0x20;
- gSaveContext.save.weekEventReg[86] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_17_20);
+ SET_WEEKEVENTREG(WEEKEVENTREG_86_04);
Message_StartTextbox(play, this->unk_340, &this->actor);
this->actionFunc = func_80ADB0D8;
break;
case 0x628:
- gSaveContext.save.weekEventReg[77] |= 0x40;
- gSaveContext.save.weekEventReg[86] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_77_40);
+ SET_WEEKEVENTREG(WEEKEVENTREG_86_04);
Message_StartTextbox(play, this->unk_340, &this->actor);
this->actionFunc = func_80ADB0D8;
break;
case 0x614:
- gSaveContext.save.weekEventReg[17] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_17_40);
Message_StartTextbox(play, this->unk_340, &this->actor);
this->actionFunc = func_80ADB0D8;
break;
@@ -382,24 +382,24 @@ void func_80ADB544(EnSellnuts* this, PlayState* play) {
} else if (((this->actor.xzDistToPlayer < 80.0f) &&
(((this->actor.playerHeightRel < 50.0f) && (this->actor.playerHeightRel > -50.0f)) ? true : false)) ||
this->actor.isTargeted) {
- func_800B85E0(&this->actor, play, 80.0f, PLAYER_AP_MOON_TEAR);
+ func_800B85E0(&this->actor, play, 80.0f, PLAYER_IA_MOON_TEAR);
if (player->transformation == PLAYER_FORM_DEKU) {
if (gSaveContext.save.day == 3) {
this->unk_33A = 2;
- if (gSaveContext.save.weekEventReg[77] & 0x40) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_40)) {
this->unk_340 = D_80ADD918[this->unk_33A];
} else {
this->unk_340 = D_80ADD910[this->unk_33A];
}
} else {
this->unk_33A = 1;
- if (gSaveContext.save.weekEventReg[17] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_17_20)) {
this->unk_340 = D_80ADD918[this->unk_33A];
} else {
this->unk_340 = D_80ADD910[this->unk_33A];
}
}
- } else if (gSaveContext.save.weekEventReg[17] & 0x40) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_17_40)) {
this->unk_340 = D_80ADD918[this->unk_33A];
} else {
this->unk_340 = D_80ADD910[this->unk_33A];
@@ -417,35 +417,36 @@ void func_80ADB544(EnSellnuts* this, PlayState* play) {
void func_80ADB924(EnSellnuts* this, PlayState* play) {
Player* player = GET_PLAYER(play);
u8 talkState = Message_GetState(&play->msgCtx);
- s32 item;
+ PlayerItemAction itemAction;
if (talkState == TEXT_STATE_16) {
- item = func_80123810(play);
- if (item > PLAYER_AP_NONE) {
- if (item == PLAYER_AP_MOON_TEAR) {
+ itemAction = func_80123810(play);
+
+ if (itemAction > PLAYER_IA_NONE) {
+ if (itemAction == PLAYER_IA_MOON_TEAR) {
player->actor.textId = D_80ADD928[this->unk_33A];
this->unk_340 = player->actor.textId;
- player->exchangeItemId = item;
+ player->exchangeItemId = itemAction;
this->actionFunc = func_80ADBAB8;
} else {
player->actor.textId = D_80ADD920[this->unk_33A];
this->unk_340 = player->actor.textId;
this->actionFunc = func_80ADB0D8;
}
- func_801477B4(play);
- } else if (item < PLAYER_AP_NONE) {
+ Message_CloseTextbox(play);
+ } else if (itemAction <= PLAYER_IA_MINUS1) {
this->unk_340 = D_80ADD920[this->unk_33A];
- func_80151938(play, this->unk_340);
+ Message_ContinueTextbox(play, this->unk_340);
this->actionFunc = func_80ADB0D8;
}
} else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
if (this->unk_340 == D_80ADD910[this->unk_33A]) {
this->unk_340 = D_80ADD938[this->unk_33A];
- func_80151938(play, this->unk_340);
+ Message_ContinueTextbox(play, this->unk_340);
this->actionFunc = func_80ADB0D8;
} else {
this->unk_340 = 0xFF;
- func_80151938(play, this->unk_340);
+ Message_ContinueTextbox(play, this->unk_340);
this->actionFunc = func_80ADB0D8;
}
}
@@ -472,17 +473,17 @@ void func_80ADBAB8(EnSellnuts* this, PlayState* play) {
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
this->actionFunc = func_80ADBBEC;
- func_800B7298(play, NULL, 0x13);
+ func_800B7298(play, NULL, PLAYER_CSMODE_19);
}
}
void func_80ADBBEC(EnSellnuts* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL;
- gSaveContext.save.weekEventReg[17] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_17_80);
this->actionFunc = func_80ADBCE4;
} else {
- Actor_PickUp(&this->actor, play, GI_DEED_LAND, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_DEED_LAND, 300.0f, 300.0f);
}
}
@@ -491,14 +492,14 @@ void func_80ADBC60(EnSellnuts* this, PlayState* play) {
Message_StartTextbox(play, this->unk_340, &this->actor);
this->actionFunc = func_80ADB0D8;
} else {
- func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
this->unk_340 = D_80ADD930[this->unk_33A];
}
}
void func_80ADBCE4(EnSellnuts* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) {
- func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
this->unk_340 = D_80ADD930[this->unk_33A];
this->actionFunc = func_80ADBC60;
}
@@ -531,14 +532,14 @@ void func_80ADBE80(EnSellnuts* this, PlayState* play) {
func_80ADAE64(this);
if (this->unk_366 == 0) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->actor);
this->unk_366 = 1;
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
return;
}
}
@@ -547,7 +548,7 @@ void func_80ADBE80(EnSellnuts* this, PlayState* play) {
this->unk_350 = 4;
this->unk_34C = 19;
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 19);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_DOWN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DOWN);
this->unk_338 &= ~1;
this->unk_338 |= 8;
this->unk_32C = this->actor.world.pos.y;
@@ -616,7 +617,7 @@ void func_80ADC118(EnSellnuts* this, PlayState* play) {
this->unk_34C = 9;
this->unk_360 = 0.3f;
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 9);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
this->actionFunc = func_80ADC034;
}
}
@@ -648,7 +649,7 @@ void func_80ADC37C(EnSellnuts* this, PlayState* play) {
this->actor.gravity = 0.0f;
if (this->path != NULL) {
sp2C = func_80ADCFE8(this->path, this->unk_334, &this->actor.world.pos, &sp30);
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
sp30.y = this->actor.wallYaw;
}
Math_SmoothStepToS(&this->actor.world.rot.y, sp30.y, 0xA, 0x12C, 0);
@@ -658,31 +659,31 @@ void func_80ADC37C(EnSellnuts* this, PlayState* play) {
this->actor.world.rot.x = -sp30.x;
if (func_80ADCE4C(this, this->path, this->unk_334) && (sp2C < 500.0f)) {
if (this->unk_334 >= (this->path->count - 1)) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->actionFunc = func_80ADC580;
} else {
this->unk_334++;
}
}
} else if (this->actor.playerHeightRel > 500.0f) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->actionFunc = func_80ADC580;
}
- Math_ApproachF(&this->actor.speedXZ, 2.0f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 2.0f, 0.2f, 1.0f);
Actor_MoveWithoutGravity(&this->actor);
if (this->unk_366 == 2) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->actor);
this->unk_366 = 3;
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
return;
}
} else if ((this->unk_366 == 1) && (this->unk_368 == 20)) {
- ActorCutscene_Stop(this->cutscene);
- this->cutscene = ActorCutscene_GetAdditionalCutscene(this->cutscene);
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Stop(this->csId);
+ this->csId = CutsceneManager_GetAdditionalCsId(this->csId);
+ CutsceneManager_Queue(this->csId);
this->unk_366 = 2;
}
@@ -690,7 +691,7 @@ void func_80ADC37C(EnSellnuts* this, PlayState* play) {
}
void func_80ADC580(EnSellnuts* this, PlayState* play) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
void func_80ADC5A4(EnSellnuts* this, PlayState* play) {
@@ -704,10 +705,10 @@ void func_80ADC5A4(EnSellnuts* this, PlayState* play) {
this->unk_338 |= 1;
this->actor.draw = EnSellnuts_Draw;
D_80ADD940 = 0;
- player->stateFlags1 |= 0x20;
+ player->stateFlags1 |= PLAYER_STATE1_20;
this->actionFunc = func_80ADC7B4;
} else {
- player->stateFlags1 &= ~0x20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
this->actionFunc = func_80ADC6D0;
}
} else if (func_80ADB08C(play) < 80.0f) {
@@ -740,22 +741,22 @@ void func_80ADC7B4(EnSellnuts* this, PlayState* play) {
s32 talkState = Message_GetState(&play->msgCtx);
if (this->unk_366 == 0) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->actor);
this->unk_366 = 1;
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
} else if ((this->unk_366 == 1) && (talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
this->unk_366 = 0;
- ActorCutscene_Stop(this->cutscene);
- this->cutscene = ActorCutscene_GetAdditionalCutscene(this->cutscene);
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Stop(this->csId);
+ this->csId = CutsceneManager_GetAdditionalCsId(this->csId);
+ CutsceneManager_Queue(this->csId);
this->unk_338 |= 8;
this->actionFunc = func_80ADC8C4;
}
@@ -765,21 +766,21 @@ void func_80ADC8C4(EnSellnuts* this, PlayState* play) {
Vec3s sp30;
if (this->unk_366 == 0) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->actor);
this->unk_366 = 1;
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
return;
}
}
if (this->path != NULL) {
func_80ADCFE8(this->path, this->unk_334, &this->actor.world.pos, &sp30);
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
sp30.y = this->actor.wallYaw;
}
Math_SmoothStepToS(&this->actor.world.rot.y, sp30.y, 0xA, 0x12C, 0);
@@ -792,7 +793,7 @@ void func_80ADC8C4(EnSellnuts* this, PlayState* play) {
this->unk_34C = 22;
this->actor.gravity = -1.0f;
this->actor.velocity.y = -1.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->unk_34C);
this->unk_338 &= ~1;
this->unk_338 &= ~2;
@@ -801,7 +802,7 @@ void func_80ADC8C4(EnSellnuts* this, PlayState* play) {
}
this->unk_334++;
}
- Math_ApproachF(&this->actor.speedXZ, 2.0f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 2.0f, 0.2f, 1.0f);
Actor_MoveWithoutGravity(&this->actor);
}
}
@@ -815,14 +816,14 @@ void func_80ADCA64(EnSellnuts* this, PlayState* play) {
this->actor.shape.rot.y += 0x4000;
this->unk_360 *= 0.93f;
if (this->actor.world.pos.y < -50.0f) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->unk_338 &= ~8;
this->unk_34E = 20;
this->unk_350 = 4;
this->unk_34C = 19;
this->actor.velocity.y = 0.0f;
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->unk_34C);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_DOWN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DOWN);
}
return;
}
@@ -834,9 +835,9 @@ void func_80ADCA64(EnSellnuts* this, PlayState* play) {
this->collider.dim.height = 0;
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 17);
} else if (this->unk_34C == 17) {
- ActorCutscene_Stop(this->cutscene);
- gSaveContext.save.weekEventReg[73] |= 4;
- Actor_MarkForDeath(&this->actor);
+ CutsceneManager_Stop(this->csId);
+ SET_WEEKEVENTREG(WEEKEVENTREG_73_04);
+ Actor_Kill(&this->actor);
}
}
}
@@ -871,7 +872,7 @@ void func_80ADCC04(EnSellnuts* this, PlayState* play) {
void func_80ADCD3C(EnSellnuts* this, PlayState* play) {
Math_ApproachS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 2, 0xE38);
- if (gSaveContext.save.weekEventReg[73] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_04)) {
this->unk_338 |= 2;
this->unk_338 |= 1;
this->unk_340 = 0x626;
@@ -883,7 +884,7 @@ void func_80ADCD3C(EnSellnuts* this, PlayState* play) {
this->collider.dim.height = 64;
this->unk_34C = 3;
this->unk_350 = 4;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->unk_34C);
this->actionFunc = func_80ADCC04;
} else if (D_80ADD940 != 0) {
@@ -915,7 +916,7 @@ s32 func_80ADCE4C(EnSellnuts* this, Path* path, s32 arg2) {
pointY = points[var + 1].z - points[var - 1].z;
}
- func_8017B7F8(&sp30, RADF_TO_BINANG(func_80086B30(pointX, pointY)), &sp44, &sp40, &sp3C);
+ func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(pointX, pointY)), &sp44, &sp40, &sp3C);
if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) {
ret = true;
}
@@ -947,8 +948,8 @@ void EnSellnuts_Init(Actor* thisx, PlayState* play) {
Player* player = GET_PLAYER(play);
s32 pad2;
- if ((gSaveContext.save.weekEventReg[17] & 0x80) || (gSaveContext.save.weekEventReg[61] & 0x10)) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_17_80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_61_10)) {
+ Actor_Kill(&this->actor);
}
Actor_ProcessInitChain(&this->actor, sInitChain);
@@ -958,7 +959,7 @@ void EnSellnuts_Init(Actor* thisx, PlayState* play) {
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->cutscene = this->actor.cutscene;
+ this->csId = this->actor.csId;
Actor_SetScale(&this->actor, 0.01f);
this->actor.colChkInfo.cylRadius = 0;
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
@@ -967,11 +968,11 @@ void EnSellnuts_Init(Actor* thisx, PlayState* play) {
this->unk_374 = 0.01f;
this->unk_370 = 0.01f;
this->unk_36C = 0.01f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.velocity.y = 0.0f;
- if (gSaveContext.save.weekEventReg[73] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_73_04)) {
if (ENSELLNUTS_GET_1(&this->actor)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
this->unk_338 |= 2;
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 49023ce7f..3acf7a3e0 100644
--- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.h
+++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.h
@@ -23,7 +23,7 @@ typedef struct EnSellnuts {
/* 0x334 */ s32 unk_334;
/* 0x338 */ u16 unk_338;
/* 0x33A */ u16 unk_33A;
- /* 0x33C */ s16 cutscene;
+ /* 0x33C */ s16 csId;
/* 0x33E */ UNK_TYPE1 unk33E[0x2];
/* 0x340 */ u16 unk_340;
/* 0x342 */ u16 unk_342;
@@ -46,6 +46,4 @@ typedef struct EnSellnuts {
/* 0x374 */ f32 unk_374;
} EnSellnuts; // size = 0x378
-extern const ActorInit En_Sellnuts_InitVars;
-
#endif // Z_EN_SELLNUTS_H
diff --git a/src/overlays/actors/ovl_En_Shn/overlay.cfg b/src/overlays/actors/ovl_En_Shn/overlay.cfg
deleted file mode 100644
index f0526f58c..000000000
--- a/src/overlays/actors/ovl_En_Shn/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Shn
-z_en_shn.c
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 93b75e96b..bdd5b787f 100644
--- a/src/overlays/actors/ovl_En_Shn/z_en_shn.c
+++ b/src/overlays/actors/ovl_En_Shn/z_en_shn.c
@@ -51,7 +51,7 @@ static UNK_TYPE D_80AE70B8[] = {
static UNK_TYPE D_80AE71C4[] = { 0x00374000, 0x1C2C09DB, 0x0C2F0000, 0x0C0F09DC, 0x0C0F09DD, 0x0C0F09DE, 0x0C0F09DF,
0x0C113740, 0x102C09E0, 0x0C2F0000, 0x0C0F09E1, 0x0C0F09E2, 0x0C100000 };
-const ActorInit En_Shn_InitVars = {
+ActorInit En_Shn_InitVars = {
ACTOR_EN_SHN,
ACTORCAT_NPC,
FLAGS,
@@ -181,7 +181,7 @@ void func_80AE6488(EnShn* this, PlayState* play) {
this->unk_2D4 += (this->unk_2D0 != 0.0f) ? 40.0f : -40.0f;
this->unk_2D4 = CLAMP(this->unk_2D4, 0.0f, 80.0f);
Matrix_Translate(this->unk_2D4, 0.0f, 0.0f, MTXMODE_APPLY);
- if ((&this->actor == player->targetActor) &&
+ if ((&this->actor == player->talkActor) &&
((play->msgCtx.currentTextId < 0xFF) || (play->msgCtx.currentTextId >= 0x201)) && (talkState == TEXT_STATE_3) &&
(this->prevTalkState == TEXT_STATE_3)) {
if (play->state.frames % 2 == 0) {
@@ -201,7 +201,7 @@ s32 func_80AE65F4(EnShn* this, PlayState* play) {
Player* player = GET_PLAYER(play);
u16 temp = play->msgCtx.currentTextId;
- if (player->stateFlags1 & 0x40) {
+ if (player->stateFlags1 & PLAYER_STATE1_40) {
if (this->unk_1DA != temp) {
if ((this->unk_1D8 & 0x80) || (this->unk_1D8 & 0x100)) {
this->unk_1D8 |= 8;
@@ -216,7 +216,7 @@ s32 func_80AE65F4(EnShn* this, PlayState* play) {
this->unk_1DA = temp;
this->unk_1D8 |= 0x40;
} else if (this->unk_1D8 & 0x40) {
- if (!(gSaveContext.save.weekEventReg[23] & 8)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_23_08)) {
func_80AE615C(this, 3);
}
this->unk_1DA = 0;
@@ -227,8 +227,8 @@ s32 func_80AE65F4(EnShn* this, PlayState* play) {
s32 func_80AE6704(Actor* thisx, PlayState* play) {
static s32 sPictographFlags[] = {
- PICTOGRAPH_0, PICTOGRAPH_MONKEY, PICTOGRAPH_BIG_OCTO,
- PICTOGRAPH_TINGLE, PICTOGRAPH_DEKU_KING, PICTOGRAPH_IN_SWAMP,
+ PICTO_VALID_0, PICTO_VALID_MONKEY, PICTO_VALID_BIG_OCTO,
+ PICTO_VALID_TINGLE, PICTO_VALID_DEKU_KING, PICTO_VALID_IN_SWAMP,
};
EnShn* this = THIS;
s32 ret = 0;
@@ -258,13 +258,13 @@ s32 func_80AE6704(Actor* thisx, PlayState* play) {
break;
case 6:
- gSaveContext.save.weekEventReg[90] &= (u8)~0x40;
- func_800B7298(play, &this->actor, 7);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_40);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT);
play->nextEntrance = ENTRANCE(SOUTHERN_SWAMP_POISONED, 6);
gSaveContext.nextCutsceneIndex = 0;
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_03;
- gSaveContext.nextTransitionType = TRANS_TYPE_07;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE_SLOW;
this->unk_2C6++;
break;
}
@@ -293,17 +293,17 @@ s32 func_80AE68F0(EnShn* this, PlayState* play) {
if (this->unk_1D8 & 7) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->unk_1D8 &= ~0x180;
- if (player->exchangeItemId == PLAYER_AP_PICTO_BOX) {
+ if (player->exchangeItemId == PLAYER_IA_PICTO_BOX) {
this->unk_1D8 |= 0x80;
this->unk_2E4 = player->exchangeItemId;
- } else if (player->exchangeItemId != PLAYER_AP_NONE) {
+ } else if (player->exchangeItemId != PLAYER_IA_NONE) {
this->unk_1D8 |= 0x100;
this->unk_2E4 = player->exchangeItemId;
}
SubS_UpdateFlags(&this->unk_1D8, 0, 7);
this->unk_1DC = func_80AE6880(this, play);
this->unk_2C6 = 0;
- if (gSaveContext.save.weekEventReg[23] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_08)) {
this->unk_1D8 |= 8;
}
this->actionFunc = func_80AE6A64;
@@ -315,7 +315,7 @@ s32 func_80AE68F0(EnShn* this, PlayState* play) {
void func_80AE69E8(EnShn* this, PlayState* play) {
Math_ApproachS(&this->actor.shape.rot.y, this->actor.world.rot.y, 3, 0x2AA8);
- if ((gSaveContext.save.weekEventReg[23] & 8) && EnShn_IsFacingPlayer(this)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_08) && EnShn_IsFacingPlayer(this)) {
this->unk_1D8 |= 8;
} else {
this->unk_1D8 &= ~0x8;
@@ -350,7 +350,7 @@ void EnShn_Init(Actor* thisx, PlayState* play) {
SkelAnime_InitFlex(play, &this->skelAnime, &gBurlyGuySkel, NULL, this->jointTable, this->morphTable,
BURLY_GUY_LIMB_MAX);
this->unk_2E8 = -1;
- if (gSaveContext.save.weekEventReg[23] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_08)) {
func_80AE615C(this, 0);
} else {
func_80AE615C(this, 2);
@@ -382,7 +382,7 @@ void EnShn_Update(Actor* thisx, PlayState* play) {
func_80AE6130(this);
func_80AE63A8(this, play);
this->unk_2E0 = 0;
- func_8013C964(&this->actor, play, 120.0f, 40.0f, PLAYER_AP_NONE, this->unk_1D8 & 7);
+ func_8013C964(&this->actor, play, 120.0f, 40.0f, PLAYER_IA_NONE, this->unk_1D8 & 7);
}
s32 EnShn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
diff --git a/src/overlays/actors/ovl_En_Shn/z_en_shn.h b/src/overlays/actors/ovl_En_Shn/z_en_shn.h
index e373abde2..bb4740142 100644
--- a/src/overlays/actors/ovl_En_Shn/z_en_shn.h
+++ b/src/overlays/actors/ovl_En_Shn/z_en_shn.h
@@ -43,6 +43,4 @@ typedef struct EnShn {
/* 0x2EC */ s32 unk_2EC;
} EnShn; // size = 0x2F0
-extern const ActorInit En_Shn_InitVars;
-
#endif // Z_EN_SHN_H
diff --git a/src/overlays/actors/ovl_En_Si/overlay.cfg b/src/overlays/actors/ovl_En_Si/overlay.cfg
deleted file mode 100644
index 67fe95518..000000000
--- a/src/overlays/actors/ovl_En_Si/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Si
-z_en_si.c
diff --git a/src/overlays/actors/ovl_En_Si/z_en_si.c b/src/overlays/actors/ovl_En_Si/z_en_si.c
index eccfc5f1e..cf44d641b 100644
--- a/src/overlays/actors/ovl_En_Si/z_en_si.c
+++ b/src/overlays/actors/ovl_En_Si/z_en_si.c
@@ -15,11 +15,9 @@ void EnSi_Destroy(Actor* thisx, PlayState* play);
void EnSi_Update(Actor* thisx, PlayState* play);
void EnSi_Draw(Actor* thisx, PlayState* play);
-void func_8098CB70(EnSi* this, PlayState* play);
-void func_8098CBDC(EnSi* this, PlayState* play);
+void EnSi_DraggedByHookshot(EnSi* this, PlayState* play);
-#if 0
-const ActorInit En_Si_InitVars = {
+ActorInit En_Si_InitVars = {
ACTOR_EN_SI,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -31,18 +29,29 @@ const ActorInit En_Si_InitVars = {
(ActorFunc)EnSi_Draw,
};
-// static ColliderSphereInit sSphereInit = {
-static ColliderSphereInit D_8098CD80 = {
- { COLTYPE_NONE, AT_NONE, AC_ON | AC_TYPE_PLAYER, OC1_ON | OC1_NO_PUSH | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_SPHERE, },
- { ELEMTYPE_UNK0, { 0xF7CFFFFF, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_ON | TOUCH_SFX_NORMAL, BUMP_ON | BUMP_HOOKABLE, OCELEM_ON, },
+static ColliderSphereInit sSphereInit = {
+ {
+ COLTYPE_NONE,
+ AT_NONE,
+ AC_ON | AC_TYPE_PLAYER,
+ OC1_ON | OC1_NO_PUSH | OC1_TYPE_ALL,
+ OC2_TYPE_1,
+ COLSHAPE_SPHERE,
+ },
+ {
+ ELEMTYPE_UNK0,
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_ON | TOUCH_SFX_NORMAL,
+ BUMP_ON | BUMP_HOOKABLE,
+ OCELEM_ON,
+ },
{ 0, { { 0, 0, 0 }, 10 }, 100 },
};
-// sColChkInfoInit
-static CollisionCheckInfoInit2 D_8098CDAC = { 1, 0, 0, 0, MASS_IMMOVABLE };
+static CollisionCheckInfoInit2 sColChkInfoInit = { 1, 0, 0, 0, MASS_IMMOVABLE };
-// static DamageTable sDamageTable = {
-static DamageTable D_8098CDB8 = {
+static DamageTable sDamageTable = {
/* Deku Nut */ DMG_ENTRY(1, 0x0),
/* Deku Stick */ DMG_ENTRY(1, 0x0),
/* Horse trample */ DMG_ENTRY(1, 0x0),
@@ -77,24 +86,79 @@ static DamageTable D_8098CDB8 = {
/* Powder Keg */ DMG_ENTRY(1, 0x0),
};
-#endif
+void EnSi_UpdateCollision(EnSi* this, PlayState* play) {
+ this->collider.dim.worldSphere.center.x = this->actor.world.pos.x;
+ this->collider.dim.worldSphere.center.y = this->actor.world.pos.y;
+ this->collider.dim.worldSphere.center.z = this->actor.world.pos.z;
+ this->collider.dim.worldSphere.radius = this->collider.dim.modelSphere.radius * this->collider.dim.scale;
+ if (this->actor.colChkInfo.health > 0) {
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
+ }
+ CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
+}
-extern ColliderSphereInit D_8098CD80;
-extern CollisionCheckInfoInit2 D_8098CDAC;
-extern DamageTable D_8098CDB8;
+void EnSi_GiveToken(EnSi* this, PlayState* play) {
+ s32 chestFlag = ENSI_GET_CHEST_FLAG(&this->actor);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Si/func_8098CA20.s")
+ if ((chestFlag < 0x20) && (chestFlag >= 0)) {
+ Flags_SetTreasure(play, chestFlag);
+ }
+ Item_Give(play, ITEM_SKULL_TOKEN);
+ if (Inventory_GetSkullTokenCount(play->sceneId) >= SPIDER_HOUSE_TOKENS_REQUIRED) {
+ Message_StartTextbox(play, 0xFC, NULL); // You collected all tokens, curse lifted
+ Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900);
+ } else {
+ Message_StartTextbox(play, 0x52, NULL); // You got one more gold token, your [count] one!
+ Audio_PlayFanfare(NA_BGM_GET_SMALL_ITEM);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Si/func_8098CAD0.s")
+void EnSi_Wait(EnSi* this, PlayState* play) {
+ if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_2000)) {
+ this->actionFunc = EnSi_DraggedByHookshot;
+ } else if (this->collider.base.ocFlags2 & OC2_HIT_PLAYER) {
+ EnSi_GiveToken(this, play);
+ Actor_Kill(&this->actor);
+ return;
+ }
+ this->actor.shape.rot.y += 0x38E;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Si/func_8098CB70.s")
+void EnSi_DraggedByHookshot(EnSi* this, PlayState* play) {
+ if (!CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_2000)) {
+ EnSi_GiveToken(this, play);
+ Actor_Kill(&this->actor);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Si/func_8098CBDC.s")
+void EnSi_Init(Actor* thisx, PlayState* play) {
+ EnSi* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Si/EnSi_Init.s")
+ Collider_InitSphere(play, &this->collider);
+ Collider_SetSphere(play, &this->collider, &this->actor, &sSphereInit);
+ CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
+ Actor_SetScale(&this->actor, 0.25f);
+ this->actionFunc = EnSi_Wait;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Si/EnSi_Destroy.s")
+void EnSi_Destroy(Actor* thisx, PlayState* play) {
+ EnSi* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Si/EnSi_Update.s")
+ Collider_DestroySphere(play, &this->collider);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Si/EnSi_Draw.s")
+void EnSi_Update(Actor* thisx, PlayState* play) {
+ EnSi* this = THIS;
+
+ this->actionFunc(this, play);
+ EnSi_UpdateCollision(this, play);
+ Actor_SetFocus(&this->actor, 0.0f);
+}
+
+void EnSi_Draw(Actor* thisx, PlayState* play) {
+ EnSi* this = THIS;
+
+ func_800B8118(&this->actor, play, 0);
+ func_800B8050(&this->actor, play, 0);
+ GetItem_Draw(play, GID_SKULL_TOKEN_2);
+}
diff --git a/src/overlays/actors/ovl_En_Si/z_en_si.h b/src/overlays/actors/ovl_En_Si/z_en_si.h
index 032e1f116..f1b089ddd 100644
--- a/src/overlays/actors/ovl_En_Si/z_en_si.h
+++ b/src/overlays/actors/ovl_En_Si/z_en_si.h
@@ -3,6 +3,10 @@
#include "global.h"
+#define ENSI_GET_CHEST_FLAG(thisx) (((thisx)->params & 0xFC) >> 2)
+
+#define SPIDER_HOUSE_TOKENS_REQUIRED 30
+
struct EnSi;
typedef void (*EnSiActionFunc)(struct EnSi*, PlayState*);
@@ -10,9 +14,7 @@ typedef void (*EnSiActionFunc)(struct EnSi*, PlayState*);
typedef struct EnSi {
/* 0x000 */ Actor actor;
/* 0x144 */ EnSiActionFunc actionFunc;
- /* 0x148 */ char unk_148[0x58];
+ /* 0x148 */ ColliderSphere collider;
} EnSi; // size = 0x1A0
-extern const ActorInit En_Si_InitVars;
-
#endif // Z_EN_SI_H
diff --git a/src/overlays/actors/ovl_En_Skb/overlay.cfg b/src/overlays/actors/ovl_En_Skb/overlay.cfg
deleted file mode 100644
index dfa528943..000000000
--- a/src/overlays/actors/ovl_En_Skb/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Skb
-z_en_skb.c
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 d0c02e4fa..735111a2b 100644
--- a/src/overlays/actors/ovl_En_Skb/z_en_skb.c
+++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.c
@@ -145,7 +145,7 @@ static DamageTable sDamageTable = {
/* Powder Keg */ DMG_ENTRY(1, 0xF),
};
-const ActorInit En_Skb_InitVars = {
+ActorInit En_Skb_InitVars = {
ACTOR_EN_SKB,
ACTORCAT_ENEMY,
FLAGS,
@@ -230,7 +230,7 @@ void EnSkb_Init(Actor* thisx, PlayState* play) {
this->unk_3D6 = ENSKB_GET_F0(&this->actor);
this->actor.floorHeight = this->actor.world.pos.y;
- if ((play->sceneId == SCENE_BOTI) && (gSaveContext.sceneLayer == 1) && (play->csCtx.currentCsIndex == 0)) {
+ if ((play->sceneId == SCENE_BOTI) && (gSaveContext.sceneLayer == 1) && (play->csCtx.scriptIndex == 0)) {
this->actor.flags |= ACTOR_FLAG_100000;
}
@@ -289,7 +289,7 @@ void func_80994DA8(EnSkb* this, PlayState* play) {
void func_80994E2C(EnSkb* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1);
this->actor.flags &= ~ACTOR_FLAG_1;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_APPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_APPEAR);
this->unk_3D0 = 0;
this->unk_3DE = 0;
this->actionFunc = func_80994E94;
@@ -325,7 +325,7 @@ void func_80994F7C(EnSkb* this, PlayState* play) {
this->unk_3E0 = 1;
}
this->actionFunc = func_80995190;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
} else if (Actor_IsFacingPlayer(&this->actor, 0x2AAA) && !(this->collider.base.acFlags & AC_HIT)) {
func_800B8614(&this->actor, play, 100.0f);
}
@@ -333,7 +333,7 @@ void func_80994F7C(EnSkb* this, PlayState* play) {
void func_8099504C(EnSkb* this) {
this->actionFunc = func_80995068;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
void func_80995068(EnSkb* this, PlayState* play) {
@@ -349,7 +349,7 @@ void func_80995068(EnSkb* this, PlayState* play) {
this->unk_3E0 = 1;
}
this->actionFunc = func_80995190;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
} else if (Player_GetMask(play) != PLAYER_MASK_CAPTAIN) {
this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_4);
this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8);
@@ -417,7 +417,7 @@ void func_809952D8(EnSkb* this) {
this->unk_3DE = 9;
this->actionFunc = func_8099533C;
this->actor.shape.shadowScale = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.shape.yOffset = 0.0f;
}
@@ -439,7 +439,7 @@ void func_809953E8(EnSkb* this) {
this->unk_3DE = 10;
this->actionFunc = func_8099544C;
this->actor.shape.shadowScale = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.shape.yOffset = 0.0f;
}
@@ -462,7 +462,7 @@ void func_809954F8(EnSkb* this) {
this->actionFunc = func_8099556C;
this->actor.gravity = 0.0f;
this->actor.shape.shadowScale = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.shape.yOffset = 0.0f;
this->actor.targetArrowOffset = 4000.0f;
}
@@ -495,19 +495,19 @@ void func_8099556C(EnSkb* this, PlayState* play) {
}
void func_8099571C(EnSkb* this) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_ATTACK);
this->unk_3DC = 0;
this->actor.shape.shadowScale = 0.0f;
if (this->unk_3DE == 9) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 8);
- this->actor.speedXZ = 2.4f;
+ this->actor.speed = 2.4f;
this->actor.gravity = -1.0f;
this->actor.velocity.y = 3.0f;
} else if (this->unk_3DE == 0xA) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 8);
} else if (this->unk_3DE == 0xB) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 9);
- this->actor.speedXZ = 3.2f;
+ this->actor.speed = 3.2f;
this->actor.gravity = -1.0f;
this->actor.velocity.y = 2.0f;
}
@@ -526,8 +526,8 @@ void func_80995818(EnSkb* this, PlayState* play) {
func_80995A30(this);
}
- if (this->actor.bgCheckFlags & 2) {
- this->actor.speedXZ = 0.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
+ this->actor.speed = 0.0f;
for (i = 0; i < 10; i++) {
func_809947B0(play, this, &this->actor.world.pos);
}
@@ -539,8 +539,8 @@ void func_809958F4(EnSkb* this) {
0.0f, ANIMMODE_ONCE, -4.0f);
this->unk_3E4 = 0;
this->actor.flags &= ~ACTOR_FLAG_1;
- this->actor.speedXZ = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
+ this->actor.speed = 0.0f;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
this->unk_3DE = 1;
this->actionFunc = func_8099599C;
}
@@ -555,13 +555,13 @@ void func_8099599C(EnSkb* this, PlayState* play) {
Math_ApproachF(&this->actor.shape.shadowScale, 0.0f, 1.0f, 2.5f);
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
void func_80995A30(EnSkb* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
- this->actor.speedXZ = 1.6f;
+ this->actor.speed = 1.6f;
this->unk_3DA = 0;
this->unk_3DE = 2;
this->actionFunc = func_80995A8C;
@@ -585,7 +585,7 @@ void func_80995A8C(EnSkb* this, PlayState* play) {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer + this->unk_3DA, 1, 0x2EE, 0);
this->actor.world.rot.y = this->actor.shape.rot.y;
if (Animation_OnFrame(&this->skelAnime, 8.0f) || Animation_OnFrame(&this->skelAnime, 15.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_WALK);
}
if ((this->actor.xzDistToPlayer > 800.0f) || func_80996594(this, play)) {
@@ -598,14 +598,14 @@ void func_80995A8C(EnSkb* this, PlayState* play) {
void func_80995C24(EnSkb* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
this->collider.base.atFlags &= ~AT_BOUNCED;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->unk_3DE = 3;
this->actionFunc = func_80995C84;
}
void func_80995C84(EnSkb* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, 3.0f) && (this->unk_3E4 == 0)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_ATTACK);
this->unk_3E4 = 1;
} else if (Animation_OnFrame(&this->skelAnime, 6.0f)) {
this->unk_3E4 = 0;
@@ -635,27 +635,27 @@ void func_80995DC4(EnSkb* this, PlayState* play) {
}
void func_80995E08(EnSkb* this) {
- if (this->actor.bgCheckFlags & 1) {
- this->actor.speedXZ = 0.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ this->actor.speed = 0.0f;
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
this->unk_3E4 = 0;
this->unk_3DE = 5;
this->actionFunc = func_80995E64;
}
void func_80995E64(EnSkb* this, PlayState* play) {
- if (this->actor.bgCheckFlags & 2) {
- this->actor.speedXZ = 0.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
+ this->actor.speed = 0.0f;
}
- if (this->actor.bgCheckFlags & 1) {
- if (this->actor.speedXZ < 0.0f) {
- this->actor.speedXZ += 0.05f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ if (this->actor.speed < 0.0f) {
+ this->actor.speed += 0.05f;
}
}
- if ((this->actor.colorFilterTimer == 0) && (this->actor.bgCheckFlags & 1)) {
+ if ((this->actor.colorFilterTimer == 0) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
if (this->unk_3DC == 0) {
if (this->actor.colChkInfo.health == 0) {
func_809961E4(this, play);
@@ -684,43 +684,44 @@ void func_80995F98(EnSkb* this) {
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 8);
this->actor.gravity = -1.0f;
- this->actor.speedXZ = 1.0f;
+ this->actor.speed = 1.0f;
} else if (this->unk_3DE == 0xB) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 9);
- this->actor.speedXZ = 3.2f;
+ this->actor.speed = 3.2f;
this->actor.velocity.y = 2.0f;
this->actor.gravity = -1.0f;
} else {
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
- if (this->actor.bgCheckFlags & 1) {
- this->actor.speedXZ = -4.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ this->actor.speed = -4.0f;
}
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE);
this->unk_3DE = 6;
this->actionFunc = func_809960AC;
}
void func_809960AC(EnSkb* this, PlayState* play) {
- if (this->actor.bgCheckFlags & 2) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
s32 i;
for (i = 0; i < 10; i++) {
func_809947B0(play, this, &this->actor.world.pos);
}
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
- if (this->actor.bgCheckFlags & 1) {
- if (this->actor.speedXZ < 0.0f) {
- this->actor.speedXZ += 0.05f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ if (this->actor.speed < 0.0f) {
+ this->actor.speed += 0.05f;
}
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 1, 0x9C4, 0);
}
Math_SmoothStepToS(&this->actor.shape.rot.x, 0, 0x10, 0x7D0, 0x64);
- if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) && (this->actor.bgCheckFlags & 1)) {
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) &&
+ (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
this->actor.shape.rot.x = 0;
this->actor.world.rot = this->actor.shape.rot;
func_80994DA8(this, play);
@@ -730,8 +731,8 @@ void func_809960AC(EnSkb* this, PlayState* play) {
void func_809961E4(EnSkb* this, PlayState* play) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4);
this->unk_3D8 |= 0x40;
- if (this->actor.bgCheckFlags & 1) {
- this->actor.speedXZ = -6.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ this->actor.speed = -6.0f;
}
this->unk_3E4 = 0;
this->actor.flags &= ~ACTOR_FLAG_1;
@@ -749,7 +750,7 @@ void func_80996284(EnSkb* this, PlayState* play) {
}
void func_809962D4(EnSkb* this) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
this->actionFunc = func_8099630C;
}
@@ -759,7 +760,7 @@ void func_8099630C(EnSkb* this, PlayState* play) {
this->drawDmgEffScale = 0.0f;
this->drawDmgEffAlpha = 0.0f;
if (this->actor.colChkInfo.health != 0) {
- Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
this->unk_3D8 |= 1;
func_80995F98(this);
@@ -781,7 +782,7 @@ void func_809963D8(EnSkb* this, PlayState* play) {
this->drawDmgEffScale = 0.0f;
this->drawDmgEffAlpha = 0.0f;
if (this->actor.colChkInfo.health != 0) {
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
this->unk_3D8 |= 1;
func_80995F98(this);
@@ -800,14 +801,14 @@ void func_80996474(EnSkb* this) {
void func_809964A0(EnSkb* this, PlayState* play) {
if (this->unk_3D0++ >= 19) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
void func_809964DC(EnSkb* this, PlayState* play) {
if (this->unk_3D6 == 0) {
if ((this->actionFunc != func_80994E94) && (this->actionFunc != func_80996284) &&
- (this->actionFunc != func_809964A0) && (gSaveContext.save.weekEventReg[85] & 0x40)) {
+ (this->actionFunc != func_809964A0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_85_40)) {
this->actor.colChkInfo.health = 0;
func_809961E4(this, play);
}
@@ -873,7 +874,8 @@ void func_8099672C(EnSkb* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if ((this->unk_3DE != 6) && (this->unk_3DE != 7)) {
- if ((this->actor.bgCheckFlags & 0x60) && (this->actor.depthInWater >= 40.0f)) {
+ if ((this->actor.bgCheckFlags & (BGCHECKFLAG_WATER | BGCHECKFLAG_WATER_TOUCH)) &&
+ (this->actor.depthInWater >= 40.0f)) {
this->actor.colChkInfo.health = 0;
this->unk_3E4 = 0;
func_809961E4(this, play);
@@ -913,12 +915,12 @@ void func_8099672C(EnSkb* this, PlayState* play) {
this->drawDmgEffTimer = 40;
this->drawDmgEffAlpha = 1.0f;
this->drawDmgEffScale = 0.0f;
- Actor_SetColorFilter(&this->actor, 0, 0x78, 0, 40);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 120, COLORFILTER_BUFFLAG_OPA, 40);
func_80995E08(this);
break;
case 1:
- Actor_SetColorFilter(&this->actor, 0, 0x78, 0, 40);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 120, COLORFILTER_BUFFLAG_OPA, 40);
func_80995E08(this);
break;
@@ -927,14 +929,14 @@ void func_8099672C(EnSkb* this, PlayState* play) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
this->drawDmgEffAlpha = 1.0f;
this->drawDmgEffScale = 0.0f;
- Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
this->unk_3D8 |= 1;
func_80995F98(this);
break;
case 3:
if (this->actor.colChkInfo.health != 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE);
this->drawDmgEffTimer = 80;
} else {
this->drawDmgEffTimer = 3;
@@ -942,7 +944,7 @@ void func_8099672C(EnSkb* this, PlayState* play) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_SFX;
this->drawDmgEffAlpha = 1.0f;
this->drawDmgEffScale = 0.5f;
- Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
func_809962D4(this);
break;
@@ -951,8 +953,8 @@ void func_8099672C(EnSkb* this, PlayState* play) {
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
this->drawDmgEffAlpha = 1.0f;
this->drawDmgEffScale = 0.5f;
- Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, 0, 8);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_DAMAGE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKID_DAMAGE);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
func_809963C4(this);
break;
@@ -970,7 +972,7 @@ void func_8099672C(EnSkb* this, PlayState* play) {
}
case 13:
- Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
func_80995F98(this);
break;
@@ -1060,7 +1062,9 @@ void EnSkb_Update(Actor* thisx, PlayState* play) {
Actor_MoveWithGravity(&this->actor);
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 30.0f, 60.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 30.0f, 60.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
func_809964DC(this, play);
func_80996AD0(this, play);
func_80996D68(this, play);
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 002604838..1fbf441ea 100644
--- a/src/overlays/actors/ovl_En_Skb/z_en_skb.h
+++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.h
@@ -9,6 +9,10 @@ typedef void (*EnSkbActionFunc)(struct EnSkb*, PlayState*);
#define ENSKB_GET_F0(thisx) (((thisx)->params >> 4) & 0xF)
+typedef enum {
+ /* 0 */ ENSKB_PARAMS_0,
+} EnSkbParams;
+
typedef struct EnSkb {
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
@@ -36,6 +40,4 @@ typedef struct EnSkb {
/* 0x3E6 */ u8 drawDmgEffType;
} EnSkb; // size = 0x3E8
-extern const ActorInit En_Skb_InitVars;
-
#endif // Z_EN_SKB_H
diff --git a/src/overlays/actors/ovl_En_Slime/overlay.cfg b/src/overlays/actors/ovl_En_Slime/overlay.cfg
deleted file mode 100644
index ad13869e8..000000000
--- a/src/overlays/actors/ovl_En_Slime/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Slime
-z_en_slime.c
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 b9660682f..3aab4b3ce 100644
--- a/src/overlays/actors/ovl_En_Slime/z_en_slime.c
+++ b/src/overlays/actors/ovl_En_Slime/z_en_slime.c
@@ -10,29 +10,61 @@
#define THIS ((EnSlime*)thisx)
+#define ICE_BLOCK_TIMER_MAX 254
+#define ICE_BLOCK_UNUSED (ICE_BLOCK_TIMER_MAX + 1)
+
+typedef enum EnSlimeEyeTexture {
+ /* 0 */ EN_SLIME_EYETEX_OPEN,
+ /* 1 */ EN_SLIME_EYETEX_HALF,
+ /* 2 */ EN_SLIME_EYETEX_CLOSED,
+ /* 3 */ EN_SLIME_EYETEX_HALF2,
+ /* 4 */ EN_SLIME_EYETEX_MAX
+} EnSlimeEyeTexture;
+
+typedef enum EnSlimeDamageEffect {
+ /* 0x0 */ EN_SLIME_DMGEFF_NORMAL,
+ /* 0x1 */ EN_SLIME_DMGEFF_STUN,
+ /* 0x3 */ EN_SLIME_DMGEFF_FREEZE = 0x3,
+ /* 0x4 */ EN_SLIME_DMGEFF_LIGHT,
+ /* 0x5 */ EN_SLIME_DMGEFF_ELECTRIC,
+ /* 0xE */ EN_SLIME_DMGEFF_HOOKSHOT = 0xE,
+ /* 0xF */ EN_SLIME_DMGEFF_BLUNT,
+} EnSlimeDamageEffect;
+
void EnSlime_Init(Actor* thisx, PlayState* play);
void EnSlime_Destroy(Actor* thisx, PlayState* play);
void EnSlime_Update(Actor* thisx, PlayState* play);
void EnSlime_Draw(Actor* thisx, PlayState* play);
-void func_80A2F140(EnSlime* this, PlayState* play);
-void func_80A2F1A4(EnSlime* this, PlayState* play);
-void func_80A2F418(EnSlime* this, PlayState* play);
-void func_80A2F6CC(EnSlime* this, PlayState* play);
-void func_80A2F8E0(EnSlime* this, PlayState* play);
-void func_80A2FA88(EnSlime* this, PlayState* play);
-void func_80A2FBA0(EnSlime* this, PlayState* play);
-void func_80A2FE38(EnSlime* this, PlayState* play);
-void func_80A30344(EnSlime* this, PlayState* play);
-void func_80A304B8(EnSlime* this, PlayState* play);
-void func_80A30820(EnSlime* this, PlayState* play);
-void func_80A30944(EnSlime* this, PlayState* play);
-void func_80A30A20(EnSlime* this, PlayState* play);
-void func_80A30AE4(EnSlime* this, PlayState* play);
-void func_80A30C2C(EnSlime* this, PlayState* play);
-void func_80A30CEC(EnSlime* this, PlayState* play);
+void EnSlime_SetupInitializeIdle(EnSlime* this);
+void EnSlime_InitializeIdle(EnSlime* this, PlayState* play);
+void EnSlime_SetupIdle(EnSlime* this);
+void EnSlime_Idle(EnSlime* this, PlayState* play);
+void EnSlime_SetupMoveInDirection(EnSlime* this);
+void EnSlime_MoveInDirection(EnSlime* this, PlayState* play);
+void EnSlime_SetupMoveToHome(EnSlime* this);
+void EnSlime_MoveToHome(EnSlime* this, PlayState* play);
+void EnSlime_SetupTurnToPlayer(EnSlime* this);
+void EnSlime_TurnToPlayer(EnSlime* this, PlayState* play);
+void EnSlime_SetupJump(EnSlime* this);
+void EnSlime_Jump(EnSlime* this, PlayState* play);
+void EnSlime_SetupLand(EnSlime* this);
+void EnSlime_Land(EnSlime* this, PlayState* play);
+void EnSlime_ReactToBluntHit(EnSlime* this, PlayState* play);
+void EnSlime_Damaged(EnSlime* this, PlayState* play);
+void EnSlime_SetupDead(EnSlime* this);
+void EnSlime_Dead(EnSlime* this, PlayState* play);
+void EnSlime_SpawnIceBlock(EnSlime* this, PlayState* play);
+void EnSlime_SetupIceBlock(EnSlime* this);
+void EnSlime_IceBlock(EnSlime* this, PlayState* play);
+void EnSlime_Stun(EnSlime* this, PlayState* play);
+void EnSlime_SetupIceBlockThaw(EnSlime* this);
+void EnSlime_IceBlockThaw(EnSlime* this, PlayState* play);
+void EnSlime_SetupWaitForRevive(EnSlime* this);
+void EnSlime_WaitForRevive(EnSlime* this, PlayState* play);
+void EnSlime_SetupRevive(EnSlime* this);
+void EnSlime_Revive(EnSlime* this, PlayState* play);
-#if 0
const ActorInit En_Slime_InitVars = {
ACTOR_EN_SLIME,
ACTORCAT_ENEMY,
@@ -45,146 +77,1171 @@ const ActorInit En_Slime_InitVars = {
(ActorFunc)EnSlime_Draw,
};
-// static ColliderCylinderInit sCylinderInit = {
-static ColliderCylinderInit D_80A31AF0 = {
- { COLTYPE_NONE, AT_ON | AT_TYPE_ENEMY, AC_ON | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, },
- { ELEMTYPE_UNK0, { 0xF7CFFFFF, 0x00, 0x04 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_ON | TOUCH_SFX_HARD, BUMP_ON | BUMP_HOOKABLE, OCELEM_ON, },
+static ColliderCylinderInit sCylinderInit = {
+ {
+ COLTYPE_NONE,
+ AT_ON | AT_TYPE_ENEMY,
+ AC_ON | AC_TYPE_PLAYER,
+ OC1_ON | OC1_TYPE_ALL,
+ OC2_TYPE_1,
+ COLSHAPE_CYLINDER,
+ },
+ {
+ ELEMTYPE_UNK0,
+ { 0xF7CFFFFF, 0x00, 0x04 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_ON | TOUCH_SFX_HARD,
+ BUMP_ON | BUMP_HOOKABLE,
+ OCELEM_ON,
+ },
{ 22, 35, 0, { 0, 0, 0 } },
};
-// static DamageTable sDamageTable = {
-static DamageTable D_80A31B1C = {
- /* Deku Nut */ DMG_ENTRY(0, 0x1),
- /* Deku Stick */ DMG_ENTRY(3, 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(0, 0x0),
- /* Hookshot */ DMG_ENTRY(0, 0xE),
- /* Goron punch */ DMG_ENTRY(0, 0xF),
- /* Sword */ DMG_ENTRY(1, 0x0),
- /* Goron pound */ DMG_ENTRY(0, 0xF),
- /* Fire arrow */ DMG_ENTRY(2, 0x0),
- /* Ice arrow */ DMG_ENTRY(2, 0x3),
- /* Light arrow */ DMG_ENTRY(2, 0x4),
- /* Goron spikes */ DMG_ENTRY(1, 0x0),
- /* Deku spin */ DMG_ENTRY(1, 0x0),
- /* Deku bubble */ DMG_ENTRY(0, 0xF),
- /* Deku launch */ DMG_ENTRY(2, 0x0),
- /* UNK_DMG_0x12 */ DMG_ENTRY(0, 0x1),
- /* Zora barrier */ DMG_ENTRY(1, 0x5),
- /* Normal shield */ DMG_ENTRY(0, 0x0),
- /* Light ray */ DMG_ENTRY(0, 0x0),
- /* Thrown object */ DMG_ENTRY(0, 0xF),
- /* Zora punch */ DMG_ENTRY(1, 0x0),
- /* Spin attack */ DMG_ENTRY(1, 0x0),
- /* Sword beam */ DMG_ENTRY(0, 0x0),
- /* Normal Roll */ DMG_ENTRY(0, 0x0),
- /* UNK_DMG_0x1B */ DMG_ENTRY(0, 0x0),
- /* UNK_DMG_0x1C */ DMG_ENTRY(0, 0x0),
- /* Unblockable */ DMG_ENTRY(0, 0x0),
- /* UNK_DMG_0x1E */ DMG_ENTRY(0, 0x0),
- /* Powder Keg */ DMG_ENTRY(1, 0x0),
+static DamageTable sDamageTable = {
+ /* Deku Nut */ DMG_ENTRY(0, EN_SLIME_DMGEFF_STUN),
+ /* Deku Stick */ DMG_ENTRY(3, EN_SLIME_DMGEFF_NORMAL),
+ /* Horse trample */ DMG_ENTRY(1, EN_SLIME_DMGEFF_NORMAL),
+ /* Explosives */ DMG_ENTRY(1, EN_SLIME_DMGEFF_NORMAL),
+ /* Zora boomerang */ DMG_ENTRY(1, EN_SLIME_DMGEFF_NORMAL),
+ /* Normal arrow */ DMG_ENTRY(1, EN_SLIME_DMGEFF_NORMAL),
+ /* UNK_DMG_0x06 */ DMG_ENTRY(0, EN_SLIME_DMGEFF_NORMAL),
+ /* Hookshot */ DMG_ENTRY(0, EN_SLIME_DMGEFF_HOOKSHOT),
+ /* Goron punch */ DMG_ENTRY(0, EN_SLIME_DMGEFF_BLUNT),
+ /* Sword */ DMG_ENTRY(1, EN_SLIME_DMGEFF_NORMAL),
+ /* Goron pound */ DMG_ENTRY(0, EN_SLIME_DMGEFF_BLUNT),
+ /* Fire arrow */ DMG_ENTRY(2, EN_SLIME_DMGEFF_NORMAL),
+ /* Ice arrow */ DMG_ENTRY(2, EN_SLIME_DMGEFF_FREEZE),
+ /* Light arrow */ DMG_ENTRY(2, EN_SLIME_DMGEFF_LIGHT),
+ /* Goron spikes */ DMG_ENTRY(1, EN_SLIME_DMGEFF_NORMAL),
+ /* Deku spin */ DMG_ENTRY(1, EN_SLIME_DMGEFF_NORMAL),
+ /* Deku bubble */ DMG_ENTRY(0, EN_SLIME_DMGEFF_BLUNT),
+ /* Deku launch */ DMG_ENTRY(2, EN_SLIME_DMGEFF_NORMAL),
+ /* UNK_DMG_0x12 */ DMG_ENTRY(0, EN_SLIME_DMGEFF_STUN),
+ /* Zora barrier */ DMG_ENTRY(1, EN_SLIME_DMGEFF_ELECTRIC),
+ /* Normal shield */ DMG_ENTRY(0, EN_SLIME_DMGEFF_NORMAL),
+ /* Light ray */ DMG_ENTRY(0, EN_SLIME_DMGEFF_NORMAL),
+ /* Thrown object */ DMG_ENTRY(0, EN_SLIME_DMGEFF_BLUNT),
+ /* Zora punch */ DMG_ENTRY(1, EN_SLIME_DMGEFF_NORMAL),
+ /* Spin attack */ DMG_ENTRY(1, EN_SLIME_DMGEFF_NORMAL),
+ /* Sword beam */ DMG_ENTRY(0, EN_SLIME_DMGEFF_NORMAL),
+ /* Normal Roll */ DMG_ENTRY(0, EN_SLIME_DMGEFF_NORMAL),
+ /* UNK_DMG_0x1B */ DMG_ENTRY(0, EN_SLIME_DMGEFF_NORMAL),
+ /* UNK_DMG_0x1C */ DMG_ENTRY(0, EN_SLIME_DMGEFF_NORMAL),
+ /* Unblockable */ DMG_ENTRY(0, EN_SLIME_DMGEFF_NORMAL),
+ /* UNK_DMG_0x1E */ DMG_ENTRY(0, EN_SLIME_DMGEFF_NORMAL),
+ /* Powder Keg */ DMG_ENTRY(1, EN_SLIME_DMGEFF_NORMAL),
};
-// sColChkInfoInit
-static CollisionCheckInfoInit D_80A31B3C = { 1, 22, 35, 60 };
+static CollisionCheckInfoInit sColChkInfoInit = { 1, 22, 35, 60 };
-// static InitChainEntry sInitChain[] = {
-static InitChainEntry D_80A31B54[] = {
+static TexturePtr sEyeTextures[] = {
+ gChuchuEyeOpenTex,
+ gChuchuEyeHalfTex,
+ gChuchuEyeClosedTex,
+ gChuchuEyeHalfTex,
+};
+
+static InitChainEntry sInitChain[] = {
ICHAIN_F32(gravity, -2, ICHAIN_CONTINUE),
ICHAIN_F32(targetArrowOffset, 6000, ICHAIN_STOP),
};
-#endif
+static s32 sTexturesDesegmented = false;
-extern ColliderCylinderInit D_80A31AF0;
-extern DamageTable D_80A31B1C;
-extern CollisionCheckInfoInit D_80A31B3C;
-extern InitChainEntry D_80A31B54[];
+static Color_RGBA8 sBubblePrimColor = { 255, 255, 255, 255 };
+static Color_RGBA8 sBubbleEnvColor = { 150, 150, 150, 0 };
+static Vec3f sBubbleAccel = { 0.0f, -0.8f, 0.0f };
-extern UNK_TYPE D_060004C0;
-extern UNK_TYPE D_06000828;
+static Color_RGBA8 sPrimColors[] = {
+ { 255, 255, 255, 255 },
+ { 255, 255, 0, 255 },
+ { 255, 255, 200, 255 },
+ { 225, 200, 255, 255 },
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/EnSlime_Init.s")
+static Color_RGBA8 sEnvColors[] = {
+ { 140, 255, 195, 255 },
+ { 50, 255, 0, 255 },
+ { 255, 180, 0, 255 },
+ { 255, 50, 155, 255 },
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/EnSlime_Destroy.s")
+static Vec3f sLimbPosOffsets[EN_SLIME_LIMBPOS_COUNT] = {
+ { 2000.0f, 2000.0f, 0.0f }, { -1500.0f, 2500.0f, -500.0f }, { -500.0f, 1000.0f, 2500.0f },
+ { 0.0f, 4000.0f, 0.0f }, { 0.0f, 2000.0f, -2000.0f },
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2EFAC.s")
+AnimatedMaterial* sSlimeTexAnim;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F028.s")
+void EnSlime_Init(Actor* thisx, PlayState* play) {
+ EnSlime* this = THIS;
+ s32 reviveTimeSeconds;
+ s32 i;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F0A8.s")
+ Actor_ProcessInitChain(&this->actor, sInitChain);
+ Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
+ CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
+ ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 38.0f);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F110.s")
+ this->iceBlockTimer = ICE_BLOCK_UNUSED;
+ this->eyeTexIndex = EN_SLIME_EYETEX_OPEN;
+ this->wobbleRot.y = 0.0f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F140.s")
+ // Sets maximum distance chuchu will move from its home before turning around.
+ if (this->actor.shape.rot.x <= 0) {
+ this->distLimit = 30000.0f;
+ } else {
+ this->distLimit = this->actor.shape.rot.x * 40.0f;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F180.s")
+ this->actor.shape.rot.x = 0;
+ reviveTimeSeconds = EN_SLIME_GET_REVIVE_TIME(&this->actor);
+ this->actor.shape.rot.z = 0;
+ this->actor.params &= 0xFF;
+ if (reviveTimeSeconds == 0xFF) {
+ reviveTimeSeconds = 0;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F1A4.s")
+ // Upper byte of actorParams at init is # of seconds past 10s to revive.
+ this->reviveTime = (reviveTimeSeconds * 20) + 200;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F354.s")
+ // Update addresses of texture assets (if another instance hasn't already)
+ if (!sTexturesDesegmented) {
+ for (i = 0; i < EN_SLIME_EYETEX_MAX; i++) {
+ sEyeTextures[i] = Lib_SegmentedToVirtual(sEyeTextures[i]);
+ }
+ sSlimeTexAnim = Lib_SegmentedToVirtual(gChuchuSlimeFlowTexAnim);
+ sTexturesDesegmented = true;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F418.s")
+ // Set hint IDs and drop item icon depending on chuchu color
+ if (EN_SLIME_GET_TYPE(&this->actor) == EN_SLIME_TYPE_YELLOW) {
+ this->itemDropTex = Lib_SegmentedToVirtual(gDropArrows1Tex);
+ this->actor.hintId = TATL_HINT_ID_YELLOW_CHUCHU;
+ } else if (EN_SLIME_GET_TYPE(&this->actor) == EN_SLIME_TYPE_GREEN) {
+ this->itemDropTex = Lib_SegmentedToVirtual(gDropMagicSmallTex);
+ this->actor.hintId = TATL_HINT_ID_GREEN_CHUCHU;
+ } else if (EN_SLIME_GET_TYPE(&this->actor) == EN_SLIME_TYPE_RED) {
+ this->itemDropTex = Lib_SegmentedToVirtual(gDropRecoveryHeartTex);
+ this->actor.hintId = TATL_HINT_ID_RED_CHUCHU;
+ } else {
+ this->actor.hintId = TATL_HINT_ID_BLUE_CHUCHU;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F684.s")
+ // Sets actor scale and initial action func
+ EnSlime_SetupInitializeIdle(this);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F6CC.s")
+void EnSlime_Destroy(Actor* thisx, PlayState* play) {
+ EnSlime* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F8B4.s")
+ Collider_DestroyCylinder(play, &this->collider);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F8E0.s")
+/**
+ * Upon immobilization via ice arrow (for chuchu types outside of blue),
+ * initialize ice visual effects before chuchu enters immobile state.
+ */
+void EnSlime_Freeze(EnSlime* this) {
+ this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
+ this->drawDmgEffScale = 0.4f;
+ this->collider.base.colType = COLTYPE_HIT3;
+ this->drawDmgEffFrozenSteamScale = 0.6f;
+ this->drawDmgEffAlpha = 1.0f;
+ this->timer = 80;
+ this->actor.flags &= ~ACTOR_FLAG_400;
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_XLU, 80);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F9A0.s")
+/**
+ * If stunned ice effect is active (ie. non-blue chuchu was frozen by ice arrow),
+ * initialize thaw and spawn thawing effect.
+ */
+void EnSlime_Thaw(EnSlime* this, PlayState* play) {
+ if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
+ this->drawDmgEffType = 0; // So it's not triggered again until Freeze has been called again.
+ this->collider.base.colType = COLTYPE_NONE;
+ this->drawDmgEffAlpha = 0.0f;
+ Actor_SpawnIceEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), 2, 0.2f, 0.2f);
+ this->actor.flags |= ACTOR_FLAG_200;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2FA88.s")
+/**
+ * If blink animation is in progress, advance to next frame.
+ * If eyes are open, randomly (5% chance) initialize new blink cycle.
+ */
+void EnSlime_Blink(EnSlime* this) {
+ if (this->eyeTexIndex != EN_SLIME_EYETEX_OPEN) {
+ this->eyeTexIndex++;
+ if (this->eyeTexIndex == EN_SLIME_EYETEX_MAX) {
+ this->eyeTexIndex = EN_SLIME_EYETEX_OPEN;
+ }
+ } else if (Rand_ZeroOne() < 0.05f) {
+ this->eyeTexIndex = EN_SLIME_EYETEX_HALF;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2FB60.s")
+/**
+ * Set the actor's initial scale and action function.
+ */
+void EnSlime_SetupInitializeIdle(EnSlime* this) {
+ this->actor.scale.x = 0.008f;
+ this->actor.scale.z = 0.008f;
+ this->actor.scale.y = 0.011f;
+ this->actionFunc = EnSlime_InitializeIdle;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2FBA0.s")
+/**
+ * Once actor touches the ground, it starts its idle behavior.
+ * This function is only called right after the actor is first initialized.
+ * It is not set as the action function again.
+ */
+void EnSlime_InitializeIdle(EnSlime* this, PlayState* play) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ this->actor.flags &= ~ACTOR_FLAG_10;
+ EnSlime_SetupIdle(this);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2FD94.s")
+/**
+ * Set or restore idle action state.
+ * Sets timer to 25 and cycles to SitIdle action.
+ */
+void EnSlime_SetupIdle(EnSlime* this) {
+ this->timer = 25;
+ this->actor.speed = 0.0f;
+ this->actionFunc = EnSlime_Idle;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2FE38.s")
+/**
+ * Sit idle for one frame, updating rotation and scale to give
+ * the actor an amorphous, oozing effect.
+ * Chuchu will engage player if player is visible and
+ * close enough to it.
+ */
+void EnSlime_Idle(EnSlime* this, PlayState* play) {
+ f32 timerFactor;
+ f32 scale;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30018.s")
+ this->timer--;
+ timerFactor = sqrtf(this->timer) * 0.2f;
+ EnSlime_Blink(this);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30344.s")
+ scale = ((sin_rad(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;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30454.s")
+ this->actor.shape.rot.x = randPlusMinusPoint5Scaled(0x200) * timerFactor;
+ this->actor.shape.rot.z = randPlusMinusPoint5Scaled(0x200) * timerFactor;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A304B8.s")
+ // 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.
+ if ((Player_GetMask(play) != PLAYER_MASK_STONE) && (this->actor.xzDistToPlayer < 280.0f) &&
+ Actor_IsFacingPlayer(&this->actor, 0x5000)) {
+ EnSlime_SetupTurnToPlayer(this);
+ } else if (this->timer == 0) {
+ // Start moving (remaining idle)
+ EnSlime_SetupMoveInDirection(this);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A3072C.s")
+/**
+ * Reset the action timer (to 120), then select a new direction for
+ * chuchu to move.
+ */
+void EnSlime_SetupMoveInDirection(EnSlime* this) {
+ this->timer = 120;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30778.s")
+ // If actor is more than 120 units from its home, set the new direction to be towards its home.
+ // Otherwise, the new direction to move is pretty much random.
+ 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->actor.world.rot.y = this->actor.shape.rot.y;
+ this->actionFunc = EnSlime_MoveInDirection;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30820.s")
+/**
+ * While moving idle, update rotation, speed, scale in a sinusoidal fashion to
+ * give oozing effect.
+ * If actor has hit a wall or is too far from home, turn around.
+ * Chuchu will engage player during idle movement if player is visible and
+ * close enough to it.
+ */
+void EnSlime_MoveInDirection(EnSlime* this, PlayState* play) {
+ f32 sinFactor;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30924.s")
+ EnSlime_Blink(this);
+ this->timer--;
+ Math_ApproachS(&this->actor.shape.rot.y, this->idleRotY, 4, 0x100);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30944.s")
+ // If actor is touching a wall, set target rotation to match wall where it is touching.
+ // If actor is more than 120 units from its home, turn around to face home.
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
+ this->idleRotY = this->actor.wallYaw;
+ } else if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > 120.0f) {
+ this->idleRotY = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A309C8.s")
+ // Update actor scale, xz speed, and rotation to provide amorphous effect
+ sinFactor = fabsf(sin_rad(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);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30A20.s")
+ this->actor.speed = (0.8f * sinFactor) + 0.2f;
+ this->actor.shape.rot.x = 0x800 * sinFactor;
+ this->actor.world.rot.y = this->actor.shape.rot.y;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30A90.s")
+ if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > this->distLimit) {
+ // If actor is too far from home, start return home cycle
+ EnSlime_SetupMoveToHome(this);
+ } else if ((Player_GetMask(play) != PLAYER_MASK_STONE) && (this->actor.xzDistToPlayer < 280.0f) &&
+ (Actor_IsFacingPlayer(&this->actor, 0x5000))) {
+ // If player is close enough to chuchu while not wearing the stone mask, and the chuchu is facing player,
+ // initialize attack cycle
+ EnSlime_SetupTurnToPlayer(this);
+ } else if (this->timer == 0) {
+ // If move timer runs out, restart idle cycle (sit in place for 25 frames)
+ EnSlime_SetupIdle(this);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30AE4.s")
+/**
+ * Reset the action timer (to 24), then set the target y angle to face home.
+ */
+void EnSlime_SetupMoveToHome(EnSlime* this) {
+ this->timer = 24;
+ this->idleRotY = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
+ this->actor.world.rot.y = this->actor.shape.rot.y;
+ this->actionFunc = EnSlime_MoveToHome;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30BE0.s")
+/**
+ * While moving towards home point, update rotation, speed, scale
+ * in a sinusoidal fashion to give oozing effect.
+ * If actor has hit a wall, turn around.
+ * Once it is close enough to home point, return to idle cycle.
+ * Chuchu will not engage player while the return home cycle is active.
+ */
+void EnSlime_MoveToHome(EnSlime* this, PlayState* play) {
+ f32 timerFactor;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30C2C.s")
+ EnSlime_Blink(this);
+ this->timer--;
+ Math_ApproachS(&this->actor.shape.rot.y, this->idleRotY, 4, 0x400);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
+ // If hit wall, turn around.
+ this->idleRotY = this->actor.wallYaw;
+ } else {
+ this->idleRotY = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30C68.s")
+ timerFactor = fabsf(sin_rad(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);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30CEC.s")
+ this->actor.speed = (0.8f * timerFactor) + 0.2f;
+ this->actor.shape.rot.x = 0x800 * timerFactor;
+ this->actor.world.rot.y = this->actor.shape.rot.y;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30F98.s")
+ // Reset timer for use calculating wobble/ooze amount for frame
+ if (this->timer == 0) {
+ this->timer = 24;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/EnSlime_Update.s")
+ // Only return to idle once actor is close enough to home point.
+ if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) < (this->distLimit * 0.8f)) {
+ EnSlime_SetupIdle(this);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/EnSlime_Draw.s")
+void EnSlime_SetupTurnToPlayer(EnSlime* this) {
+ this->actor.shape.rot.x = 0;
+ this->actor.shape.rot.z = 0;
+ this->timer = 8;
+ this->actionFunc = EnSlime_TurnToPlayer;
+ this->actor.speed = 0.0f;
+}
+
+/**
+ * Update actor angle and ooze effect as chuchu initially
+ * turns to face player.
+ */
+void EnSlime_TurnToPlayer(EnSlime* this, PlayState* play) {
+ f32 factorY;
+ f32 scaleXZ;
+
+ this->timer--;
+ EnSlime_Blink(this);
+ Math_ApproachS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 4, 0x1000);
+ if (this->timer >= 0) {
+ factorY = 8 - this->timer;
+ scaleXZ = ((factorY * 0.04f) + 1.0f) * 0.01f;
+ this->actor.scale.x = scaleXZ;
+ this->actor.scale.y = (1.0f - (factorY * 0.05f)) * 0.01f;
+ this->actor.scale.z = scaleXZ;
+ }
+ if (this->timer < -2) {
+ EnSlime_SetupJump(this);
+ }
+}
+
+/**
+ * If fewer than 120 units from the player, start a larger attack lunge.
+ * Otherwise, hop forward.
+ */
+void EnSlime_SetupJump(EnSlime* this) {
+ if (this->actor.xzDistToPlayer > 120.0f) {
+ this->actor.velocity.y = 11.0f;
+ this->actor.speed = 5.0f;
+ this->actor.gravity = -2.0f;
+ } else {
+ this->actor.velocity.y = 18.0f;
+ this->actor.speed = 7.0f;
+ this->actor.gravity = -3.5f;
+ }
+ this->actor.world.rot.y = this->actor.shape.rot.y;
+ this->timer = 12;
+ this->eyeTexIndex = EN_SLIME_EYETEX_OPEN;
+ Math_StepToF(&this->actor.scale.x, 0.008f, 0.0025f);
+ Math_StepToF(&this->actor.scale.y, 0.011f, 0.0025f);
+ this->actor.scale.z = this->actor.scale.x;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_SLIME_JUMP);
+ this->actionFunc = EnSlime_Jump;
+}
+
+/**
+ * Check for collision and whether actor has stopped falling.
+ * Update actor scale for slime effect.
+ * If collision, knockback actor. If actor has stopped moving
+ * in Y direction, initialize landing action.
+ */
+void EnSlime_Jump(EnSlime* this, PlayState* play) {
+ this->timer--;
+ if (this->collider.base.atFlags & AT_HIT) {
+ if (this->actor.speed > 0.0f) {
+ this->actor.speed *= -1.2f;
+ this->collider.base.atFlags &= ~AT_HIT;
+ }
+ }
+ Math_StepToF(&this->actor.scale.x, 0.008f, 0.0025f);
+ Math_StepToF(&this->actor.scale.y, 0.011f, 0.0025f);
+ this->actor.scale.z = this->actor.scale.x;
+ if ((this->actor.velocity.y < 0.0f) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
+ EnSlime_SetupLand(this);
+ }
+}
+
+void EnSlime_SetupLand(EnSlime* this) {
+ this->timer = 15;
+ this->actor.scale.x = 0.0132f;
+ this->actor.scale.y = 0.0074399994f;
+ this->actor.scale.z = 0.0132f;
+ this->actor.speed = 0.0f;
+ this->actionFunc = EnSlime_Land;
+}
+
+/**
+ * Update scale/rot for ooze jiggle effect (XZ), update Y scale
+ * to make it appear as though chuchu is compressing.
+ * If > 12 frames have passed since jump start, check again if player
+ * is in range and restart engage/jump cycle if so.
+ * If too far from home, initialize return home cycle
+ * (takes priority over player engage check).
+ * Otherwise if timer is up, return to idle.
+ */
+void EnSlime_Land(EnSlime* this, PlayState* play) {
+ f32 scaleY;
+ f32 rotXZ;
+ f32 scaleXZ;
+
+ EnSlime_Blink(this);
+ 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;
+ 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.shape.rot.x = randPlusMinusPoint5Scaled(0x200) * rotXZ;
+ this->actor.shape.rot.z = randPlusMinusPoint5Scaled(0x200) * rotXZ;
+
+ if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > this->distLimit) {
+ EnSlime_SetupMoveToHome(this);
+ } else if ((Player_GetMask(play) != PLAYER_MASK_STONE) && (this->actor.xzDistToPlayer < 280.0f) &&
+ (this->timer < 12)) {
+ EnSlime_SetupTurnToPlayer(this);
+ } else if (this->timer == 0) {
+ EnSlime_SetupIdle(this);
+ }
+}
+
+/**
+ * Initialize reaction to receiving a blunt hit (such as with Goron Punch etc.)
+ * Chuchu does not take damage, but appears slide backwards.
+ */
+void EnSlime_SetupReactToBluntHit(EnSlime* this) {
+ this->actor.speed = 10.0f;
+ if (this->actor.velocity.y > 0.0f) {
+ this->actor.velocity.y = 0.0f;
+ }
+ this->collider.base.acFlags &= ~AC_ON;
+ this->timer = 30;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_SLIME_DEFENCE);
+ if (this->collider.base.ac != NULL) {
+ this->actor.world.rot.y = Actor_WorldYawTowardActor(&this->actor, this->collider.base.ac) + 0x8000;
+ } else {
+ this->actor.world.rot.y = this->actor.yawTowardsPlayer + 0x8000;
+ }
+ this->actionFunc = EnSlime_ReactToBluntHit;
+}
+
+/**
+ * Update reaction to receiving a blunt hit (such as with Goron Punch etc.)
+ * Update XZ speed and jiggle effect
+ * AC_ON flag is off until 15 frames of reaction remain.
+ * When timer is up, chuchu will choose whether to engage player, return home,
+ * or return to idle.
+ * If chuchu is too far from home, returning home will take precedence.
+ */
+void EnSlime_ReactToBluntHit(EnSlime* this, PlayState* play) {
+ f32 timerFactor;
+ f32 scale;
+
+ EnSlime_Blink(this);
+ this->timer--;
+ 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;
+ 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;
+
+ if (this->timer == 0) {
+ if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > this->distLimit) {
+ EnSlime_SetupMoveToHome(this);
+ } else if ((this->actor.xzDistToPlayer < 280.0f) && (Player_GetMask(play) != PLAYER_MASK_STONE)) {
+ EnSlime_SetupTurnToPlayer(this);
+ } else {
+ EnSlime_SetupIdle(this);
+ }
+ }
+}
+
+/**
+ * Spawn bubbles & splash, start actor rebuff wobble,
+ * push actor, and play sfx.
+ */
+void EnSlime_SetupDamaged(EnSlime* this, PlayState* play, s32 arg2) {
+ s32 i;
+ Vec3f effectVelocity;
+ Vec3f effectPos;
+ f32 ySin;
+ f32 yCos;
+
+ this->collider.base.acFlags &= ~AC_ON;
+ if (this->actor.velocity.y > 0.0f) {
+ this->actor.velocity.y = 0.0f;
+ }
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_XLU, 20);
+ this->timer = 20;
+ this->actor.speed = 10.0f;
+ if (arg2 == true) {
+ // This function changes actor's world Y rotation?
+ func_800BE504(&this->actor, &this->collider);
+ }
+
+ this->eyeTexIndex = EN_SLIME_EYETEX_OPEN;
+ Actor_SetScale(&this->actor, 0.01f);
+ this->wobbleRot.x = Rand_ZeroOne() * (M_PI * 2.0f);
+ this->wobbleRot.z = Rand_ZeroOne() * (M_PI * 2.0f);
+ ySin = Math_SinS(this->actor.world.rot.y) * 10.0f;
+ yCos = Math_CosS(this->actor.world.rot.y) * 10.0f;
+ effectPos.x = this->actor.world.pos.x + ySin;
+ effectPos.y = this->actor.world.pos.y + 20.0f;
+ effectPos.z = this->actor.world.pos.z + yCos;
+ 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;
+
+ 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);
+
+ effectVelocity.y = (Rand_ZeroOne() * 6.0f) + 2.0f;
+ EffectSsDtBubble_SpawnCustomColor(play, &effectPos, &effectVelocity, &sBubbleAccel, &sBubblePrimColor,
+ &sBubbleEnvColor, Rand_S16Offset(40, 20), 20, 0);
+ }
+
+ if (this->actor.colChkInfo.health == 0) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_SLIME_DEAD);
+ } else {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_SLIME_DAMAGE);
+ }
+ this->actionFunc = EnSlime_Damaged;
+}
+
+/**
+ * Update reaction to taking damage.
+ * Updates the rebuff wobble.
+ * Once timer drops to 0, actor initializes death cycle, re-engages player, or returns to idle.
+ */
+void EnSlime_Damaged(EnSlime* this, PlayState* play) {
+ this->timer--;
+ Math_StepToF(&this->actor.speed, 0.0f, 1.0f);
+ if ((this->timer % 5) == 0) {
+ this->wobbleRot.x = Rand_ZeroOne() * (M_PI * 2.0f);
+ this->wobbleRot.z = Rand_ZeroOne() * (M_PI * 2.0f);
+ }
+ if (this->timer == 0) {
+ if (this->actor.colChkInfo.health != 0) {
+ this->collider.base.acFlags |= AC_ON;
+ if ((this->actor.xzDistToPlayer < 280.0f) && (Player_GetMask(play) != PLAYER_MASK_STONE)) {
+ EnSlime_SetupTurnToPlayer(this);
+ } else {
+ EnSlime_SetupIdle(this);
+ }
+ } else {
+ SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EN_SLIME_BREAK);
+ EnSlime_SetupDead(this);
+ }
+ }
+}
+
+/**
+ * Disable AC_ON flag, make actor stop moving, and shrink the actor.
+ */
+void EnSlime_SetupDead(EnSlime* this) {
+ this->collider.base.acFlags &= ~AC_ON;
+ if (this->actor.velocity.y > 0.0f) {
+ this->actor.velocity.y = 0.0f;
+ }
+ Actor_SetScale(&this->actor, 0.01f);
+ this->actor.speed = 0.0f;
+ this->actionFunc = EnSlime_Dead;
+}
+
+/**
+ * Spawn random effects (bubbles, splash) for death sequence.
+ * If chuchu is red, green, or yellow, spawn item drop.
+ * Shrink actor scale to 0.
+ * Call SetupWaitForRevive function for cleanup.
+ */
+void EnSlime_Dead(EnSlime* this, PlayState* play) {
+ s32 i;
+ Vec3f velocity;
+ Vec3f effectPos;
+ f32 randFloat;
+ s32 randSign;
+
+ if (Math_StepToF(&this->actor.scale.x, 0.0f, 0.002f)) {
+ effectPos.x = this->actor.world.pos.x;
+ effectPos.y = this->actor.world.pos.y + 20.0f;
+ effectPos.z = this->actor.world.pos.z;
+ EffectSsGSplash_Spawn(play, &effectPos, NULL, NULL, 1, 800);
+
+ for (i = 0; i < 15; i++) {
+ randFloat = Rand_ZeroOne();
+ randSign = Rand_ZeroOne() < 0.5f ? -1 : 1;
+ velocity.x = randSign * ((randFloat * 2.5f) + 2.0f);
+
+ randFloat = Rand_ZeroOne();
+ randSign = Rand_ZeroOne() < 0.5f ? -1 : 1;
+ velocity.z = randSign * ((randFloat * 2.5f) + 2.0f);
+
+ velocity.y = (Rand_ZeroOne() * 6.0f) + 2.0f;
+ EffectSsDtBubble_SpawnCustomColor(play, &effectPos, &velocity, &sBubbleAccel, &sBubblePrimColor,
+ &sBubbleEnvColor, Rand_S16Offset(40, 20), 20, 0);
+ }
+
+ if (this->actor.params == EN_SLIME_TYPE_YELLOW) {
+ Item_DropCollectible(play, &this->actor.world.pos, ITEM00_ARROWS_10);
+ } else if (this->actor.params == EN_SLIME_TYPE_GREEN) {
+ Item_DropCollectible(play, &this->actor.world.pos, ITEM00_MAGIC_SMALL);
+ } else if (this->actor.params == EN_SLIME_TYPE_RED) {
+ Item_DropCollectible(play, &this->actor.world.pos, ITEM00_RECOVERY_HEART);
+ }
+ EnSlime_SetupWaitForRevive(this);
+ }
+ this->actor.scale.y = this->actor.scale.x;
+ this->actor.scale.z = this->actor.scale.x;
+}
+
+/**
+ * Calculate a new "current" position value that is a multiple of 60
+ * away from the "home" position.
+ * This is for use by blue chuchus frozen into an ice block so that
+ * their position is a multiple of the ice block size.
+ */
+f32 EnSlime_SnapIceBlockPosition(f32 currentPosition, f32 homePosition) {
+ s32 dist = currentPosition - homePosition;
+
+ if (dist > 0) {
+ dist += 30;
+ } else {
+ dist -= 30;
+ }
+
+ return ((dist / 60) * 60.0f) + homePosition;
+}
+
+/**
+ * Prepare actor for ice block to spawn around it.
+ * The actor will stop moving, have AC_ON cleared,
+ * and target position will be snapped to
+ * a multiple of the size of an ice block.
+ */
+void EnSlime_SetupSpawnIceBlock(EnSlime* this) {
+ this->collider.base.acFlags &= ~AC_ON;
+ this->actor.flags &= ~ACTOR_FLAG_1;
+ this->drawDmgEffAlpha = 0.0f;
+ this->actor.speed = 0.0f;
+ this->actor.velocity.y = 0.0f;
+ this->actor.gravity = 0.0f;
+ this->iceBlockSnapPos.x = EnSlime_SnapIceBlockPosition(this->actor.world.pos.x, this->actor.home.pos.x);
+ this->iceBlockSnapPos.z = EnSlime_SnapIceBlockPosition(this->actor.world.pos.z, this->actor.home.pos.z);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_GRAY, COLORFILTER_INTENSITY_FLAG | 255,
+ COLORFILTER_BUFFLAG_XLU, 10);
+ this->eyeTexIndex = EN_SLIME_EYETEX_OPEN;
+ this->iceBlockTimer = ICE_BLOCK_TIMER_MAX;
+ this->actionFunc = EnSlime_SpawnIceBlock;
+}
+
+/**
+ * Attempt to move the chuchu to snapped position and
+ * spawn an ice block actor as a child of the chuchu actor.
+ * If ice block spawn fails, chuchu returns to idle.
+ */
+void EnSlime_SpawnIceBlock(EnSlime* this, PlayState* play) {
+ s32 stepCheck;
+
+ stepCheck = Math_StepToF(&this->actor.world.pos.x, this->iceBlockSnapPos.x, 10.0f);
+ stepCheck &= Math_StepToF(&this->actor.world.pos.z, this->iceBlockSnapPos.z, 10.0f);
+
+ this->actor.colorFilterTimer = 10;
+ if (stepCheck) {
+ this->actor.child =
+ Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_OBJ_ICEBLOCK, this->actor.world.pos.x,
+ this->actor.world.pos.y + 30.0f, this->actor.world.pos.z, 0, 0, 0, 0);
+ if (this->actor.child != NULL) {
+ this->actor.child->csId = this->actor.csId;
+ EnSlime_SetupIceBlock(this);
+ } else {
+ this->actor.colorFilterTimer = 0;
+ this->collider.base.acFlags |= AC_ON;
+ this->iceBlockTimer = ICE_BLOCK_UNUSED;
+ this->actor.flags |= ACTOR_FLAG_1;
+ this->actor.gravity = -2.0f;
+ EnSlime_SetupIdle(this);
+ }
+ }
+}
+
+void EnSlime_SetupIceBlock(EnSlime* this) {
+ this->actor.flags |= ACTOR_FLAG_10;
+ this->actionFunc = EnSlime_IceBlock;
+}
+
+/**
+ * Decrement the ice block timer, or if it has hit zero,
+ * check to see if the ice block child actor link has been broken
+ * or if the block has shrunk sufficiently.
+ * If timer is up and ice block is sufficiently "gone", init thaw.
+ */
+void EnSlime_IceBlock(EnSlime* this, PlayState* play) {
+ if (this->iceBlockTimer == 0) {
+ if ((this->actor.child == NULL) || (this->actor.child->update == NULL) ||
+ !(this->actor.child->scale.y >= 0.1f)) {
+ EnSlime_SetupIceBlockThaw(this);
+ }
+ } else {
+ this->actor.colorFilterTimer = 10;
+ if ((this->iceBlockTimer - 5) < 0) {
+ this->iceBlockTimer = 0;
+ } else {
+ this->iceBlockTimer -= 5;
+ }
+ }
+}
+
+void EnSlime_SetupStun(EnSlime* this) {
+ this->actor.speed = 0.0f;
+ func_800BE504(&this->actor, &this->collider);
+ if (this->actor.velocity.y > 0.0f) {
+ this->actor.velocity.y = 0.0f;
+ }
+ this->actionFunc = EnSlime_Stun;
+}
+
+/**
+ * Check the actor's timer to see whether stun has worn off.
+ * If so, either react to damage and initialize death, or start
+ * idly wobbling in a new direction.
+ */
+void EnSlime_Stun(EnSlime* this, PlayState* play) {
+ this->timer--;
+ if (this->timer == 0) {
+ EnSlime_Thaw(this, play);
+ if (this->actor.colChkInfo.health == 0) {
+ EnSlime_SetupDamaged(this, play, false);
+ } else {
+ this->actor.world.rot.y = this->actor.shape.rot.y;
+ EnSlime_SetupMoveInDirection(this);
+ }
+ }
+}
+
+void EnSlime_SetupIceBlockThaw(EnSlime* this) {
+ this->actor.colorFilterTimer = 0;
+ this->actor.gravity = -2.0f;
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_GRAY, COLORFILTER_INTENSITY_FLAG | 255,
+ COLORFILTER_BUFFLAG_XLU, 10);
+ this->actionFunc = EnSlime_IceBlockThaw;
+}
+
+/**
+ * Update the actor's ice block timer to match state of ice block.
+ * When it reaches the "unset" value (255), return actor to idle.
+ */
+void EnSlime_IceBlockThaw(EnSlime* this, PlayState* play) {
+ s32 iceBlockTimerAdj;
+
+ this->actor.colorFilterTimer = 10;
+ if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) {
+ iceBlockTimerAdj = (0.1f - this->actor.child->scale.y) * 10.0f * 255.0f;
+ this->iceBlockTimer = CLAMP(iceBlockTimerAdj, 0, ICE_BLOCK_UNUSED);
+ } else {
+ this->actor.child = NULL;
+ iceBlockTimerAdj = this->iceBlockTimer + 10;
+ this->iceBlockTimer = CLAMP_MAX(iceBlockTimerAdj, ICE_BLOCK_UNUSED);
+ }
+
+ if (this->iceBlockTimer == ICE_BLOCK_UNUSED) {
+ this->collider.base.acFlags |= AC_ON;
+ this->actor.flags |= ACTOR_FLAG_1;
+ this->actor.flags &= ~ACTOR_FLAG_10;
+ EnSlime_SetupIdle(this);
+ }
+}
+
+/**
+ * Set speed to zero, and make undrawable.
+ * Initialize revive timer.
+ */
+void EnSlime_SetupWaitForRevive(EnSlime* this) {
+ this->actor.draw = NULL;
+ this->actor.flags |= ACTOR_FLAG_10;
+ this->drawDmgEffAlpha = 0.0f;
+ this->actor.gravity = 0.0f;
+ this->actor.velocity.y = 0.0f;
+ this->actor.speed = 0.0f;
+ this->collider.base.ocFlags1 &= ~OC1_ON;
+ this->timer = this->reviveTime;
+ this->actionFunc = EnSlime_WaitForRevive;
+}
+
+/**
+ * Decrement the revival timer, or if it is zero,
+ * initialize revive.
+ */
+void EnSlime_WaitForRevive(EnSlime* this, PlayState* play) {
+ if (this->timer == 0) {
+ EnSlime_SetupRevive(this);
+ } else {
+ this->timer--;
+ }
+}
+
+/**
+ * Re-enable drawing, reset the actor's health and home,
+ * and setup and initialize revive action.
+ */
+void EnSlime_SetupRevive(EnSlime* this) {
+ this->actor.draw = EnSlime_Draw;
+ this->actor.colChkInfo.health = sColChkInfoInit.health;
+ this->iceBlockTimer = ICE_BLOCK_UNUSED;
+ Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.home.pos);
+ this->timer = 0;
+ this->actor.colorFilterTimer = 0;
+ this->actor.home.rot.y = this->actor.yawTowardsPlayer;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_SLIME_SURFACE);
+ this->actor.gravity = -2.0f;
+ this->actionFunc = EnSlime_Revive;
+}
+
+/**
+ * Update bubbling back up effect. After 21 frames, OC1_ON is set.
+ * After 28 frames, AC_ON is set and actor returns to idle movement.
+ */
+void EnSlime_Revive(EnSlime* this, PlayState* play) {
+ f32 rescaleFactor1;
+ f32 rescaleFactor2;
+
+ this->timer++;
+ if (this->timer == 28) {
+ this->actor.flags &= ~ACTOR_FLAG_10;
+ this->actor.flags |= ACTOR_FLAG_1;
+ this->collider.base.acFlags |= AC_ON;
+ this->actor.shape.rot.y = this->actor.home.rot.y;
+ EnSlime_SetupMoveInDirection(this);
+ } else {
+ if (this->timer < 12) {
+ rescaleFactor1 = this->timer * 0.0008333333f; // This is about 1/1200, but (1.0f/1200.0f) does not match
+ this->reviveScale.x = rescaleFactor1;
+ this->reviveScale.z = rescaleFactor1;
+ this->reviveScale.y = 2.0f * rescaleFactor1;
+ this->reviveRotY = this->timer * (0x4000 / 10.0f);
+ } else if (this->timer < 20) {
+ rescaleFactor1 = (this->timer - 12) * (1.0f / 1600.0f);
+ rescaleFactor2 = 0.01f + rescaleFactor1;
+ this->reviveScale.x = rescaleFactor2;
+ this->reviveScale.z = rescaleFactor2;
+ this->reviveScale.y = 2.0f * (0.01f - rescaleFactor1);
+ this->reviveRotY = this->timer * (0x4000 / 10.0f);
+ } else if (this->timer < 24) {
+ rescaleFactor1 = (this->timer - 20) * 0.0033333332f; // This is about 1/300
+ rescaleFactor2 = 0.015f - rescaleFactor1;
+ this->reviveScale.x = rescaleFactor2;
+ this->reviveScale.z = rescaleFactor2;
+ this->reviveScale.y = (2.0f * rescaleFactor1) + 0.01f;
+ Actor_SetScale(&this->actor, 1.5f * rescaleFactor1);
+ this->reviveRotY = ((23 - this->timer) * 7281.778f) + 10922.667f;
+ this->actor.shape.rot.y = (28 - this->timer) * (f32)0x1000;
+ } else {
+ Actor_SetScale(&this->actor, (((28 - this->timer) * 0.1f) + 1.0f) * 0.01f);
+ Math_Vec3f_Copy(&this->reviveScale, &gZeroVec3f);
+ this->actor.shape.rot.y = (28 - this->timer) * (f32)0x1000;
+ }
+
+ if (this->timer == 21) {
+ this->collider.base.ocFlags1 |= OC1_ON;
+ }
+
+ this->reviveRotY += this->actor.home.rot.y;
+ this->actor.shape.rot.y += this->actor.home.rot.y;
+ }
+}
+
+/**
+ * Check actor AC hit since last update. If hit, initialize appropriate action cycle.
+ */
+void EnSlime_UpdateDamage(EnSlime* this, PlayState* play) {
+ if (this->collider.base.acFlags & AC_HIT) {
+ this->collider.base.acFlags &= ~AC_HIT;
+
+ if ((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) ||
+ !(this->collider.info.acHitInfo->toucher.dmgFlags & 0xDB0B3)) {
+
+ EnSlime_Thaw(this, play);
+ if ((this->actor.params == EN_SLIME_TYPE_BLUE) &&
+ (this->actor.colChkInfo.damageEffect == EN_SLIME_DMGEFF_FREEZE)) {
+ // Blue chuchus take no damage from ice arrows.
+ this->actor.colChkInfo.damage = 0;
+ }
+
+ if (Actor_ApplyDamage(&this->actor) == 0) {
+ Actor_SetDropFlag(&this->actor, &this->collider.info);
+ Enemy_StartFinishingBlow(play, &this->actor);
+ this->actor.flags &= ~ACTOR_FLAG_1;
+ }
+
+ if (this->actor.colChkInfo.damageEffect == EN_SLIME_DMGEFF_BLUNT) {
+ EnSlime_SetupReactToBluntHit(this);
+ } else if (this->actor.colChkInfo.damageEffect == EN_SLIME_DMGEFF_STUN) {
+ this->timer = 40;
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_XLU, 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ EnSlime_SetupStun(this);
+ } else if (this->actor.colChkInfo.damageEffect != EN_SLIME_DMGEFF_HOOKSHOT) {
+ if (this->actor.colChkInfo.damageEffect == EN_SLIME_DMGEFF_FREEZE) {
+ if (this->actor.params == EN_SLIME_TYPE_BLUE) {
+ EnSlime_SetupSpawnIceBlock(this);
+ } else {
+ EnSlime_Freeze(this);
+ if (this->actor.colChkInfo.health == 0) {
+ this->timer = 3;
+ this->collider.base.acFlags &= ~AC_ON;
+ }
+ EnSlime_SetupStun(this);
+ }
+ } else {
+ if (this->actor.colChkInfo.damageEffect == EN_SLIME_DMGEFF_LIGHT) {
+ this->drawDmgEffAlpha = 4.0f;
+ this->drawDmgEffScale = 0.4f;
+ this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->collider.info.bumper.hitPos.x,
+ this->collider.info.bumper.hitPos.y, this->collider.info.bumper.hitPos.z, 0, 0, 0,
+ CLEAR_TAG_LARGE_LIGHT_RAYS);
+ } else if (this->actor.colChkInfo.damageEffect == EN_SLIME_DMGEFF_ELECTRIC) {
+ this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_LARGE;
+ this->drawDmgEffAlpha = 4.0f;
+ this->drawDmgEffScale = 0.4f;
+ }
+ EnSlime_SetupDamaged(this, play, true);
+ }
+ }
+ }
+ }
+}
+
+void EnSlime_Update(Actor* thisx, PlayState* play) {
+ EnSlime* this = THIS;
+ s32 pad;
+ Player* player = GET_PLAYER(play);
+
+ EnSlime_UpdateDamage(this, play);
+ this->actionFunc(this, play);
+
+ // Note: Does not match if you use this->actor instead of thisx
+ thisx->shape.shadowAlpha = this->iceBlockTimer;
+ if (this->iceBlockTimer == ICE_BLOCK_UNUSED) {
+ if (thisx->scale.y > 0.0001f) {
+ thisx->targetArrowOffset = 60.0f / thisx->scale.y;
+ }
+
+ if (this->collider.base.ocFlags1 & OC1_ON) {
+ Actor_MoveWithGravity(thisx);
+ Actor_UpdateBgCheckInfo(play, thisx, 20.0f, 35.0f, 40.0f, 0x1D);
+ }
+
+ Collider_UpdateCylinder(thisx, &this->collider);
+ this->collider.dim.radius = sCylinderInit.dim.radius * (100.0f * thisx->scale.z);
+ this->collider.dim.height = sCylinderInit.dim.height * (100.0f * thisx->scale.y);
+
+ if (this->actionFunc == EnSlime_Jump) {
+ CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
+ }
+
+ if (this->collider.base.acFlags & AC_ON) {
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
+ }
+
+ if (player->stateFlags3 & PLAYER_STATE3_100) {
+ this->collider.base.ocFlags1 &= ~OC1_TYPE_PLAYER;
+ } else {
+ this->collider.base.ocFlags1 |= OC1_TYPE_PLAYER;
+ }
+
+ if (this->collider.base.ocFlags1 & OC1_ON) {
+ CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
+ }
+
+ Actor_SetFocus(thisx, 15.0f);
+ if (this->drawDmgEffAlpha > 0.0f) {
+ if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
+ Math_StepToF(&this->drawDmgEffAlpha, 0.0f, 0.05f);
+ this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.2f;
+ this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 0.4f);
+ } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.4f, 0.01f)) {
+ func_800B9010(thisx, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
+ }
+ }
+ }
+}
+
+void EnSlime_Draw(Actor* thisx, PlayState* play) {
+ s32 i;
+ EnSlime* this = THIS;
+ Vec3f wobbleScale;
+ Color_RGBA8* primColor;
+ Color_RGBA8* envColor;
+ s32 pad;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C28C(play->state.gfxCtx);
+ func_8012C2DC(play->state.gfxCtx);
+ func_800B8118(&this->actor, play, 0);
+ if (this->iceBlockTimer != ICE_BLOCK_UNUSED) {
+ gSPSegment(POLY_XLU_DISP++, 10, D_801AEFA0);
+ gDPSetPrimColor(POLY_XLU_DISP++, 0, 170, 255, 255, 255, 255);
+ gDPSetEnvColor(POLY_XLU_DISP++, 150, 255, 255, this->iceBlockTimer);
+ } else {
+ primColor = &sPrimColors[this->actor.params];
+ envColor = &sEnvColors[this->actor.params];
+ AnimatedMat_Draw(play, sSlimeTexAnim);
+ gDPSetPrimColor(POLY_XLU_DISP++, 0, 100, primColor->r, primColor->g, primColor->b, primColor->a);
+ gDPSetEnvColor(POLY_XLU_DISP++, envColor->r, envColor->g, envColor->b, 255);
+ }
+
+ 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);
+
+ Matrix_RotateXFApply(this->wobbleRot.x);
+ Matrix_RotateZF(this->wobbleRot.z, MTXMODE_APPLY);
+ Matrix_Scale(wobbleScale.x, wobbleScale.y, wobbleScale.z, MTXMODE_APPLY);
+ Matrix_RotateZF(-this->wobbleRot.z, MTXMODE_APPLY);
+ Matrix_RotateXFApply(-this->wobbleRot.x);
+ }
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, gChuchuBodyDL);
+
+ if (this->iceBlockTimer == ICE_BLOCK_UNUSED) {
+ // Ice block is not active
+ Scene_SetRenderModeXlu(play, 0, 1);
+
+ gSPSegment(POLY_OPA_DISP++, 9, (u32)sEyeTextures[this->eyeTexIndex]);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 30, 70, 255);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gChuchuEyesDL);
+
+ } else {
+ Scene_SetRenderModeXlu(play, 1, 2);
+ gSPSegment(POLY_XLU_DISP++, 9, (u32)sEyeTextures[this->eyeTexIndex]);
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, gChuchuEyesDL);
+ }
+
+ for (i = 0; i < EN_SLIME_LIMBPOS_COUNT; i++) {
+ Matrix_MultVec3f(&sLimbPosOffsets[i], &this->limbPos[i]);
+ }
+
+ if (this->actionFunc == EnSlime_Revive) {
+ Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW);
+ Matrix_RotateYS(this->reviveRotY, MTXMODE_APPLY);
+ Matrix_Scale(this->reviveScale.x, this->reviveScale.y, this->reviveScale.z, MTXMODE_APPLY);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, gChuchuPuddleDL);
+ }
+
+ 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);
+
+ 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);
+ Matrix_Scale(0.03f, 0.03f, 0.03f, MTXMODE_APPLY);
+
+ gSPSegment(POLY_OPA_DISP++, 8, (u32)this->itemDropTex);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gItemDropDL);
+ }
+
+ Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale,
+ this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
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 dacbd824c..0a40a117e 100644
--- a/src/overlays/actors/ovl_En_Slime/z_en_slime.h
+++ b/src/overlays/actors/ovl_En_Slime/z_en_slime.h
@@ -2,6 +2,13 @@
#define Z_EN_SLIME_H
#include "global.h"
+#include "objects/object_slime/object_slime.h"
+#include "objects/gameplay_keep/gameplay_keep.h"
+
+#define EN_SLIME_LIMBPOS_COUNT 5
+
+#define EN_SLIME_GET_TYPE(thisx) ((thisx)->params)
+#define EN_SLIME_GET_REVIVE_TIME(thisx) ((((thisx)->params) >> 8) & 0xFF)
struct EnSlime;
@@ -10,9 +17,32 @@ typedef void (*EnSlimeActionFunc)(struct EnSlime*, PlayState*);
typedef struct EnSlime {
/* 0x000 */ Actor actor;
/* 0x144 */ EnSlimeActionFunc actionFunc;
- /* 0x148 */ char unk_148[0xC0];
+ /* 0x148 */ u8 iceBlockTimer;
+ /* 0x149 */ u8 eyeTexIndex;
+ /* 0x14A */ u8 drawDmgEffType;
+ /* 0x14C */ s16 timer;
+ /* 0x14E */ s16 idleRotY;
+ /* 0x150 */ s16 reviveRotY;
+ /* 0x152 */ s16 reviveTime;
+ /* 0x154 */ union {
+ Vec3f iceBlockSnapPos;
+ Vec3f wobbleRot;
+ };
+ /* 0x160 */ TexturePtr itemDropTex;
+ /* 0x164 */ f32 drawDmgEffAlpha;
+ /* 0x168 */ f32 drawDmgEffScale;
+ /* 0x16C */ f32 drawDmgEffFrozenSteamScale;
+ /* 0x170 */ f32 distLimit;
+ /* 0x174 */ Vec3f reviveScale;
+ /* 0x180 */ Vec3f limbPos[EN_SLIME_LIMBPOS_COUNT];
+ /* 0x1BC */ ColliderCylinder collider;
} EnSlime; // size = 0x208
-extern const ActorInit En_Slime_InitVars;
+typedef enum EnSlimeType {
+ /* 0 */ EN_SLIME_TYPE_BLUE,
+ /* 1 */ EN_SLIME_TYPE_GREEN,
+ /* 2 */ EN_SLIME_TYPE_YELLOW,
+ /* 3 */ EN_SLIME_TYPE_RED,
+} EnSlimeType;
#endif // Z_EN_SLIME_H
diff --git a/src/overlays/actors/ovl_En_Snowman/overlay.cfg b/src/overlays/actors/ovl_En_Snowman/overlay.cfg
deleted file mode 100644
index 97b6aa6e9..000000000
--- a/src/overlays/actors/ovl_En_Snowman/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Snowman
-z_en_snowman.c
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 e2dd8b54b..baf3ccdfa 100644
--- a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c
+++ b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c
@@ -34,8 +34,8 @@ void EnSnowman_SetupDead(EnSnowman* this);
void EnSnowman_Dead(EnSnowman* this, PlayState* play);
void EnSnowman_SetupSplitDoNothing(EnSnowman* this);
void EnSnowman_SplitDoNothing(EnSnowman* this, PlayState* play);
-void EnSnowman_SetupMarkForDeath(EnSnowman* this);
-void EnSnowman_MarkForDeath(EnSnowman* this, PlayState* play);
+void EnSnowman_SetupKill(EnSnowman* this);
+void EnSnowman_Kill(EnSnowman* this, PlayState* play);
void EnSnowman_CreateSplitEeno(EnSnowman* this, Vec3f* basePos, s32 yRot);
void EnSnowman_SetupCombine(EnSnowman* this, PlayState* play, Vec3f* combinePos);
void EnSnowman_Combine(EnSnowman* this, PlayState* play);
@@ -61,7 +61,7 @@ typedef enum {
/* 3 */ EN_SNOWMAN_COMBINE_STATE_BEING_ABSORBED_OR_DONE,
} EnSnowmanCombineState;
-const ActorInit En_Snowman_InitVars = {
+ActorInit En_Snowman_InitVars = {
ACTOR_EN_SNOWMAN,
ACTORCAT_ENEMY,
FLAGS,
@@ -208,17 +208,17 @@ void EnSnowman_Init(Actor* thisx, PlayState* play) {
thisx->world.pos.z, 0, 0, 0, EN_SNOWMAN_TYPE_SPLIT);
thisx->parent = Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_SNOWMAN, thisx->world.pos.x,
thisx->world.pos.y, thisx->world.pos.z, 0, 0, 0,
- EN_SNOWMAN_TYPE_SPLIT, -1, thisx->unk20, NULL);
+ EN_SNOWMAN_TYPE_SPLIT, CS_ID_NONE, thisx->halfDaysBits, NULL);
if ((thisx->child == NULL) || (thisx->parent == NULL)) {
if (thisx->child != NULL) {
- Actor_MarkForDeath(thisx->child);
+ Actor_Kill(thisx->child);
}
if (thisx->parent != NULL) {
- Actor_MarkForDeath(thisx->parent);
+ Actor_Kill(thisx->parent);
}
- Actor_MarkForDeath(thisx);
+ Actor_Kill(thisx);
return;
}
@@ -242,19 +242,19 @@ void EnSnowman_Init(Actor* thisx, PlayState* play) {
thisx->flags &= ~ACTOR_FLAG_1;
Collider_InitAndSetCylinder(play, &this->collider, thisx, &sSnowballCylinderInit);
- thisx->world.rot.y = Actor_YawBetweenActors(thisx, &player->actor);
- thisx->velocity.y = (Actor_XZDistanceBetweenActors(thisx, &player->actor) * 0.035f) + -5.0f;
+ thisx->world.rot.y = Actor_WorldYawTowardActor(thisx, &player->actor);
+ thisx->velocity.y = (Actor_WorldDistXZToActor(thisx, &player->actor) * 0.035f) + -5.0f;
thisx->velocity.y = CLAMP_MAX(thisx->velocity.y, 3.5f);
if (EN_SNOWMAN_GET_TYPE(thisx) == EN_SNOWMAN_TYPE_SMALL_SNOWBALL) {
- thisx->speedXZ = 15.0f;
+ thisx->speed = 15.0f;
} else {
- thisx->speedXZ = 22.5f;
+ thisx->speed = 22.5f;
thisx->velocity.y *= 1.5f;
}
- thisx->world.pos.x += thisx->speedXZ * Math_SinS(thisx->world.rot.y);
+ thisx->world.pos.x += thisx->speed * Math_SinS(thisx->world.rot.y);
thisx->world.pos.y += thisx->velocity.y;
- thisx->world.pos.z += thisx->speedXZ * Math_CosS(thisx->world.rot.y);
+ thisx->world.pos.z += thisx->speed * Math_CosS(thisx->world.rot.y);
if (EN_SNOWMAN_GET_TYPE(thisx) == EN_SNOWMAN_TYPE_SMALL_SNOWBALL) {
this->collider.dim.radius = 8;
@@ -338,7 +338,7 @@ void EnSnowman_SpawnBigSnowballFragmentEffects(EnSnowman* this, PlayState* play)
void EnSnowman_SetupMoveSnowPile(EnSnowman* this) {
Animation_PlayLoop(&this->snowPileSkelAnime, &gEenoSnowPileMoveAnim);
this->actor.scale.y = this->actor.scale.x;
- this->actor.speedXZ = 2.0f;
+ this->actor.speed = 2.0f;
this->actor.draw = EnSnowman_DrawSnowPile;
this->work.timer = 40;
this->turningOnSteepSlope = false;
@@ -395,7 +395,7 @@ void EnSnowman_MoveSnowPile(EnSnowman* this, PlayState* play) {
EnSnowman_SetupCombine(this, play, &combinePos);
} else if ((this->work.timer == 0) && (fabsf(this->actor.playerHeightRel) < 60.0f) &&
(this->actor.xzDistToPlayer < this->attackRange) && (Player_GetMask(play) != PLAYER_MASK_STONE) &&
- !(player->stateFlags1 & 0x800000)) {
+ !(player->stateFlags1 & PLAYER_STATE1_800000)) {
EnSnowman_SetupEmerge(this, play);
} else if (this->snowPileTargetRotY != this->actor.shape.rot.y) {
if (Math_ScaledStepToS(&this->actor.shape.rot.y, this->snowPileTargetRotY, 0x100)) {
@@ -403,10 +403,11 @@ void EnSnowman_MoveSnowPile(EnSnowman* this, PlayState* play) {
}
this->actor.world.rot.y = this->actor.shape.rot.y;
- } else if (this->actor.bgCheckFlags & 8) {
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
this->snowPileTargetRotY = this->actor.wallYaw;
- } else if (Actor_XZDistanceToPoint(&this->actor, &this->actor.home.pos) > 200.0f) {
- this->snowPileTargetRotY = Actor_YawToPoint(&this->actor, &this->actor.home.pos) + ((s32)Rand_Next() >> 0x14);
+ } else if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > 200.0f) {
+ this->snowPileTargetRotY =
+ Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos) + ((s32)Rand_Next() >> 0x14);
} else if (Rand_ZeroOne() < 0.02f) {
this->snowPileTargetRotY += (s16)(((Rand_Next() >> 0x13) + 0x1000) * ((Rand_ZeroOne() < 0.5f) ? -1 : 1));
}
@@ -414,12 +415,12 @@ void EnSnowman_MoveSnowPile(EnSnowman* this, PlayState* play) {
void EnSnowman_SetupEmerge(EnSnowman* this, PlayState* play) {
Animation_PlayOnce(&this->skelAnime, &gEenoEmergeAnim);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_YMAJIN_SURFACE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_YMAJIN_SURFACE);
this->collider.dim.radius = this->eenoScale * 40.0f;
this->collider.dim.height = this->eenoScale * 25.0f;
this->actor.draw = EnSnowman_Draw;
this->actor.scale.y = this->actor.scale.x * 0.4f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.shape.rot.y = this->actor.yawTowardsPlayer;
EnSnowman_SpawnCircularDustEffect(this, play);
this->collider.base.acFlags &= ~AC_ON;
@@ -439,7 +440,7 @@ void EnSnowman_Emerge(EnSnowman* this, PlayState* play) {
if (SkelAnime_Update(&this->skelAnime)) {
if (this->combineState == EN_SNOWMAN_COMBINE_STATE_ACTIVE) {
EnSnowman_SetupSubmerge(this, play);
- } else if (!(player->stateFlags1 & 0x800000) && (Player_GetMask(play) != PLAYER_MASK_STONE)) {
+ } else if (!(player->stateFlags1 & PLAYER_STATE1_800000) && (Player_GetMask(play) != PLAYER_MASK_STONE)) {
this->collider.base.acFlags |= AC_ON;
this->work.snowballsToThrowBeforeIdling = 3;
EnSnowman_SetupReadySnowball(this);
@@ -494,9 +495,9 @@ void EnSnowman_ReadySnowball(EnSnowman* this, PlayState* play) {
EnSnowman_SetupThrowSnowball(this);
} else if (Animation_OnFrame(&this->skelAnime, this->fwork.frameToStartHoldingSnowball)) {
if (EN_SNOWMAN_GET_TYPE(&this->actor) == EN_SNOWMAN_TYPE_LARGE) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_YMAJIN_HOLD_SNOW);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_YMAJIN_HOLD_SNOW);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_YMAJIN_MINI_HOLD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_YMAJIN_MINI_HOLD);
}
this->isHoldingSnowball = true;
@@ -529,7 +530,7 @@ void EnSnowman_ThrowSnowball(EnSnowman* this, PlayState* play) {
Math_ApproachS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0xA, 0x1000);
if (SkelAnime_Update(&this->skelAnime)) {
if ((this->work.snowballsToThrowBeforeIdling != 0) && (Player_GetMask(play) != PLAYER_MASK_STONE) &&
- !(player->stateFlags1 & 0x800000)) {
+ !(player->stateFlags1 & PLAYER_STATE1_800000)) {
EnSnowman_SetupReadySnowball(this);
} else {
this->work.snowballsToThrowBeforeIdling = 0;
@@ -539,10 +540,10 @@ void EnSnowman_ThrowSnowball(EnSnowman* this, PlayState* play) {
this->isHoldingSnowball = false;
if (EN_SNOWMAN_GET_TYPE(&this->actor) == EN_SNOWMAN_TYPE_LARGE) {
params = EN_SNOWMAN_TYPE_LARGE_SNOWBALL;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_YMAJIN_THROW);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_YMAJIN_THROW);
} else {
params = EN_SNOWMAN_TYPE_SMALL_SNOWBALL;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_YMAJIN_MINI_THROW);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_YMAJIN_MINI_THROW);
}
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_SNOWMAN, this->snowballPos.x, this->snowballPos.y,
@@ -572,7 +573,7 @@ void EnSnowman_SetupSubmerge(EnSnowman* this, PlayState* play) {
Animation_Change(&this->skelAnime, &gEenoEmergeAnim, -1.0f, Animation_GetLastFrame(&gEenoEmergeAnim), 0.0f,
ANIMMODE_ONCE, -3.0f);
EnSnowman_SpawnCircularDustEffect(this, play);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_YMAJIN_HIDE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_YMAJIN_HIDE);
this->actionFunc = EnSnowman_Submerge;
}
@@ -598,13 +599,13 @@ void EnSnowman_Submerge(EnSnowman* this, PlayState* play) {
}
void EnSnowman_SetupMelt(EnSnowman* this) {
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 50);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 50);
this->collider.base.acFlags &= ~AC_ON;
this->work.timer = 50;
this->actor.flags &= ~ACTOR_FLAG_1;
this->actor.flags |= ACTOR_FLAG_10;
this->actor.scale.y = this->actor.scale.x;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = EnSnowman_Melt;
}
@@ -634,11 +635,11 @@ void EnSnowman_Melt(EnSnowman* this, PlayState* play) {
if (EN_SNOWMAN_GET_TYPE(&this->actor) == EN_SNOWMAN_TYPE_SPLIT) {
EnSnowman_SetupSplitDoNothing(this);
} else if (EN_SNOWMAN_GET_TYPE(&this->actor) == EN_SNOWMAN_TYPE_LARGE) {
- Actor_MarkForDeath(this->actor.parent);
- Actor_MarkForDeath(this->actor.child);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(this->actor.parent);
+ Actor_Kill(this->actor.child);
+ Actor_Kill(&this->actor);
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -667,18 +668,18 @@ void EnSnowman_Stun(EnSnowman* this, PlayState* play) {
void EnSnowman_SetupDamaged(EnSnowman* this) {
Animation_PlayLoop(&this->skelAnime, &gEenoDamageAnim);
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 20);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 20);
this->collider.base.acFlags &= ~AC_ON;
this->work.timer = 20;
this->actor.draw = EnSnowman_Draw;
this->actor.scale.y = this->actor.scale.x;
- this->actor.speedXZ = 10.0f;
+ this->actor.speed = 10.0f;
func_800BE504(&this->actor, &this->collider);
if (EN_SNOWMAN_GET_TYPE(&this->actor) == EN_SNOWMAN_TYPE_LARGE) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_YMAJIN_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_YMAJIN_DAMAGE);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_YMAJIN_MINI_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_YMAJIN_MINI_DAMAGE);
}
this->actionFunc = EnSnowman_Damaged;
@@ -695,7 +696,7 @@ void EnSnowman_Damaged(EnSnowman* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
rotationalVelocityScale = CLAMP_MAX(this->work.timer, 10);
this->actor.shape.rot.y += rotationalVelocityScale * 0x300;
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.5f);
+ Math_StepToF(&this->actor.speed, 0.0f, 0.5f);
if (EN_SNOWMAN_GET_TYPE(&this->actor) == EN_SNOWMAN_TYPE_LARGE) {
Math_StepToF(&this->actor.scale.y, 1.3f * 0.01f, 0.7f * 0.001f);
@@ -706,7 +707,7 @@ void EnSnowman_Damaged(EnSnowman* this, PlayState* play) {
if (this->work.timer > 0) {
this->work.timer--;
} else if (EN_SNOWMAN_GET_TYPE(&this->actor) == EN_SNOWMAN_TYPE_LARGE) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_YMAJIN_SPLIT);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_YMAJIN_SPLIT);
EnSnowman_SpawnCircularDustEffect(this, play);
this->drawDmgEffAlpha = 0.0f;
EnSnowman_CreateSplitEeno((EnSnowman*)this->actor.parent, &this->actor.world.pos,
@@ -765,7 +766,7 @@ void EnSnowman_Dead(EnSnowman* this, PlayState* play) {
if (EN_SNOWMAN_GET_TYPE(&this->actor) == EN_SNOWMAN_TYPE_SPLIT) {
EnSnowman_SetupSplitDoNothing(this);
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -788,9 +789,9 @@ void EnSnowman_SetupSplitDoNothing(EnSnowman* this) {
this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_10);
if ((this->actor.parent != NULL) && (((EnSnowman*)this->actor.parent)->actionFunc == EnSnowman_SplitDoNothing)) {
if ((this->actor.child != NULL) && (((EnSnowman*)this->actor.child)->actionFunc == EnSnowman_SplitDoNothing)) {
- EnSnowman_SetupMarkForDeath((EnSnowman*)this->actor.parent);
- EnSnowman_SetupMarkForDeath((EnSnowman*)this->actor.child);
- Actor_MarkForDeath(&this->actor);
+ EnSnowman_SetupKill((EnSnowman*)this->actor.parent);
+ EnSnowman_SetupKill((EnSnowman*)this->actor.child);
+ Actor_Kill(&this->actor);
}
}
@@ -801,19 +802,19 @@ void EnSnowman_SplitDoNothing(EnSnowman* this, PlayState* play) {
}
/**
- * Turns off collision on the Eeno before calling Actor_MarkForDeath on it.
+ * Turns off collision on the Eeno before calling Actor_Kill on it.
*/
-void EnSnowman_SetupMarkForDeath(EnSnowman* this) {
+void EnSnowman_SetupKill(EnSnowman* this) {
this->collider.base.acFlags &= ~(AC_ON | AC_HIT);
this->collider.base.ocFlags1 &= ~(OC1_ON | OC1_HIT);
- this->actionFunc = EnSnowman_MarkForDeath;
+ this->actionFunc = EnSnowman_Kill;
}
/**
- * Simply calls Actor_MarkForDeath on the Eeno.
+ * Simply calls Actor_Kill on the Eeno.
*/
-void EnSnowman_MarkForDeath(EnSnowman* this, PlayState* play) {
- Actor_MarkForDeath(&this->actor);
+void EnSnowman_Kill(EnSnowman* this, PlayState* play) {
+ Actor_Kill(&this->actor);
}
/**
@@ -844,7 +845,7 @@ void EnSnowman_CreateSplitEeno(EnSnowman* this, Vec3f* basePos, s32 yRot) {
* target scale increases.
*/
void EnSnowman_AbsorbEeno(EnSnowman* smallerEeno, EnSnowman* largerEeno) {
- Actor_PlaySfxAtPos(&largerEeno->actor, NA_SE_EN_YMAJIN_UNITE);
+ Actor_PlaySfx(&largerEeno->actor, NA_SE_EN_YMAJIN_UNITE);
largerEeno->fwork.targetScaleDuringCombine += 0.005f;
smallerEeno->combineState = EN_SNOWMAN_COMBINE_STATE_BEING_ABSORBED_OR_DONE;
smallerEeno->collider.base.ocFlags1 &= ~OC1_HIT;
@@ -877,11 +878,11 @@ void EnSnowman_SetupCombine(EnSnowman* this, PlayState* play, Vec3f* combinePos)
//! @bug: If an Eeno is in the middle of submerging, its draw function will still be EnSnowman_Draw.
//! It will call EnSnowman_SetupSubmerge again, resulting in the submerge animation playing twice.
if (this->actor.draw == EnSnowman_DrawSnowPile) {
- this->actor.speedXZ = 3.0f;
+ this->actor.speed = 3.0f;
this->actionFunc = EnSnowman_Combine;
} else {
this->isHoldingSnowball = false;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
// At this point, the combineState is EN_SNOWMAN_COMBINE_STATE_ACTIVE, and the actionFunc
// will be set to EnSnowman_Submerge. When the submerging animation is complete with this
@@ -902,7 +903,7 @@ void EnSnowman_Combine(EnSnowman* this, PlayState* play) {
SkelAnime_Update(&this->snowPileSkelAnime);
parent = (EnSnowman*)this->actor.parent;
child = (EnSnowman*)this->actor.child;
- Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_YawToPoint(&this->actor, &this->combinePos), 0x1000);
+ Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_WorldYawTowardPoint(&this->actor, &this->combinePos), 0x1000);
this->actor.world.rot.y = this->actor.shape.rot.y;
if (this->combineState == EN_SNOWMAN_COMBINE_STATE_ACTIVE) {
@@ -940,8 +941,8 @@ void EnSnowman_Combine(EnSnowman* this, PlayState* play) {
this->fwork.targetScaleDuringCombine = 0.0f;
}
- if (Actor_XZDistanceToPoint(&this->actor, &this->combinePos) < 20.0f) {
- this->actor.speedXZ = 0.0f;
+ if (Actor_WorldDistXZToPoint(&this->actor, &this->combinePos) < 20.0f) {
+ this->actor.speed = 0.0f;
}
if (Math_StepToF(&this->actor.scale.x, this->fwork.targetScaleDuringCombine, 0.0005f)) {
@@ -976,15 +977,15 @@ void EnSnowman_UpdateDamage(EnSnowman* this, PlayState* play) {
if ((this->actionFunc == EnSnowman_MoveSnowPile) || (this->actionFunc == EnSnowman_Combine)) {
EnSnowman_SetupEmerge(this, play);
} else if (this->actor.colChkInfo.damageEffect == EN_SNOWMAN_DMGEFF_STUN) {
- Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
EnSnowman_SetupStun(this);
} else if (this->actor.colChkInfo.damageEffect == EN_SNOWMAN_DMGEFF_ELECTRIC_STUN) {
- Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40);
this->drawDmgEffScale = 0.55f;
this->drawDmgEffAlpha = 2.0f;
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_LARGE;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
EnSnowman_SetupStun(this);
} else if (EN_SNOWMAN_GET_TYPE(&this->actor) == EN_SNOWMAN_TYPE_LARGE) {
if (this->isHoldingSnowball == true) {
@@ -1025,7 +1026,7 @@ void EnSnowman_Update(Actor* thisx, PlayState* play) {
EnSnowman_UpdateDamage(this, play);
this->actionFunc(this, play);
- if (this->actionFunc != EnSnowman_MarkForDeath) {
+ if (this->actionFunc != EnSnowman_Kill) {
Actor_MoveWithGravity(&this->actor);
if ((EN_SNOWMAN_GET_TYPE(&this->actor) == EN_SNOWMAN_TYPE_LARGE) &&
(this->actionFunc == EnSnowman_ReadySnowball)) {
@@ -1036,12 +1037,14 @@ void EnSnowman_Update(Actor* thisx, PlayState* play) {
wallCheckRadius = this->collider.dim.radius;
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, wallCheckRadius, 0.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, wallCheckRadius, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
if ((this->actor.floorPoly != NULL) && ((this->actor.floorPoly->normal.y * SHT_MINV) < 0.7f)) {
Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.prevPos);
if (!this->turningOnSteepSlope) {
- this->snowPileTargetRotY = Math_FAtan2F(this->actor.floorPoly->normal.z * SHT_MINV,
- this->actor.floorPoly->normal.x * SHT_MINV);
+ this->snowPileTargetRotY = Math_Atan2S_XY(this->actor.floorPoly->normal.z * SHT_MINV,
+ this->actor.floorPoly->normal.x * SHT_MINV);
this->turningOnSteepSlope = true;
}
} else {
@@ -1080,9 +1083,9 @@ void EnSnowman_UpdateSnowball(Actor* thisx, PlayState* play) {
this->collider.base.ocFlags1 |= OC1_ON;
}
- if ((this->actor.bgCheckFlags & 8) || (this->actor.bgCheckFlags & 1) || (this->actor.bgCheckFlags & 0x10) ||
- (this->collider.base.atFlags & AT_HIT) || (this->collider.base.acFlags & AC_HIT) ||
- (this->collider.base.ocFlags1 & OC1_HIT)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) || (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) ||
+ (this->actor.bgCheckFlags & BGCHECKFLAG_CEILING) || (this->collider.base.atFlags & AT_HIT) ||
+ (this->collider.base.acFlags & AC_HIT) || (this->collider.base.ocFlags1 & OC1_HIT)) {
if (EN_SNOWMAN_GET_TYPE(&this->actor) == EN_SNOWMAN_TYPE_SMALL_SNOWBALL) {
scale = 10;
for (i = 0; i < 3; i++) {
@@ -1095,25 +1098,28 @@ void EnSnowman_UpdateSnowball(Actor* thisx, PlayState* play) {
30);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_EV_SMALL_SNOWBALL_BROKEN);
} else {
- // EnSnowman_SpawnBigSnowballFragmentEffects only fworks with snowballPos, so we need
- // to copy the snowball actor's current position into snowballPos to make this fwork.
+ // EnSnowman_SpawnBigSnowballFragmentEffects only works with snowballPos, so we need
+ // to copy the snowball actor's current position into snowballPos to make this work.
Math_Vec3f_Copy(&this->snowballPos, &this->actor.world.pos);
EnSnowman_SpawnBigSnowballFragmentEffects(this, play);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_EV_SNOWBALL_BROKEN);
}
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_IT_REFLECTION_WOOD);
- Actor_MarkForDeath(&this->actor);
- } else {
- this->actor.shape.rot.x += 0xF00;
- Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, this->collider.dim.radius * 0.6f,
- this->collider.dim.height - this->collider.dim.yShift, 0x1F);
- Collider_UpdateCylinder(&this->actor, &this->collider);
- CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
- CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
- CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
+ Actor_Kill(&this->actor);
+ return;
}
+
+ this->actor.shape.rot.x += 0xF00;
+ Actor_MoveWithGravity(&this->actor);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, this->collider.dim.radius * 0.6f,
+ this->collider.dim.height - this->collider.dim.yShift,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 |
+ UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10);
+ Collider_UpdateCylinder(&this->actor, &this->collider);
+ CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
+ CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
}
/**
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 32a1ae352..da0c0a30a 100644
--- a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.h
+++ b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.h
@@ -54,6 +54,4 @@ typedef struct EnSnowman {
/* 0x32C */ ColliderCylinder collider;
} EnSnowman; // size = 0x378
-extern const ActorInit En_Snowman_InitVars;
-
#endif // Z_EN_SNOWMAN_H
diff --git a/src/overlays/actors/ovl_En_Snowwd/overlay.cfg b/src/overlays/actors/ovl_En_Snowwd/overlay.cfg
deleted file mode 100644
index 4a4495833..000000000
--- a/src/overlays/actors/ovl_En_Snowwd/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Snowwd
-z_en_snowwd.c
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 7e50201ac..48a1cfea0 100644
--- a/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.c
+++ b/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.c
@@ -18,7 +18,7 @@ void EnSnowwd_Draw(Actor* thisx, PlayState* play);
void func_80AF76F0(EnSnowwd* this, PlayState* play);
#if 0
-const ActorInit En_Snowwd_InitVars = {
+ActorInit En_Snowwd_InitVars = {
ACTOR_EN_SNOWWD,
ACTORCAT_PROP,
FLAGS,
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 6706de846..a83e5d05a 100644
--- a/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.h
+++ b/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.h
@@ -13,6 +13,4 @@ typedef struct EnSnowwd {
/* 0x194 */ EnSnowwdActionFunc actionFunc;
} EnSnowwd; // size = 0x198
-extern const ActorInit En_Snowwd_InitVars;
-
#endif // Z_EN_SNOWWD_H
diff --git a/src/overlays/actors/ovl_En_Sob1/overlay.cfg b/src/overlays/actors/ovl_En_Sob1/overlay.cfg
deleted file mode 100644
index cd2fa2a2e..000000000
--- a/src/overlays/actors/ovl_En_Sob1/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Sob1
-z_en_sob1.c
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 ebbdcf542..a23600fb9 100644
--- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c
+++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c
@@ -64,7 +64,7 @@ static AnimationInfoS sAnimationInfoBombShopkeeper[] = {
{ &gBombShopkeeperSitAtCounterLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
};
-const ActorInit En_Sob1_InitVars = {
+ActorInit En_Sob1_InitVars = {
ACTOR_EN_OSSAN,
ACTORCAT_NPC,
FLAGS,
@@ -190,7 +190,7 @@ u16 EnSob1_GetTalkOption(EnSob1* this, PlayState* play) {
if (this->shopType == BOMB_SHOP) {
if (gSaveContext.save.day == 1 && gSaveContext.save.time >= CLOCK_TIME(6, 00)) {
return 0x648;
- } else if (gSaveContext.save.weekEventReg[33] & 8) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) {
return 0x649;
} else {
return 0x64A;
@@ -229,10 +229,12 @@ u16 EnSob1_GetWelcome(EnSob1* this, PlayState* play) {
case PLAYER_MASK_BUNNY:
case PLAYER_MASK_POSTMAN:
return 0x644;
+
case PLAYER_MASK_GORON:
case PLAYER_MASK_ZORA:
case PLAYER_MASK_DEKU:
return 0x64B;
+
case PLAYER_MASK_TRUTH:
case PLAYER_MASK_ALL_NIGHT:
case PLAYER_MASK_KEATON:
@@ -243,78 +245,96 @@ u16 EnSob1_GetWelcome(EnSob1* this, PlayState* play) {
case PLAYER_MASK_BREMEN:
case PLAYER_MASK_SCENTS:
return 0x685;
+
case PLAYER_MASK_GARO:
case PLAYER_MASK_CIRCUS_LEADER:
case PLAYER_MASK_GIBDO:
case PLAYER_MASK_CAPTAIN:
return 0x686;
+
case PLAYER_MASK_COUPLE:
return 0x687;
+
case PLAYER_MASK_STONE:
return 0x688;
+
case PLAYER_MASK_BLAST:
return 0x689;
+
case PLAYER_MASK_KAFEIS_MASK:
return 0x68A;
}
} else if (this->shopType == ZORA_SHOP) {
switch (player->transformation) {
case PLAYER_FORM_HUMAN:
- if (gSaveContext.save.weekEventReg[57] & 0x10) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_57_10)) {
return 0x12CF;
+ } else {
+ SET_WEEKEVENTREG(WEEKEVENTREG_57_10);
+ return 0x12CE;
}
- gSaveContext.save.weekEventReg[57] |= 0x10;
- return 0x12CE;
+
case PLAYER_FORM_DEKU:
- if (gSaveContext.save.weekEventReg[57] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_57_20)) {
return 0x12D1;
+ } else {
+ SET_WEEKEVENTREG(WEEKEVENTREG_57_20);
+ return 0x12D0;
}
- gSaveContext.save.weekEventReg[57] |= 0x20;
- return 0x12D0;
+
case PLAYER_FORM_GORON:
- if (gSaveContext.save.weekEventReg[57] & 0x40) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_57_40)) {
return 0x12D3;
+ } else {
+ SET_WEEKEVENTREG(WEEKEVENTREG_57_40);
+ return 0x12D2;
}
- gSaveContext.save.weekEventReg[57] |= 0x40;
- return 0x12D2;
+
case PLAYER_FORM_ZORA:
- if (gSaveContext.save.weekEventReg[57] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_57_80)) {
return 0x12D5;
+ } else {
+ SET_WEEKEVENTREG(WEEKEVENTREG_57_80);
+ return 0x12D4;
}
- gSaveContext.save.weekEventReg[57] |= 0x80;
- return 0x12D4;
+
default:
return 0x12CE;
}
} else if (this->shopType == GORON_SHOP) {
if (player->transformation != PLAYER_FORM_GORON) {
- if (gSaveContext.save.weekEventReg[58] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_58_04)) {
return 0xBB9;
+ } else {
+ SET_WEEKEVENTREG(WEEKEVENTREG_58_04);
+ return 0xBB8;
}
- gSaveContext.save.weekEventReg[58] |= 4;
- return 0xBB8;
} else {
- if (gSaveContext.save.weekEventReg[58] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_58_08)) {
return 0xBBB;
+ } else {
+ SET_WEEKEVENTREG(WEEKEVENTREG_58_08);
+ return 0xBBA;
}
- gSaveContext.save.weekEventReg[58] |= 8;
- return 0xBBA;
}
} else if (this->shopType == GORON_SHOP_SPRING) {
if (player->transformation != PLAYER_FORM_GORON) {
- if (gSaveContext.save.weekEventReg[58] & 0x10) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_58_10)) {
return 0xBBD;
+ } else {
+ SET_WEEKEVENTREG(WEEKEVENTREG_58_10);
+ return 0xBBC;
}
- gSaveContext.save.weekEventReg[58] |= 0x10;
- return 0xBBC;
} else {
- if (gSaveContext.save.weekEventReg[58] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_58_20)) {
return 0xBBF;
+ } else {
+ SET_WEEKEVENTREG(WEEKEVENTREG_58_20);
+ return 0xBBE;
}
- gSaveContext.save.weekEventReg[58] |= 0x20;
- return 0xBBE;
}
}
+
return 0;
}
@@ -386,7 +406,7 @@ void EnSob1_Init(Actor* thisx, PlayState* play) {
this->shopType = ZORA_SHOP;
break;
case GORON_SHOP:
- if (gSaveContext.save.weekEventReg[33] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) {
this->shopType = GORON_SHOP_SPRING;
} else {
this->shopType = GORON_SHOP;
@@ -396,18 +416,18 @@ void EnSob1_Init(Actor* thisx, PlayState* play) {
this->shopType = BOMB_SHOP;
break;
default:
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
objIds = sObjectIds[this->shopType];
this->mainObjIndex = Object_GetIndex(&play->objectCtx, objIds[0]);
if (this->mainObjIndex < 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
if (!EnSob1_GetObjIndices(this, play, objIds)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
Actor_ProcessInitChain(&this->actor, sInitChain);
@@ -436,7 +456,7 @@ void EnSob1_EndInteraction(PlayState* play, EnSob1* this) {
Player* player = GET_PLAYER(play);
if (this->cutsceneState == ENSOB1_CUTSCENESTATE_PLAYING) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->cutsceneState = ENSOB1_CUTSCENESTATE_STOPPED;
}
Actor_ProcessTalkRequest(&this->actor, &play->state);
@@ -446,7 +466,7 @@ void EnSob1_EndInteraction(PlayState* play, EnSob1* this) {
this->drawCursor = 0;
this->stickLeftPrompt.isEnabled = false;
this->stickRightPrompt.isEnabled = false;
- player->stateFlags2 &= ~0x20000000;
+ player->stateFlags2 &= ~PLAYER_STATE2_20000000;
play->interfaceCtx.unk_222 = 0;
play->interfaceCtx.unk_224 = 0;
EnSob1_SetupAction(this, EnSob1_Idle);
@@ -467,14 +487,14 @@ s32 EnSob1_TestEndInteraction(EnSob1* this, PlayState* play, Input* input) {
s32 EnSob1_TestCancelOption(EnSob1* this, PlayState* play, Input* input) {
if (CHECK_BTN_ALL(input->press.button, BTN_B)) {
this->actionFunc = this->prevActionFunc;
- func_80151938(play, this->items[this->cursorIndex]->actor.textId);
+ Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId);
return true;
}
return false;
}
void EnSob1_SetupStartShopping(PlayState* play, EnSob1* this, u8 skipHello) {
- func_8011552C(play, 16);
+ func_8011552C(play, DO_ACTION_NEXT);
if (!skipHello) {
EnSob1_SetupAction(this, EnSob1_Hello);
} else {
@@ -484,8 +504,8 @@ void EnSob1_SetupStartShopping(PlayState* play, EnSob1* this, u8 skipHello) {
void EnSob1_StartShopping(PlayState* play, EnSob1* this) {
EnSob1_SetupAction(this, EnSob1_FaceShopkeeper);
- func_80151938(play, sFacingShopkeeperTextIds[this->shopType]);
- func_8011552C(play, 6);
+ Message_ContinueTextbox(play, sFacingShopkeeperTextIds[this->shopType]);
+ func_8011552C(play, DO_ACTION_DECIDE);
this->stickLeftPrompt.isEnabled = false;
this->stickRightPrompt.isEnabled = true;
}
@@ -493,8 +513,8 @@ void EnSob1_StartShopping(PlayState* play, EnSob1* this) {
void EnSob1_TalkToShopkeeper(PlayState* play, EnSob1* this) {
EnSob1_SetupAction(this, EnSob1_TalkingToShopkeeper);
this->talkOptionTextId = EnSob1_GetTalkOption(this, play);
- func_80151938(play, this->talkOptionTextId);
- func_8011552C(play, 6);
+ Message_ContinueTextbox(play, this->talkOptionTextId);
+ func_8011552C(play, DO_ACTION_DECIDE);
this->stickLeftPrompt.isEnabled = false;
this->stickRightPrompt.isEnabled = false;
}
@@ -526,14 +546,14 @@ void EnSob1_Idle(EnSob1* this, PlayState* play) {
this->headRotTarget = this->actor.yawTowardsPlayer - this->actor.shape.rot.y;
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
if (this->cutsceneState == ENSOB1_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookFowardCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookFowardCsId;
+ CutsceneManager_Queue(this->csId);
this->cutsceneState = ENSOB1_CUTSCENESTATE_WAITING;
}
- player->stateFlags2 |= 0x20000000;
+ player->stateFlags2 |= PLAYER_STATE2_20000000;
this->welcomeTextId = EnSob1_GetWelcome(this, play);
Message_StartTextbox(play, this->welcomeTextId, &this->actor);
if (ENSOB1_GET_SHOPTYPE(&this->actor) == BOMB_SHOP) {
@@ -603,11 +623,11 @@ void EnSob1_Hello(EnSob1* this, PlayState* play) {
u8 talkState = Message_GetState(&play->msgCtx);
if (this->cutsceneState == ENSOB1_CUTSCENESTATE_WAITING) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->cutsceneState = ENSOB1_CUTSCENESTATE_PLAYING;
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
}
if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play) &&
@@ -644,23 +664,23 @@ void EnSob1_FaceShopkeeper(EnSob1* this, PlayState* play) {
u8 cursorIndex;
if (this->cutsceneState == ENSOB1_CUTSCENESTATE_WAITING) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->cutsceneState = ENSOB1_CUTSCENESTATE_PLAYING;
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
}
if (this->cutsceneState == ENSOB1_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookFowardCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookFowardCsId;
+ CutsceneManager_Queue(this->csId);
this->cutsceneState = ENSOB1_CUTSCENESTATE_WAITING;
} else {
if (talkState == TEXT_STATE_CHOICE) {
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
if (!EnSob1_TestEndInteraction(this, play, CONTROLLER1(&play->state))) {
if (!Message_ShouldAdvance(play) || !EnSob1_FacingShopkeeperDialogResult(this, play)) {
if (this->stickAccumX > 0) {
@@ -668,7 +688,7 @@ void EnSob1_FaceShopkeeper(EnSob1* this, PlayState* play) {
if (cursorIndex != CURSOR_INVALID) {
this->cursorIndex = cursorIndex;
EnSob1_SetupAction(this, EnSob1_LookToShelf);
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
this->stickRightPrompt.isEnabled = false;
play_sound(NA_SE_SY_CURSOR);
}
@@ -687,23 +707,23 @@ void EnSob1_TalkingToShopkeeper(EnSob1* this, PlayState* play) {
void EnSob1_LookToShopkeeperFromShelf(EnSob1* this, PlayState* play) {
if (this->cutsceneState == ENSOB1_CUTSCENESTATE_PLAYING) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->cutsceneState = ENSOB1_CUTSCENESTATE_STOPPED;
}
if (this->cutsceneState == ENSOB1_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookToShopkeeperCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookToShopkeeperCsId;
+ CutsceneManager_Queue(this->csId);
this->cutsceneState = ENSOB1_CUTSCENESTATE_WAITING;
} else if (this->cutsceneState == ENSOB1_CUTSCENESTATE_WAITING) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->cutsceneState = ENSOB1_CUTSCENESTATE_PLAYING;
EnSob1_StartShopping(play, this);
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
}
}
@@ -718,9 +738,9 @@ void EnSob1_EndWalk(EnSob1* this, PlayState* play) {
EnSob1_GetDistSqAndOrient(this->path, this->waypoint - 1, &this->actor.world.pos, &distSq), 4,
1000, 1);
this->actor.shape.rot.y = this->actor.world.rot.y;
- Math_ApproachF(&this->actor.speedXZ, 0.5f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 0.5f, 0.2f, 1.0f);
if (distSq < 12.0f) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (animLastFrame == curFrame) {
EnSob1_ChangeAnim(&this->skelAnime, sAnimationInfoBombShopkeeper,
BOMB_SHOPKEEPER_ANIM_SIT_AT_COUNTER_START);
@@ -745,11 +765,11 @@ void EnSob1_Walk(EnSob1* this, PlayState* play) {
f32 distSq;
if (this->cutsceneState == ENSOB1_CUTSCENESTATE_WAITING) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->cutsceneState = ENSOB1_CUTSCENESTATE_PLAYING;
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
}
if (this->path != NULL) {
@@ -757,11 +777,11 @@ void EnSob1_Walk(EnSob1* this, PlayState* play) {
EnSob1_GetDistSqAndOrient(this->path, this->waypoint, &this->actor.world.pos, &distSq), 4,
1000, 1);
this->actor.shape.rot.y = this->actor.world.rot.y;
- this->actor.speedXZ = 2.0f;
+ this->actor.speed = 2.0f;
if (distSq < SQ(5.0f)) {
this->waypoint++;
if ((this->path->count - 1) < this->waypoint) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
EnSob1_SetupAction(this, EnSob1_EndWalk);
}
}
@@ -774,23 +794,23 @@ void EnSob1_Walking(EnSob1* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (this->cutsceneState == ENSOB1_CUTSCENESTATE_WAITING) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->cutsceneState = ENSOB1_CUTSCENESTATE_PLAYING;
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
}
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
if (this->cutsceneState == ENSOB1_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookFowardCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookFowardCsId;
+ CutsceneManager_Queue(this->csId);
this->cutsceneState = ENSOB1_CUTSCENESTATE_WAITING;
}
- player->stateFlags2 |= 0x20000000;
+ player->stateFlags2 |= PLAYER_STATE2_20000000;
this->welcomeTextId = EnSob1_GetWelcome(this, play);
Message_StartTextbox(play, this->welcomeTextId, &this->actor);
this->wasTalkedToWhileWalking = true;
@@ -808,47 +828,47 @@ void EnSob1_ItemPurchased(EnSob1* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (this->cutsceneState == ENSOB1_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
- player->stateFlags2 |= 0x20000000;
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
+ player->stateFlags2 |= PLAYER_STATE2_20000000;
EnSob1_SetupAction(this, EnSob1_ContinueShopping);
this->cutsceneState = ENSOB1_CUTSCENESTATE_PLAYING;
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookToShopkeeperCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookToShopkeeperCsId;
+ CutsceneManager_Queue(this->csId);
}
}
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- func_80151938(play, 0x647);
+ Message_ContinueTextbox(play, 0x647);
} else {
- func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
}
}
void EnSob1_LookToShelf(EnSob1* this, PlayState* play) {
if (this->cutsceneState == ENSOB1_CUTSCENESTATE_PLAYING) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->cutsceneState = ENSOB1_CUTSCENESTATE_STOPPED;
}
if (this->cutsceneState == ENSOB1_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookToShelfCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookToShelfCsId;
+ CutsceneManager_Queue(this->csId);
this->cutsceneState = ENSOB1_CUTSCENESTATE_WAITING;
} else if (this->cutsceneState == ENSOB1_CUTSCENESTATE_WAITING) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene) != 0) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->cutsceneState = ENSOB1_CUTSCENESTATE_PLAYING;
EnSob1_UpdateCursorPos(play, this);
EnSob1_SetupAction(this, EnSob1_BrowseShelf);
- func_80151938(play, this->items[this->cursorIndex]->actor.textId);
+ Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId);
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
}
}
@@ -884,7 +904,7 @@ s32 EnSob1_HasPlayerSelectedItem(PlayState* play, EnSob1* this, Input* input) {
if (EnSob1_TestItemSelected(play)) {
if (!item->isOutOfStock) {
this->prevActionFunc = this->actionFunc;
- func_80151938(play, this->items[this->cursorIndex]->choiceTextId);
+ Message_ContinueTextbox(play, this->items[this->cursorIndex]->choiceTextId);
play_sound(NA_SE_SY_DECIDE);
this->stickLeftPrompt.isEnabled = false;
this->stickRightPrompt.isEnabled = false;
@@ -913,12 +933,12 @@ void EnSob1_BrowseShelf(EnSob1* this, PlayState* play) {
this->stickLeftPrompt.isEnabled = true;
EnSob1_UpdateCursorPos(play, this);
if (talkState == TEXT_STATE_5) {
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
if (!EnSob1_HasPlayerSelectedItem(play, this, CONTROLLER1(&play->state))) {
EnSob1_CursorLeftRight(play, this);
cursorIndex = this->cursorIndex;
if (cursorIndex != prevCursorIndex) {
- func_80151938(play, this->items[cursorIndex]->actor.textId);
+ Message_ContinueTextbox(play, this->items[cursorIndex]->actor.textId);
play_sound(NA_SE_SY_CURSOR);
}
}
@@ -929,22 +949,22 @@ void EnSob1_BrowseShelf(EnSob1* this, PlayState* play) {
void EnSob1_SetupBuyItemWithFanfare(PlayState* play, EnSob1* this) {
Player* player = GET_PLAYER(play);
- Actor_PickUp(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f);
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
- player->stateFlags2 &= ~0x20000000;
+ player->stateFlags2 &= ~PLAYER_STATE2_20000000;
Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
this->drawCursor = 0;
EnSob1_SetupAction(this, EnSob1_BuyItemWithFanfare);
}
void EnSob1_SetupCannotBuy(PlayState* play, EnSob1* this, u16 textId) {
- func_80151938(play, textId);
+ Message_ContinueTextbox(play, textId);
EnSob1_SetupAction(this, EnSob1_CannotBuy);
}
void EnSob1_SetupCanBuy(PlayState* play, EnSob1* this, u16 textId) {
- func_80151938(play, textId);
+ Message_ContinueTextbox(play, textId);
EnSob1_SetupAction(this, EnSob1_CanBuy);
}
@@ -955,7 +975,7 @@ void EnSob1_HandleCanBuyItem(PlayState* play, EnSob1* this) {
switch (item->canBuyFunc(play, item)) {
case CANBUY_RESULT_SUCCESS_1:
if (this->cutsceneState == ENSOB1_CUTSCENESTATE_PLAYING) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->cutsceneState = ENSOB1_CUTSCENESTATE_STOPPED;
}
func_8019F208();
@@ -1021,7 +1041,7 @@ void EnSob1_SelectItem(EnSob1* this, PlayState* play) {
u8 talkState = Message_GetState(&play->msgCtx);
if (EnSob1_TakeItemOffShelf(this) && (talkState == TEXT_STATE_CHOICE)) {
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
if (!EnSob1_TestCancelOption(this, play, CONTROLLER1(&play->state)) && Message_ShouldAdvance(play)) {
switch (play->msgCtx.choiceIndex) {
case 0:
@@ -1030,7 +1050,7 @@ void EnSob1_SelectItem(EnSob1* this, PlayState* play) {
case 1:
func_8019F230();
this->actionFunc = this->prevActionFunc;
- func_80151938(play, this->items[this->cursorIndex]->actor.textId);
+ Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId);
break;
}
}
@@ -1041,7 +1061,7 @@ void EnSob1_CannotBuy(EnSob1* this, PlayState* play) {
if (Message_GetState(&play->msgCtx) == TEXT_STATE_5) {
if (Message_ShouldAdvance(play)) {
this->actionFunc = this->prevActionFunc;
- func_80151938(play, this->items[this->cursorIndex]->actor.textId);
+ Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId);
}
}
}
@@ -1055,7 +1075,7 @@ void EnSob1_CanBuy(EnSob1* this, PlayState* play) {
item = this->items[this->cursorIndex];
item->restockFunc(play, item);
this->actionFunc = this->prevActionFunc;
- func_80151938(play, this->items[this->cursorIndex]->actor.textId);
+ Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId);
}
}
@@ -1064,7 +1084,7 @@ void EnSob1_BuyItemWithFanfare(EnSob1* this, PlayState* play) {
this->actor.parent = NULL;
EnSob1_SetupAction(this, EnSob1_SetupItemPurchased);
} else {
- Actor_PickUp(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f);
}
}
@@ -1074,13 +1094,13 @@ void EnSob1_SetupItemPurchased(EnSob1* this, PlayState* play) {
play->msgCtx.stateTimer = 4;
EnSob1_SetupAction(this, EnSob1_ItemPurchased);
if (this->cutsceneState == ENSOB1_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookToShopkeeperCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookToShopkeeperCsId;
+ CutsceneManager_Queue(this->csId);
}
- func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
}
}
@@ -1093,10 +1113,10 @@ void EnSob1_ContinueShopping(EnSob1* this, PlayState* play) {
item = this->items[this->cursorIndex];
item->restockFunc(play, item);
player->actor.shape.rot.y += 0x8000;
- player->stateFlags2 |= 0x20000000;
+ player->stateFlags2 |= PLAYER_STATE2_20000000;
Message_StartTextbox(play, this->welcomeTextId, &this->actor);
EnSob1_SetupStartShopping(play, this, true);
- func_800B85E0(&this->actor, play, 200.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1);
}
}
@@ -1266,13 +1286,13 @@ s16 EnSob1_GetDistSqAndOrient(Path* path, s32 pointIndex, Vec3f* pos, f32* distS
diffZ = 0.0f;
}
*distSq = SQ(diffX) + SQ(diffZ);
- return RADF_TO_BINANG(Math_Acot2F(diffZ, diffX));
+ return RAD_TO_BINANG(Math_Atan2F_XY(diffZ, diffX));
}
void EnSob1_GetCutscenes(EnSob1* this) {
- this->lookFowardCutscene = this->actor.cutscene;
- this->lookToShelfCutscene = ActorCutscene_GetAdditionalCutscene(this->lookFowardCutscene);
- this->lookToShopkeeperCutscene = ActorCutscene_GetAdditionalCutscene(this->lookToShelfCutscene);
+ this->lookFowardCsId = this->actor.csId;
+ this->lookToShelfCsId = CutsceneManager_GetAdditionalCsId(this->lookFowardCsId);
+ this->lookToShopkeeperCsId = CutsceneManager_GetAdditionalCsId(this->lookToShelfCsId);
}
void EnSob1_WaitForBlink(EnSob1* this) {
@@ -1361,13 +1381,13 @@ void EnSob1_InitShop(EnSob1* this, PlayState* play) {
this->actor.world.pos.y += posOffset->y;
this->actor.world.pos.z += posOffset->z;
shopItems = sShops[this->shopType];
- if ((this->shopType == BOMB_SHOP) && (gSaveContext.save.weekEventReg[33] & 8)) {
+ if ((this->shopType == BOMB_SHOP) && CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) {
sShops[this->shopType][0].shopItemId = SI_BOMB_BAG_30_2;
}
this->cutsceneState = ENSOB1_CUTSCENESTATE_STOPPED;
EnSob1_GetCutscenes(this);
- this->cutscene = this->lookFowardCutscene;
+ this->csId = this->lookFowardCsId;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f);
sInitFuncs[this->shopType](this, play);
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
@@ -1611,13 +1631,12 @@ void EnSob1_BombShopkeeper_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dL
}
Gfx* EnSob1_EndDList(GraphicsContext* gfxCtx) {
- Gfx* dList;
- Gfx* dListHead;
+ Gfx* gfxHead = GRAPH_ALLOC(gfxCtx, sizeof(Gfx));
+ Gfx* gfx = gfxHead;
- dList = dListHead = GRAPH_ALLOC(gfxCtx, sizeof(Gfx) * 2);
- gSPEndDisplayList(dListHead++);
+ gSPEndDisplayList(gfx++);
- return dList;
+ return gfxHead;
}
void EnSob1_ZoraShopkeeper_Draw(Actor* thisx, PlayState* play) {
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 6cb615d6f..1509868ee 100644
--- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.h
+++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.h
@@ -60,10 +60,10 @@ typedef struct EnSob1 {
/* 0x39C */ u8 arrowAnimState;
/* 0x39D */ u8 stickAnimState;
/* 0x39E */ s16 cutsceneState;
- /* 0x3A0 */ s16 cutscene;
- /* 0x3A2 */ s16 lookFowardCutscene;
- /* 0x3A4 */ s16 lookToShelfCutscene;
- /* 0x3A6 */ s16 lookToShopkeeperCutscene;
+ /* 0x3A0 */ s16 csId;
+ /* 0x3A2 */ s16 lookFowardCsId;
+ /* 0x3A4 */ s16 lookToShelfCsId;
+ /* 0x3A6 */ s16 lookToShopkeeperCsId;
/* 0x3A8 */ UNK_TYPE1 pad3A8[0x4];
/* 0x3AC */ f32 shopItemSelectedTween;
/* 0x3B0 */ UNK_TYPE1 pad3B0[0x4];
@@ -88,6 +88,4 @@ typedef enum {
/* 2 */ ENSOB1_CUTSCENESTATE_PLAYING
} EnSob1CutsceneState;
-extern const ActorInit En_Sob1_InitVars;
-
#endif // Z_EN_SOB1_H
diff --git a/src/overlays/actors/ovl_En_Ssh/overlay.cfg b/src/overlays/actors/ovl_En_Ssh/overlay.cfg
deleted file mode 100644
index f8a88c0be..000000000
--- a/src/overlays/actors/ovl_En_Ssh/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Ssh
-z_en_ssh.c
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 408ca1b2f..71eade542 100644
--- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c
+++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c
@@ -25,7 +25,7 @@ void EnSsh_Start(EnSsh* this, PlayState* play);
extern AnimationHeader D_06000304;
-const ActorInit En_Ssh_InitVars = {
+ActorInit En_Ssh_InitVars = {
ACTOR_EN_SSH,
ACTORCAT_NPC,
FLAGS,
@@ -228,7 +228,7 @@ void EnSsh_SetWaitAnimation(EnSsh* this) {
}
void EnSsh_SetReturnAnimation(EnSsh* this) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALTU_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALTU_UP);
EnSsh_ChangeAnim(this, SSH_ANIM_UP);
}
@@ -282,7 +282,7 @@ void EnSsh_SetColliderScale(EnSsh* this, f32 arg1, f32 arg2) {
s32 EnSsh_Damaged(EnSsh* this) {
if ((this->stunTimer == 120) && (this->stateFlags & SSH_STATE_STUNNED)) {
- Actor_SetColorFilter(&this->actor, 0, 200, 0, this->stunTimer);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 200, COLORFILTER_BUFFLAG_OPA, this->stunTimer);
}
if (DECR(this->stunTimer) != 0) {
@@ -297,8 +297,8 @@ s32 EnSsh_Damaged(EnSsh* this) {
this->spinTimer = 30;
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALTU_ROLL);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_ST_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALTU_ROLL);
+ Actor_PlaySfx(&this->actor, NA_SE_VO_ST_ATTACK);
return true;
}
@@ -419,7 +419,7 @@ void EnSsh_Sway(EnSsh* this) {
}
temp_f20 = (this->swayTimer * (1.0f / 6));
- swayAngle = Math_SinS(this->swayAngle) * (temp_f20 * (0x10000 / 360.0f));
+ swayAngle = (f32)DEG_TO_BINANG_ALT3(temp_f20) * Math_SinS(this->swayAngle);
temp_f20 = this->actor.world.pos.y - this->ceilingPos.y;
swayVecBase.x = Math_SinS(swayAngle) * temp_f20;
@@ -428,7 +428,7 @@ void EnSsh_Sway(EnSsh* this) {
Matrix_Push();
Matrix_Translate(this->ceilingPos.x, this->ceilingPos.y, this->ceilingPos.z, MTXMODE_NEW);
- Matrix_RotateYF(this->actor.world.rot.y * (M_PI / 0x8000), MTXMODE_APPLY);
+ Matrix_RotateYF(BINANG_TO_RAD(this->actor.world.rot.y), MTXMODE_APPLY);
Matrix_MultVec3f(&swayVecBase, &swayVec);
Matrix_Pop();
@@ -477,8 +477,8 @@ s32 EnSsh_CheckHitPlayer(EnSsh* this, PlayState* play) {
this->spinTimer = this->hitTimer;
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALTU_ROLL);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_ST_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALTU_ROLL);
+ Actor_PlaySfx(&this->actor, NA_SE_VO_ST_ATTACK);
play->damagePlayer(play, -8);
@@ -532,8 +532,8 @@ s32 EnSsh_CheckHitBack(EnSsh* this, PlayState* play) {
}
if (this->stunTimer == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_ST_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_PlaySfx(&this->actor, NA_SE_VO_ST_DAMAGE);
}
EnSsh_SetStunned(this);
@@ -553,8 +553,8 @@ s32 EnSsh_CollisionCheck(EnSsh* this, PlayState* play) {
if (play->actorCtx.unk2 != 0) {
this->invincibilityTimer = 8;
if (this->stunTimer == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_ST_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_PlaySfx(&this->actor, NA_SE_VO_ST_DAMAGE);
}
EnSsh_SetStunned(this);
this->stateFlags |= SSH_STATE_STUNNED;
@@ -595,7 +595,7 @@ s32 EnSsh_SetCylinderOC(EnSsh* this, PlayState* play) {
Matrix_Push();
Matrix_Translate(colliderPos.x, colliderPos.y, colliderPos.z, MTXMODE_NEW);
- Matrix_RotateYF(BINANG_TO_RAD(this->initialYaw), MTXMODE_APPLY);
+ Matrix_RotateYF(BINANG_TO_RAD_ALT(this->initialYaw), MTXMODE_APPLY);
Matrix_MultVec3f(&colliderOffsets[i], &colliderPos);
Matrix_Pop();
@@ -654,8 +654,8 @@ void EnSsh_Init(Actor* thisx, PlayState* play) {
this->actor.gravity = 0.0f;
this->initialYaw = this->actor.world.rot.y;
EnSsh_SetupAction(this, EnSsh_Start);
- if (Inventory_GetSkullTokenCount(play->sceneId) >= 30) {
- Actor_MarkForDeath(&this->actor);
+ if (Inventory_GetSkullTokenCount(play->sceneId) >= SPIDER_HOUSE_TOKENS_REQUIRED) {
+ Actor_Kill(&this->actor);
}
}
@@ -686,19 +686,19 @@ void EnSsh_Talk(EnSsh* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
switch (play->msgCtx.currentTextId) {
- case 0x904:
- case 0x905:
- case 0x906:
- case 0x908:
- case 0x910:
- case 0x911:
- case 0x912:
- case 0x914:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ case 0x904: // (does not exist)
+ case 0x905: // (does not exist)
+ case 0x906: // (does not exist)
+ case 0x908: // (does not exist)
+ case 0x910: // Help me! I am not a monster, I was cursed this way
+ case 0x911: // Find all in here and defeat them
+ case 0x912: // Don't forget to collect their token
+ case 0x914: // In here, cursed spiders, defeat them to make me normal
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
- default:
- func_801477B4(play);
+ default: // intended case 0x915 from above (914+1)
+ Message_CloseTextbox(play);
this->actionFunc = EnSsh_Idle;
break;
}
@@ -706,15 +706,15 @@ void EnSsh_Talk(EnSsh* this, PlayState* play) {
}
void func_809756D0(EnSsh* this, PlayState* play) {
- u16 phi_a1;
+ u16 nextTextId;
- if (gSaveContext.save.weekEventReg[34] & 8) {
- phi_a1 = 0x914;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_SWAMP_SPIDER_HOUSE_TALKED)) {
+ nextTextId = 0x914; // In here, cursed spiders, defeat them to make me normal
} else {
- phi_a1 = 0x910;
- gSaveContext.save.weekEventReg[34] |= 8;
+ nextTextId = 0x910; // Help me! I am not a monster, I was cursed this way
+ SET_WEEKEVENTREG(WEEKEVENTREG_SWAMP_SPIDER_HOUSE_TALKED);
}
- Message_StartTextbox(play, phi_a1, &this->actor);
+ Message_StartTextbox(play, nextTextId, &this->actor);
}
void EnSsh_Idle(EnSsh* this, PlayState* play) {
@@ -739,7 +739,7 @@ void EnSsh_Idle(EnSsh* this, PlayState* play) {
}
if (DECR(this->sfxTimer) == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALTU_LAUGH);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALTU_LAUGH);
this->sfxTimer = 64;
}
@@ -780,7 +780,7 @@ void EnSsh_Drop(EnSsh* this, PlayState* play) {
EnSsh_SetLandAnimation(this);
EnSsh_SetupAction(this, EnSsh_Land);
} else if (DECR(this->sfxTimer) == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALTU_DOWN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALTU_DOWN);
this->sfxTimer = 3;
}
}
@@ -849,7 +849,7 @@ void EnSsh_Update(Actor* thisx, PlayState* play) {
} else {
SkelAnime_Update(&this->skelAnime);
Actor_UpdatePos(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
this->actionFunc(this, play);
}
diff --git a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.h b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.h
index 72a82e692..6f19a5e51 100644
--- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.h
+++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.h
@@ -2,6 +2,8 @@
#define Z_EN_SSH_H
#include "global.h"
+#include "overlays/actors/ovl_En_Si/z_en_si.h"
+#include "overlays/actors/ovl_En_Sth/z_en_sth.h"
struct EnSsh;
@@ -56,6 +58,4 @@ typedef struct EnSsh {
/* 0x5C8 */ s16 blinkTimer;
} EnSsh; // size = 0x5CC
-extern const ActorInit En_Ssh_InitVars;
-
#endif // Z_EN_SSH_H
diff --git a/src/overlays/actors/ovl_En_St/overlay.cfg b/src/overlays/actors/ovl_En_St/overlay.cfg
deleted file mode 100644
index b384f8265..000000000
--- a/src/overlays/actors/ovl_En_St/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_St
-z_en_st.c
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 ecc2b85b2..994a455a6 100644
--- a/src/overlays/actors/ovl_En_St/z_en_st.c
+++ b/src/overlays/actors/ovl_En_St/z_en_st.c
@@ -23,7 +23,7 @@ void func_808A6E24(EnSt* this, PlayState* play);
void func_808A701C(EnSt* this, PlayState* play);
void func_808A7478(Actor* thisx, PlayState* play);
-const ActorInit En_St_InitVars = {
+ActorInit En_St_InitVars = {
ACTOR_EN_ST,
ACTORCAT_ENEMY,
FLAGS,
@@ -348,7 +348,7 @@ s16 func_808A5BEC(EnSt* this) {
} else {
ret = this->actor.yawTowardsPlayer;
if (DECR(this->unk_30E) == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALTU_ROLL);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALTU_ROLL);
this->unk_18C ^= 2;
this->unk_310 = 8;
if (this->unk_18C & 1) {
@@ -456,7 +456,7 @@ void func_808A60E0(EnSt* this) {
if (sp1C == 1.0f) {
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex);
- Actor_PlaySfxAtPos(&this->actor, sfxId);
+ Actor_PlaySfx(&this->actor, sfxId);
}
this->unk_2D4 = (1.0f - sp1C) * sp20 * this->unk_2C8;
@@ -587,23 +587,26 @@ s32 func_808A6580(EnSt* this, PlayState* play) {
} else if (func_808A61F4(this)) {
switch (this->actor.colChkInfo.damageEffect) {
case 1:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
this->unk_312 = 40;
- Actor_SetColorFilter(&this->actor, 0, 200, 0, this->unk_312);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 200, COLORFILTER_BUFFLAG_OPA,
+ this->unk_312);
break;
case 5:
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL;
this->unk_312 = 40;
func_808A576C(this);
- Actor_SetColorFilter(&this->actor, 0, 200, 0, this->unk_312);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 200, COLORFILTER_BUFFLAG_OPA,
+ this->unk_312);
break;
default:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALTU_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALTU_DAMAGE);
this->unk_314 = 20;
this->unk_312 = 0;
- Actor_SetColorFilter(&this->actor, 0x4000, 200, 0, this->unk_314);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 200, COLORFILTER_BUFFLAG_OPA,
+ this->unk_314);
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 1);
this->unk_18C |= 8;
this->actionFunc = func_808A6D84;
@@ -652,7 +655,7 @@ s32 func_808A6580(EnSt* this, PlayState* play) {
}
this->unk_314 = 20;
this->unk_312 = 0;
- Actor_SetColorFilter(&this->actor, 0x4000, 200, 0, this->unk_314);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 200, COLORFILTER_BUFFLAG_OPA, this->unk_314);
ret = true;
}
this->unk_310 = 0;
@@ -663,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_PlaySfxAtPos(&sp3C->actor, NA_SE_PL_BODY_HIT);
+ Actor_PlaySfx(&sp3C->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;
@@ -699,7 +702,7 @@ void func_808A6A78(EnSt* this, PlayState* play) {
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
if (ENST_GET_1C0(&this->actor) == ENST_1C0_1) {
- this->actor.flags |= ACTOR_FLAG_80;
+ this->actor.flags |= ACTOR_FLAG_REACT_TO_LENS;
}
Actor_SetScale(&this->actor, 0.04f);
@@ -776,15 +779,15 @@ void func_808A6E24(EnSt* this, PlayState* play) {
this->unk_2CC = 0.0f;
this->unk_2D4 = 0.0f;
} else {
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->actor.shape.yOffset = 400.0f;
this->actor.world.rot.x = 0x4000;
this->actor.shape.rot.x = this->actor.world.rot.x;
this->unk_2D0 = this->actor.velocity.y = fabsf(this->actor.velocity.y) * 0.6f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if ((s32)this->unk_2D0 != 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EYEGOLE_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_ATTACK);
} else {
this->actor.velocity.y = 0.0f;
this->actionFunc = func_808A701C;
@@ -822,7 +825,7 @@ void func_808A701C(EnSt* this, PlayState* play) {
if (count == ARRAY_COUNT(this->unk_31C)) {
Item_DropCollectibleRandom(play, NULL, &this->actor.world.pos, 0);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else if (DECR(this->unk_318) == 0) {
this->unk_18C |= 0x40;
@@ -839,10 +842,11 @@ void EnSt_Init(Actor* thisx, PlayState* play) {
this->unk_2C0 = Object_GetIndex(&play->objectCtx, GAMEPLAY_KEEP);
if (((ENST_GET_3F(&this->actor) != ENST_3F_63) && Flags_GetSwitch(play, ENST_GET_3F(&this->actor))) ||
(this->unk_2C0 < 0)) {
- Actor_MarkForDeath(&this->actor);
- } else {
- this->actionFunc = func_808A6A78;
+ Actor_Kill(&this->actor);
+ return;
}
+
+ this->actionFunc = func_808A6A78;
}
void EnSt_Destroy(Actor* thisx, PlayState* play) {
@@ -863,8 +867,8 @@ void EnSt_Update(Actor* thisx, PlayState* play) {
return;
}
- if (!(this->actor.flags & ACTOR_FLAG_80) && func_808A6A3C(this)) {
- this->actor.flags |= ACTOR_FLAG_80;
+ if (!(this->actor.flags & ACTOR_FLAG_REACT_TO_LENS) && func_808A6A3C(this)) {
+ this->actor.flags |= ACTOR_FLAG_REACT_TO_LENS;
}
if (func_808A6580(this, play)) {
@@ -874,7 +878,7 @@ void EnSt_Update(Actor* thisx, PlayState* play) {
if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
SkelAnime_Update(&this->skelAnime);
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
} else if (this->unk_312 < 20) {
s16 idx = (this->unk_312 % 2) ? -1 : 1;
diff --git a/src/overlays/actors/ovl_En_St/z_en_st.h b/src/overlays/actors/ovl_En_St/z_en_st.h
index d5ca31f2c..5c63a9664 100644
--- a/src/overlays/actors/ovl_En_St/z_en_st.h
+++ b/src/overlays/actors/ovl_En_St/z_en_st.h
@@ -48,6 +48,4 @@ typedef struct EnSt {
/* 0x49C */ Vec3s morphTable[30];
} EnSt; // size = 0x550
-extern const ActorInit En_St_InitVars;
-
#endif // Z_EN_ST_H
diff --git a/src/overlays/actors/ovl_En_Sth/overlay.cfg b/src/overlays/actors/ovl_En_Sth/overlay.cfg
deleted file mode 100644
index 9420fb8f1..000000000
--- a/src/overlays/actors/ovl_En_Sth/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Sth
-z_en_sth.c
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 1d9ddf4e9..f10d387d1 100644
--- a/src/overlays/actors/ovl_En_Sth/z_en_sth.c
+++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.c
@@ -1,13 +1,13 @@
/*
* File: z_en_sth.c
* Overlay: ovl_En_Sth
- * Description: Guy looking at moon in South Clock Town
+ * Description: Guy looking at moon in South Clock Town,
+ * And the Cured Swamp Spider House man who gives you Mask of Truth
+ * (the cursed version is EnSsh)
+ * And the man who wants to buy Oceanside Spider House from you with rupees or Wallet
*/
#include "z_en_sth.h"
-#include "objects/object_sth/object_sth.h"
-#include "objects/object_ahg/object_ahg.h"
-#include "objects/object_mask_truth/object_mask_truth.h"
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8)
@@ -15,19 +15,19 @@
void EnSth_Init(Actor* thisx, PlayState* play);
void EnSth_Destroy(Actor* thisx, PlayState* play);
+void EnSth_UpdateWaitForObject(Actor* thisx, PlayState* play);
+
+void EnSth_PanicIdle(EnSth* this, PlayState* play);
+void EnSth_HandleOceansideSpiderHouseConversation(EnSth* this, PlayState* play);
+void EnSth_OceansideSpiderHouseIdle(EnSth* this, PlayState* play);
+void EnSth_MoonLookingIdle(EnSth* this, PlayState* play);
+void EnSth_DefaultIdle(EnSth* this, PlayState* play);
+void EnSth_HandleSwampSpiderHouseConversation(EnSth* this, PlayState* play);
+void EnSth_SwampSpiderHouseIdle(EnSth* this, PlayState* play);
void EnSth_Update(Actor* thisx, PlayState* play);
+void EnSth_Draw(Actor* thisx, PlayState* play);
-void func_80B67208(EnSth* this, PlayState* play);
-void func_80B67540(EnSth* this, PlayState* play);
-void func_80B677BC(EnSth* this, PlayState* play);
-void func_80B678A8(EnSth* this, PlayState* play);
-void func_80B67958(EnSth* this, PlayState* play);
-void func_80B67C1C(EnSth* this, PlayState* play);
-void func_80B67DA0(EnSth* this, PlayState* play);
-void func_80B680A8(Actor* thisx, PlayState* play);
-void func_80B6849C(Actor* thisx, PlayState* play);
-
-const ActorInit En_Sth_InitVars = {
+ActorInit En_Sth_InitVars = {
ACTOR_EN_STH,
ACTORCAT_NPC,
FLAGS,
@@ -35,7 +35,7 @@ const ActorInit En_Sth_InitVars = {
sizeof(EnSth),
(ActorFunc)EnSth_Init,
(ActorFunc)EnSth_Destroy,
- (ActorFunc)EnSth_Update,
+ (ActorFunc)EnSth_UpdateWaitForObject,
(ActorFunc)NULL,
};
@@ -61,21 +61,48 @@ static ColliderCylinderInit sCylinderInit = {
{ 30, 40, 0, { 0, 0, 0 } },
};
-AnimationHeader* D_80B6D1C8[] = {
- &ovl_En_Sth_Anim_003F50, &ovl_En_Sth_Anim_0045B4, &ovl_En_Sth_Anim_004CC0, &ovl_En_Sth_Anim_00533C,
- &ovl_En_Sth_Anim_0059B8, &ovl_En_Sth_Anim_005E40, &ovl_En_Sth_Anim_006354, &ovl_En_Sth_Anim_00645C,
+typedef enum {
+ /* 0 */ STH_ANIM_SIGNALLING, // default, waving arms at you from telescope, OOT: cured happy animation
+ /* 1 */ STH_ANIM_BENDING_DOWN, // default anim of cured spider house, but never seen before wait overrides it
+ /* 2 */ STH_ANIM_TALK,
+ /* 3 */ STH_ANIM_WAIT,
+ /* 4 */ STH_ANIM_LOOK_UP, // South Clock Town, looking at moon
+ /* 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
+} EnSthAnimation;
+
+static AnimationHeader* sAnimationInfo[] = {
+ &gEnSthSignalAnim, &gEnSthBendDownAnim, &gEnSthTalkWithHandUpAnim, &gEnSthWaitAnim,
+ &gEnSthLookUpAnim, &gEnSthLookAroundAnim, &gEnSthPleadAnim, &gEnSthPanicAnim,
};
-u16 D_80B6D1E8[] = { 0x1144, 0x1145, 0x1146 };
+// three slightly different variants of "Only a little time left, oh goddess please save me"
+static u16 sSthOceanspiderhousePanicText[] = { 0x1144, 0x1145, 0x1146 };
-u16 D_80B6D1F0[] = { 0x1139, 0x113E, 0x1143 };
+static u16 sSthFirstOceansideSpiderHouseGreet2TextIds[] = {
+ 0x1139, // I thought I heard noises... I'm glad I found it early
+ 0x113E, // I had no idea this place was here, perhaps it can keep me safe
+ 0x1143 // There's no time we have to hide!
+};
-u16 D_80B6D1F8[] = { 0x1132, 0x113A, 0x113F };
+static u16 sSthFirstOceansideSpiderHouseGreet1TextIds[] = {
+ 0x1132, // I thought I heard some noise.. is this some sort of underground shelter?
+ 0x113A, // I had no idea there was a basement here..
+ 0x113F // I heard loud noises.. I never thought I'd find a place like this..
+};
-Vec3f D_80B6D200 = { 700.0f, 400.0f, 0.0f };
+static Vec3f sFocusOffset = { 700.0f, 400.0f, 0.0f };
-Color_RGB8 D_80B6D20C[] = {
- { 190, 110, 0 }, { 0, 180, 110 }, { 0, 255, 0x50 }, { 255, 160, 60 }, { 190, 230, 250 }, { 240, 230, 120 },
+// Sth is hardcoded to only use element [1].
+static Color_RGB8 sShirtColors[] = {
+ { 190, 110, 0 }, // darker orange
+ { 0, 180, 110 }, // green
+ { 0, 255, 80 }, // lime green
+ { 255, 160, 60 }, // brighter orange
+ { 190, 230, 250 }, // white
+ { 240, 230, 120 }, // pale yellow
};
void EnSth_Init(Actor* thisx, PlayState* play) {
@@ -83,82 +110,88 @@ void EnSth_Init(Actor* thisx, PlayState* play) {
EnSth* this = THIS;
s32 objectId;
- if (ENSTH_GET_100(&this->actor)) {
+ // this actor can draw two separate bodies that use different objects
+ if (STH_GET_SWAMP_BODY(&this->actor)) {
objectId = Object_GetIndex(&play->objectCtx, OBJECT_AHG);
} else {
objectId = Object_GetIndex(&play->objectCtx, OBJECT_STH);
}
- this->unk_29E = objectId;
- this->unk_29F = Object_GetIndex(&play->objectCtx, OBJECT_MASK_TRUTH);
+ this->mainObjectId = objectId;
+ this->maskOfTruthObjectId = Object_GetIndex(&play->objectCtx, OBJECT_MASK_TRUTH);
Actor_SetScale(&this->actor, 0.01f);
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f);
- this->unk_29C = 0;
- this->unk_29A = 8;
+ this->sthFlags = 0; // clear
+ this->animIndex = STH_ANIM_START;
this->actor.terminalVelocity = -9.0f;
this->actor.gravity = -1.0f;
- switch (ENSTH_GET_F(&this->actor)) {
- case ENSTH_F_1:
+ switch (STH_GET_TYPE(&this->actor)) {
+ case STH_TYPE_UNUSED_1:
if (play->actorCtx.flags & ACTORCTX_FLAG_1) {
this->actor.flags |= (ACTOR_FLAG_10 | ACTOR_FLAG_20);
- this->actionFunc = func_80B67958;
+ this->actionFunc = EnSth_DefaultIdle;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
break;
- case ENSTH_F_2:
- if (Inventory_GetSkullTokenCount(play->sceneId) >= 30) {
- this->actionFunc = func_80B67DA0;
+ case STH_TYPE_SWAMP_SPIDER_HOUSE_CURED:
+ if (Inventory_GetSkullTokenCount(play->sceneId) >= SPIDER_HOUSE_TOKENS_REQUIRED) {
+ this->actionFunc = EnSth_SwampSpiderHouseIdle;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
this->actor.textId = 0;
- if (!(gSaveContext.save.weekEventReg[34] & 0x40) || !(gSaveContext.save.weekEventReg[34] & 8)) {
- this->unk_29C |= 1;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_MASK_OF_TRUTH) ||
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_SWAMP_SPIDER_HOUSE_TALKED)) {
+ this->sthFlags |= STH_FLAG_DRAW_MASK_OF_TRUTH;
}
break;
- case ENSTH_F_3:
- if ((gSaveContext.save.skullTokenCount & 0xFFFF) >= 30) {
- Actor_MarkForDeath(&this->actor);
+ case STH_TYPE_MOON_LOOKING: // South Clock Town
+ if ((gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF) >= SPIDER_HOUSE_TOKENS_REQUIRED) {
+ Actor_Kill(&this->actor);
return;
}
- this->actionFunc = func_80B678A8;
- this->unk_29C |= 8;
+
+ this->actionFunc = EnSth_MoonLookingIdle;
+ this->sthFlags |= STH_FLAG_DISABLE_HEAD_TRACK;
this->actor.targetMode = 3;
this->actor.uncullZoneForward = 800.0f;
break;
- case ENSTH_F_4:
- if (gSaveContext.save.weekEventReg[13] & 0x20) {
- Actor_MarkForDeath(&this->actor);
+ case STH_TYPE_OCEANSIDE_SPIDER_HOUSE_GREET:
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_OCEANSIDE_SPIDER_HOUSE_BUYER_MOVED_IN)) {
+ // The player has already exited the house after complete; EnSth has moved deeper into the house.
+ Actor_Kill(&this->actor);
return;
}
this->actor.textId = 0;
- this->actionFunc = func_80B677BC;
- if (gSaveContext.save.weekEventReg[13] & 0x80) {
- this->unk_29C |= 2;
+ this->actionFunc = EnSth_OceansideSpiderHouseIdle;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_OCEANSIDE_SPIDER_HOUSE_COLLECTED_REWARD)) {
+ this->sthFlags |= STH_FLAG_OCEANSIDE_SPIDER_HOUSE_GREET;
}
break;
- case ENSTH_F_5:
- if (!(gSaveContext.save.weekEventReg[13] & 0x20) || (Inventory_GetSkullTokenCount(play->sceneId) < 30)) {
- Actor_MarkForDeath(&this->actor);
+ case STH_TYPE_OCEANSIDE_SPIDER_HOUSE_PANIC:
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_OCEANSIDE_SPIDER_HOUSE_BUYER_MOVED_IN) ||
+ (Inventory_GetSkullTokenCount(play->sceneId) < SPIDER_HOUSE_TOKENS_REQUIRED)) {
+ // Has not moved in, and has not completed the house; do NOT spawn yet.
+ Actor_Kill(&this->actor);
return;
}
- this->actionFunc = func_80B67208;
+ this->actionFunc = EnSth_PanicIdle;
this->actor.textId = 0;
- this->unk_29C |= 8;
+ this->sthFlags |= STH_FLAG_DISABLE_HEAD_TRACK;
break;
default:
- this->actionFunc = func_80B67958;
+ this->actionFunc = EnSth_DefaultIdle;
break;
}
}
@@ -169,142 +202,144 @@ void EnSth_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->collider);
}
-s32 func_80B6703C(EnSth* this, PlayState* play) {
+s32 EnSth_CanSpeakToPlayer(EnSth* this, PlayState* play) {
if ((this->actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->actor, 0x3000, play) &&
Actor_IsFacingPlayer(&this->actor, 0x2000)) {
return true;
- }
- return false;
-}
-
-void func_80B670A4(EnSth* this, s16 arg1) {
- if ((arg1 >= 0) && (arg1 < ARRAY_COUNT(D_80B6D1C8)) && (arg1 != this->unk_29A)) {
- Animation_Change(&this->skelAnime, D_80B6D1C8[arg1], 1.0f, 0.0f, Animation_GetLastFrame(D_80B6D1C8[arg1]),
- ANIMMODE_LOOP, -5.0f);
- this->unk_29A = arg1;
+ } else {
+ return false;
}
}
-void func_80B67148(EnSth* this, PlayState* play) {
+void EnSth_ChangeAnim(EnSth* this, s16 animIndex) {
+ if ((animIndex >= 0) && (animIndex < ARRAY_COUNT(sAnimationInfo)) && (animIndex != this->animIndex)) {
+ Animation_Change(&this->skelAnime, sAnimationInfo[animIndex], 1.0f, 0.0f,
+ Animation_GetLastFrame(sAnimationInfo[animIndex]), ANIMMODE_LOOP, -5.0f);
+ this->animIndex = animIndex;
+ }
+}
+
+void EnSth_GetInitialPanicText(EnSth* this, PlayState* play) {
s32 day = CURRENT_DAY - 1;
- u16 val;
+ u16 nextTextId;
if (day < 0) {
day = 0;
}
- val = D_80B6D1E8[day];
+ nextTextId = sSthOceanspiderhousePanicText[day];
- Message_StartTextbox(play, val, &this->actor);
+ Message_StartTextbox(play, nextTextId, &this->actor);
}
-void func_80B671A0(EnSth* this, PlayState* play) {
+void EnSth_HandlePanicConversation(EnSth* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- this->actionFunc = func_80B67208;
- func_801477B4(play);
+ this->actionFunc = EnSth_PanicIdle;
+ Message_CloseTextbox(play);
}
}
-void func_80B67208(EnSth* this, PlayState* play) {
+void EnSth_PanicIdle(EnSth* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- func_80B67148(this, play);
- this->actionFunc = func_80B671A0;
+ EnSth_GetInitialPanicText(this, play);
+ this->actionFunc = EnSth_HandlePanicConversation;
} else if ((this->actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->actor, 0x3000, play)) {
func_800B8614(&this->actor, play, 110.0f);
}
}
-void func_80B672A4(EnSth* this, PlayState* play) {
- u16 sp1E;
+void EnSth_GetInitialOceansideSpiderHouseText(EnSth* this, PlayState* play) {
+ u16 nextTextId;
s32 day = CURRENT_DAY - 1;
if (day < 0) {
day = 0;
}
- if (this->unk_29C & 2) {
+ if (this->sthFlags & STH_FLAG_OCEANSIDE_SPIDER_HOUSE_GREET) {
s32 pad;
- sp1E = D_80B6D1F0[day];
+ nextTextId = sSthFirstOceansideSpiderHouseGreet2TextIds[day];
if (day == 2) {
- func_80B670A4(this, 5);
+ EnSth_ChangeAnim(this, STH_ANIM_LOOK_AROUND);
}
} else {
- sp1E = D_80B6D1F8[day];
+ nextTextId = sSthFirstOceansideSpiderHouseGreet1TextIds[day];
}
- Message_StartTextbox(play, sp1E, &this->actor);
+ Message_StartTextbox(play, nextTextId, &this->actor);
}
-void func_80B67348(EnSth* this, PlayState* play) {
- u16 phi_a1;
+void EnSth_PostOceanspiderhouseReward(EnSth* this, PlayState* play) {
+ u16 nextTextId;
SkelAnime_Update(&this->skelAnime);
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->actor.flags &= ~ACTOR_FLAG_10000;
- this->actionFunc = func_80B67540;
+ this->actionFunc = EnSth_HandleOceansideSpiderHouseConversation;
- switch (this->actor.home.rot.z) {
- case 8:
- case 9:
- phi_a1 = 0x1137;
+ switch (STH_GI_ID(&this->actor)) {
+ case GI_WALLET_ADULT:
+ case GI_WALLET_GIANT:
+ nextTextId = 0x1137; // I'm just glad it was something you needed
break;
- case 6:
- phi_a1 = 0x1138;
+ case GI_RUPEE_SILVER:
+ // unused code, as he only gives wallet, purple and red, silver is never assigned to STH_GI_ID
+ nextTextId = 0x1138; // That's my life's fortune
break;
- case 5:
- if (gSaveContext.save.weekEventReg[13] & 0x40) {
- phi_a1 = 0x113D;
+ case GI_RUPEE_PURPLE:
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_OCEANSIDE_WALLET_UPGRADE)) {
+ nextTextId = 0x113D; // That's my life's savings
} else {
- phi_a1 = 0x113C;
+ nextTextId = 0x113C; // That's my life's savings (2)
}
break;
default:
- if (gSaveContext.save.weekEventReg[13] & 0x40) {
- phi_a1 = 0x1142;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_OCEANSIDE_WALLET_UPGRADE)) {
+ nextTextId = 0x1142; // Well, thats all I have on me
} else {
- phi_a1 = 0x1141;
+ nextTextId = 0x1141; // Well, thats all I have on me
}
break;
}
- Message_StartTextbox(play, phi_a1, &this->actor);
+ Message_StartTextbox(play, nextTextId, &this->actor);
} else {
- func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1);
}
}
-void func_80B67458(EnSth* this, PlayState* play) {
+void EnSth_GiveOceansideSpiderHouseReward(EnSth* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL;
- this->actionFunc = func_80B67348;
+ this->actionFunc = EnSth_PostOceanspiderhouseReward;
this->actor.flags |= ACTOR_FLAG_10000;
- func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1);
if (CURRENT_DAY == 3) {
- func_80B670A4(this, 6);
+ EnSth_ChangeAnim(this, STH_ANIM_PLEAD);
} else {
- func_80B670A4(this, 3);
+ EnSth_ChangeAnim(this, STH_ANIM_WAIT);
}
} else {
- Actor_PickUp(&this->actor, play, this->actor.home.rot.z, 10000.0f, 500.0f);
+ Actor_OfferGetItem(&this->actor, play, STH_GI_ID(&this->actor), 10000.0f, 500.0f);
}
}
-void func_80B67540(EnSth* this, PlayState* play) {
- s32 sp2C = CURRENT_DAY - 1;
+void EnSth_HandleOceansideSpiderHouseConversation(EnSth* this, PlayState* play) {
+ s32 day = CURRENT_DAY - 1;
- if (sp2C < 0) {
- sp2C = 0;
+ if (day < 0) {
+ day = 0;
}
- if (this->unk_29A == 6) {
+ if (this->animIndex == STH_ANIM_PLEAD) {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 2, 0x1000, 0x200);
this->actor.world.rot.y = this->actor.shape.rot.y;
}
@@ -315,374 +350,397 @@ void func_80B67540(EnSth* this, PlayState* play) {
case TEXT_STATE_5:
if (Message_ShouldAdvance(play)) {
switch (play->msgCtx.currentTextId) {
- case 0x1134:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ case 0x1134: // (does not exist)
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
- case 0x1132:
- case 0x113A:
- case 0x113F:
- func_80151938(play, 0x1133);
+ case 0x1132: // Heard noise, came in to see
+ case 0x113A: // Had no idea there was a basement here
+ case 0x113F: // Heard noise... I never thought I'd find a place like this
+ Message_ContinueTextbox(play, 0x1133); // did you find this place?
break;
- case 0x1133:
- func_80151938(play, 0x1136);
- func_80B670A4(this, 6);
+ case 0x1133: // did you find this place?
+ Message_ContinueTextbox(play, 0x1136); // I want to buy this place from you
+ EnSth_ChangeAnim(this, STH_ANIM_PLEAD);
break;
- case 0x1136:
- gSaveContext.save.weekEventReg[13] |= 0x80;
+ case 0x1136: // I want to buy this house from you
+ // This flag prevents multiple rewards, switching to secondary dialogue after
+ SET_WEEKEVENTREG(WEEKEVENTREG_OCEANSIDE_SPIDER_HOUSE_COLLECTED_REWARD);
- switch (sp2C) {
- case 0:
- if (gSaveContext.save.weekEventReg[13] & 0x40) {
- this->actor.home.rot.z = 6;
+ switch (day) {
+ case 0: // first day
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_OCEANSIDE_WALLET_UPGRADE)) {
+ STH_GI_ID(&this->actor) = GI_RUPEE_SILVER;
} else {
- gSaveContext.save.weekEventReg[13] |= 0x40;
+ // This flag prevents getting two wallets from the same place.
+ // Instead, getting silver rupee above.
+ SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_OCEANSIDE_WALLET_UPGRADE);
switch (CUR_UPG_VALUE(UPG_WALLET)) {
case 0:
- this->actor.home.rot.z = 8;
+ STH_GI_ID(&this->actor) = GI_WALLET_ADULT;
break;
case 1:
- this->actor.home.rot.z = 9;
+ STH_GI_ID(&this->actor) = GI_WALLET_GIANT;
break;
}
}
break;
- case 1:
- this->actor.home.rot.z = 5;
+ case 1: // second day
+ STH_GI_ID(&this->actor) = GI_RUPEE_PURPLE;
break;
- default:
- this->actor.home.rot.z = 4;
+ default: // final day
+ STH_GI_ID(&this->actor) = GI_RUPEE_RED;
break;
}
- func_801477B4(play);
- this->actionFunc = func_80B67458;
- func_80B67458(this, play);
+ Message_CloseTextbox(play);
+ this->actionFunc = EnSth_GiveOceansideSpiderHouseReward;
+ EnSth_GiveOceansideSpiderHouseReward(this, play);
break;
- case 0x113C:
- func_80151938(play, 0x113B);
+ case 0x113C: // (Second day) I am giving you my life savings
+ Message_ContinueTextbox(play, 0x113B); // If only I had gotten here yesterday...
break;
- case 0x1141:
- func_80151938(play, 0x1140);
- func_80B670A4(this, 3);
+ case 0x1141: // (Final day) This is all I have
+ Message_ContinueTextbox(play, 0x1140); // If only I had gotten here two days ago...
+ EnSth_ChangeAnim(this, STH_ANIM_WAIT);
break;
default:
- this->actionFunc = func_80B677BC;
- func_801477B4(play);
- this->unk_29C |= 2;
+ this->actionFunc = EnSth_OceansideSpiderHouseIdle;
+ Message_CloseTextbox(play);
+ this->sthFlags |= STH_FLAG_OCEANSIDE_SPIDER_HOUSE_GREET;
break;
}
}
break;
case TEXT_STATE_CLOSING:
- this->actionFunc = func_80B677BC;
- this->unk_29C |= 2;
+ this->actionFunc = EnSth_OceansideSpiderHouseIdle;
+ this->sthFlags |= STH_FLAG_OCEANSIDE_SPIDER_HOUSE_GREET;
break;
}
}
-void func_80B677BC(EnSth* this, PlayState* play) {
+void EnSth_OceansideSpiderHouseIdle(EnSth* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- func_80B672A4(this, play);
- this->actionFunc = func_80B67540;
- } else if (func_80B6703C(this, play)) {
+ EnSth_GetInitialOceansideSpiderHouseText(this, play);
+ this->actionFunc = EnSth_HandleOceansideSpiderHouseConversation;
+ } else if (EnSth_CanSpeakToPlayer(this, play)) {
func_800B8614(&this->actor, play, 110.0f);
}
}
-void func_80B67838(EnSth* this, PlayState* play) {
+void EnSth_HandleMoonLookingConversation(EnSth* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- this->actionFunc = func_80B678A8;
- func_801477B4(play);
+ this->actionFunc = EnSth_MoonLookingIdle;
+ Message_CloseTextbox(play);
}
- this->unk_294.x = -0x1388;
+ this->headRot.x = -0x1388;
}
-void func_80B678A8(EnSth* this, PlayState* play) {
+void EnSth_MoonLookingIdle(EnSth* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- this->actionFunc = func_80B67838;
- } else if (func_80B6703C(this, play) || this->actor.isTargeted) {
+ this->actionFunc = EnSth_HandleMoonLookingConversation;
+ } else if (EnSth_CanSpeakToPlayer(this, play) || this->actor.isTargeted) {
if ((gSaveContext.save.time >= CLOCK_TIME(6, 0)) && (gSaveContext.save.time <= CLOCK_TIME(18, 0))) {
- this->actor.textId = 0x1130;
+ this->actor.textId = 0x1130; // Huh? The Moon...
} else {
- this->actor.textId = 0x1131;
+ this->actor.textId = 0x1131; // (The Moon) gotten bigger again
}
func_800B8614(&this->actor, play, 110.0f);
}
- this->unk_294.x = -0x1388;
+ this->headRot.x = -0x1388;
}
-void func_80B67958(EnSth* this, PlayState* play) {
+// used by type: STH_TYPE_UNUSED_1 and undefined types
+void EnSth_DefaultIdle(EnSth* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
}
-void func_80B67984(EnSth* this, PlayState* play) {
- u16 sp1E;
+void EnSth_GetInitialSwampSpiderHouseText(EnSth* this, PlayState* play) {
+ u16 nextTextId;
- if (gSaveContext.save.weekEventReg[34] & 0x10) {
- sp1E = 0x903;
- func_80B670A4(this, 2);
- } else if (gSaveContext.save.weekEventReg[34] & 0x20) {
- sp1E = 0x90F;
- func_80B670A4(this, 2);
- } else if (gSaveContext.save.weekEventReg[34] & 0x40) {
- if (!(gSaveContext.save.weekEventReg[34] & 8)) {
- sp1E = 0x91B;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_34_10)) {
+ nextTextId = 0x903; // (does not exist)
+ EnSth_ChangeAnim(this, STH_ANIM_TALK);
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_34_20)) {
+ nextTextId = 0x90F; // (does not exist)
+ EnSth_ChangeAnim(this, STH_ANIM_TALK);
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_MASK_OF_TRUTH)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_SWAMP_SPIDER_HOUSE_TALKED)) {
+ nextTextId = 0x91B; // As soon as I calm down, getting rid of it
} else {
- sp1E = 0x918;
+ nextTextId = 0x918; // I've had enough of this, going home
}
- func_80B670A4(this, 2);
- } else if (Inventory_GetSkullTokenCount(play->sceneId) >= 30) {
+ EnSth_ChangeAnim(this, STH_ANIM_TALK);
+ } else if (Inventory_GetSkullTokenCount(play->sceneId) >= SPIDER_HOUSE_TOKENS_REQUIRED) {
if (INV_CONTENT(ITEM_MASK_TRUTH) == ITEM_MASK_TRUTH) {
- this->unk_29C |= 4;
- sp1E = 0x919;
+ this->sthFlags |= STH_FLAG_SWAMP_SPIDER_HOUSE_SAVED;
+ nextTextId = 0x919; // I've been saved!
} else {
- sp1E = 0x916;
+ nextTextId = 0x916; // I've been saved! (Duplicate)
}
- } else if (gSaveContext.save.weekEventReg[34] & 2) {
- sp1E = 0x8FF;
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_34_02)) {
+ nextTextId = 0x8FF; // (does not exist)
} else {
- sp1E = 0x8FC;
- gSaveContext.save.weekEventReg[34] |= 2;
+ nextTextId = 0x8FC; // (does not exist)
+ SET_WEEKEVENTREG(WEEKEVENTREG_34_02);
}
- Message_StartTextbox(play, sp1E, &this->actor);
+
+ Message_StartTextbox(play, nextTextId, &this->actor);
}
-void func_80B67AB4(EnSth* this, PlayState* play) {
+void EnSth_TalkAfterSwampSpiderHouseGiveMask(EnSth* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- this->actionFunc = func_80B67C1C;
- gSaveContext.save.weekEventReg[34] |= 0x40;
- Message_StartTextbox(play, 0x918, &this->actor);
+ this->actionFunc = EnSth_HandleSwampSpiderHouseConversation;
+ SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_MASK_OF_TRUTH);
+ Message_StartTextbox(play, 0x918, &this->actor); // I've had enough of this, going home
} else {
- func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1);
}
}
-void func_80B67B50(EnSth* this, PlayState* play) {
+void EnSth_SwampSpiderHouseGiveMask(EnSth* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL;
- this->actionFunc = func_80B67AB4;
+ this->actionFunc = EnSth_TalkAfterSwampSpiderHouseGiveMask;
this->actor.flags |= ACTOR_FLAG_10000;
- func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1);
} else {
- this->unk_29C &= ~1;
- gSaveContext.save.weekEventReg[34] |= 8;
- Actor_PickUp(&this->actor, play, GI_MASK_TRUTH, 10000.0f, 50.0f);
+ this->sthFlags &= ~STH_FLAG_DRAW_MASK_OF_TRUTH;
+ // This flag is used to keep track if the player has already spoken to the actor, triggering secondary dialogue.
+ SET_WEEKEVENTREG(WEEKEVENTREG_SWAMP_SPIDER_HOUSE_TALKED);
+ Actor_OfferGetItem(&this->actor, play, GI_MASK_TRUTH, 10000.0f, 50.0f);
}
}
-void func_80B67C1C(EnSth* this, PlayState* play) {
+void EnSth_HandleSwampSpiderHouseConversation(EnSth* this, PlayState* play) {
s32 pad;
SkelAnime_Update(&this->skelAnime);
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
switch (play->msgCtx.currentTextId) {
- case 0x90C:
- func_80B670A4(this, 2);
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ case 0x90C: // (does not exist)
+ EnSth_ChangeAnim(this, STH_ANIM_TALK);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
- case 0x916:
- case 0x919:
- func_80B670A4(this, 3);
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ case 0x916: // I have been saved! I thought I was doomed
+ case 0x919: // I have been saved! I thought I was doomed (duplicate)
+ EnSth_ChangeAnim(this, STH_ANIM_WAIT);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
- case 0x8FC:
- case 0x8FD:
- case 0x900:
- case 0x90A:
- case 0x90D:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ case 0x8FC: // (does not exist)
+ case 0x8FD: // (does not exist)
+ case 0x900: // (does not exist)
+ case 0x90A: // (does not exist)
+ case 0x90D: // (does not exist)
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
- case 0x901:
- case 0x90B:
- case 0x917:
- func_801477B4(play);
- this->actionFunc = func_80B67B50;
- func_80B67B50(this, play);
+ case 0x901: // (does not exist)
+ case 0x90B: // (does not exist)
+ case 0x917: // Someone gave me this mask and said it would make me rich, Take it
+ Message_CloseTextbox(play);
+ this->actionFunc = EnSth_SwampSpiderHouseGiveMask;
+ EnSth_SwampSpiderHouseGiveMask(this, play);
break;
- case 0x91A:
- gSaveContext.save.weekEventReg[34] |= 0x40;
- gSaveContext.save.weekEventReg[34] &= (u8)~8;
+ case 0x91A: // Someone gave me this mask and said it would make me rich, getting rid of it
+ SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_MASK_OF_TRUTH);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_SWAMP_SPIDER_HOUSE_TALKED);
- case 0x902:
- case 0x903:
- case 0x90E:
- case 0x90F:
- case 0x918:
- case 0x91B:
- func_80B670A4(this, 3);
+ case 0x902: // (does not exist)
+ case 0x903: // (does not exist)
+ case 0x90E: // (does not exist)
+ case 0x90F: // (does not exist)
+ case 0x918: // I have had enough, going home
+ case 0x91B: // As soon as I calm down, getting rid of it
+ EnSth_ChangeAnim(this, STH_ANIM_WAIT);
default:
this->actor.flags &= ~ACTOR_FLAG_10000;
- func_801477B4(play);
- this->actionFunc = func_80B67DA0;
+ Message_CloseTextbox(play);
+ this->actionFunc = EnSth_SwampSpiderHouseIdle;
break;
}
}
}
-void func_80B67DA0(EnSth* this, PlayState* play) {
+void EnSth_SwampSpiderHouseIdle(EnSth* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
- func_80B67984(this, play);
- this->actionFunc = func_80B67C1C;
- } else if (func_80B6703C(this, play)) {
+ EnSth_GetInitialSwampSpiderHouseText(this, play);
+ this->actionFunc = EnSth_HandleSwampSpiderHouseConversation;
+ } else if (EnSth_CanSpeakToPlayer(this, play)) {
this->actor.textId = 0;
func_800B8614(&this->actor, play, 110.0f);
}
}
-void func_80B67E20(Actor* thisx, PlayState* play) {
+/**
+ * Oceanside Spider House EnSth shows up after you collect all 30 tokens.
+ * Here we wait invisible until the player has finished.
+ */
+void EnSth_UpdateOceansideSpiderHouseWaitForTokens(Actor* thisx, PlayState* play) {
EnSth* this = THIS;
- if (Inventory_GetSkullTokenCount(play->sceneId) >= 30) {
- this->actor.update = func_80B680A8;
- this->actor.draw = func_80B6849C;
+ if (Inventory_GetSkullTokenCount(play->sceneId) >= SPIDER_HOUSE_TOKENS_REQUIRED) {
+ this->actor.update = EnSth_Update;
+ this->actor.draw = EnSth_Draw;
this->actor.flags |= ACTOR_FLAG_1;
}
}
+/**
+ * Dual object actors have to wait for the object to finish loading.
+ * This dev chose to use a temporary update instead of temporary actionFunc.
+ */
+void EnSth_UpdateWaitForObject(Actor* thisx, PlayState* play) {
+ s32 pad;
+ EnSth* this = THIS;
+
+ if (Object_IsLoaded(&play->objectCtx, this->mainObjectId)) {
+ this->actor.objBankIndex = this->mainObjectId;
+ Actor_SetObjectDependency(play, &this->actor);
+
+ if (STH_GET_SWAMP_BODY(&this->actor)) {
+ SkelAnime_InitFlex(play, &this->skelAnime, &gAhgSkel, &gEnSthBendDownAnim, this->jointTable,
+ this->morphTable, AHG_LIMB_MAX);
+ Animation_PlayLoop(&this->skelAnime, &gEnSthBendDownAnim);
+ this->animIndex = STH_ANIM_BENDING_DOWN;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_34_10) || CHECK_WEEKEVENTREG(WEEKEVENTREG_34_20) ||
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_MASK_OF_TRUTH) ||
+ (Inventory_GetSkullTokenCount(play->sceneId) >= SPIDER_HOUSE_TOKENS_REQUIRED)) {
+ EnSth_ChangeAnim(this, STH_ANIM_WAIT);
+ }
+ } else {
+ SkelAnime_InitFlex(play, &this->skelAnime, &gSthSkel, &gEnSthSignalAnim, this->jointTable, this->morphTable,
+ STH_LIMB_MAX);
+ Animation_PlayLoop(&this->skelAnime, &gEnSthSignalAnim);
+ }
+
+ this->actor.update = EnSth_Update;
+ this->actor.draw = EnSth_Draw;
+
+ switch (STH_GET_TYPE(&this->actor)) {
+ case STH_TYPE_MOON_LOOKING:
+ EnSth_ChangeAnim(this, STH_ANIM_LOOK_UP);
+ break;
+
+ case STH_TYPE_OCEANSIDE_SPIDER_HOUSE_GREET:
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_OCEANSIDE_SPIDER_HOUSE_COLLECTED_REWARD)) {
+ EnSth_ChangeAnim(this, STH_ANIM_LOOK_AROUND);
+ } else {
+ EnSth_ChangeAnim(this, STH_ANIM_LOOK_AROUND);
+ }
+ break;
+
+ case STH_TYPE_OCEANSIDE_SPIDER_HOUSE_PANIC:
+ EnSth_ChangeAnim(this, STH_ANIM_PANIC);
+ break;
+ }
+
+ // not ready to appear yet
+ if ((STH_GET_TYPE(&this->actor) == STH_TYPE_OCEANSIDE_SPIDER_HOUSE_GREET) &&
+ (Inventory_GetSkullTokenCount(play->sceneId) < SPIDER_HOUSE_TOKENS_REQUIRED)) {
+ this->actor.update = EnSth_UpdateOceansideSpiderHouseWaitForTokens;
+ this->actor.draw = NULL;
+ this->actor.flags &= ~ACTOR_FLAG_1;
+ }
+ }
+}
+
void EnSth_Update(Actor* thisx, PlayState* play) {
s32 pad;
EnSth* this = THIS;
- if (Object_IsLoaded(&play->objectCtx, this->unk_29E)) {
- this->actor.objBankIndex = this->unk_29E;
- Actor_SetObjectDependency(play, &this->actor);
-
- if (ENSTH_GET_100(&this->actor)) {
- SkelAnime_InitFlex(play, &this->skelAnime, &object_ahg_Skel_005998, &ovl_En_Sth_Anim_0045B4,
- this->jointTable, this->morphTable, 16);
- Animation_PlayLoop(&this->skelAnime, &ovl_En_Sth_Anim_0045B4);
- this->unk_29A = 1;
- if ((gSaveContext.save.weekEventReg[34] & 0x10) || (gSaveContext.save.weekEventReg[34] & 0x20) ||
- (gSaveContext.save.weekEventReg[34] & 0x40) || (Inventory_GetSkullTokenCount(play->sceneId) >= 30)) {
- func_80B670A4(this, 3);
- }
- } else {
- SkelAnime_InitFlex(play, &this->skelAnime, &object_sth_Skel_0031F8, &ovl_En_Sth_Anim_003F50,
- this->jointTable, this->morphTable, 16);
- Animation_PlayLoop(&this->skelAnime, &ovl_En_Sth_Anim_003F50);
- }
-
- this->actor.update = func_80B680A8;
- this->actor.draw = func_80B6849C;
-
- switch (ENSTH_GET_F(&this->actor)) {
- case ENSTH_F_3:
- func_80B670A4(this, 4);
- break;
-
- case ENSTH_F_4:
- if (gSaveContext.save.weekEventReg[13] & 0x80) {
- func_80B670A4(this, 5);
- } else {
- func_80B670A4(this, 5);
- }
- break;
-
- case ENSTH_F_5:
- func_80B670A4(this, 7);
- break;
- }
-
- if ((ENSTH_GET_F(&this->actor) == ENSTH_F_4) && (Inventory_GetSkullTokenCount(play->sceneId) < 30)) {
- this->actor.update = func_80B67E20;
- this->actor.draw = NULL;
- this->actor.flags &= ~ACTOR_FLAG_1;
- }
- }
-}
-
-void func_80B680A8(Actor* thisx, PlayState* play) {
- s32 pad;
- EnSth* this = THIS;
- Vec3s sp38;
-
Actor_MoveWithGravity(&this->actor);
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
this->actionFunc(this, play);
- if (func_80B6703C(this, play) && !(this->unk_29C & 8) && (this->unk_29A != 5)) {
- sp38.x = sp38.y = sp38.z = 0;
+ if (EnSth_CanSpeakToPlayer(this, play) && !(this->sthFlags & STH_FLAG_DISABLE_HEAD_TRACK) &&
+ (this->animIndex != STH_ANIM_LOOK_AROUND)) {
+ Vec3s torsoRot;
- Actor_TrackPlayer(play, &this->actor, &this->unk_294, &sp38, this->actor.focus.pos);
+ torsoRot.x = torsoRot.y = torsoRot.z = 0; // this should block torso rot from working
+
+ Actor_TrackPlayer(play, &this->actor, &this->headRot, &torsoRot, this->actor.focus.pos);
} else {
- Math_SmoothStepToS(&this->unk_294.x, 0, 6, 6200, 100);
- Math_SmoothStepToS(&this->unk_294.y, 0, 6, 6200, 100);
+ Math_SmoothStepToS(&this->headRot.x, 0, 6, 6200, 100);
+ Math_SmoothStepToS(&this->headRot.y, 0, 6, 6200, 100);
}
}
-s32 func_80B681E8(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
+s32 EnSth_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
s32 pad;
EnSth* this = THIS;
- if (limbIndex == 15) {
- rot->x += this->unk_294.y;
- rot->z += this->unk_294.x;
- *dList = ovl_En_Sth_DL_0034A0;
+ if (limbIndex == STH_LIMB_HEAD) {
+ rot->x += this->headRot.y;
+ rot->z += this->headRot.x;
+
+ // object_sth body has no head by default, forced here from overlay data
+ *dList = gEnSthHeadDL;
}
- if ((limbIndex == 8) || (limbIndex == 10) || (limbIndex == 13)) {
+ if ((limbIndex == STH_LIMB_CHEST) || (limbIndex == STH_LIMB_LEFT_FOREARM) ||
+ (limbIndex == STH_LIMB_RIGHT_FOREARM)) {
rot->y += (s16)(Math_SinS(play->state.frames * ((limbIndex * 50) + 0x814)) * 200.0f);
rot->z += (s16)(Math_CosS(play->state.frames * ((limbIndex * 50) + 0x940)) * 200.0f);
}
+
return false;
}
-void func_80B68310(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
+void EnSth_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
EnSth* this = THIS;
- if (limbIndex == 15) {
+ if (limbIndex == STH_LIMB_HEAD) {
s32 pad;
- Matrix_MultVec3f(&D_80B6D200, &this->actor.focus.pos);
+ Matrix_MultVec3f(&sFocusOffset, &this->actor.focus.pos);
- if (!ENSTH_GET_100(&this->actor)) {
+ if (!STH_GET_SWAMP_BODY(&this->actor)) {
OPEN_DISPS(play->state.gfxCtx);
- gSPDisplayList(POLY_OPA_DISP++, ovl_En_Sth_DL_0037C0);
+ gSPDisplayList(POLY_OPA_DISP++, gEnSthExtraHairDL);
CLOSE_DISPS(play->state.gfxCtx);
} else {
OPEN_DISPS(play->state.gfxCtx);
- if (this->unk_29C & 1) {
- if (Object_IsLoaded(&play->objectCtx, this->unk_29F)) {
+ if (this->sthFlags & STH_FLAG_DRAW_MASK_OF_TRUTH) {
+ if (Object_IsLoaded(&play->objectCtx, this->maskOfTruthObjectId)) {
Matrix_Push();
Matrix_RotateZS(0x3A98, MTXMODE_APPLY);
Matrix_Translate(0.0f, 190.0f, 0.0f, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPSegment(POLY_OPA_DISP++, 0x0A, play->objectCtx.status[this->unk_29F].segment);
+ gSPSegment(POLY_OPA_DISP++, 0x0A, play->objectCtx.status[this->maskOfTruthObjectId].segment);
gSPDisplayList(POLY_OPA_DISP++, object_mask_truth_DL_0001A0);
Matrix_Pop();
@@ -694,7 +752,7 @@ void func_80B68310(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto
}
}
-void func_80B6849C(Actor* thisx, PlayState* play) {
+void EnSth_Draw(Actor* thisx, PlayState* play) {
s32 pad;
EnSth* this = THIS;
@@ -703,11 +761,11 @@ void func_80B6849C(Actor* thisx, PlayState* play) {
func_8012C28C(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08,
- Gfx_EnvColor(play->state.gfxCtx, D_80B6D20C[1].r, D_80B6D20C[1].g, D_80B6D20C[1].b, 255));
+ Gfx_EnvColor(play->state.gfxCtx, sShirtColors[1].r, sShirtColors[1].g, sShirtColors[1].b, 255));
gSPSegment(POLY_OPA_DISP++, 0x09, Gfx_EnvColor(play->state.gfxCtx, 90, 110, 130, 255));
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
- func_80B681E8, func_80B68310, &this->actor);
+ EnSth_OverrideLimbDraw, EnSth_PostLimbDraw, &this->actor);
CLOSE_DISPS(play->state.gfxCtx);
}
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 38d5fcc7f..1c8c92852 100644
--- a/src/overlays/actors/ovl_En_Sth/z_en_sth.h
+++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.h
@@ -2,36 +2,49 @@
#define Z_EN_STH_H
#include "global.h"
+#include "overlays/actors/ovl_En_Si/z_en_si.h"
+#include "objects/object_sth/object_sth.h"
+#include "objects/object_ahg/object_ahg.h"
+#include "objects/object_mask_truth/object_mask_truth.h"
struct EnSth;
typedef void (*EnSthActionFunc)(struct EnSth*, PlayState*);
-#define ENSTH_GET_F(thisx) ((thisx)->params & 0xF)
-#define ENSTH_GET_100(thisx) ((thisx)->params & 0x100)
+typedef enum {
+ /* 1 */ STH_TYPE_UNUSED_1 = 1,
+ /* 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
+ // Other values: Actor will spawn and animate with arm waving, no further interaction.
+} EnSthTypes;
-enum {
- /* 1 */ ENSTH_F_1 = 1,
- /* 2 */ ENSTH_F_2,
- /* 3 */ ENSTH_F_3,
- /* 4 */ ENSTH_F_4,
- /* 5 */ ENSTH_F_5,
-};
+// 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)
+#define STH_GET_SWAMP_BODY(thisx) ((thisx)->params & 0x100)
+
+// The get item ID for the reward for Oceanside Spider House (wallet, or rupees) is set here
+#define STH_GI_ID(thisx) ((thisx)->home.rot.z)
+
+// This actor has its own flags system
+#define STH_FLAG_DRAW_MASK_OF_TRUTH (1 << 0)
+#define STH_FLAG_OCEANSIDE_SPIDER_HOUSE_GREET (1 << 1)
+#define STH_FLAG_SWAMP_SPIDER_HOUSE_SAVED (1 << 2) // set, but not read
+#define STH_FLAG_DISABLE_HEAD_TRACK (1 << 3)
typedef struct EnSth {
/* 0x000 */ Actor actor;
/* 0x144 */ ColliderCylinder collider;
/* 0x190 */ SkelAnime skelAnime;
- /* 0x1D4 */ Vec3s jointTable[16];
- /* 0x234 */ Vec3s morphTable[16];
- /* 0x294 */ Vec3s unk_294;
- /* 0x29A */ s16 unk_29A;
- /* 0x29C */ u16 unk_29C;
- /* 0x29E */ u8 unk_29E;
- /* 0x29F */ u8 unk_29F;
+ /* 0x1D4 */ Vec3s jointTable[STH_LIMB_MAX];
+ /* 0x234 */ Vec3s morphTable[STH_LIMB_MAX];
+ /* 0x294 */ Vec3s headRot;
+ /* 0x29A */ s16 animIndex;
+ /* 0x29C */ u16 sthFlags;
+ /* 0x29E */ u8 mainObjectId;
+ /* 0x29F */ u8 maskOfTruthObjectId;
/* 0x2A0 */ EnSthActionFunc actionFunc;
} EnSth; // size = 0x2A4
-extern const ActorInit En_Sth_InitVars;
-
#endif // Z_EN_STH_H
diff --git a/src/overlays/actors/ovl_En_Sth2/overlay.cfg b/src/overlays/actors/ovl_En_Sth2/overlay.cfg
deleted file mode 100644
index 594b96573..000000000
--- a/src/overlays/actors/ovl_En_Sth2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Sth2
-z_en_sth2.c
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 1bf91af6b..ba6d72cb6 100644
--- a/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c
+++ b/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c
@@ -18,7 +18,7 @@ void EnSth2_Draw(Actor* thisx, PlayState* play2);
void EnSth2_UpdateSkelAnime(EnSth2* this, PlayState* play);
void EnSth2_UpdateActionFunc(Actor* thisx, PlayState* play);
-const ActorInit En_Sth2_InitVars = {
+ActorInit En_Sth2_InitVars = {
ACTOR_EN_STH2,
ACTORCAT_NPC,
FLAGS,
@@ -43,7 +43,7 @@ void EnSth2_Init(Actor* thisx, PlayState* play) {
if (play->actorCtx.flags & ACTORCTX_FLAG_1) {
this->actor.flags |= (ACTOR_FLAG_10 | ACTOR_FLAG_20);
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
this->actionFunc = EnSth2_UpdateSkelAnime;
@@ -63,8 +63,8 @@ void EnSth2_Update(Actor* thisx, PlayState* play) {
if (Object_IsLoaded(&play->objectCtx, this->objIndex)) {
this->actor.objBankIndex = this->objIndex;
Actor_SetObjectDependency(play, &this->actor);
- SkelAnime_InitFlex(play, &this->skelAnime, &object_sth_Skel_0031F8, &gEnSth2WavingHandAnim, this->jointTable,
- this->morphTable, OBJECT_STH_LIMB_MAX);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gSthSkel, &gEnSth2WavingHandAnim, this->jointTable,
+ this->morphTable, STH_LIMB_MAX);
Animation_PlayLoop(&this->skelAnime, &gEnSth2WavingHandAnim);
this->actor.update = EnSth2_UpdateActionFunc;
this->actor.draw = EnSth2_Draw;
@@ -80,10 +80,11 @@ void EnSth2_UpdateActionFunc(Actor* thisx, PlayState* play) {
s32 EnSth2_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
s32 pad;
- if (limbIndex == OBJECT_STH_LIMB_0F) {
+ if (limbIndex == STH_LIMB_HEAD) {
*dList = gEnSth2HeadDL;
}
- if ((limbIndex == OBJECT_STH_LIMB_08) || (limbIndex == OBJECT_STH_LIMB_0A) || (limbIndex == OBJECT_STH_LIMB_0D)) {
+ if ((limbIndex == STH_LIMB_CHEST) || (limbIndex == STH_LIMB_LEFT_FOREARM) ||
+ (limbIndex == STH_LIMB_RIGHT_FOREARM)) {
rot->y += (s16)(Math_SinS((play->state.frames * ((limbIndex * 50) + 0x814))) * 200.0f);
rot->z += (s16)(Math_CosS((play->state.frames * ((limbIndex * 50) + 0x940))) * 200.0f);
}
@@ -93,7 +94,7 @@ s32 EnSth2_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f*
void EnSth2_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
static Vec3f focusOffset = { 700.0f, 400.0f, 0.0f };
- if (limbIndex == OBJECT_STH_LIMB_0F) {
+ if (limbIndex == STH_LIMB_HEAD) {
Matrix_MultVec3f(&focusOffset, &thisx->focus.pos);
OPEN_DISPS(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_En_Sth2/z_en_sth2.h b/src/overlays/actors/ovl_En_Sth2/z_en_sth2.h
index 1166c9d29..d8ecc9cdb 100644
--- a/src/overlays/actors/ovl_En_Sth2/z_en_sth2.h
+++ b/src/overlays/actors/ovl_En_Sth2/z_en_sth2.h
@@ -11,13 +11,11 @@ typedef void (*EnSth2ActionFunc)(struct EnSth2*, PlayState*);
typedef struct EnSth2 {
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
- /* 0x188 */ Vec3s jointTable[OBJECT_STH_LIMB_MAX];
- /* 0x1E8 */ Vec3s morphTable[OBJECT_STH_LIMB_MAX];
+ /* 0x188 */ Vec3s jointTable[STH_LIMB_MAX];
+ /* 0x1E8 */ Vec3s morphTable[STH_LIMB_MAX];
/* 0x248 */ s16 unused;
/* 0x24A */ u8 objIndex;
/* 0x24C */ EnSth2ActionFunc actionFunc;
} EnSth2; // size = 0x250
-extern const ActorInit En_Sth2_InitVars;
-
#endif // Z_EN_STH2_H
diff --git a/src/overlays/actors/ovl_En_Stone_heishi/overlay.cfg b/src/overlays/actors/ovl_En_Stone_heishi/overlay.cfg
deleted file mode 100644
index 743a4bb0f..000000000
--- a/src/overlays/actors/ovl_En_Stone_heishi/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Stone_heishi
-z_en_stone_heishi.c
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 121d73c51..1692e1461 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
@@ -6,7 +6,7 @@
#include "z_en_stone_heishi.h"
-#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_80)
+#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_REACT_TO_LENS)
#define THIS ((EnStoneheishi*)thisx)
@@ -27,7 +27,7 @@ void EnStoneheishi_SetupCheckGivenItem(EnStoneheishi*);
void EnStoneheishi_GiveItemReward(EnStoneheishi* this, PlayState* play);
void EnStoneheishi_SetupDrinkBottleProcess(EnStoneheishi* this);
-const ActorInit En_Stone_heishi_InitVars = {
+ActorInit En_Stone_heishi_InitVars = {
ACTOR_EN_STONE_HEISHI,
ACTORCAT_NPC,
FLAGS,
@@ -161,13 +161,13 @@ void EnStoneheishi_TrackPlayer(EnStoneheishi* this) {
void func_80BC94B0(EnStoneheishi* this) {
this->textIdIndex = 0;
- if (gSaveContext.save.weekEventReg[41] & 0x40) { // After drinking bottle
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_41_40)) { // After drinking bottle
EnStoneheishi_ChangeAnim(this, EN_STONE_HEISHI_ANIM_CHEER_WITH_SPEAR);
this->textIdIndex = 8;
- this->actor.flags &= ~ACTOR_FLAG_80;
+ this->actor.flags &= ~ACTOR_FLAG_REACT_TO_LENS;
} else { // Initial configuration
EnStoneheishi_ChangeAnim(this, EN_STONE_HEISHI_ANIM_WAVE);
- if (gSaveContext.save.weekEventReg[41] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_41_80)) {
this->textIdIndex = 2;
}
}
@@ -185,14 +185,14 @@ void func_80BC9560(EnStoneheishi* this, PlayState* play) {
return;
}
- if (!(gSaveContext.save.weekEventReg[41] & 0x40) && (play->actorCtx.lensMaskSize != 100)) {
- this->actor.flags |= ACTOR_FLAG_8000000;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_41_40) && (play->actorCtx.lensMaskSize != 100)) {
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
return;
}
SkelAnime_Update(&this->skelAnime);
- this->actor.flags &= ~ACTOR_FLAG_8000000;
+ this->actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON;
yawDiff = ABS_ALT((s16)(this->actor.yawTowardsPlayer - this->actor.world.rot.y));
@@ -229,7 +229,7 @@ void func_80BC9680(EnStoneheishi* this, PlayState* play) {
this->textIdSet = true;
player->actor.textId = sEnStoneHeishiTextIds[this->textIdIndex];
- func_80151938(play, sEnStoneHeishiTextIds[this->textIdIndex]);
+ Message_ContinueTextbox(play, sEnStoneHeishiTextIds[this->textIdIndex]);
func_80151BB4(play, 0x12);
}
}
@@ -237,10 +237,10 @@ void func_80BC9680(EnStoneheishi* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
if (this->textIdIndex == 2) {
- func_80151938(play, 0xFF);
+ Message_ContinueTextbox(play, 0xFF);
EnStoneheishi_SetupCheckGivenItem(this);
} else if (this->textIdIndex == 3) {
func_80BC94B0(this);
@@ -254,7 +254,7 @@ void func_80BC9680(EnStoneheishi* this, PlayState* play) {
func_80BC94B0(this);
return;
}
- func_80151938(play, sEnStoneHeishiTextIds[this->textIdIndex]);
+ Message_ContinueTextbox(play, sEnStoneHeishiTextIds[this->textIdIndex]);
}
}
}
@@ -265,19 +265,20 @@ void EnStoneheishi_SetupCheckGivenItem(EnStoneheishi* this) {
}
void EnStoneheishi_CheckGivenItem(EnStoneheishi* this, PlayState* play) {
- s32 itemActionParam;
+ PlayerItemAction itemAction;
SkelAnime_Update(&this->skelAnime);
if (Message_GetState(&play->msgCtx) == TEXT_STATE_16) {
- itemActionParam = func_80123810(play);
- if (itemActionParam > PLAYER_AP_NONE) {
- this->timer = 40;
- func_801477B4(play);
+ itemAction = func_80123810(play);
- if ((itemActionParam == PLAYER_AP_BOTTLE_POTION_RED) || (itemActionParam == PLAYER_AP_BOTTLE_POTION_BLUE)) {
+ if (itemAction > PLAYER_IA_NONE) {
+ this->timer = 40;
+ Message_CloseTextbox(play);
+
+ if ((itemAction == PLAYER_IA_BOTTLE_POTION_RED) || (itemAction == PLAYER_IA_BOTTLE_POTION_BLUE)) {
this->playerGivesBluePotion = false;
- if (itemActionParam == PLAYER_AP_BOTTLE_POTION_BLUE) {
+ if (itemAction == PLAYER_IA_BOTTLE_POTION_BLUE) {
this->playerGivesBluePotion = true;
}
EnStoneheishi_SetupDrinkBottleProcess(this);
@@ -286,12 +287,12 @@ void EnStoneheishi_CheckGivenItem(EnStoneheishi* this, PlayState* play) {
this->textIdIndex = 3;
player->actor.textId = 0;
- gSaveContext.save.weekEventReg[41] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_41_80);
this->action = EN_STONE_ACTION_1;
this->actionFunc = func_80BC9680;
}
- } else if (itemActionParam < PLAYER_AP_NONE) {
- func_801477B4(play);
+ } else if (itemAction <= PLAYER_IA_MINUS1) {
+ Message_CloseTextbox(play);
func_80151BB4(play, 0x12);
func_80BC94B0(this);
}
@@ -313,7 +314,7 @@ void EnStoneheishi_DrinkBottleProcess(EnStoneheishi* this, PlayState* play) {
case EN_STONE_DRINK_BOTTLE_INITIAL:
if (this->timer == 0) {
this->textIdIndex = 4;
- func_80151938(play, sEnStoneHeishiTextIds[this->textIdIndex]);
+ Message_ContinueTextbox(play, sEnStoneHeishiTextIds[this->textIdIndex]);
player->actor.textId = sEnStoneHeishiTextIds[this->textIdIndex];
this->drinkBottleState++;
}
@@ -327,7 +328,7 @@ void EnStoneheishi_DrinkBottleProcess(EnStoneheishi* this, PlayState* play) {
play->msgCtx.msgLength = 0;
player->actor.textId = 0;
- player->exchangeItemId = PLAYER_AP_NONE;
+ player->exchangeItemId = PLAYER_IA_NONE;
this->bottleDisplay = EN_STONE_BOTTLE_RED_POTION;
if (this->playerGivesBluePotion) {
@@ -345,8 +346,8 @@ void EnStoneheishi_DrinkBottleProcess(EnStoneheishi* this, PlayState* play) {
if (this->timer != 0) {
if ((this->timer < 10) && (this->bottleDisplay != EN_STONE_BOTTLE_EMPTY)) {
this->bottleDisplay = EN_STONE_BOTTLE_EMPTY;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_NP_DRINK);
- func_80123D50(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_AP_BOTTLE);
+ Actor_PlaySfx(&this->actor, NA_SE_VO_NP_DRINK);
+ Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY);
}
} else {
this->drinkBottleState++;
@@ -365,7 +366,7 @@ void EnStoneheishi_DrinkBottleProcess(EnStoneheishi* this, PlayState* play) {
case EN_STONE_DRINK_BOTTLE_STANDING:
if (this->endFrame <= currentFrame) {
this->textIdIndex = 5;
- func_80151938(play, sEnStoneHeishiTextIds[this->textIdIndex]);
+ Message_ContinueTextbox(play, sEnStoneHeishiTextIds[this->textIdIndex]);
player->actor.textId = sEnStoneHeishiTextIds[this->textIdIndex];
EnStoneheishi_ChangeAnim(this, EN_STONE_HEISHI_ANIM_STAND_HAND_ON_HIP);
this->action = EN_STONE_ACTION_1;
@@ -376,12 +377,12 @@ void EnStoneheishi_DrinkBottleProcess(EnStoneheishi* this, PlayState* play) {
}
void EnStoneheishi_GiveItemReward(EnStoneheishi* this, PlayState* play) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
if (INV_CONTENT(ITEM_MASK_STONE) == ITEM_MASK_STONE) {
- Actor_PickUp(&this->actor, play, GI_RUPEE_BLUE, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_RUPEE_BLUE, 300.0f, 300.0f);
} else {
- Actor_PickUp(&this->actor, play, GI_MASK_STONE, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MASK_STONE, 300.0f, 300.0f);
}
this->action = EN_STONE_ACTION_4;
@@ -395,14 +396,14 @@ void func_80BC9D28(EnStoneheishi* this, PlayState* play) {
this->actor.parent = NULL;
this->textIdIndex++;
this->actor.textId = sEnStoneHeishiTextIds[this->textIdIndex];
- gSaveContext.save.weekEventReg[41] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_41_40);
Actor_ProcessTalkRequest(&this->actor, &play->state);
- func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_IA_MINUS1);
this->actionFunc = func_80BC9E50;
} else if (INV_CONTENT(ITEM_MASK_STONE) == ITEM_MASK_STONE) {
- Actor_PickUp(&this->actor, play, GI_RUPEE_BLUE, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_RUPEE_BLUE, 300.0f, 300.0f);
} else {
- Actor_PickUp(&this->actor, play, GI_MASK_STONE, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MASK_STONE, 300.0f, 300.0f);
}
}
@@ -415,7 +416,7 @@ void func_80BC9E50(EnStoneheishi* this, PlayState* play) {
this->action = EN_STONE_ACTION_1;
this->actionFunc = func_80BC9680;
} else {
- func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_IA_MINUS1);
}
}
@@ -432,10 +433,12 @@ void EnStoneheishi_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
Actor_SetScale(&this->actor, 0.01f);
- if (((gSaveContext.save.weekEventReg[41] & 0x40) || (play->actorCtx.lensMaskSize == 100)) &&
+ if ((CHECK_WEEKEVENTREG(WEEKEVENTREG_41_40) || (play->actorCtx.lensMaskSize == 100)) &&
!(player->stateFlags1 & PLAYER_STATE1_800000)) {
if ((this->animIndex != EN_STONE_HEISHI_ANIM_WAVE) &&
((((this->action == EN_STONE_ACTION_0) || (this->action == EN_STONE_ACTION_1)) ||
@@ -447,7 +450,7 @@ void EnStoneheishi_Update(Actor* thisx, PlayState* play) {
this->targetHeadRot.y = 0;
}
- if (!(gSaveContext.save.weekEventReg[41] & 0x40)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_41_40)) {
Actor_SetFocus(&this->actor, 30.0f);
} else {
Actor_SetFocus(&this->actor, 60.0f);
@@ -516,7 +519,7 @@ void EnStoneheishi_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
- if (!(gSaveContext.save.weekEventReg[41] & 0x40)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_41_40)) {
func_8012C2DC(play->state.gfxCtx);
POLY_XLU_DISP =
diff --git a/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.h b/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.h
index 7b09d32bb..715fc7139 100644
--- a/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.h
+++ b/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.h
@@ -28,6 +28,4 @@ typedef struct EnStoneheishi {
/* 0x278 */ ColliderCylinder collider;
} EnStoneheishi; // size = 0x2C4
-extern const ActorInit En_Stone_heishi_InitVars;
-
#endif // Z_EN_STONE_HEISHI_H
diff --git a/src/overlays/actors/ovl_En_Stop_heishi/overlay.cfg b/src/overlays/actors/ovl_En_Stop_heishi/overlay.cfg
deleted file mode 100644
index cf5960b30..000000000
--- a/src/overlays/actors/ovl_En_Stop_heishi/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Stop_heishi
-z_en_stop_heishi.c
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 062422026..3716f18d0 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
@@ -18,9 +18,23 @@ void EnStopheishi_Draw(Actor* thisx, PlayState* play);
void func_80AE7F34(EnStopheishi* this, PlayState* play);
void func_80AE85C4(EnStopheishi* this, PlayState* play);
+void func_80AE7E9C(EnStopheishi* this);
+void func_80AE854C(EnStopheishi* this, PlayState* play);
+void func_80AE795C(EnStopheishi* this, PlayState* play);
-#if 0
-const ActorInit En_Stop_heishi_InitVars = {
+typedef enum {
+ /* 0 */ SOLDIER_ANIM_LOOK_DOWN,
+ /* 1 */ SOLDIER_ANIM_COME_UP_HERE,
+ /* 2 */ SOLDIER_ANIM_STAND_HAND_ON_HIP,
+ /* 3 */ SOLDIER_ANIM_STAND_LOOK_DOWN,
+ /* 4 */ SOLDIER_ANIM_4,
+ /* 5 */ SOLDIER_ANIM_5,
+ /* 6 */ SOLDIER_ANIM_6,
+ /* 7 */ SOLDIER_ANIM_STAND_HAND_ON_CHEST,
+ /* 8 */ SOLDIER_ANIM_MAX,
+} SoldierAnimation;
+
+ActorInit En_Stop_heishi_InitVars = {
ACTOR_EN_STOP_HEISHI,
ACTORCAT_NPC,
FLAGS,
@@ -32,45 +46,540 @@ const ActorInit En_Stop_heishi_InitVars = {
(ActorFunc)EnStopheishi_Draw,
};
-// static ColliderCylinderInit sCylinderInit = {
-static ColliderCylinderInit D_80AE88B0 = {
- { COLTYPE_NONE, AT_NONE, AC_NONE, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_2, COLSHAPE_CYLINDER, },
- { ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_NONE, OCELEM_ON, },
+static ColliderCylinderInit sCylinderInit = {
+ {
+ COLTYPE_NONE,
+ AT_NONE,
+ AC_NONE,
+ OC1_ON | OC1_TYPE_ALL,
+ OC2_TYPE_2,
+ COLSHAPE_CYLINDER,
+ },
+ {
+ ELEMTYPE_UNK0,
+ { 0x00000000, 0x00, 0x00 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_NONE,
+ OCELEM_ON,
+ },
{ 50, 260, 0, { 0, 0, 0 } },
};
-#endif
+static u16 sLeaveMessages[] = {
+ 0x0516, 0x0517, 0x051A, 0x0000, 0x051C, 0x0000, 0x051E, 0x0000, 0x0520, 0x0521, 0x0524, 0x0000, 0x0526, 0x0000,
+ 0x0528, 0x0000, 0x052A, 0x052B, 0x052E, 0x0000, 0x0530, 0x0000, 0x0532, 0x0000, 0x0534, 0x0535, 0x0538, 0x0000,
+ 0x053A, 0x0000, 0x053C, 0x0000, 0x0518, 0x0519, 0x051B, 0x0000, 0x051D, 0x0000, 0x051F, 0x0000, 0x0522, 0x0523,
+ 0x0525, 0x0000, 0x0527, 0x0000, 0x0529, 0x0000, 0x052C, 0x052D, 0x052F, 0x0000, 0x0531, 0x0000, 0x0533, 0x0000,
+ 0x0536, 0x0537, 0x0539, 0x0000, 0x053B, 0x0000, 0x053D, 0x0000, 0x0514, 0x0000, 0x0560, 0x0000, 0x0562, 0x0000,
+ 0x0564, 0x0000, 0x0515, 0x0000, 0x0561, 0x0000, 0x0563, 0x0000, 0x0565, 0x0000,
+};
-extern ColliderCylinderInit D_80AE88B0;
+static u16 sThirdDayLeaveMessages[] = {
+ 0x0540, 0x0541, 0x0542, 0x0000, 0x0543, 0x0000, 0x0543, 0x0000, 0x0547, 0x0548, 0x0549, 0x0000, 0x054A, 0x0000,
+ 0x054B, 0x0000, 0x054F, 0x0550, 0x0551, 0x0000, 0x0552, 0x0000, 0x0553, 0x0000, 0x0557, 0x0558, 0x0559, 0x0000,
+ 0x055A, 0x0000, 0x055A, 0x0000, 0x0544, 0x0545, 0x0546, 0x0000, 0x0546, 0x0000, 0x0546, 0x0000, 0x054C, 0x054D,
+ 0x054E, 0x0000, 0x054E, 0x0000, 0x054E, 0x0000, 0x0554, 0x0555, 0x0556, 0x0000, 0x0556, 0x0000, 0x0556, 0x0000,
+ 0x055B, 0x055C, 0x055D, 0x0000, 0x055D, 0x0000, 0x055D, 0x0000, 0x053E, 0x0000, 0x053E, 0x0000, 0x053E, 0x0000,
+ 0x053E, 0x0000, 0x053F, 0x0000, 0x053F, 0x0000, 0x053F, 0x0000, 0x053F, 0x0000,
+};
-extern UNK_TYPE D_06006C18;
+static AnimationHeader* sAnimations[SOLDIER_ANIM_MAX] = {
+ &gSoldierLookDown, // SOLDIER_ANIM_LOOK_DOWN
+ &gSoldierComeUpHere, // SOLDIER_ANIM_COME_UP_HERE
+ &gSoldierStandHandOnHip, // SOLDIER_ANIM_STAND_HAND_ON_HIP
+ &gSoldierStandAndLookDown, // SOLDIER_ANIM_STAND_LOOK_DOWN
+ &object_sdn_Anim_0057BC, // SOLDIER_ANIM_4
+ &object_sdn_Anim_005D28, // SOLDIER_ANIM_5
+ &object_sdn_Anim_0064C0, // SOLDIER_ANIM_6
+ &gSoldierStandWithHandOnChest, // SOLDIER_ANIM_STAND_HAND_ON_CHEST
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stop_heishi/EnStopheishi_Init.s")
+void EnStopheishi_Init(Actor* thisx, PlayState* play) {
+ EnStopheishi* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stop_heishi/EnStopheishi_Destroy.s")
+ ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierStandHandOnHip, this->jointTable,
+ this->morphTable, SOLDIER_LIMB_MAX);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stop_heishi/func_80AE750C.s")
+ this->actor.colChkInfo.mass = MASS_IMMOVABLE;
+ this->unk_276 = ENSTOPHEISHI_GET_F000(&this->actor);
+ this->switchFlag = ENSTOPHEISHI_GET_SWITCH_FLAG(&this->actor);
+ this->unk_288 = (this->actor.world.rot.z * 40.0f) + 50.0f;
+ this->actor.world.rot.z = 0;
+ if (this->switchFlag == 0x7F) {
+ this->switchFlag = -1;
+ }
+ if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) {
+ Actor_Kill(&this->actor);
+ return;
+ }
+ this->actor.targetMode = 0;
+ this->actor.gravity = -3.0f;
+ Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
+ this->rotYTarget = this->actor.world.rot.y;
+ this->headTurnTimer2 = 6;
+ func_80AE7E9C(this);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stop_heishi/func_80AE75C8.s")
+void EnStopheishi_Destroy(Actor* thisx, PlayState* play) {
+ EnStopheishi* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stop_heishi/func_80AE7718.s")
+ Collider_DestroyCylinder(play, &this->collider);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stop_heishi/func_80AE77D4.s")
+void EnStopHeishi_ChangeAnim(EnStopheishi* this, s32 animIndex) {
+ s32 mode;
+ f32 morphFrames;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stop_heishi/func_80AE795C.s")
+ this->currentAnim = animIndex;
+ this->currentAnimFrameCount = Animation_GetLastFrame(sAnimations[animIndex]);
+ mode = ANIMMODE_ONCE;
+ morphFrames = -10.0f;
+ if ((animIndex >= SOLDIER_ANIM_STAND_HAND_ON_HIP) && (animIndex != SOLDIER_ANIM_4)) {
+ mode = ANIMMODE_LOOP;
+ }
+ if (animIndex == SOLDIER_ANIM_5) {
+ morphFrames = 0.0f;
+ }
+ Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f, this->currentAnimFrameCount, mode,
+ morphFrames);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stop_heishi/func_80AE7E9C.s")
+void EnStopheishi_UpdateHeadNormal(EnStopheishi* this, PlayState* play) {
+ s32 yawDiff;
+ Player* player;
+ Vec3f playerPos;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stop_heishi/func_80AE7F34.s")
+ yawDiff = ABS_ALT(BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.world.rot.y));
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stop_heishi/func_80AE854C.s")
+ this->headRotXTarget = 0;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stop_heishi/func_80AE85C4.s")
+ if (this->actor.xzDistToPlayer < 200.0f) {
+ player = GET_PLAYER(play);
+ if (yawDiff < 0x4E20) {
+ this->headRotXTarget = this->actor.yawTowardsPlayer - this->actor.world.rot.y;
+ if (this->headRotXTarget > 0x2710) {
+ this->headRotXTarget = 0x2710;
+ } else if (this->headRotXTarget < -0x2710) {
+ this->headRotXTarget = -0x2710;
+ }
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stop_heishi/EnStopheishi_Update.s")
+ Math_Vec3f_Copy(&playerPos, &player->actor.world.pos);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stop_heishi/func_80AE87A4.s")
+ if ((player->transformation == PLAYER_FORM_DEKU) || (player->transformation == PLAYER_FORM_HUMAN)) {
+ playerPos.y += 57.0f + BREG(34);
+ } else {
+ playerPos.y += 70.0f + BREG(35);
+ }
+ this->pitchToPlayer = Math_Vec3f_Pitch(&this->actor.focus.pos, &playerPos);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stop_heishi/func_80AE87EC.s")
+void EnStopHeishi_UpdateHeadThirdDay(EnStopheishi* this) {
+ if (this->headTurnTimer1 != 0) {
+ this->headTurnTimer1--;
+ }
+ this->pitchToPlayer = -0xBB8;
+ this->headRotXTarget = 0;
+ if (this->headTurnTimer2 < 6) {
+ this->headRotXTarget = 0x1770;
+ if (((u32)this->headTurnTimer2 % 8) == 0) {
+ this->headRotXTarget = -0x1770;
+ }
+ if (this->headTurnTimer1 == 0) {
+ this->headTurnTimer2++;
+ this->headTurnTimer1 = 10;
+ if (this->headTurnTimer2 >= 6) {
+ this->headTurnTimer1 = 50;
+ }
+ }
+ } else if ((this->headTurnTimer1 == 0) && (Quake_NumActiveQuakes() != 0) && (this->headTurnTimer2 >= 6)) {
+ this->headTurnTimer2 = 0;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stop_heishi/EnStopheishi_Draw.s")
+void func_80AE77D4(EnStopheishi* this) {
+ this->unk_274 = 0;
+ this->maxMoveStep = 0.0f;
+ this->rotYTarget = this->actor.home.rot.y;
+ if (this->timer == 1) {
+ this->pitchToPlayer = 0;
+ EnStopHeishi_ChangeAnim(this, SOLDIER_ANIM_5);
+ }
+ if ((this->timer == 0) && (this->unk_264 == 0)) {
+ if ((fabsf(this->actor.world.pos.x - this->actor.home.pos.x) > 3.0f) ||
+ (fabsf(this->actor.world.pos.z - this->actor.home.pos.z) > 3.0f)) {
+ this->skelAnime.playSpeed = 3.0f;
+ Math_ApproachF(&this->actor.world.pos.x, this->actor.home.pos.x, 0.3f, 5.0f);
+ Math_ApproachF(&this->actor.world.pos.z, this->actor.home.pos.z, 0.3f, 5.0f);
+ } else {
+ this->unk_264 = 1;
+ }
+ }
+ if ((this->currentAnim != SOLDIER_ANIM_STAND_HAND_ON_HIP) && (this->currentAnim != SOLDIER_ANIM_STAND_LOOK_DOWN) &&
+ (this->currentAnim != SOLDIER_ANIM_STAND_HAND_ON_CHEST) && (this->unk_264 != 0)) {
+ this->skelAnime.playSpeed = 1.0f;
+ EnStopHeishi_ChangeAnim(this, SOLDIER_ANIM_STAND_HAND_ON_HIP);
+ if ((gSaveContext.save.day != 3) && gSaveContext.save.isNight) {
+ EnStopHeishi_ChangeAnim(this, SOLDIER_ANIM_STAND_LOOK_DOWN);
+ }
+ if (gSaveContext.save.day == 3) {
+ EnStopHeishi_ChangeAnim(this, SOLDIER_ANIM_STAND_HAND_ON_CHEST);
+ }
+ }
+}
+
+void func_80AE795C(EnStopheishi* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+ f32 curFrame = this->skelAnime.curFrame;
+ Vec3f newPos;
+ f32 xDiff;
+ f32 zDiff;
+ f32 playSpeed;
+ s16 yaw;
+ s16 rotY;
+
+ if (ABS_ALT(BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.home.rot.y)) < 0x2000) {
+ this->rotYTarget = this->actor.yawTowardsPlayer;
+ }
+ playSpeed =
+ fabsf((f32)this->actor.yawTowardsPlayer - Math_Vec3f_Yaw(&this->actor.home.pos, &player->actor.world.pos)) *
+ 0.01f * 5.0f;
+ if (this->unk_274 != 4) {
+ this->skelAnime.playSpeed = CLAMP(playSpeed, 1.0f, 5.0f);
+ }
+ yaw = Math_Vec3f_Yaw(&this->actor.home.pos, &player->actor.world.pos);
+ xDiff = fabsf(this->actor.home.pos.x - player->actor.world.pos.x);
+ zDiff = fabsf(this->actor.home.pos.z - player->actor.world.pos.z);
+ Math_Vec3f_Copy(&newPos, &this->actor.home.pos);
+ rotY = this->actor.home.rot.y;
+
+ if (rotY == -0x8000) {
+ if (yaw > 0) {
+ xDiff = Math_SinS(this->actor.home.rot.y + 0xC000) * xDiff;
+ zDiff = Math_CosS(this->actor.home.rot.y + 0xC000) * zDiff;
+ } else {
+ xDiff = Math_SinS(this->actor.home.rot.y + 0x4000) * xDiff;
+ zDiff = Math_CosS(this->actor.home.rot.y + 0x4000) * zDiff;
+ }
+ } else if (yaw < rotY) {
+ xDiff = Math_SinS(this->actor.home.rot.y + 0xC000) * xDiff;
+ zDiff = Math_CosS(this->actor.home.rot.y + 0xC000) * zDiff;
+ } else {
+ xDiff = Math_SinS(this->actor.home.rot.y + 0x4000) * xDiff;
+ zDiff = Math_CosS(this->actor.home.rot.y + 0x4000) * zDiff;
+ }
+
+ if (this->unk_288 < xDiff) {
+ xDiff = this->unk_288;
+ } else if (xDiff < -this->unk_288) {
+ xDiff = -this->unk_288;
+ }
+ if (this->unk_288 < zDiff) {
+ zDiff = this->unk_288;
+ } else if (zDiff < -this->unk_288) {
+ zDiff = -this->unk_288;
+ }
+ newPos.x += xDiff;
+ newPos.z += zDiff;
+ Math_ApproachF(&this->actor.world.pos.x, newPos.x, 0.5f, this->maxMoveStep);
+ Math_ApproachF(&this->actor.world.pos.z, newPos.z, 0.5f, this->maxMoveStep);
+ Math_ApproachF(&this->maxMoveStep, 50.0f, 0.3f, 1.0f);
+
+ switch (this->unk_274) {
+ case 0:
+ if (gSaveContext.save.day != 3) {
+ EnStopHeishi_ChangeAnim(this, SOLDIER_ANIM_4);
+ this->unk_274 = 2;
+ } else {
+ EnStopHeishi_ChangeAnim(this, SOLDIER_ANIM_STAND_HAND_ON_HIP);
+ this->unk_274 = 1;
+ }
+ break;
+
+ case 1:
+ EnStopHeishi_ChangeAnim(this, SOLDIER_ANIM_4);
+ this->unk_274 = 2;
+ break;
+
+ case 2:
+ if (this->currentAnimFrameCount <= curFrame) {
+ EnStopHeishi_ChangeAnim(this, SOLDIER_ANIM_5);
+ this->unk_274 = 3;
+ }
+ break;
+
+ case 3:
+ if ((fabsf(this->actor.world.pos.x - newPos.x) < 2.0f) &&
+ (fabsf(this->actor.world.pos.z - newPos.z) < 2.0f)) {
+ this->skelAnime.playSpeed = 1.0f;
+ EnStopHeishi_ChangeAnim(this, SOLDIER_ANIM_6);
+ this->unk_274 = 4;
+ }
+ break;
+
+ case 4:
+ if ((fabsf(this->actor.world.pos.x - newPos.x) > 4.0f) ||
+ (fabsf(this->actor.world.pos.z - newPos.z) > 4.0f)) {
+ EnStopHeishi_ChangeAnim(this, SOLDIER_ANIM_5);
+ this->unk_274 = 3;
+ }
+ break;
+ }
+ this->unk_264 = 0;
+ this->timer = 20;
+ this->pitchToPlayer = 0;
+ if (this->unk_276 == 3) {
+ Math_Vec3f_Copy(&newPos, &player->actor.world.pos);
+ if ((player->transformation == PLAYER_FORM_DEKU) || (player->transformation == PLAYER_FORM_HUMAN)) {
+ newPos.y += 77.0f + BREG(37);
+ this->pitchToPlayer = Math_Vec3f_Pitch(&this->actor.focus.pos, &newPos);
+ }
+ }
+}
+
+void func_80AE7E9C(EnStopheishi* this) {
+ EnStopHeishi_ChangeAnim(this, SOLDIER_ANIM_STAND_HAND_ON_HIP);
+ if ((gSaveContext.save.day != 3) && gSaveContext.save.isNight) {
+ EnStopHeishi_ChangeAnim(this, SOLDIER_ANIM_STAND_LOOK_DOWN);
+ }
+ if (gSaveContext.save.day == 3) {
+ EnStopHeishi_ChangeAnim(this, SOLDIER_ANIM_STAND_HAND_ON_CHEST);
+ }
+ this->unk_274 = 0;
+ this->disableCollider = false;
+ this->actionFunc = func_80AE7F34;
+ this->actor.speed = 0.0f;
+}
+
+void func_80AE7F34(EnStopheishi* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+ s16 sp32;
+ s16 phi_a2;
+ s32 yawDiffAbs;
+ s16 yawDiff;
+ f32 xDiff;
+ f32 zDiff;
+
+ SkelAnime_Update(&this->skelAnime);
+ if ((this->currentAnim == SOLDIER_ANIM_5) && (((s16)this->skelAnime.curFrame % 2) != 0)) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SOLDIER_WALK);
+ }
+ if (gSaveContext.save.day != 3) {
+ EnStopheishi_UpdateHeadNormal(this, play);
+ } else {
+ EnStopHeishi_UpdateHeadThirdDay(this);
+ }
+ Math_SmoothStepToS(&this->actor.world.rot.y, this->rotYTarget, 1, 0x1388, 0);
+
+ sp32 = 0;
+ if (gSaveContext.save.isNight) {
+ sp32 = 0x20;
+ }
+
+ phi_a2 = 0;
+ switch (player->transformation) {
+ case PLAYER_FORM_HUMAN:
+ if ((STOLEN_ITEM_1 == SLOT_SWORD_GREAT_FAIRY) || (STOLEN_ITEM_1 == ITEM_SWORD_KOKIRI) ||
+ (STOLEN_ITEM_1 == ITEM_SWORD_RAZOR) || (STOLEN_ITEM_1 == ITEM_SWORD_GILDED) ||
+ (STOLEN_ITEM_2 == SLOT_SWORD_GREAT_FAIRY) || (STOLEN_ITEM_2 == ITEM_SWORD_KOKIRI) ||
+ (STOLEN_ITEM_2 == ITEM_SWORD_RAZOR) || (STOLEN_ITEM_2 == ITEM_SWORD_GILDED)) {
+ if (this->unk_265 != 0) {
+ phi_a2 = 1;
+ }
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_20)) {
+ phi_a2 = 1;
+ }
+ break;
+
+ case PLAYER_FORM_DEKU:
+ phi_a2 = 4;
+ break;
+
+ case PLAYER_FORM_ZORA:
+ phi_a2 = 3;
+ break;
+
+ case PLAYER_FORM_GORON:
+ phi_a2 = 2;
+ break;
+ }
+
+ if (((phi_a2 == 1) || (phi_a2 == 2) || (phi_a2 == 3)) &&
+ (((this->currentAnim == SOLDIER_ANIM_4)) || (this->currentAnim == SOLDIER_ANIM_5) ||
+ (this->currentAnim == SOLDIER_ANIM_6))) {
+ EnStopHeishi_ChangeAnim(this, SOLDIER_ANIM_STAND_HAND_ON_HIP);
+ if ((gSaveContext.save.day != 3) && gSaveContext.save.isNight) {
+ EnStopHeishi_ChangeAnim(this, SOLDIER_ANIM_STAND_LOOK_DOWN);
+ }
+ if (gSaveContext.save.day == 3) {
+ EnStopHeishi_ChangeAnim(this, SOLDIER_ANIM_STAND_HAND_ON_CHEST);
+ }
+ }
+
+ if ((phi_a2 == 0) || (phi_a2 == 4)) {
+ xDiff = this->actor.home.pos.x - player->actor.world.pos.x;
+ zDiff = this->actor.home.pos.z - player->actor.world.pos.z;
+ this->collider.dim.radius = 50;
+ this->collider.dim.height = 260;
+ if (sqrtf(SQ(xDiff) + SQ(zDiff)) < 240.0f) {
+ func_80AE795C(this, play);
+ } else {
+ func_80AE77D4(this);
+ }
+ } else {
+ this->collider.dim.radius = 15;
+ this->collider.dim.height = 60;
+ }
+ if (phi_a2 != 4) {
+ this->messageIndex = this->unk_276 * 8;
+ this->messageIndex += sp32;
+ this->messageIndex += phi_a2 * 2;
+ } else {
+ this->messageIndex = 64;
+ if (sp32 != 0) {
+ this->messageIndex = 72;
+ }
+ this->messageIndex += this->unk_276 * 2;
+ }
+ if (gSaveContext.save.day != 3) {
+ this->actor.textId = sLeaveMessages[this->messageIndex];
+ this->unk_27E = sLeaveMessages[this->messageIndex + 1];
+ } else {
+ this->actor.textId = sThirdDayLeaveMessages[this->messageIndex];
+ this->unk_27E = sThirdDayLeaveMessages[this->messageIndex + 1];
+ }
+ if (this->unk_27E != 0) {
+ if ((STOLEN_ITEM_1 == ITEM_SWORD_GREAT_FAIRY) || (STOLEN_ITEM_1 == ITEM_SWORD_KOKIRI) ||
+ (STOLEN_ITEM_1 == ITEM_SWORD_RAZOR) || (STOLEN_ITEM_1 == ITEM_SWORD_GILDED) ||
+ (STOLEN_ITEM_2 == ITEM_SWORD_GREAT_FAIRY) || (STOLEN_ITEM_2 == ITEM_SWORD_KOKIRI) ||
+ (STOLEN_ITEM_2 == ITEM_SWORD_RAZOR) || (STOLEN_ITEM_2 == ITEM_SWORD_GILDED)) {
+ if (this->actor.textId == 0x516) {
+ this->actor.textId = 0x56C;
+ } else if (this->actor.textId == 0x520) {
+ this->actor.textId = 0x56E;
+ } else if (this->actor.textId == 0x52A) {
+ this->actor.textId = 0x570;
+ } else if (this->actor.textId == 0x534) {
+ this->actor.textId = 0x572;
+ } else if (this->actor.textId == 0x518) {
+ this->actor.textId = 0x56D;
+ } else if (this->actor.textId == 0x522) {
+ this->actor.textId = 0x56F;
+ } else if (this->actor.textId == 0x52C) {
+ this->actor.textId = 0x571;
+ } else if (this->actor.textId == 0x536) {
+ this->actor.textId = 0x573;
+ }
+ } else if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) == EQUIP_VALUE_SWORD_NONE) {
+ if (this->actor.textId == 0x516) {
+ this->actor.textId = 0x55E;
+ } else if (this->actor.textId == 0x520) {
+ this->actor.textId = 0x566;
+ } else if (this->actor.textId == 0x52A) {
+ this->actor.textId = 0x568;
+ } else if (this->actor.textId == 0x534) {
+ this->actor.textId = 0x56A;
+ } else if (this->actor.textId == 0x518) {
+ this->actor.textId = 0x55F;
+ } else if (this->actor.textId == 0x522) {
+ this->actor.textId = 0x567;
+ } else if (this->actor.textId == 0x52C) {
+ this->actor.textId = 0x569;
+ } else if (this->actor.textId == 0x536) {
+ this->actor.textId = 0x56B;
+ }
+ }
+ }
+ yawDiff = this->actor.yawTowardsPlayer - this->actor.world.rot.y;
+ yawDiffAbs = ABS_ALT(yawDiff);
+
+ if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
+ this->skelAnime.playSpeed = 1.0f;
+ func_80AE854C(this, play);
+ } else if (yawDiffAbs < 0x4BB9) {
+ func_800B8614(&this->actor, play, 70.0f);
+ }
+}
+
+void func_80AE854C(EnStopheishi* this, PlayState* play) {
+ if (((this->unk_265 != 0) || (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_20))) &&
+ (this->currentAnim != SOLDIER_ANIM_STAND_HAND_ON_HIP)) {
+ EnStopHeishi_ChangeAnim(this, SOLDIER_ANIM_STAND_HAND_ON_HIP);
+ }
+ this->pitchToPlayer = 0;
+ this->unk_274 = 0;
+ this->disableCollider = true;
+ this->actionFunc = func_80AE85C4;
+}
+
+void func_80AE85C4(EnStopheishi* this, PlayState* play) {
+ SkelAnime_Update(&this->skelAnime);
+ EnStopheishi_UpdateHeadNormal(this, play);
+ if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
+ if (this->unk_27E != 0) {
+ this->actor.textId = this->unk_27E;
+ Message_ContinueTextbox(play, this->actor.textId);
+ EnStopHeishi_ChangeAnim(this, SOLDIER_ANIM_STAND_HAND_ON_HIP);
+ SET_WEEKEVENTREG(WEEKEVENTREG_12_20);
+ this->unk_265 = 1;
+ this->unk_27E = 0;
+ } else {
+ Message_CloseTextbox(play);
+ func_80AE7E9C(this);
+ }
+ }
+}
+
+void EnStopheishi_Update(Actor* thisx, PlayState* play) {
+ EnStopheishi* this = (EnStopheishi*)thisx;
+ s32 pad;
+
+ if (this->timer != 0) {
+ this->timer--;
+ }
+ this->actor.shape.rot.y = this->actor.world.rot.y;
+ Math_SmoothStepToS(&this->headRotX, this->headRotXTarget, 1, 0x7D0, 0);
+ Math_SmoothStepToS(&this->headRotZ, this->pitchToPlayer, 1, 0x7D0, 0);
+ this->actionFunc(this, play);
+ Actor_MoveWithGravity(&this->actor);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
+ Actor_SetScale(&this->actor, 0.01f);
+ this->actor.uncullZoneForward = 500.0f;
+ Math_Vec3f_Copy(&this->actor.focus.pos, &this->headWorldPos);
+ Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot);
+ if (!this->disableCollider) {
+ Collider_UpdateCylinder(&this->actor, &this->collider);
+ CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
+ }
+}
+
+s32 EnStopheishi_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
+ EnStopheishi* this = THIS;
+
+ if (limbIndex == SOLDIER_LIMB_HEAD) {
+ rot->x += this->headRotX;
+ rot->z += this->headRotZ;
+ }
+ return false;
+}
+
+void EnStopheishi_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
+ EnStopheishi* this = THIS;
+
+ if (limbIndex == SOLDIER_LIMB_HEAD) {
+ Matrix_MultVec3f(&gZeroVec3f, &this->headWorldPos);
+ }
+}
+
+void EnStopheishi_Draw(Actor* thisx, PlayState* play) {
+ EnStopheishi* this = THIS;
+
+ func_8012C28C(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_Stop_heishi/z_en_stop_heishi.h b/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.h
index 5c2b639ef..651a66496 100644
--- a/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.h
+++ b/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.h
@@ -2,18 +2,46 @@
#define Z_EN_STOP_HEISHI_H
#include "global.h"
+#include "objects/object_sdn/object_sdn.h"
struct EnStopheishi;
typedef void (*EnStopheishiActionFunc)(struct EnStopheishi*, PlayState*);
+#define ENSTOPHEISHI_GET_SWITCH_FLAG(thisx) (((thisx)->params) & 0x3F)
+#define ENSTOPHEISHI_GET_F000(thisx) ((((thisx)->params) >> 0xC) & 0xF)
+
typedef struct EnStopheishi {
/* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0x110];
+ /* 0x144 */ SkelAnime skelAnime;
+ /* 0x188 */ Vec3s jointTable[SOLDIER_LIMB_MAX];
+ /* 0x1EE */ Vec3s morphTable[SOLDIER_LIMB_MAX];
/* 0x254 */ EnStopheishiActionFunc actionFunc;
- /* 0x258 */ char unk_258[0x90];
+ /* 0x258 */ s16 headRotZ;
+ /* 0x25A */ s16 headRotX;
+ /* ox25C */ UNK_TYPE1 unk_25C[2];
+ /* 0x25E */ s16 pitchToPlayer;
+ /* 0x260 */ s16 headRotXTarget;
+ /* 0x262 */ s16 unk_262; // Unused
+ /* 0x264 */ u8 unk_264; // Locking value at `0` prevents leaving the guard pose, however locking to 1 doesn't prevent guarding.
+ /* 0x265 */ u8 unk_265;
+ /* 0x266 */ s16 unk_266;
+ /* 0x268 */ s32 currentAnim;
+ /* 0x26C */ f32 currentAnimFrameCount;
+ /* 0x270 */ s16 timer;
+ /* 0x272 */ s16 headTurnTimer1;
+ /* 0x274 */ s16 unk_274;
+ /* 0x276 */ s16 unk_276;
+ /* 0x278 */ s16 disableCollider;
+ /* 0x27A */ s16 switchFlag;
+ /* 0x27C */ s16 messageIndex;
+ /* 0x27E */ s16 unk_27E;
+ /* 0x280 */ s16 rotYTarget;
+ /* 0x284 */ s32 headTurnTimer2;
+ /* 0x288 */ f32 unk_288;
+ /* 0x28C */ f32 maxMoveStep;
+ /* 0x28C */ Vec3f headWorldPos;
+ /* 0x29C */ ColliderCylinder collider;
} EnStopheishi; // size = 0x2E8
-extern const ActorInit En_Stop_heishi_InitVars;
-
#endif // Z_EN_STOP_HEISHI_H
diff --git a/src/overlays/actors/ovl_En_Stream/overlay.cfg b/src/overlays/actors/ovl_En_Stream/overlay.cfg
deleted file mode 100644
index 3789ae1fe..000000000
--- a/src/overlays/actors/ovl_En_Stream/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Stream
-z_en_stream.c
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 782f32c0d..11e5ce7d6 100644
--- a/src/overlays/actors/ovl_En_Stream/z_en_stream.c
+++ b/src/overlays/actors/ovl_En_Stream/z_en_stream.c
@@ -18,7 +18,7 @@ void EnStream_Draw(Actor* thisx, PlayState* play);
void EnStream_WaitForPlayer(EnStream* this, PlayState* play);
-const ActorInit En_Stream_InitVars = {
+ActorInit En_Stream_InitVars = {
ACTOR_EN_STREAM,
ACTORCAT_BG,
FLAGS,
@@ -104,7 +104,7 @@ void EnStream_SuckPlayer(EnStream* this, PlayState* play) {
if (yDistWithOffset > 0.0f) {
Math_SmoothStepToF(&player->actor.velocity.y, -3.0f, 0.7f, yDistWithOffset, 0.0f);
if (posDifference.y < -70.0f) {
- player->stateFlags2 |= 0x80000000;
+ player->stateFlags2 |= PLAYER_STATE2_80000000;
}
}
} else {
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 c544be02f..88856c3dd 100644
--- a/src/overlays/actors/ovl_En_Stream/z_en_stream.h
+++ b/src/overlays/actors/ovl_En_Stream/z_en_stream.h
@@ -32,6 +32,4 @@ typedef struct EnStream {
/* 0x14C */ UNK_TYPE1 unk_14C[0x4];
} EnStream; // size = 0x150
-extern const ActorInit En_Stream_InitVars;
-
#endif // Z_EN_STREAM_H
diff --git a/src/overlays/actors/ovl_En_Suttari/overlay.cfg b/src/overlays/actors/ovl_En_Suttari/overlay.cfg
deleted file mode 100644
index 9eea97af5..000000000
--- a/src/overlays/actors/ovl_En_Suttari/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Suttari
-z_en_suttari.c
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 4f3882aa7..a7cd6617a 100644
--- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c
+++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c
@@ -38,7 +38,7 @@ void func_80BADE14(EnSuttari* this, PlayState* play);
void func_80BADE8C(EnSuttari* this, PlayState* play);
void func_80BADF3C(EnSuttari* this, PlayState* play);
-const ActorInit En_Suttari_InitVars = {
+ActorInit En_Suttari_InitVars = {
ACTOR_EN_SUTTARI,
ACTORCAT_NPC,
FLAGS,
@@ -130,7 +130,7 @@ static TrackOptionsSet sTrackOptions = {
static u8 D_80BAE820[] = {
/* 0x00 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(2, 0x80 - 0x04),
- /* 0x04 */ SCHEDULE_CMD_CHECK_FLAG_S(0x21, 0x08, 0x7F - 0x08),
+ /* 0x04 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_33_08, 0x7F - 0x08),
/* 0x08 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_ICHIBA, 0x3D - 0x0C),
/* 0x0C */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 0, 0, 25, 0x37 - 0x12),
/* 0x12 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(0, 25, 0, 30, 0x31 - 0x18),
@@ -205,9 +205,9 @@ void EnSuttari_UpdateCollider(EnSuttari* this, PlayState* play) {
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
if ((this->flags1 & 1) && (this->actionFunc != func_80BADE14)) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 30.0f, 30.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 30.0f, 30.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
} else {
- Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 30.0f, 30.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 30.0f, 30.0f, UPDBGCHECKINFO_FLAG_4);
}
}
@@ -231,8 +231,8 @@ void EnSuttari_TriggerTransition(PlayState* play, u16 entrance) {
}
void EnSuttari_UpdateTime(void) {
- gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)REG(15);
- gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.daySpeed);
+ gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)R_TIME_SPEED;
+ gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.timeSpeedOffset);
}
s32 func_80BAA904(EnSuttari* this, PlayState* play) {
@@ -306,65 +306,65 @@ void func_80BAAB78(EnSuttari* this, PlayState* play) {
switch (this->textId) {
case 0:
this->flags1 |= 0x20;
- this->cutsceneIdx = 0;
+ this->csIdIndex = 0;
this->textId = 0x29E5;
break;
case 0x29E5:
- ActorCutscene_Stop(this->cutscenes[this->cutsceneIdx]);
- this->cutsceneIdx = 1;
+ CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
+ this->csIdIndex = 1;
this->textId = 0x29E6;
break;
case 0x29E6:
- ActorCutscene_Stop(this->cutscenes[this->cutsceneIdx]);
- this->cutsceneIdx = 0;
+ CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
+ this->csIdIndex = 0;
this->textId = 0x29E7;
break;
case 0x29E7:
- ActorCutscene_Stop(this->cutscenes[this->cutsceneIdx]);
- this->cutsceneIdx = 1;
+ CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
+ this->csIdIndex = 1;
this->textId = 0x29E8;
break;
case 0x29E8:
- ActorCutscene_Stop(this->cutscenes[this->cutsceneIdx]);
- this->cutsceneIdx = 0;
+ CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
+ this->csIdIndex = 0;
this->textId = 0x29E9;
break;
case 0x29E9:
- ActorCutscene_Stop(this->cutscenes[this->cutsceneIdx]);
- this->cutsceneIdx = 1;
+ CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
+ this->csIdIndex = 1;
this->textId = 0x29EA;
break;
case 0x29EA:
- ActorCutscene_Stop(this->cutscenes[this->cutsceneIdx]);
- this->cutsceneIdx = 0;
+ CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
+ this->csIdIndex = 0;
this->textId = 0x29EB;
break;
case 0x29EB:
- ActorCutscene_Stop(this->cutscenes[this->cutsceneIdx]);
- this->cutsceneIdx = 1;
+ CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
+ this->csIdIndex = 1;
this->textId = 0x29EC;
break;
case 0x29EC:
- ActorCutscene_Stop(this->cutscenes[this->cutsceneIdx]);
- this->cutsceneIdx = 0;
+ CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
+ this->csIdIndex = 0;
this->textId = 0x29ED;
break;
case 0x29ED:
- ActorCutscene_Stop(this->cutscenes[this->cutsceneIdx]);
+ CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
this->flags1 |= 0x400;
- this->cutsceneIdx = 1;
+ this->csIdIndex = 1;
this->textId = 0x29EE;
break;
}
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- ActorCutscene_SetIntentToPlay(this->cutscenes[this->cutsceneIdx]);
+ CutsceneManager_Queue(this->csIdList[this->csIdIndex]);
this->actionFunc = func_80BADD0C;
} else if (this->flags1 & 1) {
switch (this->textId) {
case 0:
- if (gSaveContext.save.weekEventReg[81] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_81_01)) {
this->textId = 0x1455;
((EnElf*)GET_PLAYER(play)->tatlActor)->unk_264 |= 8;
this->flags2 |= 1;
@@ -382,12 +382,12 @@ void func_80BAAB78(EnSuttari* this, PlayState* play) {
} else {
this->flags1 |= 0x400;
this->textId = 0x1452;
- gSaveContext.save.weekEventReg[81] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_81_01);
}
break;
case 0x1453:
this->flags1 |= 0x400;
- gSaveContext.save.weekEventReg[81] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_81_01);
((EnElf*)GET_PLAYER(play)->tatlActor)->unk_264 |= 8;
this->flags2 |= 1;
this->textId = 0x1454;
@@ -452,11 +452,11 @@ void func_80BAAFDC(EnSuttari* this, PlayState* play) {
if (this->playerDetected == true) {
play_sound(NA_SE_SY_FOUND);
this->playerDetected = false;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->unk1F4[0] != 0) {
this->unk1F4[0]--;
}
- gSaveContext.save.weekEventReg[61] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_61_08);
this->unk3F6 = 20;
this->actionFunc = func_80BADE8C;
}
@@ -485,11 +485,11 @@ void func_80BAB1A0(EnSuttari* this, PlayState* play) {
if (this->playerDetected == true) {
play_sound(NA_SE_SY_FOUND);
this->playerDetected = false;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->unk1F4[0] != 0) {
this->unk1F4[0]--;
}
- gSaveContext.save.weekEventReg[61] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_61_08);
this->unk3F6 = 20;
this->actionFunc = func_80BADE8C;
} else {
@@ -531,7 +531,7 @@ void func_80BAB4F0(EnSuttari* this, PlayState* play) {
if (!(this->flags1 & 4) && (Player_GetMask(play) != PLAYER_MASK_STONE)) {
if (SubS_AngleDiffLessEqual(this->actor.shape.rot.y, 0x36B0, this->actor.yawTowardsPlayer)) {
point.x = player->actor.world.pos.x;
- point.y = player->bodyPartsPos[7].y + 3.0f;
+ point.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
point.z = player->actor.world.pos.z;
SubS_TrackPoint(&point, &this->actor.focus.pos, &this->actor.shape.rot, &this->trackTarget, &this->headRot,
&this->torsoRot, &sTrackOptions);
@@ -563,7 +563,7 @@ s16 EnSuttari_GetDistSqAndOrient(Path* path, s32 index, Vec3f* pos, f32* distSq)
}
*distSq = SQ(diffX) + SQ(diffZ);
- return RADF_TO_BINANG(Math_Acot2F(diffZ, diffX));
+ return RAD_TO_BINANG(Math_Atan2F_XY(diffZ, diffX));
}
s32 func_80BAB758(EnSuttari* this, Path* path, s32 arg2) {
@@ -589,7 +589,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, RADF_TO_BINANG(func_80086B30(sp54, sp48)), &sp44, &sp40, &sp3C);
+ func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(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 +619,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, RADF_TO_BINANG(func_80086B30(sp54, sp48)), &sp44, &sp40, &sp3C);
+ func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(sp54, sp48)), &sp44, &sp40, &sp3C);
if (((sp44 * this->actor.world.pos.x) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) {
ret = true;
}
@@ -632,7 +632,7 @@ void func_80BABA90(EnSuttari* this, s32 arg1, u8 arg2) {
if (this->paths[arg1] != NULL) {
target = EnSuttari_GetDistSqAndOrient(this->paths[arg1], this->unk1F4[arg1], &this->actor.world.pos, &dist);
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
if (arg2 == 2) {
this->unk1F4[arg1] = -0x63;
} else {
@@ -661,7 +661,7 @@ void func_80BABB90(EnSuttari* this, s32 arg1) {
if (this->paths[arg1] != NULL) {
target = EnSuttari_GetDistSqAndOrient(this->paths[arg1], this->unk1F4[arg1], &this->actor.world.pos, &sp30);
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
target = this->actor.wallYaw;
}
Math_SmoothStepToS(&this->actor.world.rot.y, target, 1, 0xBB8, 0);
@@ -858,17 +858,17 @@ void func_80BAC2FC(EnSuttari* this, PlayState* play) {
this->animIndex = 2;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex);
}
- if (!(gSaveContext.save.weekEventReg[83] & 4) && !(this->flags1 & 0x1000)) {
- if (ActorCutscene_GetCanPlayNext(this->cutscenes[0])) {
- ActorCutscene_Start(this->cutscenes[0], &this->actor);
- if (!(player->stateFlags1 & 0x10000000)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_83_04) && !(this->flags1 & 0x1000)) {
+ if (CutsceneManager_IsNext(this->csIdList[0])) {
+ CutsceneManager_Start(this->csIdList[0], &this->actor);
+ if (!(player->stateFlags1 & PLAYER_STATE1_10000000)) {
this->flags2 |= 0x10;
- player->stateFlags1 |= 0x10000000;
+ player->stateFlags1 |= PLAYER_STATE1_10000000;
}
this->flags1 |= 0x1000;
this->flags2 |= 2;
} else {
- ActorCutscene_SetIntentToPlay(this->cutscenes[0]);
+ CutsceneManager_Queue(this->csIdList[0]);
}
}
func_80BABFD4(this, play);
@@ -904,10 +904,10 @@ void func_80BAC2FC(EnSuttari* this, PlayState* play) {
func_80BABFD4(this, play);
break;
case 1:
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
break;
case 2:
- if (!(gSaveContext.save.weekEventReg[81] & 4)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_81_04)) {
this->flags1 |= 0x80;
this->actor.world.pos.x = -16.0f;
this->actor.world.pos.z = -16.0f;
@@ -917,7 +917,7 @@ void func_80BAC2FC(EnSuttari* this, PlayState* play) {
}
break;
case 4:
- if (!(gSaveContext.save.weekEventReg[33] & 8)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) {
if (this->animIndex == 2 || this->animIndex == 1) {
this->animIndex = 5;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex);
@@ -926,9 +926,9 @@ void func_80BAC2FC(EnSuttari* this, PlayState* play) {
if (this->flags2 & 2) {
this->flags2 &= ~2;
}
- if (!(player->stateFlags1 & 0x10000000)) {
+ if (!(player->stateFlags1 & PLAYER_STATE1_10000000)) {
this->flags2 |= 0x10;
- player->stateFlags1 |= 0x10000000;
+ player->stateFlags1 |= PLAYER_STATE1_10000000;
}
this->textId = 0x2A30;
Message_StartTextbox(play, this->textId, &this->actor);
@@ -954,8 +954,8 @@ void func_80BAC6E8(EnSuttari* this, PlayState* play) {
this->actionFunc = func_80BACA14;
return;
} else if ((gSaveContext.save.day == 3) && (gSaveContext.save.time <= CLOCK_TIME(19, 0)) &&
- !(gSaveContext.save.weekEventReg[61] & 8) && !(gSaveContext.save.weekEventReg[33] & 8) &&
- (gSaveContext.save.weekEventReg[51] & 8)) {
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_61_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08) &&
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_51_08)) {
this->animIndex = 2;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex);
this->actionFunc = func_80BACEE0;
@@ -963,14 +963,14 @@ void func_80BAC6E8(EnSuttari* this, PlayState* play) {
}
} else if (play->sceneId == SCENE_BACKTOWN) {
if (gSaveContext.save.time >= CLOCK_TIME(0, 20) && gSaveContext.save.time < CLOCK_TIME(6, 00)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
- if ((gSaveContext.save.entrance == ENTRANCE(NORTH_CLOCK_TOWN, 7)) ||
- (gSaveContext.save.weekEventReg[58] & 0x40)) {
- Actor_MarkForDeath(&this->actor);
+
+ if ((gSaveContext.save.entrance == ENTRANCE(NORTH_CLOCK_TOWN, 7)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_58_40)) {
+ Actor_Kill(&this->actor);
}
- this->cutscenes[0] = this->actor.cutscene;
- this->cutscenes[1] = ActorCutscene_GetAdditionalCutscene(this->cutscenes[0]);
+ this->csIdList[0] = this->actor.csId;
+ this->csIdList[1] = CutsceneManager_GetAdditionalCsId(this->csIdList[0]);
this->flags1 |= 0x80;
this->flags1 |= 8;
this->animIndex = 1;
@@ -978,8 +978,8 @@ void func_80BAC6E8(EnSuttari* this, PlayState* play) {
this->actionFunc = func_80BAD004;
return;
} else if (play->sceneId == SCENE_ICHIBA) {
- if (gSaveContext.save.weekEventReg[33] & 8) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) {
+ Actor_Kill(&this->actor);
return;
}
this->animIndex = 0;
@@ -988,14 +988,14 @@ void func_80BAC6E8(EnSuttari* this, PlayState* play) {
this->actionFunc = func_80BAD5F8;
return;
} else if (play->sceneId == SCENE_AYASHIISHOP) {
- if (gSaveContext.save.weekEventReg[33] & 8) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) {
+ Actor_Kill(&this->actor);
return;
}
this->animIndex = 0;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex);
- this->cutscenes[0] = this->actor.cutscene;
- this->cutscenes[1] = ActorCutscene_GetAdditionalCutscene(this->cutscenes[0]);
+ this->csIdList[0] = this->actor.csId;
+ this->csIdList[1] = CutsceneManager_GetAdditionalCsId(this->csIdList[0]);
this->flags1 |= 4;
this->actionFunc = func_80BAD7F8;
return;
@@ -1005,7 +1005,7 @@ void func_80BAC6E8(EnSuttari* this, PlayState* play) {
this->actionFunc = func_80BACA14;
return;
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
void func_80BACA14(EnSuttari* this, PlayState* play) {
@@ -1032,7 +1032,7 @@ void func_80BACA14(EnSuttari* this, PlayState* play) {
func_800B8614(&this->actor, play, 200.0f);
}
}
- Math_ApproachF(&this->actor.speedXZ, 5.0f, 0.2f, 0.1f);
+ Math_ApproachF(&this->actor.speed, 5.0f, 0.2f, 0.1f);
Actor_MoveWithGravity(&this->actor);
}
@@ -1045,7 +1045,7 @@ void func_80BACBB0(EnSuttari* this, PlayState* play) {
this->actionFunc = func_80BACA14;
}
if ((this->actor.playerHeightRel < 60.0f) && (this->actor.xzDistToPlayer < 500.0f)) {
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
target = this->actor.wallYaw;
} else if (func_80BAA904(this, play)) {
target = -this->actor.world.rot.y;
@@ -1054,13 +1054,13 @@ void func_80BACBB0(EnSuttari* this, PlayState* play) {
}
Math_SmoothStepToS(&this->actor.world.rot.y, target, 4, 0x3E8, 1);
this->actor.shape.rot.y = this->actor.world.rot.y;
- Math_ApproachF(&this->actor.speedXZ, 5.0f, 0.2f, 0.1f);
+ Math_ApproachF(&this->actor.speed, 5.0f, 0.2f, 0.1f);
} else {
this->actionFunc = func_80BACD2C;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
Actor_MoveWithGravity(&this->actor);
- if (!(this->actor.bgCheckFlags & 1)) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
this->actor.world.pos = this->actor.prevPos;
this->actor.world.rot.y = -this->actor.world.rot.y;
this->actionFunc = func_80BACE4C;
@@ -1076,13 +1076,13 @@ void func_80BACD2C(EnSuttari* this, PlayState* play) {
}
if ((this->actor.playerHeightRel < 60.0f) && (this->actor.xzDistToPlayer < 500.0f)) {
this->actionFunc = func_80BACBB0;
- Math_ApproachF(&this->actor.speedXZ, 5.0f, 0.2f, 0.1f);
+ Math_ApproachF(&this->actor.speed, 5.0f, 0.2f, 0.1f);
} else {
Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 4, 0x3E8, 1);
this->actor.shape.rot.y = this->actor.world.rot.y;
}
Actor_MoveWithGravity(&this->actor);
- if (!(this->actor.bgCheckFlags & 1)) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
this->actor.world.pos = this->actor.prevPos;
this->actor.world.rot.y = -this->actor.world.rot.y;
this->actionFunc = func_80BACE4C;
@@ -1104,7 +1104,7 @@ void func_80BACE4C(EnSuttari* this, PlayState* play) {
void func_80BACEE0(EnSuttari* this, PlayState* play) {
ScheduleOutput scheduleOutput;
- this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed);
+ this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
if (!Schedule_RunScript(play, D_80BAE820, &scheduleOutput) ||
((this->unk428 != scheduleOutput.result) && !func_80BABF64(this, play, &scheduleOutput))) {
this->actor.flags &= ~ACTOR_FLAG_1;
@@ -1116,9 +1116,9 @@ void func_80BACEE0(EnSuttari* this, PlayState* play) {
func_80BAC2FC(this, play);
func_80BAB434(this);
if (this->unk428 == 5) {
- gSaveContext.save.weekEventReg[58] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_58_80);
this->actionFunc = func_80BADDB4;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
} else if (Player_GetMask(play) != PLAYER_MASK_STONE) {
func_80BAB1A0(this, play);
}
@@ -1128,7 +1128,7 @@ void func_80BACEE0(EnSuttari* this, PlayState* play) {
void func_80BAD004(EnSuttari* this, PlayState* play) {
ScheduleOutput scheduleOutput;
- this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed);
+ this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
if (!Schedule_RunScript(play, D_80BAE820, &scheduleOutput) ||
((this->unk428 != scheduleOutput.result) && !func_80BABF64(this, play, &scheduleOutput))) {
this->actor.flags &= ~ACTOR_FLAG_1;
@@ -1168,26 +1168,26 @@ void func_80BAD130(EnSuttari* this, PlayState* play) {
}
void func_80BAD230(EnSuttari* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->cutscenes[1])) {
- ActorCutscene_Start(this->cutscenes[1], &this->actor);
+ if (CutsceneManager_IsNext(this->csIdList[1])) {
+ CutsceneManager_Start(this->csIdList[1], &this->actor);
this->textId = 0x2A31;
Message_StartTextbox(play, this->textId, &this->actor);
this->flags1 |= 0x4000;
- Audio_QueueSeqCmd(NA_BGM_CHASE | 0x8000);
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_CHASE | SEQ_FLAG_ASYNC);
this->actionFunc = func_80BAD380;
} else {
- ActorCutscene_SetIntentToPlay(this->cutscenes[1]);
+ CutsceneManager_Queue(this->csIdList[1]);
}
}
void func_80BAD2B4(EnSuttari* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
if (this->textId == 0x2A30) {
- ActorCutscene_Stop(this->cutscenes[0]);
- ActorCutscene_SetIntentToPlay(this->cutscenes[1]);
+ CutsceneManager_Stop(this->csIdList[0]);
+ CutsceneManager_Queue(this->csIdList[1]);
this->actionFunc = func_80BAD230;
} else {
- ActorCutscene_Stop(this->cutscenes[1]);
+ CutsceneManager_Stop(this->csIdList[1]);
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
this->flags1 |= 0x40;
@@ -1201,17 +1201,17 @@ void func_80BAD380(EnSuttari* this, PlayState* play) {
u8 talkState = Message_GetState(&play->msgCtx);
Player* player = GET_PLAYER(play);
- if ((player->stateFlags1 & 0x40) && (play->msgCtx.currentTextId != 0x2A31)) {
+ if ((player->stateFlags1 & PLAYER_STATE1_40) && (play->msgCtx.currentTextId != 0x2A31)) {
this->flags1 |= 0x8000;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
} else {
this->flags1 &= ~0x8000;
func_80BABA90(this, 1, 1);
if ((this->flags1 & 0x4000) && (talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
this->flags2 &= ~0x10;
- player->stateFlags1 &= ~0x10000000;
+ player->stateFlags1 &= ~PLAYER_STATE1_10000000;
this->flags1 &= ~0x4000;
- ActorCutscene_Stop(this->cutscenes[1]);
+ CutsceneManager_Stop(this->csIdList[1]);
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
this->flags1 |= 0x40;
@@ -1220,26 +1220,26 @@ void func_80BAD380(EnSuttari* this, PlayState* play) {
this->flags2 |= 8;
func_80BAAF1C(this);
} else if (this->flags1 & 0x200) {
- gSaveContext.save.weekEventReg[79] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_79_40);
this->flags2 |= 4;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->actor.world.pos.x, this->actor.world.pos.y,
this->actor.world.pos.z, 0, 0, 0, CLEAR_TAG_SMALL_EXPLOSION);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 30, NA_SE_IT_BOMB_EXPLOSION);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
if (this->unk1F4[1] == -0x63) {
if (this->flags2 & 8) {
- gSaveContext.save.weekEventReg[33] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_33_08);
}
- this->actor.speedXZ = 0.0f;
- Audio_QueueSeqCmd(0x101400FF);
+ this->actor.speed = 0.0f;
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 20);
this->flags2 |= 4;
EnSuttari_TriggerTransition(play, ENTRANCE(NORTH_CLOCK_TOWN, 7));
} else {
this->unk3F2 = this->headRot.y;
- Math_ApproachF(&this->actor.speedXZ, 4.0f, 0.2f, 0.5f);
+ Math_ApproachF(&this->actor.speed, 4.0f, 0.2f, 0.5f);
Actor_MoveWithGravity(&this->actor);
func_80BAB374(this, play);
}
@@ -1255,7 +1255,7 @@ void func_80BAD5F8(EnSuttari* this, PlayState* play) {
this->animIndex = 2;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex);
}
- this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed);
+ this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
if (!Schedule_RunScript(play, D_80BAE820, &scheduleOutput) ||
((this->unk428 != scheduleOutput.result) && !func_80BABF64(this, play, &scheduleOutput))) {
this->actor.flags &= ~ACTOR_FLAG_1;
@@ -1266,7 +1266,7 @@ void func_80BAD5F8(EnSuttari* this, PlayState* play) {
this->unk428 = scheduleOutput.result;
func_80BAC2FC(this, play);
if ((this->unk430 == 1) && (this->timePath->unk1 == 0xFF)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
func_80BAB434(this);
@@ -1293,7 +1293,7 @@ void func_80BAD7F8(EnSuttari* this, PlayState* play) {
this->animIndex = 2;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex);
}
- this->timePathTimeSpeed = REG(15) + ((void)0, gSaveContext.save.daySpeed);
+ this->timePathTimeSpeed = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
if (!Schedule_RunScript(play, D_80BAE820, &scheduleOutput) ||
((this->unk428 != scheduleOutput.result) && !func_80BABF64(this, play, &scheduleOutput))) {
this->actor.flags &= ~ACTOR_FLAG_1;
@@ -1304,7 +1304,7 @@ void func_80BAD7F8(EnSuttari* this, PlayState* play) {
this->unk428 = scheduleOutput.result;
func_80BAC2FC(this, play);
if ((this->unk430 == 1) && (this->timePath->unk1 == 0xFF)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
if ((this->flags1 & 0x20) && (scheduleOutput.result != 9)) {
@@ -1323,7 +1323,7 @@ void func_80BADA08(EnSuttari* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->actor.flags &= ~ACTOR_FLAG_10000;
func_80BAAB78(this, play);
- gSaveContext.save.weekEventReg[81] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_81_04);
} else if (this->actor.xzDistToPlayer < 500.0f) {
this->actor.flags |= ACTOR_FLAG_10000;
func_800B8614(&this->actor, play, 500.0f);
@@ -1346,7 +1346,7 @@ void func_80BADA9C(EnSuttari* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
if (this->flags1 & 0x400) {
if (this->textId == 0x29EE) {
- ActorCutscene_Stop(this->cutscenes[this->cutsceneIdx]);
+ CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
}
this->flags1 &= ~0x400;
if (this->flags2 & 1) {
@@ -1385,23 +1385,23 @@ void func_80BADA9C(EnSuttari* this, PlayState* play) {
}
void func_80BADD0C(EnSuttari* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->cutscenes[this->cutsceneIdx])) {
- if (this->cutsceneIdx == 0) {
- ActorCutscene_Start(this->cutscenes[this->cutsceneIdx], &this->enFsn->actor);
+ if (CutsceneManager_IsNext(this->csIdList[this->csIdIndex])) {
+ if (this->csIdIndex == 0) {
+ CutsceneManager_Start(this->csIdList[this->csIdIndex], &this->enFsn->actor);
} else {
- ActorCutscene_Start(this->cutscenes[this->cutsceneIdx], &this->actor);
+ CutsceneManager_Start(this->csIdList[this->csIdIndex], &this->actor);
}
func_80BAAA94(this);
this->actionFunc = func_80BADA9C;
} else {
- ActorCutscene_SetIntentToPlay(this->cutscenes[this->cutsceneIdx]);
+ CutsceneManager_Queue(this->csIdList[this->csIdIndex]);
}
}
void func_80BADDB4(EnSuttari* this, PlayState* play) {
func_80BABA90(this, 1, 1);
func_80BAB434(this);
- if (gSaveContext.save.weekEventReg[51] & 0x10) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_51_10)) {
this->actionFunc = func_80BADE14;
}
Actor_MoveWithGravity(&this->actor);
@@ -1410,10 +1410,10 @@ void func_80BADDB4(EnSuttari* this, PlayState* play) {
void func_80BADE14(EnSuttari* this, PlayState* play) {
func_80BABA90(this, 1, 2);
if (this->unk1F4[1] == -0x63) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
} else {
this->unk3F2 = this->headRot.y;
- Math_ApproachF(&this->actor.speedXZ, 6.0f, 0.2f, 0.5f);
+ Math_ApproachF(&this->actor.speed, 6.0f, 0.2f, 0.5f);
}
Actor_MoveWithGravity(&this->actor);
}
@@ -1434,11 +1434,11 @@ void func_80BADE8C(EnSuttari* this, PlayState* play) {
void func_80BADF3C(EnSuttari* this, PlayState* play) {
func_80BABB90(this, 0);
if (this->unk1F4[0] == -0x63) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
this->unk3F2 = this->headRot.y;
if (DECR(this->unk3F6) == 0) {
- Math_ApproachF(&this->actor.speedXZ, 6.0f, 0.2f, 0.5f);
+ Math_ApproachF(&this->actor.speed, 6.0f, 0.2f, 0.5f);
}
Actor_MoveWithGravity(&this->actor);
}
@@ -1447,8 +1447,8 @@ void EnSuttari_Init(Actor* thisx, PlayState* play) {
EnSuttari* this = THIS;
s32 pad;
- if (gSaveContext.save.weekEventReg[79] & 0x40) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_40)) {
+ Actor_Kill(&this->actor);
return;
}
Collider_InitCylinder(play, &this->collider);
@@ -1465,7 +1465,7 @@ void EnSuttari_Destroy(Actor* thisx, PlayState* play) {
EnSuttari* this = THIS;
if ((play->sceneId == SCENE_BACKTOWN) && !(this->flags2 & 4)) {
- Audio_QueueSeqCmd(0x101400FF);
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 20);
}
Collider_DestroyCylinder(play, &this->collider);
}
@@ -1476,7 +1476,7 @@ void EnSuttari_Update(Actor* thisx, PlayState* play) {
Player* player = GET_PLAYER(play);
this->actionFunc(this, play);
- if ((this->flags1 & 8) && (this->flags2 & 0x10) && (player->stateFlags1 & 0x10000000)) {
+ if ((this->flags1 & 8) && (this->flags2 & 0x10) && (player->stateFlags1 & PLAYER_STATE1_10000000)) {
player->actor.freezeTimer = 3;
}
if (!(this->flags1 & 0x8000)) {
@@ -1488,11 +1488,11 @@ void EnSuttari_Update(Actor* thisx, PlayState* play) {
if (this->unk428 != 0) {
if (this->animIndex == 2 || this->animIndex == 6) {
if (Animation_OnFrame(&this->skelAnime, 8.0f) || Animation_OnFrame(&this->skelAnime, 16.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_PAMERA_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_PAMERA_WALK);
}
} else if (this->animIndex == 0 || this->animIndex == 5) {
if (Animation_OnFrame(&this->skelAnime, 8.0f) || Animation_OnFrame(&this->skelAnime, 17.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_PAMERA_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_PAMERA_WALK);
}
}
}
@@ -1562,11 +1562,12 @@ void EnSuttari_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
void EnSuttari_Draw(Actor* thisx, PlayState* play) {
EnSuttari* this = THIS;
s32 pad;
- Vec3f sp5C;
- Vec3f sp50;
+ Vec3f pos;
+ Vec3f scale;
if (this->flags1 & 0x80) {
OPEN_DISPS(play->state.gfxCtx);
+
func_8012C28C(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));
@@ -1576,12 +1577,13 @@ void EnSuttari_Draw(Actor* thisx, PlayState* play) {
EnSuttari_TransformLimbDraw, &this->actor);
if (this->flags1 & 0x80) {
func_8012C2DC(play->state.gfxCtx);
- sp5C = this->actor.world.pos;
- sp50.x = 0.2f;
- sp50.y = 0.2f;
- sp50.z = 0.2f;
- func_800BC620(&sp5C, &sp50, 0xFF, play);
+ pos = this->actor.world.pos;
+ scale.x = 0.2f;
+ scale.y = 0.2f;
+ scale.z = 0.2f;
+ func_800BC620(&pos, &scale, 255, play);
}
+
CLOSE_DISPS(play->state.gfxCtx);
}
}
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 427f74988..071000763 100644
--- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.h
+++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.h
@@ -56,10 +56,8 @@ typedef struct EnSuttari {
/* 0x444 */ Vec3f unk444;
/* 0x450 */ s32 animIndex;
/* 0x454 */ UNK_TYPE1 unk_454[0x2];
- /* 0x456 */ s16 cutscenes[2];
- /* 0x45A */ s16 cutsceneIdx;
+ /* 0x456 */ s16 csIdList[2];
+ /* 0x45A */ s16 csIdIndex;
} EnSuttari; // size = 0x45C
-extern const ActorInit En_Suttari_InitVars;
-
#endif // Z_EN_SUTTARI_H
diff --git a/src/overlays/actors/ovl_En_Sw/overlay.cfg b/src/overlays/actors/ovl_En_Sw/overlay.cfg
deleted file mode 100644
index af7fca6ea..000000000
--- a/src/overlays/actors/ovl_En_Sw/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Sw
-z_en_sw.c
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 fc3aff029..1bb664416 100644
--- a/src/overlays/actors/ovl_En_Sw/z_en_sw.c
+++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.c
@@ -28,7 +28,7 @@ void func_808DB100(EnSw* this, PlayState* play);
void func_808DB25C(EnSw* this, PlayState* play);
void func_808DB2E0(EnSw* this, PlayState* play);
-const ActorInit En_Sw_InitVars = {
+ActorInit En_Sw_InitVars = {
ACTOR_EN_SW,
ACTORCAT_NPC,
FLAGS,
@@ -277,7 +277,7 @@ void func_808D90F0(EnSw* this, s32 arg1, s16 arg2) {
temp = arg2;
}
- Matrix_RotateAxisF(BINANG_TO_RAD(temp), &this->unk_368, MTXMODE_NEW);
+ Matrix_RotateAxisF(BINANG_TO_RAD_ALT(temp), &this->unk_368, MTXMODE_NEW);
Matrix_MultVec3f(&this->unk_350, &sp2C);
Math_Vec3f_Copy(&this->unk_350, &sp2C);
Math3D_CrossProduct(&this->unk_368, &this->unk_350, &this->unk_35C);
@@ -352,7 +352,7 @@ s32 func_808D9440(PlayState* play, Vec3f* posA, Vec3f* posB, Vec3f* posResult, C
s32 ret = false;
if (BgCheck_EntityLineTest1(&play->colCtx, posA, posB, posResult, outPoly, true, true, true, true, bgId) &&
- !(func_800C9A4C(&play->colCtx, *outPoly, *bgId) & 0x30)) {
+ !(SurfaceType_GetWallFlags(&play->colCtx, *outPoly, *bgId) & (WALL_FLAG_4 | WALL_FLAG_5))) {
ret = true;
}
return ret;
@@ -378,8 +378,8 @@ void func_808D94D0(EnSw* this, PlayState* play, s32 arg2, s32 arg3, s16 arg4) {
sp68 = BGCHECK_SCENE;
sp64 = BGCHECK_SCENE;
func_808D90F0(this, arg3, arg4);
- this->actor.speedXZ = this->unk_44C;
- temp_f20 = thisx->speedXZ * 2.0f;
+ this->actor.speed = this->unk_44C;
+ temp_f20 = thisx->speed * 2.0f;
sp90.x = this->actor.world.pos.x + (this->unk_368.x * 2.0f);
sp90.y = this->actor.world.pos.y + (this->unk_368.y * 2.0f);
@@ -397,7 +397,7 @@ void func_808D94D0(EnSw* this, PlayState* play, s32 arg2, s32 arg3, s16 arg4) {
func_808D91C4(this, spA4);
Math_Vec3f_Copy(&this->actor.world.pos, &sp78);
this->actor.floorBgId = sp64;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
} else {
if (spA0 != this->actor.floorPoly) {
func_808D91C4(this, spA0);
@@ -406,7 +406,7 @@ void func_808D94D0(EnSw* this, PlayState* play, s32 arg2, s32 arg3, s16 arg4) {
this->actor.floorBgId = sp68;
}
} else {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
temp_f20 *= 3.0f;
Math_Vec3f_Copy(&sp90, &sp84);
@@ -440,8 +440,8 @@ void func_808D94D0(EnSw* this, PlayState* play, s32 arg2, s32 arg3, s16 arg4) {
this->actor.shape.rot.y = this->actor.world.rot.y;
this->actor.shape.rot.z = this->actor.world.rot.z;
- if (this->actor.speedXZ != 0.0f) {
- this->unk_44C = this->actor.speedXZ;
+ if (this->actor.speed != 0.0f) {
+ this->unk_44C = this->actor.speed;
}
if (arg2 == 1) {
@@ -504,8 +504,8 @@ s32 func_808D99C8(EnSw* this, PlayState* play) {
return false;
}
- if ((this->actor.xyzDistToPlayerSq < ((sREG(16) * 10) + 60000)) && (play->actorCtx.unk1F5 != 0) &&
- (play->actorCtx.unk1F4 == 0)) {
+ if ((this->actor.xyzDistToPlayerSq < ((sREG(16) * 10) + 60000)) && (play->actorCtx.unk_1F4.timer != 0) &&
+ (play->actorCtx.unk_1F4.unk_00 == 0)) {
this->actor.colChkInfo.damage = 4;
phi_v1 = true;
}
@@ -524,9 +524,9 @@ s32 func_808D9A70(EnSw* this, PlayState* play) {
} else {
if (this->unk_456 != 0) {
if (!ENSW_GET_3(&this->actor)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALWALL_ROLL);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALWALL_ROLL);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALGOLD_ROLL);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALGOLD_ROLL);
}
this->unk_456--;
this->skelAnime.curFrame = 0.0f;
@@ -555,15 +555,15 @@ s32 func_808D9C18(EnSw* this) {
f32 new_var;
if ((this->unk_498 == 0xF9) || (this->unk_498 == 0x82) || (this->unk_498 == 0xE4) || (this->unk_498 == 0xE5)) {
- this->actor.velocity.x = this->actor.speedXZ;
- this->actor.velocity.z = this->actor.speedXZ;
+ this->actor.velocity.x = this->actor.speed;
+ this->actor.velocity.z = this->actor.speed;
this->actor.velocity.x *= Math_SinS(this->actor.world.rot.y);
this->actor.velocity.z *= Math_CosS(this->actor.world.rot.y);
} else {
- new_var = this->actor.speedXZ * this->unk_350.x;
- this->actor.velocity.x = new_var + (this->actor.speedXZ * this->unk_368.x);
- new_var = this->actor.speedXZ * this->unk_350.z;
- this->actor.velocity.z = new_var + this->actor.speedXZ * this->unk_368.z;
+ new_var = this->actor.speed * this->unk_350.x;
+ this->actor.velocity.x = new_var + (this->actor.speed * this->unk_368.x);
+ new_var = this->actor.speed * this->unk_350.z;
+ this->actor.velocity.z = new_var + this->actor.speed * this->unk_368.z;
this->actor.velocity.y = 14.0f;
Math_Vec3f_Copy(&sp3C, &this->actor.world.pos);
Math_Vec3f_Copy(&sp30, &this->actor.world.pos);
@@ -575,7 +575,7 @@ s32 func_808D9C18(EnSw* this) {
this->actor.world.rot.y = Math_Vec3f_Yaw(&sp3C, &sp30);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALTURA_APPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALTURA_APPEAR);
if (ENSW_GET_3(&this->actor) == 1) {
Actor_SetScale(&this->actor, 0.0f);
@@ -635,10 +635,10 @@ void func_808D9F78(EnSw* this, PlayState* play, s32 arg2) {
}
Actor_SetScale(&this->actor, 0.02f);
func_808D9DA0(this);
- this->actor.speedXZ = 10.0f;
+ this->actor.speed = 10.0f;
this->unk_44C = 10.0f;
func_808D94D0(this, play, 0, 0, 0);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->unk_44C = 0.0f;
this->unk_450 = 1.0f;
Math_Vec3f_Copy(&this->actor.home.pos, &this->actor.world.pos);
@@ -647,10 +647,10 @@ void func_808D9F78(EnSw* this, PlayState* play, s32 arg2) {
void func_808DA024(EnSw* this, PlayState* play) {
func_808D9DA0(this);
- this->actor.speedXZ = 10.0f;
+ this->actor.speed = 10.0f;
this->unk_44C = 10.0f;
func_808D94D0(this, play, 0, 0, 0);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->unk_44C = 0.0f;
this->unk_450 = 1.0f;
}
@@ -717,19 +717,20 @@ s32 func_808DA08C(EnSw* this, PlayState* play) {
}
this->unk_458 = 20;
this->unk_45A = 0;
- Actor_SetColorFilter(&this->actor, 0x4000, 200, 0, this->unk_458);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 200, COLORFILTER_BUFFLAG_OPA, this->unk_458);
ret = true;
} else if (this->actor.colChkInfo.damageEffect == 1) {
if (this->unk_45A == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
this->unk_45A = 40;
- Actor_SetColorFilter(&this->actor, 0, 200, 0, this->unk_45A);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 200, COLORFILTER_BUFFLAG_OPA,
+ this->unk_45A);
}
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALTU_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALTU_DAMAGE);
this->unk_458 = 20;
this->unk_45A = 0;
- Actor_SetColorFilter(&this->actor, 0x4000, 200, 0, this->unk_458);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 200, COLORFILTER_BUFFLAG_OPA, this->unk_458);
}
}
return ret;
@@ -738,8 +739,8 @@ s32 func_808DA08C(EnSw* this, PlayState* play) {
void func_808DA350(EnSw* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if ((player->stateFlags1 & 0x200000) && (this->actor.xyzDistToPlayerSq < 8000.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALWALL_LAUGH);
+ if ((player->stateFlags1 & PLAYER_STATE1_200000) && (this->actor.xyzDistToPlayerSq < 8000.0f)) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALWALL_LAUGH);
Math_Vec3f_Copy(&this->unk_374, &player->actor.world.pos);
this->unk_410 &= ~0x20;
this->unk_414 = 0.0f;
@@ -761,10 +762,10 @@ void func_808DA3F4(EnSw* this, PlayState* play) {
Math_Vec3f_Copy(&sp38, &this->unk_374);
func_808D9894(this, &sp38);
- temp_v0 = Math_FAtan2F(sp38.z, sp38.x);
+ temp_v0 = Math_Atan2S_XY(sp38.z, sp38.x);
if (ABS_ALT(temp_v0) < temp_s1) {
this->skelAnime.curFrame = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALWALL_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALWALL_DASH);
this->unk_414 = 0.0f;
if (this->unk_410 & 0x20) {
this->actionFunc = func_808DA6FC;
@@ -775,7 +776,7 @@ void func_808DA3F4(EnSw* this, PlayState* play) {
}
temp_s1 *= (temp_v0 < 0) ? -1 : 1;
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALWALL_ROLL);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALWALL_ROLL);
this->skelAnime.curFrame = 0.0f;
}
func_808D94D0(this, play, 0, 0, temp_s1);
@@ -791,17 +792,17 @@ void func_808DA578(EnSw* this, PlayState* play) {
temp_f0 = this->skelAnime.endFrame - this->skelAnime.curFrame;
this->unk_44C = 0.3f * temp_f0;
func_808D94D0(this, play, 1, 0, 0);
- if ((this->actor.speedXZ == 0.0f) && (this->unk_44C != 0.0f)) {
+ if ((this->actor.speed == 0.0f) && (this->unk_44C != 0.0f)) {
Math_Vec3f_Copy(&sp30, &this->unk_374);
func_808D9894(this, &sp30);
- temp2 = Math_FAtan2F(sp30.z, sp30.x);
+ temp2 = Math_Atan2S_XY(sp30.z, sp30.x);
func_808D94D0(this, play, 0, 0, temp2);
}
} else if (this->unk_410 & 0x20) {
Math_Vec3f_Copy(&this->unk_374, &this->actor.home.pos);
this->actionFunc = func_808DA3F4;
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALWALL_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALWALL_DASH);
this->skelAnime.curFrame = 0.0f;
}
@@ -822,14 +823,14 @@ void func_808DA6FC(EnSw* this, PlayState* play) {
temp_f0 = this->skelAnime.endFrame - this->skelAnime.curFrame;
this->unk_44C = 0.14f * temp_f0;
func_808D94D0(this, play, 1, 0, 0);
- if ((this->actor.speedXZ == 0.0f) && (this->unk_44C != 0.0f)) {
+ if ((this->actor.speed == 0.0f) && (this->unk_44C != 0.0f)) {
Math_Vec3f_Copy(&sp38, &this->unk_374);
func_808D9894(this, &sp38);
- temp2 = Math_FAtan2F(sp38.z, sp38.x);
+ temp2 = Math_Atan2S_XY(sp38.z, sp38.x);
func_808D94D0(this, play, 0, 0, temp2);
}
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALWALL_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALWALL_DASH);
this->skelAnime.curFrame = 0.0f;
}
@@ -873,16 +874,16 @@ void func_808DA89C(EnSw* this, PlayState* play) {
} else if (ENSW_GET_3(&this->actor)) {
this->actionFunc = func_808DAEB4;
} else {
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
f32 temp_f2;
this->actor.shape.yOffset = 400.0f;
temp_f2 = fabsf(this->actor.velocity.y) * 0.6f;
this->actor.velocity.y = temp_f2;
this->unk_448 = temp_f2;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if ((s32)temp_f2 != 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALTURA_BOUND);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALTURA_BOUND);
} else {
this->actionFunc = func_808DAEB4;
this->actor.velocity.y = 0.0f;
@@ -895,7 +896,7 @@ void func_808DA89C(EnSw* this, PlayState* play) {
}
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
}
}
@@ -916,10 +917,10 @@ void func_808DAA60(EnSw* this, PlayState* play) {
if (this->unk_45E == 0) {
Math_Vec3s_ToVec3f(&sp34, &sp44[this->unk_4A0]);
func_808D9894(this, &sp34);
- temp_v0 = Math_FAtan2F(sp34.z, sp34.x);
+ temp_v0 = Math_Atan2S_XY(sp34.z, sp34.x);
if (ABS_ALT(temp_v0) < sp40) {
this->skelAnime.curFrame = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALWALL_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALWALL_DASH);
Math_Vec3s_ToVec3f(&this->unk_374, &sp44[this->unk_4A0]);
this->actionFunc = func_808DACF4;
this->unk_414 = 0.0f;
@@ -929,7 +930,7 @@ void func_808DAA60(EnSw* this, PlayState* play) {
}
} else {
if (this->unk_456 != 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALGOLD_ROLL);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALGOLD_ROLL);
this->unk_456--;
this->skelAnime.curFrame = 0.0f;
} else {
@@ -963,15 +964,15 @@ void func_808DACF4(EnSw* this, PlayState* play) {
temp = this->skelAnime.endFrame - this->skelAnime.curFrame;
this->unk_44C = 0.1f * temp;
func_808D94D0(this, play, 1, 0, 0);
- if ((this->actor.speedXZ == 0.0f) && (this->unk_44C != 0.0f)) {
+ if ((this->actor.speed == 0.0f) && (this->unk_44C != 0.0f)) {
Math_Vec3f_Copy(&sp38, &this->unk_374);
func_808D9894(this, &sp38);
- temp_f6 = Math_FAtan2F(sp38.z, sp38.x);
+ temp_f6 = Math_Atan2S_XY(sp38.z, sp38.x);
func_808D94D0(this, play, 0, 0, temp_f6);
}
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALWALL_DASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALWALL_DASH);
this->skelAnime.curFrame = 0.0f;
}
@@ -1023,7 +1024,7 @@ void func_808DAEB4(EnSw* this, PlayState* play) {
}
if (count == ARRAY_COUNT(this->unk_464)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else {
Math_ApproachF(&this->actor.scale.x, 0.0f, 0.08f, 1.0f);
@@ -1038,7 +1039,7 @@ void func_808DAEB4(EnSw* this, PlayState* play) {
0, this->actor.params) != NULL) {
play_sound(NA_SE_SY_KINSTA_MARK_APPEAR);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
func_808D94D0(this, play, 0, 0, 0x1554);
}
@@ -1075,9 +1076,9 @@ void func_808DB100(EnSw* this, PlayState* play) {
if ((DECR(this->unk_454) == 0) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
if (this->unk_456 != 0) {
if (!ENSW_GET_3(&this->actor)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALWALL_ROLL);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALWALL_ROLL);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALGOLD_ROLL);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALGOLD_ROLL);
}
this->unk_456--;
this->skelAnime.curFrame = 0.0f;
@@ -1089,21 +1090,21 @@ void func_808DB100(EnSw* this, PlayState* play) {
}
void func_808DB25C(EnSw* this, PlayState* play) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ } else if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
func_808D9C18(this);
this->actionFunc = func_808DB2E0;
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
void func_808DB2E0(EnSw* this, PlayState* play) {
f32 temp_f2;
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
func_808D9F78(this, play, 0);
temp_f2 = fabsf(this->actor.velocity.y) * 0.6f;
this->actor.velocity.x *= 0.5f;
@@ -1112,7 +1113,7 @@ void func_808DB2E0(EnSw* this, PlayState* play) {
this->actor.velocity.z *= 0.5f;
if ((s32)temp_f2 != 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALTURA_BOUND);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALTURA_BOUND);
} else {
func_800BC154(play, &play->actorCtx, &this->actor, 5);
Math_Vec3f_Copy(&this->actor.velocity, &gZeroVec3f);
@@ -1129,7 +1130,7 @@ void func_808DB2E0(EnSw* this, PlayState* play) {
Actor_SetScale(&this->actor, this->actor.scale.x);
this->actor.velocity.y += this->actor.gravity;
Actor_UpdatePos(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
}
void EnSw_Init(Actor* thisx, PlayState* play) {
@@ -1210,7 +1211,7 @@ void EnSw_Init(Actor* thisx, PlayState* play) {
break;
}
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&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 7bf39b6c2..4544346a0 100644
--- a/src/overlays/actors/ovl_En_Sw/z_en_sw.h
+++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.h
@@ -50,6 +50,4 @@ typedef struct EnSw {
/* 0x4A0 */ s32 unk_4A0;
} EnSw; // size = 0x4A4
-extern const ActorInit En_Sw_InitVars;
-
#endif // Z_EN_SW_H
diff --git a/src/overlays/actors/ovl_En_Syateki_Crow/overlay.cfg b/src/overlays/actors/ovl_En_Syateki_Crow/overlay.cfg
deleted file mode 100644
index 5a90d72e0..000000000
--- a/src/overlays/actors/ovl_En_Syateki_Crow/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Syateki_Crow
-z_en_syateki_crow.c
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 0b76c7715..abc773637 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
@@ -7,7 +7,7 @@
#include "z_en_syateki_crow.h"
#include "overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h"
-#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_8000000)
+#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_CANT_LOCK_ON)
#define THIS ((EnSyatekiCrow*)thisx)
@@ -16,8 +16,8 @@ void EnSyatekiCrow_Destroy(Actor* thisx, PlayState* play);
void EnSyatekiCrow_Update(Actor* thisx, PlayState* play);
void EnSyatekiCrow_Draw(Actor* thisx, PlayState* play);
-void EnSyatekiCrow_SetupWaitForSpawn(EnSyatekiCrow* this);
-void EnSyatekiCrow_WaitForSpawn(EnSyatekiCrow* this, PlayState* play);
+void EnSyatekiCrow_SetupWaitForSignal(EnSyatekiCrow* this);
+void EnSyatekiCrow_WaitForSignal(EnSyatekiCrow* this, PlayState* play);
void EnSyatekiCrow_SetupWaitToMove(EnSyatekiCrow* this);
void EnSyatekiCrow_WaitToMove(EnSyatekiCrow* this, PlayState* play);
void EnSyatekiCrow_Fly(EnSyatekiCrow* this, PlayState* play);
@@ -25,7 +25,7 @@ void EnSyatekiCrow_Dead(EnSyatekiCrow* this, PlayState* play);
static Vec3f sZeroVec = { 0.0f, 0.0f, 0.0f };
-const ActorInit En_Syateki_Crow_InitVars = {
+ActorInit En_Syateki_Crow_InitVars = {
ACTOR_EN_SYATEKI_CROW,
ACTORCAT_ENEMY,
FLAGS,
@@ -96,7 +96,7 @@ void EnSyatekiCrow_Init(Actor* thisx, PlayState* play2) {
ActorShape_Init(&this->actor.shape, 2000.0f, ActorShadow_DrawCircle, 20.0f);
if ((path == NULL) || (EN_SYATEKI_CROW_GET_INDEX(&this->actor) >= 0x80)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -105,7 +105,7 @@ void EnSyatekiCrow_Init(Actor* thisx, PlayState* play2) {
this->maxPointIndex = path->count;
this->deathTimer = 20;
this->waitTimer = 0;
- EnSyatekiCrow_SetupWaitForSpawn(this);
+ EnSyatekiCrow_SetupWaitForSignal(this);
}
void EnSyatekiCrow_Destroy(Actor* thisx, PlayState* play) {
@@ -114,22 +114,22 @@ void EnSyatekiCrow_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyJntSph(play, &this->collider);
}
-void EnSyatekiCrow_SetupWaitForSpawn(EnSyatekiCrow* this) {
+void EnSyatekiCrow_SetupWaitForSignal(EnSyatekiCrow* this) {
Actor_SetScale(&this->actor, 0.03f);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.gravity = 0.0f;
this->actor.world = this->actor.home;
this->actor.prevPos = this->actor.home.pos;
this->actor.shape.rot = this->actor.world.rot;
this->currentPointIndex = 1;
this->actor.draw = NULL;
- this->actionFunc = EnSyatekiCrow_WaitForSpawn;
+ this->actionFunc = EnSyatekiCrow_WaitForSignal;
}
/**
- * Waits until the shooting gallery man sets the appropriate Guay flag to spawn.
+ * Waits until the shooting gallery man sets the appropriate Guay flag.
*/
-void EnSyatekiCrow_WaitForSpawn(EnSyatekiCrow* this, PlayState* play) {
+void EnSyatekiCrow_WaitForSignal(EnSyatekiCrow* this, PlayState* play) {
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
if ((syatekiMan->shootingGameState == SG_GAME_STATE_RUNNING) && (this->isActive == true) &&
@@ -144,6 +144,10 @@ void EnSyatekiCrow_WaitForSpawn(EnSyatekiCrow* this, PlayState* play) {
}
}
+/**
+ * Positions the Guay at the start of its assigned path and rotates it to face the
+ * next point on the path, then sets it up to start waiting.
+ */
void EnSyatekiCrow_SetupWaitToMove(EnSyatekiCrow* this) {
Vec3f targetPos;
@@ -165,9 +169,9 @@ void EnSyatekiCrow_SetupWaitToMove(EnSyatekiCrow* this) {
*/
void EnSyatekiCrow_WaitToMove(EnSyatekiCrow* this, PlayState* play) {
if (((EN_SYATEKI_CROW_GET_WAIT_MOD(&this->actor) * 20) + 20) < this->waitTimer) {
- Actor_PlaySfxAtPos(this->actor.parent, NA_SE_EN_KAICHO_CRY);
+ Actor_PlaySfx(this->actor.parent, NA_SE_EN_KAICHO_CRY);
this->waitTimer = 0;
- this->actor.speedXZ = EN_SYATEKI_CROW_GET_SPEED_MOD(&this->actor) + 6.0f;
+ this->actor.speed = EN_SYATEKI_CROW_GET_SPEED_MOD(&this->actor) + 6.0f;
this->actor.gravity = -0.5f;
this->actionFunc = EnSyatekiCrow_Fly;
} else {
@@ -181,7 +185,7 @@ void EnSyatekiCrow_Fly(EnSyatekiCrow* this, PlayState* play) {
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
if (syatekiMan->shootingGameState != SG_GAME_STATE_RUNNING) {
- EnSyatekiCrow_SetupWaitForSpawn(this);
+ EnSyatekiCrow_SetupWaitForSignal(this);
return;
}
@@ -203,13 +207,13 @@ void EnSyatekiCrow_Fly(EnSyatekiCrow* this, PlayState* play) {
} else {
this->isActive = false;
syatekiMan->guayFlags &= ~(1 << EN_SYATEKI_CROW_GET_INDEX(&this->actor));
- EnSyatekiCrow_SetupWaitForSpawn(this);
+ EnSyatekiCrow_SetupWaitForSignal(this);
}
SkelAnime_Update(&this->skelAnime);
this->actor.shape.yOffset = (fabsf(this->skelAnime.curFrame - 3.0f) * 150.0f) + 1700.0f;
if ((syatekiMan->perGameVar1.guaySpawnTimer % 90) == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KAICHO_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KAICHO_CRY);
}
}
@@ -218,19 +222,19 @@ void EnSyatekiCrow_SetupDead(EnSyatekiCrow* this) {
syatekiMan->score += 60;
this->isActive = false;
- this->actor.speedXZ *= Math_CosS(this->actor.world.rot.x);
+ this->actor.speed *= Math_CosS(this->actor.world.rot.x);
this->actor.velocity.y = 0.0f;
Animation_Change(&this->skelAnime, &gGuayFlyAnim, 0.4f, 0.0f, 0.0f, ANIMMODE_LOOP_INTERP, -3.0f);
- this->actor.bgCheckFlags &= ~1;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KAICHO_DEAD);
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 40);
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KAICHO_DEAD);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 40);
this->actionFunc = EnSyatekiCrow_Dead;
}
void EnSyatekiCrow_Dead(EnSyatekiCrow* this, PlayState* play) {
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.5f);
+ Math_StepToF(&this->actor.speed, 0.0f, 0.5f);
this->actor.colorFilterTimer = 40;
if (this->actor.colorFilterParams & 0x4000) {
@@ -242,7 +246,7 @@ void EnSyatekiCrow_Dead(EnSyatekiCrow* this, PlayState* play) {
func_800B3030(play, &this->actor.world.pos, &sZeroVec, &sZeroVec, this->actor.scale.x * 10000.0f, 0, 0);
syatekiMan->guayHitCounter++;
syatekiMan->guayFlags &= ~(1 << EN_SYATEKI_CROW_GET_INDEX(&this->actor));
- EnSyatekiCrow_SetupWaitForSpawn(this);
+ EnSyatekiCrow_SetupWaitForSignal(this);
}
this->deathTimer++;
diff --git a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.h b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.h
index f7a876285..f244b0b60 100644
--- a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.h
+++ b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.h
@@ -32,6 +32,4 @@ typedef struct EnSyatekiCrow {
/* 0x25C */ ColliderJntSphElement colliderElements[1];
} EnSyatekiCrow; // size = 0x29C
-extern const ActorInit En_Syateki_Crow_InitVars;
-
#endif // Z_EN_SYATEKI_CROW_H
diff --git a/src/overlays/actors/ovl_En_Syateki_Dekunuts/overlay.cfg b/src/overlays/actors/ovl_En_Syateki_Dekunuts/overlay.cfg
deleted file mode 100644
index 1165e9df0..000000000
--- a/src/overlays/actors/ovl_En_Syateki_Dekunuts/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Syateki_Dekunuts
-z_en_syateki_dekunuts.c
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 b7e79fdfd..20abd71e4 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
@@ -8,7 +8,7 @@
#include "overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h"
#include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h"
-#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_8000000)
+#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_CANT_LOCK_ON)
#define THIS ((EnSyatekiDekunuts*)thisx)
@@ -17,10 +17,10 @@ void EnSyatekiDekunuts_Destroy(Actor* thisx, PlayState* play);
void EnSyatekiDekunuts_Update(Actor* thisx, PlayState* play);
void EnSyatekiDekunuts_Draw(Actor* thisx, PlayState* play);
-void EnSyatekiDekunuts_SetupWaitForSpawn(EnSyatekiDekunuts* this);
-void EnSyatekiDekunuts_WaitForSpawn(EnSyatekiDekunuts* this, PlayState* play);
-void EnSyatekiDekunuts_SetupSpawn(EnSyatekiDekunuts* this);
-void EnSyatekiDekunuts_Spawn(EnSyatekiDekunuts* this, PlayState* play);
+void EnSyatekiDekunuts_SetupWaitForSignal(EnSyatekiDekunuts* this);
+void EnSyatekiDekunuts_WaitForSignal(EnSyatekiDekunuts* this, PlayState* play);
+void EnSyatekiDekunuts_SetupWaitToStart(EnSyatekiDekunuts* this);
+void EnSyatekiDekunuts_WaitToStart(EnSyatekiDekunuts* this, PlayState* play);
void EnSyatekiDekunuts_SetupWaitToEmerge(EnSyatekiDekunuts* this);
void EnSyatekiDekunuts_WaitToEmerge(EnSyatekiDekunuts* this, PlayState* play);
void EnSyatekiDekunuts_SetupEmerge(EnSyatekiDekunuts* this);
@@ -39,7 +39,7 @@ typedef enum {
/* 1 */ EN_SYATEKI_DEKUNUTS_HEADDRESS_TYPE_FLIPPED_UP,
} EnSyatekiDekunutsHeaddressType;
-const ActorInit En_Syateki_Dekunuts_InitVars = {
+ActorInit En_Syateki_Dekunuts_InitVars = {
ACTOR_EN_SYATEKI_DEKUNUTS,
ACTORCAT_ENEMY,
FLAGS,
@@ -142,7 +142,7 @@ void EnSyatekiDekunuts_Init(Actor* thisx, PlayState* play2) {
DEKU_SCRUB_LIMB_MAX);
if (path == NULL) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -152,7 +152,7 @@ void EnSyatekiDekunuts_Init(Actor* thisx, PlayState* play2) {
this->timer = 0;
this->unk_1DC = 0;
this->waitTimer = 0;
- EnSyatekiDekunuts_SetupWaitForSpawn(this);
+ EnSyatekiDekunuts_SetupWaitForSignal(this);
}
void EnSyatekiDekunuts_Destroy(Actor* thisx, PlayState* play) {
@@ -161,10 +161,10 @@ void EnSyatekiDekunuts_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->collider);
}
-void EnSyatekiDekunuts_SetupWaitForSpawn(EnSyatekiDekunuts* this) {
+void EnSyatekiDekunuts_SetupWaitForSignal(EnSyatekiDekunuts* this) {
Animation_PlayOnceSetSpeed(&this->skelAnime, &gDekuScrubUpAnim, 0.0f);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.world = this->actor.home;
this->actor.prevPos = this->actor.home.pos;
this->actor.shape.rot = this->actor.world.rot;
@@ -176,18 +176,18 @@ void EnSyatekiDekunuts_SetupWaitForSpawn(EnSyatekiDekunuts* this) {
this->isAlive = true;
}
- this->actionFunc = EnSyatekiDekunuts_WaitForSpawn;
+ this->actionFunc = EnSyatekiDekunuts_WaitForSignal;
}
/**
- * Waits until the shooting gallery man sets the appropriate Deku Scrub flag to spawn.
+ * Waits until the shooting gallery man sets the appropriate Deku Scrub flag.
*/
-void EnSyatekiDekunuts_WaitForSpawn(EnSyatekiDekunuts* this, PlayState* play) {
+void EnSyatekiDekunuts_WaitForSignal(EnSyatekiDekunuts* this, PlayState* play) {
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
if ((syatekiMan->shootingGameState == SG_GAME_STATE_RUNNING) && (this->isAlive == true) &&
(syatekiMan->dekuScrubFlags & (1 << this->index))) {
- EnSyatekiDekunuts_SetupSpawn(this);
+ EnSyatekiDekunuts_SetupWaitToStart(this);
} else if (syatekiMan->shootingGameState != SG_GAME_STATE_RUNNING) {
this->isAlive = true;
}
@@ -201,7 +201,7 @@ void EnSyatekiDekunuts_WaitForSpawn(EnSyatekiDekunuts* this, PlayState* play) {
/**
* Positions the Deku Scrub to match up with its flower, then sets it up to start waiting.
*/
-void EnSyatekiDekunuts_SetupSpawn(EnSyatekiDekunuts* this) {
+void EnSyatekiDekunuts_SetupWaitToStart(EnSyatekiDekunuts* this) {
Vec3f pos;
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
@@ -221,18 +221,18 @@ void EnSyatekiDekunuts_SetupSpawn(EnSyatekiDekunuts* this) {
this->headdressType = EN_SYATEKI_DEKUNUTS_HEADDRESS_TYPE_NORMAL;
}
- this->actionFunc = EnSyatekiDekunuts_Spawn;
+ this->actionFunc = EnSyatekiDekunuts_WaitToStart;
}
/**
* Waits 20 frames, then plays a sound and starts the process of making the Deku Scrubs emerge.
*/
-void EnSyatekiDekunuts_Spawn(EnSyatekiDekunuts* this, PlayState* play) {
+void EnSyatekiDekunuts_WaitToStart(EnSyatekiDekunuts* this, PlayState* play) {
EnSyatekiMan* syatekiMan;
if (this->waitTimer > 20) {
syatekiMan = (EnSyatekiMan*)this->actor.parent;
- Actor_PlaySfxAtPos(&syatekiMan->actor, NA_SE_EN_NUTS_DAMAGE);
+ Actor_PlaySfx(&syatekiMan->actor, NA_SE_EN_NUTS_DAMAGE);
this->waitTimer = 0;
EnSyatekiDekunuts_SetupWaitToEmerge(this);
} else {
@@ -258,7 +258,7 @@ void EnSyatekiDekunuts_WaitToEmerge(EnSyatekiDekunuts* this, PlayState* play) {
}
void EnSyatekiDekunuts_SetupEmerge(EnSyatekiDekunuts* this) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_UP);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_DEKUNUTS_ANIM_UP);
this->actor.shape.rot.y = this->actor.yawTowardsPlayer;
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
@@ -357,7 +357,7 @@ void EnSyatekiDekunuts_SetupGameEnd(EnSyatekiDekunuts* this) {
*/
void EnSyatekiDekunuts_GameEnd(EnSyatekiDekunuts* this, PlayState* play) {
if (this->waitTimer > 20) {
- EnSyatekiDekunuts_SetupWaitForSpawn(this);
+ EnSyatekiDekunuts_SetupWaitForSignal(this);
this->waitTimer = 0;
} else {
this->waitTimer++;
@@ -379,7 +379,7 @@ void EnSyatekiDekunuts_SetupDead(EnSyatekiDekunuts* this, PlayState* play) {
syatekiMan->dekuScrubHitCounter++;
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DAMAGE);
this->isAlive = false;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_DEKUNUTS_ANIM_DAMAGE);
this->timer = 160;
@@ -394,7 +394,7 @@ void EnSyatekiDekunuts_Dead(EnSyatekiDekunuts* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
if (this->timer == 160) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_DEKUNUTS_ANIM_DIE);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DEAD);
this->timer--;
} else if (this->timer < 160) {
Vec3f pos;
@@ -411,7 +411,7 @@ void EnSyatekiDekunuts_Dead(EnSyatekiDekunuts* this, PlayState* play) {
syatekiMan->dekuScrubFlags &= ~(1 << this->index);
}
- EnSyatekiDekunuts_SetupWaitForSpawn(this);
+ EnSyatekiDekunuts_SetupWaitForSignal(this);
}
} else if (this->timer < 160) {
this->timer--;
@@ -424,7 +424,7 @@ void EnSyatekiDekunuts_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
- if ((this->actionFunc != EnSyatekiDekunuts_WaitForSpawn) && (this->timer < this->timeToBurrow) &&
+ if ((this->actionFunc != EnSyatekiDekunuts_WaitForSignal) && (this->timer < this->timeToBurrow) &&
(this->timer > 10)) {
if ((this->collider.base.acFlags & AC_HIT) && (this->isAlive == true)) {
if (EN_SYATEKI_DEKUNUTS_GET_TYPE(&this->actor) == EN_SYATEKI_DEKUNUTS_TYPE_BONUS) {
@@ -463,7 +463,7 @@ void EnSyatekiDekunuts_Draw(Actor* thisx, PlayState* play) {
Vec3f flowerPos;
s32 i;
- if (this->actionFunc != EnSyatekiDekunuts_WaitForSpawn) {
+ if (this->actionFunc != EnSyatekiDekunuts_WaitForSignal) {
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
EnSyatekiDekunuts_OverrideLimbDraw, NULL, &this->actor);
}
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 51baf398f..2ceb0b32d 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
@@ -40,6 +40,4 @@ typedef struct EnSyatekiDekunuts {
/* 0x26C */ UNK_TYPE1 unk_26C[0x4];
} EnSyatekiDekunuts; // size = 0x270
-extern const ActorInit En_Syateki_Dekunuts_InitVars;
-
#endif // Z_EN_SYATEKI_DEKUNUTS_H
diff --git a/src/overlays/actors/ovl_En_Syateki_Man/overlay.cfg b/src/overlays/actors/ovl_En_Syateki_Man/overlay.cfg
deleted file mode 100644
index 492b143b5..000000000
--- a/src/overlays/actors/ovl_En_Syateki_Man/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Syateki_Man
-z_en_syateki_man.c
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 838eaa2a5..01c8e96a5 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
@@ -12,7 +12,7 @@
#include "overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.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_8000000)
+#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_CANT_LOCK_ON)
#define THIS ((EnSyatekiMan*)thisx)
@@ -59,7 +59,7 @@ void EnSyatekiMan_Town_EndGame(EnSyatekiMan* this, PlayState* play);
#define COLUMN_CENTER 1
#define COLUMN_RIGHT 2
-const ActorInit En_Syateki_Man_InitVars = {
+ActorInit En_Syateki_Man_InitVars = {
ACTOR_EN_SYATEKI_MAN,
ACTORCAT_NPC,
FLAGS,
@@ -222,7 +222,7 @@ void EnSyatekiMan_Init(Actor* thisx, PlayState* play) {
}
void EnSyatekiMan_Destroy(Actor* thisx, PlayState* play) {
- gSaveContext.save.weekEventReg[63] &= (u8)~1;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
}
/**
@@ -327,26 +327,26 @@ void EnSyatekiMan_Swamp_HandleChoice(EnSyatekiMan* this, PlayState* play) {
// You don't have a bow!
Message_StartTextbox(play, 0xA30, &this->actor);
this->prevTextId = 0xA30;
- } else if (gSaveContext.save.playerData.rupees < 20) {
+ } else if (gSaveContext.save.saveInfo.playerData.rupees < 20) {
play_sound(NA_SE_SY_ERROR);
// You don't have enough rupees!
Message_StartTextbox(play, 0xA31, &this->actor);
this->prevTextId = 0xA31;
if (this->shootingGameState == SG_GAME_STATE_ONE_MORE_GAME) {
- gSaveContext.minigameState = 3;
+ gSaveContext.minigameStatus = MINIGAME_STATUS_END;
}
this->shootingGameState = SG_GAME_STATE_NOT_PLAYING;
} else {
func_8019F208();
Rupees_ChangeBy(-20);
- gSaveContext.save.weekEventReg[63] |= 1;
- gSaveContext.save.weekEventReg[63] &= (u8)~2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED);
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
this->shootingGameState = SG_GAME_STATE_MOVING_PLAYER;
- player->stateFlags1 |= 0x20;
+ player->stateFlags1 |= PLAYER_STATE1_20;
this->actionFunc = EnSyatekiMan_Swamp_MovePlayerAndExplainRules;
}
} else {
@@ -373,7 +373,7 @@ void EnSyatekiMan_Swamp_HandleChoice(EnSyatekiMan* this, PlayState* play) {
}
if (this->shootingGameState == SG_GAME_STATE_ONE_MORE_GAME) {
- gSaveContext.minigameState = 3;
+ gSaveContext.minigameStatus = MINIGAME_STATUS_END;
}
this->shootingGameState = SG_GAME_STATE_NOT_PLAYING;
@@ -399,22 +399,22 @@ void EnSyatekiMan_Swamp_HandleNormalMessage(EnSyatekiMan* this, PlayState* play)
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
player->actor.freezeTimer = 0;
- func_80112AFC(play);
- play->interfaceCtx.hbaAmmo = 80;
+ Interface_InitMinigame(play);
+ play->interfaceCtx.minigameAmmo = 80;
func_80123F2C(play, 80);
this->shootingGameState = SG_GAME_STATE_RUNNING;
this->actionFunc = EnSyatekiMan_Swamp_StartGame;
- func_801A2BB8(NA_BGM_TIMED_MINI_GAME);
+ Audio_PlaySubBgm(NA_BGM_TIMED_MINI_GAME);
break;
case 0xA32: // You have to try harder!
- if (gSaveContext.save.weekEventReg[63] & 2) {
- func_801477B4(play);
- player->stateFlags1 &= ~0x20;
- gSaveContext.save.weekEventReg[63] &= (u8)~1;
- gSaveContext.save.weekEventReg[63] &= (u8)~2;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED)) {
+ Message_CloseTextbox(play);
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED);
this->actionFunc = EnSyatekiMan_Swamp_Idle;
- gSaveContext.minigameState = 3;
+ gSaveContext.minigameStatus = MINIGAME_STATUS_END;
this->shootingGameState = SG_GAME_STATE_NONE;
} else {
// Wanna play again?
@@ -434,8 +434,8 @@ void EnSyatekiMan_Swamp_HandleNormalMessage(EnSyatekiMan* this, PlayState* play)
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
player->actor.freezeTimer = 0;
- gSaveContext.minigameState = 3;
- player->stateFlags1 |= 0x20;
+ gSaveContext.minigameStatus = MINIGAME_STATUS_END;
+ player->stateFlags1 |= PLAYER_STATE1_20;
this->actionFunc = EnSyatekiMan_Swamp_SetupGiveReward;
EnSyatekiMan_Swamp_SetupGiveReward(this, play);
break;
@@ -446,8 +446,8 @@ void EnSyatekiMan_Swamp_HandleNormalMessage(EnSyatekiMan* this, PlayState* play)
void EnSyatekiMan_Swamp_Talk(EnSyatekiMan* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (player->stateFlags1 & 0x20) {
- player->stateFlags1 |= 0x20;
+ if (player->stateFlags1 & PLAYER_STATE1_20) {
+ player->stateFlags1 |= PLAYER_STATE1_20;
}
switch (Message_GetState(&play->msgCtx)) {
@@ -468,9 +468,9 @@ void EnSyatekiMan_Swamp_Talk(EnSyatekiMan* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
- player->stateFlags1 &= ~0x20;
- gSaveContext.save.weekEventReg[63] &= (u8)~1;
- gSaveContext.save.weekEventReg[63] &= (u8)~2;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED);
this->actionFunc = EnSyatekiMan_Swamp_Idle;
this->shootingGameState = SG_GAME_STATE_NONE;
}
@@ -627,7 +627,7 @@ void EnSyatekiMan_Town_HandleChoice(EnSyatekiMan* this, PlayState* play) {
Message_StartTextbox(play, 0x3FA, &this->actor);
this->prevTextId = 0x3FA;
}
- } else if (gSaveContext.save.playerData.rupees < 20) {
+ } else if (gSaveContext.save.saveInfo.playerData.rupees < 20) {
play_sound(NA_SE_SY_ERROR);
if (CURRENT_DAY != 3) {
// You don't have a enough rupees!
@@ -640,8 +640,8 @@ void EnSyatekiMan_Town_HandleChoice(EnSyatekiMan* this, PlayState* play) {
}
if (this->shootingGameState == SG_GAME_STATE_ONE_MORE_GAME) {
- player->stateFlags3 &= ~0x400;
- gSaveContext.minigameState = 3;
+ player->stateFlags3 &= ~PLAYER_STATE3_400;
+ gSaveContext.minigameStatus = MINIGAME_STATUS_END;
}
this->shootingGameState = SG_GAME_STATE_NOT_PLAYING;
@@ -660,8 +660,8 @@ void EnSyatekiMan_Town_HandleChoice(EnSyatekiMan* this, PlayState* play) {
this->prevTextId = 0x3FF;
}
- gSaveContext.save.weekEventReg[63] |= 1;
- gSaveContext.save.weekEventReg[63] &= (u8)~2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED);
}
} else {
func_8019F230();
@@ -676,8 +676,8 @@ void EnSyatekiMan_Town_HandleChoice(EnSyatekiMan* this, PlayState* play) {
}
if (this->shootingGameState == SG_GAME_STATE_ONE_MORE_GAME) {
- player->stateFlags3 &= ~0x400;
- gSaveContext.minigameState = 3;
+ player->stateFlags3 &= ~PLAYER_STATE3_400;
+ gSaveContext.minigameStatus = MINIGAME_STATUS_END;
}
this->shootingGameState = SG_GAME_STATE_NOT_PLAYING;
@@ -746,9 +746,9 @@ void EnSyatekiMan_Town_HandleNormalMessage(EnSyatekiMan* this, PlayState* play)
play->msgCtx.stateTimer = 4;
player->actor.freezeTimer = 0;
this->shootingGameState = SG_GAME_STATE_MOVING_PLAYER;
- player->stateFlags1 |= 0x20;
- gSaveContext.save.weekEventReg[63] |= 1;
- gSaveContext.save.weekEventReg[63] &= (u8)~2;
+ player->stateFlags1 |= PLAYER_STATE1_20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED);
this->actionFunc = EnSyatekiMan_Town_MovePlayerAndSayHighScore;
}
break;
@@ -759,18 +759,18 @@ void EnSyatekiMan_Town_HandleNormalMessage(EnSyatekiMan* this, PlayState* play)
play->msgCtx.stateTimer = 4;
player->actor.freezeTimer = 0;
this->flagsIndex = 0;
- func_80112AFC(play);
+ Interface_InitMinigame(play);
func_80123F2C(play, 0x63);
this->shootingGameState = SG_GAME_STATE_RUNNING;
- func_801A2BB8(NA_BGM_TIMED_MINI_GAME);
+ Audio_PlaySubBgm(NA_BGM_TIMED_MINI_GAME);
this->actionFunc = EnSyatekiMan_Town_StartGame;
break;
case 0x401: // You got [score]? Oh, that's too bad...
- if (gSaveContext.save.weekEventReg[63] & 2) {
- func_801477B4(play);
- gSaveContext.save.weekEventReg[63] &= (u8)~1;
- gSaveContext.save.weekEventReg[63] &= (u8)~2;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED)) {
+ Message_CloseTextbox(play);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED);
this->shootingGameState = SG_GAME_STATE_NONE;
this->actionFunc = EnSyatekiMan_Town_Idle;
} else {
@@ -781,10 +781,10 @@ void EnSyatekiMan_Town_HandleNormalMessage(EnSyatekiMan* this, PlayState* play)
break;
case 0x403: // You got [score]? Too bad...
- if (gSaveContext.save.weekEventReg[63] & 2) {
- func_801477B4(play);
- gSaveContext.save.weekEventReg[63] &= (u8)~1;
- gSaveContext.save.weekEventReg[63] &= (u8)~2;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED)) {
+ Message_CloseTextbox(play);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED);
this->shootingGameState = SG_GAME_STATE_NONE;
this->actionFunc = EnSyatekiMan_Town_Idle;
} else {
@@ -808,7 +808,7 @@ void EnSyatekiMan_Town_HandleNormalMessage(EnSyatekiMan* this, PlayState* play)
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
player->actor.freezeTimer = 0;
- gSaveContext.minigameState = 3;
+ gSaveContext.minigameStatus = MINIGAME_STATUS_END;
this->actionFunc = EnSyatekiMan_Town_SetupGiveReward;
EnSyatekiMan_Town_SetupGiveReward(this, play);
break;
@@ -819,8 +819,8 @@ void EnSyatekiMan_Town_HandleNormalMessage(EnSyatekiMan* this, PlayState* play)
void EnSyatekiMan_Town_Talk(EnSyatekiMan* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (player->stateFlags1 & 0x20) {
- player->stateFlags1 |= 0x20;
+ if (player->stateFlags1 & PLAYER_STATE1_20) {
+ player->stateFlags1 |= PLAYER_STATE1_20;
}
switch (Message_GetState(&play->msgCtx)) {
@@ -839,9 +839,9 @@ void EnSyatekiMan_Town_Talk(EnSyatekiMan* this, PlayState* play) {
case TEXT_STATE_DONE:
if (Message_ShouldAdvance(play)) {
- gSaveContext.save.weekEventReg[63] &= (u8)~1;
- gSaveContext.save.weekEventReg[63] &= (u8)~2;
- player->stateFlags1 &= ~0x20;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED);
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
this->actionFunc = EnSyatekiMan_Town_Idle;
this->shootingGameState = SG_GAME_STATE_NONE;
}
@@ -862,23 +862,23 @@ void EnSyatekiMan_Swamp_SetupGiveReward(EnSyatekiMan* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (Actor_HasParent(&this->actor, play)) {
- if (!(gSaveContext.save.weekEventReg[59] & 0x10)) {
- gSaveContext.save.weekEventReg[59] |= 0x10;
- } else if (!(gSaveContext.save.weekEventReg[32] & 2) && (this->score >= 2180)) {
- gSaveContext.save.weekEventReg[32] |= 2;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_59_10)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_59_10);
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_32_02) && (this->score >= 2180)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_32_02);
}
this->actor.parent = NULL;
this->actionFunc = EnSyatekiMan_Swamp_GiveReward;
} else {
- if ((CUR_UPG_VALUE(UPG_QUIVER) < 3) && !(gSaveContext.save.weekEventReg[59] & 0x10)) {
- Actor_PickUp(&this->actor, play, GI_QUIVER_30 + CUR_UPG_VALUE(UPG_QUIVER), 500.0f, 100.0f);
+ if ((CUR_UPG_VALUE(UPG_QUIVER) < 3) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_10)) {
+ Actor_OfferGetItem(&this->actor, play, GI_QUIVER_30 + CUR_UPG_VALUE(UPG_QUIVER), 500.0f, 100.0f);
} else if (this->score < 2180) {
- Actor_PickUp(&this->actor, play, GI_RUPEE_RED, 500.0f, 100.0f);
- } else if (!(gSaveContext.save.weekEventReg[32] & 2)) {
- Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_RUPEE_RED, 500.0f, 100.0f);
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_32_02)) {
+ Actor_OfferGetItem(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f);
} else {
- Actor_PickUp(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f);
}
player->actor.shape.rot.y = -0x8000;
@@ -902,13 +902,13 @@ void EnSyatekiMan_Swamp_GiveReward(EnSyatekiMan* this, PlayState* play) {
this->prevTextId = 0xA37;
}
- player->stateFlags1 &= ~0x20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
this->actor.flags &= ~ACTOR_FLAG_10000;
this->score = 0;
this->shootingGameState = SG_GAME_STATE_NONE;
this->actionFunc = EnSyatekiMan_Swamp_Talk;
} else {
- func_800B85E0(&this->actor, play, 500.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 500.0f, PLAYER_IA_MINUS1);
}
}
@@ -917,14 +917,14 @@ void EnSyatekiMan_Town_SetupGiveReward(EnSyatekiMan* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
if (this->prevTextId == 0x407) {
- if (!(gSaveContext.save.weekEventReg[59] & 0x20)) {
- gSaveContext.save.weekEventReg[59] |= 0x20;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_59_20)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_59_20);
}
}
if ((this->prevTextId == 0x405) || (this->prevTextId == 0x406)) {
- if (!(gSaveContext.save.weekEventReg[32] & 4)) {
- gSaveContext.save.weekEventReg[32] |= 4;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_32_04)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_32_04);
}
}
@@ -932,15 +932,15 @@ void EnSyatekiMan_Town_SetupGiveReward(EnSyatekiMan* this, PlayState* play) {
this->actionFunc = EnSyatekiMan_Town_GiveReward;
} else {
if (this->prevTextId == 0x407) {
- if ((CUR_UPG_VALUE(UPG_QUIVER) < 3) && !(gSaveContext.save.weekEventReg[59] & 0x20)) {
- Actor_PickUp(&this->actor, play, GI_QUIVER_30 + CUR_UPG_VALUE(UPG_QUIVER), 500.0f, 100.0f);
+ if ((CUR_UPG_VALUE(UPG_QUIVER) < 3) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_20)) {
+ Actor_OfferGetItem(&this->actor, play, GI_QUIVER_30 + CUR_UPG_VALUE(UPG_QUIVER), 500.0f, 100.0f);
} else {
- Actor_PickUp(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f);
}
- } else if (!(gSaveContext.save.weekEventReg[32] & 4)) {
- Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f);
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_32_04)) {
+ Actor_OfferGetItem(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f);
} else {
- Actor_PickUp(&this->actor, play, GI_RUPEE_HUGE, 500.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_RUPEE_HUGE, 500.0f, 100.0f);
}
player->actor.shape.rot.y = -0x8000;
@@ -955,24 +955,24 @@ void EnSyatekiMan_Town_GiveReward(EnSyatekiMan* this, PlayState* play) {
if (CURRENT_DAY != 3) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) {
- player->stateFlags1 &= ~0x20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
this->score = 0;
this->shootingGameState = SG_GAME_STATE_NONE;
- gSaveContext.save.weekEventReg[63] &= (u8)~1;
- gSaveContext.save.weekEventReg[63] &= (u8)~2;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED);
this->actionFunc = EnSyatekiMan_SetupIdle;
}
} else if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
// This may be our last day in business...
Message_StartTextbox(play, 0x408, &this->actor);
this->prevTextId = 0x408;
- player->stateFlags1 &= ~0x20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
this->actor.flags &= ~ACTOR_FLAG_10000;
this->score = 0;
this->shootingGameState = SG_GAME_STATE_NONE;
this->actionFunc = EnSyatekiMan_Town_Talk;
} else {
- func_800B85E0(&this->actor, play, 500.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 500.0f, PLAYER_IA_MINUS1);
}
}
@@ -980,7 +980,7 @@ void EnSyatekiMan_Swamp_MovePlayerAndExplainRules(EnSyatekiMan* this, PlayState*
Player* player = GET_PLAYER(play);
if (EnSyatekiMan_MovePlayerToPos(play, sSwampPlayerPos)) {
- player->stateFlags1 |= 0x20;
+ player->stateFlags1 |= PLAYER_STATE1_20;
this->shootingGameState = SG_GAME_STATE_EXPLAINING_RULES;
if (this->talkFlags != TALK_FLAG_SWAMP_HAS_EXPLAINED_THE_RULES) {
this->talkFlags = TALK_FLAG_SWAMP_HAS_EXPLAINED_THE_RULES;
@@ -1005,14 +1005,14 @@ void EnSyatekiMan_Swamp_StartGame(EnSyatekiMan* this, PlayState* play) {
player->actor.world.pos = sSwampPlayerPos;
player->actor.shape.rot.y = -0x8000;
player->actor.world.rot.y = player->actor.shape.rot.y;
- play->unk_18790(play, -0x8000, &this->actor);
+ play->unk_18790(play, -0x8000);
sGameStartTimer--;
} else {
sGameStartTimer = 30;
this->flagsIndex = 0;
this->score = 0;
- player->stateFlags1 &= ~0x20;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_FOUND);
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
+ Actor_PlaySfx(&this->actor, NA_SE_SY_FOUND);
this->dekuScrubFlags = (1 << 4) | (1 << 3) | (1 << 2) | (1 << 1) | (1 << 0);
this->guayFlags = 0;
this->wolfosFlags = 0;
@@ -1036,7 +1036,7 @@ void EnSyatekiMan_Swamp_RunGame(EnSyatekiMan* this, PlayState* play) {
// Spawn three guays after the player has killed all Deku Scrubs, or after 140 frames.
sHasSpawnedGuaysForThisWave = true;
this->perGameVar1.guaySpawnTimer = 0;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_FOUND);
+ Actor_PlaySfx(&this->actor, NA_SE_SY_FOUND);
this->guayFlags = sGuayFlagsPerWave[this->flagsIndex];
if (this->flagsIndex == 3) {
this->flagsIndex = 0;
@@ -1076,21 +1076,21 @@ void EnSyatekiMan_Swamp_RunGame(EnSyatekiMan* this, PlayState* play) {
this->actor.draw = EnSyatekiMan_Draw;
this->flagsIndex = 0;
this->currentWave = 0;
- player->stateFlags1 |= 0x20;
+ player->stateFlags1 |= PLAYER_STATE1_20;
sHasSpawnedGuaysForThisWave = false;
- func_801A2C20();
+ Audio_StopSubBgm();
this->actionFunc = EnSyatekiMan_Swamp_EndGame;
} else if ((this->currentWave == 4) && (this->wolfosFlags == 0) &&
(this->perGameVar2.bonusDekuScrubHitCounter == 2)) {
this->actor.draw = EnSyatekiMan_Draw;
this->flagsIndex = 0;
this->currentWave = 0;
- player->stateFlags1 |= 0x20;
+ player->stateFlags1 |= PLAYER_STATE1_20;
sHasSpawnedGuaysForThisWave = false;
- func_801A2C20();
+ Audio_StopSubBgm();
this->shootingGameState = SG_GAME_STATE_GIVING_BONUS;
if (this->score == 2120) {
- func_8011B4E0(play, 2);
+ Interface_SetPerfectLetters(play, PERFECT_LETTERS_TYPE_2);
gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_6;
this->actionFunc = EnSyatekiMan_Swamp_AddBonusPoints;
} else {
@@ -1118,11 +1118,11 @@ void EnSyatekiMan_Swamp_EndGame(EnSyatekiMan* this, PlayState* play) {
this->prevTextId = 0xA34;
this->shootingGameState = SG_GAME_STATE_ENDED;
} else if (this->score >= 2000) {
- if (gSaveContext.save.weekEventReg[63] & 2) {
- gSaveContext.save.weekEventReg[63] &= (u8)~1;
- gSaveContext.save.weekEventReg[63] &= (u8)~2;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED);
this->shootingGameState = SG_GAME_STATE_NONE;
- gSaveContext.minigameState = 3;
+ gSaveContext.minigameStatus = MINIGAME_STATUS_END;
this->actionFunc = EnSyatekiMan_Swamp_Idle;
return;
}
@@ -1155,8 +1155,8 @@ void EnSyatekiMan_Swamp_AddBonusPoints(EnSyatekiMan* this, PlayState* play) {
static s32 sBonusTimer = 0;
Player* player = GET_PLAYER(play);
- player->stateFlags1 |= 0x20;
- if (play->interfaceCtx.unk_286 == 0) {
+ player->stateFlags1 |= PLAYER_STATE1_20;
+ if (!play->interfaceCtx.perfectLettersOn) {
if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_1] == SECONDS_TO_TIMER(0)) {
gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_1] = SECONDS_TO_TIMER(0);
gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_STOP;
@@ -1166,9 +1166,9 @@ void EnSyatekiMan_Swamp_AddBonusPoints(EnSyatekiMan* this, PlayState* play) {
sBonusTimer = 0;
} else if (sBonusTimer > 10) {
gSaveContext.timerStopTimes[TIMER_ID_MINIGAME_1] += SECONDS_TO_TIMER(1);
- play->interfaceCtx.unk_25C += 10;
+ play->interfaceCtx.minigamePoints += 10;
this->score += 10;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
sBonusTimer = 0;
} else {
sBonusTimer++;
@@ -1215,15 +1215,15 @@ void EnSyatekiMan_Town_StartGame(EnSyatekiMan* this, PlayState* play) {
player->actor.prevPos = player->actor.world.pos;
player->actor.shape.rot.y = -0x8000;
player->actor.world.rot.y = player->actor.shape.rot.y;
- play->unk_18790(play, -0x8000, &this->actor);
- player->stateFlags1 |= 0x20;
+ play->unk_18790(play, -0x8000);
+ player->stateFlags1 |= PLAYER_STATE1_20;
sGameStartTimer--;
} else if (sGameStartTimer > 0) {
player->actor.shape.rot.y = -0x8000;
player->actor.world.rot.y = player->actor.shape.rot.y;
sGameStartTimer--;
} else if (sGameStartTimer == 0) {
- player->stateFlags1 &= ~0x20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
this->score = 0;
this->flagsIndex = 0;
this->perGameVar1.octorokState = SG_OCTO_STATE_INITIAL;
@@ -1342,7 +1342,7 @@ void EnSyatekiMan_Town_RunGame(EnSyatekiMan* this, PlayState* play) {
if ((sModFromLosingTime == (timer % 50)) && (this->perGameVar1.octorokState >= SG_OCTO_STATE_INITIAL)) {
if (this->flagsIndex < 15) {
this->octorokFlags = sOctorokFlagsPerWave[this->flagsIndex++];
- Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_FOUND);
+ Actor_PlaySfx(&this->actor, NA_SE_SY_FOUND);
this->perGameVar1.octorokState = SG_OCTO_STATE_SPAWNING;
}
}
@@ -1352,14 +1352,14 @@ void EnSyatekiMan_Town_RunGame(EnSyatekiMan* this, PlayState* play) {
this->perGameVar1.octorokState = SG_OCTO_STATE_HIDING;
gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_1] = SECONDS_TO_TIMER(0);
gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_STOP;
- player->stateFlags1 |= 0x20;
+ player->stateFlags1 |= PLAYER_STATE1_20;
sModFromLosingTime = 0;
this->actor.draw = EnSyatekiMan_Draw;
- func_801A2C20();
+ Audio_StopSubBgm();
this->actionFunc = EnSyatekiMan_Town_EndGame;
if (this->score == 50) {
Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900);
- func_8011B4E0(play, 1);
+ Interface_SetPerfectLetters(play, PERFECT_LETTERS_TYPE_1);
}
}
}
@@ -1368,12 +1368,12 @@ void EnSyatekiMan_Town_RunGame(EnSyatekiMan* this, PlayState* play) {
void EnSyatekiMan_Town_EndGame(EnSyatekiMan* this, PlayState* play) {
if (this->shootingGameState == SG_GAME_STATE_RUNNING) {
this->octorokFlags = 0;
- if ((this->talkWaitTimer <= 0) && (play->interfaceCtx.unk_286 == 0)) {
+ if ((this->talkWaitTimer <= 0) && !play->interfaceCtx.perfectLettersOn) {
Flags_SetAllTreasure(play, this->score);
this->talkWaitTimer = 15;
if ((GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() < this->score) || (this->score == 50)) {
if (GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() < this->score) {
- if (!(gSaveContext.save.weekEventReg[59] & 0x20)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_59_20)) {
// You got a new record!
Message_StartTextbox(play, 0x407, &this->actor);
this->prevTextId = 0x407;
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 30bc1b1ad..0b637fecf 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
@@ -70,6 +70,4 @@ typedef struct EnSyatekiMan {
/* 0x284 */ s16 prevTextId;
} EnSyatekiMan; // size = 0x288
-extern const ActorInit En_Syateki_Man_InitVars;
-
#endif // Z_EN_SYATEKI_MAN_H
diff --git a/src/overlays/actors/ovl_En_Syateki_Okuta/overlay.cfg b/src/overlays/actors/ovl_En_Syateki_Okuta/overlay.cfg
deleted file mode 100644
index 5c4c2e7c5..000000000
--- a/src/overlays/actors/ovl_En_Syateki_Okuta/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Syateki_Okuta
-z_en_syateki_okuta.c
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 d9059577c..401bc34ff 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
@@ -7,7 +7,7 @@
#include "z_en_syateki_okuta.h"
#include "overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h"
-#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_8000000)
+#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_CANT_LOCK_ON)
#define THIS ((EnSyatekiOkuta*)thisx)
@@ -28,7 +28,7 @@ void func_80A36504(EnSyatekiOkuta* this, PlayState* play);
void func_80A365EC(EnSyatekiOkuta* this, PlayState* play);
void func_80A36CB0(EnSyatekiOkuta* this);
-const ActorInit En_Syateki_Okuta_InitVars = {
+ActorInit En_Syateki_Okuta_InitVars = {
ACTOR_EN_SYATEKI_OKUTA,
ACTORCAT_ENEMY,
FLAGS,
@@ -105,7 +105,7 @@ void EnSyatekiOkuta_Init(Actor* thisx, PlayState* play) {
if (!(WaterBox_GetSurface1_2(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &ySurface,
&waterbox)) ||
(ySurface <= this->actor.floorHeight)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
this->actor.world.pos.y = this->actor.home.pos.y = ySurface;
}
@@ -195,7 +195,7 @@ void func_80A363B4(EnSyatekiOkuta* this, PlayState* play) {
return;
} else {
func_80A361B0(this, play);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_OCTAROCK_JUMP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_OCTAROCK_JUMP);
}
}
@@ -225,7 +225,7 @@ void func_80A364C0(EnSyatekiOkuta* this) {
void func_80A36504(EnSyatekiOkuta* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, 4.0f)) {
func_80A361B0(this, play);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DAIOCTA_LAND);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DAIOCTA_LAND);
} else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
func_80A362F8(this);
}
@@ -235,7 +235,7 @@ void func_80A3657C(EnSyatekiOkuta* this) {
this->unk_2A4 = 0;
this->unk_2AA = 300;
if (this->unk_2A6 == 1) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_OCTAROCK_DEAD1);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_OCTAROCK_DEAD1);
}
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1);
@@ -261,7 +261,7 @@ void func_80A365EC(EnSyatekiOkuta* this, PlayState* play) {
sp84.y = -0.5f;
sp84.z = 0.0f;
func_80A36148(&sp78, &sp84, -20, play);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_OCTAROCK_DEAD2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_OCTAROCK_DEAD2);
}
this->unk_2A4++;
@@ -369,12 +369,12 @@ void EnSyatekiOkuta_Update(Actor* thisx, PlayState* play) {
if (func_80A36A90(this, play)) {
syatekiMan = (EnSyatekiMan*)this->actor.parent;
if (this->unk_2A6 == 1) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
- play->interfaceCtx.unk_25C++;
+ Actor_PlaySfx(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
+ play->interfaceCtx.minigamePoints++;
syatekiMan->score++;
syatekiMan->perGameVar2.octorokHitType = SG_OCTO_HIT_TYPE_RED;
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_ERROR);
+ Actor_PlaySfx(&this->actor, NA_SE_SY_ERROR);
syatekiMan->perGameVar2.octorokHitType = SG_OCTO_HIT_TYPE_BLUE;
}
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 a455765cd..0527354d0 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
@@ -24,6 +24,4 @@ typedef struct EnSyatekiOkuta {
/* 0x2AA */ s16 unk_2AA;
} EnSyatekiOkuta; // size = 0x2AC
-extern const ActorInit En_Syateki_Okuta_InitVars;
-
#endif // Z_EN_SYATEKI_OKUTA_H
diff --git a/src/overlays/actors/ovl_En_Syateki_Wf/overlay.cfg b/src/overlays/actors/ovl_En_Syateki_Wf/overlay.cfg
deleted file mode 100644
index 4a5373e73..000000000
--- a/src/overlays/actors/ovl_En_Syateki_Wf/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Syateki_Wf
-z_en_syateki_wf.c
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 ad9aa824f..8a3a65ed2 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
@@ -7,7 +7,7 @@
#include "z_en_syateki_wf.h"
#include "overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h"
-#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_8000000)
+#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_CANT_LOCK_ON)
#define THIS ((EnSyatekiWf*)thisx)
@@ -16,19 +16,19 @@ void EnSyatekiWf_Destroy(Actor* thisx, PlayState* play);
void EnSyatekiWf_Update(Actor* thisx, PlayState* play2);
void EnSyatekiWf_Draw(Actor* thisx, PlayState* play);
-void func_80A201CC(EnSyatekiWf* this);
-void func_80A20284(EnSyatekiWf* this, PlayState* play);
-void func_80A2030C(EnSyatekiWf* this);
-void func_80A20320(EnSyatekiWf* this, PlayState* play);
-void func_80A20378(EnSyatekiWf* this);
-void func_80A203DC(EnSyatekiWf* this, PlayState* play);
-void func_80A20670(EnSyatekiWf* this);
-void func_80A206DC(EnSyatekiWf* this, PlayState* play);
-void func_80A20710(EnSyatekiWf* this);
-void func_80A2075C(EnSyatekiWf* this, PlayState* play);
-void func_80A2079C(EnSyatekiWf* this);
-void func_80A20800(EnSyatekiWf* this, PlayState* play);
-void func_80A208F8(EnSyatekiWf* this, PlayState* play);
+void EnSyatekiWf_SetupWaitForSignal(EnSyatekiWf* this);
+void EnSyatekiWf_WaitForSignal(EnSyatekiWf* this, PlayState* play);
+void EnSyatekiWf_SetupWaitToMove(EnSyatekiWf* this);
+void EnSyatekiWf_WaitToMove(EnSyatekiWf* this, PlayState* play);
+void EnSyatekiWf_SetupRun(EnSyatekiWf* this);
+void EnSyatekiWf_Run(EnSyatekiWf* this, PlayState* play);
+void EnSyatekiWf_SetupJump(EnSyatekiWf* this);
+void EnSyatekiWf_Jump(EnSyatekiWf* this, PlayState* play);
+void EnSyatekiWf_SetupLand(EnSyatekiWf* this);
+void EnSyatekiWf_Land(EnSyatekiWf* this, PlayState* play);
+void EnSyatekiWf_SetupHowl(EnSyatekiWf* this);
+void EnSyatekiWf_Howl(EnSyatekiWf* this, PlayState* play);
+void EnSyatekiWf_Dead(EnSyatekiWf* this, PlayState* play);
static ColliderJntSphElementInit sJntSphElementsInit[1] = {
{
@@ -40,11 +40,11 @@ static ColliderJntSphElementInit sJntSphElementsInit[1] = {
BUMP_ON,
OCELEM_ON,
},
- { 17, { { 800, 0, 0 }, 25 }, 100 },
+ { WOLFOS_NORMAL_LIMB_HEAD, { { 800, 0, 0 }, 25 }, 100 },
},
};
-static ColliderCylinderInit sCylinderInit1 = {
+static ColliderCylinderInit sBodyCylinderInit = {
{
COLTYPE_HIT5,
AT_NONE,
@@ -77,7 +77,7 @@ static ColliderJntSphInit sJntSphInit = {
sJntSphElementsInit,
};
-static ColliderCylinderInit sCylinderInit2 = {
+static ColliderCylinderInit sTailCylinderInit = {
{
COLTYPE_HIT5,
AT_NONE,
@@ -97,11 +97,11 @@ static ColliderCylinderInit sCylinderInit2 = {
{ 15, 20, -15, { 0, 0, 0 } },
};
-static Vec3f D_80A20EDC = { 0.0f, 20.0f, 0.0f };
+static Vec3f sVelocity = { 0.0f, 20.0f, 0.0f };
-static Vec3f D_80A20EE8 = { 0.0f, 0.0f, 0.0f };
+static Vec3f sAccel = { 0.0f, 0.0f, 0.0f };
-const ActorInit En_Syateki_Wf_InitVars = {
+ActorInit En_Syateki_Wf_InitVars = {
ACTOR_EN_SYATEKI_WF,
ACTORCAT_ENEMY,
FLAGS,
@@ -113,14 +113,24 @@ const ActorInit En_Syateki_Wf_InitVars = {
(ActorFunc)EnSyatekiWf_Draw,
};
+typedef enum {
+ /* 0 */ EN_SYATEKI_WF_ANIM_WAIT, // unused
+ /* 1 */ EN_SYATEKI_WF_ANIM_RUN,
+ /* 2 */ EN_SYATEKI_WF_ANIM_JUMP,
+ /* 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,
+} EnSyatekiWfAnimation;
+
static AnimationInfo sAnimationInfo[] = {
- { &gWolfosWaitingAnim, 2.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -1.0f },
- { &gWolfosRunningAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
- { &gWolfosRunningAnim, 1.0f, 0.0f, 4.0f, ANIMMODE_ONCE, 1.0f },
- { &gWolfosRunningAnim, 1.0f, 4.0f, 8.0f, ANIMMODE_ONCE, 1.0f },
- { &gWolfosBackflippingAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
+ { &gWolfosWaitAnim, 2.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -1.0f },
+ { &gWolfosRunAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
+ { &gWolfosRunAnim, 1.0f, 0.0f, 4.0f, ANIMMODE_ONCE, 1.0f },
+ { &gWolfosRunAnim, 1.0f, 4.0f, 8.0f, ANIMMODE_ONCE, 1.0f },
+ { &gWolfosBackflipAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
{ &gWolfosDamagedAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 8.0f },
- { &gWolfosRearingUpFallingOverAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
+ { &gWolfosRearUpFallOverAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
};
static InitChainEntry sInitChain[] = {
@@ -128,17 +138,6 @@ static InitChainEntry sInitChain[] = {
ICHAIN_F32_DIV1000(gravity, -2000, ICHAIN_STOP),
};
-static Vec3f D_80A20FC4 = { 0.0f, 0.5f, 0.0f };
-
-static Vec3f D_80A20FD0 = { 1200.0f, 0.0f, 0.0f };
-
-static TexturePtr sEyeTextures[] = {
- gWolfosNormalEyeOpenTex,
- gWolfosNormalEyeHalfTex,
- gWolfosNormalEyeNarrowTex,
- gWolfosNormalEyeHalfTex,
-};
-
void EnSyatekiWf_Init(Actor* thisx, PlayState* play) {
s32 pad;
EnSyatekiWf* this = THIS;
@@ -156,16 +155,16 @@ void EnSyatekiWf_Init(Actor* thisx, PlayState* play) {
}
if (path == NULL) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
- this->unk_2A0 = Lib_SegmentedToVirtual(path->points);
- this->unk_2A4 = 1;
- this->unk_2A6 = path->count;
+ this->pathPoints = Lib_SegmentedToVirtual(path->points);
+ this->currentPointIndex = 1;
+ this->maxPointIndex = path->count;
Actor_ProcessInitChain(&this->actor, sInitChain);
- this->unk_29C = 0;
+ this->waitTimer = 0;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 0.0f);
this->actor.focus.pos = this->actor.world.pos;
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
@@ -175,146 +174,159 @@ void EnSyatekiWf_Init(Actor* thisx, PlayState* play) {
this->eyeIndex = 0;
this->unk_2AC = 10.0f;
- Collider_InitCylinder(play, &this->unk_2B4);
- Collider_SetCylinder(play, &this->unk_2B4, &this->actor, &sCylinderInit1);
- Collider_InitCylinder(play, &this->unk_300);
- Collider_SetCylinder(play, &this->unk_300, &this->actor, &sCylinderInit2);
- Collider_InitJntSph(play, &this->unk_34C);
- Collider_SetJntSph(play, &this->unk_34C, &this->actor, &sJntSphInit, this->unk_36C);
- this->unk_34C.elements->dim.worldSphere.radius = sJntSphInit.elements[0].dim.modelSphere.radius;
+ Collider_InitCylinder(play, &this->bodyCollider);
+ Collider_SetCylinder(play, &this->bodyCollider, &this->actor, &sBodyCylinderInit);
+ Collider_InitCylinder(play, &this->tailCollider);
+ Collider_SetCylinder(play, &this->tailCollider, &this->actor, &sTailCylinderInit);
+ Collider_InitJntSph(play, &this->headCollider);
+ Collider_SetJntSph(play, &this->headCollider, &this->actor, &sJntSphInit, this->headColliderElements);
+ this->headCollider.elements->dim.worldSphere.radius = sJntSphInit.elements[0].dim.modelSphere.radius;
- SkelAnime_InitFlex(play, &this->skelAnime, &gWolfosNormalSkel, &gWolfosWaitingAnim, this->jointTable,
- this->morphTable, WOLFOS_NORMAL_LIMB_MAX);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gWolfosNormalSkel, &gWolfosWaitAnim, this->jointTable, this->morphTable,
+ WOLFOS_NORMAL_LIMB_MAX);
Actor_SetScale(&this->actor, 0.01f);
this->actor.hintId = TATL_HINT_ID_WOLFOS;
- func_80A201CC(this);
+ EnSyatekiWf_SetupWaitForSignal(this);
}
void EnSyatekiWf_Destroy(Actor* thisx, PlayState* play) {
EnSyatekiWf* this = THIS;
- Collider_DestroyCylinder(play, &this->unk_2B4);
- Collider_DestroyCylinder(play, &this->unk_300);
+ Collider_DestroyCylinder(play, &this->bodyCollider);
+ Collider_DestroyCylinder(play, &this->tailCollider);
}
-void func_80A200E0(EnSyatekiWf* this) {
- Vec3f sp24;
- s16 temp;
+/**
+ * Positions the Wolfos at the start of its assigned path and rotates it to face
+ * the next point on the path.
+ */
+void EnSyatekiWf_InitPathStart(EnSyatekiWf* this) {
+ Vec3f targetPos;
- this->actor.world.pos.x = this->unk_2A0[0].x;
- this->actor.world.pos.y = this->unk_2A0[0].y;
- this->actor.world.pos.z = this->unk_2A0[0].z;
- sp24.x = this->unk_2A0[this->unk_2A4].x;
- sp24.y = this->unk_2A0[this->unk_2A4].y;
- sp24.z = this->unk_2A0[this->unk_2A4].z;
- temp = Math_Vec3f_Yaw(&this->actor.world.pos, &sp24);
- this->actor.shape.rot.y = temp;
- this->actor.world.rot.y = temp;
+ this->actor.world.pos.x = this->pathPoints[0].x;
+ this->actor.world.pos.y = this->pathPoints[0].y;
+ this->actor.world.pos.z = this->pathPoints[0].z;
+ targetPos.x = this->pathPoints[this->currentPointIndex].x;
+ targetPos.y = this->pathPoints[this->currentPointIndex].y;
+ targetPos.z = this->pathPoints[this->currentPointIndex].z;
+ this->actor.world.rot.y = this->actor.shape.rot.y = Math_Vec3f_Yaw(&this->actor.world.pos, &targetPos);
}
-void func_80A201CC(EnSyatekiWf* this) {
+void EnSyatekiWf_SetupWaitForSignal(EnSyatekiWf* this) {
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.world = this->actor.home;
this->actor.prevPos = this->actor.home.pos;
this->actor.shape.rot = this->actor.world.rot;
this->actor.colChkInfo.health = 2;
this->actor.draw = NULL;
- this->unk_2A4 = 1;
- this->unk_298 = 0;
+ this->currentPointIndex = 1;
+ this->isActive = false;
syatekiMan->wolfosFlags &= ~(1 << EN_SYATEKI_WF_GET_INDEX(&this->actor));
- this->actionFunc = func_80A20284;
+ this->actionFunc = EnSyatekiWf_WaitForSignal;
}
-void func_80A20284(EnSyatekiWf* this, PlayState* play) {
+/**
+ * Waits until the shooting gallery man sets the appropriate Wolfos flag.
+ */
+void EnSyatekiWf_WaitForSignal(EnSyatekiWf* this, PlayState* play) {
EnSyatekiMan* syatekiMan;
if (this->actor.parent != NULL) {
syatekiMan = (EnSyatekiMan*)this->actor.parent;
- if ((syatekiMan->shootingGameState == SG_GAME_STATE_RUNNING) && (this->unk_298 == 1)) {
- func_80A200E0(this);
- func_80A2030C(this);
+ if ((syatekiMan->shootingGameState == SG_GAME_STATE_RUNNING) && (this->isActive == true)) {
+ EnSyatekiWf_InitPathStart(this);
+ EnSyatekiWf_SetupWaitToMove(this);
} else if (syatekiMan->wolfosFlags & (1 << EN_SYATEKI_WF_GET_INDEX(&this->actor))) {
- this->unk_298 = 1;
+ this->isActive = true;
}
}
}
-void func_80A2030C(EnSyatekiWf* this) {
- this->actionFunc = func_80A20320;
+void EnSyatekiWf_SetupWaitToMove(EnSyatekiWf* this) {
+ this->actionFunc = EnSyatekiWf_WaitToMove;
}
-void func_80A20320(EnSyatekiWf* this, PlayState* play) {
- if (this->unk_29C >= 11) {
- Actor_PlaySfxAtPos(this->actor.parent, NA_SE_EN_WOLFOS_APPEAR);
- this->unk_29C = 0;
- func_80A20378(this);
+/**
+ * Waits 11 frames, then makes the Wolfos start running forward.
+ */
+void EnSyatekiWf_WaitToMove(EnSyatekiWf* this, PlayState* play) {
+ if (this->waitTimer >= 11) {
+ Actor_PlaySfx(this->actor.parent, NA_SE_EN_WOLFOS_APPEAR);
+ this->waitTimer = 0;
+ EnSyatekiWf_SetupRun(this);
} else {
- this->unk_29C++;
+ this->waitTimer++;
}
}
-void func_80A20378(EnSyatekiWf* this) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1);
- this->actor.speedXZ = 10.0f;
+void EnSyatekiWf_SetupRun(EnSyatekiWf* this) {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_WF_ANIM_RUN);
+ this->actor.speed = 10.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actor.draw = EnSyatekiWf_Draw;
- this->actionFunc = func_80A203DC;
+ this->actionFunc = EnSyatekiWf_Run;
}
-void func_80A203DC(EnSyatekiWf* this, PlayState* play) {
- Vec3f sp54;
- f32 sp50;
- s16 temp_v0;
+/**
+ * Runs forward along its assigned path. If the Wolfos encounters a wall directly
+ * in front of it, this function will make it jump. If the Wolfos reaches a certain
+ * point along the path (which is specified via its params), this function will make
+ * it stop running and howl in place.
+ */
+void EnSyatekiWf_Run(EnSyatekiWf* this, PlayState* play) {
+ Vec3f targetPoint;
+ f32 distToTarget;
+ s16 wallYawDiff;
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
if (syatekiMan->shootingGameState != SG_GAME_STATE_RUNNING) {
- func_80A201CC(this);
+ EnSyatekiWf_SetupWaitForSignal(this);
}
- sp54.x = this->unk_2A0[this->unk_2A4].x;
- sp54.y = this->unk_2A0[this->unk_2A4].y;
- sp54.z = this->unk_2A0[this->unk_2A4].z;
- temp_v0 = (this->actor.wallYaw - this->actor.world.rot.y) + 0x8000;
+ targetPoint.x = this->pathPoints[this->currentPointIndex].x;
+ targetPoint.y = this->pathPoints[this->currentPointIndex].y;
+ targetPoint.z = this->pathPoints[this->currentPointIndex].z;
+ wallYawDiff = (this->actor.wallYaw - this->actor.world.rot.y) + 0x8000;
- if (this->actor.bgCheckFlags & 1) {
- if (this->actor.bgCheckFlags & 8) {
- if ((ABS(temp_v0) < 0x1555) && (this->actor.wallPoly != this->actor.floorPoly)) {
- func_80A20670(this);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
+ if ((ABS(wallYawDiff) < 0x1555) && (this->actor.wallPoly != this->actor.floorPoly)) {
+ EnSyatekiWf_SetupJump(this);
return;
}
}
- if (this->actor.bgCheckFlags & 4) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_LEAVE) {
this->actor.velocity.y = 2.0f;
}
- sp50 = Math_Vec3f_DistXZ(&this->actor.world.pos, &sp54);
- this->unk_2A8 = Math_Vec3f_Yaw(&this->actor.world.pos, &sp54);
+ distToTarget = Math_Vec3f_DistXZ(&this->actor.world.pos, &targetPoint);
+ this->yawTarget = Math_Vec3f_Yaw(&this->actor.world.pos, &targetPoint);
- if (sp50 > 15.0f) {
- Math_SmoothStepToS(&this->actor.world.rot.y, this->unk_2A8, 5, 0x3000, 0x100);
+ if (distToTarget > 15.0f) {
+ Math_SmoothStepToS(&this->actor.world.rot.y, this->yawTarget, 5, 0x3000, 0x100);
this->actor.shape.rot.y = this->actor.world.rot.y;
- if (sp50 < 50.0f) {
- if (this->actor.speedXZ > 3.0f) {
- this->actor.speedXZ = this->actor.speedXZ - 0.5f;
+ if (distToTarget < 50.0f) {
+ if (this->actor.speed > 3.0f) {
+ this->actor.speed = this->actor.speed - 0.5f;
} else {
- this->actor.speedXZ = this->actor.speedXZ;
+ this->actor.speed = this->actor.speed;
}
}
} else {
- if (this->unk_2A4 < (this->unk_2A6 - 1)) {
- if (this->unk_2A4 == EN_SYATEKI_WF_GET_PARAM_F0(&this->actor)) {
- func_80A2079C(this);
+ if (this->currentPointIndex < (this->maxPointIndex - 1)) {
+ if (this->currentPointIndex == EN_SYATEKI_WF_GET_POINT_TO_HOWL(&this->actor)) {
+ EnSyatekiWf_SetupHowl(this);
}
- this->unk_2A4++;
+ this->currentPointIndex++;
} else {
- this->unk_298 = 0;
- this->unk_2A4 = 1;
- func_80A201CC(this);
+ this->isActive = false;
+ this->currentPointIndex = 1;
+ EnSyatekiWf_SetupWaitForSignal(this);
}
}
@@ -324,76 +336,82 @@ void func_80A203DC(EnSyatekiWf* this, PlayState* play) {
}
}
-void func_80A20670(EnSyatekiWf* this) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_TEKU_JUMP);
+void EnSyatekiWf_SetupJump(EnSyatekiWf* this) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_TEKU_JUMP);
this->actor.velocity.y = 20.0f;
- this->actor.speedXZ = 5.0f;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
- this->actionFunc = func_80A206DC;
+ this->actor.speed = 5.0f;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_WF_ANIM_JUMP);
+ this->actionFunc = EnSyatekiWf_Jump;
}
-void func_80A206DC(EnSyatekiWf* this, PlayState* play) {
- if (this->actor.bgCheckFlags & 2) {
- func_80A20710(this);
+void EnSyatekiWf_Jump(EnSyatekiWf* this, PlayState* play) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
+ EnSyatekiWf_SetupLand(this);
}
}
-void func_80A20710(EnSyatekiWf* this) {
- this->actor.speedXZ = 0.0f;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
- this->actionFunc = func_80A2075C;
+void EnSyatekiWf_SetupLand(EnSyatekiWf* this) {
+ this->actor.speed = 0.0f;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_WF_ANIM_LAND);
+ this->actionFunc = EnSyatekiWf_Land;
}
-void func_80A2075C(EnSyatekiWf* this, PlayState* play) {
+/**
+ * Freezes the Wolfos in place until its landing animation is complete, then makes it start running.
+ */
+void EnSyatekiWf_Land(EnSyatekiWf* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- func_80A20378(this);
+ EnSyatekiWf_SetupRun(this);
}
}
-void func_80A2079C(EnSyatekiWf* this) {
- this->unk_29A = 40;
- this->actor.speedXZ = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WOLFOS_APPEAR);
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 5);
- this->actionFunc = func_80A20800;
+void EnSyatekiWf_SetupHowl(EnSyatekiWf* this) {
+ this->timer = 40;
+ this->actor.speed = 0.0f;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WOLFOS_APPEAR);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_WF_ANIM_DAMAGED);
+ this->actionFunc = EnSyatekiWf_Howl;
}
-void func_80A20800(EnSyatekiWf* this, PlayState* play) {
+/**
+ * Makes the Wolfos stand completely still until 40 frames after its damaged animation is complete.
+ */
+void EnSyatekiWf_Howl(EnSyatekiWf* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- this->unk_29A--;
- if (this->unk_29A == 0) {
- func_80A20378(this);
+ this->timer--;
+ if (this->timer == 0) {
+ EnSyatekiWf_SetupRun(this);
}
}
}
-void func_80A20858(EnSyatekiWf* this, PlayState* play) {
+void EnSyatekiWf_SetupDead(EnSyatekiWf* this, PlayState* play) {
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
- this->unk_298 = 0;
- this->actor.speedXZ = 0.0f;
- EffectSsExtra_Spawn(play, &this->actor.world.pos, &D_80A20EDC, &D_80A20EE8, 5, 2);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WOLFOS_DEAD);
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 6);
+ this->isActive = false;
+ this->actor.speed = 0.0f;
+ EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 5, 2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WOLFOS_DEAD);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_WF_ANIM_REAR_UP_FALL_OVER);
syatekiMan->score += 100;
- this->actionFunc = func_80A208F8;
+ this->actionFunc = EnSyatekiWf_Dead;
}
-void func_80A208F8(EnSyatekiWf* this, PlayState* play) {
+void EnSyatekiWf_Dead(EnSyatekiWf* this, PlayState* play) {
s32 pad;
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- func_80A201CC(this);
+ EnSyatekiWf_SetupWaitForSignal(this);
} else {
- Vec3f sp68;
- Vec3f sp5C = D_80A20FC4;
+ Vec3f firePos;
+ Vec3f sFireVelocityAndAccel = { 0.0f, 0.5f, 0.0f };
s32 i;
for (i = (s32)this->skelAnime.animLength - (s32)this->skelAnime.curFrame; i >= 0; i--) {
- 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);
- func_800B3030(play, &sp68, &sp5C, &sp5C, 0x64, 0, 2);
+ 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);
+ func_800B3030(play, &firePos, &sFireVelocityAndAccel, &sFireVelocityAndAccel, 100, 0, 2);
}
}
}
@@ -402,41 +420,49 @@ void EnSyatekiWf_Update(Actor* thisx, PlayState* play2) {
PlayState* play = play2;
EnSyatekiWf* this = THIS;
- if (this->actionFunc != func_80A20284) {
+ if (this->actionFunc != EnSyatekiWf_WaitForSignal) {
SkelAnime_Update(&this->skelAnime);
}
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 32.0f, 30.0f, 60.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 32.0f, 30.0f, 60.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
this->actionFunc(this, play);
- if (this->actor.bgCheckFlags & 3) {
+ if (this->actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH)) {
func_800BE3D0(&this->actor, this->actor.shape.rot.y, &this->actor.shape.rot);
} else {
Math_SmoothStepToS(&this->actor.shape.rot.x, 0, 1, 0x3E8, 0);
Math_SmoothStepToS(&this->actor.shape.rot.z, 0, 1, 0x3E8, 0);
}
- if ((this->unk_2B4.base.acFlags & AC_HIT) || (this->unk_300.base.acFlags & AC_HIT) ||
- (this->unk_34C.base.acFlags & AC_HIT)) {
- this->unk_2B4.base.acFlags &= ~AC_HIT;
- this->unk_300.base.acFlags &= ~AC_HIT;
- this->unk_34C.base.acFlags &= ~AC_HIT;
+ if ((this->bodyCollider.base.acFlags & AC_HIT) || (this->tailCollider.base.acFlags & AC_HIT) ||
+ (this->headCollider.base.acFlags & AC_HIT)) {
+ this->bodyCollider.base.acFlags &= ~AC_HIT;
+ this->tailCollider.base.acFlags &= ~AC_HIT;
+ this->headCollider.base.acFlags &= ~AC_HIT;
+
+ // The Wolfos always starts with 2 health, so the subtraction below is guaranteed to kill it;
+ // the else-block is never reached in practice. If you *could* damage the Wolfos without killing
+ // it, then the number "30" would appear every time you hit it, and the player's displayed score
+ // would increase by 30. However, the else-block doesn't increase the shooting gallery man's
+ // "score" variable, so it would become desynchronized from the displayed score. This could cause
+ // weird behavior, like not getting a free replay after finishing a game with 2000 or more points.
this->actor.colChkInfo.health -= 2;
if (this->actor.colChkInfo.health == 0) {
Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900);
- func_80A20858(this, play);
+ EnSyatekiWf_SetupDead(this, play);
} else {
play_sound(NA_SE_SY_TRE_BOX_APPEAR);
- EffectSsExtra_Spawn(play, &this->actor.world.pos, &D_80A20EDC, &D_80A20EE8, 3, 0);
+ EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 3, 0);
}
}
- Collider_UpdateCylinder(&this->actor, &this->unk_2B4);
- if ((this->actionFunc != func_80A20284) && (this->actionFunc != func_80A208F8) && (this->actor.draw != NULL)) {
- CollisionCheck_SetAC(play, &play->colChkCtx, &this->unk_300.base);
- CollisionCheck_SetAC(play, &play->colChkCtx, &this->unk_2B4.base);
- CollisionCheck_SetAC(play, &play->colChkCtx, &this->unk_34C.base);
+ Collider_UpdateCylinder(&this->actor, &this->bodyCollider);
+ if ((this->actionFunc != EnSyatekiWf_WaitForSignal) && (this->actionFunc != EnSyatekiWf_Dead) &&
+ (this->actor.draw != NULL)) {
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->tailCollider.base);
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->bodyCollider.base);
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->headCollider.base);
this->actor.focus.pos = this->actor.world.pos;
this->actor.focus.pos.y += 25.0f;
}
@@ -455,19 +481,26 @@ s32 EnSyatekiWf_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Ve
}
void EnSyatekiWf_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
+ static Vec3f sTailColliderOffset = { 1200.0f, 0.0f, 0.0f };
EnSyatekiWf* this = THIS;
- Vec3f sp18;
+ Vec3f tailColliderPos;
- Collider_UpdateSpheres(limbIndex, &this->unk_34C);
+ Collider_UpdateSpheres(limbIndex, &this->headCollider);
if (limbIndex == WOLFOS_NORMAL_LIMB_TAIL) {
- Matrix_MultVec3f(&D_80A20FD0, &sp18);
- this->unk_300.dim.pos.x = sp18.x;
- this->unk_300.dim.pos.y = sp18.y;
- this->unk_300.dim.pos.z = sp18.z;
+ Matrix_MultVec3f(&sTailColliderOffset, &tailColliderPos);
+ this->tailCollider.dim.pos.x = tailColliderPos.x;
+ this->tailCollider.dim.pos.y = tailColliderPos.y;
+ this->tailCollider.dim.pos.z = tailColliderPos.z;
}
}
void EnSyatekiWf_Draw(Actor* thisx, PlayState* play) {
+ static TexturePtr sEyeTextures[] = {
+ gWolfosNormalEyeOpenTex,
+ gWolfosNormalEyeHalfTex,
+ gWolfosNormalEyeNarrowTex,
+ gWolfosNormalEyeHalfTex,
+ };
EnSyatekiWf* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.h b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.h
index 9e01dca3d..4a1fb2f72 100644
--- a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.h
+++ b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.h
@@ -4,9 +4,9 @@
#include "global.h"
#include "objects/object_wf/object_wf.h"
-#define EN_SYATEKI_WF_GET_PARAM_F0(thisx) (((thisx)->params & 0xF0) >> 4)
+#define EN_SYATEKI_WF_GET_POINT_TO_HOWL(thisx) (((thisx)->params & 0xF0) >> 4)
#define EN_SYATEKI_WF_GET_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8)
-#define EN_SYATEKI_WF_PARAMS(index, unkF0, unused) (((index << 8) & 0xFF00) | ((unkF0 << 4) & 0xF0) | (unused & 0xF))
+#define EN_SYATEKI_WF_PARAMS(index, pointToHowl, unused) (((index << 8) & 0xFF00) | ((pointToHowl << 4) & 0xF0) | (unused & 0xF))
struct EnSyatekiWf;
@@ -19,22 +19,20 @@ typedef struct EnSyatekiWf {
/* 0x20C */ Vec3s morphTable[WOLFOS_NORMAL_LIMB_MAX];
/* 0x290 */ UNK_TYPE1 unk_290[0x4];
/* 0x294 */ EnSyatekiWfActionFunc actionFunc;
- /* 0x298 */ s16 unk_298;
- /* 0x29A */ s16 unk_29A;
- /* 0x29C */ s16 unk_29C;
- /* 0x2A0 */ Vec3s* unk_2A0;
- /* 0x2A4 */ s16 unk_2A4;
- /* 0x2A6 */ s16 unk_2A6;
- /* 0x2A8 */ s16 unk_2A8;
- /* 0x2AC */ f32 unk_2AC;
+ /* 0x298 */ s16 isActive;
+ /* 0x29A */ s16 timer;
+ /* 0x29C */ s16 waitTimer;
+ /* 0x2A0 */ Vec3s* pathPoints;
+ /* 0x2A4 */ s16 currentPointIndex;
+ /* 0x2A6 */ s16 maxPointIndex;
+ /* 0x2A8 */ s16 yawTarget;
+ /* 0x2AC */ f32 unk_2AC; // set to 10.0f, but never used
/* 0x2B0 */ u8 eyeIndex;
- /* 0x2B4 */ ColliderCylinder unk_2B4;
- /* 0x300 */ ColliderCylinder unk_300;
- /* 0x34C */ ColliderJntSph unk_34C;
- /* 0x36C */ ColliderJntSphElement unk_36C[1];
+ /* 0x2B4 */ ColliderCylinder bodyCollider;
+ /* 0x300 */ ColliderCylinder tailCollider;
+ /* 0x34C */ ColliderJntSph headCollider;
+ /* 0x36C */ ColliderJntSphElement headColliderElements[1];
/* 0x3AC */ UNK_TYPE1 unk_3AC[0x20];
} EnSyatekiWf; // size = 0x3CC
-extern const ActorInit En_Syateki_Wf_InitVars;
-
#endif // Z_EN_SYATEKI_WF_H
diff --git a/src/overlays/actors/ovl_En_Tab/overlay.cfg b/src/overlays/actors/ovl_En_Tab/overlay.cfg
deleted file mode 100644
index 234201830..000000000
--- a/src/overlays/actors/ovl_En_Tab/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Tab
-z_en_tab.c
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 ffa557746..dfa1e0bb7 100644
--- a/src/overlays/actors/ovl_En_Tab/z_en_tab.c
+++ b/src/overlays/actors/ovl_En_Tab/z_en_tab.c
@@ -66,7 +66,7 @@ s32 D_80BE1A0C[] = {
0x0C103012, 0x14FFEC06, 0x00920000, 0x1300920C, 0x10300034, 0x0100050E, 0x2B100C10, 0x0E2B110C, 0x10000000,
};
-const ActorInit En_Tab_InitVars = {
+ActorInit En_Tab_InitVars = {
ACTOR_EN_TAB,
ACTORCAT_NPC,
FLAGS,
@@ -268,7 +268,7 @@ void func_80BE0A98(EnTab* this, PlayState* play) {
Matrix_Translate(this->unk_308, 0.0f, 0.0f, MTXMODE_APPLY);
- if ((&this->actor == player->targetActor) &&
+ if ((&this->actor == player->talkActor) &&
((play->msgCtx.currentTextId < 0xFF) || (play->msgCtx.currentTextId > 0x200)) && (talkState == TEXT_STATE_3) &&
(this->prevTalkState == TEXT_STATE_3)) {
if ((play->state.frames % 2) == 0) {
@@ -323,9 +323,9 @@ s32 func_80BE0D60(EnTab* this, PlayState* play) {
this->unk_320++;
if (this->unk_320 == 1) {
- play->setPlayerTalkAnim(play, &gPlayerAnim_link_demo_bikkuri, 2);
+ play->setPlayerTalkAnim(play, &gPlayerAnim_link_demo_bikkuri, ANIMMODE_ONCE);
} else if (this->unk_320 > 20) {
- play->setPlayerTalkAnim(play, NULL, 0);
+ play->setPlayerTalkAnim(play, NULL, ANIMMODE_LOOP);
this->unk_320 = 0;
ret = true;
}
@@ -428,15 +428,14 @@ s32 func_80BE10BC(EnTab* this, PlayState* play) {
switch (this->unk_1D8) {
case 1:
- if ((player->stateFlags1 & 0x40) && !(play->msgCtx.currentTextId <= 0x2B00) &&
+ if ((player->stateFlags1 & PLAYER_STATE1_40) && !(play->msgCtx.currentTextId <= 0x2B00) &&
(play->msgCtx.currentTextId < 0x2B08)) {
this->actor.child = &this->unk_1E4->actor;
this->unk_2FC |= 8;
} else {
dist = Math_Vec3f_DistXYZ(&this->actor.world.pos, &this->unk_1E4->actor.world.pos);
- if ((gSaveContext.save.weekEventReg[75] & 1) || (this->unk_1E4->actor.draw == NULL) ||
- !(dist < 160.0f)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_01) || (this->unk_1E4->actor.draw == NULL) || !(dist < 160.0f)) {
tempActor = &GET_PLAYER(play)->actor;
this->actor.child = tempActor;
} else {
@@ -474,7 +473,7 @@ void func_80BE1224(EnTab* this, PlayState* play) {
void func_80BE127C(EnTab* this, PlayState* play) {
ScheduleOutput sp18;
- this->unk_31A = REG(15) + ((void)0, gSaveContext.save.daySpeed);
+ this->unk_31A = R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
if (!Schedule_RunScript(play, D_80BE18D0, &sp18) ||
((this->unk_1D8 != sp18.result) && !func_80BE1060(this, play, &sp18))) {
@@ -552,9 +551,9 @@ void EnTab_Update(Actor* thisx, PlayState* play) {
radius = this->collider.dim.radius + this->unk_30C;
height = this->collider.dim.height + 10;
- func_8013C964(&this->actor, play, radius, height, PLAYER_AP_NONE, this->unk_2FC & 7);
+ func_8013C964(&this->actor, play, radius, height, PLAYER_IA_NONE, this->unk_2FC & 7);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
func_80BE0620(this, play);
}
}
diff --git a/src/overlays/actors/ovl_En_Tab/z_en_tab.h b/src/overlays/actors/ovl_En_Tab/z_en_tab.h
index 81ce92006..6bb0503a7 100644
--- a/src/overlays/actors/ovl_En_Tab/z_en_tab.h
+++ b/src/overlays/actors/ovl_En_Tab/z_en_tab.h
@@ -45,6 +45,4 @@ typedef struct EnTab {
/* 0x338 */ s32 unk_338;
} EnTab; // size = 0x33C
-extern const ActorInit En_Tab_InitVars;
-
#endif // Z_EN_TAB_H
diff --git a/src/overlays/actors/ovl_En_Tag_Obj/overlay.cfg b/src/overlays/actors/ovl_En_Tag_Obj/overlay.cfg
deleted file mode 100644
index 0939c8b84..000000000
--- a/src/overlays/actors/ovl_En_Tag_Obj/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Tag_Obj
-z_en_tag_obj.c
diff --git a/src/overlays/actors/ovl_En_Tag_Obj/z_en_tag_obj.c b/src/overlays/actors/ovl_En_Tag_Obj/z_en_tag_obj.c
index 0d39a0db2..2cc547e9a 100644
--- a/src/overlays/actors/ovl_En_Tag_Obj/z_en_tag_obj.c
+++ b/src/overlays/actors/ovl_En_Tag_Obj/z_en_tag_obj.c
@@ -34,7 +34,7 @@ static ColliderCylinderInit sUnusedColliderInit = {
{ 20, 30, 0, { 0, 0, 0 } },
};
-const ActorInit En_Tag_Obj_InitVars = {
+ActorInit En_Tag_Obj_InitVars = {
ACTOR_EN_TAG_OBJ,
ACTORCAT_PROP,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Tag_Obj/z_en_tag_obj.h b/src/overlays/actors/ovl_En_Tag_Obj/z_en_tag_obj.h
index a58b2b1d3..25e7025d8 100644
--- a/src/overlays/actors/ovl_En_Tag_Obj/z_en_tag_obj.h
+++ b/src/overlays/actors/ovl_En_Tag_Obj/z_en_tag_obj.h
@@ -11,6 +11,4 @@ typedef struct EnTagObj {
/* 0x194 */ s32 hasSpawnedSeahorse;
} EnTagObj; // size = 0x198
-extern const ActorInit En_Tag_Obj_InitVars;
-
#endif // Z_EN_TAG_OBJ_H
diff --git a/src/overlays/actors/ovl_En_Takaraya/overlay.cfg b/src/overlays/actors/ovl_En_Takaraya/overlay.cfg
deleted file mode 100644
index 3fbedd25e..000000000
--- a/src/overlays/actors/ovl_En_Takaraya/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Takaraya
-z_en_takaraya.c
diff --git a/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.c b/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.c
index 726d97227..9bc0cd1b9 100644
--- a/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.c
+++ b/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.c
@@ -16,7 +16,7 @@ void EnTakaraya_Update(Actor* thisx, PlayState* play);
void EnTakaraya_Draw(Actor* thisx, PlayState* play);
#if 0
-const ActorInit En_Takaraya_InitVars = {
+ActorInit En_Takaraya_InitVars = {
ACTOR_EN_TAKARAYA,
ACTORCAT_NPC,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.h b/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.h
index cc707f027..cfa37125e 100644
--- a/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.h
+++ b/src/overlays/actors/ovl_En_Takaraya/z_en_takaraya.h
@@ -14,6 +14,4 @@ typedef struct EnTakaraya {
/* 0x2AC */ char unk_2AC[0x10];
} EnTakaraya; // size = 0x2BC
-extern const ActorInit En_Takaraya_InitVars;
-
#endif // Z_EN_TAKARAYA_H
diff --git a/src/overlays/actors/ovl_En_Talk/overlay.cfg b/src/overlays/actors/ovl_En_Talk/overlay.cfg
deleted file mode 100644
index 3fed504a4..000000000
--- a/src/overlays/actors/ovl_En_Talk/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Talk
-z_en_talk.c
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 c5b25233d..4f9b2a53d 100644
--- a/src/overlays/actors/ovl_En_Talk/z_en_talk.c
+++ b/src/overlays/actors/ovl_En_Talk/z_en_talk.c
@@ -16,7 +16,7 @@ void EnTalk_Update(Actor* thisx, PlayState* play);
void func_80BDE058(EnTalk* this, PlayState* play);
void func_80BDE090(EnTalk* this, PlayState* play);
-const ActorInit En_Talk_InitVars = {
+ActorInit En_Talk_InitVars = {
ACTOR_EN_TALK,
ACTORCAT_ITEMACTION,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Talk/z_en_talk.h b/src/overlays/actors/ovl_En_Talk/z_en_talk.h
index 393a457b5..ef2f67798 100644
--- a/src/overlays/actors/ovl_En_Talk/z_en_talk.h
+++ b/src/overlays/actors/ovl_En_Talk/z_en_talk.h
@@ -14,6 +14,4 @@ typedef struct EnTalk {
/* 0x144 */ EnTalkActionFunc actionFunc;
} EnTalk; // size = 0x148
-extern const ActorInit En_Talk_InitVars;
-
#endif // Z_EN_TALK_H
diff --git a/src/overlays/actors/ovl_En_Talk_Gibud/overlay.cfg b/src/overlays/actors/ovl_En_Talk_Gibud/overlay.cfg
deleted file mode 100644
index 9f776a093..000000000
--- a/src/overlays/actors/ovl_En_Talk_Gibud/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Talk_Gibud
-z_en_talk_gibud.c
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 393caa1d9..11d984fe7 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
@@ -49,8 +49,8 @@ void EnTalkGibud_TurnTowardsPlayer(EnTalkGibud* this, PlayState* play);
s32 EnTalkGibud_MoveToIdealGrabPositionAndRotation(EnTalkGibud* this, PlayState* play);
typedef struct {
- /* 0x0 */ s32 itemActionParam;
- /* 0x4 */ s32 item;
+ /* 0x0 */ PlayerItemAction itemAction;
+ /* 0x4 */ ItemId item;
/* 0x8 */ s32 amount;
/* 0xC */ s16 isBottledItem;
} EnTalkGibudRequestedItem;
@@ -102,7 +102,7 @@ typedef enum {
/* 2 */ EN_TALK_GIBUD_GRAB_RELEASE,
} EnTalkGibudGrabState;
-const ActorInit En_Talk_Gibud_InitVars = {
+ActorInit En_Talk_Gibud_InitVars = {
ACTOR_EN_TALK_GIBUD,
ACTORCAT_ENEMY,
FLAGS,
@@ -200,16 +200,16 @@ static DamageTable sDamageTable = {
static CollisionCheckInfoInit2 sColChkInfoInit = { 8, 0, 0, 0, MASS_HEAVY };
static EnTalkGibudRequestedItem sRequestedItemTable[] = {
- { PLAYER_AP_BOTTLE_POTION_BLUE, ITEM_POTION_BLUE, 1, true },
- { PLAYER_AP_MAGIC_BEANS, ITEM_MAGIC_BEANS, 5, false },
- { PLAYER_AP_BOTTLE_SPRING_WATER, ITEM_SPRING_WATER, 1, true },
- { PLAYER_AP_BOTTLE_FISH, ITEM_FISH, 1, true },
- { PLAYER_AP_BOTTLE_BUG, ITEM_BUG, 1, true },
- { PLAYER_AP_NUT, ITEM_NUT, 10, false },
- { PLAYER_AP_BOMB, ITEM_BOMB, 10, false },
- { PLAYER_AP_BOTTLE_HOT_SPRING_WATER, ITEM_HOT_SPRING_WATER, 1, true },
- { PLAYER_AP_BOTTLE_BIG_POE, ITEM_BIG_POE, 1, true },
- { PLAYER_AP_BOTTLE_MILK, ITEM_MILK_BOTTLE, 1, true },
+ { PLAYER_IA_BOTTLE_POTION_BLUE, ITEM_POTION_BLUE, 1, true },
+ { PLAYER_IA_MAGIC_BEANS, ITEM_MAGIC_BEANS, 5, false },
+ { PLAYER_IA_BOTTLE_SPRING_WATER, ITEM_SPRING_WATER, 1, true },
+ { PLAYER_IA_BOTTLE_FISH, ITEM_FISH, 1, true },
+ { PLAYER_IA_BOTTLE_BUG, ITEM_BUG, 1, true },
+ { PLAYER_IA_NUT, ITEM_NUT, 10, false },
+ { PLAYER_IA_BOMB, ITEM_BOMB, 10, false },
+ { PLAYER_IA_BOTTLE_HOT_SPRING_WATER, ITEM_HOT_SPRING_WATER, 1, true },
+ { PLAYER_IA_BOTTLE_BIG_POE, ITEM_BIG_POE, 1, true },
+ { PLAYER_IA_BOTTLE_MILK, ITEM_MILK_BOTTLE, 1, true },
};
static InitChainEntry sInitChain[] = {
@@ -242,7 +242,7 @@ void EnTalkGibud_Init(Actor* thisx, PlayState* play) {
this->playerStunWaitTimer = 0;
this->grabState = EN_TALK_GIBUD_GRAB_START;
this->grabWaitTimer = 0;
- this->itemActionParam = PLAYER_AP_NONE;
+ this->itemAction = PLAYER_IA_NONE;
this->drawDmgEffTimer = 0;
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
this->isTalking = false;
@@ -269,7 +269,7 @@ void EnTalkGibud_Init(Actor* thisx, PlayState* play) {
}
if (this->switchFlag != -1 && Flags_GetSwitch(play, this->switchFlag)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
EnTalkGibud_SetupIdle(this);
@@ -313,7 +313,7 @@ void EnTalkGibud_AttemptPlayerFreeze(EnTalkGibud* this, PlayState* play) {
player->actor.freezeTimer = 60;
Rumble_Request(this->actor.xzDistToPlayer, 255, 20, 150);
func_80123E90(play, &this->actor);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_AIM);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_AIM);
EnTalkGibud_SetupWalkToPlayer(this);
}
@@ -322,7 +322,7 @@ void EnTalkGibud_AttemptPlayerFreeze(EnTalkGibud* this, PlayState* play) {
void EnTalkGibud_SetupWalkToPlayer(EnTalkGibud* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_TALK_GIBUD_ANIM_WALK);
- this->actor.speedXZ = 0.4f;
+ this->actor.speed = 0.4f;
if (this->actionFunc == EnTalkGibud_AttemptPlayerFreeze) {
this->playerStunWaitTimer = 80;
@@ -358,7 +358,7 @@ void EnTalkGibud_WalkToPlayer(EnTalkGibud* this, PlayState* play) {
this->playerStunWaitTimer = 60;
Rumble_Request(this->actor.xzDistToPlayer, 255, 20, 150);
func_80123E90(play, &this->actor);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_AIM);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_AIM);
} else {
this->playerStunWaitTimer--;
}
@@ -374,9 +374,9 @@ void EnTalkGibud_WalkToPlayer(EnTalkGibud* this, PlayState* play) {
}
if (Animation_OnFrame(&this->skelAnime, 10.0f) || Animation_OnFrame(&this->skelAnime, 22.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_RIZA_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_RIZA_WALK);
} else if (!(play->gameplayFrames & 95)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_CRY);
}
}
@@ -407,9 +407,9 @@ void EnTalkGibud_Grab(EnTalkGibud* this, PlayState* play) {
if (this->grabDamageTimer == 20) {
s16 requiredScopeTemp;
- damageSfxId = player->ageProperties->unk_92 + NA_SE_VO_LI_DAMAGE_S;
+ damageSfxId = player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_DAMAGE_S;
play->damagePlayer(play, -8);
- func_800B8E58(player, damageSfxId);
+ Player_PlaySfx(player, damageSfxId);
Rumble_Request(this->actor.xzDistToPlayer, 240, 1, 12);
this->grabDamageTimer = 0;
} else {
@@ -417,12 +417,12 @@ void EnTalkGibud_Grab(EnTalkGibud* this, PlayState* play) {
}
if (Animation_OnFrame(&this->skelAnime, 0.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_ATTACK);
}
- if (!(player->stateFlags2 & 0x80) || (player->unk_B62 != 0)) {
- if ((player->unk_B62 != 0) && (player->stateFlags2 & 0x80)) {
- player->stateFlags2 &= ~0x80;
+ if (!(player->stateFlags2 & PLAYER_STATE2_80) || (player->unk_B62 != 0)) {
+ if ((player->unk_B62 != 0) && (player->stateFlags2 & PLAYER_STATE2_80)) {
+ player->stateFlags2 &= ~PLAYER_STATE2_80;
player->unk_AE8 = 100;
}
@@ -447,14 +447,14 @@ void EnTalkGibud_Grab(EnTalkGibud* this, PlayState* play) {
void EnTalkGibud_SetupGrabFail(EnTalkGibud* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_TALK_GIBUD_ANIM_DAMAGE);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_DAMAGE);
- this->actor.speedXZ = -2.0f;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_DAMAGE);
+ this->actor.speed = -2.0f;
this->actionFunc = EnTalkGibud_GrabFail;
}
void EnTalkGibud_GrabFail(EnTalkGibud* this, PlayState* play) {
- if (this->actor.speedXZ < 0.0f) {
- this->actor.speedXZ += 0.15f;
+ if (this->actor.speed < 0.0f) {
+ this->actor.speed += 0.15f;
}
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
@@ -487,18 +487,18 @@ void EnTalkGibud_TurnAwayAndShakeHead(EnTalkGibud* this, PlayState* play) {
void EnTalkGibud_SetupWalkToHome(EnTalkGibud* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_TALK_GIBUD_ANIM_WALK);
- this->actor.speedXZ = 0.4f;
+ this->actor.speed = 0.4f;
this->actionFunc = EnTalkGibud_WalkToHome;
}
void EnTalkGibud_WalkToHome(EnTalkGibud* this, PlayState* play) {
Math_SmoothStepToS(&this->headRotation.y, 0, 1, 100, 0);
Math_SmoothStepToS(&this->upperBodyRotation.y, 0, 1, 100, 0);
- if (Actor_XZDistanceToPoint(&this->actor, &this->actor.home.pos) < 5.0f) {
- if (this->actor.speedXZ > 0.2f) {
- this->actor.speedXZ -= 0.2f;
+ if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) < 5.0f) {
+ if (this->actor.speed > 0.2f) {
+ this->actor.speed -= 0.2f;
} else {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 1, 200, 10);
@@ -507,7 +507,8 @@ void EnTalkGibud_WalkToHome(EnTalkGibud* this, PlayState* play) {
EnTalkGibud_SetupIdle(this);
}
} else {
- Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_YawToPoint(&this->actor, &this->actor.home.pos), 450);
+ Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos),
+ 450);
this->actor.world.rot = this->actor.shape.rot;
}
if (EnTalkGibud_PlayerInRangeWithCorrectState(this, play)) {
@@ -520,13 +521,13 @@ void EnTalkGibud_WalkToHome(EnTalkGibud* this, PlayState* play) {
void EnTalkGibud_SetupStunned(EnTalkGibud* this) {
this->stunTimer = 10;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
if (this->drawDmgEffTimer != 0) {
- Actor_SetColorFilter(&this->actor, 0, 0xC8, 0, 0x28);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 200, COLORFILTER_BUFFLAG_OPA, 40);
} else {
- Actor_SetColorFilter(&this->actor, 0, 0xC8, 0, 0x28);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 200, COLORFILTER_BUFFLAG_OPA, 40);
}
this->actionFunc = EnTalkGibud_Stunned;
@@ -548,17 +549,17 @@ void EnTalkGibud_Stunned(EnTalkGibud* this, PlayState* play) {
void EnTalkGibud_SetupDamage(EnTalkGibud* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_TALK_GIBUD_ANIM_DAMAGE);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_DAMAGE);
this->stunTimer = 0;
this->grabWaitTimer = 0;
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
- this->actor.speedXZ = -2.0f;
+ this->actor.speed = -2.0f;
this->actionFunc = EnTalkGibud_Damage;
}
void EnTalkGibud_Damage(EnTalkGibud* this, PlayState* play) {
- if (this->actor.speedXZ < 0.0f) {
- this->actor.speedXZ += 0.15f;
+ if (this->actor.speed < 0.0f) {
+ this->actor.speed += 0.15f;
}
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
@@ -585,7 +586,7 @@ void EnTalkGibud_Damage(EnTalkGibud* this, PlayState* play) {
void EnTalkGibud_SetupDead(EnTalkGibud* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_TALK_GIBUD_ANIM_DEATH);
this->actor.flags &= ~ACTOR_FLAG_1;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_DEAD);
this->deathTimer = 0;
this->actionFunc = EnTalkGibud_Dead;
}
@@ -611,7 +612,7 @@ void EnTalkGibud_SetupRevive(EnTalkGibud* this) {
Animation_Change(&this->skelAnime, &gGibdoRedeadDeathAnim, -1.0f, Animation_GetLastFrame(&gGibdoRedeadDeathAnim),
0.0f, ANIMMODE_ONCE, -8.0f);
this->actor.flags |= ACTOR_FLAG_1;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_REVERSE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_REVERSE);
this->deathTimer = 0;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = EnTalkGibud_Revive;
@@ -703,10 +704,10 @@ void EnTalkGibud_GetNextTextBoxId(EnTalkGibud* this, PlayState* play) {
}
}
-s32 EnTalkGibud_PresentedItemMatchesRequest(EnTalkGibud* this, PlayState* play, s32 presentedItemActionParam) {
+s32 EnTalkGibud_PresentedItemMatchesRequest(EnTalkGibud* this, PlayState* play, PlayerItemAction presentedItemAction) {
EnTalkGibudRequestedItem* requestedItem = &sRequestedItemTable[this->requestedItemIndex];
- if (requestedItem->itemActionParam == presentedItemActionParam) {
+ if (requestedItem->itemAction == presentedItemAction) {
if (!requestedItem->isBottledItem) {
if (AMMO(requestedItem->item) >= requestedItem->amount) {
return EN_TALK_GIBUD_REQUESTED_ITEM_MET;
@@ -723,15 +724,16 @@ s32 EnTalkGibud_PresentedItemMatchesRequest(EnTalkGibud* this, PlayState* play,
void EnTalkGibud_CheckPresentedItem(EnTalkGibud* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- s32 itemActionParam;
+ PlayerItemAction itemAction;
- if (this->itemActionParam == PLAYER_AP_NONE) {
- itemActionParam = func_80123810(play);
- if (itemActionParam != PLAYER_AP_NONE) {
- this->itemActionParam = itemActionParam;
+ if (this->itemAction == PLAYER_IA_NONE) {
+ itemAction = func_80123810(play);
+
+ if (itemAction != PLAYER_IA_NONE) {
+ this->itemAction = itemAction;
}
- if (this->itemActionParam > PLAYER_AP_NONE) {
- switch (EnTalkGibud_PresentedItemMatchesRequest(this, play, this->itemActionParam)) {
+ if (this->itemAction > PLAYER_IA_NONE) {
+ switch (EnTalkGibud_PresentedItemMatchesRequest(this, play, this->itemAction)) {
case EN_TALK_GIBUD_REQUESTED_ITEM_MET:
player->actor.textId = 0x138A;
this->textId = 0x138A;
@@ -750,8 +752,8 @@ void EnTalkGibud_CheckPresentedItem(EnTalkGibud* this, PlayState* play) {
default:
break;
}
- func_801477B4(play);
- } else if (this->itemActionParam < PLAYER_AP_NONE) {
+ Message_CloseTextbox(play);
+ } else if (this->itemAction <= PLAYER_IA_MINUS1) {
Message_StartTextbox(play, 0x1389, &this->actor);
this->textId = 0x1389;
}
@@ -775,7 +777,7 @@ void EnTalkGibud_PassiveIdle(EnTalkGibud* this, PlayState* play) {
this->isTalking = true;
Message_StartTextbox(play, 0x1388, &this->actor);
this->textId = 0x1388;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_AIM);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_AIM);
EnTalkGibud_SetupTalk(this);
} else if (this->actor.xzDistToPlayer < 100.0f && !(this->collider.base.acFlags & AC_HIT)) {
Actor_TrackPlayer(play, &this->actor, &this->headRotation, &this->upperBodyRotation, this->actor.focus.pos);
@@ -787,7 +789,7 @@ void EnTalkGibud_PassiveIdle(EnTalkGibud* this, PlayState* play) {
}
void EnTalkGibud_SetupTalk(EnTalkGibud* this) {
- this->itemActionParam = PLAYER_AP_NONE;
+ this->itemAction = PLAYER_IA_NONE;
this->actionFunc = EnTalkGibud_Talk;
}
@@ -822,10 +824,10 @@ void EnTalkGibud_Talk(EnTalkGibud* this, PlayState* play) {
if (!requestedItem->isBottledItem) {
Inventory_ChangeAmmo(requestedItem->item, -requestedItem->amount);
} else {
- func_80123D50(play, player, ITEM_BOTTLE, PLAYER_AP_BOTTLE);
+ Player_UpdateBottleHeld(play, player, ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY);
}
- player->stateFlags1 |= 0x20;
- player->stateFlags1 |= 0x20000000;
+ player->stateFlags1 |= PLAYER_STATE1_20;
+ player->stateFlags1 |= PLAYER_STATE1_20000000;
this->actor.flags |= ACTOR_FLAG_100000;
EnTalkGibud_SetupDisappear(this);
} else {
@@ -868,15 +870,15 @@ void EnTalkGibud_Disappear(EnTalkGibud* this, PlayState* play) {
func_800B3030(play, &pos, &velocity, &accel, 100, 0, 1);
}
func_800B9010(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG);
- player->stateFlags1 |= 0x20000000;
+ player->stateFlags1 |= PLAYER_STATE1_20000000;
this->disappearanceTimer--;
} else {
if (this->switchFlag != -1) {
Flags_SetSwitch(play, this->switchFlag);
}
- player->stateFlags1 &= ~0x20;
- player->stateFlags1 &= ~0x20000000;
- Actor_MarkForDeath(&this->actor);
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20000000;
+ Actor_Kill(&this->actor);
}
}
@@ -894,9 +896,10 @@ void EnTalkGibud_FacePlayerWhenTalking(EnTalkGibud* this, PlayState* play) {
s32 EnTalkGibud_PlayerInRangeWithCorrectState(EnTalkGibud* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if ((Actor_DistanceToPoint(&player->actor, &this->actor.home.pos) < 150.0f) &&
- !(player->stateFlags1 & (0x200000 | 0x80000 | 0x40000 | 0x4000 | 0x2000 | 0x80)) &&
- !(player->stateFlags2 & (0x4000 | 0x80))) {
+ if ((Actor_WorldDistXYZToPoint(&player->actor, &this->actor.home.pos) < 150.0f) &&
+ !(player->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_40000 |
+ PLAYER_STATE1_80000 | PLAYER_STATE1_200000)) &&
+ !(player->stateFlags2 & (PLAYER_STATE2_80 | PLAYER_STATE2_4000))) {
return true;
}
@@ -911,7 +914,7 @@ s32 EnTalkGibud_PlayerInRangeWithCorrectState(EnTalkGibud* this, PlayState* play
s32 EnTalkGibud_PlayerOutOfRange(EnTalkGibud* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (Actor_DistanceToPoint(&player->actor, &this->actor.home.pos) >= 150.0f) {
+ if (Actor_WorldDistXYZToPoint(&player->actor, &this->actor.home.pos) >= 150.0f) {
return true;
}
@@ -1015,7 +1018,7 @@ void EnTalkGibud_UpdateDamage(EnTalkGibud* this, PlayState* play) {
switch (this->actor.colChkInfo.damageEffect) {
case EN_TALK_GIBUD_DMGEFF_DAMAGE:
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
if (player->unk_ADC != 0) {
this->unk_3F7 = player->unk_ADD;
}
@@ -1036,7 +1039,7 @@ void EnTalkGibud_UpdateDamage(EnTalkGibud* this, PlayState* play) {
break;
case EN_TALK_GIBUD_DMGEFF_FIRE_ARROW:
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
if (this->actor.colChkInfo.health == 0) {
EnTalkGibud_SetupDead(this);
} else {
@@ -1048,7 +1051,7 @@ void EnTalkGibud_UpdateDamage(EnTalkGibud* this, PlayState* play) {
break;
case EN_TALK_GIBUD_DMGEFF_LIGHT_ARROW:
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
if (this->actor.colChkInfo.health == 0) {
EnTalkGibud_SetupDead(this);
} else {
@@ -1108,9 +1111,11 @@ void EnTalkGibud_MoveGrabbedPlayerAwayFromWall(EnTalkGibud* this, PlayState* pla
Player* player = GET_PLAYER(play);
Vec3f targetPos;
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 35.0f, 29);
+ 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 &&
- (this->actor.bgCheckFlags & 8)) {
+ (this->actor.bgCheckFlags & BGCHECKFLAG_WALL)) {
targetPos = player->actor.world.pos;
targetPos.x += 10.0f * Math_SinS(this->actor.wallYaw);
targetPos.z += 10.0f * Math_CosS(this->actor.wallYaw);
diff --git a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h
index ba55f9fc3..d887b1c0d 100644
--- a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h
+++ b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h
@@ -19,7 +19,7 @@ typedef struct EnTalkGibud {
/* 0x1D8 */ Vec3f limbPos[15];
/* 0x28C */ s32 limbIndex;
/* 0x290 */ s32 requestedItemIndex;
- /* 0x294 */ s32 itemActionParam;
+ /* 0x294 */ PlayerItemAction itemAction;
/* 0x298 */ s32 switchFlag;
/* 0x29C */ f32 drawDmgEffAlpha;
/* 0x2A0 */ f32 drawDmgEffScale;
@@ -45,6 +45,4 @@ typedef struct EnTalkGibud {
/* 0x3F7 */ s8 unk_3F7; // related to player->unk_ADD
} EnTalkGibud; // size = 0x3F8
-extern const ActorInit En_Talk_Gibud_InitVars;
-
#endif // Z_EN_TALK_GIBUD_H
diff --git a/src/overlays/actors/ovl_En_Tanron1/overlay.cfg b/src/overlays/actors/ovl_En_Tanron1/overlay.cfg
deleted file mode 100644
index 5a6959a4e..000000000
--- a/src/overlays/actors/ovl_En_Tanron1/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Tanron1
-z_en_tanron1.c
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 fbc74cb10..fec6a2d3b 100644
--- a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c
+++ b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c
@@ -18,7 +18,7 @@ void EnTanron1_Draw(Actor* thisx, PlayState* play);
void func_80BB5318(EnTanron1* this, PlayState* play);
void func_80BB5AAC(EnTanron1* this, PlayState* play);
-const ActorInit En_Tanron1_InitVars = {
+ActorInit En_Tanron1_InitVars = {
ACTOR_EN_TANRON1,
ACTORCAT_ENEMY,
FLAGS,
@@ -149,7 +149,7 @@ void EnTanron1_Update(Actor* thisx, PlayState* play) {
break;
}
- if ((player->itemActionParam == 7) && (player->unk_B28 != 0)) {
+ if ((player->heldItemAction == PLAYER_IA_STICK) && (player->unk_B28 != 0)) {
this->unk_14C.x = player->meleeWeaponInfo[0].tip.x;
this->unk_14C.y = player->meleeWeaponInfo[0].tip.y;
this->unk_14C.z = player->meleeWeaponInfo[0].tip.z;
diff --git a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.h b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.h
index d8e96537f..bff1b46bf 100644
--- a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.h
+++ b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.h
@@ -39,6 +39,4 @@ typedef struct EnTanron1 {
/* 0x3360 */ Vec3f unk_3360;
} EnTanron1; // size = 0x336C
-extern const ActorInit En_Tanron1_InitVars;
-
#endif // Z_EN_TANRON1_H
diff --git a/src/overlays/actors/ovl_En_Tanron2/overlay.cfg b/src/overlays/actors/ovl_En_Tanron2/overlay.cfg
deleted file mode 100644
index c585d560b..000000000
--- a/src/overlays/actors/ovl_En_Tanron2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Tanron2
-z_en_tanron2.c
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 9737c9f81..2d1c29970 100644
--- a/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c
+++ b/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c
@@ -30,7 +30,7 @@ Boss04* D_80BB8450;
f32 D_80BB8454;
EnTanron2* D_80BB8458[82];
-const ActorInit En_Tanron2_InitVars = {
+ActorInit En_Tanron2_InitVars = {
ACTOR_EN_TANRON2,
ACTORCAT_BOSS,
FLAGS,
@@ -143,7 +143,7 @@ void EnTanron2_Init(Actor* thisx, PlayState* play) {
Collider_InitAndSetCylinder(play, &this->collider1, &this->actor, &sCylinderInit1);
Collider_InitAndSetCylinder(play, &this->collider2, &this->actor, &sCylinderInit2);
- if ((KREG(64) != 0) || (gSaveContext.eventInf[6] & 1)) {
+ if ((KREG(64) != 0) || CHECK_EVENTINF(EVENTINF_60)) {
func_80BB69C0(this);
} else {
func_80BB6F64(this);
@@ -155,7 +155,7 @@ void EnTanron2_Init(Actor* thisx, PlayState* play) {
this->unk_14C = -this->unk_14C;
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 60.0f, 60.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 60.0f, 60.0f, UPDBGCHECKINFO_FLAG_4);
this->actor.floorHeight += 20.0f;
this->unk_148 = Rand_ZeroFloat(32.0f);
}
@@ -188,7 +188,7 @@ void func_80BB69FC(EnTanron2* this, PlayState* play) {
if ((this->unk_158 == 0) && ((sp34 + sp30 + sp2C) < 2.0f)) {
this->unk_158 = 1;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_B_SLIME_EAT);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_B_SLIME_EAT);
}
Math_ApproachF(&this->unk_15C, 1.0f, 1.0f, 0.02f);
@@ -201,7 +201,7 @@ void func_80BB69FC(EnTanron2* this, PlayState* play) {
void func_80BB6B80(EnTanron2* this) {
this->actionFunc = func_80BB6BD8;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.velocity.z = 0.0f;
this->actor.velocity.y = 0.0f;
this->actor.velocity.x = 0.0f;
@@ -228,7 +228,7 @@ void func_80BB6BD8(EnTanron2* this, PlayState* play) {
if (this->actor.world.pos.y <= this->actor.floorHeight) {
this->actor.world.pos.y = this->actor.floorHeight;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_IKURA_JUMP2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_IKURA_JUMP2);
sp2C = D_80BB8450->unk_6BC.x - this->actor.world.pos.x;
sp28 = D_80BB8450->unk_6BC.z - this->actor.world.pos.z;
@@ -240,14 +240,14 @@ void func_80BB6BD8(EnTanron2* this, PlayState* play) {
} else {
sp32 = Math_Atan2S(sp2C, sp28);
}
- this->actor.speedXZ = Rand_ZeroFloat(5.0f) + 5.0f;
+ this->actor.speed = Rand_ZeroFloat(5.0f) + 5.0f;
break;
case 1:
sp32 = Math_Atan2S(sp2C, sp28);
- this->actor.speedXZ += 2.0f;
- if (this->actor.speedXZ > 10.0f) {
- this->actor.speedXZ = 10.0f;
+ this->actor.speed += 2.0f;
+ if (this->actor.speed > 10.0f) {
+ this->actor.speed = 10.0f;
}
break;
@@ -255,14 +255,14 @@ void func_80BB6BD8(EnTanron2* this, PlayState* play) {
sp32 = Math_Atan2S(player->actor.world.pos.x - this->actor.world.pos.x,
player->actor.world.pos.z - this->actor.world.pos.z) +
(s16)Rand_ZeroFloat(20000.0f);
- this->actor.speedXZ = Rand_ZeroFloat(7.0f) + 7.0f;
+ this->actor.speed = Rand_ZeroFloat(7.0f) + 7.0f;
if ((this->unk_152 == 0) && (D_80BB8450->unk_1F6 == 0)) {
this->unk_158 = 1;
}
break;
}
Matrix_RotateYS(sp32, MTXMODE_NEW);
- Matrix_MultVecZ(this->actor.speedXZ, &this->actor.velocity);
+ Matrix_MultVecZ(this->actor.speed, &this->actor.velocity);
this->actor.velocity.y = Rand_ZeroFloat(5.0f) + 12.0f;
this->unk_14E = 5;
}
@@ -285,7 +285,7 @@ void func_80BB6BD8(EnTanron2* this, PlayState* play) {
func_80BB69C0(this);
} else {
this->unk_150 = 10;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_IKURA_JUMP1);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_IKURA_JUMP1);
}
}
}
@@ -318,9 +318,9 @@ void func_80BB6F78(EnTanron2* this, PlayState* play) {
if (this->actor.world.pos.y <= this->actor.floorHeight) {
this->actor.world.pos.y = this->actor.floorHeight;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_IKURA_JUMP2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_IKURA_JUMP2);
if (D_80BB8450->unk_6F8 > 0.1f) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_OUT_OF_WATER_L);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_OUT_OF_WATER_L);
}
this->actor.velocity.y = Rand_ZeroFloat(5.0f) + 12.0f;
this->unk_14E = 5;
@@ -344,7 +344,7 @@ void func_80BB6F78(EnTanron2* this, PlayState* play) {
this->unk_159 = 0;
} else {
this->unk_150 = 0xA;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_IKURA_JUMP1);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_IKURA_JUMP1);
}
}
}
@@ -381,7 +381,7 @@ void func_80BB7398(EnTanron2* this, PlayState* play) {
Enemy_StartFinishingBlow(play, &this->actor);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 30, NA_SE_EN_IKURA_DEAD);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_IKURA_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_IKURA_DAMAGE);
}
}
@@ -394,7 +394,7 @@ void func_80BB7408(EnTanron2* this, PlayState* play) {
if (this->actor.world.pos.y <= this->actor.floorHeight) {
this->actor.world.pos.y = this->actor.floorHeight;
if ((s8)this->actor.colChkInfo.health <= 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
func_80BB71C8(this, play);
D_80BB8450->unk_6F6--;
D_80BB8450->unk_2E2 += 4;
@@ -427,9 +427,9 @@ void func_80BB7578(EnTanron2* this, PlayState* play) {
if (acHitInfo->toucher.dmgFlags & 0x80) {
func_80BB6B80(this);
this->unk_158 = 1;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_IKURA_DAMAGE);
- if ((player->unk_730 != 0) && (&this->actor != player->unk_730)) {
- player->unk_730 = &this->actor;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_IKURA_DAMAGE);
+ if ((player->targetedActor != NULL) && (&this->actor != player->targetedActor)) {
+ player->targetedActor = &this->actor;
play->actorCtx.targetContext.arrowPointedActor = &this->actor;
play->actorCtx.targetContext.targetedActor = &this->actor;
}
@@ -448,7 +448,7 @@ void func_80BB7578(EnTanron2* this, PlayState* play) {
func_80BB7398(this, play);
}
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_IKURA_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_IKURA_DAMAGE);
goto block_18;
}
}
@@ -470,7 +470,7 @@ void func_80BB7578(EnTanron2* this, PlayState* play) {
Matrix_MultVecZ(10.0f, &this->actor.velocity);
this->unk_152 = Rand_ZeroFloat(100.0f) + 200.0f;
} else if (D_80BB8450->unk_1F6 == 10) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
func_80BB71C8(this, play);
}
}
@@ -579,7 +579,7 @@ void func_80BB7B90(Actor* thisx, PlayState* play) {
D_80BB8454 = (Math_SinS(play->gameplayFrames * 0x3000) * 0.1f) + 1.0f;
if (D_80BB8450->unk_1F6 == 11) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
diff --git a/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.h b/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.h
index efbcc3108..3ae619a2d 100644
--- a/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.h
+++ b/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.h
@@ -28,6 +28,4 @@ typedef struct EnTanron2 {
/* 0x1B0 */ ColliderCylinder collider2;
} EnTanron2; // size = 0x1FC
-extern const ActorInit En_Tanron2_InitVars;
-
#endif // Z_EN_TANRON2_H
diff --git a/src/overlays/actors/ovl_En_Tanron3/overlay.cfg b/src/overlays/actors/ovl_En_Tanron3/overlay.cfg
deleted file mode 100644
index 1084615ef..000000000
--- a/src/overlays/actors/ovl_En_Tanron3/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Tanron3
-z_en_tanron3.c
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 d683cde8c..c3d62e166 100644
--- a/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c
+++ b/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c
@@ -31,7 +31,7 @@ static Vec3f sZeroVec[] = { 0.0f, 0.0f, 0.0f };
static Boss03* sGyorg = NULL;
-const ActorInit En_Tanron3_InitVars = {
+ActorInit En_Tanron3_InitVars = {
ACTOR_EN_TANRON3,
ACTORCAT_BOSS,
FLAGS,
@@ -153,7 +153,7 @@ void EnTanron3_SetupLive(EnTanron3* this, PlayState* play) {
this->rotationStep = 0;
this->rotationScale = 5;
this->workTimer[WORK_TIMER_PICK_NEW_DEVIATION] = 50;
- this->actor.speedXZ = 5.0f;
+ this->actor.speed = 5.0f;
this->speedMaxStep = 0.5f;
this->deviation.x = randPlusMinusPoint5Scaled(500.0f);
this->deviation.y = randPlusMinusPoint5Scaled(100.0f);
@@ -180,7 +180,7 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) {
Player* player = GET_PLAYER(play);
this->skelAnime.curFrame = 4.0f;
- if ((player->actor.bgCheckFlags & 1) && 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)) {
@@ -205,13 +205,13 @@ 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) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_PIRANHA_ATTACK);
+ 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 & 0x80)) {
+ if (this->workTimer[WORK_TIMER_ATTACK] == 0 || (player->stateFlags2 & PLAYER_STATE2_80)) {
this->workTimer[WORK_TIMER_WAIT] = 150;
this->isNonHostile = true;
}
@@ -219,7 +219,7 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) {
case true:
if (sGyorg->unk_324 != 0 && !(this->timer & 0x7)) {
this->nextRotationAngle = 0x4E20;
- this->actor.speedXZ = 6.0f;
+ this->actor.speed = 6.0f;
} else {
this->nextRotationAngle = 0x1F40;
}
@@ -232,7 +232,7 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) {
// on attacking the player; in that case, this code will make it turn in the
// opposite direction and swim away. In both cases, the fish's target y-position
// will be slightly above the halfway point of the water.
- atanTemp = Math_FAtan2F(this->targetPos.z, this->targetPos.x);
+ atanTemp = Math_Atan2S_XY(this->targetPos.z, this->targetPos.x);
Matrix_RotateYS(atanTemp, MTXMODE_NEW);
Matrix_MultVecZ(700.0f, &this->targetPos);
this->targetPos.y = 250.0f;
@@ -242,7 +242,7 @@ 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.speedXZ > 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);
@@ -259,13 +259,13 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) {
// Rotate the fish to look towards its target
xzDistance = sqrtf(SQ(xDistance) + SQ(zDistance));
- atanTemp = Math_FAtan2F(xzDistance, -yDistance);
+ atanTemp = Math_Atan2S_XY(xzDistance, -yDistance);
Math_ApproachS(&this->actor.world.rot.x, atanTemp, this->rotationScale, this->rotationStep);
- atanTemp = Math_FAtan2F(zDistance, xDistance);
+ atanTemp = Math_Atan2S_XY(zDistance, xDistance);
Math_SmoothStepToS(&this->actor.world.rot.y, atanTemp, this->rotationScale, this->rotationStep, 0);
Math_ApproachS(&this->rotationStep, this->targetRotationStep, 1, 0x100);
- Math_ApproachF(&this->actor.speedXZ, this->targetSpeedXZ, 1.0f, this->speedMaxStep);
+ Math_ApproachF(&this->actor.speed, this->targetSpeedXZ, 1.0f, this->speedMaxStep);
Actor_MoveWithoutGravityReverse(&this->actor);
} else {
switch (this->isBeached) {
@@ -275,13 +275,13 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) {
this->targetPosWithDeviation.y = this->waterSurfaceYPos - 50.0f;
this->workTimer[WORK_TIMER_OUT_OF_WATER] = 25;
Math_ApproachS(&this->actor.world.rot.x, 0x3000, 5, 0xBD0);
- if (this->actor.bgCheckFlags & 8) {
- this->actor.speedXZ = 0.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
+ this->actor.speed = 0.0f;
if (this->actor.velocity.y > 0.0f) {
this->actor.velocity.y = -1.0f;
}
}
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
// Fish has touched land
this->isBeached = true;
}
@@ -289,10 +289,10 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) {
case true:
this->nextRotationAngle = 0x3A98;
this->actor.gravity = -1.5f;
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
// Fish is still touching land, so it's still beached. Randomly flop around
this->actor.velocity.y = Rand_ZeroFloat(5.0f) + 5.0f;
- this->actor.speedXZ = Rand_ZeroFloat(2.0f) + 2.0f;
+ 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;
@@ -304,7 +304,7 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) {
if (Rand_ZeroOne() < 0.5f) {
this->targetShapeRotation.y = (s16)Rand_ZeroFloat(0x10000);
}
- this->actor.world.rot.y = Math_FAtan2F(this->actor.world.pos.z, this->actor.world.pos.x) +
+ this->actor.world.rot.y = Math_Atan2S_XY(this->actor.world.pos.z, this->actor.world.pos.x) +
(s16)randPlusMinusPoint5Scaled(0xCE20);
}
@@ -343,18 +343,18 @@ void EnTanron3_SetupDie(EnTanron3* this, PlayState* play) {
xDistance = this->actor.world.pos.x - player->actor.world.pos.x;
yDistance = this->actor.world.pos.y - player->actor.world.pos.y + 30.0f;
zDistance = this->actor.world.pos.z - player->actor.world.pos.z;
- this->actor.world.rot.x = Math_FAtan2F(sqrtf(SQ(xDistance) + SQ(zDistance)), -yDistance);
- this->actor.world.rot.y = Math_FAtan2F(zDistance, xDistance);
+ this->actor.world.rot.x = Math_Atan2S_XY(sqrtf(SQ(xDistance) + SQ(zDistance)), -yDistance);
+ this->actor.world.rot.y = Math_Atan2S_XY(zDistance, xDistance);
this->workTimer[WORK_TIMER_DIE] = 6;
- this->actor.speedXZ = 10.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KONB_MINI_DEAD);
+ this->actor.speed = 10.0f;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KONB_MINI_DEAD);
}
void EnTanron3_Die(EnTanron3* this, PlayState* play) {
Actor_MoveWithoutGravityReverse(&this->actor);
if (this->workTimer[WORK_TIMER_DIE] == 0) {
EnTanron3_SpawnBubbles(this, play);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
if (Rand_ZeroOne() < 0.3f) {
Item_DropCollectibleRandom(play, NULL, &this->actor.world.pos, 0x60);
}
@@ -367,8 +367,8 @@ void EnTanron3_CheckCollisions(EnTanron3* this, PlayState* play) {
if (player->actor.world.pos.y > 350.0f) {
if (this->atCollider.base.atFlags & AT_HIT) {
this->atCollider.base.atFlags &= ~AT_HIT;
- func_800B8D50(play, NULL, 3.0f, Math_FAtan2F(-player->actor.world.pos.z, -player->actor.world.pos.x), 5.0f,
- 0);
+ func_800B8D50(play, NULL, 3.0f, Math_Atan2S_XY(-player->actor.world.pos.z, -player->actor.world.pos.x),
+ 5.0f, 0);
}
}
if (this->acCollider.base.acFlags & AC_HIT) {
@@ -404,7 +404,7 @@ void EnTanron3_Update(Actor* thisx, PlayState* play) {
}
this->actionFunc(this, play);
- Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 20.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 20.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
// The fish has either just entered or just exited the water, so create a splash effect
if (((this->actor.prevPos.y < this->waterSurfaceYPos) && (this->waterSurfaceYPos <= this->actor.world.pos.y)) ||
@@ -413,7 +413,7 @@ void EnTanron3_Update(Actor* thisx, PlayState* play) {
splashPos.y = this->waterSurfaceYPos + 10.0f;
splashPos.z = this->actor.world.pos.z;
EffectSsGSplash_Spawn(play, &splashPos, NULL, NULL, 1, 500);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_OUT_OF_WATER);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_OUT_OF_WATER);
}
}
@@ -458,7 +458,7 @@ void EnTanron3_Draw(Actor* thisx, PlayState* play) {
}
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnTanron3_OverrideLimbDraw, NULL, &this->actor);
- POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP);
+ POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.h b/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.h
index 14971d6e8..8859de6a4 100644
--- a/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.h
+++ b/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.h
@@ -41,6 +41,4 @@ typedef struct EnTanron3 {
/* 0x2F8 */ EnTanron3ActionFunc actionFunc;
} EnTanron3; // size = 0x2FC
-extern const ActorInit En_Tanron3_InitVars;
-
#endif // Z_EN_TANRON3_H
diff --git a/src/overlays/actors/ovl_En_Tanron4/overlay.cfg b/src/overlays/actors/ovl_En_Tanron4/overlay.cfg
deleted file mode 100644
index 734d70ac7..000000000
--- a/src/overlays/actors/ovl_En_Tanron4/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Tanron4
-z_en_tanron4.c
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 c67b36940..1eaf1d128 100644
--- a/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c
+++ b/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c
@@ -31,7 +31,7 @@ typedef enum {
/* 1 */ SEAGULL_TIMER_CHOOSE_TARGET,
} SeagullTimers;
-const ActorInit En_Tanron4_InitVars = {
+ActorInit En_Tanron4_InitVars = {
ACTOR_EN_TANRON4,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -51,7 +51,7 @@ void EnTanron4_Init(Actor* thisx, PlayState* play2) {
OBJECT_TANRON4_LIMB_MAX);
thisx->flags &= ~ACTOR_FLAG_1;
- thisx->speedXZ = 3.0f + KREG(48);
+ thisx->speed = 3.0f + KREG(48);
thisx->uncullZoneForward = 10000.0f + KREG(70);
this->randRollTimer = Rand_ZeroFloat(10.0f);
diff --git a/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.h b/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.h
index de4874cfc..36a48c91a 100644
--- a/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.h
+++ b/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.h
@@ -28,6 +28,4 @@ typedef struct EnTanron4 {
#define SEAGULL_CLONE -1
#define SEAGULL_FOLLOW_ACTOR 100
-extern const ActorInit En_Tanron4_InitVars;
-
#endif // Z_EN_TANRON4_H
diff --git a/src/overlays/actors/ovl_En_Tanron5/overlay.cfg b/src/overlays/actors/ovl_En_Tanron5/overlay.cfg
deleted file mode 100644
index 4a522458e..000000000
--- a/src/overlays/actors/ovl_En_Tanron5/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Tanron5
-z_en_tanron5.c
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 f45afbb01..0e5b8a0f5 100644
--- a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c
+++ b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c
@@ -23,7 +23,7 @@ void func_80BE5C10(Actor* thisx, PlayState* play);
s32 D_80BE5D80 = 0;
-const ActorInit En_Tanron5_InitVars = {
+ActorInit En_Tanron5_InitVars = {
ACTOR_EN_TANRON5,
ACTORCAT_BOSS,
FLAGS,
@@ -150,7 +150,7 @@ void EnTanron5_Init(Actor* thisx, PlayState* play) {
if (ENTANRON5_GET(&this->actor) >= ENTANRON5_100) {
D_80BE5D80++;
if (D_80BE5D80 > 60) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -163,7 +163,7 @@ void EnTanron5_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->actor, (Rand_ZeroFloat(0.015f) + 0.01f) * D_80BE5DD0);
}
- this->actor.speedXZ = (Rand_ZeroFloat(10.0f) + 10.0f) * D_80BE5DD0;
+ this->actor.speed = (Rand_ZeroFloat(10.0f) + 10.0f) * D_80BE5DD0;
this->actor.velocity.y = (Rand_ZeroFloat(10.0f) + 15.0f) * D_80BE5DD0;
this->actor.gravity = -2.5f * D_80BE5DD0;
this->actor.terminalVelocity = -1000.0f * D_80BE5DD0;
@@ -201,9 +201,9 @@ void EnTanron5_Init(Actor* thisx, PlayState* play) {
Collider_InitAndSetCylinder(play, &child->collider, &child->actor, &sCylinderInit);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
- Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 150.0f, 100.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 150.0f, 100.0f, UPDBGCHECKINFO_FLAG_4);
this->actor.world.pos.y = this->actor.floorHeight + -20.0f;
}
}
@@ -230,7 +230,7 @@ void EnTanron5_Update(Actor* thisx, PlayState* play2) {
this->unk_1A0++;
Actor_SetScale(&this->actor, 0.0f);
if (this->unk_1A0 >= 40) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
return;
} else {
@@ -349,7 +349,7 @@ void EnTanron5_Update(Actor* thisx, PlayState* play2) {
}
this->actor.shape.rot.y += phi_v0;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_BIG_BOMB_EXPLOSION);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_BIG_BOMB_EXPLOSION);
func_800BC848(&this->actor, play, 4, 4);
this->unk_1A0++;
} else {
@@ -360,7 +360,7 @@ void EnTanron5_Update(Actor* thisx, PlayState* play2) {
sp90.y = info->bumper.hitPos.y;
sp90.z = info->bumper.hitPos.z;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_SHIELD_REFLECT_SW);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_SHIELD_REFLECT_SW);
CollisionCheck_SpawnShieldParticlesMetal(play, &sp90);
}
}
@@ -406,18 +406,18 @@ void func_80BE5818(Actor* thisx, PlayState* play2) {
this->unk_1A0++;
this->actor.world.pos.y -= 2.0f * D_80BE5DD0;
if (this->unk_1A0 == 40) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
return;
}
if (DECR(this->unk_144) == 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
- if (this->actor.speedXZ > 0.02f) {
+ if (this->actor.speed > 0.02f) {
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 150.0f, 100.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 150.0f, 100.0f, UPDBGCHECKINFO_FLAG_4);
}
if (ENTANRON5_GET(&this->actor) < ENTANRON5_110) {
@@ -425,7 +425,7 @@ void func_80BE5818(Actor* thisx, PlayState* play2) {
this->actor.shape.rot.y += this->unk_19A;
sp6C = 1225.0f;
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
if (ENTANRON5_GET(&this->actor) < ENTANRON5_108) {
Math_Vec3f_Copy(&sp5C, &this->actor.world.pos);
sp5C.y = this->actor.floorHeight;
@@ -435,15 +435,15 @@ void func_80BE5818(Actor* thisx, PlayState* play2) {
}
this->unk_1A0++;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
} else {
sp6C = 400.0f;
this->unk_198 += 0x2000;
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->unk_198 = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
}
@@ -464,7 +464,7 @@ void func_80BE5818(Actor* thisx, PlayState* play2) {
} else {
Item_Give(play, ITEM_MAGIC_LARGE);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
play_sound(NA_SE_SY_GET_ITEM);
} else {
this->unk_1A1 = 20;
diff --git a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.h b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.h
index 9f9e47021..d40938bf8 100644
--- a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.h
+++ b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.h
@@ -25,6 +25,4 @@ typedef struct EnTanron5 {
/* 0x1A1 */ u8 unk_1A1;
} EnTanron5; // size = 0x1A4
-extern const ActorInit En_Tanron5_InitVars;
-
#endif // Z_EN_TANRON5_H
diff --git a/src/overlays/actors/ovl_En_Tanron6/overlay.cfg b/src/overlays/actors/ovl_En_Tanron6/overlay.cfg
deleted file mode 100644
index 2e81ae121..000000000
--- a/src/overlays/actors/ovl_En_Tanron6/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Tanron6
-z_en_tanron6.c
diff --git a/src/overlays/actors/ovl_En_Tanron6/z_en_tanron6.c b/src/overlays/actors/ovl_En_Tanron6/z_en_tanron6.c
index ceac1e116..875f36a61 100644
--- a/src/overlays/actors/ovl_En_Tanron6/z_en_tanron6.c
+++ b/src/overlays/actors/ovl_En_Tanron6/z_en_tanron6.c
@@ -18,7 +18,7 @@ void EnTanron6_Draw(Actor* thisx, PlayState* play);
void EnTanron6_DoNothing(EnTanron6* this);
void func_80BE60D0(EnTanron6* this, PlayState* play);
-const ActorInit En_Tanron6_InitVars = {
+ActorInit En_Tanron6_InitVars = {
ACTOR_EN_TANRON6,
ACTORCAT_ENEMY,
FLAGS,
@@ -91,7 +91,9 @@ void EnTanron6_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 40.0f, 40.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 40.0f, 40.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
}
void EnTanron6_Draw(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_En_Tanron6/z_en_tanron6.h b/src/overlays/actors/ovl_En_Tanron6/z_en_tanron6.h
index fb565a5c8..89d9a4aae 100644
--- a/src/overlays/actors/ovl_En_Tanron6/z_en_tanron6.h
+++ b/src/overlays/actors/ovl_En_Tanron6/z_en_tanron6.h
@@ -13,6 +13,4 @@ typedef struct EnTanron6 {
/* 0x200 */ EnTanron6ActionFunc actionFunc;
} EnTanron6; // size = 0x204
-extern const ActorInit En_Tanron6_InitVars;
-
#endif // Z_EN_TANRON6_H
diff --git a/src/overlays/actors/ovl_En_Test/overlay.cfg b/src/overlays/actors/ovl_En_Test/overlay.cfg
deleted file mode 100644
index 3f264536a..000000000
--- a/src/overlays/actors/ovl_En_Test/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Test
-z_en_test.c
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 348290ccf..d98790c6f 100644
--- a/src/overlays/actors/ovl_En_Test/z_en_test.c
+++ b/src/overlays/actors/ovl_En_Test/z_en_test.c
@@ -16,7 +16,7 @@ void EnTest_Destroy(Actor* thisx, PlayState* play);
void EnTest_Update(Actor* thisx, PlayState* play);
void EnTest_Draw(Actor* thisx, PlayState* play);
-const ActorInit En_Test_InitVars = {
+ActorInit En_Test_InitVars = {
ACTOR_EN_TEST,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -161,21 +161,21 @@ void EnTest_Init(Actor* thisx, PlayState* play2) {
PlayState* play = play2;
EnTest* this = THIS;
MtxF sp38;
- s32 sp34;
+ s32 bgId;
this->unk_209 = 0;
this->unk_174 = 0;
if (thisx->params > 0) {
Actor_SetScale(thisx, thisx->params / 100000.0f);
- this->unk_20A = 0;
+ this->surfaceMaterial = SURFACE_MATERIAL_DIRT;
} else {
thisx->floorPoly = NULL;
thisx->world.pos.y += 10.0f;
- thisx->floorHeight = BgCheck_EntityRaycastFloor3(&play->colCtx, &thisx->floorPoly, &sp34, &thisx->world.pos);
+ thisx->floorHeight = BgCheck_EntityRaycastFloor3(&play->colCtx, &thisx->floorPoly, &bgId, &thisx->world.pos);
if ((thisx->floorPoly == NULL) || (thisx->floorHeight == BGCHECK_Y_MIN)) {
- Actor_MarkForDeath(thisx);
+ Actor_Kill(thisx);
return;
}
@@ -183,7 +183,7 @@ void EnTest_Init(Actor* thisx, PlayState* play2) {
func_800C0094(thisx->floorPoly, thisx->world.pos.x, thisx->floorHeight, thisx->world.pos.z, &sp38);
Matrix_MtxFToYXZRot(&sp38, &thisx->shape.rot, true);
thisx->world.rot = thisx->shape.rot;
- this->unk_20A = func_800C9BB8(&play->colCtx, thisx->floorPoly, sp34);
+ this->surfaceMaterial = SurfaceType_GetMaterial(&play->colCtx, thisx->floorPoly, bgId);
}
func_80183430(&this->skeletonInfo, &gameplay_keep_Blob_06EB70, &gameplay_keep_Blob_06BB0C, this->unk_178,
@@ -208,7 +208,7 @@ void EnTest_Update(Actor* thisx, PlayState* play) {
if (func_80183DE0(&this->skeletonInfo) && (this->actor.parent == NULL) && (this->actor.params != -1)) {
this->unk_209++;
if (this->unk_209 > 20) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -250,24 +250,25 @@ s32 EnTest_OverrideKeyframeDraw(PlayState* play, SkeletonInfo* skeletonInfo, s32
void EnTest_Draw(Actor* thisx, PlayState* play) {
EnTest* this = THIS;
- Mtx* sp28;
+ Mtx* mtx;
s32 sp2C = this->unk_208 - 1;
if (sp2C >= 29) {
sp2C = 29;
}
- if ((this->unk_20A == 15) || (this->unk_20A == 14)) {
+ //! @bug Checks for non-existent SURFACE_MATERIAL_MAX material
+ if ((this->surfaceMaterial == SURFACE_MATERIAL_MAX) || (this->surfaceMaterial == SURFACE_MATERIAL_SNOW)) {
AnimatedMat_DrawStep(play, Lib_SegmentedToVirtual(gameplay_keep_Matanimheader_06B730), sp2C);
} else {
AnimatedMat_DrawStep(play, Lib_SegmentedToVirtual(gameplay_keep_Matanimheader_06B6A0), sp2C);
}
- sp28 = GRAPH_ALLOC(play->state.gfxCtx, ALIGN16(this->skeletonInfo.unk_18->unk_1 * sizeof(Mtx)));
+ mtx = GRAPH_ALLOC(play->state.gfxCtx, this->skeletonInfo.unk_18->unk_1 * sizeof(Mtx));
- if (sp28 != NULL) {
+ if (mtx != NULL) {
func_8012C2DC(play->state.gfxCtx);
- func_8018450C(play, &this->skeletonInfo, sp28, EnTest_OverrideKeyframeDraw, NULL, thisx);
+ func_8018450C(play, &this->skeletonInfo, mtx, EnTest_OverrideKeyframeDraw, NULL, thisx);
func_80863048(play, this->unk_20C);
}
}
diff --git a/src/overlays/actors/ovl_En_Test/z_en_test.h b/src/overlays/actors/ovl_En_Test/z_en_test.h
index e01c44c6a..68395a96a 100644
--- a/src/overlays/actors/ovl_En_Test/z_en_test.h
+++ b/src/overlays/actors/ovl_En_Test/z_en_test.h
@@ -24,10 +24,8 @@ typedef struct EnTest {
/* 0x1C0 */ Vec3s unk_1C0[12];
/* 0x208 */ u8 unk_208;
/* 0x209 */ u8 unk_209;
- /* 0x20A */ u8 unk_20A;
+ /* 0x20A */ u8 surfaceMaterial;
/* 0x20C */ EnTestStruct unk_20C[20];
} EnTest; // size = 0x6BC
-extern const ActorInit En_Test_InitVars;
-
#endif // Z_EN_TEST_H
diff --git a/src/overlays/actors/ovl_En_Test2/overlay.cfg b/src/overlays/actors/ovl_En_Test2/overlay.cfg
deleted file mode 100644
index 8a698679c..000000000
--- a/src/overlays/actors/ovl_En_Test2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Test2
-z_en_test2.c
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 c9151d621..fd1710264 100644
--- a/src/overlays/actors/ovl_En_Test2/z_en_test2.c
+++ b/src/overlays/actors/ovl_En_Test2/z_en_test2.c
@@ -12,7 +12,7 @@
#include "objects/object_meganeana_obj/object_meganeana_obj.h"
#include "objects/object_haka_obj/object_haka_obj.h"
-#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_80)
+#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_REACT_TO_LENS)
#define THIS ((EnTest2*)thisx)
@@ -27,7 +27,7 @@ typedef struct EnTest2ModelInfo {
/* 0x8 */ AnimatedMaterial* animMat;
} EnTest2ModelInfo; // size = 0xC
-const ActorInit En_Test2_InitVars = {
+ActorInit En_Test2_InitVars = {
ACTOR_EN_TEST2,
ACTORCAT_BG,
FLAGS,
@@ -85,7 +85,7 @@ void EnTest2_Update(Actor* thisx, PlayState* play) {
objectIndex = Object_GetIndex(&play->objectCtx, sObjectIds[this->actor.params]);
if (objectIndex < 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
if (Object_IsLoaded(&play->objectCtx, objectIndex)) {
@@ -96,7 +96,7 @@ void EnTest2_Update(Actor* thisx, PlayState* play) {
Actor_SetObjectDependency(play, &this->actor);
this->animMat = Lib_SegmentedToVirtual(modelInfo->animMat);
}
- if (play->roomCtx.curRoom.unk5) {
+ if (play->roomCtx.curRoom.lensMode != LENS_MODE_HIDE_ACTORS) {
this->actor.update = EnTest2_UpdateForLens;
} else {
this->actor.update = Actor_Noop;
@@ -108,9 +108,9 @@ void EnTest2_UpdateForLens(Actor* thisx, PlayState* play) {
EnTest2* this = THIS;
if (play->actorCtx.lensMaskSize == LENS_MASK_ACTIVE_SIZE) {
- this->actor.flags |= ACTOR_FLAG_80;
+ this->actor.flags |= ACTOR_FLAG_REACT_TO_LENS;
} else {
- this->actor.flags &= ~ACTOR_FLAG_80;
+ this->actor.flags &= ~ACTOR_FLAG_REACT_TO_LENS;
}
}
@@ -122,7 +122,7 @@ void EnTest2_Draw(Actor* thisx, PlayState* play) {
if (this->animMat != NULL) {
AnimatedMat_Draw(play, this->animMat);
}
- if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_80)) {
+ if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_REACT_TO_LENS)) {
OPEN_DISPS(play->state.gfxCtx);
func_8012C2DC(play->state.gfxCtx);
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 ccbba11e7..3b03e0cc1 100644
--- a/src/overlays/actors/ovl_En_Test2/z_en_test2.h
+++ b/src/overlays/actors/ovl_En_Test2/z_en_test2.h
@@ -15,6 +15,4 @@ typedef enum {
/* 0xC */ EN_TEST2_PARAMS_C
} EnTest2_Params;
-extern const ActorInit En_Test2_InitVars;
-
#endif // Z_EN_TEST2_H
diff --git a/src/overlays/actors/ovl_En_Test3/overlay.cfg b/src/overlays/actors/ovl_En_Test3/overlay.cfg
deleted file mode 100644
index 25736e068..000000000
--- a/src/overlays/actors/ovl_En_Test3/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Test3
-z_en_test3.c
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 f50fca2e7..d5ea5f9df 100644
--- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c
+++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c
@@ -5,17 +5,170 @@
*/
#include "z_en_test3.h"
+#include "objects/object_test3/object_test3.h"
+#include "overlays/actors/ovl_En_Door/z_en_door.h"
+#include "objects/gameplay_keep/gameplay_keep.h"
+#include "objects/object_mask_ki_tan/object_mask_ki_tan.h"
-#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_4000000)
+#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_CAN_PRESS_SWITCH)
#define THIS ((EnTest3*)thisx)
-void EnTest3_Init(Actor* thisx, PlayState* play);
-void EnTest3_Destroy(Actor* thisx, PlayState* play);
-void EnTest3_Update(Actor* thisx, PlayState* play);
+typedef struct {
+ /* 0x0 */ s8 unk_0;
+ /* 0x1 */ s8 unk_1_0 : 4;
+ /* 0x1 */ s8 unk_1_4 : 4;
+} struct_80A41828; // size = 0x2
-#if 0
-const ActorInit En_Test3_InitVars = {
+typedef s32 (*EnTest3UnkFunc2)(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput);
+typedef s32 (*EnTest3UnkFunc)(EnTest3* this, PlayState* play);
+
+typedef struct {
+ /* 0x0 */ EnTest3UnkFunc2 unk_0;
+ /* 0x4 */ EnTest3UnkFunc unk_4;
+} struct_80A40678; // size = 0x8
+
+typedef struct {
+ /* 0x0 */ EnTest3ActionFunc unk_0; // might not actually be an action function
+ /* 0x4 */ EnTest3ActionFunc actionFunc;
+} struct_80A4168C; // size = 0x8
+
+// Main functions
+void EnTest3_Init(Actor* thisx, PlayState* play2);
+void EnTest3_Destroy(Actor* thisx, PlayState* play2);
+void EnTest3_Update(Actor* thisx, PlayState* play2);
+void EnTest3_Draw(Actor* thisx, PlayState* play2);
+
+// Functions used in D_80A4169C and D_80A416C0. Purpose unclear, but related to Schedule
+s32 func_80A3E870(EnTest3* this, PlayState* play);
+s32 func_80A3E884(EnTest3* this, PlayState* play);
+s32 func_80A3E898(EnTest3* this, PlayState* play);
+s32 func_80A3E960(EnTest3* this, PlayState* play);
+s32 func_80A3E97C(EnTest3* this, PlayState* play);
+s32 func_80A3E9DC(EnTest3* this, PlayState* play);
+s32 func_80A3EA30(EnTest3* this, PlayState* play);
+s32 func_80A3EAC4(EnTest3* this, PlayState* play);
+s32 func_80A3EAF8(EnTest3* this, PlayState* play);
+s32 func_80A3EB8C(EnTest3* this, PlayState* play);
+s32 func_80A3EBFC(EnTest3* this, PlayState* play);
+s32 func_80A3EC30(EnTest3* this, PlayState* play);
+s32 func_80A3EC44(EnTest3* this, PlayState* play);
+
+// Functions used in D_80A417E8. Purpose unclear, but related to Schedule
+s32 func_80A3F080(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput);
+s32 func_80A3F09C(EnTest3* this, PlayState* play);
+s32 func_80A3F62C(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput);
+s32 func_80A3F73C(EnTest3* this, PlayState* play);
+s32 func_80A3F8D4(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput);
+s32 func_80A3F9A4(EnTest3* this, PlayState* play);
+s32 func_80A3F9E4(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput);
+s32 func_80A3FA58(EnTest3* this, PlayState* play);
+s32 func_80A3FBCC(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput);
+s32 func_80A3FBE8(EnTest3* this, PlayState* play);
+s32 func_80A3FDE4(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput);
+s32 func_80A3FE20(EnTest3* this, PlayState* play);
+s32 func_80A3FF10(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput);
+s32 func_80A3FFD0(EnTest3* this, PlayState* play2);
+s32 func_80A40098(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput);
+s32 func_80A40230(EnTest3* this, PlayState* play);
+
+// Action functions
+void func_80A40678(EnTest3* this, PlayState* play);
+void func_80A40824(EnTest3* this, PlayState* play);
+void func_80A4084C(EnTest3* this, PlayState* play);
+void func_80A40908(EnTest3* this, PlayState* play);
+void func_80A40A6C(EnTest3* this, PlayState* play);
+
+static u8 sScheduleScript[] = {
+ /* 0x000 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(1, 0x046 - 0x004),
+ /* 0x004 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_ALLEY, 0x020 - 0x008),
+ /* 0x008 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(6, 50, 7, 20, 0x01A - 0x00E),
+ /* 0x00E */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(7, 30, 0x019 - 0x012),
+ /* 0x012 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_04, 0x017 - 0x016),
+ /* 0x016 */ SCHEDULE_CMD_RET_NONE(),
+ /* 0x017 */ SCHEDULE_CMD_RET_VAL_S(10),
+ /* 0x019 */ SCHEDULE_CMD_RET_NONE(),
+ /* 0x01A */ SCHEDULE_CMD_RET_TIME(6, 50, 7, 20, 15),
+ /* 0x020 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_CLOCKTOWER, 0x045 - 0x024),
+ /* 0x024 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(6, 0, 6, 30, 0x03F - 0x02A),
+ /* 0x02A */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(6, 30, 6, 35, 0x03D - 0x030),
+ /* 0x030 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(6, 35, 6, 50, 0x037 - 0x036),
+ /* 0x036 */ SCHEDULE_CMD_RET_NONE(),
+ /* 0x037 */ SCHEDULE_CMD_RET_TIME(6, 35, 6, 50, 14),
+ /* 0x03D */ SCHEDULE_CMD_RET_VAL_S(1),
+ /* 0x03F */ SCHEDULE_CMD_RET_TIME(6, 0, 6, 30, 13),
+ /* 0x045 */ SCHEDULE_CMD_RET_NONE(),
+ /* 0x046 */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(2, 0x09B - 0x04A),
+ /* 0x04A */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_02, 0x058 - 0x04E),
+ /* 0x04E */ SCHEDULE_CMD_BRANCH_S(0x0),
+ /* 0x050 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_04, 0x055 - 0x054),
+ /* 0x054 */ SCHEDULE_CMD_RET_NONE(),
+ /* 0x055 */ SCHEDULE_CMD_RET_VAL_L(10),
+ /* 0x058 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_ALLEY, 0x081 - 0x05C),
+ /* 0x05C */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(13, 0, 0x050 - 0x060),
+ /* 0x060 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 5, 15, 25, 0x07B - 0x066),
+ /* 0x066 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 25, 15, 40, 0x079 - 0x06C),
+ /* 0x06C */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 40, 16, 0, 0x073 - 0x072),
+ /* 0x072 */ SCHEDULE_CMD_RET_NONE(),
+ /* 0x073 */ SCHEDULE_CMD_RET_TIME(15, 40, 16, 0, 17),
+ /* 0x079 */ SCHEDULE_CMD_RET_VAL_S(1),
+ /* 0x07B */ SCHEDULE_CMD_RET_TIME(15, 5, 15, 25, 16),
+ /* 0x081 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_AYASHIISHOP, 0x09A - 0x085),
+ /* 0x085 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 55, 16, 10, 0x094 - 0x08B),
+ /* 0x08B */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 10, 22, 10, 0x092 - 0x091),
+ /* 0x091 */ SCHEDULE_CMD_RET_NONE(),
+ /* 0x092 */ SCHEDULE_CMD_RET_VAL_S(3),
+ /* 0x094 */ SCHEDULE_CMD_RET_TIME(15, 55, 16, 10, 12),
+ /* 0x09A */ SCHEDULE_CMD_RET_NONE(),
+ /* 0x09B */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_L(3, 0x138 - 0x0A0),
+ /* 0x0A0 */ SCHEDULE_CMD_CHECK_FLAG_L(WEEKEVENTREG_33_08, 0x12C - 0x0A5),
+ /* 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),
+ /* 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),
+ /* 0x0BE */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_61_08, 0x0DA - 0x0C2),
+ /* 0x0C2 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_10, 0x0CD - 0x0C6),
+ /* 0x0C6 */ SCHEDULE_CMD_CHECK_BEFORE_TIME_S(19, 0, 0x0CB - 0x0CA),
+ /* 0x0CA */ SCHEDULE_CMD_RET_NONE(),
+ /* 0x0CB */ SCHEDULE_CMD_RET_VAL_S(5),
+ /* 0x0CD */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(19, 0, 19, 10, 0x0D4 - 0x0D3),
+ /* 0x0D3 */ SCHEDULE_CMD_RET_NONE(),
+ /* 0x0D4 */ SCHEDULE_CMD_RET_TIME(19, 0, 19, 10, 20),
+ /* 0x0DA */ SCHEDULE_CMD_RET_VAL_S(5),
+ /* 0x0DC */ SCHEDULE_CMD_RET_NONE(),
+ /* 0x0DD */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_IKANA, 0x0E8 - 0x0E1),
+ /* 0x0E1 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_90_02, 0x0E7 - 0x0E5),
+ /* 0x0E5 */ SCHEDULE_CMD_RET_VAL_S(9),
+ /* 0x0E7 */ SCHEDULE_CMD_RET_NONE(),
+ /* 0x0E8 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_TOWN, 0x0F9 - 0x0EC),
+ /* 0x0EC */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(4, 0, 4, 10, 0x0F3 - 0x0F2),
+ /* 0x0F2 */ SCHEDULE_CMD_RET_NONE(),
+ /* 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),
+ /* 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(),
+ /* 0x114 */ SCHEDULE_CMD_RET_VAL_S(6),
+ /* 0x116 */ SCHEDULE_CMD_RET_TIME(4, 30, 4, 45, 19),
+ /* 0x11C */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(4, 30, 6, 0, 0x123 - 0x122),
+ /* 0x122 */ SCHEDULE_CMD_RET_NONE(),
+ /* 0x123 */ SCHEDULE_CMD_RET_VAL_S(8),
+ /* 0x125 */ SCHEDULE_CMD_RET_TIME(4, 10, 4, 30, 18),
+ /* 0x12B */ SCHEDULE_CMD_RET_NONE(),
+ /* 0x12C */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_AYASHIISHOP, 0x137 - 0x130),
+ /* 0x130 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_08, 0x135 - 0x134),
+ /* 0x134 */ SCHEDULE_CMD_RET_NONE(),
+ /* 0x135 */ SCHEDULE_CMD_RET_VAL_S(4),
+ /* 0x137 */ SCHEDULE_CMD_RET_NONE(),
+ /* 0x138 */ SCHEDULE_CMD_RET_NONE(),
+};
+
+ActorInit En_Test3_InitVars = {
ACTOR_EN_TEST3,
ACTORCAT_NPC,
FLAGS,
@@ -27,113 +180,1123 @@ const ActorInit En_Test3_InitVars = {
(ActorFunc)NULL,
};
-#endif
+static struct_80A4168C D_80A4168C[] = {
+ { func_80A40A6C, NULL },
+ { NULL, NULL },
+};
-extern UNK_TYPE D_0600EDD0;
-extern UNK_TYPE D_0600F7EC;
+static EnTest3UnkFunc D_80A4169C[] = {
+ func_80A3E898, func_80A3E898, func_80A3E884, func_80A3E898, func_80A3E898,
+ func_80A3EA30, func_80A3E898, func_80A3E960, func_80A3E870,
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3E7E0.s")
+static EnTest3UnkFunc D_80A416C0[] = {
+ func_80A3EAC4, func_80A3EAF8, func_80A3EBFC, func_80A3EC44,
+ func_80A3EC30, func_80A3E9DC, func_80A3EB8C, func_80A3E97C,
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3E80C.s")
+static PlayerAgeProperties sAgeProperties = {
+ 40.0f,
+ 60.0f,
+ 11.0f / 17.0f,
+ 71.0f,
+ 50.0f,
+ 49.0f,
+ 39.0f,
+ 27.0f,
+ 19.0f,
+ 22.0f,
+ 32.4f,
+ 32.0f,
+ 48.0f,
+ 11.0f / 17.0f * 70.0f,
+ 14.0f,
+ 12.0f,
+ 55.0f,
+ { 0xFFE8, 0x0DED, 0x036C },
+ { { 0xFFE8, 0x0D92, 0x035E }, { 0xFFE8, 0x1371, 0x03A9 }, { 0x0008, 0x1256, 0x017C }, { 0x0009, 0x17EA, 0x0167 } },
+ { { 0xFFE8, 0x1371, 0x03A9 }, { 0xFFE8, 0x195F, 0x03A9 }, { 0x0009, 0x17EA, 0x0167 }, { 0x0009, 0x1E0D, 0x017C } },
+ { { 0x0008, 0x1256, 0x017C }, { 0x0009, 0x17EA, 0x0167 }, { 0xF9C8, 0x1256, 0x017C }, { 0xF9C9, 0x17EA, 0x0167 } },
+ 0x0020,
+ 0x0000,
+ 22.0f,
+ 29.4343f,
+ &gPlayerAnim_clink_demo_Tbox_open,
+ &gPlayerAnim_clink_demo_goto_future,
+ &gPlayerAnim_clink_demo_return_to_future,
+ &gPlayerAnim_clink_normal_climb_startA,
+ &gPlayerAnim_clink_normal_climb_startB,
+ { &gPlayerAnim_clink_normal_climb_upL, &gPlayerAnim_clink_normal_climb_upR, &gPlayerAnim_link_normal_Fclimb_upL,
+ &gPlayerAnim_link_normal_Fclimb_upR },
+ { &gPlayerAnim_link_normal_Fclimb_sideL, &gPlayerAnim_link_normal_Fclimb_sideR },
+ { &gPlayerAnim_clink_normal_climb_endAL, &gPlayerAnim_clink_normal_climb_endAR },
+ { &gPlayerAnim_clink_normal_climb_endBR, &gPlayerAnim_clink_normal_climb_endBL },
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3E870.s")
+static EffectBlureInit2 sBlureInit = {
+ 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 },
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3E884.s")
+static EffectTireMarkInit sTireMarkInit = {
+ 0,
+ 63,
+ { 0, 0, 15, 100 },
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3E898.s")
+static struct_80A40678 D_80A417E8[] = {
+ { func_80A3F080, func_80A3F09C }, { func_80A40098, func_80A40230 }, { func_80A3F62C, func_80A3F73C },
+ { func_80A3F8D4, func_80A3F9A4 }, { func_80A3F9E4, func_80A3FA58 }, { func_80A3FBCC, func_80A3FBE8 },
+ { func_80A3FDE4, func_80A3FE20 }, { func_80A3FF10, func_80A3FFD0 },
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3E960.s")
+static struct_80A41828 D_80A41828[] = {
+ { 0, 0, 0 }, { 3, -2, 0 }, { 2, -1, 0 }, { 2, -1, 1 }, { 2, -1, 2 }, { 2, 1, 3 }, { 2, -2, 4 }, { 5, 1, 0 },
+ { 7, -1, 0 }, { 6, 2, 0 }, { 4, 4, 0 }, { 1, 1, 0 }, { 1, 1, 0 }, { 1, 2, 0 }, { 1, 1, 0 }, { 1, 1, 0 },
+ { 1, 2, 0 }, { 1, 3, 0 }, { 1, 1, 0 }, { 1, 2, 0 }, { 1, 1, 0 }, { 0, 0, 0 },
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3E97C.s")
+static EnTest3_struct_D78 D_80A41854[] = {
+ { 4, 0, 0x2B25 }, { 1, 0, 0x2969 }, { 3, 1, 0x296A }, { 1, 0, 0x296B }, { 5, 1, 0x0000 }, { 8, 0, 0x0000 },
+ { 4, 0, 0x2976 }, { 6, 0, 0x2977 }, { 7, 10, 0x2978 }, { 4, 1, 0x0000 }, { 4, 0, 0x2968 }, { 4, 0, 0x297A },
+ { 1, 0, 0x145D }, { 1, 0, 0x145E }, { 5, 1, 0x145F }, { 1, 0, 0x145F }, { 5, 0, 0x0000 }, { 4, 0, 0x1460 },
+ { 4, 0, 0x145C }, { 4, 0, 0x2913 }, { 4, 0, 0x1465 },
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3E9DC.s")
+s32 D_80A41D20;
+s32 D_80A41D24;
+Input sEnTest3_Input;
+f32 D_80A41D40;
+s16 D_80A41D44;
+s32 D_80A41D48;
+Vec3f D_80A41D50;
+s32 D_80A41D5C;
+s32 D_80A41D60;
+s32 D_80A41D64;
+s32 D_80A41D68;
+Vec3f* D_80A41D6C;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3EA30.s")
+s32 func_80A3E7E0(EnTest3* this, EnTest3ActionFunc actionFunc) {
+ if (actionFunc == this->unk_D94) {
+ return false;
+ } else {
+ this->unk_D94 = actionFunc;
+ this->unk_D8A = 0;
+ this->unk_D88 = 0;
+ return true;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3EAC4.s")
+s32 func_80A3E80C(EnTest3* this, PlayState* play, s32 arg2) {
+ s32 pad;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3EAF8.s")
+ D_80A4168C[arg2].unk_0(this, play);
+ if (D_80A4168C[arg2].actionFunc == NULL) {
+ // D_80A4168C[arg2].actionFunc is always NULL
+ return false;
+ } else {
+ func_80A3E7E0(this, D_80A4168C[arg2].actionFunc);
+ return true;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3EB8C.s")
+s32 func_80A3E870(EnTest3* this, PlayState* play) {
+ return true;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3EBFC.s")
+s32 func_80A3E884(EnTest3* this, PlayState* play) {
+ return false;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3EC30.s")
+s32 func_80A3E898(EnTest3* this, PlayState* play) {
+ u16 textId = this->unk_D78->textId;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3EC44.s")
+ if ((this->unk_D78->unk_0 == 4) && CHECK_WEEKEVENTREG(WEEKEVENTREG_51_08)) {
+ func_80151BB4(play, 2);
+ }
+ if (textId == 0xFFFF) {
+ Message_CloseTextbox(play);
+ } else if (textId) { // != 0
+ Message_ContinueTextbox(play, textId);
+ }
+ if (textId == 0x296B) {
+ PlayerAnimation_PlayOnceSetSpeed(play, &this->player.skelAnime, &gPlayerAnim_al_yareyare, 2.0f / 3.0f);
+ }
+ return false;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3ECEC.s")
+s32 func_80A3E960(EnTest3* this, PlayState* play) {
+ this->unk_D8C = this->unk_D78->unk_1;
+ return false;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3ED24.s")
+s32 func_80A3E97C(EnTest3* this, PlayState* play) {
+ if (DECR(this->unk_D8C) == 0) {
+ Message_StartTextbox(play, this->unk_D78->textId, NULL);
+ return true;
+ }
+ return false;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/EnTest3_Init.s")
+s32 func_80A3E9DC(EnTest3* this, PlayState* play) {
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->player.actor);
+ return true;
+ } else {
+ CutsceneManager_Queue(this->csId);
+ return false;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/EnTest3_Destroy.s")
+s32 func_80A3EA30(EnTest3* this, PlayState* play) {
+ if (this->unk_D78->textId == 0x145F) {
+ Actor* hideoutDoor = SubS_FindActor(play, NULL, ACTORCAT_BG, ACTOR_BG_IKNV_OBJ);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F080.s")
+ if (hideoutDoor != NULL) {
+ this->player.targetedActor = hideoutDoor;
+ }
+ }
+ if (this->unk_D78->unk_1 != 0) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csId);
+ play->msgCtx.msgMode = 0x44;
+ }
+ return false;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F09C.s")
+s32 func_80A3EAC4(EnTest3* this, PlayState* play) {
+ if (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) {
+ return 1;
+ }
+ return 0;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F0B0.s")
+s32 func_80A3EAF8(EnTest3* this, PlayState* play) {
+ if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
+ if (this->unk_D78->textId == 0x145F) {
+ CutsceneManager_Stop(this->csId);
+ this->csId = CS_ID_GLOBAL_TALK;
+ CutsceneManager_Queue(this->csId);
+ this->player.targetedActor = &GET_PLAYER(play)->actor;
+ }
+ return 1;
+ }
+ return 0;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F114.s")
+s32 func_80A3EB8C(EnTest3* this, PlayState* play) {
+ if (func_80A3EAF8(this, play)) {
+ Actor* hideoutObject = SubS_FindActor(play, NULL, ACTORCAT_ITEMACTION, ACTOR_OBJ_NOZOKI);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F15C.s")
+ if (hideoutObject != NULL) {
+ this->player.targetedActor = hideoutObject;
+ }
+ play->msgCtx.msgMode = 0x44;
+ return 1;
+ }
+ return 0;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F2BC.s")
+s32 func_80A3EBFC(EnTest3* this, PlayState* play) {
+ if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) {
+ return 1;
+ }
+ return 0;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F384.s")
+s32 func_80A3EC30(EnTest3* this, PlayState* play) {
+ return 0;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F4A4.s")
+s32 func_80A3EC44(EnTest3* this, PlayState* play) {
+ if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) {
+ if (play->msgCtx.choiceIndex != 0) {
+ func_8019F230();
+ } else {
+ func_8019F208();
+ }
+ if (play->msgCtx.choiceIndex != 0) {
+ return 1;
+ } else {
+ s32 ret = this->unk_D78->unk_1 + 1;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F534.s")
+ return ret;
+ }
+ }
+ return 0;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F5A4.s")
+s32 func_80A3ECEC(EnTest3* this, PlayState* play) {
+ return D_80A4169C[this->unk_D78->unk_0](this, play);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F62C.s")
+s32 func_80A3ED24(EnTest3* this, PlayState* play) {
+ s32 temp = D_80A416C0[this->unk_D78->unk_0](this, play);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F73C.s")
+ if (temp != 0) {
+ this->unk_D78 = &this->unk_D78[temp];
+ return func_80A3ECEC(this, play);
+ }
+ return false;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F8D4.s")
+void EnTest3_Init(Actor* thisx, PlayState* play2) {
+ PlayState* play = play2;
+ EnTest3* this = THIS;
+ Camera* subCam;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F9A4.s")
+ if (D_80A41D24) {
+ Actor_Kill(&this->player.actor);
+ return;
+ }
+ D_80A41D24 = true;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3F9E4.s")
+ this->player.actor.room = -1;
+ this->player.csId = CS_ID_NONE;
+ this->player.transformation = PLAYER_FORM_HUMAN;
+ this->player.ageProperties = &sAgeProperties;
+ this->player.heldItemAction = PLAYER_IA_NONE;
+ this->player.heldItemId = ITEM_OCARINA;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3FA58.s")
+ Player_SetModelGroup(&this->player, 3);
+ play->playerInit(&this->player, play, &object_test3_Skel_00F7EC);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3FBCC.s")
+ Effect_Add(play, &this->player.meleeWeaponEffectIndex[0], EFFECT_BLURE2, 0, 0, &sBlureInit);
+ Effect_Add(play, &this->player.meleeWeaponEffectIndex[1], EFFECT_BLURE2, 0, 0, &sBlureInit);
+ Effect_Add(play, &this->player.meleeWeaponEffectIndex[2], EFFECT_TIRE_MARK, 0, 0, &sTireMarkInit);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3FBE8.s")
+ this->player.maskObjectSegment = ZeldaArena_Malloc(0x3800);
+ play->func_18780(&this->player, play);
+ this->unk_D90 = GET_PLAYER(play);
+ this->player.giObjectSegment = this->unk_D90->giObjectSegment;
+ this->player.tatlActor = this->unk_D90->tatlActor;
+ if ((CURRENT_DAY != 3) || CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08) || !CHECK_WEEKEVENTREG(WEEKEVENTREG_51_08)) {
+ this->player.currentMask = PLAYER_MASK_KEATON;
+ }
+ this->player.prevMask = this->player.currentMask;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3FDE4.s")
+ if (play->sceneId == SCENE_SECOM) {
+ this->subCamId = Play_CreateSubCamera(play);
+ subCam = Play_GetCamera(play, this->subCamId);
+ Camera_InitPlayerSettings(subCam, &this->player);
+ Camera_SetFlags(subCam, CAM_STATE_0 | CAM_STATE_6);
+ Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_WAIT);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3FE20.s")
+ this->player.actor.colChkInfo.cylRadius = 20;
+ this->player.actor.colChkInfo.cylHeight = 60;
+ this->player.actor.colChkInfo.health = 255;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3FF10.s")
+ if (KAFEI_GET_PARAM_1E0(&this->player.actor) == 0) {
+ func_80A3E7E0(this, func_80A40824);
+ } else {
+ func_80A3E7E0(this, func_80A40678);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A3FFD0.s")
+void EnTest3_Destroy(Actor* thisx, PlayState* play2) {
+ PlayState* play = play2;
+ EnTest3* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A40098.s")
+ Effect_Destroy(play, this->player.meleeWeaponEffectIndex[0]);
+ Effect_Destroy(play, this->player.meleeWeaponEffectIndex[1]);
+ Effect_Destroy(play, this->player.meleeWeaponEffectIndex[2]);
+ Collider_DestroyCylinder(play, &this->player.cylinder);
+ Collider_DestroyCylinder(play, &this->player.shieldCylinder);
+ Collider_DestroyQuad(play, &this->player.meleeWeaponQuads[0]);
+ Collider_DestroyQuad(play, &this->player.meleeWeaponQuads[1]);
+ Collider_DestroyQuad(play, &this->player.shieldQuad);
+ ZeldaArena_Free(this->player.maskObjectSegment);
+ Environment_StartTime();
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A40230.s")
+s32 func_80A3F080(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput) {
+ return true;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A40678.s")
+s32 func_80A3F09C(EnTest3* this, PlayState* play) {
+ this->player.actor.draw = NULL;
+ return true;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A40824.s")
+void func_80A3F0B0(EnTest3* this, PlayState* play) {
+ func_800BC154(play, &play->actorCtx, &this->unk_D90->actor, 2);
+ func_800BC154(play, &play->actorCtx, &this->player.actor, 4);
+ this->unk_D90->stateFlags1 &= ~PLAYER_STATE1_20;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A4084C.s")
+void func_80A3F114(EnTest3* this, PlayState* play) {
+ if (this->player.csMode != PLAYER_CSMODE_0) {
+ play->startPlayerCutscene(play, &this->player, PLAYER_CSMODE_END);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A40908.s")
+s32 func_80A3F15C(EnTest3* this, PlayState* play, struct_80A41828* arg2) {
+ s32 pathIndex;
+ Path* path;
+ Vec3s* curPathPoint;
+ Vec3s* nextPathPoint;
+ Vec3f curPathPos;
+ Vec3f nextPathPos;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A409D4.s")
+ pathIndex = ABS_ALT(arg2->unk_1_0) - 1;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A40A6C.s")
+ if (pathIndex >= 0) {
+ path = SubS_GetAdditionalPath(play, KAFEI_GET_PARAM_1F(&this->player.actor), pathIndex);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/EnTest3_Update.s")
+ curPathPoint = Lib_SegmentedToVirtual(path->points);
+ if (arg2->unk_1_0 > 0) {
+ nextPathPoint = curPathPoint + 1;
+ } else {
+ curPathPoint += path->count - 1;
+ nextPathPoint = curPathPoint - 1;
+ }
+ Math_Vec3s_ToVec3f(&curPathPos, curPathPoint);
+ Math_Vec3s_ToVec3f(&nextPathPos, nextPathPoint);
+ if (Math_Vec3f_DistXZ(&this->player.actor.world.pos, &curPathPos) > 10.0f) {
+ Math_Vec3f_Copy(&this->player.actor.world.pos, &curPathPos);
+ Math_Vec3f_Copy(&this->player.actor.home.pos, &curPathPos);
+ Math_Vec3f_Copy(&this->player.actor.prevPos, &curPathPos);
+ this->player.currentYaw = Math_Vec3f_Yaw(&this->player.actor.world.pos, &nextPathPos);
+ if (arg2->unk_1_0 < 0) {
+ this->player.currentYaw += 0x8000;
+ }
+ this->player.actor.shape.rot.y = this->player.currentYaw;
+ return true;
+ }
+ }
+ return false;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A40CF0.s")
+Actor* func_80A3F2BC(PlayState* play, EnTest3* this, s32 actorId, s32 category, f32 arg4, f32 arg5) {
+ Actor* actor = play->actorCtx.actorLists[category].first;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A40F34.s")
+ while (actor != NULL) {
+ if (actorId == actor->id) {
+ f32 dy = this->player.actor.world.pos.y - actor->world.pos.y;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test3/func_80A4129C.s")
+ if ((fabsf(dy) < arg5) && (Actor_WorldDistXZToActor(&this->player.actor, actor) < arg4)) {
+ return actor;
+ }
+ }
+ actor = actor->next;
+ }
+ return NULL;
+}
+
+s32 func_80A3F384(EnTest3* this, PlayState* play) {
+ Player* player = GET_PLAYER(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;
+ this->player.doorDirection = (offset.z >= 0.0f) ? 1.0f : -1.0f;
+ this->player.doorActor = &door->dyna.actor;
+ this->player.csId = CS_ID_NONE;
+ return true;
+ }
+ return false;
+}
+
+s32 func_80A3F4A4(PlayState* play) {
+ return (Player_GetMask(play) == PLAYER_MASK_NONE) || (Player_GetMask(play) == PLAYER_MASK_BUNNY) ||
+ (Player_GetMask(play) == PLAYER_MASK_POSTMAN) || (Player_GetMask(play) == PLAYER_MASK_KEATON) ||
+ (Player_GetMask(play) == PLAYER_MASK_KAFEIS_MASK);
+}
+
+void func_80A3F534(EnTest3* this, PlayState* play) {
+ if (!func_80A3F4A4(play)) {
+ this->unk_D78 = &D_80A41854[10];
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_51_08)) {
+ this->unk_D78 = &D_80A41854[7];
+ } else {
+ this->unk_D78 = &D_80A41854[1];
+ }
+ this->csId = this->player.actor.csId;
+}
+
+void func_80A3F5A4(EnTest3* this, PlayState* play) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_51_08) || !func_80A3F4A4(play)) {
+ this->unk_D78 = &D_80A41854[18];
+ D_80A41D5C = false;
+ } else if (D_80A41D5C) {
+ this->unk_D78 = &D_80A41854[17];
+ } else {
+ this->unk_D78 = &D_80A41854[12];
+ }
+ this->csId = this->player.actor.csId;
+}
+
+s32 func_80A3F62C(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput) {
+ static EnTest3_struct_D78* D_80A418A8[] = {
+ &D_80A41854[0], &D_80A41854[1], &D_80A41854[11], &D_80A41854[12], &D_80A41854[19],
+ };
+
+ if (((func_80A3F15C(this, play, arg2) || (this->unk_D88 >= 8)) && ((arg2->unk_1_4 == 1) || (arg2->unk_1_4 == 2))) ||
+ (arg2->unk_1_4 == 4)) {
+ if (arg2->unk_1_4 == 4) {
+ this->player.actor.home.rot.y = 0x7FFF;
+ } else {
+ this->player.actor.home.rot.y = this->player.actor.shape.rot.y + 0x8000;
+ }
+ this->player.stateFlags2 |= PLAYER_STATE2_40000;
+ play->startPlayerCutscene(play, &this->player, -1);
+ }
+ this->unk_D78 = D_80A418A8[arg2->unk_1_4];
+ return true;
+}
+
+s32 func_80A3F73C(EnTest3* this, PlayState* play) {
+ if (Actor_ProcessTalkRequest(&this->player.actor, &play->state)) {
+ func_80A3E7E0(this, func_80A4084C);
+ this->player.targetedActor = &GET_PLAYER(play)->actor;
+ 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);
+ }
+ } else {
+ if (play->actorCtx.flags & ACTORCTX_FLAG_4) {
+ play->actorCtx.flags &= ~ACTORCTX_FLAG_4;
+ this->player.stateFlags2 &= ~PLAYER_STATE2_40000;
+ this->unk_D90->stateFlags1 |= PLAYER_STATE1_20;
+ func_800BC154(play, &play->actorCtx, &this->unk_D90->actor, 4);
+ func_800BC154(play, &play->actorCtx, &this->player.actor, 2);
+ CutsceneManager_SetReturnCamera(this->subCamId);
+ play->startPlayerCutscene(play, &this->player, PLAYER_CSMODE_WAIT);
+ }
+ func_800B863C(&this->player.actor, play);
+ if (this->unk_D88 == 3) {
+ func_80A3F534(this, play);
+ } else if (this->unk_D88 == 5) {
+ func_80A3F5A4(this, play);
+ }
+ this->player.actor.textId = this->unk_D78->textId;
+ this->player.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8);
+ }
+ return false;
+}
+
+s32 func_80A3F8D4(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput) {
+ Actor* postActor;
+
+ func_80A3F15C(this, play, arg2);
+ if (((postActor = func_80A3F2BC(play, this, ACTOR_EN_PST, ACTORCAT_PROP, 100.0f, 20.0f)) != NULL) ||
+ ((postActor = func_80A3F2BC(play, this, ACTOR_EN_PM, ACTORCAT_NPC, 100.0f, 20.0f)) != NULL)) {
+ this->player.actor.home.rot.y = Actor_WorldYawTowardActor(&this->player.actor, postActor);
+ }
+ play->startPlayerCutscene(play, &this->player, PLAYER_CSMODE_97);
+ return true;
+}
+
+s32 func_80A3F9A4(EnTest3* this, PlayState* play) {
+ Math_ScaledStepToS(&this->player.actor.shape.rot.y, this->player.actor.home.rot.y, 0x320);
+ this->player.currentYaw = this->player.actor.shape.rot.y;
+ return false;
+}
+
+s32 func_80A3F9E4(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput) {
+ scheduleOutput->time0 = SCHEDULE_TIME_NOW;
+ scheduleOutput->time1 = (u16)(scheduleOutput->time0 + 70);
+ func_80A40098(this, play, arg2, scheduleOutput);
+ if (this->player.actor.xzDistToPlayer < 300.0f) {
+ this->unk_D8A = -1;
+ } else {
+ this->unk_D8A = 120;
+ }
+ return true;
+}
+
+s32 func_80A3FA58(EnTest3* this, PlayState* play) {
+ s32 pad;
+ Player* player = GET_PLAYER(play);
+ u32 cond;
+ struct_80A41828 sp40;
+ ScheduleOutput scheduleOutput;
+
+ if (player->stateFlags1 & PLAYER_STATE1_40) {
+ return false;
+ }
+ cond = func_80A40230(this, play);
+ if (this->unk_D8A > 0) {
+ this->unk_D8A--;
+ cond = cond && (this->player.actor.xzDistToPlayer < 200.0f);
+ if (cond || this->unk_D8A <= 0) {
+ func_80A3F114(this, play);
+ sp40.unk_1_0 = 5;
+ scheduleOutput.time0 = SCHEDULE_TIME_NOW;
+ scheduleOutput.time1 = (u16)(scheduleOutput.time0 + (cond ? 80 : 140));
+
+ func_80A40098(this, play, &sp40, &scheduleOutput);
+ this->unk_D8A = -40;
+ return false;
+ }
+ if (this->unk_D8A == 90) {
+ play->startPlayerCutscene(play, &this->player, PLAYER_CSMODE_21);
+ }
+ } else {
+ this->unk_D8A++;
+ if (this->unk_D8A == 0) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_51_04);
+ this->unk_D88 = 0;
+ }
+ }
+ return false;
+}
+
+s32 func_80A3FBCC(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput) {
+ return true;
+}
+
+s32 func_80A3FBE8(EnTest3* this, PlayState* play) {
+ if (D_80A41D20 == 0) {
+ if (!Play_InCsMode(play)) {
+ D_80A41D20 = 1;
+ this->unk_D78 = &D_80A41854[20];
+ this->csId = this->player.actor.csId;
+ this->player.actor.textId = this->unk_D78->textId;
+ }
+ } else if (D_80A41D20 == 1) {
+ if (this->csId >= 0) {
+ if (func_80A3E9DC(this, play)) {
+ this->csId = CS_ID_NONE;
+ Environment_StopTime();
+ }
+ } else if ((play->actorCtx.flags & ACTORCTX_FLAG_6) || (play->actorCtx.flags & ACTORCTX_FLAG_5)) {
+ this->csId = CutsceneManager_GetAdditionalCsId(this->player.actor.csId);
+ SET_WEEKEVENTREG(WEEKEVENTREG_90_02);
+ if (play->actorCtx.flags & ACTORCTX_FLAG_5) {
+ this->csId = CutsceneManager_GetAdditionalCsId(this->csId);
+ }
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 1);
+ D_80A41D20 = 2;
+ } else {
+ func_80A3F73C(this, play);
+ }
+ } else if ((D_80A41D20 == 2) && func_80A3E9DC(this, play)) {
+ CutsceneManager_SetReturnCamera(CAM_ID_MAIN);
+ Environment_StartTime();
+ if (((void)0, gSaveContext.save.time) > CLOCK_TIME(6, 0)) {
+ 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);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_02);
+ }
+ D_80A41D20 = 3;
+ }
+ return false;
+}
+
+s32 func_80A3FDE4(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput) {
+ this->csId = CutsceneManager_GetAdditionalCsId(this->player.actor.csId);
+ return true;
+}
+
+s32 func_80A3FE20(EnTest3* this, PlayState* play) {
+ struct_80A41828 sp2C;
+ ScheduleOutput scheduleOutput;
+
+ if (D_80A41D64 == 0) {
+ if (func_80A3E9DC(this, play)) {
+ sp2C.unk_1_0 = 2;
+ scheduleOutput.time0 = SCHEDULE_TIME_NOW;
+ scheduleOutput.time1 = (u16)(scheduleOutput.time0 + 1000);
+ func_80A40098(this, play, &sp2C, &scheduleOutput);
+ D_80A41D64 = 1;
+ return false;
+ }
+ } else if (D_80A41D64 == 1) {
+ func_80A40230(this, play);
+ } else if (D_80A41D64 == 2) {
+ CutsceneManager_Stop(this->csId);
+ SET_WEEKEVENTREG(WEEKEVENTREG_90_02);
+ D_80A41D64 = 3;
+ }
+ return false;
+}
+
+s32 func_80A3FF10(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput) {
+ static Vec3f D_80A418BC = { -420.0f, 210.0f, -162.0f };
+
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_51_40)) {
+ D_80A41D68 = 2;
+ Math_Vec3f_Copy(&this->player.actor.world.pos, &D_80A418BC);
+ Math_Vec3f_Copy(&this->player.actor.home.pos, &D_80A418BC);
+
+ this->player.actor.home.rot.y = -0x2AAB;
+ this->player.actor.shape.rot.y = -0x2AAB;
+ this->player.currentYaw = -0x2AAB;
+ if (1) {} // macro?
+ return true;
+ } else {
+ func_80A3F15C(this, play, arg2);
+ this->csId = this->player.actor.csId;
+ if (play->roomCtx.curRoom.num == 2) {
+ this->csId = CutsceneManager_GetAdditionalCsId(this->csId);
+ }
+ return true;
+ }
+}
+
+s32 func_80A3FFD0(EnTest3* this, PlayState* play2) {
+ PlayState* play = play2;
+
+ if (D_80A41D68 == 0) {
+ if (!Play_InCsMode(play) && (play->roomCtx.curRoom.num == 2)) {
+ D_80A41D68 = 1;
+ }
+ } else if (D_80A41D68 == 1) {
+ if (func_80A3E9DC(this, play)) {
+ D_80A41D68 = 2;
+ }
+ } else {
+ SET_WEEKEVENTREG(WEEKEVENTREG_51_40);
+ play->startPlayerCutscene(play, &this->player, PLAYER_CSMODE_110);
+ }
+ return false;
+}
+
+s32 func_80A40098(EnTest3* this, PlayState* play, struct_80A41828* arg2, ScheduleOutput* scheduleOutput) {
+ u16 now = SCHEDULE_TIME_NOW;
+ u16 startTime;
+ 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);
+ if ((this->unk_D88 < 7) && (this->unk_D88 != 0) && (this->unk_D80 >= 0)) {
+ startTime = now;
+ } else {
+ startTime = scheduleOutput->time0;
+ }
+ if (scheduleOutput->time1 < startTime) {
+ this->unk_DA8 = (startTime - scheduleOutput->time1) + (DAY_LENGTH - 1);
+ } else {
+ this->unk_DA8 = scheduleOutput->time1 - startTime;
+ }
+ this->unk_DB4 = now - startTime;
+ numWaypoints = startTime = this->unk_D7C->count - (SUBS_TIME_PATHING_ORDER - 1);
+ this->unk_DAC = this->unk_DA8 / numWaypoints;
+ this->unk_DB0 = (this->unk_DB4 / this->unk_DAC) + (SUBS_TIME_PATHING_ORDER - 1);
+ this->unk_D89 &= ~1;
+ this->unk_D84 = 1.0f;
+ return true;
+}
+
+s32 func_80A40230(EnTest3* this, PlayState* play) {
+ f32 knots[265];
+ Vec3f worldPos;
+ Vec3f sp7C;
+ Vec3f sp70;
+ s32 sp6C = 0;
+ s32 sp68 = 0;
+ s32 pad1;
+ f32 dx;
+ f32 dy;
+ s32 ret = false;
+
+ SubS_TimePathing_FillKnots(knots, 3, this->unk_D7C->count + 3);
+ if (!(this->unk_D89 & 1)) {
+ sp70 = gZeroVec3f;
+ SubS_TimePathing_Update(this->unk_D7C, &this->unk_DA4, &this->unk_DB4, this->unk_DAC, this->unk_DA8,
+ &this->unk_DB0, knots, &sp70, this->unk_D80);
+ SubS_TimePathing_ComputeInitialY(play, this->unk_D7C, this->unk_DB0, &sp70);
+ Math_Vec3f_Copy(&this->player.actor.home.pos, &sp70);
+ Math_Vec3f_Copy(&this->player.actor.prevPos, &sp70);
+ this->player.actor.world.pos.y = sp70.y;
+ this->unk_D89 |= 1;
+ } else {
+ sp70 = this->unk_D98;
+ }
+ this->player.actor.world.pos.x = sp70.x;
+ this->player.actor.world.pos.z = sp70.z;
+ if (play->transitionMode != TRANS_MODE_OFF) {
+ sp6C = this->unk_DB4;
+ sp68 = this->unk_DB0;
+ sp70 = this->player.actor.world.pos;
+ }
+ this->unk_D98 = gZeroVec3f;
+ if (SubS_TimePathing_Update(this->unk_D7C, &this->unk_DA4, &this->unk_DB4, this->unk_DAC, this->unk_DA8,
+ &this->unk_DB0, knots, &this->unk_D98, this->unk_D80)) {
+ if (this->unk_D88 == 0x14) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_58_80);
+ this->player.actor.draw = NULL;
+ } else if (this->unk_D88 == 9) {
+ D_80A41D64 = 2;
+ }
+ ret = true;
+ } else {
+ worldPos = this->player.actor.world.pos;
+ sp7C = this->unk_D98;
+ this->player.actor.world.rot.y = Math_Vec3f_Yaw(&worldPos, &sp7C);
+ }
+ if (play->transitionMode != TRANS_MODE_OFF) {
+ this->unk_DB4 = sp6C;
+ this->unk_DB0 = sp68;
+ this->unk_D98 = sp70;
+ }
+ dx = this->player.actor.world.pos.x - this->player.actor.prevPos.x;
+ dy = this->player.actor.world.pos.z - this->player.actor.prevPos.z;
+ if (!Math_StepToF(&this->unk_D84, 1.0f, 0.1f)) {
+ this->player.actor.world.pos.x = this->player.actor.prevPos.x + (dx * this->unk_D84);
+ this->player.actor.world.pos.z = this->player.actor.prevPos.z + (dy * this->unk_D84);
+ }
+ Math_Vec3f_Copy(&D_80A41D50, &this->player.actor.world.pos);
+ dx = this->player.actor.world.pos.x - this->player.actor.prevPos.x;
+ dy = this->player.actor.world.pos.z - this->player.actor.prevPos.z;
+ this->player.linearVelocity = sqrtf(SQ(dx) + SQ(dy));
+ this->player.linearVelocity *= 1.0f + (1.05f * fabsf(Math_SinS(this->player.unk_B6C)));
+ D_80A41D40 = (this->player.linearVelocity * 10.0f) + 20.0f;
+ D_80A41D40 = CLAMP_MAX(D_80A41D40, 60.0f);
+ D_80A41D44 = this->player.actor.world.rot.y;
+ this->player.actor.world.pos.x = this->player.actor.prevPos.x;
+ this->player.actor.world.pos.z = this->player.actor.prevPos.z;
+ if (!func_80A3F384(this, play)) {
+ D_80A41D48 = true;
+ }
+ return ret;
+}
+
+void func_80A40678(EnTest3* this, PlayState* play) {
+ struct_80A41828* sp3C;
+ ScheduleOutput scheduleOutput;
+
+ this->unk_D80 = ((this->unk_D88 == 20) || (this->unk_D88 == 10) || (this->unk_D88 == 9)) ? 3
+ : Play_InCsMode(play) ? 0
+ : R_TIME_SPEED + ((void)0, gSaveContext.save.timeSpeedOffset);
+
+ if (Schedule_RunScript(play, sScheduleScript, &scheduleOutput)) {
+ if (this->unk_D88 != scheduleOutput.result) {
+ sp3C = &D_80A41828[scheduleOutput.result];
+ func_80A3F114(this, play);
+ if (sp3C->unk_0 != 4) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_51_04);
+ }
+ if (!D_80A417E8[sp3C->unk_0].unk_0(this, play, sp3C, &scheduleOutput)) {
+ return;
+ }
+ if (scheduleOutput.result == 6) {
+ this->player.actor.home.rot.y = 0x7FFF;
+ this->player.stateFlags2 |= PLAYER_STATE2_40000;
+ play->startPlayerCutscene(play, &this->player, -1);
+ }
+ }
+ } else {
+ scheduleOutput.result = 0;
+ }
+ this->unk_D88 = scheduleOutput.result;
+ sp3C = &D_80A41828[this->unk_D88];
+ D_80A417E8[sp3C->unk_0].unk_4(this, play);
+}
+
+void func_80A40824(EnTest3* this, PlayState* play) {
+ this->unk_D78 = &D_80A41854[0];
+ func_80A3F73C(this, play);
+}
+
+void func_80A4084C(EnTest3* this, PlayState* play) {
+ if (Actor_TextboxIsClosing(&this->player.actor, play)) {
+ if ((this->unk_D78->unk_1 == 0) || !func_80A3E80C(this, play, this->unk_D78->unk_1 - 1)) {
+ if (KAFEI_GET_PARAM_1E0(&this->player.actor) == 0) {
+ func_80A3E7E0(this, func_80A40824);
+ } else {
+ func_80A3E7E0(this, func_80A40678);
+ }
+ this->player.targetedActor = NULL;
+ }
+ } else if (func_80A3ED24(this, play)) {
+ func_80A3E7E0(this, func_80A40908);
+ }
+}
+
+void func_80A40908(EnTest3* this, PlayState* play) {
+ if (Actor_ProcessTalkRequest(&this->player.actor, &play->state)) {
+ 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);
+ } else {
+ func_800B8500(&this->player.actor, play, 9999.9f, 9999.9f, PLAYER_IA_MINUS1);
+ this->unk_D78 = &D_80A41854[6];
+ this->player.actor.textId = this->unk_D78->textId;
+ this->player.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8);
+ }
+}
+
+void func_80A409D4(EnTest3* this, PlayState* play) {
+ if ((play->actorCtx.flags & ACTORCTX_FLAG_5) || (play->actorCtx.flags & ACTORCTX_FLAG_4)) {
+ play->actorCtx.flags &= ~ACTORCTX_FLAG_4;
+ func_80A3F0B0(this, play);
+ CutsceneManager_SetReturnCamera(CAM_ID_MAIN);
+ } else {
+ sEnTest3_Input = *CONTROLLER1(&play->state);
+ }
+}
+
+void func_80A40A6C(EnTest3* this, PlayState* play) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_64_20);
+}
+
+void EnTest3_Update(Actor* thisx, PlayState* play2) {
+ PlayState* play = play2;
+ EnTest3* this = THIS;
+
+ sEnTest3_Input.rel.button = sEnTest3_Input.cur.button;
+ sEnTest3_Input.cur.button = 0;
+ sEnTest3_Input.rel.stick_x = 0;
+ sEnTest3_Input.rel.stick_y = 0;
+
+ play->actorCtx.flags &= ~ACTORCTX_FLAG_7;
+ this->player.actor.draw = EnTest3_Draw;
+ D_80A41D48 = false;
+ this->player.actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_506) &&
+ !((this->player.actor.category == ACTORCAT_PLAYER) &&
+ ((play->actorCtx.flags & ACTORCTX_FLAG_5) || (play->actorCtx.flags & ACTORCTX_FLAG_4)))) {
+ if (this->player.csMode != PLAYER_CSMODE_5) {
+ play->startPlayerCutscene(play, &this->player, PLAYER_CSMODE_5);
+ }
+ play->actorCtx.flags &= ~ACTORCTX_FLAG_4;
+ } else if (this->player.actor.category == ACTORCAT_PLAYER) {
+ func_80A409D4(this, play);
+ } else if (play->startPlayerCutscene(play, &this->player, PLAYER_CSMODE_0)) {
+ if (this->unk_D88 >= 7) {
+ Vec3f worldPos;
+
+ Math_Vec3f_Copy(&worldPos, &this->player.actor.world.pos);
+ this->unk_D80 = 4;
+ func_80A40230(this, play);
+ Math_Vec3f_Copy(&this->player.actor.world.pos, &worldPos);
+ D_80A41D48 = false;
+ this->unk_D84 = 0.0f;
+ }
+ } else {
+ D_80A41D40 = 0.0f;
+ D_80A41D44 = this->player.actor.shape.rot.y;
+ this->unk_D94(this, play);
+ sEnTest3_Input.press.button =
+ (sEnTest3_Input.rel.button ^ sEnTest3_Input.cur.button) & sEnTest3_Input.cur.button;
+ func_800B6F20(play, &sEnTest3_Input, D_80A41D40, D_80A41D44);
+ }
+ play->playerUpdate(&this->player, play, &sEnTest3_Input);
+ if (D_80A41D48) {
+ this->player.actor.world.pos.x = D_80A41D50.x;
+ this->player.actor.world.pos.z = D_80A41D50.z;
+ this->player.linearVelocity = 0.0f;
+ }
+}
+
+s32 D_80A418C8 = false;
+
+s32 EnTest3_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
+ EnTest3* this = THIS;
+
+ if (limbIndex == OBJECT_TEST3_LIMB_01) {
+ D_80A41D6C = &this->player.bodyPartsPos[-1];
+ if (!(this->player.skelAnime.moveFlags & ANIM_FLAG_4) || (this->player.skelAnime.moveFlags & ANIM_FLAG_1)) {
+ pos->x *= this->player.ageProperties->unk_08;
+ pos->z *= this->player.ageProperties->unk_08;
+ }
+ if (!(this->player.skelAnime.moveFlags & ANIM_FLAG_4) ||
+ (this->player.skelAnime.moveFlags & ANIM_FLAG_UPDATEY)) {
+ pos->y *= this->player.ageProperties->unk_08;
+ }
+ pos->y -= this->player.unk_AB8;
+ if (this->player.unk_AAA != 0) {
+
+ Matrix_Translate(pos->x, ((Math_CosS(this->player.unk_AAA) - 1.0f) * 200.0f) + pos->y, pos->z,
+ MTXMODE_APPLY);
+ Matrix_RotateXS(this->player.unk_AAA, MTXMODE_APPLY);
+ Matrix_RotateZYX(rot->x, rot->y, rot->z, MTXMODE_APPLY);
+ func_80125318(pos, rot);
+ }
+ } else {
+ if (*dList != NULL) {
+ D_80A41D6C++;
+ }
+ if (D_80A418C8) {
+ *dList = NULL;
+ }
+ if (limbIndex == OBJECT_TEST3_LIMB_0B) {
+ rot->x += this->player.headLimbRot.z;
+ rot->y -= this->player.headLimbRot.y;
+ rot->z += this->player.headLimbRot.x;
+ } else if (limbIndex == OBJECT_TEST3_LIMB_0A) {
+ s32 requiredScopeTemp;
+
+ if (this->player.unk_AA8 != 0) {
+ Matrix_RotateZS(0x44C, MTXMODE_APPLY);
+ Matrix_RotateYS(this->player.unk_AA8, MTXMODE_APPLY);
+ }
+ if (this->player.upperLimbRot.y != 0) {
+ Matrix_RotateYS(this->player.upperLimbRot.y, MTXMODE_APPLY);
+ }
+ Matrix_RotateXS(this->player.upperLimbRot.x, MTXMODE_APPLY);
+ if (this->player.upperLimbRot.z != 0) {
+ Matrix_RotateZS(this->player.upperLimbRot.z, MTXMODE_APPLY);
+ }
+ } else {
+ func_80125500(play, &this->player, limbIndex, pos, rot);
+ }
+ }
+ return false;
+}
+
+void EnTest3_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dList2, Vec3s* rot, Actor* thisx) {
+ s32 pad;
+ EnTest3* this = THIS;
+
+ if (*dList2 != NULL) {
+ Matrix_MultZero(D_80A41D6C);
+ }
+ if (limbIndex == OBJECT_TEST3_LIMB_10) {
+ MtxF curMtxF;
+ Actor* leftHandActor;
+
+ Math_Vec3f_Copy(&this->player.leftHandWorld.pos, D_80A41D6C);
+ if (*dList1 != NULL) {
+ 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);
+ }
+ }
+ leftHandActor = this->player.heldActor;
+ if ((leftHandActor != NULL) && (this->player.stateFlags1 & PLAYER_STATE1_800)) {
+ Vec3s curRot;
+
+ Matrix_Get(&curMtxF);
+ Matrix_MtxFToYXZRot(&curMtxF, &curRot, false);
+ 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);
+ func_80126B8C(play, &this->player);
+ }
+
+ } else if (limbIndex == OBJECT_TEST3_LIMB_13) {
+ Actor* leftHandActor = this->player.heldActor;
+
+ if (leftHandActor != NULL) {
+ leftHandActor->world.pos.x = (this->player.bodyPartsPos[15].x + this->player.leftHandWorld.pos.x) / 2.0f;
+ leftHandActor->world.pos.y = (this->player.bodyPartsPos[15].y + this->player.leftHandWorld.pos.y) / 2.0f;
+ leftHandActor->world.pos.z = (this->player.bodyPartsPos[15].z + this->player.leftHandWorld.pos.z) / 2.0f;
+ }
+ } else if (limbIndex == OBJECT_TEST3_LIMB_0B) {
+ Actor* actor730 = this->player.targetedActor;
+
+ if ((*dList1 != NULL) && this->player.currentMask && !(this->player.stateFlags2 & PLAYER_STATE2_1000000)) {
+ // this->player.currentMask != PLAYER_MASK_NONE
+ if ((this->player.skelAnime.animation != &gPlayerAnim_cl_maskoff) &&
+ ((this->player.skelAnime.animation != &gPlayerAnim_cl_setmask) ||
+ (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);
+ }
+ }
+ }
+ if ((actor730 != NULL) && (actor730->id == ACTOR_BG_IKNV_OBJ)) {
+ Math_Vec3f_Copy(&this->player.actor.focus.pos, &actor730->focus.pos);
+ } else {
+ static Vec3f D_80A418CC = { 1100.0f, -700.0f, 0.0f };
+
+ Matrix_MultVec3f(&D_80A418CC, &this->player.actor.focus.pos);
+ }
+ } else if (limbIndex == OBJECT_TEST3_LIMB_15) {
+ if (D_80A41D60 || CHECK_WEEKEVENTREG(WEEKEVENTREG_50_80) ||
+ (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 {
+ Player_SetFeetPos(play, &this->player, limbIndex);
+ }
+}
+
+static TexturePtr sEyeTextures[] = {
+ object_test3_Tex_000DC0, object_test3_Tex_003680, object_test3_Tex_003E80, object_test3_Tex_004680,
+ object_test3_Tex_004E80, object_test3_Tex_005680, object_test3_Tex_005E80, object_test3_Tex_006680,
+};
+
+static TexturePtr sMouthTextures[] = {
+ object_test3_Tex_0009C0,
+ object_test3_Tex_006E80,
+ object_test3_Tex_007280,
+ object_test3_Tex_007680,
+};
+
+typedef struct {
+ /* 0x0 */ u8 eyeIndex;
+ /* 0x1 */ u8 mouthIndex;
+} KafeiFace; // size = 0x2
+
+static KafeiFace sFaceExpressions[] = {
+ { 0, 0 }, { 1, 0 }, { 2, 0 }, { 0, 0 }, { 1, 0 }, { 2, 0 }, { 4, 0 }, { 5, 1 }, { 7, 2 }, { 0, 2 },
+ { 3, 0 }, { 4, 0 }, { 2, 2 }, { 1, 1 }, { 0, 2 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
+};
+
+void EnTest3_Draw(Actor* thisx, PlayState* play2) {
+ PlayState* play = play2;
+ EnTest3* this = THIS;
+ s32 eyeTexIndex = (this->player.skelAnime.jointTable[OBJECT_TEST3_LIMB_MAX].x & 0xF) - 1;
+ s32 mouthTexIndex = ((this->player.skelAnime.jointTable[OBJECT_TEST3_LIMB_MAX].x >> 4) & 0xF) - 1;
+ Gfx* gfx;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C268(play);
+ if (this->player.invincibilityTimer > 0) {
+ s32 temp2; // Must exist for stack order. Could hold the result of CLAMP instead.
+
+ this->player.unk_B5F += CLAMP(50 - this->player.invincibilityTimer, 8, 40);
+ temp2 = Math_CosS(this->player.unk_B5F * 0x100) * 2000.0f;
+ POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 255, 0, 0, 0, 0, 4000 - temp2);
+ }
+ func_800B8050(&this->player.actor, play, 0);
+ D_80A418C8 = false;
+ if (this->player.stateFlags1 & PLAYER_STATE1_100000) {
+ Vec3f sp4C;
+
+ SkinMatrix_Vec3fMtxFMultXYZ(&play->viewProjectionMtxF, &this->player.actor.focus.pos, &sp4C);
+ if (sp4C.z < -4.0f) {
+ D_80A418C8 = true;
+ }
+ }
+
+ gfx = POLY_OPA_DISP;
+
+ if (eyeTexIndex < 0) {
+ eyeTexIndex = sFaceExpressions[this->player.actor.shape.face].eyeIndex;
+ }
+ gSPSegment(&gfx[0], 0x08, Lib_SegmentedToVirtual(sEyeTextures[eyeTexIndex]));
+ if (mouthTexIndex < 0) {
+ mouthTexIndex = sFaceExpressions[this->player.actor.shape.face].mouthIndex;
+ }
+ gSPSegment(&gfx[1], 0x09, Lib_SegmentedToVirtual(sMouthTextures[mouthTexIndex]));
+
+ POLY_OPA_DISP = &gfx[2];
+
+ SkelAnime_DrawFlexLod(play, this->player.skelAnime.skeleton, this->player.skelAnime.jointTable,
+ this->player.skelAnime.dListCount, EnTest3_OverrideLimbDraw, EnTest3_PostLimbDraw,
+ &this->player.actor, 0);
+ if (this->player.invincibilityTimer > 0) {
+ POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
+ }
+ if ((this->player.getItemDrawIdPlusOne - 1) != GID_NONE) {
+ Player_DrawGetItem(play, &this->player);
+ }
+ CLOSE_DISPS(play->state.gfxCtx);
+}
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 9d902bad1..36cd15c27 100644
--- a/src/overlays/actors/ovl_En_Test3/z_en_test3.h
+++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.h
@@ -7,13 +7,35 @@ struct EnTest3;
typedef void (*EnTest3ActionFunc)(struct EnTest3*, PlayState*);
+#define KAFEI_GET_PARAM_1F(thisx) ((thisx)->params & 0x1F)
+#define KAFEI_GET_PARAM_1E0(thisx) (((thisx)->params >> 5) & 0xF)
+
+typedef struct {
+ /* 0x0 */ u8 unk_0;
+ /* 0x1 */ u8 unk_1;
+ /* 0x2 */ u16 textId;
+} EnTest3_struct_D78; // size = 0x4
+
typedef struct EnTest3 {
- /* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0x628];
- /* 0x76C */ EnTest3ActionFunc actionFunc;
- /* 0x770 */ char unk_770[0x648];
+ /* 0x000 */ Player player;
+ /* 0xD78 */ EnTest3_struct_D78* unk_D78;
+ /* 0xD7C */ Path* unk_D7C;
+ /* 0xD80 */ s32 unk_D80;
+ /* 0xD84 */ f32 unk_D84;
+ /* 0xD88 */ s8 unk_D88;
+ /* 0xD89 */ u8 unk_D89;
+ /* 0xD8A */ s16 unk_D8A;
+ /* 0xD8C */ u8 unk_D8C;
+ /* 0xD8D */ s8 csId;
+ /* 0xD8E */ s16 subCamId;
+ /* 0xD90 */ Player* unk_D90;
+ /* 0xD94 */ EnTest3ActionFunc unk_D94;
+ /* 0xD98 */ Vec3f unk_D98;
+ /* 0xDA4 */ f32 unk_DA4;
+ /* 0xDA8 */ s32 unk_DA8;
+ /* 0xDAC */ s32 unk_DAC;
+ /* 0xDB0 */ s32 unk_DB0;
+ /* 0xDB4 */ s32 unk_DB4;
} EnTest3; // size = 0xDB8
-extern const ActorInit En_Test3_InitVars;
-
#endif // Z_EN_TEST3_H
diff --git a/src/overlays/actors/ovl_En_Test4/overlay.cfg b/src/overlays/actors/ovl_En_Test4/overlay.cfg
deleted file mode 100644
index 06bfe7839..000000000
--- a/src/overlays/actors/ovl_En_Test4/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Test4
-z_en_test4.c
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 805a6f8bf..24d8b4137 100644
--- a/src/overlays/actors/ovl_En_Test4/z_en_test4.c
+++ b/src/overlays/actors/ovl_En_Test4/z_en_test4.c
@@ -1,9 +1,10 @@
/*
* File: z_en_test4.c
* Overlay: ovl_En_Test4
- * Description: Three-Day Timer
+ * Description: Three-Day Events
*/
+#include "prevent_bss_reordering.h"
#include "z_en_test4.h"
#include "overlays/gamestates/ovl_daytelop/z_daytelop.h"
#include "overlays/actors/ovl_En_Horse/z_en_horse.h"
@@ -19,7 +20,7 @@ void EnTest4_Update(Actor* thisx, PlayState* play);
void func_80A42AB8(EnTest4* this, PlayState* play);
void func_80A42F20(EnTest4* this, PlayState* play);
-const ActorInit En_Test4_InitVars = {
+ActorInit En_Test4_InitVars = {
ACTOR_EN_TEST4,
ACTORCAT_SWITCH,
FLAGS,
@@ -42,23 +43,23 @@ static s16 sNightMessages2[] = { 0x1BB4, 0x1BB5, 0x1BB6 };
static s16 sDayMessages2[] = { 0x1BB2, 0x1BB2, 0x1BB3 };
static u16 D_80A43364[] = { CLOCK_TIME(6, 0), CLOCK_TIME(18, 0) };
-static s16 sCutscenes[2];
-static s16 sCurrentCs;
+static s16 sCsIdList[2];
+static s16 sCurCsId;
void func_80A41D70(EnTest4* this, PlayState* play) {
- if (this->unk_144 != 0) {
+ if (this->csIdIndex != 0) {
func_80151A68(play, sNightMessages1[CURRENT_DAY - 1]);
- } else if ((sCutscenes[this->unk_144] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1)) {
+ } else if ((sCsIdList[this->csIdIndex] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1)) {
if (play->actorCtx.flags & ACTORCTX_FLAG_1) {
Sram_IncrementDay();
gSaveContext.save.time = CLOCK_TIME(6, 0);
func_80151A68(play, sDayMessages1[CURRENT_DAY - 1]);
} else {
- this->unk_144 = 0;
+ this->csIdIndex = 0;
this->unk_146 = gSaveContext.save.time += CLOCK_TIME_MINUTE;
}
- func_8010EE74(play, CURRENT_DAY);
+ Interface_NewDay(play, CURRENT_DAY);
D_801BDBC8 = 0xFE;
func_800FB758(play);
func_800FEAF4(&play->envCtx);
@@ -66,22 +67,22 @@ void func_80A41D70(EnTest4* this, PlayState* play) {
}
if (gSaveContext.cutsceneTrigger == 0) {
- if ((sCutscenes[this->unk_144] >= 0) && !(play->actorCtx.flags & ACTORCTX_FLAG_1)) {
+ if ((sCsIdList[this->csIdIndex] >= 0) && !(play->actorCtx.flags & ACTORCTX_FLAG_1)) {
this->actionFunc = func_80A42F20;
- sCurrentCs = sCutscenes[this->unk_144];
+ sCurCsId = sCsIdList[this->csIdIndex];
this->transitionCsTimer = 0;
- gSaveContext.eventInf[1] |= 0x80;
- } else if (this->unk_144 == 0) {
+ SET_EVENTINF(EVENTINF_17);
+ } else if (this->csIdIndex == 0) {
play_sound(NA_SE_EV_CHICKEN_CRY_M);
} else {
func_8019F128(NA_SE_EV_DOG_CRY_EVENING);
}
} else {
this->actionFunc = func_80A42AB8;
- if (this->unk_144 == 0) {
- this->unk_144 = 1;
+ if (this->csIdIndex == 0) {
+ this->csIdIndex = 1;
} else {
- this->unk_144 = 0;
+ this->csIdIndex = 0;
}
this->unk_146 = gSaveContext.save.time += CLOCK_TIME_MINUTE;
@@ -89,12 +90,12 @@ void func_80A41D70(EnTest4* this, PlayState* play) {
}
void func_80A41FA4(EnTest4* this, PlayState* play) {
- if (this->unk_144 != 0) {
+ if (this->csIdIndex != 0) {
func_80151A68(play, sNightMessages2[CURRENT_DAY - 1]);
- } else if ((sCutscenes[this->unk_144] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1)) {
+ } else if ((sCsIdList[this->csIdIndex] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1)) {
Sram_IncrementDay();
gSaveContext.save.time = CLOCK_TIME(6, 0);
- func_8010EE74(play, CURRENT_DAY);
+ Interface_NewDay(play, CURRENT_DAY);
func_80151A68(play, sDayMessages2[CURRENT_DAY - 1]);
D_801BDBC8 = 0xFE;
func_800FB758(play);
@@ -103,22 +104,22 @@ void func_80A41FA4(EnTest4* this, PlayState* play) {
}
if (gSaveContext.cutsceneTrigger == 0) {
- if ((sCutscenes[this->unk_144] >= 0) && !(play->actorCtx.flags & ACTORCTX_FLAG_1)) {
+ if ((sCsIdList[this->csIdIndex] >= 0) && !(play->actorCtx.flags & ACTORCTX_FLAG_1)) {
this->actionFunc = func_80A42F20;
- sCurrentCs = sCutscenes[this->unk_144];
+ sCurCsId = sCsIdList[this->csIdIndex];
this->transitionCsTimer = 0;
- gSaveContext.eventInf[1] |= 0x80;
- } else if (this->unk_144 == 0) {
+ SET_EVENTINF(EVENTINF_17);
+ } else if (this->csIdIndex == 0) {
play_sound(NA_SE_EV_CHICKEN_CRY_M);
} else {
func_8019F128(NA_SE_EV_DOG_CRY_EVENING);
}
} else {
this->actionFunc = func_80A42AB8;
- if (this->unk_144 == 0) {
- this->unk_144 = 1;
+ if (this->csIdIndex == 0) {
+ this->csIdIndex = 1;
} else {
- this->unk_144 = 0;
+ this->csIdIndex = 0;
}
this->unk_146 = gSaveContext.save.time += CLOCK_TIME_MINUTE;
@@ -277,12 +278,12 @@ void func_80A425E4(EnTest4* this, PlayState* play) {
this->nextBellTime = CLOCK_TIME(17, 30);
}
- if ((sCutscenes[this->unk_144] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1) || (CURRENT_DAY == 3) ||
+ if ((sCsIdList[this->csIdIndex] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1) || (CURRENT_DAY == 3) ||
(gSaveContext.save.time >= CLOCK_TIME(17, 0))) {
gSaveContext.screenScale = 1000.0f;
}
if (gSaveContext.screenScale != 1000.0f) {
- gSaveContext.screenScaleFlag = 1;
+ gSaveContext.screenScaleFlag = true;
}
}
}
@@ -291,55 +292,55 @@ void EnTest4_Init(Actor* thisx, PlayState* play) {
s32 dayTemp;
EnTest4* this = THIS;
Player* player = GET_PLAYER(play);
- s8 temp_v0 = this->actor.cutscene;
+ s8 csId = this->actor.csId;
- sCutscenes[0] = temp_v0;
- if (temp_v0 >= 0) {
- ActorCutscene* temp_v0_2 = ActorCutscene_GetCutscene(sCutscenes[0]);
+ sCsIdList[0] = csId;
+ if (csId >= 0) {
+ ActorCutscene* actorCutscene = CutsceneManager_GetCutsceneEntry(sCsIdList[0]);
- gSaveContext.eventInf[5] |= 0x4;
- sCutscenes[1] = temp_v0_2->additionalCutscene;
+ SET_EVENTINF(EVENTINF_52);
+ sCsIdList[1] = actorCutscene->additionalCsId;
} else {
- gSaveContext.eventInf[5] &= (u8)~0x4;
- sCutscenes[1] = sCutscenes[0];
+ CLEAR_EVENTINF(EVENTINF_52);
+ sCsIdList[1] = sCsIdList[0];
}
- if (sIsLoaded || (gSaveContext.eventInf[2] & 0x80)) {
- Actor_MarkForDeath(&this->actor);
+ if (sIsLoaded || (CHECK_EVENTINF(EVENTINF_27))) {
+ Actor_Kill(&this->actor);
} else {
sIsLoaded = true;
this->actor.room = -1;
- gSaveContext.screenScaleFlag = 0;
+ gSaveContext.screenScaleFlag = false;
gSaveContext.screenScale = 1000.0f;
if (CURRENT_DAY == 0) {
if (gSaveContext.save.time < CLOCK_TIME(6, 1)) {
gSaveContext.save.time = CLOCK_TIME(6, 0);
- gSaveContext.gameMode = 0;
+ gSaveContext.gameMode = GAMEMODE_NORMAL;
STOP_GAMESTATE(&play->state);
SET_NEXT_GAMESTATE(&play->state, DayTelop_Init, sizeof(DayTelopState));
- this->unk_144 = 1;
+ this->csIdIndex = 1;
gSaveContext.save.time = CLOCK_TIME(6, 0);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
gSaveContext.save.day = 1;
dayTemp = gSaveContext.save.day;
gSaveContext.save.daysElapsed = dayTemp;
- this->unk_144 = 1;
+ this->csIdIndex = 1;
this->unk_146 = gSaveContext.save.time;
this->actionFunc = func_80A42AB8;
}
} else if (gSaveContext.save.time == CLOCK_TIME(6, 0)) {
- this->unk_144 = 0;
+ this->csIdIndex = 0;
func_80A41D70(this, play);
- if ((gSaveContext.cutsceneTrigger == 0) && (sCutscenes[this->unk_144] >= 0) &&
+ if ((gSaveContext.cutsceneTrigger == 0) && (sCsIdList[this->csIdIndex] >= 0) &&
!(play->actorCtx.flags & ACTORCTX_FLAG_1)) {
- player->stateFlags1 |= 0x200;
+ player->stateFlags1 |= PLAYER_STATE1_200;
}
} else {
if ((gSaveContext.save.time > CLOCK_TIME(18, 0)) || (gSaveContext.save.time < CLOCK_TIME(6, 0))) {
- this->unk_144 = 0;
+ this->csIdIndex = 0;
} else {
- this->unk_144 = 1;
+ this->csIdIndex = 1;
}
this->unk_146 = gSaveContext.save.time;
this->actionFunc = func_80A42AB8;
@@ -353,8 +354,8 @@ void EnTest4_Init(Actor* thisx, PlayState* play) {
}
this->lastBellTime = gSaveContext.save.time;
- if ((sCutscenes[this->unk_144] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1)) {
- gSaveContext.screenScaleFlag = 0;
+ if ((sCsIdList[this->csIdIndex] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1)) {
+ gSaveContext.screenScaleFlag = false;
gSaveContext.screenScale = 1000.0f;
}
}
@@ -366,9 +367,9 @@ void func_80A42AB8(EnTest4* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if ((play->transitionMode == TRANS_MODE_OFF) && !Play_InCsMode(play) && (play->numSetupActors <= 0) &&
- (play->roomCtx.unk31 == 0) && !Play_IsDebugCamEnabled()) {
+ (play->roomCtx.status == 0) && !Play_IsDebugCamEnabled()) {
s16 temp_a2;
- u16 temp_a0 = D_80A43364[this->unk_144];
+ u16 temp_a0 = D_80A43364[this->csIdIndex];
s16 temp_a3;
s16 bellDiff;
s16 new_var;
@@ -380,8 +381,8 @@ void func_80A42AB8(EnTest4* this, PlayState* play) {
if ((temp_a3 * temp_a2) <= 0) {
gSaveContext.unk_3CA7 = 1;
- if (play->actorCtx.flags & ACTORCTX_FLAG_2) {
- play->actorCtx.flags &= ~ACTORCTX_FLAG_2;
+ if (play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON) {
+ play->actorCtx.flags &= ~ACTORCTX_FLAG_PICTO_BOX_ON;
}
if (temp_a0 != CLOCK_TIME(6, 0)) {
@@ -389,17 +390,17 @@ void func_80A42AB8(EnTest4* this, PlayState* play) {
} else if (temp_a0 == CLOCK_TIME(6, 0)) {
if (CURRENT_DAY == 3) {
Interface_StartMoonCrash(play);
- Actor_MarkForDeath(&this->actor);
- gSaveContext.eventInf[1] |= 0x80;
- } else if (((sCutscenes[this->unk_144] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1)) &&
+ Actor_Kill(&this->actor);
+ SET_EVENTINF(EVENTINF_17);
+ } else if (((sCsIdList[this->csIdIndex] < 0) || (play->actorCtx.flags & ACTORCTX_FLAG_1)) &&
(CURRENT_DAY != 3)) {
func_80A41FA4(this, play);
} else {
gSaveContext.screenScale = 0.0f;
Play_SetRespawnData(&play->state, RESPAWN_MODE_DOWN, Entrance_CreateFromSpawn(0), player->unk_3CE,
- 0xBFF, &player->unk_3C0, player->unk_3CC);
+ PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B), &player->unk_3C0, player->unk_3CC);
func_80169EFC(&play->state);
- if (player->stateFlags1 & 0x800000) {
+ if (player->stateFlags1 & PLAYER_STATE1_800000) {
EnHorse* rideActor = (EnHorse*)player->rideActor;
if ((rideActor->type == HORSE_TYPE_EPONA) || (rideActor->type == HORSE_TYPE_2)) {
@@ -412,19 +413,19 @@ void func_80A42AB8(EnTest4* this, PlayState* play) {
}
gSaveContext.respawnFlag = -4;
- gSaveContext.eventInf[2] |= 0x80;
- Actor_MarkForDeath(&this->actor);
+ SET_EVENTINF(EVENTINF_27);
+ Actor_Kill(&this->actor);
}
}
- if ((sCutscenes[this->unk_144] >= 0) && !(play->actorCtx.flags & ACTORCTX_FLAG_1)) {
- player->stateFlags1 |= 0x200;
+ if ((sCsIdList[this->csIdIndex] >= 0) && !(play->actorCtx.flags & ACTORCTX_FLAG_1)) {
+ player->stateFlags1 |= PLAYER_STATE1_200;
this->unk_146 = gSaveContext.save.time;
} else {
- if (this->unk_144 == 0) {
- this->unk_144 = 1;
+ if (this->csIdIndex == 0) {
+ this->csIdIndex = 1;
} else {
- this->unk_144 = 0;
+ this->csIdIndex = 0;
}
this->unk_146 = gSaveContext.save.time += CLOCK_TIME_MINUTE;
@@ -435,15 +436,15 @@ void func_80A42AB8(EnTest4* this, PlayState* play) {
if (CURRENT_DAY == 3) {
if ((this->nextBellTime == CLOCK_TIME(0, 0)) &&
- ((gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) ||
+ ((gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] == ITEM_NONE) ||
(play->sceneId == SCENE_CLOCKTOWER))) {
s32 playerParams;
u32 entrance = gSaveContext.save.entrance;
if ((play->actorCtx.flags & ACTORCTX_FLAG_1)) {
- playerParams = 0xCFF;
+ playerParams = PLAYER_PARAMS(0xFF, PLAYER_INITMODE_TELESCOPE);
} else {
- playerParams = 0xBFF;
+ playerParams = PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B);
}
Play_SetRespawnData(&play->state, RESPAWN_MODE_RETURN, entrance, player->unk_3CE, playerParams,
&player->unk_3C0, player->unk_3CC);
@@ -455,9 +456,9 @@ void func_80A42AB8(EnTest4* this, PlayState* play) {
}
gSaveContext.nextCutsceneIndex = 0xFFF1;
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_02;
- player->stateFlags1 |= 0x200;
- Actor_MarkForDeath(&this->actor);
+ play->transitionType = TRANS_TYPE_FADE_BLACK;
+ player->stateFlags1 |= PLAYER_STATE1_200;
+ Actor_Kill(&this->actor);
}
func_80A42198(this);
} else {
@@ -469,11 +470,11 @@ void func_80A42AB8(EnTest4* this, PlayState* play) {
void func_80A42F20(EnTest4* this, PlayState* play) {
if (!this->transitionCsTimer) {
- if (sCurrentCs >= 0) {
- if (ActorCutscene_GetCanPlayNext(sCurrentCs) == 0) {
- ActorCutscene_SetIntentToPlay(sCurrentCs);
+ if (sCurCsId >= 0) {
+ if (!CutsceneManager_IsNext(sCurCsId)) {
+ CutsceneManager_Queue(sCurCsId);
} else {
- ActorCutscene_Start(sCurrentCs, &this->actor);
+ CutsceneManager_Start(sCurCsId, &this->actor);
this->transitionCsTimer = 1;
}
} else {
@@ -482,7 +483,7 @@ void func_80A42F20(EnTest4* this, PlayState* play) {
} else if (this->transitionCsTimer < 60) {
this->transitionCsTimer++;
if (this->transitionCsTimer == 10) {
- if (this->unk_144 == 0) {
+ if (this->csIdIndex == 0) {
play_sound(NA_SE_EV_CHICKEN_CRY_M);
} else {
func_8019F128(NA_SE_EV_DOG_CRY_EVENING);
@@ -494,21 +495,22 @@ void func_80A42F20(EnTest4* this, PlayState* play) {
gSaveContext.save.time += CLOCK_TIME_MINUTE;
this->unk_146 = gSaveContext.save.time;
play->numSetupActors = -play->numSetupActors;
- player->stateFlags1 &= ~0x200;
+ player->stateFlags1 &= ~PLAYER_STATE1_200;
}
} else {
this->actionFunc = func_80A42AB8;
- if (this->unk_144 == 0) {
- this->unk_144 = 1;
+ if (this->csIdIndex == 0) {
+ this->csIdIndex = 1;
} else {
- this->unk_144 = 0;
+ this->csIdIndex = 0;
}
- if (sCurrentCs >= 0) {
- ActorCutscene_Stop(sCurrentCs);
+ if (sCurCsId >= 0) {
+ CutsceneManager_Stop(sCurCsId);
}
+
gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
- gSaveContext.eventInf[1] &= (u8)~0x80;
+ CLEAR_EVENTINF(EVENTINF_17);
Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
}
}
@@ -563,7 +565,7 @@ void EnTest4_Update(Actor* thisx, PlayState* play) {
EnTest4* this = THIS;
Player* player = GET_PLAYER(play);
- if (!(player->stateFlags1 & 2)) {
+ if (!(player->stateFlags1 & PLAYER_STATE1_2)) {
this->actionFunc(this, play);
if (func_800FE4B8(play) != 0) {
diff --git a/src/overlays/actors/ovl_En_Test4/z_en_test4.h b/src/overlays/actors/ovl_En_Test4/z_en_test4.h
index 5f39f9f56..106a5a9aa 100644
--- a/src/overlays/actors/ovl_En_Test4/z_en_test4.h
+++ b/src/overlays/actors/ovl_En_Test4/z_en_test4.h
@@ -9,7 +9,7 @@ typedef void (*EnTest4ActionFunc)(struct EnTest4*, PlayState*);
typedef struct EnTest4 {
/* 0x000 */ Actor actor;
- /* 0x144 */ s8 unk_144; // 0 on night, 1 on day
+ /* 0x144 */ s8 csIdIndex; // 0 on night, 1 on day
/* 0x145 */ u8 transitionCsTimer;
/* 0x146 */ u16 unk_146;
/* 0x148 */ u16 nextBellTime; // Next time the bell will sound
@@ -23,6 +23,4 @@ typedef enum {
/* 1 */ TEST4_STATE_1
} EnTest4State;
-extern const ActorInit En_Test4_InitVars;
-
#endif // Z_EN_TEST4_H
diff --git a/src/overlays/actors/ovl_En_Test5/overlay.cfg b/src/overlays/actors/ovl_En_Test5/overlay.cfg
deleted file mode 100644
index 9ad6cee31..000000000
--- a/src/overlays/actors/ovl_En_Test5/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Test5
-z_en_test5.c
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 13cb04b02..a041a1aaf 100644
--- a/src/overlays/actors/ovl_En_Test5/z_en_test5.c
+++ b/src/overlays/actors/ovl_En_Test5/z_en_test5.c
@@ -16,7 +16,7 @@ void EnTest5_Update(Actor* thisx, PlayState* play2);
void EnTest5_HandleBottleAction(EnTest5* this, PlayState* play);
void EnTest5_SetupAction(EnTest5* this, EnTest5ActionFunc actionFunc);
-const ActorInit En_Test5_InitVars = {
+ActorInit En_Test5_InitVars = {
ACTOR_EN_TEST5,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -41,7 +41,7 @@ void EnTest5_Init(Actor* thisx, PlayState* play2) {
// If not spawned above a water source, immediately despawn
if (!WaterBox_GetSurface1(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &ySurface,
&water)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -73,7 +73,8 @@ void EnTest5_HandleBottleAction(EnTest5* this, PlayState* play) {
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_PickUp(&this->actor, play, GI_MAX, this->actor.xzDistToPlayer, fabsf(this->actor.playerHeightRel));
+ Actor_OfferGetItem(&this->actor, play, GI_MAX, this->actor.xzDistToPlayer,
+ fabsf(this->actor.playerHeightRel));
}
}
}
diff --git a/src/overlays/actors/ovl_En_Test5/z_en_test5.h b/src/overlays/actors/ovl_En_Test5/z_en_test5.h
index bcfcd98e3..8d0c47784 100644
--- a/src/overlays/actors/ovl_En_Test5/z_en_test5.h
+++ b/src/overlays/actors/ovl_En_Test5/z_en_test5.h
@@ -17,6 +17,4 @@ typedef struct EnTest5 {
/* 0x158 */ EnTest5ActionFunc actionFunc;
} EnTest5; // size = 0x15C
-extern const ActorInit En_Test5_InitVars;
-
#endif // Z_EN_TEST5_H
diff --git a/src/overlays/actors/ovl_En_Test6/overlay.cfg b/src/overlays/actors/ovl_En_Test6/overlay.cfg
deleted file mode 100644
index 35635730d..000000000
--- a/src/overlays/actors/ovl_En_Test6/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Test6
-z_en_test6.c
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 ea50336d9..42ff16ccf 100644
--- a/src/overlays/actors/ovl_En_Test6/z_en_test6.c
+++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.c
@@ -7,6 +7,7 @@
#include "z_en_test6.h"
#include "z64quake.h"
#include "objects/gameplay_keep/gameplay_keep.h"
+#include "z64cutscene_commands.h"
#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_200000 | ACTOR_FLAG_2000000)
@@ -42,7 +43,7 @@ void func_80A92950(EnTest6* this, PlayState* play);
EnTest6Struct D_80A94910[12];
-const ActorInit En_Test6_InitVars = {
+ActorInit En_Test6_InitVars = {
ACTOR_EN_TEST6,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -54,30 +55,57 @@ const ActorInit En_Test6_InitVars = {
(ActorFunc)EnTest6_Draw,
};
-u8 D_80A93E80[] = {
- 0x00, 0x0D, 0x01, 0xA8, 0x00, 0x00, 0x00, 0x64, 0x04, 0x64, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x15, 0xFF, 0xED, 0x00,
- 0x00, 0x04, 0x64, 0x00, 0x12, 0x00, 0x00, 0x00, 0x15, 0xFF, 0xED, 0x00, 0x00, 0x04, 0x64, 0x00, 0x10, 0x00, 0x00,
- 0x00, 0x15, 0xFF, 0xED, 0x00, 0x00, 0x04, 0x64, 0x00, 0x11, 0xFF, 0xE6, 0xFF, 0xFB, 0xFF, 0xE0, 0x00, 0x00, 0x04,
- 0x64, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x12, 0xFF, 0xE0, 0x00, 0x00, 0x04, 0x64, 0x00, 0x0E, 0x00, 0x01, 0x00, 0x16,
- 0xFF, 0xE5, 0x00, 0x00, 0x04, 0x64, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFB, 0x00, 0x00, 0x04, 0x64, 0x00,
- 0x07, 0x00, 0x10, 0x00, 0x1D, 0xFF, 0xB3, 0x00, 0x00, 0x04, 0x64, 0x00, 0x03, 0x00, 0x01, 0x00, 0x13, 0x00, 0x6F,
- 0x00, 0x00, 0x04, 0x64, 0x00, 0x03, 0xFF, 0xC5, 0x00, 0x15, 0x00, 0x5B, 0x00, 0x00, 0x04, 0x64, 0x00, 0x03, 0xFF,
- 0xED, 0x00, 0x3B, 0x00, 0x54, 0x00, 0x00, 0x04, 0x64, 0x00, 0x88, 0xFF, 0xED, 0x00, 0x3B, 0x00, 0x54, 0x00, 0x00,
- 0x04, 0x64, 0x00, 0x6C, 0xFF, 0xEF, 0x00, 0x39, 0x00, 0x52, 0x00, 0x00, 0x04, 0x64, 0x00, 0x0D, 0x00, 0x00, 0x00,
- 0x32, 0x02, 0xA9, 0x00, 0x00, 0x04, 0x64, 0x00, 0x12, 0x00, 0x00, 0x00, 0x32, 0x02, 0xA9, 0x00, 0x00, 0x04, 0x64,
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x32, 0x02, 0xA9, 0x00, 0x00, 0x04, 0x64, 0x00, 0x11, 0xFF, 0x98, 0x01, 0x77, 0x01,
- 0x59, 0x00, 0x00, 0x04, 0x64, 0x00, 0x0F, 0x00, 0x00, 0xFF, 0xC2, 0x01, 0x21, 0x00, 0x00, 0x04, 0x64, 0x00, 0x0E,
- 0xFF, 0xD1, 0x00, 0x7D, 0x00, 0xCD, 0x00, 0x00, 0x04, 0x64, 0x00, 0x0C, 0xFF, 0xC6, 0xFF, 0xEF, 0x00, 0xC7, 0x00,
- 0x00, 0x04, 0x64, 0x00, 0x07, 0x00, 0x10, 0x00, 0x35, 0x00, 0xD3, 0x00, 0x00, 0x04, 0x64, 0x00, 0x03, 0xFF, 0xE1,
- 0x00, 0x3F, 0x02, 0x6F, 0x00, 0x00, 0x04, 0x64, 0x00, 0x03, 0xFE, 0xAB, 0x01, 0xD0, 0x02, 0x1E, 0x00, 0x00, 0x04,
- 0x64, 0x00, 0x03, 0xFE, 0xAB, 0x01, 0xD0, 0x02, 0x1E, 0x00, 0x00, 0x04, 0x64, 0x00, 0x88, 0xFE, 0xAB, 0x01, 0xD0,
- 0x02, 0x1E, 0x00, 0x00, 0x04, 0x64, 0x00, 0x6C, 0xFE, 0xAD, 0x01, 0xCE, 0x02, 0x1C, 0x00, 0x00, 0x00, 0x0F, 0x00,
- 0x0A, 0x00, 0x46, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x0A, 0x00, 0x46, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x0A, 0x00, 0x46,
- 0x00, 0x00, 0x00, 0x0A, 0x00, 0x02, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x0A, 0xFF, 0xEC, 0x00, 0x37, 0x00, 0x00, 0x00,
- 0x10, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x06, 0x00, 0x2F, 0x00, 0x00, 0x00, 0x05, 0xFF, 0xFB,
- 0x00, 0x32, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xDC, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xD8, 0x00, 0x78, 0x00,
- 0x00, 0x00, 0x02, 0xFF, 0xC4, 0x00, 0x78, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xBA, 0x00, 0x82, 0x00, 0x00, 0x00, 0x02,
- 0xFF, 0xB0, 0x00, 0x8C, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x04,
+CutsceneData D_80A93E80[] = {
+ // Header
+ CS_CAM_SPLINE(13, 424, 0, 100),
+
+ // Camera At Data
+ /* 0x0 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 13, 0, 21, -19, CS_CAM_REL_0),
+ /* 0x1 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 18, 0, 21, -19, CS_CAM_REL_0),
+ /* 0x2 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 16, 0, 21, -19, CS_CAM_REL_0),
+ /* 0x3 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 17, -26, -5, -32, CS_CAM_REL_0),
+ /* 0x4 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 15, 0, 18, -32, CS_CAM_REL_0),
+ /* 0x5 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 14, 1, 22, -27, CS_CAM_REL_0),
+ /* 0x6 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 12, 0, 1, -5, CS_CAM_REL_0),
+ /* 0x7 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 7, 16, 29, -77, CS_CAM_REL_0),
+ /* 0x8 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 3, 1, 19, 111, CS_CAM_REL_0),
+ /* 0x9 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 3, -59, 21, 91, CS_CAM_REL_0),
+ /* 0xA */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 3, -19, 59, 84, CS_CAM_REL_0),
+ /* 0xB */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 136, -19, 59, 84, CS_CAM_REL_0),
+ /* 0xC */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 108, -17, 57, 82, CS_CAM_REL_0),
+
+ // Camera Eye Data
+ /* 0x0 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 13, 0, 50, 681, CS_CAM_REL_0),
+ /* 0x1 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 18, 0, 50, 681, CS_CAM_REL_0),
+ /* 0x2 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 16, 0, 50, 681, CS_CAM_REL_0),
+ /* 0x3 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 17, -104, 375, 345, CS_CAM_REL_0),
+ /* 0x4 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 15, 0, -62, 289, CS_CAM_REL_0),
+ /* 0x5 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 14, -47, 125, 205, CS_CAM_REL_0),
+ /* 0x6 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 12, -58, -17, 199, CS_CAM_REL_0),
+ /* 0x7 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 7, 16, 53, 211, CS_CAM_REL_0),
+ /* 0x8 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 3, -31, 63, 623, CS_CAM_REL_0),
+ /* 0x9 */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 3, -341, 464, 542, CS_CAM_REL_0),
+ /* 0xA */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 3, -341, 464, 542, CS_CAM_REL_0),
+ /* 0xB */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 136, -341, 464, 542, CS_CAM_REL_0),
+ /* 0xC */ CS_CAM_POINT(CS_CAM_INTERP_4, 100, 108, -339, 462, 540, CS_CAM_REL_0),
+
+ // Camera Roll and Fov Data
+ /* 0x0 */ CS_CAM_MISC(15, 0xA, 70, 0),
+ /* 0x1 */ CS_CAM_MISC(15, 0xA, 70, 0),
+ /* 0x2 */ CS_CAM_MISC(15, 0xA, 70, 0),
+ /* 0x3 */ CS_CAM_MISC(10, 0x2, 60, 0),
+ /* 0x4 */ CS_CAM_MISC(10, -0x14, 55, 0),
+ /* 0x5 */ CS_CAM_MISC(16, 0x0, 43, 0),
+ /* 0x6 */ CS_CAM_MISC(12, 0x6, 47, 0),
+ /* 0x7 */ CS_CAM_MISC(5, -0x5, 50, 0),
+ /* 0x8 */ CS_CAM_MISC(2, -0x24, 108, 0),
+ /* 0x9 */ CS_CAM_MISC(2, -0x28, 120, 0),
+ /* 0xA */ CS_CAM_MISC(2, -0x3C, 120, 0),
+ /* 0xB */ CS_CAM_MISC(2, -0x46, 130, 0),
+ /* 0xC */ CS_CAM_MISC(2, -0x50, 140, 0),
+
+ // Terminate
+ CS_CAM_END()
};
TexturePtr D_80A9402C[] = {
@@ -113,19 +141,19 @@ void func_80A90730(EnTest6* this, PlayState* play) {
case ENTEST6_24:
case ENTEST6_25:
func_80A91690(this, play);
- ActorCutscene_SetIntentToPlay(play->playerActorCsIds[8]);
+ CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]);
return;
case ENTEST6_26:
func_80A920C8(this, play);
- ActorCutscene_SetIntentToPlay(play->playerActorCsIds[8]);
+ CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]);
return;
}
phi_s0 = 0;
phi_f24 = -900.0f;
- if (gSaveContext.eventInf[7] & 1) {
+ if (CHECK_EVENTINF(EVENTINF_70)) {
for (i = 0; i < 6; i++) {
D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 5;
}
@@ -134,7 +162,7 @@ void func_80A90730(EnTest6* this, PlayState* play) {
phi_s0 |= 1;
}
- if (gSaveContext.eventInf[7] & 0x10) {
+ 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)) {
@@ -144,7 +172,7 @@ void func_80A90730(EnTest6* this, PlayState* play) {
phi_s0 |= 0x10;
}
- if (gSaveContext.eventInf[7] & 2) {
+ 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)) {
@@ -154,7 +182,7 @@ void func_80A90730(EnTest6* this, PlayState* play) {
phi_s0 |= 2;
}
- if (gSaveContext.eventInf[7] & 4) {
+ 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;
@@ -162,7 +190,7 @@ void func_80A90730(EnTest6* this, PlayState* play) {
phi_s0 |= 4;
}
- if (gSaveContext.eventInf[7] & 8) {
+ 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;
@@ -183,16 +211,16 @@ void func_80A90730(EnTest6* this, PlayState* play) {
}
}
-void func_80A90C08(s16 arg0) {
- func_8016566C(arg0);
+void EnTest6_EnableMotionBlur(s16 alpha) {
+ Play_EnableMotionBlur(alpha);
}
-void func_80A90C34(void) {
- func_80165690();
+void EnTest6_DisableMotionBlur(void) {
+ Play_DisableMotionBlur();
}
void func_80A90C54(PlayState* play, f32 arg1) {
- play->envCtx.fillScreen = 1;
+ play->envCtx.fillScreen = true;
play->envCtx.screenFillColor[0] = 250;
play->envCtx.screenFillColor[1] = 250;
play->envCtx.screenFillColor[2] = 250;
@@ -200,7 +228,7 @@ void func_80A90C54(PlayState* play, f32 arg1) {
}
void func_80A90D20(PlayState* play) {
- play->envCtx.fillScreen = 0;
+ play->envCtx.fillScreen = false;
}
void func_80A90D34(EnTest6* this, PlayState* play, EnTest6Struct* ptr) {
@@ -211,7 +239,7 @@ void func_80A90D34(EnTest6* this, PlayState* play, EnTest6Struct* ptr) {
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);
- POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP);
+ POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80A9402C[ptr->unk_00]));
@@ -240,8 +268,8 @@ void func_80A90D34(EnTest6* this, PlayState* play, EnTest6Struct* ptr) {
void func_80A90FC0(EnTest6* this, PlayState* play, EnTest6Struct* ptr) {
s32 pad;
- Gfx* gfx = GRAPH_ALLOC(play->state.gfxCtx, sizeof(Gfx) * 2);
- Gfx* gfx2 = gfx;
+ Gfx* gfxHead = GRAPH_ALLOC(play->state.gfxCtx, 2 * sizeof(Gfx));
+ Gfx* gfx = gfxHead;
Hilite* sp70;
Vec3f sp64;
@@ -253,14 +281,14 @@ void func_80A90FC0(EnTest6* this, PlayState* play, EnTest6Struct* ptr) {
OPEN_DISPS(play->state.gfxCtx);
- if (gfx != NULL) {
+ if (gfxHead != NULL) {
func_8012C28C(play->state.gfxCtx);
gDPSetTileSize(gfx++, 1, sp70->h.x1 & 0xFFFF, sp70->h.y1 & 0xFFFF, (sp70->h.x1 + 60) & 0xFFFF,
(sp70->h.y1 + 60) & 0xFFFF);
- gSPEndDisplayList(gfx);
+ gSPEndDisplayList(gfx++);
- gSPSegment(POLY_OPA_DISP++, 0x07, gfx2);
+ 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);
@@ -301,8 +329,8 @@ void EnTest6_Init(Actor* thisx, PlayState* play2) {
if (((ENTEST6_GET(&this->actor) == ENTEST6_24) || (ENTEST6_GET(&this->actor) == ENTEST6_25) ||
(ENTEST6_GET(&this->actor) == ENTEST6_26)) &&
- (play->playerActorCsIds[8] == -1)) {
- Actor_MarkForDeath(&this->actor);
+ (play->playerCsIds[PLAYER_CS_ID_SONG_WARP] == CS_ID_NONE)) {
+ Actor_Kill(&this->actor);
return;
}
@@ -313,7 +341,7 @@ void EnTest6_Init(Actor* thisx, PlayState* play2) {
}
this->unk_286 = 0;
- this->unk_274 = 0;
+ this->cueId = 0;
this->unk_278 = 0;
this->unk_276 = 99;
func_80A90730(this, play);
@@ -338,8 +366,8 @@ void EnTest6_Destroy(Actor* thisx, PlayState* play2) {
play->envCtx.lightSettings.fogColor[1] = 0;
play->envCtx.lightSettings.fogColor[2] = 0;
play->envCtx.lightSettings.fogNear = 0;
- play->envCtx.lightSettings.fogFar = 0;
- play->envCtx.fillScreen = 0;
+ play->envCtx.lightSettings.zFar = 0;
+ play->envCtx.fillScreen = false;
for (i = 0; i < ARRAY_COUNT(this->lights); i++) {
LightContext_RemoveLight(play, &play->lightCtx, this->lights[i].node);
@@ -350,21 +378,21 @@ void func_80A9156C(EnTest6* this, PlayState* play) {
switch (ENTEST6_GET(&this->actor)) {
case ENTEST6_24:
case ENTEST6_25:
- if (!ActorCutscene_GetCanPlayNext(play->playerActorCsIds[8])) {
- ActorCutscene_SetIntentToPlay(play->playerActorCsIds[8]);
+ if (!CutsceneManager_IsNext(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])) {
+ CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]);
} else {
- ActorCutscene_Start(play->playerActorCsIds[8], NULL);
- this->subCamId = ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8]);
+ 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);
}
break;
case ENTEST6_26:
- if (!ActorCutscene_GetCanPlayNext(play->playerActorCsIds[8])) {
- ActorCutscene_SetIntentToPlay(play->playerActorCsIds[8]);
+ if (!CutsceneManager_IsNext(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])) {
+ CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]);
} else {
- ActorCutscene_Start(play->playerActorCsIds[8], NULL);
- this->subCamId = ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8]);
+ 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);
}
break;
@@ -379,7 +407,7 @@ void func_80A9156C(EnTest6* this, PlayState* play) {
}
void func_80A91690(EnTest6* this, PlayState* play) {
- this->unk_274 = 90;
+ this->cueId = 90;
this->unk_27A = 100;
this->unk_286 = 0;
if (ENTEST6_GET(&this->actor) == ENTEST6_25) {
@@ -393,12 +421,12 @@ void func_80A916F0(EnTest6* this, PlayState* play) {
Player* player = GET_PLAYER(play);
player->actor.freezeTimer = 0;
- play->unk_18844 = 0;
- ActorCutscene_Stop(play->playerActorCsIds[8]);
- func_800B7298(play, NULL, 6);
- func_80A90C34();
+ play->unk_18844 = false;
+ CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]);
+ func_800B7298(play, NULL, PLAYER_CSMODE_END);
+ EnTest6_DisableMotionBlur();
Distortion_ClearType(DISTORTION_TYPE_5);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
void func_80A91760(EnTest6* this, PlayState* play) {
@@ -415,14 +443,14 @@ void func_80A91760(EnTest6* this, PlayState* play) {
mainCam = Play_GetCamera(play, CAM_ID_MAIN);
- switch (this->unk_274) {
+ 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->unk_274 = 91;
+ this->cueId = 91;
break;
case 91:
@@ -462,11 +490,11 @@ void func_80A91760(EnTest6* this, PlayState* play) {
((subCam->at.z - subCam->eye.z) * 0.2f);
}
}
- func_80A90C08(0x78);
+ EnTest6_EnableMotionBlur(120);
Distortion_SetType(DISTORTION_TYPE_5);
Distortion_SetCountdown(80);
- play->unk_18844 = 1;
- this->unk_274 = 95;
+ play->unk_18844 = true;
+ this->cueId = 95;
}
break;
@@ -517,13 +545,13 @@ void func_80A91760(EnTest6* this, PlayState* play) {
if (this->unk_27A == 10) {
this->unk_14C = 0.1f;
- func_80A90C34();
+ EnTest6_DisableMotionBlur();
Distortion_ClearType(DISTORTION_TYPE_5);
- play->unk_18844 = 0;
+ play->unk_18844 = false;
if (this->unk_254 != NULL) {
ZeldaArena_Free(this->unk_254);
}
- this->unk_274 = 99;
+ this->cueId = 99;
}
break;
@@ -537,22 +565,22 @@ void func_80A91760(EnTest6* this, PlayState* play) {
}
if (this->unk_286 != 0) {
- func_800B7298(play, NULL, 7);
+ func_800B7298(play, NULL, PLAYER_CSMODE_WAIT);
} else {
if (this->unk_27A == 90) {
- func_800B7298(play, NULL, 0x42);
+ func_800B7298(play, NULL, PLAYER_CSMODE_66);
}
if (this->unk_27A == 70) {
- func_800B7298(play, NULL, 0x52);
+ func_800B7298(play, NULL, PLAYER_CSMODE_82);
}
if (this->unk_27A == 30) {
- func_800B7298(play, NULL, 0x51);
+ func_800B7298(play, NULL, PLAYER_CSMODE_81);
}
if (this->unk_27A == 5) {
- func_800B7298(play, NULL, 0x4A);
+ func_800B7298(play, NULL, PLAYER_CSMODE_74);
}
}
@@ -614,12 +642,12 @@ void func_80A92118(EnTest6* this, PlayState* play) {
Player* player = GET_PLAYER(play);
player->actor.freezeTimer = 0;
- play->unk_18844 = 0;
- ActorCutscene_Stop(play->playerActorCsIds[8]);
- func_800B7298(play, NULL, 6);
- func_80A90C34();
+ play->unk_18844 = false;
+ CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]);
+ func_800B7298(play, NULL, PLAYER_CSMODE_END);
+ EnTest6_DisableMotionBlur();
Distortion_ClearType(DISTORTION_TYPE_5);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
void func_80A92188(EnTest6* this, PlayState* play) {
@@ -657,7 +685,7 @@ void func_80A92188(EnTest6* this, PlayState* play) {
func_800FD5E0(play, &D_80A94070, 1.0f);
func_800FD654(play, &D_80A94068, 1.0f);
func_800FD698(play, D_80A94074, D_80A94078, 1.0f);
- play->unk_18844 = 1;
+ play->unk_18844 = true;
}
if (this->unk_27A == 15) {
@@ -665,7 +693,7 @@ void func_80A92188(EnTest6* this, PlayState* play) {
func_800FD5E0(play, &D_80A94070, 0.0f);
func_800FD654(play, &D_80A94068, 0.0f);
func_800FD698(play, D_80A94074, D_80A94078, 0.0f);
- play->unk_18844 = 0;
+ play->unk_18844 = false;
}
if (this->unk_286 >= 20) {
@@ -673,21 +701,21 @@ void func_80A92188(EnTest6* this, PlayState* play) {
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);
- play->unk_18844 = 0;
+ play->unk_18844 = false;
}
func_800B8F98(&player->actor, NA_SE_PL_FLYING_AIR - SFX_FLAG);
switch (this->unk_27A) {
case 119:
- func_80A90C08(0x32);
+ EnTest6_EnableMotionBlur(50);
break;
case 115:
- func_80A90C08(0x14);
+ EnTest6_EnableMotionBlur(20);
Distortion_SetType(DISTORTION_TYPE_5);
Distortion_SetCountdown(90);
- this->unk_274 = 2;
+ this->cueId = 2;
break;
case 110:
@@ -696,34 +724,34 @@ void func_80A92188(EnTest6* this, PlayState* play) {
case 38:
case 114:
- this->unk_274 = 1;
+ this->cueId = 1;
break;
case 76:
- this->unk_274 = 3;
+ this->cueId = 3;
break;
case 61:
- func_80A90C08(0x96);
- this->unk_274 = 4;
+ EnTest6_EnableMotionBlur(150);
+ this->cueId = 4;
break;
case 51:
- func_80A90C08(0xB4);
- this->unk_274 = 5;
+ EnTest6_EnableMotionBlur(180);
+ this->cueId = 5;
break;
case 14:
case 15:
- func_80A90C08(0x32);
+ EnTest6_EnableMotionBlur(50);
Distortion_ClearType(DISTORTION_TYPE_5);
- this->unk_274 = 0;
+ this->cueId = 0;
break;
case 1:
- func_80A90C34();
- if (gSaveContext.eventInf[5] & 4) {
- this->unk_274 = 9;
+ EnTest6_DisableMotionBlur();
+ if (CHECK_EVENTINF(EVENTINF_52)) {
+ this->cueId = 9;
}
break;
}
@@ -731,19 +759,19 @@ void func_80A92188(EnTest6* this, PlayState* play) {
func_80A92950(this, play);
if (this->unk_27A == 115) {
- subCamId = ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8]);
+ 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;
- func_8016119C(subCam, &this->unk_18C);
+ CutsceneCamera_Init(subCam, &this->unk_18C);
}
if ((this->unk_27A <= 115) && (this->unk_27A >= 16)) {
- func_80161998(D_80A93E80, &this->unk_18C);
+ CutsceneCamera_UpdateSplines((u8*)D_80A93E80, &this->unk_18C);
} else if (this->unk_27A < 16) {
- subCamId = ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8]);
+ subCamId = CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]);
Play_SetCameraAtEyeUp(play, subCamId, &this->subCamAt, &this->subCamEye, &sSubCamUp);
Play_SetCameraFov(play, subCamId, this->subCamFov);
@@ -764,23 +792,23 @@ void func_80A92188(EnTest6* this, PlayState* play) {
break;
case 98:
- func_800B7298(play, NULL, 0x40);
+ func_800B7298(play, NULL, PLAYER_CSMODE_64);
break;
case 68:
- func_800B7298(play, NULL, 0x41);
+ func_800B7298(play, NULL, PLAYER_CSMODE_65);
break;
case 52:
- func_800B7298(play, NULL, 0x58);
+ func_800B7298(play, NULL, PLAYER_CSMODE_88);
break;
case 43:
- func_800B7298(play, NULL, 0x72);
+ func_800B7298(play, NULL, PLAYER_CSMODE_114);
break;
case 38:
- func_800B7298(play, NULL, 7);
+ func_800B7298(play, NULL, PLAYER_CSMODE_WAIT);
break;
case 14:
@@ -806,7 +834,7 @@ void func_80A92188(EnTest6* this, PlayState* play) {
(CHECK_BTN_ALL(input->press.button, BTN_A) || CHECK_BTN_ALL(input->press.button, BTN_B))) {
this->unk_286 = 1;
this->unk_27A = 39;
- Audio_QueueSeqCmd(0x111400FF);
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 20);
}
if (DECR(this->unk_27A) == 0) {
@@ -825,13 +853,13 @@ void func_80A92950(EnTest6* this, PlayState* play) {
Player* player = GET_PLAYER(play);
f32 temp_f0;
s32 i;
- s32 temp_v0;
+ s32 cueChannel;
- if (Cutscene_CheckActorAction(play, 0x1F9)) {
- temp_v0 = Cutscene_GetActorActionIndex(play, 0x1F9);
- this->unk_274 = play->csCtx.actorActions[temp_v0]->action;
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_505)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_505);
+ this->cueId = play->csCtx.actorCues[cueChannel]->id;
- switch (this->unk_274) {
+ switch (this->cueId) {
case 1:
break;
@@ -841,39 +869,39 @@ void func_80A92950(EnTest6* this, PlayState* play) {
this->unk_27C = 0;
player->actor.shape.shadowDraw = NULL;
- if (play->csCtx.actorActions[temp_v0]->startPos.x != 0) {
- this->unk_154 = (u32)play->csCtx.actorActions[temp_v0]->startPos.x;
+ if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) {
+ this->unk_154 = (u32)play->csCtx.actorCues[cueChannel]->startPos.x;
} else {
this->unk_154 = 150.0f;
}
- if (play->csCtx.actorActions[temp_v0]->startPos.y != 0) {
- this->unk_280 = play->csCtx.actorActions[temp_v0]->startPos.y;
+ if (play->csCtx.actorCues[cueChannel]->startPos.y != 0) {
+ this->unk_280 = play->csCtx.actorCues[cueChannel]->startPos.y;
} else {
this->unk_280 = 38;
}
- if (play->csCtx.actorActions[temp_v0]->startPos.z != 0) {
- this->unk_150 = (u32)play->csCtx.actorActions[temp_v0]->startPos.z;
+ if (play->csCtx.actorCues[cueChannel]->startPos.z != 0) {
+ this->unk_150 = (u32)play->csCtx.actorCues[cueChannel]->startPos.z;
} else {
this->unk_150 = 480.0f;
}
break;
case 3:
- if (play->csCtx.actorActions[temp_v0]->startPos.x != 0) {
- this->unk_154 += (u32)play->csCtx.actorActions[temp_v0]->startPos.x;
+ if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) {
+ this->unk_154 += (u32)play->csCtx.actorCues[cueChannel]->startPos.x;
}
- if (play->csCtx.actorActions[temp_v0]->startPos.y != 0) {
- this->unk_280 += (s16)play->csCtx.actorActions[temp_v0]->startPos.y;
+ if (play->csCtx.actorCues[cueChannel]->startPos.y != 0) {
+ this->unk_280 += (s16)play->csCtx.actorCues[cueChannel]->startPos.y;
} else {
this->unk_280 += 6;
}
- if (play->csCtx.actorActions[temp_v0]->startPos.z != 0) {
- this->unk_158 = (u32)play->csCtx.actorActions[temp_v0]->startPos.z;
+ if (play->csCtx.actorCues[cueChannel]->startPos.z != 0) {
+ this->unk_158 = (u32)play->csCtx.actorCues[cueChannel]->startPos.z;
} else {
this->unk_158 = -32.0f;
}
@@ -881,30 +909,30 @@ void func_80A92950(EnTest6* this, PlayState* play) {
break;
case 4:
- if (play->csCtx.actorActions[temp_v0]->startPos.x != 0) {
- this->unk_154 += (u32)play->csCtx.actorActions[temp_v0]->startPos.x;
+ if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) {
+ this->unk_154 += (u32)play->csCtx.actorCues[cueChannel]->startPos.x;
}
- if (play->csCtx.actorActions[temp_v0]->startPos.y != 0) {
- this->unk_280 += (s16)play->csCtx.actorActions[temp_v0]->startPos.y;
+ if (play->csCtx.actorCues[cueChannel]->startPos.y != 0) {
+ this->unk_280 += (s16)play->csCtx.actorCues[cueChannel]->startPos.y;
} else {
this->unk_280 -= 4;
}
break;
case 5:
- if (play->csCtx.actorActions[temp_v0]->startPos.x != 0) {
- this->unk_154 += (u32)play->csCtx.actorActions[temp_v0]->startPos.x;
+ if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) {
+ this->unk_154 += (u32)play->csCtx.actorCues[cueChannel]->startPos.x;
}
- if (play->csCtx.actorActions[temp_v0]->startPos.y != 0) {
- this->unk_280 += (s16)play->csCtx.actorActions[temp_v0]->startPos.y;
+ if (play->csCtx.actorCues[cueChannel]->startPos.y != 0) {
+ this->unk_280 += (s16)play->csCtx.actorCues[cueChannel]->startPos.y;
} else {
this->unk_280 -= 8;
}
- if (play->csCtx.actorActions[temp_v0]->startPos.z != 0) {
- this->unk_158 += (u32)play->csCtx.actorActions[temp_v0]->startPos.z;
+ if (play->csCtx.actorCues[cueChannel]->startPos.z != 0) {
+ this->unk_158 += (u32)play->csCtx.actorCues[cueChannel]->startPos.z;
} else {
this->unk_158 += 20.0f;
}
@@ -912,7 +940,7 @@ void func_80A92950(EnTest6* this, PlayState* play) {
this->unk_150 += this->unk_158;
if (this->unk_150 > 3500.0f) {
this->unk_150 = 3500.0f;
- this->unk_274 = 0;
+ this->cueId = 0;
}
break;
@@ -922,20 +950,20 @@ void func_80A92950(EnTest6* this, PlayState* play) {
this->unk_27C = 0;
player->actor.shape.shadowDraw = NULL;
- if (play->csCtx.actorActions[temp_v0]->startPos.x != 0) {
- this->unk_154 = (u32)play->csCtx.actorActions[temp_v0]->startPos.x;
+ if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) {
+ this->unk_154 = (u32)play->csCtx.actorCues[cueChannel]->startPos.x;
} else {
this->unk_154 = 100.0f;
}
- if (play->csCtx.actorActions[temp_v0]->startPos.y != 0) {
- this->unk_14C = (u32)play->csCtx.actorActions[temp_v0]->startPos.y;
+ if (play->csCtx.actorCues[cueChannel]->startPos.y != 0) {
+ this->unk_14C = (u32)play->csCtx.actorCues[cueChannel]->startPos.y;
} else {
this->unk_14C = 20.0f;
}
- if (play->csCtx.actorActions[temp_v0]->startPos.z != 0) {
- this->unk_150 = (u32)play->csCtx.actorActions[temp_v0]->startPos.z;
+ if (play->csCtx.actorCues[cueChannel]->startPos.z != 0) {
+ this->unk_150 = (u32)play->csCtx.actorCues[cueChannel]->startPos.z;
} else {
this->unk_150 = 300.0f;
}
@@ -943,8 +971,8 @@ void func_80A92950(EnTest6* this, PlayState* play) {
break;
case 7:
- if (play->csCtx.actorActions[temp_v0]->startPos.x != 0) {
- this->unk_158 = (u32)play->csCtx.actorActions[temp_v0]->startPos.x;
+ if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) {
+ this->unk_158 = (u32)play->csCtx.actorCues[cueChannel]->startPos.x;
} else {
this->unk_158 = -5.0f;
}
@@ -952,8 +980,8 @@ void func_80A92950(EnTest6* this, PlayState* play) {
break;
case 8:
- if (play->csCtx.actorActions[temp_v0]->startPos.x != 0) {
- this->unk_158 += (u32)play->csCtx.actorActions[temp_v0]->startPos.x;
+ if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) {
+ this->unk_158 += (u32)play->csCtx.actorCues[cueChannel]->startPos.x;
} else {
this->unk_158 += 2.0f;
}
@@ -961,7 +989,7 @@ void func_80A92950(EnTest6* this, PlayState* play) {
this->unk_154 += this->unk_158;
if (this->unk_154 > 10000.0f) {
this->unk_154 = 10000.0f;
- this->unk_274 = 0;
+ this->cueId = 0;
}
break;
@@ -972,14 +1000,14 @@ void func_80A92950(EnTest6* this, PlayState* play) {
case 9:
Play_SetRespawnData(&play->state, 1, ((void)0, gSaveContext.save.entrance & 0xFFFF), player->unk_3CE,
- 0xBFF, &player->unk_3C0, player->unk_3CC);
+ PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B), &player->unk_3C0, player->unk_3CC);
this->unk_276 = 99;
play->transitionTrigger = TRANS_TRIGGER_START;
play->nextEntrance = gSaveContext.respawn[RESPAWN_MODE_RETURN].entrance;
- play->transitionType = TRANS_TYPE_02;
+ play->transitionType = TRANS_TYPE_FADE_BLACK;
if ((gSaveContext.save.time > CLOCK_TIME(18, 0)) || (gSaveContext.save.time < CLOCK_TIME(6, 0))) {
gSaveContext.respawnFlag = -0x63;
- gSaveContext.eventInf[2] |= 0x80;
+ SET_EVENTINF(EVENTINF_27);
} else {
gSaveContext.respawnFlag = 2;
}
@@ -987,7 +1015,7 @@ void func_80A92950(EnTest6* this, PlayState* play) {
return;
}
} else {
- switch (this->unk_274) {
+ switch (this->cueId) {
case 2:
this->unk_276 = 0;
this->unk_278 = 0;
@@ -1016,7 +1044,7 @@ void func_80A92950(EnTest6* this, PlayState* play) {
this->unk_150 += this->unk_158;
if (this->unk_150 > 3500.0f) {
this->unk_150 = 3500.0f;
- this->unk_274 = 0;
+ this->cueId = 0;
}
break;
@@ -1041,7 +1069,7 @@ void func_80A92950(EnTest6* this, PlayState* play) {
this->unk_154 += this->unk_158;
if (this->unk_154 > 10000.0f) {
this->unk_154 = 10000.0f;
- this->unk_274 = 0;
+ this->cueId = 0;
}
break;
@@ -1053,11 +1081,12 @@ void func_80A92950(EnTest6* this, PlayState* play) {
case 9:
if (gSaveContext.save.time > CLOCK_TIME(12, 0)) {
Play_SetRespawnData(&play->state, 1, ((void)0, gSaveContext.save.entrance & 0xFFFF),
- player->unk_3CE, 0xBFF, &player->unk_3C0, player->unk_3CC);
+ player->unk_3CE, PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B), &player->unk_3C0,
+ player->unk_3CC);
this->unk_276 = 99;
play->transitionTrigger = TRANS_TRIGGER_START;
play->nextEntrance = gSaveContext.respawn[RESPAWN_MODE_RETURN].entrance;
- play->transitionType = TRANS_TYPE_02;
+ play->transitionType = TRANS_TYPE_FADE_BLACK;
gSaveContext.respawnFlag = 2;
play->msgCtx.ocarinaMode = 4;
}
@@ -1230,7 +1259,7 @@ void func_80A939E8(EnTest6* this, PlayState* play2) {
OPEN_DISPS(play->state.gfxCtx);
- switch (this->unk_274) {
+ switch (this->cueId) {
case 91:
case 93:
Lights_PointSetPosition(&this->lights[0].info, player->actor.world.pos.x, player->actor.world.pos.y - 10.0f,
@@ -1272,7 +1301,7 @@ void func_80A939E8(EnTest6* this, PlayState* play2) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_XLU_DISP++, gOwlStatueWhiteFlashDL);
+ gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL);
}
}
Lights_PointSetPosition(&this->lights[0].info, player->actor.world.pos.x, player->actor.world.pos.y - 10.0f,
@@ -1296,7 +1325,7 @@ void func_80A939E8(EnTest6* this, PlayState* play2) {
void EnTest6_Draw(Actor* thisx, PlayState* play) {
EnTest6* this = THIS;
- if (this->unk_274 != 0) {
+ if (this->cueId != 0) {
switch (this->unk_276) {
case 1:
func_80A93298(this, play);
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 ad596960e..d7e40a983 100644
--- a/src/overlays/actors/ovl_En_Test6/z_en_test6.h
+++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.h
@@ -31,13 +31,13 @@ typedef struct EnTest6 {
/* 0x15C */ f32 unk_15C;
/* 0x160 */ f32 unk_160;
/* 0x164 */ EnTest6Light lights[2];
- /* 0x18C */ DbCameraUnkStruct unk_18C;
+ /* 0x18C */ CutsceneCamera unk_18C;
/* 0x20C */ Vec3f unk_20C[6];
/* 0x254 */ Vec3f (*unk_254)[64];
/* 0x258 */ Vec3f subCamAt;
/* 0x264 */ Vec3f subCamEye;
/* 0x270 */ f32 subCamFov;
- /* 0x274 */ s16 unk_274;
+ /* 0x274 */ s16 cueId;
/* 0x276 */ s16 unk_276;
/* 0x278 */ s16 unk_278;
/* 0x27A */ s16 unk_27A;
@@ -49,6 +49,4 @@ typedef struct EnTest6 {
/* 0x286 */ s16 unk_286;
} EnTest6; // size = 0x288
-extern const ActorInit En_Test6_InitVars;
-
#endif // Z_EN_TEST6_H
diff --git a/src/overlays/actors/ovl_En_Test7/overlay.cfg b/src/overlays/actors/ovl_En_Test7/overlay.cfg
deleted file mode 100644
index 5a898f7c0..000000000
--- a/src/overlays/actors/ovl_En_Test7/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Test7
-z_en_test7.c
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 5f153e5a9..9c672ed51 100644
--- a/src/overlays/actors/ovl_En_Test7/z_en_test7.c
+++ b/src/overlays/actors/ovl_En_Test7/z_en_test7.c
@@ -34,7 +34,7 @@ void func_80AF2EC8(EnTest7* this, PlayState* play);
void func_80AF2F98(EnTest7* this, PlayState* play);
void func_80AF30F4(EnTest7* this, PlayState* play);
-const ActorInit En_Test7_InitVars = {
+ActorInit En_Test7_InitVars = {
ACTOR_EN_TEST7,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -412,13 +412,13 @@ void EnTest7_Init(Actor* thisx, PlayState* play2) {
Audio_PlayBgm_StorePrevBgm(NA_BGM_SONG_OF_SOARING);
}
- if (play->playerActorCsIds[8] == -1) {
- Actor_MarkForDeath(&this->actor);
+ if (play->playerCsIds[PLAYER_CS_ID_SONG_WARP] == CS_ID_NONE) {
+ Actor_Kill(&this->actor);
return;
}
- ActorCutscene_SetIntentToPlay(play->playerActorCsIds[8]);
- player2->stateFlags1 |= 0x20;
+ CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]);
+ player2->stateFlags1 |= PLAYER_STATE1_20;
Lights_PointNoGlowSetInfo(&this->lightInfo, (Math_SinS(this->unk_1E8E) * 90.0f) + player->actor.world.pos.x,
player->actor.world.pos.y + 10.0f,
(Math_CosS(this->unk_1E8E) * 90.0f) + player->actor.world.pos.z, 255, 255, 255, 255);
@@ -428,17 +428,17 @@ void EnTest7_Init(Actor* thisx, PlayState* play2) {
void EnTest7_Destroy(Actor* thisx, PlayState* play) {
EnTest7* this = THIS;
- ActorCutscene_Stop(play->playerActorCsIds[8]);
+ CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]);
LightContext_RemoveLight(play, &play->lightCtx, this->lightNode);
}
void func_80AF19A8(EnTest7* this, PlayState* play) {
- if (!ActorCutscene_GetCanPlayNext(play->playerActorCsIds[8])) {
- ActorCutscene_SetIntentToPlay(play->playerActorCsIds[8]);
+ if (!CutsceneManager_IsNext(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])) {
+ CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]);
} else {
- ActorCutscene_Start(play->playerActorCsIds[8], NULL);
+ CutsceneManager_Start(play->playerCsIds[PLAYER_CS_ID_SONG_WARP], NULL);
func_80AF082C(this, func_80AF1A2C);
- play->unk_18844 = 1;
+ play->unk_18844 = true;
}
}
@@ -452,7 +452,8 @@ void func_80AF1A2C(EnTest7* this, PlayState* play) {
func_800FD698(play, 2000, 4000, sp2C);
if (this->unk_1E54 >= 10) {
- Camera* subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8]));
+ Camera* subCam =
+ Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]));
this->subCamEye = subCam->eye;
this->subCamAt = subCam->at;
@@ -461,7 +462,7 @@ void func_80AF1A2C(EnTest7* this, PlayState* play) {
func_80AF082C(this, func_80AF1CA0);
this->unk_144 |= 0x20;
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_PL_WARP_WING_OPEN);
- func_8016566C(0x78);
+ Play_EnableMotionBlur(120);
}
}
@@ -514,7 +515,8 @@ void func_80AF1CA0(EnTest7* this, PlayState* play) {
}
if (Rand_ZeroOne() < 0.3f) {
- Camera* subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8]));
+ Camera* subCam =
+ Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]));
f32 rand = Rand_ZeroOne();
sp34.x = ((subCam->eye.x - this->actor.world.pos.x) * rand) + this->actor.world.pos.x;
@@ -537,7 +539,7 @@ void func_80AF1E44(EnTest7* this, PlayState* play) {
func_80AF1B68(this, play);
if (Rand_ZeroOne() < 0.3f) {
- subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8]));
+ subCam = Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]));
rand = Rand_ZeroOne();
sp34.x = ((subCam->eye.x - this->actor.world.pos.x) * rand) + this->actor.world.pos.x;
sp34.y = ((subCam->eye.y - this->actor.world.pos.y) * rand) + this->actor.world.pos.y;
@@ -585,7 +587,7 @@ void func_80AF2030(EnTest7* this, PlayState* play) {
this->unk_148.unk_10 -= 0x2EE0;
this->actor.world.pos.y += 100.0f;
- subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8]));
+ subCam = Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]));
subCam->focalActor = NULL;
subCam->eye.x = ((subCam->eye.x - this->subCamEye.x) * sp1C) + this->subCamEye.x;
@@ -594,15 +596,15 @@ void func_80AF2030(EnTest7* this, PlayState* play) {
subCam->fov = ((subCam->fov - this->subCamFov) * sp1C) + this->subCamFov;
if (this->unk_1E54 >= 100) {
- MREG(64) = 1;
- MREG(65) = 255;
- MREG(66) = 255;
- MREG(67) = 255;
- MREG(68) = 255;
- play->unk_18844 = 0;
+ R_PLAY_FILL_SCREEN_ON = true;
+ R_PLAY_FILL_SCREEN_R = 255;
+ R_PLAY_FILL_SCREEN_G = 255;
+ R_PLAY_FILL_SCREEN_B = 255;
+ R_PLAY_FILL_SCREEN_ALPHA = 255;
+ play->unk_18844 = false;
this->unk_144 &= ~4;
func_80AF082C(this, func_80AF21E8);
- func_80165690();
+ Play_DisableMotionBlur();
}
}
@@ -612,13 +614,13 @@ void func_80AF21E8(EnTest7* this, PlayState* play) {
Color_RGB8 sp24 = { 64, 0, 0 };
Color_RGB8 sp20 = { 220, 220, 255 };
- if (MREG(64) != 0) {
+ if (R_PLAY_FILL_SCREEN_ON) {
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_PL_WARP_WING_VANISH);
- MREG(64) = 0;
- MREG(65) = 0;
- MREG(66) = 0;
- MREG(67) = 0;
- MREG(68) = 0;
+ R_PLAY_FILL_SCREEN_ON = false;
+ R_PLAY_FILL_SCREEN_R = 0;
+ R_PLAY_FILL_SCREEN_G = 0;
+ R_PLAY_FILL_SCREEN_B = 0;
+ R_PLAY_FILL_SCREEN_ALPHA = 0;
}
sp1C = 1.0f - (sp2C / 10.0f);
@@ -667,16 +669,17 @@ void func_80AF2350(EnTest7* this, PlayState* play) {
gSaveContext.respawnFlag = -6;
} else {
play->nextEntrance = D_80AF343C[ENTEST7_GET(&this->actor) - ENTEST7_1C];
- if ((play->nextEntrance == ENTRANCE(SOUTHERN_SWAMP_POISONED, 10)) && (gSaveContext.save.weekEventReg[20] & 2)) {
+ if ((play->nextEntrance == ENTRANCE(SOUTHERN_SWAMP_POISONED, 10)) &&
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) {
play->nextEntrance = ENTRANCE(SOUTHERN_SWAMP_CLEARED, 10);
} else if ((play->nextEntrance == ENTRANCE(MOUNTAIN_VILLAGE_WINTER, 8)) &&
- (gSaveContext.save.weekEventReg[33] & 0x80)) {
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) {
play->nextEntrance = ENTRANCE(MOUNTAIN_VILLAGE_SPRING, 8);
}
}
play->transitionTrigger = TRANS_TRIGGER_START;
- play->transitionType = TRANS_TYPE_02;
+ play->transitionType = TRANS_TYPE_FADE_BLACK;
gSaveContext.seqId = (u8)NA_BGM_DISABLED;
gSaveContext.ambienceId = AMBIENCE_ID_DISABLED;
}
@@ -685,7 +688,8 @@ void func_80AF24D8(EnTest7* this, PlayState* play, f32 arg2) {
Vec3f sp3C;
Vec3f* pos;
Player* player = GET_PLAYER(play);
- Camera* subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8]));
+ Camera* subCam =
+ Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]));
pos = &player->actor.world.pos;
subCam->focalActor = NULL;
@@ -708,7 +712,7 @@ void func_80AF2654(EnTest7* this, PlayState* play, f32 arg2) {
Camera* subCam;
Vec3f sp30;
- subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8]));
+ subCam = Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]));
subCam->focalActor = NULL;
pos = &player->actor.world.pos;
@@ -759,10 +763,10 @@ void func_80AF2938(EnTest7* this, PlayState* play) {
this->unk_1E98 = player->actor.draw;
player->actor.draw = NULL;
- player->stateFlags2 |= 0x20000000;
+ player->stateFlags2 |= PLAYER_STATE2_20000000;
this->unk_144 |= 2;
this->unk_148.unk_04 = 30.0f;
- if (play->roomCtx.curRoom.unk3 != 1) {
+ if (play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_1) {
func_80AF082C(this, func_80AF2AE8);
} else {
func_80AF082C(this, func_80AF2EC8);
@@ -777,7 +781,8 @@ void func_80AF29C0(EnTest7* this, PlayState* play) {
s32 pad;
Player* player = GET_PLAYER(play);
Vec3f* pos = &player->actor.world.pos;
- Camera* subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8]));
+ Camera* subCam =
+ Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]));
subCam->at.x = ((D_80AF3454 * Math_SinS(D_80AF3450[0]) * Math_CosS(D_80AF3450[1]))) + pos->x;
subCam->at.y = (Math_SinS(D_80AF3450[1]) * D_80AF3454) + pos->y;
@@ -791,15 +796,15 @@ void func_80AF29C0(EnTest7* this, PlayState* play) {
void func_80AF2AE8(EnTest7* this, PlayState* play) {
Camera* subCam;
- if (!ActorCutscene_GetCanPlayNext(play->playerActorCsIds[8])) {
- ActorCutscene_SetIntentToPlay(play->playerActorCsIds[8]);
+ if (!CutsceneManager_IsNext(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])) {
+ CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]);
return;
}
- ActorCutscene_Start(play->playerActorCsIds[8], NULL);
+ CutsceneManager_Start(play->playerCsIds[PLAYER_CS_ID_SONG_WARP], NULL);
func_80AF082C(this, func_80AF2C48);
- subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8]));
+ subCam = Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]));
this->subCamEye = subCam->eye;
this->subCamAt = subCam->at;
@@ -810,7 +815,8 @@ void func_80AF2BAC(EnTest7* this, PlayState* play, Vec3f* arg2, f32 arg3) {
f32 x;
f32 y;
f32 z;
- Camera* subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8]));
+ Camera* subCam =
+ Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]));
subCam->focalActor = NULL;
x = ((subCam->at.x - arg2->x) * arg3) + arg2->x;
@@ -836,7 +842,7 @@ void func_80AF2C48(EnTest7* this, PlayState* play) {
this->actor.world.pos.y = ((this->actor.world.pos.y - this->actor.home.pos.y) * sp24) + this->actor.home.pos.y;
this->actor.world.pos.z = ((this->actor.world.pos.z - this->actor.home.pos.z) * sp24) + this->actor.home.pos.z;
- subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8]));
+ subCam = Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]));
func_80AF2BAC(this, play, &this->actor.home.pos, sp24);
subCam->at.x = this->actor.world.pos.x;
@@ -855,7 +861,7 @@ void func_80AF2DB4(EnTest7* this, PlayState* play) {
Player* player = GET_PLAYER(play);
Vec3f* pos = &player->actor.world.pos;
- subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8]));
+ subCam = Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]));
subCam->eye.x = (Math_SinS(-player->actor.shape.rot.y) * 200.0f * -0.83907f) + pos->x;
subCam->eye.y = pos->y + 108.8042f;
@@ -869,13 +875,13 @@ void func_80AF2DB4(EnTest7* this, PlayState* play) {
void func_80AF2EC8(EnTest7* this, PlayState* play) {
Camera* subCam;
- if (!ActorCutscene_GetCanPlayNext(play->playerActorCsIds[8])) {
- ActorCutscene_SetIntentToPlay(play->playerActorCsIds[8]);
+ if (!CutsceneManager_IsNext(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])) {
+ CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]);
} else {
- ActorCutscene_Start(play->playerActorCsIds[8], NULL);
+ CutsceneManager_Start(play->playerCsIds[PLAYER_CS_ID_SONG_WARP], NULL);
func_80AF082C(this, func_80AF2F98);
- subCam = Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(play->playerActorCsIds[8]));
+ subCam = Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]));
this->subCamEye = subCam->eye;
this->subCamAt = subCam->at;
this->unk_1E54 = 40;
@@ -911,7 +917,7 @@ void func_80AF2F98(EnTest7* this, PlayState* play) {
this->unk_148.unk_00 = this->unk_148.unk_04;
this->unk_148.unk_08 = ((this->unk_148.unk_04 * -0.29999998f) / 11.0f) + 0.7f;
this->unk_148.unk_0C = ((this->unk_148.unk_04 * -0.29999998f) / 11.0f) + 0.7f;
- player->stateFlags2 &= ~0x20000000;
+ player->stateFlags2 &= ~PLAYER_STATE2_20000000;
}
}
@@ -919,9 +925,9 @@ void func_80AF30F4(EnTest7* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (this->unk_1E54 > 90) {
- player->stateFlags1 &= ~0x20;
- player->stateFlags1 &= ~0x20000000;
- Actor_MarkForDeath(&this->actor);
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20000000;
+ Actor_Kill(&this->actor);
}
}
@@ -957,7 +963,7 @@ void EnTest7_Draw(Actor* thisx, PlayState* play) {
s32 sp40;
if (this->unk_144 & 1) {
- Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, ALIGN16(sizeof(Mtx) * this->unk_18CC.unk_18->unk_1));
+ Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, this->unk_18CC.unk_18->unk_1 * sizeof(Mtx));
if (mtx != NULL) {
func_8018450C(play, &this->unk_18CC, mtx, func_80AF31D0, NULL, &this->actor);
diff --git a/src/overlays/actors/ovl_En_Test7/z_en_test7.h b/src/overlays/actors/ovl_En_Test7/z_en_test7.h
index da6dec94b..30bf8e73c 100644
--- a/src/overlays/actors/ovl_En_Test7/z_en_test7.h
+++ b/src/overlays/actors/ovl_En_Test7/z_en_test7.h
@@ -62,6 +62,4 @@ typedef struct EnTest7 {
/* 0x1E98 */ EnTest7UnkDrawFunc unk_1E98;
} EnTest7; // size = 0x1E9C
-extern const ActorInit En_Test7_InitVars;
-
#endif // Z_EN_TEST7_H
diff --git a/src/overlays/actors/ovl_En_Tg/overlay.cfg b/src/overlays/actors/ovl_En_Tg/overlay.cfg
deleted file mode 100644
index 99ad048ba..000000000
--- a/src/overlays/actors/ovl_En_Tg/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Tg
-z_en_tg.c
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 f4c970ea8..ed048288e 100644
--- a/src/overlays/actors/ovl_En_Tg/z_en_tg.c
+++ b/src/overlays/actors/ovl_En_Tg/z_en_tg.c
@@ -21,7 +21,7 @@ void EnTg_UpdateHearts(PlayState* play, EnTgHeartEffect* effect, s32 numEffects)
void EnTg_DrawHearts(PlayState* play, EnTgHeartEffect* effect, s32 numEffects);
void EnTg_SpawnHeart(EnTg* this, EnTgHeartEffect* effect, Vec3f* heartStartPos, s32 numEffects);
-const ActorInit En_Tg_InitVars = {
+ActorInit En_Tg_InitVars = {
ACTOR_EN_TG,
ACTORCAT_NPC,
FLAGS,
@@ -162,7 +162,7 @@ void EnTg_Update(Actor* thisx, PlayState* play) {
EnTg* this = THIS;
this->actionFunc(this, play);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
EnTg_UpdateSkelAnime(this, play);
EnTg_UpdateHearts(play, this->effects, ARRAY_COUNT(this->effects));
EnTg_UpdateCollider(this, play);
@@ -259,7 +259,7 @@ void EnTg_DrawHearts(PlayState* play, EnTgHeartEffect* effect, s32 numEffects) {
OPEN_DISPS(play->state.gfxCtx);
- POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP);
+ POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP);
for (i = 0; i < numEffects; i++, effect++) {
diff --git a/src/overlays/actors/ovl_En_Tg/z_en_tg.h b/src/overlays/actors/ovl_En_Tg/z_en_tg.h
index 3cdcb57f1..ca67624c1 100644
--- a/src/overlays/actors/ovl_En_Tg/z_en_tg.h
+++ b/src/overlays/actors/ovl_En_Tg/z_en_tg.h
@@ -31,6 +31,4 @@ typedef struct EnTg {
/* 0x2F0 */ EnTgHeartEffect effects[10];
} EnTg; // size = 0x548
-extern const ActorInit En_Tg_InitVars;
-
#endif // Z_EN_TG_H
diff --git a/src/overlays/actors/ovl_En_Thiefbird/overlay.cfg b/src/overlays/actors/ovl_En_Thiefbird/overlay.cfg
deleted file mode 100644
index f469c156a..000000000
--- a/src/overlays/actors/ovl_En_Thiefbird/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Thiefbird
-z_en_thiefbird.c
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 fc82ed262..d472077ec 100644
--- a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c
+++ b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c
@@ -4,6 +4,7 @@
* Description: Takkuri
*/
+#include "prevent_bss_reordering.h"
#include "z_en_thiefbird.h"
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_200 | ACTOR_FLAG_1000 | ACTOR_FLAG_80000000)
@@ -32,7 +33,7 @@ void func_80C126D8(EnThiefbird* this, PlayState* play);
void func_80C12744(EnThiefbird* this);
void func_80C127F4(EnThiefbird* this, PlayState* play);
-const ActorInit En_Thiefbird_InitVars = {
+ActorInit En_Thiefbird_InitVars = {
ACTOR_EN_THIEFBIRD,
ACTORCAT_ENEMY,
FLAGS,
@@ -130,8 +131,9 @@ static DamageTable sDamageTable = {
/* Powder Keg */ DMG_ENTRY(1, 0x0),
};
-static s16 D_80C13664[] = { ITEM00_ARROWS_10, ITEM00_BOMBS_B, ITEM00_RUPEE_GREEN,
- ITEM00_RUPEE_BLUE, ITEM00_RUPEE_RED, ITEM00_RUPEE_PURPLE };
+static s16 D_80C13664[] = {
+ ITEM00_ARROWS_10, ITEM00_BOMBS_B, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_RED, ITEM00_RUPEE_PURPLE,
+};
static InitChainEntry sInitChain[] = {
ICHAIN_F32(uncullZoneForward, 3000, ICHAIN_CONTINUE),
@@ -140,8 +142,8 @@ static InitChainEntry sInitChain[] = {
ICHAIN_F32(targetArrowOffset, 500, ICHAIN_STOP),
};
-static Vec3f D_80C13920;
-static s32 D_80C1392C;
+Vec3f D_80C13920;
+s32 D_80C1392C;
void EnThiefbird_Init(Actor* thisx, PlayState* play) {
EnThiefbird* this = THIS;
@@ -166,12 +168,16 @@ void EnThiefbird_Init(Actor* thisx, PlayState* play) {
if (this->actor.params == 1) {
D_80C1392C = 1;
Math_Vec3f_Copy(&D_80C13920, &this->actor.world.pos);
- Actor_MarkForDeath(&this->actor);
- } else if (STOLEN_ITEM_1 != STOLEN_ITEM_NONE) {
- Actor_MarkForDeath(&this->actor);
- } else {
- func_80C11538(this);
+ Actor_Kill(&this->actor);
+ return;
}
+
+ if (STOLEN_ITEM_1 != STOLEN_ITEM_NONE) {
+ Actor_Kill(&this->actor);
+ return;
+ }
+
+ func_80C11538(this);
}
void EnThiefbird_Destroy(Actor* thisx, PlayState* play) {
@@ -205,7 +211,11 @@ void func_80C10984(EnThiefbird* this, s32 arg1) {
}
s32 func_80C10B0C(EnThiefbird* this, PlayState* play) {
- static Gfx* D_80C13680[] = { gTakkuriStolenKokiriSwordDL, gTakkuriStolenRazorSwordDL, gTakkuriStolenGildedSwordDL };
+ static Gfx* D_80C13680[] = {
+ gTakkuriStolenKokiriSwordDL,
+ gTakkuriStolenRazorSwordDL,
+ gTakkuriStolenGildedSwordDL,
+ };
s32 isItemFound = false;
s32 phi_a3 = 0;
s32 slotId = SLOT_BOTTLE_1;
@@ -213,10 +223,10 @@ s32 func_80C10B0C(EnThiefbird* this, PlayState* play) {
s16 itemId2 = 0;
for (; slotId < 24; slotId++) {
- if ((gSaveContext.save.inventory.items[slotId] >= ITEM_BOTTLE) &&
- (gSaveContext.save.inventory.items[slotId] <= ITEM_POTION_BLUE)) {
+ if ((gSaveContext.save.saveInfo.inventory.items[slotId] >= ITEM_BOTTLE) &&
+ (gSaveContext.save.saveInfo.inventory.items[slotId] <= ITEM_POTION_BLUE)) {
isItemFound = true;
- itemId2 = gSaveContext.save.inventory.items[slotId];
+ itemId2 = gSaveContext.save.saveInfo.inventory.items[slotId];
break;
}
}
@@ -333,7 +343,7 @@ s32 func_80C10E98(PlayState* play) {
spAC = 0;
}
- sp98 = (gSaveContext.save.playerData.rupees / 4) * 3;
+ sp98 = (gSaveContext.save.saveInfo.playerData.rupees / 4) * 3;
phi_s0_2 = sp98 / 50;
sp5C = (-spB0 - spAC);
sp5C += 8;
@@ -393,7 +403,7 @@ s32 func_80C10E98(PlayState* play) {
if (temp_s1_5 != NULL) {
temp_s1_5->velocity.y = Rand_ZeroFloat(3.0f) + 6.0f;
- temp_s1_5->speedXZ = Rand_ZeroFloat(3.0f) + 3.0f;
+ temp_s1_5->speed = Rand_ZeroFloat(3.0f) + 3.0f;
temp_s1_5->world.rot.y = phi_s3;
}
phi_s3 += (s16)(0x10000 / (spB0 + spAC + phi_s0_2 + spA0 + phi_s2 + spA8));
@@ -420,7 +430,7 @@ void func_80C11338(EnThiefbird* this, PlayState* play) {
item = (EnItem00*)SubS_FindActor(play, &item->actor, ACTORCAT_MISC, ACTOR_EN_ITEM00);
if (item != NULL) {
if (item->unk152 > 0) {
- if (Actor_XZDistanceBetweenActors(&player->actor, &item->actor) > 10.0f) {
+ if (Actor_WorldDistXZToActor(&player->actor, &item->actor) > 10.0f) {
for (i = 0; i < ARRAY_COUNT(D_80C13664); i++) {
if (item->actor.params == D_80C13664[i]) {
break;
@@ -428,7 +438,7 @@ void func_80C11338(EnThiefbird* this, PlayState* play) {
}
if (i != ARRAY_COUNT(D_80C13664)) {
- temp_f0 = Actor_DistanceBetweenActors(&this->actor, &item->actor);
+ temp_f0 = Actor_WorldDistXYZToActor(&this->actor, &item->actor);
if (temp_f0 < phi_f20) {
this->unk_3EC = item;
phi_f20 = temp_f0;
@@ -447,7 +457,7 @@ void func_80C11454(EnThiefbird* this) {
this->drawDmgEffFrozenSteamScale = 0.75f;
this->drawDmgEffAlpha = 1.0f;
this->actor.flags &= ~ACTOR_FLAG_200;
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 80);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 80);
}
void func_80C114C0(EnThiefbird* this, PlayState* play) {
@@ -472,29 +482,29 @@ void func_80C11590(EnThiefbird* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
sp38 = Animation_OnFrame(&this->skelAnime, 0.0f);
- this->actor.speedXZ = (Rand_ZeroOne() * 1.5f) + 3.0f;
+ this->actor.speed = (Rand_ZeroOne() * 1.5f) + 3.0f;
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
this->unk_192 = this->actor.wallYaw;
} else {
- if (Actor_XZDistanceToPoint(&this->actor, &this->actor.home.pos) > 300.0f) {
- this->unk_192 = Actor_YawToPoint(&this->actor, &this->actor.home.pos);
+ if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > 300.0f) {
+ this->unk_192 = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
}
}
if (!Math_SmoothStepToS(&this->actor.shape.rot.y, this->unk_192, 5, 0x300, 0x10) && (sp38 != 0) &&
(Rand_ZeroOne() < 0.1f)) {
- s16 yaw = Actor_YawToPoint(&this->actor, &this->actor.home.pos) - this->actor.shape.rot.y;
+ s16 yaw = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos) - this->actor.shape.rot.y;
if (yaw > 0) {
this->unk_192 += Rand_S16Offset(4096, 4096);
} else {
this->unk_192 -= Rand_S16Offset(4096, 4096);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_THIEFBIRD_VOICE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_THIEFBIRD_VOICE);
}
- if ((this->actor.depthInWater > -40.0f) || (this->actor.bgCheckFlags & 1)) {
+ if ((this->actor.depthInWater > -40.0f) || (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
this->unk_190 = -4096;
} else if (this->actor.world.pos.y < (this->actor.home.pos.y - 75.0f)) {
this->unk_190 = -Rand_S16Offset(2048, 2048);
@@ -517,8 +527,9 @@ void func_80C11590(EnThiefbird* this, PlayState* play) {
this->unk_18E--;
}
- if ((this->unk_18E == 0) && (this->actor.xzDistToPlayer < 300.0f) && !(player->stateFlags1 & 0x800000) &&
- (Player_GetMask(play) != PLAYER_MASK_STONE) && (this->actor.depthInWater < -40.0f)) {
+ if ((this->unk_18E == 0) && (this->actor.xzDistToPlayer < 300.0f) &&
+ !(player->stateFlags1 & PLAYER_STATE1_800000) && (Player_GetMask(play) != PLAYER_MASK_STONE) &&
+ (this->actor.depthInWater < -40.0f)) {
func_80C118E4(this);
}
}
@@ -527,7 +538,7 @@ void func_80C118E4(EnThiefbird* this) {
Animation_MorphToLoop(&this->skelAnime, &gTakkuriAttackAnim, -10.0f);
this->unk_18E = 300;
this->actionFunc = func_80C1193C;
- this->actor.speedXZ = 5.0f;
+ this->actor.speed = 5.0f;
}
void func_80C1193C(EnThiefbird* this, PlayState* play) {
@@ -536,17 +547,17 @@ void func_80C1193C(EnThiefbird* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (Animation_OnFrame(&this->skelAnime, 1.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KAICHO_FLUTTER);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KAICHO_FLUTTER);
}
if (this->unk_18E != 0) {
this->unk_18E--;
}
- pitch = Actor_PitchBetweenActors(&this->actor, &player->actor);
+ pitch = Actor_WorldPitchTowardActor(&this->actor, &player->actor);
pitch = CLAMP(pitch, -0x2800, 0x2800);
Math_SmoothStepToS(&this->actor.shape.rot.x, pitch, 4, 0x800, 0x80);
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.wallYaw, 6, 0x1000, 0x100);
} else if (Actor_IsFacingPlayer(&this->actor, 0x3C00) || (this->actor.xzDistToPlayer > 120.0f)) {
s16 rot = BINANG_ROT180(this->actor.yawTowardsPlayer - player->actor.shape.rot.y);
@@ -561,12 +572,12 @@ void func_80C1193C(EnThiefbird* this, PlayState* play) {
Math_SmoothStepToS(&this->actor.shape.rot.y, rot, 4, 0x1000, 0x100);
}
- if ((this->unk_18E == 0) || (player->stateFlags1 & 0x800000) || (Player_GetMask(play) == PLAYER_MASK_STONE) ||
- (this->collider.base.atFlags & AT_HIT) || (this->actor.bgCheckFlags & 1) ||
- (this->actor.depthInWater > -40.0f)) {
+ if ((this->unk_18E == 0) || (player->stateFlags1 & PLAYER_STATE1_800000) ||
+ (Player_GetMask(play) == PLAYER_MASK_STONE) || (this->collider.base.atFlags & AT_HIT) ||
+ (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->actor.depthInWater > -40.0f)) {
if (this->collider.base.atFlags & AT_HIT) {
this->collider.base.atFlags &= ~AT_HIT;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_THIEFBIRD_VOICE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_THIEFBIRD_VOICE);
if (!(this->collider.base.atFlags & AT_BOUNCED)) {
if ((D_80C1392C != 0) && CUR_UPG_VALUE(UPG_QUIVER) &&
((STOLEN_ITEM_1 == STOLEN_ITEM_NONE) || (STOLEN_ITEM_2 == STOLEN_ITEM_NONE)) &&
@@ -588,15 +599,15 @@ void func_80C1193C(EnThiefbird* this, PlayState* play) {
}
void func_80C11C60(EnThiefbird* this) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.velocity.y = 0.0f;
Animation_PlayOnce(&this->skelAnime, &gTakkuriDeathAnim);
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
this->actor.shape.rot.x = 0;
this->unk_18E = 40;
this->actor.velocity.y = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_THIEFBIRD_DEAD);
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_THIEFBIRD_DEAD);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 40);
this->collider.base.acFlags &= ~AC_ON;
this->actor.flags |= ACTOR_FLAG_10;
this->unk_192 = 0x1C00;
@@ -612,7 +623,7 @@ void func_80C11D14(EnThiefbird* this, PlayState* play) {
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
if (this->unk_18E < 38) {
func_80C114C0(this, play);
- this->actor.speedXZ = 4.0f;
+ this->actor.speed = 4.0f;
} else {
return;
}
@@ -643,7 +654,7 @@ void func_80C11DF0(EnThiefbird* this, PlayState* play) {
this->actor.shape.rot.y += this->unk_192;
}
- if ((this->actor.bgCheckFlags & 1) || (this->actor.floorHeight == BGCHECK_Y_MIN)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->actor.floorHeight == BGCHECK_Y_MIN)) {
for (i = 0; i < ARRAY_COUNT(this->limbPos); i++) {
func_800B3030(play, &this->limbPos[i], &gZeroVec3f, &gZeroVec3f, 0x8C, 0, 0);
}
@@ -657,7 +668,7 @@ void func_80C11DF0(EnThiefbird* this, PlayState* play) {
}
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -665,20 +676,20 @@ void func_80C11F6C(EnThiefbird* this, PlayState* play) {
Animation_MorphToLoop(&this->skelAnime, &gTakkuriFlyWithItemAnim, -4.0f);
func_80C10984(this, 15);
if (this->actor.colChkInfo.damageEffect != 3) {
- this->actor.speedXZ = 4.0f;
+ this->actor.speed = 4.0f;
} else {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
if (this->actor.colChkInfo.damageEffect == 5) {
- Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
} else if (this->actor.colChkInfo.damageEffect == 1) {
- Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
} else {
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 40);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_THIEFBIRD_DAMAGE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_THIEFBIRD_DAMAGE);
}
this->collider.base.acFlags &= ~AC_ON;
@@ -686,7 +697,7 @@ void func_80C11F6C(EnThiefbird* this, PlayState* play) {
this->unk_190 = -0x1000;
this->unk_192 = BINANG_ROT180(this->actor.yawTowardsPlayer);
} else {
- this->unk_190 = Actor_PitchToPoint(&this->actor, &D_80C13920);
+ this->unk_190 = Actor_WorldPitchTowardPoint(&this->actor, &D_80C13920);
}
this->unk_18E = 40;
@@ -714,20 +725,20 @@ void func_80C1215C(EnThiefbird* this, PlayState* play) {
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
if (this->unk_18E < 38) {
func_80C114C0(this, play);
- this->actor.speedXZ = 4.0f;
+ this->actor.speed = 4.0f;
} else {
return;
}
}
SkelAnime_Update(&this->skelAnime);
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
this->unk_192 = this->actor.wallYaw;
} else if (this->unk_3E8 == 0) {
this->unk_192 = BINANG_ROT180(this->actor.yawTowardsPlayer);
} else {
- this->unk_192 = Actor_YawToPoint(&this->actor, &D_80C13920);
- this->unk_190 = Actor_PitchToPoint(&this->actor, &D_80C13920);
+ this->unk_192 = Actor_WorldYawTowardPoint(&this->actor, &D_80C13920);
+ this->unk_190 = Actor_WorldPitchTowardPoint(&this->actor, &D_80C13920);
}
Math_SmoothStepToS(&this->actor.shape.rot.y, this->unk_192, 6, 0x1000, 0x100);
@@ -760,7 +771,7 @@ void func_80C12378(EnThiefbird* this, PlayState* play) {
}
SkelAnime_Update(&this->skelAnime);
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
this->unk_192 = this->actor.wallYaw;
} else {
this->unk_192 = BINANG_ROT180(this->actor.yawTowardsPlayer);
@@ -779,7 +790,7 @@ void func_80C1242C(EnThiefbird* this) {
this->actor.flags |= ACTOR_FLAG_10;
this->collider.base.acFlags |= AC_ON;
this->actionFunc = func_80C124B0;
- this->actor.speedXZ = 12.0f;
+ this->actor.speed = 12.0f;
}
void func_80C124B0(EnThiefbird* this, PlayState* play) {
@@ -787,17 +798,18 @@ void func_80C124B0(EnThiefbird* this, PlayState* play) {
s16 temp_v1;
SkelAnime_Update(&this->skelAnime);
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
this->unk_192 = this->actor.wallYaw;
} else {
- this->unk_192 = Actor_YawToPoint(&this->actor, &D_80C13920);
+ this->unk_192 = Actor_WorldYawTowardPoint(&this->actor, &D_80C13920);
}
Math_SmoothStepToS(&this->actor.shape.rot.y, this->unk_192, 6, 0x1000, 0x100);
- Math_SmoothStepToS(&this->actor.shape.rot.x, Actor_PitchToPoint(&this->actor, &D_80C13920), 6, 0x1000, 0x100);
+ Math_SmoothStepToS(&this->actor.shape.rot.x, Actor_WorldPitchTowardPoint(&this->actor, &D_80C13920), 6, 0x1000,
+ 0x100);
temp_v0 = func_800BC270(play, &this->actor, 80.0f, 0x138B0);
if (temp_v0 != NULL) {
- temp_v1 = temp_v0->world.rot.x - Actor_PitchToPoint(temp_v0, &this->actor.focus.pos);
+ temp_v1 = temp_v0->world.rot.x - Actor_WorldPitchTowardPoint(temp_v0, &this->actor.focus.pos);
if (ABS_ALT(temp_v1) < 0x1800) {
if (temp_v1 > 0) {
this->unk_3E0 = 25.0f;
@@ -815,7 +827,7 @@ void func_80C124B0(EnThiefbird* this, PlayState* play) {
this->unk_3E0 * Math_SinS(this->actor.shape.rot.x) * Math_CosS(this->actor.shape.rot.y);
}
- if (Actor_DistanceToPoint(&this->actor, &D_80C13920) < 1000.0f) {
+ if (Actor_WorldDistXYZToPoint(&this->actor, &D_80C13920) < 1000.0f) {
func_80C126A8(this);
}
}
@@ -830,7 +842,7 @@ void func_80C126D8(EnThiefbird* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
Math_ApproachS(&this->actor.shape.rot.x, 0x3000, 6, 0x1000);
if (this->actor.playerHeightRel > 100.0f) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -841,7 +853,7 @@ void func_80C12744(EnThiefbird* this) {
this->collider.base.acFlags |= AC_ON;
this->actor.flags |= ACTOR_FLAG_10;
this->actionFunc = func_80C127F4;
- this->actor.speedXZ = 4.0f;
+ this->actor.speed = 4.0f;
this->skelAnime.playSpeed = 3.0f;
}
@@ -852,7 +864,7 @@ void func_80C127F4(EnThiefbird* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if ((this->unk_3EC != NULL) && ((this->unk_3EC->actor.update == NULL) || (this->unk_3EC->unk152 == 0) ||
- (Actor_XZDistanceBetweenActors(&player->actor, &this->unk_3EC->actor) <= 10.0f))) {
+ (Actor_WorldDistXZToActor(&player->actor, &this->unk_3EC->actor) <= 10.0f))) {
this->unk_3EC = NULL;
}
@@ -869,19 +881,19 @@ void func_80C127F4(EnThiefbird* this, PlayState* play) {
}
if (this->unk_3EC != NULL) {
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.wallYaw, 3, 0x2000, 0x100);
} else {
- Math_SmoothStepToS(&this->actor.shape.rot.y, Actor_YawBetweenActors(&this->actor, &this->unk_3EC->actor), 3,
- 0x2000, 0x100);
+ Math_SmoothStepToS(&this->actor.shape.rot.y, Actor_WorldYawTowardActor(&this->actor, &this->unk_3EC->actor),
+ 3, 0x2000, 0x100);
}
temp_v0 = Math_Vec3f_Pitch(&this->limbPos[9], &this->unk_3EC->actor.world.pos);
temp_v0 = CLAMP(temp_v0, -0x3000, 0x3000);
Math_SmoothStepToS(&this->actor.shape.rot.x, temp_v0, 4, 0x800, 0x80);
- temp_f0 = Actor_DistanceToPoint(&this->unk_3EC->actor, &this->limbPos[9]);
- this->actor.speedXZ = (0.02f * temp_f0) + 2.0f;
- this->actor.speedXZ = CLAMP_MAX(this->actor.speedXZ, 4.0f);
- if ((this->unk_3EC->actor.speedXZ <= 0.0f) && (temp_f0 < 40.0f)) {
+ temp_f0 = Actor_WorldDistXYZToPoint(&this->unk_3EC->actor, &this->limbPos[9]);
+ this->actor.speed = (0.02f * temp_f0) + 2.0f;
+ this->actor.speed = CLAMP_MAX(this->actor.speed, 4.0f);
+ if ((this->unk_3EC->actor.speed <= 0.0f) && (temp_f0 < 40.0f)) {
s32 i;
this->unk_3EC->unk152 = 0;
@@ -896,8 +908,8 @@ void func_80C127F4(EnThiefbird* this, PlayState* play) {
this->unk_190 = -0x3800;
}
} else {
- this->actor.speedXZ = 4.0f;
- if (this->actor.bgCheckFlags & 8) {
+ this->actor.speed = 4.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.wallYaw, 6, 0x1000, 0x100);
} else {
Math_SmoothStepToS(&this->actor.shape.rot.y, BINANG_ROT180(this->actor.yawTowardsPlayer), 6, 0x1000, 0x100);
@@ -1008,7 +1020,8 @@ void EnThiefbird_Update(Actor* thisx, PlayState* play2) {
Actor_MoveWithGravity(&this->actor);
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 25.0f, 25.0f, 50.0f, 7);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 25.0f, 25.0f, 50.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4);
if (this->actionFunc == func_80C1193C) {
CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
}
@@ -1031,7 +1044,7 @@ void EnThiefbird_Update(Actor* thisx, PlayState* play2) {
func_80C12D00(this);
if (((this->skelAnime.animation == &gTakkuriFlyAnim) && Animation_OnFrame(&this->skelAnime, 13.0f)) ||
((this->skelAnime.animation == &gTakkuriFlyWithItemAnim) && Animation_OnFrame(&this->skelAnime, 1.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KAICHO_FLUTTER);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KAICHO_FLUTTER);
}
}
diff --git a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.h b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.h
index 1bbee73e0..c40555299 100644
--- a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.h
+++ b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.h
@@ -43,6 +43,4 @@ typedef struct EnThiefbird {
/* 0x3F0 */ EnThiefbirdUnkStruct unk_3F0[40];
} EnThiefbird; // size = 0x990
-extern const ActorInit En_Thiefbird_InitVars;
-
#endif // Z_EN_THIEFBIRD_H
diff --git a/src/overlays/actors/ovl_En_Time_Tag/overlay.cfg b/src/overlays/actors/ovl_En_Time_Tag/overlay.cfg
deleted file mode 100644
index 9759bee86..000000000
--- a/src/overlays/actors/ovl_En_Time_Tag/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Time_Tag
-z_en_time_tag.c
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 04e44bb16..10f3ea529 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
@@ -1,7 +1,11 @@
/*
* File: z_en_time_tag.c
* Overlay: ovl_En_Time_Tag
- * Description:
+ * Description: Various text-, time- and event-based triggers. There are 4 variations of this actor.
+ * - Song of Soaring engraving
+ * - Clocktown Rooftop Oath to Order event
+ * - Mikau's and Lulu's diary
+ * - Kick out of scene event after a certain time
*/
#include "z_en_time_tag.h"
@@ -15,22 +19,25 @@ void EnTimeTag_Init(Actor* thisx, PlayState* play);
void EnTimeTag_Destroy(Actor* thisx, PlayState* play);
void EnTimeTag_Update(Actor* thisx, PlayState* play);
-void func_80AC9FD4(EnTimeTag* this, PlayState* play);
-void func_80AC9FE4(EnTimeTag* this, PlayState* play);
-void func_80ACA0A8(EnTimeTag* this, PlayState* play);
-void func_80ACA12C(EnTimeTag* this, PlayState* play);
-void func_80ACA184(EnTimeTag* this, PlayState* play);
-void func_80ACA268(EnTimeTag* this, PlayState* play);
-void func_80ACA348(EnTimeTag* this, PlayState* play);
-void func_80ACA3C0(EnTimeTag* this, PlayState* play);
-void func_80ACA418(EnTimeTag* this, PlayState* play);
-void func_80ACA5F8(EnTimeTag* this, PlayState* play);
-void func_80ACA714(EnTimeTag* this, PlayState* play);
-void func_80ACA724(EnTimeTag* this, PlayState* play);
-void func_80ACA7C4(EnTimeTag* this, PlayState* play);
-void func_80ACA840(EnTimeTag* this, PlayState* play);
+void EnTimeTag_RooftopOath_DoNothing(EnTimeTag* this, PlayState* play);
+void EnTimeTag_RooftopOath_Cutscene(EnTimeTag* this, PlayState* play);
+void EnTimeTag_RooftopOath_Wait(EnTimeTag* this, PlayState* play);
-const ActorInit En_Time_Tag_InitVars = {
+void EnTimeTag_SoaringEngraving_GetSong(EnTimeTag* this, PlayState* play);
+void EnTimeTag_SoaringEngraving_StartCutscene(EnTimeTag* this, PlayState* play);
+void EnTimeTag_SoaringEngraving_Wait(EnTimeTag* this, PlayState* play);
+
+void EnTimeTag_Diary_AfterOcarina(EnTimeTag* this, PlayState* play);
+void EnTimeTag_Diary_TeachEvanSongSnippets(EnTimeTag* this, PlayState* play);
+void EnTimeTag_Diary_Cutscene(EnTimeTag* this, PlayState* play);
+void EnTimeTag_Diary_Wait(EnTimeTag* this, PlayState* play);
+
+void EnTimeTag_KickOut_DoNothing(EnTimeTag* this, PlayState* play);
+void EnTimeTag_KickOut_Transition(EnTimeTag* this, PlayState* play);
+void EnTimeTag_KickOut_WaitForTrigger(EnTimeTag* this, PlayState* play);
+void EnTimeTag_KickOut_WaitForTime(EnTimeTag* this, PlayState* play);
+
+ActorInit En_Time_Tag_InitVars = {
ACTOR_EN_TIME_TAG,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -45,37 +52,41 @@ const ActorInit En_Time_Tag_InitVars = {
void EnTimeTag_Init(Actor* thisx, PlayState* play) {
EnTimeTag* this = THIS;
- this->actionFunc = func_80ACA840;
+ this->actionFunc = EnTimeTag_KickOut_WaitForTime;
- switch (ENTIMETAG_GET_E000(&this->actor)) {
- case 4:
- if ((gSaveContext.save.weekEventReg[8] & 0x40) || (CURRENT_DAY != 3)) {
- Actor_MarkForDeath(&this->actor);
+ switch (TIMETAG_GET_TYPE(&this->actor)) {
+ case TIMETAG_KICKOUT_FINAL_HOURS:
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40) || (CURRENT_DAY != 3)) {
+ Actor_Kill(&this->actor);
return;
}
- this->actor.home.rot.x = 0;
- this->actor.home.rot.y = 0;
+ // Overwrite kickout time to midnight
+ TIMETAG_KICKOUT_HOUR(&this->actor) = 0;
+ TIMETAG_KICKOUT_MINUTE(&this->actor) = 0;
break;
- case 2:
- this->actionFunc = func_80ACA0A8;
+ case TIMETAG_ROOFTOP_OATH:
+ this->actionFunc = EnTimeTag_RooftopOath_Wait;
this->actor.flags |= ACTOR_FLAG_2000000;
break;
- case 1:
- this->actionFunc = func_80ACA268;
+ case TIMETAG_SOARING_ENGRAVING:
+ this->actionFunc = EnTimeTag_SoaringEngraving_Wait;
this->actor.flags |= ACTOR_FLAG_2000000;
if (CHECK_QUEST_ITEM(QUEST_SONG_SOARING)) {
this->actor.textId = 0xC02;
- return;
+ } else {
+ this->actor.textId = 0;
}
- this->actor.textId = 0;
break;
- case 3:
- this->actionFunc = func_80ACA5F8;
+ case TIMETAG_DIARY:
+ this->actionFunc = EnTimeTag_Diary_Wait;
this->actor.textId = 0;
- this->actor.home.rot.x = 0;
+ TIMETAG_DIARY_TIMER(&this->actor) = 0;
+ break;
+
+ default:
break;
}
}
@@ -83,222 +94,249 @@ void EnTimeTag_Init(Actor* thisx, PlayState* play) {
void EnTimeTag_Destroy(Actor* thisx, PlayState* play) {
}
-void func_80AC9FD4(EnTimeTag* this, PlayState* play) {
+void EnTimeTag_RooftopOath_DoNothing(EnTimeTag* this, PlayState* play) {
}
-void func_80AC9FE4(EnTimeTag* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
- this->actionFunc = func_80AC9FD4;
+void EnTimeTag_RooftopOath_Cutscene(EnTimeTag* this, PlayState* play) {
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
+
+ this->actionFunc = EnTimeTag_RooftopOath_DoNothing;
gSaveContext.timerStates[TIMER_ID_MOON_CRASH] = TIMER_STATE_OFF;
- if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOWLA) && CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT) &&
+
+ if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA) && CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT) &&
CHECK_QUEST_ITEM(QUEST_REMAINS_GYORG) && CHECK_QUEST_ITEM(QUEST_REMAINS_TWINMOLD)) {
- gSaveContext.save.weekEventReg[25] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_25_02);
}
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
-void func_80ACA0A8(EnTimeTag* this, PlayState* play) {
+void EnTimeTag_RooftopOath_Wait(EnTimeTag* this, PlayState* play) {
EnTimeTag* this2 = this;
if ((play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_OATH)) {
- if (this->actor.cutscene != -1) {
- this->actionFunc = func_80AC9FE4;
- ActorCutscene_SetIntentToPlay(this2->actor.cutscene);
+ if (this->actor.csId != CS_ID_NONE) {
+ this->actionFunc = EnTimeTag_RooftopOath_Cutscene;
+ CutsceneManager_Queue(this2->actor.csId);
gSaveContext.timerStates[TIMER_ID_MOON_CRASH] = TIMER_STATE_OFF;
}
play->msgCtx.ocarinaMode = 4;
}
}
-void func_80ACA12C(EnTimeTag* this, PlayState* play) {
- if (ActorCutscene_GetCurrentIndex() != this->actor.cutscene) {
- this->actionFunc = func_80ACA268;
+void EnTimeTag_SoaringEngraving_GetSong(EnTimeTag* this, PlayState* play) {
+ if (CutsceneManager_GetCurrentCsId() != this->actor.csId) {
+ this->actionFunc = EnTimeTag_SoaringEngraving_Wait;
this->actor.textId = 0xC02;
Item_Give(play, ITEM_SONG_SOARING);
}
}
-void func_80ACA184(EnTimeTag* this, PlayState* play) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
- } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_Start(this->actor.cutscene, &this->actor);
- this->actionFunc = func_80ACA12C;
+void EnTimeTag_SoaringEngraving_StartCutscene(EnTimeTag* this, PlayState* play) {
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->actor.csId);
+ } else if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_Start(this->actor.csId, &this->actor);
+ this->actionFunc = EnTimeTag_SoaringEngraving_GetSong;
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
-void func_80ACA208(EnTimeTag* this, PlayState* play) {
+void EnTimeTag_SoaringEngraving_SubsequentInteraction(EnTimeTag* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
- this->actionFunc = func_80ACA268;
+ Message_CloseTextbox(play);
+ this->actionFunc = EnTimeTag_SoaringEngraving_Wait;
}
}
-void func_80ACA268(EnTimeTag* this, PlayState* play) {
+void EnTimeTag_SoaringEngraving_Wait(EnTimeTag* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
if (this->actor.textId == 0) {
- this->actionFunc = func_80ACA184;
+ this->actionFunc = EnTimeTag_SoaringEngraving_StartCutscene;
} else {
- this->actionFunc = func_80ACA208;
+ this->actionFunc = EnTimeTag_SoaringEngraving_SubsequentInteraction;
}
} else if ((this->actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->actor, 0x3000, play) &&
- (Flags_GetSwitch(play, ENTIMETAG_GET_SWITCHFLAG(&this->actor)) ||
+ (Flags_GetSwitch(play, TIMETAG_SOARING_GET_SWITCHFLAG(&this->actor)) ||
CHECK_QUEST_ITEM(QUEST_SONG_SOARING))) {
this->actor.flags |= ACTOR_FLAG_1;
func_800B8614(&this->actor, play, 110.0f);
}
}
-void func_80ACA348(EnTimeTag* this, PlayState* play) {
- if (this->actor.home.rot.x > 0) {
- this->actor.home.rot.x--;
+void EnTimeTag_Diary_AfterOcarina(EnTimeTag* this, PlayState* play) {
+ if (TIMETAG_DIARY_TIMER(&this->actor) > 0) {
+ TIMETAG_DIARY_TIMER(&this->actor)--;
return;
}
- if (this->actor.home.rot.z != 0) {
- func_80151938(play, 0x1230);
+ if (TIMETAG_DIARY_SONG(&this->actor) != TIMETAG_DIARY_SONG_EVAN_PART1) {
+ // TIMETAG_DIARY_SONG_EVAN_PART2
+ Message_ContinueTextbox(play, 0x1230);
} else {
- func_80151938(play, 0x122D);
+ // TIMETAG_DIARY_SONG_EVAN_PART1
+ Message_ContinueTextbox(play, 0x122D);
}
- this->actionFunc = func_80ACA418;
+ this->actionFunc = EnTimeTag_Diary_Cutscene;
}
-void func_80ACA3C0(EnTimeTag* this, PlayState* play) {
- if ((play->msgCtx.unk11F00->state == 0) && (play->msgCtx.msgMode == 0x1B)) {
- this->actor.home.rot.x = 5;
- this->actionFunc = func_80ACA348;
+void EnTimeTag_Diary_TeachEvanSongSnippets(EnTimeTag* this, PlayState* play) {
+ if ((play->msgCtx.ocarinaStaff->state == 0) && (play->msgCtx.msgMode == 0x1B)) {
+ TIMETAG_DIARY_TIMER(&this->actor) = 5;
+ this->actionFunc = EnTimeTag_Diary_AfterOcarina;
play->msgCtx.msgLength = 0;
play->msgCtx.msgMode = 0;
}
}
-void func_80ACA418(EnTimeTag* this, PlayState* play) {
+void EnTimeTag_Diary_Cutscene(EnTimeTag* this, PlayState* play) {
switch (Message_GetState(&play->msgCtx)) {
case TEXT_STATE_5:
if (Message_ShouldAdvance(play)) {
switch (play->msgCtx.currentTextId) {
- case 0x101C:
- case 0x101D:
- case 0x101E:
- case 0x122D:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ case 0x101C: // Lulu diary part 1
+ case 0x101D: // Lulu diary part 2
+ case 0x101E: // Lulu diary part 3
+ case 0x122D: // Mikau diary part 2
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
- case 0x101F:
- case 0x122A:
- case 0x1230:
- func_801477B4(play);
- this->actionFunc = func_80ACA5F8;
- if (ActorCutscene_GetCurrentIndex() == this->actor.cutscene) {
- ActorCutscene_Stop(this->actor.cutscene);
+ case 0x101F: // Lulu diary part 4
+ case 0x122A: // Can not read Zora script
+ case 0x1230: // Mikau diary part 4
+ Message_CloseTextbox(play);
+ this->actionFunc = EnTimeTag_Diary_Wait;
+ if (CutsceneManager_GetCurrentCsId() == this->actor.csId) {
+ CutsceneManager_Stop(this->actor.csId);
}
break;
- case 0x122B:
+ case 0x122B: // Mikau diary part 1
func_80152434(play, 0x3F);
- this->actionFunc = func_80ACA3C0;
- this->actor.home.rot.z = 0;
+ this->actionFunc = EnTimeTag_Diary_TeachEvanSongSnippets;
+ TIMETAG_DIARY_SONG(&this->actor) = TIMETAG_DIARY_SONG_EVAN_PART1;
break;
- case 0x122E:
+ case 0x122E: // Mikau diary part 3
func_80152434(play, 0x40);
- this->actionFunc = func_80ACA3C0;
- this->actor.home.rot.z = 1;
+ this->actionFunc = EnTimeTag_Diary_TeachEvanSongSnippets;
+ TIMETAG_DIARY_SONG(&this->actor) = TIMETAG_DIARY_SONG_EVAN_PART2;
+ break;
+
+ default:
break;
}
}
break;
case TEXT_STATE_CLOSING:
- this->actionFunc = func_80ACA5F8;
+ this->actionFunc = EnTimeTag_Diary_Wait;
break;
}
- if (this->actor.home.rot.x != 0) {
- if (this->actor.cutscene == -1) {
- this->actor.home.rot.x = 0;
- } else if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
- } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_Start(this->actor.cutscene, &this->actor);
- this->actor.home.rot.x = 0;
+ if (TIMETAG_DIARY_TIMER(&this->actor) != 0) {
+ if (this->actor.csId == CS_ID_NONE) {
+ TIMETAG_DIARY_TIMER(&this->actor) = 0;
+ } else if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->actor.csId);
+ } else if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_Start(this->actor.csId, &this->actor);
+ TIMETAG_DIARY_TIMER(&this->actor) = 0;
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
}
-void func_80ACA5F8(EnTimeTag* this, PlayState* play) {
+void EnTimeTag_Diary_Wait(EnTimeTag* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) {
- if (ENTIMETAG_GET_SWITCHFLAG(&this->actor) == 1) {
+ if (TIMETAG_DIARY_GET_TYPE(&this->actor) == TIMETAG_DIARY_LULU) {
Message_StartTextbox(play, 0x101C, &this->actor);
} else {
+ // TIMETAG_DIARY_MIKAU
Message_StartTextbox(play, 0x122B, &this->actor);
}
- this->actor.home.rot.x = 1;
+ TIMETAG_DIARY_TIMER(&this->actor) = 1;
} else {
+ // unable to read Zora script
Message_StartTextbox(play, 0x122A, &this->actor);
+
+ //! FAKE: https://decomp.me/scratch/AHRNe
if (0) {}
+
((EnElf*)GET_PLAYER(play)->tatlActor)->unk_264 |= 4;
Actor_ChangeFocus(&this->actor, play, GET_PLAYER(play)->tatlActor);
- this->actor.home.rot.x = 0;
+ TIMETAG_DIARY_TIMER(&this->actor) = 0;
}
- this->actionFunc = func_80ACA418;
+ this->actionFunc = EnTimeTag_Diary_Cutscene;
} else if ((this->actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->actor, 0x3000, play)) {
func_800B8614(&this->actor, play, 110.0f);
}
}
-void func_80ACA714(EnTimeTag* this, PlayState* play) {
+void EnTimeTag_KickOut_DoNothing(EnTimeTag* this, PlayState* play) {
}
-void func_80ACA724(EnTimeTag* this, PlayState* play) {
+void EnTimeTag_KickOut_Transition(EnTimeTag* this, PlayState* play) {
if (Message_GetState(&play->msgCtx) == TEXT_STATE_5) {
- play->nextEntrance = play->setupExitList[ENTIMETAG_GET_1F(&this->actor)];
+ play->nextEntrance = play->setupExitList[TIMETAG_KICKOUT_GET_EXIT_INDEX(&this->actor)];
play->transitionTrigger = TRANS_TRIGGER_START;
- if (!ENTIMETAG_GET_E000(&this->actor)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_OC_DOOR_OPEN);
+ if (TIMETAG_GET_TYPE(&this->actor) == TIMETAG_KICKOUT_DOOR) {
+ Actor_PlaySfx(&this->actor, NA_SE_OC_DOOR_OPEN);
}
- this->actionFunc = func_80ACA714;
+ this->actionFunc = EnTimeTag_KickOut_DoNothing;
}
}
-void func_80ACA7C4(EnTimeTag* this, PlayState* play) {
- if (!(gSaveContext.save.weekEventReg[63] & 1) && !(gSaveContext.save.weekEventReg[63] & 2)) {
- func_800B7298(play, &this->actor, 7);
- Message_StartTextbox(play, ENTIMETAG_GET_1FE0(&this->actor) + 0x1883, NULL);
- this->actionFunc = func_80ACA724;
+/**
+ * Setup a request to kickout, but wait for an external system to unset
+ * both `WEEKEVENTREG_KICKOUT_WAIT` and `WEEKEVENTREG_KICKOUT_TIME_PASSED`
+ */
+void EnTimeTag_KickOut_WaitForTrigger(EnTimeTag* this, PlayState* play) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED)) {
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT);
+ Message_StartTextbox(play, 0x1883 + TIMETAG_KICKOUT_GET_TEXT(&this->actor), NULL);
+ this->actionFunc = EnTimeTag_KickOut_Transition;
}
}
-void func_80ACA840(EnTimeTag* this, PlayState* play) {
- s16 temp_ft4;
- s16 temp_hi;
+/**
+ * Wait for a certain time to pass, then trigger the kickout event.
+ * If an external system sets `WEEKEVENTREG_KICKOUT_WAIT`, then instead of triggering the kickout event now,
+ * store the kickout by going to `EnTimeTag_KickOut_WaitForTrigger`.
+ * If the time has passed but the kickout is being stored, then `WEEKEVENTREG_KICKOUT_TIME_PASSED` is set here
+ * to indicate to external systems that the time has passed and is waiting for a trigger.
+ */
+void EnTimeTag_KickOut_WaitForTime(EnTimeTag* this, PlayState* play) {
+ s16 hour;
+ s16 minute;
- if ((play->sceneId != SCENE_YADOYA) || (INV_CONTENT(ITEM_ROOM_KEY) != ITEM_ROOM_KEY)) {
- temp_ft4 = gSaveContext.save.time * (24.0f / 0x10000); // TIME_TO_HOURS_F
- temp_hi = (s32)TIME_TO_MINUTES_F(gSaveContext.save.time) % 60;
- if (gSaveContext.save.weekEventReg[63] & 1) {
- if (gSaveContext.save.weekEventReg[63] & 2) {
- this->actionFunc = func_80ACA7C4;
- } else if ((temp_ft4 == this->actor.home.rot.x) && (temp_hi == this->actor.home.rot.y)) {
- gSaveContext.save.weekEventReg[63] |= 2;
- }
- } else if ((temp_ft4 == this->actor.home.rot.x) && (temp_hi == this->actor.home.rot.y) &&
- !Play_InCsMode(play)) {
- func_800B7298(play, &this->actor, 7);
- Message_StartTextbox(play, ENTIMETAG_GET_1FE0(&this->actor) + 0x1883, NULL);
- this->actionFunc = func_80ACA724;
+ if ((play->sceneId == SCENE_YADOYA) && (INV_CONTENT(ITEM_ROOM_KEY) == ITEM_ROOM_KEY)) {
+ // Having the room key allows you to stay in Stock Pot Inn
+ return;
+ }
+
+ hour = TIME_TO_HOURS_F(gSaveContext.save.time);
+ minute = (s32)TIME_TO_MINUTES_F(gSaveContext.save.time) % 60;
+
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_WAIT)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED)) {
+ this->actionFunc = EnTimeTag_KickOut_WaitForTrigger;
+ } else if ((hour == TIMETAG_KICKOUT_HOUR(&this->actor)) && (minute == TIMETAG_KICKOUT_MINUTE(&this->actor))) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED);
}
+ } else if ((hour == TIMETAG_KICKOUT_HOUR(&this->actor)) && (minute == TIMETAG_KICKOUT_MINUTE(&this->actor)) &&
+ !Play_InCsMode(play)) {
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT);
+ Message_StartTextbox(play, 0x1883 + TIMETAG_KICKOUT_GET_TEXT(&this->actor), NULL);
+ this->actionFunc = EnTimeTag_KickOut_Transition;
}
}
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 6ee46c1d3..128e01973 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
@@ -7,16 +7,61 @@ struct EnTimeTag;
typedef void (*EnTimeTagActionFunc)(struct EnTimeTag*, PlayState*);
-#define ENTIMETAG_GET_1F(thisx) ((thisx)->params & 0x1F)
-#define ENTIMETAG_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F)
-#define ENTIMETAG_GET_1FE0(thisx) (((thisx)->params & 0x1FE0) >> 0x5)
-#define ENTIMETAG_GET_E000(thisx) (((thisx)->params & 0xE000) >> 0xD)
+#define TIMETAG_GET_TYPE(thisx) (((thisx)->params & 0xE000) >> 0xD)
+
+#define TIMETAG_KICKOUT_GET_TEXT(thisx) (((thisx)->params & 0x1FE0) >> 0x5)
+#define TIMETAG_KICKOUT_GET_EXIT_INDEX(thisx) ((thisx)->params & 0x1F)
+#define TIMETAG_KICKOUT_HOUR(thisx) ((thisx)->home.rot.x)
+#define TIMETAG_KICKOUT_MINUTE(thisx) ((thisx)->home.rot.y)
+
+#define TIMETAG_SOARING_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F)
+
+#define TIMETAG_DIARY_GET_TYPE(thisx) ((thisx)->params & 0x7F)
+#define TIMETAG_DIARY_TIMER(thisx) ((thisx)->home.rot.x)
+#define TIMETAG_DIARY_SONG(thisx) ((thisx)->home.rot.z)
+
+typedef enum {
+ /* 0 */ TIMETAG_KICKOUT_DOOR,
+ /* 1 */ TIMETAG_SOARING_ENGRAVING,
+ /* 2 */ TIMETAG_ROOFTOP_OATH,
+ /* 3 */ TIMETAG_DIARY,
+ /* 4 */ TIMETAG_KICKOUT_FINAL_HOURS,
+ /* 5 */ TIMETAG_KICKOUT_NO_DOOR
+} TimeTagType;
+
+typedef enum {
+ /* 0 */ TIMETAG_DIARY_MIKAU,
+ /* 1 */ TIMETAG_DIARY_LULU
+} TimeTagDiaryType;
+
+typedef enum {
+ /* 0 */ TIMETAG_DIARY_SONG_EVAN_PART1,
+ /* 1 */ TIMETAG_DIARY_SONG_EVAN_PART2
+} TimeTagDiarySong;
+
+typedef enum {
+ /* 0 */ TIMETAG_KICKOUT_TEXT_0, // I am closing the shop
+ /* 1 */ TIMETAG_KICKOUT_TEXT_SWAMP_SHOOTING_GALLERY, // time to close shop
+ /* 2 */ TIMETAG_KICKOUT_TEXT_STOCK_POT_INN, // Stock Pot Inn locking the door
+ /* 3 */ TIMETAG_KICKOUT_TEXT_HONEY_AND_DARLING, // need some alone time
+ /* 4 */ TIMETAG_KICKOUT_TEXT_LOTTERY, // business is finished
+ /* 5 */ TIMETAG_KICKOUT_TEXT_BARN_DAY, // the lady needs a break
+ /* 6 */ TIMETAG_KICKOUT_TEXT_GENERIC, // (Many scenes) place is about to close
+ /* 7 */ TIMETAG_KICKOUT_TEXT_BARN_NIGHT, // they came
+ /* 8 */ TIMETAG_KICKOUT_TEXT_TRADING_POST, // we have to close shop
+ /* 9 */ TIMETAG_KICKOUT_TEXT_MILK_BAR, // I have to get ready for business
+ /* 10 */ TIMETAG_KICKOUT_TEXT_CURIOSITY_SHOP_BACK_1, // shop is opening, you need to go
+ /* 11 */ TIMETAG_KICKOUT_TEXT_CURIOSITY_SHOP_BACK_2, // shop is opening, we're in the way
+ /* 12 */ TIMETAG_KICKOUT_TEXT_TOWN_SHOOTING_GALLERY_1, // it's time to close
+ /* 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
+} TimeTagKickOutText;
typedef struct EnTimeTag {
/* 0x000 */ Actor actor;
/* 0x144 */ EnTimeTagActionFunc actionFunc;
} EnTimeTag; // size = 0x148
-extern const ActorInit En_Time_Tag_InitVars;
-
#endif // Z_EN_TIME_TAG_H
diff --git a/src/overlays/actors/ovl_En_Tite/overlay.cfg b/src/overlays/actors/ovl_En_Tite/overlay.cfg
deleted file mode 100644
index 0d91c61fe..000000000
--- a/src/overlays/actors/ovl_En_Tite/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Tite
-z_en_tite.c
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 b912f6f38..3d5c7a741 100644
--- a/src/overlays/actors/ovl_En_Tite/z_en_tite.c
+++ b/src/overlays/actors/ovl_En_Tite/z_en_tite.c
@@ -46,7 +46,7 @@ void func_80895CB0(EnTite* this);
void func_80895D08(EnTite* this, PlayState* play);
void func_80895E28(EnTite* this, PlayState* play);
-const ActorInit En_Tite_InitVars = {
+ActorInit En_Tite_InitVars = {
ACTOR_EN_TITE,
ACTORCAT_ENEMY,
FLAGS,
@@ -147,7 +147,8 @@ void EnTite_Init(Actor* thisx, PlayState* play) {
CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
Collider_InitAndSetSphere(play, &this->collider, &this->actor, &sSphereInit);
this->collider.dim.worldSphere.radius = sSphereInit.dim.modelSphere.radius;
- this->unk_2C0 = 0x1D;
+ this->updBgCheckInfoFlags =
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10;
if (!D_80896B60) {
for (i = 0; i < ARRAY_COUNT(D_80896B24); i++) {
@@ -178,7 +179,7 @@ void EnTite_Init(Actor* thisx, PlayState* play) {
}
if (this->actor.params == ENTITE_MINUS_2) {
- this->unk_2C0 |= 0x40;
+ this->updBgCheckInfoFlags |= UPDBGCHECKINFO_FLAG_40;
this->actor.colChkInfo.health = 3;
}
}
@@ -195,8 +196,8 @@ void func_80893A18(EnTite* this) {
}
s32 func_80893A34(EnTite* this, PlayState* play) {
- if ((this->actor.params == ENTITE_MINUS_2) && (this->actor.bgCheckFlags & 1) &&
- (func_800C99D4(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) == 5)) {
+ if ((this->actor.params == ENTITE_MINUS_2) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) &&
+ (SurfaceType_GetFloorType(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) == FLOOR_TYPE_5)) {
return true;
}
return false;
@@ -211,7 +212,7 @@ void func_80893A9C(EnTite* this, PlayState* play) {
}
s32 func_80893ADC(EnTite* this) {
- if ((this->actor.params == ENTITE_MINUS_2) && (this->actor.bgCheckFlags & 0x20)) {
+ if ((this->actor.params == ENTITE_MINUS_2) && (this->actor.bgCheckFlags & BGCHECKFLAG_WATER)) {
return true;
}
return false;
@@ -224,7 +225,7 @@ s32 func_80893B10(EnTite* this) {
void func_80893B70(EnTite* this) {
if (this->actor.params == ENTITE_MINUS_2) {
- if (this->actor.bgCheckFlags & 0x20) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER) {
this->actor.gravity = 0.0f;
func_80893B10(this);
} else {
@@ -238,14 +239,15 @@ void func_80893BCC(EnTite* this, PlayState* play) {
s32 i;
s32 j;
- if (this->actor.bgCheckFlags & 2) {
- u32 surface = func_800C9BB8(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
+ SurfaceMaterial surfaceMaterial =
+ SurfaceType_GetMaterial(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId);
- if ((surface == COLPOLY_SURFACE_GROUND) || (surface == COLPOLY_SURFACE_SAND)) {
+ if ((surfaceMaterial == SURFACE_MATERIAL_DIRT) || (surfaceMaterial == SURFACE_MATERIAL_SAND)) {
for (i = 5; i < ARRAY_COUNT(this->limbPos); i++) {
func_800BBFB0(play, &this->limbPos[i], 1.0f, 2, 80, 15, 1);
}
- } else if (surface == COLPOLY_SURFACE_SNOW) {
+ } else if (surfaceMaterial == SURFACE_MATERIAL_SNOW) {
Vec3f* ptr;
for (i = 5; i < ARRAY_COUNT(this->limbPos); i++) {
@@ -259,7 +261,7 @@ void func_80893BCC(EnTite* this, PlayState* play) {
}
}
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EYEGOLE_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_ATTACK);
}
}
@@ -270,7 +272,7 @@ void func_80893DD4(EnTite* this) {
this->drawDmgEffScale = 0.5f;
this->drawDmgEffFrozenSteamScale = 0.75f;
this->drawDmgEffAlpha = 1.0f;
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 80);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 80);
this->actor.flags &= ~ACTOR_FLAG_200;
}
@@ -287,7 +289,7 @@ void func_80893E54(EnTite* this, PlayState* play) {
void func_80893ED4(EnTite* this) {
Animation_MorphToLoop(&this->skelAnime, &object_tite_Anim_0012E4, 4.0f);
this->unk_2BC = Rand_S16Offset(15, 30);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = func_80893F30;
}
@@ -305,7 +307,7 @@ void func_80893F30(EnTite* this, PlayState* play) {
void func_80893FD0(EnTite* this) {
Animation_PlayOnce(&this->skelAnime, &object_tite_Anim_00083C);
this->actor.velocity.y = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = func_80894024;
}
@@ -323,10 +325,10 @@ void func_80894024(EnTite* this, PlayState* play) {
void func_8089408C(EnTite* this, PlayState* play) {
Animation_PlayOnce(&this->skelAnime, &object_tite_Anim_0004F8);
if (!func_80893ADC(this)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_TEKU_JUMP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_TEKU_JUMP);
} else {
this->actor.world.pos.y += this->actor.depthInWater;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_TEKU_JUMP_WATER);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_TEKU_JUMP_WATER);
}
if (this->actor.shape.yOffset < 0.0f) {
@@ -356,17 +358,19 @@ void func_8089408C(EnTite* this, PlayState* play) {
this->actor.velocity.y = 8.0f;
}
- this->actor.bgCheckFlags &= ~(0x40 | 0x20 | 0x2 | 0x1);
+ this->actor.bgCheckFlags &=
+ ~(BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH | BGCHECKFLAG_WATER | BGCHECKFLAG_WATER_TOUCH);
this->actor.gravity = -1.0f;
- this->actor.speedXZ = 4.0f;
+ this->actor.speed = 4.0f;
this->actionFunc = func_808942B4;
}
void func_808942B4(EnTite* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
- if (((this->actor.bgCheckFlags & 1) || (func_80893ADC(this) && (this->actor.depthInWater > 0.0f))) &&
+ if (((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) ||
+ (func_80893ADC(this) && (this->actor.depthInWater > 0.0f))) &&
(this->actor.velocity.y <= 0.0f)) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->collider.base.atFlags &= ~AT_HIT;
if (!func_80893ADC(this)) {
func_80893BCC(this, play);
@@ -377,7 +381,7 @@ void func_808942B4(EnTite* this, PlayState* play) {
func_8089452C(this, play);
} else {
this->actor.velocity.y = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_TEKU_LAND_WATER2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_TEKU_LAND_WATER2);
func_80894414(this);
}
}
@@ -418,7 +422,7 @@ void func_8089452C(EnTite* this, PlayState* play) {
sp2C.y += this->actor.depthInWater;
this->actor.velocity.y *= 0.75f;
EffectSsGRipple_Spawn(play, &sp2C, 0, 500, 0);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_TEKU_LAND_WATER);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_TEKU_LAND_WATER);
this->actionFunc = func_808945B4;
}
@@ -430,7 +434,7 @@ void func_808945B4(EnTite* this, PlayState* play) {
void func_808945EC(EnTite* this) {
Animation_PlayLoop(&this->skelAnime, &object_tite_Anim_000A14);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.velocity.y = 0.0f;
this->actionFunc = func_80894638;
}
@@ -454,16 +458,17 @@ void func_80894638(EnTite* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, 7.0f)) {
if (func_80893ADC(this)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_TEKU_WALK_WATER);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_TEKU_WALK_WATER);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_TEKU_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_TEKU_WALK);
}
}
if ((Player_GetMask(play) == PLAYER_MASK_STONE) || (this->actor.xzDistToPlayer > 450.0f) ||
(this->actor.playerHeightRel > 80.0f)) {
func_80893ED4(this);
- } else if (((this->actor.bgCheckFlags & 1) || (func_80893ADC(this) && (this->actor.depthInWater < 10.0f))) &&
+ } else if (((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) ||
+ (func_80893ADC(this) && (this->actor.depthInWater < 10.0f))) &&
Actor_IsFacingPlayer(&this->actor, 0xE38)) {
if ((this->actor.xzDistToPlayer <= 180.0f) && (this->actor.playerHeightRel <= 80.0f)) {
func_80893A9C(this, play);
@@ -480,12 +485,12 @@ void func_8089484C(EnTite* this) {
}
this->actor.velocity.y = 9.5f;
this->actor.gravity = -1.0f;
- this->actor.speedXZ = 4.0f;
+ this->actor.speed = 4.0f;
if (func_80893ADC(this)) {
this->actor.world.pos.y += this->actor.depthInWater;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_TEKU_JUMP_WATER);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_TEKU_JUMP_WATER);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_TEKU_JUMP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_TEKU_JUMP);
}
this->actionFunc = func_80894910;
}
@@ -493,10 +498,10 @@ void func_8089484C(EnTite* this) {
void func_80894910(EnTite* this, PlayState* play) {
Vec3f sp34;
- Math_SmoothStepToF(&this->actor.speedXZ, 0.0f, 0.1f, 1.0f, 0.0f);
+ Math_SmoothStepToF(&this->actor.speed, 0.0f, 0.1f, 1.0f, 0.0f);
SkelAnime_Update(&this->skelAnime);
- if (this->actor.bgCheckFlags & 0x40) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_TEKU_LAND_WATER);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_TEKU_LAND_WATER);
if (func_80893ADC(this)) {
Math_Vec3f_Copy(&sp34, &this->actor.world.pos);
@@ -508,9 +513,10 @@ void func_80894910(EnTite* this, PlayState* play) {
func_80893BCC(this, play);
}
- if (((this->actor.bgCheckFlags & 1) || (func_80893ADC(this) && (this->actor.depthInWater > 0.0f))) &&
+ if (((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) ||
+ (func_80893ADC(this) && (this->actor.depthInWater > 0.0f))) &&
(this->actor.velocity.y <= 0.0f)) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 4000);
this->actor.world.rot.y = this->actor.shape.rot.y;
@@ -536,7 +542,7 @@ void func_80894910(EnTite* this, PlayState* play) {
void func_80894B2C(EnTite* this) {
Animation_MorphToLoop(&this->skelAnime, &object_tite_Anim_0012E4, 4.0f);
- this->actor.speedXZ = -6.0f;
+ this->actor.speed = -6.0f;
this->actor.gravity = -1.0f;
if (this->collider.base.ac != NULL) {
func_800BE568(&this->actor, &this->collider);
@@ -548,7 +554,7 @@ void func_80894B2C(EnTite* this) {
}
void func_80894BC8(EnTite* this, PlayState* play) {
- Math_SmoothStepToF(&this->actor.speedXZ, 0.0f, 1.0f, 0.5f, 0.0f);
+ Math_SmoothStepToF(&this->actor.speed, 0.0f, 1.0f, 0.5f, 0.0f);
SkelAnime_Update(&this->skelAnime);
if (func_80893ADC(this) && (this->actor.velocity.y <= 0.0f)) {
this->actor.gravity = 0.0f;
@@ -556,13 +562,13 @@ void func_80894BC8(EnTite* this, PlayState* play) {
this->actor.world.pos.y += this->actor.depthInWater - 1.0f;
}
- if (this->actor.bgCheckFlags & 0x40) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_TEKU_LAND_WATER2);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_TEKU_LAND_WATER2);
} else {
func_80893BCC(this, play);
}
- if ((this->actor.speedXZ == 0.0f) && ((this->actor.bgCheckFlags & 1) || func_80893ADC(this))) {
+ if ((this->actor.speed == 0.0f) && ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || func_80893ADC(this))) {
this->actor.world.rot.y = this->actor.shape.rot.y;
this->collider.base.acFlags |= AC_ON;
if ((Player_GetMask(play) == PLAYER_MASK_STONE) ||
@@ -579,7 +585,7 @@ void func_80894BC8(EnTite* this, PlayState* play) {
}
void func_80894DD0(EnTite* this) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->actor.velocity.y > 0.0f) {
this->actor.velocity.y = 0.0f;
}
@@ -598,8 +604,8 @@ void func_80894E0C(EnTite* this, PlayState* play) {
this->actor.world.pos.y += this->actor.depthInWater;
}
- if (this->actor.bgCheckFlags & 0x40) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_TEKU_LAND_WATER2);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_TEKU_LAND_WATER2);
} else {
func_80893BCC(this, play);
}
@@ -629,7 +635,7 @@ void func_80895020(EnTite* this, PlayState* play) {
f32 temp_f0;
Vec3f* ptr;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->collider.base.acFlags &= ~AC_ON;
this->actor.colorFilterTimer = 0;
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EN_TEKU_DEAD);
@@ -640,7 +646,7 @@ void func_80895020(EnTite* this, PlayState* play) {
this->unk_2BC = 25;
this->actor.gravity = -0.58f;
this->actor.velocity.y = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
ptr = &this->unk_33C[0];
for (i = 0; i < ARRAY_COUNT(this->limbPos); i++, ptr++) {
@@ -668,26 +674,27 @@ void func_808951B8(EnTite* this, PlayState* play) {
func_800B3030(play, &this->limbPos[i], &gZeroVec3f, &gZeroVec3f, 40, 7, 1);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->limbPos[i], 11, NA_SE_EN_EXTINCT);
}
- Actor_MarkForDeath(&this->actor);
- } else {
- for (i = 0; i < ARRAY_COUNT(this->unk_33C); i++) {
- Math_Vec3f_Sum(&this->limbPos[i], &this->unk_33C[i], &this->limbPos[i]);
- this->unk_33C[i].y += this->actor.gravity;
- }
+ Actor_Kill(&this->actor);
+ return;
+ }
+
+ for (i = 0; i < ARRAY_COUNT(this->unk_33C); i++) {
+ Math_Vec3f_Sum(&this->limbPos[i], &this->unk_33C[i], &this->limbPos[i]);
+ this->unk_33C[i].y += this->actor.gravity;
}
}
void func_808952EC(EnTite* this) {
Animation_PlayLoopSetSpeed(&this->skelAnime, &object_tite_Anim_000A14, 1.5f);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_LAST1_GROW_HEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_LAST1_GROW_HEAD);
this->collider.base.acFlags &= ~AC_ON;
func_80893A18(this);
this->unk_2B9 = 1;
this->unk_2BC = 400;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.gravity = -1.0f;
this->unk_2B8 = Rand_ZeroOne() * 50.0f;
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
this->actor.velocity.y = 11.0f;
this->actionFunc = func_80895424;
}
@@ -703,11 +710,11 @@ void func_80895424(EnTite* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->collider.base.acFlags |= AC_ON;
- if (this->actor.bgCheckFlags & 2) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos, 20.0f, 11, 4.0f, 0, 0, 0);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EYEGOLE_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_ATTACK);
}
if (this->unk_2BC == 0) {
@@ -723,8 +730,8 @@ void func_80895424(EnTite* this, PlayState* play) {
void func_808955E4(EnTite* this) {
this->unk_2B9 = 0;
this->actor.velocity.y = 13.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_LAST1_GROW_HEAD);
- this->actor.bgCheckFlags &= ~1;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_LAST1_GROW_HEAD);
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
this->collider.base.acFlags &= ~AC_ON;
this->actionFunc = func_80895640;
}
@@ -732,7 +739,7 @@ void func_808955E4(EnTite* this) {
void func_80895640(EnTite* this, PlayState* play) {
Math_ScaledStepToS(&this->actor.shape.rot.z, 0, 4000);
SkelAnime_Update(&this->skelAnime);
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->collider.base.acFlags |= AC_ON;
this->actor.shape.yOffset = 0.0f;
func_80893BCC(this, play);
@@ -751,7 +758,7 @@ void func_808956B8(EnTite* this) {
void func_808956FC(EnTite* this) {
this->unk_2BC = -1;
- this->actor.bgCheckFlags &= ~1;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND;
this->actor.velocity.y = 7.5f;
func_80893A18(this);
}
@@ -764,26 +771,26 @@ void func_80895738(EnTite* this, PlayState* play) {
if (this->collider.base.atFlags & AT_BOUNCED) {
func_808956FC(this);
}
- } else if (this->actor.bgCheckFlags & 8) {
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
this->actor.world.rot.y = BINANG_SUB((this->actor.wallYaw * 2) - this->actor.world.rot.y, 0x8000);
}
if (this->unk_2BC == -1) {
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.3f);
- if (this->actor.bgCheckFlags & 1) {
+ Math_StepToF(&this->actor.speed, 0.0f, 0.3f);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->actor.world.rot.y = this->actor.shape.rot.y;
func_80893ED4(this);
this->unk_2BC = 100;
}
} else if (this->unk_2BC > 0) {
this->unk_2BC--;
- Math_StepToF(&this->actor.speedXZ, 10.0f, 0.3f);
+ Math_StepToF(&this->actor.speed, 10.0f, 0.3f);
this->actor.flags |= ACTOR_FLAG_1000000;
CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
if (!func_80893A34(this, play)) {
this->unk_2BC = 0;
}
- } else if ((this->unk_2BC == 0) && Math_StepToF(&this->actor.speedXZ, 0.0f, 0.3f)) {
+ } else if ((this->unk_2BC == 0) && Math_StepToF(&this->actor.speed, 0.0f, 0.3f)) {
this->actor.world.rot.y = this->actor.shape.rot.y;
func_80893A18(this);
if ((Player_GetMask(play) == PLAYER_MASK_STONE) || (this->actor.xzDistToPlayer > 450.0f) ||
@@ -795,7 +802,7 @@ void func_80895738(EnTite* this, PlayState* play) {
func_80893A9C(this, play);
}
}
- this->actor.shape.rot.y += (s16)(this->actor.speedXZ * 768.0f);
+ this->actor.shape.rot.y += (s16)(this->actor.speed * 768.0f);
}
void func_8089595C(EnTite* this, PlayState* play) {
@@ -812,7 +819,7 @@ void func_80895A10(EnTite* this) {
s16 rand;
Animation_Change(&this->skelAnime, &object_tite_Anim_000A14, 2.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 4.0f);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
rand = Rand_S16Offset(20, 20);
this->unk_2BC = ((Rand_ZeroOne() < 0.5f) ? -1 : 1) * rand;
this->actionFunc = func_80895AC0;
@@ -827,18 +834,18 @@ void func_80895AC0(EnTite* this, PlayState* play) {
if (Rand_ZeroOne() < 0.25f) {
func_8089595C(this, play);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_TEKU_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_TEKU_WALK);
}
if ((this->unk_2BC == 1) || (this->unk_2BC == -1)) {
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
temp_v1 = this->actor.shape.rot.y - this->actor.wallYaw;
temp_v0 = ABS_ALT(temp_v1);
if (temp_v0 > 0x3000) {
this->unk_2BC = (temp_v0 >> 9) * this->unk_2BC;
}
- } else if (Actor_XZDistanceToPoint(&this->actor, &this->actor.home.pos) < 200.0f) {
- temp_v1 = this->actor.shape.rot.y - Actor_YawToPoint(&this->actor, &this->actor.home.pos);
+ } else if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) < 200.0f) {
+ temp_v1 = this->actor.shape.rot.y - Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos);
temp_v0 = ABS_ALT(temp_v1);
if (temp_v0 > 0x2000) {
this->unk_2BC = (temp_v0 >> 9) * this->unk_2BC;
@@ -861,7 +868,7 @@ void func_80895AC0(EnTite* this, PlayState* play) {
void func_80895CB0(EnTite* this) {
this->skelAnime.playSpeed = 1.0f;
- this->actor.speedXZ = 1.0f;
+ this->actor.speed = 1.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->unk_2BC = Rand_S16Offset(20, 20);
this->actionFunc = func_80895D08;
@@ -873,7 +880,7 @@ void func_80895D08(EnTite* this, PlayState* play) {
if (Rand_ZeroOne() < 0.5f) {
func_8089595C(this, play);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_TEKU_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_TEKU_WALK);
}
if ((this->actor.xzDistToPlayer < 240.0f) && (Player_GetMask(play) != PLAYER_MASK_STONE)) {
func_8089408C(this, play);
@@ -889,7 +896,7 @@ void func_80895DE8(EnTite* this) {
this->collider.base.acFlags &= ~AC_ON;
this->actor.shape.shadowDraw = ActorShadow_DrawCircle;
this->skelAnime.playSpeed = 1.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = func_80895E28;
}
@@ -955,8 +962,8 @@ void func_80895FF8(EnTite* this, PlayState* play) {
if (this->actor.colChkInfo.damageEffect != 0xF) {
if (this->actor.colChkInfo.damageEffect == 5) {
this->unk_2BC = 40;
- Actor_SetColorFilter(&this->actor, 0, 200, 0, 40);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 200, COLORFILTER_BUFFLAG_OPA, 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_LARGE;
this->drawDmgEffScale = 0.5f;
this->drawDmgEffAlpha = 2.0f;
@@ -966,8 +973,8 @@ void func_80895FF8(EnTite* this, PlayState* play) {
if (this->actor.colChkInfo.damageEffect == 1) {
this->unk_2BC = 40;
- Actor_SetColorFilter(&this->actor, 0, 200, 0, 40);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 200, COLORFILTER_BUFFLAG_OPA, 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
func_80894DD0(this);
return;
}
@@ -995,12 +1002,12 @@ void func_80895FF8(EnTite* this, PlayState* play) {
CLEAR_TAG_LARGE_LIGHT_RAYS);
}
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
if (this->actor.colChkInfo.health == 0) {
func_80895020(this, play);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_TEKU_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_TEKU_DAMAGE);
if (this->unk_2B9 == 0) {
func_80894B2C(this);
@@ -1011,7 +1018,7 @@ void func_80895FF8(EnTite* this, PlayState* play) {
}
}
}
- } else if ((this->actor.bgCheckFlags & 1) && (this->collider.base.acFlags & AC_ON) &&
+ } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->collider.base.acFlags & AC_ON) &&
(this->actor.colChkInfo.health != 0) && (play->actorCtx.unk2 != 0) &&
(this->actor.xyzDistToPlayerSq < SQ(200.0f))) {
this->actor.flags |= ACTOR_FLAG_1;
@@ -1031,13 +1038,13 @@ void func_808963B4(EnTite* this, PlayState* play) {
s32 i;
Vec3f sp48;
- if (this->actor.bgCheckFlags & 0x40) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) {
for (i = 5; i < ARRAY_COUNT(this->limbPos); i++) {
Math_Vec3f_Copy(&sp48, &this->limbPos[i]);
sp48.y = this->actor.world.pos.y + this->actor.depthInWater;
EffectSsGRipple_Spawn(play, &sp48, 0, 220, 0);
}
- } else if (this->actor.bgCheckFlags & 0x20) {
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER) {
s32 temp = play->gameplayFrames & 7;
if (!(temp & 1) && (this->actor.depthInWater < 10.0f)) {
@@ -1057,9 +1064,9 @@ void EnTite_Update(Actor* thisx, PlayState* play) {
if (this->actionFunc != func_808951B8) {
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 25.0f, 40.0f, 20.0f, this->unk_2C0);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 25.0f, 40.0f, 20.0f, this->updBgCheckInfoFlags);
func_808963B4(this, play);
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
func_800BE3D0(&this->actor, this->actor.shape.rot.y, &this->actor.shape.rot);
if (this->unk_2B9 != 0) {
this->actor.shape.rot.z = BINANG_ROT180(this->actor.shape.rot.z);
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 2d3a13a37..57d8ef3e3 100644
--- a/src/overlays/actors/ovl_En_Tite/z_en_tite.h
+++ b/src/overlays/actors/ovl_En_Tite/z_en_tite.h
@@ -27,7 +27,7 @@ typedef struct EnTite {
/* 0x2BB */ u8 drawDmgEffType;
/* 0x2BC */ s16 unk_2BC;
/* 0x2BE */ s16 unk_2BE;
- /* 0x2C0 */ s32 unk_2C0;
+ /* 0x2C0 */ s32 updBgCheckInfoFlags;
/* 0x2C4 */ f32 drawDmgEffAlpha;
/* 0x2C8 */ f32 drawDmgEffScale;
/* 0x2CC */ f32 drawDmgEffFrozenSteamScale;
@@ -37,6 +37,4 @@ typedef struct EnTite {
/* 0x3AC */ ColliderSphere collider;
} EnTite; // size = 0x404
-extern const ActorInit En_Tite_InitVars;
-
#endif // Z_EN_TITE_H
diff --git a/src/overlays/actors/ovl_En_Tk/overlay.cfg b/src/overlays/actors/ovl_En_Tk/overlay.cfg
deleted file mode 100644
index a7ca23e6e..000000000
--- a/src/overlays/actors/ovl_En_Tk/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Tk
-z_en_tk.c
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 60c4b4dd0..d434bacaa 100644
--- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c
+++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c
@@ -69,7 +69,7 @@ static u8 D_80AEF800[] = {
/* 0xE */ SCHEDULE_CMD_RET_NONE(),
};
-const ActorInit En_Tk_InitVars = {
+ActorInit En_Tk_InitVars = {
ACTOR_EN_TK,
ACTORCAT_NPC,
FLAGS,
@@ -209,11 +209,11 @@ void EnTk_Init(Actor* thisx, PlayState* play) {
if (Flags_GetSwitch(play, this->unk_2B1)) {
if (this->unk_2B0 == 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
} else if (this->unk_2B0 == 2) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -247,12 +247,12 @@ void EnTk_Init(Actor* thisx, PlayState* play) {
this->actor.shape.rot.y = this->actor.world.rot.y;
this->actor.flags |= ACTOR_FLAG_10;
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, D_80AEF868, 0, &this->unk_2D4);
- SubS_FillCutscenesList(&this->actor, this->cutscenes, ARRAY_COUNT(this->cutscenes));
+ SubS_FillCutscenesList(&this->actor, this->csIdList, ARRAY_COUNT(this->csIdList));
switch (this->unk_2B0) {
case 4:
if (D_80AF0050 != 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
D_80AF0050 = 1;
@@ -271,7 +271,7 @@ void EnTk_Init(Actor* thisx, PlayState* play) {
break;
default:
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
}
@@ -299,7 +299,7 @@ void func_80AECA90(EnTk* this, PlayState* play) {
}
void func_80AECB0C(EnTk* this, PlayState* play) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->unk_3CC = 0xFF;
this->unk_2DC = 0.0f;
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, D_80AEF868, 0, &this->unk_2D4);
@@ -323,8 +323,8 @@ void func_80AECB6C(EnTk* this, PlayState* play) {
return;
}
- if (REG(15) != 0.0f) {
- this->skelAnime.playSpeed = (f32)func_800FE620(play) / REG(15);
+ if (R_TIME_SPEED != 0.0f) {
+ this->skelAnime.playSpeed = (f32)func_800FE620(play) / R_TIME_SPEED;
} else {
this->skelAnime.playSpeed = 0.0f;
}
@@ -337,14 +337,14 @@ void func_80AECB6C(EnTk* this, PlayState* play) {
func_80AEC658(&this->skelAnime, this->unk_320, 1.0f, &sp48, &sp44);
}
- temp2 = REG(15) * sp44;
+ temp2 = R_TIME_SPEED * sp44;
temp_f0 = temp2;
- this->unk_2DC += (REG(15) * sp44) - temp2;
+ this->unk_2DC += (R_TIME_SPEED * sp44) - temp2;
temp3 = this->unk_2DC;
this->timePathTimeSpeed = temp2 + temp3;
this->unk_2DC -= temp3;
- this->unk_2E0 += REG(15);
+ this->unk_2E0 += R_TIME_SPEED;
if (Schedule_RunScript(play, D_80AEF800, &sp34)) {
if ((this->unk_3CC != sp34.result) && !func_80AED354(this, play, &sp34)) {
@@ -442,8 +442,8 @@ s32 func_80AECE60(EnTk* this, PlayState* play) {
do {
doorIter = SubS_FindActor(play, doorIter, ACTORCAT_DOOR, ACTOR_EN_DOOR);
if (doorIter != NULL) {
- if (Actor_XZDistanceBetweenActors(&this->actor, doorIter) <= 120.0f) {
- if (ABS(BINANG_SUB(Actor_YawToPoint(&this->actor, &doorIter->world.pos),
+ if (Actor_WorldDistXZToActor(&this->actor, doorIter) <= 120.0f) {
+ if (ABS(BINANG_SUB(Actor_WorldYawTowardPoint(&this->actor, &doorIter->world.pos),
this->actor.shape.rot.y)) <= 0x2000) {
this->unk_2CA |= 0x400;
door = (EnDoor*)doorIter;
@@ -459,7 +459,7 @@ s32 func_80AECE60(EnTk* this, PlayState* play) {
do {
doorIter = SubS_FindActor(play, doorIter, ACTORCAT_DOOR, ACTOR_EN_DOOR);
if (doorIter != NULL) {
- if (Actor_XZDistanceBetweenActors(&this->actor, doorIter) <= 160.0f) {
+ if (Actor_WorldDistXZToActor(&this->actor, doorIter) <= 160.0f) {
door = (EnDoor*)doorIter;
break;
}
@@ -486,7 +486,7 @@ s32 func_80AECE60(EnTk* this, PlayState* play) {
}
if (!(this->unk_3CE & 8) && !(this->unk_2CA & 0x10) && (this->actor.xzDistToPlayer < 100.0f)) {
- func_8013E8F8(&this->actor, play, 100.0f, 100.0f, PLAYER_AP_NONE, 0x4000, 0x4000);
+ func_8013E8F8(&this->actor, play, 100.0f, 100.0f, PLAYER_IA_NONE, 0x4000, 0x4000);
}
return false;
@@ -535,9 +535,9 @@ void func_80AED4F8(EnTk* this, PlayState* play) {
}
void func_80AED544(EnTk* this, PlayState* play) {
- if (!(gSaveContext.save.weekEventReg[31] & 0x10)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_31_10)) {
Message_StartTextbox(play, 0x13FE, &this->actor);
- gSaveContext.save.weekEventReg[31] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_31_10);
} else if (gSaveContext.save.time < CLOCK_TIME(9, 0)) {
Message_StartTextbox(play, 0x13FF, &this->actor);
} else if (gSaveContext.save.time < CLOCK_TIME(12, 0)) {
@@ -564,7 +564,7 @@ void func_80AED610(EnTk* this, PlayState* play) {
func_80AED544(this, play);
} else if (!Flags_GetSwitch(play, ENTK_GET_7F0(&this->actor))) {
Message_StartTextbox(play, 0x1403, &this->actor);
- } else if (gSaveContext.save.weekEventReg[60] & 2) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_60_02)) {
func_80AED544(this, play);
} else {
Message_StartTextbox(play, 0x1413, &this->actor);
@@ -590,13 +590,13 @@ void func_80AED610(EnTk* this, PlayState* play) {
break;
case 0x13FE:
- func_80151938(play, 0x13FF);
+ Message_ContinueTextbox(play, 0x13FF);
break;
case 0x1413:
Rupees_ChangeBy(30);
- gSaveContext.save.weekEventReg[60] |= 2;
- func_80151938(play, 0x13FF);
+ SET_WEEKEVENTREG(WEEKEVENTREG_60_02);
+ Message_ContinueTextbox(play, 0x13FF);
break;
case 0x13FF:
@@ -631,7 +631,7 @@ void func_80AED610(EnTk* this, PlayState* play) {
void func_80AED898(EnTk* this, PlayState* play) {
this->unk_316 = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->unk_2CA & 0x1000) {
if ((this->unk_2D4 == 4) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, D_80AEF868, 7, &this->unk_2D4);
@@ -657,7 +657,7 @@ void func_80AED940(EnTk* this, PlayState* play) {
}
Math_Vec3f_Copy(&sp44, &player->actor.world.pos);
- sp44.y = player->bodyPartsPos[7].y + 3.0f;
+ sp44.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
temp_v0 = Math_Vec3f_Pitch(&this->actor.focus.pos, &sp44);
if (ABS(temp_v0) < 0x800) {
Math_SmoothStepToS(&this->unk_31A, temp_v0, 3, 0x16C, 0);
@@ -679,7 +679,7 @@ void func_80AED940(EnTk* this, PlayState* play) {
if (ENTK_GET_F(actor) == 1) {
Math_Vec3f_Copy(&this->unk_2EC, &actor->world.pos);
Math_Vec3s_Copy(&this->unk_2F8, &actor->world.rot);
- Actor_MarkForDeath(actor);
+ Actor_Kill(actor);
this->unk_2CA |= 0x40;
break;
}
@@ -696,32 +696,32 @@ void func_80AED940(EnTk* this, PlayState* play) {
func_80AEDE10(this, play);
} else if (!(this->unk_2CA & 0x80)) {
if (this->actor.xzDistToPlayer < 100.0f) {
- func_8013E8F8(&this->actor, play, 100.0f, 100.0f, PLAYER_AP_NONE, 0x4000, 0x4000);
+ func_8013E8F8(&this->actor, play, 100.0f, 100.0f, PLAYER_IA_NONE, 0x4000, 0x4000);
}
} else {
- func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_AP_NONE);
+ func_800B8500(&this->actor, play, this->actor.xzDistToPlayer, this->actor.playerHeightRel, PLAYER_IA_NONE);
}
}
void func_80AEDBEC(EnTk* this, PlayState* play) {
this->actor.params = -1;
- this->unk_2E8 = 0;
- this->actor.speedXZ = 0.0f;
+ this->csLength = 0;
+ this->actor.speed = 0.0f;
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, D_80AEF868, 2, &this->unk_2D4);
this->actionFunc = func_80AEDC4C;
}
void func_80AEDC4C(EnTk* this, PlayState* play) {
- if ((this->actor.params >= 0) && SubS_StartActorCutscene(&this->actor, this->cutscenes[1], this->actor.params,
- SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) {
- this->unk_2E8 = ActorCutscene_GetLength(this->cutscenes[1]);
- func_80151938(play, 0x1411);
+ if ((this->actor.params >= 0) &&
+ SubS_StartCutscene(&this->actor, this->csIdList[1], this->actor.params, SUBS_CUTSCENE_WITH_PLAYER)) {
+ this->csLength = CutsceneManager_GetLength(this->csIdList[1]);
+ Message_ContinueTextbox(play, 0x1411);
func_80AEDCBC(this, play);
}
}
void func_80AEDCBC(EnTk* this, PlayState* play) {
- this->actor.speedXZ = 10.0f;
+ this->actor.speed = 10.0f;
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, D_80AEF868, 5, &this->unk_2D4);
Math_Vec3f_Copy(&this->actor.world.pos, &this->unk_2EC);
Math_Vec3f_Copy(&this->actor.prevPos, &this->unk_2EC);
@@ -731,16 +731,16 @@ void func_80AEDCBC(EnTk* this, PlayState* play) {
}
void func_80AEDD4C(EnTk* this, PlayState* play) {
- this->unk_2E8--;
- if (this->unk_2E8 <= 0) {
- ActorCutscene_Stop(this->cutscenes[1]);
- func_801477B4(play);
- Actor_MarkForDeath(&this->actor);
+ this->csLength--;
+ if (this->csLength <= 0) {
+ CutsceneManager_Stop(this->csIdList[1]);
+ Message_CloseTextbox(play);
+ Actor_Kill(&this->actor);
}
}
void func_80AEDDA0(EnTk* this, PlayState* play) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, D_80AEF868, 2, &this->unk_2D4);
this->actor.flags |= ACTOR_FLAG_10000;
this->unk_2CA |= 0x80;
@@ -758,7 +758,7 @@ void func_80AEDE10(EnTk* this, PlayState* play) {
switch (this->unk_310) {
case 0:
this->unk_2CA &= ~0x1000;
- if (!(gSaveContext.save.weekEventReg[52] & 0x80)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_80)) {
this->unk_2E6 = 0x1405;
} else {
this->unk_2E6 = 0x140B;
@@ -837,33 +837,33 @@ void func_80AEDF5C(EnTk* this, PlayState* play) {
break;
case 0x1405:
- func_80151938(play, 0x1406);
+ Message_ContinueTextbox(play, 0x1406);
break;
case 0x1406:
- func_80151938(play, 0x1407);
+ Message_ContinueTextbox(play, 0x1407);
break;
case 0x1407:
if (play->msgCtx.choiceIndex == 0) {
func_8019F208();
- func_80151938(play, 0x1409);
+ Message_ContinueTextbox(play, 0x1409);
} else {
func_8019F230();
- func_80151938(play, 0x1408);
+ Message_ContinueTextbox(play, 0x1408);
}
break;
case 0x1408:
- func_80151938(play, 0x1407);
+ Message_ContinueTextbox(play, 0x1407);
break;
case 0x1409:
- func_80151938(play, 0x140A);
+ Message_ContinueTextbox(play, 0x140A);
break;
case 0x140A:
- gSaveContext.save.weekEventReg[52] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_52_80);
case 0x140B:
func_80AEE784(this, play);
@@ -877,7 +877,7 @@ void func_80AEDF5C(EnTk* this, PlayState* play) {
func_80AEE2A8(this, play);
} else {
func_8019F230();
- func_80151938(play, 0x140E);
+ Message_ContinueTextbox(play, 0x140E);
}
break;
@@ -901,7 +901,7 @@ void func_80AEE2A8(EnTk* this, PlayState* play) {
}
void func_80AEE2C0(EnTk* this, PlayState* play) {
- if (SubS_StartActorCutscene(&this->actor, this->cutscenes[0], 0x7C, SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) {
+ if (SubS_StartCutscene(&this->actor, this->csIdList[0], CS_ID_GLOBAL_TALK, SUBS_CUTSCENE_WITH_PLAYER)) {
func_80AEE374(this, play);
}
}
@@ -911,7 +911,7 @@ s32 func_80AEE300(PlayState* play, Actor* arg1, Actor* arg2, void* _arg3) {
f32 temp_f0;
if ((arg2 != arg1) && (ENTK_GET_F(arg2) == 3)) {
- temp_f0 = Actor_DistanceBetweenActors(arg1, arg2);
+ temp_f0 = Actor_WorldDistXYZToActor(arg1, arg2);
if (temp_f0 < arg3->unk_04) {
arg3->unk_00 = arg2;
arg3->unk_04 = temp_f0;
@@ -928,11 +928,12 @@ void func_80AEE374(EnTk* this, PlayState* play) {
SubS_FindActorCustom(play, &this->actor, NULL, ACTORCAT_NPC, ACTOR_EN_TK, &sp30, func_80AEE300);
if (sp30.unk_00 == 0) {
- Actor_MarkForDeath(&this->actor);
- } else {
- this->unk_2CC = Actor_YawToPoint(&this->actor, &sp30.unk_00->world.pos);
- this->actionFunc = func_80AEE414;
+ Actor_Kill(&this->actor);
+ return;
}
+
+ this->unk_2CC = Actor_WorldYawTowardPoint(&this->actor, &sp30.unk_00->world.pos);
+ this->actionFunc = func_80AEE414;
}
void func_80AEE414(EnTk* this, PlayState* play) {
@@ -957,7 +958,7 @@ void func_80AEE4D0(EnTk* this, PlayState* play) {
}
if (Animation_OnFrame(&this->skelAnime, 33.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_DIG_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_DIG_UP);
}
if (!(this->unk_2CA & 0x20)) {
@@ -967,7 +968,7 @@ void func_80AEE4D0(EnTk* this, PlayState* play) {
bigPoe = SubS_FindActor(play, bigPoe, ACTORCAT_PROP, ACTOR_EN_BIGPO);
if (bigPoe != NULL) {
- if ((bigPoe->params == 3) && (Actor_DistanceBetweenActors(&this->actor, bigPoe) < 80.0f)) {
+ if ((bigPoe->params == 3) && (Actor_WorldDistXYZToActor(&this->actor, bigPoe) < 80.0f)) {
bigPoe->params = 4;
this->unk_2CA |= 0x20;
this->unk_2E4++;
@@ -994,15 +995,15 @@ void func_80AEE650(EnTk* this, PlayState* play) {
void func_80AEE6B8(EnTk* this, PlayState* play) {
if (this->unk_2CA & 0x20) {
if (this->unk_2E4 >= 3) {
- ActorCutscene_Stop(this->cutscenes[0]);
- func_801477B4(play);
+ CutsceneManager_Stop(this->csIdList[0]);
+ Message_CloseTextbox(play);
func_80AEDBEC(this, play);
- } else if (SubS_StartActorCutscene(&this->actor, 0x7C, this->cutscenes[0], SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) {
+ } else if (SubS_StartCutscene(&this->actor, CS_ID_GLOBAL_TALK, this->csIdList[0], SUBS_CUTSCENE_WITH_PLAYER)) {
this->unk_310 = 3;
func_80AEDE10(this, play);
this->unk_2CA &= ~0x20;
}
- } else if (SubS_StartActorCutscene(&this->actor, 0x7C, this->cutscenes[0], SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) {
+ } else if (SubS_StartCutscene(&this->actor, CS_ID_GLOBAL_TALK, this->csIdList[0], SUBS_CUTSCENE_WITH_PLAYER)) {
this->unk_310 = 4;
func_80AEDE10(this, play);
}
@@ -1034,13 +1035,13 @@ s32 func_80AEE86C(EnTk* this, PlayState* play) {
s32 pad;
s32 ret = false;
s32 pad2;
- CollisionPoly* sp38;
- s32 sp34;
+ CollisionPoly* groundPoly;
+ s32 bgId;
Vec3f sp28;
Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &D_80AEFA78, &sp28);
- if ((BgCheck_EntityRaycastFloor3(&play->colCtx, &sp38, &sp34, &sp28) != BGCHECK_Y_MIN) &&
- (func_800C9BB8(&play->colCtx, sp38, sp34) == 1) && (this->unk_2D0 == (u32)1) &&
+ if ((BgCheck_EntityRaycastFloor3(&play->colCtx, &groundPoly, &bgId, &sp28) != BGCHECK_Y_MIN) &&
+ (SurfaceType_GetMaterial(&play->colCtx, groundPoly, bgId) == SURFACE_MATERIAL_SAND) && (this->unk_2D0 == 1) &&
(this->actor.xyzDistToPlayerSq <= SQ(115.0f)) &&
func_80AEE7E0(&this->actor.world.pos, 100.0f, this->unk_324, this->unk_36C) &&
(((this->unk_2CA & 2) && (Math_Vec3f_DistXZ(&this->unk_300, &sp28) >= 100.0f)) || !(this->unk_2CA & 2)) &&
@@ -1182,10 +1183,10 @@ void func_80AEED38(EnTk* this, PlayState* play) {
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, D_80AEF868, 2, &this->unk_2D4);
} else {
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, D_80AEF868, 1, &this->unk_2D4);
- func_80AEC658(&this->skelAnime, this->unk_320, 1.0f, &this->actor.speedXZ, &sp64);
+ func_80AEC658(&this->skelAnime, this->unk_320, 1.0f, &this->actor.speed, &sp64);
}
- if (this->actor.speedXZ > 0.5f) {
+ if (this->actor.speed > 0.5f) {
Math_SmoothStepToS(&this->actor.world.rot.y, this->unk_2CC, 2, 0xAAA, 1);
this->actor.shape.rot.y = this->actor.world.rot.y;
}
@@ -1209,17 +1210,17 @@ void func_80AEF094(EnTk* this, PlayState* play) {
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, D_80AEF868, 2, &this->unk_2D4);
} else {
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, D_80AEF868, 1, &this->unk_2D4);
- func_80AEC658(&this->skelAnime, this->unk_320, 1.0f, &this->actor.speedXZ, &sp2C);
+ func_80AEC658(&this->skelAnime, this->unk_320, 1.0f, &this->actor.speed, &sp2C);
}
- if (this->actor.speedXZ >= 0.5f) {
+ if (this->actor.speed >= 0.5f) {
Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 2, 0x38E, 1);
this->actor.shape.rot.y = this->actor.world.rot.y;
}
}
void func_80AEF15C(EnTk* this, PlayState* play) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, D_80AEF868, 2, &this->unk_2D4);
this->unk_30C = func_80AEF1B4;
}
@@ -1236,7 +1237,7 @@ void func_80AEF210(EnTk* this, PlayState* play) {
}
void func_80AEF220(EnTk* this, PlayState* play) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, D_80AEF868, 2, &this->unk_2D4);
this->unk_30C = func_80AEF278;
}
@@ -1263,13 +1264,13 @@ void func_80AEF2D8(Actor* thisx, PlayState* play) {
if ((this->actor.draw != NULL) && ((this->unk_2D4 == 0) || (this->unk_2D4 == 1)) &&
(Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 24.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_WALK);
}
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
func_80AEC460(this);
}
@@ -1285,7 +1286,7 @@ void EnTk_Update(Actor* thisx, PlayState* play) {
if (((this->unk_2D4 == 0) || (this->unk_2D4 == 1)) &&
(Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 24.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_WALK);
}
this->unk_2CA &= ~1;
@@ -1309,9 +1310,10 @@ void EnTk_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 0.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
- if ((this->unk_2B0 == 0) && (func_800C9B40(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) == 12)) {
+ if ((this->unk_2B0 == 0) && (SurfaceType_GetFloorProperty(&play->colCtx, this->actor.floorPoly,
+ this->actor.floorBgId) == FLOOR_PROPERTY_12)) {
Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.prevPos);
this->unk_2CA |= 0x200;
this->actor.velocity.y = 0.0f;
@@ -1320,10 +1322,10 @@ void EnTk_Update(Actor* thisx, PlayState* play) {
}
if (!(this->unk_2CA & 0x200)) {
- if (!(this->actor.bgCheckFlags & 1)) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
func_800B9010(&this->actor, NA_SE_EV_HONEYCOMB_FALL - SFX_FLAG);
- } else if (this->actor.bgCheckFlags & 2) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_HUMAN_BOUND);
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_HUMAN_BOUND);
}
}
}
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 279cd0810..9604133e7 100644
--- a/src/overlays/actors/ovl_En_Tk/z_en_tk.h
+++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.h
@@ -36,13 +36,13 @@ typedef struct EnTk {
/* 0x2E0 */ s32 unk_2E0;
/* 0x2E4 */ s16 unk_2E4;
/* 0x2E6 */ u16 unk_2E6;
- /* 0x2E8 */ s16 unk_2E8;
+ /* 0x2E8 */ s16 csLength;
/* 0x2EC */ Vec3f unk_2EC;
/* 0x2F8 */ Vec3s unk_2F8;
/* 0x300 */ Vec3f unk_300;
/* 0x30C */ EnTkUnkFunc unk_30C;
/* 0x310 */ s16 unk_310;
- /* 0x312 */ s16 cutscenes[2];
+ /* 0x312 */ s16 csIdList[2];
/* 0x316 */ s16 unk_316;
/* 0x318 */ s16 unk_318;
/* 0x31A */ s16 unk_31A;
@@ -63,6 +63,4 @@ typedef struct EnTk {
/* 0x3F0 */ s32 timePathElapsedTime;
} EnTk; // size = 0x3F4
-extern const ActorInit En_Tk_InitVars;
-
#endif // Z_EN_TK_H
diff --git a/src/overlays/actors/ovl_En_Torch/overlay.cfg b/src/overlays/actors/ovl_En_Torch/overlay.cfg
deleted file mode 100644
index 081513543..000000000
--- a/src/overlays/actors/ovl_En_Torch/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Torch
-z_en_torch.c
diff --git a/src/overlays/actors/ovl_En_Torch/z_en_torch.c b/src/overlays/actors/ovl_En_Torch/z_en_torch.c
index 9a09e27eb..00335577b 100644
--- a/src/overlays/actors/ovl_En_Torch/z_en_torch.c
+++ b/src/overlays/actors/ovl_En_Torch/z_en_torch.c
@@ -13,7 +13,7 @@
void EnTorch_Init(Actor* thisx, PlayState* play);
-const ActorInit En_Torch_InitVars = {
+ActorInit En_Torch_InitVars = {
ACTOR_EN_TORCH, ACTORCAT_ITEMACTION, FLAGS, GAMEPLAY_KEEP, sizeof(EnTorch),
(ActorFunc)EnTorch_Init, (ActorFunc)NULL, (ActorFunc)NULL, (ActorFunc)NULL,
};
@@ -29,5 +29,5 @@ void EnTorch_Init(Actor* thisx, PlayState* play) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOX, this->actor.world.pos.x, this->actor.world.pos.y,
this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0,
ENBOX_PARAMS(ENBOX_TYPE_SMALL, sChestContents[(returnData >> 0x5) & 0x7], returnData));
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Torch/z_en_torch.h b/src/overlays/actors/ovl_En_Torch/z_en_torch.h
index 87e1d6782..9ebfabb64 100644
--- a/src/overlays/actors/ovl_En_Torch/z_en_torch.h
+++ b/src/overlays/actors/ovl_En_Torch/z_en_torch.h
@@ -9,6 +9,4 @@ typedef struct EnTorch {
/* 0x000 */ Actor actor;
} EnTorch; // size = 0x144
-extern const ActorInit En_Torch_InitVars;
-
#endif // Z_EN_TORCH_H
diff --git a/src/overlays/actors/ovl_En_Torch2/overlay.cfg b/src/overlays/actors/ovl_En_Torch2/overlay.cfg
deleted file mode 100644
index 25ddefa7f..000000000
--- a/src/overlays/actors/ovl_En_Torch2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Torch2
-z_en_torch2.c
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 0486f7c5c..c6681b4be 100644
--- a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c
+++ b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c
@@ -19,7 +19,7 @@ void EnTorch2_Draw(Actor* thisx, PlayState* play2);
void EnTorch2_UpdateIdle(Actor* thisx, PlayState* play);
void EnTorch2_UpdateDeath(Actor* thisx, PlayState* play);
-const ActorInit En_Torch2_InitVars = {
+ActorInit En_Torch2_InitVars = {
ACTOR_EN_TORCH2,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -58,26 +58,19 @@ static InitChainEntry sInitChain[] = {
// Shells for each of Link's different forms
// (Playing elegy as Fierce Deity puts down a human shell)
static Gfx* sShellDLists[] = {
- gameplay_keep_DL_01C430, // Human
- gameplay_keep_DL_048DF0, // Zora
- gameplay_keep_DL_089070, // Deku
- gameplay_keep_DL_057B10, // Goron
- gameplay_keep_DL_01C430, // Human
+ gElegyShellHumanDL, gElegyShellGoronDL, gElegyShellZoraDL, gElegyShellDekuDL, gElegyShellHumanDL,
};
void EnTorch2_Init(Actor* thisx, PlayState* play) {
EnTorch2* this = THIS;
- s16 params;
Actor_ProcessInitChain(&this->actor, sInitChain);
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
- // params: which form Link is in (e.g. human, deku, etc.)
- params = this->actor.params;
- if (params != TORCH2_PARAM_DEKU) {
- this->actor.flags |= ACTOR_FLAG_4000000; // Can press switch
- if (params == TORCH2_PARAM_GORON) {
- this->actor.flags |= ACTOR_FLAG_20000; // Can press heavy switches
+ if (this->actor.params != TORCH2_PARAM_DEKU) {
+ this->actor.flags |= ACTOR_FLAG_CAN_PRESS_SWITCH;
+ if (this->actor.params == TORCH2_PARAM_GORON) {
+ this->actor.flags |= ACTOR_FLAG_CAN_PRESS_HEAVY_SWITCH;
}
}
this->framesUntilNextState = 20;
@@ -87,9 +80,9 @@ void EnTorch2_Destroy(Actor* thisx, PlayState* play) {
EnTorch2* this = THIS;
Collider_DestroyCylinder(play, &this->collider);
- Play_SetRespawnData(&play->state, this->actor.params + RESPAWN_MODE_GORON - 1, 0xFF, 0, 0xBFF,
- &this->actor.world.pos, this->actor.shape.rot.y);
- play->actorCtx.unk254[this->actor.params] = 0;
+ Play_SetRespawnData(&play->state, this->actor.params + RESPAWN_MODE_GORON - 1, 0xFF, 0,
+ PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B), &this->actor.world.pos, this->actor.shape.rot.y);
+ play->actorCtx.elegyShells[this->actor.params] = NULL;
}
void EnTorch2_Update(Actor* thisx, PlayState* play) {
@@ -105,7 +98,7 @@ void EnTorch2_Update(Actor* thisx, PlayState* play) {
this->actor.gravity = -1.0f;
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 70.0f, 0x05);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 70.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
if (this->framesUntilNextState == 0) {
remainingFrames = 0;
@@ -153,17 +146,18 @@ void EnTorch2_UpdateDeath(Actor* thisx, PlayState* play) {
// Fall down and become transparent, then delete once invisible
if (Math_StepToS(&this->alpha, 0, 8)) {
- Actor_MarkForDeath(&this->actor);
- } else {
- this->actor.gravity = -1.0f;
- Actor_MoveWithGravity(&this->actor);
+ Actor_Kill(&this->actor);
+ return;
}
+
+ this->actor.gravity = -1.0f;
+ Actor_MoveWithGravity(&this->actor);
}
void EnTorch2_Draw(Actor* thisx, PlayState* play2) {
PlayState* play = play2;
EnTorch2* this = THIS;
- Gfx* gfx = sShellDLists[thisx->params];
+ Gfx* gfx = sShellDLists[this->actor.params];
OPEN_DISPS(play->state.gfxCtx);
if (this->alpha == 0xFF) {
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 744a7975c..9033b9923 100644
--- a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.h
+++ b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.h
@@ -29,6 +29,4 @@ typedef enum {
/* 4 */ TORCH2_STATE_DYING,
} EnTorch2State;
-extern const ActorInit En_Torch2_InitVars;
-
#endif // Z_EN_TORCH2_H
diff --git a/src/overlays/actors/ovl_En_Toto/overlay.cfg b/src/overlays/actors/ovl_En_Toto/overlay.cfg
deleted file mode 100644
index 48534631e..000000000
--- a/src/overlays/actors/ovl_En_Toto/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Toto
-z_en_toto.c
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 a55c899ef..3a563ab60 100644
--- a/src/overlays/actors/ovl_En_Toto/z_en_toto.c
+++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.c
@@ -11,7 +11,7 @@
#define THIS ((EnToto*)thisx)
-#define ENTOTO_WEEK_EVENT_FLAGS (gSaveContext.save.weekEventReg[50] & 1 || gSaveContext.save.weekEventReg[51] & 0x80)
+#define ENTOTO_WEEK_EVENT_FLAGS (CHECK_WEEKEVENTREG(WEEKEVENTREG_50_01) || CHECK_WEEKEVENTREG(WEEKEVENTREG_51_80))
void EnToto_Init(Actor* thisx, PlayState* play);
void EnToto_Destroy(Actor* thisx, PlayState* play);
@@ -50,7 +50,7 @@ s32 func_80BA4B24(EnToto* this, PlayState* play);
s32 func_80BA4C0C(EnToto* this, PlayState* play);
s32 func_80BA4C44(EnToto* this, PlayState* play);
-const ActorInit En_Toto_InitVars = {
+ActorInit En_Toto_InitVars = {
ACTOR_EN_TOTO,
ACTORCAT_NPC,
FLAGS,
@@ -186,11 +186,11 @@ void EnToto_Init(Actor* thisx, PlayState* play) {
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
if ((play->sceneId == SCENE_MILK_BAR) && (gSaveContext.save.time >= CLOCK_TIME(6, 0)) &&
(gSaveContext.save.time < CLOCK_TIME(21, 30))) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f);
- this->actor.bgCheckFlags |= 0x400;
+ this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_400;
SkelAnime_InitFlex(play, &this->skelAnime, &object_zm_Skel_00A978,
((play->sceneId == SCENE_SONCHONOIE) ? &object_zm_Anim_003AA8 : &object_zm_Anim_00C880),
this->jointTable, this->morphTable, 18);
@@ -251,14 +251,14 @@ void func_80BA39C8(EnToto* this, PlayState* play) {
return;
}
- //! @TODO: 0xED02 nor 0xED01 match CLOCK_TIME macro
+ //! 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))) ||
((play->sceneId != SCENE_MILK_BAR) && func_80BA397C(this, 0x2000))) {
if (this->unk2B6 != 0) {
this->text = D_80BA5044;
this->actor.flags |= ACTOR_FLAG_10000;
- func_800B8500(&this->actor, play, 9999.9f, 9999.9f, PLAYER_AP_NONE);
+ func_800B8500(&this->actor, play, 9999.9f, 9999.9f, PLAYER_IA_NONE);
} else {
this->actor.flags &= ~ACTOR_FLAG_10000;
func_800B8614(&this->actor, play, 50.0f);
@@ -312,7 +312,7 @@ void func_80BA3CC4(EnToto* this, PlayState* play) {
}
void func_80BA3D38(EnToto* this, PlayState* play) {
- this->cutscene = this->actor.cutscene;
+ this->csId = this->actor.csId;
this->text = ENTOTO_WEEK_EVENT_FLAGS ? D_80BA50BC : D_80BA5088;
func_80BA4C0C(this, play);
play->actorCtx.flags |= ACTORCTX_FLAG_5;
@@ -333,7 +333,7 @@ void func_80BA3DBC(EnToto* this, PlayState* play) {
}
} else {
player = GET_PLAYER(play);
- if (player->stateFlags1 & 0x400 && player->unk_AE7 != 0) {
+ if ((player->stateFlags1 & PLAYER_STATE1_400) && player->unk_AE7 != 0) {
func_80151BB4(play, 48);
func_80151BB4(play, 9);
func_80151BB4(play, 10);
@@ -343,7 +343,7 @@ void func_80BA3DBC(EnToto* this, PlayState* play) {
}
func_80BA36C0(this, play, 0);
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
play->actorCtx.flags &= ~ACTORCTX_FLAG_5;
}
@@ -357,16 +357,16 @@ s32 func_80BA3ED4(EnToto* this, PlayState* play) {
s32 func_80BA3EE8(EnToto* this, PlayState* play) {
if (this->text->unk1 == 2) {
- func_800B7298(play, NULL, 7);
+ func_800B7298(play, NULL, PLAYER_CSMODE_WAIT);
}
return 0;
}
s32 func_80BA3F2C(EnToto* this, PlayState* play) {
if (this->text->textId != 0) {
- func_80151938(play, this->text->textId);
+ Message_ContinueTextbox(play, this->text->textId);
} else {
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80BA3EE8(this, play);
}
if (this->text->unk0 == 4) {
@@ -389,21 +389,21 @@ s32 func_80BA3FCC(EnToto* this, PlayState* play) {
}
s32 func_80BA402C(EnToto* this, PlayState* play) {
- s16 prevCutscene = this->cutscene;
+ s16 prevCsId = this->csId;
- this->cutscene = ActorCutscene_GetAdditionalCutscene(this->cutscene);
- ActorCutscene_SetIntentToPlay(this->cutscene);
- ActorCutscene_Stop(prevCutscene);
+ this->csId = CutsceneManager_GetAdditionalCsId(this->csId);
+ CutsceneManager_Queue(this->csId);
+ CutsceneManager_Stop(prevCsId);
return 0;
}
s32 func_80BA407C(EnToto* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->cutscene, &GET_PLAYER(play)->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCs(this->csId, &GET_PLAYER(play)->actor);
return 1;
}
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
return 0;
}
@@ -452,7 +452,7 @@ s32 func_80BA42BC(EnToto* this, PlayState* play) {
Vec3s* end = &D_80BA510C[3];
func_80BA3FB0(this, play);
- func_800B7298(play, NULL, 6);
+ func_800B7298(play, NULL, PLAYER_CSMODE_END);
if (player->actor.world.pos.z > -310.0f) {
if ((player->actor.world.pos.x > -150.0f) || (player->actor.world.pos.z > -172.0f)) {
phi_s0 = 3;
@@ -472,7 +472,7 @@ s32 func_80BA42BC(EnToto* this, PlayState* play) {
s32 func_80BA43F4(EnToto* this, PlayState* play) {
func_80BA3C88(this);
if (func_80122760(play, &this->unk_2BC, 60.0f)) {
- func_800B7298(play, NULL, 0x13);
+ func_800B7298(play, NULL, PLAYER_CSMODE_19);
return func_80BA4204(this, play);
}
return 0;
@@ -480,14 +480,14 @@ s32 func_80BA43F4(EnToto* this, PlayState* play) {
s32 func_80BA445C(EnToto* this, PlayState* play) {
if (func_80BA4128(this, play)) {
- func_800B7298(play, NULL, 6);
+ func_800B7298(play, NULL, PLAYER_CSMODE_END);
return 1;
}
return 0;
}
s32 func_80BA44A0(EnToto* this, PlayState* play) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->unk2B1 = 0;
return 0;
}
@@ -510,12 +510,12 @@ s32 func_80BA4530(EnToto* this, PlayState* play) {
func_80BA3C88(this);
if (player->actor.world.pos.z > -270.0f) {
if (this->spotlights != NULL) {
- Actor_MarkForDeath(this->spotlights);
+ Actor_Kill(this->spotlights);
}
this->unk2B6 = 1;
return this->text->unk1;
}
- if (player->actor.bgCheckFlags & 1) {
+ if (player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
temp_s0 = &D_80BA50DC[gSaveContext.save.playerForm - 1];
if (func_80BA44D4(temp_s0, player)) {
Math_Vec3s_ToVec3f(&player->actor.world.pos, &temp_s0->unk6);
@@ -524,13 +524,12 @@ s32 func_80BA4530(EnToto* this, PlayState* play) {
return func_80BA407C(this, play);
}
if (!ENTOTO_WEEK_EVENT_FLAGS) {
- for (i = 0; i < 4; i++) {
+ for (i = 0; i < ARRAY_COUNT(D_80BA50DC); i++) {
if (func_80BA44D4(&D_80BA50DC[i], player)) {
if (this->unk2B1 < 10) {
this->unk2B1++;
if (this->unk2B1 >= 10) {
- Message_StartTextbox(play, D_80BA50DC[((void)0, gSaveContext.save.playerForm) - 1].unk2,
- NULL);
+ Message_StartTextbox(play, D_80BA50DC[GET_PLAYER_FORM - 1].unk2, NULL);
}
}
return 0;
@@ -543,7 +542,7 @@ s32 func_80BA4530(EnToto* this, PlayState* play) {
}
s32 func_80BA46D8(EnToto* this, PlayState* play) {
- func_800B7298(play, NULL, 0x44);
+ func_800B7298(play, NULL, PLAYER_CSMODE_68);
func_80152434(play, D_80BA5120[CUR_FORM]);
return 0;
}
@@ -551,16 +550,16 @@ s32 func_80BA46D8(EnToto* this, PlayState* play) {
s32 func_80BA4740(EnToto* this, PlayState* play) {
if (play->msgCtx.ocarinaMode == 4) {
if (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) {
- gSaveContext.save.weekEventReg[56] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_56_10);
}
if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) {
- gSaveContext.save.weekEventReg[56] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_56_20);
}
if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) {
- gSaveContext.save.weekEventReg[56] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_56_40);
}
if (gSaveContext.save.playerForm == PLAYER_FORM_GORON) {
- gSaveContext.save.weekEventReg[56] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_56_80);
}
return 1;
}
@@ -572,22 +571,23 @@ s32 func_80BA47E0(EnToto* this, PlayState* play) {
s32 i;
this->unk2B3 = 0;
- if (gSaveContext.save.weekEventReg[56] & 0x10) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_56_10)) {
this->unk2B3 += 1;
}
- if (gSaveContext.save.weekEventReg[56] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_56_20)) {
this->unk2B3 += 2;
}
- if (gSaveContext.save.weekEventReg[56] & 0x40) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_56_40)) {
this->unk2B3 += 4;
}
- if (gSaveContext.save.weekEventReg[56] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_56_80)) {
this->unk2B3 += 8;
}
- for (i = 0; i < 4; i++) {
+ for (i = 0; i < ARRAY_COUNT(D_80BA50DC); i++) {
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, -1);
+ Actor_Spawn(&play->actorCtx, play, ACTOR_PLAYER, spawnPos.x, spawnPos.y, spawnPos.z, i + 2, 0, 0,
+ PLAYER_PARAMS(0xFF, PLAYER_INITMODE_F) | 0xFFFFF000);
}
}
func_80BA402C(this, play);
@@ -598,7 +598,7 @@ s32 func_80BA47E0(EnToto* this, PlayState* play) {
}
s32 func_80BA49A4(EnToto* this, PlayState* play) {
- func_800B7298(play, NULL, 0x44);
+ func_800B7298(play, NULL, PLAYER_CSMODE_68);
func_801A31EC(NA_BGM_BALLAD_OF_THE_WIND_FISH, 4, this->unk2B3 ^ 0xF);
this->unk2B1 = 4;
return 0;
@@ -612,18 +612,18 @@ s32 func_80BA4A00(EnToto* this, PlayState* play) {
actor = &GET_PLAYER(play)->actor;
actor = actor->next;
while (actor != NULL) {
- Actor_MarkForDeath(actor);
+ Actor_Kill(actor);
actor = actor->next;
}
if (this->spotlights != NULL) {
- Actor_MarkForDeath(this->spotlights);
+ Actor_Kill(this->spotlights);
}
- func_800B7298(play, NULL, 0x45);
+ func_800B7298(play, NULL, PLAYER_CSMODE_69);
if (this->unk2B3 == 0xF) {
if (CURRENT_DAY == 1) {
- gSaveContext.save.weekEventReg[50] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_50_01);
} else {
- gSaveContext.save.weekEventReg[51] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_51_80);
}
} else {
func_80BA402C(this, play);
@@ -675,17 +675,17 @@ s32 func_80BA4C44(EnToto* this, PlayState* play) {
}
void func_80BA4CB4(EnToto* this, PlayState* play) {
- CsCmdActorAction* action = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 525)];
+ CsCmdActorCue* cue = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_525)];
- if (this->unk2B5 != action->action) {
- this->unk2B5 = action->action;
- if (this->unk2B5 != 4) {
- if (this->unk2B5 == 3) {
+ if (this->cueId != cue->id) {
+ this->cueId = cue->id;
+ if (this->cueId != 4) {
+ if (this->cueId == 3) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_zm_Anim_001DF0, -4.0f);
} else {
Animation_PlayOnce(&this->skelAnime,
- this->unk2B5 == 1 ? &object_zm_Anim_0016A4 : &object_zm_Anim_0022C8);
- if (this->unk2B5 == 2 && this->unk2B3 != 0xF) {
+ (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);
}
@@ -694,12 +694,12 @@ void func_80BA4CB4(EnToto* this, PlayState* play) {
}
Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 0x320);
if (SkelAnime_Update(&this->skelAnime)) {
- if (this->unk2B5 != 3) {
- Animation_PlayLoop(&this->skelAnime, this->unk2B5 == 1 ? &object_zm_Anim_00C880 : &object_zm_Anim_001324);
+ if (this->cueId != 3) {
+ Animation_PlayLoop(&this->skelAnime, (this->cueId == 1) ? &object_zm_Anim_00C880 : &object_zm_Anim_001324);
}
}
- if (this->unk2B5 == 4 && !Actor_HasParent(&this->actor, play)) {
- Actor_PickUp(&this->actor, play, GI_MASK_CIRCUS_LEADER, 9999.9f, 9999.9f);
+ if ((this->cueId == 4) && !Actor_HasParent(&this->actor, play)) {
+ Actor_OfferGetItem(&this->actor, play, GI_MASK_CIRCUS_LEADER, 9999.9f, 9999.9f);
}
}
@@ -707,7 +707,7 @@ void EnToto_Update(Actor* thisx, PlayState* play) {
EnToto* this = THIS;
s32 pad;
- if (Cutscene_CheckActorAction(play, 0x20D)) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_525)) {
func_80BA4CB4(this, play);
} else {
D_80BA51B8[this->actionFuncIndex](this, play);
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 94c80ef4a..cf9f3c718 100644
--- a/src/overlays/actors/ovl_En_Toto/z_en_toto.h
+++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.h
@@ -30,10 +30,10 @@ typedef struct EnToto {
/* 0x264 */ ColliderCylinder collider;
/* 0x2B0 */ u8 actionFuncIndex;
/* 0x2B1 */ u8 unk2B1;
- /* 0x2B2 */ s8 cutscene;
+ /* 0x2B2 */ s8 csId;
/* 0x2B3 */ u8 unk2B3;
/* 0x2B4 */ u8 unk2B4;
- /* 0x2B5 */ u8 unk2B5;
+ /* 0x2B5 */ u8 cueId;
/* 0x2B6 */ u8 unk2B6;
/* 0x2B7 */ u8 unk2B7;
/* 0x2B8 */ EnTotoText* text;
@@ -42,6 +42,4 @@ typedef struct EnToto {
/* 0x2C8 */ s32 pad2C8;
} EnToto; // size = 0x2CC
-extern const ActorInit En_Toto_InitVars;
-
#endif // Z_EN_TOTO_H
diff --git a/src/overlays/actors/ovl_En_Trt/overlay.cfg b/src/overlays/actors/ovl_En_Trt/overlay.cfg
deleted file mode 100644
index d0b1d075f..000000000
--- a/src/overlays/actors/ovl_En_Trt/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Trt
-z_en_trt.c
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 71abb140a..e4a4a4ab8 100644
--- a/src/overlays/actors/ovl_En_Trt/z_en_trt.c
+++ b/src/overlays/actors/ovl_En_Trt/z_en_trt.c
@@ -90,7 +90,7 @@ static AnimationInfoS sAnimationInfo[] = {
{ &gKotakeFlyAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
};
-const ActorInit En_Trt_InitVars = {
+ActorInit En_Trt_InitVars = {
ACTOR_EN_TRT,
ACTORCAT_NPC,
FLAGS,
@@ -170,22 +170,22 @@ void EnTrt_UpdateCursorPos(PlayState* play, EnTrt* this) {
void EnTrt_SetupGetMushroomCutscene(EnTrt* this) {
if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING) {
- if (this->cutscene != this->tmpGetMushroomCutscene) {
- ActorCutscene_Stop(this->cutscene);
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (this->csId != this->tmpGetMushroomCsId) {
+ CutsceneManager_Stop(this->csId);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->tmpGetMushroomCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->tmpGetMushroomCsId;
+ CutsceneManager_Queue(this->csId);
this->cutsceneState = ENTRT_CUTSCENESTATE_WAITING;
}
}
if (this->cutsceneState == ENTRT_CUTSCENESTATE_WAITING) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING_SPECIAL;
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
}
}
@@ -202,7 +202,7 @@ u16 EnTrt_GetItemTextId(EnTrt* this) {
u16 EnTrt_GetItemChoiceTextId(EnTrt* this) {
EnGirlA* item = this->items[this->cursorIndex];
- if ((item->actor.params == SI_POTION_BLUE) && !(gSaveContext.save.weekEventReg[53] & 0x10)) {
+ if ((item->actor.params == SI_POTION_BLUE) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_53_10)) {
this->textId = 0x881;
return 0x881;
}
@@ -213,7 +213,7 @@ void EnTrt_EndInteraction(PlayState* play, EnTrt* this) {
Player* player = GET_PLAYER(play);
if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED;
}
Actor_ProcessTalkRequest(&this->actor, &play->state);
@@ -223,7 +223,7 @@ void EnTrt_EndInteraction(PlayState* play, EnTrt* this) {
this->drawCursor = 0;
this->stickLeftPrompt.isEnabled = false;
this->stickRightPrompt.isEnabled = false;
- player->stateFlags2 &= ~0x20000000;
+ player->stateFlags2 &= ~PLAYER_STATE2_20000000;
play->interfaceCtx.unk_222 = 0;
play->interfaceCtx.unk_224 = 0;
this->textId = 0x834;
@@ -246,14 +246,14 @@ s32 EnTrt_TestEndInteraction(EnTrt* this, PlayState* play, Input* input) {
s32 EnTrt_TestCancelOption(EnTrt* this, PlayState* play, Input* input) {
if (CHECK_BTN_ALL(input->press.button, BTN_B)) {
this->actionFunc = this->prevActionFunc;
- func_80151938(play, EnTrt_GetItemTextId(this));
+ Message_ContinueTextbox(play, EnTrt_GetItemTextId(this));
return true;
}
return false;
}
void EnTrt_SetupStartShopping(PlayState* play, EnTrt* this, u8 skipHello) {
- func_8011552C(play, 0x10);
+ func_8011552C(play, DO_ACTION_NEXT);
if (!skipHello) {
this->actionFunc = EnTrt_Hello;
} else {
@@ -262,8 +262,8 @@ void EnTrt_SetupStartShopping(PlayState* play, EnTrt* this, u8 skipHello) {
}
void EnTrt_StartShopping(PlayState* play, EnTrt* this) {
- func_80151938(play, 0x83E);
- func_8011552C(play, 6);
+ Message_ContinueTextbox(play, 0x83E);
+ func_8011552C(play, DO_ACTION_DECIDE);
this->stickLeftPrompt.isEnabled = false;
this->stickRightPrompt.isEnabled = true;
this->actionFunc = EnTrt_FaceShopkeeper;
@@ -318,11 +318,11 @@ void EnTrt_Hello(EnTrt* this, PlayState* play) {
u8 talkState = Message_GetState(&play->msgCtx);
if (this->cutsceneState == ENTRT_CUTSCENESTATE_WAITING) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING;
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
}
if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
@@ -337,19 +337,19 @@ void EnTrt_GetMushroom(EnTrt* this, PlayState* play) {
u8 talkState = Message_GetState(&play->msgCtx);
Player* player = GET_PLAYER(play);
- this->tmpGetMushroomCutscene = this->getMushroomCutscene;
+ this->tmpGetMushroomCsId = this->getMushroomCsId;
if (this->cutsceneState != ENTRT_CUTSCENESTATE_PLAYING_SPECIAL) {
EnTrt_SetupGetMushroomCutscene(this);
if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING_SPECIAL) {
- player->stateFlags2 &= ~0x20000000;
+ player->stateFlags2 &= ~PLAYER_STATE2_20000000;
}
} else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
switch (this->textId) {
case 0x883:
this->textId = 0x884;
Message_StartTextbox(play, this->textId, &this->actor);
- gSaveContext.save.weekEventReg[53] |= 8;
- func_80123D50(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_AP_BOTTLE);
+ SET_WEEKEVENTREG(WEEKEVENTREG_53_08);
+ Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY);
break;
case 0x888:
this->textId = 0x889;
@@ -357,7 +357,7 @@ void EnTrt_GetMushroom(EnTrt* this, PlayState* play) {
break;
case 0x889:
if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING_SPECIAL) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED;
}
play->msgCtx.msgMode = 0x43;
@@ -375,10 +375,10 @@ void EnTrt_GetMushroom(EnTrt* this, PlayState* play) {
void EnTrt_PayForMushroom(EnTrt* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL;
- func_80123D50(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_AP_BOTTLE);
+ Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY);
this->actionFunc = EnTrt_SetupItemGiven;
} else {
- Actor_PickUp(&this->actor, play, GI_RUPEE_RED, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_RUPEE_RED, 300.0f, 300.0f);
}
}
@@ -387,7 +387,7 @@ void EnTrt_Goodbye(EnTrt* this, PlayState* play) {
switch (this->textId) {
case 0x886:
this->textId = 0x887;
- func_80151938(play, this->textId);
+ Message_ContinueTextbox(play, this->textId);
break;
case 0x887:
case 0x88B:
@@ -400,9 +400,9 @@ void EnTrt_Goodbye(EnTrt* this, PlayState* play) {
void EnTrt_StartRedPotionConversation(EnTrt* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
if (this->textId == 0x88F) {
- if (Inventory_HasEmptyBottle() || !(gSaveContext.save.weekEventReg[12] & 0x10)) {
+ if (Inventory_HasEmptyBottle() || !CHECK_WEEKEVENTREG(WEEKEVENTREG_12_10)) {
if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED;
}
play->msgCtx.msgMode = 0x43;
@@ -411,28 +411,28 @@ void EnTrt_StartRedPotionConversation(EnTrt* this, PlayState* play) {
} else {
this->prevTextId = this->textId;
this->textId = 0x88E;
- gSaveContext.save.weekEventReg[85] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_85_08);
Message_StartTextbox(play, this->textId, &this->actor);
this->actionFunc = EnTrt_EndConversation;
}
} else {
- if (gSaveContext.save.weekEventReg[12] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_08)) {
this->textId = 0x83D;
EnTrt_SetupStartShopping(play, this, 0);
- } else if (gSaveContext.save.weekEventReg[84] & 0x40) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_40)) {
this->textId = 0x83B;
if (Inventory_HasItemInBottle(ITEM_POTION_RED)) {
EnTrt_SetupStartShopping(play, this, false);
} else {
this->actionFunc = EnTrt_TryToGiveRedPotion;
}
- } else if (gSaveContext.save.weekEventReg[16] & 0x10) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) {
this->timer = 30;
this->textId = 0x838;
this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING_SPECIAL;
this->actionFunc = EnTrt_Surprised;
return;
- } else if (gSaveContext.save.weekEventReg[17] & 1) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_17_01)) {
this->textId = 0x835;
EnTrt_SetupStartShopping(play, this, false);
}
@@ -446,16 +446,16 @@ void EnTrt_GiveRedPotionForKoume(EnTrt* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL;
- if (!(gSaveContext.save.weekEventReg[12] & 0x10)) {
- gSaveContext.save.weekEventReg[12] |= 0x10;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_10)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_12_10);
}
- gSaveContext.save.weekEventReg[84] |= 0x40;
- player->stateFlags2 &= ~0x20000000;
+ SET_WEEKEVENTREG(WEEKEVENTREG_84_40);
+ player->stateFlags2 &= ~PLAYER_STATE2_20000000;
this->actionFunc = EnTrt_GivenRedPotionForKoume;
- } else if (gSaveContext.save.weekEventReg[12] & 0x10) {
- Actor_PickUp(&this->actor, play, GI_POTION_RED, 300.0f, 300.0f);
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_10)) {
+ Actor_OfferGetItem(&this->actor, play, GI_POTION_RED, 300.0f, 300.0f);
} else {
- Actor_PickUp(&this->actor, play, GI_POTION_RED_BOTTLE, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_POTION_RED_BOTTLE, 300.0f, 300.0f);
}
}
@@ -465,21 +465,21 @@ void EnTrt_GivenRedPotionForKoume(EnTrt* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) {
if (this->cutsceneState == ENTRT_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
- player->stateFlags2 |= 0x20000000;
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
+ player->stateFlags2 |= PLAYER_STATE2_20000000;
//! @bug: EnTrt_ContinueShopping gets overwritten by EnTrt_ItemGiven
this->actionFunc = EnTrt_ContinueShopping;
this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING;
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookToShopkeeperCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookToShopkeeperCsId;
+ CutsceneManager_Queue(this->csId);
}
}
- func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
this->actionFunc = EnTrt_ItemGiven;
}
}
@@ -517,22 +517,22 @@ void EnTrt_FaceShopkeeper(EnTrt* this, PlayState* play) {
u8 cursorIndex;
if (this->cutsceneState == ENTRT_CUTSCENESTATE_WAITING) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING;
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
}
if (this->cutsceneState == ENTRT_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookForwardCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookForwardCutscene;
+ CutsceneManager_Queue(this->csId);
this->cutsceneState = ENTRT_CUTSCENESTATE_WAITING;
} else if (talkState == TEXT_STATE_CHOICE) {
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
if (!EnTrt_TestEndInteraction(this, play, CONTROLLER1(&play->state))) {
if ((!Message_ShouldAdvance(play) || !EnTrt_FacingShopkeeperDialogResult(this, play)) &&
(this->stickAccumX > 0)) {
@@ -540,7 +540,7 @@ void EnTrt_FaceShopkeeper(EnTrt* this, PlayState* play) {
if (cursorIndex != CURSOR_INVALID) {
this->cursorIndex = cursorIndex;
this->actionFunc = EnTrt_LookToShelf;
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
this->stickRightPrompt.isEnabled = false;
play_sound(NA_SE_SY_CURSOR);
}
@@ -551,25 +551,25 @@ void EnTrt_FaceShopkeeper(EnTrt* this, PlayState* play) {
void EnTrt_LookToShelf(EnTrt* this, PlayState* play) {
if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED;
}
if (this->cutsceneState == ENTRT_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookToShelfCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookToShelfCsId;
+ CutsceneManager_Queue(this->csId);
this->cutsceneState = ENTRT_CUTSCENESTATE_WAITING;
} else if (this->cutsceneState == ENTRT_CUTSCENESTATE_WAITING) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING;
EnTrt_UpdateCursorPos(play, this);
this->actionFunc = EnTrt_BrowseShelf;
- func_80151938(play, EnTrt_GetItemTextId(this));
+ Message_ContinueTextbox(play, EnTrt_GetItemTextId(this));
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
}
}
@@ -605,7 +605,7 @@ s32 EnTrt_HasPlayerSelectedItem(PlayState* play, EnTrt* this, Input* input) {
if (EnTrt_TestItemSelected(play)) {
if (item->actor.params != SI_POTION_BLUE || (this->flags & ENTRT_GIVEN_MUSHROOM)) {
this->prevActionFunc = this->actionFunc;
- func_80151938(play, EnTrt_GetItemChoiceTextId(this));
+ Message_ContinueTextbox(play, EnTrt_GetItemChoiceTextId(this));
play_sound(NA_SE_SY_DECIDE);
this->stickLeftPrompt.isEnabled = false;
this->stickRightPrompt.isEnabled = false;
@@ -634,11 +634,11 @@ void EnTrt_BrowseShelf(EnTrt* this, PlayState* play) {
this->stickLeftPrompt.isEnabled = true;
EnTrt_UpdateCursorPos(play, this);
if (talkState == TEXT_STATE_5) {
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
if (!EnTrt_HasPlayerSelectedItem(play, this, CONTROLLER1(&play->state))) {
EnTrt_CursorLeftRight(play, this);
if (this->cursorIndex != prevCursorIdx) {
- func_80151938(play, EnTrt_GetItemTextId(this));
+ Message_ContinueTextbox(play, EnTrt_GetItemTextId(this));
play_sound(NA_SE_SY_CURSOR);
}
}
@@ -649,22 +649,22 @@ void EnTrt_BrowseShelf(EnTrt* this, PlayState* play) {
void EnTrt_SetupBuyItemWithFanfare(PlayState* play, EnTrt* this) {
Player* player = GET_PLAYER(play);
- Actor_PickUp(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f);
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
- player->stateFlags2 &= ~0x20000000;
+ player->stateFlags2 &= ~PLAYER_STATE2_20000000;
Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
this->drawCursor = 0;
this->actionFunc = EnTrt_BuyItemWithFanfare;
}
void EnTrt_SetupCannotBuy(PlayState* play, EnTrt* this, u16 textId) {
- func_80151938(play, textId);
+ Message_ContinueTextbox(play, textId);
this->actionFunc = EnTrt_CannotBuy;
}
void EnTrt_SetupCanBuy(PlayState* play, EnTrt* this, u16 textId) {
- func_80151938(play, textId);
+ Message_ContinueTextbox(play, textId);
this->actionFunc = EnTrt_CanBuy;
}
@@ -675,7 +675,7 @@ void EnTrt_HandleCanBuyItem(PlayState* play, EnTrt* this) {
switch (item->canBuyFunc(play, item)) {
case CANBUY_RESULT_SUCCESS_1:
if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED;
}
func_8019F208();
@@ -727,7 +727,7 @@ void EnTrt_SelectItem(EnTrt* this, PlayState* play) {
if (EnTrt_TakeItemOffShelf(this)) {
if (talkState == TEXT_STATE_CHOICE) {
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
if (!EnTrt_TestCancelOption(this, play, CONTROLLER1(&play->state)) && Message_ShouldAdvance(play)) {
switch (play->msgCtx.choiceIndex) {
case 0:
@@ -736,7 +736,7 @@ void EnTrt_SelectItem(EnTrt* this, PlayState* play) {
case 1:
func_8019F230();
this->actionFunc = this->prevActionFunc;
- func_80151938(play, EnTrt_GetItemTextId(this));
+ Message_ContinueTextbox(play, EnTrt_GetItemTextId(this));
break;
}
}
@@ -746,14 +746,14 @@ void EnTrt_SelectItem(EnTrt* this, PlayState* play) {
EnTrt_SetupCannotBuy(play, this, 0x846);
} else {
if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED;
}
EnTrt_SetupBuyItemWithFanfare(play, this);
this->drawCursor = 0;
this->shopItemSelectedTween = 0.0f;
item->boughtFunc(play, item);
- gSaveContext.save.weekEventReg[53] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_53_10);
}
}
}
@@ -762,14 +762,14 @@ void EnTrt_SelectItem(EnTrt* this, PlayState* play) {
void EnTrt_IdleSleeping(EnTrt* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if ((gSaveContext.save.weekEventReg[85] & 8) && !(gSaveContext.save.weekEventReg[84] & 0x40)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_85_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_84_40)) {
this->textId = 0x88F;
} else if (!(this->flags & ENTRT_MET)) {
this->textId = 0x834;
} else {
this->textId = 0x83E;
}
- if (!(gSaveContext.save.weekEventReg[53] & 8)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_53_08)) {
this->talkOptionTextId = 0x845;
} else if (this->flags & ENTRT_GIVEN_MUSHROOM) {
this->talkOptionTextId = 0x882;
@@ -790,14 +790,14 @@ void EnTrt_IdleSleeping(EnTrt* this, PlayState* play) {
this->flags |= ENTRT_MET;
}
if (this->cutsceneState == ENTRT_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookForwardCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookForwardCutscene;
+ CutsceneManager_Queue(this->csId);
this->cutsceneState = ENTRT_CUTSCENESTATE_WAITING;
}
- player->stateFlags2 |= 0x20000000;
+ player->stateFlags2 |= PLAYER_STATE2_20000000;
this->timer = 45;
this->actionFunc = EnTrt_BeginInteraction;
} else if (((player->actor.world.pos.x >= -50.0f) && (player->actor.world.pos.x <= -25.0f)) &&
@@ -831,14 +831,14 @@ void EnTrt_IdleAwake(EnTrt* this, PlayState* play) {
}
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
if (this->cutsceneState == ENTRT_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookForwardCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookForwardCutscene;
+ CutsceneManager_Queue(this->csId);
this->cutsceneState = ENTRT_CUTSCENESTATE_WAITING;
}
- player->stateFlags2 |= 0x20000000;
+ player->stateFlags2 |= PLAYER_STATE2_20000000;
if (player->transformation == PLAYER_FORM_HUMAN) {
this->flags |= ENTRT_MET;
}
@@ -866,11 +866,11 @@ void EnTrt_BeginInteraction(EnTrt* this, PlayState* play) {
s16 animLastFrame = Animation_GetLastFrame(&gKotakeWakeUpAnim) / (s16)this->skelAnime.playSpeed;
if (this->cutsceneState == ENTRT_CUTSCENESTATE_WAITING) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING_SPECIAL;
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
} else if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING_SPECIAL) {
if (this->animIndex != TRT_ANIM_HANDS_ON_COUNTER) {
@@ -880,7 +880,7 @@ void EnTrt_BeginInteraction(EnTrt* this, PlayState* play) {
this->blinkFunc = EnTrt_OpenEyesThenSetToBlink;
this->timer = 10;
this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KOTAKE_SURPRISED2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KOTAKE_SURPRISED2);
}
} else {
this->blinkFunc = EnTrt_OpenEyesThenSetToBlink;
@@ -894,9 +894,9 @@ void EnTrt_BeginInteraction(EnTrt* this, PlayState* play) {
this->animIndex = TRT_ANIM_HANDS_ON_COUNTER;
switch (this->textId) {
case 0x834:
- if (!(gSaveContext.save.weekEventReg[12] & 8) && !(gSaveContext.save.weekEventReg[84] & 0x40) &&
- !(gSaveContext.save.weekEventReg[16] & 0x10) && !(gSaveContext.save.weekEventReg[17] & 1)) {
- func_8011552C(play, 6);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_84_40) &&
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_17_01)) {
+ func_8011552C(play, DO_ACTION_DECIDE);
this->stickLeftPrompt.isEnabled = false;
this->stickRightPrompt.isEnabled = true;
this->actionFunc = EnTrt_Hello;
@@ -905,7 +905,7 @@ void EnTrt_BeginInteraction(EnTrt* this, PlayState* play) {
}
break;
case 0x83E:
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
this->stickLeftPrompt.isEnabled = false;
this->stickRightPrompt.isEnabled = true;
this->actionFunc = EnTrt_FaceShopkeeper;
@@ -923,18 +923,18 @@ void EnTrt_BeginInteraction(EnTrt* this, PlayState* play) {
void EnTrt_Surprised(EnTrt* this, PlayState* play) {
if (this->cutsceneState == ENTRT_CUTSCENESTATE_WAITING) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING_SPECIAL;
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
} else if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING_SPECIAL) {
if (DECR(this->timer) == 0) {
EnTrt_ChangeAnim(&this->skelAnime, sAnimationInfo, TRT_ANIM_SURPRISED);
this->animIndex = TRT_ANIM_SURPRISED;
this->blinkFunc = EnTrt_OpenEyes2;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KOTAKE_SURPRISED);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KOTAKE_SURPRISED);
this->timer = 30;
this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING;
}
@@ -952,16 +952,16 @@ void EnTrt_TryToGiveRedPotionAfterSurprised(EnTrt* this, PlayState* play) {
this->blinkFunc = EnTrt_Blink;
if ((talkState == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) {
- if (Inventory_HasEmptyBottle() || !(gSaveContext.save.weekEventReg[12] & 0x10)) {
+ if (Inventory_HasEmptyBottle() || !CHECK_WEEKEVENTREG(WEEKEVENTREG_12_10)) {
if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED;
}
this->actionFunc = EnTrt_GiveRedPotionForKoume;
} else {
this->prevTextId = this->textId;
this->textId = 0x88E;
- gSaveContext.save.weekEventReg[85] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_85_08);
Message_StartTextbox(play, this->textId, &this->actor);
this->actionFunc = EnTrt_EndConversation;
}
@@ -973,7 +973,7 @@ void EnTrt_TryToGiveRedPotion(EnTrt* this, PlayState* play) {
if (this->textId == 0x83C) {
if (Inventory_HasEmptyBottle()) {
if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED;
}
play->msgCtx.msgMode = 0x43;
@@ -982,7 +982,7 @@ void EnTrt_TryToGiveRedPotion(EnTrt* this, PlayState* play) {
} else {
this->prevTextId = this->textId;
this->textId = 0x88E;
- gSaveContext.save.weekEventReg[85] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_85_08);
Message_StartTextbox(play, this->textId, &this->actor);
this->actionFunc = EnTrt_EndConversation;
}
@@ -997,17 +997,17 @@ void EnTrt_ItemGiven(EnTrt* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (this->cutsceneState == ENTRT_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
- player->stateFlags2 |= 0x20000000;
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
+ player->stateFlags2 |= PLAYER_STATE2_20000000;
this->actionFunc = EnTrt_ContinueShopping;
this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING;
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookToShopkeeperCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookToShopkeeperCsId;
+ CutsceneManager_Queue(this->csId);
}
}
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
@@ -1029,9 +1029,9 @@ void EnTrt_ItemGiven(EnTrt* this, PlayState* play) {
this->textId = 0x849;
break;
}
- func_80151938(play, this->textId);
+ Message_ContinueTextbox(play, this->textId);
} else {
- func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
}
}
@@ -1054,7 +1054,7 @@ void EnTrt_ShopkeeperGone(EnTrt* this, PlayState* play) {
}
}
if ((talkState == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) {
- if (gSaveContext.save.weekEventReg[20] & 2) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) {
play->nextEntrance = ENTRANCE(SOUTHERN_SWAMP_CLEARED, 5);
} else {
play->nextEntrance = ENTRANCE(SOUTHERN_SWAMP_POISONED, 5);
@@ -1068,7 +1068,7 @@ void EnTrt_ShopkeeperGone(EnTrt* this, PlayState* play) {
void EnTrt_CannotBuy(EnTrt* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
this->actionFunc = this->prevActionFunc;
- func_80151938(play, EnTrt_GetItemTextId(this));
+ Message_ContinueTextbox(play, EnTrt_GetItemTextId(this));
}
}
@@ -1081,7 +1081,7 @@ void EnTrt_CanBuy(EnTrt* this, PlayState* play) {
item = this->items[this->cursorIndex];
item->restockFunc(play, item);
this->actionFunc = this->prevActionFunc;
- func_80151938(play, EnTrt_GetItemTextId(this));
+ Message_ContinueTextbox(play, EnTrt_GetItemTextId(this));
}
}
@@ -1090,7 +1090,7 @@ void EnTrt_BuyItemWithFanfare(EnTrt* this, PlayState* play) {
this->actor.parent = NULL;
this->actionFunc = EnTrt_SetupItemGiven;
} else {
- Actor_PickUp(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, this->items[this->cursorIndex]->getItemId, 300.0f, 300.0f);
}
}
@@ -1098,13 +1098,13 @@ void EnTrt_SetupItemGiven(EnTrt* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) {
this->actionFunc = EnTrt_ItemGiven;
if (this->cutsceneState == ENTRT_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookToShopkeeperCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookToShopkeeperCsId;
+ CutsceneManager_Queue(this->csId);
}
- func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
}
}
@@ -1114,7 +1114,7 @@ void EnTrt_ContinueShopping(EnTrt* this, PlayState* play) {
EnGirlA* item;
if (talkState == TEXT_STATE_CHOICE) {
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
if (Message_ShouldAdvance(play)) {
EnTrt_ResetItemPosition(this);
item = this->items[this->cursorIndex];
@@ -1124,10 +1124,10 @@ void EnTrt_ContinueShopping(EnTrt* this, PlayState* play) {
case 0:
func_8019F208();
player->actor.shape.rot.y = BINANG_ROT180(player->actor.shape.rot.y);
- player->stateFlags2 |= 0x20000000;
+ player->stateFlags2 |= PLAYER_STATE2_20000000;
Message_StartTextbox(play, this->textId, &this->actor);
EnTrt_SetupStartShopping(play, this, true);
- func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
break;
case 1:
default:
@@ -1380,27 +1380,27 @@ void EnTrt_OpenEyesThenSetToBlink(EnTrt* this) {
void EnTrt_TalkToShopkeeper(EnTrt* this, PlayState* play) {
u8 talkState = talkState = Message_GetState(&play->msgCtx);
Player* player = GET_PLAYER(play);
- s32 itemGiven;
+ PlayerItemAction itemAction;
if (talkState == TEXT_STATE_5) {
if (Message_ShouldAdvance(play)) {
if ((this->talkOptionTextId == 0x845) || (this->talkOptionTextId == 0x882)) {
- func_80151938(play, 0xFF);
+ Message_ContinueTextbox(play, 0xFF);
} else {
EnTrt_StartShopping(play, this);
}
}
} else if (talkState == TEXT_STATE_16) {
- itemGiven = func_80123810(play);
- if (itemGiven > PLAYER_AP_NONE) {
- if (itemGiven == PLAYER_AP_BOTTLE_MUSHROOM) {
- if (gSaveContext.save.weekEventReg[53] & 8) {
+ itemAction = func_80123810(play);
+ if (itemAction > PLAYER_IA_NONE) {
+ if (itemAction == PLAYER_IA_BOTTLE_MUSHROOM) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_08)) {
player->actor.textId = 0x888;
} else {
player->actor.textId = 0x883;
}
this->textId = player->actor.textId;
- player->exchangeItemId = itemGiven;
+ player->exchangeItemId = itemAction;
this->actionFunc = EnTrt_GetMushroom;
} else {
if (this->flags & ENTRT_GIVEN_MUSHROOM) {
@@ -1411,8 +1411,8 @@ void EnTrt_TalkToShopkeeper(EnTrt* this, PlayState* play) {
this->textId = player->actor.textId;
this->actionFunc = EnTrt_Goodbye;
}
- func_801477B4(play);
- } else if (itemGiven < PLAYER_AP_NONE) {
+ Message_CloseTextbox(play);
+ } else if (itemAction <= PLAYER_IA_MINUS1) {
if (this->flags & ENTRT_GIVEN_MUSHROOM) {
this->textId = 0x88B;
} else {
@@ -1426,8 +1426,8 @@ void EnTrt_TalkToShopkeeper(EnTrt* this, PlayState* play) {
void EnTrt_SetupTalkToShopkeeper(PlayState* play, EnTrt* this) {
this->actionFunc = EnTrt_TalkToShopkeeper;
- func_80151938(play, this->talkOptionTextId);
- func_8011552C(play, 6);
+ Message_ContinueTextbox(play, this->talkOptionTextId);
+ func_8011552C(play, DO_ACTION_DECIDE);
this->stickLeftPrompt.isEnabled = false;
this->stickRightPrompt.isEnabled = false;
}
@@ -1440,30 +1440,30 @@ void EnTrt_SetupLookToShopkeeperFromShelf(PlayState* play, EnTrt* this) {
void EnTrt_LookToShopkeeperFromShelf(EnTrt* this, PlayState* play) {
if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING) {
- ActorCutscene_Stop(this->cutscene);
+ CutsceneManager_Stop(this->csId);
this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED;
}
if (this->cutsceneState == ENTRT_CUTSCENESTATE_STOPPED) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- this->cutscene = this->lookToShopkeeperCutscene;
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ this->csId = this->lookToShopkeeperCsId;
+ CutsceneManager_Queue(this->csId);
this->cutsceneState = ENTRT_CUTSCENESTATE_WAITING;
} else if (this->cutsceneState == ENTRT_CUTSCENESTATE_WAITING) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->csId, &this->actor);
this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING;
EnTrt_StartShopping(play, this);
} else {
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
}
}
void EnTrt_InitShopkeeper(EnTrt* this, PlayState* play) {
SkelAnime_InitFlex(play, &this->skelAnime, &gKotakeSkel, &gKotakeSleepingAnim, NULL, NULL, 0);
- if (!(gSaveContext.save.weekEventReg[12] & 8) && !(gSaveContext.save.weekEventReg[84] & 0x40) &&
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_84_40) &&
(gSaveContext.save.day >= 2)) {
this->actor.draw = NULL;
} else {
@@ -1473,13 +1473,13 @@ void EnTrt_InitShopkeeper(EnTrt* this, PlayState* play) {
void EnTrt_InitShop(EnTrt* this, PlayState* play) {
EnTrt_GetCutscenes(this, play);
- this->cutscene = this->lookForwardCutscene;
+ this->csId = this->lookForwardCutscene;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f);
EnTrt_InitShopkeeper(this, play);
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
this->actor.colChkInfo.cylRadius = 50;
this->timer = Rand_S16Offset(40, 20);
- if (!(gSaveContext.save.weekEventReg[12] & 8) && !(gSaveContext.save.weekEventReg[84] & 0x40) &&
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_84_40) &&
gSaveContext.save.day >= 2) {
this->textId = 0x84A;
this->actionFunc = EnTrt_ShopkeeperGone;
@@ -1545,7 +1545,7 @@ void EnTrt_InitShop(EnTrt* this, PlayState* play) {
this->blinkTimer = 20;
this->eyeTexIndex = 0;
this->blinkFunc = EnTrt_EyesClosed;
- if (gSaveContext.save.weekEventReg[53] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_08)) {
this->flags |= ENTRT_GIVEN_MUSHROOM;
}
@@ -1553,10 +1553,10 @@ void EnTrt_InitShop(EnTrt* this, PlayState* play) {
}
void EnTrt_GetCutscenes(EnTrt* this, PlayState* play) {
- this->lookForwardCutscene = this->actor.cutscene;
- this->lookToShelfCutscene = ActorCutscene_GetAdditionalCutscene(this->lookForwardCutscene);
- this->lookToShopkeeperCutscene = ActorCutscene_GetAdditionalCutscene(this->lookToShelfCutscene);
- this->getMushroomCutscene = ActorCutscene_GetAdditionalCutscene(this->lookToShopkeeperCutscene);
+ this->lookForwardCutscene = this->actor.csId;
+ this->lookToShelfCsId = CutsceneManager_GetAdditionalCsId(this->lookForwardCutscene);
+ this->lookToShopkeeperCsId = CutsceneManager_GetAdditionalCsId(this->lookToShelfCsId);
+ this->getMushroomCsId = CutsceneManager_GetAdditionalCsId(this->lookToShopkeeperCsId);
}
void EnTrt_DrawCursor(PlayState* play, EnTrt* this, f32 x, f32 y, f32 z, u8 drawCursor) {
@@ -1711,7 +1711,7 @@ void EnTrt_TrackPlayer(EnTrt* this, PlayState* play) {
this->headYaw = CLAMP(this->headYaw, -0x38E0, 0x38E0);
playerPos = player->actor.world.pos;
- playerPos.y = player->bodyPartsPos[7].y + 3.0f;
+ playerPos.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
pos = this->actor.world.pos;
Math_SmoothStepToS(&this->headPitch, Math_Vec3f_Pitch(&pos, &playerPos), 4, 0x1C70, 1);
this->headPitch = CLAMP(this->headPitch, -0x1C70, 0x1C70);
diff --git a/src/overlays/actors/ovl_En_Trt/z_en_trt.h b/src/overlays/actors/ovl_En_Trt/z_en_trt.h
index 9cbf5d51c..dfa3ba5c4 100644
--- a/src/overlays/actors/ovl_En_Trt/z_en_trt.h
+++ b/src/overlays/actors/ovl_En_Trt/z_en_trt.h
@@ -35,8 +35,8 @@ typedef struct EnTrt {
/* 0x3D6 */ s16 blinkTimer;
/* 0x3D8 */ s16 eyeTexIndex;
/* 0x3DC */ EnTrtBlinkFunc blinkFunc;
- /* 0x3E0 */ s16 cutscene;
- /* 0x3E2 */ s16 tmpGetMushroomCutscene;
+ /* 0x3E0 */ s16 csId;
+ /* 0x3E2 */ s16 tmpGetMushroomCsId;
/* 0x3E4 */ Vec3f cursorPos;
/* 0x3F0 */ Color_RGBAu32 cursorColor;
/* 0x400 */ u8 drawCursor;
@@ -46,9 +46,9 @@ typedef struct EnTrt {
/* 0x408 */ u16 prevTextId;
/* 0x40A */ u16 talkOptionTextId;
/* 0x40C */ s16 lookForwardCutscene;
- /* 0x40E */ s16 lookToShelfCutscene;
- /* 0x410 */ s16 lookToShopkeeperCutscene;
- /* 0x412 */ s16 getMushroomCutscene;
+ /* 0x40E */ s16 lookToShelfCsId;
+ /* 0x410 */ s16 lookToShopkeeperCsId;
+ /* 0x412 */ s16 getMushroomCsId;
/* 0x414 */ UNK_TYPE1 pad414[0x2];
/* 0x416 */ Vec3s headRot;
/* 0x41C */ Vec3f headPos;
@@ -64,6 +64,4 @@ typedef enum {
/* 3 */ ENTRT_CUTSCENESTATE_PLAYING
} EnTrtCutsceneState;
-extern const ActorInit En_Trt_InitVars;
-
#endif // Z_EN_TRT_H
diff --git a/src/overlays/actors/ovl_En_Trt2/overlay.cfg b/src/overlays/actors/ovl_En_Trt2/overlay.cfg
deleted file mode 100644
index 60a280872..000000000
--- a/src/overlays/actors/ovl_En_Trt2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Trt2
-z_en_trt2.c
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 ac6a4f476..67f52e064 100644
--- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c
+++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c
@@ -52,7 +52,7 @@ static AnimationInfoS sAnimationInfo[] = {
{ &gKotakeFlyAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
};
-const ActorInit En_Trt2_InitVars = {
+ActorInit En_Trt2_InitVars = {
ACTOR_EN_TRT2,
ACTORCAT_NPC,
FLAGS,
@@ -144,13 +144,13 @@ void func_80AD341C(EnTrt2* this, PlayState* play) {
}
void func_80AD349C(EnTrt2* this) {
- if ((gSaveContext.save.weekEventReg[85] & 0x10) && !(gSaveContext.save.weekEventReg[84] & 0x40)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_85_10) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_84_40)) {
this->unk_3A8 = 0x88F;
} else if (this->unk_3A8 == 0) {
this->unk_3A8 = 0x84B;
- } else if (gSaveContext.save.weekEventReg[16] & 0x10) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) {
this->unk_3A8 = 0x838;
- } else if (gSaveContext.save.weekEventReg[17] & 1) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_17_01)) {
this->unk_3A8 = 0x84D;
} else {
this->unk_3A8 = 0x849;
@@ -164,7 +164,7 @@ void func_80AD3530(EnTrt2* this, PlayState* play) {
func_80AD46F8(this);
if (this->path != NULL) {
phi_a1 = func_80AD48F8(this->path, this->unk_1E4, &this->actor.world.pos, &sp30);
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
phi_a1 = this->actor.wallYaw;
}
Math_SmoothStepToS(&this->actor.world.rot.y, phi_a1, 4, 1000, 1);
@@ -176,7 +176,7 @@ void func_80AD3530(EnTrt2* this, PlayState* play) {
this->unk_1E4++;
}
}
- Math_ApproachF(&this->actor.speedXZ, 1.5f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 1.5f, 0.2f, 1.0f);
}
Actor_MoveWithGravity(&this->actor);
@@ -189,15 +189,15 @@ void func_80AD3530(EnTrt2* this, PlayState* play) {
}
void func_80AD3664(EnTrt2* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->unk_3DA)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_3DA, &this->actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->actor);
if (this->unk_3D9 == 0) {
this->unk_3B2 = 1;
} else {
this->unk_3B2 = 2;
}
} else {
- ActorCutscene_SetIntentToPlay(this->unk_3DA);
+ CutsceneManager_Queue(this->csId);
return;
}
func_800B9010(&this->actor, NA_SE_EN_KOTAKE_FLY - SFX_FLAG);
@@ -217,9 +217,9 @@ void func_80AD36EC(EnTrt2* this, PlayState* play) {
this->unk_3D9 = 1;
this->actor.velocity.y = 0.0f;
this->path = SubS_GetPathByIndex(play, this->path->unk1, -1);
- ActorCutscene_Stop(this->unk_3DA);
- this->unk_3DA = ActorCutscene_GetAdditionalCutscene(this->unk_3DA);
- ActorCutscene_SetIntentToPlay(this->unk_3DA);
+ CutsceneManager_Stop(this->csId);
+ this->csId = CutsceneManager_GetAdditionalCsId(this->csId);
+ CutsceneManager_Queue(this->csId);
this->unk_3B2 = 0;
} else {
this->unk_1E4++;
@@ -229,7 +229,7 @@ void func_80AD36EC(EnTrt2* this, PlayState* play) {
Actor_MoveWithGravity(&this->actor);
func_800B9010(&this->actor, NA_SE_EN_KOTAKE_FLY - SFX_FLAG);
if ((this->actor.shape.rot.y >= 0x2800) && (this->actor.shape.rot.y < 0x3800)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KOTAKE_ROLL);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KOTAKE_ROLL);
}
}
@@ -243,7 +243,7 @@ void func_80AD381C(EnTrt2* this, PlayState* play) {
this->actor.flags |= ACTOR_FLAG_10;
}
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -251,7 +251,7 @@ void func_80AD38B8(EnTrt2* this, PlayState* play) {
Vec3s sp30;
if (this->unk_3D9 == 2) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
if (this->path != NULL) {
@@ -262,22 +262,22 @@ void func_80AD38B8(EnTrt2* this, PlayState* play) {
this->actor.world.rot.x = -this->actor.shape.rot.x;
if (func_80AD475C(this, this->path, this->unk_1E4)) {
if (this->unk_1E4 >= (this->path->count - 1)) {
- ActorCutscene_Stop(this->unk_3DA);
+ CutsceneManager_Stop(this->csId);
this->unk_3D9 = 2;
} else {
this->unk_1E4++;
}
}
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
if (this->unk_1E4 >= (this->path->count - 1)) {
- ActorCutscene_Stop(this->unk_3DA);
+ CutsceneManager_Stop(this->csId);
this->unk_3D9 = 2;
} else {
sp30.y = this->actor.wallYaw;
}
}
- Math_ApproachF(&this->actor.speedXZ, 5.0f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 5.0f, 0.2f, 1.0f);
}
Actor_MoveWithoutGravity(&this->actor);
@@ -286,8 +286,8 @@ void func_80AD38B8(EnTrt2* this, PlayState* play) {
void func_80AD3A24(EnTrt2* this, PlayState* play) {
func_80AD46F8(this);
- if (this->actor.speedXZ > 0.05f) {
- Math_ApproachF(&this->actor.speedXZ, 0.0f, 0.2f, 1.0f);
+ if (this->actor.speed > 0.05f) {
+ Math_ApproachF(&this->actor.speed, 0.0f, 0.2f, 1.0f);
} else if (DECR(this->unk_3AE) == 0) {
this->unk_3AE = Rand_S16Offset(100, 50);
EnTrt2_ChangeAnim(&this->skelAnime, sAnimationInfo, TRT2_ANIM_HOVER);
@@ -332,7 +332,7 @@ void func_80AD3BE4(EnTrt2* this, PlayState* play) {
void func_80AD3C94(EnTrt2* this, PlayState* play) {
if (this->actor.world.pos.y < 5.0f) {
func_80AD4A78(this, play);
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->unk_3B2 = 0xF;
}
}
@@ -378,7 +378,7 @@ void func_80AD3E34(EnTrt2* this, PlayState* play) {
play->msgCtx.stateTimer = 4;
this->unk_3B2 = 12;
} else {
- gSaveContext.save.weekEventReg[85] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_85_10);
this->unk_3A8 = 0x88E;
Message_StartTextbox(play, this->unk_3A8, &this->actor);
this->unk_3B2 = 10;
@@ -391,11 +391,11 @@ void func_80AD3EF0(EnTrt2* this, PlayState* play) {
if (talkState == TEXT_STATE_DONE) {
if (Message_ShouldAdvance(play)) {
- if ((Inventory_HasEmptyBottle() && !(gSaveContext.save.weekEventReg[84] & 0x40)) ||
- !(gSaveContext.save.weekEventReg[12] & 0x10)) {
+ if ((Inventory_HasEmptyBottle() && !CHECK_WEEKEVENTREG(WEEKEVENTREG_84_40)) ||
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_12_10)) {
this->unk_3B2 = 12;
} else {
- gSaveContext.save.weekEventReg[85] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_85_10);
this->unk_3A8 = 0x88E;
Message_StartTextbox(play, this->unk_3A8, &this->actor);
this->unk_3B2 = 10;
@@ -410,22 +410,22 @@ void func_80AD3EF0(EnTrt2* this, PlayState* play) {
void func_80AD3FF4(EnTrt2* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
- if (!(gSaveContext.save.weekEventReg[12] & 0x10)) {
- gSaveContext.save.weekEventReg[12] |= 0x10;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_10)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_12_10);
}
- gSaveContext.save.weekEventReg[84] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_84_40);
this->actor.parent = NULL;
this->unk_3B2 = 14;
- } else if (gSaveContext.save.weekEventReg[12] & 0x10) {
- Actor_PickUp(&this->actor, play, GI_POTION_RED, 300.0f, 300.0f);
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_10)) {
+ Actor_OfferGetItem(&this->actor, play, GI_POTION_RED, 300.0f, 300.0f);
} else {
- Actor_PickUp(&this->actor, play, GI_POTION_RED_BOTTLE, 300.0f, 300.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_POTION_RED_BOTTLE, 300.0f, 300.0f);
}
}
void func_80AD40AC(EnTrt2* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) {
- func_800B85E0(&this->actor, play, 400.0f, -1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
this->unk_3B2 = 13;
}
}
@@ -433,10 +433,10 @@ void func_80AD40AC(EnTrt2* this, PlayState* play) {
void func_80AD4110(EnTrt2* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->unk_3A8 = 0x84C;
- func_80151938(play, this->unk_3A8);
+ Message_ContinueTextbox(play, this->unk_3A8);
this->unk_3B2 = 10;
} else {
- func_800B85E0(&this->actor, play, 400.0f, -1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
}
}
@@ -466,23 +466,23 @@ void func_80AD417C(EnTrt2* this, PlayState* play) {
void func_80AD4298(EnTrt2* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (ActorCutscene_GetCanPlayNext(this->unk_3DA)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_3DA, &this->actor);
- player->stateFlags1 |= 0x20;
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->actor);
+ player->stateFlags1 |= PLAYER_STATE1_20;
this->unk_3B2 = 6;
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- ActorCutscene_SetIntentToPlay(this->unk_3DA);
+ CutsceneManager_Queue(this->csId);
}
}
void func_80AD431C(EnTrt2* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- player->stateFlags1 &= ~0x20;
- Actor_MarkForDeath(&this->actor);
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
+ Actor_Kill(&this->actor);
}
void func_80AD434C(EnTrt2* this, PlayState* play) {
@@ -492,7 +492,7 @@ void func_80AD434C(EnTrt2* this, PlayState* play) {
if (this->actor.world.pos.y > 200.0f) {
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
this->unk_3B2 = 0x13;
- ActorCutscene_Stop(this->unk_3DA);
+ CutsceneManager_Stop(this->csId);
} else {
s32 i;
Vec3f sp68;
@@ -514,7 +514,7 @@ void func_80AD434C(EnTrt2* this, PlayState* play) {
Actor_MoveWithGravity(&this->actor);
if ((this->actor.shape.rot.y >= 0x2800) && (this->actor.shape.rot.y < 0x3800)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KOTAKE_ROLL);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KOTAKE_ROLL);
}
}
@@ -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, RADF_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C);
+ func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(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;
@@ -615,7 +615,7 @@ s16 func_80AD48F8(Path* path, s32 arg1, Vec3f* arg2, f32* arg3) {
phi_f12 = 0.0f;
}
*arg3 = SQ(phi_f14) + SQ(phi_f12);
- return RADF_TO_BINANG(Math_Acot2F(phi_f12, phi_f14));
+ return RAD_TO_BINANG(Math_Atan2F_XY(phi_f12, phi_f14));
}
f32 func_80AD49B8(Path* path, s32 arg1, Vec3f* arg2, Vec3s* arg3) {
@@ -663,10 +663,10 @@ s32 func_80AD4B4C(EnTrt2* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
sp24 = true;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
func_80AD349C(this);
this->unk_3B4 = this->unk_3B2;
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
if ((player->transformation != PLAYER_FORM_HUMAN) && (player->transformation != PLAYER_FORM_FIERCE_DEITY)) {
this->unk_3A8 = 0x84F;
}
@@ -686,7 +686,7 @@ s32 func_80AD4B4C(EnTrt2* this, PlayState* play) {
}
s32 func_80AD4C4C(EnTrt2* this) {
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
if (this->actor.xzDistToPlayer < 100.0f) {
return true;
}
@@ -700,9 +700,10 @@ s32 func_80AD4CCC(EnTrt2* this, PlayState* play) {
s16 sp1E = this->actor.yawTowardsPlayer - this->actor.shape.rot.y;
Player* player = GET_PLAYER(play);
- if (((this->unk_3B2 == 4) || (this->unk_3B2 == 5)) && this->actor.isTargeted && !(this->actor.bgCheckFlags & 1) &&
+ if (((this->unk_3B2 == 4) || (this->unk_3B2 == 5)) && this->actor.isTargeted &&
+ !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) &&
((player->transformation == PLAYER_FORM_HUMAN) || (player->transformation == PLAYER_FORM_FIERCE_DEITY))) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.velocity.y = 1.5f;
this->unk_3B2 = 16;
return true;
@@ -737,39 +738,39 @@ void func_80AD4DB4(EnTrt2* this, PlayState* play) {
this->unk_3C0 = 0;
this->unk_3D8 = false;
- this->unk_3DA = this->actor.cutscene;
+ this->csId = this->actor.csId;
this->unk_3B6 = 20;
this->unk_3B8 = 0;
this->unk_3BC = func_80AD4608;
- if (gSaveContext.save.weekEventReg[12] & 8) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_08)) {
+ Actor_Kill(&this->actor);
return;
}
- if (gSaveContext.save.weekEventReg[84] & 0x40) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_40)) {
+ Actor_Kill(&this->actor);
return;
}
if ((play->sceneId == SCENE_20SICHITAI) || (play->sceneId == SCENE_20SICHITAI2)) {
if (gSaveContext.save.day == 2) {
- if (!(gSaveContext.save.weekEventReg[15] & 0x80)) {
- gSaveContext.save.weekEventReg[15] |= 0x80;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_15_80)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_15_80);
this->unk_3B2 = 3;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
} else if (gSaveContext.save.day == 2) {
- if (gSaveContext.save.weekEventReg[15] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_15_80)) {
this->unk_3B2 = 4;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
} else if (gSaveContext.save.day == 3) {
@@ -791,7 +792,7 @@ void func_80AD4FE4(EnTrt2* this, PlayState* play) {
Actor_MoveWithGravity(&this->actor);
if (play->sceneId != SCENE_20SICHITAI) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 26.0f, 10.0f, 0.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 26.0f, 10.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
}
Actor_SetFocus(&this->actor, 90.0f);
@@ -850,9 +851,9 @@ void func_80AD5234(EnTrt2* this, PlayState* play) {
sp40 = player->actor.world.pos;
if (this->unk_3B2 == 8) {
- sp40.y = player->bodyPartsPos[7].y + 3.0f;
+ sp40.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
} else {
- sp40.y = player->bodyPartsPos[7].y + 45.0f;
+ sp40.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 45.0f;
}
sp34 = this->actor.world.pos;
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 da5c6fa9c..f30f41d80 100644
--- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.h
+++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.h
@@ -38,9 +38,7 @@ typedef struct EnTrt2 {
/* 0x3D6 */ s16 unk_3D6;
/* 0x3D8 */ u8 unk_3D8;
/* 0x3D9 */ u8 unk_3D9;
- /* 0x3DA */ s16 unk_3DA;
+ /* 0x3DA */ s16 csId;
} EnTrt2; // size = 0x3DC
-extern const ActorInit En_Trt2_InitVars;
-
#endif // Z_EN_TRT2_H
diff --git a/src/overlays/actors/ovl_En_Tru/overlay.cfg b/src/overlays/actors/ovl_En_Tru/overlay.cfg
deleted file mode 100644
index 49e1ffdd9..000000000
--- a/src/overlays/actors/ovl_En_Tru/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Tru
-z_en_tru.c
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 c54d924df..bb146784d 100644
--- a/src/overlays/actors/ovl_En_Tru/z_en_tru.c
+++ b/src/overlays/actors/ovl_En_Tru/z_en_tru.c
@@ -76,7 +76,7 @@ static UNK_TYPE D_80A889A4[] = {
0x550C1000,
};
-const ActorInit En_Tru_InitVars = {
+ActorInit En_Tru_InitVars = {
ACTOR_EN_TRU,
ACTORCAT_NPC,
FLAGS,
@@ -465,7 +465,7 @@ s32 func_80A869DC(EnTru* this, PlayState* play) {
Math_ApproachS(&this->unk_368, this->actor.yawTowardsPlayer - this->actor.shape.rot.y, 4, 0x2AA8);
this->unk_368 = CLAMP(this->unk_368, -0x1FFE, 0x1FFE);
Math_Vec3f_Copy(&sp38, &player->actor.world.pos);
- sp38.y = player->bodyPartsPos[7].y + 3.0f;
+ sp38.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
Math_Vec3f_Copy(&sp2C, &this->actor.focus.pos);
sp2C.y -= 30.0f;
Math_ApproachS(&this->unk_366, Math_Vec3f_Pitch(&sp2C, &sp38), 4, 0x2AA8);
@@ -671,11 +671,11 @@ UNK_TYPE* func_80A871E0(EnTru* this, PlayState* play) {
return D_80A88924;
}
- if (!(this->unk_34E & 0x40) && !(gSaveContext.save.weekEventReg[16] & 0x10)) {
+ if (!(this->unk_34E & 0x40) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) {
return D_80A88918;
}
- if ((this->unk_34E & 0x1000) && !(gSaveContext.save.weekEventReg[16] & 0x10)) {
+ if ((this->unk_34E & 0x1000) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) {
return D_80A88910;
}
@@ -736,7 +736,7 @@ s32 func_80A87400(EnTru* this, PlayState* play) {
this->unk_360 = CLAMP(this->unk_360 + 2000, 0, 0x4000);
Math_ApproachF(&this->unk_35C, 30.0f, 0.08f, 1000.0f);
- Math_ApproachF(&this->actor.speedXZ, 30.0f, 0.2f, 1000.0f);
+ Math_ApproachF(&this->actor.speed, 30.0f, 0.2f, 1000.0f);
if (this->path != NULL) {
sp4C = Lib_SegmentedToVirtual(this->path->points);
@@ -770,8 +770,8 @@ s32 func_80A875AC(Actor* thisx, PlayState* play) {
switch (this->unk_364) {
case 0:
- if ((this->unk_34E & 0x40) || (gSaveContext.save.weekEventReg[16] & 0x10)) {
- this->unk_374 = this->actor.cutscene;
+ if ((this->unk_34E & 0x40) || CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) {
+ this->csId = this->actor.csId;
this->unk_364++;
} else {
this->unk_364++;
@@ -780,14 +780,14 @@ s32 func_80A875AC(Actor* thisx, PlayState* play) {
}
case 1:
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->unk_374);
- } else if (ActorCutscene_GetCanPlayNext(this->unk_374)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_374, &this->actor);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csId);
+ } else if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->actor);
this->unk_364++;
} else {
- ActorCutscene_SetIntentToPlay(this->unk_374);
+ CutsceneManager_Queue(this->csId);
}
break;
@@ -827,7 +827,7 @@ s32 func_80A875AC(Actor* thisx, PlayState* play) {
s32 func_80A8777C(Actor* thisx, PlayState* play) {
EnTru* this = THIS;
s32 ret = 0;
- s32 itemActionParam;
+ PlayerItemAction itemAction;
switch (Message_GetState(&play->msgCtx)) {
case TEXT_STATE_CHOICE:
@@ -837,10 +837,11 @@ s32 func_80A8777C(Actor* thisx, PlayState* play) {
}
// Fallthrough
case TEXT_STATE_16:
- itemActionParam = func_80123810(play);
- if ((itemActionParam == PLAYER_AP_BOTTLE_POTION_RED) || (itemActionParam == PLAYER_AP_BOTTLE_POTION_BLUE)) {
+ itemAction = func_80123810(play);
+
+ if ((itemAction == PLAYER_IA_BOTTLE_POTION_RED) || (itemAction == PLAYER_IA_BOTTLE_POTION_BLUE)) {
this->unk_34E |= 8;
- if (itemActionParam == PLAYER_AP_BOTTLE_POTION_RED) {
+ if (itemAction == PLAYER_IA_BOTTLE_POTION_RED) {
this->unk_390 = 1;
} else {
this->unk_390 = 2;
@@ -848,9 +849,9 @@ s32 func_80A8777C(Actor* thisx, PlayState* play) {
this->unk_378 = func_80A87880;
this->unk_364 = 0;
ret = 1;
- } else if (itemActionParam < PLAYER_AP_NONE) {
+ } else if (itemAction <= PLAYER_IA_MINUS1) {
ret = 3;
- } else if (itemActionParam != PLAYER_AP_NONE) {
+ } else if (itemAction != PLAYER_IA_NONE) {
ret = 2;
}
break;
@@ -866,19 +867,19 @@ s32 func_80A87880(Actor* thisx, PlayState* play) {
switch (this->unk_364) {
case 0:
- ActorCutscene_Stop(this->unk_374);
- this->unk_374 = ActorCutscene_GetAdditionalCutscene(this->unk_374);
+ CutsceneManager_Stop(this->csId);
+ this->csId = CutsceneManager_GetAdditionalCsId(this->csId);
this->unk_364++;
case 1:
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->unk_374);
- } else if (ActorCutscene_GetCanPlayNext(this->unk_374)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_374, &this->actor);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csId);
+ } else if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->actor);
this->unk_364++;
} else {
- ActorCutscene_SetIntentToPlay(this->unk_374);
+ CutsceneManager_Queue(this->csId);
}
break;
@@ -899,7 +900,7 @@ s32 func_80A87880(Actor* thisx, PlayState* play) {
} else if (Animation_OnFrame(&this->skelAnime, 12.0f) && !(this->unk_34E & 0x800)) {
this->unk_34E |= 0x400;
this->unk_34E |= 0x800;
- Player_SetModels(player, 3);
+ Player_SetModels(player, PLAYER_MODELGROUP_DEFAULT);
}
break;
@@ -912,11 +913,11 @@ s32 func_80A87880(Actor* thisx, PlayState* play) {
Animation_OnFrame(&this->skelAnime, 52.0f)) {
if (Animation_OnFrame(&this->skelAnime, 52.0f)) {
this->unk_34E &= ~0x400;
- func_80123D50(play, player, 18, 21);
+ Player_UpdateBottleHeld(play, player, ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KOUME_DRINK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KOUME_DRINK);
} else if (Animation_OnFrame(&this->skelAnime, 90.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KOUME_REGAIN);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KOUME_REGAIN);
}
if ((this->skelAnime.curFrame > 90.0f) && (this->skelAnime.curFrame < 95.0f)) {
@@ -955,19 +956,19 @@ s32 func_80A87B48(Actor* thisx, PlayState* play) {
sp4C.z = 40.0f;
Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, sp3E, &sp4C, &sp40);
func_80A85620(this->unk_394, &sp40, 2.0f, 0.08f, 60.0f);
- func_8016A268(&play->state, 1, 160, 160, 160, 0);
+ Play_FillScreen(&play->state, true, 160, 160, 160, 0);
this->unk_370 = 20;
this->unk_372 = 10;
this->unk_364++;
} else if (Animation_OnFrame(&this->skelAnime, 22.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KOUME_MAGIC);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KOUME_MAGIC);
func_80A85AA4(this->unk_394, &this->unk_1F8, 1.0f, 0.1f, 40.0f);
}
break;
case 2:
if (DECR(this->unk_370) != 0) {
- MREG(68) = 255.0f - ((fabsf(10.0f - this->unk_370) / 10) * 255.0f);
+ R_PLAY_FILL_SCREEN_ALPHA = 255.0f - ((fabsf(10.0f - this->unk_370) / 10) * 255.0f);
if (this->unk_370 == 9) {
this->actor.shape.shadowDraw = NULL;
this->unk_34E |= (0x200 | 0x8);
@@ -978,7 +979,7 @@ s32 func_80A87B48(Actor* thisx, PlayState* play) {
EnTru_ChangeAnim(this, KOUME_ANIM_HOVER1);
}
} else {
- MREG(64) = 0;
+ R_PLAY_FILL_SCREEN_ON = false;
ret = true;
}
break;
@@ -998,26 +999,26 @@ s32 func_80A87DC0(Actor* thisx, PlayState* play) {
switch (this->unk_364) {
case 0:
- ActorCutscene_Stop(this->unk_374);
- this->unk_374 = ActorCutscene_GetAdditionalCutscene(this->unk_374);
+ CutsceneManager_Stop(this->csId);
+ this->csId = CutsceneManager_GetAdditionalCsId(this->csId);
this->unk_364++;
case 1:
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->unk_374);
- } else if (ActorCutscene_GetCanPlayNext(this->unk_374)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_374, &this->actor);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csId);
+ } else if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->actor);
this->unk_364++;
} else {
- ActorCutscene_SetIntentToPlay(this->unk_374);
+ CutsceneManager_Queue(this->csId);
}
break;
case 2:
AudioSfx_StopById(NA_SE_EN_KOUME_MAGIC);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KOUME_AWAY);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KOUME_LAUGH);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KOUME_AWAY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KOUME_LAUGH);
EnTru_ChangeAnim(this, KOUME_ANIM_TAKE_OFF);
this->skelAnime.baseTransl.y = 0;
this->skelAnime.moveFlags = 2;
@@ -1040,7 +1041,7 @@ s32 func_80A87DC0(Actor* thisx, PlayState* play) {
case 4:
if (func_80A87400(this, play) || (DECR(this->unk_362) == 0)) {
ret = true;
- gSaveContext.save.weekEventReg[12] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_12_08);
}
break;
}
@@ -1057,7 +1058,7 @@ s32 func_80A87DC0(Actor* thisx, PlayState* play) {
void func_80A87FD0(EnTru* this, PlayState* play) {
if (this->actor.draw != NULL) {
- if ((this->unk_34E & 0x80) || (gSaveContext.save.weekEventReg[16] & 0x10)) {
+ if ((this->unk_34E & 0x80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) {
if (func_80A873B8(this)) {
SubS_UpdateFlags(&this->unk_34E, 3, 7);
} else {
@@ -1080,7 +1081,7 @@ void func_80A87FD0(EnTru* this, PlayState* play) {
EnTru_ChangeAnim(this, KOUME_ANIM_TRY_GET_UP);
}
}
- } else if (!(gSaveContext.save.weekEventReg[16] & 0x10) && (fabsf(this->actor.playerHeightRel) < 10.0f) &&
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10) && (fabsf(this->actor.playerHeightRel) < 10.0f) &&
(this->actor.xzDistToPlayer < 140.0f)) {
SubS_UpdateFlags(&this->unk_34E, 4, 7);
this->unk_34E |= 0x1040;
@@ -1101,16 +1102,16 @@ void func_80A881E0(EnTru* this, PlayState* play) {
this->unk_34E |= 0x80;
}
- if (ActorCutscene_GetCurrentIndex() != -1) {
- ActorCutscene_Stop(ActorCutscene_GetCurrentIndex());
+ if (CutsceneManager_GetCurrentCsId() != CS_ID_NONE) {
+ CutsceneManager_Stop(CutsceneManager_GetCurrentCsId());
}
- if (!(this->unk_34E & 0x40) && !(gSaveContext.save.weekEventReg[16] & 0x10)) {
+ if (!(this->unk_34E & 0x40) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) {
EnTru_ChangeAnim(this, KOUME_ANIM_INJURED_LYING_DOWN);
} else if (this->unk_34E & 0x80) {
EnTru_ChangeAnim(this, KOUME_ANIM_INJURED_LYING_DOWN);
func_80A86460(this);
- } else if (gSaveContext.save.weekEventReg[16] & 0x10) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) {
EnTru_ChangeAnim(this, KOUME_ANIM_INJURED_HEAD_UP_MORPH);
}
@@ -1118,7 +1119,7 @@ void func_80A881E0(EnTru* this, PlayState* play) {
this->unk_34E &= ~(0x1000 | 0x8);
this->unk_34E |= 0x10;
this->actor.shape.rot.y = this->actor.world.rot.y;
- this->actor.flags &= ~ACTOR_FLAG_100;
+ this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED;
this->unk_1E8 = 0;
this->actionFunc = func_80A87FD0;
}
@@ -1127,8 +1128,8 @@ void func_80A881E0(EnTru* this, PlayState* play) {
void EnTru_Init(Actor* thisx, PlayState* play) {
EnTru* this = THIS;
- if ((gSaveContext.save.entrance != 0xC200) || (gSaveContext.save.weekEventReg[12] & 8)) {
- Actor_MarkForDeath(&this->actor);
+ if ((gSaveContext.save.entrance != ENTRANCE(WOODS_OF_MYSTERY, 0)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_12_08)) {
+ Actor_Kill(&this->actor);
return;
}
@@ -1147,14 +1148,14 @@ void EnTru_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->actor, 0.008f);
this->unk_34E = 0;
- if (gSaveContext.save.weekEventReg[16] & 0x10) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) {
EnTru_ChangeAnim(this, KOUME_ANIM_INJURED_HEAD_UP);
} else {
- this->unk_388 = PLAYER_AP_NONE;
+ this->unk_388 = PLAYER_IA_NONE;
}
this->actionFunc = func_80A87FD0;
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
}
void EnTru_Destroy(Actor* thisx, PlayState* play) {
@@ -1176,7 +1177,7 @@ void EnTru_Update(Actor* thisx, PlayState* play) {
func_80A86DB8(this);
radius = this->collider.dim.worldSphere.radius + 30;
- this->unk_388 = !(this->unk_34E & 0x80) ? PLAYER_AP_NONE : PLAYER_AP_NONE;
+ this->unk_388 = !(this->unk_34E & 0x80) ? PLAYER_IA_NONE : PLAYER_IA_NONE;
func_8013C964(&this->actor, play, radius, 20.0f, this->unk_388, this->unk_34E & 7);
func_80A8697C(this, play);
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 711d5aeb6..c6d2af00c 100644
--- a/src/overlays/actors/ovl_En_Tru/z_en_tru.h
+++ b/src/overlays/actors/ovl_En_Tru/z_en_tru.h
@@ -49,7 +49,7 @@ typedef struct EnTru {
/* 0x36E */ s16 eyeTexIndex;
/* 0x370 */ s16 unk_370;
/* 0x372 */ s16 unk_372;
- /* 0x374 */ s16 unk_374;
+ /* 0x374 */ s16 csId;
/* 0x378 */ EnTruUnkFunc unk_378;
/* 0x37C */ s32 animIndex;
/* 0x380 */ UNK_TYPE1 unk380[0x4];
@@ -60,6 +60,4 @@ typedef struct EnTru {
/* 0x394 */ EnTruUnkStruct unk_394[30];
} EnTru; // size = 0x934
-extern const ActorInit En_Tru_InitVars;
-
#endif // Z_EN_TRU_H
diff --git a/src/overlays/actors/ovl_En_Tru_Mt/overlay.cfg b/src/overlays/actors/ovl_En_Tru_Mt/overlay.cfg
deleted file mode 100644
index 8c432043f..000000000
--- a/src/overlays/actors/ovl_En_Tru_Mt/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Tru_Mt
-z_en_tru_mt.c
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 69725414a..09ec80172 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
@@ -40,7 +40,7 @@ typedef enum {
/* 0x10 */ KOUME_MT_ANIM_MAX
} KoumeMtAnimation;
-const ActorInit En_Tru_Mt_InitVars = {
+ActorInit En_Tru_Mt_InitVars = {
ACTOR_EN_TRU_MT,
ACTORCAT_NPC,
FLAGS,
@@ -180,13 +180,13 @@ s32 func_80B761FC(EnTruMt* this, PlayState* play) {
this->collider.base.acFlags &= ~AC_HIT;
if (this->unk_3A4 == 0) {
this->unk_3A4 = 1;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KOUME_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KOUME_DAMAGE);
} else {
this->unk_3A4 = 0;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KOUME_DAMAGE2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_KOUME_DAMAGE2);
}
- play->interfaceCtx.unk_25E = 1;
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 25);
+ play->interfaceCtx.minigameHiddenPoints = 1;
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 25);
return true;
}
}
@@ -247,13 +247,13 @@ void func_80B76440(EnTruMt* this, PlayState* play) {
s16 temp_v1 = this->unk_394 - Math_Vec3f_Yaw(&this->unk_398, &this->actor.world.pos);
if ((temp_v1 <= -0x2000) || (temp_v1 >= 0x2000)) {
- Math_ApproachF(&this->actor.speedXZ, 7.0f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 7.0f, 0.2f, 1.0f);
} else if (this->actor.xzDistToPlayer < 300.0f) {
- Math_ApproachF(&this->actor.speedXZ, 7.0f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 7.0f, 0.2f, 1.0f);
} else if (this->actor.xzDistToPlayer > 500.0f) {
- Math_ApproachF(&this->actor.speedXZ, 2.5f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 2.5f, 0.2f, 1.0f);
} else {
- Math_ApproachF(&this->actor.speedXZ, 4.0f, 0.2f, 1.0f);
+ Math_ApproachF(&this->actor.speed, 4.0f, 0.2f, 1.0f);
}
}
}
@@ -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, RADF_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C);
+ func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(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;
}
@@ -318,7 +318,7 @@ void func_80B7679C(EnTruMt* this, PlayState* play) {
this->unk_34A = CLAMP(this->unk_34A, -0x38E0, 0x38E0);
sp40 = player->actor.world.pos;
- sp40.y = player->bodyPartsPos[7].y + 3.0f;
+ sp40.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
sp34 = this->actor.world.pos;
sp34.y += 30.0f;
@@ -335,27 +335,27 @@ s32 func_80B768F0(EnTruMt* this, PlayState* play) {
}
void func_80B76924(EnTruMt* this) {
- this->unk_38E.z = Math_SinS(this->unk_388) * 30.0f * (0x10000 / 360.0f);
+ this->unk_38E.z = DEG_TO_BINANG(Math_SinS(this->unk_388) * 30.0f);
this->unk_388 += 0x400;
}
void func_80B76980(EnTruMt* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (gSaveContext.unk_3F3C >= 10) {
+ if (gSaveContext.minigameHiddenScore >= 10) {
Message_StartTextbox(play, 0x87F, &this->actor);
- gSaveContext.eventInf[3] |= 0x40;
- gSaveContext.eventInf[4] |= 1;
- player->stateFlags3 &= ~0x400;
- this->actor.speedXZ = 0.0f;
+ SET_EVENTINF(EVENTINF_36);
+ SET_EVENTINF(EVENTINF_40);
+ player->stateFlags3 &= ~PLAYER_STATE3_400;
+ this->actor.speed = 0.0f;
this->actionFunc = func_80B76BB8;
- } else if (gSaveContext.eventInf[4] & 1) {
+ } else if (CHECK_EVENTINF(EVENTINF_40)) {
u32 score = gSaveContext.minigameScore;
- if (((gSaveContext.save.unk_EE8 & 0xFFFF0000) >> 0x10) < score) {
- gSaveContext.save.unk_EE8 =
- ((gSaveContext.minigameScore & 0xFFFF) << 0x10) | (gSaveContext.save.unk_EE8 & 0xFFFF);
- gSaveContext.eventInf[3] |= 0x80;
+ if (((gSaveContext.save.saveInfo.unk_EC4 & 0xFFFF0000) >> 0x10) < score) {
+ gSaveContext.save.saveInfo.unk_EC4 =
+ ((gSaveContext.minigameScore & 0xFFFF) << 0x10) | (gSaveContext.save.saveInfo.unk_EC4 & 0xFFFF);
+ SET_EVENTINF(EVENTINF_37);
}
}
}
@@ -366,7 +366,7 @@ void func_80B76A64(EnTruMt* this, PlayState* play) {
func_80B76924(this);
func_80B76980(this, play);
- player->stateFlags3 |= 0x400;
+ player->stateFlags3 |= PLAYER_STATE3_400;
if (this->path != NULL) {
func_80B76540(this->path, this->unk_36C, &this->actor.world.pos, &sp34);
@@ -381,7 +381,7 @@ void func_80B76A64(EnTruMt* this, PlayState* play) {
if (func_80B76600(this, this->path, this->unk_36C)) {
if (this->unk_36C >= (this->path->count - 1)) {
this->actionFunc = func_80B76C38;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
return;
}
this->unk_36C++;
@@ -394,8 +394,8 @@ void func_80B76BB8(EnTruMt* this, PlayState* play) {
if (Message_GetState(&play->msgCtx) == TEXT_STATE_5) {
if (Message_ShouldAdvance(play)) {
play->nextEntrance = ENTRANCE(TOURIST_INFORMATION, 1);
- play->transitionType = TRANS_TYPE_03;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ play->transitionType = TRANS_TYPE_FADE_WHITE;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
play->transitionTrigger = TRANS_TRIGGER_START;
}
}
@@ -406,20 +406,20 @@ void func_80B76C38(EnTruMt* this, PlayState* play) {
func_80B76924(this);
func_80B76980(this, play);
- player->stateFlags3 |= 0x400;
+ player->stateFlags3 |= PLAYER_STATE3_400;
}
void EnTruMt_Init(Actor* thisx, PlayState* play) {
s32 pad;
EnTruMt* this = THIS;
- if (!(gSaveContext.eventInf[3] & 0x20)) {
- Actor_MarkForDeath(&this->actor);
+ if (!CHECK_EVENTINF(EVENTINF_35)) {
+ Actor_Kill(&this->actor);
return;
}
if (func_80B763C4(this, play)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -435,7 +435,7 @@ void EnTruMt_Init(Actor* thisx, PlayState* play) {
this->actor.targetMode = 0;
Actor_SetScale(&this->actor, 0.008f);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
this->unk_328 = 0;
this->actor.room = -1;
@@ -461,7 +461,7 @@ void EnTruMt_Update(Actor* thisx, PlayState* play) {
func_80B76110(this);
Actor_SetFocus(&this->actor, 34.0f);
- if (!(gSaveContext.eventInf[4] & 1)) {
+ if (!CHECK_EVENTINF(EVENTINF_40)) {
func_80B761FC(this, play);
}
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 54d58326e..b114804d7 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
@@ -41,6 +41,4 @@ typedef struct EnTruMt {
/* 0x3A4 */ u8 unk_3A4;
} EnTruMt; // size = 0x3A8
-extern const ActorInit En_Tru_Mt_InitVars;
-
#endif // Z_EN_TRU_MT_H
diff --git a/src/overlays/actors/ovl_En_Tsn/overlay.cfg b/src/overlays/actors/ovl_En_Tsn/overlay.cfg
deleted file mode 100644
index 7c9110389..000000000
--- a/src/overlays/actors/ovl_En_Tsn/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Tsn
-z_en_tsn.c
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 15d4cf3e5..22ce0600c 100644
--- a/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c
+++ b/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c
@@ -29,7 +29,7 @@ void func_80AE0D10(EnTsn* this, PlayState* play);
void func_80AE0D78(EnTsn* this, PlayState* play);
void func_80AE0F84(Actor* thisx, PlayState* play);
-const ActorInit En_Tsn_InitVars = {
+ActorInit En_Tsn_InitVars = {
ACTOR_EN_TSN,
ACTORCAT_NPC,
FLAGS,
@@ -87,15 +87,15 @@ void func_80ADFCEC(EnTsn* this, PlayState* play) {
switch (ENTSN_GET_F(&this->actor)) {
case ENTSN_F_0:
- if (gSaveContext.save.weekEventReg[26] & 8) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_26_08)) {
+ Actor_Kill(&this->actor);
return;
}
this->actor.textId = 0x106E;
break;
case ENTSN_F_1:
- if (gSaveContext.save.weekEventReg[26] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_26_04)) {
this->actor.textId = 0x1091;
} else {
this->actor.textId = 0x108A;
@@ -103,11 +103,11 @@ void func_80ADFCEC(EnTsn* this, PlayState* play) {
break;
}
- if (gSaveContext.save.weekEventReg[55] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) {
if ((ENTSN_GET_F(&this->actor)) == ENTSN_F_0) {
this->actionFunc = func_80AE0D78;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
return;
}
@@ -116,7 +116,7 @@ void func_80ADFCEC(EnTsn* this, PlayState* play) {
this->unk_220 = 0;
if (this->unk_1D8 == NULL) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else if ((ENTSN_GET_F(&this->actor)) == ENTSN_F_1) {
func_800BC154(play, &play->actorCtx, &this->actor, 6);
}
@@ -144,8 +144,8 @@ void EnTsn_Init(Actor* thisx, PlayState* play) {
this->actor.terminalVelocity = -9.0f;
this->actor.gravity = -1.0f;
- if (gSaveContext.save.weekEventReg[55] & 0x80) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) {
+ Actor_Kill(&this->actor);
}
}
@@ -158,15 +158,15 @@ void EnTsn_Destroy(Actor* thisx, PlayState* play) {
void func_80ADFF84(EnTsn* this, PlayState* play) {
u16 textId;
- if (gSaveContext.save.weekEventReg[26] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_26_08)) {
textId = 0x107E;
} else if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) {
- if (gSaveContext.save.weekEventReg[25] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_80)) {
textId = 0x1083;
} else {
textId = 0x107F;
}
- } else if (gSaveContext.save.weekEventReg[26] & 1) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_26_01)) {
textId = 0x1089;
} else {
textId = 0x1084;
@@ -198,43 +198,43 @@ void func_80AE0010(EnTsn* this, PlayState* play) {
switch (play->msgCtx.currentTextId) {
case 0x107F:
case 0x1081:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x1080:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
Animation_MorphToLoop(&this->skelAnime, &object_tsn_Anim_001198, -10.0f);
break;
case 0x1082:
Animation_MorphToLoop(&this->skelAnime, &object_tsn_Anim_0092FC, -10.0f);
- gSaveContext.save.weekEventReg[25] |= 0x80;
- func_801477B4(play);
+ SET_WEEKEVENTREG(WEEKEVENTREG_25_80);
+ Message_CloseTextbox(play);
this->actionFunc = func_80AE0304;
this->actor.textId = 0;
break;
case 0x1083:
- gSaveContext.save.weekEventReg[25] |= 0x80;
- func_801477B4(play);
+ SET_WEEKEVENTREG(WEEKEVENTREG_25_80);
+ Message_CloseTextbox(play);
this->actionFunc = func_80AE0304;
this->actor.textId = 0;
break;
case 0x1084:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
Animation_MorphToLoop(&this->skelAnime, &object_tsn_Anim_000964, -10.0f);
break;
case 0x1085:
case 0x1086:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x1089:
case 0x1093:
- gSaveContext.save.weekEventReg[26] |= 1;
- func_801477B4(play);
+ SET_WEEKEVENTREG(WEEKEVENTREG_26_01);
+ Message_CloseTextbox(play);
Animation_MorphToLoop(&this->skelAnime, &object_tsn_Anim_0092FC, -10.0f);
this->actionFunc = func_80AE0304;
this->actor.textId = 0;
@@ -242,24 +242,24 @@ void func_80AE0010(EnTsn* this, PlayState* play) {
case 0x1087:
Animation_MorphToLoop(&this->skelAnime, &object_tsn_Anim_001198, -10.0f);
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x1088:
- gSaveContext.save.weekEventReg[26] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_26_01);
if (INV_CONTENT(ITEM_MASK_ZORA) == ITEM_MASK_ZORA) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
Animation_MorphToLoop(&this->skelAnime, &object_tsn_Anim_0092FC, -10.0f);
this->actionFunc = func_80AE0304;
this->actor.textId = 0;
} else {
- func_80151938(play, 0x1093);
+ Message_ContinueTextbox(play, 0x1093);
Animation_MorphToLoop(&this->skelAnime, &object_tsn_Anim_0092FC, -10.0f);
}
break;
case 0x107E:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80AE0304;
this->actor.textId = 0;
break;
@@ -291,7 +291,7 @@ void func_80AE0304(EnTsn* this, PlayState* play) {
void func_80AE0418(EnTsn* this, PlayState* play) {
if (Actor_TextboxIsClosing(&this->actor, play)) {
Message_StartTextbox(play, 0x107D, NULL);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -300,7 +300,7 @@ void func_80AE0460(EnTsn* this, PlayState* play) {
ENTSN_SET_Z(&this->unk_1D8->actor, false);
this->actionFunc = func_80AE0418;
} else {
- Actor_PickUp(&this->actor, play, GI_SEAHORSE_CAUGHT, 2000.0f, 1000.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_SEAHORSE_CAUGHT, 2000.0f, 1000.0f);
}
}
@@ -311,26 +311,27 @@ void func_80AE04C4(EnTsn* this, PlayState* play) {
}
void func_80AE04FC(EnTsn* this, PlayState* play) {
- s32 sp24;
+ PlayerItemAction itemAction;
Player* player = GET_PLAYER(play);
if (Message_GetState(&play->msgCtx) == TEXT_STATE_16) {
- sp24 = func_80123810(play);
- if (sp24 != 0) {
- gSaveContext.save.weekEventReg[26] |= 2;
+ itemAction = func_80123810(play);
+
+ if (itemAction != PLAYER_IA_NONE) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_26_02);
}
- if (sp24 > 0) {
- func_801477B4(play);
+ if (itemAction > PLAYER_IA_NONE) {
+ Message_CloseTextbox(play);
this->actionFunc = func_80AE0704;
- if (sp24 == 19) {
+ if (itemAction == PLAYER_IA_PICTO_BOX) {
if (CHECK_QUEST_ITEM(QUEST_PICTOGRAPH)) {
- if (Snap_CheckFlag(PICTOGRAPH_PIRATE_GOOD)) {
+ if (Snap_CheckFlag(PICTO_VALID_PIRATE_GOOD)) {
player->actor.textId = 0x107B;
return;
}
- if (Snap_CheckFlag(PICTOGRAPH_PIRATE_TOO_FAR)) {
+ if (Snap_CheckFlag(PICTO_VALID_PIRATE_TOO_FAR)) {
player->actor.textId = 0x10A9;
return;
}
@@ -345,7 +346,7 @@ void func_80AE04FC(EnTsn* this, PlayState* play) {
return;
}
- if (sp24 == 13) {
+ if (itemAction == PLAYER_IA_HOOKSHOT) {
player->actor.textId = 0x1075;
return;
}
@@ -355,8 +356,8 @@ void func_80AE04FC(EnTsn* this, PlayState* play) {
return;
}
- if (sp24 < 0) {
- func_80151938(play, 0x1078);
+ if (itemAction <= PLAYER_IA_MINUS1) {
+ Message_ContinueTextbox(play, 0x1078);
Animation_MorphToLoop(&this->unk_1D8->skelAnime, &object_tsn_Anim_001198, -10.0f);
this->actionFunc = func_80AE0704;
}
@@ -364,11 +365,11 @@ void func_80AE04FC(EnTsn* this, PlayState* play) {
}
void func_80AE0698(EnTsn* this, PlayState* play) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80AE0C88;
this->unk_220 &= ~2;
this->actor.focus.pos = this->actor.world.pos;
- ActorCutscene_Stop(this->actor.cutscene);
+ CutsceneManager_Stop(this->actor.csId);
ENTSN_SET_Z(&this->unk_1D8->actor, false);
}
@@ -389,13 +390,13 @@ void func_80AE0704(EnTsn* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
switch (play->msgCtx.currentTextId) {
case 0x106E:
- if (gSaveContext.save.weekEventReg[25] & 0x40) {
- func_80151938(play, 0x1074);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_40)) {
+ Message_ContinueTextbox(play, 0x1074);
} else {
- func_80151938(play, 0x106F);
+ Message_ContinueTextbox(play, 0x106F);
}
this->unk_220 |= 2;
- gSaveContext.save.weekEventReg[25] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_25_40);
ENTSN_SET_Z(&this->unk_1D8->actor, true);
this->unk_220 |= 4;
break;
@@ -404,51 +405,51 @@ void func_80AE0704(EnTsn* this, PlayState* play) {
case 0x1070:
case 0x1071:
case 0x1072:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x1076:
case 0x1079:
Animation_MorphToLoop(&this->unk_1D8->skelAnime, &object_tsn_Anim_000964, -10.0f);
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x107A:
- func_80151938(play, 0x10A6);
+ Message_ContinueTextbox(play, 0x10A6);
break;
case 0x1075:
case 0x1078:
player->exchangeItemId = 0;
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
Animation_MorphToLoop(&this->unk_1D8->skelAnime, &object_tsn_Anim_0092FC, -10.0f);
break;
case 0x107C:
if (Inventory_HasEmptyBottle()) {
- gSaveContext.save.weekEventReg[26] |= 8;
- func_801477B4(play);
+ SET_WEEKEVENTREG(WEEKEVENTREG_26_08);
+ Message_CloseTextbox(play);
this->actionFunc = func_80AE0460;
func_80AE0460(this, play);
this->unk_220 &= ~2;
this->actor.focus.pos = this->actor.world.pos;
- ActorCutscene_Stop(this->actor.cutscene);
- this->actor.flags &= ~ACTOR_FLAG_100;
+ CutsceneManager_Stop(this->actor.csId);
+ this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED;
REMOVE_QUEST_ITEM(QUEST_PICTOGRAPH);
} else {
- func_80151938(play, 0x10A8);
+ Message_ContinueTextbox(play, 0x10A8);
}
break;
case 0x1073:
case 0x1074:
- func_80151938(play, 0xFF);
+ Message_ContinueTextbox(play, 0xFF);
this->actionFunc = func_80AE04FC;
break;
case 0x107B:
player->exchangeItemId = 0;
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
Animation_MorphToLoop(&this->unk_1D8->skelAnime, &object_tsn_Anim_0092FC, -10.0f);
break;
@@ -457,14 +458,14 @@ void func_80AE0704(EnTsn* this, PlayState* play) {
case 0x10A8:
Animation_MorphToLoop(&this->unk_1D8->skelAnime, &object_tsn_Anim_0092FC, -10.0f);
func_80AE0698(this, play);
- this->actor.flags &= ~ACTOR_FLAG_100;
+ this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED;
this->actionFunc = func_80AE04C4;
break;
case 0x108A:
case 0x1091:
- gSaveContext.save.weekEventReg[26] |= 4;
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ SET_WEEKEVENTREG(WEEKEVENTREG_26_04);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
this->unk_220 |= 2;
this->actor.textId = 0x1091;
break;
@@ -474,14 +475,14 @@ void func_80AE0704(EnTsn* this, PlayState* play) {
case 0x108D:
case 0x108E:
case 0x108F:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x1092:
- if (gSaveContext.save.weekEventReg[26] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_26_08)) {
func_80AE0698(this, play);
} else {
- func_80151938(play, 0x10A7);
+ Message_ContinueTextbox(play, 0x10A7);
Animation_MorphToLoop(&this->unk_1D8->skelAnime, &object_tsn_Anim_000964, -10.0f);
}
break;
@@ -497,7 +498,7 @@ void func_80AE0704(EnTsn* this, PlayState* play) {
case 0x10A9:
func_80AE0698(this, play);
- this->actor.flags &= ~ACTOR_FLAG_100;
+ this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED;
this->actionFunc = func_80AE04C4;
break;
}
@@ -514,16 +515,16 @@ void func_80AE0704(EnTsn* this, PlayState* play) {
}
if (this->unk_220 & 4) {
- if (this->actor.cutscene == -1) {
+ if (this->actor.csId == CS_ID_NONE) {
this->unk_220 &= ~4;
- } else if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
- } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ } else if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->actor.csId);
+ } else if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
this->unk_220 &= ~4;
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
}
@@ -542,9 +543,9 @@ void func_80AE0C88(EnTsn* this, PlayState* play) {
void func_80AE0D10(EnTsn* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80AE0D78;
- ActorCutscene_Stop(this->actor.cutscene);
+ CutsceneManager_Stop(this->actor.csId);
}
}
@@ -566,7 +567,7 @@ void EnTsn_Update(Actor* thisx, PlayState* play) {
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 25.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 25.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
SkelAnime_Update(&this->skelAnime);
if (this->unk_220 & 1) {
diff --git a/src/overlays/actors/ovl_En_Tsn/z_en_tsn.h b/src/overlays/actors/ovl_En_Tsn/z_en_tsn.h
index 396918fdb..ff0b6bcbf 100644
--- a/src/overlays/actors/ovl_En_Tsn/z_en_tsn.h
+++ b/src/overlays/actors/ovl_En_Tsn/z_en_tsn.h
@@ -29,6 +29,4 @@ typedef struct EnTsn {
/* 0x230 */ s16 unk_230;
} EnTsn; // size = 0x234
-extern const ActorInit En_Tsn_InitVars;
-
#endif // Z_EN_TSN_H
diff --git a/src/overlays/actors/ovl_En_Tubo_Trap/overlay.cfg b/src/overlays/actors/ovl_En_Tubo_Trap/overlay.cfg
deleted file mode 100644
index 364d4c7e9..000000000
--- a/src/overlays/actors/ovl_En_Tubo_Trap/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Tubo_Trap
-z_en_tubo_trap.c
diff --git a/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c b/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c
index bf1e44e98..340618db7 100644
--- a/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c
+++ b/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c
@@ -39,7 +39,7 @@ static ColliderCylinderInit sCylinderInit = {
{ 11, 28, 0, { 0, 0, 0 } },
};
-const ActorInit En_Tubo_Trap_InitVars = {
+ActorInit En_Tubo_Trap_InitVars = {
ACTOR_EN_TUBO_TRAP,
ACTORCAT_PROP,
FLAGS,
@@ -173,11 +173,11 @@ void EnTuboTrap_HandleImpact(EnTuboTrap* this, PlayState* play) {
Player* player = GET_PLAYER(play);
Player* player2 = GET_PLAYER(play);
- if ((this->actor.bgCheckFlags & 0x20) && (this->actor.depthInWater > 15.0f)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WATER) && (this->actor.depthInWater > 15.0f)) {
EnTuboTrap_SpawnEffectsInWater(this, play);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EV_BOMB_DROP_WATER);
EnTuboTrap_DropCollectible(this, play);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -187,7 +187,7 @@ void EnTuboTrap_HandleImpact(EnTuboTrap* this, PlayState* play) {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_IT_SHIELD_REFLECT_SW);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EV_POT_BROKEN);
EnTuboTrap_DropCollectible(this, play);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -197,7 +197,7 @@ void EnTuboTrap_HandleImpact(EnTuboTrap* this, PlayState* play) {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EV_EXPLOSION);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EV_POT_BROKEN);
EnTuboTrap_DropCollectible(this, play);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -209,16 +209,16 @@ void EnTuboTrap_HandleImpact(EnTuboTrap* this, PlayState* play) {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EV_POT_BROKEN);
SoundSource_PlaySfxAtFixedWorldPos(play, &player2->actor.world.pos, 40, NA_SE_PL_BODY_HIT);
EnTuboTrap_DropCollectible(this, play);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
}
- if ((this->actor.bgCheckFlags & 8) || (this->actor.bgCheckFlags & 1)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) || (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
EnTuboTrap_SpawnEffectsOnLand(this, play);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EV_POT_BROKEN);
EnTuboTrap_DropCollectible(this, play);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -246,7 +246,7 @@ void EnTuboTrap_Idle(EnTuboTrap* this, PlayState* play) {
this->targetHeight += transformationHeight;
}
this->originPos = this->actor.world.pos;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_POT_MOVE_START);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_POT_MOVE_START);
this->actionFunc = EnTuboTrap_Levitate;
}
}
@@ -257,7 +257,7 @@ void EnTuboTrap_Levitate(EnTuboTrap* this, PlayState* play) {
Math_ApproachF(&this->actor.world.pos.y, this->targetHeight, 0.8f, 3.0f);
if (fabsf(this->actor.world.pos.y - this->targetHeight) < 10.0f) {
- this->actor.speedXZ = 10.0f;
+ this->actor.speed = 10.0f;
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
this->actionFunc = EnTuboTrap_FlyAtPlayer;
}
@@ -273,7 +273,7 @@ void EnTuboTrap_FlyAtPlayer(EnTuboTrap* this, PlayState* play) {
// But in MM, certain sfxIds got reordered and devs forgot to update:
// In MM, NA_SE_EN_MIZUBABA2_ATTACK is the old value 0x3837
// In MM, NA_SE_EN_TUBOOCK_FLY is the new value 0x3AE0
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_MIZUBABA2_ATTACK - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_MIZUBABA2_ATTACK - SFX_FLAG);
if ((SQ(dX) + SQ(dY) + SQ(dZ) > SQ(240.0f))) {
Math_ApproachF(&this->actor.gravity, -3.0f, 0.2f, 0.5f);
@@ -289,7 +289,9 @@ void EnTuboTrap_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f, 10.0f, 20.0f, 0x1F);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f, 10.0f, 20.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 |
+ UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10);
Actor_SetFocus(&this->actor, 0.0f);
if (this->actor.projectedPos.z < 811.0f) {
diff --git a/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.h b/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.h
index db3b9cbe4..8df1aeb55 100644
--- a/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.h
+++ b/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.h
@@ -15,6 +15,4 @@ typedef struct EnTuboTrap {
/* 0x158 */ ColliderCylinder collider;
} EnTuboTrap; // size = 0x1A4
-extern const ActorInit En_Tubo_Trap_InitVars;
-
#endif // Z_EN_TUBO_TRAP_H
diff --git a/src/overlays/actors/ovl_En_Twig/overlay.cfg b/src/overlays/actors/ovl_En_Twig/overlay.cfg
deleted file mode 100644
index 29491912c..000000000
--- a/src/overlays/actors/ovl_En_Twig/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Twig
-z_en_twig.c
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 1f26288c4..a86359610 100644
--- a/src/overlays/actors/ovl_En_Twig/z_en_twig.c
+++ b/src/overlays/actors/ovl_En_Twig/z_en_twig.c
@@ -25,7 +25,7 @@ void func_80AC0AC8(EnTwig* this, PlayState* play);
void func_80AC0CC4(EnTwig* this, PlayState* play);
void func_80AC0D2C(EnTwig* this, PlayState* play);
-const ActorInit En_Twig_InitVars = {
+ActorInit En_Twig_InitVars = {
ACTOR_EN_TWIG,
ACTORCAT_MISC,
FLAGS,
@@ -37,9 +37,9 @@ const ActorInit En_Twig_InitVars = {
(ActorFunc)EnTwig_Draw,
};
-static s32 sCurrentRing;
-static s16 sRingCount;
-static s16 sRingNotCollected[25];
+s32 sCurrentRing;
+s16 sRingCount;
+s16 sRingNotCollected[25];
static CollisionHeader* sColHeaders[] = {
NULL,
@@ -63,42 +63,47 @@ void EnTwig_Init(Actor* thisx, PlayState* play2) {
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
this->unk_160 = RACERING_GET_PARAM_F(&this->dyna.actor);
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
if (sColHeaders[this->unk_160] != NULL) {
DynaPolyActor_LoadMesh(play, &this->dyna, sColHeaders[this->unk_160]);
}
- this->dyna.actor.bgCheckFlags |= 0x400;
+ this->dyna.actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_400;
switch (this->unk_160) {
case 0:
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
break;
+
case 1:
if (!sRingsHaveSpawned) {
- sRingCount = (gSaveContext.save.weekEventReg[24] & 4) ? 25 : 20;
+ sRingCount = CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04) ? 25 : 20;
for (i = 0; i < sRingCount; i++) {
sRingNotCollected[i] = false;
}
sRingsHaveSpawned = true;
}
if (RACERING_GET_PARAM_1F0(&this->dyna.actor) != 0) {
- if (!(gSaveContext.save.weekEventReg[24] & 4)) {
- Actor_MarkForDeath(&this->dyna.actor);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04)) {
+ Actor_Kill(&this->dyna.actor);
return;
}
- } else if (gSaveContext.save.weekEventReg[24] & 4) {
- Actor_MarkForDeath(&this->dyna.actor);
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04)) {
+ Actor_Kill(&this->dyna.actor);
return;
}
Actor_SetScale(&this->dyna.actor, 4.2f);
this->dyna.actor.uncullZoneScale = this->dyna.actor.uncullZoneDownward = this->dyna.actor.scale.x * 60.0f;
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
func_80AC0A7C(this, play);
break;
+
case 2:
Actor_SetScale(&this->dyna.actor, 1.0f);
this->dyna.actor.uncullZoneScale = this->dyna.actor.uncullZoneDownward = this->dyna.actor.scale.x * 880.0f;
func_80AC0A54(this, play);
break;
+
+ default:
+ break;
}
}
@@ -149,9 +154,9 @@ void func_80AC0AC8(EnTwig* this, PlayState* play) {
}
} else {
if (this->dyna.actor.xyzDistToPlayerSq <= SQ((this->dyna.actor.scale.x * 40.0f) + 40)) {
- func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
} else {
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
}
if (this->dyna.actor.xyzDistToPlayerSq >= (this->dyna.actor.scale.x * 10.0f * 40.0f * 40.0f)) {
this->dyna.actor.shape.rot.y = this->dyna.actor.yawTowardsPlayer;
@@ -165,7 +170,7 @@ void func_80AC0CC4(EnTwig* this, PlayState* play) {
this->unk_170 = 3458.0f;
this->unk_174 = 0.2f;
this->unk_16C |= 1;
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->actionFunc = func_80AC0D2C;
}
@@ -198,7 +203,7 @@ void func_80AC0D2C(EnTwig* this, PlayState* play) {
(s32)(Rand_ZeroOne() * 10.0f) + 20);
}
play_sound(NA_SE_SY_GET_ITEM);
- play->interfaceCtx.unk_25C--;
+ play->interfaceCtx.minigamePoints--;
sRingNotCollected[RACERING_GET_PARAM_FE0(&this->dyna.actor)] = true;
if (sCurrentRing == RACERING_GET_PARAM_FE0(&this->dyna.actor)) {
s32 i;
@@ -213,7 +218,7 @@ void func_80AC0D2C(EnTwig* this, PlayState* play) {
sCurrentRing = -1;
}
}
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
this->unk_170 += 180.0f / 0x10000;
diff --git a/src/overlays/actors/ovl_En_Twig/z_en_twig.h b/src/overlays/actors/ovl_En_Twig/z_en_twig.h
index 3de7f8f4b..3bdb62209 100644
--- a/src/overlays/actors/ovl_En_Twig/z_en_twig.h
+++ b/src/overlays/actors/ovl_En_Twig/z_en_twig.h
@@ -25,6 +25,4 @@ typedef struct EnTwig {
/* 0x180 */ Vec3f unk_180;
} EnTwig; // size = 0x18C
-extern const ActorInit En_Twig_InitVars;
-
#endif // Z_EN_TWIG_H
diff --git a/src/overlays/actors/ovl_En_Viewer/overlay.cfg b/src/overlays/actors/ovl_En_Viewer/overlay.cfg
deleted file mode 100644
index 3faa113d4..000000000
--- a/src/overlays/actors/ovl_En_Viewer/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Viewer
-z_en_viewer.c
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 926f88f70..34551dac9 100644
--- a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c
+++ b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c
@@ -23,7 +23,7 @@ static u8 D_8089F3E0 = 0;
static u8 D_8089F3E4 = 0;
-const ActorInit En_Viewer_InitVars = {
+ActorInit En_Viewer_InitVars = {
ACTOR_EN_VIEWER,
ACTORCAT_ITEMACTION,
FLAGS,
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 c4819f788..1532e7c70 100644
--- a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.h
+++ b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.h
@@ -27,6 +27,4 @@ typedef enum {
/* 0x2 */ ENVIEWER_PARAMS_2
} EnViewerParams;
-extern const ActorInit En_Viewer_InitVars;
-
#endif // Z_EN_VIEWER_H
diff --git a/src/overlays/actors/ovl_En_Vm/overlay.cfg b/src/overlays/actors/ovl_En_Vm/overlay.cfg
deleted file mode 100644
index 7c1774086..000000000
--- a/src/overlays/actors/ovl_En_Vm/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Vm
-z_en_vm.c
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 2dedc7c2a..505df7f11 100644
--- a/src/overlays/actors/ovl_En_Vm/z_en_vm.c
+++ b/src/overlays/actors/ovl_En_Vm/z_en_vm.c
@@ -29,7 +29,7 @@ void func_808CCB08(EnVm* this);
void func_808CCB50(EnVm* this, PlayState* play);
void func_808CCCF0(EnVm* this, PlayState* play);
-const ActorInit En_Vm_InitVars = {
+ActorInit En_Vm_InitVars = {
ACTOR_EN_VM,
ACTORCAT_ENEMY,
FLAGS,
@@ -180,7 +180,7 @@ void EnVm_Init(Actor* thisx, PlayState* play) {
this->unk_21C = params * 40.0f;
thisx->params &= 0xFF;
- this->actor.bgCheckFlags |= 0x400;
+ this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_400;
if (!D_808CD5B8) {
for (i = 0; i < ARRAY_COUNT(D_808CD58C); i++) {
@@ -265,7 +265,7 @@ void func_808CC610(EnVm* this, PlayState* play) {
}
void func_808CC788(EnVm* this) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BIMOS_AIM);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BIMOS_AIM);
Animation_Change(&this->skelAnime, &object_vm_Anim_000068, 3.0f, 3.0f, 7.0f, ANIMMODE_ONCE, 0.0f);
this->unk_214 = 305;
this->unk_220 = 0.06f;
@@ -328,7 +328,7 @@ void func_808CCA10(EnVm* this) {
this->unk_210 = 0;
this->unk_224 = 0.0f;
this->unk_220 = 0.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
this->actionFunc = func_808CCAA4;
}
@@ -368,7 +368,7 @@ void func_808CCBE4(EnVm* this, PlayState* play) {
Animation_Change(&this->skelAnime, &object_vm_Anim_000068, -1.0f, Animation_GetLastFrame(&object_vm_Anim_000068),
0.0f, ANIMMODE_ONCE, 0.0f);
Enemy_StartFinishingBlow(play, &this->actor);
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 33);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 33);
this->unk_214 = 33;
this->unk_220 = 0.0f;
this->unk_224 = 0.0f;
@@ -376,7 +376,7 @@ void func_808CCBE4(EnVm* this, PlayState* play) {
this->actor.world.pos.y = this->actor.focus.pos.y;
this->actor.velocity.y = 8.0f;
this->actor.gravity = -0.5f;
- this->actor.speedXZ = Rand_ZeroOne() + 1.0f;
+ this->actor.speed = Rand_ZeroOne() + 1.0f;
this->unk_210 = 0;
this->actor.flags |= ACTOR_FLAG_10;
this->actionFunc = func_808CCCF0;
@@ -386,7 +386,8 @@ void func_808CCCF0(EnVm* this, PlayState* play) {
this->unk_216 += 0x5DC;
this->unk_218 += 0x9C4;
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 40.0f, 7);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 40.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4);
this->unk_214--;
if (this->unk_214 == 1) {
@@ -398,7 +399,7 @@ void func_808CCCF0(EnVm* this, PlayState* play) {
}
} else if (this->unk_214 == 0) {
Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0xB0);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -440,7 +441,7 @@ void EnVm_Update(Actor* thisx, PlayState* play) {
if ((play->gameplayFrames % 2) != 0) {
func_800BBFB0(play, &this->unk_234, 6.0f, 1, 120, 20, 1);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BIMOS_LAZER_GND - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_BIMOS_LAZER_GND - SFX_FLAG);
}
if (this->unk_224 > 0.0f) {
diff --git a/src/overlays/actors/ovl_En_Vm/z_en_vm.h b/src/overlays/actors/ovl_En_Vm/z_en_vm.h
index dd1c36aa2..ca0678d90 100644
--- a/src/overlays/actors/ovl_En_Vm/z_en_vm.h
+++ b/src/overlays/actors/ovl_En_Vm/z_en_vm.h
@@ -35,6 +35,4 @@ typedef struct EnVm {
/* 0x300 */ ColliderTrisElement colliderTrisElements[1];
} EnVm; // size = 0x35C
-extern const ActorInit En_Vm_InitVars;
-
#endif // Z_EN_VM_H
diff --git a/src/overlays/actors/ovl_En_Wallmas/overlay.cfg b/src/overlays/actors/ovl_En_Wallmas/overlay.cfg
deleted file mode 100644
index badbf57d0..000000000
--- a/src/overlays/actors/ovl_En_Wallmas/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Wallmas
-z_en_wallmas.c
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 9dca3642f..11860c20d 100644
--- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c
+++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c
@@ -43,7 +43,7 @@ void EnWallmas_WaitForProximity(EnWallmas* this, PlayState* play);
void EnWallmas_WaitForSwitchFlag(EnWallmas* this, PlayState* play);
void EnWallmas_Stun(EnWallmas* this, PlayState* play);
-const ActorInit En_Wallmas_InitVars = {
+ActorInit En_Wallmas_InitVars = {
ACTOR_EN_WALLMAS,
ACTORCAT_ENEMY,
FLAGS,
@@ -171,7 +171,7 @@ void EnWallmas_Init(Actor* thisx, PlayState* play) {
if (WALLMASTER_GET_TYPE(&this->actor) == WALLMASTER_TYPE_FLAG) {
if (Flags_GetSwitch(play, this->switchFlag)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -205,7 +205,7 @@ void EnWallmas_Freeze(EnWallmas* this) {
this->collider.base.colType = 3;
this->timer = 80;
this->actor.flags &= ~ACTOR_FLAG_400;
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 80);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 80);
}
void EnWallmas_ThawIfFrozen(EnWallmas* this, PlayState* play) {
@@ -243,8 +243,9 @@ void EnWallmas_WaitToDrop(EnWallmas* this, PlayState* play) {
this->timer--;
}
- if ((player->stateFlags1 & 0x08100000) || (player->stateFlags2 & 0x80) || (player->unk_B5E > 0) ||
- (player->actor.freezeTimer > 0) || !(player->actor.bgCheckFlags & 1) ||
+ if ((player->stateFlags1 & (PLAYER_STATE1_100000 | PLAYER_STATE1_8000000)) ||
+ (player->stateFlags2 & PLAYER_STATE2_80) || (player->unk_B5E > 0) || (player->actor.freezeTimer > 0) ||
+ !(player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) ||
((WALLMASTER_GET_TYPE(&this->actor) == WALLMASTER_TYPE_PROXIMITY) &&
(Math_Vec3f_DistXZ(&this->actor.home.pos, playerPos) > (120.f + this->detectionRadius)))) {
AudioSfx_StopById(NA_SE_EN_FALL_AIM);
@@ -252,7 +253,7 @@ void EnWallmas_WaitToDrop(EnWallmas* this, PlayState* play) {
}
if (this->timer == 80) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FALL_AIM);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FALL_AIM);
}
if (this->timer == 0) {
@@ -279,9 +280,9 @@ void EnWallmas_SetupDrop(EnWallmas* this, PlayState* play) {
void EnWallmas_Drop(EnWallmas* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if ((player->stateFlags2 & 0x80) || (player->actor.freezeTimer > 0)) {
+ if ((player->stateFlags2 & PLAYER_STATE2_80) || (player->actor.freezeTimer > 0)) {
EnWallmas_SetupReturnToCeiling(this);
- } else if (!Play_InCsMode(play) && !(player->stateFlags2 & 0x10) && (player->invincibilityTimer >= 0) &&
+ } else if (!Play_InCsMode(play) && !(player->stateFlags2 & PLAYER_STATE2_10) && (player->invincibilityTimer >= 0) &&
(this->actor.xzDistToPlayer < 30.0f) && (this->actor.playerHeightRel < -5.0f) &&
(-(f32)(player->cylinder.dim.height + 10) < this->actor.playerHeightRel)) {
EnWallmas_SetupTakePlayer(this, play);
@@ -297,7 +298,7 @@ void EnWallmas_SetupLand(EnWallmas* this, PlayState* play) {
ANIMMODE_ONCE, -3.0f);
Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos, 15.0f, 6, 20.0f, 300, 100, true);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FALL_LAND);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FALL_LAND);
this->actionFunc = EnWallmas_Land;
}
@@ -323,7 +324,7 @@ void EnWallmas_Stand(EnWallmas* this, PlayState* play) {
void EnWallmas_SetupWalk(EnWallmas* this) {
Animation_PlayOnceSetSpeed(&this->skelAnime, &gWallmasterWalkAnim, 3.0f);
- this->actor.speedXZ = 3.0f;
+ this->actor.speed = 3.0f;
this->actionFunc = EnWallmas_Walk;
}
@@ -336,13 +337,13 @@ void EnWallmas_Walk(EnWallmas* this, PlayState* play) {
this->actor.world.rot.y = this->actor.shape.rot.y;
if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 12.0f) ||
Animation_OnFrame(&this->skelAnime, 24.0f) || Animation_OnFrame(&this->skelAnime, 36.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FALL_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FALL_WALK);
}
}
void EnWallmas_SetupJumpToCeiling(EnWallmas* this) {
Animation_PlayOnce(&this->skelAnime, &gWallmasterStopWalkAnim);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = EnWallmas_JumpToCeiling;
}
@@ -354,7 +355,7 @@ void EnWallmas_JumpToCeiling(EnWallmas* this, PlayState* play) {
void EnWallmas_SetupReturnToCeiling(EnWallmas* this) {
this->timer = 0;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
Animation_Change(&this->skelAnime, &gWallmasterJumpAnim, 3.0f, 0.0f, Animation_GetLastFrame(&gWallmasterJumpAnim),
ANIMMODE_ONCE, -3.0f);
this->actionFunc = EnWallmas_ReturnToCeiling;
@@ -371,12 +372,12 @@ void EnWallmas_ReturnToCeiling(EnWallmas* this, PlayState* play) {
}
if (Animation_OnFrame(&this->skelAnime, 20.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FALL_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FALL_UP);
}
if (this->actor.playerHeightRel < -900.0f) {
if (WALLMASTER_GET_TYPE(&this->actor) == WALLMASTER_TYPE_FLAG) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -396,8 +397,8 @@ void EnWallmas_SetupDamage(EnWallmas* this, s32 arg1) {
func_800BE504(&this->actor, &this->collider);
}
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 20);
- this->actor.speedXZ = 5.0f;
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 20);
+ this->actor.speed = 5.0f;
this->actor.velocity.y = 10.0f;
this->actionFunc = EnWallmas_Damage;
}
@@ -412,15 +413,15 @@ void EnWallmas_Damage(EnWallmas* this, PlayState* play) {
}
if (Animation_OnFrame(&this->skelAnime, 13.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_EYEGOLE_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_EYEGOLE_ATTACK);
}
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.2f);
+ Math_StepToF(&this->actor.speed, 0.0f, 0.2f);
}
void EnWallmas_SetupCooldown(EnWallmas* this) {
Animation_PlayOnce(&this->skelAnime, &gWallmasterRecoverFromDamageAnim);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.velocity.y = 0.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = EnWallmas_Cooldown;
@@ -433,7 +434,7 @@ void EnWallmas_Cooldown(EnWallmas* this, PlayState* play) {
}
void EnWallmas_SetupDie(EnWallmas* this, PlayState* play) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.velocity.y = 0.0f;
func_800B3030(play, &this->actor.world.pos, &gZeroVec3f, &gZeroVec3f, 250, -10, 2);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 11, NA_SE_EN_EXTINCT);
@@ -444,7 +445,7 @@ void EnWallmas_Die(EnWallmas* this, PlayState* play) {
if (Math_StepToF(&this->actor.scale.x, 0.0f, 0.0015f)) {
Actor_SetScale(&this->actor, 0.01f);
Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0x90);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
this->actor.scale.z = this->actor.scale.x;
@@ -455,18 +456,18 @@ void EnWallmas_SetupTakePlayer(EnWallmas* this, PlayState* play) {
Animation_MorphToPlayOnce(&this->skelAnime, &gWallmasterHoverAnim, -5.0f);
this->timer = -30;
this->actionFunc = EnWallmas_TakePlayer;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.velocity.y = 0.0f;
this->yTarget = this->actor.playerHeightRel;
- func_800B724C(play, &this->actor, 18);
+ func_800B724C(play, &this->actor, PLAYER_CSMODE_18);
}
void EnWallmas_TakePlayer(EnWallmas* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (Animation_OnFrame(&this->skelAnime, 1.0f)) {
- func_800B8E58(player, player->ageProperties->unk_92 + NA_SE_VO_LI_DAMAGE_S);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FALL_CATCH);
+ Player_PlaySfx(player, player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_DAMAGE_S);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FALL_CATCH);
}
if (SkelAnime_Update(&this->skelAnime)) {
@@ -479,19 +480,18 @@ void EnWallmas_TakePlayer(EnWallmas* this, PlayState* play) {
this->actor.world.pos.y += 10.0f;
}
- player->actor.world.pos.y = this->actor.world.pos.y - sYOffsetPerForm[((void)0, gSaveContext.save.playerForm)];
+ player->actor.world.pos.y = this->actor.world.pos.y - sYOffsetPerForm[GET_PLAYER_FORM];
if (this->timer == -30) {
- func_800B8E58(player, player->ageProperties->unk_92 + NA_SE_VO_LI_TAKEN_AWAY);
+ Player_PlaySfx(player, player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_TAKEN_AWAY);
}
if (this->timer == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FALL_UP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FALL_UP);
}
this->timer += 2;
} else {
- Math_StepToF(&this->actor.world.pos.y,
- sYOffsetPerForm[((void)0, gSaveContext.save.playerForm)] + player->actor.world.pos.y, 5.0f);
+ Math_StepToF(&this->actor.world.pos.y, sYOffsetPerForm[GET_PLAYER_FORM] + player->actor.world.pos.y, 5.0f);
}
Math_StepToF(&this->actor.world.pos.x, player->actor.world.pos.x, 3.0f);
@@ -530,7 +530,7 @@ void EnWallmas_WaitForSwitchFlag(EnWallmas* this, PlayState* play) {
}
void EnWallmas_SetupStun(EnWallmas* this) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->actor.velocity.y > 0.0f) {
this->actor.velocity.y = 0.0f;
}
@@ -564,10 +564,10 @@ void EnWallmas_UpdateDamage(EnWallmas* this, PlayState* play) {
(!(this->collider.info.acHitInfo->toucher.dmgFlags & 0xDB0B3))) {
if (Actor_ApplyDamage(&this->actor) == 0) {
Enemy_StartFinishingBlow(play, &this->actor);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DAIOCTA_REVERSE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_DAIOCTA_REVERSE);
this->actor.flags &= ~ACTOR_FLAG_1;
} else if (this->actor.colChkInfo.damage != 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FALL_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_FALL_DAMAGE);
}
EnWallmas_ThawIfFrozen(this, play);
@@ -583,13 +583,13 @@ void EnWallmas_UpdateDamage(EnWallmas* this, PlayState* play) {
EnWallmas_SetupStun(this);
} else if (this->actor.colChkInfo.damageEffect == WALLMASTER_DMGEFF_STUN) {
this->timer = 40;
- Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
EnWallmas_SetupStun(this);
} else if (this->actor.colChkInfo.damageEffect == WALLMASTER_DMGEFF_ZORA_MAGIC) {
this->timer = 40;
- Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
this->drawDmgEffScale = 0.55f;
this->drawDmgEffAlpha = 2.0f;
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_MEDIUM;
@@ -629,13 +629,15 @@ void EnWallmas_Update(Actor* thisx, PlayState* play) {
}
if (this->actionFunc != EnWallmas_Drop) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 25.0f, 0.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 25.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
}
if ((this->actionFunc != EnWallmas_Die) && (this->actionFunc != EnWallmas_Drop)) {
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
- if ((this->actionFunc != EnWallmas_Damage) && (this->actor.bgCheckFlags & 1) &&
+ if ((this->actionFunc != EnWallmas_Damage) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) &&
(this->actor.freezeTimer == 0)) {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
}
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 af7c6f18c..ceb1d1823 100644
--- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.h
+++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.h
@@ -52,6 +52,4 @@ typedef struct EnWallmas {
/* 0x358 */ ColliderCylinder collider;
} EnWallmas; // size = 0x3A4
-extern const ActorInit En_Wallmas_InitVars;
-
#endif // Z_EN_WALLMAS_H
diff --git a/src/overlays/actors/ovl_En_Warp_Uzu/overlay.cfg b/src/overlays/actors/ovl_En_Warp_Uzu/overlay.cfg
deleted file mode 100644
index 833f1a0b6..000000000
--- a/src/overlays/actors/ovl_En_Warp_Uzu/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Warp_Uzu
-z_en_warp_uzu.c
diff --git a/src/overlays/actors/ovl_En_Warp_Uzu/z_en_warp_uzu.c b/src/overlays/actors/ovl_En_Warp_Uzu/z_en_warp_uzu.c
index 34c8db4bb..3cfc1eba7 100644
--- a/src/overlays/actors/ovl_En_Warp_Uzu/z_en_warp_uzu.c
+++ b/src/overlays/actors/ovl_En_Warp_Uzu/z_en_warp_uzu.c
@@ -21,7 +21,7 @@ void func_80A66278(EnWarpUzu* this, PlayState* play);
void func_80A66384(EnWarpUzu* this, PlayState* play);
void EnWarpUzu_DoNothing(EnWarpUzu* this, PlayState* play);
-const ActorInit En_Warp_Uzu_InitVars = {
+ActorInit En_Warp_Uzu_InitVars = {
ACTOR_EN_WARP_UZU,
ACTORCAT_PROP,
FLAGS,
@@ -98,7 +98,7 @@ void func_80A66278(EnWarpUzu* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
func_80A66384(this, play);
} else {
- phi_a0 = ABS((s16)(Actor_YawBetweenActors(&this->actor, &player->actor) - this->actor.shape.rot.y));
+ phi_a0 = ABS((s16)(Actor_WorldYawTowardActor(&this->actor, &player->actor) - this->actor.shape.rot.y));
temp_v0 = player->actor.shape.rot.y - this->actor.shape.rot.y;
phi_v1 = ABS(temp_v0);
if (phi_a0 >= 0x2AAB) {
diff --git a/src/overlays/actors/ovl_En_Warp_Uzu/z_en_warp_uzu.h b/src/overlays/actors/ovl_En_Warp_Uzu/z_en_warp_uzu.h
index a1a7766e6..6b8bfb362 100644
--- a/src/overlays/actors/ovl_En_Warp_Uzu/z_en_warp_uzu.h
+++ b/src/overlays/actors/ovl_En_Warp_Uzu/z_en_warp_uzu.h
@@ -13,6 +13,4 @@ typedef struct EnWarpUzu {
/* 0x148 */ ColliderCylinder collider;
} EnWarpUzu; // size = 0x194
-extern const ActorInit En_Warp_Uzu_InitVars;
-
#endif // Z_EN_WARP_UZU_H
diff --git a/src/overlays/actors/ovl_En_Warp_tag/overlay.cfg b/src/overlays/actors/ovl_En_Warp_tag/overlay.cfg
deleted file mode 100644
index a70ec6a5c..000000000
--- a/src/overlays/actors/ovl_En_Warp_tag/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Warp_tag
-z_en_warp_tag.c
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 1ba5e6ebc..6d5522e8a 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
@@ -8,7 +8,7 @@
#include "z_en_warp_tag.h"
#include "objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h"
-#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000 | ACTOR_FLAG_8000000)
+#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON)
#define THIS ((EnWarptag*)thisx)
@@ -24,7 +24,7 @@ void EnWarpTag_Unused809C0A20(EnWarptag* this, PlayState* play);
void EnWarpTag_RespawnPlayer(EnWarptag* this, PlayState* play);
void EnWarpTag_GrottoReturn(EnWarptag* this, PlayState* play);
-const ActorInit En_Warp_tag_InitVars = {
+ActorInit En_Warp_tag_InitVars = {
ACTOR_EN_WARP_TAG,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -59,7 +59,7 @@ void EnWarptag_Init(Actor* thisx, PlayState* play) {
} else {
if ((this->dangeonKeepObject = Object_GetIndex(&play->objectCtx, GAMEPLAY_DANGEON_KEEP)) < 0) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
this->actionFunc = EnWarpTag_CheckDungeonKeepObject;
@@ -84,7 +84,7 @@ void EnWarpTag_CheckDungeonKeepObject(EnWarptag* this, PlayState* play) {
if (Object_IsLoaded(&play->objectCtx, this->dangeonKeepObject)) {
this->actionFunc = EnWarpTag_WaitForPlayer;
DynaPolyActor_Init(&this->dyna, 0x1);
- DynaPolyActor_LoadMesh(play, &this->dyna, &gWarpTagGoronTrialBaseCollider);
+ DynaPolyActor_LoadMesh(play, &this->dyna, &gWarpTagGoronTrialBaseCol);
this->dyna.actor.objBankIndex = this->dangeonKeepObject;
this->dyna.actor.draw = EnWarpTag_Draw;
}
@@ -94,10 +94,10 @@ void EnWarpTag_WaitForPlayer(EnWarptag* this, PlayState* play) {
if (!Player_InCsMode(play) && (this->dyna.actor.xzDistToPlayer <= 30.0f) &&
(this->dyna.actor.playerHeightRel <= 10.0f)) {
if (WARPTAG_GET_INVISIBLE(&this->dyna.actor)) {
- func_800B7298(play, NULL, 0x51);
+ func_800B7298(play, NULL, PLAYER_CSMODE_81);
this->actionFunc = EnWarpTag_GrottoReturn;
} else {
- func_800B7298(play, NULL, 0xF);
+ func_800B7298(play, NULL, PLAYER_CSMODE_15);
this->actionFunc = EnWarpTag_RespawnPlayer;
}
}
@@ -126,9 +126,9 @@ void EnWarpTag_Unused809C09A0(EnWarptag* this, PlayState* play) {
*/
void EnWarpTag_Unused809C0A20(EnWarptag* this, PlayState* play) {
if (play->msgCtx.ocarinaMode == 9) {
- func_800B7298(play, NULL, 7);
+ func_800B7298(play, NULL, PLAYER_CSMODE_WAIT);
this->actionFunc = EnWarpTag_RespawnPlayer;
- ActorCutscene_Stop(ActorCutscene_GetCurrentIndex());
+ CutsceneManager_Stop(CutsceneManager_GetCurrentCsId());
} else if (play->msgCtx.ocarinaMode >= 2) {
play->msgCtx.ocarinaMode = 4;
@@ -141,7 +141,7 @@ void EnWarpTag_Unused809C0A20(EnWarptag* this, PlayState* play) {
*/
void EnWarpTag_RespawnPlayer(EnWarptag* this, PlayState* play) {
ActorEntry* playerActorEntry;
- Player* player;
+ Player* player = GET_PLAYER(play);
s32 playerSpawnIndex;
s32 new15E;
s32 entrance;
@@ -149,15 +149,15 @@ void EnWarpTag_RespawnPlayer(EnWarptag* this, PlayState* play) {
u8 playerForm;
s16 playerParams;
- player = GET_PLAYER(play);
- if (play->playerActorCsIds[4] >= 0 && ActorCutscene_GetCurrentIndex() != play->playerActorCsIds[4]) {
- if (ActorCutscene_GetCanPlayNext(play->playerActorCsIds[4]) == 0) {
- ActorCutscene_SetIntentToPlay(play->playerActorCsIds[4]);
+ 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]);
} else {
- ActorCutscene_StartAndSetUnkLinkFields(play->playerActorCsIds[4], &this->dyna.actor);
- func_800B8E58(player, NA_SE_PL_WARP_PLATE);
- func_8016566C(0);
+ CutsceneManager_StartWithPlayerCs(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON], &this->dyna.actor);
+ Player_PlaySfx(player, NA_SE_PL_WARP_PLATE);
+ Play_EnableMotionBlur(0);
}
} else {
@@ -176,7 +176,7 @@ void EnWarpTag_RespawnPlayer(EnWarptag* this, PlayState* play) {
player->actor.world.pos.z = this->dyna.actor.world.pos.z + (diffZ * distance);
if (Math_StepToS(&this->unkValue15E, 0x2710, 0xC8)) {
- player->stateFlags3 |= 0x1;
+ player->stateFlags3 |= PLAYER_STATE3_1;
player->actor.gravity = -0.5f;
if (this->dyna.actor.playerHeightRel < -80.0f) {
@@ -201,21 +201,20 @@ void EnWarpTag_RespawnPlayer(EnWarptag* this, PlayState* play) {
newRespawnPos.z = playerActorEntry->pos.z;
if (WARPTAG_GET_3C0_MAX(&this->dyna.actor) == WARPTAG_3C0_MAX) {
- playerParams = 0x9FF;
+ playerParams = PLAYER_PARAMS(0xFF, PLAYER_INITMODE_9);
} else { // not used by any known variant
- playerParams = 0x8FF;
+ playerParams = PLAYER_PARAMS(0xFF, PLAYER_INITMODE_8);
}
// 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, // parameter 3 is called "sceneSetup"
- play->setupEntranceList[playerSpawnIndex].room, playerParams, &newRespawnPos,
- ((((playerActorEntry->rot.y >> 7) & 0x1FF) / 180.0f) * 32768.0f)); // DEG_TO_BINANG ?
+ Play_SetRespawnData(&play->state, 0, entrance, play->setupEntranceList[playerSpawnIndex].room,
+ playerParams, &newRespawnPos,
+ DEG_TO_BINANG_ALT((playerActorEntry->rot.y >> 7) & 0x1FF));
func_80169EFC(&play->state);
- gSaveContext.respawnFlag = ~0x4;
- func_80165690();
+ gSaveContext.respawnFlag = -5;
+ Play_DisableMotionBlur();
}
}
@@ -224,7 +223,7 @@ void EnWarpTag_RespawnPlayer(EnWarptag* this, PlayState* play) {
if (new15E < 0) {
new15E = 0;
}
- func_80165658(new15E * 0.04f); // unknown Play_ function
+ Play_SetMotionBlurAlpha(new15E * (1 / 25.0f));
}
}
@@ -232,11 +231,11 @@ void EnWarpTag_RespawnPlayer(EnWarptag* this, PlayState* play) {
* ActionFunc: Deku Playground, return to North Clock Town.
*/
void EnWarpTag_GrottoReturn(EnWarptag* this, PlayState* play) {
- if (ActorCutscene_GetCurrentIndex() != this->dyna.actor.cutscene) {
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (CutsceneManager_GetCurrentCsId() != this->dyna.actor.csId) {
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
@@ -264,7 +263,7 @@ void EnWarpTag_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
func_8012C28C(play->state.gfxCtx);
- AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gWarpTagRainbowTexAnim));
+ AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWarpTagRainbowTexAnim));
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gWarpTagGoronTrialBaseDL);
diff --git a/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.h b/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.h
index ea7eff8ab..ac76ccb67 100644
--- a/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.h
+++ b/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.h
@@ -18,8 +18,6 @@ typedef struct EnWarptag {
/* 0x160 */ EnWarptagActionFunc actionFunc;
} EnWarptag; // size = 0x164
-extern const ActorInit En_Warp_tag_InitVars;
-
// Only two known Variants:
// Goron Trial (MOON): 0x03C1
// Deku Playground: 0x83C0
diff --git a/src/overlays/actors/ovl_En_Water_Effect/overlay.cfg b/src/overlays/actors/ovl_En_Water_Effect/overlay.cfg
deleted file mode 100644
index 7aac8fdd8..000000000
--- a/src/overlays/actors/ovl_En_Water_Effect/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Water_Effect
-z_en_water_effect.c
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 aa36b6947..159b7444e 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
@@ -30,7 +30,7 @@ void func_80A5A184(Actor* thisx, PlayState* play2);
void func_80A5A534(Actor* thisx, PlayState* play);
void func_80A5A6B8(Actor* thisx, PlayState* play2);
-const ActorInit En_Water_Effect_InitVars = {
+ActorInit En_Water_Effect_InitVars = {
ACTOR_EN_WATER_EFFECT,
ACTORCAT_BOSS,
FLAGS,
@@ -158,7 +158,7 @@ void EnWaterEffect_Update(Actor* thisx, PlayState* play2) {
this->unk_DC4++;
if ((this->unk_DC4 % 32) == 0) {
if (Rand_ZeroOne() < 0.5f) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 10.0f, 40.0f, 4);
+ 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.y = this->actor.world.pos.y;
sp88.z = randPlusMinusPoint5Scaled(50.0f) + this->actor.world.pos.z;
@@ -420,7 +420,7 @@ void func_80A59C04(Actor* thisx, PlayState* play2) {
this->unk_DC4++;
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, 4);
+ 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.y = this->actor.world.pos.y;
sp74.z = randPlusMinusPoint5Scaled(50.0f) + this->actor.world.pos.z;
@@ -482,7 +482,7 @@ void func_80A59C04(Actor* thisx, PlayState* play2) {
player->flameTimers[j] = Rand_S16Offset(0, 200);
}
player->isBurning = true;
- func_800B8E58(player, player->ageProperties->unk_92 + NA_SE_VO_LI_DEMO_DAMAGE);
+ Player_PlaySfx(player, player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_DEMO_DAMAGE);
}
}
@@ -570,7 +570,7 @@ void func_80A5A184(Actor* thisx, PlayState* play2) {
}
}
- POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP);
+ POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
CLOSE_DISPS(gfxCtx);
}
@@ -580,7 +580,7 @@ void func_80A5A534(Actor* thisx, PlayState* play) {
s32 i;
if (this->unk_E38 < 1.0f) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
this->unk_DC4++;
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 e4fb752dc..433ebac62 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
@@ -43,6 +43,4 @@ typedef struct EnWaterEffect {
/* 0xE38 */ f32 unk_E38;
} EnWaterEffect; // size = 0xE3C
-extern const ActorInit En_Water_Effect_InitVars;
-
#endif // Z_EN_WATER_EFFECT_H
diff --git a/src/overlays/actors/ovl_En_Wdhand/overlay.cfg b/src/overlays/actors/ovl_En_Wdhand/overlay.cfg
deleted file mode 100644
index 501a7b6ed..000000000
--- a/src/overlays/actors/ovl_En_Wdhand/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Wdhand
-z_en_wdhand.c
diff --git a/src/overlays/actors/ovl_En_Wdhand/z_en_wdhand.c b/src/overlays/actors/ovl_En_Wdhand/z_en_wdhand.c
index a4cf5379a..83cf47291 100644
--- a/src/overlays/actors/ovl_En_Wdhand/z_en_wdhand.c
+++ b/src/overlays/actors/ovl_En_Wdhand/z_en_wdhand.c
@@ -16,7 +16,7 @@ void EnWdhand_Update(Actor* thisx, PlayState* play);
void EnWdhand_Draw(Actor* thisx, PlayState* play);
#if 0
-const ActorInit En_Wdhand_InitVars = {
+ActorInit En_Wdhand_InitVars = {
ACTOR_EN_WDHAND,
ACTORCAT_ENEMY,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Wdhand/z_en_wdhand.h b/src/overlays/actors/ovl_En_Wdhand/z_en_wdhand.h
index adf19ce8c..5eb02fa1a 100644
--- a/src/overlays/actors/ovl_En_Wdhand/z_en_wdhand.h
+++ b/src/overlays/actors/ovl_En_Wdhand/z_en_wdhand.h
@@ -14,6 +14,4 @@ typedef struct EnWdhand {
/* 0x1EC */ char unk_1EC[0x268];
} EnWdhand; // size = 0x454
-extern const ActorInit En_Wdhand_InitVars;
-
#endif // Z_EN_WDHAND_H
diff --git a/src/overlays/actors/ovl_En_Weather_Tag/overlay.cfg b/src/overlays/actors/ovl_En_Weather_Tag/overlay.cfg
deleted file mode 100644
index 9b7593244..000000000
--- a/src/overlays/actors/ovl_En_Weather_Tag/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Weather_Tag
-z_en_weather_tag.c
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 ec6f12aeb..fb00fdae3 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
@@ -35,7 +35,7 @@ void func_809672DC(EnWeatherTag* this, PlayState* play);
void func_809674C8(EnWeatherTag* this, PlayState* play);
void func_80967608(EnWeatherTag* this, PlayState* play);
-const ActorInit En_Weather_Tag_InitVars = {
+ActorInit En_Weather_Tag_InitVars = {
ACTOR_EN_WEATHER_TAG,
ACTORCAT_PROP,
FLAGS,
@@ -77,8 +77,8 @@ void EnWeatherTag_Init(Actor* thisx, PlayState* play) {
EnWeatherTag_SetupAction(this, func_80966A08);
break;
case WEATHERTAG_TYPE_UNK1:
- if (gSaveContext.save.weekEventReg[52] & 0x20) { // if cleared STT
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE)) {
+ Actor_Kill(&this->actor);
}
EnWeatherTag_SetupAction(this, func_80966B08);
break;
@@ -86,7 +86,9 @@ void EnWeatherTag_Init(Actor* thisx, PlayState* play) {
EnWeatherTag_SetupAction(this, func_80966E0C);
break;
case WEATHERTAG_TYPE_UNK3:
- if (0) {} // this can move to diff locations and still match
+ //! FAKE: this can move to different locations and still match
+ if (1) {}
+
EnWeatherTag_SetupAction(this, func_80966EF0);
break;
case WEATHERTAG_TYPE_UNK4:
@@ -94,7 +96,7 @@ void EnWeatherTag_Init(Actor* thisx, PlayState* play) {
break;
case WEATHERTAG_TYPE_UNK5:
func_800BC154(play, &play->actorCtx, &this->actor, 7);
- play->skyboxId = 3;
+ play->skyboxId = SKYBOX_3;
play->envCtx.unk_1F = 5;
play->envCtx.unk_20 = 5;
D_801F4E74 = 1.0f;
@@ -119,7 +121,7 @@ u8 func_80966608(EnWeatherTag* this, PlayState* play, UNK_TYPE a3, UNK_TYPE a4,
Player* player = GET_PLAYER(play);
u8 returnVal = 0;
- if (WEATHER_TAG_RANGE100(&this->actor) > Actor_XZDistanceBetweenActors(&player->actor, &this->actor)) {
+ if (WEATHER_TAG_RANGE100(&this->actor) > Actor_WorldDistXZToActor(&player->actor, &this->actor)) {
if (play->envCtx.unk_1F == play->envCtx.unk_20) {
D_801BDBB8 = 1;
if (!(play->envCtx.unk_1E == 0) || ((play->envCtx.unk_1F != 1) && (play->envCtx.unk_21 == 0))) {
@@ -147,7 +149,7 @@ u8 func_80966758(EnWeatherTag* this, PlayState* play, UNK_TYPE a3, UNK_TYPE a4,
Player* player = GET_PLAYER(play);
u8 returnVal = 0;
- if (WEATHER_TAG_RANGE100(&this->actor) < Actor_XZDistanceBetweenActors(&player->actor, &this->actor)) {
+ if (WEATHER_TAG_RANGE100(&this->actor) < Actor_WorldDistXZToActor(&player->actor, &this->actor)) {
if (play->envCtx.unk_1F == play->envCtx.unk_20) {
D_801BDBB8 = 1;
if (!(play->envCtx.unk_1E == 0) || ((play->envCtx.unk_1F != 1) && (play->envCtx.unk_21 == 0))) {
@@ -173,7 +175,7 @@ void func_8096689C(EnWeatherTag* this, PlayState* play) {
f32 distance;
f32 partialResult;
- distance = Actor_XZDistanceBetweenActors(&player->actor, &this->actor);
+ distance = Actor_WorldDistXZToActor(&player->actor, &this->actor);
if (this->fadeDistance < distance) {
distance = this->fadeDistance;
}
@@ -214,15 +216,15 @@ void func_80966A68(EnWeatherTag* this, PlayState* play) {
}
if ((s16)this->unk154 < 0) { // cast req
this->unk154 = 0;
- // @BUG redudant code
- Actor_MarkForDeath(&this->actor);
+ // redundant code
+ Actor_Kill(&this->actor);
EnWeatherTag_SetupAction(this, EnWeatherTag_Die);
}
func_8096689C(this, play);
}
void EnWeatherTag_Die(EnWeatherTag* this, PlayState* play) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
// WEATHERTAG_TYPE_UNK1
@@ -231,10 +233,10 @@ void EnWeatherTag_Die(EnWeatherTag* this, PlayState* play) {
// 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)) {
- play->skyboxId = 3;
+ play->skyboxId = SKYBOX_3;
EnWeatherTag_SetupAction(this, func_80966D20);
} else if (D_801F4E74 <= 0.01f) {
- play->skyboxId = 1;
+ play->skyboxId = SKYBOX_NORMAL_SKY;
} else {
Math_SmoothStepToF(&D_801F4E74, 0.0f, 0.2f, 0.02f, 0.001f);
}
@@ -244,11 +246,11 @@ void func_80966B08(EnWeatherTag* this, PlayState* play) {
// because it uses cutsecnes.. is this the clear ikana cutcsene?
void func_80966BF4(EnWeatherTag* this, PlayState* play) {
u8 newUnk20;
- CsCmdActorAction* tmpAction;
+ CsCmdActorCue* cue;
- if (Cutscene_CheckActorAction(play, 567)) {
- tmpAction = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 567)];
- if ((play->csCtx.frames >= tmpAction->startFrame) && (tmpAction->action >= 2)) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_567)) {
+ cue = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_567)];
+ if ((play->csCtx.curFrame >= cue->startFrame) && (cue->id >= 2)) {
switch (gSaveContext.save.day) {
case 0:
case 1:
@@ -377,14 +379,13 @@ void func_80967060(EnWeatherTag* this, PlayState* play) {
// type 4_3, start cutscene then die?
void func_80967148(EnWeatherTag* this, PlayState* play) {
- s16 tempCutscene;
+ s16 csId = this->actor.csId;
- tempCutscene = this->actor.cutscene;
- if (ActorCutscene_GetCanPlayNext(tempCutscene)) {
- ActorCutscene_Start(tempCutscene, &this->actor);
+ if (CutsceneManager_IsNext(csId)) {
+ CutsceneManager_Start(csId, &this->actor);
EnWeatherTag_SetupAction(this, EnWeatherTag_DoNothing);
} else {
- ActorCutscene_SetIntentToPlay(tempCutscene);
+ CutsceneManager_Queue(csId);
}
}
@@ -422,7 +423,7 @@ void func_809672DC(EnWeatherTag* this, PlayState* play) {
Actor_GetClosestPosOnPath(this->pathPoints, this->pathCount, &GET_PLAYER(play)->actor.world.pos,
&this->actor.world.pos, false);
- distance = Actor_XZDistanceBetweenActors(&player->actor, &this->actor);
+ distance = Actor_WorldDistXZToActor(&player->actor, &this->actor);
range = WEATHER_TAG_RANGE100(&this->actor);
if (distance < range) {
@@ -447,7 +448,7 @@ void func_809672DC(EnWeatherTag* this, PlayState* play) {
void func_809674C8(EnWeatherTag* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (Actor_XZDistanceBetweenActors(&player->actor, &this->actor) < WEATHER_TAG_RANGE100(&this->actor)) {
+ if (Actor_WorldDistXZToActor(&player->actor, &this->actor) < WEATHER_TAG_RANGE100(&this->actor)) {
if (CURRENT_DAY == 2) {
if ((gSaveContext.save.time >= CLOCK_TIME(7, 0)) && (gSaveContext.save.time < CLOCK_TIME(17, 30)) &&
(play->envCtx.unk_F2[2] == 0)) {
@@ -471,7 +472,7 @@ void func_809674C8(EnWeatherTag* this, PlayState* play) {
// WEATHERTAG_TYPE_LOCALDAY2RAIN 2
void func_80967608(EnWeatherTag* this, PlayState* play) {
if ((WEATHER_TAG_RANGE100(&this->actor) + 10.0f) <
- Actor_XZDistanceBetweenActors(&GET_PLAYER(play)->actor, &this->actor)) {
+ Actor_WorldDistXZToActor(&GET_PLAYER(play)->actor, &this->actor)) {
gWeatherMode = 0;
EnWeatherTag_SetupAction(this, func_809674C8);
}
@@ -483,12 +484,13 @@ void EnWeatherTag_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
if ((play->actorCtx.flags & ACTORCTX_FLAG_1) && (play->msgCtx.msgMode != 0) &&
(play->msgCtx.currentTextId == 0x5E6) && !FrameAdvance_IsEnabled(&play->state) &&
- (play->transitionTrigger == TRANS_TRIGGER_OFF) && (ActorCutscene_GetCurrentIndex() == -1) &&
- (play->csCtx.state == 0)) {
+ (play->transitionTrigger == TRANS_TRIGGER_OFF) && (CutsceneManager_GetCurrentCsId() == CS_ID_NONE) &&
+ (play->csCtx.state == CS_STATE_IDLE)) {
- gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)REG(15);
- if (REG(15) != 0) {
- gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.daySpeed);
+ gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)R_TIME_SPEED;
+ if (R_TIME_SPEED != 0) {
+ gSaveContext.save.time =
+ ((void)0, gSaveContext.save.time) + (u16)((void)0, gSaveContext.save.timeSpeedOffset);
}
}
}
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 84aa36b03..b1e7f8f86 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
@@ -19,8 +19,6 @@ typedef struct EnWeatherTag {
/* 0x158 */ u16 unk158; // increment/decrement amount for 154
} EnWeatherTag; // size = 0x15C
-extern const ActorInit En_Weather_Tag_InitVars;
-
#define WEATHER_TAG_TYPE(thisx) ((thisx)->params & 0xF)
#define WEATHER_TAG_PATHID(thisx) (((thisx)->params >> 4) & 0xF)
#define WEATHER_TAG_RANGE100(thisx) ((u8)(((thisx)->params >> 8) & 0xFF) * 100.0f)
diff --git a/src/overlays/actors/ovl_En_Wf/overlay.cfg b/src/overlays/actors/ovl_En_Wf/overlay.cfg
deleted file mode 100644
index d24cd8a27..000000000
--- a/src/overlays/actors/ovl_En_Wf/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Wf
-z_en_wf.c
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 811f828a8..44a50e99d 100644
--- a/src/overlays/actors/ovl_En_Wf/z_en_wf.c
+++ b/src/overlays/actors/ovl_En_Wf/z_en_wf.c
@@ -55,7 +55,7 @@ void func_80993524(EnWf* this);
void func_8099357C(EnWf* this, PlayState* play);
s32 func_8099408C(PlayState* play, EnWf* this);
-const ActorInit En_Wf_InitVars = {
+ActorInit En_Wf_InitVars = {
ACTOR_EN_WF,
ACTORCAT_PROP,
FLAGS,
@@ -299,17 +299,17 @@ void EnWf_Init(Actor* thisx, PlayState* play) {
if (this->actor.child != NULL) {
Player* player = GET_PLAYER(play);
- this->actor.child->xzDistToPlayer = Actor_XZDistanceBetweenActors(&this->actor, &player->actor);
+ this->actor.child->xzDistToPlayer = Actor_WorldDistXZToActor(&this->actor, &player->actor);
this->unk_2A4 = (temp_s0 * 0.5f) + 45.0f;
this->unk_29C = 0x32000 / this->unk_2A4;
- this->actor.shape.rot.y = Actor_YawBetweenActors(&this->actor, &player->actor);
+ this->actor.shape.rot.y = Actor_WorldYawTowardActor(&this->actor, &player->actor);
this->actor.world.pos.x -= this->unk_2A4 * Math_SinS(this->actor.shape.rot.y);
this->actor.world.pos.z -= this->unk_2A4 * Math_CosS(this->actor.shape.rot.y);
}
}
if (Flags_GetClear(play, this->actor.room)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -317,7 +317,7 @@ void EnWf_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->actor, 0.0075f);
if (this->actor.params == 0) {
- SkelAnime_InitFlex(play, &this->skelAnime, &gWolfosNormalSkel, &gWolfosWaitingAnim, this->jointTable,
+ SkelAnime_InitFlex(play, &this->skelAnime, &gWolfosNormalSkel, &gWolfosWaitAnim, this->jointTable,
this->morphTable, WOLFOS_NORMAL_LIMB_MAX);
this->actor.hintId = TATL_HINT_ID_WOLFOS;
CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable2, &sColChkInfoInit);
@@ -325,7 +325,7 @@ void EnWf_Init(Actor* thisx, PlayState* play) {
this->collider1.elements[1].info.toucher.damage = 8;
this->actor.colChkInfo.health = 6;
} else {
- SkelAnime_InitFlex(play, &this->skelAnime, &gWolfosWhiteSkel, &gWolfosWaitingAnim, this->jointTable,
+ SkelAnime_InitFlex(play, &this->skelAnime, &gWolfosWhiteSkel, &gWolfosWaitAnim, this->jointTable,
this->morphTable, WOLFOS_WHITE_LIMB_MAX);
this->actor.hintId = TATL_HINT_ID_WHITE_WOLFOS;
CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable1, &sColChkInfoInit);
@@ -367,7 +367,7 @@ void func_809907D4(EnWf* this) {
this->collider3.base.colType = COLTYPE_HIT3;
this->unk_2A0 = 80;
this->actor.flags &= ~ACTOR_FLAG_400;
- Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, 0, 80);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 80);
}
void func_80990854(EnWf* this, PlayState* play) {
@@ -405,7 +405,7 @@ s32 func_80990948(PlayState* play, EnWf* this, s16 arg2) {
if (((this->unk_295 == 0) ||
((this->unk_295 == 1) && (this->actor.child != NULL) && (this->actor.child->update != NULL))) &&
(this->actor.xzDistToPlayer > 160.0f) &&
- (this->unk_2A8 < Actor_XZDistanceToPoint(&this->actor, &this->actor.home.pos))) {
+ (this->unk_2A8 < Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos))) {
func_80993524(this);
return true;
}
@@ -419,7 +419,7 @@ s32 func_80990948(PlayState* play, EnWf* this, s16 arg2) {
if (func_800BE184(play, &this->actor, 100.0f, 24000, 0x2AA8, this->actor.shape.rot.y)) {
this->actor.shape.rot.y = this->actor.yawTowardsPlayer;
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
- if ((this->actor.bgCheckFlags & 8) && (sp38 < 12000)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) && (sp38 < 12000)) {
func_809926D0(this);
return true;
}
@@ -471,14 +471,15 @@ void func_80990C6C(EnWf* this, PlayState* play, s32 arg2) {
static Color_RGBA8 D_809942EC = { 255, 255, 255, 255 };
s32 i;
Vec3f sp88;
- u32 temp_v0;
+ FloorType floorType;
Color_RGBA8* phi_s1;
s16 phi_s6;
if (this->actor.floorPoly != NULL) {
- temp_v0 = func_800C99D4(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId);
- if (temp_v0 != 5) {
- if ((temp_v0 == 15) || (temp_v0 == 14)) {
+ floorType = SurfaceType_GetFloorType(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId);
+
+ if (floorType != FLOOR_TYPE_5) {
+ if ((floorType == FLOOR_TYPE_15) || (floorType == FLOOR_TYPE_14)) {
phi_s1 = &D_809942EC;
phi_s6 = Rand_ZeroFloat(150.0f) + 350.0f;
arg2 += 2;
@@ -499,9 +500,9 @@ void func_80990C6C(EnWf* this, PlayState* play, s32 arg2) {
}
void func_80990E4C(EnWf* this, PlayState* play) {
- if (Animation_OnFrame(&this->skelAnime, 1.0f) && (this->actor.bgCheckFlags & 1)) {
+ if (Animation_OnFrame(&this->skelAnime, 1.0f) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
func_80990C6C(this, play, 2);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WOLFOS_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WOLFOS_WALK);
}
}
@@ -517,7 +518,7 @@ s32 func_80990EAC(EnWf* this) {
void func_80990ED4(EnWf* this) {
this->actor.child = NULL;
this->actor.shape.rot.y = this->actor.yawTowardsPlayer;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WOLFOS_APPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WOLFOS_APPEAR);
func_80991438(this);
}
@@ -549,7 +550,7 @@ void func_80990F50(EnWf* this, PlayState* play) {
}
void func_80990FC8(EnWf* this) {
- Animation_Change(&this->skelAnime, &gWolfosRearingUpFallingOverAnim, 0.5f, 0.0f, 7.0f, ANIMMODE_ONCE_INTERP, 0.0f);
+ Animation_Change(&this->skelAnime, &gWolfosRearUpFallOverAnim, 0.5f, 0.0f, 7.0f, ANIMMODE_ONCE_INTERP, 0.0f);
this->unk_2A0 = 5;
this->actor.flags |= ACTOR_FLAG_1;
this->actionFunc = func_80991040;
@@ -561,7 +562,7 @@ void func_80991040(EnWf* this, PlayState* play) {
Math_StepToF(&this->actor.shape.shadowScale, 70.0f, 14.0f);
this->unk_2A0--;
if (this->unk_2A0 == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WOLFOS_APPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WOLFOS_APPEAR);
}
} else if (SkelAnime_Update(&this->skelAnime)) {
this->actor.scale.y = this->actor.scale.x;
@@ -571,8 +572,8 @@ void func_80991040(EnWf* this, PlayState* play) {
void func_809910F0(EnWf* this) {
this->collider2.base.acFlags &= ~AC_ON;
- this->actor.speedXZ = 0.0f;
- Animation_Change(&this->skelAnime, &gWolfosRearingUpFallingOverAnim, 0.5f, 0.0f, 7.0f, ANIMMODE_ONCE_INTERP, -5.0f);
+ this->actor.speed = 0.0f;
+ Animation_Change(&this->skelAnime, &gWolfosRearUpFallOverAnim, 0.5f, 0.0f, 7.0f, ANIMMODE_ONCE_INTERP, -5.0f);
this->unk_2A0 = 5;
this->actionFunc = func_80991174;
}
@@ -591,11 +592,11 @@ void func_80991174(EnWf* this, PlayState* play) {
void func_80991200(EnWf* this) {
this->collider2.base.acFlags |= AC_ON;
- Animation_MorphToLoop(&this->skelAnime, &gWolfosWaitingAnim, -4.0f);
+ Animation_MorphToLoop(&this->skelAnime, &gWolfosWaitAnim, -4.0f);
this->unk_2A0 = (s32)Rand_ZeroFloat(10.0f) + 2;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = func_80991280;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
void func_80991280(EnWf* this, PlayState* play) {
@@ -633,7 +634,7 @@ void func_80991280(EnWf* this, PlayState* play) {
}
if (this->unk_2A2 == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WOLFOS_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WOLFOS_CRY);
}
}
}
@@ -642,9 +643,9 @@ void func_80991280(EnWf* this, PlayState* play) {
void func_80991438(EnWf* this) {
this->collider2.base.acFlags |= AC_ON;
- Animation_MorphToLoop(&this->skelAnime, &gWolfosRunningAnim, -4.0f);
+ Animation_MorphToLoop(&this->skelAnime, &gWolfosRunAnim, -4.0f);
this->actor.world.rot.y = this->actor.shape.rot.y;
- this->actor.speedXZ = 8.0f;
+ this->actor.speed = 8.0f;
this->actionFunc = func_8099149C;
}
@@ -694,7 +695,7 @@ void func_8099149C(EnWf* this, PlayState* play) {
}
if (this->unk_2A2 == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WOLFOS_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WOLFOS_CRY);
}
func_80990E4C(this, play);
@@ -703,7 +704,7 @@ void func_8099149C(EnWf* this, PlayState* play) {
}
void func_80991738(EnWf* this) {
- Animation_MorphToLoop(&this->skelAnime, &gWolfosSidesteppingAnim, -4.0f);
+ Animation_MorphToLoop(&this->skelAnime, &gWolfosSidestepAnim, -4.0f);
this->actionFunc = func_8099177C;
}
@@ -748,20 +749,20 @@ void func_8099177C(EnWf* this, PlayState* play) {
}
}
if (this->unk_2A2 == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WOLFOS_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WOLFOS_CRY);
}
}
}
void func_80991948(EnWf* this) {
this->collider2.base.acFlags |= AC_ON;
- Animation_MorphToLoop(&this->skelAnime, &gWolfosRunningAnim, -4.0f);
+ Animation_MorphToLoop(&this->skelAnime, &gWolfosRunAnim, -4.0f);
if (Rand_ZeroOne() > 0.5f) {
this->unk_29A = 16000;
} else {
this->unk_29A = -16000;
}
- this->actor.speedXZ = 6.0f;
+ this->actor.speed = 6.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->unk_2A0 = (s32)Rand_ZeroFloat(30.0f) + 30;
this->actionFunc = func_809919F4;
@@ -776,7 +777,7 @@ void func_809919F4(EnWf* this, PlayState* play) {
if (!func_8099408C(play, this) && !func_80990948(play, this, 0)) {
this->actor.world.rot.y = this->actor.shape.rot.y;
sp26 = BINANG_ROT180(player->actor.shape.rot.y + this->unk_29A);
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
temp_v0 = (this->actor.wallYaw - this->actor.yawTowardsPlayer) - this->unk_29A;
if (ABS_ALT(temp_v0) > 0x2EE0) {
this->unk_29A = -this->unk_29A;
@@ -787,7 +788,7 @@ void func_809919F4(EnWf* this, PlayState* play) {
func_80990E4C(this, play);
if (this->unk_2A2 == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WOLFOS_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WOLFOS_CRY);
}
if ((Math_CosS(sp26 - this->actor.shape.rot.y) < -0.85f) && !Actor_OtherIsTargeted(play, &this->actor) &&
@@ -809,12 +810,12 @@ void func_809919F4(EnWf* this, PlayState* play) {
void func_80991C04(EnWf* this) {
this->collider2.base.acFlags |= AC_ON;
- Animation_PlayOnce(&this->skelAnime, &gWolfosSlashingAnim);
+ Animation_PlayOnce(&this->skelAnime, &gWolfosSlashAnim);
this->collider1.base.atFlags &= ~AT_BOUNCED;
this->actor.shape.rot.y = this->actor.yawTowardsPlayer;
this->unk_2A0 = 7;
this->skelAnime.endFrame = 20.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = func_80991C80;
}
@@ -827,11 +828,11 @@ void func_80991C80(EnWf* this, PlayState* play) {
sp2A = BINANG_SUB(player->actor.shape.rot.y, this->actor.shape.rot.y);
sp30 = ABS_ALT(BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.shape.rot.y));
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (((this->skelAnime.curFrame >= 9.0f) && (this->skelAnime.curFrame < 13.0f)) ||
((this->skelAnime.curFrame >= 17.0f) && (this->skelAnime.curFrame < 20.0f))) {
if (!(this->collider1.base.atFlags & AT_ON)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WOLFOS_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WOLFOS_ATTACK);
}
this->collider1.base.atFlags |= AT_ON;
} else {
@@ -879,7 +880,7 @@ void func_80991FD8(EnWf* this) {
if (this->skelAnime.curFrame > 15.0f) {
phi_f0 = 15.0f;
}
- Animation_Change(&this->skelAnime, &gWolfosSlashingAnim, -0.5f, this->skelAnime.curFrame - 1.0f, phi_f0,
+ Animation_Change(&this->skelAnime, &gWolfosSlashAnim, -0.5f, this->skelAnime.curFrame - 1.0f, phi_f0,
ANIMMODE_ONCE_INTERP, 0.0f);
this->collider1.base.atFlags &= ~AT_ON;
this->actionFunc = func_80992068;
@@ -923,12 +924,12 @@ void func_80992068(EnWf* this, PlayState* play) {
void func_8099223C(EnWf* this) {
this->collider2.base.acFlags &= ~AC_ON;
- Animation_MorphToPlayOnce(&this->skelAnime, &gWolfosBackflippingAnim, -3.0f);
+ Animation_MorphToPlayOnce(&this->skelAnime, &gWolfosBackflipAnim, -3.0f);
this->unk_2A0 = 0;
- this->actor.speedXZ = -6.0f;
+ this->actor.speed = -6.0f;
this->actor.shape.rot.y = this->actor.yawTowardsPlayer;
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_TEKU_JUMP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_TEKU_JUMP);
this->actionFunc = func_809922B4;
}
@@ -944,12 +945,12 @@ void func_809922B4(EnWf* this, PlayState* play) {
}
}
if (this->unk_2A2 == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WOLFOS_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WOLFOS_CRY);
}
}
void func_809923B0(EnWf* this) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->actor.velocity.y > 0.0f) {
this->actor.velocity.y = 0.0f;
}
@@ -974,24 +975,24 @@ void func_809923E4(EnWf* this, PlayState* play) {
void func_8099245C(EnWf* this) {
this->collider2.base.acFlags &= ~AC_ON;
Animation_MorphToPlayOnce(&this->skelAnime, &gWolfosDamagedAnim, -4.0f);
- if (this->actor.bgCheckFlags & 1) {
- this->actor.speedXZ = -4.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ this->actor.speed = -4.0f;
}
this->unk_298 = 0;
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WOLFOS_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WOLFOS_DAMAGE);
this->actionFunc = func_809924EC;
}
void func_809924EC(EnWf* this, PlayState* play) {
s16 sp26;
- if (this->actor.bgCheckFlags & 2) {
- this->actor.speedXZ = 0.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
+ this->actor.speed = 0.0f;
}
- if ((this->actor.bgCheckFlags & 1) && (this->actor.speedXZ < 0.0f)) {
- this->actor.speedXZ += 0.05f;
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.speed < 0.0f)) {
+ this->actor.speed += 0.05f;
}
Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 3000);
@@ -1002,7 +1003,8 @@ void func_809924EC(EnWf* this, PlayState* play) {
return;
}
- if ((this->actor.bgCheckFlags & 8) && (ABS_ALT(sp26) < 0x2EE0) && (this->actor.xzDistToPlayer < 120.0f)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) && (ABS_ALT(sp26) < 0x2EE0) &&
+ (this->actor.xzDistToPlayer < 120.0f)) {
func_809926D0(this);
} else if (!func_8099408C(play, this)) {
if ((this->actor.xzDistToPlayer <= 80.0f) && !Actor_OtherIsTargeted(play, &this->actor) &&
@@ -1021,24 +1023,25 @@ void func_809924EC(EnWf* this, PlayState* play) {
void func_809926D0(EnWf* this) {
this->collider2.base.acFlags &= ~AC_ON;
- Animation_Change(&this->skelAnime, &gWolfosBackflippingAnim, -1.0f,
- Animation_GetLastFrame(&gWolfosBackflippingAnim.common), 0.0f, ANIMMODE_ONCE, -3.0f);
+ Animation_Change(&this->skelAnime, &gWolfosBackflipAnim, -1.0f, Animation_GetLastFrame(&gWolfosBackflipAnim.common),
+ 0.0f, ANIMMODE_ONCE, -3.0f);
this->unk_2A0 = 0;
- this->actor.speedXZ = 6.5f;
+ this->actor.speed = 6.5f;
this->actor.velocity.y = 15.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_TEKU_JUMP);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_TEKU_JUMP);
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = func_80992784;
}
void func_80992784(EnWf* this, PlayState* play) {
Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 2500);
- if (SkelAnime_Update(&this->skelAnime) && (this->actor.bgCheckFlags & (2 | 1))) {
+ if (SkelAnime_Update(&this->skelAnime) &&
+ (this->actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH))) {
this->actor.shape.rot.x = 0;
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
this->actor.shape.rot.y = this->actor.yawTowardsPlayer;
this->actor.velocity.y = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.world.pos.y = this->actor.floorHeight;
if (!Actor_OtherIsTargeted(play, &this->actor)) {
func_80991C04(this);
@@ -1052,9 +1055,9 @@ void func_8099282C(EnWf* this) {
this->collider2.base.acFlags |= AC_ON;
this->collider1.base.atFlags &= ~AT_ON;
this->unk_2A0 = 10;
- this->actor.speedXZ = 0.0f;
- Animation_Change(&this->skelAnime, &gWolfosBlockingAnim, -1.0f, Animation_GetLastFrame(&gWolfosBlockingAnim.common),
- 0.0f, ANIMMODE_ONCE, -2.0f);
+ this->actor.speed = 0.0f;
+ Animation_Change(&this->skelAnime, &gWolfosBlockAnim, -1.0f, Animation_GetLastFrame(&gWolfosBlockAnim.common), 0.0f,
+ ANIMMODE_ONCE, -2.0f);
this->actionFunc = func_809928CC;
}
@@ -1091,7 +1094,7 @@ void func_80992A74(EnWf* this, PlayState* play) {
f32 temp_f0;
this->collider2.base.acFlags |= AC_ON;
- Animation_MorphToLoop(&this->skelAnime, &gWolfosRunningAnim, -4.0f);
+ Animation_MorphToLoop(&this->skelAnime, &gWolfosRunAnim, -4.0f);
player = GET_PLAYER(play);
temp_f0 = Math_SinS((player->actor.shape.rot.y + this->unk_29A) - this->actor.yawTowardsPlayer);
if (temp_f0 > 0.0f) {
@@ -1103,7 +1106,7 @@ void func_80992A74(EnWf* this, PlayState* play) {
} else {
this->unk_29A = -16000;
}
- this->actor.speedXZ = 6.0f;
+ this->actor.speed = 6.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->unk_2A0 = (s32)Rand_ZeroFloat(10.0f) + 5;
this->actionFunc = func_80992B8C;
@@ -1115,7 +1118,7 @@ void func_80992B8C(EnWf* this, PlayState* play) {
Player* player = GET_PLAYER(play);
Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer + this->unk_29A, 2000);
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
sp2C = BINANG_SUB((this->actor.wallYaw - this->actor.yawTowardsPlayer), this->unk_29A);
if (ABS_ALT(sp2C) > 0x2EE0) {
this->unk_29A = -this->unk_29A;
@@ -1146,33 +1149,33 @@ void func_80992B8C(EnWf* this, PlayState* play) {
func_80990E4C(this, play);
if (this->unk_2A2 == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WOLFOS_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WOLFOS_CRY);
}
}
}
void func_80992D6C(EnWf* this) {
this->collider2.base.acFlags &= ~AC_ON;
- Animation_MorphToPlayOnce(&this->skelAnime, &gWolfosRearingUpFallingOverAnim, -4.0f);
+ Animation_MorphToPlayOnce(&this->skelAnime, &gWolfosRearUpFallOverAnim, -4.0f);
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
- if (this->actor.bgCheckFlags & 1) {
- this->actor.speedXZ = -6.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ this->actor.speed = -6.0f;
}
this->actor.flags &= ~ACTOR_FLAG_1;
this->unk_2A0 = 25;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WOLFOS_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WOLFOS_DEAD);
this->actionFunc = func_80992E0C;
}
void func_80992E0C(EnWf* this, PlayState* play) {
static Vec3f D_809942F0 = { 0.0f, 0.5f, 0.0f };
- if (this->actor.bgCheckFlags & 2) {
- this->actor.speedXZ = 0.0f;
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
+ this->actor.speed = 0.0f;
}
- if (this->actor.bgCheckFlags & 1) {
- Math_StepToF(&this->actor.speedXZ, 0.0f, 0.5f);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
+ Math_StepToF(&this->actor.speed, 0.0f, 0.5f);
}
if (SkelAnime_Update(&this->skelAnime)) {
@@ -1181,7 +1184,7 @@ void func_80992E0C(EnWf* this, PlayState* play) {
} else {
Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0x60);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
s32 i;
Vec3f sp60;
@@ -1205,7 +1208,7 @@ void func_80992E0C(EnWf* this, PlayState* play) {
}
void func_80992FD4(EnWf* this) {
- Animation_MorphToLoop(&this->skelAnime, &gWolfosWaitingAnim, -4.0f);
+ Animation_MorphToLoop(&this->skelAnime, &gWolfosWaitAnim, -4.0f);
this->actionFunc = func_80993018;
}
@@ -1217,7 +1220,7 @@ void func_80993018(EnWf* this, PlayState* play) {
} else if (this->actor.child->xzDistToPlayer < (80.0f + this->unk_2A4)) {
func_80993350(this);
} else {
- s16 temp_v0 = Actor_YawBetweenActors(this->actor.child, &this->actor);
+ s16 temp_v0 = Actor_WorldYawTowardActor(this->actor.child, &this->actor);
s16 temp_v1 = BINANG_SUB(temp_v0 - this->actor.child->yawTowardsPlayer, 0x8000);
if (ABS_ALT(temp_v1) > 0x800) {
@@ -1232,8 +1235,8 @@ void func_80993018(EnWf* this, PlayState* play) {
}
void func_80993148(EnWf* this) {
- Animation_MorphToLoop(&this->skelAnime, &gWolfosRunningAnim, -4.0f);
- this->actor.speedXZ = 0.0f;
+ Animation_MorphToLoop(&this->skelAnime, &gWolfosRunAnim, -4.0f);
+ this->actor.speed = 0.0f;
this->actionFunc = func_80993194;
}
@@ -1251,7 +1254,7 @@ void func_80993194(EnWf* this, PlayState* play) {
if (this->actor.child->xzDistToPlayer < (80.0f + this->unk_2A4)) {
func_80993350(this);
} else {
- sp36 = Actor_YawBetweenActors(this->actor.child, &this->actor);
+ sp36 = Actor_WorldYawTowardActor(this->actor.child, &this->actor);
sp34 = Math_SmoothStepToS(&sp36, BINANG_ROT180(this->actor.child->yawTowardsPlayer), 10, this->unk_29C,
16);
this->actor.world.pos.x = (Math_SinS(sp36) * this->unk_2A4) + this->actor.child->world.pos.x;
@@ -1272,13 +1275,13 @@ void func_80993194(EnWf* this, PlayState* play) {
}
if (this->unk_2A2 == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WOLFOS_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WOLFOS_CRY);
}
}
void func_80993350(EnWf* this) {
- Animation_MorphToLoop(&this->skelAnime, &gWolfosRunningAnim, -4.0f);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WOLFOS_APPEAR);
+ Animation_MorphToLoop(&this->skelAnime, &gWolfosRunAnim, -4.0f);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WOLFOS_APPEAR);
this->actionFunc = func_809933A0;
}
@@ -1293,7 +1296,7 @@ void func_809933A0(EnWf* this, PlayState* play) {
if (func_80990EAC(this)) {
func_80990ED4(this);
} else {
- sp2E = Actor_YawBetweenActors(this->actor.child, &this->actor);
+ sp2E = Actor_WorldYawTowardActor(this->actor.child, &this->actor);
Math_ScaledStepToS(&sp2E, this->actor.child->yawTowardsPlayer, this->unk_29C >> 2);
sp2C = sp2E - this->actor.child->yawTowardsPlayer;
this->actor.world.pos.x = (Math_SinS(sp2E) * this->unk_2A4) + this->actor.child->world.pos.x;
@@ -1312,13 +1315,13 @@ void func_809933A0(EnWf* this, PlayState* play) {
func_80990ED4(this);
}
if (this->unk_2A2 == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WOLFOS_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WOLFOS_CRY);
}
}
void func_80993524(EnWf* this) {
- Animation_MorphToLoop(&this->skelAnime, &gWolfosRunningAnim, -4.0f);
- this->actor.speedXZ = 6.0f;
+ Animation_MorphToLoop(&this->skelAnime, &gWolfosRunAnim, -4.0f);
+ this->actor.speed = 6.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = func_8099357C;
}
@@ -1330,14 +1333,14 @@ void func_8099357C(EnWf* this, PlayState* play) {
func_80990E4C(this, play);
if (this->unk_295 != 0) {
if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) {
- sp2E = Actor_YawBetweenActors(&this->actor, this->actor.child);
+ sp2E = Actor_WorldYawTowardActor(&this->actor, this->actor.child);
if (func_80990EAC(this)) {
this->actor.child = NULL;
func_80991738(this);
return;
}
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
if (BINANG_SUB(sp2E, this->actor.wallYaw) > 0) {
sp2E = this->actor.wallYaw - 0x4000;
} else {
@@ -1348,7 +1351,7 @@ void func_8099357C(EnWf* this, PlayState* play) {
Math_SmoothStepToS(&this->actor.shape.rot.y, sp2E, 10, 0x800, 16);
this->actor.world.rot.y = this->actor.shape.rot.y;
- if (Actor_XZDistanceBetweenActors(&this->actor, this->actor.child) < (this->unk_2A4 + 10.0f)) {
+ if (Actor_WorldDistXZToActor(&this->actor, this->actor.child) < (this->unk_2A4 + 10.0f)) {
func_80993148(this);
}
} else {
@@ -1356,16 +1359,16 @@ void func_8099357C(EnWf* this, PlayState* play) {
func_80991738(this);
}
} else {
- Math_SmoothStepToS(&this->actor.shape.rot.y, Actor_YawToPoint(&this->actor, &this->actor.home.pos), 10, 0x800,
- 16);
+ Math_SmoothStepToS(&this->actor.shape.rot.y, Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos), 10,
+ 0x800, 16);
this->actor.world.rot.y = this->actor.shape.rot.y;
- if (Actor_XZDistanceToPoint(&this->actor, &this->actor.home.pos) < 40.0f) {
+ if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) < 40.0f) {
func_809910F0(this);
}
}
if (this->unk_2A2 == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WOLFOS_CRY);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WOLFOS_CRY);
}
}
@@ -1422,16 +1425,16 @@ void func_8099386C(EnWf* this, PlayState* play) {
if (this->actor.colChkInfo.damageEffect == 1) {
this->unk_2A0 = 40;
- Actor_SetColorFilter(&this->actor, 0, 0x78, 0, 40);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 120, COLORFILTER_BUFFLAG_OPA, 40);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
func_809923B0(this);
} else if (this->actor.colChkInfo.damageEffect == 5) {
this->unk_2A0 = 40;
- Actor_SetColorFilter(&this->actor, 0, 0xFF, 0, 40);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 40);
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL;
this->drawDmgEffScale = 0.75f;
this->drawDmgEffAlpha = 2.0f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE);
func_809923B0(this);
} else if (this->actor.colChkInfo.damageEffect == 3) {
func_809907D4(this);
@@ -1454,7 +1457,7 @@ void func_8099386C(EnWf* this, PlayState* play) {
CLEAR_TAG_LARGE_LIGHT_RAYS);
}
- Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
if (this->actor.colChkInfo.health == 0) {
func_80992D6C(this);
} else {
@@ -1483,10 +1486,12 @@ void EnWf_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 32.0f, 30.0f, 60.0f, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 32.0f, 30.0f, 60.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
func_80993738(this, play);
- if (this->actor.bgCheckFlags & (2 | 1)) {
+ if (this->actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH)) {
func_800BE3D0(&this->actor, this->actor.shape.rot.y, &this->actor.shape.rot);
} else {
Math_ScaledStepToS(&this->actor.shape.rot.x, 0, 600);
@@ -1590,7 +1595,7 @@ s32 func_8099408C(PlayState* play, EnWf* this) {
s16 temp_v1;
if (temp_v0 != NULL) {
- temp_v1 = (Actor_YawBetweenActors(&this->actor, temp_v0) - this->actor.shape.rot.y) - this->unk_29E;
+ temp_v1 = (Actor_WorldYawTowardActor(&this->actor, temp_v0) - this->actor.shape.rot.y) - this->unk_29E;
if (ABS_ALT(temp_v1) < 0x3000) {
if (Rand_ZeroOne() < 0.5f) {
func_8099223C(this);
diff --git a/src/overlays/actors/ovl_En_Wf/z_en_wf.h b/src/overlays/actors/ovl_En_Wf/z_en_wf.h
index 38570dd9e..c8a0c7af8 100644
--- a/src/overlays/actors/ovl_En_Wf/z_en_wf.h
+++ b/src/overlays/actors/ovl_En_Wf/z_en_wf.h
@@ -37,6 +37,4 @@ typedef struct EnWf {
/* 0x49C */ ColliderCylinder collider3;
} EnWf; // size = 0x4E8
-extern const ActorInit En_Wf_InitVars;
-
#endif // Z_EN_WF_H
diff --git a/src/overlays/actors/ovl_En_Wiz/overlay.cfg b/src/overlays/actors/ovl_En_Wiz/overlay.cfg
deleted file mode 100644
index a52f236dc..000000000
--- a/src/overlays/actors/ovl_En_Wiz/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Wiz
-z_en_wiz.c
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 0abf1fe56..125be5056 100644
--- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c
+++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c
@@ -10,7 +10,7 @@
#define FLAGS \
(ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_1000 | ACTOR_FLAG_100000 | \
- ACTOR_FLAG_8000000 | ACTOR_FLAG_80000000)
+ ACTOR_FLAG_CANT_LOCK_ON | ACTOR_FLAG_80000000)
#define THIS ((EnWiz*)thisx)
@@ -80,7 +80,7 @@ typedef enum {
/* 5 */ EN_WIZ_ANIM_DAMAGE,
} EnWizAnimation;
-const ActorInit En_Wiz_InitVars = {
+ActorInit En_Wiz_InitVars = {
ACTOR_EN_WIZ,
ACTORCAT_ENEMY,
FLAGS,
@@ -352,7 +352,7 @@ void EnWiz_Init(Actor* thisx, PlayState* play) {
}
if ((this->switchFlag >= 0) && (Flags_GetSwitch(play, this->switchFlag))) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -456,9 +456,9 @@ void EnWiz_HandleIntroCutscene(EnWiz* this, PlayState* play) {
this->targetPlatformLightAlpha = 255;
Math_Vec3f_Copy(&this->platformLightPos, &this->actor.world.pos);
if (this->fightState == EN_WIZ_FIGHT_STATE_FIRST_PHASE) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WIZ_UNARI);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_UNARI);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WIZ_VOICE - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_VOICE - SFX_FLAG);
}
this->introCutsceneTimer = 40;
@@ -504,7 +504,7 @@ void EnWiz_HandleIntroCutscene(EnWiz* this, PlayState* play) {
break;
case EN_WIZ_INTRO_CS_RUN_IN_CIRCLES:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WIZ_RUN - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_RUN - SFX_FLAG);
if (this->introCutsceneTimer == 0) {
this->animLoopCounter = this->introCutsceneCameraAngle = 0;
this->introCutsceneState = EN_WIZ_INTRO_CS_DISAPPEAR;
@@ -663,18 +663,18 @@ void EnWiz_MoveGhosts(EnWiz* this) {
}
if (playSfx) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WIZ_RUN - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_RUN - SFX_FLAG);
}
}
void EnWiz_StartIntroCutscene(EnWiz* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetFlag(this->actor.cutscene, &this->actor);
- this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene);
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCsAndSetFlag(this->actor.csId, &this->actor);
+ this->subCamId = CutsceneManager_GetCurrentSubCamId(this->actor.csId);
this->actor.flags |= ACTOR_FLAG_100000;
EnWiz_SetupAppear(this, play);
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
@@ -702,9 +702,9 @@ void EnWiz_SetupAppear(EnWiz* this, PlayState* play) {
Math_Vec3f_Copy(&this->platformLightPos, &this->actor.world.pos);
if (this->fightState == EN_WIZ_FIGHT_STATE_FIRST_PHASE) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WIZ_UNARI);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_UNARI);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WIZ_VOICE - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_VOICE - SFX_FLAG);
}
}
@@ -744,7 +744,7 @@ void EnWiz_Appear(EnWiz* this, PlayState* play) {
this->shouldStartTimer = true;
}
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WIZ_VOICE - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_VOICE - SFX_FLAG);
}
if (this->timer == 0) {
@@ -756,7 +756,7 @@ void EnWiz_Appear(EnWiz* this, PlayState* play) {
return;
} else {
this->action = EN_WIZ_ACTION_RUN_IN_CIRCLES;
- this->actor.flags &= ~ACTOR_FLAG_8000000;
+ this->actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON;
this->ghostColliders.elements[0].info.bumper.dmgFlags = 0x1013A22;
Math_Vec3f_Copy(&this->staffTargetFlameScale, &staffTargetFlameScale);
this->targetPlatformLightAlpha = 0;
@@ -803,7 +803,7 @@ void EnWiz_Dance(EnWiz* this, PlayState* play) {
Math_SmoothStepToS(&this->alpha, 255, 1, 5, 0);
Math_ApproachF(&this->scale, 0.015f, 0.05f, 0.001f);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WIZ_RUN - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_RUN - SFX_FLAG);
this->actor.world.rot.y += this->rotationalVelocity;
if (this->fightState >= EN_WIZ_FIGHT_STATE_SECOND_PHASE_GHOSTS_RUN_AROUND) {
EnWiz_MoveGhosts(this);
@@ -828,13 +828,13 @@ void EnWiz_Dance(EnWiz* this, PlayState* play) {
}
void EnWiz_SetupSecondPhaseCutscene(EnWiz* this, PlayState* play) {
- s16 secondPhaseCutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene);
+ s16 secondPhaseCsId = CutsceneManager_GetAdditionalCsId(this->actor.csId);
- if (!ActorCutscene_GetCanPlayNext(secondPhaseCutscene)) {
- ActorCutscene_SetIntentToPlay(secondPhaseCutscene);
+ if (!CutsceneManager_IsNext(secondPhaseCsId)) {
+ CutsceneManager_Queue(secondPhaseCsId);
} else {
- ActorCutscene_StartAndSetFlag(secondPhaseCutscene, &this->actor);
- this->subCamId = ActorCutscene_GetCurrentSubCamId(secondPhaseCutscene);
+ CutsceneManager_StartWithPlayerCsAndSetFlag(secondPhaseCsId, &this->actor);
+ this->subCamId = CutsceneManager_GetCurrentSubCamId(secondPhaseCsId);
this->actor.flags |= ACTOR_FLAG_100000;
EnWiz_ChangeAnim(this, EN_WIZ_ANIM_DANCE, false);
this->action = EN_WIZ_ACTION_RUN_BETWEEN_PLATFORMS;
@@ -856,7 +856,7 @@ void EnWiz_SecondPhaseCutscene(EnWiz* this, PlayState* play) {
Math_SmoothStepToS(&this->alpha, 255, 1, 5, 0);
subCam = Play_GetCamera(play, this->subCamId);
Math_Vec3f_Copy(&subCam->at, &this->actor.focus.pos);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WIZ_RUN - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_RUN - SFX_FLAG);
if (this->platforms[this->nextPlatformIndex] != NULL) {
f32 diffX = this->actor.world.pos.x - this->platforms[this->nextPlatformIndex]->world.pos.x;
f32 diffZ = this->actor.world.pos.z - this->platforms[this->nextPlatformIndex]->world.pos.z;
@@ -875,7 +875,7 @@ void EnWiz_SecondPhaseCutscene(EnWiz* this, PlayState* play) {
s32 pad;
s32 i;
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
if (sqrtf(SQ(diffX) + SQ(diffZ)) < 20.0f) {
for (i = 0; i < this->platformCount; i++) {
Math_Vec3f_Copy(&this->ghostPos[i], &gZeroVec3f);
@@ -885,7 +885,7 @@ void EnWiz_SecondPhaseCutscene(EnWiz* this, PlayState* play) {
this->platformCount = 0;
this->fightState = EN_WIZ_FIGHT_STATE_SECOND_PHASE_GHOSTS_COPY_WIZROBE;
this->timer = 0;
- ActorCutscene_Stop(ActorCutscene_GetAdditionalCutscene(this->actor.cutscene));
+ CutsceneManager_Stop(CutsceneManager_GetAdditionalCsId(this->actor.csId));
this->actor.flags &= ~ACTOR_FLAG_100000;
EnWiz_SetupDisappear(this);
return;
@@ -976,8 +976,8 @@ void EnWiz_Attack(EnWiz* this, PlayState* play) {
Math_Vec3f_Pitch(&pos, &player->actor.world.pos),
Math_Vec3f_Yaw(&pos, &player->actor.world.pos), 0, type * 4);
this->hasActiveProjectile = true;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WIZ_ATTACK);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_PL_MAGIC_FIRE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_ATTACK);
+ Actor_PlaySfx(&this->actor, NA_SE_PL_MAGIC_FIRE);
}
if ((curFrame >= 8.0f) && !this->shouldStartTimer) {
@@ -1003,8 +1003,8 @@ void EnWiz_SetupDisappear(EnWiz* this) {
}
this->targetPlatformLightAlpha = 0;
- this->actor.flags |= ACTOR_FLAG_8000000;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WIZ_DISAPPEAR);
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_DISAPPEAR);
Math_SmoothStepToS(&this->rotationalVelocity, 0x1388, 0x64, 0x3E8, 0x3E8);
this->actor.world.rot.y += this->rotationalVelocity;
this->actor.flags &= ~ACTOR_FLAG_1;
@@ -1037,7 +1037,7 @@ void EnWiz_Disappear(EnWiz* this, PlayState* play) {
if ((this->introCutsceneState == EN_WIZ_INTRO_CS_DISAPPEAR) && (this->introCutsceneTimer == 0)) {
this->introCutsceneState = EN_WIZ_INTRO_CS_END;
- ActorCutscene_Stop(this->actor.cutscene);
+ CutsceneManager_Stop(this->actor.csId);
this->actor.flags &= ~ACTOR_FLAG_100000;
}
@@ -1055,16 +1055,16 @@ void EnWiz_Disappear(EnWiz* this, PlayState* play) {
void EnWiz_SetupDamaged(EnWiz* this, PlayState* play) {
EnWiz_ChangeAnim(this, EN_WIZ_ANIM_DAMAGE, false);
- Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
this->timer = 20;
if ((this->fightState != EN_WIZ_FIGHT_STATE_FIRST_PHASE) && (this->actor.colChkInfo.health <= 0)) {
Enemy_StartFinishingBlow(play, &this->actor);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WIZ_DEAD);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_DEAD);
this->timer = 0;
this->actor.flags &= ~ACTOR_FLAG_1;
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WIZ_DAMAGE);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_DAMAGE);
}
this->scale = 0.015f;
@@ -1146,12 +1146,14 @@ void EnWiz_Damaged(EnWiz* this, PlayState* play) {
EnWiz_SetupDisappear(this);
}
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
}
Math_SmoothStepToS(&this->platformLightAlpha, this->targetPlatformLightAlpha, 20, 50, 10);
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 40.0f, 40.0f, 0x1F);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 40.0f, 40.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 |
+ UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10);
}
void EnWiz_SetupDead(EnWiz* this) {
@@ -1183,7 +1185,7 @@ void EnWiz_Dead(EnWiz* this, PlayState* play) {
if (this->alpha < 30) {
EnWiz_SelectPlatform(this, play);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 50, NA_SE_EN_EXTINCT);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
if (this->switchFlag >= 0) {
Flags_SetSwitch(play, this->switchFlag);
}
@@ -1261,7 +1263,8 @@ void EnWiz_UpdateDamage(EnWiz* this, PlayState* play) {
// If the player throws a Deku Nut or hits a ghost's collider (something that is impossible
// in the final game, since EnWiz_Init effectively disables them), then the below code will
// "destroy" the ghost by turning into a cloud of smoke.
- if ((iREG(50) != 0) || (this->ghostColliders.elements[i + 1].info.bumperFlags & BUMP_HIT)) {
+ if ((R_TRANS_FADE_FLASH_ALPHA_STEP != 0) ||
+ (this->ghostColliders.elements[i + 1].info.bumperFlags & BUMP_HIT)) {
//! @bug: If a single ghost is destroyed, then changing the fight state here will cause
//! strange behavior; the ghosts will stand still and pretend to attack the player like
//! the real Wizrobe. Since Deku Nuts destroy all ghosts at once, and since the ghost
@@ -1519,7 +1522,7 @@ void EnWiz_Draw(Actor* thisx, PlayState* play) {
if (this->fightState == EN_WIZ_FIGHT_STATE_FIRST_PHASE) {
Matrix_Push();
- AnimatedMat_Draw(play, Lib_SegmentedToVirtual(&gWizrobePlatformLightTexAnim));
+ AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWizrobePlatformLightTexAnim));
Matrix_Translate(this->platformLightPos.x, this->platformLightPos.y, this->platformLightPos.z, MTXMODE_NEW);
Matrix_Scale(0.01f, 0.01f, 0.01f, MTXMODE_APPLY);
gDPPipeSync(POLY_XLU_DISP++);
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 3d18abab2..4d35a0f68 100644
--- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h
+++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h
@@ -77,6 +77,4 @@ typedef struct EnWiz {
/* 0x8D0 */ Vec3s ghostJointTables[10][WIZROBE_LIMB_MAX];
} EnWiz; // size = 0xD80
-extern const ActorInit En_Wiz_InitVars;
-
#endif // Z_EN_WIZ_H
diff --git a/src/overlays/actors/ovl_En_Wiz_Brock/overlay.cfg b/src/overlays/actors/ovl_En_Wiz_Brock/overlay.cfg
deleted file mode 100644
index 8976343c8..000000000
--- a/src/overlays/actors/ovl_En_Wiz_Brock/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Wiz_Brock
-z_en_wiz_brock.c
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 ce13687a7..4a3689005 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
@@ -7,7 +7,7 @@
#include "z_en_wiz_brock.h"
#include "objects/object_wiz/object_wiz.h"
-#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_8000000)
+#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_CANT_LOCK_ON)
#define THIS ((EnWizBrock*)thisx)
@@ -21,7 +21,7 @@ void EnWizBrock_UpdateStatus(EnWizBrock* this, PlayState* play);
s16 sPlatformIndex = 0;
-const ActorInit En_Wiz_Brock_InitVars = {
+ActorInit En_Wiz_Brock_InitVars = {
ACTOR_EN_WIZ_BROCK,
ACTORCAT_PROP,
FLAGS,
@@ -80,7 +80,7 @@ void EnWizBrock_UpdateStatus(EnWizBrock* this, PlayState* play) {
(BREG(56) / 1000.0f) + 0.002f);
this->dyna.actor.scale.z = this->dyna.actor.scale.x;
if (this->dyna.actor.scale.y < 0.001f) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
}
}
@@ -121,7 +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));
+ AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWizrobePlatformCenterTexAnim));
gDPPipeSync(POLY_XLU_DISP++);
gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 255, 255, 255);
if (this->platformType == EN_WIZ_BROCK_PLATFORM_TYPE_FIRE) {
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 3b23d08b0..3df0362ed 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
@@ -25,6 +25,4 @@ typedef struct EnWizBrock {
/* 0x1AC */ f32 alpha;
} EnWizBrock; // size = 0x1B0
-extern const ActorInit En_Wiz_Brock_InitVars;
-
#endif // Z_EN_WIZ_BROCK_H
diff --git a/src/overlays/actors/ovl_En_Wiz_Fire/overlay.cfg b/src/overlays/actors/ovl_En_Wiz_Fire/overlay.cfg
deleted file mode 100644
index 47aa9022a..000000000
--- a/src/overlays/actors/ovl_En_Wiz_Fire/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Wiz_Fire
-z_en_wiz_fire.c
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 ca3fde745..bad93b685 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
@@ -8,7 +8,7 @@
#include "overlays/actors/ovl_En_Wiz/z_en_wiz.h"
#include "objects/object_wiz/object_wiz.h"
-#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_8000000)
+#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_CANT_LOCK_ON)
#define THIS ((EnWizFire*)thisx)
@@ -37,7 +37,7 @@ typedef enum {
static s32 sPoolHitByIceArrow = false;
-const ActorInit En_Wiz_Fire_InitVars = {
+ActorInit En_Wiz_Fire_InitVars = {
ACTOR_EN_WIZ_FIRE,
ACTORCAT_ENEMY,
FLAGS,
@@ -206,15 +206,15 @@ void EnWiz_MoveMagicProjectile(EnWizFire* this, PlayState* play) {
Math_ApproachF(&this->scale, this->targetScale, 0.2f, 0.01f);
if (this->wallCheckTimer == 0) {
- if ((this->actor.bgCheckFlags & 8) && (this->type == EN_WIZ_FIRE_TYPE_MAGIC_PROJECTILE) && (this->timer != 0) &&
- (this->actor.bgCheckFlags & 8)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) && (this->type == EN_WIZ_FIRE_TYPE_MAGIC_PROJECTILE) &&
+ (this->timer != 0) && (this->actor.bgCheckFlags & BGCHECKFLAG_WALL)) {
sPoolHitByIceArrow = false;
this->timer = 0;
this->targetScale = 0.0f;
}
}
- if ((this->actor.bgCheckFlags & 1) && (this->poolTimer == 0)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->poolTimer == 0)) {
s32 i;
s16 arcingProjectileRotY;
s32 pad;
@@ -260,13 +260,13 @@ void EnWiz_MoveMagicProjectile(EnWizFire* this, PlayState* play) {
arcingProjectileRotY += BINANG_ADD((s32)randPlusMinusPoint5Scaled(0x1000), 0x3333);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_BOMB_EXPLOSION);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_BOMB_EXPLOSION);
this->poolTimer = Rand_S16Offset(70, 30);
if (this->poolTimer != 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WIZ_EXP - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_EXP - SFX_FLAG);
}
} else if (this->poolTimer != 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
}
Math_Vec3f_Copy(&this->actor.velocity, &gZeroVec3f);
@@ -291,7 +291,7 @@ void EnWiz_MoveMagicProjectile(EnWizFire* this, PlayState* play) {
}
if (Player_HasMirrorShieldEquipped(play) && (this->collider.base.atFlags & AT_BOUNCED)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_SHIELD_REFLECT_MG);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_SHIELD_REFLECT_MG);
this->collider.base.atFlags &= ~(AT_TYPE_ENEMY | AT_BOUNCED | AT_HIT);
this->collider.base.atFlags |= AT_TYPE_PLAYER;
this->collider.info.toucher.dmgFlags = 0x20;
@@ -330,7 +330,7 @@ void EnWiz_SmallFlame(EnWizFire* this, PlayState* play) {
Math_ApproachF(&this->scale, 2.0f * this->targetScale, 0.2f, 0.002f);
Math_ApproachZeroF(&this->alpha, 1.0f, 35.0f);
if ((this->timer == 0) && (this->alpha < 2.0f)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
return;
}
@@ -351,7 +351,7 @@ void EnWiz_SmallFlame(EnWizFire* this, PlayState* play) {
}
if (this->timer != 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BURN_OUT - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BURN_OUT - SFX_FLAG);
}
}
@@ -392,7 +392,7 @@ void EnWiz_Pool(EnWizFire* this, PlayState* play) {
this->collider.dim.height = 30;
this->collider.dim.yShift = 15;
EnWizFire_InitializeEffect(this, &pos, &accel);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
return;
}
@@ -426,7 +426,7 @@ void EnWiz_Pool(EnWizFire* this, PlayState* play) {
if (this->isIceType == true) {
Math_ApproachZeroF(&this->poolScale, 0.046f, 0.001f);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
if (!this->shouldPoolFadeOut) {
if ((this->actor.parent != NULL) && (this->actor.parent->id == ACTOR_EN_WIZ) && (this->poolScale < 0.05f)) {
@@ -444,7 +444,7 @@ void EnWiz_Pool(EnWizFire* this, PlayState* play) {
if ((this->poolScale < 0.001f) && (this->blendScaleFrac < 0.001f)) {
sPoolHitByIceArrow = false;
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
return;
@@ -463,7 +463,7 @@ void EnWiz_Pool(EnWizFire* this, PlayState* play) {
wiz->hasActiveProjectile = false;
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
}
@@ -483,7 +483,7 @@ void EnWiz_KillMagicProjectile(EnWizFire* this, PlayState* play) {
}
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
}
@@ -573,7 +573,9 @@ void EnWizFire_Update(Actor* thisx, PlayState* play2) {
DECR(this->steamSpawnTimer);
DECR(this->poolTimer);
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 5.0f, 10, 0x1D);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 5.0f, 10,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 |
+ UPDBGCHECKINFO_FLAG_10);
if ((this->hitByIceArrow || sPoolHitByIceArrow) && (this->steamSpawnTimer == 0)) {
Vec3f accel;
@@ -625,7 +627,7 @@ void EnWizFire_Update(Actor* thisx, PlayState* play2) {
if (this->collider.base.atFlags & AT_HIT) {
this->collider.base.atFlags &= ~AT_HIT;
if (this->type == EN_WIZ_FIRE_TYPE_MAGIC_PROJECTILE) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WIZ_LAUGH2);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_WIZ_LAUGH2);
if (player->invincibilityTimer > 0) {
player->invincibilityTimer += 40;
if (this->isIceType) {
@@ -636,7 +638,7 @@ void EnWizFire_Update(Actor* thisx, PlayState* play2) {
}
}
- if ((player->stateFlags2 & 0x4000) && (player->unk_AE8 < 90)) {
+ if ((player->stateFlags2 & PLAYER_STATE2_4000) && (player->unk_AE8 < 90)) {
player->unk_AE8 = 90;
}
diff --git a/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.h b/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.h
index 180192d4c..90bf472dc 100644
--- a/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.h
+++ b/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.h
@@ -64,6 +64,4 @@ typedef struct EnWizFire {
/* 0x0254 */ EnWizFireEffect effects[200];
} EnWizFire; // size = 0x2AF4
-extern const ActorInit En_Wiz_Fire_InitVars;
-
#endif // Z_EN_WIZ_FIRE_H
diff --git a/src/overlays/actors/ovl_En_Wood02/overlay.cfg b/src/overlays/actors/ovl_En_Wood02/overlay.cfg
deleted file mode 100644
index 52dbc67e4..000000000
--- a/src/overlays/actors/ovl_En_Wood02/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Wood02
-z_en_wood02.c
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 08295ad1e..3c0357999 100644
--- a/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c
+++ b/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c
@@ -4,6 +4,7 @@
* Description: Trees, shrubs
*/
+#include "prevent_bss_reordering.h"
#include "z_en_wood02.h"
#include "objects/object_wood02/object_wood02.h"
@@ -35,10 +36,10 @@ typedef enum {
/* 5 */ WOOD_DRAW_LEAF_YELLOW
} WoodDrawType;
-static f32 sSpawnCos;
-static f32 sSpawnSin;
+f32 sWood02SpawnCos;
+f32 sWood02SpawnSin;
-const ActorInit En_Wood02_InitVars = {
+ActorInit En_Wood02_InitVars = {
ACTOR_EN_WOOD02,
ACTORCAT_PROP,
FLAGS,
@@ -70,9 +71,9 @@ static ColliderCylinderInit sCylinderInit = {
{ 18, 60, 0, { 0, 0, 0 } },
};
-static f32 sSpawnDistance[] = { 707.0f, 525.0f, 510.0f, 500.0f, 566.0f, 141.0f };
+f32 sWood02SpawnDistance[] = { 707.0f, 525.0f, 510.0f, 500.0f, 566.0f, 141.0f };
-static s16 sSpawnAngle[] = { 0x1FFF, 0x4C9E, 0x77F5, 0xA5C9, -0x293D, 0xA000 };
+s16 sWood02SpawnAngle[] = { 0x1FFF, 0x4C9E, 0x77F5, 0xA5C9, -0x293D, 0xA000 };
static InitChainEntry sInitChain[] = {
ICHAIN_F32(targetArrowOffset, 5600, ICHAIN_STOP),
@@ -136,12 +137,12 @@ void EnWood02_SpawnOffspring(EnWood02* this, PlayState* play) {
extraRot = 0x4000;
}
- sSpawnCos = Math_CosS(sSpawnAngle[i] + this->actor.world.rot.y + extraRot);
- sSpawnSin = Math_SinS(sSpawnAngle[i] + this->actor.world.rot.y + extraRot);
+ sWood02SpawnCos = Math_CosS(sWood02SpawnAngle[i] + this->actor.world.rot.y + extraRot);
+ sWood02SpawnSin = Math_SinS(sWood02SpawnAngle[i] + this->actor.world.rot.y + extraRot);
- childPos.x = (sSpawnDistance[i] * sSpawnSin) + this->actor.home.pos.x;
+ childPos.x = (sWood02SpawnDistance[i] * sWood02SpawnSin) + this->actor.home.pos.x;
childPos.y = this->actor.home.pos.y;
- childPos.z = (sSpawnDistance[i] * sSpawnCos) + this->actor.home.pos.z;
+ childPos.z = (sWood02SpawnDistance[i] * sWood02SpawnCos) + this->actor.home.pos.z;
if (EnWood02_SpawnZoneCheck(this, play, &childPos)) {
if (this->unk_14A[i] & 0x80) {
@@ -152,8 +153,8 @@ void EnWood02_SpawnOffspring(EnWood02* this, PlayState* play) {
childParams = ((this->unk_144 << 8) & 0xFF00) | (this->actor.params + 1);
child = (EnWood02*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_WOOD02, childPos.x,
- childPos.y, childPos.z, this->actor.world.rot.x, sSpawnAngle[i],
- unk, childParams);
+ childPos.y, childPos.z, this->actor.world.rot.x,
+ sWood02SpawnAngle[i], unk, childParams);
if (child != NULL) {
child->unk_14A[0] = i;
this->unk_14A[i] |= 1;
@@ -201,7 +202,7 @@ void EnWood02_Init(Actor* thisx, PlayState* play) {
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_ANI, this->actor.world.pos.x,
this->actor.world.pos.y + 120.0f, this->actor.world.pos.z - 15.0f, 0, 0, 0, 1);
if (this->actor.child != NULL) {
- this->actor.child->cutscene = this->actor.cutscene;
+ this->actor.child->csId = this->actor.csId;
}
this->unk_151 = 1;
} else {
@@ -296,10 +297,10 @@ void EnWood02_Init(Actor* thisx, PlayState* play) {
if (spawnType == WOOD_SPAWN_SPAWNER) {
EnWood02_SpawnOffspring(this, play);
- sSpawnCos = Math_CosS(sSpawnAngle[5] + this->actor.world.rot.y + extraRot);
- sSpawnSin = Math_SinS(sSpawnAngle[5] + this->actor.world.rot.y + extraRot);
- this->actor.world.pos.x += sSpawnSin * sSpawnDistance[5];
- this->actor.world.pos.z += sSpawnCos * sSpawnDistance[5];
+ sWood02SpawnCos = Math_CosS(sWood02SpawnAngle[5] + this->actor.world.rot.y + extraRot);
+ sWood02SpawnSin = Math_SinS(sWood02SpawnAngle[5] + this->actor.world.rot.y + extraRot);
+ this->actor.world.pos.x += sWood02SpawnSin * sWood02SpawnDistance[5];
+ this->actor.world.pos.z += sWood02SpawnCos * sWood02SpawnDistance[5];
} else {
this->actor.flags |= ACTOR_FLAG_10;
this->unk_151 = 2;
@@ -312,7 +313,7 @@ void EnWood02_Init(Actor* thisx, PlayState* play) {
if (floorY > BGCHECK_Y_MIN) {
this->actor.world.pos.y = floorY;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
}
@@ -374,7 +375,7 @@ void EnWood02_Update(Actor* thisx, PlayState* play2) {
((EnWood02*)thisx->parent)->unk_14A[index] = phi_v0;
- Actor_MarkForDeath(thisx);
+ Actor_Kill(thisx);
return;
}
this->unk_151 = 0;
@@ -385,7 +386,7 @@ void EnWood02_Update(Actor* thisx, PlayState* play2) {
if ((thisx->params < WOOD_BUSH_GREEN_SMALL) || (thisx->params == WOOD_TREE_SPECIAL)) {
if (this->collider.base.acFlags & AC_HIT) {
this->collider.base.acFlags &= ~AC_HIT;
- Actor_PlaySfxAtPos(thisx, NA_SE_IT_REFLECTION_WOOD);
+ Actor_PlaySfx(thisx, NA_SE_IT_REFLECTION_WOOD);
}
if (thisx->home.rot.y != 0) {
@@ -404,7 +405,7 @@ void EnWood02_Update(Actor* thisx, PlayState* play2) {
(thisx->params == WOOD_TREE_OVAL_YELLOW_SPAWNED)) {
leavesParams = WOOD_LEAF_YELLOW;
}
- Actor_PlaySfxAtPos(thisx, NA_SE_EV_TREE_SWING);
+ Actor_PlaySfx(thisx, NA_SE_EV_TREE_SWING);
for (i = 3; i >= 0; i--) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_WOOD02, dropsSpawnPt.x, dropsSpawnPt.y, dropsSpawnPt.z,
@@ -436,10 +437,10 @@ void EnWood02_Update(Actor* thisx, PlayState* play2) {
if ((this->unk_146 >= -1) && (((player->rideActor == NULL) && (sqrtf(thisx->xyzDistToPlayerSq) < 20.0f) &&
(player->linearVelocity != 0.0f)) ||
((player->rideActor != NULL) && (sqrtf(thisx->xyzDistToPlayerSq) < 60.0f) &&
- (player->rideActor->speedXZ != 0.0f)))) {
+ (player->rideActor->speed != 0.0f)))) {
func_808C4458(this, play, &thisx->world.pos, 1);
this->unk_146 = -0x15;
- Actor_PlaySfxAtPos(thisx, NA_SE_EV_TREE_SWING);
+ Actor_PlaySfx(thisx, NA_SE_EV_TREE_SWING);
}
} else { // Leaves
this->unk_146++;
@@ -449,7 +450,7 @@ void EnWood02_Update(Actor* thisx, PlayState* play2) {
thisx->shape.rot.z = Math_SinS(this->unk_146 * 0xBB8) * 16384.0f;
this->unk_14A[0]--;
if (this->unk_14A[0] == 0) {
- Actor_MarkForDeath(thisx);
+ Actor_Kill(thisx);
}
}
diff --git a/src/overlays/actors/ovl_En_Wood02/z_en_wood02.h b/src/overlays/actors/ovl_En_Wood02/z_en_wood02.h
index 310d1e5de..128607414 100644
--- a/src/overlays/actors/ovl_En_Wood02/z_en_wood02.h
+++ b/src/overlays/actors/ovl_En_Wood02/z_en_wood02.h
@@ -50,6 +50,4 @@ typedef enum {
/* 0x1A */ WOOD_TREE_SPECIAL = 0x1A
} WoodType;
-extern const ActorInit En_Wood02_InitVars;
-
#endif // Z_EN_WOOD02_H
diff --git a/src/overlays/actors/ovl_En_Yb/overlay.cfg b/src/overlays/actors/ovl_En_Yb/overlay.cfg
deleted file mode 100644
index 5293ea603..000000000
--- a/src/overlays/actors/ovl_En_Yb/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Yb
-z_en_yb.c
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 11474f01e..c5224f8e8 100644
--- a/src/overlays/actors/ovl_En_Yb/z_en_yb.c
+++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.c
@@ -32,7 +32,7 @@ void EnYb_ActorShadowFunc(Actor* thisx, Lights* mapper, PlayState* play);
void EnYb_ChangeAnim(PlayState* play, EnYb* this, s16 animIndex, u8 animMode, f32 morphFrames);
s32 EnYb_CanTalk(EnYb* this, PlayState* play);
-const ActorInit En_Yb_InitVars = {
+ActorInit En_Yb_InitVars = {
ACTOR_EN_YB,
ACTORCAT_NPC,
FLAGS,
@@ -68,7 +68,10 @@ static ColliderCylinderInit sCylinderInit = {
// assumption: draw uses two different skeleton functions, might be incompatible
static AnimationHeader* gYbUnusedAnimations[] = { &object_yb_Anim_000200 };
-static LinkAnimationHeader* gLinkAnimations[] = { &gPlayerAnim_link_normal_wait_free, &gPlayerAnim_alink_dance_loop };
+static PlayerAnimationHeader* gPlayerAnimations[] = {
+ &gPlayerAnim_link_normal_wait_free,
+ &gPlayerAnim_alink_dance_loop,
+};
static Vec3f D_80BFB2E8 = { 0.0f, 0.5f, 0.0f };
@@ -78,13 +81,13 @@ static Vec3f D_80BFB300 = { 500.0f, -500.0f, 0.0f };
void EnYb_Init(Actor* thisx, PlayState* play) {
EnYb* this = THIS;
- s16 tempCutscene;
+ s16 csId;
s32 i;
Actor_SetScale(&this->actor, 0.01f);
ActorShape_Init(&this->actor.shape, 0.0f, EnYb_ActorShadowFunc, 20.0f);
- // @Bug this alignment is because of player animations, but should be using ALIGN16
+ // @bug this alignment is because of player animations, but should be using ALIGN16
SkelAnime_InitFlex(play, &this->skelAnime, &gYbSkeleton, &object_yb_Anim_000200, (uintptr_t)this->jointTable & ~0xF,
(uintptr_t)this->morphTable & ~0xF, YB_LIMB_MAX);
@@ -99,17 +102,17 @@ void EnYb_Init(Actor* thisx, PlayState* play) {
EnYb_ChangeAnim(play, this, 2, ANIMMODE_LOOP, 0.0f);
- tempCutscene = this->actor.cutscene;
- for (i = 0; i < ARRAY_COUNT(this->cutscenes); i++) {
- this->cutscenes[i] = tempCutscene;
- if (tempCutscene != -1) {
- this->actor.cutscene = tempCutscene;
- tempCutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene);
+ csId = this->actor.csId;
+ for (i = 0; i < ARRAY_COUNT(this->csIdList); i++) {
+ this->csIdList[i] = csId;
+ if (csId != CS_ID_NONE) {
+ this->actor.csId = csId;
+ csId = CutsceneManager_GetAdditionalCsId(this->actor.csId);
}
}
- this->cutsceneIndex = -1;
- this->actor.cutscene = this->cutscenes[0];
+ this->csIdIndex = -1;
+ this->actor.csId = this->csIdList[0];
// between midnight and morning start spawned
if (gSaveContext.save.time < CLOCK_TIME(6, 0)) {
@@ -120,9 +123,8 @@ void EnYb_Init(Actor* thisx, PlayState* play) {
this->actor.flags &= ~ACTOR_FLAG_1;
}
- // check if already healed
- if (gSaveContext.save.weekEventReg[82] & 4) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_82_04)) {
+ Actor_Kill(&this->actor);
}
}
@@ -169,17 +171,17 @@ 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 != this->animIndex) || (animMode != ANIMMODE_LOOP)) {
if (animIndex > 0) {
if (animMode == ANIMMODE_LOOP) {
- LinkAnimation_Change(play, &this->skelAnime, gLinkAnimations[animIndex - 1], 1.0f, 0.0f,
- Animation_GetLastFrame(gLinkAnimations[animIndex - 1]), ANIMMODE_LOOP,
- morphFrames);
+ 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)
- LinkAnimation_Change(play, &this->skelAnime, gLinkAnimations[animIndex - 1], 1.0f, 0.0f,
- Animation_GetLastFrame(gLinkAnimations[animIndex - 1]), ANIMMODE_LOOP,
- morphFrames);
+ 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)
@@ -208,22 +210,22 @@ void EnYb_UpdateAnimation(EnYb* this, PlayState* play) {
if (this->animIndex <= 0) {
SkelAnime_Update(&this->skelAnime);
} else {
- LinkAnimation_Update(play, &this->skelAnime);
+ PlayerAnimation_Update(play, &this->skelAnime);
}
}
void EnYb_FinishTeachingCutscene(EnYb* this) {
- if (this->cutsceneIndex != -1) {
- if (ActorCutscene_GetCurrentIndex() == this->cutscenes[this->cutsceneIndex]) {
- ActorCutscene_Stop(this->cutscenes[this->cutsceneIndex]);
+ if (this->csIdIndex != -1) {
+ if (CutsceneManager_GetCurrentCsId() == this->csIdList[this->csIdIndex]) {
+ CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
}
- this->cutsceneIndex = -1;
+ this->csIdIndex = -1;
}
}
-void EnYb_ChangeCutscene(EnYb* this, s16 cutsceneId) {
+void EnYb_ChangeCutscene(EnYb* this, s16 csIdIndex) {
EnYb_FinishTeachingCutscene(this);
- this->cutsceneIndex = cutsceneId;
+ this->csIdIndex = csIdIndex;
}
/**
@@ -250,7 +252,7 @@ void EnYb_Disappear(EnYb* this, PlayState* play) {
if (this->alpha > 10) {
this->alpha -= 10;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -263,7 +265,7 @@ void EnYb_SetupLeaving(EnYb* this, PlayState* play) {
Message_StartTextbox(play, 0x147D, &this->actor);
func_80BFA2FC(play);
} else {
- func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1);
}
EnYb_EnableProximityMusic(this);
}
@@ -275,9 +277,9 @@ void EnYb_ReceiveMask(EnYb* this, PlayState* play) {
this->actor.parent = NULL;
this->actionFunc = EnYb_SetupLeaving;
this->actor.flags |= ACTOR_FLAG_10000;
- func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1);
} else {
- Actor_PickUp(&this->actor, play, GI_MASK_KAMARO, 10000.0f, 100.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MASK_KAMARO, 10000.0f, 100.0f);
}
EnYb_EnableProximityMusic(this);
}
@@ -290,27 +292,27 @@ void EnYb_Talk(EnYb* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
switch (play->msgCtx.currentTextId) {
case 0x147D: // I am counting on you
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = EnYb_Disappear;
- gSaveContext.save.weekEventReg[82] |= 0x4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_82_04);
break;
case 0x147C: // Spread my dance across the world
if (Player_GetMask(play) == PLAYER_MASK_KAMARO) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = EnYb_Idle;
} else if (INV_CONTENT(ITEM_MASK_KAMARO) == ITEM_MASK_KAMARO) {
- func_80151938(play, 0x147D); // I am counting on you
+ Message_ContinueTextbox(play, 0x147D); // I am counting on you
func_80BFA2FC(play);
} else {
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = EnYb_ReceiveMask;
EnYb_ReceiveMask(this, play);
}
break;
default:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = EnYb_Idle;
break;
}
@@ -326,7 +328,7 @@ void EnYb_TeachingDanceFinish(EnYb* this, PlayState* play) {
Message_StartTextbox(play, 0x147C, &this->actor);
this->actor.flags &= ~ACTOR_FLAG_10000;
} else {
- func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1);
}
EnYb_EnableProximityMusic(this);
}
@@ -341,7 +343,7 @@ void EnYb_TeachingDance(EnYb* this, PlayState* play) {
EnYb_FinishTeachingCutscene(this);
this->actionFunc = EnYb_TeachingDanceFinish;
this->actor.flags |= ACTOR_FLAG_10000;
- func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1);
}
EnYb_EnableProximityMusic(this);
}
@@ -372,13 +374,13 @@ void EnYb_Idle(EnYb* this, PlayState* play) {
}
if (this->playerOcarinaOut & 1) {
- if (!(player->stateFlags2 & 0x8000000)) {
+ if (!(player->stateFlags2 & PLAYER_STATE2_8000000)) {
this->playerOcarinaOut &= ~1;
}
- } else if ((player->stateFlags2 & 0x8000000) && this->actor.xzDistToPlayer < 180.0f &&
+ } else if ((player->stateFlags2 & PLAYER_STATE2_8000000) && this->actor.xzDistToPlayer < 180.0f &&
fabsf(this->actor.playerHeightRel) < 50.0f) {
this->playerOcarinaOut |= 1;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
}
EnYb_EnableProximityMusic(this);
@@ -407,21 +409,21 @@ void EnYb_Update(Actor* thisx, PlayState* play) {
}
if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_1)) {
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 25.0f, 40.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 25.0f, 40.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
}
this->actionFunc(this, play);
- if (this->cutsceneIndex != -1 && ActorCutscene_GetCurrentIndex() != this->cutscenes[this->cutsceneIndex]) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->cutscenes[this->cutsceneIndex]);
- } else if (ActorCutscene_GetCanPlayNext(this->cutscenes[this->cutsceneIndex])) {
- if (this->cutsceneIndex == 0) {
- ActorCutscene_StartAndSetUnkLinkFields(this->cutscenes[this->cutsceneIndex], &this->actor);
+ if ((this->csIdIndex != -1) && (CutsceneManager_GetCurrentCsId() != this->csIdList[this->csIdIndex])) {
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csIdList[this->csIdIndex]);
+ } else if (CutsceneManager_IsNext(this->csIdList[this->csIdIndex])) {
+ if (this->csIdIndex == 0) {
+ CutsceneManager_StartWithPlayerCs(this->csIdList[this->csIdIndex], &this->actor);
}
} else {
- ActorCutscene_SetIntentToPlay(this->cutscenes[this->cutsceneIndex]);
+ CutsceneManager_Queue(this->csIdList[this->csIdIndex]);
}
}
}
diff --git a/src/overlays/actors/ovl_En_Yb/z_en_yb.h b/src/overlays/actors/ovl_En_Yb/z_en_yb.h
index c7b977653..4728ef44e 100644
--- a/src/overlays/actors/ovl_En_Yb/z_en_yb.h
+++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.h
@@ -20,8 +20,8 @@ typedef struct EnYb {
/* 0x410 */ u16 playerOcarinaOut;
/* 0x412 */ s16 animIndex;
/* 0x414 */ s16 alpha;
- /* 0x416 */ s16 cutscenes[2];
- /* 0x41A */ s16 cutsceneIndex;
+ /* 0x416 */ s16 csIdList[2];
+ /* 0x41A */ s16 csIdIndex;
/* 0x41C */ s16 teachingCutsceneTimer;
/* 0x420 */ EnYbActionFunc actionFunc;
} EnYb; // size = 0x424
diff --git a/src/overlays/actors/ovl_En_Zl1/overlay.cfg b/src/overlays/actors/ovl_En_Zl1/overlay.cfg
deleted file mode 100644
index 188c2f1d5..000000000
--- a/src/overlays/actors/ovl_En_Zl1/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Zl1
-z_en_zl1.c
diff --git a/src/overlays/actors/ovl_En_Zl1/z_en_zl1.c b/src/overlays/actors/ovl_En_Zl1/z_en_zl1.c
index d5e6f2e00..e77aace23 100644
--- a/src/overlays/actors/ovl_En_Zl1/z_en_zl1.c
+++ b/src/overlays/actors/ovl_En_Zl1/z_en_zl1.c
@@ -15,7 +15,7 @@ void EnZl1_Destroy(Actor* thisx, PlayState* play);
void EnZl1_Update(Actor* thisx, PlayState* play);
void EnZl1_Draw(Actor* thisx, PlayState* play);
-const ActorInit En_Zl1_InitVars = {
+ActorInit En_Zl1_InitVars = {
ACTOR_EN_ZL1,
ACTORCAT_NPC,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Zl1/z_en_zl1.h b/src/overlays/actors/ovl_En_Zl1/z_en_zl1.h
index e1b118191..4138558fb 100644
--- a/src/overlays/actors/ovl_En_Zl1/z_en_zl1.h
+++ b/src/overlays/actors/ovl_En_Zl1/z_en_zl1.h
@@ -10,6 +10,4 @@ typedef struct EnZl1 {
/* 0x144 */ char unk_144[0xC0];
} EnZl1; // size = 0x204
-extern const ActorInit En_Zl1_InitVars;
-
#endif // Z_EN_ZL1_H
diff --git a/src/overlays/actors/ovl_En_Zl4/overlay.cfg b/src/overlays/actors/ovl_En_Zl4/overlay.cfg
deleted file mode 100644
index 91cec5610..000000000
--- a/src/overlays/actors/ovl_En_Zl4/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Zl4
-z_en_zl4.c
diff --git a/src/overlays/actors/ovl_En_Zl4/z_en_zl4.c b/src/overlays/actors/ovl_En_Zl4/z_en_zl4.c
index 92e0b2925..3dffe0a6f 100644
--- a/src/overlays/actors/ovl_En_Zl4/z_en_zl4.c
+++ b/src/overlays/actors/ovl_En_Zl4/z_en_zl4.c
@@ -18,7 +18,7 @@ void EnZl4_Draw(Actor* thisx, PlayState* play);
void func_809A1D0C(EnZl4* this, PlayState* play);
#if 0
-const ActorInit En_Zl4_InitVars = {
+ActorInit En_Zl4_InitVars = {
ACTOR_EN_ZL4,
ACTORCAT_ITEMACTION,
FLAGS,
diff --git a/src/overlays/actors/ovl_En_Zl4/z_en_zl4.h b/src/overlays/actors/ovl_En_Zl4/z_en_zl4.h
index eeb272579..326d2545e 100644
--- a/src/overlays/actors/ovl_En_Zl4/z_en_zl4.h
+++ b/src/overlays/actors/ovl_En_Zl4/z_en_zl4.h
@@ -14,6 +14,4 @@ typedef struct EnZl4 {
/* 0x294 */ char unk_294[0x60];
} EnZl4; // size = 0x2F4
-extern const ActorInit En_Zl4_InitVars;
-
#endif // Z_EN_ZL4_H
diff --git a/src/overlays/actors/ovl_En_Zo/overlay.cfg b/src/overlays/actors/ovl_En_Zo/overlay.cfg
deleted file mode 100644
index eeedbff83..000000000
--- a/src/overlays/actors/ovl_En_Zo/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Zo
-z_en_zo.c
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 c4bf8f56d..7a160e368 100644
--- a/src/overlays/actors/ovl_En_Zo/z_en_zo.c
+++ b/src/overlays/actors/ovl_En_Zo/z_en_zo.c
@@ -19,7 +19,7 @@ void EnZo_FollowPath(EnZo* this, PlayState* play);
void EnZo_TreadWater(EnZo* this, PlayState* play);
void EnZo_DoNothing(EnZo* this, PlayState* play);
-const ActorInit En_Zo_InitVars = {
+ActorInit En_Zo_InitVars = {
ACTOR_EN_ZO,
ACTORCAT_NPC,
FLAGS,
@@ -122,32 +122,33 @@ s32 EnZo_ChangeAnim(SkelAnime* skelAnime, s16 animIndex) {
s32 EnZo_PlayWalkingSound(EnZo* this, PlayState* play) {
u8 leftWasGrounded;
u8 rightWasGrounded;
- s32 waterSfxId;
+ SurfaceSfxOffset surfaceSfxOffset;
u16 sfxId;
u8 isFootGrounded;
leftWasGrounded = this->isLeftFootGrounded;
rightWasGrounded = this->isRightFootGrounded;
- if (this->actor.bgCheckFlags & 0x20) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER) {
if (this->actor.depthInWater < 20.0f) {
- waterSfxId = NA_SE_PL_WALK_WATER0 - SFX_FLAG;
+ surfaceSfxOffset = SURFACE_SFX_OFFSET_WATER_SHALLOW;
} else {
- waterSfxId = NA_SE_PL_WALK_WATER1 - SFX_FLAG;
+ surfaceSfxOffset = SURFACE_SFX_OFFSET_WATER_DEEP;
}
- sfxId = waterSfxId + SFX_FLAG;
+ sfxId = NA_SE_PL_WALK_GROUND + surfaceSfxOffset;
} else {
- sfxId = SurfaceType_GetSfx(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) + SFX_FLAG;
+ sfxId = NA_SE_PL_WALK_GROUND +
+ SurfaceType_GetSfxOffset(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId);
}
this->isLeftFootGrounded = isFootGrounded = SubS_IsFloorAbove(play, &this->leftFootPos, -6.0f);
if ((this->isLeftFootGrounded) && (!leftWasGrounded) && (isFootGrounded)) {
- Actor_PlaySfxAtPos(&this->actor, sfxId);
+ Actor_PlaySfx(&this->actor, sfxId);
}
this->isRightFootGrounded = isFootGrounded = SubS_IsFloorAbove(play, &this->rightFootPos, -6.0f);
if ((this->isRightFootGrounded) && (!rightWasGrounded) && (isFootGrounded)) {
- Actor_PlaySfxAtPos(&this->actor, sfxId);
+ Actor_PlaySfx(&this->actor, sfxId);
}
return 0;
@@ -185,7 +186,7 @@ void EnZo_LookAtPlayer(EnZo* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (SubS_AngleDiffLessEqual(this->actor.shape.rot.y, 0x2710, this->actor.yawTowardsPlayer)) {
point.x = player->actor.world.pos.x;
- point.y = player->bodyPartsPos[7].y + 3.0f;
+ point.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
point.z = player->actor.world.pos.z;
SubS_TrackPoint(&point, &this->actor.focus.pos, &this->actor.shape.rot, &this->trackTarget, &this->headRot,
&this->upperBodyRot, &sTrackOptions);
@@ -220,8 +221,8 @@ void EnZo_FollowPath(EnZo* this, PlayState* play) {
s16 speed;
Vec3f pos;
- Math_SmoothStepToF(&this->actor.speedXZ, 1.0f, 0.4f, 1000.0f, 0.0f);
- speed = this->actor.speedXZ * 400.0f;
+ Math_SmoothStepToF(&this->actor.speed, 1.0f, 0.4f, 1000.0f, 0.0f);
+ speed = this->actor.speed * 400.0f;
if (SubS_CopyPointFromPath(this->path, this->waypoint, &pos) && SubS_MoveActorToPoint(&this->actor, &pos, speed)) {
this->waypoint++;
if (this->waypoint >= this->path->count) {
@@ -233,7 +234,7 @@ void EnZo_FollowPath(EnZo* this, PlayState* play) {
EnZo_ChangeAnim(&this->skelAnime, 1);
this->actionFunc = EnZo_TreadWater;
this->actor.gravity = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
}
@@ -280,7 +281,7 @@ void EnZo_Update(Actor* thisx, PlayState* play) {
EnZo* this = THIS;
this->actionFunc(this, play);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
EnZo_LookAtPlayer(this, play);
EnZo_PlayWalkingSound(this, play);
EnZo_UpdateCollider(this, play);
diff --git a/src/overlays/actors/ovl_En_Zob/overlay.cfg b/src/overlays/actors/ovl_En_Zob/overlay.cfg
deleted file mode 100644
index e8a11666f..000000000
--- a/src/overlays/actors/ovl_En_Zob/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Zob
-z_en_zob.c
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 1970e53df..5f1b16e35 100644
--- a/src/overlays/actors/ovl_En_Zob/z_en_zob.c
+++ b/src/overlays/actors/ovl_En_Zob/z_en_zob.c
@@ -37,7 +37,7 @@ void func_80BA0BB4(EnZob* this, PlayState* play);
void func_80BA0C14(EnZob* this, PlayState* play);
void func_80BA0CF4(EnZob* this, PlayState* play);
-const ActorInit En_Zob_InitVars = {
+ActorInit En_Zob_InitVars = {
ACTOR_EN_ZOB,
ACTORCAT_NPC,
FLAGS,
@@ -80,7 +80,7 @@ Vec3f D_80BA1120 = { 300.0f, 900.0f, 0.0f };
void EnZob_Init(Actor* thisx, PlayState* play) {
EnZob* this = THIS;
s32 i;
- s16 cs;
+ s16 csId;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f);
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
@@ -90,8 +90,8 @@ void EnZob_Init(Actor* thisx, PlayState* play) {
Animation_PlayLoop(&this->skelAnime, &object_zob_Anim_006998);
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
this->unk_2F4 = 0;
- this->unk_30E = -1;
- this->unk_310 = 0;
+ this->csIdIndex = -1;
+ this->cueId = 0;
this->unk_302 = 9;
this->unk_304 = 0;
this->actor.terminalVelocity = -4.0f;
@@ -100,28 +100,28 @@ void EnZob_Init(Actor* thisx, PlayState* play) {
this->actionFunc = func_80BA0728;
this->actor.textId = 0;
- cs = this->actor.cutscene;
- for (i = 0; i < ARRAY_COUNT(this->unk_306); i++) {
- this->unk_306[i] = cs;
- if (cs != -1) {
- this->actor.cutscene = cs;
- cs = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene);
+ csId = this->actor.csId;
+ for (i = 0; i < ARRAY_COUNT(this->csIdList); i++) {
+ this->csIdList[i] = csId;
+ if (csId != CS_ID_NONE) {
+ this->actor.csId = csId;
+ csId = CutsceneManager_GetAdditionalCsId(this->actor.csId);
}
}
- this->actor.cutscene = this->unk_306[0];
+ this->actor.csId = this->csIdList[0];
this->actor.flags |= ACTOR_FLAG_2000000;
switch (ENZOB_GET_F(&this->actor)) {
case ENZOB_F_1:
- if (gSaveContext.save.weekEventReg[78] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_01)) {
this->actionFunc = func_80BA0BB4;
} else {
this->actionFunc = func_80BA0AD8;
}
- if (!(gSaveContext.save.weekEventReg[55] & 0x80)) {
- Actor_MarkForDeath(&this->actor);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) {
+ Actor_Kill(&this->actor);
return;
}
break;
@@ -135,8 +135,8 @@ void EnZob_Init(Actor* thisx, PlayState* play) {
break;
default:
- if (gSaveContext.save.weekEventReg[55] & 0x80) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) {
+ Actor_Kill(&this->actor);
}
this->actor.flags |= ACTOR_FLAG_10;
break;
@@ -211,7 +211,7 @@ void func_80B9FA3C(EnZob* this, PlayState* play) {
this->unk_2F4 |= 1;
if (gSaveContext.save.playerForm != PLAYER_FORM_ZORA) {
- if (gSaveContext.save.weekEventReg[30] & 2) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_30_02)) {
textId = 0x11F9;
} else {
textId = 0x11F8;
@@ -222,7 +222,7 @@ void func_80B9FA3C(EnZob* this, PlayState* play) {
textId = 0x1210;
this->unk_304 = 3;
func_80B9F7E4(this, 5, ANIMMODE_ONCE);
- } else if (gSaveContext.save.weekEventReg[31] & 8) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_31_08)) {
textId = 0x1205;
this->unk_304 = 1;
func_80B9F7E4(this, 3, ANIMMODE_LOOP);
@@ -234,12 +234,12 @@ void func_80B9FA3C(EnZob* this, PlayState* play) {
textId = 0x1203;
this->unk_304 = 1;
func_80B9F7E4(this, 2, ANIMMODE_ONCE);
- } else if (gSaveContext.save.weekEventReg[30] & 8) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_30_08)) {
textId = 0x11FA;
this->unk_304 = 1;
func_80B9F7E4(this, 2, ANIMMODE_ONCE);
- } else if (!(gSaveContext.save.weekEventReg[30] & 4)) {
- gSaveContext.save.weekEventReg[30] |= 4;
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_30_04)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_30_04);
textId = 0x11FB;
this->unk_304 = 1;
func_80B9F7E4(this, 2, ANIMMODE_ONCE);
@@ -253,21 +253,21 @@ void func_80B9FA3C(EnZob* this, PlayState* play) {
}
void func_80B9FC0C(EnZob* this) {
- if (this->unk_30E != -1) {
- if (ActorCutscene_GetCurrentIndex() == this->unk_306[this->unk_30E]) {
- ActorCutscene_Stop(this->unk_306[this->unk_30E]);
+ if (this->csIdIndex != -1) {
+ if (CutsceneManager_GetCurrentCsId() == this->csIdList[this->csIdIndex]) {
+ CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
}
- this->unk_30E = -1;
+ this->csIdIndex = -1;
}
}
-void func_80B9FC70(EnZob* this, s16 arg1) {
+void func_80B9FC70(EnZob* this, s16 csIdIndex) {
func_80B9FC0C(this);
- this->unk_30E = arg1;
+ this->csIdIndex = csIdIndex;
}
void func_80B9FCA0(EnZob* this, PlayState* play) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
play->msgCtx.ocarinaMode = 4;
func_80B9FC0C(this);
this->unk_2F4 &= ~1;
@@ -278,19 +278,19 @@ void func_80B9FCA0(EnZob* this, PlayState* play) {
}
void func_80B9FD24(EnZob* this, PlayState* play) {
- s32 actionIndex;
- s16 action;
+ s32 cueChannel;
+ s16 cueId;
func_80B9F86C(this);
- if (Cutscene_CheckActorAction(play, 500)) {
- this->unk_30E = -1;
- actionIndex = Cutscene_GetActorActionIndex(play, 500);
- action = play->csCtx.actorActions[actionIndex]->action;
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_500)) {
+ this->csIdIndex = -1;
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_500);
+ cueId = play->csCtx.actorCues[cueChannel]->id;
- if (action != this->unk_310) {
- this->unk_310 = action;
- switch (action) {
+ if (this->cueId != cueId) {
+ this->cueId = cueId;
+ switch (cueId) {
case 1:
func_80B9F7E4(this, 8, ANIMMODE_LOOP);
break;
@@ -372,14 +372,14 @@ void func_80BA00BC(EnZob* this, PlayState* play) {
switch (play->msgCtx.choiceIndex) {
case 1:
func_8019F208();
- func_80151938(play, 0x1209);
+ Message_ContinueTextbox(play, 0x1209);
this->unk_304 = 1;
func_80B9F7E4(this, 2, ANIMMODE_ONCE);
break;
case 0:
func_8019F230();
- func_80151938(play, 0x1213);
+ Message_ContinueTextbox(play, 0x1213);
break;
}
}
@@ -391,7 +391,7 @@ void func_80BA00BC(EnZob* this, PlayState* play) {
case 0x1208:
case 0x120E:
case 0x1216:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x120C:
@@ -405,7 +405,7 @@ void func_80BA00BC(EnZob* this, PlayState* play) {
case 0x1211:
case 0x1213:
case 0x1217:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
this->unk_304 = 3;
func_80B9F7E4(this, 4, ANIMMODE_ONCE);
break;
@@ -420,7 +420,7 @@ void func_80BA00BC(EnZob* this, PlayState* play) {
break;
case 0x120F:
- gSaveContext.save.weekEventReg[31] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_31_08);
this->unk_2F4 |= 0x10;
func_80B9FCA0(this, play);
break;
@@ -457,13 +457,13 @@ void func_80BA0374(EnZob* this, PlayState* play) {
switch (play->msgCtx.choiceIndex) {
case 0:
func_8019F208();
- func_80151938(play, 0x1207);
+ Message_ContinueTextbox(play, 0x1207);
func_80B9F7E4(this, 2, ANIMMODE_ONCE);
break;
case 1:
func_8019F230();
- func_80151938(play, 0x1206);
+ Message_ContinueTextbox(play, 0x1206);
break;
}
}
@@ -473,12 +473,12 @@ void func_80BA0374(EnZob* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
switch (play->msgCtx.currentTextId) {
case 0x11F8:
- gSaveContext.save.weekEventReg[30] |= 2;
- func_80151938(play, 0x11F9);
+ SET_WEEKEVENTREG(WEEKEVENTREG_30_02);
+ Message_ContinueTextbox(play, 0x11F9);
break;
case 0x11F9:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80BA0728;
this->unk_304 = 0;
func_80B9F7E4(this, 6, ANIMMODE_ONCE);
@@ -490,19 +490,19 @@ void func_80BA0374(EnZob* this, PlayState* play) {
case 0x11FF:
case 0x1201:
case 0x1203:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x11FD:
this->unk_304 = 3;
func_80B9F7E4(this, 4, ANIMMODE_ONCE);
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x11FE:
this->unk_304 = 1;
func_80B9F7E4(this, 3, ANIMMODE_LOOP);
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x11FA:
@@ -513,7 +513,7 @@ void func_80BA0374(EnZob* this, PlayState* play) {
case 0x120F:
case 0x1210:
case 0x1215:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80BA0728;
this->unk_304 = 0;
func_80B9F7E4(this, 6, ANIMMODE_ONCE);
@@ -522,10 +522,10 @@ void func_80BA0374(EnZob* this, PlayState* play) {
break;
case 0x1207:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80BA0318;
player->unk_A90 = &this->actor;
- player->stateFlags3 |= 0x20;
+ player->stateFlags3 |= PLAYER_STATE3_20;
break;
}
}
@@ -549,7 +549,7 @@ void func_80BA0610(EnZob* this, PlayState* play) {
void func_80BA06BC(EnZob* this, PlayState* play) {
func_80B9FD24(this, play);
- if (!Cutscene_CheckActorAction(play, 500)) {
+ if (!Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_500)) {
this->actionFunc = func_80BA0610;
this->actor.flags |= ACTOR_FLAG_10000;
func_80BA0610(this, play);
@@ -565,19 +565,19 @@ void func_80BA0728(EnZob* this, PlayState* play) {
if (func_800B8718(&this->actor, &play->state)) {
if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) {
Message_StartTextbox(play, 0x1208, NULL);
- gSaveContext.save.weekEventReg[30] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_30_08);
} else {
Message_StartTextbox(play, 0x1216, NULL);
}
this->actionFunc = func_80BA00BC;
this->unk_304 = 1;
func_80B9F7E4(this, 2, ANIMMODE_ONCE);
- this->unk_30E = 0;
+ this->csIdIndex = 0;
this->unk_2F4 |= 1;
} else if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->actionFunc = func_80BA0374;
func_80B9FA3C(this, play);
- } else if (Cutscene_CheckActorAction(play, 500)) {
+ } else if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_500)) {
this->actionFunc = func_80BA06BC;
} else if ((this->actor.xzDistToPlayer < 180.0f) && (this->actor.xzDistToPlayer > 60.0f) &&
Player_IsFacingActor(&this->actor, 0x3000, play) && Actor_IsFacingPlayer(&this->actor, 0x3000)) {
@@ -595,17 +595,17 @@ void func_80BA08E8(EnZob* this, PlayState* play) {
s32 textId;
if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) {
- if (gSaveContext.save.weekEventReg[79] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_01)) {
textId = 0x1257;
this->unk_304 = 3;
func_80B9F7E4(this, 4, ANIMMODE_ONCE);
- } else if (gSaveContext.save.weekEventReg[78] & 0x40) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_40)) {
textId = 0x1256;
this->unk_304 = 1;
func_80B9F7E4(this, 2, ANIMMODE_ONCE);
} else {
textId = 0x1255;
- gSaveContext.save.weekEventReg[78] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_78_40);
this->unk_304 = 1;
func_80B9F7E4(this, 2, ANIMMODE_ONCE);
}
@@ -630,7 +630,7 @@ void func_80BA0A04(EnZob* this, PlayState* play) {
switch (Message_GetState(&play->msgCtx)) {
case TEXT_STATE_5:
if (Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80BA0AD8;
this->unk_304 = 0;
func_80B9F7E4(this, 6, ANIMMODE_ONCE);
@@ -664,7 +664,7 @@ void func_80BA0AD8(EnZob* this, PlayState* play) {
void func_80BA0BB4(EnZob* this, PlayState* play) {
func_80B9F86C(this);
- if (gSaveContext.save.weekEventReg[79] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_01)) {
this->actionFunc = func_80BA09E0;
func_80B9F7E4(this, 0, ANIMMODE_ONCE);
this->unk_304 = 5;
@@ -684,8 +684,8 @@ void func_80BA0C14(EnZob* this, PlayState* play) {
this->unk_312 = 999;
}
- if (Cutscene_CheckActorAction(play, 515)) {
- if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 515)]->action == 1) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_515)) {
+ if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_515)]->id == 1) {
this->actionFunc = func_80BA0CF4;
this->unk_312 = -1;
}
@@ -697,8 +697,8 @@ void func_80BA0C14(EnZob* this, PlayState* play) {
void func_80BA0CF4(EnZob* this, PlayState* play) {
func_80B9F86C(this);
- if (Cutscene_CheckActorAction(play, 515) &&
- (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 515)]->action == 2)) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_515) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_515)]->id == 2)) {
this->actionFunc = func_80BA0C14;
}
}
@@ -711,18 +711,18 @@ void EnZob_Update(Actor* thisx, PlayState* play) {
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
- Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, UPDBGCHECKINFO_FLAG_4);
this->actionFunc(this, play);
- if ((this->unk_30E != -1) && (ActorCutscene_GetCurrentIndex() != this->unk_306[this->unk_30E])) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->unk_306[this->unk_30E]);
- } else if (ActorCutscene_GetCanPlayNext(this->unk_306[this->unk_30E])) {
- ActorCutscene_Start(this->unk_306[this->unk_30E], &this->actor);
+ if ((this->csIdIndex != -1) && (CutsceneManager_GetCurrentCsId() != this->csIdList[this->csIdIndex])) {
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csIdList[this->csIdIndex]);
+ } else if (CutsceneManager_IsNext(this->csIdList[this->csIdIndex])) {
+ CutsceneManager_Start(this->csIdList[this->csIdIndex], &this->actor);
} else {
- ActorCutscene_SetIntentToPlay(this->unk_306[this->unk_30E]);
+ CutsceneManager_Queue(this->csIdList[this->csIdIndex]);
}
}
@@ -769,7 +769,7 @@ void EnZob_Draw(Actor* thisx, PlayState* play) {
func_80BA0F64, func_80BA0FAC, &this->actor);
if (this->unk_2F4 & 0x20) {
- POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP);
+ POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
}
CLOSE_DISPS(play->state.gfxCtx);
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 cd9ccc908..e0bd7bf79 100644
--- a/src/overlays/actors/ovl_En_Zob/z_en_zob.h
+++ b/src/overlays/actors/ovl_En_Zob/z_en_zob.h
@@ -25,13 +25,11 @@ typedef struct EnZob {
/* 0x2FC */ Vec3s unk_2FC;
/* 0x302 */ s16 unk_302;
/* 0x304 */ u16 unk_304;
- /* 0x306 */ s16 unk_306[4];
- /* 0x30E */ s16 unk_30E;
- /* 0x310 */ s16 unk_310;
+ /* 0x306 */ s16 csIdList[4];
+ /* 0x30E */ s16 csIdIndex;
+ /* 0x310 */ s16 cueId;
/* 0x312 */ s16 unk_312;
/* 0x314 */ EnZobActionFunc actionFunc;
} EnZob; // size = 0x318
-extern const ActorInit En_Zob_InitVars;
-
#endif // Z_EN_ZOB_H
diff --git a/src/overlays/actors/ovl_En_Zod/overlay.cfg b/src/overlays/actors/ovl_En_Zod/overlay.cfg
deleted file mode 100644
index 8acdefc35..000000000
--- a/src/overlays/actors/ovl_En_Zod/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Zod
-z_en_zod.c
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 d2645b67b..aaf3b85f0 100644
--- a/src/overlays/actors/ovl_En_Zod/z_en_zod.c
+++ b/src/overlays/actors/ovl_En_Zod/z_en_zod.c
@@ -15,7 +15,36 @@ void EnZod_Destroy(Actor* thisx, PlayState* play);
void EnZod_Update(Actor* thisx, PlayState* play);
void EnZod_Draw(Actor* thisx, PlayState* play);
-#if 0
+void EnZod_ChangeAnim(EnZod* this, s16 nextAnimIndex, u8 mode);
+void EnZod_PlayDrumsSequence(EnZod* this, PlayState* play);
+void func_80BAFB84(EnZod* this, PlayState* play);
+void func_80BAFDB4(EnZod* this, PlayState* play);
+void func_80BAFF14(EnZod* this, PlayState* play);
+
+#define TIJO_STATE_1 (1 << 0)
+#define TIJO_STATE_2 (1 << 1)
+
+typedef enum {
+ /* 0 */ ENZOD_ANIM_PLAYING_VIVACE,
+ /* 1 */ ENZOD_ANIM_READY_TO_PLAY,
+ /* 2 */ ENZOD_ANIM_ARMS_FOLDED,
+ /* 3 */ ENZOD_ANIM_PLAYING_LENTO,
+ /* 4 */ ENZOD_ANIM_PLAYING_ANDANTINO,
+ /* 5 */ ENZOD_ANIM_MAX,
+} EnZodAnimation;
+
+typedef enum {
+ /* 1 */ ENZOD_INSTRUMENT_CYMBAL_1 = 1,
+ /* 2 */ ENZOD_INSTRUMENT_CYMBAL_2,
+ /* 3 */ ENZOD_INSTRUMENT_CYMBAL_3,
+ /* 4 */ ENZOD_INSTRUMENT_DRUM_1,
+ /* 5 */ ENZOD_INSTRUMENT_DRUM_2,
+ /* 6 */ ENZOD_INSTRUMENT_DRUM_3,
+ /* 7 */ ENZOD_INSTRUMENT_DRUM_4,
+ /* 8 */ ENZOD_INSTRUMENT_DRUM_5,
+ /* 9 */ ENZOD_INSTRUMENT_BASS_DRUM,
+} EnZodInstrument;
+
const ActorInit En_Zod_InitVars = {
ACTOR_EN_ZOD,
ACTORCAT_NPC,
@@ -28,62 +57,596 @@ const ActorInit En_Zod_InitVars = {
(ActorFunc)EnZod_Draw,
};
-// static ColliderCylinderInit sCylinderInit = {
-static ColliderCylinderInit D_80BB0540 = {
- { COLTYPE_NONE, AT_NONE, AC_ON | AC_TYPE_ENEMY, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, },
- { ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, },
+static ColliderCylinderInit sCylinderInit = {
+ {
+ COLTYPE_NONE,
+ AT_NONE,
+ AC_ON | AC_TYPE_ENEMY,
+ OC1_ON | OC1_TYPE_ALL,
+ OC2_TYPE_1,
+ COLSHAPE_CYLINDER,
+ },
+ {
+ ELEMTYPE_UNK0,
+ { 0x00000000, 0x00, 0x00 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_ON,
+ OCELEM_ON,
+ },
{ 60, 40, 0, { 0, 0, 0 } },
};
-#endif
+static AnimationHeader* sAnimations[] = {
+ &gTijoPlayingVivaceAnim, &gTijoReadyToPlayAnim, &gTijoArmsFoldedAnim,
+ &gTijoPlayingLentoAnim, &gTijoPlayingAndantinoAnim,
+};
-extern ColliderCylinderInit D_80BB0540;
+static Vec3f D_80BB0580 = { 1300.0f, 1100.0f, 0.0f };
-extern UNK_TYPE D_06000D94;
-extern UNK_TYPE D_06007650;
+void EnZod_Init(Actor* thisx, PlayState* play) {
+ s32 i;
+ EnZod* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/EnZod_Init.s")
+ ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 60.0f);
+ this->actor.colChkInfo.mass = MASS_IMMOVABLE;
+ Actor_SetScale(&this->actor, 0.01f);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gTijoSkel, &gTijoPlayingLentoAnim, this->morphTable, this->jointTable,
+ TIJO_LIMB_MAX);
+ Animation_PlayLoop(&this->skelAnime, &gTijoPlayingLentoAnim);
+ Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/EnZod_Destroy.s")
+ this->cymbalRots[0] = this->cymbalRots[1] = this->cymbalRots[2] = 0;
+ this->actor.gravity = this->actor.terminalVelocity = -4.0f;
+ this->cymbalRotVels[0] = this->cymbalRotVels[1] = this->cymbalRotVels[2] = 300;
+ this->stateFlags = 0;
+ this->nextAnimIndex = -1;
+ this->curAnimIndex = -1;
+ this->actor.textId = 0;
+ this->unk_298 = 0;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAF1EC.s")
+ for (i = 0; i < ARRAY_COUNT(this->drumScales); i++) {
+ this->drumScales[i] = 0.0f;
+ this->drumScaleVels[i] = 0.01;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAF2B4.s")
+ EnZod_ChangeAnim(this, ENZOD_ANIM_PLAYING_LENTO, ANIMMODE_ONCE);
+ this->actionFunc = EnZod_PlayDrumsSequence;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAF338.s")
+ switch (ENZOD_GET_TYPE(thisx)) {
+ case ENZOD_TYPE_1:
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_01)) {
+ this->actionFunc = func_80BAFDB4;
+ EnZod_ChangeAnim(this, ENZOD_ANIM_PLAYING_VIVACE, ANIMMODE_ONCE);
+ this->actor.flags |= ACTOR_FLAG_10;
+ CutsceneManager_Queue(this->actor.csId);
+ break;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAF3E0.s")
+ this->actionFunc = func_80BAFB84;
+ if (!(CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE))) {
+ Actor_Kill(&this->actor);
+ break;
+ }
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAF4D8.s")
+ case ENZOD_TYPE_2:
+ this->actionFunc = func_80BAFF14;
+ this->fogNear = -1;
+ this->stateFlags |= TIJO_STATE_2;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAF7CC.s")
+ default:
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) {
+ Actor_Kill(&this->actor);
+ }
+ this->actor.flags |= ACTOR_FLAG_10;
+ break;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAF99C.s")
+void EnZod_Destroy(Actor* thisx, PlayState* play) {
+ EnZod* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAFA44.s")
+ Collider_DestroyCylinder(play, &this->collider);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAFADC.s")
+void EnZod_HandleRoomConversation(EnZod* this, PlayState* play) {
+ u16 textId;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAFB84.s")
+ if (gSaveContext.save.playerForm != PLAYER_FORM_ZORA) {
+ textId = 0x1227;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_32_08)) {
+ textId = 0x1229;
+ } else {
+ SET_WEEKEVENTREG(WEEKEVENTREG_32_08);
+ }
+ } else if (this->stateFlags & TIJO_STATE_1) {
+ textId = 0x1225;
+ } else {
+ textId = 0x1219;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_32_10)) {
+ textId = 0x1226;
+ } else {
+ SET_WEEKEVENTREG(WEEKEVENTREG_32_10);
+ }
+ this->stateFlags |= TIJO_STATE_1;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAFC00.s")
+ EnZod_ChangeAnim(this, ENZOD_ANIM_PLAYING_VIVACE, ANIMMODE_ONCE);
+ Message_StartTextbox(play, textId, &this->actor);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAFC10.s")
+s32 EnZod_PlayerIsFacingTijo(EnZod* this, PlayState* play) {
+ if ((this->actor.playerHeightRel < 30.0f) && (this->actor.xzDistToPlayer < 200.0f) &&
+ Player_IsFacingActor(&this->actor, 0x3000, play) && Actor_IsFacingPlayer(&this->actor, 0x3000)) {
+ return true;
+ } else {
+ return false;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAFD00.s")
+void EnZod_ChangeAnim(EnZod* this, s16 nextAnimIndex, u8 mode) {
+ if ((nextAnimIndex < ENZOD_ANIM_PLAYING_VIVACE) || (nextAnimIndex >= ENZOD_ANIM_MAX)) {
+ nextAnimIndex = ENZOD_ANIM_PLAYING_LENTO;
+ }
+ Animation_Change(&this->skelAnime, sAnimations[nextAnimIndex], 1.0f, 0.0f,
+ Animation_GetLastFrame(sAnimations[nextAnimIndex]), mode, -5.0f);
+ this->curAnimIndex = nextAnimIndex;
+ this->nextAnimIndex = nextAnimIndex;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAFDB4.s")
+void EnZod_UpdateAnimation(EnZod* this) {
+ if (SkelAnime_Update(&this->skelAnime)) {
+ if (this->nextAnimIndex == this->curAnimIndex) {
+ EnZod_ChangeAnim(this, this->curAnimIndex, ANIMMODE_ONCE);
+ switch (this->curAnimIndex) {
+ case ENZOD_ANIM_PLAYING_LENTO:
+ if (Rand_ZeroFloat(1.0f) < 0.2f) {
+ this->nextAnimIndex = ENZOD_ANIM_PLAYING_ANDANTINO;
+ }
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAFE34.s")
+ case ENZOD_ANIM_PLAYING_ANDANTINO:
+ if (Rand_ZeroFloat(1.0f) < 0.8f) {
+ this->nextAnimIndex = ENZOD_ANIM_PLAYING_LENTO;
+ }
+ break;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAFF14.s")
+ } else {
+ EnZod_ChangeAnim(this, this->nextAnimIndex, ANIMMODE_ONCE);
+ }
+ SkelAnime_Update(&this->skelAnime);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/EnZod_Update.s")
+void EnZod_UpdateInstruments(EnZod* this) {
+ s32 i;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BB0128.s")
+ for (i = 0; i < ARRAY_COUNT(this->cymbalRots); i++) {
+ this->cymbalRots[i] += this->cymbalRotVels[i];
+ this->cymbalRotVels[i] -= (s16)(this->cymbalRots[i] * 0.1f);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BB0170.s")
+ if (ABS_ALT(this->cymbalRotVels[i]) > 100) {
+ this->cymbalRotVels[i] *= 0.9f;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BB01B0.s")
+ switch (i) {
+ case 0:
+ if ((this->curAnimIndex == ENZOD_ANIM_PLAYING_ANDANTINO) && ((s32)this->skelAnime.curFrame == 7)) {
+ this->cymbalRotVels[i] = -1000;
+ }
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/EnZod_Draw.s")
+ case 1:
+ if ((this->curAnimIndex == ENZOD_ANIM_PLAYING_ANDANTINO) && ((s32)this->skelAnime.curFrame == 19)) {
+ this->cymbalRotVels[i] = -1000;
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ for (i = 0; i < ARRAY_COUNT(this->drumScales); i++) {
+ this->drumScales[i] += this->drumScaleVels[i];
+ this->drumScaleVels[i] -= (this->drumScales[i] * 0.8f);
+
+ if (fabsf(this->drumScaleVels[i]) > 0.01f) {
+ this->drumScaleVels[i] *= 0.5f;
+ }
+
+ switch (i) {
+ case 0:
+ if (((this->curAnimIndex == ENZOD_ANIM_PLAYING_LENTO) ||
+ (this->curAnimIndex == ENZOD_ANIM_PLAYING_ANDANTINO)) &&
+ ((s32)this->skelAnime.curFrame == 1)) {
+ this->drumScaleVels[i] = 0.1f;
+ }
+ break;
+
+ case 2:
+ if (((this->curAnimIndex == ENZOD_ANIM_PLAYING_LENTO) && ((s32)this->skelAnime.curFrame == 19)) ||
+ ((this->curAnimIndex == ENZOD_ANIM_PLAYING_ANDANTINO) && ((s32)this->skelAnime.curFrame == 8))) {
+ this->drumScaleVels[i] = 0.1f;
+ }
+ break;
+
+ case 3:
+ switch (this->curAnimIndex) {
+ case 3:
+ switch ((s32)this->skelAnime.curFrame) {
+ case 1:
+ case 7:
+ case 12:
+ case 19:
+ this->drumScaleVels[i] = 0.03f;
+ break;
+ }
+ break;
+
+ case 4:
+ if ((s32)this->skelAnime.curFrame == 1) {
+ this->drumScaleVels[i] = 0.1f;
+ }
+ break;
+ }
+ break;
+
+ case 4:
+ if ((this->curAnimIndex == ENZOD_ANIM_PLAYING_ANDANTINO) && ((s32)this->skelAnime.curFrame == 19)) {
+ this->drumScaleVels[i] = 0.15f;
+ }
+
+ break;
+
+ default:
+ break;
+ }
+ }
+}
+
+void func_80BAF7CC(EnZod* this, PlayState* play) {
+ EnZod_UpdateAnimation(this);
+ switch (Message_GetState(&play->msgCtx)) {
+ case TEXT_STATE_CHOICE:
+ if (Message_ShouldAdvance(play) && (play->msgCtx.currentTextId == 0x121F)) {
+ switch (play->msgCtx.choiceIndex) {
+ case 0:
+ func_8019F208();
+ Message_ContinueTextbox(play, 0x1220);
+ break;
+
+ case 1:
+ func_8019F230();
+ Message_ContinueTextbox(play, 0x1223);
+ break;
+ }
+ }
+ break;
+
+ case TEXT_STATE_5:
+ if (Message_ShouldAdvance(play)) {
+ switch (play->msgCtx.currentTextId) {
+ case 0x121A:
+ case 0x121B:
+ case 0x121C:
+ case 0x1220:
+ case 0x1221:
+ case 0x1227:
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
+ break;
+
+ case 0x1219:
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
+ this->nextAnimIndex = ENZOD_ANIM_ARMS_FOLDED;
+ break;
+
+ case 0x121D:
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
+ this->nextAnimIndex = ENZOD_ANIM_READY_TO_PLAY;
+ break;
+
+ case 0x1223:
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
+ this->nextAnimIndex = ENZOD_ANIM_PLAYING_VIVACE;
+ break;
+
+ case 0x121E:
+ case 0x1226:
+ Message_ContinueTextbox(play, 0x121F);
+ this->nextAnimIndex = ENZOD_ANIM_READY_TO_PLAY;
+ break;
+
+ default:
+ Message_CloseTextbox(play);
+ this->actionFunc = EnZod_PlayDrumsSequence;
+ EnZod_ChangeAnim(this, ENZOD_ANIM_PLAYING_LENTO, ANIMMODE_ONCE);
+ break;
+ }
+ }
+ }
+}
+
+void EnZod_PlayDrumsSequence(EnZod* this, PlayState* play) {
+ s32 pad;
+ Vec3f seqPos;
+
+ EnZod_UpdateAnimation(this);
+
+ if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
+ EnZod_HandleRoomConversation(this, play);
+ this->actionFunc = func_80BAF7CC;
+ } else if (EnZod_PlayerIsFacingTijo(this, play)) {
+ func_800B8614(&this->actor, play, 210.0f);
+ }
+
+ seqPos.x = this->actor.projectedPos.x;
+ seqPos.y = this->actor.projectedPos.y;
+ seqPos.z = this->actor.projectedPos.z;
+
+ func_801A1FB4(3, &seqPos, NA_BGM_DRUMS_PLAY, 700.0f);
+}
+
+void func_80BAFA44(EnZod* this, PlayState* play) {
+ u16 textId;
+
+ if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_01)) {
+ textId = 0x1253;
+ } else {
+ textId = 0x1251;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_20)) {
+ textId = 0x1252;
+ } else {
+ SET_WEEKEVENTREG(WEEKEVENTREG_78_20);
+ }
+ }
+ } else {
+ textId = 0x1250;
+ }
+
+ EnZod_ChangeAnim(this, ENZOD_ANIM_PLAYING_VIVACE, ANIMMODE_ONCE);
+ Message_StartTextbox(play, textId, &this->actor);
+}
+
+void func_80BAFADC(EnZod* this, PlayState* play) {
+ u8 talkState;
+
+ EnZod_UpdateAnimation(this);
+ talkState = Message_GetState(&play->msgCtx);
+ if (talkState != TEXT_STATE_CLOSING) {
+ if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
+ Message_CloseTextbox(play);
+ this->actionFunc = func_80BAFB84;
+ EnZod_ChangeAnim(this, ENZOD_ANIM_PLAYING_LENTO, ANIMMODE_ONCE);
+ }
+ } else {
+ this->actionFunc = func_80BAFB84;
+ EnZod_ChangeAnim(this, ENZOD_ANIM_PLAYING_LENTO, ANIMMODE_ONCE);
+ }
+}
+
+void func_80BAFB84(EnZod* this, PlayState* play) {
+ EnZod_UpdateAnimation(this);
+
+ if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
+ func_80BAFA44(this, play);
+ this->actionFunc = func_80BAFADC;
+ } else if (EnZod_PlayerIsFacingTijo(this, play)) {
+ func_800B8614(&this->actor, play, 210.0f);
+ }
+}
+
+void EnZod_DoNothing(EnZod* this, PlayState* play) {
+}
+
+void EnZod_Rehearse(EnZod* this, PlayState* play) {
+ EnZod_UpdateAnimation(this);
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_Start(this->actor.csId, &this->actor);
+ this->actor.csId = CutsceneManager_GetAdditionalCsId(this->actor.csId);
+ if (this->actor.csId == CS_ID_NONE) {
+ this->actionFunc = EnZod_DoNothing;
+ play->nextEntrance = play->setupExitList[ENZOD_GET_ENTRANCE_INDEX(&this->actor)];
+ play->transitionType = TRANS_TYPE_FADE_WHITE_FAST;
+ play->transitionTrigger = TRANS_TRIGGER_START;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_78_01);
+ } else {
+ CutsceneManager_Queue(this->actor.csId);
+ }
+ } else {
+ CutsceneManager_Queue(this->actor.csId);
+ }
+}
+
+void EnZod_SetupRehearse(EnZod* this, PlayState* play) {
+ EnZod_UpdateAnimation(this);
+ if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
+ Message_CloseTextbox(play);
+ EnZod_ChangeAnim(this, ENZOD_ANIM_PLAYING_LENTO, ANIMMODE_ONCE);
+ this->actionFunc = EnZod_Rehearse;
+ CutsceneManager_Stop(this->actor.csId);
+ this->actor.csId = CutsceneManager_GetAdditionalCsId(this->actor.csId);
+ CutsceneManager_Queue(this->actor.csId);
+ SET_WEEKEVENTREG(WEEKEVENTREG_79_01);
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_INDIGO_GO_SESSION | SEQ_FLAG_ASYNC);
+ }
+}
+
+void func_80BAFDB4(EnZod* this, PlayState* play) {
+ EnZod_UpdateAnimation(this);
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_Start(this->actor.csId, &this->actor);
+ func_800B7298(play, NULL, 0x44);
+ Message_StartTextbox(play, 0x103A, &this->actor);
+ this->actionFunc = EnZod_SetupRehearse;
+ } else {
+ CutsceneManager_Queue(this->actor.csId);
+ }
+}
+
+void func_80BAFE34(EnZod* this, PlayState* play) {
+ EnZod_UpdateAnimation(this);
+ if (this->fogNear < 799) {
+ this->fogNear += 200;
+ } else {
+ this->fogNear += 30;
+ }
+
+ if (this->fogNear > 999) {
+ this->fogNear = 999;
+ }
+
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_515)) {
+ if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_515)]->id == 1) {
+ this->actionFunc = func_80BAFF14;
+ this->fogNear = -1;
+ }
+ } else {
+ this->actionFunc = func_80BAFF14;
+ this->fogNear = -1;
+ }
+}
+
+void func_80BAFF14(EnZod* this, PlayState* play) {
+ EnZod_UpdateAnimation(this);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_515) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_515)]->id == 4)) {
+ this->actionFunc = func_80BAFE34;
+ }
+}
+
+void EnZod_Update(Actor* thisx, PlayState* play) {
+ s32 pad;
+ EnZod* this = THIS;
+ Vec3s torsoRot;
+
+ Actor_MoveWithGravity(&this->actor);
+ Collider_UpdateCylinder(&this->actor, &this->collider);
+ CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, UPDBGCHECKINFO_FLAG_4);
+ this->actionFunc(this, play);
+ EnZod_UpdateInstruments(this);
+
+ if (DECR(this->blinkTimer) == 0) {
+ this->blinkTimer = Rand_S16Offset(60, 60);
+ }
+
+ this->eyeIndex = this->blinkTimer;
+
+ if (this->eyeIndex >= 3) {
+ this->eyeIndex = 0;
+ }
+
+ torsoRot.z = 0;
+ torsoRot.y = 0;
+ torsoRot.x = 0;
+
+ if (EnZod_PlayerIsFacingTijo(this, play)) {
+ Actor_TrackPlayer(play, &this->actor, &this->headRot, &torsoRot, this->actor.focus.pos);
+ if (this->headRot.x > 0xBB8) {
+ this->headRot.x = 0xBB8;
+ } else if (this->headRot.x < -0xBB8) {
+ this->headRot.x = -0xBB8;
+ }
+ } else {
+ Math_SmoothStepToS(&this->headRot.x, 0, 6, 0x1838, 0x64);
+ Math_SmoothStepToS(&this->headRot.y, 0, 6, 0x1838, 0x64);
+ }
+}
+
+s32 EnZod_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
+ EnZod* this = THIS;
+
+ if (limbIndex == TIJO_LIMB_HEAD) {
+ rot->x += this->headRot.y;
+ rot->z += this->headRot.x;
+ }
+
+ return false;
+}
+
+void EnZod_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
+ if (limbIndex == TIJO_LIMB_HEAD) {
+ Matrix_MultVec3f(&D_80BB0580, &thisx->focus.pos);
+ }
+}
+
+void EnZod_DrawDrums(EnZod* this, PlayState* play) {
+ static Gfx* sTijoDrumsDLs[] = {
+ gTijoDrumFrameDL, gTijoRideCymbalDL, gTijoCrashCymbalDL, gTijoHiHatDL, gTijoDrum1DL,
+ gTijoDrum2DL, gTijoDrum3DL, gTijoDrum4DL, gTijoDrum5DL, gTijoBassDrumDL,
+ };
+ s32 i;
+ f32 instrumentPosXs[] = { 0.0f, -2690.0f, 2310.0f, 3888.0f, -4160.0f, -2200.0f, -463.0f, 1397.0f, 3413.0f, 389.0f };
+ f32 instrumentPosYs[] = { 0.0f, 6335.0f, 6703.0f, 5735.0f, 3098.0f, 3349.0f, 3748.0f, 3718.0f, 2980.0f, 1530.0f };
+ f32 instrumentPosZs[] = { 0.0f, 4350.0f, 3200.0f, 1555.0f, 2874.0f, 3901.0f, 4722.0f, 4344.0f, 3200.0f, 3373.0f };
+ f32 scale;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ for (i = 0; i < ARRAY_COUNT(sTijoDrumsDLs); i++) {
+ Matrix_Push();
+ Matrix_Translate(instrumentPosXs[i], instrumentPosYs[i], instrumentPosZs[i], MTXMODE_APPLY);
+
+ switch (i) {
+ case ENZOD_INSTRUMENT_CYMBAL_1:
+ case ENZOD_INSTRUMENT_CYMBAL_2:
+ case ENZOD_INSTRUMENT_CYMBAL_3:
+ Matrix_RotateXS(this->cymbalRots[i - 1], MTXMODE_APPLY);
+ break;
+
+ case ENZOD_INSTRUMENT_DRUM_1:
+ case ENZOD_INSTRUMENT_DRUM_2:
+ case ENZOD_INSTRUMENT_DRUM_3:
+ case ENZOD_INSTRUMENT_DRUM_4:
+ case ENZOD_INSTRUMENT_DRUM_5:
+ case ENZOD_INSTRUMENT_BASS_DRUM:
+ scale = this->drumScales[9 - i] + 1.0f;
+ Matrix_Scale(scale, scale, scale, MTXMODE_APPLY);
+ break;
+
+ default:
+ break;
+ }
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, sTijoDrumsDLs[i]);
+ Matrix_Pop();
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void EnZod_Draw(Actor* thisx, PlayState* play) {
+ static TexturePtr sTijoEyesTextures[] = { &gTijoEyesOpen, &gTijoEyesHalfOpen, &gTijoEyesClosed };
+ EnZod* this = THIS;
+ Gfx* gfx;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C28C(play->state.gfxCtx);
+
+ if (this->stateFlags & TIJO_STATE_2) {
+ POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 0, 0, 0, 0, this->fogNear, 1000);
+ }
+
+ gfx = POLY_OPA_DISP;
+
+ gSPSegment(&gfx[0], 0x08, Lib_SegmentedToVirtual(sTijoEyesTextures[this->eyeIndex]));
+ gSPSegment(&gfx[1], 0x09, Lib_SegmentedToVirtual(&gTijoMouthClosedTex));
+
+ POLY_OPA_DISP = &gfx[2];
+
+ EnZod_DrawDrums(this, play);
+ SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
+ EnZod_OverrideLimbDraw, EnZod_PostLimbDraw, &this->actor);
+ if (this->stateFlags & TIJO_STATE_2) {
+ POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
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 2fd9b7400..9e6f3f4da 100644
--- a/src/overlays/actors/ovl_En_Zod/z_en_zod.h
+++ b/src/overlays/actors/ovl_En_Zod/z_en_zod.h
@@ -2,6 +2,10 @@
#define Z_EN_ZOD_H
#include "global.h"
+#include "assets/objects/object_zod/object_zod.h"
+
+#define ENZOD_GET_ENTRANCE_INDEX(thisx) (((thisx)->params & 0xFE00) >> 9)
+#define ENZOD_GET_TYPE(thisx) ((thisx)->params & 0xF)
struct EnZod;
@@ -9,10 +13,29 @@ typedef void (*EnZodActionFunc)(struct EnZod*, PlayState*);
typedef struct EnZod {
/* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0x158];
+ /* 0x144 */ Vec3s morphTable[TIJO_LIMB_MAX];
+ /* 0x180 */ Vec3s jointTable[TIJO_LIMB_MAX];
+ /* 0x1BC */ SkelAnime skelAnime;
+ /* 0x200 */ ColliderCylinder collider;
+ /* 0x24C */ s16 eyeIndex;
+ /* 0x24E */ s16 blinkTimer;
+ /* 0x250 */ Vec3s headRot;
+ /* 0x256 */ u16 stateFlags;
+ /* 0x258 */ s16 curAnimIndex;
+ /* 0x25A */ s16 nextAnimIndex;
+ /* 0x25C */ s16 cymbalRots[3];
+ /* 0x262 */ s16 cymbalRotVels[3];
+ /* 0x268 */ f32 drumScales[6];
+ /* 0x280 */ f32 drumScaleVels[6];
+ /* 0x298 */ s16 unk_298; // Set but not used.
+ /* 0x29A */ s16 fogNear;
/* 0x29C */ EnZodActionFunc actionFunc;
} EnZod; // size = 0x2A0
-extern const ActorInit En_Zod_InitVars;
+typedef enum {
+ /* 1 */ ENZOD_TYPE_1 = 1,
+ /* 2 */ ENZOD_TYPE_2,
+ /* 0xF */ ENZOD_TYPE_0xF = 0xF,
+} EnZodTypes;
#endif // Z_EN_ZOD_H
diff --git a/src/overlays/actors/ovl_En_Zog/overlay.cfg b/src/overlays/actors/ovl_En_Zog/overlay.cfg
deleted file mode 100644
index fe913a71e..000000000
--- a/src/overlays/actors/ovl_En_Zog/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Zog
-z_en_zog.c
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 0ea1d448f..ccbb1f752 100644
--- a/src/overlays/actors/ovl_En_Zog/z_en_zog.c
+++ b/src/overlays/actors/ovl_En_Zog/z_en_zog.c
@@ -33,7 +33,7 @@ void func_80B95240(EnZog* this, PlayState* play);
static u8 D_80B95E10;
-const ActorInit En_Zog_InitVars = {
+ActorInit En_Zog_InitVars = {
ACTOR_EN_ZOG,
ACTORCAT_NPC,
FLAGS,
@@ -173,7 +173,7 @@ void func_80B93468(EnZog* this, PlayState* play) {
this->actor.world.pos.x = points[-1].x;
this->actor.world.pos.z = points[-1].z;
this->actor.world.rot.y = Math_Atan2S(points->x - this->actor.world.pos.x, points->z - this->actor.world.pos.z);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
}
}
@@ -181,7 +181,7 @@ void EnZog_Init(Actor* thisx, PlayState* play) {
s32 pad;
EnZog* this = THIS;
s32 i;
- s16 cs;
+ s16 csId;
if (!D_80B95E10) {
for (i = 0; i < ARRAY_COUNT(D_80B958AC); i++) {
@@ -206,8 +206,8 @@ void EnZog_Init(Actor* thisx, PlayState* play) {
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
if ((ENZOG_GET_F(&this->actor) != ENZOG_F_2) && (INV_CONTENT(ITEM_MASK_ZORA) == ITEM_MASK_ZORA) &&
- ((play->csCtx.currentCsIndex != 2) || (gSaveContext.sceneLayer != 0) || (play->sceneId != SCENE_30GYOSON))) {
- Actor_MarkForDeath(&this->actor);
+ ((play->csCtx.scriptIndex != 2) || (gSaveContext.sceneLayer != 0) || (play->sceneId != SCENE_30GYOSON))) {
+ Actor_Kill(&this->actor);
return;
}
@@ -219,7 +219,7 @@ void EnZog_Init(Actor* thisx, PlayState* play) {
this->unk_30A = 0;
this->unk_31C = 2;
this->unk_31E = 0;
- this->unk_31A = -1;
+ this->csIdIndex = -1;
this->unk_322 = 100;
Math_Vec3f_Copy(&this->unk_2F0, &this->actor.world.pos);
@@ -245,13 +245,13 @@ void EnZog_Init(Actor* thisx, PlayState* play) {
this->unk_304 = 0;
this->unk_2FE = this->unk_2FC;
this->unk_300 = this->unk_302;
- cs = this->actor.cutscene;
+ csId = this->actor.csId;
- for (i = 0; i < ARRAY_COUNT(this->unk_30C); i++) {
- this->unk_30C[i] = cs;
- if (cs != -1) {
- this->actor.cutscene = cs;
- cs = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene);
+ for (i = 0; i < ARRAY_COUNT(this->csIdList); i++) {
+ this->csIdList[i] = csId;
+ if (csId != CS_ID_NONE) {
+ this->actor.csId = csId;
+ csId = CutsceneManager_GetAdditionalCsId(this->actor.csId);
}
}
@@ -264,7 +264,7 @@ void EnZog_Init(Actor* thisx, PlayState* play) {
}
}
- if ((ENZOG_GET_F(&this->actor) != ENZOG_F_2) && (gSaveContext.save.weekEventReg[88] & 0x10)) {
+ if ((ENZOG_GET_F(&this->actor) != ENZOG_F_2) && CHECK_WEEKEVENTREG(WEEKEVENTREG_88_10)) {
this->unk_302 = this->unk_300 = 0;
this->unk_2FC = this->unk_2FE = 3;
this->actor.flags |= ACTOR_FLAG_2000000;
@@ -274,7 +274,7 @@ void EnZog_Init(Actor* thisx, PlayState* play) {
Animation_PlayLoop(&this->skelAnime, D_80B958DC[0]);
this->actor.textId = 0x1009;
- if (gSaveContext.save.weekEventReg[91] & 2) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_91_02)) {
this->actor.textId = 0x103C;
this->actionFunc = func_80B9451C;
} else {
@@ -331,17 +331,17 @@ void func_80B93A48(EnZog* this, PlayState* play) {
void func_80B93B44(EnZog* this) {
if (!(this->unk_30A & 4)) {
- if (this->unk_31A != -1) {
- ActorCutscene_Stop(this->unk_30C[this->unk_31A]);
+ if (this->csIdIndex != -1) {
+ CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
}
}
- this->unk_31A = -1;
+ this->csIdIndex = -1;
this->unk_30A &= ~4;
}
-void func_80B93BA8(EnZog* this, s16 arg1) {
+void func_80B93BA8(EnZog* this, s16 csIdIndex) {
func_80B93B44(this);
- this->unk_31A = arg1;
+ this->csIdIndex = csIdIndex;
this->unk_30A |= 4;
}
@@ -401,10 +401,10 @@ void func_80B93DE8(Vec3f* arg0, PlayState* play, s32 arg2) {
}
s32 func_80B93EA0(EnZog* this, PlayState* play) {
- s16 sp3E;
+ s16 cueId;
if (SkelAnime_Update(&this->skelAnime)) {
- switch (this->unk_306) {
+ switch (this->cueId) {
case 2:
case 3:
Animation_PlayLoop(&this->skelAnime, *D_80B958F0);
@@ -458,14 +458,14 @@ s32 func_80B93EA0(EnZog* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
}
- if (Cutscene_CheckActorAction(play, 471)) {
- sp3E = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 471)]->action;
- Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, 471));
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_471)) {
+ cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_471)]->id;
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_471));
- switch (this->unk_306) {
+ switch (this->cueId) {
case 2:
- if (play->csCtx.frames == 60) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_JUMP_SAND);
+ if (play->csCtx.curFrame == 60) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_JUMP_SAND);
}
break;
@@ -497,10 +497,10 @@ s32 func_80B93EA0(EnZog* this, PlayState* play) {
break;
}
- if (this->unk_306 != sp3E) {
- this->unk_306 = sp3E;
+ if (this->cueId != cueId) {
+ this->cueId = cueId;
- switch (this->unk_306) {
+ switch (this->cueId) {
case 1:
func_80B939C0(this, 7, ANIMMODE_LOOP);
this->unk_31C = 2;
@@ -593,7 +593,7 @@ void func_80B943A0(EnZog* this, PlayState* play) {
void func_80B943C0(EnZog* this, PlayState* play) {
if (!(this->unk_30A & 4)) {
this->actionFunc = func_80B943A0;
- this->unk_306 = -1;
+ this->cueId = -1;
}
}
@@ -601,19 +601,19 @@ void func_80B943EC(EnZog* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (this->unk_30A & 0x10) {
- if (!(player->stateFlags2 & 0x8000000)) {
+ if (!(player->stateFlags2 & PLAYER_STATE2_8000000)) {
this->unk_30A &= ~0x10;
}
- } else if ((player->stateFlags2 & 0x8000000) && (this->actor.xzDistToPlayer < 120.0f)) {
+ } else if ((player->stateFlags2 & PLAYER_STATE2_8000000) && (this->actor.xzDistToPlayer < 120.0f)) {
this->unk_30A |= 0x10;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
}
}
void func_80B94470(EnZog* this, PlayState* play) {
if (Message_GetState(&play->msgCtx) == TEXT_STATE_5) {
if (Message_ShouldAdvance(play) && (play->msgCtx.currentTextId == 0x103C)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80B9451C;
this->unk_300 = this->unk_302 = 0;
this->unk_31C = 2;
@@ -645,7 +645,7 @@ void func_80B9461C(EnZog* this, PlayState* play) {
this->actor.textId = 0x103C;
this->actionFunc = func_80B9451C;
this->actor.flags |= ACTOR_FLAG_2000000;
- gSaveContext.save.weekEventReg[91] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_91_02);
}
if ((this->unk_304 == 11) && ((s32)this->skelAnime.curFrame >= 55)) {
@@ -657,7 +657,7 @@ void func_80B946B4(EnZog* this, PlayState* play) {
func_80B93A48(this, play);
if (!(this->unk_30A & 4)) {
this->actionFunc = func_80B9461C;
- this->unk_306 = -1;
+ this->cueId = -1;
}
}
@@ -675,7 +675,7 @@ void func_80B946FC(EnZog* this, PlayState* play) {
case 1:
func_8019F230();
- func_80151938(play, 0x1014);
+ Message_ContinueTextbox(play, 0x1014);
break;
}
}
@@ -685,20 +685,20 @@ void func_80B946FC(EnZog* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
switch (play->msgCtx.currentTextId) {
case 0x1008:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x1009:
this->unk_300 = 4;
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x1014:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x1015:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80B948A8;
this->unk_300 = this->unk_302 = 0;
this->unk_31C = 2;
@@ -748,11 +748,11 @@ void func_80B94A00(EnZog* this, PlayState* play) {
if (func_80B93BE0(this, play)) {
this->actionFunc = func_80B948A8;
this->actor.flags |= ACTOR_FLAG_2000000;
- if (gSaveContext.save.weekEventReg[29] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_29_20)) {
this->actor.textId = 0x1009;
} else {
this->actor.textId = 0x1008;
- gSaveContext.save.weekEventReg[29] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_29_20);
}
this->unk_300 = 2;
this->unk_31C = 2;
@@ -762,9 +762,9 @@ void func_80B94A00(EnZog* this, PlayState* play) {
if ((this->skelAnime.curFrame >= 35.0f) ||
((this->skelAnime.curFrame >= 10.0f) && (this->skelAnime.curFrame <= 24.0f))) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
} else {
- this->actor.speedXZ = 1.5f;
+ this->actor.speed = 1.5f;
}
if ((this->actor.depthInWater > 0.0f) && ((play->gameplayFrames % 8) == 0)) {
@@ -781,21 +781,21 @@ void func_80B94A00(EnZog* this, PlayState* play) {
if ((this->unk_304 == 4) &&
(Animation_OnFrame(&this->skelAnime, 136.0f) || Animation_OnFrame(&this->skelAnime, 155.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_PL_WALK_WATER0);
+ Actor_PlaySfx(&this->actor, NA_SE_PL_WALK_GROUND + SURFACE_SFX_OFFSET_WATER_SHALLOW);
}
if ((this->unk_304 == 5) &&
(Animation_OnFrame(&this->skelAnime, 12.0f) || Animation_OnFrame(&this->skelAnime, 37.0f))) {
if (this->actor.depthInWater > 0.0f) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_PL_WALK_WATER0);
+ Actor_PlaySfx(&this->actor, NA_SE_PL_WALK_GROUND + SURFACE_SFX_OFFSET_WATER_SHALLOW);
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_PL_WALK_SAND);
+ Actor_PlaySfx(&this->actor, NA_SE_PL_WALK_GROUND + SURFACE_SFX_OFFSET_SAND);
}
}
}
void func_80B94C5C(EnZog* this, PlayState* play) {
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->unk_304 != 0) {
if (this->actor.shape.yOffset > 0.0f) {
this->actor.shape.yOffset -= 20.0f;
@@ -818,7 +818,7 @@ void func_80B94C5C(EnZog* this, PlayState* play) {
void func_80B94D0C(EnZog* this, PlayState* play) {
func_80B93D2C(this, play);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
if (this->unk_320 > 0) {
this->unk_320--;
this->unk_31C = 1;
@@ -834,11 +834,11 @@ void func_80B94D0C(EnZog* this, PlayState* play) {
case 0x1004:
case 0x1005:
case 0x1006:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x1007:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80B94E34;
this->unk_300 = 5;
this->unk_320 = 0;
@@ -857,10 +857,10 @@ void func_80B94E34(EnZog* this, PlayState* play) {
func_80B93D2C(this, play);
func_80B93BE0(this, play);
- if (this->actor.speedXZ < 0.1f) {
- this->actor.speedXZ = 0.0f;
+ if (this->actor.speed < 0.1f) {
+ this->actor.speed = 0.0f;
} else {
- if (this->actor.speedXZ > 0.1f) {
+ if (this->actor.speed > 0.1f) {
WaterBox* sp44;
Vec3f sp38;
@@ -871,19 +871,19 @@ void func_80B94E34(EnZog* this, PlayState* play) {
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,
- Rand_ZeroFloat(this->actor.speedXZ * 40.0f) + (this->actor.speedXZ * 60.0f));
+ Rand_ZeroFloat(this->actor.speed * 40.0f) + (this->actor.speed * 60.0f));
}
- if ((player->actor.speedXZ > 3.0f) && (this->unk_324 == 0)) {
+ if ((player->actor.speed > 3.0f) && (this->unk_324 == 0)) {
this->unk_324 = 25;
- func_800B8E58(player, player->ageProperties->unk_92 + NA_SE_VO_LI_PUSH);
+ Player_PlaySfx(player, player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_PUSH);
}
}
- this->actor.speedXZ *= 0.3f;
+ this->actor.speed *= 0.3f;
}
if (ABS_ALT(this->actor.yawTowardsPlayer - this->actor.world.rot.y) > 0x5000) {
- Actor_PickUp(&this->actor, play, GI_NONE, 60.0f, 40.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_NONE, 60.0f, 40.0f);
}
if (this->unk_324 > 0) {
@@ -892,12 +892,12 @@ void func_80B94E34(EnZog* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->actionFunc = func_80B94D0C;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->unk_300 = 2;
- } else if (this->actor.bgCheckFlags & 1) {
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->actor.home.rot.z = 1;
this->actionFunc = func_80B94C5C;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->unk_2FE = 1;
this->actor.velocity.y = 0.0f;
this->actor.terminalVelocity = 0.0f;
@@ -905,7 +905,7 @@ void func_80B94E34(EnZog* this, PlayState* play) {
this->unk_31C = 1;
this->unk_31E = 0;
func_80B93BA8(this, 0);
- gSaveContext.save.weekEventReg[88] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_88_10);
} else if ((this->actor.yawTowardsPlayer > 16000) && (this->actor.yawTowardsPlayer < 32000) &&
(this->unk_302 == 0)) {
func_800B8614(&this->actor, play, 150.0f);
@@ -922,7 +922,7 @@ void func_80B95128(EnZog* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->actionFunc = func_80B94D0C;
this->unk_300 = 2;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
switch (CURRENT_DAY) {
case 1:
@@ -939,7 +939,7 @@ void func_80B95128(EnZog* this, PlayState* play) {
}
this->actor.flags &= ~ACTOR_FLAG_10000;
- gSaveContext.save.weekEventReg[91] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_91_01);
} else {
func_800B8614(&this->actor, play, 150.0f);
}
@@ -956,8 +956,8 @@ void EnZog_Update(Actor* thisx, PlayState* play) {
EnZog* this = THIS;
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, 5);
- if (Cutscene_CheckActorAction(play, 0x1D7) && (ENZOG_GET_F(&this->actor) != ENZOG_F_2)) {
+ Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_471) && (ENZOG_GET_F(&this->actor) != ENZOG_F_2)) {
this->actionFunc = func_80B9461C;
this->actor.shape.yOffset = 0.0f;
}
@@ -966,7 +966,7 @@ void EnZog_Update(Actor* thisx, PlayState* play) {
if (((this->unk_304 == 6) && Animation_OnFrame(&this->skelAnime, 43.0f)) ||
((this->unk_304 == 17) && Animation_OnFrame(&this->skelAnime, 14.0f))) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_LAND_SAND);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_LAND_SAND);
}
if (this->unk_30A & 1) {
@@ -982,18 +982,18 @@ void EnZog_Update(Actor* thisx, PlayState* play) {
this->actor.focus.pos.y += 30.0f;
if (this->unk_30A & 4) {
- if (this->unk_31A == -1) {
+ if (this->csIdIndex == -1) {
this->unk_30A &= ~4;
- } else if (this->unk_30C[this->unk_31A] == -1) {
+ } else if (this->csIdList[this->csIdIndex] == CS_ID_NONE) {
this->unk_30A &= ~4;
- } else if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->unk_30C[this->unk_31A]);
- } else if (ActorCutscene_GetCanPlayNext(this->unk_30C[this->unk_31A])) {
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_30C[this->unk_31A], &this->actor);
+ } else if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csIdList[this->csIdIndex]);
+ } else if (CutsceneManager_IsNext(this->csIdList[this->csIdIndex])) {
+ CutsceneManager_StartWithPlayerCs(this->csIdList[this->csIdIndex], &this->actor);
this->unk_30A &= ~4;
} else {
- ActorCutscene_SetIntentToPlay(this->unk_30C[this->unk_31A]);
+ CutsceneManager_Queue(this->csIdList[this->csIdIndex]);
}
}
}
diff --git a/src/overlays/actors/ovl_En_Zog/z_en_zog.h b/src/overlays/actors/ovl_En_Zog/z_en_zog.h
index e649c52ab..737168250 100644
--- a/src/overlays/actors/ovl_En_Zog/z_en_zog.h
+++ b/src/overlays/actors/ovl_En_Zog/z_en_zog.h
@@ -27,11 +27,11 @@ typedef struct EnZog {
/* 0x300 */ s16 unk_300;
/* 0x302 */ s16 unk_302;
/* 0x304 */ s16 unk_304;
- /* 0x306 */ s16 unk_306;
+ /* 0x306 */ s16 cueId;
/* 0x308 */ s16 unk_308;
/* 0x30A */ u16 unk_30A;
- /* 0x30C */ s16 unk_30C[7];
- /* 0x31A */ s16 unk_31A;
+ /* 0x30C */ s16 csIdList[7];
+ /* 0x31A */ s16 csIdIndex;
/* 0x31C */ s16 unk_31C;
/* 0x31E */ s16 unk_31E;
/* 0x320 */ s16 unk_320;
@@ -40,6 +40,4 @@ typedef struct EnZog {
/* 0x328 */ EnZogActionFunc actionFunc;
} EnZog; // size = 0x32C
-extern const ActorInit En_Zog_InitVars;
-
#endif // Z_EN_ZOG_H
diff --git a/src/overlays/actors/ovl_En_Zoraegg/overlay.cfg b/src/overlays/actors/ovl_En_Zoraegg/overlay.cfg
deleted file mode 100644
index f7f5fde0b..000000000
--- a/src/overlays/actors/ovl_En_Zoraegg/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Zoraegg
-z_en_zoraegg.c
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 fba4baf7a..21201346a 100644
--- a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c
+++ b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c
@@ -38,7 +38,7 @@ void func_80B32BB8(EnZoraegg* this, PlayState* play);
void func_80B32C34(EnZoraegg* this, PlayState* play);
void func_80B32D08(EnZoraegg* this, PlayState* play);
-const ActorInit En_Zoraegg_InitVars = {
+ActorInit En_Zoraegg_InitVars = {
ACTOR_EN_ZORAEGG,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -75,7 +75,10 @@ void func_80B31590(EnZoraegg* this) {
void EnZoraegg_Init(Actor* thisx, PlayState* play) {
s32 pad;
EnZoraegg* this = THIS;
- u16 sp40[] = { 457, 458, 459, 460, 461, 462, 464 };
+ u16 cueTypes[] = {
+ CS_CMD_ACTOR_CUE_457, CS_CMD_ACTOR_CUE_458, CS_CMD_ACTOR_CUE_459, CS_CMD_ACTOR_CUE_460,
+ CS_CMD_ACTOR_CUE_461, CS_CMD_ACTOR_CUE_462, CS_CMD_ACTOR_CUE_464,
+ };
Actor_SetScale(&this->actor, 0.006f);
SkelAnime_InitFlex(play, &this->skelAnime, &object_zoraegg_Skel_004C90, &object_zoraegg_Anim_005098,
@@ -98,14 +101,14 @@ void EnZoraegg_Init(Actor* thisx, PlayState* play) {
switch (ENZORAEGG_GET_1F(&this->actor)) {
case ENZORAEGG_1F_00:
if (Flags_GetSwitch(play, ENZORAEGG_GET_FE00(&this->actor))) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
break;
case ENZORAEGG_1F_11:
if (func_80B319A8(play) >= 7) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
this->actor.home.rot.z = 1;
return;
}
@@ -118,8 +121,8 @@ void EnZoraegg_Init(Actor* thisx, PlayState* play) {
case ENZORAEGG_1F_07:
case ENZORAEGG_1F_08:
case ENZORAEGG_1F_09:
- if (gSaveContext.save.weekEventReg[19] & 0x40) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_40)) {
+ Actor_Kill(&this->actor);
return;
}
break;
@@ -131,8 +134,8 @@ void EnZoraegg_Init(Actor* thisx, PlayState* play) {
case ENZORAEGG_1F_0E:
case ENZORAEGG_1F_0F:
case ENZORAEGG_1F_10:
- if (!(gSaveContext.save.weekEventReg[19] & 0x40)) {
- Actor_MarkForDeath(&this->actor);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_19_40)) {
+ Actor_Kill(&this->actor);
return;
}
break;
@@ -162,7 +165,7 @@ void EnZoraegg_Init(Actor* thisx, PlayState* play) {
case ENZORAEGG_1F_07:
case ENZORAEGG_1F_08:
case ENZORAEGG_1F_09:
- this->actorActionCmd = sp40[(ENZORAEGG_GET_1F(&this->actor)) - ENZORAEGG_1F_03];
+ this->cueType = cueTypes[(ENZORAEGG_GET_1F(&this->actor)) - ENZORAEGG_1F_03];
Animation_PlayOnce(&this->skelAnime, &object_zoraegg_Anim_001E08);
this->unk_1EC = 1;
this->unk_1EE = 0;
@@ -181,7 +184,7 @@ void EnZoraegg_Init(Actor* thisx, PlayState* play) {
case ENZORAEGG_1F_0E:
case ENZORAEGG_1F_0F:
case ENZORAEGG_1F_10:
- this->actorActionCmd = sp40[(ENZORAEGG_GET_1F(&this->actor)) - ENZORAEGG_1F_0A];
+ this->cueType = cueTypes[(ENZORAEGG_GET_1F(&this->actor)) - ENZORAEGG_1F_0A];
this->unk_1EC = 2;
this->actionFunc = func_80B324B0;
Animation_PlayLoop(&this->skelAnime, &object_zoraegg_Anim_004FE4);
@@ -206,13 +209,13 @@ void EnZoraegg_Destroy(Actor* thisx, PlayState* play) {
}
s32 func_80B319A8(PlayState* play) {
- return gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 & 7;
+ return gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 & 7;
}
void func_80B319D0(PlayState* play, s32 arg1) {
if ((arg1 < 8) && (arg1 >= 0)) {
- gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 &= ~7;
- gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 |= arg1;
+ gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 &= ~7;
+ gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 |= arg1;
}
}
@@ -244,7 +247,7 @@ void func_80B31C40(EnZoraegg* this, PlayState* play) {
Actor_MoveWithGravity(&this->actor);
Math_Vec3f_Copy(&this->actor.focus.pos, &this->actor.world.pos);
this->actor.focus.pos.y += 10.0f;
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
}
Actor* func_80B31CB4(PlayState* play) {
@@ -318,7 +321,7 @@ void func_80B31E00(EnZoraegg* this) {
}
if ((this->unk_1E8 == 111) || (this->unk_1E8 == 32)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ZORA_KIDS_BORN);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_ZORA_KIDS_BORN);
}
}
@@ -335,12 +338,12 @@ void func_80B32094(EnZoraegg* this, PlayState* play) {
void func_80B320E0(EnZoraegg* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
Flags_SetSwitch(play, ENZORAEGG_GET_FE00(&this->actor));
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->actionFunc = func_80B32094;
Message_StartTextbox(play, 0x24B, &this->actor);
} else {
- Actor_PickUp(&this->actor, play, GI_MAX, 80.0f, 60.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MAX, 80.0f, 60.0f);
if (this->actor.isTargeted) {
func_800B8614(&this->actor, play, 110.0f);
}
@@ -352,7 +355,7 @@ void func_80B320E0(EnZoraegg* this, PlayState* play) {
}
void func_80B321D0(EnZoraegg* this, PlayState* play) {
- if (ActorCutscene_GetCurrentIndex() != this->actor.cutscene) {
+ if (CutsceneManager_GetCurrentCsId() != this->actor.csId) {
this->actionFunc = func_80B322BC;
func_80B319D0(play, func_80B319A8(play) + 1);
}
@@ -362,26 +365,26 @@ void func_80B32228(EnZoraegg* this, PlayState* play) {
s32 pad;
Player* player = GET_PLAYER(play);
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, this->unk_1DC);
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, this->unk_1DC);
this->actionFunc = func_80B321D0;
} else {
if (this->unk_1E8 > 0) {
this->unk_1E8--;
} else if (this->unk_1E8 == 0) {
- ActorCutscene_Stop(player->unk_A86);
- player->unk_A86 = -1;
+ CutsceneManager_Stop(player->csId);
+ player->csId = CS_ID_NONE;
this->unk_1E8 = -1;
}
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
void func_80B322BC(EnZoraegg* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (this->actor.cutscene != -1) {
+ if (this->actor.csId != CS_ID_NONE) {
this->unk_1DC = func_80B31CB4(play);
if (this->unk_1DC != NULL) {
this->unk_1E8 = 3;
@@ -400,44 +403,44 @@ void func_80B32390(EnZoraegg* this, PlayState* play) {
s32 pad;
Player* player = GET_PLAYER(play);
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
+ if (CutsceneManager_IsNext(this->actor.csId)) {
Actor* temp_v0 = func_80B31D14(play);
if (temp_v0 != NULL) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, temp_v0);
- gSaveContext.eventInf[3] |= 8;
- Actor_MarkForDeath(&this->actor);
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, temp_v0);
+ SET_EVENTINF(EVENTINF_33);
+ Actor_Kill(&this->actor);
}
} else if ((func_80B319A8(play) >= 7) &&
(fabsf(player->actor.world.pos.x - this->actor.world.pos.x) < (100.0f * this->actor.scale.x)) &&
(fabsf(player->actor.world.pos.z - this->actor.world.pos.z) < (100.0f * this->actor.scale.z)) &&
(fabsf(player->actor.world.pos.y - this->actor.world.pos.y) < 30.0f)) {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
void func_80B324B0(EnZoraegg* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
- if (Cutscene_CheckActorAction(play, this->actorActionCmd)) {
+ if (Cutscene_IsCueInChannel(play, this->cueType)) {
if (this->unk_1EA & 4) {
- if (Cutscene_CheckActorAction(play, this->actorActionCmd) &&
- (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->actorActionCmd)]->action == 3)) {
+ if (Cutscene_IsCueInChannel(play, this->cueType) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id == 3)) {
Animation_PlayLoop(&this->skelAnime, &object_zoraegg_Anim_004FE4);
this->unk_1EA &= ~4;
}
} else {
- if (Cutscene_CheckActorAction(play, this->actorActionCmd) &&
- (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->actorActionCmd)]->action == 4)) {
+ if (Cutscene_IsCueInChannel(play, this->cueType) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id == 4)) {
Animation_PlayLoop(&this->skelAnime, &object_zoraegg_Anim_004E04);
this->unk_1EA |= 4;
}
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->actorActionCmd));
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType));
if ((this->unk_1EA & 4) && Animation_OnFrame(&this->skelAnime, this->unk_1E4)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ZORA_KIDS_SWIM_1);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_ZORA_KIDS_SWIM_1);
this->unk_1E4 = Rand_ZeroFloat(5.0f);
}
} else if (this->unk_1EA & 4) {
@@ -453,10 +456,10 @@ void func_80B32644(EnZoraegg* this, PlayState* play) {
this->unk_1EA |= 2;
}
- if (!Cutscene_CheckActorAction(play, this->actorActionCmd)) {
+ if (!Cutscene_IsCueInChannel(play, this->cueType)) {
this->actionFunc = func_80B324B0;
} else {
- Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->actorActionCmd));
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType));
if (this->unk_1EE > 25) {
this->unk_1EE -= 25;
@@ -469,22 +472,22 @@ void func_80B32644(EnZoraegg* this, PlayState* play) {
void func_80B326F4(EnZoraegg* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
- if (Cutscene_CheckActorAction(play, this->actorActionCmd) &&
- (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->actorActionCmd)]->action == 3)) {
+ if (Cutscene_IsCueInChannel(play, this->cueType) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id == 3)) {
Animation_Change(&this->skelAnime, &object_zoraegg_Anim_004D20, 1.0f, 0.0f,
Animation_GetLastFrame(&object_zoraegg_Anim_004D20), ANIMMODE_ONCE, 5.0f);
this->unk_1E8 = 0;
this->actionFunc = func_80B32644;
- gSaveContext.save.weekEventReg[19] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_19_40);
this->unk_1EC = 2;
this->unk_1EE = 100;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ZORA_KIDS_SWIM_2);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_ZORA_KIDS_SWIM_2);
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->actorActionCmd));
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType));
if (Animation_OnFrame(&this->skelAnime, 4.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ZORA_KIDS_SWIM_1);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_ZORA_KIDS_SWIM_1);
}
}
@@ -504,10 +507,10 @@ void func_80B32820(EnZoraegg* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->actorActionCmd));
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType));
if (Animation_OnFrame(&this->skelAnime, 16.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ZORA_KIDS_SWIM_0);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_ZORA_KIDS_SWIM_0);
}
}
@@ -538,17 +541,17 @@ void func_80B32928(EnZoraegg* this, PlayState* play) {
}
}
- Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->actorActionCmd));
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType));
if (Animation_OnFrame(&this->skelAnime, 97.0f) || Animation_OnFrame(&this->skelAnime, 101.0f) ||
Animation_OnFrame(&this->skelAnime, 105.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ZORA_KIDS_SWIM_1);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_ZORA_KIDS_SWIM_1);
}
}
void func_80B32A88(EnZoraegg* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, this->actorActionCmd) &&
- (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->actorActionCmd)]->action == 2)) {
+ if (Cutscene_IsCueInChannel(play, this->cueType) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id == 2)) {
this->unk_1E8 = 0;
this->actionFunc = func_80B32928;
}
@@ -556,13 +559,13 @@ void func_80B32A88(EnZoraegg* this, PlayState* play) {
}
void func_80B32B10(EnZoraegg* this, PlayState* play) {
- if (gSaveContext.eventInf[3] & 8) {
+ if (CHECK_EVENTINF(EVENTINF_33)) {
this->actionFunc = func_80B32A88;
}
}
void func_80B32B3C(EnZoraegg* this, PlayState* play) {
- if (gSaveContext.eventInf[3] & 8) {
+ if (CHECK_EVENTINF(EVENTINF_33)) {
this->actionFunc = func_80B32A88;
this->actor.draw = EnZoraegg_Draw;
}
@@ -570,8 +573,8 @@ void func_80B32B3C(EnZoraegg* this, PlayState* play) {
void func_80B32B70(EnZoraegg* this, PlayState* play) {
func_80B31C40(this, play);
- if (Cutscene_CheckActorAction(play, 0x1C9)) {
- Actor_MarkForDeath(&this->actor);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_457)) {
+ Actor_Kill(&this->actor);
}
}
@@ -579,12 +582,12 @@ void func_80B32BB8(EnZoraegg* this, PlayState* play) {
func_80B31C40(this, play);
func_80B31D64(this, play, 13, 0.0f);
- if (this->actor.bgCheckFlags & 0x1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->actionFunc = func_80B32B70;
}
- if (Cutscene_CheckActorAction(play, 0x1C9)) {
- Actor_MarkForDeath(&this->actor);
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_457)) {
+ Actor_Kill(&this->actor);
}
}
@@ -627,7 +630,7 @@ void func_80B32D08(EnZoraegg* this, PlayState* play) {
EffectSsGRipple_Spawn(play, &sp34, 150, 500, 0);
EffectSsGSplash_Spawn(play, &sp34, NULL, NULL, 0, 200);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_DIVE_INTO_WATER_L);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_DIVE_INTO_WATER_L);
this->actionFunc = func_80B32C34;
this->actor.velocity.y = -1.0f;
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 b5b19afde..18a421272 100644
--- a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h
+++ b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h
@@ -53,12 +53,10 @@ typedef struct EnZoraegg {
/* 0x1ED */ u8 unk_1ED;
/* 0x1EE */ u8 unk_1EE;
/* 0x1EF */ u8 unk_1EF;
- /* 0x1F0 */ u16 actorActionCmd;
+ /* 0x1F0 */ u16 cueType;
/* 0x1F2 */ s16 unk_1F2;
/* 0x1F4 */ s16 unk_1F4;
/* 0x1F8 */ EnZoraeggActionFunc actionFunc;
} EnZoraegg; // size = 0x1FC
-extern const ActorInit En_Zoraegg_InitVars;
-
#endif // Z_EN_ZORAEGG_H
diff --git a/src/overlays/actors/ovl_En_Zos/overlay.cfg b/src/overlays/actors/ovl_En_Zos/overlay.cfg
deleted file mode 100644
index a83ca1017..000000000
--- a/src/overlays/actors/ovl_En_Zos/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Zos
-z_en_zos.c
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 11fcc2595..3c11d1bce 100644
--- a/src/overlays/actors/ovl_En_Zos/z_en_zos.c
+++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.c
@@ -50,7 +50,7 @@ typedef enum {
/* 13 */ EN_ZOS_ANIM_MAX
} EnZosAnimation;
-const ActorInit En_Zos_InitVars = {
+ActorInit En_Zos_InitVars = {
ACTOR_EN_ZOS,
ACTORCAT_NPC,
FLAGS,
@@ -100,11 +100,11 @@ void EnZos_Init(Actor* thisx, PlayState* play) {
switch (ENZOS_GET_F(&this->actor)) {
case ENZOS_F_1:
- if (!(gSaveContext.save.weekEventReg[55] & 0x80)) {
- Actor_MarkForDeath(&this->actor);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) {
+ Actor_Kill(&this->actor);
}
- if (gSaveContext.save.weekEventReg[78] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_01)) {
this->actionFunc = func_80BBC24C;
} else {
this->actionFunc = func_80BBC14C;
@@ -120,8 +120,8 @@ void EnZos_Init(Actor* thisx, PlayState* play) {
break;
default:
- if (gSaveContext.save.weekEventReg[55] & 0x80) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) {
+ Actor_Kill(&this->actor);
}
this->actor.flags |= ACTOR_FLAG_10;
break;
@@ -131,7 +131,7 @@ void EnZos_Init(Actor* thisx, PlayState* play) {
void EnZos_Destroy(Actor* thisx, PlayState* play) {
EnZos* this = THIS;
- gSaveContext.save.weekEventReg[52] &= (u8)~0x10;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_52_10);
}
static AnimationHeader* sAnimations[] = {
@@ -223,7 +223,7 @@ void func_80BBB15C(EnZos* this, PlayState* play) {
textId = 0x123E;
EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_HANDS_ON_HIPS, ANIMMODE_LOOP);
this->unk_2B6 |= 2;
- } else if (gSaveContext.save.weekEventReg[40] & 0x20) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_40_20)) {
textId = 0x1236;
EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_HANDS_ON_HIPS, ANIMMODE_LOOP);
this->unk_2B6 |= 0x80;
@@ -234,13 +234,13 @@ void func_80BBB15C(EnZos* this, PlayState* play) {
}
} else {
this->unk_2B6 &= ~2;
- if (gSaveContext.save.weekEventReg[39] & 0x10) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_10)) {
textId = 0x1243;
EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_HANDS_ON_HIPS, ANIMMODE_LOOP);
this->unk_2B6 |= 0x80;
} else {
textId = 0x1244;
- gSaveContext.save.weekEventReg[39] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_39_10);
EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_LOOK_DOWN, ANIMMODE_LOOP);
this->unk_2B6 |= 0x10;
}
@@ -254,7 +254,7 @@ void func_80BBB2C4(EnZos* this, PlayState* play) {
this->actionFunc = func_80BBB8AC;
this->actor.flags &= ~ACTOR_FLAG_10000;
} else {
- func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1);
}
}
@@ -264,29 +264,29 @@ void func_80BBB354(EnZos* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL;
this->actionFunc = func_80BBB2C4;
- gSaveContext.save.weekEventReg[39] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_39_20);
this->actor.flags |= ACTOR_FLAG_10000;
- func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1);
} else {
- if (gSaveContext.save.weekEventReg[39] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_20)) {
getItemId = GI_RUPEE_PURPLE;
} else {
getItemId = GI_HEART_PIECE;
}
- Actor_PickUp(&this->actor, play, getItemId, 10000.0f, 50.0f);
+ Actor_OfferGetItem(&this->actor, play, getItemId, 10000.0f, 50.0f);
}
}
void func_80BBB414(EnZos* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
- if (Cutscene_CheckActorAction(play, 501)) {
- s16 action = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 501)]->action;
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_501)) {
+ s16 cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_501)]->id;
- if (action != this->unk_2BA) {
- this->unk_2BA = action;
+ if (this->cueId != cueId) {
+ this->cueId = cueId;
- switch (action) {
+ switch (cueId) {
case 1:
EnZos_ChangeAnim(this, EN_ZOS_ANIM_LEAN_ON_KEYBOARD_AND_SIGH, ANIMMODE_LOOP);
break;
@@ -302,15 +302,15 @@ void func_80BBB414(EnZos* this, PlayState* play) {
void func_80BBB4CC(EnZos* this, PlayState* play) {
func_80BBB414(this, play);
- if ((this->actor.cutscene != -1) && (ActorCutscene_GetCurrentIndex() != this->actor.cutscene)) {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
- } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_Start(this->actor.cutscene, &this->actor);
- this->actor.cutscene = -1;
+ if ((this->actor.csId != CS_ID_NONE) && (CutsceneManager_GetCurrentCsId() != this->actor.csId)) {
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->actor.csId);
+ } else if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_Start(this->actor.csId, &this->actor);
+ this->actor.csId = CS_ID_NONE;
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
}
@@ -324,7 +324,7 @@ void func_80BBB574(EnZos* this, PlayState* play) {
if (func_80BBAFFC(this, play)) {
if (this->unk_2B6 & 0x20) {
this->unk_2B6 &= ~0x20;
- func_80151938(play, 0x124C);
+ Message_ContinueTextbox(play, 0x124C);
}
}
@@ -335,7 +335,7 @@ void func_80BBB574(EnZos* this, PlayState* play) {
play->msgCtx.msgLength = 0;
this->unk_2B6 |= 0x20;
} else {
- func_80151938(play, 0x124C);
+ Message_ContinueTextbox(play, 0x124C);
}
break;
@@ -348,11 +348,11 @@ void func_80BBB574(EnZos* this, PlayState* play) {
case 0x124D:
this->unk_2B6 &= ~0x10;
EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_HANDS_ON_HIPS, ANIMMODE_LOOP);
- func_80151938(play, 0x124E);
+ Message_ContinueTextbox(play, 0x124E);
break;
case 0x124E:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80BBB354;
func_80BBB354(this, play);
break;
@@ -361,36 +361,37 @@ void func_80BBB574(EnZos* this, PlayState* play) {
}
void func_80BBB718(EnZos* this, PlayState* play) {
- s32 sp24;
+ PlayerItemAction itemAction;
Player* player = GET_PLAYER(play);
SkelAnime_Update(&this->skelAnime);
if (Message_GetState(&play->msgCtx) == TEXT_STATE_16) {
- sp24 = func_80123810(play);
- if (sp24 > 0) {
- func_801477B4(play);
+ itemAction = func_80123810(play);
- if (sp24 == 25) {
+ if (itemAction > PLAYER_IA_NONE) {
+ Message_CloseTextbox(play);
+
+ if (itemAction == PLAYER_IA_BOTTLE_ZORA_EGG) {
player->actor.textId = 0x1232;
EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_ARMS_OUT, ANIMMODE_LOOP);
this->unk_2B6 |= 8;
- gSaveContext.save.weekEventReg[40] |= 0x20;
- } else if (gSaveContext.save.weekEventReg[39] & 8) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_40_20);
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_08)) {
player->actor.textId = 0x1241;
} else {
player->actor.textId = 0x1237;
- gSaveContext.save.weekEventReg[39] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_39_08);
EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_LOOK_DOWN, ANIMMODE_LOOP);
this->unk_2B6 |= 4;
}
this->actionFunc = func_80BBB8AC;
- } else if (sp24 < 0) {
- if (gSaveContext.save.weekEventReg[39] & 8) {
- func_80151938(play, 0x1241);
+ } else if (itemAction <= PLAYER_IA_MINUS1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_08)) {
+ Message_ContinueTextbox(play, 0x1241);
} else {
- func_80151938(play, 0x1237);
- gSaveContext.save.weekEventReg[39] |= 8;
+ Message_ContinueTextbox(play, 0x1237);
+ SET_WEEKEVENTREG(WEEKEVENTREG_39_08);
EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_LOOK_DOWN, ANIMMODE_LOOP);
this->unk_2B6 |= 4;
}
@@ -424,13 +425,13 @@ void func_80BBB8AC(EnZos* this, PlayState* play) {
case 0x123C:
case 0x123E:
case 0x123F:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ 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);
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x1232:
@@ -440,29 +441,29 @@ void func_80BBB8AC(EnZos* this, PlayState* play) {
case 0x1239:
case 0x1246:
EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_HANDS_ON_HIPS, ANIMMODE_LOOP);
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x1233:
EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_ARMS_OUT, ANIMMODE_LOOP);
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x1245:
case 0x1248:
EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_FOOT_TAP, ANIMMODE_LOOP);
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x1231:
- func_80151938(play, 0xFF);
+ Message_ContinueTextbox(play, 0xFF);
this->actionFunc = func_80BBB718;
break;
case 0x1243:
case 0x1249:
EnZos_ChangeAnim(this, EN_ZOS_ANIM_HANDS_ON_HIPS, ANIMMODE_LOOP);
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80BBBDE0;
this->unk_2B6 |= 1;
break;
@@ -472,21 +473,23 @@ void func_80BBB8AC(EnZos* this, PlayState* play) {
case 0x1242:
EnZos_ChangeAnim(this, EN_ZOS_ANIM_HANDS_ON_HIPS, ANIMMODE_LOOP);
Actor_ProcessTalkRequest(&this->actor, &play->state);
- func_801477B4(play);
+ 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);
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80BBBDE0;
this->unk_2B6 |= 1;
break;
default:
- if (0) {}
- func_801477B4(play);
+ //! FAKE:
+ if (1) {}
+
+ Message_CloseTextbox(play);
this->actionFunc = func_80BBBDE0;
this->unk_2B6 |= 1;
break;
@@ -502,12 +505,12 @@ void func_80BBBB84(EnZos* this, PlayState* play) {
this->actionFunc = func_80BBB8AC;
EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_HANDS_ON_HIPS, ANIMMODE_LOOP);
this->unk_2B6 |= 2;
- } else if (gSaveContext.save.weekEventReg[41] & 0x10) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_41_10)) {
Message_StartTextbox(play, 0x124A, &this->actor);
this->actionFunc = func_80BBB8AC;
EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_HANDS_ON_HIPS, ANIMMODE_LOOP);
} else {
- gSaveContext.save.weekEventReg[41] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_41_10);
Message_StartTextbox(play, 0x124B, &this->actor);
this->actionFunc = func_80BBB574;
EnZos_ChangeAnim(this, EN_ZOS_ANIM_INSPIRED, ANIMMODE_ONCE);
@@ -525,16 +528,16 @@ void func_80BBBCBC(EnZos* this, PlayState* play) {
Message_StartTextbox(play, 0x124D, &this->actor);
this->actionFunc = func_80BBB574;
} else {
- func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1);
}
}
void func_80BBBD5C(EnZos* this, PlayState* play) {
func_80BBB414(this, play);
- if (!Cutscene_CheckActorAction(play, 0x1F5)) {
+ if (!Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_501)) {
this->actionFunc = func_80BBBCBC;
this->actor.flags |= ACTOR_FLAG_10000;
- func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1);
}
}
@@ -564,16 +567,16 @@ void func_80BBBDE0(EnZos* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->actionFunc = func_80BBB8AC;
func_80BBB15C(this, play);
- } else if (Cutscene_CheckActorAction(play, 0x1F5)) {
+ } else if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_501)) {
this->actionFunc = func_80BBBD5C;
} else if (func_80BBAF5C(this, play)) {
func_800B8614(&this->actor, play, 120.0f);
}
if (!Actor_IsFacingPlayer(&this->actor, 0x4000) && (this->actor.xzDistToPlayer < 100.0f)) {
- gSaveContext.save.weekEventReg[52] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_52_10);
} else {
- gSaveContext.save.weekEventReg[52] &= (u8)~0x10;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_52_10);
}
sp28.x = this->actor.projectedPos.x;
@@ -586,13 +589,13 @@ void func_80BBBFBC(EnZos* this, PlayState* play) {
u16 textId;
if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) {
- if (gSaveContext.save.weekEventReg[79] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_01)) {
textId = 0x125B;
- } else if (gSaveContext.save.weekEventReg[78] & 0x80) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_80)) {
textId = 0x125A;
} else {
textId = 0x1259;
- gSaveContext.save.weekEventReg[78] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_78_80);
}
EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_ARMS_OUT, ANIMMODE_LOOP);
} else {
@@ -611,7 +614,7 @@ void func_80BBC070(EnZos* this, PlayState* play) {
case TEXT_STATE_5:
if (Message_ShouldAdvance(play)) {
EnZos_ChangeAnim(this, EN_ZOS_ANIM_HANDS_ON_HIPS, ANIMMODE_LOOP);
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80BBC14C;
this->unk_2B6 |= 1;
}
@@ -653,7 +656,7 @@ void func_80BBC22C(EnZos* this, PlayState* play) {
void func_80BBC24C(EnZos* this, PlayState* play) {
func_80BBB0D4(this, play);
- if (gSaveContext.save.weekEventReg[79] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_01)) {
this->actionFunc = func_80BBC22C;
EnZos_ChangeAnim(this, EN_ZOS_ANIM_PLAY_RIGHT, ANIMMODE_ONCE);
}
@@ -672,8 +675,8 @@ void func_80BBC298(EnZos* this, PlayState* play) {
this->unk_2BC = 999;
}
- if (Cutscene_CheckActorAction(play, 515)) {
- if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 515)]->action == 1) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_515)) {
+ if (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_515)]->id == 1) {
this->actionFunc = func_80BBC37C;
this->unk_2BC = -1;
}
@@ -685,8 +688,8 @@ void func_80BBC298(EnZos* this, PlayState* play) {
void func_80BBC37C(EnZos* this, PlayState* play) {
func_80BBAFFC(this, play);
- if (Cutscene_CheckActorAction(play, 515) &&
- (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 515)]->action == 3)) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_515) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_515)]->id == 3)) {
this->actionFunc = func_80BBC298;
}
}
@@ -698,7 +701,7 @@ void EnZos_Update(Actor* thisx, PlayState* play) {
Actor_MoveWithGravity(&this->actor);
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
- Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 30.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 30.0f, UPDBGCHECKINFO_FLAG_4);
this->actionFunc(this, play);
@@ -761,7 +764,7 @@ void EnZos_Draw(Actor* thisx, PlayState* play) {
func_80BBC4E4, func_80BBC500, &this->actor);
if (this->unk_2B6 & 0x40) {
- POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP);
+ POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
}
CLOSE_DISPS(play->state.gfxCtx);
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 bf5a9c07b..669430a0c 100644
--- a/src/overlays/actors/ovl_En_Zos/z_en_zos.h
+++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.h
@@ -26,11 +26,9 @@ typedef struct EnZos {
/* 0x2B0 */ UNK_TYPE1 unk2B0[6];
/* 0x2B6 */ u16 unk_2B6;
/* 0x2B8 */ s16 animIndex;
- /* 0x2BA */ s16 unk_2BA;
+ /* 0x2BA */ s16 cueId;
/* 0x2BC */ s16 unk_2BC;
/* 0x2C0 */ EnZosActionFunc actionFunc;
} EnZos; // size = 0x2C4
-extern const ActorInit En_Zos_InitVars;
-
#endif // Z_EN_ZOS_H
diff --git a/src/overlays/actors/ovl_En_Zot/overlay.cfg b/src/overlays/actors/ovl_En_Zot/overlay.cfg
deleted file mode 100644
index 0d4db225f..000000000
--- a/src/overlays/actors/ovl_En_Zot/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Zot
-z_en_zot.c
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 1519a3774..f382cdf80 100644
--- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c
+++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c
@@ -32,7 +32,7 @@ void func_80B990A4(EnZot* this, PlayState* play);
void func_80B992C0(EnZot* this, PlayState* play);
void func_80B99384(EnZot* this, PlayState* play);
-const ActorInit En_Zot_InitVars = {
+ActorInit En_Zot_InitVars = {
ACTOR_EN_ZOT,
ACTORCAT_NPC,
FLAGS,
@@ -185,15 +185,15 @@ void EnZot_Init(Actor* thisx, PlayState* play2) {
func_80B96BEC(this, 2, ANIMMODE_LOOP);
this->actor.colChkInfo.cylRadius = 0;
this->actor.shape.yOffset = -1400.0f;
- if (!(gSaveContext.save.weekEventReg[55] & 0x80)) {
- Actor_MarkForDeath(&this->actor);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) {
+ Actor_Kill(&this->actor);
}
break;
case 18:
this->actionFunc = func_80B99384;
- if (!(gSaveContext.save.weekEventReg[55] & 0x80)) {
- Actor_MarkForDeath(&this->actor);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) {
+ Actor_Kill(&this->actor);
}
break;
@@ -220,8 +220,9 @@ void EnZot_Init(Actor* thisx, PlayState* play2) {
break;
}
- if ((ENZOT_GET_1F(thisx) >= 2) && (ENZOT_GET_1F(thisx) < 11) && (gSaveContext.save.weekEventReg[55] & 0x80)) {
- Actor_MarkForDeath(&this->actor);
+ if ((ENZOT_GET_1F(thisx) >= 2) && (ENZOT_GET_1F(thisx) < 11) &&
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) {
+ Actor_Kill(&this->actor);
}
}
@@ -230,7 +231,7 @@ void EnZot_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->collider);
if (ENZOT_GET_1F(&this->actor) == 8) {
- gSaveContext.save.weekEventReg[41] &= (u8)~0x20;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_41_20);
}
}
@@ -299,7 +300,7 @@ s32 func_80B96E5C(EnZot* this) {
temp_f14 = points->z - this->actor.world.pos.z;
this->actor.world.rot.y = Math_Atan2S(temp_f12, temp_f14);
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.world.rot.y, 2, 2000, 200);
- phi_f2 = SQ(this->actor.speedXZ) * SQ(3.0f);
+ phi_f2 = SQ(this->actor.speed) * SQ(3.0f);
if (this->unk_2D4 == 0) {
phi_f2 = SQ(20.0f);
@@ -362,17 +363,17 @@ void func_80B97110(EnZot* this, PlayState* play) {
if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) {
textId = 0x125F;
- if (gSaveContext.save.weekEventReg[28] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_28_80)) {
textId = 0x1261;
} else {
- gSaveContext.save.weekEventReg[28] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_28_80);
}
} else {
textId = 0x125C;
- if (gSaveContext.save.weekEventReg[28] & 0x40) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_28_40)) {
textId = 0x125E;
} else {
- gSaveContext.save.weekEventReg[28] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_28_40);
}
}
Message_StartTextbox(play, textId, &this->actor);
@@ -383,14 +384,14 @@ void func_80B97194(EnZot* this, PlayState* play) {
switch (play->msgCtx.currentTextId) {
case 0x125C:
case 0x125F:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x125D:
case 0x125E:
case 0x1260:
case 0x1261:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80B97240;
break;
}
@@ -410,35 +411,35 @@ void func_80B97240(EnZot* this, PlayState* play) {
void func_80B972E8(EnZot* this, PlayState* play) {
u16 textId;
- if (gSaveContext.save.weekEventReg[29] & 0x10) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_29_10)) {
if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) {
textId = 0x126A;
- if (gSaveContext.save.weekEventReg[29] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_29_01)) {
textId = 0x126D;
} else {
- gSaveContext.save.weekEventReg[29] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_29_01);
}
} else {
textId = 0x1267;
- if (gSaveContext.save.weekEventReg[29] & 2) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_29_02)) {
textId = 0x1269;
} else {
- gSaveContext.save.weekEventReg[29] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_29_02);
}
}
} else if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) {
textId = 0x1265;
- if (gSaveContext.save.weekEventReg[29] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_29_04)) {
textId = 0x1266;
} else {
- gSaveContext.save.weekEventReg[29] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_29_04);
}
} else {
textId = 0x1262;
- if (gSaveContext.save.weekEventReg[29] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_29_08)) {
textId = 0x1264;
} else {
- gSaveContext.save.weekEventReg[29] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_29_08);
}
}
Message_StartTextbox(play, textId, &this->actor);
@@ -454,42 +455,42 @@ void func_80B973BC(EnZot* this, PlayState* play) {
case 0x1270:
case 0x1273:
case 0x1274:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x1272:
- func_80151938(play, 0x126F);
+ Message_ContinueTextbox(play, 0x126F);
break;
case 0x126F:
Rupees_ChangeBy(90);
- func_80151938(play, 0x1270);
+ Message_ContinueTextbox(play, 0x1270);
break;
case 0x1275:
- if (gSaveContext.save.playerData.rupees < 10) {
- func_80151938(play, 0x1277);
+ if (gSaveContext.save.saveInfo.playerData.rupees < 10) {
+ Message_ContinueTextbox(play, 0x1277);
} else {
- func_80151938(play, 0x1278);
+ Message_ContinueTextbox(play, 0x1278);
Rupees_ChangeBy(-10);
}
break;
case 0x1276:
- func_80151938(play, 0x1275);
+ Message_ContinueTextbox(play, 0x1275);
break;
case 0x1271:
case 0x1277:
case 0x1278:
case 0x1279:
- func_801477B4(play);
+ Message_CloseTextbox(play);
func_80B965D0(this, play);
this->actor.flags &= ~ACTOR_FLAG_10000;
this->actor.textId = 0;
this->actionFunc = func_80B97708;
- if ((this->actor.cutscene != -1) && !(this->unk_2F2 & 1)) {
- ActorCutscene_Stop(this->actor.cutscene);
+ if ((this->actor.csId != CS_ID_NONE) && !(this->unk_2F2 & 1)) {
+ CutsceneManager_Stop(this->actor.csId);
}
this->unk_2F2 &= ~1;
break;
@@ -497,16 +498,16 @@ void func_80B973BC(EnZot* this, PlayState* play) {
}
if (this->unk_2F2 & 1) {
- if (this->actor.cutscene == -1) {
+ if (this->actor.csId == CS_ID_NONE) {
this->unk_2F2 &= ~1;
- } else if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
- } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ } else if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->actor.csId);
+ } else if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
this->unk_2F2 &= ~1;
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
}
@@ -516,7 +517,7 @@ void func_80B975F8(EnZot* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->actionFunc = func_80B973BC;
} else {
- func_800B8500(&this->actor, play, 10000.0f, 1000.0f, PLAYER_AP_NONE);
+ func_800B8500(&this->actor, play, 10000.0f, 1000.0f, PLAYER_IA_NONE);
}
}
@@ -530,10 +531,10 @@ void func_80B9765C(EnZot* this, PlayState* play) {
case 0x1267:
case 0x126A:
case 0x126B:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
default:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80B97708;
break;
}
@@ -553,14 +554,14 @@ void func_80B97708(EnZot* this, PlayState* play) {
return;
}
- if (!(player->stateFlags1 & 0x2000000)) {
+ if (!(player->stateFlags1 & PLAYER_STATE1_2000000)) {
phi_v1 = func_80B96CE4(this);
} else {
phi_v1 = 0;
}
if (phi_v1 != 0) {
- gSaveContext.save.weekEventReg[29] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_29_10);
this->actor.flags |= ACTOR_FLAG_10000;
if (phi_v1 == 5) {
if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) {
@@ -588,58 +589,58 @@ void func_80B9787C(EnZot* this, PlayState* play) {
if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) {
switch (ENZOT_GET_1F(&this->actor)) {
case 2:
- if (gSaveContext.save.weekEventReg[37] & 0x40) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_37_40)) {
textId = 0x127E;
} else {
textId = 0x127C;
- gSaveContext.save.weekEventReg[37] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_37_40);
}
break;
case 3:
- if (gSaveContext.save.weekEventReg[38] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_38_01)) {
textId = 0x1284;
} else {
textId = 0x1282;
- gSaveContext.save.weekEventReg[38] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_38_01);
}
break;
default:
- if (gSaveContext.save.weekEventReg[38] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_38_04)) {
textId = 0x128A;
} else {
textId = 0x1288;
- gSaveContext.save.weekEventReg[38] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_38_04);
}
break;
}
} else {
switch (ENZOT_GET_1F(&this->actor)) {
case 2:
- if (gSaveContext.save.weekEventReg[37] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_37_20)) {
textId = 0x127B;
} else {
textId = 0x1279;
- gSaveContext.save.weekEventReg[37] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_37_20);
}
break;
case 3:
- if (gSaveContext.save.weekEventReg[37] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_37_80)) {
textId = 0x1281;
} else {
textId = 0x127F;
- gSaveContext.save.weekEventReg[37] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_37_80);
}
break;
default:
- if (gSaveContext.save.weekEventReg[38] & 2) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_38_02)) {
textId = 0x1287;
} else {
textId = 0x1285;
- gSaveContext.save.weekEventReg[38] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_38_02);
}
break;
}
@@ -652,9 +653,9 @@ void func_80B979DC(EnZot* this, PlayState* play) {
if (func_80B96E5C(this)) {
this->actionFunc = func_80B97B5C;
func_80B96BEC(this, 0, ANIMMODE_LOOP);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
} else {
- this->actor.speedXZ = 1.5f;
+ this->actor.speed = 1.5f;
}
}
@@ -667,7 +668,7 @@ void func_80B97A44(EnZot* this, PlayState* play) {
case 0x1282:
case 0x1285:
case 0x1288:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x127D:
@@ -676,7 +677,7 @@ void func_80B97A44(EnZot* this, PlayState* play) {
case 0x1284:
case 0x1289:
case 0x128A:
- func_801477B4(play);
+ Message_CloseTextbox(play);
if (!(this->unk_2F2 & 2)) {
this->unk_2F2 |= 2;
this->actionFunc = func_80B979DC;
@@ -687,7 +688,7 @@ void func_80B97A44(EnZot* this, PlayState* play) {
break;
default:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80B97B5C;
break;
}
@@ -720,7 +721,7 @@ void func_80B97C40(EnZot* this, PlayState* play) {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 2, 0x800, 0x100);
this->actor.world.rot.y = this->actor.shape.rot.y;
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80B97CC8;
}
}
@@ -737,14 +738,14 @@ void func_80B97CC8(EnZot* this, PlayState* play) {
void func_80B97D6C(EnZot* this, PlayState* play) {
if (func_80B96E5C(this)) {
this->actionFunc = func_80B97CC8;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
func_80B96BEC(this, 0, ANIMMODE_LOOP);
} else {
- this->actor.speedXZ = 8.0f;
+ this->actor.speed = 8.0f;
}
if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 5.0f)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ZORA_WALK);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_ZORA_WALK);
}
}
@@ -772,25 +773,25 @@ void func_80B97E4C(EnZot* this, PlayState* play) {
case 0x128C:
this->unk_2F2 &= ~4;
func_80B96BEC(this, 6, ANIMMODE_ONCE);
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x128D:
case 0x128E:
case 0x128F:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x1290:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80B97D6C;
this->unk_2F2 |= 4;
func_80B96BEC(this, 3, ANIMMODE_LOOP);
- gSaveContext.save.weekEventReg[38] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_38_08);
break;
case 0x128B:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80B97FD0;
break;
}
@@ -803,7 +804,7 @@ void func_80B97FD0(EnZot* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->actionFunc = func_80B97E4C;
func_80B97BF8(this, play);
- } else if (gSaveContext.save.weekEventReg[38] & 8) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_38_08)) {
if ((this->actor.xzDistToPlayer < 120.0f) && (gSaveContext.save.playerForm == PLAYER_FORM_ZORA)) {
this->unk_2F2 |= 4;
this->actionFunc = func_80B97E0C;
@@ -819,9 +820,9 @@ void func_80B980FC(EnZot* this, PlayState* play) {
this->actor.home.rot.x--;
} else if (func_80B96E5C(this)) {
this->actionFunc = func_80B97100;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
} else {
- this->actor.speedXZ = 8.0f;
+ this->actor.speed = 8.0f;
if (this->unk_2F0 != 3) {
func_80B96BEC(this, 3, ANIMMODE_LOOP);
}
@@ -837,35 +838,35 @@ void func_80B98178(EnZot* this, PlayState* play) {
if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) {
if (CURRENT_DAY == 3) {
textId = 0x129D;
- } else if (gSaveContext.save.weekEventReg[39] & 1) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_01)) {
textId = 0x129C;
} else {
textId = 0x129B;
- gSaveContext.save.weekEventReg[39] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_39_01);
}
- } else if (gSaveContext.save.weekEventReg[38] & 0x80) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_38_80)) {
textId = 0x1293;
} else {
textId = 0x1291;
- gSaveContext.save.weekEventReg[38] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_38_80);
}
break;
case 7:
if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) {
- if (gSaveContext.save.weekEventReg[39] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_04)) {
textId = 0x12AA;
} else {
textId = 0x12A6;
- gSaveContext.save.weekEventReg[39] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_39_04);
}
} else if (Flags_GetSwitch(play, this->actor.home.rot.z & 0x7F)) {
textId = 0x12A0;
- } else if (gSaveContext.save.weekEventReg[39] & 2) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_02)) {
textId = 0x12A5;
} else {
textId = 0x12A2;
- gSaveContext.save.weekEventReg[39] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_39_02);
}
break;
@@ -877,7 +878,7 @@ void func_80B98178(EnZot* this, PlayState* play) {
case 16:
case 17:
phi_v0 = (ENZOT_GET_1F(&this->actor) * 4) - 44;
- if (gSaveContext.save.weekEventReg[79] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_01)) {
phi_v0 += 2;
}
@@ -931,7 +932,7 @@ void func_80B9849C(EnZot* this, PlayState* play) {
}
this->actionFunc = func_80B98728;
} else {
- func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1);
}
}
@@ -941,24 +942,25 @@ void func_80B9854C(EnZot* this, PlayState* play) {
this->actor.parent = NULL;
this->actionFunc = func_80B9849C;
this->actor.flags |= ACTOR_FLAG_10000;
- func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_AP_MINUS1);
+ func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1);
} else {
- Actor_PickUp(&this->actor, play, this->unk_2D4, 10000.0f, 50.0f);
+ Actor_OfferGetItem(&this->actor, play, this->unk_2D4, 10000.0f, 50.0f);
}
}
void func_80B985EC(EnZot* this, PlayState* play) {
- s32 itemActionParam;
+ PlayerItemAction itemAction;
Player* player = GET_PLAYER(play);
func_80B98348(this, play);
if (Message_GetState(&play->msgCtx) == TEXT_STATE_16) {
- itemActionParam = func_80123810(play);
- if (itemActionParam > PLAYER_AP_NONE) {
- func_801477B4(play);
- if ((itemActionParam == PLAYER_AP_PICTO_BOX) && CHECK_QUEST_ITEM(QUEST_PICTOGRAPH) &&
- Snap_CheckFlag(PICTOGRAPH_LULU_HEAD)) {
- if (Snap_CheckFlag(PICTOGRAPH_LULU_RIGHT_ARM) && Snap_CheckFlag(PICTOGRAPH_LULU_LEFT_ARM)) {
+ itemAction = func_80123810(play);
+
+ if (itemAction > PLAYER_IA_NONE) {
+ Message_CloseTextbox(play);
+ if ((itemAction == PLAYER_IA_PICTO_BOX) && CHECK_QUEST_ITEM(QUEST_PICTOGRAPH) &&
+ Snap_CheckFlag(PICTO_VALID_LULU_HEAD)) {
+ if (Snap_CheckFlag(PICTO_VALID_LULU_RIGHT_ARM) && Snap_CheckFlag(PICTO_VALID_LULU_LEFT_ARM)) {
player->actor.textId = 0x12AE;
} else {
player->actor.textId = 0x12AC;
@@ -968,8 +970,8 @@ void func_80B985EC(EnZot* this, PlayState* play) {
player->actor.textId = 0x12AB;
}
this->actionFunc = func_80B98728;
- } else if (itemActionParam < PLAYER_AP_NONE) {
- func_80151938(play, 0x12AB);
+ } else if (itemAction <= PLAYER_IA_MINUS1) {
+ Message_ContinueTextbox(play, 0x12AB);
this->actionFunc = func_80B98728;
}
}
@@ -984,12 +986,12 @@ void func_80B98728(EnZot* this, PlayState* play) {
switch (play->msgCtx.choiceIndex) {
case 0:
func_8019F208();
- func_80151938(play, 0x1294);
+ Message_ContinueTextbox(play, 0x1294);
break;
case 1:
func_8019F230();
- func_80151938(play, 0x1298);
+ Message_ContinueTextbox(play, 0x1298);
break;
}
}
@@ -1014,44 +1016,44 @@ void func_80B98728(EnZot* this, PlayState* play) {
case 0x12A7:
case 0x12A8:
case 0x12AE:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x12A9:
case 0x12AA:
- func_80151938(play, 0xFF);
+ Message_ContinueTextbox(play, 0xFF);
this->actionFunc = func_80B985EC;
break;
case 0x1294:
if (CURRENT_DAY == 3) {
- func_80151938(play, 0x1296);
+ Message_ContinueTextbox(play, 0x1296);
} else {
- func_80151938(play, 0x1295);
+ Message_ContinueTextbox(play, 0x1295);
}
break;
case 0x12AB:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80B98998;
break;
case 0x12AC:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->unk_2D4 = 2;
this->actionFunc = func_80B9854C;
func_80B9854C(this, play);
break;
case 0x12AF:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->unk_2D4 = 4;
this->actionFunc = func_80B9854C;
func_80B9854C(this, play);
break;
default:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80B98998;
this->actor.flags &= ~ACTOR_FLAG_10000;
break;
@@ -1076,17 +1078,17 @@ void func_80B98A4C(EnZot* this, PlayState* play) {
u16 textId;
if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) {
- if (gSaveContext.save.weekEventReg[39] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_80)) {
textId = 0x12B6;
} else {
textId = 0x12B4;
- gSaveContext.save.weekEventReg[39] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_39_80);
}
- } else if (gSaveContext.save.weekEventReg[39] & 0x40) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_40)) {
textId = 0x12B3;
} else {
textId = 0x12B1;
- gSaveContext.save.weekEventReg[39] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_39_40);
}
Message_StartTextbox(play, textId, &this->actor);
}
@@ -1098,25 +1100,25 @@ void func_80B98AD0(EnZot* this, PlayState* play) {
case 0x12B4:
case 0x12B7:
case 0x12B9:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x12B8:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80B98CA8;
- gSaveContext.save.weekEventReg[41] &= (u8)~0x20;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_41_20);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
break;
case 0x12BA:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80B98CA8;
- gSaveContext.save.weekEventReg[41] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_41_20);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
break;
default:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80B98CA8;
break;
}
@@ -1126,7 +1128,7 @@ void func_80B98AD0(EnZot* this, PlayState* play) {
void func_80B98BF4(EnZot* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->actor.flags &= ~ACTOR_FLAG_10000;
- if (gSaveContext.save.weekEventReg[41] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_41_20)) {
Message_StartTextbox(play, 0x12B7, &this->actor);
this->actionFunc = func_80B98AD0;
} else {
@@ -1159,7 +1161,7 @@ void func_80B98CA8(EnZot* this, PlayState* play) {
}
if (this->actor.xzDistToPlayer > 100.0f) {
- gSaveContext.save.weekEventReg[41] &= (u8)~0x20;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_41_20);
}
}
@@ -1168,17 +1170,17 @@ void func_80B98E10(EnZot* this, PlayState* play) {
if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) {
if (Flags_GetSwitch(play, this->actor.home.rot.z & 0x7F)) {
- if (gSaveContext.save.weekEventReg[40] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_40_04)) {
textId = 0x12C5;
} else {
textId = 0x12C3;
- gSaveContext.save.weekEventReg[40] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_40_04);
}
- } else if (gSaveContext.save.weekEventReg[40] & 2) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_40_02)) {
textId = 0x12C2;
} else {
textId = 0x12C0;
- gSaveContext.save.weekEventReg[40] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_40_02);
}
} else {
if (Flags_GetSwitch(play, this->actor.home.rot.z & 0x7F)) {
@@ -1188,10 +1190,10 @@ void func_80B98E10(EnZot* this, PlayState* play) {
textId = 0x12BE;
this->unk_2F2 |= 0x10;
}
- } else if (gSaveContext.save.weekEventReg[40] & 1) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_40_01)) {
textId = 0x12BC;
} else {
- gSaveContext.save.weekEventReg[40] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_40_01);
this->unk_2F2 |= 4;
textId = 0x12BB;
}
@@ -1204,7 +1206,7 @@ void func_80B98F30(EnZot* this, PlayState* play) {
this->actor.parent = NULL;
this->actionFunc = func_80B990A4;
} else {
- Actor_PickUp(&this->actor, play, GI_RUPEE_BLUE, 10000.0f, 50.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_RUPEE_BLUE, 10000.0f, 50.0f);
}
}
@@ -1222,17 +1224,17 @@ void func_80B98F94(EnZot* this, PlayState* play) {
case 0x12BC:
case 0x12C0:
case 0x12C3:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x12BE:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80B98F30;
func_80B98F30(this, play);
break;
default:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80B990A4;
break;
}
@@ -1254,17 +1256,17 @@ void func_80B99160(EnZot* this, PlayState* play) {
u16 textId;
if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) {
- if (gSaveContext.save.weekEventReg[40] & 0x10) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_40_10)) {
textId = 0x12CD;
} else {
textId = 0x12CA;
- gSaveContext.save.weekEventReg[40] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_40_10);
}
- } else if (gSaveContext.save.weekEventReg[40] & 8) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_40_08)) {
textId = 0x12C9;
} else {
textId = 0x12C6;
- gSaveContext.save.weekEventReg[40] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_40_08);
}
Message_StartTextbox(play, textId, &this->actor);
}
@@ -1281,9 +1283,9 @@ void func_80B991E4(EnZot* this, PlayState* play) {
if ((temp == 0x12C6) || (temp == 0x12C7) || (temp == 0x12CA) || (temp == 0x12CB)) {
temp2 = temp;
- func_80151938(play, temp2 + 1);
+ Message_ContinueTextbox(play, temp2 + 1);
} else {
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80B992C0;
func_80B96BEC(this, 1, ANIMMODE_LOOP);
}
@@ -1294,13 +1296,13 @@ void func_80B992C0(EnZot* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->actionFunc = func_80B991E4;
func_80B99160(this, play);
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
func_80B96BEC(this, 0, ANIMMODE_LOOP);
} else {
if (Player_IsFacingActor(&this->actor, 0x3000, play) && (this->actor.xzDistToPlayer < 100.0f)) {
func_800B8614(&this->actor, play, 120.0f);
}
- this->actor.speedXZ = 1.5f;
+ this->actor.speed = 1.5f;
func_80B96FB0(this);
}
}
@@ -1315,7 +1317,7 @@ void EnZot_Update(Actor* thisx, PlayState* play) {
Actor_MoveWithGravity(&this->actor);
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 15.0f, 30.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 15.0f, 30.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
this->unk_2F2 &= ~0x40;
if (SkelAnime_Update(&this->skelAnime) && (this->unk_2F0 != 0)) {
@@ -1345,11 +1347,12 @@ void EnZot_Update(Actor* thisx, PlayState* play) {
}
Gfx* func_80B99580(GraphicsContext* gfxCtx) {
- Gfx* dList = GRAPH_ALLOC(gfxCtx, sizeof(Gfx) * 2);
+ Gfx* gfxHead = GRAPH_ALLOC(gfxCtx, sizeof(Gfx));
+ Gfx* gfx = gfxHead;
- gSPEndDisplayList(dList);
+ gSPEndDisplayList(gfx++);
- return dList;
+ return gfxHead;
}
s32 EnZot_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
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 b72328b20..1bab43ae3 100644
--- a/src/overlays/actors/ovl_En_Zot/z_en_zot.h
+++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.h
@@ -29,6 +29,4 @@ typedef struct EnZot {
/* 0x2F8 */ EnZotActionFunc actionFunc;
} EnZot; // size = 0x2FC
-extern const ActorInit En_Zot_InitVars;
-
#endif // Z_EN_ZOT_H
diff --git a/src/overlays/actors/ovl_En_Zov/overlay.cfg b/src/overlays/actors/ovl_En_Zov/overlay.cfg
deleted file mode 100644
index 6e8d4a17a..000000000
--- a/src/overlays/actors/ovl_En_Zov/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Zov
-z_en_zov.c
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 05726ddce..c6dca4bd7 100644
--- a/src/overlays/actors/ovl_En_Zov/z_en_zov.c
+++ b/src/overlays/actors/ovl_En_Zov/z_en_zov.c
@@ -28,7 +28,7 @@ void func_80BD1DB8(EnZov* this, PlayState* play);
void func_80BD1F1C(EnZov* this, PlayState* play);
s32 EnZov_ValidatePictograph(PlayState* play, Actor* thisx);
-const ActorInit En_Zov_InitVars = {
+ActorInit En_Zov_InitVars = {
ACTOR_EN_ZOV,
ACTORCAT_NPC,
FLAGS,
@@ -91,10 +91,10 @@ void EnZov_Init(Actor* thisx, PlayState* play) {
Animation_PlayLoop(&this->skelAnime, &object_zov_Anim_00D3EC);
this->unk_320 = 0;
- this->unk_32C = -1;
- this->unk_326 = -1;
- this->unk_328[0] = this->picto.actor.cutscene;
- this->unk_328[1] = 0x7C;
+ this->csIdIndex = -1;
+ this->cueId = -1;
+ this->csIdList[0] = this->picto.actor.csId;
+ this->csIdList[1] = CS_ID_GLOBAL_TALK;
this->unk_322 = 0;
this->actionFunc = func_80BD1C84;
this->picto.validationFunc = EnZov_ValidatePictograph;
@@ -107,8 +107,8 @@ void EnZov_Init(Actor* thisx, PlayState* play) {
case ENZOV_F_1:
this->actionFunc = func_80BD1F1C;
func_80BD1570(this, 9, ANIMMODE_LOOP);
- if (!(gSaveContext.save.weekEventReg[55] & 0x80)) {
- Actor_MarkForDeath(&this->picto.actor);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) {
+ Actor_Kill(&this->picto.actor);
return;
}
break;
@@ -120,8 +120,8 @@ void EnZov_Init(Actor* thisx, PlayState* play) {
default:
this->unk_320 |= 2;
- if ((gSaveContext.save.weekEventReg[55] & 0x80) || (gSaveContext.save.weekEventReg[53] & 0x20)) {
- Actor_MarkForDeath(&this->picto.actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE) || CHECK_WEEKEVENTREG(WEEKEVENTREG_53_20)) {
+ Actor_Kill(&this->picto.actor);
}
break;
}
@@ -134,17 +134,17 @@ void EnZov_Destroy(Actor* thisx, PlayState* play) {
}
void func_80BD13DC(EnZov* this) {
- if (this->unk_32C != -1) {
- if (ActorCutscene_GetCurrentIndex() == this->unk_328[this->unk_32C]) {
- ActorCutscene_Stop(this->unk_328[this->unk_32C]);
+ if (this->csIdIndex != -1) {
+ if (CutsceneManager_GetCurrentCsId() == this->csIdList[this->csIdIndex]) {
+ CutsceneManager_Stop(this->csIdList[this->csIdIndex]);
}
- this->unk_32C = -1;
+ this->csIdIndex = -1;
}
}
void func_80BD1440(EnZov* this, s16 arg1) {
func_80BD13DC(this);
- this->unk_32C = arg1;
+ this->csIdIndex = arg1;
}
void func_80BD1470(EnZov* this, s16 index, u8 mode, f32 transitionRate) {
@@ -185,7 +185,7 @@ s32 func_80BD15A4(EnZov* this, PlayState* play) {
void func_80BD160C(EnZov* this, PlayState* play) {
s32 textId = 0;
- if (gSaveContext.save.weekEventReg[53] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_20)) {
this->unk_320 &= ~2;
if (gSaveContext.save.playerForm != PLAYER_FORM_ZORA) {
textId = 0x1024;
@@ -264,14 +264,14 @@ void func_80BD187C(EnZov* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
switch (play->msgCtx.currentTextId) {
case 0x1022:
- func_80151938(play, 0x1023);
+ Message_ContinueTextbox(play, 0x1023);
break;
case 0x1023:
if ((this->unk_322 != 6) && (this->unk_322 != 1)) {
func_80BD1570(this, 1, ANIMMODE_ONCE);
}
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80BD1C84;
break;
@@ -279,14 +279,14 @@ void func_80BD187C(EnZov* this, PlayState* play) {
if (this->unk_322 != 6) {
func_80BD1570(this, 0, ANIMMODE_LOOP);
}
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80BD1C84;
break;
default:
this->unk_320 &= ~1;
func_80BD1570(this, 0, ANIMMODE_LOOP);
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80BD1C84;
break;
}
@@ -294,7 +294,7 @@ void func_80BD187C(EnZov* this, PlayState* play) {
break;
case TEXT_STATE_CLOSING:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80BD1C84;
this->unk_320 &= ~1;
func_80BD1570(this, 0, ANIMMODE_LOOP);
@@ -328,12 +328,12 @@ void func_80BD19FC(EnZov* this, PlayState* play) {
s32 func_80BD1AE0(EnZov* this, PlayState* play) {
func_80BD1764(this);
- if (Cutscene_CheckActorAction(play, 504)) {
- s16 action = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 504)]->action;
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_504)) {
+ s16 cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_504)]->id;
- if (action != this->unk_326) {
- this->unk_326 = action;
- switch (this->unk_326) {
+ if (this->cueId != cueId) {
+ this->cueId = cueId;
+ switch (this->cueId) {
case 1:
func_80BD1570(this, 0, ANIMMODE_LOOP);
break;
@@ -367,7 +367,7 @@ void func_80BD1BF0(EnZov* this, PlayState* play) {
void func_80BD1C38(EnZov* this, PlayState* play) {
if (func_80BD1AE0(this, play)) {
- Cutscene_ActorTranslateAndYaw(&this->picto.actor, play, Cutscene_GetActorActionIndex(play, 504));
+ Cutscene_ActorTranslateAndYaw(&this->picto.actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_504));
}
}
@@ -381,7 +381,7 @@ void func_80BD1C84(EnZov* this, PlayState* play) {
func_800B8614(&this->picto.actor, play, 120.0f);
}
- if (Cutscene_CheckActorAction(play, 0x1F8)) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_504)) {
this->actionFunc = func_80BD1BF0;
func_80BD1BF0(this, play);
}
@@ -391,7 +391,7 @@ void func_80BD1D30(EnZov* this, PlayState* play) {
u16 textId;
if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) {
- if (gSaveContext.save.weekEventReg[79] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_01)) {
textId = 0x1032;
} else {
textId = 0x1033;
@@ -419,21 +419,21 @@ void func_80BD1DB8(EnZov* this, PlayState* play) {
case 0x1036:
case 0x1037:
case 0x1038:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
case 0x1039:
play->nextEntrance = play->setupExitList[ENZOV_GET_FE00(&this->picto.actor)];
- play->transitionType = TRANS_TYPE_05;
+ play->transitionType = TRANS_TYPE_FADE_WHITE_FAST;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.weekEventReg[78] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_78_01);
this->actionFunc = func_80BD1D94;
play->msgCtx.msgLength = 0;
- Audio_QueueSeqCmd(0x101400FF);
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 20);
break;
default:
- func_801477B4(play);
+ Message_CloseTextbox(play);
this->actionFunc = func_80BD1F1C;
break;
}
@@ -460,11 +460,11 @@ s32 EnZov_ValidatePictograph(PlayState* play, Actor* thisx) {
s32 ret;
EnZov* this = THIS;
- ret = Snap_ValidatePictograph(play, &this->picto.actor, PICTOGRAPH_LULU_HEAD, &this->picto.actor.focus.pos,
+ ret = Snap_ValidatePictograph(play, &this->picto.actor, PICTO_VALID_LULU_HEAD, &this->picto.actor.focus.pos,
&this->picto.actor.shape.rot, 10.0f, 300.0f, -1);
- ret |= Snap_ValidatePictograph(play, &this->picto.actor, PICTOGRAPH_LULU_RIGHT_ARM, &this->unk_308,
+ ret |= Snap_ValidatePictograph(play, &this->picto.actor, PICTO_VALID_LULU_RIGHT_ARM, &this->unk_308,
&this->picto.actor.shape.rot, 50.0f, 160.0f, 0x3000);
- ret |= Snap_ValidatePictograph(play, &this->picto.actor, PICTOGRAPH_LULU_LEFT_ARM, &this->unk_314,
+ ret |= Snap_ValidatePictograph(play, &this->picto.actor, PICTO_VALID_LULU_LEFT_ARM, &this->unk_314,
&this->picto.actor.shape.rot, 50.0f, 160.0f, 0x3000);
return ret;
}
@@ -476,11 +476,11 @@ void EnZov_Update(Actor* thisx, PlayState* play) {
Actor_MoveWithGravity(&this->picto.actor);
Collider_UpdateCylinder(&this->picto.actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
- Actor_UpdateBgCheckInfo(play, &this->picto.actor, 10.0f, 10.0f, 10.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->picto.actor, 10.0f, 10.0f, 10.0f, UPDBGCHECKINFO_FLAG_4);
this->actionFunc(this, play);
- if (!Cutscene_CheckActorAction(play, 0x1F8)) {
+ if (!Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_504)) {
this->unk_320 &= ~0x10;
}
@@ -506,14 +506,14 @@ void EnZov_Update(Actor* thisx, PlayState* play) {
this->unk_2EC = 0;
}
- if ((this->unk_32C != -1) && (ActorCutscene_GetCurrentIndex() != this->unk_328[this->unk_32C])) {
- if ((this->unk_32C == 0) && (ActorCutscene_GetCurrentIndex() == 0x7C)) {
- ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->unk_328[this->unk_32C]);
- } else if (ActorCutscene_GetCanPlayNext(this->unk_328[this->unk_32C])) {
- ActorCutscene_Start(this->unk_328[this->unk_32C], &this->picto.actor);
+ if ((this->csIdIndex != -1) && (CutsceneManager_GetCurrentCsId() != this->csIdList[this->csIdIndex])) {
+ if ((this->csIdIndex == 0) && (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK)) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
+ CutsceneManager_Queue(this->csIdList[this->csIdIndex]);
+ } else if (CutsceneManager_IsNext(this->csIdList[this->csIdIndex])) {
+ CutsceneManager_Start(this->csIdList[this->csIdIndex], &this->picto.actor);
} else {
- ActorCutscene_SetIntentToPlay(this->unk_328[this->unk_32C]);
+ CutsceneManager_Queue(this->csIdList[this->csIdIndex]);
}
}
}
diff --git a/src/overlays/actors/ovl_En_Zov/z_en_zov.h b/src/overlays/actors/ovl_En_Zov/z_en_zov.h
index 25966f994..7e1204100 100644
--- a/src/overlays/actors/ovl_En_Zov/z_en_zov.h
+++ b/src/overlays/actors/ovl_En_Zov/z_en_zov.h
@@ -30,12 +30,10 @@ typedef struct EnZov {
/* 0x320 */ u16 unk_320;
/* 0x322 */ s16 unk_322;
/* 0x324 */ s16 unk_324;
- /* 0x326 */ s16 unk_326;
- /* 0x328 */ s16 unk_328[2];
- /* 0x32C */ s16 unk_32C;
+ /* 0x326 */ s16 cueId;
+ /* 0x328 */ s16 csIdList[2];
+ /* 0x32C */ s16 csIdIndex;
/* 0x330 */ EnZovActionFunc actionFunc;
} EnZov; // size = 0x334
-extern const ActorInit En_Zov_InitVars;
-
#endif // Z_EN_ZOV_H
diff --git a/src/overlays/actors/ovl_En_Zow/overlay.cfg b/src/overlays/actors/ovl_En_Zow/overlay.cfg
deleted file mode 100644
index ba17bffc7..000000000
--- a/src/overlays/actors/ovl_En_Zow/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_En_Zow
-z_en_zow.c
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 4779fdedd..446470dbe 100644
--- a/src/overlays/actors/ovl_En_Zow/z_en_zow.c
+++ b/src/overlays/actors/ovl_En_Zow/z_en_zow.c
@@ -22,7 +22,7 @@ void func_80BDD634(EnZow* this, PlayState* play);
void func_80BDD6BC(EnZow* this, PlayState* play);
void func_80BDD79C(EnZow* this, PlayState* play);
-const ActorInit En_Zow_InitVars = {
+ActorInit En_Zow_InitVars = {
ACTOR_EN_ZOW,
ACTORCAT_NPC,
FLAGS,
@@ -357,45 +357,45 @@ void func_80BDD1E0(EnZow* this, PlayState* play) {
u16 phi_a1;
if (ENZOW_GET_F(&this->actor) == ENZOW_F_1) {
- if (gSaveContext.save.weekEventReg[55] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) {
if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) {
- if (gSaveContext.save.weekEventReg[78] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_04)) {
phi_a1 = 0x12FD;
} else {
phi_a1 = 0x12FA;
- gSaveContext.save.weekEventReg[78] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_78_04);
}
- } else if (gSaveContext.save.weekEventReg[78] & 0x10) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_10)) {
phi_a1 = 0x1301;
} else {
- gSaveContext.save.weekEventReg[78] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_78_10);
phi_a1 = 0x12FF;
}
} else if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) {
- if (gSaveContext.save.weekEventReg[78] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_08)) {
phi_a1 = 0x12F8;
} else {
phi_a1 = 0x12F3;
- gSaveContext.save.weekEventReg[78] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_78_08);
}
- } else if (gSaveContext.save.weekEventReg[78] & 0x10) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_10)) {
phi_a1 = 0x1301;
} else {
- gSaveContext.save.weekEventReg[78] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_78_10);
phi_a1 = 0x12FF;
}
- } else if (gSaveContext.save.weekEventReg[55] & 0x80) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) {
if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) {
phi_a1 = 0x12EC;
} else {
phi_a1 = 0x12F1;
}
} else if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) {
- if (gSaveContext.save.weekEventReg[78] & 2) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_02)) {
phi_a1 = 0x12EB;
} else {
phi_a1 = 0x12E8;
- gSaveContext.save.weekEventReg[78] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_78_02);
}
} else {
phi_a1 = 0x12EF;
@@ -405,7 +405,7 @@ void func_80BDD1E0(EnZow* this, PlayState* play) {
void func_80BDD350(EnZow* this, PlayState* play) {
if (this->unk_2CA & 2) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_DIVE_WATER);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_DIVE_WATER);
func_80BDCDA8(this, this->unk_2D0);
this->actor.flags &= ~ACTOR_FLAG_1;
this->skelAnime.playSpeed = 0.0f;
@@ -420,7 +420,7 @@ void func_80BDD350(EnZow* this, PlayState* play) {
}
}
- if ((this->actor.bgCheckFlags & 1) || (this->actor.depthInWater > 180.0f)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->actor.depthInWater > 180.0f)) {
this->actor.velocity.y = 0.0f;
this->actionFunc = func_80BDD79C;
}
@@ -477,11 +477,11 @@ void func_80BDD570(EnZow* this, PlayState* play) {
case 0x12FB:
case 0x12FD:
case 0x12FF:
- func_80151938(play, play->msgCtx.currentTextId + 1);
+ Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1);
break;
default:
- func_801477B4(play);
+ Message_CloseTextbox(play);
break;
}
}
@@ -511,7 +511,7 @@ void func_80BDD6BC(EnZow* this, PlayState* play) {
}
if (this->actor.depthInWater < 54.0f) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_OUT_OF_WATER);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_OUT_OF_WATER);
func_80BDCDA8(this, this->unk_2D0);
func_80BDD04C(this, 1, ANIMMODE_ONCE);
this->actor.flags |= ACTOR_FLAG_1;
@@ -547,7 +547,7 @@ void EnZow_Update(Actor* thisx, PlayState* play) {
Actor_MoveWithGravity(&this->actor);
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
- Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 15.0f, 30.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 15.0f, 30.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
if (this->unk_2CE != 0) {
this->unk_2CA &= ~2;
@@ -589,11 +589,12 @@ void EnZow_Update(Actor* thisx, PlayState* play) {
}
Gfx* func_80BDDA7C(GraphicsContext* gfxCtx) {
- Gfx* gfx = GRAPH_ALLOC(gfxCtx, sizeof(Gfx) * 2);
+ Gfx* gfxHead = GRAPH_ALLOC(gfxCtx, sizeof(Gfx));
+ Gfx* gfx = gfxHead;
- gSPEndDisplayList(gfx);
+ gSPEndDisplayList(gfx++);
- return gfx;
+ return gfxHead;
}
Vec3f D_80BDDD4C = { 400.0f, 0.0f, 0.0f };
diff --git a/src/overlays/actors/ovl_En_Zow/z_en_zow.h b/src/overlays/actors/ovl_En_Zow/z_en_zow.h
index 777a0aa9d..a9d915667 100644
--- a/src/overlays/actors/ovl_En_Zow/z_en_zow.h
+++ b/src/overlays/actors/ovl_En_Zow/z_en_zow.h
@@ -39,6 +39,4 @@ typedef struct EnZow {
/* 0x618 */ EnZowActionFunc actionFunc;
} EnZow; // size = 0x61C
-extern const ActorInit En_Zow_InitVars;
-
#endif // Z_EN_ZOW_H
diff --git a/src/overlays/actors/ovl_Item_B_Heart/overlay.cfg b/src/overlays/actors/ovl_Item_B_Heart/overlay.cfg
deleted file mode 100644
index 092976e2b..000000000
--- a/src/overlays/actors/ovl_Item_B_Heart/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Item_B_Heart
-z_item_b_heart.c
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 ac8592615..c41f45579 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,9 +1,3 @@
-/*
- * 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"
@@ -16,8 +10,7 @@ void ItemBHeart_Destroy(Actor* thisx, PlayState* play);
void ItemBHeart_Update(Actor* thisx, PlayState* play);
void ItemBHeart_Draw(Actor* thisx, PlayState* play);
-void func_808BCF54(ItemBHeart* this, PlayState* play);
-
+/*
const ActorInit Item_B_Heart_InitVars = {
ACTOR_ITEM_B_HEART,
ACTORCAT_BOSS,
@@ -27,88 +20,16 @@ const ActorInit Item_B_Heart_InitVars = {
(ActorFunc)ItemBHeart_Init,
(ActorFunc)ItemBHeart_Destroy,
(ActorFunc)ItemBHeart_Update,
- (ActorFunc)ItemBHeart_Draw,
+ (ActorFunc)ItemBHeart_Draw
};
+*/
-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_Init.s")
-void ItemBHeart_Init(Actor* thisx, PlayState* play) {
- ItemBHeart* this = THIS;
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Item_B_Heart/ItemBHeart_Destroy.s")
- if (Flags_GetCollectible(play, 0x1F)) {
- Actor_MarkForDeath(&this->actor);
- return;
- }
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Item_B_Heart/ItemBHeart_Update.s")
- Actor_ProcessInitChain(&this->actor, sInitChain);
- ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.8f);
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Item_B_Heart/func_808BCF54.s")
- if (this->actor.params == 0x23) {
- this->unk_168 = 0.1f;
- } else {
- this->unk_168 = 1.0f;
- }
-
- this->actor.world.pos.y += (20.0f * this->unk_168);
-}
-
-void ItemBHeart_Destroy(Actor* thisx, PlayState* play) {
-}
-
-void ItemBHeart_Update(Actor* thisx, PlayState* play) {
- ItemBHeart* this = THIS;
-
- func_808BCF54(this, play);
-
- if (!(this->unk_168 < 0.5f)) {
- if (Actor_HasParent(&this->actor, play)) {
- Flags_SetCollectible(play, 0x1F);
- Actor_MarkForDeath(&this->actor);
- } else {
- Actor_PickUp(&this->actor, play, GI_HEART_CONTAINER, 30.0f, 80.0f);
- }
- }
-}
-
-void func_808BCF54(ItemBHeart* this, PlayState* play) {
- this->actor.shape.rot.y += 0x400;
- Math_ApproachF(&this->unk_164, 0.4f, 0.1f, 0.01f);
- Actor_SetScale(&this->actor, this->unk_164 * this->unk_168);
-}
-
-void ItemBHeart_Draw(Actor* thisx, PlayState* play) {
- ItemBHeart* this = THIS;
- Actor* blueWarpActor;
- u8 flag = false;
-
- OPEN_DISPS(play->state.gfxCtx);
-
- blueWarpActor = play->actorCtx.actorLists[ACTORCAT_ITEMACTION].first;
-
- while (blueWarpActor != NULL) {
- if ((blueWarpActor->id == ACTOR_DOOR_WARP1) && (blueWarpActor->projectedPos.z > this->actor.projectedPos.z)) {
- flag = true;
- break;
- }
- blueWarpActor = blueWarpActor->next;
- }
-
- if (flag || thisx->world.rot.y != 0) {
- func_8012C2DC(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 {
- func_8012C28C(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);
-}
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Item_B_Heart/ItemBHeart_Draw.s")
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 b89e10edd..4e3126e25 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
@@ -7,11 +7,8 @@ struct ItemBHeart;
typedef struct ItemBHeart {
/* 0x000 */ Actor actor;
- /* 0x144 */ UNK_TYPE1 unk_144[0x20];
- /* 0x164 */ f32 unk_164;
+ /* 0x144 */ UNK_TYPE1 unk_144[0x24];
/* 0x168 */ f32 unk_168;
} ItemBHeart; // size = 0x16C
-extern const ActorInit Item_B_Heart_InitVars;
-
#endif // Z_ITEM_B_HEART_H
diff --git a/src/overlays/actors/ovl_Item_Etcetera/overlay.cfg b/src/overlays/actors/ovl_Item_Etcetera/overlay.cfg
deleted file mode 100644
index bf610d3f6..000000000
--- a/src/overlays/actors/ovl_Item_Etcetera/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Item_Etcetera
-z_item_etcetera.c
diff --git a/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c b/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c
index 0bd1fd30c..c5b218815 100644
--- a/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c
+++ b/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.c
@@ -20,7 +20,7 @@ void func_809200F8(ItemEtcetera* this, PlayState* play);
void ItemEtcetera_DrawThroughLens(Actor* thisx, PlayState* play);
void ItemEtcetera_Draw(Actor* thisx, PlayState* play);
-const ActorInit Item_Etcetera_InitVars = {
+ActorInit Item_Etcetera_InitVars = {
ACTOR_ITEM_ETCETERA,
ACTORCAT_PROP,
FLAGS,
@@ -102,15 +102,16 @@ void ItemEtcetera_WaitForObject(ItemEtcetera* this, PlayState* play) {
void func_8092009C(ItemEtcetera* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
- Actor_MarkForDeath(&this->actor);
- } else {
- Actor_PickUp(&this->actor, play, this->getItemId, 30.0f, 50.0f);
+ Actor_Kill(&this->actor);
+ return;
}
+
+ Actor_OfferGetItem(&this->actor, play, this->getItemId, 30.0f, 50.0f);
}
void func_809200F8(ItemEtcetera* this, PlayState* play) {
if (Flags_GetTreasure(play, ITEMETCETERA_GET_TREASUREFLAG(&this->actor))) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
diff --git a/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.h b/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.h
index e33f1e1fb..4ac893ba5 100644
--- a/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.h
+++ b/src/overlays/actors/ovl_Item_Etcetera/z_item_etcetera.h
@@ -37,6 +37,4 @@ typedef struct ItemEtcetera {
/* 0x154 */ ItemEtceteraActionFunc actionFunc;
} ItemEtcetera; // size = 0x158
-extern const ActorInit Item_Etcetera_InitVars;
-
#endif // Z_ITEM_ETCETERA_H
diff --git a/src/overlays/actors/ovl_Item_Inbox/overlay.cfg b/src/overlays/actors/ovl_Item_Inbox/overlay.cfg
deleted file mode 100644
index e6d4ee824..000000000
--- a/src/overlays/actors/ovl_Item_Inbox/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Item_Inbox
-z_item_inbox.c
diff --git a/src/overlays/actors/ovl_Item_Inbox/z_item_inbox.c b/src/overlays/actors/ovl_Item_Inbox/z_item_inbox.c
index 1f3fae3ac..0599e117d 100644
--- a/src/overlays/actors/ovl_Item_Inbox/z_item_inbox.c
+++ b/src/overlays/actors/ovl_Item_Inbox/z_item_inbox.c
@@ -17,7 +17,7 @@ void ItemInbox_Draw(Actor* thisx, PlayState* play);
void ItemInbox_Idle(ItemInbox* this, PlayState* play);
-const ActorInit Item_Inbox_InitVars = {
+ActorInit Item_Inbox_InitVars = {
ACTOR_ITEM_INBOX,
ACTORCAT_NPC,
FLAGS,
@@ -41,7 +41,7 @@ void ItemInbox_Destroy(Actor* thisx, PlayState* play) {
void ItemInbox_Idle(ItemInbox* this, PlayState* play) {
if (Flags_GetTreasure(play, (this->actor.params >> 8) & 0x1F)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
diff --git a/src/overlays/actors/ovl_Item_Inbox/z_item_inbox.h b/src/overlays/actors/ovl_Item_Inbox/z_item_inbox.h
index 0b3247ee7..e6b1adfd6 100644
--- a/src/overlays/actors/ovl_Item_Inbox/z_item_inbox.h
+++ b/src/overlays/actors/ovl_Item_Inbox/z_item_inbox.h
@@ -12,6 +12,4 @@ typedef struct ItemInbox {
/* 0x144 */ ItemInboxActionFunc actionFunc;
} ItemInbox; // size = 0x148
-extern const ActorInit Item_Inbox_InitVars;
-
#endif // Z_ITEM_INBOX_H
diff --git a/src/overlays/actors/ovl_Mir_Ray/overlay.cfg b/src/overlays/actors/ovl_Mir_Ray/overlay.cfg
deleted file mode 100644
index 9010673e3..000000000
--- a/src/overlays/actors/ovl_Mir_Ray/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Mir_Ray
-z_mir_ray.c
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 5160dc074..4880a326e 100644
--- a/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c
+++ b/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c
@@ -41,7 +41,7 @@ typedef struct {
/* 0x1F */ u8 params;
} MirRayDataEntry; // size = 0x20
-const ActorInit Mir_Ray_InitVars = {
+ActorInit Mir_Ray_InitVars = {
ACTOR_MIR_RAY,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -296,7 +296,7 @@ void MirRay_Init(Actor* thisx, PlayState* play) {
ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f);
if (MIRRAY_LOCATION(&this->actor) >= MIRRAY_MAX) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
this->sourcePt.x = dataEntry->sourcePoint.x;
@@ -483,8 +483,6 @@ void MirRay_RemoveSimilarReflections(MirRayShieldReflection* reflection) {
}
// Creates the reflected beam's collider (to interact with objects) and places and orients the shield images
-#ifdef NON_MATCHING
-// Beginning block re-ordered
void MirRay_ReflectedBeam(MirRay* this, PlayState* play, MirRayShieldReflection* reflection) {
Player* player = GET_PLAYER(play);
s32 i;
@@ -498,8 +496,6 @@ void MirRay_ReflectedBeam(MirRay* this, PlayState* play, MirRayShieldReflection*
f32 spE8[3];
f32 normalVec[3];
MtxF* shieldMtx = &player->shieldMf;
- Vec3f vecA;
- Vec3f vecC;
spE8[0] = -(shieldMtx->xz * this->reflectRange) * this->reflectIntensity * 400.0f;
spE8[1] = -(shieldMtx->yz * this->reflectRange) * this->reflectIntensity * 400.0f;
@@ -513,85 +509,86 @@ void MirRay_ReflectedBeam(MirRay* this, PlayState* play, MirRayShieldReflection*
vecD.y = spE8[1] + vecB.y;
vecD.z = spE8[2] + vecB.z;
- vecA.x = vecB.x + (shieldMtx->xx * 300.0f);
- vecA.y = vecB.y + (shieldMtx->yx * 300.0f);
- vecA.z = vecB.z + (shieldMtx->zx * 300.0f);
+ {
+ Vec3f vecA;
+ Vec3f vecC;
- vecC.x = vecD.x + (shieldMtx->xx * 300.0f);
- vecC.y = vecD.y + (shieldMtx->yx * 300.0f);
- vecC.z = vecD.z + (shieldMtx->zx * 300.0f);
+ vecA.x = vecB.x + (shieldMtx->xx * 300.0f);
+ vecA.y = vecB.y + (shieldMtx->yx * 300.0f);
+ vecA.z = vecB.z + (shieldMtx->zx * 300.0f);
- Collider_SetQuadVertices(&this->collider2, &vecA, &vecB, &vecC, &vecD);
+ vecC.x = vecD.x + (shieldMtx->xx * 300.0f);
+ vecC.y = vecD.y + (shieldMtx->yx * 300.0f);
+ vecC.z = vecD.z + (shieldMtx->zx * 300.0f);
- for (i = 0; i < 6; i++) {
- if (reflection[i].reflectionPoly != NULL) {
- normalVec[0] = COLPOLY_GET_NORMAL(reflection[i].reflectionPoly->normal.x);
- normalVec[1] = COLPOLY_GET_NORMAL(reflection[i].reflectionPoly->normal.y);
- normalVec[2] = COLPOLY_GET_NORMAL(reflection[i].reflectionPoly->normal.z);
+ Collider_SetQuadVertices(&this->collider2, &vecA, &vecB, &vecC, &vecD);
- if (Math3D_LineSegVsPlane(normalVec[0], normalVec[1], normalVec[2], reflection[i].reflectionPoly->dist,
- &vecB, &vecD, &sp118, 1)) {
+ for (i = 0; i < 6; i++) {
+ if (reflection[i].reflectionPoly != NULL) {
+ normalVec[0] = COLPOLY_GET_NORMAL(reflection[i].reflectionPoly->normal.x);
+ normalVec[1] = COLPOLY_GET_NORMAL(reflection[i].reflectionPoly->normal.y);
+ normalVec[2] = COLPOLY_GET_NORMAL(reflection[i].reflectionPoly->normal.z);
- reflection[i].pos.x = sp118.x;
- reflection[i].pos.y = sp118.y;
- reflection[i].pos.z = sp118.z;
+ if (Math3D_LineSegVsPlane(normalVec[0], normalVec[1], normalVec[2], reflection[i].reflectionPoly->dist,
+ &vecB, &vecD, &sp118, 1)) {
- temp_f0 = sqrtf(SQ(sp118.x - vecB.x) + SQ(sp118.y - vecB.y) + SQ(sp118.z - vecB.z));
+ reflection[i].pos.x = sp118.x;
+ reflection[i].pos.y = sp118.y;
+ reflection[i].pos.z = sp118.z;
- if (temp_f0 < (this->reflectIntensity * 600.0f)) {
- reflection[i].opacity = 200;
+ temp_f0 = sqrtf(SQ(sp118.x - vecB.x) + SQ(sp118.y - vecB.y) + SQ(sp118.z - vecB.z));
+
+ if (temp_f0 < (this->reflectIntensity * 600.0f)) {
+ reflection[i].opacity = 200;
+ } else {
+ reflection[i].opacity = (s32)(800.0f - temp_f0);
+ }
+
+ reflection[i].opacity = (s32)(reflection[i].opacity * 1.275f);
+
+ sp10C.x = (shieldMtx->xx * 100.0f) + vecB.x;
+ sp10C.y = (shieldMtx->yx * 100.0f) + vecB.y;
+ sp10C.z = (shieldMtx->zx * 100.0f) + vecB.z;
+
+ sp100.x = (spE8[0] * 4.0f) + sp10C.x;
+ sp100.y = (spE8[1] * 4.0f) + sp10C.y;
+ sp100.z = (spE8[2] * 4.0f) + sp10C.z;
+
+ reflection[i].mtx.xx = reflection[i].mtx.yy = reflection[i].mtx.zz = reflection[i].mtx.ww = 1.0f;
+
+ reflection[i].mtx.yx = reflection[i].mtx.zx = reflection[i].mtx.wx = reflection[i].mtx.xy =
+ reflection[i].mtx.zy = reflection[i].mtx.wy = reflection[i].mtx.xz = reflection[i].mtx.yz =
+ reflection[i].mtx.wz = reflection[i].mtx.xw = reflection[i].mtx.yw = reflection[i].mtx.zw =
+ 0.0f;
+
+ if (Math3D_LineSegVsPlane(normalVec[0], normalVec[1], normalVec[2],
+ reflection[i].reflectionPoly->dist, &sp10C, &sp100, &intersection, 1)) {
+ reflection[i].mtx.xx = intersection.x - sp118.x;
+ reflection[i].mtx.yx = intersection.y - sp118.y;
+ reflection[i].mtx.zx = intersection.z - sp118.z;
+ }
+
+ sp10C.x = (shieldMtx->xy * 100.0f) + vecB.x;
+ sp10C.y = (shieldMtx->yy * 100.0f) + vecB.y;
+ sp10C.z = (shieldMtx->zy * 100.0f) + vecB.z;
+
+ sp100.x = (spE8[0] * 4.0f) + sp10C.x;
+ sp100.y = (spE8[1] * 4.0f) + sp10C.y;
+ sp100.z = (spE8[2] * 4.0f) + sp10C.z;
+
+ if (Math3D_LineSegVsPlane(normalVec[0], normalVec[1], normalVec[2],
+ reflection[i].reflectionPoly->dist, &sp10C, &sp100, &intersection, 1)) {
+ reflection[i].mtx.xy = intersection.x - sp118.x;
+ reflection[i].mtx.yy = intersection.y - sp118.y;
+ reflection[i].mtx.zy = intersection.z - sp118.z;
+ }
} else {
- reflection[i].opacity = (s32)(800.0f - temp_f0);
+ reflection[i].reflectionPoly = NULL;
}
-
- reflection[i].opacity = (s32)(reflection[i].opacity * 1.275f);
-
- sp10C.x = (shieldMtx->xx * 100.0f) + vecB.x;
- sp10C.y = (shieldMtx->yx * 100.0f) + vecB.y;
- sp10C.z = (shieldMtx->zx * 100.0f) + vecB.z;
-
- sp100.x = (spE8[0] * 4.0f) + sp10C.x;
- sp100.y = (spE8[1] * 4.0f) + sp10C.y;
- sp100.z = (spE8[2] * 4.0f) + sp10C.z;
-
- reflection[i].mtx.xx = reflection[i].mtx.yy = reflection[i].mtx.zz = reflection[i].mtx.ww = 1.0f;
-
- reflection[i].mtx.yx = reflection[i].mtx.zx = reflection[i].mtx.wx = reflection[i].mtx.xy =
- reflection[i].mtx.zy = reflection[i].mtx.wy = reflection[i].mtx.xz = reflection[i].mtx.yz =
- reflection[i].mtx.wz = reflection[i].mtx.xw = reflection[i].mtx.yw = reflection[i].mtx.zw =
- 0.0f;
-
- if (Math3D_LineSegVsPlane(normalVec[0], normalVec[1], normalVec[2], reflection[i].reflectionPoly->dist,
- &sp10C, &sp100, &intersection, 1)) {
- reflection[i].mtx.xx = intersection.x - sp118.x;
- reflection[i].mtx.yx = intersection.y - sp118.y;
- reflection[i].mtx.zx = intersection.z - sp118.z;
- }
-
- sp10C.x = (shieldMtx->xy * 100.0f) + vecB.x;
- sp10C.y = (shieldMtx->yy * 100.0f) + vecB.y;
- sp10C.z = (shieldMtx->zy * 100.0f) + vecB.z;
-
- sp100.x = (spE8[0] * 4.0f) + sp10C.x;
- sp100.y = (spE8[1] * 4.0f) + sp10C.y;
- sp100.z = (spE8[2] * 4.0f) + sp10C.z;
-
- if (Math3D_LineSegVsPlane(normalVec[0], normalVec[1], normalVec[2], reflection[i].reflectionPoly->dist,
- &sp10C, &sp100, &intersection, 1)) {
- reflection[i].mtx.xy = intersection.x - sp118.x;
- reflection[i].mtx.yy = intersection.y - sp118.y;
- reflection[i].mtx.zy = intersection.z - sp118.z;
- }
- } else {
- reflection[i].reflectionPoly = NULL;
}
}
}
}
-#else
-void MirRay_ReflectedBeam(MirRay* this, PlayState* play, MirRayShieldReflection* reflection);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Mir_Ray/MirRay_ReflectedBeam.s")
-#endif
void MirRay_Draw(Actor* thisx, PlayState* play) {
s32 pad;
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 3ba21c444..cd48cfed1 100644
--- a/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.h
+++ b/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.h
@@ -40,6 +40,4 @@ typedef struct MirRay {
/* 0x2A6 */ u8 unLit; // Conditioned on. set in Cobra?
} MirRay; // size = 0x2A8
-extern const ActorInit Mir_Ray_InitVars;
-
#endif // Z_MIR_RAY_H
diff --git a/src/overlays/actors/ovl_Mir_Ray2/overlay.cfg b/src/overlays/actors/ovl_Mir_Ray2/overlay.cfg
deleted file mode 100644
index 2a1947005..000000000
--- a/src/overlays/actors/ovl_Mir_Ray2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Mir_Ray2
-z_mir_ray2.c
diff --git a/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.c b/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.c
index 215b63776..c4e861ff6 100644
--- a/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.c
+++ b/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.c
@@ -15,7 +15,7 @@ void MirRay2_Destroy(Actor* thisx, PlayState* play);
void MirRay2_Update(Actor* thisx, PlayState* play);
void MirRay2_Draw(Actor* thisx, PlayState* play);
-const ActorInit Mir_Ray2_InitVars = {
+ActorInit Mir_Ray2_InitVars = {
ACTOR_MIR_RAY2,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -115,7 +115,7 @@ void MirRay2_Update(Actor* thisx, PlayState* play) {
} else {
func_80AF3FE0(this, play);
if (MIRRAY2_GET_F(thisx) != 1) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, UPDBGCHECKINFO_FLAG_4);
this->actor.shape.shadowAlpha = 0x50;
} else {
func_80AF3F70(this);
diff --git a/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.h b/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.h
index ac5202bdb..4bb40d40d 100644
--- a/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.h
+++ b/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.h
@@ -19,6 +19,4 @@ typedef struct MirRay2 {
/* 0x1B0 */ LightInfo lightInfo;
} MirRay2; // size = 0x1C0
-extern const ActorInit Mir_Ray2_InitVars;
-
#endif // Z_MIR_RAY2_H
diff --git a/src/overlays/actors/ovl_Mir_Ray3/overlay.cfg b/src/overlays/actors/ovl_Mir_Ray3/overlay.cfg
deleted file mode 100644
index b2553ef0f..000000000
--- a/src/overlays/actors/ovl_Mir_Ray3/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Mir_Ray3
-z_mir_ray3.c
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 66a14a2a6..8f6fcbfe9 100644
--- a/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.c
+++ b/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.c
@@ -16,7 +16,7 @@ void MirRay3_Destroy(Actor* thisx, PlayState* play);
void MirRay3_Update(Actor* thisx, PlayState* play);
void MirRay3_Draw(Actor* thisx, PlayState* play);
-const ActorInit Mir_Ray3_InitVars = {
+ActorInit Mir_Ray3_InitVars = {
ACTOR_MIR_RAY3,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -213,7 +213,6 @@ void func_80B9E7D0(MirRay3Struct* ptr) {
}
}
-#ifdef NON_MATCHING
void func_80B9E8D4(MirRay3* this, PlayState* play, MirRay3Struct* ptr) {
Player* player = GET_PLAYER(play);
s32 i;
@@ -231,7 +230,6 @@ void func_80B9E8D4(MirRay3* this, PlayState* play, MirRay3Struct* ptr) {
f32 temp_f2;
Vec3f spD4;
Vec3f spC8;
- CollisionPoly* spC4;
spF8[0] = -(shieldMf->mf[2][0] * this->unk_260) * this->unk_214 * 400.0f;
spF8[1] = -(shieldMf->mf[2][1] * this->unk_260) * this->unk_214 * 400.0f;
@@ -321,28 +319,28 @@ void func_80B9E8D4(MirRay3* this, PlayState* play, MirRay3Struct* ptr) {
sp134.y = (spF8[1] * temp_f2) + sp140.y;
sp134.z = (spF8[2] * temp_f2) + sp140.z;
- if (!BgCheck_AnyLineTest1(&play->colCtx, &sp140, &sp134, &sp128, &spC4, 1)) {
- Math_Vec3f_Copy(&sp128, &sp134);
+ {
+ CollisionPoly* spC4;
+
+ if (!BgCheck_AnyLineTest1(&play->colCtx, &sp140, &sp134, &sp128, &spC4, 1)) {
+ Math_Vec3f_Copy(&sp128, &sp134);
+ }
+
+ sp128.x += spF8[0] * 5.0f;
+ sp128.y += spF8[1] * 5.0f;
+ sp128.z += spF8[2] * 5.0f;
+
+ spD4.x = (shieldMf->mf[0][0] * 300.0f) + sp140.x;
+ spD4.y = (shieldMf->mf[0][1] * 300.0f) + sp140.y;
+ spD4.z = (shieldMf->mf[0][2] * 300.0f) + sp140.z;
+
+ spC8.x = (shieldMf->mf[0][0] * 300.0f) + sp128.x;
+ spC8.y = (shieldMf->mf[0][1] * 300.0f) + sp128.y;
+ spC8.z = (shieldMf->mf[0][2] * 300.0f) + sp128.z;
+
+ Collider_SetQuadVertices(&this->colliderQuad, &spD4, &sp140, &spC8, &sp128);
}
-
- sp128.x += spF8[0] * 5.0f;
- sp128.y += spF8[1] * 5.0f;
- sp128.z += spF8[2] * 5.0f;
-
- spD4.x = (shieldMf->mf[0][0] * 300.0f) + sp140.x;
- spD4.y = (shieldMf->mf[0][1] * 300.0f) + sp140.y;
- spD4.z = (shieldMf->mf[0][2] * 300.0f) + sp140.z;
-
- spC8.x = (shieldMf->mf[0][0] * 300.0f) + sp128.x;
- spC8.y = (shieldMf->mf[0][1] * 300.0f) + sp128.y;
- spC8.z = (shieldMf->mf[0][2] * 300.0f) + sp128.z;
-
- Collider_SetQuadVertices(&this->colliderQuad, &spD4, &sp140, &spC8, &sp128);
}
-#else
-void func_80B9E8D4(MirRay3* this, PlayState* play, MirRay3Struct* ptr);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Mir_Ray3/func_80B9E8D4.s")
-#endif
void MirRay3_Draw(Actor* thisx, PlayState* play) {
s32 pad[2];
diff --git a/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.h b/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.h
index 7aecd111f..3e285c050 100644
--- a/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.h
+++ b/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.h
@@ -19,6 +19,4 @@ typedef struct MirRay3 {
/* 0x260 */ f32 unk_260;
} MirRay3; // size = 0x264
-extern const ActorInit Mir_Ray3_InitVars;
-
#endif // Z_MIR_RAY3_H
diff --git a/src/overlays/actors/ovl_Obj_Aqua/overlay.cfg b/src/overlays/actors/ovl_Obj_Aqua/overlay.cfg
deleted file mode 100644
index fa2c65abc..000000000
--- a/src/overlays/actors/ovl_Obj_Aqua/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Aqua
-z_obj_aqua.c
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 f0049800d..c32fb582d 100644
--- a/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.c
+++ b/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.c
@@ -24,7 +24,7 @@ void func_80ACBDFC(ObjAqua* this, PlayState* play);
void func_80ACBD34(ObjAqua* this);
-const ActorInit Obj_Aqua_InitVars = {
+ActorInit Obj_Aqua_InitVars = {
ACTOR_OBJ_AQUA,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -151,7 +151,10 @@ void ObjAqua_Init(Actor* thisx, PlayState* play) {
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 60.0f);
- if (1) {};
+
+ //! FAKE:
+ if (1) {}
+
this->actor.shape.shadowAlpha = 140;
this->alpha = 255;
if (func_80ACBA60(this, play)) {
@@ -175,19 +178,19 @@ void func_80ACBC70(ObjAqua* this) {
}
void func_80ACBC8C(ObjAqua* this, PlayState* play) {
- if (this->actor.bgCheckFlags & 0x21) {
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_WATER)) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
func_80ACB7F4(this, play);
func_80ACBA10(this);
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOTTLE_WATERING);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BOTTLE_WATERING);
func_80ACBD34(this);
} else {
func_80ACB6A0(this, play);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 0x28, NA_SE_EV_BOMB_DROP_WATER);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else if (this->counter <= 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -207,7 +210,7 @@ void func_80ACBD48(ObjAqua* this, PlayState* play) {
if (this->actor.shape.shadowAlpha > 2) {
this->actor.shape.shadowAlpha -= 2;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -232,7 +235,7 @@ void func_80ACBDFC(ObjAqua* this, PlayState* play) {
(Rand_ZeroOne() * 0.1f) + 0.03f);
}
if (this->counter <= 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -254,7 +257,7 @@ void ObjAqua_Update(Actor* thisx, PlayState* play) {
}
this->actor.velocity.y *= 0.9f;
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f, 4.0f, 0.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f, 4.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
if (this->actionFunc != func_80ACBDFC) {
Collider_UpdateCylinder(&this->actor, &this->collider);
this->collider.dim.radius = this->actor.scale.x * 3000.0f;
diff --git a/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.h b/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.h
index fa2b1c636..a47ea661a 100644
--- a/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.h
+++ b/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.h
@@ -19,6 +19,4 @@ typedef struct ObjAqua {
/* 0x198 */ s16 unk_198;
} ObjAqua; // size = 0x19C
-extern const ActorInit Obj_Aqua_InitVars;
-
#endif // Z_OBJ_AQUA_H
diff --git a/src/overlays/actors/ovl_Obj_Armos/overlay.cfg b/src/overlays/actors/ovl_Obj_Armos/overlay.cfg
deleted file mode 100644
index 1b54f7a3e..000000000
--- a/src/overlays/actors/ovl_Obj_Armos/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Armos
-z_obj_armos.c
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 b9310b27e..93adab401 100644
--- a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c
+++ b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c
@@ -7,7 +7,7 @@
#include "z_obj_armos.h"
#include "objects/gameplay_keep/gameplay_keep.h"
-#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_4000000)
+#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_CAN_PRESS_SWITCH)
#define THIS ((ObjArmos*)thisx)
@@ -23,7 +23,7 @@ void func_809A562C(ObjArmos* this, PlayState* play);
void func_809A57D8(ObjArmos* this);
void func_809A57F4(ObjArmos* this, PlayState* play);
-const ActorInit Obj_Armos_InitVars = {
+ActorInit Obj_Armos_InitVars = {
ACTOR_OBJ_ARMOS,
ACTORCAT_PROP,
FLAGS,
@@ -227,7 +227,7 @@ void ObjArmos_Destroy(Actor* thisx, PlayState* play) {
void func_809A54B4(ObjArmos* this) {
this->actionFunc = func_809A54E0;
- this->unk_24C = 4;
+ this->updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_4;
this->unk_266[1] = 0;
this->unk_266[2] = 0;
this->unk_266[3] = 0;
@@ -252,7 +252,7 @@ void func_809A54E0(ObjArmos* this, PlayState* play) {
func_809A518C(this, sp20);
func_809A5610(this);
} else {
- GET_PLAYER(play)->stateFlags2 &= ~0x10;
+ GET_PLAYER(play)->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
}
}
@@ -260,7 +260,7 @@ void func_809A54E0(ObjArmos* this, PlayState* play) {
void func_809A5610(ObjArmos* this) {
this->actionFunc = func_809A562C;
- this->unk_24C = 5;
+ this->updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4;
}
void func_809A562C(ObjArmos* this, PlayState* play) {
@@ -277,19 +277,19 @@ void func_809A562C(ObjArmos* this, PlayState* play) {
if ((temp == OBJARMOS_ROT_7_4) || (temp == OBJARMOS_ROT_7_5) || (temp == OBJARMOS_ROT_7_6)) {
if (!func_809A500C(this, this->unk_264) || func_809A4E00(this, play, 0x5A)) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
}
} else if (func_809A500C(this, this->unk_264)) {
if (func_809A4E00(this, play, 0x5A)) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
}
} else {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
Flags_SetSwitch(play, OBJARMOS_GET_7F(&this->dyna.actor));
sp20 = true;
}
- player->stateFlags2 &= ~0x10;
+ player->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
if (!sp20) {
@@ -304,12 +304,12 @@ void func_809A562C(ObjArmos* this, PlayState* play) {
void func_809A57D8(ObjArmos* this) {
this->actionFunc = func_809A57F4;
- this->unk_24C = 4;
+ this->updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_4;
}
void func_809A57F4(ObjArmos* this, PlayState* play) {
if (fabsf(this->dyna.pushForce) > 0.1f) {
- GET_PLAYER(play)->stateFlags2 &= ~0x10;
+ GET_PLAYER(play)->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
}
}
@@ -322,12 +322,12 @@ void ObjArmos_Update(Actor* thisx, PlayState* play2) {
this->actionFunc(this, play);
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y;
- if (this->unk_24C != 0) {
- Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 20.0f, 30.0f, 0.0f, this->unk_24C);
+ if (this->updBgCheckInfoFlags != 0) {
+ Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 20.0f, 30.0f, 0.0f, this->updBgCheckInfoFlags);
- if ((this->actionFunc == func_809A54E0) && (this->dyna.actor.bgCheckFlags & 1) &&
+ if ((this->actionFunc == func_809A54E0) && (this->dyna.actor.bgCheckFlags & BGCHECKFLAG_GROUND) &&
(DynaPoly_GetActor(&play->colCtx, this->dyna.actor.floorBgId) == NULL)) {
- this->unk_24C = 0;
+ this->updBgCheckInfoFlags = 0;
}
this->unk_250.x = (Math_SinS(this->dyna.actor.shape.rot.y) * -9.0f) + this->dyna.actor.world.pos.x;
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 a0c91f214..177cc8e66 100644
--- a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h
+++ b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h
@@ -28,7 +28,7 @@ typedef struct ObjArmos {
/* 0x1A0 */ Vec3s jointTable[OBJECT_AM_LIMB_MAX];
/* 0x1F4 */ Vec3s morphTable[OBJECT_AM_LIMB_MAX];
/* 0x248 */ ObjArmosActionFunc actionFunc;
- /* 0x24C */ u32 unk_24C;
+ /* 0x24C */ u32 updBgCheckInfoFlags;
/* 0x250 */ Vec3f unk_250;
/* 0x25C */ f32* unk_25C;
/* 0x260 */ f32 unk_260;
@@ -38,6 +38,4 @@ typedef struct ObjArmos {
/* 0x270 */ s16 unk_270;
} ObjArmos; // size = 0x274
-extern const ActorInit Obj_Armos_InitVars;
-
#endif // Z_OBJ_ARMOS_H
diff --git a/src/overlays/actors/ovl_Obj_Bean/overlay.cfg b/src/overlays/actors/ovl_Obj_Bean/overlay.cfg
deleted file mode 100644
index 24317cd06..000000000
--- a/src/overlays/actors/ovl_Obj_Bean/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Bean
-z_obj_bean.c
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 c13fde9b0..7cc5dfb17 100644
--- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c
+++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c
@@ -60,7 +60,7 @@ void func_80938C1C(Actor* thisx, PlayState* play);
void func_80938E00(Actor* thisx, PlayState* play);
void func_80938F50(Actor* thisx, PlayState* play);
-const ActorInit Obj_Bean_InitVars = {
+ActorInit Obj_Bean_InitVars = {
ACTOR_OBJ_BEAN,
ACTORCAT_BG,
FLAGS,
@@ -235,15 +235,15 @@ void func_809372D0(ObjBean* this) {
sp34 = Math3D_Vec3fMagnitude(&actor->velocity);
temp_f2 = D_80938FF8[this->unk_1DE].x;
temp_f12 = D_80938FF8[this->unk_1DE].z;
- if (sp34 < (actor->speedXZ * 8.0f)) {
+ if (sp34 < (actor->speed * 8.0f)) {
temp_f2 = ((temp_f2 - 2.0f) * 0.1f) + 2.0f;
temp_f12 *= 0.4f;
}
- Math_StepToF(&actor->speedXZ, temp_f2, temp_f12);
+ Math_StepToF(&actor->speed, temp_f2, temp_f12);
- if ((actor->speedXZ + 0.05f) < sp34) {
- Math_Vec3f_Scale(&actor->velocity, actor->speedXZ / sp34);
+ if ((actor->speed + 0.05f) < sp34) {
+ Math_Vec3f_Scale(&actor->velocity, actor->speed / sp34);
this->unk_1BC.x += actor->velocity.x;
this->unk_1BC.y += actor->velocity.y;
this->unk_1BC.z += actor->velocity.z;
@@ -255,7 +255,7 @@ void func_809372D0(ObjBean* this) {
} else {
this->unk_1DC++;
}
- actor->speedXZ *= 0.5f;
+ actor->speed *= 0.5f;
}
}
@@ -365,7 +365,7 @@ void ObjBean_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
this->unk_1FE = 0;
this->unk_1B8 = 0.1f;
- DynaPolyActor_Init(&this->dyna, 3);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y);
Collider_InitCylinder(play, &this->collider);
if ((sp2C == ENOBJBEAN_GET_C000_1) || (sp2C == ENOBJBEAN_GET_C000_2)) {
@@ -378,11 +378,12 @@ void ObjBean_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.flags |= ACTOR_FLAG_10;
func_80937C10(this);
if (!func_80936D58(this, play)) {
- Actor_MarkForDeath(&this->dyna.actor);
- } else {
- func_800BC154(play, &play->actorCtx, &this->dyna.actor, 7);
- func_80937DD8(this);
+ Actor_Kill(&this->dyna.actor);
+ return;
}
+
+ func_800BC154(play, &play->actorCtx, &this->dyna.actor, 7);
+ func_80937DD8(this);
} else {
s32 params2 = OBJBEAN_GET_3F00(&this->dyna.actor);
Path* path = &play->setupPathList[params2];
@@ -413,7 +414,7 @@ void ObjBean_Init(Actor* thisx, PlayState* play) {
if (OBJBEAN_GET_80(&this->dyna.actor) || Flags_GetSwitch(play, OBJBEAN_GET_7F(&this->dyna.actor, 1))) {
func_80938804(this);
} else {
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
func_80938704(this);
}
}
@@ -509,7 +510,7 @@ void func_80937DEC(ObjBean* this, PlayState* play) {
}
if (this->unk_1FF && Flags_GetSwitch(play, OBJBEAN_GET_3F80(&this->dyna.actor, 1))) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
@@ -545,7 +546,7 @@ void func_80937FC8(ObjBean* this, PlayState* play) {
this->unk_1E8(this);
if (Actor_ProcessTalkRequest(&this->dyna.actor, &play->state)) {
- if (Player_GetExchangeItemId(play) == PLAYER_AP_MAGIC_BEANS) {
+ if (Player_GetExchangeItemId(play) == PLAYER_IA_MAGIC_BEANS) {
func_809383B4(this);
Flags_SetSwitch(play, OBJBEAN_GET_3F80(&this->dyna.actor, 0));
}
@@ -575,7 +576,7 @@ void func_80937FC8(ObjBean* this, PlayState* play) {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
}
} else {
- func_800B85E0(&this->dyna.actor, play, 28.0f, 0x2E);
+ func_800B85E0(&this->dyna.actor, play, 28.0f, PLAYER_IA_MAGIC_BEANS);
}
}
}
@@ -587,20 +588,20 @@ void func_809381B0(ObjBean* this) {
void func_809381C4(ObjBean* this, PlayState* play) {
this->unk_1E8(this);
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
- if (this->dyna.actor.cutscene >= 0) {
- func_800B7298(play, &this->dyna.actor, 1);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
+ if (this->dyna.actor.csId >= 0) {
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_1);
}
this->unk_1E4 = 2;
func_80938284(this);
} else if (this->unk_1E4 == 4) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ CutsceneManager_Stop(this->dyna.actor.csId);
play_sound(NA_SE_SY_ERROR);
this->unk_1E4 = 0;
func_80937FB0(this);
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
@@ -617,7 +618,7 @@ void func_80938298(ObjBean* this, PlayState* play) {
this->unk_1E4 = 5;
func_8093833C(this);
} else if (this->unk_1E4 == 4) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ CutsceneManager_Stop(this->dyna.actor.csId);
play_sound(NA_SE_SY_ERROR);
this->unk_1E4 = 0;
func_80937FB0(this);
@@ -633,7 +634,7 @@ void func_80938358(ObjBean* this, PlayState* play) {
this->unk_1E8(this);
if (this->unk_1B2 <= 0) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ CutsceneManager_Stop(this->dyna.actor.csId);
func_80937FB0(this);
}
}
@@ -714,8 +715,11 @@ void func_80938670(ObjBean* this) {
void func_8093868C(ObjBean* this, PlayState* play) {
if (this->unk_1B2 <= 0) {
- Actor_MarkForDeath(&this->dyna.actor);
- } else if (this->unk_1B2 <= 20) {
+ Actor_Kill(&this->dyna.actor);
+ return;
+ }
+
+ if (this->unk_1B2 <= 20) {
this->dyna.actor.scale.x *= 0.89f;
this->dyna.actor.scale.y *= 0.89f;
this->dyna.actor.scale.z *= 0.89f;
@@ -731,7 +735,7 @@ void func_80938704(ObjBean* this) {
void func_80938728(ObjBean* this, PlayState* play) {
if (this->unk_200 != 0) {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
func_8093876C(this);
}
}
@@ -741,16 +745,16 @@ void func_8093876C(ObjBean* this) {
}
void func_80938780(ObjBean* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
- if (this->dyna.actor.cutscene >= 0) {
- func_800B7298(play, &this->dyna.actor, 1);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
+ if (this->dyna.actor.csId >= 0) {
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_1);
}
this->unk_1B4 = 36;
func_80937130(this);
func_80938AA4(this);
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
@@ -761,7 +765,7 @@ void func_80938804(ObjBean* this) {
}
void func_80938834(ObjBean* this, PlayState* play) {
- if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
func_80938874(this);
}
func_80936F24(this);
@@ -771,7 +775,7 @@ void func_80938874(ObjBean* this) {
this->actionFunc = func_809388A8;
this->dyna.actor.draw = func_80938E00;
this->dyna.actor.flags |= ACTOR_FLAG_10;
- this->dyna.actor.speedXZ = 0.0f;
+ this->dyna.actor.speed = 0.0f;
}
void func_809388A8(ObjBean* this, PlayState* play) {
@@ -780,7 +784,7 @@ void func_809388A8(ObjBean* this, PlayState* play) {
func_80937268(this, play);
func_809372A8(this);
func_8093892C(this);
- } else if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ } else if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
func_800B9010(&this->dyna.actor, NA_SE_PL_PLANT_MOVE - SFX_FLAG);
}
func_80936F24(this);
@@ -793,7 +797,7 @@ void func_8093892C(ObjBean* this) {
}
void func_80938958(ObjBean* this, PlayState* play) {
- if (!DynaPolyActor_IsInRidingRotatingState(&this->dyna)) {
+ if (!DynaPolyActor_IsPlayerAbove(&this->dyna)) {
func_80938804(this);
}
func_80936F24(this);
@@ -806,7 +810,7 @@ void func_80938998(ObjBean* this) {
}
void func_809389BC(ObjBean* this, PlayState* play) {
- if (!DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ if (!DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
func_80937268(this, play);
func_809372A8(this);
func_80937238(this);
@@ -843,13 +847,13 @@ void func_80938AD8(ObjBean* this, PlayState* play) {
func_80937160(this);
if (this->unk_1B2 == 25) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_PL_PLANT_GROW_BIG);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_PL_PLANT_GROW_BIG);
}
if (sp30 != 0) {
- func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
} else {
- func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
}
if (this->dyna.actor.xzDistToPlayer < 74.0f) {
@@ -905,7 +909,7 @@ void ObjBean_Update(Actor* thisx, PlayState* play) {
if (this->unk_1B4 > 0) {
this->unk_1B4--;
if (this->unk_1B4 == 0) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ CutsceneManager_Stop(this->dyna.actor.csId);
}
}
@@ -921,7 +925,7 @@ void ObjBean_Update(Actor* thisx, PlayState* play) {
this->dyna.actor.shape.shadowScale = this->dyna.actor.scale.x * 88.0f;
if (func_80937468(this, play)) {
func_809375F4(this, play);
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
func_80938998(this);
}
} else {
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 5af772007..7699b3427 100644
--- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h
+++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h
@@ -59,6 +59,4 @@ typedef struct ObjBean {
/* 0x200 */ u8 unk_200;
} ObjBean; // size = 0x204
-extern const ActorInit Obj_Bean_InitVars;
-
#endif // Z_OBJ_BEAN_H
diff --git a/src/overlays/actors/ovl_Obj_Bell/overlay.cfg b/src/overlays/actors/ovl_Obj_Bell/overlay.cfg
deleted file mode 100644
index 40a295642..000000000
--- a/src/overlays/actors/ovl_Obj_Bell/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Bell
-z_obj_bell.c
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 d57c9937d..fb7f1466c 100644
--- a/src/overlays/actors/ovl_Obj_Bell/z_obj_bell.c
+++ b/src/overlays/actors/ovl_Obj_Bell/z_obj_bell.c
@@ -19,7 +19,7 @@ void ObjBell_Draw(Actor* thisx, PlayState* play);
s32 func_80A356D8(ObjBell* this);
s32 func_80A357A8(ObjBell* this, PlayState* play);
-const ActorInit Obj_Bell_InitVars = {
+ActorInit Obj_Bell_InitVars = {
ACTOR_OBJ_BELL,
ACTORCAT_PROP,
FLAGS,
@@ -188,11 +188,11 @@ s32 func_80A357A8(ObjBell* this, PlayState* play) {
this->unk_20E = 10;
switch (this->dyna.actor.colChkInfo.damageEffect) {
case 15:
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BIGBELL);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BIGBELL);
func_80A35510(this, 1);
break;
case 14:
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BIGBELL);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BIGBELL);
func_80A35510(this, 2);
break;
default:
diff --git a/src/overlays/actors/ovl_Obj_Bell/z_obj_bell.h b/src/overlays/actors/ovl_Obj_Bell/z_obj_bell.h
index c55381ad3..a98f29680 100644
--- a/src/overlays/actors/ovl_Obj_Bell/z_obj_bell.h
+++ b/src/overlays/actors/ovl_Obj_Bell/z_obj_bell.h
@@ -20,6 +20,4 @@ typedef struct ObjBell {
/* 0x224 */ UNK_TYPE1 unk_224[0x04];
} ObjBell; // size = 0x228
-extern const ActorInit Obj_Bell_InitVars;
-
#endif // Z_OBJ_BELL_H
diff --git a/src/overlays/actors/ovl_Obj_Bigicicle/overlay.cfg b/src/overlays/actors/ovl_Obj_Bigicicle/overlay.cfg
deleted file mode 100644
index 7f70ff350..000000000
--- a/src/overlays/actors/ovl_Obj_Bigicicle/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Bigicicle
-z_obj_bigicicle.c
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 7f59fe579..85468c59c 100644
--- a/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c
+++ b/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c
@@ -24,7 +24,7 @@ void func_80AE9180(ObjBigicicle* this, PlayState* play);
void func_80AE9258(ObjBigicicle* this, PlayState* play);
void func_80AE939C(ObjBigicicle* this, PlayState* play);
-const ActorInit Obj_Bigicicle_InitVars = {
+ActorInit Obj_Bigicicle_InitVars = {
ACTOR_OBJ_BIGICICLE,
ACTORCAT_PROP,
FLAGS,
@@ -126,7 +126,7 @@ void ObjBigicicle_Init(Actor* thisx, PlayState* play) {
this->collider2.dim.yShift = this->collider2.dim.yShift * sp30;
if (Flags_GetSwitch(play, this->actor.params)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -182,7 +182,7 @@ void func_80AE8FD4(ObjBigicicle* this, PlayState* play) {
if ((this->collider1.base.acFlags & AC_HIT) ||
((this->collider2.base.acFlags & AC_HIT) && (this->collider2.info.acHitInfo->toucher.dmgFlags & 0x3820))) {
if ((this->unk_148 == 0) || (this->unk_149 == 1)) {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
this->actionFunc = func_80AE9090;
return;
}
@@ -195,8 +195,8 @@ void func_80AE8FD4(ObjBigicicle* this, PlayState* play) {
}
void func_80AE9090(ObjBigicicle* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
this->unk_149++;
func_80AE8DE4(this, play);
if (this->unk_149 == 2) {
@@ -213,7 +213,7 @@ void func_80AE9090(ObjBigicicle* this, PlayState* play) {
this->actionFunc = func_80AE9180;
}
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
@@ -227,7 +227,7 @@ void func_80AE9180(ObjBigicicle* this, PlayState* play) {
} else {
this->actor.shape.rot.x = 0x4000;
this->actor.shape.rot.z = 0;
- ActorCutscene_Stop(this->actor.cutscene);
+ CutsceneManager_Stop(this->actor.csId);
this->actionFunc = func_80AE8FD4;
}
}
@@ -238,7 +238,7 @@ void func_80AE9258(ObjBigicicle* this, PlayState* play) {
ObjIcePoly* icePoly;
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
itemAction = play->actorCtx.actorLists[ACTORCAT_ITEMACTION].first;
@@ -247,7 +247,7 @@ void func_80AE9258(ObjBigicicle* this, PlayState* play) {
icePoly = (ObjIcePoly*)itemAction;
temp_f0 = this->actor.world.pos.y - icePoly->actor.world.pos.y;
if ((temp_f0 < icePoly->colliders1[0].dim.height) && (temp_f0 > 0.0f) &&
- (Actor_XZDistanceBetweenActors(&this->actor, &icePoly->actor) < icePoly->colliders1[0].dim.radius)) {
+ (Actor_WorldDistXZToActor(&this->actor, &icePoly->actor) < icePoly->colliders1[0].dim.radius)) {
Flags_SetSwitch(play, this->actor.params);
this->actionFunc = func_80AE939C;
return;
@@ -256,7 +256,7 @@ void func_80AE9258(ObjBigicicle* this, PlayState* play) {
itemAction = itemAction->next;
}
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
this->actionFunc = func_80AE939C;
} else {
Collider_UpdateCylinder(&this->actor, &this->collider1);
@@ -284,8 +284,8 @@ void func_80AE939C(ObjBigicicle* this, PlayState* play) {
}
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EV_GLASSBROKEN_IMPACT);
- ActorCutscene_Stop(this->actor.cutscene);
- Actor_MarkForDeath(&this->actor);
+ CutsceneManager_Stop(this->actor.csId);
+ Actor_Kill(&this->actor);
}
void ObjBigicicle_Update(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.h b/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.h
index 7e28abd45..2eb5a00bd 100644
--- a/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.h
+++ b/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.h
@@ -19,6 +19,4 @@ typedef struct ObjBigicicle {
/* 0x198 */ ColliderCylinder collider2;
} ObjBigicicle; // size = 0x1E4
-extern const ActorInit Obj_Bigicicle_InitVars;
-
#endif // Z_OBJ_BIGICICLE_H
diff --git a/src/overlays/actors/ovl_Obj_Blockstop/overlay.cfg b/src/overlays/actors/ovl_Obj_Blockstop/overlay.cfg
deleted file mode 100644
index 0c337eb0e..000000000
--- a/src/overlays/actors/ovl_Obj_Blockstop/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Blockstop
-z_obj_blockstop.c
diff --git a/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.c b/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.c
index 9c35b0298..a4f44973f 100644
--- a/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.c
+++ b/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.c
@@ -17,7 +17,7 @@ void ObjBlockstop_Update(Actor* thisx, PlayState* play);
void ObjBlockstop_CheckForBlock(ObjBlockstop* this, PlayState* play);
void ObjBlockstop_TryPlayCutscene(ObjBlockstop* this, PlayState* play);
-const ActorInit Obj_Blockstop_InitVars = {
+ActorInit Obj_Blockstop_InitVars = {
ACTOR_OBJ_BLOCKSTOP,
ACTORCAT_PROP,
FLAGS,
@@ -33,7 +33,7 @@ void ObjBlockstop_Init(Actor* thisx, PlayState* play) {
ObjBlockstop* this = THIS;
if (Flags_GetSwitch(play, this->actor.params)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
this->actionFunc = ObjBlockstop_CheckForBlock;
}
@@ -48,7 +48,7 @@ void ObjBlockstop_CheckForBlock(ObjBlockstop* this, PlayState* play) {
s32 params = OBJOSHIHIKI_GET_F(prop);
if (params < 3) {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
this->actionFunc = ObjBlockstop_TryPlayCutscene;
}
}
@@ -57,15 +57,15 @@ void ObjBlockstop_CheckForBlock(ObjBlockstop* this, PlayState* play) {
}
void ObjBlockstop_TryPlayCutscene(ObjBlockstop* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
+ if (CutsceneManager_IsNext(this->actor.csId)) {
Flags_SetSwitch(play, this->actor.params);
- if (ActorCutscene_GetLength(this->actor.cutscene) != -1) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ if (CutsceneManager_GetLength(this->actor.csId) != -1) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
void ObjBlockstop_Update(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.h b/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.h
index 95af6757c..15d45a90b 100644
--- a/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.h
+++ b/src/overlays/actors/ovl_Obj_Blockstop/z_obj_blockstop.h
@@ -12,6 +12,4 @@ typedef struct ObjBlockstop {
/* 0x144 */ ObjBlockstopActionFunc actionFunc;
} ObjBlockstop; // size = 0x148
-extern const ActorInit Obj_Blockstop_InitVars;
-
#endif // Z_OBJ_BLOCKSTOP_H
diff --git a/src/overlays/actors/ovl_Obj_Boat/overlay.cfg b/src/overlays/actors/ovl_Obj_Boat/overlay.cfg
deleted file mode 100644
index 8617a8228..000000000
--- a/src/overlays/actors/ovl_Obj_Boat/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Boat
-z_obj_boat.c
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 1fca2a001..43f137326 100644
--- a/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c
+++ b/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c
@@ -16,9 +16,9 @@ void ObjBoat_Destroy(Actor* thisx, PlayState* play);
void ObjBoat_Update(Actor* thisx, PlayState* play);
void ObjBoat_Draw(Actor* thisx, PlayState* play);
-void func_80B9B428(Actor* thisx, PlayState* play2);
+void ObjBoat_UpdateCutscene(Actor* thisx, PlayState* play2);
-const ActorInit Obj_Boat_InitVars = {
+ActorInit Obj_Boat_InitVars = {
ACTOR_OBJ_BOAT,
ACTORCAT_BG,
FLAGS,
@@ -37,14 +37,21 @@ static InitChainEntry sInitChain[] = {
ICHAIN_F32(uncullZoneDownward, 1000, ICHAIN_STOP),
};
-s16 func_80B9AF50(ObjBoat* this, Vec3f* arg0) {
+/**
+ * Get the next point on the path and the yaw to use to get there.
+ *
+ * @param this
+ * @param nextPoint Position of next point on path
+ * @return yaw to use (or opposite of yaw if reversing)
+ */
+s16 ObjBoat_GetNextPoint(ObjBoat* this, Vec3f* nextPoint) {
s16 yaw;
- Vec3s* temp = &this->unk_164[(s32)this->unk_15C];
+ Vec3s* curPoint = &this->points[(s32)this->curPointIndex];
- Math_Vec3s_ToVec3f(arg0, &temp[this->unk_15D]);
- yaw = Math_Vec3f_Yaw(&this->dyna.actor.world.pos, arg0);
+ Math_Vec3s_ToVec3f(nextPoint, &curPoint[this->direction]);
+ yaw = Math_Vec3f_Yaw(&this->dyna.actor.world.pos, nextPoint);
- return ((this->unk_15D > 0) ? yaw : (yaw + 0x8000));
+ return ((this->direction > 0) ? yaw : yaw + 0x8000);
}
void ObjBoat_Init(Actor* thisx, PlayState* play) {
@@ -54,20 +61,20 @@ void ObjBoat_Init(Actor* thisx, PlayState* play) {
Vec3f sp24;
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
- DynaPolyActor_Init(&this->dyna, 3);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_kaizoku_obj_Colheader_009A88);
if (thisx->params < 0) {
- this->dyna.actor.update = func_80B9B428;
+ this->dyna.actor.update = ObjBoat_UpdateCutscene;
} else {
path = &play->setupPathList[OBJBOAT_GET_PATH(thisx)];
- this->unk_163 = path->count - 1;
- this->unk_164 = Lib_SegmentedToVirtual(path->points);
- this->unk_15D = 1;
- this->dyna.actor.world.pos.x = this->unk_164[this->unk_15C].x;
- this->dyna.actor.world.pos.z = this->unk_164[this->unk_15C].z;
- this->dyna.actor.shape.rot.y = func_80B9AF50(this, &sp24);
+ this->maxPointIndex = path->count - 1;
+ this->points = Lib_SegmentedToVirtual(path->points);
+ this->direction = 1;
+ this->dyna.actor.world.pos.x = this->points[this->curPointIndex].x;
+ this->dyna.actor.world.pos.z = this->points[this->curPointIndex].z;
+ this->dyna.actor.shape.rot.y = ObjBoat_GetNextPoint(this, &sp24);
this->dyna.actor.world.rot.y = this->dyna.actor.shape.rot.y;
- this->unk_15D = -this->unk_15D;
+ this->direction = -this->direction;
}
}
@@ -77,105 +84,114 @@ void ObjBoat_Destroy(Actor* thisx, PlayState* play) {
DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
}
-void func_80B9B124(ObjBoat* this) {
- this->unk_160 += 1000;
- this->dyna.actor.world.pos.y = Math_SinS(this->unk_160) + this->dyna.actor.home.pos.y;
- this->dyna.actor.shape.rot.x = Math_SinS(this->unk_160) * 100.0f;
- this->dyna.actor.shape.rot.z = Math_SinS(this->unk_160 * 2) * 50.0f;
+void ObjBoat_SetRotations(ObjBoat* this) {
+ this->angle += 0x3E8;
+ this->dyna.actor.world.pos.y = Math_SinS(this->angle) + this->dyna.actor.home.pos.y;
+ this->dyna.actor.shape.rot.x = Math_SinS(this->angle) * 100.0f;
+ this->dyna.actor.shape.rot.z = Math_SinS(this->angle * 2) * 50.0f;
}
void ObjBoat_Update(Actor* thisx, PlayState* play) {
s32 pad;
ObjBoat* this = THIS;
Player* player = GET_PLAYER(play);
- s32 temp = DynaPolyActor_IsInRidingMovingState(&this->dyna);
- f32 sp3C = 0.0f;
- s16 sp3A = this->dyna.actor.shape.rot.y;
- Vec3f sp2C;
+ s32 isPlayerOnTop = DynaPolyActor_IsPlayerOnTop(&this->dyna);
+ f32 speedTarget = 0.0f;
+ s16 yawTarget = this->dyna.actor.shape.rot.y;
+ Vec3f nextPoint;
- if ((temp != 0) || ((DynaPolyActor_IsInRidingFallingState(&this->dyna)))) {
- if ((this->unk_15F == 0) && (OBJBOAT_GET_4000(thisx) || ((temp != 0) && (this->unk_15C == this->unk_15E)))) {
- this->unk_15D = -this->unk_15D;
- if (this->unk_15D > 0) {
- this->unk_15E = this->unk_163;
+ if (isPlayerOnTop || DynaPolyActor_IsActorOnTop(&this->dyna)) {
+ if ((this->timer == 0) &&
+ (OBJBOAT_GET_4000(thisx) || (isPlayerOnTop && (this->curPointIndex == this->lastPointIndex)))) {
+ this->direction = -this->direction;
+ if (this->direction > 0) {
+ this->lastPointIndex = this->maxPointIndex;
} else {
- this->unk_15E = 0;
+ this->lastPointIndex = 0;
}
- this->unk_15F = 60;
+ this->timer = 60;
}
- } else if (this->dyna.actor.speedXZ == 0.0f) {
- if (this->unk_15F != 0) {
- this->unk_15F--;
+ } else if (this->dyna.actor.speed == 0.0f) {
+ if (this->timer != 0) {
+ this->timer--;
}
}
- if (this->unk_15C != this->unk_15E) {
- sp3A = func_80B9AF50(this, &sp2C);
- if (Math_Vec3f_DistXZ(&this->dyna.actor.world.pos, &sp2C) < 200.0f) {
- this->unk_15C += this->unk_15D;
- if (this->unk_15C == this->unk_15E) {
+
+ if (this->curPointIndex != this->lastPointIndex) {
+ yawTarget = ObjBoat_GetNextPoint(this, &nextPoint);
+ if (Math_Vec3f_DistXZ(&this->dyna.actor.world.pos, &nextPoint) < 200.0f) {
+ this->curPointIndex += this->direction;
+ if (this->curPointIndex == this->lastPointIndex) {
if (OBJBOAT_GET_4000(thisx)) {
- this->unk_15C = 0;
- } else if (this->dyna.actor.speedXZ == 0.0f) {
- this->unk_15C = 0;
- this->unk_15D = -1;
+ this->curPointIndex = 0;
+ } else if (this->dyna.actor.speed == 0.0f) {
+ this->curPointIndex = 0;
+ this->direction = -1;
}
}
} else {
- sp3C = this->unk_15D * (OBJBOAT_GET_4000(thisx) ? 5.0f : 3.0f);
+ speedTarget = this->direction * (OBJBOAT_GET_4000(thisx) ? 5.0f : 3.0f);
}
}
- if (player->csMode != 0x1A) {
- Math_ScaledStepToS(&this->dyna.actor.shape.rot.y, sp3A, (s16)(s32)(fabsf(this->dyna.actor.speedXZ) * 40.0f));
+
+ if (player->csMode != PLAYER_CSMODE_26) {
+ Math_ScaledStepToS(&this->dyna.actor.shape.rot.y, yawTarget, (s32)(fabsf(this->dyna.actor.speed) * 40.0f));
this->dyna.actor.world.rot.y = this->dyna.actor.shape.rot.y;
- Math_StepToF(&this->dyna.actor.speedXZ, sp3C, 0.05f);
+ Math_StepToF(&this->dyna.actor.speed, speedTarget, 0.05f);
Actor_MoveWithGravity(&this->dyna.actor);
- if (this->dyna.actor.speedXZ != 0.0f) {
+ if (this->dyna.actor.speed != 0.0f) {
func_800B9010(&this->dyna.actor, NA_SE_EV_PIRATE_SHIP - SFX_FLAG);
}
}
- func_80B9B124(this);
+ ObjBoat_SetRotations(this);
}
-void func_80B9B428(Actor* thisx, PlayState* play2) {
+// Update used in cutscenes
+void ObjBoat_UpdateCutscene(Actor* thisx, PlayState* play2) {
PlayState* play = play2;
ObjBoat* this = THIS;
- if (Cutscene_CheckActorAction(play, 511)) {
- CsCmdActorAction* actionIndex = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 511)];
- if (this->unk_15F != actionIndex->action) {
- this->dyna.actor.shape.rot.x = actionIndex->urot.x;
- if (actionIndex->action != 1) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_511)) {
+ CsCmdActorCue* cue = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_511)];
+
+ 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)];
- if (actionIndex->action == 3) {
+ if (cue->id == 3) {
path = &play->setupPathList[path->unk1];
}
- this->unk_163 = path->count;
- this->unk_164 = Lib_SegmentedToVirtual(path->points);
- Math_Vec3s_ToVec3f(&this->dyna.actor.world.pos, this->unk_164);
- this->dyna.actor.speedXZ = actionIndex->urot.z * (45.0f / 0x2000);
- this->unk_164++;
- this->unk_15C = 1;
- }
- this->unk_15F = actionIndex->action;
- } else {
- if (actionIndex->action != 1) {
- Vec3f vec;
- f32 step;
- Math_Vec3s_ToVec3f(&vec, this->unk_164);
- step = Math_Vec3f_StepTo(&this->dyna.actor.world.pos, &vec, this->dyna.actor.speedXZ);
- if ((this->unk_15C < this->unk_163) && (step < this->dyna.actor.speedXZ)) {
- this->unk_164++;
- this->unk_15C++;
+ this->maxPointIndex = path->count;
+ this->points = Lib_SegmentedToVirtual(path->points);
+ Math_Vec3s_ToVec3f(&this->dyna.actor.world.pos, this->points);
+ this->dyna.actor.speed = cue->rot.z * (45.0f / 0x2000);
+ this->points++;
+ this->curPointIndex = 1;
+ }
+
+ this->cueId = cue->id;
+ } else {
+ if (cue->id != 1) {
+ Vec3f posTarget;
+ f32 distRemaining;
+
+ Math_Vec3s_ToVec3f(&posTarget, this->points);
+ distRemaining = Math_Vec3f_StepTo(&this->dyna.actor.world.pos, &posTarget, this->dyna.actor.speed);
+ if ((this->curPointIndex < this->maxPointIndex) && (distRemaining < this->dyna.actor.speed)) {
+ this->points++;
+ this->curPointIndex++;
}
}
- if (actionIndex->action != 3) {
- func_80B9B124(this);
- if (actionIndex->action == 2) {
+
+ if (cue->id != 3) {
+ ObjBoat_SetRotations(this);
+ if (cue->id == 2) {
func_800B9010(&this->dyna.actor, NA_SE_EV_PIRATE_SHIP - SFX_FLAG);
}
} else {
+ // Tumble in the air
this->dyna.actor.shape.rot.y += 0x7D0;
this->dyna.actor.shape.rot.x += 0x3E8;
this->dyna.actor.shape.rot.z += 0x1F4;
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 a3ed2b147..bfc7c7c2b 100644
--- a/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.h
+++ b/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.h
@@ -10,16 +10,17 @@ struct ObjBoat;
typedef struct ObjBoat {
/* 0x000 */ DynaPolyActor dyna;
- /* 0x15C */ u8 unk_15C;
- /* 0x15D */ s8 unk_15D;
- /* 0x15E */ u8 unk_15E;
- /* 0x15F */ u8 unk_15F;
- /* 0x160 */ s16 unk_160;
+ /* 0x15C */ u8 curPointIndex;
+ /* 0x15D */ s8 direction; // To follow the path
+ /* 0x15E */ u8 lastPointIndex; // max point if direction is negative, first point if forwards
+ /* 0x15F */ union {
+ u8 timer;
+ u8 cueId;
+ };
+ /* 0x160 */ s16 angle; // Angle used to set rotations
/* 0x162 */ UNK_TYPE1 pad_162;
- /* 0x163 */ u8 unk_163;
- /* 0x164 */ Vec3s* unk_164;
+ /* 0x163 */ u8 maxPointIndex; // point at the other end from 0
+ /* 0x164 */ Vec3s* points;
} ObjBoat; // size = 0x168
-extern const ActorInit Obj_Boat_InitVars;
-
#endif // Z_OBJ_BOAT_H
diff --git a/src/overlays/actors/ovl_Obj_Bombiwa/overlay.cfg b/src/overlays/actors/ovl_Obj_Bombiwa/overlay.cfg
deleted file mode 100644
index d18e4301f..000000000
--- a/src/overlays/actors/ovl_Obj_Bombiwa/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Bombiwa
-z_obj_bombiwa.c
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 27f3e13aa..84b2abc63 100644
--- a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c
+++ b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c
@@ -24,7 +24,7 @@ void func_8093A1F0(ObjBombiwa* this, PlayState* play);
void func_8093A418(Actor* thisx, PlayState* play);
void func_8093A608(Actor* thisx, PlayState* play);
-const ActorInit Obj_Bombiwa_InitVars = {
+ActorInit Obj_Bombiwa_InitVars = {
ACTOR_OBJ_BOMBIWA,
ACTORCAT_PROP,
FLAGS,
@@ -183,7 +183,7 @@ void ObjBombiwa_Init(Actor* thisx, PlayState* play) {
Collider_InitCylinder(play, &this->collider);
if (Flags_GetSwitch(play, OBJBOMBIWA_GET_7F(&this->actor))) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -350,7 +350,7 @@ void func_80939EF4(ObjBombiwa* this, PlayState* play) {
if (params == OBJBOMBIWA_100_0) {
func_80939794(this, play);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
func_80939994(play, &this->actor.world.pos);
this->actor.flags |= ACTOR_FLAG_10;
@@ -439,7 +439,7 @@ void func_8093A1F0(ObjBombiwa* this, PlayState* play) {
this->unk_201--;
if ((this->unk_200 >= 4) || (this->unk_201 <= 0)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
diff --git a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.h b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.h
index 50e0bbf92..b49a89323 100644
--- a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.h
+++ b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.h
@@ -32,6 +32,4 @@ typedef struct ObjBombiwa {
/* 0x204 */ ObjBombiwaActionFunc actionFunc;
} ObjBombiwa; // size = 0x208
-extern const ActorInit Obj_Bombiwa_InitVars;
-
#endif // Z_OBJ_BOMBIWA_H
diff --git a/src/overlays/actors/ovl_Obj_Boyo/overlay.cfg b/src/overlays/actors/ovl_Obj_Boyo/overlay.cfg
deleted file mode 100644
index c024ce5ed..000000000
--- a/src/overlays/actors/ovl_Obj_Boyo/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Boyo
-z_obj_boyo.c
diff --git a/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.c b/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.c
index 79da4f332..e5e53000a 100644
--- a/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.c
+++ b/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.c
@@ -1,13 +1,4 @@
-/*
- * File: z_obj_boyo.c
- * Overlay: ovl_Obj_Boyo
- * Description: Unused Bumper
- */
-
#include "z_obj_boyo.h"
-#include "overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.h"
-#include "overlays/actors/ovl_En_Bom/z_en_bom.h"
-#include "objects/object_boyo/object_boyo.h"
#define FLAGS (ACTOR_FLAG_10)
@@ -18,6 +9,7 @@ void ObjBoyo_Destroy(Actor* thisx, PlayState* play2);
void ObjBoyo_Update(Actor* thisx, PlayState* play2);
void ObjBoyo_Draw(Actor* thisx, PlayState* play);
+/*
const ActorInit Obj_Boyo_InitVars = {
ACTOR_OBJ_BOYO,
ACTORCAT_PROP,
@@ -27,158 +19,22 @@ const ActorInit Obj_Boyo_InitVars = {
(ActorFunc)ObjBoyo_Init,
(ActorFunc)ObjBoyo_Destroy,
(ActorFunc)ObjBoyo_Update,
- (ActorFunc)ObjBoyo_Draw,
+ (ActorFunc)ObjBoyo_Draw
};
+*/
-static ColliderCylinderInit sCylinderInit = {
- {
- COLTYPE_NONE,
- AT_NONE,
- AC_ON | AC_HARD | AC_TYPE_PLAYER,
- OC1_ON | OC1_TYPE_ALL,
- OC2_TYPE_2,
- COLSHAPE_CYLINDER,
- },
- {
- ELEMTYPE_UNK0,
- { 0x00000000, 0x00, 0x00 },
- { 0x01CBFFBE, 0x00, 0x00 },
- TOUCH_NONE | TOUCH_SFX_NORMAL,
- BUMP_ON,
- OCELEM_ON,
- },
- { 60, 140, 0, { 0, 0, 0 } },
-};
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Boyo/ObjBoyo_Init.s")
-static InitChainEntry sInitChain[] = {
- ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneScale, 300, ICHAIN_CONTINUE),
- ICHAIN_F32(uncullZoneDownward, 300, ICHAIN_CONTINUE),
- ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
-};
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Boyo/ObjBoyo_Destroy.s")
-void ObjBoyo_Init(Actor* thisx, PlayState* play) {
- ObjBoyo* this = THIS;
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Boyo/func_809A5DC0.s")
- Actor_ProcessInitChain(&this->actor, sInitChain);
- Collider_InitCylinder(play, &this->collider);
- Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
- Collider_UpdateCylinder(&this->actor, &this->collider);
- this->actor.colChkInfo.mass = MASS_IMMOVABLE;
- this->unk_190 = Lib_SegmentedToVirtual(object_boyo_Matanimheader_000E88);
-}
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Boyo/func_809A5DE0.s")
-void ObjBoyo_Destroy(Actor* thisx, PlayState* play2) {
- PlayState* play = play2;
- ObjBoyo* this = THIS;
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Boyo/func_809A5E14.s")
- Collider_DestroyCylinder(play, &this->collider);
-}
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Boyo/func_809A5E24.s")
-void ObjBoyo_UpdatePlayerBumpValues(ObjBoyo* this, Player* target) {
- target->unk_B80 = 30.0f;
- target->unk_B84 = this->actor.yawTowardsPlayer;
-}
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Boyo/ObjBoyo_Update.s")
-void ObjBoyo_UpdatePirateBumpValues(ObjBoyo* src, EnKaizoku* target) {
- target->unk_2F0 = 30.0f;
- target->unk_2F4 = Actor_YawBetweenActors(&src->actor, &target->actor);
-}
-
-void ObjBoyo_UpdateBombBumpValues(ObjBoyo* src, EnBom* target) {
- target->timer = 0;
-}
-
-BumperCollideInfo sBumperCollideInfo[] = {
- { ACTOR_PLAYER, (BumperCollideActorFunc)ObjBoyo_UpdatePlayerBumpValues },
- { ACTOR_EN_KAIZOKU, (BumperCollideActorFunc)ObjBoyo_UpdatePirateBumpValues },
- { ACTOR_EN_BOM, (BumperCollideActorFunc)ObjBoyo_UpdateBombBumpValues },
-};
-
-Actor* ObjBoyo_GetCollidedActor(ObjBoyo* this, PlayState* play, s32* num) {
- Actor* collideActor;
- BumperCollideInfo* collideInfo;
- s32 i;
-
- if (this->collider.base.ocFlags2 & OC2_HIT_PLAYER) {
- *num = 0;
- return &GET_PLAYER(play)->actor;
- }
-
- if (this->collider.base.ocFlags1 & OC2_UNK1) {
- for (collideActor = this->collider.base.oc, collideInfo = &sBumperCollideInfo[1], i = 1; i < 3;
- collideInfo++, i++) {
- if (collideInfo->id == collideActor->id) {
- *num = i;
- return collideActor;
- }
- }
- }
-
- return NULL;
-}
-
-void ObjBoyo_Update(Actor* thisx, PlayState* play2) {
- PlayState* play = play2;
- ObjBoyo* this = THIS;
- Actor* target;
- s32 num;
-
- target = ObjBoyo_GetCollidedActor(this, play, &num);
-
- if (target != NULL) {
- sBumperCollideInfo[num].actorCollideFunc(this, (void*)target);
- this->unk_194 = 100;
- this->unk_196 = 3;
- this->unk_198 = 0.01f;
- this->unk_19C = this->unk_1A0 = 0.03f;
- this->unk_1A4 = 0x3F40;
- this->unk_1A6 = 2000;
- this->unk_1A8 = 0;
- this->unk_1AA = 0x2DF7;
- this->unk_1AC = 600;
- }
-
- if (this->unk_194 > 0) {
- this->unk_194 -= this->unk_196;
- this->unk_1AA += this->unk_1AC;
- this->unk_1A8 += this->unk_1AA;
-
- this->actor.scale.x = this->actor.scale.z =
- (Math_CosS(this->unk_1A8 + this->unk_1A4) * this->unk_194 * this->unk_19C * this->unk_198) + 0.1f;
- this->actor.scale.y =
- (Math_CosS(this->unk_1A8 + this->unk_1A6) * this->unk_194 * this->unk_1A0 * this->unk_198) + 0.1f;
- } else {
- Actor_SetScale(&this->actor, 0.1f);
-
- if (this->collider.base.acFlags & AC_HIT) {
- this->unk_194 = 30;
- this->unk_196 = 2;
- this->unk_198 = 0.033333335f;
- this->unk_19C = 0.012f;
- this->unk_1A0 = 0.006f;
- this->unk_1A4 = 0x3F40;
- this->unk_1A6 = 2000;
- this->unk_1A8 = 0;
- this->unk_1AA = 15000;
- this->unk_1AC = 1600;
- }
- }
-
- this->collider.base.acFlags &= ~AC_HIT;
- this->collider.base.ocFlags1 &= ~OC1_HIT;
- this->collider.base.ocFlags2 &= ~OC2_HIT_PLAYER;
-
- CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
-
- if (thisx->xzDistToPlayer < 2000.0f) {
- CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
- }
-}
-
-void ObjBoyo_Draw(Actor* thisx, PlayState* play) {
- ObjBoyo* this = THIS;
-
- AnimatedMat_Draw(play, this->unk_190);
- Gfx_DrawDListOpa(play, object_boyo_DL_000300);
-}
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Boyo/ObjBoyo_Draw.s")
diff --git a/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.h b/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.h
index 69e188530..feb95dcd1 100644
--- a/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.h
+++ b/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.h
@@ -5,29 +5,9 @@
struct ObjBoyo;
-typedef void (*BumperCollideActorFunc)(struct ObjBoyo*, void*);
-
-typedef struct {
- /* 0x0 */ s16 id;
- /* 0x4 */ BumperCollideActorFunc actorCollideFunc;
-} BumperCollideInfo; // size = 0x8
-
typedef struct ObjBoyo {
/* 0x000 */ Actor actor;
- /* 0x144 */ ColliderCylinder collider;
- /* 0x190 */ AnimatedMaterial* unk_190;
- /* 0x194 */ s16 unk_194;
- /* 0x196 */ s16 unk_196;
- /* 0x198 */ f32 unk_198;
- /* 0x19C */ f32 unk_19C;
- /* 0x1A0 */ f32 unk_1A0;
- /* 0x1A4 */ s16 unk_1A4;
- /* 0x1A6 */ s16 unk_1A6;
- /* 0x1A8 */ s16 unk_1A8;
- /* 0x1AA */ s16 unk_1AA;
- /* 0x1AC */ s16 unk_1AC;
+ /* 0x144 */ char unk_144[0x6C];
} ObjBoyo; // size = 0x1B0
-extern const ActorInit Obj_Boyo_InitVars;
-
#endif // Z_OBJ_BOYO_H
diff --git a/src/overlays/actors/ovl_Obj_Chan/overlay.cfg b/src/overlays/actors/ovl_Obj_Chan/overlay.cfg
deleted file mode 100644
index 6480f28ff..000000000
--- a/src/overlays/actors/ovl_Obj_Chan/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Chan
-z_obj_chan.c
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 d387436be..66c927f1d 100644
--- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c
+++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c
@@ -28,7 +28,7 @@ void ObjChan_Draw(Actor* thisx, PlayState* play);
void ObjChan_ChandelierAction(ObjChan* this2, PlayState* play);
void ObjChan_PotAction(ObjChan* this, PlayState* play);
-const ActorInit Obj_Chan_InitVars = {
+ActorInit Obj_Chan_InitVars = {
ACTOR_OBJ_CHAN,
ACTORCAT_BG,
FLAGS,
@@ -83,7 +83,7 @@ void ObjChan_Init(Actor* thisx, PlayState* play) {
if (OBJCHAN_SUBTYPE(&this->actor) == OBJCHAN_SUBTYPE_CHANDELIER) {
if (sObjChanLoaded) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
this->actor.room = -1;
@@ -92,7 +92,7 @@ void ObjChan_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sInitChain);
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, &this->actor, &sObjChanCylinderInit);
- SubS_FillCutscenesList(&this->actor, this->cutscenes, ARRAY_COUNT(this->cutscenes));
+ SubS_FillCutscenesList(&this->actor, this->csIdList, ARRAY_COUNT(this->csIdList));
switch (OBJCHAN_SUBTYPE(&this->actor)) {
case OBJCHAN_SUBTYPE_CHANDELIER:
this->rotation = this->actor.shape.rot.y;
@@ -119,7 +119,7 @@ u32 func_80BB9A1C(ObjChan* this, f32 arg1) {
sp20 = Math_SinS(this->unk1D4) * this->unk1D0;
temp_f6 = (Math_CosS(this->unk1D4) * 0.03834952f * this->unk1D0) + arg1;
if (temp_f6 != 0.0f) {
- this->unk1D4 = RADF_TO_BINANG(func_80086B30(sp20 * 0.03834952f, temp_f6));
+ this->unk1D4 = RAD_TO_BINANG(func_80086B30(sp20 * 0.03834952f, temp_f6));
} else if (sp20 >= 0.0f) {
this->unk1D4 = 0x4000;
} else {
@@ -150,7 +150,7 @@ void ObjChan_CalculatePotPosition(Vec3f* childPosOut, Vec3s* childRotOut, Vec3f*
childRotOut->y += childAngle;
}
-//! @TODO: Possibly takes actor and recasts
+//! TODO: Possibly takes actor and recasts
void ObjChan_InitChandelier(ObjChan* this2, PlayState* play) {
ObjChan* this = this2;
s32 i;
@@ -169,22 +169,23 @@ void ObjChan_InitChandelier(ObjChan* this2, PlayState* play) {
true, &sp90)) {
this->unk1CC = this->actor.world.pos.y - this->unk1C0.y;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
for (i = 0; i < 5; i++) {
ObjChan_CalculatePotPosition(&childPos, &childRot, &this->actor.world.pos, &this->actor.shape.rot,
- (s32)(i * 360.0f / 5.0f * (65536.0f / 360.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.cutscene, this->actor.unk20, &this->actor);
+ (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.cutscene = this->actor.cutscene;
+ temp_v0->actor.csId = this->actor.csId;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -209,7 +210,7 @@ void ObjChan_InitChandelier(ObjChan* this2, PlayState* play) {
this->actionFunc = ObjChan_ChandelierAction;
}
-//! @TODO: More descriptive name than Action?
+//! TODO: More descriptive name than Action?
void ObjChan_ChandelierAction(ObjChan* this2, PlayState* play) {
ObjChan* this = this2;
ObjChan* temp;
@@ -231,13 +232,13 @@ void ObjChan_ChandelierAction(ObjChan* this2, PlayState* play) {
}
this->actor.shape.rot.z = (Math_SinS(this->unk1D4) * this->unk1D0);
if ((this->stateFlags & OBJCHAN_STATE_START_CUTSCENE) &&
- SubS_StartActorCutscene(&this->actor, this->cutscenes[0], -1, SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) {
+ SubS_StartCutscene(&this->actor, this->csIdList[0], CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) {
this->stateFlags |= OBJCHAN_STATE_CUTSCENE;
this->stateFlags &= ~OBJCHAN_STATE_START_CUTSCENE;
}
if ((this->stateFlags & OBJCHAN_STATE_CUTSCENE) && this->rotationSpeed == OBJCHAN_ROTATION_SPEED) {
this->stateFlags &= ~OBJCHAN_STATE_CUTSCENE;
- ActorCutscene_Stop(this->cutscenes[0]);
+ CutsceneManager_Stop(this->csIdList[0]);
}
Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_NEW);
Matrix_RotateXS(this->actor.shape.rot.x, MTXMODE_APPLY);
@@ -250,7 +251,7 @@ void ObjChan_ChandelierAction(ObjChan* this2, PlayState* play) {
temp = this->pots[i];
if (temp != NULL) {
ObjChan_CalculatePotPosition(&sp60, &sp58, &this->actor.world.pos, &this->actor.shape.rot,
- (s32)(i * 360.0f / 5.0f * (65536.0f / 360.0f)) + this->rotation);
+ (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;
@@ -310,14 +311,14 @@ void ObjChan_PotAction(ObjChan* this, PlayState* play) {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_EV_CHANDELIER_BROKEN);
func_80BB9A1C((ObjChan*)this->actor.parent, 40.0f);
if (this->myPotIndex == 4) {
- if (!(((void)0, gSaveContext.save.weekEventReg[0x25]) & 0x10)) {
- gSaveContext.save.weekEventReg[0x25] = ((void)0, gSaveContext.save.weekEventReg[0x25]) | 0x10;
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_37_10)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_37_10);
Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_EN_MM, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 0x8000,
- this->actor.cutscene, this->actor.unk20, NULL);
+ this->actor.csId, this->actor.halfDaysBits, NULL);
}
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
diff --git a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.h b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.h
index a3a4e6d93..0e6fbca86 100644
--- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.h
+++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.h
@@ -54,9 +54,7 @@ typedef struct ObjChan {
/* 0x1D8 */ f32 flameSize;
/* 0x1DC */ s16 rotationSpeed; // Main object only. Slowly ramps up under some circumstances. In other circumstances it's immediately set to maximum speed.
/* 0x1DE */ s16 rotation; // Increases as the chandelier spins. Don't know why they didn't use the actor's rotation variable.
- /* 0x1E0 */ s16 cutscenes[2];
+ /* 0x1E0 */ s16 csIdList[2];
} ObjChan; // size = 0x1E4
-extern const ActorInit Obj_Chan_InitVars;
-
#endif // Z_OBJ_CHAN_H
diff --git a/src/overlays/actors/ovl_Obj_Chikuwa/overlay.cfg b/src/overlays/actors/ovl_Obj_Chikuwa/overlay.cfg
deleted file mode 100644
index d2599907a..000000000
--- a/src/overlays/actors/ovl_Obj_Chikuwa/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Chikuwa
-z_obj_chikuwa.c
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 5fc5d6b31..b4b27784e 100644
--- a/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c
+++ b/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c
@@ -17,7 +17,7 @@ void ObjChikuwa_Destroy(Actor* thisx, PlayState* play);
void ObjChikuwa_Update(Actor* thisx, PlayState* play);
void ObjChikuwa_Draw(Actor* thisx, PlayState* play);
-const ActorInit Obj_Chikuwa_InitVars = {
+ActorInit Obj_Chikuwa_InitVars = {
ACTOR_OBJ_CHIKUWA,
ACTORCAT_BG,
FLAGS,
@@ -49,7 +49,7 @@ void func_809B1550(Actor* thisx, PlayState* play) {
thisx->world.pos.x = (Math_SinS(thisx->shape.rot.y) * sp18) + thisx->home.pos.x;
thisx->world.pos.z = (Math_CosS(thisx->shape.rot.y) * sp18) + thisx->home.pos.z;
} else {
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
}
}
diff --git a/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.h b/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.h
index 7ebba3021..ee5174246 100644
--- a/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.h
+++ b/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.h
@@ -34,6 +34,4 @@ typedef struct ObjChikuwa {
/* 0x9A6 */ u8 unk_9A6;
} ObjChikuwa; // size = 0x9A8
-extern const ActorInit Obj_Chikuwa_InitVars;
-
#endif // Z_OBJ_CHIKUWA_H
diff --git a/src/overlays/actors/ovl_Obj_Comb/overlay.cfg b/src/overlays/actors/ovl_Obj_Comb/overlay.cfg
deleted file mode 100644
index 69f62abc4..000000000
--- a/src/overlays/actors/ovl_Obj_Comb/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Comb
-z_obj_comb.c
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 ef1feb1a9..412bade05 100644
--- a/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c
+++ b/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c
@@ -22,7 +22,7 @@ void func_8098DEA0(ObjComb* this, PlayState* play);
void func_8098E098(ObjComb* this);
void func_8098E0B8(ObjComb* this, PlayState* play);
-const ActorInit Obj_Comb_InitVars = {
+ActorInit Obj_Comb_InitVars = {
ACTOR_OBJ_COMB,
ACTORCAT_PROP,
FLAGS,
@@ -303,10 +303,10 @@ void func_8098D99C(ObjComb* this, PlayState* play) {
temp_v0->parent = &this->actor;
if (this->actionFunc == func_8098DC60) {
temp_v0->velocity.y = 8.0f;
- temp_v0->speedXZ = 2.0f;
+ temp_v0->speed = 2.0f;
} else {
temp_v0->velocity.y = 10.0f;
- temp_v0->speedXZ = 2.0f;
+ temp_v0->speed = 2.0f;
}
this->unk_1B6 = 1;
play_sound(NA_SE_SY_TRE_BOX_APPEAR);
@@ -334,8 +334,8 @@ void ObjComb_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sInitChain);
Collider_InitJntSph(play, &this->collider);
- if ((sp2C == 1) && OBJCOMB_GET_10(&this->actor) && (gSaveContext.save.weekEventReg[83] & 2)) {
- Actor_MarkForDeath(&this->actor);
+ if ((sp2C == 1) && OBJCOMB_GET_10(&this->actor) && CHECK_WEEKEVENTREG(WEEKEVENTREG_83_02)) {
+ Actor_Kill(&this->actor);
return;
}
@@ -383,7 +383,7 @@ void func_8098DC60(ObjComb* this, PlayState* play) {
if (this->collider.elements->info.acHitInfo->toucher.dmgFlags & 0x0182C29C) {
func_8098CEAC(this, play);
func_8098DA74(this, play);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
s32 dmgFlags = this->collider.elements->info.acHitInfo->toucher.dmgFlags;
@@ -406,7 +406,7 @@ void func_8098DC60(ObjComb* this, PlayState* play) {
} else {
if (this->unk_1B8 >= 0) {
if (this->unk_1B8 == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALGOLD_ROLL);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALGOLD_ROLL);
if (Rand_ZeroOne() < 0.1f) {
this->unk_1B8 = Rand_S16Offset(40, 80);
} else {
@@ -431,15 +431,15 @@ void func_8098DE58(ObjComb* this) {
this->unk_1B4 = 100;
this->actor.terminalVelocity = -20.0f;
this->actor.gravity = -1.5f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = func_8098DEA0;
}
void func_8098DEA0(ObjComb* this, PlayState* play) {
this->unk_1B4--;
- if ((this->actor.bgCheckFlags & 1) || (this->unk_1B4 <= 0)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->unk_1B4 <= 0)) {
func_8098DA74(this, play);
- if ((this->actor.bgCheckFlags & 0x20) && (this->actor.depthInWater > 30.0f)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WATER) && (this->actor.depthInWater > 30.0f)) {
func_8098D47C(this, play);
} else {
func_8098D19C(this, play);
@@ -447,11 +447,11 @@ void func_8098DEA0(ObjComb* this, PlayState* play) {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EV_HONEYCOMB_BROKEN);
func_8098E098(this);
} else {
- if (this->actor.bgCheckFlags & 0x40) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) {
func_8098D6E0(this, play);
}
- if (this->actor.bgCheckFlags & 0x20) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER) {
this->actor.gravity = -0.5f;
this->actor.velocity.y *= 0.8f;
this->unk_1AE >>= 1;
@@ -475,7 +475,7 @@ void func_8098DEA0(ObjComb* this, PlayState* play) {
Actor_MoveWithGravity(&this->actor);
this->actor.shape.rot.x += this->unk_1AE;
this->actor.shape.rot.y += this->unk_1B0;
- Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 12.0f, 0.0f, 5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
}
}
@@ -489,13 +489,13 @@ void func_8098E098(ObjComb* this) {
void func_8098E0B8(ObjComb* this, PlayState* play) {
this->unk_1B4--;
if (this->unk_1B4 <= 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
- if ((this->unk_1B4 == 10) && (this->unk_1B6 != 0) && (this->unk_1B5 == 2) && (this->actor.cutscene >= 0)) {
- if (ActorCutscene_GetCurrentIndex() == this->actor.cutscene) {
- func_800B7298(play, &this->actor, 4);
+ if ((this->unk_1B4 == 10) && (this->unk_1B6 != 0) && (this->unk_1B5 == 2) && (this->actor.csId >= 0)) {
+ if (CutsceneManager_GetCurrentCsId() == this->actor.csId) {
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_4);
}
}
}
@@ -518,28 +518,28 @@ void ObjComb_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
if (this->actor.update == NULL) {
- if ((this->unk_1B5 == 2) && (func_800F2138(this->actor.cutscene) == -1)) {
- ActorCutscene_Stop(this->actor.cutscene);
+ if ((this->unk_1B5 == 2) && (CutsceneManager_GetCutsceneScriptIndex(this->actor.csId) == -1)) {
+ CutsceneManager_Stop(this->actor.csId);
this->unk_1B5 = 0;
}
} else {
if (this->unk_1B5 != 0) {
Actor_SetFocus(&this->actor, 0.0f);
if (this->unk_1B5 == 1) {
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
- if (this->actor.cutscene >= 0) {
- func_800B7298(play, &this->actor, 1);
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
+ if (this->actor.csId >= 0) {
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_1);
}
if (((OBJCOMB_GET_8000(&this->actor) | OBJCOMB_GET_80(&this->actor)) == 1) &&
OBJCOMB_GET_10(&this->actor)) {
- gSaveContext.save.weekEventReg[83] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_83_02);
}
this->unk_1B5 = 2;
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
}
diff --git a/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.h b/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.h
index ed5188576..0ee61baaf 100644
--- a/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.h
+++ b/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.h
@@ -34,6 +34,4 @@ typedef struct ObjComb {
/* 0x1B8 */ s8 unk_1B8;
} ObjComb; // size = 0x1BC
-extern const ActorInit Obj_Comb_InitVars;
-
#endif // Z_OBJ_COMB_H
diff --git a/src/overlays/actors/ovl_Obj_Danpeilift/overlay.cfg b/src/overlays/actors/ovl_Obj_Danpeilift/overlay.cfg
deleted file mode 100644
index d2836d012..000000000
--- a/src/overlays/actors/ovl_Obj_Danpeilift/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Danpeilift
-z_obj_danpeilift.c
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 be3f365e3..a33bf2a43 100644
--- a/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.c
+++ b/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.c
@@ -21,7 +21,7 @@ void ObjDanpeilift_Move(ObjDanpeilift* this, PlayState* play);
void ObjDanpeilift_Teleport(ObjDanpeilift* this, PlayState* play);
void ObjDanpeilift_Wait(ObjDanpeilift* this, PlayState* play);
-const ActorInit Obj_Danpeilift_InitVars = {
+ActorInit Obj_Danpeilift_InitVars = {
ACTOR_OBJ_DANPEILIFT,
ACTORCAT_BG,
FLAGS,
@@ -54,26 +54,27 @@ void ObjDanpeilift_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.world.rot.x = 0;
this->dyna.actor.shape.rot.z = 0;
this->dyna.actor.world.rot.z = 0;
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_obj_danpeilift_Colheader_000BA0);
if (this->dyna.bgId == BG_ACTOR_MAX) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
+ return;
+ }
+
+ this->speed = OBJDANPEILIFT_GET_SPEED(thisx);
+ if (this->speed < 0.0f) {
+ this->speed = -this->speed;
+ }
+ if (this->speed < 0.01f) {
+ this->actionFunc = ObjDanpeilift_DoNothing;
} else {
- this->speed = OBJDANPEILIFT_GET_SPEED(thisx);
- if (this->speed < 0.0f) {
- this->speed = -this->speed;
- }
- if (this->speed < 0.01f) {
- this->actionFunc = ObjDanpeilift_DoNothing;
- } else {
- path = &play->setupPathList[OBJDANPEILIFT_GET_PATH(thisx)];
- this->curPoint = OBJDANPEILIFT_GET_STARTING_POINT(thisx);
- this->endPoint = path->count - 1;
- this->direction = 1;
- this->points = Lib_SegmentedToVirtual(path->points);
- ObjDanpeilift_UpdatePosition(this, this->curPoint);
- this->actionFunc = ObjDanpeilift_Move;
- }
+ path = &play->setupPathList[OBJDANPEILIFT_GET_PATH(thisx)];
+ this->curPoint = OBJDANPEILIFT_GET_STARTING_POINT(thisx);
+ this->endPoint = path->count - 1;
+ this->direction = 1;
+ this->points = Lib_SegmentedToVirtual(path->points);
+ ObjDanpeilift_UpdatePosition(this, this->curPoint);
+ this->actionFunc = ObjDanpeilift_Move;
}
}
@@ -106,15 +107,15 @@ void ObjDanpeilift_Move(ObjDanpeilift* this, PlayState* play) {
step = this->speed * 0.16f;
}
- Math_StepToF(&thisx->speedXZ, target, step);
- if ((thisx->speedXZ + 0.05f) < speed) {
- Math_Vec3f_Scale(&thisx->velocity, thisx->speedXZ / speed);
+ Math_StepToF(&thisx->speed, target, step);
+ if ((thisx->speed + 0.05f) < speed) {
+ Math_Vec3f_Scale(&thisx->velocity, thisx->speed / speed);
thisx->world.pos.x += thisx->velocity.x;
thisx->world.pos.y += thisx->velocity.y;
thisx->world.pos.z += thisx->velocity.z;
} else {
this->curPoint += this->direction;
- thisx->speedXZ *= 0.4f;
+ thisx->speed *= 0.4f;
isTeleporting = OBJDANPEILIFT_SHOULD_TELEPORT(thisx);
isPosUpdated = true;
if (((this->curPoint >= this->endPoint) && (this->direction > 0)) ||
@@ -129,7 +130,7 @@ void ObjDanpeilift_Move(ObjDanpeilift* this, PlayState* play) {
if ((this->points[0].x != endPoint->x) || (this->points[0].y != endPoint->y) ||
(this->points[0].z != endPoint->z)) {
this->actionFunc = ObjDanpeilift_Teleport;
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
isPosUpdated = false;
}
}
@@ -142,9 +143,9 @@ void ObjDanpeilift_Move(ObjDanpeilift* this, PlayState* play) {
}
void ObjDanpeilift_Teleport(ObjDanpeilift* this, PlayState* play) {
- if (!DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ if (!DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
ObjDanpeilift_UpdatePosition(this, this->curPoint);
- func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->actionFunc = ObjDanpeilift_Move;
}
}
@@ -153,7 +154,7 @@ void ObjDanpeilift_Wait(ObjDanpeilift* this, PlayState* play) {
this->waitTimer--;
if (this->waitTimer <= 0) {
this->actionFunc = ObjDanpeilift_Move;
- this->dyna.actor.speedXZ = 0.0f;
+ this->dyna.actor.speed = 0.0f;
}
}
@@ -166,23 +167,23 @@ void ObjDanpeilift_Update(Actor* thisx, PlayState* play) {
if (this->cutsceneTimer > 0) {
this->cutsceneTimer--;
if (this->cutsceneTimer == 0) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ CutsceneManager_Stop(this->dyna.actor.csId);
}
}
- if (OBJDANPEILIFT_SHOULD_REACT_TO_WEIGHT(thisx)) {
+ if (OBJDANPEILIFT_REACT_TO_PLAYER_ON_TOP(thisx)) {
f32 target;
- this->isWeightOnPrev = this->isWeightOn;
- this->isWeightOn = DynaPolyActor_IsInRidingMovingState(&this->dyna) ? 1 : 0;
- if ((this->isWeightOn != this->isWeightOnPrev) && (this->maxHeight < 1.0f)) {
+ this->isPlayerOnTopPrev = this->isPlayerOnTop;
+ this->isPlayerOnTop = DynaPolyActor_IsPlayerOnTop(&this->dyna) ? true : false;
+ if ((this->isPlayerOnTop != this->isPlayerOnTopPrev) && (this->maxHeight < 1.0f)) {
this->cycle = -0x8000;
this->maxHeight = 6.0f;
}
this->cycle += 0xCE4;
Math_StepToF(&this->maxHeight, 0.0f, 0.12f);
- step = this->isWeightOn ? Math_CosS(fabsf(this->cycleSpeed) * 2048.0f) + 0.02f
- : Math_SinS(fabsf(this->cycleSpeed) * 2048.0f) + 0.02f;
- target = this->isWeightOn ? -8.0f : 0.0f;
+ step = this->isPlayerOnTop ? Math_CosS(fabsf(this->cycleSpeed) * 2048.0f) + 0.02f
+ : Math_SinS(fabsf(this->cycleSpeed) * 2048.0f) + 0.02f;
+ target = this->isPlayerOnTop ? -8.0f : 0.0f;
Math_StepToF(&this->cycleSpeed, target, step);
this->dyna.actor.shape.yOffset = ((Math_SinS(this->cycle) * this->maxHeight) + this->cycleSpeed) * 10.0f;
}
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 31f6b90c4..9c0d023c7 100644
--- a/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.h
+++ b/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.h
@@ -13,7 +13,7 @@ typedef void (*ObjDanpeiliftActionFunc)(struct ObjDanpeilift*, PlayState*);
#define OBJDANPEILIFT_GET_PATH(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_SHOULD_REACT_TO_WEIGHT(thisx) (((thisx)->params >> 0xE) & 1)
+#define OBJDANPEILIFT_REACT_TO_PLAYER_ON_TOP(thisx) (((thisx)->params >> 0xE) & 1)
typedef struct ObjDanpeilift {
/* 0x000 */ DynaPolyActor dyna;
@@ -23,8 +23,8 @@ typedef struct ObjDanpeilift {
/* 0x168 */ s32 curPoint;
/* 0x16C */ s32 direction;
/* 0x170 */ Vec3s* points;
- /* 0x174 */ s32 isWeightOn;
- /* 0x178 */ s32 isWeightOnPrev;
+ /* 0x174 */ s32 isPlayerOnTop;
+ /* 0x178 */ s32 isPlayerOnTopPrev;
/* 0x17C */ f32 cycleSpeed;
/* 0x180 */ f32 maxHeight;
/* 0x184 */ s16 cycle;
@@ -32,6 +32,4 @@ typedef struct ObjDanpeilift {
/* 0x188 */ s16 cutsceneTimer;
} ObjDanpeilift; // size = 0x18C
-extern const ActorInit Obj_Danpeilift_InitVars;
-
#endif // Z_OBJ_DANPEILIFT_H
diff --git a/src/overlays/actors/ovl_Obj_Demo/overlay.cfg b/src/overlays/actors/ovl_Obj_Demo/overlay.cfg
deleted file mode 100644
index feba3b348..000000000
--- a/src/overlays/actors/ovl_Obj_Demo/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Demo
-z_obj_demo.c
diff --git a/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c b/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c
index 6cc8e2d04..ee76dd9d4 100644
--- a/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c
+++ b/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c
@@ -1,7 +1,7 @@
/*
* File: z_obj_demo.c
* Overlay: ovl_Obj_Demo
- * Description:
+ * Description: Cutscene triggers when player is in range
*/
#include "z_obj_demo.h"
@@ -17,7 +17,7 @@ void func_80983678(ObjDemo* this, PlayState* play);
void func_80983704(ObjDemo* this, PlayState* play);
void func_80983634(PlayState* play);
-const ActorInit Obj_Demo_InitVars = {
+ActorInit Obj_Demo_InitVars = {
ACTOR_OBJ_DEMO,
ACTORCAT_PROP,
FLAGS,
@@ -34,7 +34,7 @@ void ObjDemo_Init(Actor* thisx, PlayState* play) {
thisx->params = OBJDEMO_GET_FF(thisx);
if ((thisx->params != OBJDEMO_FF_FF) && (Flags_GetSwitch(play, thisx->params))) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
if (thisx->shape.rot.x < 0) {
@@ -60,8 +60,8 @@ void ObjDemo_Init(Actor* thisx, PlayState* play) {
}
void func_80983634(PlayState* play) {
- if ((play->sceneId == SCENE_CASTLE) && (Audio_GetActiveSequence(SEQ_PLAYER_BGM_MAIN) == NA_BGM_IKANA_CASTLE)) {
- Audio_QueueSeqCmd(0x100100FF);
+ if ((play->sceneId == SCENE_CASTLE) && (AudioSeq_GetActiveSeqId(SEQ_PLAYER_BGM_MAIN) == NA_BGM_IKANA_CASTLE)) {
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 1);
}
}
@@ -69,37 +69,37 @@ void func_80983678(ObjDemo* this, PlayState* play) {
func_80983634(play);
if ((this->actor.xzDistToPlayer < this->xzRange) && (fabsf(this->actor.playerHeightRel) < this->yRange)) {
if (this->unk_148 == 1) {
- ActorCutscene_Stop(0x7D);
+ CutsceneManager_Stop(CS_ID_GLOBAL_DOOR);
}
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
this->actionFunc = func_80983704;
}
}
void func_80983704(ObjDemo* this, PlayState* play) {
- if ((this->unk_148 == 1) && (ActorCutscene_GetCurrentIndex() == 0x7D)) {
- ActorCutscene_Stop(0x7D);
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ if ((this->unk_148 == 1) && (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_DOOR)) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_DOOR);
+ CutsceneManager_Queue(this->actor.csId);
} else {
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
+ if (CutsceneManager_IsNext(this->actor.csId)) {
if (this->unk_148 == 1) {
- ActorCutscene_Start(this->actor.cutscene, &this->actor);
+ CutsceneManager_Start(this->actor.csId, &this->actor);
func_800E0348(play->cameraPtrs[CAM_ID_MAIN]);
} else {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
}
if (play->sceneId == SCENE_CASTLE) {
- Audio_QueueSeqCmd(NA_BGM_IKANA_CASTLE | 0x8000);
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_IKANA_CASTLE | SEQ_FLAG_ASYNC);
}
- this->actor.cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene);
- if (this->actor.cutscene == -1) {
+ this->actor.csId = CutsceneManager_GetAdditionalCsId(this->actor.csId);
+ if (this->actor.csId == CS_ID_NONE) {
if (this->actor.params != 0xFF) {
Flags_SetSwitch(play, this->actor.params);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
func_80983634(play);
}
}
@@ -109,7 +109,7 @@ void ObjDemo_Update(Actor* thisx, PlayState* play) {
ObjDemo* this = THIS;
if ((this->actor.params != 0xFF) && Flags_GetSwitch(play, this->actor.params)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
this->actionFunc(this, play);
diff --git a/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.h b/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.h
index be774bf07..065a21fe9 100644
--- a/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.h
+++ b/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.h
@@ -17,6 +17,4 @@ typedef struct ObjDemo {
/* 0x150 */ f32 yRange;
} ObjDemo; // size = 0x154
-extern const ActorInit Obj_Demo_InitVars;
-
#endif // Z_OBJ_DEMO_H
diff --git a/src/overlays/actors/ovl_Obj_Dhouse/overlay.cfg b/src/overlays/actors/ovl_Obj_Dhouse/overlay.cfg
deleted file mode 100644
index 0e58d0666..000000000
--- a/src/overlays/actors/ovl_Obj_Dhouse/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Dhouse
-z_obj_dhouse.c
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 fa92bd2e3..c942f622b 100644
--- a/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c
+++ b/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c
@@ -28,7 +28,7 @@ void func_80B139F4(ObjDhouse* this, PlayState* play);
void func_80B13C08(Actor* thisx, PlayState* play);
void func_80B13E40(Actor* thisx, PlayState* play);
-const ActorInit Obj_Dhouse_InitVars = {
+ActorInit Obj_Dhouse_InitVars = {
ACTOR_OBJ_DHOUSE,
ACTORCAT_BG,
FLAGS,
@@ -436,12 +436,12 @@ void func_80B13940(ObjDhouse* this, PlayState* play2) {
if (Flags_GetSwitch(play, OBJDHOUSE_GET_7F(&this->dyna.actor))) {
sp20 = true;
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_EXPLSION_LONG);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_EXPLSION_LONG);
}
if (sp20) {
func_80B12A88(&this->dyna.actor);
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->dyna.actor.draw = func_80B13C08;
this->dyna.actor.flags |= ACTOR_FLAG_20;
func_80B139D8(this);
diff --git a/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.h b/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.h
index 807af52f9..c03dbed7d 100644
--- a/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.h
+++ b/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.h
@@ -45,6 +45,4 @@ typedef struct ObjDhouse {
/* 0x1370 */ s16 unk_1370;
} ObjDhouse; // size = 0x1374
-extern const ActorInit Obj_Dhouse_InitVars;
-
#endif // Z_OBJ_DHOUSE_H
diff --git a/src/overlays/actors/ovl_Obj_Dinner/overlay.cfg b/src/overlays/actors/ovl_Obj_Dinner/overlay.cfg
deleted file mode 100644
index 3fc58dccd..000000000
--- a/src/overlays/actors/ovl_Obj_Dinner/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Dinner
-z_obj_dinner.c
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 4c8f38350..5a9ef2d05 100644
--- a/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c
+++ b/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c
@@ -16,7 +16,7 @@ void ObjDinner_Destroy(Actor* thisx, PlayState* play);
void ObjDinner_Update(Actor* thisx, PlayState* play);
void ObjDinner_Draw(Actor* thisx, PlayState* play);
-const ActorInit Obj_Dinner_InitVars = {
+ActorInit Obj_Dinner_InitVars = {
ACTOR_OBJ_DINNER,
ACTORCAT_PROP,
FLAGS,
@@ -31,8 +31,8 @@ const ActorInit Obj_Dinner_InitVars = {
void ObjDinner_Init(Actor* thisx, PlayState* play) {
ObjDinner* this = THIS;
- if (gSaveContext.save.isNight != true || (CURRENT_DAY == 3 && gSaveContext.save.weekEventReg[22] & 1)) {
- Actor_MarkForDeath(&this->actor);
+ if ((gSaveContext.save.isNight != true) || ((CURRENT_DAY == 3) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01))) {
+ Actor_Kill(&this->actor);
}
Actor_SetScale(&this->actor, 0.1f);
}
diff --git a/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.h b/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.h
index 8dc49ee48..a27dce28b 100644
--- a/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.h
+++ b/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.h
@@ -10,6 +10,4 @@ typedef struct ObjDinner {
/* 0x144 */ char unk_144[0x4];
} ObjDinner; // size = 0x148
-extern const ActorInit Obj_Dinner_InitVars;
-
#endif // Z_OBJ_DINNER_H
diff --git a/src/overlays/actors/ovl_Obj_Dora/overlay.cfg b/src/overlays/actors/ovl_Obj_Dora/overlay.cfg
deleted file mode 100644
index 1bb5f302a..000000000
--- a/src/overlays/actors/ovl_Obj_Dora/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Dora
-z_obj_dora.c
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 c8b9926c5..836a70ba9 100644
--- a/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c
+++ b/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c
@@ -35,7 +35,7 @@ typedef enum {
/* 0xF */ DORA_DMGEFF_LIGHT
} ObjDoraDamageEffect;
-const ActorInit Obj_Dora_InitVars = {
+ActorInit Obj_Dora_InitVars = {
ACTOR_OBJ_DORA,
ACTORCAT_NPC,
FLAGS,
@@ -274,10 +274,10 @@ void ObjDora_UpdateCollision(ObjDora* this, PlayState* play) {
case DORA_DMGEFF_STRONG:
case DORA_DMGEFF_LIGHT:
if (this->actor.colChkInfo.damageEffect == DORA_DMGEFF_LIGHT) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_DORA_S);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_DORA_S);
this->lastGongHitType = DORA_HIT_LIGHT;
} else {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_DORA_L);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_DORA_L);
this->lastGongHitType = DORA_HIT_STRONG;
}
@@ -285,10 +285,10 @@ void ObjDora_UpdateCollision(ObjDora* this, PlayState* play) {
ObjDora_SetupMoveGong(this);
if ((ObjDora_IsHalfHour(time) == true) && (this->rupeeDropTimer == 0)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
itemDrop = Item_DropCollectible(play, &this->actor.world.pos, ITEM00_RUPEE_BLUE);
itemDrop->world.rot.y = this->actor.world.rot.y;
- itemDrop->world.rot.y += (s32)(Rand_Centered() * 90.0f * (0x10000 / 360.0f));
+ itemDrop->world.rot.y += (s32)DEG_TO_BINANG_ALT3(Rand_Centered() * 90.0f);
itemDrop->velocity.y = 5.0f;
itemDrop->gravity = -1.0f;
this->rupeeDropTimer = 40;
@@ -332,20 +332,20 @@ void ObjDora_Draw(Actor* thisx, PlayState* play) {
Matrix_Push();
Matrix_RotateXS(this->gongRotation.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++, &gDoraGongDL);
+ gSPDisplayList(POLY_OPA_DISP++, &gDoraChainDL);
Matrix_Translate(position.x, position.y + gongForceX, position.z + gongForceX, MTXMODE_APPLY);
Matrix_RotateXS(this->gongRotation.z - this->gongRotation.x, MTXMODE_APPLY);
Matrix_Translate(-position.x, -position.y, -position.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++, &gDoraChainDL);
+ gSPDisplayList(POLY_OPA_DISP++, &gDoraGongDL);
Matrix_Pop();
} else {
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(POLY_OPA_DISP++, &gDoraChainDL);
gSPDisplayList(POLY_OPA_DISP++, &gDoraGongDL);
+ gSPDisplayList(POLY_OPA_DISP++, &gDoraChainDL);
}
CLOSE_DISPS(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.h b/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.h
index ece93f627..3c1b17f2a 100644
--- a/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.h
+++ b/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.h
@@ -21,6 +21,4 @@ typedef struct ObjDora {
/* 0x3AA */ s16 unk3AA; // Set but not used
} ObjDora; // size = 0x3AC
-extern const ActorInit Obj_Dora_InitVars;
-
#endif // Z_OBJ_DORA_H
diff --git a/src/overlays/actors/ovl_Obj_Dowsing/overlay.cfg b/src/overlays/actors/ovl_Obj_Dowsing/overlay.cfg
deleted file mode 100644
index e8dbfc20a..000000000
--- a/src/overlays/actors/ovl_Obj_Dowsing/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Dowsing
-z_obj_dowsing.c
diff --git a/src/overlays/actors/ovl_Obj_Dowsing/z_obj_dowsing.c b/src/overlays/actors/ovl_Obj_Dowsing/z_obj_dowsing.c
index 0c0177d2f..f1dc17968 100644
--- a/src/overlays/actors/ovl_Obj_Dowsing/z_obj_dowsing.c
+++ b/src/overlays/actors/ovl_Obj_Dowsing/z_obj_dowsing.c
@@ -17,7 +17,7 @@ void ObjDowsing_Update(Actor* thisx, PlayState* play);
s32 ObjDowsing_GetFlag(ObjDowsing* this, PlayState* play);
s32 ObjDowsing_CheckValidSpawn(ObjDowsing* this, PlayState* play);
-const ActorInit Obj_Dowsing_InitVars = {
+ActorInit Obj_Dowsing_InitVars = {
ACTOR_OBJ_DOWSING,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -46,7 +46,7 @@ s32 ObjDowsing_GetFlag(ObjDowsing* this, PlayState* play) {
s32 ObjDowsing_CheckValidSpawn(ObjDowsing* this, PlayState* play) {
if (ObjDowsing_GetFlag(this, play)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return true;
}
return false;
@@ -65,6 +65,6 @@ void ObjDowsing_Update(Actor* thisx, PlayState* play) {
ObjDowsing* this = THIS;
if (!ObjDowsing_CheckValidSpawn(this, play)) {
- func_800B8C50(thisx, play);
+ Actor_SetClosestSecretDistance(thisx, play);
}
}
diff --git a/src/overlays/actors/ovl_Obj_Dowsing/z_obj_dowsing.h b/src/overlays/actors/ovl_Obj_Dowsing/z_obj_dowsing.h
index 7b1125a28..879c99d80 100644
--- a/src/overlays/actors/ovl_Obj_Dowsing/z_obj_dowsing.h
+++ b/src/overlays/actors/ovl_Obj_Dowsing/z_obj_dowsing.h
@@ -18,6 +18,4 @@ typedef struct ObjDowsing {
/* 0x000 */ Actor actor;
} ObjDowsing; // size = 0x144
-extern const ActorInit Obj_Dowsing_InitVars;
-
#endif // Z_OBJ_DOWSING_H
diff --git a/src/overlays/actors/ovl_Obj_Driftice/overlay.cfg b/src/overlays/actors/ovl_Obj_Driftice/overlay.cfg
deleted file mode 100644
index 1b85d29a1..000000000
--- a/src/overlays/actors/ovl_Obj_Driftice/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Driftice
-z_obj_driftice.c
diff --git a/src/overlays/actors/ovl_Obj_Driftice/z_obj_driftice.c b/src/overlays/actors/ovl_Obj_Driftice/z_obj_driftice.c
index 5db059252..7d729495a 100644
--- a/src/overlays/actors/ovl_Obj_Driftice/z_obj_driftice.c
+++ b/src/overlays/actors/ovl_Obj_Driftice/z_obj_driftice.c
@@ -25,7 +25,7 @@ void func_80A67450(ObjDriftice* this, PlayState* play);
void func_80A674A8(ObjDriftice* this);
void func_80A674C4(ObjDriftice* this, PlayState* play);
-const ActorInit Obj_Driftice_InitVars = {
+ActorInit Obj_Driftice_InitVars = {
ACTOR_OBJ_DRIFTICE,
ACTORCAT_BG,
FLAGS,
@@ -358,10 +358,10 @@ void func_80A671E0(ObjDriftice* this, PlayState* play) {
phi_f12 = this->unk_23C * 0.13f;
}
- Math_StepToF(&this->dyna.actor.speedXZ, phi_f0, phi_f12);
+ Math_StepToF(&this->dyna.actor.speed, phi_f0, phi_f12);
- if ((this->dyna.actor.speedXZ + 0.05f) < sp3C) {
- Math_Vec3f_Scale(&this->dyna.actor.velocity, this->dyna.actor.speedXZ / sp3C);
+ if ((this->dyna.actor.speed + 0.05f) < sp3C) {
+ Math_Vec3f_Scale(&this->dyna.actor.velocity, this->dyna.actor.speed / sp3C);
this->dyna.actor.world.pos.x += this->dyna.actor.velocity.x;
this->dyna.actor.world.pos.y += this->dyna.actor.velocity.y;
this->dyna.actor.world.pos.z += this->dyna.actor.velocity.z;
@@ -371,7 +371,7 @@ void func_80A671E0(ObjDriftice* this, PlayState* play) {
if (1) {}
- this->dyna.actor.speedXZ *= 0.5f;
+ this->dyna.actor.speed *= 0.5f;
if (((this->unk_164 >= this->unk_160) && (this->unk_168 > 0)) ||
((this->unk_164 <= 0) && (this->unk_168 < 0))) {
if (!OBJDRIFTICE_GET_1000(&this->dyna.actor)) {
@@ -389,7 +389,7 @@ void func_80A671E0(ObjDriftice* this, PlayState* play) {
if ((this->unk_16C[0].x != points->x) || (this->unk_16C[0].y != points->y) ||
(this->unk_16C[0].z != points->z)) {
func_80A6743C(this);
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
sp30 = false;
}
}
@@ -408,7 +408,7 @@ void func_80A6743C(ObjDriftice* this) {
void func_80A67450(ObjDriftice* this, PlayState* play) {
if (this->unk_248 < 0) {
func_80A66570(this, this->unk_164);
- func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
func_80A671CC(this);
}
}
@@ -421,7 +421,7 @@ void func_80A674A8(ObjDriftice* this) {
void func_80A674C4(ObjDriftice* this, PlayState* play) {
this->unk_24C--;
if (this->unk_24C <= 0) {
- this->dyna.actor.speedXZ = 0.0f;
+ this->dyna.actor.speed = 0.0f;
func_80A671CC(this);
}
}
@@ -429,7 +429,7 @@ void func_80A674C4(ObjDriftice* this, PlayState* play) {
void ObjDriftice_Update(Actor* thisx, PlayState* play) {
ObjDriftice* this = THIS;
- if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
if (this->unk_248 < 0) {
this->unk_248 = 1;
} else {
diff --git a/src/overlays/actors/ovl_Obj_Driftice/z_obj_driftice.h b/src/overlays/actors/ovl_Obj_Driftice/z_obj_driftice.h
index e2f37350a..19627c3df 100644
--- a/src/overlays/actors/ovl_Obj_Driftice/z_obj_driftice.h
+++ b/src/overlays/actors/ovl_Obj_Driftice/z_obj_driftice.h
@@ -56,6 +56,4 @@ typedef struct ObjDriftice {
/* 0x24C */ s32 unk_24C;
} ObjDriftice; // size = 0x250
-extern const ActorInit Obj_Driftice_InitVars;
-
#endif // Z_OBJ_DRIFTICE_H
diff --git a/src/overlays/actors/ovl_Obj_Ending/overlay.cfg b/src/overlays/actors/ovl_Obj_Ending/overlay.cfg
deleted file mode 100644
index 4930e5226..000000000
--- a/src/overlays/actors/ovl_Obj_Ending/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Ending
-z_obj_ending.c
diff --git a/src/overlays/actors/ovl_Obj_Ending/z_obj_ending.c b/src/overlays/actors/ovl_Obj_Ending/z_obj_ending.c
index d2da273b5..fd2bf4c02 100644
--- a/src/overlays/actors/ovl_Obj_Ending/z_obj_ending.c
+++ b/src/overlays/actors/ovl_Obj_Ending/z_obj_ending.c
@@ -15,7 +15,7 @@ void ObjEnding_Init(Actor* thisx, PlayState* play);
void ObjEnding_Update(Actor* thisx, PlayState* play);
void ObjEnding_Draw(Actor* thisx, PlayState* play);
-const ActorInit Obj_Ending_InitVars = {
+ActorInit Obj_Ending_InitVars = {
ACTOR_OBJ_ENDING,
ACTORCAT_BG,
FLAGS,
diff --git a/src/overlays/actors/ovl_Obj_Ending/z_obj_ending.h b/src/overlays/actors/ovl_Obj_Ending/z_obj_ending.h
index 163134f36..dfe6a83ea 100644
--- a/src/overlays/actors/ovl_Obj_Ending/z_obj_ending.h
+++ b/src/overlays/actors/ovl_Obj_Ending/z_obj_ending.h
@@ -16,6 +16,4 @@ typedef struct ObjEnding {
/* 0x148 */ AnimatedMaterial* animMat;
} ObjEnding; // size = 0x14C
-extern const ActorInit Obj_Ending_InitVars;
-
#endif // Z_OBJ_ENDING_H
diff --git a/src/overlays/actors/ovl_Obj_Entotu/overlay.cfg b/src/overlays/actors/ovl_Obj_Entotu/overlay.cfg
deleted file mode 100644
index 55d5ebe5f..000000000
--- a/src/overlays/actors/ovl_Obj_Entotu/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Entotu
-z_obj_entotu.c
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 cd7106240..723dfcf3e 100644
--- a/src/overlays/actors/ovl_Obj_Entotu/z_obj_entotu.c
+++ b/src/overlays/actors/ovl_Obj_Entotu/z_obj_entotu.c
@@ -16,7 +16,7 @@ void ObjEntotu_Destroy(Actor* thisx, PlayState* play);
void ObjEntotu_Update(Actor* thisx, PlayState* play);
void ObjEntotu_Draw(Actor* thisx, PlayState* play);
-const ActorInit Obj_Entotu_InitVars = {
+ActorInit Obj_Entotu_InitVars = {
ACTOR_OBJ_ENTOTU,
ACTORCAT_PROP,
FLAGS,
diff --git a/src/overlays/actors/ovl_Obj_Entotu/z_obj_entotu.h b/src/overlays/actors/ovl_Obj_Entotu/z_obj_entotu.h
index a00a7fcd4..ba667b6c7 100644
--- a/src/overlays/actors/ovl_Obj_Entotu/z_obj_entotu.h
+++ b/src/overlays/actors/ovl_Obj_Entotu/z_obj_entotu.h
@@ -14,6 +14,4 @@ typedef struct ObjEntotu {
/* 0x1C6 */ s16 unk_1C6;
} ObjEntotu; // size = 0x1C8
-extern const ActorInit Obj_Entotu_InitVars;
-
#endif // Z_OBJ_ENTOTU_H
diff --git a/src/overlays/actors/ovl_Obj_Etcetera/overlay.cfg b/src/overlays/actors/ovl_Obj_Etcetera/overlay.cfg
deleted file mode 100644
index d8a239068..000000000
--- a/src/overlays/actors/ovl_Obj_Etcetera/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Etcetera
-z_obj_etcetera.c
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 f8a7d38d7..ac9184923 100644
--- a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c
+++ b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c
@@ -20,7 +20,7 @@ void ObjEtcetera_Setup(ObjEtcetera* this, PlayState* play);
void ObjEtcetera_DrawIdle(Actor* thisx, PlayState* play);
void ObjEtcetera_DrawAnimated(Actor* thisx, PlayState* play);
-const ActorInit Obj_Etcetera_InitVars = {
+ActorInit Obj_Etcetera_InitVars = {
ACTOR_OBJ_ETCETERA,
ACTORCAT_BG,
FLAGS,
@@ -135,7 +135,7 @@ void ObjEtcetera_Idle(ObjEtcetera* this, PlayState* play) {
s16 minOscillationTimer;
Player* player = GET_PLAYER(play);
- if ((player->stateFlags3 & 0x200) && (this->dyna.actor.xzDistToPlayer < 20.0f)) {
+ if ((player->stateFlags3 & PLAYER_STATE3_200) && (this->dyna.actor.xzDistToPlayer < 20.0f)) {
// Player is launching out of the Deku Flower
Animation_Change(&this->skelAnime, &gDekuFlowerBounceAnim, 1.0f, 0.0f,
Animation_GetLastFrame(&gDekuFlowerBounceAnim), ANIMMODE_ONCE, 0.0f);
@@ -146,7 +146,7 @@ void ObjEtcetera_Idle(ObjEtcetera* this, PlayState* play) {
this->bounceOscillationScale = 0.003f;
this->oscillationTimer = 30;
this->burrowFlag &= ~1;
- } else if ((player->stateFlags3 & 0x2000) && (this->dyna.actor.xzDistToPlayer < 30.0f) &&
+ } else if ((player->stateFlags3 & PLAYER_STATE3_2000) && (this->dyna.actor.xzDistToPlayer < 30.0f) &&
(this->dyna.actor.playerHeightRel > 0.0f)) {
// Player is hovering above the Deku Flower
minOscillationTimer = 10 - (s32)(this->dyna.actor.playerHeightRel * 0.05f);
@@ -154,12 +154,13 @@ void ObjEtcetera_Idle(ObjEtcetera* this, PlayState* play) {
this->oscillationTimer = minOscillationTimer;
}
} else {
- if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
if (!(this->burrowFlag & 1)) {
// Player is walking onto the Deku Flower, or falling on it from a height
this->oscillationTimer = 10;
ObjEtcetera_StartRustleAnimation(this);
- } else if ((player->actor.speedXZ > 0.1f) || ((player->unk_ABC < 0.0f) && !(player->stateFlags3 & 0x100))) {
+ } else if ((player->actor.speed > 0.1f) ||
+ ((player->unk_ABC < 0.0f) && !(player->stateFlags3 & PLAYER_STATE3_100))) {
// Player is walking on top of the Deku Flower, is at the very start of burrowing, or is at the very
// start of launching
this->oscillationTimer = 10;
@@ -186,7 +187,7 @@ void ObjEtcetera_Idle(ObjEtcetera* this, PlayState* play) {
}
void ObjEtcetera_PlayRustleAnimation(ObjEtcetera* this, PlayState* play) {
- if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
this->burrowFlag |= 1;
} else {
this->burrowFlag &= ~1;
@@ -208,11 +209,11 @@ void ObjEtcetera_PlayRustleAnimation(ObjEtcetera* this, PlayState* play) {
void ObjEtcetera_DoBounceOscillation(ObjEtcetera* this, PlayState* play) {
// In order to match, we are seemingly required to access scale.x at one point
// without using this. We can create a thisx or dyna pointer to achieve that, but
- // it's more likely they used dyna given that DynaPolyActor_IsInRidingMovingState takes a DynaPolyActor.
+ // it's more likely they used dyna given that DynaPolyActor_IsPlayerOnTop takes a DynaPolyActor.
DynaPolyActor* dyna = &this->dyna;
f32 scaleTemp;
- if (DynaPolyActor_IsInRidingMovingState(dyna)) {
+ if (DynaPolyActor_IsPlayerOnTop(dyna)) {
this->burrowFlag |= 1;
} else {
this->burrowFlag &= ~1;
@@ -259,7 +260,7 @@ void ObjEtcetera_Setup(ObjEtcetera* this, PlayState* play) {
if (Object_IsLoaded(&play->objectCtx, this->objIndex)) {
this->dyna.actor.objBankIndex = this->objIndex;
Actor_SetObjectDependency(play, &this->dyna.actor);
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
thisCollisionHeader = collisionHeaders[type];
if (thisCollisionHeader != NULL) {
CollisionHeader_GetVirtual(thisCollisionHeader, &colHeader);
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 33810ae06..1805e151a 100644
--- a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.h
+++ b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.h
@@ -33,6 +33,4 @@ typedef struct ObjEtcetera {
/* 0x280 */ ObjEtceteraActionFunc actionFunc;
} ObjEtcetera; // size = 0x284
-extern const ActorInit Obj_Etcetera_InitVars;
-
#endif // Z_OBJ_ETCETERA_H
diff --git a/src/overlays/actors/ovl_Obj_Fireshield/overlay.cfg b/src/overlays/actors/ovl_Obj_Fireshield/overlay.cfg
deleted file mode 100644
index e5006379a..000000000
--- a/src/overlays/actors/ovl_Obj_Fireshield/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Fireshield
-z_obj_fireshield.c
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 54bd7966c..f9f86501d 100644
--- a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c
+++ b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c
@@ -22,7 +22,7 @@ void func_80A4CC54(ObjFireshield* this);
void func_80A4CCBC(ObjFireshield* this);
void func_80A4CD28(ObjFireshield* this);
-const ActorInit Obj_Fireshield_InitVars = {
+ActorInit Obj_Fireshield_InitVars = {
ACTOR_OBJ_FIRESHIELD,
ACTORCAT_PROP,
FLAGS,
@@ -77,7 +77,7 @@ static InitChainEntry sInitChain[] = {
};
void func_80A4CA90(ObjFireshield* this) {
- if (this->actor.cutscene >= 0) {
+ if (this->actor.csId >= 0) {
this->actionFunc = func_80A4CABC;
} else {
this->actionFunc = func_80A4CC54;
@@ -87,17 +87,17 @@ void func_80A4CA90(ObjFireshield* this) {
void func_80A4CABC(ObjFireshield* this) {
s32 pad;
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
+ if (CutsceneManager_IsNext(this->actor.csId)) {
s32 sp18 = OBJFIRESHIELD_GET_7F(&this->actor);
s32 temp_a0 = (sp18 & ~0x1F) >> 5;
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
this->actionFunc = func_80A4CB7C;
this->unk_194 = 20;
D_80A4D884[temp_a0] |= 1 << (sp18 & 0x1F);
D_80A4D894[temp_a0] |= 1 << (sp18 & 0x1F);
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
@@ -113,7 +113,7 @@ void func_80A4CB7C(ObjFireshield* this) {
return;
}
- ActorCutscene_Stop(this->actor.cutscene);
+ CutsceneManager_Stop(this->actor.csId);
this->actionFunc = func_80A4CD28;
D_80A4D894[(sp18 & ~0x1F) >> 5] &= ~(1 << (sp18 & 0x1F));
}
diff --git a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.h b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.h
index bc01ceac4..ffe1d7a35 100644
--- a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.h
+++ b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.h
@@ -28,6 +28,4 @@ typedef struct ObjFireshield {
/* 0x1A8 */ s8 unk_1A8;
} ObjFireshield; // size = 0x1AC
-extern const ActorInit Obj_Fireshield_InitVars;
-
#endif // Z_OBJ_FIRESHIELD_H
diff --git a/src/overlays/actors/ovl_Obj_Flowerpot/overlay.cfg b/src/overlays/actors/ovl_Obj_Flowerpot/overlay.cfg
deleted file mode 100644
index f6aa9dc16..000000000
--- a/src/overlays/actors/ovl_Obj_Flowerpot/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Flowerpot
-z_obj_flowerpot.c
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 c4ebe8063..cc818c883 100644
--- a/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c
+++ b/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c
@@ -4,6 +4,7 @@
* Description: Breakable Pot With Grass
*/
+#include "prevent_bss_reordering.h"
#include "z_obj_flowerpot.h"
#include "objects/object_flowerpot/object_flowerpot.h"
@@ -31,7 +32,7 @@ s16 D_80A1DA3C;
s16 D_80A1DA3E;
s16 D_80A1DA40;
-const ActorInit Obj_Flowerpot_InitVars = {
+ActorInit Obj_Flowerpot_InitVars = {
ACTOR_OBJ_FLOWERPOT,
ACTORCAT_PROP,
FLAGS,
@@ -383,7 +384,8 @@ void func_80A1C554(ObjFlowerpot* this) {
}
void func_80A1C5E8(ObjFlowerpot* this, PlayState* play) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 18.0f, 15.0f, 0.0f, 0x45);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 18.0f, 15.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40);
}
void func_80A1C62C(ObjFlowerpot* this, PlayState* play) {
@@ -454,8 +456,8 @@ void func_80A1C838(ObjFlowerpot* this, PlayState* play) {
//! @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 collider
- func_800B8E58((Player*)this, NA_SE_PL_PULL_UP_POT);
- } else if ((this->actor.bgCheckFlags & 0x20) && (this->actor.depthInWater > 19.0f)) {
+ Player_PlaySfx((Player*)&this->actor, NA_SE_PL_PULL_UP_POT);
+ } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_WATER) && (this->actor.depthInWater > 19.0f)) {
if (!(this->unk_1EA & 2)) {
func_80A1B914(this, play);
func_80A1C328(this, play);
@@ -464,7 +466,7 @@ void func_80A1C838(ObjFlowerpot* this, PlayState* play) {
}
func_80A1BD80(this, play);
func_80A1B994(this, play);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else if ((this->collider.elements[0].info.bumperFlags & BUMP_HIT) &&
(this->collider.elements[0].info.acHitInfo->toucher.dmgFlags & 0x058BFFBC)) {
if (!(this->unk_1EA & 2)) {
@@ -475,7 +477,7 @@ void func_80A1C838(ObjFlowerpot* this, PlayState* play) {
}
func_80A1BA44(this, play);
func_80A1B994(this, play);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
if (this->collider.elements[1].info.bumperFlags & BUMP_HIT) {
if (!(this->unk_1EA & 2)) {
@@ -490,7 +492,7 @@ void func_80A1C838(ObjFlowerpot* this, PlayState* play) {
if (this->unk_1EA & 1) {
Actor_MoveWithGravity(&this->actor);
func_80A1C5E8(this, play);
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
if (this->actor.colChkInfo.mass == MASS_IMMOVABLE) {
if (DynaPoly_GetActor(&play->colCtx, this->actor.floorBgId) == NULL) {
this->actor.flags &= ~ACTOR_FLAG_10;
@@ -518,7 +520,7 @@ void func_80A1C838(ObjFlowerpot* this, PlayState* play) {
s16 temp_v0_3 = this->actor.yawTowardsPlayer - GET_PLAYER(play)->actor.world.rot.y;
if (ABS_ALT(temp_v0_3) >= 0x5556) {
- Actor_PickUp(&this->actor, play, GI_NONE, 36.0f, 30.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_NONE, 36.0f, 30.0f);
}
}
}
@@ -537,9 +539,9 @@ void func_80A1CC0C(ObjFlowerpot* this, PlayState* play) {
if (Actor_HasNoParent(&this->actor, play)) {
this->actor.room = play->roomCtx.curRoom.num;
- if (fabsf(this->actor.speedXZ) < 0.1f) {
+ if (fabsf(this->actor.speed) < 0.1f) {
func_80A1C818(this);
- func_800B8E58(GET_PLAYER(play), NA_SE_PL_PUT_DOWN_POT);
+ Player_PlaySfx(GET_PLAYER(play), NA_SE_PL_PUT_DOWN_POT);
this->collider.base.ocFlags1 &= ~OC1_TYPE_PLAYER;
} else {
Actor_MoveWithGravity(&this->actor);
@@ -601,7 +603,8 @@ void func_80A1CEF4(ObjFlowerpot* this2, PlayState* play) {
func_80A1C62C(this, play);
- if ((this->actor.bgCheckFlags & (0x8 | 0x2 | 0x1)) || sp28 || (this->unk_1E8 <= 0)) {
+ if ((this->actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH | BGCHECKFLAG_WALL)) || sp28 ||
+ (this->unk_1E8 <= 0)) {
if (!(this->unk_1EA & 2)) {
func_80A1B914(this, play);
func_80A1C0FC(this, play);
@@ -610,11 +613,11 @@ void func_80A1CEF4(ObjFlowerpot* this2, PlayState* play) {
}
func_80A1BA44(this, play);
func_80A1B994(this, play);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
- if (this->actor.bgCheckFlags & 0x40) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) {
if (!(this->unk_1EA & 2)) {
func_80A1B914(this, play);
func_80A1C328(this, play);
@@ -624,7 +627,7 @@ 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_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -653,7 +656,7 @@ void ObjFlowerpot_Update(Actor* thisx, PlayState* play2) {
func_80A1C554(this);
- if ((D_80A1D830 != play->gameplayFrames) && (play->roomCtx.curRoom.unk3 == 0)) {
+ if ((D_80A1D830 != play->gameplayFrames) && (play->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_0)) {
func_80A1B3D0();
D_80A1D830 = play->gameplayFrames;
}
@@ -678,7 +681,7 @@ void ObjFlowerpot_Draw(Actor* thisx, PlayState* play) {
}
if (!(this->unk_1EA & 2)) {
- if ((play->roomCtx.curRoom.unk3 == 0) && (this->actionFunc == func_80A1C838)) {
+ if ((play->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_0) && (this->actionFunc == func_80A1C838)) {
if ((this->actor.projectedPos.z > -150.0f) && (this->actor.projectedPos.z < 400.0f)) {
func_80A1B840(&D_80A1D838[this->unk_1EB]);
diff --git a/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.h b/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.h
index 3e803672c..ec1ec43bb 100644
--- a/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.h
+++ b/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.h
@@ -21,6 +21,4 @@ typedef struct ObjFlowerpot {
/* 0x1EC */ s8 unk_1EC;
} ObjFlowerpot; // size = 0x1F0
-extern const ActorInit Obj_Flowerpot_InitVars;
-
#endif // Z_OBJ_FLOWERPOT_H
diff --git a/src/overlays/actors/ovl_Obj_Funen/overlay.cfg b/src/overlays/actors/ovl_Obj_Funen/overlay.cfg
deleted file mode 100644
index e67ba5e19..000000000
--- a/src/overlays/actors/ovl_Obj_Funen/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Funen
-z_obj_funen.c
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 99a481577..c3d4d1398 100644
--- a/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c
+++ b/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c
@@ -14,7 +14,7 @@
void ObjFunen_Init(Actor* thisx, PlayState* play);
void ObjFunen_Draw(Actor* thisx, PlayState* play);
-const ActorInit Obj_Funen_InitVars = {
+ActorInit Obj_Funen_InitVars = {
ACTOR_OBJ_FUNEN, ACTORCAT_PROP, FLAGS,
OBJECT_FUNEN, sizeof(ObjFunen), (ActorFunc)ObjFunen_Init,
(ActorFunc)Actor_Noop, (ActorFunc)Actor_Noop, (ActorFunc)ObjFunen_Draw,
diff --git a/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.h b/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.h
index dfafc94cf..eb7ca5e2b 100644
--- a/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.h
+++ b/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.h
@@ -9,6 +9,4 @@ typedef struct ObjFunen {
/* 0x000 */ Actor actor;
} ObjFunen; // size = 0x144
-extern const ActorInit Obj_Funen_InitVars;
-
#endif // Z_OBJ_FUNEN_H
diff --git a/src/overlays/actors/ovl_Obj_Ghaka/overlay.cfg b/src/overlays/actors/ovl_Obj_Ghaka/overlay.cfg
deleted file mode 100644
index c760e169f..000000000
--- a/src/overlays/actors/ovl_Obj_Ghaka/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Ghaka
-z_obj_ghaka.c
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 343a8f61e..73aa848a2 100644
--- a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c
+++ b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c
@@ -24,7 +24,7 @@ void func_80B3C39C(ObjGhaka* this, PlayState* play);
void func_80B3C4E0(ObjGhaka* this, PlayState* play);
void func_80B3C624(ObjGhaka* this, PlayState* play);
-const ActorInit Obj_Ghaka_InitVars = {
+ActorInit Obj_Ghaka_InitVars = {
ACTOR_OBJ_GHAKA,
ACTORCAT_PROP,
FLAGS,
@@ -44,7 +44,7 @@ static InitChainEntry D_80B3C96C[] = {
};
void func_80B3C260(ObjGhaka* this) {
- if (gSaveContext.save.weekEventReg[20] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_20)) {
this->dyna.actor.world.pos.z = this->dyna.actor.home.pos.z + 100.0f;
}
this->actionFunc = func_80B3C39C;
@@ -59,12 +59,12 @@ void func_80B3C2B0(ObjGhaka* this) {
}
void func_80B3C2C4(ObjGhaka* this, PlayState* play) {
- if (!(gSaveContext.save.weekEventReg[20] & 0x20)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_20_20)) {
Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_BG_GORON_OYU, 0.0f, 25.0f, 261.0f, 0, 0, 0, 0,
- this->dyna.actor.cutscene, this->dyna.actor.unk20, 0);
+ this->dyna.actor.csId, this->dyna.actor.halfDaysBits, 0);
} else {
- Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_BG_GORON_OYU, 0.0f, 25.0f, 261.0f, 0, 0, 0, 1, -1,
- this->dyna.actor.unk20, 0);
+ Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_BG_GORON_OYU, 0.0f, 25.0f, 261.0f, 0, 0, 0, 1,
+ CS_ID_NONE, this->dyna.actor.halfDaysBits, 0);
}
}
@@ -85,11 +85,11 @@ void func_80B3C39C(ObjGhaka* this, PlayState* play) {
}
}
- if (this->dyna.pushForce < 0.0f && !(gSaveContext.save.weekEventReg[20] & 0x20) &&
+ if (this->dyna.pushForce < 0.0f && !CHECK_WEEKEVENTREG(WEEKEVENTREG_20_20) &&
player->transformation == PLAYER_FORM_GORON) {
func_80B3C2B0(this);
} else {
- player->stateFlags2 &= ~0x10;
+ player->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
}
}
@@ -136,10 +136,10 @@ void func_80B3C624(ObjGhaka* this, PlayState* play) {
this->dyna.actor.world.pos.z = this->dyna.actor.home.pos.z + this->unk_168;
if (stepTemp) {
- player->stateFlags2 &= ~0x10;
+ player->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
func_80B3C2C4(this, play);
- gSaveContext.save.weekEventReg[20] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_20_20);
func_80B3C260(this);
Audio_PlaySfxAtPos(&D_80B3C960, NA_SE_EV_BLOCK_BOUND);
} else {
@@ -154,14 +154,14 @@ void ObjGhaka_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->dyna.actor, D_80B3C96C);
Actor_SetScale(&this->dyna.actor, 0.1f);
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
CollisionHeader_GetVirtual(&object_ghaka_Colheader_003CD0, &colHeader);
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
- Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, 0x4);
+ Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
if (this->dyna.actor.floorPoly == 0) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
- if (gSaveContext.save.weekEventReg[20] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_20)) {
func_80B3C2C4(this, play);
}
func_80B3C260(this);
diff --git a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.h b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.h
index 34c71f6b8..5eb92f1e6 100644
--- a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.h
+++ b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.h
@@ -14,6 +14,4 @@ typedef struct ObjGhaka {
/* 0x168 */ s16 unk_168;
} ObjGhaka; // size = 0x16C
-extern const ActorInit Obj_Ghaka_InitVars;
-
#endif // Z_OBJ_GHAKA_H
diff --git a/src/overlays/actors/ovl_Obj_Grass/overlay.cfg b/src/overlays/actors/ovl_Obj_Grass/overlay.cfg
deleted file mode 100644
index 6aec3207d..000000000
--- a/src/overlays/actors/ovl_Obj_Grass/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Grass
-z_obj_grass.c
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 df880906e..b1924c63b 100644
--- a/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c
+++ b/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c
@@ -4,11 +4,9 @@
* 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"
-#include "prevent_bss_reordering.h"
#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20)
@@ -26,7 +24,7 @@ f32 D_809AAE10[20];
#include "overlays/ovl_Obj_Grass/ovl_Obj_Grass.c"
-const ActorInit Obj_Grass_InitVars = {
+ActorInit Obj_Grass_InitVars = {
ACTOR_OBJ_GRASS,
ACTORCAT_PROP,
FLAGS,
@@ -73,13 +71,13 @@ s32 func_809A9110(PlayState* play, Vec3f* arg1) {
SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, arg1, &sp20, &sp2C);
- if ((play->unk_187F0.z * -130.13191f) < sp20.z) {
+ if ((play->projectionMtxFDiagonal.z * -130.13191f) < sp20.z) {
if (sp2C < 1.0f) {
sp2C = 1.0f;
}
- if (((fabsf(sp20.x) - (130.13191f * play->unk_187F0.x)) < sp2C) &&
- ((fabsf(sp20.y) - (130.13191f * play->unk_187F0.y)) < sp2C)) {
+ if (((fabsf(sp20.x) - (130.13191f * play->projectionMtxFDiagonal.x)) < sp2C) &&
+ ((fabsf(sp20.y) - (130.13191f * play->projectionMtxFDiagonal.y)) < sp2C)) {
return true;
}
}
diff --git a/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.h b/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.h
index be73c70b5..fffcdad4e 100644
--- a/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.h
+++ b/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.h
@@ -43,6 +43,4 @@ typedef struct ObjGrass {
/* 0x3298 */ struct ObjGrassCarry* unk_3298[2];
} ObjGrass; // size = 0x32A0
-extern const ActorInit Obj_Grass_InitVars;
-
#endif // Z_OBJ_GRASS_H
diff --git a/src/overlays/actors/ovl_Obj_Grass_Carry/overlay.cfg b/src/overlays/actors/ovl_Obj_Grass_Carry/overlay.cfg
deleted file mode 100644
index 41ae3cfcd..000000000
--- a/src/overlays/actors/ovl_Obj_Grass_Carry/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Grass_Carry
-z_obj_grass_carry.c
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 11c8619ce..e46c5da44 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
@@ -29,7 +29,7 @@ void func_809AB6FC(ObjGrassCarry* this);
void func_809AB77C(ObjGrassCarry* this, PlayState* play);
void func_809ABB7C(Actor* this, PlayState* play);
-const ActorInit Obj_Grass_Carry_InitVars = {
+ActorInit Obj_Grass_Carry_InitVars = {
ACTOR_OBJ_GRASS_CARRY,
ACTORCAT_PROP,
FLAGS,
@@ -103,7 +103,9 @@ void func_809AAF18(ObjGrassCarry* this) {
}
void func_809AAF58(ObjGrassCarry* this, PlayState* play) {
- Actor_UpdateBgCheckInfo(play, &this->actor, 7.5f, 35.0f, 0.0f, 0xC5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 7.5f, 35.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40 |
+ UPDBGCHECKINFO_FLAG_80);
}
void func_809AAF9C(Vec3f* arg0, s16 arg1, PlayState* play) {
@@ -227,11 +229,11 @@ void func_809AB4A8(ObjGrassCarry* this, PlayState* play) {
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_XZDistanceBetweenActors(&this->actor, &player->actor);
+ 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_YawBetweenActors(&this->actor, &player->actor);
- Actor_LiftActor(&this->actor, play);
+ this->actor.yawTowardsPlayer = Actor_WorldYawTowardActor(&this->actor, &player->actor);
+ Actor_OfferCarry(&this->actor, play);
}
}
@@ -246,8 +248,8 @@ void func_809AB610(ObjGrassCarry* this, PlayState* play) {
if (Actor_HasNoParent(&this->actor, play)) {
func_809AB6FC(this);
- this->actor.velocity.x = Math_SinS(this->actor.world.rot.y) * this->actor.speedXZ;
- this->actor.velocity.z = Math_CosS(this->actor.world.rot.y) * this->actor.speedXZ;
+ this->actor.velocity.x = Math_SinS(this->actor.world.rot.y) * this->actor.speed;
+ this->actor.velocity.z = Math_CosS(this->actor.world.rot.y) * this->actor.speed;
this->actor.gravity = -0.1f;
this->actor.terminalVelocity = -17.0f;
func_809AAF18(this);
@@ -283,7 +285,8 @@ void func_809AB77C(ObjGrassCarry* this, PlayState* play) {
this->unk_19A--;
- if ((this->actor.bgCheckFlags & (1 | 2 | 8)) || temp_v0 || (this->unk_19A <= 0)) {
+ if ((this->actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH | BGCHECKFLAG_WALL)) || temp_v0 ||
+ (this->unk_19A <= 0)) {
func_809AAFE8(&this->actor.world.pos, play);
func_809AAF9C(&this->actor.world.pos, this->unk_198, play);
@@ -294,14 +297,14 @@ void func_809AB77C(ObjGrassCarry* this, PlayState* play) {
this->actor.room = this->unk_190->actor.room;
}
- if (!(this->actor.bgCheckFlags & 0x20)) {
+ if (!(this->actor.bgCheckFlags & BGCHECKFLAG_WATER)) {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_EV_PLANT_BROKEN);
}
func_809AB428(this);
return;
}
- if (this->actor.bgCheckFlags & 0x40) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) {
sp5C.y = this->actor.world.pos.y + this->actor.depthInWater;
for (phi_s0 = 0, i = 0; i < 4; i++, phi_s0 += 0x4000) {
@@ -326,7 +329,7 @@ void func_809AB77C(ObjGrassCarry* this, PlayState* play) {
D_809ABBFC = D_809ABBFC >> 1;
D_809ABC08 = D_809ABC08 >> 1;
D_809ABC04 = D_809ABC04 >> 1;
- this->actor.bgCheckFlags &= ~0x40;
+ this->actor.bgCheckFlags &= ~BGCHECKFLAG_WATER_TOUCH;
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EV_DIVE_INTO_WATER_L);
}
@@ -347,7 +350,7 @@ void ObjGrassCarry_Update(Actor* thisx, PlayState* play) {
if (this->unk_190 == NULL) {
if ((this->actionFunc != func_809AB610) && (this->actionFunc != func_809AB77C)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
}
@@ -356,5 +359,5 @@ void ObjGrassCarry_Update(Actor* thisx, PlayState* play) {
}
void func_809ABB7C(Actor* this, PlayState* play) {
- Gfx_DrawDListOpa(play, gKusaBushType1);
+ Gfx_DrawDListOpa(play, gKusaBushType1DL);
}
diff --git a/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.h b/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.h
index 0e59033fc..fa870305e 100644
--- a/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.h
+++ b/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.h
@@ -19,6 +19,4 @@ typedef struct ObjGrassCarry {
/* 0x19C */ ObjGrassCarryActionFunc actionFunc;
} ObjGrassCarry; // size = 0x1A0
-extern const ActorInit Obj_Grass_Carry_InitVars;
-
#endif // Z_OBJ_GRASS_CARRY_H
diff --git a/src/overlays/actors/ovl_Obj_Grass_Unit/overlay.cfg b/src/overlays/actors/ovl_Obj_Grass_Unit/overlay.cfg
deleted file mode 100644
index d67028b99..000000000
--- a/src/overlays/actors/ovl_Obj_Grass_Unit/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Grass_Unit
-z_obj_grass_unit.c
diff --git a/src/overlays/actors/ovl_Obj_Grass_Unit/z_obj_grass_unit.c b/src/overlays/actors/ovl_Obj_Grass_Unit/z_obj_grass_unit.c
index 125c78850..c57ed608f 100644
--- a/src/overlays/actors/ovl_Obj_Grass_Unit/z_obj_grass_unit.c
+++ b/src/overlays/actors/ovl_Obj_Grass_Unit/z_obj_grass_unit.c
@@ -13,7 +13,7 @@
void ObjGrassUnit_Init(Actor* thisx, PlayState* play);
#if 0
-const ActorInit Obj_Grass_Unit_InitVars = {
+ActorInit Obj_Grass_Unit_InitVars = {
ACTOR_OBJ_GRASS_UNIT,
ACTORCAT_BG,
FLAGS,
diff --git a/src/overlays/actors/ovl_Obj_Grass_Unit/z_obj_grass_unit.h b/src/overlays/actors/ovl_Obj_Grass_Unit/z_obj_grass_unit.h
index 113132e5e..58a8a427a 100644
--- a/src/overlays/actors/ovl_Obj_Grass_Unit/z_obj_grass_unit.h
+++ b/src/overlays/actors/ovl_Obj_Grass_Unit/z_obj_grass_unit.h
@@ -9,6 +9,4 @@ typedef struct ObjGrassUnit {
/* 0x000 */ Actor actor;
} ObjGrassUnit; // size = 0x144
-extern const ActorInit Obj_Grass_Unit_InitVars;
-
#endif // Z_OBJ_GRASS_UNIT_H
diff --git a/src/overlays/actors/ovl_Obj_Hakaisi/overlay.cfg b/src/overlays/actors/ovl_Obj_Hakaisi/overlay.cfg
deleted file mode 100644
index 5d1fb24ad..000000000
--- a/src/overlays/actors/ovl_Obj_Hakaisi/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Hakaisi
-z_obj_hakaisi.c
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 8e5a6d4a0..8b851285a 100644
--- a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c
+++ b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c
@@ -37,7 +37,7 @@ void func_80B15330(ObjHakaisi* this, PlayState* play);
void func_80B1544C(Actor* thisx, PlayState* play);
void func_80B154A0(Actor* thisx, PlayState* play);
-const ActorInit Obj_Hakaisi_InitVars = {
+ActorInit Obj_Hakaisi_InitVars = {
ACTOR_OBJ_HAKAISI,
ACTORCAT_PROP,
FLAGS,
@@ -106,27 +106,27 @@ void ObjHakaisi_Init(Actor* thisx, PlayState* play) {
return;
}
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
CollisionHeader_GetVirtual(&object_hakaisi_Colheader_002FC4, &sp7C);
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, sp7C);
this->unk_19A = 0;
this->unk_198 = 0;
this->switchFlag = OBJHAKAISI_GET_SWITCHFLAG(thisx);
- this->unk_196 = this->dyna.actor.cutscene;
+ this->csId = this->dyna.actor.csId;
if (this->switchFlag == 0xFF) {
this->switchFlag = -1;
}
if ((this->switchFlag != -1) && Flags_GetSwitch(play, this->switchFlag)) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
- Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
if (this->dyna.actor.floorPoly == NULL) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
func_800C0094(this->dyna.actor.floorPoly, this->dyna.actor.world.pos.x, this->dyna.actor.floorHeight,
@@ -192,24 +192,24 @@ void func_80B14558(ObjHakaisi* this) {
}
void func_80B1456C(ObjHakaisi* this, PlayState* play) {
- if (this->unk_196 != -1) {
- if (ActorCutscene_GetCanPlayNext(this->unk_196)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_196, &this->dyna.actor);
+ if (this->csId != CS_ID_NONE) {
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->dyna.actor);
} else {
- ActorCutscene_SetIntentToPlay(this->unk_196);
+ CutsceneManager_Queue(this->csId);
}
}
if (this->dyna.actor.colChkInfo.health < 30) {
func_80B145F4(this);
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
}
}
void func_80B145F4(ObjHakaisi* this) {
this->unk_19A = 0;
- this->dyna.actor.flags |= ACTOR_FLAG_8000000;
+ this->dyna.actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
this->dyna.actor.flags &= ~ACTOR_FLAG_1;
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_WALL_BROKEN);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WALL_BROKEN);
this->actionFunc = func_80B14648;
}
@@ -258,8 +258,8 @@ void func_80B149A8(ObjHakaisi* this) {
void func_80B149C0(ObjHakaisi* this, PlayState* play) {
if (this->unk_19A < 60) {
this->unk_19A++;
- } else if ((this->unk_196 != -1) && !ActorCutscene_GetCanPlayNext(this->unk_196)) {
- ActorCutscene_Stop(this->unk_196);
+ } else if ((this->csId != CS_ID_NONE) && !CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_Stop(this->csId);
}
}
@@ -281,7 +281,7 @@ void func_80B14B6C(ObjHakaisi* this, PlayState* play, Vec3f vec, s16 arg3) {
s16 temp_s1;
Vec3f sp6C;
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_WALL_BROKEN);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WALL_BROKEN);
for (i = 0; i < 5; i++) {
temp_s1 = Rand_Next();
@@ -403,10 +403,10 @@ void func_80B15330(ObjHakaisi* this, PlayState* play) {
this->dyna.actor.velocity.y += this->dyna.actor.gravity;
Actor_UpdatePos(&this->dyna.actor);
- if (this->dyna.actor.bgCheckFlags & 2) {
+ if (this->dyna.actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
func_80B14B6C(this, play, this->dyna.actor.world.pos, 40);
func_80B14CF8(play, this->dyna.actor.world.pos, 100, 30, 10);
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
Matrix_RotateAxisS(this->unk_19C, &this->unk_184, MTXMODE_NEW);
@@ -423,7 +423,7 @@ void func_80B1544C(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
- Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
}
void func_80B154A0(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h
index a4e5d233c..1454181dd 100644
--- a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h
+++ b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h
@@ -17,13 +17,11 @@ typedef struct ObjHakaisi {
/* 0x184 */ Vec3f unk_184;
/* 0x190 */ s32 switchFlag;
/* 0x194 */ s16 unk_194;
- /* 0x196 */ s16 unk_196;
+ /* 0x196 */ s16 csId;
/* 0x198 */ s16 unk_198;
/* 0x19A */ s16 unk_19A;
/* 0x19C */ s16 unk_19C;
/* 0x19E */ u8 unk_19E;
} ObjHakaisi; // size = 0x1A0
-extern const ActorInit Obj_Hakaisi_InitVars;
-
#endif // Z_OBJ_HAKAISI_H
diff --git a/src/overlays/actors/ovl_Obj_Hamishi/overlay.cfg b/src/overlays/actors/ovl_Obj_Hamishi/overlay.cfg
deleted file mode 100644
index 902311cdc..000000000
--- a/src/overlays/actors/ovl_Obj_Hamishi/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Hamishi
-z_obj_hamishi.c
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 11baddb38..aef42693b 100644
--- a/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c
+++ b/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c
@@ -16,7 +16,7 @@ void ObjHamishi_Destroy(Actor* thisx, PlayState* play2);
void ObjHamishi_Update(Actor* thisx, PlayState* play);
void ObjHamishi_Draw(Actor* thisx, PlayState* play);
-const ActorInit Obj_Hamishi_InitVars = {
+ActorInit Obj_Hamishi_InitVars = {
ACTOR_OBJ_HAMISHI,
ACTORCAT_PROP,
FLAGS,
@@ -165,7 +165,7 @@ void ObjHamishi_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sInitChain);
- if (play->csCtx.state != 0) {
+ if (play->csCtx.state != CS_STATE_IDLE) {
this->actor.uncullZoneForward += 1000.0f;
}
@@ -181,7 +181,7 @@ void ObjHamishi_Init(Actor* thisx, PlayState* play) {
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 2.3f);
if (Flags_GetSwitch(play, OBJHAMISHI_GET_SWITCHFLAG(&this->actor))) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -233,7 +233,7 @@ void ObjHamishi_Update(Actor* thisx, PlayState* play) {
func_809A10F4(this, play);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EV_WALL_BROKEN);
Flags_SetSwitch(play, OBJHAMISHI_GET_SWITCHFLAG(&this->actor));
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
}
diff --git a/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.h b/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.h
index da838d480..962a59612 100644
--- a/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.h
+++ b/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.h
@@ -21,6 +21,4 @@ typedef struct ObjHamishi {
/* 0x1A2 */ u8 unk_1A2;
} ObjHamishi; // size = 0x1A4
-extern const ActorInit Obj_Hamishi_InitVars;
-
#endif // Z_OBJ_HAMISHI_H
diff --git a/src/overlays/actors/ovl_Obj_Hana/overlay.cfg b/src/overlays/actors/ovl_Obj_Hana/overlay.cfg
deleted file mode 100644
index 8d04d632c..000000000
--- a/src/overlays/actors/ovl_Obj_Hana/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Hana
-z_obj_hana.c
diff --git a/src/overlays/actors/ovl_Obj_Hana/z_obj_hana.c b/src/overlays/actors/ovl_Obj_Hana/z_obj_hana.c
index 6eb0b0adc..97fbbec3d 100644
--- a/src/overlays/actors/ovl_Obj_Hana/z_obj_hana.c
+++ b/src/overlays/actors/ovl_Obj_Hana/z_obj_hana.c
@@ -16,7 +16,7 @@ void ObjHana_Destroy(Actor* thisx, PlayState* play);
void ObjHana_Update(Actor* thisx, PlayState* play);
void ObjHana_Draw(Actor* thisx, PlayState* play);
-const ActorInit Obj_Hana_InitVars = {
+ActorInit Obj_Hana_InitVars = {
ACTOR_OBJ_HANA,
ACTORCAT_PROP,
FLAGS,
diff --git a/src/overlays/actors/ovl_Obj_Hana/z_obj_hana.h b/src/overlays/actors/ovl_Obj_Hana/z_obj_hana.h
index f885850cd..dd8c4676c 100644
--- a/src/overlays/actors/ovl_Obj_Hana/z_obj_hana.h
+++ b/src/overlays/actors/ovl_Obj_Hana/z_obj_hana.h
@@ -9,6 +9,4 @@ typedef struct ObjHana {
/* 0x000 */ Actor actor;
} ObjHana; // size = 0x144
-extern const ActorInit Obj_Hana_InitVars;
-
#endif // Z_OBJ_HANA_H
diff --git a/src/overlays/actors/ovl_Obj_Hariko/overlay.cfg b/src/overlays/actors/ovl_Obj_Hariko/overlay.cfg
deleted file mode 100644
index 98c352eb4..000000000
--- a/src/overlays/actors/ovl_Obj_Hariko/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Hariko
-z_obj_hariko.c
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 467dfa8b8..1c33af7fe 100644
--- a/src/overlays/actors/ovl_Obj_Hariko/z_obj_hariko.c
+++ b/src/overlays/actors/ovl_Obj_Hariko/z_obj_hariko.c
@@ -23,7 +23,7 @@ void ObjHariko_SetupBobHead(ObjHariko* this);
void ObjHariko_BobHead(ObjHariko* this, PlayState* play);
void ObjHariko_CheckForQuakes(ObjHariko* this);
-const ActorInit Obj_Hariko_InitVars = {
+ActorInit Obj_Hariko_InitVars = {
ACTOR_OBJ_HARIKO,
ACTORCAT_PROP,
FLAGS,
diff --git a/src/overlays/actors/ovl_Obj_Hariko/z_obj_hariko.h b/src/overlays/actors/ovl_Obj_Hariko/z_obj_hariko.h
index 5d9a8e39b..88a51a83f 100644
--- a/src/overlays/actors/ovl_Obj_Hariko/z_obj_hariko.h
+++ b/src/overlays/actors/ovl_Obj_Hariko/z_obj_hariko.h
@@ -16,6 +16,4 @@ typedef struct ObjHariko {
/* 0x154 */ s16 unk154; // Set but not used
} ObjHariko; // size = 0x158
-extern const ActorInit Obj_Hariko_InitVars;
-
#endif // Z_OBJ_HARIKO_H
diff --git a/src/overlays/actors/ovl_Obj_Hgdoor/overlay.cfg b/src/overlays/actors/ovl_Obj_Hgdoor/overlay.cfg
deleted file mode 100644
index 4bd3103fb..000000000
--- a/src/overlays/actors/ovl_Obj_Hgdoor/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Hgdoor
-z_obj_hgdoor.c
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 ae528e3ea..7b0351e78 100644
--- a/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c
+++ b/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c
@@ -26,7 +26,7 @@ void ObjHgdoor_SetupStopCs(ObjHgdoor* this);
void ObjHgdoor_StopCs(ObjHgdoor* this, PlayState* play);
s32 ObjHgdoor_Rotate(ObjHgdoor* this, PlayState* play);
-const ActorInit Obj_Hgdoor_InitVars = {
+ActorInit Obj_Hgdoor_InitVars = {
ACTOR_OBJ_HGDOOR,
ACTORCAT_PROP,
FLAGS,
@@ -70,7 +70,7 @@ void ObjHgdoor_Init(Actor* thisx, PlayState* play) {
CollisionHeader* header = NULL;
Actor_SetScale(&this->dyna.actor, 0.1f);
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
if (OBJHGDOOR_IS_RIGHT_DOOR(&this->dyna.actor)) {
CollisionHeader_GetVirtual(&object_hgdoor_Colheader_001D10, &header);
} else {
@@ -79,7 +79,7 @@ void ObjHgdoor_Init(Actor* thisx, PlayState* play) {
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, header);
this->rotation = 0;
this->timer = 0;
- this->cutscene = this->dyna.actor.cutscene;
+ this->csId = this->dyna.actor.csId;
ObjHgdoor_SetupIdle(this);
}
@@ -94,7 +94,7 @@ void ObjHgdoor_SetupIdle(ObjHgdoor* this) {
}
void ObjHgdoor_Idle(ObjHgdoor* this, PlayState* play) {
- if (!(gSaveContext.save.weekEventReg[75] & 0x20) && !(gSaveContext.save.weekEventReg[52] & 0x20) &&
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE) &&
(this->dyna.actor.xzDistToPlayer < 100.0f) && (this->dyna.actor.playerHeightRel < 40.0f) &&
OBJHGDOOR_IS_RIGHT_DOOR(&this->dyna.actor)) {
ObjHgdoor_SetChild(this, play);
@@ -108,33 +108,33 @@ void ObjHgdoor_SetupCutscene(ObjHgdoor* this) {
}
void ObjHgdoor_PlayCutscene(ObjHgdoor* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_Start(this->cutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_Start(this->csId, &this->dyna.actor);
ObjHgdoor_SetupCsAction(this);
ObjHgdoor_SetupCsAction((ObjHgdoor*)this->dyna.actor.child);
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- ActorCutscene_SetIntentToPlay(this->cutscene);
+ CutsceneManager_Queue(this->csId);
}
}
void ObjHgdoor_SetupCsAction(ObjHgdoor* this) {
- this->csAction = 0x63;
+ this->cueId = 99;
this->actionFunc = ObjHgdoor_HandleCsAction;
}
void ObjHgdoor_HandleCsAction(ObjHgdoor* this, PlayState* play) {
- s32 actionIndex;
+ s32 cueChannel;
- if (Cutscene_CheckActorAction(play, 483)) {
- actionIndex = Cutscene_GetActorActionIndex(play, 483);
- if (this->csAction != play->csCtx.actorActions[actionIndex]->action) {
- this->csAction = play->csCtx.actorActions[actionIndex]->action;
- switch (play->csCtx.actorActions[actionIndex]->action) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_483)) {
+ cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_483);
+ if (this->cueId != play->csCtx.actorCues[cueChannel]->id) {
+ this->cueId = play->csCtx.actorCues[cueChannel]->id;
+ switch (play->csCtx.actorCues[cueChannel]->id) {
case 1:
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_WOOD_DOOR_OPEN_SPEEDY);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WOOD_DOOR_OPEN_SPEEDY);
if ((this->dyna.actor.parent != NULL) && (this->dyna.actor.parent->id == ACTOR_EN_HG)) {
this->dyna.actor.parent->colChkInfo.health = 1;
}
@@ -149,7 +149,7 @@ void ObjHgdoor_HandleCsAction(ObjHgdoor* this, PlayState* play) {
ObjHgdoor_SetupStopCs(this);
}
} else {
- this->csAction = 0x63;
+ this->cueId = 99;
}
}
@@ -160,8 +160,8 @@ void ObjHgdoor_SetupStopCs(ObjHgdoor* this) {
void ObjHgdoor_StopCs(ObjHgdoor* this, PlayState* play) {
if (this->timer++ > 80) {
- if (!ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_Stop(this->cutscene);
+ if (!CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_Stop(this->csId);
}
}
}
diff --git a/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.h b/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.h
index 3e0af9e8c..1411a5e66 100644
--- a/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.h
+++ b/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.h
@@ -13,12 +13,10 @@ typedef void (*ObjHgdoorActionFunc)(struct ObjHgdoor*, PlayState*);
typedef struct ObjHgdoor {
/* 0x000 */ DynaPolyActor dyna;
/* 0x15C */ ObjHgdoorActionFunc actionFunc;
- /* 0x160 */ s16 cutscene;
+ /* 0x160 */ s16 csId;
/* 0x162 */ s16 rotation;
/* 0x164 */ s16 timer;
- /* 0x166 */ u16 csAction;
+ /* 0x166 */ u16 cueId;
} ObjHgdoor; // size = 0x168
-extern const ActorInit Obj_Hgdoor_InitVars;
-
#endif // Z_OBJ_HGDOOR_H
diff --git a/src/overlays/actors/ovl_Obj_HsStump/overlay.cfg b/src/overlays/actors/ovl_Obj_HsStump/overlay.cfg
deleted file mode 100644
index ddf618a65..000000000
--- a/src/overlays/actors/ovl_Obj_HsStump/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_HsStump
-z_obj_hsstump.c
diff --git a/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.c b/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.c
index 9f19241ac..ffc3558e6 100644
--- a/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.c
+++ b/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.c
@@ -21,7 +21,7 @@ void ObjHsStump_Idle(ObjHsStump* this, PlayState* play);
void ObjHsStump_SetupAppear(ObjHsStump* this, PlayState* play);
void ObjHsStump_Appear(ObjHsStump* this, PlayState* play);
-const ActorInit Obj_HsStump_InitVars = {
+ActorInit Obj_HsStump_InitVars = {
ACTOR_OBJ_HSSTUMP,
ACTORCAT_BG,
FLAGS,
@@ -45,7 +45,7 @@ void ObjHsStump_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
this->isHidden = OBJHSSTUMP_GET_ISHIDDEN(thisx);
this->switchFlag = OBJHSSTUMP_GET_SWITCHFLAG(thisx);
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_hsstump_Colheader_0011B0);
switch (this->isHidden) {
case true:
@@ -54,10 +54,15 @@ void ObjHsStump_Init(Actor* thisx, PlayState* play) {
} else {
this->dyna.actor.draw = NULL;
Actor_SetScale(&this->dyna.actor, 0.0f);
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
}
+ // fallthrough
case false:
ObjHsStump_SetupIdle(this, play);
+ break;
+
+ default:
+ break;
}
}
@@ -89,14 +94,14 @@ void ObjHsStump_Appear(ObjHsStump* this, PlayState* play) {
}
if (this->framesAppeared <= 10) {
if (this->framesAppeared == 0) {
+ s32 pad;
s32 i;
- f32 angleDeg;
s16 numDirections = 4;
Vec3f iceSmokePosOffset;
Vec3f iceSmokeVelOffset;
- s16 offsetAngle;
+ s16 iceSmokeAngle;
Vec3f iceSmokeVel;
- f32 angleBrad;
+ f32 baseAngle;
Vec3f iceSmokePos;
iceSmokePosOffset.x = 1.0f;
@@ -107,14 +112,13 @@ void ObjHsStump_Appear(ObjHsStump* this, PlayState* play) {
iceSmokeVelOffset.y = 0.5f;
iceSmokeVelOffset.z = 0.0f;
- angleDeg = (360.0f / numDirections);
- angleBrad = (s32)(angleDeg * (0x10000 / 360.0f));
+ baseAngle = (s32)DEG_TO_BINANG_ALT3(360.0f / numDirections);
for (i = 0; i < numDirections; i++) {
- offsetAngle = i * angleBrad;
- Lib_Vec3f_TranslateAndRotateY(&this->dyna.actor.world.pos, offsetAngle, &iceSmokePosOffset,
+ iceSmokeAngle = i * baseAngle;
+ Lib_Vec3f_TranslateAndRotateY(&this->dyna.actor.world.pos, iceSmokeAngle, &iceSmokePosOffset,
&iceSmokePos);
- Lib_Vec3f_TranslateAndRotateY(&gZeroVec3f, offsetAngle, &iceSmokeVelOffset, &iceSmokeVel);
+ Lib_Vec3f_TranslateAndRotateY(&gZeroVec3f, iceSmokeAngle, &iceSmokeVelOffset, &iceSmokeVel);
EffectSsIceSmoke_Spawn(play, &iceSmokePos, &iceSmokeVel, &sIceSmokeAccel, 100);
}
}
@@ -123,9 +127,9 @@ void ObjHsStump_Appear(ObjHsStump* this, PlayState* play) {
Math_SmoothStepToF(&this->dyna.actor.scale.x, 18.0f * 0.01f, 1.0f, 0.01f, 0.001f);
Actor_SetScale(&this->dyna.actor, this->dyna.actor.scale.x);
}
- if (this->dyna.actor.scale.x == 18.0f * 0.01f) {
+ if (this->dyna.actor.scale.x == (18.0f * 0.01f)) {
this->isHidden = false;
- func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
ObjHsStump_SetupIdle(this, play);
}
this->framesAppeared++;
diff --git a/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.h b/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.h
index 1f82a15b1..0f06fdfaf 100644
--- a/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.h
+++ b/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.h
@@ -20,6 +20,4 @@ typedef struct ObjHsStump {
/* 0x168 */ f32 rotFactor;
} ObjHsStump; // size = 0x16C
-extern const ActorInit Obj_HsStump_InitVars;
-
#endif // Z_OBJ_HSSTUMP_H
diff --git a/src/overlays/actors/ovl_Obj_Hsblock/overlay.cfg b/src/overlays/actors/ovl_Obj_Hsblock/overlay.cfg
deleted file mode 100644
index 19cd6470b..000000000
--- a/src/overlays/actors/ovl_Obj_Hsblock/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Hsblock
-z_obj_hsblock.c
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 3339d1440..26d89f00d 100644
--- a/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c
+++ b/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c
@@ -23,7 +23,7 @@ void func_8093E05C(ObjHsblock* this);
void func_8093E0E8(ObjHsblock* this);
void func_8093E10C(ObjHsblock* this, PlayState* play);
-const ActorInit Obj_Hsblock_InitVars = {
+ActorInit Obj_Hsblock_InitVars = {
ACTOR_OBJ_HSBLOCK,
ACTORCAT_BG,
FLAGS,
diff --git a/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.h b/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.h
index 0411cc9e4..f91926409 100644
--- a/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.h
+++ b/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.h
@@ -17,6 +17,4 @@ typedef struct ObjHsblock {
/* 0x15C */ ObjHsblockActionFunc actionFunc;
} ObjHsblock; // size = 0x160
-extern const ActorInit Obj_Hsblock_InitVars;
-
#endif // Z_OBJ_HSBLOCK_H
diff --git a/src/overlays/actors/ovl_Obj_Hugebombiwa/overlay.cfg b/src/overlays/actors/ovl_Obj_Hugebombiwa/overlay.cfg
deleted file mode 100644
index baf0417f6..000000000
--- a/src/overlays/actors/ovl_Obj_Hugebombiwa/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Hugebombiwa
-z_obj_hugebombiwa.c
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 3ad2cf5e8..e69729b92 100644
--- a/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c
+++ b/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c
@@ -28,7 +28,7 @@ void func_80A55310(ObjHugebombiwa* this);
void func_80A55564(ObjHugebombiwa* this, PlayState* play);
void func_80A55B34(Actor* thisx, PlayState* play);
-const ActorInit Obj_Hugebombiwa_InitVars = {
+ActorInit Obj_Hugebombiwa_InitVars = {
ACTOR_OBJ_HUGEBOMBIWA,
ACTORCAT_PROP,
FLAGS,
@@ -341,7 +341,7 @@ void ObjHugebombiwa_Init(Actor* thisx, PlayState* play) {
Collider_InitCylinder(play, &this->collider);
if (Flags_GetSwitch(play, ENHUGEBOMBIWA_GET_7F(&this->actor))) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -380,7 +380,7 @@ void func_80A54C04(ObjHugebombiwa* this, PlayState* play) {
}
if (func_80A54A0C(this)) {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
func_80A54CD8(this);
return;
}
@@ -407,12 +407,12 @@ void func_80A54CD8(ObjHugebombiwa* this) {
void func_80A54CEC(ObjHugebombiwa* this, PlayState* play) {
s32 pad;
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
Flags_SetSwitch(play, ENHUGEBOMBIWA_GET_7F(&this->actor));
if (!(ENHUGEBOMBIWA_GET_100(&this->actor)) &&
((play->sceneId == SCENE_17SETUGEN) || (play->sceneId == SCENE_17SETUGEN2))) {
- gSaveContext.save.weekEventReg[19] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_19_02);
}
if (!(ENHUGEBOMBIWA_GET_100(&this->actor))) {
@@ -429,7 +429,7 @@ void func_80A54CEC(ObjHugebombiwa* this, PlayState* play) {
func_80A55310(this);
}
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
@@ -523,8 +523,8 @@ void func_80A55064(ObjHugebombiwa* this, PlayState* play) {
this->unk_4B2--;
if ((this->unk_4B0 >= 20) || (this->unk_4B2 <= 0)) {
- ActorCutscene_Stop(this->actor.cutscene);
- Actor_MarkForDeath(&this->actor);
+ CutsceneManager_Stop(this->actor.csId);
+ Actor_Kill(&this->actor);
}
}
@@ -619,8 +619,8 @@ void func_80A55564(ObjHugebombiwa* this, PlayState* play) {
this->unk_4B2--;
if ((this->unk_4B0 >= 20) || (this->unk_4B2 <= 0)) {
- ActorCutscene_Stop(this->actor.cutscene);
- Actor_MarkForDeath(&this->actor);
+ CutsceneManager_Stop(this->actor.csId);
+ Actor_Kill(&this->actor);
}
}
diff --git a/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.h b/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.h
index 67b428182..932a61c3d 100644
--- a/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.h
+++ b/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.h
@@ -29,6 +29,4 @@ typedef struct ObjHugebombiwa {
/* 0x4B4 */ ObjHugebombiwaActionFunc actionFunc;
} ObjHugebombiwa; // size = 0x4B8
-extern const ActorInit Obj_Hugebombiwa_InitVars;
-
#endif // Z_OBJ_HUGEBOMBIWA_H
diff --git a/src/overlays/actors/ovl_Obj_Hunsui/overlay.cfg b/src/overlays/actors/ovl_Obj_Hunsui/overlay.cfg
deleted file mode 100644
index 939fc3564..000000000
--- a/src/overlays/actors/ovl_Obj_Hunsui/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Hunsui
-z_obj_hunsui.c
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 384d1cbad..41cdd8369 100644
--- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c
+++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c
@@ -3,7 +3,7 @@
* Overlay: ovl_Obj_Hunsui
* Description: Switch-Activated Geyser
*/
-
+#include "prevent_bss_reordering.h"
#include "z_obj_hunsui.h"
#include "objects/object_hunsui/object_hunsui.h"
@@ -46,7 +46,7 @@ ObjHansuiStruct D_80B9DC70[] = {
{ 3, 3 }, { 3, 5 }, { 3, 1 }, { 3, 6 }, { 3, 2 }, { 3, 4 }, { 3, 0 },
};
-const ActorInit Obj_Hunsui_InitVars = {
+ActorInit Obj_Hunsui_InitVars = {
ACTOR_OBJ_HUNSUI,
ACTORCAT_BG,
FLAGS,
@@ -120,7 +120,7 @@ void func_80B9C5E8(ObjHunsui* this, PlayState* play) {
if ((this->dyna.actor.xzDistToPlayer < (45.0f * this->dyna.actor.scale.x * 10.0f)) &&
(this->dyna.actor.playerHeightRel < -21.0f)) {
- if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
this->unk_172 &= ~8;
this->unk_19C = 0.0f;
this->unk_1A0 = 0.0f;
@@ -205,7 +205,7 @@ void ObjHunsui_Init(Actor* thisx, PlayState* play) {
this->unk_160 = OBJHUNSUI_GET_F000(thisx);
this->unk_164 = OBJHUNSUI_GET_F80(thisx);
this->unk_168 = OBJHUNSUI_GET_7F(thisx);
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
if ((this->unk_160 != OBJHUNSUI_F000_5) && (this->unk_160 != OBJHUNSUI_F000_6)) {
DynaPolyActor_LoadMesh(play, &this->dyna, &object_hunsui_Colheader_000C74);
@@ -213,7 +213,7 @@ void ObjHunsui_Init(Actor* thisx, PlayState* play) {
D_80B9DED0 = Lib_SegmentedToVirtual(object_hunsui_Matanimheader_000BF0);
D_80B9DED4 = Lib_SegmentedToVirtual(object_hunsui_Matanimheader_001888);
- SubS_FillCutscenesList(&this->dyna.actor, this->unk_170, ARRAY_COUNT(this->unk_170));
+ SubS_FillCutscenesList(&this->dyna.actor, this->csIdList, ARRAY_COUNT(this->csIdList));
this->unk_18C = 0;
switch (this->unk_160) {
@@ -239,7 +239,7 @@ void ObjHunsui_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.shape.rot.z = 0;
this->dyna.actor.room = -1;
} else {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
break;
@@ -253,7 +253,7 @@ void ObjHunsui_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.shape.rot.z = 0;
this->dyna.actor.room = -1;
} else {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
break;
@@ -269,7 +269,7 @@ void ObjHunsui_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.room = -1; this->actionFunc = func_80B9D714;
// clang-format on
} else {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
break;
@@ -327,7 +327,7 @@ void ObjHunsui_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
if ((this->unk_172 & 0x40) &&
- SubS_StartActorCutscene(&this->dyna.actor, this->unk_17C, -1, SUBS_CUTSCENE_SET_UNK_LINK_FIELDS)) {
+ SubS_StartCutscene(&this->dyna.actor, this->csId, CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) {
this->unk_172 &= ~0x40;
}
@@ -355,7 +355,7 @@ void func_80B9CE64(ObjHunsui* this, PlayState* play) {
if (!(this->unk_172 & 1)) {
if (sp2C != this->unk_180) {
- this->unk_17C = this->unk_170[0];
+ this->csId = this->csIdList[0];
this->unk_172 |= 0x40;
}
}
@@ -431,7 +431,7 @@ void func_80B9D120(ObjHunsui* this, PlayState* play) {
D_80B9DED8.unk_02 = 0;
break;
}
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
@@ -447,7 +447,7 @@ void func_80B9D120(ObjHunsui* this, PlayState* play) {
}
if (func_80B9C450(play, this->unk_168, this->unk_164)) {
- this->unk_17C = this->unk_170[0];
+ this->csId = this->csIdList[0];
this->unk_172 |= 0x40;
func_80B9D4D0(this, play);
}
@@ -536,7 +536,7 @@ void func_80B9D508(ObjHunsui* this, PlayState* play) {
D_80B9DED8.unk_02 = 0;
break;
}
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
@@ -560,7 +560,7 @@ void func_80B9D508(ObjHunsui* this, PlayState* play) {
}
if (!(this->unk_172 & 1) && !func_80B9C450(play, this->unk_168, this->unk_164)) {
- this->unk_17C = this->unk_170[0];
+ this->csId = this->csIdList[0];
this->unk_172 |= 0x40;
func_80B9D0FC(this, play);
}
@@ -569,29 +569,29 @@ void func_80B9D508(ObjHunsui* this, PlayState* play) {
void func_80B9D714(ObjHunsui* this, PlayState* play) {
s32 pad;
Player* player = GET_PLAYER(play);
- s16 cs;
+ s16 csId;
f32 sp28;
if ((this->unk_16C != play->roomCtx.curRoom.num) && (this->unk_16C != play->roomCtx.prevRoom.num) &&
(this->unk_16D != play->roomCtx.curRoom.num) && (this->unk_16D != play->roomCtx.prevRoom.num)) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
} else {
if (Flags_GetSwitch(play, this->unk_168)) {
this->unk_172 &= ~2;
this->unk_172 |= 0x10;
- cs = this->dyna.actor.cutscene;
+ csId = this->dyna.actor.csId;
if (this->unk_16E == 0) {
- if ((cs >= 0) && !ActorCutscene_GetCanPlayNext(cs)) {
- ActorCutscene_SetIntentToPlay(cs);
- } else if (cs >= 0) {
- ActorCutscene_StartAndSetUnkLinkFields(cs, &this->dyna.actor);
+ if ((csId >= 0) && !CutsceneManager_IsNext(csId)) {
+ CutsceneManager_Queue(csId);
+ } else if (csId >= 0) {
+ CutsceneManager_StartWithPlayerCs(csId, &this->dyna.actor);
this->unk_16E = -1;
} else {
this->unk_16E = 40;
}
} else if (this->unk_16E < 0) {
- if (func_800F22C4(cs, &this->dyna.actor)) {
+ if (func_800F22C4(csId, &this->dyna.actor) != 0) {
this->unk_16E = 40;
}
} else {
@@ -616,7 +616,7 @@ void func_80B9D714(ObjHunsui* this, PlayState* play) {
}
}
- if (!DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ if (!DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
if (this->dyna.actor.xzDistToPlayer < 45.0f) {
if ((this->dyna.actor.playerHeightRel < -this->dyna.actor.velocity.y) &&
(this->dyna.actor.playerHeightRel >= -800.0f)) {
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 2f3d968a6..c06abbe7d 100644
--- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h
+++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h
@@ -31,11 +31,11 @@ typedef struct ObjHunsui {
/* 0x16C */ s8 unk_16C;
/* 0x16D */ s8 unk_16D;
/* 0x16E */ s8 unk_16E;
- /* 0x170 */ s16 unk_170[1];
+ /* 0x170 */ s16 csIdList[1];
/* 0x172 */ u16 unk_172;
/* 0x174 */ f32 unk_174;
/* 0x178 */ f32 unk_178;
- /* 0x17C */ s16 unk_17C;
+ /* 0x17C */ s16 csId;
/* 0x180 */ s32 unk_180;
/* 0x184 */ s16 unk_184;
/* 0x186 */ s16 unk_186;
@@ -54,6 +54,4 @@ typedef struct ObjHunsui {
/* 0x1B4 */ BgDblueMovebg* unk_1B4;
} ObjHunsui; // size = 0x1B8
-extern const ActorInit Obj_Hunsui_InitVars;
-
#endif // Z_OBJ_HUNSUI_H
diff --git a/src/overlays/actors/ovl_Obj_Ice_Poly/overlay.cfg b/src/overlays/actors/ovl_Obj_Ice_Poly/overlay.cfg
deleted file mode 100644
index d77c80fcb..000000000
--- a/src/overlays/actors/ovl_Obj_Ice_Poly/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Ice_Poly
-z_obj_ice_poly.c
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 2ba1e4352..0ef50dc98 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
@@ -22,7 +22,7 @@ void func_80931A38(ObjIcePoly* this, PlayState* play);
void func_80931E58(ObjIcePoly* this, PlayState* play);
void func_80931EEC(ObjIcePoly* this, PlayState* play);
-const ActorInit Obj_Ice_Poly_InitVars = {
+ActorInit Obj_Ice_Poly_InitVars = {
ACTOR_OBJ_ICE_POLY,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -116,8 +116,8 @@ void ObjIcePoly_Init(Actor* thisx, PlayState* play) {
thisx->shape.rot.z = -0x500;
if (((this->unk_149 != OBJICEPOLY_FF_FF) && Flags_GetSwitch(play, this->unk_149)) ||
- ((play->sceneId == SCENE_KAJIYA) && (gSaveContext.save.weekEventReg[33] & 0x80))) {
- Actor_MarkForDeath(thisx);
+ ((play->sceneId == SCENE_KAJIYA) && CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE))) {
+ Actor_Kill(thisx);
return;
}
@@ -178,7 +178,7 @@ void func_80931A38(ObjIcePoly* this, PlayState* play) {
s32 pad3;
f32 sp58;
- if (!(player->stateFlags2 & 0x4000) && (this->unk_14A != 0)) {
+ if (!(player->stateFlags2 & PLAYER_STATE2_4000) && (this->unk_14A != 0)) {
this->unk_14A--;
}
@@ -200,7 +200,7 @@ void func_80931A38(ObjIcePoly* this, PlayState* play) {
(this->colliders2[1].info.acHitInfo->toucher.dmgFlags == 0x800)) ||
((this->colliders2[1].base.ac->id == ACTOR_OBJ_AQUA) &&
(this->colliders2[1].base.ac->params == OBJAQUA_1))))) {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
this->unk_14A = 0;
this->actionFunc = func_80931E58;
this->actor.focus.rot.y = this->actor.yawTowardsPlayer;
@@ -220,7 +220,7 @@ void func_80931A38(ObjIcePoly* this, PlayState* play) {
} while (actor != NULL);
}
} else if ((this->unk_149 != OBJICEPOLY_FF_FF) && Flags_GetSwitch(play, this->unk_149)) {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
this->unk_14A = 1;
this->actionFunc = func_80931E58;
} else {
@@ -265,18 +265,19 @@ void func_80931A38(ObjIcePoly* this, PlayState* play) {
}
void func_80931E58(ObjIcePoly* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
if (this->unk_14A == 1) {
func_80931828(this, play);
- Actor_MarkForDeath(&this->actor);
- } else {
- this->unk_14A = 40;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ICE_MELT);
- this->actionFunc = func_80931EEC;
+ Actor_Kill(&this->actor);
+ return;
}
+
+ this->unk_14A = 40;
+ Actor_PlaySfx(&this->actor, NA_SE_EV_ICE_MELT);
+ this->actionFunc = func_80931EEC;
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
@@ -326,11 +327,11 @@ void func_80931EEC(ObjIcePoly* this, PlayState* play) {
this->unk_148 -= 6;
if (this->unk_14A == 0) {
- ActorCutscene_Stop(this->actor.cutscene);
+ CutsceneManager_Stop(this->actor.csId);
if (this->unk_149 != OBJICEPOLY_FF_FF) {
Flags_SetSwitch(play, this->unk_149);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
diff --git a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h
index 601c5c9e7..b081a7250 100644
--- a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h
+++ b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h
@@ -21,6 +21,4 @@ typedef struct ObjIcePoly {
/* 0x1E4 */ ColliderCylinder colliders2[2];
} ObjIcePoly; // size = 0x27C
-extern const ActorInit Obj_Ice_Poly_InitVars;
-
#endif // Z_OBJ_ICE_POLY_H
diff --git a/src/overlays/actors/ovl_Obj_Iceblock/overlay.cfg b/src/overlays/actors/ovl_Obj_Iceblock/overlay.cfg
deleted file mode 100644
index a72f4e3c8..000000000
--- a/src/overlays/actors/ovl_Obj_Iceblock/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Iceblock
-z_obj_iceblock.c
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 b01f22ae6..a1e0d64bc 100644
--- a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c
+++ b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c
@@ -45,7 +45,7 @@ void func_80A26B64(ObjIceblock* this, PlayState* play);
void func_80A26B74(ObjIceblock* this, PlayState* play);
void func_80A26BF8(ObjIceblock* this, PlayState* play);
-const ActorInit Obj_Iceblock_InitVars = {
+ActorInit Obj_Iceblock_InitVars = {
ACTOR_OBJ_ICEBLOCK,
ACTORCAT_BG,
FLAGS,
@@ -206,10 +206,10 @@ s32 func_80A236D4(ObjIceblock* this, Vec3f* arg1) {
s32 sp20;
sp26 = Math_Vec3f_Yaw(&this->dyna.actor.world.pos, arg1);
- sp2C = Math_SinS(sp26) * this->dyna.actor.speedXZ;
+ sp2C = Math_SinS(sp26) * this->dyna.actor.speed;
sp2C = fabsf(sp2C) + 0.01f;
- sp28 = Math_CosS(sp26) * this->dyna.actor.speedXZ;
+ sp28 = Math_CosS(sp26) * this->dyna.actor.speed;
sp28 = fabsf(sp28) + 0.01f;
sp20 = Math_StepToF(&this->dyna.actor.world.pos.x, arg1->x, sp2C);
@@ -629,7 +629,8 @@ s32 func_80A24954(ObjIceblock* this, PlayState* play) {
func_80A262BC(this);
this->unk_2B0 = 3;
} else if (this->unk_1B0 & 4) {
- if (func_800C99D4(&play->colCtx, this->dyna.actor.floorPoly, this->dyna.actor.floorBgId) == 5) {
+ if (SurfaceType_GetFloorType(&play->colCtx, this->dyna.actor.floorPoly, this->dyna.actor.floorBgId) ==
+ FLOOR_TYPE_5) {
func_80A25FA0(this);
this->unk_2B0 = 2;
} else {
@@ -642,7 +643,7 @@ s32 func_80A24954(ObjIceblock* this, PlayState* play) {
void func_80A24A48(ObjIceblock* this, PlayState* play) {
if (!(this->unk_1B0 & 0x10) && !(this->collider.base.ocFlags1 & OC1_HIT)) {
- func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->unk_1B0 |= 0x10;
}
}
@@ -849,7 +850,7 @@ void func_80A25404(ObjIceblock* this) {
void func_80A2541C(ObjIceblock* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- player->stateFlags2 &= ~0x10;
+ player->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
}
@@ -892,7 +893,7 @@ void func_80A25440(ObjIceblock* this) {
}
static InitChainEntry sInitChain[] = {
- ICHAIN_F32_DIV1000(speedXZ, 16000, ICHAIN_CONTINUE),
+ ICHAIN_F32_DIV1000(speed, 16000, ICHAIN_CONTINUE),
ICHAIN_F32_DIV1000(gravity, -1800, ICHAIN_CONTINUE),
ICHAIN_F32_DIV1000(terminalVelocity, -26000, ICHAIN_CONTINUE),
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
@@ -920,9 +921,9 @@ void ObjIceblock_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.world.rot.y = this->dyna.actor.shape.rot.y;
}
- DynaPolyActor_Init(&this->dyna, 1);
- DynaPolyActor_LoadMesh(play, &this->dyna, &gIceBlockDynaColHeader);
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
+ DynaPolyActor_LoadMesh(play, &this->dyna, &gIceBlockCol);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit);
@@ -970,13 +971,13 @@ void ObjIceBlock_SetupAttemptSpawnCutscene(ObjIceblock* this) {
}
void ObjIceBlock_AttemptSpawnCutscene(ObjIceblock* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
this->extendedDrawFunc = func_80A26BF8;
this->spawnCutsceneTimer = 80;
func_80A25824(this);
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
@@ -1096,13 +1097,13 @@ void func_80A25BBC(ObjIceblock* this, PlayState* play) {
func_80A23690(this);
if (func_80A23F90(this, play)) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
}
if (func_80A24954(this, play)) {
func_80A2491C(this);
if (this->unk_2B0 == 3) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_DIVE_INTO_WATER_L);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_DIVE_INTO_WATER_L);
}
}
}
@@ -1175,7 +1176,7 @@ void func_80A25E50(ObjIceblock* this, PlayState* play) {
func_80A25BA0(this);
} else if (sp38) {
if (func_80A24118(this, play, 59.9f, &sp28)) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
}
func_80A2541C(this, play);
func_80A25CF4(this);
@@ -1208,7 +1209,7 @@ void func_80A25FD4(ObjIceblock* this, PlayState* play) {
func_80A23370(this, sp2C);
func_80A260E8(this);
sp30 = false;
- func_800B7298(play, &this->dyna.actor, 7);
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_WAIT);
this->unk_1B0 |= 1;
}
@@ -1254,7 +1255,7 @@ void func_80A26144(ObjIceblock* this, PlayState* play) {
if ((this->unk_1B0 & 1) && (isBool || sp28 || (this->dyna.actor.xzDistToPlayer > 400.0f))) {
this->unk_1B0 &= ~1;
- func_800B7298(play, &this->dyna.actor, 6);
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_END);
}
if (isBool) {
@@ -1262,7 +1263,7 @@ void func_80A26144(ObjIceblock* this, PlayState* play) {
func_80A23B88(this);
func_80A25BA0(this);
} else if (sp28) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
func_80A23B88(this);
func_80A25FA0(this);
} else {
@@ -1410,7 +1411,7 @@ void func_80A266E0(ObjIceblock* this, PlayState* play) {
func_80A2508C(this, play);
if (sp20) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
}
@@ -1426,7 +1427,7 @@ void ObjIceblock_Update(Actor* thisx, PlayState* play) {
}
}
- if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
if (this->unk_1B0 & 0x20) {
this->unk_1B0 &= ~0x40;
} else {
@@ -1453,7 +1454,7 @@ void ObjIceblock_Update(Actor* thisx, PlayState* play) {
this->unk_1B0 &= ~0x100;
if (this->unk_1B0 & 1) {
this->unk_1B0 &= ~1;
- func_800B7298(play, &this->dyna.actor, 6);
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_END);
}
func_80A266C4(this);
}
@@ -1462,7 +1463,7 @@ void ObjIceblock_Update(Actor* thisx, PlayState* play) {
if (this->spawnCutsceneTimer > 0) {
this->spawnCutsceneTimer--;
if (this->spawnCutsceneTimer == 0) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ CutsceneManager_Stop(this->dyna.actor.csId);
}
}
diff --git a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.h b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.h
index 46ebc0c40..466cd97b7 100644
--- a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.h
+++ b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.h
@@ -78,6 +78,4 @@ typedef struct ObjIceblock {
/* 0x2B4 */ f32 unk_2B4;
} ObjIceblock; // size = 0x2B8
-extern const ActorInit Obj_Iceblock_InitVars;
-
#endif // Z_OBJ_ICEBLOCK_H
diff --git a/src/overlays/actors/ovl_Obj_Jg_Gakki/overlay.cfg b/src/overlays/actors/ovl_Obj_Jg_Gakki/overlay.cfg
deleted file mode 100644
index f4ae147d7..000000000
--- a/src/overlays/actors/ovl_Obj_Jg_Gakki/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Jg_Gakki
-z_obj_jg_gakki.c
diff --git a/src/overlays/actors/ovl_Obj_Jg_Gakki/z_obj_jg_gakki.c b/src/overlays/actors/ovl_Obj_Jg_Gakki/z_obj_jg_gakki.c
index 57e0f4b2e..276c4a28e 100644
--- a/src/overlays/actors/ovl_Obj_Jg_Gakki/z_obj_jg_gakki.c
+++ b/src/overlays/actors/ovl_Obj_Jg_Gakki/z_obj_jg_gakki.c
@@ -16,7 +16,7 @@ void ObjJgGakki_Destroy(Actor* thisx, PlayState* play);
void ObjJgGakki_Update(Actor* thisx, PlayState* play);
void ObjJgGakki_Draw(Actor* thisx, PlayState* play);
-const ActorInit Obj_Jg_Gakki_InitVars = {
+ActorInit Obj_Jg_Gakki_InitVars = {
ACTOR_OBJ_JG_GAKKI,
ACTORCAT_PROP,
FLAGS,
@@ -36,13 +36,13 @@ void ObjJgGakki_Init(Actor* thisx, PlayState* play2) {
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f);
SkelAnime_Init(play, &this->skelAnime, &gGoronElderDrumSkel, NULL, NULL, NULL, 0);
- if (((play->sceneId == SCENE_SPOT00) && (gSaveContext.sceneLayer == 7)) && (play->csCtx.currentCsIndex == 0)) {
+ if (((play->sceneId == SCENE_SPOT00) && (gSaveContext.sceneLayer == 7)) && (play->csCtx.scriptIndex == 0)) {
Animation_Change(&this->skelAnime, &gGoronElderDrumTakeOutAnim, 1.0f, frameCount, frameCount, ANIMMODE_ONCE,
0.0f);
} else if ((play->sceneId == SCENE_17SETUGEN) || (play->sceneId == SCENE_10YUKIYAMANOMURA)) {
Animation_Change(&this->skelAnime, &gGoronElderDrumTakeOutAnim, 1.0f, 0.0f, frameCount, ANIMMODE_ONCE, 0.0f);
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
Actor_SetScale(&this->actor, 0.01f);
}
diff --git a/src/overlays/actors/ovl_Obj_Jg_Gakki/z_obj_jg_gakki.h b/src/overlays/actors/ovl_Obj_Jg_Gakki/z_obj_jg_gakki.h
index a3e8ae8eb..0da5151a4 100644
--- a/src/overlays/actors/ovl_Obj_Jg_Gakki/z_obj_jg_gakki.h
+++ b/src/overlays/actors/ovl_Obj_Jg_Gakki/z_obj_jg_gakki.h
@@ -11,6 +11,4 @@ typedef struct ObjJgGakki {
/* 0x188 */ ColliderCylinder collider;
} ObjJgGakki; // size = 0x1D4
-extern const ActorInit Obj_Jg_Gakki_InitVars;
-
#endif // Z_OBJ_JG_GAKKI_H
diff --git a/src/overlays/actors/ovl_Obj_Jgame_Light/overlay.cfg b/src/overlays/actors/ovl_Obj_Jgame_Light/overlay.cfg
deleted file mode 100644
index 932e67c12..000000000
--- a/src/overlays/actors/ovl_Obj_Jgame_Light/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Jgame_Light
-z_obj_jgame_light.c
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 21b764593..af05f0ba3 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
@@ -27,7 +27,7 @@ void func_80C15474(ObjJgameLight* this, PlayState* play);
void ObjJgameLight_UpdateCollision(ObjJgameLight* this, PlayState* play);
void func_80C15718(ObjJgameLight* this, PlayState* play);
-const ActorInit Obj_Jgame_Light_InitVars = {
+ActorInit Obj_Jgame_Light_InitVars = {
ACTOR_OBJ_JGAME_LIGHT,
ACTORCAT_PROP,
FLAGS,
diff --git a/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.h b/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.h
index a81bbf3cc..0be39f7a6 100644
--- a/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.h
+++ b/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.h
@@ -27,6 +27,4 @@ typedef struct ObjJgameLight {
/* 0x1B8 */ u8 prevHealth;
} ObjJgameLight; // size = 0x1BC
-extern const ActorInit Obj_Jgame_Light_InitVars;
-
#endif // Z_OBJ_JGAME_LIGHT_H
diff --git a/src/overlays/actors/ovl_Obj_Kendo_Kanban/overlay.cfg b/src/overlays/actors/ovl_Obj_Kendo_Kanban/overlay.cfg
deleted file mode 100644
index e1992b42b..000000000
--- a/src/overlays/actors/ovl_Obj_Kendo_Kanban/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Kendo_Kanban
-z_obj_kendo_kanban.c
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 cbe3cecfc..26191e397 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
@@ -44,7 +44,7 @@ void ObjKendoKanban_Settled(ObjKendoKanban* this, PlayState* play);
void ObjKendoKanban_HandlePhysics(ObjKendoKanban* this, PlayState* play);
s32 ObjKendoKanban_IsPlayerOnTop(ObjKendoKanban* this, PlayState* play);
-const ActorInit Obj_Kendo_Kanban_InitVars = {
+ActorInit Obj_Kendo_Kanban_InitVars = {
ACTOR_OBJ_KENDO_KANBAN,
ACTORCAT_NPC,
FLAGS,
@@ -211,7 +211,7 @@ void ObjKendoKanban_Init(Actor* thisx, PlayState* play) {
Collider_SetTrisVertices(&this->colliderTris, i, &vertices[0], &vertices[1], &vertices[2]);
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
this->boardFragments = OBJKENDOKANBAN_GET_BOARD_FRAGMENTS(&this->actor);
this->actor.gravity = -2.0f;
@@ -380,9 +380,9 @@ void ObjKendoKanban_HandlePhysics(ObjKendoKanban* this, PlayState* play) {
Matrix_Pop();
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
- if (this->actor.bgCheckFlags & 1) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
// When on the ground, apply some friction.
this->actor.velocity.x *= 0.8f;
this->actor.velocity.z *= 0.8f;
@@ -401,18 +401,18 @@ void ObjKendoKanban_HandlePhysics(ObjKendoKanban* this, PlayState* play) {
return;
}
- if (this->actor.bgCheckFlags & 2) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
// Upon touching the ground...
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_WOODPLATE_BOUND);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_WOODPLATE_BOUND);
this->hasNewRootCornerPos = false;
this->actor.velocity.y *= 0.5f;
- } else if (this->actor.bgCheckFlags & 1) {
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
// When on the ground...
this->numBounces++;
this->hasNewRootCornerPos = false;
this->actor.velocity.x *= 0.3f;
this->actor.velocity.z *= 0.3f;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_WOODPLATE_BOUND);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_WOODPLATE_BOUND);
// Adjust and (potentially) reverse rotation depending on the current
// facing of the board and the direction in which it is rotating.
diff --git a/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.h b/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.h
index 9d01b63fc..72bf6e71e 100644
--- a/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.h
+++ b/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.h
@@ -31,6 +31,4 @@ typedef struct ObjKendoKanban {
/* 0x30C */ u8 boardFragments;
} ObjKendoKanban; // size = 0x310
-extern const ActorInit Obj_Kendo_Kanban_InitVars;
-
#endif // Z_OBJ_KENDO_KANBAN_H
diff --git a/src/overlays/actors/ovl_Obj_Kepn_Koya/overlay.cfg b/src/overlays/actors/ovl_Obj_Kepn_Koya/overlay.cfg
deleted file mode 100644
index 8a6c7b560..000000000
--- a/src/overlays/actors/ovl_Obj_Kepn_Koya/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Kepn_Koya
-z_obj_kepn_koya.c
diff --git a/src/overlays/actors/ovl_Obj_Kepn_Koya/z_obj_kepn_koya.c b/src/overlays/actors/ovl_Obj_Kepn_Koya/z_obj_kepn_koya.c
index 28c10781d..abd9b2577 100644
--- a/src/overlays/actors/ovl_Obj_Kepn_Koya/z_obj_kepn_koya.c
+++ b/src/overlays/actors/ovl_Obj_Kepn_Koya/z_obj_kepn_koya.c
@@ -16,7 +16,7 @@ void ObjKepnKoya_Destroy(Actor* thisx, PlayState* play);
void ObjKepnKoya_Update(Actor* thisx, PlayState* play);
void ObjKepnKoya_Draw(Actor* thisx, PlayState* play);
-const ActorInit Obj_Kepn_Koya_InitVars = {
+ActorInit Obj_Kepn_Koya_InitVars = {
ACTOR_OBJ_KEPN_KOYA,
ACTORCAT_PROP,
FLAGS,
@@ -41,7 +41,7 @@ void ObjKepnKoya_Init(Actor* thisx, PlayState* play) {
DynaPolyActor_Init(&this->dyna, 0);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_kepn_koya_Colheader_00805C);
if (this->dyna.bgId == BG_ACTOR_MAX) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
}
diff --git a/src/overlays/actors/ovl_Obj_Kepn_Koya/z_obj_kepn_koya.h b/src/overlays/actors/ovl_Obj_Kepn_Koya/z_obj_kepn_koya.h
index ce33c0112..58b4f69a1 100644
--- a/src/overlays/actors/ovl_Obj_Kepn_Koya/z_obj_kepn_koya.h
+++ b/src/overlays/actors/ovl_Obj_Kepn_Koya/z_obj_kepn_koya.h
@@ -10,6 +10,4 @@ typedef struct ObjKepnKoya {
/* 0x15C */ UNK_TYPE1 unk15C[0x4];
} ObjKepnKoya; // size = 0x160
-extern const ActorInit Obj_Kepn_Koya_InitVars;
-
#endif // Z_OBJ_KEPN_KOYA_H
diff --git a/src/overlays/actors/ovl_Obj_Kibako/overlay.cfg b/src/overlays/actors/ovl_Obj_Kibako/overlay.cfg
deleted file mode 100644
index d0a8b240a..000000000
--- a/src/overlays/actors/ovl_Obj_Kibako/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Kibako
-z_obj_kibako.c
diff --git a/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c b/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c
index 9bd2e0442..e33f62f8b 100644
--- a/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c
+++ b/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c
@@ -8,7 +8,7 @@
#include "objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h"
#include "objects/object_kibako/object_kibako.h"
-#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_4000000)
+#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_CAN_PRESS_SWITCH)
#define THIS ((ObjKibako*)thisx)
@@ -36,7 +36,7 @@ static s16 D_80927384 = 0;
static s16 D_80927388 = 0;
static s16 D_8092738C = 0;
-const ActorInit Obj_Kibako_InitVars = {
+ActorInit Obj_Kibako_InitVars = {
ACTOR_OBJ_KIBAKO,
ACTORCAT_PROP,
FLAGS,
@@ -121,7 +121,7 @@ void func_80926318(ObjKibako* this, PlayState* play) {
if (this->actor.xzDistToPlayer < 100.0f) {
angle = this->actor.yawTowardsPlayer - GET_PLAYER(play)->actor.world.rot.y;
if (ABS_ALT(angle) > 0x5555) {
- Actor_PickUp(&this->actor, play, GI_NONE, 36.0f, 30.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_NONE, 36.0f, 30.0f);
}
}
}
@@ -151,7 +151,7 @@ void ObjKibako_Init(Actor* thisx, PlayState* play2) {
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
this->bankIndex = Object_GetIndex(&play->objectCtx, sObjectIdList[whichBankIndex]);
if (this->bankIndex < 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
this->unk199 = this->actor.room;
@@ -252,7 +252,8 @@ void func_80926B40(ObjKibako* this) {
void func_80926B54(ObjKibako* this, PlayState* play) {
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 18.0f, 15.0f, 0.0f, 0x45);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 18.0f, 15.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40);
if (Object_IsLoaded(&play->objectCtx, this->bankIndex)) {
this->actor.draw = ObjKibako_Draw;
this->actor.objBankIndex = this->bankIndex;
@@ -278,22 +279,23 @@ void ObjKibako_Idle(ObjKibako* this, PlayState* play) {
//! @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 collider
- func_800B8E58((Player*)this, NA_SE_PL_PULL_UP_WOODBOX);
- } else if ((this->actor.bgCheckFlags & 0x20) && (this->actor.depthInWater > 19.0f)) {
+ Player_PlaySfx((Player*)&this->actor, NA_SE_PL_PULL_UP_WOODBOX);
+ } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_WATER) && (this->actor.depthInWater > 19.0f)) {
ObjKibako_WaterBreak(this, play);
ObjKibako_SpawnCollectible(this, play);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_EV_WOODBOX_BREAK);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EV_DIVE_INTO_WATER_L);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else if (this->collider.base.acFlags & AC_HIT) {
ObjKibako_AirBreak(this, play);
ObjKibako_SpawnCollectible(this, play);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_EV_WOODBOX_BREAK);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
Actor_MoveWithGravity(&this->actor);
func_809262BC(this);
- Actor_UpdateBgCheckInfo(play, &this->actor, 18.0f, 15.0f, 0.0f, 0x45);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 18.0f, 15.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40);
if (!(this->collider.base.ocFlags1 & OC1_TYPE_PLAYER) && (this->actor.xzDistToPlayer > 28.0f)) {
this->collider.base.ocFlags1 |= OC1_TYPE_PLAYER;
@@ -340,16 +342,17 @@ void ObjKibako_Held(ObjKibako* this, PlayState* play) {
func_80926394(this, play);
if (Actor_HasNoParent(&this->actor, play)) {
this->actor.room = play->roomCtx.curRoom.num;
- if (fabsf(this->actor.speedXZ) < 0.1f) {
+ if (fabsf(this->actor.speed) < 0.1f) {
ObjKibako_SetupIdle(this);
this->collider.base.ocFlags1 &= ~OC1_TYPE_PLAYER;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_PUT_DOWN_WOODBOX);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_PUT_DOWN_WOODBOX);
} else {
Actor_MoveWithGravity(&this->actor);
ObjKibako_SetupThrown(this);
- this->actor.flags &= ~ACTOR_FLAG_4000000;
+ this->actor.flags &= ~ACTOR_FLAG_CAN_PRESS_SWITCH;
}
- Actor_UpdateBgCheckInfo(play, &this->actor, 18.0f, 15.0f, 0.0f, 0x45);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 18.0f, 15.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40);
} else {
pos.x = this->actor.world.pos.x;
pos.y = this->actor.world.pos.y + 20.0f;
@@ -384,18 +387,19 @@ void ObjKibako_Thrown(ObjKibako* this, PlayState* play) {
if (this->timer > 0) {
this->timer--;
}
- if ((this->actor.bgCheckFlags & 0xB) || (atHit) || (this->timer <= 0)) {
+ if ((this->actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH | BGCHECKFLAG_WALL)) || atHit ||
+ (this->timer <= 0)) {
ObjKibako_AirBreak(this, play);
ObjKibako_SpawnCollectible(this, play);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_EV_WOODBOX_BREAK);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
- if (this->actor.bgCheckFlags & 0x40) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) {
ObjKibako_WaterBreak(this, play);
ObjKibako_SpawnCollectible(this, play);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_EV_WOODBOX_BREAK);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EV_DIVE_INTO_WATER_L);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
if (this->actor.velocity.y < -0.05f) {
this->actor.gravity = -2.3f;
@@ -405,7 +409,8 @@ void ObjKibako_Thrown(ObjKibako* this, PlayState* play) {
Math_StepToS(&D_8092738C, D_80927388, 0xA0);
this->actor.shape.rot.x = (s16)(this->actor.shape.rot.x + D_80927384);
this->actor.shape.rot.y = (s16)(this->actor.shape.rot.y + D_8092738C);
- Actor_UpdateBgCheckInfo(play, &this->actor, 18.0f, 15.0f, 0.0f, 0x45);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 18.0f, 15.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40);
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
diff --git a/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h b/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h
index b3ef71cca..102dd1e1b 100644
--- a/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h
+++ b/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h
@@ -22,6 +22,4 @@ typedef struct ObjKibako {
/* 0x199 */ s8 unk199; /* room? */
} ObjKibako; // size = 0x19C
-extern const ActorInit Obj_Kibako_InitVars;
-
#endif // Z_OBJ_KIBAKO_H
diff --git a/src/overlays/actors/ovl_Obj_Kibako2/overlay.cfg b/src/overlays/actors/ovl_Obj_Kibako2/overlay.cfg
deleted file mode 100644
index 436504fc8..000000000
--- a/src/overlays/actors/ovl_Obj_Kibako2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Kibako2
-z_obj_kibako2.c
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 d32e7a2cd..eb14dff6a 100644
--- a/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c
+++ b/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c
@@ -19,7 +19,7 @@ void ObjKibako2_Draw(Actor* thisx, PlayState* play);
void ObjKibako2_Idle(ObjKibako2* this, PlayState* play);
void ObjKibako2_Kill(ObjKibako2* this, PlayState* play);
-const ActorInit Obj_Kibako2_InitVars = {
+ActorInit Obj_Kibako2_InitVars = {
ACTOR_OBJ_KIBAKO2,
ACTORCAT_BG,
FLAGS,
@@ -128,7 +128,7 @@ void ObjKibako2_SpawnSkulltula(ObjKibako2* this, PlayState* play) {
if (skulltula != NULL) {
skulltula->parent = &this->dyna.actor;
skulltula->velocity.y = 13.0f;
- skulltula->speedXZ = 0.0f;
+ skulltula->speed = 0.0f;
}
}
}
@@ -211,7 +211,7 @@ void ObjKibako2_Idle(ObjKibako2* this, PlayState* play) {
ObjKibako2_Break(this, play);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 20, NA_SE_EV_WOODBOX_BREAK);
this->dyna.actor.flags |= ACTOR_FLAG_10;
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->dyna.actor.draw = NULL;
this->actionFunc = ObjKibako2_Kill;
} else if (this->dyna.actor.xzDistToPlayer < 600.0f) {
@@ -221,7 +221,7 @@ void ObjKibako2_Idle(ObjKibako2* this, PlayState* play) {
void ObjKibako2_Kill(ObjKibako2* this, PlayState* play) {
ObjKibako2_SpawnContents(this, play);
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
void ObjKibako2_Update(Actor* thisx, PlayState* play) {
@@ -233,7 +233,7 @@ void ObjKibako2_Update(Actor* thisx, PlayState* play) {
if (this->skulltulaNoiseTimer >= 0) {
if (this->skulltulaNoiseTimer == 0) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EN_STALGOLD_ROLL);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EN_STALGOLD_ROLL);
if (Rand_ZeroOne() < 0.1f) {
this->skulltulaNoiseTimer = Rand_S16Offset(40, 80);
} else {
diff --git a/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.h b/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.h
index f1816ab4d..47c8649d9 100644
--- a/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.h
+++ b/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.h
@@ -25,6 +25,4 @@ typedef struct ObjKibako2 {
/* 0x1AD */ s8 skulltulaNoiseTimer;
} ObjKibako2; // size = 0x1B0
-extern const ActorInit Obj_Kibako2_InitVars;
-
#endif // Z_OBJ_KIBAKO2_H
diff --git a/src/overlays/actors/ovl_Obj_Kinoko/overlay.cfg b/src/overlays/actors/ovl_Obj_Kinoko/overlay.cfg
deleted file mode 100644
index 071ad6a34..000000000
--- a/src/overlays/actors/ovl_Obj_Kinoko/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Kinoko
-z_obj_kinoko.c
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 24597e4aa..b52a66d84 100644
--- a/src/overlays/actors/ovl_Obj_Kinoko/z_obj_kinoko.c
+++ b/src/overlays/actors/ovl_Obj_Kinoko/z_obj_kinoko.c
@@ -16,7 +16,7 @@ void ObjKinoko_Destroy(Actor* thisx, PlayState* play);
void ObjKinoko_Update(Actor* thisx, PlayState* play);
void ObjKinoko_Draw(Actor* thisx, PlayState* play);
-const ActorInit Obj_Kinoko_InitVars = {
+ActorInit Obj_Kinoko_InitVars = {
ACTOR_OBJ_KINOKO,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -49,13 +49,13 @@ void ObjKinoko_Update(Actor* thisx, PlayState* play) {
thisx->flags |= ACTOR_FLAG_1;
if (Actor_HasParent(thisx, play)) {
Flags_SetCollectible(play, OBJ_KINOKO_GET_FLAG(thisx));
- Actor_MarkForDeath(thisx);
+ Actor_Kill(thisx);
return;
}
- Actor_PickUp(thisx, play, GI_MAX, 20.0f, 10.0f);
- if (Math_SmoothStepToF(&thisx->speedXZ, 0.0f, 0.04f, 2.0f, 0.5f) < 0.5f) {
+ Actor_OfferGetItem(thisx, play, GI_MAX, 20.0f, 10.0f);
+ if (Math_SmoothStepToF(&thisx->speed, 0.0f, 0.04f, 2.0f, 0.5f) < 0.5f) {
thisx->scale.x = 0.0f;
- thisx->speedXZ = 110.0f;
+ thisx->speed = 110.0f;
thisx->velocity.x = 0.2f;
}
if (Math_SmoothStepToF(&thisx->scale.x, thisx->velocity.x, 0.04f, 0.004f, 0.001f) <
@@ -76,7 +76,7 @@ void ObjKinoko_Draw(Actor* thisx, PlayState* play) {
func_8012C2DC(play->state.gfxCtx);
gfx = POLY_XLU_DISP;
- gDPSetPrimColor(&gfx[0], 0, 0, 169, 63, 186, (u8)thisx->speedXZ);
+ gDPSetPrimColor(&gfx[0], 0, 0, 169, 63, 186, (u8)thisx->speed);
gDPSetEnvColor(&gfx[1], 110, 44, 200, 100);
gDPSetRenderMode(&gfx[2], G_RM_PASS, G_RM_ZB_CLD_SURF2);
gSPMatrix(&gfx[3], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
diff --git a/src/overlays/actors/ovl_Obj_Kinoko/z_obj_kinoko.h b/src/overlays/actors/ovl_Obj_Kinoko/z_obj_kinoko.h
index 9073e3e14..335f33a02 100644
--- a/src/overlays/actors/ovl_Obj_Kinoko/z_obj_kinoko.h
+++ b/src/overlays/actors/ovl_Obj_Kinoko/z_obj_kinoko.h
@@ -9,8 +9,6 @@ typedef struct ObjKinoko {
/* 0x000 */ Actor actor;
} ObjKinoko; // size = 0x144
-extern const ActorInit Obj_Kinoko_InitVars;
-
#define OBJ_KINOKO_GET_FLAG(thisx) ((thisx)->params & 0x7F)
#endif // Z_OBJ_KINOKO_H
diff --git a/src/overlays/actors/ovl_Obj_Kzsaku/overlay.cfg b/src/overlays/actors/ovl_Obj_Kzsaku/overlay.cfg
deleted file mode 100644
index c2a20d705..000000000
--- a/src/overlays/actors/ovl_Obj_Kzsaku/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Kzsaku
-z_obj_kzsaku.c
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 810525a58..31e6905ec 100644
--- a/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c
+++ b/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c
@@ -23,7 +23,7 @@ void ObjKzsaku_Idle(ObjKzsaku* this, PlayState* play);
void ObjKzsaku_Rise(ObjKzsaku* this, PlayState* play);
void func_80C08CB0(ObjKzsaku* this, PlayState* play);
-const ActorInit Obj_Kzsaku_InitVars = {
+ActorInit Obj_Kzsaku_InitVars = {
ACTOR_OBJ_KZSAKU,
ACTORCAT_PROP,
FLAGS,
@@ -41,7 +41,7 @@ void ObjKzsaku_Init(Actor* thisx, PlayState* play) {
CollisionHeader* col = NULL;
Actor_SetScale(&this->dyna.actor, 1.0f);
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
CollisionHeader_GetVirtual(&object_kzsaku_Colheader_001118, &col);
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, thisx, col);
@@ -78,11 +78,11 @@ void func_80C08BBC(ObjKzsaku* this) {
}
void ObjKzsaku_Rise(ObjKzsaku* this, PlayState* play) {
- if (this->dyna.actor.cutscene != -1) {
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (this->dyna.actor.csId != CS_ID_NONE) {
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
if (this->raisedAmount < 450.0f) {
@@ -103,8 +103,8 @@ void func_80C08C84(ObjKzsaku* this) {
void func_80C08CB0(ObjKzsaku* this, PlayState* play) {
if (this->timer <= 20) {
if (this->timer == 20) {
- if (ActorCutscene_GetCurrentIndex() == this->dyna.actor.cutscene) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ if (CutsceneManager_GetCurrentCsId() == this->dyna.actor.csId) {
+ CutsceneManager_Stop(this->dyna.actor.csId);
}
this->timer = 21;
} else {
diff --git a/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.h b/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.h
index c4a9298fa..0a6f00187 100644
--- a/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.h
+++ b/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.h
@@ -17,6 +17,4 @@ typedef struct ObjKzsaku {
/* 0x168 */ s16 timer;
} ObjKzsaku; // size = 0x16C
-extern const ActorInit Obj_Kzsaku_InitVars;
-
#endif // Z_OBJ_KZSAKU_H
diff --git a/src/overlays/actors/ovl_Obj_Lift/overlay.cfg b/src/overlays/actors/ovl_Obj_Lift/overlay.cfg
deleted file mode 100644
index fca482174..000000000
--- a/src/overlays/actors/ovl_Obj_Lift/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Lift
-z_obj_lift.c
diff --git a/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c b/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c
index 4668bfffd..a82c9ceea 100644
--- a/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c
+++ b/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c
@@ -27,7 +27,7 @@ void func_8093DB70(ObjLift* this);
void func_8093DB90(ObjLift* this, PlayState* play);
void func_8093DC90(Actor* thisx, PlayState* play);
-const ActorInit Obj_Lift_InitVars = {
+ActorInit Obj_Lift_InitVars = {
ACTOR_OBJ_LIFT,
ACTORCAT_BG,
FLAGS,
@@ -100,16 +100,17 @@ void ObjLift_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.shape.rot.z = 0;
this->unk_178 = this->dyna.actor.home.rot.z;
this->dyna.actor.home.rot.z = this->dyna.actor.world.rot.z = this->dyna.actor.shape.rot.z;
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
if ((this->unk_178 <= 0) && (Flags_GetSwitch(play, OBJLIFT_GET_7F(&this->dyna.actor)))) {
- Actor_MarkForDeath(&this->dyna.actor);
- } else {
- DynaPolyActor_LoadMesh(play, &this->dyna, &gDampeGraveBrownElevatorCol);
- this->unk_160 = Rand_Next() >> 0x10;
- this->unk_162 = Rand_Next() >> 0x10;
- this->unk_164 = Rand_Next() >> 0x10;
- func_8093D760(this);
+ Actor_Kill(&this->dyna.actor);
+ return;
}
+
+ DynaPolyActor_LoadMesh(play, &this->dyna, &gDampeGraveBrownElevatorCol);
+ this->unk_160 = Rand_Next() >> 0x10;
+ this->unk_162 = Rand_Next() >> 0x10;
+ this->unk_164 = Rand_Next() >> 0x10;
+ func_8093D760(this);
}
void ObjLift_Destroy(Actor* thisx, PlayState* play) {
@@ -128,7 +129,7 @@ void func_8093D7A0(ObjLift* this, PlayState* play) {
s32 pad;
s16 quakeIndex;
- if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
if (this->timer <= 0) {
if (OBJLIFT_GET_7(&this->dyna.actor) == 7) {
func_8093D9C0(this);
@@ -193,10 +194,10 @@ void func_8093DA48(ObjLift* this, PlayState* play) {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 20, NA_SE_EV_BOX_BREAK);
if (this->unk_178 > 0) {
func_8093DB70(this);
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
} else {
Flags_SetSwitch(play, OBJLIFT_GET_7F(&this->dyna.actor));
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
}
}
@@ -211,7 +212,7 @@ void func_8093DB90(ObjLift* this, PlayState* play) {
if (this->timer <= 0) {
Math_Vec3f_Copy(&this->dyna.actor.world.pos, &this->dyna.actor.home.pos);
this->dyna.actor.world.rot = this->dyna.actor.shape.rot = this->dyna.actor.home.rot;
- func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
func_8093D760(this);
}
}
diff --git a/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.h b/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.h
index ea29a9cb9..b7f2af050 100644
--- a/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.h
+++ b/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.h
@@ -24,6 +24,4 @@ typedef struct ObjLift {
/* 0x178 */ s16 unk_178;
} ObjLift; // size = 0x17C
-extern const ActorInit Obj_Lift_InitVars;
-
#endif // Z_OBJ_LIFT_H
diff --git a/src/overlays/actors/ovl_Obj_Lightblock/overlay.cfg b/src/overlays/actors/ovl_Obj_Lightblock/overlay.cfg
deleted file mode 100644
index ecf5da6fa..000000000
--- a/src/overlays/actors/ovl_Obj_Lightblock/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Lightblock
-z_obj_lightblock.c
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 6884526ee..c54378a74 100644
--- a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c
+++ b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c
@@ -22,7 +22,7 @@ void func_80AF3BA0(ObjLightblock* this, PlayState* play);
void func_80AF3C18(ObjLightblock* this);
void func_80AF3C34(ObjLightblock* this, PlayState* play);
-const ActorInit Obj_Lightblock_InitVars = {
+ActorInit Obj_Lightblock_InitVars = {
ACTOR_OBJ_LIGHTBLOCK,
ACTORCAT_BG,
FLAGS,
@@ -93,17 +93,18 @@ void ObjLightblock_Init(Actor* thisx, PlayState* play) {
DynaPolyActor_Init(&this->dyna, 0);
Collider_InitCylinder(play, &this->collider);
if (Flags_GetSwitch(play, LIGHTBLOCK_DESTROYED(&this->dyna.actor))) {
- Actor_MarkForDeath(&this->dyna.actor);
- } else {
- DynaPolyActor_LoadMesh(play, &this->dyna, &object_lightblock_Colheader_000B80);
- Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit);
- Collider_UpdateCylinder(&this->dyna.actor, &this->collider);
- this->collider.dim.radius = typeVars->radius;
- this->collider.dim.height = typeVars->height;
- this->collider.dim.yShift = typeVars->yShift;
- this->alpha = 255;
- func_80AF3AC8(this);
+ Actor_Kill(&this->dyna.actor);
+ return;
}
+
+ DynaPolyActor_LoadMesh(play, &this->dyna, &object_lightblock_Colheader_000B80);
+ Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit);
+ Collider_UpdateCylinder(&this->dyna.actor, &this->collider);
+ this->collider.dim.radius = typeVars->radius;
+ this->collider.dim.height = typeVars->height;
+ this->collider.dim.yShift = typeVars->yShift;
+ this->alpha = 255;
+ func_80AF3AC8(this);
}
void ObjLightblock_Destroy(Actor* thisx, PlayState* play) {
@@ -133,7 +134,7 @@ void func_80AF3ADC(ObjLightblock* this, PlayState* play) {
}
if (this->collisionCounter >= 8) {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
func_80AF3B8C(this);
} else {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
@@ -145,13 +146,13 @@ void func_80AF3B8C(ObjLightblock* this) {
}
void func_80AF3BA0(ObjLightblock* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
Flags_SetSwitch(play, LIGHTBLOCK_DESTROYED(&this->dyna.actor));
func_80AF3910(this, play);
func_80AF3C18(this);
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
@@ -161,20 +162,23 @@ void func_80AF3C18(ObjLightblock* this) {
}
void func_80AF3C34(ObjLightblock* this, PlayState* play) {
- s8 temp_a0;
+ s8 csId;
this->timer--;
if (this->timer <= 0) {
- temp_a0 = this->dyna.actor.cutscene;
- ActorCutscene_Stop(temp_a0);
- Actor_MarkForDeath(&this->dyna.actor);
- } else if (this->timer <= 60) {
+ csId = this->dyna.actor.csId;
+ CutsceneManager_Stop(csId);
+ Actor_Kill(&this->dyna.actor);
+ return;
+ }
+
+ if (this->timer <= 60) {
if (this->alpha > 40) {
this->alpha -= 40;
} else {
this->alpha = 0;
this->dyna.actor.draw = NULL;
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
}
}
}
diff --git a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.h b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.h
index eb16a7a92..63a106dac 100644
--- a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.h
+++ b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.h
@@ -19,6 +19,4 @@ typedef struct ObjLightblock {
/* 0x1AE */ s8 collisionCounter;
} ObjLightblock; // size = 0x1B0
-extern const ActorInit Obj_Lightblock_InitVars;
-
#endif // Z_OBJ_LIGHTBLOCK_H
diff --git a/src/overlays/actors/ovl_Obj_Lightswitch/overlay.cfg b/src/overlays/actors/ovl_Obj_Lightswitch/overlay.cfg
deleted file mode 100644
index cafaebb11..000000000
--- a/src/overlays/actors/ovl_Obj_Lightswitch/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Lightswitch
-z_obj_lightswitch.c
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 dafd9bc2c..34479a72a 100644
--- a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c
+++ b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c
@@ -27,7 +27,7 @@ void ObjLightSwitch_SetupDisabled(ObjLightswitch* this);
void ObjLightSwitch_Disabled(ObjLightswitch* this, PlayState* play);
void ObjLightswitch_Idle(ObjLightswitch* this, PlayState* play);
-const ActorInit Obj_Lightswitch_InitVars = {
+ActorInit Obj_Lightswitch_InitVars = {
ACTOR_OBJ_LIGHTSWITCH,
ACTORCAT_SWITCH,
FLAGS,
@@ -173,7 +173,7 @@ void ObjLightswitch_Init(Actor* thisx, PlayState* play) {
}
if (isTriggered) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -189,13 +189,13 @@ void ObjLightswitch_SetAction(ObjLightswitch* this, ObjLightswitchSetupFunc setu
}
void ObjLightswitch_PlayCinema(ObjLightswitch* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
ObjLightswitch_UpdateSwitchFlags(this, play, this->switchFlagSetType);
this->cutsceneTimer = 50;
this->setupFunc(this);
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
@@ -231,7 +231,7 @@ void ObjLightSwitch_SetupAsleep(ObjLightswitch* this) {
void ObjLightSwitch_Asleep(ObjLightswitch* this, PlayState* play) {
if (this->colorShiftTimer == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SUN_MARK_FLASH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SUN_MARK_FLASH);
}
this->colorShiftTimer++;
@@ -244,7 +244,7 @@ void ObjLightSwitch_Asleep(ObjLightswitch* this, PlayState* play) {
ObjLightSwitch_SetupEnabled(this);
} else if (this->colorShiftTimer == 15) {
this->faceState = LIGHTSWITCH_FACE_WAKING;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FOOT_SWITCH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FOOT_SWITCH);
}
}
@@ -302,7 +302,7 @@ void ObjLightSwitch_Disabled(ObjLightswitch* this, PlayState* play) {
ObjLightswitch_SetupIdle(this);
} else if (this->colorShiftTimer == 15) {
this->faceState = LIGHTSWITCH_FACE_ASLEEP;
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_FOOT_SWITCH);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_FOOT_SWITCH);
}
}
@@ -315,10 +315,11 @@ void ObjLightSwitch_Fade(ObjLightswitch* this, PlayState* play) {
this->colorAlpha -= 200;
ObjLightswitch_SpawnEffects(this, play); // spawn burning fire effect
if (this->colorAlpha < 0) {
- Actor_MarkForDeath(&this->actor);
- } else {
- func_800B9010(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG); // "burn into ashes"
+ Actor_Kill(&this->actor);
+ return;
}
+
+ func_800B9010(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG); // "burn into ashes"
}
void ObjLightswitch_Update(Actor* thisx, PlayState* play) {
@@ -350,7 +351,7 @@ void ObjLightswitch_Update(Actor* thisx, PlayState* play) {
if ((this->cutsceneTimer > 0) && ((s32)this->actionFunc != (s32)ObjLightswitch_PlayCinema)) {
this->cutsceneTimer--;
if (this->cutsceneTimer == 0) {
- ActorCutscene_Stop(this->actor.cutscene);
+ CutsceneManager_Stop(this->actor.csId);
}
}
diff --git a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.h b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.h
index a07900138..c26dab262 100644
--- a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.h
+++ b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.h
@@ -29,8 +29,6 @@ typedef struct ObjLightswitch {
} ObjLightswitch; // size = 0x1C0
-extern const ActorInit Obj_Lightswitch_InitVars;
-
#define LIGHTSWITCH_FACE_ASLEEP 0
#define LIGHTSWITCH_FACE_WAKING 1
#define LIGHTSWITCH_FACE_FULLAWAKE 2
diff --git a/src/overlays/actors/ovl_Obj_Lupygamelift/overlay.cfg b/src/overlays/actors/ovl_Obj_Lupygamelift/overlay.cfg
deleted file mode 100644
index ad6243891..000000000
--- a/src/overlays/actors/ovl_Obj_Lupygamelift/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Lupygamelift
-z_obj_lupygamelift.c
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 697c73f6a..cb957b839 100644
--- a/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.c
+++ b/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.c
@@ -21,7 +21,7 @@ void func_80AF04D8(ObjLupygamelift* this, PlayState* play);
void func_80AF0514(ObjLupygamelift* this);
void func_80AF0530(ObjLupygamelift* this, PlayState* play);
-const ActorInit Obj_Lupygamelift_InitVars = {
+ActorInit Obj_Lupygamelift_InitVars = {
ACTOR_OBJ_LUPYGAMELIFT,
ACTORCAT_BG,
FLAGS,
@@ -53,9 +53,9 @@ void ObjLupygamelift_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.shape.rot.z = 0;
this->dyna.actor.world.rot.z = 0;
this->timer = 0;
- Actor_UpdateBgCheckInfo(play, thisx, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, thisx, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
ActorShape_Init(&thisx->shape, 0.0f, ActorShadow_DrawSquare, 0.0f);
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_raillift_Colheader_0048D0);
this->targetSpeedXZ = thisx->home.rot.z * 0.1f;
if (this->targetSpeedXZ < 0.0f) {
@@ -131,21 +131,21 @@ void func_80AF04D8(ObjLupygamelift* this, PlayState* play) {
void func_80AF0514(ObjLupygamelift* this) {
this->actionFunc = func_80AF0530;
- this->dyna.actor.speedXZ = this->targetSpeedXZ;
+ this->dyna.actor.speed = this->targetSpeedXZ;
}
void func_80AF0530(ObjLupygamelift* this, PlayState* play) {
- f32 step;
+ f32 distRemaining;
Vec3f target;
target.x = this->points[this->pointIndex].x;
target.y = this->points[this->pointIndex].y;
target.z = this->points[this->pointIndex].z;
- step = Math_Vec3f_StepTo(&this->dyna.actor.world.pos, &target, this->dyna.actor.speedXZ);
- if (step > 30.0f) {
- Math_SmoothStepToF(&this->dyna.actor.speedXZ, this->targetSpeedXZ, 0.5f, 5.0f, 0.1f);
- } else if (step > 0.0f) {
- Math_SmoothStepToF(&this->dyna.actor.speedXZ, 5.0f, 0.5f, 5.0f, 1.0f);
+ distRemaining = Math_Vec3f_StepTo(&this->dyna.actor.world.pos, &target, this->dyna.actor.speed);
+ if (distRemaining > 30.0f) {
+ Math_SmoothStepToF(&this->dyna.actor.speed, this->targetSpeedXZ, 0.5f, 5.0f, 0.1f);
+ } else if (distRemaining > 0.0f) {
+ Math_SmoothStepToF(&this->dyna.actor.speed, 5.0f, 0.5f, 5.0f, 1.0f);
} else {
if (this->pointIndex < (this->count - 1)) {
this->pointIndex++;
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 e2abd8be5..e25f9cd6d 100644
--- a/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.h
+++ b/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.h
@@ -21,6 +21,4 @@ typedef struct ObjLupygamelift {
/* 0x170 */ s16 timer;
} ObjLupygamelift; /* size = 0x174 */
-extern const ActorInit Obj_Lupygamelift_InitVars;
-
#endif // Z_OBJ_LUPYGAMELIFT_H
diff --git a/src/overlays/actors/ovl_Obj_Makekinsuta/overlay.cfg b/src/overlays/actors/ovl_Obj_Makekinsuta/overlay.cfg
deleted file mode 100644
index d63602969..000000000
--- a/src/overlays/actors/ovl_Obj_Makekinsuta/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Makekinsuta
-z_obj_makekinsuta.c
diff --git a/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c b/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c
index 90aa5fa40..da16d938f 100644
--- a/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c
+++ b/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.c
@@ -18,7 +18,7 @@ s32 func_8099FA40(ObjMakekinsuta* this, PlayState* play);
void func_8099FB64(Actor* thisx, PlayState* play);
void func_8099FD7C(Actor* thisx, PlayState* play);
-const ActorInit Obj_Makekinsuta_InitVars = {
+ActorInit Obj_Makekinsuta_InitVars = {
ACTOR_OBJ_MAKEKINSUTA,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -54,7 +54,7 @@ void ObjMakekinsuta_Init(Actor* thisx, PlayState* play) {
this->unk144 = -1;
}
if (Flags_GetSwitch(play, OBJMAKEKINSUTA_GET_SWITCH_FLAGS(thisx))) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -87,7 +87,7 @@ void func_8099FB64(Actor* thisx, PlayState* play) {
Matrix_RotateXS(thisx->shape.rot.x, MTXMODE_APPLY);
Matrix_RotateZS(thisx->shape.rot.z, MTXMODE_APPLY);
Matrix_MultVec3f(&D_8099FE3C, &destVec);
- rotY = Math_FAtan2F(destVec.z, destVec.x);
+ rotY = Math_Atan2S_XY(destVec.z, destVec.x);
}
actor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_SW, thisx->world.pos.x, thisx->world.pos.y, thisx->world.pos.z,
0, rotY, 0, (OBJMAKEKINSUTA_GET_1F(thisx) << 2) | 0xFF01);
@@ -95,11 +95,11 @@ void func_8099FB64(Actor* thisx, PlayState* play) {
actor->parent = thisx;
if (rotCheck) {
actor->velocity.y = 10.0f;
- actor->speedXZ = 3.0f;
+ actor->speed = 3.0f;
} else {
speedXZ = sqrtf((destVec.x * destVec.x) + (destVec.z * destVec.z));
actor->velocity.y = (4 * destVec.y) + 4.0f;
- actor->speedXZ = (2 * speedXZ) + 2.0f;
+ actor->speed = (2 * speedXZ) + 2.0f;
}
}
}
@@ -109,11 +109,11 @@ void ObjMakekinsuta_Update(Actor* thisx, PlayState* play) {
if (Flags_GetSwitch(play, OBJMAKEKINSUTA_GET_SWITCH_FLAGS(thisx))) {
this->actor.update = func_8099FD7C;
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
} else {
if (this->unk144 >= 0) {
if (this->unk144 == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALGOLD_ROLL);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALGOLD_ROLL);
if (Rand_ZeroOne() < 0.1f) {
this->unk144 = Rand_S16Offset(0x28, 0x50);
} else {
@@ -127,15 +127,15 @@ void ObjMakekinsuta_Update(Actor* thisx, PlayState* play) {
}
void func_8099FD7C(Actor* thisx, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(thisx->cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(thisx->cutscene, thisx);
- if (thisx->cutscene >= 0) {
- func_800B7298(play, thisx, 4);
+ if (CutsceneManager_IsNext(thisx->csId)) {
+ CutsceneManager_StartWithPlayerCs(thisx->csId, thisx);
+ if (thisx->csId >= 0) {
+ func_800B7298(play, thisx, PLAYER_CSMODE_4);
}
func_8099FB64(thisx, play);
thisx->update = Actor_Noop;
thisx->flags &= ~ACTOR_FLAG_10;
} else {
- ActorCutscene_SetIntentToPlay(thisx->cutscene);
+ CutsceneManager_Queue(thisx->csId);
}
}
diff --git a/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.h b/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.h
index d5bc998f0..17c9220e2 100644
--- a/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.h
+++ b/src/overlays/actors/ovl_Obj_Makekinsuta/z_obj_makekinsuta.h
@@ -15,6 +15,4 @@ typedef struct ObjMakekinsuta {
/* 0x144 */ s8 unk144;
} ObjMakekinsuta; // size = 0x148
-extern const ActorInit Obj_Makekinsuta_InitVars;
-
#endif // Z_OBJ_MAKEKINSUTA_H
diff --git a/src/overlays/actors/ovl_Obj_Makeoshihiki/overlay.cfg b/src/overlays/actors/ovl_Obj_Makeoshihiki/overlay.cfg
deleted file mode 100644
index 7d4fbe22d..000000000
--- a/src/overlays/actors/ovl_Obj_Makeoshihiki/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Makeoshihiki
-z_obj_makeoshihiki.c
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 b5f9d67b2..bb7d30f69 100644
--- a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c
+++ b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c
@@ -13,7 +13,7 @@
void ObjMakeoshihiki_Init(Actor* thisx, PlayState* play);
void ObjMakeoshihiki_Update(Actor* thisx, PlayState* play);
-const ActorInit Obj_Makeoshihiki_InitVars = {
+ActorInit Obj_Makeoshihiki_InitVars = {
ACTOR_OBJ_MAKEOSHIHIKI,
ACTORCAT_PROP,
FLAGS,
@@ -68,7 +68,7 @@ void ObjMakeoshihiki_Init(Actor* thisx, PlayState* play) {
childPoint = &this->pathPoints[childPointIndex];
if (Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_OBJ_OSHIHIKI, childPoint->x, childPoint->y,
childPoint->z, 0, 0, 0, 0xFFF1) == NULL) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
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 8a419c550..47fbe831b 100644
--- a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h
+++ b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h
@@ -15,6 +15,4 @@ typedef struct ObjMakeoshihiki {
/* 0x148 */ s32 pathCount;
} ObjMakeoshihiki; // size = 0x14C
-extern const ActorInit Obj_Makeoshihiki_InitVars;
-
#endif // Z_OBJ_MAKEOSHIHIKI_H
diff --git a/src/overlays/actors/ovl_Obj_Milk_Bin/overlay.cfg b/src/overlays/actors/ovl_Obj_Milk_Bin/overlay.cfg
deleted file mode 100644
index a5f995b32..000000000
--- a/src/overlays/actors/ovl_Obj_Milk_Bin/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Milk_Bin
-z_obj_milk_bin.c
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 e1b1bc1b9..8ff6e8455 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
@@ -16,7 +16,7 @@ void ObjMilkBin_Destroy(Actor* thisx, PlayState* play);
void ObjMilkBin_Update(Actor* thisx, PlayState* play2);
void ObjMilkBin_Draw(Actor* thisx, PlayState* play);
-const ActorInit Obj_Milk_Bin_InitVars = {
+ActorInit Obj_Milk_Bin_InitVars = {
ACTOR_OBJ_MILK_BIN,
ACTORCAT_PROP,
FLAGS,
@@ -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) && !(gSaveContext.save.weekEventReg[52] & 1)) {
+ if ((this->type == OBJ_MILK_BIN_TYPE_2) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) {
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 (gSaveContext.save.weekEventReg[22] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
if (((gSaveContext.save.day == 2) && (gSaveContext.save.isNight == 1)) || (gSaveContext.save.day >= 3)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
}
} else if (this->type == OBJ_MILK_BIN_TYPE_2) {
- if (gSaveContext.save.weekEventReg[52] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) {
this->disableDraw &= ~1;
} else {
this->disableDraw |= 1;
diff --git a/src/overlays/actors/ovl_Obj_Milk_Bin/z_obj_milk_bin.h b/src/overlays/actors/ovl_Obj_Milk_Bin/z_obj_milk_bin.h
index c5f313661..9eb0d298d 100644
--- a/src/overlays/actors/ovl_Obj_Milk_Bin/z_obj_milk_bin.h
+++ b/src/overlays/actors/ovl_Obj_Milk_Bin/z_obj_milk_bin.h
@@ -13,8 +13,6 @@ typedef struct ObjMilkBin {
/* 0x198 */ s32 type;
} ObjMilkBin; // size = 0x19C
-extern const ActorInit Obj_Milk_Bin_InitVars;
-
typedef enum {
/* 0 */ OBJ_MILK_BIN_TYPE_DEFAULT,
/* 1 */ OBJ_MILK_BIN_TYPE_1, // This actor will kill itself if the player has obtained the milk bottle and the current time is the night of the second day onwards.
diff --git a/src/overlays/actors/ovl_Obj_Mine/overlay.cfg b/src/overlays/actors/ovl_Obj_Mine/overlay.cfg
deleted file mode 100644
index 7d0fb28e9..000000000
--- a/src/overlays/actors/ovl_Obj_Mine/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Mine
-z_obj_mine.c
diff --git a/src/overlays/actors/ovl_Obj_Mine/z_obj_mine.c b/src/overlays/actors/ovl_Obj_Mine/z_obj_mine.c
index 429333546..556f72b67 100644
--- a/src/overlays/actors/ovl_Obj_Mine/z_obj_mine.c
+++ b/src/overlays/actors/ovl_Obj_Mine/z_obj_mine.c
@@ -16,7 +16,7 @@ void ObjMine_Update(Actor* thisx, PlayState* play);
void ObjMine_Draw(Actor* thisx, PlayState* play);
#if 0
-const ActorInit Obj_Mine_InitVars = {
+ActorInit Obj_Mine_InitVars = {
ACTOR_OBJ_MINE,
ACTORCAT_PROP,
FLAGS,
diff --git a/src/overlays/actors/ovl_Obj_Mine/z_obj_mine.h b/src/overlays/actors/ovl_Obj_Mine/z_obj_mine.h
index c2ce765f9..257a6ff3a 100644
--- a/src/overlays/actors/ovl_Obj_Mine/z_obj_mine.h
+++ b/src/overlays/actors/ovl_Obj_Mine/z_obj_mine.h
@@ -14,6 +14,4 @@ typedef struct ObjMine {
/* 0x01A8 */ char unk_1A8[0x120C];
} ObjMine; // size = 0x13B4
-extern const ActorInit Obj_Mine_InitVars;
-
#endif // Z_OBJ_MINE_H
diff --git a/src/overlays/actors/ovl_Obj_Moon_Stone/overlay.cfg b/src/overlays/actors/ovl_Obj_Moon_Stone/overlay.cfg
deleted file mode 100644
index 0b388c672..000000000
--- a/src/overlays/actors/ovl_Obj_Moon_Stone/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Moon_Stone
-z_obj_moon_stone.c
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 31ba1fa63..e1ee3cee5 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
@@ -25,7 +25,7 @@ void func_80C06768(ObjMoonStone* this, PlayState* play);
void func_80C0685C(ObjMoonStone* this);
void func_80C06870(ObjMoonStone* this, PlayState* play);
-const ActorInit Obj_Moon_Stone_InitVars = {
+ActorInit Obj_Moon_Stone_InitVars = {
ACTOR_OBJ_MOON_STONE,
ACTORCAT_PROP,
FLAGS,
@@ -49,15 +49,15 @@ void ObjMoonStone_Init(Actor* thisx, PlayState* play) {
this->actor.colChkInfo.health = 0;
this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8);
func_80C0662C(this);
- } else if (!(gSaveContext.save.weekEventReg[74] & 0x40)) {
- if ((gSaveContext.save.weekEventReg[74] & 0x80)) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_74_40)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_74_80)) {
Actor_Spawn(&play->actorCtx, play, 1, this->actor.world.pos.x, this->actor.world.pos.y,
this->actor.world.pos.z, 0, 0, 0, -1);
}
this->actor.flags &= ~ACTOR_FLAG_1;
func_80C0673C(this);
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -97,14 +97,14 @@ void func_80C0670C(ObjMoonStone* this, PlayState* play) {
}
void func_80C0673C(ObjMoonStone* this) {
- if (!(gSaveContext.save.weekEventReg[74] & 0x80)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_74_80)) {
this->actor.draw = NULL;
}
this->actionFunc = func_80C06768;
}
void func_80C06768(ObjMoonStone* this, PlayState* play) {
- if ((gSaveContext.save.weekEventReg[74] & 0x80)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_74_80)) {
if (this->actor.draw == NULL) {
this->actor.draw = ObjMoonStone_Draw;
Actor_Spawn(&play->actorCtx, play, 1, this->actor.world.pos.x, this->actor.world.pos.y,
@@ -117,7 +117,7 @@ void func_80C06768(ObjMoonStone* this, PlayState* play) {
this->actor.draw = NULL;
func_80C0685C(this);
} else if (this->actor.xzDistToPlayer < 25.0f) {
- Actor_PickUp(&this->actor, play, GI_MOON_TEAR, 100.0f, 30.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_MOON_TEAR, 100.0f, 30.0f);
}
}
}
@@ -128,8 +128,8 @@ void func_80C0685C(ObjMoonStone* this) {
void func_80C06870(ObjMoonStone* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) {
- gSaveContext.save.weekEventReg[74] |= 0x40;
- Actor_MarkForDeath(&this->actor);
+ SET_WEEKEVENTREG(WEEKEVENTREG_74_40);
+ Actor_Kill(&this->actor);
}
}
@@ -137,7 +137,7 @@ void ObjMoonStone_Update(Actor* thisx, PlayState* play) {
ObjMoonStone* this = THIS;
Player* player = GET_PLAYER(play);
- if (!(player->stateFlags1 & 0x10000282)) {
+ if (!(player->stateFlags1 & (PLAYER_STATE1_2 | PLAYER_STATE1_80 | PLAYER_STATE1_200 | PLAYER_STATE1_10000000))) {
this->actionFunc(this, play);
}
}
diff --git a/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.h b/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.h
index 375d40fad..dfb9835a6 100644
--- a/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.h
+++ b/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.h
@@ -14,6 +14,4 @@ typedef struct ObjMoonStone {
/* 0x194 */ s16 unk194;
} ObjMoonStone; // size = 0x198
-extern const ActorInit Obj_Moon_Stone_InitVars;
-
#endif // Z_OBJ_MOON_STONE_H
diff --git a/src/overlays/actors/ovl_Obj_Mu_Pict/overlay.cfg b/src/overlays/actors/ovl_Obj_Mu_Pict/overlay.cfg
deleted file mode 100644
index 77c10a6df..000000000
--- a/src/overlays/actors/ovl_Obj_Mu_Pict/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Mu_Pict
-z_obj_mu_pict.c
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 3b1b72f2f..b0ac87b4e 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
@@ -25,7 +25,7 @@ void func_80C06D90(ObjMuPict* this, PlayState* play);
void func_80C06DC8(ObjMuPict* this, PlayState* play);
void func_80C06E88(ObjMuPict* this, PlayState* play);
-const ActorInit Obj_Mu_Pict_InitVars = {
+ActorInit Obj_Mu_Pict_InitVars = {
ACTOR_OBJ_MU_PICT,
ACTORCAT_PROP,
FLAGS,
@@ -40,8 +40,8 @@ const ActorInit Obj_Mu_Pict_InitVars = {
void ObjMuPict_Init(Actor* thisx, PlayState* play) {
ObjMuPict* this = THIS;
- if (!(gSaveContext.save.weekEventReg[75] & 0x20) && !(gSaveContext.save.weekEventReg[52] & 0x20)) {
- Actor_MarkForDeath(&this->actor);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE)) {
+ Actor_Kill(&this->actor);
}
func_80C06D90(this, play);
@@ -64,14 +64,14 @@ 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.cutscene < 0) {
+ if (this->actor.csId < 0) {
func_80C06DC8(this, play);
func_80C06CC4(this);
} else {
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
func_80C06DC8(this, play);
func_80C06C54(this);
}
@@ -85,11 +85,11 @@ void func_80C06C54(ObjMuPict* this) {
}
void func_80C06C68(ObjMuPict* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_Start(this->actor.cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_Start(this->actor.csId, &this->actor);
func_80C06CC4(this);
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
@@ -113,8 +113,8 @@ void func_80C06CD8(ObjMuPict* this, PlayState* play) {
case TEXT_STATE_DONE:
if (Message_ShouldAdvance(play)) {
func_80C06B5C(this);
- if (this->actor.cutscene >= 0) {
- ActorCutscene_Stop(this->actor.cutscene);
+ if (this->actor.csId >= 0) {
+ CutsceneManager_Stop(this->actor.csId);
}
}
break;
diff --git a/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.h b/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.h
index f5417d9db..98902bfb7 100644
--- a/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.h
+++ b/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.h
@@ -17,6 +17,4 @@ typedef struct ObjMuPict {
/* 0x14C */ u16 textId;
} ObjMuPict; // size = 0x150
-extern const ActorInit Obj_Mu_Pict_InitVars;
-
#endif // Z_OBJ_MU_PICT_H
diff --git a/src/overlays/actors/ovl_Obj_Mure/overlay.cfg b/src/overlays/actors/ovl_Obj_Mure/overlay.cfg
deleted file mode 100644
index 99c755b9a..000000000
--- a/src/overlays/actors/ovl_Obj_Mure/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Mure
-z_obj_mure.c
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 9a8072edd..95c43a4bf 100644
--- a/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c
+++ b/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c
@@ -20,7 +20,7 @@ void ObjMure_ActiveState(ObjMure* this, PlayState* play);
void ObjMure_KillActors(ObjMure* this, PlayState* play);
void ObjMure_CheckChildren(ObjMure* this, PlayState* play);
-const ActorInit Obj_Mure_InitVars = {
+ActorInit Obj_Mure_InitVars = {
ACTOR_OBJ_MURE,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -96,15 +96,15 @@ void ObjMure_Init(Actor* thisx, PlayState* play) {
this->svNum = OBJ_MURE_GET_SVNUM(&this->actor);
this->type = OBJ_MURE_GET_TYPE(&this->actor);
if (this->ptn >= 4) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
if (this->type >= OBJMURE_TYPE_MAX) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
if (!func_808D7928(this, play)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
this->actionFunc = ObjMure_InitialAction;
@@ -139,8 +139,8 @@ void ObjMure_SpawnActors0(Actor* thisx, PlayState* play) {
ObjMure_GetSpawnPos(&pos, &this->actor.world.pos, this->ptn, i);
this->children[i] = Actor_SpawnAsChildAndCutscene(
&play->actorCtx, play, sSpawnActorIds[this->type], pos.x, pos.y, pos.z, this->actor.world.rot.x,
- this->actor.world.rot.y, this->actor.world.rot.z, sSpawnParams[this->type], this->actor.cutscene,
- this->actor.unk20, NULL);
+ this->actor.world.rot.y, this->actor.world.rot.z, sSpawnParams[this->type], this->actor.csId,
+ this->actor.halfDaysBits, NULL);
if (this->children[i] != NULL) {
if (this->type == 0x90) {
((ObjMureChild*)this->children[i])->unk_197 = 1;
@@ -152,8 +152,8 @@ void ObjMure_SpawnActors0(Actor* thisx, PlayState* play) {
ObjMure_GetSpawnPos(&pos, &this->actor.world.pos, this->ptn, i);
this->children[i] = Actor_SpawnAsChildAndCutscene(
&play->actorCtx, play, sSpawnActorIds[this->type], pos.x, pos.y, pos.z, this->actor.world.rot.x,
- this->actor.world.rot.y, this->actor.world.rot.z, sSpawnParams[this->type], this->actor.cutscene,
- this->actor.unk20, NULL);
+ this->actor.world.rot.y, this->actor.world.rot.z, sSpawnParams[this->type], this->actor.csId,
+ this->actor.halfDaysBits, NULL);
if (this->children[i] != NULL) {
this->children[i]->room = this->actor.room;
}
@@ -174,8 +174,8 @@ void ObjMure_SpawnActors1(ObjMure* this, PlayState* play2) {
this->children[i] = Actor_SpawnAsChildAndCutscene(
&play2->actorCtx, play, sSpawnActorIds[this->type], spawnPos.x, spawnPos.y, spawnPos.z, actor->world.rot.x,
actor->world.rot.y, actor->world.rot.z,
- (this->type == OBJMURE_TYPE_BUTTERFLY && i == 0) ? 1 : sSpawnParams[this->type], this->actor.cutscene,
- this->actor.unk20, NULL);
+ (this->type == OBJMURE_TYPE_BUTTERFLY && i == 0) ? 1 : sSpawnParams[this->type], this->actor.csId,
+ this->actor.halfDaysBits, NULL);
if (this->children[i] != NULL) {
this->childrenStates[i] = OBJMURE_CHILD_STATE_0;
this->children[i]->room = actor->room;
@@ -207,7 +207,7 @@ void ObjMure_KillActorsImpl(ObjMure* this, PlayState* play) {
break;
case OBJMURE_CHILD_STATE_2:
if (this->children[i] != NULL) {
- Actor_MarkForDeath(this->children[i]);
+ Actor_Kill(this->children[i]);
this->children[i] = NULL;
}
break;
@@ -216,7 +216,7 @@ void ObjMure_KillActorsImpl(ObjMure* this, PlayState* play) {
if (Actor_HasParent(this->children[i], play)) {
this->children[i] = NULL;
} else {
- Actor_MarkForDeath(this->children[i]);
+ Actor_Kill(this->children[i]);
this->children[i] = NULL;
}
}
diff --git a/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.h b/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.h
index bc3669697..7bf2d40b7 100644
--- a/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.h
+++ b/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.h
@@ -29,8 +29,6 @@ typedef struct ObjMure {
/* 0x1A0 */ s16 unk_1A0;
} ObjMure; // size = 0x1A4
-extern const ActorInit Obj_Mure_InitVars;
-
#define OBJ_MURE_GET_CHNUM(thisx) (((thisx)->params >> 12) & 0xF)
#define OBJ_MURE_GET_PTN(thisx) (((thisx)->params >> 8) & 0x7)
#define OBJ_MURE_GET_SVNUM(thisx) (((thisx)->params >> 5) & 0x3)
diff --git a/src/overlays/actors/ovl_Obj_Mure2/overlay.cfg b/src/overlays/actors/ovl_Obj_Mure2/overlay.cfg
deleted file mode 100644
index dcb1eb3ac..000000000
--- a/src/overlays/actors/ovl_Obj_Mure2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Mure2
-z_obj_mure2.c
diff --git a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c
index 31c5b50aa..bda4dc258 100644
--- a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c
+++ b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c
@@ -18,7 +18,7 @@ void func_809613FC(ObjMure2* this, PlayState* play);
void func_80961490(ObjMure2* this, PlayState* play);
#if 0
-const ActorInit Obj_Mure2_InitVars = {
+ActorInit Obj_Mure2_InitVars = {
ACTOR_OBJ_MURE2,
ACTORCAT_PROP,
FLAGS,
diff --git a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.h b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.h
index bf13c3fbc..f70d45f1e 100644
--- a/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.h
+++ b/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.h
@@ -13,6 +13,4 @@ typedef struct ObjMure2 {
/* 0x148 */ char unk_148[0x38];
} ObjMure2; // size = 0x180
-extern const ActorInit Obj_Mure2_InitVars;
-
#endif // Z_OBJ_MURE2_H
diff --git a/src/overlays/actors/ovl_Obj_Mure3/overlay.cfg b/src/overlays/actors/ovl_Obj_Mure3/overlay.cfg
deleted file mode 100644
index 7774442db..000000000
--- a/src/overlays/actors/ovl_Obj_Mure3/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Mure3
-z_obj_mure3.c
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 edefba93a..c8f657c13 100644
--- a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c
+++ b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c
@@ -21,7 +21,7 @@ void func_8098F5E4(ObjMure3* this, PlayState* play);
void func_8098F66C(ObjMure3* this);
void func_8098F680(ObjMure3* this, PlayState* play);
-const ActorInit Obj_Mure3_InitVars = {
+ActorInit Obj_Mure3_InitVars = {
ACTOR_OBJ_MURE3,
ACTORCAT_BG,
FLAGS,
@@ -107,7 +107,7 @@ void func_8098F220(ObjMure3* this, PlayState* play) {
}
}
-void func_8098F364(ObjMure3* this, s32 play) {
+void func_8098F364(ObjMure3* this, PlayState* play) {
s16 count = sRupeeCounts[OBJMURE3_PARAMS_RUPEEINDEX(&this->actor)];
s32 i;
EnItem00** collectible;
@@ -118,7 +118,7 @@ void func_8098F364(ObjMure3* this, s32 play) {
if (((*collectible)->unk1A4 != 0) || ((*collectible)->actor.update == NULL)) {
this->unk164 |= (1 << i);
} else {
- Actor_MarkForDeath(&(*collectible)->actor);
+ Actor_Kill(&(*collectible)->actor);
}
}
*collectible = NULL;
@@ -148,7 +148,7 @@ void ObjMure3_Init(Actor* thisx, PlayState* play) {
ObjMure3* this = THIS;
if (Flags_GetSwitch(play, OBJMURE3_PARAMS_7F(&this->actor))) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
Actor_ProcessInitChain(&this->actor, sInitChain);
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 2b6c4f891..8715e4308 100644
--- a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.h
+++ b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.h
@@ -19,6 +19,4 @@ typedef struct ObjMure3 {
/* 0x164 */ u16 unk164;
} ObjMure3; // size = 0x168
-extern const ActorInit Obj_Mure3_InitVars;
-
#endif // Z_OBJ_MURE3_H
diff --git a/src/overlays/actors/ovl_Obj_Nozoki/overlay.cfg b/src/overlays/actors/ovl_Obj_Nozoki/overlay.cfg
deleted file mode 100644
index 9173a8055..000000000
--- a/src/overlays/actors/ovl_Obj_Nozoki/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Nozoki
-z_obj_nozoki.c
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 7cc7add22..7f7f9550a 100644
--- a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c
+++ b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c
@@ -32,7 +32,7 @@ s32 D_80BA36B0;
s32 D_80BA36B4;
f32 D_80BA36B8;
-const ActorInit Obj_Nozoki_InitVars = {
+ActorInit Obj_Nozoki_InitVars = {
ACTOR_OBJ_NOZOKI,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -69,7 +69,7 @@ void ObjNozoki_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
this->dyna.actor.shape.rot.x = 0;
this->dyna.actor.shape.rot.z = 0;
- this->unk_15F = this->dyna.actor.cutscene;
+ this->csId = this->dyna.actor.csId;
if (play->sceneId == SCENE_AYASHIISHOP) {
this->unk_15C = 4;
@@ -96,7 +96,7 @@ void func_80BA2514(ObjNozoki* this, PlayState* play) {
s32 sp24 = Object_GetIndex(&play->objectCtx, D_80BA34B8[this->unk_15C]);
if (sp24 < 0) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
@@ -107,7 +107,7 @@ void func_80BA2514(ObjNozoki* this, PlayState* play) {
if (this->unk_15C == 0) {
Actor_SetObjectDependency(play, &this->dyna.actor);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_secom_obj_Colheader_0001C0);
- if (ActorCutscene_GetAdditionalCutscene(this->unk_15F) >= 0) {
+ if (CutsceneManager_GetAdditionalCsId(this->csId) >= 0) {
this->dyna.actor.params |= OBJNOZOKI_400;
}
ObjNozoki_SetupAction(this, func_80BA27C4);
@@ -129,16 +129,16 @@ void func_80BA2514(ObjNozoki* this, PlayState* play) {
}
s32 func_80BA26A8(ObjNozoki* this) {
- if (this->unk_15F < 0) {
+ if (this->csId < 0) {
return true;
}
- if (ActorCutscene_GetCanPlayNext(this->unk_15F)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_15F, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->csId)) {
+ CutsceneManager_StartWithPlayerCs(this->csId, &this->dyna.actor);
return true;
}
- ActorCutscene_SetIntentToPlay(this->unk_15F);
+ CutsceneManager_Queue(this->csId);
return false;
}
@@ -185,7 +185,7 @@ void func_80BA27C4(ObjNozoki* this, PlayState* play) {
this->unk_15E = 25;
play_sound(NA_SE_SY_SECOM_WARNING);
} else {
- this->unk_15E = ActorCutscene_GetLength(this->unk_15F);
+ this->unk_15E = CutsceneManager_GetLength(this->csId);
if (this->unk_15E < 0) {
this->unk_15E = 50;
}
@@ -199,7 +199,7 @@ void func_80BA27C4(ObjNozoki* this, PlayState* play) {
void func_80BA28DC(ObjNozoki* this, PlayState* play) {
if (this->unk_15E != 0) {
if (DECR(this->unk_15E) == 0) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_SLIDE_DOOR_OPEN);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_SLIDE_DOOR_OPEN);
}
return;
}
@@ -213,25 +213,25 @@ void func_80BA28DC(ObjNozoki* this, PlayState* play) {
return;
}
} else if (Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG1(&this->dyna.actor))) {
- s32 cs = this->dyna.actor.cutscene;
+ s32 csId = this->dyna.actor.csId;
- if (cs == this->unk_15F) {
+ if (csId == this->csId) {
if (OBJNOZOKI_GET_400(&this->dyna.actor)) {
Vec3f sp28;
Actor_OffsetOfPointInActorCoords(&this->dyna.actor, &sp28, &GET_PLAYER(play)->actor.world.pos);
if (sp28.z < -20.0f) {
- this->unk_15F = ActorCutscene_GetAdditionalCutscene(this->unk_15F);
+ this->csId = CutsceneManager_GetAdditionalCsId(this->csId);
}
}
} else if (D_80BA36B4 == 0) {
if (func_80BA26A8(this)) {
D_80BA36B4 = 1;
}
- } else if (ActorCutscene_GetCurrentIndex() != this->unk_15F) {
- this->unk_15F = cs;
+ } else if (CutsceneManager_GetCurrentCsId() != this->csId) {
+ this->csId = csId;
this->dyna.actor.params &= ~OBJNOZOKI_400;
- Audio_QueueSeqCmd(0x881A);
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_ENEMY | 0x800 | SEQ_FLAG_ASYNC);
}
return;
}
@@ -239,7 +239,7 @@ void func_80BA28DC(ObjNozoki* this, PlayState* play) {
ObjNozoki_SetupAction(this, func_80BA2AB4);
this->dyna.actor.velocity.y = 0.0f;
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_SLIDE_DOOR_CLOSE);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_SLIDE_DOOR_CLOSE);
}
void func_80BA2AB4(ObjNozoki* this, PlayState* play) {
@@ -275,13 +275,13 @@ void func_80BA2BA4(ObjNozoki* this, PlayState* play) {
s32 func_80BA2C28(ObjNozoki* this) {
s32 i;
- s16 cs = this->unk_15F;
+ s16 csId = this->csId;
for (i = 0; i < 3; i++) {
- if (ActorCutscene_GetCurrentIndex() == cs) {
+ if (CutsceneManager_GetCurrentCsId() == csId) {
return i;
}
- cs = ActorCutscene_GetAdditionalCutscene(cs);
+ csId = CutsceneManager_GetAdditionalCsId(csId);
}
return -1;
@@ -314,21 +314,21 @@ void func_80BA2C94(ObjNozoki* this, PlayState* play) {
Flags_UnsetSwitch(play, this->dyna.actor.world.rot.x);
}
- Math_StepToF(&this->dyna.actor.speedXZ, D_80BA34E4[this->unk_15D], 0.1f);
+ Math_StepToF(&this->dyna.actor.speed, D_80BA34E4[this->unk_15D], 0.1f);
if ((play->actorCtx.flags & ACTORCTX_FLAG_6) || (play->actorCtx.flags & ACTORCTX_FLAG_5)) {
temp_f0 = 0.5f;
} else {
- temp_f0 = this->dyna.actor.speedXZ;
+ temp_f0 = this->dyna.actor.speed;
}
sp34 = Math_Vec3f_StepToXZ(&this->dyna.actor.world.pos, &this->dyna.actor.home.pos, temp_f0);
- D_80BA36B8 += this->dyna.actor.speedXZ;
+ D_80BA36B8 += this->dyna.actor.speed;
if (play->actorCtx.flags & ACTORCTX_FLAG_6) {
if (sp34 <= 5.0f) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
} else if (!(play->actorCtx.flags & ACTORCTX_FLAG_5) && (GET_PLAYER(play)->actor.id == ACTOR_PLAYER) &&
Flags_GetSwitch(play, OBJNOZOKI_GET_SWITCHFLAG2(&this->dyna.actor)) && (sp38 < 20.0f)) {
@@ -347,7 +347,7 @@ void func_80BA2C94(ObjNozoki* this, PlayState* play) {
sp38 = this->dyna.actor.home.pos.y - this->dyna.actor.world.pos.y;
if (sp38 >= 100.0f) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
this->dyna.actor.shape.rot.x = -0x1F40 - (s16)(sp38 * 400.0f);
@@ -355,14 +355,14 @@ void func_80BA2C94(ObjNozoki* this, PlayState* play) {
}
}
- this->dyna.actor.velocity.x += this->dyna.actor.speedXZ * 0.66f;
+ this->dyna.actor.velocity.x += this->dyna.actor.speed * 0.66f;
if (this->dyna.actor.velocity.x >= 0x10000) {
this->dyna.actor.velocity.x -= 0x10000;
}
play->roomCtx.unk7A[0] = this->dyna.actor.velocity.x;
- func_8019FAD8(&gSfxDefaultPos, NA_SE_EV_SECOM_CONVEYOR - SFX_FLAG, this->dyna.actor.speedXZ);
+ func_8019FAD8(&gSfxDefaultPos, NA_SE_EV_SECOM_CONVEYOR - SFX_FLAG, this->dyna.actor.speed);
}
void func_80BA3044(ObjNozoki* this, PlayState* play) {
@@ -393,10 +393,10 @@ void func_80BA311C(ObjNozoki* this, PlayState* play) {
} else if (this->unk_15D == 1) {
if (D_80BA36B8 > 40.0f) {
this->unk_15D = 2;
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_PL_SIT_ON_HORSE);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_PL_SIT_ON_HORSE);
} else if (this->unk_15E != 0) {
if (DECR(this->unk_15E) == 0) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_CONVEYOR_SHUTTER_OPEN);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_CONVEYOR_SHUTTER_OPEN);
}
} else {
Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y + 50.0f, 4.0f);
@@ -407,17 +407,17 @@ void func_80BA311C(ObjNozoki* this, PlayState* play) {
}
void func_80BA3230(ObjNozoki* this, PlayState* play) {
- if (gSaveContext.save.weekEventReg[64] & 0x20) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_64_20)) {
Actor* npc = play->actorCtx.actorLists[ACTORCAT_NPC].first;
Actor* test3 = SubS_FindActor(play, npc, ACTORCAT_NPC, ACTOR_EN_TEST3);
if ((test3 != NULL) && (test3->draw != NULL)) {
- if ((play->curSpawn == 3) && !(gSaveContext.save.weekEventReg[64] & 0x40)) {
+ if ((play->curSpawn == 3) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_64_40)) {
this->dyna.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10000);
this->dyna.actor.textId = 0x297A;
} else {
this->dyna.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8);
- if (gSaveContext.save.weekEventReg[64] & 0x40) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_64_40)) {
this->dyna.actor.textId = 0;
} else {
this->dyna.actor.textId = 0x2979;
@@ -434,9 +434,9 @@ void func_80BA3230(ObjNozoki* this, PlayState* play) {
}
void func_80BA3344(ObjNozoki* this, PlayState* play) {
- if ((play->curSpawn == 3) && !(gSaveContext.save.weekEventReg[64] & 0x40)) {
+ if ((play->curSpawn == 3) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_64_40)) {
if (Actor_TextboxIsClosing(&this->dyna.actor, play)) {
- gSaveContext.save.weekEventReg[64] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_64_40);
this->dyna.actor.flags &= ~ACTOR_FLAG_10000;
ObjNozoki_SetupAction(this, func_80BA3230);
}
diff --git a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.h b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.h
index 7b4c3a5b8..8bfc9818e 100644
--- a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.h
+++ b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.h
@@ -20,10 +20,8 @@ typedef struct ObjNozoki {
/* 0x15C */ u8 unk_15C;
/* 0x15D */ u8 unk_15D;
/* 0x15E */ s8 unk_15E;
- /* 0x15F */ s8 unk_15F;
+ /* 0x15F */ s8 csId;
/* 0x160 */ ObjNozokiActionFunc actionFunc;
} ObjNozoki; // size = 0x164
-extern const ActorInit Obj_Nozoki_InitVars;
-
#endif // Z_OBJ_NOZOKI_H
diff --git a/src/overlays/actors/ovl_Obj_Ocarinalift/overlay.cfg b/src/overlays/actors/ovl_Obj_Ocarinalift/overlay.cfg
deleted file mode 100644
index 3d9eef7c4..000000000
--- a/src/overlays/actors/ovl_Obj_Ocarinalift/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Ocarinalift
-z_obj_ocarinalift.c
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 b7a098b46..eab144cbd 100644
--- a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c
+++ b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c
@@ -31,7 +31,7 @@ void func_80AC9B5C(ObjOcarinalift* this, PlayState* play);
void func_80AC9C20(ObjOcarinalift* this);
void func_80AC9C48(ObjOcarinalift* this, PlayState* play);
-const ActorInit Obj_Ocarinalift_InitVars = {
+ActorInit Obj_Ocarinalift_InitVars = {
ACTOR_OBJ_OCARINALIFT,
ACTORCAT_BG,
FLAGS,
@@ -62,7 +62,7 @@ void ObjOcarinalift_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.world.rot.x = 0;
this->dyna.actor.shape.rot.z = 0;
this->dyna.actor.world.rot.z = 0;
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_raillift_Colheader_0048D0);
this->unk160 = thisx->home.rot.z * 0.1f;
if (this->unk160 < 0.01f) {
@@ -99,7 +99,7 @@ void func_80AC96A4(ObjOcarinalift* this, PlayState* play) {
void func_80AC96B4(ObjOcarinalift* this) {
this->actionFunc = func_80AC96D0;
- this->dyna.actor.speedXZ = 0.0f;
+ this->dyna.actor.speed = 0.0f;
}
void func_80AC96D0(ObjOcarinalift* this, PlayState* play) {
@@ -125,9 +125,9 @@ void func_80AC96D0(ObjOcarinalift* this, PlayState* play) {
phi_fa0 = this->unk160 * 0.16f;
}
- Math_StepToF(&thisx->speedXZ, phi_fv0, phi_fa0);
- if ((thisx->speedXZ + 0.05f) < magnitude) {
- Math_Vec3f_Scale(&thisx->velocity, thisx->speedXZ / magnitude);
+ Math_StepToF(&thisx->speed, phi_fv0, phi_fa0);
+ if ((thisx->speed + 0.05f) < magnitude) {
+ Math_Vec3f_Scale(&thisx->velocity, thisx->speed / magnitude);
thisx->world.pos.x += thisx->velocity.x;
thisx->world.pos.y += thisx->velocity.y;
thisx->world.pos.z += thisx->velocity.z;
@@ -135,7 +135,7 @@ void func_80AC96D0(ObjOcarinalift* this, PlayState* play) {
paramsC = OBJOCARINALIFT_GET_C(thisx);
sp34 = true;
this->unk168 += this->unk16C;
- thisx->speedXZ *= 0.4f;
+ thisx->speed *= 0.4f;
if (((this->unk168 >= this->unk164) && (this->unk16C > 0)) || ((this->unk168 <= 0) && (this->unk16C < 0))) {
if (paramsC == OBJOCARINALIFT_PARAMSC_0) {
this->unk16C = -this->unk16C;
@@ -153,7 +153,7 @@ void func_80AC96D0(ObjOcarinalift* this, PlayState* play) {
if (((this->unk170->x != temp_v1_2->x) || (this->unk170->y != temp_v1_2->y)) ||
(this->unk170->z != temp_v1_2->z)) {
func_80AC99C0(this);
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
sp34 = false;
} else if ((paramsC == OBJOCARINALIFT_PARAMSC_1) && (this->unk168 == OBJOCARINALIFT_GET_1F(thisx))) {
func_80AC9AB8(this);
@@ -173,9 +173,9 @@ void func_80AC99C0(ObjOcarinalift* this) {
}
void func_80AC99D4(ObjOcarinalift* this, PlayState* play) {
- if (!DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ if (!DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
func_80AC94C0(this, this->unk168);
- func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
if ((OBJOCARINALIFT_GET_C(&this->dyna.actor) == OBJOCARINALIFT_PARAMSC_1) &&
(this->unk168 == OBJOCARINALIFT_GET_1F(&this->dyna.actor))) {
func_80AC9AB8(this);
@@ -197,7 +197,7 @@ void func_80AC9A7C(ObjOcarinalift* this, PlayState* play) {
}
void func_80AC9AB8(ObjOcarinalift* this) {
- this->dyna.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_2000000 | ACTOR_FLAG_8000000);
+ this->dyna.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON);
this->actionFunc = func_80AC9AE0;
}
@@ -205,7 +205,7 @@ void func_80AC9AE0(ObjOcarinalift* this, PlayState* play) {
if (func_800B8718(&this->dyna.actor, &play->state)) {
func_80152434(play, 1);
func_80AC9B48(this);
- } else if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ } else if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
func_800B8804(&this->dyna.actor, play, 40.0f);
}
}
@@ -221,7 +221,7 @@ void func_80AC9B5C(ObjOcarinalift* this, PlayState* play) {
if (OBJOCARINALIFT_GET_C(&this->dyna.actor) != OBJOCARINALIFT_PARAMSC_1) {
Flags_SetSwitch(play, OBJOCARINALIFT_GET_SWITCH_FLAG(&this->dyna.actor));
}
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
func_80AC9C20(this);
}
} else {
@@ -234,17 +234,17 @@ void func_80AC9B5C(ObjOcarinalift* this, PlayState* play) {
}
void func_80AC9C20(ObjOcarinalift* this) {
- this->dyna.actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_2000000 | ACTOR_FLAG_8000000);
+ this->dyna.actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_2000000 | ACTOR_FLAG_CANT_LOCK_ON);
this->actionFunc = func_80AC9C48;
}
void func_80AC9C48(ObjOcarinalift* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
this->cutsceneTimer = 50;
func_80AC96B4(this);
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
@@ -256,7 +256,7 @@ void ObjOcarinalift_Update(Actor* thisx, PlayState* play) {
if (this->cutsceneTimer > 0) {
this->cutsceneTimer--;
if (this->cutsceneTimer == 0) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ CutsceneManager_Stop(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 a542fb840..3789383c2 100644
--- a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.h
+++ b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.h
@@ -29,6 +29,4 @@ typedef enum ObjOcarinaliftParams {
/* 0x1 */ OBJOCARINALIFT_PARAMSC_1
} ObjOcarinaliftParams;
-extern const ActorInit Obj_Ocarinalift_InitVars;
-
#endif // Z_OBJ_OCARINALIFT_H
diff --git a/src/overlays/actors/ovl_Obj_Oshihiki/overlay.cfg b/src/overlays/actors/ovl_Obj_Oshihiki/overlay.cfg
deleted file mode 100644
index 48cf4049f..000000000
--- a/src/overlays/actors/ovl_Obj_Oshihiki/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Oshihiki
-z_obj_oshihiki.c
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 4bfb5ba96..c3e180f50 100644
--- a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c
+++ b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c
@@ -25,7 +25,7 @@ void ObjOshihiki_Push(ObjOshihiki* this, PlayState* play);
void ObjOshihiki_SetupFall(ObjOshihiki* this, PlayState* play);
void ObjOshihiki_Fall(ObjOshihiki* this, PlayState* play);
-const ActorInit Obj_Oshihiki_InitVars = {
+ActorInit Obj_Oshihiki_InitVars = {
ACTOR_OBJ_OSHIHIKI,
ACTORCAT_PROP,
FLAGS,
@@ -196,7 +196,7 @@ void ObjOshihiki_SetColor(ObjOshihiki* this, PlayState* play) {
void ObjOshihiki_Init(Actor* thisx, PlayState* play) {
ObjOshihiki* this = THIS;
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
if ((OBJOSHIHIKI_GET_FF00(&this->dyna.actor) >= OBJOSHIHIKI_FF00_0) &&
(OBJOSHIHIKI_GET_FF00(&this->dyna.actor) < OBJOSHIHIKI_FF00_80)) {
@@ -205,7 +205,7 @@ void ObjOshihiki_Init(Actor* thisx, PlayState* play) {
case OBJOSHIHIKI_F_0:
case OBJOSHIHIKI_F_1:
case OBJOSHIHIKI_F_2:
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
} else {
@@ -213,7 +213,7 @@ void ObjOshihiki_Init(Actor* thisx, PlayState* play) {
case OBJOSHIHIKI_F_3:
case OBJOSHIHIKI_F_4:
case OBJOSHIHIKI_F_5:
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
}
@@ -293,7 +293,7 @@ s32 ObjOshihiki_CheckFloor(ObjOshihiki* this, PlayState* play) {
s32 ObjOshihiki_CheckGround(ObjOshihiki* this, PlayState* play) {
if (this->dyna.actor.world.pos.y <= BGCHECK_Y_MIN + 10.0f) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return false;
}
@@ -406,11 +406,11 @@ void ObjOshihiki_OnScene(ObjOshihiki* this, PlayState* play) {
return;
}
}
- player->stateFlags2 &= ~0x10;
+ player->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
}
} else if (fabsf(this->dyna.pushForce) > 0.001f) {
- player->stateFlags2 &= ~0x10;
+ player->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
}
}
@@ -439,8 +439,8 @@ void ObjOshihiki_OnActor(ObjOshihiki* this, PlayState* play) {
} else {
dyna = DynaPoly_GetActor(&play->colCtx, this->floorBgIds[this->highestFloor]);
if (dyna != NULL) {
- DynaPolyActor_SetRidingFallingState(dyna);
- DynaPolyActor_SetSwitchPressedState(dyna);
+ DynaPolyActor_SetActorOnTop(dyna);
+ DynaPolyActor_SetActorOnSwitch(dyna);
if ((this->timer <= 0) && (fabsf(this->dyna.pushForce) > 0.001f) &&
ObjOshihiki_StrongEnough(this, play) && ObjOshihiki_NoSwitchPress(this, dyna, play) &&
!ObjOshihiki_CheckWall(play, this->dyna.yRotation, this->dyna.pushForce, this)) {
@@ -456,9 +456,9 @@ void ObjOshihiki_OnActor(ObjOshihiki* this, PlayState* play) {
ObjOshihiki_SetupFall(this, play);
} else {
dyna = DynaPoly_GetActor(&play->colCtx, this->floorBgIds[this->highestFloor]);
- if ((dyna != NULL) && (dyna->flags & 1)) {
- DynaPolyActor_SetRidingFallingState(dyna);
- DynaPolyActor_SetSwitchPressedState(dyna);
+ if ((dyna != NULL) && (dyna->transformFlags & DYNA_TRANSFORM_POS)) {
+ DynaPolyActor_SetActorOnTop(dyna);
+ DynaPolyActor_SetActorOnSwitch(dyna);
this->dyna.actor.world.pos.y = this->dyna.actor.floorHeight;
} else {
ObjOshihiki_SetupFall(this, play);
@@ -466,7 +466,7 @@ void ObjOshihiki_OnActor(ObjOshihiki* this, PlayState* play) {
}
if (!sp20 && (fabsf(this->dyna.pushForce) > 0.001f)) {
- player->stateFlags2 &= ~0x10;
+ player->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
}
}
@@ -494,7 +494,7 @@ void ObjOshihiki_Push(ObjOshihiki* this, PlayState* play) {
if (!ObjOshihiki_CheckFloor(this, play)) {
this->dyna.actor.home.pos.x = this->dyna.actor.world.pos.x;
this->dyna.actor.home.pos.z = this->dyna.actor.world.pos.z;
- player->stateFlags2 &= ~0x10;
+ player->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
this->pushDist = 0.0f;
this->pushSpeed = 0.0f;
@@ -503,12 +503,12 @@ void ObjOshihiki_Push(ObjOshihiki* this, PlayState* play) {
player = GET_PLAYER(play);
if (ObjOshihiki_CheckWall(play, this->dyna.yRotation, this->dyna.pushForce, this)) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
}
this->dyna.actor.home.pos.x = this->dyna.actor.world.pos.x;
this->dyna.actor.home.pos.z = this->dyna.actor.world.pos.z;
- player->stateFlags2 &= ~0x10;
+ player->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
this->pushDist = 0.0f;
this->pushSpeed = 0.0f;
@@ -521,7 +521,7 @@ void ObjOshihiki_Push(ObjOshihiki* this, PlayState* play) {
}
}
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_ROCK_SLIDE - SFX_FLAG);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_ROCK_SLIDE - SFX_FLAG);
}
void ObjOshihiki_SetupFall(ObjOshihiki* this, PlayState* play) {
@@ -542,7 +542,7 @@ void ObjOshihiki_Fall(ObjOshihiki* this, PlayState* play) {
if (fabsf(this->dyna.pushForce) > 0.001f) {
this->dyna.pushForce = 0.0f;
- player->stateFlags2 &= ~0x10;
+ player->stateFlags2 &= ~PLAYER_STATE2_10;
}
Actor_MoveWithGravity(&this->dyna.actor);
@@ -553,10 +553,10 @@ void ObjOshihiki_Fall(ObjOshihiki* this, PlayState* play) {
} else {
ObjOshihiki_SetupOnActor(this, play);
}
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
- Actor_PlaySfxAtPos(&this->dyna.actor, SurfaceType_GetSfx(&play->colCtx, this->floorPolys[this->highestFloor],
- this->floorBgIds[this->highestFloor]) +
- SFX_FLAG);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_PL_WALK_GROUND + SurfaceType_GetSfxOffset(
+ &play->colCtx, this->floorPolys[this->highestFloor],
+ this->floorBgIds[this->highestFloor]));
}
}
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 ade27ca43..d2f61e2cf 100644
--- a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h
+++ b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h
@@ -60,6 +60,4 @@ typedef struct ObjOshihiki {
/* 0x1C8 */ AnimatedMaterial* texture;
} ObjOshihiki; // size = 0x1CC
-extern const ActorInit Obj_Oshihiki_InitVars;
-
#endif // Z_OBJ_OSHIHIKI_H
diff --git a/src/overlays/actors/ovl_Obj_Purify/overlay.cfg b/src/overlays/actors/ovl_Obj_Purify/overlay.cfg
deleted file mode 100644
index 966356722..000000000
--- a/src/overlays/actors/ovl_Obj_Purify/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Purify
-z_obj_purify.c
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 6255b2cbe..dbd0dfe31 100644
--- a/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c
+++ b/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c
@@ -41,7 +41,7 @@ typedef struct ObjPurifyInfo {
/* 0x24 */ s32 isDekuCity;
} ObjPurifyInfo; // size = 0x28
-const ActorInit Obj_Purify_InitVars = {
+ActorInit Obj_Purify_InitVars = {
ACTOR_OBJ_PURIFY,
ACTORCAT_BG,
FLAGS,
@@ -109,14 +109,11 @@ s32 ObjPurify_IsPurified(ObjPurify* this) {
ObjPurifyInfo* info = &sObjPurifyInfo[OBJPURIFY_GET_INFO_INDEX(&this->dyna.actor)];
if (!info->isDekuCity) {
- // woodfall temple wood flower unraveled
- if (gSaveContext.save.weekEventReg[12] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_01)) {
return true;
}
- }
- // woodfall temple purification cutscene watched
- else {
- if (gSaveContext.save.weekEventReg[20] & 2) {
+ } else {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) {
return true;
}
}
@@ -135,11 +132,11 @@ void ObjPurify_Init(Actor* thisx, PlayState* play) {
}
this->objIndex = Object_GetIndex(&play->objectCtx, info->objectId);
if (this->objIndex < 0) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
} else if (sp20 == 0) {
func_80A84EAC(this);
} else if (ObjPurify_IsPurified(this)) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
} else {
func_80A84EAC(this);
}
@@ -183,7 +180,7 @@ void func_80A84FA0(ObjPurify* this) {
void func_80A84FB4(ObjPurify* this, PlayState* play) {
if (ObjPurify_IsPurified(this)) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
}
diff --git a/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.h b/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.h
index 542938c80..2651bf049 100644
--- a/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.h
+++ b/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.h
@@ -16,8 +16,6 @@ typedef struct ObjPurify {
/* 0x168 */ f32 unk168[2];
} ObjPurify; // size = 0x170
-extern const ActorInit Obj_Purify_InitVars;
-
#define OBJPURIFY_GET_INFO_INDEX(thisx) ((thisx)->params & 0xF)
#define OBJPURIFY_GET_UNK_FLAG(thisx) (((thisx)->params >> 0xC) & 1)
diff --git a/src/overlays/actors/ovl_Obj_Pzlblock/overlay.cfg b/src/overlays/actors/ovl_Obj_Pzlblock/overlay.cfg
deleted file mode 100644
index d2b05c1ff..000000000
--- a/src/overlays/actors/ovl_Obj_Pzlblock/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Pzlblock
-z_obj_pzlblock.c
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 9f024b0c0..0b5021ccb 100644
--- a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c
+++ b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c
@@ -8,7 +8,7 @@
#include "objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h"
#include "objects/object_secom_obj/object_secom_obj.h"
-#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_4000000)
+#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_CAN_PRESS_SWITCH)
#define THIS ((ObjPzlblock*)thisx)
@@ -25,7 +25,7 @@ void func_809A3D38(ObjPzlblock* this, PlayState* play);
void func_809A3E58(Actor* thisx, PlayState* play);
void func_809A3F0C(Actor* thisx, PlayState* play);
-const ActorInit Obj_Pzlblock_InitVars = {
+ActorInit Obj_Pzlblock_InitVars = {
ACTOR_OBJ_PZLBLOCK,
ACTORCAT_PROP,
FLAGS,
@@ -244,7 +244,7 @@ void func_809A3A48(ObjPzlblock* this) {
this->unk_16E[2] = 0;
this->unk_16E[3] = 0;
this->unk_16E[0] = 0;
- this->unk_160 = 4;
+ this->updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_4;
}
void func_809A3A74(ObjPzlblock* this, PlayState* play) {
@@ -268,14 +268,14 @@ void func_809A3A74(ObjPzlblock* this, PlayState* play) {
}
}
- GET_PLAYER(play)->stateFlags2 &= ~0x10;
+ GET_PLAYER(play)->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
}
}
void func_809A3BA4(ObjPzlblock* this) {
this->actionFunc = func_809A3BC0;
- this->unk_160 = 5;
+ this->updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4;
}
void func_809A3BC0(ObjPzlblock* this, PlayState* play) {
@@ -287,19 +287,19 @@ void func_809A3BC0(ObjPzlblock* this, PlayState* play) {
if ((params == 4) || (params == 5) || (params == 6)) {
if (!func_809A35EC(this, this->unk_16C) || func_809A33E0(this, play, 0x5A)) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
}
} else if (func_809A35EC(this, this->unk_16C)) {
if (func_809A33E0(this, play, 0x5A)) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
}
} else {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
Flags_SetSwitch(play, OBJPZLBLOCK_GET_7F(&this->dyna.actor));
sp20 = 1;
}
- player->stateFlags2 &= ~0x10;
+ player->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
if (sp20 == 0) {
func_809A3A48(this);
@@ -313,12 +313,12 @@ void func_809A3BC0(ObjPzlblock* this, PlayState* play) {
void func_809A3D1C(ObjPzlblock* this) {
this->actionFunc = func_809A3D38;
- this->unk_160 = 4;
+ this->updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_4;
}
void func_809A3D38(ObjPzlblock* this, PlayState* play) {
if (fabsf(this->dyna.pushForce) > 0.1f) {
- GET_PLAYER(play)->stateFlags2 &= ~0x10;
+ GET_PLAYER(play)->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
}
}
@@ -328,7 +328,7 @@ void ObjPzlblock_Update(Actor* thisx, PlayState* play) {
ObjPzlblock* this = THIS;
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y;
- Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 15.0f, 30.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 15.0f, 30.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
if (Object_IsLoaded(&play->objectCtx, this->unk_17A)) {
ObjPzlblockStruct* sp2C = &D_809A4060[OBJPZLBLOCK_GET_1000(&this->dyna.actor)];
@@ -348,11 +348,12 @@ void func_809A3E58(Actor* thisx, PlayState* play) {
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y;
- if (this->unk_160 != 0) {
- Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 15.0f, 30.0f, 0.0f, this->unk_160);
+ if (this->updBgCheckInfoFlags != 0) {
+ Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 15.0f, 30.0f, 0.0f, this->updBgCheckInfoFlags);
if (((this->actionFunc == func_809A3A74) || (this->actionFunc == func_809A3D38)) &&
- (this->dyna.actor.bgCheckFlags & 1) && !DynaPoly_GetActor(&play->colCtx, this->dyna.actor.floorBgId)) {
- this->unk_160 = 0;
+ (this->dyna.actor.bgCheckFlags & BGCHECKFLAG_GROUND) &&
+ !DynaPoly_GetActor(&play->colCtx, this->dyna.actor.floorBgId)) {
+ this->updBgCheckInfoFlags = 0;
}
}
}
diff --git a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h
index c40800483..5cf67efcc 100644
--- a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h
+++ b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h
@@ -15,7 +15,7 @@ typedef void (*ObjPzlblockActionFunc)(struct ObjPzlblock*, PlayState*);
typedef struct ObjPzlblock {
/* 0x000 */ DynaPolyActor dyna;
/* 0x15C */ ObjPzlblockActionFunc actionFunc;
- /* 0x160 */ s32 unk_160;
+ /* 0x160 */ s32 updBgCheckInfoFlags;
/* 0x164 */ f32* unk_164;
/* 0x168 */ f32 unk_168;
/* 0x16C */ s16 unk_16C;
@@ -25,6 +25,4 @@ typedef struct ObjPzlblock {
/* 0x17A */ s8 unk_17A;
} ObjPzlblock; // size = 0x17C
-extern const ActorInit Obj_Pzlblock_InitVars;
-
#endif // Z_OBJ_PZLBLOCK_H
diff --git a/src/overlays/actors/ovl_Obj_Raillift/overlay.cfg b/src/overlays/actors/ovl_Obj_Raillift/overlay.cfg
deleted file mode 100644
index 69c3fc70c..000000000
--- a/src/overlays/actors/ovl_Obj_Raillift/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Raillift
-z_obj_raillift.c
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 01cfdd832..3c8a7ecc0 100644
--- a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c
+++ b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c
@@ -28,7 +28,7 @@ void ObjRaillift_Teleport(ObjRaillift* this, PlayState* play);
void ObjRaillift_Wait(ObjRaillift* this, PlayState* play);
void ObjRaillift_Move(ObjRaillift* this, PlayState* play);
-const ActorInit Obj_Raillift_InitVars = {
+ActorInit Obj_Raillift_InitVars = {
ACTOR_OBJ_RAILLIFT,
ACTORCAT_BG,
FLAGS,
@@ -66,7 +66,7 @@ void ObjRaillift_Init(Actor* thisx, PlayState* play) {
thisx->world.rot.x = 0;
thisx->shape.rot.z = 0;
thisx->world.rot.z = 0;
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, sColHeaders[type]);
this->speed = OBJRAILLIFT_GET_SPEED(thisx);
if (this->speed < 0.0f) {
@@ -141,15 +141,15 @@ void ObjRaillift_Move(ObjRaillift* this, PlayState* play) {
step = this->speed * 0.16f;
}
- Math_StepToF(&thisx->speedXZ, target, step);
- if ((thisx->speedXZ + 0.05f) < speed) {
- Math_Vec3f_Scale(&thisx->velocity, thisx->speedXZ / speed);
+ Math_StepToF(&thisx->speed, target, step);
+ if ((thisx->speed + 0.05f) < speed) {
+ Math_Vec3f_Scale(&thisx->velocity, thisx->speed / speed);
thisx->world.pos.x += thisx->velocity.x;
thisx->world.pos.y += thisx->velocity.y;
thisx->world.pos.z += thisx->velocity.z;
} else {
this->curPoint += this->direction;
- thisx->speedXZ *= 0.4f;
+ thisx->speed *= 0.4f;
isTeleporting = OBJRAILLIFT_SHOULD_TELEPORT(thisx);
isPosUpdated = true;
if (((this->curPoint >= this->endPoint) && (this->direction > 0)) ||
@@ -164,7 +164,7 @@ void ObjRaillift_Move(ObjRaillift* this, PlayState* play) {
if ((this->points[0].x != endPoint->x) || (this->points[0].y != endPoint->y) ||
(this->points[0].z != endPoint->z)) {
this->actionFunc = ObjRaillift_Teleport;
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
isPosUpdated = false;
}
}
@@ -180,9 +180,9 @@ void ObjRaillift_Move(ObjRaillift* this, PlayState* play) {
Will teleport to what ever curpoint is set to
*/
void ObjRaillift_Teleport(ObjRaillift* this, PlayState* play) {
- if (!DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ if (!DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
ObjRaillift_UpdatePosition(this, this->curPoint);
- func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->actionFunc = ObjRaillift_Move;
}
}
@@ -191,25 +191,25 @@ void ObjRaillift_Wait(ObjRaillift* this, PlayState* play) {
this->waitTimer--;
if (this->waitTimer <= 0) {
this->actionFunc = ObjRaillift_Move;
- this->dyna.actor.speedXZ = 0.0f;
+ this->dyna.actor.speed = 0.0f;
}
}
void ObjRaillift_Idle(ObjRaillift* this, PlayState* play) {
if (Flags_GetSwitch(play, OBJRAILLIFT_GET_FLAG(&this->dyna.actor))) {
- this->dyna.actor.speedXZ = 0.0f;
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ this->dyna.actor.speed = 0.0f;
+ CutsceneManager_Queue(this->dyna.actor.csId);
this->actionFunc = ObjRaillift_StartCutscene;
}
}
void ObjRaillift_StartCutscene(ObjRaillift* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
this->cutsceneTimer = 50;
this->actionFunc = ObjRaillift_Move;
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
@@ -223,27 +223,23 @@ void ObjRaillift_Update(Actor* thisx, PlayState* play) {
if (this->cutsceneTimer > 0) {
this->cutsceneTimer--;
if (this->cutsceneTimer == 0) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ CutsceneManager_Stop(this->dyna.actor.csId);
}
}
- if (OBJRAILLIFT_SHOULD_REACT_TO_WEIGHT(thisx)) {
+ if (OBJRAILLIFT_REACT_TO_PLAYER_ON_TOP(thisx)) {
s32 requiredScopeTemp;
- this->isWeightOnPrev = this->isWeightOn;
- if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
- this->isWeightOn = true;
- } else {
- this->isWeightOn = false;
- }
- if ((this->isWeightOn != this->isWeightOnPrev) && (this->maxHeight < 1.0f)) {
+ this->isPlayerOnTopPrev = this->isPlayerOnTop;
+ this->isPlayerOnTop = DynaPolyActor_IsPlayerOnTop(&this->dyna) ? true : false;
+ if ((this->isPlayerOnTop != this->isPlayerOnTopPrev) && (this->maxHeight < 1.0f)) {
this->cycle = -0x8000;
this->maxHeight = 6.0f;
}
this->cycle += 0xCE4;
Math_StepToF(&this->maxHeight, 0.0f, 0.12f);
- step = this->isWeightOn ? Math_CosS(fabsf(this->cycleSpeed) * 2048.0f) + 0.02f
- : Math_SinS(fabsf(this->cycleSpeed) * 2048.0f) + 0.02f;
- target = this->isWeightOn ? -8.0f : 0.0f;
+ step = this->isPlayerOnTop ? Math_CosS(fabsf(this->cycleSpeed) * 2048.0f) + 0.02f
+ : Math_SinS(fabsf(this->cycleSpeed) * 2048.0f) + 0.02f;
+ target = this->isPlayerOnTop ? -8.0f : 0.0f;
Math_StepToF(&this->cycleSpeed, target, step);
this->dyna.actor.shape.yOffset = ((Math_SinS(this->cycle) * this->maxHeight) + this->cycleSpeed) * 10.0f;
}
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 cd55d1fa6..b921b0e5a 100644
--- a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h
+++ b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h
@@ -14,7 +14,7 @@ typedef void (*ObjRailliftActionFunc)(struct ObjRaillift*, PlayState*);
#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)
-#define OBJRAILLIFT_SHOULD_REACT_TO_WEIGHT(thisx) (((thisx)->params >> 0xE) & 1)
+#define OBJRAILLIFT_REACT_TO_PLAYER_ON_TOP(thisx) (((thisx)->params >> 0xE) & 1)
typedef enum {
/* 0 */ OOT_WATER_TEMPLE_WATERFALL_PLATFORM,
@@ -29,8 +29,8 @@ typedef struct ObjRaillift {
/* 0x168 */ s32 curPoint;
/* 0x16C */ s32 direction; // +1 for forward, -1 for backward
/* 0x170 */ Vec3s* points;
- /* 0x174 */ s32 isWeightOn;
- /* 0x178 */ s32 isWeightOnPrev;
+ /* 0x174 */ s32 isPlayerOnTop;
+ /* 0x178 */ s32 isPlayerOnTopPrev;
/* 0x17C */ f32 cycleSpeed;
/* 0x180 */ f32 maxHeight;
/* 0x184 */ s16 cycle;
@@ -38,6 +38,4 @@ typedef struct ObjRaillift {
/* 0x188 */ s16 cutsceneTimer;
} ObjRaillift; // size = 0x18C
-extern const ActorInit Obj_Raillift_InitVars;
-
#endif // Z_OBJ_RAILLIFT_H
diff --git a/src/overlays/actors/ovl_Obj_Roomtimer/overlay.cfg b/src/overlays/actors/ovl_Obj_Roomtimer/overlay.cfg
deleted file mode 100644
index b4eef8427..000000000
--- a/src/overlays/actors/ovl_Obj_Roomtimer/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Roomtimer
-z_obj_roomtimer.c
diff --git a/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c b/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c
index 0ce2f38a1..3871508ba 100644
--- a/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c
+++ b/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c
@@ -18,7 +18,7 @@ void func_80973CD8(ObjRoomtimer* this, PlayState* play);
void func_80973D3C(ObjRoomtimer* this, PlayState* play);
void func_80973DE0(ObjRoomtimer* this, PlayState* play);
-const ActorInit Obj_Roomtimer_InitVars = {
+ActorInit Obj_Roomtimer_InitVars = {
ACTOR_OBJ_ROOMTIMER,
ACTORCAT_ENEMY,
FLAGS,
@@ -64,26 +64,27 @@ void func_80973D3C(ObjRoomtimer* this, PlayState* play) {
if (this->actor.params != 0x1FF) {
gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_STOP;
}
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
this->actionFunc = func_80973DE0;
} else if ((this->actor.params != 0x1FF) && (gSaveContext.timerStates[TIMER_ID_MINIGAME_2] == TIMER_STATE_OFF)) {
play_sound(NA_SE_OC_ABYSS);
func_80169EFC(&play->state);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
void func_80973DE0(ObjRoomtimer* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
+ if (CutsceneManager_IsNext(this->actor.csId)) {
Flags_SetClear(play, this->actor.room);
Flags_SetSwitch(play, this->switchFlag);
- if (ActorCutscene_GetLength(this->actor.cutscene) != -1) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ if (CutsceneManager_GetLength(this->actor.csId) != -1) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
}
- Actor_MarkForDeath(&this->actor);
- } else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ Actor_Kill(&this->actor);
+ return;
}
+
+ CutsceneManager_Queue(this->actor.csId);
}
void ObjRoomtimer_Update(Actor* thisx, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.h b/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.h
index be15ac11a..5ce7d13d4 100644
--- a/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.h
+++ b/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.h
@@ -15,6 +15,4 @@ typedef struct ObjRoomtimer {
/* 0x148 */ s32 switchFlag;
} ObjRoomtimer; // size = 0x14C
-extern const ActorInit Obj_Roomtimer_InitVars;
-
#endif // Z_OBJ_ROOMTIMER_H
diff --git a/src/overlays/actors/ovl_Obj_Rotlift/overlay.cfg b/src/overlays/actors/ovl_Obj_Rotlift/overlay.cfg
deleted file mode 100644
index 7c2884ce4..000000000
--- a/src/overlays/actors/ovl_Obj_Rotlift/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Rotlift
-z_obj_rotlift.c
diff --git a/src/overlays/actors/ovl_Obj_Rotlift/z_obj_rotlift.c b/src/overlays/actors/ovl_Obj_Rotlift/z_obj_rotlift.c
index 6a5298728..4c63908c6 100644
--- a/src/overlays/actors/ovl_Obj_Rotlift/z_obj_rotlift.c
+++ b/src/overlays/actors/ovl_Obj_Rotlift/z_obj_rotlift.c
@@ -25,7 +25,7 @@ typedef struct ObjRotliftModelInfo {
/* 0x8 */ CollisionHeader* colHeader;
} ObjRotliftModelInfo; // size = 0xC
-const ActorInit Obj_Rotlift_InitVars = {
+ActorInit Obj_Rotlift_InitVars = {
ACTOR_OBJ_ROTLIFT,
ACTORCAT_BG,
FLAGS,
@@ -111,7 +111,7 @@ void ObjRotlift_Init(Actor* thisx, PlayState* play2) {
ObjRotlift_MoveDekuFlowers(this);
}
- DynaPolyActor_Init(&this->dyna, 3);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y);
modelInfo = &sModelInfo[type];
DynaPolyActor_LoadMesh(play, &this->dyna, modelInfo->colHeader);
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 46cbef0ee..df3fe1dee 100644
--- a/src/overlays/actors/ovl_Obj_Rotlift/z_obj_rotlift.h
+++ b/src/overlays/actors/ovl_Obj_Rotlift/z_obj_rotlift.h
@@ -20,6 +20,4 @@ typedef struct ObjRotlift {
/* 0x15C */ ObjEtcetera* dekuFlowers[2];
} ObjRotlift; // size = 0x164
-extern const ActorInit Obj_Rotlift_InitVars;
-
#endif // Z_OBJ_ROTLIFT_H
diff --git a/src/overlays/actors/ovl_Obj_Shutter/overlay.cfg b/src/overlays/actors/ovl_Obj_Shutter/overlay.cfg
deleted file mode 100644
index 9b5210eb4..000000000
--- a/src/overlays/actors/ovl_Obj_Shutter/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Shutter
-z_obj_shutter.c
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 5246b20d4..6f93935b2 100644
--- a/src/overlays/actors/ovl_Obj_Shutter/z_obj_shutter.c
+++ b/src/overlays/actors/ovl_Obj_Shutter/z_obj_shutter.c
@@ -16,7 +16,7 @@ void ObjShutter_Destroy(Actor* thisx, PlayState* play);
void ObjShutter_Update(Actor* thisx, PlayState* play2);
void ObjShutter_Draw(Actor* thisx, PlayState* play);
-const ActorInit Obj_Shutter_InitVars = {
+ActorInit Obj_Shutter_InitVars = {
ACTOR_OBJ_SHUTTER,
ACTORCAT_PROP,
FLAGS,
diff --git a/src/overlays/actors/ovl_Obj_Shutter/z_obj_shutter.h b/src/overlays/actors/ovl_Obj_Shutter/z_obj_shutter.h
index b777c64b3..3f23b3dfe 100644
--- a/src/overlays/actors/ovl_Obj_Shutter/z_obj_shutter.h
+++ b/src/overlays/actors/ovl_Obj_Shutter/z_obj_shutter.h
@@ -11,6 +11,4 @@ typedef struct ObjShutter {
/* 0x148 */ f32 verticalOffset;
} ObjShutter; // size = 0x14C
-extern const ActorInit Obj_Shutter_InitVars;
-
#endif // Z_OBJ_SHUTTER_H
diff --git a/src/overlays/actors/ovl_Obj_Skateblock/overlay.cfg b/src/overlays/actors/ovl_Obj_Skateblock/overlay.cfg
deleted file mode 100644
index bb4e2fec8..000000000
--- a/src/overlays/actors/ovl_Obj_Skateblock/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Skateblock
-z_obj_skateblock.c
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 3eee8491a..fa04972ef 100644
--- a/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c
+++ b/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c
@@ -27,7 +27,7 @@ void func_80A2273C(ObjSkateblock* this, PlayState* play);
void func_80A227A4(ObjSkateblock* this);
void func_80A227C0(ObjSkateblock* this, PlayState* play);
-const ActorInit Obj_Skateblock_InitVars = {
+ActorInit Obj_Skateblock_InitVars = {
ACTOR_OBJ_SKATEBLOCK,
ACTORCAT_BG,
FLAGS,
@@ -369,7 +369,7 @@ void func_80A21C88(ObjSkateblock* this, s32 arg1) {
void func_80A21CB4(ObjSkateblock* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- player->stateFlags2 &= ~0x10;
+ player->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
}
@@ -489,7 +489,7 @@ void ObjSkateblock_Init(Actor* thisx, PlayState* play) {
ObjSkateblock* this = THIS;
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, &gameplay_dangeon_keep_Colheader_007498);
if (D_80A22A18 == NULL) {
D_80A22A18 = Lib_SegmentedToVirtual(gameplay_dangeon_keep_Matanimheader_01B370);
@@ -535,7 +535,7 @@ void func_80A22334(ObjSkateblock* this, PlayState* play) {
func_80A21C88(this, sp2C);
func_80A2244C(this);
sp30 = false;
- func_800B7298(play, &this->dyna.actor, 7);
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_WAIT);
this->unk_1C1 |= 1;
}
@@ -563,7 +563,7 @@ void func_80A224A4(ObjSkateblock* this, PlayState* play) {
*this->unk_16C += this->unk_164;
if (func_80A21934(this, play)) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND);
func_80A21D1C(this);
sp28 = true;
} else {
@@ -591,7 +591,7 @@ void func_80A224A4(ObjSkateblock* this, PlayState* play) {
if ((this->unk_1C1 & 1) && (sp24 || sp28 || (this->dyna.actor.xzDistToPlayer > 400.0f))) {
this->unk_1C1 &= ~1;
- func_800B7298(play, &this->dyna.actor, 6);
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_END);
}
func_80A21F74(this, play);
@@ -614,8 +614,9 @@ void func_80A2264C(ObjSkateblock* this, PlayState* play) {
sp20 = func_80A21548(this, play);
if (sp20 || ((this->unk_160 - this->dyna.actor.world.pos.y) > 300.0f)) {
- if (func_800C9B40(&play->colCtx, this->dyna.actor.floorPoly, this->dyna.actor.floorBgId) == 12) {
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ if (SurfaceType_GetFloorProperty(&play->colCtx, this->dyna.actor.floorPoly, this->dyna.actor.floorBgId) ==
+ FLOOR_PROPERTY_12) {
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->dyna.actor.draw = NULL;
func_80A22728(this);
return;
@@ -632,7 +633,7 @@ void func_80A22728(ObjSkateblock* this) {
}
void func_80A2273C(ObjSkateblock* this, PlayState* play) {
- if (!DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ if (!DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
this->dyna.actor.world.pos.x = this->dyna.actor.home.pos.x;
this->dyna.actor.world.pos.y = (this->dyna.actor.home.pos.y - (600.0f * this->dyna.actor.scale.y)) - 10.0f;
this->dyna.actor.world.pos.z = this->dyna.actor.home.pos.z;
@@ -656,14 +657,14 @@ void func_80A227C0(ObjSkateblock* this, PlayState* play) {
return;
}
- func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->dyna.actor.draw = ObjSkateblock_Draw;
if (Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y, 1.0f)) {
func_80A22308(this);
}
- if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
D_80A22A10 |= 1 << this->unk_1C0;
}
}
diff --git a/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.h b/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.h
index 97a2e6ede..ab4f37240 100644
--- a/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.h
+++ b/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.h
@@ -32,6 +32,4 @@ typedef struct ObjSkateblock {
/* 0x1C1 */ u8 unk_1C1;
} ObjSkateblock; // size = 0x1C4
-extern const ActorInit Obj_Skateblock_InitVars;
-
#endif // Z_OBJ_SKATEBLOCK_H
diff --git a/src/overlays/actors/ovl_Obj_Smork/overlay.cfg b/src/overlays/actors/ovl_Obj_Smork/overlay.cfg
deleted file mode 100644
index 35a105b7d..000000000
--- a/src/overlays/actors/ovl_Obj_Smork/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Smork
-z_obj_smork.c
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 9d3b1265d..dd02f6c1b 100644
--- a/src/overlays/actors/ovl_Obj_Smork/z_obj_smork.c
+++ b/src/overlays/actors/ovl_Obj_Smork/z_obj_smork.c
@@ -16,7 +16,7 @@ void ObjSmork_Destroy(Actor* thisx, PlayState* play);
void ObjSmork_Update(Actor* thisx, PlayState* play);
void ObjSmork_Draw(Actor* thisx, PlayState* play);
-const ActorInit Obj_Smork_InitVars = {
+ActorInit Obj_Smork_InitVars = {
ACTOR_OBJ_SMORK,
ACTORCAT_PROP,
FLAGS,
diff --git a/src/overlays/actors/ovl_Obj_Smork/z_obj_smork.h b/src/overlays/actors/ovl_Obj_Smork/z_obj_smork.h
index 5ab3e405c..a1b21d442 100644
--- a/src/overlays/actors/ovl_Obj_Smork/z_obj_smork.h
+++ b/src/overlays/actors/ovl_Obj_Smork/z_obj_smork.h
@@ -16,6 +16,4 @@ typedef struct ObjSmork {
/* 0x1C6 */ s16 unk_1C6;
} ObjSmork; // size = 0x1C8
-extern const ActorInit Obj_Smork_InitVars;
-
#endif // Z_OBJ_SMORK_H
diff --git a/src/overlays/actors/ovl_Obj_Snowball/overlay.cfg b/src/overlays/actors/ovl_Obj_Snowball/overlay.cfg
deleted file mode 100644
index 45a8a39bd..000000000
--- a/src/overlays/actors/ovl_Obj_Snowball/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Snowball
-z_obj_snowball.c
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 72f452682..c94d67860 100644
--- a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c
+++ b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c
@@ -33,7 +33,7 @@ void func_80B04B48(ObjSnowball* this, PlayState* play);
void func_80B04B60(ObjSnowball* this, PlayState* play);
void func_80B04D34(Actor* thisx, PlayState* play);
-const ActorInit Obj_Snowball_InitVars = {
+ActorInit Obj_Snowball_InitVars = {
ACTOR_OBJ_SNOWBALL,
ACTORCAT_PROP,
FLAGS,
@@ -106,7 +106,7 @@ void func_80B02CD0(ObjSnowball* this, PlayState* play) {
Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ptr->unk_00, this->actor.home.pos.x, this->actor.home.pos.y,
this->actor.home.pos.z, this->actor.home.rot.x, 0, this->actor.home.rot.z,
- ptr->unk_02, -1, this->actor.unk20, NULL);
+ ptr->unk_02, CS_ID_NONE, this->actor.halfDaysBits, NULL);
}
void func_80B02D58(ObjSnowball* this, PlayState* play) {
@@ -123,8 +123,8 @@ void func_80B02DB0(ObjSnowball* this, PlayState* play) {
Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ptr->unk_00, this->actor.home.pos.x, this->actor.home.pos.y,
this->actor.home.pos.z, this->actor.home.rot.x, 0, this->actor.home.rot.z,
- this->actor.params | ptr->unk_02,
- ActorCutscene_GetAdditionalCutscene(this->actor.cutscene), this->actor.unk20, NULL);
+ this->actor.params | ptr->unk_02, CutsceneManager_GetAdditionalCsId(this->actor.csId),
+ this->actor.halfDaysBits, NULL);
}
void func_80B02E54(ObjSnowball* this, PlayState* play) {
@@ -132,7 +132,7 @@ void func_80B02E54(ObjSnowball* this, PlayState* play) {
Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ptr->unk_00, this->actor.home.pos.x, this->actor.home.pos.y,
this->actor.home.pos.z, this->actor.home.rot.x, 0, this->actor.home.rot.z,
- this->actor.params | ptr->unk_02, -1, this->actor.unk20, NULL);
+ this->actor.params | ptr->unk_02, CS_ID_NONE, this->actor.halfDaysBits, NULL);
}
void func_80B02EE4(ObjSnowball* this, PlayState* play) {
@@ -440,7 +440,7 @@ void func_80B03FF8(ObjSnowball* this, PlayState* play) {
sp18->unk_04(this, play);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SNOWBALL_BROKEN);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SNOWBALL_BROKEN);
if (rotY == 5) {
Flags_SetSwitch(play, OBJSNOWBALL_GET_3F(&this->actor));
@@ -510,7 +510,7 @@ void ObjSnowball_Init(Actor* thisx, PlayState* play) {
func_80B04338(this, play);
if ((sp40 == 5) && Flags_GetSwitch(play, OBJSNOWBALL_GET_3F(&this->actor))) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -549,7 +549,7 @@ void func_80B04350(ObjSnowball* this, PlayState* play) {
this->unk_20A = 0;
}
- if (this->actor.cutscene < 0) {
+ if (this->actor.csId < 0) {
func_80B03FF8(this, play);
if (this->unk_20A == 0) {
func_80B04608(this, play);
@@ -571,7 +571,7 @@ void func_80B04350(ObjSnowball* this, PlayState* play) {
} else {
this->unk_209 = 10;
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_REFLECTION_SNOW);
+ Actor_PlaySfx(&this->actor, NA_SE_IT_REFLECTION_SNOW);
}
}
@@ -584,13 +584,13 @@ void func_80B04350(ObjSnowball* this, PlayState* play) {
}
void func_80B04540(ObjSnowball* this, PlayState* play) {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
this->actionFunc = func_80B0457C;
}
void func_80B0457C(ObjSnowball* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
func_80B03FF8(this, play);
this->unk_20B = 1;
if (this->unk_20A == 0) {
@@ -599,7 +599,7 @@ void func_80B0457C(ObjSnowball* this, PlayState* play) {
func_80B046E4(this, play);
}
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
@@ -615,13 +615,13 @@ void func_80B04648(ObjSnowball* this, PlayState* play) {
this->unk_208--;
if (this->unk_208 <= 0) {
if (this->unk_20B != 0) {
- ActorCutscene_Stop(this->actor.cutscene);
+ CutsceneManager_Stop(this->actor.csId);
}
if (this->actor.home.rot.y == 1) {
func_80B04B48(this, play);
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else if (this->unk_208 == 0x2D) {
func_80B03688(this, play);
@@ -719,13 +719,13 @@ void func_80B047C0(ObjSnowball* this, PlayState* play) {
if ((this->unk_208 <= 0) || ((this->unk_1A8[0].unk_2D & 1) && (this->unk_1A8[1].unk_2D & 1))) {
if (this->unk_20B != 0) {
- ActorCutscene_Stop(this->actor.cutscene);
+ CutsceneManager_Stop(this->actor.csId);
}
if (this->actor.home.rot.y == 1) {
func_80B04B48(this, play);
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
} else {
for (i = 0; i < ARRAY_COUNT(this->unk_1A8); i++) {
diff --git a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.h b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.h
index 0b2974d44..804c2596c 100644
--- a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.h
+++ b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.h
@@ -40,6 +40,4 @@ typedef struct ObjSnowball {
/* 0x211 */ s8 unk_211;
} ObjSnowball; // size = 0x214
-extern const ActorInit Obj_Snowball_InitVars;
-
#endif // Z_OBJ_SNOWBALL_H
diff --git a/src/overlays/actors/ovl_Obj_Snowball2/overlay.cfg b/src/overlays/actors/ovl_Obj_Snowball2/overlay.cfg
deleted file mode 100644
index 5d740b086..000000000
--- a/src/overlays/actors/ovl_Obj_Snowball2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Snowball2
-z_obj_snowball2.c
diff --git a/src/overlays/actors/ovl_Obj_Snowball2/z_obj_snowball2.c b/src/overlays/actors/ovl_Obj_Snowball2/z_obj_snowball2.c
index 74fa8fd57..ec05294d1 100644
--- a/src/overlays/actors/ovl_Obj_Snowball2/z_obj_snowball2.c
+++ b/src/overlays/actors/ovl_Obj_Snowball2/z_obj_snowball2.c
@@ -26,7 +26,7 @@ void func_80B3A13C(ObjSnowball2* this, PlayState* play);
void func_80B3A498(ObjSnowball2* this);
void func_80B3A500(ObjSnowball2* this, PlayState* play);
-const ActorInit Obj_Snowball2_InitVars = {
+ActorInit Obj_Snowball2_InitVars = {
ACTOR_OBJ_SNOWBALL2,
ACTORCAT_PROP,
FLAGS,
@@ -356,16 +356,16 @@ void func_80B39C9C(ObjSnowball2* this, PlayState* play) {
func_80B38E88(this, play);
}
func_80B38EFC(this, play);
- func_800B8E58(GET_PLAYER(play), NA_SE_PL_PULL_UP_SNOWBALL);
+ Player_PlaySfx(GET_PLAYER(play), NA_SE_PL_PULL_UP_SNOWBALL);
func_80B39F60(this);
- } else if ((this->actor.bgCheckFlags & 0x20) &&
+ } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_WATER) &&
((this->actor.shape.yOffset * this->actor.scale.y) < this->actor.depthInWater)) {
func_80B3A498(this);
} else if (sp38 && (this->collider.elements->info.acHitInfo->toucher.dmgFlags & 0x0583FFBC)) {
func_80B38E88(this, play);
func_80B39108(this, play);
func_80B39B5C(this, play);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
} else {
if (sp38 && (this->collider.elements->info.acHitInfo->toucher.dmgFlags & 2)) {
@@ -374,8 +374,10 @@ void func_80B39C9C(ObjSnowball2* this, PlayState* play) {
if (this->unk_1AD == 0) {
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f, 0x44);
- if ((this->actor.bgCheckFlags & 1) && (DynaPoly_GetActor(&play->colCtx, this->actor.floorBgId) == NULL)) {
+ Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40);
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) &&
+ (DynaPoly_GetActor(&play->colCtx, this->actor.floorBgId) == NULL)) {
this->unk_1AD = 1;
this->actor.flags &= ~ACTOR_FLAG_10;
}
@@ -388,7 +390,7 @@ void func_80B39C9C(ObjSnowball2* this, PlayState* play) {
if (this->actor.xzDistToPlayer < 100.0f) {
if (ABS_ALT(BINANG_SUB(this->actor.yawTowardsPlayer, GET_PLAYER(play)->actor.world.rot.y)) >=
0x5556) {
- Actor_PickUp(&this->actor, play, GI_NONE, 36.0f, 30.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_NONE, 36.0f, 30.0f);
}
}
}
@@ -417,11 +419,12 @@ void func_80B39FA8(ObjSnowball2* this, PlayState* play) {
if (Actor_HasNoParent(&this->actor, play)) {
this->actor.room = play->roomCtx.curRoom.num;
- this->actor.speedXZ *= 3.8f;
+ this->actor.speed *= 3.8f;
this->actor.velocity.y *= 0.4f;
this->actor.gravity = -2.8f;
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f, 0x45);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40);
func_80B3A0D8(this);
} else {
sp30.x = this->actor.world.pos.x;
@@ -460,23 +463,25 @@ void func_80B3A13C(ObjSnowball2* this, PlayState* play) {
func_80B39B28(this, play);
- if ((((this->actor.bgCheckFlags & 9) || sp38) && !(this->actor.bgCheckFlags & 0x20)) || (this->unk_1AC <= 0)) {
+ if ((((this->actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_WALL)) || sp38) &&
+ !(this->actor.bgCheckFlags & BGCHECKFLAG_WATER)) ||
+ (this->unk_1AC <= 0)) {
func_80B38E88(this, play);
func_80B39108(this, play);
func_80B39B5C(this, play);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
sp30 = false;
- if (this->actor.bgCheckFlags & 0x60) {
- if ((this->actor.bgCheckFlags & 0x40) || (this->actor.speedXZ > 3.0f)) {
+ if (this->actor.bgCheckFlags & (BGCHECKFLAG_WATER | BGCHECKFLAG_WATER_TOUCH)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) || (this->actor.speed > 3.0f)) {
if (this->actor.depthInWater < (1200.0f * this->actor.scale.y)) {
func_80B39470(&this->actor, play);
func_80B395EC(&this->actor, play);
}
- if (this->actor.bgCheckFlags & 0x40) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOMB_DROP_WATER);
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) {
+ Actor_PlaySfx(&this->actor, NA_SE_EV_BOMB_DROP_WATER);
}
} else if ((((play->gameplayFrames % 16) == 0) || ((Rand_Next() >> 0x10) == 0)) &&
(this->actor.depthInWater < (1200.0f * this->actor.scale.y))) {
@@ -488,26 +493,27 @@ void func_80B3A13C(ObjSnowball2* this, PlayState* play) {
this->unk_1AA >>= 1;
if (sp34) {
- this->actor.speedXZ *= 0.8f;
+ this->actor.speed *= 0.8f;
} else {
- this->actor.speedXZ *= 0.65f;
+ this->actor.speed *= 0.65f;
}
this->actor.velocity.y *= 0.27f;
this->actor.gravity *= 0.27f;
- if (this->actor.speedXZ < 0.4f) {
+ if (this->actor.speed < 0.4f) {
sp30 = true;
}
} else {
if (sp34) {
- this->actor.speedXZ *= 0.8f;
+ this->actor.speed *= 0.8f;
} else {
- this->actor.speedXZ *= 0.96f;
+ this->actor.speed *= 0.96f;
}
this->actor.velocity.y *= 0.96f;
}
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f, 0x45);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40);
this->actor.shape.rot.x += this->unk_1A8;
this->actor.shape.rot.y += this->unk_1AA;
func_80B38E20(this);
@@ -527,7 +533,7 @@ void func_80B3A498(ObjSnowball2* this) {
this->actor.home.pos.z = this->actor.world.pos.z;
this->actor.world.pos.y = this->actor.world.pos.y + (this->actor.shape.yOffset * this->actor.scale.y);
this->actor.shape.yOffset = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actionFunc = func_80B3A500;
}
@@ -539,7 +545,7 @@ void func_80B3A500(ObjSnowball2* this, PlayState* play) {
this->unk_1AC--;
- this->actor.speedXZ *= 0.7f;
+ this->actor.speed *= 0.7f;
this->unk_1A8 >>= 1;
this->unk_1AA >>= 1;
@@ -570,7 +576,7 @@ void func_80B3A500(ObjSnowball2* this, PlayState* play) {
}
if (this->unk_1AC <= 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
diff --git a/src/overlays/actors/ovl_Obj_Snowball2/z_obj_snowball2.h b/src/overlays/actors/ovl_Obj_Snowball2/z_obj_snowball2.h
index b6990fc1c..19bd173fb 100644
--- a/src/overlays/actors/ovl_Obj_Snowball2/z_obj_snowball2.h
+++ b/src/overlays/actors/ovl_Obj_Snowball2/z_obj_snowball2.h
@@ -24,6 +24,4 @@ typedef struct ObjSnowball2 {
/* 0x1B0 */ UNK_TYPE1 unk1B0[4];
} ObjSnowball2; // size = 0x1B4
-extern const ActorInit Obj_Snowball2_InitVars;
-
#endif // Z_OBJ_SNOWBALL2_H
diff --git a/src/overlays/actors/ovl_Obj_Sound/overlay.cfg b/src/overlays/actors/ovl_Obj_Sound/overlay.cfg
deleted file mode 100644
index d1863878b..000000000
--- a/src/overlays/actors/ovl_Obj_Sound/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Sound
-z_obj_sound.c
diff --git a/src/overlays/actors/ovl_Obj_Sound/z_obj_sound.c b/src/overlays/actors/ovl_Obj_Sound/z_obj_sound.c
index 221ae3acc..42c2bcc95 100644
--- a/src/overlays/actors/ovl_Obj_Sound/z_obj_sound.c
+++ b/src/overlays/actors/ovl_Obj_Sound/z_obj_sound.c
@@ -15,7 +15,7 @@ void ObjSound_Destroy(Actor* thisx, PlayState* play);
void ObjSound_Update(Actor* thisx, PlayState* play);
#if 0
-const ActorInit Obj_Sound_InitVars = {
+ActorInit Obj_Sound_InitVars = {
ACTOR_OBJ_SOUND,
ACTORCAT_ITEMACTION,
FLAGS,
diff --git a/src/overlays/actors/ovl_Obj_Sound/z_obj_sound.h b/src/overlays/actors/ovl_Obj_Sound/z_obj_sound.h
index 8f3c80257..a83aa840b 100644
--- a/src/overlays/actors/ovl_Obj_Sound/z_obj_sound.h
+++ b/src/overlays/actors/ovl_Obj_Sound/z_obj_sound.h
@@ -10,6 +10,4 @@ typedef struct ObjSound {
/* 0x144 */ char unk_144[0x4];
} ObjSound; // size = 0x148
-extern const ActorInit Obj_Sound_InitVars;
-
#endif // Z_OBJ_SOUND_H
diff --git a/src/overlays/actors/ovl_Obj_Spidertent/overlay.cfg b/src/overlays/actors/ovl_Obj_Spidertent/overlay.cfg
deleted file mode 100644
index f5f13b8ad..000000000
--- a/src/overlays/actors/ovl_Obj_Spidertent/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Spidertent
-z_obj_spidertent.c
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 05fe851a9..907df33fc 100644
--- a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c
+++ b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c
@@ -23,7 +23,7 @@ void func_80B30A4C(ObjSpidertent* this, PlayState* play);
void func_80B30AD4(ObjSpidertent* this);
void func_80B30AF8(ObjSpidertent* this, PlayState* play);
-const ActorInit Obj_Spidertent_InitVars = {
+ActorInit Obj_Spidertent_InitVars = {
ACTOR_OBJ_SPIDERTENT,
ACTORCAT_BG,
FLAGS,
@@ -529,7 +529,7 @@ s32 func_80B30480(ObjSpidertent* this, PlayState* play, Vec3f* arg2) {
Vec3f sp58;
f32 sp54;
- if (player->itemActionParam == 7) {
+ if (player->heldItemAction == PLAYER_IA_STICK) {
if (player->unk_B28 > 0) {
for (i = 0; i < ARRAY_COUNT(this->colliderElements); i++) {
triNorm = &this->collider.elements[i].dim;
@@ -565,7 +565,7 @@ void ObjSpidertent_Init(Actor* thisx, PlayState* play) {
Collider_InitTris(play, &this->collider);
if (Flags_GetSwitch(play, OBJSPIDERTENT_GET_7F00(&this->dyna.actor))) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
@@ -676,15 +676,15 @@ void func_80B30A2C(ObjSpidertent* this) {
}
void func_80B30A4C(ObjSpidertent* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
- if (this->dyna.actor.cutscene >= 0) {
- func_800B7298(play, &this->dyna.actor, 1);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
+ if (this->dyna.actor.csId >= 0) {
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_1);
}
Flags_SetSwitch(play, OBJSPIDERTENT_GET_7F00(&this->dyna.actor));
func_80B30AD4(this);
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
@@ -755,14 +755,14 @@ void func_80B30AF8(ObjSpidertent* this, PlayState* play) {
this->unk_3C1--;
if (this->unk_3C1 == 40) {
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
}
if (this->unk_3C1 >= 32) {
if (this->unk_3C7 > 0) {
this->unk_3C7--;
} else if (this->unk_3C1 > 50) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EN_EXTINCT);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EN_EXTINCT);
this->unk_3C7 = Rand_S16Offset(2, 2);
} else {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 11, NA_SE_EN_EXTINCT);
@@ -791,8 +791,8 @@ void func_80B30AF8(ObjSpidertent* this, PlayState* play) {
}
}
} else if (this->unk_3C1 <= 0) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
- Actor_MarkForDeath(&this->dyna.actor);
+ CutsceneManager_Stop(this->dyna.actor.csId);
+ Actor_Kill(&this->dyna.actor);
}
}
diff --git a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.h b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.h
index 3fdb83597..881a816a7 100644
--- a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.h
+++ b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.h
@@ -27,6 +27,4 @@ typedef struct ObjSpidertent {
/* 0x3C8 */ ObjSpidertentActionFunc actionFunc;
} ObjSpidertent; // size = 0x3CC
-extern const ActorInit Obj_Spidertent_InitVars;
-
#endif // Z_OBJ_SPIDERTENT_H
diff --git a/src/overlays/actors/ovl_Obj_Spinyroll/overlay.cfg b/src/overlays/actors/ovl_Obj_Spinyroll/overlay.cfg
deleted file mode 100644
index 38ea69b6d..000000000
--- a/src/overlays/actors/ovl_Obj_Spinyroll/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Spinyroll
-z_obj_spinyroll.c
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 c57db1111..4541baa2a 100644
--- a/src/overlays/actors/ovl_Obj_Spinyroll/z_obj_spinyroll.c
+++ b/src/overlays/actors/ovl_Obj_Spinyroll/z_obj_spinyroll.c
@@ -28,7 +28,7 @@ void func_80A1EC38(ObjSpinyroll* this, PlayState* play);
void func_80A1ECC0(ObjSpinyroll* this);
void func_80A1ECD4(ObjSpinyroll* this, PlayState* play);
-const ActorInit Obj_Spinyroll_InitVars = {
+ActorInit Obj_Spinyroll_InitVars = {
ACTOR_OBJ_SPINYROLL,
ACTORCAT_PROP,
FLAGS,
@@ -149,7 +149,7 @@ void func_80A1DA50(PlayState* play, ObjSpinyroll* this, Vec3f* arg2, Vec3f* arg3
Math_Vec3f_Sum(arg2, arg3, &sp1C);
Math_Vec3f_Scale(&sp1C, 0.5f);
EffectSsHitmark_SpawnFixedScale(play, 3, &sp1C);
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_IT_SHIELD_REFLECT_SW);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_IT_SHIELD_REFLECT_SW);
}
void func_80A1DAAC(Vec3f* arg0, Vec3f* arg1, s16 arg2) {
@@ -195,10 +195,10 @@ void func_80A1DC5C(ObjSpinyroll* this) {
void func_80A1DCCC(ObjSpinyroll* this) {
f32 phi_f2;
- if (this->dyna.actor.speedXZ > 3.0f) {
+ if (this->dyna.actor.speed > 3.0f) {
phi_f2 = 3.0f;
} else {
- phi_f2 = this->dyna.actor.speedXZ;
+ phi_f2 = this->dyna.actor.speed;
}
if (this->unk_4D4 < phi_f2) {
@@ -246,15 +246,15 @@ s32 func_80A1DEB8(ObjSpinyroll* this) {
s32 sp30 = this->unk_4A8 ^ 1;
Vec3f sp24;
- Math_StepToF(&this->dyna.actor.speedXZ, this->unk_4A4, this->unk_4A4 * 0.2f);
+ Math_StepToF(&this->dyna.actor.speed, this->unk_4A4, this->unk_4A4 * 0.2f);
- this->dyna.actor.world.pos.x += this->dyna.actor.speedXZ * this->unk_4C4.x;
- this->dyna.actor.world.pos.y += this->dyna.actor.speedXZ * this->unk_4C4.y;
- this->dyna.actor.world.pos.z += this->dyna.actor.speedXZ * this->unk_4C4.z;
+ this->dyna.actor.world.pos.x += this->dyna.actor.speed * this->unk_4C4.x;
+ this->dyna.actor.world.pos.y += this->dyna.actor.speed * this->unk_4C4.y;
+ this->dyna.actor.world.pos.z += this->dyna.actor.speed * this->unk_4C4.z;
Math_Vec3f_Diff(&this->unk_4AC[sp30], &this->dyna.actor.world.pos, &sp24);
- return Math3D_LengthSquared(&sp24) < (SQ(this->dyna.actor.speedXZ) + 0.05f);
+ return Math3D_LengthSquared(&sp24) < (SQ(this->dyna.actor.speed) + 0.05f);
}
void func_80A1DFA0(ObjSpinyroll* this) {
@@ -500,7 +500,7 @@ void ObjSpinyroll_Init(Actor* thisx, PlayState* play) {
((sp34->x == sp30->x) && (sp34->y == sp30->y) && (sp34->z != sp30->z))) {
this->unk_49C = false;
} else {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
@@ -517,7 +517,7 @@ void ObjSpinyroll_Destroy(Actor* thisx, PlayState* play) {
}
void func_80A1E9C4(ObjSpinyroll* this) {
- this->dyna.actor.speedXZ = 0.0f;
+ this->dyna.actor.speed = 0.0f;
this->actionFunc = func_80A1E9E0;
}
@@ -531,7 +531,7 @@ void func_80A1E9E0(ObjSpinyroll* this, PlayState* play) {
void func_80A1EA10(ObjSpinyroll* this) {
this->actionFunc = func_80A1EA4C;
this->unk_4E2 = D_80A1F1E4[OBJSPINYROLL_GET_1C00(&this->dyna.actor)];
- this->dyna.actor.speedXZ = 0.0f;
+ this->dyna.actor.speed = 0.0f;
}
void func_80A1EA4C(ObjSpinyroll* this, PlayState* play) {
@@ -548,7 +548,7 @@ void func_80A1EA4C(ObjSpinyroll* this, PlayState* play) {
void func_80A1EAAC(ObjSpinyroll* this) {
this->actionFunc = func_80A1EAE0;
this->unk_4DC = D_80A1F20C[this->unk_4A8];
- this->dyna.actor.speedXZ = 0.0f;
+ this->dyna.actor.speed = 0.0f;
}
void func_80A1EAE0(ObjSpinyroll* this, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Obj_Spinyroll/z_obj_spinyroll.h b/src/overlays/actors/ovl_Obj_Spinyroll/z_obj_spinyroll.h
index 10322586a..36d8e644a 100644
--- a/src/overlays/actors/ovl_Obj_Spinyroll/z_obj_spinyroll.h
+++ b/src/overlays/actors/ovl_Obj_Spinyroll/z_obj_spinyroll.h
@@ -50,6 +50,4 @@ typedef struct ObjSpinyroll {
/* 0x4E2 */ s16 unk_4E2;
} ObjSpinyroll; // size = 0x4E4
-extern const ActorInit Obj_Spinyroll_InitVars;
-
#endif // Z_OBJ_SPINYROLL_H
diff --git a/src/overlays/actors/ovl_Obj_Switch/overlay.cfg b/src/overlays/actors/ovl_Obj_Switch/overlay.cfg
deleted file mode 100644
index 683d4ae00..000000000
--- a/src/overlays/actors/ovl_Obj_Switch/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Switch
-z_obj_switch.c
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 c31168f72..2c03f8689 100644
--- a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c
+++ b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c
@@ -71,7 +71,7 @@ static TexturePtr sEyeSwitchTextures[][4] = {
static s32 sIsSegmentTableInit = false;
-const ActorInit Obj_Switch_InitVars = {
+ActorInit Obj_Switch_InitVars = {
ACTOR_OBJ_SWITCH,
ACTORCAT_SWITCH,
FLAGS,
@@ -266,25 +266,25 @@ void ObjSwitch_CrystalUpdateTimer(ObjSwitch* this) {
void ObjSwitch_StopCutscene(ObjSwitch* this) {
if (this->isPlayingCutscene) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ CutsceneManager_Stop(this->dyna.actor.csId);
this->isPlayingCutscene = false;
}
}
void ObjSwitch_PlayFootSwitchSfx(ObjSwitch* this) {
if (this->sfxTimer <= 0) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_FOOT_SWITCH);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_FOOT_SWITCH);
}
}
void ObjSwitch_PlayDiamondSwitchSfx(ObjSwitch* this) {
if (this->sfxTimer <= 0) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_DIAMOND_SWITCH);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_DIAMOND_SWITCH);
}
}
void ObjSwitch_SetFloorSwitchSnapPlayerState(ObjSwitch* this, s32 state) {
- if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) {
this->floorSwitchPlayerSnapState = state;
}
}
@@ -344,7 +344,7 @@ void ObjSwitch_Init(Actor* thisx, PlayState* play) {
} else {
this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y + 1.0f;
}
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, &gFloorSwitchCol);
}
if (type == OBJSWITCH_TYPE_FLOOR) {
@@ -411,7 +411,7 @@ void ObjSwitch_Init(Actor* thisx, PlayState* play) {
}
}
if (type == OBJSWITCH_TYPE_CRYSTAL) {
- sCrystalSwitchAnimatedMat = Lib_SegmentedToVirtual(&gCrystalSwitchTexAnim);
+ sCrystalSwitchAnimatedMat = Lib_SegmentedToVirtual(gCrystalSwitchTexAnim);
}
if (OBJ_SWITCH_IS_FROZEN(&this->dyna.actor)) {
ObjSwitch_EyeSwitchFrozenInit(this);
@@ -486,8 +486,8 @@ void ObjSwitch_TryPlayCutsceneInit(ObjSwitch* this, PlayState* play, ObjSwitchSe
}
void ObjSwitch_TryPlayCutscene(ObjSwitch* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
ObjSwitch_SetSwitchFlagState(this, play, this->nextSwitchFlagState);
if (this->floorSwitchPlayerSnapState == 1) {
this->floorSwitchPlayerSnapState = 2;
@@ -495,7 +495,7 @@ void ObjSwitch_TryPlayCutscene(ObjSwitch* this, PlayState* play) {
this->isPlayingCutscene = true;
this->setupFunc(this);
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
@@ -517,13 +517,13 @@ void ObjSwitch_FloorSwitchUp(ObjSwitch* this, PlayState* play) {
} else {
switch (OBJ_SWITCH_GET_SUBTYPE(&this->dyna.actor)) {
case OBJSWITCH_SUBTYPE_ONCE:
- if (DynaPolyActor_IsInSwitchPressedState(&this->dyna)) {
+ if (DynaPolyActor_IsSwitchPressed(&this->dyna)) {
ObjSwitch_SetFloorSwitchSnapPlayerState(this, 1);
ObjSwitch_TryPlayCutsceneInit(this, play, ObjSwitch_FloorSwitchPushDownInit, true);
}
break;
case OBJSWITCH_SUBTYPE_SYNC:
- if (DynaPolyActor_IsInSwitchPressedState(&this->dyna)) {
+ if (DynaPolyActor_IsSwitchPressed(&this->dyna)) {
ObjSwitch_SetFloorSwitchSnapPlayerState(this, 1);
ObjSwitch_TryPlayCutsceneInit(this, play, ObjSwitch_FloorSwitchPushDownInit, true);
} else if (Flags_GetSwitch(play, OBJ_SWITCH_GET_SWITCH_FLAG(&this->dyna.actor))) {
@@ -531,7 +531,7 @@ void ObjSwitch_FloorSwitchUp(ObjSwitch* this, PlayState* play) {
}
break;
case OBJSWITCH_SUBTYPE_TOGGLE:
- if (DynaPolyActor_IsInSwitchPressedState(&this->dyna)) {
+ if (DynaPolyActor_IsSwitchPressed(&this->dyna)) {
s32 isSwitchFlagNotSet =
Flags_GetSwitch(play, OBJ_SWITCH_GET_SWITCH_FLAG(&this->dyna.actor)) ? false : true;
@@ -540,13 +540,13 @@ void ObjSwitch_FloorSwitchUp(ObjSwitch* this, PlayState* play) {
}
break;
case OBJSWITCH_SUBTYPE_RESET:
- if (DynaPolyActor_IsInSwitchPressedState(&this->dyna)) {
+ if (DynaPolyActor_IsSwitchPressed(&this->dyna)) {
ObjSwitch_SetFloorSwitchSnapPlayerState(this, 1);
ObjSwitch_TryPlayCutsceneInit(this, play, ObjSwitch_FloorSwitchPushDownInit, true);
}
break;
case OBJSWITCH_SUBTYPE_RESET_INVERTED:
- if (DynaPolyActor_IsInSwitchPressedState(&this->dyna)) {
+ if (DynaPolyActor_IsSwitchPressed(&this->dyna)) {
ObjSwitch_SetFloorSwitchSnapPlayerState(this, 2);
ObjSwitch_SetSwitchFlagState(this, play, false);
ObjSwitch_FloorSwitchPushDownInit(this);
@@ -584,7 +584,7 @@ void ObjSwitch_FloorSwitchDown(ObjSwitch* this, PlayState* play) {
case OBJSWITCH_SUBTYPE_ONCE:
case OBJSWITCH_SUBTYPE_SYNC:
if (!Flags_GetSwitch(play, OBJ_SWITCH_GET_SWITCH_FLAG(&this->dyna.actor))) {
- if ((play->sceneId == SCENE_SECOM) && DynaPolyActor_IsInSwitchPressedState(&this->dyna)) {
+ if ((play->sceneId == SCENE_SECOM) && DynaPolyActor_IsSwitchPressed(&this->dyna)) {
ObjSwitch_SetSwitchFlagState(this, play, true);
} else {
ObjSwitch_FloorSwitchRiseUpInit(this);
@@ -594,7 +594,7 @@ void ObjSwitch_FloorSwitchDown(ObjSwitch* this, PlayState* play) {
case OBJSWITCH_SUBTYPE_TOGGLE:
case OBJSWITCH_SUBTYPE_RESET:
case OBJSWITCH_SUBTYPE_RESET_INVERTED:
- if (!DynaPolyActor_IsInSwitchPressedState(&this->dyna) &&
+ if (!DynaPolyActor_IsSwitchPressed(&this->dyna) &&
(!Player_InCsMode(play) || (play->sceneId == SCENE_SECOM))) {
if (this->floorSwitchReleaseTimer <= 0) {
if (subType == OBJSWITCH_SUBTYPE_RESET) {
@@ -841,16 +841,16 @@ void ObjSwitch_LargeFloorSwitchUp(ObjSwitch* this, PlayState* play) {
s32 subType = OBJ_SWITCH_GET_SUBTYPE(&this->dyna.actor);
if (subType == OBJSWITCH_SUBTYPE_ONCE) {
- if (DynaPolyActor_IsInHeavySwitchPressedState(&this->dyna)) {
+ if (DynaPolyActor_IsHeavySwitchPressed(&this->dyna)) {
ObjSwitch_SetFloorSwitchSnapPlayerState(this, 1);
ObjSwitch_TryPlayCutsceneInit(this, play, ObjSwitch_LargeFloorSwitchPushDownInit, true);
}
} else if (subType == OBJSWITCH_SUBTYPE_RESET) {
- if (DynaPolyActor_IsInHeavySwitchPressedState(&this->dyna)) {
+ if (DynaPolyActor_IsHeavySwitchPressed(&this->dyna)) {
ObjSwitch_SetFloorSwitchSnapPlayerState(this, 1);
ObjSwitch_TryPlayCutsceneInit(this, play, ObjSwitch_LargeFloorSwitchPushDownInit, true);
}
- } else if (subType == OBJSWITCH_SUBTYPE_RESET_INVERTED && DynaPolyActor_IsInHeavySwitchPressedState(&this->dyna)) {
+ } else if (subType == OBJSWITCH_SUBTYPE_RESET_INVERTED && DynaPolyActor_IsHeavySwitchPressed(&this->dyna)) {
ObjSwitch_SetFloorSwitchSnapPlayerState(this, 2);
ObjSwitch_SetSwitchFlagState(this, play, false);
ObjSwitch_LargeFloorSwitchPushDownInit(this);
@@ -885,7 +885,7 @@ void ObjSwitch_LargeFloorSwitchDown(ObjSwitch* this, PlayState* play) {
ObjSwitch_LargeFloorSwitchRiseUpInit(this);
}
} else if (subType == OBJSWITCH_SUBTYPE_RESET || subType == OBJSWITCH_SUBTYPE_RESET_INVERTED) {
- if (!DynaPolyActor_IsInHeavySwitchPressedState(&this->dyna) && !Player_InCsMode(play)) {
+ if (!DynaPolyActor_IsHeavySwitchPressed(&this->dyna) && !Player_InCsMode(play)) {
if (this->floorSwitchReleaseTimer <= 0) {
if (OBJ_SWITCH_GET_SUBTYPE(&this->dyna.actor) == OBJSWITCH_SUBTYPE_RESET) {
ObjSwitch_SetSwitchFlagState(this, play, false);
@@ -936,7 +936,7 @@ void ObjSwitch_Update(Actor* thisx, PlayState* play) {
case OBJSWITCH_TYPE_FLOOR:
case OBJSWITCH_TYPE_FLOOR_RUSTY:
case OBJSWITCH_TYPE_FLOOR_LARGE:
- this->collisionFlags = this->dyna.stateFlags;
+ this->collisionFlags = this->dyna.interactFlags;
break;
case OBJSWITCH_TYPE_EYE:
this->collisionFlags = this->colliderTris.base.acFlags;
diff --git a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.h b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.h
index f208a60cf..764c724a0 100644
--- a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.h
+++ b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.h
@@ -60,8 +60,6 @@ typedef struct ObjSwitch {
/* 0x254 */ f32 floorSwitchDownScale;
} ObjSwitch; // size = 0x258
-extern const ActorInit Obj_Switch_InitVars;
-
#define OBJ_SWITCH_GET_TYPE(thisx) ((thisx)->params&7)
#define OBJ_SWITCH_GET_SUBTYPE(thisx) ((thisx)->params >> 4 & 7)
#define OBJ_SWITCH_GET_SWITCH_FLAG(thisx) ((thisx)->params >> 8 & 0x7F)
diff --git a/src/overlays/actors/ovl_Obj_Swprize/overlay.cfg b/src/overlays/actors/ovl_Obj_Swprize/overlay.cfg
deleted file mode 100644
index 4b73ca304..000000000
--- a/src/overlays/actors/ovl_Obj_Swprize/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Swprize
-z_obj_swprize.c
diff --git a/src/overlays/actors/ovl_Obj_Swprize/z_obj_swprize.c b/src/overlays/actors/ovl_Obj_Swprize/z_obj_swprize.c
index 6a50a018f..f1b7bfa6f 100644
--- a/src/overlays/actors/ovl_Obj_Swprize/z_obj_swprize.c
+++ b/src/overlays/actors/ovl_Obj_Swprize/z_obj_swprize.c
@@ -23,7 +23,7 @@ void func_80C25710(ObjSwprize* this);
void func_80C2572C(ObjSwprize* this, PlayState* play);
void ObjSwprize_SetupDoNothing(ObjSwprize* this);
-const ActorInit Obj_Swprize_InitVars = {
+ActorInit Obj_Swprize_InitVars = {
ACTOR_OBJ_SWPRIZE,
ACTORCAT_PROP,
FLAGS,
@@ -64,8 +64,8 @@ void func_80C253D0(ObjSwprize* this, PlayState* play) {
if (collectible != NULL) {
if (sp78.y < 0.98f) {
collectible->velocity.y = (sp78.y + 1.0f) * 4.0f;
- collectible->speedXZ = (2.0f * (1.0f - fabsf(sp78.y))) + 2.0f;
- collectible->world.rot.y = Math_FAtan2F(sp78.z, sp78.x) + D_80C257F8[i];
+ collectible->speed = (2.0f * (1.0f - fabsf(sp78.y))) + 2.0f;
+ collectible->world.rot.y = Math_Atan2S_XY(sp78.z, sp78.x) + D_80C257F8[i];
} else {
collectible->world.rot.y = i * (0x10000 / 3);
}
@@ -75,8 +75,8 @@ void func_80C253D0(ObjSwprize* this, PlayState* play) {
collectible = Item_DropCollectible(play, &thisx->world.pos, temp_s0);
if ((collectible != NULL) && (sp78.y < 0.98f)) {
collectible->velocity.y = (sp78.y + 1.0f) * 4.0f;
- collectible->speedXZ = (2.0f * (1.0f - fabsf(sp78.y))) + 2.0f;
- collectible->world.rot.y = Math_FAtan2F(sp78.z, sp78.x);
+ collectible->speed = (2.0f * (1.0f - fabsf(sp78.y))) + 2.0f;
+ collectible->world.rot.y = Math_Atan2S_XY(sp78.z, sp78.x);
}
}
}
@@ -109,12 +109,12 @@ void func_80C25698(ObjSwprize* this) {
}
void func_80C256AC(ObjSwprize* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ if (CutsceneManager_IsNext(this->actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
func_80C253D0(this, play);
func_80C25710(this);
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
@@ -127,7 +127,7 @@ void func_80C2572C(ObjSwprize* this, PlayState* play) {
if (this->timer > 0) {
this->timer--;
if (this->timer == 0) {
- ActorCutscene_Stop(this->actor.cutscene);
+ CutsceneManager_Stop(this->actor.csId);
ObjSwprize_SetupDoNothing(this);
}
}
diff --git a/src/overlays/actors/ovl_Obj_Swprize/z_obj_swprize.h b/src/overlays/actors/ovl_Obj_Swprize/z_obj_swprize.h
index 5b7cd2e09..efba85a87 100644
--- a/src/overlays/actors/ovl_Obj_Swprize/z_obj_swprize.h
+++ b/src/overlays/actors/ovl_Obj_Swprize/z_obj_swprize.h
@@ -16,6 +16,4 @@ typedef struct ObjSwprize {
/* 0x148 */ s16 timer;
} ObjSwprize; // size = 0x14C
-extern const ActorInit Obj_Swprize_InitVars;
-
#endif // Z_OBJ_SWPRIZE_H
diff --git a/src/overlays/actors/ovl_Obj_Syokudai/overlay.cfg b/src/overlays/actors/ovl_Obj_Syokudai/overlay.cfg
deleted file mode 100644
index e03e132b7..000000000
--- a/src/overlays/actors/ovl_Obj_Syokudai/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Syokudai
-z_obj_syokudai.c
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 02a7d59e1..902caa42b 100644
--- a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c
+++ b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c
@@ -18,7 +18,7 @@ void ObjSyokudai_Destroy(Actor* thisx, PlayState* play);
void ObjSyokudai_Update(Actor* thisx, PlayState* play2);
void ObjSyokudai_Draw(Actor* thisx, PlayState* play);
-const ActorInit Obj_Syokudai_InitVars = {
+ActorInit Obj_Syokudai_InitVars = {
ACTOR_OBJ_SYOKUDAI,
ACTORCAT_PROP,
FLAGS,
@@ -143,16 +143,16 @@ void ObjSyokudai_Update(Actor* thisx, PlayState* play2) {
s32 pad1;
if (this->pendingAction != OBJ_SYOKUDAI_PENDING_ACTION_NONE) {
- if (ActorCutscene_GetCurrentIndex() != thisx->cutscene) {
- if (ActorCutscene_GetCanPlayNext(thisx->cutscene) != 0) {
- ActorCutscene_StartAndSetUnkLinkFields(thisx->cutscene, thisx);
+ if (CutsceneManager_GetCurrentCsId() != thisx->csId) {
+ if (CutsceneManager_IsNext(thisx->csId)) {
+ CutsceneManager_StartWithPlayerCs(thisx->csId, thisx);
if (this->pendingAction >= OBJ_SYOKUDAI_PENDING_ACTION_CUTSCENE_AND_SWITCH) {
Flags_SetSwitch(play, switchFlag);
}
} else {
- ActorCutscene_SetIntentToPlay(thisx->cutscene);
+ CutsceneManager_Queue(thisx->csId);
}
- } else if (func_800F22C4(thisx->cutscene, thisx) != 0) {
+ } else if (func_800F22C4(thisx->csId, thisx) != 0) {
this->snuffTimer = OBJ_SYOKUDAI_SNUFF_NEVER;
this->pendingAction = OBJ_SYOKUDAI_PENDING_ACTION_NONE;
}
@@ -171,6 +171,7 @@ void ObjSyokudai_Update(Actor* thisx, PlayState* play2) {
} else {
s32 interaction = OBJ_SYOKUDAI_INTERACTION_NONE;
u32 flameColliderHurtboxDmgFlags = 0;
+
player = GET_PLAYER(play);
if (OBJ_SYOKUDAI_GET_START_LIT(thisx)) {
@@ -196,7 +197,7 @@ void ObjSyokudai_Update(Actor* thisx, PlayState* play2) {
if (this->flameCollider.info.acHitInfo->toucher.dmgFlags & 0x820) {
interaction = OBJ_SYOKUDAI_INTERACTION_ARROW_FA;
}
- } else if (player->itemActionParam == PLAYER_AP_STICK) {
+ } else if (player->heldItemAction == PLAYER_IA_STICK) {
Vec3f stickTipSeparationVec;
Math_Vec3f_Diff(&player->meleeWeaponInfo[0].tip, &thisx->world.pos, &stickTipSeparationVec);
@@ -240,7 +241,7 @@ void ObjSyokudai_Update(Actor* thisx, PlayState* play2) {
if (groupSize == 0) {
if ((type == OBJ_SYOKUDAI_TYPE_NO_SWITCH) && (switchFlag == 0x7F)) {
this->snuffTimer = OBJ_SYOKUDAI_SNUFF_NEVER;
- } else if (thisx->cutscene >= 0) {
+ } else if (thisx->csId >= 0) {
this->pendingAction = OBJ_SYOKUDAI_PENDING_ACTION_CUTSCENE_AND_SWITCH;
} else {
Flags_SetSwitch(play, switchFlag);
diff --git a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.h b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.h
index d1a0be1c8..d49f38289 100644
--- a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.h
+++ b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.h
@@ -16,8 +16,6 @@ typedef struct ObjSyokudai {
/* 0x1E4 */ LightInfo lightInfo;
} ObjSyokudai; // size = 0x1F4
-extern const ActorInit Obj_Syokudai_InitVars;
-
typedef enum {
/* 0 */ OBJ_SYOKUDAI_TYPE_SWITCH_CAUSES_FLAME,
/* 1 */ OBJ_SYOKUDAI_TYPE_FLAME_CAUSES_SWITCH,
diff --git a/src/overlays/actors/ovl_Obj_Takaraya_Wall/overlay.cfg b/src/overlays/actors/ovl_Obj_Takaraya_Wall/overlay.cfg
deleted file mode 100644
index 71b838a3a..000000000
--- a/src/overlays/actors/ovl_Obj_Takaraya_Wall/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Takaraya_Wall
-z_obj_takaraya_wall.c
diff --git a/src/overlays/actors/ovl_Obj_Takaraya_Wall/z_obj_takaraya_wall.c b/src/overlays/actors/ovl_Obj_Takaraya_Wall/z_obj_takaraya_wall.c
index e4936f1fb..b8ab34df0 100644
--- a/src/overlays/actors/ovl_Obj_Takaraya_Wall/z_obj_takaraya_wall.c
+++ b/src/overlays/actors/ovl_Obj_Takaraya_Wall/z_obj_takaraya_wall.c
@@ -18,7 +18,7 @@ void ObjTakarayaWall_Draw(Actor* thisx, PlayState* play);
void func_80AD9B04(ObjTakarayaWall* this, PlayState* play);
#if 0
-const ActorInit Obj_Takaraya_Wall_InitVars = {
+ActorInit Obj_Takaraya_Wall_InitVars = {
ACTOR_OBJ_TAKARAYA_WALL,
ACTORCAT_BG,
FLAGS,
diff --git a/src/overlays/actors/ovl_Obj_Takaraya_Wall/z_obj_takaraya_wall.h b/src/overlays/actors/ovl_Obj_Takaraya_Wall/z_obj_takaraya_wall.h
index 603041d9f..225e26512 100644
--- a/src/overlays/actors/ovl_Obj_Takaraya_Wall/z_obj_takaraya_wall.h
+++ b/src/overlays/actors/ovl_Obj_Takaraya_Wall/z_obj_takaraya_wall.h
@@ -13,6 +13,4 @@ typedef struct ObjTakarayaWall {
/* 0x148 */ char unk_148[0x98];
} ObjTakarayaWall; // size = 0x1E0
-extern const ActorInit Obj_Takaraya_Wall_InitVars;
-
#endif // Z_OBJ_TAKARAYA_WALL_H
diff --git a/src/overlays/actors/ovl_Obj_Taru/overlay.cfg b/src/overlays/actors/ovl_Obj_Taru/overlay.cfg
deleted file mode 100644
index 70ba0b5b3..000000000
--- a/src/overlays/actors/ovl_Obj_Taru/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Taru
-z_obj_taru.c
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 c7aa4549d..aeaddd2ee 100644
--- a/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c
+++ b/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c
@@ -24,7 +24,7 @@ void func_80B9C07C(ObjTaru* this, PlayState* play);
void func_80B9C174(ObjTaru* this, PlayState* play);
void func_80B9C1A0(ObjTaru* this, PlayState* play);
-const ActorInit Obj_Taru_InitVars = {
+ActorInit Obj_Taru_InitVars = {
ACTOR_OBJ_TARU,
ACTORCAT_BG,
FLAGS,
@@ -181,7 +181,7 @@ void func_80B9BCBC(ObjTaru* this, PlayState* play) {
if (spawnedActor != NULL) {
spawnedActor->parent = &this->dyna.actor;
spawnedActor->velocity.y = 12.0f;
- spawnedActor->speedXZ = 2.0f;
+ spawnedActor->speed = 2.0f;
}
}
}
@@ -204,7 +204,7 @@ void ObjTaru_Init(Actor* thisx, PlayState* play) {
if (OBJ_TARU_GET_80(thisx)) {
if (Flags_GetSwitch(play, OBJ_TARU_GET_7F(thisx))) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
} else {
DynaPolyActor_LoadMesh(play, &this->dyna, &object_taru_Colheader_001CB0);
}
@@ -279,7 +279,7 @@ void func_80B9C07C(ObjTaru* this, PlayState* play) {
this->actionFunc = func_80B9C1A0;
} else {
this->dyna.actor.flags |= ACTOR_FLAG_10;
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->dyna.actor.draw = NULL;
this->actionFunc = func_80B9C174;
}
@@ -292,17 +292,18 @@ void func_80B9C07C(ObjTaru* this, PlayState* play) {
void func_80B9C174(ObjTaru* this, PlayState* play) {
func_80B9BD84(this, play);
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
void func_80B9C1A0(ObjTaru* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
Flags_SetSwitch(play, OBJ_TARU_GET_7F(&this->dyna.actor));
- Actor_MarkForDeath(&this->dyna.actor);
- } else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ Actor_Kill(&this->dyna.actor);
+ return;
}
+
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
void ObjTaru_Update(Actor* thisx, PlayState* play) {
@@ -315,7 +316,7 @@ void ObjTaru_Update(Actor* thisx, PlayState* play) {
if (this->unk_1AD >= 0) {
switch (this->unk_1AD) {
case 0:
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EN_STALGOLD_ROLL);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EN_STALGOLD_ROLL);
if (Rand_ZeroOne() < 0.1f) {
this->unk_1AD = Rand_S16Offset(40, 80);
} else {
diff --git a/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.h b/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.h
index 063e90ef4..629bc57a5 100644
--- a/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.h
+++ b/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.h
@@ -23,6 +23,4 @@ typedef struct ObjTaru {
/* 0x1AD */ s8 unk_1AD;
} ObjTaru; // size = 0x1B0
-extern const ActorInit Obj_Taru_InitVars;
-
#endif // Z_OBJ_TARU_H
diff --git a/src/overlays/actors/ovl_Obj_Toge/overlay.cfg b/src/overlays/actors/ovl_Obj_Toge/overlay.cfg
deleted file mode 100644
index 0a249ec38..000000000
--- a/src/overlays/actors/ovl_Obj_Toge/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Toge
-z_obj_toge.c
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 a37f64b84..c6ed2cc2c 100644
--- a/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.c
+++ b/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.c
@@ -23,7 +23,7 @@ void func_809A481C(ObjToge* this, PlayState* play);
void func_809A488C(ObjToge* this);
void func_809A48AC(ObjToge* this, PlayState* play);
-const ActorInit Obj_Toge_InitVars = {
+ActorInit Obj_Toge_InitVars = {
ACTOR_OBJ_TOGE,
ACTORCAT_PROP,
FLAGS,
@@ -132,13 +132,13 @@ void ObjToge_Init(Actor* thisx, PlayState* play) {
Collider_InitCylinder(play, &this->collider);
if (OBJTOGE_GET_PATH(thisx) == 0xFF) {
- Actor_MarkForDeath(thisx);
+ Actor_Kill(thisx);
return;
}
path = &play->setupPathList[OBJTOGE_GET_PATH(thisx)];
if (path->count != 2) {
- Actor_MarkForDeath(thisx);
+ Actor_Kill(thisx);
return;
}
@@ -148,7 +148,7 @@ void ObjToge_Init(Actor* thisx, PlayState* play) {
Math_Vec3f_Copy(&thisx->world.pos, &this->unk_198[0]);
thisx->world.rot.y = Math_Vec3f_Yaw(&this->unk_198[0], &this->unk_198[1]);
this->unk_194 = 0;
- thisx->speedXZ = 0.0f;
+ thisx->speed = 0.0f;
if (sp3E > 0) {
s16 sp36;
@@ -228,7 +228,7 @@ void func_809A481C(ObjToge* this, PlayState* play) {
}
void func_809A488C(ObjToge* this) {
- this->actor.speedXZ = 1.0f;
+ this->actor.speed = 1.0f;
this->actionFunc = func_809A48AC;
}
@@ -237,16 +237,17 @@ void func_809A48AC(ObjToge* this, PlayState* play) {
s32 sp30 = this->unk_194 ^ 1;
if (this->unk_1B4 && (this->unk_194 == 1)) {
- Math_StepToF(&this->actor.speedXZ, 2.0f, 0.4f);
+ Math_StepToF(&this->actor.speed, 2.0f, 0.4f);
} else {
- Math_StepToF(&this->actor.speedXZ, D_809A4CDC[OBJTOGE_GET_700(&this->actor)], 1.5f);
+ Math_StepToF(&this->actor.speed, D_809A4CDC[OBJTOGE_GET_700(&this->actor)], 1.5f);
this->actor.shape.rot.y += 0x1770;
}
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, D_809A4D0C[OBJTOGE_GET_4000(&this->actor)] * 30.0f, 0.0f, 0x81);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, D_809A4D0C[OBJTOGE_GET_4000(&this->actor)] * 30.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_80);
- if (this->actor.bgCheckFlags & 8) {
+ if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) {
this->actor.world.rot.y = Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_198[this->unk_194]);
this->unk_194 = sp30;
if (this->unk_1B4 && (this->unk_194 == 0)) {
@@ -254,7 +255,7 @@ void func_809A48AC(ObjToge* this, PlayState* play) {
} else {
func_809A4744(this);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SPINE_TRAP_MOVE);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SPINE_TRAP_MOVE);
} else {
s16 yaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_198[sp30]) - this->actor.world.rot.y;
@@ -267,7 +268,7 @@ void func_809A48AC(ObjToge* this, PlayState* play) {
} else {
func_809A4744(this);
}
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_SPINE_TRAP_MOVE);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_SPINE_TRAP_MOVE);
}
}
}
@@ -279,7 +280,7 @@ void ObjToge_Update(Actor* thisx, PlayState* play) {
if (this->collider.base.acFlags & AC_HIT) {
if (this->collider.info.acHitInfo->toucher.dmgFlags & 0x1000) {
func_809A43A8(this, play);
- Actor_SetColorFilter(&this->actor, 0, 250, 0, 250);
+ Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 250, COLORFILTER_BUFFLAG_OPA, 250);
}
collider->base.acFlags &= ~AC_HIT;
}
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 9a55a4219..8259e62c8 100644
--- a/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.h
+++ b/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.h
@@ -29,6 +29,4 @@ typedef struct ObjToge {
/* 0x1CC */ f32 unk_1CC;
} ObjToge; // size = 0x1D0
-extern const ActorInit Obj_Toge_InitVars;
-
#endif // Z_OBJ_TOGE_H
diff --git a/src/overlays/actors/ovl_Obj_Tokei_Step/overlay.cfg b/src/overlays/actors/ovl_Obj_Tokei_Step/overlay.cfg
deleted file mode 100644
index 1f100873c..000000000
--- a/src/overlays/actors/ovl_Obj_Tokei_Step/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Tokei_Step
-z_obj_tokei_step.c
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 6d4923043..6cdada70b 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
@@ -28,7 +28,7 @@ void ObjTokeiStep_SetupDoNothingOpen(ObjTokeiStep* this);
void ObjTokeiStep_DoNothingOpen(ObjTokeiStep* this, PlayState* play);
void ObjTokeiStep_DrawOpen(Actor* thisx, PlayState* play);
-const ActorInit Obj_Tokei_Step_InitVars = {
+ActorInit Obj_Tokei_Step_InitVars = {
ACTOR_OBJ_TOKEI_STEP,
ACTORCAT_BG,
FLAGS,
@@ -156,7 +156,7 @@ s32 ObjTokeiStep_OpenProcess(ObjTokeiStep* this, PlayState* play) {
if (hasPrevBounced && (panel->numBounces < 3) && (panel->startFallingTimer <= 0)) {
finalPosY = sPanelXOffsets[i] + this->dyna.actor.world.pos.y;
if (!panel->hasSoundPlayed) {
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_CLOCK_TOWER_STAIR_MOVE);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_CLOCK_TOWER_STAIR_MOVE);
panel->hasSoundPlayed = true;
}
panel->posChangeY += -2.5f;
@@ -195,7 +195,7 @@ void ObjTokeiStep_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
DynaPolyActor_Init(&this->dyna, 0);
- if ((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) && (play->csCtx.currentCsIndex == 0)) {
+ if ((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0)) {
DynaPolyActor_LoadMesh(play, &this->dyna, &gClocktowerPanelCol);
ObjTokeiStep_InitSteps(this);
ObjTokeiStep_SetupBeginOpen(this);
@@ -221,12 +221,12 @@ void ObjTokeiStep_SetupBeginOpen(ObjTokeiStep* this) {
}
void ObjTokeiStep_BeginOpen(ObjTokeiStep* this, PlayState* play) {
- CsCmdActorAction* action;
+ CsCmdActorCue* cue;
- if (Cutscene_CheckActorAction(play, 134)) {
- action = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 134)];
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_134)) {
+ cue = play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_134)];
- if ((action->startFrame == play->csCtx.frames) && (action->action != 0)) {
+ if ((cue->startFrame == play->csCtx.curFrame) && (cue->id != 0)) {
this->dyna.actor.draw = ObjTokeiStep_DrawOpen;
ObjTokeiStep_SetupOpen(this);
}
@@ -247,7 +247,7 @@ void ObjTokeiStep_SetupOpen(ObjTokeiStep* this) {
void ObjTokeiStep_Open(ObjTokeiStep* this, PlayState* play) {
if (ObjTokeiStep_OpenProcess(this, play)) {
- func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
ObjTokeiStep_SetupDoNothingOpen(this);
}
}
diff --git a/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.h b/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.h
index 537e7ecc7..ddb1517de 100644
--- a/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.h
+++ b/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.h
@@ -23,6 +23,4 @@ typedef struct ObjTokeiStep {
/* 0x160 */ ObjTokeiStepPanel panels[7];
} ObjTokeiStep; // size = 0x1EC
-extern const ActorInit Obj_Tokei_Step_InitVars;
-
#endif // Z_OBJ_TOKEI_STEP_H
diff --git a/src/overlays/actors/ovl_Obj_Tokei_Tobira/overlay.cfg b/src/overlays/actors/ovl_Obj_Tokei_Tobira/overlay.cfg
deleted file mode 100644
index 3182fc3f4..000000000
--- a/src/overlays/actors/ovl_Obj_Tokei_Tobira/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Tokei_Tobira
-z_obj_tokei_tobira.c
diff --git a/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.c b/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.c
index 15e01b832..0c81ec028 100644
--- a/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.c
+++ b/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.c
@@ -16,7 +16,7 @@ void ObjTokeiTobira_Update(Actor* thisx, PlayState* play);
void ObjTokeiTobira_Draw(Actor* thisx, PlayState* play);
#if 0
-const ActorInit Obj_Tokei_Tobira_InitVars = {
+ActorInit Obj_Tokei_Tobira_InitVars = {
ACTOR_OBJ_TOKEI_TOBIRA,
ACTORCAT_BG,
FLAGS,
diff --git a/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.h b/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.h
index 49e47af19..8f9983995 100644
--- a/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.h
+++ b/src/overlays/actors/ovl_Obj_Tokei_Tobira/z_obj_tokei_tobira.h
@@ -14,6 +14,4 @@ typedef struct ObjTokeiTobira {
/* 0x160 */ char unk_160[0x10];
} ObjTokeiTobira; // size = 0x170
-extern const ActorInit Obj_Tokei_Tobira_InitVars;
-
#endif // Z_OBJ_TOKEI_TOBIRA_H
diff --git a/src/overlays/actors/ovl_Obj_Tokei_Turret/overlay.cfg b/src/overlays/actors/ovl_Obj_Tokei_Turret/overlay.cfg
deleted file mode 100644
index 57bac89fa..000000000
--- a/src/overlays/actors/ovl_Obj_Tokei_Turret/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Tokei_Turret
-z_obj_tokei_turret.c
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 a0183266f..3dc8b3297 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
@@ -16,7 +16,7 @@ void ObjTokeiTurret_Destroy(Actor* thisx, PlayState* play);
void ObjTokeiTurret_Update(Actor* thisx, PlayState* play);
void ObjTokeiTurret_Draw(Actor* thisx, PlayState* play);
-const ActorInit Obj_Tokei_Turret_InitVars = {
+ActorInit Obj_Tokei_Turret_InitVars = {
ACTOR_OBJ_TOKEI_TURRET,
ACTORCAT_BG,
FLAGS,
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 7a2db071e..620228f53 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
@@ -16,6 +16,4 @@ typedef struct ObjTokeiTurret {
/* 0x000 */ DynaPolyActor dyna;
} ObjTokeiTurret; // size = 0x15C
-extern const ActorInit Obj_Tokei_Turret_InitVars;
-
#endif // Z_OBJ_TOKEI_TURRET_H
diff --git a/src/overlays/actors/ovl_Obj_Tokeidai/overlay.cfg b/src/overlays/actors/ovl_Obj_Tokeidai/overlay.cfg
deleted file mode 100644
index 4458dfd69..000000000
--- a/src/overlays/actors/ovl_Obj_Tokeidai/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Tokeidai
-z_obj_tokeidai.c
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 421f5dcf0..3b933157b 100644
--- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c
+++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c
@@ -36,7 +36,7 @@
#define THIS ((ObjTokeidai*)thisx)
-#define GET_CURRENT_CLOCK_HOUR(this) ((s32)((this)->clockTime * (24.0f / 0x10000)))
+#define GET_CURRENT_CLOCK_HOUR(this) ((s32)TIME_TO_HOURS_F((this)->clockTime))
#define GET_CURRENT_CLOCK_MINUTE(this) ((s32)((this)->clockTime * (360 * 2.0f / 0x10000)) % 30)
#define GET_CLOCK_FACE_ROTATION(currentClockHour) ((s16)(currentClockHour * (0x10000 / 24.0f)))
#define GET_MINUTE_RING_OR_EXTERIOR_GEAR_ROTATION(currentClockMinute) \
@@ -62,7 +62,7 @@ void ObjTokeidai_Clock_Draw(Actor* thisx, PlayState* play);
void ObjTokeidai_Counterweight_Draw(Actor* thisx, PlayState* play);
void ObjTokeidai_ExteriorGear_Draw(Actor* thisx, PlayState* play);
-const ActorInit Obj_Tokeidai_InitVars = {
+ActorInit Obj_Tokeidai_InitVars = {
ACTOR_OBJ_TOKEIDAI,
ACTORCAT_PROP,
FLAGS,
@@ -121,14 +121,14 @@ void ObjTokeidai_ExteriorGear_Init(ObjTokeidai* this, PlayState* play) {
this->opaDList = gClockTowerExteriorGearDL;
ObjTokeidai_SetupClockOrExteriorGear(this);
- if (((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) && (play->csCtx.currentCsIndex == 0)) ||
- ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 2) && (play->csCtx.currentCsIndex == 0))) {
+ 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) {
this->actionFunc = ObjTokeidai_ExteriorGear_OpenedIdle;
this->actor.world.pos.y += this->actor.scale.y * 1900.0f;
this->actor.shape.yOffset = 1500.0f;
- gSaveContext.save.weekEventReg[8] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_08_40);
} else {
this->actionFunc = ObjTokeidai_ExteriorGear_Idle;
}
@@ -138,8 +138,8 @@ void ObjTokeidai_TowerClock_Init(ObjTokeidai* this, PlayState* play) {
this->actor.draw = ObjTokeidai_Clock_Draw;
ObjTokeidai_Clock_Init(this);
- if (((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) && (play->csCtx.currentCsIndex == 0)) ||
- ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 2) && (play->csCtx.currentCsIndex == 0))) {
+ 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) {
this->actor.world.pos.y += (this->actor.scale.y * 5191.0f) - 50.0f;
@@ -171,8 +171,8 @@ void ObjTokeidai_Counterweight_Init(ObjTokeidai* this, PlayState* play) {
this->spotlightIntensity = 0;
}
- if (((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) && (play->csCtx.currentCsIndex == 0)) ||
- ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 2) && (play->csCtx.currentCsIndex == 0))) {
+ if (((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0)) ||
+ ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0))) {
this->spotlightIntensity = 0;
ObjTokeidai_SetupTowerOpening(this);
@@ -285,7 +285,7 @@ void ObjTokeidai_RotateOnMinuteChange(ObjTokeidai* this, s32 playSfx) {
if (currentClockMinute != this->clockMinute) {
if (this->minuteRingOrExteriorGearRotationTimer == 8 && playSfx) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CLOCK_TOWER_SECOND_HAND);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CLOCK_TOWER_SECOND_HAND);
}
if (this->minuteRingOrExteriorGearRotationTimer > 8) {
@@ -318,21 +318,21 @@ void ObjTokeidai_RotateOnMinuteChange(ObjTokeidai* this, s32 playSfx) {
}
void ObjTokeidai_ExteriorGear_Collapse(ObjTokeidai* this, PlayState* play) {
- if ((this->actor.bgCheckFlags & 1) || 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;
this->actor.shape.rot.z += 0x50;
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
}
}
void ObjTokeidai_ExteriorGear_OpenedIdle(ObjTokeidai* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 132) &&
- play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 132)]->action == 2) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_132) &&
+ play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_132)]->id == 2) {
this->actionFunc = ObjTokeidai_ExteriorGear_Collapse;
- this->actor.speedXZ = this->actor.scale.y * 5.0f;
+ this->actor.speed = this->actor.scale.y * 5.0f;
this->actor.velocity.y = 0.0f;
this->actor.terminalVelocity = this->actor.scale.y * -50.0f;
this->actor.gravity = this->actor.scale.y * -5.0f;
@@ -397,8 +397,8 @@ void ObjTokeidai_TowerClock_SlideOff(ObjTokeidai* this, PlayState* play) {
}
void ObjTokeidai_TowerClock_OpenedIdle(ObjTokeidai* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 132) &&
- play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 132)]->action == 1) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_132) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_132)]->id == 1)) {
this->actionFunc = ObjTokeidai_TowerClock_SlideOff;
this->slidingClockFaceAngle = 0;
this->aerialClockFaceSpeed = -0xD;
@@ -415,8 +415,8 @@ void ObjTokeidai_Counterweight_Collapse(ObjTokeidai* this, PlayState* play) {
}
void ObjTokeidai_Counterweight_OpenedIdle(ObjTokeidai* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 132) &&
- play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 132)]->action == 3) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_132) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_132)]->id == 3)) {
this->actionFunc = ObjTokeidai_Counterweight_Collapse;
this->xRotation = 0;
this->actor.velocity.y = 0.0f;
@@ -432,31 +432,30 @@ void ObjTokeidai_TerminaFieldWalls_Collapse(ObjTokeidai* this, PlayState* play)
}
void ObjTokeidai_TerminaFieldWalls_Idle(ObjTokeidai* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 132) != 0 &&
- play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 132)]->action == 1) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_132) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_132)]->id == 1)) {
this->actionFunc = ObjTokeidai_TerminaFieldWalls_Collapse;
}
}
void ObjTokeidai_TowerOpening_EndCutscene(ObjTokeidai* this, PlayState* play) {
- if (Cutscene_CheckActorAction(play, 132) != 0 &&
- play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 132)]->action == 5) {
- gSaveContext.save.weekEventReg[8] |= 0x40;
- if (((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) &&
- (play->csCtx.currentCsIndex == 0)) ||
- ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 2) &&
- (play->csCtx.currentCsIndex == 0))) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_132) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_132)]->id == 5)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_08_40);
+ if (((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0)) ||
+ ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0))) {
Audio_SetCutsceneFlag(false);
- gSaveContext.save.cutscene = 0;
+ gSaveContext.save.cutsceneIndex = 0;
gSaveContext.nextCutsceneIndex = 0;
gSaveContext.respawnFlag = 2;
play->transitionTrigger = TRANS_TRIGGER_START;
play->nextEntrance = gSaveContext.respawn[RESPAWN_MODE_RETURN].entrance;
- play->transitionType = TRANS_TYPE_02;
- if (gSaveContext.respawn[RESPAWN_MODE_RETURN].playerParams == 0xCFF) {
- gSaveContext.nextTransitionType = TRANS_TYPE_21;
+ play->transitionType = TRANS_TYPE_FADE_BLACK;
+ if (gSaveContext.respawn[RESPAWN_MODE_RETURN].playerParams ==
+ PLAYER_PARAMS(0xFF, PLAYER_INITMODE_TELESCOPE)) {
+ gSaveContext.nextTransitionType = TRANS_TYPE_CIRCLE;
} else {
- gSaveContext.nextTransitionType = TRANS_TYPE_02;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
}
}
this->actionFunc = ObjTokeidai_DoNothing;
@@ -504,15 +503,15 @@ void ObjTokeidai_TowerOpening_DropCounterweight(ObjTokeidai* this, PlayState* pl
this->xRotation = 0x4000;
switch (this->boundCount) {
case 0:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CLOCK_TOWER_BOUND_0);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CLOCK_TOWER_BOUND_0);
break;
case 1:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CLOCK_TOWER_BOUND_1);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CLOCK_TOWER_BOUND_1);
break;
case 2:
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CLOCK_TOWER_BOUND_2);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CLOCK_TOWER_BOUND_2);
break;
}
this->boundCount++;
@@ -552,7 +551,7 @@ void ObjTokeidai_TowerOpening_FinishRaise(ObjTokeidai* this, PlayState* play) {
type = OBJ_TOKEIDAI_TYPE(&this->actor);
if ((type == OBJ_TOKEIDAI_TYPE_TOWER_CLOCK_CLOCK_TOWN) ||
(type == OBJ_TOKEIDAI_TYPE_TOWER_CLOCK_TERMINA_FIELD)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CLOCK_TOWER_FALL);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CLOCK_TOWER_FALL);
}
this->yTranslation = 3400;
this->actionFunc = ObjTokeidai_TowerOpening_DropCounterweight;
@@ -576,7 +575,7 @@ void ObjTokeidai_TowerOpening_RaiseTower(ObjTokeidai* this, PlayState* play) {
type = OBJ_TOKEIDAI_TYPE(&this->actor);
if ((type == OBJ_TOKEIDAI_TYPE_TOWER_CLOCK_CLOCK_TOWN) ||
(type == OBJ_TOKEIDAI_TYPE_TOWER_CLOCK_TERMINA_FIELD)) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_CLOCK_TOWER_STOP);
+ Actor_PlaySfx(&this->actor, NA_SE_EV_CLOCK_TOWER_STOP);
}
this->yTranslation = 3400;
this->actionFunc = ObjTokeidai_TowerOpening_FinishRaise;
@@ -586,9 +585,9 @@ void ObjTokeidai_TowerOpening_RaiseTower(ObjTokeidai* this, PlayState* play) {
}
void ObjTokeidai_TowerOpening_Start(ObjTokeidai* this, PlayState* play) {
- if ((Cutscene_CheckActorAction(play, 132) &&
- play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 132)]->action == 4) ||
- (gSaveContext.save.weekEventReg[8] & 0x40)) {
+ if ((Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_132) &&
+ (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_132)]->id == 4)) ||
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40)) {
this->actionFunc = ObjTokeidai_TowerOpening_RaiseTower;
}
}
@@ -610,8 +609,8 @@ 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) ||
- (gSaveContext.save.weekEventReg[8] & 0x40)) {
+ 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 {
this->actor.draw = NULL;
@@ -619,7 +618,7 @@ void ObjTokeidai_StaircaseToRooftop_Idle(ObjTokeidai* this, PlayState* play) {
}
s32 ObjTokeidai_IsPostFirstCycleFinalHours(ObjTokeidai* this, PlayState* play) {
- if (gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) {
+ if (gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] == ITEM_NONE) {
return false;
}
if (CURRENT_DAY == 3 && gSaveContext.save.time < CLOCK_TIME(6, 0)) {
@@ -686,18 +685,18 @@ void ObjTokeidai_TowerClock_Idle(ObjTokeidai* this, PlayState* play) {
if (CURRENT_DAY == 3 && this->clockHour < 6 && gSaveContext.save.time < CLOCK_TIME(6, 0)) {
this->actor.draw = ObjTokeidai_Clock_Draw;
ObjTokeidai_SetupTowerOpening(this);
- gSaveContext.save.weekEventReg[8] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_08_40);
return;
}
- if (play->csCtx.state != 0) {
+ if (play->csCtx.state != CS_STATE_IDLE) {
this->actor.home.rot.x = 1;
this->clockTime += 3;
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 &&
- ActorCutscene_GetCurrentIndex() == -1) {
+ CutsceneManager_GetCurrentCsId() == CS_ID_NONE) {
this->actor.draw = NULL;
}
this->clockTime = gSaveContext.save.time;
@@ -723,14 +722,14 @@ void ObjTokeidai_ExteriorGear_Idle(ObjTokeidai* this, PlayState* play) {
if (ObjTokeidai_IsPostFirstCycleFinalHours(this, play)) {
this->actor.draw = ObjTokeidai_ExteriorGear_Draw;
} else {
- if (play->csCtx.state != 0) {
+ if (play->csCtx.state != CS_STATE_IDLE) {
this->actor.home.rot.x = 1;
this->clockTime += 3;
this->actor.draw = ObjTokeidai_ExteriorGear_Draw;
} else {
if (!(play->actorCtx.flags & ACTORCTX_FLAG_1) &&
(OBJ_TOKEIDAI_TYPE(&this->actor) == OBJ_TOKEIDAI_TYPE_EXTERIOR_GEAR_TERMINA_FIELD) &&
- (ActorCutscene_GetCurrentIndex() == -1)) {
+ (CutsceneManager_GetCurrentCsId() == CS_ID_NONE)) {
this->actor.draw = NULL;
}
this->clockTime = gSaveContext.save.time;
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 70ef31c79..e670d19e0 100644
--- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.h
+++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.h
@@ -62,6 +62,4 @@ typedef struct ObjTokeidai {
/* 0x174 */ ObjTokeidaiActionFunc actionFunc;
} ObjTokeidai; // size = 0x178
-extern const ActorInit Obj_Tokeidai_InitVars;
-
#endif // Z_OBJ_TOKEIDAI_H
diff --git a/src/overlays/actors/ovl_Obj_Toudai/overlay.cfg b/src/overlays/actors/ovl_Obj_Toudai/overlay.cfg
deleted file mode 100644
index fec5d2975..000000000
--- a/src/overlays/actors/ovl_Obj_Toudai/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Toudai
-z_obj_toudai.c
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 4a71acc95..07561b8cd 100644
--- a/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.c
+++ b/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.c
@@ -16,7 +16,7 @@ void ObjToudai_Destroy(Actor* thisx, PlayState* play);
void ObjToudai_Update(Actor* thisx, PlayState* play);
void ObjToudai_Draw(Actor* thisx, PlayState* play);
-const ActorInit Obj_Toudai_InitVars = {
+ActorInit Obj_Toudai_InitVars = {
ACTOR_OBJ_TOUDAI,
ACTORCAT_PROP,
FLAGS,
diff --git a/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.h b/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.h
index c1af4d733..60f0b9796 100644
--- a/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.h
+++ b/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.h
@@ -18,6 +18,4 @@ typedef struct ObjToudai {
/* 0x23A */ UNK_TYPE1 pad23A[6];
} ObjToudai;// size = 0x240
-extern const ActorInit Obj_Toudai_InitVars;
-
#endif // Z_OBJ_TOUDAI_H
diff --git a/src/overlays/actors/ovl_Obj_Tree/overlay.cfg b/src/overlays/actors/ovl_Obj_Tree/overlay.cfg
deleted file mode 100644
index c3a0007c9..000000000
--- a/src/overlays/actors/ovl_Obj_Tree/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Tree
-z_obj_tree.c
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 ef55e5ab7..996bc3810 100644
--- a/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c
+++ b/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c
@@ -20,7 +20,7 @@ void ObjTree_DoNothing(ObjTree* this, PlayState* play);
void ObjTree_SetupDoNothing(ObjTree* this);
void ObjTree_Sway(ObjTree* this, PlayState* play);
-const ActorInit Obj_Tree_InitVars = {
+ActorInit Obj_Tree_InitVars = {
ACTOR_OBJ_TREE,
ACTORCAT_PROP,
FLAGS,
@@ -99,7 +99,7 @@ void ObjTree_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.uncullZoneForward = 4000.0f;
} else {
Actor_SetScale(&this->dyna.actor, 0.1f);
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
CollisionHeader_GetVirtual(&object_tree_Colheader_001B2C, &colHeader);
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
}
@@ -141,7 +141,7 @@ void ObjTree_SetupSway(ObjTree* this) {
this->timer = 0;
this->swayAmplitude = 546.0f;
this->swayVelocity = 35 * 0x10000 / 360;
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_TREE_SWING);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_TREE_SWING);
this->actionFunc = ObjTree_Sway;
}
diff --git a/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.h b/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.h
index 828530ab3..8d40c57f1 100644
--- a/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.h
+++ b/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.h
@@ -19,6 +19,4 @@ typedef struct ObjTree {
/* 0x1B4 */ s16 timer;
} ObjTree; // size = 0x1B8
-extern const ActorInit Obj_Tree_InitVars;
-
#endif // Z_OBJ_TREE_H
diff --git a/src/overlays/actors/ovl_Obj_Tsubo/overlay.cfg b/src/overlays/actors/ovl_Obj_Tsubo/overlay.cfg
deleted file mode 100644
index 00f17aeb5..000000000
--- a/src/overlays/actors/ovl_Obj_Tsubo/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Tsubo
-z_obj_tsubo.c
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 eccc9c2c3..5f0e6c411 100644
--- a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c
+++ b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c
@@ -10,7 +10,7 @@
#include "objects/object_tsubo/object_tsubo.h"
#include "objects/object_racetsubo/object_racetsubo.h"
-#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_800000 | ACTOR_FLAG_4000000)
+#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_800000 | ACTOR_FLAG_CAN_PRESS_SWITCH)
#define THIS ((ObjTsubo*)thisx)
@@ -41,7 +41,7 @@ s16 D_80929504 = 0;
s16 D_80929508 = 0;
s16 D_8092950C = 0;
-const ActorInit Obj_Tsubo_InitVars = {
+ActorInit Obj_Tsubo_InitVars = {
ACTOR_OBJ_TSUBO,
ACTORCAT_PROP,
FLAGS,
@@ -148,7 +148,7 @@ void ObjTsubo_SpawnGoldSkulltula(ObjTsubo* this, PlayState* play, s32 arg2) {
if (child != NULL) {
child->parent = &this->actor;
child->velocity.y = 0.0f;
- child->speedXZ = 0.0f;
+ child->speed = 0.0f;
}
}
}
@@ -190,20 +190,21 @@ void ObjTsubo_Init(Actor* thisx, PlayState* play) {
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
this->objBankIndex = Object_GetIndex(&play->objectCtx, sPotTypeData[type].objId);
if (this->objBankIndex < 0) {
- Actor_MarkForDeath(&this->actor);
- } else {
- this->actor.shape.shadowScale = 1.8f;
- this->homeRoom = this->actor.room;
- if ((type != OBJ_TSUBO_TYPE_3) && (sp2C != 2)) {
- if (Item_CanDropBigFairy(play, OBJ_TSUBO_P003F(&this->actor), OBJ_TSUBO_PFE00(&this->actor))) {
- this->unk_198 = true;
- }
- }
- if ((type == OBJ_TSUBO_TYPE_3) || (sp2C != 2) || !func_809275C0(this, play)) {
- this->unk_19A = -1;
- }
- func_80928914(this);
+ Actor_Kill(&this->actor);
+ return;
}
+
+ this->actor.shape.shadowScale = 1.8f;
+ this->homeRoom = this->actor.room;
+ if ((type != OBJ_TSUBO_TYPE_3) && (sp2C != 2)) {
+ if (Item_CanDropBigFairy(play, OBJ_TSUBO_P003F(&this->actor), OBJ_TSUBO_PFE00(&this->actor))) {
+ this->unk_198 = true;
+ }
+ }
+ if ((type == OBJ_TSUBO_TYPE_3) || (sp2C != 2) || !func_809275C0(this, play)) {
+ this->unk_19A = -1;
+ }
+ func_80928914(this);
}
void ObjTsubo_Destroy(Actor* thisx, PlayState* play2) {
@@ -430,7 +431,7 @@ void func_80928914(ObjTsubo* this) {
void func_80928928(ObjTsubo* this, PlayState* play) {
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f, 0x44);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f, UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40);
if (Object_IsLoaded(&play->objectCtx, this->objBankIndex)) {
this->actor.objBankIndex = this->objBankIndex;
func_809289B4(this);
@@ -466,13 +467,13 @@ void func_809289E4(ObjTsubo* this, PlayState* play) {
func_80927818(this, play, 0);
//! @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 collider
- func_800B8E58((Player*)&this->actor, NA_SE_PL_PULL_UP_POT);
+ Player_PlaySfx((Player*)&this->actor, NA_SE_PL_PULL_UP_POT);
func_80928D6C(this);
} else if ((this->unk_19B != 0) ||
(acHit && (this->cylinderCollider.info.acHitInfo->toucher.dmgFlags & 0x058BFFBC))) {
typeData = &sPotTypeData[type];
this->unk_19B = 0;
- if ((this->actor.bgCheckFlags & 0x20) && (this->actor.depthInWater > 15.0f)) {
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_WATER) && (this->actor.depthInWater > 15.0f)) {
typeData->breakPot3(this, play);
} else {
typeData->breakPot1(this, play);
@@ -485,15 +486,17 @@ void func_809289E4(ObjTsubo* this, PlayState* play) {
func_80927818(this, play, 1);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_EV_POT_BROKEN);
if (ObjTsubo_IsSceneNotGohtOrTwinmold(this, play)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else {
func_809291DC(this);
}
} else {
if (!this->unk_195) {
Actor_MoveWithGravity(&this->actor);
- Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f, 0x44);
- if ((this->actor.bgCheckFlags & 1) && (DynaPoly_GetActor(&play->colCtx, this->actor.floorBgId) == NULL)) {
+ Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40);
+ if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) &&
+ (DynaPoly_GetActor(&play->colCtx, this->actor.floorBgId) == NULL)) {
this->unk_195 = true;
this->actor.flags &= ~ACTOR_FLAG_10;
}
@@ -508,7 +511,7 @@ void func_809289E4(ObjTsubo* this, PlayState* play) {
s32 absYawDiff = ABS_ALT(yawDiff);
if (absYawDiff > (0x10000 / 3)) {
- Actor_PickUp(&this->actor, play, GI_NONE, 36.0f, 30.0f);
+ Actor_OfferGetItem(&this->actor, play, GI_NONE, 36.0f, 30.0f);
}
}
}
@@ -529,8 +532,10 @@ void func_80928D80(ObjTsubo* this, PlayState* play) {
if (Actor_HasNoParent(&this->actor, play)) {
this->actor.room = play->roomCtx.curRoom.num;
Actor_MoveWithGravity(&this->actor);
- this->actor.flags &= ~ACTOR_FLAG_4000000;
- Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f, 0xC5);
+ this->actor.flags &= ~ACTOR_FLAG_CAN_PRESS_SWITCH;
+ Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40 |
+ UPDBGCHECKINFO_FLAG_80);
func_80928E74(this);
} else {
pos.x = this->actor.world.pos.x;
@@ -567,7 +572,8 @@ void func_80928F18(ObjTsubo* this, PlayState* play) {
this->unk_194--;
}
typeData = &sPotTypeData[type];
- if ((this->actor.bgCheckFlags & 0xB) || atHit || (this->unk_194 <= 0)) {
+ if ((this->actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH | BGCHECKFLAG_WALL)) || atHit ||
+ (this->unk_194 <= 0)) {
typeData->breakPot1(this, play);
if (type == OBJ_TSUBO_TYPE_3) {
func_8092762C(this, play);
@@ -576,11 +582,12 @@ void func_80928F18(ObjTsubo* this, PlayState* play) {
}
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_EV_POT_BROKEN);
if (ObjTsubo_IsSceneNotGohtOrTwinmold(this, play)) {
- Actor_MarkForDeath(&this->actor);
- } else {
- func_809291DC(this);
+ Actor_Kill(&this->actor);
+ return;
}
- } else if (this->actor.bgCheckFlags & 0x40) {
+
+ func_809291DC(this);
+ } else if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) {
typeData->breakPot2(this, play);
if (type == OBJ_TSUBO_TYPE_3) {
func_8092762C(this, play);
@@ -590,17 +597,20 @@ void func_80928F18(ObjTsubo* this, PlayState* play) {
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_EV_POT_BROKEN);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EV_DIVE_INTO_WATER_L);
if (ObjTsubo_IsSceneNotGohtOrTwinmold(this, play)) {
- Actor_MarkForDeath(&this->actor);
- } else {
- func_809291DC(this);
+ Actor_Kill(&this->actor);
+ return;
}
+
+ func_809291DC(this);
} else {
Actor_MoveWithGravity(&this->actor);
Math_StepToS(&D_80929504, D_80929500, 150);
Math_StepToS(&D_8092950C, D_80929508, 150);
this->actor.shape.rot.x += D_80929504;
this->actor.shape.rot.y += D_8092950C;
- Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f, 0xC5);
+ Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40 |
+ UPDBGCHECKINFO_FLAG_80);
Collider_UpdateCylinder(&this->actor, &this->cylinderCollider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->cylinderCollider.base);
CollisionCheck_SetAT(play, &play->colChkCtx, &this->cylinderCollider.base);
@@ -618,7 +628,7 @@ void func_809291DC(ObjTsubo* this) {
this->actor.shape.rot.x = this->actor.home.rot.x;
this->actor.world.rot.x = this->actor.home.rot.x;
this->actor.velocity.y = 0.0f;
- this->actor.speedXZ = 0.0f;
+ this->actor.speed = 0.0f;
this->actor.shape.rot.y = this->actor.home.rot.y;
this->actor.world.rot.y = this->actor.home.rot.y;
Actor_SetScale(&this->actor, 0.0f);
@@ -637,7 +647,7 @@ void func_8092926C(ObjTsubo* this, PlayState* play) {
} else {
scale = sPotTypeData[OBJ_TSUBO_GET_TYPE(&this->actor)].scale;
if (Math_StepToF(&this->actor.scale.x, scale, scale * 0.1f)) {
- this->actor.flags |= ACTOR_FLAG_4000000;
+ this->actor.flags |= ACTOR_FLAG_CAN_PRESS_SWITCH;
func_809289B4(this);
}
this->actor.scale.z = this->actor.scale.y = this->actor.scale.x;
@@ -670,7 +680,7 @@ void ObjTsubo_Update(Actor* thisx, PlayState* play) {
}
if (this->unk_19A >= 0) {
if (this->unk_19A == 0) {
- Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALGOLD_ROLL);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALGOLD_ROLL);
if (Rand_ZeroOne() < 0.1f) {
this->unk_19A = Rand_S16Offset(40, 80);
} else {
diff --git a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.h b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.h
index 28233c911..2b3d1537f 100644
--- a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.h
+++ b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.h
@@ -31,8 +31,6 @@ typedef struct ObjTsubo {
/* 0x19B */ u8 unk_19B;
} ObjTsubo; // size = 0x19C
-extern const ActorInit Obj_Tsubo_InitVars;
-
typedef enum {
/* 0 */ OBJ_TSUBO_TYPE_0,
/* 1 */ OBJ_TSUBO_TYPE_1,
diff --git a/src/overlays/actors/ovl_Obj_Um/overlay.cfg b/src/overlays/actors/ovl_Obj_Um/overlay.cfg
deleted file mode 100644
index a8eb50a9b..000000000
--- a/src/overlays/actors/ovl_Obj_Um/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Um
-z_obj_um.c
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 63fe32501..a924c9e06 100644
--- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c
+++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c
@@ -14,41 +14,41 @@
/**
* weekEventReg flags checked by this actor:
- * - gSaveContext.save.weekEventReg[22] & 1: Aliens defeated
+ * - WEEKEVENTREG_22_01: Aliens defeated
* If false: The actor doesn't spawn
- * - gSaveContext.save.weekEventReg[31] & 0x40
+ * - WEEKEVENTREG_31_40
* If true: Cremia doesn't explain again she'll deliever milk to town
- * - gSaveContext.save.weekEventReg[31] & 0x80
+ * - WEEKEVENTREG_31_80
* If true: Triggers cutscene on Romani's Ranch
- * - gSaveContext.save.weekEventReg[34] & 0x80
+ * - WEEKEVENTREG_34_80
* If true: Doesn't spawn on Romani's Ranch
- * - gSaveContext.save.weekEventReg[52] & 1
+ * - WEEKEVENTREG_52_01
* If true: Doesn't spawn on Romani's Ranch or Milk Road
- * - gSaveContext.save.weekEventReg[52] & 2
+ * - WEEKEVENTREG_52_02
* If true: Doesn't spawn on Romani's Ranch or Milk Road
- * - gSaveContext.save.weekEventReg[59] & 2
+ * - WEEKEVENTREG_59_02
* If true: Doesn't spawn again on Milk Road
*
* weekEventReg flags set by this actor:
- * - gSaveContext.save.weekEventReg[31] |= 0x40: Cremia offered a ride
+ * - WEEKEVENTREG_31_40: Cremia offered a ride
* Cremia offered a ride accross the Milk Road to Player
- * - gSaveContext.save.weekEventReg[31] |= 0x80: Player is in Milk Run
- * Player accepts the ride and is with Cremia during the Milk Run.
- * - gSaveContext.save.weekEventReg[34] |= 0x80: Cremia does Milk Run alone
+ * - WEEKEVENTREG_31_80: Player is in Milk Run
+ * 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
- * - gSaveContext.save.weekEventReg[52] |= 1: Won Milk Run minigame
+ * - WEEKEVENTREG_52_01: Won Milk Run minigame
* At least one pot is safe. Turns off the "Lose Milk Run minigame"
- * - gSaveContext.save.weekEventReg[52] |= 2: Lose Milk Run minigame
+ * - WEEKEVENTREG_52_02: Lose Milk Run minigame
* Every pot was broken by bandits. Turns off the "Win Milk Run minigame"
- * - gSaveContext.save.weekEventReg[59] |= 2: ?
+ * - WEEKEVENTREG_59_02: ?
* Passed through Milk Road after winning the Milk Run
*
* weekEventReg flags unset by this actor:
- * - gSaveContext.save.weekEventReg[31] &= (u8)~0x80
+ * - WEEKEVENTREG_31_80
* Turned off when the Milk Run finishes
- * - gSaveContext.save.weekEventReg[52] &= (u8)~1
+ * - WEEKEVENTREG_52_01
* Turned off if Player lose the Milk Run
- * - gSaveContext.save.weekEventReg[52] &= (u8)~2
+ * - WEEKEVENTREG_52_02
* Turned off if Player wins the Milk Run
*/
@@ -61,7 +61,7 @@ void ObjUm_DefaultAnim(ObjUm* this, PlayState* play);
void ObjUm_ChangeAnim(ObjUm* this, PlayState* play, ObjUmAnimation animIndex);
void ObjUm_SetupAction(ObjUm* this, ObjUmActionFunc actionFunc);
-const ActorInit Obj_Um_InitVars = {
+ActorInit Obj_Um_InitVars = {
ACTOR_OBJ_UM,
ACTORCAT_NPC,
FLAGS,
@@ -222,7 +222,7 @@ s32 ObjUm_InitBandits(ObjUm* this, PlayState* play) {
EnHorse* bandit2;
spawnPoints = Lib_SegmentedToVirtual(path->points);
- Audio_QueueSeqCmd(0x8000 | NA_BGM_CHASE);
+ SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_CHASE | SEQ_FLAG_ASYNC);
bandit1 = (EnHorse*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, spawnPoints[0].x, spawnPoints[0].y,
spawnPoints[0].z, 0, this->dyna.actor.shape.rot.y, 0,
@@ -410,11 +410,11 @@ s32 func_80B783E0(ObjUm* this, PlayState* play, s32 banditIndex, EnHorse* bandit
}
bandit->actor.world.rot.y = Math_Vec3f_Yaw(&bandit->actor.world.pos, &sp50);
- bandit->actor.speedXZ = 45.0f;
+ bandit->actor.speed = 45.0f;
- sp3C = Math_CosS(bandit->actor.world.rot.x) * bandit->actor.speedXZ;
+ sp3C = Math_CosS(bandit->actor.world.rot.x) * bandit->actor.speed;
bandit->actor.velocity.x = Math_SinS(bandit->actor.world.rot.y) * sp3C;
- bandit->actor.velocity.y = Math_SinS(bandit->actor.world.rot.x) * bandit->actor.speedXZ;
+ bandit->actor.velocity.y = Math_SinS(bandit->actor.world.rot.x) * bandit->actor.speed;
bandit->actor.velocity.z = Math_CosS(bandit->actor.world.rot.y) * sp3C;
bandit->banditPosition.x =
@@ -535,12 +535,12 @@ s32 func_80B78A54(ObjUm* this, PlayState* play, s32 arg2, EnHorse* arg3, EnHorse
arg3->unk_564 = 1;
if (arg3->rider != NULL) {
arg3->rider->actor.colorFilterTimer = 20;
- Actor_SetColorFilter(&arg3->rider->actor, 0x4000, 0xFF, 0, 40);
+ Actor_SetColorFilter(&arg3->rider->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 40);
}
} else {
if (arg3->rider != NULL) {
arg3->rider->actor.colorFilterTimer = 20;
- Actor_SetColorFilter(&arg3->rider->actor, 0x4000, 0xFF, 0, 40);
+ Actor_SetColorFilter(&arg3->rider->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 40);
}
Audio_PlaySfxAtPos(&arg3->actor.projectedPos, NA_SE_EN_CUTBODY);
}
@@ -620,13 +620,13 @@ void func_80B78EBC(ObjUm* this, PlayState* play) {
player->actor.focus.rot.z = 0;
player->actor.focus.rot.y = player->actor.shape.rot.y;
- player->unk_AAC.x = 0;
- player->unk_AAC.y = 0;
- player->unk_AAC.z = 0;
+ player->headLimbRot.x = 0;
+ player->headLimbRot.y = 0;
+ player->headLimbRot.z = 0;
- player->unk_AB2.x = 0;
- player->unk_AB2.y = 0;
- player->unk_AB2.z = 0;
+ player->upperLimbRot.x = 0;
+ player->upperLimbRot.y = 0;
+ player->upperLimbRot.z = 0;
player->currentYaw = player->actor.focus.rot.y;
}
@@ -683,8 +683,8 @@ void ObjUm_Init(Actor* thisx, PlayState* play) {
this->initialPathIndex = OBJ_UM_GET_PATH_INDEX(thisx);
// if (!AliensDefeated)
- if (!(gSaveContext.save.weekEventReg[22] & 1)) {
- Actor_MarkForDeath(&this->dyna.actor);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ Actor_Kill(&this->dyna.actor);
return;
}
@@ -692,20 +692,20 @@ void ObjUm_Init(Actor* thisx, PlayState* play) {
ObjUm_SetupAction(this, ObjUm_TerminaFieldIdle);
} else if (this->type == OBJ_UM_TYPE_RANCH) {
this->pathIndex = this->initialPathIndex;
- if (gSaveContext.save.weekEventReg[31] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_31_80)) {
// In cutscene
sp54 = false;
this->flags |= OBJ_UM_FLAG_0100;
ObjUm_SetupAction(this, func_80B7A144);
- func_800FE484();
+ Environment_StopTime();
} else {
// Waiting for player
- if ((gSaveContext.save.weekEventReg[34] & 0x80) || gSaveContext.save.time >= CLOCK_TIME(19, 0) ||
- gSaveContext.save.time <= CLOCK_TIME(6, 0) || (gSaveContext.save.weekEventReg[52] & 1) ||
- (gSaveContext.save.weekEventReg[52] & 2)) {
- Actor_MarkForDeath(&this->dyna.actor);
+ 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) ||
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_52_02)) {
+ Actor_Kill(&this->dyna.actor);
return;
}
@@ -714,40 +714,40 @@ void ObjUm_Init(Actor* thisx, PlayState* play) {
ObjUm_SetupAction(this, ObjUm_RanchWait);
}
} else if (this->type == OBJ_UM_TYPE_PRE_MILK_RUN) {
- if (!(gSaveContext.save.weekEventReg[31] & 0x80) || (gSaveContext.save.weekEventReg[52] & 1)) {
- Actor_MarkForDeath(&this->dyna.actor);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_31_80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) {
+ Actor_Kill(&this->dyna.actor);
return;
}
- if (!(gSaveContext.save.weekEventReg[52] & 2)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_02)) {
this->pathIndex = this->initialPathIndex;
sp54 = false;
- func_800FE484();
+ Environment_StopTime();
ObjUm_SetupAction(this, ObjUm_PreMilkRunStartCs);
this->unk_354 = 0;
ObjUm_RotatePlayer(this, play, 0);
}
} else if (this->type == OBJ_UM_TYPE_MILK_RUN_MINIGAME) {
- if (!(gSaveContext.save.weekEventReg[31] & 0x80)) {
- Actor_MarkForDeath(&this->dyna.actor);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_31_80)) {
+ Actor_Kill(&this->dyna.actor);
return;
}
this->pathIndex = this->initialPathIndex;
sp54 = false;
- func_800FE484();
+ Environment_StopTime();
ObjUm_SetupAction(this, ObjUm_StartCs);
this->unk_354 = 0;
ObjUm_RotatePlayer(this, play, 0);
} else if (this->type == OBJ_UM_TYPE_POST_MILK_RUN) {
- if (!(gSaveContext.save.weekEventReg[52] & 1) || (gSaveContext.save.weekEventReg[59] & 2)) {
- Actor_MarkForDeath(&this->dyna.actor);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01) || CHECK_WEEKEVENTREG(WEEKEVENTREG_59_02)) {
+ Actor_Kill(&this->dyna.actor);
return;
}
this->pathIndex = this->initialPathIndex;
sp54 = false;
- func_800FE484();
+ Environment_StopTime();
ObjUm_SetupAction(this, ObjUm_PostMilkRunStartCs);
this->unk_354 = 0;
ObjUm_RotatePlayer(this, play, 0);
@@ -763,16 +763,16 @@ void ObjUm_Init(Actor* thisx, PlayState* play) {
DynaPolyActor_Init(&this->dyna, 0);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_um_Colheader_007E20);
} else {
- DynaPolyActor_Init(&this->dyna, 3);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_um_Colheader_007F50);
}
if (this->dyna.bgId == BGCHECK_SCENE) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
- func_800C636C(play, &play->colCtx.dyna, this->dyna.bgId);
+ DynaPoly_DisableCeilingCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->donkey =
(EnHorse*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, this->dyna.actor.world.pos.x,
@@ -780,7 +780,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.shape.rot.y, 0, ENHORSE_PARAMS(ENHORSE_PARAM_DONKEY, ENHORSE_18));
if (this->donkey == NULL) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
@@ -802,11 +802,11 @@ void ObjUm_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->banditsCollisions[1]);
}
-// ObjUm_MarkMyDonkeyAndMyselfForDeath, ObjUm_TerminateMe, ObjUmn't, ObjUm_Asinucide
+// ObjUm_KillMyDonkeyAndMyself, ObjUm_TerminateMe, ObjUmn't, ObjUm_Asinucide
void func_80B79524(ObjUm* this) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
if (this->donkey != NULL) {
- Actor_MarkForDeath(&this->donkey->actor);
+ Actor_Kill(&this->donkey->actor);
}
}
@@ -828,17 +828,17 @@ s32 func_80B795A0(PlayState* play, ObjUm* this, s32 arg2) {
case 0x33B4:
// "Want a ride?"
case 0x33CF:
- gSaveContext.save.weekEventReg[31] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_31_40);
if (play->msgCtx.choiceIndex == 0) {
player = GET_PLAYER(play);
func_8019F208();
- gSaveContext.save.weekEventReg[31] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_31_80);
play->nextEntrance = ENTRANCE(ROMANI_RANCH, 11);
if (player->stateFlags1 & PLAYER_STATE1_800000) {
D_801BDAA0 = 1;
}
play->transitionType = TRANS_TYPE_64;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
play->transitionTrigger = TRANS_TRIGGER_START;
phi_v1 = true;
} else {
@@ -907,7 +907,7 @@ u16 ObjUm_RanchGetDialogue(PlayState* play, ObjUm* this, s32 arg2) {
u16 textId = 0;
if (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) {
- if (gSaveContext.save.weekEventReg[31] & 0x40) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_31_40)) {
// "Want a ride?"
textId = 0x33CF;
} else {
@@ -937,7 +937,7 @@ s32 func_80B7984C(PlayState* play, ObjUm* this, s32 arg2, s32* arg3) {
return 0;
}
if (*arg3 == 3) {
- func_80151938(play, this->dyna.actor.textId);
+ Message_ContinueTextbox(play, this->dyna.actor.textId);
*arg3 = 1;
return 0;
}
@@ -999,7 +999,7 @@ void ObjUm_RanchWait(ObjUm* this, PlayState* play) {
func_80B7984C(play, this, 0, &this->unk_2B4);
}
} else if (!func_80B79A24(this->unk_2B4) && (gSaveContext.save.time > CLOCK_TIME(19, 0))) {
- gSaveContext.save.weekEventReg[34] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_34_80);
ObjUm_SetupAction(this, ObjUm_RanchWaitPathFinished);
}
@@ -1122,9 +1122,9 @@ ObjUmPathState ObjUm_UpdatePath(ObjUm* this, PlayState* play) {
}
if (this->animIndex == OBJ_UM_ANIM_TROT) {
- this->dyna.actor.speedXZ = 4.0f;
+ this->dyna.actor.speed = 4.0f;
} else if (this->animIndex == OBJ_UM_ANIM_GALLOP) {
- this->dyna.actor.speedXZ = 8.0f;
+ this->dyna.actor.speed = 8.0f;
}
return sp3C;
@@ -1138,11 +1138,11 @@ void ObjUm_RanchWaitPathFinished(ObjUm* this, PlayState* play) {
switch (ObjUm_UpdatePath(this, play)) {
case OBJUM_PATH_STATE_1:
case OBJUM_PATH_STATE_FINISH:
- if (gSaveContext.save.weekEventReg[31] & 0x80) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_31_80)) {
+ CutsceneManager_Stop(this->dyna.actor.csId);
play->nextEntrance = ENTRANCE(MILK_ROAD, 5);
play->transitionType = TRANS_TYPE_64;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
play->transitionTrigger = TRANS_TRIGGER_START;
} else {
func_80B79524(this);
@@ -1158,12 +1158,12 @@ void ObjUm_RanchWaitPathFinished(ObjUm* this, PlayState* play) {
void ObjUm_RanchStartCs(ObjUm* this, PlayState* play) {
ObjUm_ChangeAnim(this, play, OBJ_UM_ANIM_IDLE);
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
this->lastTime = gSaveContext.save.time;
ObjUm_SetupAction(this, func_80B7A0E0);
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
@@ -1245,7 +1245,7 @@ void func_80B7A2AC(ObjUm* this, PlayState* play) {
case OBJUM_PATH_STATE_FINISH:
play->nextEntrance = ENTRANCE(GORMAN_TRACK, 4);
play->transitionType = TRANS_TYPE_64;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
play->transitionTrigger = TRANS_TRIGGER_START;
break;
@@ -1276,12 +1276,12 @@ void ObjUm_PreMilkRunStartCs(ObjUm* this, PlayState* play) {
ObjUm_SetPlayerPosition(this, play);
this->flags |= OBJ_UM_FLAG_0004;
player->stateFlags1 |= PLAYER_STATE1_20;
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
this->lastTime = gSaveContext.save.time;
ObjUm_SetupAction(this, func_80B7A394);
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
@@ -1296,24 +1296,24 @@ void ObjUm_RunMinigame(ObjUm* this, PlayState* play) {
case OBJUM_PATH_STATE_1:
case OBJUM_PATH_STATE_FINISH:
gSaveContext.seqId = (u8)NA_BGM_DISABLED;
- gSaveContext.save.weekEventReg[31] &= (u8)~0x80;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_31_80);
gSaveContext.ambienceId = AMBIENCE_ID_DISABLED;
- if (!(gSaveContext.save.weekEventReg[52] & 1) && !(gSaveContext.save.weekEventReg[52] & 2)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_02)) {
if (!this->areAllPotsBroken) {
play->nextEntrance = ENTRANCE(MILK_ROAD, 6);
play->transitionType = TRANS_TYPE_64;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.weekEventReg[52] |= 1;
- gSaveContext.save.weekEventReg[52] &= (u8)~2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_52_01);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_52_02);
} else {
play->nextEntrance = ENTRANCE(ROMANI_RANCH, 8);
play->transitionType = TRANS_TYPE_64;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.weekEventReg[52] |= 2;
- gSaveContext.save.weekEventReg[52] &= (u8)~1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_52_02);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_52_01);
}
}
break;
@@ -1357,17 +1357,17 @@ void func_80B7A614(ObjUm* this, PlayState* play) {
}
if (this->flags & OBJ_UM_FLAG_MINIGAME_FINISHED) {
- s32 sp20 = ActorCutscene_GetAdditionalCutscene(this->dyna.actor.cutscene);
+ s32 csId = CutsceneManager_GetAdditionalCsId(this->dyna.actor.csId);
if (this->areAllPotsBroken) {
- sp20 = ActorCutscene_GetAdditionalCutscene(sp20);
+ csId = CutsceneManager_GetAdditionalCsId(csId);
}
- if (ActorCutscene_GetCanPlayNext(sp20)) {
- ActorCutscene_StartAndSetUnkLinkFields(sp20, &this->dyna.actor);
+ if (CutsceneManager_IsNext(csId)) {
+ CutsceneManager_StartWithPlayerCs(csId, &this->dyna.actor);
ObjUm_SetupAction(this, ObjUm_RunMinigame);
this->flags &= ~OBJ_UM_FLAG_PLAYING_MINIGAME;
} else {
- ActorCutscene_SetIntentToPlay(sp20);
+ CutsceneManager_Queue(csId);
}
}
@@ -1396,14 +1396,14 @@ void func_80B7A860(ObjUm* this, PlayState* play) {
ObjUm_RotatePlayer(this, play, 0);
this->flags |= OBJ_UM_FLAG_0004;
- if (play->csCtx.frames == 449) {
+ if (play->csCtx.curFrame == 449) {
ObjUm_InitBandits(this, play);
- } else if (play->csCtx.frames >= 450) {
+ } else if (play->csCtx.curFrame >= 450) {
func_80B78DF0(this, play);
}
- if (play->csCtx.state == 0) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ if (play->csCtx.state == CS_STATE_IDLE) {
+ CutsceneManager_Stop(this->dyna.actor.csId);
ObjUm_SetupAction(this, func_80B7A7AC);
}
@@ -1526,12 +1526,12 @@ void ObjUm_StartCs(ObjUm* this, PlayState* play) {
ObjUm_RotatePlayer(this, play, 0);
this->flags |= OBJ_UM_FLAG_0004;
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
this->lastTime = gSaveContext.save.time;
ObjUm_SetupAction(this, func_80B7ABE4);
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
@@ -1545,14 +1545,14 @@ void ObjUm_PostMilkRunWaitPathFinished(ObjUm* this, PlayState* play) {
this->wheelRot += 0x3E8;
ObjUm_ChangeAnim(this, play, OBJ_UM_ANIM_TROT);
- if ((ObjUm_UpdatePath(this, play) == OBJUM_PATH_STATE_4) && !(gSaveContext.save.weekEventReg[59] & 2)) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ if ((ObjUm_UpdatePath(this, play) == OBJUM_PATH_STATE_4) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_02)) {
+ CutsceneManager_Stop(this->dyna.actor.csId);
Audio_SetCutsceneFlag(false);
- gSaveContext.save.weekEventReg[59] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_59_02);
gSaveContext.nextCutsceneIndex = 0xFFF3;
play->nextEntrance = ENTRANCE(TERMINA_FIELD, 0);
play->transitionType = TRANS_TYPE_64;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.save.time += CLOCK_TIME(1, 0) + 2;
}
@@ -1568,11 +1568,11 @@ void ObjUm_PostMilkRunStartCs(ObjUm* this, PlayState* play) {
this->flags |= OBJ_UM_FLAG_0004;
ObjUm_ChangeAnim(this, play, OBJ_UM_ANIM_IDLE);
- if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
ObjUm_SetupAction(this, ObjUm_PostMilkRunWaitPathFinished);
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
}
@@ -1656,9 +1656,9 @@ void ObjUm_ChangeAnim(ObjUm* this, PlayState* play, ObjUmAnimation animIndex) {
}
if (animIndex == OBJ_UM_ANIM_TROT) {
- animPlaybackSpeed = this->dyna.actor.speedXZ * 0.25f;
+ animPlaybackSpeed = this->dyna.actor.speed * 0.25f;
} else if (animIndex == OBJ_UM_ANIM_GALLOP) {
- animPlaybackSpeed = this->dyna.actor.speedXZ * 0.2f;
+ animPlaybackSpeed = this->dyna.actor.speed * 0.2f;
} else if (animIndex == OBJ_UM_ANIM_IDLE) {
animPlaybackSpeed = 1.0f;
}
@@ -1703,8 +1703,8 @@ void ObjUm_ChangeAnim(ObjUm* this, PlayState* play, ObjUmAnimation animIndex) {
if (this->wheelRot / 0x199A != this->unk_420) {
this->unk_420 = this->wheelRot / 0x199A;
//! FAKE
- if (!&sUmAnims[0]) {}
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_CART_WHEEL);
+ if (sUmAnims[0].doesMove) {}
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_CART_WHEEL);
}
}
@@ -1713,7 +1713,8 @@ void ObjUm_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
this->unk_350++;
- Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, 0x1C);
+ Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f,
+ UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10);
if (this->donkey != NULL) {
this->donkey->actor.world.pos.x = this->dyna.actor.world.pos.x;
@@ -1823,7 +1824,7 @@ s32 ObjUm_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
s16 sp3E;
Vec3f sp30 = player->actor.world.pos;
- sp30.y = player->bodyPartsPos[7].y + 3.0f;
+ sp30.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
sp3E = Math_Vec3f_Yaw(&this->dyna.actor.focus.pos, &sp30) - this->dyna.actor.shape.rot.y;
temp_v0_3 = Math_Atan2S(
this->dyna.actor.focus.pos.y - sp30.y,
diff --git a/src/overlays/actors/ovl_Obj_Um/z_obj_um.h b/src/overlays/actors/ovl_Obj_Um/z_obj_um.h
index a6644009e..0c6a7178e 100644
--- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.h
+++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.h
@@ -62,8 +62,6 @@ typedef struct ObjUm {
/* 0x4E0 */ s32 areAllPotsBroken; // true when all of the pots have been broken
} ObjUm; // size = 0x4E4
-extern const ActorInit Obj_Um_InitVars;
-
typedef enum {
/* 0 */ OBJ_UM_TYPE_TERMINA_FIELD,
/* 1 */ OBJ_UM_TYPE_RANCH,
diff --git a/src/overlays/actors/ovl_Obj_Usiyane/overlay.cfg b/src/overlays/actors/ovl_Obj_Usiyane/overlay.cfg
deleted file mode 100644
index 82fd486bb..000000000
--- a/src/overlays/actors/ovl_Obj_Usiyane/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Usiyane
-z_obj_usiyane.c
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 33ebf1e50..46a6b994d 100644
--- a/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c
+++ b/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c
@@ -16,7 +16,7 @@ void ObjUsiyane_Destroy(Actor* thisx, PlayState* play);
void ObjUsiyane_Update(Actor* thisx, PlayState* play);
void ObjUsiyane_Draw(Actor* thisx, PlayState* play);
-const ActorInit Obj_Usiyane_InitVars = {
+ActorInit Obj_Usiyane_InitVars = {
ACTOR_OBJ_USIYANE,
ACTORCAT_PROP,
FLAGS,
@@ -45,9 +45,9 @@ s32 func_80C07C80(s32 arg0) {
s32 var_v1;
if (!(arg0 & 1)) {
- var_v1 = gSaveContext.save.unk_E88[arg0 >> 1] & 0xFFFF;
+ var_v1 = gSaveContext.save.saveInfo.unk_E64[arg0 >> 1] & 0xFFFF;
} else {
- var_v1 = (gSaveContext.save.unk_E88[arg0 >> 1] & 0xFFFF0000) >> 0x10;
+ var_v1 = (gSaveContext.save.saveInfo.unk_E64[arg0 >> 1] & 0xFFFF0000) >> 0x10;
}
return var_v1 + CLOCK_TIME(2, 30);
}
@@ -80,7 +80,7 @@ s32 func_80C07CD0(void) {
}
}
- if (gSaveContext.save.weekEventReg[22] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
return false;
}
return true;
@@ -88,7 +88,7 @@ s32 func_80C07CD0(void) {
void func_80C07DC4(ObjUsiyane* this, PlayState* play) {
if (func_80C07CD0()) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
}
@@ -139,7 +139,7 @@ void func_80C07F30(ObjUsiyane* this, PlayState* play) {
}
}
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_HOUSE_BROKEN);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_HOUSE_BROKEN);
this->unk_740 = 0;
this->unk_744 |= 4;
}
@@ -166,24 +166,24 @@ void func_80C081C8(ObjUsiyane* this, PlayState* play) {
}
} else if (this->unk_740 >= 70) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
this->unk_740++;
}
void func_80C082CC(ObjUsiyane* this, PlayState* play) {
- this->unk_164 = -1;
+ this->cueId = -1;
}
void func_80C082E0(ObjUsiyane* this, PlayState* play) {
- CsCmdActorAction* csAction;
+ CsCmdActorCue* cue;
- if (Cutscene_CheckActorAction(play, 0x228)) {
- this->unk_160 = Cutscene_GetActorActionIndex(play, 0x228);
- csAction = play->csCtx.actorActions[this->unk_160];
- if (this->unk_164 != csAction->action) {
- this->unk_164 = csAction->action;
- if (this->unk_164 == 2) {
+ if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_552)) {
+ this->cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_552);
+ cue = play->csCtx.actorCues[this->cueChannel];
+ if (this->cueId != cue->id) {
+ this->cueId = cue->id;
+ if (this->cueId == 2) {
func_80C07F30(this, play);
this->actionFunc = func_80C081C8;
}
@@ -213,7 +213,7 @@ void ObjUsiyane_Init(Actor* thisx, PlayState* play) {
break;
default:
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
break;
}
}
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 c38a08ed9..92bd96549 100644
--- a/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.h
+++ b/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.h
@@ -24,8 +24,8 @@ typedef struct {
typedef struct ObjUsiyane {
/* 0x000 */ DynaPolyActor dyna;
/* 0x15C */ ObjUsiyaneActionFunc actionFunc;
- /* 0x160 */ s32 unk_160;
- /* 0x164 */ s32 unk_164;
+ /* 0x160 */ s32 cueChannel;
+ /* 0x164 */ s32 cueId;
/* 0x168 */ ObjUsiyaneStruct unk_168[10][4];
/* 0x708 */ f32 unk_708;
/* 0x70C */ f32 unk_70C;
@@ -34,6 +34,4 @@ typedef struct ObjUsiyane {
/* 0x744 */ s32 unk_744;
} ObjUsiyane; // size = 0x748
-extern const ActorInit Obj_Usiyane_InitVars;
-
#endif // Z_OBJ_USIYANE_H
diff --git a/src/overlays/actors/ovl_Obj_Visiblock/overlay.cfg b/src/overlays/actors/ovl_Obj_Visiblock/overlay.cfg
deleted file mode 100644
index 9436fe9e3..000000000
--- a/src/overlays/actors/ovl_Obj_Visiblock/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Visiblock
-z_obj_visiblock.c
diff --git a/src/overlays/actors/ovl_Obj_Visiblock/z_obj_visiblock.c b/src/overlays/actors/ovl_Obj_Visiblock/z_obj_visiblock.c
index e0d07c4fb..9859d9c0f 100644
--- a/src/overlays/actors/ovl_Obj_Visiblock/z_obj_visiblock.c
+++ b/src/overlays/actors/ovl_Obj_Visiblock/z_obj_visiblock.c
@@ -7,7 +7,7 @@
#include "z_obj_visiblock.h"
#include "objects/object_visiblock/object_visiblock.h"
-#define FLAGS (ACTOR_FLAG_80)
+#define FLAGS (ACTOR_FLAG_REACT_TO_LENS)
#define THIS ((ObjVisiblock*)thisx)
@@ -15,7 +15,7 @@ void ObjVisiblock_Init(Actor* thisx, PlayState* play);
void ObjVisiblock_Destroy(Actor* thisx, PlayState* play);
void ObjVisiblock_Draw(Actor* thisx, PlayState* play);
-const ActorInit Obj_Visiblock_InitVars = {
+ActorInit Obj_Visiblock_InitVars = {
ACTOR_OBJ_VISIBLOCK,
ACTORCAT_BG,
FLAGS,
diff --git a/src/overlays/actors/ovl_Obj_Visiblock/z_obj_visiblock.h b/src/overlays/actors/ovl_Obj_Visiblock/z_obj_visiblock.h
index 946685a5c..5fa08ab86 100644
--- a/src/overlays/actors/ovl_Obj_Visiblock/z_obj_visiblock.h
+++ b/src/overlays/actors/ovl_Obj_Visiblock/z_obj_visiblock.h
@@ -10,6 +10,4 @@ typedef struct ObjVisiblock {
/* 0x15C */ UNK_TYPE1 unk15C[0x4];
} ObjVisiblock; // size = 0x160
-extern const ActorInit Obj_Visiblock_InitVars;
-
#endif // Z_OBJ_VISIBLOCK_H
diff --git a/src/overlays/actors/ovl_Obj_Vspinyroll/overlay.cfg b/src/overlays/actors/ovl_Obj_Vspinyroll/overlay.cfg
deleted file mode 100644
index 0b324c966..000000000
--- a/src/overlays/actors/ovl_Obj_Vspinyroll/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Vspinyroll
-z_obj_vspinyroll.c
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 be692069f..257e9eb79 100644
--- a/src/overlays/actors/ovl_Obj_Vspinyroll/z_obj_vspinyroll.c
+++ b/src/overlays/actors/ovl_Obj_Vspinyroll/z_obj_vspinyroll.c
@@ -27,7 +27,7 @@ void func_80A3D0E8(ObjVspinyroll* this);
void func_80A3D0FC(ObjVspinyroll* this, PlayState* play);
void func_80A3D2C0(Actor* thisx, PlayState* play);
-const ActorInit Obj_Vspinyroll_InitVars = {
+ActorInit Obj_Vspinyroll_InitVars = {
ACTOR_OBJ_VSPINYROLL,
ACTORCAT_PROP,
FLAGS,
@@ -123,14 +123,14 @@ s32 func_80A3C700(ObjVspinyroll* this) {
s32 sp30 = this->unk_398 ^ 1;
Vec3f sp24;
- Math_StepToF(&this->dyna.actor.speedXZ, this->unk_394, this->unk_394 * 0.2f);
+ Math_StepToF(&this->dyna.actor.speed, this->unk_394, this->unk_394 * 0.2f);
- this->dyna.actor.world.pos.x += this->dyna.actor.speedXZ * this->unk_3B4.x;
- this->dyna.actor.world.pos.y += this->dyna.actor.speedXZ * this->unk_3B4.y;
- this->dyna.actor.world.pos.z += this->dyna.actor.speedXZ * this->unk_3B4.z;
+ this->dyna.actor.world.pos.x += this->dyna.actor.speed * this->unk_3B4.x;
+ this->dyna.actor.world.pos.y += this->dyna.actor.speed * this->unk_3B4.y;
+ this->dyna.actor.world.pos.z += this->dyna.actor.speed * this->unk_3B4.z;
Math_Vec3f_Diff(&this->unk_39C[sp30], &this->dyna.actor.world.pos, &sp24);
- return Math3D_LengthSquared(&sp24) < (SQ(this->dyna.actor.speedXZ) + 0.05f);
+ return Math3D_LengthSquared(&sp24) < (SQ(this->dyna.actor.speed) + 0.05f);
}
void func_80A3C7E8(ObjVspinyroll* this) {
@@ -208,7 +208,7 @@ s32 func_80A3C8D8(ObjVspinyroll* this, PlayState* play, Vec3f* arg2, s32 arg3) {
spB4.z += this->dyna.actor.world.pos.z;
EffectSsHitmark_SpawnFixedScale(play, 3, &spB4);
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_IT_SHIELD_REFLECT_SW);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_IT_SHIELD_REFLECT_SW);
}
temp_f0 = Math3D_Vec3fDistSq(&spD8, &spC0);
@@ -322,7 +322,7 @@ void ObjVspinyroll_Destroy(Actor* thisx, PlayState* play) {
}
void func_80A3CEC4(ObjVspinyroll* this) {
- this->dyna.actor.speedXZ = 0.0f;
+ this->dyna.actor.speed = 0.0f;
this->actionFunc = func_80A3CEE0;
}
@@ -336,7 +336,7 @@ void func_80A3CEE0(ObjVspinyroll* this, PlayState* play) {
void func_80A3CF10(ObjVspinyroll* this) {
this->actionFunc = func_80A3CF4C;
this->unk_3C8 = D_80A3D478[OBJVSPINYROLL_GET_1C00(&this->dyna.actor)];
- this->dyna.actor.speedXZ = 0.0f;
+ this->dyna.actor.speed = 0.0f;
}
void func_80A3CF4C(ObjVspinyroll* this, PlayState* play) {
@@ -351,7 +351,7 @@ void func_80A3CF4C(ObjVspinyroll* this, PlayState* play) {
void func_80A3CFAC(ObjVspinyroll* this) {
this->actionFunc = func_80A3CFE0;
this->unk_3C2 = D_80A3D4DC[this->unk_398];
- this->dyna.actor.speedXZ = 0.0f;
+ this->dyna.actor.speed = 0.0f;
}
void func_80A3CFE0(ObjVspinyroll* this, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Obj_Vspinyroll/z_obj_vspinyroll.h b/src/overlays/actors/ovl_Obj_Vspinyroll/z_obj_vspinyroll.h
index 38dee86fb..09a91b437 100644
--- a/src/overlays/actors/ovl_Obj_Vspinyroll/z_obj_vspinyroll.h
+++ b/src/overlays/actors/ovl_Obj_Vspinyroll/z_obj_vspinyroll.h
@@ -43,6 +43,4 @@ typedef struct ObjVspinyroll {
/* 0x3C8 */ s16 unk_3C8;
} ObjVspinyroll; // size = 0x3CC
-extern const ActorInit Obj_Vspinyroll_InitVars;
-
#endif // Z_OBJ_VSPINYROLL_H
diff --git a/src/overlays/actors/ovl_Obj_Warpstone/overlay.cfg b/src/overlays/actors/ovl_Obj_Warpstone/overlay.cfg
deleted file mode 100644
index 2f3fe66ea..000000000
--- a/src/overlays/actors/ovl_Obj_Warpstone/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Warpstone
-z_obj_warpstone.c
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 4e0fb508d..075ad18db 100644
--- a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c
+++ b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c
@@ -22,7 +22,7 @@ s32 ObjWarpstone_BeginOpeningCutscene(ObjWarpstone* this, PlayState* play);
s32 ObjWarpstone_PlayOpeningCutscene(ObjWarpstone* this, PlayState* play);
s32 ObjWarpstone_OpenedIdle(ObjWarpstone* this, PlayState* play);
-const ActorInit Obj_Warpstone_InitVars = {
+ActorInit Obj_Warpstone_InitVars = {
ACTOR_OBJ_WARPSTONE,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -97,19 +97,19 @@ s32 ObjWarpstone_ClosedIdle(ObjWarpstone* this, PlayState* play) {
}
s32 ObjWarpstone_BeginOpeningCutscene(ObjWarpstone* this, PlayState* play) {
- if (this->dyna.actor.cutscene < 0 || ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
- ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if ((this->dyna.actor.csId < 0) || CutsceneManager_IsNext(this->dyna.actor.csId)) {
+ CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor);
ObjWarpstone_SetupAction(this, ObjWarpstone_PlayOpeningCutscene);
- Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_OWL_WARP_SWITCH_ON);
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_OWL_WARP_SWITCH_ON);
} else {
- ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ CutsceneManager_Queue(this->dyna.actor.csId);
}
return true;
}
s32 ObjWarpstone_PlayOpeningCutscene(ObjWarpstone* this, PlayState* play) {
if (this->openingCSTimer++ >= OBJ_WARPSTONE_TIMER_ACTIVATE_THRESHOLD) {
- ActorCutscene_Stop(this->dyna.actor.cutscene);
+ CutsceneManager_Stop(this->dyna.actor.csId);
Sram_ActivateOwl(OBJ_WARPSTONE_GET_ID(&this->dyna.actor));
ObjWarpstone_SetupAction(this, ObjWarpstone_OpenedIdle);
} else if (this->openingCSTimer < OBJ_WARPSTONE_TIMER_OPEN_THRESHOLD) {
@@ -146,7 +146,7 @@ void ObjWarpstone_Update(Actor* thisx, PlayState* play) {
play->msgCtx.unk120D4 = 0;
gSaveContext.save.owlSaveLocation = OBJ_WARPSTONE_GET_ID(&this->dyna.actor);
} else {
- func_801477B4(play);
+ Message_CloseTextbox(play);
}
}
} else if (Actor_ProcessTalkRequest(&this->dyna.actor, &play->state)) {
@@ -179,13 +179,13 @@ void ObjWarpstone_Draw(Actor* thisx, PlayState* play2) {
gDPPipeSync(POLY_XLU_DISP++);
gDPSetPrimColor(POLY_XLU_DISP++, 128, 128, 255, 255, 200, this->dyna.actor.home.rot.x);
gDPSetEnvColor(POLY_XLU_DISP++, 100, 200, 0, 255);
- Matrix_RotateZF((((play->gameplayFrames * 1500) & 0xFFFF) * M_PI) / 0x8000, MTXMODE_APPLY);
+ Matrix_RotateZF(BINANG_TO_RAD_ALT2((play->gameplayFrames * 1500) & 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++, gOwlStatueWhiteFlashDL);
+ gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL);
Matrix_Pop();
- Matrix_RotateZF((~((play->gameplayFrames * 1200) & 0xFFFF) * M_PI) / 0x8000, MTXMODE_APPLY);
+ 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++, gOwlStatueWhiteFlashDL);
+ gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL);
CLOSE_DISPS(play->state.gfxCtx);
}
}
diff --git a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.h b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.h
index 8d39deef0..241eb825d 100644
--- a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.h
+++ b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.h
@@ -26,9 +26,7 @@ typedef struct ObjWarpstone {
/* 0x1AC */ ObjWarpstoneActionFunc actionFunc;
} ObjWarpstone; // size = 0x1B0
-extern const ActorInit Obj_Warpstone_InitVars;
-
#define OBJ_WARPSTONE_GET_ID(thisx) ((u16)((thisx)->params & 0xF))
-#define OBJ_WARPSTONE_IS_ACTIVATED(owlId) (((void)0, gSaveContext.save.playerData.owlActivationFlags) & (u16)gBitFlags[(owlId)])
+#define OBJ_WARPSTONE_IS_ACTIVATED(owlId) (((void)0, gSaveContext.save.saveInfo.playerData.owlActivationFlags) & (u16)gBitFlags[(owlId)])
#endif // Z_OBJ_WARPSTONE_H
diff --git a/src/overlays/actors/ovl_Obj_Wind/overlay.cfg b/src/overlays/actors/ovl_Obj_Wind/overlay.cfg
deleted file mode 100644
index 7f65da5cf..000000000
--- a/src/overlays/actors/ovl_Obj_Wind/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Wind
-z_obj_wind.c
diff --git a/src/overlays/actors/ovl_Obj_Wind/z_obj_wind.c b/src/overlays/actors/ovl_Obj_Wind/z_obj_wind.c
index 567d9a92e..5f53030f3 100644
--- a/src/overlays/actors/ovl_Obj_Wind/z_obj_wind.c
+++ b/src/overlays/actors/ovl_Obj_Wind/z_obj_wind.c
@@ -16,7 +16,7 @@ void ObjWind_Update(Actor* thisx, PlayState* play);
void ObjWind_Draw(Actor* thisx, PlayState* play);
#if 0
-const ActorInit Obj_Wind_InitVars = {
+ActorInit Obj_Wind_InitVars = {
ACTOR_OBJ_WIND,
ACTORCAT_ITEMACTION,
FLAGS,
diff --git a/src/overlays/actors/ovl_Obj_Wind/z_obj_wind.h b/src/overlays/actors/ovl_Obj_Wind/z_obj_wind.h
index 23296ff09..08db8914a 100644
--- a/src/overlays/actors/ovl_Obj_Wind/z_obj_wind.h
+++ b/src/overlays/actors/ovl_Obj_Wind/z_obj_wind.h
@@ -10,6 +10,4 @@ typedef struct ObjWind {
/* 0x144 */ char unk_144[0x4];
} ObjWind; // size = 0x148
-extern const ActorInit Obj_Wind_InitVars;
-
#endif // Z_OBJ_WIND_H
diff --git a/src/overlays/actors/ovl_Obj_Wturn/overlay.cfg b/src/overlays/actors/ovl_Obj_Wturn/overlay.cfg
deleted file mode 100644
index 07e4b563d..000000000
--- a/src/overlays/actors/ovl_Obj_Wturn/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Wturn
-z_obj_wturn.c
diff --git a/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c b/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c
index aea3bc7f1..54ebe8cc7 100644
--- a/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c
+++ b/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.c
@@ -22,7 +22,7 @@ void func_808A7BA0(ObjWturn* this, PlayState* play);
void func_808A7C04(ObjWturn* this, PlayState* play);
void func_808A7C78(ObjWturn* this, PlayState* play);
-const ActorInit Obj_Wturn_InitVars = {
+ActorInit Obj_Wturn_InitVars = {
ACTOR_OBJ_WTURN, ACTORCAT_ITEMACTION, FLAGS,
GAMEPLAY_KEEP, sizeof(ObjWturn), (ActorFunc)ObjWturn_Init,
(ActorFunc)Actor_Noop, (ActorFunc)ObjWturn_Update, (ActorFunc)NULL,
@@ -41,23 +41,26 @@ void func_808A7954(ObjWturn* this) {
void func_808A7968(ObjWturn* this, PlayState* play) {
if (play->msgCtx.ocarinaMode >= 28 && play->msgCtx.ocarinaMode < 39) {
Flags_UnsetSwitch(play, this->actor.params);
- Actor_MarkForDeath(&this->actor);
- } else if ((Flags_GetSwitch(play, this->actor.params) && (play->sceneId == SCENE_F40)) ||
- (!Flags_GetSwitch(play, this->actor.params) && (play->sceneId == SCENE_F41))) {
+ Actor_Kill(&this->actor);
+ return;
+ }
+
+ if ((Flags_GetSwitch(play, this->actor.params) && (play->sceneId == SCENE_F40)) ||
+ (!Flags_GetSwitch(play, this->actor.params) && (play->sceneId == SCENE_F41))) {
func_808A7A24(this);
}
}
void func_808A7A24(ObjWturn* this) {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
this->actionFunc = func_808A7A5C;
}
void func_808A7A5C(ObjWturn* this, PlayState* play) {
- if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
+ if (CutsceneManager_IsNext(this->actor.csId)) {
func_808A7AAC(this, play);
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
@@ -66,10 +69,10 @@ void func_808A7AAC(ObjWturn* this, PlayState* play) {
Vec3f subCamEye;
Vec3f subCamAt;
- ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
- func_8016566C(140);
- this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene);
- func_800B7298(play, &this->actor, 21);
+ CutsceneManager_StartWithPlayerCs(this->actor.csId, &this->actor);
+ Play_EnableMotionBlur(140);
+ this->subCamId = CutsceneManager_GetCurrentSubCamId(this->actor.csId);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_21);
subCamAt.x = player->actor.focus.pos.x;
subCamAt.z = player->actor.focus.pos.z;
subCamAt.y = player->actor.focus.pos.y;
@@ -93,10 +96,10 @@ void func_808A7C04(ObjWturn* this, PlayState* play) {
this->actor.world.pos.y += this->actor.playerHeightRel;
player->actor.shape.shadowAlpha = 0;
- func_800B7298(play, &this->actor, 0x54);
- func_800B8E58(player, NA_SE_VO_NAVY_ENEMY);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_84);
+ Player_PlaySfx(player, NA_SE_VO_NAVY_ENEMY);
this->unk_14A = 0;
- func_80165690();
+ Play_DisableMotionBlur();
this->actionFunc = func_808A7C78;
}
@@ -110,7 +113,7 @@ void func_808A7C78(ObjWturn* this, PlayState* play) {
Play_SetCameraAtEyeUp(play, this->subCamId, &player->actor.focus.pos, &subCam->eye, &sSubCamUp);
if (this->unk_14A == 1) {
play->transitionType = TRANS_TYPE_64;
- gSaveContext.nextTransitionType = TRANS_TYPE_03;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
gSaveContext.nextCutsceneIndex = 0;
if (play->sceneId == SCENE_F40) {
play->nextEntrance = ENTRANCE(STONE_TOWER_INVERTED, 0);
diff --git a/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.h b/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.h
index 9b8674f59..2e2963d0e 100644
--- a/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.h
+++ b/src/overlays/actors/ovl_Obj_Wturn/z_obj_wturn.h
@@ -14,6 +14,4 @@ typedef struct ObjWturn {
/* 0x14A */ s16 unk_14A;
} ObjWturn; // size = 0x14C
-extern const ActorInit Obj_Wturn_InitVars;
-
#endif // Z_OBJ_WTURN_H
diff --git a/src/overlays/actors/ovl_Obj_Y2lift/overlay.cfg b/src/overlays/actors/ovl_Obj_Y2lift/overlay.cfg
deleted file mode 100644
index 432bb3e7f..000000000
--- a/src/overlays/actors/ovl_Obj_Y2lift/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Y2lift
-z_obj_y2lift.c
diff --git a/src/overlays/actors/ovl_Obj_Y2lift/z_obj_y2lift.c b/src/overlays/actors/ovl_Obj_Y2lift/z_obj_y2lift.c
index 8870295aa..96de17fb0 100644
--- a/src/overlays/actors/ovl_Obj_Y2lift/z_obj_y2lift.c
+++ b/src/overlays/actors/ovl_Obj_Y2lift/z_obj_y2lift.c
@@ -16,7 +16,7 @@ void ObjY2lift_Destroy(Actor* thisx, PlayState* play);
void ObjY2lift_Update(Actor* thisx, PlayState* play);
void ObjY2lift_Draw(Actor* thisx, PlayState* play);
-const ActorInit Obj_Y2lift_InitVars = {
+ActorInit Obj_Y2lift_InitVars = {
ACTOR_OBJ_Y2LIFT,
ACTORCAT_BG,
FLAGS,
@@ -39,7 +39,7 @@ void ObjY2lift_Init(Actor* thisx, PlayState* play) {
ObjY2lift* this = THIS;
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
- DynaPolyActor_Init(&this->dyna, 1);
+ DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
DynaPolyActor_LoadMesh(play, &this->dyna, &gPirateLiftPlatformCol);
}
@@ -53,13 +53,13 @@ void ObjY2lift_Update(Actor* thisx, PlayState* play) {
ObjY2lift* this = THIS;
f32 temp_fv0 = this->dyna.actor.world.pos.y;
f32 targetVelocityY = 0.0f;
- s32 temp_v0 = DynaPolyActor_IsInRidingMovingState(&this->dyna);
+ s32 isPlayerOnTop = DynaPolyActor_IsPlayerOnTop(&this->dyna);
- if (temp_v0 || DynaPolyActor_IsInRidingFallingState(&this->dyna)) {
+ if (isPlayerOnTop || DynaPolyActor_IsActorOnTop(&this->dyna)) {
if (!this->unk15D) {
this->unk15D = true;
this->unk15F = 12;
- } else if (this->unk15F == 0 && temp_v0) {
+ } else if ((this->unk15F == 0) && isPlayerOnTop) {
this->unk15C = 16;
}
} else {
@@ -68,7 +68,7 @@ void ObjY2lift_Update(Actor* thisx, PlayState* play) {
if (DECR(this->unk15C) != 0) {
temp_fv0 = this->dyna.actor.home.pos.y + 180.0f;
targetVelocityY = 2.0f;
- } else if (!temp_v0 && this->dyna.actor.velocity.y <= 0.0f) {
+ } else if (!isPlayerOnTop && (this->dyna.actor.velocity.y <= 0.0f)) {
temp_fv0 = this->dyna.actor.home.pos.y;
targetVelocityY = -2.0f;
}
diff --git a/src/overlays/actors/ovl_Obj_Y2lift/z_obj_y2lift.h b/src/overlays/actors/ovl_Obj_Y2lift/z_obj_y2lift.h
index a26d305ae..cacb0fa7b 100644
--- a/src/overlays/actors/ovl_Obj_Y2lift/z_obj_y2lift.h
+++ b/src/overlays/actors/ovl_Obj_Y2lift/z_obj_y2lift.h
@@ -13,6 +13,4 @@ typedef struct ObjY2lift {
/* 0x15F */ u8 unk15F;
} ObjY2lift; // size = 0x160
-extern const ActorInit Obj_Y2lift_InitVars;
-
#endif // Z_OBJ_Y2LIFT_H
diff --git a/src/overlays/actors/ovl_Obj_Y2shutter/overlay.cfg b/src/overlays/actors/ovl_Obj_Y2shutter/overlay.cfg
deleted file mode 100644
index 913e42405..000000000
--- a/src/overlays/actors/ovl_Obj_Y2shutter/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Y2shutter
-z_obj_y2shutter.c
diff --git a/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.c b/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.c
index 6b67bc068..cea1a4e71 100644
--- a/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.c
+++ b/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.c
@@ -1,10 +1,11 @@
/*
* File: z_obj_y2shutter.c
* Overlay: ovl_Obj_Y2shutter
- * Description: Pirates' Fortress sliding grate
+ * Description: Pirates' Fortress sliding grated/barred shutters
*/
#include "z_obj_y2shutter.h"
+#include "objects/object_kaizoku_obj/object_kaizoku_obj.h"
#define FLAGS (ACTOR_FLAG_10)
@@ -15,8 +16,20 @@ void ObjY2shutter_Destroy(Actor* thisx, PlayState* play);
void ObjY2shutter_Update(Actor* thisx, PlayState* play);
void ObjY2shutter_Draw(Actor* thisx, PlayState* play);
-#if 0
-const ActorInit Obj_Y2shutter_InitVars = {
+typedef struct ShutterInfo {
+ /* 0x00 */ Gfx* dList;
+ /* 0x04 */ CollisionHeader* colHeader;
+ /* 0x08 */ f32 openedOffsetY;
+ /* 0x0C */ f32 openVelocity;
+ /* 0x10 */ f32 openAccel;
+ /* 0x14 */ f32 closeVelocity;
+ /* 0x18 */ f32 closeAccel;
+ /* 0x1C */ u8 openStartSettleTimer;
+ /* 0x1D */ u8 openEndAndCloseSettleTimer;
+ /* 0x1E */ u8 openTimer;
+} ShutterInfo; // size = 0x20
+
+ActorInit Obj_Y2shutter_InitVars = {
ACTOR_OBJ_Y2SHUTTER,
ACTORCAT_BG,
FLAGS,
@@ -28,24 +41,136 @@ const ActorInit Obj_Y2shutter_InitVars = {
(ActorFunc)ObjY2shutter_Draw,
};
-// static InitChainEntry sInitChain[] = {
-static InitChainEntry D_80B9AEB0[] = {
+ShutterInfo sShutterInfo[] = {
+ { gPirateBarredShutterDL, &gPirateBarredShutterCol, 120.0f, 20.0f, 3.0f, -20.0f, 3.0f, 4, 8, 160 },
+ { gPirateGratedShutterDL, &gPirateGratedShutterCol, 150.0f, 1.0f, 0.04f, -1.0f, 0.04f, 6, 12, 160 },
+};
+
+static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
ICHAIN_F32(uncullZoneScale, 800, ICHAIN_CONTINUE),
ICHAIN_F32(uncullZoneDownward, 800, ICHAIN_STOP),
};
-#endif
+void ObjY2shutter_Init(Actor* thisx, PlayState* play) {
+ s32 pad[2];
+ ShutterInfo* info = &sShutterInfo[OBJY2SHUTTER_GET_TYPE(thisx)];
+ ObjY2shutter* this = THIS;
-extern InitChainEntry D_80B9AEB0[];
+ Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
+ DynaPolyActor_Init(&this->dyna, 0);
+ DynaPolyActor_LoadMesh(play, &this->dyna, info->colHeader);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Y2shutter/ObjY2shutter_Init.s")
+void ObjY2shutter_Destroy(Actor* thisx, PlayState* play) {
+ ObjY2shutter* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Y2shutter/ObjY2shutter_Destroy.s")
+ DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Y2shutter/func_80B9AA20.s")
+void ObjY2shutter_SetupOpen(ObjY2shutter* this, ShutterInfo* info, ShutterType shutterType) {
+ this->openTimer = info->openTimer;
+ this->settleTimer = info->openStartSettleTimer;
+ if (shutterType == SHUTTER_BARRED) {
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_METALDOOR_OPEN);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Y2shutter/ObjY2shutter_Update.s")
+void ObjY2shutter_Update(Actor* thisx, PlayState* play) {
+ s32 pad;
+ ObjY2shutter* this = THIS;
+ ShutterType shutterType = OBJY2SHUTTER_GET_TYPE(&this->dyna.actor);
+ ShutterInfo* info = &sShutterInfo[shutterType];
+ f32 targetPosY = this->dyna.actor.world.pos.y;
+ f32 targetVelocityY = 0.0f;
+ f32 accelY = 0.0f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Y2shutter/ObjY2shutter_Draw.s")
+ sShutterInfo[0].openTimer = DREG(84) + 160;
+ sShutterInfo[1].openTimer = DREG(85) + 160;
+
+ if (((shutterType == SHUTTER_BARRED) && (DREG(86) != 0)) || ((shutterType != SHUTTER_BARRED) && (DREG(87) != 0))) {
+ if (shutterType == SHUTTER_BARRED) {
+ DREG(86) = 0;
+ } else {
+ DREG(87) = 0;
+ }
+
+ if (Flags_GetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor))) {
+ Flags_UnsetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor));
+ } else {
+ Flags_SetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor));
+ }
+ }
+
+ if (this->settleTimer == 0) {
+ if (Flags_GetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor))) {
+ s16 csId = this->dyna.actor.csId;
+
+ if (this->openTimer == 0) {
+ if ((csId >= 0) && !CutsceneManager_IsNext(csId)) {
+ CutsceneManager_Queue(csId);
+ } else if (csId >= 0) {
+ CutsceneManager_StartWithPlayerCs(csId, &this->dyna.actor);
+ this->openTimer = -1;
+ } else {
+ ObjY2shutter_SetupOpen(this, info, shutterType);
+ }
+ } else if (this->openTimer < 0) {
+ if (func_800F22C4(csId, &this->dyna.actor) != 0) {
+ ObjY2shutter_SetupOpen(this, info, shutterType);
+ }
+ } else {
+ targetPosY = this->dyna.actor.home.pos.y + info->openedOffsetY;
+ targetVelocityY = info->openVelocity;
+ accelY = info->openAccel;
+ if (this->openTimer < 2) {
+ Flags_UnsetSwitch(play, OBJY2SHUTTER_GET_SWITCHFLAG(&this->dyna.actor));
+ } else {
+ this->openTimer--;
+ }
+ }
+ } else if (this->openTimer != 0) {
+ this->openTimer = 0;
+ this->settleTimer = info->openStartSettleTimer;
+ if (shutterType == SHUTTER_BARRED) {
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_METALDOOR_CLOSE);
+ }
+ } else {
+ targetPosY = this->dyna.actor.home.pos.y;
+ targetVelocityY = info->closeVelocity;
+ accelY = info->closeAccel;
+ }
+ }
+
+ Math_StepToF(&this->dyna.actor.velocity.y, targetVelocityY, accelY);
+ this->dyna.actor.world.pos.y += this->dyna.actor.velocity.y;
+
+ if (((this->dyna.actor.world.pos.y - targetPosY) * targetVelocityY) >= 0.0f) {
+ this->dyna.actor.world.pos.y = targetPosY;
+ this->dyna.actor.velocity.y = 0.0f;
+ if (!this->isStationary) {
+ this->isStationary = true;
+ this->settleTimer = info->openEndAndCloseSettleTimer;
+ if (shutterType != SHUTTER_BARRED) {
+ Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_METALDOOR_STOP);
+ }
+ }
+ } else {
+ this->isStationary = false;
+ if (shutterType != SHUTTER_BARRED) {
+ func_800B9010(&this->dyna.actor, NA_SE_EV_METALDOOR_SLIDE - SFX_FLAG);
+ }
+ }
+
+ if (DECR(this->settleTimer)) {
+ this->dyna.actor.shape.yOffset = 2.0f * (this->settleTimer & 1) * this->settleTimer;
+ }
+}
+
+void ObjY2shutter_Draw(Actor* thisx, PlayState* play) {
+ ObjY2shutter* this = THIS;
+ ShutterInfo* info = &sShutterInfo[(OBJY2SHUTTER_GET_TYPE(&this->dyna.actor))];
+
+ Gfx_DrawDListOpa(play, info->dList);
+}
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 217bcee6c..bccdce645 100644
--- a/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h
+++ b/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h
@@ -6,10 +6,18 @@
struct ObjY2shutter;
typedef struct ObjY2shutter {
- /* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0x1C];
+ /* 0x000 */ DynaPolyActor dyna;
+ /* 0x15C */ s16 openTimer;
+ /* 0x15E */ u8 isStationary; // true if the door is neither opening nor closing
+ /* 0x15F */ u8 settleTimer;
} ObjY2shutter; // size = 0x160
-extern const ActorInit Obj_Y2shutter_InitVars;
+typedef enum {
+ /* 0x0 */ SHUTTER_BARRED,
+ /* 0x1 */ SHUTTER_GRATED,
+} ShutterType;
+
+#define OBJY2SHUTTER_GET_TYPE(thisx) (((thisx)->params >> 7) & 1)
+#define OBJY2SHUTTER_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F)
#endif // Z_OBJ_Y2SHUTTER_H
diff --git a/src/overlays/actors/ovl_Obj_Yado/overlay.cfg b/src/overlays/actors/ovl_Obj_Yado/overlay.cfg
deleted file mode 100644
index 091dbfce7..000000000
--- a/src/overlays/actors/ovl_Obj_Yado/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Yado
-z_obj_yado.c
diff --git a/src/overlays/actors/ovl_Obj_Yado/z_obj_yado.c b/src/overlays/actors/ovl_Obj_Yado/z_obj_yado.c
index 845e97da4..b4a78851a 100644
--- a/src/overlays/actors/ovl_Obj_Yado/z_obj_yado.c
+++ b/src/overlays/actors/ovl_Obj_Yado/z_obj_yado.c
@@ -4,6 +4,7 @@
* Description: Stockpot Inn - 2nd Floor Window
*/
+#include "prevent_bss_reordering.h"
#include "z_obj_yado.h"
#include "objects/object_yado_obj/object_yado_obj.h"
@@ -16,7 +17,7 @@ void ObjYado_Destroy(Actor* thisx, PlayState* play);
void ObjYado_Update(Actor* thisx, PlayState* play);
void ObjYado_Draw(Actor* thisx, PlayState* play);
-const ActorInit Obj_Yado_InitVars = {
+ActorInit Obj_Yado_InitVars = {
ACTOR_OBJ_YADO,
ACTORCAT_BG,
FLAGS,
diff --git a/src/overlays/actors/ovl_Obj_Yado/z_obj_yado.h b/src/overlays/actors/ovl_Obj_Yado/z_obj_yado.h
index 28ffd63dc..52ef8693e 100644
--- a/src/overlays/actors/ovl_Obj_Yado/z_obj_yado.h
+++ b/src/overlays/actors/ovl_Obj_Yado/z_obj_yado.h
@@ -10,6 +10,4 @@ typedef struct ObjYado {
/* 0x144 */ u8 isNight;
} ObjYado; // size = 0x148
-extern const ActorInit Obj_Yado_InitVars;
-
#endif // Z_OBJ_YADO_H
diff --git a/src/overlays/actors/ovl_Obj_Yasi/overlay.cfg b/src/overlays/actors/ovl_Obj_Yasi/overlay.cfg
deleted file mode 100644
index e1d3b9f4e..000000000
--- a/src/overlays/actors/ovl_Obj_Yasi/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Obj_Yasi
-z_obj_yasi.c
diff --git a/src/overlays/actors/ovl_Obj_Yasi/z_obj_yasi.c b/src/overlays/actors/ovl_Obj_Yasi/z_obj_yasi.c
index 185638056..5af34152a 100644
--- a/src/overlays/actors/ovl_Obj_Yasi/z_obj_yasi.c
+++ b/src/overlays/actors/ovl_Obj_Yasi/z_obj_yasi.c
@@ -18,7 +18,7 @@ void ObjYasi_Destroy(Actor* thisx, PlayState* play);
void ObjYasi_Update(Actor* thisx, PlayState* play);
void ObjYasi_Draw(Actor* thisx, PlayState* play);
-const ActorInit Obj_Yasi_InitVars = {
+ActorInit Obj_Yasi_InitVars = {
ACTOR_OBJ_YASI,
ACTORCAT_PROP,
FLAGS,
diff --git a/src/overlays/actors/ovl_Obj_Yasi/z_obj_yasi.h b/src/overlays/actors/ovl_Obj_Yasi/z_obj_yasi.h
index d1fdc6aed..fc2b777d8 100644
--- a/src/overlays/actors/ovl_Obj_Yasi/z_obj_yasi.h
+++ b/src/overlays/actors/ovl_Obj_Yasi/z_obj_yasi.h
@@ -9,8 +9,6 @@ typedef struct ObjYasi {
/* 0x000 */ DynaPolyActor dyna;
} ObjYasi; // size = 0x15C
-extern const ActorInit Obj_Yasi_InitVars;
-
#define PALM_TREE_IS_WIDE(thisx) ((thisx)->params & 1)
#endif // Z_OBJ_YASI_H
diff --git a/src/overlays/actors/ovl_Object_Kankyo/overlay.cfg b/src/overlays/actors/ovl_Object_Kankyo/overlay.cfg
deleted file mode 100644
index 9c4704cae..000000000
--- a/src/overlays/actors/ovl_Object_Kankyo/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Object_Kankyo
-z_object_kankyo.c
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 264167db5..db78f579b 100644
--- a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c
+++ b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c
@@ -27,7 +27,7 @@ void func_808DDE9C(Actor* thisx, PlayState* play2);
static f32 D_808DE5B0;
-const ActorInit Object_Kankyo_InitVars = {
+ActorInit Object_Kankyo_InitVars = {
ACTOR_OBJECT_KANKYO,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -125,7 +125,7 @@ void ObjectKankyo_Init(Actor* thisx, PlayState* play) {
void ObjectKankyo_Destroy(Actor* thisx, PlayState* play) {
ObjectKankyo* this = THIS;
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
void func_808DC18C(ObjectKankyo* this, PlayState* play) {
diff --git a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.h b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.h
index c6e374da8..8dc8d4d85 100644
--- a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.h
+++ b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.h
@@ -28,6 +28,4 @@ typedef struct ObjectKankyo {
/* 0x1150 */ ObjectKankyoActionFunc actionFunc;
} ObjectKankyo; // size = 0x1154
-extern const ActorInit Object_Kankyo_InitVars;
-
#endif // Z_OBJECT_KANKYO_H
diff --git a/src/overlays/actors/ovl_Oceff_Spot/overlay.cfg b/src/overlays/actors/ovl_Oceff_Spot/overlay.cfg
deleted file mode 100644
index e302cce9a..000000000
--- a/src/overlays/actors/ovl_Oceff_Spot/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Oceff_Spot
-z_oceff_spot.c
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 7eaf78c20..731fe6b77 100644
--- a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c
+++ b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c
@@ -21,7 +21,7 @@ void OceffSpot_End(OceffSpot* this, PlayState* play);
void OceffSpot_SetupAction(OceffSpot* this, OceffSpotActionFunc actionFunc);
-const ActorInit Oceff_Spot_InitVars = {
+ActorInit Oceff_Spot_InitVars = {
ACTOR_OCEFF_SPOT,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -79,8 +79,8 @@ void OceffSpot_End(OceffSpot* this, PlayState* play) {
if (this->unk16C > 0.0f) {
this->unk16C -= 0.05f;
} else {
- Actor_MarkForDeath(&this->actor);
- if ((REG(15) != 0x190) && (play->msgCtx.unk12046 == 0)) {
+ Actor_Kill(&this->actor);
+ if ((R_TIME_SPEED != 400) && (play->msgCtx.unk12046 == 0)) {
if ((play->msgCtx.ocarinaAction != 0x39) || (play->msgCtx.ocarinaMode != 0xA)) {
gSaveContext.sunsSongState = SUNSSONG_START;
}
diff --git a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.h b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.h
index 0a770ee9d..2e4e2a29a 100644
--- a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.h
+++ b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.h
@@ -18,6 +18,4 @@ typedef struct OceffSpot {
/* 0x174 */ OceffSpotActionFunc actionFunc;
} OceffSpot; // size = 0x178
-extern const ActorInit Oceff_Spot_InitVars;
-
#endif // Z_OCEFF_SPOT_H
diff --git a/src/overlays/actors/ovl_Oceff_Storm/overlay.cfg b/src/overlays/actors/ovl_Oceff_Storm/overlay.cfg
deleted file mode 100644
index 6845a1117..000000000
--- a/src/overlays/actors/ovl_Oceff_Storm/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Oceff_Storm
-z_oceff_storm.c
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 3a4faceea..96d76f807 100644
--- a/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c
+++ b/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c
@@ -19,7 +19,7 @@ void OceffStorm_DefaultAction(OceffStorm* this, PlayState* play);
void func_80981B48(OceffStorm* this, PlayState* play);
void OceffStorm_Draw2(Actor* thisx, PlayState* play);
-const ActorInit Oceff_Storm_InitVars = {
+ActorInit Oceff_Storm_InitVars = {
ACTOR_OCEFF_STORM,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -150,7 +150,7 @@ void OceffStorm_DefaultAction(OceffStorm* this, PlayState* play) {
if (this->counter < 70) {
this->counter++;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
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 20dd1ffcb..87a67191c 100644
--- a/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.h
+++ b/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.h
@@ -17,8 +17,6 @@ typedef struct OceffStorm {
/* 0x14C */ OceffStormActionFunc actionFunc;
} OceffStorm; // size = 0x150
-extern const ActorInit Oceff_Storm_InitVars;
-
typedef enum {
/* 1 */ OCEFF_STORM_ACTION_PARAM_1 = 1
} OceffStormActionParams;
diff --git a/src/overlays/actors/ovl_Oceff_Wipe/overlay.cfg b/src/overlays/actors/ovl_Oceff_Wipe/overlay.cfg
deleted file mode 100644
index c10e855cf..000000000
--- a/src/overlays/actors/ovl_Oceff_Wipe/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Oceff_Wipe
-z_oceff_wipe.c
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 ef1fa1035..42bf6c703 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c
@@ -15,7 +15,7 @@ void OceffWipe_Destroy(Actor* thisx, PlayState* play);
void OceffWipe_Update(Actor* thisx, PlayState* play);
void OceffWipe_Draw(Actor* thisx, PlayState* play);
-const ActorInit Oceff_Wipe_InitVars = {
+ActorInit Oceff_Wipe_InitVars = {
ACTOR_OCEFF_WIPE,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -51,7 +51,7 @@ void OceffWipe_Update(Actor* thisx, PlayState* play) {
if (this->counter < 100) {
this->counter++;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
diff --git a/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.h b/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.h
index 6828c996d..0ee4314d0 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.h
+++ b/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.h
@@ -15,6 +15,4 @@ typedef struct OceffWipe {
/* 0x144 */ s16 counter;
} OceffWipe; // size = 0x148
-extern const ActorInit Oceff_Wipe_InitVars;
-
#endif // Z_OCEFF_WIPE_H
diff --git a/src/overlays/actors/ovl_Oceff_Wipe2/overlay.cfg b/src/overlays/actors/ovl_Oceff_Wipe2/overlay.cfg
deleted file mode 100644
index a8d56b9bb..000000000
--- a/src/overlays/actors/ovl_Oceff_Wipe2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Oceff_Wipe2
-z_oceff_wipe2.c
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 54672f173..3d8004c5c 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c
@@ -15,7 +15,7 @@ void OceffWipe2_Destroy(Actor* thisx, PlayState* play);
void OceffWipe2_Update(Actor* thisx, PlayState* play);
void OceffWipe2_Draw(Actor* thisx, PlayState* play);
-const ActorInit Oceff_Wipe2_InitVars = {
+ActorInit Oceff_Wipe2_InitVars = {
ACTOR_OCEFF_WIPE2,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -53,7 +53,7 @@ void OceffWipe2_Update(Actor* thisx, PlayState* play) {
if (this->timer < 100) {
this->timer++;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
diff --git a/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.h b/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.h
index c213dfe38..ee2fb2968 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.h
+++ b/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.h
@@ -10,6 +10,4 @@ typedef struct OceffWipe2 {
/* 0x144 */ s16 timer;
} OceffWipe2; // size = 0x148
-extern const ActorInit Oceff_Wipe2_InitVars;
-
#endif // Z_OCEFF_WIPE2_H
diff --git a/src/overlays/actors/ovl_Oceff_Wipe3/overlay.cfg b/src/overlays/actors/ovl_Oceff_Wipe3/overlay.cfg
deleted file mode 100644
index 5aca74d99..000000000
--- a/src/overlays/actors/ovl_Oceff_Wipe3/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Oceff_Wipe3
-z_oceff_wipe3.c
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 4837f6949..52031ce00 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c
@@ -16,7 +16,7 @@ void OceffWipe3_Destroy(Actor* thisx, PlayState* play);
void OceffWipe3_Update(Actor* thisx, PlayState* play);
void OceffWipe3_Draw(Actor* thisx, PlayState* play);
-const ActorInit Oceff_Wipe3_InitVars = {
+ActorInit Oceff_Wipe3_InitVars = {
ACTOR_OCEFF_WIPE3,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -54,7 +54,7 @@ void OceffWipe3_Update(Actor* thisx, PlayState* play) {
if (this->counter < 100) {
this->counter++;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
diff --git a/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.h b/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.h
index f29ca9278..a604aae34 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.h
+++ b/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.h
@@ -10,6 +10,4 @@ typedef struct OceffWipe3 {
/* 0x144 */ s16 counter;
} OceffWipe3; // size = 0x148
-extern const ActorInit Oceff_Wipe3_InitVars;
-
#endif // Z_OCEFF_WIPE3_H
diff --git a/src/overlays/actors/ovl_Oceff_Wipe4/overlay.cfg b/src/overlays/actors/ovl_Oceff_Wipe4/overlay.cfg
deleted file mode 100644
index 64cd25b04..000000000
--- a/src/overlays/actors/ovl_Oceff_Wipe4/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Oceff_Wipe4
-z_oceff_wipe4.c
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 18fecfe71..3554bc78a 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c
@@ -15,7 +15,7 @@ void OceffWipe4_Destroy(Actor* thisx, PlayState* play);
void OceffWipe4_Update(Actor* thisx, PlayState* play);
void OceffWipe4_Draw(Actor* thisx, PlayState* play);
-const ActorInit Oceff_Wipe4_InitVars = {
+ActorInit Oceff_Wipe4_InitVars = {
ACTOR_OCEFF_WIPE4,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -53,7 +53,7 @@ void OceffWipe4_Update(Actor* thisx, PlayState* play) {
if (this->counter < 50) {
this->counter++;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
diff --git a/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.h b/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.h
index 59b592318..e65bf575b 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.h
+++ b/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.h
@@ -15,6 +15,4 @@ typedef struct OceffWipe4 {
/* 0x144 */ s16 counter;
} OceffWipe4; // size = 0x148
-extern const ActorInit Oceff_Wipe4_InitVars;
-
#endif // Z_OCEFF_WIPE4_H
diff --git a/src/overlays/actors/ovl_Oceff_Wipe5/overlay.cfg b/src/overlays/actors/ovl_Oceff_Wipe5/overlay.cfg
deleted file mode 100644
index 274c53c0f..000000000
--- a/src/overlays/actors/ovl_Oceff_Wipe5/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Oceff_Wipe5
-z_oceff_wipe5.c
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 951ba1c39..93caeb33d 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c
@@ -15,7 +15,7 @@ void OceffWipe5_Destroy(Actor* thisx, PlayState* play);
void OceffWipe5_Update(Actor* thisx, PlayState* play);
void OceffWipe5_Draw(Actor* thisx, PlayState* play);
-const ActorInit Oceff_Wipe5_InitVars = {
+ActorInit Oceff_Wipe5_InitVars = {
ACTOR_OCEFF_WIPE5,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -51,7 +51,7 @@ void OceffWipe5_Update(Actor* thisx, PlayState* play) {
if (this->counter < 100) {
this->counter++;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -79,8 +79,8 @@ void OceffWipe5_Draw(Actor* thisx, PlayState* play) {
f32 phi_fv1 = 1220.0f;
if ((((OCEFF_WIPE5_GET_SONG_TYPE(thisx) == 2) && (play->sceneId == SCENE_LABO)) &&
- ((play->csCtx.currentCsIndex == 0) || (play->csCtx.currentCsIndex == 1))) &&
- (play->csCtx.state != 0)) {
+ ((play->csCtx.scriptIndex == 0) || (play->csCtx.scriptIndex == 1))) &&
+ (play->csCtx.state != CS_STATE_IDLE)) {
phi_fv1 = 1150.0f;
}
diff --git a/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.h b/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.h
index 05424ea1e..21e1f2383 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.h
+++ b/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.h
@@ -12,6 +12,4 @@ typedef struct OceffWipe5 {
/* 0x144 */ s16 counter;
} OceffWipe5; // size = 0x148
-extern const ActorInit Oceff_Wipe5_InitVars;
-
#endif // Z_OCEFF_WIPE5_H
diff --git a/src/overlays/actors/ovl_Oceff_Wipe6/overlay.cfg b/src/overlays/actors/ovl_Oceff_Wipe6/overlay.cfg
deleted file mode 100644
index 722d51979..000000000
--- a/src/overlays/actors/ovl_Oceff_Wipe6/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Oceff_Wipe6
-z_oceff_wipe6.c
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 97c688434..87dbe2752 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c
@@ -15,7 +15,7 @@ void OceffWipe6_Destroy(Actor* thisx, PlayState* play);
void OceffWipe6_Update(Actor* thisx, PlayState* play);
void OceffWipe6_Draw(Actor* thisx, PlayState* play);
-const ActorInit Oceff_Wipe6_InitVars = {
+ActorInit Oceff_Wipe6_InitVars = {
ACTOR_OCEFF_WIPE6,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -49,7 +49,7 @@ void OceffWipe6_Update(Actor* thisx, PlayState* play) {
if (this->counter < 100) {
this->counter++;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
diff --git a/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.h b/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.h
index c37e3f9d4..2afd8f24f 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.h
+++ b/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.h
@@ -10,6 +10,4 @@ typedef struct OceffWipe6 {
/* 0x144 */ s16 counter;
} OceffWipe6; // size = 0x148
-extern const ActorInit Oceff_Wipe6_InitVars;
-
#endif // Z_OCEFF_WIPE6_H
diff --git a/src/overlays/actors/ovl_Oceff_Wipe7/overlay.cfg b/src/overlays/actors/ovl_Oceff_Wipe7/overlay.cfg
deleted file mode 100644
index 0956cdd61..000000000
--- a/src/overlays/actors/ovl_Oceff_Wipe7/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Oceff_Wipe7
-z_oceff_wipe7.c
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 abd01e1ff..f269a89a5 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.c
+++ b/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.c
@@ -15,7 +15,7 @@ void OceffWipe7_Destroy(Actor* thisx, PlayState* play);
void OceffWipe7_Update(Actor* thisx, PlayState* play);
void OceffWipe7_Draw(Actor* thisx, PlayState* play);
-const ActorInit Oceff_Wipe7_InitVars = {
+ActorInit Oceff_Wipe7_InitVars = {
ACTOR_OCEFF_WIPE7,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -53,7 +53,7 @@ void OceffWipe7_Update(Actor* thisx, PlayState* play) {
if (this->counter < 100) {
this->counter++;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
diff --git a/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.h b/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.h
index d5d82130c..7cb7019a7 100644
--- a/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.h
+++ b/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.h
@@ -10,6 +10,4 @@ typedef struct OceffWipe7 {
/* 0x144 */ s16 counter;
} OceffWipe7; // size = 0x148
-extern const ActorInit Oceff_Wipe7_InitVars;
-
#endif // Z_OCEFF_WIPE7_H
diff --git a/src/overlays/actors/ovl_Shot_Sun/overlay.cfg b/src/overlays/actors/ovl_Shot_Sun/overlay.cfg
deleted file mode 100644
index bd210022d..000000000
--- a/src/overlays/actors/ovl_Shot_Sun/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Shot_Sun
-z_shot_sun.c
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 1aa2e545e..f237bed47 100644
--- a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c
+++ b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c
@@ -19,7 +19,7 @@ void ShotSun_Update(Actor* thisx, PlayState* play);
void ShotSun_UpdateForOcarina(ShotSun* this, PlayState* play);
void ShotSun_UpdateHyliaSun(ShotSun* this, PlayState* play);
-const ActorInit Shot_Sun_InitVars = {
+ActorInit Shot_Sun_InitVars = {
ACTOR_SHOT_SUN,
ACTORCAT_PROP,
FLAGS,
@@ -61,7 +61,7 @@ void ShotSun_Init(Actor* thisx, PlayState* play) {
this->actor.flags |= ACTOR_FLAG_10;
this->actor.flags |= ACTOR_FLAG_2000000;
this->actionFunc = ShotSun_UpdateForOcarina;
- this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON;
} else {
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
@@ -87,7 +87,7 @@ void ShotSun_SpawnFairy(ShotSun* this, PlayState* play2) {
if (this->timer > 0) {
this->timer--;
} else {
- ActorCutscene_Stop(this->actor.cutscene);
+ CutsceneManager_Stop(this->actor.csId);
switch (params) {
case SHOTSUN_FAIRY_SPAWNER_SUNS:
fairyType = ENELF_TYPE_7;
@@ -98,14 +98,14 @@ void ShotSun_SpawnFairy(ShotSun* this, PlayState* play2) {
}
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, this->actor.home.pos.x, this->actor.home.pos.y,
this->actor.home.pos.z, 0, 0, 0, fairyType);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
void ShotSun_TriggerFairy(ShotSun* this, PlayState* play) {
- if ((this->actor.cutscene == -1) || ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
- if (this->actor.cutscene != -1) {
- ActorCutscene_Start(this->actor.cutscene, &this->actor);
+ if ((this->actor.csId == CS_ID_NONE) || CutsceneManager_IsNext(this->actor.csId)) {
+ if (this->actor.csId != CS_ID_NONE) {
+ CutsceneManager_Start(this->actor.csId, &this->actor);
}
this->actionFunc = ShotSun_SpawnFairy;
this->timer = 50;
@@ -113,7 +113,7 @@ void ShotSun_TriggerFairy(ShotSun* this, PlayState* play) {
this->actor.home.pos.z, 0, 0, 0, 0x11);
Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_TRE_BOX_APPEAR);
} else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ CutsceneManager_Queue(this->actor.csId);
}
}
@@ -160,16 +160,20 @@ void ShotSun_UpdateHyliaSun(ShotSun* this, PlayState* play) {
collectible = (EnItem00*)Item_DropCollectible(play, &spawnPos, ITEM00_MAGIC_LARGE);
if (collectible != NULL) {
collectible->unk152 = 0x1770;
- collectible->actor.speedXZ = 0.0f;
+ collectible->actor.speed = 0.0f;
}
}
- Actor_MarkForDeath(&this->actor);
- } else if (!(this->actor.xzDistToPlayer > 120.0f)) {
+ Actor_Kill(&this->actor);
+ 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[7].x + (play->envCtx.unk_4 * (1.0f / 6.0f));
- cylinderPos.y = (player->bodyPartsPos[7].y - 30.0f) + (play->envCtx.unk_8 * (1.0f / 6.0f));
- cylinderPos.z = player->bodyPartsPos[7].z + (play->envCtx.unk_C * (1.0f / 6.0f));
+ 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;
diff --git a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.h b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.h
index 49fd2ffb7..3ba7f35d9 100644
--- a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.h
+++ b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.h
@@ -18,8 +18,6 @@ typedef struct ShotSun {
/* 0x194 */ Vec3s hitboxPos;
/* 0x19A */ s16 timer;
/* 0x19C */ s8 unk_19C; // leftover from OOT secret ocarina occurrence function.
-} ShotSun; // size = 0x1A0
-
-extern const ActorInit Shot_Sun_InitVars;
+} ShotSun; // size = 0x1A0
#endif // Z_SHOT_SUN_H
diff --git a/src/overlays/actors/ovl_TG_Sw/overlay.cfg b/src/overlays/actors/ovl_TG_Sw/overlay.cfg
deleted file mode 100644
index d0341bf09..000000000
--- a/src/overlays/actors/ovl_TG_Sw/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_TG_Sw
-z_tg_sw.c
diff --git a/src/overlays/actors/ovl_TG_Sw/z_tg_sw.c b/src/overlays/actors/ovl_TG_Sw/z_tg_sw.c
index c79697e97..5523ded78 100644
--- a/src/overlays/actors/ovl_TG_Sw/z_tg_sw.c
+++ b/src/overlays/actors/ovl_TG_Sw/z_tg_sw.c
@@ -5,6 +5,7 @@
*/
#include "z_tg_sw.h"
+#include "z64debug_display.h"
#define FLAGS (ACTOR_FLAG_10)
@@ -18,7 +19,7 @@ void TGSw_Draw(Actor* thisx, PlayState* play);
void TGSw_ActionExecuteOneShot(struct TGSw* this, PlayState* play);
-const ActorInit TG_Sw_InitVars = {
+ActorInit TG_Sw_InitVars = {
ACTOR_TG_SW,
ACTORCAT_PROP,
FLAGS,
@@ -36,14 +37,14 @@ void TGSw_ActionDecider(TGSw* this, PlayState* play) {
u8 unk1F4;
// Maybe actorCtx Debug Flag?
- if (play->actorCtx.unk1F5 != 0) {
+ if (play->actorCtx.unk_1F4.timer != 0) {
scaledAbsoluteRotY = ABS_ALT(this->actor.world.rot.y) * 4.0f;
scaledAbsoluteRotZ = ABS_ALT(this->actor.world.rot.z) * 4.0f;
if ((scaledAbsoluteRotZ < this->actor.xzDistToPlayer) || (scaledAbsoluteRotY < this->actor.playerHeightRel)) {
return;
}
- unk1F4 = play->actorCtx.unk1F4;
+ unk1F4 = play->actorCtx.unk_1F4.unk_00;
if (unk1F4 == 2 || unk1F4 == 0) {
this->actionFunc = TGSw_ActionExecuteOneShot;
}
@@ -62,7 +63,7 @@ void TGSw_ActionExecuteOneShot(TGSw* this, PlayState* play) {
}
if ((((this->actor.params & 0xFC) >> 2) & 0xFF) == (((actor->params & 0xFC) >> 2) & 0xFF)) {
actor->parent = &this->actor;
- actor->speedXZ = ABS_ALT(this->actor.world.rot.x);
+ actor->speed = ABS_ALT(this->actor.world.rot.x);
break;
}
actor = actor->next;
@@ -78,19 +79,19 @@ void TGSw_ActionExecuteOneShot(TGSw* this, PlayState* play) {
}
if ((((this->actor.params & 0xFC) >> 2) & 0xFF) == (((actor->params & 0xFC) >> 2) & 0xFF)) {
actor->parent = &this->actor;
- actor->speedXZ = ABS_ALT(this->actor.world.rot.x);
+ actor->speed = ABS_ALT(this->actor.world.rot.x);
break;
}
actor = actor->next;
} while (actor != NULL);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
void TGSw_Init(Actor* thisx, PlayState* play) {
TGSw* this = THIS;
- this->actor.cutscene = this->actor.world.rot.z;
+ this->actor.csId = this->actor.world.rot.z;
this->actionFunc = TGSw_ActionDecider;
}
diff --git a/src/overlays/actors/ovl_TG_Sw/z_tg_sw.h b/src/overlays/actors/ovl_TG_Sw/z_tg_sw.h
index 28bebb5d8..cbcb66431 100644
--- a/src/overlays/actors/ovl_TG_Sw/z_tg_sw.h
+++ b/src/overlays/actors/ovl_TG_Sw/z_tg_sw.h
@@ -11,6 +11,4 @@ typedef struct TGSw {
/* 0x144 */ TGSwActionFunc actionFunc;
} TGSw; // size = 0x148
-extern const ActorInit TG_Sw_InitVars;
-
#endif // Z_TG_SW_H
diff --git a/src/overlays/actors/ovl_player_actor/overlay.cfg b/src/overlays/actors/ovl_player_actor/overlay.cfg
deleted file mode 100644
index 2d4849235..000000000
--- a/src/overlays/actors/ovl_player_actor/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_player_actor
-z_player.c
diff --git a/src/overlays/effects/ovl_Effect_En_Ice_Block/overlay.cfg b/src/overlays/effects/ovl_Effect_En_Ice_Block/overlay.cfg
deleted file mode 100644
index 3035ab72e..000000000
--- a/src/overlays/effects/ovl_Effect_En_Ice_Block/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_En_Ice_Block
-z_eff_en_ice_block.c
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 09c2afb11..ef88015b7 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
@@ -14,7 +14,7 @@ u32 EffectEnIceBlock_Init(PlayState* play, u32 index, EffectSs* this, void* init
void EffectEnIceBlock_Update(PlayState* play, u32 index, EffectSs* this);
void EffectEnIceBlock_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_En_Ice_Block_InitVars = {
+EffectSsInit Effect_En_Ice_Block_InitVars = {
EFFECT_EN_ICE_BLOCK,
EffectEnIceBlock_Init,
};
diff --git a/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.h b/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.h
index e5377b20f..2707d64c8 100644
--- a/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.h
+++ b/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.h
@@ -11,6 +11,4 @@ typedef struct {
/* 0x28 */ s16 scale;
} EffectEnIceBlockInitParams; // size = 0x2C
-extern const EffectSsInit Effect_En_Ice_Block_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_Blast/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Blast/overlay.cfg
deleted file mode 100644
index 2bb72beac..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_Blast/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_Blast
-z_eff_ss_blast.c
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 93353f28c..2d80b4161 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
@@ -26,7 +26,7 @@ u32 EffectSsBlast_Init(PlayState* play, u32 index, EffectSs* this, void* initPar
void EffectSsBlast_Update(PlayState* play, u32 index, EffectSs* this);
void EffectSsBlast_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_Blast_InitVars = {
+EffectSsInit Effect_Ss_Blast_InitVars = {
EFFECT_SS_BLAST,
EffectSsBlast_Init,
};
@@ -70,7 +70,7 @@ void EffectSsBlast_Draw(PlayState* play, u32 index, EffectSs* this) {
func_8012C2DC(play->state.gfxCtx);
gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, this->rEnvColorA);
- func_801691F0(play, &mf, &this->pos);
+ Play_GetFloorSurface(play, &mf, &this->pos);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, this->rPrimColorA);
Matrix_Put(&mf);
Matrix_Scale(radius, radius, radius, MTXMODE_APPLY);
diff --git a/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.h b/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.h
index 72a264c03..1e9087d85 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.h
+++ b/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.h
@@ -15,6 +15,4 @@ typedef struct {
/* 0x32 */ s16 life;
} EffectSsBlastInitParams; // size = 0x34
-extern const EffectSsInit Effect_Ss_Blast_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_Bomb2/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Bomb2/overlay.cfg
deleted file mode 100644
index f964deb72..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_Bomb2/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_Bomb2
-z_eff_ss_bomb2.c
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 d15151d49..b17a43fbe 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
@@ -26,7 +26,7 @@ void EffectSsBomb2_DrawFade(PlayState* play, u32 index, EffectSs* this);
void EffectSsBomb2_DrawLayered(PlayState* play, u32 index, EffectSs* this);
void EffectSsBomb2_Update(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_Bomb2_InitVars = {
+EffectSsInit Effect_Ss_Bomb2_InitVars = {
EFFECT_SS_BOMB2,
EffectSsBomb2_Init,
};
diff --git a/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.h b/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.h
index 468e2c016..4a63bd4c8 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.h
+++ b/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.h
@@ -12,6 +12,4 @@ typedef struct {
/* 0x28 */ u8 drawMode;
} EffectSsBomb2InitParams; // size = 0x30
-extern const EffectSsInit Effect_Ss_Bomb2_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_Bubble/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Bubble/overlay.cfg
deleted file mode 100644
index bdf4b4069..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_Bubble/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_Bubble
-z_eff_ss_bubble.c
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 3298b2ab3..681aac01d 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
@@ -17,12 +17,16 @@ u32 EffectSsBubble_Init(PlayState* play, u32 index, EffectSs* this, void* initPa
void EffectSsBubble_Update(PlayState* play2, u32 index, EffectSs* this);
void EffectSsBubble_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_Bubble_InitVars = {
+EffectSsInit Effect_Ss_Bubble_InitVars = {
EFFECT_SS_BUBBLE,
EffectSsBubble_Init,
};
-static f32 sVecAdjMaximums[] = { 291.0f, 582.0f, 1600.0f };
+static f32 sVecAdjMaximums[] = {
+ 291.0f, // CONVEYOR_SPEED_SLOW
+ 582.0f, // CONVEYOR_SPEED_MEDIUM
+ 1600.0f, // CONVEYOR_SPEED_FAST
+};
u32 EffectSsBubble_Init(PlayState* play, u32 index, EffectSs* this, void* initParamsx) {
EffectSsBubbleInitParams* initParams = (EffectSsBubbleInitParams*)initParamsx;
@@ -85,17 +89,18 @@ void EffectSsBubble_Update(PlayState* play2, u32 index, EffectSs* this) {
}
if (((play->gameplayFrames + index) % 8) == 0) {
CollisionPoly* colPoly;
- u32 speed;
- s16 direction;
+ ConveyorSpeed conveyorSpeed;
+ s16 conveyorDir;
f32 rVecAdjMax;
BgCheck_EntityRaycastFloor2_1(play, &play->colCtx, &colPoly, &this->pos);
- speed = SurfaceType_GetConveyorSpeed(&play->colCtx, colPoly, BGCHECK_SCENE);
- if ((speed != 0) && !SurfaceType_IsFloorConveyor(&play->colCtx, colPoly, BGCHECK_SCENE)) {
- direction = SurfaceType_GetConveyorDirection(&play->colCtx, colPoly, BGCHECK_SCENE) << 0xA;
- rVecAdjMax = sVecAdjMaximums[speed - 1];
- this->rVecAdjX = Math_SinS(direction) * rVecAdjMax;
- this->rVecAdjZ = Math_CosS(direction) * rVecAdjMax;
+ conveyorSpeed = SurfaceType_GetConveyorSpeed(&play->colCtx, colPoly, BGCHECK_SCENE);
+ if ((conveyorSpeed != CONVEYOR_SPEED_DISABLED) &&
+ !SurfaceType_IsFloorConveyor(&play->colCtx, colPoly, BGCHECK_SCENE)) {
+ conveyorDir = SurfaceType_GetConveyorDirection(&play->colCtx, colPoly, BGCHECK_SCENE) << 10;
+ rVecAdjMax = sVecAdjMaximums[conveyorSpeed - 1];
+ this->rVecAdjX = Math_SinS(conveyorDir) * rVecAdjMax;
+ this->rVecAdjZ = Math_CosS(conveyorDir) * rVecAdjMax;
}
}
this->vec.x += this->rVecAdjX / 100.0f;
diff --git a/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.h b/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.h
index 0916a95ca..9e57bc657 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.h
+++ b/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.h
@@ -11,6 +11,4 @@ typedef struct {
/* 0x18 */ f32 scale;
} EffectSsBubbleInitParams; // size = 0x1C
-extern const EffectSsInit Effect_Ss_Bubble_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_D_Fire/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_D_Fire/overlay.cfg
deleted file mode 100644
index 2c439ec55..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_D_Fire/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_D_Fire
-z_eff_ss_d_fire.c
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 9d8eecfbc..d8394b159 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
@@ -21,7 +21,7 @@ u32 EffectSsDFire_Init(PlayState* play, u32 index, EffectSs* this, void* initPar
void EffectSsDFire_Update(PlayState* play, u32 index, EffectSs* this);
void EffectSsDFire_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_D_Fire_InitVars = {
+EffectSsInit Effect_Ss_D_Fire_InitVars = {
EFFECT_SS_D_FIRE,
EffectSsDFire_Init,
};
diff --git a/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.h b/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.h
index 2d657bc43..e72616b84 100644
--- a/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.h
+++ b/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.h
@@ -15,6 +15,4 @@ typedef struct {
/* 0x30 */ s32 life;
} EffectSsDFireInitParams; // size = 0x34
-extern const EffectSsInit Effect_Ss_D_Fire_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_Dead_Db/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Dead_Db/overlay.cfg
deleted file mode 100644
index 61ff41312..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_Dead_Db/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_Dead_Db
-z_eff_ss_dead_db.c
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 54963eb3b..543363ade 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
@@ -25,7 +25,7 @@ u32 EffectSsDeadDb_Init(PlayState* play, u32 index, EffectSs* this, void* initPa
void EffectSsDeadDb_Update(PlayState* play, u32 index, EffectSs* this);
void EffectSsDeadDb_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_Dead_Db_InitVars = {
+EffectSsInit Effect_Ss_Dead_Db_InitVars = {
EFFECT_SS_DEAD_DB,
EffectSsDeadDb_Init,
};
diff --git a/src/overlays/effects/ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.h b/src/overlays/effects/ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.h
index a1ac62167..58e46426f 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.h
+++ b/src/overlays/effects/ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.h
@@ -14,6 +14,4 @@ typedef struct {
/* 0x30 */ s32 life;
} EffectSsDeadDbInitParams; // size = 0x34
-extern const EffectSsInit Effect_Ss_Dead_Db_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/overlay.cfg
deleted file mode 100644
index 86355de67..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_Dead_Dd
-z_eff_ss_dead_dd.c
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 5e8a1e451..9f124d39e 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
@@ -25,7 +25,7 @@ u32 EffectSsDeadDd_Init(PlayState* play, u32 index, EffectSs* this, void* initPa
void EffectSsDeadDd_Update(PlayState* play, u32 index, EffectSs* this);
void EffectSsDeadDd_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_Dead_Dd_InitVars = {
+EffectSsInit Effect_Ss_Dead_Dd_InitVars = {
EFFECT_SS_DEAD_DD,
EffectSsDeadDd_Init,
};
diff --git a/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.h b/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.h
index 9c9dcf28e..7d32c3284 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.h
+++ b/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.h
@@ -23,6 +23,4 @@ typedef struct {
/* 0x40 */ u8 type;
} EffectSsDeadDdInitParams; // size = 0x44
-extern const EffectSsInit Effect_Ss_Dead_Dd_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/overlay.cfg
deleted file mode 100644
index 40a9f45d1..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_Dead_Ds
-z_eff_ss_dead_ds.c
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 7bf60c2a1..6243b4302 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
@@ -23,7 +23,7 @@ u32 EffectSsDeadDs_Init(PlayState* play, u32 index, EffectSs* this, void* initPa
void EffectSsDeadDs_Update(PlayState* play, u32 index, EffectSs* this);
void EffectSsDeadDs_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_Dead_Ds_InitVars = {
+EffectSsInit Effect_Ss_Dead_Ds_InitVars = {
EFFECT_SS_DEAD_DS,
EffectSsDeadDs_Init,
};
diff --git a/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.h b/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.h
index e04742296..b057f3f42 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.h
+++ b/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.h
@@ -13,6 +13,4 @@ typedef struct {
/* 0x2C */ s32 life;
} EffectSsDeadDsInitParams; // size = 0x30
-extern const EffectSsInit Effect_Ss_Dead_Ds_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/overlay.cfg
deleted file mode 100644
index f3b368b9e..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_Dt_Bubble
-z_eff_ss_dt_bubble.c
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 4d009c00a..b6e3b747f 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
@@ -39,7 +39,7 @@ static Color_RGBA8 sEnvColors[] = {
{ 150, 150, 150, 0 },
};
-const EffectSsInit Effect_Ss_Dt_Bubble_InitVars = {
+EffectSsInit Effect_Ss_Dt_Bubble_InitVars = {
EFFECT_SS_DT_BUBBLE,
EffectSsDtBubble_Init,
};
diff --git a/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/z_eff_ss_dt_bubble.h b/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/z_eff_ss_dt_bubble.h
index e572f4a2c..b5247eb0f 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/z_eff_ss_dt_bubble.h
+++ b/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/z_eff_ss_dt_bubble.h
@@ -23,6 +23,4 @@ typedef struct {
/* 0x34 */ u8 customColor;
} EffectSsDtBubbleInitParams; // size = 0x3C
-extern const EffectSsInit Effect_Ss_Dt_Bubble_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_Dust/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Dust/overlay.cfg
deleted file mode 100644
index fa47efe59..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_Dust/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_Dust
-z_eff_ss_dust.c
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 7a2274a5d..10e8fbeed 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
@@ -28,7 +28,7 @@ void EffectSsDust_Update(PlayState* play, u32 index, EffectSs* this);
void EffectSsDust_UpdateFire(PlayState* play, u32 index, EffectSs* this);
void EffectSsDust_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_Dust_InitVars = {
+EffectSsInit Effect_Ss_Dust_InitVars = {
EFFECT_SS_DUST,
EffectSsDust_Init,
};
diff --git a/src/overlays/effects/ovl_Effect_Ss_Dust/z_eff_ss_dust.h b/src/overlays/effects/ovl_Effect_Ss_Dust/z_eff_ss_dust.h
index 410a14352..b2b76e0be 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Dust/z_eff_ss_dust.h
+++ b/src/overlays/effects/ovl_Effect_Ss_Dust/z_eff_ss_dust.h
@@ -26,6 +26,4 @@ typedef struct {
/* 0x34 */ u8 updateMode;
} EffectSsDustInitParams; // size = 0x38
-extern const EffectSsInit Effect_Ss_Dust_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_En_Fire/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_En_Fire/overlay.cfg
deleted file mode 100644
index 0652dd235..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_En_Fire/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_En_Fire
-z_eff_ss_en_fire.c
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 fab6f8788..9d78d4d71 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
@@ -24,7 +24,7 @@ u32 EffectSsEnFire_Init(PlayState* play, u32 index, EffectSs* this, void* initPa
void EffectSsEnFire_Update(PlayState* play, u32 index, EffectSs* this);
void EffectSsEnFire_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_En_Fire_InitVars = {
+EffectSsInit Effect_Ss_En_Fire_InitVars = {
EFFECT_SS_EN_FIRE,
EffectSsEnFire_Init,
};
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 9fb959824..0f17477b8 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
@@ -15,6 +15,4 @@ typedef struct {
/* 0x16 */ s16 bodyPart;
} EffectSsEnFireInitParams; // size = 0x18
-extern const EffectSsInit Effect_Ss_En_Fire_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_En_Ice/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_En_Ice/overlay.cfg
deleted file mode 100644
index a761dda6e..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_En_Ice/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_En_Ice
-z_eff_ss_en_ice.c
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 7d6cf277c..21a0f1019 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
@@ -28,7 +28,7 @@ void EffectSsEnIce_UpdateFlying(PlayState* play, u32 index, EffectSs* this);
void EffectSsEnIce_Update(PlayState* play, u32 index, EffectSs* this);
void EffectSsEnIce_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_En_Ice_InitVars = {
+EffectSsInit Effect_Ss_En_Ice_InitVars = {
EFFECT_SS_EN_ICE,
EffectSsEnIce_Init,
};
@@ -71,7 +71,7 @@ u32 EffectSsEnIce_Init(PlayState* play, u32 index, EffectSs* this, void* initPar
this->update = EffectSsEnIce_Update;
this->rLifespan = initParams->life;
this->rScale = initParams->scale * 100.0f;
- this->rYaw = Math_FAtan2F(initParams->velocity.z, initParams->velocity.x);
+ this->rYaw = Math_Atan2S_XY(initParams->velocity.z, initParams->velocity.x);
this->rPitch = 0;
this->rPrimColorR = initParams->primColor.r;
this->rPrimColorG = initParams->primColor.g;
diff --git a/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.h b/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.h
index 46b162cc1..051e81983 100644
--- a/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.h
+++ b/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.h
@@ -20,6 +20,4 @@ typedef struct {
/* 0x38 */ s16 type;
} EffectSsEnIceInitParams; // size = 0x3C
-extern const EffectSsInit Effect_Ss_En_Ice_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_Extra/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Extra/overlay.cfg
deleted file mode 100644
index b83dab7ec..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_Extra/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_Extra
-z_eff_ss_extra.c
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 1ec1ab41d..03522f5af 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
@@ -16,7 +16,7 @@ void EffectSsExtra_Draw(PlayState* play, u32 index, EffectSs* this);
static s16 sScores[] = { 30, 60, 100 };
-const EffectSsInit Effect_Ss_Extra_InitVars = {
+EffectSsInit Effect_Ss_Extra_InitVars = {
EFFECT_SS_EXTRA,
EffectSsExtra_Init,
};
@@ -92,6 +92,6 @@ void EffectSsExtra_Update(PlayState* play, u32 index, EffectSs* this) {
}
if (this->rTimer == 1) {
- play->interfaceCtx.unk_25C = sScores[this->rScoreIndex];
+ play->interfaceCtx.minigamePoints = sScores[this->rScoreIndex];
}
}
diff --git a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.h b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.h
index c278ec927..081570f62 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.h
+++ b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.h
@@ -17,6 +17,4 @@ typedef struct {
/* 0x26 */ s16 scoreIdx;
} EffectSsExtraInitParams; // size = 0x28
-extern const EffectSsInit Effect_Ss_Extra_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/overlay.cfg
deleted file mode 100644
index 3b701b737..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_Fhg_Flash
-z_eff_ss_fhg_flash.c
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 764828bf4..cd7c6d5bd 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
@@ -19,7 +19,7 @@ u32 EffectSsFhgFlash_Init(PlayState* play, u32 index, EffectSs* this, void* init
void EffectSsFhgFlash_Update(PlayState* play, u32 index, EffectSs* this);
void EffectSsFhgFlash_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_Fhg_Flash_InitVars = {
+EffectSsInit Effect_Ss_Fhg_Flash_InitVars = {
EFFECT_SS_FHG_FLASH,
EffectSsFhgFlash_Init,
};
@@ -89,7 +89,7 @@ void EffectSsFhgFlash_Update(PlayState* play, u32 index, EffectSs* this) {
if (this->rParams == FHGFLASH_SHOCK_PLAYER) {
Player* player = GET_PLAYER(play);
- randBodyPart = Rand_ZeroFloat(18 - 0.1f);
+ 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);
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 c464047b5..c2f231269 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
@@ -40,6 +40,4 @@ typedef struct {
/* 0x2C */ u8 type;
} EffectSsFhgFlashInitParams; // size = 0x30
-extern const EffectSsInit Effect_Ss_Fhg_Flash_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/overlay.cfg
deleted file mode 100644
index 233962db3..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_Fire_Tail
-z_eff_ss_fire_tail.c
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 da4de14d6..1742b03fd 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
@@ -27,7 +27,7 @@ u32 EffectSsFireTail_Init(PlayState* play, u32 index, EffectSs* this, void* init
void EffectSsFireTail_Update(PlayState* play, u32 index, EffectSs* this);
void EffectSsFireTail_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_Fire_Tail_InitVars = {
+EffectSsInit Effect_Ss_Fire_Tail_InitVars = {
EFFECT_SS_FIRE_TAIL,
EffectSsFireTail_Init,
};
@@ -107,7 +107,7 @@ void EffectSsFireTail_Draw(PlayState* play, u32 index, EffectSs* this) {
temp2 = Math_SinS(yawDiff);
dist = Math_Vec3f_DistXZ(&scale, &this->vec) / (this->rReg10 * 0.1f);
Matrix_RotateYS(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000, MTXMODE_APPLY);
- Matrix_RotateZF(DEGF_TO_RADF(temp2 * this->rReg2 * dist), MTXMODE_APPLY);
+ Matrix_RotateZF(DEG_TO_RAD(temp2 * this->rReg2 * dist), MTXMODE_APPLY);
temp2 = 1.0f - ((f32)(this->life + 1) / this->rLifespan);
temp2 = 1.0f - SQ(temp2);
scale.x = scale.y = scale.z = temp2 * (this->rScale * (0.001f * 0.01f));
diff --git a/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.h b/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.h
index 60fc2a6ef..a809e4ebc 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.h
+++ b/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.h
@@ -16,6 +16,4 @@ typedef struct {
/* 0x30 */ s32 life;
} EffectSsFireTailInitParams; // size = 0x34
-extern const EffectSsInit Effect_Ss_Fire_Tail_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Fire/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_G_Fire/overlay.cfg
deleted file mode 100644
index 0041d4fac..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_G_Fire/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_G_Fire
-z_eff_ss_g_fire.c
diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Fire/z_eff_ss_g_fire.c b/src/overlays/effects/ovl_Effect_Ss_G_Fire/z_eff_ss_g_fire.c
index 7bc2d6966..b41f35756 100644
--- a/src/overlays/effects/ovl_Effect_Ss_G_Fire/z_eff_ss_g_fire.c
+++ b/src/overlays/effects/ovl_Effect_Ss_G_Fire/z_eff_ss_g_fire.c
@@ -13,7 +13,7 @@ u32 EffectSsGFire_Init(PlayState* play, u32 index, EffectSs* this, void* initPar
void EffectSsGFire_Update(PlayState* play, u32 index, EffectSs* this);
void EffectSsGFire_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_G_Fire_InitVars = {
+EffectSsInit Effect_Ss_G_Fire_InitVars = {
EFFECT_SS_G_FIRE,
EffectSsGFire_Init,
};
diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Fire/z_eff_ss_g_fire.h b/src/overlays/effects/ovl_Effect_Ss_G_Fire/z_eff_ss_g_fire.h
index 574abc976..cc02cae83 100644
--- a/src/overlays/effects/ovl_Effect_Ss_G_Fire/z_eff_ss_g_fire.h
+++ b/src/overlays/effects/ovl_Effect_Ss_G_Fire/z_eff_ss_g_fire.h
@@ -7,6 +7,4 @@ typedef struct {
/* 0x00 */ Vec3f pos;
} EffectSsGFireInitParams; // size = 0xC
-extern const EffectSsInit Effect_Ss_G_Fire_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Ripple/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_G_Ripple/overlay.cfg
deleted file mode 100644
index f5997e908..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_G_Ripple/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_G_Ripple
-z_eff_ss_g_ripple.c
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 b820d8168..24aadc0ec 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
@@ -27,7 +27,7 @@ u32 EffectSsGRipple_Init(PlayState* play, u32 index, EffectSs* this, void* initP
void EffectSsGRipple_Update(PlayState* play, u32 index, EffectSs* this);
void EffectSsGRipple_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_G_Ripple_InitVars = {
+EffectSsInit Effect_Ss_G_Ripple_InitVars = {
EFFECT_SS_G_RIPPLE,
EffectSsGRipple_Init,
};
diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.h b/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.h
index 018fff6be..c746fbf28 100644
--- a/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.h
+++ b/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.h
@@ -10,6 +10,4 @@ typedef struct {
/* 0x10 */ s16 life;
} EffectSsGRippleInitParams; // size = 0x14
-extern const EffectSsInit Effect_Ss_G_Ripple_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Spk/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_G_Spk/overlay.cfg
deleted file mode 100644
index d49c555de..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_G_Spk/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_G_Spk
-z_eff_ss_g_spk.c
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 260541b51..ccc2951c6 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
@@ -26,7 +26,7 @@ void EffectSsGSpk_Update(PlayState* play, u32 index, EffectSs* this);
void EffectSsGSpk_UpdateNoAccel(PlayState* play, u32 index, EffectSs* this);
void EffectSsGSpk_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_G_Spk_InitVars = {
+EffectSsInit Effect_Ss_G_Spk_InitVars = {
EFFECT_SS_G_SPK,
EffectSsGSpk_Init,
};
@@ -134,8 +134,8 @@ void EffectSsGSpk_Update(PlayState* play, u32 index, EffectSs* this) {
void EffectSsGSpk_UpdateNoAccel(PlayState* play, u32 index, EffectSs* this) {
if (this->actor != NULL) {
if ((this->actor->category == ACTORCAT_EXPLOSIVES) && (this->actor->update != NULL)) {
- this->pos.x += (Math_SinS(this->actor->world.rot.y) * this->actor->speedXZ);
- this->pos.z += (Math_CosS(this->actor->world.rot.y) * this->actor->speedXZ);
+ this->pos.x += (Math_SinS(this->actor->world.rot.y) * this->actor->speed);
+ this->pos.z += (Math_CosS(this->actor->world.rot.y) * this->actor->speed);
}
}
diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.h b/src/overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.h
index c44bb9168..b952802d2 100644
--- a/src/overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.h
+++ b/src/overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.h
@@ -20,6 +20,4 @@ typedef struct {
/* 0x34 */ u8 updateMode;
} EffectSsGSpkInitParams; // size = 0x38
-extern const EffectSsInit Effect_Ss_G_Spk_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Splash/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_G_Splash/overlay.cfg
deleted file mode 100644
index 6f49625f8..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_G_Splash/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_G_Splash
-z_eff_ss_g_splash.c
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 78bee9835..8d7647bfe 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
@@ -17,7 +17,7 @@ u32 EffectSsGSplash_Init(PlayState* play, u32 index, EffectSs* this, void* initP
void EffectSsGSplash_Update(PlayState* play, u32 index, EffectSs* this);
void EffectSsGSplash_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_G_Splash_InitVars = {
+EffectSsInit Effect_Ss_G_Splash_InitVars = {
EFFECT_SS_G_SPLASH,
EffectSsGSplash_Init,
};
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 7ea428400..9d3fbcd13 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
@@ -12,6 +12,4 @@ typedef struct {
/* 0x14 */ Color_RGBA8 envColor;
} EffectSsGSplashInitParams; // size = 0x18
-extern const EffectSsInit Effect_Ss_G_Splash_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_Hahen/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Hahen/overlay.cfg
deleted file mode 100644
index fd5cb9c8f..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_Hahen/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_Hahen
-z_eff_ss_hahen.c
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 b4d9ae6fb..e1a9371cd 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
@@ -21,7 +21,7 @@ u32 EffectSsHahen_Init(PlayState* play, u32 index, EffectSs* this, void* initPar
void EffectSsHahen_Update(PlayState* play, u32 index, EffectSs* this);
void EffectSsHahen_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_Hahen_InitVars = {
+EffectSsInit Effect_Ss_Hahen_InitVars = {
EFFECT_SS_HAHEN,
EffectSsHahen_Init,
};
diff --git a/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h b/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h
index 9a73ac664..d962bf55f 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h
+++ b/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h
@@ -19,6 +19,4 @@ typedef struct {
/* 0x2C */ s16 life;
} EffectSsHahenInitParams; // size = 0x30
-extern const EffectSsInit Effect_Ss_Hahen_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_Hitmark/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Hitmark/overlay.cfg
deleted file mode 100644
index 3623bfcfc..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_Hitmark/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_Hitmark
-z_eff_ss_hitmark.c
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 f65e36c7d..36eb650f7 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
@@ -73,7 +73,7 @@ static TexturePtr sTextures[] = {
gEffHitmarkWhiteMetal8Tex,
};
-const EffectSsInit Effect_Ss_Hitmark_InitVars = {
+EffectSsInit Effect_Ss_Hitmark_InitVars = {
EFFECT_SS_HITMARK,
EffectSsHitmark_Init,
};
diff --git a/src/overlays/effects/ovl_Effect_Ss_Hitmark/z_eff_ss_hitmark.h b/src/overlays/effects/ovl_Effect_Ss_Hitmark/z_eff_ss_hitmark.h
index 6e38ab8d2..e513f0665 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Hitmark/z_eff_ss_hitmark.h
+++ b/src/overlays/effects/ovl_Effect_Ss_Hitmark/z_eff_ss_hitmark.h
@@ -16,6 +16,4 @@ typedef struct {
/* 0x08 */ Vec3f pos;
} EffectSsHitmarkInitParams; // size = 0x14
-extern const EffectSsInit Effect_Ss_Hitmark_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/overlay.cfg
deleted file mode 100644
index 643644dd7..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_Ice_Piece
-z_eff_ss_ice_piece.c
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 ebc28b469..9efadc99e 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
@@ -19,7 +19,7 @@ u32 EffectSsIcePiece_Init(PlayState* play, u32 index, EffectSs* this, void* init
void EffectSsIcePiece_Update(PlayState* play, u32 index, EffectSs* this);
void EffectSsIcePiece_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_Ice_Piece_InitVars = {
+EffectSsInit Effect_Ss_Ice_Piece_InitVars = {
EFFECT_SS_ICE_PIECE,
EffectSsIcePiece_Init,
};
@@ -36,7 +36,7 @@ u32 EffectSsIcePiece_Init(PlayState* play, u32 index, EffectSs* this, void* init
this->update = EffectSsIcePiece_Update;
this->rLifespan = initParams->life;
this->rScale = initParams->scale * 100.0f;
- this->rYaw = Math_FAtan2F(initParams->velocity.z, initParams->velocity.x);
+ this->rYaw = Math_Atan2S_XY(initParams->velocity.z, initParams->velocity.x);
this->rPitch = 0;
this->rRotSpeed =
((fabsf(initParams->velocity.x) + fabsf(initParams->velocity.y)) * 100.0f) * (Rand_ZeroFloat(1.0f) + 0.5f);
diff --git a/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.h b/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.h
index 2bbe9e481..16ada036f 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.h
+++ b/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.h
@@ -11,6 +11,4 @@ typedef struct {
/* 0x28 */ s32 life;
} EffectSsIcePieceInitParams; // size = 0xC
-extern const EffectSsInit Effect_Ss_Ice_Piece_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/overlay.cfg
deleted file mode 100644
index 854b90889..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_Ice_Smoke
-z_eff_ss_ice_smoke.c
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 41c9c818a..e1c2bc72d 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
@@ -18,7 +18,7 @@ u32 EffectSsIceSmoke_Init(PlayState* play, u32 index, EffectSs* this, void* init
void EffectSsIceSmoke_Update(PlayState* play, u32 index, EffectSs* this);
void EffectSsIceSmoke_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_Ice_Smoke_InitVars = {
+EffectSsInit Effect_Ss_Ice_Smoke_InitVars = {
EFFECT_SS_ICE_SMOKE,
EffectSsIceSmoke_Init,
};
diff --git a/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/z_eff_ss_ice_smoke.h b/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/z_eff_ss_ice_smoke.h
index bc6893311..e56678fb0 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/z_eff_ss_ice_smoke.h
+++ b/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/z_eff_ss_ice_smoke.h
@@ -10,6 +10,4 @@ typedef struct {
/* 0x24 */ s16 scale;
} EffectSsIceSmokeInitParams; // size = 0x28
-extern const EffectSsInit Effect_Ss_Ice_Smoke_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_K_Fire/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_K_Fire/overlay.cfg
deleted file mode 100644
index 0d9080c15..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_K_Fire/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_K_Fire
-z_eff_ss_k_fire.c
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 4aa209639..17d7edc1e 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
@@ -20,7 +20,7 @@ u32 EffectSsKFire_Init(PlayState* play, u32 index, EffectSs* this, void* initPar
void EffectSsKFire_Update(PlayState* play, u32 index, EffectSs* this);
void EffectSsKFire_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_K_Fire_InitVars = {
+EffectSsInit Effect_Ss_K_Fire_InitVars = {
EFFECT_SS_K_FIRE,
EffectSsKFire_Init,
};
diff --git a/src/overlays/effects/ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.h b/src/overlays/effects/ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.h
index 23ed053c3..3cb53de39 100644
--- a/src/overlays/effects/ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.h
+++ b/src/overlays/effects/ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.h
@@ -11,6 +11,4 @@ typedef struct {
/* 0x26 */ u8 type;
} EffectSsKFireInitParams; // size = 0x28
-extern const EffectSsInit Effect_Ss_K_Fire_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_Kakera/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Kakera/overlay.cfg
deleted file mode 100644
index 4a7f62d11..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_Kakera/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_Kakera
-z_eff_ss_kakera.c
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 a84b450c1..e424c0b44 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
@@ -28,7 +28,7 @@ void EffectSsKakera_Draw(PlayState* play, u32 index, EffectSs* this);
void EffectSsKakera_CheckForObject(EffectSs* this, PlayState* play);
-const EffectSsInit Effect_Ss_Kakera_InitVars = {
+EffectSsInit Effect_Ss_Kakera_InitVars = {
EFFECT_SS_KAKERA,
EffectSsKakera_Init,
};
diff --git a/src/overlays/effects/ovl_Effect_Ss_Kirakira/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Kirakira/overlay.cfg
deleted file mode 100644
index 02edf776c..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_Kirakira/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_Kirakira
-z_eff_ss_kirakira.c
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 97899ae68..540d9e505 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
@@ -29,7 +29,7 @@ void func_80977E6C(PlayState* play, u32 index, EffectSs* this);
void func_80977F28(PlayState* play, u32 index, EffectSs* this);
void EffectSsKirakira_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_Kirakira_InitVars = {
+EffectSsInit Effect_Ss_Kirakira_InitVars = {
EFFECT_SS_KIRAKIRA,
EffectSsKirakira_Init,
};
diff --git a/src/overlays/effects/ovl_Effect_Ss_Kirakira/z_eff_ss_kirakira.h b/src/overlays/effects/ovl_Effect_Ss_Kirakira/z_eff_ss_kirakira.h
index 66e73e0a5..e9513cc7a 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Kirakira/z_eff_ss_kirakira.h
+++ b/src/overlays/effects/ovl_Effect_Ss_Kirakira/z_eff_ss_kirakira.h
@@ -17,6 +17,4 @@ typedef struct {
/* 0x38 */ u8 updateMode;
} EffectSsKirakiraInitParams; // size = 0x3C
-extern const EffectSsInit Effect_Ss_Kirakira_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_Lightning/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Lightning/overlay.cfg
deleted file mode 100644
index b698e915f..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_Lightning/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_Lightning
-z_eff_ss_lightning.c
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 1f70b8064..9037b20f4 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
@@ -31,7 +31,7 @@ TexturePtr sLightningTextures[] = {
gEffLightning5Tex, gEffLightning6Tex, gEffLightning7Tex, gEffLightning8Tex,
};
-const EffectSsInit Effect_Ss_Lightning_InitVars = {
+EffectSsInit Effect_Ss_Lightning_InitVars = {
EFFECT_SS_LIGHTNING,
EffectSsLightning_Init,
};
diff --git a/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.h b/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.h
index 35ef380b9..07052e522 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.h
+++ b/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.h
@@ -13,6 +13,4 @@ typedef struct {
/* 0x1A */ s16 numBolts;
} EffectSsLightningInitParams; // size = 0x1C
-extern const EffectSsInit Effect_Ss_Lightning_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_Sbn/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Sbn/overlay.cfg
deleted file mode 100644
index c958b3df5..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_Sbn/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_Sbn
-z_eff_ss_sbn.c
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 d1a22473f..3402eb2b7 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
@@ -27,7 +27,7 @@ void EffectSsSbn_Update(PlayState* play, u32 index, EffectSs* this);
void EffectSsSbn_DrawSliding(PlayState* play, u32 index, EffectSs* this);
void EffectSsSbn_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_Sbn_InitVars = {
+EffectSsInit Effect_Ss_Sbn_InitVars = {
EFFECT_SS_SBN,
EffectSsSbn_Init,
};
@@ -111,9 +111,9 @@ u32 EffectSsSbn_Init(PlayState* play, u32 index, EffectSs* this, void* initParam
opposite = (SQ(angle) >= 1.0f) ? 0.0f : sqrtf(1.0f - SQ(angle));
if (((mtx.mf[0][0] * colPolyVec.x) + (mtx.mf[0][1] * colPolyVec.y) + (mtx.mf[0][2] * colPolyVec.z)) < 0.0f) {
- this->rRotAngle = Math_FAtan2F(angle, opposite);
+ this->rRotAngle = Math_Atan2S_XY(angle, opposite);
} else {
- this->rRotAngle = -Math_FAtan2F(angle, opposite);
+ this->rRotAngle = -Math_Atan2S_XY(angle, opposite);
}
}
diff --git a/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.h b/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.h
index 439ef88a0..9290d7948 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.h
+++ b/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.h
@@ -9,6 +9,4 @@ typedef struct {
/* 0x10 */ f32 scale;
} EffectSsSbnInitParams; // size = 0x14
-extern const EffectSsInit Effect_Ss_Sbn_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_Sibuki/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Sibuki/overlay.cfg
deleted file mode 100644
index 66dfae07c..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_Sibuki/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_Sibuki
-z_eff_ss_sibuki.c
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 4dbdc65a2..a9a190948 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
@@ -25,7 +25,7 @@ u32 EffectSsSibuki_Init(PlayState* play, u32 index, EffectSs* this, void* initPa
void EffectSsSibuki_Update(PlayState* play, u32 index, EffectSs* this);
void EffectSsSibuki_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_Sibuki_InitVars = {
+EffectSsInit Effect_Ss_Sibuki_InitVars = {
EFFECT_SS_SIBUKI,
EffectSsSibuki_Init,
};
diff --git a/src/overlays/effects/ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.h b/src/overlays/effects/ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.h
index 9efe7c77a..27e3780d2 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.h
+++ b/src/overlays/effects/ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.h
@@ -12,6 +12,4 @@ typedef struct {
/* 0x28 */ s16 scale;
} EffectSsSibukiInitParams; // size = 0x2C
-extern const EffectSsInit Effect_Ss_Sibuki_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/overlay.cfg
deleted file mode 100644
index 82cde4368..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_Solder_Srch_Ball
-z_eff_ss_solder_srch_ball.c
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 01224dd32..cd0ea0fad 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
@@ -15,7 +15,7 @@ u32 EffectSsSolderSrchBall_Init(PlayState* play, u32 index, EffectSs* this, void
void EffectSsSolderSrchBall_Update(PlayState* play, u32 index, EffectSs* this);
void EffectSsSolderSrchBall_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_Solder_Srch_Ball_InitVars = {
+EffectSsInit Effect_Ss_Solder_Srch_Ball_InitVars = {
EFFECT_SS_SOLDER_SRCH_BALL,
EffectSsSolderSrchBall_Init,
};
@@ -60,7 +60,7 @@ void EffectSsSolderSrchBall_Draw(PlayState* play, u32 index, EffectSs* this) {
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255);
gDPSetEnvColor(POLY_XLU_DISP++, 250, 180, 255, 255);
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
- Matrix_RotateZF(DEGF_TO_RADF(20.0f * play->state.frames), MTXMODE_APPLY);
+ Matrix_RotateZF(DEG_TO_RAD(20.0f * play->state.frames), MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gSunSparkleModelDL);
diff --git a/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.h b/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.h
index fb4fb4159..5c250a7af 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.h
+++ b/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.h
@@ -15,6 +15,4 @@ typedef struct {
/* 0x2C */ s16 flags;
} EffectSsSolderSrchBallInitParams; // size = 0x30
-extern const EffectSsInit Effect_Ss_Solder_Srch_Ball_InitVars;
-
#endif
diff --git a/src/overlays/effects/ovl_Effect_Ss_Stick/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Stick/overlay.cfg
deleted file mode 100644
index 5f691232a..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_Stick/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_Stick
-z_eff_ss_stick.c
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 5d546a78f..4f1aa5d91 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
@@ -16,7 +16,7 @@ u32 EffectSsStick_Init(PlayState* play, u32 index, EffectSs* this, void* initPar
void EffectSsStick_Update(PlayState* play, u32 index, EffectSs* this);
void EffectSsStick_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_Stick_InitVars = {
+EffectSsInit Effect_Ss_Stick_InitVars = {
EFFECT_SS_STICK,
EffectSsStick_Init,
};
@@ -52,7 +52,7 @@ void EffectSsStick_Draw(PlayState* play, u32 index, EffectSs* this) {
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
func_8012C28C(gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->rObjBankIndex].segment);
- gSPSegment(POLY_OPA_DISP++, 0x0C, D_801C0850);
+ gSPSegment(POLY_OPA_DISP++, 0x0C, gCullBackDList);
gSPDisplayList(POLY_OPA_DISP++, gDekuStickDL);
CLOSE_DISPS(gfxCtx);
diff --git a/src/overlays/effects/ovl_Effect_Ss_Stone1/overlay.cfg b/src/overlays/effects/ovl_Effect_Ss_Stone1/overlay.cfg
deleted file mode 100644
index a6706c014..000000000
--- a/src/overlays/effects/ovl_Effect_Ss_Stone1/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_Effect_Ss_Stone1
-z_eff_ss_stone1.c
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 ad61166d3..6e6b48156 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
@@ -15,7 +15,7 @@ u32 EffectSsStone1_Init(PlayState* play, u32 index, EffectSs* this, void* initPa
void EffectSsStone1_Update(PlayState* play, u32 index, EffectSs* this);
void EffectSsStone1_Draw(PlayState* play, u32 index, EffectSs* this);
-const EffectSsInit Effect_Ss_Stone1_InitVars = {
+EffectSsInit Effect_Ss_Stone1_InitVars = {
EFFECT_SS_STONE1,
EffectSsStone1_Init,
};
@@ -77,6 +77,6 @@ void EffectSsStone1_Draw(PlayState* play, u32 index, EffectSs* this) {
void EffectSsStone1_Update(PlayState* play, u32 index, EffectSs* this) {
if ((this->life == 6) && (this->rReg0 != 0)) {
- iREG(50) = 0;
+ R_TRANS_FADE_FLASH_ALPHA_STEP = 0;
}
}
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 365585a8e..b50868b81 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
@@ -8,6 +8,4 @@ typedef struct {
/* 0x0C */ s32 reg0;
} EffectSsStone1InitParams; // size = 0x10
-extern const EffectSsInit Effect_Ss_Stone1_InitVars;
-
#endif
diff --git a/src/overlays/fbdemos/ovl_fbdemo_triforce/overlay.cfg b/src/overlays/fbdemos/ovl_fbdemo_triforce/overlay.cfg
deleted file mode 100644
index d5f678c11..000000000
--- a/src/overlays/fbdemos/ovl_fbdemo_triforce/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_fbdemo_triforce
-z_fbdemo_triforce.c
diff --git a/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.c b/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.c
index 00e7cfabd..c4eb826c7 100644
--- a/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.c
+++ b/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.c
@@ -4,6 +4,7 @@
* Description:
*/
+#include "global.h"
#include "z_fbdemo_triforce.h"
#include "assets/objects/object_fbdemo_triforce/ovl_fbdemo_triforce.c"
@@ -30,8 +31,11 @@ void TransitionTriforce_Start(void* thisx) {
case STATE_SPIRAL_IN_FAST:
this->transPos = 1.0f;
return;
+
+ default:
+ this->transPos = 0.03f;
+ return;
}
- this->transPos = 0.03f;
}
void* TransitionTriforce_Init(void* thisx) {
@@ -43,7 +47,7 @@ void* TransitionTriforce_Init(void* thisx) {
this->transPos = 1.0f;
this->state = STATE_SPIRAL_IN_FAST;
this->step = 0.015f;
- this->fadeType = TYPE_TRANSPARENT_TRIFORCE;
+ this->type = TRANS_INSTANCE_TYPE_FILL_OUT;
return this;
}
@@ -76,7 +80,7 @@ void TransitionTriforce_SetColor(void* thisx, u32 color) {
void TransitionTriforce_SetType(void* thisx, s32 type) {
TransitionTriforce* this = (TransitionTriforce*)thisx;
- this->fadeType = type;
+ this->type = type;
}
void TransitionTriforce_SetState(void* thisx, s32 state) {
@@ -98,37 +102,43 @@ void TransitionTriforce_Draw(void* thisx, Gfx** gfxP) {
guRotate(&modelView[1], rotation, 0.0f, 0.0f, 1.0f);
guTranslate(&modelView[2], 0.0f, 0.0f, 0.0f);
gDPPipeSync(gfx++);
- gSPDisplayList(gfx++, sTriforceWipeDL);
+ gSPDisplayList(gfx++, sTransTriforceDL);
gDPSetColor(gfx++, G_SETPRIMCOLOR, this->color.rgba);
gDPSetCombineMode(gfx++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
gSPMatrix(gfx++, &this->projection, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
gSPMatrix(gfx++, &modelView[0], G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPMatrix(gfx++, &modelView[1], G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW);
gSPMatrix(gfx++, &modelView[2], G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW);
- gSPVertex(gfx++, &sTriforceWipeVtx, ARRAY_COUNT(sTriforceWipeVtx), 0);
+ gSPVertex(gfx++, &sTransTriforceVtx, ARRAY_COUNT(sTransTriforceVtx), 0);
if (!TransitionTriforce_IsDone(this)) {
- switch (this->fadeType) {
- case TYPE_TRANSPARENT_TRIFORCE:
+ switch (this->type) {
+ case TRANS_INSTANCE_TYPE_FILL_OUT:
gSP2Triangles(gfx++, 0, 4, 5, 0, 4, 1, 3, 0);
gSP1Triangle(gfx++, 5, 3, 2, 0);
break;
- case TYPE_FILLED_TRIFORCE:
+ case TRANS_INSTANCE_TYPE_FILL_IN:
gSP2Triangles(gfx++, 3, 4, 5, 0, 0, 2, 6, 0);
gSP2Triangles(gfx++, 0, 6, 7, 0, 1, 0, 7, 0);
gSP2Triangles(gfx++, 1, 7, 8, 0, 1, 8, 9, 0);
gSP2Triangles(gfx++, 1, 9, 2, 0, 2, 9, 6, 0);
break;
+
+ default:
+ break;
}
} else {
- switch (this->fadeType) {
- case TYPE_TRANSPARENT_TRIFORCE:
+ switch (this->type) {
+ case TRANS_INSTANCE_TYPE_FILL_OUT:
break;
- case TYPE_FILLED_TRIFORCE:
+ case TRANS_INSTANCE_TYPE_FILL_IN:
gSP1Quadrangle(gfx++, 6, 7, 8, 9, 0);
break;
+
+ default:
+ break;
}
}
gDPPipeSync(gfx++);
@@ -142,6 +152,7 @@ s32 TransitionTriforce_IsDone(void* thisx) {
return this->transPos <= 0.03f;
} else if ((this->state == STATE_SPIRAL_OUT_SLOW) || (this->state == STATE_SPIRAL_OUT_FAST)) {
return (this->transPos >= 1.0f);
+ } else {
+ return false;
}
- return false;
}
diff --git a/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.h b/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.h
index 06d807a08..1bcfe5c3d 100644
--- a/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.h
+++ b/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.h
@@ -1,7 +1,8 @@
#ifndef Z_FBDEMO_TRIFORCE_H
#define Z_FBDEMO_TRIFORCE_H
-#include "global.h"
+#include "ultra64.h"
+#include "color.h"
typedef enum {
/* 0 */ STATE_NONE,
@@ -9,20 +10,14 @@ typedef enum {
/* 2 */ STATE_SPIRAL_IN_FAST,
/* 3 */ STATE_SPIRAL_OUT_SLOW,
/* 4 */ STATE_SPIRAL_OUT_FAST
-} FbTriforceState;
-
-typedef enum {
- /* 0 */ TYPE_NONE,
- /* 1 */ TYPE_TRANSPARENT_TRIFORCE,
- /* 2 */ TYPE_FILLED_TRIFORCE
-} TriforceFadeType;
+} TransitionTriforceState;
typedef struct {
/* 0x000 */ Color_RGBA8_u32 color;
/* 0x004 */ f32 transPos;
/* 0x008 */ f32 step;
/* 0x00C */ s32 state;
- /* 0x010 */ s32 fadeType;
+ /* 0x010 */ s32 type;
/* 0x018 */ Mtx projection;
/* 0x058 */ s32 frame;
/* 0x060 */ Mtx modelView[2][3];
diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe1/overlay.cfg b/src/overlays/fbdemos/ovl_fbdemo_wipe1/overlay.cfg
deleted file mode 100644
index 5b3efc6ad..000000000
--- a/src/overlays/fbdemos/ovl_fbdemo_wipe1/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_fbdemo_wipe1
-z_fbdemo_wipe1.c
diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.c b/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.c
index ed12d400e..1ce5f0d59 100644
--- a/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.c
+++ b/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.c
@@ -4,6 +4,7 @@
* Description:
*/
+#include "global.h"
#include "z_fbdemo_wipe1.h"
void* TransitionWipe1_Init(void* thisx);
diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.h b/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.h
index 971940bb2..39f881b39 100644
--- a/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.h
+++ b/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.h
@@ -1,10 +1,11 @@
#ifndef Z_FBDEMO_WIPE1_H
#define Z_FBDEMO_WIPE1_H
-#include "global.h"
+#include "ultra64.h"
+#include "color.h"
typedef struct {
- /* 0x0000 */ char unk_0[0x218];
+ /* 0x000 */ char unk_0[0x218];
} TransitionWipe1; // size = 0x218
#endif
diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe3/overlay.cfg b/src/overlays/fbdemos/ovl_fbdemo_wipe3/overlay.cfg
deleted file mode 100644
index 73258114b..000000000
--- a/src/overlays/fbdemos/ovl_fbdemo_wipe3/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_fbdemo_wipe3
-z_fbdemo_wipe3.c
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 c33f3c8c7..759e1511c 100644
--- a/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c
+++ b/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c
@@ -4,6 +4,7 @@
* Description:
*/
+#include "global.h"
#include "z_fbdemo_wipe3.h"
void* TransitionWipe3_Init(void* thisx);
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 8fed0dcfe..b023ecb8b 100644
--- a/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h
+++ b/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h
@@ -1,10 +1,11 @@
#ifndef Z_FBDEMO_WIPE3_H
#define Z_FBDEMO_WIPE3_H
-#include "global.h"
+#include "ultra64.h"
+#include "color.h"
typedef struct {
- /* 0x0000 */ char unk_0[0x120];
+ /* 0x000 */ char unk_0[0x120];
} TransitionWipe3; // size = 0x120
#endif
diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe4/overlay.cfg b/src/overlays/fbdemos/ovl_fbdemo_wipe4/overlay.cfg
deleted file mode 100644
index e18ed9858..000000000
--- a/src/overlays/fbdemos/ovl_fbdemo_wipe4/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_fbdemo_wipe4
-z_fbdemo_wipe4.c
diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe4/z_fbdemo_wipe4.c b/src/overlays/fbdemos/ovl_fbdemo_wipe4/z_fbdemo_wipe4.c
index e91d8ab5e..1acb8c07a 100644
--- a/src/overlays/fbdemos/ovl_fbdemo_wipe4/z_fbdemo_wipe4.c
+++ b/src/overlays/fbdemos/ovl_fbdemo_wipe4/z_fbdemo_wipe4.c
@@ -4,6 +4,7 @@
* Description:
*/
+#include "global.h"
#include "z_fbdemo_wipe4.h"
void* TransitionWipe4_Init(void* thisx);
diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe4/z_fbdemo_wipe4.h b/src/overlays/fbdemos/ovl_fbdemo_wipe4/z_fbdemo_wipe4.h
index 8a677c2a4..b0aec44be 100644
--- a/src/overlays/fbdemos/ovl_fbdemo_wipe4/z_fbdemo_wipe4.h
+++ b/src/overlays/fbdemos/ovl_fbdemo_wipe4/z_fbdemo_wipe4.h
@@ -1,10 +1,11 @@
#ifndef Z_FBDEMO_WIPE4_H
#define Z_FBDEMO_WIPE4_H
-#include "global.h"
+#include "ultra64.h"
+#include "color.h"
typedef struct {
- /* 0x0000 */ char unk_0[0x28];
+ /* 0x00 */ char unk_0[0x28];
} TransitionWipe4; // size = 0x28
#endif
diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe5/overlay.cfg b/src/overlays/fbdemos/ovl_fbdemo_wipe5/overlay.cfg
deleted file mode 100644
index 297aa770c..000000000
--- a/src/overlays/fbdemos/ovl_fbdemo_wipe5/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_fbdemo_wipe5
-z_fbdemo_wipe5.c
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 0ed80c066..48c8bdf58 100644
--- a/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c
+++ b/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c
@@ -4,8 +4,11 @@
* Description:
*/
+#include "global.h"
#include "z_fbdemo_wipe5.h"
+#define THIS ((TransitionWipe5*)thisx)
+
void* TransitionWipe5_Init(void* thisx);
void TransitionWipe5_Destroy(void* thisx);
void TransitionWipe5_Update(void* thisx, s32 updateRate);
@@ -16,37 +19,129 @@ void TransitionWipe5_SetColor(void* thisx, u32 color);
void TransitionWipe5_SetEnvColor(void* thisx, u32 color);
s32 TransitionWipe5_IsDone(void* thisx);
-#if 0
TransitionInit TransitionWipe5_InitVars = {
- TransitionWipe5_Init,
- TransitionWipe5_Destroy,
- TransitionWipe5_Update,
- TransitionWipe5_Draw,
- TransitionWipe5_Start,
- TransitionWipe5_SetType,
- TransitionWipe5_SetColor,
- TransitionWipe5_SetEnvColor,
- TransitionWipe5_IsDone,
+ TransitionWipe5_Init, TransitionWipe5_Destroy, TransitionWipe5_Update,
+ TransitionWipe5_Draw, TransitionWipe5_Start, TransitionWipe5_SetType,
+ TransitionWipe5_SetColor, TransitionWipe5_SetEnvColor, TransitionWipe5_IsDone,
};
-#endif
+void TransitionWipe5_Start(void* thisx) {
+ TransitionWipe5* this = THIS;
-extern u16 D_0F000000[];
+ this->isDone = false;
+ switch (this->unk_12) {
+ case 0:
+ this->unk_08 = 0.02f;
+ break;
+ case 1:
+ this->unk_08 = 0.05f;
+ break;
+ default:
+ this->unk_08 = 0.2f;
+ break;
+ }
+ switch (this->unk_11) {
+ case 0:
+ this->primColor.rgba = RGBA8(0, 0, 0, 255);
+ break;
+ case 1:
+ this->primColor.rgba = RGBA8(160, 160, 160, 255);
+ break;
+ default:
+ this->primColor.rgba = RGBA8(160, 160, 160, 255);
+ break;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe5/TransitionWipe5_Start.s")
+void* TransitionWipe5_Init(void* thisx) {
+ TransitionWipe5* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe5/TransitionWipe5_Init.s")
+ bzero(this, sizeof(TransitionWipe5));
+ return this;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe5/TransitionWipe5_Destroy.s")
+void TransitionWipe5_Destroy(void* thisx) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe5/TransitionWipe5_Update.s")
+void TransitionWipe5_Update(void* thisx, s32 updateRate) {
+ TransitionWipe5* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe5/TransitionWipe5_Draw.s")
+ if (this->unk_10 == 0) {
+ this->isDone = true;
+ } else {
+ this->unk_0C += (this->unk_08 * 3.0f) / updateRate;
+ if (this->unk_0C >= 1.0f) {
+ this->unk_0C = 1.0f;
+ this->isDone = true;
+ }
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe5/TransitionWipe5_IsDone.s")
+void TransitionWipe5_Draw(void* thisx, Gfx** gfxP) {
+ Gfx* gfx = *gfxP;
+ s32 width = gScreenWidth;
+ s32 height = gScreenHeight;
+ void* sp50 = D_801FBB90;
+ TransitionWipe5* this = THIS;
+ s32 alpha = (1.0f - this->unk_0C) * 255.0f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe5/TransitionWipe5_SetType.s")
+ gDPPipeSync(gfx++);
+ gSPLoadUcodeL(gfx++, gspS2DEX2_fifo);
+ if (this->unk_10 == 0) {
+ gDPSetOtherMode(gfx++,
+ 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);
+ } else {
+ if (alpha == 255) {
+ gDPSetOtherMode(gfx++,
+ G_AD_DISABLE | G_CD_DISABLE | 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_NONE | G_ZS_PRIM | G_RM_OPA_SURF | G_RM_OPA_SURF2);
+ } else {
+ gDPSetOtherMode(gfx++,
+ G_AD_NOISE | G_CD_NOISE | 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_NONE | G_ZS_PRIM | G_RM_CLD_SURF | G_RM_CLD_SURF2);
+ }
+ 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);
+ }
+ gDPPipeSync(gfx++);
+ gSPLoadUcode(gfx++, SysUcode_GetUCode(), SysUcode_GetUCodeData());
+ *gfxP = gfx;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe5/TransitionWipe5_SetColor.s")
+s32 TransitionWipe5_IsDone(void* thisx) {
+ TransitionWipe5* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe5/TransitionWipe5_SetEnvColor.s")
+ return this->isDone;
+}
+
+void TransitionWipe5_SetType(void* thisx, s32 type) {
+ TransitionWipe5* this = THIS;
+
+ if (type & 0x80) {
+ this->unk_11 = 0;
+ this->unk_12 = type & 1;
+ } else if (type == TRANS_INSTANCE_TYPE_FILL_OUT) {
+ this->unk_10 = 1;
+ } else {
+ this->unk_10 = 0;
+ }
+}
+
+void TransitionWipe5_SetColor(void* thisx, u32 color) {
+ TransitionWipe5* this = THIS;
+
+ this->primColor.rgba = color;
+}
+
+void TransitionWipe5_SetEnvColor(void* thisx, u32 color) {
+ TransitionWipe5* this = THIS;
+
+ this->envColor.rgba = color;
+}
diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.h b/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.h
index d5f882dec..c40c4450a 100644
--- a/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.h
+++ b/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.h
@@ -1,10 +1,18 @@
#ifndef Z_FBDEMO_WIPE5_H
#define Z_FBDEMO_WIPE5_H
-#include "global.h"
+#include "ultra64.h"
+#include "color.h"
typedef struct {
- /* 0x0000 */ char unk_0[0x14];
+ /* 0x00 */ Color_RGBA8_u32 primColor;
+ /* 0x04 */ Color_RGBA8_u32 envColor;
+ /* 0x08 */ f32 unk_08;
+ /* 0x0C */ f32 unk_0C;
+ /* 0x10 */ u8 unk_10;
+ /* 0x11 */ u8 unk_11;
+ /* 0x12 */ u8 unk_12;
+ /* 0x13 */ u8 isDone;
} TransitionWipe5; // size = 0x14
#endif
diff --git a/src/overlays/gamestates/ovl_daytelop/overlay.cfg b/src/overlays/gamestates/ovl_daytelop/overlay.cfg
deleted file mode 100644
index 3766a9b41..000000000
--- a/src/overlays/gamestates/ovl_daytelop/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_daytelop
-z_daytelop.c
diff --git a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c
index 201030862..845baa3cb 100644
--- a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c
+++ b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c
@@ -73,7 +73,7 @@ void DayTelop_Update(DayTelopState* this, GameState* thisx) {
this->transitionCountdown--;
if (this->transitionCountdown == 0) {
if (gSaveContext.save.day < 9) {
- gSaveContext.gameMode = 0;
+ gSaveContext.gameMode = GAMEMODE_NORMAL;
} else {
gSaveContext.nextCutsceneIndex = 0xFFF6;
gSaveContext.save.day = 1;
@@ -213,11 +213,11 @@ void DayTelop_Noop(DayTelopState* this) {
void DayTelop_LoadGraphics(DayTelopState* this) {
size_t segmentSize = SEGMENT_ROM_SIZE(daytelop_static);
- this->daytelopStaticFile = THA_AllocEndAlign16(&this->state.heap, segmentSize);
+ this->daytelopStaticFile = THA_AllocTailAlign16(&this->state.heap, segmentSize);
DmaMgr_SendRequest0(this->daytelopStaticFile, SEGMENT_ROM_START(daytelop_static), segmentSize);
segmentSize = SEGMENT_ROM_SIZE(icon_item_gameover_static);
- this->gameoverStaticFile = THA_AllocEndAlign16(&this->state.heap, segmentSize);
+ this->gameoverStaticFile = THA_AllocTailAlign16(&this->state.heap, segmentSize);
DmaMgr_SendRequest0(this->gameoverStaticFile, SEGMENT_ROM_START(icon_item_gameover_static), segmentSize);
}
diff --git a/src/overlays/gamestates/ovl_file_choose/overlay.cfg b/src/overlays/gamestates/ovl_file_choose/overlay.cfg
deleted file mode 100644
index b18724161..000000000
--- a/src/overlays/gamestates/ovl_file_choose/overlay.cfg
+++ /dev/null
@@ -1,4 +0,0 @@
-ovl_file_choose
-z_file_nameset_NES.c
-z_file_choose_80807940.c
-z_file_choose_NES.c
diff --git a/src/overlays/gamestates/ovl_opening/overlay.cfg b/src/overlays/gamestates/ovl_opening/overlay.cfg
deleted file mode 100644
index 6366c3afd..000000000
--- a/src/overlays/gamestates/ovl_opening/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_opening
-z_opening.c
diff --git a/src/overlays/gamestates/ovl_opening/z_opening.c b/src/overlays/gamestates/ovl_opening/z_opening.c
index fc5d05be2..9697b111f 100644
--- a/src/overlays/gamestates/ovl_opening/z_opening.c
+++ b/src/overlays/gamestates/ovl_opening/z_opening.c
@@ -12,13 +12,13 @@ void TitleSetup_SetupTitleScreen(TitleSetupState* this) {
static s32 sOpeningEntrances[] = { ENTRANCE(CUTSCENE, 0), ENTRANCE(CUTSCENE, 1) };
static s32 sOpeningCutscenes[] = { 0xFFFA, 0xFFFA };
- gSaveContext.eventInf[1] &= (u8)~0x80;
- gSaveContext.gameMode = 1;
+ CLEAR_EVENTINF(EVENTINF_17);
+ gSaveContext.gameMode = GAMEMODE_TITLE_SCREEN;
Sram_InitNewSave();
- gSaveContext.save.entrance = sOpeningEntrances[D_801BB12C];
- gSaveContext.nextCutsceneIndex = gSaveContext.save.cutscene = sOpeningCutscenes[D_801BB12C];
+ gSaveContext.save.entrance = sOpeningEntrances[gOpeningEntranceIndex];
+ gSaveContext.nextCutsceneIndex = gSaveContext.save.cutsceneIndex = sOpeningCutscenes[gOpeningEntranceIndex];
gSaveContext.sceneLayer = 0;
gSaveContext.save.time = CLOCK_TIME(8, 0);
diff --git a/src/overlays/gamestates/ovl_select/overlay.cfg b/src/overlays/gamestates/ovl_select/overlay.cfg
deleted file mode 100644
index 5250bd7fb..000000000
--- a/src/overlays/gamestates/ovl_select/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_select
-z_select.c
diff --git a/src/overlays/gamestates/ovl_select/z_select.c b/src/overlays/gamestates/ovl_select/z_select.c
index 2e8bbb802..08bf65262 100644
--- a/src/overlays/gamestates/ovl_select/z_select.c
+++ b/src/overlays/gamestates/ovl_select/z_select.c
@@ -30,12 +30,12 @@ void MapSelect_LoadGame(MapSelectState* this, u32 entrance, s32 spawn) {
gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
gSaveContext.hudVisibilityTimer = 0;
- Audio_QueueSeqCmd(NA_BGM_STOP);
+ SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0);
gSaveContext.save.entrance = entrance;
if (spawn != 0) {
gSaveContext.save.entrance =
- Entrance_Create((s32)gSaveContext.save.entrance >> 9, spawn, gSaveContext.save.entrance & 0xF);
+ Entrance_Create(gSaveContext.save.entrance >> 9, spawn, gSaveContext.save.entrance & 0xF);
}
if (gSaveContext.save.entrance == ENTRANCE(CLOCK_TOWER_INTERIOR, 0)) {
gSaveContext.save.day = 0;
@@ -517,7 +517,7 @@ void MapSelect_UpdateMenu(MapSelectState* this) {
gSaveContext.timerStopTimes[i] = SECONDS_TO_TIMER(0);
gSaveContext.timerPausedOsTimes[i] = 0;
}
- gSaveContext.minigameState = 0;
+ gSaveContext.minigameStatus = MINIGAME_STATUS_INACTIVE;
if (this->scenes[this->currentScene].loadFunc != NULL) {
this->scenes[this->currentScene].loadFunc(this, this->scenes[this->currentScene].entrance, this->opt);
@@ -533,69 +533,69 @@ void MapSelect_UpdateMenu(MapSelectState* this) {
}
if (CHECK_BTN_ALL(controller1->press.button, BTN_Z)) {
- if (gSaveContext.save.cutscene == 0x8000) {
- gSaveContext.save.cutscene = 0;
- } else if (gSaveContext.save.cutscene == 0) {
- gSaveContext.save.cutscene = 0x8800;
- } else if (gSaveContext.save.cutscene == 0x8800) {
- gSaveContext.save.cutscene = 0xFFF0;
- } else if (gSaveContext.save.cutscene == 0xFFF0) {
- gSaveContext.save.cutscene = 0xFFF1;
- } else if (gSaveContext.save.cutscene == 0xFFF1) {
- gSaveContext.save.cutscene = 0xFFF2;
- } else if (gSaveContext.save.cutscene == 0xFFF2) {
- gSaveContext.save.cutscene = 0xFFF3;
- } else if (gSaveContext.save.cutscene == 0xFFF3) {
- gSaveContext.save.cutscene = 0xFFF4;
- } else if (gSaveContext.save.cutscene == 0xFFF4) {
- gSaveContext.save.cutscene = 0xFFF5;
- } else if (gSaveContext.save.cutscene == 0xFFF5) {
- gSaveContext.save.cutscene = 0xFFF6;
- } else if (gSaveContext.save.cutscene == 0xFFF6) {
- gSaveContext.save.cutscene = 0xFFF7;
- } else if (gSaveContext.save.cutscene == 0xFFF7) {
- gSaveContext.save.cutscene = 0xFFF8;
- } else if (gSaveContext.save.cutscene == 0xFFF8) {
- gSaveContext.save.cutscene = 0xFFF9;
- } else if (gSaveContext.save.cutscene == 0xFFF9) {
- gSaveContext.save.cutscene = 0xFFFA;
- } else if (gSaveContext.save.cutscene == 0xFFFA) {
- gSaveContext.save.cutscene = 0x8000;
+ if (gSaveContext.save.cutsceneIndex == 0x8000) {
+ gSaveContext.save.cutsceneIndex = 0;
+ } else if (gSaveContext.save.cutsceneIndex == 0) {
+ gSaveContext.save.cutsceneIndex = 0x8800;
+ } else if (gSaveContext.save.cutsceneIndex == 0x8800) {
+ gSaveContext.save.cutsceneIndex = 0xFFF0;
+ } else if (gSaveContext.save.cutsceneIndex == 0xFFF0) {
+ gSaveContext.save.cutsceneIndex = 0xFFF1;
+ } else if (gSaveContext.save.cutsceneIndex == 0xFFF1) {
+ gSaveContext.save.cutsceneIndex = 0xFFF2;
+ } else if (gSaveContext.save.cutsceneIndex == 0xFFF2) {
+ gSaveContext.save.cutsceneIndex = 0xFFF3;
+ } else if (gSaveContext.save.cutsceneIndex == 0xFFF3) {
+ gSaveContext.save.cutsceneIndex = 0xFFF4;
+ } else if (gSaveContext.save.cutsceneIndex == 0xFFF4) {
+ gSaveContext.save.cutsceneIndex = 0xFFF5;
+ } else if (gSaveContext.save.cutsceneIndex == 0xFFF5) {
+ gSaveContext.save.cutsceneIndex = 0xFFF6;
+ } else if (gSaveContext.save.cutsceneIndex == 0xFFF6) {
+ gSaveContext.save.cutsceneIndex = 0xFFF7;
+ } else if (gSaveContext.save.cutsceneIndex == 0xFFF7) {
+ gSaveContext.save.cutsceneIndex = 0xFFF8;
+ } else if (gSaveContext.save.cutsceneIndex == 0xFFF8) {
+ gSaveContext.save.cutsceneIndex = 0xFFF9;
+ } else if (gSaveContext.save.cutsceneIndex == 0xFFF9) {
+ gSaveContext.save.cutsceneIndex = 0xFFFA;
+ } else if (gSaveContext.save.cutsceneIndex == 0xFFFA) {
+ gSaveContext.save.cutsceneIndex = 0x8000;
}
} else if (CHECK_BTN_ALL(controller1->press.button, BTN_R)) {
- if (gSaveContext.save.cutscene == 0x8000) {
- gSaveContext.save.cutscene = 0xFFFA;
- } else if (gSaveContext.save.cutscene == 0) {
- gSaveContext.save.cutscene = 0x8000;
- } else if (gSaveContext.save.cutscene == 0x8800) {
- gSaveContext.save.cutscene = 0;
- } else if (gSaveContext.save.cutscene == 0xFFF0) {
- gSaveContext.save.cutscene = 0x8800;
- } else if (gSaveContext.save.cutscene == 0xFFF1) {
- gSaveContext.save.cutscene = 0xFFF0;
- } else if (gSaveContext.save.cutscene == 0xFFF2) {
- gSaveContext.save.cutscene = 0xFFF1;
- } else if (gSaveContext.save.cutscene == 0xFFF3) {
- gSaveContext.save.cutscene = 0xFFF2;
- } else if (gSaveContext.save.cutscene == 0xFFF4) {
- gSaveContext.save.cutscene = 0xFFF3;
- } else if (gSaveContext.save.cutscene == 0xFFF5) {
- gSaveContext.save.cutscene = 0xFFF4;
- } else if (gSaveContext.save.cutscene == 0xFFF6) {
- gSaveContext.save.cutscene = 0xFFF5;
- } else if (gSaveContext.save.cutscene == 0xFFF7) {
- gSaveContext.save.cutscene = 0xFFF6;
- } else if (gSaveContext.save.cutscene == 0xFFF8) {
- gSaveContext.save.cutscene = 0xFFF7;
- } else if (gSaveContext.save.cutscene == 0xFFF9) {
- gSaveContext.save.cutscene = 0xFFF8;
- } else if (gSaveContext.save.cutscene == 0xFFFA) {
- gSaveContext.save.cutscene = 0xFFF9;
+ if (gSaveContext.save.cutsceneIndex == 0x8000) {
+ gSaveContext.save.cutsceneIndex = 0xFFFA;
+ } else if (gSaveContext.save.cutsceneIndex == 0) {
+ gSaveContext.save.cutsceneIndex = 0x8000;
+ } else if (gSaveContext.save.cutsceneIndex == 0x8800) {
+ gSaveContext.save.cutsceneIndex = 0;
+ } else if (gSaveContext.save.cutsceneIndex == 0xFFF0) {
+ gSaveContext.save.cutsceneIndex = 0x8800;
+ } else if (gSaveContext.save.cutsceneIndex == 0xFFF1) {
+ gSaveContext.save.cutsceneIndex = 0xFFF0;
+ } else if (gSaveContext.save.cutsceneIndex == 0xFFF2) {
+ gSaveContext.save.cutsceneIndex = 0xFFF1;
+ } else if (gSaveContext.save.cutsceneIndex == 0xFFF3) {
+ gSaveContext.save.cutsceneIndex = 0xFFF2;
+ } else if (gSaveContext.save.cutsceneIndex == 0xFFF4) {
+ gSaveContext.save.cutsceneIndex = 0xFFF3;
+ } else if (gSaveContext.save.cutsceneIndex == 0xFFF5) {
+ gSaveContext.save.cutsceneIndex = 0xFFF4;
+ } else if (gSaveContext.save.cutsceneIndex == 0xFFF6) {
+ gSaveContext.save.cutsceneIndex = 0xFFF5;
+ } else if (gSaveContext.save.cutsceneIndex == 0xFFF7) {
+ gSaveContext.save.cutsceneIndex = 0xFFF6;
+ } else if (gSaveContext.save.cutsceneIndex == 0xFFF8) {
+ gSaveContext.save.cutsceneIndex = 0xFFF7;
+ } else if (gSaveContext.save.cutsceneIndex == 0xFFF9) {
+ gSaveContext.save.cutsceneIndex = 0xFFF8;
+ } else if (gSaveContext.save.cutsceneIndex == 0xFFFA) {
+ gSaveContext.save.cutsceneIndex = 0xFFF9;
}
}
gSaveContext.save.isNight = false;
- if (gSaveContext.save.cutscene == 0x8800) {
+ if (gSaveContext.save.cutsceneIndex == 0x8800) {
gSaveContext.save.isNight = true;
}
@@ -994,8 +994,8 @@ void MapSelect_DrawMenu(MapSelectState* this) {
GfxPrint_Open(printer, POLY_OPA_DISP);
MapSelect_PrintMenu(this, printer);
- MapSelect_PrintAgeSetting(this, printer, ((void)0, gSaveContext.save.playerForm));
- MapSelect_PrintCutsceneSetting(this, printer, ((void)0, gSaveContext.save.cutscene));
+ MapSelect_PrintAgeSetting(this, printer, GET_PLAYER_FORM);
+ MapSelect_PrintCutsceneSetting(this, printer, ((void)0, gSaveContext.save.cutsceneIndex));
POLY_OPA_DISP = GfxPrint_Close(printer);
GfxPrint_Destroy(printer);
@@ -1085,7 +1085,7 @@ void MapSelect_Init(GameState* thisx) {
}
Game_SetFramerateDivisor(&this->state, 1);
- gSaveContext.save.cutscene = 0;
+ gSaveContext.save.cutsceneIndex = 0;
gSaveContext.save.playerForm = PLAYER_FORM_HUMAN;
gSaveContext.save.linkAge = 0;
}
diff --git a/src/overlays/gamestates/ovl_title/overlay.cfg b/src/overlays/gamestates/ovl_title/overlay.cfg
deleted file mode 100644
index 11343031f..000000000
--- a/src/overlays/gamestates/ovl_title/overlay.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-ovl_title
-z_title.c
diff --git a/src/overlays/gamestates/ovl_title/z_title.c b/src/overlays/gamestates/ovl_title/z_title.c
index 2b23bf565..01e29668e 100644
--- a/src/overlays/gamestates/ovl_title/z_title.c
+++ b/src/overlays/gamestates/ovl_title/z_title.c
@@ -111,7 +111,7 @@ void ConsoleLogo_Draw(GameState* thisx) {
1 << 10, 1 << 10);
}
- func_800FC444(this->state.gfxCtx, 0, 0, 0, this->coverAlpha, 2);
+ Environment_FillScreen(this->state.gfxCtx, 0, 0, 0, this->coverAlpha, 2);
sTitleRotation += 300;
@@ -132,7 +132,7 @@ void ConsoleLogo_Main(GameState* thisx) {
if (this->exit) {
gSaveContext.seqId = (u8)NA_BGM_DISABLED;
gSaveContext.ambienceId = AMBIENCE_ID_DISABLED;
- gSaveContext.gameMode = 1;
+ gSaveContext.gameMode = GAMEMODE_TITLE_SCREEN;
STOP_GAMESTATE(&this->state);
SET_NEXT_GAMESTATE(&this->state, TitleSetup_Init, sizeof(TitleSetupState));
@@ -153,7 +153,7 @@ void ConsoleLogo_Init(GameState* thisx) {
ConsoleLogoState* this = (ConsoleLogoState*)thisx;
uintptr_t segmentSize = SEGMENT_ROM_SIZE(nintendo_rogo_static);
- this->staticSegment = THA_AllocEndAlign16(&this->state.heap, segmentSize);
+ this->staticSegment = THA_AllocTailAlign16(&this->state.heap, segmentSize);
DmaMgr_SendRequest0(this->staticSegment, SEGMENT_ROM_START(nintendo_rogo_static), segmentSize);
Game_SetFramerateDivisor(&this->state, 1);
diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/overlay.cfg b/src/overlays/kaleido_scope/ovl_kaleido_scope/overlay.cfg
deleted file mode 100644
index c35d94518..000000000
--- a/src/overlays/kaleido_scope/ovl_kaleido_scope/overlay.cfg
+++ /dev/null
@@ -1,7 +0,0 @@
-ovl_kaleido_scope
-z_kaleido_collect.c
-z_kaleido_debug.c
-z_kaleido_item.c
-z_kaleido_map.c
-z_kaleido_mask.c
-z_kaleido_scope_NES.c
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 316ad3355..fe72ee840 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
@@ -1,103 +1,1009 @@
/*
* File: z_kaleido_collect.c
* Overlay: ovl_kaleido_scope
- * Description:
+ * Description: Pause Menu - Quest Status Page
*/
#include "z_kaleido_scope.h"
+#include "interface/parameter_static/parameter_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;
+s32 KaleidoScope_UpdateQuestStatusPoint(PauseContext* pauseCtx, s16 point);
-s16 D_8082AED0[] = { 120, 60, 2, 80 };
+extern TexturePtr D_08061000; // gBombersNotebookIconTex
+extern TexturePtr D_08062000; // gSongNoteIconTex
-s16 D_8082AED8[] = { 20, 4, 20, 10 };
-
-s32 D_8082AEE0 = 0;
-
-s32 D_8082AEE4[] = { 0, 0, 0 };
-
-s32 D_8082AEF0[] = { 0, 0, 0, 0, 0 };
-
-s16 D_8082AF04[] = {
- 255, 0, 0, 255, 255, 70, 0, 150, 255, 70, 0, 150, 255, 0, 0, 255,
+s16 sQuestRemainsColorTimerInit[] = { 120, 60, 2, 80 };
+s16 sQuestHpColorTimerInit[] = { 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 };
+s16 sQuestHpPrimColorTargets[][4] = {
+ { 255, 0, 0, 255 },
+ { 255, 70, 0, 150 },
+ { 255, 70, 0, 150 },
+ { 255, 0, 0, 255 },
+};
+s16 sQuestRemainsEnvTargets[][3] = {
+ { 0, 0, 0 }, // QUEST_REMAINS_ODOLWA Target 1
+ { 0, 0, 0 }, // QUEST_REMAINS_GOHT Target 1
+ { 0, 0, 0 }, // QUEST_REMAINS_GYORG Target 1
+ { 0, 0, 0 }, // QUEST_REMAINS_TWINMOLD Target 1
+ { 0, 0, 0 }, // Unused
+ { 0, 0, 0 }, // Unused
+ { 0, 60, 0 }, // QUEST_REMAINS_ODOLWA Target 2
+ { 90, 0, 0 }, // QUEST_REMAINS_GOHT Target 2
+ { 0, 40, 110 }, // QUEST_REMAINS_GYORG Target 2
+ { 80, 40, 0 }, // QUEST_REMAINS_TWINMOLD Target 2
+ { 70, 0, 90 }, // Unused
+ { 90, 90, 0 }, // Unused
+};
+s16 sQuestRemainsEnvRed[] = {
+ 255, // QUEST_REMAINS_ODOLWA
+ 255, // QUEST_REMAINS_GOHT
+ 255, // QUEST_REMAINS_GYORG
+ 255, // QUEST_REMAINS_TWINMOLD
+ 255, // Unused
+ 255, // Unused
+};
+s16 sQuestRemainsEnvGreen[] = {
+ 255, // QUEST_REMAINS_ODOLWA
+ 255, // QUEST_REMAINS_GOHT
+ 255, // QUEST_REMAINS_GYORG
+ 255, // QUEST_REMAINS_TWINMOLD
+ 255, // Unused
+ 255, // Unused
+};
+s16 sQuestRemainsEnvBlue[] = {
+ 150, // QUEST_REMAINS_ODOLWA
+ 150, // QUEST_REMAINS_GOHT
+ 150, // QUEST_REMAINS_GYORG
+ 150, // QUEST_REMAINS_TWINMOLD
+ 150, // Unused
+ 150, // Unused
};
-s16 D_8082AF24[] = {
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x003C, 0x0000, 0x005A, 0x0000, 0x0000,
- 0x0000, 0x0028, 0x006E, 0x0050, 0x0028, 0x0000, 0x0046, 0x0000, 0x005A, 0x005A, 0x005A, 0x0000,
+#ifdef NON_EQUIVALENT
+// TODO: is actually NON_MATCHING, update once `z_kaleido_scope_NES.c` is decompiled
+// A single small regalloc at the first `Gfx_DrawTexQuadIA8` for the heart piece count (see `gItemIcons`)
+void KaleidoScope_DrawQuestStatus(PlayState* play) {
+ static s16 sQuestRemainsColorTimer = 20;
+ static s16 sQuestRemainsColorTimerIndex = 0;
+ static s16 sQuestHpPrimRed = 0;
+ static s16 sQuestHpPrimGreen = 0;
+ static s16 sQuestHpPrimBlue = 0;
+ static s16 sQuestHpPrimAlpha = 0;
+ static s16 sQuestHpColorTimer = 20;
+ static s16 sQuestHpPrimColorTargetIndex = 0;
+ static TexturePtr sOcarinaButtonTextures[] = {
+ gOcarinaATex, gOcarinaCDownTex, gOcarinaCRightTex, gOcarinaCLeftTex, gOcarinaCUpTex,
+ };
+ static s16 sQuestSongsPrimRed[] = {
+ 150, // QUEST_SONG_SONATA
+ 255, // QUEST_SONG_LULLABY
+ 100, // QUEST_SONG_BOSSA_NOVA
+ 255, // QUEST_SONG_ELEGY
+ 255, // QUEST_SONG_OATH
+ 255, // QUEST_SONG_SARIA
+ 255, // QUEST_SONG_TIME
+ 255, // QUEST_SONG_HEALING
+ 255, // QUEST_SONG_EPONA
+ 255, // QUEST_SONG_SOARING
+ 255, // QUEST_SONG_STORMS
+ 255, // QUEST_SONG_SUN
+ };
+ static s16 sQuestSongsPrimGreen[] = {
+ 255, // QUEST_SONG_SONATA
+ 80, // QUEST_SONG_LULLABY
+ 150, // QUEST_SONG_BOSSA_NOVA
+ 160, // QUEST_SONG_ELEGY
+ 100, // QUEST_SONG_OATH
+ 240, // QUEST_SONG_SARIA
+ 255, // QUEST_SONG_TIME
+ 255, // QUEST_SONG_HEALING
+ 255, // QUEST_SONG_EPONA
+ 255, // QUEST_SONG_SOARING
+ 255, // QUEST_SONG_STORMS
+ 255, // QUEST_SONG_SUN
+ };
+ static s16 sQuestSongsPrimBlue[] = {
+ 100, // QUEST_SONG_SONATA
+ 40, // QUEST_SONG_LULLABY
+ 255, // QUEST_SONG_BOSSA_NOVA
+ 0, // QUEST_SONG_ELEGY
+ 255, // QUEST_SONG_OATH
+ 100, // QUEST_SONG_SARIA
+ 255, // QUEST_SONG_TIME
+ 255, // QUEST_SONG_HEALING
+ 255, // QUEST_SONG_EPONA
+ 255, // QUEST_SONG_SOARING
+ 255, // QUEST_SONG_STORMS
+ 255, // QUEST_SONG_SUN
+ };
+ static TexturePtr sQuestUpgradeTextures[][3] = {
+ { 0x08053000, 0x08054000, 0x08055000 }, // UPG_QUIVER
+ { 0x08056000, 0x08057000, 0x08058000 }, // UPG_BOMB_BAG
+ };
+ static u8 sQuestUpgrades[] = { UPG_QUIVER, UPG_BOMB_BAG };
+ PauseContext* pauseCtx = &play->pauseCtx;
+ s16 sp1CA; // colorSetR and numOcarinaButtons
+ s16 sp1C8; // colorSetG and ocarinaButtonIndex
+ s16 sp1C6;
+ s16 sp1C4;
+ s16 var_v1;
+ s16 i;
+ s16 j;
+ s16 k;
+ s16 skullTokenDigits[3];
+ u16 isDigitDrawn;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ KaleidoScope_SetCursorVtx(pauseCtx, pauseCtx->cursorSlot[PAUSE_QUEST] * 4, pauseCtx->questVtx);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
+ gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE,
+ ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+
+ // Draw the Boss Remains icons
+ sQuestRemainsColorTimer--;
+ for (i = 0, j = 0; i < 4; i++, j += 4) {
+ if ((sQuestRemainsColorTimerIndex != 1) && (sQuestRemainsColorTimerIndex != 3)) {
+ var_v1 = (sQuestRemainsColorTimerIndex != 0) ? (i + 6) : i;
+
+ if (sQuestRemainsColorTimer != 0) {
+ sp1CA = ABS_ALT(sQuestRemainsEnvRed[i] - sQuestRemainsEnvTargets[var_v1][0]) / sQuestRemainsColorTimer;
+ sp1C8 =
+ ABS_ALT(sQuestRemainsEnvGreen[i] - sQuestRemainsEnvTargets[var_v1][1]) / sQuestRemainsColorTimer;
+ sp1C6 = ABS_ALT(sQuestRemainsEnvBlue[i] - sQuestRemainsEnvTargets[var_v1][2]) / sQuestRemainsColorTimer;
+
+ if (sQuestRemainsEnvRed[i] >= sQuestRemainsEnvTargets[var_v1][0]) {
+ sQuestRemainsEnvRed[i] -= sp1CA;
+ } else {
+ sQuestRemainsEnvRed[i] += sp1CA;
+ }
+ if (sQuestRemainsEnvGreen[i] >= sQuestRemainsEnvTargets[var_v1][1]) {
+ sQuestRemainsEnvGreen[i] -= sp1C8;
+ } else {
+ sQuestRemainsEnvGreen[i] += sp1C8;
+ }
+ if (sQuestRemainsEnvBlue[i] >= sQuestRemainsEnvTargets[var_v1][2]) {
+ sQuestRemainsEnvBlue[i] -= sp1C6;
+ } else {
+ sQuestRemainsEnvBlue[i] += sp1C6;
+ }
+ } else {
+ sQuestRemainsEnvRed[i] = sQuestRemainsEnvTargets[var_v1][0];
+ sQuestRemainsEnvGreen[i] = sQuestRemainsEnvTargets[var_v1][1];
+ sQuestRemainsEnvBlue[i] = sQuestRemainsEnvTargets[var_v1][2];
+ }
+ }
+
+ if (CHECK_QUEST_ITEM(i)) {
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
+ gDPSetEnvColor(POLY_OPA_DISP++, sQuestRemainsEnvRed[i], sQuestRemainsEnvGreen[i], sQuestRemainsEnvBlue[i],
+ 0);
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[j], 4, 0);
+ KaleidoScope_DrawTexQuadRGBA32(play->state.gfxCtx, gItemIcons[ITEM_REMAINS_ODOLWA + i], 32, 32, 0);
+ }
+ }
+
+ if (sQuestRemainsColorTimer == 0) {
+ sQuestRemainsColorTimer = sQuestRemainsColorTimerInit[sQuestRemainsColorTimerIndex];
+ if (++sQuestRemainsColorTimerIndex > 3) {
+ sQuestRemainsColorTimerIndex = 0;
+ }
+ }
+
+ // Draw shield
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
+ gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+
+ if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD) != EQUIP_VALUE_SHIELD_NONE) {
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[j], 4, 0);
+ KaleidoScope_DrawTexQuadRGBA32(play->state.gfxCtx, gItemIcons[(ITEM_SHIELD_HERO - 1) + GET_CUR_EQUIP_VALUE(1)],
+ 32, 32, 0);
+ }
+
+ j += 4;
+
+ // Draw Sword
+ if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) != EQUIP_VALUE_SWORD_NONE) {
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[j], 4, 0);
+ KaleidoScope_DrawTexQuadRGBA32(play->state.gfxCtx, gItemIcons[(ITEM_SWORD_KOKIRI - 1) + GET_CUR_EQUIP_VALUE(0)],
+ 32, 32, 0);
+ }
+
+ j += 4;
+
+ // Draw Songs
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
+
+ gDPLoadTextureBlock(POLY_OPA_DISP++, &D_08062000, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 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);
+
+ for (i = 0; i < 12; i++, j += 4) {
+ if (CHECK_QUEST_ITEM(i + QUEST_SONG_SONATA) ||
+ ((i == (QUEST_SONG_LULLABY - QUEST_SONG_SONATA)) && !CHECK_QUEST_ITEM(i + QUEST_SONG_SONATA) &&
+ CHECK_QUEST_ITEM(QUEST_SONG_LULLABY_INTRO))) {
+ if ((i + QUEST_SONG_SONATA) == pauseCtx->cursorSlot[PAUSE_QUEST]) {
+ pauseCtx->questVtx[j + 0].v.ob[0] = pauseCtx->questVtx[j + 2].v.ob[0] =
+ pauseCtx->questVtx[j + 0].v.ob[0] - 2;
+
+ pauseCtx->questVtx[j + 1].v.ob[0] = pauseCtx->questVtx[j + 3].v.ob[0] =
+ pauseCtx->questVtx[j + 1].v.ob[0] + 4;
+
+ pauseCtx->questVtx[j + 0].v.ob[1] = pauseCtx->questVtx[j + 1].v.ob[1] =
+ pauseCtx->questVtx[j + 0].v.ob[1] + 2;
+
+ pauseCtx->questVtx[j + 2].v.ob[1] = pauseCtx->questVtx[j + 3].v.ob[1] =
+ pauseCtx->questVtx[j + 2].v.ob[1] - 4;
+ }
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sQuestSongsPrimRed[i], sQuestSongsPrimGreen[i],
+ sQuestSongsPrimBlue[i], pauseCtx->alpha);
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[j], 4, 0);
+ gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0);
+ }
+ }
+
+ // Draw Bombers Notebook
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
+
+ if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) {
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[j], 4, 0);
+ KaleidoScope_DrawTexQuadRGBA32(play->state.gfxCtx, &D_08061000, 32, 32, 0);
+ }
+
+ j += 4;
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
+
+ // Loop over quest item upgrades
+ for (i = 0; i < 2; i++, j += 4) {
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[j], 4, 0);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
+
+ if (GET_CUR_UPG_VALUE(sQuestUpgrades[i]) != 0) {
+ KaleidoScope_DrawTexQuadRGBA32(
+ play->state.gfxCtx, sQuestUpgradeTextures[i][GET_CUR_UPG_VALUE(sQuestUpgrades[i]) - 1], 32, 32, 0);
+ }
+ }
+
+ // Skip over &pauseCtx->questVtx[84], which should be `QUEST_SKULL_TOKEN`
+ j += 4;
+
+ sp1CA = ABS_ALT(sQuestHpPrimRed - sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][0]) / sQuestHpColorTimer;
+ sp1C8 = ABS_ALT(sQuestHpPrimGreen - sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][1]) / sQuestHpColorTimer;
+ sp1C6 = ABS_ALT(sQuestHpPrimBlue - sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][2]) / sQuestHpColorTimer;
+ sp1C4 = ABS_ALT(sQuestHpPrimAlpha - sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][3]) / sQuestHpColorTimer;
+
+ if (sQuestHpPrimRed >= sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][0]) {
+ sQuestHpPrimRed -= sp1CA;
+ } else {
+ sQuestHpPrimRed += sp1CA;
+ }
+
+ if (sQuestHpPrimGreen >= sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][1]) {
+ sQuestHpPrimGreen -= sp1C8;
+ } else {
+ sQuestHpPrimGreen += sp1C8;
+ }
+
+ if (sQuestHpPrimBlue >= sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][2]) {
+ sQuestHpPrimBlue -= sp1C6;
+ } else {
+ sQuestHpPrimBlue += sp1C6;
+ }
+
+ if (sQuestHpPrimAlpha >= sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][3]) {
+ sQuestHpPrimAlpha -= sp1C4;
+ } else {
+ sQuestHpPrimAlpha += sp1C4;
+ }
+
+ sQuestHpColorTimer--;
+ if (sQuestHpColorTimer == 0) {
+ sQuestHpPrimRed = sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][0];
+ sQuestHpPrimGreen = sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][1];
+ sQuestHpPrimBlue = sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][2];
+ sQuestHpPrimAlpha = sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][3];
+ sQuestHpColorTimer = sQuestHpColorTimerInit[sQuestHpPrimColorTargetIndex];
+ if (++sQuestHpPrimColorTargetIndex > 3) {
+ sQuestHpPrimColorTargetIndex = 0;
+ }
+ }
+
+ if ((GET_SAVE_INVENTORY_QUEST_ITEMS >> QUEST_HEART_PIECE_COUNT) != 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);
+
+ if ((pauseCtx->state == PAUSE_STATE_OPENING_3) || (pauseCtx->state == PAUSE_STATE_UNPAUSE_SETUP)) {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sQuestHpPrimColorTargets[0][0], sQuestHpPrimColorTargets[0][1],
+ sQuestHpPrimColorTargets[0][2], pauseCtx->alpha);
+ } else {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sQuestHpPrimRed, sQuestHpPrimGreen, sQuestHpPrimBlue,
+ sQuestHpPrimAlpha);
+ }
+
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[j], 4, 0);
+
+ POLY_OPA_DISP = Gfx_DrawTexQuadIA8(
+ POLY_OPA_DISP,
+ gItemIcons[(0x7A + ((GET_SAVE_INVENTORY_QUEST_ITEMS & 0xF0000000) >> QUEST_HEART_PIECE_COUNT))], 48, 48, 0);
+ }
+
+ j += 4;
+
+ if (pauseCtx->state == PAUSE_STATE_MAIN) {
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+
+ if (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PLAYBACK) {
+ // Draw ocarina buttons as they are played back
+ pauseCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
+
+ if (pauseCtx->ocarinaStaff->pos != 0) {
+ if (sQuestSongPlayedOcarinaButtonsNum == (pauseCtx->ocarinaStaff->pos - 1)) {
+ sQuestSongPlayedOcarinaButtonsNum++;
+ sQuestSongPlayedOcarinaButtons[pauseCtx->ocarinaStaff->pos - 1] =
+ pauseCtx->ocarinaStaff->buttonIndex;
+ }
+
+ for (i = 0, k = 0; i < 8; i++, k += 4, j += 4) {
+ if (sQuestSongPlayedOcarinaButtons[i] == OCARINA_BTN_INVALID) {
+ break;
+ }
+
+ if (sQuestSongPlayedOcarinaButtonsAlpha[i] != 255) {
+ sQuestSongPlayedOcarinaButtonsAlpha[i] += 50;
+ if (sQuestSongPlayedOcarinaButtonsAlpha[i] >= 255) {
+ sQuestSongPlayedOcarinaButtonsAlpha[i] = 255;
+ }
+ }
+
+ pauseCtx->questVtx[j + 0].v.ob[1] = pauseCtx->questVtx[j + 1].v.ob[1] =
+ pauseCtx->ocarinaButtonsY[sQuestSongPlayedOcarinaButtons[i]];
+
+ pauseCtx->questVtx[j + 2].v.ob[1] = pauseCtx->questVtx[j + 3].v.ob[1] =
+ pauseCtx->questVtx[j + 0].v.ob[1] - 12;
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ if (sQuestSongPlayedOcarinaButtons[i] == OCARINA_BTN_A) {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 80, 150, 255, sQuestSongPlayedOcarinaButtonsAlpha[i]);
+ } else {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 50, sQuestSongPlayedOcarinaButtonsAlpha[i]);
+ }
+
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[j], 4, 0);
+
+ POLY_OPA_DISP = Gfx_DrawTexQuadIA8(
+ POLY_OPA_DISP, sOcarinaButtonTextures[sQuestSongPlayedOcarinaButtons[i]], 16, 16, 0);
+ }
+ }
+ } else if (IS_PAUSE_MAIN_STATE_SAVE_PROMPT || (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) {
+ // Draw the buttons for playing a song
+ sp1C8 = pauseCtx->ocarinaSongIndex;
+ sp1CA = gOcarinaSongButtons[sp1C8].numButtons;
+
+ i = j;
+
+ for (k = 0; k < sp1CA; k++, j += 4) {
+ pauseCtx->questVtx[j + 0].v.ob[1] = pauseCtx->questVtx[j + 1].v.ob[1] =
+ pauseCtx->ocarinaButtonsY[gOcarinaSongButtons[sp1C8].buttonIndex[k]];
+
+ pauseCtx->questVtx[j + 2].v.ob[1] = pauseCtx->questVtx[j + 3].v.ob[1] =
+ pauseCtx->questVtx[j + 0].v.ob[1] - 12;
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ if (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG) {
+ // Draw ocarina buttons colored
+ if (gOcarinaSongButtons[sp1C8].buttonIndex[k] == OCARINA_BTN_A) {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 80, 150, 255, 200);
+ } else {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 50, 200);
+ }
+ } else {
+ // Gray out buttons while reading ocarina song inputs
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 150, 150, 150, 150);
+ }
+
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[j], 4, 0);
+
+ POLY_OPA_DISP = Gfx_DrawTexQuadIA8(
+ POLY_OPA_DISP, sOcarinaButtonTextures[gOcarinaSongButtons[sp1C8].buttonIndex[k]], 16, 16, 0);
+ }
+
+ if (pauseCtx->mainState != PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG) {
+ pauseCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
+
+ // Update ocarina song inputs
+ if (pauseCtx->ocarinaStaff->pos != 0) {
+ if (sQuestSongPlayedOcarinaButtonsNum == (pauseCtx->ocarinaStaff->pos - 1)) {
+ if (pauseCtx->ocarinaStaff->buttonIndex <= OCARINA_BTN_C_UP) {
+ sQuestSongPlayedOcarinaButtons[pauseCtx->ocarinaStaff->pos - 1] =
+ pauseCtx->ocarinaStaff->buttonIndex;
+ sQuestSongPlayedOcarinaButtons[pauseCtx->ocarinaStaff->pos] = OCARINA_BTN_INVALID;
+ sQuestSongPlayedOcarinaButtonsNum++;
+ }
+ }
+ }
+
+ // Draw the buttons colored as the ocarina song inputs are read from
+ j = i + 32;
+ k = 0;
+ for (; k < 8; k++, j += 4) {
+ if (sQuestSongPlayedOcarinaButtons[k] == OCARINA_BTN_INVALID) {
+ continue;
+ }
+
+ if (sQuestSongPlayedOcarinaButtonsAlpha[k] != 255) {
+ sQuestSongPlayedOcarinaButtonsAlpha[k] += 50;
+ if (sQuestSongPlayedOcarinaButtonsAlpha[k] >= 255) {
+ sQuestSongPlayedOcarinaButtonsAlpha[k] = 255;
+ }
+ }
+
+ pauseCtx->questVtx[j + 0].v.ob[1] = pauseCtx->questVtx[j + 1].v.ob[1] =
+ pauseCtx->ocarinaButtonsY[sQuestSongPlayedOcarinaButtons[k]];
+
+ pauseCtx->questVtx[j + 2].v.ob[1] = pauseCtx->questVtx[j + 3].v.ob[1] =
+ pauseCtx->questVtx[j + 0].v.ob[1] - 12;
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ if (sQuestSongPlayedOcarinaButtons[k] == OCARINA_BTN_A) {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 80, 150, 255, sQuestSongPlayedOcarinaButtonsAlpha[k]);
+ } else {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 50, sQuestSongPlayedOcarinaButtonsAlpha[k]);
+ }
+
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[j], 4, 0);
+
+ POLY_OPA_DISP = Gfx_DrawTexQuadIA8(
+ POLY_OPA_DISP, sOcarinaButtonTextures[sQuestSongPlayedOcarinaButtons[k]], 16, 16, 0);
+ }
+
+ if (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT_INIT) {
+ for (k = 0; k < 8; k++) {
+ sQuestSongPlayedOcarinaButtons[k] = OCARINA_BTN_INVALID;
+ sQuestSongPlayedOcarinaButtonsAlpha[k] = 0;
+ }
+
+ sQuestSongPlayedOcarinaButtonsNum = 0;
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ AudioOcarina_StartDefault((1 << pauseCtx->ocarinaSongIndex) | 0x80000000);
+ pauseCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
+ pauseCtx->ocarinaStaff->pos = 0;
+ pauseCtx->ocarinaStaff->state = 0xFE;
+ pauseCtx->mainState = PAUSE_MAIN_STATE_SONG_PROMPT;
+ }
+ }
+ }
+ }
+
+ // Draw Skull Token Count
+ // QUEST_SKULL_TOKEN never properly set, see Item_Give(),
+ // Vertices not well placed, digits are not aligned and placed in unintended positions
+ if (CHECK_QUEST_ITEM(QUEST_SKULL_TOKEN) && ((play->sceneId == SCENE_KINSTA1) || (play->sceneId == SCENE_KINDAN2))) {
+ 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);
+
+ skullTokenDigits[0] = skullTokenDigits[1] = 0;
+ skullTokenDigits[2] = Inventory_GetSkullTokenCount(play->sceneId);
+
+ while (skullTokenDigits[2] >= 100) {
+ skullTokenDigits[0]++;
+ skullTokenDigits[2] -= 100;
+ }
+
+ while (skullTokenDigits[2] >= 10) {
+ skullTokenDigits[1]++;
+ skullTokenDigits[2] -= 10;
+ }
+
+ //! @bug: &pauseCtx->questVtx[84] is the questVtx for skull tokens
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[152], 24, 0);
+
+ // Loop over two sets of digits, the first is shadowed, the second is colored
+ for (k = 0, i = 0; k < 2; k++) {
+ if (k == 0) {
+ // shadow
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, pauseCtx->alpha);
+ } else {
+ if (Inventory_GetSkullTokenCount(play->sceneId) == 100) {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 200, 50, 50, pauseCtx->alpha);
+ } else {
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
+ }
+ }
+
+ isDigitDrawn = false;
+ for (j = 0; j < 3; j++, i += 4) {
+ if ((j >= 2) || (skullTokenDigits[j] != 0) || isDigitDrawn) {
+ gDPLoadTextureBlock(POLY_OPA_DISP++, ((u8*)gCounterDigit0Tex + (8 * 16 * skullTokenDigits[j])),
+ G_IM_FMT_I, G_IM_SIZ_8b, 8, 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++, i, i + 2, i + 3, i + 1, 0);
+
+ isDigitDrawn = true;
+ }
+ }
+ }
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+#else
+s16 sQuestRemainsColorTimer = 20;
+s16 sQuestRemainsColorTimerIndex = 0;
+s16 sQuestHpPrimRed = 0;
+s16 sQuestHpPrimGreen = 0;
+s16 sQuestHpPrimBlue = 0;
+s16 sQuestHpPrimAlpha = 0;
+s16 sQuestHpColorTimer = 20;
+s16 sQuestHpPrimColorTargetIndex = 0;
+TexturePtr sOcarinaButtonTextures[] = {
+ gOcarinaATex, gOcarinaCDownTex, gOcarinaCRightTex, gOcarinaCLeftTex, gOcarinaCUpTex,
};
-
-s16 D_8082AF6C[] = {
- 255, 255, 255, 255, 255, 255,
-};
-
-s16 D_8082AF78[] = {
- 255, 255, 255, 255, 255, 255,
-};
-
-s16 D_8082AF84[] = {
- 150, 150, 150, 150, 150, 150,
-};
-
-s16 D_8082AF90 = 20;
-
-s32 D_8082AF94 = 0;
-
-s32 D_8082AF98 = 0;
-
-s32 D_8082AF9C = 0;
-
-s32 D_8082AFA0 = 0;
-
-s32 D_8082AFA4 = 0;
-
-s16 D_8082AFA8 = 20;
-
-s32 D_8082AFAC = 0;
-
-void* D_8082AFB0[] = {
- 0x020024A0, 0x020025A0, 0x020026A0, 0x020027A0, 0x020028A0,
-};
-
-s16 D_8082AFC4[] = {
+s16 sQuestSongsPrimRed[] = {
150, 255, 100, 255, 255, 255, 255, 255, 255, 255, 255, 255,
};
-
-s16 D_8082AFDC[] = {
+s16 sQuestSongsPrimGreen[] = {
255, 80, 150, 160, 100, 240, 255, 255, 255, 255, 255, 255,
};
-
-s16 D_8082AFF4[] = { 100, 40, 255, 0, 255, 100, 255, 255, 255, 255, 255, 255 };
-
-void* D_8082B00C[] = {
- 0x08053000, 0x08054000, 0x08055000, 0x08056000, 0x08057000, 0x08058000,
+s16 sQuestSongsPrimBlue[] = {
+ 100, 40, 255, 0, 255, 100, 255, 255, 255, 255, 255, 255,
};
-
-s16 D_8082B024 = 1;
-
-s16 D_8082B028 = 0;
-
-s16 D_8082B02C[] = {
- 0xFFFF, 0x0003, 0x0002, 0x0001, 0x0000, 0x0004, 0x0003, 0xFFFE, 0x0000, 0x0005, 0x0016, 0x0003, 0x0000, 0x0004,
- 0x0002, 0x0001, 0x0001, 0x0014, 0x0005, 0xFFFE, 0x0002, 0x0013, 0x0010, 0x0004, 0x000C, 0xFFFF, 0xFFFD, 0x0007,
- 0x000D, 0xFFFF, 0x0006, 0x0008, 0x000E, 0xFFFF, 0x0007, 0x0009, 0x000F, 0xFFFF, 0x0008, 0x000A, 0x0010, 0xFFFF,
- 0x0009, 0x0013, 0x0011, 0xFFFF, 0x000A, 0x0005, 0x0012, 0x0006, 0xFFFD, 0x000D, 0x0012, 0x0007, 0x000C, 0x000E,
- 0x0016, 0x0008, 0x000D, 0x000F, 0x0016, 0x0009, 0x000E, 0x0010, 0x0016, 0x000A, 0x000F, 0x0005, 0x0016, 0x000B,
- 0x0010, 0x0005, 0xFFFF, 0x000C, 0xFFFD, 0x0016, 0x0005, 0xFFFF, 0x000A, 0x0014, 0x0004, 0xFFFF, 0x0013, 0xFFFE,
- 0x0013, 0x000C, 0xFFFD, 0x0016, 0xFFFF, 0x0010, 0x0012, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+TexturePtr sQuestUpgradeTextures[][3] = {
+ { 0x08053000, 0x08054000, 0x08055000 },
+ { 0x08056000, 0x08057000, 0x08058000 },
};
+u8 sQuestUpgrades[] = { UPG_QUIVER, UPG_BOMB_BAG };
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_DrawQuestStatus.s")
+#endif
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_808160A0.s")
+typedef enum {
+ /* -3 */ CURSOR_TO_LEFT = -3, // Cursor on the "scroll to left page" position
+ /* -2 */ CURSOR_TO_RIGHT, // Cursor on the "scroll to right page" position
+ /* -1 */ CURSOR_NONE // No position in that direction, cursor stays where it is
+} CursorPointNext;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80817B5C.s")
+typedef struct {
+ /* 0x0 */ s16 up;
+ /* 0x2 */ s16 down;
+ /* 0x4 */ s16 left;
+ /* 0x6 */ s16 right;
+} CursorPointDirection;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80818904.s")
+void KaleidoScope_UpdateQuestCursor(PlayState* play) {
+ static s16 sQuestSongPlaybackDelayTimer = 0;
+ static CursorPointDirection sCursorPointLinks[] = {
+ { CURSOR_NONE, QUEST_REMAINS_TWINMOLD, QUEST_REMAINS_GYORG, QUEST_REMAINS_GOHT }, // QUEST_REMAINS_ODOLWA
+ { QUEST_REMAINS_ODOLWA, QUEST_SHIELD, QUEST_REMAINS_TWINMOLD, CURSOR_TO_RIGHT }, // QUEST_REMAINS_GOHT
+ { QUEST_REMAINS_ODOLWA, QUEST_SWORD, QUEST_HEART_PIECE, QUEST_REMAINS_TWINMOLD }, // QUEST_REMAINS_GYORG
+ { QUEST_REMAINS_ODOLWA, QUEST_SHIELD, QUEST_REMAINS_GYORG, QUEST_REMAINS_GOHT }, // QUEST_REMAINS_TWINMOLD
+ { QUEST_REMAINS_GOHT, QUEST_BOMB_BAG, QUEST_SWORD, CURSOR_TO_RIGHT }, // QUEST_SHIELD
+ { QUEST_REMAINS_GYORG, QUEST_QUIVER, QUEST_SONG_STORMS, QUEST_SHIELD }, // QUEST_SWORD
+ { QUEST_SONG_TIME, CURSOR_NONE, CURSOR_TO_LEFT, QUEST_SONG_LULLABY }, // QUEST_SONG_SONATA
+ { QUEST_SONG_HEALING, CURSOR_NONE, QUEST_SONG_SONATA, QUEST_SONG_BOSSA_NOVA }, // QUEST_SONG_LULLABY
+ { QUEST_SONG_EPONA, CURSOR_NONE, QUEST_SONG_LULLABY, QUEST_SONG_ELEGY }, // QUEST_SONG_BOSSA_NOVA
+ { QUEST_SONG_SOARING, CURSOR_NONE, QUEST_SONG_BOSSA_NOVA, QUEST_SONG_OATH }, // QUEST_SONG_ELEGY
+ { QUEST_SONG_STORMS, CURSOR_NONE, QUEST_SONG_ELEGY, QUEST_QUIVER }, // QUEST_SONG_OATH
+ { QUEST_SONG_SUN, CURSOR_NONE, QUEST_SONG_OATH, QUEST_SWORD }, // QUEST_SONG_SARIA
+ { QUEST_BOMBERS_NOTEBOOK, QUEST_SONG_SONATA, CURSOR_TO_LEFT, QUEST_SONG_HEALING }, // QUEST_SONG_TIME
+ { QUEST_BOMBERS_NOTEBOOK, QUEST_SONG_LULLABY, QUEST_SONG_TIME, QUEST_SONG_EPONA }, // QUEST_SONG_HEALING
+ { QUEST_HEART_PIECE, QUEST_SONG_BOSSA_NOVA, QUEST_SONG_HEALING, QUEST_SONG_SOARING }, // QUEST_SONG_EPONA
+ { QUEST_HEART_PIECE, QUEST_SONG_ELEGY, QUEST_SONG_EPONA, QUEST_SONG_STORMS }, // QUEST_SONG_SOARING
+ { QUEST_HEART_PIECE, QUEST_SONG_OATH, QUEST_SONG_SOARING, QUEST_SWORD }, // QUEST_SONG_STORMS
+ { QUEST_HEART_PIECE, QUEST_SONG_SARIA, QUEST_SONG_STORMS, QUEST_SWORD }, // QUEST_SONG_SUN
+ { CURSOR_NONE, QUEST_SONG_TIME, CURSOR_TO_LEFT, QUEST_HEART_PIECE }, // QUEST_BOMBERS_NOTEBOOK
+ { QUEST_SWORD, CURSOR_NONE, QUEST_SONG_OATH, QUEST_BOMB_BAG }, // QUEST_QUIVER
+ { QUEST_SHIELD, CURSOR_NONE, QUEST_QUIVER, CURSOR_TO_RIGHT }, // QUEST_BOMB_BAG
+ { QUEST_QUIVER, QUEST_SONG_TIME, CURSOR_TO_LEFT, QUEST_HEART_PIECE }, // QUEST_SKULL_TOKEN
+ { CURSOR_NONE, QUEST_SONG_STORMS, QUEST_BOMBERS_NOTEBOOK, QUEST_REMAINS_GYORG }, // QUEST_HEART_PIECE
+ };
+ PauseContext* pauseCtx = &play->pauseCtx;
+ MessageContext* msgCtx = &play->msgCtx;
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ s32 pad;
+ s16 nextCursorPoint;
+ s16 oldCursorPoint;
+ s16 i;
+ u16 cursor;
+ u16 cursorItem;
+
+ pauseCtx->nameColorSet = PAUSE_NAME_COLOR_SET_WHITE;
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_WHITE;
+
+ // != PAUSE_MAIN_STATE_IDLE
+ if ((pauseCtx->state == PAUSE_STATE_MAIN) &&
+ (!pauseCtx->mainState || (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT) ||
+ (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) &&
+ (pauseCtx->pageIndex == PAUSE_QUEST) && !pauseCtx->itemDescriptionOn) {
+ if (pauseCtx->cursorSpecialPos == 0) {
+ oldCursorPoint = pauseCtx->cursorPoint[PAUSE_QUEST];
+
+ if (pauseCtx->stickAdjX < -30) {
+ // Move cursor left
+ if (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ }
+ pauseCtx->unk_298 = 4.0f;
+
+ nextCursorPoint = sCursorPointLinks[oldCursorPoint].left;
+ if (nextCursorPoint == CURSOR_TO_LEFT) {
+ KaleidoScope_MoveCursorToSpecialPos(play, PAUSE_CURSOR_PAGE_LEFT);
+ pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE;
+ if (interfaceCtx->unk_212 == 6) {
+ func_8011552C(play, DO_ACTION_INFO);
+ }
+ return;
+ } else {
+ while (nextCursorPoint > CURSOR_NONE) {
+ if (KaleidoScope_UpdateQuestStatusPoint(pauseCtx, nextCursorPoint)) {
+ break;
+ }
+ nextCursorPoint = sCursorPointLinks[nextCursorPoint].left;
+ }
+ }
+ } else if (pauseCtx->stickAdjX > 30) {
+ // Move cursor right
+ if (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ }
+ pauseCtx->unk_298 = 4.0f;
+ nextCursorPoint = sCursorPointLinks[oldCursorPoint].right;
+
+ if (nextCursorPoint == CURSOR_TO_RIGHT) {
+ KaleidoScope_MoveCursorToSpecialPos(play, PAUSE_CURSOR_PAGE_RIGHT);
+ pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE;
+ return;
+ }
+
+ while (nextCursorPoint > CURSOR_NONE) {
+ if (KaleidoScope_UpdateQuestStatusPoint(pauseCtx, nextCursorPoint)) {
+ break;
+ }
+ nextCursorPoint = sCursorPointLinks[nextCursorPoint].right;
+ }
+ }
+
+ if (pauseCtx->stickAdjY < -30) {
+ // Move cursor down
+ if (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ }
+ nextCursorPoint = sCursorPointLinks[oldCursorPoint].down;
+
+ while (nextCursorPoint > CURSOR_NONE) {
+ pauseCtx->unk_298 = 4.0f;
+ if (KaleidoScope_UpdateQuestStatusPoint(pauseCtx, nextCursorPoint)) {
+ break;
+ }
+ nextCursorPoint = sCursorPointLinks[nextCursorPoint].down;
+ }
+ } else if (pauseCtx->stickAdjY > 30) {
+ // Move cursor up
+ if (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ }
+ nextCursorPoint = sCursorPointLinks[oldCursorPoint].up;
+ while (nextCursorPoint > CURSOR_NONE) {
+ pauseCtx->unk_298 = 4.0f;
+ if (KaleidoScope_UpdateQuestStatusPoint(pauseCtx, nextCursorPoint)) {
+ break;
+ }
+ nextCursorPoint = sCursorPointLinks[nextCursorPoint].up;
+ }
+ }
+
+ // if the cursor point changed
+ if (oldCursorPoint != pauseCtx->cursorPoint[PAUSE_QUEST]) {
+ pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE;
+ play_sound(NA_SE_SY_CURSOR);
+ }
+
+ // Update cursor item and slot
+ if (pauseCtx->cursorPoint[PAUSE_QUEST] != QUEST_HEART_PIECE) {
+ if (pauseCtx->cursorPoint[PAUSE_QUEST] <= QUEST_REMAINS_TWINMOLD) {
+ // Boss Remains
+ if (CHECK_QUEST_ITEM(pauseCtx->cursorPoint[PAUSE_QUEST])) {
+ cursorItem = ITEM_REMAINS_ODOLWA + pauseCtx->cursorPoint[PAUSE_QUEST];
+ } else {
+ cursorItem = PAUSE_ITEM_NONE;
+ }
+ } else if (pauseCtx->cursorPoint[PAUSE_QUEST] == QUEST_BOMBERS_NOTEBOOK) {
+ // Bombers Notebook
+ if (CHECK_QUEST_ITEM(pauseCtx->cursorPoint[PAUSE_QUEST])) {
+ cursorItem = ITEM_BOMBERS_NOTEBOOK;
+ } else {
+ cursorItem = PAUSE_ITEM_NONE;
+ }
+ } else if (pauseCtx->cursorPoint[PAUSE_QUEST] == QUEST_SHIELD) {
+ // Shield
+ if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD) != EQUIP_VALUE_SHIELD_NONE) {
+ cursorItem = (ITEM_SHIELD_HERO - EQUIP_TYPE_SHIELD) + GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD);
+ } else {
+ cursorItem = PAUSE_ITEM_NONE;
+ }
+ } else if (pauseCtx->cursorPoint[PAUSE_QUEST] == QUEST_SWORD) {
+ // Sword
+ if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) != EQUIP_VALUE_SWORD_NONE) {
+ cursorItem =
+ (ITEM_SWORD_KOKIRI - EQUIP_VALUE_SWORD_KOKIRI) + GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD);
+ } else {
+ cursorItem = PAUSE_ITEM_NONE;
+ }
+ } else if (pauseCtx->cursorPoint[PAUSE_QUEST] <= QUEST_SONG_SUN) {
+ // Songs
+ if (CHECK_QUEST_ITEM(pauseCtx->cursorPoint[PAUSE_QUEST])) {
+ cursorItem = ITEM_WALLET_GIANT + pauseCtx->cursorPoint[PAUSE_QUEST];
+ } else if ((pauseCtx->cursorPoint[PAUSE_QUEST] == QUEST_SONG_LULLABY) &&
+ CHECK_QUEST_ITEM(QUEST_SONG_LULLABY_INTRO)) {
+ cursorItem = ITEM_SONG_LULLABY_INTRO;
+ } else {
+ cursorItem = PAUSE_ITEM_NONE;
+ }
+ } else if (pauseCtx->cursorPoint[PAUSE_QUEST] == QUEST_QUIVER) {
+ // Quiver Upgrade
+ if (GET_CUR_UPG_VALUE(UPG_QUIVER) != 0) {
+ cursorItem = (ITEM_QUIVER_30 - 1) + GET_CUR_UPG_VALUE(UPG_QUIVER);
+ } else {
+ cursorItem = PAUSE_ITEM_NONE;
+ }
+ } else if (pauseCtx->cursorPoint[PAUSE_QUEST] == QUEST_BOMB_BAG) {
+ // Bomb Bag Upgrade
+ if (GET_CUR_UPG_VALUE(UPG_BOMB_BAG) != 0) {
+ cursorItem = (ITEM_BOMB_BAG_20 - 1) + GET_CUR_UPG_VALUE(UPG_BOMB_BAG);
+ } else {
+ cursorItem = PAUSE_ITEM_NONE;
+ }
+ } else {
+ cursorItem = PAUSE_ITEM_NONE;
+ }
+ } else {
+ // Heart Piece Count
+ if ((GET_SAVE_INVENTORY_QUEST_ITEMS >> QUEST_HEART_PIECE_COUNT) != 0) {
+ cursorItem = ITEM_HEART_CONTAINER;
+ } else {
+ cursorItem = PAUSE_ITEM_NONE;
+ }
+ }
+
+ cursor = pauseCtx->cursorPoint[PAUSE_QUEST];
+ pauseCtx->cursorItem[pauseCtx->pageIndex] = cursorItem;
+ pauseCtx->cursorSlot[pauseCtx->pageIndex] = cursor;
+
+ if ((pauseCtx->debugEditor == DEBUG_EDITOR_NONE) && (pauseCtx->state == PAUSE_STATE_MAIN) &&
+ (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) && (pauseCtx->cursorSpecialPos == 0)) {
+ if ((cursor >= QUEST_SONG_SONATA) && (cursor <= QUEST_SONG_SUN)) {
+ // Handle part of the ocarina songs playback
+ if ((CHECK_QUEST_ITEM(pauseCtx->cursorPoint[PAUSE_QUEST]) ||
+ ((cursor == QUEST_SONG_LULLABY) && !CHECK_QUEST_ITEM(pauseCtx->cursorPoint[PAUSE_QUEST]) &&
+ CHECK_QUEST_ITEM(QUEST_SONG_LULLABY_INTRO))) &&
+ (msgCtx->msgLength == 0)) {
+ // The cursor is on a learned song
+ // Set some things up for song playback
+
+ if (CHECK_QUEST_ITEM(pauseCtx->cursorPoint[PAUSE_QUEST])) {
+ cursor = pauseCtx->cursorSlot[PAUSE_QUEST];
+ } else {
+ cursor = QUEST_BOMB_BAG;
+ }
+
+ pauseCtx->ocarinaSongIndex = gOcarinaSongItemMap[cursor - QUEST_SONG_SONATA];
+ sQuestSongPlaybackDelayTimer = 10;
+
+ for (i = 0; i < 8; i++) {
+ sQuestSongPlayedOcarinaButtons[i] = OCARINA_BTN_INVALID;
+ sQuestSongPlayedOcarinaButtonsAlpha[i] = 0;
+ }
+
+ sQuestSongPlayedOcarinaButtonsNum = 0;
+
+ // Setup the song to receive user input, immediately cancelled below
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ AudioOcarina_StartDefault((1 << pauseCtx->ocarinaSongIndex) | 0x80000000);
+
+ // Clear the playback staff
+ pauseCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
+ pauseCtx->ocarinaStaff->pos = 0;
+ pauseCtx->ocarinaStaff->state = 0xFF;
+
+ pauseCtx->ocarinaButtonsY[OCARINA_BTN_A] = -62;
+ pauseCtx->ocarinaButtonsY[OCARINA_BTN_C_DOWN] = -56;
+ pauseCtx->ocarinaButtonsY[OCARINA_BTN_C_RIGHT] = -49;
+ pauseCtx->ocarinaButtonsY[OCARINA_BTN_C_LEFT] = -46;
+ pauseCtx->ocarinaButtonsY[OCARINA_BTN_C_UP] = -41;
+
+ pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG;
+
+ if (interfaceCtx->unk_212 != 6) {
+ func_8011552C(play, DO_ACTION_DECIDE);
+ }
+
+ // Stop receiving input to play a song as mentioned above
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+
+ if (gSaveContext.buttonStatus[EQUIP_SLOT_A] == BTN_DISABLED) {
+ gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_ENABLED;
+ gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
+ Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
+ }
+ } else {
+ if (interfaceCtx->unk_212 != 6) {
+ func_8011552C(play, DO_ACTION_DECIDE);
+ }
+ if (gSaveContext.buttonStatus[EQUIP_SLOT_A] != BTN_DISABLED) {
+ gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_DISABLED;
+ gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
+ Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
+ }
+ }
+ } else {
+ if ((cursor == QUEST_BOMBERS_NOTEBOOK) && (pauseCtx->cursorItem[PAUSE_QUEST] != PAUSE_ITEM_NONE)) {
+ if (interfaceCtx->unk_212 != 6) {
+ func_8011552C(play, DO_ACTION_DECIDE);
+ }
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_BLUE;
+ } else if (interfaceCtx->unk_212 == 6) {
+ func_8011552C(play, DO_ACTION_INFO);
+ }
+
+ if ((pauseCtx->cursorItem[PAUSE_QUEST] != PAUSE_ITEM_NONE) && (msgCtx->msgLength == 0)) {
+ if (gSaveContext.buttonStatus[EQUIP_SLOT_A] == BTN_DISABLED) {
+ gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_ENABLED;
+ gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
+ Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
+ }
+
+ if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) && (msgCtx->msgLength == 0)) {
+ if (pauseCtx->cursorPoint[PAUSE_QUEST] == QUEST_BOMBERS_NOTEBOOK) {
+ play->pauseCtx.bombersNotebookOpen = true;
+ pauseCtx->mainState = PAUSE_MAIN_STATE_BOMBERS_NOTEBOOK_OPEN;
+ play_sound(NA_SE_SY_DECIDE);
+ } else {
+ pauseCtx->itemDescriptionOn = true;
+ if (pauseCtx->cursorYIndex[PAUSE_QUEST] < 2) {
+ if (pauseCtx->cursorItem[PAUSE_QUEST] < ITEM_REMAINS_ODOLWA) {
+ func_801514B0(play, 0x1737 + pauseCtx->cursorItem[PAUSE_QUEST], 1);
+ } else {
+ func_801514B0(play, 0x173B + pauseCtx->cursorItem[PAUSE_QUEST], 3);
+ }
+ } else {
+ if (pauseCtx->cursorItem[PAUSE_QUEST] < ITEM_REMAINS_ODOLWA) {
+ func_801514B0(play, 0x1737 + pauseCtx->cursorItem[PAUSE_QUEST], 1);
+ } else {
+ func_801514B0(play, 0x173B + pauseCtx->cursorItem[PAUSE_QUEST], 1);
+ }
+ }
+ }
+ }
+ } else if (gSaveContext.buttonStatus[EQUIP_SLOT_A] != BTN_DISABLED) {
+ gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_DISABLED;
+ gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
+ Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
+ }
+ }
+ } else if (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT) {
+ // Abort reading ocarina song input if the stick is moved
+ if ((pauseCtx->stickAdjX != 0) || (pauseCtx->stickAdjY != 0)) {
+ pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE;
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ }
+ } else if ((pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG) &&
+ CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) && (msgCtx->msgLength == 0) &&
+ (cursor >= QUEST_SONG_SONATA) && (cursor <= QUEST_SONG_SUN)) {
+ pauseCtx->mainState = PAUSE_MAIN_STATE_SONG_PLAYBACK_INIT;
+ sQuestSongPlaybackDelayTimer = 10;
+ }
+
+ if (pauseCtx->cursorSpecialPos == 0) {
+ if ((pauseCtx->cursorSlot[PAUSE_QUEST] >= 6) && (pauseCtx->cursorSlot[PAUSE_QUEST] < 0x12) &&
+ ((pauseCtx->mainState <= PAUSE_MAIN_STATE_SONG_PLAYBACK) ||
+ (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT) ||
+ (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) &&
+ (pauseCtx->cursorItem[pauseCtx->pageIndex] != PAUSE_ITEM_NONE)) {
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_BLUE;
+ if ((pauseCtx->mainState >= PAUSE_MAIN_STATE_SONG_PLAYBACK) &&
+ (pauseCtx->mainState <= PAUSE_MAIN_STATE_SONG_PROMPT_DONE)) {
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_WHITE;
+ }
+ }
+ }
+ } else if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) {
+ if (pauseCtx->stickAdjX > 30) {
+ if (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ }
+
+ func_80821A04(play);
+
+ pauseCtx->cursorPoint[PAUSE_QUEST] = QUEST_BOMBERS_NOTEBOOK;
+ if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) {
+ cursorItem = ITEM_BOMBERS_NOTEBOOK;
+ } else {
+ cursorItem = PAUSE_ITEM_NONE;
+ }
+
+ cursor = pauseCtx->cursorPoint[PAUSE_QUEST];
+ pauseCtx->cursorItem[pauseCtx->pageIndex] = cursorItem;
+ pauseCtx->cursorSlot[pauseCtx->pageIndex] = cursor;
+ }
+ } else if (pauseCtx->stickAdjX < -30) {
+ if (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ }
+
+ func_80821A04(play);
+
+ pauseCtx->cursorPoint[PAUSE_QUEST] = QUEST_REMAINS_GOHT;
+ if (CHECK_QUEST_ITEM(pauseCtx->cursorPoint[PAUSE_QUEST])) {
+ cursorItem = (ITEM_REMAINS_GOHT - 1) + pauseCtx->cursorPoint[PAUSE_QUEST];
+ if (pauseCtx->cursorPoint[PAUSE_QUEST] != QUEST_REMAINS_ODOLWA) {
+ // This condition is always true as `cursorPoint` is set three lines above
+ cursorItem = ITEM_MASK_GIANT;
+ }
+ } else {
+ cursorItem = PAUSE_ITEM_NONE;
+ }
+
+ cursor = pauseCtx->cursorPoint[PAUSE_QUEST];
+ pauseCtx->cursorItem[pauseCtx->pageIndex] = cursorItem;
+ pauseCtx->cursorSlot[pauseCtx->pageIndex] = cursor;
+ }
+ } else if (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PLAYBACK_INIT) {
+ // After a short delay, start the playback of the selected song
+
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_BLUE;
+ sQuestSongPlaybackDelayTimer--;
+ if (sQuestSongPlaybackDelayTimer == 0) {
+ for (i = 0; i < 8; i++) {
+ sQuestSongPlayedOcarinaButtons[i] = OCARINA_BTN_INVALID;
+ sQuestSongPlayedOcarinaButtonsAlpha[i] = 0;
+ }
+ sQuestSongPlayedOcarinaButtonsNum = 0;
+
+ pauseCtx->ocarinaButtonsY[OCARINA_BTN_A] = -62;
+ pauseCtx->ocarinaButtonsY[OCARINA_BTN_C_DOWN] = -56;
+ pauseCtx->ocarinaButtonsY[OCARINA_BTN_C_RIGHT] = -49;
+ pauseCtx->ocarinaButtonsY[OCARINA_BTN_C_LEFT] = -46;
+ pauseCtx->ocarinaButtonsY[OCARINA_BTN_C_UP] = -41;
+
+ if (CHECK_QUEST_ITEM(pauseCtx->cursorPoint[PAUSE_QUEST])) {
+ cursor = pauseCtx->cursorSlot[PAUSE_QUEST];
+ } else {
+ cursor = QUEST_BOMB_BAG;
+ }
+
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
+ pauseCtx->ocarinaSongIndex = gOcarinaSongItemMap[cursor - QUEST_SONG_SONATA];
+ AudioOcarina_SetPlaybackSong(pauseCtx->ocarinaSongIndex + 1, 1);
+ pauseCtx->mainState = PAUSE_MAIN_STATE_SONG_PLAYBACK;
+ pauseCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
+ pauseCtx->ocarinaStaff->pos = 0;
+ }
+ }
+}
+
+s32 KaleidoScope_UpdateQuestStatusPoint(PauseContext* pauseCtx, s16 point) {
+ pauseCtx->cursorPoint[PAUSE_QUEST] = point;
+
+ return true;
+}
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 c1f67b079..3d7e08221 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
@@ -370,14 +370,14 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) {
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0);
// Current Health Quarter (X / 4)
- KaleidoScope_DrawDigit(play, (((void)0, gSaveContext.save.playerData.health) % 0x10) / 4, 217, 15);
+ KaleidoScope_DrawDigit(play, (((void)0, gSaveContext.save.saveInfo.playerData.health) % 0x10) / 4, 217, 15);
gDPPipeSync(POLY_OPA_DISP++);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
// Rupees
counterDigits[0] = counterDigits[1] = counterDigits[2] = 0;
- counterDigits[3] = gSaveContext.save.playerData.rupees;
+ counterDigits[3] = gSaveContext.save.saveInfo.playerData.rupees;
while (counterDigits[3] >= 1000) {
counterDigits[0]++;
counterDigits[3] -= 1000;
@@ -400,7 +400,7 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) {
// Health capacity
counterDigits[2] = 0;
- counterDigits[3] = gSaveContext.save.playerData.healthCapacity / 0x10;
+ counterDigits[3] = gSaveContext.save.saveInfo.playerData.healthCapacity / 0x10;
while (counterDigits[3] >= 10) {
counterDigits[2]++;
counterDigits[3] -= 10;
@@ -411,7 +411,7 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) {
// Health
counterDigits[2] = 0;
- counterDigits[3] = gSaveContext.save.playerData.health / 0x10;
+ counterDigits[3] = gSaveContext.save.saveInfo.playerData.health / 0x10;
while (counterDigits[3] >= 10) {
counterDigits[2]++;
counterDigits[3] -= 10;
@@ -431,10 +431,10 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) {
(slot == SLOT_MAGIC_BEANS)) {
counterDigits[3] = AMMO(gAmmoItems[slot]);
} else if ((slot == SLOT_TRADE_DEED) || (slot == SLOT_TRADE_KEY_MAMA) || (slot == SLOT_TRADE_COUPLE)) {
- counterDigits[3] = gSaveContext.save.inventory.items[slot];
+ counterDigits[3] = gSaveContext.save.saveInfo.inventory.items[slot];
} else if (slot >= SLOT_BOTTLE_1) {
- counterDigits[3] = gSaveContext.save.inventory.items[slot];
- } else if (gSaveContext.save.inventory.items[slot] != ITEM_NONE) {
+ counterDigits[3] = gSaveContext.save.saveInfo.inventory.items[slot];
+ } else if (gSaveContext.save.saveInfo.inventory.items[slot] != ITEM_NONE) {
counterDigits[3] = 1;
}
@@ -461,7 +461,7 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) {
for (j = 0, rectLeft = 204; j < 6; j++, slot++, rectLeft += 14) {
counterDigits[2] = 0;
- if (gSaveContext.save.inventory.items[SLOT_MASK_POSTMAN + slot] != ITEM_NONE) {
+ if (gSaveContext.save.saveInfo.inventory.items[SLOT_MASK_POSTMAN + slot] != ITEM_NONE) {
counterDigits[2] = 1;
}
KaleidoScope_DrawDigit(play, counterDigits[2], rectLeft, rectTop);
@@ -472,7 +472,7 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) {
// Loop over columns (i), (counterDigits[1] stores rectLeft)
for (counterDigits[1] = 44, i = 0; i < 4; i++) {
counterDigits[2] = 0;
- if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOWLA + i)) {
+ if (CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA + i)) {
counterDigits[2] = 1;
}
KaleidoScope_DrawDigit(play, counterDigits[2], counterDigits[1], 112);
@@ -583,7 +583,7 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) {
// Dungeon Items
// Loop over columns (i), (counterDigits[1] stores rectLeft)
for (counterDigits[1] = 129, i = 0; i < 4; i++) {
- counterDigits[2] = gSaveContext.save.inventory.dungeonItems[i] & gEquipMasks[0];
+ counterDigits[2] = gSaveContext.save.saveInfo.inventory.dungeonItems[i] & gEquipMasks[0];
KaleidoScope_DrawDigit(play, counterDigits[2], counterDigits[1], 168);
counterDigits[1] += 12;
}
@@ -591,7 +591,7 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) {
// Stray Fairies
// Loop over columns (i), (counterDigits[1] stores rectLeft)
for (counterDigits[1] = 202, i = 0; i < 4; i++) {
- counterDigits[3] = gSaveContext.save.inventory.strayFairies[i];
+ counterDigits[3] = gSaveContext.save.saveInfo.inventory.strayFairies[i];
counterDigits[2] = counterDigits[3] / 10;
counterDigits[3] -= counterDigits[2] * 10;
if (counterDigits[2] != 0) {
@@ -602,22 +602,22 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) {
}
// Double Defence
- KaleidoScope_DrawDigit(play, gSaveContext.save.playerData.doubleDefense, 44, 202);
+ KaleidoScope_DrawDigit(play, gSaveContext.save.saveInfo.playerData.doubleDefense, 44, 202);
// Magic
- //! @bug should be gSaveContext.save.playerData.doubleMagic
- KaleidoScope_DrawDigit(play, gSaveContext.save.playerData.doubleDefense, 75, 202);
+ //! @bug should be gSaveContext.save.saveInfo.playerData.doubleMagic
+ KaleidoScope_DrawDigit(play, gSaveContext.save.saveInfo.playerData.doubleDefense, 75, 202);
// Lottery
// Loop over columns (i), (counterDigits[1] stores rectLeft)
for (counterDigits[1] = 139, i = 0; i < 3; i++) {
- counterDigits[2] = gSaveContext.save.lotteryCodes[0][i];
+ counterDigits[2] = gSaveContext.save.saveInfo.lotteryCodes[0][i];
KaleidoScope_DrawDigit(play, counterDigits[2], counterDigits[1], 184);
- counterDigits[2] = gSaveContext.save.lotteryCodes[1][i];
+ counterDigits[2] = gSaveContext.save.saveInfo.lotteryCodes[1][i];
KaleidoScope_DrawDigit(play, counterDigits[2], counterDigits[1], 198);
- counterDigits[2] = gSaveContext.save.lotteryCodes[2][i];
+ counterDigits[2] = gSaveContext.save.saveInfo.lotteryCodes[2][i];
KaleidoScope_DrawDigit(play, counterDigits[2], counterDigits[1], 212);
counterDigits[1] += 12;
@@ -626,7 +626,7 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) {
// Oceanside Spider House Mask Order
// Loop over columns (i), (counterDigits[1] stores rectLeft)
for (counterDigits[1] = 217, i = 0; i < 6; i++) {
- counterDigits[2] = gSaveContext.save.spiderHouseMaskOrder[i];
+ counterDigits[2] = gSaveContext.save.saveInfo.spiderHouseMaskOrder[i];
KaleidoScope_DrawDigit(play, counterDigits[2], counterDigits[1], 186);
counterDigits[1] += 12;
@@ -635,7 +635,7 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) {
// Bombers code
// Loop over columns (i), (counterDigits[1] stores rectLeft)
for (counterDigits[1] = 220, i = 0; i < 5; i++) {
- counterDigits[2] = gSaveContext.save.bomberCode[i];
+ counterDigits[2] = gSaveContext.save.saveInfo.bomberCode[i];
KaleidoScope_DrawDigit(play, counterDigits[2], counterDigits[1], 210);
counterDigits[1] += 12;
@@ -709,24 +709,24 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) {
case INV_EDITOR_SECTION_RUPEE:
// Rupees
if (CHECK_BTN_ALL(input->press.button, BTN_CUP)) {
- gSaveContext.save.playerData.rupees -= 100;
- if (gSaveContext.save.playerData.rupees < 0) {
- gSaveContext.save.playerData.rupees = 0;
+ gSaveContext.save.saveInfo.playerData.rupees -= 100;
+ if (gSaveContext.save.saveInfo.playerData.rupees < 0) {
+ gSaveContext.save.saveInfo.playerData.rupees = 0;
}
} else if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN)) {
- gSaveContext.save.playerData.rupees += 100;
- if (gSaveContext.save.playerData.rupees >= 9999) {
- gSaveContext.save.playerData.rupees = 9999;
+ gSaveContext.save.saveInfo.playerData.rupees += 100;
+ if (gSaveContext.save.saveInfo.playerData.rupees >= 9999) {
+ gSaveContext.save.saveInfo.playerData.rupees = 9999;
}
} else if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) {
- gSaveContext.save.playerData.rupees--;
- if (gSaveContext.save.playerData.rupees < 0) {
- gSaveContext.save.playerData.rupees = 0;
+ gSaveContext.save.saveInfo.playerData.rupees--;
+ if (gSaveContext.save.saveInfo.playerData.rupees < 0) {
+ gSaveContext.save.saveInfo.playerData.rupees = 0;
}
} else if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) {
- gSaveContext.save.playerData.rupees++;
- if (gSaveContext.save.playerData.rupees >= 9999) {
- gSaveContext.save.playerData.rupees = 9999;
+ gSaveContext.save.saveInfo.playerData.rupees++;
+ if (gSaveContext.save.saveInfo.playerData.rupees >= 9999) {
+ gSaveContext.save.saveInfo.playerData.rupees = 9999;
}
}
break;
@@ -734,15 +734,15 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) {
case INV_EDITOR_SECTION_HEALTH_CAPACITY:
// Health Capacity
if (CHECK_BTN_ALL(input->press.button, BTN_CUP) || CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) {
- gSaveContext.save.playerData.healthCapacity -= 0x10;
- if (gSaveContext.save.playerData.healthCapacity < 0x30) {
- gSaveContext.save.playerData.healthCapacity = 0x30;
+ gSaveContext.save.saveInfo.playerData.healthCapacity -= 0x10;
+ if (gSaveContext.save.saveInfo.playerData.healthCapacity < 0x30) {
+ gSaveContext.save.saveInfo.playerData.healthCapacity = 0x30;
}
} else if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN) ||
CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) {
- gSaveContext.save.playerData.healthCapacity += 0x10;
- if (gSaveContext.save.playerData.healthCapacity >= 0x140) {
- gSaveContext.save.playerData.healthCapacity = 0x140;
+ gSaveContext.save.saveInfo.playerData.healthCapacity += 0x10;
+ if (gSaveContext.save.saveInfo.playerData.healthCapacity >= 0x140) {
+ gSaveContext.save.saveInfo.playerData.healthCapacity = 0x140;
}
}
break;
@@ -806,48 +806,48 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) {
} else if (slot == SLOT_TRADE_DEED) {
if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) {
if (INV_CONTENT(ITEM_MOON_TEAR) == ITEM_NONE) {
- gSaveContext.save.inventory.items[slot] = ITEM_MOON_TEAR;
+ gSaveContext.save.saveInfo.inventory.items[slot] = ITEM_MOON_TEAR;
} else if ((INV_CONTENT(ITEM_MOON_TEAR) >= ITEM_MOON_TEAR) &&
(INV_CONTENT(ITEM_MOON_TEAR) <= ITEM_DEED_MOUNTAIN)) {
- gSaveContext.save.inventory.items[slot] = INV_CONTENT(ITEM_MOON_TEAR) + 1;
+ gSaveContext.save.saveInfo.inventory.items[slot] = INV_CONTENT(ITEM_MOON_TEAR) + 1;
}
} else if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) {
if (INV_CONTENT(ITEM_MOON_TEAR) == ITEM_NONE) {
- gSaveContext.save.inventory.items[slot] = ITEM_DEED_OCEAN;
+ gSaveContext.save.saveInfo.inventory.items[slot] = ITEM_DEED_OCEAN;
} else if ((INV_CONTENT(ITEM_MOON_TEAR) >= ITEM_DEED_LAND) &&
(INV_CONTENT(ITEM_MOON_TEAR) <= ITEM_DEED_OCEAN)) {
- gSaveContext.save.inventory.items[slot] = INV_CONTENT(ITEM_MOON_TEAR) - 1;
+ gSaveContext.save.saveInfo.inventory.items[slot] = INV_CONTENT(ITEM_MOON_TEAR) - 1;
}
}
} else if (slot == SLOT_TRADE_KEY_MAMA) {
if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) {
if (INV_CONTENT(ITEM_ROOM_KEY) == ITEM_NONE) {
- gSaveContext.save.inventory.items[slot] = ITEM_ROOM_KEY;
+ gSaveContext.save.saveInfo.inventory.items[slot] = ITEM_ROOM_KEY;
} else if ((INV_CONTENT(ITEM_ROOM_KEY) >= ITEM_ROOM_KEY) &&
(INV_CONTENT(ITEM_ROOM_KEY) <= ITEM_ROOM_KEY)) {
- gSaveContext.save.inventory.items[slot] = INV_CONTENT(ITEM_ROOM_KEY) + 1;
+ gSaveContext.save.saveInfo.inventory.items[slot] = INV_CONTENT(ITEM_ROOM_KEY) + 1;
}
} else if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) {
if (INV_CONTENT(ITEM_ROOM_KEY) == ITEM_NONE) {
- gSaveContext.save.inventory.items[slot] = ITEM_LETTER_MAMA;
+ gSaveContext.save.saveInfo.inventory.items[slot] = ITEM_LETTER_MAMA;
} else if ((INV_CONTENT(ITEM_ROOM_KEY) >= ITEM_LETTER_MAMA) &&
(INV_CONTENT(ITEM_ROOM_KEY) <= ITEM_LETTER_MAMA)) {
- gSaveContext.save.inventory.items[slot] = INV_CONTENT(ITEM_ROOM_KEY) - 1;
+ gSaveContext.save.saveInfo.inventory.items[slot] = INV_CONTENT(ITEM_ROOM_KEY) - 1;
}
}
} else if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) {
if (INV_CONTENT(ITEM_LETTER_TO_KAFEI) == ITEM_NONE) {
- gSaveContext.save.inventory.items[slot] = ITEM_LETTER_TO_KAFEI;
+ gSaveContext.save.saveInfo.inventory.items[slot] = ITEM_LETTER_TO_KAFEI;
} else if ((INV_CONTENT(ITEM_LETTER_TO_KAFEI) >= ITEM_LETTER_TO_KAFEI) &&
(INV_CONTENT(ITEM_LETTER_TO_KAFEI) <= ITEM_LETTER_TO_KAFEI)) {
- gSaveContext.save.inventory.items[slot] = INV_CONTENT(ITEM_LETTER_TO_KAFEI) + 1;
+ gSaveContext.save.saveInfo.inventory.items[slot] = INV_CONTENT(ITEM_LETTER_TO_KAFEI) + 1;
}
} else if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) {
if (INV_CONTENT(ITEM_LETTER_TO_KAFEI) == ITEM_NONE) {
- gSaveContext.save.inventory.items[slot] = ITEM_PENDANT_OF_MEMORIES;
+ gSaveContext.save.saveInfo.inventory.items[slot] = ITEM_PENDANT_OF_MEMORIES;
} else if ((INV_CONTENT(ITEM_LETTER_TO_KAFEI) >= ITEM_PENDANT_OF_MEMORIES) &&
(INV_CONTENT(ITEM_LETTER_TO_KAFEI) <= ITEM_PENDANT_OF_MEMORIES)) {
- gSaveContext.save.inventory.items[slot] = INV_CONTENT(ITEM_LETTER_TO_KAFEI) - 1;
+ gSaveContext.save.saveInfo.inventory.items[slot] = INV_CONTENT(ITEM_LETTER_TO_KAFEI) - 1;
}
}
} else if ((slot >= SLOT_BOTTLE_1) && (slot <= SLOT_BOTTLE_6)) {
@@ -855,18 +855,20 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) {
value = ITEM_BOTTLE + slot - SLOT_BOTTLE_1;
Inventory_DeleteItem(value, SLOT(ITEM_BOTTLE) + slot - SLOT_BOTTLE_1);
} else if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) {
- if (gSaveContext.save.inventory.items[slot] == ITEM_NONE) {
- gSaveContext.save.inventory.items[slot] = ITEM_BOTTLE;
- } else if ((gSaveContext.save.inventory.items[slot] >= ITEM_BOTTLE) &&
- (gSaveContext.save.inventory.items[slot] <= ITEM_HYLIAN_LOACH)) {
- gSaveContext.save.inventory.items[slot] = gSaveContext.save.inventory.items[slot] + 1;
+ if (gSaveContext.save.saveInfo.inventory.items[slot] == ITEM_NONE) {
+ gSaveContext.save.saveInfo.inventory.items[slot] = ITEM_BOTTLE;
+ } else if ((gSaveContext.save.saveInfo.inventory.items[slot] >= ITEM_BOTTLE) &&
+ (gSaveContext.save.saveInfo.inventory.items[slot] <= ITEM_HYLIAN_LOACH)) {
+ gSaveContext.save.saveInfo.inventory.items[slot] =
+ gSaveContext.save.saveInfo.inventory.items[slot] + 1;
}
} else if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) {
- if (gSaveContext.save.inventory.items[slot] == ITEM_NONE) {
- gSaveContext.save.inventory.items[slot] = ITEM_OBABA_DRINK;
- } else if ((gSaveContext.save.inventory.items[slot] >= ITEM_POTION_RED) &&
- (gSaveContext.save.inventory.items[slot] <= ITEM_OBABA_DRINK)) {
- gSaveContext.save.inventory.items[slot] = gSaveContext.save.inventory.items[slot] - 1;
+ if (gSaveContext.save.saveInfo.inventory.items[slot] == ITEM_NONE) {
+ gSaveContext.save.saveInfo.inventory.items[slot] = ITEM_OBABA_DRINK;
+ } else if ((gSaveContext.save.saveInfo.inventory.items[slot] >= ITEM_POTION_RED) &&
+ (gSaveContext.save.saveInfo.inventory.items[slot] <= ITEM_OBABA_DRINK)) {
+ gSaveContext.save.saveInfo.inventory.items[slot] =
+ gSaveContext.save.saveInfo.inventory.items[slot] - 1;
}
}
} else {
@@ -874,7 +876,7 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) {
CHECK_BTN_ALL(input->press.button, BTN_CDOWN) ||
CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) {
value = sSlotItems[slot];
- if (gSaveContext.save.inventory.items[slot] == ITEM_NONE) {
+ if (gSaveContext.save.saveInfo.inventory.items[slot] == ITEM_NONE) {
INV_CONTENT(value) = value;
} else {
Inventory_DeleteItem(value, slot);
@@ -894,10 +896,10 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) {
SET_EQUIP_VALUE(EQUIP_TYPE_SWORD, value);
if (value != 0) {
- BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = value + (ITEM_SWORD_KOKIRI - 1);
- gSaveContext.save.playerData.swordHealth = 100;
+ CUR_FORM_EQUIP(EQUIP_SLOT_B) = value + (ITEM_SWORD_KOKIRI - 1);
+ gSaveContext.save.saveInfo.playerData.swordHealth = 100;
} else {
- BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_NONE;
+ CUR_FORM_EQUIP(EQUIP_SLOT_B) = ITEM_NONE;
}
} else if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN) ||
@@ -909,8 +911,8 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) {
SET_EQUIP_VALUE(EQUIP_TYPE_SWORD, value);
- BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = value + (ITEM_SWORD_KOKIRI - 1);
- gSaveContext.save.playerData.swordHealth = 100;
+ CUR_FORM_EQUIP(EQUIP_SLOT_B) = value + (ITEM_SWORD_KOKIRI - 1);
+ gSaveContext.save.saveInfo.playerData.swordHealth = 100;
}
Interface_LoadItemIconImpl(play, EQUIP_SLOT_B);
@@ -974,41 +976,43 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) {
} else if (sCurSection == INV_EDITOR_SECTION_SWAMP_GOLD_SKULLS) {
// Gold Skulls (Swamp Spider House)
if (CHECK_BTN_ALL(input->press.button, BTN_CUP) || CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) {
- if (((gSaveContext.save.skullTokenCount & 0xFFFF0000) >> 0x10) != 0) {
- gSaveContext.save.skullTokenCount =
- ((u16)(((gSaveContext.save.skullTokenCount & 0xFFFF0000) >> 0x10) - 1) << 0x10) |
- (gSaveContext.save.skullTokenCount & 0xFFFF);
+ if (((gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF0000) >> 0x10) != 0) {
+ gSaveContext.save.saveInfo.skullTokenCount =
+ ((u16)(((gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF0000) >> 0x10) - 1) << 0x10) |
+ (gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF);
}
} else if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN) ||
CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) {
- gSaveContext.save.skullTokenCount =
- ((u16)(((gSaveContext.save.skullTokenCount & 0xFFFF0000) >> 0x10) + 1) << 0x10) |
- (gSaveContext.save.skullTokenCount & 0xFFFF);
+ gSaveContext.save.saveInfo.skullTokenCount =
+ ((u16)(((gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF0000) >> 0x10) + 1) << 0x10) |
+ (gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF);
}
} else if (sCurSection == INV_EDITOR_SECTION_OCEAN_GOLD_SKULLS) {
// Gold Skulls (Oceans Spider House)
if (CHECK_BTN_ALL(input->press.button, BTN_CUP) || CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) {
- if (((u16)gSaveContext.save.skullTokenCount) != 0) {
- gSaveContext.save.skullTokenCount = (((u16)gSaveContext.save.skullTokenCount - 1) & 0xFFFF) |
- (gSaveContext.save.skullTokenCount & 0xFFFF0000);
+ if (((u16)gSaveContext.save.saveInfo.skullTokenCount) != 0) {
+ gSaveContext.save.saveInfo.skullTokenCount =
+ (((u16)gSaveContext.save.saveInfo.skullTokenCount - 1) & 0xFFFF) |
+ (gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF0000);
}
} else if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN) ||
CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) {
- gSaveContext.save.skullTokenCount = (((u16)gSaveContext.save.skullTokenCount + 1) & 0xFFFF) |
- (gSaveContext.save.skullTokenCount & 0xFFFF0000);
+ gSaveContext.save.saveInfo.skullTokenCount =
+ (((u16)gSaveContext.save.saveInfo.skullTokenCount + 1) & 0xFFFF) |
+ (gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF0000);
}
} else if (sCurSection == INV_EDITOR_SECTION_NOTEBOOK) {
// Bombers Notebook
if (CHECK_BTN_ALL(input->press.button, BTN_CUP) || CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) {
- gSaveContext.save.inventory.questItems ^= gBitFlags[QUEST_BOMBERS_NOTEBOOK];
+ gSaveContext.save.saveInfo.inventory.questItems ^= gBitFlags[QUEST_BOMBERS_NOTEBOOK];
}
} else if (sCurSection == INV_EDITOR_SECTION_LULLABY_INTRO) {
// Goron Lullaby Intro
if (CHECK_BTN_ALL(input->press.button, BTN_CUP) || CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) {
- gSaveContext.save.inventory.questItems ^= gBitFlags[QUEST_SONG_LULLABY_INTRO];
+ gSaveContext.save.saveInfo.inventory.questItems ^= gBitFlags[QUEST_SONG_LULLABY_INTRO];
}
} else if (sCurSection < INV_EDITOR_SECTION_LULLABY_INTRO) {
@@ -1017,7 +1021,7 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) {
//! have also been taken
slot = sCurSection - INV_EDITOR_SECTION_BOSS;
if (CHECK_BTN_ALL(input->press.button, BTN_CUP) || CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) {
- gSaveContext.save.inventory.questItems ^= gBitFlags[slot];
+ gSaveContext.save.saveInfo.inventory.questItems ^= gBitFlags[slot];
}
} else if (sCurSection < INV_EDITOR_SECTION_DUNGEON_ITEMS) {
@@ -1045,30 +1049,30 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) {
slot = sCurSection - INV_EDITOR_SECTION_DUNGEON_ITEMS;
if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) {
// Map
- gSaveContext.save.inventory.dungeonItems[slot] ^= 4;
+ gSaveContext.save.saveInfo.inventory.dungeonItems[slot] ^= 4;
}
if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN)) {
// Compass
- gSaveContext.save.inventory.dungeonItems[slot] ^= 2;
+ gSaveContext.save.saveInfo.inventory.dungeonItems[slot] ^= 2;
}
if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) {
// Boss Key
- gSaveContext.save.inventory.dungeonItems[slot] ^= 1;
+ gSaveContext.save.saveInfo.inventory.dungeonItems[slot] ^= 1;
}
} else if (sCurSection < INV_EDITOR_SECTION_DOUBLE_DEFENSE) {
// Stray Fairies
slot = sCurSection - INV_EDITOR_SECTION_STRAY_FAIRIES;
if (CHECK_BTN_ALL(input->press.button, BTN_CUP) || CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) {
- gSaveContext.save.inventory.strayFairies[slot]--;
- if (gSaveContext.save.inventory.strayFairies[slot] < 0) {
- gSaveContext.save.inventory.strayFairies[slot] = 0;
+ gSaveContext.save.saveInfo.inventory.strayFairies[slot]--;
+ if (gSaveContext.save.saveInfo.inventory.strayFairies[slot] < 0) {
+ gSaveContext.save.saveInfo.inventory.strayFairies[slot] = 0;
}
} else if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN) ||
CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) {
- gSaveContext.save.inventory.strayFairies[slot]++;
- if (gSaveContext.save.inventory.strayFairies[slot] >= 99) {
- gSaveContext.save.inventory.strayFairies[slot] = 99;
+ gSaveContext.save.saveInfo.inventory.strayFairies[slot]++;
+ if (gSaveContext.save.saveInfo.inventory.strayFairies[slot] >= 99) {
+ gSaveContext.save.saveInfo.inventory.strayFairies[slot] = 99;
}
}
@@ -1076,11 +1080,11 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) {
// Double Defence
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.playerData.doubleDefense ^= 1;
- if (!gSaveContext.save.playerData.doubleDefense) {
- gSaveContext.save.inventory.defenseHearts = 0;
+ gSaveContext.save.saveInfo.playerData.doubleDefense ^= 1;
+ if (!gSaveContext.save.saveInfo.playerData.doubleDefense) {
+ gSaveContext.save.saveInfo.inventory.defenseHearts = 0;
} else {
- gSaveContext.save.inventory.defenseHearts = 20;
+ gSaveContext.save.saveInfo.inventory.defenseHearts = 20;
}
}
}
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 be23b56de..149b72444 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
@@ -15,7 +15,7 @@ s16 sEquipMagicArrowSlotHoldTimer = 0;
// Number of frames to move icon from slot to target position when equipping.
s16 sEquipAnimTimer = 10;
-u8 gPlayerFormSlotRestrictions[PLAYER_FORM_MAX][24] = {
+u8 gPlayerFormSlotRestrictions[PLAYER_FORM_MAX][NUM_ITEM_SLOTS] = {
// Fierce Deity
{
false, // SLOT_OCARINA
@@ -223,13 +223,15 @@ void KaleidoScope_DrawAmmoCount(PauseContext* pauseCtx, GraphicsContext* gfxCtx,
// Draw upper digit
if (ammoUpperDigit != 0) {
- POLY_OPA_DISP = func_8010CD98(POLY_OPA_DISP, ((u8*)gAmmoDigit0Tex + (8 * 8 * ammoUpperDigit)), 8, 8,
- sAmmoRectLeft[ammoIndex], sAmmoRectHeight[ammoIndex], 8, 8, 1 << 10, 1 << 10);
+ POLY_OPA_DISP =
+ Gfx_DrawTexRectIA8(POLY_OPA_DISP, ((u8*)gAmmoDigit0Tex + (8 * 8 * ammoUpperDigit)), 8, 8,
+ sAmmoRectLeft[ammoIndex], sAmmoRectHeight[ammoIndex], 8, 8, 1 << 10, 1 << 10);
}
// Draw lower digit
- POLY_OPA_DISP = func_8010CD98(POLY_OPA_DISP, ((u8*)gAmmoDigit0Tex + (8 * 8 * ammo)), 8, 8,
- sAmmoRectLeft[ammoIndex] + 6, sAmmoRectHeight[ammoIndex], 8, 8, 1 << 10, 1 << 10);
+ POLY_OPA_DISP =
+ Gfx_DrawTexRectIA8(POLY_OPA_DISP, ((u8*)gAmmoDigit0Tex + (8 * 8 * ammo)), 8, 8, sAmmoRectLeft[ammoIndex] + 6,
+ sAmmoRectHeight[ammoIndex], 8, 8, 1 << 10, 1 << 10);
CLOSE_DISPS(gfxCtx);
}
@@ -239,9 +241,9 @@ void KaleidoScope_SetCursorVtx(PauseContext* pauseCtx, u16 index, Vtx* vtx) {
pauseCtx->cursorVtx[0].v.ob[1] = vtx[index].v.ob[1];
}
-s16 sMagicArrowEffectsR[] = { 255, 100, 255 };
-s16 sMagicArrowEffectsG[] = { 0, 100, 255 };
-s16 sMagicArrowEffectsB[] = { 0, 255, 100 };
+static s16 sMagicArrowEffectsR[] = { 255, 100, 255 };
+static s16 sMagicArrowEffectsG[] = { 0, 100, 255 };
+static s16 sMagicArrowEffectsB[] = { 0, 255, 100 };
void KaleidoScope_DrawItemSelect(PlayState* play) {
PauseContext* pauseCtx = &play->pauseCtx;
@@ -256,11 +258,11 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
// Loop over c-buttons (i) and vtx offset (j)
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
- for (i = 0, j = 24 * 4; i < 3; i++, j += 4) {
+ for (i = 0, j = NUM_ITEM_SLOTS * 4; i < 3; i++, j += 4) {
if (GET_CUR_FORM_BTN_ITEM(i + 1) != ITEM_NONE) {
- if (GET_CUR_FORM_BTN_SLOT(i + 1) < 24) {
+ if (GET_CUR_FORM_BTN_SLOT(i + 1) < NUM_ITEM_SLOTS) {
gSPVertex(POLY_OPA_DISP++, &pauseCtx->itemVtx[j], 4, 0);
- POLY_OPA_DISP = func_8010DC58(POLY_OPA_DISP, gEquippedItemOutlineTex, 32, 32, 0);
+ POLY_OPA_DISP = Gfx_DrawTexQuadIA8(POLY_OPA_DISP, gEquippedItemOutlineTex, 32, 32, 0);
}
}
}
@@ -270,11 +272,12 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
// Draw the item icons
// Loop over slots (i) and vtx offset (j)
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
- for (j = 0, i = 0; i < 24; i++, j += 4) {
+ for (j = 0, i = 0; i < NUM_ITEM_SLOTS; i++, j += 4) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
- if (((void)0, gSaveContext.save.inventory.items[i]) != ITEM_NONE) {
- if ((pauseCtx->unk_200 == 0) && (pauseCtx->pageIndex == PAUSE_ITEM) && (pauseCtx->cursorSpecialPos == 0) &&
+ if (((void)0, gSaveContext.save.saveInfo.inventory.items[i]) != ITEM_NONE) {
+ if ((pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) && (pauseCtx->pageIndex == PAUSE_ITEM) &&
+ (pauseCtx->cursorSpecialPos == 0) &&
gPlayerFormSlotRestrictions[(void)0, gSaveContext.save.playerForm][i]) {
if ((sEquipState == EQUIP_STATE_MAGIC_ARROW_HOVER_OVER_BOW_SLOT) && (i == SLOT_ARROW_ICE)) {
// Possible bug:
@@ -306,24 +309,25 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
}
gSPVertex(POLY_OPA_DISP++, &pauseCtx->itemVtx[j + 0], 4, 0);
- KaleidoScope_DrawQuadTextureRGBA32(play->state.gfxCtx,
- gItemIcons[((void)0, gSaveContext.save.inventory.items[i])], 32, 32, 0);
+ KaleidoScope_DrawTexQuadRGBA32(
+ play->state.gfxCtx, gItemIcons[((void)0, gSaveContext.save.saveInfo.inventory.items[i])], 32, 32, 0);
}
}
// Draw the ammo digits
if (pauseCtx->pageIndex == PAUSE_ITEM) {
- if ((pauseCtx->state == 6) && ((pauseCtx->unk_200 == 0) || (pauseCtx->unk_200 == 3)) &&
- (pauseCtx->state != 7) && ((pauseCtx->state < 8) || (pauseCtx->state >= 0x13))) {
+ 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);
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
// Loop over slots (i) and ammoIndex (j)
- for (j = 0, i = 0; i < 24; i++) {
+ for (j = 0, i = 0; i < NUM_ITEM_SLOTS; i++) {
if (gAmmoItems[i] != ITEM_NONE) {
- if (((void)0, gSaveContext.save.inventory.items[i]) != ITEM_NONE) {
+ if (((void)0, gSaveContext.save.saveInfo.inventory.items[i]) != ITEM_NONE) {
KaleidoScope_DrawAmmoCount(pauseCtx, play->state.gfxCtx,
- ((void)0, gSaveContext.save.inventory.items[i]), j);
+ ((void)0, gSaveContext.save.saveInfo.inventory.items[i]), j);
}
j++;
}
@@ -354,11 +358,11 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
s16 moveCursorResult;
s16 pad2;
- pauseCtx->cursorColorSet = 0;
- pauseCtx->nameColorSet = 0;
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_WHITE;
+ pauseCtx->nameColorSet = PAUSE_NAME_COLOR_SET_WHITE;
- if ((pauseCtx->state == 6) && (pauseCtx->unk_200 == 0) && (pauseCtx->pageIndex == PAUSE_ITEM) &&
- !pauseCtx->itemDescriptionOn) {
+ if ((pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) &&
+ (pauseCtx->pageIndex == PAUSE_ITEM) && !pauseCtx->itemDescriptionOn) {
moveCursorResult = PAUSE_CURSOR_RESULT_NONE;
oldCursorPoint = pauseCtx->cursorPoint[PAUSE_ITEM];
@@ -367,7 +371,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
// Move cursor left/right
if (pauseCtx->cursorSpecialPos == 0) {
// cursor is currently on a slot
- pauseCtx->cursorColorSet = 2;
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_YELLOW;
if (ABS_ALT(pauseCtx->stickAdjX) > 30) {
cursorPoint = pauseCtx->cursorPoint[PAUSE_ITEM];
@@ -394,7 +398,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
pauseCtx->cursorPoint[PAUSE_ITEM] =
pauseCtx->cursorXIndex[PAUSE_ITEM] + (pauseCtx->cursorYIndex[PAUSE_ITEM] * 6);
- if (pauseCtx->cursorPoint[PAUSE_ITEM] >= 24) {
+ if (pauseCtx->cursorPoint[PAUSE_ITEM] >= NUM_ITEM_SLOTS) {
pauseCtx->cursorPoint[PAUSE_ITEM] = pauseCtx->cursorXIndex[PAUSE_ITEM];
}
@@ -425,7 +429,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
pauseCtx->cursorPoint[PAUSE_ITEM] =
pauseCtx->cursorXIndex[PAUSE_ITEM] + (pauseCtx->cursorYIndex[PAUSE_ITEM] * 6);
- if (pauseCtx->cursorPoint[PAUSE_ITEM] >= 24) {
+ if (pauseCtx->cursorPoint[PAUSE_ITEM] >= NUM_ITEM_SLOTS) {
pauseCtx->cursorPoint[PAUSE_ITEM] = pauseCtx->cursorXIndex[PAUSE_ITEM];
}
@@ -442,7 +446,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
}
if (moveCursorResult == PAUSE_CURSOR_RESULT_SLOT) {
- cursorItem = gSaveContext.save.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]];
+ cursorItem = gSaveContext.save.saveInfo.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]];
}
}
} else if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) {
@@ -455,7 +459,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
// Search for slot to move to
while (true) {
// Check if current cursor has an item in its slot
- if (gSaveContext.save.inventory.items[cursorPoint] != ITEM_NONE) {
+ if (gSaveContext.save.saveInfo.inventory.items[cursorPoint] != ITEM_NONE) {
pauseCtx->cursorPoint[PAUSE_ITEM] = cursorPoint;
pauseCtx->cursorXIndex[PAUSE_ITEM] = cursorXIndex;
pauseCtx->cursorYIndex[PAUSE_ITEM] = cursorYIndex;
@@ -493,7 +497,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
// Search for slot to move to
while (true) {
// Check if current cursor has an item in its slot
- if (gSaveContext.save.inventory.items[cursorPoint] != ITEM_NONE) {
+ if (gSaveContext.save.saveInfo.inventory.items[cursorPoint] != ITEM_NONE) {
pauseCtx->cursorPoint[PAUSE_ITEM] = cursorPoint;
pauseCtx->cursorXIndex[PAUSE_ITEM] = cursorXIndex;
pauseCtx->cursorYIndex[PAUSE_ITEM] = cursorYIndex;
@@ -561,17 +565,17 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
}
cursorSlot = pauseCtx->cursorPoint[PAUSE_ITEM];
- pauseCtx->cursorColorSet = 2;
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_YELLOW;
if (moveCursorResult == PAUSE_CURSOR_RESULT_SLOT) {
- cursorItem = gSaveContext.save.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]];
+ cursorItem = gSaveContext.save.saveInfo.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]];
} else if (moveCursorResult != PAUSE_CURSOR_RESULT_SPECIAL_POS) {
- cursorItem = gSaveContext.save.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]];
+ cursorItem = gSaveContext.save.saveInfo.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]];
}
if (cursorItem == ITEM_NONE) {
cursorItem = PAUSE_ITEM_NONE;
- pauseCtx->cursorColorSet = 0;
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_WHITE;
}
if ((cursorItem != (u32)PAUSE_ITEM_NONE) && (msgCtx->msgLength == 0)) {
@@ -591,7 +595,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
if (cursorItem != PAUSE_ITEM_NONE) {
// Equip item to the C buttons
if ((pauseCtx->debugEditor == DEBUG_EDITOR_NONE) && !pauseCtx->itemDescriptionOn &&
- (pauseCtx->state == 6) && (pauseCtx->unk_200 == 0) &&
+ (pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) &&
CHECK_BTN_ANY(CONTROLLER1(&play->state)->press.button, BTN_CLEFT | BTN_CDOWN | BTN_CRIGHT)) {
// Ensure that a transformation mask can not be unequipped while being used
@@ -645,7 +649,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
// Equip item to the C buttons
pauseCtx->equipTargetItem = cursorItem;
pauseCtx->equipTargetSlot = cursorSlot;
- pauseCtx->unk_200 = 3;
+ pauseCtx->mainState = PAUSE_MAIN_STATE_EQUIP_ITEM;
vtxIndex = cursorSlot * 4;
pauseCtx->equipAnimX = pauseCtx->itemVtx[vtxIndex].v.ob[0] * 10;
pauseCtx->equipAnimY = pauseCtx->itemVtx[vtxIndex].v.ob[1] * 10;
@@ -671,9 +675,9 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
} else {
play_sound(NA_SE_SY_DECIDE);
}
- } else if ((pauseCtx->debugEditor == DEBUG_EDITOR_NONE) && (pauseCtx->state == 6) &&
- (pauseCtx->unk_200 == 0) && CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) &&
- (msgCtx->msgLength == 0)) {
+ } else if ((pauseCtx->debugEditor == DEBUG_EDITOR_NONE) && (pauseCtx->state == PAUSE_STATE_MAIN) &&
+ (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) &&
+ CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) && (msgCtx->msgLength == 0)) {
// Give description on item through a message box
pauseCtx->itemDescriptionOn = true;
if (pauseCtx->cursorYIndex[PAUSE_ITEM] < 2) {
@@ -690,8 +694,8 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
if (oldCursorPoint != pauseCtx->cursorPoint[PAUSE_ITEM]) {
play_sound(NA_SE_SY_CURSOR);
}
- } else if ((pauseCtx->unk_200 == 3) && (pauseCtx->pageIndex == PAUSE_ITEM)) {
- pauseCtx->cursorColorSet = 2;
+ } else if ((pauseCtx->mainState == PAUSE_MAIN_STATE_EQUIP_ITEM) && (pauseCtx->pageIndex == PAUSE_ITEM)) {
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_YELLOW;
}
}
@@ -983,7 +987,7 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) {
}
// Reset params
- pauseCtx->unk_200 = 0;
+ pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE;
sEquipAnimTimer = 10;
pauseCtx->equipAnimScale = 320;
pauseCtx->equipAnimShrinkRate = 40;
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 5f4c136e0..ab598723f 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
@@ -13,7 +13,7 @@
extern s16 D_8082B7F0[];
extern s16 D_8082B838[];
-extern TexturePtr D_09007500; // gPlayerFace
+extern TexturePtr D_09007500; // gPlayerFaceIcon
#define WORLD_MAP_IMAGE_TEX_WIDTH 216
#define WORLD_MAP_IMAGE_TEX_HEIGHT 128
@@ -35,8 +35,8 @@ void KaleidoScope_DrawDungeonStrayFairyCount(PlayState* play) {
gDPPipeSync(POLY_OPA_DISP++);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, 255);
- POLY_OPA_DISP = func_8010D7D0(POLY_OPA_DISP, (u8*)gCounterDigit0Tex + (8 * 16 * counterDigits[digitIndex]), 8,
- 16, rectLeft + 1, 146, 8, 16, 1 << 10, 1 << 10);
+ POLY_OPA_DISP = Gfx_DrawTexRectI8(POLY_OPA_DISP, (u8*)gCounterDigit0Tex + (8 * 16 * counterDigits[digitIndex]),
+ 8, 16, rectLeft + 1, 146, 8, 16, 1 << 10, 1 << 10);
gDPPipeSync(POLY_OPA_DISP++);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
@@ -50,7 +50,7 @@ void KaleidoScope_DrawDungeonStrayFairyCount(PlayState* play) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, 255);
POLY_OPA_DISP =
- func_8010D7D0(POLY_OPA_DISP, gStrayFairyMapCounterSlashTex, 8, 16, 107, 146, 8, 16, 1 << 10, 1 << 10);
+ Gfx_DrawTexRectI8(POLY_OPA_DISP, gStrayFairyMapCounterSlashTex, 8, 16, 107, 146, 8, 16, 1 << 10, 1 << 10);
gDPPipeSync(POLY_OPA_DISP++);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
@@ -59,7 +59,7 @@ void KaleidoScope_DrawDungeonStrayFairyCount(PlayState* play) {
1 << 10);
// Get digits for current number of stray fairies collected
- counterDigits[1] = gSaveContext.save.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex];
+ counterDigits[1] = gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex];
counterDigits[0] = counterDigits[1] / 10;
counterDigits[1] -= (s16)(counterDigits[0] * 10);
@@ -68,8 +68,8 @@ void KaleidoScope_DrawDungeonStrayFairyCount(PlayState* play) {
gDPPipeSync(POLY_OPA_DISP++);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, 255);
- POLY_OPA_DISP = func_8010D7D0(POLY_OPA_DISP, (u8*)gCounterDigit0Tex + (8 * 16 * counterDigits[digitIndex]), 8,
- 16, rectLeft + 1, 146, 8, 16, 1 << 10, 1 << 10);
+ POLY_OPA_DISP = Gfx_DrawTexRectI8(POLY_OPA_DISP, (u8*)gCounterDigit0Tex + (8 * 16 * counterDigits[digitIndex]),
+ 8, 16, rectLeft + 1, 146, 8, 16, 1 << 10, 1 << 10);
gDPPipeSync(POLY_OPA_DISP++);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255);
@@ -159,7 +159,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) {
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA);
POLY_OPA_DISP =
- func_8010DC58(POLY_OPA_DISP, sDungeonTitleTextures[((void)0, gSaveContext.dungeonIndex)], 128, 16, 0);
+ Gfx_DrawTexQuadIA8(POLY_OPA_DISP, sDungeonTitleTextures[((void)0, gSaveContext.dungeonIndex)], 128, 16, 0);
gDPPipeSync(POLY_OPA_DISP++);
@@ -168,11 +168,11 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) {
// Loop over dungeonItems (i) and vtxIndex (j)
for (i = DUNGEON_BOSS_KEY, j = 4; i <= DUNGEON_STRAY_FAIRIES; i++, j += 4) {
if (i == DUNGEON_STRAY_FAIRIES) {
- if ((pauseCtx->pageIndex == PAUSE_MAP) && (pauseCtx->unk_200 == 0)) {
- // If (pauseCtx->state == 6), then the other conditions are redundant and
+ if ((pauseCtx->pageIndex == PAUSE_MAP) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE)) {
+ // If (pauseCtx->state == PAUSE_STATE_MAIN), then the other conditions are redundant and
// always return true
- if ((pauseCtx->state == 6) && (pauseCtx->state != 7) &&
- !((pauseCtx->state >= 8) && (pauseCtx->state <= 0x12))) {
+ if ((pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->state != PAUSE_STATE_SAVEPROMPT) &&
+ !IS_PAUSE_STATE_GAMEOVER) {
KaleidoScope_SetView(pauseCtx, 0.0f, 0.0f, 64.0f);
if (!sStrayFairyIconAlphaScaleState) {
@@ -224,7 +224,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) {
gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[76], 4, 0);
POLY_OPA_DISP =
- func_8010DE38(POLY_OPA_DISP, gStrayFairyGlowingCircleIconTex, G_IM_FMT_I, 32, 24, 0);
+ 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);
@@ -264,24 +264,25 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) {
func_80108AF8(play);
- if ((pauseCtx->pageIndex == PAUSE_MAP) && (pauseCtx->unk_200 == 0)) {
- // If (pauseCtx->state == 6), then the other conditions are redundant and always return
+ if ((pauseCtx->pageIndex == PAUSE_MAP) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE)) {
+ // If (pauseCtx->state == PAUSE_STATE_MAIN), then the other conditions are redundant and always return
// true
- if ((pauseCtx->state == 6) && (pauseCtx->state != 7) &&
- !((pauseCtx->state >= 8) && (pauseCtx->state <= 0x12))) {
+ if ((pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->state != PAUSE_STATE_SAVEPROMPT) &&
+ !IS_PAUSE_STATE_GAMEOVER) {
func_8012C628(play->state.gfxCtx);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
// Draw Player's face next to the dungeon floor icon currently in.
- POLY_OPA_DISP = func_8010CB80(POLY_OPA_DISP, &D_09007500, 16, 16, 62,
- sDungeonMapFloorIconPosY[R_REVERSE_FLOOR_INDEX], 16, 16, 1 << 10, 1 << 10);
+ POLY_OPA_DISP =
+ Gfx_DrawTexRectRGBA16(POLY_OPA_DISP, &D_09007500, 16, 16, 62,
+ sDungeonMapFloorIconPosY[R_REVERSE_FLOOR_INDEX], 16, 16, 1 << 10, 1 << 10);
if (CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, gSaveContext.dungeonIndex)) {
- POLY_OPA_DISP = func_8010CB80(POLY_OPA_DISP, gDungeonMapSkullTex, 16, 16, 108,
- sDungeonMapFloorIconPosY[FLOOR_INDEX_MAX - func_80105318()], 16, 16,
- 1 << 10, 1 << 10);
+ POLY_OPA_DISP = Gfx_DrawTexRectRGBA16(POLY_OPA_DISP, gDungeonMapSkullTex, 16, 16, 108,
+ sDungeonMapFloorIconPosY[FLOOR_INDEX_MAX - func_80105318()], 16,
+ 16, 1 << 10, 1 << 10);
}
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
@@ -304,9 +305,9 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play) {
s16 i;
s16 oldCursorPoint;
- if (pauseCtx->state == 6) {
- if ((pauseCtx->unk_200 == 0) && (pauseCtx->pageIndex == PAUSE_MAP)) {
- pauseCtx->cursorColorSet = 0;
+ if (pauseCtx->state == PAUSE_STATE_MAIN) {
+ if ((pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) && (pauseCtx->pageIndex == PAUSE_MAP)) {
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_WHITE;
oldCursorPoint = pauseCtx->cursorPoint[PAUSE_MAP];
if (pauseCtx->stickAdjX > 30) {
pauseCtx->unk_298 = 4.0f;
@@ -378,7 +379,7 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play) {
} else if ((pauseCtx->cursorSpecialPos == 0) && (pauseCtx->stickAdjY > 30)) {
if (pauseCtx->cursorPoint[PAUSE_MAP] >= DUNGEON_FLOOR_INDEX_4) {
for (i = pauseCtx->cursorPoint[PAUSE_MAP] - (DUNGEON_FLOOR_INDEX_4 + 1); i >= 0; i--) {
- if ((gSaveContext.save.permanentSceneFlags[(void)0, gSaveContext.dungeonIndex].unk_14 &
+ if ((gSaveContext.save.saveInfo.permanentSceneFlags[(void)0, gSaveContext.dungeonIndex].unk_14 &
gBitFlags[i]) ||
func_801090B0(FLOOR_INDEX_MAX - i)) {
pauseCtx->cursorPoint[PAUSE_MAP] = i + DUNGEON_FLOOR_INDEX_4;
@@ -399,7 +400,7 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play) {
(pauseCtx->cursorPoint[PAUSE_MAP] <= DUNGEON_FLOOR_INDEX_1)) {
for (i = pauseCtx->cursorPoint[PAUSE_MAP] - (DUNGEON_FLOOR_INDEX_4 - 1); i <= DUNGEON_FLOOR_INDEX_0;
i++) {
- if ((gSaveContext.save.permanentSceneFlags[(void)0, gSaveContext.dungeonIndex].unk_14 &
+ if ((gSaveContext.save.saveInfo.permanentSceneFlags[(void)0, gSaveContext.dungeonIndex].unk_14 &
gBitFlags[i]) ||
func_801090B0(FLOOR_INDEX_MAX - i)) {
pauseCtx->cursorPoint[PAUSE_MAP] = i + DUNGEON_FLOOR_INDEX_4;
@@ -539,9 +540,9 @@ void KaleidoScope_DrawWorldMap(PlayState* play) {
KaleidoScope_SetCursorVtx(pauseCtx, pauseCtx->cursorSlot[PAUSE_MAP] * 4, pauseCtx->mapPageVtx);
// Draw the world map image
- if ((pauseCtx->pageIndex == PAUSE_MAP) && (pauseCtx->state == 6) &&
- ((pauseCtx->unk_200 == 0) || (pauseCtx->unk_200 == 3)) && YREG(6) && (pauseCtx->state != 7) &&
- !((pauseCtx->state >= 8) && (pauseCtx->state <= 0x12))) {
+ if ((pauseCtx->pageIndex == PAUSE_MAP) && (pauseCtx->state == PAUSE_STATE_MAIN) &&
+ ((pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) || (pauseCtx->mainState == PAUSE_MAIN_STATE_EQUIP_ITEM)) &&
+ YREG(6) && (pauseCtx->state != PAUSE_STATE_SAVEPROMPT) && !IS_PAUSE_STATE_GAMEOVER) {
// Draw the world map image flat
// Because it is flat, the texture is loaded by filling it in 8 rows at a time.
@@ -641,15 +642,15 @@ void KaleidoScope_DrawWorldMap(PlayState* play) {
// Draw clouds over the world map
// Iterate over cloud bits (n)
for (n = 0; n < 15; n++) {
- if (!(((void)0, gSaveContext.save.worldMapCloudVisibility) & gBitFlags[n])) {
+ if (!(((void)0, gSaveContext.save.saveInfo.worldMapCloudVisibility) & gBitFlags[n])) {
gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[60 + n * 4], 4, 0);
- POLY_OPA_DISP = func_8010DC58(POLY_OPA_DISP, sCloudTextures[n], D_8082B7F0[n], D_8082B838[n], 0);
+ POLY_OPA_DISP = Gfx_DrawTexQuadIA8(POLY_OPA_DISP, sCloudTextures[n], D_8082B7F0[n], D_8082B838[n], 0);
}
}
- if ((pauseCtx->state >= 0x15) && (pauseCtx->state <= 0x19)) {
+ if (IS_PAUSE_STATE_OWLWARP) {
gDPPipeSync(POLY_OPA_DISP++);
gDPSetRenderMode(POLY_OPA_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
@@ -659,7 +660,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) {
func_8012C8AC(play->state.gfxCtx);
- if (!((pauseCtx->state >= 0x15) && (pauseCtx->state <= 0x19))) {
+ if (!IS_PAUSE_STATE_OWLWARP) {
// Browsing the world map regions on the pause menu
gDPLoadTextureBlock(POLY_OPA_DISP++, gWorldMapDotTex, G_IM_FMT_IA, G_IM_SIZ_8b, 8, 8, 0,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
@@ -673,7 +674,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) {
sWorldMapDotEnvColors[0][2], 0);
if (R_PAUSE_DBG_MAP_CLOUD_ON) {
- gSaveContext.save.worldMapCloudVisibility |= (u16)~0x8000;
+ gSaveContext.save.saveInfo.worldMapCloudVisibility |= (u16)~0x8000;
pauseCtx->mapPageVtx[120].v.ob[0] = pauseCtx->mapPageVtx[122].v.ob[0] = R_PAUSE_DBG_MAP_CLOUD_X;
@@ -705,7 +706,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
if (R_PAUSE_DBG_MAP_CLOUD_ON) {
- gSaveContext.save.worldMapCloudVisibility |= (u16)~0x8000;
+ gSaveContext.save.saveInfo.worldMapCloudVisibility |= (u16)~0x8000;
pauseCtx->mapPageVtx[164].v.ob[0] = pauseCtx->mapPageVtx[166].v.ob[0] = R_PAUSE_DBG_MAP_CLOUD_X;
@@ -728,10 +729,11 @@ void KaleidoScope_DrawWorldMap(PlayState* play) {
}
// Find and draw Player's face at the current region based on the current scene
- // If (pauseCtx->state == 6), then the other pauseCtx->state conditions are redundant
+ // If (pauseCtx->state == PAUSE_STATE_MAIN), then the other pauseCtx->state conditions are redundant
// and always return true
- if ((pauseCtx->pageIndex == PAUSE_MAP) && (pauseCtx->unk_200 == 0) && (pauseCtx->state == 6) &&
- (pauseCtx->state != 7) && !((pauseCtx->state >= 8) && (pauseCtx->state <= 0x12))) {
+ if ((pauseCtx->pageIndex == PAUSE_MAP) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) &&
+ (pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->state != PAUSE_STATE_SAVEPROMPT) &&
+ !IS_PAUSE_STATE_GAMEOVER) {
j = 0;
n = 0;
@@ -797,8 +799,8 @@ void KaleidoScope_DrawWorldMap(PlayState* play) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
- POLY_OPA_DISP = func_8010CB80(POLY_OPA_DISP, &D_09007500, 16, 16, sWorldMapCursorsRectLeft[n],
- sWorldMapCursorsRectTop[n], 16, 16, 1 << 10, 1 << 10);
+ POLY_OPA_DISP = Gfx_DrawTexRectRGBA16(POLY_OPA_DISP, &D_09007500, 16, 16, sWorldMapCursorsRectLeft[n],
+ sWorldMapCursorsRectTop[n], 16, 16, 1 << 10, 1 << 10);
}
}
@@ -825,8 +827,9 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) {
PauseContext* pauseCtx = &play->pauseCtx;
s16 oldCursorPoint;
- if ((pauseCtx->state == 6) && (pauseCtx->unk_200 == 0) && (pauseCtx->pageIndex == PAUSE_MAP)) {
- pauseCtx->cursorColorSet = 0;
+ if ((pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) &&
+ (pauseCtx->pageIndex == PAUSE_MAP)) {
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_WHITE;
oldCursorPoint = pauseCtx->cursorPoint[PAUSE_WORLD_MAP];
if (gSaveContext.buttonStatus[EQUIP_SLOT_A] != BTN_DISABLED) {
@@ -936,8 +939,8 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) {
if (oldCursorPoint != pauseCtx->cursorPoint[PAUSE_WORLD_MAP]) {
play_sound(NA_SE_SY_CURSOR);
}
- } else if (pauseCtx->state == 0x17) {
- pauseCtx->cursorColorSet = 4;
+ } else if (pauseCtx->state == PAUSE_STATE_OWLWARP_SELECT) {
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_BLUE;
oldCursorPoint = pauseCtx->cursorPoint[PAUSE_WORLD_MAP];
if (pauseCtx->stickAdjX > 30) {
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 cedcbf8f3..61157ffce 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
@@ -208,7 +208,7 @@ void KaleidoScope_DrawMaskSelect(PlayState* play) {
if (GET_CUR_FORM_BTN_ITEM(i + 1) != ITEM_NONE) {
if (GET_CUR_FORM_BTN_SLOT(i + 1) >= NUM_ITEM_SLOTS) {
gSPVertex(POLY_OPA_DISP++, &pauseCtx->maskVtx[j], 4, 0);
- POLY_OPA_DISP = func_8010DC58(POLY_OPA_DISP, gEquippedItemOutlineTex, 32, 32, 0);
+ POLY_OPA_DISP = Gfx_DrawTexQuadIA8(POLY_OPA_DISP, gEquippedItemOutlineTex, 32, 32, 0);
}
}
}
@@ -221,9 +221,9 @@ void KaleidoScope_DrawMaskSelect(PlayState* play) {
for (j = 0, i = 0; i < NUM_MASK_SLOTS; i++, j += 4) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
- if (((void)0, gSaveContext.save.inventory.items[i + NUM_ITEM_SLOTS]) != ITEM_NONE) {
+ if (((void)0, gSaveContext.save.saveInfo.inventory.items[i + NUM_ITEM_SLOTS]) != ITEM_NONE) {
if (!CHECK_GIVEN_MASK_ON_MOON(i)) {
- if ((pauseCtx->unk_200 == 0) && (pauseCtx->pageIndex == PAUSE_MASK) &&
+ if ((pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) && (pauseCtx->pageIndex == PAUSE_MASK) &&
(pauseCtx->cursorSpecialPos == 0) &&
gMaskPlayerFormSlotRestrictions[(void)0, gSaveContext.save.playerForm][i]) {
if ((sMaskEquipState == EQUIP_STATE_MAGIC_ARROW_HOVER_OVER_BOW_SLOT) && (i == SLOT_ARROW_ICE)) {
@@ -257,9 +257,9 @@ void KaleidoScope_DrawMaskSelect(PlayState* play) {
}
gSPVertex(POLY_OPA_DISP++, &pauseCtx->maskVtx[j + 0], 4, 0);
- KaleidoScope_DrawQuadTextureRGBA32(
- play->state.gfxCtx, gItemIcons[((void)0, gSaveContext.save.inventory.items[i + NUM_ITEM_SLOTS])],
- 32, 32, 0);
+ KaleidoScope_DrawTexQuadRGBA32(
+ play->state.gfxCtx,
+ gItemIcons[((void)0, gSaveContext.save.saveInfo.inventory.items[i + NUM_ITEM_SLOTS])], 32, 32, 0);
}
}
}
@@ -285,11 +285,11 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
s16 moveCursorResult;
s16 pad2;
- pauseCtx->cursorColorSet = 0;
- pauseCtx->nameColorSet = 0;
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_WHITE;
+ pauseCtx->nameColorSet = PAUSE_NAME_COLOR_SET_WHITE;
- if ((pauseCtx->state == 6) && (pauseCtx->unk_200 == 0) && (pauseCtx->pageIndex == PAUSE_MASK) &&
- !pauseCtx->itemDescriptionOn) {
+ if ((pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) &&
+ (pauseCtx->pageIndex == PAUSE_MASK) && !pauseCtx->itemDescriptionOn) {
moveCursorResult = PAUSE_CURSOR_RESULT_NONE;
oldCursorPoint = pauseCtx->cursorPoint[PAUSE_MASK];
@@ -298,7 +298,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
// Move cursor left/right
if (pauseCtx->cursorSpecialPos == 0) {
// cursor is currently on a slot
- pauseCtx->cursorColorSet = 2;
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_YELLOW;
if (ABS_ALT(pauseCtx->stickAdjX) > 30) {
cursorPoint = pauseCtx->cursorPoint[PAUSE_MASK];
@@ -371,7 +371,8 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
}
if (moveCursorResult == PAUSE_CURSOR_RESULT_SLOT) {
- cursorItem = gSaveContext.save.inventory.items[pauseCtx->cursorPoint[PAUSE_MASK] + NUM_ITEM_SLOTS];
+ cursorItem =
+ gSaveContext.save.saveInfo.inventory.items[pauseCtx->cursorPoint[PAUSE_MASK] + NUM_ITEM_SLOTS];
if (CHECK_GIVEN_MASK_ON_MOON(pauseCtx->cursorPoint[PAUSE_MASK])) {
cursorItem = ITEM_NONE;
}
@@ -387,7 +388,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
// Search for slot to move to
while (true) {
// Check if current cursor has an item in its slot
- if ((gSaveContext.save.inventory.items[cursorPoint + NUM_ITEM_SLOTS] != ITEM_NONE) &&
+ if ((gSaveContext.save.saveInfo.inventory.items[cursorPoint + NUM_ITEM_SLOTS] != ITEM_NONE) &&
!CHECK_GIVEN_MASK_ON_MOON(cursorPoint)) {
pauseCtx->cursorPoint[PAUSE_MASK] = cursorPoint;
pauseCtx->cursorXIndex[PAUSE_MASK] = cursorXIndex;
@@ -428,7 +429,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
// Search for slot to move to
while (true) {
// Check if current cursor has an item in its slot
- if ((gSaveContext.save.inventory.items[cursorPoint + NUM_ITEM_SLOTS] != ITEM_NONE) &&
+ if ((gSaveContext.save.saveInfo.inventory.items[cursorPoint + NUM_ITEM_SLOTS] != ITEM_NONE) &&
!CHECK_GIVEN_MASK_ON_MOON(cursorPoint)) {
pauseCtx->cursorPoint[PAUSE_MASK] = cursorPoint;
pauseCtx->cursorXIndex[PAUSE_MASK] = cursorXIndex;
@@ -497,15 +498,17 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
}
cursorSlot = pauseCtx->cursorPoint[PAUSE_MASK];
- pauseCtx->cursorColorSet = 2;
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_YELLOW;
if (moveCursorResult == PAUSE_CURSOR_RESULT_SLOT) {
- cursorItem = gSaveContext.save.inventory.items[pauseCtx->cursorPoint[PAUSE_MASK] + NUM_ITEM_SLOTS];
+ cursorItem =
+ gSaveContext.save.saveInfo.inventory.items[pauseCtx->cursorPoint[PAUSE_MASK] + NUM_ITEM_SLOTS];
if (CHECK_GIVEN_MASK_ON_MOON(pauseCtx->cursorPoint[PAUSE_MASK])) {
cursorItem = ITEM_NONE;
}
} else if (moveCursorResult != PAUSE_CURSOR_RESULT_SPECIAL_POS) {
- cursorItem = gSaveContext.save.inventory.items[pauseCtx->cursorPoint[PAUSE_MASK] + NUM_ITEM_SLOTS];
+ cursorItem =
+ gSaveContext.save.saveInfo.inventory.items[pauseCtx->cursorPoint[PAUSE_MASK] + NUM_ITEM_SLOTS];
if (CHECK_GIVEN_MASK_ON_MOON(pauseCtx->cursorPoint[PAUSE_MASK])) {
cursorItem = ITEM_NONE;
}
@@ -513,7 +516,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
if (cursorItem == ITEM_NONE) {
cursorItem = PAUSE_ITEM_NONE;
- pauseCtx->cursorColorSet = 0;
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_WHITE;
}
if ((cursorItem != PAUSE_ITEM_NONE) && (msgCtx->msgLength == 0)) {
@@ -533,7 +536,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
if (cursorItem != PAUSE_ITEM_NONE) {
// Equip item to the C buttons
if ((pauseCtx->debugEditor == DEBUG_EDITOR_NONE) && !pauseCtx->itemDescriptionOn &&
- (pauseCtx->state == 6) && (pauseCtx->unk_200 == 0) &&
+ (pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) &&
CHECK_BTN_ANY(input->press.button, BTN_CLEFT | BTN_CDOWN | BTN_CRIGHT)) {
// Ensure that a mask is not unequipped while being used
@@ -566,8 +569,8 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
}
}
- if ((Player_GetEnvTimerType(play) >= PLAYER_ENV_TIMER_UNDERWATER_FLOOR) &&
- (Player_GetEnvTimerType(play) <= PLAYER_ENV_TIMER_UNDERWATER_FREE) &&
+ if ((Player_GetEnvironmentalHazard(play) >= PLAYER_ENV_HAZARD_UNDERWATER_FLOOR) &&
+ (Player_GetEnvironmentalHazard(play) <= PLAYER_ENV_HAZARD_UNDERWATER_FREE) &&
((cursorSlot == (SLOT_MASK_DEKU - NUM_ITEM_SLOTS)) ||
(cursorSlot == (SLOT_MASK_GORON - NUM_ITEM_SLOTS)))) {
play_sound(NA_SE_SY_ERROR);
@@ -585,7 +588,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
// Equip item to the C buttons
pauseCtx->equipTargetItem = cursorItem;
pauseCtx->equipTargetSlot = cursorSlot + NUM_ITEM_SLOTS;
- pauseCtx->unk_200 = 0xF;
+ pauseCtx->mainState = PAUSE_MAIN_STATE_EQUIP_MASK;
vtxIndex = cursorSlot * 4;
pauseCtx->equipAnimX = pauseCtx->maskVtx[vtxIndex].v.ob[0] * 10;
pauseCtx->equipAnimY = pauseCtx->maskVtx[vtxIndex].v.ob[1] * 10;
@@ -594,9 +597,9 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
sMaskEquipState = EQUIP_STATE_MOVE_TO_C_BTN;
sMaskEquipAnimTimer = 10;
play_sound(NA_SE_SY_DECIDE);
- } else if ((pauseCtx->debugEditor == DEBUG_EDITOR_NONE) && (pauseCtx->state == 6) &&
- (pauseCtx->unk_200 == 0) && CHECK_BTN_ALL(input->press.button, BTN_A) &&
- (msgCtx->msgLength == 0)) {
+ } else if ((pauseCtx->debugEditor == DEBUG_EDITOR_NONE) && (pauseCtx->state == PAUSE_STATE_MAIN) &&
+ (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) &&
+ CHECK_BTN_ALL(input->press.button, BTN_A) && (msgCtx->msgLength == 0)) {
// Give description on item through a message box
pauseCtx->itemDescriptionOn = true;
if (pauseCtx->cursorYIndex[PAUSE_MASK] < 2) {
@@ -613,8 +616,8 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
if (oldCursorPoint != pauseCtx->cursorPoint[PAUSE_MASK]) {
play_sound(NA_SE_SY_CURSOR);
}
- } else if ((pauseCtx->unk_200 == 0xF) && (pauseCtx->pageIndex == PAUSE_MASK)) {
- pauseCtx->cursorColorSet = 2;
+ } else if ((pauseCtx->mainState == PAUSE_MAIN_STATE_EQUIP_MASK) && (pauseCtx->pageIndex == PAUSE_MASK)) {
+ pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_YELLOW;
}
}
@@ -796,7 +799,7 @@ void KaleidoScope_UpdateMaskEquip(PlayState* play) {
}
// Reset params
- pauseCtx->unk_200 = 0;
+ pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE;
sMaskEquipAnimTimer = 10;
pauseCtx->equipAnimScale = 320;
pauseCtx->equipAnimShrinkRate = 40;
diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_prompt.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_prompt.c
index 53453e8e7..13e233b58 100644
--- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_prompt.c
+++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_prompt.c
@@ -17,7 +17,9 @@ void KaleidoScope_UpdatePrompt(PlayState* play) {
s8 relStickX = input->rel.stick_x;
s16 alphaStep;
- if (((pauseCtx->state == 7) && (pauseCtx->unk_208 == 1)) || (pauseCtx->state == 0xE) || (pauseCtx->state == 0x11)) {
+ if (((pauseCtx->state == PAUSE_STATE_SAVEPROMPT) && (pauseCtx->savePromptState == PAUSE_SAVEPROMPT_STATE_1)) ||
+ (pauseCtx->state == PAUSE_STATE_GAMEOVER_SAVE_PROMPT) ||
+ (pauseCtx->state == PAUSE_STATE_GAMEOVER_CONTINUE_PROMPT)) {
// Move the prompt
if ((pauseCtx->promptChoice == PAUSE_PROMPT_YES) && (relStickX >= 30)) {
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 72392390b..849c7020e 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
@@ -16,6 +16,86 @@ typedef enum {
/* 4 */ PAUSE_WORLD_MAP
} PauseMenuPage;
+// Direction of pause pages
+#define PAUSE_ITEM_X (0)
+#define PAUSE_ITEM_Z (-1)
+#define PAUSE_MAP_X (1)
+#define PAUSE_MAP_Z (0)
+#define PAUSE_QUEST_X (0)
+#define PAUSE_QUEST_Z (1)
+#define PAUSE_MASK_X (-1)
+#define PAUSE_MASK_Z (0)
+
+#define PAUSE_EYE_DIST (64.0f)
+
+typedef enum {
+ /* 0x00 */ PAUSE_STATE_OFF,
+ /* 0x01 */ PAUSE_STATE_OPENING_0,
+ /* 0x02 */ PAUSE_STATE_OPENING_1,
+ /* 0x03 */ PAUSE_STATE_OPENING_2,
+ /* 0x04 */ PAUSE_STATE_OPENING_3,
+ /* 0x05 */ PAUSE_STATE_OPENING_4,
+ /* 0x06 */ PAUSE_STATE_MAIN, // Pause menu ready for player inputs.
+ /* 0x07 */ PAUSE_STATE_SAVEPROMPT,
+ /* 0x08 */ PAUSE_STATE_GAMEOVER_0,
+ /* 0x09 */ PAUSE_STATE_GAMEOVER_1,
+ /* 0x0A */ PAUSE_STATE_GAMEOVER_2,
+ /* 0x0B */ PAUSE_STATE_GAMEOVER_3,
+ /* 0x0C */ PAUSE_STATE_GAMEOVER_4,
+ /* 0x0D */ PAUSE_STATE_GAMEOVER_5,
+ /* 0x0E */ PAUSE_STATE_GAMEOVER_SAVE_PROMPT,
+ /* 0x0F */ PAUSE_STATE_GAMEOVER_7,
+ /* 0x10 */ PAUSE_STATE_GAMEOVER_8,
+ /* 0x11 */ PAUSE_STATE_GAMEOVER_CONTINUE_PROMPT,
+ /* 0x12 */ PAUSE_STATE_GAMEOVER_10,
+ /* 0x13 */ PAUSE_STATE_OWLWARP_0,
+ /* 0x14 */ PAUSE_STATE_OWLWARP_1,
+ /* 0x15 */ PAUSE_STATE_OWLWARP_2,
+ /* 0x16 */ PAUSE_STATE_OWLWARP_3,
+ /* 0x17 */ PAUSE_STATE_OWLWARP_SELECT, // Selecting the destination
+ /* 0x18 */ PAUSE_STATE_OWLWARP_CONFIRM, // Confirming the choice given
+ /* 0x19 */ PAUSE_STATE_OWLWARP_6,
+ /* 0x1A */ PAUSE_STATE_UNPAUSE_SETUP, // Unpause
+ /* 0x1B */ PAUSE_STATE_UNPAUSE_CLOSE
+} PauseState;
+
+typedef enum {
+ /* 0x00 */ PAUSE_MAIN_STATE_IDLE, // Await input for the next action
+ /* 0x01 */ PAUSE_MAIN_STATE_SWITCHING_PAGE,
+ /* 0x02 */ PAUSE_MAIN_STATE_SONG_PLAYBACK,
+ /* 0x03 */ PAUSE_MAIN_STATE_EQUIP_ITEM,
+ /* 0x04 */ PAUSE_MAIN_STATE_SONG_PROMPT_INIT,
+ /* 0x05 */ PAUSE_MAIN_STATE_SONG_PROMPT,
+ /* 0x06 */ PAUSE_MAIN_STATE_SONG_PROMPT_DONE,
+ /* 0x07 */ PAUSE_MAIN_STATE_SONG_PROMPT_UNUSED,
+ /* 0x08 */ PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG, // Await input but the cursor is on a song
+ /* 0x09 */ PAUSE_MAIN_STATE_SONG_PLAYBACK_INIT,
+ /* 0x0F */ PAUSE_MAIN_STATE_EQUIP_MASK = 0xF,
+ /* 0x10 */ PAUSE_MAIN_STATE_BOMBERS_NOTEBOOK_OPEN,
+ /* 0x11 */ PAUSE_MAIN_STATE_UNK
+} PauseMainState;
+
+typedef enum {
+ /* 0x00 */ PAUSE_SAVEPROMPT_STATE_0,
+ /* 0x01 */ PAUSE_SAVEPROMPT_STATE_1,
+ /* 0x02 */ PAUSE_SAVEPROMPT_STATE_2,
+ /* 0x03 */ PAUSE_SAVEPROMPT_STATE_3,
+ /* 0x04 */ PAUSE_SAVEPROMPT_STATE_4,
+ /* 0x05 */ PAUSE_SAVEPROMPT_STATE_5,
+ /* 0x06 */ PAUSE_SAVEPROMPT_STATE_6,
+ /* 0x07 */ PAUSE_SAVEPROMPT_STATE_7
+} PauseSavePromptState;
+
+#define IS_PAUSE_STATE_GAMEOVER \
+ ((pauseCtx->state >= PAUSE_STATE_GAMEOVER_0) && (pauseCtx->state <= PAUSE_STATE_GAMEOVER_10))
+
+#define IS_PAUSE_STATE_OWLWARP \
+ ((pauseCtx->state >= PAUSE_STATE_OWLWARP_2) && (pauseCtx->state <= PAUSE_STATE_OWLWARP_6))
+
+#define IS_PAUSE_MAIN_STATE_SAVE_PROMPT \
+ ((pauseCtx->mainState >= PAUSE_MAIN_STATE_SONG_PROMPT_INIT) && \
+ (pauseCtx->mainState <= PAUSE_MAIN_STATE_SONG_PROMPT_DONE))
+
typedef enum {
/* 0 */ PAUSE_EQUIP_C_LEFT,
/* 1 */ PAUSE_EQUIP_C_DOWN,
@@ -30,12 +110,28 @@ typedef enum {
} EquipState;
typedef enum {
- /* 0 */ DEBUG_EDITOR_NONE,
- /* 1 */ DEBUG_EDITOR_INVENTORY_INIT,
- /* 2 */ DEBUG_EDITOR_INVENTORY,
- /* 3 */ DEBUG_EDITOR_EVENTS
+ /* 0 */ DEBUG_EDITOR_NONE,
+ /* 1 */ DEBUG_EDITOR_INVENTORY_INIT,
+ /* 2 */ DEBUG_EDITOR_INVENTORY,
+ /* 3 */ DEBUG_EDITOR_EVENTS
} DebugEditor;
+typedef enum {
+ /* 0 */ PAUSE_BG_PRERENDER_OFF,
+ /* 1 */ PAUSE_BG_PRERENDER_SETUP, // The current frame is only drawn for the purpose of serving as the pause background.
+ /* 2 */ PAUSE_BG_PRERENDER_PROCESS, // The previous frame was PAUSE_BG_PRERENDER_DRAW, now apply prerender filters.
+ /* 3 */ PAUSE_BG_PRERENDER_READY, // The pause background is ready to be used.
+ /* 4 */ PAUSE_BG_PRERENDER_UNK4,
+ /* 5 */ PAUSE_BG_PRERENDER_MAX
+} PauseBgPreRenderState;
+
+#define PAUSE_NAME_COLOR_SET_WHITE 0
+#define PAUSE_NAME_COLOR_SET_GREY 1
+
+#define PAUSE_CURSOR_COLOR_SET_WHITE 0
+#define PAUSE_CURSOR_COLOR_SET_YELLOW 2
+#define PAUSE_CURSOR_COLOR_SET_BLUE 4
+
// To be used for Item-Page cursor and Mask-Page cursor
typedef enum {
/* 0 */ PAUSE_CURSOR_RESULT_NONE,
@@ -51,8 +147,8 @@ typedef enum {
// NES
void KaleidoScope_MoveCursorToSpecialPos(PlayState* play, s16 cursorSpecialPos);
-void KaleidoScope_DrawQuadTextureRGBA32(GraphicsContext* gfxCtx, TexturePtr texture, u16 width, u16 height, u16 point);
-void KaleidoScope_SetView(PauseContext* pauseCtx, f32 x, f32 y, f32 z);
+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);
// Map
@@ -61,6 +157,10 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play);
void KaleidoScope_DrawWorldMap(PlayState* play);
void KaleidoScope_UpdateWorldMapCursor(PlayState* play);
+// Collect
+void KaleidoScope_DrawQuestStatus(PlayState* play);
+void KaleidoScope_UpdateQuestCursor(PlayState* play);
+
// Item
void KaleidoScope_SetCursorVtx(PauseContext* pauseCtx, u16 index, Vtx* vtx);
void KaleidoScope_DrawItemSelect(PlayState* play);
@@ -72,6 +172,9 @@ void KaleidoScope_DrawMaskSelect(PlayState* play);
void KaleidoScope_UpdateMaskCursor(PlayState* play);
void KaleidoScope_UpdateMaskEquip(PlayState* play);
+// Prompt
+void KaleidoScope_UpdatePrompt(PlayState* play);
+
// Debug
void KaleidoScope_DrawInventoryEditor(PlayState* play);
void KaleidoScope_UpdateInventoryEditor(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 6c6754b3d..1377f287f 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
@@ -5,6 +5,7 @@
*/
#include "z_kaleido_scope.h"
+#include "overlays/gamestates/ovl_opening/z_opening.h"
#include "z64view.h"
extern UNK_TYPE D_02001360;
@@ -17,6 +18,8 @@ extern UNK_TYPE D_0B000000;
extern UNK_TYPE D_0C000000;
extern UNK_TYPE D_0C006C00;
+extern u8 sUnpausedButtonStatus[5];
+
void* D_8082B700[] = {
0x08064440, 0x0806E440, 0x08077A40, 0x08081040, 0x0808A640, 0x0D003A00, 0x0806EE40, 0x08078440,
0x08081A40, 0x0808B040, 0x08065840, 0x0806F840, 0x08078E40, 0x08082440, 0x0808BA40,
@@ -45,42 +48,62 @@ s16 D_8082B838[] = {
0x0008, 0x0008, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C,
};
-s16 D_8082B880 = 0;
-s16 D_8082B884 = 0;
-s16 D_8082B888 = 0;
-s16 D_8082B88C = 255;
-s16 D_8082B890 = 0;
-s16 D_8082B894 = 0;
-s16 D_8082B898 = 0;
-s16 D_8082B89C = 0;
-s16 D_8082B8A0 = 0;
-s16 D_8082B8A4 = 0;
-s16 D_8082B8A8 = 255;
-s16 D_8082B8AC = 0;
-s16 D_8082B8B0 = 0;
+s16 sGameOverPrimR = 0;
+s16 sGameOverPrimG = 0;
+s16 sGameOverPrimB = 0;
+s16 sGameOverPrimAlpha = 255;
+s16 sCursorPrimR = 0;
+s16 sCursorPrimG = 0;
+s16 sCursorPrimB = 0;
+s16 sCursorEnvR = 0;
+s16 sCursorEnvG = 0;
+s16 sCursorEnvB = 0;
+s16 sGameOverEnvR = 255;
+s16 sGameOverEnvG = 0;
+s16 sGameOverEnvB = 0;
-s16 D_8082B8B4 = false;
+s16 sInDungeonScene = false;
-f32 D_8082B8B8[] = {
- -4.0f, 4.0f, 4.0f, 4.0f, 4.0f, -4.0f, -4.0f, -4.0f,
+f32 sPageSwitchEyeDx[] = {
+ -PAUSE_EYE_DIST * (PAUSE_MAP_X - PAUSE_ITEM_X) / 16, // From PAUSE_ITEM to PAUSE_MAP (switching right)
+ -PAUSE_EYE_DIST*(PAUSE_MASK_X - PAUSE_ITEM_X) / 16, // From PAUSE_ITEM to PAUSE_MASK (switching left)
+ -PAUSE_EYE_DIST*(PAUSE_QUEST_X - PAUSE_MAP_X) / 16, // From PAUSE_MAP to PAUSE_QUEST (switching right)
+ -PAUSE_EYE_DIST*(PAUSE_ITEM_X - PAUSE_MAP_X) / 16, // From PAUSE_MAP to PAUSE_ITEM (switching left)
+ -PAUSE_EYE_DIST*(PAUSE_MASK_X - PAUSE_QUEST_X) / 16, // From PAUSE_QUEST to PAUSE_MASK (switching right)
+ -PAUSE_EYE_DIST*(PAUSE_MAP_X - PAUSE_QUEST_X) / 16, // From PAUSE_QUEST to PAUSE_MAP (switching left)
+ -PAUSE_EYE_DIST*(PAUSE_ITEM_X - PAUSE_MASK_X) / 16, // From PAUSE_MASK to PAUSE_ITEM (switching right)
+ -PAUSE_EYE_DIST*(PAUSE_QUEST_X - PAUSE_MASK_X) / 16, // From PAUSE_MASK to PAUSE_QUEST (switching left)
};
-f32 D_8082B8D8[] = {
- -4.0f, -4.0f, -4.0f, 4.0f, 4.0f, 4.0f, 4.0f, -4.0f,
+f32 sPageSwitchEyeDz[] = {
+ -PAUSE_EYE_DIST * (PAUSE_MAP_Z - PAUSE_ITEM_Z) / 16, // From PAUSE_ITEM to PAUSE_MAP (switching right)
+ -PAUSE_EYE_DIST*(PAUSE_MASK_Z - PAUSE_ITEM_Z) / 16, // From PAUSE_ITEM to PAUSE_MASK (switching left)
+ -PAUSE_EYE_DIST*(PAUSE_QUEST_Z - PAUSE_MAP_Z) / 16, // From PAUSE_MAP to PAUSE_QUEST (switching right)
+ -PAUSE_EYE_DIST*(PAUSE_ITEM_Z - PAUSE_MAP_Z) / 16, // From PAUSE_MAP to PAUSE_ITEM (switching left)
+ -PAUSE_EYE_DIST*(PAUSE_MASK_Z - PAUSE_QUEST_Z) / 16, // From PAUSE_QUEST to PAUSE_MASK (switching right)
+ -PAUSE_EYE_DIST*(PAUSE_MAP_Z - PAUSE_QUEST_Z) / 16, // From PAUSE_QUEST to PAUSE_MAP (switching left)
+ -PAUSE_EYE_DIST*(PAUSE_ITEM_Z - PAUSE_MASK_Z) / 16, // From PAUSE_MASK to PAUSE_ITEM (switching right)
+ -PAUSE_EYE_DIST*(PAUSE_QUEST_Z - PAUSE_MASK_Z) / 16, // From PAUSE_MASK to PAUSE_QUEST (switching left)
};
-s16 D_8082B8F8[] = {
- PAUSE_MAP, PAUSE_MASK, PAUSE_QUEST, PAUSE_ITEM, PAUSE_MASK, PAUSE_MAP, PAUSE_ITEM, PAUSE_QUEST,
+u16 sPageSwitchNextPageIndex[] = {
+ PAUSE_MAP, // From PAUSE_ITEM (switching right)
+ PAUSE_MASK, // From PAUSE_ITEM (switching left)
+ PAUSE_QUEST, // From PAUSE_MAP (switching right)
+ PAUSE_ITEM, // From PAUSE_MAP (switching left)
+ PAUSE_MASK, // From PAUSE_QUEST (switching right)
+ PAUSE_MAP, // From PAUSE_QUEST (switching left)
+ PAUSE_ITEM, // From PAUSE_MASK (switching right)
+ PAUSE_QUEST, // From PAUSE_MASK (switching left)
};
-f32 D_8082B908 = 0.0f;
+f32 sPauseMenuVerticalOffset = 0.0f;
f32 D_8082B90C = 0.0f;
-f32 D_8082B910 = 40.0f;
-f32 D_8082B914 = -40.0f;
+f32 sPauseCursorLeftMoveOffsetX = 40.0f;
+f32 sPauseCursorRightMoveOffsetX = -40.0f;
-s32 D_8082B918 = 0;
-
-s32 D_8082B91C = 0;
+s16 sPauseCursorLeftX = 0;
+s16 sPauseCursorRightX = 0;
s16 D_8082B920 = 10;
@@ -89,7 +112,8 @@ u8 D_8082B924[] = {
0x07, 0x07, 0x03, 0x0F, 0x07, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0x1F, 0x0F, 0x03, 0x0F, 0x00, 0x00,
};
-s16 D_8082B944 = 0x42;
+// TODO: Also applies to owl warps
+s16 sGameOverRectPosY = 66;
s16 D_8082B948[][3] = {
{ 0x00FF, 0x00FF, 0x00FF }, { 0x00FF, 0x00FF, 0x00FF }, { 0x00FF, 0x00FF, 0x0000 },
@@ -222,30 +246,173 @@ s16 D_8082BB68[] = {
0x000E, 0xFFFE, 0xFFFE, 0xFFEE, 0xFFEE, 0x0000,
};
-s16 D_8082BB74[] = {
- 0x002D, 0x004E, 0x000A, 0x002D, 0x0050, 0x000B, 0xFF93, 0xFFA9, 0xFFBF, 0xFFD7, 0xFFED, 0xFFEE, 0xFF93, 0xFFA9,
- 0xFFBF, 0xFFD7, 0xFFED, 0xFFEE, 0xFF99, 0x0007, 0x0052, 0xFF92, 0xFFCA, 0xFF9E, 0xFFAA, 0xFFB6, 0xFFC2, 0xFFCE,
- 0xFFDA, 0xFFE6, 0xFFF2, 0xFF9E, 0xFFAA, 0xFFB6, 0xFFC2, 0xFFCE, 0xFFDA, 0xFFE6, 0xFFF2, 0x0000,
+s16 sQuestVtxRectLeft[] = {
+ 45, // QUEST_REMAINS_ODOLWA
+ 78, // QUEST_REMAINS_GOHT
+ 10, // QUEST_REMAINS_GYORG
+ 45, // QUEST_REMAINS_TWINMOLD
+ 80, // QUEST_SHIELD
+ 11, // QUEST_SWORD
+ -109, // QUEST_SONG_SONATA
+ -87, // QUEST_SONG_LULLABY
+ -65, // QUEST_SONG_BOSSA_NOVA
+ -41, // QUEST_SONG_ELEGY
+ -19, // QUEST_SONG_OATH
+ -18, // QUEST_SONG_SARIA
+ -109, // QUEST_SONG_TIME
+ -87, // QUEST_SONG_HEALING
+ -65, // QUEST_SONG_EPONA
+ -41, // QUEST_SONG_SOARING
+ -19, // QUEST_SONG_STORMS
+ -18, // QUEST_SONG_SUN
+ -103, // QUEST_BOMBERS_NOTEBOOK
+ 7, // QUEST_QUIVER
+ 82, // QUEST_BOMB_BAG
+ -110, // QUEST_SKULL_TOKEN (unused)
+ -54, // QUEST_HEART_PIECE
+ -98, // ocarina song button index 0
+ -86, // ocarina song button index 1
+ -74, // ocarina song button index 2
+ -62, // ocarina song button index 3
+ -50, // ocarina song button index 4
+ -38, // ocarina song button index 5
+ -26, // ocarina song button index 6
+ -14, // ocarina song button index 7
+ -98, // ocarina input button index 0
+ -86, // ocarina input button index 1
+ -74, // ocarina input button index 2
+ -62, // ocarina input button index 3
+ -50, // ocarina input button index 4
+ -38, // ocarina input button index 5
+ -26, // ocarina input button index 6
+ -14, // ocarina input button index 7
};
-s16 D_8082BBC4[] = {
- 0x003E, 0x002A, 0x002A, 0x0014, 0xFFF7, 0xFFF7, 0xFFEC, 0xFFEC, 0xFFEC, 0xFFEC, 0xFFEC, 0xFFEC, 0x0002, 0x0002,
- 0x0002, 0x0002, 0x0002, 0x0002, 0x0036, 0xFFD4, 0xFFD4, 0x0022, 0x003A, 0xFFCC, 0xFFCC, 0xFFCC, 0xFFCC, 0xFFCC,
- 0xFFCC, 0xFFCC, 0xFFCC, 0xFFCC, 0xFFCC, 0xFFCC, 0xFFCC, 0xFFCC, 0xFFCC, 0xFFCC, 0xFFCC, 0x0000,
+s16 sQuestVtxRectTop[] = {
+ 62, // QUEST_REMAINS_ODOLWA
+ 42, // QUEST_REMAINS_GOHT
+ 42, // QUEST_REMAINS_GYORG
+ 20, // QUEST_REMAINS_TWINMOLD
+ -9, // QUEST_SHIELD
+ -9, // QUEST_SWORD
+ -20, // QUEST_SONG_SONATA
+ -20, // QUEST_SONG_LULLABY
+ -20, // QUEST_SONG_BOSSA_NOVA
+ -20, // QUEST_SONG_ELEGY
+ -20, // QUEST_SONG_OATH
+ -20, // QUEST_SONG_SARIA
+ 2, // QUEST_SONG_TIME
+ 2, // QUEST_SONG_HEALING
+ 2, // QUEST_SONG_EPONA
+ 2, // QUEST_SONG_SOARING
+ 2, // QUEST_SONG_STORMS
+ 2, // QUEST_SONG_SUN
+ 54, // QUEST_BOMBERS_NOTEBOOK
+ -44, // QUEST_QUIVER
+ -44, // QUEST_BOMB_BAG
+ 34, // QUEST_SKULL_TOKEN (unused)
+ 58, // QUEST_HEART_PIECE
+ -52, // ocarina song button index 0
+ -52, // ocarina song button index 1
+ -52, // ocarina song button index 2
+ -52, // ocarina song button index 3
+ -52, // ocarina song button index 4
+ -52, // ocarina song button index 5
+ -52, // ocarina song button index 6
+ -52, // ocarina song button index 7
+ -52, // ocarina input button index 0
+ -52, // ocarina input button index 1
+ -52, // ocarina input button index 2
+ -52, // ocarina input button index 3
+ -52, // ocarina input button index 4
+ -52, // ocarina input button index 5
+ -52, // ocarina input button index 6
+ -52, // ocarina input button index 7
};
-s16 D_8082BC14[] = {
- 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
- 0x0010, 0x0010, 0x0010, 0x0010, 0x0020, 0x0020, 0x0020, 0x0018, 0x0030, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
- 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0000,
+s16 sQuestVtxWidths[] = {
+ 32, // QUEST_REMAINS_ODOLWA
+ 32, // QUEST_REMAINS_GOHT
+ 32, // QUEST_REMAINS_GYORG
+ 32, // QUEST_REMAINS_TWINMOLD
+ 32, // QUEST_SHIELD
+ 32, // QUEST_SWORD
+ 16, // QUEST_SONG_SONATA
+ 16, // QUEST_SONG_LULLABY
+ 16, // QUEST_SONG_BOSSA_NOVA
+ 16, // QUEST_SONG_ELEGY
+ 16, // QUEST_SONG_OATH
+ 16, // QUEST_SONG_SARIA
+ 16, // QUEST_SONG_TIME
+ 16, // QUEST_SONG_HEALING
+ 16, // QUEST_SONG_EPONA
+ 16, // QUEST_SONG_SOARING
+ 16, // QUEST_SONG_STORMS
+ 16, // QUEST_SONG_SUN
+ 32, // QUEST_BOMBERS_NOTEBOOK
+ 32, // QUEST_QUIVER
+ 32, // QUEST_BOMB_BAG
+ 24, // QUEST_SKULL_TOKEN (unused)
+ 48, // QUEST_HEART_PIECE
+ 16, // ocarina song button index 0
+ 16, // ocarina song button index 1
+ 16, // ocarina song button index 2
+ 16, // ocarina song button index 3
+ 16, // ocarina song button index 4
+ 16, // ocarina song button index 5
+ 16, // ocarina song button index 6
+ 16, // ocarina song button index 7
+ 16, // ocarina input button index 0
+ 16, // ocarina input button index 1
+ 16, // ocarina input button index 2
+ 16, // ocarina input button index 3
+ 16, // ocarina input button index 4
+ 16, // ocarina input button index 5
+ 16, // ocarina input button index 6
+ 16, // ocarina input button index 7
};
-s16 D_8082BC64[] = {
- 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
- 0x0018, 0x0018, 0x0018, 0x0018, 0x0020, 0x0020, 0x0020, 0x0018, 0x0030, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
- 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0000,
+s16 sQuestVtxHeights[] = {
+ 32, // QUEST_REMAINS_ODOLWA
+ 32, // QUEST_REMAINS_GOHT
+ 32, // QUEST_REMAINS_GYORG
+ 32, // QUEST_REMAINS_TWINMOLD
+ 32, // QUEST_SHIELD
+ 32, // QUEST_SWORD
+ 24, // QUEST_SONG_SONATA
+ 24, // QUEST_SONG_LULLABY
+ 24, // QUEST_SONG_BOSSA_NOVA
+ 24, // QUEST_SONG_ELEGY
+ 24, // QUEST_SONG_OATH
+ 24, // QUEST_SONG_SARIA
+ 24, // QUEST_SONG_TIME
+ 24, // QUEST_SONG_HEALING
+ 24, // QUEST_SONG_EPONA
+ 24, // QUEST_SONG_SOARING
+ 24, // QUEST_SONG_STORMS
+ 24, // QUEST_SONG_SUN
+ 32, // QUEST_BOMBERS_NOTEBOOK
+ 32, // QUEST_QUIVER
+ 32, // QUEST_BOMB_BAG
+ 24, // QUEST_SKULL_TOKEN (unused)
+ 48, // QUEST_HEART_PIECE
+ 16, // ocarina song button index 0
+ 16, // ocarina song button index 1
+ 16, // ocarina song button index 2
+ 16, // ocarina song button index 3
+ 16, // ocarina song button index 4
+ 16, // ocarina song button index 5
+ 16, // ocarina song button index 6
+ 16, // ocarina song button index 7
+ 16, // ocarina input button index 0
+ 16, // ocarina input button index 1
+ 16, // ocarina input button index 2
+ 16, // ocarina input button index 3
+ 16, // ocarina input button index 4
+ 16, // ocarina input button index 5
+ 16, // ocarina input button index 6
+ 16, // ocarina input button index 7
};
-
f32 D_8082BCB4[] = {
-62.0f, -36.0f, -10.0f, 16.0f, 42.0f, 68.0f,
};
@@ -293,41 +460,28 @@ f32 D_8082BE28[] = {
s16 D_8082BE84 = 0;
-s16 D_8082BE88[] = {
- 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025,
-};
+void func_80821900(void* segment, u32 texIndex) {
+ CmpDma_LoadFile(SEGMENT_ROM_START(map_name_static), texIndex, segment, 0x400);
+}
-s32 D_8082BE9C = 0;
+void func_8082192C(void* segment, u32 texIndex) {
+ CmpDma_LoadFile(SEGMENT_ROM_START(map_name_static), texIndex, segment, 0xA00);
+}
-s32 D_8082BEA0 = 0;
-
-s16 D_8082BEA4 = 10;
-
-s32 D_8082BEA8 = 0;
-
-s32 D_8082BEAC = 0;
-
-s32 D_8082BEB0 = 0;
-
-s32 D_8082BEB4 = 0;
-
-s32 D_8082BEB8[] = { 0, 0 };
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80821900.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_8082192C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80821958.s")
+void func_80821958(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")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80821A04.s")
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_DrawQuadTextureRGBA32.s")
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_DrawTexQuadRGBA32.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80821CC4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80821D84.s")
+void KaleidoScope_HandlePageToggles(PlayState* play, Input* input);
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_HandlePageToggles.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80821F30.s")
@@ -335,15 +489,18 @@ s32 D_8082BEB8[] = { 0, 0 };
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80823350.s")
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80824738.s")
+void KaleidoScope_UpdateNamePanel(PlayState* play);
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_UpdateNamePanel.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_808248D0.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80824B90.s")
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_808256E4.s")
+void KaleidoScope_UpdateOwlWarpNamePanel(PlayState* play);
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_UpdateOwlWarpNamePanel.s")
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_8082585C.s")
+void KaleidoScope_UpdateSwitchPage(PlayState* play, Input* input);
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_UpdateSwitchPage.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_SetView.s")
@@ -359,8 +516,965 @@ s32 D_8082BEB8[] = { 0, 0 };
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_Draw.s")
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_808286D8.s")
+void KaleidoScope_GrayOutTextureRGBA32(u32* texture, u16 pixelCount);
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_GrayOutTextureRGBA32.s")
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80828788.s")
+void KaleidoScope_UpdateOpening(PlayState* play) {
+ PauseContext* pauseCtx = &play->pauseCtx;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_Update.s")
+ pauseCtx->eye.x += sPageSwitchEyeDx[pauseCtx->nextPageMode] * 2.0f;
+ pauseCtx->eye.z += sPageSwitchEyeDz[pauseCtx->nextPageMode] * 2.0f;
+ pauseCtx->switchPageTimer += 8;
+
+ if (pauseCtx->switchPageTimer == 64) {
+ // Finished opening
+ 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_A] = BTN_ENABLED;
+ } else {
+ 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;
+ }
+
+ pauseCtx->pageIndex = sPageSwitchNextPageIndex[pauseCtx->nextPageMode];
+ pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE;
+ pauseCtx->state++; // PAUSE_STATE_MAIN
+ pauseCtx->alpha = 255;
+ func_80115844(play, DO_ACTION_RETURN);
+ } else if (pauseCtx->switchPageTimer == 64) {
+ pauseCtx->pageIndex = sPageSwitchNextPageIndex[pauseCtx->nextPageMode];
+ pauseCtx->nextPageMode = (pauseCtx->pageIndex * 2) + 1;
+ }
+}
+
+void KaleidoScope_Update(PlayState* play) {
+ static u16 sCursorPointsToOcarinaModes[] = {
+ 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+ };
+ static s16 sUnpausedHudVisibility = HUD_VISIBILITY_IDLE;
+ static s16 sNextMainState = PAUSE_MAIN_STATE_IDLE;
+ static s16 sDelayTimer = 10;
+ static s16 sGameOverColorTimer = 0;
+ static s16 sStickXRepeatTimer = 0;
+ static s16 sStickYRepeatTimer = 0;
+ static s16 sStickXRepeatState = 0;
+ static s16 sStickYRepeatState = 0;
+ PauseContext* pauseCtx = &play->pauseCtx;
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ MessageContext* msgCtx = &play->msgCtx;
+ GameOverContext* gameOverCtx = &play->gameOverCtx;
+ SramContext* sramCtx = &play->sramCtx;
+ Input* input = CONTROLLER1(&play->state);
+ size_t size0;
+ size_t size1;
+ size_t size2;
+ u16 itemId;
+ u16 worldMapCursorPoint;
+ void* iconItemLangSegment;
+ s16 stepR;
+ s16 stepG;
+ s16 stepB;
+ s16 stepA;
+ s16 stickAdjX = input->rel.stick_x;
+
+ func_80109428(play);
+
+ pauseCtx->stickAdjX = input->rel.stick_x;
+ pauseCtx->stickAdjY = input->rel.stick_y;
+
+ switch (pauseCtx->state) {
+ case PAUSE_STATE_OPENING_2:
+ sUnpausedHudVisibility = gSaveContext.hudVisibility;
+ sPauseMenuVerticalOffset = -6240.0f;
+
+ sUnpausedButtonStatus[EQUIP_SLOT_B] = gSaveContext.buttonStatus[EQUIP_SLOT_B];
+ sUnpausedButtonStatus[EQUIP_SLOT_C_LEFT] = gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT];
+ sUnpausedButtonStatus[EQUIP_SLOT_C_DOWN] = gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN];
+ sUnpausedButtonStatus[EQUIP_SLOT_C_RIGHT] = gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT];
+ sUnpausedButtonStatus[EQUIP_SLOT_A] = gSaveContext.buttonStatus[EQUIP_SLOT_A];
+
+ pauseCtx->cursorXIndex[PAUSE_MAP] = 0;
+ pauseCtx->cursorSlot[PAUSE_MAP] = R_REVERSE_FLOOR_INDEX + DUNGEON_FLOOR_INDEX_4;
+ pauseCtx->cursorPoint[PAUSE_MAP] = pauseCtx->unk_256 = R_REVERSE_FLOOR_INDEX + DUNGEON_FLOOR_INDEX_4;
+
+ sPauseCursorLeftX = -175;
+ sPauseCursorRightX = 155;
+ 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);
+
+ gSegments[0x08] = PHYSICAL_TO_VIRTUAL(pauseCtx->iconItemSegment);
+
+ for (itemId = 0; itemId <= ITEM_BOW_ARROW_FIRE; itemId++) {
+ if (!gPlayerFormItemRestrictions[(void)0, gSaveContext.save.playerForm][(s32)itemId]) {
+ KaleidoScope_GrayOutTextureRGBA32(Lib_SegmentedToVirtual(gItemIcons[(s32)itemId]), 0x400);
+ }
+ }
+
+ 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);
+
+ pauseCtx->iconItemAltSegment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItem24Segment + size1);
+ if (func_8010A0A4(play)) {
+ size_t size = SEGMENT_ROM_SIZE(icon_item_dungeon_static);
+
+ DmaMgr_SendRequest0(pauseCtx->iconItemAltSegment, SEGMENT_ROM_START(icon_item_dungeon_static), size);
+ iconItemLangSegment =
+ func_801068FC(play, (void*)ALIGN16((uintptr_t)pauseCtx->iconItemAltSegment + size), size);
+ sInDungeonScene = true;
+ } else {
+ size_t size;
+
+ sInDungeonScene = false;
+ size = SEGMENT_ROM_SIZE(icon_item_field_static);
+ DmaMgr_SendRequest0(pauseCtx->iconItemAltSegment, _icon_item_field_staticSegmentRomStart, size);
+ iconItemLangSegment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItemAltSegment + size);
+ }
+
+ pauseCtx->iconItemLangSegment = iconItemLangSegment;
+ size2 = SEGMENT_ROM_SIZE(icon_item_jpn_static);
+ DmaMgr_SendRequest0(pauseCtx->iconItemLangSegment, SEGMENT_ROM_START(icon_item_jpn_static), size2);
+
+ 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));
+ }
+
+ pauseCtx->iconItemVtxSegment = (void*)ALIGN16((uintptr_t)pauseCtx->nameSegment + 0xA00);
+ DmaMgr_SendRequest0(pauseCtx->iconItemVtxSegment, SEGMENT_ROM_START(icon_item_vtx_static),
+ SEGMENT_ROM_SIZE(icon_item_vtx_static));
+
+ pauseCtx->unk_2B6 = 255;
+ pauseCtx->unk_2B7 = 255;
+ pauseCtx->unk_2B8 = 255;
+ pauseCtx->state = PAUSE_STATE_OPENING_3;
+ break;
+
+ case PAUSE_STATE_OPENING_3:
+ pauseCtx->infoPanelOffsetY += 10;
+ pauseCtx->itemPageRoll = pauseCtx->mapPageRoll = pauseCtx->questPageRoll = pauseCtx->maskPageRoll -= 40.0f;
+
+ interfaceCtx->startAlpha += 63;
+ sPauseCursorLeftX += (s16)(sPauseCursorLeftMoveOffsetX / 4);
+ sPauseCursorRightX += (s16)(sPauseCursorRightMoveOffsetX / 4);
+ pauseCtx->alpha += 31;
+ if (pauseCtx->itemPageRoll == 0) {
+ interfaceCtx->startAlpha = 255;
+ sPauseMenuVerticalOffset = 0.0f;
+ pauseCtx->state = PAUSE_STATE_OPENING_4;
+ }
+
+ KaleidoScope_UpdateOpening(play);
+ break;
+
+ case PAUSE_STATE_OPENING_4:
+ pauseCtx->alpha += 31;
+ KaleidoScope_UpdateOpening(play);
+
+ if (pauseCtx->state == PAUSE_STATE_MAIN) {
+ KaleidoScope_UpdateNamePanel(play);
+ }
+ break;
+
+ case PAUSE_STATE_MAIN:
+ switch (pauseCtx->mainState) {
+ case PAUSE_MAIN_STATE_IDLE:
+ if (!pauseCtx->itemDescriptionOn &&
+ (CHECK_BTN_ALL(input->press.button, BTN_START) || CHECK_BTN_ALL(input->press.button, BTN_B))) {
+ func_8011552C(play, DO_ACTION_NONE);
+ pauseCtx->state = PAUSE_STATE_UNPAUSE_SETUP;
+ sPauseMenuVerticalOffset = -6240.0f;
+ func_801A3AEC(0);
+ }
+ break;
+
+ case PAUSE_MAIN_STATE_SWITCHING_PAGE:
+ KaleidoScope_UpdateSwitchPage(play, input);
+ break;
+
+ case PAUSE_MAIN_STATE_SONG_PLAYBACK:
+ // Song is in playback
+ pauseCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
+ if (pauseCtx->ocarinaStaff->state == 0) {
+ // Song playback is finished, give song prompt to player
+ pauseCtx->mainState = PAUSE_MAIN_STATE_SONG_PROMPT_INIT;
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ }
+ break;
+
+ case PAUSE_MAIN_STATE_EQUIP_ITEM:
+ KaleidoScope_UpdateItemEquip(play);
+ break;
+
+ case PAUSE_MAIN_STATE_SONG_PROMPT_INIT:
+ break;
+
+ case PAUSE_MAIN_STATE_SONG_PROMPT:
+ pauseCtx->ocarinaStaff = AudioOcarina_GetPlayingStaff();
+
+ if (CHECK_BTN_ALL(input->press.button, BTN_START) || CHECK_BTN_ALL(input->press.button, BTN_B)) {
+ // Abort having the player play the song and close the pause menu
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ func_8011552C(play, DO_ACTION_NONE);
+ pauseCtx->state = PAUSE_STATE_UNPAUSE_SETUP;
+ sPauseMenuVerticalOffset = -6240.0f;
+ func_801A3AEC(0);
+ pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE;
+ } else if (pauseCtx->ocarinaStaff->state == pauseCtx->ocarinaSongIndex) {
+ // The player successfully played the song
+ play_sound(NA_SE_SY_TRE_BOX_APPEAR);
+ sNextMainState = PAUSE_MAIN_STATE_IDLE;
+ sDelayTimer = 30;
+ pauseCtx->mainState = PAUSE_MAIN_STATE_SONG_PROMPT_DONE;
+ } else if (pauseCtx->ocarinaStaff->state == 0xFF) {
+ // The player failed to play the song
+ play_sound(NA_SE_SY_OCARINA_ERROR);
+ sNextMainState = PAUSE_MAIN_STATE_SONG_PROMPT_INIT;
+ sDelayTimer = 20;
+ pauseCtx->mainState = PAUSE_MAIN_STATE_SONG_PROMPT_DONE;
+ }
+ break;
+
+ case PAUSE_MAIN_STATE_SONG_PROMPT_DONE:
+ sDelayTimer--;
+ if (sDelayTimer == 0) {
+ pauseCtx->mainState = sNextMainState;
+ if (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ }
+ }
+ break;
+
+ case PAUSE_MAIN_STATE_SONG_PROMPT_UNUSED:
+ break;
+
+ case PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG:
+ if (CHECK_BTN_ALL(input->press.button, BTN_START) || CHECK_BTN_ALL(input->press.button, BTN_B)) {
+ AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
+ func_8011552C(play, DO_ACTION_NONE);
+ pauseCtx->state = PAUSE_STATE_UNPAUSE_SETUP;
+ sPauseMenuVerticalOffset = -6240.0f;
+ func_801A3AEC(0);
+ pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE;
+ }
+ break;
+
+ case PAUSE_MAIN_STATE_SONG_PLAYBACK_INIT:
+ break;
+
+ case PAUSE_MAIN_STATE_EQUIP_MASK:
+ KaleidoScope_UpdateMaskEquip(play);
+ break;
+
+ case PAUSE_MAIN_STATE_BOMBERS_NOTEBOOK_OPEN:
+ if (!play->pauseCtx.bombersNotebookOpen) {
+ pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE;
+ }
+ break;
+
+ default:
+ pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE;
+ break;
+ }
+ break;
+
+ case PAUSE_STATE_SAVEPROMPT:
+ switch (pauseCtx->savePromptState) {
+ case PAUSE_SAVEPROMPT_STATE_0:
+ pauseCtx->roll -= 78.5f;
+ sPauseCursorLeftX -= (s16)(sPauseCursorLeftMoveOffsetX / 4);
+ sPauseCursorRightX -= (s16)(sPauseCursorRightMoveOffsetX / 4);
+ if (pauseCtx->roll <= -628.0f) {
+ pauseCtx->roll = -628.0f;
+ pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_1;
+ }
+ break;
+
+ case PAUSE_SAVEPROMPT_STATE_1:
+ 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;
+ } 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) {
+ pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_5;
+ } else {
+ func_80147008(sramCtx, D_801C67C8[gSaveContext.fileNum],
+ D_801C67F0[gSaveContext.fileNum]);
+ func_80147020(sramCtx);
+ pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_4;
+ }
+ sDelayTimer = 90;
+ }
+ } else if (CHECK_BTN_ALL(input->press.button, BTN_START)) {
+ func_8011552C(play, DO_ACTION_NONE);
+ pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_3;
+ sPauseMenuVerticalOffset = -6240.0f;
+ D_8082B90C = pauseCtx->roll;
+ 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;
+ D_8082B90C = pauseCtx->roll;
+ }
+ break;
+
+ case PAUSE_SAVEPROMPT_STATE_4:
+ if (sramCtx->status == 0) {
+ pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_5;
+ }
+ break;
+
+ case PAUSE_SAVEPROMPT_STATE_5:
+ if (CHECK_BTN_ALL(input->press.button, BTN_B) || CHECK_BTN_ALL(input->press.button, BTN_A) ||
+ CHECK_BTN_ALL(input->press.button, BTN_START) || (--sDelayTimer == 0)) {
+ func_8011552C(play, DO_ACTION_NONE);
+ pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_3;
+ sPauseMenuVerticalOffset = -6240.0f;
+ D_8082B90C = pauseCtx->roll;
+ func_801A3AEC(0);
+ }
+ break;
+
+ case PAUSE_SAVEPROMPT_STATE_3:
+ case PAUSE_SAVEPROMPT_STATE_7:
+ if (pauseCtx->roll != (D_8082B90C + 160.0f)) {
+ pauseCtx->itemPageRoll = pauseCtx->mapPageRoll = pauseCtx->questPageRoll =
+ pauseCtx->maskPageRoll += 40.0f;
+ pauseCtx->roll += 40.0f;
+ pauseCtx->infoPanelOffsetY -= 10;
+ sPauseCursorLeftX -= (s16)(sPauseCursorLeftMoveOffsetX / 4);
+ sPauseCursorRightX -= (s16)(sPauseCursorRightMoveOffsetX / 4);
+ pauseCtx->alpha -= 63;
+ if (pauseCtx->roll == (D_8082B90C + 160.0f)) {
+ pauseCtx->alpha = 0;
+ }
+ } else {
+ pauseCtx->debugEditor = DEBUG_EDITOR_NONE;
+ pauseCtx->state = PAUSE_STATE_UNPAUSE_CLOSE;
+ pauseCtx->itemPageRoll = pauseCtx->mapPageRoll = pauseCtx->questPageRoll =
+ pauseCtx->maskPageRoll = 160.0f;
+ pauseCtx->roll = -434.0f;
+ pauseCtx->namedItem = PAUSE_ITEM_NONE;
+ pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE;
+ }
+ break;
+
+ case PAUSE_SAVEPROMPT_STATE_2:
+ 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->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];
+ if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) ||
+ (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT)) {
+ KaleidoScope_MoveCursorToSpecialPos(play, pauseCtx->cursorSpecialPos);
+ } else {
+ func_80821A04(play);
+ }
+ }
+ break;
+
+ case PAUSE_SAVEPROMPT_STATE_6:
+ if (interfaceCtx->screenFillAlpha != 255) {
+ interfaceCtx->screenFillAlpha += 10;
+ if (interfaceCtx->screenFillAlpha >= 255) {
+ interfaceCtx->screenFillAlpha = 255;
+ pauseCtx->state = PAUSE_STATE_OFF;
+ Game_SetFramerateDivisor(&play->state, 3);
+ R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_UNK4;
+ Object_LoadAll(&play->objectCtx);
+ BgCheck_InitCollisionHeaders(&play->colCtx, play);
+ STOP_GAMESTATE(&play->state);
+ SET_NEXT_GAMESTATE(&play->state, TitleSetup_Init, sizeof(TitleSetupState));
+ func_801A4058(0x14);
+ gSaveContext.seqId = (u8)NA_BGM_DISABLED;
+ gSaveContext.ambienceId = AMBIENCE_ID_DISABLED;
+ }
+ }
+ break;
+ }
+ break;
+
+ case PAUSE_STATE_GAMEOVER_2:
+ pauseCtx->cursorSlot[PAUSE_MAP] = R_REVERSE_FLOOR_INDEX + DUNGEON_FLOOR_INDEX_4;
+ pauseCtx->cursorPoint[PAUSE_MAP] = R_REVERSE_FLOOR_INDEX + DUNGEON_FLOOR_INDEX_4;
+ sPauseCursorLeftX = -175;
+ sPauseCursorRightX = 155;
+ pauseCtx->roll = -434.0f;
+ Interface_SetHudVisibility(HUD_VISIBILITY_NONE);
+
+ 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);
+
+ 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);
+
+ pauseCtx->iconItemAltSegment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItem24Segment + size1);
+ size2 = SEGMENT_ROM_SIZE(icon_item_gameover_static);
+ DmaMgr_SendRequest0(pauseCtx->iconItemAltSegment, SEGMENT_ROM_START(icon_item_gameover_static), size2);
+
+ pauseCtx->iconItemLangSegment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItemAltSegment + size2);
+ DmaMgr_SendRequest0(pauseCtx->iconItemLangSegment, SEGMENT_ROM_START(icon_item_jpn_static),
+ SEGMENT_ROM_SIZE(icon_item_jpn_static));
+
+ gSaveContext.timerStates[TIMER_ID_MOON_CRASH] = TIMER_STATE_OFF;
+
+ sGameOverPrimR = 255;
+ sGameOverPrimG = 130;
+ sGameOverPrimB = 0;
+ sGameOverPrimAlpha = 0;
+ sGameOverEnvR = 30;
+ sGameOverEnvG = 0;
+ sGameOverEnvB = 0;
+ sGameOverRectPosY = 98;
+ sGameOverColorTimer = 30;
+
+ pauseCtx->promptChoice = PAUSE_PROMPT_YES;
+ pauseCtx->state++;
+ if (gameOverCtx->state == GAMEOVER_INACTIVE) {
+ pauseCtx->state++; // GAMEOVER_DEATH_START
+ }
+ break;
+
+ case PAUSE_STATE_GAMEOVER_3:
+ stepR = ABS_ALT(sGameOverPrimR - 30) / sGameOverColorTimer;
+ stepG = ABS_ALT(sGameOverPrimG - 0) / sGameOverColorTimer;
+ stepB = ABS_ALT(sGameOverPrimB - 0) / sGameOverColorTimer;
+ stepA = ABS_ALT(sGameOverPrimAlpha - 255) / sGameOverColorTimer;
+ if (sGameOverPrimR >= 30) {
+ sGameOverPrimR -= stepR;
+ } else {
+ sGameOverPrimR += stepR;
+ }
+ if (sGameOverPrimG >= 0) {
+ sGameOverPrimG -= stepG;
+ } else {
+ sGameOverPrimG += stepG;
+ }
+ if (sGameOverPrimB >= 0) {
+ sGameOverPrimB -= stepB;
+ } else {
+ sGameOverPrimB += stepB;
+ }
+ if (sGameOverPrimAlpha >= 255) {
+ sGameOverPrimAlpha -= stepA;
+ } else {
+ sGameOverPrimAlpha += stepA;
+ }
+
+ stepR = ABS_ALT(sGameOverEnvR - 255) / sGameOverColorTimer;
+ stepG = ABS_ALT(sGameOverEnvG - 130) / sGameOverColorTimer;
+ stepB = ABS_ALT(sGameOverEnvB - 0) / sGameOverColorTimer;
+ if (sGameOverEnvR >= 255) {
+ sGameOverEnvR -= stepR;
+ } else {
+ sGameOverEnvR += stepR;
+ }
+ if (sGameOverEnvG >= 130) {
+ sGameOverEnvG -= stepG;
+ } else {
+ sGameOverEnvG += stepG;
+ }
+ if (sGameOverEnvB >= 0) {
+ sGameOverEnvB -= stepB;
+ } else {
+ sGameOverEnvB += stepB;
+ }
+
+ sGameOverColorTimer--;
+ if (sGameOverColorTimer == 0) {
+ sGameOverPrimR = 30;
+ sGameOverPrimG = 0;
+ sGameOverPrimB = 0;
+ sGameOverPrimAlpha = 255;
+
+ sGameOverEnvR = 255;
+ sGameOverEnvG = 130;
+ sGameOverEnvB = 0;
+
+ sGameOverColorTimer = 40;
+ pauseCtx->state++;
+ }
+ break;
+
+ case PAUSE_STATE_GAMEOVER_4:
+ sGameOverColorTimer--;
+ if (sGameOverColorTimer == 0) {
+ pauseCtx->state = PAUSE_STATE_GAMEOVER_5;
+ }
+ break;
+
+ case PAUSE_STATE_GAMEOVER_5:
+ pauseCtx->infoPanelOffsetY += 10;
+ pauseCtx->roll -= 40.0f;
+ pauseCtx->itemPageRoll = pauseCtx->mapPageRoll = pauseCtx->questPageRoll = pauseCtx->maskPageRoll =
+ pauseCtx->roll;
+ interfaceCtx->startAlpha += 63;
+ sGameOverRectPosY -= 3;
+ sPauseCursorLeftX += (s16)(sPauseCursorLeftMoveOffsetX / 4);
+ sPauseCursorRightX += (s16)(sPauseCursorRightMoveOffsetX / 4);
+ pauseCtx->alpha += 31;
+ if (pauseCtx->roll < -628.0f) {
+ pauseCtx->roll = -628.0f;
+ interfaceCtx->startAlpha = 255;
+ sGameOverRectPosY = 66;
+ sPauseMenuVerticalOffset = 0.0f;
+ pauseCtx->alpha = 255;
+ if (gameOverCtx->state == GAMEOVER_INACTIVE) {
+ pauseCtx->state = PAUSE_STATE_GAMEOVER_SAVE_PROMPT;
+ } else {
+ pauseCtx->state = PAUSE_STATE_GAMEOVER_CONTINUE_PROMPT;
+ }
+ }
+ break;
+
+ case PAUSE_STATE_GAMEOVER_SAVE_PROMPT:
+ if (CHECK_BTN_ALL(input->press.button, BTN_A)) {
+ if (pauseCtx->promptChoice != PAUSE_PROMPT_YES) {
+ pauseCtx->promptChoice = PAUSE_PROMPT_YES;
+ play_sound(NA_SE_SY_DECIDE);
+ pauseCtx->state = PAUSE_STATE_OFF;
+ Game_SetFramerateDivisor(&play->state, 3);
+ R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_UNK4;
+ Object_LoadAll(&play->objectCtx);
+ BgCheck_InitCollisionHeaders(&play->colCtx, play);
+ } else {
+ play_sound(NA_SE_SY_PIECE_OF_HEART);
+ pauseCtx->promptChoice = PAUSE_PROMPT_YES;
+ Play_SaveCycleSceneFlags(&play->state);
+ gSaveContext.save.saveInfo.playerData.savedSceneId = play->sceneId;
+ gSaveContext.save.saveInfo.playerData.health = 0x30;
+ func_8014546C(sramCtx);
+ if (gSaveContext.unk_3F3F == 0) {
+ pauseCtx->state = PAUSE_STATE_GAMEOVER_8;
+ } else {
+ func_80147008(sramCtx, D_801C67C8[gSaveContext.fileNum], D_801C67F0[gSaveContext.fileNum]);
+ func_80147020(sramCtx);
+ pauseCtx->state = PAUSE_STATE_GAMEOVER_7;
+ }
+ sDelayTimer = 90;
+ }
+ } else if ((pauseCtx->promptChoice == PAUSE_PROMPT_YES) && (stickAdjX >= 30)) {
+ play_sound(NA_SE_SY_CURSOR);
+ pauseCtx->promptChoice = PAUSE_PROMPT_NO;
+ } else if ((pauseCtx->promptChoice != PAUSE_PROMPT_YES) && (stickAdjX <= -30)) {
+ play_sound(NA_SE_SY_CURSOR);
+ pauseCtx->promptChoice = PAUSE_PROMPT_YES;
+ }
+ break;
+
+ case PAUSE_STATE_GAMEOVER_7:
+ if (sramCtx->status == 0) {
+ pauseCtx->state = PAUSE_STATE_OFF;
+ Game_SetFramerateDivisor(&play->state, 3);
+ R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_UNK4;
+ Object_LoadAll(&play->objectCtx);
+ BgCheck_InitCollisionHeaders(&play->colCtx, play);
+ }
+ break;
+
+ case PAUSE_STATE_GAMEOVER_8:
+ sDelayTimer--;
+ if (sDelayTimer == 0) {
+ pauseCtx->state = PAUSE_STATE_GAMEOVER_CONTINUE_PROMPT;
+ gameOverCtx->state++;
+ } else if ((sDelayTimer <= 80) &&
+ (CHECK_BTN_ALL(input->press.button, BTN_A) || CHECK_BTN_ALL(input->press.button, BTN_START))) {
+ pauseCtx->state = PAUSE_STATE_GAMEOVER_CONTINUE_PROMPT;
+ gameOverCtx->state++;
+ func_801A3AEC(0);
+ }
+ break;
+
+ case PAUSE_STATE_GAMEOVER_CONTINUE_PROMPT:
+ if (CHECK_BTN_ALL(input->press.button, BTN_A) || CHECK_BTN_ALL(input->press.button, BTN_START)) {
+ if (pauseCtx->promptChoice == PAUSE_PROMPT_YES) {
+ play_sound(NA_SE_SY_PIECE_OF_HEART);
+ Play_SaveCycleSceneFlags(&play->state);
+ if (gSaveContext.save.entrance == ENTRANCE(UNSET_0D, 0)) {}
+ } else { // PAUSE_PROMPT_NO
+ play_sound(NA_SE_SY_DECIDE);
+ }
+ pauseCtx->state = PAUSE_STATE_GAMEOVER_10;
+ }
+ break;
+
+ case PAUSE_STATE_GAMEOVER_10:
+ if (interfaceCtx->screenFillAlpha != 255) {
+ interfaceCtx->screenFillAlpha += 10;
+ if (interfaceCtx->screenFillAlpha >= 255) {
+ interfaceCtx->screenFillAlpha = 255;
+
+ pauseCtx->state = PAUSE_STATE_OFF;
+ Game_SetFramerateDivisor(&play->state, 3);
+ R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_UNK4;
+ Object_LoadAll(&play->objectCtx);
+ BgCheck_InitCollisionHeaders(&play->colCtx, play);
+
+ if (pauseCtx->promptChoice == PAUSE_PROMPT_YES) {
+ func_80169FDC(&play->state);
+ gSaveContext.respawnFlag = -2;
+ gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
+ gSaveContext.save.saveInfo.playerData.health = 0x30;
+ Audio_SetSpec(0xA);
+ gSaveContext.healthAccumulator = 0;
+ gSaveContext.magicState = MAGIC_STATE_IDLE;
+ gSaveContext.magicFlag = 0;
+ gSaveContext.magicCapacity = 0;
+ gSaveContext.magicFillTarget = gSaveContext.save.saveInfo.playerData.magic;
+ gSaveContext.save.saveInfo.playerData.magicLevel = 0;
+ gSaveContext.save.saveInfo.playerData.magic = 0;
+ } else { // PAUSE_PROMPT_NO
+ STOP_GAMESTATE(&play->state);
+ SET_NEXT_GAMESTATE(&play->state, TitleSetup_Init, sizeof(TitleSetupState));
+ }
+ }
+ }
+ break;
+
+ case PAUSE_STATE_OWLWARP_2:
+ sPauseMenuVerticalOffset = -6240.0f;
+
+ sUnpausedButtonStatus[EQUIP_SLOT_B] = gSaveContext.buttonStatus[EQUIP_SLOT_B];
+ sUnpausedButtonStatus[EQUIP_SLOT_C_LEFT] = gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT];
+ sUnpausedButtonStatus[EQUIP_SLOT_C_DOWN] = gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN];
+ sUnpausedButtonStatus[EQUIP_SLOT_C_RIGHT] = gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT];
+ sUnpausedButtonStatus[EQUIP_SLOT_A] = gSaveContext.buttonStatus[EQUIP_SLOT_A];
+
+ pauseCtx->cursorXIndex[PAUSE_MAP] = 0;
+ pauseCtx->cursorSlot[PAUSE_MAP] = R_REVERSE_FLOOR_INDEX + DUNGEON_FLOOR_INDEX_4;
+ pauseCtx->cursorPoint[PAUSE_MAP] = pauseCtx->unk_256 = R_REVERSE_FLOOR_INDEX + DUNGEON_FLOOR_INDEX_4;
+
+ sPauseCursorLeftX = -175;
+ 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);
+
+ pauseCtx->iconItemAltSegment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItemSegment + size0);
+ sInDungeonScene = false;
+ size1 = SEGMENT_ROM_SIZE(icon_item_field_static);
+ DmaMgr_SendRequest0(pauseCtx->iconItemAltSegment, SEGMENT_ROM_START(icon_item_field_static), size1);
+
+ pauseCtx->iconItemLangSegment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItemAltSegment + size1);
+ size2 = SEGMENT_ROM_SIZE(icon_item_jpn_static);
+ DmaMgr_SendRequest0(pauseCtx->iconItemLangSegment, SEGMENT_ROM_START(icon_item_jpn_static), size2);
+
+ 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);
+
+ pauseCtx->iconItemVtxSegment = (void*)ALIGN16((uintptr_t)pauseCtx->nameSegment + 0xA00);
+ DmaMgr_SendRequest0(pauseCtx->iconItemVtxSegment, SEGMENT_ROM_START(icon_item_vtx_static),
+ SEGMENT_ROM_SIZE(icon_item_vtx_static));
+
+ pauseCtx->state = PAUSE_STATE_OWLWARP_3;
+ sGameOverRectPosY = 98;
+ pauseCtx->promptChoice = PAUSE_PROMPT_YES;
+ break;
+
+ case PAUSE_STATE_OWLWARP_3:
+ R_PAUSE_OWLWARP_ALPHA += 20;
+ pauseCtx->infoPanelOffsetY += 10;
+ pauseCtx->mapPageRoll -= 40.0f;
+ interfaceCtx->startAlpha += 63;
+ sGameOverRectPosY -= 3;
+ sPauseCursorLeftX += (s16)(sPauseCursorLeftMoveOffsetX / 4);
+ sPauseCursorRightX += (s16)(sPauseCursorRightMoveOffsetX / 4);
+ pauseCtx->alpha += 31;
+
+ if (pauseCtx->mapPageRoll == 0) {
+ interfaceCtx->startAlpha = 255;
+ sPauseMenuVerticalOffset = 0.0f;
+ pauseCtx->alpha = 255;
+ pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE;
+ pauseCtx->cursorSpecialPos = 0;
+ pauseCtx->state = PAUSE_STATE_OWLWARP_SELECT;
+ R_PAUSE_OWLWARP_ALPHA = 120;
+ }
+ break;
+
+ case PAUSE_STATE_OWLWARP_SELECT:
+ if (CHECK_BTN_ALL(input->press.button, BTN_START) || CHECK_BTN_ALL(input->press.button, BTN_B)) {
+ func_8011552C(play, DO_ACTION_NONE);
+ pauseCtx->state = PAUSE_STATE_OWLWARP_6;
+ sPauseMenuVerticalOffset = -6240.0f;
+ func_801A3AEC(0);
+ play->msgCtx.ocarinaMode = 4;
+ gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL;
+ } else if (CHECK_BTN_ALL(input->press.button, BTN_A)) {
+ play_sound(NA_SE_SY_DECIDE);
+ Message_StartTextbox(play, 0x1B93, NULL);
+ pauseCtx->state = PAUSE_STATE_OWLWARP_CONFIRM;
+ } else {
+ KaleidoScope_UpdateOwlWarpNamePanel(play);
+ }
+ break;
+
+ case PAUSE_STATE_OWLWARP_CONFIRM:
+ if (CHECK_BTN_ALL(input->press.button, BTN_A)) {
+ msgCtx->msgLength = 0;
+ msgCtx->msgMode = 0;
+ if (msgCtx->choiceIndex == 0) {
+ func_8011552C(play, DO_ACTION_NONE);
+ pauseCtx->state = PAUSE_STATE_OWLWARP_6;
+ sPauseMenuVerticalOffset = -6240.0f;
+ func_801A3AEC(0);
+ play->msgCtx.ocarinaMode = sCursorPointsToOcarinaModes[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]];
+ play_sound(NA_SE_SY_DECIDE);
+ } else {
+ pauseCtx->state = PAUSE_STATE_OWLWARP_SELECT;
+ func_8011552C(play, DO_ACTION_WARP);
+ play_sound(NA_SE_SY_MESSAGE_PASS);
+ }
+ } else if (CHECK_BTN_ALL(input->press.button, BTN_B)) {
+ msgCtx->msgLength = 0;
+ msgCtx->msgMode = 0;
+ pauseCtx->state = PAUSE_STATE_OWLWARP_SELECT;
+ play_sound(NA_SE_SY_MESSAGE_PASS);
+ } else if (CHECK_BTN_ALL(input->press.button, BTN_START)) {
+ msgCtx->msgLength = 0;
+ msgCtx->msgMode = 0;
+ func_8011552C(play, DO_ACTION_NONE);
+ pauseCtx->state = PAUSE_STATE_OWLWARP_6;
+ sPauseMenuVerticalOffset = -6240.0f;
+ func_801A3AEC(0);
+ play->msgCtx.ocarinaMode = 4;
+ gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL;
+ }
+ break;
+
+ case PAUSE_STATE_OWLWARP_6:
+ if (pauseCtx->mapPageRoll != 160.0f) {
+ R_PAUSE_OWLWARP_ALPHA -= 60;
+ if (R_PAUSE_OWLWARP_ALPHA <= 0) {
+ R_PAUSE_OWLWARP_ALPHA = 0;
+ }
+ pauseCtx->infoPanelOffsetY -= 10;
+ pauseCtx->mapPageRoll += 40.0f;
+ interfaceCtx->startAlpha -= 63;
+ sPauseCursorLeftX -= (s16)(sPauseCursorLeftMoveOffsetX / 4);
+ sPauseCursorRightX -= (s16)(sPauseCursorRightMoveOffsetX / 4);
+ pauseCtx->alpha -= 63;
+ if (pauseCtx->mapPageRoll == 160.0f) {
+ pauseCtx->alpha = 0;
+ }
+ } else {
+ pauseCtx->debugEditor = DEBUG_EDITOR_NONE;
+ pauseCtx->state = PAUSE_STATE_UNPAUSE_CLOSE;
+ pauseCtx->itemPageRoll = pauseCtx->mapPageRoll = pauseCtx->questPageRoll = pauseCtx->maskPageRoll =
+ 160.0f;
+ pauseCtx->namedItem = PAUSE_ITEM_NONE;
+ interfaceCtx->startAlpha = 0;
+ pauseCtx->pageIndex = pauseCtx->unk_2C8;
+ pauseCtx->cursorPoint[PAUSE_WORLD_MAP] = pauseCtx->unk_2CA;
+ }
+ break;
+
+ case PAUSE_STATE_UNPAUSE_SETUP:
+ if (pauseCtx->itemPageRoll != 160.0f) {
+ pauseCtx->infoPanelOffsetY -= 10;
+ pauseCtx->itemPageRoll = pauseCtx->mapPageRoll = pauseCtx->questPageRoll = pauseCtx->maskPageRoll +=
+ 40.0f;
+ interfaceCtx->startAlpha -= 63;
+ sPauseCursorLeftX -= (s16)(sPauseCursorLeftMoveOffsetX / 4);
+ sPauseCursorRightX -= (s16)(sPauseCursorRightMoveOffsetX / 4);
+ pauseCtx->alpha -= 63;
+ if (pauseCtx->itemPageRoll == 160.0f) {
+ pauseCtx->alpha = 0;
+ }
+ } else {
+ pauseCtx->debugEditor = DEBUG_EDITOR_NONE;
+ pauseCtx->state = PAUSE_STATE_UNPAUSE_CLOSE;
+ pauseCtx->maskPageRoll = 160.0f;
+ pauseCtx->questPageRoll = 160.0f;
+ pauseCtx->mapPageRoll = 160.0f;
+ pauseCtx->itemPageRoll = 160.0f;
+ pauseCtx->namedItem = PAUSE_ITEM_NONE;
+ interfaceCtx->startAlpha = 0;
+ }
+ break;
+
+ case PAUSE_STATE_UNPAUSE_CLOSE:
+ pauseCtx->state = PAUSE_STATE_OFF;
+ Game_SetFramerateDivisor(&play->state, 3);
+ R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_UNK4;
+ Object_LoadAll(&play->objectCtx);
+ BgCheck_InitCollisionHeaders(&play->colCtx, play);
+
+ gSaveContext.buttonStatus[EQUIP_SLOT_B] = sUnpausedButtonStatus[EQUIP_SLOT_B];
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = sUnpausedButtonStatus[EQUIP_SLOT_C_LEFT];
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = sUnpausedButtonStatus[EQUIP_SLOT_C_DOWN];
+ gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = sUnpausedButtonStatus[EQUIP_SLOT_C_RIGHT];
+ gSaveContext.buttonStatus[EQUIP_SLOT_A] = sUnpausedButtonStatus[EQUIP_SLOT_A];
+
+ Interface_UpdateButtonsPart2(play);
+ gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
+ Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
+ MsgEvent_SendNullTask();
+ func_80143324(play, &play->skyboxCtx, play->skyboxId);
+
+ if ((msgCtx->msgMode != 0) && (msgCtx->currentTextId == 0xFF)) {
+ func_80115844(play, DO_ACTION_STOP);
+ func_8011552C(play, DO_ACTION_STOP);
+ Interface_SetHudVisibility(HUD_VISIBILITY_A_B_C);
+ } else {
+ interfaceCtx->unk_222 = interfaceCtx->unk_224 = 0;
+ }
+ gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
+ Interface_SetHudVisibility(sUnpausedHudVisibility);
+ func_801A3A7C(0);
+ break;
+ }
+
+ // If stickAdj is held, set a delay to allow the cursor to read the next input.
+ // The first delay is given a longer time than all subsequent delays.
+ if (!IS_PAUSE_STATE_GAMEOVER && (pauseCtx->state != PAUSE_STATE_SAVEPROMPT)) {
+ if (pauseCtx->stickAdjX < -30) {
+ if (sStickXRepeatState == -1) {
+ sStickXRepeatTimer--;
+ if (sStickXRepeatTimer < 0) {
+ // Allow the input to register and apply the delay for all subsequent repeated inputs
+ sStickXRepeatTimer = 2;
+ } else {
+ // Cancel the current input
+ pauseCtx->stickAdjX = 0;
+ }
+ } else {
+ // Allow the input to register and apply the delay for the first repeated input
+ sStickXRepeatTimer = 10;
+ sStickXRepeatState = -1;
+ }
+ } else if (pauseCtx->stickAdjX > 30) {
+ if (sStickXRepeatState == 1) {
+ sStickXRepeatTimer--;
+ if (sStickXRepeatTimer < 0) {
+ // Allow the input to register and apply the delay for all subsequent repeated inputs
+ sStickXRepeatTimer = 2;
+ } else {
+ // Cancel the current input
+ pauseCtx->stickAdjX = 0;
+ }
+ } else {
+ // Allow the input to register and apply the delay for the first repeated input
+ sStickXRepeatTimer = 10;
+ sStickXRepeatState = 1;
+ }
+ } else {
+ sStickXRepeatState = 0;
+ }
+
+ if (pauseCtx->stickAdjY < -30) {
+ if (sStickYRepeatState == -1) {
+ sStickYRepeatTimer--;
+ if (sStickYRepeatTimer < 0) {
+ // Allow the input to register and apply the delay for all subsequent repeated inputs
+ sStickYRepeatTimer = 2;
+ } else {
+ // Cancel the current input
+ pauseCtx->stickAdjY = 0;
+ }
+ } else {
+ // Allow the input to register and apply the delay for the first repeated input
+ sStickYRepeatTimer = 10;
+ sStickYRepeatState = -1;
+ }
+ } else if (pauseCtx->stickAdjY > 30) {
+ if (sStickYRepeatState == 1) {
+ sStickYRepeatTimer--;
+ if (sStickYRepeatTimer < 0) {
+ // Allow the input to register and apply the delay for all subsequent repeated inputs
+ sStickYRepeatTimer = 2;
+ } else {
+ // Cancel the current input
+ pauseCtx->stickAdjY = 0;
+ }
+ } else {
+ // Allow the input to register and apply the delay for the first repeated input
+ sStickYRepeatTimer = 10;
+ sStickYRepeatState = 1;
+ }
+ } else {
+ sStickYRepeatState = 0;
+ }
+ }
+
+ // Process the Cursor input
+ if ((R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_READY) && (pauseCtx->debugEditor == DEBUG_EDITOR_NONE) &&
+ !IS_PAUSE_STATE_OWLWARP &&
+ (((pauseCtx->state >= PAUSE_STATE_OPENING_3) && (pauseCtx->state <= PAUSE_STATE_SAVEPROMPT)) ||
+ ((pauseCtx->state >= PAUSE_STATE_GAMEOVER_2) && (pauseCtx->state <= PAUSE_STATE_UNPAUSE_SETUP)))) {
+ if (!IS_PAUSE_STATE_GAMEOVER) {
+ switch (pauseCtx->pageIndex) {
+ case PAUSE_ITEM:
+ KaleidoScope_UpdateItemCursor(play);
+ break;
+
+ case PAUSE_MAP:
+ if (sInDungeonScene) {
+ KaleidoScope_UpdateDungeonCursor(play);
+ } else {
+ KaleidoScope_UpdateWorldMapCursor(play);
+ }
+ break;
+
+ case PAUSE_QUEST:
+ KaleidoScope_UpdateQuestCursor(play);
+ break;
+
+ case PAUSE_MASK:
+ KaleidoScope_UpdateMaskCursor(play);
+ break;
+ }
+
+ if ((pauseCtx->state == PAUSE_STATE_MAIN) &&
+ ((pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) ||
+ (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG))) {
+ KaleidoScope_HandlePageToggles(play, input);
+ }
+ }
+ if (pauseCtx->state == PAUSE_STATE_MAIN) {
+ KaleidoScope_UpdateNamePanel(play);
+ }
+ } else if (pauseCtx->state == PAUSE_STATE_OWLWARP_SELECT) {
+ KaleidoScope_UpdateWorldMapCursor(play);
+ KaleidoScope_UpdateNamePanel(play);
+ }
+
+ // Update the inventory editor
+ if ((pauseCtx->debugEditor == DEBUG_EDITOR_INVENTORY_INIT) || (pauseCtx->debugEditor == DEBUG_EDITOR_INVENTORY)) {
+ KaleidoScope_UpdateInventoryEditor(play);
+ }
+}
diff --git a/tools/ZAPD/.gitrepo b/tools/ZAPD/.gitrepo
index ddbb4547d..131ccdc88 100644
--- a/tools/ZAPD/.gitrepo
+++ b/tools/ZAPD/.gitrepo
@@ -6,7 +6,7 @@
[subrepo]
remote = https://github.com/zeldaret/ZAPD.git
branch = master
- commit = 87cb648b4311d20673452111edaf4d38a5290c28
- parent = 06412c070f0240eacfaa860eee99b9c723245b7f
+ commit = 23929ec9373d28cb298daad4ad7cb468e09c0a46
+ parent = 2e487b5008c129031ab311a3a7bfd42adeb4916b
method = merge
cmdver = 0.4.3
diff --git a/tools/ZAPD/ExporterTest/CollisionExporter.cpp b/tools/ZAPD/ExporterTest/CollisionExporter.cpp
index 87b9a05a2..db5ad1a79 100644
--- a/tools/ZAPD/ExporterTest/CollisionExporter.cpp
+++ b/tools/ZAPD/ExporterTest/CollisionExporter.cpp
@@ -58,9 +58,11 @@ void ExporterExample_Collision::Save(ZResource* res, [[maybe_unused]] fs::path o
writer->Seek(col->polyTypeDefSegmentOffset, SeekOffsetType::Start);
- for (uint16_t i = 0; i < col->polygonTypes.size(); i++)
- writer->Write(col->polygonTypes[i]);
-
+ for (const auto& poly : col->polygonTypes)
+ {
+ writer->Write(poly.data[0]);
+ writer->Write(poly.data[1]);
+ }
writer->Seek(col->camDataSegmentOffset, SeekOffsetType::Start);
for (auto entry : col->camData->entries)
diff --git a/tools/ZAPD/ExporterTest/ExporterTest.vcxproj b/tools/ZAPD/ExporterTest/ExporterTest.vcxproj
index 5bdfc7aa6..341f72ceb 100644
--- a/tools/ZAPD/ExporterTest/ExporterTest.vcxproj
+++ b/tools/ZAPD/ExporterTest/ExporterTest.vcxproj
@@ -30,7 +30,7 @@
Application
true
- v143
+ v142
Unicode
@@ -43,7 +43,7 @@
StaticLibrary
true
- v143
+ v142
Unicode
diff --git a/tools/ZAPD/ExporterTest/RoomExporter.cpp b/tools/ZAPD/ExporterTest/RoomExporter.cpp
index 6c5552d8f..9a5ea19d1 100644
--- a/tools/ZAPD/ExporterTest/RoomExporter.cpp
+++ b/tools/ZAPD/ExporterTest/RoomExporter.cpp
@@ -334,7 +334,7 @@ void ExporterExample_Room::Save(ZResource* res, fs::path outPath, BinaryWriter*
writer->Write(entry.rotX);
writer->Write(entry.rotY);
writer->Write(entry.rotZ);
- writer->Write(entry.initVar);
+ writer->Write(entry.params);
}
writer->Seek(oldOffset, SeekOffsetType::Start);
diff --git a/tools/ZAPD/Jenkinsfile b/tools/ZAPD/Jenkinsfile
index 9c4dde712..48535a51c 100644
--- a/tools/ZAPD/Jenkinsfile
+++ b/tools/ZAPD/Jenkinsfile
@@ -68,6 +68,15 @@ pipeline {
}
}
+ // INSTALL PYTHON DEPENDENCIES, currently MM only
+ stage('Install Python dependencies') {
+ steps {
+ dir('mm') {
+ sh 'python3 -m pip install -r requirements.txt'
+ }
+ }
+ }
+
// BUILD THE REPOS
stage('Build repos') {
parallel {
@@ -82,7 +91,7 @@ pipeline {
steps {
dir('mm') {
sh 'make -j disasm'
- sh 'make -j all'
+ sh 'make -j'
}
}
}
diff --git a/tools/ZAPD/Makefile b/tools/ZAPD/Makefile
index 2b47a8039..e725f94f8 100644
--- a/tools/ZAPD/Makefile
+++ b/tools/ZAPD/Makefile
@@ -15,7 +15,7 @@ else
CXX := g++
endif
-INC := -I ZAPD -I lib/elfio -I lib/libgfxd -I lib/tinyxml2 -I ZAPDUtils
+INC := -I ZAPD -I lib/libgfxd -I lib/tinyxml2 -I ZAPDUtils
CXXFLAGS := -fpic -std=c++17 -Wall -Wextra -fno-omit-frame-pointer
OPTFLAGS :=
diff --git a/tools/ZAPD/README.md b/tools/ZAPD/README.md
index 448aea033..bb96bab1b 100644
--- a/tools/ZAPD/README.md
+++ b/tools/ZAPD/README.md
@@ -71,9 +71,6 @@ ZAPD needs a _File parsing mode_ to be passed as first parameter. The options ar
- `blb`: "Build blob" mode.
- In this mode, ZAPD expects a BIN file as input and a filename as ouput.
- ZAPD will try to convert the given BIN into the contents of a `uint8_t` C array.
-- `bovl`: "Build overlay" mode.
- - In this mode, ZAPD expects an overlay C file as input, a filename as ouput and an overlay configuration path (`-cfg`).
- - ZAPD will generate a reloc `.s` file.
ZAPD also accepts the following list of extra parameters:
@@ -102,8 +99,6 @@ ZAPD also accepts the following list of extra parameters:
- `ia16`
- `ci4`
- `ci8`
-- `-cfg PATH`: Set cfg path (for overlays).
- - Can be used only in `bovl` mode.
- `-rconf PATH` Read Config File.
- `-eh`: Enable error handler.
- Only available in non-Windows environments.
diff --git a/tools/ZAPD/ZAPD/CrashHandler.cpp b/tools/ZAPD/ZAPD/CrashHandler.cpp
new file mode 100644
index 000000000..356866536
--- /dev/null
+++ b/tools/ZAPD/ZAPD/CrashHandler.cpp
@@ -0,0 +1,205 @@
+#include "CrashHandler.h"
+#include "Utils/StringHelper.h"
+
+#if __has_include()
+#define HAS_POSIX 1
+#else
+#define HAS_POSIX 0
+#endif
+
+#include
+#include
+#include
+#include
+
+#if HAS_POSIX == 1
+#include
+#include // for __cxa_demangle
+#include // for dladdr
+#include
+#include
+#elif defined(_MSC_VER)
+#include
+#include
+
+#include
+
+#pragma comment(lib, "Dbghelp.lib")
+#endif
+
+// Feel free to add more crash messages.
+static std::array crashEasterEgg = {
+ "\tYou've met with a terrible fate, haven't you?",
+ "\tSEA BEARS FOAM. SLEEP BEARS DREAMS. \n\tBOTH END IN THE SAME WAY: CRASSSH!",
+ "\tZAPD has fallen and cannot get up.",
+ "\tIT'S A SECRET TO EVERYBODY. \n\tBut it shouldn't be, you'd better ask about it!",
+ "\tI AM ERROR.",
+ "\tGRUMBLE,GRUMBLE...",
+ "\tDODONGO DISLIKES SMOKE \n\tAnd ZAPD dislikes whatever you fed it.",
+ "\tMay the way of the Hero lead \n\tto the debugger.",
+ "\tTHE WIND FISH SLUMBERS LONG... \n\tTHE HERO'S LIFE GONE... ",
+ "\tSEA BEARS FOAM, SLEEP BEARS DREAMS. \n\tBOTH END IN THE SAME WAY CRASSSH!",
+ "\tYou've met with a terrible fate, haven't you?",
+ "\tMaster, I calculate a 100% probability that ZAPD has crashed. \n\tAdditionally, the "
+ "batteries in your Wii Remote are nearly depleted.",
+ "\t CONGRATURATIONS! \n"
+ "\tAll Pages are displayed.\n"
+ "\t THANK YOU! \n"
+ "\t You are great debugger!",
+ "\tRCP is HUNG UP!!\n"
+ "\tOh! MY GOD!!",
+};
+
+#if HAS_POSIX == 1
+void ErrorHandler(int sig)
+{
+ std::array arr;
+ constexpr size_t nMaxFrames = arr.size();
+ size_t size = backtrace(arr.data(), nMaxFrames);
+ char** symbols = backtrace_symbols(arr.data(), nMaxFrames);
+
+ fprintf(stderr, "\nZAPD crashed. (Signal: %i)\n", sig);
+
+ srand(time(nullptr));
+ auto easterIndex = rand() % crashEasterEgg.size();
+
+ fprintf(stderr, "\n%s\n\n", crashEasterEgg[easterIndex]);
+
+ fprintf(stderr, "Traceback:\n");
+ for (size_t i = 1; i < size; i++)
+ {
+ Dl_info info;
+ uint32_t gotAddress = dladdr(arr[i], &info);
+ std::string functionName(symbols[i]);
+
+ if (gotAddress != 0 && info.dli_sname != nullptr)
+ {
+ int32_t status;
+ char* demangled = abi::__cxa_demangle(info.dli_sname, nullptr, nullptr, &status);
+ const char* nameFound = info.dli_sname;
+
+ if (status == 0)
+ {
+ nameFound = demangled;
+ }
+
+ functionName = StringHelper::Sprintf("%s (+0x%X)", nameFound,
+ (char*)arr[i] - (char*)info.dli_saddr);
+ free(demangled);
+ }
+
+ fprintf(stderr, "%-3zd %s\n", i, functionName.c_str());
+ }
+
+ fprintf(stderr, "\n");
+
+ free(symbols);
+ exit(1);
+}
+#elif defined(_MSC_VER)
+
+void printStack(CONTEXT* ctx)
+{
+ BOOL result;
+ HANDLE process;
+ HANDLE thread;
+ HMODULE hModule;
+ ULONG frame;
+ DWORD64 displacement;
+ DWORD disp;
+
+ srand(time(nullptr));
+ auto easterIndex = rand() % crashEasterEgg.size();
+
+ fprintf(stderr, "\n%s\n\n", crashEasterEgg[easterIndex]);
+
+#if defined(_M_AMD64)
+ STACKFRAME64 stack;
+ memset(&stack, 0, sizeof(STACKFRAME64));
+#else
+ STACKFRAME stack;
+ memset(&stack, 0, sizeof(STACKFRAME));
+#endif
+
+ char buffer[sizeof(SYMBOL_INFO) + MAX_SYM_NAME + sizeof(TCHAR)];
+ char module[512];
+
+ PSYMBOL_INFO symbol = (PSYMBOL_INFO)buffer;
+
+ CONTEXT ctx2;
+ memcpy(&ctx2, ctx, sizeof(CONTEXT));
+
+ process = GetCurrentProcess();
+ thread = GetCurrentThread();
+ SymInitialize(process, nullptr, TRUE);
+
+ constexpr DWORD machineType =
+#if defined(_M_AMD64)
+ IMAGE_FILE_MACHINE_AMD64;
+#else
+ IMAGE_FILE_MACHINE_I386;
+#endif
+
+ displacement = 0;
+
+ for (frame = 0;; frame++)
+ {
+ result = StackWalk(machineType, process, thread, &stack, &ctx2, nullptr,
+ SymFunctionTableAccess, SymGetModuleBase, nullptr);
+ if (!result)
+ {
+ break;
+ }
+ symbol->SizeOfStruct = sizeof(SYMBOL_INFO);
+ symbol->MaxNameLen = MAX_SYM_NAME;
+ SymFromAddr(process, (ULONG64)stack.AddrPC.Offset, &displacement, symbol);
+#if defined(_M_AMD64)
+ IMAGEHLP_LINE64 line;
+ line.SizeOfStruct = sizeof(IMAGEHLP_LINE64);
+#else
+ IMAGEHLP_LINE line;
+ line.SizeOfStruct = sizeof(IMAGEHLP_LINE);
+#endif
+ if (SymGetLineFromAddr(process, stack.AddrPC.Offset, &disp, &line))
+ {
+ fprintf(stderr, "%u\t %s in %s: line: %lu: \n", frame, symbol->Name, line.FileName,
+ line.LineNumber);
+ }
+
+ else
+ {
+ fprintf(stderr, "%u\tat % s\n", frame, symbol->Name);
+ hModule = nullptr;
+ GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS |
+ GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
+ (LPCTSTR)(stack.AddrPC.Offset), &hModule);
+
+ if (hModule != nullptr)
+ {
+ GetModuleFileNameA(hModule, module, 512 - 1);
+ }
+ fprintf(stderr, "%u\tIn %s\n", frame, module);
+ }
+ }
+}
+
+LONG seh_filter(_EXCEPTION_POINTERS* ex)
+{
+ fprintf(stderr, "EXCEPTION 0x%x occured\n", ex->ExceptionRecord->ExceptionCode);
+ printStack(ex->ContextRecord);
+ return EXCEPTION_EXECUTE_HANDLER;
+}
+#endif
+
+void CrashHandler_Init()
+{
+#if HAS_POSIX == 1
+ signal(SIGSEGV, ErrorHandler);
+ signal(SIGABRT, ErrorHandler);
+#elif defined(_MSC_VER)
+ SetUnhandledExceptionFilter(seh_filter);
+#else
+ HANDLE_WARNING(WarningType::Always,
+ "tried to set error handler, but this ZAPD build lacks support for one", "");
+#endif
+}
diff --git a/tools/ZAPD/ZAPD/CrashHandler.h b/tools/ZAPD/ZAPD/CrashHandler.h
new file mode 100644
index 000000000..102778bec
--- /dev/null
+++ b/tools/ZAPD/ZAPD/CrashHandler.h
@@ -0,0 +1,6 @@
+#ifndef CRASH_HANDLER_H
+#define CRASH_HANDLER_H
+
+void CrashHandler_Init();
+
+#endif
diff --git a/tools/ZAPD/ZAPD/GameConfig.cpp b/tools/ZAPD/ZAPD/GameConfig.cpp
index ae29ba28f..777cf9d49 100644
--- a/tools/ZAPD/ZAPD/GameConfig.cpp
+++ b/tools/ZAPD/ZAPD/GameConfig.cpp
@@ -94,6 +94,26 @@ void GameConfig::ConfigFunc_ObjectList(const tinyxml2::XMLElement& element)
objectList.emplace_back(std::move(line));
}
+void GameConfig::ConfigFunc_EntranceList(const tinyxml2::XMLElement& element)
+{
+ std::string fileName = element.Attribute("File");
+ std::vector lines =
+ File::ReadAllLines(Path::GetDirectoryName(configFilePath) / fileName);
+
+ for (auto& line : lines)
+ entranceList.emplace_back(std::move(line));
+}
+
+void GameConfig::ConfigFunc_specialEntranceList(const tinyxml2::XMLElement& element)
+{
+ std::string fileName = element.Attribute("File");
+ std::vector lines =
+ File::ReadAllLines(Path::GetDirectoryName(configFilePath) / fileName);
+
+ for (auto& line : lines)
+ specialEntranceList.emplace_back(std::move(line));
+}
+
void GameConfig::ConfigFunc_TexturePool(const tinyxml2::XMLElement& element)
{
std::string fileName = element.Attribute("File");
@@ -145,10 +165,12 @@ void GameConfig::ConfigFunc_ExternalFile(const tinyxml2::XMLElement& element)
void GameConfig::ReadConfigFile(const fs::path& argConfigFilePath)
{
- static const std::map ConfigFuncDictionary = {
+ static const std::unordered_map ConfigFuncDictionary = {
{"SymbolMap", &GameConfig::ConfigFunc_SymbolMap},
{"ActorList", &GameConfig::ConfigFunc_ActorList},
{"ObjectList", &GameConfig::ConfigFunc_ObjectList},
+ {"EntranceList", &GameConfig::ConfigFunc_EntranceList},
+ {"SpecialEntranceList", &GameConfig::ConfigFunc_specialEntranceList},
{"TexturePool", &GameConfig::ConfigFunc_TexturePool},
{"BGConfig", &GameConfig::ConfigFunc_BGConfig},
{"ExternalXMLFolder", &GameConfig::ConfigFunc_ExternalXMLFolder},
diff --git a/tools/ZAPD/ZAPD/GameConfig.h b/tools/ZAPD/ZAPD/GameConfig.h
index c478d16ce..2a783d10a 100644
--- a/tools/ZAPD/ZAPD/GameConfig.h
+++ b/tools/ZAPD/ZAPD/GameConfig.h
@@ -31,6 +31,8 @@ public:
std::map symbolMap;
std::vector actorList;
std::vector objectList;
+ std::vector entranceList;
+ std::vector specialEntranceList;
std::map texturePool; // Key = CRC
// ZBackground
@@ -49,6 +51,8 @@ public:
void ConfigFunc_SymbolMap(const tinyxml2::XMLElement& element);
void ConfigFunc_ActorList(const tinyxml2::XMLElement& element);
void ConfigFunc_ObjectList(const tinyxml2::XMLElement& element);
+ void ConfigFunc_EntranceList(const tinyxml2::XMLElement& element);
+ void ConfigFunc_specialEntranceList(const tinyxml2::XMLElement& element);
void ConfigFunc_TexturePool(const tinyxml2::XMLElement& element);
void ConfigFunc_BGConfig(const tinyxml2::XMLElement& element);
void ConfigFunc_ExternalXMLFolder(const tinyxml2::XMLElement& element);
diff --git a/tools/ZAPD/ZAPD/ImageBackend.cpp b/tools/ZAPD/ZAPD/ImageBackend.cpp
index 8accb6b4e..307945b40 100644
--- a/tools/ZAPD/ZAPD/ImageBackend.cpp
+++ b/tools/ZAPD/ZAPD/ImageBackend.cpp
@@ -398,7 +398,7 @@ void ImageBackend::SetPaletteIndex(size_t index, uint8_t nR, uint8_t nG, uint8_t
alphaPalette[index] = nA;
}
-void ImageBackend::SetPalette(const ImageBackend& pal)
+void ImageBackend::SetPalette(const ImageBackend& pal, uint32_t offset)
{
assert(isColorIndexed);
size_t bytePerPixel = pal.GetBytesPerPixel();
@@ -422,7 +422,7 @@ void ImageBackend::SetPalette(const ImageBackend& pal)
uint8_t g = pal.pixelMatrix[y][x * bytePerPixel + 1];
uint8_t b = pal.pixelMatrix[y][x * bytePerPixel + 2];
uint8_t a = pal.pixelMatrix[y][x * bytePerPixel + 3];
- SetPaletteIndex(index, r, g, b, a);
+ SetPaletteIndex(index + offset, r, g, b, a);
}
}
}
diff --git a/tools/ZAPD/ZAPD/ImageBackend.h b/tools/ZAPD/ZAPD/ImageBackend.h
index 9e05a2eed..0b1f4806c 100644
--- a/tools/ZAPD/ZAPD/ImageBackend.h
+++ b/tools/ZAPD/ZAPD/ImageBackend.h
@@ -42,8 +42,9 @@ public:
void SetGrayscalePixel(size_t y, size_t x, uint8_t grayscale, uint8_t alpha = 0);
void SetIndexedPixel(size_t y, size_t x, uint8_t index, uint8_t grayscale);
+ void SetIndexedPixel(size_t y, size_t x, uint8_t index, RGBAPixel pixel);
void SetPaletteIndex(size_t index, uint8_t nR, uint8_t nG, uint8_t nB, uint8_t nA);
- void SetPalette(const ImageBackend& pal);
+ void SetPalette(const ImageBackend& pal, uint32_t offset = 0);
uint32_t GetWidth() const;
uint32_t GetHeight() const;
diff --git a/tools/ZAPD/ZAPD/Main.cpp b/tools/ZAPD/ZAPD/Main.cpp
index 531edc094..2563154e5 100644
--- a/tools/ZAPD/ZAPD/Main.cpp
+++ b/tools/ZAPD/ZAPD/Main.cpp
@@ -1,5 +1,4 @@
#include "Globals.h"
-#include "Overlays/ZOverlay.h"
#include "Utils/Directory.h"
#include "Utils/File.h"
#include "Utils/Path.h"
@@ -10,22 +9,12 @@
#include "ZFile.h"
#include "ZTexture.h"
-#if !defined(_MSC_VER) && !defined(__CYGWIN__)
-#include
-#include
-#include
-#include // for __cxa_demangle
-#include // for dladdr
-#include
-#include
-#endif
+#include "CrashHandler.h"
#include
#include
#include "tinyxml2.h"
-extern const char gBuildHash[];
-
bool Parse(const fs::path& xmlFilePath, const fs::path& basePath, const fs::path& outPath,
ZFileMode fileMode);
@@ -33,61 +22,7 @@ void BuildAssetTexture(const fs::path& pngFilePath, TextureType texType, const f
void BuildAssetBackground(const fs::path& imageFilePath, const fs::path& outPath);
void BuildAssetBlob(const fs::path& blobFilePath, const fs::path& outPath);
-#if !defined(_MSC_VER) && !defined(__CYGWIN__)
-#define ARRAY_COUNT(arr) (sizeof(arr) / sizeof(arr[0]))
-void ErrorHandler(int sig)
-{
- void* array[4096];
- const size_t nMaxFrames = sizeof(array) / sizeof(array[0]);
- size_t size = backtrace(array, nMaxFrames);
- char** symbols = backtrace_symbols(array, nMaxFrames);
-
- fprintf(stderr, "\nZAPD crashed. (Signal: %i)\n", sig);
-
- // Feel free to add more crash messages.
- const char* crashEasterEgg[] = {
- "\tYou've met with a terrible fate, haven't you?",
- "\tSEA BEARS FOAM. SLEEP BEARS DREAMS. \n\tBOTH END IN THE SAME WAY: CRASSSH!",
- "\tZAPD has fallen and cannot get up.",
- };
-
- srand(time(nullptr));
- auto easterIndex = rand() % ARRAY_COUNT(crashEasterEgg);
-
- fprintf(stderr, "\n%s\n\n", crashEasterEgg[easterIndex]);
-
- fprintf(stderr, "Traceback:\n");
- for (size_t i = 1; i < size; i++)
- {
- Dl_info info;
- uint32_t gotAddress = dladdr(array[i], &info);
- std::string functionName(symbols[i]);
-
- if (gotAddress != 0 && info.dli_sname != nullptr)
- {
- int32_t status;
- char* demangled = abi::__cxa_demangle(info.dli_sname, nullptr, nullptr, &status);
- const char* nameFound = info.dli_sname;
-
- if (status == 0)
- {
- nameFound = demangled;
- }
-
- functionName = StringHelper::Sprintf("%s (+0x%X)", nameFound,
- (char*)array[i] - (char*)info.dli_saddr);
- free(demangled);
- }
-
- fprintf(stderr, "%-3zd %s\n", i, functionName.c_str());
- }
-
- fprintf(stderr, "\n");
-
- free(symbols);
- exit(1);
-}
-#endif
+extern const char gBuildHash[];
int main(int argc, char* argv[])
{
@@ -175,26 +110,13 @@ int main(int argc, char* argv[])
{
Globals::Instance->texType = ZTexture::GetTextureTypeFromString(argv[++i]);
}
- else if (arg == "-cfg") // Set cfg path (for overlays)
- // TODO: Change the name of this to something else so it doesn't
- // get confused with XML config files.
- {
- Globals::Instance->cfgPath = argv[++i];
- }
else if (arg == "-rconf") // Read Config File
{
Globals::Instance->cfg.ReadConfigFile(argv[++i]);
}
else if (arg == "-eh") // Enable Error Handler
{
-#if !defined(_MSC_VER) && !defined(__CYGWIN__)
- signal(SIGSEGV, ErrorHandler);
- signal(SIGABRT, ErrorHandler);
-#else
- HANDLE_WARNING(WarningType::Always,
- "tried to set error handler, but this ZAPD build lacks support for one",
- "");
-#endif
+ CrashHandler_Init();
}
else if (arg == "-v") // Verbose
{
@@ -231,8 +153,6 @@ int main(int argc, char* argv[])
fileMode = ZFileMode::BuildTexture;
else if (buildMode == "bren")
fileMode = ZFileMode::BuildBackground;
- else if (buildMode == "bovl")
- fileMode = ZFileMode::BuildOverlay;
else if (buildMode == "bsf")
fileMode = ZFileMode::BuildSourceFile;
else if (buildMode == "bblb")
@@ -314,16 +234,6 @@ int main(int argc, char* argv[])
{
BuildAssetBlob(Globals::Instance->inputPath, Globals::Instance->outputPath);
}
- else if (fileMode == ZFileMode::BuildOverlay)
- {
- ZOverlay* overlay =
- ZOverlay::FromBuild(Path::GetDirectoryName(Globals::Instance->inputPath),
- Path::GetDirectoryName(Globals::Instance->cfgPath));
-
- if (overlay != nullptr)
- File::WriteAllText(Globals::Instance->outputPath.string(),
- overlay->GetSourceOutputCode(""));
- }
delete g;
return 0;
diff --git a/tools/ZAPD/ZAPD/OtherStructs/CutsceneMM_Commands.cpp b/tools/ZAPD/ZAPD/OtherStructs/CutsceneMM_Commands.cpp
index b69f47321..edefbc051 100644
--- a/tools/ZAPD/ZAPD/OtherStructs/CutsceneMM_Commands.cpp
+++ b/tools/ZAPD/ZAPD/OtherStructs/CutsceneMM_Commands.cpp
@@ -54,6 +54,7 @@ CutsceneMMCommand_GenericCmd::CutsceneMMCommand_GenericCmd(const std::vector(cmdId);
+ entries.reserve(numEntries);
for (size_t i = 0; i < numEntries; i++)
{
auto* entry = new CutsceneSubCommandEntry_GenericMMCmd(rawData, rawDataIndex, cmdId);
@@ -96,6 +97,7 @@ CutsceneMMCommand_Camera::CutsceneMMCommand_Camera(const std::vector& r
{
rawDataIndex += 4;
+ entries.reserve(numEntries);
for (size_t i = 0; i < numEntries / 4; i++)
{
auto* entry = new CutsceneSubCommandEntry_Camera(rawData, rawDataIndex);
@@ -138,6 +140,7 @@ CutsceneMMCommand_FadeScreen::CutsceneMMCommand_FadeScreen(const std::vector&
{
rawDataIndex += 4;
+ entries.reserve(numEntries);
for (size_t i = 0; i < numEntries; i++)
{
auto* entry = new CutsceneSubCommandEntry_FadeSeq(rawData, rawDataIndex);
@@ -199,6 +203,7 @@ CutsceneMMCommand_NonImplemented::CutsceneMMCommand_NonImplemented(
{
rawDataIndex += 4;
+ entries.reserve(numEntries);
for (size_t i = 0; i < numEntries; i++)
{
auto* entry = new CutsceneSubCommandEntry_NonImplemented(rawData, rawDataIndex);
diff --git a/tools/ZAPD/ZAPD/OtherStructs/Cutscene_Commands.cpp b/tools/ZAPD/ZAPD/OtherStructs/Cutscene_Commands.cpp
index a716176b9..8ae4c69d7 100644
--- a/tools/ZAPD/ZAPD/OtherStructs/Cutscene_Commands.cpp
+++ b/tools/ZAPD/ZAPD/OtherStructs/Cutscene_Commands.cpp
@@ -154,6 +154,7 @@ CutsceneCommand_GenericCmd::CutsceneCommand_GenericCmd(const std::vector(cmdId);
+ entries.reserve(numEntries);
for (size_t i = 0; i < numEntries; i++)
{
@@ -320,6 +321,7 @@ CutsceneCommand_Rumble::CutsceneCommand_Rumble(const std::vector& rawDa
{
rawDataIndex += 4;
+ entries.reserve(numEntries);
for (size_t i = 0; i < numEntries; i++)
{
auto* entry = new CutsceneSubCommandEntry_Rumble(rawData, rawDataIndex);
@@ -363,6 +365,7 @@ CutsceneCommand_SetTime::CutsceneCommand_SetTime(const std::vector& raw
{
rawDataIndex += 4;
+ entries.reserve(numEntries);
for (size_t i = 0; i < numEntries; i++)
{
auto* entry = new CutsceneSubCommandEntry_SetTime(rawData, rawDataIndex);
@@ -438,6 +441,7 @@ CutsceneCommand_TextBox::CutsceneCommand_TextBox(const std::vector& raw
{
rawDataIndex += 4;
+ entries.reserve(numEntries);
for (size_t i = 0; i < numEntries; i++)
{
auto* entry = new CutsceneSubCommandEntry_TextBox(rawData, rawDataIndex);
@@ -516,6 +520,7 @@ CutsceneCommand_ActorAction::CutsceneCommand_ActorAction(const std::vectorsegment)
{
uint32_t unk_8_Offset = Seg2Filespace(unk_8, parent->baseAddress);
+
+ unk_8_arr.reserve(unk_0);
for (size_t i = 0; i < unk_0; i++)
{
Struct_800A57C0 unk8_data(parent);
@@ -117,6 +119,8 @@ void Struct_800A598C::ParseRawData()
if (unk_C != 0 && GETSEGNUM(unk_8) == parent->segment)
{
uint32_t unk_C_Offset = Seg2Filespace(unk_C, parent->baseAddress);
+
+ unk_C_arr.reserve(unk_2);
for (size_t i = 0; i < unk_2; i++)
{
Struct_800A598C_2 unkC_data(parent);
@@ -244,6 +248,8 @@ void Struct_800A5E28::ParseRawData()
if (unk_4 != 0 && GETSEGNUM(unk_4) == parent->segment)
{
uint32_t unk_4_Offset = Seg2Filespace(unk_4, parent->baseAddress);
+
+ unk_4_arr.reserve(unk_2);
for (size_t i = 0; i < unk_2; i++)
{
Struct_800A598C unk_4_data(parent);
diff --git a/tools/ZAPD/ZAPD/Overlays/ZOverlay.cpp b/tools/ZAPD/ZAPD/Overlays/ZOverlay.cpp
deleted file mode 100644
index 113c4ef33..000000000
--- a/tools/ZAPD/ZAPD/Overlays/ZOverlay.cpp
+++ /dev/null
@@ -1,352 +0,0 @@
-#include "ZOverlay.h"
-
-#include
-#include
-#include "Globals.h"
-#include "Utils/Directory.h"
-#include "Utils/File.h"
-#include "Utils/Path.h"
-#include "Utils/StringHelper.h"
-#include "WarningHandler.h"
-
-using namespace ELFIO;
-
-const char* RelocationEntry::GetSectionName() const
-{
- switch (sectionType)
- {
- case SectionType::Text:
- return ".text";
- case SectionType::Data:
- return ".data";
- case SectionType::RoData:
- return ".rodata";
- case SectionType::Bss:
- return ".bss";
- case SectionType::ERROR:
- return ".ERROR";
- }
- assert(!"Oh no :c");
-}
-
-const char* RelocationEntry::GetRelocTypeName() const
-{
- switch (relocationType)
- {
- case RelocationType::R_MIPS_32:
- return "R_MIPS_32";
- case RelocationType::R_MIPS_26:
- return "R_MIPS_26";
- case RelocationType::R_MIPS_HI16:
- return "R_MIPS_HI16";
- case RelocationType::R_MIPS_LO16:
- return "R_MIPS_LO16";
- }
- assert(!"Oh no :c");
-}
-
-ZOverlay::ZOverlay()
-{
- name = "";
- entries = std::vector();
-}
-
-ZOverlay::ZOverlay(const std::string& nName) : ZOverlay()
-{
- name = nName;
-}
-
-ZOverlay::~ZOverlay()
-{
- for (auto entry : entries)
- if (entry)
- delete entry;
- entries.clear();
-}
-
-static const std::unordered_set sRelSections = {
- ".rel.text",
- ".rel.data",
- ".rel.rodata",
-};
-static const std::unordered_set sSections = {
- ".text", ".data", ".symtab", ".rodata", ".rodata.str1.4", ".rodata.cst4", ".rodata.cst8",
-};
-
-ZOverlay* ZOverlay::FromBuild(fs::path buildPath, fs::path cfgFolderPath)
-{
- std::string cfgText = File::ReadAllText(cfgFolderPath / "overlay.cfg");
- std::vector cfgLines = StringHelper::Split(cfgText, "\n");
-
- ZOverlay* ovl = new ZOverlay(StringHelper::Strip(cfgLines[0], "\r"));
- ovl->cfgLines = cfgLines;
-
- int32_t sectionOffs[5] = {0};
- std::vector textRelocs;
- std::vector dataRelocs;
- std::vector rodataRelocs;
-
- // get the elf files
- std::vector readers;
- for (size_t i = 1; i < cfgLines.size(); i++)
- {
- std::string elfPath =
- (buildPath / (cfgLines[i].substr(0, cfgLines[i].size() - 2) + ".o")).string();
- elfio* reader = new elfio();
-
- if (!reader->load(elfPath))
- {
- // not all files were compiled
- for (auto r : readers)
- delete r;
- readers.clear();
-
- delete ovl;
- return nullptr;
- }
-
- readers.push_back(reader);
- }
-
- for (size_t curReaderId = 0; curReaderId < readers.size(); curReaderId++)
- {
- auto& curReader = readers[curReaderId];
-
- Elf_Half sec_num = curReader->sections.size();
- for (int32_t i = 0; i < sec_num; i++)
- {
- section* pSec = curReader->sections[i];
-
- if (pSec->get_type() != SHT_REL ||
- sRelSections.find(pSec->get_name()) == sRelSections.end())
- {
- continue;
- }
-
- symbol_section_accessor currentSymbols(*curReader,
- curReader->sections[(Elf_Half)pSec->get_link()]);
-
- SectionType sectionType = GetSectionTypeFromStr(pSec->get_name());
-
- if (sectionType == SectionType::ERROR)
- {
- HANDLE_WARNING(WarningType::Always, "one of the section types returned ERROR", "");
- }
-
- relocation_section_accessor relocs(*curReader, pSec);
- for (Elf_Xword j = 0; j < relocs.get_entries_num(); j++)
- {
- Elf64_Addr offset = 0;
- Elf_Word symbol = 0;
- Elf_Word type = 0;
- {
- Elf_Sxword addend = 0;
- relocs.get_entry(j, offset, symbol, type, addend);
- }
-
- std::string curSymName;
- Elf_Half curSymShndx = SHN_UNDEF;
- {
- Elf64_Addr value;
- Elf_Xword size;
- unsigned char bind;
- unsigned char type;
- unsigned char other;
- currentSymbols.get_symbol(symbol, curSymName, value, size, bind, type,
- curSymShndx, other);
- }
-
- // check symbols outside the elf but within the overlay
- if (curSymShndx == SHN_UNDEF)
- {
- if (Globals::Instance->verbosity >= VerbosityLevel::VERBOSITY_DEBUG)
- {
- printf("Symbol '%s' doesn't exist in current .o file (%s). Searching...\n",
- curSymName.c_str(), cfgLines[curReaderId + 1].c_str());
- }
-
- for (size_t readerId = 0; readerId < readers.size(); readerId++)
- {
- auto& reader = readers[readerId];
-
- if (curSymShndx != SHN_UNDEF)
- break;
-
- if (reader == curReader)
- continue;
-
- auto sectionData = reader->sections[(Elf_Half)pSec->get_link()];
- curSymShndx =
- ovl->FindSymbolInSection(curSymName, sectionData, *reader, readerId);
- if (curSymShndx != SHN_UNDEF)
- break;
-
- if (Globals::Instance->gccCompat)
- {
- // Symbol wasn't found, try checking every section
- Elf_Half sec_num = reader->sections.size();
- for (int32_t otherSectionIdx = 0; otherSectionIdx < sec_num;
- otherSectionIdx++)
- {
- if (curSymShndx != SHN_UNDEF)
- {
- break;
- }
-
- auto sectionDataIter = reader->sections[otherSectionIdx];
-
- curSymShndx = ovl->FindSymbolInSection(curSymName, sectionDataIter,
- *reader, readerId);
- }
- }
- }
- }
-
- if (curSymShndx != SHN_UNDEF)
- {
- RelocationType typeConverted = (RelocationType)type;
- offset += sectionOffs[static_cast(sectionType)];
-
- RelocationEntry* reloc =
- new RelocationEntry(sectionType, typeConverted, offset);
-
- if (Globals::Instance->verbosity >= VerbosityLevel::VERBOSITY_DEBUG)
- {
- printf(".word 0x%08X # %s %s 0x%04X\n", reloc->CalcRelocationWord(),
- reloc->GetSectionName(), reloc->GetRelocTypeName(), reloc->offset);
- }
-
- // this is to keep the correct reloc entry order
- if (sectionType == SectionType::Text)
- textRelocs.push_back(reloc);
- if (sectionType == SectionType::Data)
- dataRelocs.push_back(reloc);
- if (sectionType == SectionType::RoData)
- rodataRelocs.push_back(reloc);
- }
- }
- }
-
- // increase section offsets
- for (int32_t i = 0; i < sec_num; i++)
- {
- section* pSec = curReader->sections[i];
- if (pSec->get_type() == SHT_PROGBITS &&
- sSections.find(pSec->get_name()) != sSections.end())
- {
- SectionType sectionType = GetSectionTypeFromStr(pSec->get_name());
- sectionOffs[static_cast(sectionType)] += pSec->get_size();
- }
- }
- }
-
- ovl->entries.reserve(textRelocs.size() + dataRelocs.size() + rodataRelocs.size());
- ovl->entries.insert(ovl->entries.end(), textRelocs.begin(), textRelocs.end());
- ovl->entries.insert(ovl->entries.end(), dataRelocs.begin(), dataRelocs.end());
- ovl->entries.insert(ovl->entries.end(), rodataRelocs.begin(), rodataRelocs.end());
-
- for (auto r : readers)
- delete r;
- readers.clear();
-
- return ovl;
-}
-
-std::string ZOverlay::GetSourceOutputCode([[maybe_unused]] const std::string& prefix)
-{
- std::string output;
-
- output += ".section .ovl\n";
-
- output += StringHelper::Sprintf("# %sOverlayInfo\n", name.c_str());
- output += StringHelper::Sprintf(".word _%sSegmentTextSize\n", name.c_str());
- output += StringHelper::Sprintf(".word _%sSegmentDataSize\n", name.c_str());
- output += StringHelper::Sprintf(".word _%sSegmentRoDataSize\n", name.c_str());
- output += StringHelper::Sprintf(".word _%sSegmentBssSize\n", name.c_str());
- output += "\n";
-
- output += StringHelper::Sprintf(".word %i # reloc_count\n", entries.size());
-
- for (size_t i = 0; i < entries.size(); i++)
- {
- RelocationEntry* reloc = entries[i];
- output += StringHelper::Sprintf(".word 0x%08X # %s %s 0x%04X\n",
- reloc->CalcRelocationWord(), reloc->GetSectionName(),
- reloc->GetRelocTypeName(), reloc->offset);
- }
-
- size_t offset = (entries.size() * 4) + 20;
-
- while (offset % 16 != 12)
- {
- output += ".word 0\n";
- offset += 4;
- }
-
- output += "\n";
- output +=
- StringHelper::Sprintf(".word 0x%08X # %sOverlayInfoOffset\n", offset + 4, name.c_str());
- return output;
-}
-
-SectionType ZOverlay::GetSectionTypeFromStr(const std::string& sectionName)
-{
- if (sectionName == ".rel.text" || sectionName == ".text")
- return SectionType::Text;
- else if (sectionName == ".rel.data" || sectionName == ".data")
- return SectionType::Data;
- else if (sectionName == ".rel.rodata" || sectionName == ".rodata" ||
- sectionName == ".rodata.str1.4" || sectionName == ".rodata.cst4")
- return SectionType::RoData;
- else if (sectionName == ".rel.bss" || sectionName == ".bss")
- return SectionType::Bss;
-
- return SectionType::ERROR;
-}
-
-ELFIO::Elf_Half ZOverlay::FindSymbolInSection(const std::string& curSymName,
- ELFIO::section* sectionData, ELFIO::elfio& reader,
- size_t readerId)
-{
- if (sectionData == nullptr)
- return SHN_UNDEF;
-
- auto sectionDataName = sectionData->get_name();
- if (sSections.find(sectionDataName) == sSections.end())
- return SHN_UNDEF;
-
-#ifdef DEVELOPMENT
- if (Globals::Instance->verbosity >= VerbosityLevel::VERBOSITY_DEBUG)
- {
- printf("\t File '%s' section: %s \n", cfgLines[readerId + 1].c_str(),
- sectionDataName.c_str());
- }
-#endif
-
- symbol_section_accessor symbols(reader, sectionData);
-
- Elf_Xword symbolNum = symbols.get_symbols_num();
- for (Elf_Xword symIdx = 0; symIdx < symbolNum; symIdx++)
- {
- Elf_Half shndx = SHN_UNDEF;
- Elf64_Addr value;
- std::string name;
- Elf_Xword size;
- unsigned char bind;
- unsigned char type;
- unsigned char other;
-
- symbols.get_symbol(symIdx, name, value, size, bind, type, shndx, other);
-
- if (name == curSymName)
- {
- if (Globals::Instance->verbosity >= VerbosityLevel::VERBOSITY_DEBUG)
- {
- printf("\t Symbol '%s' found in '%s' '%s' \n", curSymName.c_str(),
- cfgLines[readerId + 1].c_str(), sectionDataName.c_str());
- }
- return shndx;
- }
- }
- return SHN_UNDEF;
-}
diff --git a/tools/ZAPD/ZAPD/Overlays/ZOverlay.h b/tools/ZAPD/ZAPD/Overlays/ZOverlay.h
deleted file mode 100644
index 98ead9013..000000000
--- a/tools/ZAPD/ZAPD/Overlays/ZOverlay.h
+++ /dev/null
@@ -1,75 +0,0 @@
-#pragma once
-
-#include "Utils/Directory.h"
-#include "ZResource.h"
-#include "elfio/elfio.hpp"
-#include "tinyxml2.h"
-
-enum class SectionType
-{
- Text = 1,
- Data = 2,
- RoData = 3,
- Bss = 4,
- ERROR = 255
-};
-
-enum class RelocationType
-{
- R_MIPS_32 = 2,
- R_MIPS_26 = 4,
- R_MIPS_HI16 = 5,
- R_MIPS_LO16 = 6,
-};
-
-class RelocationEntry
-{
-public:
- SectionType sectionType;
- RelocationType relocationType;
- int32_t offset;
-
- RelocationEntry(SectionType nSecType, RelocationType nRelType, int32_t nOffset)
- {
- sectionType = nSecType;
- relocationType = nRelType;
- offset = nOffset;
- }
-
- uint32_t CalcRelocationWord()
- {
- uint32_t relocationWord = 0;
-
- relocationWord |= static_cast(sectionType) << 30;
- relocationWord |= static_cast(relocationType) << 24;
- relocationWord |= offset;
-
- return relocationWord;
- }
-
- const char* GetSectionName() const;
- const char* GetRelocTypeName() const;
-};
-
-class ZOverlay
-{
-public:
- std::string name;
-
- ZOverlay(const std::string& nName);
- ~ZOverlay();
- static ZOverlay* FromBuild(fs::path buildPath, fs::path cfgFolderPath);
- std::string GetSourceOutputCode(const std::string& prefix);
-
-private:
- std::vector entries;
- std::vector cfgLines;
-
- ZOverlay();
-
- static SectionType GetSectionTypeFromStr(const std::string& sectionName);
- // static std::string GetOverlayNameFromElf(ELFIO::elfio& reader);
-
- ELFIO::Elf_Half FindSymbolInSection(const std::string& curSymName, ELFIO::section* sectionData,
- ELFIO::elfio& reader, size_t readerId);
-};
diff --git a/tools/ZAPD/ZAPD/ZAPD.vcxproj b/tools/ZAPD/ZAPD/ZAPD.vcxproj
index f3bb35a3f..505e41100 100644
--- a/tools/ZAPD/ZAPD/ZAPD.vcxproj
+++ b/tools/ZAPD/ZAPD/ZAPD.vcxproj
@@ -30,26 +30,26 @@
Application
true
- v143
+ v142
MultiByte
Application
false
- v143
+ v142
true
MultiByte
Application
true
- v143
+ v142
MultiByte
Application
false
- v143
+ v142
true
MultiByte
@@ -91,13 +91,15 @@
stdcpp17
stdc11
_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
true
+ Console
- cd ..
-mkdir build\ZAPD
+ cd ..
+mkdir build\ZAPD
python ZAPD/genbuildinfo.py
@@ -112,15 +114,17 @@ mkdir build\ZAPD
EnableFastChecks
stdc11
MultiThreadedDebug
+ true
true
ZAPDUtils.lib;/WHOLEARCHIVE:ExporterExample.lib;%(AdditionalDependencies)
false
+ Console
- cd ..
-mkdir build\ZAPD
+ cd ..
+mkdir build\ZAPD
python ZAPD/genbuildinfo.py
@@ -132,14 +136,15 @@ mkdir build\ZAPD
true
true
true
+ true
true
true
- cd ..
-mkdir build\ZAPD
+ cd ..
+mkdir build\ZAPD
python ZAPD/genbuildinfo.py
@@ -153,14 +158,15 @@ mkdir build\ZAPD
true
stdcpplatest
_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
true
true
- cd ..
-mkdir build\ZAPD
+ cd ..
+mkdir build\ZAPD
python ZAPD/genbuildinfo.py
@@ -173,6 +179,7 @@ mkdir build\ZAPD
+
@@ -182,8 +189,8 @@ mkdir build\ZAPD
-
+
@@ -236,6 +243,7 @@ mkdir build\ZAPD
+
@@ -261,6 +269,7 @@ mkdir build\ZAPD
+
@@ -270,8 +279,8 @@ mkdir build\ZAPD
-
+
@@ -324,6 +333,7 @@ mkdir build\ZAPD
+
diff --git a/tools/ZAPD/ZAPD/ZAPD.vcxproj.filters b/tools/ZAPD/ZAPD/ZAPD.vcxproj.filters
index 4de236fad..ce89882fe 100644
--- a/tools/ZAPD/ZAPD/ZAPD.vcxproj.filters
+++ b/tools/ZAPD/ZAPD/ZAPD.vcxproj.filters
@@ -165,9 +165,6 @@
Source Files\Z64
-
- Source Files\Z64
-
Source Files\Z64
@@ -288,6 +285,12 @@
Source Files\Z64
+
+ Source Files
+
+
+ Source Files\Z64
+
@@ -413,9 +416,6 @@
Header Files\Libraries
-
- Header Files\Z64
-
Header Files\Z64
@@ -548,6 +548,12 @@
Header Files\Z64
+
+ Header Files
+
+
+ Header Files\Z64
+
diff --git a/tools/ZAPD/ZAPD/ZActorList.cpp b/tools/ZAPD/ZAPD/ZActorList.cpp
new file mode 100644
index 000000000..ee5cb4d44
--- /dev/null
+++ b/tools/ZAPD/ZAPD/ZActorList.cpp
@@ -0,0 +1,194 @@
+#include "ZActorList.h"
+
+#include "Globals.h"
+#include "Utils/BitConverter.h"
+#include "WarningHandler.h"
+#include "ZFile.h"
+#include "ZRoom/ZNames.h"
+
+REGISTER_ZFILENODE(ActorList, ZActorList);
+
+ZActorList::ZActorList(ZFile* nParent) : ZResource(nParent)
+{
+ RegisterRequiredAttribute("Count");
+}
+
+void ZActorList::ExtractFromBinary(uint32_t nRawDataIndex, uint8_t nNumActors)
+{
+ rawDataIndex = nRawDataIndex;
+ numActors = nNumActors;
+
+ // Don't parse raw data of external files
+ if (parent->GetMode() == ZFileMode::ExternalFile)
+ return;
+
+ ParseRawData();
+}
+
+void ZActorList::ParseXML(tinyxml2::XMLElement* reader)
+{
+ ZResource::ParseXML(reader);
+
+ numActors = StringHelper::StrToL(registeredAttributes.at("Count").value);
+
+ if (numActors < 1)
+ {
+ HANDLE_ERROR_RESOURCE(
+ WarningType::InvalidAttributeValue, parent, this, rawDataIndex,
+ StringHelper::Sprintf("invalid value '%d' found for 'NumPaths' attribute", numActors),
+ "Should be at least '1'");
+ }
+}
+
+void ZActorList::ParseRawData()
+{
+ ZResource::ParseRawData();
+
+ offset_t currentPtr = rawDataIndex;
+ size_t largestlength = 0;
+
+ for (size_t i = 0; i < numActors; i++)
+ {
+ ActorSpawnEntry entry(parent->GetRawData(), currentPtr);
+
+ currentPtr += entry.GetRawDataSize();
+ actors.push_back(entry);
+
+ size_t actorNameLength = ZNames::GetActorName(entry.GetActorId()).size();
+ if (actorNameLength > largestlength)
+ largestlength = actorNameLength;
+ }
+
+ for (auto& entry : actors)
+ {
+ entry.SetLargestActorName(largestlength);
+ }
+}
+
+Declaration* ZActorList::DeclareVar(const std::string& prefix, const std::string& bodyStr)
+{
+ std::string auxName = name;
+
+ if (name == "")
+ auxName = GetDefaultName(prefix);
+
+ Declaration* decl =
+ parent->AddDeclarationArray(rawDataIndex, GetDeclarationAlignment(), GetRawDataSize(),
+ GetSourceTypeName(), name, GetActorListArraySize(), bodyStr);
+ decl->staticConf = staticConf;
+
+ return decl;
+}
+
+std::string ZActorList::GetBodySourceCode() const
+{
+ std::string declaration;
+
+ size_t index = 0;
+ for (auto& entry : actors)
+ {
+ declaration += StringHelper::Sprintf("\t{ %s },", entry.GetBodySourceCode().c_str());
+
+ if (index < actors.size() - 1)
+ declaration += "\n";
+
+ index++;
+ }
+
+ return declaration;
+}
+
+std::string ZActorList::GetSourceTypeName() const
+{
+ return actors.front().GetSourceTypeName();
+}
+
+ZResourceType ZActorList::GetResourceType() const
+{
+ return ZResourceType::ActorList;
+}
+
+size_t ZActorList::GetRawDataSize() const
+{
+ return actors.size() * actors.front().GetRawDataSize();
+}
+
+size_t ZActorList::GetActorListArraySize() const
+{
+ size_t actorCount = 0;
+
+ // Doing an else-if here so we only do the loop when the game is SW97.
+ // Actor 0x22 is removed from SW97, so we need to ensure that we don't increment the actor count
+ // for it.
+ if (Globals::Instance->game == ZGame::OOT_SW97)
+ {
+ actorCount = 0;
+
+ for (const auto& entry : actors)
+ if (entry.GetActorId() != 0x22)
+ actorCount++;
+ }
+ else
+ {
+ actorCount = actors.size();
+ }
+
+ return actorCount;
+}
+
+/* ActorSpawnEntry */
+
+ActorSpawnEntry::ActorSpawnEntry(const std::vector& rawData, uint32_t rawDataIndex)
+{
+ actorNum = BitConverter::ToInt16BE(rawData, rawDataIndex + 0);
+ posX = BitConverter::ToInt16BE(rawData, rawDataIndex + 2);
+ posY = BitConverter::ToInt16BE(rawData, rawDataIndex + 4);
+ posZ = BitConverter::ToInt16BE(rawData, rawDataIndex + 6);
+ rotX = BitConverter::ToUInt16BE(rawData, rawDataIndex + 8);
+ rotY = BitConverter::ToUInt16BE(rawData, rawDataIndex + 10);
+ rotZ = BitConverter::ToUInt16BE(rawData, rawDataIndex + 12);
+ params = BitConverter::ToInt16BE(rawData, rawDataIndex + 14);
+}
+
+std::string ActorSpawnEntry::GetBodySourceCode() const
+{
+ std::string body;
+
+ std::string actorNameFmt = StringHelper::Sprintf("%%-%zus ", largestActorName + 1);
+ body =
+ StringHelper::Sprintf(actorNameFmt.c_str(), (ZNames::GetActorName(actorNum) + ",").c_str());
+
+ body += StringHelper::Sprintf("{ %6i, %6i, %6i }, ", posX, posY, posZ);
+ if (Globals::Instance->game == ZGame::MM_RETAIL)
+ body += StringHelper::Sprintf("{ SPAWN_ROT_FLAGS(%#5hX, 0x%04X)"
+ ", SPAWN_ROT_FLAGS(%#5hX, 0x%04X)"
+ ", SPAWN_ROT_FLAGS(%#5hX, 0x%04X) }, ",
+ (rotX >> 7) & 0b111111111, rotX & 0b1111111,
+ (rotY >> 7) & 0b111111111, rotY & 0b1111111,
+ (rotZ >> 7) & 0b111111111, rotZ & 0b1111111);
+ else
+ body += StringHelper::Sprintf("{ %#6hX, %#6hX, %#6hX }, ", rotX, rotY, rotZ);
+ body += StringHelper::Sprintf("0x%04X", params);
+
+ return body;
+}
+
+std::string ActorSpawnEntry::GetSourceTypeName() const
+{
+ return "ActorEntry";
+}
+
+size_t ActorSpawnEntry::GetRawDataSize() const
+{
+ return 16;
+}
+
+uint16_t ActorSpawnEntry::GetActorId() const
+{
+ return actorNum;
+}
+
+void ActorSpawnEntry::SetLargestActorName(size_t nameSize)
+{
+ largestActorName = nameSize;
+}
diff --git a/tools/ZAPD/ZAPD/ZActorList.h b/tools/ZAPD/ZAPD/ZActorList.h
new file mode 100644
index 000000000..7cc63da2f
--- /dev/null
+++ b/tools/ZAPD/ZAPD/ZActorList.h
@@ -0,0 +1,52 @@
+#pragma once
+
+#include "ZResource.h"
+
+class ActorSpawnEntry
+{
+public:
+ uint16_t actorNum;
+ int16_t posX;
+ int16_t posY;
+ int16_t posZ;
+ uint16_t rotX;
+ uint16_t rotY;
+ uint16_t rotZ;
+ uint16_t params;
+ size_t largestActorName = 16;
+
+ ActorSpawnEntry(const std::vector& rawData, uint32_t rawDataIndex);
+
+ std::string GetBodySourceCode() const;
+
+ std::string GetSourceTypeName() const;
+ size_t GetRawDataSize() const;
+
+ uint16_t GetActorId() const;
+ void SetLargestActorName(size_t nameSize);
+};
+
+class ZActorList : public ZResource
+{
+public:
+ std::vector actors;
+ uint32_t numActors = 0;
+
+ ZActorList(ZFile* nParent);
+
+ void ExtractFromBinary(offset_t nRawDataIndex, uint8_t nNumActors);
+
+ void ParseXML(tinyxml2::XMLElement* reader) override;
+ void ParseRawData() override;
+
+ Declaration* DeclareVar(const std::string& prefix, const std::string& bodyStr) override;
+ std::string GetBodySourceCode() const override;
+
+ std::string GetSourceTypeName() const override;
+ ZResourceType GetResourceType() const override;
+
+ size_t GetRawDataSize() const override;
+
+protected:
+ size_t GetActorListArraySize() const;
+};
diff --git a/tools/ZAPD/ZAPD/ZArray.cpp b/tools/ZAPD/ZAPD/ZArray.cpp
index d4f55d6c8..0a9797ba0 100644
--- a/tools/ZAPD/ZAPD/ZArray.cpp
+++ b/tools/ZAPD/ZAPD/ZArray.cpp
@@ -43,6 +43,7 @@ void ZArray::ParseXML(tinyxml2::XMLElement* reader)
auto nodeMap = ZFile::GetNodeMap();
size_t childIndex = rawDataIndex;
+ resList.reserve(arrayCnt);
for (size_t i = 0; i < arrayCnt; i++)
{
ZResource* res = nodeMap->at(childName)(parent);
@@ -94,7 +95,7 @@ Declaration* ZArray::DeclareVar(const std::string& prefix, const std::string& bo
std::string ZArray::GetBodySourceCode() const
{
- std::string output = "";
+ std::string output;
for (size_t i = 0; i < arrayCnt; i++)
{
@@ -107,6 +108,7 @@ std::string ZArray::GetBodySourceCode() const
case ZResourceType::Scalar:
case ZResourceType::Vertex:
case ZResourceType::CollisionPoly:
+ case ZResourceType::SurfaceType:
output += resList.at(i)->GetBodySourceCode();
break;
@@ -125,7 +127,7 @@ std::string ZArray::GetBodySourceCode() const
size_t ZArray::GetRawDataSize() const
{
size_t size = 0;
- for (auto res : resList)
+ for (const auto res : resList)
size += res->GetRawDataSize();
return size;
}
diff --git a/tools/ZAPD/ZAPD/ZCollision.cpp b/tools/ZAPD/ZAPD/ZCollision.cpp
index 992332db7..5bd3d93a6 100644
--- a/tools/ZAPD/ZAPD/ZCollision.cpp
+++ b/tools/ZAPD/ZAPD/ZCollision.cpp
@@ -51,7 +51,7 @@ void ZCollisionHeader::ParseRawData()
vertices.reserve(numVerts);
polygons.reserve(numPolygons);
- uint32_t currentPtr = vtxSegmentOffset;
+ offset_t currentPtr = vtxSegmentOffset;
for (uint16_t i = 0; i < numVerts; i++)
{
@@ -61,7 +61,7 @@ void ZCollisionHeader::ParseRawData()
currentPtr += vec.GetRawDataSize();
vertices.push_back(vec);
}
-
+
for (uint16_t i = 0; i < numPolygons; i++)
{
ZCollisionPoly poly(parent);
@@ -72,14 +72,21 @@ void ZCollisionHeader::ParseRawData()
uint16_t highestPolyType = 0;
- for (ZCollisionPoly poly : polygons)
+ for (const ZCollisionPoly& poly : polygons)
{
if (poly.type > highestPolyType)
highestPolyType = poly.type;
}
+
for (uint16_t i = 0; i < highestPolyType + 1; i++)
- polygonTypes.push_back(
- BitConverter::ToUInt64BE(rawData, polyTypeDefSegmentOffset + (i * 8)));
+ {
+ ZSurfaceType surfaceType(parent);
+ surfaceType.SetRawDataIndex(polyTypeDefSegmentOffset + (i * 8));
+ surfaceType.ParseRawData();
+ polygonTypes.push_back(surfaceType);
+ }
+ // polygonTypes.push_back(
+ // BitConverter::ToUInt64BE(rawData, polyTypeDefSegmentOffset + (i * 8)));
if (camDataAddress != SEGMENTED_NULL)
{
@@ -158,24 +165,22 @@ void ZCollisionHeader::DeclareReferences(const std::string& prefix)
declaration += "\n";
}
- parent->AddDeclarationArray(
- polySegmentOffset, DeclarationAlignment::Align4, polygons.size() * 16, polygons[0].GetSourceTypeName().c_str(),
- StringHelper::Sprintf("%sPolygons", auxName.c_str()), polygons.size(), declaration);
+ parent->AddDeclarationArray(polySegmentOffset, DeclarationAlignment::Align4,
+ polygons.size() * 16, polygons[0].GetSourceTypeName().c_str(),
+ StringHelper::Sprintf("%sPolygons", auxName.c_str()),
+ polygons.size(), declaration);
}
declaration.clear();
- for (size_t i = 0; i < polygonTypes.size(); i++)
+ for (const auto& polyType : polygonTypes)
{
- declaration += StringHelper::Sprintf("\t{ 0x%08lX, 0x%08lX },", polygonTypes[i] >> 32,
- polygonTypes[i] & 0xFFFFFFFF);
-
- if (i < polygonTypes.size() - 1)
- declaration += "\n";
+ declaration += StringHelper::Sprintf("\t%s,", polyType.GetBodySourceCode().c_str());
}
- if (polyTypeDefAddress != 0)
+ if (polyTypeDefAddress != SEGMENTED_NULL)
parent->AddDeclarationArray(polyTypeDefSegmentOffset, DeclarationAlignment::Align4,
- polygonTypes.size() * 8, "SurfaceType",
+ polygonTypes.size() * 8,
+ polygonTypes[0].GetSourceTypeName().c_str(),
StringHelper::Sprintf("%sSurfaceType", auxName.c_str()),
polygonTypes.size(), declaration);
diff --git a/tools/ZAPD/ZAPD/ZCollision.h b/tools/ZAPD/ZAPD/ZCollision.h
index 7481a8526..35c632144 100644
--- a/tools/ZAPD/ZAPD/ZCollision.h
+++ b/tools/ZAPD/ZAPD/ZCollision.h
@@ -1,22 +1,11 @@
#pragma once
+#include "ZCollisionPoly.h"
#include "ZFile.h"
#include "ZResource.h"
#include "ZRoom/ZRoom.h"
+#include "ZSurfaceType.h"
#include "ZVector.h"
-#include "ZCollisionPoly.h"
-
-#if 0
-class PolygonEntry
-{
-public:
- uint16_t type;
- uint16_t vtxA, vtxB, vtxC;
- uint16_t a, b, c, d;
-
- PolygonEntry(const std::vector& rawData, uint32_t rawDataIndex);
-};
-#endif
class WaterBoxHeader
{
@@ -82,7 +71,7 @@ public:
std::vector vertices;
std::vector polygons;
- std::vector polygonTypes;
+ std::vector polygonTypes;
std::vector waterBoxes;
CameraDataList* camData = nullptr;
diff --git a/tools/ZAPD/ZAPD/ZCollisionPoly.cpp b/tools/ZAPD/ZAPD/ZCollisionPoly.cpp
index eb2c14ab9..c4eb2d461 100644
--- a/tools/ZAPD/ZAPD/ZCollisionPoly.cpp
+++ b/tools/ZAPD/ZAPD/ZCollisionPoly.cpp
@@ -16,61 +16,63 @@ ZCollisionPoly::~ZCollisionPoly()
void ZCollisionPoly::ParseRawData()
{
- const auto& rawData = parent->GetRawData();
- type = BitConverter::ToUInt16BE(rawData, rawDataIndex + 0);
-
- vtxA = BitConverter::ToUInt16BE(rawData, rawDataIndex + 2);
- vtxB = BitConverter::ToUInt16BE(rawData, rawDataIndex + 4);
- vtxC = BitConverter::ToUInt16BE(rawData, rawDataIndex + 6);
+ const auto& rawData = parent->GetRawData();
+ type = BitConverter::ToUInt16BE(rawData, rawDataIndex + 0);
- normX = BitConverter::ToUInt16BE(rawData, rawDataIndex + 8);
- normY = BitConverter::ToUInt16BE(rawData, rawDataIndex + 10);
- normZ = BitConverter::ToUInt16BE(rawData, rawDataIndex + 12);
+ vtxA = BitConverter::ToUInt16BE(rawData, rawDataIndex + 2);
+ vtxB = BitConverter::ToUInt16BE(rawData, rawDataIndex + 4);
+ vtxC = BitConverter::ToUInt16BE(rawData, rawDataIndex + 6);
- dist = BitConverter::ToUInt16BE(rawData, rawDataIndex + 14);
+ normX = BitConverter::ToUInt16BE(rawData, rawDataIndex + 8);
+ normY = BitConverter::ToUInt16BE(rawData, rawDataIndex + 10);
+ normZ = BitConverter::ToUInt16BE(rawData, rawDataIndex + 12);
+
+ dist = BitConverter::ToUInt16BE(rawData, rawDataIndex + 14);
}
void ZCollisionPoly::DeclareReferences(const std::string& prefix)
{
- std::string declaration;
- std::string auxName = name;
+ std::string declaration;
+ std::string auxName = name;
- if (name == "")
- auxName = GetDefaultName(prefix);
+ if (name == "")
+ auxName = GetDefaultName(prefix);
- parent->AddDeclaration(rawDataIndex, DeclarationAlignment::Align4,GetRawDataSize(), GetSourceTypeName(), name.c_str(),GetBodySourceCode());
+ parent->AddDeclaration(rawDataIndex, DeclarationAlignment::Align4, GetRawDataSize(),
+ GetSourceTypeName(), name.c_str(), GetBodySourceCode());
}
std::string ZCollisionPoly::GetBodySourceCode() const
{
- std::string declaration;
+ std::string declaration;
- declaration += StringHelper::Sprintf("{0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X}", type, vtxA, vtxB, vtxC, normX, normY, normZ, dist);
- return declaration;
+ declaration +=
+ StringHelper::Sprintf("{0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X}",
+ type, vtxA, vtxB, vtxC, normX, normY, normZ, dist);
+ return declaration;
}
std::string ZCollisionPoly::GetDefaultName(const std::string& prefix) const
{
- return StringHelper::Sprintf("%sCollisionPoly_%06X", prefix.c_str(), rawDataIndex);
+ return StringHelper::Sprintf("%sCollisionPoly_%06X", prefix.c_str(), rawDataIndex);
}
-
ZResourceType ZCollisionPoly::GetResourceType() const
{
- return ZResourceType::CollisionPoly;
+ return ZResourceType::CollisionPoly;
}
size_t ZCollisionPoly::GetRawDataSize() const
{
- return 16;
+ return 16;
}
std::string ZCollisionPoly::GetSourceTypeName() const
{
- return "CollisionPoly";
+ return "CollisionPoly";
}
bool ZCollisionPoly::DoesSupportArray() const
{
- return true;
+ return true;
}
\ No newline at end of file
diff --git a/tools/ZAPD/ZAPD/ZCollisionPoly.h b/tools/ZAPD/ZAPD/ZCollisionPoly.h
index 9596d2253..64b98ba1d 100644
--- a/tools/ZAPD/ZAPD/ZCollisionPoly.h
+++ b/tools/ZAPD/ZAPD/ZCollisionPoly.h
@@ -3,28 +3,27 @@
#include "ZFile.h"
#include "ZResource.h"
-
class ZCollisionPoly : public ZResource
{
-public:
- uint16_t type;
+public:
+ uint16_t type;
uint16_t vtxA, vtxB, vtxC;
uint16_t normX, normY, normZ;
- uint16_t dist;
+ uint16_t dist;
- ZCollisionPoly(ZFile* nParent);
- ~ZCollisionPoly();
+ ZCollisionPoly(ZFile* nParent);
+ ~ZCollisionPoly();
- void ParseRawData() override;
- void DeclareReferences(const std::string& prefix) override;
+ void ParseRawData() override;
+ void DeclareReferences(const std::string& prefix) override;
- std::string GetBodySourceCode() const override;
- std::string GetDefaultName(const std::string& prefix) const override;
+ std::string GetBodySourceCode() const override;
+ std::string GetDefaultName(const std::string& prefix) const override;
- std::string GetSourceTypeName() const override;
- ZResourceType GetResourceType() const override;
+ std::string GetSourceTypeName() const override;
+ ZResourceType GetResourceType() const override;
- bool DoesSupportArray() const override;
+ bool DoesSupportArray() const override;
- size_t GetRawDataSize() const override;
+ size_t GetRawDataSize() const override;
};
\ No newline at end of file
diff --git a/tools/ZAPD/ZAPD/ZCutscene.cpp b/tools/ZAPD/ZAPD/ZCutscene.cpp
index 62f814b13..a3bfe0e07 100644
--- a/tools/ZAPD/ZAPD/ZCutscene.cpp
+++ b/tools/ZAPD/ZAPD/ZCutscene.cpp
@@ -76,7 +76,7 @@ void ZCutscene::ParseRawData()
endFrame = BitConverter::ToInt32BE(rawData, rawDataIndex + 4);
offset_t currentPtr = rawDataIndex + 8;
-
+ commands.reserve(numCommands);
for (int32_t i = 0; i < numCommands; i++)
{
uint32_t id = BitConverter::ToUInt32BE(rawData, currentPtr);
diff --git a/tools/ZAPD/ZAPD/ZDisplayList.cpp b/tools/ZAPD/ZAPD/ZDisplayList.cpp
index 5e9b1b205..3b50c1fd3 100644
--- a/tools/ZAPD/ZAPD/ZDisplayList.cpp
+++ b/tools/ZAPD/ZAPD/ZDisplayList.cpp
@@ -94,6 +94,7 @@ void ZDisplayList::ParseRawData()
instructions.reserve(numInstructions);
uint32_t ptr = rawDataIndex;
+ instructions.reserve(numInstructions);
for (size_t i = 0; i < numInstructions; i++)
{
instructions.push_back(BitConverter::ToUInt64BE(rawData, ptr));
@@ -1839,7 +1840,7 @@ void ZDisplayList::DeclareReferences(const std::string& prefix)
// Generate Vertex Declarations
std::vector vtxKeys;
-
+ vtxKeys.reserve(vertices.size());
for (auto& item : vertices)
vtxKeys.push_back(item.first);
diff --git a/tools/ZAPD/ZAPD/ZFile.cpp b/tools/ZAPD/ZAPD/ZFile.cpp
index b81399e2a..09776505d 100644
--- a/tools/ZAPD/ZAPD/ZFile.cpp
+++ b/tools/ZAPD/ZAPD/ZFile.cpp
@@ -213,7 +213,14 @@ void ZFile::ParseXML(tinyxml2::XMLElement* reader, const std::string& filename)
// Check for repeated attributes.
if (offsetXml != nullptr)
{
- rawDataIndex = strtol(StringHelper::Split(offsetXml, "0x")[1].c_str(), NULL, 16);
+ std::string offsetStr = StringHelper::Split(offsetXml, "0x")[1];
+ if (!StringHelper::HasOnlyHexDigits(offsetStr))
+ {
+ HANDLE_ERROR(WarningType::InvalidXML,
+ StringHelper::Sprintf("Invalid offset %s entered", offsetStr.c_str()),
+ "");
+ }
+ rawDataIndex = strtol(offsetStr.c_str(), NULL, 16);
if (offsetSet.find(offsetXml) != offsetSet.end())
{
@@ -420,6 +427,7 @@ ZResource* ZFile::FindResource(offset_t rawDataIndex)
std::vector ZFile::GetResourcesOfType(ZResourceType resType)
{
std::vector resList;
+ resList.reserve(resources.size());
for (ZResource* res : resources)
{
@@ -776,10 +784,10 @@ void ZFile::GenerateSourceHeaderFiles()
{
OutputFormatter formatter;
- std::string objectNameUpper = StringHelper::ToUpper(GetName());
+ std::string guard = StringHelper::ToUpper(outName.stem().string());
- formatter.Write(StringHelper::Sprintf("#ifndef %s_H\n#define %s_H 1\n\n",
- objectNameUpper.c_str(), objectNameUpper.c_str()));
+ formatter.Write(
+ StringHelper::Sprintf("#ifndef %s_H\n#define %s_H 1\n\n", guard.c_str(), guard.c_str()));
for (ZResource* res : resources)
{
@@ -1169,6 +1177,7 @@ void ZFile::HandleUnaccountedData()
uint32_t lastSize = 0;
std::vector declsAddresses;
+ declsAddresses.reserve(declarations.size());
for (const auto& item : declarations)
{
declsAddresses.push_back(item.first);
diff --git a/tools/ZAPD/ZAPD/ZFile.h b/tools/ZAPD/ZAPD/ZFile.h
index 275e27f1b..e4980eb68 100644
--- a/tools/ZAPD/ZAPD/ZFile.h
+++ b/tools/ZAPD/ZAPD/ZFile.h
@@ -31,8 +31,8 @@ class ZFile
{
public:
std::map declarations;
- std::string defines;
std::vector resources;
+ std::string defines;
// Default to using virtual addresses
uint32_t segment = 0x80;
diff --git a/tools/ZAPD/ZAPD/ZPath.cpp b/tools/ZAPD/ZAPD/ZPath.cpp
index e19513db3..0dac87a1b 100644
--- a/tools/ZAPD/ZAPD/ZPath.cpp
+++ b/tools/ZAPD/ZAPD/ZPath.cpp
@@ -35,6 +35,7 @@ void ZPath::ParseRawData()
uint32_t currentPtr = rawDataIndex;
+ pathways.reserve(numPaths);
for (size_t pathIndex = 0; pathIndex < numPaths; pathIndex++)
{
PathwayEntry path(parent);
@@ -125,6 +126,7 @@ void PathwayEntry::ParseRawData()
uint32_t currentPtr = GETSEGOFFSET(listSegmentAddress);
+ points.reserve(numPoints);
for (int32_t i = 0; i < numPoints; i++)
{
ZVector vec(parent);
diff --git a/tools/ZAPD/ZAPD/ZResource.h b/tools/ZAPD/ZAPD/ZResource.h
index 35984679c..f97b259c6 100644
--- a/tools/ZAPD/ZAPD/ZResource.h
+++ b/tools/ZAPD/ZAPD/ZResource.h
@@ -25,6 +25,7 @@ class ZFile;
enum class ZResourceType
{
Error,
+ ActorList,
Animation,
Array,
AltHeader,
@@ -46,6 +47,7 @@ enum class ZResourceType
Scene,
Skeleton,
String,
+ SurfaceType,
Symbol,
Texture,
TextureAnimation,
diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetActorCutsceneList.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetActorCutsceneList.cpp
index 60391a9d1..15f2c6b45 100644
--- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetActorCutsceneList.cpp
+++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetActorCutsceneList.cpp
@@ -14,8 +14,9 @@ void SetActorCutsceneList::ParseRawData()
{
ZRoomCommand::ParseRawData();
int numCutscenes = cmdArg1;
- int32_t currentPtr = segmentOffset;
+ offset_t currentPtr = segmentOffset;
+ cutscenes.reserve(numCutscenes);
for (int32_t i = 0; i < numCutscenes; i++)
{
ActorCutsceneEntry entry(parent->GetRawData(), currentPtr);
diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetActorList.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetActorList.cpp
index 919d86f57..4d16f9377 100644
--- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetActorList.cpp
+++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetActorList.cpp
@@ -1,10 +1,10 @@
#include "SetActorList.h"
+#include
+
#include "Globals.h"
#include "Utils/BitConverter.h"
#include "Utils/StringHelper.h"
-#include "ZFile.h"
-#include "ZRoom/ZNames.h"
#include "ZRoom/ZRoom.h"
SetActorList::SetActorList(ZFile* nParent) : ZRoomCommand(nParent)
@@ -15,104 +15,38 @@ void SetActorList::ParseRawData()
{
ZRoomCommand::ParseRawData();
numActors = cmdArg1;
+
+ actorList = new ZActorList(parent);
+ actorList->ExtractFromBinary(segmentOffset, numActors);
}
void SetActorList::DeclareReferences(const std::string& prefix)
{
- if (numActors != 0 && cmdArg2 != 0)
+ if (parent->HasDeclaration(segmentOffset))
{
- std::string varName =
- StringHelper::Sprintf("%sActorList_%06X", prefix.c_str(), segmentOffset);
- parent->AddDeclarationPlaceholder(segmentOffset, varName);
- }
-}
-
-void SetActorList::ParseRawDataLate()
-{
- ZRoomCommand::ParseRawDataLate();
- size_t actorsAmount = zRoom->GetDeclarationSizeFromNeighbor(segmentOffset) / 0x10;
-
- uint32_t currentPtr = segmentOffset;
-
- for (size_t i = 0; i < actorsAmount; i++)
- {
- ActorSpawnEntry entry(parent->GetRawData(), currentPtr);
-
- currentPtr += entry.GetRawDataSize();
- actors.push_back(entry);
- }
-}
-
-void SetActorList::DeclareReferencesLate(const std::string& prefix)
-{
- if (actors.empty())
+ delete actorList;
+ actorList = static_cast(parent->FindResource(segmentOffset));
+ assert(actorList != nullptr);
+ assert(actorList->GetResourceType() == ZResourceType::ActorList);
return;
-
- std::string declaration;
-
- size_t largestlength = 0;
- for (const auto& entry : actors)
- {
- size_t actorNameLength = ZNames::GetActorName(entry.GetActorId()).size();
- if (actorNameLength > largestlength)
- largestlength = actorNameLength;
}
- size_t index = 0;
- for (auto& entry : actors)
+ if (actorList->GetName() == "")
{
- entry.SetLargestActorName(largestlength);
- declaration += StringHelper::Sprintf("\t{ %s },", entry.GetBodySourceCode().c_str());
-
- if (index < actors.size() - 1)
- declaration += "\n";
-
- index++;
+ actorList->SetName(actorList->GetDefaultName(prefix));
}
-
- const auto& entry = actors.front();
-
- std::string varName = StringHelper::Sprintf("%sActorList_%06X", prefix.c_str(), segmentOffset);
- parent->AddDeclarationArray(segmentOffset, DeclarationAlignment::Align4,
- actors.size() * entry.GetRawDataSize(), entry.GetSourceTypeName(),
- varName, GetActorListArraySize(), declaration);
+ actorList->DeclareVar(prefix, "");
+ parent->AddResource(actorList);
}
std::string SetActorList::GetBodySourceCode() const
{
std::string listName;
Globals::Instance->GetSegmentedPtrName(cmdArg2, parent, "ActorEntry", listName);
- if (numActors != actors.size())
- {
- printf("%s: numActors(%i) ~ actors(%li)\n", parent->GetName().c_str(), numActors,
- actors.size());
- }
+
return StringHelper::Sprintf("SCENE_CMD_ACTOR_LIST(%i, %s)", numActors, listName.c_str());
}
-size_t SetActorList::GetActorListArraySize() const
-{
- size_t actorCount = 0;
-
- // Doing an else-if here so we only do the loop when the game is SW97.
- // Actor 0x22 is removed from SW97, so we need to ensure that we don't increment the actor count
- // for it.
- if (Globals::Instance->game == ZGame::OOT_SW97)
- {
- actorCount = 0;
-
- for (const auto& entry : actors)
- if (entry.GetActorId() != 0x22)
- actorCount++;
- }
- else
- {
- actorCount = actors.size();
- }
-
- return actorCount;
-}
-
std::string SetActorList::GetCommandCName() const
{
return "SCmdActorList";
@@ -122,58 +56,3 @@ RoomCommand SetActorList::GetRoomCommand() const
{
return RoomCommand::SetActorList;
}
-
-ActorSpawnEntry::ActorSpawnEntry(const std::vector& rawData, uint32_t rawDataIndex)
-{
- actorNum = BitConverter::ToInt16BE(rawData, rawDataIndex + 0);
- posX = BitConverter::ToInt16BE(rawData, rawDataIndex + 2);
- posY = BitConverter::ToInt16BE(rawData, rawDataIndex + 4);
- posZ = BitConverter::ToInt16BE(rawData, rawDataIndex + 6);
- rotX = BitConverter::ToUInt16BE(rawData, rawDataIndex + 8);
- rotY = BitConverter::ToUInt16BE(rawData, rawDataIndex + 10);
- rotZ = BitConverter::ToUInt16BE(rawData, rawDataIndex + 12);
- initVar = BitConverter::ToInt16BE(rawData, rawDataIndex + 14);
-}
-
-std::string ActorSpawnEntry::GetBodySourceCode() const
-{
- std::string body;
-
- std::string actorNameFmt = StringHelper::Sprintf("%%-%zus ", largestActorName + 1);
- body =
- StringHelper::Sprintf(actorNameFmt.c_str(), (ZNames::GetActorName(actorNum) + ",").c_str());
-
- body += StringHelper::Sprintf("{ %6i, %6i, %6i }, ", posX, posY, posZ);
- if (Globals::Instance->game == ZGame::MM_RETAIL)
- body += StringHelper::Sprintf("{ SPAWN_ROT_FLAGS(%#5hX, 0x%04X)"
- ", SPAWN_ROT_FLAGS(%#5hX, 0x%04X)"
- ", SPAWN_ROT_FLAGS(%#5hX, 0x%04X) }, ",
- (rotX >> 7) & 0b111111111, rotX & 0b1111111,
- (rotY >> 7) & 0b111111111, rotY & 0b1111111,
- (rotZ >> 7) & 0b111111111, rotZ & 0b1111111);
- else
- body += StringHelper::Sprintf("{ %#6hX, %#6hX, %#6hX }, ", rotX, rotY, rotZ);
- body += StringHelper::Sprintf("0x%04X", initVar);
-
- return body;
-}
-
-std::string ActorSpawnEntry::GetSourceTypeName() const
-{
- return "ActorEntry";
-}
-
-int32_t ActorSpawnEntry::GetRawDataSize() const
-{
- return 16;
-}
-
-uint16_t ActorSpawnEntry::GetActorId() const
-{
- return actorNum;
-}
-
-void ActorSpawnEntry::SetLargestActorName(size_t nameSize)
-{
- largestActorName = nameSize;
-}
diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetActorList.h b/tools/ZAPD/ZAPD/ZRoom/Commands/SetActorList.h
index 7b341256c..9122c15bb 100644
--- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetActorList.h
+++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetActorList.h
@@ -1,45 +1,19 @@
#pragma once
+#include "ZActorList.h"
#include "ZRoom/ZRoomCommand.h"
-class ActorSpawnEntry
-{
-public:
- uint16_t actorNum;
- int16_t posX;
- int16_t posY;
- int16_t posZ;
- uint16_t rotX;
- uint16_t rotY;
- uint16_t rotZ;
- uint16_t initVar;
- size_t largestActorName = 16;
-
- ActorSpawnEntry(const std::vector& rawData, uint32_t rawDataIndex);
-
- std::string GetBodySourceCode() const;
-
- std::string GetSourceTypeName() const;
- int32_t GetRawDataSize() const;
-
- uint16_t GetActorId() const;
- void SetLargestActorName(size_t nameSize);
-};
-
class SetActorList : public ZRoomCommand
{
public:
- uint8_t numActors;
- std::vector actors;
+ uint32_t numActors;
+ ZActorList* actorList = nullptr;
SetActorList(ZFile* nParent);
void ParseRawData() override;
void DeclareReferences(const std::string& prefix) override;
- void ParseRawDataLate() override;
- void DeclareReferencesLate(const std::string& prefix) override;
-
std::string GetBodySourceCode() const override;
RoomCommand GetRoomCommand() const override;
diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetAlternateHeaders.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetAlternateHeaders.cpp
index 629d4a0b0..1687b5462 100644
--- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetAlternateHeaders.cpp
+++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetAlternateHeaders.cpp
@@ -21,9 +21,10 @@ void SetAlternateHeaders::DeclareReferences([[maybe_unused]] const std::string&
void SetAlternateHeaders::ParseRawDataLate()
{
- int numHeaders = zRoom->GetDeclarationSizeFromNeighbor(segmentOffset) / 4;
+ size_t numHeaders = zRoom->GetDeclarationSizeFromNeighbor(segmentOffset) / 4;
- for (int32_t i = 0; i < numHeaders; i++)
+ headers.reserve(numHeaders);
+ for (uint32_t i = 0; i < numHeaders; i++)
{
int32_t address = BitConverter::ToInt32BE(parent->GetRawData(), segmentOffset + (i * 4));
headers.push_back(address);
diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetCsCamera.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetCsCamera.cpp
index 5cf0a3d03..ada1a1038 100644
--- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetCsCamera.cpp
+++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetCsCamera.cpp
@@ -18,6 +18,7 @@ void SetCsCamera::ParseRawData()
uint32_t currentPtr = segmentOffset;
int32_t numPoints = 0;
+ cameras.reserve(numCameras);
for (int32_t i = 0; i < numCameras; i++)
{
CsCameraEntry entry(parent->GetRawData(), currentPtr);
@@ -31,6 +32,7 @@ void SetCsCamera::ParseRawData()
{
uint32_t currentPtr = cameras.at(0).GetSegmentOffset();
+ points.reserve(numPoints);
for (int32_t i = 0; i < numPoints; i++)
{
ZVector vec(parent);
diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetCutscenes.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetCutscenes.cpp
index 3820203ef..51df68ca1 100644
--- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetCutscenes.cpp
+++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetCutscenes.cpp
@@ -20,6 +20,7 @@ void SetCutscenes::ParseRawData()
{
int32_t currentPtr = segmentOffset;
+ cutsceneEntries.reserve(numCutscenes);
for (uint8_t i = 0; i < numCutscenes; i++)
{
CutsceneEntry entry(parent->GetRawData(), currentPtr);
diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetEntranceList.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetEntranceList.cpp
index 8099bacf1..c92f56c4e 100644
--- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetEntranceList.cpp
+++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetEntranceList.cpp
@@ -24,10 +24,11 @@ void SetEntranceList::DeclareReferences([[maybe_unused]] const std::string& pref
void SetEntranceList::ParseRawDataLate()
{
// Parse Entrances and Generate Declaration
- int numEntrances = zRoom->GetDeclarationSizeFromNeighbor(segmentOffset) / 2;
+ uint32_t numEntrances = zRoom->GetDeclarationSizeFromNeighbor(segmentOffset) / 2;
uint32_t currentPtr = segmentOffset;
- for (int32_t i = 0; i < numEntrances; i++)
+ entrances.reserve(numEntrances);
+ for (uint32_t i = 0; i < numEntrances; i++)
{
EntranceEntry entry(parent->GetRawData(), currentPtr);
entrances.push_back(entry);
diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetExitList.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetExitList.cpp
index ddc4c5d43..80ccc6b05 100644
--- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetExitList.cpp
+++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetExitList.cpp
@@ -4,6 +4,7 @@
#include "Utils/BitConverter.h"
#include "Utils/StringHelper.h"
#include "ZFile.h"
+#include "ZRoom/ZNames.h"
#include "ZRoom/ZRoom.h"
SetExitList::SetExitList(ZFile* nParent) : ZRoomCommand(nParent)
@@ -23,10 +24,11 @@ void SetExitList::DeclareReferences([[maybe_unused]] const std::string& prefix)
void SetExitList::ParseRawDataLate()
{
// Parse Entrances and Generate Declaration
- int numEntrances = zRoom->GetDeclarationSizeFromNeighbor(segmentOffset) / 2;
+ uint32_t numEntrances = zRoom->GetDeclarationSizeFromNeighbor(segmentOffset) / 2;
uint32_t currentPtr = segmentOffset;
- for (int32_t i = 0; i < numEntrances; i++)
+ exits.reserve(numEntrances);
+ for (uint32_t i = 0; i < numEntrances; i++)
{
uint16_t exit = BitConverter::ToUInt16BE(parent->GetRawData(), currentPtr);
exits.push_back(exit);
@@ -43,7 +45,8 @@ void SetExitList::DeclareReferencesLate([[maybe_unused]] const std::string& pref
for (size_t i = 0; i < exits.size(); i++)
{
- declaration += StringHelper::Sprintf(" 0x%04X,", exits.at(i));
+ declaration +=
+ StringHelper::Sprintf(" %s,", ZNames::GetEntranceName(exits[i]).c_str());
if (i + 1 < exits.size())
declaration += "\n";
}
diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetLightList.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetLightList.cpp
index 2e023ff20..0d0f0ff79 100644
--- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetLightList.cpp
+++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetLightList.cpp
@@ -15,6 +15,8 @@ void SetLightList::ParseRawData()
numLights = cmdArg1;
int32_t currentPtr = segmentOffset;
+
+ lights.reserve(this->numLights);
for (int i = 0; i < this->numLights; i++)
{
LightInfo light(parent->GetRawData(), currentPtr);
diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetLightingSettings.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetLightingSettings.cpp
index 08cd83d14..ba5785cfc 100644
--- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetLightingSettings.cpp
+++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetLightingSettings.cpp
@@ -15,6 +15,7 @@ void SetLightingSettings::ParseRawData()
ZRoomCommand::ParseRawData();
uint8_t numLights = cmdArg1;
+ settings.reserve(numLights);
for (int i = 0; i < numLights; i++)
settings.push_back(LightingSettings(parent->GetRawData(), segmentOffset + (i * 22)));
}
diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetMesh.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetMesh.cpp
index ba0bbe2c2..89c8c8c88 100644
--- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetMesh.cpp
+++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetMesh.cpp
@@ -442,6 +442,8 @@ void PolygonType1::DeclareReferences(const std::string& prefix)
{
listAddress = Seg2Filespace(list, parent->baseAddress);
uint32_t auxPtr = listAddress;
+
+ multiList.reserve(count);
for (size_t i = 0; i < count; ++i)
{
BgImage bg(false, prefix, auxPtr, parent);
@@ -545,6 +547,8 @@ void PolygonType2::ParseRawData()
end = BitConverter::ToUInt32BE(rawData, rawDataIndex + 0x08);
uint32_t currentPtr = GETSEGOFFSET(start);
+
+ polyDLists.reserve(num);
for (size_t i = 0; i < num; i++)
{
PolygonDlist entry(parent);
diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetMinimapChests.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetMinimapChests.cpp
index ec432b7d9..b1985f890 100644
--- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetMinimapChests.cpp
+++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetMinimapChests.cpp
@@ -15,8 +15,9 @@ void SetMinimapChests::ParseRawData()
ZRoomCommand::ParseRawData();
int numChests = cmdArg1;
- int32_t currentPtr = segmentOffset;
+ offset_t currentPtr = segmentOffset;
+ chests.reserve(numChests);
for (int32_t i = 0; i < numChests; i++)
{
MinimapChest chest(parent->GetRawData(), currentPtr);
diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetMinimapList.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetMinimapList.cpp
index be5d8f15d..a5aac2a54 100644
--- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetMinimapList.cpp
+++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetMinimapList.cpp
@@ -15,10 +15,11 @@ void SetMinimapList::ParseRawData()
ZRoomCommand::ParseRawData();
listSegmentAddr = BitConverter::ToInt32BE(parent->GetRawData(), segmentOffset);
listSegmentOffset = GETSEGOFFSET(listSegmentAddr);
- unk4 = BitConverter::ToInt32BE(parent->GetRawData(), segmentOffset + 4);
+ scale = BitConverter::ToInt16BE(parent->GetRawData(), segmentOffset + 4);
- int32_t currentPtr = listSegmentOffset;
+ uint32_t currentPtr = listSegmentOffset;
+ minimaps.reserve(zRoom->roomCount);
for (int32_t i = 0; i < zRoom->roomCount; i++)
{
MinimapEntry entry(parent->GetRawData(), currentPtr);
@@ -53,7 +54,7 @@ void SetMinimapList::DeclareReferences(const std::string& prefix)
{
std::string listName;
Globals::Instance->GetSegmentedPtrName(listSegmentAddr, parent, "MinimapEntry", listName);
- std::string declaration = StringHelper::Sprintf("\n\t%s, 0x%08X\n", listName.c_str(), unk4);
+ std::string declaration = StringHelper::Sprintf("\n\t%s, %d\n", listName.c_str(), scale);
parent->AddDeclaration(
segmentOffset, DeclarationAlignment::Align4, 8, "MinimapList",
diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetMinimapList.h b/tools/ZAPD/ZAPD/ZRoom/Commands/SetMinimapList.h
index 5b18b3dd7..fcf7ad7a6 100644
--- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetMinimapList.h
+++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetMinimapList.h
@@ -35,5 +35,5 @@ public:
private:
segptr_t listSegmentAddr;
uint32_t listSegmentOffset;
- uint32_t unk4;
+ int16_t scale;
};
diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetObjectList.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetObjectList.cpp
index fdd41e6cb..3048aa2d4 100644
--- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetObjectList.cpp
+++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetObjectList.cpp
@@ -17,6 +17,7 @@ void SetObjectList::ParseRawData()
uint8_t objectCnt = parent->GetRawData().at(rawDataIndex + 1);
uint32_t currentPtr = segmentOffset;
+ objects.reserve(objectCnt);
for (uint8_t i = 0; i < objectCnt; i++)
{
uint16_t objectIndex = BitConverter::ToInt16BE(parent->GetRawData(), currentPtr);
diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetRoomList.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetRoomList.cpp
index 20138dd4d..24969a14d 100644
--- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetRoomList.cpp
+++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetRoomList.cpp
@@ -69,6 +69,7 @@ void RomFile::ParseRawData()
uint32_t currentPtr = rawDataIndex;
+ rooms.reserve(numRooms);
for (int32_t i = 0; i < numRooms; i++)
{
RoomEntry entry(parent->GetRawData(), currentPtr);
@@ -104,8 +105,9 @@ std::string RomFile::GetBodySourceCode() const
if (!isFirst)
declaration += "\n";
- declaration += StringHelper::Sprintf("\t{ _%sSegmentRomStart, _%sSegmentRomEnd },",
- roomName.c_str(), roomName.c_str());
+ declaration += StringHelper::Sprintf(
+ "\t{ (uintptr_t)_%sSegmentRomStart, (uintptr_t)_%sSegmentRomEnd },",
+ roomName.c_str(), roomName.c_str());
isFirst = false;
}
}
diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetStartPositionList.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetStartPositionList.cpp
index f75b5e0d5..14ca16a96 100644
--- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetStartPositionList.cpp
+++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetStartPositionList.cpp
@@ -16,9 +16,10 @@ void SetStartPositionList::ParseRawData()
ZRoomCommand::ParseRawData();
uint8_t numActors = cmdArg1;
- uint32_t currentPtr = segmentOffset;
+ offset_t currentPtr = segmentOffset;
- for (int32_t i = 0; i < numActors; i++)
+ actors.reserve(numActors);
+ for (uint32_t i = 0; i < numActors; i++)
{
actors.push_back(ActorSpawnEntry(parent->GetRawData(), currentPtr));
currentPtr += 16;
diff --git a/tools/ZAPD/ZAPD/ZRoom/Commands/SetTransitionActorList.cpp b/tools/ZAPD/ZAPD/ZRoom/Commands/SetTransitionActorList.cpp
index a33d1c6e1..67e3e4e18 100644
--- a/tools/ZAPD/ZAPD/ZRoom/Commands/SetTransitionActorList.cpp
+++ b/tools/ZAPD/ZAPD/ZRoom/Commands/SetTransitionActorList.cpp
@@ -17,6 +17,7 @@ void SetTransitionActorList::ParseRawData()
int numActors = cmdArg1;
uint32_t currentPtr = segmentOffset;
+ transitionActors.reserve(numActors);
for (int32_t i = 0; i < numActors; i++)
{
TransitionActorEntry entry(parent->GetRawData(), currentPtr);
diff --git a/tools/ZAPD/ZAPD/ZRoom/ZNames.h b/tools/ZAPD/ZAPD/ZRoom/ZNames.h
index 94e08de0d..667407c36 100644
--- a/tools/ZAPD/ZAPD/ZRoom/ZNames.h
+++ b/tools/ZAPD/ZAPD/ZRoom/ZNames.h
@@ -12,17 +12,17 @@ public:
{
if (id >= Globals::Instance->cfg.objectList.size())
return StringHelper::Sprintf("0x%04X", id);
- return Globals::Instance->cfg.objectList.at(id);
+ return Globals::Instance->cfg.objectList[id];
}
- static std::string GetActorName(int32_t id)
+ static std::string GetActorName(uint16_t id)
{
switch (Globals::Instance->game)
{
case ZGame::OOT_RETAIL:
case ZGame::OOT_SW97:
if (id < ZNames::GetNumActors())
- return Globals::Instance->cfg.actorList.at(id);
+ return Globals::Instance->cfg.actorList[id];
else
return StringHelper::Sprintf("0x%04X", id);
case ZGame::MM_RETAIL:
@@ -31,7 +31,7 @@ public:
id &= 0xFFF;
std::string name;
if (id < ZNames::GetNumActors())
- name = Globals::Instance->cfg.actorList.at(id);
+ name = Globals::Instance->cfg.actorList[id];
else
name = StringHelper::Sprintf("0x%04X", id);
@@ -45,5 +45,20 @@ public:
return "";
}
- static int32_t GetNumActors() { return Globals::Instance->cfg.actorList.size(); }
+ static std::string GetEntranceName(uint16_t id)
+ {
+ if (ZNames::GetNumEntrances() == 0 || ZNames::GetNumSpecialEntrances() == 0)
+ return StringHelper::Sprintf("0x%04X", id);
+
+ if (id < ZNames::GetNumEntrances())
+ return Globals::Instance->cfg.entranceList[id];
+ else if ((id >= 0x7FF9 && id <= 0x7FFF) && !((id - 0x7FF9U) > GetNumSpecialEntrances())) // Special entrances
+ return Globals::Instance->cfg.specialEntranceList[id - 0x7FF9];
+ else
+ return StringHelper::Sprintf("0x%04X", id);
+ }
+
+ static size_t GetNumActors() { return Globals::Instance->cfg.actorList.size(); }
+ static size_t GetNumEntrances() { return Globals::Instance->cfg.entranceList.size(); }
+ static size_t GetNumSpecialEntrances() { return Globals::Instance->cfg.specialEntranceList.size(); }
};
diff --git a/tools/ZAPD/ZAPD/ZSkeleton.cpp b/tools/ZAPD/ZAPD/ZSkeleton.cpp
index b3f7ce8c0..ca680c5f5 100644
--- a/tools/ZAPD/ZAPD/ZSkeleton.cpp
+++ b/tools/ZAPD/ZAPD/ZSkeleton.cpp
@@ -287,6 +287,8 @@ void ZLimbTable::ParseRawData()
const auto& rawData = parent->GetRawData();
uint32_t ptr = rawDataIndex;
+
+ limbsAddresses.reserve(count);
for (size_t i = 0; i < count; i++)
{
limbsAddresses.push_back(BitConverter::ToUInt32BE(rawData, ptr));
@@ -301,7 +303,7 @@ void ZLimbTable::DeclareReferences(const std::string& prefix)
varPrefix = prefix;
ZResource::DeclareReferences(varPrefix);
-
+ limbsReferences.reserve(count);
for (size_t i = 0; i < count; i++)
{
segptr_t limbAddress = limbsAddresses[i];
diff --git a/tools/ZAPD/ZAPD/ZSurfaceType.cpp b/tools/ZAPD/ZAPD/ZSurfaceType.cpp
new file mode 100644
index 000000000..27e73accc
--- /dev/null
+++ b/tools/ZAPD/ZAPD/ZSurfaceType.cpp
@@ -0,0 +1,65 @@
+#include "ZSurfaceType.h"
+
+#include "Globals.h"
+#include "Utils/BitConverter.h"
+#include "Utils/StringHelper.h"
+
+REGISTER_ZFILENODE(SurfaceType, ZSurfaceType);
+
+ZSurfaceType::ZSurfaceType(ZFile* nParent) : ZResource(nParent)
+{
+}
+
+ZSurfaceType::~ZSurfaceType()
+{
+}
+
+void ZSurfaceType::ParseRawData()
+{
+ const auto& rawData = parent->GetRawData();
+
+ data[0] = BitConverter::ToUInt32BE(rawData, rawDataIndex + 0);
+ data[1] = BitConverter::ToUInt32BE(rawData, rawDataIndex + 4);
+}
+
+void ZSurfaceType::DeclareReferences(const std::string& prefix)
+{
+ std::string declaration;
+ std::string auxName = name;
+
+ if (name == "")
+ auxName = GetDefaultName(prefix);
+
+ parent->AddDeclaration(rawDataIndex, DeclarationAlignment::Align4, GetRawDataSize(),
+ GetSourceTypeName(), name.c_str(), GetBodySourceCode());
+}
+
+std::string ZSurfaceType::GetBodySourceCode() const
+{
+ return StringHelper::Sprintf("{0x%08X, 0x%08X}", data[0], data[1]);
+}
+
+std::string ZSurfaceType::GetDefaultName(const std::string& prefix) const
+{
+ return StringHelper::Sprintf("%sSurfaceType_%06X", prefix.c_str(), rawDataIndex);
+}
+
+ZResourceType ZSurfaceType::GetResourceType() const
+{
+ return ZResourceType::SurfaceType;
+}
+
+size_t ZSurfaceType::GetRawDataSize() const
+{
+ return 8;
+}
+
+std::string ZSurfaceType::GetSourceTypeName() const
+{
+ return "SurfaceType";
+}
+
+bool ZSurfaceType::DoesSupportArray() const
+{
+ return true;
+}
diff --git a/tools/ZAPD/ZAPD/ZSurfaceType.h b/tools/ZAPD/ZAPD/ZSurfaceType.h
new file mode 100644
index 000000000..3bbddee8c
--- /dev/null
+++ b/tools/ZAPD/ZAPD/ZSurfaceType.h
@@ -0,0 +1,27 @@
+#pragma once
+
+#include
+#include "ZFile.h"
+#include "ZResource.h"
+
+class ZSurfaceType : public ZResource
+{
+public:
+ std::array data;
+
+ ZSurfaceType(ZFile* nParent);
+ ~ZSurfaceType();
+
+ void ParseRawData() override;
+ void DeclareReferences(const std::string& prefix) override;
+
+ std::string GetBodySourceCode() const override;
+ std::string GetDefaultName(const std::string& prefix) const override;
+
+ std::string GetSourceTypeName() const override;
+ ZResourceType GetResourceType() const override;
+
+ bool DoesSupportArray() const override;
+
+ size_t GetRawDataSize() const override;
+};
diff --git a/tools/ZAPD/ZAPD/ZTexture.cpp b/tools/ZAPD/ZAPD/ZTexture.cpp
index a9cb53941..74b7c7d10 100644
--- a/tools/ZAPD/ZAPD/ZTexture.cpp
+++ b/tools/ZAPD/ZAPD/ZTexture.cpp
@@ -17,11 +17,15 @@ ZTexture::ZTexture(ZFile* nParent) : ZResource(nParent)
width = 0;
height = 0;
dWordAligned = true;
+ splitTlut = false;
RegisterRequiredAttribute("Width");
RegisterRequiredAttribute("Height");
RegisterRequiredAttribute("Format");
RegisterOptionalAttribute("TlutOffset");
+ RegisterOptionalAttribute("ExternalTlut");
+ RegisterOptionalAttribute("ExternalTlutOffset");
+ RegisterOptionalAttribute("SplitTlut");
}
void ZTexture::ExtractFromBinary(uint32_t nRawDataIndex, int32_t nWidth, int32_t nHeight,
@@ -56,6 +60,7 @@ void ZTexture::ParseXML(tinyxml2::XMLElement* reader)
std::string widthXml = registeredAttributes.at("Width").value;
std::string heightXml = registeredAttributes.at("Height").value;
+ std::string SplitTlutXml = registeredAttributes.at("SplitTlut").value;
if (!StringHelper::HasOnlyDigits(widthXml))
{
@@ -72,6 +77,27 @@ void ZTexture::ParseXML(tinyxml2::XMLElement* reader)
errorHeader, "");
}
+ if (!registeredAttributes.at("ExternalTlut").wasSet &&
+ registeredAttributes.at("SplitTlut").wasSet)
+ {
+ std::string errorHeader =
+ StringHelper::Sprintf("SplitTlut set without using an external tlut");
+ HANDLE_WARNING_RESOURCE(WarningType::InvalidAttributeValue, parent, this, rawDataIndex,
+ errorHeader, "");
+ }
+
+ if (!SplitTlutXml.empty())
+ {
+ if (!tinyxml2::XMLUtil::ToBool(SplitTlutXml.c_str(), &splitTlut))
+ {
+ std::string errorHeader = StringHelper::Sprintf(
+ "Invalid value passed to SplitTlut: '%s'. Valid values are true, false, 1, 0",
+ SplitTlutXml.c_str());
+ HANDLE_ERROR_RESOURCE(WarningType::InvalidAttributeValue, parent, this, rawDataIndex,
+ errorHeader, "");
+ }
+ }
+
width = StringHelper::StrToL(widthXml);
height = StringHelper::StrToL(heightXml);
@@ -145,6 +171,47 @@ void ZTexture::ParseRawData()
}
}
+void ZTexture::ParseRawDataLate()
+{
+ if (registeredAttributes["ExternalTlut"].wasSet)
+ {
+ const std::string externPalette = registeredAttributes["ExternalTlut"].value;
+ for (const auto& file : Globals::Instance->files)
+ {
+ if (file->GetName() == externPalette)
+ {
+ offset_t palOffset = 0;
+ if (registeredAttributes["ExternalTlutOffset"].wasSet)
+ {
+ palOffset =
+ StringHelper::StrToL(registeredAttributes["ExternalTlutOffset"].value, 16);
+ }
+ else
+ {
+ HANDLE_WARNING_RESOURCE(
+ WarningType::MissingOffsets, parent, this, rawDataIndex,
+ StringHelper::Sprintf(
+ "No ExternalTlutOffset Given. Assuming offset of 0x0"),
+ "");
+ }
+ for (const auto& res : file->resources)
+ {
+ if (res->GetRawDataIndex() == palOffset)
+ {
+ ZTexture* palette = (ZTexture*)res;
+ ZTexture tlutTemp(file);
+
+ tlut = &tlutTemp;
+ tlut->ExtractFromBinary(palOffset, palette->width, palette->height,
+ TextureType::RGBA16bpp, true);
+ SetTlut(tlut);
+ }
+ }
+ }
+ }
+ }
+}
+
void ZTexture::PrepareBitmapRGBA16()
{
textureData.InitEmptyRGBImage(width, height, true);
@@ -871,7 +938,7 @@ void ZTexture::SetTlut(ZTexture* nTlut)
assert(nTlut->isPalette);
tlut = nTlut;
- textureData.SetPalette(tlut->textureData);
+ textureData.SetPalette(tlut->textureData, splitTlut ? 128 : 0);
}
bool ZTexture::HasTlut() const
diff --git a/tools/ZAPD/ZAPD/ZTexture.h b/tools/ZAPD/ZAPD/ZTexture.h
index 6f2c49935..8cece3ff2 100644
--- a/tools/ZAPD/ZAPD/ZTexture.h
+++ b/tools/ZAPD/ZAPD/ZTexture.h
@@ -28,6 +28,7 @@ protected:
std::vector textureDataRaw; // When reading from a PNG file.
uint32_t tlutOffset = static_cast(-1);
ZTexture* tlut = nullptr;
+ bool splitTlut;
void PrepareBitmapRGBA16();
void PrepareBitmapRGBA32();
@@ -88,4 +89,5 @@ public:
bool IsColorIndexed() const;
void SetTlut(ZTexture* nTlut);
bool HasTlut() const;
+ void ParseRawDataLate() override;
};
diff --git a/tools/ZAPD/ZAPD/ZTextureAnimation.cpp b/tools/ZAPD/ZAPD/ZTextureAnimation.cpp
index 698054fa8..0c55b2609 100644
--- a/tools/ZAPD/ZAPD/ZTextureAnimation.cpp
+++ b/tools/ZAPD/ZAPD/ZTextureAnimation.cpp
@@ -569,6 +569,7 @@ void ZTextureAnimation::DeclareReferences(const std::string& prefix)
count = 2;
}
params = new TextureScrollingParams(parent);
+ params->type = entry.type;
params->ExtractFromBinary(paramsOffset, count);
break;
@@ -582,6 +583,7 @@ void ZTextureAnimation::DeclareReferences(const std::string& prefix)
case TextureAnimationParamsType::TextureCycle:
params = new TextureCyclingParams(parent);
+ params->type = entry.type;
params->ExtractFromBinary(paramsOffset);
break;
diff --git a/tools/ZAPD/ZAPD/ZVector.cpp b/tools/ZAPD/ZAPD/ZVector.cpp
index a5a059e35..607aac86d 100644
--- a/tools/ZAPD/ZAPD/ZVector.cpp
+++ b/tools/ZAPD/ZAPD/ZVector.cpp
@@ -48,7 +48,7 @@ void ZVector::ParseRawData()
int32_t currentRawDataIndex = rawDataIndex;
// TODO: this shouldn't be necessary.
scalars.clear();
-
+ scalars.reserve(dimensions);
for (uint32_t i = 0; i < dimensions; i++)
{
ZScalar scalar(parent);
diff --git a/tools/ZAPD/ZAPDUtils/Utils/File.h b/tools/ZAPD/ZAPDUtils/Utils/File.h
index 084152f79..7bc5d2950 100644
--- a/tools/ZAPD/ZAPDUtils/Utils/File.h
+++ b/tools/ZAPD/ZAPDUtils/Utils/File.h
@@ -33,6 +33,8 @@ public:
static std::string ReadAllText(const fs::path& filePath)
{
std::ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate);
+ if (!file.is_open())
+ return "";
int32_t fileSize = (int32_t)file.tellg();
file.seekg(0);
char* data = new char[fileSize + 1];
diff --git a/tools/ZAPD/ZAPDUtils/Utils/StringHelper.h b/tools/ZAPD/ZAPDUtils/Utils/StringHelper.h
index 2289927d8..8560d6b09 100644
--- a/tools/ZAPD/ZAPDUtils/Utils/StringHelper.h
+++ b/tools/ZAPD/ZAPDUtils/Utils/StringHelper.h
@@ -106,6 +106,11 @@ public:
return std::all_of(str.begin(), str.end(), ::isdigit);
}
+ static bool HasOnlyHexDigits(const std::string& str)
+ {
+ return std::all_of(str.begin(), str.end(), ::isxdigit);
+ }
+
static std::string ToUpper(const std::string& str)
{
std::string buff = str;
diff --git a/tools/ZAPD/ZAPDUtils/ZAPDUtils.vcxproj b/tools/ZAPD/ZAPDUtils/ZAPDUtils.vcxproj
index c0ef260dd..4b91c2aeb 100644
--- a/tools/ZAPD/ZAPDUtils/ZAPDUtils.vcxproj
+++ b/tools/ZAPD/ZAPDUtils/ZAPDUtils.vcxproj
@@ -29,7 +29,7 @@
Application
true
- v143
+ v142
Unicode
@@ -42,7 +42,7 @@
StaticLibrary
true
- v143
+ v142
MultiByte
diff --git a/tools/ZAPD/docs/zapd_extraction_xml_reference.md b/tools/ZAPD/docs/zapd_extraction_xml_reference.md
index 89ce33a6e..edbdf857f 100644
--- a/tools/ZAPD/docs/zapd_extraction_xml_reference.md
+++ b/tools/ZAPD/docs/zapd_extraction_xml_reference.md
@@ -149,12 +149,15 @@ u64 gCraterSmokeConeTex[] = {
- Attributes:
- - `Name`: Required. Suxffixed by `Tex`, unless it is a palette, in that case it is suffixed by `TLUT`.
+ - `Name`: Required. Suffixed by `Tex`, unless it is a palette, in that case it is suffixed by `TLUT`.
- `OutName`: Required. The filename of the extracted `.png` file.
- `Format`: Required. The format of the image. Valid values: `rgba32`, `rgba16`, `i4`, `i8`, `ia4`, `ia8`, `ia16`, `ci4` and `ci8`.
- `Width`: Required. Width in pixels of the image.
- `Height`: Required. Height in pixels of the image.
- `TlutOffset`: Optional. Specifies the tlut's offset used by this texture. This attribute is only valid if `Format` is either `ci4` or `ci8`, otherwise an exception would be thrown.
+ - `ExternalTlut`: Optional. Specifies that the texture's tlut is in a different file. Takes the filename of the file that contains the tlut.
+ - `ExternalTlutOffset`: Optional. Specifies the offset in the `ExternalTlut` of the tlut for the given texture.
+ - `SplitTlut`: Optional. Specifies that the given texture should take from the upper half of the tlut. Takes a bool, i.e. one of `true`, `false`, `1`, `0`.
The following is a list of the texture formats the Nintendo 64 supports, with their gfxdis names and ZAPD format names.
@@ -185,7 +188,7 @@ If you want to know more about this formats, you can check [`gsDPLoadTextureBloc
- Attributes:
- - `Name`: Required. Suxffixed by `Background`.
+ - `Name`: Required. Suffixed by `Background`.
- `OutName`: Required. The filename of the extracted `.jpg` file.
※ Explicit use of this tag isn't often necesary because it would probably be extracted automatically by another extracted element. You can use this to name them if you don't like the autogenerated name.
@@ -213,7 +216,7 @@ u8 gFireTempleBlob_00CCC0[] = {
- Attributes:
- - `Name`: Required. Suxffixed by `Blob`.
+ - `Name`: Required. Suffixed by `Blob`.
- `Size`: Required. Amount of bytes to extract. Hex.
※ We usually use blobs when we can't figure out the content's type of chunk of data.
@@ -232,7 +235,7 @@ A.k.a. Display list, or Gfx.
- Attributes:
- - `Name`: Required. Suxffixed by `DL`.
+ - `Name`: Required. Suffixed by `DL`.
-------------------------
@@ -246,7 +249,7 @@ A data type exclusive to Majora's Mask, that has scrolling, color changing, and
- Attributes:
- - `Name`: Required. Suxffixed by `TexAnim`.
+ - `Name`: Required. Suffixed by `TexAnim`.
-------------------------
@@ -306,7 +309,7 @@ Like `Scene`s and `Room`s, `AltHeader`s is special too. It should always be decl
- Attributes:
- - `Name`: Required. Suxffixed by `AltHeader`.
+ - `Name`: Required. Suffixed by `AltHeader`.
-------------------------
@@ -320,7 +323,7 @@ Like `Scene`s and `Room`s, `AltHeader`s is special too. It should always be decl
- Attributes:
- - `Name`: Required. Suxffixed by `Anim`.
+ - `Name`: Required. Suffixed by `Anim`.
-------------------------
@@ -334,7 +337,7 @@ Like `Scene`s and `Room`s, `AltHeader`s is special too. It should always be decl
- Attributes:
- - `Name`: Required. Suxffixed by `Anim`.
+ - `Name`: Required. Suffixed by `Anim`.
-------------------------
@@ -348,7 +351,7 @@ Like `Scene`s and `Room`s, `AltHeader`s is special too. It should always be decl
- Attributes:
- - `Name`: Required. Suxffixed by `Anim`.
+ - `Name`: Required. Suffixed by `Anim`.
- `SkelOffset`: Required. Offset of the `CurveSkeleton` (I.e. a [`Skeleton`](#skeleton) resource with `Type="Curve"`) related to this animation.
-------------------------
@@ -365,7 +368,7 @@ Useful only for the unused `object_human`'s animation data.
- Attributes:
- - `Name`: Required. Suxffixed by `Anim`.
+ - `Name`: Required. Suffixed by `Anim`.
-------------------------
@@ -379,7 +382,7 @@ Useful only for the unused `object_human`'s animation data.
- Attributes:
- - `Name`: Required. Suxffixed by `Skel`.
+ - `Name`: Required. Suffixed by `Skel`.
- `Type`: Required. Valid values: `Normal`, `Flex` and `Curve`.
- `LimbType`: Required. Valid values: `Standard`, `LOD`, `Skin`, `Curve` and `Legacy`.
- `EnumName`: Optional. The name of `typedef`'d limb enum.
@@ -404,7 +407,7 @@ The required data is providing the `EnumName`, `LimbNone` and `LimbMax` attribut
- Attributes:
- - `Name`: Required. Suxffixed by `Skel`.
+ - `Name`: Required. Suffixed by `Skel`.
- `LimbType`: Required. Valid values: `Standard`, `LOD`, `Skin`, `Curve` and `Legacy`.
- `Count`: Required. Amount of limbs. Integer.
- `EnumName`: Optional. The name of `typedef`'d limb enum.
@@ -425,7 +428,7 @@ See [Skeleton](#skeleton) for info on the limb enum generation.
- Attributes:
- - `Name`: Required. Suxffixed by `Limb`.
+ - `Name`: Required. Suffixed by `Limb`.
- `LimbType`: Required. Valid values: `Standard`, `LOD`, `Skin`, `Curve` and `Legacy`.
- `EnumName`: Optional. The name used for this limb in the limbs enum. It must be either present in every limb or in none.
@@ -468,7 +471,7 @@ extern u8 gJsjutanShadowTex[2048];
- Attributes:
- - `Name`: Required. Suxffixed by `Col`.
+ - `Name`: Required. Suffixed by `Col`.
-------------------------
@@ -490,7 +493,7 @@ u64 pad34F8 = { 0 };
- Attributes:
- - `Name`: Required. Suxffixed by ~~`TBD`~~.
+ - `Name`: Required. Suffixed by ~~`TBD`~~.
- `Type`: Required. Valid values: `s8`, `u8`, `x8`, `s16`, `u16`, `x16`, `s32`, `u32`, `x32`, `s64`, `u64`, `x64`, `f32` and `f64`.
※ Can be wrapped in an [`Array`](#array) tag.
@@ -544,7 +547,7 @@ Vec3s D_04002040[24] = {
- Attributes:
- - `Name`: Required. Suxffixed by ~~`TBD`~~.
+ - `Name`: Required. Suffixed by ~~`TBD`~~.
- `Type`: Required. Specifies the vector's type (`Vec3s`, `Vec3i` and `Vec3f`). Valid values: `s16`, `s32` and `f32`.
- `Dimensions`: Required. The amount of dimensions of the vector. Valid values: `3`.
@@ -564,7 +567,7 @@ Vec3s D_04002040[24] = {
- Attributes:
- - `Name`: Required. Suxffixed by `Vtx`.
+ - `Name`: Required. Suffixed by `Vtx`.
※ Can be wrapped in an [`Array`](#array) tag.
@@ -580,7 +583,7 @@ Vec3s D_04002040[24] = {
- Attributes:
- - `Name`: Required. Suxffixed by `Mtx`.
+ - `Name`: Required. Suffixed by `Mtx`.
※ Explicit use of this tag isn't often necesary because it would probably be extracted automatically by another extracted element.
@@ -596,7 +599,7 @@ Vec3s D_04002040[24] = {
- Attributes:
- - `Name`: Required. Suxffixed by `Cs`.
+ - `Name`: Required. Suffixed by `Cs`.
※ Explicit use of this tag isn't often necesary because it would probably be extracted automatically by another extracted element.
@@ -633,7 +636,7 @@ Currently, only [`Pointer`](#pointer), [`Scalar`](#scalar), [`Vector`](#vector)
- Attributes:
- - `Name`: Required. Suxffixed by `Path`.
+ - `Name`: Required. Suffixed by `Path`.
- `NumPaths`: Optional. The amount of paths contained in the array. It must be a positive integer.
-------------------------
@@ -650,7 +653,7 @@ Allows the extraction of the specific data of the player animations which are fo
- Attributes:
- - `Name`: Required. Suxffixed by `AnimData`.
+ - `Name`: Required. Suffixed by `AnimData`.
- `FrameCount`: Required. The length of the animation in frames. It must be a positive integer.
-------------------------
diff --git a/tools/ZAPD/lib/elfio/elfio/elf_types.hpp b/tools/ZAPD/lib/elfio/elfio/elf_types.hpp
deleted file mode 100644
index 63d025a58..000000000
--- a/tools/ZAPD/lib/elfio/elfio/elf_types.hpp
+++ /dev/null
@@ -1,851 +0,0 @@
-/*
-Copyright (C) 2001-2015 by Serge Lamikhov-Center
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#ifndef ELFTYPES_H
-#define ELFTYPES_H
-
-#ifndef ELFIO_NO_OWN_TYPES
- #if !defined(ELFIO_NO_CSTDINT) && !defined(ELFIO_NO_INTTYPES)
- #include
- #else
- typedef unsigned char uint8_t;
- typedef signed char int8_t;
- typedef unsigned short uint16_t;
- typedef signed short int16_t;
- #ifdef _MSC_VER
- typedef unsigned __int32 uint32_t;
- typedef signed __int32 int32_t;
- typedef unsigned __int64 uint64_t;
- typedef signed __int64 int64_t;
- #else
- typedef unsigned int uint32_t;
- typedef signed int int32_t;
- typedef unsigned long long uint64_t;
- typedef signed long long int64_t;
- #endif // _MSC_VER
- #endif // ELFIO_NO_CSTDINT
-#endif // ELFIO_NO_OWN_TYPES
-
-namespace ELFIO {
-
-// Attention! Platform depended definitions.
-typedef uint16_t Elf_Half;
-typedef uint32_t Elf_Word;
-typedef int32_t Elf_Sword;
-typedef uint64_t Elf_Xword;
-typedef int64_t Elf_Sxword;
-
-typedef uint32_t Elf32_Addr;
-typedef uint32_t Elf32_Off;
-typedef uint64_t Elf64_Addr;
-typedef uint64_t Elf64_Off;
-
-#define Elf32_Half Elf_Half
-#define Elf64_Half Elf_Half
-#define Elf32_Word Elf_Word
-#define Elf64_Word Elf_Word
-#define Elf32_Sword Elf_Sword
-#define Elf64_Sword Elf_Sword
-
-///////////////////////
-// ELF Header Constants
-
-// File type
-#define ET_NONE 0
-#define ET_REL 1
-#define ET_EXEC 2
-#define ET_DYN 3
-#define ET_CORE 4
-#define ET_LOOS 0xFE00
-#define ET_HIOS 0xFEFF
-#define ET_LOPROC 0xFF00
-#define ET_HIPROC 0xFFFF
-
-
-#define EM_NONE 0 // No machine
-#define EM_M32 1 // AT&T WE 32100
-#define EM_SPARC 2 // SUN SPARC
-#define EM_386 3 // Intel 80386
-#define EM_68K 4 // Motorola m68k family
-#define EM_88K 5 // Motorola m88k family
-#define EM_486 6 // Intel 80486// Reserved for future use
-#define EM_860 7 // Intel 80860
-#define EM_MIPS 8 // MIPS R3000 (officially, big-endian only)
-#define EM_S370 9 // IBM System/370
-#define EM_MIPS_RS3_LE 10 // MIPS R3000 little-endian (Oct 4 1999 Draft) Deprecated
-#define EM_res011 11 // Reserved
-#define EM_res012 12 // Reserved
-#define EM_res013 13 // Reserved
-#define EM_res014 14 // Reserved
-#define EM_PARISC 15 // HPPA
-#define EM_res016 16 // Reserved
-#define EM_VPP550 17 // Fujitsu VPP500
-#define EM_SPARC32PLUS 18 // Sun's "v8plus"
-#define EM_960 19 // Intel 80960
-#define EM_PPC 20 // PowerPC
-#define EM_PPC64 21 // 64-bit PowerPC
-#define EM_S390 22 // IBM S/390
-#define EM_SPU 23 // Sony/Toshiba/IBM SPU
-#define EM_res024 24 // Reserved
-#define EM_res025 25 // Reserved
-#define EM_res026 26 // Reserved
-#define EM_res027 27 // Reserved
-#define EM_res028 28 // Reserved
-#define EM_res029 29 // Reserved
-#define EM_res030 30 // Reserved
-#define EM_res031 31 // Reserved
-#define EM_res032 32 // Reserved
-#define EM_res033 33 // Reserved
-#define EM_res034 34 // Reserved
-#define EM_res035 35 // Reserved
-#define EM_V800 36 // NEC V800 series
-#define EM_FR20 37 // Fujitsu FR20
-#define EM_RH32 38 // TRW RH32
-#define EM_MCORE 39 // Motorola M*Core // May also be taken by Fujitsu MMA
-#define EM_RCE 39 // Old name for MCore
-#define EM_ARM 40 // ARM
-#define EM_OLD_ALPHA 41 // Digital Alpha
-#define EM_SH 42 // Renesas (formerly Hitachi) / SuperH SH
-#define EM_SPARCV9 43 // SPARC v9 64-bit
-#define EM_TRICORE 44 // Siemens Tricore embedded processor
-#define EM_ARC 45 // ARC Cores
-#define EM_H8_300 46 // Renesas (formerly Hitachi) H8/300
-#define EM_H8_300H 47 // Renesas (formerly Hitachi) H8/300H
-#define EM_H8S 48 // Renesas (formerly Hitachi) H8S
-#define EM_H8_500 49 // Renesas (formerly Hitachi) H8/500
-#define EM_IA_64 50 // Intel IA-64 Processor
-#define EM_MIPS_X 51 // Stanford MIPS-X
-#define EM_COLDFIRE 52 // Motorola Coldfire
-#define EM_68HC12 53 // Motorola M68HC12
-#define EM_MMA 54 // Fujitsu Multimedia Accelerator
-#define EM_PCP 55 // Siemens PCP
-#define EM_NCPU 56 // Sony nCPU embedded RISC processor
-#define EM_NDR1 57 // Denso NDR1 microprocesspr
-#define EM_STARCORE 58 // Motorola Star*Core processor
-#define EM_ME16 59 // Toyota ME16 processor
-#define EM_ST100 60 // STMicroelectronics ST100 processor
-#define EM_TINYJ 61 // Advanced Logic Corp. TinyJ embedded processor
-#define EM_X86_64 62 // Advanced Micro Devices X86-64 processor
-#define EM_PDSP 63 // Sony DSP Processor
-#define EM_PDP10 64 // Digital Equipment Corp. PDP-10
-#define EM_PDP11 65 // Digital Equipment Corp. PDP-11
-#define EM_FX66 66 // Siemens FX66 microcontroller
-#define EM_ST9PLUS 67 // STMicroelectronics ST9+ 8/16 bit microcontroller
-#define EM_ST7 68 // STMicroelectronics ST7 8-bit microcontroller
-#define EM_68HC16 69 // Motorola MC68HC16 Microcontroller
-#define EM_68HC11 70 // Motorola MC68HC11 Microcontroller
-#define EM_68HC08 71 // Motorola MC68HC08 Microcontroller
-#define EM_68HC05 72 // Motorola MC68HC05 Microcontroller
-#define EM_SVX 73 // Silicon Graphics SVx
-#define EM_ST19 74 // STMicroelectronics ST19 8-bit cpu
-#define EM_VAX 75 // Digital VAX
-#define EM_CRIS 76 // Axis Communications 32-bit embedded processor
-#define EM_JAVELIN 77 // Infineon Technologies 32-bit embedded cpu
-#define EM_FIREPATH 78 // Element 14 64-bit DSP processor
-#define EM_ZSP 79 // LSI Logic's 16-bit DSP processor
-#define EM_MMIX 80 // Donald Knuth's educational 64-bit processor
-#define EM_HUANY 81 // Harvard's machine-independent format
-#define EM_PRISM 82 // SiTera Prism
-#define EM_AVR 83 // Atmel AVR 8-bit microcontroller
-#define EM_FR30 84 // Fujitsu FR30
-#define EM_D10V 85 // Mitsubishi D10V
-#define EM_D30V 86 // Mitsubishi D30V
-#define EM_V850 87 // NEC v850
-#define EM_M32R 88 // Renesas M32R (formerly Mitsubishi M32R)
-#define EM_MN10300 89 // Matsushita MN10300
-#define EM_MN10200 90 // Matsushita MN10200
-#define EM_PJ 91 // picoJava
-#define EM_OPENRISC 92 // OpenRISC 32-bit embedded processor
-#define EM_ARC_A5 93 // ARC Cores Tangent-A5
-#define EM_XTENSA 94 // Tensilica Xtensa Architecture
-#define EM_VIDEOCORE 95 // Alphamosaic VideoCore processor
-#define EM_TMM_GPP 96 // Thompson Multimedia General Purpose Processor
-#define EM_NS32K 97 // National Semiconductor 32000 series
-#define EM_TPC 98 // Tenor Network TPC processor
-#define EM_SNP1K 99 // Trebia SNP 1000 processor
-#define EM_ST200 100 // STMicroelectronics ST200 microcontroller
-#define EM_IP2K 101 // Ubicom IP2022 micro controller
-#define EM_MAX 102 // MAX Processor
-#define EM_CR 103 // National Semiconductor CompactRISC
-#define EM_F2MC16 104 // Fujitsu F2MC16
-#define EM_MSP430 105 // TI msp430 micro controller
-#define EM_BLACKFIN 106 // ADI Blackfin
-#define EM_SE_C33 107 // S1C33 Family of Seiko Epson processors
-#define EM_SEP 108 // Sharp embedded microprocessor
-#define EM_ARCA 109 // Arca RISC Microprocessor
-#define EM_UNICORE 110 // Microprocessor series from PKU-Unity Ltd. and MPRC of Peking University
-#define EM_EXCESS 111 // eXcess: 16/32/64-bit configurable embedded CPU
-#define EM_DXP 112 // Icera Semiconductor Inc. Deep Execution Processor
-#define EM_ALTERA_NIOS2 113 // Altera Nios II soft-core processor
-#define EM_CRX 114 // National Semiconductor CRX
-#define EM_XGATE 115 // Motorola XGATE embedded processor
-#define EM_C166 116 // Infineon C16x/XC16x processor
-#define EM_M16C 117 // Renesas M16C series microprocessors
-#define EM_DSPIC30F 118 // Microchip Technology dsPIC30F Digital Signal Controller
-#define EM_CE 119 // Freescale Communication Engine RISC core
-#define EM_M32C 120 // Renesas M32C series microprocessors
-#define EM_res121 121 // Reserved
-#define EM_res122 122 // Reserved
-#define EM_res123 123 // Reserved
-#define EM_res124 124 // Reserved
-#define EM_res125 125 // Reserved
-#define EM_res126 126 // Reserved
-#define EM_res127 127 // Reserved
-#define EM_res128 128 // Reserved
-#define EM_res129 129 // Reserved
-#define EM_res130 130 // Reserved
-#define EM_TSK3000 131 // Altium TSK3000 core
-#define EM_RS08 132 // Freescale RS08 embedded processor
-#define EM_res133 133 // Reserved
-#define EM_ECOG2 134 // Cyan Technology eCOG2 microprocessor
-#define EM_SCORE 135 // Sunplus Score
-#define EM_SCORE7 135 // Sunplus S+core7 RISC processor
-#define EM_DSP24 136 // New Japan Radio (NJR) 24-bit DSP Processor
-#define EM_VIDEOCORE3 137 // Broadcom VideoCore III processor
-#define EM_LATTICEMICO32 138 // RISC processor for Lattice FPGA architecture
-#define EM_SE_C17 139 // Seiko Epson C17 family
-#define EM_TI_C6000 140 // Texas Instruments TMS320C6000 DSP family
-#define EM_TI_C2000 141 // Texas Instruments TMS320C2000 DSP family
-#define EM_TI_C5500 142 // Texas Instruments TMS320C55x DSP family
-#define EM_res143 143 // Reserved
-#define EM_res144 144 // Reserved
-#define EM_res145 145 // Reserved
-#define EM_res146 146 // Reserved
-#define EM_res147 147 // Reserved
-#define EM_res148 148 // Reserved
-#define EM_res149 149 // Reserved
-#define EM_res150 150 // Reserved
-#define EM_res151 151 // Reserved
-#define EM_res152 152 // Reserved
-#define EM_res153 153 // Reserved
-#define EM_res154 154 // Reserved
-#define EM_res155 155 // Reserved
-#define EM_res156 156 // Reserved
-#define EM_res157 157 // Reserved
-#define EM_res158 158 // Reserved
-#define EM_res159 159 // Reserved
-#define EM_MMDSP_PLUS 160 // STMicroelectronics 64bit VLIW Data Signal Processor
-#define EM_CYPRESS_M8C 161 // Cypress M8C microprocessor
-#define EM_R32C 162 // Renesas R32C series microprocessors
-#define EM_TRIMEDIA 163 // NXP Semiconductors TriMedia architecture family
-#define EM_QDSP6 164 // QUALCOMM DSP6 Processor
-#define EM_8051 165 // Intel 8051 and variants
-#define EM_STXP7X 166 // STMicroelectronics STxP7x family
-#define EM_NDS32 167 // Andes Technology compact code size embedded RISC processor family
-#define EM_ECOG1 168 // Cyan Technology eCOG1X family
-#define EM_ECOG1X 168 // Cyan Technology eCOG1X family
-#define EM_MAXQ30 169 // Dallas Semiconductor MAXQ30 Core Micro-controllers
-#define EM_XIMO16 170 // New Japan Radio (NJR) 16-bit DSP Processor
-#define EM_MANIK 171 // M2000 Reconfigurable RISC Microprocessor
-#define EM_CRAYNV2 172 // Cray Inc. NV2 vector architecture
-#define EM_RX 173 // Renesas RX family
-#define EM_METAG 174 // Imagination Technologies META processor architecture
-#define EM_MCST_ELBRUS 175 // MCST Elbrus general purpose hardware architecture
-#define EM_ECOG16 176 // Cyan Technology eCOG16 family
-#define EM_CR16 177 // National Semiconductor CompactRISC 16-bit processor
-#define EM_ETPU 178 // Freescale Extended Time Processing Unit
-#define EM_SLE9X 179 // Infineon Technologies SLE9X core
-#define EM_L1OM 180 // Intel L1OM
-#define EM_INTEL181 181 // Reserved by Intel
-#define EM_INTEL182 182 // Reserved by Intel
-#define EM_res183 183 // Reserved by ARM
-#define EM_res184 184 // Reserved by ARM
-#define EM_AVR32 185 // Atmel Corporation 32-bit microprocessor family
-#define EM_STM8 186 // STMicroeletronics STM8 8-bit microcontroller
-#define EM_TILE64 187 // Tilera TILE64 multicore architecture family
-#define EM_TILEPRO 188 // Tilera TILEPro multicore architecture family
-#define EM_MICROBLAZE 189 // Xilinx MicroBlaze 32-bit RISC soft processor core
-#define EM_CUDA 190 // NVIDIA CUDA architecture
-#define EM_TILEGX 191 // Tilera TILE-Gx multicore architecture family
-#define EM_CLOUDSHIELD 192 // CloudShield architecture family
-#define EM_COREA_1ST 193 // KIPO-KAIST Core-A 1st generation processor family
-#define EM_COREA_2ND 194 // KIPO-KAIST Core-A 2nd generation processor family
-#define EM_ARC_COMPACT2 195 // Synopsys ARCompact V2
-#define EM_OPEN8 196 // Open8 8-bit RISC soft processor core
-#define EM_RL78 197 // Renesas RL78 family
-#define EM_VIDEOCORE5 198 // Broadcom VideoCore V processor
-#define EM_78KOR 199 // Renesas 78KOR family
-#define EM_56800EX 200 // Freescale 56800EX Digital Signal Controller (DSC)
-#define EM_BA1 201 // Beyond BA1 CPU architecture
-#define EM_BA2 202 // Beyond BA2 CPU architecture
-#define EM_XCORE 203 // XMOS xCORE processor family
-#define EM_MCHP_PIC 204 // Microchip 8-bit PIC(r) family
-#define EM_INTEL205 205 // Reserved by Intel
-#define EM_INTEL206 206 // Reserved by Intel
-#define EM_INTEL207 207 // Reserved by Intel
-#define EM_INTEL208 208 // Reserved by Intel
-#define EM_INTEL209 209 // Reserved by Intel
-#define EM_KM32 210 // KM211 KM32 32-bit processor
-#define EM_KMX32 211 // KM211 KMX32 32-bit processor
-#define EM_KMX16 212 // KM211 KMX16 16-bit processor
-#define EM_KMX8 213 // KM211 KMX8 8-bit processor
-#define EM_KVARC 214 // KM211 KVARC processor
-#define EM_CDP 215 // Paneve CDP architecture family
-#define EM_COGE 216 // Cognitive Smart Memory Processor
-#define EM_COOL 217 // iCelero CoolEngine
-#define EM_NORC 218 // Nanoradio Optimized RISC
-#define EM_CSR_KALIMBA 219 // CSR Kalimba architecture family
-#define EM_Z80 220 // Zilog Z80
-#define EM_VISIUM 221 // Controls and Data Services VISIUMcore processor
-#define EM_FT32 222 // FTDI Chip FT32 high performance 32-bit RISC architecture
-#define EM_MOXIE 223 // Moxie processor family
-#define EM_AMDGPU 224 // AMD GPU architecture
-#define EM_RISCV 243 // RISC-V
-#define EM_LANAI 244 // Lanai processor
-#define EM_CEVA 245 // CEVA Processor Architecture Family
-#define EM_CEVA_X2 246 // CEVA X2 Processor Family
-#define EM_BPF 247 // Linux BPF – in-kernel virtual machine
-
-// File version
-#define EV_NONE 0
-#define EV_CURRENT 1
-
-// Identification index
-#define EI_MAG0 0
-#define EI_MAG1 1
-#define EI_MAG2 2
-#define EI_MAG3 3
-#define EI_CLASS 4
-#define EI_DATA 5
-#define EI_VERSION 6
-#define EI_OSABI 7
-#define EI_ABIVERSION 8
-#define EI_PAD 9
-#define EI_NIDENT 16
-
-// Magic number
-#define ELFMAG0 0x7F
-#define ELFMAG1 'E'
-#define ELFMAG2 'L'
-#define ELFMAG3 'F'
-
-// File class
-#define ELFCLASSNONE 0
-#define ELFCLASS32 1
-#define ELFCLASS64 2
-
-// Encoding
-#define ELFDATANONE 0
-#define ELFDATA2LSB 1
-#define ELFDATA2MSB 2
-
-// OS extensions
-#define ELFOSABI_NONE 0 // No extensions or unspecified
-#define ELFOSABI_HPUX 1 // Hewlett-Packard HP-UX
-#define ELFOSABI_NETBSD 2 // NetBSD
-#define ELFOSABI_LINUX 3 // Linux
-#define ELFOSABI_SOLARIS 6 // Sun Solaris
-#define ELFOSABI_AIX 7 // AIX
-#define ELFOSABI_IRIX 8 // IRIX
-#define ELFOSABI_FREEBSD 9 // FreeBSD
-#define ELFOSABI_TRU64 10 // Compaq TRU64 UNIX
-#define ELFOSABI_MODESTO 11 // Novell Modesto
-#define ELFOSABI_OPENBSD 12 // Open BSD
-#define ELFOSABI_OPENVMS 13 // Open VMS
-#define ELFOSABI_NSK 14 // Hewlett-Packard Non-Stop Kernel
-#define ELFOSABI_AROS 15 // Amiga Research OS
-#define ELFOSABI_FENIXOS 16 // The FenixOS highly scalable multi-core OS
-// 64-255 Architecture-specific value range
-#define ELFOSABI_AMDGPU_HSA 64 // AMDGPU OS for HSA compatible compute
- // kernels.
-#define ELFOSABI_AMDGPU_PAL 65 // AMDGPU OS for AMD PAL compatible graphics
- // shaders and compute kernels.
-#define ELFOSABI_AMDGPU_MESA3D 66 // AMDGPU OS for Mesa3D compatible graphics
- // shaders and compute kernels.
-
-
-// AMDGPU specific e_flags
-#define EF_AMDGPU_MACH 0x0ff // AMDGPU processor selection mask.
-#define EF_AMDGPU_XNACK 0x100 // Indicates if the XNACK target feature is
- // enabled for all code contained in the ELF.
-// AMDGPU processors
-#define EF_AMDGPU_MACH_NONE 0x000 // Unspecified processor.
-#define EF_AMDGPU_MACH_R600_R600 0x001
-#define EF_AMDGPU_MACH_R600_R630 0x002
-#define EF_AMDGPU_MACH_R600_RS880 0x003
-#define EF_AMDGPU_MACH_R600_RV670 0x004
-#define EF_AMDGPU_MACH_R600_RV710 0x005
-#define EF_AMDGPU_MACH_R600_RV730 0x006
-#define EF_AMDGPU_MACH_R600_RV770 0x007
-#define EF_AMDGPU_MACH_R600_CEDAR 0x008
-#define EF_AMDGPU_MACH_R600_CYPRESS 0x009
-#define EF_AMDGPU_MACH_R600_JUNIPER 0x00a
-#define EF_AMDGPU_MACH_R600_REDWOOD 0x00b
-#define EF_AMDGPU_MACH_R600_SUMO 0x00c
-#define EF_AMDGPU_MACH_R600_BARTS 0x00d
-#define EF_AMDGPU_MACH_R600_CAICOS 0x00e
-#define EF_AMDGPU_MACH_R600_CAYMAN 0x00f
-#define EF_AMDGPU_MACH_R600_TURKS 0x010
-#define EF_AMDGPU_MACH_R600_RESERVED_FIRST 0x011
-#define EF_AMDGPU_MACH_R600_RESERVED_LAST 0x01f
-#define EF_AMDGPU_MACH_R600_FIRST EF_AMDGPU_MACH_R600_R600
-#define EF_AMDGPU_MACH_R600_LAST EF_AMDGPU_MACH_R600_TURKS
-#define EF_AMDGPU_MACH_AMDGCN_GFX600 0x020
-#define EF_AMDGPU_MACH_AMDGCN_GFX601 0x021
-#define EF_AMDGPU_MACH_AMDGCN_GFX700 0x022
-#define EF_AMDGPU_MACH_AMDGCN_GFX701 0x023
-#define EF_AMDGPU_MACH_AMDGCN_GFX702 0x024
-#define EF_AMDGPU_MACH_AMDGCN_GFX703 0x025
-#define EF_AMDGPU_MACH_AMDGCN_GFX704 0x026
-#define EF_AMDGPU_MACH_AMDGCN_GFX801 0x028
-#define EF_AMDGPU_MACH_AMDGCN_GFX802 0x029
-#define EF_AMDGPU_MACH_AMDGCN_GFX803 0x02a
-#define EF_AMDGPU_MACH_AMDGCN_GFX810 0x02b
-#define EF_AMDGPU_MACH_AMDGCN_GFX900 0x02c
-#define EF_AMDGPU_MACH_AMDGCN_GFX902 0x02d
-#define EF_AMDGPU_MACH_AMDGCN_GFX904 0x02e
-#define EF_AMDGPU_MACH_AMDGCN_GFX906 0x02f
-#define EF_AMDGPU_MACH_AMDGCN_RESERVED0 0x027
-#define EF_AMDGPU_MACH_AMDGCN_RESERVED1 0x030
-#define EF_AMDGPU_MACH_AMDGCN_FIRST EF_AMDGPU_MACH_AMDGCN_GFX600
-#define EF_AMDGPU_MACH_AMDGCN_LAST EF_AMDGPU_MACH_AMDGCN_GFX906
-
-/////////////////////
-// Sections constants
-
-// Section indexes
-#define SHN_UNDEF 0
-#define SHN_LORESERVE 0xFF00
-#define SHN_LOPROC 0xFF00
-#define SHN_HIPROC 0xFF1F
-#define SHN_LOOS 0xFF20
-#define SHN_HIOS 0xFF3F
-#define SHN_ABS 0xFFF1
-#define SHN_COMMON 0xFFF2
-#define SHN_XINDEX 0xFFFF
-#define SHN_HIRESERVE 0xFFFF
-
-// Section types
-#define SHT_NULL 0
-#define SHT_PROGBITS 1
-#define SHT_SYMTAB 2
-#define SHT_STRTAB 3
-#define SHT_RELA 4
-#define SHT_HASH 5
-#define SHT_DYNAMIC 6
-#define SHT_NOTE 7
-#define SHT_NOBITS 8
-#define SHT_REL 9
-#define SHT_SHLIB 10
-#define SHT_DYNSYM 11
-#define SHT_INIT_ARRAY 14
-#define SHT_FINI_ARRAY 15
-#define SHT_PREINIT_ARRAY 16
-#define SHT_GROUP 17
-#define SHT_SYMTAB_SHNDX 18
-#define SHT_LOOS 0x60000000
-#define SHT_HIOS 0x6fffffff
-#define SHT_LOPROC 0x70000000
-#define SHT_HIPROC 0x7FFFFFFF
-#define SHT_LOUSER 0x80000000
-#define SHT_HIUSER 0xFFFFFFFF
-
-// Section attribute flags
-#define SHF_WRITE 0x1
-#define SHF_ALLOC 0x2
-#define SHF_EXECINSTR 0x4
-#define SHF_MERGE 0x10
-#define SHF_STRINGS 0x20
-#define SHF_INFO_LINK 0x40
-#define SHF_LINK_ORDER 0x80
-#define SHF_OS_NONCONFORMING 0x100
-#define SHF_GROUP 0x200
-#define SHF_TLS 0x400
-#define SHF_MASKOS 0x0ff00000
-#define SHF_MASKPROC 0xF0000000
-
-// Section group flags
-#define GRP_COMDAT 0x1
-#define GRP_MASKOS 0x0ff00000
-#define GRP_MASKPROC 0xf0000000
-
-// Symbol binding
-#define STB_LOCAL 0
-#define STB_GLOBAL 1
-#define STB_WEAK 2
-#define STB_LOOS 10
-#define STB_HIOS 12
-#define STB_MULTIDEF 13
-#define STB_LOPROC 13
-#define STB_HIPROC 15
-
-// Note types
-#define NT_AMDGPU_METADATA 1
-#define NT_AMD_AMDGPU_HSA_METADATA 10
-#define NT_AMD_AMDGPU_ISA 11
-#define NT_AMD_AMDGPU_PAL_METADATA 12
-
-// Symbol types
-#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_LOOS 10
-#define STT_AMDGPU_HSA_KERNEL 10
-#define STT_HIOS 12
-#define STT_LOPROC 13
-#define STT_HIPROC 15
-
-// Symbol visibility
-#define STV_DEFAULT 0
-#define STV_INTERNAL 1
-#define STV_HIDDEN 2
-#define STV_PROTECTED 3
-
-// Undefined name
-#define STN_UNDEF 0
-
-// Relocation types
-#define R_386_NONE 0
-#define R_X86_64_NONE 0
-#define R_AMDGPU_NONE 0
-#define R_386_32 1
-#define R_X86_64_64 1
-#define R_AMDGPU_ABS32_LO 1
-#define R_386_PC32 2
-#define R_X86_64_PC32 2
-#define R_AMDGPU_ABS32_HI 2
-#define R_386_GOT32 3
-#define R_X86_64_GOT32 3
-#define R_AMDGPU_ABS64 3
-#define R_386_PLT32 4
-#define R_X86_64_PLT32 4
-#define R_AMDGPU_REL32 4
-#define R_386_COPY 5
-#define R_X86_64_COPY 5
-#define R_AMDGPU_REL64 5
-#define R_386_GLOB_DAT 6
-#define R_X86_64_GLOB_DAT 6
-#define R_AMDGPU_ABS32 6
-#define R_386_JMP_SLOT 7
-#define R_X86_64_JUMP_SLOT 7
-#define R_AMDGPU_GOTPCREL 7
-#define R_386_RELATIVE 8
-#define R_X86_64_RELATIVE 8
-#define R_AMDGPU_GOTPCREL32_LO 8
-#define R_386_GOTOFF 9
-#define R_X86_64_GOTPCREL 9
-#define R_AMDGPU_GOTPCREL32_HI 9
-#define R_386_GOTPC 10
-#define R_X86_64_32 10
-#define R_AMDGPU_REL32_LO 10
-#define R_386_32PLT 11
-#define R_X86_64_32S 11
-#define R_AMDGPU_REL32_HI 11
-#define R_X86_64_16 12
-#define R_X86_64_PC16 13
-#define R_AMDGPU_RELATIVE64 13
-#define R_386_TLS_TPOFF 14
-#define R_X86_64_8 14
-#define R_386_TLS_IE 15
-#define R_X86_64_PC8 15
-#define R_386_TLS_GOTIE 16
-#define R_X86_64_DTPMOD64 16
-#define R_386_TLS_LE 17
-#define R_X86_64_DTPOFF64 17
-#define R_386_TLS_GD 18
-#define R_X86_64_TPOFF64 18
-#define R_386_TLS_LDM 19
-#define R_X86_64_TLSGD 19
-#define R_386_16 20
-#define R_X86_64_TLSLD 20
-#define R_386_PC16 21
-#define R_X86_64_DTPOFF32 21
-#define R_386_8 22
-#define R_X86_64_GOTTPOFF 22
-#define R_386_PC8 23
-#define R_X86_64_TPOFF32 23
-#define R_386_TLS_GD_32 24
-#define R_X86_64_PC64 24
-#define R_386_TLS_GD_PUSH 25
-#define R_X86_64_GOTOFF64 25
-#define R_386_TLS_GD_CALL 26
-#define R_X86_64_GOTPC32 26
-#define R_386_TLS_GD_POP 27
-#define R_X86_64_GOT64 27
-#define R_386_TLS_LDM_32 28
-#define R_X86_64_GOTPCREL64 28
-#define R_386_TLS_LDM_PUSH 29
-#define R_X86_64_GOTPC64 29
-#define R_386_TLS_LDM_CALL 30
-#define R_X86_64_GOTPLT64 30
-#define R_386_TLS_LDM_POP 31
-#define R_X86_64_PLTOFF64 31
-#define R_386_TLS_LDO_32 32
-#define R_386_TLS_IE_32 33
-#define R_386_TLS_LE_32 34
-#define R_X86_64_GOTPC32_TLSDESC 34
-#define R_386_TLS_DTPMOD32 35
-#define R_X86_64_TLSDESC_CALL 35
-#define R_386_TLS_DTPOFF32 36
-#define R_X86_64_TLSDESC 36
-#define R_386_TLS_TPOFF32 37
-#define R_X86_64_IRELATIVE 37
-#define R_386_SIZE32 38
-#define R_386_TLS_GOTDESC 39
-#define R_386_TLS_DESC_CALL 40
-#define R_386_TLS_DESC 41
-#define R_386_IRELATIVE 42
-#define R_386_GOT32X 43
-#define R_X86_64_GNU_VTINHERIT 250
-#define R_X86_64_GNU_VTENTRY 251
-
-// Segment types
-#define PT_NULL 0
-#define PT_LOAD 1
-#define PT_DYNAMIC 2
-#define PT_INTERP 3
-#define PT_NOTE 4
-#define PT_SHLIB 5
-#define PT_PHDR 6
-#define PT_TLS 7
-#define PT_LOOS 0x60000000
-#define PT_HIOS 0x6fffffff
-#define PT_LOPROC 0x70000000
-#define PT_HIPROC 0x7FFFFFFF
-
-// Segment flags
-#define PF_X 1 // Execute
-#define PF_W 2 // Write
-#define PF_R 4 // Read
-#define PF_MASKOS 0x0ff00000 // Unspecified
-#define PF_MASKPROC 0xf0000000 // Unspecified
-
-// Dynamic Array Tags
-#define DT_NULL 0
-#define DT_NEEDED 1
-#define DT_PLTRELSZ 2
-#define DT_PLTGOT 3
-#define DT_HASH 4
-#define DT_STRTAB 5
-#define DT_SYMTAB 6
-#define DT_RELA 7
-#define DT_RELASZ 8
-#define DT_RELAENT 9
-#define DT_STRSZ 10
-#define DT_SYMENT 11
-#define DT_INIT 12
-#define DT_FINI 13
-#define DT_SONAME 14
-#define DT_RPATH 15
-#define DT_SYMBOLIC 16
-#define DT_REL 17
-#define DT_RELSZ 18
-#define DT_RELENT 19
-#define DT_PLTREL 20
-#define DT_DEBUG 21
-#define DT_TEXTREL 22
-#define DT_JMPREL 23
-#define DT_BIND_NOW 24
-#define DT_INIT_ARRAY 25
-#define DT_FINI_ARRAY 26
-#define DT_INIT_ARRAYSZ 27
-#define DT_FINI_ARRAYSZ 28
-#define DT_RUNPATH 29
-#define DT_FLAGS 30
-#define DT_ENCODING 32
-#define DT_PREINIT_ARRAY 32
-#define DT_PREINIT_ARRAYSZ 33
-#define DT_MAXPOSTAGS 34
-#define DT_LOOS 0x6000000D
-#define DT_HIOS 0x6ffff000
-#define DT_LOPROC 0x70000000
-#define DT_HIPROC 0x7FFFFFFF
-
-// DT_FLAGS values
-#define DF_ORIGIN 0x1
-#define DF_SYMBOLIC 0x2
-#define DF_TEXTREL 0x4
-#define DF_BIND_NOW 0x8
-#define DF_STATIC_TLS 0x10
-
-
-// ELF file header
-struct Elf32_Ehdr {
- unsigned char e_ident[EI_NIDENT];
- Elf_Half e_type;
- Elf_Half e_machine;
- Elf_Word e_version;
- Elf32_Addr e_entry;
- Elf32_Off e_phoff;
- Elf32_Off e_shoff;
- Elf_Word e_flags;
- Elf_Half e_ehsize;
- Elf_Half e_phentsize;
- Elf_Half e_phnum;
- Elf_Half e_shentsize;
- Elf_Half e_shnum;
- Elf_Half e_shstrndx;
-};
-
-struct Elf64_Ehdr {
- unsigned char e_ident[EI_NIDENT];
- Elf_Half e_type;
- Elf_Half e_machine;
- Elf_Word e_version;
- Elf64_Addr e_entry;
- Elf64_Off e_phoff;
- Elf64_Off e_shoff;
- Elf_Word e_flags;
- Elf_Half e_ehsize;
- Elf_Half e_phentsize;
- Elf_Half e_phnum;
- Elf_Half e_shentsize;
- Elf_Half e_shnum;
- Elf_Half e_shstrndx;
-};
-
-
-// Section header
-struct Elf32_Shdr {
- Elf_Word sh_name;
- Elf_Word sh_type;
- Elf_Word sh_flags;
- Elf32_Addr sh_addr;
- Elf32_Off sh_offset;
- Elf_Word sh_size;
- Elf_Word sh_link;
- Elf_Word sh_info;
- Elf_Word sh_addralign;
- Elf_Word sh_entsize;
-};
-
-struct Elf64_Shdr {
- Elf_Word sh_name;
- Elf_Word sh_type;
- Elf_Xword sh_flags;
- Elf64_Addr sh_addr;
- Elf64_Off sh_offset;
- Elf_Xword sh_size;
- Elf_Word sh_link;
- Elf_Word sh_info;
- Elf_Xword sh_addralign;
- Elf_Xword sh_entsize;
-};
-
-
-// Segment header
-struct Elf32_Phdr {
- Elf_Word p_type;
- Elf32_Off p_offset;
- Elf32_Addr p_vaddr;
- Elf32_Addr p_paddr;
- Elf_Word p_filesz;
- Elf_Word p_memsz;
- Elf_Word p_flags;
- Elf_Word p_align;
-};
-
-struct Elf64_Phdr {
- Elf_Word p_type;
- Elf_Word p_flags;
- Elf64_Off p_offset;
- Elf64_Addr p_vaddr;
- Elf64_Addr p_paddr;
- Elf_Xword p_filesz;
- Elf_Xword p_memsz;
- Elf_Xword p_align;
-};
-
-
-// Symbol table entry
-struct Elf32_Sym {
- Elf_Word st_name;
- Elf32_Addr st_value;
- Elf_Word st_size;
- unsigned char st_info;
- unsigned char st_other;
- Elf_Half st_shndx;
-};
-
-struct Elf64_Sym {
- Elf_Word st_name;
- unsigned char st_info;
- unsigned char st_other;
- Elf_Half st_shndx;
- Elf64_Addr st_value;
- Elf_Xword st_size;
-};
-
-
-#define ELF_ST_BIND(i) ((i)>>4)
-#define ELF_ST_TYPE(i) ((i)&0xf)
-#define ELF_ST_INFO(b,t) (((b)<<4)+((t)&0xf))
-
-#define ELF_ST_VISIBILITY(o) ((o)&0x3)
-
-
-// Relocation entries
-struct Elf32_Rel {
- Elf32_Addr r_offset;
- Elf_Word r_info;
-};
-
-struct Elf32_Rela {
- Elf32_Addr r_offset;
- Elf_Word r_info;
- Elf_Sword r_addend;
-};
-
-struct Elf64_Rel {
- Elf64_Addr r_offset;
- Elf_Xword r_info;
-};
-
-struct Elf64_Rela {
- Elf64_Addr r_offset;
- Elf_Xword r_info;
- Elf_Sxword r_addend;
-};
-
-
-#define ELF32_R_SYM(i) ((i)>>8)
-#define ELF32_R_TYPE(i) ((unsigned char)(i))
-#define ELF32_R_INFO(s,t) (((s)<<8 )+(unsigned char)(t))
-
-#define ELF64_R_SYM(i) ((i)>>32)
-#define ELF64_R_TYPE(i) ((i)&0xffffffffL)
-#define ELF64_R_INFO(s,t) ((((int64_t)(s))<<32)+((t)&0xffffffffL))
-
-// Dynamic structure
-struct Elf32_Dyn {
- Elf_Sword d_tag;
- union {
- Elf_Word d_val;
- Elf32_Addr d_ptr;
- } d_un;
-};
-
-struct Elf64_Dyn {
- Elf_Sxword d_tag;
- union {
- Elf_Xword d_val;
- Elf64_Addr d_ptr;
- } d_un;
-};
-
-} // namespace ELFIO
-
-#endif // ELFTYPES_H
diff --git a/tools/ZAPD/lib/elfio/elfio/elfio.hpp b/tools/ZAPD/lib/elfio/elfio/elfio.hpp
deleted file mode 100644
index f997b5dfc..000000000
--- a/tools/ZAPD/lib/elfio/elfio/elfio.hpp
+++ /dev/null
@@ -1,955 +0,0 @@
-/*
-Copyright (C) 2001-2015 by Serge Lamikhov-Center
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#ifndef ELFIO_HPP
-#define ELFIO_HPP
-
-#ifdef _MSC_VER
-#pragma warning ( push )
-#pragma warning(disable:4996)
-#pragma warning(disable:4355)
-#pragma warning(disable:4244)
-#endif
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-#define ELFIO_HEADER_ACCESS_GET( TYPE, FNAME ) \
-TYPE \
-get_##FNAME() const \
-{ \
- return header? header->get_##FNAME() : 0; \
-}
-
-#define ELFIO_HEADER_ACCESS_GET_SET( TYPE, FNAME ) \
-TYPE \
-get_##FNAME() const \
-{ \
- return header? header->get_##FNAME() : 0; \
-} \
-void \
-set_##FNAME( TYPE val ) \
-{ \
- if (header) { \
- header->set_##FNAME( val ); \
- } \
-} \
-
-namespace ELFIO {
-
-//------------------------------------------------------------------------------
-class elfio
-{
- public:
-//------------------------------------------------------------------------------
- elfio() : sections( this ), segments( this )
- {
- header = 0;
- current_file_pos = 0;
- create( ELFCLASS32, ELFDATA2LSB );
- }
-
-//------------------------------------------------------------------------------
- ~elfio()
- {
- clean();
- }
-
-//------------------------------------------------------------------------------
- void create( unsigned char file_class, unsigned char encoding )
- {
- clean();
- convertor.setup( encoding );
- header = create_header( file_class, encoding );
- create_mandatory_sections();
- }
-
-//------------------------------------------------------------------------------
- bool load( const std::string& file_name )
- {
- std::ifstream stream;
- stream.open( file_name.c_str(), std::ios::in | std::ios::binary );
- if ( !stream ) {
- return false;
- }
-
- return load(stream);
- }
-
-//------------------------------------------------------------------------------
- bool load( std::istream &stream )
- {
- clean();
-
- unsigned char e_ident[EI_NIDENT];
- // Read ELF file signature
- stream.read( reinterpret_cast( &e_ident ), sizeof( e_ident ) );
-
- // Is it ELF file?
- if ( stream.gcount() != sizeof( e_ident ) ||
- e_ident[EI_MAG0] != ELFMAG0 ||
- e_ident[EI_MAG1] != ELFMAG1 ||
- e_ident[EI_MAG2] != ELFMAG2 ||
- e_ident[EI_MAG3] != ELFMAG3 ) {
- return false;
- }
-
- if ( ( e_ident[EI_CLASS] != ELFCLASS64 ) &&
- ( e_ident[EI_CLASS] != ELFCLASS32 )) {
- return false;
- }
-
- convertor.setup( e_ident[EI_DATA] );
- header = create_header( e_ident[EI_CLASS], e_ident[EI_DATA] );
- if ( 0 == header ) {
- return false;
- }
- if ( !header->load( stream ) ) {
- return false;
- }
-
- load_sections( stream );
- bool is_still_good = load_segments( stream );
- return is_still_good;
- }
-
-//------------------------------------------------------------------------------
- bool save( const std::string& file_name )
- {
- std::ofstream stream;
- stream.open( file_name.c_str(), std::ios::out | std::ios::binary );
- if ( !stream ) {
- return false;
- }
-
- return save(stream);
- }
-
-//------------------------------------------------------------------------------
- bool save( std::ostream &stream )
- {
- if ( !stream || !header) {
- return false;
- }
-
- bool is_still_good = true;
- // Define layout specific header fields
- // The position of the segment table is fixed after the header.
- // The position of the section table is variable and needs to be fixed
- // before saving.
- header->set_segments_num( segments.size() );
- header->set_segments_offset( segments.size() ? header->get_header_size() : 0 );
- header->set_sections_num( sections.size() );
- header->set_sections_offset( 0 );
-
- // Layout the first section right after the segment table
- current_file_pos = header->get_header_size() +
- header->get_segment_entry_size() * header->get_segments_num();
-
- calc_segment_alignment();
-
- is_still_good = layout_segments_and_their_sections();
- is_still_good = is_still_good && layout_sections_without_segments();
- is_still_good = is_still_good && layout_section_table();
-
- is_still_good = is_still_good && save_header( stream );
- is_still_good = is_still_good && save_sections( stream );
- is_still_good = is_still_good && save_segments( stream );
-
- return is_still_good;
- }
-
-//------------------------------------------------------------------------------
- // ELF header access functions
- ELFIO_HEADER_ACCESS_GET( unsigned char, class );
- ELFIO_HEADER_ACCESS_GET( unsigned char, elf_version );
- ELFIO_HEADER_ACCESS_GET( unsigned char, encoding );
- ELFIO_HEADER_ACCESS_GET( Elf_Word, version );
- ELFIO_HEADER_ACCESS_GET( Elf_Half, header_size );
- ELFIO_HEADER_ACCESS_GET( Elf_Half, section_entry_size );
- ELFIO_HEADER_ACCESS_GET( Elf_Half, segment_entry_size );
-
- ELFIO_HEADER_ACCESS_GET_SET( unsigned char, os_abi );
- ELFIO_HEADER_ACCESS_GET_SET( unsigned char, abi_version );
- ELFIO_HEADER_ACCESS_GET_SET( Elf_Half, type );
- ELFIO_HEADER_ACCESS_GET_SET( Elf_Half, machine );
- ELFIO_HEADER_ACCESS_GET_SET( Elf_Word, flags );
- ELFIO_HEADER_ACCESS_GET_SET( Elf64_Addr, entry );
- ELFIO_HEADER_ACCESS_GET_SET( Elf64_Off, sections_offset );
- ELFIO_HEADER_ACCESS_GET_SET( Elf64_Off, segments_offset );
- ELFIO_HEADER_ACCESS_GET_SET( Elf_Half, section_name_str_index );
-
-//------------------------------------------------------------------------------
- const endianess_convertor& get_convertor() const
- {
- return convertor;
- }
-
-//------------------------------------------------------------------------------
- Elf_Xword get_default_entry_size( Elf_Word section_type ) const
- {
- switch( section_type ) {
- case SHT_RELA:
- if ( header->get_class() == ELFCLASS64 ) {
- return sizeof( Elf64_Rela );
- }
- else {
- return sizeof( Elf32_Rela );
- }
- case SHT_REL:
- if ( header->get_class() == ELFCLASS64 ) {
- return sizeof( Elf64_Rel );
- }
- else {
- return sizeof( Elf32_Rel );
- }
- case SHT_SYMTAB:
- if ( header->get_class() == ELFCLASS64 ) {
- return sizeof( Elf64_Sym );
- }
- else {
- return sizeof( Elf32_Sym );
- }
- case SHT_DYNAMIC:
- if ( header->get_class() == ELFCLASS64 ) {
- return sizeof( Elf64_Dyn );
- }
- else {
- return sizeof( Elf32_Dyn );
- }
- default:
- return 0;
- }
- }
-
-//------------------------------------------------------------------------------
- private:
- bool is_offset_in_section( Elf64_Off offset, const section* sec ) const {
- return offset >= sec->get_offset() && offset < sec->get_offset()+sec->get_size();
- }
-
-//------------------------------------------------------------------------------
- public:
-
- //! returns an empty string if no problems are detected,
- //! or a string containing an error message if problems are found
- std::string validate() const {
-
- // check for overlapping sections in the file
- for ( int i = 0; i < sections.size(); ++i) {
- for ( int j = i+1; j < sections.size(); ++j ) {
- const section* a = sections[i];
- const section* b = sections[j];
- if ( !(a->get_type() & SHT_NOBITS)
- && !(b->get_type() & SHT_NOBITS)
- && (a->get_size() > 0)
- && (b->get_size() > 0)
- && (a->get_offset() > 0)
- && (b->get_offset() > 0)) {
- if ( is_offset_in_section( a->get_offset(), b )
- || is_offset_in_section( a->get_offset()+a->get_size()-1, b )
- || is_offset_in_section( b->get_offset(), a )
- || is_offset_in_section( b->get_offset()+b->get_size()-1, a )) {
- return "Sections " + a->get_name() + " and " + b->get_name() + " overlap in file";
- }
- }
- }
- }
-
- // more checks to be added here...
-
- return "";
- }
-
-//------------------------------------------------------------------------------
- private:
-//------------------------------------------------------------------------------
- void clean()
- {
- delete header;
- header = 0;
-
- std::vector::const_iterator it;
- for ( it = sections_.begin(); it != sections_.end(); ++it ) {
- delete *it;
- }
- sections_.clear();
-
- std::vector::const_iterator it1;
- for ( it1 = segments_.begin(); it1 != segments_.end(); ++it1 ) {
- delete *it1;
- }
- segments_.clear();
- }
-
-//------------------------------------------------------------------------------
- elf_header* create_header( unsigned char file_class, unsigned char encoding )
- {
- elf_header* new_header = 0;
-
- if ( file_class == ELFCLASS64 ) {
- new_header = new elf_header_impl< Elf64_Ehdr >( &convertor,
- encoding );
- }
- else if ( file_class == ELFCLASS32 ) {
- new_header = new elf_header_impl< Elf32_Ehdr >( &convertor,
- encoding );
- }
- else {
- return 0;
- }
-
- return new_header;
- }
-
-//------------------------------------------------------------------------------
- section* create_section()
- {
- section* new_section;
- unsigned char file_class = get_class();
-
- if ( file_class == ELFCLASS64 ) {
- new_section = new section_impl( &convertor );
- }
- else if ( file_class == ELFCLASS32 ) {
- new_section = new section_impl( &convertor );
- }
- else {
- return 0;
- }
-
- new_section->set_index( (Elf_Half)sections_.size() );
- sections_.push_back( new_section );
-
- return new_section;
- }
-
-
-//------------------------------------------------------------------------------
- segment* create_segment()
- {
- segment* new_segment;
- unsigned char file_class = header->get_class();
-
- if ( file_class == ELFCLASS64 ) {
- new_segment = new segment_impl( &convertor );
- }
- else if ( file_class == ELFCLASS32 ) {
- new_segment = new segment_impl( &convertor );
- }
- else {
- return 0;
- }
-
- new_segment->set_index( (Elf_Half)segments_.size() );
- segments_.push_back( new_segment );
-
- return new_segment;
- }
-
-//------------------------------------------------------------------------------
- void create_mandatory_sections()
- {
- // Create null section without calling to 'add_section' as no string
- // section containing section names exists yet
- section* sec0 = create_section();
- sec0->set_index( 0 );
- sec0->set_name( "" );
- sec0->set_name_string_offset( 0 );
-
- set_section_name_str_index( 1 );
- section* shstrtab = sections.add( ".shstrtab" );
- shstrtab->set_type( SHT_STRTAB );
- shstrtab->set_addr_align( 1 );
- }
-
-//------------------------------------------------------------------------------
- Elf_Half load_sections( std::istream& stream )
- {
- Elf_Half entry_size = header->get_section_entry_size();
- Elf_Half num = header->get_sections_num();
- Elf64_Off offset = header->get_sections_offset();
-
- for ( Elf_Half i = 0; i < num; ++i ) {
- section* sec = create_section();
- sec->load( stream, (std::streamoff)offset + i * entry_size );
- sec->set_index( i );
- // To mark that the section is not permitted to reassign address
- // during layout calculation
- sec->set_address( sec->get_address() );
- }
-
- Elf_Half shstrndx = get_section_name_str_index();
-
- if ( SHN_UNDEF != shstrndx ) {
- string_section_accessor str_reader( sections[shstrndx] );
- for ( Elf_Half i = 0; i < num; ++i ) {
- Elf_Word section_offset = sections[i]->get_name_string_offset();
- const char* p = str_reader.get_string( section_offset );
- if ( p != 0 ) {
- sections[i]->set_name( p );
- }
- }
- }
-
- return num;
- }
-
-//------------------------------------------------------------------------------
- //! Checks whether the addresses of the section entirely fall within the given segment.
- //! It doesn't matter if the addresses are memory addresses, or file offsets,
- //! they just need to be in the same address space
- bool is_sect_in_seg ( Elf64_Off sect_begin, Elf_Xword sect_size, Elf64_Off seg_begin, Elf64_Off seg_end ) {
- return seg_begin <= sect_begin
- && sect_begin + sect_size <= seg_end
- && sect_begin < seg_end; // this is important criteria when sect_size == 0
- // Example: seg_begin=10, seg_end=12 (-> covering the bytes 10 and 11)
- // sect_begin=12, sect_size=0 -> shall return false!
- }
-
-//------------------------------------------------------------------------------
- bool load_segments( std::istream& stream )
- {
- Elf_Half entry_size = header->get_segment_entry_size();
- Elf_Half num = header->get_segments_num();
- Elf64_Off offset = header->get_segments_offset();
-
- for ( Elf_Half i = 0; i < num; ++i ) {
- segment* seg;
- unsigned char file_class = header->get_class();
-
- if ( file_class == ELFCLASS64 ) {
- seg = new segment_impl( &convertor );
- }
- else if ( file_class == ELFCLASS32 ) {
- seg = new segment_impl( &convertor );
- }
- else {
- return false;
- }
-
- seg->load( stream, (std::streamoff)offset + i * entry_size );
- seg->set_index( i );
-
- // Add sections to the segments (similar to readelfs algorithm)
- Elf64_Off segBaseOffset = seg->get_offset();
- Elf64_Off segEndOffset = segBaseOffset + seg->get_file_size();
- Elf64_Off segVBaseAddr = seg->get_virtual_address();
- Elf64_Off segVEndAddr = segVBaseAddr + seg->get_memory_size();
- for( Elf_Half j = 0; j < sections.size(); ++j ) {
- const section* psec = sections[j];
-
- // SHF_ALLOC sections are matched based on the virtual address
- // otherwise the file offset is matched
- if( psec->get_flags() & SHF_ALLOC
- ? is_sect_in_seg( psec->get_address(), psec->get_size(), segVBaseAddr, segVEndAddr )
- : is_sect_in_seg( psec->get_offset(), psec->get_size(), segBaseOffset, segEndOffset )) {
- // Alignment of segment shall not be updated, to preserve original value
- // It will be re-calculated on saving.
- seg->add_section_index( psec->get_index(), 0 );
- }
- }
-
- // Add section into the segments' container
- segments_.push_back( seg );
- }
-
- return true;
- }
-
-//------------------------------------------------------------------------------
- bool save_header( std::ostream& stream )
- {
- return header->save( stream );
- }
-
-//------------------------------------------------------------------------------
- bool save_sections( std::ostream& stream )
- {
- for ( unsigned int i = 0; i < sections_.size(); ++i ) {
- section *sec = sections_.at(i);
-
- std::streampos headerPosition =
- (std::streamoff)header->get_sections_offset() +
- header->get_section_entry_size() * sec->get_index();
-
- sec->save(stream,headerPosition,sec->get_offset());
- }
- return true;
- }
-
-//------------------------------------------------------------------------------
- bool save_segments( std::ostream& stream )
- {
- for ( unsigned int i = 0; i < segments_.size(); ++i ) {
- segment *seg = segments_.at(i);
-
- std::streampos headerPosition = header->get_segments_offset() +
- header->get_segment_entry_size()*seg->get_index();
-
- seg->save( stream, headerPosition, seg->get_offset() );
- }
- return true;
- }
-
-//------------------------------------------------------------------------------
- bool is_section_without_segment( unsigned int section_index )
- {
- bool found = false;
-
- for ( unsigned int j = 0; !found && ( j < segments.size() ); ++j ) {
- for ( unsigned int k = 0;
- !found && ( k < segments[j]->get_sections_num() );
- ++k ) {
- found = segments[j]->get_section_index_at( k ) == section_index;
- }
- }
-
- return !found;
- }
-
-//------------------------------------------------------------------------------
- bool is_subsequence_of( segment* seg1, segment* seg2 )
- {
- // Return 'true' if sections of seg1 are a subset of sections in seg2
- const std::vector& sections1 = seg1->get_sections();
- const std::vector& sections2 = seg2->get_sections();
-
- bool found = false;
- if ( sections1.size() < sections2.size() ) {
- found = std::includes( sections2.begin(), sections2.end(),
- sections1.begin(), sections1.end() );
- }
-
- return found;
- }
-
-//------------------------------------------------------------------------------
- std::vector get_ordered_segments( )
- {
- std::vector res;
- std::deque worklist;
-
- res.reserve(segments.size());
- std::copy( segments_.begin(), segments_.end(),
- std::back_inserter( worklist )) ;
-
- // Bring the segments which start at address 0 to the front
- size_t nextSlot = 0;
- for( size_t i = 0; i < worklist.size(); ++i ) {
- if( i != nextSlot && worklist[i]->is_offset_initialized()
- && worklist[i]->get_offset() == 0 ) {
- if (worklist[nextSlot]->get_offset() == 0) {
- ++nextSlot;
- }
- std::swap(worklist[i],worklist[nextSlot]);
- ++nextSlot;
- }
- }
-
- while ( !worklist.empty() ) {
- segment *seg = worklist.front();
- worklist.pop_front();
-
- size_t i = 0;
- for ( ; i < worklist.size(); ++i ) {
- if ( is_subsequence_of( seg, worklist[i] ) ) {
- break;
- }
- }
-
- if ( i < worklist.size() )
- worklist.push_back(seg);
- else
- res.push_back(seg);
- }
-
- return res;
- }
-
-
-//------------------------------------------------------------------------------
- bool layout_sections_without_segments( )
- {
- for ( unsigned int i = 0; i < sections_.size(); ++i ) {
- if ( is_section_without_segment( i ) ) {
- section *sec = sections_[i];
-
- Elf_Xword section_align = sec->get_addr_align();
- if ( section_align > 1 && current_file_pos % section_align != 0 ) {
- current_file_pos += section_align -
- current_file_pos % section_align;
- }
-
- if ( 0 != sec->get_index() )
- sec->set_offset(current_file_pos);
-
- if ( SHT_NOBITS != sec->get_type() &&
- SHT_NULL != sec->get_type() ) {
- current_file_pos += sec->get_size();
- }
- }
- }
-
- return true;
- }
-
-
-//------------------------------------------------------------------------------
- void calc_segment_alignment( )
- {
- for( std::vector::iterator s = segments_.begin(); s != segments_.end(); ++s ) {
- segment* seg = *s;
- for ( int i = 0; i < seg->get_sections_num(); ++i ) {
- section* sect = sections_[ seg->get_section_index_at(i) ];
- if ( sect->get_addr_align() > seg->get_align() ) {
- seg->set_align( sect->get_addr_align() );
- }
- }
- }
- }
-
-//------------------------------------------------------------------------------
- bool layout_segments_and_their_sections( )
- {
- std::vector worklist;
- std::vector section_generated(sections.size(),false);
-
- // Get segments in a order in where segments which contain a
- // sub sequence of other segments are located at the end
- worklist = get_ordered_segments();
-
- for ( unsigned int i = 0; i < worklist.size(); ++i ) {
- Elf_Xword segment_memory = 0;
- Elf_Xword segment_filesize = 0;
- Elf_Xword seg_start_pos = current_file_pos;
- segment* seg = worklist[i];
-
- // Special case: PHDR segment
- // This segment contains the program headers but no sections
- if ( seg->get_type() == PT_PHDR && seg->get_sections_num() == 0 ) {
- seg_start_pos = header->get_segments_offset();
- segment_memory = segment_filesize =
- header->get_segment_entry_size() * header->get_segments_num();
- }
- // Special case:
- // Segments which start with the NULL section and have further sections
- else if ( seg->get_sections_num() > 1
- && sections[seg->get_section_index_at( 0 )]->get_type() == SHT_NULL ) {
- seg_start_pos = 0;
- if ( seg->get_sections_num() ) {
- segment_memory = segment_filesize = current_file_pos;
- }
- }
- // New segments with not generated sections
- // have to be aligned
- else if ( seg->get_sections_num()
- && !section_generated[seg->get_section_index_at( 0 )] ) {
- Elf_Xword align = seg->get_align() > 0 ? seg->get_align() : 1;
- Elf64_Off cur_page_alignment = current_file_pos % align;
- Elf64_Off req_page_alignment = seg->get_virtual_address() % align;
- Elf64_Off error = req_page_alignment - cur_page_alignment;
-
- current_file_pos += ( seg->get_align() + error ) % align;
- seg_start_pos = current_file_pos;
- }
- else if ( seg->get_sections_num() ) {
- seg_start_pos = sections[seg->get_section_index_at( 0 )]->get_offset();
- }
-
- // Write segment's data
- for ( unsigned int j = 0; j < seg->get_sections_num(); ++j ) {
- Elf_Half index = seg->get_section_index_at( j );
-
- section* sec = sections[ index ];
-
- // The NULL section is always generated
- if ( SHT_NULL == sec->get_type()) {
- section_generated[index] = true;
- continue;
- }
-
- Elf_Xword secAlign = 0;
- // Fix up the alignment
- if ( !section_generated[index] && sec->is_address_initialized()
- && SHT_NOBITS != sec->get_type()
- && SHT_NULL != sec->get_type()
- && 0 != sec->get_size() ) {
- // Align the sections based on the virtual addresses
- // when possible (this is what matters for execution)
- Elf64_Off req_offset = sec->get_address() - seg->get_virtual_address();
- Elf64_Off cur_offset = current_file_pos - seg_start_pos;
- if ( req_offset < cur_offset) {
- // something has gone awfully wrong, abort!
- // secAlign would turn out negative, seeking backwards and overwriting previous data
- return false;
- }
- secAlign = req_offset - cur_offset;
- }
- else if (!section_generated[index] && !sec->is_address_initialized() ) {
- // If no address has been specified then only the section
- // alignment constraint has to be matched
- Elf_Xword align = sec->get_addr_align();
- if (align == 0) {
- align = 1;
- }
- Elf64_Off error = current_file_pos % align;
- secAlign = ( align - error ) % align;
- }
- else if (section_generated[index] ) {
- // Alignment for already generated sections
- secAlign = sec->get_offset() - seg_start_pos - segment_filesize;
- }
-
- // Determine the segment file and memory sizes
- // Special case .tbss section (NOBITS) in non TLS segment
- if ( (sec->get_flags() & SHF_ALLOC)
- && !( (sec->get_flags() & SHF_TLS) && (seg->get_type() != PT_TLS)
- && ( SHT_NOBITS == sec->get_type())) )
- segment_memory += sec->get_size() + secAlign;
- if ( SHT_NOBITS != sec->get_type() && SHT_NULL != sec->get_type() )
- segment_filesize += sec->get_size() + secAlign;
-
- // Nothing to be done when generating nested segments
- if(section_generated[index]) {
- continue;
- }
-
- current_file_pos += secAlign;
-
- // Set the section addresses when missing
- if ( !sec->is_address_initialized() )
- sec->set_address( seg->get_virtual_address()
- + current_file_pos - seg_start_pos);
-
- if ( 0 != sec->get_index() )
- sec->set_offset(current_file_pos);
-
- if ( SHT_NOBITS != sec->get_type() && SHT_NULL != sec->get_type() )
- current_file_pos += sec->get_size();
- section_generated[index] = true;
- }
-
- seg->set_file_size( segment_filesize );
-
- // If we already have a memory size from loading an elf file (value > 0),
- // it must not shrink!
- // Memory size may be bigger than file size and it is the loader's job to do something
- // with the surplus bytes in memory, like initializing them with a defined value.
- if ( seg->get_memory_size() < segment_memory ) {
- seg->set_memory_size( segment_memory );
- }
-
- seg->set_offset(seg_start_pos);
- }
-
- return true;
- }
-
-//------------------------------------------------------------------------------
- bool layout_section_table()
- {
- // Simply place the section table at the end for now
- Elf64_Off alignmentError = current_file_pos % 4;
- current_file_pos += ( 4 - alignmentError ) % 4;
- header->set_sections_offset(current_file_pos);
- return true;
- }
-
-
-//------------------------------------------------------------------------------
- public:
- friend class Sections;
- class Sections {
- public:
-//------------------------------------------------------------------------------
- Sections( elfio* parent_ ) :
- parent( parent_ )
- {
- }
-
-//------------------------------------------------------------------------------
- Elf_Half size() const
- {
- return (Elf_Half)parent->sections_.size();
- }
-
-//------------------------------------------------------------------------------
- section* operator[]( unsigned int index ) const
- {
- section* sec = 0;
-
- if ( index < parent->sections_.size() ) {
- sec = parent->sections_[index];
- }
-
- return sec;
- }
-
-//------------------------------------------------------------------------------
- section* operator[]( const std::string& name ) const
- {
- section* sec = 0;
-
- std::vector::const_iterator it;
- for ( it = parent->sections_.begin();
- it != parent->sections_.end();
- ++it ) {
- if ( (*it)->get_name() == name ) {
- sec = *it;
- break;
- }
- }
-
- return sec;
- }
-
-//------------------------------------------------------------------------------
- section* add( const std::string& name )
- {
- section* new_section = parent->create_section();
- new_section->set_name( name );
-
- Elf_Half str_index = parent->get_section_name_str_index();
- section* string_table( parent->sections_[str_index] );
- string_section_accessor str_writer( string_table );
- Elf_Word pos = str_writer.add_string( name );
- new_section->set_name_string_offset( pos );
-
- return new_section;
- }
-
-//------------------------------------------------------------------------------
- std::vector::iterator begin() {
- return parent->sections_.begin();
- }
-
-//------------------------------------------------------------------------------
- std::vector::iterator end() {
- return parent->sections_.end();
- }
-
-//------------------------------------------------------------------------------
- std::vector::const_iterator begin() const {
- return parent->sections_.cbegin();
- }
-
-//------------------------------------------------------------------------------
- std::vector::const_iterator end() const {
- return parent->sections_.cend();
- }
-
-//------------------------------------------------------------------------------
- private:
- elfio* parent;
- } sections;
-
-//------------------------------------------------------------------------------
- public:
- friend class Segments;
- class Segments {
- public:
-//------------------------------------------------------------------------------
- Segments( elfio* parent_ ) :
- parent( parent_ )
- {
- }
-
-//------------------------------------------------------------------------------
- Elf_Half size() const
- {
- return (Elf_Half)parent->segments_.size();
- }
-
-//------------------------------------------------------------------------------
- segment* operator[]( unsigned int index ) const
- {
- return parent->segments_[index];
- }
-
-
-//------------------------------------------------------------------------------
- segment* add()
- {
- return parent->create_segment();
- }
-
-//------------------------------------------------------------------------------
- std::vector::iterator begin() {
- return parent->segments_.begin();
- }
-
-//------------------------------------------------------------------------------
- std::vector::iterator end() {
- return parent->segments_.end();
- }
-
-//------------------------------------------------------------------------------
- std::vector::const_iterator begin() const {
- return parent->segments_.cbegin();
- }
-
-//------------------------------------------------------------------------------
- std::vector::const_iterator end() const {
- return parent->segments_.cend();
- }
-
-//------------------------------------------------------------------------------
- private:
- elfio* parent;
- } segments;
-
-//------------------------------------------------------------------------------
- private:
- elf_header* header;
- std::vector sections_;
- std::vector segments_;
- endianess_convertor convertor;
-
- Elf_Xword current_file_pos;
-};
-
-} // namespace ELFIO
-
-#include
-#include
-#include
-#include
-
-#ifdef _MSC_VER
-#pragma warning ( pop )
-#endif
-
-#endif // ELFIO_HPP
diff --git a/tools/ZAPD/lib/elfio/elfio/elfio_dump.hpp b/tools/ZAPD/lib/elfio/elfio/elfio_dump.hpp
deleted file mode 100644
index 4ace66514..000000000
--- a/tools/ZAPD/lib/elfio/elfio/elfio_dump.hpp
+++ /dev/null
@@ -1,976 +0,0 @@
-/*
-Copyright (C) 2001-2015 by Serge Lamikhov-Center
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#ifndef ELFIO_DUMP_HPP
-#define ELFIO_DUMP_HPP
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-namespace ELFIO {
-
-
-static struct class_table_t {
- const char key;
- const char* str;
-} class_table [] =
-{
- { ELFCLASS32, "ELF32" },
- { ELFCLASS64, "ELF64" },
-};
-
-
-static struct endian_table_t {
- const char key;
- const char* str;
-} endian_table [] =
-{
- { ELFDATANONE, "None" },
- { ELFDATA2LSB, "Little endian" },
- { ELFDATA2MSB, "Big endian" },
-};
-
-
-static struct version_table_t {
- const Elf64_Word key;
- const char* str;
-} version_table [] =
-{
- { EV_NONE , "None" },
- { EV_CURRENT, "Current" },
-};
-
-
-static struct type_table_t {
- const Elf32_Half key;
- const char* str;
-} type_table [] =
-{
- { ET_NONE, "No file type" },
- { ET_REL , "Relocatable file" },
- { ET_EXEC, "Executable file" },
- { ET_DYN , "Shared object file" },
- { ET_CORE, "Core file" },
-};
-
-
-static struct machine_table_t {
- const Elf64_Half key;
- const char* str;
-} machine_table [] =
-{
- { EM_NONE , "No machine" },
- { EM_M32 , "AT&T WE 32100" },
- { EM_SPARC , "SUN SPARC" },
- { EM_386 , "Intel 80386" },
- { EM_68K , "Motorola m68k family" },
- { EM_88K , "Motorola m88k family" },
- { EM_486 , "Intel 80486// Reserved for future use" },
- { EM_860 , "Intel 80860" },
- { EM_MIPS , "MIPS R3000 (officially, big-endian only)" },
- { EM_S370 , "IBM System/370" },
- { EM_MIPS_RS3_LE , "MIPS R3000 little-endian (Oct 4 1999 Draft) Deprecated" },
- { EM_res011 , "Reserved" },
- { EM_res012 , "Reserved" },
- { EM_res013 , "Reserved" },
- { EM_res014 , "Reserved" },
- { EM_PARISC , "HPPA" },
- { EM_res016 , "Reserved" },
- { EM_VPP550 , "Fujitsu VPP500" },
- { EM_SPARC32PLUS , "Sun's v8plus" },
- { EM_960 , "Intel 80960" },
- { EM_PPC , "PowerPC" },
- { EM_PPC64 , "64-bit PowerPC" },
- { EM_S390 , "IBM S/390" },
- { EM_SPU , "Sony/Toshiba/IBM SPU" },
- { EM_res024 , "Reserved" },
- { EM_res025 , "Reserved" },
- { EM_res026 , "Reserved" },
- { EM_res027 , "Reserved" },
- { EM_res028 , "Reserved" },
- { EM_res029 , "Reserved" },
- { EM_res030 , "Reserved" },
- { EM_res031 , "Reserved" },
- { EM_res032 , "Reserved" },
- { EM_res033 , "Reserved" },
- { EM_res034 , "Reserved" },
- { EM_res035 , "Reserved" },
- { EM_V800 , "NEC V800 series" },
- { EM_FR20 , "Fujitsu FR20" },
- { EM_RH32 , "TRW RH32" },
- { EM_MCORE , "Motorola M*Core // May also be taken by Fujitsu MMA" },
- { EM_RCE , "Old name for MCore" },
- { EM_ARM , "ARM" },
- { EM_OLD_ALPHA , "Digital Alpha" },
- { EM_SH , "Renesas (formerly Hitachi) / SuperH SH" },
- { EM_SPARCV9 , "SPARC v9 64-bit" },
- { EM_TRICORE , "Siemens Tricore embedded processor" },
- { EM_ARC , "ARC Cores" },
- { EM_H8_300 , "Renesas (formerly Hitachi) H8/300" },
- { EM_H8_300H , "Renesas (formerly Hitachi) H8/300H" },
- { EM_H8S , "Renesas (formerly Hitachi) H8S" },
- { EM_H8_500 , "Renesas (formerly Hitachi) H8/500" },
- { EM_IA_64 , "Intel IA-64 Processor" },
- { EM_MIPS_X , "Stanford MIPS-X" },
- { EM_COLDFIRE , "Motorola Coldfire" },
- { EM_68HC12 , "Motorola M68HC12" },
- { EM_MMA , "Fujitsu Multimedia Accelerator" },
- { EM_PCP , "Siemens PCP" },
- { EM_NCPU , "Sony nCPU embedded RISC processor" },
- { EM_NDR1 , "Denso NDR1 microprocesspr" },
- { EM_STARCORE , "Motorola Star*Core processor" },
- { EM_ME16 , "Toyota ME16 processor" },
- { EM_ST100 , "STMicroelectronics ST100 processor" },
- { EM_TINYJ , "Advanced Logic Corp. TinyJ embedded processor" },
- { EM_X86_64 , "Advanced Micro Devices X86-64 processor" },
- { EM_PDSP , "Sony DSP Processor" },
- { EM_PDP10 , "Digital Equipment Corp. PDP-10" },
- { EM_PDP11 , "Digital Equipment Corp. PDP-11" },
- { EM_FX66 , "Siemens FX66 microcontroller" },
- { EM_ST9PLUS , "STMicroelectronics ST9+ 8/16 bit microcontroller" },
- { EM_ST7 , "STMicroelectronics ST7 8-bit microcontroller" },
- { EM_68HC16 , "Motorola MC68HC16 Microcontroller" },
- { EM_68HC11 , "Motorola MC68HC11 Microcontroller" },
- { EM_68HC08 , "Motorola MC68HC08 Microcontroller" },
- { EM_68HC05 , "Motorola MC68HC05 Microcontroller" },
- { EM_SVX , "Silicon Graphics SVx" },
- { EM_ST19 , "STMicroelectronics ST19 8-bit cpu" },
- { EM_VAX , "Digital VAX" },
- { EM_CRIS , "Axis Communications 32-bit embedded processor" },
- { EM_JAVELIN , "Infineon Technologies 32-bit embedded cpu" },
- { EM_FIREPATH , "Element 14 64-bit DSP processor" },
- { EM_ZSP , "LSI Logic's 16-bit DSP processor" },
- { EM_MMIX , "Donald Knuth's educational 64-bit processor" },
- { EM_HUANY , "Harvard's machine-independent format" },
- { EM_PRISM , "SiTera Prism" },
- { EM_AVR , "Atmel AVR 8-bit microcontroller" },
- { EM_FR30 , "Fujitsu FR30" },
- { EM_D10V , "Mitsubishi D10V" },
- { EM_D30V , "Mitsubishi D30V" },
- { EM_V850 , "NEC v850" },
- { EM_M32R , "Renesas M32R (formerly Mitsubishi M32R)" },
- { EM_MN10300 , "Matsushita MN10300" },
- { EM_MN10200 , "Matsushita MN10200" },
- { EM_PJ , "picoJava" },
- { EM_OPENRISC , "OpenRISC 32-bit embedded processor" },
- { EM_ARC_A5 , "ARC Cores Tangent-A5" },
- { EM_XTENSA , "Tensilica Xtensa Architecture" },
- { EM_VIDEOCORE , "Alphamosaic VideoCore processor" },
- { EM_TMM_GPP , "Thompson Multimedia General Purpose Processor" },
- { EM_NS32K , "National Semiconductor 32000 series" },
- { EM_TPC , "Tenor Network TPC processor" },
- { EM_SNP1K , "Trebia SNP 1000 processor" },
- { EM_ST200 , "STMicroelectronics ST200 microcontroller" },
- { EM_IP2K , "Ubicom IP2022 micro controller" },
- { EM_MAX , "MAX Processor" },
- { EM_CR , "National Semiconductor CompactRISC" },
- { EM_F2MC16 , "Fujitsu F2MC16" },
- { EM_MSP430 , "TI msp430 micro controller" },
- { EM_BLACKFIN , "ADI Blackfin" },
- { EM_SE_C33 , "S1C33 Family of Seiko Epson processors" },
- { EM_SEP , "Sharp embedded microprocessor" },
- { EM_ARCA , "Arca RISC Microprocessor" },
- { EM_UNICORE , "Microprocessor series from PKU-Unity Ltd. and MPRC of Peking University" },
- { EM_EXCESS , "eXcess: 16/32/64-bit configurable embedded CPU" },
- { EM_DXP , "Icera Semiconductor Inc. Deep Execution Processor" },
- { EM_ALTERA_NIOS2 , "Altera Nios II soft-core processor" },
- { EM_CRX , "National Semiconductor CRX" },
- { EM_XGATE , "Motorola XGATE embedded processor" },
- { EM_C166 , "Infineon C16x/XC16x processor" },
- { EM_M16C , "Renesas M16C series microprocessors" },
- { EM_DSPIC30F , "Microchip Technology dsPIC30F Digital Signal Controller" },
- { EM_CE , "Freescale Communication Engine RISC core" },
- { EM_M32C , "Renesas M32C series microprocessors" },
- { EM_res121 , "Reserved" },
- { EM_res122 , "Reserved" },
- { EM_res123 , "Reserved" },
- { EM_res124 , "Reserved" },
- { EM_res125 , "Reserved" },
- { EM_res126 , "Reserved" },
- { EM_res127 , "Reserved" },
- { EM_res128 , "Reserved" },
- { EM_res129 , "Reserved" },
- { EM_res130 , "Reserved" },
- { EM_TSK3000 , "Altium TSK3000 core" },
- { EM_RS08 , "Freescale RS08 embedded processor" },
- { EM_res133 , "Reserved" },
- { EM_ECOG2 , "Cyan Technology eCOG2 microprocessor" },
- { EM_SCORE , "Sunplus Score" },
- { EM_SCORE7 , "Sunplus S+core7 RISC processor" },
- { EM_DSP24 , "New Japan Radio (NJR) 24-bit DSP Processor" },
- { EM_VIDEOCORE3 , "Broadcom VideoCore III processor" },
- { EM_LATTICEMICO32, "RISC processor for Lattice FPGA architecture" },
- { EM_SE_C17 , "Seiko Epson C17 family" },
- { EM_TI_C6000 , "Texas Instruments TMS320C6000 DSP family" },
- { EM_TI_C2000 , "Texas Instruments TMS320C2000 DSP family" },
- { EM_TI_C5500 , "Texas Instruments TMS320C55x DSP family" },
- { EM_res143 , "Reserved" },
- { EM_res144 , "Reserved" },
- { EM_res145 , "Reserved" },
- { EM_res146 , "Reserved" },
- { EM_res147 , "Reserved" },
- { EM_res148 , "Reserved" },
- { EM_res149 , "Reserved" },
- { EM_res150 , "Reserved" },
- { EM_res151 , "Reserved" },
- { EM_res152 , "Reserved" },
- { EM_res153 , "Reserved" },
- { EM_res154 , "Reserved" },
- { EM_res155 , "Reserved" },
- { EM_res156 , "Reserved" },
- { EM_res157 , "Reserved" },
- { EM_res158 , "Reserved" },
- { EM_res159 , "Reserved" },
- { EM_MMDSP_PLUS , "STMicroelectronics 64bit VLIW Data Signal Processor" },
- { EM_CYPRESS_M8C , "Cypress M8C microprocessor" },
- { EM_R32C , "Renesas R32C series microprocessors" },
- { EM_TRIMEDIA , "NXP Semiconductors TriMedia architecture family" },
- { EM_QDSP6 , "QUALCOMM DSP6 Processor" },
- { EM_8051 , "Intel 8051 and variants" },
- { EM_STXP7X , "STMicroelectronics STxP7x family" },
- { EM_NDS32 , "Andes Technology compact code size embedded RISC processor family" },
- { EM_ECOG1 , "Cyan Technology eCOG1X family" },
- { EM_ECOG1X , "Cyan Technology eCOG1X family" },
- { EM_MAXQ30 , "Dallas Semiconductor MAXQ30 Core Micro-controllers" },
- { EM_XIMO16 , "New Japan Radio (NJR) 16-bit DSP Processor" },
- { EM_MANIK , "M2000 Reconfigurable RISC Microprocessor" },
- { EM_CRAYNV2 , "Cray Inc. NV2 vector architecture" },
- { EM_RX , "Renesas RX family" },
- { EM_METAG , "Imagination Technologies META processor architecture" },
- { EM_MCST_ELBRUS , "MCST Elbrus general purpose hardware architecture" },
- { EM_ECOG16 , "Cyan Technology eCOG16 family" },
- { EM_CR16 , "National Semiconductor CompactRISC 16-bit processor" },
- { EM_ETPU , "Freescale Extended Time Processing Unit" },
- { EM_SLE9X , "Infineon Technologies SLE9X core" },
- { EM_L1OM , "Intel L1OM" },
- { EM_INTEL181 , "Reserved by Intel" },
- { EM_INTEL182 , "Reserved by Intel" },
- { EM_res183 , "Reserved by ARM" },
- { EM_res184 , "Reserved by ARM" },
- { EM_AVR32 , "Atmel Corporation 32-bit microprocessor family" },
- { EM_STM8 , "STMicroeletronics STM8 8-bit microcontroller" },
- { EM_TILE64 , "Tilera TILE64 multicore architecture family" },
- { EM_TILEPRO , "Tilera TILEPro multicore architecture family" },
- { EM_MICROBLAZE , "Xilinx MicroBlaze 32-bit RISC soft processor core" },
- { EM_CUDA , "NVIDIA CUDA architecture " },
-};
-
-
-static struct section_type_table_t {
- const Elf64_Half key;
- const char* str;
-} section_type_table [] =
-{
- { SHT_NULL , "NULL" },
- { SHT_PROGBITS , "PROGBITS" },
- { SHT_SYMTAB , "SYMTAB" },
- { SHT_STRTAB , "STRTAB" },
- { SHT_RELA , "RELA" },
- { SHT_HASH , "HASH" },
- { SHT_DYNAMIC , "DYNAMIC" },
- { SHT_NOTE , "NOTE" },
- { SHT_NOBITS , "NOBITS" },
- { SHT_REL , "REL" },
- { SHT_SHLIB , "SHLIB" },
- { SHT_DYNSYM , "DYNSYM" },
- { SHT_INIT_ARRAY , "INIT_ARRAY" },
- { SHT_FINI_ARRAY , "FINI_ARRAY" },
- { SHT_PREINIT_ARRAY, "PREINIT_ARRAY" },
- { SHT_GROUP , "GROUP" },
- { SHT_SYMTAB_SHNDX , "SYMTAB_SHNDX " },
-};
-
-
-static struct segment_type_table_t {
- const Elf_Word key;
- const char* str;
-} segment_type_table [] =
-{
- { PT_NULL , "NULL" },
- { PT_LOAD , "LOAD" },
- { PT_DYNAMIC, "DYNAMIC" },
- { PT_INTERP , "INTERP" },
- { PT_NOTE , "NOTE" },
- { PT_SHLIB , "SHLIB" },
- { PT_PHDR , "PHDR" },
- { PT_TLS , "TLS" },
-};
-
-
-static struct segment_flag_table_t {
- const Elf_Word key;
- const char* str;
-} segment_flag_table [] =
-{
- { 0, "" },
- { 1, "X" },
- { 2, "W" },
- { 3, "WX" },
- { 4, "R" },
- { 5, "RX" },
- { 6, "RW" },
- { 7, "RWX" },
-};
-
-
-static struct symbol_bind_t {
- const Elf_Word key;
- const char* str;
-} symbol_bind_table [] =
-{
- { STB_LOCAL , "LOCAL" },
- { STB_GLOBAL , "GLOBAL" },
- { STB_WEAK , "WEAK" },
- { STB_LOOS , "LOOS" },
- { STB_HIOS , "HIOS" },
- { STB_MULTIDEF, "MULTIDEF" },
- { STB_LOPROC , "LOPROC" },
- { STB_HIPROC , "HIPROC" },
-};
-
-
-static struct symbol_type_t {
- const Elf_Word key;
- const char* str;
-} symbol_type_table [] =
-{
- { STT_NOTYPE , "NOTYPE" },
- { STT_OBJECT , "OBJECT" },
- { STT_FUNC , "FUNC" },
- { STT_SECTION, "SECTION" },
- { STT_FILE , "FILE" },
- { STT_COMMON , "COMMON" },
- { STT_TLS , "TLS" },
- { STT_LOOS , "LOOS" },
- { STT_HIOS , "HIOS" },
- { STT_LOPROC , "LOPROC" },
- { STT_HIPROC , "HIPROC" },
-};
-
-
-static struct dynamic_tag_t {
- const Elf_Word key;
- const char* str;
-} dynamic_tag_table [] =
-{
- { DT_NULL , "NULL" },
- { DT_NEEDED , "NEEDED" },
- { DT_PLTRELSZ , "PLTRELSZ" },
- { DT_PLTGOT , "PLTGOT" },
- { DT_HASH , "HASH" },
- { DT_STRTAB , "STRTAB" },
- { DT_SYMTAB , "SYMTAB" },
- { DT_RELA , "RELA" },
- { DT_RELASZ , "RELASZ" },
- { DT_RELAENT , "RELAENT" },
- { DT_STRSZ , "STRSZ" },
- { DT_SYMENT , "SYMENT" },
- { DT_INIT , "INIT" },
- { DT_FINI , "FINI" },
- { DT_SONAME , "SONAME" },
- { DT_RPATH , "RPATH" },
- { DT_SYMBOLIC , "SYMBOLIC" },
- { DT_REL , "REL" },
- { DT_RELSZ , "RELSZ" },
- { DT_RELENT , "RELENT" },
- { DT_PLTREL , "PLTREL" },
- { DT_DEBUG , "DEBUG" },
- { DT_TEXTREL , "TEXTREL" },
- { DT_JMPREL , "JMPREL" },
- { DT_BIND_NOW , "BIND_NOW" },
- { DT_INIT_ARRAY , "INIT_ARRAY" },
- { DT_FINI_ARRAY , "FINI_ARRAY" },
- { DT_INIT_ARRAYSZ , "INIT_ARRAYSZ" },
- { DT_FINI_ARRAYSZ , "FINI_ARRAYSZ" },
- { DT_RUNPATH , "RUNPATH" },
- { DT_FLAGS , "FLAGS" },
- { DT_ENCODING , "ENCODING" },
- { DT_PREINIT_ARRAY , "PREINIT_ARRAY" },
- { DT_PREINIT_ARRAYSZ, "PREINIT_ARRAYSZ" },
- { DT_MAXPOSTAGS , "MAXPOSTAGS" },
-};
-
-static const ELFIO::Elf_Xword MAX_DATA_ENTRIES = 64;
-
-//------------------------------------------------------------------------------
-class dump
-{
-#define DUMP_DEC_FORMAT( width ) std::setw(width) << std::setfill( ' ' ) << \
- std::dec << std::right
-#define DUMP_HEX_FORMAT( width ) std::setw(width) << std::setfill( '0' ) << \
- std::hex << std::right
-#define DUMP_STR_FORMAT( width ) std::setw(width) << std::setfill( ' ' ) << \
- std::hex << std::left
-
- public:
-//------------------------------------------------------------------------------
- static void
- header( std::ostream& out, const elfio& reader )
- {
- if (!reader.get_header_size())
- {
- return;
- }
- out << "ELF Header" << std::endl << std::endl
- << " Class: " << str_class( reader.get_class() ) << std::endl
- << " Encoding: " << str_endian( reader.get_encoding() ) << std::endl
- << " ELFVersion: " << str_version( reader.get_elf_version() ) << std::endl
- << " Type: " << str_type( reader.get_type() ) << std::endl
- << " Machine: " << str_machine( reader.get_machine() ) << std::endl
- << " Version: " << str_version( reader.get_version() ) << std::endl
- << " Entry: " << "0x" << std::hex << reader.get_entry() << std::endl
- << " Flags: " << "0x" << std::hex << reader.get_flags() << std::endl
- << std::endl;
- }
-
-//------------------------------------------------------------------------------
- static void
- section_headers( std::ostream& out, const elfio& reader )
- {
- Elf_Half n = reader.sections.size();
-
- if ( n == 0 ) {
- return;
- }
-
- out << "Section Headers:" << std::endl;
- if ( reader.get_class() == ELFCLASS32 ) { // Output for 32-bit
- out << "[ Nr ] Type Addr Size ES Flg Lk Inf Al Name" << std::endl;
- }
- else { // Output for 64-bit
- out << "[ Nr ] Type Addr Size ES Flg" << std::endl
- << " Lk Inf Al Name" << std::endl;
- }
-
- for ( Elf_Half i = 0; i < n; ++i ) { // For all sections
- section* sec = reader.sections[i];
- section_header( out, i, sec, reader.get_class() );
- }
-
- out << "Key to Flags: W (write), A (alloc), X (execute)\n\n"
- << std::endl;
- }
-
-//------------------------------------------------------------------------------
- static void
- section_header( std::ostream& out, Elf_Half no, const section* sec,
- unsigned char elf_class )
- {
- std::ios_base::fmtflags original_flags = out.flags();
-
- if ( elf_class == ELFCLASS32 ) { // Output for 32-bit
- out << "["
- << DUMP_DEC_FORMAT( 5 ) << no
- << "] "
- << DUMP_STR_FORMAT( 17 ) << str_section_type( sec->get_type() ) << " "
- << DUMP_HEX_FORMAT( 8 ) << sec->get_address() << " "
- << DUMP_HEX_FORMAT( 8 ) << sec->get_size() << " "
- << DUMP_HEX_FORMAT( 2 ) << sec->get_entry_size() << " "
- << DUMP_STR_FORMAT( 3 ) << section_flags( sec->get_flags() ) << " "
- << DUMP_HEX_FORMAT( 2 ) << sec->get_link() << " "
- << DUMP_HEX_FORMAT( 3 ) << sec->get_info() << " "
- << DUMP_HEX_FORMAT( 2 ) << sec->get_addr_align() << " "
- << DUMP_STR_FORMAT( 17 ) << sec->get_name() << " "
- << std::endl;
- }
- else { // Output for 64-bit
- out << "["
- << DUMP_DEC_FORMAT( 5 ) << no
- << "] "
- << DUMP_STR_FORMAT( 17 ) << str_section_type( sec->get_type() ) << " "
- << DUMP_HEX_FORMAT( 16 ) << sec->get_address() << " "
- << DUMP_HEX_FORMAT( 16 ) << sec->get_size() << " "
- << DUMP_HEX_FORMAT( 4 ) << sec->get_entry_size() << " "
- << DUMP_STR_FORMAT( 3 ) << section_flags( sec->get_flags() ) << " "
- << std::endl
- << " "
- << DUMP_HEX_FORMAT( 4 ) << sec->get_link() << " "
- << DUMP_HEX_FORMAT( 4 ) << sec->get_info() << " "
- << DUMP_HEX_FORMAT( 4 ) << sec->get_addr_align() << " "
- << DUMP_STR_FORMAT( 17 ) << sec->get_name() << " "
- << std::endl;
- }
-
- out.flags(original_flags);
-
- return;
- }
-
-//------------------------------------------------------------------------------
- static void
- segment_headers( std::ostream& out, const elfio& reader )
- {
- Elf_Half n = reader.segments.size();
- if ( n == 0 ) {
- return;
- }
-
- out << "Segment headers:" << std::endl;
- if ( reader.get_class() == ELFCLASS32 ) { // Output for 32-bit
- out << "[ Nr ] Type VirtAddr PhysAddr FileSize Mem.Size Flags Align"
- << std::endl;
- }
- else { // Output for 64-bit
- out << "[ Nr ] Type VirtAddr PhysAddr Flags" << std::endl
- << " FileSize Mem.Size Align"
- << std::endl;
- }
-
- for ( Elf_Half i = 0; i < n; ++i ) {
- segment* seg = reader.segments[i];
- segment_header( out, i, seg, reader.get_class() );
- }
-
- out << std::endl;
- }
-
-//------------------------------------------------------------------------------
- static void
- segment_header( std::ostream& out, Elf_Half no, const segment* seg,
- unsigned int elf_class )
- {
- std::ios_base::fmtflags original_flags = out.flags();
-
- if ( elf_class == ELFCLASS32 ) { // Output for 32-bit
- out << "["
- << DUMP_DEC_FORMAT( 5 ) << no
- << "] "
- << DUMP_STR_FORMAT( 14 ) << str_segment_type( seg->get_type() ) << " "
- << DUMP_HEX_FORMAT( 8 ) << seg->get_virtual_address() << " "
- << DUMP_HEX_FORMAT( 8 ) << seg->get_physical_address() << " "
- << DUMP_HEX_FORMAT( 8 ) << seg->get_file_size() << " "
- << DUMP_HEX_FORMAT( 8 ) << seg->get_memory_size() << " "
- << DUMP_STR_FORMAT( 8 ) << str_segment_flag( seg->get_flags() ) << " "
- << DUMP_HEX_FORMAT( 8 ) << seg->get_align() << " "
- << std::endl;
- }
- else { // Output for 64-bit
- out << "["
- << DUMP_DEC_FORMAT( 5 ) << no
- << "] "
- << DUMP_STR_FORMAT( 14 ) << str_segment_type( seg->get_type() ) << " "
- << DUMP_HEX_FORMAT( 16 ) << seg->get_virtual_address() << " "
- << DUMP_HEX_FORMAT( 16 ) << seg->get_physical_address() << " "
- << DUMP_STR_FORMAT( 16 ) << str_segment_flag( seg->get_flags() ) << " "
- << std::endl
- << " "
- << DUMP_HEX_FORMAT( 16 ) << seg->get_file_size() << " "
- << DUMP_HEX_FORMAT( 16 ) << seg->get_memory_size() << " "
- << DUMP_HEX_FORMAT( 16 ) << seg->get_align() << " "
- << std::endl;
- }
-
- out.flags(original_flags);
- }
-
-//------------------------------------------------------------------------------
- static void
- symbol_tables( std::ostream& out, const elfio& reader )
- {
- Elf_Half n = reader.sections.size();
- for ( Elf_Half i = 0; i < n; ++i ) { // For all sections
- section* sec = reader.sections[i];
- if ( SHT_SYMTAB == sec->get_type() || SHT_DYNSYM == sec->get_type() ) {
- symbol_section_accessor symbols( reader, sec );
-
- Elf_Xword sym_no = symbols.get_symbols_num();
- if ( sym_no > 0 ) {
- out << "Symbol table (" << sec->get_name() << ")" << std::endl;
- if ( reader.get_class() == ELFCLASS32 ) { // Output for 32-bit
- out << "[ Nr ] Value Size Type Bind Sect Name"
- << std::endl;
- }
- else { // Output for 64-bit
- out << "[ Nr ] Value Size Type Bind Sect" << std::endl
- << " Name"
- << std::endl;
- }
- for ( Elf_Half i = 0; i < sym_no; ++i ) {
- std::string name;
- Elf64_Addr value = 0;
- Elf_Xword size = 0;
- unsigned char bind = 0;
- unsigned char type = 0;
- Elf_Half section = 0;
- unsigned char other = 0;
- symbols.get_symbol( i, name, value, size, bind, type, section, other );
- symbol_table( out, i, name, value, size, bind, type, section, reader.get_class() );
- }
-
- out << std::endl;
- }
- }
- }
- }
-
-//------------------------------------------------------------------------------
- static void
- symbol_table( std::ostream& out,
- Elf_Half no,
- std::string& name,
- Elf64_Addr value,
- Elf_Xword size,
- unsigned char bind,
- unsigned char type,
- Elf_Half section,
- unsigned int elf_class )
- {
- std::ios_base::fmtflags original_flags = out.flags();
-
- if ( elf_class == ELFCLASS32 ) { // Output for 32-bit
- out << "["
- << DUMP_DEC_FORMAT( 5 ) << no
- << "] "
- << DUMP_HEX_FORMAT( 8 ) << value << " "
- << DUMP_HEX_FORMAT( 8 ) << size << " "
- << DUMP_STR_FORMAT( 7 ) << str_symbol_type( type ) << " "
- << DUMP_STR_FORMAT( 8 ) << str_symbol_bind( bind ) << " "
- << DUMP_DEC_FORMAT( 5 ) << section << " "
- << DUMP_STR_FORMAT( 1 ) << name << " "
- << std::endl;
- }
- else { // Output for 64-bit
- out << "["
- << DUMP_DEC_FORMAT( 5 ) << no
- << "] "
- << DUMP_HEX_FORMAT( 16 ) << value << " "
- << DUMP_HEX_FORMAT( 16 ) << size << " "
- << DUMP_STR_FORMAT( 7 ) << str_symbol_type( type ) << " "
- << DUMP_STR_FORMAT( 8 ) << str_symbol_bind( bind ) << " "
- << DUMP_DEC_FORMAT( 5 ) << section << " "
- << std::endl
- << " "
- << DUMP_STR_FORMAT( 1 ) << name << " "
- << std::endl;
- }
-
- out.flags(original_flags);
- }
-
-//------------------------------------------------------------------------------
- static void
- notes( std::ostream& out, const elfio& reader )
- {
- Elf_Half no = reader.sections.size();
- for ( Elf_Half i = 0; i < no; ++i ) { // For all sections
- section* sec = reader.sections[i];
- if ( SHT_NOTE == sec->get_type() ) { // Look at notes
- note_section_accessor notes( reader, sec );
- int no_notes = notes.get_notes_num();
- if ( no > 0 ) {
- out << "Note section (" << sec->get_name() << ")" << std::endl
- << " No Type Name"
- << std::endl;
- for ( int j = 0; j < no_notes; ++j ) { // For all notes
- Elf_Word type;
- std::string name;
- void* desc;
- Elf_Word descsz;
-
- if ( notes.get_note(j, type, name, desc, descsz) ) {
- // 'name' usually contains \0 at the end. Try to fix it
- name = name.c_str();
- note( out, j, type, name );
- }
- }
-
- out << std::endl;
- }
- }
- }
- }
-
-//------------------------------------------------------------------------------
- static void
- note( std::ostream& out,
- int no,
- Elf_Word type,
- const std::string& name )
- {
- out << " ["
- << DUMP_DEC_FORMAT( 2 ) << no
- << "] "
- << DUMP_HEX_FORMAT( 8 ) << type << " "
- << DUMP_STR_FORMAT( 1 ) << name
- << std::endl;
- }
-
-//------------------------------------------------------------------------------
- static void
- dynamic_tags( std::ostream& out, const elfio& reader )
- {
- Elf_Half n = reader.sections.size();
- for ( Elf_Half i = 0; i < n; ++i ) { // For all sections
- section* sec = reader.sections[i];
- if ( SHT_DYNAMIC == sec->get_type() ) {
- dynamic_section_accessor dynamic( reader, sec );
-
- Elf_Xword dyn_no = dynamic.get_entries_num();
- if ( dyn_no > 0 ) {
- out << "Dynamic section (" << sec->get_name() << ")" << std::endl;
- out << "[ Nr ] Tag Name/Value" << std::endl;
- for ( Elf_Xword i = 0; i < dyn_no; ++i ) {
- Elf_Xword tag = 0;
- Elf_Xword value = 0;
- std::string str;
- dynamic.get_entry( i, tag, value, str );
- dynamic_tag( out, i, tag, value, str, reader.get_class() );
- if ( DT_NULL == tag ) {
- break;
- }
- }
-
- out << std::endl;
- }
- }
- }
- }
-
-//------------------------------------------------------------------------------
- static void
- dynamic_tag( std::ostream& out,
- Elf_Xword no,
- Elf_Xword tag,
- Elf_Xword value,
- std::string str,
- unsigned int /*elf_class*/ )
- {
- out << "["
- << DUMP_DEC_FORMAT( 5 ) << no
- << "] "
- << DUMP_STR_FORMAT( 16 ) << str_dynamic_tag( tag ) << " ";
- if ( str.empty() ) {
- out << DUMP_HEX_FORMAT( 16 ) << value << " ";
- }
- else {
- out << DUMP_STR_FORMAT( 32 ) << str << " ";
- }
- out << std::endl;
- }
-
-//------------------------------------------------------------------------------
- static void
- section_data( std::ostream& out, const section* sec )
- {
- std::ios_base::fmtflags original_flags = out.flags();
-
- out << sec->get_name() << std::endl;
- const char* pdata = sec->get_data();
- if ( pdata ){
- ELFIO::Elf_Xword i;
- for ( i = 0; i < std::min( sec->get_size(), MAX_DATA_ENTRIES ); ++i ) {
- if ( i % 16 == 0 ) {
- out << "[" << DUMP_HEX_FORMAT( 8 ) << i << "]";
- }
-
- out << " " << DUMP_HEX_FORMAT( 2 ) << ( pdata[i] & 0x000000FF );
-
- if ( i % 16 == 15 ) {
- out << std::endl;
- }
- }
- if ( i % 16 != 0 ) {
- out << std::endl;
- }
-
- out.flags(original_flags);
- }
-
- return;
- }
-
-//------------------------------------------------------------------------------
- static void
- section_datas( std::ostream& out, const elfio& reader )
- {
- Elf_Half n = reader.sections.size();
-
- if ( n == 0 ) {
- return;
- }
-
- out << "Section Data:" << std::endl;
-
- for ( Elf_Half i = 1; i < n; ++i ) { // For all sections
- section* sec = reader.sections[i];
- if ( sec->get_type() == SHT_NOBITS ) {
- continue;
- }
- section_data( out, sec );
- }
-
- out << std::endl;
- }
-
-//------------------------------------------------------------------------------
- static void
- segment_data( std::ostream& out, Elf_Half no, const segment* seg )
- {
- std::ios_base::fmtflags original_flags = out.flags();
-
- out << "Segment # " << no << std::endl;
- const char* pdata = seg->get_data();
- if ( pdata ) {
- ELFIO::Elf_Xword i;
- for ( i = 0; i < std::min( seg->get_file_size(), MAX_DATA_ENTRIES ); ++i ) {
- if ( i % 16 == 0 ) {
- out << "[" << DUMP_HEX_FORMAT( 8 ) << i << "]";
- }
-
- out << " " << DUMP_HEX_FORMAT( 2 ) << ( pdata[i] & 0x000000FF );
-
- if ( i % 16 == 15 ) {
- out << std::endl;
- }
- }
- if ( i % 16 != 0 ) {
- out << std::endl;
- }
-
- out.flags(original_flags);
- }
-
- return;
- }
-
-//------------------------------------------------------------------------------
- static void
- segment_datas( std::ostream& out, const elfio& reader )
- {
- Elf_Half n = reader.segments.size();
-
- if ( n == 0 ) {
- return;
- }
-
- out << "Segment Data:" << std::endl;
-
- for ( Elf_Half i = 0; i < n; ++i ) { // For all sections
- segment* seg = reader.segments[i];
- segment_data( out, i, seg );
- }
-
- out << std::endl;
- }
-
- private:
-//------------------------------------------------------------------------------
- template< typename T, typename K >
- std::string
- static
- find_value_in_table( const T& table, const K& key )
- {
- std::string res = "?";
- for ( unsigned int i = 0; i < sizeof( table )/sizeof( table[0] ); ++i ) {
- if ( table[i].key == key ) {
- res = table[i].str;
- break;
- }
- }
-
- return res;
- }
-
-
-//------------------------------------------------------------------------------
- template< typename T, typename K >
- static
- std::string
- format_assoc( const T& table, const K& key )
- {
- std::string str = find_value_in_table( table, key );
- if ( str == "?" ) {
- std::ostringstream oss;
- oss << str << " (0x" << std::hex << key << ")";
- str = oss.str();
- }
-
- return str;
- }
-
-
-//------------------------------------------------------------------------------
- template< typename T >
- static
- std::string
- format_assoc( const T& table, const char key )
- {
- return format_assoc( table, (const int)key );
- }
-
-
-//------------------------------------------------------------------------------
- static
- std::string
- section_flags( Elf_Xword flags )
- {
- std::string ret = "";
- if ( flags & SHF_WRITE ) {
- ret += "W";
- }
- if ( flags & SHF_ALLOC ) {
- ret += "A";
- }
- if ( flags & SHF_EXECINSTR ) {
- ret += "X";
- }
-
- return ret;
- }
-
-
-//------------------------------------------------------------------------------
-#define STR_FUNC_TABLE( name ) \
- template< typename T > \
- static \
- std::string \
- str_##name( const T key ) \
- { \
- return format_assoc( name##_table, key ); \
- }
-
- STR_FUNC_TABLE( class )
- STR_FUNC_TABLE( endian )
- STR_FUNC_TABLE( version )
- STR_FUNC_TABLE( type )
- STR_FUNC_TABLE( machine )
- STR_FUNC_TABLE( section_type )
- STR_FUNC_TABLE( segment_type )
- STR_FUNC_TABLE( segment_flag )
- STR_FUNC_TABLE( symbol_bind )
- STR_FUNC_TABLE( symbol_type )
- STR_FUNC_TABLE( dynamic_tag )
-
-#undef STR_FUNC_TABLE
-#undef DUMP_DEC_FORMAT
-#undef DUMP_HEX_FORMAT
-#undef DUMP_STR_FORMAT
-}; // class dump
-
-
-}; // namespace ELFIO
-
-#endif // ELFIO_DUMP_HPP
diff --git a/tools/ZAPD/lib/elfio/elfio/elfio_dynamic.hpp b/tools/ZAPD/lib/elfio/elfio/elfio_dynamic.hpp
deleted file mode 100644
index 42f26805b..000000000
--- a/tools/ZAPD/lib/elfio/elfio/elfio_dynamic.hpp
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
-Copyright (C) 2001-2015 by Serge Lamikhov-Center
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#ifndef ELFIO_DYNAMIC_HPP
-#define ELFIO_DYNAMIC_HPP
-
-namespace ELFIO {
-
-//------------------------------------------------------------------------------
-template< class S >
-class dynamic_section_accessor_template
-{
- public:
-//------------------------------------------------------------------------------
- dynamic_section_accessor_template( const elfio& elf_file_, S* section_ ) :
- elf_file( elf_file_ ),
- dynamic_section( section_ )
- {
- }
-
-//------------------------------------------------------------------------------
- Elf_Xword
- get_entries_num() const
- {
- Elf_Xword nRet = 0;
-
- if ( 0 != dynamic_section->get_entry_size() ) {
- nRet = dynamic_section->get_size() / dynamic_section->get_entry_size();
- }
-
- return nRet;
- }
-
-//------------------------------------------------------------------------------
- bool
- get_entry( Elf_Xword index,
- Elf_Xword& tag,
- Elf_Xword& value,
- std::string& str ) const
- {
- if ( index >= get_entries_num() ) { // Is index valid
- return false;
- }
-
- if ( elf_file.get_class() == ELFCLASS32 ) {
- generic_get_entry_dyn< Elf32_Dyn >( index, tag, value );
- }
- else {
- generic_get_entry_dyn< Elf64_Dyn >( index, tag, value );
- }
-
- // If the tag may have a string table reference, prepare the string
- if ( tag == DT_NEEDED ||
- tag == DT_SONAME ||
- tag == DT_RPATH ||
- tag == DT_RUNPATH ) {
- string_section_accessor strsec =
- elf_file.sections[ get_string_table_index() ];
- const char* result = strsec.get_string( value );
- if ( 0 == result ) {
- str.clear();
- return false;
- }
- str = result;
- }
- else {
- str.clear();
- }
-
- return true;
- }
-
-//------------------------------------------------------------------------------
- void
- add_entry( Elf_Xword tag,
- Elf_Xword value )
- {
- if ( elf_file.get_class() == ELFCLASS32 ) {
- generic_add_entry< Elf32_Dyn >( tag, value );
- }
- else {
- generic_add_entry< Elf64_Dyn >( tag, value );
- }
- }
-
-//------------------------------------------------------------------------------
- void
- add_entry( Elf_Xword tag,
- const std::string& str )
- {
- string_section_accessor strsec =
- elf_file.sections[ get_string_table_index() ];
- Elf_Xword value = strsec.add_string( str );
- add_entry( tag, value );
- }
-
-//------------------------------------------------------------------------------
- private:
-//------------------------------------------------------------------------------
- Elf_Half
- get_string_table_index() const
- {
- return (Elf_Half)dynamic_section->get_link();
- }
-
-//------------------------------------------------------------------------------
- template< class T >
- void
- generic_get_entry_dyn( Elf_Xword index,
- Elf_Xword& tag,
- Elf_Xword& value ) const
- {
- const endianess_convertor& convertor = elf_file.get_convertor();
-
- // Check unusual case when dynamic section has no data
- if( dynamic_section->get_data() == 0 ||
- ( index + 1 ) * dynamic_section->get_entry_size() > dynamic_section->get_size() ) {
- tag = DT_NULL;
- value = 0;
- return;
- }
-
- const T* pEntry = reinterpret_cast(
- dynamic_section->get_data() +
- index * dynamic_section->get_entry_size() );
- tag = convertor( pEntry->d_tag );
- switch ( tag ) {
- case DT_NULL:
- case DT_SYMBOLIC:
- case DT_TEXTREL:
- case DT_BIND_NOW:
- value = 0;
- break;
- case DT_NEEDED:
- case DT_PLTRELSZ:
- case DT_RELASZ:
- case DT_RELAENT:
- case DT_STRSZ:
- case DT_SYMENT:
- case DT_SONAME:
- case DT_RPATH:
- case DT_RELSZ:
- case DT_RELENT:
- case DT_PLTREL:
- case DT_INIT_ARRAYSZ:
- case DT_FINI_ARRAYSZ:
- case DT_RUNPATH:
- case DT_FLAGS:
- case DT_PREINIT_ARRAYSZ:
- value = convertor( pEntry->d_un.d_val );
- break;
- case DT_PLTGOT:
- case DT_HASH:
- case DT_STRTAB:
- case DT_SYMTAB:
- case DT_RELA:
- case DT_INIT:
- case DT_FINI:
- case DT_REL:
- case DT_DEBUG:
- case DT_JMPREL:
- case DT_INIT_ARRAY:
- case DT_FINI_ARRAY:
- case DT_PREINIT_ARRAY:
- default:
- value = convertor( pEntry->d_un.d_ptr );
- break;
- }
- }
-
-//------------------------------------------------------------------------------
- template< class T >
- void
- generic_add_entry( Elf_Xword tag, Elf_Xword value )
- {
- const endianess_convertor& convertor = elf_file.get_convertor();
-
- T entry;
-
- switch ( tag ) {
- case DT_NULL:
- case DT_SYMBOLIC:
- case DT_TEXTREL:
- case DT_BIND_NOW:
- value = 0;
- case DT_NEEDED:
- case DT_PLTRELSZ:
- case DT_RELASZ:
- case DT_RELAENT:
- case DT_STRSZ:
- case DT_SYMENT:
- case DT_SONAME:
- case DT_RPATH:
- case DT_RELSZ:
- case DT_RELENT:
- case DT_PLTREL:
- case DT_INIT_ARRAYSZ:
- case DT_FINI_ARRAYSZ:
- case DT_RUNPATH:
- case DT_FLAGS:
- case DT_PREINIT_ARRAYSZ:
- entry.d_un.d_val = convertor( value );
- break;
- case DT_PLTGOT:
- case DT_HASH:
- case DT_STRTAB:
- case DT_SYMTAB:
- case DT_RELA:
- case DT_INIT:
- case DT_FINI:
- case DT_REL:
- case DT_DEBUG:
- case DT_JMPREL:
- case DT_INIT_ARRAY:
- case DT_FINI_ARRAY:
- case DT_PREINIT_ARRAY:
- default:
- entry.d_un.d_ptr = convertor( value );
- break;
- }
-
- entry.d_tag = convertor( tag );
-
- dynamic_section->append_data( reinterpret_cast( &entry ), sizeof( entry ) );
- }
-
-//------------------------------------------------------------------------------
- private:
- const elfio& elf_file;
- S* dynamic_section;
-};
-
-using dynamic_section_accessor = dynamic_section_accessor_template;
-using const_dynamic_section_accessor = dynamic_section_accessor_template;
-
-} // namespace ELFIO
-
-#endif // ELFIO_DYNAMIC_HPP
diff --git a/tools/ZAPD/lib/elfio/elfio/elfio_header.hpp b/tools/ZAPD/lib/elfio/elfio/elfio_header.hpp
deleted file mode 100644
index 6f8da0285..000000000
--- a/tools/ZAPD/lib/elfio/elfio/elfio_header.hpp
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
-Copyright (C) 2001-2015 by Serge Lamikhov-Center
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#ifndef ELF_HEADER_HPP
-#define ELF_HEADER_HPP
-
-#include
-
-namespace ELFIO {
-
-class elf_header
-{
- public:
- virtual ~elf_header() {};
- virtual bool load( std::istream& stream ) = 0;
- virtual bool save( std::ostream& stream ) const = 0;
-
- // ELF header functions
- ELFIO_GET_ACCESS_DECL( unsigned char, class );
- ELFIO_GET_ACCESS_DECL( unsigned char, elf_version );
- ELFIO_GET_ACCESS_DECL( unsigned char, encoding );
- ELFIO_GET_ACCESS_DECL( Elf_Half, header_size );
- ELFIO_GET_ACCESS_DECL( Elf_Half, section_entry_size );
- ELFIO_GET_ACCESS_DECL( Elf_Half, segment_entry_size );
-
- ELFIO_GET_SET_ACCESS_DECL( Elf_Word, version );
- ELFIO_GET_SET_ACCESS_DECL( unsigned char, os_abi );
- ELFIO_GET_SET_ACCESS_DECL( unsigned char, abi_version );
- ELFIO_GET_SET_ACCESS_DECL( Elf_Half, type );
- ELFIO_GET_SET_ACCESS_DECL( Elf_Half, machine );
- ELFIO_GET_SET_ACCESS_DECL( Elf_Word, flags );
- ELFIO_GET_SET_ACCESS_DECL( Elf64_Addr, entry );
- ELFIO_GET_SET_ACCESS_DECL( Elf_Half, sections_num );
- ELFIO_GET_SET_ACCESS_DECL( Elf64_Off, sections_offset );
- ELFIO_GET_SET_ACCESS_DECL( Elf_Half, segments_num );
- ELFIO_GET_SET_ACCESS_DECL( Elf64_Off, segments_offset );
- ELFIO_GET_SET_ACCESS_DECL( Elf_Half, section_name_str_index );
-};
-
-
-template< class T > struct elf_header_impl_types;
-template<> struct elf_header_impl_types {
- typedef Elf32_Phdr Phdr_type;
- typedef Elf32_Shdr Shdr_type;
- static const unsigned char file_class = ELFCLASS32;
-};
-template<> struct elf_header_impl_types {
- typedef Elf64_Phdr Phdr_type;
- typedef Elf64_Shdr Shdr_type;
- static const unsigned char file_class = ELFCLASS64;
-};
-
-template< class T > class elf_header_impl : public elf_header
-{
- public:
- elf_header_impl( endianess_convertor* convertor_,
- unsigned char encoding )
- {
- convertor = convertor_;
-
- std::fill_n( reinterpret_cast( &header ), sizeof( header ), '\0' );
-
- header.e_ident[EI_MAG0] = ELFMAG0;
- header.e_ident[EI_MAG1] = ELFMAG1;
- header.e_ident[EI_MAG2] = ELFMAG2;
- header.e_ident[EI_MAG3] = ELFMAG3;
- header.e_ident[EI_CLASS] = elf_header_impl_types::file_class;
- header.e_ident[EI_DATA] = encoding;
- header.e_ident[EI_VERSION] = EV_CURRENT;
- header.e_version = (*convertor)( (Elf_Word)EV_CURRENT );
- header.e_ehsize = ( sizeof( header ) );
- header.e_ehsize = (*convertor)( header.e_ehsize );
- header.e_shstrndx = (*convertor)( (Elf_Half)1 );
- header.e_phentsize = sizeof( typename elf_header_impl_types::Phdr_type );
- header.e_shentsize = sizeof( typename elf_header_impl_types::Shdr_type );
- header.e_phentsize = (*convertor)( header.e_phentsize );
- header.e_shentsize = (*convertor)( header.e_shentsize );
- }
-
- bool
- load( std::istream& stream )
- {
- stream.seekg( 0 );
- stream.read( reinterpret_cast( &header ), sizeof( header ) );
-
- return (stream.gcount() == sizeof( header ) );
- }
-
- bool
- save( std::ostream& stream ) const
- {
- stream.seekp( 0 );
- stream.write( reinterpret_cast( &header ), sizeof( header ) );
-
- return stream.good();
- }
-
- // ELF header functions
- ELFIO_GET_ACCESS( unsigned char, class, header.e_ident[EI_CLASS] );
- ELFIO_GET_ACCESS( unsigned char, elf_version, header.e_ident[EI_VERSION] );
- ELFIO_GET_ACCESS( unsigned char, encoding, header.e_ident[EI_DATA] );
- ELFIO_GET_ACCESS( Elf_Half, header_size, header.e_ehsize );
- ELFIO_GET_ACCESS( Elf_Half, section_entry_size, header.e_shentsize );
- ELFIO_GET_ACCESS( Elf_Half, segment_entry_size, header.e_phentsize );
-
- ELFIO_GET_SET_ACCESS( Elf_Word, version, header.e_version);
- ELFIO_GET_SET_ACCESS( unsigned char, os_abi, header.e_ident[EI_OSABI] );
- ELFIO_GET_SET_ACCESS( unsigned char, abi_version, header.e_ident[EI_ABIVERSION] );
- ELFIO_GET_SET_ACCESS( Elf_Half, type, header.e_type );
- ELFIO_GET_SET_ACCESS( Elf_Half, machine, header.e_machine );
- ELFIO_GET_SET_ACCESS( Elf_Word, flags, header.e_flags );
- ELFIO_GET_SET_ACCESS( Elf_Half, section_name_str_index, header.e_shstrndx );
- ELFIO_GET_SET_ACCESS( Elf64_Addr, entry, header.e_entry );
- ELFIO_GET_SET_ACCESS( Elf_Half, sections_num, header.e_shnum );
- ELFIO_GET_SET_ACCESS( Elf64_Off, sections_offset, header.e_shoff );
- ELFIO_GET_SET_ACCESS( Elf_Half, segments_num, header.e_phnum );
- ELFIO_GET_SET_ACCESS( Elf64_Off, segments_offset, header.e_phoff );
-
- private:
- T header;
- endianess_convertor* convertor;
-};
-
-} // namespace ELFIO
-
-#endif // ELF_HEADER_HPP
diff --git a/tools/ZAPD/lib/elfio/elfio/elfio_note.hpp b/tools/ZAPD/lib/elfio/elfio/elfio_note.hpp
deleted file mode 100644
index 8619c7385..000000000
--- a/tools/ZAPD/lib/elfio/elfio/elfio_note.hpp
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
-Copyright (C) 2001-2015 by Serge Lamikhov-Center
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#ifndef ELFIO_NOTE_HPP
-#define ELFIO_NOTE_HPP
-
-namespace ELFIO {
-
-//------------------------------------------------------------------------------
-// There are discrepancies in documentations. SCO documentation
-// (http://www.sco.com/developers/gabi/latest/ch5.pheader.html#note_section)
-// requires 8 byte entries alignment for 64-bit ELF file,
-// but Oracle's definition uses the same structure
-// for 32-bit and 64-bit formats.
-// (https://docs.oracle.com/cd/E23824_01/html/819-0690/chapter6-18048.html)
-//
-// It looks like EM_X86_64 Linux implementation is similar to Oracle's
-// definition. Therefore, the same alignment works for both formats
-//------------------------------------------------------------------------------
-
-//------------------------------------------------------------------------------
-template< class S >
-class note_section_accessor_template
-{
- public:
-//------------------------------------------------------------------------------
- note_section_accessor_template( const elfio& elf_file_, S* section_ ) :
- elf_file( elf_file_ ), note_section( section_ )
- {
- process_section();
- }
-
-//------------------------------------------------------------------------------
- Elf_Word
- get_notes_num() const
- {
- return (Elf_Word)note_start_positions.size();
- }
-
-//------------------------------------------------------------------------------
- bool
- get_note( Elf_Word index,
- Elf_Word& type,
- std::string& name,
- void*& desc,
- Elf_Word& descSize ) const
- {
- if ( index >= note_section->get_size() ) {
- return false;
- }
-
- const char* pData = note_section->get_data() + note_start_positions[index];
- int align = sizeof( Elf_Word );
-
- const endianess_convertor& convertor = elf_file.get_convertor();
- type = convertor( *(const Elf_Word*)( pData + 2*align ) );
- Elf_Word namesz = convertor( *(const Elf_Word*)( pData ) );
- descSize = convertor( *(const Elf_Word*)( pData + sizeof( namesz ) ) );
- Elf_Xword max_name_size = note_section->get_size() - note_start_positions[index];
- if ( namesz > max_name_size ||
- namesz + descSize > max_name_size ) {
- return false;
- }
- name.assign( pData + 3*align, namesz - 1);
- if ( 0 == descSize ) {
- desc = 0;
- }
- else {
- desc = const_cast ( pData + 3*align +
- ( ( namesz + align - 1 )/align )*align );
- }
-
- return true;
- }
-
-//------------------------------------------------------------------------------
- void add_note( Elf_Word type,
- const std::string& name,
- const void* desc,
- Elf_Word descSize )
- {
- const endianess_convertor& convertor = elf_file.get_convertor();
-
- int align = sizeof( Elf_Word );
- Elf_Word nameLen = (Elf_Word)name.size() + 1;
- Elf_Word nameLenConv = convertor( nameLen );
- std::string buffer( reinterpret_cast( &nameLenConv ), align );
- Elf_Word descSizeConv = convertor( descSize );
- buffer.append( reinterpret_cast( &descSizeConv ), align );
- type = convertor( type );
- buffer.append( reinterpret_cast( &type ), align );
- buffer.append( name );
- buffer.append( 1, '\x00' );
- const char pad[] = { '\0', '\0', '\0', '\0' };
- if ( nameLen % align != 0 ) {
- buffer.append( pad, align - nameLen % align );
- }
- if ( desc != 0 && descSize != 0 ) {
- buffer.append( reinterpret_cast( desc ), descSize );
- if ( descSize % align != 0 ) {
- buffer.append( pad, align - descSize % align );
- }
- }
-
- note_start_positions.push_back( note_section->get_size() );
- note_section->append_data( buffer );
- }
-
- private:
-//------------------------------------------------------------------------------
- void process_section()
- {
- const endianess_convertor& convertor = elf_file.get_convertor();
- const char* data = note_section->get_data();
- Elf_Xword size = note_section->get_size();
- Elf_Xword current = 0;
-
- note_start_positions.clear();
-
- // Is it empty?
- if ( 0 == data || 0 == size ) {
- return;
- }
-
- int align = sizeof( Elf_Word );
- while ( current + 3*align <= size ) {
- note_start_positions.push_back( current );
- Elf_Word namesz = convertor(
- *(const Elf_Word*)( data + current ) );
- Elf_Word descsz = convertor(
- *(const Elf_Word*)( data + current + sizeof( namesz ) ) );
-
- current += 3*sizeof( Elf_Word ) +
- ( ( namesz + align - 1 ) / align ) * align +
- ( ( descsz + align - 1 ) / align ) * align;
- }
- }
-
-//------------------------------------------------------------------------------
- private:
- const elfio& elf_file;
- S* note_section;
- std::vector note_start_positions;
-};
-
-using note_section_accessor = note_section_accessor_template;
-using const_note_section_accessor = note_section_accessor_template;
-
-} // namespace ELFIO
-
-#endif // ELFIO_NOTE_HPP
diff --git a/tools/ZAPD/lib/elfio/elfio/elfio_relocation.hpp b/tools/ZAPD/lib/elfio/elfio/elfio_relocation.hpp
deleted file mode 100644
index 238598e97..000000000
--- a/tools/ZAPD/lib/elfio/elfio/elfio_relocation.hpp
+++ /dev/null
@@ -1,373 +0,0 @@
-/*
-Copyright (C) 2001-2015 by Serge Lamikhov-Center
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#ifndef ELFIO_RELOCATION_HPP
-#define ELFIO_RELOCATION_HPP
-
-namespace ELFIO {
-
-template struct get_sym_and_type;
-template<> struct get_sym_and_type< Elf32_Rel >
-{
- static int get_r_sym( Elf_Xword info )
- {
- return ELF32_R_SYM( (Elf_Word)info );
- }
- static int get_r_type( Elf_Xword info )
- {
- return ELF32_R_TYPE( (Elf_Word)info );
- }
-};
-template<> struct get_sym_and_type< Elf32_Rela >
-{
- static int get_r_sym( Elf_Xword info )
- {
- return ELF32_R_SYM( (Elf_Word)info );
- }
- static int get_r_type( Elf_Xword info )
- {
- return ELF32_R_TYPE( (Elf_Word)info );
- }
-};
-template<> struct get_sym_and_type< Elf64_Rel >
-{
- static int get_r_sym( Elf_Xword info )
- {
- return ELF64_R_SYM( info );
- }
- static int get_r_type( Elf_Xword info )
- {
- return ELF64_R_TYPE( info );
- }
-};
-template<> struct get_sym_and_type< Elf64_Rela >
-{
- static int get_r_sym( Elf_Xword info )
- {
- return ELF64_R_SYM( info );
- }
- static int get_r_type( Elf_Xword info )
- {
- return ELF64_R_TYPE( info );
- }
-};
-
-
-//------------------------------------------------------------------------------
-template< class S >
-class relocation_section_accessor_template
-{
- public:
-//------------------------------------------------------------------------------
- relocation_section_accessor_template( const elfio& elf_file_, S* section_ ) :
- elf_file( elf_file_ ),
- relocation_section( section_ )
- {
- }
-
-//------------------------------------------------------------------------------
- Elf_Xword
- get_entries_num() const
- {
- Elf_Xword nRet = 0;
-
- if ( 0 != relocation_section->get_entry_size() ) {
- nRet = relocation_section->get_size() / relocation_section->get_entry_size();
- }
-
- return nRet;
- }
-
-//------------------------------------------------------------------------------
- bool
- get_entry( Elf_Xword index,
- Elf64_Addr& offset,
- Elf_Word& symbol,
- Elf_Word& type,
- Elf_Sxword& addend ) const
- {
- if ( index >= get_entries_num() ) { // Is index valid
- return false;
- }
-
- if ( elf_file.get_class() == ELFCLASS32 ) {
- if ( SHT_REL == relocation_section->get_type() ) {
- generic_get_entry_rel< Elf32_Rel >( index, offset, symbol,
- type, addend );
- }
- else if ( SHT_RELA == relocation_section->get_type() ) {
- generic_get_entry_rela< Elf32_Rela >( index, offset, symbol,
- type, addend );
- }
- }
- else {
- if ( SHT_REL == relocation_section->get_type() ) {
- generic_get_entry_rel< Elf64_Rel >( index, offset, symbol,
- type, addend );
- }
- else if ( SHT_RELA == relocation_section->get_type() ) {
- generic_get_entry_rela< Elf64_Rela >( index, offset, symbol,
- type, addend );
- }
- }
-
- return true;
- }
-
-//------------------------------------------------------------------------------
- bool
- get_entry( Elf_Xword index,
- Elf64_Addr& offset,
- Elf64_Addr& symbolValue,
- std::string& symbolName,
- Elf_Word& type,
- Elf_Sxword& addend,
- Elf_Sxword& calcValue ) const
- {
- // Do regular job
- Elf_Word symbol;
- bool ret = get_entry( index, offset, symbol, type, addend );
-
- // Find the symbol
- Elf_Xword size;
- unsigned char bind;
- unsigned char symbolType;
- Elf_Half section;
- unsigned char other;
-
- symbol_section_accessor symbols( elf_file, elf_file.sections[get_symbol_table_index()] );
- ret = ret && symbols.get_symbol( symbol, symbolName, symbolValue,
- size, bind, symbolType, section, other );
-
- if ( ret ) { // Was it successful?
- switch ( type ) {
- case R_386_NONE: // none
- calcValue = 0;
- break;
- case R_386_32: // S + A
- calcValue = symbolValue + addend;
- break;
- case R_386_PC32: // S + A - P
- calcValue = symbolValue + addend - offset;
- break;
- case R_386_GOT32: // G + A - P
- calcValue = 0;
- break;
- case R_386_PLT32: // L + A - P
- calcValue = 0;
- break;
- case R_386_COPY: // none
- calcValue = 0;
- break;
- case R_386_GLOB_DAT: // S
- case R_386_JMP_SLOT: // S
- calcValue = symbolValue;
- break;
- case R_386_RELATIVE: // B + A
- calcValue = addend;
- break;
- case R_386_GOTOFF: // S + A - GOT
- calcValue = 0;
- break;
- case R_386_GOTPC: // GOT + A - P
- calcValue = 0;
- break;
- default: // Not recognized symbol!
- calcValue = 0;
- break;
- }
- }
-
- return ret;
- }
-
-//------------------------------------------------------------------------------
- void
- add_entry( Elf64_Addr offset, Elf_Xword info )
- {
- if ( elf_file.get_class() == ELFCLASS32 ) {
- generic_add_entry< Elf32_Rel >( offset, info );
- }
- else {
- generic_add_entry< Elf64_Rel >( offset, info );
- }
- }
-
-//------------------------------------------------------------------------------
- void
- add_entry( Elf64_Addr offset, Elf_Word symbol, unsigned char type )
- {
- Elf_Xword info;
- if ( elf_file.get_class() == ELFCLASS32 ) {
- info = ELF32_R_INFO( (Elf_Xword)symbol, type );
- }
- else {
- info = ELF64_R_INFO((Elf_Xword)symbol, type );
- }
-
- add_entry( offset, info );
- }
-
-//------------------------------------------------------------------------------
- void
- add_entry( Elf64_Addr offset, Elf_Xword info, Elf_Sxword addend )
- {
- if ( elf_file.get_class() == ELFCLASS32 ) {
- generic_add_entry< Elf32_Rela >( offset, info, addend );
- }
- else {
- generic_add_entry< Elf64_Rela >( offset, info, addend );
- }
- }
-
-//------------------------------------------------------------------------------
- void
- add_entry( Elf64_Addr offset, Elf_Word symbol, unsigned char type,
- Elf_Sxword addend )
- {
- Elf_Xword info;
- if ( elf_file.get_class() == ELFCLASS32 ) {
- info = ELF32_R_INFO( (Elf_Xword)symbol, type );
- }
- else {
- info = ELF64_R_INFO( (Elf_Xword)symbol, type );
- }
-
- add_entry( offset, info, addend );
- }
-
-//------------------------------------------------------------------------------
- void
- add_entry( string_section_accessor str_writer,
- const char* str,
- symbol_section_accessor sym_writer,
- Elf64_Addr value,
- Elf_Word size,
- unsigned char sym_info,
- unsigned char other,
- Elf_Half shndx,
- Elf64_Addr offset,
- unsigned char type )
- {
- Elf_Word str_index = str_writer.add_string( str );
- Elf_Word sym_index = sym_writer.add_symbol( str_index, value, size,
- sym_info, other, shndx );
- add_entry( offset, sym_index, type );
- }
-
-//------------------------------------------------------------------------------
- private:
-//------------------------------------------------------------------------------
- Elf_Half
- get_symbol_table_index() const
- {
- return (Elf_Half)relocation_section->get_link();
- }
-
-//------------------------------------------------------------------------------
- template< class T >
- void
- generic_get_entry_rel( Elf_Xword index,
- Elf64_Addr& offset,
- Elf_Word& symbol,
- Elf_Word& type,
- Elf_Sxword& addend ) const
- {
- const endianess_convertor& convertor = elf_file.get_convertor();
-
- const T* pEntry = reinterpret_cast(
- relocation_section->get_data() +
- index * relocation_section->get_entry_size() );
- offset = convertor( pEntry->r_offset );
- Elf_Xword tmp = convertor( pEntry->r_info );
- symbol = get_sym_and_type::get_r_sym( tmp );
- type = get_sym_and_type::get_r_type( tmp );
- addend = 0;
- }
-
-//------------------------------------------------------------------------------
- template< class T >
- void
- generic_get_entry_rela( Elf_Xword index,
- Elf64_Addr& offset,
- Elf_Word& symbol,
- Elf_Word& type,
- Elf_Sxword& addend ) const
- {
- const endianess_convertor& convertor = elf_file.get_convertor();
-
- const T* pEntry = reinterpret_cast(
- relocation_section->get_data() +
- index * relocation_section->get_entry_size() );
- offset = convertor( pEntry->r_offset );
- Elf_Xword tmp = convertor( pEntry->r_info );
- symbol = get_sym_and_type::get_r_sym( tmp );
- type = get_sym_and_type::get_r_type( tmp );
- addend = convertor( pEntry->r_addend );
- }
-
-//------------------------------------------------------------------------------
- template< class T >
- void
- generic_add_entry( Elf64_Addr offset, Elf_Xword info )
- {
- const endianess_convertor& convertor = elf_file.get_convertor();
-
- T entry;
- entry.r_offset = offset;
- entry.r_info = info;
- entry.r_offset = convertor( entry.r_offset );
- entry.r_info = convertor( entry.r_info );
-
- relocation_section->append_data( reinterpret_cast( &entry ), sizeof( entry ) );
- }
-
-//------------------------------------------------------------------------------
- template< class T >
- void
- generic_add_entry( Elf64_Addr offset, Elf_Xword info, Elf_Sxword addend )
- {
- const endianess_convertor& convertor = elf_file.get_convertor();
-
- T entry;
- entry.r_offset = offset;
- entry.r_info = info;
- entry.r_addend = addend;
- entry.r_offset = convertor( entry.r_offset );
- entry.r_info = convertor( entry.r_info );
- entry.r_addend = convertor( entry.r_addend );
-
- relocation_section->append_data( reinterpret_cast( &entry ), sizeof( entry ) );
- }
-
-//------------------------------------------------------------------------------
- private:
- const elfio& elf_file;
- S* relocation_section;
-};
-
-using relocation_section_accessor = relocation_section_accessor_template;
-using const_relocation_section_accessor = relocation_section_accessor_template;
-
-} // namespace ELFIO
-
-#endif // ELFIO_RELOCATION_HPP
diff --git a/tools/ZAPD/lib/elfio/elfio/elfio_section.hpp b/tools/ZAPD/lib/elfio/elfio/elfio_section.hpp
deleted file mode 100644
index 3bfc2333c..000000000
--- a/tools/ZAPD/lib/elfio/elfio/elfio_section.hpp
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
-Copyright (C) 2001-2015 by Serge Lamikhov-Center
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#ifndef ELFIO_SECTION_HPP
-#define ELFIO_SECTION_HPP
-
-#include
-#include
-
-namespace ELFIO {
-
-class section
-{
- friend class elfio;
- public:
- virtual ~section() {};
-
- ELFIO_GET_ACCESS_DECL ( Elf_Half, index );
- ELFIO_GET_SET_ACCESS_DECL( std::string, name );
- ELFIO_GET_SET_ACCESS_DECL( Elf_Word, type );
- ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, flags );
- ELFIO_GET_SET_ACCESS_DECL( Elf_Word, info );
- ELFIO_GET_SET_ACCESS_DECL( Elf_Word, link );
- ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, addr_align );
- ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, entry_size );
- ELFIO_GET_SET_ACCESS_DECL( Elf64_Addr, address );
- ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, size );
- ELFIO_GET_SET_ACCESS_DECL( Elf_Word, name_string_offset );
- ELFIO_GET_ACCESS_DECL ( Elf64_Off, offset );
- size_t stream_size;
- size_t get_stream_size() const
- {
- return stream_size;
- }
-
- void set_stream_size(size_t value)
- {
- stream_size = value;
- }
-
- virtual const char* get_data() const = 0;
- virtual void set_data( const char* pData, Elf_Word size ) = 0;
- virtual void set_data( const std::string& data ) = 0;
- virtual void append_data( const char* pData, Elf_Word size ) = 0;
- virtual void append_data( const std::string& data ) = 0;
-
- protected:
- ELFIO_SET_ACCESS_DECL( Elf64_Off, offset );
- ELFIO_SET_ACCESS_DECL( Elf_Half, index );
-
- virtual void load( std::istream& stream,
- std::streampos header_offset ) = 0;
- virtual void save( std::ostream& stream,
- std::streampos header_offset,
- std::streampos data_offset ) = 0;
- virtual bool is_address_initialized() const = 0;
-};
-
-
-template< class T >
-class section_impl : public section
-{
- public:
-//------------------------------------------------------------------------------
- section_impl( const endianess_convertor* convertor_ ) : convertor( convertor_ )
- {
- std::fill_n( reinterpret_cast( &header ), sizeof( header ), '\0' );
- is_address_set = false;
- data = 0;
- data_size = 0;
- }
-
-//------------------------------------------------------------------------------
- ~section_impl()
- {
- delete [] data;
- }
-
-//------------------------------------------------------------------------------
- // Section info functions
- ELFIO_GET_SET_ACCESS( Elf_Word, type, header.sh_type );
- ELFIO_GET_SET_ACCESS( Elf_Xword, flags, header.sh_flags );
- ELFIO_GET_SET_ACCESS( Elf_Xword, size, header.sh_size );
- ELFIO_GET_SET_ACCESS( Elf_Word, link, header.sh_link );
- ELFIO_GET_SET_ACCESS( Elf_Word, info, header.sh_info );
- ELFIO_GET_SET_ACCESS( Elf_Xword, addr_align, header.sh_addralign );
- ELFIO_GET_SET_ACCESS( Elf_Xword, entry_size, header.sh_entsize );
- ELFIO_GET_SET_ACCESS( Elf_Word, name_string_offset, header.sh_name );
- ELFIO_GET_ACCESS ( Elf64_Addr, address, header.sh_addr );
-
-//------------------------------------------------------------------------------
- Elf_Half
- get_index() const
- {
- return index;
- }
-
-
-//------------------------------------------------------------------------------
- std::string
- get_name() const
- {
- return name;
- }
-
-//------------------------------------------------------------------------------
- void
- set_name( std::string name_ )
- {
- name = name_;
- }
-
-//------------------------------------------------------------------------------
- void
- set_address( Elf64_Addr value )
- {
- header.sh_addr = value;
- header.sh_addr = (*convertor)( header.sh_addr );
- is_address_set = true;
- }
-
-//------------------------------------------------------------------------------
- bool
- is_address_initialized() const
- {
- return is_address_set;
- }
-
-//------------------------------------------------------------------------------
- const char*
- get_data() const
- {
- return data;
- }
-
-//------------------------------------------------------------------------------
- void
- set_data( const char* raw_data, Elf_Word size )
- {
- if ( get_type() != SHT_NOBITS ) {
- delete [] data;
- try {
- data = new char[size];
- } catch (const std::bad_alloc&) {
- data = 0;
- data_size = 0;
- size = 0;
- }
- if ( 0 != data && 0 != raw_data ) {
- data_size = size;
- std::copy( raw_data, raw_data + size, data );
- }
- }
-
- set_size( size );
- }
-
-//------------------------------------------------------------------------------
- void
- set_data( const std::string& str_data )
- {
- return set_data( str_data.c_str(), (Elf_Word)str_data.size() );
- }
-
-//------------------------------------------------------------------------------
- void
- append_data( const char* raw_data, Elf_Word size )
- {
- if ( get_type() != SHT_NOBITS ) {
- if ( get_size() + size < data_size ) {
- std::copy( raw_data, raw_data + size, data + get_size() );
- }
- else {
- data_size = 2*( data_size + size);
- char* new_data;
- try {
- new_data = new char[data_size];
- } catch (const std::bad_alloc&) {
- new_data = 0;
- size = 0;
- }
- if ( 0 != new_data ) {
- std::copy( data, data + get_size(), new_data );
- std::copy( raw_data, raw_data + size, new_data + get_size() );
- delete [] data;
- data = new_data;
- }
- }
- set_size( get_size() + size );
- }
- }
-
-//------------------------------------------------------------------------------
- void
- append_data( const std::string& str_data )
- {
- return append_data( str_data.c_str(), (Elf_Word)str_data.size() );
- }
-
-//------------------------------------------------------------------------------
- protected:
-//------------------------------------------------------------------------------
- ELFIO_GET_SET_ACCESS( Elf64_Off, offset, header.sh_offset );
-
-//------------------------------------------------------------------------------
- void
- set_index( Elf_Half value )
- {
- index = value;
- }
-
-//------------------------------------------------------------------------------
- void
- load( std::istream& stream,
- std::streampos header_offset )
- {
- std::fill_n( reinterpret_cast( &header ), sizeof( header ), '\0' );
-
- stream.seekg ( 0, stream.end );
- set_stream_size ( stream.tellg() );
-
- stream.seekg( header_offset );
- stream.read( reinterpret_cast( &header ), sizeof( header ) );
-
-
- Elf_Xword size = get_size();
- if ( 0 == data && SHT_NULL != get_type() && SHT_NOBITS != get_type() && size < get_stream_size()) {
- try {
- data = new char[size + 1];
- } catch (const std::bad_alloc&) {
- data = 0;
- data_size = 0;
- }
-
- if ( ( 0 != size ) && ( 0 != data ) ) {
- stream.seekg( (*convertor)( header.sh_offset ) );
- stream.read( data, size );
- data[size] = 0; // Ensure data is ended with 0 to avoid oob read
- data_size = size;
- }
- }
- }
-
-//------------------------------------------------------------------------------
- void
- save( std::ostream& stream,
- std::streampos header_offset,
- std::streampos data_offset )
- {
- if ( 0 != get_index() ) {
- header.sh_offset = data_offset;
- header.sh_offset = (*convertor)( header.sh_offset );
- }
-
- save_header( stream, header_offset );
- if ( get_type() != SHT_NOBITS && get_type() != SHT_NULL &&
- get_size() != 0 && data != 0 ) {
- save_data( stream, data_offset );
- }
- }
-
-//------------------------------------------------------------------------------
- private:
-//------------------------------------------------------------------------------
- void
- save_header( std::ostream& stream,
- std::streampos header_offset ) const
- {
- stream.seekp( header_offset );
- stream.write( reinterpret_cast( &header ), sizeof( header ) );
- }
-
-//------------------------------------------------------------------------------
- void
- save_data( std::ostream& stream,
- std::streampos data_offset ) const
- {
- stream.seekp( data_offset );
- stream.write( get_data(), get_size() );
- }
-
-//------------------------------------------------------------------------------
- private:
- T header;
- Elf_Half index;
- std::string name;
- char* data;
- Elf_Word data_size;
- const endianess_convertor* convertor;
- bool is_address_set;
-};
-
-} // namespace ELFIO
-
-#endif // ELFIO_SECTION_HPP
diff --git a/tools/ZAPD/lib/elfio/elfio/elfio_segment.hpp b/tools/ZAPD/lib/elfio/elfio/elfio_segment.hpp
deleted file mode 100644
index 642fd2907..000000000
--- a/tools/ZAPD/lib/elfio/elfio/elfio_segment.hpp
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
-Copyright (C) 2001-2015 by Serge Lamikhov-Center
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#ifndef ELFIO_SEGMENT_HPP
-#define ELFIO_SEGMENT_HPP
-
-#include
-#include
-
-namespace ELFIO {
-
-class segment
-{
- friend class elfio;
- public:
- virtual ~segment() {};
-
- ELFIO_GET_ACCESS_DECL ( Elf_Half, index );
- ELFIO_GET_SET_ACCESS_DECL( Elf_Word, type );
- ELFIO_GET_SET_ACCESS_DECL( Elf_Word, flags );
- ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, align );
- ELFIO_GET_SET_ACCESS_DECL( Elf64_Addr, virtual_address );
- ELFIO_GET_SET_ACCESS_DECL( Elf64_Addr, physical_address );
- ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, file_size );
- ELFIO_GET_SET_ACCESS_DECL( Elf_Xword, memory_size );
- ELFIO_GET_ACCESS_DECL( Elf64_Off, offset );
-
- virtual const char* get_data() const = 0;
-
- virtual Elf_Half add_section_index( Elf_Half index, Elf_Xword addr_align ) = 0;
- virtual Elf_Half get_sections_num() const = 0;
- virtual Elf_Half get_section_index_at( Elf_Half num ) const = 0;
- virtual bool is_offset_initialized() const = 0;
-
- protected:
- ELFIO_SET_ACCESS_DECL( Elf64_Off, offset );
- ELFIO_SET_ACCESS_DECL( Elf_Half, index );
-
- virtual const std::vector& get_sections() const = 0;
- virtual void load( std::istream& stream, std::streampos header_offset ) = 0;
- virtual void save( std::ostream& stream, std::streampos header_offset,
- std::streampos data_offset ) = 0;
-};
-
-
-//------------------------------------------------------------------------------
-template< class T >
-class segment_impl : public segment
-{
- public:
-//------------------------------------------------------------------------------
- segment_impl( endianess_convertor* convertor_ ) :
- stream_size( 0 ), index( 0 ), data( 0 ), convertor( convertor_ )
- {
- is_offset_set = false;
- std::fill_n( reinterpret_cast( &ph ), sizeof( ph ), '\0' );
- }
-
-//------------------------------------------------------------------------------
- virtual ~segment_impl()
- {
- delete [] data;
- }
-
-//------------------------------------------------------------------------------
- // Section info functions
- ELFIO_GET_SET_ACCESS( Elf_Word, type, ph.p_type );
- ELFIO_GET_SET_ACCESS( Elf_Word, flags, ph.p_flags );
- ELFIO_GET_SET_ACCESS( Elf_Xword, align, ph.p_align );
- ELFIO_GET_SET_ACCESS( Elf64_Addr, virtual_address, ph.p_vaddr );
- ELFIO_GET_SET_ACCESS( Elf64_Addr, physical_address, ph.p_paddr );
- ELFIO_GET_SET_ACCESS( Elf_Xword, file_size, ph.p_filesz );
- ELFIO_GET_SET_ACCESS( Elf_Xword, memory_size, ph.p_memsz );
- ELFIO_GET_ACCESS( Elf64_Off, offset, ph.p_offset );
- size_t stream_size;
-
-//------------------------------------------------------------------------------
- size_t
- get_stream_size() const
- {
- return stream_size;
- }
-
-//------------------------------------------------------------------------------
- void
- set_stream_size(size_t value)
- {
- stream_size = value;
- }
-
-//------------------------------------------------------------------------------
- Elf_Half
- get_index() const
- {
- return index;
- }
-
-//------------------------------------------------------------------------------
- const char*
- get_data() const
- {
- return data;
- }
-
-//------------------------------------------------------------------------------
- Elf_Half
- add_section_index( Elf_Half sec_index, Elf_Xword addr_align )
- {
- sections.push_back( sec_index );
- if ( addr_align > get_align() ) {
- set_align( addr_align );
- }
-
- return (Elf_Half)sections.size();
- }
-
-//------------------------------------------------------------------------------
- Elf_Half
- get_sections_num() const
- {
- return (Elf_Half)sections.size();
- }
-
-//------------------------------------------------------------------------------
- Elf_Half
- get_section_index_at( Elf_Half num ) const
- {
- if ( num < sections.size() ) {
- return sections[num];
- }
-
- return Elf_Half(-1);
- }
-
-//------------------------------------------------------------------------------
- protected:
-//------------------------------------------------------------------------------
-
-//------------------------------------------------------------------------------
- void
- set_offset( Elf64_Off value )
- {
- ph.p_offset = value;
- ph.p_offset = (*convertor)( ph.p_offset );
- is_offset_set = true;
- }
-
-//------------------------------------------------------------------------------
- bool
- is_offset_initialized() const
- {
- return is_offset_set;
- }
-
-//------------------------------------------------------------------------------
- const std::vector&
- get_sections() const
- {
- return sections;
- }
-
-//------------------------------------------------------------------------------
- void
- set_index( Elf_Half value )
- {
- index = value;
- }
-
-//------------------------------------------------------------------------------
- void
- load( std::istream& stream,
- std::streampos header_offset )
- {
-
- stream.seekg ( 0, stream.end );
- set_stream_size ( stream.tellg() );
-
- stream.seekg( header_offset );
- stream.read( reinterpret_cast( &ph ), sizeof( ph ) );
- is_offset_set = true;
-
- if ( PT_NULL != get_type() && 0 != get_file_size() ) {
- stream.seekg( (*convertor)( ph.p_offset ) );
- Elf_Xword size = get_file_size();
-
- if ( size > get_stream_size() ) {
- data = 0;
- }
- else {
- try {
- data = new char[size + 1];
- } catch (const std::bad_alloc&) {
- data = 0;
- }
-
- if ( 0 != data ) {
- stream.read( data, size );
- data[size] = 0;
- }
- }
- }
- }
-
-//------------------------------------------------------------------------------
- void save( std::ostream& stream,
- std::streampos header_offset,
- std::streampos data_offset )
- {
- ph.p_offset = data_offset;
- ph.p_offset = (*convertor)(ph.p_offset);
- stream.seekp( header_offset );
- stream.write( reinterpret_cast( &ph ), sizeof( ph ) );
- }
-
-//------------------------------------------------------------------------------
- private:
- T ph;
- Elf_Half index;
- char* data;
- std::vector sections;
- endianess_convertor* convertor;
- bool is_offset_set;
-};
-
-} // namespace ELFIO
-
-#endif // ELFIO_SEGMENT_HPP
diff --git a/tools/ZAPD/lib/elfio/elfio/elfio_strings.hpp b/tools/ZAPD/lib/elfio/elfio/elfio_strings.hpp
deleted file mode 100644
index 552f00029..000000000
--- a/tools/ZAPD/lib/elfio/elfio/elfio_strings.hpp
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
-Copyright (C) 2001-2015 by Serge Lamikhov-Center
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#ifndef ELFIO_STRINGS_HPP
-#define ELFIO_STRINGS_HPP
-
-#include
-#include
-#include
-
-namespace ELFIO {
-
-//------------------------------------------------------------------------------
-template< class S >
-class string_section_accessor_template
-{
- public:
-//------------------------------------------------------------------------------
- string_section_accessor_template( S* section_ ) :
- string_section( section_ )
- {
- }
-
-
-//------------------------------------------------------------------------------
- const char*
- get_string( Elf_Word index ) const
- {
- if ( string_section ) {
- if ( index < string_section->get_size() ) {
- const char* data = string_section->get_data();
- if ( 0 != data ) {
- return data + index;
- }
- }
- }
-
- return 0;
- }
-
-
-//------------------------------------------------------------------------------
- Elf_Word
- add_string( const char* str )
- {
- Elf_Word current_position = 0;
-
- if (string_section) {
- // Strings are addeded to the end of the current section data
- current_position = (Elf_Word)string_section->get_size();
-
- if ( current_position == 0 ) {
- char empty_string = '\0';
- string_section->append_data( &empty_string, 1 );
- current_position++;
- }
- string_section->append_data( str, (Elf_Word)std::strlen( str ) + 1 );
- }
-
- return current_position;
- }
-
-
-//------------------------------------------------------------------------------
- Elf_Word
- add_string( const std::string& str )
- {
- return add_string( str.c_str() );
- }
-
-//------------------------------------------------------------------------------
- private:
- S* string_section;
-};
-
-using string_section_accessor = string_section_accessor_template;
-using const_string_section_accessor = string_section_accessor_template;
-
-} // namespace ELFIO
-
-#endif // ELFIO_STRINGS_HPP
diff --git a/tools/ZAPD/lib/elfio/elfio/elfio_symbols.hpp b/tools/ZAPD/lib/elfio/elfio/elfio_symbols.hpp
deleted file mode 100644
index d18756a9a..000000000
--- a/tools/ZAPD/lib/elfio/elfio/elfio_symbols.hpp
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
-Copyright (C) 2001-2015 by Serge Lamikhov-Center
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#ifndef ELFIO_SYMBOLS_HPP
-#define ELFIO_SYMBOLS_HPP
-
-namespace ELFIO {
-
-//------------------------------------------------------------------------------
-template< class S >
-class symbol_section_accessor_template
-{
- public:
-//------------------------------------------------------------------------------
- symbol_section_accessor_template( const elfio& elf_file_, S* symbol_section_ ) :
- elf_file( elf_file_ ),
- symbol_section( symbol_section_ )
- {
- find_hash_section();
- }
-
-//------------------------------------------------------------------------------
- Elf_Xword
- get_symbols_num() const
- {
- Elf_Xword nRet = 0;
- if ( 0 != symbol_section->get_entry_size() ) {
- nRet = symbol_section->get_size() / symbol_section->get_entry_size();
- }
-
- return nRet;
- }
-
-//------------------------------------------------------------------------------
- bool
- get_symbol( Elf_Xword index,
- std::string& name,
- Elf64_Addr& value,
- Elf_Xword& size,
- unsigned char& bind,
- unsigned char& type,
- Elf_Half& section_index,
- unsigned char& other ) const
- {
- bool ret = false;
-
- if ( elf_file.get_class() == ELFCLASS32 ) {
- ret = generic_get_symbol( index, name, value, size, bind,
- type, section_index, other );
- }
- else {
- ret = generic_get_symbol( index, name, value, size, bind,
- type, section_index, other );
- }
-
- return ret;
- }
-
-//------------------------------------------------------------------------------
- bool
- get_symbol( const std::string& name,
- Elf64_Addr& value,
- Elf_Xword& size,
- unsigned char& bind,
- unsigned char& type,
- Elf_Half& section_index,
- unsigned char& other ) const
- {
- bool ret = false;
-
- if ( 0 != get_hash_table_index() ) {
- Elf_Word nbucket = *(const Elf_Word*)hash_section->get_data();
- Elf_Word nchain = *(const Elf_Word*)( hash_section->get_data() +
- sizeof( Elf_Word ) );
- Elf_Word val = elf_hash( (const unsigned char*)name.c_str() );
-
- Elf_Word y = *(const Elf_Word*)( hash_section->get_data() +
- ( 2 + val % nbucket ) * sizeof( Elf_Word ) );
- std::string str;
- get_symbol( y, str, value, size, bind, type, section_index, other );
- while ( str != name && STN_UNDEF != y && y < nchain ) {
- y = *(const Elf_Word*)( hash_section->get_data() +
- ( 2 + nbucket + y ) * sizeof( Elf_Word ) );
- get_symbol( y, str, value, size, bind, type, section_index, other );
- }
- if ( str == name ) {
- ret = true;
- }
- }
-
- return ret;
- }
-
-//------------------------------------------------------------------------------
- Elf_Word
- add_symbol( Elf_Word name, Elf64_Addr value, Elf_Xword size,
- unsigned char info, unsigned char other,
- Elf_Half shndx )
- {
- Elf_Word nRet;
-
- if ( symbol_section->get_size() == 0 ) {
- if ( elf_file.get_class() == ELFCLASS32 ) {
- nRet = generic_add_symbol( 0, 0, 0, 0, 0, 0 );
- }
- else {
- nRet = generic_add_symbol( 0, 0, 0, 0, 0, 0 );
- }
- }
-
- if ( elf_file.get_class() == ELFCLASS32 ) {
- nRet = generic_add_symbol( name, value, size, info, other,
- shndx );
- }
- else {
- nRet = generic_add_symbol( name, value, size, info, other,
- shndx );
- }
-
- return nRet;
- }
-
-//------------------------------------------------------------------------------
- Elf_Word
- add_symbol( Elf_Word name, Elf64_Addr value, Elf_Xword size,
- unsigned char bind, unsigned char type, unsigned char other,
- Elf_Half shndx )
- {
- return add_symbol( name, value, size, ELF_ST_INFO( bind, type ), other, shndx );
- }
-
-//------------------------------------------------------------------------------
- Elf_Word
- add_symbol( string_section_accessor& pStrWriter, const char* str,
- Elf64_Addr value, Elf_Xword size,
- unsigned char info, unsigned char other,
- Elf_Half shndx )
- {
- Elf_Word index = pStrWriter.add_string( str );
- return add_symbol( index, value, size, info, other, shndx );
- }
-
-//------------------------------------------------------------------------------
- Elf_Word
- add_symbol( string_section_accessor& pStrWriter, const char* str,
- Elf64_Addr value, Elf_Xword size,
- unsigned char bind, unsigned char type, unsigned char other,
- Elf_Half shndx )
- {
- return add_symbol( pStrWriter, str, value, size, ELF_ST_INFO( bind, type ), other, shndx );
- }
-
-//------------------------------------------------------------------------------
- private:
-//------------------------------------------------------------------------------
- void
- find_hash_section()
- {
- hash_section = 0;
- hash_section_index = 0;
- Elf_Half nSecNo = elf_file.sections.size();
- for ( Elf_Half i = 0; i < nSecNo && 0 == hash_section_index; ++i ) {
- const section* sec = elf_file.sections[i];
- if ( sec->get_link() == symbol_section->get_index() ) {
- hash_section = sec;
- hash_section_index = i;
- }
- }
- }
-
-//------------------------------------------------------------------------------
- Elf_Half
- get_string_table_index() const
- {
- return (Elf_Half)symbol_section->get_link();
- }
-
-//------------------------------------------------------------------------------
- Elf_Half
- get_hash_table_index() const
- {
- return hash_section_index;
- }
-
-//------------------------------------------------------------------------------
- template< class T >
- bool
- generic_get_symbol( Elf_Xword index,
- std::string& name, Elf64_Addr& value,
- Elf_Xword& size,
- unsigned char& bind, unsigned char& type,
- Elf_Half& section_index,
- unsigned char& other ) const
- {
- bool ret = false;
-
- if ( index < get_symbols_num() ) {
- const T* pSym = reinterpret_cast(
- symbol_section->get_data() +
- index * symbol_section->get_entry_size() );
-
- const endianess_convertor& convertor = elf_file.get_convertor();
-
- section* string_section = elf_file.sections[get_string_table_index()];
- string_section_accessor str_reader( string_section );
- const char* pStr = str_reader.get_string( convertor( pSym->st_name ) );
- if ( 0 != pStr ) {
- name = pStr;
- }
- value = convertor( pSym->st_value );
- size = convertor( pSym->st_size );
- bind = ELF_ST_BIND( pSym->st_info );
- type = ELF_ST_TYPE( pSym->st_info );
- section_index = convertor( pSym->st_shndx );
- other = pSym->st_other;
-
- ret = true;
- }
-
- return ret;
- }
-
-//------------------------------------------------------------------------------
- template< class T >
- Elf_Word
- generic_add_symbol( Elf_Word name, Elf64_Addr value, Elf_Xword size,
- unsigned char info, unsigned char other,
- Elf_Half shndx )
- {
- const endianess_convertor& convertor = elf_file.get_convertor();
-
- T entry;
- entry.st_name = convertor( name );
- entry.st_value = value;
- entry.st_value = convertor( entry.st_value );
- entry.st_size = size;
- entry.st_size = convertor( entry.st_size );
- entry.st_info = convertor( info );
- entry.st_other = convertor( other );
- entry.st_shndx = convertor( shndx );
-
- symbol_section->append_data( reinterpret_cast( &entry ),
- sizeof( entry ) );
-
- Elf_Word nRet = symbol_section->get_size() / sizeof( entry ) - 1;
-
- return nRet;
- }
-
-//------------------------------------------------------------------------------
- private:
- const elfio& elf_file;
- S* symbol_section;
- Elf_Half hash_section_index;
- const section* hash_section;
-};
-
-using symbol_section_accessor = symbol_section_accessor_template;
-using const_symbol_section_accessor = symbol_section_accessor_template;
-
-} // namespace ELFIO
-
-#endif // ELFIO_SYMBOLS_HPP
diff --git a/tools/ZAPD/lib/elfio/elfio/elfio_utils.hpp b/tools/ZAPD/lib/elfio/elfio/elfio_utils.hpp
deleted file mode 100644
index 2baf5a77c..000000000
--- a/tools/ZAPD/lib/elfio/elfio/elfio_utils.hpp
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
-Copyright (C) 2001-2015 by Serge Lamikhov-Center
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#ifndef ELFIO_UTILS_HPP
-#define ELFIO_UTILS_HPP
-
-#define ELFIO_GET_ACCESS( TYPE, NAME, FIELD ) \
- TYPE get_##NAME() const \
- { \
- return (*convertor)( FIELD ); \
- }
-#define ELFIO_SET_ACCESS( TYPE, NAME, FIELD ) \
- void set_##NAME( TYPE value ) \
- { \
- FIELD = value; \
- FIELD = (*convertor)( FIELD ); \
- }
-#define ELFIO_GET_SET_ACCESS( TYPE, NAME, FIELD ) \
- TYPE get_##NAME() const \
- { \
- return (*convertor)( FIELD ); \
- } \
- void set_##NAME( TYPE value ) \
- { \
- FIELD = value; \
- FIELD = (*convertor)( FIELD ); \
- }
-
-#define ELFIO_GET_ACCESS_DECL( TYPE, NAME ) \
- virtual TYPE get_##NAME() const = 0
-
-#define ELFIO_SET_ACCESS_DECL( TYPE, NAME ) \
- virtual void set_##NAME( TYPE value ) = 0
-
-#define ELFIO_GET_SET_ACCESS_DECL( TYPE, NAME ) \
- virtual TYPE get_##NAME() const = 0; \
- virtual void set_##NAME( TYPE value ) = 0
-
-namespace ELFIO {
-
-//------------------------------------------------------------------------------
-class endianess_convertor {
- public:
-//------------------------------------------------------------------------------
- endianess_convertor()
- {
- need_conversion = false;
- }
-
-//------------------------------------------------------------------------------
- void
- setup( unsigned char elf_file_encoding )
- {
- need_conversion = ( elf_file_encoding != get_host_encoding() );
- }
-
-//------------------------------------------------------------------------------
- uint64_t
- operator()( uint64_t value ) const
- {
- if ( !need_conversion ) {
- return value;
- }
- value =
- ( ( value & 0x00000000000000FFull ) << 56 ) |
- ( ( value & 0x000000000000FF00ull ) << 40 ) |
- ( ( value & 0x0000000000FF0000ull ) << 24 ) |
- ( ( value & 0x00000000FF000000ull ) << 8 ) |
- ( ( value & 0x000000FF00000000ull ) >> 8 ) |
- ( ( value & 0x0000FF0000000000ull ) >> 24 ) |
- ( ( value & 0x00FF000000000000ull ) >> 40 ) |
- ( ( value & 0xFF00000000000000ull ) >> 56 );
-
- return value;
- }
-
-//------------------------------------------------------------------------------
- int64_t
- operator()( int64_t value ) const
- {
- if ( !need_conversion ) {
- return value;
- }
- return (int64_t)(*this)( (uint64_t)value );
- }
-
-//------------------------------------------------------------------------------
- uint32_t
- operator()( uint32_t value ) const
- {
- if ( !need_conversion ) {
- return value;
- }
- value =
- ( ( value & 0x000000FF ) << 24 ) |
- ( ( value & 0x0000FF00 ) << 8 ) |
- ( ( value & 0x00FF0000 ) >> 8 ) |
- ( ( value & 0xFF000000 ) >> 24 );
-
- return value;
- }
-
-//------------------------------------------------------------------------------
- int32_t
- operator()( int32_t value ) const
- {
- if ( !need_conversion ) {
- return value;
- }
- return (int32_t)(*this)( (uint32_t)value );
- }
-
-//------------------------------------------------------------------------------
- uint16_t
- operator()( uint16_t value ) const
- {
- if ( !need_conversion ) {
- return value;
- }
- value =
- ( ( value & 0x00FF ) << 8 ) |
- ( ( value & 0xFF00 ) >> 8 );
-
- return value;
- }
-
-//------------------------------------------------------------------------------
- int16_t
- operator()( int16_t value ) const
- {
- if ( !need_conversion ) {
- return value;
- }
- return (int16_t)(*this)( (uint16_t)value );
- }
-
-//------------------------------------------------------------------------------
- int8_t
- operator()( int8_t value ) const
- {
- return value;
- }
-
-//------------------------------------------------------------------------------
- uint8_t
- operator()( uint8_t value ) const
- {
- return value;
- }
-
-//------------------------------------------------------------------------------
- private:
-//------------------------------------------------------------------------------
- unsigned char
- get_host_encoding() const
- {
- static const int tmp = 1;
- if ( 1 == *(const char*)&tmp ) {
- return ELFDATA2LSB;
- }
- else {
- return ELFDATA2MSB;
- }
- }
-
-//------------------------------------------------------------------------------
- private:
- bool need_conversion;
-};
-
-
-//------------------------------------------------------------------------------
-inline
-uint32_t
-elf_hash( const unsigned char *name )
-{
- uint32_t h = 0, g;
- while ( *name ) {
- h = (h << 4) + *name++;
- g = h & 0xf0000000;
- if ( g != 0 )
- h ^= g >> 24;
- h &= ~g;
- }
- return h;
-}
-
-} // namespace ELFIO
-
-#endif // ELFIO_UTILS_HPP
diff --git a/tools/asm-differ/.gitignore b/tools/asm-differ/.gitignore
index eb176dc56..a2b216fea 100644
--- a/tools/asm-differ/.gitignore
+++ b/tools/asm-differ/.gitignore
@@ -1,2 +1,4 @@
.mypy_cache/
__pycache__/
+.vscode/
+poetry.lock
diff --git a/tools/asm-differ/.gitrepo b/tools/asm-differ/.gitrepo
index 8d0a6445d..a23a9c1e4 100644
--- a/tools/asm-differ/.gitrepo
+++ b/tools/asm-differ/.gitrepo
@@ -6,7 +6,7 @@
[subrepo]
remote = https://github.com/simonlindholm/asm-differ
branch = main
- commit = 1236288d1520335c2bfb672078fec65084d7cb5c
- parent = 2c5690701a350c7e7c3d6252dff925ad65d59910
+ commit = ae408664a89ea4dc70d005d0afc69ac26c938cbb
+ parent = c833969ea79ba31c3103e25e94ef88098c0287de
method = merge
cmdver = 0.4.3
diff --git a/tools/asm-differ/.pre-commit-config.yaml b/tools/asm-differ/.pre-commit-config.yaml
index ccc4afc0e..67ba03d12 100644
--- a/tools/asm-differ/.pre-commit-config.yaml
+++ b/tools/asm-differ/.pre-commit-config.yaml
@@ -1,5 +1,5 @@
repos:
- repo: https://github.com/psf/black
- rev: 22.1.0
+ rev: 22.3.0
hooks:
- id: black
diff --git a/tools/asm-differ/README.md b/tools/asm-differ/README.md
index 205310d39..1d0932c9b 100644
--- a/tools/asm-differ/README.md
+++ b/tools/asm-differ/README.md
@@ -7,7 +7,7 @@ Nice differ for assembly code. Currently supports MIPS, PPC, AArch64, and ARM32;
## Dependencies
- Python >= 3.6
-- `python3 -m pip install --user colorama watchdog python-Levenshtein` (also `dataclasses` if on 3.6)
+- `python3 -m pip install --user colorama watchdog levenshtein cxxfilt` (also `dataclasses` if on 3.6)
## Usage
diff --git a/tools/asm-differ/diff.py b/tools/asm-differ/diff.py
index 4b5bc892e..230dbaed7 100755
--- a/tools/asm-differ/diff.py
+++ b/tools/asm-differ/diff.py
@@ -1,6 +1,7 @@
#!/usr/bin/env python3
# PYTHON_ARGCOMPLETE_OK
import argparse
+import enum
import sys
from typing import (
Any,
@@ -28,6 +29,14 @@ def static_assert_unreachable(x: NoReturn) -> NoReturn:
raise Exception("Unreachable! " + repr(x))
+class DiffMode(enum.Enum):
+ SINGLE = "single"
+ SINGLE_BASE = "single_base"
+ NORMAL = "normal"
+ THREEWAY_PREV = "3prev"
+ THREEWAY_BASE = "3base"
+
+
# ==== COMMAND-LINE ====
if __name__ == "__main__":
@@ -201,11 +210,11 @@ if __name__ == "__main__":
)
parser.add_argument(
"-s",
- "--stop-jr-ra",
- dest="stop_jrra",
+ "--stop-at-ret",
+ dest="stop_at_ret",
action="store_true",
- help="""Stop disassembling at the first 'jr ra'. Some functions have
- multiple return points, so use with care!""",
+ help="""Stop disassembling at the first return instruction.
+ Some functions have multiple return points, so use with care!""",
)
parser.add_argument(
"-i",
@@ -228,6 +237,13 @@ if __name__ == "__main__":
action="store_false",
help="Don't visualize branches/branch targets.",
)
+ parser.add_argument(
+ "-R",
+ "--no-show-rodata-refs",
+ dest="show_rodata_refs",
+ action="store_false",
+ help="Don't show .rodata -> .text references (typically from jump tables).",
+ )
parser.add_argument(
"-S",
"--base-shift",
@@ -248,21 +264,37 @@ if __name__ == "__main__":
help="""Automatically update when source/object files change.
Recommended in combination with -m.""",
)
+ parser.add_argument(
+ "-0",
+ "--diff_mode=single_base",
+ dest="diff_mode",
+ action="store_const",
+ const=DiffMode.SINGLE_BASE,
+ help="""View the base asm only (not a diff).""",
+ )
+ parser.add_argument(
+ "-1",
+ "--diff_mode=single",
+ dest="diff_mode",
+ action="store_const",
+ const=DiffMode.SINGLE,
+ help="""View the current asm only (not a diff).""",
+ )
parser.add_argument(
"-3",
"--threeway=prev",
- dest="threeway",
+ dest="diff_mode",
action="store_const",
- const="prev",
+ const=DiffMode.THREEWAY_PREV,
help="""Show a three-way diff between target asm, current asm, and asm
prior to -w rebuild. Requires -w.""",
)
parser.add_argument(
"-b",
"--threeway=base",
- dest="threeway",
+ dest="diff_mode",
action="store_const",
- const="base",
+ const=DiffMode.THREEWAY_BASE,
help="""Show a three-way diff between target asm, current asm, and asm
when diff.py was started. Requires -w.""",
)
@@ -336,11 +368,9 @@ if __name__ == "__main__":
# (We do imports late to optimize auto-complete performance.)
import abc
-import ast
from collections import Counter, defaultdict
from dataclasses import asdict, dataclass, field, replace
import difflib
-import enum
import html
import itertools
import json
@@ -357,7 +387,7 @@ import traceback
MISSING_PREREQUISITES = (
"Missing prerequisite python module {}. "
- "Run `python3 -m pip install --user colorama watchdog python-Levenshtein cxxfilt` to install prerequisites (cxxfilt only needed with --source)."
+ "Run `python3 -m pip install --user colorama watchdog levenshtein cxxfilt` to install prerequisites (cxxfilt only needed with --source)."
)
try:
@@ -376,7 +406,8 @@ class ProjectSettings:
objdump_flags: List[str]
build_command: List[str]
map_format: str
- mw_build_dir: str
+ build_dir: str
+ ms_map_address_offset: int
baseimg: Optional[str]
myimg: Optional[str]
mapfile: Optional[str]
@@ -384,6 +415,8 @@ class ProjectSettings:
source_extensions: List[str]
show_line_numbers_default: bool
disassemble_all: bool
+ reg_categories: Dict[str, int]
+ expected_dir: str
@dataclass
@@ -408,17 +441,19 @@ class Config:
# Display options
formatter: "Formatter"
- threeway: Optional[str]
+ diff_mode: DiffMode
base_shift: int
skip_lines: int
compress: Optional[Compress]
+ show_rodata_refs: bool
show_branches: bool
show_line_numbers: bool
show_source: bool
- stop_jrra: bool
+ stop_at_ret: bool
ignore_large_imms: bool
ignore_addr_diffs: bool
algorithm: str
+ reg_categories: Dict[str, int]
# Score options
score_stack_differences = True
@@ -444,10 +479,13 @@ def create_project_settings(settings: Dict[str, Any]) -> ProjectSettings:
),
objdump_executable=get_objdump_executable(settings.get("objdump_executable")),
objdump_flags=settings.get("objdump_flags", []),
+ expected_dir=settings.get("expected_dir", "expected/"),
map_format=settings.get("map_format", "gnu"),
- mw_build_dir=settings.get("mw_build_dir", "build/"),
+ ms_map_address_offset=settings.get("ms_map_address_offset", 0),
+ build_dir=settings.get("build_dir", settings.get("mw_build_dir", "build/")),
show_line_numbers_default=settings.get("show_line_numbers_default", True),
disassemble_all=settings.get("disassemble_all", False),
+ reg_categories=settings.get("reg_categories", {}),
)
@@ -493,19 +531,21 @@ def create_config(args: argparse.Namespace, project: ProjectSettings) -> Config:
max_function_size_bytes=args.max_lines * 4,
# Display options
formatter=formatter,
- threeway=args.threeway,
+ diff_mode=args.diff_mode or DiffMode.NORMAL,
base_shift=eval_int(
args.base_shift, "Failed to parse --base-shift (-S) argument as an integer."
),
skip_lines=args.skip_lines,
compress=compress,
+ show_rodata_refs=args.show_rodata_refs,
show_branches=args.show_branches,
show_line_numbers=show_line_numbers,
show_source=args.show_source or args.source_old_binutils,
- stop_jrra=args.stop_jrra,
+ stop_at_ret=args.stop_at_ret,
ignore_large_imms=args.ignore_large_imms,
ignore_addr_diffs=args.ignore_addr_diffs,
algorithm=args.algorithm,
+ reg_categories=project.reg_categories,
)
@@ -563,6 +603,7 @@ class BasicFormat(enum.Enum):
IMMEDIATE = enum.auto()
STACK = enum.auto()
REGISTER = enum.auto()
+ REGISTER_CATEGORY = enum.auto()
DELAY_SLOT = enum.auto()
DIFF_CHANGE = enum.auto()
DIFF_ADD = enum.auto()
@@ -662,11 +703,19 @@ class Text:
@dataclass
-class TableMetadata:
+class TableLine:
+ key: Optional[str]
+ is_data_ref: bool
+ cells: Tuple[Tuple[Text, Optional["Line"]], ...]
+
+
+@dataclass
+class TableData:
headers: Tuple[Text, ...]
current_score: int
max_score: int
previous_score: Optional[int]
+ lines: List[TableLine]
class Formatter(abc.ABC):
@@ -676,7 +725,7 @@ class Formatter(abc.ABC):
...
@abc.abstractmethod
- def table(self, meta: TableMetadata, lines: List[Tuple["OutputLine", ...]]) -> str:
+ def table(self, data: TableData) -> str:
"""Format a multi-column table with metadata"""
...
@@ -684,8 +733,8 @@ class Formatter(abc.ABC):
return "".join(self.apply_format(chunk, f) for chunk, f in text.segments)
@staticmethod
- def outputline_texts(lines: Tuple["OutputLine", ...]) -> Tuple[Text, ...]:
- return tuple([lines[0].base or Text()] + [line.fmt2 for line in lines[1:]])
+ def outputline_texts(line: TableLine) -> Tuple[Text, ...]:
+ return tuple(cell[0] for cell in line.cells)
@dataclass
@@ -695,8 +744,8 @@ class PlainFormatter(Formatter):
def apply_format(self, chunk: str, f: Format) -> str:
return chunk
- def table(self, meta: TableMetadata, lines: List[Tuple["OutputLine", ...]]) -> str:
- rows = [meta.headers] + [self.outputline_texts(ls) for ls in lines]
+ def table(self, data: TableData) -> str:
+ rows = [data.headers] + [self.outputline_texts(line) for line in data.lines]
return "\n".join(
"".join(self.apply(x.ljust(self.column_width)) for x in row) for row in rows
)
@@ -709,12 +758,14 @@ class AnsiFormatter(Formatter):
STYLE_UNDERLINE = "\x1b[4m"
STYLE_NO_UNDERLINE = "\x1b[24m"
STYLE_INVERT = "\x1b[7m"
+ STYLE_RESET = "\x1b[0m"
BASIC_ANSI_CODES = {
BasicFormat.NONE: "",
BasicFormat.IMMEDIATE: Fore.LIGHTBLUE_EX,
BasicFormat.STACK: Fore.YELLOW,
BasicFormat.REGISTER: Fore.YELLOW,
+ BasicFormat.REGISTER_CATEGORY: Fore.LIGHTYELLOW_EX,
BasicFormat.DELAY_SLOT: Fore.LIGHTBLACK_EX,
BasicFormat.DIFF_CHANGE: Fore.LIGHTBLUE_EX,
BasicFormat.DIFF_ADD: Fore.GREEN,
@@ -761,14 +812,19 @@ class AnsiFormatter(Formatter):
static_assert_unreachable(f)
return f"{ansi_code}{chunk}{undo_ansi_code}"
- def table(self, meta: TableMetadata, lines: List[Tuple["OutputLine", ...]]) -> str:
- rows = [(meta.headers, False)] + [
- (self.outputline_texts(line), line[1].is_data_ref) for line in lines
+ def table(self, data: TableData) -> str:
+ rows = [(data.headers, False)] + [
+ (
+ self.outputline_texts(line),
+ line.is_data_ref,
+ )
+ for line in data.lines
]
return "\n".join(
"".join(
(self.STYLE_INVERT if is_data_ref else "")
+ self.apply(x.ljust(self.column_width))
+ + (self.STYLE_RESET if is_data_ref else "")
for x in row
)
for (row, is_data_ref) in rows
@@ -794,7 +850,7 @@ class HtmlFormatter(Formatter):
static_assert_unreachable(f)
return f"{chunk}"
- def table(self, meta: TableMetadata, lines: List[Tuple["OutputLine", ...]]) -> str:
+ def table(self, data: TableData) -> str:
def table_row(line: Tuple[Text, ...], is_data_ref: bool, cell_el: str) -> str:
tr_attrs = " class='data-ref'" if is_data_ref else ""
output_row = f" "
@@ -806,12 +862,12 @@ class HtmlFormatter(Formatter):
output = "\n"
output += " \n"
- output += table_row(meta.headers, False, "th")
+ output += table_row(data.headers, False, "th")
output += " \n"
output += " \n"
output += "".join(
- table_row(self.outputline_texts(line), line[1].is_data_ref, "td")
- for line in lines
+ table_row(self.outputline_texts(line), line.is_data_ref, "td")
+ for line in data.lines
)
output += " \n"
output += "
\n"
@@ -826,7 +882,7 @@ class JsonFormatter(Formatter):
# This method is unused by this formatter
return NotImplemented
- def table(self, meta: TableMetadata, rows: List[Tuple["OutputLine", ...]]) -> str:
+ def table(self, data: TableData) -> str:
def serialize_format(s: str, f: Format) -> Dict[str, Any]:
if f == BasicFormat.NONE:
return {"text": s}
@@ -844,29 +900,25 @@ class JsonFormatter(Formatter):
return []
return [serialize_format(s, f) for s, f in text.segments]
- is_threeway = len(meta.headers) == 3
-
output: Dict[str, Any] = {}
output["arch_str"] = self.arch_str
output["header"] = {
name: serialize(h)
- for h, name in zip(meta.headers, ("base", "current", "previous"))
+ for h, name in zip(data.headers, ("base", "current", "previous"))
}
- output["current_score"] = meta.current_score
- output["max_score"] = meta.max_score
- if meta.previous_score is not None:
- output["previous_score"] = meta.previous_score
+ output["current_score"] = data.current_score
+ output["max_score"] = data.max_score
+ if data.previous_score is not None:
+ output["previous_score"] = data.previous_score
output_rows: List[Dict[str, Any]] = []
- for row in rows:
+ for row in data.lines:
output_row: Dict[str, Any] = {}
- output_row["key"] = row[0].key2
- output_row["is_data_ref"] = row[1].is_data_ref
- iters = [
- ("base", row[0].base, row[0].line1),
- ("current", row[1].fmt2, row[1].line2),
+ output_row["key"] = row.key
+ output_row["is_data_ref"] = row.is_data_ref
+ iters: List[Tuple[str, Text, Optional[Line]]] = [
+ (label, *cell)
+ for label, cell in zip(("base", "current", "previous"), row.cells)
]
- if is_threeway:
- iters.append(("previous", row[2].fmt2, row[2].line2))
if all(line is None for _, _, line in iters):
# Skip rows that were only for displaying source code
continue
@@ -935,10 +987,41 @@ def symbol_formatter(group: str, base_index: int) -> FormatFunction:
ObjdumpCommand = Tuple[List[str], str, Optional[str]]
+# eval_expr adapted from https://stackoverflow.com/a/9558001
+
+import ast
+import operator as op
+
+# supported operators
+operators: Dict[Type[Union[ast.operator, ast.unaryop]], Any] = {
+ ast.Add: op.add,
+ ast.Sub: op.sub,
+ ast.Mult: op.mul,
+ ast.Div: op.truediv,
+ ast.Pow: op.pow,
+ ast.BitXor: op.xor,
+ ast.USub: op.neg,
+}
+
+
+def eval_expr(expr: str) -> Any:
+ return eval_(ast.parse(expr, mode="eval").body)
+
+
+def eval_(node: ast.AST) -> Any:
+ if isinstance(node, ast.Num): #
+ return node.n
+ elif isinstance(node, ast.BinOp): #
+ return operators[type(node.op)](eval_(node.left), eval_(node.right))
+ elif isinstance(node, ast.UnaryOp): # e.g., -1
+ return operators[type(node.op)](eval_(node.operand))
+ else:
+ raise TypeError(node)
+
def maybe_eval_int(expr: str) -> Optional[int]:
try:
- ret = ast.literal_eval(expr)
+ ret = eval_expr(expr)
if not isinstance(ret, int):
raise Exception("not an integer")
return ret
@@ -1056,7 +1139,7 @@ def preprocess_objdump_out(
out = out[out.find("\n") + 1 :]
out = out.rstrip("\n")
- if obj_data:
+ if obj_data and config.show_rodata_refs:
out = (
serialize_rodata_references(parse_elf_rodata_references(obj_data, config))
+ out
@@ -1065,8 +1148,27 @@ def preprocess_objdump_out(
return out
+def search_build_objects(objname: str, project: ProjectSettings) -> Optional[str]:
+ objfiles = [
+ os.path.join(dirpath, f)
+ for dirpath, _, filenames in os.walk(project.build_dir)
+ for f in filenames
+ if f == objname
+ ]
+ if len(objfiles) > 1:
+ all_objects = "\n".join(objfiles)
+ fail(
+ f"Found multiple objects of the same name {objname} in {project.build_dir}, "
+ f"cannot determine which to diff against: \n{all_objects}"
+ )
+ if len(objfiles) == 1:
+ return objfiles[0]
+
+ return None
+
+
def search_map_file(
- fn_name: str, project: ProjectSettings, config: Config
+ fn_name: str, project: ProjectSettings, config: Config, *, for_binary: bool
) -> Tuple[Optional[str], Optional[int]]:
if not project.mapfile:
fail(f"No map file configured; cannot find function {fn_name}.")
@@ -1078,6 +1180,12 @@ def search_map_file(
fail(f"Failed to open map file {project.mapfile} for reading.")
if project.map_format == "gnu":
+ if for_binary and "load address" not in contents:
+ fail(
+ 'Failed to find "load address" in map file. Maybe you need to add\n'
+ '"export LANG := C" to your Makefile to avoid localized output?'
+ )
+
lines = contents.split("\n")
try:
@@ -1093,10 +1201,12 @@ def search_map_file(
ram = int(tokens[1], 0)
rom = int(tokens[5], 0)
ram_to_rom = rom - ram
- if line.endswith(" " + fn_name):
+ if line.endswith(" " + fn_name) or f" {fn_name} = 0x" in line:
ram = int(line.split()[0], 0)
- if cur_objfile is not None and ram_to_rom is not None:
- cands.append((cur_objfile, ram + ram_to_rom))
+ if (for_binary and ram_to_rom is not None) or (
+ not for_binary and cur_objfile is not None
+ ):
+ cands.append((cur_objfile, ram + (ram_to_rom or 0)))
last_line = line
except Exception as e:
traceback.print_exc()
@@ -1108,16 +1218,14 @@ def search_map_file(
return cands[0]
elif project.map_format == "mw":
find = re.findall(
- re.compile(
- # ram elf rom
- r" \S+ \S+ (\S+) (\S+) . "
- + re.escape(fn_name)
- + r"(?: \(entry of "
- + re.escape(config.diff_section)
- + r"\))? \t"
- # object name
- + "(\S+)"
- ),
+ # ram elf rom alignment
+ r" \S+ \S+ (\S+) (\S+) +\S+ "
+ + re.escape(fn_name)
+ + r"(?: \(entry of "
+ + re.escape(config.diff_section)
+ + r"\))? \t"
+ # object name
+ + "(\S+)",
contents,
)
if len(find) > 1:
@@ -1125,27 +1233,56 @@ def search_map_file(
if len(find) == 1:
rom = int(find[0][1], 16)
objname = find[0][2]
- # The metrowerks linker map format does not contain the full object path,
- # so we must complete it manually.
- objfiles = [
- os.path.join(dirpath, f)
- for dirpath, _, filenames in os.walk(project.mw_build_dir)
- for f in filenames
- if f == objname
- ]
- if len(objfiles) > 1:
- all_objects = "\n".join(objfiles)
- fail(
- f"Found multiple objects of the same name {objname} in {project.mw_build_dir}, "
- f"cannot determine which to diff against: \n{all_objects}"
- )
- if len(objfiles) == 1:
- objfile = objfiles[0]
- # TODO Currently the ram-rom conversion only works for diffing ELF
- # executables, but it would likely be more convenient to diff DOLs.
- # At this time it is recommended to always use -o when running the diff
- # script as this mode does not make use of the ram-rom conversion.
+ objfile = search_build_objects(objname, project)
+
+ # TODO Currently the ram-rom conversion only works for diffing ELF
+ # executables, but it would likely be more convenient to diff DOLs.
+ # At this time it is recommended to always use -o when running the diff
+ # script as this mode does not make use of the ram-rom conversion.
+ if objfile is not None:
return objfile, rom
+ elif project.map_format == "ms":
+ load_address_find = re.search(
+ r"Preferred load address is ([0-9a-f]+)",
+ contents,
+ )
+ if not load_address_find:
+ fail(f"Couldn't find module load address in map file.")
+ load_address = int(load_address_find.group(1), 16)
+
+ diff_segment_find = re.search(
+ r"([0-9a-f]+):[0-9a-f]+ [0-9a-f]+H " + re.escape(config.diff_section),
+ contents,
+ )
+ if not diff_segment_find:
+ fail(f"Couldn't find segment for section in map file.")
+ diff_segment = diff_segment_find.group(1)
+
+ find = re.findall(
+ r" (?:"
+ + re.escape(diff_segment)
+ + r")\S+\s+(?:"
+ + re.escape(fn_name)
+ + r")\s+\S+ ... \S+",
+ contents,
+ )
+ if len(find) > 1:
+ fail(f"Found multiple occurrences of function {fn_name} in map file.")
+ if len(find) == 1:
+ names_find = re.search(r"(\S+) ... (\S+)", find[0])
+ assert names_find is not None
+ fileofs = (
+ int(names_find.group(1), 16)
+ - load_address
+ + project.ms_map_address_offset
+ )
+ if for_binary:
+ return None, fileofs
+
+ objname = names_find.group(2)
+ objfile = search_build_objects(objname, project)
+ if objfile is not None:
+ return objfile, fileofs
else:
fail(f"Linker map format {project.map_format} unrecognised.")
return None, None
@@ -1161,6 +1298,8 @@ def parse_elf_rodata_references(
SHT_SYMTAB = 2
SHT_REL = 9
SHT_RELA = 4
+ R_MIPS_32 = 2
+ R_MIPS_GPREL32 = 12
is_32bit = e_ident[4] == 1
is_little_endian = e_ident[5] == 1
@@ -1234,7 +1373,7 @@ def parse_elf_rodata_references(
# Skip section_name -> section_name references
continue
sec_name = sec_names[s.sh_info].decode("latin1")
- if sec_name != ".rodata":
+ if sec_name not in (".rodata", ".late_rodata"):
continue
sec_base = sections[s.sh_info].sh_offset
for i in range(0, s.sh_size, s.sh_entsize):
@@ -1259,7 +1398,7 @@ def parse_elf_rodata_references(
)
if st_shndx == text_section:
if s.sh_type == SHT_REL:
- if e_machine == 8 and r_type == 2: # R_MIPS_32
+ if e_machine == 8 and r_type in (R_MIPS_32, R_MIPS_GPREL32):
(r_addend,) = read("I", sec_base + r_offset)
else:
continue
@@ -1325,7 +1464,7 @@ def dump_objfile(
objfile = config.objfile
if not objfile:
- objfile, _ = search_map_file(start, project, config)
+ objfile, _ = search_map_file(start, project, config, for_binary=False)
if not objfile:
fail("Not able to find .o file for function.")
@@ -1336,8 +1475,8 @@ def dump_objfile(
if not os.path.isfile(objfile):
fail(f"Not able to find .o file for function: {objfile} is not a file.")
- refobjfile = "expected/" + objfile
- if not os.path.isfile(refobjfile):
+ refobjfile = os.path.join(project.expected_dir, objfile)
+ if config.diff_mode != DiffMode.SINGLE and not os.path.isfile(refobjfile):
fail(f'Please ensure an OK .o file exists at "{refobjfile}".')
if project.disassemble_all:
@@ -1362,7 +1501,7 @@ def dump_binary(
run_make(project.myimg, project)
start_addr = maybe_eval_int(start)
if start_addr is None:
- _, start_addr = search_map_file(start, project, config)
+ _, start_addr = search_map_file(start, project, config, for_binary=True)
if start_addr is None:
fail("Not able to find function in map file.")
if end is not None:
@@ -1391,8 +1530,13 @@ class AsmProcessor:
def __init__(self, config: Config) -> None:
self.config = config
- def process_reloc(self, row: str, prev: str) -> str:
- return prev
+ def pre_process(
+ self, mnemonic: str, args: str, next_row: Optional[str]
+ ) -> Tuple[str, str]:
+ return mnemonic, args
+
+ def process_reloc(self, row: str, prev: str) -> Tuple[str, Optional[str]]:
+ return prev, None
def normalize(self, mnemonic: str, row: str) -> str:
"""This should be called exactly once for each line."""
@@ -1408,28 +1552,24 @@ class AsmProcessor:
def post_process(self, lines: List["Line"]) -> None:
return
+ def is_end_of_function(self, mnemonic: str, args: str) -> bool:
+ return False
+
class AsmProcessorMIPS(AsmProcessor):
- def process_reloc(self, row: str, prev: str) -> str:
+ def __init__(self, config: Config) -> None:
+ super().__init__(config)
+ self.seen_jr_ra = False
+
+ def process_reloc(self, row: str, prev: str) -> Tuple[str, Optional[str]]:
arch = self.config.arch
if "R_MIPS_NONE" in row or "R_MIPS_JALR" in row:
# GNU as emits no-op relocations immediately after real ones when
# assembling with -mabi=64. Return without trying to parse 'imm' as an
# integer.
- return prev
+ return prev, None
before, imm, after = parse_relocated_line(prev)
- repl = row.split()[-1]
- if imm != "0":
- # MIPS uses relocations with addends embedded in the code as immediates.
- # If there is an immediate, show it as part of the relocation. Ideally
- # we'd show this addend in both %lo/%hi, but annoyingly objdump's output
- # doesn't include enough information to pair up %lo's and %hi's...
- # TODO: handle unambiguous cases where all addends for a symbol are the
- # same, or show "+???".
- mnemonic = prev.split()[0]
- if mnemonic in arch.instructions_with_address_immediates:
- imm = hex(int(imm, 16))
- repl += ("" if imm.startswith("-") else "+") + imm
+ repl = row.split()[-1] + reloc_addend_from_imm(imm, before, self.config.arch)
if "R_MIPS_LO16" in row:
repl = f"%lo({repl})"
elif "R_MIPS_HI16" in row:
@@ -1452,20 +1592,57 @@ class AsmProcessorMIPS(AsmProcessor):
repl = f"%call16({repl})"
else:
assert False, f"unknown relocation type '{row}' for line '{prev}'"
- return before + repl + after
+ return before + repl + after, repl
+
+ def is_end_of_function(self, mnemonic: str, args: str) -> bool:
+ if self.seen_jr_ra:
+ return True
+ if mnemonic == "jr" and args == "ra":
+ self.seen_jr_ra = True
+ return False
class AsmProcessorPPC(AsmProcessor):
- def process_reloc(self, row: str, prev: str) -> str:
+ def pre_process(
+ self, mnemonic: str, args: str, next_row: Optional[str]
+ ) -> Tuple[str, str]:
+
+ if next_row and "R_PPC_EMB_SDA21" in next_row:
+ # With sda21 relocs, the linker transforms `r0` into `r2`/`r13`, and
+ # we may encounter this in either pre-transformed or post-transformed
+ # versions depending on if the .o file comes from compiler output or
+ # from disassembly. Normalize, to make sure both forms are treated as
+ # equivalent.
+
+ args = args.replace("(r2)", "(0)")
+ args = args.replace("(r13)", "(0)")
+ args = args.replace(",r2,", ",0,")
+ args = args.replace(",r13,", ",0,")
+
+ # We want to convert li and lis with an sda21 reloc,
+ # because the r0 to r2/r13 transformation results in
+ # turning an li/lis into an addi/addis with r2/r13 arg
+ # our preprocessing normalizes all versions to addi with a 0 arg
+ if mnemonic in {"li", "lis"}:
+ mnemonic = mnemonic.replace("li", "addi")
+ args_parts = args.split(",")
+ args = args_parts[0] + ",0," + args_parts[1]
+
+ return mnemonic, args
+
+ def process_reloc(self, row: str, prev: str) -> Tuple[str, Optional[str]]:
arch = self.config.arch
assert any(
- r in row for r in ["R_PPC_REL24", "R_PPC_ADDR16", "R_PPC_EMB_SDA21"]
+ r in row
+ for r in ["R_PPC_REL24", "R_PPC_ADDR16", "R_PPC_EMB_SDA21", "R_PPC_REL14"]
), f"unknown relocation type '{row}' for line '{prev}'"
before, imm, after = parse_relocated_line(prev)
repl = row.split()[-1]
if "R_PPC_REL24" in row:
# function calls
pass
+ if "R_PPC_REL14" in row:
+ pass
elif "R_PPC_ADDR16_HI" in row:
# absolute hi of addr
repl = f"{repl}@h"
@@ -1483,17 +1660,30 @@ class AsmProcessorPPC(AsmProcessor):
if int(repl.split("+")[1], 16) > 0x70000000:
repl = repl.split("+")[0]
elif "R_PPC_EMB_SDA21" in row:
- # small data area
- pass
- return before + repl + after
+ # sda21 relocations; r2/r13 --> 0 swaps are performed in pre_process
+ repl = f"{repl}@sda21"
+
+ return before + repl + after, repl
+
+ def is_end_of_function(self, mnemonic: str, args: str) -> bool:
+ return mnemonic == "blr"
class AsmProcessorARM32(AsmProcessor):
- def process_reloc(self, row: str, prev: str) -> str:
+ def process_reloc(self, row: str, prev: str) -> Tuple[str, Optional[str]]:
arch = self.config.arch
+ if "R_ARM_V4BX" in row:
+ # R_ARM_V4BX converts "bx " to "mov pc," for some targets.
+ # Ignore for now.
+ return prev, None
+ if "R_ARM_ABS32" in row and not prev.startswith(".word"):
+ # Don't crash on R_ARM_ABS32 relocations incorrectly applied to code.
+ # (We may want to do something more fancy here that actually shows the
+ # related symbol, but this serves as a stop-gap.)
+ return prev, None
before, imm, after = parse_relocated_line(prev)
- repl = row.split()[-1]
- return before + repl + after
+ repl = row.split()[-1] + reloc_addend_from_imm(imm, before, self.config.arch)
+ return before + repl + after, repl
def _normalize_arch_specific(self, mnemonic: str, row: str) -> str:
if self.config.ignore_addr_diffs:
@@ -1577,6 +1767,51 @@ class AsmProcessorAArch64(AsmProcessor):
return row
+class AsmProcessorI686(AsmProcessor):
+ def process_reloc(self, row: str, prev: str) -> Tuple[str, Optional[str]]:
+ repl = row.split()[-1]
+ mnemonic, args = prev.split(maxsplit=1)
+
+ addr_imm = re.search(r"(? bool:
+ return mnemonic == "ret"
+
+
@dataclass
class ArchSettings:
name: str
@@ -1701,6 +1936,76 @@ PPC_BRANCH_INSTRUCTIONS = {
"bgt-",
}
+I686_BRANCH_INSTRUCTIONS = {
+ "call",
+ "jmp",
+ "ljmp",
+ "ja",
+ "jae",
+ "jb",
+ "jbe",
+ "jc",
+ "jcxz",
+ "jecxz",
+ "jrcxz",
+ "je",
+ "jg",
+ "jge",
+ "jl",
+ "jle",
+ "jna",
+ "jnae",
+ "jnb",
+ "jnbe",
+ "jnc",
+ "jne",
+ "jng",
+ "jnge",
+ "jnl",
+ "jnle",
+ "jno",
+ "jnp",
+ "jns",
+ "jnz",
+ "jo",
+ "jp",
+ "jpe",
+ "jpo",
+ "js",
+ "jz",
+ "ja",
+ "jae",
+ "jb",
+ "jbe",
+ "jc",
+ "je",
+ "jz",
+ "jg",
+ "jge",
+ "jl",
+ "jle",
+ "jna",
+ "jnae",
+ "jnb",
+ "jnbe",
+ "jnc",
+ "jne",
+ "jng",
+ "jnge",
+ "jnl",
+ "jnle",
+ "jno",
+ "jnp",
+ "jns",
+ "jnz",
+ "jo",
+ "jp",
+ "jpe",
+ "jpo",
+ "js",
+ "jz",
+}
+
MIPS_SETTINGS = ArchSettings(
name="mips",
re_int=re.compile(r"[0-9]+"),
@@ -1713,18 +2018,26 @@ MIPS_SETTINGS = ArchSettings(
re_reg=re.compile(r"\$?\b([astv][0-9]|at|f[astv]?[0-9]+f?|kt?[01]|fp|ra|zero)\b"),
re_sprel=re.compile(r"(?<=,)([0-9]+|0x[0-9a-f]+)\(sp\)"),
re_large_imm=re.compile(r"-?[1-9][0-9]{2,}|-?0x[0-9a-f]{3,}"),
- re_imm=re.compile(r"(\b|-)([0-9]+|0x[0-9a-fA-F]+)\b(?!\(sp)|%(lo|hi)\([^)]*\)"),
+ re_imm=re.compile(
+ r"(\b|-)([0-9]+|0x[0-9a-fA-F]+)\b(?!\(sp)|%(lo|hi|got|gp_rel|call16)\([^)]*\)"
+ ),
re_reloc=re.compile(r"R_MIPS_"),
arch_flags=["-m", "mips:4300"],
branch_likely_instructions=MIPS_BRANCH_LIKELY_INSTRUCTIONS,
branch_instructions=MIPS_BRANCH_INSTRUCTIONS,
- instructions_with_address_immediates=MIPS_BRANCH_INSTRUCTIONS.union({"jal", "j"}),
+ instructions_with_address_immediates=MIPS_BRANCH_INSTRUCTIONS.union({"j", "jal"}),
delay_slot_instructions=MIPS_BRANCH_INSTRUCTIONS.union({"j", "jal", "jr", "jalr"}),
proc=AsmProcessorMIPS,
)
MIPSEL_SETTINGS = replace(MIPS_SETTINGS, name="mipsel", big_endian=False)
+MIPSEE_SETTINGS = replace(
+ MIPSEL_SETTINGS, name="mipsee", arch_flags=["-m", "mips:5900"]
+)
+
+MIPS_ARCH_NAMES = {"mips", "mipsel", "mipsee"}
+
ARM32_SETTINGS = ArchSettings(
name="arm32",
re_int=re.compile(r"[0-9]+"),
@@ -1773,23 +2086,56 @@ PPC_SETTINGS = ArchSettings(
name="ppc",
re_int=re.compile(r"[0-9]+"),
re_comment=re.compile(r"(<.*>|//.*$)"),
- re_reg=re.compile(r"\$?\b([rf][0-9]+)\b"),
+ # r1 not included
+ re_reg=re.compile(r"\$?\b([rf](?:[02-9]|[1-9][0-9]+)|f1)\b"),
re_sprel=re.compile(r"(?<=,)(-?[0-9]+|-?0x[0-9a-f]+)\(r1\)"),
re_large_imm=re.compile(r"-?[1-9][0-9]{2,}|-?0x[0-9a-f]{3,}"),
- re_imm=re.compile(r"(\b|-)([0-9]+|0x[0-9a-fA-F]+)\b(?!\(r1)|[^@]*@(ha|h|lo)"),
+ re_imm=re.compile(
+ r"(\b|-)([0-9]+|0x[0-9a-fA-F]+)\b(?!\(r1)|[^ \t,]+@(l|ha|h|sda21)"
+ ),
re_reloc=re.compile(r"R_PPC_"),
+ arch_flags=["-m", "powerpc", "-M", "broadway"],
branch_instructions=PPC_BRANCH_INSTRUCTIONS,
instructions_with_address_immediates=PPC_BRANCH_INSTRUCTIONS.union({"bl"}),
proc=AsmProcessorPPC,
)
+I686_SETTINGS = ArchSettings(
+ name="i686",
+ re_int=re.compile(r"[0-9]+"),
+ re_comment=re.compile(r"<.*>"),
+ # Includes:
+ # - (e)a-d(x,l,h)
+ # - (e)s,d,b(i,p)(l)
+ # - cr0-7
+ # - x87 st
+ # - MMX, SSE vector registers
+ # - cursed registers: eal ebl ebh edl edh...
+ re_reg=re.compile(
+ r"\%?\b(e?(([sd]i|[sb]p)l?|[abcd][xhl])|[cdesfg]s|cr[0-7]|x?mm[0-7]|st)\b"
+ ),
+ re_large_imm=re.compile(r"-?[1-9][0-9]{2,}|-?0x[0-9a-f]{3,}"),
+ re_sprel=re.compile(r"-?(0x[0-9a-f]+|[0-9]+)(?=\((%ebp|%esi)\))"),
+ re_imm=re.compile(r"-?(0x[0-9a-f]+|[0-9]+)"),
+ re_reloc=re.compile(r"R_386_"),
+ # The x86 architecture has a variable instruction length. The raw bytes of
+ # an instruction as displayed by objdump can line wrap if it's long enough.
+ # This destroys the objdump output processor logic, so we avoid this.
+ arch_flags=["-m", "i386", "--no-show-raw-insn"],
+ branch_instructions=I686_BRANCH_INSTRUCTIONS,
+ instructions_with_address_immediates=I686_BRANCH_INSTRUCTIONS.union({"mov"}),
+ proc=AsmProcessorI686,
+)
+
ARCH_SETTINGS = [
MIPS_SETTINGS,
MIPSEL_SETTINGS,
+ MIPSEE_SETTINGS,
ARM32_SETTINGS,
ARMEL_SETTINGS,
AARCH64_SETTINGS,
PPC_SETTINGS,
+ I686_SETTINGS,
]
@@ -1822,11 +2168,31 @@ def parse_relocated_line(line: str) -> Tuple[str, str, str]:
imm, after = after, ""
else:
imm, after = after[:ind2], after[ind2:]
- if imm == "0x0":
- imm = "0"
return before, imm, after
+def reloc_addend_from_imm(imm: str, before: str, arch: ArchSettings) -> str:
+ """For architectures like MIPS where relocations have addends embedded in
+ the code as immediates, convert such an immediate into an addition/
+ subtraction that can occur just after the symbol."""
+ # TODO this is incorrect for MIPS %lo/%hi which need to be paired up
+ # and combined. In practice, this means we only get symbol offsets within
+ # %lo, while %hi just shows the symbol. Unfortunately, objdump's output
+ # loses relocation order, so we cannot do this without parsing ELF relocs
+ # ourselves...
+ mnemonic = before.split()[0]
+ if mnemonic in arch.instructions_with_address_immediates:
+ addend = int(imm, 16)
+ else:
+ addend = int(imm, 0)
+ if addend == 0:
+ return ""
+ elif addend < 0:
+ return hex(addend)
+ else:
+ return "+" + hex(addend)
+
+
def pad_mnemonic(line: str) -> str:
if "\t" not in line:
return line
@@ -1841,6 +2207,7 @@ class Line:
original: str
normalized_original: str
scorable_line: str
+ symbol: Optional[str] = None
line_num: Optional[int] = None
branch_target: Optional[int] = None
data_pool_addr: Optional[int] = None
@@ -1896,10 +2263,8 @@ def process(dump: str, config: Config) -> List[Line]:
if not re.match(r"^\s+[0-9a-f]+:\s+", row):
# This regex is conservative, and assumes the file path does not contain "weird"
- # characters like colons, tabs, or angle brackets.
- if re.match(
- r"^[^ \t<>:][^\t<>:]*:[0-9]+( \(discriminator [0-9]+\))?$", row
- ):
+ # characters like tabs or angle brackets.
+ if re.match(r"^[^ \t<>][^\t<>]*:[0-9]+( \(discriminator [0-9]+\))?$", row):
source_filename, _, tail = row.rpartition(":")
source_line_num = int(tail.partition(" ")[0])
source_lines.append(row)
@@ -1919,9 +2284,14 @@ def process(dump: str, config: Config) -> List[Line]:
line_num_str = row.split(":")[0]
row = row.rstrip()
tabs = row.split("\t")
- row = "\t".join(tabs[2:])
line_num = eval_line_num(line_num_str.strip())
+ # TODO: use --no-show-raw-insn for all arches
+ if arch.name == "i686":
+ row = "\t".join(tabs[1:])
+ else:
+ row = "\t".join(tabs[2:])
+
if line_num in data_refs:
refs = data_refs[line_num]
ref_str = "; ".join(
@@ -1943,7 +2313,13 @@ def process(dump: str, config: Config) -> List[Line]:
else:
# powerpc-eabi-objdump doesn't use tabs
row_parts = [part.lstrip() for part in row.split(" ", 1)]
+
mnemonic = row_parts[0].strip()
+ args = row_parts[1].strip() if len(row_parts) >= 2 else ""
+
+ next_line = lines[i] if i < len(lines) else None
+ mnemonic, args = processor.pre_process(mnemonic, args, next_line)
+ row = mnemonic + "\t" + args.replace("\t", " ")
addr = ""
if mnemonic in arch.instructions_with_address_immediates:
@@ -1960,14 +2336,28 @@ def process(dump: str, config: Config) -> List[Line]:
# immediates.
original = row
+ symbol = None
while i < len(lines):
reloc_row = lines[i]
if re.search(arch.re_reloc, reloc_row):
- original = processor.process_reloc(reloc_row, original)
+ original, reloc_symbol = processor.process_reloc(reloc_row, original)
+ if reloc_symbol is not None:
+ symbol = reloc_symbol
else:
break
i += 1
+ is_text_relative_j = False
+ if (
+ arch.name in MIPS_ARCH_NAMES
+ and mnemonic == "j"
+ and symbol is not None
+ and symbol.startswith(".text")
+ ):
+ symbol = None
+ original = row
+ is_text_relative_j = True
+
normalized_original = processor.normalize(mnemonic, original)
scorable_line = normalized_original
@@ -1993,8 +2383,16 @@ def process(dump: str, config: Config) -> List[Line]:
row = normalize_imms(row, arch)
branch_target = None
- if mnemonic in arch.branch_instructions:
- branch_target = int(row_parts[1].strip().split(",")[-1], 16)
+ if (
+ mnemonic in arch.branch_instructions or is_text_relative_j
+ ) and symbol is None:
+ x86_longjmp = re.search(r"\*(.*)\(", args)
+ if x86_longjmp:
+ capture = x86_longjmp.group(1)
+ if capture != "":
+ branch_target = int(capture, 16)
+ else:
+ branch_target = int(args.split(",")[-1], 16)
output.append(
Line(
@@ -2003,6 +2401,7 @@ def process(dump: str, config: Config) -> List[Line]:
original=original,
normalized_original=normalized_original,
scorable_line=scorable_line,
+ symbol=symbol,
line_num=line_num,
branch_target=branch_target,
data_pool_addr=data_pool_addr,
@@ -2015,9 +2414,7 @@ def process(dump: str, config: Config) -> List[Line]:
num_instr += 1
source_lines = []
- if config.stop_jrra and mnemonic == "jr" and row_parts[1].strip() == "ra":
- stop_after_delay_slot = True
- elif stop_after_delay_slot:
+ if config.stop_at_ret and processor.is_end_of_function(mnemonic, args):
break
processor.post_process(output)
@@ -2032,9 +2429,44 @@ def normalize_stack(row: str, arch: ArchSettings) -> str:
return re.sub(arch.re_sprel, "addr(sp)", row)
-def imm_matches_everything(row: str, arch: ArchSettings) -> bool:
- # (this should probably be arch-specific)
- return "(." in row
+def check_for_symbol_mismatch(
+ old_line: Line, new_line: Line, symbol_map: Dict[str, str]
+) -> bool:
+
+ assert old_line.symbol is not None
+ assert new_line.symbol is not None
+
+ if new_line.symbol.startswith("%hi"):
+ return False
+
+ if old_line.symbol not in symbol_map:
+ symbol_map[old_line.symbol] = new_line.symbol
+ return False
+ elif symbol_map[old_line.symbol] == new_line.symbol:
+ return False
+
+ return True
+
+
+def field_matches_any_symbol(field: str, arch: ArchSettings) -> bool:
+ if arch.name == "ppc":
+ if "..." in field:
+ return True
+
+ parts = field.rsplit("@", 1)
+ if len(parts) == 2 and parts[1] in {"l", "h", "ha", "sda21"}:
+ field = parts[0]
+
+ return re.fullmatch((r"^@\d+$"), field) is not None
+
+ if arch.name in MIPS_ARCH_NAMES:
+ return "." in field
+
+ # Example: ".text+0x34"
+ if arch.name == "arm32":
+ return "." in field
+
+ return False
def split_off_address(line: str) -> Tuple[str, str]:
@@ -2058,15 +2490,10 @@ def diff_sequences_difflib(
def diff_sequences(
seq1: List[str], seq2: List[str], algorithm: str
) -> List[Tuple[str, int, int, int, int]]:
- if (
- algorithm != "levenshtein"
- or len(seq1) * len(seq2) > 4 * 10**8
- or len(seq1) + len(seq2) >= 0x110000
- ):
+ if algorithm != "levenshtein":
return diff_sequences_difflib(seq1, seq2)
# The Levenshtein library assumes that we compare strings, not lists. Convert.
- # (Per the check above we know we have fewer than 0x110000 unique elements, so chr() works.)
remapping: Dict[str, str] = {}
def remap(seq: List[str]) -> str:
@@ -2079,8 +2506,16 @@ def diff_sequences(
seq[i] = val
return "".join(seq)
- rem1 = remap(seq1)
- rem2 = remap(seq2)
+ try:
+ rem1 = remap(seq1)
+ rem2 = remap(seq2)
+ except ValueError as e:
+ if len(seq1) + len(seq2) < 0x110000:
+ raise
+ # If there are too many unique elements, chr() doesn't work.
+ # Assume this is the case and fall back to difflib.
+ return diff_sequences_difflib(seq1, seq2)
+
import Levenshtein
ret: List[Tuple[str, int, int, int, int]] = Levenshtein.opcodes(rem1, rem2)
@@ -2113,69 +2548,80 @@ def diff_lines(
return ret
+def diff_sameline(
+ old_line: Line, new_line: Line, config: Config, symbol_map: Dict[str, str]
+) -> Tuple[int, int, bool]:
+
+ old = old_line.scorable_line
+ new = new_line.scorable_line
+ if old == new:
+ return (0, 0, False)
+
+ num_stack_penalties = 0
+ num_regalloc_penalties = 0
+ has_symbol_mismatch = False
+
+ ignore_last_field = False
+ if config.score_stack_differences:
+ oldsp = re.search(config.arch.re_sprel, old)
+ newsp = re.search(config.arch.re_sprel, new)
+ if oldsp and newsp:
+ oldrel = int(oldsp.group(1) or "0", 0)
+ newrel = int(newsp.group(1) or "0", 0)
+ num_stack_penalties += abs(oldrel - newrel)
+ ignore_last_field = True
+
+ # Probably regalloc difference, or signed vs unsigned
+
+ # Compare each field in order
+ new_parts, old_parts = new.split(None, 1), old.split(None, 1)
+ newfields, oldfields = new_parts[1].split(","), old_parts[1].split(",")
+ if ignore_last_field:
+ newfields = newfields[:-1]
+ oldfields = oldfields[:-1]
+ else:
+ # If the last field has a parenthesis suffix, e.g. "0x38(r7)"
+ # we split that part out to make it a separate field
+ # however, we don't split if it has a proceeding % macro, e.g. "%lo(.data)"
+ re_paren = re.compile(r"(? int:
# This logic is copied from `scorer.py` from the decomp permuter project
# https://github.com/simonlindholm/decomp-permuter/blob/main/src/scorer.py
- score = 0
+ num_stack_penalties = 0
+ num_regalloc_penalties = 0
+ num_reordering_penalties = 0
+ num_insertion_penalties = 0
+ num_deletion_penalties = 0
deletions = []
insertions = []
- def lo_hi_match(old: str, new: str) -> bool:
- # TODO: Make this arch-independent, like `imm_matches_everything()`
- old_lo = old.find("%lo")
- old_hi = old.find("%hi")
- new_lo = new.find("%lo")
- new_hi = new.find("%hi")
-
- if old_lo != -1 and new_lo != -1:
- old_idx = old_lo
- new_idx = new_lo
- elif old_hi != -1 and new_hi != -1:
- old_idx = old_hi
- new_idx = new_hi
- else:
- return False
-
- if old[:old_idx] != new[:new_idx]:
- return False
-
- old_inner = old[old_idx + 4 : -1]
- new_inner = new[new_idx + 4 : -1]
- return old_inner.startswith(".") or new_inner.startswith(".")
-
- def diff_sameline(old: str, new: str) -> None:
- nonlocal score
- if old == new:
- return
-
- if lo_hi_match(old, new):
- return
-
- ignore_last_field = False
- if config.score_stack_differences:
- oldsp = re.search(config.arch.re_sprel, old)
- newsp = re.search(config.arch.re_sprel, new)
- if oldsp and newsp:
- oldrel = int(oldsp.group(1) or "0", 0)
- newrel = int(newsp.group(1) or "0", 0)
- score += abs(oldrel - newrel) * config.penalty_stackdiff
- ignore_last_field = True
-
- # Probably regalloc difference, or signed vs unsigned
-
- # Compare each field in order
- newfields, oldfields = new.split(","), old.split(",")
- if ignore_last_field:
- newfields = newfields[:-1]
- oldfields = oldfields[:-1]
- for nf, of in zip(newfields, oldfields):
- if nf != of:
- score += config.penalty_regalloc
- # Penalize any extra fields
- score += abs(len(newfields) - len(oldfields)) * config.penalty_regalloc
-
def diff_insert(line: str) -> None:
# Reordering or totally different codegen.
# Defer this until later when we can tell.
@@ -2205,7 +2651,9 @@ def score_diff_lines(
if max_index is not None and index > max_index:
break
if line1 and line2 and line1.mnemonic == line2.mnemonic:
- diff_sameline(line1.scorable_line, line2.scorable_line)
+ sp, rp, _ = diff_sameline(line1, line2, config, symbol_map)
+ num_stack_penalties += sp
+ num_regalloc_penalties += rp
else:
if line1:
diff_delete(line1.scorable_line)
@@ -2218,13 +2666,17 @@ def score_diff_lines(
ins = insertions_co[item]
dels = deletions_co[item]
common = min(ins, dels)
- score += (
- (ins - common) * config.penalty_insertion
- + (dels - common) * config.penalty_deletion
- + config.penalty_reordering * common
- )
+ num_insertion_penalties += ins - common
+ num_deletion_penalties += dels - common
+ num_reordering_penalties += common
- return score
+ return (
+ num_stack_penalties * config.penalty_stackdiff
+ + num_regalloc_penalties * config.penalty_regalloc
+ + num_reordering_penalties * config.penalty_reordering
+ + num_insertion_penalties * config.penalty_insertion
+ + num_deletion_penalties * config.penalty_deletion
+ )
@dataclass(frozen=True)
@@ -2262,6 +2714,7 @@ def do_diff(lines1: List[Line], lines2: List[Line], config: Config) -> Diff:
arch = config.arch
fmt = config.formatter
output: List[OutputLine] = []
+ symbol_map: Dict[str, str] = {}
sc1 = symbol_formatter("base-reg", 0)
sc2 = symbol_formatter("my-reg", 0)
@@ -2287,7 +2740,6 @@ def do_diff(lines1: List[Line], lines2: List[Line], config: Config) -> Diff:
lines2 = trim_nops(lines2, arch)
diffed_lines = diff_lines(lines1, lines2, config.algorithm)
- max_score = len(lines1) * config.penalty_deletion
line_num_base = -1
line_num_offset = 0
@@ -2372,7 +2824,17 @@ def do_diff(lines1: List[Line], lines2: List[Line], config: Config) -> Diff:
if normalize_imms(branchless1, arch) == normalize_imms(
branchless2, arch
):
- if imm_matches_everything(branchless2, arch):
+ (
+ stack_penalties,
+ regalloc_penalties,
+ has_symbol_mismatch,
+ ) = diff_sameline(line1, line2, config, symbol_map)
+
+ if (
+ regalloc_penalties == 0
+ and stack_penalties == 0
+ and not has_symbol_mismatch
+ ):
# ignore differences due to %lo(.rodata + ...) vs symbol
out1 = out1.reformat(BasicFormat.NONE)
out2 = out2.reformat(BasicFormat.NONE)
@@ -2397,8 +2859,19 @@ def do_diff(lines1: List[Line], lines2: List[Line], config: Config) -> Diff:
else:
# reg differences and maybe imm as well
out1, out2 = format_fields(arch.re_reg, out1, out2, sc1, sc2)
- line_color1 = line_color2 = sym_color = BasicFormat.REGISTER
- line_prefix = "r"
+ cats = config.reg_categories
+ if cats and any(
+ cats.get(of.group()) != cats.get(nf.group())
+ for (of, nf) in zip(
+ out1.finditer(arch.re_reg), out2.finditer(arch.re_reg)
+ )
+ ):
+ sym_color = BasicFormat.REGISTER_CATEGORY
+ line_prefix = "R"
+ else:
+ sym_color = BasicFormat.REGISTER
+ line_prefix = "r"
+ line_color1 = line_color2 = sym_color
if same_target:
address_imm_fmt = BasicFormat.NONE
@@ -2523,8 +2996,10 @@ def do_diff(lines1: List[Line], lines2: List[Line], config: Config) -> Diff:
)
)
- score = score_diff_lines(diffed_lines, config)
output = output[config.skip_lines :]
+
+ score = score_diff_lines(diffed_lines, config, symbol_map)
+ max_score = len(lines1) * config.penalty_deletion
return Diff(lines=output, score=score, max_score=max_score)
@@ -2586,24 +3061,12 @@ def compress_matching(
return ret
-def align_diffs(
- old_diff: Diff, new_diff: Diff, config: Config
-) -> Tuple[TableMetadata, List[Tuple[OutputLine, ...]]]:
- meta: TableMetadata
+def align_diffs(old_diff: Diff, new_diff: Diff, config: Config) -> TableData:
+ headers: Tuple[Text, ...]
diff_lines: List[Tuple[OutputLine, ...]]
padding = " " * 7 if config.show_line_numbers else " " * 2
- if config.threeway:
- meta = TableMetadata(
- headers=(
- Text("TARGET"),
- Text(f"{padding}CURRENT ({new_diff.score})"),
- Text(f"{padding}PREVIOUS ({old_diff.score})"),
- ),
- current_score=new_diff.score,
- max_score=new_diff.max_score,
- previous_score=old_diff.score,
- )
+ if config.diff_mode in (DiffMode.THREEWAY_PREV, DiffMode.THREEWAY_BASE):
old_chunks = chunk_diff_lines(old_diff.lines)
new_chunks = chunk_diff_lines(new_diff.lines)
diff_lines = []
@@ -2638,20 +3101,54 @@ def align_diffs(
diff_lines = [
(base, new, old if old != new else empty) for base, new, old in diff_lines
]
- else:
- meta = TableMetadata(
- headers=(
- Text("TARGET"),
- Text(f"{padding}CURRENT ({new_diff.score})"),
- ),
- current_score=new_diff.score,
- max_score=new_diff.max_score,
- previous_score=None,
+ headers = (
+ Text("TARGET"),
+ Text(f"{padding}CURRENT ({new_diff.score})"),
+ Text(f"{padding}PREVIOUS ({old_diff.score})"),
)
+ current_score = new_diff.score
+ max_score = new_diff.max_score
+ previous_score = old_diff.score
+ elif config.diff_mode in (DiffMode.SINGLE, DiffMode.SINGLE_BASE):
+ header = Text("BASE" if config.diff_mode == DiffMode.SINGLE_BASE else "CURRENT")
+ diff_lines = [(line,) for line in new_diff.lines]
+ headers = (header,)
+ # Scoring is disabled for view mode
+ current_score = 0
+ max_score = 0
+ previous_score = None
+ else:
diff_lines = [(line, line) for line in new_diff.lines]
+ headers = (
+ Text("TARGET"),
+ Text(f"{padding}CURRENT ({new_diff.score})"),
+ )
+ current_score = new_diff.score
+ max_score = new_diff.max_score
+ previous_score = None
if config.compress:
diff_lines = compress_matching(diff_lines, config.compress.context)
- return meta, diff_lines
+
+ def diff_line_to_table_line(line: Tuple[OutputLine, ...]) -> TableLine:
+ cells = [
+ (line[0].base or Text(), line[0].line1)
+ ]
+ for ol in line[1:]:
+ cells.append((ol.fmt2, ol.line2))
+
+ return TableLine(
+ key=line[0].key2,
+ is_data_ref=line[0].is_data_ref,
+ cells=tuple(cells),
+ )
+
+ return TableData(
+ headers=headers,
+ current_score=current_score,
+ max_score=max_score,
+ previous_score=previous_score,
+ lines=[diff_line_to_table_line(line) for line in diff_lines],
+ )
def debounced_fs_watch(
@@ -2754,17 +3251,26 @@ class Display:
return (self.emsg, self.emsg)
my_lines = process(self.mydump, self.config)
- diff_output = do_diff(self.base_lines, my_lines, self.config)
+
+ if self.config.diff_mode == DiffMode.SINGLE_BASE:
+ diff_output = do_diff(self.base_lines, self.base_lines, self.config)
+ elif self.config.diff_mode == DiffMode.SINGLE:
+ diff_output = do_diff(my_lines, my_lines, self.config)
+ else:
+ diff_output = do_diff(self.base_lines, my_lines, self.config)
+
last_diff_output = self.last_diff_output or diff_output
- if self.config.threeway != "base" or not self.last_diff_output:
+ if self.config.diff_mode != DiffMode.THREEWAY_BASE or not self.last_diff_output:
self.last_diff_output = diff_output
- meta, diff_lines = align_diffs(last_diff_output, diff_output, self.config)
- output = self.config.formatter.table(meta, diff_lines)
+ data = align_diffs(last_diff_output, diff_output, self.config)
+ output = self.config.formatter.table(data)
+
refresh_key = (
[line.key2 for line in diff_output.lines],
diff_output.score,
)
+
return (output, refresh_key)
def run_less(
@@ -2882,7 +3388,10 @@ def main() -> None:
except ModuleNotFoundError as e:
fail(MISSING_PREREQUISITES.format(e.name))
- if config.threeway and not args.watch:
+ if (
+ config.diff_mode in (DiffMode.THREEWAY_BASE, DiffMode.THREEWAY_PREV)
+ and not args.watch
+ ):
fail("Threeway diffing requires -w.")
if args.diff_elf_symbol:
@@ -2910,8 +3419,10 @@ def main() -> None:
if args.base_asm is not None:
with open(args.base_asm) as f:
basedump = f.read()
- else:
+ elif config.diff_mode != DiffMode.SINGLE:
basedump = run_objdump(basecmd, config, project)
+ else:
+ basedump = ""
mydump = run_objdump(mycmd, config, project)
diff --git a/tools/asm-differ/diff_settings.py b/tools/asm-differ/diff_settings.py
index 183b96b75..19d67d548 100644
--- a/tools/asm-differ/diff_settings.py
+++ b/tools/asm-differ/diff_settings.py
@@ -5,7 +5,8 @@ def apply(config, args):
config["source_directories"] = ["."]
# config["show_line_numbers_default"] = True
# config["arch"] = "mips"
- # config["map_format"] = "gnu" # gnu or mw
- # config["mw_build_dir"] = "build/" # only needed for mw map format
+ # config["map_format"] = "gnu" # gnu, mw, ms
+ # config["build_dir"] = "build/" # only needed for mw and ms map format
+ # config["expected_dir"] = "expected/" # needed for -o
# config["makeflags"] = []
# config["objdump_executable"] = ""
diff --git a/tools/asm-differ/pyproject.toml b/tools/asm-differ/pyproject.toml
new file mode 100644
index 000000000..7a112aee5
--- /dev/null
+++ b/tools/asm-differ/pyproject.toml
@@ -0,0 +1,21 @@
+[tool.poetry]
+name = "asm-differ"
+version = "0.1.0"
+description = ""
+authors = ["Simon Lindholm "]
+license = "UNLICENSE"
+readme = "README.md"
+packages = [{ include = "diff.py" }]
+
+[tool.poetry.dependencies]
+python = "^3.7"
+colorama = "^0.4.6"
+ansiwrap = "^0.8.4"
+watchdog = "^2.2.0"
+levenshtein = "^0.20.9"
+cxxfilt = "^0.3.0"
+
+
+[build-system]
+requires = ["poetry-core"]
+build-backend = "poetry.core.masonry.api"
diff --git a/tools/asm-processor/.gitignore b/tools/asm-processor/.gitignore
new file mode 100644
index 000000000..cc5bba4b5
--- /dev/null
+++ b/tools/asm-processor/.gitignore
@@ -0,0 +1,2 @@
+*.o
+*.py[cod]
diff --git a/tools/asm-processor/.gitrepo b/tools/asm-processor/.gitrepo
new file mode 100644
index 000000000..e9ee1dd74
--- /dev/null
+++ b/tools/asm-processor/.gitrepo
@@ -0,0 +1,12 @@
+; DO NOT EDIT (unless you know what you are doing)
+;
+; This subdirectory is a git "subrepo", and this file is maintained by the
+; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme
+;
+[subrepo]
+ remote = git@github.com:simonlindholm/asm-processor.git
+ branch = main
+ commit = bbd86ea1faf84e6a7a0e101ab8068a00a3dfb2fc
+ parent = 8985197b6da23db874ac6e8a29ddec5636944bba
+ method = merge
+ cmdver = 0.4.3
diff --git a/tools/asm-processor/LICENSE b/tools/asm-processor/LICENSE
new file mode 100644
index 000000000..cf1ab25da
--- /dev/null
+++ b/tools/asm-processor/LICENSE
@@ -0,0 +1,24 @@
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or
+distribute this software, either in source code form or as a compiled
+binary, for any purpose, commercial or non-commercial, and by any
+means.
+
+In jurisdictions that recognize copyright laws, the author or authors
+of this software dedicate any and all copyright interest in the
+software to the public domain. We make this dedication for the benefit
+of the public at large and to the detriment of our heirs and
+successors. We intend this dedication to be an overt act of
+relinquishment in perpetuity of all present and future rights to this
+software under copyright law.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+For more information, please refer to
diff --git a/tools/asm-processor/README.md b/tools/asm-processor/README.md
new file mode 100644
index 000000000..009147c06
--- /dev/null
+++ b/tools/asm-processor/README.md
@@ -0,0 +1,112 @@
+# asm-processor
+
+Pre-process .c files and post-process .o files to enable embedding MIPS assembly into IDO-compiled C.
+
+## Usage
+
+Let's say you have a file compiled with `-g` on the IDO compiler, that looks like this:
+```c
+float func4(void) {
+ "func4";
+ return 0.2f;
+}
+```
+
+This script enables replacing it by:
+```asm
+GLOBAL_ASM(
+.rdata
+.word 0x66756e63 # func
+.word 0x34000000 # 4\0\0\0
+
+.late_rodata
+glabel rv
+.word 0x3e4ccccd # 0.2f
+
+.text
+glabel func4
+lui $at, %hi(rv)
+jr $ra
+lwc1 $f0, %lo(rv)($at)
+jr $ra
+nop
+jr $ra
+nop
+)
+```
+
+To compile the file, run `python3 build.py $CC -- $AS $ASFLAGS -- $CFLAGS -o out.o in.c`, where $CC points to an IDO binary (5.3/7.1 and recomp/qemu all supported), $AS is e.g. `mips-linux-gnu-as`, $ASFLAGS e.g. `-march=vr4300 -mabi=32` and $CFLAGS e.g. `-Wab,-r4300_mul -non_shared -G 0 -Xcpluscomm -g`. build.py may be customized as needed.
+
+In addition to an .o file, build.py also generates a .d file with Makefile dependencies for .s files referenced by the input .c file.
+This functionality may be removed if not needed.
+
+Reading assembly from file is also supported, by either `GLOBAL_ASM("file.s")` or `#pragma GLOBAL_ASM("file.s")`.
+
+### What is supported?
+
+`.text`, `.data`, `.bss` and `.rodata` sections, `.word`/`.incbin`, `.ascii`/`.asciz`, and `-g`, `-g3`, `-O1`, `-O2`, `-framepointer` and `-mips1`/`-mips2` flags to the IDO compiler.
+
+### What is not supported?
+
+* complicated assembly (.ifdef, macro declarations/calls other than `glabel`, pseudo-instructions that expand to several real instructions)
+* non-IDO compilers
+* `-O3` (due to function reordering)
+
+C `#ifdef`s only work outside of `GLOBAL_ASM` calls, but is otherwise able to replace `.ifdef`.
+
+### What's up with "late rodata"?
+
+The IDO compiler emits rodata in two passes: first array/string contents, then large literals/switch jump tables.
+
+Data declared within `.rdata`/`.section .rodata` will end up in the first half, and `.late_rodata`/`.section .late_rodata` in the second half.
+
+### How does it work?
+
+It's a bit of a hack!
+The basic idea is replace `GLOBAL_ASM` blocks with dummy C functions/global vars of the same sections sizes as the assembly.
+Then the C file gets compiled, and the dummy contents overwritten with the injected assembly.
+
+To accomplish this, asm-processor has logic for guessing the size of assembly contents
+(which assumes the assembly isn't too complicated, e.g. no macros),
+and for emitting C code of exact sizes for a bunch of different IDO compiler flags.
+
+The assembler code is padded with nops to line it up with its correct position in the C;
+this allows C and asm ELF files to be merged easily without having to fix up e.g. symbol addresses.
+
+The most difficult part is `late_rodata`, which is hard to create programmatically.
+asm-processor does that by emitting code that uses dummy float literals/double literals/jump tables,
+assembles the late_rodata at another location of the .rodata section, then overwrites the dummy rodata.
+This does require some movement of symbols and relocations, and quite a bit of care in what code to
+emit and how to preserve .double alignment.
+
+It's worth noting some alternative ways in which asm-processor would have been implemented:
+- One idea to get rid of the C/asm size estimations is to emit arbitrary code, and then move code,
+symbols and relocations to the correct place after the sizes are known.
+Given the machinery for `late_rodata` this wouldn't have been too difficult, and it would have the upside of improved portability.
+There is a big downside, however: using dummy code of incorrect size throws off alignment and can introduce unintended padding.
+Fixing this would require running multiple passes of asm-processor, with one compile per `ASM_GLOBAL`.
+- Another idea is to run the compiler with -S to emit assembly, modify the emitted assembly, then run the assembler
+(which in IDO's case may perform additional instruction reordering etc.).
+This option has not been investigated in much detail, and would perhaps be superior to the current implementation.
+It does have a few unknowns to it, e.g. instruction encoding differences between GNU `as` and IDO's assembler,
+how to avoid reordering the injected assembly, and how .rodata/.late_rodata are implemented.
+
+### Testing
+
+There are a few tests to ensure you don't break anything when hacking on asm-processor: `./run-tests.sh` should exit without output if they pass, or else output a diff from previous to new version.
+
+Tests need the environment variable `MIPS_CC` set to point to the IDO 7.1 compiler, with Pascal support enabled.
+
+For example if asm-processor is cloned in the same directory as [ido static recomp](https://github.com/decompals/ido-static-recomp) and the working directory is asm-processor, tests can be run using:
+
+```sh
+MIPS_CC=../ido-static-recomp/build/7.1/out/cc ./run-tests.sh
+```
+
+Or using [qemu-irix](https://github.com/zeldaret/oot/releases/tag/0.1q) (don't forget `chmod u+x qemu-irix`) to emulate IDO:
+
+```sh
+MIPS_CC='./qemu-irix -silent -L ../ido-static-recomp/ido/7.1/ ../ido-static-recomp/ido/7.1/usr/bin/cc' ./run-tests.sh
+```
+
+To skip running Pascal tests, remove the `tests/*.p` glob from `run-tests.sh`.
diff --git a/tools/asm-processor/add-test.sh b/tools/asm-processor/add-test.sh
new file mode 100755
index 000000000..708548e57
--- /dev/null
+++ b/tools/asm-processor/add-test.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+for A in "$@"; do
+ OBJDUMPFLAGS="-srt"
+ ./compile-test.sh "$A" && mips-linux-gnu-objdump $OBJDUMPFLAGS "${A%.*}.o" > "${A%.*}.objdump"
+done
diff --git a/tools/asm-processor/asm_processor.py b/tools/asm-processor/asm_processor.py
index 544b1b1b7..0d62bc32a 100644
--- a/tools/asm-processor/asm_processor.py
+++ b/tools/asm-processor/asm_processor.py
@@ -85,6 +85,18 @@ MIPS_DEBUG_ST_STATIC = 2
MIPS_DEBUG_ST_STATIC_PROC = 14
+class ElfFormat:
+ def __init__(self, is_big_endian):
+ self.is_big_endian = is_big_endian
+ self.struct_char = ">" if is_big_endian else "<"
+
+ def pack(self, fmt, *args):
+ return struct.pack(self.struct_char + fmt, *args)
+
+ def unpack(self, fmt, data):
+ return struct.unpack(self.struct_char + fmt, data)
+
+
class ElfHeader:
"""
typedef struct {
@@ -107,9 +119,9 @@ class ElfHeader:
def __init__(self, data):
self.e_ident = data[:EI_NIDENT]
- self.e_type, self.e_machine, self.e_version, self.e_entry, self.e_phoff, self.e_shoff, self.e_flags, self.e_ehsize, self.e_phentsize, self.e_phnum, self.e_shentsize, self.e_shnum, self.e_shstrndx = struct.unpack('>HHIIIIIHHHHHH', data[EI_NIDENT:])
assert self.e_ident[EI_CLASS] == 1 # 32-bit
- assert self.e_ident[EI_DATA] == 2 # big-endian
+ self.fmt = ElfFormat(is_big_endian=(self.e_ident[EI_DATA] == 2))
+ self.e_type, self.e_machine, self.e_version, self.e_entry, self.e_phoff, self.e_shoff, self.e_flags, self.e_ehsize, self.e_phentsize, self.e_phnum, self.e_shentsize, self.e_shnum, self.e_shstrndx = self.fmt.unpack('HHIIIIIHHHHHH', data[EI_NIDENT:])
assert self.e_type == 1 # relocatable
assert self.e_machine == 8 # MIPS I Architecture
assert self.e_phoff == 0 # no program header
@@ -117,7 +129,7 @@ class ElfHeader:
assert self.e_shstrndx != SHN_UNDEF
def to_bin(self):
- return self.e_ident + struct.pack('>HHIIIIIHHHHHH', self.e_type,
+ return self.e_ident + self.fmt.pack('HHIIIIIHHHHHH', self.e_type,
self.e_machine, self.e_version, self.e_entry, self.e_phoff,
self.e_shoff, self.e_flags, self.e_ehsize, self.e_phentsize,
self.e_phnum, self.e_shentsize, self.e_shnum, self.e_shstrndx)
@@ -135,8 +147,9 @@ class Symbol:
} Elf32_Sym;
"""
- def __init__(self, data, strtab, name=None):
- self.st_name, self.st_value, self.st_size, st_info, self.st_other, self.st_shndx = struct.unpack('>IIIBBH', data)
+ def __init__(self, fmt, data, strtab, name=None):
+ self.fmt = fmt
+ self.st_name, self.st_value, self.st_size, st_info, self.st_other, self.st_shndx = fmt.unpack('IIIBBH', data)
assert self.st_shndx != SHN_XINDEX, "too many sections (SHN_XINDEX not supported)"
self.bind = st_info >> 4
self.type = st_info & 15
@@ -144,31 +157,32 @@ class Symbol:
self.visibility = self.st_other & 3
@staticmethod
- def from_parts(st_name, st_value, st_size, st_info, st_other, st_shndx, strtab, name):
- header = struct.pack('>IIIBBH', st_name, st_value, st_size, st_info, st_other, st_shndx)
- return Symbol(header, strtab, name)
+ def from_parts(fmt, st_name, st_value, st_size, st_info, st_other, st_shndx, strtab, name):
+ header = fmt.pack('IIIBBH', st_name, st_value, st_size, st_info, st_other, st_shndx)
+ return Symbol(fmt, header, strtab, name)
def to_bin(self):
st_info = (self.bind << 4) | self.type
- return struct.pack('>IIIBBH', self.st_name, self.st_value, self.st_size, st_info, self.st_other, self.st_shndx)
+ return self.fmt.pack('IIIBBH', self.st_name, self.st_value, self.st_size, st_info, self.st_other, self.st_shndx)
class Relocation:
- def __init__(self, data, sh_type):
+ def __init__(self, fmt, data, sh_type):
+ self.fmt = fmt
self.sh_type = sh_type
if sh_type == SHT_REL:
- self.r_offset, self.r_info = struct.unpack('>II', data)
+ self.r_offset, self.r_info = fmt.unpack('II', data)
else:
- self.r_offset, self.r_info, self.r_addend = struct.unpack('>III', data)
+ self.r_offset, self.r_info, self.r_addend = fmt.unpack('III', data)
self.sym_index = self.r_info >> 8
self.rel_type = self.r_info & 0xff
def to_bin(self):
self.r_info = (self.sym_index << 8) | self.rel_type
if self.sh_type == SHT_REL:
- return struct.pack('>II', self.r_offset, self.r_info)
+ return self.fmt.pack('II', self.r_offset, self.r_info)
else:
- return struct.pack('>III', self.r_offset, self.r_info, self.r_addend)
+ return self.fmt.pack('III', self.r_offset, self.r_info, self.r_addend)
class Section:
@@ -187,8 +201,9 @@ class Section:
} Elf32_Shdr;
"""
- def __init__(self, header, data, index):
- self.sh_name, self.sh_type, self.sh_flags, self.sh_addr, self.sh_offset, self.sh_size, self.sh_link, self.sh_info, self.sh_addralign, self.sh_entsize = struct.unpack('>IIIIIIIIII', header)
+ def __init__(self, fmt, header, data, index):
+ self.fmt = fmt
+ self.sh_name, self.sh_type, self.sh_flags, self.sh_addr, self.sh_offset, self.sh_size, self.sh_link, self.sh_info, self.sh_addralign, self.sh_entsize = fmt.unpack('IIIIIIIIII', header)
assert not self.sh_flags & SHF_LINK_ORDER
if self.sh_entsize != 0:
assert self.sh_size % self.sh_entsize == 0
@@ -200,9 +215,9 @@ class Section:
self.relocated_by = []
@staticmethod
- def from_parts(sh_name, sh_type, sh_flags, sh_link, sh_info, sh_addralign, sh_entsize, data, index):
- header = struct.pack('>IIIIIIIIII', sh_name, sh_type, sh_flags, 0, 0, len(data), sh_link, sh_info, sh_addralign, sh_entsize)
- return Section(header, data, index)
+ def from_parts(fmt, sh_name, sh_type, sh_flags, sh_link, sh_info, sh_addralign, sh_entsize, data, index):
+ header = fmt.pack('IIIIIIIIII', sh_name, sh_type, sh_flags, 0, 0, len(data), sh_link, sh_info, sh_addralign, sh_entsize)
+ return Section(fmt, header, data, index)
def lookup_str(self, index):
assert self.sh_type == SHT_STRTAB
@@ -222,7 +237,7 @@ class Section:
def header_to_bin(self):
if self.sh_type != SHT_NOBITS:
self.sh_size = len(self.data)
- return struct.pack('>IIIIIIIIII', self.sh_name, self.sh_type, self.sh_flags, self.sh_addr, self.sh_offset, self.sh_size, self.sh_link, self.sh_info, self.sh_addralign, self.sh_entsize)
+ return self.fmt.pack('IIIIIIIIII', self.sh_name, self.sh_type, self.sh_flags, self.sh_addr, self.sh_offset, self.sh_size, self.sh_link, self.sh_info, self.sh_addralign, self.sh_entsize)
def late_init(self, sections):
if self.sh_type == SHT_SYMTAB:
@@ -251,14 +266,14 @@ class Section:
self.strtab = sections[self.sh_link]
entries = []
for i in range(0, self.sh_size, self.sh_entsize):
- entries.append(Symbol(self.data[i:i+self.sh_entsize], self.strtab))
+ entries.append(Symbol(self.fmt, self.data[i:i+self.sh_entsize], self.strtab))
self.symbol_entries = entries
def init_relocs(self):
assert self.is_rel()
entries = []
for i in range(0, self.sh_size, self.sh_entsize):
- entries.append(Relocation(self.data[i:i+self.sh_entsize], self.sh_type))
+ entries.append(Relocation(self.fmt, self.data[i:i+self.sh_entsize], self.sh_type))
self.relocations = entries
def local_symbols(self):
@@ -281,9 +296,9 @@ class Section:
hdrr_cbOptOffset, hdrr_iauxMax, hdrr_cbAuxOffset, hdrr_issMax, \
hdrr_cbSsOffset, hdrr_issExtMax, hdrr_cbSsExtOffset, hdrr_ifdMax, \
hdrr_cbFdOffset, hdrr_crfd, hdrr_cbRfdOffset, hdrr_iextMax, \
- hdrr_cbExtOffset = struct.unpack(">HHIIIIIIIIIIIIIIIIIIIIIII", self.data[0:0x60])
+ hdrr_cbExtOffset = self.fmt.unpack("HHIIIIIIIIIIIIIIIIIIIIIII", self.data[0:0x60])
- assert hdrr_magic == 0x7009 , "Invalid magic value for .mdebug symbolic header"
+ assert hdrr_magic == 0x7009, "Invalid magic value for .mdebug symbolic header"
hdrr_cbLineOffset += shift_by
hdrr_cbDnOffset += shift_by
@@ -297,7 +312,7 @@ class Section:
hdrr_cbRfdOffset += shift_by
hdrr_cbExtOffset += shift_by
- new_data[0:0x60] = struct.pack(">HHIIIIIIIIIIIIIIIIIIIIIII", hdrr_magic, hdrr_vstamp, hdrr_ilineMax, hdrr_cbLine, \
+ new_data[0:0x60] = self.fmt.pack("HHIIIIIIIIIIIIIIIIIIIIIII", hdrr_magic, hdrr_vstamp, hdrr_ilineMax, hdrr_cbLine, \
hdrr_cbLineOffset, hdrr_idnMax, hdrr_cbDnOffset, hdrr_ipdMax, \
hdrr_cbPdOffset, hdrr_isymMax, hdrr_cbSymOffset, hdrr_ioptMax, \
hdrr_cbOptOffset, hdrr_iauxMax, hdrr_cbAuxOffset, hdrr_issMax, \
@@ -313,15 +328,16 @@ class ElfFile:
assert data[:4] == b'\x7fELF', "not an ELF file"
self.elf_header = ElfHeader(data[0:52])
+ self.fmt = self.elf_header.fmt
offset, size = self.elf_header.e_shoff, self.elf_header.e_shentsize
- null_section = Section(data[offset:offset + size], data, 0)
+ null_section = Section(self.fmt, data[offset:offset + size], data, 0)
num_sections = self.elf_header.e_shnum or null_section.sh_size
self.sections = [null_section]
for i in range(1, num_sections):
ind = offset + i * size
- self.sections.append(Section(data[ind:ind + size], data, i))
+ self.sections.append(Section(self.fmt, data[ind:ind + size], data, i))
symtab = None
for s in self.sections:
@@ -345,7 +361,7 @@ class ElfFile:
def add_section(self, name, sh_type, sh_flags, sh_link, sh_info, sh_addralign, sh_entsize, data):
shstr = self.sections[self.elf_header.e_shstrndx]
sh_name = shstr.add_str(name)
- s = Section.from_parts(sh_name=sh_name, sh_type=sh_type,
+ s = Section.from_parts(self.fmt, sh_name=sh_name, sh_type=sh_type,
sh_flags=sh_flags, sh_link=sh_link, sh_info=sh_info,
sh_addralign=sh_addralign, sh_entsize=sh_entsize, data=data,
index=len(self.sections))
@@ -421,15 +437,18 @@ class Failure(Exception):
class GlobalState:
- def __init__(self, min_instr_count, skip_instr_count, use_jtbl_for_rodata, mips1):
+ def __init__(self, min_instr_count, skip_instr_count, use_jtbl_for_rodata, prelude_if_late_rodata, mips1, pascal):
# A value that hopefully never appears as a 32-bit rodata constant (or we
# miscompile late rodata). Increases by 1 in each step.
self.late_rodata_hex = 0xE0123456
+ self.valuectr = 0
self.namectr = 0
self.min_instr_count = min_instr_count
self.skip_instr_count = skip_instr_count
self.use_jtbl_for_rodata = use_jtbl_for_rodata
+ self.prelude_if_late_rodata = prelude_if_late_rodata
self.mips1 = mips1
+ self.pascal = pascal
def next_late_rodata_hex(self):
dummy_bytes = struct.pack('>I', self.late_rodata_hex)
@@ -443,6 +462,36 @@ class GlobalState:
self.namectr += 1
return '_asmpp_{}{}'.format(cat, self.namectr)
+ def func_prologue(self, name):
+ if self.pascal:
+ return " ".join([
+ "procedure {}();".format(name),
+ "type",
+ " pi = ^integer;",
+ " pf = ^single;",
+ " pd = ^double;",
+ "var",
+ " vi: pi;",
+ " vf: pf;",
+ " vd: pd;",
+ "begin",
+ " vi := vi;",
+ " vf := vf;",
+ " vd := vd;",
+ ])
+ else:
+ return 'void {}(void) {{'.format(name)
+
+ def func_epilogue(self):
+ if self.pascal:
+ return "end;"
+ else:
+ return "}"
+
+ def pascal_assignment(self, tp, val):
+ self.valuectr += 1
+ address = (8 * self.valuectr) & 0x7FFF
+ return 'v{} := p{}({}); v{}^ := {};'.format(tp, tp, address, tp, val)
Function = namedtuple('Function', ['text_glabels', 'asm_conts', 'late_rodata_dummy_bytes', 'jtbl_rodata_size', 'late_rodata_asm_conts', 'fn_desc', 'data'])
@@ -476,6 +525,7 @@ class GlobalAsmBlock:
def count_quoted_size(self, line, z, real_line, output_enc):
line = line.encode(output_enc).decode('latin1')
in_quote = False
+ has_comma = True
num_parts = 0
ret = 0
i = 0
@@ -486,10 +536,15 @@ class GlobalAsmBlock:
if not in_quote:
if c == '"':
in_quote = True
+ if z and not has_comma:
+ self.fail(".asciiz with glued strings is not supported due to GNU as version diffs")
num_parts += 1
+ elif c == ',':
+ has_comma = True
else:
if c == '"':
in_quote = False
+ has_comma = False
continue
ret += 1
if c != '\\':
@@ -554,7 +609,7 @@ class GlobalAsmBlock:
self.text_glabels.append(line.split()[1])
if not line:
pass # empty line
- elif line.startswith('glabel ') or (' ' not in line and line.endswith(':')):
+ elif line.startswith('glabel ') or line.startswith('dlabel ') or line.startswith('endlabel ') or (' ' not in line and line.endswith(':')):
pass # label
elif line.startswith('.section') or line in ['.text', '.data', '.rdata', '.rodata', '.bss', '.late_rodata']:
# section change
@@ -574,7 +629,7 @@ class GlobalAsmBlock:
changed_section = True
elif line.startswith('.incbin'):
self.add_sized(int(line.split(',')[-1].strip(), 0), real_line)
- elif line.startswith('.word') or line.startswith('.float'):
+ elif line.startswith('.word') or line.startswith('.gpword') or line.startswith('.float'):
self.align4()
self.add_sized(4 * len(line.split(',')), real_line)
elif line.startswith('.double'):
@@ -651,7 +706,12 @@ class GlobalAsmBlock:
skip_next = False
needs_double = (self.late_rodata_alignment != 0)
extra_mips1_nop = False
- jtbl_size = 11 if state.mips1 else 9
+ if state.pascal:
+ jtbl_size = 9 if state.mips1 else 8
+ jtbl_min_rodata_size = 2
+ else:
+ jtbl_size = 11 if state.mips1 else 9
+ jtbl_min_rodata_size = 5
for i in range(size):
if skip_next:
skip_next = False
@@ -668,9 +728,15 @@ class GlobalAsmBlock:
# - we have at least 10 more instructions to go in this function (otherwise our
# function size computation will be wrong since the delay slot goes unused)
if (not needs_double and state.use_jtbl_for_rodata and i >= 1 and
- size - i >= 5 and num_instr - len(late_rodata_fn_output) >= jtbl_size + 1):
- cases = " ".join("case {}:".format(case) for case in range(size - i))
- late_rodata_fn_output.append("switch (*(volatile int*)0) { " + cases + " ; }")
+ size - i >= jtbl_min_rodata_size and
+ num_instr - len(late_rodata_fn_output) >= jtbl_size + 1):
+ if state.pascal:
+ cases = " ".join("{}: ;".format(case) for case in range(size - i))
+ line = "case 0 of " + cases + " otherwise end;"
+ else:
+ cases = " ".join("case {}:".format(case) for case in range(size - i))
+ line = "switch (*(volatile int*)0) { " + cases + " ; }"
+ late_rodata_fn_output.append(line)
late_rodata_fn_output.extend([""] * (jtbl_size - 1))
jtbl_rodata_size = (size - i) * 4
extra_mips1_nop = i != 2
@@ -681,7 +747,11 @@ class GlobalAsmBlock:
dummy_bytes2 = state.next_late_rodata_hex()
late_rodata_dummy_bytes.append(dummy_bytes2)
fval, = struct.unpack('>d', dummy_bytes + dummy_bytes2)
- late_rodata_fn_output.append('*(volatile double*)0 = {};'.format(fval))
+ if state.pascal:
+ line = state.pascal_assignment('d', fval)
+ else:
+ line = '*(volatile double*)0 = {};'.format(fval)
+ late_rodata_fn_output.append(line)
skip_next = True
needs_double = False
if state.mips1:
@@ -691,7 +761,11 @@ class GlobalAsmBlock:
extra_mips1_nop = False
else:
fval, = struct.unpack('>f', dummy_bytes)
- late_rodata_fn_output.append('*(volatile float*)0 = {}f;'.format(fval))
+ if state.pascal:
+ line = state.pascal_assignment('f', fval)
+ else:
+ line = '*(volatile float*)0 = {}f;'.format(fval)
+ late_rodata_fn_output.append(line)
extra_mips1_nop = True
late_rodata_fn_output.append('')
late_rodata_fn_output.append('')
@@ -701,8 +775,8 @@ class GlobalAsmBlock:
text_name = None
if self.fn_section_sizes['.text'] > 0 or late_rodata_fn_output:
text_name = state.make_name('func')
- src[0] = 'void {}(void) {{'.format(text_name)
- src[self.num_lines] = '}'
+ src[0] = state.func_prologue(text_name)
+ src[self.num_lines] = state.func_epilogue()
instr_count = self.fn_section_sizes['.text'] // 4
if instr_count < state.min_instr_count:
self.fail("too short .text block")
@@ -710,6 +784,7 @@ class GlobalAsmBlock:
tot_skipped = 0
fn_emitted = 0
fn_skipped = 0
+ skipping = True
rodata_stack = late_rodata_fn_output[::-1]
for (line, count) in self.fn_ins_inds:
for _ in range(count):
@@ -718,16 +793,28 @@ class GlobalAsmBlock:
# Don't let functions become too large. When a function reaches 284
# instructions, and -O2 -framepointer flags are passed, the IRIX
# compiler decides it is a great idea to start optimizing more.
+ # Also, Pascal cannot handle too large functions before it runs out
+ # of unique statements to write.
fn_emitted = 0
fn_skipped = 0
- src[line] += ' }} void {}(void) {{ '.format(state.make_name('large_func'))
- if fn_skipped < state.skip_instr_count:
+ skipping = True
+ src[line] += (' ' + state.func_epilogue() + ' ' +
+ state.func_prologue(state.make_name('large_func')) + ' ')
+ if (
+ skipping and
+ fn_skipped < state.skip_instr_count +
+ (state.prelude_if_late_rodata if rodata_stack else 0)
+ ):
fn_skipped += 1
tot_skipped += 1
- elif rodata_stack:
- src[line] += rodata_stack.pop()
else:
- src[line] += '*(volatile int*)0 = 0;'
+ skipping = False
+ if rodata_stack:
+ src[line] += rodata_stack.pop()
+ elif state.pascal:
+ src[line] += state.pascal_assignment('i', '0')
+ else:
+ src[line] += '*(volatile int*)0 = 0;'
tot_emitted += 1
fn_emitted += 1
if rodata_stack:
@@ -741,16 +828,24 @@ class GlobalAsmBlock:
rodata_name = None
if self.fn_section_sizes['.rodata'] > 0:
+ if state.pascal:
+ self.fail(".rodata isn't supported with Pascal for now")
rodata_name = state.make_name('rodata')
src[self.num_lines] += ' const char {}[{}] = {{1}};'.format(rodata_name, self.fn_section_sizes['.rodata'])
data_name = None
if self.fn_section_sizes['.data'] > 0:
data_name = state.make_name('data')
- src[self.num_lines] += ' char {}[{}] = {{1}};'.format(data_name, self.fn_section_sizes['.data'])
+ if state.pascal:
+ line = ' var {}: packed array[1..{}] of char := [otherwise: 0];'.format(data_name, self.fn_section_sizes['.data'])
+ else:
+ line = ' char {}[{}] = {{1}};'.format(data_name, self.fn_section_sizes['.data'])
+ src[self.num_lines] += line
bss_name = None
if self.fn_section_sizes['.bss'] > 0:
+ if state.pascal:
+ self.fail(".bss isn't supported with Pascal")
bss_name = state.make_name('bss')
src[self.num_lines] += ' char {}[{}];'.format(bss_name, self.fn_section_sizes['.bss'])
@@ -775,43 +870,55 @@ float_regexpr = re.compile(r"[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?f")
def repl_float_hex(m):
return str(struct.unpack(">I", struct.pack(">f", float(m.group(0).strip().rstrip("f"))))[0])
-def parse_source(f, opt, framepointer, mips1, input_enc, output_enc, out_dependencies, print_source=None):
- if opt in ['O2', 'O1']:
- if framepointer:
+Opts = namedtuple('Opts', ['opt', 'framepointer', 'mips1', 'kpic', 'pascal', 'input_enc', 'output_enc'])
+
+def parse_source(f, opts, out_dependencies, print_source=None):
+ if opts.opt in ['O1', 'O2']:
+ if opts.framepointer:
min_instr_count = 6
skip_instr_count = 5
else:
min_instr_count = 2
skip_instr_count = 1
- elif opt == 'O0':
- if framepointer:
+ elif opts.opt == 'O0':
+ if opts.framepointer:
min_instr_count = 8
skip_instr_count = 8
else:
min_instr_count = 4
skip_instr_count = 4
- elif opt == 'g':
- if framepointer:
+ elif opts.opt == 'g':
+ if opts.framepointer:
min_instr_count = 7
skip_instr_count = 7
else:
min_instr_count = 4
skip_instr_count = 4
- else:
- if opt != 'g3':
- raise Failure("must pass one of -g, -O0, -O1, -O2, -O2 -g3")
- if framepointer:
+ elif opts.opt == 'g3':
+ if opts.framepointer:
min_instr_count = 4
skip_instr_count = 4
else:
min_instr_count = 2
skip_instr_count = 2
+ else:
+ raise Failure("must pass one of -g, -O0, -O1, -O2, -O2 -g3")
+ prelude_if_late_rodata = 0
+ if opts.kpic:
+ # Without optimizations, the PIC prelude always takes up 3 instructions.
+ # With optimizations, the prelude is optimized out if there's no late rodata.
+ if opts.opt in ('g3', 'O2'):
+ prelude_if_late_rodata = 3
+ else:
+ min_instr_count += 3
+ skip_instr_count += 3
use_jtbl_for_rodata = False
- if opt in ['O2', 'g3'] and not framepointer:
+ if opts.opt in ['O2', 'g3'] and not opts.framepointer and not opts.kpic:
use_jtbl_for_rodata = True
- state = GlobalState(min_instr_count, skip_instr_count, use_jtbl_for_rodata, mips1)
+ state = GlobalState(min_instr_count, skip_instr_count, use_jtbl_for_rodata, prelude_if_late_rodata, opts.mips1, opts.pascal)
+ output_enc = opts.output_enc
global_asm = None
asm_functions = []
@@ -848,7 +955,7 @@ def parse_source(f, opt, framepointer, mips1, input_enc, output_enc, out_depende
fname = line[line.index('(') + 2 : -2]
out_dependencies.append(fname)
global_asm = GlobalAsmBlock(fname)
- with open(fname, encoding=input_enc) as f:
+ with open(fname, encoding=opts.input_enc) as f:
for line2 in f:
global_asm.process_line(line2.rstrip(), output_enc)
src, fn = global_asm.finish(state)
@@ -870,8 +977,8 @@ def parse_source(f, opt, framepointer, mips1, input_enc, output_enc, out_depende
fname = os.path.join(fpath, line[line.index(' ') + 2 : -1])
out_dependencies.append(fname)
include_src = StringIO()
- with open(fname, encoding=input_enc) as include_file:
- parse_source(include_file, opt, framepointer, mips1, input_enc, output_enc, out_dependencies, include_src)
+ with open(fname, encoding=opts.input_enc) as include_file:
+ parse_source(include_file, opts, out_dependencies, include_src)
include_src.write('#line ' + str(line_no + 1) + ' "' + f.name + '"')
output_lines[-1] = include_src.getvalue()
include_src.close()
@@ -891,6 +998,7 @@ def parse_source(f, opt, framepointer, mips1, input_enc, output_enc, out_depende
for line in output_lines:
print_source.write(line + '\n')
else:
+ newline_encoded = "\n".encode(output_enc)
for line in output_lines:
try:
line_encoded = line.encode(output_enc)
@@ -899,18 +1007,18 @@ def parse_source(f, opt, framepointer, mips1, input_enc, output_enc, out_depende
print("The line:", line)
print("The line, utf-8-encoded:", line.encode("utf-8"))
raise
- print_source.write(line_encoded + b'\n')
+ print_source.write(line_encoded)
+ print_source.write(newline_encoded)
print_source.flush()
- if print_source != sys.stdout.buffer:
- print_source.close()
return asm_functions
-def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, drop_mdebug_gptab):
+def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, drop_mdebug_gptab, convert_statics):
SECTIONS = ['.data', '.text', '.rodata', '.bss']
with open(objfile_name, 'rb') as f:
objfile = ElfFile(f.read())
+ fmt = objfile.fmt
prev_locs = {
'.text': 0,
@@ -949,6 +1057,11 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d
loc = loc[1]
prev_loc = prev_locs[sectype]
if loc < prev_loc:
+ # If the dummy C generates too little asm, and we have two
+ # consecutive GLOBAL_ASM blocks, we detect that error here.
+ # On the other hand, if it generates too much, we don't have
+ # a good way of discovering that error: it's indistinguishable
+ # from a static symbol occurring after the GLOBAL_ASM block.
raise Failure("Wrongly computed size for section {} (diff {}). This is an asm-processor bug!".format(sectype, prev_loc- loc))
if loc != prev_loc:
asm.append('.section ' + sectype)
@@ -958,7 +1071,7 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d
else:
asm.append('.space {}'.format(loc - prev_loc))
to_copy[sectype].append((loc, size, temp_name, function.fn_desc))
- if function.text_glabels:
+ if function.text_glabels and sectype == '.text':
func_sizes[function.text_glabels[0]] = size
prev_locs[sectype] = loc + size
if not ifdefed:
@@ -980,7 +1093,10 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d
if any(late_rodata_asm):
late_rodata_source_name_start = '_asmpp_late_rodata_start'
late_rodata_source_name_end = '_asmpp_late_rodata_end'
- asm.append('.rdata')
+ asm.append('.section .late_rodata')
+ # Put some padding at the start to avoid conflating symbols with
+ # references to the whole section.
+ asm.append('.word 0, 0')
asm.append('glabel {}'.format(late_rodata_source_name_start))
for conts in late_rodata_asm:
asm.extend(conts)
@@ -1011,11 +1127,12 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d
# Unify reginfo sections
target_reginfo = objfile.find_section('.reginfo')
- source_reginfo_data = list(asm_objfile.find_section('.reginfo').data)
- data = list(target_reginfo.data)
- for i in range(20):
- data[i] |= source_reginfo_data[i]
- target_reginfo.data = bytes(data)
+ if target_reginfo is not None:
+ source_reginfo_data = list(asm_objfile.find_section('.reginfo').data)
+ data = list(target_reginfo.data)
+ for i in range(20):
+ data[i] |= source_reginfo_data[i]
+ target_reginfo.data = bytes(data)
# Move over section contents
modified_text_positions = set()
@@ -1052,7 +1169,7 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d
# of another way of doing it.
moved_late_rodata = {}
if any(all_late_rodata_dummy_bytes) or any(all_jtbl_rodata_size):
- source = asm_objfile.find_section('.rodata')
+ source = asm_objfile.find_section('.late_rodata')
target = objfile.find_section('.rodata')
source_pos = asm_objfile.symtab.find_symbol_in_section(late_rodata_source_name_start, source)
source_end = asm_objfile.symtab.find_symbol_in_section(late_rodata_source_name_end, source)
@@ -1061,6 +1178,8 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d
new_data = list(target.data)
for dummy_bytes_list, jtbl_rodata_size in zip(all_late_rodata_dummy_bytes, all_jtbl_rodata_size):
for index, dummy_bytes in enumerate(dummy_bytes_list):
+ if not fmt.is_big_endian:
+ dummy_bytes = dummy_bytes[::-1]
pos = target.data.index(dummy_bytes, last_rodata_pos)
# This check is nice, but makes time complexity worse for large files:
if SLOW_CHECKS and target.data.find(dummy_bytes, pos + 4) != -1:
@@ -1096,7 +1215,7 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d
# Find relocated symbols
relocated_symbols = set()
- for sectype in SECTIONS:
+ for sectype in SECTIONS + ['.late_rodata']:
for obj in [asm_objfile, objfile]:
sec = obj.find_section(sectype)
if sec is None:
@@ -1106,50 +1225,60 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d
relocated_symbols.add(obj.symtab.symbol_entries[rel.sym_index])
# Move over symbols, deleting the temporary function labels.
- # Sometimes this naive procedure results in duplicate symbols, or UNDEF
- # symbols that are also defined the same .o file. Hopefully that's fine.
- # Skip over local symbols that aren't relocated against, to avoid
- # conflicts.
- new_local_syms = [s for s in objfile.symtab.local_symbols() if not is_temp_name(s.name)]
- new_global_syms = [s for s in objfile.symtab.global_symbols() if not is_temp_name(s.name)]
+ # Skip over new local symbols that aren't relocated against, to
+ # avoid conflicts.
+ empty_symbol = objfile.symtab.symbol_entries[0]
+ new_syms = [s for s in objfile.symtab.symbol_entries[1:] if not is_temp_name(s.name)]
+
for i, s in enumerate(asm_objfile.symtab.symbol_entries):
is_local = (i < asm_objfile.symtab.sh_info)
if is_local and s not in relocated_symbols:
continue
if is_temp_name(s.name):
+ assert s not in relocated_symbols
continue
if s.st_shndx not in [SHN_UNDEF, SHN_ABS]:
section_name = asm_objfile.sections[s.st_shndx].name
- if section_name not in SECTIONS:
- raise Failure("generated assembly .o must only have symbols for .text, .data, .rodata, ABS and UNDEF, but found " + section_name)
- s.st_shndx = objfile.find_section(section_name).index
+ target_section_name = section_name
+ if section_name == ".late_rodata":
+ target_section_name = ".rodata"
+ elif section_name not in SECTIONS:
+ raise Failure("generated assembly .o must only have symbols for .text, .data, .rodata, .late_rodata, ABS and UNDEF, but found " + section_name)
+ objfile_section = objfile.find_section(target_section_name)
+ if objfile_section is None:
+ raise Failure("generated assembly .o has section that real objfile lacks: " + target_section_name)
+ s.st_shndx = objfile_section.index
# glabel's aren't marked as functions, making objdump output confusing. Fix that.
if s.name in all_text_glabels:
s.type = STT_FUNC
if s.name in func_sizes:
s.st_size = func_sizes[s.name]
- if objfile.sections[s.st_shndx].name == '.rodata' and s.st_value in moved_late_rodata:
+ if section_name == '.late_rodata':
+ if s.st_value == 0:
+ # This must be a symbol corresponding to the whole .late_rodata
+ # section, being referred to from a relocation.
+ # Moving local symbols is tricky, because it requires fixing up
+ # lo16/hi16 relocation references to .late_rodata+.
+ # Just disallow it for now.
+ raise Failure("local symbols in .late_rodata are not allowed")
s.st_value = moved_late_rodata[s.st_value]
s.st_name += strtab_adj
- if is_local:
- new_local_syms.append(s)
- else:
- new_global_syms.append(s)
+ new_syms.append(s)
+ make_statics_global = convert_statics in ("global", "global-with-filename")
# Add static symbols from .mdebug, so they can be referred to from GLOBAL_ASM
- local_sym_replacements = {}
- if mdebug_section:
+ if mdebug_section and convert_statics != "no":
strtab_index = len(objfile.symtab.strtab.data)
new_strtab_data = []
- ifd_max, cb_fd_offset = struct.unpack('>II', mdebug_section.data[18*4 : 20*4])
- cb_sym_offset, = struct.unpack('>I', mdebug_section.data[9*4 : 10*4])
- cb_ss_offset, = struct.unpack('>I', mdebug_section.data[15*4 : 16*4])
+ ifd_max, cb_fd_offset = fmt.unpack('II', mdebug_section.data[18*4 : 20*4])
+ cb_sym_offset, = fmt.unpack('I', mdebug_section.data[9*4 : 10*4])
+ cb_ss_offset, = fmt.unpack('I', mdebug_section.data[15*4 : 16*4])
for i in range(ifd_max):
offset = cb_fd_offset + 18*4*i
- iss_base, _, isym_base, csym = struct.unpack('>IIII', objfile.data[offset + 2*4 : offset + 6*4])
+ iss_base, _, isym_base, csym = fmt.unpack('IIII', objfile.data[offset + 2*4 : offset + 6*4])
for j in range(csym):
offset2 = cb_sym_offset + 12 * (isym_base + j)
- iss, value, st_sc_index = struct.unpack('>III', objfile.data[offset2 : offset2 + 12])
+ iss, value, st_sc_index = fmt.unpack('III', objfile.data[offset2 : offset2 + 12])
st = (st_sc_index >> 26)
sc = (st_sc_index >> 21) & 0x1f
if st in [MIPS_DEBUG_ST_STATIC, MIPS_DEBUG_ST_STATIC_PROC]:
@@ -1157,44 +1286,72 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d
symbol_name_offset_end = objfile.data.find(b'\0', symbol_name_offset)
assert symbol_name_offset_end != -1
symbol_name = objfile.data[symbol_name_offset : symbol_name_offset_end + 1]
- symbol_name_str = symbol_name[:-1].decode('latin1')
+ emitted_symbol_name = symbol_name
+ if convert_statics == "global-with-filename":
+ # Change the emitted symbol name to include the filename,
+ # but don't let that affect deduplication logic.
+ emitted_symbol_name = objfile_name.encode("utf-8") + b":" + symbol_name
section_name = {1: '.text', 2: '.data', 3: '.bss', 15: '.rodata'}[sc]
section = objfile.find_section(section_name)
symtype = STT_FUNC if sc == 1 else STT_OBJECT
+ binding = STB_GLOBAL if make_statics_global else STB_LOCAL
sym = Symbol.from_parts(
+ fmt,
st_name=strtab_index,
st_value=value,
st_size=0,
- st_info=(STB_LOCAL << 4 | symtype),
+ st_info=(binding << 4 | symtype),
st_other=STV_DEFAULT,
st_shndx=section.index,
strtab=objfile.symtab.strtab,
- name=symbol_name_str)
- local_sym_replacements[symbol_name_str] = len(new_local_syms)
- strtab_index += len(symbol_name)
- new_strtab_data.append(symbol_name)
- new_local_syms.append(sym)
+ name=symbol_name[:-1].decode('latin1'))
+ strtab_index += len(emitted_symbol_name)
+ new_strtab_data.append(emitted_symbol_name)
+ new_syms.append(sym)
objfile.symtab.strtab.data += b''.join(new_strtab_data)
- # To get the linker to use the local symbols, we have to get rid of UNDEF
- # global ones.
- newer_global_syms = []
- for s in new_global_syms:
- if s.st_shndx == SHN_UNDEF and s.name in local_sym_replacements:
- s.new_index = local_sym_replacements[s.name]
+ # Get rid of duplicate symbols, favoring ones that are not UNDEF.
+ # Skip this for unnamed local symbols though.
+ new_syms.sort(key=lambda s: 0 if s.st_shndx != SHN_UNDEF else 1)
+ old_syms = []
+ newer_syms = []
+ name_to_sym = {}
+ for s in new_syms:
+ if s.name == "_gp_disp":
+ s.type = STT_OBJECT
+ if s.bind == STB_LOCAL and s.st_shndx == SHN_UNDEF:
+ raise Failure("local symbol \"" + s.name + "\" is undefined")
+ if not s.name:
+ if s.bind != STB_LOCAL:
+ raise Failure("global symbol with no name")
+ newer_syms.append(s)
else:
- newer_global_syms.append(s)
- new_global_syms = newer_global_syms
+ existing = name_to_sym.get(s.name)
+ if not existing:
+ name_to_sym[s.name] = s
+ newer_syms.append(s)
+ elif s.st_shndx != SHN_UNDEF:
+ raise Failure("symbol \"" + s.name + "\" defined twice")
+ else:
+ s.replace_by = existing
+ old_syms.append(s)
+ new_syms = newer_syms
+
+ # Put local symbols in front, with the initial dummy entry first, and
+ # _gp_disp at the end if it exists.
+ new_syms.insert(0, empty_symbol)
+ new_syms.sort(key=lambda s: (s.bind != STB_LOCAL, s.name == "_gp_disp"))
+ num_local_syms = sum(1 for s in new_syms if s.bind == STB_LOCAL)
- new_syms = new_local_syms + new_global_syms
for i, s in enumerate(new_syms):
s.new_index = i
+ for s in old_syms:
+ s.new_index = s.replace_by.new_index
objfile.symtab.data = b''.join(s.to_bin() for s in new_syms)
- objfile.symtab.sh_info = len(new_local_syms)
+ objfile.symtab.sh_info = num_local_syms
- # Move over relocations
+ # Fix up relocation symbol references
for sectype in SECTIONS:
- source = asm_objfile.find_section(sectype)
target = objfile.find_section(sectype)
if target is not None:
@@ -1206,34 +1363,38 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d
sectype == '.rodata' and rel.r_offset in jtbl_rodata_positions):
# don't include relocations for late_rodata dummy code
continue
- # hopefully we don't have relocations for local or
- # temporary symbols, so new_index exists
rel.sym_index = objfile.symtab.symbol_entries[rel.sym_index].new_index
nrels.append(rel)
reltab.relocations = nrels
reltab.data = b''.join(rel.to_bin() for rel in nrels)
- if not source:
+ # Move over relocations
+ for sectype in SECTIONS + ['.late_rodata']:
+ source = asm_objfile.find_section(sectype)
+ if source is None or not source.data:
continue
- target_reltab = objfile.find_section('.rel' + sectype)
- target_reltaba = objfile.find_section('.rela' + sectype)
+ target_sectype = '.rodata' if sectype == '.late_rodata' else sectype
+ target = objfile.find_section(target_sectype)
+ assert target is not None, target_sectype
+ target_reltab = objfile.find_section('.rel' + target_sectype)
+ target_reltaba = objfile.find_section('.rela' + target_sectype)
for reltab in source.relocated_by:
for rel in reltab.relocations:
rel.sym_index = asm_objfile.symtab.symbol_entries[rel.sym_index].new_index
- if sectype == '.rodata' and rel.r_offset in moved_late_rodata:
+ if sectype == '.late_rodata':
rel.r_offset = moved_late_rodata[rel.r_offset]
new_data = b''.join(rel.to_bin() for rel in reltab.relocations)
if reltab.sh_type == SHT_REL:
if not target_reltab:
- target_reltab = objfile.add_section('.rel' + sectype,
+ target_reltab = objfile.add_section('.rel' + target_sectype,
sh_type=SHT_REL, sh_flags=0,
sh_link=objfile.symtab.index, sh_info=target.index,
sh_addralign=4, sh_entsize=8, data=b'')
target_reltab.data += new_data
else:
if not target_reltaba:
- target_reltaba = objfile.add_section('.rela' + sectype,
+ target_reltaba = objfile.add_section('.rela' + target_sectype,
sh_type=SHT_RELA, sh_flags=0,
sh_link=objfile.symtab.index, sh_info=target.index,
sh_addralign=4, sh_entsize=12, data=b'')
@@ -1257,9 +1418,12 @@ def run_wrapped(argv, outfile, functions):
parser.add_argument('--input-enc', default='latin1', help="input encoding (default: %(default)s)")
parser.add_argument('--output-enc', default='latin1', help="output encoding (default: %(default)s)")
parser.add_argument('--drop-mdebug-gptab', dest='drop_mdebug_gptab', action='store_true', help="drop mdebug and gptab sections")
+ parser.add_argument('--convert-statics', dest='convert_statics', choices=["no", "local", "global", "global-with-filename"], default="local", help="change static symbol visibility (default: %(default)s)")
+ parser.add_argument('--force', dest='force', action='store_true', help="force processing of files without GLOBAL_ASM blocks")
parser.add_argument('-framepointer', dest='framepointer', action='store_true')
parser.add_argument('-mips1', dest='mips1', action='store_true')
parser.add_argument('-g3', dest='g3', action='store_true')
+ parser.add_argument('-KPIC', dest='kpic', action='store_true')
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('-O0', dest='opt', action='store_const', const='O0')
group.add_argument('-O1', dest='opt', action='store_const', const='O1')
@@ -1267,31 +1431,35 @@ def run_wrapped(argv, outfile, functions):
group.add_argument('-g', dest='opt', action='store_const', const='g')
args = parser.parse_args(argv)
opt = args.opt
+ pascal = any(args.filename.endswith(ext) for ext in (".p", ".pas", ".pp"))
if args.g3:
if opt != 'O2':
raise Failure("-g3 is only supported together with -O2")
opt = 'g3'
- if args.mips1 and (opt != 'O2' or args.framepointer):
- raise Failure("-mips1 is only supported together with -O2")
+ if args.mips1 and (opt not in ('O1', 'O2') or args.framepointer):
+ raise Failure("-mips1 is only supported together with -O1 or -O2")
+ if pascal and opt not in ('O1', 'O2', 'g3'):
+ raise Failure("Pascal is only supported together with -O1, -O2 or -O2 -g3")
+ opts = Opts(opt, args.framepointer, args.mips1, args.kpic, pascal, args.input_enc, args.output_enc)
if args.objfile is None:
with open(args.filename, encoding=args.input_enc) as f:
deps = []
- functions = parse_source(f, opt=opt, framepointer=args.framepointer, mips1=args.mips1, input_enc=args.input_enc, output_enc=args.output_enc, out_dependencies=deps, print_source=outfile)
+ functions = parse_source(f, opts, out_dependencies=deps, print_source=outfile)
return functions, deps
else:
if args.assembler is None:
raise Failure("must pass assembler command")
if functions is None:
with open(args.filename, encoding=args.input_enc) as f:
- functions = parse_source(f, opt=opt, framepointer=args.framepointer, mips1=args.mips1, input_enc=args.input_enc, out_dependencies=[], output_enc=args.output_enc)
- if not functions:
+ functions = parse_source(f, opts, out_dependencies=[])
+ if not functions and not args.force:
return
asm_prelude = b''
if args.asm_prelude:
with open(args.asm_prelude, 'rb') as f:
asm_prelude = f.read()
- fixup_objfile(args.objfile, functions, asm_prelude, args.assembler, args.output_enc, args.drop_mdebug_gptab)
+ fixup_objfile(args.objfile, functions, asm_prelude, args.assembler, args.output_enc, args.drop_mdebug_gptab, args.convert_statics)
def run(argv, outfile=sys.stdout.buffer, functions=None):
try:
diff --git a/tools/asm-processor/build.py b/tools/asm-processor/build.py
old mode 100755
new mode 100644
index 480dec9ed..efbaade4a
--- a/tools/asm-processor/build.py
+++ b/tools/asm-processor/build.py
@@ -1,41 +1,50 @@
#!/usr/bin/env python3
import sys
-import os
+from pathlib import Path
import shlex
import subprocess
import tempfile
+import uuid
import asm_processor
-dir_path = os.path.dirname(os.path.realpath(__file__))
-prelude = os.path.join(dir_path, "prelude.inc")
+# Boolean for debugging purposes
+# Preprocessed files are temporary, set to True to keep a copy
+keep_preprocessed_files = False
+
+dir_path = Path(__file__).resolve().parent
+asm_prelude_path = dir_path / "prelude.inc"
all_args = sys.argv[1:]
-sep0 = [index for index, arg in enumerate(all_args) if not arg.startswith("-")][0]
+sep0 = next(index for index, arg in enumerate(all_args) if not arg.startswith("-"))
sep1 = all_args.index("--")
sep2 = all_args.index("--", sep1 + 1)
asmproc_flags = all_args[:sep0]
compiler = all_args[sep0:sep1]
-assembler = all_args[sep1 + 1 : sep2]
-assembler_sh = " ".join(shlex.quote(x) for x in assembler)
+assembler_args = all_args[sep1 + 1 : sep2]
+assembler_sh = " ".join(shlex.quote(x) for x in assembler_args)
+
compile_args = all_args[sep2 + 1 :]
-in_file = compile_args[-1]
-out_ind = compile_args.index("-o")
-out_file = compile_args[out_ind + 1]
+
+in_file = Path(compile_args[-1])
del compile_args[-1]
+
+out_ind = compile_args.index("-o")
+out_file = Path(compile_args[out_ind + 1])
del compile_args[out_ind + 1]
del compile_args[out_ind]
-in_dir = os.path.split(os.path.realpath(in_file))[0]
+
+in_dir = in_file.resolve().parent
opt_flags = [
- x for x in compile_args if x in ["-g3", "-g", "-O0", "-O1", "-O2", "-framepointer"]
+ x for x in compile_args if x in {"-g3", "-g", "-O0", "-O1", "-O2", "-framepointer", "-KPIC"}
]
if "-mips2" not in compile_args:
opt_flags.append("-mips1")
-asmproc_flags += opt_flags + [in_file]
+asmproc_flags += opt_flags + [str(in_file)]
# Drop .mdebug and .gptab sections from resulting binaries. This makes
# resulting .o files much smaller and speeds up builds, but loses line
@@ -45,50 +54,61 @@ asmproc_flags += opt_flags + [in_file]
# Convert encoding before compiling.
# asmproc_flags += ["--input-enc", "utf-8", "--output-enc", "euc-jp"]
-preprocessed_file = tempfile.NamedTemporaryFile(
- prefix="preprocessed", suffix=".c", delete=False
-)
+with tempfile.TemporaryDirectory(prefix="asm_processor") as tmpdirname:
+ tmpdir_path = Path(tmpdirname)
+ preprocessed_filename = "preprocessed_" + uuid.uuid4().hex + in_file.suffix
+ preprocessed_path = tmpdir_path / preprocessed_filename
+
+ with preprocessed_path.open("wb") as f:
+ functions, deps = asm_processor.run(asmproc_flags, outfile=f)
+
+ if keep_preprocessed_files:
+ import shutil
+
+ keep_output_dir = Path("./asm_processor_preprocessed")
+ keep_output_dir.mkdir(parents=True, exist_ok=True)
+
+ shutil.copy(
+ preprocessed_path,
+ keep_output_dir / (in_file.stem + "_" + preprocessed_filename),
+ )
-try:
compile_cmdline = (
- compiler + compile_args + ["-I", in_dir, "-o", out_file, preprocessed_file.name]
+ compiler
+ + compile_args
+ + ["-I", str(in_dir), "-o", str(out_file), str(preprocessed_path)]
)
- functions, deps = asm_processor.run(asmproc_flags, outfile=preprocessed_file)
try:
subprocess.check_call(compile_cmdline)
except subprocess.CalledProcessError as e:
- print("Failed to compile file " + in_file + ". Command line:")
+ print("Failed to compile file " + str(in_file) + ". Command line:")
print()
print(" ".join(shlex.quote(x) for x in compile_cmdline))
print()
sys.exit(55)
- # To keep the preprocessed file:
- # os._exit(1)
asm_processor.run(
asmproc_flags
+ [
"--post-process",
- out_file,
+ str(out_file),
"--assembler",
assembler_sh,
"--asm-prelude",
- prelude,
+ str(asm_prelude_path),
],
functions=functions,
)
- deps_file = out_file[:-2] + ".asmproc.d"
+ deps_file = out_file.with_suffix(".asmproc.d")
if deps:
- with open(deps_file, "w") as f:
- f.write(out_file + ": " + " \\\n ".join(deps) + "\n")
+ with deps_file.open("w") as f:
+ f.write(str(out_file) + ": " + " \\\n ".join(deps) + "\n")
for dep in deps:
f.write("\n" + dep + ":\n")
else:
try:
- os.remove(deps_file)
+ deps_file.unlink()
except OSError:
pass
-finally:
- os.remove(preprocessed_file.name)
diff --git a/tools/asm-processor/compile-test.sh b/tools/asm-processor/compile-test.sh
new file mode 100755
index 000000000..65516629e
--- /dev/null
+++ b/tools/asm-processor/compile-test.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+set -o pipefail
+INPUT="$1"
+OUTPUT="${INPUT%.*}.o"
+
+rm -f "$OUTPUT"
+
+CC="$MIPS_CC" # ido 7.1 via recomp or qemu-irix
+AS="mips-linux-gnu-as"
+ASFLAGS="-march=vr4300 -mabi=32"
+OPTFLAGS=$(grep 'COMPILE-FLAGS: ' $INPUT | sed 's#^.*COMPILE-FLAGS: ##' | sed 's#}$##')
+ASMPFLAGS=$(grep 'ASMP-FLAGS: ' $INPUT | sed 's#^.*ASMP-FLAGS: ##' | sed 's#}$##')
+ISET=$(grep 'COMPILE-ISET: ' $INPUT | sed 's#^.*COMPILE-ISET: ##' | sed 's#}$##')
+if [[ -z "$OPTFLAGS" ]]; then
+ OPTFLAGS="-g"
+fi
+CFLAGS="-Wab,-r4300_mul -G 0 -Xcpluscomm -fullwarn -wlint -woff 819,820,852,821 -signed -c"
+if [[ -z "$ISET" ]]; then
+ CFLAGS="$CFLAGS -mips2"
+fi
+if [[ "$OPTFLAGS" != *-KPIC* ]]; then
+ CFLAGS="$CFLAGS -non_shared"
+fi
+
+set -e
+python3 build.py --drop-mdebug-gptab $ASMPFLAGS $CC -- $AS $ASFLAGS -- $CFLAGS $OPTFLAGS $ISET -o "$OUTPUT" "$INPUT"
diff --git a/tools/asm-processor/run-tests.sh b/tools/asm-processor/run-tests.sh
new file mode 100755
index 000000000..5cae0a741
--- /dev/null
+++ b/tools/asm-processor/run-tests.sh
@@ -0,0 +1,6 @@
+#!/usr/bin/env bash
+for A in tests/*.c tests/*.p; do
+ OBJDUMPFLAGS=-srt
+ echo $A
+ ./compile-test.sh "$A" && mips-linux-gnu-objdump $OBJDUMPFLAGS "${A%.*}.o" | diff - "${A%.*}.objdump" || echo FAIL "$A"
+done
diff --git a/tools/asm-processor/tests/ascii.c b/tools/asm-processor/tests/ascii.c
new file mode 100644
index 000000000..bb27d2527
--- /dev/null
+++ b/tools/asm-processor/tests/ascii.c
@@ -0,0 +1,19 @@
+void foo(void) { "abcdef"; }
+
+GLOBAL_ASM(
+.rdata
+ .ascii "AB"
+ .ascii "CD", "EF"
+ .ascii "GH\n\n\n\0\11\222\3333\44444\x1234567\n\nIJK"
+)
+
+void bar(void) { "hello"; }
+
+GLOBAL_ASM(
+.rdata
+ .asciiz "12"
+ .asciiz "34", "56"
+ .asciiz "78\n\n\n\0\11\222\3333\44444\x1234567\n\n9A"
+)
+
+void baz(void) { "ghijkl"; }
diff --git a/tools/asm-processor/tests/ascii.objdump b/tools/asm-processor/tests/ascii.objdump
new file mode 100644
index 000000000..bf42638a9
--- /dev/null
+++ b/tools/asm-processor/tests/ascii.objdump
@@ -0,0 +1,29 @@
+
+tests/ascii.o: file format elf32-tradbigmips
+
+SYMBOL TABLE:
+00000000 l d .text 00000030 .text
+00000000 l d .rodata 00000050 .rodata
+00000000 g F .text 00000010 foo
+00000010 g F .text 00000010 bar
+00000020 g F .text 00000010 baz
+
+
+Contents of section .text:
+ 0000 03e00008 00000000 03e00008 00000000 ................
+ 0010 03e00008 00000000 03e00008 00000000 ................
+ 0020 03e00008 00000000 03e00008 00000000 ................
+Contents of section .rodata:
+ 0000 61626364 65660000 41424344 45464748 abcdef..ABCDEFGH
+ 0010 0a0a0a00 0992db33 24343467 0a0a494a .......3$44g..IJ
+ 0020 4b000000 68656c6c 6f000000 31320033 K...hello...12.3
+ 0030 34003536 0037380a 0a0a0009 92db3324 4.56.78.......3$
+ 0040 3434670a 0a394100 6768696a 6b6c0000 44g..9A.ghijkl..
+Contents of section .options:
+ 0000 01200000 00000000 80000000 00000000 . ..............
+ 0010 00000000 00000000 00000000 00007ff0 ................
+ 0020 07100000 00000000 00000000 00000000 ................
+ 0030 08100000 00000000 00000000 00000000 ................
+Contents of section .reginfo:
+ 0000 80000000 00000000 00000000 00000000 ................
+ 0010 00000000 00007ff0 ........
diff --git a/tools/asm-processor/tests/comments.c b/tools/asm-processor/tests/comments.c
new file mode 100644
index 000000000..4c9366991
--- /dev/null
+++ b/tools/asm-processor/tests/comments.c
@@ -0,0 +1,6 @@
+const char before[] = "^";
+GLOBAL_ASM(
+.rdata
+.asciz "aaaa /* bbbb */ # cccc", /**//**//**//**/ /*/ "xxxx" /*/ /* dddd " eeee */ "# ffff" # gggg "hhhh" /* iiii */
+)
+const char after[] = "$";
diff --git a/tools/asm-processor/tests/comments.objdump b/tools/asm-processor/tests/comments.objdump
new file mode 100644
index 000000000..246df2094
--- /dev/null
+++ b/tools/asm-processor/tests/comments.objdump
@@ -0,0 +1,21 @@
+
+tests/comments.o: file format elf32-tradbigmips
+
+SYMBOL TABLE:
+00000000 l d .rodata 00000030 .rodata
+00000000 g O .rodata 00000002 before
+00000024 g O .rodata 00000002 after
+
+
+Contents of section .rodata:
+ 0000 5e000000 61616161 202f2a20 62626262 ^...aaaa /* bbbb
+ 0010 202a2f20 23206363 63630023 20666666 */ # cccc.# fff
+ 0020 66000000 24000000 00000000 00000000 f...$...........
+Contents of section .options:
+ 0000 01200000 00000000 00000000 00000000 . ..............
+ 0010 00000000 00000000 00000000 00007ff0 ................
+ 0020 07100000 00000000 00000000 00000000 ................
+ 0030 08100000 00000000 00000000 00000000 ................
+Contents of section .reginfo:
+ 0000 00000000 00000000 00000000 00000000 ................
+ 0010 00000000 00007ff0 ........
diff --git a/tools/asm-processor/tests/force.c b/tools/asm-processor/tests/force.c
new file mode 100644
index 000000000..03b630c13
--- /dev/null
+++ b/tools/asm-processor/tests/force.c
@@ -0,0 +1,17 @@
+// COMPILE-FLAGS: -O2
+// ASMP-FLAGS: --convert-statics=global-with-filename --force
+static int xtext(int a, int b, int c);
+const int rodata1[] = {1};
+static const int rodata2[] = {2};
+int data1[] = {3};
+static int data2[] = {4};
+int bss1;
+static int bss2;
+
+static int xtext(int a, int b, int c) {
+ return 1;
+}
+
+void baz(void) {
+ xtext(bss2, rodata2[0], data2[0]);
+}
diff --git a/tools/asm-processor/tests/force.objdump b/tools/asm-processor/tests/force.objdump
new file mode 100644
index 000000000..7ef70247b
--- /dev/null
+++ b/tools/asm-processor/tests/force.objdump
@@ -0,0 +1,47 @@
+
+tests/force.o: file format elf32-tradbigmips
+
+SYMBOL TABLE:
+00000000 l d .text 00000050 .text
+00000000 l d .rodata 00000010 .rodata
+00000000 l d .data 00000010 .data
+00000000 l d .bss 00000010 .bss
+00000000 g O .rodata 00000004 rodata1
+00000000 g O .data 00000004 data1
+00000000 g O .bss 00000004 bss1
+00000014 g F .text 00000034 baz
+00000004 g O .rodata 00000000 tests/force.o:rodata2
+00000004 g O .data 00000000 tests/force.o:data2
+00000004 g O .bss 00000000 tests/force.o:bss2
+00000000 g F .text 00000000 tests/force.o:xtext
+
+
+RELOCATION RECORDS FOR [.text]:
+OFFSET TYPE VALUE
+0000001c R_MIPS_HI16 .bss
+00000034 R_MIPS_LO16 .bss
+00000020 R_MIPS_HI16 .rodata
+0000002c R_MIPS_LO16 .rodata
+00000024 R_MIPS_HI16 .data
+00000028 R_MIPS_LO16 .data
+00000030 R_MIPS_26 .text
+
+
+Contents of section .text:
+ 0000 afa40000 afa50004 afa60008 03e00008 ................
+ 0010 24020001 27bdffe8 afbf0014 3c040000 $...'.......<...
+ 0020 3c050000 3c060000 8cc60004 8ca50004 <...<...........
+ 0030 0c000000 8c840004 8fbf0014 27bd0018 ............'...
+ 0040 03e00008 00000000 00000000 00000000 ................
+Contents of section .rodata:
+ 0000 00000001 00000002 00000000 00000000 ................
+Contents of section .data:
+ 0000 00000003 00000004 00000000 00000000 ................
+Contents of section .options:
+ 0000 01200000 00000000 a0000074 00000000 . .........t....
+ 0010 00000000 00000000 00000000 00007ff0 ................
+ 0020 07100000 00000000 00000000 00000000 ................
+ 0030 08100000 00000000 00000000 00000000 ................
+Contents of section .reginfo:
+ 0000 a0000074 00000000 00000000 00000000 ...t............
+ 0010 00000000 00007ff0 ........
diff --git a/tools/asm-processor/tests/kpic-o1.c b/tools/asm-processor/tests/kpic-o1.c
new file mode 100644
index 000000000..4d3346d2f
--- /dev/null
+++ b/tools/asm-processor/tests/kpic-o1.c
@@ -0,0 +1,93 @@
+// COMPILE-FLAGS: -O1 -KPIC
+GLOBAL_ASM(
+glabel foo
+addiu $a0, $a0, 1
+addiu $a0, $a0, 2
+addiu $a0, $a0, 3
+addiu $a0, $a0, 4
+addiu $a0, $a0, 5
+addiu $a0, $a0, 6
+addiu $a0, $a0, 7
+addiu $a0, $a0, 8
+addiu $a0, $a0, 9
+addiu $a0, $a0, 10
+addiu $a0, $a0, 11
+addiu $a0, $a0, 12
+)
+GLOBAL_ASM(
+.late_rodata
+.float 1
+.text
+glabel float_fn
+addiu $a0, $a0, 13
+addiu $a0, $a0, 14
+addiu $a0, $a0, 15
+addiu $a0, $a0, 16
+addiu $a0, $a0, 17
+addiu $a0, $a0, 18
+addiu $a0, $a0, 19
+addiu $a0, $a0, 20
+addiu $a0, $a0, 21
+addiu $a0, $a0, 22
+addiu $a0, $a0, 23
+addiu $a0, $a0, 24
+addiu $a0, $a0, 25
+addiu $a0, $a0, 26
+addiu $a0, $a0, 27
+addiu $a0, $a0, 28
+addiu $a0, $a0, 29
+addiu $a0, $a0, 30
+)
+GLOBAL_ASM(
+.late_rodata
+.late_rodata_alignment 4
+.float 2
+.double 1
+.double 2
+.double 3
+.double 4
+.double 5
+.double 6
+.double 7
+.double 8
+.text
+glabel doubles
+addiu $a0, $a0, 31
+addiu $a0, $a0, 32
+addiu $a0, $a0, 33
+addiu $a0, $a0, 34
+addiu $a0, $a0, 35
+addiu $a0, $a0, 36
+addiu $a0, $a0, 37
+addiu $a0, $a0, 38
+addiu $a0, $a0, 39
+addiu $a0, $a0, 40
+addiu $a0, $a0, 41
+addiu $a0, $a0, 42
+addiu $a0, $a0, 43
+addiu $a0, $a0, 44
+addiu $a0, $a0, 45
+addiu $a0, $a0, 46
+addiu $a0, $a0, 47
+addiu $a0, $a0, 48
+addiu $a0, $a0, 49
+addiu $a0, $a0, 50
+addiu $a0, $a0, 51
+addiu $a0, $a0, 52
+addiu $a0, $a0, 53
+addiu $a0, $a0, 54
+addiu $a0, $a0, 55
+addiu $a0, $a0, 56
+addiu $a0, $a0, 57
+addiu $a0, $a0, 58
+addiu $a0, $a0, 59
+addiu $a0, $a0, 60
+addiu $a0, $a0, 61
+addiu $a0, $a0, 62
+addiu $a0, $a0, 63
+addiu $a0, $a0, 64
+addiu $a0, $a0, 65
+addiu $a0, $a0, 66
+addiu $a0, $a0, 67
+addiu $a0, $a0, 68
+)
diff --git a/tools/asm-processor/tests/kpic-o1.objdump b/tools/asm-processor/tests/kpic-o1.objdump
new file mode 100644
index 000000000..6e336753a
--- /dev/null
+++ b/tools/asm-processor/tests/kpic-o1.objdump
@@ -0,0 +1,46 @@
+
+tests/kpic-o1.o: file format elf32-tradbigmips
+
+SYMBOL TABLE:
+00000000 l d .text 00000110 .text
+00000000 l d .rodata 00000050 .rodata
+00000000 g F .text 00000030 foo
+00000030 g F .text 00000048 float_fn
+00000078 g F .text 00000098 doubles
+00000000 O *UND* 00000000 _gp_disp
+
+
+RELOCATION RECORDS FOR [.text]: (none)
+
+Contents of section .text:
+ 0000 24840001 24840002 24840003 24840004 $...$...$...$...
+ 0010 24840005 24840006 24840007 24840008 $...$...$...$...
+ 0020 24840009 2484000a 2484000b 2484000c $...$...$...$...
+ 0030 2484000d 2484000e 2484000f 24840010 $...$...$...$...
+ 0040 24840011 24840012 24840013 24840014 $...$...$...$...
+ 0050 24840015 24840016 24840017 24840018 $...$...$...$...
+ 0060 24840019 2484001a 2484001b 2484001c $...$...$...$...
+ 0070 2484001d 2484001e 2484001f 24840020 $...$...$...$..
+ 0080 24840021 24840022 24840023 24840024 $..!$.."$..#$..$
+ 0090 24840025 24840026 24840027 24840028 $..%$..&$..'$..(
+ 00a0 24840029 2484002a 2484002b 2484002c $..)$..*$..+$..,
+ 00b0 2484002d 2484002e 2484002f 24840030 $..-$...$../$..0
+ 00c0 24840031 24840032 24840033 24840034 $..1$..2$..3$..4
+ 00d0 24840035 24840036 24840037 24840038 $..5$..6$..7$..8
+ 00e0 24840039 2484003a 2484003b 2484003c $..9$..:$..;$..<
+ 00f0 2484003d 2484003e 2484003f 24840040 $..=$..>$..?$..@
+ 0100 24840041 24840042 24840043 24840044 $..A$..B$..C$..D
+Contents of section .rodata:
+ 0000 3f800000 40000000 3ff00000 00000000 ?...@...?.......
+ 0010 40000000 00000000 40080000 00000000 @.......@.......
+ 0020 40100000 00000000 40140000 00000000 @.......@.......
+ 0030 40180000 00000000 401c0000 00000000 @.......@.......
+ 0040 40200000 00000000 00000000 00000000 @ ..............
+Contents of section .options:
+ 0000 01200000 00000000 92000002 00000000 . ..............
+ 0010 000f0ff0 00000000 00000000 00000000 ................
+ 0020 07100000 00000000 00000000 00000000 ................
+ 0030 08100000 00000000 00000000 00000000 ................
+Contents of section .reginfo:
+ 0000 92000012 00000000 000f0ff0 00000000 ................
+ 0010 00000000 00000000 ........
diff --git a/tools/asm-processor/tests/kpic-o2.c b/tools/asm-processor/tests/kpic-o2.c
new file mode 100644
index 000000000..f037341cc
--- /dev/null
+++ b/tools/asm-processor/tests/kpic-o2.c
@@ -0,0 +1,92 @@
+// COMPILE-FLAGS: -O2 -KPIC
+GLOBAL_ASM(
+glabel foo
+addiu $a0, $a0, 1
+addiu $a0, $a0, 2
+addiu $a0, $a0, 3
+addiu $a0, $a0, 4
+addiu $a0, $a0, 5
+addiu $a0, $a0, 6
+addiu $a0, $a0, 7
+addiu $a0, $a0, 8
+addiu $a0, $a0, 9
+addiu $a0, $a0, 10
+addiu $a0, $a0, 11
+addiu $a0, $a0, 12
+)
+GLOBAL_ASM(
+.late_rodata
+.float 1
+.text
+glabel float_fn
+addiu $a0, $a0, 13
+addiu $a0, $a0, 14
+addiu $a0, $a0, 15
+addiu $a0, $a0, 16
+addiu $a0, $a0, 17
+addiu $a0, $a0, 18
+addiu $a0, $a0, 19
+addiu $a0, $a0, 20
+addiu $a0, $a0, 21
+addiu $a0, $a0, 22
+addiu $a0, $a0, 23
+addiu $a0, $a0, 24
+addiu $a0, $a0, 25
+addiu $a0, $a0, 26
+addiu $a0, $a0, 27
+addiu $a0, $a0, 28
+addiu $a0, $a0, 29
+addiu $a0, $a0, 30
+)
+GLOBAL_ASM(
+.late_rodata
+.float 2
+.double 1
+.double 2
+.double 3
+.double 4
+.double 5
+.double 6
+.double 7
+.double 8
+.text
+glabel doubles
+addiu $a0, $a0, 31
+addiu $a0, $a0, 32
+addiu $a0, $a0, 33
+addiu $a0, $a0, 34
+addiu $a0, $a0, 35
+addiu $a0, $a0, 36
+addiu $a0, $a0, 37
+addiu $a0, $a0, 38
+addiu $a0, $a0, 39
+addiu $a0, $a0, 40
+addiu $a0, $a0, 41
+addiu $a0, $a0, 42
+addiu $a0, $a0, 43
+addiu $a0, $a0, 44
+addiu $a0, $a0, 45
+addiu $a0, $a0, 46
+addiu $a0, $a0, 47
+addiu $a0, $a0, 48
+addiu $a0, $a0, 49
+addiu $a0, $a0, 50
+addiu $a0, $a0, 51
+addiu $a0, $a0, 52
+addiu $a0, $a0, 53
+addiu $a0, $a0, 54
+addiu $a0, $a0, 55
+addiu $a0, $a0, 56
+addiu $a0, $a0, 57
+addiu $a0, $a0, 58
+addiu $a0, $a0, 59
+addiu $a0, $a0, 60
+addiu $a0, $a0, 61
+addiu $a0, $a0, 62
+addiu $a0, $a0, 63
+addiu $a0, $a0, 64
+addiu $a0, $a0, 65
+addiu $a0, $a0, 66
+addiu $a0, $a0, 67
+addiu $a0, $a0, 68
+)
diff --git a/tools/asm-processor/tests/kpic-o2.objdump b/tools/asm-processor/tests/kpic-o2.objdump
new file mode 100644
index 000000000..abf87aeb4
--- /dev/null
+++ b/tools/asm-processor/tests/kpic-o2.objdump
@@ -0,0 +1,46 @@
+
+tests/kpic-o2.o: file format elf32-tradbigmips
+
+SYMBOL TABLE:
+00000000 l d .text 00000110 .text
+00000000 l d .rodata 00000050 .rodata
+00000000 g F .text 00000030 foo
+00000030 g F .text 00000048 float_fn
+00000078 g F .text 00000098 doubles
+00000000 O *UND* 00000000 _gp_disp
+
+
+RELOCATION RECORDS FOR [.text]: (none)
+
+Contents of section .text:
+ 0000 24840001 24840002 24840003 24840004 $...$...$...$...
+ 0010 24840005 24840006 24840007 24840008 $...$...$...$...
+ 0020 24840009 2484000a 2484000b 2484000c $...$...$...$...
+ 0030 2484000d 2484000e 2484000f 24840010 $...$...$...$...
+ 0040 24840011 24840012 24840013 24840014 $...$...$...$...
+ 0050 24840015 24840016 24840017 24840018 $...$...$...$...
+ 0060 24840019 2484001a 2484001b 2484001c $...$...$...$...
+ 0070 2484001d 2484001e 2484001f 24840020 $...$...$...$..
+ 0080 24840021 24840022 24840023 24840024 $..!$.."$..#$..$
+ 0090 24840025 24840026 24840027 24840028 $..%$..&$..'$..(
+ 00a0 24840029 2484002a 2484002b 2484002c $..)$..*$..+$..,
+ 00b0 2484002d 2484002e 2484002f 24840030 $..-$...$../$..0
+ 00c0 24840031 24840032 24840033 24840034 $..1$..2$..3$..4
+ 00d0 24840035 24840036 24840037 24840038 $..5$..6$..7$..8
+ 00e0 24840039 2484003a 2484003b 2484003c $..9$..:$..;$..<
+ 00f0 2484003d 2484003e 2484003f 24840040 $..=$..>$..?$..@
+ 0100 24840041 24840042 24840043 24840044 $..A$..B$..C$..D
+Contents of section .rodata:
+ 0000 3f800000 40000000 3ff00000 00000000 ?...@...?.......
+ 0010 40000000 00000000 40080000 00000000 @.......@.......
+ 0020 40100000 00000000 40140000 00000000 @.......@.......
+ 0030 40180000 00000000 401c0000 00000000 @.......@.......
+ 0040 40200000 00000000 00000000 00000000 @ ..............
+Contents of section .options:
+ 0000 01200000 00000000 92000002 00000000 . ..............
+ 0010 000f0ff0 00000000 00000000 00000000 ................
+ 0020 07100000 00000000 00000000 00000000 ................
+ 0030 08100000 00000000 00000000 00000000 ................
+Contents of section .reginfo:
+ 0000 92000012 00000000 000f0ff0 00000000 ................
+ 0010 00000000 00000000 ........
diff --git a/tools/asm-processor/tests/label-sameline.c b/tools/asm-processor/tests/label-sameline.c
new file mode 100644
index 000000000..a35b43d85
--- /dev/null
+++ b/tools/asm-processor/tests/label-sameline.c
@@ -0,0 +1,7 @@
+GLOBAL_ASM(
+.rdata
+.word 0x12345678
+glabel blah
+.word blah2
+ /*a*/ blah2: /*b*/ .word blah /*c*/
+)
diff --git a/tools/asm-processor/tests/label-sameline.objdump b/tools/asm-processor/tests/label-sameline.objdump
new file mode 100644
index 000000000..1f1aacff4
--- /dev/null
+++ b/tools/asm-processor/tests/label-sameline.objdump
@@ -0,0 +1,25 @@
+
+tests/label-sameline.o: file format elf32-tradbigmips
+
+SYMBOL TABLE:
+00000000 l d .rodata 00000010 .rodata
+00000000 l d .rodata 00000000
+00000004 g .rodata 00000000 blah
+
+
+RELOCATION RECORDS FOR [.rodata]:
+OFFSET TYPE VALUE
+00000004 R_MIPS_32
+00000008 R_MIPS_32 blah
+
+
+Contents of section .rodata:
+ 0000 12345678 00000008 00000000 00000000 .4Vx............
+Contents of section .options:
+ 0000 01200000 00000000 00000000 00000000 . ..............
+ 0010 00000000 00000000 00000000 00007ff0 ................
+ 0020 07100000 00000000 00000000 00000000 ................
+ 0030 08100000 00000000 00000000 00000000 ................
+Contents of section .reginfo:
+ 0000 00000000 00000000 00000000 00000000 ................
+ 0010 00000000 00007ff0 ........
diff --git a/tools/asm-processor/tests/large.c b/tools/asm-processor/tests/large.c
new file mode 100644
index 000000000..4ffb4ac12
--- /dev/null
+++ b/tools/asm-processor/tests/large.c
@@ -0,0 +1,164 @@
+
+GLOBAL_ASM(
+glabel test
+
+addiu $sp, $sp, -24
+ sw $zero, 4($sp)
+lw $t6, 4($sp)
+addu $t7, $a0, $t6
+sb $zero, ($t7)
+lw $t8, 4($sp)
+addiu $t9, $t8, 1
+slt $at, $t9, $a1
+ sw $t9, 4($sp)
+ nop
+jr $ra
+ addiu $sp, $sp, 24
+addiu $sp, $sp, -24
+ sw $zero, 4($sp)
+lw $t6, 4($sp)
+addu $t7, $a0, $t6
+sb $zero, ($t7)
+lw $t8, 4($sp)
+addiu $t9, $t8, 1
+slt $at, $t9, $a1
+ sw $t9, 4($sp)
+ nop
+jr $ra
+ addiu $sp, $sp, 24
+addiu $sp, $sp, -24
+ sw $zero, 4($sp)
+lw $t6, 4($sp)
+addu $t7, $a0, $t6
+sb $zero, ($t7)
+lw $t8, 4($sp)
+addiu $t9, $t8, 1
+slt $at, $t9, $a1
+ sw $t9, 4($sp)
+ nop
+jr $ra
+ addiu $sp, $sp, 24
+addiu $sp, $sp, -24
+ sw $zero, 4($sp)
+lw $t6, 4($sp)
+addu $t7, $a0, $t6
+sb $zero, ($t7)
+lw $t8, 4($sp)
+addiu $t9, $t8, 1
+slt $at, $t9, $a1
+ sw $t9, 4($sp)
+ nop
+jr $ra
+ addiu $sp, $sp, 24
+addiu $sp, $sp, -24
+ sw $zero, 4($sp)
+lw $t6, 4($sp)
+addu $t7, $a0, $t6
+sb $zero, ($t7)
+lw $t8, 4($sp)
+addiu $t9, $t8, 1
+slt $at, $t9, $a1
+ sw $t9, 4($sp)
+ nop
+jr $ra
+ addiu $sp, $sp, 24
+addiu $sp, $sp, -24
+ sw $zero, 4($sp)
+lw $t6, 4($sp)
+addu $t7, $a0, $t6
+sb $zero, ($t7)
+lw $t8, 4($sp)
+addiu $t9, $t8, 1
+slt $at, $t9, $a1
+ sw $t9, 4($sp)
+ nop
+jr $ra
+ addiu $sp, $sp, 24
+addiu $sp, $sp, -24
+ sw $zero, 4($sp)
+lw $t6, 4($sp)
+addu $t7, $a0, $t6
+sb $zero, ($t7)
+lw $t8, 4($sp)
+addiu $t9, $t8, 1
+slt $at, $t9, $a1
+ sw $t9, 4($sp)
+ nop
+jr $ra
+ addiu $sp, $sp, 24
+addiu $sp, $sp, -24
+ sw $zero, 4($sp)
+lw $t6, 4($sp)
+addu $t7, $a0, $t6
+sb $zero, ($t7)
+lw $t8, 4($sp)
+addiu $t9, $t8, 1
+slt $at, $t9, $a1
+ sw $t9, 4($sp)
+ nop
+jr $ra
+ addiu $sp, $sp, 24
+addiu $sp, $sp, -24
+ sw $zero, 4($sp)
+lw $t6, 4($sp)
+addu $t7, $a0, $t6
+sb $zero, ($t7)
+lw $t8, 4($sp)
+addiu $t9, $t8, 1
+slt $at, $t9, $a1
+ sw $t9, 4($sp)
+ nop
+jr $ra
+ addiu $sp, $sp, 24
+addiu $sp, $sp, -24
+ sw $zero, 4($sp)
+lw $t6, 4($sp)
+addu $t7, $a0, $t6
+sb $zero, ($t7)
+lw $t8, 4($sp)
+addiu $t9, $t8, 1
+slt $at, $t9, $a1
+ sw $t9, 4($sp)
+ nop
+jr $ra
+ addiu $sp, $sp, 24
+addiu $sp, $sp, -24
+ sw $zero, 4($sp)
+lw $t6, 4($sp)
+addu $t7, $a0, $t6
+sb $zero, ($t7)
+lw $t8, 4($sp)
+addiu $t9, $t8, 1
+slt $at, $t9, $a1
+ sw $t9, 4($sp)
+ nop
+jr $ra
+ addiu $sp, $sp, 24
+addiu $sp, $sp, -24
+ sw $zero, 4($sp)
+lw $t6, 4($sp)
+addu $t7, $a0, $t6
+sb $zero, ($t7)
+lw $t8, 4($sp)
+addiu $t9, $t8, 1
+slt $at, $t9, $a1
+ sw $t9, 4($sp)
+ nop
+jr $ra
+ addiu $sp, $sp, 24
+addiu $sp, $sp, -24
+ sw $zero, 4($sp)
+lw $t6, 4($sp)
+addu $t7, $a0, $t6
+sb $zero, ($t7)
+lw $t8, 4($sp)
+addiu $t9, $t8, 1
+slt $at, $t9, $a1
+ sw $t9, 4($sp)
+ nop
+jr $ra
+ addiu $sp, $sp, 24
+
+)
+
+void foo(void) {}
diff --git a/tools/asm-processor/tests/large.objdump b/tools/asm-processor/tests/large.objdump
new file mode 100644
index 000000000..17409a7af
--- /dev/null
+++ b/tools/asm-processor/tests/large.objdump
@@ -0,0 +1,58 @@
+
+tests/large.o: file format elf32-tradbigmips
+
+SYMBOL TABLE:
+00000000 l d .text 00000280 .text
+00000270 g F .text 00000010 foo
+00000000 g F .text 00000270 test
+
+
+Contents of section .text:
+ 0000 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
+ 0010 a1e00000 8fb80004 27190001 0325082a ........'....%.*
+ 0020 afb90004 00000000 03e00008 27bd0018 ............'...
+ 0030 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
+ 0040 a1e00000 8fb80004 27190001 0325082a ........'....%.*
+ 0050 afb90004 00000000 03e00008 27bd0018 ............'...
+ 0060 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
+ 0070 a1e00000 8fb80004 27190001 0325082a ........'....%.*
+ 0080 afb90004 00000000 03e00008 27bd0018 ............'...
+ 0090 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
+ 00a0 a1e00000 8fb80004 27190001 0325082a ........'....%.*
+ 00b0 afb90004 00000000 03e00008 27bd0018 ............'...
+ 00c0 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
+ 00d0 a1e00000 8fb80004 27190001 0325082a ........'....%.*
+ 00e0 afb90004 00000000 03e00008 27bd0018 ............'...
+ 00f0 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
+ 0100 a1e00000 8fb80004 27190001 0325082a ........'....%.*
+ 0110 afb90004 00000000 03e00008 27bd0018 ............'...
+ 0120 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
+ 0130 a1e00000 8fb80004 27190001 0325082a ........'....%.*
+ 0140 afb90004 00000000 03e00008 27bd0018 ............'...
+ 0150 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
+ 0160 a1e00000 8fb80004 27190001 0325082a ........'....%.*
+ 0170 afb90004 00000000 03e00008 27bd0018 ............'...
+ 0180 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
+ 0190 a1e00000 8fb80004 27190001 0325082a ........'....%.*
+ 01a0 afb90004 00000000 03e00008 27bd0018 ............'...
+ 01b0 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
+ 01c0 a1e00000 8fb80004 27190001 0325082a ........'....%.*
+ 01d0 afb90004 00000000 03e00008 27bd0018 ............'...
+ 01e0 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
+ 01f0 a1e00000 8fb80004 27190001 0325082a ........'....%.*
+ 0200 afb90004 00000000 03e00008 27bd0018 ............'...
+ 0210 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
+ 0220 a1e00000 8fb80004 27190001 0325082a ........'....%.*
+ 0230 afb90004 00000000 03e00008 27bd0018 ............'...
+ 0240 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
+ 0250 a1e00000 8fb80004 27190001 0325082a ........'....%.*
+ 0260 afb90004 00000000 03e00008 27bd0018 ............'...
+ 0270 03e00008 00000000 03e00008 00000000 ................
+Contents of section .options:
+ 0000 01200000 00000000 80000000 00000000 . ..............
+ 0010 00000000 00000000 00000000 00007ff0 ................
+ 0020 07100000 00000000 00000000 00000000 ................
+ 0030 08100000 00000000 00000000 00000000 ................
+Contents of section .reginfo:
+ 0000 a300c032 00000000 00000000 00000000 ...2............
+ 0010 00000000 00007ff0 ........
diff --git a/tools/asm-processor/tests/late_rodata_align.c b/tools/asm-processor/tests/late_rodata_align.c
new file mode 100644
index 000000000..7367c792b
--- /dev/null
+++ b/tools/asm-processor/tests/late_rodata_align.c
@@ -0,0 +1,80 @@
+GLOBAL_ASM(
+.late_rodata
+ .float 4.1
+ .float 4.2
+ .float 4.3
+ .float 4.4
+.text
+glabel a
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+)
+
+float foo(void) { "foo"; return 1.1f; }
+
+GLOBAL_ASM(
+.late_rodata
+.late_rodata_alignment 4
+ .float 5.1
+ .float 5.2
+ .float 5.3
+ .float 5.4
+.text
+glabel b
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+)
+
+float bar(void) { "bar"; return 1.2f; }
+
+GLOBAL_ASM(
+.late_rodata
+.late_rodata_alignment 8
+ .float 6.1
+ .float 6.2
+ .float 6.3
+ .float 6.4
+ .float 6.5
+.text
+glabel c
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+)
+
diff --git a/tools/asm-processor/tests/late_rodata_align.objdump b/tools/asm-processor/tests/late_rodata_align.objdump
new file mode 100644
index 000000000..87c05e866
--- /dev/null
+++ b/tools/asm-processor/tests/late_rodata_align.objdump
@@ -0,0 +1,51 @@
+
+tests/late_rodata_align.o: file format elf32-tradbigmips
+
+SYMBOL TABLE:
+00000000 l d .text 000000f0 .text
+00000000 l d .rodata 00000050 .rodata
+00000040 g F .text 0000001c foo
+00000090 g F .text 0000001c bar
+00000000 g F .text 00000040 a
+0000005c g F .text 00000034 b
+000000ac g F .text 00000038 c
+
+
+RELOCATION RECORDS FOR [.text]:
+OFFSET TYPE VALUE
+00000040 R_MIPS_HI16 .rodata
+00000048 R_MIPS_LO16 .rodata
+00000090 R_MIPS_HI16 .rodata
+00000098 R_MIPS_LO16 .rodata
+
+
+Contents of section .text:
+ 0000 00000000 00000000 00000000 00000000 ................
+ 0010 00000000 00000000 00000000 00000000 ................
+ 0020 00000000 00000000 00000000 00000000 ................
+ 0030 00000000 00000000 00000000 00000000 ................
+ 0040 3c010000 03e00008 c4200018 03e00008 <........ ......
+ 0050 00000000 03e00008 00000000 00000000 ................
+ 0060 00000000 00000000 00000000 00000000 ................
+ 0070 00000000 00000000 00000000 00000000 ................
+ 0080 00000000 00000000 00000000 00000000 ................
+ 0090 3c010000 03e00008 c420002c 03e00008 <........ .,....
+ 00a0 00000000 03e00008 00000000 00000000 ................
+ 00b0 00000000 00000000 00000000 00000000 ................
+ 00c0 00000000 00000000 00000000 00000000 ................
+ 00d0 00000000 00000000 00000000 00000000 ................
+ 00e0 00000000 00000000 00000000 00000000 ................
+Contents of section .rodata:
+ 0000 666f6f00 62617200 40833333 40866666 foo.bar.@.33@.ff
+ 0010 4089999a 408ccccd 3f8ccccd 40a33333 @...@...?...@.33
+ 0020 40a66666 40a9999a 40accccd 3f99999a @.ff@...@...?...
+ 0030 40c33333 40c66666 40c9999a 40cccccd @.33@.ff@...@...
+ 0040 40d00000 00000000 00000000 00000000 @...............
+Contents of section .options:
+ 0000 01200000 00000000 80000002 00000000 . ..............
+ 0010 000005f1 00000000 00000000 00007ff0 ................
+ 0020 07100000 00000000 00000000 00000000 ................
+ 0030 08100000 00000000 00000000 00000000 ................
+Contents of section .reginfo:
+ 0000 80000002 00000000 000005f1 00000000 ................
+ 0010 00000000 00007ff0 ........
diff --git a/tools/asm-processor/tests/late_rodata_doubles.c b/tools/asm-processor/tests/late_rodata_doubles.c
new file mode 100644
index 000000000..0a27b4148
--- /dev/null
+++ b/tools/asm-processor/tests/late_rodata_doubles.c
@@ -0,0 +1,83 @@
+GLOBAL_ASM(
+.late_rodata
+ .float 4.1
+.text
+glabel a
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+)
+
+float foo(void) {
+ return 4.15f;
+}
+
+GLOBAL_ASM(
+.late_rodata
+ .float 4.2
+ .word 0
+ .double 4.3
+.text
+glabel b
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+)
+
+float bar(void) {
+ return 4.4f;
+}
+
+GLOBAL_ASM(
+.late_rodata
+ .float 4.55
+ .double 4.6
+.text
+glabel c
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+)
+
+float baz(void) {
+ return 4.6f;
+}
diff --git a/tools/asm-processor/tests/late_rodata_doubles.objdump b/tools/asm-processor/tests/late_rodata_doubles.objdump
new file mode 100644
index 000000000..84d7e67f4
--- /dev/null
+++ b/tools/asm-processor/tests/late_rodata_doubles.objdump
@@ -0,0 +1,55 @@
+
+tests/late_rodata_doubles.o: file format elf32-tradbigmips
+
+SYMBOL TABLE:
+00000000 l d .text 00000120 .text
+00000000 l d .rodata 00000030 .rodata
+00000040 g F .text 0000001c foo
+0000009c g F .text 0000001c bar
+000000f8 g F .text 0000001c baz
+00000000 g F .text 00000040 a
+0000005c g F .text 00000040 b
+000000b8 g F .text 00000040 c
+
+
+RELOCATION RECORDS FOR [.text]:
+OFFSET TYPE VALUE
+00000040 R_MIPS_HI16 .rodata
+00000048 R_MIPS_LO16 .rodata
+0000009c R_MIPS_HI16 .rodata
+000000a4 R_MIPS_LO16 .rodata
+000000f8 R_MIPS_HI16 .rodata
+00000100 R_MIPS_LO16 .rodata
+
+
+Contents of section .text:
+ 0000 00000000 00000000 00000000 00000000 ................
+ 0010 00000000 00000000 00000000 00000000 ................
+ 0020 00000000 00000000 00000000 00000000 ................
+ 0030 00000000 00000000 00000000 00000000 ................
+ 0040 3c010000 03e00008 c4200004 03e00008 <........ ......
+ 0050 00000000 03e00008 00000000 00000000 ................
+ 0060 00000000 00000000 00000000 00000000 ................
+ 0070 00000000 00000000 00000000 00000000 ................
+ 0080 00000000 00000000 00000000 00000000 ................
+ 0090 00000000 00000000 00000000 3c010000 ............<...
+ 00a0 03e00008 c4200018 03e00008 00000000 ..... ..........
+ 00b0 03e00008 00000000 00000000 00000000 ................
+ 00c0 00000000 00000000 00000000 00000000 ................
+ 00d0 00000000 00000000 00000000 00000000 ................
+ 00e0 00000000 00000000 00000000 00000000 ................
+ 00f0 00000000 00000000 3c010000 03e00008 ........<.......
+ 0100 c4200028 03e00008 00000000 03e00008 . .(............
+ 0110 00000000 00000000 00000000 00000000 ................
+Contents of section .rodata:
+ 0000 40833333 4084cccd 40866666 00000000 @.33@...@.ff....
+ 0010 40113333 33333333 408ccccd 4091999a @.333333@...@...
+ 0020 40126666 66666666 40933333 00000000 @.ffffff@.33....
+Contents of section .options:
+ 0000 01200000 00000000 80000002 00000000 . ..............
+ 0010 000000f1 00000000 00000000 00007ff0 ................
+ 0020 07100000 00000000 00000000 00000000 ................
+ 0030 08100000 00000000 00000000 00000000 ................
+Contents of section .reginfo:
+ 0000 80000002 00000000 000000f1 00000000 ................
+ 0010 00000000 00007ff0 ........
diff --git a/tools/asm-processor/tests/late_rodata_doubles_mips1.c b/tools/asm-processor/tests/late_rodata_doubles_mips1.c
new file mode 100644
index 000000000..b97261f68
--- /dev/null
+++ b/tools/asm-processor/tests/late_rodata_doubles_mips1.c
@@ -0,0 +1,86 @@
+// COMPILE-FLAGS: -O2
+// COMPILE-ISET: -mips1
+// exact copy of late_rodata_doubles.c except for the -mips1 -O2 additions
+GLOBAL_ASM(
+.late_rodata
+ .float 4.1
+.text
+glabel a
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+)
+
+float foo(void) {
+ return 4.15f;
+}
+
+GLOBAL_ASM(
+.late_rodata
+ .float 4.2
+ .word 0
+ .double 4.3
+.text
+glabel b
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+)
+
+float bar(void) {
+ return 4.4f;
+}
+
+GLOBAL_ASM(
+.late_rodata
+ .float 4.55
+ .double 4.6
+.text
+glabel c
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+)
+
+float baz(void) {
+ return 4.6f;
+}
diff --git a/tools/asm-processor/tests/late_rodata_doubles_mips1.objdump b/tools/asm-processor/tests/late_rodata_doubles_mips1.objdump
new file mode 100644
index 000000000..8fac85f46
--- /dev/null
+++ b/tools/asm-processor/tests/late_rodata_doubles_mips1.objdump
@@ -0,0 +1,52 @@
+
+tests/late_rodata_doubles_mips1.o: file format elf32-tradbigmips
+
+SYMBOL TABLE:
+00000000 l d .text 000000f0 .text
+00000000 l d .rodata 00000030 .rodata
+00000040 g F .text 00000010 foo
+00000090 g F .text 00000010 bar
+000000e0 g F .text 00000010 baz
+00000000 g F .text 00000040 a
+00000050 g F .text 00000040 b
+000000a0 g F .text 00000040 c
+
+
+RELOCATION RECORDS FOR [.text]:
+OFFSET TYPE VALUE
+00000040 R_MIPS_HI16 .rodata
+00000044 R_MIPS_LO16 .rodata
+00000090 R_MIPS_HI16 .rodata
+00000094 R_MIPS_LO16 .rodata
+000000e0 R_MIPS_HI16 .rodata
+000000e4 R_MIPS_LO16 .rodata
+
+
+Contents of section .text:
+ 0000 00000000 00000000 00000000 00000000 ................
+ 0010 00000000 00000000 00000000 00000000 ................
+ 0020 00000000 00000000 00000000 00000000 ................
+ 0030 00000000 00000000 00000000 00000000 ................
+ 0040 3c010000 c4200004 03e00008 00000000 <.... ..........
+ 0050 00000000 00000000 00000000 00000000 ................
+ 0060 00000000 00000000 00000000 00000000 ................
+ 0070 00000000 00000000 00000000 00000000 ................
+ 0080 00000000 00000000 00000000 00000000 ................
+ 0090 3c010000 c4200018 03e00008 00000000 <.... ..........
+ 00a0 00000000 00000000 00000000 00000000 ................
+ 00b0 00000000 00000000 00000000 00000000 ................
+ 00c0 00000000 00000000 00000000 00000000 ................
+ 00d0 00000000 00000000 00000000 00000000 ................
+ 00e0 3c010000 c4200028 03e00008 00000000 <.... .(........
+Contents of section .rodata:
+ 0000 40833333 4084cccd 40866666 00000000 @.33@...@.ff....
+ 0010 40113333 33333333 408ccccd 4091999a @.333333@...@...
+ 0020 40126666 66666666 40933333 00000000 @.ffffff@.33....
+Contents of section .options:
+ 0000 01200000 00000000 80000002 00000000 . ..............
+ 0010 000c0011 00000000 00000000 00007ff0 ................
+ 0020 07100000 00000000 00000000 00000000 ................
+ 0030 08100000 00000000 00000000 00000000 ................
+Contents of section .reginfo:
+ 0000 80000002 00000000 000c0011 00000000 ................
+ 0010 00000000 00007ff0 ........
diff --git a/tools/asm-processor/tests/late_rodata_jtbl.c b/tools/asm-processor/tests/late_rodata_jtbl.c
new file mode 100644
index 000000000..3c2a5bba2
--- /dev/null
+++ b/tools/asm-processor/tests/late_rodata_jtbl.c
@@ -0,0 +1,153 @@
+// COMPILE-FLAGS: -O2
+GLOBAL_ASM(
+.late_rodata
+.double 1
+.double 2
+.double 3
+.double 4
+.double 5
+.double 6
+.double 7
+.double 8
+.text
+glabel doubles1
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+)
+
+float a(void) { return 1.1f; }
+
+GLOBAL_ASM(
+.late_rodata
+.float 1
+.double 2
+.double 3
+.double 4
+.double 5
+.double 6
+.double 7
+.double 8
+.double 9
+.float 10
+.text
+glabel doubles2
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+)
+
+GLOBAL_ASM(
+glabel a2
+move $a0, $a0
+nop
+nop
+nop
+jr $ra
+move $a0, $a0
+)
+
+GLOBAL_ASM(
+.late_rodata
+
+glabel jtbl
+.word case0, case1, case2, case3, case4, case5, case6, case7, case8, case9, case10
+.word case11, case12, case13, case14, case15, case16, case17, case18, case19, case20
+.word case21, case22, case23, case24, case25, case26
+
+.text
+glabel foo
+sltiu $at, $a0, 0xa
+beqz $at, .L756E659B
+ sll $t7, $a0, 2
+lui $at, %hi(jtbl)
+addu $at, $at, $t7
+lw $t7, %lo(jtbl)($at)
+jr $t7
+ nop
+case0: addiu $a0, $a0, 1
+case1: addiu $a0, $a0, 1
+case2: addiu $a0, $a0, 1
+case3: addiu $a0, $a0, 1
+case4: addiu $a0, $a0, 1
+case5: addiu $a0, $a0, 1
+case6: addiu $a0, $a0, 1
+case7: addiu $a0, $a0, 1
+case8: addiu $a0, $a0, 1
+case9: addiu $a0, $a0, 1
+case10: addiu $a0, $a0, 1
+case11: addiu $a0, $a0, 1
+case12: addiu $a0, $a0, 1
+case13: addiu $a0, $a0, 1
+case14: addiu $a0, $a0, 1
+case15: addiu $a0, $a0, 1
+case16: addiu $a0, $a0, 1
+case17: addiu $a0, $a0, 1
+case18: addiu $a0, $a0, 1
+case19: addiu $a0, $a0, 1
+case20: addiu $a0, $a0, 1
+case21: addiu $a0, $a0, 1
+case22: addiu $a0, $a0, 1
+case23: addiu $a0, $a0, 1
+case24: addiu $a0, $a0, 1
+case25: addiu $a0, $a0, 1
+case26:
+jr $ra
+ addiu $v0, $a0, 1
+
+.L756E659B:
+addiu $v0, $zero, 2
+jr $ra
+ nop
+)
+
+GLOBAL_ASM(
+glabel b2
+move $a0, $a0
+nop
+nop
+jr $ra
+move $a0, $a0
+)
+
+float b(void) { return 1.2f; }
diff --git a/tools/asm-processor/tests/late_rodata_jtbl.objdump b/tools/asm-processor/tests/late_rodata_jtbl.objdump
new file mode 100644
index 000000000..44bb6e847
--- /dev/null
+++ b/tools/asm-processor/tests/late_rodata_jtbl.objdump
@@ -0,0 +1,110 @@
+
+tests/late_rodata_jtbl.o: file format elf32-tradbigmips
+
+SYMBOL TABLE:
+00000000 l d .text 000001a0 .text
+00000000 l d .rodata 00000100 .rodata
+00000000 l d .text 00000000
+0000005c g F .text 0000000c a
+0000018c g F .text 0000000c b
+00000000 g F .text 0000005c doubles1
+00000068 g F .text 0000005c doubles2
+000000c4 g F .text 00000018 a2
+000000dc g F .text 0000009c foo
+0000008c g .rodata 00000000 jtbl
+00000178 g F .text 00000014 b2
+
+
+RELOCATION RECORDS FOR [.text]:
+OFFSET TYPE VALUE
+0000005c R_MIPS_HI16 .rodata
+00000064 R_MIPS_LO16 .rodata
+0000018c R_MIPS_HI16 .rodata
+00000194 R_MIPS_LO16 .rodata
+000000e8 R_MIPS_HI16 jtbl
+000000f0 R_MIPS_LO16 jtbl
+
+
+RELOCATION RECORDS FOR [.rodata]:
+OFFSET TYPE VALUE
+0000008c R_MIPS_32
+00000090 R_MIPS_32
+00000094 R_MIPS_32
+00000098 R_MIPS_32
+0000009c R_MIPS_32
+000000a0 R_MIPS_32
+000000a4 R_MIPS_32
+000000a8 R_MIPS_32
+000000ac R_MIPS_32
+000000b0 R_MIPS_32
+000000b4 R_MIPS_32
+000000b8 R_MIPS_32
+000000bc R_MIPS_32
+000000c0 R_MIPS_32
+000000c4 R_MIPS_32
+000000c8 R_MIPS_32
+000000cc R_MIPS_32
+000000d0 R_MIPS_32
+000000d4 R_MIPS_32
+000000d8 R_MIPS_32
+000000dc R_MIPS_32
+000000e0 R_MIPS_32
+000000e4 R_MIPS_32
+000000e8 R_MIPS_32
+000000ec R_MIPS_32
+000000f0 R_MIPS_32
+000000f4 R_MIPS_32
+
+
+Contents of section .text:
+ 0000 00000000 00000000 00000000 00000000 ................
+ 0010 00000000 00000000 00000000 00000000 ................
+ 0020 00000000 00000000 00000000 00000000 ................
+ 0030 00000000 00000000 00000000 00000000 ................
+ 0040 00000000 00000000 00000000 00000000 ................
+ 0050 00000000 00000000 00000000 3c010000 ............<...
+ 0060 03e00008 c4200040 00000000 00000000 ..... .@........
+ 0070 00000000 00000000 00000000 00000000 ................
+ 0080 00000000 00000000 00000000 00000000 ................
+ 0090 00000000 00000000 00000000 00000000 ................
+ 00a0 00000000 00000000 00000000 00000000 ................
+ 00b0 00000000 00000000 00000000 00000000 ................
+ 00c0 00000000 00802025 00000000 00000000 ...... %........
+ 00d0 00000000 03e00008 00802025 2c81000a .......... %,...
+ 00e0 10200022 00047880 3c010000 002f0821 . ."..x.<..../.!
+ 00f0 8c2f0000 01e00008 00000000 24840001 ./..........$...
+ 0100 24840001 24840001 24840001 24840001 $...$...$...$...
+ 0110 24840001 24840001 24840001 24840001 $...$...$...$...
+ 0120 24840001 24840001 24840001 24840001 $...$...$...$...
+ 0130 24840001 24840001 24840001 24840001 $...$...$...$...
+ 0140 24840001 24840001 24840001 24840001 $...$...$...$...
+ 0150 24840001 24840001 24840001 24840001 $...$...$...$...
+ 0160 24840001 03e00008 24820001 24020002 $.......$...$...
+ 0170 03e00008 00000000 00802025 00000000 .......... %....
+ 0180 00000000 03e00008 00802025 3c010000 .......... %<...
+ 0190 03e00008 c42000f8 00000000 00000000 ..... ..........
+Contents of section .rodata:
+ 0000 3ff00000 00000000 40000000 00000000 ?.......@.......
+ 0010 40080000 00000000 40100000 00000000 @.......@.......
+ 0020 40140000 00000000 40180000 00000000 @.......@.......
+ 0030 401c0000 00000000 40200000 00000000 @.......@ ......
+ 0040 3f8ccccd 3f800000 40000000 00000000 ?...?...@.......
+ 0050 40080000 00000000 40100000 00000000 @.......@.......
+ 0060 40140000 00000000 40180000 00000000 @.......@.......
+ 0070 401c0000 00000000 40200000 00000000 @.......@ ......
+ 0080 40220000 00000000 41200000 000000fc @"......A ......
+ 0090 00000100 00000104 00000108 0000010c ................
+ 00a0 00000110 00000114 00000118 0000011c ................
+ 00b0 00000120 00000124 00000128 0000012c ... ...$...(...,
+ 00c0 00000130 00000134 00000138 0000013c ...0...4...8...<
+ 00d0 00000140 00000144 00000148 0000014c ...@...D...H...L
+ 00e0 00000150 00000154 00000158 0000015c ...P...T...X...\
+ 00f0 00000160 00000164 3f99999a 00000000 ...`...d?.......
+Contents of section .options:
+ 0000 01200000 00000000 80004002 00000000 . ........@.....
+ 0010 000000f1 00000000 00000000 00007ff0 ................
+ 0020 07100000 00000000 00000000 00000000 ................
+ 0030 08100000 00000000 00000000 00000000 ................
+Contents of section .reginfo:
+ 0000 8000c016 00000000 000000f1 00000000 ................
+ 0010 00000000 00007ff0 ........
diff --git a/tools/asm-processor/tests/late_rodata_jtbl_mips1.c b/tools/asm-processor/tests/late_rodata_jtbl_mips1.c
new file mode 100644
index 000000000..505f4c1d5
--- /dev/null
+++ b/tools/asm-processor/tests/late_rodata_jtbl_mips1.c
@@ -0,0 +1,155 @@
+// COMPILE-FLAGS: -O2
+// COMPILE-ISET: -mips1
+// exact copy of late_rodata_jtbl.c except for the -mips1 addition
+GLOBAL_ASM(
+.late_rodata
+.double 1
+.double 2
+.double 3
+.double 4
+.double 5
+.double 6
+.double 7
+.double 8
+.text
+glabel doubles1
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+)
+
+float a(void) { return 1.1f; }
+
+GLOBAL_ASM(
+.late_rodata
+.float 1
+.double 2
+.double 3
+.double 4
+.double 5
+.double 6
+.double 7
+.double 8
+.double 9
+.float 10
+.text
+glabel doubles2
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+)
+
+GLOBAL_ASM(
+glabel a2
+move $a0, $a0
+nop
+nop
+nop
+jr $ra
+move $a0, $a0
+)
+
+GLOBAL_ASM(
+.late_rodata
+
+glabel jtbl
+.word case0, case1, case2, case3, case4, case5, case6, case7, case8, case9, case10
+.word case11, case12, case13, case14, case15, case16, case17, case18, case19, case20
+.word case21, case22, case23, case24, case25, case26
+
+.text
+glabel foo
+sltiu $at, $a0, 0xa
+beqz $at, .L756E659B
+ sll $t7, $a0, 2
+lui $at, %hi(jtbl)
+addu $at, $at, $t7
+lw $t7, %lo(jtbl)($at)
+jr $t7
+ nop
+case0: addiu $a0, $a0, 1
+case1: addiu $a0, $a0, 1
+case2: addiu $a0, $a0, 1
+case3: addiu $a0, $a0, 1
+case4: addiu $a0, $a0, 1
+case5: addiu $a0, $a0, 1
+case6: addiu $a0, $a0, 1
+case7: addiu $a0, $a0, 1
+case8: addiu $a0, $a0, 1
+case9: addiu $a0, $a0, 1
+case10: addiu $a0, $a0, 1
+case11: addiu $a0, $a0, 1
+case12: addiu $a0, $a0, 1
+case13: addiu $a0, $a0, 1
+case14: addiu $a0, $a0, 1
+case15: addiu $a0, $a0, 1
+case16: addiu $a0, $a0, 1
+case17: addiu $a0, $a0, 1
+case18: addiu $a0, $a0, 1
+case19: addiu $a0, $a0, 1
+case20: addiu $a0, $a0, 1
+case21: addiu $a0, $a0, 1
+case22: addiu $a0, $a0, 1
+case23: addiu $a0, $a0, 1
+case24: addiu $a0, $a0, 1
+case25: addiu $a0, $a0, 1
+case26:
+jr $ra
+ addiu $v0, $a0, 1
+
+.L756E659B:
+addiu $v0, $zero, 2
+jr $ra
+ nop
+)
+
+GLOBAL_ASM(
+glabel b2
+move $a0, $a0
+nop
+nop
+jr $ra
+move $a0, $a0
+)
+
+float b(void) { return 1.2f; }
diff --git a/tools/asm-processor/tests/late_rodata_jtbl_mips1.objdump b/tools/asm-processor/tests/late_rodata_jtbl_mips1.objdump
new file mode 100644
index 000000000..d37c8bb9e
--- /dev/null
+++ b/tools/asm-processor/tests/late_rodata_jtbl_mips1.objdump
@@ -0,0 +1,110 @@
+
+tests/late_rodata_jtbl_mips1.o: file format elf32-tradbigmips
+
+SYMBOL TABLE:
+00000000 l d .text 000001a0 .text
+00000000 l d .rodata 00000100 .rodata
+00000000 l d .text 00000000
+0000005c g F .text 00000010 a
+00000190 g F .text 00000010 b
+00000000 g F .text 0000005c doubles1
+0000006c g F .text 0000005c doubles2
+000000c8 g F .text 00000018 a2
+000000e0 g F .text 0000009c foo
+0000008c g .rodata 00000000 jtbl
+0000017c g F .text 00000014 b2
+
+
+RELOCATION RECORDS FOR [.text]:
+OFFSET TYPE VALUE
+0000005c R_MIPS_HI16 .rodata
+00000060 R_MIPS_LO16 .rodata
+00000190 R_MIPS_HI16 .rodata
+00000194 R_MIPS_LO16 .rodata
+000000ec R_MIPS_HI16 jtbl
+000000f4 R_MIPS_LO16 jtbl
+
+
+RELOCATION RECORDS FOR [.rodata]:
+OFFSET TYPE VALUE
+0000008c R_MIPS_32
+00000090 R_MIPS_32
+00000094 R_MIPS_32
+00000098 R_MIPS_32
+0000009c R_MIPS_32
+000000a0 R_MIPS_32
+000000a4 R_MIPS_32
+000000a8 R_MIPS_32
+000000ac R_MIPS_32
+000000b0 R_MIPS_32
+000000b4 R_MIPS_32
+000000b8 R_MIPS_32
+000000bc R_MIPS_32
+000000c0 R_MIPS_32
+000000c4 R_MIPS_32
+000000c8 R_MIPS_32
+000000cc R_MIPS_32
+000000d0 R_MIPS_32
+000000d4 R_MIPS_32
+000000d8 R_MIPS_32
+000000dc R_MIPS_32
+000000e0 R_MIPS_32
+000000e4 R_MIPS_32
+000000e8 R_MIPS_32
+000000ec R_MIPS_32
+000000f0 R_MIPS_32
+000000f4 R_MIPS_32
+
+
+Contents of section .text:
+ 0000 00000000 00000000 00000000 00000000 ................
+ 0010 00000000 00000000 00000000 00000000 ................
+ 0020 00000000 00000000 00000000 00000000 ................
+ 0030 00000000 00000000 00000000 00000000 ................
+ 0040 00000000 00000000 00000000 00000000 ................
+ 0050 00000000 00000000 00000000 3c010000 ............<...
+ 0060 c4200040 03e00008 00000000 00000000 . .@............
+ 0070 00000000 00000000 00000000 00000000 ................
+ 0080 00000000 00000000 00000000 00000000 ................
+ 0090 00000000 00000000 00000000 00000000 ................
+ 00a0 00000000 00000000 00000000 00000000 ................
+ 00b0 00000000 00000000 00000000 00000000 ................
+ 00c0 00000000 00000000 00802025 00000000 .......... %....
+ 00d0 00000000 00000000 03e00008 00802025 .............. %
+ 00e0 2c81000a 10200022 00047880 3c010000 ,.... ."..x.<...
+ 00f0 002f0821 8c2f0000 01e00008 00000000 ./.!./..........
+ 0100 24840001 24840001 24840001 24840001 $...$...$...$...
+ 0110 24840001 24840001 24840001 24840001 $...$...$...$...
+ 0120 24840001 24840001 24840001 24840001 $...$...$...$...
+ 0130 24840001 24840001 24840001 24840001 $...$...$...$...
+ 0140 24840001 24840001 24840001 24840001 $...$...$...$...
+ 0150 24840001 24840001 24840001 24840001 $...$...$...$...
+ 0160 24840001 24840001 03e00008 24820001 $...$.......$...
+ 0170 24020002 03e00008 00000000 00802025 $............. %
+ 0180 00000000 00000000 03e00008 00802025 .............. %
+ 0190 3c010000 c42000f8 03e00008 00000000 <.... ..........
+Contents of section .rodata:
+ 0000 3ff00000 00000000 40000000 00000000 ?.......@.......
+ 0010 40080000 00000000 40100000 00000000 @.......@.......
+ 0020 40140000 00000000 40180000 00000000 @.......@.......
+ 0030 401c0000 00000000 40200000 00000000 @.......@ ......
+ 0040 3f8ccccd 3f800000 40000000 00000000 ?...?...@.......
+ 0050 40080000 00000000 40100000 00000000 @.......@.......
+ 0060 40140000 00000000 40180000 00000000 @.......@.......
+ 0070 401c0000 00000000 40200000 00000000 @.......@ ......
+ 0080 40220000 00000000 41200000 00000100 @"......A ......
+ 0090 00000104 00000108 0000010c 00000110 ................
+ 00a0 00000114 00000118 0000011c 00000120 ...............
+ 00b0 00000124 00000128 0000012c 00000130 ...$...(...,...0
+ 00c0 00000134 00000138 0000013c 00000140 ...4...8...<...@
+ 00d0 00000144 00000148 0000014c 00000150 ...D...H...L...P
+ 00e0 00000154 00000158 0000015c 00000160 ...T...X...\...`
+ 00f0 00000164 00000168 3f99999a 00000000 ...d...h?.......
+Contents of section .options:
+ 0000 01200000 00000000 80004002 00000000 . ........@.....
+ 0010 000000f1 00000000 00000000 00007ff0 ................
+ 0020 07100000 00000000 00000000 00000000 ................
+ 0030 08100000 00000000 00000000 00000000 ................
+Contents of section .reginfo:
+ 0000 8000c016 00000000 000000f1 00000000 ................
+ 0010 00000000 00007ff0 ........
diff --git a/tools/asm-processor/tests/late_rodata_misaligned_doubles.c b/tools/asm-processor/tests/late_rodata_misaligned_doubles.c
new file mode 100644
index 000000000..a453dbdd4
--- /dev/null
+++ b/tools/asm-processor/tests/late_rodata_misaligned_doubles.c
@@ -0,0 +1,77 @@
+GLOBAL_ASM(
+.late_rodata
+ .float 4.01
+ .word 0
+ .double 4.02
+.text
+glabel a
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+)
+
+double foo(void) { return 4.03; }
+
+GLOBAL_ASM(
+.late_rodata
+ .float 4.04
+ .double 4.05
+.text
+glabel b
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+)
+
+double bar(void) { return 4.06; }
+float baz(void) { return 4.07f; }
+
+GLOBAL_ASM(
+.late_rodata
+ .double 4.08
+.text
+glabel c
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+)
+
diff --git a/tools/asm-processor/tests/late_rodata_misaligned_doubles.objdump b/tools/asm-processor/tests/late_rodata_misaligned_doubles.objdump
new file mode 100644
index 000000000..cdba84de4
--- /dev/null
+++ b/tools/asm-processor/tests/late_rodata_misaligned_doubles.objdump
@@ -0,0 +1,56 @@
+
+tests/late_rodata_misaligned_doubles.o: file format elf32-tradbigmips
+
+SYMBOL TABLE:
+00000000 l d .text 00000120 .text
+00000000 l d .rodata 00000040 .rodata
+00000040 g F .text 0000001c foo
+0000009c g F .text 0000001c bar
+000000b8 g F .text 0000001c baz
+00000000 g F .text 00000040 a
+0000005c g F .text 00000040 b
+000000d4 g F .text 00000040 c
+
+
+RELOCATION RECORDS FOR [.text]:
+OFFSET TYPE VALUE
+00000040 R_MIPS_HI16 .rodata
+00000048 R_MIPS_LO16 .rodata
+0000009c R_MIPS_HI16 .rodata
+000000a4 R_MIPS_LO16 .rodata
+000000b8 R_MIPS_HI16 .rodata
+000000c0 R_MIPS_LO16 .rodata
+
+
+Contents of section .text:
+ 0000 00000000 00000000 00000000 00000000 ................
+ 0010 00000000 00000000 00000000 00000000 ................
+ 0020 00000000 00000000 00000000 00000000 ................
+ 0030 00000000 00000000 00000000 00000000 ................
+ 0040 3c010000 03e00008 d4200010 03e00008 <........ ......
+ 0050 00000000 03e00008 00000000 00000000 ................
+ 0060 00000000 00000000 00000000 00000000 ................
+ 0070 00000000 00000000 00000000 00000000 ................
+ 0080 00000000 00000000 00000000 00000000 ................
+ 0090 00000000 00000000 00000000 3c010000 ............<...
+ 00a0 03e00008 d4200028 03e00008 00000000 ..... .(........
+ 00b0 03e00008 00000000 3c010000 03e00008 ........<.......
+ 00c0 c4200030 03e00008 00000000 03e00008 . .0............
+ 00d0 00000000 00000000 00000000 00000000 ................
+ 00e0 00000000 00000000 00000000 00000000 ................
+ 00f0 00000000 00000000 00000000 00000000 ................
+ 0100 00000000 00000000 00000000 00000000 ................
+ 0110 00000000 00000000 00000000 00000000 ................
+Contents of section .rodata:
+ 0000 408051ec 00000000 4010147a e147ae14 @.Q.....@..z.G..
+ 0010 40101eb8 51eb851f 00000000 408147ae @...Q.......@.G.
+ 0020 40103333 33333333 40103d70 a3d70a3d @.333333@.=p...=
+ 0030 40823d71 00000000 401051eb 851eb852 @.=q....@.Q....R
+Contents of section .options:
+ 0000 01200000 00000000 80000002 00000000 . ..............
+ 0010 000000f3 00000000 00000000 00007ff0 ................
+ 0020 07100000 00000000 00000000 00000000 ................
+ 0030 08100000 00000000 00000000 00000000 ................
+Contents of section .reginfo:
+ 0000 80000002 00000000 000000f3 00000000 ................
+ 0010 00000000 00007ff0 ........
diff --git a/tools/asm-processor/tests/line-continuation-separate-file.s b/tools/asm-processor/tests/line-continuation-separate-file.s
new file mode 100644
index 000000000..e1301804a
--- /dev/null
+++ b/tools/asm-processor/tests/line-continuation-separate-file.s
@@ -0,0 +1,4 @@
+.rdata
+ label: .asciiz "1\n\
+2", \
+ "34", "56"
diff --git a/tools/asm-processor/tests/line-continuation.asmproc.d b/tools/asm-processor/tests/line-continuation.asmproc.d
new file mode 100644
index 000000000..687dd1aee
--- /dev/null
+++ b/tools/asm-processor/tests/line-continuation.asmproc.d
@@ -0,0 +1,3 @@
+tests/line-continuation.o: tests/line-continuation-separate-file.s
+
+tests/line-continuation-separate-file.s:
diff --git a/tools/asm-processor/tests/line-continuation.c b/tools/asm-processor/tests/line-continuation.c
new file mode 100644
index 000000000..d5ab09372
--- /dev/null
+++ b/tools/asm-processor/tests/line-continuation.c
@@ -0,0 +1,22 @@
+void foo(void) { "abcdef"; }
+
+GLOBAL_ASM(
+.rdata
+ .ascii "AB" \
+ "CD", "EF"
+ .ascii "GH\n\n\n\0\11\222\3333\44444\x1234567\n\nIJK"
+)
+
+void bar(void) { "hello"; }
+
+GLOBAL_ASM(
+.rdata
+ .asciiz "1\
+2"
+ .asciiz "34", "56"
+ .asciiz "78\n\n\n\0\11\222\3333\44444\x1234567\n\n9A"
+)
+
+void baz(void) { "ghijkl"; }
+
+GLOBAL_ASM("tests/line-continuation-separate-file.s")
diff --git a/tools/asm-processor/tests/line-continuation.objdump b/tools/asm-processor/tests/line-continuation.objdump
new file mode 100644
index 000000000..038766fdb
--- /dev/null
+++ b/tools/asm-processor/tests/line-continuation.objdump
@@ -0,0 +1,30 @@
+
+tests/line-continuation.o: file format elf32-tradbigmips
+
+SYMBOL TABLE:
+00000000 l d .text 00000030 .text
+00000000 l d .rodata 00000060 .rodata
+00000000 g F .text 00000010 foo
+00000010 g F .text 00000010 bar
+00000020 g F .text 00000010 baz
+
+
+Contents of section .text:
+ 0000 03e00008 00000000 03e00008 00000000 ................
+ 0010 03e00008 00000000 03e00008 00000000 ................
+ 0020 03e00008 00000000 03e00008 00000000 ................
+Contents of section .rodata:
+ 0000 61626364 65660000 41424344 45464748 abcdef..ABCDEFGH
+ 0010 0a0a0a00 0992db33 24343467 0a0a494a .......3$44g..IJ
+ 0020 4b000000 68656c6c 6f000000 31320033 K...hello...12.3
+ 0030 34003536 0037380a 0a0a0009 92db3324 4.56.78.......3$
+ 0040 3434670a 0a394100 6768696a 6b6c0000 44g..9A.ghijkl..
+ 0050 310a3200 33340035 36000000 00000000 1.2.34.56.......
+Contents of section .options:
+ 0000 01200000 00000000 80000000 00000000 . ..............
+ 0010 00000000 00000000 00000000 00007ff0 ................
+ 0020 07100000 00000000 00000000 00000000 ................
+ 0030 08100000 00000000 00000000 00000000 ................
+Contents of section .reginfo:
+ 0000 80000000 00000000 00000000 00000000 ................
+ 0010 00000000 00007ff0 ........
diff --git a/tools/asm-processor/tests/o0.c b/tools/asm-processor/tests/o0.c
new file mode 100644
index 000000000..6f8e5e419
--- /dev/null
+++ b/tools/asm-processor/tests/o0.c
@@ -0,0 +1,28 @@
+// COMPILE-FLAGS: -O0
+
+int a(void) { return 1; }
+GLOBAL_ASM(
+glabel foo
+addiu $a0, $a0, 1
+addiu $a0, $a0, 2
+addiu $a0, $a0, 3
+jr $ra
+addiu $a0, $a0, 4
+)
+float b(void) { return 1.2f; }
+GLOBAL_ASM(
+.late_rodata
+glabel float1
+.float 12.34
+
+.text
+glabel bar
+addiu $a0, $a0, 5
+addiu $a0, $a0, 6
+addiu $a0, $a0, 7
+addiu $a0, $a0, 8
+lui $v0, %hi(float1 + 1)
+jr $ra
+addiu $v0, $v0, %lo(float1 + 1)
+)
+float c(void) { return 1.3f; }
diff --git a/tools/asm-processor/tests/o0.objdump b/tools/asm-processor/tests/o0.objdump
new file mode 100644
index 000000000..f94ec7a05
--- /dev/null
+++ b/tools/asm-processor/tests/o0.objdump
@@ -0,0 +1,44 @@
+
+tests/o0.o: file format elf32-tradbigmips
+
+SYMBOL TABLE:
+00000000 l d .text 00000090 .text
+00000000 l d .rodata 00000010 .rodata
+00000000 g F .text 0000001c a
+00000030 g F .text 00000020 b
+0000006c g F .text 00000020 c
+0000001c g F .text 00000014 foo
+00000050 g F .text 0000001c bar
+00000004 g .rodata 00000000 float1
+
+
+RELOCATION RECORDS FOR [.text]:
+OFFSET TYPE VALUE
+00000030 R_MIPS_HI16 .rodata
+00000034 R_MIPS_LO16 .rodata
+0000006c R_MIPS_HI16 .rodata
+00000070 R_MIPS_LO16 .rodata
+00000060 R_MIPS_HI16 float1
+00000068 R_MIPS_LO16 float1
+
+
+Contents of section .text:
+ 0000 24020001 03e00008 00000000 03e00008 $...............
+ 0010 00000000 03e00008 00000000 24840001 ............$...
+ 0020 24840002 24840003 03e00008 24840004 $...$.......$...
+ 0030 3c010000 c4200000 03e00008 00000000 <.... ..........
+ 0040 03e00008 00000000 03e00008 00000000 ................
+ 0050 24840005 24840006 24840007 24840008 $...$...$...$...
+ 0060 3c020000 03e00008 24420001 3c010000 <.......$B..<...
+ 0070 c4200008 03e00008 00000000 03e00008 . ..............
+ 0080 00000000 03e00008 00000000 00000000 ................
+Contents of section .rodata:
+ 0000 3f99999a 414570a4 3fa66666 00000000 ?...AEp.?.ff....
+Contents of section .options:
+ 0000 01200000 00000000 80000006 00000000 . ..............
+ 0010 00000011 00000000 00000000 00007ff0 ................
+ 0020 07100000 00000000 00000000 00000000 ................
+ 0030 08100000 00000000 00000000 00000000 ................
+Contents of section .reginfo:
+ 0000 80000016 00000000 00000011 00000000 ................
+ 0010 00000000 00007ff0 ........
diff --git a/tools/asm-processor/tests/o2.c b/tools/asm-processor/tests/o2.c
new file mode 100644
index 000000000..144a604e0
--- /dev/null
+++ b/tools/asm-processor/tests/o2.c
@@ -0,0 +1,26 @@
+// COMPILE-FLAGS: -O2
+
+int a(void) { return 1; }
+GLOBAL_ASM(
+glabel foo
+addiu $a0, $a0, 1
+addiu $a0, $a0, 2
+addiu $a0, $a0, 3
+jr $ra
+addiu $a0, $a0, 4
+)
+float b(void) { return 1.2f; }
+GLOBAL_ASM(
+.late_rodata
+glabel float1
+.float 12.34
+
+.text
+glabel bar
+addiu $a0, $a0, 5
+addiu $a0, $a0, 6
+lui $v0, %hi(float1 + 1)
+jr $ra
+addiu $v0, $v0, %lo(float1 + 1)
+)
+float c(void) { return 1.3f; }
diff --git a/tools/asm-processor/tests/o2.objdump b/tools/asm-processor/tests/o2.objdump
new file mode 100644
index 000000000..61e3fb0e5
--- /dev/null
+++ b/tools/asm-processor/tests/o2.objdump
@@ -0,0 +1,40 @@
+
+tests/o2.o: file format elf32-tradbigmips
+
+SYMBOL TABLE:
+00000000 l d .text 00000050 .text
+00000000 l d .rodata 00000010 .rodata
+00000000 g F .text 00000008 a
+0000001c g F .text 0000000c b
+0000003c g F .text 0000000c c
+00000008 g F .text 00000014 foo
+00000028 g F .text 00000014 bar
+00000004 g .rodata 00000000 float1
+
+
+RELOCATION RECORDS FOR [.text]:
+OFFSET TYPE VALUE
+0000001c R_MIPS_HI16 .rodata
+00000024 R_MIPS_LO16 .rodata
+0000003c R_MIPS_HI16 .rodata
+00000044 R_MIPS_LO16 .rodata
+00000030 R_MIPS_HI16 float1
+00000038 R_MIPS_LO16 float1
+
+
+Contents of section .text:
+ 0000 03e00008 24020001 24840001 24840002 ....$...$...$...
+ 0010 24840003 03e00008 24840004 3c010000 $.......$...<...
+ 0020 03e00008 c4200000 24840005 24840006 ..... ..$...$...
+ 0030 3c020000 03e00008 24420001 3c010000 <.......$B..<...
+ 0040 03e00008 c4200008 00000000 00000000 ..... ..........
+Contents of section .rodata:
+ 0000 3f99999a 414570a4 3fa66666 00000000 ?...AEp.?.ff....
+Contents of section .options:
+ 0000 01200000 00000000 80000006 00000000 . ..............
+ 0010 00000011 00000000 00000000 00007ff0 ................
+ 0020 07100000 00000000 00000000 00000000 ................
+ 0030 08100000 00000000 00000000 00000000 ................
+Contents of section .reginfo:
+ 0000 80000016 00000000 00000011 00000000 ................
+ 0010 00000000 00007ff0 ........
diff --git a/tools/asm-processor/tests/pascal.objdump b/tools/asm-processor/tests/pascal.objdump
new file mode 100644
index 000000000..cb3740f0a
--- /dev/null
+++ b/tools/asm-processor/tests/pascal.objdump
@@ -0,0 +1,137 @@
+
+tests/pascal.o: file format elf32-tradbigmips
+
+SYMBOL TABLE:
+00000000 l d .text 000000e0 .text
+00000000 l d .rodata 00000030 .rodata
+00000000 l d .data 00000010 .data
+00000000 l d .bss 00000010 .bss
+00000000 l O .bss 00000000 $dat
+00000000 g F .text 0000000c foo
+000000d0 g F .text 0000000c bar
+0000000c g F .text 00000004 test
+00000048 g F .text 00000004 test2
+0000008c g F .text 00000044 test3
+00000000 *UND* 00000000 get
+00000000 *UND* 00000000 put
+00000000 *UND* 00000000 pascal_close
+00000000 *UND* 00000000 fflush
+00000000 *UND* 00000000 filesize
+00000000 *UND* 00000000 curpos
+00000000 *UND* 00000000 seek
+00000000 *UND* 00000000 eof
+00000000 *UND* 00000000 eoln
+00000000 *UND* 00000000 page
+00000000 *UND* 00000000 reset
+00000000 *UND* 00000000 rewrite
+00000000 *UND* 00000000 cos
+00000000 *UND* 00000000 exp
+00000000 *UND* 00000000 sqrt
+00000000 *UND* 00000000 log
+00000000 *UND* 00000000 atan
+00000000 *UND* 00000000 sin
+00000000 *UND* 00000000 __random_float
+00000000 *UND* 00000000 clock
+00000000 *UND* 00000000 exit
+00000000 *UND* 00000000 __date
+00000000 *UND* 00000000 __time
+00000000 *UND* 00000000 get_arg
+00000000 *UND* 00000000 new
+00000000 *UND* 00000000 dispose
+00000000 *UND* 00000000 initfile
+00000000 *UND* 00000000 peek_char
+00000000 *UND* 00000000 next_char
+00000000 *UND* 00000000 readln
+00000000 *UND* 00000000 read_int64
+00000000 *UND* 00000000 read_card64
+00000000 *UND* 00000000 read_integer
+00000000 *UND* 00000000 read_cardinal
+00000000 *UND* 00000000 read_integer_range
+00000000 *UND* 00000000 read_real
+00000000 *UND* 00000000 read_double
+00000000 *UND* 00000000 read_extended
+00000000 *UND* 00000000 read_string
+00000000 *UND* 00000000 read_enum
+00000000 *UND* 00000000 read_char
+00000000 *UND* 00000000 read_char_range
+00000000 *UND* 00000000 read_boolean
+00000000 *UND* 00000000 read_set
+00000000 *UND* 00000000 writeln
+00000000 *UND* 00000000 write_int64
+00000000 *UND* 00000000 write_card64
+00000000 *UND* 00000000 write_integer
+00000000 *UND* 00000000 write_cardinal
+00000000 *UND* 00000000 write_boolean
+00000000 *UND* 00000000 write_char
+00000000 *UND* 00000000 write_real
+00000000 *UND* 00000000 write_double
+00000000 *UND* 00000000 write_extended
+00000000 *UND* 00000000 write_string
+00000000 *UND* 00000000 write_enum
+00000000 *UND* 00000000 write_set
+00000000 *UND* 00000000 caseerror
+00000000 *UND* 00000000 __pc_nloc_goto
+00000000 *UND* 00000000 memcpy
+00000000 *UND* 00000000 __in_range
+00000000 *UND* 00000000 __ll_mul
+00000000 *UND* 00000000 __ll_div
+00000000 *UND* 00000000 __ull_div
+00000000 *UND* 00000000 __ll_mod
+00000000 *UND* 00000000 __ll_rem
+00000000 *UND* 00000000 __ull_rem
+00000000 *UND* 00000000 __ll_lshift
+00000000 *UND* 00000000 __ll_rshift
+00000000 *UND* 00000000 __ll_to_f
+00000000 *UND* 00000000 __ull_to_f
+00000000 *UND* 00000000 __ll_to_d
+00000000 *UND* 00000000 __ull_to_d
+00000000 *UND* 00000000 __f_ll_ll
+00000000 *UND* 00000000 __f_to_ull
+00000000 *UND* 00000000 __d_to_ll
+00000000 *UND* 00000000 __d_to_ull
+00000000 *UND* 00000000 round64
+00000000 *UND* 00000000 trunc64
+00000000 *UND* 00000000 max64
+00000000 *UND* 00000000 min64
+00000000 *UND* 00000000 abs64
+00000000 *UND* 00000000 odd64
+00000000 *UND* 00000000 trapNaN
+00000000 *UND* 00000008 input
+00000000 *UND* 00000008 output
+00000000 *UND* 00000008 err
+00000000 *UND* 00000008 __Argc
+
+
+RELOCATION RECORDS FOR [.text]: (none)
+
+RELOCATION RECORDS FOR [.rodata]: (none)
+
+Contents of section .text:
+ 0000 00041080 03e00008 00441023 27bdffe8 .........D.#'...
+ 0010 18a00009 afa00004 8fae0004 008e7821 ..............x!
+ 0020 a1e00000 8fb80004 27190001 0325082a ........'....%.*
+ 0030 1420fff9 afb90004 10000001 00000000 . ..............
+ 0040 03e00008 27bd0018 00000000 00000000 ....'...........
+ 0050 00000000 00000000 00000000 00000000 ................
+ 0060 00000000 00000000 00000000 00000000 ................
+ 0070 00000000 00000000 00000000 00000000 ................
+ 0080 00000000 00000000 00000000 00000000 ................
+ 0090 00000000 00000000 00000000 00000000 ................
+ 00a0 00000000 00000000 00000000 00000000 ................
+ 00b0 00000000 00000000 00000000 00000000 ................
+ 00c0 00000000 00000000 00000000 00000000 ................
+ 00d0 00041080 03e00008 00441023 00000000 .........D.#....
+Contents of section .rodata:
+ 0000 00123123 00456456 00789789 00000001 ..1#.EdV.x......
+ 0010 3ff19999 9999999a 00000002 00000003 ?...............
+ 0020 4000cccc cccccccd 00000000 00000000 @...............
+Contents of section .data:
+ 0000 00002323 00003434 00000000 00000000 ..##..44........
+Contents of section .options:
+ 0000 01200000 00000000 80004016 00000000 . ........@.....
+ 0010 000000f0 00000000 00000000 00007ff0 ................
+ 0020 07100000 00000000 00000000 00000000 ................
+ 0030 08100000 00000000 00000000 00000000 ................
+Contents of section .reginfo:
+ 0000 a300c036 00000000 000000f0 00000000 ...6............
+ 0010 00000000 00007ff0 ........
diff --git a/tools/asm-processor/tests/pascal.p b/tools/asm-processor/tests/pascal.p
new file mode 100644
index 000000000..0886126ab
--- /dev/null
+++ b/tools/asm-processor/tests/pascal.p
@@ -0,0 +1,95 @@
+{ COMPILE-FLAGS: -O2 }
+
+function foo(x: integer): integer;
+begin
+ foo := x * 3
+end;
+
+GLOBAL_ASM(
+.section .data
+.word 0x2323
+
+.late_rodata
+.word 0x123123
+.word 0x456456
+.word 0x789789
+.text
+glabel test
+/* 000090 00400090 27BDFFF8 */ addiu $sp, $sp, -24
+/* 000094 00400094 18A00009 */ blez $a1, .L004000BC
+/* 000098 00400098 AFA00004 */ sw $zero, 4($sp)
+.L0040009C:
+/* 00009C 0040009C 8FAE0004 */ lw $t6, 4($sp)
+/* 0000A0 004000A0 008E7821 */ addu $t7, $a0, $t6
+/* 0000A4 004000A4 A1E00000 */ sb $zero, ($t7)
+/* 0000A8 004000A8 8FB80004 */ lw $t8, 4($sp)
+/* 0000AC 004000AC 27190001 */ addiu $t9, $t8, 1
+/* 0000B0 004000B0 0325082A */ slt $at, $t9, $a1
+/* 0000B4 004000B4 1420FFF9 */ bnez $at, .L0040009C
+/* 0000B8 004000B8 AFB90004 */ sw $t9, 4($sp)
+.L004000BC:
+/* 0000BC 004000BC 10000001 */ b .L004000C4
+/* 0000C0 004000C0 00000000 */ nop
+.L004000C4:
+/* 0000C4 004000C4 03E00008 */ jr $ra
+/* 0000C8 004000C8 27BD0008 */ addiu $sp, $sp, 24
+)
+
+GLOBAL_ASM(
+.section .data
+.word 0x3434
+
+.late_rodata
+.word 0x1
+.double 1.1
+.word 0x2, 0x3
+.text
+glabel test2
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+)
+
+GLOBAL_ASM(
+.late_rodata
+.double 2.1
+.text
+glabel test3
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+nop
+)
+
+function bar(x: integer): integer;
+begin
+ return x * 3
+end;
+
diff --git a/tools/asm-processor/tests/static-global.c b/tools/asm-processor/tests/static-global.c
new file mode 100644
index 000000000..a7f616907
--- /dev/null
+++ b/tools/asm-processor/tests/static-global.c
@@ -0,0 +1,33 @@
+// COMPILE-FLAGS: -O2
+// ASMP-FLAGS: --convert-statics=global
+static int xtext(int a, int b, int c);
+const int rodata1[] = {1};
+static const int rodata2[] = {2};
+int data1[] = {3};
+static int data2[] = {4};
+int bss1;
+static int bss2;
+
+GLOBAL_ASM(
+glabel bar
+lui $a0, %hi(rodata2)
+lw $a0, %lo(rodata2)($a0)
+lui $a1, %hi(data2)
+lw $a1, %lo(data2)($a0)
+lui $a2, %hi(bss2)
+lw $a2, %lo(bss2)($a0)
+jal xtext
+nop
+jr $ra
+nop
+nop
+nop
+)
+
+static int xtext(int a, int b, int c) {
+ return 1;
+}
+
+void baz(void) {
+ xtext(bss2, rodata2[0], data2[0]);
+}
diff --git a/tools/asm-processor/tests/static-global.objdump b/tools/asm-processor/tests/static-global.objdump
new file mode 100644
index 000000000..a519e4f48
--- /dev/null
+++ b/tools/asm-processor/tests/static-global.objdump
@@ -0,0 +1,58 @@
+
+tests/static-global.o: file format elf32-tradbigmips
+
+SYMBOL TABLE:
+00000000 l d .text 00000080 .text
+00000000 l d .rodata 00000010 .rodata
+00000000 l d .data 00000010 .data
+00000000 l d .bss 00000010 .bss
+00000000 g O .rodata 00000004 rodata1
+00000000 g O .data 00000004 data1
+00000000 g O .bss 00000004 bss1
+00000044 g F .text 00000034 baz
+00000000 g F .text 00000030 bar
+00000004 g O .rodata 00000000 rodata2
+00000004 g O .data 00000000 data2
+00000004 g O .bss 00000000 bss2
+00000030 g F .text 00000000 xtext
+
+
+RELOCATION RECORDS FOR [.text]:
+OFFSET TYPE VALUE
+0000004c R_MIPS_HI16 .bss
+00000064 R_MIPS_LO16 .bss
+00000050 R_MIPS_HI16 .rodata
+0000005c R_MIPS_LO16 .rodata
+00000054 R_MIPS_HI16 .data
+00000058 R_MIPS_LO16 .data
+00000060 R_MIPS_26 .text
+00000000 R_MIPS_HI16 rodata2
+00000004 R_MIPS_LO16 rodata2
+00000008 R_MIPS_HI16 data2
+0000000c R_MIPS_LO16 data2
+00000010 R_MIPS_HI16 bss2
+00000014 R_MIPS_LO16 bss2
+00000018 R_MIPS_26 xtext
+
+
+Contents of section .text:
+ 0000 3c040000 8c840000 3c050000 8c850000 <.......<.......
+ 0010 3c060000 8c860000 0c000000 00000000 <...............
+ 0020 03e00008 00000000 00000000 00000000 ................
+ 0030 afa40000 afa50004 afa60008 03e00008 ................
+ 0040 24020001 27bdffe8 afbf0014 3c040000 $...'.......<...
+ 0050 3c050000 3c060000 8cc60004 8ca50004 <...<...........
+ 0060 0c00000c 8c840004 8fbf0014 27bd0018 ............'...
+ 0070 03e00008 00000000 00000000 00000000 ................
+Contents of section .rodata:
+ 0000 00000001 00000002 00000000 00000000 ................
+Contents of section .data:
+ 0000 00000003 00000004 00000000 00000000 ................
+Contents of section .options:
+ 0000 01200000 00000000 a0000074 00000000 . .........t....
+ 0010 00000000 00000000 00000000 00007ff0 ................
+ 0020 07100000 00000000 00000000 00000000 ................
+ 0030 08100000 00000000 00000000 00000000 ................
+Contents of section .reginfo:
+ 0000 a0000074 00000000 00000000 00000000 ...t............
+ 0010 00000000 00007ff0 ........
diff --git a/tools/asm-processor/tests/static.c b/tools/asm-processor/tests/static.c
new file mode 100644
index 000000000..c265021e5
--- /dev/null
+++ b/tools/asm-processor/tests/static.c
@@ -0,0 +1,32 @@
+// COMPILE-FLAGS: -O2
+static int xtext(int a, int b, int c);
+const int rodata1[] = {1};
+static const int rodata2[] = {2};
+int data1[] = {3};
+static int data2[] = {4};
+int bss1;
+static int bss2;
+
+GLOBAL_ASM(
+glabel bar
+lui $a0, %hi(rodata2)
+lw $a0, %lo(rodata2)($a0)
+lui $a1, %hi(data2)
+lw $a1, %lo(data2)($a0)
+lui $a2, %hi(bss2)
+lw $a2, %lo(bss2)($a0)
+jal xtext
+nop
+jr $ra
+nop
+nop
+nop
+)
+
+static int xtext(int a, int b, int c) {
+ return 1;
+}
+
+void baz(void) {
+ xtext(bss2, rodata2[0], data2[0]);
+}
diff --git a/tools/asm-processor/tests/static.objdump b/tools/asm-processor/tests/static.objdump
new file mode 100644
index 000000000..dd62c94c1
--- /dev/null
+++ b/tools/asm-processor/tests/static.objdump
@@ -0,0 +1,58 @@
+
+tests/static.o: file format elf32-tradbigmips
+
+SYMBOL TABLE:
+00000000 l d .text 00000080 .text
+00000000 l d .rodata 00000010 .rodata
+00000000 l d .data 00000010 .data
+00000000 l d .bss 00000010 .bss
+00000004 l O .rodata 00000000 rodata2
+00000004 l O .data 00000000 data2
+00000004 l O .bss 00000000 bss2
+00000030 l F .text 00000000 xtext
+00000000 g O .rodata 00000004 rodata1
+00000000 g O .data 00000004 data1
+00000000 g O .bss 00000004 bss1
+00000044 g F .text 00000034 baz
+00000000 g F .text 00000030 bar
+
+
+RELOCATION RECORDS FOR [.text]:
+OFFSET TYPE VALUE
+0000004c R_MIPS_HI16 .bss
+00000064 R_MIPS_LO16 .bss
+00000050 R_MIPS_HI16 .rodata
+0000005c R_MIPS_LO16 .rodata
+00000054 R_MIPS_HI16 .data
+00000058 R_MIPS_LO16 .data
+00000060 R_MIPS_26 .text
+00000000 R_MIPS_HI16 rodata2
+00000004 R_MIPS_LO16 rodata2
+00000008 R_MIPS_HI16 data2
+0000000c R_MIPS_LO16 data2
+00000010 R_MIPS_HI16 bss2
+00000014 R_MIPS_LO16 bss2
+00000018 R_MIPS_26 xtext
+
+
+Contents of section .text:
+ 0000 3c040000 8c840000 3c050000 8c850000 <.......<.......
+ 0010 3c060000 8c860000 0c000000 00000000 <...............
+ 0020 03e00008 00000000 00000000 00000000 ................
+ 0030 afa40000 afa50004 afa60008 03e00008 ................
+ 0040 24020001 27bdffe8 afbf0014 3c040000 $...'.......<...
+ 0050 3c050000 3c060000 8cc60004 8ca50004 <...<...........
+ 0060 0c00000c 8c840004 8fbf0014 27bd0018 ............'...
+ 0070 03e00008 00000000 00000000 00000000 ................
+Contents of section .rodata:
+ 0000 00000001 00000002 00000000 00000000 ................
+Contents of section .data:
+ 0000 00000003 00000004 00000000 00000000 ................
+Contents of section .options:
+ 0000 01200000 00000000 a0000074 00000000 . .........t....
+ 0010 00000000 00000000 00000000 00007ff0 ................
+ 0020 07100000 00000000 00000000 00000000 ................
+ 0030 08100000 00000000 00000000 00000000 ................
+Contents of section .reginfo:
+ 0000 a0000074 00000000 00000000 00000000 ...t............
+ 0010 00000000 00007ff0 ........
diff --git a/tools/asm-processor/tests/test1.c b/tools/asm-processor/tests/test1.c
new file mode 100644
index 000000000..475555a75
--- /dev/null
+++ b/tools/asm-processor/tests/test1.c
@@ -0,0 +1,71 @@
+
+GLOBAL_ASM(
+.rdata
+.word 0x1212
+)
+
+GLOBAL_ASM(
+.late_rodata
+.word 0x123123
+.text
+glabel test
+/* 000090 00400090 27BDFFF8 */ addiu $sp, $sp, -24
+/* 000094 00400094 18A00009 */ blez $a1, .L004000BC
+/* 000098 00400098 AFA00004 */ sw $zero, 4($sp)
+.L0040009C:
+/* 00009C 0040009C 8FAE0004 */ lw $t6, 4($sp)
+/* 0000A0 004000A0 008E7821 */ addu $t7, $a0, $t6
+/* 0000A4 004000A4 A1E00000 */ sb $zero, ($t7)
+/* 0000A8 004000A8 8FB80004 */ lw $t8, 4($sp)
+/* 0000AC 004000AC 27190001 */ addiu $t9, $t8, 1
+/* 0000B0 004000B0 0325082A */ slt $at, $t9, $a1
+/* 0000B4 004000B4 1420FFF9 */ bnez $at, .L0040009C
+/* 0000B8 004000B8 AFB90004 */ sw $t9, 4($sp)
+.L004000BC:
+/* 0000BC 004000BC 10000001 */ b .L004000C4
+/* 0000C0 004000C0 00000000 */ nop
+.L004000C4:
+/* 0000C4 004000C4 03E00008 */ jr $ra
+/* 0000C8 004000C8 27BD0008 */ addiu $sp, $sp, 24
+)
+
+char bss1[3];
+GLOBAL_ASM(
+.bss
+bss2:
+.space 3
+)
+char bss3[3];
+char bss4[3];
+const int rodata1[2] = {1};
+extern int some_rodata;
+
+unsigned g(float, int);
+unsigned f(void) {
+ return g(1.1f, some_rodata);
+}
+
+GLOBAL_ASM(
+.rdata
+glabel some_rodata
+.word 0x1313
+.text
+.late_rodata
+.word 0x321321
+.text
+glabel g
+/* 0000C0 004000C0 27BDFFE8 */ addiu $sp, $sp, -0x18
+/* 0000C4 004000C4 AFBF0014 */ sw $ra, 0x14($sp)
+/* 0000C8 004000C8 240E0004 */ addiu $t6, $zero, 4
+/* 0000CC 004000CC 3C010041 */ lui $at, %hi(D_410100)
+/* 0000D0 004000D0 AC2E0100 */ sw $t6, %lo(D_410100)($at)
+/* 0000D4 004000D4 0C10002C */ jal func_004000B0
+/* 0000D8 004000D8 00000000 */ nop
+/* 0000DC 004000DC 10000001 */ b .L004000E4
+/* 0000E0 004000E0 00000000 */ nop
+.L004000E4:
+/* 0000E4 004000E4 8FBF0014 */ lw $ra, 0x14($sp)
+/* 0000E8 004000E8 27BD0018 */ addiu $sp, $sp, 0x18
+/* 0000EC 004000EC 03E00008 */ jr $ra
+/* 0000F0 004000F0 00000000 */ nop
+)
diff --git a/tools/asm-processor/tests/test1.objdump b/tools/asm-processor/tests/test1.objdump
new file mode 100644
index 000000000..b97ae46e1
--- /dev/null
+++ b/tools/asm-processor/tests/test1.objdump
@@ -0,0 +1,54 @@
+
+tests/test1.o: file format elf32-tradbigmips
+
+SYMBOL TABLE:
+00000000 l d .text 000000b0 .text
+00000000 l d .rodata 00000020 .rodata
+00000000 l d .bss 00000010 .bss
+00000000 g O .bss 00000003 bss1
+00000008 g O .bss 00000003 bss3
+0000000c g O .bss 00000003 bss4
+00000004 g O .rodata 00000008 rodata1
+0000003c g F .text 0000003c f
+00000000 g F .text 0000003c test
+0000000c g .rodata 00000000 some_rodata
+00000078 g F .text 00000004 g
+00000000 *UND* 00000000 D_410100
+00000000 *UND* 00000000 func_004000B0
+
+
+RELOCATION RECORDS FOR [.text]:
+OFFSET TYPE VALUE
+00000044 R_MIPS_HI16 .rodata
+00000054 R_MIPS_LO16 .rodata
+00000048 R_MIPS_HI16 some_rodata
+0000004c R_MIPS_LO16 some_rodata
+00000050 R_MIPS_26 g
+00000084 R_MIPS_HI16 D_410100
+00000088 R_MIPS_LO16 D_410100
+0000008c R_MIPS_26 func_004000B0
+
+
+Contents of section .text:
+ 0000 27bdffe8 18a00009 afa00004 8fae0004 '...............
+ 0010 008e7821 a1e00000 8fb80004 27190001 ..x!........'...
+ 0020 0325082a 1420fff9 afb90004 10000001 .%.*. ..........
+ 0030 00000000 03e00008 27bd0018 27bdffe8 ........'...'...
+ 0040 afbf0014 3c010000 3c050000 8ca50000 ....<...<.......
+ 0050 0c000000 c42c0014 10000003 00000000 .....,..........
+ 0060 10000001 00000000 8fbf0014 27bd0018 ............'...
+ 0070 03e00008 00000000 27bdffe8 afbf0014 ........'.......
+ 0080 240e0004 3c010000 ac2e0000 0c000000 $...<...........
+ 0090 00000000 10000001 00000000 8fbf0014 ................
+ 00a0 27bd0018 03e00008 00000000 00000000 '...............
+Contents of section .rodata:
+ 0000 00001212 00000001 00000000 00001313 ................
+ 0010 00123123 3f8ccccd 00321321 00000000 ..1#?....2.!....
+Contents of section .options:
+ 0000 01200000 00000000 a0000022 00000000 . ........."....
+ 0010 00001010 00000000 00000000 00007ff0 ................
+ 0020 07100000 00000000 00000000 00000000 ................
+ 0030 08100000 00000000 00000000 00000000 ................
+Contents of section .reginfo:
+ 0000 a300c032 00000000 00001010 00000000 ...2............
+ 0010 00000000 00007ff0 ........
diff --git a/tools/asm-processor/tests/test2.c b/tools/asm-processor/tests/test2.c
new file mode 100644
index 000000000..15969feb6
--- /dev/null
+++ b/tools/asm-processor/tests/test2.c
@@ -0,0 +1,69 @@
+const char buf1[1] = {1};
+float func1(void) {
+ "func1";
+ return 0.1f;
+}
+const char buf2[1] = {2};
+void func2(void) {
+ *(volatile float*)0 = -3.5792360305786133f;
+ *(volatile float*)0 = -3.5792362689971924f;
+ // "func2";
+ // return 0.2f;
+}
+const char buf3[1] = {3};
+int func3(int x) {
+ switch(x) {
+ case 0:
+ return 1;
+ case 1:
+ return 2;
+ case 2:
+ return 3;
+ case 3:
+ return 4;
+ case 4:
+ return 5;
+ case 5:
+ return 4;
+ case 6:
+ return 4;
+ case 7:
+ return 4;
+ default:
+ return 3;
+ }
+}
+
+#if 1
+GLOBAL_ASM(
+.rdata
+.word 0x66756e63 # func
+.word 0x34000000 # 4\0\0\0
+.word jumptarget + 4
+
+.late_rodata
+glabel rv
+.word 0x3e4ccccd # 0.2f
+.word jumptarget + 8
+
+.text
+glabel func4
+lui $at, %hi(rv)
+glabel jumptarget
+jr $ra
+lwc1 $f0, %lo(rv)($at)
+jr $ra
+nop
+jr $ra
+nop
+jr $ra
+nop
+jr $ra
+nop
+)
+#else
+float func4(void) {
+ "func4";
+ return 0.2f;
+}
+#endif
diff --git a/tools/asm-processor/tests/test2.objdump b/tools/asm-processor/tests/test2.objdump
new file mode 100644
index 000000000..276ed9f1f
--- /dev/null
+++ b/tools/asm-processor/tests/test2.objdump
@@ -0,0 +1,76 @@
+
+tests/test2.o: file format elf32-tradbigmips
+
+SYMBOL TABLE:
+00000000 l d .text 000000f0 .text
+00000000 l d .rodata 00000060 .rodata
+00000000 g O .rodata 00000001 buf1
+00000000 g F .text 0000001c func1
+0000000c g O .rodata 00000001 buf2
+0000001c g F .text 00000028 func2
+00000010 g O .rodata 00000001 buf3
+00000044 g F .text 0000007c func3
+000000c4 g F .text 00000000 jumptarget
+000000c0 g F .text 0000000c func4
+0000004c g .rodata 00000000 rv
+
+
+RELOCATION RECORDS FOR [.text]:
+OFFSET TYPE VALUE
+00000000 R_MIPS_HI16 .rodata
+00000008 R_MIPS_LO16 .rodata
+0000001c R_MIPS_HI16 .rodata
+00000020 R_MIPS_LO16 .rodata
+00000028 R_MIPS_HI16 .rodata
+0000002c R_MIPS_LO16 .rodata
+00000054 R_MIPS_HI16 .rodata
+0000005c R_MIPS_LO16 .rodata
+000000c0 R_MIPS_HI16 rv
+000000c8 R_MIPS_LO16 rv
+
+
+RELOCATION RECORDS FOR [.rodata]:
+OFFSET TYPE VALUE
+0000002c R_MIPS_32 .text
+00000030 R_MIPS_32 .text
+00000034 R_MIPS_32 .text
+00000038 R_MIPS_32 .text
+0000003c R_MIPS_32 .text
+00000040 R_MIPS_32 .text
+00000044 R_MIPS_32 .text
+00000048 R_MIPS_32 .text
+0000001c R_MIPS_32 jumptarget
+00000050 R_MIPS_32 jumptarget
+
+
+Contents of section .text:
+ 0000 3c010000 03e00008 c4200020 03e00008 <........ . ....
+ 0010 00000000 03e00008 00000000 3c010000 ............<...
+ 0020 c4240024 e4040000 3c010000 c4260028 .$.$....<....&.(
+ 0030 e4060000 03e00008 00000000 03e00008 ................
+ 0040 00000000 2c810008 10200017 00000000 ....,.... ......
+ 0050 00047080 3c010000 002e0821 8c2e002c ..p.<......!...,
+ 0060 01c00008 00000000 03e00008 24020001 ............$...
+ 0070 03e00008 24020002 03e00008 24020003 ....$.......$...
+ 0080 03e00008 24020004 03e00008 24020005 ....$.......$...
+ 0090 03e00008 24020004 03e00008 24020004 ....$.......$...
+ 00a0 03e00008 24020004 03e00008 24020003 ....$.......$...
+ 00b0 03e00008 00000000 03e00008 00000000 ................
+ 00c0 3c010000 03e00008 c4200000 03e00008 <........ ......
+ 00d0 00000000 03e00008 00000000 03e00008 ................
+ 00e0 00000000 03e00008 00000000 00000000 ................
+Contents of section .rodata:
+ 0000 01000000 66756e63 31000000 02000000 ....func1.......
+ 0010 03000000 66756e63 34000000 00000004 ....func4.......
+ 0020 3dcccccd c0651234 c0651235 00000068 =....e.4.e.5...h
+ 0030 00000070 00000078 00000080 00000088 ...p...x........
+ 0040 00000090 00000098 000000a0 3e4ccccd ............>L..
+ 0050 00000008 00000000 00000000 00000000 ................
+Contents of section .options:
+ 0000 01200000 00000000 80004016 00000000 . ........@.....
+ 0010 00000051 00000000 00000000 00007ff0 ...Q............
+ 0020 07100000 00000000 00000000 00000000 ................
+ 0030 08100000 00000000 00000000 00000000 ................
+Contents of section .reginfo:
+ 0000 80004016 00000000 00000051 00000000 ..@........Q....
+ 0010 00000000 00007ff0 ........
diff --git a/tools/asm-processor/tests/test3.c b/tools/asm-processor/tests/test3.c
new file mode 100644
index 000000000..d74bb4cbd
--- /dev/null
+++ b/tools/asm-processor/tests/test3.c
@@ -0,0 +1,70 @@
+
+GLOBAL_ASM(
+.rdata
+.word 321321
+.text
+glabel test
+/* 000090 00400090 27BDFFF8 */ addiu $sp, $sp, -24
+/* 000094 00400094 18A00009 */ blez $a1, .L004000BC
+/* 000098 00400098 AFA00004 */ sw $zero, 4($sp)
+.L0040009C:
+/* 00009C 0040009C 8FAE0004 */ lw $t6, 4($sp)
+/* 0000A0 004000A0 008E7821 */ addu $t7, $a0, $t6
+/* 0000A4 004000A4 A1E00000 */ sb $zero, ($t7)
+/* 0000A8 004000A8 8FB80004 */ lw $t8, 4($sp)
+/* 0000AC 004000AC 27190001 */ addiu $t9, $t8, 1
+/* 0000B0 004000B0 0325082A */ slt $at, $t9, $a1
+/* 0000B4 004000B4 1420FFF9 */ bnez $at, .L0040009C
+/* 0000B8 004000B8 AFB90004 */ sw $t9, 4($sp)
+.L004000BC:
+/* 0000BC 004000BC 10000001 */ b .L004000C4
+/* 0000C0 004000C0 00000000 */ nop
+.L004000C4:
+/* 0000C4 004000C4 03E00008 */ jr $ra
+/* 0000C8 004000C8 27BD0008 */ addiu $sp, $sp, 24
+)
+
+// static -> no symbols
+// bss
+char globalBuf[4];
+const char constBuf[4];
+
+// data
+char globalBufInit[4] = {1};
+
+// rodata
+const char constBufInit[4] = {1};
+const char constBufInit2[1] = {2};
+const char constBufInit3[1] = {3};
+
+unsigned g(void);
+unsigned f(void) {
+ // aligns to 4 or 8 byte boundary (char -> 4, double -> 8)
+ double x = 5.1;
+ float y = 5.2f;
+ float z = 5.3f;
+ "Hello ";
+ "World";
+ return g();
+}
+
+GLOBAL_ASM(
+.rdata
+.word 123123
+.text
+glabel g
+/* 0000C0 004000C0 27BDFFE8 */ addiu $sp, $sp, -0x18
+/* 0000C4 004000C4 AFBF0014 */ sw $ra, 0x14($sp)
+/* 0000C8 004000C8 240E0004 */ addiu $t6, $zero, 4
+/* 0000CC 004000CC 3C010041 */ lui $at, %hi(D_410100)
+/* 0000D0 004000D0 AC2E0100 */ sw $t6, %lo(D_410100)($at)
+/* 0000D4 004000D4 0C10002C */ jal func_004000B0
+/* 0000D8 004000D8 00000000 */ nop
+/* 0000DC 004000DC 10000001 */ b .L004000E4
+/* 0000E0 004000E0 00000000 */ nop
+.L004000E4:
+/* 0000E4 004000E4 8FBF0014 */ lw $ra, 0x14($sp)
+/* 0000E8 004000E8 27BD0018 */ addiu $sp, $sp, 0x18
+/* 0000EC 004000EC 03E00008 */ jr $ra
+/* 0000F0 004000F0 00000000 */ nop
+)
diff --git a/tools/asm-processor/tests/test3.objdump b/tools/asm-processor/tests/test3.objdump
new file mode 100644
index 000000000..bfa7f6e37
--- /dev/null
+++ b/tools/asm-processor/tests/test3.objdump
@@ -0,0 +1,64 @@
+
+tests/test3.o: file format elf32-tradbigmips
+
+SYMBOL TABLE:
+00000000 l d .text 000000d0 .text
+00000000 l d .rodata 00000040 .rodata
+00000000 l d .data 00000010 .data
+00000000 l d .bss 00000010 .bss
+00000000 g O .bss 00000004 globalBuf
+00000004 g O .bss 00000004 constBuf
+00000000 g O .data 00000004 globalBufInit
+00000004 g O .rodata 00000004 constBufInit
+00000008 g O .rodata 00000001 constBufInit2
+0000000c g O .rodata 00000001 constBufInit3
+0000003c g F .text 00000054 f
+00000000 g F .text 00000004 test
+00000090 g F .text 00000004 g
+00000000 *UND* 00000000 D_410100
+00000000 *UND* 00000000 func_004000B0
+
+
+RELOCATION RECORDS FOR [.text]:
+OFFSET TYPE VALUE
+00000044 R_MIPS_HI16 .rodata
+00000048 R_MIPS_LO16 .rodata
+00000050 R_MIPS_HI16 .rodata
+00000054 R_MIPS_LO16 .rodata
+0000005c R_MIPS_HI16 .rodata
+00000060 R_MIPS_LO16 .rodata
+00000068 R_MIPS_26 g
+0000009c R_MIPS_HI16 D_410100
+000000a0 R_MIPS_LO16 D_410100
+000000a4 R_MIPS_26 func_004000B0
+
+
+Contents of section .text:
+ 0000 27bdffe8 18a00009 afa00004 8fae0004 '...............
+ 0010 008e7821 a1e00000 8fb80004 27190001 ..x!........'...
+ 0020 0325082a 1420fff9 afb90004 10000001 .%.*. ..........
+ 0030 00000000 03e00008 27bd0018 27bdffd8 ........'...'...
+ 0040 afbf0014 3c010000 d4240028 f7a40020 ....<....$.(...
+ 0050 3c010000 c4260030 e7a6001c 3c010000 <....&.0....<...
+ 0060 c4280034 e7a80018 0c000000 00000000 .(.4............
+ 0070 10000003 00000000 10000001 00000000 ................
+ 0080 8fbf0014 27bd0028 03e00008 00000000 ....'..(........
+ 0090 27bdffe8 afbf0014 240e0004 3c010000 '.......$...<...
+ 00a0 ac2e0000 0c000000 00000000 10000001 ................
+ 00b0 00000000 8fbf0014 27bd0018 03e00008 ........'.......
+ 00c0 00000000 00000000 00000000 00000000 ................
+Contents of section .rodata:
+ 0000 0004e729 01000000 02000000 03000000 ...)............
+ 0010 48656c6c 6f202000 576f726c 64000000 Hello .World...
+ 0020 0001e0f3 00000000 40146666 66666666 ........@.ffffff
+ 0030 40a66666 40a9999a 00000000 00000000 @.ff@...........
+Contents of section .data:
+ 0000 01000000 00000000 00000000 00000000 ................
+Contents of section .options:
+ 0000 01200000 00000000 a0000002 00000000 . ..............
+ 0010 00000170 00000000 00000000 00007ff0 ...p............
+ 0020 07100000 00000000 00000000 00000000 ................
+ 0030 08100000 00000000 00000000 00000000 ................
+Contents of section .reginfo:
+ 0000 a300c032 00000000 00000170 00000000 ...2.......p....
+ 0010 00000000 00007ff0 ........
diff --git a/tools/buildtools/elf2rom.c b/tools/buildtools/elf2rom.c
index 8f4441293..1473246ce 100644
--- a/tools/buildtools/elf2rom.c
+++ b/tools/buildtools/elf2rom.c
@@ -12,45 +12,41 @@
#define ROM_SEG_START_SUFFIX ".rom_start"
#define ROM_SEG_END_SUFFIX ".rom_end"
-struct RomSegment
-{
- const char *name;
- const void *data;
+struct RomSegment {
+ const char* name;
+ const void* data;
int size;
int romStart;
int romEnd;
};
-static struct RomSegment *g_romSegments = NULL;
+static struct RomSegment* g_romSegments = NULL;
static int g_romSegmentsCount = 0;
static int g_romSize;
-static bool parse_number(const char *str, int *num)
-{
- char *endptr;
+static bool parse_number(const char* str, int* num) {
+ char* endptr;
long int n = strtol(str, &endptr, 0);
*num = n;
return endptr > str;
}
-static unsigned int round_up(unsigned int num, unsigned int multiple)
-{
+static unsigned int round_up(unsigned int num, unsigned int multiple) {
num += multiple - 1;
return num / multiple * multiple;
}
-static char *sprintf_alloc(const char *fmt, ...)
-{
+static char* sprintf_alloc(const char* fmt, ...) {
va_list args;
int size;
- char *buffer;
+ char* buffer;
va_start(args, fmt);
size = vsnprintf(NULL, 0, fmt, args) + 1;
va_end(args);
buffer = malloc(size);
-
+
va_start(args, fmt);
vsprintf(buffer, fmt, args);
va_end(args);
@@ -58,8 +54,7 @@ static char *sprintf_alloc(const char *fmt, ...)
return buffer;
}
-static struct RomSegment *add_rom_segment(const char *name)
-{
+static struct RomSegment* add_rom_segment(const char* name) {
int index = g_romSegmentsCount;
g_romSegmentsCount++;
@@ -71,50 +66,44 @@ static struct RomSegment *add_rom_segment(const char *name)
return &g_romSegments[index];
}
-static void find_segment_info(struct Elf32 *elf, struct RomSegment *segment)
-{
+static void find_segment_info(struct Elf32* elf, struct RomSegment* segment) {
int i;
- char *romStartSymName = sprintf_alloc("_%sSegmentRomStart", segment->name);
- char *romEndSymName = sprintf_alloc("_%sSegmentRomEnd", segment->name);
+ char* romStartSymName = sprintf_alloc("_%sSegmentRomStart", segment->name);
+ char* romEndSymName = sprintf_alloc("_%sSegmentRomEnd", segment->name);
segment->romStart = -1;
segment->romEnd = -1;
// TODO: use a hashmap for this instead of an O(n) loop
- for (i = 0; i < elf->numsymbols; i++)
- {
+ for (i = 0; i < elf->numsymbols; i++) {
struct Elf32_Symbol sym;
-
+
if (!elf32_get_symbol(elf, &sym, i))
util_fatal_error("invalid or corrupt ELF file");
- if (strcmp(sym.name, romStartSymName) == 0)
- {
+ if (strcmp(sym.name, romStartSymName) == 0) {
segment->romStart = sym.value;
if (segment->romEnd != -1)
break;
- }
- else if (strcmp(sym.name, romEndSymName) == 0)
- {
+ } else if (strcmp(sym.name, romEndSymName) == 0) {
segment->romEnd = sym.value;
if (segment->romStart != -1)
break;
}
}
-
+
if (segment->romStart == -1)
util_fatal_error("ROM start address of %s is not defined\n", segment->name);
if (segment->romEnd == -1)
util_fatal_error("ROM end address of %s is not defined\n", segment->name);
-
+
free(romStartSymName);
free(romEndSymName);
}
-static void parse_input_file(const char *filename)
-{
+static void parse_input_file(const char* filename) {
struct Elf32 elf;
- const void *data;
+ const void* data;
size_t size;
int i;
@@ -125,45 +114,40 @@ static void parse_input_file(const char *filename)
// get ROM segments
// sections of type SHT_PROGBITS and whose name is ..secname are considered ROM segments
- for (i = 0; i < elf.shnum; i++)
- {
+ for (i = 0; i < elf.shnum; i++) {
struct Elf32_Section sec;
- struct RomSegment *segment;
+ struct RomSegment* segment;
if (!elf32_get_section(&elf, &sec, i))
util_fatal_error("invalid or corrupt ELF file");
- if (sec.type == SHT_PROGBITS && sec.name[0] == '.' && sec.name[1] == '.'
- // HACK! ld sometimes marks NOLOAD sections as SHT_PROGBITS for no apparent reason,
- // so we must ignore the ..secname.bss sections explicitly
- && strchr(sec.name + 2, '.') == NULL)
- {
-
+ if (sec.type == SHT_PROGBITS && sec.name[0] == '.' &&
+ sec.name[1] == '.'
+ // HACK! ld sometimes marks NOLOAD sections as SHT_PROGBITS for no apparent reason,
+ // so we must ignore the ..secname.bss sections explicitly
+ && strchr(sec.name + 2, '.') == NULL) {
+
segment = add_rom_segment(sec.name + 2);
find_segment_info(&elf, segment);
segment->data = elf.data + sec.offset;
}
-
}
// find ROM size
- for (i = 0; i < elf.numsymbols; i++)
- {
+ for (i = 0; i < elf.numsymbols; i++) {
struct Elf32_Symbol sym;
if (!elf32_get_symbol(&elf, &sym, i))
util_fatal_error("invalid or corrupt ELF file");
- if (strcmp(sym.name, "_RomSize") == 0)
- {
+ if (strcmp(sym.name, "_RomSize") == 0) {
g_romSize = sym.value;
goto got_rom_size;
}
}
util_fatal_error("could not find symbol _RomSize");
- got_rom_size:
+got_rom_size:
// verify segment info
- for (i = 0; i < g_romSegmentsCount; i++)
- {
+ for (i = 0; i < g_romSegmentsCount; i++) {
if (g_romSegments[i].romStart == -1)
util_fatal_error("segment %s has no ROM start address defined.", g_romSegments[i].name);
if (g_romSegments[i].romEnd == -1)
@@ -172,23 +156,21 @@ static void parse_input_file(const char *filename)
}
// Writes the N64 ROM, padding the file size to a multiple of 1 MiB
-static void write_rom_file(const char *filename, int cicType)
-{
+static void write_rom_file(const char* filename, int cicType) {
size_t fileSize = round_up(g_romSize, 0x100000);
- uint8_t *buffer = calloc(fileSize, 1);
+ uint8_t* buffer = calloc(fileSize, 1);
int i;
uint32_t chksum[2];
// write segments
- for (i = 0; i < g_romSegmentsCount; i++)
- {
+ for (i = 0; i < g_romSegmentsCount; i++) {
int size = g_romSegments[i].romEnd - g_romSegments[i].romStart;
memcpy(buffer + g_romSegments[i].romStart, g_romSegments[i].data, size);
}
// pad the remaining space with 0xFF
- for (i = g_romSize; i < (int) fileSize; i++)
+ for (i = g_romSize; i < (int)fileSize; i++)
buffer[i] = 0xFF;
// write checksum
@@ -201,67 +183,51 @@ static void write_rom_file(const char *filename, int cicType)
free(buffer);
}
-static void usage(const char *execname)
-{
+static void usage(const char* execname) {
printf("usage: %s\n", execname);
}
-int main(int argc, char **argv)
-{
+int main(int argc, char** argv) {
int i;
- const char *inputFileName = NULL;
- const char *outputFileName = NULL;
+ const char* inputFileName = NULL;
+ const char* outputFileName = NULL;
int cicType = -1;
- for (i = 1; i < argc; i++)
- {
- if (argv[i][0] == '-')
- {
- if (strcmp(argv[i], "-cic") == 0)
- {
+ for (i = 1; i < argc; i++) {
+ if (argv[i][0] == '-') {
+ if (strcmp(argv[i], "-cic") == 0) {
i++;
- if (i >= argc || !parse_number(argv[i], &cicType))
- {
+ if (i >= argc || !parse_number(argv[i], &cicType)) {
fputs("error: expected number after -cic\n", stderr);
goto bad_args;
}
- }
- else if (strcmp(argv[i], "-help") == 0)
- {
+ } else if (strcmp(argv[i], "-help") == 0) {
usage(argv[0]);
return 0;
- }
- else
- {
+ } else {
fprintf(stderr, "unknown option %s\n", argv[i]);
goto bad_args;
}
- }
- else
- {
+ } else {
if (inputFileName == NULL)
inputFileName = argv[i];
else if (outputFileName == NULL)
outputFileName = argv[i];
- else
- {
+ else {
fputs("error: too many parameters specified\n", stderr);
goto bad_args;
}
}
}
- if (inputFileName == NULL)
- {
+ if (inputFileName == NULL) {
fputs("error: no input file specified\n", stderr);
goto bad_args;
}
- if (outputFileName == NULL)
- {
+ if (outputFileName == NULL) {
fputs("error: no output file specified\n", stderr);
goto bad_args;
}
- if (cicType == -1)
- {
+ if (cicType == -1) {
fputs("error: no CIC type specified\n", stderr);
goto bad_args;
}
diff --git a/tools/buildtools/elf32.c b/tools/buildtools/elf32.c
index f5dcafc0d..7540406fb 100644
--- a/tools/buildtools/elf32.c
+++ b/tools/buildtools/elf32.c
@@ -5,36 +5,23 @@
#include "elf32.h"
-static uint16_t read16_le(const uint8_t *data)
-{
- return data[0] << 0
- | data[1] << 8;
+static uint16_t read16_le(const uint8_t* data) {
+ return data[0] << 0 | data[1] << 8;
}
-static uint32_t read32_le(const uint8_t *data)
-{
- return data[0] << 0
- | data[1] << 8
- | data[2] << 16
- | data[3] << 24;
+static uint32_t read32_le(const uint8_t* data) {
+ return data[0] << 0 | data[1] << 8 | data[2] << 16 | data[3] << 24;
}
-static uint16_t read16_be(const uint8_t *data)
-{
- return data[0] << 8
- | data[1] << 0;
+static uint16_t read16_be(const uint8_t* data) {
+ return data[0] << 8 | data[1] << 0;
}
-static uint32_t read32_be(const uint8_t *data)
-{
- return data[0] << 24
- | data[1] << 16
- | data[2] << 8
- | data[3] << 0;
+static uint32_t read32_be(const uint8_t* data) {
+ return data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3] << 0;
}
-static const void *get_section_header(struct Elf32 *e, int secnum)
-{
+static const void* get_section_header(struct Elf32* e, int secnum) {
size_t secoffset = e->shoff + secnum * 0x28;
if (secnum >= e->shnum || secoffset >= e->dataSize)
@@ -42,76 +29,70 @@ static const void *get_section_header(struct Elf32 *e, int secnum)
return e->data + secoffset;
}
-static const void *get_section_contents(struct Elf32 *e, int secnum)
-{
+static const void* get_section_contents(struct Elf32* e, int secnum) {
size_t secoffset = e->shoff + secnum * 0x28;
size_t dataoffset;
-
+
if (secnum >= e->shnum || secoffset >= e->dataSize)
return NULL;
dataoffset = e->read32(e->data + secoffset + 0x10);
return e->data + dataoffset;
}
-static bool verify_magic(const uint8_t *data)
-{
+static bool verify_magic(const uint8_t* data) {
return (data[0] == 0x7F && data[1] == 'E' && data[2] == 'L' && data[3] == 'F');
}
-bool elf32_init(struct Elf32 *e, const void *data, size_t size)
-{
+bool elf32_init(struct Elf32* e, const void* data, size_t size) {
unsigned int i;
e->data = data;
e->dataSize = size;
if (size < 0x34)
- return false; // not big enough for header
+ return false; // not big enough for header
if (!verify_magic(e->data))
return false;
if (e->data[4] != 1)
- return false; // must be 32-bit
+ return false; // must be 32-bit
e->endian = e->data[5];
- switch (e->endian)
- {
- case 1:
- e->read16 = read16_le;
- e->read32 = read32_le;
- break;
- case 2:
- e->read16 = read16_be;
- e->read32 = read32_be;
- break;
- default:
- return false;
+ switch (e->endian) {
+ case 1:
+ e->read16 = read16_le;
+ e->read32 = read32_le;
+ break;
+ case 2:
+ e->read16 = read16_be;
+ e->read32 = read32_be;
+ break;
+ default:
+ return false;
}
- e->type = e->read16(e->data + 0x10);
- e->machine = e->read16(e->data + 0x12);
- e->version = e->data[6];
- e->entry = e->read32(e->data + 0x18);
- e->phoff = e->read32(e->data + 0x1C);
- e->shoff = e->read32(e->data + 0x20);
- e->ehsize = e->read16(e->data + 0x28);
+ e->type = e->read16(e->data + 0x10);
+ e->machine = e->read16(e->data + 0x12);
+ e->version = e->data[6];
+ e->entry = e->read32(e->data + 0x18);
+ e->phoff = e->read32(e->data + 0x1C);
+ e->shoff = e->read32(e->data + 0x20);
+ e->ehsize = e->read16(e->data + 0x28);
e->phentsize = e->read16(e->data + 0x2A);
- e->phnum = e->read16(e->data + 0x2C);
+ e->phnum = e->read16(e->data + 0x2C);
e->shentsize = e->read16(e->data + 0x2E);
- e->shnum = e->read16(e->data + 0x30);
- e->shstrndx = e->read16(e->data + 0x32);
-
+ e->shnum = e->read16(e->data + 0x30);
+ e->shstrndx = e->read16(e->data + 0x32);
+
// find symbol table section
e->symtabndx = -1;
- for (i = 0; i < e->shnum; i++)
- {
- const uint8_t *sechdr = get_section_header(e, i);
+ for (i = 0; i < e->shnum; i++) {
+ const uint8_t* sechdr = get_section_header(e, i);
uint32_t type = e->read32(sechdr + 0x04);
-
- if (type == SHT_SYMTAB)
- {
+
+ if (type == SHT_SYMTAB) {
e->symtabndx = i;
break;
}
@@ -119,59 +100,53 @@ bool elf32_init(struct Elf32 *e, const void *data, size_t size)
// find .strtab section
e->strtabndx = -1;
- for (i = 0; i < e->shnum; i++)
- {
- const uint8_t *sechdr = get_section_header(e, i);
+ for (i = 0; i < e->shnum; i++) {
+ const uint8_t* sechdr = get_section_header(e, i);
uint32_t type = e->read32(sechdr + 0x04);
-
- if (type == SHT_STRTAB)
- {
- const char *strings = get_section_contents(e, e->shstrndx);
- const char *secname = strings + e->read32(sechdr + 0);
-
- if (strcmp(secname, ".strtab") == 0)
- {
+
+ if (type == SHT_STRTAB) {
+ const char* strings = get_section_contents(e, e->shstrndx);
+ const char* secname = strings + e->read32(sechdr + 0);
+
+ if (strcmp(secname, ".strtab") == 0) {
e->strtabndx = i;
break;
}
}
}
-
+
e->numsymbols = 0;
- if (e->symtabndx != -1)
- {
- const uint8_t *sechdr = get_section_header(e, e->symtabndx);
- //const uint8_t *symtab = get_section_contents(e, e->symtabndx);
-
+ if (e->symtabndx != -1) {
+ const uint8_t* sechdr = get_section_header(e, e->symtabndx);
+ // const uint8_t *symtab = get_section_contents(e, e->symtabndx);
+
e->numsymbols = e->read32(sechdr + 0x14) / e->read32(sechdr + 0x24);
}
if (e->shoff + e->shstrndx * 0x28 >= e->dataSize)
return false;
-
+
return true;
}
-bool elf32_get_section(struct Elf32 *e, struct Elf32_Section *sec, int secnum)
-{
- const uint8_t *sechdr = get_section_header(e, secnum);
- const char *strings = get_section_contents(e, e->shstrndx);
+bool elf32_get_section(struct Elf32* e, struct Elf32_Section* sec, int secnum) {
+ const uint8_t* sechdr = get_section_header(e, secnum);
+ const char* strings = get_section_contents(e, e->shstrndx);
- sec->name = strings + e->read32(sechdr + 0);
- sec->type = e->read32(sechdr + 0x04);
- sec->flags = e->read32(sechdr + 0x08);
- sec->addr = e->read32(sechdr + 0x0C);
- sec->offset = e->read32(sechdr + 0x10);
+ sec->name = strings + e->read32(sechdr + 0);
+ sec->type = e->read32(sechdr + 0x04);
+ sec->flags = e->read32(sechdr + 0x08);
+ sec->addr = e->read32(sechdr + 0x0C);
+ sec->offset = e->read32(sechdr + 0x10);
sec->addralign = e->read32(sechdr + 0x20);
- sec->entsize = e->read32(sechdr + 0x24);
+ sec->entsize = e->read32(sechdr + 0x24);
return true;
}
-bool elf32_get_symbol(struct Elf32 *e, struct Elf32_Symbol *sym, int symnum)
-{
- const uint8_t *sechdr;
- const uint8_t *symtab;
- const char *strings;
+bool elf32_get_symbol(struct Elf32* e, struct Elf32_Symbol* sym, int symnum) {
+ const uint8_t* sechdr;
+ const uint8_t* symtab;
+ const char* strings;
int symcount;
if (e->symtabndx == -1)
diff --git a/tools/buildtools/elf32.h b/tools/buildtools/elf32.h
index 666f6e917..0dae635f2 100644
--- a/tools/buildtools/elf32.h
+++ b/tools/buildtools/elf32.h
@@ -1,22 +1,22 @@
-#ifndef _ELF_H_
-#define _ELF_H_
+#ifndef ELF32_H
+#define ELF32_H
-enum
-{
+#include
+#include
+
+enum {
ELF_MACHINE_NONE = 0,
ELF_MACHINE_MIPS = 8,
};
-enum
-{
+enum {
ELF_TYPE_RELOC = 1,
ELF_TYPE_EXEC,
ELF_TYPE_SHARED,
ELF_TYPE_CORE,
};
-struct Elf32
-{
+struct Elf32 {
uint8_t endian;
uint16_t type;
uint16_t machine;
@@ -34,23 +34,21 @@ struct Elf32
int strtabndx;
int numsymbols;
- const uint8_t *data;
+ const uint8_t* data;
size_t dataSize;
- uint16_t (*read16)(const uint8_t *);
- uint32_t (*read32)(const uint8_t *);
+ uint16_t (*read16)(const uint8_t*);
+ uint32_t (*read32)(const uint8_t*);
};
-enum
-{
+enum {
SHT_NULL = 0,
SHT_PROGBITS,
SHT_SYMTAB,
SHT_STRTAB,
};
-struct Elf32_Section
-{
- const char *name;
+struct Elf32_Section {
+ const char* name;
uint32_t type;
uint32_t flags;
uint32_t addr;
@@ -59,14 +57,13 @@ struct Elf32_Section
uint32_t entsize;
};
-struct Elf32_Symbol
-{
- const char *name;
+struct Elf32_Symbol {
+ const char* name;
uint32_t value;
};
-bool elf32_init(struct Elf32 *e, const void *data, size_t size);
-bool elf32_get_section(struct Elf32 *e, struct Elf32_Section *sec, int secnum);
-bool elf32_get_symbol(struct Elf32 *e, struct Elf32_Symbol *sym, int symnum);
+bool elf32_init(struct Elf32* e, const void* data, size_t size);
+bool elf32_get_section(struct Elf32* e, struct Elf32_Section* sec, int secnum);
+bool elf32_get_symbol(struct Elf32* e, struct Elf32_Symbol* sym, int symnum);
#endif
diff --git a/tools/buildtools/makeromfs.c b/tools/buildtools/makeromfs.c
index a61c8e019..198f8adc5 100644
--- a/tools/buildtools/makeromfs.c
+++ b/tools/buildtools/makeromfs.c
@@ -12,18 +12,16 @@
#define ROM_SIZE 0x02000000
-enum InputObjType
-{
+enum InputObjType {
OBJ_NULL,
OBJ_FILE,
OBJ_TABLE,
};
-struct InputFile
-{
+struct InputFile {
enum InputObjType type;
- const char *name;
- uint8_t *data;
+ const char* name;
+ uint8_t* data;
size_t size;
unsigned int valign;
@@ -33,73 +31,58 @@ struct InputFile
uint32_t physEnd;
};
-static struct InputFile *g_inputFiles = NULL;
+static struct InputFile* g_inputFiles = NULL;
static int g_inputFilesCount = 0;
-static unsigned int round_up(unsigned int num, unsigned int multiple)
-{
+static unsigned int round_up(unsigned int num, unsigned int multiple) {
num += multiple - 1;
return num / multiple * multiple;
}
-static bool is_yaz0_header(const uint8_t *data)
-{
- return data[0] == 'Y'
- && data[1] == 'a'
- && data[2] == 'z'
- && data[3] == '0';
+static bool is_yaz0_header(const uint8_t* data) {
+ return data[0] == 'Y' && data[1] == 'a' && data[2] == 'z' && data[3] == '0';
}
-static void compute_offsets(void)
-{
+static void compute_offsets(void) {
size_t physOffset = 0;
size_t virtOffset = 0;
int i;
- for (i = 0; i < g_inputFilesCount; i++)
- {
+ for (i = 0; i < g_inputFilesCount; i++) {
bool compressed = false;
- if (g_inputFiles[i].type == OBJ_FILE)
- {
+ if (g_inputFiles[i].type == OBJ_FILE) {
if (is_yaz0_header(g_inputFiles[i].data))
compressed = true;
- }
- else if (g_inputFiles[i].type == OBJ_TABLE)
- {
+ } else if (g_inputFiles[i].type == OBJ_TABLE) {
g_inputFiles[i].size = g_inputFilesCount * 16;
}
virtOffset = round_up(virtOffset, g_inputFiles[i].valign);
- if (g_inputFiles[i].type == OBJ_NULL)
- {
+ if (g_inputFiles[i].type == OBJ_NULL) {
g_inputFiles[i].virtStart = 0;
- g_inputFiles[i].virtEnd = 0;
+ g_inputFiles[i].virtEnd = 0;
g_inputFiles[i].physStart = 0;
- g_inputFiles[i].physEnd = 0;
- }
- else if (compressed)
- {
+ g_inputFiles[i].physEnd = 0;
+ } else if (compressed) {
size_t compSize = round_up(g_inputFiles[i].size, 16);
size_t uncompSize = util_read_uint32_be(g_inputFiles[i].data + 4);
g_inputFiles[i].virtStart = virtOffset;
- g_inputFiles[i].virtEnd = virtOffset + uncompSize;
+ g_inputFiles[i].virtEnd = virtOffset + uncompSize;
g_inputFiles[i].physStart = physOffset;
- g_inputFiles[i].physEnd = physOffset + compSize;
+ g_inputFiles[i].physEnd = physOffset + compSize;
physOffset += compSize;
virtOffset += uncompSize;
- }
- else
- {
+ } else {
size_t size = g_inputFiles[i].size;
g_inputFiles[i].virtStart = virtOffset;
- g_inputFiles[i].virtEnd = virtOffset + size;
+ g_inputFiles[i].virtEnd = virtOffset + size;
g_inputFiles[i].physStart = physOffset;
- g_inputFiles[i].physEnd = 0;
+ g_inputFiles[i].physEnd = 0;
physOffset += size;
virtOffset += size;
@@ -107,17 +90,15 @@ static void compute_offsets(void)
}
}
-static void build_rom(const char *filename)
-{
- uint8_t *romData = calloc(ROM_SIZE, 1);
+static void build_rom(const char* filename) {
+ uint8_t* romData = calloc(ROM_SIZE, 1);
size_t pos = 0;
int i;
int j;
uint32_t chksum[2];
- FILE *outFile;
+ FILE* outFile;
- for (i = 0; i < g_inputFilesCount; i++)
- {
+ for (i = 0; i < g_inputFilesCount; i++) {
size_t size = g_inputFiles[i].size;
if (pos + round_up(size, 16) > ROM_SIZE)
@@ -125,34 +106,31 @@ static void build_rom(const char *filename)
assert(pos % 16 == 0);
- switch (g_inputFiles[i].type)
- {
- case OBJ_FILE:
- // write file data
- memcpy(romData + pos, g_inputFiles[i].data, size);
- pos += round_up(size, 16);
+ switch (g_inputFiles[i].type) {
+ case OBJ_FILE:
+ // write file data
+ memcpy(romData + pos, g_inputFiles[i].data, size);
+ pos += round_up(size, 16);
- free(g_inputFiles[i].data);
- break;
- case OBJ_TABLE:
- for (j = 0; j < g_inputFilesCount; j++)
- {
- util_write_uint32_be(romData + pos + 0, g_inputFiles[j].virtStart);
- util_write_uint32_be(romData + pos + 4, g_inputFiles[j].virtEnd);
- util_write_uint32_be(romData + pos + 8, g_inputFiles[j].physStart);
- util_write_uint32_be(romData + pos + 12, g_inputFiles[j].physEnd);
+ free(g_inputFiles[i].data);
+ break;
+ case OBJ_TABLE:
+ for (j = 0; j < g_inputFilesCount; j++) {
+ util_write_uint32_be(romData + pos + 0, g_inputFiles[j].virtStart);
+ util_write_uint32_be(romData + pos + 4, g_inputFiles[j].virtEnd);
+ util_write_uint32_be(romData + pos + 8, g_inputFiles[j].physStart);
+ util_write_uint32_be(romData + pos + 12, g_inputFiles[j].physEnd);
- pos += 16;
- }
- break;
- case OBJ_NULL:
- break;
+ pos += 16;
+ }
+ break;
+ case OBJ_NULL:
+ break;
}
}
// Pad the rest of the ROM
- while (pos < ROM_SIZE)
- {
+ while (pos < ROM_SIZE) {
// This is such a weird thing to pad with. Whatever, Nintendo.
romData[pos] = pos & 0xFF;
pos++;
@@ -173,8 +151,7 @@ static void build_rom(const char *filename)
free(romData);
}
-static struct InputFile *new_file(void)
-{
+static struct InputFile* new_file(void) {
int index = g_inputFilesCount;
g_inputFilesCount++;
@@ -186,15 +163,13 @@ static struct InputFile *new_file(void)
}
// null terminates the current token and returns a pointer to the next token
-static char *token_split(char *str)
-{
- while (!isspace(*str))
- {
+static char* token_split(char* str) {
+ while (!isspace(*str)) {
if (*str == 0)
- return str; // end of string
+ return str; // end of string
str++;
}
- *str = 0; // terminate token
+ *str = 0; // terminate token
str++;
// skip remaining whitespace
@@ -204,104 +179,94 @@ static char *token_split(char *str)
}
// null terminates the current line and returns a pointer to the next line
-static char *line_split(char *str)
-{
- while (*str != '\n')
- {
+static char* line_split(char* str) {
+ while (*str != '\n') {
if (*str == 0)
- return str; // end of string
+ return str; // end of string
str++;
}
- *str = 0; // terminate line
+ *str = 0; // terminate line
return str + 1;
}
-static void parse_line(char *line, int lineNum)
-{
- char *token = line;
+static void parse_line(char* line, int lineNum) {
+ char* token = line;
int i = 0;
- char *filename = NULL;
+ char* filename = NULL;
enum InputObjType type = -1;
int valign = 1;
- struct InputFile *file;
+ struct InputFile* file;
// iterate through each token
- while (token[0] != 0)
- {
- char *nextToken = token_split(token);
+ while (token[0] != 0) {
+ char* nextToken = token_split(token);
- if (token[0] == '#') // comment - ignore rest of line
+ if (token[0] == '#') // comment - ignore rest of line
return;
- switch (i)
- {
- case 0:
- if (strcmp(token, "file") == 0)
- type = OBJ_FILE;
- else if (strcmp(token, "filetable") == 0)
- type = OBJ_TABLE;
- else if (strcmp(token, "null") == 0)
- type = OBJ_NULL;
- else
- util_fatal_error("unknown object type '%s' on line %i", token, lineNum);
- break;
- case 1:
- filename = token;
- break;
- case 2:
- {
+ switch (i) {
+ case 0:
+ if (strcmp(token, "file") == 0)
+ type = OBJ_FILE;
+ else if (strcmp(token, "filetable") == 0)
+ type = OBJ_TABLE;
+ else if (strcmp(token, "null") == 0)
+ type = OBJ_NULL;
+ else
+ util_fatal_error("unknown object type '%s' on line %i", token, lineNum);
+ break;
+ case 1:
+ filename = token;
+ break;
+ case 2: {
int n;
if (sscanf(token, "align(%i)", &n) == 1)
valign = n;
else
goto junk;
- }
- break;
- default:
- junk:
- util_fatal_error("junk '%s' on line %i", token, lineNum);
- break;
+ } break;
+ default:
+ junk:
+ util_fatal_error("junk '%s' on line %i", token, lineNum);
+ break;
}
token = nextToken;
i++;
}
- if (i == 0) // empty line
+ if (i == 0) // empty line
return;
file = new_file();
file->valign = valign;
- switch (type)
- {
- case OBJ_FILE:
- if (filename == NULL)
- util_fatal_error("no filename specified on line %i", lineNum);
- file->type = OBJ_FILE;
- file->data = util_read_whole_file(filename, &file->size);
- break;
- case OBJ_TABLE:
- file->type = OBJ_TABLE;
- break;
- case OBJ_NULL:
- file->type = OBJ_NULL;
- file->size = 0;
- break;
+ switch (type) {
+ case OBJ_FILE:
+ if (filename == NULL)
+ util_fatal_error("no filename specified on line %i", lineNum);
+ file->type = OBJ_FILE;
+ file->data = util_read_whole_file(filename, &file->size);
+ break;
+ case OBJ_TABLE:
+ file->type = OBJ_TABLE;
+ break;
+ case OBJ_NULL:
+ file->type = OBJ_NULL;
+ file->size = 0;
+ break;
}
}
-static void parse_list(char *list)
-{
- char *line = list;
+static void parse_list(char* list) {
+ char* line = list;
int lineNum = 1;
// iterate through each line
- while (line[0] != 0)
- {
- char *nextLine = line_split(line);
+ while (line[0] != 0) {
+ char* nextLine = line_split(line);
parse_line(line, lineNum);
@@ -310,8 +275,7 @@ static void parse_list(char *list)
}
}
-static void usage(const char *execName)
-{
+static void usage(const char* execName) {
printf("usage: %s FILE_LIST OUTPUT_FILE\n"
"where FILE_LIST is a list of files to include\n"
"and OUTPUT_FILE is the name of the output ROM\n"
@@ -319,12 +283,10 @@ static void usage(const char *execName)
execName);
}
-int main(int argc, char **argv)
-{
- char *list;
+int main(int argc, char** argv) {
+ char* list;
- if (argc != 3)
- {
+ if (argc != 3) {
puts("invalid args");
usage(argv[0]);
return 1;
diff --git a/tools/buildtools/n64chksum.c b/tools/buildtools/n64chksum.c
index 64cfd3aad..add34b029 100644
--- a/tools/buildtools/n64chksum.c
+++ b/tools/buildtools/n64chksum.c
@@ -6,12 +6,11 @@
#include "n64chksum.h"
#include "util.h"
-//Based on uCON64's N64 checksum algorithm by Andreas Sterbenz
+// Based on uCON64's N64 checksum algorithm by Andreas Sterbenz
#define ROL(i, b) (((i) << (b)) | ((i) >> (32 - (b))))
-bool n64chksum_calculate(const uint8_t *romData, int cicType, uint32_t *chksum)
-{
+bool n64chksum_calculate(const uint8_t* romData, int cicType, uint32_t* chksum) {
unsigned int seed;
unsigned int t1, t2, t3, t4, t5, t6;
size_t pos;
@@ -20,29 +19,27 @@ bool n64chksum_calculate(const uint8_t *romData, int cicType, uint32_t *chksum)
const size_t END = START + 0x100000;
// determine initial seed
- switch (cicType)
- {
- case 6101:
- case 6102:
- seed = 0xF8CA4DDC;
- break;
- case 6103:
- seed = 0xA3886759;
- break;
- case 6105:
- seed = 0xDF26F436;
- break;
- case 6106:
- seed = 0x1FEA617A;
- break;
- default:
- return false; // unknown CIC type
+ switch (cicType) {
+ case 6101:
+ case 6102:
+ seed = 0xF8CA4DDC;
+ break;
+ case 6103:
+ seed = 0xA3886759;
+ break;
+ case 6105:
+ seed = 0xDF26F436;
+ break;
+ case 6106:
+ seed = 0x1FEA617A;
+ break;
+ default:
+ return false; // unknown CIC type
}
t1 = t2 = t3 = t4 = t5 = t6 = seed;
- for (pos = START; pos < END; pos += 4)
- {
+ for (pos = START; pos < END; pos += 4) {
unsigned int d = util_read_uint32_be(romData + pos);
unsigned int r = ROL(d, (d & 0x1F));
@@ -65,18 +62,13 @@ bool n64chksum_calculate(const uint8_t *romData, int cicType, uint32_t *chksum)
t1 += t5 ^ d;
}
- if (cicType == 6103)
- {
+ if (cicType == 6103) {
chksum[0] = (t6 ^ t4) + t3;
chksum[1] = (t5 ^ t2) + t1;
- }
- else if (cicType == 6106)
- {
+ } else if (cicType == 6106) {
chksum[0] = (t6 * t4) + t3;
chksum[1] = (t5 * t2) + t1;
- }
- else
- {
+ } else {
chksum[0] = t6 ^ t4 ^ t3;
chksum[1] = t5 ^ t2 ^ t1;
}
diff --git a/tools/buildtools/n64chksum.h b/tools/buildtools/n64chksum.h
index 0ca13a819..5cea0edc8 100644
--- a/tools/buildtools/n64chksum.h
+++ b/tools/buildtools/n64chksum.h
@@ -1,6 +1,6 @@
-#ifndef _N64CHKSUM_H_
-#define _N64CHKSUM_H_
+#ifndef N64CHKSUM_H
+#define N64CHKSUM_H
-bool n64chksum_calculate(const uint8_t *romData, int cicType, uint32_t *chksum);
+bool n64chksum_calculate(const uint8_t* romData, int cicType, uint32_t* chksum);
#endif
diff --git a/tools/buildtools/spec.h b/tools/buildtools/spec.h
index aeabd07d1..01c6b3d84 100644
--- a/tools/buildtools/spec.h
+++ b/tools/buildtools/spec.h
@@ -55,9 +55,9 @@ typedef struct Segment {
void parse_rom_spec(char* spec, struct Segment** segments, int* segment_count);
-bool get_single_segment_by_name(struct Segment* dstSegment, char *spec, const char *segmentName);
+bool get_single_segment_by_name(struct Segment* dstSegment, char* spec, const char* segmentName);
-void free_single_segment_elements(struct Segment *segment);
+void free_single_segment_elements(struct Segment* segment);
void free_rom_spec(struct Segment* segments, int segment_count);
diff --git a/tools/buildtools/util.c b/tools/buildtools/util.c
index 824e089e0..941ac1ffd 100644
--- a/tools/buildtools/util.c
+++ b/tools/buildtools/util.c
@@ -8,8 +8,7 @@
#include "util.h"
// displays an error message and exits
-void util_fatal_error(const char *msgfmt, ...)
-{
+void util_fatal_error(const char* msgfmt, ...) {
va_list args;
fputs(ERRMSG_START, stderr);
@@ -24,10 +23,9 @@ void util_fatal_error(const char *msgfmt, ...)
}
// reads a whole file into memory, and returns a malloc'd pointer to the data.
-void *util_read_whole_file(const char *filename, size_t *pSize)
-{
- FILE *file = fopen(filename, "rb");
- uint8_t *buffer;
+void* util_read_whole_file(const char* filename, size_t* pSize) {
+ FILE* file = fopen(filename, "rb");
+ uint8_t* buffer;
size_t size;
if (file == NULL)
@@ -56,9 +54,8 @@ void *util_read_whole_file(const char *filename, size_t *pSize)
}
// writes data to file
-void util_write_whole_file(const char *filename, const void *data, size_t size)
-{
- FILE *file = fopen(filename, "wb");
+void util_write_whole_file(const char* filename, const void* data, size_t size) {
+ FILE* file = fopen(filename, "wb");
if (file == NULL)
util_fatal_error("failed to open file '%s' for writing: %s", filename, strerror(errno));
@@ -69,17 +66,12 @@ void util_write_whole_file(const char *filename, const void *data, size_t size)
fclose(file);
}
-uint32_t util_read_uint32_be(const uint8_t *data)
-{
- return data[0] << 24
- | data[1] << 16
- | data[2] << 8
- | data[3] << 0;
+uint32_t util_read_uint32_be(const uint8_t* data) {
+ return data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3] << 0;
}
// writes a big-endian 32-bit integer
-void util_write_uint32_be(uint8_t *data, uint32_t val)
-{
+void util_write_uint32_be(uint8_t* data, uint32_t val) {
data[0] = val >> 24;
data[1] = val >> 16;
data[2] = val >> 8;
diff --git a/tools/buildtools/util.h b/tools/buildtools/util.h
index ed692bf53..d07340706 100644
--- a/tools/buildtools/util.h
+++ b/tools/buildtools/util.h
@@ -13,12 +13,12 @@ __attribute__((format(printf, 1, 2), noreturn))
#endif
void util_fatal_error(const char *msgfmt, ...);
-void *util_read_whole_file(const char *filename, size_t *pSize);
+void* util_read_whole_file(const char* filename, size_t* pSize);
-void util_write_whole_file(const char *filename, const void *data, size_t size);
+void util_write_whole_file(const char* filename, const void* data, size_t size);
-uint32_t util_read_uint32_be(const uint8_t *data);
+uint32_t util_read_uint32_be(const uint8_t* data);
-void util_write_uint32_be(uint8_t *data, uint32_t val);
+void util_write_uint32_be(uint8_t* data, uint32_t val);
#endif
diff --git a/tools/buildtools/yaz0.c b/tools/buildtools/yaz0.c
index 5b3156e44..346b37e79 100644
--- a/tools/buildtools/yaz0.c
+++ b/tools/buildtools/yaz0.c
@@ -10,31 +10,25 @@
// src points to the yaz0 source data (to the "real" source data, not at the header!)
// dst points to a buffer uncompressedSize bytes large (you get uncompressedSize from
// the second 4 bytes in the Yaz0 header).
-void yaz0_decode(uint8_t* src, uint8_t* dst, int uncompressedSize)
-{
- int srcPlace = 0, dstPlace = 0; // current read/write positions
+void yaz0_decode(uint8_t* src, uint8_t* dst, int uncompressedSize) {
+ int srcPlace = 0, dstPlace = 0; // current read/write positions
- unsigned int validBitCount = 0; // number of valid bits left in "code" byte
+ unsigned int validBitCount = 0; // number of valid bits left in "code" byte
uint8_t currCodeByte;
- while (dstPlace < uncompressedSize)
- {
+ while (dstPlace < uncompressedSize) {
// read new "code" byte if the current one is used up
- if (validBitCount == 0)
- {
+ if (validBitCount == 0) {
currCodeByte = src[srcPlace];
++srcPlace;
validBitCount = 8;
}
- if ((currCodeByte & 0x80) != 0)
- {
+ if ((currCodeByte & 0x80) != 0) {
// straight copy
dst[dstPlace] = src[srcPlace];
dstPlace++;
srcPlace++;
- }
- else
- {
+ } else {
// RLE part
uint8_t byte1 = src[srcPlace];
uint8_t byte2 = src[srcPlace + 1];
@@ -44,19 +38,15 @@ void yaz0_decode(uint8_t* src, uint8_t* dst, int uncompressedSize)
unsigned int copySource = dstPlace - (dist + 1);
unsigned int numBytes = byte1 >> 4;
- if (numBytes == 0)
- {
+ if (numBytes == 0) {
numBytes = src[srcPlace] + 0x12;
srcPlace++;
- }
- else
- {
+ } else {
numBytes += 2;
}
// copy run
- for (unsigned int i = 0; i < numBytes; ++i)
- {
+ for (unsigned int i = 0; i < numBytes; ++i) {
dst[dstPlace] = dst[copySource];
copySource++;
dstPlace++;
@@ -77,8 +67,7 @@ typedef uint8_t uint8_t;
#define MAX_RUNLEN (0xFF + 0x12)
// simple and straight encoding scheme for Yaz0
-static uint32_t simpleEnc(uint8_t *src, int size, int pos, uint32_t *pMatchPos)
-{
+static uint32_t simpleEnc(uint8_t* src, int size, int pos, uint32_t* pMatchPos) {
int numBytes = 1;
int matchPos = 0;
@@ -92,17 +81,14 @@ static uint32_t simpleEnc(uint8_t *src, int size, int pos, uint32_t *pMatchPos)
if (end > MAX_RUNLEN)
end = MAX_RUNLEN;
- for (int i = startPos; i < pos; i++)
- {
+ for (int i = startPos; i < pos; i++) {
int j;
- for (j = 0; j < end; j++)
- {
+ for (j = 0; j < end; j++) {
if (src[i + j] != src[j + pos])
break;
}
- if (j > numBytes)
- {
+ if (j > numBytes) {
numBytes = j;
matchPos = i;
}
@@ -117,8 +103,7 @@ static uint32_t simpleEnc(uint8_t *src, int size, int pos, uint32_t *pMatchPos)
}
// a lookahead encoding scheme for ngc Yaz0
-static uint32_t nintendoEnc(uint8_t *src, int size, int pos, uint32_t *pMatchPos)
-{
+static uint32_t nintendoEnc(uint8_t* src, int size, int pos, uint32_t* pMatchPos) {
uint32_t numBytes = 1;
static uint32_t numBytes1;
static uint32_t matchPos;
@@ -128,8 +113,7 @@ static uint32_t nintendoEnc(uint8_t *src, int size, int pos, uint32_t *pMatchPos
// was determined by look-ahead try.
// so just use it. this is not the best optimization,
// but nintendo's choice for speed.
- if (prevFlag == 1)
- {
+ if (prevFlag == 1) {
*pMatchPos = matchPos;
prevFlag = 0;
return numBytes1;
@@ -140,13 +124,11 @@ static uint32_t nintendoEnc(uint8_t *src, int size, int pos, uint32_t *pMatchPos
*pMatchPos = matchPos;
// if this position is RLE encoded, then compare to copying 1 byte and next position(pos+1) encoding
- if (numBytes >= 3)
- {
+ if (numBytes >= 3) {
numBytes1 = simpleEnc(src, size, pos + 1, &matchPos);
// if the next position encoding is +2 longer than current position, choose it.
// this does not guarantee the best optimization, but fairly good optimization with speed.
- if (numBytes1 >= numBytes + 2)
- {
+ if (numBytes1 >= numBytes + 2) {
numBytes = 1;
prevFlag = 1;
}
@@ -154,8 +136,7 @@ static uint32_t nintendoEnc(uint8_t *src, int size, int pos, uint32_t *pMatchPos
return numBytes;
}
-int yaz0_encode(uint8_t *src, uint8_t *dst, int srcSize)
-{
+int yaz0_encode(uint8_t* src, uint8_t* dst, int srcSize) {
int srcPos = 0;
int dstPos = 0;
int bufPos = 0;
@@ -163,30 +144,26 @@ int yaz0_encode(uint8_t *src, uint8_t *dst, int srcSize)
uint8_t buf[24]; // 8 codes * 3 bytes maximum
uint32_t validBitCount = 0; // number of valid bits left in "code" byte
- uint8_t currCodeByte = 0; // a bitfield, set bits meaning copy, unset meaning RLE
+ uint8_t currCodeByte = 0; // a bitfield, set bits meaning copy, unset meaning RLE
- while (srcPos < srcSize)
- {
+ while (srcPos < srcSize) {
uint32_t numBytes;
uint32_t matchPos;
numBytes = nintendoEnc(src, srcSize, srcPos, &matchPos);
- if (numBytes < 3)
- {
+ if (numBytes < 3) {
// straight copy
buf[bufPos] = src[srcPos];
bufPos++;
srcPos++;
- //set flag for straight copy
+ // set flag for straight copy
currCodeByte |= (0x80 >> validBitCount);
- }
- else
- {
- //RLE part
+ } else {
+ // RLE part
uint32_t dist = srcPos - matchPos - 1;
uint8_t byte1, byte2, byte3;
- if (numBytes >= 0x12) // 3 byte encoding
+ if (numBytes >= 0x12) // 3 byte encoding
{
byte1 = 0 | (dist >> 8);
byte2 = dist & 0xFF;
@@ -197,8 +174,7 @@ int yaz0_encode(uint8_t *src, uint8_t *dst, int srcSize)
numBytes = MAX_RUNLEN;
byte3 = numBytes - 0x12;
buf[bufPos++] = byte3;
- }
- else // 2 byte encoding
+ } else // 2 byte encoding
{
byte1 = ((numBytes - 2) << 4) | (dist >> 8);
byte2 = dist & 0xFF;
@@ -211,8 +187,7 @@ int yaz0_encode(uint8_t *src, uint8_t *dst, int srcSize)
validBitCount++;
// write eight codes
- if (validBitCount == 8)
- {
+ if (validBitCount == 8) {
dst[dstPos++] = currCodeByte;
for (int j = 0; j < bufPos; j++)
dst[dstPos++] = buf[j];
@@ -223,8 +198,7 @@ int yaz0_encode(uint8_t *src, uint8_t *dst, int srcSize)
}
}
- if (validBitCount > 0)
- {
+ if (validBitCount > 0) {
dst[dstPos++] = currCodeByte;
for (int j = 0; j < bufPos; j++)
dst[dstPos++] = buf[j];
diff --git a/tools/buildtools/yaz0.h b/tools/buildtools/yaz0.h
index 0cc3703ec..97656aac5 100644
--- a/tools/buildtools/yaz0.h
+++ b/tools/buildtools/yaz0.h
@@ -1,10 +1,10 @@
-#ifndef _YAZ0_H_
-#define _YAZ0_H_
+#ifndef YAZ0_H
+#define YAZ0_H
-int yaz0_encode2(uint8_t *src, uint8_t *dest, int uncompressedSize);
+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);
+int yaz0_encode(uint8_t* src, uint8_t* dest, int srcSize);
-#endif // _YAZ0_H_
+#endif // YAZ0_H
diff --git a/tools/disasm/files.txt b/tools/disasm/files.txt
index c546c1f69..88fab2cab 100644
--- a/tools/disasm/files.txt
+++ b/tools/disasm/files.txt
@@ -428,9 +428,10 @@
0x8013EC10 : "z_rumble",
0x8013EE60 : "z_view",
0x80140260 : "z_vimode",
+ 0x80140CE0 : "code_80140CE0",
0x80140E80 : "code_80140E80",
0x801418B0 : "z_vismono",
- 0x801420C0 : "code_801420C0",
+ 0x801420C0 : "z_viszbuf",
0x80142440 : "z_vr_box",
0x801435A0 : "z_vr_box_draw",
0x80143A10 : "z_sram_NES",
@@ -439,7 +440,7 @@
0x8015E750 : "z_message_staff",
0x80160A90 : "z_player_call",
0x80160C00 : "z_shrink_window",
- 0x80161180 : "db_camera",
+ 0x80161180 : "cutscene_camera",
0x80163700 : "z_kaleido_manager",
0x801639A0 : "z_kaleido_scope_call",
0x80163C90 : "z_fbdemo_dlftbls",
@@ -452,8 +453,8 @@
0x8016FCF0 : "PreRender",
0x801727F0 : "TwoHeadGfxArena",
0x80172A00 : "TwoHeadArena",
- 0x80172BC0 : "code_80172BC0",
- 0x80172C30 : "audioMgr",
+ 0x80172BC0 : "audio_stop_all_sfx",
+ 0x80172C30 : "audio_thread_manager",
0x80173130 : "title_setup",
0x80173360 : "game",
0x80173BF0 : "gamealloc",
@@ -464,7 +465,9 @@
0x80174F10 : "padmgr",
0x80176280 : "sched",
0x80177390 : "speed_meter",
- 0x80178750 : "sys_cmpdma",
+ 0x801780F0 : "su_mtx",
+ 0x80178750 : "sys_cfb",
+ 0x80178AC0 : "sys_cmpdma",
0x80178F30 : "sys_initial_check",
0x80179300 : "sys_math",
0x801795F0 : "sys_math3d",
@@ -482,7 +485,7 @@
0x801877D0 : "audio_synthesis",
0x8018B0F0 : "audio_heap",
0x8018EB60 : "audio_load",
- 0x80192BE0 : "code_80192BE0",
+ 0x80192BE0 : "audio_thread",
0x80194710 : "audio_dcache",
0x80194790 : "aisetnextbuf",
0x80194930 : "audio_playback",
@@ -492,11 +495,11 @@
0x8019AEB0 : "[PADDING]",
0x8019AEC0 : "code_8019AEC0",
0x8019AF00 : "code_8019AF00",
- 0x801A4EB0 : "code_801A4EB0",
- 0x801A51F0 : "code_801A51F0",
+ 0x801A4EB0 : "voice_external",
+ 0x801A51F0 : "voice_internal",
0x801A5BC0 : "[PADDING]",
0x801A5BD0 : "code_801A5BD0",
- 0x801A7B10 : "code_801A7B10",
+ 0x801A7B10 : "sequence",
0x801A9B10 : "jpegutils",
0x801AA020 : "jpegdecoder",
0x801AA610 : "z_game_over",
@@ -506,7 +509,7 @@
0x801AAAB0 : "aspMain",
0x801ABAB0 : "gspS2DEX2.fifo",
0x801AD370 : "njpgdspMain",
- 0x801ADE60 : "",
+ 0x801ADE60 : "z_en_a_keep",
0x801ADEC0 : "z_en_item00",
0x801AE240 : "z_eff_blure",
0x801AE2F0 : "z_eff_shield_particle",
@@ -551,14 +554,14 @@
0x801C1D30 : "code_8012EC80",
0x801C2410 : "code_801C2410",
0x801C2650 : "z_scene",
- 0x801C2730 : "",
+ 0x801C2730 : "object_table",
0x801C3B60 : "z_scene_proc",
0x801C3CA0 : "z_scene_table",
0x801C5C50 : "z_schedule",
0x801C5CB0 : "z_skelanime",
0x801C5CD0 : "z_skin_matrix",
0x801C5D10 : "z_sub_s",
- 0x801C5DD0 : "z_vimode",
+ 0x801C5DD0 : "code_80140CE0",
0x801C5E30 : "z_vr_box",
0x801C5FC0 : "z_sram_NES",
0x801C6A70 : "z_message",
@@ -567,10 +570,11 @@
0x801D0B70 : "z_kaleido_manager",
0x801D0BB0 : "",
0x801D0C80 : "z_fbdemo",
+ 0x801D0CB0 : "z_fbdemo_fade",
0x801D0D00 : "z_fbdemo_circle",
0x801D0D50 : "z_play",
0x801D0D80 : "z_play_hireso",
- 0x801D14F0 : "audioMgr",
+ 0x801D14F0 : "audio_thread_manager",
0x801D1500 : "game",
0x801D1510 : "graph",
0x801D1520 : "main",
@@ -586,18 +590,18 @@
0x801D2E80 : "audio_data",
0x801D5FB0 : "audio_synthesis",
0x801D5FE0 : "audio_load",
- 0x801D5FF0 : "code_80192BE0",
+ 0x801D5FF0 : "audio_thread",
0x801D6010 : "aisetnextbuf",
0x801D6190 : "audio_effects",
0x801D61A0 : "audio_seqplayer",
0x801D6200 : "audio_dramStack",
0x801D6600 : "code_8019AF00",
- 0x801D8BE0 : "code_801A4EB0",
- 0x801D8E50 : "code_801A51F0",
+ 0x801D8BE0 : "voice_external",
+ 0x801D8E50 : "voice_internal",
0x801D9090 : "audio_sound_params",
0x801DB470 : "code_801A5BD0",
- 0x801DB4C0 : "code_801A7B10",
- 0x801DB4E0 : "audio_init_params",
+ 0x801DB4C0 : "sequence",
+ 0x801DB4E0 : "session_config",
# .rodata section
0x801DBDF0 : "z_en_item00",
@@ -648,14 +652,14 @@
0x801DF150 : "z_message",
0x801DF730 : "z_message_nes",
0x801DF860 : "z_message_staff",
- 0x801DF900 : "db_camera",
+ 0x801DF900 : "cutscene_camera",
0x801DF9C0 : "z_kaleido_manager",
0x801DF9E0 : "z_fbdemo_circle",
0x801DFA00 : "z_play",
0x801DFC50 : "z_play_hireso",
0x801DFC60 : "PreRender",
- 0x801DFC70 : "code_80172BC0",
- 0x801DFC80 : "audioMgr",
+ 0x801DFC70 : "audio_stop_all_sfx",
+ 0x801DFC80 : "audio_thread_manager",
0x801DFCC0 : "game",
0x801DFCE0 : "graph",
0x801DFD70 : "main",
@@ -670,15 +674,15 @@
0x801E0280 : "audio_synthesis",
0x801E02B0 : "audio_heap",
0x801E0300 : "audio_load",
- 0x801E0390 : "code_80192BE0",
+ 0x801E0390 : "audio_thread",
0x801E04E0 : "audio_playback",
0x801E0510 : "audio_effects",
0x801E0540 : "audio_seqplayer",
0x801E0BD0 : "code_8019AF00",
- 0x801E0EC0 : "code_801A51F0",
+ 0x801E0EC0 : "voice_internal",
0x801E1050 : "code_801A5BD0",
- 0x801E1070 : "code_801A7B10",
- 0x801E1100 : "audio_init_params",
+ 0x801E1070 : "sequence",
+ 0x801E1100 : "session_config",
0x801E1110 : "z_game_over",
0x801E1180 : "audio_tables",
0x801E1E80 : "aspMain",
@@ -719,7 +723,7 @@
0x801F6B00 : "z_message",
0x801F6B30 : "z_player_call",
0x801F6B40 : "z_shrink_window",
- 0x801F6B50 : "db_camera",
+ 0x801F6B50 : "cutscene_camera",
0x801F6BF0 : "z_kaleido_manager",
0x801F6C00 : "z_kaleido_scope_call",
0x801F6C10 : "z_play",
@@ -738,9 +742,9 @@
0x801FD120 : "audio_heap",
0x801FD140 : "audio_load",
0x801FD1F0 : "code_8019AF00",
- 0x801FD5A0 : "code_801A51F0",
+ 0x801FD5A0 : "voice_internal",
0x801FD710 : "code_801A5BD0",
- 0x801FFD00 : "code_801A7B10",
+ 0x801FFD00 : "sequence",
0x80208E90 : "jpegdecoder",
0x80208EA0 : "gfxbuffers",
0x8024A4C0 : "buffers",
diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt
index 558efc8fb..8cbc8f13f 100644
--- a/tools/disasm/functions.txt
+++ b/tools/disasm/functions.txt
@@ -486,8 +486,8 @@
0x80096930:("__osMemcpy",),
0x800A5AC0:("EnAObj_Init",),
0x800A5B6C:("EnAObj_Destroy",),
- 0x800A5B98:("EnAObj_Update1",),
- 0x800A5C28:("EnAObj_Update2",),
+ 0x800A5B98:("EnAObj_Idle",),
+ 0x800A5C28:("EnAObj_Talk",),
0x800A5C60:("EnAObj_Update",),
0x800A5CB8:("EnAObj_Draw",),
0x800A5D00:("EnItem00_SetObject",),
@@ -703,7 +703,7 @@
0x800B6584:("func_800B6584",),
0x800B6608:("func_800B6608",),
0x800B6680:("func_800B6680",),
- 0x800B670C:("Actor_MarkForDeath",),
+ 0x800B670C:("Actor_Kill",),
0x800B672C:("Actor_SetWorldToHome",),
0x800B675C:("Actor_SetFocus",),
0x800B67A0:("Actor_SetWorldRotToShape",),
@@ -722,16 +722,16 @@
0x800B6BD8:("Actor_MoveWithoutGravityReverse",),
0x800B6C04:("Actor_SetSpeeds",),
0x800B6C58:("Actor_UpdatePosFromSkelAnime",),
- 0x800B6CD4:("Actor_YawBetweenActors",),
- 0x800B6D00:("Actor_YawBetweenActorsTop",),
- 0x800B6D2C:("Actor_YawToPoint",),
- 0x800B6D50:("Actor_PitchBetweenActors",),
- 0x800B6D7C:("Actor_PitchBetweenActorsTop",),
- 0x800B6DA8:("Actor_PitchToPoint",),
- 0x800B6DCC:("Actor_DistanceBetweenActors",),
- 0x800B6DF8:("Actor_DistanceToPoint",),
- 0x800B6E1C:("Actor_XZDistanceBetweenActors",),
- 0x800B6E48:("Actor_XZDistanceToPoint",),
+ 0x800B6CD4:("Actor_WorldYawTowardActor",),
+ 0x800B6D00:("Actor_FocusYawTowardActor",),
+ 0x800B6D2C:("Actor_WorldYawTowardPoint",),
+ 0x800B6D50:("Actor_WorldPitchTowardActor",),
+ 0x800B6D7C:("Actor_FocusPitchTowardActor",),
+ 0x800B6DA8:("Actor_WorldPitchTowardPoint",),
+ 0x800B6DCC:("Actor_WorldDistXYZToActor",),
+ 0x800B6DF8:("Actor_WorldDistXYZToPoint",),
+ 0x800B6E1C:("Actor_WorldDistXZToActor",),
+ 0x800B6E48:("Actor_WorldDistXZToPoint",),
0x800B6E6C:("Actor_OffsetOfPointInActorCoords",),
0x800B6F0C:("Actor_HeightDiff",),
0x800B6F20:("func_800B6F20",),
@@ -754,7 +754,7 @@
0x800B742C:("Actor_ActorAIsFacingActorB",),
0x800B748C:("Actor_IsFacingAndNearPlayer",),
0x800B750C:("Actor_ActorAIsFacingAndNearActorB",),
- 0x800B75A0:("func_800B75A0",),
+ 0x800B75A0:("Actor_GetSlopeDirection",),
0x800B761C:("func_800B761C",),
0x800B7678:("func_800B7678",),
0x800B78B8:("Actor_UpdateBgCheckInfo",),
@@ -785,13 +785,13 @@
0x800B8898:("Actor_GetScreenPos",),
0x800B8934:("Actor_OnScreen",),
0x800B89F8:("Actor_HasParent",),
- 0x800B8A1C:("Actor_PickUp",),
- 0x800B8B84:("Actor_PickUpNearby",),
- 0x800B8BB0:("Actor_LiftActor",),
- 0x800B8BD0:("Actor_PickUpFar",),
+ 0x800B8A1C:("Actor_OfferGetItem",),
+ 0x800B8B84:("Actor_OfferGetItemNearby",),
+ 0x800B8BB0:("Actor_OfferCarry",),
+ 0x800B8BD0:("Actor_OfferGetItemFar",),
0x800B8BFC:("Actor_HasNoParent",),
0x800B8C20:("func_800B8C20",),
- 0x800B8C50:("func_800B8C50",),
+ 0x800B8C50:("Actor_SetClosestSecretDistance",),
0x800B8C78:("Actor_HasRider",),
0x800B8C9C:("Actor_SetRideActor",),
0x800B8CEC:("Actor_HasNoRider",),
@@ -800,8 +800,8 @@
0x800B8D98:("func_800B8D98",),
0x800B8DD4:("func_800B8DD4",),
0x800B8E1C:("func_800B8E1C",),
- 0x800B8E58:("func_800B8E58",),
- 0x800B8EC8:("Actor_PlaySfxAtPos",),
+ 0x800B8E58:("Player_PlaySfx",),
+ 0x800B8EC8:("Actor_PlaySfx",),
0x800B8EF4:("func_800B8EF4",),
0x800B8F98:("func_800B8F98",),
0x800B8FC0:("func_800B8FC0",),
@@ -812,23 +812,23 @@
0x800B9098:("func_800B9098",),
0x800B90AC:("func_800B90AC",),
0x800B90F4:("Actor_DeactivateLens",),
- 0x800B9120:("func_800B9120",),
+ 0x800B9120:("Actor_InitHalfDaysBit",),
0x800B9170:("Actor_InitContext",),
0x800B9334:("Actor_SpawnSetupActors",),
0x800B948C:("Actor_UpdateActor",),
0x800B9780:("Actor_UpdateAll",),
0x800B9A04:("Actor_Draw",),
0x800B9D1C:("func_800B9D1C",),
- 0x800B9E3C:("Actor_DrawAllSetup",),
- 0x800B9E4C:("Actor_RecordUndrawnActor",),
+ 0x800B9E3C:("Actor_ResetLensActors",),
+ 0x800B9E4C:("Actor_AddToLensActors",),
0x800B9E84:("Actor_DrawLensOverlay",),
0x800B9EF4:("Actor_DrawLensActors",),
0x800BA2D8:("func_800BA2D8",),
0x800BA2FC:("func_800BA2FC",),
0x800BA42C:("Actor_DrawAll",),
- 0x800BA6FC:("func_800BA6FC",),
+ 0x800BA6FC:("Actor_KillAllWithMissingObject",),
0x800BA798:("func_800BA798",),
- 0x800BA8B8:("func_800BA8B8",),
+ 0x800BA8B8:("Actor_KillAllOnHalfDayChange",),
0x800BA9B4:("Actor_CleanupContext",),
0x800BAAB4:("Actor_AddToCategory",),
0x800BAB24:("Actor_RemoveFromCategory",),
@@ -851,7 +851,7 @@
0x800BBDAC:("Actor_SpawnFloorDustRing",),
0x800BBFB0:("func_800BBFB0",),
0x800BC154:("func_800BC154",),
- 0x800BC188:("func_800BC188",),
+ 0x800BC188:("Actor_GetArrowDmgFlags",),
0x800BC1B4:("func_800BC1B4",),
0x800BC270:("func_800BC270",),
0x800BC444:("func_800BC444",),
@@ -868,11 +868,11 @@
0x800BCBF4:("func_800BCBF4",),
0x800BCC68:("func_800BCC68",),
0x800BCCDC:("Actor_GetClosestPosOnPath",),
- 0x800BD2B4:("func_800BD2B4",),
- 0x800BD384:("func_800BD384",),
- 0x800BD6B8:("func_800BD6B8",),
- 0x800BD6E4:("func_800BD6E4",),
- 0x800BD888:("func_800BD888",),
+ 0x800BD2B4:("Npc_UpdateTalking",),
+ 0x800BD384:("Npc_TrackPointWithLimits",),
+ 0x800BD6B8:("Npc_GetTrackingPresetMaxPlayerYaw",),
+ 0x800BD6E4:("Npc_UpdateAutoTurn",),
+ 0x800BD888:("Npc_TrackPoint",),
0x800BD9A0:("func_800BD9A0",),
0x800BD9E0:("func_800BD9E0",),
0x800BDAA0:("func_800BDAA0",),
@@ -895,7 +895,7 @@
0x800BE63C:("Actor_IsSmallChest",),
0x800BE680:("Actor_DrawDamageEffects",),
0x800BF7CC:("Actor_SpawnIceEffects",),
- 0x800BF9A0:("ActorOverlayTable_FaultPrint",),
+ 0x800BF9A0:("ActorOverlayTable_FaultClient",),
0x800BFA78:("ActorOverlayTable_FaultAddrConv",),
0x800BFAE8:("ActorOverlayTable_Init",),
0x800BFB40:("ActorOverlayTable_Cleanup",),
@@ -1016,18 +1016,18 @@
0x800C6098:("DynaPoly_Alloc",),
0x800C6188:("DynaPoly_SetBgActor",),
0x800C6248:("DynaPoly_GetActor",),
- 0x800C62BC:("func_800C62BC",),
- 0x800C6314:("func_800C6314",),
- 0x800C636C:("func_800C636C",),
- 0x800C63C4:("func_800C63C4",),
- 0x800C641C:("func_800C641C",),
- 0x800C6474:("func_800C6474",),
+ 0x800C62BC:("DynaPoly_DisableCollision",),
+ 0x800C6314:("DynaPoly_EnableCollision",),
+ 0x800C636C:("DynaPoly_DisableCeilingCollision",),
+ 0x800C63C4:("DynaPoly_EnableCeilingCollision",),
+ 0x800C641C:("DynaPoly_DisableFloorCollision",),
+ 0x800C6474:("DynaPoly_EnableFloorCollision",),
0x800C64CC:("DynaPoly_DeleteBgActor",),
- 0x800C6554:("func_800C6554",),
+ 0x800C6554:("DynaPoly_InvalidateLookup",),
0x800C656C:("BgCheck_CalcWaterboxDimensions",),
- 0x800C6838:("DynaPoly_ExpandSRT",),
- 0x800C734C:("BgCheck_ResetFlagsIfLoadedActor",),
- 0x800C73E4:("DynaPoly_Setup",),
+ 0x800C6838:("DynaPoly_AddBgActorToLookup",),
+ 0x800C734C:("DynaPoly_UnsetAllInteractFlags",),
+ 0x800C73E4:("DynaPoly_UpdateContext",),
0x800C756C:("func_800C756C",),
0x800C765C:("DynaPoly_UpdateBgActorTransforms",),
0x800C76EC:("BgCheck_RaycastFloorDynaList",),
@@ -1055,21 +1055,21 @@
0x800C98CC:("BgCheck_GetBgCamFuncDataImpl",),
0x800C9924:("BgCheck_GetBgCamFuncData",),
0x800C99AC:("SurfaceType_GetSceneExitIndex",),
- 0x800C99D4:("func_800C99D4",),
+ 0x800C99D4:("SurfaceType_GetFloorType",),
0x800C99FC:("func_800C99FC",),
- 0x800C9A24:("func_800C9A24",),
- 0x800C9A4C:("func_800C9A4C",),
- 0x800C9A7C:("func_800C9A7C",),
- 0x800C9AB0:("func_800C9AB0",),
- 0x800C9AE4:("func_800C9AE4",),
- 0x800C9B18:("func_800C9B18",),
- 0x800C9B40:("func_800C9B40",),
- 0x800C9B68:("func_800C9B68",),
+ 0x800C9A24:("SurfaceType_GetWallType",),
+ 0x800C9A4C:("SurfaceType_GetWallFlags",),
+ 0x800C9A7C:("SurfaceType_CheckWallFlag0",),
+ 0x800C9AB0:("SurfaceType_CheckWallFlag1",),
+ 0x800C9AE4:("SurfaceType_CheckWallFlag2",),
+ 0x800C9B18:("SurfaceType_GetFloorProperty2",),
+ 0x800C9B40:("SurfaceType_GetFloorProperty",),
+ 0x800C9B68:("SurfaceType_IsSoft",),
0x800C9B90:("SurfaceType_IsHorseBlocked",),
- 0x800C9BB8:("func_800C9BB8",),
- 0x800C9BDC:("SurfaceType_GetSfx",),
- 0x800C9C24:("func_800C9C24",),
- 0x800C9C74:("SurfaceType_GetSlope",),
+ 0x800C9BB8:("SurfaceType_GetMaterial",),
+ 0x800C9BDC:("SurfaceType_GetSfxOffset",),
+ 0x800C9C24:("SurfaceType_HasMaterialProperty",),
+ 0x800C9C74:("SurfaceType_GetFloorEffect",),
0x800C9C9C:("SurfaceType_GetLightSettingIndex",),
0x800C9CC4:("SurfaceType_GetEcho",),
0x800C9CEC:("SurfaceType_IsHookshotSurface",),
@@ -1092,25 +1092,25 @@
0x800CA6F0:("func_800CA6F0",),
0x800CA9D0:("func_800CA9D0",),
0x800CAA14:("func_800CAA14",),
- 0x800CAAD0:("BgCheck2_UpdateActorPosition",),
- 0x800CAC0C:("BgCheck2_UpdateActorYRotation",),
- 0x800CACA0:("BgCheck2_AttachToMesh",),
- 0x800CAD2C:("BgCheck2_UpdateActorAttachedToMesh",),
+ 0x800CAAD0:("DynaPolyActor_UpdateCarriedActorPos",),
+ 0x800CAC0C:("DynaPolyActor_UpdateCarriedActorRotY",),
+ 0x800CACA0:("DynaPolyActor_AttachCarriedActor",),
+ 0x800CAD2C:("DynaPolyActor_TransformCarriedActor",),
0x800CAE10:("DynaPolyActor_Init",),
0x800CAE34:("DynaPolyActor_LoadMesh",),
- 0x800CAE7C:("DynaPolyActor_ResetState",),
- 0x800CAE88:("DynaPolyActor_SetRidingFallingState",),
- 0x800CAE9C:("DynaPolyActor_SetRidingMovingState",),
- 0x800CAEB0:("DynaPolyActor_SetRidingMovingStateByIndex",),
- 0x800CAEE0:("DynaPolyActor_SetRidingRotatingState",),
- 0x800CAEF4:("DynaPolyActor_SetRidingRotatingStateByIndex",),
- 0x800CAF24:("DynaPolyActor_SetSwitchPressedState",),
- 0x800CAF38:("DynaPolyActor_SetHeavySwitchPressedState",),
- 0x800CAF4C:("DynaPolyActor_IsInRidingFallingState",),
- 0x800CAF70:("DynaPolyActor_IsInRidingMovingState",),
- 0x800CAF94:("DynaPolyActor_IsInRidingRotatingState",),
- 0x800CAFB8:("DynaPolyActor_IsInSwitchPressedState",),
- 0x800CAFDC:("DynaPolyActor_IsInHeavySwitchPressedState",),
+ 0x800CAE7C:("DynaPolyActor_UnsetAllInteractFlags",),
+ 0x800CAE88:("DynaPolyActor_SetActorOnTop",),
+ 0x800CAE9C:("DynaPolyActor_SetPlayerOnTop",),
+ 0x800CAEB0:("DynaPoly_SetPlayerOnTop",),
+ 0x800CAEE0:("DynaPolyActor_SetPlayerAbove",),
+ 0x800CAEF4:("DynaPoly_SetPlayerAbove",),
+ 0x800CAF24:("DynaPolyActor_SetActorOnSwitch",),
+ 0x800CAF38:("DynaPolyActor_SetActorOnHeavySwitch",),
+ 0x800CAF4C:("DynaPolyActor_IsActorOnTop",),
+ 0x800CAF70:("DynaPolyActor_IsPlayerOnTop",),
+ 0x800CAF94:("DynaPolyActor_IsPlayerAbove",),
+ 0x800CAFB8:("DynaPolyActor_IsSwitchPressed",),
+ 0x800CAFDC:("DynaPolyActor_IsHeavySwitchPressed",),
0x800CB000:("DynaPolyActor_ValidateMove",),
0x800CB210:("Camera_fabsf",),
0x800CB240:("Camera_Vec3fMagnitude",),
@@ -1182,77 +1182,77 @@
0x800CEAD8:("func_800CEAD8",),
0x800CEC38:("func_800CEC38",),
0x800CED90:("func_800CED90",),
- 0x800CF3A4:("Camera_ModeNop",),
- 0x800CF3B4:("Camera_ModeNORM1",),
- 0x800D0874:("Camera_ModeNORM2",),
- 0x800D0894:("Camera_ModeNORM3",),
- 0x800D1228:("Camera_ModeNORM4",),
- 0x800D12B8:("Camera_ModeNORM0",),
- 0x800D1A78:("Camera_ModePARA1",),
- 0x800D2AA8:("Camera_ModePARA2",),
- 0x800D2AC8:("Camera_ModePARA3",),
- 0x800D2AE8:("Camera_ModePARA4",),
- 0x800D2B08:("Camera_ModePARA0",),
- 0x800D2B28:("Camera_ModeJUMP1",),
- 0x800D2B48:("Camera_ModeJUMP2",),
- 0x800D3520:("Camera_ModeJUMP3",),
- 0x800D41E0:("Camera_ModeJUMP4",),
- 0x800D4200:("Camera_ModeJUMP0",),
- 0x800D4220:("Camera_ModeBATT1",),
- 0x800D55A8:("Camera_ModeBATT2",),
- 0x800D55C8:("Camera_ModeBATT3",),
- 0x800D55E8:("Camera_ModeBATT4",),
- 0x800D5608:("Camera_ModeBATT0",),
- 0x800D5628:("Camera_ModeKEEP1",),
- 0x800D67DC:("Camera_ModeKEEP2",),
- 0x800D67FC:("Camera_ModeKEEP3",),
- 0x800D73C8:("Camera_ModeKEEP4",),
- 0x800D7FA4:("Camera_ModeKEEP0",),
- 0x800D7FC4:("Camera_ModeFIXD1",),
- 0x800D83C8:("Camera_ModeFIXD2",),
- 0x800D8E08:("Camera_ModeFIXD3",),
- 0x800D8E28:("Camera_ModeFIXD4",),
- 0x800D8E48:("Camera_ModeFIXD0",),
- 0x800D8E68:("Camera_ModeSUBJ1",),
- 0x800D947C:("Camera_ModeSUBJ2",),
- 0x800D949C:("Camera_ModeSUBJ3",),
- 0x800D94BC:("Camera_ModeSUBJ4",),
- 0x800D94DC:("Camera_ModeSUBJ0",),
- 0x800D94FC:("Camera_ModeDATA0",),
- 0x800D951C:("Camera_ModeDATA1",),
- 0x800D953C:("Camera_ModeDATA2",),
- 0x800D955C:("Camera_ModeDATA3",),
- 0x800D957C:("Camera_ModeDATA4",),
- 0x800D959C:("Camera_ModeUNIQ1",),
- 0x800D95BC:("Camera_ModeUNIQ2",),
- 0x800D99D0:("Camera_ModeUNIQ3",),
- 0x800D9A2C:("Camera_ModeUNIQ4",),
- 0x800D9A88:("Camera_ModeUNIQ5",),
- 0x800D9AE4:("Camera_ModeUNIQ0",),
- 0x800DA3B8:("Camera_ModeUNIQ6",),
- 0x800DA4EC:("Camera_ModeUNIQ7",),
- 0x800DA50C:("Camera_ModeUNIQ8",),
- 0x800DA52C:("Camera_ModeUNIQ9",),
- 0x800DA54C:("Camera_ModeDEMO1",),
- 0x800DAD10:("Camera_ModeDEMO2",),
- 0x800DB804:("Camera_ModeDEMO3",),
- 0x800DBB14:("Camera_ModeDEMO4",),
- 0x800DC270:("Camera_ModeDEMO5",),
- 0x800DC718:("Camera_ModeDEMO6",),
- 0x800DC738:("Camera_ModeDEMO7",),
- 0x800DC758:("Camera_ModeDEMO8",),
- 0x800DC778:("Camera_ModeDEMO9",),
- 0x800DC798:("Camera_ModeDEMO0",),
- 0x800DCC90:("Camera_ModeSPEC0",),
- 0x800DCCB0:("Camera_ModeSPEC1",),
- 0x800DCCD0:("Camera_ModeSPEC2",),
- 0x800DCCF0:("Camera_ModeSPEC3",),
- 0x800DCD10:("Camera_ModeSPEC4",),
- 0x800DCD30:("Camera_ModeSPEC5",),
- 0x800DD0FC:("Camera_ModeSPEC6",),
- 0x800DD11C:("Camera_ModeSPEC7",),
- 0x800DD13C:("Camera_ModeSPEC8",),
- 0x800DD5B8:("Camera_ModeSPEC9",),
+ 0x800CF3A4:("Camera_Noop",),
+ 0x800CF3B4:("Camera_Normal1",),
+ 0x800D0874:("Camera_Normal2",),
+ 0x800D0894:("Camera_Normal3",),
+ 0x800D1228:("Camera_Normal4",),
+ 0x800D12B8:("Camera_Normal0",),
+ 0x800D1A78:("Camera_Parallel1",),
+ 0x800D2AA8:("Camera_Parallel2",),
+ 0x800D2AC8:("Camera_Parallel3",),
+ 0x800D2AE8:("Camera_Parallel4",),
+ 0x800D2B08:("Camera_Parallel0",),
+ 0x800D2B28:("Camera_Jump1",),
+ 0x800D2B48:("Camera_Jump2",),
+ 0x800D3520:("Camera_Jump3",),
+ 0x800D41E0:("Camera_Jump4",),
+ 0x800D4200:("Camera_Jump0",),
+ 0x800D4220:("Camera_Battle1",),
+ 0x800D55A8:("Camera_Battle2",),
+ 0x800D55C8:("Camera_Battle3",),
+ 0x800D55E8:("Camera_Battle4",),
+ 0x800D5608:("Camera_Battle0",),
+ 0x800D5628:("Camera_KeepOn1",),
+ 0x800D67DC:("Camera_KeepOn2",),
+ 0x800D67FC:("Camera_KeepOn3",),
+ 0x800D73C8:("Camera_KeepOn4",),
+ 0x800D7FA4:("Camera_KeepOn0",),
+ 0x800D7FC4:("Camera_Fixed1",),
+ 0x800D83C8:("Camera_Fixed2",),
+ 0x800D8E08:("Camera_Fixed3",),
+ 0x800D8E28:("Camera_Fixed4",),
+ 0x800D8E48:("Camera_Fixed0",),
+ 0x800D8E68:("Camera_Subject1",),
+ 0x800D947C:("Camera_Subject2",),
+ 0x800D949C:("Camera_Subject3",),
+ 0x800D94BC:("Camera_Subject4",),
+ 0x800D94DC:("Camera_Subject0",),
+ 0x800D94FC:("Camera_Data0",),
+ 0x800D951C:("Camera_Data1",),
+ 0x800D953C:("Camera_Data2",),
+ 0x800D955C:("Camera_Data3",),
+ 0x800D957C:("Camera_Data4",),
+ 0x800D959C:("Camera_Unique1",),
+ 0x800D95BC:("Camera_Unique2",),
+ 0x800D99D0:("Camera_Unique3",),
+ 0x800D9A2C:("Camera_Unique4",),
+ 0x800D9A88:("Camera_Unique5",),
+ 0x800D9AE4:("Camera_Unique0",),
+ 0x800DA3B8:("Camera_Unique6",),
+ 0x800DA4EC:("Camera_Unique7",),
+ 0x800DA50C:("Camera_Unique8",),
+ 0x800DA52C:("Camera_Unique9",),
+ 0x800DA54C:("Camera_Demo1",),
+ 0x800DAD10:("Camera_Demo2",),
+ 0x800DB804:("Camera_Demo3",),
+ 0x800DBB14:("Camera_Demo4",),
+ 0x800DC270:("Camera_Demo5",),
+ 0x800DC718:("Camera_Demo6",),
+ 0x800DC738:("Camera_Demo7",),
+ 0x800DC758:("Camera_Demo8",),
+ 0x800DC778:("Camera_Demo9",),
+ 0x800DC798:("Camera_Demo0",),
+ 0x800DCC90:("Camera_Special0",),
+ 0x800DCCB0:("Camera_Special1",),
+ 0x800DCCD0:("Camera_Special2",),
+ 0x800DCCF0:("Camera_Special3",),
+ 0x800DCD10:("Camera_Special4",),
+ 0x800DCD30:("Camera_Special5",),
+ 0x800DD0FC:("Camera_Special6",),
+ 0x800DD11C:("Camera_Special7",),
+ 0x800DD13C:("Camera_Special8",),
+ 0x800DD5B8:("Camera_Special9",),
0x800DDD58:("Camera_Alloc",),
0x800DDDA8:("Camera_Free",),
0x800DDDD0:("Camera_Init",),
@@ -1519,68 +1519,68 @@
0x800E9138:("Actor_TrackPlayerSetFocusHeight",),
0x800E9250:("Actor_TrackPlayer",),
0x800E9360:("SaveContext_Init",),
- 0x800E93E0:("GameInfo_Init",),
+ 0x800E93E0:("Regs_Init",),
0x800E9470:("DebugDisplay_Init",),
0x800E9488:("DebugDisplay_AddObject",),
0x800E9564:("DebugDisplay_DrawObjects",),
0x800E95F4:("DebugDisplay_DrawSpriteI8",),
0x800E97D8:("DebugDisplay_DrawPolygon",),
- 0x800E992C:("func_800E992C",),
- 0x800E99B0:("func_800E99B0",),
- 0x800E9C90:("func_800E9C90",),
- 0x800E9CA0:("func_800E9CA0",),
- 0x800E9CFC:("func_800E9CFC",),
- 0x800E9DBC:("func_800E9DBC",),
- 0x800E9E94:("func_800E9E94",),
- 0x800E9F78:("func_800E9F78",),
- 0x800EA060:("Cutscene_Init",),
- 0x800EA0D4:("Cutscene_Start",),
- 0x800EA0EC:("Cutscene_End",),
- 0x800EA110:("Cutscene_Update1",),
- 0x800EA15C:("Cutscene_Update2",),
- 0x800EA210:("Cutscene_DoNothing",),
- 0x800EA220:("func_800EA220",),
- 0x800EA258:("func_800EA258",),
- 0x800EA2B8:("func_800EA2B8",),
- 0x800EA324:("Cutscene_Command_Misc",),
- 0x800EABAC:("Cutscene_Command_SetLighting",),
- 0x800EAC08:("Cutscene_Command_PlaySequence",),
- 0x800EAC44:("Cutscene_Command_StopSequence",),
- 0x800EAC94:("Cutscene_Command_FadeSequence",),
- 0x800EAD14:("Cutscene_Command_PlayAmbienceSequence",),
- 0x800EAD48:("func_800EAD48",),
- 0x800EAD7C:("func_800EAD7C",),
- 0x800EADB0:("func_800EADB0",),
- 0x800EAECC:("Cutscene_Command_FadeAmbienceSequence",),
- 0x800EAF20:("Cutscene_Command_Rumble",),
- 0x800EAFE0:("Cutscene_Command_FadeColorScreen",),
- 0x800EB1DC:("Cutscene_Command_SetTime",),
- 0x800EB364:("Cutscene_TerminatorImpl",),
- 0x800EB4B4:("Cutscene_Command_Terminator",),
- 0x800EB6F8:("Cutscene_Command_ChooseCreditsScenes",),
- 0x800EBB68:("Cutscene_Command_MotionBlur",),
- 0x800EBCD0:("Cutscene_Command_GiveTatlToPlayer",),
- 0x800EBD60:("Cutscene_Command_TransitionFX",),
- 0x800EC678:("Cutscene_Command_Camera",),
+ 0x800E992C:("DebugDisplay_DrawPath",),
+ 0x800E99B0:("DebugDisplay_PathDisplayList",),
+ 0x800E9C90:("Debug_ClearTextDrawFlags",),
+ 0x800E9CA0:("Debug_ScreenText",),
+ 0x800E9CFC:("Debug_DrawScreenText",),
+ 0x800E9DBC:("DebugCamera_ScreenText",),
+ 0x800E9E94:("DebugCamera_DrawScreenText",),
+ 0x800E9F78:("Debug_DrawText",),
+ 0x800EA060:("Cutscene_InitContext",),
+ 0x800EA0D4:("Cutscene_StartManual",),
+ 0x800EA0EC:("Cutscene_StopManual",),
+ 0x800EA110:("Cutscene_UpdateManual",),
+ 0x800EA15C:("Cutscene_UpdateScripted",),
+ 0x800EA210:("CutsceneHandler_DoNothing",),
+ 0x800EA220:("Cutscene_StepTimer",),
+ 0x800EA258:("CutsceneHandler_StartManual",),
+ 0x800EA2B8:("CutsceneHandler_StartScript",),
+ 0x800EA324:("CutsceneCmd_Misc",),
+ 0x800EABAC:("CutsceneCmd_SetLightSetting",),
+ 0x800EAC08:("CutsceneCmd_StartSequence",),
+ 0x800EAC44:("CutsceneCmd_StopSequence",),
+ 0x800EAC94:("CutsceneCmd_FadeOutSequence",),
+ 0x800EAD14:("CutsceneCmd_StartAmbience",),
+ 0x800EAD48:("Cutscene_SetSfxReverbIndexTo2",),
+ 0x800EAD7C:("Cutscene_SetSfxReverbIndexTo1",),
+ 0x800EADB0:("CutsceneCmd_ModifySequence",),
+ 0x800EAECC:("CutsceneCmd_FadeOutAmbience",),
+ 0x800EAF20:("CutsceneCmd_RumbleController",),
+ 0x800EAFE0:("CutsceneCmd_TransitionGeneral",),
+ 0x800EB1DC:("CutsceneCmd_SetTime",),
+ 0x800EB364:("CutsceneCmd_DestinationDefault",),
+ 0x800EB4B4:("CutsceneCmd_Destination",),
+ 0x800EB6F8:("CutsceneCmd_ChooseCreditsScenes",),
+ 0x800EBB68:("CutsceneCmd_MotionBlur",),
+ 0x800EBCD0:("CutsceneCmd_GiveTatlToPlayer",),
+ 0x800EBD60:("CutsceneCmd_Transition",),
+ 0x800EC678:("CutsceneCmd_UpdateCamSpline",),
0x800EC6D4:("Cutscene_CountNormalMasks",),
- 0x800EC924:("Cutscene_Command_Textbox",),
- 0x800ECD7C:("func_800ECD7C",),
- 0x800ECE40:("Cutscene_ProcessCommands",),
- 0x800ED980:("func_800ED980",),
- 0x800ED9C4:("func_800ED9C4",),
- 0x800EDA04:("func_800EDA04",),
- 0x800EDA84:("func_800EDA84",),
- 0x800EDBE0:("func_800EDBE0",),
+ 0x800EC924:("CutsceneCmd_Text",),
+ 0x800ECD7C:("Cutscene_SetActorCue",),
+ 0x800ECE40:("Cutscene_ProcessScript",),
+ 0x800ED980:("CutsceneHandler_RunScript",),
+ 0x800ED9C4:("CutsceneHandler_StopManual",),
+ 0x800EDA04:("CutsceneHandler_StopScript",),
+ 0x800EDA84:("Cutscene_SetupScripted",),
+ 0x800EDBE0:("Cutscene_HandleEntranceTriggers",),
0x800EDDB0:("func_800EDDB0",),
0x800EDDBC:("func_800EDDBC",),
- 0x800EDDCC:("Cutscene_LoadCutsceneData",),
+ 0x800EDDCC:("Cutscene_StartScripted",),
0x800EDE34:("Cutscene_ActorTranslate",),
0x800EDF24:("Cutscene_ActorTranslateAndYaw",),
0x800EDF78:("Cutscene_ActorTranslateAndYawSmooth",),
0x800EE0CC:("Cutscene_ActorTranslateXZAndYawSmooth",),
0x800EE1D8:("Cutscene_GetSceneLayer",),
- 0x800EE200:("Cutscene_GetActorActionIndex",),
- 0x800EE29C:("Cutscene_CheckActorAction",),
+ 0x800EE200:("Cutscene_GetCueChannel",),
+ 0x800EE29C:("Cutscene_IsCueInChannel",),
0x800EE2F4:("Cutscene_IsPlaying",),
0x800EE320:("GetItem_Draw",),
0x800EE364:("GetItem_DrawBombchu",),
@@ -1615,7 +1615,7 @@
0x800F048C:("SoundSource_Add",),
0x800F0568:("SoundSource_PlaySfxAtFixedWorldPos",),
0x800F0590:("SoundSource_PlaySfxEachFrameAtFixedWorldPos",),
- 0x800F05C0:("ElfMessage_GetFirstCycleHint",),
+ 0x800F05C0:("QuestHint_GetTatlTextId",),
0x800F07C0:("EnHy_ChangeAnim",),
0x800F0888:("EnHy_FindNearestDoor",),
0x800F0944:("EnHy_ChangeObjectAndAnim",),
@@ -1632,35 +1632,35 @@
0x800F10AC:("EnHy_UpdateCollider",),
0x800F112C:("EnHy_PlayWalkingSound",),
0x800F1250:("Text_GetFaceReaction",),
- 0x800F12D0:("EnvFlags_UnsetAll",),
- 0x800F1304:("EnvFlags_Set",),
- 0x800F1374:("EnvFlags_Unset",),
- 0x800F13E8:("EnvFlags_Get",),
- 0x800F1460:("func_800F1460",),
- 0x800F14F8:("ActorCutscene_GetCutsceneImpl",),
- 0x800F1544:("ActorCutscene_Init",),
- 0x800F15D8:("func_800F15D8",),
- 0x800F1648:("ActorCutscene_ClearWaiting",),
- 0x800F1678:("ActorCutscene_ClearNextCutscenes",),
- 0x800F16A8:("ActorCutscene_MarkNextCutscenes",),
- 0x800F17FC:("ActorCutscene_End",),
- 0x800F1A7C:("ActorCutscene_Update",),
- 0x800F1BA4:("ActorCutscene_SetIntentToPlay",),
- 0x800F1BE4:("ActorCutscene_GetCanPlayNext",),
- 0x800F1C68:("ActorCutscene_StartAndSetUnkLinkFields",),
- 0x800F1CE0:("ActorCutscene_StartAndSetFlag",),
- 0x800F1D84:("ActorCutscene_Start",),
- 0x800F1FBC:("ActorCutscene_Stop",),
- 0x800F207C:("ActorCutscene_GetCurrentIndex",),
- 0x800F208C:("ActorCutscene_GetCutscene",),
- 0x800F20B8:("ActorCutscene_GetAdditionalCutscene",),
- 0x800F20F8:("ActorCutscene_GetLength",),
- 0x800F2138:("func_800F2138",),
- 0x800F2178:("func_800F2178",),
- 0x800F21B8:("ActorCutscene_GetCurrentSubCamId",),
- 0x800F21CC:("func_800F21CC",),
+ 0x800F12D0:("CutsceneFlags_UnsetAll",),
+ 0x800F1304:("CutsceneFlags_Set",),
+ 0x800F1374:("CutsceneFlags_Unset",),
+ 0x800F13E8:("CutsceneFlags_Get",),
+ 0x800F1460:("CutsceneManager_SetHudVisibility",),
+ 0x800F14F8:("CutsceneManager_GetCutsceneEntryImpl",),
+ 0x800F1544:("CutsceneManager_Init",),
+ 0x800F15D8:("CutsceneManager_StoreCamera",),
+ 0x800F1648:("CutsceneManager_ClearWaiting",),
+ 0x800F1678:("CutsceneManager_ClearNextCutscenes",),
+ 0x800F16A8:("CutsceneManager_MarkNextCutscenes",),
+ 0x800F17FC:("CutsceneManager_End",),
+ 0x800F1A7C:("CutsceneManager_Update",),
+ 0x800F1BA4:("CutsceneManager_Queue",),
+ 0x800F1BE4:("CutsceneManager_IsNext",),
+ 0x800F1C68:("CutsceneManager_StartWithPlayerCs",),
+ 0x800F1CE0:("CutsceneManager_StartWithPlayerCsAndSetFlag",),
+ 0x800F1D84:("CutsceneManager_Start",),
+ 0x800F1FBC:("CutsceneManager_Stop",),
+ 0x800F207C:("CutsceneManager_GetCurrentCsId",),
+ 0x800F208C:("CutsceneManager_GetCutsceneEntry",),
+ 0x800F20B8:("CutsceneManager_GetAdditionalCsId",),
+ 0x800F20F8:("CutsceneManager_GetLength",),
+ 0x800F2138:("CutsceneManager_GetCutsceneScriptIndex",),
+ 0x800F2178:("CutsceneManager_GetCutsceneCustomValue",),
+ 0x800F21B8:("CutsceneManager_GetCurrentSubCamId",),
+ 0x800F21CC:("CutsceneManager_FindEntranceCsId",),
0x800F22C4:("func_800F22C4",),
- 0x800F23C4:("ActorCutscene_SetReturnCamera",),
+ 0x800F23C4:("CutsceneManager_SetReturnCamera",),
0x800F23E0:("Curve_CubicHermiteSpline",),
0x800F2478:("Curve_Interpolate",),
0x800F2620:("SkelCurve_Clear",),
@@ -1708,11 +1708,11 @@
0x800F5004:("Font_LoadOrderedFont",),
0x800F5090:("func_800F5090",),
0x800F50D4:("func_800F50D4",),
- 0x800F510C:("Kankyo_Init",),
+ 0x800F510C:("Environment_Init",),
0x800F5954:("func_800F5954",),
0x800F5A8C:("Environment_LerpWeight",),
0x800F5B10:("func_800F5B10",),
- 0x800F5CD0:("func_800F5CD0",),
+ 0x800F5CD0:("Environment_UpdateSkybox",),
0x800F6834:("func_800F6834",),
0x800F694C:("func_800F694C",),
0x800F6A04:("func_800F6A04",),
@@ -1727,13 +1727,13 @@
0x800F88C4:("func_800F88C4",),
0x800F8970:("func_800F8970",),
0x800F8A9C:("func_800F8A9C",),
- 0x800F8CD4:("func_800F8CD4",),
+ 0x800F8CD4:("Environment_Update",),
0x800F8D84:("func_800F8D84",),
- 0x800F9728:("func_800F9728",),
+ 0x800F9728:("Environment_DrawSunLensFlare",),
0x800F9824:("func_800F9824",),
0x800FA39C:("func_800FA39C",),
0x800FA3C4:("func_800FA3C4",),
- 0x800FA9FC:("func_800FA9FC",),
+ 0x800FA9FC:("Environment_DrawRain",),
0x800FAAB4:("func_800FAAB4",),
0x800FAC20:("func_800FAC20",),
0x800FAF74:("func_800FAF74",),
@@ -1742,13 +1742,13 @@
0x800FB388:("func_800FB388",),
0x800FB758:("func_800FB758",),
0x800FB9B4:("func_800FB9B4",),
- 0x800FBCBC:("func_800FBCBC",),
+ 0x800FBCBC:("Environment_DrawCustomLensFlare",),
0x800FBDEC:("Kankyo_InitGameOverLights",),
0x800FBF3C:("Kankyo_FadeInGameOverLights",),
0x800FC158:("Kankyo_FadeOutGameOverLights",),
0x800FC3DC:("func_800FC3DC",),
- 0x800FC444:("func_800FC444",),
- 0x800FC64C:("func_800FC64C",),
+ 0x800FC444:("Environment_FillScreen",),
+ 0x800FC64C:("Environment_DrawSandstorm",),
0x800FD2B4:("func_800FD2B4",),
0x800FD538:("func_800FD538",),
0x800FD59C:("func_800FD59C",),
@@ -1768,9 +1768,9 @@
0x800FDC94:("func_800FDC94",),
0x800FE390:("func_800FE390",),
0x800FE3E0:("func_800FE3E0",),
- 0x800FE484:("func_800FE484",),
- 0x800FE498:("func_800FE498",),
- 0x800FE4A8:("func_800FE4A8",),
+ 0x800FE484:("Environment_StopTime",),
+ 0x800FE498:("Environment_StartTime",),
+ 0x800FE4A8:("Environment_IsTimeStopped",),
0x800FE4B8:("func_800FE4B8",),
0x800FE590:("func_800FE590",),
0x800FE5D0:("func_800FE5D0",),
@@ -1881,7 +1881,7 @@
0x80102464:("Lights_FreeNode",),
0x801024AC:("LightContext_Init",),
0x80102518:("LightContext_SetAmbientColor",),
- 0x80102544:("func_80102544",),
+ 0x80102544:("LightContext_SetFog",),
0x80102580:("LightContext_NewLights",),
0x801025B8:("LightContext_InitList",),
0x801025C8:("LightContext_DestroyList",),
@@ -2083,35 +2083,35 @@
0x8010C930:("OLib_Vec3fDiffBinAng",),
0x8010C9C8:("OLib_DbCameraVec3fDiff",),
0x8010CAA0:("OLib_DbCameraVec3fSum",),
- 0x8010CB80:("func_8010CB80",),
- 0x8010CD98:("func_8010CD98",),
- 0x8010CFBC:("func_8010CFBC",),
- 0x8010D2D4:("func_8010D2D4",),
- 0x8010D480:("func_8010D480",),
- 0x8010D7D0:("func_8010D7D0",),
- 0x8010D9F4:("func_8010D9F4",),
- 0x8010DC58:("func_8010DC58",),
- 0x8010DE38:("func_8010DE38",),
- 0x8010E028:("func_8010E028",),
+ 0x8010CB80:("Gfx_DrawTexRectRGBA16",),
+ 0x8010CD98:("Gfx_DrawTexRectIA8",),
+ 0x8010CFBC:("Gfx_DrawTexRectIA8_DropShadow",),
+ 0x8010D2D4:("Gfx_DrawRect_DropShadow",),
+ 0x8010D480:("Gfx_DrawTexRectIA8_DropShadowOffset",),
+ 0x8010D7D0:("Gfx_DrawTexRectI8",),
+ 0x8010D9F4:("Gfx_DrawTexRect4b",),
+ 0x8010DC58:("Gfx_DrawTexQuadIA8",),
+ 0x8010DE38:("Gfx_DrawTexQuad4b",),
+ 0x8010E028:("Interface_SetVertices",),
0x8010E968:("Interface_PostmanTimerCallback",),
0x8010E9F0:("Interface_StartTimer",),
0x8010EA9C:("Interface_StartPostmanTimer",),
0x8010EB50:("Interface_StartGoronRaceTimer",),
0x8010EBA0:("Interface_StartBottleTimer",),
0x8010EC54:("Interface_GetCompressedTimerDigits",),
- 0x8010EE74:("func_8010EE74",),
+ 0x8010EE74:("Interface_NewDay",),
0x8010EF68:("Interface_SetHudVisibility",),
0x8010EF9C:("Interface_UpdateButtonAlphasByStatus",),
0x8010F0D4:("Interface_UpdateButtonAlphas",),
0x8010F1A8:("Interface_UpdateHudAlphas",),
- 0x80110038:("func_80110038",),
- 0x80111CB4:("func_80111CB4",),
- 0x801129E4:("func_801129E4",),
- 0x80112AF4:("func_80112AF4",),
- 0x80112AFC:("func_80112AFC",),
+ 0x80110038:("Interface_UpdateButtonsPart2",),
+ 0x80111CB4:("Interface_UpdateButtonsPart1",),
+ 0x801129E4:("Interface_SetSceneRestrictions",),
+ 0x80112AF4:("Interface_Noop",),
+ 0x80112AFC:("Interface_InitMinigame",),
0x80112B40:("Interface_LoadItemIconImpl",),
0x80112BE4:("Interface_LoadItemIcon",),
- 0x80112C0C:("func_80112C0C",),
+ 0x80112C0C:("Interface_UpdateButtonsAlt",),
0x80112E80:("Item_Give",),
0x801143CC:("Item_CheckObtainabilityImpl",),
0x80114978:("Item_CheckObtainability",),
@@ -2141,32 +2141,32 @@
0x80116114:("Magic_FlashMeterBorder",),
0x80116348:("Magic_Update",),
0x80116918:("Magic_DrawMeter",),
- 0x80116FD8:("func_80116FD8",),
- 0x801170B8:("func_801170B8",),
- 0x80117100:("func_80117100",),
- 0x80117A20:("func_80117A20",),
- 0x80117BD0:("func_80117BD0",),
- 0x80118084:("func_80118084",),
- 0x80118890:("func_80118890",),
- 0x80118BA4:("func_80118BA4",),
- 0x80119030:("func_80119030",),
- 0x80119610:("func_80119610",),
- 0x8011B4E0:("func_8011B4E0",),
- 0x8011B5C0:("func_8011B5C0",),
- 0x8011B9E0:("func_8011B9E0",),
- 0x8011BF70:("func_8011BF70",),
- 0x8011C4C4:("func_8011C4C4",),
+ 0x80116FD8:("Interface_SetPerspectiveView",),
+ 0x801170B8:("Interface_SetOrthoView",),
+ 0x80117100:("Interface_DrawItemButtons",),
+ 0x80117A20:("Interface_DrawItemIconTexture",),
+ 0x80117BD0:("Interface_DrawAmmoCount",),
+ 0x80118084:("Interface_DrawBButtonIcons",),
+ 0x80118890:("Interface_DrawCButtonIcons",),
+ 0x80118BA4:("Interface_DrawAButton",),
+ 0x80119030:("Interface_DrawPauseMenuEquippingIcons",),
+ 0x80119610:("Interface_DrawClock",),
+ 0x8011B4E0:("Interface_SetPerfectLetters",),
+ 0x8011B5C0:("Interface_UpdatePerfectLettersType1",),
+ 0x8011B9E0:("Interface_UpdatePerfectLettersType2",),
+ 0x8011BF70:("Interface_UpdatePerfectLettersType3",),
+ 0x8011C4C4:("Interface_DrawPerfectLetters",),
0x8011C808:("Interface_StartMoonCrash",),
0x8011C898:("Interface_GetTimerDigits",),
0x8011CA64:("Interface_DrawTimers",),
0x8011E3B4:("Interface_UpdateBottleTimers",),
- 0x8011E730:("func_8011E730",),
- 0x8011F0E0:("func_8011F0E0",),
- 0x80120F90:("func_80120F90",),
- 0x80121064:("func_80121064",),
- 0x801210E0:("func_801210E0",),
+ 0x8011E730:("Interface_DrawMinigameIcons",),
+ 0x8011F0E0:("Interface_Draw",),
+ 0x80120F90:("Interface_LoadStory",),
+ 0x80121064:("Interface_AllocStory",),
+ 0x801210E0:("Interface_Update",),
0x80121F94:("Interface_Destroy",),
- 0x80121FC4:("func_80121FC4",),
+ 0x80121FC4:("Interface_Init",),
0x801224E0:("Path_GetByIndex",),
0x80122524:("Path_OrientAndGetDistSq",),
0x801225CC:("Path_CopyLastPoint",),
@@ -2202,12 +2202,12 @@
0x8012364C:("func_8012364C",),
0x80123810:("func_80123810",),
0x80123960:("Player_ActionToModelGroup",),
- 0x801239AC:("func_801239AC",),
+ 0x801239AC:("Player_SetModelsForHoldingShield",),
0x80123AA4:("Player_SetModels",),
0x80123BD4:("Player_SetModelGroup",),
0x80123C58:("func_80123C58",),
0x80123C90:("Player_SetEquipmentData",),
- 0x80123D50:("func_80123D50",),
+ 0x80123D50:("Player_UpdateBottleHeld",),
0x80123DA4:("func_80123DA4",),
0x80123DC0:("func_80123DC0",),
0x80123E90:("func_80123E90",),
@@ -2221,23 +2221,23 @@
0x80124088:("Player_IsHoldingMirrorShield",),
0x801240C8:("Player_IsHoldingHookshot",),
0x801240DC:("func_801240DC",),
- 0x80124110:("func_80124110",),
- 0x80124148:("func_80124148",),
- 0x80124168:("Player_ActionToMeleeWeapon",),
+ 0x80124110:("Player_BButtonSwordFromIA",),
+ 0x80124148:("Player_GetHeldBButtonSword",),
+ 0x80124168:("Player_MeleeWeaponFromIA",),
0x80124190:("Player_GetMeleeWeaponHeld",),
0x801241B4:("Player_IsHoldingTwoHandedWeapon",),
- 0x801241E0:("Player_ActionToBottle",),
+ 0x801241E0:("Player_BottleFromIA",),
0x8012420C:("Player_GetBottleHeld",),
- 0x8012422C:("Player_ActionToExplosive",),
+ 0x8012422C:("Player_ExplosiveFromIA",),
0x80124258:("Player_GetExplosiveHeld",),
- 0x80124278:("func_80124278",),
+ 0x80124278:("Player_SwordFromIA",),
0x801242B4:("func_801242B4",),
- 0x801242DC:("Player_GetEnvTimerType",),
- 0x80124420:("func_80124420",),
+ 0x801242DC:("Player_GetEnvironmentalHazard",),
+ 0x80124420:("Player_UpdateBunnyEars",),
0x80124618:("func_80124618",),
- 0x801246F4:("func_801246F4",),
- 0x80124870:("func_80124870",),
- 0x80124CC4:("func_80124CC4",),
+ 0x801246F4:("Player_DrawImpl",),
+ 0x80124870:("Player_AdjustSingleLeg",),
+ 0x80124CC4:("Player_DrawHookshotReticle",),
0x80124F18:("func_80124F18",),
0x80124FF0:("func_80124FF0",),
0x801251C4:("func_801251C4",),
@@ -2246,13 +2246,13 @@
0x8012536C:("func_8012536C",),
0x801253A4:("Player_DrawZoraShield",),
0x80125500:("func_80125500",),
- 0x80125580:("func_80125580",),
+ 0x80125580:("Player_OverrideLimbDrawGameplayCommon",),
0x80125CE0:("func_80125CE0",),
- 0x80125D4C:("func_80125D4C",),
- 0x801262C8:("func_801262C8",),
- 0x801263FC:("func_801263FC",),
+ 0x80125D4C:("Player_OverrideLimbDrawGameplayDefault",),
+ 0x801262C8:("Player_OverrideLimbDrawGameplayFirstPerson",),
+ 0x801263FC:("Player_OverrideLimbDrawGameplayCrawling",),
0x80126440:("func_80126440",),
- 0x801265C8:("func_801265C8",),
+ 0x801265C8:("Player_UpdateShieldCollider",),
0x8012669C:("func_8012669C",),
0x80126808:("Player_DrawGetItemImpl",),
0x8012697C:("Player_DrawGetItem",),
@@ -2263,17 +2263,17 @@
0x80127438:("func_80127438",),
0x80127488:("func_80127488",),
0x8012754C:("Player_DrawCouplesMask",),
- 0x80127594:("func_80127594",),
- 0x801278F8:("func_801278F8",),
- 0x80127A60:("func_80127A60",),
+ 0x80127594:("Player_DrawCircusLeadersMask",),
+ 0x801278F8:("Player_DrawBlastMask",),
+ 0x80127A60:("Player_DrawBunnyHood",),
0x80127B64:("func_80127B64",),
- 0x80127BE8:("func_80127BE8",),
+ 0x80127BE8:("Player_DrawStrayFairyParticles",),
0x80127DA4:("func_80127DA4",),
0x80128388:("func_80128388",),
- 0x801284A0:("func_801284A0",),
+ 0x801284A0:("Player_DrawGreatFairysMask",),
0x80128640:("func_80128640",),
- 0x80128B74:("func_80128B74",),
- 0x80128BD0:("func_80128BD0",),
+ 0x80128B74:("Player_SetFeetPos",),
+ 0x80128BD0:("Player_PostLimbDrawGameplay",),
0x80129EF0:("PreNMI_Stop",),
0x80129F04:("PreNMI_Update",),
0x80129F4C:("PreNMI_Draw",),
@@ -2391,14 +2391,14 @@
0x8012CF0C:("func_8012CF0C",),
0x8012D374:("func_8012D374",),
0x8012D40C:("func_8012D40C",),
- 0x8012D510:("Room_nop8012D510",),
- 0x8012D528:("Room_DrawType3Mesh",),
- 0x8012D53C:("Room_DrawType0Mesh",),
- 0x8012D750:("Room_DrawType2Mesh",),
- 0x8012DEE8:("func_8012DEE8",),
- 0x8012E254:("func_8012E254",),
- 0x8012E32C:("func_8012E32C",),
- 0x8012E6A8:("Room_DrawType1Mesh",),
+ 0x8012D510:("Room_Noop",),
+ 0x8012D528:("Room_DrawNone",),
+ 0x8012D53C:("Room_DrawNormal",),
+ 0x8012D750:("Room_DrawCullable",),
+ 0x8012DEE8:("Room_DrawImageSingle",),
+ 0x8012E254:("Room_GetImageMultiBgEntry",),
+ 0x8012E32C:("Room_DrawImageMulti",),
+ 0x8012E6A8:("Room_DrawImage",),
0x8012E710:("Room_Init",),
0x8012E750:("Room_AllocateAndLoad",),
0x8012E96C:("Room_StartRoomTransition",),
@@ -2422,43 +2422,43 @@
0x8012F668:("Object_IsLoaded",),
0x8012F698:("Object_LoadAll",),
0x8012F73C:("func_8012F73C",),
- 0x8012F79C:("Scene_HeaderCmdSpawnList",),
- 0x8012F90C:("Scene_HeaderCmdActorList",),
- 0x8012F954:("Scene_HeaderCmdActorCutsceneCamList",),
- 0x8012F984:("Scene_HeaderCmdColHeader",),
- 0x8012FA24:("Scene_HeaderCmdRoomList",),
- 0x8012FA68:("Scene_HeaderCmdEntranceList",),
- 0x8012FA98:("Scene_HeaderCmdSpecialFiles",),
- 0x8012FB60:("Scene_HeaderCmdRoomBehavior",),
- 0x8012FBE8:("Scene_HeaderCmdMesh",),
- 0x8012FC18:("Scene_HeaderCmdObjectList",),
- 0x8012FDA4:("Scene_HeaderCmdLightList",),
- 0x8012FE2C:("Scene_HeaderCmdPathList",),
- 0x8012FE5C:("Scene_HeaderCmdTransiActorList",),
+ 0x8012F79C:("Scene_CommandSpawnList",),
+ 0x8012F90C:("Scene_CommandActorList",),
+ 0x8012F954:("Scene_CommandActorCutsceneCamList",),
+ 0x8012F984:("Scene_CommandCollisionHeader",),
+ 0x8012FA24:("Scene_CommandRoomList",),
+ 0x8012FA68:("Scene_CommandEntranceList",),
+ 0x8012FA98:("Scene_CommandSpecialFiles",),
+ 0x8012FB60:("Scene_CommandRoomBehavior",),
+ 0x8012FBE8:("Scene_CommandMesh",),
+ 0x8012FC18:("Scene_CommandObjectList",),
+ 0x8012FDA4:("Scene_CommandLightList",),
+ 0x8012FE2C:("Scene_CommandPathList",),
+ 0x8012FE5C:("Scene_CommandTransiActorList",),
0x8012FEBC:("Door_InitContext",),
- 0x8012FECC:("Scene_HeaderCmdEnvLightSettings",),
+ 0x8012FECC:("Scene_CommandEnvLightSettings",),
0x8012FF10:("Scene_LoadAreaTextures",),
- 0x8012FF8C:("Scene_HeaderCmdSkyboxSettings",),
- 0x8012FFF0:("Scene_HeaderCmdSkyboxDisables",),
- 0x80130018:("Scene_HeaderCmdTimeSettings",),
- 0x8013033C:("Scene_HeaderCmdWindSettings",),
- 0x801303A0:("Scene_HeaderCmdExitList",),
- 0x801303D0:("Scene_HeaderCmd09",),
- 0x801303E0:("Scene_HeaderCmdSoundSettings",),
- 0x8013043C:("Scene_HeaderCmdEchoSetting",),
- 0x80130454:("Scene_HeaderCmdAltHeaderList",),
- 0x801304CC:("Scene_HeaderCmdCutsceneList",),
- 0x80130500:("Scene_HeaderCmdActorCutsceneList",),
- 0x80130540:("Scene_HeaderCmdMiniMap",),
- 0x80130578:("Scene_HeaderCmd1D",),
- 0x80130588:("Scene_HeaderCmdMiniMapCompassInfo",),
- 0x801305B0:("Scene_HeaderCmdSetRegionVisitedFlag",),
- 0x80130674:("Scene_HeaderCmdAnimatedMaterials",),
+ 0x8012FF8C:("Scene_CommandSkyboxSettings",),
+ 0x8012FFF0:("Scene_CommandSkyboxDisables",),
+ 0x80130018:("Scene_CommandTimeSettings",),
+ 0x8013033C:("Scene_CommandWindSettings",),
+ 0x801303A0:("Scene_CommandExitList",),
+ 0x801303D0:("Scene_Command09",),
+ 0x801303E0:("Scene_CommandSoundSettings",),
+ 0x8013043C:("Scene_CommandEchoSetting",),
+ 0x80130454:("Scene_CommandAltHeaderList",),
+ 0x801304CC:("Scene_CommandCutsceneScriptList",),
+ 0x80130500:("Scene_CommandCutsceneList",),
+ 0x80130540:("Scene_CommandMiniMap",),
+ 0x80130578:("Scene_Command1D",),
+ 0x80130588:("Scene_CommandMiniMapCompassInfo",),
+ 0x801305B0:("Scene_CommandSetRegionVisitedFlag",),
+ 0x80130674:("Scene_CommandAnimatedMaterials",),
0x801306A4:("Scene_SetExitFade",),
- 0x801306E8:("Scene_ProcessHeader",),
+ 0x801306E8:("Scene_ExecuteCommands",),
0x80130768:("Entrance_Create",),
0x80130784:("Entrance_CreateFromSpawn",),
- 0x801307C0:("Scene_ExecuteDrawConfig",),
+ 0x801307C0:("Scene_Draw",),
0x801307F4:("Scene_DrawConfigDefault",),
0x80130834:("AnimatedMat_TexScroll",),
0x801308A0:("AnimatedMat_DrawTexScroll",),
@@ -2537,9 +2537,9 @@
0x80134B54:("SkelAnime_DrawFlexLimb",),
0x80134DBC:("SkelAnime_DrawFlex",),
0x80134FFC:("SkelAnime_GetFrameDataLegacy",),
- 0x801353D4:("Animation_GetLimbCount2",),
- 0x801353F8:("Animation_GetLength2",),
- 0x8013541C:("Animation_GetLastFrame2",),
+ 0x801353D4:("Animation_GetLimbCountLegacy",),
+ 0x801353F8:("Animation_GetLengthLegacy",),
+ 0x8013541C:("Animation_GetLastFrameLegacy",),
0x80135448:("SkelAnime_InterpFrameTable",),
0x801358C8:("AnimationContext_Reset",),
0x801358D4:("AnimationContext_SetNextQueue",),
@@ -2558,29 +2558,29 @@
0x80135DB8:("AnimationContext_CopyFalse",),
0x80135E3C:("AnimationContext_MoveActor",),
0x80135EE8:("AnimationContext_Update",),
- 0x80135F88:("SkelAnime_InitLink",),
- 0x801360A8:("LinkAnimation_SetUpdateFunction",),
- 0x801360E0:("LinkAnimation_Update",),
- 0x80136104:("LinkAnimation_Morph",),
- 0x801361BC:("LinkAnimation_AnimateFrame",),
- 0x80136288:("LinkAnimation_Loop",),
- 0x8013631C:("LinkAnimation_Once",),
+ 0x80135F88:("SkelAnime_InitPlayer",),
+ 0x801360A8:("PlayerAnimation_SetUpdateFunction",),
+ 0x801360E0:("PlayerAnimation_Update",),
+ 0x80136104:("PlayerAnimation_Morph",),
+ 0x801361BC:("PlayerAnimation_AnimateFrame",),
+ 0x80136288:("PlayerAnimation_Loop",),
+ 0x8013631C:("PlayerAnimation_Once",),
0x801363F0:("Animation_SetMorph",),
- 0x80136414:("LinkAnimation_Change",),
- 0x8013658C:("LinkAnimation_PlayOnce",),
- 0x801365EC:("LinkAnimation_PlayOnceSetSpeed",),
- 0x80136650:("LinkAnimation_PlayLoop",),
- 0x801366AC:("LinkAnimation_PlayLoopSetSpeed",),
- 0x8013670C:("LinkAnimation_CopyJointToMorph",),
- 0x8013673C:("LinkAnimation_CopyMorphToJoint",),
- 0x8013676C:("LinkAnimation_LoadToMorph",),
- 0x801367B0:("LinkAnimation_LoadToJoint",),
- 0x801367F4:("LinkAnimation_InterpJointMorph",),
- 0x8013682C:("LinkAnimation_BlendToJoint",),
- 0x801368CC:("LinkAnimation_BlendToMorph",),
- 0x8013696C:("LinkAnimation_EndLoop",),
+ 0x80136414:("PlayerAnimation_Change",),
+ 0x8013658C:("PlayerAnimation_PlayOnce",),
+ 0x801365EC:("PlayerAnimation_PlayOnceSetSpeed",),
+ 0x80136650:("PlayerAnimation_PlayLoop",),
+ 0x801366AC:("PlayerAnimation_PlayLoopSetSpeed",),
+ 0x8013670C:("PlayerAnimation_CopyJointToMorph",),
+ 0x8013673C:("PlayerAnimation_CopyMorphToJoint",),
+ 0x8013676C:("PlayerAnimation_LoadToMorph",),
+ 0x801367B0:("PlayerAnimation_LoadToJoint",),
+ 0x801367F4:("PlayerAnimation_InterpJointMorph",),
+ 0x8013682C:("PlayerAnimation_BlendToJoint",),
+ 0x801368CC:("PlayerAnimation_BlendToMorph",),
+ 0x8013696C:("PlayerAnimation_EndLoop",),
0x80136990:("Animation_OnFrameImpl",),
- 0x80136A48:("LinkAnimation_OnFrame",),
+ 0x80136A48:("PlayerAnimation_OnFrame",),
0x80136A7C:("SkelAnime_Init",),
0x80136B30:("SkelAnime_InitFlex",),
0x80136BEC:("SkelAnime_InitSkin",),
@@ -2701,7 +2701,7 @@
0x8013E07C:("SubS_ActorPathing_MoveWithoutGravityReverse",),
0x8013E0A4:("SubS_ActorPathing_SetNextPoint",),
0x8013E1C8:("SubS_ChangeAnimationBySpeedInfo",),
- 0x8013E2D4:("SubS_StartActorCutscene",),
+ 0x8013E2D4:("SubS_StartCutscene",),
0x8013E3B8:("SubS_FillCutscenesList",),
0x8013E4B0:("SubS_ConstructPlane",),
0x8013E5CC:("SubS_LineSegVsPlane",),
@@ -2775,18 +2775,18 @@
0x80141C34:("VisMono_DesaturateDList",),
0x80141E60:("VisMono_Draw",),
0x8014204C:("VisMono_DrawOld",),
- 0x801420C0:("func_801420C0",),
- 0x801420F4:("func_801420F4",),
- 0x80142100:("func_80142100",),
+ 0x801420C0:("VisZbuf_Init",),
+ 0x801420F4:("VisZbuf_Destroy",),
+ 0x80142100:("VisZbuf_Draw",),
0x80142440:("func_80142440",),
0x80143148:("func_80143148",),
- 0x801431E8:("func_801431E8",),
+ 0x801431E8:("Skybox_Setup",),
0x80143324:("func_80143324",),
- 0x801434E4:("func_801434E4",),
- 0x801435A0:("SkyboxDraw_UpdateMatrix",),
- 0x80143624:("SkyboxDraw_SetColors",),
- 0x80143668:("SkyboxDraw_Draw",),
- 0x80143A04:("SkyboxDraw_Noop",),
+ 0x801434E4:("Skybox_Init",),
+ 0x801435A0:("Skybox_UpdateMatrix",),
+ 0x80143624:("Skybox_SetColors",),
+ 0x80143668:("Skybox_Draw",),
+ 0x80143A04:("Skybox_Update",),
0x80143A10:("Sram_ActivateOwl",),
0x80143A54:("Sram_ClearHighscores",),
0x80143AC4:("Sram_ClearFlagsAtDawnOfTheFirstDay",),
@@ -2797,7 +2797,7 @@
0x80144684:("Sram_GenerateRandomSaveFields",),
0x80144890:("Sram_InitNewSave",),
0x80144968:("Sram_InitDebugSave",),
- 0x80144A94:("func_80144A94",),
+ 0x80144A94:("Sram_ResetSaveFromMoonCrash",),
0x80144E78:("Sram_OpenSave",),
0x8014546C:("func_8014546C",),
0x80145698:("func_80145698",),
@@ -2824,7 +2824,7 @@
0x80147564:("func_80147564",),
0x80147624:("Message_ShouldAdvance",),
0x80147734:("Message_ShouldAdvanceSilent",),
- 0x801477B4:("func_801477B4",),
+ 0x801477B4:("Message_CloseTextbox",),
0x80147818:("func_80147818",),
0x80147F18:("func_80147F18",),
0x80148558:("func_80148558",),
@@ -2853,7 +2853,7 @@
0x80150D08:("func_80150D08",),
0x801514B0:("func_801514B0",),
0x801518B0:("Message_StartTextbox",),
- 0x80151938:("func_80151938",),
+ 0x80151938:("Message_ContinueTextbox",),
0x80151A68:("func_80151A68",),
0x80151BB4:("func_80151BB4",),
0x80151C9C:("func_80151C9C",),
@@ -2870,8 +2870,8 @@
0x80153E7C:("func_80153E7C",),
0x80153EF0:("func_80153EF0",),
0x801541D4:("func_801541D4",),
- 0x80156758:("func_80156758",),
- 0x8015680C:("func_8015680C",),
+ 0x80156758:("Message_Draw",),
+ 0x8015680C:("Message_Update",),
0x801586A4:("func_801586A4",),
0x801586D4:("Message_Init",),
0x801588D0:("Message_FindMessageNES",),
@@ -2905,13 +2905,13 @@
0x80160CE4:("ShrinkWindow_Update",),
0x80160D98:("ShrinkWindow_Draw",),
0x80161180:("func_80161180",),
- 0x8016119C:("func_8016119C",),
- 0x8016122C:("func_8016122C",),
- 0x801612B8:("func_801612B8",),
- 0x80161998:("func_80161998",),
+ 0x8016119C:("CutsceneCamera_Init",),
+ 0x8016122C:("CutsceneCamera_Interpolate",),
+ 0x801612B8:("CutsceneCamera_ProcessSpline",),
+ 0x80161998:("CutsceneCamera_UpdateSplines",),
0x80161BAC:("func_80161BAC",),
- 0x80161BE0:("func_80161BE0",),
- 0x80161C0C:("func_80161C0C",),
+ 0x80161BE0:("CutsceneCamera_SetState",),
+ 0x80161C0C:("CutsceneCamera_Reset",),
0x80161C20:("func_80161C20",),
0x80161E4C:("func_80161E4C",),
0x801620CC:("func_801620CC",),
@@ -2925,7 +2925,7 @@
0x801631DC:("func_801631DC",),
0x80163334:("func_80163334",),
0x80163660:("func_80163660",),
- 0x80163700:("KaleidoManager_FaultAddrConvFunc",),
+ 0x80163700:("KaleidoManager_FaultAddrConv",),
0x80163758:("KaleidoManager_LoadOvl",),
0x801637B4:("KaleidoManager_ClearOvl",),
0x80163804:("KaleidoManager_Init",),
@@ -2938,14 +2938,14 @@
0x80163C0C:("KaleidoScopeCall_Draw",),
0x80163C90:("Transition_Init",),
0x80163D80:("Transition_Destroy",),
- 0x80163DC0:("func_80163DC0",),
- 0x8016418C:("func_8016418C",),
- 0x8016424C:("func_8016424C",),
- 0x801642D8:("func_801642D8",),
- 0x80164438:("func_80164438",),
- 0x8016454C:("func_8016454C",),
- 0x80164678:("func_80164678",),
- 0x801647AC:("func_801647AC",),
+ 0x80163DC0:("TransitionTile_InitGraphics",),
+ 0x8016418C:("TransitionTile_InitVtxData",),
+ 0x8016424C:("TransitionTile_Destroy",),
+ 0x801642D8:("TransitionTile_Init",),
+ 0x80164438:("TransitionTile_SetVtx",),
+ 0x8016454C:("TransitionTile_Draw",),
+ 0x80164678:("TransitionTile_Suck",),
+ 0x801647AC:("TransitionTile_Update",),
0x801647B8:("func_801647B8",),
0x801647D0:("TransitionFade_Start",),
0x8016482C:("TransitionFade_Init",),
@@ -2970,41 +2970,41 @@
0x8016537C:("TransitionOverlay_Free",),
0x80165438:("TransitionOverlay_ClearLoadInfo",),
0x80165444:("TransitionOverlay_SetSegment",),
- 0x80165460:("func_80165460",),
- 0x80165608:("func_80165608",),
- 0x80165630:("func_80165630",),
- 0x80165658:("func_80165658",),
- 0x8016566C:("func_8016566C",),
- 0x80165690:("func_80165690",),
- 0x801656A4:("func_801656A4",),
- 0x80165DB8:("func_80165DB8",),
- 0x80165DCC:("func_80165DCC",),
- 0x80165DF0:("func_80165DF0",),
- 0x80165E04:("func_80165E04",),
- 0x80165E1C:("func_80165E1C",),
- 0x80165E7C:("func_80165E7C",),
- 0x80165EC0:("func_80165EC0",),
- 0x80166060:("func_80166060",),
- 0x801660B8:("func_801660B8",),
+ 0x80165460:("Play_DrawMotionBlur",),
+ 0x80165608:("Play_InitMotionBlur",),
+ 0x80165630:("Play_DestroyMotionBlur",),
+ 0x80165658:("Play_SetMotionBlurAlpha",),
+ 0x8016566C:("Play_EnableMotionBlur",),
+ 0x80165690:("Play_DisableMotionBlur",),
+ 0x801656A4:("Play_ConvertRgba16ToIntensityImage",),
+ 0x80165DB8:("Play_SetMotionBlurPriorityAlpha",),
+ 0x80165DCC:("Play_EnableMotionBlurPriority",),
+ 0x80165DF0:("Play_DisableMotionBlurPriority",),
+ 0x80165E04:("Play_StartPictographPhoto",),
+ 0x80165E1C:("Play_TakePictoPhoto",),
+ 0x80165E7C:("Play_ChooseDynamicTransition",),
+ 0x80165EC0:("Play_SetupTransition",),
+ 0x80166060:("Play_ClearTransition",),
+ 0x801660B8:("Play_SetFog",),
0x8016613C:("Play_Destroy",),
- 0x801663C4:("func_801663C4",),
- 0x80166644:("func_80166644",),
- 0x801668B4:("func_801668B4",),
- 0x80166968:("func_80166968",),
- 0x80166B30:("func_80166B30",),
- 0x80167814:("Play_Update",),
- 0x80167DE4:("func_80167DE4",),
- 0x80167F0C:("func_80167F0C",),
- 0x80168090:("Play_Draw",),
- 0x80168DAC:("func_80168DAC",),
+ 0x801663C4:("Play_CompressI8ToI5",),
+ 0x80166644:("Play_DecompressI5ToI8",),
+ 0x801668B4:("Play_GetWaterSurface",),
+ 0x80166968:("Play_UpdateWaterCamera",),
+ 0x80166B30:("Play_UpdateTransition",),
+ 0x80167814:("Play_UpdateMain",),
+ 0x80167DE4:("Play_Update",),
+ 0x80167F0C:("Play_PostWorldDraw",),
+ 0x80168090:("Play_DrawMain",),
+ 0x80168DAC:("Play_Draw",),
0x80168F64:("Play_Main",),
0x801690CC:("Play_InCsMode",),
- 0x80169100:("func_80169100",),
- 0x801691F0:("func_801691F0",),
- 0x80169220:("Play_LoadScene",),
- 0x8016927C:("func_8016927C",),
- 0x801692C4:("func_801692C4",),
- 0x801693D4:("Play_SceneInit",),
+ 0x80169100:("Play_GetFloorSurfaceImpl",),
+ 0x801691F0:("Play_GetFloorSurface",),
+ 0x80169220:("Play_LoadFile",),
+ 0x8016927C:("Play_InitEnvironment",),
+ 0x801692C4:("Play_InitScene",),
+ 0x801693D4:("Play_SpawnScene",),
0x80169474:("Play_GetScreenPos",),
0x801694DC:("Play_CreateSubCamera",),
0x80169584:("Play_GetActiveCamId",),
@@ -3032,13 +3032,13 @@
0x80169EFC:("func_80169EFC",),
0x80169F78:("func_80169F78",),
0x80169FDC:("func_80169FDC",),
- 0x80169FFC:("func_80169FFC",),
+ 0x80169FFC:("Play_CamIsNotFixed",),
0x8016A01C:("FrameAdvance_IsEnabled",),
0x8016A02C:("func_8016A02C",),
0x8016A0AC:("Play_IsUnderwater",),
0x8016A168:("Play_IsDebugCamEnabled",),
- 0x8016A178:("Play_AssignPlayerActorCsIdsFromScene",),
- 0x8016A268:("func_8016A268",),
+ 0x8016A178:("Play_AssignPlayerCsIdsFromScene",),
+ 0x8016A268:("Play_FillScreen",),
0x8016A2C8:("Play_Init",),
0x8016AC10:("func_8016AC10",),
0x8016AE1C:("func_8016AE1C",),
@@ -3048,11 +3048,11 @@
0x8016CD4C:("func_8016CD4C",),
0x8016E40C:("func_8016E40C",),
0x8016EA90:("func_8016EA90",),
- 0x8016F1A8:("func_8016F1A8",),
+ 0x8016F1A8:("BombersNotebook_Draw",),
0x8016F4EC:("func_8016F4EC",),
- 0x8016F5A8:("func_8016F5A8",),
- 0x8016FC78:("func_8016FC78",),
- 0x8016FC98:("func_8016FC98",),
+ 0x8016F5A8:("BombersNotebook_Update",),
+ 0x8016FC78:("BombersNotebook_Init",),
+ 0x8016FC98:("BombersNotebook_Destroy",),
0x8016FCF0:("PreRender_SetValuesSave",),
0x8016FD2C:("PreRender_Init",),
0x8016FD60:("PreRender_SetValues",),
@@ -3079,36 +3079,36 @@
0x80172078:("PreRender_ApplyFiltersSlowlyDestroy",),
0x801720C4:("func_801720C4",),
0x801720FC:("func_801720FC",),
- 0x80172758:("func_80172758",),
- 0x801727F0:("THGA_Ct",),
- 0x80172810:("THGA_Dt",),
+ 0x80172758:("Prerender_DrawBackground2D",),
+ 0x801727F0:("THGA_Init",),
+ 0x80172810:("THGA_Destroy",),
0x80172830:("THGA_IsCrash",),
0x80172850:("THGA_Init",),
- 0x80172870:("THGA_GetSize",),
+ 0x80172870:("THGA_GetRemaining",),
0x80172890:("THGA_GetHead",),
0x801728B0:("THGA_SetHead",),
0x801728D0:("THGA_GetTail",),
- 0x801728F0:("THGA_AllocStartArray8",),
- 0x80172914:("THGA_AllocStart8",),
- 0x80172934:("THGA_AllocStart8Wrapper",),
- 0x80172954:("THGA_AllocEnd",),
- 0x80172974:("THGA_AllocEndArray64",),
- 0x80172998:("THGA_AllocEnd64",),
- 0x801729B8:("THGA_AllocEndArray16",),
- 0x801729DC:("THGA_AllocEnd16",),
+ 0x801728F0:("THGA_AllocDisplayList",),
+ 0x80172914:("THGA_AllocGfx",),
+ 0x80172934:("THGA_AllocGfx2",),
+ 0x80172954:("THGA_AllocTail",),
+ 0x80172974:("THGA_AllocMtxArray",),
+ 0x80172998:("THGA_AllocMtx",),
+ 0x801729B8:("THGA_AllocVtxArray",),
+ 0x801729DC:("THGA_AllocVtx",),
0x80172A00:("THA_GetHead",),
0x80172A0C:("THA_SetHead",),
0x80172A18:("THA_GetTail",),
- 0x80172A24:("THA_AllocStart",),
- 0x80172A38:("THA_AllocStart1",),
- 0x80172A58:("THA_AllocEnd",),
- 0x80172AC8:("THA_AllocEndAlign16",),
- 0x80172AE8:("THA_AllocEndAlign",),
- 0x80172B04:("THA_GetSize",),
+ 0x80172A24:("THA_AllocHead",),
+ 0x80172A38:("THA_AllocHeadByte",),
+ 0x80172A58:("THA_AllocTail",),
+ 0x80172AC8:("THA_AllocTailAlign16",),
+ 0x80172AE8:("THA_AllocTailAlign",),
+ 0x80172B04:("THA_GetRemaining",),
0x80172B18:("THA_IsCrash",),
- 0x80172B3C:("THA_Init",),
- 0x80172B58:("THA_Ct",),
- 0x80172B9C:("THA_Dt",),
+ 0x80172B3C:("THA_Reset",),
+ 0x80172B58:("THA_Init",),
+ 0x80172B9C:("THA_Destroy",),
0x80172BC0:("AudioMgr_StopAllSfxExceptSystem",),
0x80172C30:("func_80172C30",),
0x80172C68:("AudioMgr_HandleRetrace",),
@@ -3148,7 +3148,7 @@
0x80173DAC:("Graph_InitTHGA",),
0x80173DCC:("Graph_SetNextGfxPool",),
0x80173F98:("Graph_GetNextGameState",),
- 0x80174060:("Graph_FaultAddrConvFunc",),
+ 0x80174060:("Graph_FaultAddrConv",),
0x801740D0:("Graph_Init",),
0x80174174:("Graph_Destroy",),
0x801741A8:("Graph_TaskSet00",),
@@ -3222,9 +3222,9 @@
0x80177A84:("func_80177A84",),
0x80177AC8:("func_80177AC8",),
0x80177E58:("SpeedMeter_DrawAllocEntries",),
- 0x801780F0:("func_801780F0",),
- 0x801781EC:("func_801781EC",),
- 0x8017842C:("func_8017842C",),
+ 0x801780F0:("Mtx_SetTranslateScaleMtx",),
+ 0x801781EC:("Mtx_SetRotationMtx",),
+ 0x8017842C:("Mtx_SetTranslationRotationScaleMtx",),
0x80178750:("func_80178750",),
0x80178818:("func_80178818",),
0x80178978:("func_80178978",),
@@ -3235,11 +3235,11 @@
0x80178A34:("func_80178A34",),
0x80178A94:("func_80178A94",),
0x80178AC0:("func_80178AC0",),
- 0x80178C80:("func_80178C80",),
- 0x80178D7C:("func_80178D7C",),
- 0x80178DAC:("func_80178DAC",),
- 0x80178E3C:("func_80178E3C",),
- 0x80178E7C:("func_80178E7C",),
+ 0x80178C80:("CmpDma_GetFileInfo",),
+ 0x80178D7C:("CmpDma_Decompress",),
+ 0x80178DAC:("CmpDma_LoadFileImpl",),
+ 0x80178E3C:("CmpDma_LoadFile",),
+ 0x80178E7C:("CmpDma_LoadAllFiles",),
0x80178F30:("Check_WriteRGBA16Pixel",),
0x80178F60:("Check_WriteI4Pixel",),
0x80178FA0:("Check_DrawI4Texture",),
@@ -3352,8 +3352,8 @@
0x8017FEB0:("Math_GetAtan2Tbl",),
0x8017FEE4:("Math_Atan2S",),
0x801800CC:("Math_Atan2F",),
- 0x80180100:("Math_FAtan2F",),
- 0x8018012C:("Math_Acot2F",),
+ 0x80180100:("Math_Atan2S_XY",),
+ 0x8018012C:("Math_Atan2F_XY",),
0x80180160:("Matrix_Init",),
0x8018019C:("Matrix_Push",),
0x801801CC:("Matrix_Pop",),
@@ -3445,8 +3445,8 @@
0x80185460:("func_80185460",),
0x80185660:("Slowly_Main",),
0x801856FC:("Slowly_ThreadEntry",),
- 0x8018571C:("Slowly_Start",),
- 0x801857A0:("Slowly_Stop",),
+ 0x8018571C:("Slowly_Init",),
+ 0x801857A0:("Slowly_Destroy",),
0x801857C0:("func_801857C0",),
0x801857D0:("func_801857D0",),
0x80185864:("func_80185864",),
@@ -3680,44 +3680,44 @@
0x80192AE8:("AudioLoad_ScriptLoad",),
0x80192B54:("AudioLoad_ProcessScriptLoads",),
0x80192BAC:("AudioLoad_InitScriptLoads",),
- 0x80192BE0:("func_80192BE0",),
- 0x80192C00:("func_80192C00",),
- 0x8019319C:("func_8019319C",),
- 0x801936D8:("func_801936D8",),
- 0x8019372C:("func_8019372C",),
- 0x80193774:("func_80193774",),
- 0x8019380C:("func_8019380C",),
- 0x80193858:("func_80193858",),
+ 0x80192BE0:("AudioThread_Update",),
+ 0x80192C00:("AudioThread_UpdateImpl",),
+ 0x8019319C:("AudioThread_ProcessGlobalCmd",),
+ 0x801936D8:("AudioThread_SetFadeOutTimer",),
+ 0x8019372C:("AudioThread_SetFadeInTimer",),
+ 0x80193774:("AudioThread_InitMesgQueuesInternal",),
+ 0x8019380C:("AudioThread_QueueCmd",),
+ 0x80193858:("AudioThread_QueueCmdF32",),
0x8019387C:("AudioThread_QueueCmdS32",),
0x801938A0:("AudioThread_QueueCmdS8",),
- 0x801938D0:("func_801938D0",),
+ 0x801938D0:("AudioThread_QueueCmdU16",),
0x80193900:("AudioThread_ScheduleProcessCmds",),
- 0x80193990:("func_80193990",),
- 0x801939A8:("func_801939A8",),
- 0x80193AEC:("func_80193AEC",),
- 0x80193BA0:("func_80193BA0",),
- 0x80193C04:("func_80193C04",),
- 0x80193C24:("func_80193C24",),
+ 0x80193990:("AudioThread_ResetCmdQueue",),
+ 0x801939A8:("AudioThread_ProcessCmd",),
+ 0x80193AEC:("AudioThread_ProcessCmds",),
+ 0x80193BA0:("AudioThread_GetExternalLoadQueueMsg",),
+ 0x80193C04:("AudioThread_GetFontsForSequence",),
+ 0x80193C24:("AudioThread_GetSampleBankIdsOfFont",),
0x80193C5C:("func_80193C5C",),
- 0x80193CB4:("func_80193CB4",),
- 0x80193D08:("func_80193D08",),
- 0x80193DA4:("func_80193DA4",),
- 0x80193DF0:("func_80193DF0",),
- 0x80193E44:("func_80193E44",),
- 0x80193E6C:("func_80193E6C",),
- 0x80193E9C:("func_80193E9C",),
- 0x80193EA8:("func_80193EA8",),
- 0x80194080:("func_80194080",),
- 0x801942BC:("func_801942BC",),
- 0x80194304:("func_80194304",),
- 0x80194328:("func_80194328",),
- 0x8019435C:("func_8019435C",),
- 0x8019439C:("func_8019439C",),
- 0x801943D0:("func_801943D0",),
- 0x8019440C:("func_8019440C",),
- 0x80194528:("func_80194528",),
- 0x80194548:("func_80194548",),
- 0x80194568:("func_80194568",),
+ 0x80193CB4:("AudioThread_WaitForAudioResetQueueP",),
+ 0x80193D08:("AudioThread_ResetAudioHeap",),
+ 0x80193DA4:("AudioThread_PreNMIInternal",),
+ 0x80193DF0:("AudioThread_GetChannelIO",),
+ 0x80193E44:("AudioThread_GetSeqPlayerIO",),
+ 0x80193E6C:("AudioThread_InitExternalPool",),
+ 0x80193E9C:("AudioThread_ResetExternalPool",),
+ 0x80193EA8:("AudioThread_ProcessSeqPlayerCmd",),
+ 0x80194080:("AudioThread_ProcessChannelCmd",),
+ 0x801942BC:("AudioThread_Noop1Cmd",),
+ 0x80194304:("AudioThread_Noop1CmdZeroed",),
+ 0x80194328:("AudioThread_Noop2Cmd",),
+ 0x8019435C:("AudioThread_WaitForAudioTask",),
+ 0x8019439C:("AudioThread_GetSamplePosFromStart",),
+ 0x801943D0:("AudioThread_GetSamplePosUntilEnd",),
+ 0x8019440C:("AudioThread_GetSamplePos",),
+ 0x80194528:("AudioThread_GetEnabledNotesCount",),
+ 0x80194548:("AudioThread_GetEnabledSampledNotesCount",),
+ 0x80194568:("AudioThread_CountAndReleaseNotes",),
0x80194668:("AudioThread_NextRandom",),
0x801946E4:("AudioThread_InitMesgQueues",),
0x80194710:("Audio_InvalDCache",),
@@ -3767,42 +3767,42 @@
0x80197138:("AudioEffects_NotePortamentoInit",),
0x80197164:("AudioEffects_AdsrInit",),
0x80197188:("AudioEffects_AdsrUpdate",),
- 0x801974D0:("AudioSeq_GetScriptControlFlowArgument",),
- 0x80197538:("AudioSeq_HandleScriptFlowControl",),
- 0x80197714:("AudioSeq_InitSequenceChannel",),
- 0x80197880:("AudioSeq_SeqChannelSetLayer",),
- 0x801979D8:("AudioSeq_SeqLayerDisable",),
- 0x80197A54:("AudioSeq_SeqLayerFree",),
- 0x80197AA4:("AudioSeq_SequenceChannelDisable",),
- 0x80197B14:("AudioSeq_SequencePlayerSetupChannels",),
- 0x80197C0C:("AudioSeq_SequencePlayerDisableChannels",),
- 0x80197C8C:("AudioSeq_SequenceChannelEnable",),
- 0x80197D24:("AudioSeq_SequencePlayerDisableAsFinished",),
- 0x80197D4C:("AudioSeq_SequencePlayerDisable",),
- 0x80197E08:("AudioSeq_AudioListPushBack",),
- 0x80197E48:("AudioSeq_AudioListPopBack",),
- 0x80197E88:("AudioSeq_InitLayerFreelist",),
- 0x80197F28:("AudioSeq_ScriptReadU8",),
- 0x80197F3C:("AudioSeq_ScriptReadS16",),
- 0x80197F74:("AudioSeq_ScriptReadCompressedU16",),
- 0x80197FB4:("AudioSeq_SeqLayerProcessScript",),
- 0x801980D0:("AudioSeq_SeqLayerProcessScriptStep1",),
- 0x8019815C:("AudioSeq_SeqLayerProcessScriptStep5",),
- 0x8019825C:("AudioSeq_SeqLayerProcessScriptStep2",),
- 0x80198640:("AudioSeq_SeqLayerProcessScriptStep4",),
- 0x80198CE0:("AudioSeq_SeqLayerProcessScriptStep3",),
- 0x801990F4:("AudioSeq_SetChannelPriorities",),
- 0x80199124:("AudioSeq_GetInstrument",),
- 0x80199198:("AudioSeq_SetInstrument",),
- 0x80199244:("AudioSeq_SequenceChannelSetVolume",),
- 0x80199268:("AudioSeq_SequenceChannelProcessScript",),
- 0x8019A0BC:("AudioSeq_SequencePlayerProcessSequence",),
- 0x8019AA3C:("AudioSeq_ProcessSequences",),
- 0x8019AAF0:("AudioSeq_SkipForwardSequence",),
- 0x8019AB40:("AudioSeq_ResetSequencePlayer",),
- 0x8019AC10:("AudioSeq_InitSequencePlayerChannels",),
- 0x8019ACEC:("AudioSeq_InitSequencePlayer",),
- 0x8019ADBC:("AudioSeq_InitSequencePlayers",),
+ 0x801974D0:("AudioScript_GetScriptControlFlowArgument",),
+ 0x80197538:("AudioScript_HandleScriptFlowControl",),
+ 0x80197714:("AudioScript_InitSequenceChannel",),
+ 0x80197880:("AudioScript_SeqChannelSetLayer",),
+ 0x801979D8:("AudioScript_SeqLayerDisable",),
+ 0x80197A54:("AudioScript_SeqLayerFree",),
+ 0x80197AA4:("AudioScript_SequenceChannelDisable",),
+ 0x80197B14:("AudioScript_SequencePlayerSetupChannels",),
+ 0x80197C0C:("AudioScript_SequencePlayerDisableChannels",),
+ 0x80197C8C:("AudioScript_SequenceChannelEnable",),
+ 0x80197D24:("AudioScript_SequencePlayerDisableAsFinished",),
+ 0x80197D4C:("AudioScript_SequencePlayerDisable",),
+ 0x80197E08:("AudioScript_AudioListPushBack",),
+ 0x80197E48:("AudioScript_AudioListPopBack",),
+ 0x80197E88:("AudioScript_InitLayerFreelist",),
+ 0x80197F28:("AudioScript_ScriptReadU8",),
+ 0x80197F3C:("AudioScript_ScriptReadS16",),
+ 0x80197F74:("AudioScript_ScriptReadCompressedU16",),
+ 0x80197FB4:("AudioScript_SeqLayerProcessScript",),
+ 0x801980D0:("AudioScript_SeqLayerProcessScriptStep1",),
+ 0x8019815C:("AudioScript_SeqLayerProcessScriptStep5",),
+ 0x8019825C:("AudioScript_SeqLayerProcessScriptStep2",),
+ 0x80198640:("AudioScript_SeqLayerProcessScriptStep4",),
+ 0x80198CE0:("AudioScript_SeqLayerProcessScriptStep3",),
+ 0x801990F4:("AudioScript_SetChannelPriorities",),
+ 0x80199124:("AudioScript_GetInstrument",),
+ 0x80199198:("AudioScript_SetInstrument",),
+ 0x80199244:("AudioScript_SequenceChannelSetVolume",),
+ 0x80199268:("AudioScript_SequenceChannelProcessScript",),
+ 0x8019A0BC:("AudioScript_SequencePlayerProcessSequence",),
+ 0x8019AA3C:("AudioScript_ProcessSequences",),
+ 0x8019AAF0:("AudioScript_SkipForwardSequence",),
+ 0x8019AB40:("AudioScript_ResetSequencePlayer",),
+ 0x8019AC10:("AudioScript_InitSequencePlayerChannels",),
+ 0x8019ACEC:("AudioScript_InitSequencePlayer",),
+ 0x8019ADBC:("AudioScript_InitSequencePlayers",),
0x8019AE40:("func_8019AE40",),
0x8019AEC0:("func_8019AEC0",),
0x8019AF00:("AudioOcarina_ReadControllerInput",),
@@ -3845,7 +3845,7 @@
0x8019D488:("AudioOcarina_MemoryGameInit",),
0x8019D4F8:("AudioOcarina_MemoryGameNextNote",),
0x8019D600:("AudioOcarina_Update",),
- 0x8019D758:("AudioOcarina_PlayLongScarecrowAfterCredits",),
+ 0x8019D758:("AudioOcarina_PlayLongScarecrowSong",),
0x8019D864:("AudioOcarina_SetCustomSequence",),
0x8019D8B4:("AudioOcarina_PlayCustomSequence",),
0x8019D8E4:("AudioOcarina_CreateCustomSequence",),
@@ -3857,7 +3857,7 @@
0x8019E014:("Audio_Update",),
0x8019E0FC:("Audio_Noop4",),
0x8019E104:("Audio_Noop5",),
- 0x8019E110:("func_8019E110",),
+ 0x8019E110:("Audio_PlayMainBgm",),
0x8019E14C:("AudioSfx_ComputeVolume",),
0x8019E324:("AudioSfx_ComputeReverb",),
0x8019E4B0:("AudioSfx_ComputePanSigned",),
@@ -3901,10 +3901,10 @@
0x801A0048:("Audio_PlaySfxForWaterfall",),
0x801A00EC:("Audio_StepFreqLerp",),
0x801A0124:("func_801A0124",),
- 0x801A0184:("func_801A0184",),
- 0x801A01C4:("func_801A01C4",),
+ 0x801A0184:("Audio_SetBgmVolumeOff",),
+ 0x801A01C4:("Audio_SetBgmVolumeOn",),
0x801A0204:("func_801A0204",),
- 0x801A0238:("func_801A0238",),
+ 0x801A0238:("Audio_SetMainBgmVolume",),
0x801A026C:("Audio_SetGanonsTowerBgmVolumeLevel",),
0x801A0318:("Audio_SetGanonsTowerBgmVolume",),
0x801A0450:("Audio_LowerMainBgmVolume",),
@@ -3943,12 +3943,12 @@
0x801A25E4:("Audio_PlaySceneSequence",),
0x801A2670:("Audio_StartSceneSequence",),
0x801A2778:("Audio_UpdateSceneSequenceResumePoint",),
- 0x801A27E8:("func_801A27E8",),
- 0x801A281C:("func_801A281C",),
- 0x801A29D4:("func_801A29D4",),
- 0x801A2BB8:("func_801A2BB8",),
- 0x801A2C20:("func_801A2C20",),
- 0x801A2C44:("func_801A2C44",),
+ 0x801A27E8:("Audio_PlayBgmForSongOfStorms",),
+ 0x801A281C:("Audio_ScaleTempoAndFreqForMainBgm",),
+ 0x801A29D4:("Audio_SetSeqTempoAndFreq",),
+ 0x801A2BB8:("Audio_PlaySubBgm",),
+ 0x801A2C20:("Audio_StopSubBgm",),
+ 0x801A2C44:("Audio_IncreaseTempoForTimedMinigame",),
0x801A2C88:("Audio_PlaySequenceInCutscene",),
0x801A2D54:("Audio_StopSequenceInCutscene",),
0x801A2DE0:("Audio_IsSequencePlaying",),
@@ -3994,7 +3994,7 @@
0x801A4428:("func_801A4428",),
0x801A44A4:("Audio_PreNMI",),
0x801A44C4:("Audio_ResetRequestedSceneSeqId",),
- 0x801A44D4:("func_801A44D4",),
+ 0x801A44D4:("Audio_ResetData",),
0x801A46F8:("func_801A46F8",),
0x801A4748:("func_801A4748",),
0x801A479C:("func_801A479C",),
@@ -4004,11 +4004,11 @@
0x801A4B80:("Audio_SetAmbienceRandomBend",),
0x801A4C30:("Audio_Init",),
0x801A4C54:("AudioSfx_Init",),
- 0x801A4D00:("func_801A4D00",),
- 0x801A4D50:("func_801A4D50",),
- 0x801A4DA4:("func_801A4DA4",),
- 0x801A4DF4:("func_801A4DF4",),
- 0x801A4E64:("func_801A4E64",),
+ 0x801A4D00:("Audio_InitSound",),
+ 0x801A4D50:("Audio_ResetForAudioHeapStep3",),
+ 0x801A4DA4:("Audio_ResetForAudioHeapStep2",),
+ 0x801A4DF4:("Audio_ResetForAudioHeapStep1",),
+ 0x801A4E64:("Audio_UnusedReset",),
0x801A4EB0:("func_801A4EB0",),
0x801A4EB8:("func_801A4EB8",),
0x801A4FD8:("func_801A4FD8",),
@@ -4028,7 +4028,7 @@
0x801A54D0:("func_801A54D0",),
0x801A5680:("func_801A5680",),
0x801A5808:("func_801A5808",),
- 0x801A5A10:("func_801A5A10",),
+ 0x801A5A10:("AudioVoice_ResetData",),
0x801A5A1C:("func_801A5A1C",),
0x801A5BD0:("AudioSfx_MuteBanks",),
0x801A5C28:("AudioSfx_LowerBgmVolume",),
@@ -4052,21 +4052,21 @@
0x801A787C:("AudioSfx_ProcessActiveSfx",),
0x801A78E4:("AudioSfx_IsPlaying",),
0x801A794C:("AudioSfx_Reset",),
- 0x801A7B10:("Audio_StartSequence",),
- 0x801A7D04:("Audio_StopSequence",),
- 0x801A7D84:("func_801A7D84",),
- 0x801A89A8:("Audio_QueueSeqCmd",),
- 0x801A89D0:("func_801A89D0",),
- 0x801A8A50:("Audio_GetActiveSequence",),
- 0x801A8ABC:("func_801A8ABC",),
- 0x801A8B14:("func_801A8B14",),
- 0x801A8B2C:("func_801A8B2C",),
- 0x801A8BD0:("Audio_SetVolumeScale",),
- 0x801A8D5C:("func_801A8D5C",),
- 0x801A9768:("func_801A9768",),
- 0x801A982C:("func_801A982C",),
- 0x801A99B8:("func_801A99B8",),
- 0x801A9A74:("func_801A9A74",),
+ 0x801A7B10:("AudioSeq_StartSequence",),
+ 0x801A7D04:("AudioSeq_StopSequence",),
+ 0x801A7D84:("AudioSeq_ProcessSeqCmd",),
+ 0x801A89A8:("AudioSeq_QueueSeqCmd",),
+ 0x801A89D0:("AudioSeq_ProcessSeqCmds",),
+ 0x801A8A50:("AudioSeq_GetActiveSeqId",),
+ 0x801A8ABC:("AudioSeq_IsSeqCmdNotQueued",),
+ 0x801A8B14:("AudioSeq_ResetSequenceRequests",),
+ 0x801A8B2C:("AudioSeq_ReplaceSeqCmdSetupOpVolRestore",),
+ 0x801A8BD0:("AudioSeq_SetVolumeScale",),
+ 0x801A8D5C:("AudioSeq_UpdateActiveSequences",),
+ 0x801A9768:("AudioSeq_UpdateAudioHeapReset",),
+ 0x801A982C:("AudioSeq_ResetReverb",),
+ 0x801A99B8:("AudioSeq_ResetActiveSequences",),
+ 0x801A9A74:("AudioSeq_ResetActiveSequencesAndVolume",),
0x801A9B10:("JpegUtils_ProcessQuantizationTable",),
0x801A9B78:("JpegUtils_ParseHuffmanCodesLengths",),
0x801A9BFC:("JpegUtils_GetHuffmanCodes",),
@@ -4082,7 +4082,7 @@
0x801AA610:("GameOver_Init",),
0x801AA624:("GameOver_FadeLights",),
0x801AA68C:("GameOver_Update",),
- 0x801AAAA0:("func_801AAAA0",),
+ 0x801AAAA0:("Regs_InitData",),
0x80800000:("ConsoleLogo_UpdateCounters",),
0x8080009C:("ConsoleLogo_RenderView",),
0x80800134:("ConsoleLogo_Draw",),
@@ -4197,9 +4197,9 @@
0x80815770:("DayTelop_Noop",),
0x8081577C:("DayTelop_LoadGraphics",),
0x80815820:("DayTelop_Init",),
- 0x808160A0:("func_808160A0",),
- 0x80817B5C:("func_80817B5C",),
- 0x80818904:("func_80818904",),
+ 0x808160A0:("KaleidoScope_DrawQuestStatus",),
+ 0x80817B5C:("KaleidoScope_UpdateQuestCursor",),
+ 0x80818904:("KaleidoScope_UpdateQuestStatusPoint",),
0x80818920:("KaleidoScope_DrawInventoryEditorText",),
0x808190C4:("KaleidoScope_DrawDigit",),
0x80819238:("KaleidoScope_DrawInventoryEditor",),
@@ -4223,17 +4223,17 @@
0x80821958:("func_80821958",),
0x80821984:("KaleidoScope_MoveCursorToSpecialPos",),
0x80821A04:("func_80821A04",),
- 0x80821AD4:("KaleidoScope_DrawQuadTextureRGBA32",),
+ 0x80821AD4:("KaleidoScope_DrawTexQuadRGBA32",),
0x80821CC4:("func_80821CC4",),
- 0x80821D84:("func_80821D84",),
+ 0x80821D84:("KaleidoScope_HandlePageToggles",),
0x80821F30:("func_80821F30",),
0x808221DC:("func_808221DC",),
0x80823350:("func_80823350",),
- 0x80824738:("func_80824738",),
+ 0x80824738:("KaleidoScope_UpdateNamePanel",),
0x808248D0:("func_808248D0",),
0x80824B90:("func_80824B90",),
- 0x808256E4:("func_808256E4",),
- 0x8082585C:("func_8082585C",),
+ 0x808256E4:("KaleidoScope_UpdateOwlWarpNamePanel",),
+ 0x8082585C:("KaleidoScope_UpdateSwitchPage",),
0x808259D4:("KaleidoScope_SetView",),
0x80825A50:("func_80825A50",),
0x80825E28:("func_80825E28",),
@@ -4241,8 +4241,8 @@
0x80827A8C:("func_80827A8C",),
0x80827E08:("func_80827E08",),
0x808283D8:("KaleidoScope_Draw",),
- 0x808286D8:("func_808286D8",),
- 0x80828788:("func_80828788",),
+ 0x808286D8:("KaleidoScope_GrayOutTextureRGBA32",),
+ 0x80828788:("KaleidoScope_UpdateOpening",),
0x8082895C:("KaleidoScope_Update",),
0x8082DA90:("func_8082DA90",),
0x8082DABC:("func_8082DABC",),
@@ -5098,14 +5098,14 @@
0x808706E0:("EnOkuta_Draw",),
0x80870DB0:("EnBom_Init",),
0x80870FF8:("EnBom_Destroy",),
- 0x80871058:("func_80871058",),
- 0x808714D4:("func_808714D4",),
- 0x808715B8:("func_808715B8",),
+ 0x80871058:("EnBom_Move",),
+ 0x808714D4:("EnBom_WaitForRelease",),
+ 0x808715B8:("EnBom_Explode",),
0x808719A8:("EnBom_Update",),
0x808722F4:("EnBom_Draw",),
0x80872648:("func_80872648",),
0x808726DC:("func_808726DC",),
- 0x80872BC0:("func_80872BC0",),
+ 0x80872BC0:("EnBom_DrawKeg",),
0x80874810:("EnWallmas_Init",),
0x80874A28:("EnWallmas_Destroy",),
0x80874A88:("EnWallmas_Freeze",),
@@ -5901,48 +5901,48 @@
0x808B0F98:("EnAm_Draw",),
0x808B1330:("EnDekubaba_Init",),
0x808B1504:("EnDekubaba_Destroy",),
- 0x808B1530:("func_808B1530",),
- 0x808B15B8:("func_808B15B8",),
- 0x808B16BC:("func_808B16BC",),
- 0x808B1798:("func_808B1798",),
- 0x808B1814:("func_808B1814",),
- 0x808B18A8:("func_808B18A8",),
- 0x808B1B14:("func_808B1B14",),
- 0x808B1BC0:("func_808B1BC0",),
- 0x808B1CF0:("func_808B1CF0",),
- 0x808B2158:("func_808B2158",),
- 0x808B2240:("func_808B2240",),
- 0x808B2608:("func_808B2608",),
- 0x808B2660:("func_808B2660",),
- 0x808B2890:("func_808B2890",),
- 0x808B28B4:("func_808B28B4",),
- 0x808B2980:("func_808B2980",),
- 0x808B29C4:("func_808B29C4",),
- 0x808B2C40:("func_808B2C40",),
- 0x808B2CB8:("func_808B2CB8",),
- 0x808B3044:("func_808B3044",),
- 0x808B3078:("func_808B3078",),
- 0x808B3170:("func_808B3170",),
- 0x808B3280:("func_808B3280",),
- 0x808B3390:("func_808B3390",),
- 0x808B3404:("func_808B3404",),
- 0x808B3768:("func_808B3768",),
- 0x808B37E8:("func_808B37E8",),
- 0x808B39AC:("func_808B39AC",),
- 0x808B3B48:("func_808B3B48",),
- 0x808B3BE4:("func_808B3BE4",),
- 0x808B3C50:("func_808B3C50",),
- 0x808B3D74:("func_808B3D74",),
- 0x808B3DA8:("func_808B3DA8",),
- 0x808B3E40:("func_808B3E40",),
- 0x808B3EE8:("func_808B3EE8",),
- 0x808B3F50:("func_808B3F50",),
+ 0x808B1530:("EnDekubaba_DisableHitboxes",),
+ 0x808B15B8:("EnDekubaba_UpdateHeadPosition",),
+ 0x808B16BC:("EnDekubaba_SetFireLightEffects",),
+ 0x808B1798:("EnDekubaba_SetFrozenEffects",),
+ 0x808B1814:("EnDekubaba_SpawnIceEffects",),
+ 0x808B18A8:("EnDekubaba_SetupWait",),
+ 0x808B1B14:("EnDekubaba_Wait",),
+ 0x808B1BC0:("EnDekubaba_SetupGrow",),
+ 0x808B1CF0:("EnDekubaba_Grow",),
+ 0x808B2158:("EnDekubaba_SetupRetract",),
+ 0x808B2240:("EnDekubaba_Retract",),
+ 0x808B2608:("EnDekubaba_SetupDecideLunge",),
+ 0x808B2660:("EnDekubaba_DecideLunge",),
+ 0x808B2890:("EnDekubaba_SetupPrepareLunge",),
+ 0x808B28B4:("EnDekubaba_PrepareLunge",),
+ 0x808B2980:("EnDekubaba_SetupLunge",),
+ 0x808B29C4:("EnDekubaba_Lunge",),
+ 0x808B2C40:("EnDekubaba_SetupPullBack",),
+ 0x808B2CB8:("EnDekubaba_PullBack",),
+ 0x808B3044:("EnDekubaba_SetupRecover",),
+ 0x808B3078:("EnDekubaba_Recover",),
+ 0x808B3170:("EnDekubaba_SetupHit",),
+ 0x808B3280:("EnDekubaba_Hit",),
+ 0x808B3390:("EnDekubaba_SetupPrunedSomersaultDie",),
+ 0x808B3404:("EnDekubaba_PrunedSomersaultDie",),
+ 0x808B3768:("EnDekubaba_SetupShrinkDie",),
+ 0x808B37E8:("EnDekubaba_ShrinkDie",),
+ 0x808B39AC:("EnDekubaba_SetupStunnedVertical",),
+ 0x808B3B48:("EnDekubaba_StunnedVertical",),
+ 0x808B3BE4:("EnDekubaba_SetupSway",),
+ 0x808B3C50:("EnDekubaba_Sway",),
+ 0x808B3D74:("EnDekubaba_SetupFrozen",),
+ 0x808B3DA8:("EnDekubaba_Frozen",),
+ 0x808B3E40:("EnDekubaba_SetupDeadStickDrop",),
+ 0x808B3EE8:("EnDekubaba_DeadStickDrop",),
+ 0x808B3F50:("EnDekubaba_UpdateDamage",),
0x808B42FC:("EnDekubaba_Update",),
- 0x808B4548:("func_808B4548",),
- 0x808B465C:("func_808B465C",),
- 0x808B48FC:("func_808B48FC",),
- 0x808B49C8:("func_808B49C8",),
- 0x808B4ABC:("func_808B4ABC",),
+ 0x808B4548:("EnDekubaba_DrawStemRetracted",),
+ 0x808B465C:("EnDekubaba_DrawStemExtended",),
+ 0x808B48FC:("EnDekubaba_DrawStemBasePruned",),
+ 0x808B49C8:("EnDekubaba_DrawShadow",),
+ 0x808B4ABC:("EnDekubaba_PostLimbDraw",),
0x808B4AF8:("EnDekubaba_Draw",),
0x808B5230:("EnMFire1_Init",),
0x808B5294:("EnMFire1_Destroy",),
@@ -6675,33 +6675,33 @@
0x808ED3F4:("func_808ED3F4",),
0x808F1200:("EnKarebaba_Init",),
0x808F1334:("EnKarebaba_Destroy",),
- 0x808F1374:("func_808F1374",),
- 0x808F13FC:("func_808F13FC",),
- 0x808F152C:("func_808F152C",),
- 0x808F155C:("func_808F155C",),
- 0x808F15B0:("func_808F15B0",),
- 0x808F1648:("func_808F1648",),
- 0x808F169C:("func_808F169C",),
- 0x808F16FC:("func_808F16FC",),
- 0x808F1778:("func_808F1778",),
- 0x808F1878:("func_808F1878",),
- 0x808F190C:("func_808F190C",),
- 0x808F1A3C:("func_808F1A3C",),
- 0x808F1A58:("func_808F1A58",),
- 0x808F1BF8:("func_808F1BF8",),
- 0x808F1C84:("func_808F1C84",),
- 0x808F1FAC:("func_808F1FAC",),
- 0x808F200C:("func_808F200C",),
- 0x808F20FC:("func_808F20FC",),
- 0x808F21A4:("func_808F21A4",),
- 0x808F220C:("func_808F220C",),
- 0x808F228C:("func_808F228C",),
- 0x808F238C:("func_808F238C",),
- 0x808F241C:("func_808F241C",),
- 0x808F24F8:("func_808F24F8",),
- 0x808F254C:("func_808F254C",),
+ 0x808F1374:("EnKarebaba_SpawnIceEffects",),
+ 0x808F13FC:("EnKarebaba_SetDamageEffects",),
+ 0x808F152C:("EnKarebaba_ResetColliders",),
+ 0x808F155C:("EnKarebaba_SetupGrow",),
+ 0x808F15B0:("EnKarebaba_Grow",),
+ 0x808F1648:("EnKarebaba_SetupIdle",),
+ 0x808F169C:("EnKarebaba_Idle",),
+ 0x808F16FC:("EnKarebaba_SetupAwaken",),
+ 0x808F1778:("EnKarebaba_Awaken",),
+ 0x808F1878:("EnKarebaba_SetupUpright",),
+ 0x808F190C:("EnKarebaba_Upright",),
+ 0x808F1A3C:("EnKarebaba_SetupSpin",),
+ 0x808F1A58:("EnKarebaba_Spin",),
+ 0x808F1BF8:("EnKarebaba_SetupDying",),
+ 0x808F1C84:("EnKarebaba_Dying",),
+ 0x808F1FAC:("EnKarebaba_SetupShrinkDie",),
+ 0x808F200C:("EnKarebaba_ShrinkDie",),
+ 0x808F20FC:("EnKarebaba_SetupDeadItemDrop",),
+ 0x808F21A4:("EnKarebaba_DeadItemDrop",),
+ 0x808F220C:("EnKarebaba_SetupRetract",),
+ 0x808F228C:("EnKarebaba_Retract",),
+ 0x808F238C:("EnKarebaba_SetupDead",),
+ 0x808F241C:("EnKarebaba_Regrow",),
+ 0x808F24F8:("EnKarebaba_SetupRegrow",),
+ 0x808F254C:("EnKarebaba_Dead",),
0x808F25A4:("EnKarebaba_Update",),
- 0x808F280C:("func_808F280C",),
+ 0x808F280C:("EnKarebaba_DrawShadow",),
0x808F28F8:("EnKarebaba_Draw",),
0x808F30B0:("EnIn_ChangeAnim",),
0x808F3178:("func_808F3178",),
@@ -7124,7 +7124,7 @@
0x8092C86C:("func_8092C86C",),
0x8092C934:("func_8092C934",),
0x8092C9BC:("func_8092C9BC",),
- 0x8092CA74:("func_8092CA74",),
+ 0x8092CA74:("EnDns_GetCueType",),
0x8092CAD0:("func_8092CAD0",),
0x8092CB98:("func_8092CB98",),
0x8092CC68:("func_8092CC68",),
@@ -8354,10 +8354,10 @@
0x8098BFB8:("EnDg_OverrideLimbDraw",),
0x8098BFD4:("EnDg_PostLimbDraw",),
0x8098C06C:("EnDg_Draw",),
- 0x8098CA20:("func_8098CA20",),
- 0x8098CAD0:("func_8098CAD0",),
- 0x8098CB70:("func_8098CB70",),
- 0x8098CBDC:("func_8098CBDC",),
+ 0x8098CA20:("EnSi_UpdateCollision",),
+ 0x8098CAD0:("EnSi_GiveToken",),
+ 0x8098CB70:("EnSi_Wait",),
+ 0x8098CBDC:("EnSi_DraggedByHookshot",),
0x8098CC18:("EnSi_Init",),
0x8098CC98:("EnSi_Destroy",),
0x8098CCC4:("EnSi_Update",),
@@ -8682,7 +8682,7 @@
0x809A20FC:("EnMm2_WaitForRead",),
0x809A2194:("EnMm2_Update",),
0x809A21B8:("EnMm2_Draw",),
- 0x809A2B60:("DoorSpiral_SetupAction",),
+ 0x809A2B60:("func_809A2B60",),
0x809A2B70:("func_809A2B70",),
0x809A2BF8:("func_809A2BF8",),
0x809A2C78:("DoorSpiral_Init",),
@@ -9125,8 +9125,8 @@
0x809CA27C:("BgIcicle_Draw",),
0x809CA3F0:("EnSyatekiCrow_Init",),
0x809CA5A8:("EnSyatekiCrow_Destroy",),
- 0x809CA5D4:("EnSyatekiCrow_SetupWaitForSpawn",),
- 0x809CA67C:("EnSyatekiCrow_WaitForSpawn",),
+ 0x809CA5D4:("EnSyatekiCrow_SetupWaitForSignal",),
+ 0x809CA67C:("EnSyatekiCrow_WaitForSignal",),
0x809CA71C:("EnSyatekiCrow_SetupWaitToMove",),
0x809CA840:("EnSyatekiCrow_WaitToMove",),
0x809CA8E4:("EnSyatekiCrow_Fly",),
@@ -9876,21 +9876,21 @@
0x80A1FC50:("DmHina_Draw",),
0x80A1FE50:("EnSyatekiWf_Init",),
0x80A200A0:("EnSyatekiWf_Destroy",),
- 0x80A200E0:("func_80A200E0",),
- 0x80A201CC:("func_80A201CC",),
- 0x80A20284:("func_80A20284",),
- 0x80A2030C:("func_80A2030C",),
- 0x80A20320:("func_80A20320",),
- 0x80A20378:("func_80A20378",),
- 0x80A203DC:("func_80A203DC",),
- 0x80A20670:("func_80A20670",),
- 0x80A206DC:("func_80A206DC",),
- 0x80A20710:("func_80A20710",),
- 0x80A2075C:("func_80A2075C",),
- 0x80A2079C:("func_80A2079C",),
- 0x80A20800:("func_80A20800",),
- 0x80A20858:("func_80A20858",),
- 0x80A208F8:("func_80A208F8",),
+ 0x80A200E0:("EnSyatekiWf_InitPathStart",),
+ 0x80A201CC:("EnSyatekiWf_SetupWaitForSignal",),
+ 0x80A20284:("EnSyatekiWf_WaitForSignal",),
+ 0x80A2030C:("EnSyatekiWf_SetupWaitToMove",),
+ 0x80A20320:("EnSyatekiWf_WaitToMove",),
+ 0x80A20378:("EnSyatekiWf_SetupRun",),
+ 0x80A203DC:("EnSyatekiWf_Run",),
+ 0x80A20670:("EnSyatekiWf_SetupJump",),
+ 0x80A206DC:("EnSyatekiWf_Jump",),
+ 0x80A20710:("EnSyatekiWf_SetupLand",),
+ 0x80A2075C:("EnSyatekiWf_Land",),
+ 0x80A2079C:("EnSyatekiWf_SetupHowl",),
+ 0x80A20800:("EnSyatekiWf_Howl",),
+ 0x80A20858:("EnSyatekiWf_SetupDead",),
+ 0x80A208F8:("EnSyatekiWf_Dead",),
0x80A20A50:("EnSyatekiWf_Update",),
0x80A20CF4:("EnSyatekiWf_OverrideLimbDraw",),
0x80A20D10:("EnSyatekiWf_PostLimbDraw",),
@@ -10063,10 +10063,10 @@
0x80A2B390:("BgDblueMovebg_Draw",),
0x80A2BC00:("EnSyatekiDekunuts_Init",),
0x80A2BE28:("EnSyatekiDekunuts_Destroy",),
- 0x80A2BE54:("EnSyatekiDekunuts_SetupWaitForSpawn",),
- 0x80A2BF18:("EnSyatekiDekunuts_WaitForSpawn",),
- 0x80A2BFC4:("EnSyatekiDekunuts_SetupSpawn",),
- 0x80A2C0F8:("EnSyatekiDekunuts_Spawn",),
+ 0x80A2BE54:("EnSyatekiDekunuts_SetupWaitForSignal",),
+ 0x80A2BF18:("EnSyatekiDekunuts_WaitForSignal",),
+ 0x80A2BFC4:("EnSyatekiDekunuts_SetupWaitToStart",),
+ 0x80A2C0F8:("EnSyatekiDekunuts_WaitToStart",),
0x80A2C150:("EnSyatekiDekunuts_SetupWaitToEmerge",),
0x80A2C168:("EnSyatekiDekunuts_WaitToEmerge",),
0x80A2C1AC:("EnSyatekiDekunuts_SetupEmerge",),
@@ -10126,43 +10126,43 @@
0x80A2EBE8:("DmSa_Draw",),
0x80A2EDA0:("EnSlime_Init",),
0x80A2EF80:("EnSlime_Destroy",),
- 0x80A2EFAC:("func_80A2EFAC",),
- 0x80A2F028:("func_80A2F028",),
- 0x80A2F0A8:("func_80A2F0A8",),
- 0x80A2F110:("func_80A2F110",),
- 0x80A2F140:("func_80A2F140",),
- 0x80A2F180:("func_80A2F180",),
- 0x80A2F1A4:("func_80A2F1A4",),
- 0x80A2F354:("func_80A2F354",),
- 0x80A2F418:("func_80A2F418",),
- 0x80A2F684:("func_80A2F684",),
- 0x80A2F6CC:("func_80A2F6CC",),
- 0x80A2F8B4:("func_80A2F8B4",),
- 0x80A2F8E0:("func_80A2F8E0",),
- 0x80A2F9A0:("func_80A2F9A0",),
- 0x80A2FA88:("func_80A2FA88",),
- 0x80A2FB60:("func_80A2FB60",),
- 0x80A2FBA0:("func_80A2FBA0",),
- 0x80A2FD94:("func_80A2FD94",),
- 0x80A2FE38:("func_80A2FE38",),
- 0x80A30018:("func_80A30018",),
- 0x80A30344:("func_80A30344",),
- 0x80A30454:("func_80A30454",),
- 0x80A304B8:("func_80A304B8",),
- 0x80A3072C:("func_80A3072C",),
- 0x80A30778:("func_80A30778",),
- 0x80A30820:("func_80A30820",),
- 0x80A30924:("func_80A30924",),
- 0x80A30944:("func_80A30944",),
- 0x80A309C8:("func_80A309C8",),
- 0x80A30A20:("func_80A30A20",),
- 0x80A30A90:("func_80A30A90",),
- 0x80A30AE4:("func_80A30AE4",),
- 0x80A30BE0:("func_80A30BE0",),
- 0x80A30C2C:("func_80A30C2C",),
- 0x80A30C68:("func_80A30C68",),
- 0x80A30CEC:("func_80A30CEC",),
- 0x80A30F98:("func_80A30F98",),
+ 0x80A2EFAC:("EnSlime_Freeze",),
+ 0x80A2F028:("EnSlime_Thaw",),
+ 0x80A2F0A8:("EnSlime_Blink",),
+ 0x80A2F110:("EnSlime_SetupInitializeIdle",),
+ 0x80A2F140:("EnSlime_InitializeIdle",),
+ 0x80A2F180:("EnSlime_SetupIdle",),
+ 0x80A2F1A4:("EnSlime_Idle",),
+ 0x80A2F354:("EnSlime_SetupMoveInDirection",),
+ 0x80A2F418:("EnSlime_MoveInDirection",),
+ 0x80A2F684:("EnSlime_SetupMoveToHome",),
+ 0x80A2F6CC:("EnSlime_MoveToHome",),
+ 0x80A2F8B4:("EnSlime_SetupTurnToPlayer",),
+ 0x80A2F8E0:("EnSlime_TurnToPlayer",),
+ 0x80A2F9A0:("EnSlime_SetupJump",),
+ 0x80A2FA88:("EnSlime_Jump",),
+ 0x80A2FB60:("EnSlime_SetupLand",),
+ 0x80A2FBA0:("EnSlime_Land",),
+ 0x80A2FD94:("EnSlime_SetupReactToBluntHit",),
+ 0x80A2FE38:("EnSlime_ReactToBluntHit",),
+ 0x80A30018:("EnSlime_SetupDamaged",),
+ 0x80A30344:("EnSlime_Damaged",),
+ 0x80A30454:("EnSlime_SetupDead",),
+ 0x80A304B8:("EnSlime_Dead",),
+ 0x80A3072C:("EnSlime_SnapIceBlockPosition",),
+ 0x80A30778:("EnSlime_SetupSpawnIceBlock",),
+ 0x80A30820:("EnSlime_SpawnIceBlock",),
+ 0x80A30924:("EnSlime_SetupIceBlock",),
+ 0x80A30944:("EnSlime_IceBlock",),
+ 0x80A309C8:("EnSlime_SetupStun",),
+ 0x80A30A20:("EnSlime_Stun",),
+ 0x80A30A90:("EnSlime_SetupIceBlockThaw",),
+ 0x80A30AE4:("EnSlime_IceBlockThaw",),
+ 0x80A30BE0:("EnSlime_SetupWaitForRevive",),
+ 0x80A30C2C:("EnSlime_WaitForRevive",),
+ 0x80A30C68:("EnSlime_SetupRevive",),
+ 0x80A30CEC:("EnSlime_Revive",),
+ 0x80A30F98:("EnSlime_UpdateDamage",),
0x80A311E8:("EnSlime_Update",),
0x80A3148C:("EnSlime_Draw",),
0x80A32210:("EnPr_Init",),
@@ -11108,48 +11108,48 @@
0x80A7C5EC:("ObjEtcetera_Update",),
0x80A7C690:("ObjEtcetera_DrawIdle",),
0x80A7C718:("ObjEtcetera_DrawAnimated",),
- 0x80A7C990:("func_80A7C990",),
- 0x80A7CA18:("func_80A7CA18",),
- 0x80A7CBC4:("func_80A7CBC4",),
- 0x80A7CD08:("func_80A7CD08",),
+ 0x80A7C990:("EnEgol_ChangeAnim",),
+ 0x80A7CA18:("EnEgol_FootstepEffects",),
+ 0x80A7CBC4:("EnEgol_DestroyBlocks",),
+ 0x80A7CD08:("EnEgol_GetWaypoint",),
0x80A7CD60:("EnEgol_Init",),
0x80A7D0F0:("EnEgol_Destroy",),
- 0x80A7D140:("func_80A7D140",),
- 0x80A7D168:("func_80A7D168",),
- 0x80A7D1E4:("func_80A7D1E4",),
- 0x80A7D240:("func_80A7D240",),
- 0x80A7D27C:("func_80A7D27C",),
- 0x80A7D2C4:("func_80A7D2C4",),
- 0x80A7D710:("func_80A7D710",),
- 0x80A7D780:("func_80A7D780",),
- 0x80A7DAAC:("func_80A7DAAC",),
- 0x80A7DAF0:("func_80A7DAF0",),
- 0x80A7E2E8:("func_80A7E2E8",),
- 0x80A7E344:("func_80A7E344",),
- 0x80A7E478:("func_80A7E478",),
- 0x80A7E4B4:("func_80A7E4B4",),
- 0x80A7E7EC:("func_80A7E7EC",),
- 0x80A7E820:("func_80A7E820",),
- 0x80A7E924:("func_80A7E924",),
- 0x80A7E970:("func_80A7E970",),
- 0x80A7E9D0:("func_80A7E9D0",),
- 0x80A7EA28:("func_80A7EA28",),
- 0x80A7EA88:("func_80A7EA88",),
- 0x80A7EAD8:("func_80A7EAD8",),
- 0x80A7EB14:("func_80A7EB14",),
- 0x80A7EB54:("func_80A7EB54",),
- 0x80A7EB90:("func_80A7EB90",),
- 0x80A7EBDC:("func_80A7EBDC",),
- 0x80A7EC84:("func_80A7EC84",),
- 0x80A7ED14:("func_80A7ED14",),
- 0x80A7EFB8:("func_80A7EFB8",),
+ 0x80A7D140:("EnEgol_SetupWait",),
+ 0x80A7D168:("EnEgol_Wait",),
+ 0x80A7D1E4:("EnEgol_SetupStand",),
+ 0x80A7D240:("EnEgol_Stand",),
+ 0x80A7D27C:("EnEgol_SetupWalk",),
+ 0x80A7D2C4:("EnEgol_Walk",),
+ 0x80A7D710:("EnEgol_SetupRetreat",),
+ 0x80A7D780:("EnEgol_Retreat",),
+ 0x80A7DAAC:("EnEgol_SetupLaser",),
+ 0x80A7DAF0:("EnEgol_Laser",),
+ 0x80A7E2E8:("EnEgol_SetupStop",),
+ 0x80A7E344:("EnEgol_Stop",),
+ 0x80A7E478:("EnEgol_SetupSlam",),
+ 0x80A7E4B4:("EnEgol_Slam",),
+ 0x80A7E7EC:("EnEgol_SetupPunch",),
+ 0x80A7E820:("EnEgol_Punch",),
+ 0x80A7E924:("EnEgol_SetupSlamWait",),
+ 0x80A7E970:("EnEgol_SlamWait",),
+ 0x80A7E9D0:("EnEgol_SetupStunned",),
+ 0x80A7EA28:("EnEgol_Stunned",),
+ 0x80A7EA88:("EnEgol_SetupStunEnd",),
+ 0x80A7EAD8:("EnEgol_StunEnd",),
+ 0x80A7EB14:("EnEgol_SetupSlamEnd",),
+ 0x80A7EB54:("EnEgol_SlamEnd",),
+ 0x80A7EB90:("EnEgol_SetupDamaged",),
+ 0x80A7EBDC:("EnEgol_Damaged",),
+ 0x80A7EC84:("EnEgol_StartDeathCutscene",),
+ 0x80A7ED14:("EnEgol_Death",),
+ 0x80A7EFB8:("EnEgol_CollisionCheck",),
0x80A7F354:("EnEgol_Update",),
- 0x80A7F8E8:("func_80A7F8E8",),
- 0x80A7FAFC:("func_80A7FAFC",),
+ 0x80A7F8E8:("EnEgol_OverrideLimbDraw",),
+ 0x80A7FAFC:("EnEgol_PostLimbDraw",),
0x80A7FFB8:("EnEgol_Draw",),
- 0x80A80508:("func_80A80508",),
- 0x80A80750:("func_80A80750",),
- 0x80A80904:("func_80A80904",),
+ 0x80A80508:("EnEgol_SpawnEffect",),
+ 0x80A80750:("EnEgol_UpdateEffects",),
+ 0x80A80904:("EnEgol_DrawEffects",),
0x80A811D0:("func_80A811D0",),
0x80A8120C:("func_80A8120C",),
0x80A81288:("func_80A81288",),
@@ -11339,8 +11339,8 @@
0x80A90478:("EnTest5_HandleBottleAction",),
0x80A905A4:("EnTest5_Update",),
0x80A90730:("func_80A90730",),
- 0x80A90C08:("func_80A90C08",),
- 0x80A90C34:("func_80A90C34",),
+ 0x80A90C08:("EnTest6_EnableMotionBlur",),
+ 0x80A90C34:("EnTest6_DisableMotionBlur",),
0x80A90C54:("func_80A90C54",),
0x80A90D20:("func_80A90D20",),
0x80A90D34:("func_80A90D34",),
@@ -11409,13 +11409,13 @@
0x80A98F94:("func_80A98F94",),
0x80A99EA0:("EnEstone_Init",),
0x80A9A1B0:("EnEstone_Destroy",),
- 0x80A9A1DC:("func_80A9A1DC",),
- 0x80A9A4B0:("func_80A9A4B0",),
+ 0x80A9A1DC:("EnEstone_Active",),
+ 0x80A9A4B0:("EnEstone_Inactive",),
0x80A9A4E0:("EnEstone_Update",),
0x80A9A600:("EnEstone_Draw",),
- 0x80A9A774:("func_80A9A774",),
- 0x80A9A870:("func_80A9A870",),
- 0x80A9A9C0:("func_80A9A9C0",),
+ 0x80A9A774:("EnEstone_SpawnEffect",),
+ 0x80A9A870:("EnEstone_UpdateEffects",),
+ 0x80A9A9C0:("EnEstone_DrawEffects",),
0x80A9ACD0:("func_80A9ACD0",),
0x80A9ACF0:("func_80A9ACF0",),
0x80A9AD18:("func_80A9AD18",),
@@ -11794,14 +11794,14 @@
0x80AB9C4C:("func_80AB9C4C",),
0x80ABA7A0:("EnEgblock_Init",),
0x80ABA868:("EnEgblock_Destroy",),
- 0x80ABA8A4:("func_80ABA8A4",),
- 0x80ABA988:("func_80ABA988",),
- 0x80ABA9B8:("func_80ABA9B8",),
+ 0x80ABA8A4:("EnEgblock_Active",),
+ 0x80ABA988:("EnEgblock_Inactive",),
+ 0x80ABA9B8:("EnEgblock_DoNothing",),
0x80ABA9C8:("EnEgblock_Update",),
0x80ABAA14:("EnEgblock_Draw",),
- 0x80ABAAF4:("func_80ABAAF4",),
- 0x80ABACB4:("func_80ABACB4",),
- 0x80ABAE64:("func_80ABAE64",),
+ 0x80ABAAF4:("EnEgblock_SpawnEffect",),
+ 0x80ABACB4:("EnEgblock_UpdateEffects",),
+ 0x80ABAE64:("EnEgblock_DrawEffects",),
0x80ABB0E0:("EnGuardNuts_Init",),
0x80ABB1E4:("EnGuardNuts_Destroy",),
0x80ABB210:("EnGuardNuts_ChangeAnim",),
@@ -12021,21 +12021,21 @@
0x80AC9D10:("ObjOcarinalift_Draw",),
0x80AC9EA0:("EnTimeTag_Init",),
0x80AC9FC4:("EnTimeTag_Destroy",),
- 0x80AC9FD4:("func_80AC9FD4",),
- 0x80AC9FE4:("func_80AC9FE4",),
- 0x80ACA0A8:("func_80ACA0A8",),
- 0x80ACA12C:("func_80ACA12C",),
- 0x80ACA184:("func_80ACA184",),
- 0x80ACA208:("func_80ACA208",),
- 0x80ACA268:("func_80ACA268",),
- 0x80ACA348:("func_80ACA348",),
- 0x80ACA3C0:("func_80ACA3C0",),
- 0x80ACA418:("func_80ACA418",),
- 0x80ACA5F8:("func_80ACA5F8",),
- 0x80ACA714:("func_80ACA714",),
- 0x80ACA724:("func_80ACA724",),
- 0x80ACA7C4:("func_80ACA7C4",),
- 0x80ACA840:("func_80ACA840",),
+ 0x80AC9FD4:("EnTimeTag_RooftopOath_DoNothing",),
+ 0x80AC9FE4:("EnTimeTag_RooftopOath_Cutscene",),
+ 0x80ACA0A8:("EnTimeTag_RooftopOath_Wait",),
+ 0x80ACA12C:("EnTimeTag_SoaringEngraving_GetSong",),
+ 0x80ACA184:("EnTimeTag_SoaringEngraving_StartCutscene",),
+ 0x80ACA208:("EnTimeTag_SoaringEngraving_SubsequentInteraction",),
+ 0x80ACA268:("EnTimeTag_SoaringEngraving_Wait",),
+ 0x80ACA348:("EnTimeTag_Diary_AfterOcarina",),
+ 0x80ACA3C0:("EnTimeTag_Diary_TeachEvanSongSnippets",),
+ 0x80ACA418:("EnTimeTag_Diary_Cutscene",),
+ 0x80ACA5F8:("EnTimeTag_Diary_Wait",),
+ 0x80ACA714:("EnTimeTag_KickOut_DoNothing",),
+ 0x80ACA724:("EnTimeTag_KickOut_Transition",),
+ 0x80ACA7C4:("EnTimeTag_KickOut_WaitForTrigger",),
+ 0x80ACA840:("EnTimeTag_KickOut_WaitForTime",),
0x80ACA9AC:("EnTimeTag_Update",),
0x80ACAB10:("func_80ACAB10",),
0x80ACABA8:("func_80ACABA8",),
@@ -12135,21 +12135,21 @@
0x80AD02FC:("EnFuKago_Update",),
0x80AD0340:("func_80AD0340",),
0x80AD04A4:("EnFuKago_Draw",),
- 0x80AD0830:("func_80AD0830",),
- 0x80AD08B0:("func_80AD08B0",),
- 0x80AD0998:("func_80AD0998",),
- 0x80AD0A24:("func_80AD0A24",),
- 0x80AD0AB0:("func_80AD0AB0",),
- 0x80AD0B38:("func_80AD0B38",),
- 0x80AD0E10:("func_80AD0E10",),
- 0x80AD10FC:("func_80AD10FC",),
- 0x80AD1398:("func_80AD1398",),
- 0x80AD144C:("func_80AD144C",),
- 0x80AD14C8:("func_80AD14C8",),
- 0x80AD1634:("func_80AD1634",),
- 0x80AD16A8:("func_80AD16A8",),
- 0x80AD19A0:("func_80AD19A0",),
- 0x80AD1A4C:("EnOsn_Idle",),
+ 0x80AD0830:("EnOsn_UpdateCollider",),
+ 0x80AD08B0:("EnOsn_GetMaskText",),
+ 0x80AD0998:("EnOsn_TurnAround",),
+ 0x80AD0A24:("EnOsn_LookFromMask",),
+ 0x80AD0AB0:("EnOsn_FadeOut",),
+ 0x80AD0B38:("EnOsn_GetInitialMaskText",),
+ 0x80AD0E10:("EnOsn_GetInitialText",),
+ 0x80AD10FC:("EnOsn_HandleConversation",),
+ 0x80AD1398:("EnOsn_InitCutscene",),
+ 0x80AD144C:("EnOsn_ChooseAction",),
+ 0x80AD14C8:("EnOsn_Idle",),
+ 0x80AD1634:("EnOsn_StartCutscene",),
+ 0x80AD16A8:("EnOsn_HandleCsAction",),
+ 0x80AD19A0:("EnOsn_Talk",),
+ 0x80AD1A4C:("EnOsn_DoNothing",),
0x80AD1A5C:("EnOsn_Init",),
0x80AD1C88:("EnOsn_Destroy",),
0x80AD1CC8:("EnOsn_Update",),
@@ -12330,15 +12330,15 @@
0x80ADD7B4:("func_80ADD7B4",),
0x80ADD7CC:("EnSellnuts_TransformLimbDraw",),
0x80ADD8A4:("EnSellnuts_Draw",),
- 0x80ADE230:("func_80ADE230",),
+ 0x80ADE230:("BgDkjailIvy_IvyCutEffects",),
0x80ADE5A4:("BgDkjailIvy_Init",),
0x80ADE664:("BgDkjailIvy_Destroy",),
- 0x80ADE6AC:("func_80ADE6AC",),
- 0x80ADE6C0:("func_80ADE6C0",),
- 0x80ADE734:("func_80ADE734",),
- 0x80ADE748:("func_80ADE748",),
- 0x80ADE7E0:("func_80ADE7E0",),
- 0x80ADE7F4:("func_80ADE7F4",),
+ 0x80ADE6AC:("BgDkjailIvy_SetupWaitForCut",),
+ 0x80ADE6C0:("BgDkjailIvy_WaitForCut",),
+ 0x80ADE734:("BgDkjailIvy_SetupCutscene",),
+ 0x80ADE748:("BgDkjailIvy_BeginCutscene",),
+ 0x80ADE7E0:("BgDkjailIvy_SetupFadeOut",),
+ 0x80ADE7F4:("BgDkjailIvy_FadeOut",),
0x80ADE850:("BgDkjailIvy_Update",),
0x80ADE874:("BgDkjailIvy_Draw",),
0x80ADEA70:("ObjVisiblock_Init",),
@@ -12481,8 +12481,8 @@
0x80AE6E8C:("EnShn_Draw",),
0x80AE73A0:("EnStopheishi_Init",),
0x80AE74E0:("EnStopheishi_Destroy",),
- 0x80AE750C:("func_80AE750C",),
- 0x80AE75C8:("func_80AE75C8",),
+ 0x80AE750C:("EnStopHeishi_ChangeAnim",),
+ 0x80AE75C8:("EnStopheishi_UpdateHeadNormal",),
0x80AE7718:("func_80AE7718",),
0x80AE77D4:("func_80AE77D4",),
0x80AE795C:("func_80AE795C",),
@@ -12491,8 +12491,8 @@
0x80AE854C:("func_80AE854C",),
0x80AE85C4:("func_80AE85C4",),
0x80AE8680:("EnStopheishi_Update",),
- 0x80AE87A4:("func_80AE87A4",),
- 0x80AE87EC:("func_80AE87EC",),
+ 0x80AE87A4:("EnStopheishi_OverrideLimbDraw",),
+ 0x80AE87EC:("EnStopheishi_PostLimbDraw",),
0x80AE882C:("EnStopheishi_Draw",),
0x80AE8B70:("ObjBigicicle_Init",),
0x80AE8DA4:("ObjBigicicle_Destroy",),
@@ -12870,7 +12870,7 @@
0x80B01B30:("EnGiant_Init",),
0x80B01E74:("EnGiant_Destroy",),
0x80B01E84:("EnGiant_ChangeToStartOrLoopAnimation",),
- 0x80B01EE8:("EnGiant_ChangeAnimBasedOnCsAction",),
+ 0x80B01EE8:("EnGiant_ChangeAnimBasedOnCueId",),
0x80B020A0:("EnGiant_UpdateAlpha",),
0x80B0211C:("EnGiant_PlayAndUpdateAnimation",),
0x80B02234:("EnGiant_PlaySound",),
@@ -13136,8 +13136,8 @@
0x80B1861C:("EnSnowman_Dead",),
0x80B18908:("EnSnowman_SetupSplitDoNothing",),
0x80B189C4:("EnSnowman_SplitDoNothing",),
- 0x80B189D4:("EnSnowman_SetupMarkForDeath",),
- 0x80B18A04:("EnSnowman_MarkForDeath",),
+ 0x80B189D4:("EnSnowman_SetupKill",),
+ 0x80B18A04:("EnSnowman_Kill",),
0x80B18A28:("EnSnowman_CreateSplitEeno",),
0x80B18B30:("EnSnowman_AbsorbEeno",),
0x80B18BB4:("EnSnowman_SetupCombine",),
@@ -13616,7 +13616,7 @@
0x80B3C80C:("ObjGhaka_Update",),
0x80B3C858:("ObjGhaka_Draw",),
0x80B3CA20:("func_80B3CA20",),
- 0x80B3CC38:("func_80B3CC38",),
+ 0x80B3CC38:("EnDnp_ChangeAnim",),
0x80B3CC80:("func_80B3CC80",),
0x80B3CD1C:("func_80B3CD1C",),
0x80B3CDA4:("func_80B3CDA4",),
@@ -14252,30 +14252,30 @@
0x80B66BDC:("ObjHariko_Draw",),
0x80B66D30:("EnSth_Init",),
0x80B67010:("EnSth_Destroy",),
- 0x80B6703C:("func_80B6703C",),
- 0x80B670A4:("func_80B670A4",),
- 0x80B67148:("func_80B67148",),
- 0x80B671A0:("func_80B671A0",),
- 0x80B67208:("func_80B67208",),
- 0x80B672A4:("func_80B672A4",),
- 0x80B67348:("func_80B67348",),
- 0x80B67458:("func_80B67458",),
- 0x80B67540:("func_80B67540",),
- 0x80B677BC:("func_80B677BC",),
- 0x80B67838:("func_80B67838",),
- 0x80B678A8:("func_80B678A8",),
- 0x80B67958:("func_80B67958",),
- 0x80B67984:("func_80B67984",),
- 0x80B67AB4:("func_80B67AB4",),
- 0x80B67B50:("func_80B67B50",),
- 0x80B67C1C:("func_80B67C1C",),
- 0x80B67DA0:("func_80B67DA0",),
- 0x80B67E20:("func_80B67E20",),
- 0x80B67E78:("EnSth_Update",),
- 0x80B680A8:("func_80B680A8",),
- 0x80B681E8:("func_80B681E8",),
- 0x80B68310:("func_80B68310",),
- 0x80B6849C:("func_80B6849C",),
+ 0x80B6703C:("EnSth_CanSpeakToPlayer",),
+ 0x80B670A4:("EnSth_ChangeAnim",),
+ 0x80B67148:("EnSth_GetInitialPanicText",),
+ 0x80B671A0:("EnSth_HandlePanicConversation",),
+ 0x80B67208:("EnSth_PanicIdle",),
+ 0x80B672A4:("EnSth_GetInitialOceansideSpiderHouseText",),
+ 0x80B67348:("EnSth_PostOceanspiderhouseReward",),
+ 0x80B67458:("EnSth_GiveOceansideSpiderHouseReward",),
+ 0x80B67540:("EnSth_HandleOceansideSpiderHouseConversation",),
+ 0x80B677BC:("EnSth_OceansideSpiderHouseIdle",),
+ 0x80B67838:("EnSth_HandleMoonLookingConversation",),
+ 0x80B678A8:("EnSth_MoonLookingIdle",),
+ 0x80B67958:("EnSth_DefaultIdle",),
+ 0x80B67984:("EnSth_GetInitialSwampSpiderHouseText",),
+ 0x80B67AB4:("EnSth_TalkAfterSwampSpiderHouseGiveMask",),
+ 0x80B67B50:("EnSth_SwampSpiderHouseGiveMask",),
+ 0x80B67C1C:("EnSth_HandleSwampSpiderHouseConversation",),
+ 0x80B67DA0:("EnSth_SwampSpiderHouseIdle",),
+ 0x80B67E20:("EnSth_UpdateOceansideSpiderHouseWaitForTokens",),
+ 0x80B67E78:("EnSth_UpdateWaitForObject",),
+ 0x80B680A8:("EnSth_Update",),
+ 0x80B681E8:("EnSth_OverrideLimbDraw",),
+ 0x80B68310:("EnSth_PostLimbDraw",),
+ 0x80B6849C:("EnSth_Draw",),
0x80B6D660:("BgSinkaiKabe_Init",),
0x80B6D9EC:("BgSinkaiKabe_Destroy",),
0x80B6DA20:("BgSinkaiKabe_WaitForPlayer",),
@@ -14322,21 +14322,21 @@
0x80B6ED58:("BgKin2Fence_DoNothing",),
0x80B6ED68:("BgKin2Fence_Update",),
0x80B6ED8C:("BgKin2Fence_Draw",),
- 0x80B6EFA0:("func_80B6EFA0",),
- 0x80B6EFEC:("func_80B6EFEC",),
- 0x80B6F098:("func_80B6F098",),
+ 0x80B6EFA0:("BgKin2Picture_IsSkulltulaCollected",),
+ 0x80B6EFEC:("BgKin2Picture_SpawnSkulltula",),
+ 0x80B6F098:("BgKin2Picture_SpawnDust",),
0x80B6F2DC:("BgKin2Picture_Init",),
0x80B6F478:("BgKin2Picture_Destroy",),
- 0x80B6F4C0:("func_80B6F4C0",),
- 0x80B6F4D4:("func_80B6F4D4",),
- 0x80B6F5A4:("func_80B6F5A4",),
- 0x80B6F5B8:("func_80B6F5B8",),
- 0x80B6F61C:("func_80B6F61C",),
- 0x80B6F640:("func_80B6F640",),
- 0x80B6F708:("func_80B6F708",),
- 0x80B6F72C:("func_80B6F72C",),
- 0x80B6F8F8:("func_80B6F8F8",),
- 0x80B6F90C:("func_80B6F90C",),
+ 0x80B6F4C0:("BgKin2Picture_SetupWait",),
+ 0x80B6F4D4:("BgKin2Picture_Wait",),
+ 0x80B6F5A4:("BgKin2Picture_SetupPlayCutscene",),
+ 0x80B6F5B8:("BgKin2Picture_PlayCutscene",),
+ 0x80B6F61C:("BgKin2Picture_SetupShiver",),
+ 0x80B6F640:("BgKin2Picture_Shiver",),
+ 0x80B6F708:("BgKin2Picture_SetupFall",),
+ 0x80B6F72C:("BgKin2Picture_Fall",),
+ 0x80B6F8F8:("BgKin2Picture_SetupDoNothing",),
+ 0x80B6F90C:("BgKin2Picture_DoNothing",),
0x80B6F91C:("BgKin2Picture_Update",),
0x80B6F940:("BgKin2Picture_Draw",),
0x80B6FB30:("func_80B6FB30",),
@@ -14411,7 +14411,7 @@
0x80B73AE4:("EnJg_UpdateCollision",),
0x80B73B98:("EnJg_GetWalkingYRotation",),
0x80B73C58:("EnJg_ReachedPoint",),
- 0x80B73DF4:("EnJg_GetCutsceneForTeachingLullabyIntro",),
+ 0x80B73DF4:("EnJg_GetCsIdForTeachingLullabyIntro",),
0x80B73E3C:("EnJg_SetupGoronShrineCheer",),
0x80B73F1C:("EnJg_SetupTalk",),
0x80B7406C:("EnJg_Idle",),
@@ -14659,8 +14659,8 @@
0x80B85858:("func_80B85858",),
0x80B85900:("func_80B85900",),
0x80B85A00:("func_80B85A00",),
- 0x80B85E18:("func_80B85E18",),
- 0x80B85EA0:("func_80B85EA0",),
+ 0x80B85E18:("EnKaizoku_ChangeAnim",),
+ 0x80B85EA0:("EnKaizoku_ValidatePictograph",),
0x80B85F48:("func_80B85F48",),
0x80B85FA8:("func_80B85FA8",),
0x80B86804:("func_80B86804",),
@@ -14698,39 +14698,39 @@
0x80B8971C:("func_80B8971C",),
0x80B89A08:("func_80B89A08",),
0x80B8A0A0:("EnKaizoku_Update",),
- 0x80B8A318:("func_80B8A318",),
- 0x80B8A468:("func_80B8A468",),
- 0x80B8A6B0:("func_80B8A6B0",),
- 0x80B8A718:("func_80B8A718",),
+ 0x80B8A318:("EnKaizoku_OverrideLimbDraw",),
+ 0x80B8A468:("EnKaizoku_PostLimbDraw",),
+ 0x80B8A6B0:("EnKaizoku_TransformLimbDraw",),
+ 0x80B8A718:("EnKaizoku_Draw",),
0x80B8B2D0:("EnGe2_Init",),
0x80B8B504:("EnGe2_Destroy",),
- 0x80B8B514:("func_80B8B514",),
- 0x80B8B5AC:("func_80B8B5AC",),
- 0x80B8B6B4:("func_80B8B6B4",),
- 0x80B8B7A8:("func_80B8B7A8",),
- 0x80B8B848:("func_80B8B848",),
- 0x80B8B90C:("func_80B8B90C",),
- 0x80B8BA40:("func_80B8BA40",),
- 0x80B8BB3C:("func_80B8BB3C",),
- 0x80B8BC1C:("func_80B8BC1C",),
- 0x80B8BC78:("func_80B8BC78",),
- 0x80B8BCEC:("func_80B8BCEC",),
- 0x80B8BD38:("func_80B8BD38",),
- 0x80B8BD90:("func_80B8BD90",),
- 0x80B8BE08:("func_80B8BE08",),
- 0x80B8BF04:("func_80B8BF04",),
- 0x80B8BFC8:("func_80B8BFC8",),
- 0x80B8C048:("func_80B8C048",),
- 0x80B8C0B0:("func_80B8C0B0",),
- 0x80B8C13C:("func_80B8C13C",),
- 0x80B8C45C:("func_80B8C45C",),
- 0x80B8C59C:("func_80B8C59C",),
- 0x80B8C644:("func_80B8C644",),
- 0x80B8C9B8:("func_80B8C9B8",),
+ 0x80B8B514:("EnGe2_DetectPlayer",),
+ 0x80B8B5AC:("EnGe2_LookForPlayer",),
+ 0x80B8B6B4:("EnGe2_SetupPath",),
+ 0x80B8B7A8:("EnGe2_GetNextPath",),
+ 0x80B8B848:("EnGe2_SetupBlownAwayPath",),
+ 0x80B8B90C:("EnGe2_FollowPath",),
+ 0x80B8BA40:("EnGe2_FollowPathWithoutGravity",),
+ 0x80B8BB3C:("EnGe2_SpawnEffects",),
+ 0x80B8BC1C:("EnGe2_Scream",),
+ 0x80B8BC78:("EnGe2_ThrowPlayerOut",),
+ 0x80B8BCEC:("EnGe2_TurnToPlayerFast",),
+ 0x80B8BD38:("EnGe2_CapturePlayer",),
+ 0x80B8BD90:("EnGe2_SetupCapturePlayer",),
+ 0x80B8BE08:("EnGe2_Charge",),
+ 0x80B8BF04:("EnGe2_SetupCharge",),
+ 0x80B8BFC8:("EnGe2_SetupLookAround",),
+ 0x80B8C048:("EnGe2_Stunned",),
+ 0x80B8C0B0:("EnGe2_KnockedOut",),
+ 0x80B8C13C:("EnGe2_PatrolDuties",),
+ 0x80B8C45C:("EnGe2_LookAround",),
+ 0x80B8C59C:("EnGe2_Walk",),
+ 0x80B8C644:("EnGe2_PerformCutsceneActions",),
+ 0x80B8C9B8:("EnGe2_GuardStationary",),
0x80B8CAA8:("EnGe2_Update",),
- 0x80B8CC0C:("func_80B8CC0C",),
- 0x80B8CCB4:("func_80B8CCB4",),
- 0x80B8CCFC:("func_80B8CCFC",),
+ 0x80B8CC0C:("EnGe2_ValidatePictograph",),
+ 0x80B8CCB4:("EnGe2_OverrideLimbDraw",),
+ 0x80B8CCFC:("EnGe2_PostLimbDraw",),
0x80B8CD3C:("EnGe2_Draw",),
0x80B8D030:("EnMaYts_UpdateEyes",),
0x80B8D0BC:("EnMaYts_ChangeAnim",),
@@ -14954,15 +14954,15 @@
0x80B9A8E8:("ObjY2lift_Draw",),
0x80B9A980:("ObjY2shutter_Init",),
0x80B9A9EC:("ObjY2shutter_Destroy",),
- 0x80B9AA20:("func_80B9AA20",),
+ 0x80B9AA20:("ObjY2shutter_SetupOpen",),
0x80B9AA54:("ObjY2shutter_Update",),
0x80B9AE00:("ObjY2shutter_Draw",),
0x80B9AF50:("func_80B9AF50",),
0x80B9AFE0:("ObjBoat_Init",),
0x80B9B0F0:("ObjBoat_Destroy",),
- 0x80B9B124:("func_80B9B124",),
+ 0x80B9B124:("ObjBoat_SetRotations",),
0x80B9B1B8:("ObjBoat_Update",),
- 0x80B9B428:("func_80B9B428",),
+ 0x80B9B428:("ObjBoat_UpdateCutscene",),
0x80B9B628:("ObjBoat_Draw",),
0x80B9B6E0:("func_80B9B6E0",),
0x80B9B74C:("func_80B9B74C",),
@@ -15161,7 +15161,7 @@
0x80BA78F8:("EnRailgibud_PostLimbDraw",),
0x80BA79D4:("EnRailgibud_Draw",),
0x80BA7B6C:("EnRailgibud_InitCutsceneGibdo",),
- 0x80BA7C78:("EnRailgibud_InitActorActionCommand",),
+ 0x80BA7C78:("EnRailgibud_InitCueType",),
0x80BA7CF0:("EnRailgibud_SetupDoNothing",),
0x80BA7D04:("EnRailgibud_DoNothing",),
0x80BA7D14:("EnRailgibud_SetupSinkIntoGround",),
@@ -15251,26 +15251,26 @@
0x80BAE538:("EnSuttari_Draw",),
0x80BAEF70:("EnZod_Init",),
0x80BAF1C0:("EnZod_Destroy",),
- 0x80BAF1EC:("func_80BAF1EC",),
- 0x80BAF2B4:("func_80BAF2B4",),
- 0x80BAF338:("func_80BAF338",),
- 0x80BAF3E0:("func_80BAF3E0",),
- 0x80BAF4D8:("func_80BAF4D8",),
+ 0x80BAF1EC:("EnZod_HandleRoomConversation",),
+ 0x80BAF2B4:("EnZod_PlayerIsFacingTijo",),
+ 0x80BAF338:("EnZod_ChangeAnim",),
+ 0x80BAF3E0:("EnZod_UpdateAnimation",),
+ 0x80BAF4D8:("EnZod_UpdateInstruments",),
0x80BAF7CC:("func_80BAF7CC",),
- 0x80BAF99C:("func_80BAF99C",),
+ 0x80BAF99C:("EnZod_PlayDrumsSequence",),
0x80BAFA44:("func_80BAFA44",),
0x80BAFADC:("func_80BAFADC",),
0x80BAFB84:("func_80BAFB84",),
- 0x80BAFC00:("func_80BAFC00",),
- 0x80BAFC10:("func_80BAFC10",),
- 0x80BAFD00:("func_80BAFD00",),
+ 0x80BAFC00:("EnZod_DoNothing",),
+ 0x80BAFC10:("EnZod_Rehearse",),
+ 0x80BAFD00:("EnZod_SetupRehearse",),
0x80BAFDB4:("func_80BAFDB4",),
0x80BAFE34:("func_80BAFE34",),
0x80BAFF14:("func_80BAFF14",),
0x80BAFF84:("EnZod_Update",),
- 0x80BB0128:("func_80BB0128",),
- 0x80BB0170:("func_80BB0170",),
- 0x80BB01B0:("func_80BB01B0",),
+ 0x80BB0128:("EnZod_OverrideLimbDraw",),
+ 0x80BB0170:("EnZod_PostLimbDraw",),
+ 0x80BB01B0:("EnZod_DrawDrums",),
0x80BB03E8:("EnZod_Draw",),
0x80BB08E0:("EnKujiya_Init",),
0x80BB0998:("EnKujiya_Destroy",),
@@ -15451,9 +15451,9 @@
0x80BBF5F0:("EnSGoro_DrawUnrolled",),
0x80BBF6BC:("EnSGoro_DrawRolledUp",),
0x80BBF7BC:("EnSGoro_Draw",),
- 0x80BBFDB0:("func_80BBFDB0",),
- 0x80BBFE60:("func_80BBFE60",),
- 0x80BBFE8C:("func_80BBFE8C",),
+ 0x80BBFDB0:("EnNb_FindActor",),
+ 0x80BBFE60:("EnNb_UpdateSkelAnime",),
+ 0x80BBFE8C:("EnNb_ChangeAnim",),
0x80BBFF24:("func_80BBFF24",),
0x80BBFF90:("func_80BBFF90",),
0x80BBFFD4:("func_80BBFFD4",),
@@ -15470,17 +15470,17 @@
0x80BC0A18:("func_80BC0A18",),
0x80BC0B98:("func_80BC0B98",),
0x80BC0C0C:("func_80BC0C0C",),
- 0x80BC0C80:("func_80BC0C80",),
+ 0x80BC0C80:("EnNb_ProcessScheduleOutput",),
0x80BC0D08:("func_80BC0D08",),
- 0x80BC0D1C:("func_80BC0D1C",),
- 0x80BC0D84:("func_80BC0D84",),
+ 0x80BC0D1C:("EnNb_HandleSchedule",),
+ 0x80BC0D84:("EnNb_FollowSchedule",),
0x80BC0EAC:("func_80BC0EAC",),
0x80BC0F60:("EnNb_Init",),
0x80BC1080:("EnNb_Destroy",),
0x80BC10C0:("EnNb_Update",),
- 0x80BC1174:("func_80BC1174",),
- 0x80BC11B4:("func_80BC11B4",),
- 0x80BC1278:("func_80BC1278",),
+ 0x80BC1174:("EnNb_OverrideLimbDraw",),
+ 0x80BC11B4:("EnNb_PostLimbDraw",),
+ 0x80BC1278:("EnNb_TransformLimbDraw",),
0x80BC1374:("EnNb_Draw",),
0x80BC1900:("func_80BC1900",),
0x80BC192C:("func_80BC192C",),
@@ -15672,39 +15672,39 @@
0x80BCEF0C:("EffKamejimaWave_Draw",),
0x80BCF1D0:("EnHg_Init",),
0x80BCF328:("EnHg_Destroy",),
- 0x80BCF354:("func_80BCF354",),
- 0x80BCF398:("func_80BCF398",),
- 0x80BCF468:("func_80BCF468",),
- 0x80BCF4AC:("func_80BCF4AC",),
- 0x80BCF5F0:("func_80BCF5F0",),
- 0x80BCF634:("func_80BCF634",),
- 0x80BCF68C:("func_80BCF68C",),
- 0x80BCF6D0:("func_80BCF6D0",),
- 0x80BCF710:("func_80BCF710",),
- 0x80BCF778:("func_80BCF778",),
- 0x80BCF7D8:("func_80BCF7D8",),
- 0x80BCF88C:("func_80BCF88C",),
- 0x80BCF8A0:("func_80BCF8A0",),
- 0x80BCF93C:("func_80BCF93C",),
- 0x80BCF95C:("func_80BCF95C",),
- 0x80BCFC0C:("func_80BCFC0C",),
+ 0x80BCF354:("EnHg_SetupWait",),
+ 0x80BCF398:("EnHg_Wait",),
+ 0x80BCF468:("EnHg_SetupChasePlayer",),
+ 0x80BCF4AC:("EnHg_ChasePlayer",),
+ 0x80BCF5F0:("EnHg_SetupChasePlayerWait",),
+ 0x80BCF634:("EnHg_ChasePlayerWait",),
+ 0x80BCF68C:("EnHg_SetupReactToHit",),
+ 0x80BCF6D0:("EnHg_ReactToHit",),
+ 0x80BCF710:("EnHg_HandleTatlDialog",),
+ 0x80BCF778:("EnHg_PlayRedeadSfx",),
+ 0x80BCF7D8:("EnHg_UpdateCollision",),
+ 0x80BCF88C:("EnHg_SetupCutscene",),
+ 0x80BCF8A0:("EnHg_PlayCutscene",),
+ 0x80BCF93C:("EnHg_SetupCsAction",),
+ 0x80BCF95C:("EnHg_HandleCsAction",),
+ 0x80BCFC0C:("EnHg_WaitForPlayerAction",),
0x80BCFDC4:("EnHg_Update",),
0x80BCFE54:("EnHg_OverrideLimbDraw",),
0x80BCFE70:("EnHg_PostLimbDraw",),
0x80BCFEC4:("EnHg_Draw",),
0x80BD02B0:("EnHgo_Init",),
0x80BD03C0:("EnHgo_Destroy",),
- 0x80BD03EC:("func_80BD03EC",),
- 0x80BD0410:("func_80BD0410",),
- 0x80BD0420:("func_80BD0420",),
- 0x80BD0434:("func_80BD0434",),
- 0x80BD049C:("func_80BD049C",),
- 0x80BD04E0:("func_80BD04E0",),
+ 0x80BD03EC:("EnHgo_SetupDoNothing",),
+ 0x80BD0410:("EnHgo_DoNothing",),
+ 0x80BD0420:("EnHgo_SetupInitCollision",),
+ 0x80BD0434:("EnHgo_UpdateCollision",),
+ 0x80BD049C:("EnHgo_SetupTalk",),
+ 0x80BD04E0:("EnHgo_Talk",),
0x80BD064C:("EnHgo_SetupDialogueHandler",),
0x80BD0660:("EnHgo_DefaultDialogueHandler",),
- 0x80BD06FC:("func_80BD06FC",),
- 0x80BD0898:("func_80BD0898",),
- 0x80BD0B8C:("func_80BD0B8C",),
+ 0x80BD06FC:("EnHgo_HandlePlayerChoice",),
+ 0x80BD0898:("EnHgo_HandleCsAction",),
+ 0x80BD0B8C:("EnHgo_UpdateModel",),
0x80BD0C30:("EnHgo_Update",),
0x80BD0CF0:("EnHgo_OverrideLimbDraw",),
0x80BD0D38:("EnHgo_PostLimbDraw",),
@@ -16399,16 +16399,16 @@
0x80BFB0E0:("EnYb_PostLimbDrawXlu",),
0x80BFB14C:("EnYb_Draw",),
0x80BFB480:("EnRz_Init",),
- 0x80BFB780:("func_80BFB780",),
- 0x80BFB864:("func_80BFB864",),
+ 0x80BFB780:("EnRz_ActorShadowFunc",),
+ 0x80BFB864:("EnRz_ChangeAnim",),
0x80BFB9E4:("func_80BFB9E4",),
0x80BFBA1C:("func_80BFBA1C",),
- 0x80BFBA50:("func_80BFBA50",),
- 0x80BFBB44:("func_80BFBB44",),
- 0x80BFBC78:("func_80BFBC78",),
+ 0x80BFBA50:("EnRz_SetupPath",),
+ 0x80BFBB44:("EnRz_GetPathStatus",),
+ 0x80BFBC78:("EnRz_CanTalk",),
0x80BFBCEC:("func_80BFBCEC",),
- 0x80BFBD54:("func_80BFBD54",),
- 0x80BFBDA0:("func_80BFBDA0",),
+ 0x80BFBD54:("EnRz_UpdateSkelAnime",),
+ 0x80BFBDA0:("EnRz_FindSister",),
0x80BFBDFC:("func_80BFBDFC",),
0x80BFBE44:("EnRz_Destroy",),
0x80BFBE70:("func_80BFBE70",),
@@ -16425,10 +16425,10 @@
0x80BFC674:("func_80BFC674",),
0x80BFC728:("func_80BFC728",),
0x80BFC7E0:("func_80BFC7E0",),
- 0x80BFC8AC:("func_80BFC8AC",),
- 0x80BFC8F8:("func_80BFC8F8",),
+ 0x80BFC8AC:("EnRz_StopToThink",),
+ 0x80BFC8F8:("EnRz_Walk",),
0x80BFC9E4:("EnRz_Update",),
- 0x80BFCAD0:("func_80BFCAD0",),
+ 0x80BFCAD0:("EnRz_PostLimbDraw",),
0x80BFCB3C:("EnRz_Draw",),
0x80BFCFA0:("EnScopecoin_Spin",),
0x80BFCFB8:("EnScopecoin_CheckCollectible",),
@@ -16990,25 +16990,25 @@
0x80C1E84C:("EnEndingHero_Draw",),
0x80C1E9E0:("DmBal_Init",),
0x80C1EAB4:("DmBal_Destroy",),
- 0x80C1EAC4:("func_80C1EAC4",),
- 0x80C1EAD8:("func_80C1EAD8",),
+ 0x80C1EAC4:("DmBal_SetupDoNothing",),
+ 0x80C1EAD8:("DmBal_DoNothing",),
0x80C1EAE8:("func_80C1EAE8",),
0x80C1EC60:("func_80C1EC60",),
- 0x80C1ED0C:("func_80C1ED0C",),
- 0x80C1ED64:("func_80C1ED64",),
+ 0x80C1ED0C:("DmBal_UpdateEyes",),
+ 0x80C1ED64:("DmBal_SpawnPaper",),
0x80C1EDE4:("DmBal_Update",),
0x80C1EF80:("DmBal_OverrideLimbDraw",),
0x80C1F060:("DmBal_PostLimbDraw",),
0x80C1F078:("DmBal_Draw",),
0x80C1F3D0:("EnPaper_Init",),
0x80C1F45C:("EnPaper_Destroy",),
- 0x80C1F46C:("func_80C1F46C",),
- 0x80C1F480:("func_80C1F480",),
- 0x80C1F4E8:("func_80C1F4E8",),
- 0x80C1F4FC:("func_80C1F4FC",),
- 0x80C1F55C:("func_80C1F55C",),
- 0x80C1F6E0:("func_80C1F6E0",),
- 0x80C1F87C:("func_80C1F87C",),
+ 0x80C1F46C:("EnPaper_SetupSpreadConfettiGroup",),
+ 0x80C1F480:("EnPaper_SpreadConfettiGroup",),
+ 0x80C1F4E8:("EnPaper_SetupFlyConfettiGroup",),
+ 0x80C1F4FC:("EnPaper_FlyConfettiGroup",),
+ 0x80C1F55C:("EnPaper_InitConfettiPiece",),
+ 0x80C1F6E0:("EnPaper_FlyConfettiPiece",),
+ 0x80C1F87C:("EnPaper_UpdateWind",),
0x80C1F97C:("EnPaper_Update",),
0x80C1F9D0:("EnPaper_Draw",),
0x80C1FCF0:("EnHintSkb_Init",),
diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt
index f8023eb2c..855900bb2 100644
--- a/tools/disasm/variables.txt
+++ b/tools/disasm/variables.txt
@@ -285,15 +285,15 @@
0x800994D0:("D_800994D0","char","[]",0xc),
0x800994DC:("D_800994DC","char","[]",0x12),
0x800994F0:("D_800994F0","char","[]",0x1),
- 0x80099500:("sBootThreadInfo","StackEntry","",0x1c),
+ 0x80099500:("sBootStackInfo","StackEntry","",0x1c),
0x80099520:("sIdleThread","OSThread","",0x1b0),
0x800996D0:("sIdleThreadStack","u8","[1024]",0x400),
- 0x80099AD0:("sIdleThreadInfo","StackEntry","",0x1c),
- 0x80099AF0:("sBootThreadStack","u8","[1024]",0x400),
+ 0x80099AD0:("sIdleStackInfo","StackEntry","",0x1c),
+ 0x80099AF0:("sBootStack","u8","[1024]",0x400),
0x80099EF0:("gIrqMgr","IrqMgr","",0x280),
0x8009A170:("sIrqMgrStack","u8","[1280]",0x500),
0x8009A670:("sIrqMgrStackInfo","StackEntry","",0x1c),
- 0x8009A690:("gMainThread","OSThread","",0x1b0),
+ 0x8009A690:("sMainThread","OSThread","",0x1b0),
0x8009A840:("sMainStack","u8","[2304]",0x900),
0x8009B140:("sMainStackInfo","StackEntry","",0x1c),
0x8009B160:("sPiMgrCmdBuff","OSMesg","[50]",0xc8),
@@ -311,7 +311,7 @@
0x8009BE14:("sYaz0CurRomStart","u32","",0x4),
0x8009BE18:("sYaz0CurSize","u32","",0x4),
0x8009BE1C:("sYaz0MaxPtr","u8*","",0x4),
- 0x8009BE20:("D_8009BE20","u8*","",0x4),
+ 0x8009BE20:("gYaz0DecompressDstEnd","void*","",0x4),
0x8009BE30:("D_8009BE30","UNK_TYPE4","",0x4),
0x8009BE34:("D_8009BE34","UNK_TYPE4","",0x4),
0x8009BE38:("romInfoFaultClient","FaultClient","",0x10),
@@ -320,7 +320,7 @@
0x8009BE58:("faultCustomOptions","u32","",0x4),
0x8009BE5C:("faultCopyToLog","u32","",0x4),
0x8009BE60:("sFaultStack","u8","[1536]",0x600),
- 0x8009C460:("sFaultThreadInfo","StackEntry","",0x1c),
+ 0x8009C460:("sFaultStackInfo","StackEntry","",0x1c),
0x8009C480:("gFaultStruct","FaultThreadStruct","",0x848),
0x8009CCD0:("sFaultDrawerStruct","FaultDrawer","",0x3c),
0x8009CD10:("D_8009CD10","UNK_TYPE4","",0x4),
@@ -343,8 +343,8 @@
0x8009CF80:("__osThreadSave","OSThread","",0x1b0),
0x8009D130:("D_8009D130","OSPiHandle","",0x74),
0x8009D1A8:("D_8009D1A8","OSPiHandle","",0x74),
- 0x8009D220:("D_8009D220","OSThread","",0x1b0),
- 0x8009D3D0:("piManagerStack","u8","[4096]",0x1000),
+ 0x8009D220:("sPiMgrThread","OSThread","",0x1b0),
+ 0x8009D3D0:("sPiMgrStack","u8","[4096]",0x1000),
0x8009E3D0:("D_8009E3D0","OSMesgQueue","",0x18),
0x8009E3E8:("D_8009E3E8","OSMesg","[1]",0x4),
0x8009E3F0:("D_8009E3F0","OSMesg","[1]",0x4),
@@ -359,7 +359,7 @@
0x8009E5D0:("__osPfsPifRam","OSPifRam","",0x40),
0x8009E610:("CartRomHandle","OSPiHandle","",0x74),
0x8009E690:("viThread","OSThread","",0x1b0),
- 0x8009E840:("viThreadStack","u8","[4096]",0x1000),
+ 0x8009E840:("sViStack","u8","[4096]",0x1000),
0x8009F840:("viEventQueue","OSMesgQueue","",0x18),
0x8009F858:("viEventBuf","OSMesg","[5]",0x14),
0x8009F870:("viRetraceMsg","OSIoMesg","",0x18),
@@ -398,7 +398,7 @@
0x801AE2BC:("D_801AE2BC","UNK_TYPE4","",0x4),
0x801AE2CC:("D_801AE2CC","UNK_TYPE4","",0x4),
0x801AE2DC:("D_801AE2DC","UNK_TYPE4","",0x4),
- 0x801AE2F0:("sEffectShieldParticleVertices","F3DVertex","[4]",0x40),
+ 0x801AE2F0:("sEffShieldParticleVtx","Vtx","[4]",0x40),
0x801AE330:("sEffectInfoTable","EffectInfo","[5]",0x64),
0x801AE3A0:("sEffectSsInfo","EffectSsInfo","",0xc),
0x801AE3B0:("D_801AE3B0","Color_RGBA8","",0x4),
@@ -430,19 +430,19 @@
0x801AEC78:("sTimer","s32","",0x4),
0x801AEC80:("D_801AEC80","Color_RGBA8","",0x4),
0x801AEC84:("sTatlColorList","TatlColor","[13]",0x68),
- 0x801AECEC:("actorMovementScale","f32","",0x4),
+ 0x801AECEC:("sActorMovementScale","f32","",0x4),
0x801AECF0:("gTargetRanges","f32","[]",0x58),
0x801AED48:("D_801AED48","s16","[8]",0x10),
- 0x801AED58:("D_801AED58","UNK_TYPE4","",0x4),
+ 0x801AED58:("sCategoryFreezeMasks","UNK_TYPE4","",0x4),
0x801AED88:("actorDefaultHitColor","Color_RGBA8","",0x4),
0x801AED8C:("D_801AED8C","UNK_TYPE1","",0x1),
0x801AED98:("D_801AED98","Vec3f","",0xC),
0x801AEDA4:("D_801AEDA4","UNK_TYPE4","",0x4),
- 0x801AEDB0:("D_801AEDB0","UNK_TYPE1","",0x1),
- 0x801AEDD4:("D_801AEDD4","UNK_TYPE4","",0x4),
+ 0x801AEDB0:("sArrowDmgFlags","UNK_TYPE1","",0x1),
+ 0x801AEDD4:("sDoorLocksInfo","UNK_TYPE4","",0x4),
0x801AEE28:("D_801AEE28","UNK_TYPE4","",0x4),
0x801AEE30:("D_801AEE30","UNK_TYPE4","",0x4),
- 0x801AEE38:("D_801AEE38","struct_801AEE38","[14]",0x150),
+ 0x801AEE38:("sNpcTrackingPresets","NpcTrackingParams","[14]",0x150),
0x801AEF88:("D_801AEF88","UNK_TYPE1","",0x1),
0x801AEFA0:("D_801AEFA0","UNK_TYPE1","",0x1),
0x801AEFA8:("sElectricSparkTextures","UNK_TYPE1","",0x1),
@@ -451,90 +451,108 @@
0x801AEFC0:("D_801AEFC0","UNK_TYPE1","",0x1),
0x801AEFD0:("gActorOverlayTable","ActorOverlay","[ACTOR_ID_MAX]",0x5640),
0x801B4610:("gMaxActorId","s32","",0x4),
+ 0x801B4620:("sWallFlags","u32","",0x80),
+ 0x801B46A0:("sSurfaceSfxOffsets","u16","",0x1E),
+ 0x801B46C0:("sSurfaceMaterialProperties","u8","",0xF),
+ 0x801B46D0:("sSmallMemSceneIds","s16","",0x2),
+ 0x801B46D4:("sSceneMemList","BgCheckSceneMemEntry","",0x8),
0x801B46DC:("sSceneSubdivisionList","BgCheckSceneSubdivisionEntry","[3]",0x24),
0x801B4700:("sCustomDynapolyMem","BgSpecialSceneMaxObjects","[1]",0x8),
0x801B4708:("D_801B4708","UNK_TYPE1","",0x1),
- 0x801B4710:("D_801B4710","UNK_TYPE1","",0x1),
- 0x801B4738:("D_801B4738","UNK_TYPE1","",0x1),
- 0x801B4768:("D_801B4768","UNK_TYPE1","",0x1),
- 0x801B4798:("D_801B4798","UNK_TYPE1","",0x1),
- 0x801B47CC:("D_801B47CC","UNK_TYPE1","",0x1),
- 0x801B47F0:("D_801B47F0","UNK_TYPE1","",0x1),
- 0x801B4824:("D_801B4824","UNK_TYPE1","",0x1),
- 0x801B4848:("D_801B4848","UNK_TYPE1","",0x1),
- 0x801B486C:("D_801B486C","UNK_TYPE1","",0x1),
- 0x801B4890:("D_801B4890","UNK_TYPE1","",0x1),
- 0x801B48B0:("D_801B48B0","UNK_TYPE1","",0x1),
- 0x801B48D4:("D_801B48D4","UNK_TYPE1","",0x1),
- 0x801B48F8:("D_801B48F8","UNK_TYPE1","",0x1),
- 0x801B491C:("D_801B491C","UNK_TYPE1","",0x1),
- 0x801B4944:("D_801B4944","UNK_TYPE1","",0x1),
- 0x801B4974:("D_801B4974","UNK_TYPE1","",0x1),
- 0x801B49A4:("D_801B49A4","UNK_TYPE1","",0x1),
- 0x801B49D4:("D_801B49D4","UNK_TYPE1","",0x1),
- 0x801B4A04:("D_801B4A04","UNK_TYPE1","",0x1),
- 0x801B4A34:("D_801B4A34","UNK_TYPE1","",0x1),
- 0x801B4A5C:("D_801B4A5C","UNK_TYPE1","",0x1),
- 0x801B4A8C:("D_801B4A8C","UNK_TYPE1","",0x1),
- 0x801B4ABC:("D_801B4ABC","UNK_TYPE1","",0x1),
- 0x801B4AE0:("D_801B4AE0","UNK_TYPE1","",0x1),
- 0x801B4B08:("D_801B4B08","UNK_TYPE1","",0x1),
- 0x801B4B38:("D_801B4B38","UNK_TYPE1","",0x1),
- 0x801B4B60:("D_801B4B60","UNK_TYPE1","",0x1),
- 0x801B4B90:("D_801B4B90","UNK_TYPE1","",0x1),
- 0x801B4BB8:("D_801B4BB8","UNK_TYPE1","",0x1),
- 0x801B4BDC:("D_801B4BDC","UNK_TYPE1","",0x1),
- 0x801B4C04:("D_801B4C04","UNK_TYPE1","",0x1),
- 0x801B4C34:("D_801B4C34","UNK_TYPE1","",0x1),
- 0x801B4C5C:("D_801B4C5C","UNK_TYPE1","",0x1),
- 0x801B4C84:("D_801B4C84","UNK_TYPE1","",0x1),
- 0x801B4CAC:("D_801B4CAC","UNK_TYPE1","",0x1),
- 0x801B4CD4:("D_801B4CD4","UNK_TYPE1","",0x1),
- 0x801B4CFC:("D_801B4CFC","UNK_TYPE1","",0x1),
- 0x801B4D24:("D_801B4D24","UNK_TYPE1","",0x1),
- 0x801B4D34:("D_801B4D34","UNK_TYPE1","",0x1),
- 0x801B4D44:("D_801B4D44","UNK_TYPE1","",0x1),
- 0x801B4D68:("D_801B4D68","UNK_TYPE1","",0x1),
- 0x801B4D8C:("D_801B4D8C","UNK_TYPE1","",0x1),
- 0x801B4DB0:("D_801B4DB0","UNK_TYPE1","",0x1),
- 0x801B4DD4:("D_801B4DD4","UNK_TYPE1","",0x1),
- 0x801B4DF8:("D_801B4DF8","UNK_TYPE1","",0x1),
- 0x801B4E2C:("D_801B4E2C","UNK_TYPE1","",0x1),
- 0x801B4E5C:("D_801B4E5C","UNK_TYPE1","",0x1),
- 0x801B4E90:("D_801B4E90","UNK_TYPE1","",0x1),
- 0x801B4EB4:("D_801B4EB4","UNK_TYPE1","",0x1),
- 0x801B4ED8:("D_801B4ED8","UNK_TYPE1","",0x1),
- 0x801B4EDC:("D_801B4EDC","UNK_TYPE1","",0x1),
- 0x801B4EE4:("D_801B4EE4","UNK_TYPE1","",0x1),
+ 0x801B4710:("sSetNormal0ModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B4738:("sSetNormal0ModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B4768:("sSetNormal0ModeFollowTargetData","UNK_TYPE1","",0x1),
+ 0x801B4798:("sSetNormal0ModeBattleData","UNK_TYPE1","",0x1),
+ 0x801B47CC:("sSetNormal0ModeFirstPersonData","UNK_TYPE1","",0x1),
+ 0x801B47F0:("sSetNormal0ModeTalkData","UNK_TYPE1","",0x1),
+ 0x801B4824:("sSetNormal0ModeClimbData","UNK_TYPE1","",0x1),
+ 0x801B4848:("sSetNormal0ModeBowArrowData","UNK_TYPE1","",0x1),
+ 0x801B486C:("sSetNormal0ModeBowArrowZData","UNK_TYPE1","",0x1),
+ 0x801B4890:("sSetNormal0ModeHookshotData","UNK_TYPE1","",0x1),
+ 0x801B48B0:("sSetNormal0ModeBoomerangData","UNK_TYPE1","",0x1),
+ 0x801B48D4:("sSetNormal0ModeSlingshotData","UNK_TYPE1","",0x1),
+ 0x801B48F8:("sSetNormal0ModeClimbZData","UNK_TYPE1","",0x1),
+ 0x801B4710:("sSetNormal0ModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B4738:("sSetNormal0ModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B4768:("sSetNormal0ModeFollowTargetData","UNK_TYPE1","",0x1),
+ 0x801B4798:("sSetNormal0ModeBattleData","UNK_TYPE1","",0x1),
+ 0x801B47CC:("sSetNormal0ModeFirstPersonData","UNK_TYPE1","",0x1),
+ 0x801B47F0:("sSetNormal0ModeTalkData","UNK_TYPE1","",0x1),
+ 0x801B4824:("sSetNormal0ModeClimbData","UNK_TYPE1","",0x1),
+ 0x801B4848:("sSetNormal0ModeBowArrowData","UNK_TYPE1","",0x1),
+ 0x801B486C:("sSetNormal0ModeBowArrowZData","UNK_TYPE1","",0x1),
+ 0x801B4890:("sSetNormal0ModeHookshotData","UNK_TYPE1","",0x1),
+ 0x801B48B0:("sSetNormal0ModeBoomerangData","UNK_TYPE1","",0x1),
+ 0x801B48D4:("sSetNormal0ModeSlingshotData","UNK_TYPE1","",0x1),
+ 0x801B48F8:("sSetNormal0ModeClimbZData","UNK_TYPE1","",0x1),
+ 0x801B491C:("sSetNormal0ModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B4944:("sSetNormal0ModeHangData","UNK_TYPE1","",0x1),
+ 0x801B4974:("sSetNormal0ModeHangZData","UNK_TYPE1","",0x1),
+ 0x801B49A4:("sSetNormal0ModeFreeFallData","UNK_TYPE1","",0x1),
+ 0x801B49D4:("sSetNormal0ModeChargeData","UNK_TYPE1","",0x1),
+ 0x801B4A04:("sSetNormal0ModeChargeZData","UNK_TYPE1","",0x1),
+ 0x801B4A34:("sSetNormal0ModeStillData","UNK_TYPE1","",0x1),
+ 0x801B4A5C:("sSetNormal0ModePushPullData","UNK_TYPE1","",0x1),
+ 0x801B4A8C:("sSetNormal0ModeFollowBoomerangData","UNK_TYPE1","",0x1),
+ 0x801B4ABC:("sSetNormal0ModeDekuShootData","UNK_TYPE1","",0x1),
+ 0x801B4AE0:("sSetNormal0ModeGoronDashData","UNK_TYPE1","",0x1),
+ 0x801B4B08:("sSetNormal0ModeDekuHideData","UNK_TYPE1","",0x1),
+ 0x801B4B38:("sSetNormal0ModeDekuFlyData","UNK_TYPE1","",0x1),
+ 0x801B4B60:("sSetNormal0ModeDekuFlyZData","UNK_TYPE1","",0x1),
+ 0x801B4B90:("sSetNormal0ModeGoronJumpData","UNK_TYPE1","",0x1),
+ 0x801B4BB8:("sSetNormal0ModeZoraFinData","UNK_TYPE1","",0x1),
+ 0x801B4BDC:("sSetNormal3ModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B4C04:("sSetNormal3ModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B4C34:("sSetNormal3ModeFreeFallData","UNK_TYPE1","",0x1),
+ 0x801B4C5C:("sSetNormal3ModeGoronJumpData","UNK_TYPE1","",0x1),
+ 0x801B4C84:("sSetNormal3ModeDekuFlyData","UNK_TYPE1","",0x1),
+ 0x801B4CAC:("sSetNormal3ModeDekuHideData","UNK_TYPE1","",0x1),
+ 0x801B4CD4:("sSetNormal3ModeStillData","UNK_TYPE1","",0x1),
+ 0x801B4CFC:("sSetNormal3ModeGoronDashData","UNK_TYPE1","",0x1),
+ 0x801B4D24:("sSetPivotDivingModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B4D34:("sSetPivotDivingModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B4D44:("sSetHorseModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B4D68:("sSetHorseModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B4D8C:("sSetHorseModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B4DB0:("sSetHorseModeBowArrowData","UNK_TYPE1","",0x1),
+ 0x801B4DD4:("sSetHorseModeSlingShotData","UNK_TYPE1","",0x1),
+ 0x801B4DF8:("sSetHorseModeBattleData","UNK_TYPE1","",0x1),
+ 0x801B4E2C:("sSetHorseModeFollowTargetData","UNK_TYPE1","",0x1),
+ 0x801B4E5C:("sSetHorseModeTalkData","UNK_TYPE1","",0x1),
+ 0x801B4E90:("sSetHorseModeStillData","UNK_TYPE1","",0x1),
+ 0x801B4EB4:("sSetZoraDivingModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B4ED8:("sSetPrerendFixedModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B4EDC:("sSetPrerendPivotModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B4EE4:("sSetDoorCModeNormalData","UNK_TYPE1","",0x1),
0x801B4EF0:("D_801B4EF0","UNK_TYPE1","",0x1),
- 0x801B4EF4:("D_801B4EF4","UNK_TYPE1","",0x1),
+ 0x801B4EF4:("sSetCutscenesModeNormalData","UNK_TYPE1","",0x1),
0x801B4EF8:("D_801B4EF8","UNK_TYPE1","",0x1),
0x801B4F20:("D_801B4F20","UNK_TYPE1","",0x1),
0x801B4F50:("D_801B4F50","UNK_TYPE1","",0x1),
0x801B4F78:("D_801B4F78","UNK_TYPE1","",0x1),
- 0x801B4FA0:("D_801B4FA0","UNK_TYPE1","",0x1),
- 0x801B4FC8:("D_801B4FC8","UNK_TYPE1","",0x1),
+ 0x801B4FA0:("sSetNormal1ModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B4FC8:("sSetNormal1ModeStillData","UNK_TYPE1","",0x1),
0x801B4FF0:("D_801B4FF0","UNK_TYPE1","",0x1),
0x801B5018:("D_801B5018","UNK_TYPE1","",0x1),
0x801B5034:("D_801B5034","UNK_TYPE1","",0x1),
0x801B5050:("D_801B5050","UNK_TYPE1","",0x1),
0x801B506C:("D_801B506C","UNK_TYPE1","",0x1),
- 0x801B507C:("D_801B507C","UNK_TYPE1","",0x1),
- 0x801B5094:("D_801B5094","UNK_TYPE1","",0x1),
- 0x801B50BC:("D_801B50BC","UNK_TYPE1","",0x1),
- 0x801B50EC:("D_801B50EC","UNK_TYPE1","",0x1),
- 0x801B511C:("D_801B511C","UNK_TYPE1","",0x1),
- 0x801B5150:("D_801B5150","UNK_TYPE1","",0x1),
- 0x801B5180:("D_801B5180","UNK_TYPE1","",0x1),
- 0x801B51A8:("D_801B51A8","UNK_TYPE1","",0x1),
- 0x801B51D8:("D_801B51D8","UNK_TYPE1","",0x1),
- 0x801B51FC:("D_801B51FC","UNK_TYPE1","",0x1),
- 0x801B5220:("D_801B5220","UNK_TYPE1","",0x1),
- 0x801B5250:("D_801B5250","UNK_TYPE1","",0x1),
- 0x801B5280:("D_801B5280","UNK_TYPE1","",0x1),
- 0x801B52B0:("D_801B52B0","UNK_TYPE1","",0x1),
- 0x801B52E0:("D_801B52E0","UNK_TYPE1","",0x1),
- 0x801B5308:("D_801B5308","UNK_TYPE1","",0x1),
+ 0x801B507C:("sSetSpiralDoorModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B5094:("sSetDungeon0ModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B50BC:("sSetDungeon0ModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B50EC:("sSetDungeon0ModeFollowTargetData","UNK_TYPE1","",0x1),
+ 0x801B511C:("sSetDungeon0ModeBattleData","UNK_TYPE1","",0x1),
+ 0x801B5150:("sSetDungeon0ModeFollowBoomerangData","UNK_TYPE1","",0x1),
+ 0x801B5180:("sSetDungeon0ModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B51A8:("sSetDungeon0ModeFreeFallData","UNK_TYPE1","",0x1),
+ 0x801B51D8:("sSetDungeon0ModeClimbData","UNK_TYPE1","",0x1),
+ 0x801B51FC:("sSetDungeon0ModeClimbZData","UNK_TYPE1","",0x1),
+ 0x801B5220:("sSetDungeon0ModeChargeData","UNK_TYPE1","",0x1),
+ 0x801B5250:("sSetDungeon0ModeChargeZData","UNK_TYPE1","",0x1),
+ 0x801B5280:("sSetDungeon0ModeHangData","UNK_TYPE1","",0x1),
+ 0x801B52B0:("sSetDungeon0ModeHangZData","UNK_TYPE1","",0x1),
+ 0x801B52E0:("sSetDungeon0ModeStillData","UNK_TYPE1","",0x1),
+ 0x801B5308:("sSetDungeon0ModePushPullData","UNK_TYPE1","",0x1),
0x801B5338:("D_801B5338","UNK_TYPE1","",0x1),
0x801B535C:("D_801B535C","UNK_TYPE1","",0x1),
0x801B5380:("D_801B5380","UNK_TYPE1","",0x1),
@@ -560,71 +578,71 @@
0x801B5650:("D_801B5650","UNK_TYPE1","",0x1),
0x801B5674:("D_801B5674","UNK_TYPE1","",0x1),
0x801B5698:("D_801B5698","UNK_TYPE1","",0x1),
- 0x801B56BC:("D_801B56BC","UNK_TYPE1","",0x1),
- 0x801B56E0:("D_801B56E0","UNK_TYPE1","",0x1),
- 0x801B5704:("D_801B5704","UNK_TYPE1","",0x1),
+ 0x801B56BC:("sSetDeathModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B56E0:("sSetDeathModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B5704:("sSetDeathModeDekuShootData","UNK_TYPE1","",0x1),
0x801B5728:("D_801B5728","UNK_TYPE1","",0x1),
0x801B574C:("D_801B574C","UNK_TYPE1","",0x1),
- 0x801B5770:("D_801B5770","UNK_TYPE1","",0x1),
- 0x801B577C:("D_801B577C","UNK_TYPE1","",0x1),
- 0x801B57A4:("D_801B57A4","UNK_TYPE1","",0x1),
- 0x801B57CC:("D_801B57CC","UNK_TYPE1","",0x1),
- 0x801B57F4:("D_801B57F4","UNK_TYPE1","",0x1),
+ 0x801B5770:("sSetLongChestOpeningModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B577C:("sSetDungeon1ModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B57A4:("sSetDungeon1ModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B57CC:("sSetDungeon1ModeStillData","UNK_TYPE1","",0x1),
+ 0x801B57F4:("sSetDungeon1ModePushPullData","UNK_TYPE1","",0x1),
0x801B5824:("D_801B5824","UNK_TYPE1","",0x1),
0x801B5834:("D_801B5834","UNK_TYPE1","",0x1),
- 0x801B5844:("D_801B5844","UNK_TYPE1","",0x1),
- 0x801B5864:("D_801B5864","UNK_TYPE1","",0x1),
+ 0x801B5844:("sSetMazeModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B5864:("sSetRemoteBombModeNormalData","UNK_TYPE1","",0x1),
0x801B5884:("D_801B5884","UNK_TYPE1","",0x1),
0x801B58A0:("D_801B58A0","UNK_TYPE1","",0x1),
0x801B58BC:("D_801B58BC","UNK_TYPE1","",0x1),
0x801B58D8:("D_801B58D8","UNK_TYPE1","",0x1),
0x801B58F4:("D_801B58F4","UNK_TYPE1","",0x1),
- 0x801B5904:("D_801B5904","UNK_TYPE1","",0x1),
- 0x801B5928:("D_801B5928","UNK_TYPE1","",0x1),
- 0x801B5950:("D_801B5950","UNK_TYPE1","",0x1),
+ 0x801B5904:("sSetTowerClimbModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B5928:("sSetTowerClimbModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B5950:("sSetTowerClimbModeStillData","UNK_TYPE1","",0x1),
0x801B5978:("D_801B5978","UNK_TYPE1","",0x1),
0x801B59A8:("D_801B59A8","UNK_TYPE1","",0x1),
0x801B59D0:("D_801B59D0","UNK_TYPE1","",0x1),
0x801B59F4:("D_801B59F4","UNK_TYPE1","",0x1),
0x801B5A00:("D_801B5A00","UNK_TYPE1","",0x1),
- 0x801B5A0C:("D_801B5A0C","UNK_TYPE1","",0x1),
- 0x801B5A30:("D_801B5A30","UNK_TYPE1","",0x1),
+ 0x801B5A0C:("sSetBoatCruiseModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B5A30:("sSetVerticalClimbModeClimbData","UNK_TYPE1","",0x1),
0x801B5A64:("D_801B5A64","UNK_TYPE1","",0x1),
- 0x801B5A94:("D_801B5A94","UNK_TYPE1","",0x1),
- 0x801B5ABC:("D_801B5ABC","UNK_TYPE1","",0x1),
- 0x801B5AF0:("D_801B5AF0","UNK_TYPE1","",0x1),
- 0x801B5B18:("D_801B5B18","UNK_TYPE1","",0x1),
- 0x801B5B40:("D_801B5B40","UNK_TYPE1","",0x1),
- 0x801B5B70:("D_801B5B70","UNK_TYPE1","",0x1),
- 0x801B5B98:("D_801B5B98","UNK_TYPE1","",0x1),
- 0x801B5BC8:("D_801B5BC8","UNK_TYPE1","",0x1),
- 0x801B5BFC:("D_801B5BFC","UNK_TYPE1","",0x1),
- 0x801B5C30:("D_801B5C30","UNK_TYPE1","",0x1),
- 0x801B5C58:("D_801B5C58","UNK_TYPE1","",0x1),
+ 0x801B5A94:("sSetDungeon2ModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B5ABC:("sSetDungeon2ModeBattleData","UNK_TYPE1","",0x1),
+ 0x801B5AF0:("sSetDungeon2ModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B5B18:("sSetDungeon2ModeStillData","UNK_TYPE1","",0x1),
+ 0x801B5B40:("sSetDungeon2ModePushPullData","UNK_TYPE1","",0x1),
+ 0x801B5B70:("sSetBossOdolwaModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B5B98:("sSetBossOdolwaModeFollowTargetData","UNK_TYPE1","",0x1),
+ 0x801B5BC8:("sSetBossOdolwaModeTalkData","UNK_TYPE1","",0x1),
+ 0x801B5BFC:("sSetBossOdolwaModeBattleData","UNK_TYPE1","",0x1),
+ 0x801B5C30:("sSetBossOdolwaModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B5C58:("sSetBossOdolwaModeStillData","UNK_TYPE1","",0x1),
0x801B5C80:("D_801B5C80","UNK_TYPE1","",0x1),
0x801B5CB0:("D_801B5CB0","UNK_TYPE1","",0x1),
0x801B5CCC:("D_801B5CCC","UNK_TYPE1","",0x1),
- 0x801B5CE8:("D_801B5CE8","UNK_TYPE1","",0x1),
- 0x801B5D10:("D_801B5D10","UNK_TYPE1","",0x1),
- 0x801B5D40:("D_801B5D40","UNK_TYPE1","",0x1),
- 0x801B5D74:("D_801B5D74","UNK_TYPE1","",0x1),
- 0x801B5D9C:("D_801B5D9C","UNK_TYPE1","",0x1),
+ 0x801B5CE8:("sSetMiniBossModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B5D10:("sSetMiniBossModeFollowTargetData","UNK_TYPE1","",0x1),
+ 0x801B5D40:("sSetMiniBossModeBattleData","UNK_TYPE1","",0x1),
+ 0x801B5D74:("sSetMiniBossModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B5D9C:("sSetMiniBossModeStillData","UNK_TYPE1","",0x1),
0x801B5DC4:("D_801B5DC4","UNK_TYPE1","",0x1),
- 0x801B5DD4:("D_801B5DD4","UNK_TYPE1","",0x1),
- 0x801B5DFC:("D_801B5DFC","UNK_TYPE1","",0x1),
+ 0x801B5DD4:("sSetTreasureChestMinigameModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B5DFC:("sSetTreasureChestMinigameModeTargetData","UNK_TYPE1","",0x1),
0x801B5E2C:("D_801B5E2C","UNK_TYPE1","",0x1),
0x801B5E48:("D_801B5E48","UNK_TYPE1","",0x1),
0x801B5E64:("D_801B5E64","UNK_TYPE1","",0x1),
0x801B5E8C:("D_801B5E8C","UNK_TYPE1","",0x1),
- 0x801B5EB4:("D_801B5EB4","UNK_TYPE1","",0x1),
- 0x801B5EDC:("D_801B5EDC","UNK_TYPE1","",0x1),
- 0x801B5F0C:("D_801B5F0C","UNK_TYPE1","",0x1),
- 0x801B5F34:("D_801B5F34","UNK_TYPE1","",0x1),
- 0x801B5F5C:("D_801B5F5C","UNK_TYPE1","",0x1),
- 0x801B5F8C:("D_801B5F8C","UNK_TYPE1","",0x1),
- 0x801B5FB0:("D_801B5FB0","UNK_TYPE1","",0x1),
- 0x801B5FD4:("D_801B5FD4","UNK_TYPE1","",0x1),
- 0x801B5FF8:("D_801B5FF8","UNK_TYPE1","",0x1),
+ 0x801B5EB4:("sSetDungeon3ModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B5EDC:("sSetDungeon3ModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B5F0C:("sSetDungeon3ModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B5F34:("sSetDungeon3ModeStillData","UNK_TYPE1","",0x1),
+ 0x801B5F5C:("sSetDungeon3ModePushPullData","UNK_TYPE1","",0x1),
+ 0x801B5F8C:("sSetTelescopeModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B5FB0:("sSetTelescopeModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B5FD4:("sSetTelescopeModeFirstPersonData","UNK_TYPE1","",0x1),
+ 0x801B5FF8:("sSetTelescopeModeDekuHideData","UNK_TYPE1","",0x1),
0x801B601C:("D_801B601C","UNK_TYPE1","",0x1),
0x801B6044:("D_801B6044","UNK_TYPE1","",0x1),
0x801B6074:("D_801B6074","UNK_TYPE1","",0x1),
@@ -665,59 +683,59 @@
0x801B6674:("D_801B6674","UNK_TYPE1","",0x1),
0x801B6698:("D_801B6698","UNK_TYPE1","",0x1),
0x801B66C0:("D_801B66C0","UNK_TYPE1","",0x1),
- 0x801B66E8:("D_801B66E8","UNK_TYPE1","",0x1),
- 0x801B6710:("D_801B6710","UNK_TYPE1","",0x1),
- 0x801B6740:("D_801B6740","UNK_TYPE1","",0x1),
- 0x801B6774:("D_801B6774","UNK_TYPE1","",0x1),
- 0x801B679C:("D_801B679C","UNK_TYPE1","",0x1),
- 0x801B67C4:("D_801B67C4","UNK_TYPE1","",0x1),
- 0x801B67EC:("D_801B67EC","UNK_TYPE1","",0x1),
- 0x801B681C:("D_801B681C","UNK_TYPE1","",0x1),
- 0x801B684C:("D_801B684C","UNK_TYPE1","",0x1),
- 0x801B6880:("D_801B6880","UNK_TYPE1","",0x1),
- 0x801B68A8:("D_801B68A8","UNK_TYPE1","",0x1),
- 0x801B68D0:("D_801B68D0","UNK_TYPE1","",0x1),
- 0x801B68F8:("D_801B68F8","UNK_TYPE1","",0x1),
- 0x801B692C:("D_801B692C","UNK_TYPE1","",0x1),
- 0x801B6954:("D_801B6954","UNK_TYPE1","",0x1),
- 0x801B697C:("D_801B697C","UNK_TYPE1","",0x1),
- 0x801B69A4:("D_801B69A4","UNK_TYPE1","",0x1),
- 0x801B69CC:("D_801B69CC","UNK_TYPE1","",0x1),
- 0x801B69FC:("D_801B69FC","UNK_TYPE1","",0x1),
- 0x801B6A30:("D_801B6A30","UNK_TYPE1","",0x1),
- 0x801B6A58:("D_801B6A58","UNK_TYPE1","",0x1),
- 0x801B6A80:("D_801B6A80","UNK_TYPE1","",0x1),
- 0x801B6AA8:("D_801B6AA8","UNK_TYPE1","",0x1),
- 0x801B6AD0:("D_801B6AD0","UNK_TYPE1","",0x1),
- 0x801B6AF8:("D_801B6AF8","UNK_TYPE1","",0x1),
- 0x801B6B28:("D_801B6B28","UNK_TYPE1","",0x1),
- 0x801B6B50:("D_801B6B50","UNK_TYPE1","",0x1),
- 0x801B6B78:("D_801B6B78","UNK_TYPE1","",0x1),
- 0x801B6BA0:("D_801B6BA0","UNK_TYPE1","",0x1),
- 0x801B6BC8:("D_801B6BC8","UNK_TYPE1","",0x1),
- 0x801B6BF0:("D_801B6BF0","UNK_TYPE1","",0x1),
- 0x801B6C18:("D_801B6C18","UNK_TYPE1","",0x1),
- 0x801B6C48:("D_801B6C48","UNK_TYPE1","",0x1),
- 0x801B6C70:("D_801B6C70","UNK_TYPE1","",0x1),
+ 0x801B66E8:("sSetBossMajoraModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B6710:("sSetBossMajoraModeFollowTargetData","UNK_TYPE1","",0x1),
+ 0x801B6740:("sSetBossMajoraModeBattleData","UNK_TYPE1","",0x1),
+ 0x801B6774:("sSetBossMajoraModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B679C:("sSetBossMajoraModeStillData","UNK_TYPE1","",0x1),
+ 0x801B67C4:("sSetBossTwinmoldModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B67EC:("sSetBossTwinmoldModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B681C:("sSetBossTwinmoldModeFollowTargetData","UNK_TYPE1","",0x1),
+ 0x801B684C:("sSetBossTwinmoldModeBattleData","UNK_TYPE1","",0x1),
+ 0x801B6880:("sSetBossTwinmoldModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B68A8:("sSetBossTwinmoldModeStillData","UNK_TYPE1","",0x1),
+ 0x801B68D0:("sSetBossGohtModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B68F8:("sSetBossGohtModeBattleData","UNK_TYPE1","",0x1),
+ 0x801B692C:("sSetBossGohtModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B6954:("sSetBossGohtModeStillData","UNK_TYPE1","",0x1),
+ 0x801B697C:("sSetBossGohtModeGoronDashData","UNK_TYPE1","",0x1),
+ 0x801B69A4:("sSetBossGyorgModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B69CC:("sSetBossGyorgModeFollowTargetData","UNK_TYPE1","",0x1),
+ 0x801B69FC:("sSetBossGyorgModeBattleData","UNK_TYPE1","",0x1),
+ 0x801B6A30:("sSetBossGyorgModeGoronJumpData","UNK_TYPE1","",0x1),
+ 0x801B6A58:("sSetBossGyorgModeDekuFlyData","UNK_TYPE1","",0x1),
+ 0x801B6A80:("sSetBossGyorgModeDekuHideData","UNK_TYPE1","",0x1),
+ 0x801B6AA8:("sSetBossGyorgModeStillData","UNK_TYPE1","",0x1),
+ 0x801B6AD0:("sSetPinnacleRockModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B6AF8:("sSetPinnacleRockModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B6B28:("sSetPinnacleRockModeGoronJumpData","UNK_TYPE1","",0x1),
+ 0x801B6B50:("sSetPinnacleRockModeDekuFlyData","UNK_TYPE1","",0x1),
+ 0x801B6B78:("sSetPinnacleRockModeDekuHideData","UNK_TYPE1","",0x1),
+ 0x801B6BA0:("sSetPinnacleRockModeStillData","UNK_TYPE1","",0x1),
+ 0x801B6BC8:("sSetPinnacleRockModeGoronDashData","UNK_TYPE1","",0x1),
+ 0x801B6BF0:("sSetNormal2ModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B6C18:("sSetNormal2ModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B6C48:("sSetNormal2ModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B6C70:("sSetNormal2ModeStillData","UNK_TYPE1","",0x1),
0x801B6C98:("D_801B6C98","UNK_TYPE1","",0x1),
0x801B6CC0:("D_801B6CC0","UNK_TYPE1","",0x1),
0x801B6CF0:("D_801B6CF0","UNK_TYPE1","",0x1),
0x801B6D24:("D_801B6D24","UNK_TYPE1","",0x1),
0x801B6D4C:("D_801B6D4C","UNK_TYPE1","",0x1),
0x801B6D74:("D_801B6D74","UNK_TYPE1","",0x1),
- 0x801B6D90:("D_801B6D90","UNK_TYPE1","",0x1),
- 0x801B6DB8:("D_801B6DB8","UNK_TYPE1","",0x1),
- 0x801B6DE0:("D_801B6DE0","UNK_TYPE1","",0x1),
- 0x801B6E08:("D_801B6E08","UNK_TYPE1","",0x1),
- 0x801B6E30:("D_801B6E30","UNK_TYPE1","",0x1),
- 0x801B6E58:("D_801B6E58","UNK_TYPE1","",0x1),
- 0x801B6E80:("D_801B6E80","UNK_TYPE1","",0x1),
- 0x801B6EA8:("D_801B6EA8","UNK_TYPE1","",0x1),
- 0x801B6ED0:("D_801B6ED0","UNK_TYPE1","",0x1),
- 0x801B6EF8:("D_801B6EF8","UNK_TYPE1","",0x1),
- 0x801B6F20:("D_801B6F20","UNK_TYPE1","",0x1),
- 0x801B6F50:("D_801B6F50","UNK_TYPE1","",0x1),
- 0x801B6F78:("D_801B6F78","UNK_TYPE1","",0x1),
+ 0x801B6D90:("sSetWhirlpoolModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B6DB8:("sSetWhirlpoolModeFreeFallData","UNK_TYPE1","",0x1),
+ 0x801B6DE0:("sSetWhirlpoolModeGoronJumpData","UNK_TYPE1","",0x1),
+ 0x801B6E08:("sSetWhirlpoolModeDekuFlyData","UNK_TYPE1","",0x1),
+ 0x801B6E30:("sSetWhirlpoolModeDekuHideData","UNK_TYPE1","",0x1),
+ 0x801B6E58:("sSetWhirlpoolModeGoronDashData","UNK_TYPE1","",0x1),
+ 0x801B6E80:("sSetCuccoShackModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B6EA8:("sSetCuccoShackModeStillData","UNK_TYPE1","",0x1),
+ 0x801B6ED0:("sSetCuccoShackModeDekuHideData","UNK_TYPE1","",0x1),
+ 0x801B6EF8:("sSetGiantModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B6F20:("sSetGiantModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B6F50:("sSetGiantModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B6F78:("sSetGiantModeStillData","UNK_TYPE1","",0x1),
0x801B6FA0:("D_801B6FA0","UNK_TYPE1","",0x1),
0x801B6FB0:("D_801B6FB0","UNK_TYPE1","",0x1),
0x801B6FD8:("D_801B6FD8","UNK_TYPE1","",0x1),
@@ -734,130 +752,129 @@
0x801B71D4:("D_801B71D4","UNK_TYPE1","",0x1),
0x801B7204:("D_801B7204","UNK_TYPE1","",0x1),
0x801B7210:("D_801B7210","UNK_TYPE1","",0x1),
- 0x801B7244:("D_801B7244","UNK_TYPE1","",0x1),
- 0x801B7278:("D_801B7278","UNK_TYPE1","",0x1),
- 0x801B729C:("D_801B729C","UNK_TYPE1","",0x1),
- 0x801B72C0:("D_801B72C0","UNK_TYPE1","",0x1),
- 0x801B72E4:("D_801B72E4","UNK_TYPE1","",0x1),
- 0x801B7308:("D_801B7308","UNK_TYPE1","",0x1),
- 0x801B732C:("D_801B732C","UNK_TYPE1","",0x1),
- 0x801B7354:("D_801B7354","UNK_TYPE1","",0x1),
- 0x801B7384:("D_801B7384","UNK_TYPE1","",0x1),
- 0x801B73AC:("D_801B73AC","UNK_TYPE1","",0x1),
- 0x801B73D4:("D_801B73D4","UNK_TYPE1","",0x1),
- 0x801B74C4:("D_801B74C4","UNK_TYPE1","",0x1),
- 0x801B759C:("D_801B759C","UNK_TYPE1","",0x1),
- 0x801B75F4:("D_801B75F4","UNK_TYPE1","",0x1),
- 0x801B767C:("D_801B767C","UNK_TYPE1","",0x1),
- 0x801B7684:("D_801B7684","UNK_TYPE1","",0x1),
- 0x801B768C:("D_801B768C","UNK_TYPE1","",0x1),
- 0x801B7694:("D_801B7694","UNK_TYPE1","",0x1),
- 0x801B769C:("D_801B769C","UNK_TYPE1","",0x1),
- 0x801B76A4:("D_801B76A4","UNK_TYPE1","",0x1),
- 0x801B76AC:("D_801B76AC","UNK_TYPE1","",0x1),
- 0x801B777C:("D_801B777C","UNK_TYPE1","",0x1),
- 0x801B784C:("D_801B784C","UNK_TYPE1","",0x1),
- 0x801B791C:("D_801B791C","UNK_TYPE1","",0x1),
- 0x801B7984:("D_801B7984","UNK_TYPE1","",0x1),
- 0x801B79EC:("D_801B79EC","UNK_TYPE1","",0x1),
- 0x801B79F4:("D_801B79F4","UNK_TYPE1","",0x1),
- 0x801B7AE4:("D_801B7AE4","UNK_TYPE1","",0x1),
- 0x801B7B14:("D_801B7B14","UNK_TYPE1","",0x1),
- 0x801B7B44:("D_801B7B44","UNK_TYPE1","",0x1),
- 0x801B7B74:("D_801B7B74","UNK_TYPE1","",0x1),
- 0x801B7BA4:("D_801B7BA4","UNK_TYPE1","",0x1),
- 0x801B7BAC:("D_801B7BAC","UNK_TYPE1","",0x1),
- 0x801B7BDC:("D_801B7BDC","UNK_TYPE1","",0x1),
- 0x801B7C0C:("D_801B7C0C","UNK_TYPE1","",0x1),
- 0x801B7C3C:("D_801B7C3C","UNK_TYPE1","",0x1),
- 0x801B7C44:("D_801B7C44","UNK_TYPE1","",0x1),
- 0x801B7C54:("D_801B7C54","UNK_TYPE1","",0x1),
- 0x801B7C5C:("D_801B7C5C","UNK_TYPE1","",0x1),
- 0x801B7C64:("D_801B7C64","UNK_TYPE1","",0x1),
- 0x801B7D34:("D_801B7D34","UNK_TYPE1","",0x1),
- 0x801B7D3C:("D_801B7D3C","UNK_TYPE1","",0x1),
- 0x801B7D44:("D_801B7D44","UNK_TYPE1","",0x1),
- 0x801B7D4C:("D_801B7D4C","UNK_TYPE1","",0x1),
- 0x801B7D54:("D_801B7D54","UNK_TYPE1","",0x1),
- 0x801B7D5C:("D_801B7D5C","UNK_TYPE1","",0x1),
- 0x801B7D64:("D_801B7D64","UNK_TYPE1","",0x1),
- 0x801B7DCC:("D_801B7DCC","UNK_TYPE1","",0x1),
- 0x801B7DD4:("D_801B7DD4","UNK_TYPE1","",0x1),
- 0x801B7E3C:("D_801B7E3C","UNK_TYPE1","",0x1),
- 0x801B7F0C:("D_801B7F0C","UNK_TYPE1","",0x1),
- 0x801B7F14:("D_801B7F14","UNK_TYPE1","",0x1),
- 0x801B7F1C:("D_801B7F1C","UNK_TYPE1","",0x1),
- 0x801B7F24:("D_801B7F24","UNK_TYPE1","",0x1),
- 0x801B7F2C:("D_801B7F2C","UNK_TYPE1","",0x1),
- 0x801B7F34:("D_801B7F34","UNK_TYPE1","",0x1),
- 0x801B7F3C:("D_801B7F3C","UNK_TYPE1","",0x1),
- 0x801B7FAC:("D_801B7FAC","UNK_TYPE1","",0x1),
- 0x801B807C:("D_801B807C","UNK_TYPE1","",0x1),
- 0x801B8084:("D_801B8084","UNK_TYPE1","",0x1),
- 0x801B8154:("D_801B8154","UNK_TYPE1","",0x1),
- 0x801B8224:("D_801B8224","UNK_TYPE1","",0x1),
- 0x801B82F4:("D_801B82F4","UNK_TYPE1","",0x1),
- 0x801B82FC:("D_801B82FC","UNK_TYPE1","",0x1),
- 0x801B8304:("D_801B8304","UNK_TYPE1","",0x1),
- 0x801B83D4:("D_801B83D4","UNK_TYPE1","",0x1),
- 0x801B83DC:("D_801B83DC","UNK_TYPE1","",0x1),
- 0x801B8434:("D_801B8434","UNK_TYPE1","",0x1),
- 0x801B843C:("D_801B843C","UNK_TYPE1","",0x1),
- 0x801B8444:("D_801B8444","UNK_TYPE1","",0x1),
- 0x801B8514:("D_801B8514","UNK_TYPE1","",0x1),
- 0x801B85E4:("D_801B85E4","UNK_TYPE1","",0x1),
- 0x801B8664:("D_801B8664","UNK_TYPE1","",0x1),
- 0x801B8754:("D_801B8754","UNK_TYPE1","",0x1),
- 0x801B875C:("D_801B875C","UNK_TYPE1","",0x1),
- 0x801B87C4:("D_801B87C4","UNK_TYPE1","",0x1),
- 0x801B8894:("D_801B8894","UNK_TYPE1","",0x1),
- 0x801B8964:("D_801B8964","UNK_TYPE1","",0x1),
- 0x801B8A34:("D_801B8A34","UNK_TYPE1","",0x1),
- 0x801B8B04:("D_801B8B04","UNK_TYPE1","",0x1),
- 0x801B8BD4:("D_801B8BD4","UNK_TYPE1","",0x1),
- 0x801B8CAC:("D_801B8CAC","UNK_TYPE1","",0x1),
- 0x801B8CB4:("D_801B8CB4","UNK_TYPE1","",0x1),
- 0x801B8D8C:("D_801B8D8C","UNK_TYPE1","",0x1),
- 0x801B8E5C:("D_801B8E5C","UNK_TYPE1","",0x1),
- 0x801B8F2C:("D_801B8F2C","UNK_TYPE1","",0x1),
- 0x801B8F34:("D_801B8F34","UNK_TYPE1","",0x1),
- 0x801B900C:("D_801B900C","UNK_TYPE1","",0x1),
- 0x801B90D4:("D_801B90D4","UNK_TYPE1","",0x1),
- 0x801B91A4:("D_801B91A4","UNK_TYPE1","",0x1),
- 0x801B91AC:("D_801B91AC","UNK_TYPE1","",0x1),
- 0x801B927C:("D_801B927C","UNK_TYPE1","",0x1),
- 0x801B9354:("D_801B9354","UNK_TYPE1","",0x1),
- 0x801B9424:("D_801B9424","UNK_TYPE1","",0x1),
- 0x801B94F4:("D_801B94F4","UNK_TYPE1","",0x1),
- 0x801B95C4:("D_801B95C4","UNK_TYPE1","",0x1),
- 0x801B95CC:("D_801B95CC","UNK_TYPE1","",0x1),
- 0x801B969C:("D_801B969C","UNK_TYPE1","",0x1),
- 0x801B976C:("D_801B976C","UNK_TYPE1","",0x1),
- 0x801B979C:("D_801B979C","UNK_TYPE1","",0x1),
- 0x801B986C:("cameraStates","CameraStateParams","[91]",0x444),
- 0x801B9CB0:("D_801B9CB0","UNK_TYPE1","",0x1),
- 0x801B9CE2:("D_801B9CE2","UNK_TYPE1","",0x1),
- 0x801B9CE4:("D_801B9CE4","UNK_PTR","",0x4),
- 0x801B9CE8:("cameraUpdateFuncs","camera_update_func","[71]",0x11c),
- 0x801B9E04:("D_801B9E04","UNK_TYPE2","",0x2),
- 0x801B9E08:("D_801B9E08","UNK_TYPE4","",0x4),
- 0x801B9E0C:("D_801B9E0C","UNK_TYPE4","",0x4),
- 0x801B9E10:("D_801B9E10","UNK_TYPE4","",0x4),
- 0x801B9E14:("D_801B9E14","UNK_TYPE4","",0x4),
+ 0x801B7244:("sSetNormal4ModeTalkData","UNK_TYPE1","",0x1),
+ 0x801B7278:("sSetElegyShellModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B729C:("sSetElegyShellModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B72C0:("sSetElegyShellModeDekuShootData","UNK_TYPE1","",0x1),
+ 0x801B72E4:("sSetElegyShellModeGoronDashData","UNK_TYPE1","",0x1),
+ 0x801B7308:("sSetElegyShellModeDekuFlyData","UNK_TYPE1","",0x1),
+ 0x801B732C:("sSetDungeon4ModeNormalData","UNK_TYPE1","",0x1),
+ 0x801B7354:("sSetDungeon4ModeTargetData","UNK_TYPE1","",0x1),
+ 0x801B7384:("sSetDungeon4ModeJumpData","UNK_TYPE1","",0x1),
+ 0x801B73AC:("sSetDungeon4ModeStillData","UNK_TYPE1","",0x1),
+ 0x801B73D4:("sCamSetNormal0Modes","UNK_TYPE1","",0x1),
+ 0x801B74C4:("sCamSetNormal3Modes","UNK_TYPE1","",0x1),
+ 0x801B759C:("sCamSetPivotDivingModes","UNK_TYPE1","",0x1),
+ 0x801B75F4:("sCamSetHorseModes","UNK_TYPE1","",0x1),
+ 0x801B767C:("sCamSetZoraDivingModes","UNK_TYPE1","",0x1),
+ 0x801B7684:("sCamSetPreRendFixedModes","UNK_TYPE1","",0x1),
+ 0x801B768C:("sCamSetPreRendPivotModes","UNK_TYPE1","",0x1),
+ 0x801B7694:("sCamSetDoorCModes","UNK_TYPE1","",0x1),
+ 0x801B769C:("sCamSetDemo0Modes","UNK_TYPE1","",0x1),
+ 0x801B76A4:("sCamSetFree0Modes","UNK_TYPE1","",0x1),
+ 0x801B76AC:("sCamSetFukan0Modes","UNK_TYPE1","",0x1),
+ 0x801B777C:("sCamSetNormal1Modes","UNK_TYPE1","",0x1),
+ 0x801B784C:("sCamSetNanameModes","UNK_TYPE1","",0x1),
+ 0x801B791C:("sCamSetCirc0Modes","UNK_TYPE1","",0x1),
+ 0x801B7984:("sCamSetFixed0Modes","UNK_TYPE1","",0x1),
+ 0x801B79EC:("sCamSetSpiralDoorModes","UNK_TYPE1","",0x1),
+ 0x801B79F4:("sCamSetDungeon0Modes","UNK_TYPE1","",0x1),
+ 0x801B7AE4:("sCamSetItem0Modes","UNK_TYPE1","",0x1),
+ 0x801B7B14:("sCamSetItem1Modes","UNK_TYPE1","",0x1),
+ 0x801B7B44:("sCamSetItem2Modes","UNK_TYPE1","",0x1),
+ 0x801B7B74:("sCamSetItem3Modes","UNK_TYPE1","",0x1),
+ 0x801B7BA4:("sCamSetNaviModes","UNK_TYPE1","",0x1),
+ 0x801B7BAC:("sCamSetWarp0Modes","UNK_TYPE1","",0x1),
+ 0x801B7BDC:("sCamSetDeathModes","UNK_TYPE1","",0x1),
+ 0x801B7C0C:("sCamSetRebirthModes","UNK_TYPE1","",0x1),
+ 0x801B7C3C:("sCamSetLongChestOpeningModes","UNK_TYPE1","",0x1),
+ 0x801B7C44:("sCamSetMaskTransformationModes","UNK_TYPE1","",0x1),
+ 0x801B7C54:("sCamSetAttentionModes","UNK_TYPE1","",0x1),
+ 0x801B7C5C:("sCamSetWarp1Modes","UNK_TYPE1","",0x1),
+ 0x801B7C64:("sCamSetDungeon1Modes","UNK_TYPE1","",0x1),
+ 0x801B7D34:("sCamSetFixed1Modes","UNK_TYPE1","",0x1),
+ 0x801B7D3C:("sCamSetFixed2Modes","UNK_TYPE1","",0x1),
+ 0x801B7D44:("sCamSetMazeModes","UNK_TYPE1","",0x1),
+ 0x801B7D4C:("sCamSetRemoteBombModes","UNK_TYPE1","",0x1),
+ 0x801B7D54:("sCamSetCirc1Modes","UNK_TYPE1","",0x1),
+ 0x801B7D5C:("sCamSetCirc2Modes","UNK_TYPE1","",0x1),
+ 0x801B7D64:("sCamSetCirc3Modes","UNK_TYPE1","",0x1),
+ 0x801B7DCC:("sCamSetCirc4Modes","UNK_TYPE1","",0x1),
+ 0x801B7DD4:("sCamSetFixed3Modes","UNK_TYPE1","",0x1),
+ 0x801B7E3C:("sCamSetTowerClimbModes","UNK_TYPE1","",0x1),
+ 0x801B7F0C:("sCamSetParallel0Modes","UNK_TYPE1","",0x1),
+ 0x801B7F14:("sCamSetNormDModes","UNK_TYPE1","",0x1),
+ 0x801B7F1C:("sCamSetSubjectDModes","UNK_TYPE1","",0x1),
+ 0x801B7F24:("sCamSetStart0Modes","UNK_TYPE1","",0x1),
+ 0x801B7F2C:("sCamSetStart2Modes","UNK_TYPE1","",0x1),
+ 0x801B7F34:("sCamSetStop0Modes","UNK_TYPE1","",0x1),
+ 0x801B7F3C:("sCamSetBoatCruiseModes","UNK_TYPE1","",0x1),
+ 0x801B7FAC:("sCamSetVerticalClimbModes","UNK_TYPE1","",0x1),
+ 0x801B807C:("sCamSetSidedModes","UNK_TYPE1","",0x1),
+ 0x801B8084:("sCamSetDungeon2Modes","UNK_TYPE1","",0x1),
+ 0x801B8154:("sCamSetBossOdolwaModes","UNK_TYPE1","",0x1),
+ 0x801B8224:("sCamSetKeepBackModes","UNK_TYPE1","",0x1),
+ 0x801B82F4:("sCamSetCirc6Modes","UNK_TYPE1","",0x1),
+ 0x801B82FC:("sCamSetCirc7Modes","UNK_TYPE1","",0x1),
+ 0x801B8304:("sCamSetMiniBossModes","UNK_TYPE1","",0x1),
+ 0x801B83D4:("sCamSetRFixed1Modes","UNK_TYPE1","",0x1),
+ 0x801B83DC:("sCamSetTreasureChestMinigameModes","UNK_TYPE1","",0x1),
+ 0x801B8434:("sCamSetBombBasketModes","UNK_TYPE1","",0x1),
+ 0x801B843C:("sCamSetCirc8Modes","UNK_TYPE1","",0x1),
+ 0x801B8444:("sCamSetFukan1Modes","UNK_TYPE1","",0x1),
+ 0x801B8514:("sCamSetDungeon3Modes","UNK_TYPE1","",0x1),
+ 0x801B85E4:("sCamSetTelescopeModes","UNK_TYPE1","",0x1),
+ 0x801B8664:("sCamSetRoom0Modes","UNK_TYPE1","",0x1),
+ 0x801B8754:("sCamSetRCirc0Modes","UNK_TYPE1","",0x1),
+ 0x801B875C:("sCamSetCirc9Modes","UNK_TYPE1","",0x1),
+ 0x801B87C4:("sCamSetOnThePoleModes","UNK_TYPE1","",0x1),
+ 0x801B8894:("sCamSetInBushModes","UNK_TYPE1","",0x1),
+ 0x801B8964:("sCamSetBossMajoraModes","UNK_TYPE1","",0x1),
+ 0x801B8A34:("sCamSetBossTwinmoldModes","UNK_TYPE1","",0x1),
+ 0x801B8B04:("sCamSetBossGohtModes","UNK_TYPE1","",0x1),
+ 0x801B8BD4:("sCamSetBossGyorgModes","UNK_TYPE1","",0x1),
+ 0x801B8CAC:("sCamSetConnect0Modes","UNK_TYPE1","",0x1),
+ 0x801B8CB4:("sCamSetPinnacleRockModes","UNK_TYPE1","",0x1),
+ 0x801B8D8C:("sCamSetNormal2Modes","UNK_TYPE1","",0x1),
+ 0x801B8E5C:("sCamSetBombBowlModes","UNK_TYPE1","",0x1),
+ 0x801B8F2C:("sCamSetCircAModes","UNK_TYPE1","",0x1),
+ 0x801B8F34:("sCamSetWhirlpoolModes","UNK_TYPE1","",0x1),
+ 0x801B900C:("sCamSetCuccoShackModes","UNK_TYPE1","",0x1),
+ 0x801B90D4:("sCamSetGiantModes","UNK_TYPE1","",0x1),
+ 0x801B91A4:("sCamSetScene0Modes","UNK_TYPE1","",0x1),
+ 0x801B91AC:("sCamSetRoom1Modes","UNK_TYPE1","",0x1),
+ 0x801B927C:("sCamSetWater2Modes","UNK_TYPE1","",0x1),
+ 0x801B9354:("sCamSetWoodfallSwampModes","UNK_TYPE1","",0x1),
+ 0x801B9424:("sCamSetForceKeepModes","UNK_TYPE1","",0x1),
+ 0x801B94F4:("sCamSetParallel1Modes","UNK_TYPE1","",0x1),
+ 0x801B95C4:("sCamSetStart1Modes","UNK_TYPE1","",0x1),
+ 0x801B95CC:("sCamSetRoom2Modes","UNK_TYPE1","",0x1),
+ 0x801B969C:("sCamSetNorm4Modes","UNK_TYPE1","",0x1),
+ 0x801B976C:("sCamSetElegyShellModes","UNK_TYPE1","",0x1),
+ 0x801B979C:("sCamSetDungeon4Modes","UNK_TYPE1","",0x1),
+ 0x801B986C:("sCameraSettings","CameraSetting","[91]",0x444),
+ 0x801B9CB0:("sGlobalCamDataSettings","s16","[26]",0x34),
+ 0x801B9CE4:("sGlobalCamDataSettingsPtr","s16*","",0x4),
+ 0x801B9CE8:("sCameraUpdateHandlers","camera_update_func","[71]",0x11c),
+ 0x801B9E04:("sCameraNextUID","UNK_TYPE2","",0x2),
+ 0x801B9E08:("sCameraInterfaceFlags","UNK_TYPE4","",0x4),
+ 0x801B9E0C:("sCameraHudVisibility","UNK_TYPE4","",0x4),
+ 0x801B9E10:("sCameraLetterboxSize","UNK_TYPE4","",0x4),
+ 0x801B9E14:("sCameraNegOne","UNK_TYPE4","",0x4),
0x801B9E18:("D_801B9E18","UNK_TYPE2","",0x2),
0x801B9E34:("D_801B9E34","UNK_TYPE2","",0x2),
- 0x801B9E50:("D_801B9E50","UNK_TYPE4","",0x4),
- 0x801B9E54:("D_801B9E54","UNK_TYPE4","",0x4),
- 0x801B9E58:("D_801B9E58","UNK_TYPE4","",0x4),
+ 0x801B9E50:("sUpdateCameraDirection","UNK_TYPE4","",0x4),
+ 0x801B9E54:("sIsFalse","UNK_TYPE4","",0x4),
+ 0x801B9E58:("sCameraInitSceneTimer","UNK_TYPE4","",0x4),
0x801B9E5C:("D_801B9E5C","UNK_TYPE4","",0x4),
0x801B9E60:("D_801B9E60","f32","",0x4),
0x801B9E64:("D_801B9E64","UNK_TYPE1","",0x1),
0x801B9E84:("D_801B9E84","UNK_TYPE1","",0x1),
0x801B9EB4:("D_801B9EB4","UNK_TYPE4","",0x4),
0x801B9ED4:("D_801B9ED4","UNK_TYPE4","",0x4),
- 0x801B9F04:("D_801B9F04","UNK_TYPE4","",0x4),
- 0x801B9F0C:("D_801B9F0C","UNK_TYPE2","",0x2),
- 0x801B9F10:("D_801B9F10","UNK_TYPE4","",0x4),
+ 0x801B9F04:("sEarthquakeFreq","UNK_TYPE4","",0x4),
+ 0x801B9F0C:("sEarthquakeTimer","UNK_TYPE2","",0x2),
+ 0x801B9F10:("sModeChangeFlags","UNK_TYPE4","",0x4),
0x801B9F20:("sDamageTablePresets","DamageTable","[23]",0x2e0),
0x801BA200:("damageMultipliers","f32","[16]",0x40),
0x801BA240:("defaultCollider","Collider","",0x18),
@@ -906,33 +923,25 @@
0x801BB0DC:("D_801BB0DC","UNK_TYPE1","",0x1),
0x801BB0FC:("D_801BB0FC","UNK_TYPE2","",0x2),
0x801BB100:("D_801BB100","UNK_TYPE1","",0x1),
- 0x801BB124:("D_801BB124","UNK_TYPE2","",0x2),
- 0x801BB128:("D_801BB128","UNK_TYPE2","",0x2),
- 0x801BB12C:("D_801BB12C","UNK_TYPE1","",0x1),
+ 0x801BB124:("sCurTextId","UNK_TYPE2","",0x2),
+ 0x801BB128:("sCurOcarinaAction","UNK_TYPE2","",0x2),
+ 0x801BB12C:("gOpeningEntranceIndex","UNK_TYPE1","",0x1),
0x801BB130:("sCutsceneStoredPlayerForm","UNK_TYPE1","",0x1),
- 0x801BB134:("sCsStateHandlers1","cutscene_update_func","[5]",0x14),
- 0x801BB148:("sCsStateHandlers2","cutscene_update_func","[5]",0x14),
+ 0x801BB134:("sManualCutsceneHandlers","cutscene_update_func","[5]",0x14),
+ 0x801BB148:("sScriptedCutsceneHandlers","cutscene_update_func","[5]",0x14),
0x801BB15C:("D_801BB15C","UNK_TYPE2","",0x2),
- 0x801BB160:("D_801BB160","UNK_TYPE4","",0x4),
+ 0x801BB160:("sCutsceneTextboxType","UNK_TYPE4","",0x4),
0x801BB170:("sDrawItemTable","DrawItemTableEntry","[118]",0x1098),
- 0x801BC210:("D_801BC210","UNK_TYPE1","",0x1),
- 0x801BC240:("D_801BC240","Gfx","[9]",0x48),
- 0x801BC288:("D_801BC288","Gfx","[3]",0x18),
+ 0x801BC210:("gEffFootprintVtx","UNK_TYPE1","",0x1),
+ 0x801BC240:("gEffFootprintMaterialDL","Gfx","[9]",0x48),
+ 0x801BC288:("gEffFootprintModelDL","Gfx","[3]",0x18),
0x801BC2A0:("D_801BC2A0","UNK_TYPE1","",0x1),
0x801BC3F0:("gEnHyBodyParts","UNK_TYPE1","",0x1),
0x801BC400:("gEnHyParentBodyParts","UNK_TYPE1","",0x1),
0x801BC410:("gEnHyShadowSizes","s32",[],0x10),
0x801BC420:("sReactionTextIds","u16","[]",0x140A),
- 0x801BD830:("actorCutscenesGlobalCutscenes","ActorCutscene","[8]",0x80),
- 0x801BD8B0:("actorCutsceneCurrent","s16","",0x2),
- 0x801BD8B2:("actorCutsceneCurrentLength","s16","",0x2),
- 0x801BD8B4:("actorCutsceneEnding","s16","",0x2),
- 0x801BD8B6:("actorCutsceneCurrentCamera","s16","",0x2),
- 0x801BD8B8:("actorCutsceneCurrentCutsceneActor","Actor*","",0x4),
- 0x801BD8BC:("actorCutsceneStartMethod","UNK_TYPE4","",0x4),
- 0x801BD8C0:("actorCutscenesPlayState","PlayState*","",0x4),
- 0x801BD8C4:("actorCutsceneReturnCamera","s16","",0x2),
- 0x801BD8C6:("D_801BD8C6","s16","",0x2),
+ 0x801BD830:("sGlobalCutsceneList","ActorCutscene","[8]",0x80),
+ 0x801BD8B0:("sCutsceneMgr","ActorCutsceneManager","",0x18),
0x801BD8D0:("sFireObjCollisionInit","ColliderCylinderInit","",0x2c),
0x801BD8FC:("sFireObjColors","FireObjColors","[1]",0x08),
0x801BD904:("sFireObjLightParams","FireObjLightParams","[1]",0x08),
@@ -959,9 +968,9 @@
0x801BDACC:("D_801BDACC","UNK_TYPE4","",0x4),
0x801BDAF0:("D_801BDAF0","UNK_TYPE4","",0x4),
0x801BDAF8:("D_801BDAF8","UNK_TYPE4","",0x4),
- 0x801BDB00:("D_801BDB00","UNK_TYPE1","",0x1),
- 0x801BDB08:("sKaleidoSetupEyeX","UNK_TYPE1","",0x1),
- 0x801BDB18:("sKaleidoSetupEyeZ","UNK_TYPE1","",0x1),
+ 0x801BDB00:("sKaleidoSetupRightPageIndex","UNK_TYPE1","",0x1),
+ 0x801BDB08:("sKaleidoSetupRightPageEyeX","UNK_TYPE1","",0x1),
+ 0x801BDB18:("sKaleidoSetupRightPageEyeZ","UNK_TYPE1","",0x1),
0x801BDB30:("kanfontOrdering","u8","[92]",0x5c),
0x801BDB90:("D_801BDB90","f32","",0x4),
0x801BDB94:("D_801BDB94","UNK_TYPE4","",0x4),
@@ -1063,8 +1072,8 @@
0x801BF5C0:("D_801BF5C0","UNK_PTR","",0x4),
0x801BF68C:("D_801BF68C","UNK_TYPE1","",0x1),
0x801BF6C0:("sRestrictionFlags","RestrictionFlags","[113]",0x1c4),
- 0x801BF884:("D_801BF884","UNK_TYPE2","",0x2),
- 0x801BF888:("D_801BF888","UNK_TYPE2","",0x2),
+ 0x801BF884:("sPictoState","UNK_TYPE2","",0x2),
+ 0x801BF888:("sPictoPhotoBeingTaken","UNK_TYPE2","",0x2),
0x801BF88C:("sHBAScoreTier","UNK_TYPE2","",0x2),
0x801BF890:("sMinigameScoreDigits","UNK_TYPE2","",0x2),
0x801BF898:("sCUpInvisible","UNK_TYPE2","",0x2),
@@ -1074,7 +1083,7 @@
0x801BF8A8:("sMagicMeterOutlinePrimBlue","UNK_TYPE2","",0x2),
0x801BF8AC:("sMagicBorderRatio","UNK_TYPE2","",0x2),
0x801BF8B0:("sMagicBorderStep","UNK_TYPE2","",0x2),
- 0x801BF8DC:("sEnvTimerType","UNK_TYPE2","",0x2),
+ 0x801BF8DC:("sEnvHazard","UNK_TYPE2","",0x2),
0x801BF8E0:("sEnvTimerActive","UNK_TYPE2","",0x2),
0x801BF8E4:("sPostmanBunnyHoodState","UNK_TYPE2","",0x2),
0x801BF8E8:("sTimerPausedOsTime","UNK_TYPE4","",0x4),
@@ -1088,7 +1097,7 @@
0x801BF978:("D_801BF978","UNK_TYPE4","",0x4),
0x801BF97C:("D_801BF97C","UNK_TYPE4","",0x4),
0x801BF980:("D_801BF980","UNK_TYPE4","",0x4),
- 0x801BF988:("D_801BF988","Gfx","[5]",0x28),
+ 0x801BF988:("sScreenFillSetupDL","Gfx","[5]",0x28),
0x801BF9B0:("D_801BF9B0","UNK_TYPE2","",0x2),
0x801BF9B4:("D_801BF9B4","UNK_TYPE1","",0x1),
0x801BF9BC:("D_801BF9BC","UNK_TYPE1","",0x1),
@@ -1107,12 +1116,12 @@
0x801BF9F8:("sFinalHoursClockFrameEnvBlue","UNK_TYPE2","",0x2),
0x801BF9FC:("sFinalHoursClockColorTimer","UNK_TYPE2","",0x2),
0x801BFA00:("sFinalHoursClockColorTargetIndex","UNK_TYPE2","",0x2),
- 0x801BFA04:("D_801BFA04","UNK_TYPE2","",0x2),
- 0x801BFA1C:("D_801BFA1C","UNK_TYPE2","",0x2),
- 0x801BFA34:("D_801BFA34","UNK_TYPE2","",0x2),
- 0x801BFA4C:("D_801BFA4C","UNK_TYPE2","",0x2),
- 0x801BFA64:("D_801BFA64","UNK_TYPE2","",0x2),
- 0x801BFA74:("D_801BFA74","UNK_TYPE2","",0x2),
+ 0x801BFA04:("sActionVtxPosX","UNK_TYPE2","",0x2),
+ 0x801BFA1C:("sActionVtxWidths","UNK_TYPE2","",0x2),
+ 0x801BFA34:("sActionVtxPosY","UNK_TYPE2","",0x2),
+ 0x801BFA4C:("sActionVtxHeights","UNK_TYPE2","",0x2),
+ 0x801BFA64:("sPerfectLettersCenterX","UNK_TYPE2","",0x2),
+ 0x801BFA74:("sPerfectLettersCenterY","UNK_TYPE2","",0x2),
0x801BFA84:("sPostmanTimerInputBtnAPressed","UNK_TYPE4","",0x4),
0x801BFAB0:("sDoActionTextures","UNK_TYPE1","",0x1),
0x801BFAB8:("magicBorderColors","UNK_TYPE1","",0x1),
@@ -1124,14 +1133,14 @@
0x801BFAFC:("D_801BFAFC","UNK_TYPE4","",0x4),
0x801BFB04:("D_801BFB04","UNK_TYPE1","",0x1),
0x801BFB0C:("D_801BFB0C","UNK_TYPE1","",0x1),
- 0x801BFB14:("D_801BFB14","UNK_TYPE1","",0x1),
- 0x801BFB1C:("D_801BFB1C","UNK_TYPE1","",0x1),
- 0x801BFB24:("D_801BFB24","UNK_TYPE1","",0x1),
- 0x801BFB2C:("D_801BFB2C","UNK_TYPE2","",0x2),
+ 0x801BFB14:("sMagicArrowEffectsR","UNK_TYPE1","",0x1),
+ 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),
- 0x801BFB38:("D_801BFB38","UNK_TYPE1","",0x1),
- 0x801BFB6C:("D_801BFB6C","UNK_TYPE1","",0x1),
+ 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),
@@ -1150,68 +1159,68 @@
0x801BFC08:("D_801BFC08","UNK_TYPE1","",0x1),
0x801BFC0C:("D_801BFC0C","UNK_TYPE1","",0x1),
0x801BFC10:("D_801BFC10","UNK_TYPE1","",0x1),
- 0x801BFC14:("D_801BFC14","UNK_TYPE1","",0x1),
+ 0x801BFC14:("sFinalHoursDigitTextures","UNK_TYPE1","",0x1),
0x801BFC40:("D_801BFC40","UNK_TYPE1","",0x1),
- 0x801BFC50:("D_801BFC50","UNK_TYPE2","",0x2),
- 0x801BFC60:("D_801BFC60","s16","[6]",0xC),
- 0x801BFC6C:("D_801BFC6C","UNK_TYPE4","",0x4),
- 0x801BFC7C:("D_801BFC7C","UNK_TYPE2","",0x2),
- 0x801BFC8C:("D_801BFC8C","UNK_TYPE1","",0x1),
- 0x801BFC98:("D_801BFC98","UNK_TYPE2","",0x2),
- 0x801BFCA8:("D_801BFCA8","UNK_TYPE2","",0x2),
- 0x801BFCB8:("D_801BFCB8","UNK_TYPE1","",0x1),
- 0x801BFCC4:("D_801BFCC4","UNK_TYPE4","",0x4),
+ 0x801BFC50:("sPerfectLettersType1OffScreenAngles","UNK_TYPE2","",0x2),
+ 0x801BFC60:("sPerfectLettersType1PrimColorTargets","s16","[6]",0xC),
+ 0x801BFC6C:("sPerfectLettersType2SpellingOffsetsX","UNK_TYPE4","",0x4),
+ 0x801BFC7C:("sPerfectLettersType2OffScreenOffsetsX","UNK_TYPE2","",0x2),
+ 0x801BFC8C:("sPerfectLettersType2PrimColorTargets","UNK_TYPE1","",0x1),
+ 0x801BFC98:("sPerfectLettersType3SpellingOffsetsX","UNK_TYPE2","",0x2),
+ 0x801BFCA8:("sPerfectLettersType3OffScreenAngles","UNK_TYPE2","",0x2),
+ 0x801BFCB8:("sPerfectLettersType3PrimColorTargets","UNK_TYPE1","",0x1),
+ 0x801BFCC4:("sPerfectLettersTextures","UNK_TYPE4","",0x4),
0x801BFCE4:("sTimerStateTimer","UNK_TYPE4","",0x4),
0x801BFCE8:("sTimerDigits","u16","[8]",0x10),
0x801BFCF8:("sTimerBeepSfxSeconds","UNK_TYPE4","",0x4),
0x801BFCFC:("D_801BFCFC","UNK_TYPE4","",0x4),
0x801BFD0C:("D_801BFD0C","UNK_TYPE4","",0x4),
- 0x801BFD1C:("D_801BFD1C","UNK_TYPE1","",0x1),
- 0x801BFD24:("D_801BFD24","UNK_TYPE1","",0x1),
- 0x801BFD2C:("D_801BFD2C","UNK_TYPE1","",0x1),
- 0x801BFD40:("D_801BFD40","UNK_TYPE1","",0x1),
- 0x801BFD54:("D_801BFD54","UNK_TYPE1","",0x1),
- 0x801BFD64:("D_801BFD64","UNK_TYPE1","",0x1),
- 0x801BFD6C:("D_801BFD6C","UNK_TYPE2","",0x2),
- 0x801BFD84:("D_801BFD84","UNK_TYPE1","",0x1),
- 0x801BFD8C:("D_801BFD8C","UNK_TYPE1","",0x1),
- 0x801BFD94:("D_801BFD94","UNK_TYPE4","",0x4),
- 0x801BFD98:("D_801BFD98","UNK_TYPE4","[2]",0x8),
+ 0x801BFD1C:("sRupeeDigitsFirst","UNK_TYPE1","",0x1),
+ 0x801BFD24:("sRupeeDigitsCount","UNK_TYPE1","",0x1),
+ 0x801BFD2C:("sRupeeCounterIconPrimColors","UNK_TYPE1","",0x1),
+ 0x801BFD40:("sRupeeCounterIconEnvColors","UNK_TYPE1","",0x1),
+ 0x801BFD54:("sMinigameCountdownTextures","UNK_TYPE1","",0x1),
+ 0x801BFD64:("sMinigameCountdownTexWidths","UNK_TYPE1","",0x1),
+ 0x801BFD6C:("sMinigameCountdownPrimColors","UNK_TYPE2","",0x2),
+ 0x801BFD84:("sStoryTextures","UNK_TYPE1","",0x1),
+ 0x801BFD8C:("sStoryTLUTs","UNK_TYPE1","",0x1),
+ 0x801BFD94:("sIsSunsPlayedAtDay","UNK_TYPE4","",0x4),
+ 0x801BFD98:("sPrevTimeSpeed","UNK_TYPE4","[2]",0x8),
0x801BFDA0:("sMaskObjectIds","s16","[24]",0x30),
0x801BFDD0:("D_801BFDD0","UNK_TYPE1","",0x1),
0x801BFDE8:("sMaskItemIds","UNK_TYPE1","",0x1),
- 0x801BFE00:("D_801BFE00","UNK_TYPE1","",0x1),
+ 0x801BFE00:("gPlayerSkeletons","FlexSkeletonHeader*","[5]",0x14),
0x801BFE14:("D_801BFE14","UNK_TYPE1","",0x1),
- 0x801BFF34:("D_801BFF34","UNK_TYPE2","",0x2),
+ 0x801BFF34:("sCItemButtons","UNK_TYPE2","",0x2),
0x801BFF3C:("sActionModelGroups","UNK_TYPE1","",0x1),
0x801BFF90:("D_801BFF90","UNK_TYPE1","",0x1),
0x801BFF98:("sPlayerStrengths","UNK_TYPE1","",0x1),
- 0x801BFFA0:("sEnvironmentTextTriggers","UNK_TYPE1","",0x1),
+ 0x801BFFA0:("sEnvHazardTextTriggers","UNK_TYPE1","",0x1),
0x801BFFB0:("gPlayerModelTypes","UNK_TYPE1","",0x1),
- 0x801BFFFC:("D_801BFFFC","UNK_TYPE1","",0x1),
- 0x801C0024:("D_801C0024","UNK_TYPE1","",0x1),
- 0x801C0034:("D_801C0034","UNK_TYPE1","",0x1),
- 0x801C005C:("D_801C005C","UNK_TYPE1","",0x1),
- 0x801C0084:("D_801C0084","UNK_TYPE1","",0x1),
- 0x801C00AC:("D_801C00AC","UNK_TYPE1","",0x1),
- 0x801C00BC:("D_801C00BC","UNK_TYPE1","",0x1),
- 0x801C00D4:("D_801C00D4","UNK_TYPE1","",0x1),
- 0x801C00EC:("D_801C00EC","UNK_TYPE1","",0x1),
- 0x801C0114:("D_801C0114","UNK_TYPE1","",0x1),
- 0x801C013C:("D_801C013C","UNK_TYPE1","",0x1),
- 0x801C0164:("D_801C0164","UNK_TYPE1","",0x1),
+ 0x801BFFFC:("gPlayerWaistDLs","UNK_TYPE1","",0x1),
+ 0x801C0024:("gPlayerHandHoldingShields","UNK_TYPE1","",0x1),
+ 0x801C0034:("gPlayerSheath12DLs","UNK_TYPE1","",0x1),
+ 0x801C005C:("gPlayerSheath13DLs","UNK_TYPE1","",0x1),
+ 0x801C0084:("gPlayerSheath14DLs","UNK_TYPE1","",0x1),
+ 0x801C00AC:("gPlayerShields","Gfx*","",0x10),
+ 0x801C00BC:("gPlayerSheathedSwords","Gfx*","",0x18),
+ 0x801C00D4:("gPlayerSwordSheaths","Gfx*","",0x18),
+ 0x801C00EC:("gPlayerLeftHandTwoHandSwordDLs","UNK_TYPE1","",0x1),
+ 0x801C0114:("gPlayerLeftHandOpenDLs","UNK_TYPE1","",0x1),
+ 0x801C013C:("gPlayerLeftHandClosedDLs","UNK_TYPE1","",0x1),
+ 0x801C0164:("gPlayerLeftHandOneHandSwordDLs","UNK_TYPE1","",0x1),
0x801C018C:("D_801C018C","UNK_TYPE1","",0x1),
- 0x801C01A4:("D_801C01A4","UNK_TYPE1","",0x1),
- 0x801C01CC:("D_801C01CC","UNK_TYPE1","",0x1),
- 0x801C01F4:("D_801C01F4","UNK_TYPE1","",0x1),
- 0x801C021C:("D_801C021C","UNK_TYPE1","",0x1),
- 0x801C0244:("D_801C0244","UNK_TYPE1","",0x1),
- 0x801C026C:("D_801C026C","UNK_TYPE1","",0x1),
- 0x801C0294:("D_801C0294","UNK_TYPE1","",0x1),
- 0x801C02A8:("D_801C02A8","UNK_TYPE1","",0x1),
- 0x801C02BC:("D_801C02BC","UNK_TYPE1","",0x1),
- 0x801C02D0:("D_801C02D0","UNK_TYPE1","",0x1),
- 0x801C02E4:("D_801C02E4","UNK_TYPE1","",0x1),
+ 0x801C01A4:("gPlayerRightHandOpenDLs","UNK_TYPE1","",0x1),
+ 0x801C01CC:("gPlayerRightHandClosedDLs","UNK_TYPE1","",0x1),
+ 0x801C01F4:("gPlayerRightHandBowDLs","UNK_TYPE1","",0x1),
+ 0x801C021C:("gPlayerRightHandInstrumentDLs","UNK_TYPE1","",0x1),
+ 0x801C0244:("gPlayerRightHandHookshotDLs","UNK_TYPE1","",0x1),
+ 0x801C026C:("gPlayerLeftHandBottleDLs","UNK_TYPE1","",0x1),
+ 0x801C0294:("sPlayerFirstPersonLeftForearmDLs","UNK_TYPE1","",0x1),
+ 0x801C02A8:("sPlayerFirstPersonLeftHandDLs","UNK_TYPE1","",0x1),
+ 0x801C02BC:("sPlayerFirstPersonRightShoulderDLs","UNK_TYPE1","",0x1),
+ 0x801C02D0:("sPlayerFirstPersonRightHandDLs","UNK_TYPE1","",0x1),
+ 0x801C02E4:("sPlayerFirstPersonRightHandHookshotDLs","UNK_TYPE1","",0x1),
0x801C02F8:("sPlayerDListGroups","UNK_PTR","",0x4),
0x801C0340:("D_801C0340","UNK_TYPE1","",0x1),
0x801C0368:("D_801C0368","UNK_TYPE1","",0x1),
@@ -1248,11 +1257,11 @@
0x801C07F0:("D_801C07F0","UNK_TYPE1","",0x1),
0x801C0820:("D_801C0820","UNK_TYPE1","",0x1),
0x801C0838:("D_801C0838","UNK_TYPE1","",0x1),
- 0x801C0850:("D_801C0850","UNK_TYPE1","",0x1),
- 0x801C0860:("D_801C0860","UNK_TYPE1","",0x1),
- 0x801C0870:("D_801C0870","UNK_PTR","",0x4),
- 0x801C0890:("D_801C0890","UNK_TYPE1","",0x1),
- 0x801C08A0:("D_801C08A0","UNK_TYPE1","",0x20),
+ 0x801C0850:("gCullBackDList","UNK_TYPE1","",0x1),
+ 0x801C0860:("gCullFrontDList","UNK_TYPE1","",0x1),
+ 0x801C0870:("sPlayerEyesTextures","UNK_PTR","",0x4),
+ 0x801C0890:("sPlayerMouthTextures","UNK_TYPE1","",0x1),
+ 0x801C08A0:("sPlayerFaces","UNK_TYPE1","",0x20),
0x801C08C0:("D_801C08C0","UNK_TYPE1","",0x1),
0x801C08FC:("D_801C08FC","UNK_TYPE1","",0x1),
0x801C0910:("D_801C0910","UNK_TYPE1","",0x1),
@@ -1262,7 +1271,7 @@
0x801C0958:("D_801C0958","UNK_TYPE4","",0x4),
0x801C095C:("D_801C095C","UNK_PTR","",0x4),
0x801C0964:("D_801C0964","UNK_TYPE1","",0x1),
- 0x801C096C:("D_801C096C","UNK_TYPE1","",0x1),
+ 0x801C096C:("sPlayerShieldCollisionTypes","UNK_TYPE1","",0x1),
0x801C0970:("D_801C0970","UNK_TYPE1","",0x1),
0x801C0994:("D_801C0994","UNK_TYPE4","",0x4),
0x801C09B8:("D_801C09B8","UNK_TYPE1","",0x1),
@@ -1296,28 +1305,27 @@
0x801C0C0C:("D_801C0C0C","UNK_TYPE4","",0x4),
0x801C0C30:("D_801C0C30","UNK_TYPE1","",0x1),
0x801C0C54:("D_801C0C54","struct_80128388_arg1","",0x54),
- 0x801C0CA8:("D_801C0CA8","UNK_TYPE1","",0x1),
+ 0x801C0CA8:("sPlayerBottleColors","UNK_TYPE1","",0x1),
0x801C0CE8:("D_801C0CE8","UNK_TYPE4","",0x4),
- 0x801C0D24:("D_801C0D24","UNK_TYPE1","",0x1),
+ 0x801C0D24:("sPlayerFootPos","UNK_TYPE1","",0x1),
0x801C0D60:("D_801C0D60","UNK_TYPE1","",0x1),
0x801C0D6C:("D_801C0D6C","UNK_TYPE1","",0x1),
- 0x801C0D78:("D_801C0D78","UNK_TYPE1","",0x1),
+ 0x801C0D78:("sMeleeWeaponLengths","f32","[7]",0x1C),
0x801C0D94:("D_801C0D94","UNK_TYPE4","",0x4),
- 0x801C0D98:("D_801C0D98","UNK_TYPE4","",0x4),
- 0x801C0D9C:("D_801C0D9C","UNK_TYPE4","",0x4),
- 0x801C0DA0:("D_801C0DA0","UNK_TYPE4","",0x4),
- 0x801C0DA8:("D_801C0DA8","UNK_TYPE1","",0x1),
+ 0x801C0D98:("D_801C0D98","Vec3f","",0xC),
+ 0x801C0DA4:("D_801C0DA4","UNK_TYPE4","",0x4),
+ 0x801C0DA8:("sRightHandLimbModelShieldQuadVertices","Vec3f","[4]",0x30),
0x801C0DD8:("D_801C0DD8","UNK_TYPE1","",0x1),
0x801C0DE4:("D_801C0DE4","UNK_TYPE1","",0x1),
0x801C0DF0:("D_801C0DF0","UNK_TYPE4","",0x4),
0x801C0E04:("D_801C0E04","UNK_TYPE1","",0x1),
0x801C0E2C:("D_801C0E2C","UNK_TYPE4","",0x4),
0x801C0E40:("D_801C0E40","UNK_TYPE4","",0x4),
- 0x801C0E7C:("D_801C0E7C","UNK_TYPE1","",0x1),
+ 0x801C0E7C:("sPlayerFocusHeadLimbModelPos","Vec3f","",0xC),
0x801C0E94:("D_801C0E94","UNK_TYPE1","",0x1),
0x801C0EA0:("D_801C0EA0","UNK_TYPE1","",0x1),
- 0x801C0EAC:("D_801C0EAC","UNK_TYPE1","",0x1),
- 0x801C0EB8:("D_801C0EB8","UNK_TYPE1","",0x1),
+ 0x801C0EAC:("sSheathLimbModelShieldOnBackPos","Vec3f","",0xC),
+ 0x801C0EB8:("sSheathLimbModelShieldOnBackZyxRot","Vec3s","",0x6),
0x801C0EC0:("sIsQuakeInitialized","UNK_TYPE2","",0x2),
0x801C0EC4:("sQuakeRequestCount","s16","",0x2),
0x801C0EC8:("sQuakeCallbacks","quake_callback_func","[7]",0x1c),
@@ -1327,8 +1335,8 @@
0x801C0EF0:("sSetupDL","Gfx","[438]",0xdb0),
0x801C1CA0:("sFillSetupDL","Gfx","[12]",0x60),
0x801C1D00:("gEmptyDL","Gfx","[1]",0x8),
- 0x801C1D10:("D_801C1D10","Vec3f","",0xc),
- 0x801C1D1C:("roomDrawFuncs","room_draw_func","[4]",0x10),
+ 0x801C1D10:("sZeroVec","Vec3f","",0xc),
+ 0x801C1D1C:("sRoomDrawHandlers","RoomDrawHandler","[4]",0x10),
0x801C1D30:("gBitFlags","u32","[32]",0x80),
0x801C1DB0:("gEquipMasks","u16","[4]",0x8),
0x801C1DB8:("gEquipNegMasks","u16","[4]",0x8),
@@ -1344,11 +1352,12 @@
0x801C20C8:("gItemPrices","UNK_TYPE1","",0x1),
0x801C212C:("gSceneIdsPerRegion","SceneIdList","[]",0x252),
0x801C2380:("sSceneIdsPerTingleMap","u16","[]",0x90),
- 0x801C2410:("D_801C2410","UNK_TYPE1","",0x1),
+ 0x801C2410:("gPlayerFormItemRestrictions","UNK_TYPE1","",0x1),
0x801C2650:("tatlMessageFiles","RomFile","[2]",0x10),
0x801C2660:("sceneTextureFiles","RomFile","[9]",0x48),
0x801C26A8:("sceneHeaderFuncTable","scene_header_func","[31]",0x7c),
- 0x801C2730:("gPlayerFormObjectIndices","s16","[8]",0x10),
+ 0x801C2730:("gPlayerFormObjectIndices","s16","[5]",0xA),
+ 0x801C273C:("gObjectTableSize","ObjectId","",0x4),
0x801C2740:("gObjectTable","RomFile","[643]",0x1418),
0x801C3B60:("sSceneDrawDefaultDl","Gfx","[11]",0x58),
0x801C3BB8:("gSceneProcSceneDrawFuncs","SceneDrawConfigFunc","[8]",0x20),
@@ -1943,11 +1952,9 @@
0x801C66D0:("D_801C66D0","UNK_TYPE2","",0x2),
0x801C6798:("D_801C6798","UNK_TYPE4","",0x4),
0x801C67B0:("gAmmoItems","UNK_TYPE1","",0x1),
- 0x801C67C8:("D_801C67C8","s32","[8]",0x20),
- 0x801C67E8:("D_801C67E8","UNK_TYPE4","",0x4),
- 0x801C67F0:("D_801C67F0","s32","[8]",0x20),
- 0x801C6818:("D_801C6818","UNK_TYPE1","",0x1),
- 0x801C6838:("D_801C6838","UNK_TYPE4","",0x4),
+ 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),
@@ -1991,7 +1998,7 @@
0x801CFC98:("D_801CFC98","UNK_TYPE1","",0x1),
0x801CFCA4:("D_801CFCA4","UNK_TYPE2","",0x2),
0x801CFCAC:("D_801CFCAC","UNK_TYPE2","",0x2),
- 0x801CFCB8:("D_801CFCB8","UNK_TYPE1","",0x1),
+ 0x801CFCB8:("gOcarinaSongItemMap","UNK_TYPE1","",0x1),
0x801CFCD8:("D_801CFCD8","UNK_TYPE2","",0x2),
0x801CFCE4:("D_801CFCE4","UNK_TYPE2","",0x2),
0x801CFCF0:("D_801CFCF0","UNK_TYPE2","",0x2),
@@ -2127,11 +2134,11 @@
0x801D0D28:("TransitionCircle_InitVars","UNK_PTR","",0x4),
0x801D0D50:("gDbgCamEnabled","UNK_TYPE4","",0x4),
0x801D0D54:("D_801D0D54","UNK_TYPE1","",0x1),
- 0x801D0D58:("D_801D0D58","UNK_TYPE2","",0x2),
- 0x801D0D5C:("D_801D0D5C","UNK_TYPE2","",0x2),
+ 0x801D0D58:("sQuakeIndex","UNK_TYPE2","",0x2),
+ 0x801D0D5C:("sIsCameraUnderwater","UNK_TYPE2","",0x2),
0x801D0D60:("D_801D0D60","Input*","",0x4),
- 0x801D0D64:("D_801D0D64","s16","[10]",0x14),
- 0x801D0D7A:("D_801D0D7A","UNK_TYPE1","",0x1),
+ 0x801D0D64:("sPlayerCsIdToCsCamId","s16","[10]",0x14),
+ 0x801D0D78:("D_801D0D78","u16","[4]",0x4),
0x801D0D80:("D_801D0D80","UNK_TYPE1","",0x1),
0x801D11F4:("D_801D11F4","UNK_TYPE1","",0x1),
0x801D1230:("D_801D1230","UNK_TYPE1","",0x1),
@@ -2237,13 +2244,13 @@
0x801D5FD4:("D_801D5FD4","UNK_TYPE1","",0x1),
0x801D5FE0:("D_801D5FE0","UNK_PTR","",0x4),
0x801D5FE4:("D_801D5FE4","UNK_TYPE1","",0x1),
- 0x801D5FE8:("gAudioContextInitalized","UNK_TYPE4","",0x4),
+ 0x801D5FE8:("gAudioCtxInitalized","UNK_TYPE4","",0x4),
0x801D5FEC:("D_801D5FEC","UNK_TYPE4","",0x4),
- 0x801D5FF0:("D_801D5FF0","UNK_TYPE4","",0x4),
- 0x801D5FF4:("D_801D5FF4","UNK_TYPE4","",0x4),
- 0x801D5FF8:("D_801D5FF8","UNK_TYPE1","",0x1),
- 0x801D5FFC:("D_801D5FFC","UNK_TYPE4","",0x4),
- 0x801D6000:("D_801D6000","UNK_PTR","",0x4),
+ 0x801D5FF0:("sWaitingAudioTask","UNK_TYPE4","",0x4),
+ 0x801D5FF4:("sMaxWriteReadDiff","UNK_TYPE4","",0x4),
+ 0x801D5FF8:("sCurCmdRdPos","UNK_TYPE1","",0x1),
+ 0x801D5FFC:("sAudioRandom","UNK_TYPE4","",0x4),
+ 0x801D6000:("sAudioOsCount","UNK_PTR","",0x4),
0x801D6010:("D_801D6010","UNK_TYPE1","",0x1),
0x801D6014:("D_801D6014","UNK_TYPE1","",0x1),
0x801D6028:("D_801D6028","UNK_TYPE1","",0x1),
@@ -2390,14 +2397,14 @@
0x801DB4A4:("gSfxDefaultPos","UNK_TYPE4","",0x4),
0x801DB4B0:("gSfxDefaultFreqAndVolScale","UNK_TYPE1","",0x1),
0x801DB4B8:("gSfxDefaultReverb","UNK_TYPE1","",0x1),
- 0x801DB4C0:("D_801DB4C0","UNK_TYPE1","",0x1),
- 0x801DB4C4:("D_801DB4C4","UNK_TYPE1","",0x1),
- 0x801DB4C8:("D_801DB4C8","UNK_TYPE1","",0x1),
- 0x801DB4CC:("D_801DB4CC","UNK_TYPE1","",0x1),
+ 0x801DB4C0:("sSeqCmdWritePos","UNK_TYPE1","",0x1),
+ 0x801DB4C4:("sSeqCmdReadPos","UNK_TYPE1","",0x1),
+ 0x801DB4C8:("sStartSeqDisabled","UNK_TYPE1","",0x1),
+ 0x801DB4CC:("sSoundModeList","UNK_TYPE1","",0x1),
0x801DB4D4:("gAudioSpecId","UNK_TYPE1","",0x1),
- 0x801DB4D8:("D_801DB4D8","UNK_TYPE1","",0x1),
- 0x801DB4DC:("D_801DB4DC","UNK_TYPE4","",0x4),
- 0x801DB4E0:("D_801DB4E0","UNK_TYPE1","",0x1),
+ 0x801DB4D8:("gAudioHeapResetState","UNK_TYPE1","",0x1),
+ 0x801DB4DC:("sResetAudioHeapSeqCmd","UNK_TYPE4","",0x4),
+ 0x801DB4E0:("gReverbSettings","UNK_TYPE1","",0x1),
0x801DB528:("D_801DB528","UNK_TYPE1","",0x1),
0x801DB570:("D_801DB570","UNK_TYPE1","",0x1),
0x801DB5B8:("D_801DB5B8","UNK_TYPE1","",0x1),
@@ -3846,12 +3853,12 @@
0x801ED8E0:("D_801ED8E0","Mtx","",0x40),
0x801ED920:("D_801ED920","UNK_TYPE1","",0x1),
0x801ED930:("D_801ED930","FaultClient","",0x10),
- 0x801ED940:("D_801ED940","FaultAddrConvClient","",0xc),
+ 0x801ED940:("sActorOverlayTableFaultAddrConvClient","FaultAddrConvClient","",0xC),
0x801ED950:("D_801ED950","char","[80]",0x50),
0x801ED9A0:("D_801ED9A0","char","[80]",0x50),
0x801ED9F0:("D_801ED9F0","Vec3f","[3]",0x24),
0x801EDA18:("D_801EDA18","Vec3f","[3]",0x24),
- 0x801EDA40:("D_801EDA40","MtxF","",0x40),
+ 0x801EDA40:("sModelToWorldMtxF","MtxF","",0x40),
0x801EDA80:("D_801EDA80","Vec3f","[3]",0x24),
0x801EDAA8:("D_801EDAA8","char","[80]",0x50),
0x801EDAF8:("D_801EDAF8","char","[80]",0x50),
@@ -3861,26 +3868,14 @@
0x801EDBA8:("D_801EDBA8","Sphere16","",0x8),
0x801EDBB0:("D_801EDBB0","TriNorm","",0x34),
0x801EDBF0:("D_801EDBF0","s16","",0x2),
- 0x801EDBF4:("D_801EDBF4","UNK_TYPE1","",0x1),
- 0x801EDBF8:("D_801EDBF8","UNK_TYPE1","",0x1),
- 0x801EDC00:("D_801EDC00","UNK_TYPE1","",0x1),
- 0x801EDC04:("D_801EDC04","UNK_TYPE1","",0x1),
- 0x801EDC08:("D_801EDC08","UNK_TYPE1","",0x1),
- 0x801EDC0C:("D_801EDC0C","UNK_TYPE1","",0x1),
- 0x801EDC10:("D_801EDC10","UNK_TYPE1","",0x1),
- 0x801EDC14:("D_801EDC14","UNK_TYPE1","",0x1),
- 0x801EDC28:("D_801EDC28","UNK_TYPE1","",0x1),
- 0x801EDC30:("D_801EDC30","UNK_TYPE1","",0x1),
- 0x801EDC8C:("D_801EDC8C","UNK_TYPE1","",0x1),
- 0x801EDC90:("D_801EDC90","UNK_TYPE1","",0x1),
- 0x801EDC92:("D_801EDC92","UNK_TYPE1","",0x1),
- 0x801EDC94:("D_801EDC94","UNK_TYPE1","",0x1),
- 0x801EDC96:("D_801EDC96","UNK_TYPE1","",0x1),
- 0x801EDDD0:("D_801EDDD0","UNK_TYPE1","",0x1),
- 0x801EDDD4:("D_801EDDD4","UNK_TYPE1","",0x1),
- 0x801EDDD8:("D_801EDDD8","UNK_TYPE1","",0x1),
- 0x801EDDE0:("D_801EDDE0","UNK_TYPE1","",0x1),
- 0x801EDDF0:("D_801EDDF0","UNK_TYPE1","",0x1),
+ 0x801EDBF4:("D_801EDBF4","f32","",0x4),
+ 0x801EDBF8:("D_801EDBF8","f32","",0x4),
+ 0x801EDC00:("D_801EDC00","CameraCollision","",0x28),
+ 0x801EDC28:("sCamPlayState","PlayState*","",0x4),
+ 0x801EDC30:("D_801EDC30","SwingAnimation","[4]",0x1A0),
+ 0x801EDDD0:("D_801EDDD0","Vec3f","",0xc),
+ 0x801EDDE0:("D_801EDDE0","Vec3f","",0xc),
+ 0x801EDDF0:("D_801EDDF0","Vec3f","",0xc),
0x801EDE00:("D_801EDE00","Vec3f","",0xc),
0x801EDE10:("D_801EDE10","Vec3f","",0xc),
0x801EDE20:("D_801EDE20","Vec3f","",0xc),
@@ -3925,23 +3920,21 @@
0x801EF670:("gSaveContext","SaveContext","",0x48e8),
0x801F3F58:("D_801F3F58","UNK_TYPE1","",0x1),
0x801F3F5A:("D_801F3F5A","UNK_TYPE1","",0x1),
- 0x801F3F60:("gGameInfo","GameInfo*","",0x4),
+ 0x801F3F60:("gRegEditor","RegEditor*","",0x4),
0x801F3F70:("sDebugObjectListHead","UNK_TYPE1","",0x1),
- 0x801F3F80:("D_801F3F80","UNK_TYPE1","",0x1),
- 0x801F3F83:("D_801F3F83","UNK_TYPE1","",0x1),
- 0x801F48C8:("D_801F48C8","UNK_TYPE1","",0x1),
- 0x801F4D40:("seqId","u16","",0x2),
+ 0x801F3F80:("D_801F3F80","UNK_TYPE1","",0xDC0),
+ 0x801F4D40:("sSeqId","u16","",0x2),
0x801F4D42:("sCutsceneQuakeIndex","UNK_TYPE2","",0x2),
0x801F4D48:("sCutsceneCameraInfo","UNK_TYPE","",0x80),
- 0x801F4DC8:("D_801F4DC8","u16","[10]",0x14),
+ 0x801F4DC8:("sCueTypeList","u16","[10]",0x14),
0x801F4DDC:("D_801F4DDC","UNK_TYPE1","",0x1),
- 0x801F4DE0:("D_801F4DE0","UNK_TYPE1","",0x1),
- 0x801F4DE2:("D_801F4DE2","UNK_TYPE2","",0x2),
- 0x801F4DF0:("actorCutscenes","ActorCutscene*","",0x4),
- 0x801F4DF4:("actorCutsceneCount","s16","",0x2),
- 0x801F4DF8:("actorCutsceneWaiting","u8","[16]",0x10),
+ 0x801F4DE0:("gDisablePlayerCsModeStartPos","UNK_TYPE1","",0x1),
+ 0x801F4DE2:("gDungeonBossWarpSceneId","UNK_TYPE2","",0x2),
+ 0x801F4DF0:("sSceneCutsceneList","ActorCutscene*","",0x4),
+ 0x801F4DF4:("sSceneCutsceneCount","s16","",0x2),
+ 0x801F4DF8:("sWaitingCutsceneList","u8","[16]",0x10),
0x801F4E08:("D_801F4E08","UNK_TYPE1","",0x1),
- 0x801F4E10:("actorCutsceneNextCutscenes","u8","[16]",0x10),
+ 0x801F4E10:("sNextCutsceneList","u8","[16]",0x10),
0x801F4E20:("D_801F4E20","UNK_TYPE1","",0x1),
0x801F4E30:("D_801F4E30","UNK_TYPE1","",0x1),
0x801F4E31:("D_801F4E31","UNK_TYPE1","",0x1),
@@ -4003,17 +3996,17 @@
0x801F5834:("D_801F5834","UNK_TYPE1","",0x1),
0x801F5840:("gNMIBuffer","s32*","",0x4),
0x801F5850:("sPostmanTimerInput","UNK_TYPE1","",0x1),
- 0x801F58B0:("D_801F58B0","UNK_TYPE1","",0x1),
+ 0x801F58B0:("D_801F58B0","struct_801F58B0","[3][3]",0xFC),
0x801F59AC:("D_801F59AC","UNK_TYPE1","",0x1),
- 0x801F59B0:("D_801F59B0","UNK_TYPE1","",0x1),
- 0x801F59C8:("D_801F59C8","UNK_TYPE1","",0x1),
- 0x801F59D0:("D_801F59D0","UNK_TYPE1","",0x1),
- 0x801F59DC:("D_801F59DC","UNK_TYPE1","",0x1),
- 0x801F59E0:("D_801F59E0","UNK_TYPE1","",0x1),
- 0x801F59E4:("D_801F59E4","UNK_TYPE1","",0x1),
- 0x801F59E8:("D_801F59E8","Vec3f","",0xC),
- 0x801F59F4:("D_801F59F4","UNK_TYPE1","",0x1),
- 0x801F59F8:("D_801F59F8","UNK_TYPE1","",0x1),
+ 0x801F59B0:("D_801F59B0","Vec3f","[2]",0x18),
+ 0x801F59C8:("D_801F59C8","s32","[2]",0x8),
+ 0x801F59D0:("sBunnyEarKinematics","struct_801F59D0","",0x0A),
+ 0x801F59DC:("sPlayerCurBodyPartPos","Vec3f*","",0x4),
+ 0x801F59E0:("D_801F59E0","s32","",0x4),
+ 0x801F59E4:("sPlayerLod","s32","",0x4),
+ 0x801F59E8:("sPlayerGetItemRefPos","Vec3f","",0xC),
+ 0x801F59F4:("sPlayerLeftHandType","s32","",0x4),
+ 0x801F59F8:("sPlayerRightHandType","s32","",0x4),
0x801F5A00:("sQuakeRequest","QuakeRequest","[4]",0x90),
0x801F5A90:("sDistortionRequest","DistortionRequest","",0xc),
0x801F5AA0:("sMatAnimStep","s32","",0x4),
@@ -4048,31 +4041,29 @@
0x801F6B3C:("sPlayerCallDrawFunc","UNK_TYPE1","",0x1),
0x801F6B40:("sShrinkWindow","ShrinkWindow","",0x4),
0x801F6B44:("sShrinkWindowPtr","ShrinkWindow*","",0x4),
- 0x801F6B50:("D_801F6B50","UNK_TYPE4","",0x4),
+ 0x801F6B50:("sCurCsCamera","UNK_TYPE4","",0x4),
0x801F6B58:("D_801F6B58","UNK_TYPE1","",0x1),
- 0x801F6BF0:("sKaleidoAreaFaultClient","FaultAddrConvClient","",0xC),
+ 0x801F6BF0:("sKaleidoMgrFaultAddrConvClient","FaultAddrConvClient","",0xC),
0x801F6C00:("sKaleidoScopeUpdateFunc","void*","",0x4),
0x801F6C04:("sKaleidoScopeDrawFunc","void*","",0x4),
- 0x801F6C10:("D_801F6C10","UNK_TYPE1","",0x1),
+ 0x801F6C10:("sTransitionFillTimer","UNK_TYPE1","",0x1),
0x801F6C18:("D_801F6C18","Input","",0x18),
- 0x801F6C30:("D_801F6C30","UNK_TYPE1","",0x1),
- 0x801F6D0C:("D_801F6D0C","UNK_TYPE1","",0x1),
- 0x801F6D10:("D_801F6D10","UNK_TYPE4","",0x4),
- 0x801F6D18:("D_801F6D18","UNK_TYPE1","",0x1),
- 0x801F6D30:("D_801F6D30","Color_RGBA8","",0x4),
+ 0x801F6C30:("sTransitionTile","TransitionTile","",0xE0),
+ 0x801F6D10:("gTransitionTileState","UNK_TYPE4","",0x4),
+ 0x801F6D18:("sVisMono","UNK_TYPE1","",0x1),
+ 0x801F6D30:("gVisMonoColor","Color_RGBA8","",0x4),
0x801F6D38:("D_801F6D38","UNK_TYPE1","",0x1),
0x801F6D4C:("D_801F6D4C","UNK_TYPE4","",0x4),
- 0x801F6D50:("D_801F6D50","UNK_TYPE1","",0x1),
- 0x801F6DFC:("D_801F6DFC","u8","",0x1),
- 0x801F6DFD:("D_801F6DFD","UNK_TYPE1","",0x1),
- 0x801F6E00:("D_801F6E00","SlowlyTask","",0x1c0),
+ 0x801F6D50:("sBombersNotebook","UNK_TYPE1","",0x1),
+ 0x801F6DFC:("sBombersNotebookOpen","u8","",0x1),
+ 0x801F6DFD:("sMotionBlurStatus","UNK_TYPE1","",0x1),
+ 0x801F6E00:("sSlowlyMgr","SlowlyMgr","",0x1c0),
0x801F6FC0:("D_801F6FC0","UNK_TYPE1","",0x1),
- 0x801F6FC8:("slowlyStackEntry","StackEntry","",0x1c),
- 0x801F6FE8:("slowlyStack","u8","[4096]",0x1000),
- 0x801F7FE8:("D_801F7FE8","UNK_TYPE1","",0x1),
+ 0x801F6FC8:("sSlowlyStackInfo","StackEntry","",0x1c),
+ 0x801F6FE8:("sSlowlyStack","u8","[4096]",0x1000),
0x801F7FF0:("D_801F7FF0","UNK_TYPE1","",0x1),
0x801F8010:("D_801F8010","struct_801F8010","",0x10),
- 0x801F8020:("D_801F8020","struct_801F8020","",0x10),
+ 0x801F8020:("sVisZbuf","VisZbuf","",0x10),
0x801F8030:("sMonoColors","VisMono","",0x18),
0x801F8048:("D_801F8048","UNK_TYPE1","",0x1),
0x801F80D0:("sGraphFaultAddrConvClient","FaultAddrConvClient","",0xc),
@@ -4087,17 +4078,17 @@
0x801F84F8:("irqClient","IrqMgrClient","",0x8),
0x801F8500:("irqMgrMsgQ","OSMesgQueue","",0x18),
0x801F8518:("irqMgrMsgBuf","OSMesg","[60]",0xf0),
- 0x801F8608:("sGraphThread","OSThread","",0x1b0),
+ 0x801F8608:("gGraphThread","OSThread","",0x1b0),
0x801F87B8:("sGraphStack","u8","[6144]",0x1800),
- 0x801F9FB8:("schedStack","u8","[1536]",0x600),
- 0x801FA5B8:("audioStack","u8","[2048]",0x800),
- 0x801FADB8:("padmgrStack","u8","[1280]",0x500),
+ 0x801F9FB8:("sSchedStack","u8","[1536]",0x600),
+ 0x801FA5B8:("sAudioStack","u8","[2048]",0x800),
+ 0x801FADB8:("sPadMgrStack","u8","[1280]",0x500),
0x801FB2B8:("sGraphStackInfo","StackEntry","",0x1c),
- 0x801FB2D8:("schedStackEntry","StackEntry","",0x1c),
- 0x801FB2F8:("audioStackEntry","StackEntry","",0x1c),
- 0x801FB318:("padmgrStackEntry","StackEntry","",0x1c),
- 0x801FB338:("audioContext","AudioMgr","",0x2e0),
- 0x801FB620:("D_801FB620","PadMgr","",0x480),
+ 0x801FB2D8:("sSchedStackInfo","StackEntry","",0x1c),
+ 0x801FB2F8:("sAudioStackInfo","StackEntry","",0x1c),
+ 0x801FB318:("sPadMgrStackInfo","StackEntry","",0x1c),
+ 0x801FB338:("sAudioMgr","AudioMgr","",0x2e0),
+ 0x801FB620:("gPadMgr","PadMgr","",0x480),
0x801FBAA0:("sSchedFaultClient","UNK_TYPE1","",0x1),
0x801FBAB0:("sRSPGFXStartTime","OSTime","",0x8),
0x801FBAB8:("sRSPAudioStartTime","OSTime","",0x8),
@@ -4141,7 +4132,7 @@
0x801FBBD0:("D_801FBBD0","UNK_TYPE1","",0x1),
0x801FBBD2:("D_801FBBD2","UNK_TYPE1","",0x1),
0x801FBBD4:("D_801FBBD4","UNK_TYPE1","",0x1),
- 0x801FBBE0:("D_801FBBE0","UNK_TYPE1","",0x1),
+ 0x801FBBE0:("sDmaBuffer","u32","[2]",0x8),
0x801FBBF0:("D_801FBBF0","Vec3f","",0xc),
0x801FBC00:("Math3D_ColSphereTri_line","LineSegment","",0x18),
0x801FBC18:("Math3D_ColSphereTri_point","Vec3f","",0xc),
@@ -4220,9 +4211,9 @@
0x801FBE28:("D_801FBE28","UNK_TYPE1","",0x1),
0x801FBE2C:("D_801FBE2C","UNK_TYPE1","",0x1),
0x801FBE30:("D_801FBE30","UNK_TYPE4","",0x4),
- 0x801FBE38:("sys_flashromStack","u8","[4096]",0x1000),
- 0x801FCE38:("sys_flashromStackEntry","StackEntry","",0x1c),
- 0x801FCE58:("sys_flashromOSThread","OSThread","",0x1b0),
+ 0x801FBE38:("sSysFlashromStack","u8","[4096]",0x1000),
+ 0x801FCE38:("sSysFlashromStackInfo","StackEntry","",0x1c),
+ 0x801FCE58:("sSysFlashromThread","OSThread","",0x1b0),
0x801FD008:("D_801FD008","s80185D40","",0x2c),
0x801FD034:("D_801FD034","OSMesg","",0x4),
0x801FD040:("D_801FD040","s32","",0x10),
@@ -4336,9 +4327,9 @@
0x801FFC80:("sCurSfxPlayerChannelIndex","UNK_TYPE1","",0x1),
0x801FFC84:("gSfxBankMuted","UNK_TYPE1","",0x1),
0x801FFC90:("sUnusedBankLerp","UNK_TYPE1","",0x1),
- 0x801FFD00:("D_801FFD00","UNK_TYPE1","",0x1),
- 0x801FFD34:("D_801FFD34","UNK_TYPE1","",0x1),
- 0x801FFD40:("D_801FFD40","UNK_TYPE1","",0x1),
+ 0x801FFD00:("sSeqRequests","UNK_TYPE1","",0x1),
+ 0x801FFD34:("sNumSeqRequests","UNK_TYPE1","",0x1),
+ 0x801FFD40:("sAudioSeqCmds","UNK_TYPE1","",0x1),
0x80200000:("D_80200000","UNK_TYPE1","",0x1),
0x80200002:("D_80200002","UNK_TYPE1","",0x1),
0x80200004:("D_80200004","UNK_TYPE1","",0x1),
@@ -4350,14 +4341,14 @@
0x8020034A:("D_8020034A","UNK_TYPE1","",0x1),
0x80200B88:("D_80200B88","UNK_TYPE1","",0x1),
0x80200BBA:("D_80200BBA","UNK_TYPE1","",0x1),
- 0x80200BCC:("D_80200BCC","UNK_TYPE1","",0x1),
- 0x80200BCE:("D_80200BCE","UNK_TYPE1","",0x1),
- 0x80200BD0:("D_80200BD0","UNK_TYPE1","",0x1),
- 0x80200C70:("gAudioContext","AudioContext","",0x81F8),
- 0x80208E68:("gCustomAudioUpdateFunction","UNK_TYPE4","",0x4),
- 0x80208E6C:("gCustomAudioSeqFunction","UNK_TYPE4","",0x4),
- 0x80208E70:("gCustomAudioReverbFunction","UNK_TYPE4","",0x4),
- 0x80208E74:("gCustomAudioSynthFunction","UNK_TYPE4","",0x4),
+ 0x80200BCC:("sResetAudioHeapTimer","UNK_TYPE1","",0x1),
+ 0x80200BCE:("sResetAudioHeapFadeReverbVolume","UNK_TYPE1","",0x1),
+ 0x80200BD0:("sResetAudioHeapFadeReverbVolumeStep","UNK_TYPE1","",0x1),
+ 0x80200C70:("gAudioCtx","AudioContext","",0x81F8),
+ 0x80208E68:("gAudioCustomUpdateFunction","UNK_TYPE4","",0x4),
+ 0x80208E6C:("gAudioCustomSeqFunction","UNK_TYPE4","",0x4),
+ 0x80208E70:("gAudioCustomReverbFunction","UNK_TYPE4","",0x4),
+ 0x80208E74:("gAudioCustomSynthFunction","UNK_TYPE4","",0x4),
0x80208E90:("sJpegBitStreamPtr","UNK_TYPE1","",0x1),
0x80208E94:("sJpegBitStreamByteIdx","UNK_TYPE1","",0x1),
0x80208E98:("sJpegBitStreamBitIdx","UNK_TYPE1","",0x1),
@@ -4368,7 +4359,7 @@
0x80209EA0:("gGfxPools","GfxPool","[2]",0x40620),
0x8024A4C0:("gAudioHeap","u8","[0x138000]",0x138000),
0x803824C0:("gSystemHeap","u8","[UNK_SIZE]",0x3fdb40),
- 0x80780000:("D_80780000","u8","[0x4600]",0x4600),
+ 0x80780000:("gPictoPhotoI8","u8","[0x4600]",0x4600),
0x80784600:("D_80784600","u8","[0x56200]",0x56200),
0x807DA800:("gFramebuffer0","u16","[SCREEN_HEIGHT][SCREEN_WIDTH]",0x25800),
0x80800860:("titleRotation","s16","",0x2),
@@ -4660,32 +4651,32 @@
0x80815FF4:("sDayLeftTextures","TexturePtr","[4]",0x10),
0x80816004:("sDayRightTextures","TexturePtr","[4]",0x10),
0x80816014:("sHoursLeftTextures","TexturePtr","[3]",0xC),
- 0x8082AED0:("D_8082AED0","UNK_TYPE1","",0x1),
- 0x8082AED8:("D_8082AED8","UNK_TYPE1","",0x1),
- 0x8082AEE0:("D_8082AEE0","UNK_TYPE2","",0x2),
- 0x8082AEE4:("D_8082AEE4","UNK_TYPE1","",0x1),
- 0x8082AEF0:("D_8082AEF0","UNK_TYPE2","",0x2),
- 0x8082AF04:("D_8082AF04","UNK_TYPE2","",0x2),
- 0x8082AF24:("D_8082AF24","UNK_TYPE1","",0x1),
- 0x8082AF6C:("D_8082AF6C","UNK_TYPE2","",0x2),
- 0x8082AF78:("D_8082AF78","UNK_TYPE2","",0x2),
- 0x8082AF84:("D_8082AF84","UNK_TYPE2","",0x2),
- 0x8082AF90:("D_8082AF90","UNK_TYPE2","",0x2),
- 0x8082AF94:("D_8082AF94","UNK_TYPE2","",0x2),
- 0x8082AF98:("D_8082AF98","UNK_TYPE2","",0x2),
- 0x8082AF9C:("D_8082AF9C","UNK_TYPE2","",0x2),
- 0x8082AFA0:("D_8082AFA0","UNK_TYPE2","",0x2),
- 0x8082AFA4:("D_8082AFA4","UNK_TYPE2","",0x2),
- 0x8082AFA8:("D_8082AFA8","UNK_TYPE2","",0x2),
- 0x8082AFAC:("D_8082AFAC","UNK_TYPE2","",0x2),
- 0x8082AFB0:("D_8082AFB0","UNK_TYPE1","",0x1),
- 0x8082AFC4:("D_8082AFC4","UNK_TYPE2","",0x2),
- 0x8082AFDC:("D_8082AFDC","UNK_TYPE2","",0x2),
- 0x8082AFF4:("D_8082AFF4","s16","[12]",0x18),
- 0x8082B00C:("D_8082B00C","void*","[6]",0x18),
- 0x8082B024:("D_8082B024","UNK_TYPE1","",0x1),
- 0x8082B028:("D_8082B028","UNK_TYPE2","",0x2),
- 0x8082B02C:("D_8082B02C","s16","[98]",0xC4),
+ 0x8082AED0:("sQuestRemainsColorTimerInit","UNK_TYPE1","",0x1),
+ 0x8082AED8:("sQuestHpColorTimerInit","UNK_TYPE1","",0x1),
+ 0x8082AEE0:("sQuestSongPlayedOcarinaButtonsNum","UNK_TYPE2","",0x2),
+ 0x8082AEE4:("sQuestSongPlayedOcarinaButtons","UNK_TYPE1","",0x1),
+ 0x8082AEF0:("sQuestSongPlayedOcarinaButtonsAlpha","UNK_TYPE2","",0x2),
+ 0x8082AF04:("sQuestHpPrimColorTargets","UNK_TYPE2","",0x2),
+ 0x8082AF24:("sQuestRemainsEnvTargets","UNK_TYPE1","",0x1),
+ 0x8082AF6C:("sQuestRemainsEnvRed","UNK_TYPE2","",0x2),
+ 0x8082AF78:("sQuestRemainsEnvGreen","UNK_TYPE2","",0x2),
+ 0x8082AF84:("sQuestRemainsEnvBlue","UNK_TYPE2","",0x2),
+ 0x8082AF90:("sQuestRemainsColorTimer","UNK_TYPE2","",0x2),
+ 0x8082AF94:("sQuestRemainsColorTimerIndex","UNK_TYPE2","",0x2),
+ 0x8082AF98:("sQuestHpPrimRed","UNK_TYPE2","",0x2),
+ 0x8082AF9C:("sQuestHpPrimGreen","UNK_TYPE2","",0x2),
+ 0x8082AFA0:("sQuestHpPrimBlue","UNK_TYPE2","",0x2),
+ 0x8082AFA4:("sQuestHpPrimAlpha","UNK_TYPE2","",0x2),
+ 0x8082AFA8:("sQuestHpColorTimer","UNK_TYPE2","",0x2),
+ 0x8082AFAC:("sQuestHpPrimColorTargetIndex","UNK_TYPE2","",0x2),
+ 0x8082AFB0:("sOcarinaButtonTextures","UNK_TYPE1","",0x1),
+ 0x8082AFC4:("sQuestSongsPrimRed","UNK_TYPE2","",0x2),
+ 0x8082AFDC:("sQuestSongsPrimGreen","UNK_TYPE2","",0x2),
+ 0x8082AFF4:("sQuestSongsPrimBlue","s16","[12]",0x18),
+ 0x8082B00C:("sQuestUpgradeTextures","void*","[6]",0x18),
+ 0x8082B024:("sQuestUpgrades","UNK_TYPE1","",0x1),
+ 0x8082B028:("sQuestSongPlaybackDelayTimer","UNK_TYPE2","",0x2),
+ 0x8082B02C:("sCursorPointLinks","s16","[98]",0xC4),
0x8082B0F0:("sCurSection","UNK_TYPE2","",0x2),
0x8082B0F4:("sCurRow","UNK_TYPE2","",0x2),
0x8082B0F8:("sSectionPositions","s16","[280]",0x230),
@@ -4743,32 +4734,32 @@
0x8082B7B4:("D_8082B7B4","UNK_TYPE1","",0x1),
0x8082B7F0:("D_8082B7F0","UNK_TYPE2","",0x2),
0x8082B838:("D_8082B838","UNK_TYPE2","",0x2),
- 0x8082B880:("D_8082B880","UNK_TYPE2","",0x2),
- 0x8082B884:("D_8082B884","UNK_TYPE2","",0x2),
- 0x8082B888:("D_8082B888","UNK_TYPE2","",0x2),
- 0x8082B88C:("D_8082B88C","UNK_TYPE2","",0x2),
- 0x8082B890:("D_8082B890","UNK_TYPE2","",0x2),
- 0x8082B894:("D_8082B894","UNK_TYPE2","",0x2),
- 0x8082B898:("D_8082B898","UNK_TYPE2","",0x2),
- 0x8082B89C:("D_8082B89C","UNK_TYPE2","",0x2),
- 0x8082B8A0:("D_8082B8A0","UNK_TYPE2","",0x2),
- 0x8082B8A4:("D_8082B8A4","UNK_TYPE2","",0x2),
- 0x8082B8A8:("D_8082B8A8","UNK_TYPE2","",0x2),
- 0x8082B8AC:("D_8082B8AC","UNK_TYPE2","",0x2),
- 0x8082B8B0:("D_8082B8B0","UNK_TYPE2","",0x2),
- 0x8082B8B4:("D_8082B8B4","UNK_TYPE2","",0x2),
- 0x8082B8B8:("D_8082B8B8","UNK_TYPE1","",0x1),
- 0x8082B8D8:("D_8082B8D8","UNK_TYPE1","",0x1),
- 0x8082B8F8:("D_8082B8F8","UNK_TYPE1","",0x1),
- 0x8082B908:("D_8082B908","f32","",0x4),
+ 0x8082B880:("sGameOverPrimR","UNK_TYPE2","",0x2),
+ 0x8082B884:("sGameOverPrimG","UNK_TYPE2","",0x2),
+ 0x8082B888:("sGameOverPrimB","UNK_TYPE2","",0x2),
+ 0x8082B88C:("sGameOverPrimAlpha","UNK_TYPE2","",0x2),
+ 0x8082B890:("sCursorPrimR","UNK_TYPE2","",0x2),
+ 0x8082B894:("sCursorPrimG","UNK_TYPE2","",0x2),
+ 0x8082B898:("sCursorPrimB","UNK_TYPE2","",0x2),
+ 0x8082B89C:("sCursorEnvR","UNK_TYPE2","",0x2),
+ 0x8082B8A0:("sCursorEnvG","UNK_TYPE2","",0x2),
+ 0x8082B8A4:("sCursorEnvB","UNK_TYPE2","",0x2),
+ 0x8082B8A8:("sGameOverEnvR","UNK_TYPE2","",0x2),
+ 0x8082B8AC:("sGameOverEnvG","UNK_TYPE2","",0x2),
+ 0x8082B8B0:("sGameOverEnvB","UNK_TYPE2","",0x2),
+ 0x8082B8B4:("sInDungeonScene","UNK_TYPE2","",0x2),
+ 0x8082B8B8:("sPageSwitchEyeDx","UNK_TYPE1","",0x1),
+ 0x8082B8D8:("sPageSwitchEyeDz","UNK_TYPE1","",0x1),
+ 0x8082B8F8:("sPageSwitchNextPageIndex","UNK_TYPE1","",0x1),
+ 0x8082B908:("sPauseMenuVerticalOffset","f32","",0x4),
0x8082B90C:("D_8082B90C","f32","",0x4),
- 0x8082B910:("D_8082B910","f32","",0x4),
- 0x8082B914:("D_8082B914","f32","",0x4),
- 0x8082B918:("D_8082B918","UNK_TYPE2","",0x2),
- 0x8082B91C:("D_8082B91C","UNK_TYPE2","",0x2),
+ 0x8082B910:("sPauseCursorLeftMoveOffsetX","f32","",0x4),
+ 0x8082B914:("sPauseCursorRightMoveOffsetX","f32","",0x4),
+ 0x8082B918:("sPauseCursorLeftX","UNK_TYPE2","",0x2),
+ 0x8082B91C:("sPauseCursorRightX","UNK_TYPE2","",0x2),
0x8082B920:("D_8082B920","UNK_TYPE2","",0x2),
0x8082B924:("D_8082B924","UNK_TYPE2","",0x2),
- 0x8082B944:("D_8082B944","UNK_TYPE2","",0x2),
+ 0x8082B944:("sGameOverRectPosY","UNK_TYPE2","",0x2),
0x8082B948:("D_8082B948","UNK_TYPE2","",0x2),
0x8082B96C:("D_8082B96C","UNK_TYPE2","",0x2),
0x8082B990:("D_8082B990","UNK_TYPE2","",0x2),
@@ -4808,10 +4799,10 @@
0x8082BB38:("D_8082BB38","UNK_PTR","",0x4),
0x8082BB50:("D_8082BB50","UNK_PTR","",0x4),
0x8082BB68:("D_8082BB68","UNK_TYPE2","",0x2),
- 0x8082BB74:("D_8082BB74","UNK_TYPE2","",0x2),
- 0x8082BBC4:("D_8082BBC4","UNK_TYPE2","",0x2),
- 0x8082BC14:("D_8082BC14","UNK_TYPE2","",0x2),
- 0x8082BC64:("D_8082BC64","UNK_TYPE2","",0x2),
+ 0x8082BB74:("sQuestVtxRectLeft","UNK_TYPE2","",0x2),
+ 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),
@@ -4823,15 +4814,15 @@
0x8082BDCC:("D_8082BDCC","UNK_TYPE1","",0x1),
0x8082BE28:("D_8082BE28","UNK_TYPE1","",0x1),
0x8082BE84:("D_8082BE84","UNK_TYPE2","",0x2),
- 0x8082BE88:("D_8082BE88","UNK_TYPE1","",0x1),
- 0x8082BE9C:("D_8082BE9C","UNK_TYPE2","",0x2),
- 0x8082BEA0:("D_8082BEA0","UNK_TYPE2","",0x2),
- 0x8082BEA4:("D_8082BEA4","UNK_TYPE2","",0x2),
- 0x8082BEA8:("D_8082BEA8","UNK_TYPE2","",0x2),
- 0x8082BEAC:("D_8082BEAC","UNK_TYPE2","",0x2),
- 0x8082BEB0:("D_8082BEB0","UNK_TYPE2","",0x2),
- 0x8082BEB4:("D_8082BEB4","UNK_TYPE2","",0x2),
- 0x8082BEB8:("D_8082BEB8","UNK_TYPE2","",0x2),
+ 0x8082BE88:("sCursorPointsToOcarinaModes","UNK_TYPE1","",0x1),
+ 0x8082BE9C:("sUnpausedHudVisibility","UNK_TYPE2","",0x2),
+ 0x8082BEA0:("sNextMainState","UNK_TYPE2","",0x2),
+ 0x8082BEA4:("sDelayTimer","UNK_TYPE2","",0x2),
+ 0x8082BEA8:("sGameOverColorTimer","UNK_TYPE2","",0x2),
+ 0x8082BEAC:("sStickXRepeatTimer","UNK_TYPE2","",0x2),
+ 0x8082BEB0:("sStickYRepeatTimer","UNK_TYPE2","",0x2),
+ 0x8082BEB4:("sStickXRepeatState","UNK_TYPE2","",0x2),
+ 0x8082BEB8:("sStickYRepeatState","UNK_TYPE2","",0x2),
0x8082BEC0:("D_8082BEC0","char","[]",0x1),
0x8082BEC4:("D_8082BEC4","char","[]",0x1),
0x8082BED0:("D_8082BED0","char","[]",0x1),
@@ -4948,7 +4939,7 @@
0x8082DA52:("D_8082DA52","UNK_TYPE1","",0x1),
0x8082DA54:("D_8082DA54","UNK_TYPE1","",0x1),
0x8082DA56:("D_8082DA56","UNK_TYPE1","",0x1),
- 0x8082DA58:("D_8082DA58","UNK_TYPE1","",0x1),
+ 0x8082DA58:("sUnpausedButtonStatus","UNK_TYPE1","",0x1),
0x8082DA60:("D_8082DA60","f32","",0x4),
0x8082DA64:("D_8082DA64","f32","",0x4),
0x8082DA68:("D_8082DA68","f32","",0x4),
@@ -6195,7 +6186,7 @@
0x8089E314:("D_8089E314","UNK_TYPE1","",0x1),
0x8089E334:("D_8089E334","UNK_TYPE1","",0x1),
0x8089E33C:("D_8089E33C","UNK_TYPE4","",0x4),
- 0x8089E34C:("D_8089E34C","UNK_TYPE2","",0x2),
+ 0x8089E34C:("sCsId","UNK_TYPE2","",0x2),
0x8089E350:("D_8089E350","UNK_TYPE4","",0x4),
0x8089E354:("D_8089E354","UNK_TYPE1","",0x1),
0x8089E364:("D_8089E364","UNK_TYPE4","",0x4),
@@ -6433,15 +6424,15 @@
0x808B11B0:("D_808B11B0","f32","",0x4),
0x808B11B4:("D_808B11B4","f32","",0x4),
0x808B11B8:("D_808B11B8","f32","",0x4),
- 0x808B4D40:("En_Dekubaba_InitVars","UNK_TYPE1","",0x1),
- 0x808B4D60:("D_808B4D60","UNK_TYPE1","",0x1),
- 0x808B4E5C:("D_808B4E5C","UNK_TYPE1","",0x1),
- 0x808B4E6C:("D_808B4E6C","UNK_TYPE1","",0x1),
- 0x808B4E74:("D_808B4E74","UNK_TYPE1","",0x1),
- 0x808B4E94:("D_808B4E94","UNK_TYPE1","",0x1),
- 0x808B4E98:("D_808B4E98","UNK_TYPE1","",0x1),
- 0x808B4E9C:("D_808B4E9C","UNK_TYPE1","",0x1),
- 0x808B4EA0:("D_808B4EA0","UNK_PTR","",0x4),
+ 0x808B4D40:("En_Dekubaba_InitVars","ActorInit","",0x20),
+ 0x808B4D60:("sJntSphElementsInit","ColliderJntSphElementInit","[7]",0xFC),
+ 0x808B4E5C:("sJntSphInit","ColliderJntSphInit","",0x10),
+ 0x808B4E6C:("sColChkInfoInit","CollisionCheckInfoInit","",0x4),
+ 0x808B4E74:("sDamageTable","DamageTable","",0x20),
+ 0x808B4E94:("sInitChain","InitChainEntry","[1]",0x4),
+ 0x808B4E98:("sDustPrimColor","Color_RGBA8","",0x4),
+ 0x808B4E9C:("sDustEnvColor","Color_RGBA8","",0x4),
+ 0x808B4EA0:("sStemDLists","Gfx*","[3]",0xC),
0x808B4EB0:("D_808B4EB0","f32","",0x4),
0x808B4EB4:("D_808B4EB4","f32","",0x4),
0x808B4EB8:("D_808B4EB8","f32","",0x4),
@@ -6653,8 +6644,8 @@
0x808C3BC0:("D_808C3BC0","UNK_TYPE1","",0x1),
0x808C4CE0:("En_Wood02_InitVars","UNK_TYPE1","",0x1),
0x808C4D00:("D_808C4D00","UNK_TYPE1","",0x1),
- 0x808C4D2C:("D_808C4D2C","UNK_TYPE1","",0x1),
- 0x808C4D44:("D_808C4D44","UNK_TYPE1","",0x1),
+ 0x808C4D2C:("sWood02SpawnDistance","f32","",0x1),
+ 0x808C4D44:("sWood02SpawnAngle","UNK_TYPE1","",0x1),
0x808C4D4E:("D_808C4D4E","UNK_TYPE2","",0x2),
0x808C4D50:("D_808C4D50","UNK_TYPE1","",0x1),
0x808C4D54:("D_808C4D54","UNK_TYPE1","",0x1),
@@ -6664,8 +6655,8 @@
0x808C4E10:("D_808C4E10","f32","",0x4),
0x808C4E14:("D_808C4E14","f32","",0x4),
0x808C4E18:("D_808C4E18","UNK_TYPE1","",0x1),
- 0x808C4F70:("D_808C4F70","f32","",0x4),
- 0x808C4F74:("D_808C4F74","UNK_TYPE1","",0x1),
+ 0x808C4F70:("sWood02SpawnCos","f32","",0x4),
+ 0x808C4F74:("sWood02SpawnSin","UNK_TYPE1","",0x4),
0x808C98C0:("En_Death_InitVars","UNK_TYPE1","",0x1),
0x808C98E0:("D_808C98E0","UNK_TYPE1","",0x1),
0x808C990C:("D_808C990C","UNK_TYPE1","",0x1),
@@ -7199,8 +7190,8 @@
0x808F2DF8:("D_808F2DF8","UNK_TYPE1","",0x1),
0x808F2E00:("D_808F2E00","UNK_TYPE1","",0x1),
0x808F2E20:("D_808F2E20","UNK_TYPE1","",0x1),
- 0x808F2E28:("D_808F2E28","UNK_TYPE1","",0x1),
- 0x808F2E2C:("D_808F2E2C","UNK_PTR","",0x4),
+ 0x808F2E28:("sFogColor","Color_RGBA8","",0x4),
+ 0x808F2E2C:("sStemDLists","Gfx*","[3]",0xC),
0x808F2E40:("D_808F2E40","f32","",0x4),
0x808F2E44:("D_808F2E44","f32","",0x4),
0x808F2E48:("D_808F2E48","f32","",0x4),
@@ -7913,7 +7904,7 @@
0x80920290:("jtbl_80920290","UNK_PTR","",0x4),
0x80920DF0:("gFireArrowTex","u8","[2048]",0x800),
0x809215F0:("gFireArrowMaskTex","u8","[2048]",0x800),
- 0x80921DF0:("gFireArrowVtx","F3DVertex","[43]",0x2b0),
+ 0x80921DF0:("gFireArrowVtx","Vtx","[43]",0x2b0),
0x809220A0:("gIceArrowMaterialDL","Gfx","[22]",0xb0),
0x80922150:("gIceArrowModelDL","Gfx","[24]",0xc0),
0x80922210:("Arrow_Fire_InitVars","ActorInit","",0x20),
@@ -9191,9 +9182,9 @@
0x8098C498:("D_8098C498","f32","",0x4),
0x8098C49C:("jtbl_8098C49C","UNK_PTR","",0x4),
0x8098CD60:("En_Si_InitVars","UNK_TYPE1","",0x1),
- 0x8098CD80:("D_8098CD80","UNK_TYPE1","",0x1),
- 0x8098CDAC:("D_8098CDAC","UNK_PTR","",0x4),
- 0x8098CDB8:("D_8098CDB8","UNK_TYPE1","",0x1),
+ 0x8098CD80:("sSphereInit","UNK_TYPE1","",0x1),
+ 0x8098CDAC:("sColChkInfoInit","UNK_PTR","",0x4),
+ 0x8098CDB8:("sDamageTable","UNK_TYPE1","",0x1),
0x8098E420:("Obj_Comb_InitVars","UNK_TYPE1","",0x1),
0x8098E440:("D_8098E440","UNK_TYPE1","",0x1),
0x8098E464:("D_8098E464","UNK_TYPE1","",0x1),
@@ -9516,7 +9507,7 @@
0x809A6150:("Obj_Boyo_InitVars","UNK_TYPE1","",0x1),
0x809A6170:("D_809A6170","UNK_TYPE1","",0x1),
0x809A619C:("D_809A619C","UNK_TYPE1","",0x1),
- 0x809A61B0:("sBumperCollideInfo","UNK_TYPE1","",0x1),
+ 0x809A61B0:("D_809A61B0","UNK_TYPE1","",0x1),
0x809A61B4:("D_809A61B4","UNK_TYPE2","",0x2),
0x809A61D0:("D_809A61D0","f32","",0x4),
0x809A61D4:("D_809A61D4","f32","",0x4),
@@ -10956,13 +10947,13 @@
0x80A20EA0:("D_80A20EA0","UNK_TYPE1","",0x1),
0x80A20EAC:("D_80A20EAC","UNK_PTR","",0x4),
0x80A20EB0:("D_80A20EB0","UNK_TYPE1","",0x1),
- 0x80A20EDC:("D_80A20EDC","UNK_TYPE1","",0x1),
- 0x80A20EE8:("D_80A20EE8","UNK_TYPE1","",0x1),
+ 0x80A20EDC:("sVelocity","UNK_TYPE1","",0x1),
+ 0x80A20EE8:("sAccel","UNK_TYPE1","",0x1),
0x80A20EF4:("En_Syateki_Wf_InitVars","UNK_TYPE1","",0x1),
0x80A20F14:("D_80A20F14","UNK_PTR","",0x4),
0x80A20FBC:("D_80A20FBC","UNK_TYPE1","",0x1),
- 0x80A20FC4:("D_80A20FC4","UNK_TYPE4","",0x4),
- 0x80A20FD0:("D_80A20FD0","UNK_TYPE1","",0x1),
+ 0x80A20FC4:("sFireVelocityAndAccel","UNK_TYPE4","",0x4),
+ 0x80A20FD0:("sTailColliderOffset","UNK_TYPE1","",0x1),
0x80A20FDC:("D_80A20FDC","UNK_TYPE1","",0x1),
0x80A20FF0:("D_80A20FF0","f32","",0x4),
0x80A229F0:("Obj_Skateblock_InitVars","UNK_TYPE1","",0x1),
@@ -11095,7 +11086,7 @@
0x80A2B90C:("sColHeaders","UNK_TYPE1","",0x1),
0x80A2B93C:("sTexAnims","UNK_TYPE1","",0x1),
0x80A2B96C:("D_80A2B96C","UNK_TYPE1","",0x1),
- 0x80A2B974:("D_80A2B974","UNK_TYPE2","",0x2),
+ 0x80A2B974:("sCsIdList","UNK_TYPE2","",0x2),
0x80A2B978:("D_80A2B978","UNK_TYPE1","",0x1),
0x80A2B988:("D_80A2B988","UNK_TYPE1","",0x1),
0x80A2B9A0:("jtbl_80A2B9A0","UNK_PTR","",0x4),
@@ -11157,19 +11148,19 @@
0x80A2ECE0:("Dm_Sa_InitVars","UNK_TYPE1","",0x1),
0x80A2ED00:("sAnimationInfo","UNK_TYPE1","",0x1),
0x80A2ED20:("D_80A2ED20","f32","",0x4),
- 0x80A31AD0:("En_Slime_InitVars","UNK_TYPE1","",0x1),
- 0x80A31AF0:("D_80A31AF0","UNK_TYPE1","",0x1),
- 0x80A31B1C:("D_80A31B1C","UNK_TYPE1","",0x1),
- 0x80A31B3C:("D_80A31B3C","UNK_TYPE1","",0x1),
- 0x80A31B44:("D_80A31B44","UNK_TYPE4","",0x4),
- 0x80A31B54:("D_80A31B54","UNK_TYPE1","",0x1),
- 0x80A31B5C:("D_80A31B5C","UNK_TYPE4","",0x4),
- 0x80A31B60:("D_80A31B60","UNK_TYPE1","",0x1),
- 0x80A31B64:("D_80A31B64","UNK_TYPE1","",0x1),
- 0x80A31B68:("D_80A31B68","UNK_TYPE1","",0x1),
- 0x80A31B74:("D_80A31B74","UNK_TYPE1","",0x1),
- 0x80A31B84:("D_80A31B84","UNK_TYPE1","",0x1),
- 0x80A31B94:("D_80A31B94","UNK_TYPE1","",0x1),
+ 0x80A31AD0:("En_Slime_InitVars","ActorInit","",0x1),
+ 0x80A31AF0:("sCylinderInit","ColliderCylinderInit","",0x1),
+ 0x80A31B1C:("sDamageTable","DamageTable","",0x1),
+ 0x80A31B3C:("sColChkInfoInit","CollisionCheckInfoInit","",0x1),
+ 0x80A31B44:("sEyeTextures","TexturePtr","",0x4),
+ 0x80A31B54:("sInitChain","InitChainEntry","",0x1),
+ 0x80A31B5C:("sTexturesDesegmented","s32","",0x1),
+ 0x80A31B60:("sBubblePrimColor","Color_RGBA8","",0x1),
+ 0x80A31B64:("sBubbleEnvColor","Color_RGBA8","",0x1),
+ 0x80A31B68:("sBubbleAccel","Vec3f","",0x1),
+ 0x80A31B74:("sPrimColors","Color_RGBA8","",0x4),
+ 0x80A31B84:("sEnvColors","Color_RGBA8","",0x4),
+ 0x80A31B94:("sLimbPosOffsets","Vec3f","",0x5),
0x80A31BD0:("D_80A31BD0","f32","",0x4),
0x80A31BD4:("D_80A31BD4","f32","",0x4),
0x80A31BD8:("D_80A31BD8","f32","",0x4),
@@ -11254,7 +11245,7 @@
0x80A31D14:("D_80A31D14","f32","",0x4),
0x80A31D18:("D_80A31D18","f32","",0x4),
0x80A31D1C:("D_80A31D1C","f32","",0x4),
- 0x80A32200:("D_80A32200","UNK_TYPE1","",0x1),
+ 0x80A32200:("sSlimeTexAnim","AnimatedMaterial*","",0x1),
0x80A338A0:("D_80A338A0","UNK_TYPE1","",0x1),
0x80A338C0:("D_80A338C0","UNK_TYPE1","",0x1),
0x80A338D4:("En_Pr_InitVars","UNK_TYPE1","",0x1),
@@ -11467,7 +11458,7 @@
0x80A41938:("D_80A41938","f32","",0x4),
0x80A41D20:("D_80A41D20","UNK_TYPE1","",0x1),
0x80A41D24:("D_80A41D24","UNK_TYPE1","",0x1),
- 0x80A41D28:("D_80A41D28","UNK_TYPE1","",0x1),
+ 0x80A41D28:("sEnTest3_Input","Input","",0x18),
0x80A41D40:("D_80A41D40","f32","",0x4),
0x80A41D44:("D_80A41D44","UNK_TYPE1","",0x1),
0x80A41D48:("D_80A41D48","UNK_TYPE1","",0x1),
@@ -11484,8 +11475,8 @@
0x80A43352:("sNightMessages2","s16","[3]",0x6),
0x80A4335A:("sDayMessages2","s16","[3]",0x6),
0x80A43364:("D_80A43364","u16","[2]",0x4),
- 0x80A434D0:("sCutscenes","s16","[2]",0x4),
- 0x80A434D4:("sCurrentCs","s16","",0x2),
+ 0x80A434D0:("sCsIdList","s16","[2]",0x4),
+ 0x80A434D4:("sCurCsId","s16","",0x2),
0x80A449E0:("En_Bat_InitVars","ActorInit","",0x1),
0x80A44A00:("sSphereInit","ColliderSphereInit","",0x1),
0x80A44A2C:("sDamageTable","DamageTable","4",0x1),
@@ -12832,7 +12823,7 @@
0x80AC0254:("D_80AC0254","UNK_TYPE2","",0x2),
0x80AC0258:("D_80AC0258","UNK_TYPE2","",0x2),
0x80AC025C:("D_80AC025C","UNK_TYPE4","",0x4),
- 0x80AC0260:("D_80AC0260","UNK_TYPE2","",0x2),
+ 0x80AC0260:("sCueId","UNK_TYPE2","",0x2),
0x80AC0264:("D_80AC0264","UNK_TYPE4","",0x4),
0x80AC0270:("D_80AC0270","f32","",0x4),
0x80AC0274:("D_80AC0274","f32","",0x4),
@@ -12926,8 +12917,8 @@
0x80AC4F60:("D_80AC4F60","f32","",0x4),
0x80AC4F64:("D_80AC4F64","f32","",0x4),
0x80AC5060:("D_80AC5060","UNK_TYPE1","",0x1),
- 0x80AC5630:("sTriforceWipeDL","UNK_TYPE1","",0x1),
- 0x80AC5660:("sTriforceWipeVtx","UNK_TYPE1","",0x1),
+ 0x80AC5630:("sTransTriforceDL","UNK_TYPE1","",0x1),
+ 0x80AC5660:("sTransTriforceVtx","UNK_TYPE1","",0x1),
0x80AC5700:("TransitionTriforce_InitVars","UNK_PTR","",0x4),
0x80AC5730:("D_80AC5730","f32","",0x4),
0x80AC5734:("D_80AC5734","f32","",0x4),
@@ -13262,10 +13253,10 @@
0x80AE7270:("D_80AE7270","UNK_TYPE1","",0x1),
0x80AE7280:("jtbl_80AE7280","UNK_PTR","",0x4),
0x80AE8890:("En_Stop_heishi_InitVars","UNK_TYPE1","",0x1),
- 0x80AE88B0:("D_80AE88B0","UNK_TYPE1","",0x1),
+ 0x80AE88B0:("sCylinderInit","UNK_TYPE1","",0x1),
0x80AE88DC:("D_80AE88DC","UNK_TYPE1","",0x1),
0x80AE897C:("D_80AE897C","UNK_TYPE1","",0x1),
- 0x80AE8A1C:("D_80AE8A1C","UNK_TYPE1","",0x1),
+ 0x80AE8A1C:("sAnimations","UNK_TYPE1","",0x1),
0x80AE8A24:("D_80AE8A24","UNK_TYPE1","",0x1),
0x80AE8A2C:("D_80AE8A2C","UNK_TYPE1","",0x1),
0x80AE8A30:("D_80AE8A30","UNK_TYPE1","",0x1),
@@ -14278,8 +14269,8 @@
0x80B3DCAC:("D_80B3DCAC","UNK_TYPE1","",0x1),
0x80B3DCB8:("sAnimations","UNK_TYPE1","",0x1),
0x80B3DE58:("D_80B3DE58","UNK_TYPE1","",0x1),
- 0x80B3DE74:("D_80B3DE74","UNK_TYPE1","",0x1),
- 0x80B3DEAC:("D_80B3DEAC","UNK_TYPE1","",0x1),
+ 0x80B3DE74:("sCsAnimations","UNK_TYPE1","",0x1),
+ 0x80B3DEAC:("sEyeTextures","UNK_TYPE1","",0x1),
0x80B3DEC0:("D_80B3DEC0","f32","",0x4),
0x80B3DEC4:("D_80B3DEC4","f32","",0x4),
0x80B3DEC8:("D_80B3DEC8","f32","",0x4),
@@ -14333,11 +14324,11 @@
0x80B4E934:("D_80B4E934","UNK_TYPE4","",0x4),
0x80B4E938:("D_80B4E938","f32","",0x4),
0x80B4E940:("D_80B4E940","UNK_TYPE4","",0x4),
- 0x80B4E944:("sRomaniEyeTextures","UNK_TYPE4","",0x4),
- 0x80B4E958:("sRomaniMouthTextures","UNK_TYPE4","",0x4),
+ 0x80B4E944:("D_80B4E944","UNK_TYPE4","",0x4),
+ 0x80B4E958:("D_80B4E958","UNK_TYPE4","",0x4),
0x80B4E968:("D_80B4E968","UNK_TYPE1","",0x1),
- 0x80B4E96C:("sCremiaEyeTextures","UNK_TYPE4","",0x4),
- 0x80B4E984:("sCremiaMouthTextures","UNK_TYPE4","",0x4),
+ 0x80B4E96C:("D_80B4E96C","UNK_TYPE4","",0x4),
+ 0x80B4E984:("D_80B4E984","UNK_TYPE4","",0x4),
0x80B4E994:("D_80B4E994","UNK_TYPE1","",0x1),
0x80B4E998:("D_80B4E998","UNK_TYPE1","",0x1),
0x80B4E99C:("D_80B4E99C","UNK_TYPE1","",0x1),
@@ -14423,6 +14414,21 @@
0x80B4EE0C:("D_80B4EE0C","UNK_TYPE1","",0x1),
0x80B4EE24:("D_80B4EE24","UNK_TYPE1","",0x1),
0x80B4EE30:("D_80B4EE30","UNK_TYPE1","",0x1),
+ 0x80B4EE40:("D_80B4EE40","f32","",0x4),
+ 0x80B4EE44:("D_80B4EE44","f32","",0x4),
+ 0x80B4EE48:("D_80B4EE48","f32","",0x4),
+ 0x80B4EE4C:("D_80B4EE4C","f32","",0x4),
+ 0x80B4EE50:("D_80B4EE50","f32","",0x4),
+ 0x80B4EE54:("D_80B4EE54","f32","",0x4),
+ 0x80B4EE58:("D_80B4EE58","f32","",0x4),
+ 0x80B4EE5C:("D_80B4EE5C","f32","",0x4),
+ 0x80B4EE60:("D_80B4EE60","f32","",0x4),
+ 0x80B4EE64:("D_80B4EE64","f32","",0x4),
+ 0x80B4EE68:("D_80B4EE68","f32","",0x4),
+ 0x80B4EE6C:("D_80B4EE6C","f32","",0x4),
+ 0x80B4EE70:("D_80B4EE70","f32","",0x4),
+ 0x80B4EE74:("D_80B4EE74","f32","",0x4),
+ 0x80B4EE78:("D_80B4EE78","f32","",0x4),
0x80B4EE7C:("D_80B4EE7C","f32","",0x4),
0x80B4EE80:("D_80B4EE80","f32","",0x4),
0x80B4EE84:("D_80B4EE84","f32","",0x4),
@@ -14563,8 +14569,8 @@
0x80B503F0:("D_80B503F0","UNK_TYPE4","",0x4),
0x80B503F4:("D_80B503F4","UNK_TYPE4","",0x4),
0x80B503F8:("D_80B503F8","UNK_TYPE4","",0x4),
- 0x80B503FC:("sAlienEyeBeamTexAnim","UNK_TYPE4","",0x4),
- 0x80B50400:("sAlienEmptyTexAnim","UNK_TYPE4","",0x4),
+ 0x80B503FC:("D_80B503FC","UNK_TYPE4","",0x4),
+ 0x80B50400:("D_80B50400","UNK_TYPE4","",0x4),
0x80B50404:("D_80B50404","UNK_TYPE2","",0x2),
0x80B50406:("D_80B50406","UNK_TYPE2","",0x2),
0x80B5040A:("D_80B5040A","UNK_TYPE1","",0x1),
@@ -15184,27 +15190,27 @@
0x80B8ADB0:("D_80B8ADB0","f32","",0x4),
0x80B8ADB4:("D_80B8ADB4","f32","",0x4),
0x80B8CE20:("En_Ge2_InitVars","UNK_TYPE1","",0x1),
- 0x80B8CE40:("D_80B8CE40","UNK_TYPE1","",0x1),
- 0x80B8CE6C:("D_80B8CE6C","UNK_TYPE1","",0x1),
- 0x80B8CE78:("D_80B8CE78","UNK_TYPE1","",0x1),
- 0x80B8CE84:("D_80B8CE84","UNK_TYPE1","",0x1),
- 0x80B8CE88:("D_80B8CE88","UNK_TYPE1","",0x1),
- 0x80B8CE8C:("D_80B8CE8C","UNK_TYPE1","",0x1),
- 0x80B8CE98:("D_80B8CE98","UNK_TYPE1","",0x1),
+ 0x80B8CE40:("sCylinderInit","ColliderCylinderInit","",0x2C),
+ 0x80B8CE6C:("effectVelocity","Vec3f","",0xC),
+ 0x80B8CE78:("effectAccel","Vec3f","",0xC),
+ 0x80B8CE84:("effectPrimColor","Color_RGBA8","",0x4),
+ 0x80B8CE88:("effectEnvColor","Color_RGBA8","",0x4),
+ 0x80B8CE8C:("sFocusOffset","Vec3f","",0x1),
+ 0x80B8CE98:("sEyeTextures","TexturePtr","[3]",0xC),
0x80B8CEB0:("jtbl_80B8CEB0","UNK_PTR","",0x4),
0x80B8E150:("En_Ma_Yts_InitVars","UNK_TYPE1","",0x1),
0x80B8E170:("D_80B8E170","ColliderCylinderInit","",0x2C),
0x80B8E19C:("D_80B8E19C","CollisionCheckInfoInit2","",0xC),
0x80B8E308:("D_80B8E308","void*","",0x4),
0x80B8E318:("D_80B8E318","UNK_TYPE1","",0x1),
- 0x80B8E32C:("D_80B8E32C","UNK_TYPE2","",0x2),
+ 0x80B8E32C:("sCueId","UNK_TYPE2","",0x2),
0x80B8E330:("jtbl_80B8E330","UNK_PTR","",0x4),
0x80B8E34C:("jtbl_80B8E34C","UNK_PTR","",0x4),
0x80B913F0:("En_Ma_Yto_InitVars","UNK_TYPE1","",0x1),
0x80B91410:("D_80B91410","UNK_TYPE1","",0x1),
0x80B9143C:("D_80B9143C","UNK_TYPE1","",0x1),
0x80B91448:("D_80B91448","UNK_TYPE1","",0x1),
- 0x80B915F0:("D_80B915F0","UNK_TYPE2","",0x2),
+ 0x80B915F0:("sCueId","UNK_TYPE2","",0x2),
0x80B91600:("jtbl_80B91600","UNK_PTR","",0x4),
0x80B91614:("jtbl_80B91614","UNK_PTR","",0x4),
0x80B91628:("jtbl_80B91628","UNK_PTR","",0x4),
@@ -15316,11 +15322,7 @@
0x80B9A920:("Obj_Y2lift_InitVars","UNK_TYPE1","",0x1),
0x80B9A940:("D_80B9A940","UNK_TYPE1","",0x1),
0x80B9AE50:("Obj_Y2shutter_InitVars","UNK_TYPE1","",0x1),
- 0x80B9AE70:("D_80B9AE70","UNK_TYPE1","",0x1),
- 0x80B9AE8C:("D_80B9AE8C","UNK_TYPE1","",0x1),
- 0x80B9AE8D:("D_80B9AE8D","UNK_TYPE1","",0x1),
- 0x80B9AE8E:("D_80B9AE8E","UNK_TYPE1","",0x1),
- 0x80B9AEAE:("D_80B9AEAE","UNK_TYPE1","",0x1),
+ 0x80B9AE70:("D_80B9AE70","UNK_TYPE1","",0x40),
0x80B9AEB0:("D_80B9AEB0","UNK_TYPE1","",0x1),
0x80B9B660:("Obj_Boat_InitVars","UNK_TYPE1","",0x1),
0x80B9B680:("D_80B9B680","UNK_TYPE1","",0x1),
@@ -15630,7 +15632,7 @@
0x80BC15D0:("En_Nb_InitVars","UNK_TYPE1","",0x1),
0x80BC15F0:("D_80BC15F0","UNK_TYPE1","",0x1),
0x80BC161C:("D_80BC161C","UNK_TYPE1","",0x1),
- 0x80BC1628:("D_80BC1628","UNK_TYPE1","",0x1),
+ 0x80BC1628:("sAnimationInfo","UNK_TYPE1","",0x1),
0x80BC1690:("jtbl_80BC1690","UNK_PTR","",0x4),
0x80BC16B8:("jtbl_80BC16B8","UNK_PTR","",0x4),
0x80BC16D0:("jtbl_80BC16D0","UNK_PTR","",0x4),
@@ -16596,7 +16598,7 @@
0x80C1E984:("D_80C1E984","UNK_TYPE1","",0x1),
0x80C1F150:("Dm_Bal_InitVars","UNK_TYPE1","",0x1),
0x80C1F170:("sAnimationInfo","UNK_PTR","",0x4),
- 0x80C1F2C0:("D_80C1F2C0","UNK_TYPE2","",0x2),
+ 0x80C1F2C0:("sCueId","UNK_TYPE2","",0x2),
0x80C1F2C4:("D_80C1F2C4","UNK_TYPE4","",0x4),
0x80C1F2D0:("D_80C1F2D0","UNK_TYPE1","",0x1),
0x80C1F2E0:("D_80C1F2E0","f32","",0x4),
diff --git a/tools/eventinfconvert.py b/tools/eventinfconvert.py
new file mode 100755
index 000000000..7205dfcc9
--- /dev/null
+++ b/tools/eventinfconvert.py
@@ -0,0 +1,91 @@
+#!/usr/bin/env python3
+
+import argparse
+import math
+import re
+
+def isValid(index: int, mask: int) -> bool:
+ if index < 0 or index > 7:
+ return False
+ if mask != (1 << int(math.log2(mask))):
+ return False
+ return True
+
+def getFlagMacro(index: int, mask: int) -> str:
+ return f"EVENTINF_{index}{int(math.log2(mask))}"
+
+def getCheckMacro(index: int, mask: int) -> str:
+ return f"CHECK_EVENTINF({getFlagMacro(index, mask)})"
+
+def getSetMacro(index: int, mask: int) -> str:
+ return f"SET_EVENTINF({getFlagMacro(index, mask)})"
+
+def getClearMacro(index: int, mask: int) -> str:
+ return f"CLEAR_EVENTINF({getFlagMacro(index, mask)})"
+
+NUMBER_PATTERN = r"(0[xX])?[0-9a-fA-F]+"
+
+def applyChange(fileContents: str, compiledRegex: re.Pattern, callback) -> str:
+ parsedContents = ""
+
+ match = compiledRegex.search(fileContents)
+ while match:
+ index = int(match.group("index"), 0)
+ mask = int(match.group("mask"), 0)
+
+ start, end = match.span()
+ parsedContents += fileContents[:start]
+ if isValid(index, mask):
+ parsedContents += callback(index, mask)
+ else:
+ parsedContents += fileContents[start:end]
+
+ fileContents = fileContents[end:]
+ match = compiledRegex.search(fileContents)
+
+ parsedContents += fileContents
+ return parsedContents
+
+
+def updateCheck(fileContents: str) -> str:
+ checkRegex = re.compile(rf"gSaveContext.eventInf\[(?P{NUMBER_PATTERN})\]\s*\&\s*(?P{NUMBER_PATTERN})")
+
+ return applyChange(fileContents, checkRegex, getCheckMacro)
+
+def updateSet(fileContents: str) -> str:
+ setRegex = re.compile(rf"gSaveContext.eventInf\[(?P{NUMBER_PATTERN})\]\s*\|=\s*(?P{NUMBER_PATTERN})")
+
+ return applyChange(fileContents, setRegex, getSetMacro)
+
+def updateClear(fileContents: str) -> str:
+ clearRegex = re.compile(rf"gSaveContext.eventInf\[(?P{NUMBER_PATTERN})\]\s*\&=\s*(\(u8\))?~(?P{NUMBER_PATTERN})")
+
+ return applyChange(fileContents, clearRegex, getClearMacro)
+
+
+def read_file(filename):
+ with open(filename) as src_file:
+ return src_file.read()
+
+def write_file(filename, contents):
+ with open(filename, "w") as f:
+ f.write(contents)
+
+
+def main():
+ parser = argparse.ArgumentParser(description="Converts a eventInf access to a macro")
+
+ parser.add_argument("filename", help="Replace every occurrence of numeric eventInf on this file to the corresponding macro")
+ args = parser.parse_args()
+
+ fileContents = read_file(args.filename)
+
+ parsedContents = updateCheck(fileContents)
+ parsedContents = updateSet(parsedContents)
+ parsedContents = updateClear(parsedContents)
+
+ if fileContents != parsedContents:
+ write_file(args.filename, parsedContents)
+
+if __name__ == "__main__":
+ main()
diff --git a/tools/fado/.gitrepo b/tools/fado/.gitrepo
index cedec4930..042b904f1 100644
--- a/tools/fado/.gitrepo
+++ b/tools/fado/.gitrepo
@@ -6,7 +6,7 @@
[subrepo]
remote = git@github.com:EllipticEllipsis/fado.git
branch = master
- commit = f7efb10a9a65f27e9ccad7ce270234f20d386ac9
- parent = 90cfafec47fe4b73ad9009e9501e147e86025aa6
+ commit = 8d896ee97d565508755584803c409fc33bb0c953
+ parent = b51c9f4d22d6e7db63700c163418654431a2a61a
method = merge
cmdver = 0.4.3
diff --git a/tools/fado/lib/vc_vector/vc_vector.c b/tools/fado/lib/vc_vector/vc_vector.c
index 3f677c242..426f1b0cb 100644
--- a/tools/fado/lib/vc_vector/vc_vector.c
+++ b/tools/fado/lib/vc_vector/vc_vector.c
@@ -112,15 +112,15 @@ bool vc_vector_is_equals(vc_vector* vector1, vc_vector* vector2) {
return memcmp(vector1->data, vector2->data, size_vector1) == 0;
}
-float vc_vector_get_growth_factor() {
+float vc_vector_get_growth_factor(void) {
return GROWTH_FACTOR;
}
-size_t vc_vector_get_default_count_of_elements() {
+size_t vc_vector_get_default_count_of_elements(void) {
return DEFAULT_COUNT_OF_ELEMENTS;
}
-size_t vc_vector_struct_size() {
+size_t vc_vector_struct_size(void) {
return sizeof(vc_vector);
}
diff --git a/tools/fado/lib/vc_vector/vc_vector.h b/tools/fado/lib/vc_vector/vc_vector.h
index 2b1422c1a..e57f83254 100644
--- a/tools/fado/lib/vc_vector/vc_vector.h
+++ b/tools/fado/lib/vc_vector/vc_vector.h
@@ -24,13 +24,13 @@ void vc_vector_release(vc_vector* vector);
bool vc_vector_is_equals(vc_vector* vector1, vc_vector* vector2);
// Returns constant value of the vector growth factor.
-float vc_vector_get_growth_factor();
+float vc_vector_get_growth_factor(void);
// Returns constant value of the vector default count of elements.
-size_t vc_vector_get_default_count_of_elements();
+size_t vc_vector_get_default_count_of_elements(void);
// Returns constant value of the vector struct size.
-size_t vc_vector_struct_size();
+size_t vc_vector_struct_size(void);
// ----------------------------------------------------------------------------
// Element access
diff --git a/tools/fado/src/main.c b/tools/fado/src/main.c
index c6af79025..e6b7926d6 100644
--- a/tools/fado/src/main.c
+++ b/tools/fado/src/main.c
@@ -15,7 +15,7 @@
#include "version.inc"
-void PrintVersion() {
+void PrintVersion(void) {
printf("Fado (Fairy-Assisted relocations for Decompiled Overlays), version %s\n", versionNumber);
printf("Copyright (C) 2021 Elliptic Ellipsis\n");
printf("%s\n", credits);
@@ -88,7 +88,7 @@ static size_t posArgCount = ARRAY_COUNT(posArgInfo);
static size_t optCount = ARRAY_COUNT(optInfo);
static struct option longOptions[ARRAY_COUNT(optInfo)];
-void ConstructLongOpts() {
+void ConstructLongOpts(void) {
size_t i;
for (i = 0; i < optCount; i++) {
diff --git a/tools/graphovl/.gitrepo b/tools/graphovl/.gitrepo
index 064b8ee58..ca544b885 100644
--- a/tools/graphovl/.gitrepo
+++ b/tools/graphovl/.gitrepo
@@ -6,7 +6,7 @@
[subrepo]
remote = https://github.com/AngheloAlf/graphovl.git
branch = master
- commit = f5fe93d75bb75ea4bea65f62c43f41f6a1e70679
- parent = 6c5a50ef95f351acc7c4c0455a347a94443adbe1
+ commit = dab4addae0c5db6274ab5daf7780c62c346120a1
+ parent = 5da1ae553569ddb0016d302cfac8c45d9cb22e73
method = merge
cmdver = 0.4.3
diff --git a/tools/graphovl/graphovl.py b/tools/graphovl/graphovl.py
index 28f0a361c..7cb7af2c5 100755
--- a/tools/graphovl/graphovl.py
+++ b/tools/graphovl/graphovl.py
@@ -18,7 +18,7 @@ except ModuleNotFoundError:
script_dir = os.path.dirname(os.path.realpath(__file__))
config = ConfigParser()
-func_names = None
+func_names = list()
func_definitions = list()
line_numbers_of_functions = list()
@@ -72,6 +72,19 @@ def capture_setupaction_call_arg(content):
transitionList.append(func)
return transitionList
+setaction_regexpr = re.compile(r"_SetAction+\([^\)]*\)(\.[^\)]*\))?;")
+
+def capture_setaction_calls(content):
+ return [x.group() for x in re.finditer(setaction_regexpr, content)]
+
+def capture_setaction_call_arg(content):
+ transitionList = []
+ for x in re.finditer(setaction_regexpr, content):
+ func = x.group().split(",")[2].strip().split(");")[0].strip()
+ if func not in transitionList:
+ transitionList.append(func)
+ return transitionList
+
# Search for the function definition by supplied function name
def definition_by_name(content, name):
for definition in capture_definitions(content):
@@ -206,7 +219,11 @@ def addFunctionTransitionToGraph(dot, index: int, func_name: str, action_transit
fontColor = config.get("colors", "fontcolor")
bubbleColor = config.get("colors", "bubbleColor")
indexStr = str(index)
- funcIndex = str(index_of_func(action_transition))
+ try:
+ funcIndex = str(index_of_func(action_transition))
+ except ValueError:
+ print(f"Warning: function '{action_transition}' called by '{func_name}' was not found. Skiping...", file=sys.stderr)
+ return
dot.node(indexStr, func_name, fontcolor=fontColor, color=bubbleColor)
dot.node(funcIndex, action_transition, fontcolor=fontColor, color=bubbleColor)
@@ -230,7 +247,7 @@ def addCallNamesToGraph(dot, func_names: list, index: int, code_body: str, remov
if call in removeList:
continue
- if setupAction and "_SetupAction" in call:
+ if setupAction and ("_SetupAction" in call or "_SetAction" in call):
continue
seen.add(call)
@@ -342,10 +359,11 @@ def main():
actionIdentifier = "this->actionFunc"
setupAction = func_prefix + "_SetupAction" in func_names
+ setAction = func_prefix + "_SetAction" in func_names
arrayActorFunc = match_obj is not None
rawActorFunc = actionIdentifier in contents
- if not setupAction and not arrayActorFunc and not rawActorFunc:
+ if not setupAction and not setAction and not arrayActorFunc and not rawActorFunc:
print("No actor action-based structure found")
os._exit(1)
@@ -383,6 +401,8 @@ def main():
Create all edges for SetupAction-based actors
"""
transitionList = capture_setupaction_call_arg(code_body)
+ elif setAction:
+ transitionList = capture_setaction_call_arg(code_body)
elif arrayActorFunc:
"""
Create all edges for ActorFunc array-based actors
diff --git a/tools/ido_recomp/linux/5.3/as0 b/tools/ido_recomp/linux/5.3/as0
new file mode 100755
index 000000000..cdac712e5
Binary files /dev/null and b/tools/ido_recomp/linux/5.3/as0 differ
diff --git a/tools/ido_recomp/linux/5.3/as1 b/tools/ido_recomp/linux/5.3/as1
index 41c2545af..f89911f80 100755
Binary files a/tools/ido_recomp/linux/5.3/as1 and b/tools/ido_recomp/linux/5.3/as1 differ
diff --git a/tools/ido_recomp/linux/5.3/cc b/tools/ido_recomp/linux/5.3/cc
index 3dcc53798..be5bed557 100755
Binary files a/tools/ido_recomp/linux/5.3/cc and b/tools/ido_recomp/linux/5.3/cc differ
diff --git a/tools/ido_recomp/linux/5.3/cfe b/tools/ido_recomp/linux/5.3/cfe
index e9594fafc..c257f65a6 100755
Binary files a/tools/ido_recomp/linux/5.3/cfe and b/tools/ido_recomp/linux/5.3/cfe differ
diff --git a/tools/ido_recomp/linux/5.3/err.english.cc b/tools/ido_recomp/linux/5.3/err.english.cc
old mode 100755
new mode 100644
diff --git a/tools/ido_recomp/linux/5.3/ugen b/tools/ido_recomp/linux/5.3/ugen
index b2b662f1d..d356300bf 100755
Binary files a/tools/ido_recomp/linux/5.3/ugen and b/tools/ido_recomp/linux/5.3/ugen differ
diff --git a/tools/ido_recomp/linux/5.3/ujoin b/tools/ido_recomp/linux/5.3/ujoin
old mode 100644
new mode 100755
index f9c90b8be..5a3162799
Binary files a/tools/ido_recomp/linux/5.3/ujoin and b/tools/ido_recomp/linux/5.3/ujoin differ
diff --git a/tools/ido_recomp/linux/5.3/uld b/tools/ido_recomp/linux/5.3/uld
old mode 100644
new mode 100755
index f227222bc..a65a2239b
Binary files a/tools/ido_recomp/linux/5.3/uld and b/tools/ido_recomp/linux/5.3/uld differ
diff --git a/tools/ido_recomp/linux/5.3/umerge b/tools/ido_recomp/linux/5.3/umerge
old mode 100644
new mode 100755
index 00a8281d2..36fa5ac6e
Binary files a/tools/ido_recomp/linux/5.3/umerge and b/tools/ido_recomp/linux/5.3/umerge differ
diff --git a/tools/ido_recomp/linux/5.3/uopt b/tools/ido_recomp/linux/5.3/uopt
index 5afe7a11c..f44642087 100755
Binary files a/tools/ido_recomp/linux/5.3/uopt and b/tools/ido_recomp/linux/5.3/uopt differ
diff --git a/tools/ido_recomp/linux/5.3/usplit b/tools/ido_recomp/linux/5.3/usplit
old mode 100644
new mode 100755
index a1c5ebad6..5aa4151ed
Binary files a/tools/ido_recomp/linux/5.3/usplit and b/tools/ido_recomp/linux/5.3/usplit differ
diff --git a/tools/ido_recomp/linux/7.1/as0 b/tools/ido_recomp/linux/7.1/as0
new file mode 100755
index 000000000..1a69a14a5
Binary files /dev/null and b/tools/ido_recomp/linux/7.1/as0 differ
diff --git a/tools/ido_recomp/linux/7.1/as1 b/tools/ido_recomp/linux/7.1/as1
index 01dbc6f6b..047cfdd7f 100755
Binary files a/tools/ido_recomp/linux/7.1/as1 and b/tools/ido_recomp/linux/7.1/as1 differ
diff --git a/tools/ido_recomp/linux/7.1/cc b/tools/ido_recomp/linux/7.1/cc
index a7f06afa8..61c43ede1 100755
Binary files a/tools/ido_recomp/linux/7.1/cc and b/tools/ido_recomp/linux/7.1/cc differ
diff --git a/tools/ido_recomp/linux/7.1/cfe b/tools/ido_recomp/linux/7.1/cfe
index 2c6767e69..75235c112 100755
Binary files a/tools/ido_recomp/linux/7.1/cfe and b/tools/ido_recomp/linux/7.1/cfe differ
diff --git a/tools/ido_recomp/linux/7.1/err.english.cc b/tools/ido_recomp/linux/7.1/err.english.cc
old mode 100755
new mode 100644
diff --git a/tools/ido_recomp/linux/7.1/ugen b/tools/ido_recomp/linux/7.1/ugen
index f5c1a2e20..32d8d0be6 100755
Binary files a/tools/ido_recomp/linux/7.1/ugen and b/tools/ido_recomp/linux/7.1/ugen differ
diff --git a/tools/ido_recomp/linux/7.1/ujoin b/tools/ido_recomp/linux/7.1/ujoin
new file mode 100755
index 000000000..49b35ba6a
Binary files /dev/null and b/tools/ido_recomp/linux/7.1/ujoin differ
diff --git a/tools/ido_recomp/linux/7.1/uld b/tools/ido_recomp/linux/7.1/uld
new file mode 100755
index 000000000..756d30cd4
Binary files /dev/null and b/tools/ido_recomp/linux/7.1/uld differ
diff --git a/tools/ido_recomp/linux/7.1/umerge b/tools/ido_recomp/linux/7.1/umerge
old mode 100644
new mode 100755
index b0c8c1778..569e56e76
Binary files a/tools/ido_recomp/linux/7.1/umerge and b/tools/ido_recomp/linux/7.1/umerge differ
diff --git a/tools/ido_recomp/linux/7.1/uopt b/tools/ido_recomp/linux/7.1/uopt
index ecf7eab72..349d1d6ff 100755
Binary files a/tools/ido_recomp/linux/7.1/uopt and b/tools/ido_recomp/linux/7.1/uopt differ
diff --git a/tools/ido_recomp/linux/7.1/usplit b/tools/ido_recomp/linux/7.1/usplit
new file mode 100755
index 000000000..563c5f8a2
Binary files /dev/null and b/tools/ido_recomp/linux/7.1/usplit differ
diff --git a/tools/ido_recomp/macos/5.3/acpp b/tools/ido_recomp/macos/5.3/acpp
deleted file mode 100755
index 043162770..000000000
Binary files a/tools/ido_recomp/macos/5.3/acpp and /dev/null differ
diff --git a/tools/ido_recomp/macos/5.3/as0 b/tools/ido_recomp/macos/5.3/as0
index 9cff1dcd7..1d2b7a725 100755
Binary files a/tools/ido_recomp/macos/5.3/as0 and b/tools/ido_recomp/macos/5.3/as0 differ
diff --git a/tools/ido_recomp/macos/5.3/as1 b/tools/ido_recomp/macos/5.3/as1
index df0142e86..44fada1c5 100755
Binary files a/tools/ido_recomp/macos/5.3/as1 and b/tools/ido_recomp/macos/5.3/as1 differ
diff --git a/tools/ido_recomp/macos/5.3/cc b/tools/ido_recomp/macos/5.3/cc
index e9b599bda..9e3c8f8c9 100755
Binary files a/tools/ido_recomp/macos/5.3/cc and b/tools/ido_recomp/macos/5.3/cc differ
diff --git a/tools/ido_recomp/macos/5.3/cfe b/tools/ido_recomp/macos/5.3/cfe
index 30e514947..86d98c79d 100755
Binary files a/tools/ido_recomp/macos/5.3/cfe and b/tools/ido_recomp/macos/5.3/cfe differ
diff --git a/tools/ido_recomp/macos/5.3/copt b/tools/ido_recomp/macos/5.3/copt
deleted file mode 100755
index 243c37a29..000000000
Binary files a/tools/ido_recomp/macos/5.3/copt and /dev/null differ
diff --git a/tools/ido_recomp/macos/5.3/ugen b/tools/ido_recomp/macos/5.3/ugen
index 7f18bf44b..add44a34d 100755
Binary files a/tools/ido_recomp/macos/5.3/ugen and b/tools/ido_recomp/macos/5.3/ugen differ
diff --git a/tools/ido_recomp/macos/5.3/ujoin b/tools/ido_recomp/macos/5.3/ujoin
index 30503f95d..5e7ed4789 100755
Binary files a/tools/ido_recomp/macos/5.3/ujoin and b/tools/ido_recomp/macos/5.3/ujoin differ
diff --git a/tools/ido_recomp/macos/5.3/uld b/tools/ido_recomp/macos/5.3/uld
index 13aa261f5..64fc3899c 100755
Binary files a/tools/ido_recomp/macos/5.3/uld and b/tools/ido_recomp/macos/5.3/uld differ
diff --git a/tools/ido_recomp/macos/5.3/umerge b/tools/ido_recomp/macos/5.3/umerge
index c31c866d5..c66ef9f2f 100755
Binary files a/tools/ido_recomp/macos/5.3/umerge and b/tools/ido_recomp/macos/5.3/umerge differ
diff --git a/tools/ido_recomp/macos/5.3/uopt b/tools/ido_recomp/macos/5.3/uopt
index 7bbaac298..0872f9c17 100755
Binary files a/tools/ido_recomp/macos/5.3/uopt and b/tools/ido_recomp/macos/5.3/uopt differ
diff --git a/tools/ido_recomp/macos/5.3/usplit b/tools/ido_recomp/macos/5.3/usplit
index a95984803..2a7c35188 100755
Binary files a/tools/ido_recomp/macos/5.3/usplit and b/tools/ido_recomp/macos/5.3/usplit differ
diff --git a/tools/ido_recomp/macos/7.1/as0 b/tools/ido_recomp/macos/7.1/as0
new file mode 100755
index 000000000..9a2fd2f0a
Binary files /dev/null and b/tools/ido_recomp/macos/7.1/as0 differ
diff --git a/tools/ido_recomp/macos/7.1/as1 b/tools/ido_recomp/macos/7.1/as1
index 88b9f1f7e..e91f7d1a2 100755
Binary files a/tools/ido_recomp/macos/7.1/as1 and b/tools/ido_recomp/macos/7.1/as1 differ
diff --git a/tools/ido_recomp/macos/7.1/cc b/tools/ido_recomp/macos/7.1/cc
index ae54cdbcd..b487956f2 100755
Binary files a/tools/ido_recomp/macos/7.1/cc and b/tools/ido_recomp/macos/7.1/cc differ
diff --git a/tools/ido_recomp/macos/7.1/cfe b/tools/ido_recomp/macos/7.1/cfe
index 6c468c336..f86fc3743 100755
Binary files a/tools/ido_recomp/macos/7.1/cfe and b/tools/ido_recomp/macos/7.1/cfe differ
diff --git a/tools/ido_recomp/macos/7.1/ugen b/tools/ido_recomp/macos/7.1/ugen
index 3fa7d48fc..1e9839b4e 100755
Binary files a/tools/ido_recomp/macos/7.1/ugen and b/tools/ido_recomp/macos/7.1/ugen differ
diff --git a/tools/ido_recomp/macos/7.1/ujoin b/tools/ido_recomp/macos/7.1/ujoin
new file mode 100755
index 000000000..d2512e934
Binary files /dev/null and b/tools/ido_recomp/macos/7.1/ujoin differ
diff --git a/tools/ido_recomp/macos/7.1/uld b/tools/ido_recomp/macos/7.1/uld
new file mode 100755
index 000000000..a746a8236
Binary files /dev/null and b/tools/ido_recomp/macos/7.1/uld differ
diff --git a/tools/ido_recomp/macos/7.1/umerge b/tools/ido_recomp/macos/7.1/umerge
index 3a9d5440c..a561c0801 100755
Binary files a/tools/ido_recomp/macos/7.1/umerge and b/tools/ido_recomp/macos/7.1/umerge differ
diff --git a/tools/ido_recomp/macos/7.1/uopt b/tools/ido_recomp/macos/7.1/uopt
index b025fa2c5..30817f201 100755
Binary files a/tools/ido_recomp/macos/7.1/uopt and b/tools/ido_recomp/macos/7.1/uopt differ
diff --git a/tools/ido_recomp/macos/7.1/usplit b/tools/ido_recomp/macos/7.1/usplit
new file mode 100755
index 000000000..247279453
Binary files /dev/null and b/tools/ido_recomp/macos/7.1/usplit differ
diff --git a/tools/ido_recomp/windows/5.3/as0.exe b/tools/ido_recomp/windows/5.3/as0.exe
new file mode 100755
index 000000000..0c4926085
Binary files /dev/null and b/tools/ido_recomp/windows/5.3/as0.exe differ
diff --git a/tools/ido_recomp/windows/5.3/as1.exe b/tools/ido_recomp/windows/5.3/as1.exe
index fb67bb8b5..2d79cc536 100755
Binary files a/tools/ido_recomp/windows/5.3/as1.exe and b/tools/ido_recomp/windows/5.3/as1.exe differ
diff --git a/tools/ido_recomp/windows/5.3/cc.exe b/tools/ido_recomp/windows/5.3/cc.exe
index 402d6f489..7c08eac81 100755
Binary files a/tools/ido_recomp/windows/5.3/cc.exe and b/tools/ido_recomp/windows/5.3/cc.exe differ
diff --git a/tools/ido_recomp/windows/5.3/cfe.exe b/tools/ido_recomp/windows/5.3/cfe.exe
index 4b2fa59de..2f5de5f18 100755
Binary files a/tools/ido_recomp/windows/5.3/cfe.exe and b/tools/ido_recomp/windows/5.3/cfe.exe differ
diff --git a/tools/ido_recomp/windows/5.3/err.english.cc b/tools/ido_recomp/windows/5.3/err.english.cc
old mode 100755
new mode 100644
diff --git a/tools/ido_recomp/windows/5.3/ugen.exe b/tools/ido_recomp/windows/5.3/ugen.exe
index f74ee0d9e..0f919c234 100755
Binary files a/tools/ido_recomp/windows/5.3/ugen.exe and b/tools/ido_recomp/windows/5.3/ugen.exe differ
diff --git a/tools/ido_recomp/windows/5.3/ujoin.exe b/tools/ido_recomp/windows/5.3/ujoin.exe
new file mode 100755
index 000000000..f1397ee0c
Binary files /dev/null and b/tools/ido_recomp/windows/5.3/ujoin.exe differ
diff --git a/tools/ido_recomp/windows/5.3/uld.exe b/tools/ido_recomp/windows/5.3/uld.exe
new file mode 100755
index 000000000..d415d9ba0
Binary files /dev/null and b/tools/ido_recomp/windows/5.3/uld.exe differ
diff --git a/tools/ido_recomp/windows/5.3/umerge.exe b/tools/ido_recomp/windows/5.3/umerge.exe
new file mode 100755
index 000000000..23bf7b251
Binary files /dev/null and b/tools/ido_recomp/windows/5.3/umerge.exe differ
diff --git a/tools/ido_recomp/windows/5.3/uopt.exe b/tools/ido_recomp/windows/5.3/uopt.exe
index 274d7e008..248beabc7 100755
Binary files a/tools/ido_recomp/windows/5.3/uopt.exe and b/tools/ido_recomp/windows/5.3/uopt.exe differ
diff --git a/tools/ido_recomp/windows/5.3/usplit.exe b/tools/ido_recomp/windows/5.3/usplit.exe
new file mode 100755
index 000000000..6ac2a6382
Binary files /dev/null and b/tools/ido_recomp/windows/5.3/usplit.exe differ
diff --git a/tools/ido_recomp/windows/7.1/as0.exe b/tools/ido_recomp/windows/7.1/as0.exe
new file mode 100755
index 000000000..346827a49
Binary files /dev/null and b/tools/ido_recomp/windows/7.1/as0.exe differ
diff --git a/tools/ido_recomp/windows/7.1/as1.exe b/tools/ido_recomp/windows/7.1/as1.exe
index b41eba841..7076875b9 100755
Binary files a/tools/ido_recomp/windows/7.1/as1.exe and b/tools/ido_recomp/windows/7.1/as1.exe differ
diff --git a/tools/ido_recomp/windows/7.1/cc.exe b/tools/ido_recomp/windows/7.1/cc.exe
index 1ada0d5bb..53bf83433 100755
Binary files a/tools/ido_recomp/windows/7.1/cc.exe and b/tools/ido_recomp/windows/7.1/cc.exe differ
diff --git a/tools/ido_recomp/windows/7.1/cfe.exe b/tools/ido_recomp/windows/7.1/cfe.exe
index 03f8fc7e8..0286c3fa5 100755
Binary files a/tools/ido_recomp/windows/7.1/cfe.exe and b/tools/ido_recomp/windows/7.1/cfe.exe differ
diff --git a/tools/ido_recomp/windows/7.1/err.english.cc b/tools/ido_recomp/windows/7.1/err.english.cc
old mode 100755
new mode 100644
diff --git a/tools/ido_recomp/windows/7.1/ugen.exe b/tools/ido_recomp/windows/7.1/ugen.exe
index e6533ab0b..30577e396 100755
Binary files a/tools/ido_recomp/windows/7.1/ugen.exe and b/tools/ido_recomp/windows/7.1/ugen.exe differ
diff --git a/tools/ido_recomp/windows/7.1/ujoin.exe b/tools/ido_recomp/windows/7.1/ujoin.exe
new file mode 100755
index 000000000..18fc825bc
Binary files /dev/null and b/tools/ido_recomp/windows/7.1/ujoin.exe differ
diff --git a/tools/ido_recomp/windows/7.1/uld.exe b/tools/ido_recomp/windows/7.1/uld.exe
new file mode 100755
index 000000000..a0bb88593
Binary files /dev/null and b/tools/ido_recomp/windows/7.1/uld.exe differ
diff --git a/tools/ido_recomp/windows/7.1/umerge.exe b/tools/ido_recomp/windows/7.1/umerge.exe
new file mode 100755
index 000000000..3e6698ada
Binary files /dev/null and b/tools/ido_recomp/windows/7.1/umerge.exe differ
diff --git a/tools/ido_recomp/windows/7.1/uopt.exe b/tools/ido_recomp/windows/7.1/uopt.exe
index 5033f72b1..ae714d528 100755
Binary files a/tools/ido_recomp/windows/7.1/uopt.exe and b/tools/ido_recomp/windows/7.1/uopt.exe differ
diff --git a/tools/ido_recomp/windows/7.1/usplit.exe b/tools/ido_recomp/windows/7.1/usplit.exe
new file mode 100755
index 000000000..f61837d0f
Binary files /dev/null and b/tools/ido_recomp/windows/7.1/usplit.exe differ
diff --git a/tools/m2ctx.py b/tools/m2ctx.py
index 0824899f1..23875eef0 100755
--- a/tools/m2ctx.py
+++ b/tools/m2ctx.py
@@ -1,14 +1,39 @@
#!/usr/bin/env python3
-import argparse, os, subprocess, sys
+import argparse
+import os
+import sys
+import subprocess
+import tempfile
from pathlib import Path
-script_dir = os.path.dirname(os.path.realpath(__file__))
-root_dir = script_dir + "/../"
-src_dir = root_dir + "src/"
+script_dir = Path(os.path.dirname(os.path.realpath(__file__)))
+root_dir = script_dir / ".."
+src_dir = root_dir / "src"
+
+# Project-specific
+CPP_FLAGS = [
+ "-Iinclude",
+ "-Isrc",
+ "-Iassets",
+ "-Ibuild",
+ "-I.",
+
+ "-D__sgi",
+ "-D_LANGUAGE_C",
+ "-DNON_MATCHING",
+ "-D_Static_assert(x, y)=",
+ "-D__attribute__(x)="
+ "-D_MIPS_SZLONG=32",
+ "-ffreestanding",
+ "-DM2CTX",
+
+ "-std=gnu89",
+]
# Read through the processes context and replace whatever
def custom_replacements(output):
+ actorList = []
output = output.splitlines()
i = 0
@@ -36,7 +61,6 @@ def custom_replacements(output):
"door",
"chest",
]
- actorList = []
for x in range(12):
actorList.append(actorListText.replace("first;", f"{actorCats[x]};") + "\n")
if x == 2:
@@ -48,63 +72,55 @@ def custom_replacements(output):
i += 1
return "\n".join(output)
-def get_c_dir(dirname):
- for root, dirs, files in os.walk(src_dir):
- for directory in dirs:
- if directory == dirname:
- return os.path.join(root, directory)
-
-
-def get_c_file(directory):
- for root, dirs, files in os.walk(directory):
- for file in files:
- if file.endswith(".c") and "data" not in file:
- return file
-
-
-def import_c_file(in_file):
+def import_c_file(in_file) -> str:
in_file = os.path.relpath(in_file, root_dir)
- cpp_command = ["gcc", "-E", "-P", "-Iinclude", "-Iassets", "-Isrc", "-undef", "-D__sgi", "-D_LANGUAGE_C",
- "-DNON_MATCHING", "-D_Static_assert(x, y)=", "-D__attribute__(x)=", in_file]
+
+ cpp_command = ["gcc", "-E", "-P", "-undef", "-dM", *CPP_FLAGS, in_file]
+ cpp_command2 = ["gcc", "-E", "-P", "-undef", *CPP_FLAGS, in_file]
+
+ with tempfile.NamedTemporaryFile(suffix=".c") as tmp:
+ stock_macros = subprocess.check_output(["gcc", "-E", "-P", "-undef", "-dM", tmp.name], cwd=root_dir, encoding="utf-8")
+
+ out_text = ""
try:
- return subprocess.check_output(cpp_command, cwd=root_dir, encoding="utf-8")
+ out_text += subprocess.check_output(cpp_command, cwd=root_dir, encoding="utf-8")
+ out_text += subprocess.check_output(cpp_command2, cwd=root_dir, encoding="utf-8")
except subprocess.CalledProcessError:
print(
"Failed to preprocess input file, when running command:\n"
- + cpp_command,
+ + " ".join(cpp_command),
file=sys.stderr,
- )
+ )
sys.exit(1)
+ if not out_text:
+ print("Output is empty - aborting")
+ sys.exit(1)
+
+ for line in stock_macros.strip().splitlines():
+ out_text = out_text.replace(line + "\n", "")
+ return out_text
+
def main():
parser = argparse.ArgumentParser(usage="./m2ctx.py path/to/file.c or ./m2ctx.py (from an actor or gamestate's asm dir)",
- description="Creates a ctx.c file for mips2c. "
- "Output will be saved as oot/ctx.c")
+ description="Creates a ctx.c file for m2c or decomp.me. "
+ "Output will be saved as ctx.c")
parser.add_argument('filepath', help="path of c file to be processed")
- parser.add_argument("--custom", "-c", dest="custom", action="store_true", default=False,
- help="Apply custom replacements to the output to help aid m2c output")
+ parser.add_argument("--custom", "-c", dest="custom", action="store_true", default=False,
+ help="Apply custom replacements to the output to help aid m2c output")
args = parser.parse_args()
- if args.filepath:
- c_file_path = args.filepath
- print("Using file: {}".format(c_file_path))
- else:
- this_dir = Path.cwd()
- c_dir_path = get_c_dir(this_dir.name)
- if c_dir_path is None:
- sys.exit(
- "Cannot find appropriate c file dir. In argumentless mode, run this script from the c file's corresponding asm dir.")
- c_file = get_c_file(c_dir_path)
- c_file_path = os.path.join(c_dir_path, c_file)
- print("Using file: {}".format(c_file_path))
+ c_file_path = args.filepath
+ print("Using file: {}".format(c_file_path))
output = import_c_file(c_file_path)
if args.custom:
output = custom_replacements(output)
- with open(os.path.join(root_dir, "ctx.c"), "w", encoding="UTF-8") as f:
+ ctxPath = root_dir / "ctx.c"
+ with ctxPath.open("w", encoding="UTF-8") as f:
f.write(output)
diff --git a/tools/namefixer.py b/tools/namefixer.py
index 4f596ecef..3d77dba9c 100755
--- a/tools/namefixer.py
+++ b/tools/namefixer.py
@@ -5,10 +5,7 @@ import argparse
# all occurrences of keys will be replaced by associated value
simpleReplace = {
- # "Math_Rand_":"Rand_",
- # "ACTORTYPE":"ACTORCAT",
- # "DistToLink":"DistToPlayer",
- # "HitItem":"HitInfo",
+ "PLAYER_AP_": "PLAYER_IA_",
}
# all occurrences of keys will be replaced by associated value,
@@ -21,7 +18,9 @@ simpleReplace = {
wordReplace = {
# Functions
"Actor_GetSwitchFlag": "Flags_GetSwitch",
- "atan_flip": "Math_Acot2F",
+ "Math_FAtan2F": "Math_Atan2S_XY",
+ "Math_Acot2F": "Math_Atan2F_XY",
+ "atan_flip": "Math_Atan2F_XY",
"atans": "Math_Atan2S",
# "SysMatrix_StateAlloc": "Matrix_StateAlloc",
@@ -98,6 +97,7 @@ wordReplace = {
"Matrix_InsertRotationAroundUnitVector_s": "Matrix_RotateAxisS",
"func_800B78B8": "Actor_UpdateBgCheckInfo",
+ "func_80123D50": "Player_UpdateBottleHeld",
"func_8012403C": "Player_GetMask",
"func_8012404c": "Player_RemoveMask",
"func_80123AA4": "Player_SetModels",
@@ -114,8 +114,26 @@ wordReplace = {
"Actor_IsActorFacingActorAndWithinRange": "Actor_ActorAIsFacingAndNearActorB",
"Actor_IsActorFacingActor": "Actor_ActorAIsFacingActorB",
"Actor_IsActorFacedByActor": "Actor_ActorBIsFacingActorA",
+ "Actor_MarkForDeath": "Actor_Kill",
"func_800B84D0": "Actor_ProcessTalkRequest",
"func_8017D668": "Math3D_PointDistToLine2D",
+
+ "THGA_GetSize": "THGA_GetRemaining",
+ "THGA_AllocStartArray8": "THGA_AllocDisplayList",
+ "THGA_AllocStart8": "THGA_AllocGfx",
+ "THGA_AllocStart8Wrapper": "THGA_AllocGfx2",
+ "THGA_AllocEnd": "THGA_AllocTail",
+ "THGA_AllocEndArray64": "THGA_AllocMtxArray",
+ "THGA_AllocEnd64": "THGA_AllocMtx",
+ "THGA_AllocEndArray16": "THGA_AllocVtxArray",
+ "THGA_AllocEnd16": "THGA_AllocVtx",
+ "THA_AllocStart": "THA_AllocHead",
+ "THA_AllocStart1": "THA_AllocHeadByte",
+ "THA_AllocEnd": "THA_AllocTail",
+ "THA_AllocEndAlign16": "THA_AllocTailAlign16",
+ "THA_AllocEndAlign": "THA_AllocTailAlign",
+ "THA_GetSize": "THA_GetRemaining",
+
"func_800BDFC0": "Gfx_DrawDListOpa",
"func_800BE03C": "Gfx_DrawDListXlu",
"func_800B6FC8": "Player_GetHeight",
@@ -136,6 +154,16 @@ wordReplace = {
"func_800B8214": "Actor_GetWorld",
"func_800B8248": "Actor_GetWorldPosShapeRot",
"func_800BE22C": "Actor_ApplyDamage",
+ "Actor_YawBetweenActors": "Actor_WorldYawTowardActor",
+ "Actor_YawBetweenActorsTop": "Actor_FocusYawTowardActor",
+ "Actor_YawToPoint": "Actor_WorldYawTowardPoint",
+ "Actor_PitchBetweenActors": "Actor_WorldPitchTowardActor",
+ "Actor_PitchBetweenActorsTop": "Actor_FocusPitchTowardActor",
+ "Actor_PitchToPoint": "Actor_WorldPitchTowardPoint",
+ "Actor_DistanceBetweenActors": "Actor_WorldDistXYZToActor",
+ "Actor_DistanceToPoint": "Actor_WorldDistXYZToPoint",
+ "Actor_XZDistanceBetweenActors": "Actor_WorldDistXZToActor",
+ "Actor_XZDistanceToPoint": "Actor_WorldDistXZToPoint",
"Audio_PlaySoundAtPosition": "SoundSource_PlaySfxAtFixedWorldPos",
"func_800F0590": "SoundSource_PlaySfxEachFrameAtFixedWorldPos",
"func_8016970C": "Play_SetCameraAtEye",
@@ -143,13 +171,19 @@ wordReplace = {
"func_800BBA88": "Enemy_StartFinishingBlow",
"ShrinkWindow_Step": "ShrinkWindow_Update",
"ShrinkWindow_Fini": "ShrinkWindow_Destroy",
- "func_801A89A8": "Audio_QueueSeqCmd",
+ "func_801A89A8": "AudioSeq_QueueSeqCmd",
+ "Audio_QueueSeqCmd": "AudioSeq_QueueSeqCmd",
+ "func_801A0238": "Audio_SetMainBgmVolume",
+ "func_801A2C20": "Audio_StopSubBgm",
+ "func_801A2BB8": "Audio_PlaySubBgm",
"func_8019F1C0": "Audio_PlaySfxAtPos",
"func_801A5BD0": "AudioSfx_MuteBanks",
"func_801A72CC": "AudioSfx_StopByPos",
"Audio_StopSfxByPos": "AudioSfx_StopByPos",
+ "Audio_StopSfxById": "AudioSfx_StopById",
"func_801A3098": "Audio_PlayFanfare",
- "func_801A8A50": "Audio_GetActiveSequence",
+ "func_801A8A50": "AudioSeq_GetActiveSeqId",
+ "Audio_GetActiveSequence": "AudioSeq_GetActiveSeqId",
"func_801A2E54": "Audio_PlayBgm_StorePrevBgm",
"func_801A2ED8": "Audio_RestorePrevBgm",
"func_801A2544": "Audio_PlayMorningSceneSequence",
@@ -161,72 +195,50 @@ wordReplace = {
"func_801A4A28": "Audio_PlayAmbience",
"func_801A7328": "AudioSfx_StopByPosAndId",
"func_801A75E8": "AudioSfx_StopById",
- "SkelAnime_LodDrawLimb": "SkelAnime_DrawLimbLod",
"SkelAnime_LodDraw": "SkelAnime_DrawLod",
- "SkelAnime_LodDrawLimbSV": "SkelAnime_DrawFlexLimbLod",
"SkelAnime_LodDrawSV": "SkelAnime_DrawFlexLod",
- # "SkelAnime_DrawLimb": "SkelAnime_DrawLimbOpa", # A different function is called this now
# "SkelAnime_Draw": "SkelAnime_DrawOpa", # A different function is called this now
"SkelAnime_DrawLimbSV": "SkelAnime_DrawFlexLimbOpa",
"SkelAnime_DrawSV": "SkelAnime_DrawFlexOpa",
# "SkelAnime_AnimateFrame": "SkelAnime_GetFrameData", # A different function is called this now
- "SkelAnime_GetTotalFrames": "Animation_GetLength",
"SkelAnime_GetFrameCount": "Animation_GetLastFrame",
- "SkelAnime_Draw2Limb": "SkelAnime_DrawLimb",
"SkelAnime_Draw2": "SkelAnime_Draw",
- "SkelAnime_DrawLimbSV2": "SkelAnime_DrawFlexLimb",
"SkelAnime_DrawSV2": "SkelAnime_DrawFlex",
- "func_80134FFC": "SkelAnime_GetFrameData2",
- "func_801353D4": "Animation_GetLimbCount2",
- "SkelAnime_GetTotalFrames2": "Animation_GetLength2",
- "SkelAnime_GetFrameCount2": "Animation_GetLastFrame2",
- "SkelAnime_InterpolateVec3s": "SkelAnime_InterpFrameTable",
"SkelAnime_AnimationCtxReset": "AnimationContext_Reset",
"func_801358D4": "AnimationContext_SetNextQueue",
"func_801358F4": "AnimationContext_DisableQueue",
- "SkelAnime_NextEntry": "AnimationContext_AddEntry",
"SkelAnime_LoadLinkAnimetion": "AnimationContext_SetLoadFrame",
- "SkelAnime_LoadAnimationType1": "AnimationContext_SetCopyAll",
- "SkelAnime_LoadAnimationType2": "AnimationContext_SetInterp",
- "SkelAnime_LoadAnimationType3": "AnimationContext_SetCopyTrue",
- "SkelAnime_LoadAnimationType4": "AnimationContext_SetCopyFalse",
- "SkelAnime_LoadAnimationType5": "AnimationContext_SetMoveActor",
- "SkelAnime_LinkAnimetionLoaded": "AnimationContext_LoadFrame",
+
"SkelAnime_AnimationType1Loaded": "AnimationContext_CopyAll",
"SkelAnime_AnimationType2Loaded": "AnimationContext_CopyInterp",
"SkelAnime_AnimationType3Loaded": "AnimationContext_CopyTrue",
"SkelAnime_AnimationType4Loaded": "AnimationContext_CopyFalse",
"SkelAnime_AnimationType5Loaded": "AnimationContext_MoveActor",
"func_80135EE8": "AnimationContext_Update",
- "SkelAnime_InitLinkAnimetion": "SkelAnime_InitLink",
- "func_801360A8": "LinkAnimation_SetUpdateFunction",
- "func_801360E0": "LinkAnimation_Update",
- "func_80136104": "LinkAnimation_Morph",
- "func_801361BC": "LinkAnimation_AnimateFrame",
- "func_80136288": "LinkAnimation_Loop",
- "func_8013631C": "LinkAnimation_Once",
+ "SkelAnime_InitLink": "SkelAnime_InitPlayer",
+ "LinkAnimation_SetUpdateFunction": "PlayerAnimation_SetUpdateFunction",
+ "LinkAnimation_Update": "PlayerAnimation_Update",
"SkelAnime_SetTransition": "Animation_SetMorph",
- "SkelAnime_ChangeLinkAnim": "LinkAnimation_Change",
- "SkelAnime_ChangeLinkAnimDefaultStop": "LinkAnimation_PlayOnce",
- "SkelAnime_ChangeLinkAnimPlaybackStop": "LinkAnimation_PlayOnceSetSpeed",
- "SkelAnime_ChangeLinkAnimDefaultRepeat": "LinkAnimation_PlayLoop",
- "SkelAnime_ChangeLinkAnimPlaybackRepeat": "LinkAnimation_PlayLoopSetSpeed",
- "func_8013670C": "LinkAnimation_CopyJointToMorph",
- "func_8013673C": "LinkAnimation_CopyMorphToJoint",
- "func_8013676C": "LinkAnimation_LoadToMorph",
- "func_801367B0": "LinkAnimation_LoadToJoint",
- "func_801367F4": "LinkAnimation_InterpJointMorph",
- "func_8013682C": "LinkAnimation_BlendToJoint",
- "func_801368CC": "LinkAnimation_BlendToMorph",
- "SkelAnime_SetModeStop": "LinkAnimation_EndLoop",
- "func_80136990": "Animation_OnFrameImpl",
- "func_80136A48": "LinkAnimation_OnFrame",
+ "LinkAnimation_Change": "PlayerAnimation_Change",
+ "LinkAnimation_PlayOnce": "PlayerAnimation_PlayOnce",
+ "LinkAnimation_PlayOnceSetSpeed": "PlayerAnimation_PlayOnceSetSpeed",
+ "LinkAnimation_PlayLoop": "PlayerAnimation_PlayLoop",
+ "LinkAnimation_PlayLoopSetSpeed": "PlayerAnimation_PlayLoopSetSpeed",
+ "LinkAnimation_CopyJointToMorph": "PlayerAnimation_CopyJointToMorph",
+ "LinkAnimation_CopyMorphToJoint": "PlayerAnimation_CopyMorphToJoint",
+ "LinkAnimation_LoadToMorph": "PlayerAnimation_LoadToMorph",
+ "LinkAnimation_LoadToJoint": "PlayerAnimation_LoadToJoint",
+ "LinkAnimation_InterpJointMorph": "PlayerAnimation_InterpJointMorph",
+ "LinkAnimation_BlendToJoint": "PlayerAnimation_BlendToJoint",
+ "LinkAnimation_BlendToMorph": "PlayerAnimation_BlendToMorph",
+ "LinkAnimation_EndLoop": "PlayerAnimation_EndLoop",
+ "LinkAnimation_OnFrame": "PlayerAnimation_OnFrame",
+
"SkelAnime_InitSV": "SkelAnime_InitFlex",
- "func_80136C84": "SkelAnime_SetUpdate",
"SkelAnime_FrameUpdateMatrix": "SkelAnime_Update",
"func_80136CF4": "SkelAnime_Morph",
"func_80136D98": "SkelAnime_MorphTaper",
- "func_80136F04": "SkelAnime_AnimateFrame",
+
"func_8013702C": "SkelAnime_LoopFull",
"func_801370B0": "SkelAnime_LoopPartial",
"func_8013713C": "SkelAnime_Once",
@@ -244,7 +256,7 @@ wordReplace = {
"func_801376DC": "SkelAnime_CopyFrameTableFalse",
"func_80137748": "SkelAnime_UpdateTranslation",
"func_801378B8": "Animation_OnFrame",
- "SkelAnime_CopyVec3s": "SkelAnime_CopyFrameTable",
+
"Actor_SetObjectSegment": "Actor_SetObjectDependency",
"func_800B3FC0": "ActorShadow_DrawCircle",
"func_800B4024": "ActorShadow_DrawSquare",
@@ -267,12 +279,17 @@ wordReplace = {
"Actor_UnsetRoomClearedTemp": "Flags_UnsetTempClear",
"Actor_GetCollectibleFlag": "Flags_GetCollectible",
"Actor_SetCollectibleFlag": "Flags_SetCollectible",
- "func_800B8A1C": "Actor_PickUp",
- "func_800B8B84": "Actor_PickUpNearby",
- "func_800B8BB0": "Actor_LiftActor",
- "func_800B8BD0": "Actor_PickUpFar",
+ "func_800B8A1C": "Actor_OfferGetItem",
+ "Actor_PickUp": "Actor_OfferGetItem",
+ "func_800B8B84": "Actor_OfferGetItemNearby",
+ "Actor_PickUpNearby": "Actor_OfferGetItemNearby",
+ "func_800B8BB0": "Actor_OfferCarry",
+ "Actor_LiftActor": "Actor_OfferCarry",
+ "func_800B8BD0": "Actor_OfferGetItemFar",
+ "Actor_PickUpFar": "Actor_OfferGetItemFar",
"func_801A5CFC": "AudioSfx_PlaySfx",
"Audio_PlaySfxGeneral": "AudioSfx_PlaySfx",
+ "func_800B8C50": "Actor_SetClosestSecretDistance",
"func_800BBDAC": "Actor_SpawnFloorDustRing",
"func_800B8708": "Player_GetExchangeItemId",
"func_801233E4": "Player_InCsMode",
@@ -287,15 +304,21 @@ wordReplace = {
"func_800B867C": "Actor_TextboxIsClosing",
"func_800BDC5C": "Actor_ChangeAnimationByInfo",
"Actor_ChangeAnimation": "Actor_ChangeAnimationByInfo",
+ "func_801477B4": "Message_CloseTextbox",
+ "func_80151938": "Message_ContinueTextbox",
"func_80152498": "Message_GetState",
"func_800B8898": "Actor_GetScreenPos",
- "Audio_PlayActorSound2": "Actor_PlaySfxAtPos",
+ "Audio_PlayActorSound2": "Actor_PlaySfx",
+ "Actor_PlaySfxAtPos": "Actor_PlaySfx",
+ "func_800B8E58": "Player_PlaySfx",
"func_800BF7CC": "Actor_SpawnIceEffects",
"Actor_IsFacingPlayerAndWithinRange": "Actor_IsFacingAndNearPlayer",
"func_800BC8B8": "Actor_DrawDoorLock",
"func_800B86C8": "Actor_ChangeFocus",
+ "func_800DF840": "Camera_ChangeMode",
"func_800B90F4": "Actor_DeactivateLens",
"func_800BC770": "Actor_AddQuake",
+ "func_800DF840": "Camera_ChangeMode",
"zelda_malloc": "ZeldaArena_Malloc",
"zelda_mallocR": "ZeldaArena_MallocR",
"zelda_realloc": "ZeldaArena_Realloc",
@@ -405,20 +428,49 @@ wordReplace = {
"BgCheck_AddActorMesh": "DynaPoly_SetBgActor",
"BgCheck_GetActorOfMesh": "DynaPoly_GetActor",
"BgCheck_RemoveActorMesh": "DynaPoly_DeleteBgActor",
- "BgCheck_AddActorMeshToLists": "DynaPoly_ExpandSRT",
- "BgCheck_Update": "DynaPoly_Setup",
+ "BgCheck_AddActorMeshToLists": "DynaPoly_AddBgActorToLookup",
+ "BgCheck_Update": "DynaPoly_UpdateContext",
"BgCheck_UpdateAllActorMeshes": "DynaPoly_UpdateBgActorTransforms",
"BgCheck_RelocateMeshHeaderPointers": "CollisionHeader_SegmentedToVirtual",
"BgCheck_RelocateMeshHeader": "CollisionHeader_GetVirtual",
"BgCheck_RelocateAllMeshHeaders": "BgCheck_InitCollisionHeaders",
"BgCheck_GetPolygonAttributes": "SurfaceType_GetData",
+ "DynaPolyActor_ResetState": "DynaPolyActor_UnsetAllInteractFlags",
+ "DynaPolyActor_SetRidingFallingState": "DynaPolyActor_SetActorOnTop",
+ "DynaPolyActor_SetRidingMovingState": "DynaPolyActor_SetPlayerOnTop",
+ "DynaPolyActor_SetRidingMovingStateByIndex": "DynaPoly_SetPlayerOnTop",
+ "DynaPolyActor_SetRidingRotatingState": "DynaPolyActor_SetPlayerAbove",
+ "DynaPolyActor_SetRidingRotatingStateByIndex": "DynaPoly_SetPlayerAbove",
+ "DynaPolyActor_SetSwitchPressedState": "DynaPolyActor_SetActorOnSwitch",
+ "DynaPolyActor_SetHeavySwitchPressedState": "DynaPolyActor_SetActorOnHeavySwitch",
+ "DynaPolyActor_IsInRidingFallingState": "DynaPolyActor_IsActorOnTop",
+ "DynaPolyActor_IsInRidingMovingState": "DynaPolyActor_IsPlayerOnTop",
+ "DynaPolyActor_IsInRidingRotatingState": "DynaPolyActor_IsPlayerAbove",
+ "DynaPolyActor_IsInSwitchPressedState": "DynaPolyActor_IsSwitchPressed",
+ "DynaPolyActor_IsInHeavySwitchPressedState": "DynaPolyActor_IsHeavySwitchPressed",
+ "func_800C62BC": "DynaPoly_DisableCollision",
+ "func_800C6314": "DynaPoly_EnableCollision",
+ "func_800C636C": "DynaPoly_DisableCeilingCollision",
+ "func_800C63C4": "DynaPoly_EnableCeilingCollision",
+ "func_800C641C": "DynaPoly_DisableFloorCollision",
+ "func_800C6474": "DynaPoly_EnableFloorCollision",
"SurfaceType_GetConveyorType": "SurfaceType_IsFloorConveyor",
"func_800C9704": "SurfaceType_GetBgCamIndex",
"func_800C9924": "BgCheck_GetBgCamFuncData",
"func_800C99AC": "SurfaceType_GetSceneExitIndex",
+ "func_800C99D4": "SurfaceType_GetFloorType",
+ "func_800C9A24": "SurfaceType_GetWallType",
+ "func_800C9A4C": "SurfaceType_GetWallFlags",
+ "func_800C9A7C": "SurfaceType_CheckWallFlag0",
+ "func_800C9AB0": "SurfaceType_CheckWallFlag1",
+ "func_800C9AE4": "SurfaceType_CheckWallFlag2",
+ "func_800C9B18": "SurfaceType_GetFloorProperty2",
+ "func_800C9B40": "SurfaceType_GetFloorProperty",
+ "func_800C9BB8": "SurfaceType_GetMaterial",
"func_800C9B90": "SurfaceType_IsHorseBlocked",
- "func_800C9BDC": "SurfaceType_GetSfx",
- "func_800C9C74": "SurfaceType_GetSlope",
+ "func_800C9BDC": "SurfaceType_GetSfxOffset",
+ "SurfaceType_GetSfx": "SurfaceType_GetSfxOffset",
+ "func_800C9C74": "SurfaceType_GetFloorEffect",
"func_800C9C9C": "SurfaceType_GetLightSettingIndex",
"func_800C9CC4": "SurfaceType_GetEcho",
"func_800C9CEC": "SurfaceType_IsHookshotSurface",
@@ -469,6 +521,7 @@ wordReplace = {
"func_800DFC90": "Camera_GetCamDir",
"func_800DFD04": "Camera_AddQuake",
"func_800DFFAC": "Camera_ChangeDoorCam",
+ "func_80169FFC": "Play_CamIsNotFixed",
"func_801694DC": "Play_CreateSubCamera",
"Play_GetActiveCameraIndex": "Play_GetActiveCamId",
"func_80169590": "Play_ChangeCameraStatus",
@@ -496,6 +549,14 @@ wordReplace = {
"func_80169E6C": "Play_SetupRespawnPoint",
"func_8016A0AC": "Play_IsUnderwater",
"func_801690CC": "Play_InCsMode",
+ "func_80165658": "Play_SetMotionBlurAlpha",
+ "func_8016566C": "Play_EnableMotionBlur",
+ "func_80165690": "Play_DisableMotionBlur",
+ "func_801660B8": "Play_SetFog",
+
+ "func_801129E4": "Interface_SetSceneRestrictions",
+ "func_8011B4E0": "Interface_SetPerfectLetters",
+ "func_80112AFC": "Interface_InitMinigame",
"func_8010E9F0": "Interface_StartTimer",
"func_8010EA9C": "Interface_StartPostmanTimer",
"func_80121F94": "Interface_Destroy",
@@ -513,7 +574,7 @@ wordReplace = {
"func_80115130": "Inventory_ConsumeFairy",
"func_801152B8": "Inventory_UpdateItem",
"func_80115908": "Health_ChangeBy",
- "func_801159c0": "Health_GiveHearts",
+ "func_801159C0": "Health_GiveHearts",
"func_801159EC": "Rupees_ChangeBy",
"func_80115A14": "Inventory_ChangeAmmo",
"Parameter_AddMagic": "Magic_Add",
@@ -525,21 +586,48 @@ wordReplace = {
"func_800A81F0": "EffectBlure_AddVertex",
"func_800A8514": "EffectBlure_AddSpace",
"Effect_GetParams": "Effect_GetByIndex",
+ "func_800FE484": "Environment_StopTime",
+ "func_800FE498": "Environment_StartTime",
+ "func_800FE4A8": "Environment_IsTimeStopped",
"func_800F5A8C": "Environment_LerpWeight",
+
"func_801A3F54": "Audio_SetCutsceneFlag",
- "func_800EA0D4": "Cutscene_Start",
- "func_800EA0EC": "Cutscene_End",
+ "func_800EA0D4": "Cutscene_StartManual",
+ "Cutscene_Start": "Cutscene_StartManual",
+ "func_800EA0EC": "Cutscene_StopManual",
+ "Cutscene_End": "Cutscene_StopManual",
"func_800EDE34": "Cutscene_ActorTranslate",
"func_800EDF24": "Cutscene_ActorTranslateAndYaw",
"func_800EDF78": "Cutscene_ActorTranslateAndYawSmooth",
"func_800EE0CC": "Cutscene_ActorTranslateXZAndYawSmooth",
"func_800EE1D8": "Cutscene_GetSceneLayer",
- "func_800EE200": "Cutscene_GetActorActionIndex",
- "func_800EE29C": "Cutscene_CheckActorAction",
+ "func_800EE200": "Cutscene_GetCueChannel",
+ "Cutscene_GetActorActionIndex": "Cutscene_GetCueChannel",
+ "func_800EE29C": "Cutscene_IsCueInChannel",
+ "Cutscene_CheckActorAction": "Cutscene_IsCueInChannel",
"func_800EE2F4": "Cutscene_IsPlaying",
"Cutscene_GetSceneSetupIndex": "Cutscene_GetSceneLayer",
+
+ "func_800F15D8": "CutsceneManager_StoreCamera",
+ "ActorCutscene_SetIntentToPlay": "CutsceneManager_Queue",
+ "ActorCutscene_GetCanPlayNext": "CutsceneManager_IsNext",
+ "ActorCutscene_StartAndSetUnkLinkFields": "CutsceneManager_StartWithPlayerCs",
+ "ActorCutscene_StartAndSetFlag": "CutsceneManager_StartWithPlayerCsAndSetFlag",
+ "ActorCutscene_Start": "CutsceneManager_Start",
+ "ActorCutscene_Stop": "CutsceneManager_Stop",
+ "ActorCutscene_GetCurrentIndex": "CutsceneManager_GetCurrentCsId",
+ "ActorCutscene_GetCutscene": "CutsceneManager_GetCutsceneEntry",
+ "ActorCutscene_GetAdditionalCutscene": "CutsceneManager_GetAdditionalCsId",
+ "ActorCutscene_GetLength": "CutsceneManager_GetLength",
+ "ActorCutscene_GetCurrentSubCamId": "CutsceneManager_GetCurrentSubCamId",
+ "ActorCutscene_GetCurrentCamera": "CutsceneManager_GetCurrentSubCamId",
+
+ "EnvFlags_UnsetAll": "CutsceneFlags_UnsetAll",
+ "EnvFlags_Set": "CutsceneFlags_Set",
+ "EnvFlags_Unset": "CutsceneFlags_Unset",
+ "EnvFlags_Get": "CutsceneFlags_Get",
+
"func_801343C0": "SkelAnime_DrawTransformFlexOpa",
- "func_80134148": "SkelAnime_DrawTransformFlexLimbOpa",
"func_80114E90": "Inventory_HasEmptyBottle",
"func_80114F2C": "Inventory_HasItemInBottle",
"func_80123C90": "Player_SetEquipmentData",
@@ -559,7 +647,8 @@ wordReplace = {
"func_8013E640": "SubS_FindActorCustom",
"func_ActorCategoryIterateById": "SubS_FindActor",
"func_8013BB7C": "SubS_FindNearestActor",
- "func_8013E2D4": "SubS_StartActorCutscene",
+ "func_8013E2D4": "SubS_StartCutscene",
+ "SubS_StartActorCutscene": "SubS_StartCutscene",
"func_8013E3B8": "SubS_FillCutscenesList",
"func_8013AED4": "SubS_UpdateFlags",
"func_8013D8DC": "SubS_IsObjectLoaded",
@@ -605,6 +694,7 @@ wordReplace = {
"EffectSsKiraKira_SpawnSmall": "EffectSsKirakira_SpawnSmall",
"EffectSsKiraKira_SpawnDispersed": "EffectSsKirakira_SpawnDispersed",
"EffectSsKiraKira_SpawnFocused": "EffectSsKirakira_SpawnFocused",
+ "Effect_Getplay": "Effect_GetPlayState",
"Effect_GetGlobalCtx": "Effect_GetPlayState",
"EffectSsHitMark_Spawn": "EffectSsHitmark_Spawn",
"EffectSsHitMark_SpawnFixedScale": "EffectSsHitmark_SpawnFixedScale",
@@ -614,6 +704,7 @@ wordReplace = {
"func_800E8FA4": "Actor_TrackPoint",
"func_800E9250": "Actor_TrackPlayer",
"func_800E8EA0": "Actor_ContinueText",
+ "func_800B90F4": "Actor_DeactivateLens",
"func_8010A000": "Map_GetDungeonOrBossAreaIndex",
"func_8010A074": "Map_IsInDungeonOrBossArea",
@@ -628,11 +719,11 @@ wordReplace = {
"func_8010A54C": "Minimap_Draw",
"func_8010A580": "Map_Update",
- "ActorCutscene_GetCurrentCamera": "ActorCutscene_GetCurrentSubCamId",
-
"Entrance_CreateIndex": "Entrance_Create",
"Entrance_CreateIndexFromSpawn": "Entrance_CreateFromSpawn",
+ "func_80102544": "LightContext_SetFog",
+
# Structs
"ActorAnimationEntry": "AnimationInfo",
"ActorAnimationEntryS": "AnimationInfoS",
@@ -641,6 +732,7 @@ wordReplace = {
"globalCtx": "play",
"globalCtx2": "play2",
"ScheduleResult": "ScheduleOutput",
+ "LinkAnimationHeader": "PlayerAnimationHeader",
# Struct members
"skelAnime.unk03": "skelAnime.taper",
@@ -659,48 +751,56 @@ wordReplace = {
"skelAnime.prevFrameRot": "skelAnime.prevRot",
"skelAnime.prevFramePos": "skelAnime.prevTransl",
"skelAnime.unk3E": "skelAnime.baseTransl",
+ "actor.unk20": "actor.halfDaysBits",
"actor.minVelocityY": "actor.terminalVelocity",
"actor.yDistToWater": "actor.depthInWater",
"actor.yDistToPlayer": "actor.playerHeightRel",
+ "actor.cutscene": "actor.csId",
+ "actor.speedXZ": "actor.speed",
+ "thisx->speedXZ": "thisx->speed",
"gSaveContext.unk_3F1E": "gSaveContext.hudVisibilityForceButtonAlphasByStatus",
"gSaveContext.unk_3F20": "gSaveContext.nextHudVisibility",
"gSaveContext.unk_3F22": "gSaveContext.hudVisibility",
"gSaveContext.unk_3F24": "gSaveContext.hudVisibilityTimer",
"gSaveContext.unk_3F26": "gSaveContext.prevHudVisibility",
- "gSaveContext.weekEventReg": "gSaveContext.save.weekEventReg",
+ "gSaveContext.weekEventReg": "gSaveContext.save.saveInfo.weekEventReg",
"gSaveContext.playerForm": "gSaveContext.save.playerForm",
"gSaveContext.day": "gSaveContext.save.day",
"gSaveContext.isNight": "gSaveContext.save.isNight",
"gSaveContext.environmentTime": "gSaveContext.skyboxTime",
- "gSaveContext.naviTimer": "gSaveContext.save.playerData.tatlTimer",
- "gSaveContext.tatlTimer": "gSaveContext.save.playerData.tatlTimer",
- "gSaveContext.rupees": "gSaveContext.save.playerData.rupees",
- "gSaveContext.magicAcquired": "gSaveContext.save.playerData.isMagicAcquired",
- "gSaveContext.doubleMagic": "gSaveContext.save.playerData.isDoubleMagicAcquired",
- "gSaveContext.doubleDefense": "gSaveContext.save.playerData.doubleDefense",
- "gSaveContext.playerName": "gSaveContext.save.playerData.playerName",
- "gSaveContext.inventory": "gSaveContext.save.inventory",
+ "gSaveContext.naviTimer": "gSaveContext.save.saveInfo.playerData.tatlTimer",
+ "gSaveContext.tatlTimer": "gSaveContext.save.saveInfo.playerData.tatlTimer",
+ "gSaveContext.rupees": "gSaveContext.save.saveInfo.playerData.rupees",
+ "gSaveContext.magicAcquired": "gSaveContext.save.saveInfo.playerData.isMagicAcquired",
+ "gSaveContext.doubleMagic": "gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired",
+ "gSaveContext.doubleDefense": "gSaveContext.save.saveInfo.playerData.doubleDefense",
+ "gSaveContext.playerName": "gSaveContext.save.saveInfo.playerData.playerName",
+ "gSaveContext.inventory": "gSaveContext.save.saveInfo.inventory",
"gSaveContext.equippedMask": "gSaveContext.save.equippedMask",
"gSaveContext.entranceIndex": "gSaveContext.save.entrance",
"gSaveContext.time": "gSaveContext.save.time",
- "gSaveContext.unk_14": "gSaveContext.save.daySpeed",
- "gSaveContext.unk_FE6": "gSaveContext.save.bombersCaughtNum",
- "gSaveContext.unk_FE7": "gSaveContext.save.bombersCaughtOrder",
+ "gSaveContext.save.daySpeed": "gSaveContext.save.timeSpeedOffset",
+ "gSaveContext.unk_14": "gSaveContext.save.timeSpeedOffset",
+ "gSaveContext.unk_FE6": "gSaveContext.save.saveInfo.bombersCaughtNum",
+ "gSaveContext.unk_FE7": "gSaveContext.save.saveInfo.bombersCaughtOrder",
"gSaveContext.linkAge": "gSaveContext.save.linkAge",
- "gSaveContext.dekuPlaygroundHighScores": "gSaveContext.save.dekuPlaygroundHighScores",
- "gSaveContext.lotteryCodeGuess": "gSaveContext.save.lotteryCodeGuess",
- "gSaveContext.permanentSceneFlags": "gSaveContext.save.permanentSceneFlags",
- "gSaveContext.bomberCode": "gSaveContext.save.bomberCode",
- "gSaveContext.skullTokenCount": "gSaveContext.save.skullTokenCount",
- "gSaveContext.cutscene": "gSaveContext.save.cutscene",
- "gSaveContext.health": "gSaveContext.save.playerData.health",
- "gSaveContext.equips": "gSaveContext.save.equips",
+ "gSaveContext.dekuPlaygroundHighScores": "gSaveContext.save.saveInfo.dekuPlaygroundHighScores",
+ "gSaveContext.lotteryCodeGuess": "gSaveContext.save.saveInfo.lotteryCodeGuess",
+ "gSaveContext.permanentSceneFlags": "gSaveContext.save.saveInfo.permanentSceneFlags",
+ "gSaveContext.bomberCode": "gSaveContext.save.saveInfo.bomberCode",
+ "gSaveContext.skullTokenCount": "gSaveContext.save.saveInfo.skullTokenCount",
+ "gSaveContext.cutscene": "gSaveContext.save.saveInfo.cutsceneIndex",
+ "gSaveContext.save.cutscene": "gSaveContext.save.saveInfo.cutsceneIndex",
+ "gSaveContext.save.saveInfo.cutscene": "gSaveContext.save.saveInfo.cutsceneIndex",
+ "gSaveContext.health": "gSaveContext.save.saveInfo.playerData.health",
+ "gSaveContext.equips": "gSaveContext.save.saveInfo.equips",
"gSaveContext.unk_1016": "gSaveContext.jinxTimer",
"gSaveContext.unk_3F58": "gSaveContext.sunsSongState",
+ "gSaveContext.equips.buttonItems": "gSaveContext.save.equips.buttonItems",
"gSaveContext.unk_48C8": "gSaveContext.dungeonIndex",
- "gSaveContext.save.playerData.magicAcquired": "gSaveContext.save.playerData.isMagicAcquired",
- "gSaveContext.save.playerDatadoubleMagic": "gSaveContext.save.playerData.isDoubleMagicAcquired",
+ "gSaveContext.save.saveInfo.playerData.magicAcquired": "gSaveContext.save.saveInfo.playerData.isMagicAcquired",
+ "gSaveContext.save.playerDatadoubleMagic": "gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired",
"gSaveContext.unk_3F28": "gSaveContext.magicState",
"gSaveContext.unk_3F30": "gSaveContext.magicFillTarget",
"gSaveContext.unk_3F2C": "gSaveContext.magicFlag",
@@ -708,6 +808,46 @@ wordReplace = {
"gSaveContext.sceneSetupIndex": "gSaveContext.sceneLayer",
"gSaveContext.seqIndex": "gSaveContext.seqId",
"gSaveContext.nightSeqIndex": "gSaveContext.ambienceId",
+ "gSaveContext.minigameState": "gSaveContext.minigameStatus",
+ "gSaveContext.unk_3F3C": "gSaveContext.minigameHiddenScore",
+ "gSaveContext.save.playerData": "gSaveContext.save.saveInfo.playerData",
+ "gSaveContext.save.equips": "gSaveContext.save.saveInfo.equips",
+ "gSaveContext.save.inventory": "gSaveContext.save.saveInfo.inventory",
+ "gSaveContext.save.permanentSceneFlags": "gSaveContext.save.saveInfo.permanentSceneFlags",
+
+ "gSaveContext.save.unk_E18": "gSaveContext.save.saveInfo.unk_E5C",
+ "gSaveContext.save.dekuPlaygroundHighScores": "gSaveContext.save.saveInfo.dekuPlaygroundHighScores",
+ "gSaveContext.save.pictoFlags0": "gSaveContext.save.saveInfo.pictoFlags0",
+ "gSaveContext.save.pictoFlags1": "gSaveContext.save.saveInfo.pictoFlags1",
+ "gSaveContext.save.unk_E84": "gSaveContext.save.saveInfo.unk_E60",
+ "gSaveContext.save.unk_E88": "gSaveContext.save.saveInfo.unk_E64",
+ "gSaveContext.save.scenesVisible": "gSaveContext.save.saveInfo.scenesVisible",
+ "gSaveContext.save.skullTokenCount": "gSaveContext.save.saveInfo.skullTokenCount",
+ "gSaveContext.save.unk_EC4": "gSaveContext.save.saveInfo.unk_EA0",
+ "gSaveContext.save.unk_EC8": "gSaveContext.save.saveInfo.unk_EA4",
+ "gSaveContext.save.unk_ECC": "gSaveContext.save.saveInfo.unk_EA8",
+ "gSaveContext.save.stolenItems": "gSaveContext.save.saveInfo.stolenItems",
+ "gSaveContext.save.unk_DD8": "gSaveContext.save.saveInfo.unk_EB4",
+ "gSaveContext.save.bankRupees": "gSaveContext.save.saveInfo.bankRupees",
+ "gSaveContext.save.unk_EE0": "gSaveContext.save.saveInfo.unk_EBC",
+ "gSaveContext.save.unk_EE4": "gSaveContext.save.saveInfo.unk_EC0",
+ "gSaveContext.save.unk_EE8": "gSaveContext.save.saveInfo.unk_EC4",
+ "gSaveContext.save.horseBackBalloonHighScore": "gSaveContext.save.saveInfo.horseBackBalloonHighScore",
+ "gSaveContext.save.lotteryCodeGuess": "gSaveContext.save.saveInfo.lotteryCodeGuess",
+ "gSaveContext.save.shootingGalleryHighScores": "gSaveContext.save.saveInfo.shootingGalleryHighScores",
+ "gSaveContext.save.weekEventReg": "gSaveContext.save.saveInfo.weekEventReg",
+ "gSaveContext.save.regionsVisited": "gSaveContext.save.saveInfo.regionsVisited",
+ "gSaveContext.save.worldMapCloudVisibility": "gSaveContext.save.saveInfo.worldMapCloudVisibility",
+ "gSaveContext.save.unk_F64": "gSaveContext.save.saveInfo.unk_F40",
+ "gSaveContext.save.unk_F65": "gSaveContext.save.saveInfo.unk_F41",
+ "gSaveContext.save.scarecrowSpawnSong": "gSaveContext.save.saveInfo.scarecrowSpawnSong",
+ "gSaveContext.save.bombersCaughtNum": "gSaveContext.save.saveInfo.bombersCaughtNum",
+ "gSaveContext.save.bombersCaughtOrder": "gSaveContext.save.saveInfo.bombersCaughtOrder",
+ "gSaveContext.save.lotteryCodes": "gSaveContext.save.saveInfo.lotteryCodes",
+ "gSaveContext.save.spiderHouseMaskOrder": "gSaveContext.save.saveInfo.spiderHouseMaskOrder",
+ "gSaveContext.save.bomberCode": "gSaveContext.save.saveInfo.bomberCode",
+ "gSaveContext.save.horseData": "gSaveContext.save.saveInfo.horseData",
+ "gSaveContext.save.checksum": "gSaveContext.save.saveInfo.checksum",
"player->unk_A87": "player->exchangeItemId",
"player->leftHandActor": "player->heldActor",
@@ -722,9 +862,37 @@ wordReplace = {
"player->swordAnimation": "player->meleeWeaponAnimation",
"player->swordState": "player->meleeWeaponState",
"player->swordInfo": "player->meleeWeaponInfo",
- "csCtx.npcActions": "csCtx.actorActions",
- "csCtx->npcActions": "csCtx->actorActions",
- "csCtx.unk_12": "csCtx.currentCsIndex",
+ "player->itemActionParam": "player->heldItemAction",
+ "player->heldItemActionParam": "player->itemAction",
+ "player->unk_A9C": "player->secretRumbleCharge",
+ "player->unk_AA0": "player->closestSecretDistSq",
+ "player->unk_AAC": "player->headLimbRot",
+ "player->unk_AB2": "player->upperLimbRot",
+ "player->unk_B2A": "player->getItemDrawIdPlusOne",
+ "player->getItemDrawId": "player->getItemDrawIdPlusOne",
+ "player->unk_B68": "player->fallStartHeight",
+ "player->unk_B6A": "player->fallDistance",
+ "player->targetActor": "player->talkActor",
+ "player->targetActorDistance": "player->talkActorDistance",
+ "player->unk_730": "player->targetedActor",
+
+ "ageProperties->unk_04": "ageProperties->shadowScale",
+ "ageProperties->unk_92": "ageProperties->voiceSfxOffset",
+ "ageProperties->unk_94": "ageProperties->surfaceSfxOffset",
+ "player->unk_A86": "player->csId",
+
+ "csCtx.npcActions": "csCtx.actorCues",
+ "csCtx->npcActions": "csCtx->actorCues",
+ "csCtx.actorActions": "csCtx.actorCues",
+ "csCtx->actorActions": "csCtx->actorCues",
+ "csCtx.playerAction": "csCtx.playerCue",
+ "csCtx->playerAction": "csCtx->playerCue",
+ "csCtx.unk_12": "csCtx.scriptIndex",
+ "csCtx.currentCsIndex": "csCtx.scriptIndex",
+ "csCtx->currentCsIndex": "csCtx->scriptIndex",
+ "csCtx.frames": "csCtx.curFrame",
+ "csCtx->frames": "csCtx->curFrame",
+
"globalCtx->mf_187FC": "play->billboardMtxF",
"globalCtx->projectionMatrix": "play->viewProjectionMtxF",
"globalCtx->actorCtx.actorList[": "play->actorCtx.actorLists[",
@@ -734,6 +902,13 @@ wordReplace = {
"globalCtx->envCtx.unk_C3": "play->envCtx.lightSettingOverride",
"globalCtx->envCtx.unk_DC": "play->envCtx.lightBlend",
"globalCtx->interfaceCtx.unk_21E": "play->interfaceCtx.bButtonDoAction",
+ "play->interfaceCtx.unk_31A": "play->interfaceCtx.storyState",
+ "play->interfaceCtx.unk_31B": "play->interfaceCtx.storyType",
+ "play->interfaceCtx.unk_25C": "play->interfaceCtx.minigamePoints",
+ "play->interfaceCtx.unk_25E": "play->interfaceCtx.minigameHiddenPoints",
+ "play->interfaceCtx.unk_280": "play->interfaceCtx.minigameState",
+ "play->interfaceCtx.unk_286": "play->interfaceCtx.perfectLettersOn",
+ "play->interfaceCtx.hbaAmmo": "play->interfaceCtx.minigameAmmo",
# "play->actorCtx.flags": "play->actorCtx.sceneFlags",
# "play->actorCtx.unk5": "play->actorCtx.flags",
@@ -748,6 +923,18 @@ wordReplace = {
"play->actorCtx.unk4": "play->actorCtx.lensMaskSize",
"play->nextEntranceIndex": "play->nextEntrance",
"play->sceneNum": "play->sceneId",
+ "play->pauseCtx.unk_1F0": "play->pauseCtx.bombersNotebookOpen",
+ "play->playerActorCsIds": "play->playerCsIds",
+ "play->envFlags": "play->cutsceneFlags",
+ "play->roomCtx.curRoom.unk3": "play->roomCtx.curRoom.behaviorType1",
+ "play->roomCtx.curRoom.unk2": "play->roomCtx.curRoom.behaviorType2",
+ "play->roomCtx.unk31": "play->roomCtx.status",
+
+ "actorCtx.unkC": "actorCtx.halfDaysBit",
+ "actorCtx.unk1F4": "actorCtx.unk_1F4.unk_00",
+ "actorCtx.unk1F5": "actorCtx.unk_1F4.timer",
+ "actorCtx.unk1F8": "actorCtx.unk_1F4.unk_04",
+ "actorCtx.unk1FC": "actorCtx.unk_1F4.unk_08",
"gSaveContext.unk_3DC8": "gSaveContext.timerOsTime",
"gSaveContext.unk_3DD0": "gSaveContext.timerStates",
@@ -766,13 +953,10 @@ wordReplace = {
"gSaveContext.fadeDuration": "gSaveContext.transFadeDuration",
"gSaveContext.fadeSpeed": "gSaveContext.transWipeSpeed",
- "D_801D15B0" : "gZeroVec3f",
- "D_801D15BC" : "gZeroVec3s",
- "D_801D1DE0" : "gIdentityMtx",
- "D_801D1E20" : "gIdentityMtxF",
- "D_04020658" : "gameplay_keep_Anim_020658",
- "D_04022B28" : "gDoorSkel",
- "D_04023100" : "gDoorCol",
+ "D_801D15B0": "gZeroVec3f",
+ "D_801D15BC": "gZeroVec3s",
+ "D_801D1DE0": "gIdentityMtx",
+ "D_801D1E20": "gIdentityMtxF",
# Macros
"CUR_EQUIP_VALUE_VOID": "GET_CUR_EQUIP_VALUE",
@@ -780,21 +964,70 @@ wordReplace = {
"ICHAIN_F32_DIV1000(minVelocityY,": "ICHAIN_F32_DIV1000(terminalVelocity,",
"ICHAIN_F32(minVelocityY,": "ICHAIN_F32(terminalVelocity,",
- "EXCH_ITEM_MINUS1": "PLAYER_AP_MINUS1",
- "EXCH_ITEM_NONE": "PLAYER_AP_NONE",
- "EXCH_ITEM_PICTO_BOX": "PLAYER_AP_PICTO_BOX",
- "EXCH_ITEM_1E": "PLAYER_AP_BOTTLE_MUSHROOM",
- "EXCH_ITEM_MOON_TEAR": "PLAYER_AP_MOON_TEAR",
- "EXCH_ITEM_DEED_LAND": "PLAYER_AP_DEED_LAND",
- "EXCH_ITEM_ROOM_KEY": "PLAYER_AP_ROOM_KEY",
- "EXCH_ITEM_LETTER_TO_KAFEI": "PLAYER_AP_LETTER_TO_KAFEI",
- "EXCH_ITEM_2E": "PLAYER_AP_MAGIC_BEANS",
- "EXCH_ITEM_DEED_SWAMP": "PLAYER_AP_DEED_SWAMP",
- "EXCH_ITEM_DEED_MOUNTAIN": "PLAYER_AP_DEED_MOUNTAIN",
- "EXCH_ITEM_DEED_OCEAN": "PLAYER_AP_DEED_OCEAN",
- "EXCH_ITEM_LETTER_MAMA": "PLAYER_AP_LETTER_MAMA",
+ "RADF_TO_BINANG": "RAD_TO_BINANG",
+ "RADF_TO_DEGF": "RAD_TO_DEG",
+ "DEGF_TO_RADF": "DEG_TO_RAD",
+
+ "ACTORCTX_FLAG_2": "ACTORCTX_FLAG_PICTO_BOX_ON",
+
+ "ACTOR_FLAG_100": "ACTOR_FLAG_TALK_REQUESTED",
+ "ACTOR_FLAG_8000000": "ACTOR_FLAG_CANT_LOCK_ON",
+
+ "EXCH_ITEM_MINUS1": "PLAYER_IA_MINUS1",
+ "EXCH_ITEM_NONE": "PLAYER_IA_NONE",
+ "EXCH_ITEM_PICTO_BOX": "PLAYER_IA_PICTO_BOX",
+ "EXCH_ITEM_1E": "PLAYER_IA_BOTTLE_MUSHROOM",
+ "EXCH_ITEM_MOON_TEAR": "PLAYER_IA_MOON_TEAR",
+ "EXCH_ITEM_DEED_LAND": "PLAYER_IA_DEED_LAND",
+ "EXCH_ITEM_ROOM_KEY": "PLAYER_IA_ROOM_KEY",
+ "EXCH_ITEM_LETTER_TO_KAFEI": "PLAYER_IA_LETTER_TO_KAFEI",
+ "EXCH_ITEM_2E": "PLAYER_IA_MAGIC_BEANS",
+ "EXCH_ITEM_DEED_SWAMP": "PLAYER_IA_DEED_SWAMP",
+ "EXCH_ITEM_DEED_MOUNTAIN": "PLAYER_IA_DEED_MOUNTAIN",
+ "EXCH_ITEM_DEED_OCEAN": "PLAYER_IA_DEED_OCEAN",
+ "EXCH_ITEM_LETTER_MAMA": "PLAYER_IA_LETTER_MAMA",
"ITEM_FISHING_POLE": "ITEM_FISHING_ROD",
- "PLAYER_AP_FISHING_POLE": "PLAYER_AP_FISHING_ROD",
+ "PLAYER_AP_FISHING_POLE": "PLAYER_IA_FISHING_ROD",
+ "PLAYER_IA_BOTTLE": "PLAYER_IA_BOTTLE_EMPTY",
+
+ "WEEKEVENTREG_20_02": "WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE",
+ "WEEKEVENTREG_33_80": "WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE",
+ "WEEKEVENTREG_52_20": "WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE",
+ "WEEKEVENTREG_55_80": "WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE",
+
+ # Enums
+ "TRANS_TYPE_00": "TRANS_TYPE_WIPE",
+ "TRANS_TYPE_01": "TRANS_TYPE_TRIFORCE",
+ "TRANS_TYPE_02": "TRANS_TYPE_FADE_BLACK",
+ "TRANS_TYPE_03": "TRANS_TYPE_FADE_WHITE",
+ "TRANS_TYPE_04": "TRANS_TYPE_FADE_BLACK_FAST",
+ "TRANS_TYPE_05": "TRANS_TYPE_FADE_WHITE_FAST",
+ "TRANS_TYPE_06": "TRANS_TYPE_FADE_BLACK_SLOW",
+ "TRANS_TYPE_07": "TRANS_TYPE_FADE_WHITE_SLOW",
+ "TRANS_TYPE_08": "TRANS_TYPE_WIPE_FAST",
+ "TRANS_TYPE_09": "TRANS_TYPE_FILL_WHITE_FAST",
+ "TRANS_TYPE_10": "TRANS_TYPE_FILL_WHITE",
+ "TRANS_TYPE_11": "TRANS_TYPE_INSTANT",
+ "TRANS_TYPE_12": "TRANS_TYPE_FILL_BROWN",
+ "TRANS_TYPE_13": "TRANS_TYPE_FADE_WHITE_CS_DELAYED",
+ "TRANS_TYPE_14": "TRANS_TYPE_SANDSTORM_PERSIST",
+ "TRANS_TYPE_15": "TRANS_TYPE_SANDSTORM_END",
+ "TRANS_TYPE_16": "TRANS_TYPE_CS_BLACK_FILL",
+ "TRANS_TYPE_17": "TRANS_TYPE_FADE_WHITE_INSTANT",
+ "TRANS_TYPE_18": "TRANS_TYPE_FADE_GREEN",
+ "TRANS_TYPE_19": "TRANS_TYPE_FADE_BLUE",
+ "TRANS_TYPE_20": "TRANS_TYPE_FADE_DYNAMIC",
+ "TRANS_TYPE_21": "TRANS_TYPE_CIRCLE",
+ "TRANS_TYPE_22": "TRANS_TYPE_WIPE5",
+ "PLAYER_CSMODE_6": "PLAYER_CSMODE_END",
+ "PLAYER_CSMODE_7": "PLAYER_CSMODE_WAIT",
+ "SUBS_CUTSCENE_SET_UNK_LINK_FIELDS": "SUBS_CUTSCENE_WITH_PLAYER",
+ "SUBS_CUTSCENE_SET_FLAG": "SUBS_CUTSCENE_WITH_PLAYER_SET_FLAG",
+
+ "COLPOLY_SURFACE_GROUND": "SURFACE_MATERIAL_DIRT",
+ "COLPOLY_SURFACE_SAND": "SURFACE_MATERIAL_SAND",
+ "COLPOLY_SURFACE_SNOW": "SURFACE_MATERIAL_SNOW",
+ "CS_STATE_0": "CS_STATE_IDLE",
# Example of custom behaviour:
# "PLAYER": ("GET_PLAYER(play)", {"ignore": (-1, '"PLAYER"')}), # ignore "PLAYER" in sSoundBankNames
diff --git a/tools/overlayhelpers/scheduledis.py b/tools/overlayhelpers/scheduledis.py
index b441b94c7..5eb70d518 100755
--- a/tools/overlayhelpers/scheduledis.py
+++ b/tools/overlayhelpers/scheduledis.py
@@ -7,8 +7,8 @@ import argparse, os, struct, math
from actor_symbols import resolve_symbol
cmd_info = [
- ('SCHEDULE_CMD_CHECK_FLAG_S', 0x04, '>BBb', (2, )),
- ('SCHEDULE_CMD_CHECK_FLAG_L', 0x05, '>BBh', (2, )),
+ ('SCHEDULE_CMD_CHECK_FLAG_S', 0x04, '>Hb', (1, )),
+ ('SCHEDULE_CMD_CHECK_FLAG_L', 0x05, '>Hh', (1, )),
('SCHEDULE_CMD_CHECK_TIME_RANGE_S', 0x06, '>BBBBb', (4, )),
('SCHEDULE_CMD_CHECK_TIME_RANGE_L', 0x07, '>BBBBh', (4, )),
('SCHEDULE_CMD_RET_VAL_L', 0x03, '>H', ( )),
@@ -198,6 +198,8 @@ def disassemble_unk_script(data_file, offset):
elif arg_type == "H":
if (cmd == 0x0A or cmd == 0x0B) and (arg_value < len(scene_names)):
arg_formatted = scene_names[arg_value]
+ elif cmd == 0x00 or cmd == 0x01:
+ arg_formatted = f"WEEKEVENTREG_{arg_value>>8:02}_{arg_value&0xFF:02X}"
else:
arg_formatted = f"{arg_value}"
elif arg_type == "B":
diff --git a/tools/permuter_settings.toml b/tools/permuter_settings.toml
index 380acbfc2..5f42d30d6 100644
--- a/tools/permuter_settings.toml
+++ b/tools/permuter_settings.toml
@@ -20,6 +20,18 @@ CLOCK_TIME = "int"
CURRENT_DAY = "int"
CHECK_NEWF = "int"
NULL = "int"
+"SCREEN_.*" = "int"
+GET_PLAYER = "int"
+CHECK_WEEKEVENTREG = "int"
+SET_WEEKEVENTREG = "int"
+CLEAR_WEEKEVENTREG = "int"
+"WEEKEVENTREG_.+" = "int"
+CHECK_EVENTINF = "int"
+SET_EVENTINF = "int"
+CLEAR_EVENTINF = "int"
+CLEAR_EVENTINF_ALT = "int"
+"EVENTINF_.*" = "int"
+".+REG" = "int"
[decompme.compilers]
"tools/ido_recomp/linux/7.1/cc" = "ido7.1"
diff --git a/tools/progress.py b/tools/progress.py
index dccd743d7..5a2958cd8 100755
--- a/tools/progress.py
+++ b/tools/progress.py
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
-import argparse, csv, git, json, os, re, sys
+import argparse, csv, os, re, sys
parser = argparse.ArgumentParser()
@@ -170,6 +170,7 @@ srcCategories = [
"libultra",
"code",
"overlays",
+ "audio",
]
srcCategoriesFixer = {
@@ -256,6 +257,12 @@ asmTracker["boot"]["totalSize"] += asmTracker["libultra"]["totalSize"]
del srcTracker["libultra"]
del asmTracker["libultra"]
+# Add audio to code.
+srcTracker["code"]["totalSize"] += srcTracker["audio"]["totalSize"]
+asmTracker["code"]["totalSize"] += asmTracker["audio"]["totalSize"]
+del srcTracker["audio"]
+del asmTracker["audio"]
+
# Calculate Non-Matching
non_matching_functions_ovl = list(map(lambda x: x.split("/")[-1].split(".")[0], filter(lambda x: "/overlays/" in x, non_matching_functions)))
non_matching_functions_code = list(map(lambda x: x.split("/")[-1].split(".")[0], filter(lambda x: "/code/" in x, non_matching_functions)))
@@ -337,6 +344,8 @@ masks = int(src / bytes_per_mask)
rupees = int((src % bytes_per_mask) / bytes_per_rupee)
if args.format == 'csv':
+ import git
+
version = 2
git_object = git.Repo().head.object
timestamp = str(git_object.committed_date)
@@ -358,6 +367,8 @@ if args.format == 'csv':
print(",".join(map(str, csv_list)))
elif args.format == 'shield-json':
+ import json
+
# https://shields.io/endpoint
print(json.dumps({
"schemaVersion": 1,
diff --git a/tools/regconvert.py b/tools/regconvert.py
index f4b9b0db1..892e3f885 100755
--- a/tools/regconvert.py
+++ b/tools/regconvert.py
@@ -28,7 +28,7 @@ def read_file(filename):
file_contents = src_file.read()
src_file.close()
- pattern = re.compile("gGameInfo->data\[((0[xX])?[0-9a-fA-F]+)\]")
+ pattern = re.compile("gRegEditor->data\[((0[xX])?[0-9a-fA-F]+)\]")
match = pattern.search(file_contents)
while match:
@@ -56,19 +56,19 @@ def check_valid_offset(offset):
return 0x14 <= offset <= 0x15D2
def main():
- parser = argparse.ArgumentParser(description="Converts a gGameInfo->data index to a REG macro.")
+ parser = argparse.ArgumentParser(description="Converts a gRegEditor->data index to a REG macro.")
# TODO: Add a description and a better title
# index_group = parser.add_argument_group(title="index", description="")
index_group = parser.add_argument_group()
- index_group.add_argument("index", help="index of gGameInfo->data in decimal (or hexadecimal if starts with 0x)")
- index_group.add_argument("--offset", help="treat index argument as an offset to gGameInfo instead", action="store_true")
+ index_group.add_argument("index", help="index of gRegEditor->data in decimal (or hexadecimal if starts with 0x)")
+ index_group.add_argument("--offset", help="treat index argument as an offset to gRegEditor instead", action="store_true")
index_group.add_argument("--hex", help="treat index argument as hexadecimal, even without the 0x", action="store_true")
# TODO: Add a description and a better title
# file_group = parser.add_argument_group(title="file", description="")
file_group = parser.add_argument_group()
- file_group.add_argument("--file", help="use the parameter as a filepath, then replace every occurrence of `gGameInfo->data[number]` in that file a REG macro", action="store_true")
+ file_group.add_argument("--file", help="use the parameter as a filepath, then replace every occurrence of `gRegEditor->data[number]` in that file a REG macro", action="store_true")
file_group.add_argument("--stdout", help="print the processed file to stdout instead of overwriting the original", action="store_true")
args = parser.parse_args()
diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv
index d18b02616..a643f147f 100644
--- a/tools/sizes/code_functions.csv
+++ b/tools/sizes/code_functions.csv
@@ -1,7 +1,7 @@
asm/non_matchings/code/z_en_a_keep/EnAObj_Init.s,EnAObj_Init,0x800A5AC0,0x2B
asm/non_matchings/code/z_en_a_keep/EnAObj_Destroy.s,EnAObj_Destroy,0x800A5B6C,0xB
-asm/non_matchings/code/z_en_a_keep/EnAObj_Update1.s,EnAObj_Update1,0x800A5B98,0x24
-asm/non_matchings/code/z_en_a_keep/EnAObj_Update2.s,EnAObj_Update2,0x800A5C28,0xE
+asm/non_matchings/code/z_en_a_keep/EnAObj_Idle.s,EnAObj_Idle,0x800A5B98,0x24
+asm/non_matchings/code/z_en_a_keep/EnAObj_Talk.s,EnAObj_Talk,0x800A5C28,0xE
asm/non_matchings/code/z_en_a_keep/EnAObj_Update.s,EnAObj_Update,0x800A5C60,0x16
asm/non_matchings/code/z_en_a_keep/EnAObj_Draw.s,EnAObj_Draw,0x800A5CB8,0x12
asm/non_matchings/code/z_en_item00/EnItem00_SetObject.s,EnItem00_SetObject,0x800A5D00,0x1C
@@ -217,7 +217,7 @@ asm/non_matchings/code/z_actor/func_800B64FC.s,func_800B64FC,0x800B64FC,0x22
asm/non_matchings/code/z_actor/func_800B6584.s,func_800B6584,0x800B6584,0x21
asm/non_matchings/code/z_actor/func_800B6608.s,func_800B6608,0x800B6608,0x1E
asm/non_matchings/code/z_actor/func_800B6680.s,func_800B6680,0x800B6680,0x23
-asm/non_matchings/code/z_actor/Actor_MarkForDeath.s,Actor_MarkForDeath,0x800B670C,0x8
+asm/non_matchings/code/z_actor/Actor_Kill.s,Actor_Kill,0x800B670C,0x8
asm/non_matchings/code/z_actor/Actor_SetWorldToHome.s,Actor_SetWorldToHome,0x800B672C,0xC
asm/non_matchings/code/z_actor/Actor_SetFocus.s,Actor_SetFocus,0x800B675C,0x11
asm/non_matchings/code/z_actor/Actor_SetWorldRotToShape.s,Actor_SetWorldRotToShape,0x800B67A0,0x8
@@ -236,16 +236,16 @@ asm/non_matchings/code/z_actor/Actor_UpdateVelocityWithoutGravityReverse.s,Actor
asm/non_matchings/code/z_actor/Actor_MoveWithoutGravityReverse.s,Actor_MoveWithoutGravityReverse,0x800B6BD8,0xB
asm/non_matchings/code/z_actor/Actor_SetSpeeds.s,Actor_SetSpeeds,0x800B6C04,0x15
asm/non_matchings/code/z_actor/Actor_UpdatePosFromSkelAnime.s,Actor_UpdatePosFromSkelAnime,0x800B6C58,0x1F
-asm/non_matchings/code/z_actor/Actor_YawBetweenActors.s,Actor_YawBetweenActors,0x800B6CD4,0xB
-asm/non_matchings/code/z_actor/Actor_YawBetweenActorsTop.s,Actor_YawBetweenActorsTop,0x800B6D00,0xB
-asm/non_matchings/code/z_actor/Actor_YawToPoint.s,Actor_YawToPoint,0x800B6D2C,0x9
-asm/non_matchings/code/z_actor/Actor_PitchBetweenActors.s,Actor_PitchBetweenActors,0x800B6D50,0xB
-asm/non_matchings/code/z_actor/Actor_PitchBetweenActorsTop.s,Actor_PitchBetweenActorsTop,0x800B6D7C,0xB
-asm/non_matchings/code/z_actor/Actor_PitchToPoint.s,Actor_PitchToPoint,0x800B6DA8,0x9
-asm/non_matchings/code/z_actor/Actor_DistanceBetweenActors.s,Actor_DistanceBetweenActors,0x800B6DCC,0xB
-asm/non_matchings/code/z_actor/Actor_DistanceToPoint.s,Actor_DistanceToPoint,0x800B6DF8,0x9
-asm/non_matchings/code/z_actor/Actor_XZDistanceBetweenActors.s,Actor_XZDistanceBetweenActors,0x800B6E1C,0xB
-asm/non_matchings/code/z_actor/Actor_XZDistanceToPoint.s,Actor_XZDistanceToPoint,0x800B6E48,0x9
+asm/non_matchings/code/z_actor/Actor_WorldYawTowardActor.s,Actor_WorldYawTowardActor,0x800B6CD4,0xB
+asm/non_matchings/code/z_actor/Actor_FocusYawTowardActor.s,Actor_FocusYawTowardActor,0x800B6D00,0xB
+asm/non_matchings/code/z_actor/Actor_WorldYawTowardPoint.s,Actor_WorldYawTowardPoint,0x800B6D2C,0x9
+asm/non_matchings/code/z_actor/Actor_WorldPitchTowardActor.s,Actor_WorldPitchTowardActor,0x800B6D50,0xB
+asm/non_matchings/code/z_actor/Actor_FocusPitchTowardActor.s,Actor_FocusPitchTowardActor,0x800B6D7C,0xB
+asm/non_matchings/code/z_actor/Actor_WorldPitchTowardPoint.s,Actor_WorldPitchTowardPoint,0x800B6DA8,0x9
+asm/non_matchings/code/z_actor/Actor_WorldDistXYZToActor.s,Actor_WorldDistXYZToActor,0x800B6DCC,0xB
+asm/non_matchings/code/z_actor/Actor_WorldDistXYZToPoint.s,Actor_WorldDistXYZToPoint,0x800B6DF8,0x9
+asm/non_matchings/code/z_actor/Actor_WorldDistXZToActor.s,Actor_WorldDistXZToActor,0x800B6E1C,0xB
+asm/non_matchings/code/z_actor/Actor_WorldDistXZToPoint.s,Actor_WorldDistXZToPoint,0x800B6E48,0x9
asm/non_matchings/code/z_actor/Actor_OffsetOfPointInActorCoords.s,Actor_OffsetOfPointInActorCoords,0x800B6E6C,0x28
asm/non_matchings/code/z_actor/Actor_HeightDiff.s,Actor_HeightDiff,0x800B6F0C,0x5
asm/non_matchings/code/z_actor/func_800B6F20.s,func_800B6F20,0x800B6F20,0x2A
@@ -268,7 +268,7 @@ asm/non_matchings/code/z_actor/Actor_IsFacingPlayer.s,Actor_IsFacingPlayer,0x800
asm/non_matchings/code/z_actor/Actor_ActorAIsFacingActorB.s,Actor_ActorAIsFacingActorB,0x800B742C,0x18
asm/non_matchings/code/z_actor/Actor_IsFacingAndNearPlayer.s,Actor_IsFacingAndNearPlayer,0x800B748C,0x20
asm/non_matchings/code/z_actor/Actor_ActorAIsFacingAndNearActorB.s,Actor_ActorAIsFacingAndNearActorB,0x800B750C,0x25
-asm/non_matchings/code/z_actor/func_800B75A0.s,func_800B75A0,0x800B75A0,0x1F
+asm/non_matchings/code/z_actor/Actor_GetSlopeDirection.s,Actor_GetSlopeDirection,0x800B75A0,0x1F
asm/non_matchings/code/z_actor/func_800B761C.s,func_800B761C,0x800B761C,0x17
asm/non_matchings/code/z_actor/func_800B7678.s,func_800B7678,0x800B7678,0x90
asm/non_matchings/code/z_actor/Actor_UpdateBgCheckInfo.s,Actor_UpdateBgCheckInfo,0x800B78B8,0x153
@@ -299,13 +299,13 @@ asm/non_matchings/code/z_actor/func_800B886C.s,func_800B886C,0x800B886C,0xB
asm/non_matchings/code/z_actor/Actor_GetScreenPos.s,Actor_GetScreenPos,0x800B8898,0x27
asm/non_matchings/code/z_actor/Actor_OnScreen.s,Actor_OnScreen,0x800B8934,0x31
asm/non_matchings/code/z_actor/Actor_HasParent.s,Actor_HasParent,0x800B89F8,0x9
-asm/non_matchings/code/z_actor/Actor_PickUp.s,Actor_PickUp,0x800B8A1C,0x5A
-asm/non_matchings/code/z_actor/Actor_PickUpNearby.s,Actor_PickUpNearby,0x800B8B84,0xB
-asm/non_matchings/code/z_actor/Actor_LiftActor.s,Actor_LiftActor,0x800B8BB0,0x8
-asm/non_matchings/code/z_actor/Actor_PickUpFar.s,Actor_PickUpFar,0x800B8BD0,0xB
+asm/non_matchings/code/z_actor/Actor_OfferGetItem.s,Actor_OfferGetItem,0x800B8A1C,0x5A
+asm/non_matchings/code/z_actor/Actor_OfferGetItemNearby.s,Actor_OfferGetItemNearby,0x800B8B84,0xB
+asm/non_matchings/code/z_actor/Actor_OfferCarry.s,Actor_OfferCarry,0x800B8BB0,0x8
+asm/non_matchings/code/z_actor/Actor_OfferGetItemFar.s,Actor_OfferGetItemFar,0x800B8BD0,0xB
asm/non_matchings/code/z_actor/Actor_HasNoParent.s,Actor_HasNoParent,0x800B8BFC,0x9
asm/non_matchings/code/z_actor/func_800B8C20.s,func_800B8C20,0x800B8C20,0xC
-asm/non_matchings/code/z_actor/func_800B8C50.s,func_800B8C50,0x800B8C50,0xA
+asm/non_matchings/code/z_actor/Actor_SetClosestSecretDistance.s,Actor_SetClosestSecretDistance,0x800B8C50,0xA
asm/non_matchings/code/z_actor/Actor_HasRider.s,Actor_HasRider,0x800B8C78,0x9
asm/non_matchings/code/z_actor/Actor_SetRideActor.s,Actor_SetRideActor,0x800B8C9C,0x14
asm/non_matchings/code/z_actor/Actor_HasNoRider.s,Actor_HasNoRider,0x800B8CEC,0x9
@@ -314,8 +314,8 @@ asm/non_matchings/code/z_actor/func_800B8D50.s,func_800B8D50,0x800B8D50,0x12
asm/non_matchings/code/z_actor/func_800B8D98.s,func_800B8D98,0x800B8D98,0xF
asm/non_matchings/code/z_actor/func_800B8DD4.s,func_800B8DD4,0x800B8DD4,0x12
asm/non_matchings/code/z_actor/func_800B8E1C.s,func_800B8E1C,0x800B8E1C,0xF
-asm/non_matchings/code/z_actor/func_800B8E58.s,func_800B8E58,0x800B8E58,0x1C
-asm/non_matchings/code/z_actor/Actor_PlaySfxAtPos.s,Actor_PlaySfxAtPos,0x800B8EC8,0xB
+asm/non_matchings/code/z_actor/Player_PlaySfx.s,Player_PlaySfx,0x800B8E58,0x1C
+asm/non_matchings/code/z_actor/Actor_PlaySfx.s,Actor_PlaySfx,0x800B8EC8,0xB
asm/non_matchings/code/z_actor/func_800B8EF4.s,func_800B8EF4,0x800B8EF4,0x29
asm/non_matchings/code/z_actor/func_800B8F98.s,func_800B8F98,0x800B8F98,0xA
asm/non_matchings/code/z_actor/func_800B8FC0.s,func_800B8FC0,0x800B8FC0,0xA
@@ -326,23 +326,23 @@ asm/non_matchings/code/z_actor/func_800B9084.s,func_800B9084,0x800B9084,0x5
asm/non_matchings/code/z_actor/func_800B9098.s,func_800B9098,0x800B9098,0x5
asm/non_matchings/code/z_actor/func_800B90AC.s,func_800B90AC,0x800B90AC,0x12
asm/non_matchings/code/z_actor/Actor_DeactivateLens.s,Actor_DeactivateLens,0x800B90F4,0xB
-asm/non_matchings/code/z_actor/func_800B9120.s,func_800B9120,0x800B9120,0x14
+asm/non_matchings/code/z_actor/Actor_InitHalfDaysBit.s,Actor_InitHalfDaysBit,0x800B9120,0x14
asm/non_matchings/code/z_actor/Actor_InitContext.s,Actor_InitContext,0x800B9170,0x71
asm/non_matchings/code/z_actor/Actor_SpawnSetupActors.s,Actor_SpawnSetupActors,0x800B9334,0x56
asm/non_matchings/code/z_actor/Actor_UpdateActor.s,Actor_UpdateActor,0x800B948C,0xBD
asm/non_matchings/code/z_actor/Actor_UpdateAll.s,Actor_UpdateAll,0x800B9780,0xA1
asm/non_matchings/code/z_actor/Actor_Draw.s,Actor_Draw,0x800B9A04,0xC6
asm/non_matchings/code/z_actor/func_800B9D1C.s,func_800B9D1C,0x800B9D1C,0x48
-asm/non_matchings/code/z_actor/Actor_DrawAllSetup.s,Actor_DrawAllSetup,0x800B9E3C,0x4
-asm/non_matchings/code/z_actor/Actor_RecordUndrawnActor.s,Actor_RecordUndrawnActor,0x800B9E4C,0xE
+asm/non_matchings/code/z_actor/Actor_ResetLensActors.s,Actor_ResetLensActors,0x800B9E3C,0x4
+asm/non_matchings/code/z_actor/Actor_AddToLensActors.s,Actor_AddToLensActors,0x800B9E4C,0xE
asm/non_matchings/code/z_actor/Actor_DrawLensOverlay.s,Actor_DrawLensOverlay,0x800B9E84,0x1C
asm/non_matchings/code/z_actor/Actor_DrawLensActors.s,Actor_DrawLensActors,0x800B9EF4,0xF9
asm/non_matchings/code/z_actor/func_800BA2D8.s,func_800BA2D8,0x800BA2D8,0x9
asm/non_matchings/code/z_actor/func_800BA2FC.s,func_800BA2FC,0x800BA2FC,0x4C
asm/non_matchings/code/z_actor/Actor_DrawAll.s,Actor_DrawAll,0x800BA42C,0xB4
-asm/non_matchings/code/z_actor/func_800BA6FC.s,func_800BA6FC,0x800BA6FC,0x27
+asm/non_matchings/code/z_actor/Actor_KillAllWithMissingObject.s,Actor_KillAllWithMissingObject,0x800BA6FC,0x27
asm/non_matchings/code/z_actor/func_800BA798.s,func_800BA798,0x800BA798,0x48
-asm/non_matchings/code/z_actor/func_800BA8B8.s,func_800BA8B8,0x800BA8B8,0x3F
+asm/non_matchings/code/z_actor/Actor_KillAllOnHalfDayChange.s,Actor_KillAllOnHalfDayChange,0x800BA8B8,0x3F
asm/non_matchings/code/z_actor/Actor_CleanupContext.s,Actor_CleanupContext,0x800BA9B4,0x40
asm/non_matchings/code/z_actor/Actor_AddToCategory.s,Actor_AddToCategory,0x800BAAB4,0x1C
asm/non_matchings/code/z_actor/Actor_RemoveFromCategory.s,Actor_RemoveFromCategory,0x800BAB24,0x36
@@ -365,7 +365,7 @@ asm/non_matchings/code/z_actor/Actor_SpawnBodyParts.s,Actor_SpawnBodyParts,0x800
asm/non_matchings/code/z_actor/Actor_SpawnFloorDustRing.s,Actor_SpawnFloorDustRing,0x800BBDAC,0x81
asm/non_matchings/code/z_actor/func_800BBFB0.s,func_800BBFB0,0x800BBFB0,0x69
asm/non_matchings/code/z_actor/func_800BC154.s,func_800BC154,0x800BC154,0xD
-asm/non_matchings/code/z_actor/func_800BC188.s,func_800BC188,0x800BC188,0xB
+asm/non_matchings/code/z_actor/Actor_GetArrowDmgFlags.s,Actor_GetArrowDmgFlags,0x800BC188,0xB
asm/non_matchings/code/z_actor/func_800BC1B4.s,func_800BC1B4,0x800BC1B4,0x2F
asm/non_matchings/code/z_actor/func_800BC270.s,func_800BC270,0x800BC270,0x75
asm/non_matchings/code/z_actor/func_800BC444.s,func_800BC444,0x800BC444,0x2A
@@ -382,11 +382,11 @@ asm/non_matchings/code/z_actor/Actor_SetColorFilter.s,Actor_SetColorFilter,0x800
asm/non_matchings/code/z_actor/func_800BCBF4.s,func_800BCBF4,0x800BCBF4,0x1D
asm/non_matchings/code/z_actor/func_800BCC68.s,func_800BCC68,0x800BCC68,0x1D
asm/non_matchings/code/z_actor/Actor_GetClosestPosOnPath.s,Actor_GetClosestPosOnPath,0x800BCCDC,0x176
-asm/non_matchings/code/z_actor/func_800BD2B4.s,func_800BD2B4,0x800BD2B4,0x34
-asm/non_matchings/code/z_actor/func_800BD384.s,func_800BD384,0x800BD384,0xCD
-asm/non_matchings/code/z_actor/func_800BD6B8.s,func_800BD6B8,0x800BD6B8,0xB
-asm/non_matchings/code/z_actor/func_800BD6E4.s,func_800BD6E4,0x800BD6E4,0x69
-asm/non_matchings/code/z_actor/func_800BD888.s,func_800BD888,0x800BD888,0x46
+asm/non_matchings/code/z_actor/Npc_UpdateTalking.s,Npc_UpdateTalking,0x800BD2B4,0x34
+asm/non_matchings/code/z_actor/Npc_TrackPointWithLimits.s,Npc_TrackPointWithLimits,0x800BD384,0xCD
+asm/non_matchings/code/z_actor/Npc_GetTrackingPresetMaxPlayerYaw.s,Npc_GetTrackingPresetMaxPlayerYaw,0x800BD6B8,0xB
+asm/non_matchings/code/z_actor/Npc_UpdateAutoTurn.s,Npc_UpdateAutoTurn,0x800BD6E4,0x69
+asm/non_matchings/code/z_actor/Npc_TrackPoint.s,Npc_TrackPoint,0x800BD888,0x46
asm/non_matchings/code/z_actor/func_800BD9A0.s,func_800BD9A0,0x800BD9A0,0x10
asm/non_matchings/code/z_actor/func_800BD9E0.s,func_800BD9E0,0x800BD9E0,0x30
asm/non_matchings/code/z_actor/func_800BDAA0.s,func_800BDAA0,0x800BDAA0,0x33
@@ -409,7 +409,7 @@ asm/non_matchings/code/z_actor/func_800BE5CC.s,func_800BE5CC,0x800BE5CC,0x1C
asm/non_matchings/code/z_actor/func_800BE63C.s,func_800BE63C,0x800BE63C,0x11
asm/non_matchings/code/z_actor/Actor_DrawDamageEffects.s,Actor_DrawDamageEffects,0x800BE680,0x453
asm/non_matchings/code/z_actor/Actor_SpawnIceEffects.s,Actor_SpawnIceEffects,0x800BF7CC,0x75
-asm/non_matchings/code/z_actor_dlftbls/ActorOverlayTable_FaultPrint.s,ActorOverlayTable_FaultPrint,0x800BF9A0,0x36
+asm/non_matchings/code/z_actor_dlftbls/ActorOverlayTable_FaultClient.s,ActorOverlayTable_FaultClient,0x800BF9A0,0x36
asm/non_matchings/code/z_actor_dlftbls/ActorOverlayTable_FaultAddrConv.s,ActorOverlayTable_FaultAddrConv,0x800BFA78,0x1C
asm/non_matchings/code/z_actor_dlftbls/ActorOverlayTable_Init.s,ActorOverlayTable_Init,0x800BFAE8,0x16
asm/non_matchings/code/z_actor_dlftbls/ActorOverlayTable_Cleanup.s,ActorOverlayTable_Cleanup,0x800BFB40,0x10
@@ -530,18 +530,18 @@ asm/non_matchings/code/z_bgcheck/DynaPoly_Init.s,DynaPoly_Init,0x800C6044,0x15
asm/non_matchings/code/z_bgcheck/DynaPoly_Alloc.s,DynaPoly_Alloc,0x800C6098,0x3C
asm/non_matchings/code/z_bgcheck/DynaPoly_SetBgActor.s,DynaPoly_SetBgActor,0x800C6188,0x30
asm/non_matchings/code/z_bgcheck/DynaPoly_GetActor.s,DynaPoly_GetActor,0x800C6248,0x1D
-asm/non_matchings/code/z_bgcheck/func_800C62BC.s,func_800C62BC,0x800C62BC,0x16
-asm/non_matchings/code/z_bgcheck/func_800C6314.s,func_800C6314,0x800C6314,0x16
-asm/non_matchings/code/z_bgcheck/func_800C636C.s,func_800C636C,0x800C636C,0x16
-asm/non_matchings/code/z_bgcheck/func_800C63C4.s,func_800C63C4,0x800C63C4,0x16
-asm/non_matchings/code/z_bgcheck/func_800C641C.s,func_800C641C,0x800C641C,0x16
-asm/non_matchings/code/z_bgcheck/func_800C6474.s,func_800C6474,0x800C6474,0x16
+asm/non_matchings/code/z_bgcheck/DynaPoly_DisableCollision.s,DynaPoly_DisableCollision,0x800C62BC,0x16
+asm/non_matchings/code/z_bgcheck/DynaPoly_EnableCollision.s,DynaPoly_EnableCollision,0x800C6314,0x16
+asm/non_matchings/code/z_bgcheck/DynaPoly_DisableCeilingCollision.s,DynaPoly_DisableCeilingCollision,0x800C636C,0x16
+asm/non_matchings/code/z_bgcheck/DynaPoly_EnableCeilingCollision.s,DynaPoly_EnableCeilingCollision,0x800C63C4,0x16
+asm/non_matchings/code/z_bgcheck/DynaPoly_DisableFloorCollision.s,DynaPoly_DisableFloorCollision,0x800C641C,0x16
+asm/non_matchings/code/z_bgcheck/DynaPoly_EnableFloorCollision.s,DynaPoly_EnableFloorCollision,0x800C6474,0x16
asm/non_matchings/code/z_bgcheck/DynaPoly_DeleteBgActor.s,DynaPoly_DeleteBgActor,0x800C64CC,0x22
-asm/non_matchings/code/z_bgcheck/func_800C6554.s,func_800C6554,0x800C6554,0x6
+asm/non_matchings/code/z_bgcheck/DynaPoly_InvalidateLookup.s,DynaPoly_InvalidateLookup,0x800C6554,0x6
asm/non_matchings/code/z_bgcheck/BgCheck_CalcWaterboxDimensions.s,BgCheck_CalcWaterboxDimensions,0x800C656C,0xB3
asm/non_matchings/code/z_bgcheck/DynaPoly_SetBgActorToLists.s,DynaPoly_SetBgActorToLists,0x800C6838,0x2C5
-asm/non_matchings/code/z_bgcheck/BgCheck_ResetFlagsIfLoadedActor.s,BgCheck_ResetFlagsIfLoadedActor,0x800C734C,0x26
-asm/non_matchings/code/z_bgcheck/DynaPoly_Setup.s,DynaPoly_Setup,0x800C73E4,0x62
+asm/non_matchings/code/z_bgcheck/DynaPoly_UnsetAllInteractFlags.s,DynaPoly_UnsetAllInteractFlags,0x800C734C,0x26
+asm/non_matchings/code/z_bgcheck/DynaPoly_UpdateContext.s,DynaPoly_UpdateContext,0x800C73E4,0x62
asm/non_matchings/code/z_bgcheck/func_800C756C.s,func_800C756C,0x800C756C,0x3C
asm/non_matchings/code/z_bgcheck/DynaPoly_SetupAllActorMeshes.s,DynaPoly_SetupAllActorMeshes,0x800C765C,0x24
asm/non_matchings/code/z_bgcheck/func_800C76EC.s,func_800C76EC,0x800C76EC,0xA2
@@ -569,21 +569,21 @@ asm/non_matchings/code/z_bgcheck/BgCheck_GetBgCamCount.s,BgCheck_GetBgCamCount,0
asm/non_matchings/code/z_bgcheck/BgCheck_GetBgCamFuncDataImpl.s,BgCheck_GetBgCamFuncDataImpl,0x800C98CC,0x16
asm/non_matchings/code/z_bgcheck/BgCheck_GetBgCamFuncData.s,BgCheck_GetBgCamFuncData,0x800C9924,0x22
asm/non_matchings/code/z_bgcheck/SurfaceType_GetSceneExitIndex.s,SurfaceType_GetSceneExitIndex,0x800C99AC,0xA
-asm/non_matchings/code/z_bgcheck/func_800C99D4.s,func_800C99D4,0x800C99D4,0xA
+asm/non_matchings/code/z_bgcheck/SurfaceType_GetFloorType.s,SurfaceType_GetFloorType,0x800C99D4,0xA
asm/non_matchings/code/z_bgcheck/func_800C99FC.s,func_800C99FC,0x800C99FC,0xA
-asm/non_matchings/code/z_bgcheck/func_800C9A24.s,func_800C9A24,0x800C9A24,0xA
-asm/non_matchings/code/z_bgcheck/func_800C9A4C.s,func_800C9A4C,0x800C9A4C,0xC
-asm/non_matchings/code/z_bgcheck/func_800C9A7C.s,func_800C9A7C,0x800C9A7C,0xD
-asm/non_matchings/code/z_bgcheck/func_800C9AB0.s,func_800C9AB0,0x800C9AB0,0xD
-asm/non_matchings/code/z_bgcheck/func_800C9AE4.s,func_800C9AE4,0x800C9AE4,0xD
-asm/non_matchings/code/z_bgcheck/func_800C9B18.s,func_800C9B18,0x800C9B18,0xA
-asm/non_matchings/code/z_bgcheck/func_800C9B40.s,func_800C9B40,0x800C9B40,0xA
-asm/non_matchings/code/z_bgcheck/func_800C9B68.s,func_800C9B68,0x800C9B68,0xA
+asm/non_matchings/code/z_bgcheck/SurfaceType_GetWallType.s,SurfaceType_GetWallType,0x800C9A24,0xA
+asm/non_matchings/code/z_bgcheck/SurfaceType_GetWallFlags.s,SurfaceType_GetWallFlags,0x800C9A4C,0xC
+asm/non_matchings/code/z_bgcheck/SurfaceType_CheckWallFlag0.s,SurfaceType_CheckWallFlag0,0x800C9A7C,0xD
+asm/non_matchings/code/z_bgcheck/SurfaceType_CheckWallFlag1.s,SurfaceType_CheckWallFlag1,0x800C9AB0,0xD
+asm/non_matchings/code/z_bgcheck/SurfaceType_CheckWallFlag2.s,SurfaceType_CheckWallFlag2,0x800C9AE4,0xD
+asm/non_matchings/code/z_bgcheck/SurfaceType_GetFloorProperty2.s,SurfaceType_GetFloorProperty2,0x800C9B18,0xA
+asm/non_matchings/code/z_bgcheck/SurfaceType_GetFloorProperty.s,SurfaceType_GetFloorProperty,0x800C9B40,0xA
+asm/non_matchings/code/z_bgcheck/SurfaceType_IsSoft.s,SurfaceType_IsSoft,0x800C9B68,0xA
asm/non_matchings/code/z_bgcheck/SurfaceType_IsHorseBlocked.s,SurfaceType_IsHorseBlocked,0x800C9B90,0xA
-asm/non_matchings/code/z_bgcheck/func_800C9BB8.s,func_800C9BB8,0x800C9BB8,0x9
-asm/non_matchings/code/z_bgcheck/SurfaceType_GetSfx.s,SurfaceType_GetSfx,0x800C9BDC,0x12
-asm/non_matchings/code/z_bgcheck/func_800C9C24.s,func_800C9C24,0x800C9C24,0x14
-asm/non_matchings/code/z_bgcheck/SurfaceType_GetSlope.s,SurfaceType_GetSlope,0x800C9C74,0xA
+asm/non_matchings/code/z_bgcheck/SurfaceType_GetMaterial.s,SurfaceType_GetMaterial,0x800C9BB8,0x9
+asm/non_matchings/code/z_bgcheck/SurfaceType_GetSfxOffset.s,SurfaceType_GetSfxOffset,0x800C9BDC,0x12
+asm/non_matchings/code/z_bgcheck/SurfaceType_HasMaterialProperty.s,SurfaceType_HasMaterialProperty,0x800C9C24,0x14
+asm/non_matchings/code/z_bgcheck/SurfaceType_GetFloorEffect.s,SurfaceType_GetFloorEffect,0x800C9C74,0xA
asm/non_matchings/code/z_bgcheck/SurfaceType_GetLightSettingIndex.s,SurfaceType_GetLightSettingIndex,0x800C9C9C,0xA
asm/non_matchings/code/z_bgcheck/SurfaceType_GetEcho.s,SurfaceType_GetEcho,0x800C9CC4,0xA
asm/non_matchings/code/z_bgcheck/SurfaceType_IsHookshotSurface.s,SurfaceType_IsHookshotSurface,0x800C9CEC,0xA
@@ -606,10 +606,10 @@ asm/non_matchings/code/z_bgcheck/WaterBox_GetLightSettingIndex.s,WaterBox_GetLig
asm/non_matchings/code/z_bgcheck/func_800CA6F0.s,func_800CA6F0,0x800CA6F0,0xB8
asm/non_matchings/code/z_bgcheck/func_800CA9D0.s,func_800CA9D0,0x800CA9D0,0x11
asm/non_matchings/code/z_bgcheck/func_800CAA14.s,func_800CAA14,0x800CAA14,0x2F
-asm/non_matchings/code/z_bg_collect/BgCheck2_UpdateActorPosition.s,BgCheck2_UpdateActorPosition,0x800CAAD0,0x4F
-asm/non_matchings/code/z_bg_collect/BgCheck2_UpdateActorYRotation.s,BgCheck2_UpdateActorYRotation,0x800CAC0C,0x25
-asm/non_matchings/code/z_bg_collect/BgCheck2_AttachToMesh.s,BgCheck2_AttachToMesh,0x800CACA0,0x23
-asm/non_matchings/code/z_bg_collect/BgCheck2_UpdateActorAttachedToMesh.s,BgCheck2_UpdateActorAttachedToMesh,0x800CAD2C,0x39
+asm/non_matchings/code/z_bg_collect/DynaPolyActor_UpdateCarriedActorPos.s,DynaPolyActor_UpdateCarriedActorPos,0x800CAAD0,0x4F
+asm/non_matchings/code/z_bg_collect/DynaPolyActor_UpdateCarriedActorRotY.s,DynaPolyActor_UpdateCarriedActorRotY,0x800CAC0C,0x25
+asm/non_matchings/code/z_bg_collect/DynaPolyActor_AttachCarriedActor.s,DynaPolyActor_AttachCarriedActor,0x800CACA0,0x23
+asm/non_matchings/code/z_bg_collect/DynaPolyActor_TransformCarriedActor.s,DynaPolyActor_TransformCarriedActor,0x800CAD2C,0x39
asm/non_matchings/code/z_bg_item/DynaPoly_Init.s,DynaPoly_Init,0x800CAE10,0x9
asm/non_matchings/code/z_bg_item/DynaPoly_LoadMesh.s,DynaPoly_LoadMesh,0x800CAE34,0x12
asm/non_matchings/code/z_bg_item/DynaPoly_ResetState.s,DynaPoly_ResetState,0x800CAE7C,0x3
@@ -696,77 +696,77 @@ asm/non_matchings/code/z_camera/func_800CE930.s,func_800CE930,0x800CE930,0x6A
asm/non_matchings/code/z_camera/func_800CEAD8.s,func_800CEAD8,0x800CEAD8,0x58
asm/non_matchings/code/z_camera/func_800CEC38.s,func_800CEC38,0x800CEC38,0x56
asm/non_matchings/code/z_camera/func_800CED90.s,func_800CED90,0x800CED90,0x185
-asm/non_matchings/code/z_camera/Camera_ModeNop.s,Camera_ModeNop,0x800CF3A4,0x4
-asm/non_matchings/code/z_camera/Camera_ModeNORM1.s,Camera_ModeNORM1,0x800CF3B4,0x530
-asm/non_matchings/code/z_camera/Camera_ModeNORM2.s,Camera_ModeNORM2,0x800D0874,0x8
-asm/non_matchings/code/z_camera/Camera_ModeNORM3.s,Camera_ModeNORM3,0x800D0894,0x265
-asm/non_matchings/code/z_camera/Camera_ModeNORM4.s,Camera_ModeNORM4,0x800D1228,0x24
-asm/non_matchings/code/z_camera/Camera_ModeNORM0.s,Camera_ModeNORM0,0x800D12B8,0x1F0
-asm/non_matchings/code/z_camera/Camera_ModePARA1.s,Camera_ModePARA1,0x800D1A78,0x40C
-asm/non_matchings/code/z_camera/Camera_ModePARA2.s,Camera_ModePARA2,0x800D2AA8,0x8
-asm/non_matchings/code/z_camera/Camera_ModePARA3.s,Camera_ModePARA3,0x800D2AC8,0x8
-asm/non_matchings/code/z_camera/Camera_ModePARA4.s,Camera_ModePARA4,0x800D2AE8,0x8
-asm/non_matchings/code/z_camera/Camera_ModePARA0.s,Camera_ModePARA0,0x800D2B08,0x8
-asm/non_matchings/code/z_camera/Camera_ModeJUMP1.s,Camera_ModeJUMP1,0x800D2B28,0x8
-asm/non_matchings/code/z_camera/Camera_ModeJUMP2.s,Camera_ModeJUMP2,0x800D2B48,0x276
-asm/non_matchings/code/z_camera/Camera_ModeJUMP3.s,Camera_ModeJUMP3,0x800D3520,0x330
-asm/non_matchings/code/z_camera/Camera_ModeJUMP4.s,Camera_ModeJUMP4,0x800D41E0,0x8
-asm/non_matchings/code/z_camera/Camera_ModeJUMP0.s,Camera_ModeJUMP0,0x800D4200,0x8
-asm/non_matchings/code/z_camera/Camera_ModeBATT1.s,Camera_ModeBATT1,0x800D4220,0x4E2
-asm/non_matchings/code/z_camera/Camera_ModeBATT2.s,Camera_ModeBATT2,0x800D55A8,0x8
-asm/non_matchings/code/z_camera/Camera_ModeBATT3.s,Camera_ModeBATT3,0x800D55C8,0x8
-asm/non_matchings/code/z_camera/Camera_ModeBATT4.s,Camera_ModeBATT4,0x800D55E8,0x8
-asm/non_matchings/code/z_camera/Camera_ModeBATT0.s,Camera_ModeBATT0,0x800D5608,0x8
-asm/non_matchings/code/z_camera/Camera_ModeKEEP1.s,Camera_ModeKEEP1,0x800D5628,0x46D
-asm/non_matchings/code/z_camera/Camera_ModeKEEP2.s,Camera_ModeKEEP2,0x800D67DC,0x8
-asm/non_matchings/code/z_camera/Camera_ModeKEEP3.s,Camera_ModeKEEP3,0x800D67FC,0x2F3
-asm/non_matchings/code/z_camera/Camera_ModeKEEP4.s,Camera_ModeKEEP4,0x800D73C8,0x2F7
-asm/non_matchings/code/z_camera/Camera_ModeKEEP0.s,Camera_ModeKEEP0,0x800D7FA4,0x8
-asm/non_matchings/code/z_camera/Camera_ModeFIXD1.s,Camera_ModeFIXD1,0x800D7FC4,0x101
-asm/non_matchings/code/z_camera/Camera_ModeFIXD2.s,Camera_ModeFIXD2,0x800D83C8,0x290
-asm/non_matchings/code/z_camera/Camera_ModeFIXD3.s,Camera_ModeFIXD3,0x800D8E08,0x8
-asm/non_matchings/code/z_camera/Camera_ModeFIXD4.s,Camera_ModeFIXD4,0x800D8E28,0x8
-asm/non_matchings/code/z_camera/Camera_ModeFIXD0.s,Camera_ModeFIXD0,0x800D8E48,0x8
-asm/non_matchings/code/z_camera/Camera_ModeSUBJ1.s,Camera_ModeSUBJ1,0x800D8E68,0x185
-asm/non_matchings/code/z_camera/Camera_ModeSUBJ2.s,Camera_ModeSUBJ2,0x800D947C,0x8
-asm/non_matchings/code/z_camera/Camera_ModeSUBJ3.s,Camera_ModeSUBJ3,0x800D949C,0x8
-asm/non_matchings/code/z_camera/Camera_ModeSUBJ4.s,Camera_ModeSUBJ4,0x800D94BC,0x8
-asm/non_matchings/code/z_camera/Camera_ModeSUBJ0.s,Camera_ModeSUBJ0,0x800D94DC,0x8
-asm/non_matchings/code/z_camera/Camera_ModeDATA0.s,Camera_ModeDATA0,0x800D94FC,0x8
-asm/non_matchings/code/z_camera/Camera_ModeDATA1.s,Camera_ModeDATA1,0x800D951C,0x8
-asm/non_matchings/code/z_camera/Camera_ModeDATA2.s,Camera_ModeDATA2,0x800D953C,0x8
-asm/non_matchings/code/z_camera/Camera_ModeDATA3.s,Camera_ModeDATA3,0x800D955C,0x8
-asm/non_matchings/code/z_camera/Camera_ModeDATA4.s,Camera_ModeDATA4,0x800D957C,0x8
-asm/non_matchings/code/z_camera/Camera_ModeUNIQ1.s,Camera_ModeUNIQ1,0x800D959C,0x8
-asm/non_matchings/code/z_camera/Camera_ModeUNIQ2.s,Camera_ModeUNIQ2,0x800D95BC,0x105
-asm/non_matchings/code/z_camera/Camera_ModeUNIQ3.s,Camera_ModeUNIQ3,0x800D99D0,0x17
-asm/non_matchings/code/z_camera/Camera_ModeUNIQ4.s,Camera_ModeUNIQ4,0x800D9A2C,0x17
-asm/non_matchings/code/z_camera/Camera_ModeUNIQ5.s,Camera_ModeUNIQ5,0x800D9A88,0x17
-asm/non_matchings/code/z_camera/Camera_ModeUNIQ0.s,Camera_ModeUNIQ0,0x800D9AE4,0x235
-asm/non_matchings/code/z_camera/Camera_ModeUNIQ6.s,Camera_ModeUNIQ6,0x800DA3B8,0x4D
-asm/non_matchings/code/z_camera/Camera_ModeUNIQ7.s,Camera_ModeUNIQ7,0x800DA4EC,0x8
-asm/non_matchings/code/z_camera/Camera_ModeUNIQ8.s,Camera_ModeUNIQ8,0x800DA50C,0x8
-asm/non_matchings/code/z_camera/Camera_ModeUNIQ9.s,Camera_ModeUNIQ9,0x800DA52C,0x8
-asm/non_matchings/code/z_camera/Camera_ModeDEMO1.s,Camera_ModeDEMO1,0x800DA54C,0x1F1
-asm/non_matchings/code/z_camera/Camera_ModeDEMO2.s,Camera_ModeDEMO2,0x800DAD10,0x2BD
-asm/non_matchings/code/z_camera/Camera_ModeDEMO3.s,Camera_ModeDEMO3,0x800DB804,0xC4
-asm/non_matchings/code/z_camera/Camera_ModeDEMO4.s,Camera_ModeDEMO4,0x800DBB14,0x1D7
-asm/non_matchings/code/z_camera/Camera_ModeDEMO5.s,Camera_ModeDEMO5,0x800DC270,0x12A
-asm/non_matchings/code/z_camera/Camera_ModeDEMO6.s,Camera_ModeDEMO6,0x800DC718,0x8
-asm/non_matchings/code/z_camera/Camera_ModeDEMO7.s,Camera_ModeDEMO7,0x800DC738,0x8
-asm/non_matchings/code/z_camera/Camera_ModeDEMO8.s,Camera_ModeDEMO8,0x800DC758,0x8
-asm/non_matchings/code/z_camera/Camera_ModeDEMO9.s,Camera_ModeDEMO9,0x800DC778,0x8
-asm/non_matchings/code/z_camera/Camera_ModeDEMO0.s,Camera_ModeDEMO0,0x800DC798,0x13E
-asm/non_matchings/code/z_camera/Camera_ModeSPEC0.s,Camera_ModeSPEC0,0x800DCC90,0x8
-asm/non_matchings/code/z_camera/Camera_ModeSPEC1.s,Camera_ModeSPEC1,0x800DCCB0,0x8
-asm/non_matchings/code/z_camera/Camera_ModeSPEC2.s,Camera_ModeSPEC2,0x800DCCD0,0x8
-asm/non_matchings/code/z_camera/Camera_ModeSPEC3.s,Camera_ModeSPEC3,0x800DCCF0,0x8
-asm/non_matchings/code/z_camera/Camera_ModeSPEC4.s,Camera_ModeSPEC4,0x800DCD10,0x8
-asm/non_matchings/code/z_camera/Camera_ModeSPEC5.s,Camera_ModeSPEC5,0x800DCD30,0xF3
-asm/non_matchings/code/z_camera/Camera_ModeSPEC6.s,Camera_ModeSPEC6,0x800DD0FC,0x8
-asm/non_matchings/code/z_camera/Camera_ModeSPEC7.s,Camera_ModeSPEC7,0x800DD11C,0x8
-asm/non_matchings/code/z_camera/Camera_ModeSPEC8.s,Camera_ModeSPEC8,0x800DD13C,0x11F
-asm/non_matchings/code/z_camera/Camera_ModeSPEC9.s,Camera_ModeSPEC9,0x800DD5B8,0x1E8
+asm/non_matchings/code/z_camera/Camera_Noop.s,Camera_Noop,0x800CF3A4,0x4
+asm/non_matchings/code/z_camera/Camera_Normal1.s,Camera_Normal1,0x800CF3B4,0x530
+asm/non_matchings/code/z_camera/Camera_Normal2.s,Camera_Normal2,0x800D0874,0x8
+asm/non_matchings/code/z_camera/Camera_Normal3.s,Camera_Normal3,0x800D0894,0x265
+asm/non_matchings/code/z_camera/Camera_Normal4.s,Camera_Normal4,0x800D1228,0x24
+asm/non_matchings/code/z_camera/Camera_Normal0.s,Camera_Normal0,0x800D12B8,0x1F0
+asm/non_matchings/code/z_camera/Camera_Parallel1.s,Camera_Parallel1,0x800D1A78,0x40C
+asm/non_matchings/code/z_camera/Camera_Parallel2.s,Camera_Parallel2,0x800D2AA8,0x8
+asm/non_matchings/code/z_camera/Camera_Parallel3.s,Camera_Parallel3,0x800D2AC8,0x8
+asm/non_matchings/code/z_camera/Camera_Parallel4.s,Camera_Parallel4,0x800D2AE8,0x8
+asm/non_matchings/code/z_camera/Camera_Parallel0.s,Camera_Parallel0,0x800D2B08,0x8
+asm/non_matchings/code/z_camera/Camera_Jump1.s,Camera_Jump1,0x800D2B28,0x8
+asm/non_matchings/code/z_camera/Camera_Jump2.s,Camera_Jump2,0x800D2B48,0x276
+asm/non_matchings/code/z_camera/Camera_Jump3.s,Camera_Jump3,0x800D3520,0x330
+asm/non_matchings/code/z_camera/Camera_Jump4.s,Camera_Jump4,0x800D41E0,0x8
+asm/non_matchings/code/z_camera/Camera_Jump0.s,Camera_Jump0,0x800D4200,0x8
+asm/non_matchings/code/z_camera/Camera_Battle1.s,Camera_Battle1,0x800D4220,0x4E2
+asm/non_matchings/code/z_camera/Camera_Battle2.s,Camera_Battle2,0x800D55A8,0x8
+asm/non_matchings/code/z_camera/Camera_Battle3.s,Camera_Battle3,0x800D55C8,0x8
+asm/non_matchings/code/z_camera/Camera_Battle4.s,Camera_Battle4,0x800D55E8,0x8
+asm/non_matchings/code/z_camera/Camera_Battle0.s,Camera_Battle0,0x800D5608,0x8
+asm/non_matchings/code/z_camera/Camera_KeepOn1.s,Camera_KeepOn1,0x800D5628,0x46D
+asm/non_matchings/code/z_camera/Camera_KeepOn2.s,Camera_KeepOn2,0x800D67DC,0x8
+asm/non_matchings/code/z_camera/Camera_KeepOn3.s,Camera_KeepOn3,0x800D67FC,0x2F3
+asm/non_matchings/code/z_camera/Camera_KeepOn4.s,Camera_KeepOn4,0x800D73C8,0x2F7
+asm/non_matchings/code/z_camera/Camera_KeepOn0.s,Camera_KeepOn0,0x800D7FA4,0x8
+asm/non_matchings/code/z_camera/Camera_Fixed1.s,Camera_Fixed1,0x800D7FC4,0x101
+asm/non_matchings/code/z_camera/Camera_Fixed2.s,Camera_Fixed2,0x800D83C8,0x290
+asm/non_matchings/code/z_camera/Camera_Fixed3.s,Camera_Fixed3,0x800D8E08,0x8
+asm/non_matchings/code/z_camera/Camera_Fixed4.s,Camera_Fixed4,0x800D8E28,0x8
+asm/non_matchings/code/z_camera/Camera_Fixed0.s,Camera_Fixed0,0x800D8E48,0x8
+asm/non_matchings/code/z_camera/Camera_Subject1.s,Camera_Subject1,0x800D8E68,0x185
+asm/non_matchings/code/z_camera/Camera_Subject2.s,Camera_Subject2,0x800D947C,0x8
+asm/non_matchings/code/z_camera/Camera_Subject3.s,Camera_Subject3,0x800D949C,0x8
+asm/non_matchings/code/z_camera/Camera_Subject4.s,Camera_Subject4,0x800D94BC,0x8
+asm/non_matchings/code/z_camera/Camera_Subject0.s,Camera_Subject0,0x800D94DC,0x8
+asm/non_matchings/code/z_camera/Camera_Data0.s,Camera_Data0,0x800D94FC,0x8
+asm/non_matchings/code/z_camera/Camera_Data1.s,Camera_Data1,0x800D951C,0x8
+asm/non_matchings/code/z_camera/Camera_Data2.s,Camera_Data2,0x800D953C,0x8
+asm/non_matchings/code/z_camera/Camera_Data3.s,Camera_Data3,0x800D955C,0x8
+asm/non_matchings/code/z_camera/Camera_Data4.s,Camera_Data4,0x800D957C,0x8
+asm/non_matchings/code/z_camera/Camera_Unique1.s,Camera_Unique1,0x800D959C,0x8
+asm/non_matchings/code/z_camera/Camera_Unique2.s,Camera_Unique2,0x800D95BC,0x105
+asm/non_matchings/code/z_camera/Camera_Unique3.s,Camera_Unique3,0x800D99D0,0x17
+asm/non_matchings/code/z_camera/Camera_Unique4.s,Camera_Unique4,0x800D9A2C,0x17
+asm/non_matchings/code/z_camera/Camera_Unique5.s,Camera_Unique5,0x800D9A88,0x17
+asm/non_matchings/code/z_camera/Camera_Unique0.s,Camera_Unique0,0x800D9AE4,0x235
+asm/non_matchings/code/z_camera/Camera_Unique6.s,Camera_Unique6,0x800DA3B8,0x4D
+asm/non_matchings/code/z_camera/Camera_Unique7.s,Camera_Unique7,0x800DA4EC,0x8
+asm/non_matchings/code/z_camera/Camera_Unique8.s,Camera_Unique8,0x800DA50C,0x8
+asm/non_matchings/code/z_camera/Camera_Unique9.s,Camera_Unique9,0x800DA52C,0x8
+asm/non_matchings/code/z_camera/Camera_Demo1.s,Camera_Demo1,0x800DA54C,0x1F1
+asm/non_matchings/code/z_camera/Camera_Demo2.s,Camera_Demo2,0x800DAD10,0x2BD
+asm/non_matchings/code/z_camera/Camera_Demo3.s,Camera_Demo3,0x800DB804,0xC4
+asm/non_matchings/code/z_camera/Camera_Demo4.s,Camera_Demo4,0x800DBB14,0x1D7
+asm/non_matchings/code/z_camera/Camera_Demo5.s,Camera_Demo5,0x800DC270,0x12A
+asm/non_matchings/code/z_camera/Camera_Demo6.s,Camera_Demo6,0x800DC718,0x8
+asm/non_matchings/code/z_camera/Camera_Demo7.s,Camera_Demo7,0x800DC738,0x8
+asm/non_matchings/code/z_camera/Camera_Demo8.s,Camera_Demo8,0x800DC758,0x8
+asm/non_matchings/code/z_camera/Camera_Demo9.s,Camera_Demo9,0x800DC778,0x8
+asm/non_matchings/code/z_camera/Camera_Demo0.s,Camera_Demo0,0x800DC798,0x13E
+asm/non_matchings/code/z_camera/Camera_Special0.s,Camera_Special0,0x800DCC90,0x8
+asm/non_matchings/code/z_camera/Camera_Special1.s,Camera_Special1,0x800DCCB0,0x8
+asm/non_matchings/code/z_camera/Camera_Special2.s,Camera_Special2,0x800DCCD0,0x8
+asm/non_matchings/code/z_camera/Camera_Special3.s,Camera_Special3,0x800DCCF0,0x8
+asm/non_matchings/code/z_camera/Camera_Special4.s,Camera_Special4,0x800DCD10,0x8
+asm/non_matchings/code/z_camera/Camera_Special5.s,Camera_Special5,0x800DCD30,0xF3
+asm/non_matchings/code/z_camera/Camera_Special6.s,Camera_Special6,0x800DD0FC,0x8
+asm/non_matchings/code/z_camera/Camera_Special7.s,Camera_Special7,0x800DD11C,0x8
+asm/non_matchings/code/z_camera/Camera_Special8.s,Camera_Special8,0x800DD13C,0x11F
+asm/non_matchings/code/z_camera/Camera_Special9.s,Camera_Special9,0x800DD5B8,0x1E8
asm/non_matchings/code/z_camera/Camera_Alloc.s,Camera_Alloc,0x800DDD58,0x14
asm/non_matchings/code/z_camera/Camera_Free.s,Camera_Free,0x800DDDA8,0xA
asm/non_matchings/code/z_camera/Camera_Init.s,Camera_Init,0x800DDDD0,0x84
@@ -1033,7 +1033,7 @@ asm/non_matchings/code/code_800E8EA0/Actor_TrackPoint.s,Actor_TrackPoint,0x800E8
asm/non_matchings/code/code_800E8EA0/Actor_TrackPlayerSetFocusHeight.s,Actor_TrackPlayerSetFocusHeight,0x800E9138,0x46
asm/non_matchings/code/code_800E8EA0/Actor_TrackPlayer.s,Actor_TrackPlayer,0x800E9250,0x44
asm/non_matchings/code/z_common_data/func_800E9360.s,func_800E9360,0x800E9360,0x20
-asm/non_matchings/code/z_debug/GameInfo_Init.s,GameInfo_Init,0x800E93E0,0x24
+asm/non_matchings/code/z_debug/Regs_Init.s,Regs_Init,0x800E93E0,0x24
asm/non_matchings/code/z_debug_display/DebugDisplay_Init.s,DebugDisplay_Init,0x800E9470,0x6
asm/non_matchings/code/z_debug_display/DebugDisplay_AddObject.s,DebugDisplay_AddObject,0x800E9488,0x37
asm/non_matchings/code/z_debug_display/DebugDisplay_DrawObjects.s,DebugDisplay_DrawObjects,0x800E9564,0x24
@@ -1041,60 +1041,60 @@ asm/non_matchings/code/z_debug_display/func_800E95F4.s,func_800E95F4,0x800E95F4,
asm/non_matchings/code/z_debug_display/func_800E97D8.s,func_800E97D8,0x800E97D8,0x55
asm/non_matchings/code/z_debug_display/func_800E992C.s,func_800E992C,0x800E992C,0x21
asm/non_matchings/code/z_debug_display/func_800E99B0.s,func_800E99B0,0x800E99B0,0xB8
-asm/non_matchings/code/z_debug_mode/func_800E9C90.s,func_800E9C90,0x800E9C90,0x4
-asm/non_matchings/code/z_debug_mode/func_800E9CA0.s,func_800E9CA0,0x800E9CA0,0x17
-asm/non_matchings/code/z_debug_mode/func_800E9CFC.s,func_800E9CFC,0x800E9CFC,0x30
-asm/non_matchings/code/z_debug_mode/func_800E9DBC.s,func_800E9DBC,0x800E9DBC,0x36
-asm/non_matchings/code/z_debug_mode/func_800E9E94.s,func_800E9E94,0x800E9E94,0x39
-asm/non_matchings/code/z_debug_mode/func_800E9F78.s,func_800E9F78,0x800E9F78,0x3A
-asm/non_matchings/code/z_demo/Cutscene_Init.s,Cutscene_Init,0x800EA060,0x1D
-asm/non_matchings/code/z_demo/Cutscene_Start.s,Cutscene_Start,0x800EA0D4,0x6
-asm/non_matchings/code/z_demo/Cutscene_End.s,Cutscene_End,0x800EA0EC,0x9
-asm/non_matchings/code/z_demo/Cutscene_Update1.s,Cutscene_Update1,0x800EA110,0x13
-asm/non_matchings/code/z_demo/Cutscene_Update2.s,Cutscene_Update2,0x800EA15C,0x2D
-asm/non_matchings/code/z_demo/Cutscene_DoNothing.s,Cutscene_DoNothing,0x800EA210,0x4
-asm/non_matchings/code/z_demo/func_800EA220.s,func_800EA220,0x800EA220,0xE
-asm/non_matchings/code/z_demo/func_800EA258.s,func_800EA258,0x800EA258,0x18
-asm/non_matchings/code/z_demo/func_800EA2B8.s,func_800EA2B8,0x800EA2B8,0x1B
-asm/non_matchings/code/z_demo/Cutscene_Command_Misc.s,Cutscene_Command_Misc,0x800EA324,0x222
-asm/non_matchings/code/z_demo/Cutscene_Command_SetLighting.s,Cutscene_Command_SetLighting,0x800EABAC,0x17
-asm/non_matchings/code/z_demo/Cutscene_Command_PlaySequence.s,Cutscene_Command_PlaySequence,0x800EAC08,0xF
-asm/non_matchings/code/z_demo/Cutscene_Command_StopSequence.s,Cutscene_Command_StopSequence,0x800EAC44,0x14
-asm/non_matchings/code/z_demo/Cutscene_Command_FadeSequence.s,Cutscene_Command_FadeSequence,0x800EAC94,0x20
-asm/non_matchings/code/z_demo/Cutscene_Command_PlayAmbienceSequence.s,Cutscene_Command_PlayAmbienceSequence,0x800EAD14,0xD
-asm/non_matchings/code/z_demo/func_800EAD48.s,func_800EAD48,0x800EAD48,0xD
-asm/non_matchings/code/z_demo/func_800EAD7C.s,func_800EAD7C,0x800EAD7C,0xD
-asm/non_matchings/code/z_demo/func_800EADB0.s,func_800EADB0,0x800EADB0,0x47
-asm/non_matchings/code/z_demo/Cutscene_Command_FadeAmbienceSequence.s,Cutscene_Command_FadeAmbienceSequence,0x800EAECC,0x15
-asm/non_matchings/code/z_demo/Cutscene_Command_Rumble.s,Cutscene_Command_Rumble,0x800EAF20,0x30
-asm/non_matchings/code/z_demo/Cutscene_Command_FadeColorScreen.s,Cutscene_Command_FadeColorScreen,0x800EAFE0,0x7F
-asm/non_matchings/code/z_demo/Cutscene_Command_SetTime.s,Cutscene_Command_SetTime,0x800EB1DC,0x62
-asm/non_matchings/code/z_demo/Cutscene_TerminatorImpl.s,Cutscene_TerminatorImpl,0x800EB364,0x54
-asm/non_matchings/code/z_demo/Cutscene_Command_Terminator.s,Cutscene_Command_Terminator,0x800EB4B4,0x91
-asm/non_matchings/code/z_demo/Cutscene_Command_ChooseCreditsScenes.s,Cutscene_Command_ChooseCreditsScenes,0x800EB6F8,0x11C
-asm/non_matchings/code/z_demo/Cutscene_Command_MotionBlur.s,Cutscene_Command_MotionBlur,0x800EBB68,0x5A
-asm/non_matchings/code/z_demo/Cutscene_Command_GiveTatlToPlayer.s,Cutscene_Command_GiveTatlToPlayer,0x800EBCD0,0x24
-asm/non_matchings/code/z_demo/Cutscene_Command_TransitionFX.s,Cutscene_Command_TransitionFX,0x800EBD60,0x246
-asm/non_matchings/code/z_demo/Cutscene_Command_Camera.s,Cutscene_Command_Camera,0x800EC678,0x17
+asm/non_matchings/code/z_debug_mode/Debug_ClearTextDrawFlags.s,Debug_ClearTextDrawFlags,0x800E9C90,0x4
+asm/non_matchings/code/z_debug_mode/Debug_ScreenText.s,Debug_ScreenText,0x800E9CA0,0x17
+asm/non_matchings/code/z_debug_mode/Debug_DrawScreenText.s,Debug_DrawScreenText,0x800E9CFC,0x30
+asm/non_matchings/code/z_debug_mode/DebugCamera_ScreenText.s,DebugCamera_ScreenText,0x800E9DBC,0x36
+asm/non_matchings/code/z_debug_mode/DebugCamera_DrawScreenText.s,DebugCamera_DrawScreenText,0x800E9E94,0x39
+asm/non_matchings/code/z_debug_mode/Debug_DrawText.s,Debug_DrawText,0x800E9F78,0x3A
+asm/non_matchings/code/z_demo/Cutscene_InitContext.s,Cutscene_InitContext,0x800EA060,0x1D
+asm/non_matchings/code/z_demo/Cutscene_StartManual.s,Cutscene_StartManual,0x800EA0D4,0x6
+asm/non_matchings/code/z_demo/Cutscene_StopManual.s,Cutscene_StopManual,0x800EA0EC,0x9
+asm/non_matchings/code/z_demo/Cutscene_UpdateManual.s,Cutscene_UpdateManual,0x800EA110,0x13
+asm/non_matchings/code/z_demo/Cutscene_UpdateScripted.s,Cutscene_UpdateScripted,0x800EA15C,0x2D
+asm/non_matchings/code/z_demo/CutsceneHandler_DoNothing.s,CutsceneHandler_DoNothing,0x800EA210,0x4
+asm/non_matchings/code/z_demo/Cutscene_StepTimer.s,Cutscene_StepTimer,0x800EA220,0xE
+asm/non_matchings/code/z_demo/CutsceneHandler_StartManual.s,CutsceneHandler_StartManual,0x800EA258,0x18
+asm/non_matchings/code/z_demo/CutsceneHandler_StartScript.s,CutsceneHandler_StartScript,0x800EA2B8,0x1B
+asm/non_matchings/code/z_demo/CutsceneCmd_Misc.s,CutsceneCmd_Misc,0x800EA324,0x222
+asm/non_matchings/code/z_demo/CutsceneCmd_SetLightSetting.s,CutsceneCmd_SetLightSetting,0x800EABAC,0x17
+asm/non_matchings/code/z_demo/CutsceneCmd_StartSequence.s,CutsceneCmd_StartSequence,0x800EAC08,0xF
+asm/non_matchings/code/z_demo/CutsceneCmd_StopSequence.s,CutsceneCmd_StopSequence,0x800EAC44,0x14
+asm/non_matchings/code/z_demo/CutsceneCmd_FadeOutSequence.s,CutsceneCmd_FadeOutSequence,0x800EAC94,0x20
+asm/non_matchings/code/z_demo/CutsceneCmd_StartAmbience.s,CutsceneCmd_StartAmbience,0x800EAD14,0xD
+asm/non_matchings/code/z_demo/Cutscene_SetSfxReverbIndexTo2.s,Cutscene_SetSfxReverbIndexTo2,0x800EAD48,0xD
+asm/non_matchings/code/z_demo/Cutscene_SetSfxReverbIndexTo1.s,Cutscene_SetSfxReverbIndexTo1,0x800EAD7C,0xD
+asm/non_matchings/code/z_demo/CutsceneCmd_ModifySequence.s,CutsceneCmd_ModifySequence,0x800EADB0,0x47
+asm/non_matchings/code/z_demo/CutsceneCmd_FadeOutAmbience.s,CutsceneCmd_FadeOutAmbience,0x800EAECC,0x15
+asm/non_matchings/code/z_demo/CutsceneCmd_RumbleController.s,CutsceneCmd_RumbleController,0x800EAF20,0x30
+asm/non_matchings/code/z_demo/CutsceneCmd_TransitionGeneral.s,CutsceneCmd_TransitionGeneral,0x800EAFE0,0x7F
+asm/non_matchings/code/z_demo/CutsceneCmd_SetTime.s,CutsceneCmd_SetTime,0x800EB1DC,0x62
+asm/non_matchings/code/z_demo/CutsceneCmd_DestinationDefault.s,CutsceneCmd_DestinationDefault,0x800EB364,0x54
+asm/non_matchings/code/z_demo/CutsceneCmd_Destination.s,CutsceneCmd_Destination,0x800EB4B4,0x91
+asm/non_matchings/code/z_demo/CutsceneCmd_ChooseCreditsScenes.s,CutsceneCmd_ChooseCreditsScenes,0x800EB6F8,0x11C
+asm/non_matchings/code/z_demo/CutsceneCmd_MotionBlur.s,CutsceneCmd_MotionBlur,0x800EBB68,0x5A
+asm/non_matchings/code/z_demo/CutsceneCmd_GiveTatlToPlayer.s,CutsceneCmd_GiveTatlToPlayer,0x800EBCD0,0x24
+asm/non_matchings/code/z_demo/CutsceneCmd_Transition.s,CutsceneCmd_Transition,0x800EBD60,0x246
+asm/non_matchings/code/z_demo/CutsceneCmd_UpdateCamSpline.s,CutsceneCmd_UpdateCamSpline,0x800EC678,0x17
asm/non_matchings/code/z_demo/Cutscene_CountNormalMasks.s,Cutscene_CountNormalMasks,0x800EC6D4,0x94
-asm/non_matchings/code/z_demo/Cutscene_Command_Textbox.s,Cutscene_Command_Textbox,0x800EC924,0x116
-asm/non_matchings/code/z_demo/func_800ECD7C.s,func_800ECD7C,0x800ECD7C,0x31
-asm/non_matchings/code/z_demo/Cutscene_ProcessCommands.s,Cutscene_ProcessCommands,0x800ECE40,0x2D0
-asm/non_matchings/code/z_demo/func_800ED980.s,func_800ED980,0x800ED980,0x11
-asm/non_matchings/code/z_demo/func_800ED9C4.s,func_800ED9C4,0x800ED9C4,0x10
-asm/non_matchings/code/z_demo/func_800EDA04.s,func_800EDA04,0x800EDA04,0x20
-asm/non_matchings/code/z_demo/func_800EDA84.s,func_800EDA84,0x800EDA84,0x57
-asm/non_matchings/code/z_demo/func_800EDBE0.s,func_800EDBE0,0x800EDBE0,0x74
+asm/non_matchings/code/z_demo/CutsceneCmd_Text.s,CutsceneCmd_Text,0x800EC924,0x116
+asm/non_matchings/code/z_demo/Cutscene_SetActorCue.s,Cutscene_SetActorCue,0x800ECD7C,0x31
+asm/non_matchings/code/z_demo/Cutscene_ProcessScript.s,Cutscene_ProcessScript,0x800ECE40,0x2D0
+asm/non_matchings/code/z_demo/CutsceneHandler_RunScript.s,CutsceneHandler_RunScript,0x800ED980,0x11
+asm/non_matchings/code/z_demo/CutsceneHandler_StopManual.s,CutsceneHandler_StopManual,0x800ED9C4,0x10
+asm/non_matchings/code/z_demo/CutsceneHandler_StopScript.s,CutsceneHandler_StopScript,0x800EDA04,0x20
+asm/non_matchings/code/z_demo/Cutscene_SetupScripted.s,Cutscene_SetupScripted,0x800EDA84,0x57
+asm/non_matchings/code/z_demo/Cutscene_HandleEntranceTriggers.s,Cutscene_HandleEntranceTriggers,0x800EDBE0,0x74
asm/non_matchings/code/z_demo/func_800EDDB0.s,func_800EDDB0,0x800EDDB0,0x3
asm/non_matchings/code/z_demo/func_800EDDBC.s,func_800EDDBC,0x800EDDBC,0x4
-asm/non_matchings/code/z_demo/Cutscene_LoadCutsceneData.s,Cutscene_LoadCutsceneData,0x800EDDCC,0x1A
+asm/non_matchings/code/z_demo/Cutscene_StartScripted.s,Cutscene_StartScripted,0x800EDDCC,0x1A
asm/non_matchings/code/z_demo/Cutscene_ActorTranslate.s,Cutscene_ActorTranslate,0x800EDE34,0x3C
asm/non_matchings/code/z_demo/Cutscene_ActorTranslateAndYaw.s,Cutscene_ActorTranslateAndYaw,0x800EDF24,0x15
asm/non_matchings/code/z_demo/Cutscene_ActorTranslateAndYawSmooth.s,Cutscene_ActorTranslateAndYawSmooth,0x800EDF78,0x55
asm/non_matchings/code/z_demo/Cutscene_ActorTranslateXZAndYawSmooth.s,Cutscene_ActorTranslateXZAndYawSmooth,0x800EE0CC,0x43
asm/non_matchings/code/z_demo/Cutscene_GetSceneLayer.s,Cutscene_GetSceneLayer,0x800EE1D8,0xA
-asm/non_matchings/code/z_demo/Cutscene_GetActorActionIndex.s,Cutscene_GetActorActionIndex,0x800EE200,0x27
-asm/non_matchings/code/z_demo/Cutscene_CheckActorAction.s,Cutscene_CheckActorAction,0x800EE29C,0x16
+asm/non_matchings/code/z_demo/Cutscene_GetCueChannel.s,Cutscene_GetCueChannel,0x800EE200,0x27
+asm/non_matchings/code/z_demo/Cutscene_IsCueInChannel.s,Cutscene_IsCueInChannel,0x800EE29C,0x16
asm/non_matchings/code/z_demo/Cutscene_IsPlaying.s,Cutscene_IsPlaying,0x800EE2F4,0xB
asm/non_matchings/code/z_draw/GetItem_Draw.s,GetItem_Draw,0x800EE320,0x11
asm/non_matchings/code/z_draw/GetItem_DrawBombchu.s,GetItem_DrawBombchu,0x800EE364,0x27
@@ -1150,31 +1150,31 @@ asm/non_matchings/code/code_800F12D0/func_800F12D0.s,func_800F12D0,0x800F12D0,0x
asm/non_matchings/code/code_800F12D0/func_800F1304.s,func_800F1304,0x800F1304,0x1C
asm/non_matchings/code/code_800F12D0/func_800F1374.s,func_800F1374,0x800F1374,0x1D
asm/non_matchings/code/code_800F12D0/func_800F13E8.s,func_800F13E8,0x800F13E8,0x1E
-asm/non_matchings/code/z_eventmgr/func_800F1460.s,func_800F1460,0x800F1460,0x26
-asm/non_matchings/code/z_eventmgr/ActorCutscene_GetCutsceneImpl.s,ActorCutscene_GetCutsceneImpl,0x800F14F8,0x13
-asm/non_matchings/code/z_eventmgr/ActorCutscene_Init.s,ActorCutscene_Init,0x800F1544,0x25
-asm/non_matchings/code/z_eventmgr/func_800F15D8.s,func_800F15D8,0x800F15D8,0x1C
-asm/non_matchings/code/z_eventmgr/ActorCutscene_ClearWaiting.s,ActorCutscene_ClearWaiting,0x800F1648,0xC
-asm/non_matchings/code/z_eventmgr/ActorCutscene_ClearNextCutscenes.s,ActorCutscene_ClearNextCutscenes,0x800F1678,0xC
-asm/non_matchings/code/z_eventmgr/ActorCutscene_MarkNextCutscenes.s,ActorCutscene_MarkNextCutscenes,0x800F16A8,0x55
-asm/non_matchings/code/z_eventmgr/ActorCutscene_End.s,ActorCutscene_End,0x800F17FC,0xA0
-asm/non_matchings/code/z_eventmgr/ActorCutscene_Update.s,ActorCutscene_Update,0x800F1A7C,0x4A
-asm/non_matchings/code/z_eventmgr/ActorCutscene_SetIntentToPlay.s,ActorCutscene_SetIntentToPlay,0x800F1BA4,0x10
-asm/non_matchings/code/z_eventmgr/ActorCutscene_GetCanPlayNext.s,ActorCutscene_GetCanPlayNext,0x800F1BE4,0x21
-asm/non_matchings/code/z_eventmgr/ActorCutscene_StartAndSetUnkLinkFields.s,ActorCutscene_StartAndSetUnkLinkFields,0x800F1C68,0x1E
-asm/non_matchings/code/z_eventmgr/ActorCutscene_StartAndSetFlag.s,ActorCutscene_StartAndSetFlag,0x800F1CE0,0x29
-asm/non_matchings/code/z_eventmgr/ActorCutscene_Start.s,ActorCutscene_Start,0x800F1D84,0x8E
-asm/non_matchings/code/z_eventmgr/ActorCutscene_Stop.s,ActorCutscene_Stop,0x800F1FBC,0x30
-asm/non_matchings/code/z_eventmgr/ActorCutscene_GetCurrentIndex.s,ActorCutscene_GetCurrentIndex,0x800F207C,0x4
-asm/non_matchings/code/z_eventmgr/ActorCutscene_GetCutscene.s,ActorCutscene_GetCutscene,0x800F208C,0xB
-asm/non_matchings/code/z_eventmgr/ActorCutscene_GetAdditionalCutscene.s,ActorCutscene_GetAdditionalCutscene,0x800F20B8,0x10
-asm/non_matchings/code/z_eventmgr/ActorCutscene_GetLength.s,ActorCutscene_GetLength,0x800F20F8,0x10
-asm/non_matchings/code/z_eventmgr/func_800F2138.s,func_800F2138,0x800F2138,0x10
-asm/non_matchings/code/z_eventmgr/func_800F2178.s,func_800F2178,0x800F2178,0x10
-asm/non_matchings/code/z_eventmgr/ActorCutscene_GetCurrentSubCamId.s,ActorCutscene_GetCurrentSubCamId,0x800F21B8,0x5
-asm/non_matchings/code/z_eventmgr/func_800F21CC.s,func_800F21CC,0x800F21CC,0x3E
+asm/non_matchings/code/z_eventmgr/CutsceneManager_SetHudVisibility.s,CutsceneManager_SetHudVisibility,0x800F1460,0x26
+asm/non_matchings/code/z_eventmgr/CutsceneManager_GetCutsceneEntryImpl.s,CutsceneManager_GetCutsceneEntryImpl,0x800F14F8,0x13
+asm/non_matchings/code/z_eventmgr/CutsceneManager_Init.s,CutsceneManager_Init,0x800F1544,0x25
+asm/non_matchings/code/z_eventmgr/CutsceneManager_StoreCamera.s,CutsceneManager_StoreCamera,0x800F15D8,0x1C
+asm/non_matchings/code/z_eventmgr/CutsceneManager_ClearWaiting.s,CutsceneManager_ClearWaiting,0x800F1648,0xC
+asm/non_matchings/code/z_eventmgr/CutsceneManager_ClearNextCutscenes.s,CutsceneManager_ClearNextCutscenes,0x800F1678,0xC
+asm/non_matchings/code/z_eventmgr/CutsceneManager_MarkNextCutscenes.s,CutsceneManager_MarkNextCutscenes,0x800F16A8,0x55
+asm/non_matchings/code/z_eventmgr/CutsceneManager_End.s,CutsceneManager_End,0x800F17FC,0xA0
+asm/non_matchings/code/z_eventmgr/CutsceneManager_Update.s,CutsceneManager_Update,0x800F1A7C,0x4A
+asm/non_matchings/code/z_eventmgr/CutsceneManager_Queue.s,CutsceneManager_Queue,0x800F1BA4,0x10
+asm/non_matchings/code/z_eventmgr/CutsceneManager_IsNext.s,CutsceneManager_IsNext,0x800F1BE4,0x21
+asm/non_matchings/code/z_eventmgr/CutsceneManager_StartWithPlayerCs.s,CutsceneManager_StartWithPlayerCs,0x800F1C68,0x1E
+asm/non_matchings/code/z_eventmgr/CutsceneManager_StartWithPlayerCsAndSetFlag.s,CutsceneManager_StartWithPlayerCsAndSetFlag,0x800F1CE0,0x29
+asm/non_matchings/code/z_eventmgr/CutsceneManager_Start.s,CutsceneManager_Start,0x800F1D84,0x8E
+asm/non_matchings/code/z_eventmgr/CutsceneManager_Stop.s,CutsceneManager_Stop,0x800F1FBC,0x30
+asm/non_matchings/code/z_eventmgr/CutsceneManager_GetCurrentCsId.s,CutsceneManager_GetCurrentCsId,0x800F207C,0x4
+asm/non_matchings/code/z_eventmgr/CutsceneManager_GetCutsceneEntry.s,CutsceneManager_GetCutsceneEntry,0x800F208C,0xB
+asm/non_matchings/code/z_eventmgr/CutsceneManager_GetAdditionalCsId.s,CutsceneManager_GetAdditionalCsId,0x800F20B8,0x10
+asm/non_matchings/code/z_eventmgr/CutsceneManager_GetLength.s,CutsceneManager_GetLength,0x800F20F8,0x10
+asm/non_matchings/code/z_eventmgr/CutsceneManager_GetCutsceneScriptIndex.s,CutsceneManager_GetCutsceneScriptIndex,0x800F2138,0x10
+asm/non_matchings/code/z_eventmgr/CutsceneManager_GetCutsceneCustomValue.s,CutsceneManager_GetCutsceneCustomValue,0x800F2178,0x10
+asm/non_matchings/code/z_eventmgr/CutsceneManager_GetCurrentSubCamId.s,CutsceneManager_GetCurrentSubCamId,0x800F21B8,0x5
+asm/non_matchings/code/z_eventmgr/CutsceneManager_FindEntranceCsId.s,CutsceneManager_FindEntranceCsId,0x800F21CC,0x3E
asm/non_matchings/code/z_eventmgr/func_800F22C4.s,func_800F22C4,0x800F22C4,0x40
-asm/non_matchings/code/z_eventmgr/ActorCutscene_SetReturnCamera.s,ActorCutscene_SetReturnCamera,0x800F23C4,0x7
+asm/non_matchings/code/z_eventmgr/CutsceneManager_SetReturnCamera.s,CutsceneManager_SetReturnCamera,0x800F23C4,0x7
asm/non_matchings/code/z_fcurve_data/func_800F23E0.s,func_800F23E0,0x800F23E0,0x26
asm/non_matchings/code/z_fcurve_data/func_800F2478.s,func_800F2478,0x800F2478,0x6A
asm/non_matchings/code/z_fcurve_data_skelanime/func_800F2620.s,func_800F2620,0x800F2620,0xC
@@ -1222,11 +1222,11 @@ asm/non_matchings/code/z_kanfont/Font_LoadMessageBoxEndIcon.s,Font_LoadMessageBo
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/Kankyo_Init.s,Kankyo_Init,0x800F510C,0x212
+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
asm/non_matchings/code/z_kankyo/func_800F5B10.s,func_800F5B10,0x800F5B10,0x70
-asm/non_matchings/code/z_kankyo/func_800F5CD0.s,func_800F5CD0,0x800F5CD0,0x2D9
+asm/non_matchings/code/z_kankyo/Environment_UpdateSkybox.s,Environment_UpdateSkybox,0x800F5CD0,0x2D9
asm/non_matchings/code/z_kankyo/func_800F6834.s,func_800F6834,0x800F6834,0x46
asm/non_matchings/code/z_kankyo/func_800F694C.s,func_800F694C,0x800F694C,0x2E
asm/non_matchings/code/z_kankyo/func_800F6A04.s,func_800F6A04,0x800F6A04,0xF
@@ -1241,13 +1241,13 @@ asm/non_matchings/code/z_kankyo/func_800F8554.s,func_800F8554,0x800F8554,0xDC
asm/non_matchings/code/z_kankyo/func_800F88C4.s,func_800F88C4,0x800F88C4,0x2B
asm/non_matchings/code/z_kankyo/func_800F8970.s,func_800F8970,0x800F8970,0x4B
asm/non_matchings/code/z_kankyo/func_800F8A9C.s,func_800F8A9C,0x800F8A9C,0x8E
-asm/non_matchings/code/z_kankyo/func_800F8CD4.s,func_800F8CD4,0x800F8CD4,0x2C
+asm/non_matchings/code/z_kankyo/Environment_Update.s,Environment_Update,0x800F8CD4,0x2C
asm/non_matchings/code/z_kankyo/func_800F8D84.s,func_800F8D84,0x800F8D84,0x269
-asm/non_matchings/code/z_kankyo/func_800F9728.s,func_800F9728,0x800F9728,0x3F
+asm/non_matchings/code/z_kankyo/Environment_DrawSunLensFlare.s,Environment_DrawSunLensFlare,0x800F9728,0x3F
asm/non_matchings/code/z_kankyo/func_800F9824.s,func_800F9824,0x800F9824,0x2DE
asm/non_matchings/code/z_kankyo/func_800FA39C.s,func_800FA39C,0x800FA39C,0xA
asm/non_matchings/code/z_kankyo/func_800FA3C4.s,func_800FA3C4,0x800FA3C4,0x18E
-asm/non_matchings/code/z_kankyo/func_800FA9FC.s,func_800FA9FC,0x800FA9FC,0x2E
+asm/non_matchings/code/z_kankyo/Environment_DrawRain.s,Environment_DrawRain,0x800FA9FC,0x2E
asm/non_matchings/code/z_kankyo/func_800FAAB4.s,func_800FAAB4,0x800FAAB4,0x5B
asm/non_matchings/code/z_kankyo/func_800FAC20.s,func_800FAC20,0x800FAC20,0xD5
asm/non_matchings/code/z_kankyo/func_800FAF74.s,func_800FAF74,0x800FAF74,0x27
@@ -1256,13 +1256,13 @@ asm/non_matchings/code/z_kankyo/Environment_AddLightningBolts.s,Environment_AddL
asm/non_matchings/code/z_kankyo/func_800FB388.s,func_800FB388,0x800FB388,0xF4
asm/non_matchings/code/z_kankyo/func_800FB758.s,func_800FB758,0x800FB758,0x97
asm/non_matchings/code/z_kankyo/func_800FB9B4.s,func_800FB9B4,0x800FB9B4,0xC2
-asm/non_matchings/code/z_kankyo/func_800FBCBC.s,func_800FBCBC,0x800FBCBC,0x4C
+asm/non_matchings/code/z_kankyo/Environment_DrawCustomLensFlare.s,Environment_DrawCustomLensFlare,0x800FBCBC,0x4C
asm/non_matchings/code/z_kankyo/Kankyo_InitGameOverLights.s,Kankyo_InitGameOverLights,0x800FBDEC,0x54
asm/non_matchings/code/z_kankyo/Kankyo_FadeInGameOverLights.s,Kankyo_FadeInGameOverLights,0x800FBF3C,0x87
asm/non_matchings/code/z_kankyo/Kankyo_FadeOutGameOverLights.s,Kankyo_FadeOutGameOverLights,0x800FC158,0xA1
asm/non_matchings/code/z_kankyo/func_800FC3DC.s,func_800FC3DC,0x800FC3DC,0x1A
-asm/non_matchings/code/z_kankyo/func_800FC444.s,func_800FC444,0x800FC444,0x82
-asm/non_matchings/code/z_kankyo/func_800FC64C.s,func_800FC64C,0x800FC64C,0x31A
+asm/non_matchings/code/z_kankyo/Environment_FillScreen.s,Environment_FillScreen,0x800FC444,0x82
+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
@@ -1282,9 +1282,9 @@ asm/non_matchings/code/z_kankyo/func_800FDAF8.s,func_800FDAF8,0x800FDAF8,0x67
asm/non_matchings/code/z_kankyo/func_800FDC94.s,func_800FDC94,0x800FDC94,0x1BF
asm/non_matchings/code/z_kankyo/func_800FE390.s,func_800FE390,0x800FE390,0x14
asm/non_matchings/code/z_kankyo/func_800FE3E0.s,func_800FE3E0,0x800FE3E0,0x29
-asm/non_matchings/code/z_kankyo/func_800FE484.s,func_800FE484,0x800FE484,0x5
-asm/non_matchings/code/z_kankyo/func_800FE498.s,func_800FE498,0x800FE498,0x4
-asm/non_matchings/code/z_kankyo/func_800FE4A8.s,func_800FE4A8,0x800FE4A8,0x4
+asm/non_matchings/code/z_kankyo/Environment_StopTime.s,Environment_StopTime,0x800FE484,0x5
+asm/non_matchings/code/z_kankyo/Environment_StartTime.s,Environment_StartTime,0x800FE498,0x4
+asm/non_matchings/code/z_kankyo/Environment_IsTimeStopped.s,Environment_IsTimeStopped,0x800FE4A8,0x4
asm/non_matchings/code/z_kankyo/func_800FE4B8.s,func_800FE4B8,0x800FE4B8,0x36
asm/non_matchings/code/z_kankyo/func_800FE590.s,func_800FE590,0x800FE590,0x10
asm/non_matchings/code/z_kankyo/func_800FE5D0.s,func_800FE5D0,0x800FE5D0,0x10
@@ -1395,7 +1395,7 @@ asm/non_matchings/code/z_lights/Lights_FindBufSlot.s,Lights_FindBufSlot,0x801023
asm/non_matchings/code/z_lights/Lights_FreeNode.s,Lights_FreeNode,0x80102464,0x12
asm/non_matchings/code/z_lights/LightContext_Init.s,LightContext_Init,0x801024AC,0x1B
asm/non_matchings/code/z_lights/LightContext_SetAmbientColor.s,LightContext_SetAmbientColor,0x80102518,0xB
-asm/non_matchings/code/z_lights/func_80102544.s,func_80102544,0x80102544,0xF
+asm/non_matchings/code/z_lights/LightContext_SetFog.s,LightContext_SetFog,0x80102544,0xF
asm/non_matchings/code/z_lights/LightContext_NewLights.s,LightContext_NewLights,0x80102580,0xE
asm/non_matchings/code/z_lights/LightContext_InitList.s,LightContext_InitList,0x801025B8,0x4
asm/non_matchings/code/z_lights/LightContext_DestroyList.s,LightContext_DestroyList,0x801025C8,0x17
@@ -1597,35 +1597,35 @@ asm/non_matchings/code/z_olib/OLib_Vec3fDiffDegF.s,OLib_Vec3fDiffDegF,0x8010C8C8
asm/non_matchings/code/z_olib/OLib_Vec3fDiffBinAng.s,OLib_Vec3fDiffBinAng,0x8010C930,0x26
asm/non_matchings/code/z_olib/OLib_DbCameraVec3fDiff.s,OLib_DbCameraVec3fDiff,0x8010C9C8,0x36
asm/non_matchings/code/z_olib/OLib_DbCameraVec3fSum.s,OLib_DbCameraVec3fSum,0x8010CAA0,0x34
-asm/non_matchings/code/z_parameter/func_8010CB80.s,func_8010CB80,0x8010CB80,0x86
-asm/non_matchings/code/z_parameter/func_8010CD98.s,func_8010CD98,0x8010CD98,0x89
-asm/non_matchings/code/z_parameter/func_8010CFBC.s,func_8010CFBC,0x8010CFBC,0xC6
-asm/non_matchings/code/z_parameter/func_8010D2D4.s,func_8010D2D4,0x8010D2D4,0x6B
-asm/non_matchings/code/z_parameter/func_8010D480.s,func_8010D480,0x8010D480,0xD4
-asm/non_matchings/code/z_parameter/func_8010D7D0.s,func_8010D7D0,0x8010D7D0,0x89
-asm/non_matchings/code/z_parameter/func_8010D9F4.s,func_8010D9F4,0x8010D9F4,0x99
-asm/non_matchings/code/z_parameter/func_8010DC58.s,func_8010DC58,0x8010DC58,0x78
-asm/non_matchings/code/z_parameter/func_8010DE38.s,func_8010DE38,0x8010DE38,0x7C
-asm/non_matchings/code/z_parameter/func_8010E028.s,func_8010E028,0x8010E028,0x250
+asm/non_matchings/code/z_parameter/Gfx_DrawTexRectRGBA16.s,Gfx_DrawTexRectRGBA16,0x8010CB80,0x86
+asm/non_matchings/code/z_parameter/Gfx_DrawTexRectIA8.s,Gfx_DrawTexRectIA8,0x8010CD98,0x89
+asm/non_matchings/code/z_parameter/Gfx_DrawTexRectIA8_DropShadow.s,Gfx_DrawTexRectIA8_DropShadow,0x8010CFBC,0xC6
+asm/non_matchings/code/z_parameter/Gfx_DrawRect_DropShadow.s,Gfx_DrawRect_DropShadow,0x8010D2D4,0x6B
+asm/non_matchings/code/z_parameter/Gfx_DrawTexRectIA8_DropShadowOffset.s,Gfx_DrawTexRectIA8_DropShadowOffset,0x8010D480,0xD4
+asm/non_matchings/code/z_parameter/Gfx_DrawTexRectI8.s,Gfx_DrawTexRectI8,0x8010D7D0,0x89
+asm/non_matchings/code/z_parameter/Gfx_DrawTexRect4b.s,Gfx_DrawTexRect4b,0x8010D9F4,0x99
+asm/non_matchings/code/z_parameter/Gfx_DrawTexQuadIA8.s,Gfx_DrawTexQuadIA8,0x8010DC58,0x78
+asm/non_matchings/code/z_parameter/Gfx_DrawTexQuad4b.s,Gfx_DrawTexQuad4b,0x8010DE38,0x7C
+asm/non_matchings/code/z_parameter/Interface_SetVertices.s,Interface_SetVertices,0x8010E028,0x250
asm/non_matchings/code/z_parameter/Interface_PostmanTimerCallback.s,Interface_PostmanTimerCallback,0x8010E968,0x22
asm/non_matchings/code/z_parameter/Interface_StartTimer.s,Interface_StartTimer,0x8010E9F0,0x2B
asm/non_matchings/code/z_parameter/Interface_StartPostmanTimer.s,Interface_StartPostmanTimer,0x8010EA9C,0x2D
asm/non_matchings/code/z_parameter/Interface_StartGoronRaceTimer.s,Interface_StartGoronRaceTimer,0x8010EB50,0x14
asm/non_matchings/code/z_parameter/Interface_StartBottleTimer.s,Interface_StartBottleTimer,0x8010EBA0,0x2D
asm/non_matchings/code/z_parameter/Interface_GetCompressedTimerDigits.s,Interface_GetCompressedTimerDigits,0x8010EC54,0x88
-asm/non_matchings/code/z_parameter/func_8010EE74.s,func_8010EE74,0x8010EE74,0x3D
+asm/non_matchings/code/z_parameter/Interface_NewDay.s,Interface_NewDay,0x8010EE74,0x3D
asm/non_matchings/code/z_parameter/Interface_SetHudVisibility.s,Interface_SetHudVisibility,0x8010EF68,0xD
asm/non_matchings/code/z_parameter/Interface_UpdateButtonAlphasByStatus.s,Interface_UpdateButtonAlphasByStatus,0x8010EF9C,0x4E
asm/non_matchings/code/z_parameter/Interface_UpdateButtonAlphas.s,Interface_UpdateButtonAlphas,0x8010F0D4,0x35
asm/non_matchings/code/z_parameter/Interface_UpdateHudAlphas.s,Interface_UpdateHudAlphas,0x8010F1A8,0x3A4
-asm/non_matchings/code/z_parameter/func_80110038.s,func_80110038,0x80110038,0x71F
-asm/non_matchings/code/z_parameter/func_80111CB4.s,func_80111CB4,0x80111CB4,0x34C
-asm/non_matchings/code/z_parameter/func_801129E4.s,func_801129E4,0x801129E4,0x44
-asm/non_matchings/code/z_parameter/func_80112AF4.s,func_80112AF4,0x80112AF4,0x2
-asm/non_matchings/code/z_parameter/func_80112AFC.s,func_80112AFC,0x80112AFC,0x11
+asm/non_matchings/code/z_parameter/Interface_UpdateButtonsPart2.s,Interface_UpdateButtonsPart2,0x80110038,0x71F
+asm/non_matchings/code/z_parameter/Interface_UpdateButtonsPart1.s,Interface_UpdateButtonsPart1,0x80111CB4,0x34C
+asm/non_matchings/code/z_parameter/Interface_SetSceneRestrictions.s,Interface_SetSceneRestrictions,0x801129E4,0x44
+asm/non_matchings/code/z_parameter/Interface_Noop.s,Interface_Noop,0x80112AF4,0x2
+asm/non_matchings/code/z_parameter/Interface_InitMinigame.s,Interface_InitMinigame,0x80112AFC,0x11
asm/non_matchings/code/z_parameter/Interface_LoadItemIconImpl.s,Interface_LoadItemIconImpl,0x80112B40,0x29
asm/non_matchings/code/z_parameter/Interface_LoadItemIcon.s,Interface_LoadItemIcon,0x80112BE4,0xA
-asm/non_matchings/code/z_parameter/func_80112C0C.s,func_80112C0C,0x80112C0C,0x9D
+asm/non_matchings/code/z_parameter/Interface_UpdateButtonsAlt.s,Interface_UpdateButtonsAlt,0x80112C0C,0x9D
asm/non_matchings/code/z_parameter/Item_Give.s,Item_Give,0x80112E80,0x553
asm/non_matchings/code/z_parameter/Item_CheckObtainabilityImpl.s,Item_CheckObtainabilityImpl,0x801143CC,0x16B
asm/non_matchings/code/z_parameter/Item_CheckObtainability.s,Item_CheckObtainability,0x80114978,0xA
@@ -1655,32 +1655,32 @@ asm/non_matchings/code/z_parameter/Magic_UpdateAddRequest.s,Magic_UpdateAddReque
asm/non_matchings/code/z_parameter/Magic_FlashMeterBorder.s,Magic_FlashMeterBorder,0x80116114,0x8D
asm/non_matchings/code/z_parameter/Magic_Update.s,Magic_Update,0x80116348,0x174
asm/non_matchings/code/z_parameter/Magic_DrawMeter.s,Magic_DrawMeter,0x80116918,0x1B0
-asm/non_matchings/code/z_parameter/func_80116FD8.s,func_80116FD8,0x80116FD8,0x38
-asm/non_matchings/code/z_parameter/func_801170B8.s,func_801170B8,0x801170B8,0x12
-asm/non_matchings/code/z_parameter/func_80117100.s,func_80117100,0x80117100,0x248
-asm/non_matchings/code/z_parameter/func_80117A20.s,func_80117A20,0x80117A20,0x6C
-asm/non_matchings/code/z_parameter/func_80117BD0.s,func_80117BD0,0x80117BD0,0x12D
-asm/non_matchings/code/z_parameter/func_80118084.s,func_80118084,0x80118084,0x203
-asm/non_matchings/code/z_parameter/func_80118890.s,func_80118890,0x80118890,0xC5
-asm/non_matchings/code/z_parameter/func_80118BA4.s,func_80118BA4,0x80118BA4,0x123
-asm/non_matchings/code/z_parameter/func_80119030.s,func_80119030,0x80119030,0x178
-asm/non_matchings/code/z_parameter/func_80119610.s,func_80119610,0x80119610,0x7B4
-asm/non_matchings/code/z_parameter/func_8011B4E0.s,func_8011B4E0,0x8011B4E0,0x38
-asm/non_matchings/code/z_parameter/func_8011B5C0.s,func_8011B5C0,0x8011B5C0,0x108
-asm/non_matchings/code/z_parameter/func_8011B9E0.s,func_8011B9E0,0x8011B9E0,0x164
-asm/non_matchings/code/z_parameter/func_8011BF70.s,func_8011BF70,0x8011BF70,0x155
-asm/non_matchings/code/z_parameter/func_8011C4C4.s,func_8011C4C4,0x8011C4C4,0xD1
+asm/non_matchings/code/z_parameter/Interface_SetPerspectiveView.s,Interface_SetPerspectiveView,0x80116FD8,0x38
+asm/non_matchings/code/z_parameter/Interface_SetOrthoView.s,Interface_SetOrthoView,0x801170B8,0x12
+asm/non_matchings/code/z_parameter/Interface_DrawItemButtons.s,Interface_DrawItemButtons,0x80117100,0x248
+asm/non_matchings/code/z_parameter/Interface_DrawItemIconTexture.s,Interface_DrawItemIconTexture,0x80117A20,0x6C
+asm/non_matchings/code/z_parameter/Interface_DrawAmmoCount.s,Interface_DrawAmmoCount,0x80117BD0,0x12D
+asm/non_matchings/code/z_parameter/Interface_DrawBButtonIcons.s,Interface_DrawBButtonIcons,0x80118084,0x203
+asm/non_matchings/code/z_parameter/Interface_DrawCButtonIcons.s,Interface_DrawCButtonIcons,0x80118890,0xC5
+asm/non_matchings/code/z_parameter/Interface_DrawAButton.s,Interface_DrawAButton,0x80118BA4,0x123
+asm/non_matchings/code/z_parameter/Interface_DrawPauseMenuEquippingIcons.s,Interface_DrawPauseMenuEquippingIcons,0x80119030,0x178
+asm/non_matchings/code/z_parameter/Interface_DrawClock.s,Interface_DrawClock,0x80119610,0x7B4
+asm/non_matchings/code/z_parameter/Interface_SetPerfectLetters.s,Interface_SetPerfectLetters,0x8011B4E0,0x38
+asm/non_matchings/code/z_parameter/Interface_UpdatePerfectLettersType1.s,Interface_UpdatePerfectLettersType1,0x8011B5C0,0x108
+asm/non_matchings/code/z_parameter/Interface_UpdatePerfectLettersType2.s,Interface_UpdatePerfectLettersType2,0x8011B9E0,0x164
+asm/non_matchings/code/z_parameter/Interface_UpdatePerfectLettersType3.s,Interface_UpdatePerfectLettersType3,0x8011BF70,0x155
+asm/non_matchings/code/z_parameter/Interface_DrawPerfectLetters.s,Interface_DrawPerfectLetters,0x8011C4C4,0xD1
asm/non_matchings/code/z_parameter/Interface_StartMoonCrash.s,Interface_StartMoonCrash,0x8011C808,0x24
asm/non_matchings/code/z_parameter/Interface_GetTimerDigits.s,Interface_GetTimerDigits,0x8011C898,0x73
asm/non_matchings/code/z_parameter/Interface_DrawTimers.s,Interface_DrawTimers,0x8011CA64,0x654
asm/non_matchings/code/z_parameter/Interface_UpdateBottleTimers.s,Interface_UpdateBottleTimers,0x8011E3B4,0xDF
-asm/non_matchings/code/z_parameter/func_8011E730.s,func_8011E730,0x8011E730,0x26C
-asm/non_matchings/code/z_parameter/func_8011F0E0.s,func_8011F0E0,0x8011F0E0,0x7AC
-asm/non_matchings/code/z_parameter/func_80120F90.s,func_80120F90,0x80120F90,0x35
-asm/non_matchings/code/z_parameter/func_80121064.s,func_80121064,0x80121064,0x1F
-asm/non_matchings/code/z_parameter/func_801210E0.s,func_801210E0,0x801210E0,0x3AD
+asm/non_matchings/code/z_parameter/Interface_DrawMinigameIcons.s,Interface_DrawMinigameIcons,0x8011E730,0x26C
+asm/non_matchings/code/z_parameter/Interface_Draw.s,Interface_Draw,0x8011F0E0,0x7AC
+asm/non_matchings/code/z_parameter/Interface_LoadStory.s,Interface_LoadStory,0x80120F90,0x35
+asm/non_matchings/code/z_parameter/Interface_AllocStory.s,Interface_AllocStory,0x80121064,0x1F
+asm/non_matchings/code/z_parameter/Interface_Update.s,Interface_Update,0x801210E0,0x3AD
asm/non_matchings/code/z_parameter/Interface_Destroy.s,Interface_Destroy,0x80121F94,0xC
-asm/non_matchings/code/z_parameter/func_80121FC4.s,func_80121FC4,0x80121FC4,0x147
+asm/non_matchings/code/z_parameter/Interface_Init.s,Interface_Init,0x80121FC4,0x147
asm/non_matchings/code/z_path/func_801224E0.s,func_801224E0,0x801224E0,0x11
asm/non_matchings/code/z_path/func_80122524.s,func_80122524,0x80122524,0x2A
asm/non_matchings/code/z_path/func_801225CC.s,func_801225CC,0x801225CC,0x25
@@ -1716,12 +1716,12 @@ asm/non_matchings/code/z_player_lib/func_801235DC.s,func_801235DC,0x801235DC,0x1
asm/non_matchings/code/z_player_lib/func_8012364C.s,func_8012364C,0x8012364C,0x71
asm/non_matchings/code/z_player_lib/func_80123810.s,func_80123810,0x80123810,0x54
asm/non_matchings/code/z_player_lib/Player_ActionToModelGroup.s,Player_ActionToModelGroup,0x80123960,0x13
-asm/non_matchings/code/z_player_lib/func_801239AC.s,func_801239AC,0x801239AC,0x3E
+asm/non_matchings/code/z_player_lib/Player_SetModelsForHoldingShield.s,Player_SetModelsForHoldingShield,0x801239AC,0x3E
asm/non_matchings/code/z_player_lib/Player_SetModels.s,Player_SetModels,0x80123AA4,0x4C
asm/non_matchings/code/z_player_lib/Player_SetModelGroup.s,Player_SetModelGroup,0x80123BD4,0x21
asm/non_matchings/code/z_player_lib/func_80123C58.s,func_80123C58,0x80123C58,0xE
asm/non_matchings/code/z_player_lib/Player_SetEquipmentData.s,Player_SetEquipmentData,0x80123C90,0x30
-asm/non_matchings/code/z_player_lib/func_80123D50.s,func_80123D50,0x80123D50,0x15
+asm/non_matchings/code/z_player_lib/Player_UpdateBottleHeld.s,Player_UpdateBottleHeld,0x80123D50,0x15
asm/non_matchings/code/z_player_lib/func_80123DA4.s,func_80123DA4,0x80123DA4,0x7
asm/non_matchings/code/z_player_lib/func_80123DC0.s,func_80123DC0,0x80123DC0,0x34
asm/non_matchings/code/z_player_lib/func_80123E90.s,func_80123E90,0x80123E90,0x21
@@ -1735,23 +1735,23 @@ asm/non_matchings/code/z_player_lib/Player_HasMirrorShieldEquipped.s,Player_HasM
asm/non_matchings/code/z_player_lib/Player_IsHoldingMirrorShield.s,Player_IsHoldingMirrorShield,0x80124088,0x10
asm/non_matchings/code/z_player_lib/Player_IsHoldingHookshot.s,Player_IsHoldingHookshot,0x801240C8,0x5
asm/non_matchings/code/z_player_lib/func_801240DC.s,func_801240DC,0x801240DC,0xD
-asm/non_matchings/code/z_player_lib/func_80124110.s,func_80124110,0x80124110,0xE
-asm/non_matchings/code/z_player_lib/func_80124148.s,func_80124148,0x80124148,0x8
-asm/non_matchings/code/z_player_lib/Player_ActionToMeleeWeapon.s,Player_ActionToMeleeWeapon,0x80124168,0xA
+asm/non_matchings/code/z_player_lib/Player_BButtonSwordFromIA.s,Player_BButtonSwordFromIA,0x80124110,0xE
+asm/non_matchings/code/z_player_lib/Player_GetHeldBButtonSword.s,Player_GetHeldBButtonSword,0x80124148,0x8
+asm/non_matchings/code/z_player_lib/Player_MeleeWeaponFromIA.s,Player_MeleeWeaponFromIA,0x80124168,0xA
asm/non_matchings/code/z_player_lib/Player_GetMeleeWeaponHeld.s,Player_GetMeleeWeaponHeld,0x80124190,0x9
asm/non_matchings/code/z_player_lib/Player_IsHoldingTwoHandedWeapon.s,Player_IsHoldingTwoHandedWeapon,0x801241B4,0xB
-asm/non_matchings/code/z_player_lib/Player_ActionToBottle.s,Player_ActionToBottle,0x801241E0,0xB
+asm/non_matchings/code/z_player_lib/Player_BottleFromIA.s,Player_BottleFromIA,0x801241E0,0xB
asm/non_matchings/code/z_player_lib/Player_GetBottleHeld.s,Player_GetBottleHeld,0x8012420C,0x8
-asm/non_matchings/code/z_player_lib/Player_ActionToExplosive.s,Player_ActionToExplosive,0x8012422C,0xB
+asm/non_matchings/code/z_player_lib/Player_ExplosiveFromIA.s,Player_ExplosiveFromIA,0x8012422C,0xB
asm/non_matchings/code/z_player_lib/Player_GetExplosiveHeld.s,Player_GetExplosiveHeld,0x80124258,0x8
-asm/non_matchings/code/z_player_lib/func_80124278.s,func_80124278,0x80124278,0xF
+asm/non_matchings/code/z_player_lib/Player_SwordFromIA.s,Player_SwordFromIA,0x80124278,0xF
asm/non_matchings/code/z_player_lib/func_801242B4.s,func_801242B4,0x801242B4,0xA
-asm/non_matchings/code/z_player_lib/Player_GetEnvTimerType.s,Player_GetEnvTimerType,0x801242DC,0x51
-asm/non_matchings/code/z_player_lib/func_80124420.s,func_80124420,0x80124420,0x7E
+asm/non_matchings/code/z_player_lib/Player_GetEnvironmentalHazard.s,Player_GetEnvironmentalHazard,0x801242DC,0x51
+asm/non_matchings/code/z_player_lib/Player_UpdateBunnyEars.s,Player_UpdateBunnyEars,0x80124420,0x7E
asm/non_matchings/code/z_player_lib/func_80124618.s,func_80124618,0x80124618,0x37
-asm/non_matchings/code/z_player_lib/func_801246F4.s,func_801246F4,0x801246F4,0x5F
-asm/non_matchings/code/z_player_lib/func_80124870.s,func_80124870,0x80124870,0x115
-asm/non_matchings/code/z_player_lib/func_80124CC4.s,func_80124CC4,0x80124CC4,0x95
+asm/non_matchings/code/z_player_lib/Player_DrawImpl.s,Player_DrawImpl,0x801246F4,0x5F
+asm/non_matchings/code/z_player_lib/Player_AdjustSingleLeg.s,Player_AdjustSingleLeg,0x80124870,0x115
+asm/non_matchings/code/z_player_lib/Player_DrawHookshotReticle.s,Player_DrawHookshotReticle,0x80124CC4,0x95
asm/non_matchings/code/z_player_lib/func_80124F18.s,func_80124F18,0x80124F18,0x36
asm/non_matchings/code/z_player_lib/func_80124FF0.s,func_80124FF0,0x80124FF0,0x75
asm/non_matchings/code/z_player_lib/func_801251C4.s,func_801251C4,0x801251C4,0x55
@@ -1760,13 +1760,13 @@ asm/non_matchings/code/z_player_lib/func_80125340.s,func_80125340,0x80125340,0xB
asm/non_matchings/code/z_player_lib/func_8012536C.s,func_8012536C,0x8012536C,0xE
asm/non_matchings/code/z_player_lib/Player_DrawZoraShield.s,Player_DrawZoraShield,0x801253A4,0x57
asm/non_matchings/code/z_player_lib/func_80125500.s,func_80125500,0x80125500,0x20
-asm/non_matchings/code/z_player_lib/func_80125580.s,func_80125580,0x80125580,0x1D8
+asm/non_matchings/code/z_player_lib/Player_OverrideLimbDrawGameplayCommon.s,Player_OverrideLimbDrawGameplayCommon,0x80125580,0x1D8
asm/non_matchings/code/z_player_lib/func_80125CE0.s,func_80125CE0,0x80125CE0,0x1B
-asm/non_matchings/code/z_player_lib/func_80125D4C.s,func_80125D4C,0x80125D4C,0x15F
-asm/non_matchings/code/z_player_lib/func_801262C8.s,func_801262C8,0x801262C8,0x4D
-asm/non_matchings/code/z_player_lib/func_801263FC.s,func_801263FC,0x801263FC,0x11
+asm/non_matchings/code/z_player_lib/Player_OverrideLimbDrawGameplayDefault.s,Player_OverrideLimbDrawGameplayDefault,0x80125D4C,0x15F
+asm/non_matchings/code/z_player_lib/Player_OverrideLimbDrawGameplayFirstPerson.s,Player_OverrideLimbDrawGameplayFirstPerson,0x801262C8,0x4D
+asm/non_matchings/code/z_player_lib/Player_OverrideLimbDrawGameplayCrawling.s,Player_OverrideLimbDrawGameplayCrawling,0x801263FC,0x11
asm/non_matchings/code/z_player_lib/func_80126440.s,func_80126440,0x80126440,0x62
-asm/non_matchings/code/z_player_lib/func_801265C8.s,func_801265C8,0x801265C8,0x35
+asm/non_matchings/code/z_player_lib/Player_UpdateShieldCollider.s,Player_UpdateShieldCollider,0x801265C8,0x35
asm/non_matchings/code/z_player_lib/func_8012669C.s,func_8012669C,0x8012669C,0x5B
asm/non_matchings/code/z_player_lib/Player_DrawGetItemImpl.s,Player_DrawGetItemImpl,0x80126808,0x5D
asm/non_matchings/code/z_player_lib/Player_DrawGetItem.s,Player_DrawGetItem,0x8012697C,0x4E
@@ -1777,17 +1777,17 @@ asm/non_matchings/code/z_player_lib/func_801271B0.s,func_801271B0,0x801271B0,0xA
asm/non_matchings/code/z_player_lib/func_80127438.s,func_80127438,0x80127438,0x14
asm/non_matchings/code/z_player_lib/func_80127488.s,func_80127488,0x80127488,0x31
asm/non_matchings/code/z_player_lib/Player_DrawCouplesMask.s,Player_DrawCouplesMask,0x8012754C,0x12
-asm/non_matchings/code/z_player_lib/func_80127594.s,func_80127594,0x80127594,0xD9
-asm/non_matchings/code/z_player_lib/func_801278F8.s,func_801278F8,0x801278F8,0x5A
-asm/non_matchings/code/z_player_lib/func_80127A60.s,func_80127A60,0x80127A60,0x41
+asm/non_matchings/code/z_player_lib/Player_DrawCircusLeadersMask.s,Player_DrawCircusLeadersMask,0x80127594,0xD9
+asm/non_matchings/code/z_player_lib/Player_DrawBlastMask.s,Player_DrawBlastMask,0x801278F8,0x5A
+asm/non_matchings/code/z_player_lib/Player_DrawBunnyHood.s,Player_DrawBunnyHood,0x80127A60,0x41
asm/non_matchings/code/z_player_lib/func_80127B64.s,func_80127B64,0x80127B64,0x21
-asm/non_matchings/code/z_player_lib/func_80127BE8.s,func_80127BE8,0x80127BE8,0x6F
+asm/non_matchings/code/z_player_lib/Player_DrawStrayFairyParticles.s,Player_DrawStrayFairyParticles,0x80127BE8,0x6F
asm/non_matchings/code/z_player_lib/func_80127DA4.s,func_80127DA4,0x80127DA4,0x179
asm/non_matchings/code/z_player_lib/func_80128388.s,func_80128388,0x80128388,0x46
-asm/non_matchings/code/z_player_lib/func_801284A0.s,func_801284A0,0x801284A0,0x68
+asm/non_matchings/code/z_player_lib/Player_DrawGreatFairysMask.s,Player_DrawGreatFairysMask,0x801284A0,0x68
asm/non_matchings/code/z_player_lib/func_80128640.s,func_80128640,0x80128640,0x14D
-asm/non_matchings/code/z_player_lib/func_80128B74.s,func_80128B74,0x80128B74,0x17
-asm/non_matchings/code/z_player_lib/func_80128BD0.s,func_80128BD0,0x80128BD0,0x4C8
+asm/non_matchings/code/z_player_lib/Player_SetFeetPos.s,Player_SetFeetPos,0x80128B74,0x17
+asm/non_matchings/code/z_player_lib/Player_PostLimbDrawGameplay.s,Player_PostLimbDrawGameplay,0x80128BD0,0x4C8
asm/non_matchings/code/z_prenmi/PreNMI_Stop.s,PreNMI_Stop,0x80129EF0,0x5
asm/non_matchings/code/z_prenmi/PreNMI_Update.s,PreNMI_Update,0x80129F04,0x12
asm/non_matchings/code/z_prenmi/PreNMI_Draw.s,PreNMI_Draw,0x80129F4C,0x2B
@@ -1905,14 +1905,14 @@ asm/non_matchings/code/z_rcp/Gfx_PrimColor.s,Gfx_PrimColor,0x8012CEA8,0x19
asm/non_matchings/code/z_rcp/func_8012CF0C.s,func_8012CF0C,0x8012CF0C,0x11A
asm/non_matchings/code/z_rcp/func_8012D374.s,func_8012D374,0x8012D374,0x26
asm/non_matchings/code/z_rcp/func_8012D40C.s,func_8012D40C,0x8012D40C,0x3D
-asm/non_matchings/code/z_room/Room_nop8012D510.s,Room_nop8012D510,0x8012D510,0x6
-asm/non_matchings/code/z_room/Room_DrawType3Mesh.s,Room_DrawType3Mesh,0x8012D528,0x5
-asm/non_matchings/code/z_room/Room_DrawType0Mesh.s,Room_DrawType0Mesh,0x8012D53C,0x85
-asm/non_matchings/code/z_room/Room_DrawType2Mesh.s,Room_DrawType2Mesh,0x8012D750,0x1E6
-asm/non_matchings/code/z_room/func_8012DEE8.s,func_8012DEE8,0x8012DEE8,0xDB
-asm/non_matchings/code/z_room/func_8012E254.s,func_8012E254,0x8012E254,0x36
-asm/non_matchings/code/z_room/func_8012E32C.s,func_8012E32C,0x8012E32C,0xDF
-asm/non_matchings/code/z_room/Room_DrawType1Mesh.s,Room_DrawType1Mesh,0x8012E6A8,0x1A
+asm/non_matchings/code/z_room/Room_Noop.s,Room_Noop,0x8012D510,0x6
+asm/non_matchings/code/z_room/Room_DrawNone.s,Room_DrawNone,0x8012D528,0x5
+asm/non_matchings/code/z_room/Room_DrawNormal.s,Room_DrawNormal,0x8012D53C,0x85
+asm/non_matchings/code/z_room/Room_DrawCullable.s,Room_DrawCullable,0x8012D750,0x1E6
+asm/non_matchings/code/z_room/Room_DrawImageSingle.s,Room_DrawImageSingle,0x8012DEE8,0xDB
+asm/non_matchings/code/z_room/Room_GetImageMultiBgEntry.s,Room_GetImageMultiBgEntry,0x8012E254,0x36
+asm/non_matchings/code/z_room/Room_DrawImageMulti.s,Room_DrawImageMulti,0x8012E32C,0xDF
+asm/non_matchings/code/z_room/Room_DrawImage.s,Room_DrawImage,0x8012E6A8,0x1A
asm/non_matchings/code/z_room/Room_Init.s,Room_Init,0x8012E710,0x10
asm/non_matchings/code/z_room/Room_AllocateAndLoad.s,Room_AllocateAndLoad,0x8012E750,0x87
asm/non_matchings/code/z_room/Room_StartRoomTransition.s,Room_StartRoomTransition,0x8012E96C,0x4F
@@ -1936,43 +1936,43 @@ asm/non_matchings/code/z_scene/Object_GetIndex.s,Object_GetIndex,0x8012F608,0x18
asm/non_matchings/code/z_scene/Object_IsLoaded.s,Object_IsLoaded,0x8012F668,0xC
asm/non_matchings/code/z_scene/Object_LoadAll.s,Object_LoadAll,0x8012F698,0x29
asm/non_matchings/code/z_scene/func_8012F73C.s,func_8012F73C,0x8012F73C,0x18
-asm/non_matchings/code/z_scene/Scene_HeaderCmdSpawnList.s,Scene_HeaderCmdSpawnList,0x8012F79C,0x5C
-asm/non_matchings/code/z_scene/Scene_HeaderCmdActorList.s,Scene_HeaderCmdActorList,0x8012F90C,0x12
-asm/non_matchings/code/z_scene/Scene_HeaderCmdActorCutsceneCamList.s,Scene_HeaderCmdActorCutsceneCamList,0x8012F954,0xC
-asm/non_matchings/code/z_scene/Scene_HeaderCmdColHeader.s,Scene_HeaderCmdColHeader,0x8012F984,0x28
-asm/non_matchings/code/z_scene/Scene_HeaderCmdRoomList.s,Scene_HeaderCmdRoomList,0x8012FA24,0x11
-asm/non_matchings/code/z_scene/Scene_HeaderCmdEntranceList.s,Scene_HeaderCmdEntranceList,0x8012FA68,0xC
-asm/non_matchings/code/z_scene/Scene_HeaderCmdSpecialFiles.s,Scene_HeaderCmdSpecialFiles,0x8012FA98,0x32
-asm/non_matchings/code/z_scene/Scene_HeaderCmdRoomBehavior.s,Scene_HeaderCmdRoomBehavior,0x8012FB60,0x22
-asm/non_matchings/code/z_scene/Scene_HeaderCmdMesh.s,Scene_HeaderCmdMesh,0x8012FBE8,0xC
-asm/non_matchings/code/z_scene/Scene_HeaderCmdObjectList.s,Scene_HeaderCmdObjectList,0x8012FC18,0x63
-asm/non_matchings/code/z_scene/Scene_HeaderCmdLightList.s,Scene_HeaderCmdLightList,0x8012FDA4,0x22
-asm/non_matchings/code/z_scene/Scene_HeaderCmdPathList.s,Scene_HeaderCmdPathList,0x8012FE2C,0xC
-asm/non_matchings/code/z_scene/Scene_HeaderCmdTransiActorList.s,Scene_HeaderCmdTransiActorList,0x8012FE5C,0x18
+asm/non_matchings/code/z_scene/Scene_CommandSpawnList.s,Scene_CommandSpawnList,0x8012F79C,0x5C
+asm/non_matchings/code/z_scene/Scene_CommandActorList.s,Scene_CommandActorList,0x8012F90C,0x12
+asm/non_matchings/code/z_scene/Scene_CommandActorCutsceneCamList.s,Scene_CommandActorCutsceneCamList,0x8012F954,0xC
+asm/non_matchings/code/z_scene/Scene_CommandCollisionHeader.s,Scene_CommandCollisionHeader,0x8012F984,0x28
+asm/non_matchings/code/z_scene/Scene_CommandRoomList.s,Scene_CommandRoomList,0x8012FA24,0x11
+asm/non_matchings/code/z_scene/Scene_CommandEntranceList.s,Scene_CommandEntranceList,0x8012FA68,0xC
+asm/non_matchings/code/z_scene/Scene_CommandSpecialFiles.s,Scene_CommandSpecialFiles,0x8012FA98,0x32
+asm/non_matchings/code/z_scene/Scene_CommandRoomBehavior.s,Scene_CommandRoomBehavior,0x8012FB60,0x22
+asm/non_matchings/code/z_scene/Scene_CommandMesh.s,Scene_CommandMesh,0x8012FBE8,0xC
+asm/non_matchings/code/z_scene/Scene_CommandObjectList.s,Scene_CommandObjectList,0x8012FC18,0x63
+asm/non_matchings/code/z_scene/Scene_CommandLightList.s,Scene_CommandLightList,0x8012FDA4,0x22
+asm/non_matchings/code/z_scene/Scene_CommandPathList.s,Scene_CommandPathList,0x8012FE2C,0xC
+asm/non_matchings/code/z_scene/Scene_CommandTransiActorList.s,Scene_CommandTransiActorList,0x8012FE5C,0x18
asm/non_matchings/code/z_scene/Door_InitContext.s,Door_InitContext,0x8012FEBC,0x4
-asm/non_matchings/code/z_scene/Scene_HeaderCmdEnvLightSettings.s,Scene_HeaderCmdEnvLightSettings,0x8012FECC,0x11
+asm/non_matchings/code/z_scene/Scene_CommandEnvLightSettings.s,Scene_CommandEnvLightSettings,0x8012FECC,0x11
asm/non_matchings/code/z_scene/Scene_LoadAreaTextures.s,Scene_LoadAreaTextures,0x8012FF10,0x1F
-asm/non_matchings/code/z_scene/Scene_HeaderCmdSkyboxSettings.s,Scene_HeaderCmdSkyboxSettings,0x8012FF8C,0x19
-asm/non_matchings/code/z_scene/Scene_HeaderCmdSkyboxDisables.s,Scene_HeaderCmdSkyboxDisables,0x8012FFF0,0xA
-asm/non_matchings/code/z_scene/Scene_HeaderCmdTimeSettings.s,Scene_HeaderCmdTimeSettings,0x80130018,0xC9
-asm/non_matchings/code/z_scene/Scene_HeaderCmdWindSettings.s,Scene_HeaderCmdWindSettings,0x8013033C,0x19
-asm/non_matchings/code/z_scene/Scene_HeaderCmdExitList.s,Scene_HeaderCmdExitList,0x801303A0,0xC
-asm/non_matchings/code/z_scene/Scene_HeaderCmd09.s,Scene_HeaderCmd09,0x801303D0,0x4
-asm/non_matchings/code/z_scene/Scene_HeaderCmdSoundSettings.s,Scene_HeaderCmdSoundSettings,0x801303E0,0x17
-asm/non_matchings/code/z_scene/Scene_HeaderCmdEchoSetting.s,Scene_HeaderCmdEchoSetting,0x8013043C,0x6
-asm/non_matchings/code/z_scene/Scene_HeaderCmdAltHeaderList.s,Scene_HeaderCmdAltHeaderList,0x80130454,0x1E
-asm/non_matchings/code/z_scene/Scene_HeaderCmdCutsceneList.s,Scene_HeaderCmdCutsceneList,0x801304CC,0xD
-asm/non_matchings/code/z_scene/Scene_HeaderCmdActorCutsceneList.s,Scene_HeaderCmdActorCutsceneList,0x80130500,0x10
-asm/non_matchings/code/z_scene/Scene_HeaderCmdMiniMap.s,Scene_HeaderCmdMiniMap,0x80130540,0xE
-asm/non_matchings/code/z_scene/Scene_HeaderCmd1D.s,Scene_HeaderCmd1D,0x80130578,0x4
-asm/non_matchings/code/z_scene/Scene_HeaderCmdMiniMapCompassInfo.s,Scene_HeaderCmdMiniMapCompassInfo,0x80130588,0xA
-asm/non_matchings/code/z_scene/Scene_HeaderCmdSetRegionVisitedFlag.s,Scene_HeaderCmdSetRegionVisitedFlag,0x801305B0,0x31
-asm/non_matchings/code/z_scene/Scene_HeaderCmdAnimatedMaterials.s,Scene_HeaderCmdAnimatedMaterials,0x80130674,0xC
+asm/non_matchings/code/z_scene/Scene_CommandSkyboxSettings.s,Scene_CommandSkyboxSettings,0x8012FF8C,0x19
+asm/non_matchings/code/z_scene/Scene_CommandSkyboxDisables.s,Scene_CommandSkyboxDisables,0x8012FFF0,0xA
+asm/non_matchings/code/z_scene/Scene_CommandTimeSettings.s,Scene_CommandTimeSettings,0x80130018,0xC9
+asm/non_matchings/code/z_scene/Scene_CommandWindSettings.s,Scene_CommandWindSettings,0x8013033C,0x19
+asm/non_matchings/code/z_scene/Scene_CommandExitList.s,Scene_CommandExitList,0x801303A0,0xC
+asm/non_matchings/code/z_scene/Scene_Command09.s,Scene_Command09,0x801303D0,0x4
+asm/non_matchings/code/z_scene/Scene_CommandSoundSettings.s,Scene_CommandSoundSettings,0x801303E0,0x17
+asm/non_matchings/code/z_scene/Scene_CommandEchoSetting.s,Scene_CommandEchoSetting,0x8013043C,0x6
+asm/non_matchings/code/z_scene/Scene_CommandAltHeaderList.s,Scene_CommandAltHeaderList,0x80130454,0x1E
+asm/non_matchings/code/z_scene/Scene_CommandCutsceneScriptList.s,Scene_CommandCutsceneScriptList,0x801304CC,0xD
+asm/non_matchings/code/z_scene/Scene_CommandCutsceneList.s,Scene_CommandCutsceneList,0x80130500,0x10
+asm/non_matchings/code/z_scene/Scene_CommandMiniMap.s,Scene_CommandMiniMap,0x80130540,0xE
+asm/non_matchings/code/z_scene/Scene_Command1D.s,Scene_Command1D,0x80130578,0x4
+asm/non_matchings/code/z_scene/Scene_CommandMiniMapCompassInfo.s,Scene_CommandMiniMapCompassInfo,0x80130588,0xA
+asm/non_matchings/code/z_scene/Scene_CommandSetRegionVisitedFlag.s,Scene_CommandSetRegionVisitedFlag,0x801305B0,0x31
+asm/non_matchings/code/z_scene/Scene_CommandAnimatedMaterials.s,Scene_CommandAnimatedMaterials,0x80130674,0xC
asm/non_matchings/code/z_scene/Scene_SetExitFade.s,Scene_SetExitFade,0x801306A4,0x11
-asm/non_matchings/code/z_scene/Scene_ProcessHeader.s,Scene_ProcessHeader,0x801306E8,0x20
+asm/non_matchings/code/z_scene/Scene_ExecuteCommands.s,Scene_ExecuteCommands,0x801306E8,0x20
asm/non_matchings/code/z_scene/Entrance_Create.s,Entrance_Create,0x80130768,0x7
asm/non_matchings/code/z_scene/Entrance_CreateFromSpawn.s,Entrance_CreateFromSpawn,0x80130784,0xF
-asm/non_matchings/code/z_scene_proc/Scene_ExecuteDrawConfig.s,Scene_ExecuteDrawConfig,0x801307C0,0xD
+asm/non_matchings/code/z_scene_proc/Scene_Draw.s,Scene_Draw,0x801307C0,0xD
asm/non_matchings/code/z_scene_proc/Scene_DrawConfigDefault.s,Scene_DrawConfigDefault,0x801307F4,0x10
asm/non_matchings/code/z_scene_proc/AnimatedMat_TexScroll.s,AnimatedMat_TexScroll,0x80130834,0x1B
asm/non_matchings/code/z_scene_proc/AnimatedMat_DrawTexScroll.s,AnimatedMat_DrawTexScroll,0x801308A0,0x28
@@ -2051,7 +2051,7 @@ asm/non_matchings/code/z_skelanime/SkelAnime_Draw.s,SkelAnime_Draw,0x80134990,0x
asm/non_matchings/code/z_skelanime/SkelAnime_DrawLimbSV2.s,SkelAnime_DrawLimbSV2,0x80134B54,0x9A
asm/non_matchings/code/z_skelanime/SkelAnime_DrawFlex.s,SkelAnime_DrawFlex,0x80134DBC,0x90
asm/non_matchings/code/z_skelanime/SkelAnime_GetFrameData2.s,SkelAnime_GetFrameData2,0x80134FFC,0xF6
-asm/non_matchings/code/z_skelanime/Animation_GetLimbCount2.s,Animation_GetLimbCount2,0x801353D4,0x9
+asm/non_matchings/code/z_skelanime/Animation_GetLimbCountLegacy.s,Animation_GetLimbCountLegacy,0x801353D4,0x9
asm/non_matchings/code/z_skelanime/SkelAnime_GetTotalFrames2.s,SkelAnime_GetTotalFrames2,0x801353F8,0x9
asm/non_matchings/code/z_skelanime/SkelAnime_GetFrameCount2.s,SkelAnime_GetFrameCount2,0x8013541C,0xB
asm/non_matchings/code/z_skelanime/SkelAnime_InterpFrameTable.s,SkelAnime_InterpFrameTable,0x80135448,0x120
@@ -2072,29 +2072,29 @@ asm/non_matchings/code/z_skelanime/AnimationContext_CopyTrue.s,AnimationContext_
asm/non_matchings/code/z_skelanime/AnimationContext_CopyFalse.s,AnimationContext_CopyFalse,0x80135DB8,0x21
asm/non_matchings/code/z_skelanime/AnimationContext_MoveActor.s,AnimationContext_MoveActor,0x80135E3C,0x2B
asm/non_matchings/code/z_skelanime/AnimationContext_Update.s,AnimationContext_Update,0x80135EE8,0x28
-asm/non_matchings/code/z_skelanime/SkelAnime_InitLinkAnimetion.s,SkelAnime_InitLinkAnimetion,0x80135F88,0x48
-asm/non_matchings/code/z_skelanime/LinkAnimation_SetUpdateFunction.s,LinkAnimation_SetUpdateFunction,0x801360A8,0xE
-asm/non_matchings/code/z_skelanime/LinkAnimation_Update.s,LinkAnimation_Update,0x801360E0,0x9
-asm/non_matchings/code/z_skelanime/LinkAnimation_Morph.s,LinkAnimation_Morph,0x80136104,0x2E
-asm/non_matchings/code/z_skelanime/LinkAnimation_AnimateFrame.s,LinkAnimation_AnimateFrame,0x801361BC,0x33
-asm/non_matchings/code/z_skelanime/LinkAnimation_Loop.s,LinkAnimation_Loop,0x80136288,0x25
-asm/non_matchings/code/z_skelanime/LinkAnimation_Once.s,LinkAnimation_Once,0x8013631C,0x35
+asm/non_matchings/code/z_skelanime/SkelAnime_InitPlayerAnimetion.s,SkelAnime_InitPlayerAnimetion,0x80135F88,0x48
+asm/non_matchings/code/z_skelanime/PlayerAnimation_SetUpdateFunction.s,PlayerAnimation_SetUpdateFunction,0x801360A8,0xE
+asm/non_matchings/code/z_skelanime/PlayerAnimation_Update.s,PlayerAnimation_Update,0x801360E0,0x9
+asm/non_matchings/code/z_skelanime/PlayerAnimation_Morph.s,PlayerAnimation_Morph,0x80136104,0x2E
+asm/non_matchings/code/z_skelanime/PlayerAnimation_AnimateFrame.s,PlayerAnimation_AnimateFrame,0x801361BC,0x33
+asm/non_matchings/code/z_skelanime/PlayerAnimation_Loop.s,PlayerAnimation_Loop,0x80136288,0x25
+asm/non_matchings/code/z_skelanime/PlayerAnimation_Once.s,PlayerAnimation_Once,0x8013631C,0x35
asm/non_matchings/code/z_skelanime/Animation_SetMorph.s,Animation_SetMorph,0x801363F0,0x9
-asm/non_matchings/code/z_skelanime/LinkAnimation_Change.s,LinkAnimation_Change,0x80136414,0x5E
-asm/non_matchings/code/z_skelanime/LinkAnimation_ChangeDefaultStop.s,LinkAnimation_ChangeDefaultStop,0x8013658C,0x18
-asm/non_matchings/code/z_skelanime/LinkAnimation_ChangePlaybackStop.s,LinkAnimation_ChangePlaybackStop,0x801365EC,0x19
-asm/non_matchings/code/z_skelanime/LinkAnimation_ChangeDefaultRepeat.s,LinkAnimation_ChangeDefaultRepeat,0x80136650,0x17
-asm/non_matchings/code/z_skelanime/LinkAnimation_ChangePlaybackRepeat.s,LinkAnimation_ChangePlaybackRepeat,0x801366AC,0x18
-asm/non_matchings/code/z_skelanime/LinkAnimation_CopyJointToMorph.s,LinkAnimation_CopyJointToMorph,0x8013670C,0xC
-asm/non_matchings/code/z_skelanime/LinkAnimation_CopyMorphToJoint.s,LinkAnimation_CopyMorphToJoint,0x8013673C,0xC
-asm/non_matchings/code/z_skelanime/LinkAnimation_LoadToMorph.s,LinkAnimation_LoadToMorph,0x8013676C,0x11
-asm/non_matchings/code/z_skelanime/LinkAnimation_LoadToJoint.s,LinkAnimation_LoadToJoint,0x801367B0,0x11
-asm/non_matchings/code/z_skelanime/LinkAnimation_InterpJointMorph.s,LinkAnimation_InterpJointMorph,0x801367F4,0xE
-asm/non_matchings/code/z_skelanime/LinkAnimation_BlendToJoint.s,LinkAnimation_BlendToJoint,0x8013682C,0x28
-asm/non_matchings/code/z_skelanime/LinkAnimation_BlendToMorph.s,LinkAnimation_BlendToMorph,0x801368CC,0x28
-asm/non_matchings/code/z_skelanime/LinkAnimation_EndLoop.s,LinkAnimation_EndLoop,0x8013696C,0x9
+asm/non_matchings/code/z_skelanime/PlayerAnimation_Change.s,PlayerAnimation_Change,0x80136414,0x5E
+asm/non_matchings/code/z_skelanime/PlayerAnimation_ChangeDefaultStop.s,PlayerAnimation_ChangeDefaultStop,0x8013658C,0x18
+asm/non_matchings/code/z_skelanime/PlayerAnimation_ChangePlaybackStop.s,PlayerAnimation_ChangePlaybackStop,0x801365EC,0x19
+asm/non_matchings/code/z_skelanime/PlayerAnimation_ChangeDefaultRepeat.s,PlayerAnimation_ChangeDefaultRepeat,0x80136650,0x17
+asm/non_matchings/code/z_skelanime/PlayerAnimation_ChangePlaybackRepeat.s,PlayerAnimation_ChangePlaybackRepeat,0x801366AC,0x18
+asm/non_matchings/code/z_skelanime/PlayerAnimation_CopyJointToMorph.s,PlayerAnimation_CopyJointToMorph,0x8013670C,0xC
+asm/non_matchings/code/z_skelanime/PlayerAnimation_CopyMorphToJoint.s,PlayerAnimation_CopyMorphToJoint,0x8013673C,0xC
+asm/non_matchings/code/z_skelanime/PlayerAnimation_LoadToMorph.s,PlayerAnimation_LoadToMorph,0x8013676C,0x11
+asm/non_matchings/code/z_skelanime/PlayerAnimation_LoadToJoint.s,PlayerAnimation_LoadToJoint,0x801367B0,0x11
+asm/non_matchings/code/z_skelanime/PlayerAnimation_InterpJointMorph.s,PlayerAnimation_InterpJointMorph,0x801367F4,0xE
+asm/non_matchings/code/z_skelanime/PlayerAnimation_BlendToJoint.s,PlayerAnimation_BlendToJoint,0x8013682C,0x28
+asm/non_matchings/code/z_skelanime/PlayerAnimation_BlendToMorph.s,PlayerAnimation_BlendToMorph,0x801368CC,0x28
+asm/non_matchings/code/z_skelanime/PlayerAnimation_EndLoop.s,PlayerAnimation_EndLoop,0x8013696C,0x9
asm/non_matchings/code/z_skelanime/Animation_OnFrameImpl.s,Animation_OnFrameImpl,0x80136990,0x2E
-asm/non_matchings/code/z_skelanime/LinkAnimation_OnFrame.s,LinkAnimation_OnFrame,0x80136A48,0xD
+asm/non_matchings/code/z_skelanime/PlayerAnimation_OnFrame.s,PlayerAnimation_OnFrame,0x80136A48,0xD
asm/non_matchings/code/z_skelanime/SkelAnime_Init.s,SkelAnime_Init,0x80136A7C,0x2D
asm/non_matchings/code/z_skelanime/SkelAnime_InitFlex.s,SkelAnime_InitFlex,0x80136B30,0x2F
asm/non_matchings/code/z_skelanime/SkelAnime_InitSkin.s,SkelAnime_InitSkin,0x80136BEC,0x26
@@ -2215,7 +2215,7 @@ asm/non_matchings/code/z_sub_s/SubS_ActorPathing_MoveWithGravity.s,SubS_ActorPat
asm/non_matchings/code/z_sub_s/SubS_ActorPathing_MoveWithoutGravityReverse.s,SubS_ActorPathing_MoveWithoutGravityReverse,0x8013E07C,0xA
asm/non_matchings/code/z_sub_s/SubS_ActorPathing_SetNextPoint.s,SubS_ActorPathing_SetNextPoint,0x8013E0A4,0x49
asm/non_matchings/code/z_sub_s/SubS_ChangeAnimationBySpeedInfo.s,SubS_ChangeAnimationBySpeedInfo,0x8013E1C8,0x43
-asm/non_matchings/code/z_sub_s/SubS_StartActorCutscene.s,SubS_StartActorCutscene,0x8013E2D4,0x39
+asm/non_matchings/code/z_sub_s/SubS_StartCutscene.s,SubS_StartCutscene,0x8013E2D4,0x39
asm/non_matchings/code/z_sub_s/SubS_FillCutscenesList.s,SubS_FillCutscenesList,0x8013E3B8,0x3E
asm/non_matchings/code/z_sub_s/SubS_ConstructPlane.s,SubS_ConstructPlane,0x8013E4B0,0x47
asm/non_matchings/code/z_sub_s/SubS_LineSegVsPlane.s,SubS_LineSegVsPlane,0x8013E5CC,0x1D
@@ -2289,14 +2289,14 @@ asm/non_matchings/code/z_vismono/VisMono_DesaturateTLUT.s,VisMono_DesaturateTLUT
asm/non_matchings/code/z_vismono/VisMono_DesaturateDList.s,VisMono_DesaturateDList,0x80141C34,0x8B
asm/non_matchings/code/z_vismono/VisMono_Draw.s,VisMono_Draw,0x80141E60,0x7B
asm/non_matchings/code/z_vismono/VisMono_DrawOld.s,VisMono_DrawOld,0x8014204C,0x1D
-asm/non_matchings/code/code_801420C0/func_801420C0.s,func_801420C0,0x801420C0,0xD
-asm/non_matchings/code/code_801420C0/func_801420F4.s,func_801420F4,0x801420F4,0x3
-asm/non_matchings/code/code_801420C0/func_80142100.s,func_80142100,0x80142100,0xD0
+asm/non_matchings/code/z_viszbuf/VisZbuf_Init.s,VisZbuf_Init,0x801420C0,0xD
+asm/non_matchings/code/z_viszbuf/VisZbuf_Destroy.s,VisZbuf_Destroy,0x801420F4,0x3
+asm/non_matchings/code/z_viszbuf/VisZbuf_Draw.s,VisZbuf_Draw,0x80142100,0xD0
asm/non_matchings/code/z_vr_box/func_80142440.s,func_80142440,0x80142440,0x342
asm/non_matchings/code/z_vr_box/func_80143148.s,func_80143148,0x80143148,0x28
-asm/non_matchings/code/z_vr_box/func_801431E8.s,func_801431E8,0x801431E8,0x4F
+asm/non_matchings/code/z_vr_box/Skybox_Setup.s,Skybox_Setup,0x801431E8,0x4F
asm/non_matchings/code/z_vr_box/func_80143324.s,func_80143324,0x80143324,0x70
-asm/non_matchings/code/z_vr_box/func_801434E4.s,func_801434E4,0x801434E4,0x2F
+asm/non_matchings/code/z_vr_box/Skybox_Init.s,Skybox_Init,0x801434E4,0x2F
asm/non_matchings/code/z_vr_box_draw/func_801435A0.s,func_801435A0,0x801435A0,0x21
asm/non_matchings/code/z_vr_box_draw/func_80143624.s,func_80143624,0x80143624,0x11
asm/non_matchings/code/z_vr_box_draw/func_80143668.s,func_80143668,0x80143668,0xE7
@@ -2311,7 +2311,7 @@ asm/non_matchings/code/z_sram_NES/Sram_ResetSave.s,Sram_ResetSave,0x80144628,0x1
asm/non_matchings/code/z_sram_NES/Sram_GenerateRandomSaveFields.s,Sram_GenerateRandomSaveFields,0x80144684,0x83
asm/non_matchings/code/z_sram_NES/func_80144890.s,func_80144890,0x80144890,0x36
asm/non_matchings/code/z_sram_NES/Sram_InitDebugSave.s,Sram_InitDebugSave,0x80144968,0x4B
-asm/non_matchings/code/z_sram_NES/func_80144A94.s,func_80144A94,0x80144A94,0xF9
+asm/non_matchings/code/z_sram_NES/Sram_ResetSaveFromMoonCrash.s,Sram_ResetSaveFromMoonCrash,0x80144A94,0xF9
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
@@ -2338,7 +2338,7 @@ asm/non_matchings/code/z_message/func_80147520.s,func_80147520,0x80147520,0x11
asm/non_matchings/code/z_message/func_80147564.s,func_80147564,0x80147564,0x30
asm/non_matchings/code/z_message/Message_ShouldAdvance.s,Message_ShouldAdvance,0x80147624,0x44
asm/non_matchings/code/z_message/Message_ShouldAdvanceSilent.s,Message_ShouldAdvanceSilent,0x80147734,0x20
-asm/non_matchings/code/z_message/func_801477B4.s,func_801477B4,0x801477B4,0x19
+asm/non_matchings/code/z_message/Message_CloseTextbox.s,Message_CloseTextbox,0x801477B4,0x19
asm/non_matchings/code/z_message/func_80147818.s,func_80147818,0x80147818,0x1C0
asm/non_matchings/code/z_message/func_80147F18.s,func_80147F18,0x80147F18,0x190
asm/non_matchings/code/z_message/func_80148558.s,func_80148558,0x80148558,0x190
@@ -2367,7 +2367,7 @@ asm/non_matchings/code/z_message/func_80150A84.s,func_80150A84,0x80150A84,0xA1
asm/non_matchings/code/z_message/func_80150D08.s,func_80150D08,0x80150D08,0x1EA
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/func_80151938.s,func_80151938,0x80151938,0x4C
+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/func_80151C9C.s,func_80151C9C,0x80151C9C,0x42
@@ -2384,8 +2384,8 @@ asm/non_matchings/code/z_message/func_80153750.s,func_80153750,0x80153750,0x1CB
asm/non_matchings/code/z_message/func_80153E7C.s,func_80153E7C,0x80153E7C,0x1D
asm/non_matchings/code/z_message/func_80153EF0.s,func_80153EF0,0x80153EF0,0xB9
asm/non_matchings/code/z_message/func_801541D4.s,func_801541D4,0x801541D4,0x961
-asm/non_matchings/code/z_message/func_80156758.s,func_80156758,0x80156758,0x2D
-asm/non_matchings/code/z_message/func_8015680C.s,func_8015680C,0x8015680C,0x7A6
+asm/non_matchings/code/z_message/Message_Draw.s,Message_Draw,0x80156758,0x2D
+asm/non_matchings/code/z_message/Message_Update.s,Message_Update,0x8015680C,0x7A6
asm/non_matchings/code/z_message/func_801586A4.s,func_801586A4,0x801586A4,0xC
asm/non_matchings/code/z_message/Message_Init.s,Message_Init,0x801586D4,0x7F
asm/non_matchings/code/z_message_nes/Message_FindMessageNES.s,Message_FindMessageNES,0x801588D0,0x2E
@@ -2418,27 +2418,27 @@ asm/non_matchings/code/z_shrink_window/ShrinkWindow_Init.s,ShrinkWindow_Init,0x8
asm/non_matchings/code/z_shrink_window/ShrinkWindow_Destroy.s,ShrinkWindow_Destroy,0x80160CD4,0x4
asm/non_matchings/code/z_shrink_window/ShrinkWindow_Update.s,ShrinkWindow_Update,0x80160CE4,0x2D
asm/non_matchings/code/z_shrink_window/ShrinkWindow_Draw.s,ShrinkWindow_Draw,0x80160D98,0xFA
-asm/non_matchings/code/db_camera/func_80161180.s,func_80161180,0x80161180,0x7
-asm/non_matchings/code/db_camera/func_8016119C.s,func_8016119C,0x8016119C,0x24
-asm/non_matchings/code/db_camera/func_8016122C.s,func_8016122C,0x8016122C,0x23
-asm/non_matchings/code/db_camera/func_801612B8.s,func_801612B8,0x801612B8,0x1B8
-asm/non_matchings/code/db_camera/func_80161998.s,func_80161998,0x80161998,0x85
-asm/non_matchings/code/db_camera/func_80161BAC.s,func_80161BAC,0x80161BAC,0xD
-asm/non_matchings/code/db_camera/func_80161BE0.s,func_80161BE0,0x80161BE0,0xB
-asm/non_matchings/code/db_camera/func_80161C0C.s,func_80161C0C,0x80161C0C,0x5
-asm/non_matchings/code/db_camera/func_80161C20.s,func_80161C20,0x80161C20,0x8B
-asm/non_matchings/code/db_camera/func_80161E4C.s,func_80161E4C,0x80161E4C,0xA0
-asm/non_matchings/code/db_camera/func_801620CC.s,func_801620CC,0x801620CC,0xAC
-asm/non_matchings/code/db_camera/func_8016237C.s,func_8016237C,0x8016237C,0x1A
-asm/non_matchings/code/db_camera/func_801623E4.s,func_801623E4,0x801623E4,0x42
-asm/non_matchings/code/db_camera/func_801624EC.s,func_801624EC,0x801624EC,0x14
-asm/non_matchings/code/db_camera/func_8016253C.s,func_8016253C,0x8016253C,0x120
-asm/non_matchings/code/db_camera/func_801629BC.s,func_801629BC,0x801629BC,0x25
-asm/non_matchings/code/db_camera/func_80162A50.s,func_80162A50,0x80162A50,0x16A
-asm/non_matchings/code/db_camera/func_80162FF8.s,func_80162FF8,0x80162FF8,0x79
-asm/non_matchings/code/db_camera/func_801631DC.s,func_801631DC,0x801631DC,0x56
-asm/non_matchings/code/db_camera/func_80163334.s,func_80163334,0x80163334,0xCB
-asm/non_matchings/code/db_camera/func_80163660.s,func_80163660,0x80163660,0x28
+asm/non_matchings/code/cutscene_camera/func_80161180.s,func_80161180,0x80161180,0x7
+asm/non_matchings/code/cutscene_camera/CutsceneCamera_Init.s,CutsceneCamera_Init,0x8016119C,0x24
+asm/non_matchings/code/cutscene_camera/CutsceneCamera_Interpolate.s,CutsceneCamera_Interpolate,0x8016122C,0x23
+asm/non_matchings/code/cutscene_camera/CutsceneCamera_ProcessSpline.s,CutsceneCamera_ProcessSpline,0x801612B8,0x1B8
+asm/non_matchings/code/cutscene_camera/CutsceneCamera_UpdateSplines.s,CutsceneCamera_UpdateSplines,0x80161998,0x85
+asm/non_matchings/code/cutscene_camera/func_80161BAC.s,func_80161BAC,0x80161BAC,0xD
+asm/non_matchings/code/cutscene_camera/CutsceneCamera_SetState.s,CutsceneCamera_SetState,0x80161BE0,0xB
+asm/non_matchings/code/cutscene_camera/CutsceneCamera_Reset.s,CutsceneCamera_Reset,0x80161C0C,0x5
+asm/non_matchings/code/cutscene_camera/func_80161C20.s,func_80161C20,0x80161C20,0x8B
+asm/non_matchings/code/cutscene_camera/func_80161E4C.s,func_80161E4C,0x80161E4C,0xA0
+asm/non_matchings/code/cutscene_camera/func_801620CC.s,func_801620CC,0x801620CC,0xAC
+asm/non_matchings/code/cutscene_camera/func_8016237C.s,func_8016237C,0x8016237C,0x1A
+asm/non_matchings/code/cutscene_camera/func_801623E4.s,func_801623E4,0x801623E4,0x42
+asm/non_matchings/code/cutscene_camera/func_801624EC.s,func_801624EC,0x801624EC,0x14
+asm/non_matchings/code/cutscene_camera/func_8016253C.s,func_8016253C,0x8016253C,0x120
+asm/non_matchings/code/cutscene_camera/func_801629BC.s,func_801629BC,0x801629BC,0x25
+asm/non_matchings/code/cutscene_camera/func_80162A50.s,func_80162A50,0x80162A50,0x16A
+asm/non_matchings/code/cutscene_camera/func_80162FF8.s,func_80162FF8,0x80162FF8,0x79
+asm/non_matchings/code/cutscene_camera/func_801631DC.s,func_801631DC,0x801631DC,0x56
+asm/non_matchings/code/cutscene_camera/func_80163334.s,func_80163334,0x80163334,0xCB
+asm/non_matchings/code/cutscene_camera/func_80163660.s,func_80163660,0x80163660,0x28
asm/non_matchings/code/z_kaleido_manager/func_80163700.s,func_80163700,0x80163700,0x16
asm/non_matchings/code/z_kaleido_manager/func_80163758.s,func_80163758,0x80163758,0x17
asm/non_matchings/code/z_kaleido_manager/func_801637B4.s,func_801637B4,0x801637B4,0x14
@@ -2452,14 +2452,14 @@ asm/non_matchings/code/z_kaleido_scope_call/func_80163A58.s,func_80163A58,0x8016
asm/non_matchings/code/z_kaleido_scope_call/func_80163C0C.s,func_80163C0C,0x80163C0C,0x21
asm/non_matchings/code/z_fbdemo_dlftbls/Transition_Init.s,Transition_Init,0x80163C90,0x3C
asm/non_matchings/code/z_fbdemo_dlftbls/Transition_Destroy.s,Transition_Destroy,0x80163D80,0x10
-asm/non_matchings/code/z_fbdemo/func_80163DC0.s,func_80163DC0,0x80163DC0,0xF3
-asm/non_matchings/code/z_fbdemo/func_8016418C.s,func_8016418C,0x8016418C,0x30
-asm/non_matchings/code/z_fbdemo/func_8016424C.s,func_8016424C,0x8016424C,0x23
-asm/non_matchings/code/z_fbdemo/func_801642D8.s,func_801642D8,0x801642D8,0x58
-asm/non_matchings/code/z_fbdemo/func_80164438.s,func_80164438,0x80164438,0x45
-asm/non_matchings/code/z_fbdemo/func_8016454C.s,func_8016454C,0x8016454C,0x4B
-asm/non_matchings/code/z_fbdemo/func_80164678.s,func_80164678,0x80164678,0x4D
-asm/non_matchings/code/z_fbdemo/func_801647AC.s,func_801647AC,0x801647AC,0x3
+asm/non_matchings/code/z_fbdemo/TransitionTile_InitGraphics.s,TransitionTile_InitGraphics,0x80163DC0,0xF3
+asm/non_matchings/code/z_fbdemo/TransitionTile_InitVtxData.s,TransitionTile_InitVtxData,0x8016418C,0x30
+asm/non_matchings/code/z_fbdemo/TransitionTile_Destroy.s,TransitionTile_Destroy,0x8016424C,0x23
+asm/non_matchings/code/z_fbdemo/TransitionTile_Init.s,TransitionTile_Init,0x801642D8,0x58
+asm/non_matchings/code/z_fbdemo/TransitionTile_SetVtx.s,TransitionTile_SetVtx,0x80164438,0x45
+asm/non_matchings/code/z_fbdemo/TransitionTile_Draw.s,TransitionTile_Draw,0x8016454C,0x4B
+asm/non_matchings/code/z_fbdemo/TransitionTile_Suck.s,TransitionTile_Suck,0x80164678,0x4D
+asm/non_matchings/code/z_fbdemo/TransitionTile_Update.s,TransitionTile_Update,0x801647AC,0x3
asm/non_matchings/code/z_fbdemo/func_801647B8.s,func_801647B8,0x801647B8,0x6
asm/non_matchings/code/z_fbdemo_fade/TransitionFade_Start.s,TransitionFade_Start,0x801647D0,0x17
asm/non_matchings/code/z_fbdemo_fade/TransitionFade_Init.s,TransitionFade_Init,0x8016482C,0xB
@@ -2484,41 +2484,41 @@ asm/non_matchings/code/z_overlay/TransitionOverlay_Load.s,TransitionOverlay_Load
asm/non_matchings/code/z_overlay/TransitionOverlay_Free.s,TransitionOverlay_Free,0x8016537C,0x2F
asm/non_matchings/code/z_overlay/TransitionOverlay_ClearLoadInfo.s,TransitionOverlay_ClearLoadInfo,0x80165438,0x3
asm/non_matchings/code/z_overlay/TransitionOverlay_SetSegment.s,TransitionOverlay_SetSegment,0x80165444,0x7
-asm/non_matchings/code/z_play/func_80165460.s,func_80165460,0x80165460,0x6A
-asm/non_matchings/code/z_play/func_80165608.s,func_80165608,0x80165608,0xA
-asm/non_matchings/code/z_play/func_80165630.s,func_80165630,0x80165630,0xA
-asm/non_matchings/code/z_play/func_80165658.s,func_80165658,0x80165658,0x5
-asm/non_matchings/code/z_play/func_8016566C.s,func_8016566C,0x8016566C,0x9
-asm/non_matchings/code/z_play/func_80165690.s,func_80165690,0x80165690,0x5
-asm/non_matchings/code/z_play/func_801656A4.s,func_801656A4,0x801656A4,0x1C5
-asm/non_matchings/code/z_play/func_80165DB8.s,func_80165DB8,0x80165DB8,0x5
-asm/non_matchings/code/z_play/func_80165DCC.s,func_80165DCC,0x80165DCC,0x9
-asm/non_matchings/code/z_play/func_80165DF0.s,func_80165DF0,0x80165DF0,0x5
-asm/non_matchings/code/z_play/func_80165E04.s,func_80165E04,0x80165E04,0x6
-asm/non_matchings/code/z_play/func_80165E1C.s,func_80165E1C,0x80165E1C,0x18
-asm/non_matchings/code/z_play/func_80165E7C.s,func_80165E7C,0x80165E7C,0x11
-asm/non_matchings/code/z_play/func_80165EC0.s,func_80165EC0,0x80165EC0,0x68
-asm/non_matchings/code/z_play/func_80166060.s,func_80166060,0x80166060,0x16
-asm/non_matchings/code/z_play/func_801660B8.s,func_801660B8,0x801660B8,0x21
+asm/non_matchings/code/z_play/Play_DrawMotionBlur.s,Play_DrawMotionBlur,0x80165460,0x6A
+asm/non_matchings/code/z_play/Play_InitMotionBlur.s,Play_InitMotionBlur,0x80165608,0xA
+asm/non_matchings/code/z_play/Play_DestroyMotionBlur.s,Play_DestroyMotionBlur,0x80165630,0xA
+asm/non_matchings/code/z_play/Play_SetMotionBlurAlpha.s,Play_SetMotionBlurAlpha,0x80165658,0x5
+asm/non_matchings/code/z_play/Play_EnableMotionBlur.s,Play_EnableMotionBlur,0x8016566C,0x9
+asm/non_matchings/code/z_play/Play_DisableMotionBlur.s,Play_DisableMotionBlur,0x80165690,0x5
+asm/non_matchings/code/z_play/Play_ConvertRgba16ToIntensityImage.s,Play_ConvertRgba16ToIntensityImage,0x801656A4,0x1C5
+asm/non_matchings/code/z_play/Play_SetMotionBlurPriorityAlpha.s,Play_SetMotionBlurPriorityAlpha,0x80165DB8,0x5
+asm/non_matchings/code/z_play/Play_EnableMotionBlurPriority.s,Play_EnableMotionBlurPriority,0x80165DCC,0x9
+asm/non_matchings/code/z_play/Play_DisableMotionBlurPriority.s,Play_DisableMotionBlurPriority,0x80165DF0,0x5
+asm/non_matchings/code/z_play/Play_TriggerPictoPhoto.s,Play_TriggerPictoPhoto,0x80165E04,0x6
+asm/non_matchings/code/z_play/Play_TakePictoPhoto.s,Play_TakePictoPhoto,0x80165E1C,0x18
+asm/non_matchings/code/z_play/Play_ChooseDynamicTransition.s,Play_ChooseDynamicTransition,0x80165E7C,0x11
+asm/non_matchings/code/z_play/Play_SetupTransition.s,Play_SetupTransition,0x80165EC0,0x68
+asm/non_matchings/code/z_play/Play_ClearTransition.s,Play_ClearTransition,0x80166060,0x16
+asm/non_matchings/code/z_play/Play_SetFog.s,Play_SetFog,0x801660B8,0x21
asm/non_matchings/code/z_play/Play_Destroy.s,Play_Destroy,0x8016613C,0xA2
-asm/non_matchings/code/z_play/func_801663C4.s,func_801663C4,0x801663C4,0xA0
-asm/non_matchings/code/z_play/func_80166644.s,func_80166644,0x80166644,0x9C
-asm/non_matchings/code/z_play/func_801668B4.s,func_801668B4,0x801668B4,0x2D
-asm/non_matchings/code/z_play/func_80166968.s,func_80166968,0x80166968,0x72
-asm/non_matchings/code/z_play/func_80166B30.s,func_80166B30,0x80166B30,0x339
-asm/non_matchings/code/z_play/Play_Update.s,Play_Update,0x80167814,0x174
-asm/non_matchings/code/z_play/func_80167DE4.s,func_80167DE4,0x80167DE4,0x4A
-asm/non_matchings/code/z_play/func_80167F0C.s,func_80167F0C,0x80167F0C,0x61
-asm/non_matchings/code/z_play/Play_Draw.s,Play_Draw,0x80168090,0x347
-asm/non_matchings/code/z_play/func_80168DAC.s,func_80168DAC,0x80168DAC,0x6E
+asm/non_matchings/code/z_play/Play_CompressI8ToI5.s,Play_CompressI8ToI5,0x801663C4,0xA0
+asm/non_matchings/code/z_play/Play_DecompressI5ToI8.s,Play_DecompressI5ToI8,0x80166644,0x9C
+asm/non_matchings/code/z_play/Play_GetWaterSurface.s,Play_GetWaterSurface,0x801668B4,0x2D
+asm/non_matchings/code/z_play/Play_UpdateWaterCamera.s,Play_UpdateWaterCamera,0x80166968,0x72
+asm/non_matchings/code/z_play/Play_UpdateTransition.s,Play_UpdateTransition,0x80166B30,0x339
+asm/non_matchings/code/z_play/Play_UpdateMain.s,Play_UpdateMain,0x80167814,0x174
+asm/non_matchings/code/z_play/Play_Update.s,Play_Update,0x80167DE4,0x4A
+asm/non_matchings/code/z_play/Play_PostWorldDraw.s,Play_PostWorldDraw,0x80167F0C,0x61
+asm/non_matchings/code/z_play/Play_DrawMain.s,Play_DrawMain,0x80168090,0x347
+asm/non_matchings/code/z_play/Play_Draw.s,Play_Draw,0x80168DAC,0x6E
asm/non_matchings/code/z_play/Play_Main.s,Play_Main,0x80168F64,0x5A
asm/non_matchings/code/z_play/Play_InCsMode.s,Play_InCsMode,0x801690CC,0xD
-asm/non_matchings/code/z_play/func_80169100.s,func_80169100,0x80169100,0x3C
-asm/non_matchings/code/z_play/func_801691F0.s,func_801691F0,0x801691F0,0xC
-asm/non_matchings/code/z_play/Play_LoadScene.s,Play_LoadScene,0x80169220,0x17
-asm/non_matchings/code/z_play/func_8016927C.s,func_8016927C,0x8016927C,0x12
-asm/non_matchings/code/z_play/func_801692C4.s,func_801692C4,0x801692C4,0x44
-asm/non_matchings/code/z_play/Play_SceneInit.s,Play_SceneInit,0x801693D4,0x28
+asm/non_matchings/code/z_play/Play_GetFloorSurfaceImpl.s,Play_GetFloorSurfaceImpl,0x80169100,0x3C
+asm/non_matchings/code/z_play/Play_GetFloorSurface.s,Play_GetFloorSurface,0x801691F0,0xC
+asm/non_matchings/code/z_play/Play_LoadFile.s,Play_LoadFile,0x80169220,0x17
+asm/non_matchings/code/z_play/Play_InitEnvironment.s,Play_InitEnvironment,0x8016927C,0x12
+asm/non_matchings/code/z_play/Play_InitScene.s,Play_InitScene,0x801692C4,0x44
+asm/non_matchings/code/z_play/Play_SpawnScene.s,Play_SpawnScene,0x801693D4,0x28
asm/non_matchings/code/z_play/Play_GetScreenPos.s,Play_GetScreenPos,0x80169474,0x1A
asm/non_matchings/code/z_play/Play_CreateSubCamera.s,Play_CreateSubCamera,0x801694DC,0x2A
asm/non_matchings/code/z_play/Play_GetActiveCamId.s,Play_GetActiveCamId,0x80169584,0x3
@@ -2546,13 +2546,13 @@ asm/non_matchings/code/z_play/func_80169ECC.s,func_80169ECC,0x80169ECC,0xC
asm/non_matchings/code/z_play/func_80169EFC.s,func_80169EFC,0x80169EFC,0x1F
asm/non_matchings/code/z_play/func_80169F78.s,func_80169F78,0x80169F78,0x19
asm/non_matchings/code/z_play/func_80169FDC.s,func_80169FDC,0x80169FDC,0x8
-asm/non_matchings/code/z_play/func_80169FFC.s,func_80169FFC,0x80169FFC,0x8
+asm/non_matchings/code/z_play/Play_CamIsNotFixed.s,Play_CamIsNotFixed,0x80169FFC,0x8
asm/non_matchings/code/z_play/FrameAdvance_IsEnabled.s,FrameAdvance_IsEnabled,0x8016A01C,0x4
asm/non_matchings/code/z_play/func_8016A02C.s,func_8016A02C,0x8016A02C,0x20
asm/non_matchings/code/z_play/Play_IsUnderwater.s,Play_IsUnderwater,0x8016A0AC,0x2F
asm/non_matchings/code/z_play/Play_IsDebugCamEnabled.s,Play_IsDebugCamEnabled,0x8016A168,0x4
asm/non_matchings/code/z_play/func_8016A178.s,func_8016A178,0x8016A178,0x3C
-asm/non_matchings/code/z_play/func_8016A268.s,func_8016A268,0x8016A268,0x18
+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
@@ -2562,11 +2562,11 @@ asm/non_matchings/code/z_play_hireso/func_8016C344.s,func_8016C344,0x8016C344,0x
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/func_8016F1A8.s,func_8016F1A8,0x8016F1A8,0xD1
+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/func_8016F5A8.s,func_8016F5A8,0x8016F5A8,0x1B4
-asm/non_matchings/code/z_play_hireso/func_8016FC78.s,func_8016FC78,0x8016FC78,0x8
-asm/non_matchings/code/z_play_hireso/func_8016FC98.s,func_8016FC98,0x8016FC98,0x16
+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
asm/non_matchings/code/PreRender/PreRender_SetValuesSave.s,PreRender_SetValuesSave,0x8016FCF0,0xF
asm/non_matchings/code/PreRender/PreRender_Init.s,PreRender_Init,0x8016FD2C,0xD
asm/non_matchings/code/PreRender/PreRender_SetValues.s,PreRender_SetValues,0x8016FD60,0xD
@@ -2593,43 +2593,43 @@ asm/non_matchings/code/PreRender/PreRender_ApplyFiltersSlowlyInit.s,PreRender_Ap
asm/non_matchings/code/PreRender/PreRender_ApplyFiltersSlowlyDestroy.s,PreRender_ApplyFiltersSlowlyDestroy,0x80172078,0x13
asm/non_matchings/code/PreRender/func_801720C4.s,func_801720C4,0x801720C4,0xE
asm/non_matchings/code/PreRender/func_801720FC.s,func_801720FC,0x801720FC,0x197
-asm/non_matchings/code/PreRender/func_80172758.s,func_80172758,0x80172758,0x26
-asm/non_matchings/code/TwoHeadGfxArena/THGA_Ct.s,THGA_Ct,0x801727F0,0x8
-asm/non_matchings/code/TwoHeadGfxArena/THGA_Dt.s,THGA_Dt,0x80172810,0x8
+asm/non_matchings/code/PreRender/Prerender_DrawBackground2D.s,Prerender_DrawBackground2D,0x80172758,0x26
+asm/non_matchings/code/TwoHeadGfxArena/THGA_Init.s,THGA_Init,0x801727F0,0x8
+asm/non_matchings/code/TwoHeadGfxArena/THGA_Destroy.s,THGA_Destroy,0x80172810,0x8
asm/non_matchings/code/TwoHeadGfxArena/THGA_IsCrash.s,THGA_IsCrash,0x80172830,0x8
asm/non_matchings/code/TwoHeadGfxArena/THGA_Init.s,THGA_Init,0x80172850,0x8
-asm/non_matchings/code/TwoHeadGfxArena/THGA_GetSize.s,THGA_GetSize,0x80172870,0x8
+asm/non_matchings/code/TwoHeadGfxArena/THGA_GetRemaining.s,THGA_GetRemaining,0x80172870,0x8
asm/non_matchings/code/TwoHeadGfxArena/THGA_GetHead.s,THGA_GetHead,0x80172890,0x8
asm/non_matchings/code/TwoHeadGfxArena/THGA_SetHead.s,THGA_SetHead,0x801728B0,0x8
asm/non_matchings/code/TwoHeadGfxArena/THGA_GetTail.s,THGA_GetTail,0x801728D0,0x8
-asm/non_matchings/code/TwoHeadGfxArena/THGA_AllocStartArray8.s,THGA_AllocStartArray8,0x801728F0,0x9
-asm/non_matchings/code/TwoHeadGfxArena/THGA_AllocStart8.s,THGA_AllocStart8,0x80172914,0x8
-asm/non_matchings/code/TwoHeadGfxArena/THGA_AllocStart8Wrapper.s,THGA_AllocStart8Wrapper,0x80172934,0x8
-asm/non_matchings/code/TwoHeadGfxArena/THGA_AllocEnd.s,THGA_AllocEnd,0x80172954,0x8
-asm/non_matchings/code/TwoHeadGfxArena/THGA_AllocEndArray64.s,THGA_AllocEndArray64,0x80172974,0x9
-asm/non_matchings/code/TwoHeadGfxArena/THGA_AllocEnd64.s,THGA_AllocEnd64,0x80172998,0x8
-asm/non_matchings/code/TwoHeadGfxArena/THGA_AllocEndArray16.s,THGA_AllocEndArray16,0x801729B8,0x9
-asm/non_matchings/code/TwoHeadGfxArena/THGA_AllocEnd16.s,THGA_AllocEnd16,0x801729DC,0x9
+asm/non_matchings/code/TwoHeadGfxArena/THGA_AllocDisplayList.s,THGA_AllocDisplayList,0x801728F0,0x9
+asm/non_matchings/code/TwoHeadGfxArena/THGA_AllocGfx.s,THGA_AllocGfx,0x80172914,0x8
+asm/non_matchings/code/TwoHeadGfxArena/THGA_AllocGfx2.s,THGA_AllocGfx2,0x80172934,0x8
+asm/non_matchings/code/TwoHeadGfxArena/THGA_AllocTail.s,THGA_AllocTail,0x80172954,0x8
+asm/non_matchings/code/TwoHeadGfxArena/THGA_AllocMtxArray.s,THGA_AllocMtxArray,0x80172974,0x9
+asm/non_matchings/code/TwoHeadGfxArena/THGA_AllocMtx.s,THGA_AllocMtx,0x80172998,0x8
+asm/non_matchings/code/TwoHeadGfxArena/THGA_AllocVtxArray.s,THGA_AllocVtxArray,0x801729B8,0x9
+asm/non_matchings/code/TwoHeadGfxArena/THGA_AllocVtx.s,THGA_AllocVtx,0x801729DC,0x9
asm/non_matchings/code/TwoHeadArena/THA_GetHead.s,THA_GetHead,0x80172A00,0x3
asm/non_matchings/code/TwoHeadArena/THA_SetHead.s,THA_SetHead,0x80172A0C,0x3
asm/non_matchings/code/TwoHeadArena/THA_GetTail.s,THA_GetTail,0x80172A18,0x3
-asm/non_matchings/code/TwoHeadArena/THA_AllocStart.s,THA_AllocStart,0x80172A24,0x5
-asm/non_matchings/code/TwoHeadArena/THA_AllocStart1.s,THA_AllocStart1,0x80172A38,0x8
-asm/non_matchings/code/TwoHeadArena/THA_AllocEnd.s,THA_AllocEnd,0x80172A58,0x1C
-asm/non_matchings/code/TwoHeadArena/THA_AllocEndAlign16.s,THA_AllocEndAlign16,0x80172AC8,0x8
-asm/non_matchings/code/TwoHeadArena/THA_AllocEndAlign.s,THA_AllocEndAlign,0x80172AE8,0x7
-asm/non_matchings/code/TwoHeadArena/THA_GetSize.s,THA_GetSize,0x80172B04,0x5
+asm/non_matchings/code/TwoHeadArena/THA_AllocHead.s,THA_AllocHead,0x80172A24,0x5
+asm/non_matchings/code/TwoHeadArena/THA_AllocHeadByte.s,THA_AllocHeadByte,0x80172A38,0x8
+asm/non_matchings/code/TwoHeadArena/THA_AllocTail.s,THA_AllocTail,0x80172A58,0x1C
+asm/non_matchings/code/TwoHeadArena/THA_AllocTailAlign16.s,THA_AllocTailAlign16,0x80172AC8,0x8
+asm/non_matchings/code/TwoHeadArena/THA_AllocTailAlign.s,THA_AllocTailAlign,0x80172AE8,0x7
+asm/non_matchings/code/TwoHeadArena/THA_GetRemaining.s,THA_GetRemaining,0x80172B04,0x5
asm/non_matchings/code/TwoHeadArena/THA_IsCrash.s,THA_IsCrash,0x80172B18,0x9
-asm/non_matchings/code/TwoHeadArena/THA_Init.s,THA_Init,0x80172B3C,0x7
-asm/non_matchings/code/TwoHeadArena/THA_Ct.s,THA_Ct,0x80172B58,0x11
-asm/non_matchings/code/TwoHeadArena/THA_Dt.s,THA_Dt,0x80172B9C,0x9
-asm/non_matchings/code/code_80172BC0/AudioMgr_StopAllSfxExceptSystem.s,AudioMgr_StopAllSfxExceptSystem,0x80172BC0,0x1C
-asm/non_matchings/code/audioMgr/func_80172C30.s,func_80172C30,0x80172C30,0xE
-asm/non_matchings/code/audioMgr/AudioMgr_HandleRetrace.s,AudioMgr_HandleRetrace,0x80172C68,0x91
-asm/non_matchings/code/audioMgr/AudioMgr_HandlePRENMI.s,AudioMgr_HandlePRENMI,0x80172EAC,0x9
-asm/non_matchings/code/audioMgr/AudioMgr_ThreadEntry.s,AudioMgr_ThreadEntry,0x80172ED0,0x5E
-asm/non_matchings/code/audioMgr/AudioMgr_Unlock.s,AudioMgr_Unlock,0x80173048,0xB
-asm/non_matchings/code/audioMgr/AudioMgr_Init.s,AudioMgr_Init,0x80173074,0x2F
+asm/non_matchings/code/TwoHeadArena/THA_Reset.s,THA_Reset,0x80172B3C,0x7
+asm/non_matchings/code/TwoHeadArena/THA_Init.s,THA_Init,0x80172B58,0x11
+asm/non_matchings/code/TwoHeadArena/THA_Destroy.s,THA_Destroy,0x80172B9C,0x9
+asm/non_matchings/code/audio_stop_all_sfx/AudioMgr_StopAllSfxExceptSystem.s,AudioMgr_StopAllSfxExceptSystem,0x80172BC0,0x1C
+asm/non_matchings/code/audio_thread_manager/func_80172C30.s,func_80172C30,0x80172C30,0xE
+asm/non_matchings/code/audio_thread_manager/AudioMgr_HandleRetrace.s,AudioMgr_HandleRetrace,0x80172C68,0x91
+asm/non_matchings/code/audio_thread_manager/AudioMgr_HandlePRENMI.s,AudioMgr_HandlePRENMI,0x80172EAC,0x9
+asm/non_matchings/code/audio_thread_manager/AudioMgr_ThreadEntry.s,AudioMgr_ThreadEntry,0x80172ED0,0x5E
+asm/non_matchings/code/audio_thread_manager/AudioMgr_Unlock.s,AudioMgr_Unlock,0x80173048,0xB
+asm/non_matchings/code/audio_thread_manager/AudioMgr_Init.s,AudioMgr_Init,0x80173074,0x2F
asm/non_matchings/code/title_setup/Setup_SetRegs.s,Setup_SetRegs,0x80173130,0x6B
asm/non_matchings/code/title_setup/Setup_InitImpl.s,Setup_InitImpl,0x801732DC,0x14
asm/non_matchings/code/title_setup/Setup_Destroy.s,Setup_Destroy,0x8017332C,0x3
@@ -2662,7 +2662,7 @@ asm/non_matchings/code/graph/Graph_FaultClient.s,Graph_FaultClient,0x80173D30,0x
asm/non_matchings/code/graph/Graph_InitTHGA.s,Graph_InitTHGA,0x80173DAC,0x8
asm/non_matchings/code/graph/Graph_SetNextGfxPool.s,Graph_SetNextGfxPool,0x80173DCC,0x73
asm/non_matchings/code/graph/Graph_GetNextGameState.s,Graph_GetNextGameState,0x80173F98,0x32
-asm/non_matchings/code/graph/Graph_FaultAddrConvFunc.s,Graph_FaultAddrConvFunc,0x80174060,0x1C
+asm/non_matchings/code/graph/Graph_FaultAddrConv.s,Graph_FaultAddrConv,0x80174060,0x1C
asm/non_matchings/code/graph/Graph_Init.s,Graph_Init,0x801740D0,0x29
asm/non_matchings/code/graph/Graph_Destroy.s,Graph_Destroy,0x80174174,0xD
asm/non_matchings/code/graph/Graph_TaskSet00.s,Graph_TaskSet00,0x801741A8,0xC1
@@ -2749,11 +2749,11 @@ 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/func_80178AC0.s,func_80178AC0,0x80178AC0,0x70
-asm/non_matchings/code/sys_cmpdma/func_80178C80.s,func_80178C80,0x80178C80,0x3F
-asm/non_matchings/code/sys_cmpdma/func_80178D7C.s,func_80178D7C,0x80178D7C,0xC
-asm/non_matchings/code/sys_cmpdma/func_80178DAC.s,func_80178DAC,0x80178DAC,0x24
-asm/non_matchings/code/sys_cmpdma/func_80178E3C.s,func_80178E3C,0x80178E3C,0x10
-asm/non_matchings/code/sys_cmpdma/func_80178E7C.s,func_80178E7C,0x80178E7C,0x2D
+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
+asm/non_matchings/code/sys_cmpdma/CmpDma_LoadFileImpl.s,CmpDma_LoadFileImpl,0x80178DAC,0x24
+asm/non_matchings/code/sys_cmpdma/CmpDma_LoadFile.s,CmpDma_LoadFile,0x80178E3C,0x10
+asm/non_matchings/code/sys_cmpdma/CmpDma_LoadAllFiles.s,CmpDma_LoadAllFiles,0x80178E7C,0x2D
asm/non_matchings/code/sys_initial_check/Check_WriteRGBA16Pixel.s,Check_WriteRGBA16Pixel,0x80178F30,0xC
asm/non_matchings/code/sys_initial_check/Check_WriteI4Pixel.s,Check_WriteI4Pixel,0x80178F60,0x10
asm/non_matchings/code/sys_initial_check/Check_DrawI4Texture.s,Check_DrawI4Texture,0x80178FA0,0x3C
@@ -2866,8 +2866,8 @@ asm/non_matchings/code/sys_math3d/func_8017FD44.s,func_8017FD44,0x8017FD44,0x5B
asm/non_matchings/code/sys_math_atan/Math_GetAtan2Tbl.s,Math_GetAtan2Tbl,0x8017FEB0,0xD
asm/non_matchings/code/sys_math_atan/Math_Atan2S.s,Math_Atan2S,0x8017FEE4,0x7A
asm/non_matchings/code/sys_math_atan/Math_Atan2F.s,Math_Atan2F,0x801800CC,0xD
-asm/non_matchings/code/sys_math_atan/Math_FAtan2F.s,Math_FAtan2F,0x80180100,0xB
-asm/non_matchings/code/sys_math_atan/Math_Acot2F.s,Math_Acot2F,0x8018012C,0xD
+asm/non_matchings/code/sys_math_atan/Math_Atan2S_XY.s,Math_Atan2S_XY,0x80180100,0xB
+asm/non_matchings/code/sys_math_atan/Math_Atan2F_XY.s,Math_Atan2F_XY,0x8018012C,0xD
asm/non_matchings/code/sys_matrix/Matrix_Init.s,Matrix_Init,0x80180160,0xF
asm/non_matchings/code/sys_matrix/Matrix_Push.s,Matrix_Push,0x8018019C,0xC
asm/non_matchings/code/sys_matrix/Matrix_Pop.s,Matrix_Pop,0x801801CC,0x7
@@ -2959,8 +2959,8 @@ asm/non_matchings/code/c_keyframe/func_801853C8.s,func_801853C8,0x801853C8,0x26
asm/non_matchings/code/c_keyframe/func_80185460.s,func_80185460,0x80185460,0x80
asm/non_matchings/code/sys_slowly/Slowly_Main.s,Slowly_Main,0x80185660,0x27
asm/non_matchings/code/sys_slowly/Slowly_ThreadEntry.s,Slowly_ThreadEntry,0x801856FC,0x8
-asm/non_matchings/code/sys_slowly/Slowly_Start.s,Slowly_Start,0x8018571C,0x21
-asm/non_matchings/code/sys_slowly/Slowly_Stop.s,Slowly_Stop,0x801857A0,0x8
+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
@@ -3196,46 +3196,46 @@ asm/non_matchings/code/audio_load/AudioLoad_Unused5.s,AudioLoad_Unused5,0x80192A
asm/non_matchings/code/audio_load/AudioLoad_ScriptLoad.s,AudioLoad_ScriptLoad,0x80192AE8,0x1B
asm/non_matchings/code/audio_load/AudioLoad_ProcessScriptLoads.s,AudioLoad_ProcessScriptLoads,0x80192B54,0x16
asm/non_matchings/code/audio_load/AudioLoad_InitScriptLoads.s,AudioLoad_InitScriptLoads,0x80192BAC,0xD
-asm/non_matchings/code/code_80192BE0/func_80192BE0.s,func_80192BE0,0x80192BE0,0x8
-asm/non_matchings/code/code_80192BE0/func_80192C00.s,func_80192C00,0x80192C00,0x167
-asm/non_matchings/code/code_80192BE0/func_8019319C.s,func_8019319C,0x8019319C,0x14F
-asm/non_matchings/code/code_80192BE0/func_801936D8.s,func_801936D8,0x801936D8,0x15
-asm/non_matchings/code/code_80192BE0/func_8019372C.s,func_8019372C,0x8019372C,0x12
-asm/non_matchings/code/code_80192BE0/func_80193774.s,func_80193774,0x80193774,0x26
-asm/non_matchings/code/code_80192BE0/func_8019380C.s,func_8019380C,0x8019380C,0x13
-asm/non_matchings/code/code_80192BE0/func_80193858.s,func_80193858,0x80193858,0x9
-asm/non_matchings/code/code_80192BE0/AudioThread_QueueCmdS32.s,AudioThread_QueueCmdS32,0x8019387C,0x9
-asm/non_matchings/code/code_80192BE0/AudioThread_QueueCmdS8.s,AudioThread_QueueCmdS8,0x801938A0,0xC
-asm/non_matchings/code/code_80192BE0/func_801938D0.s,func_801938D0,0x801938D0,0xC
-asm/non_matchings/code/code_80192BE0/AudioThread_ScheduleProcessCmds.s,AudioThread_ScheduleProcessCmds,0x80193900,0x24
-asm/non_matchings/code/code_80192BE0/func_80193990.s,func_80193990,0x80193990,0x6
-asm/non_matchings/code/code_80192BE0/func_801939A8.s,func_801939A8,0x801939A8,0x51
-asm/non_matchings/code/code_80192BE0/func_80193AEC.s,func_80193AEC,0x80193AEC,0x2D
-asm/non_matchings/code/code_80192BE0/func_80193BA0.s,func_80193BA0,0x80193BA0,0x19
-asm/non_matchings/code/code_80192BE0/func_80193C04.s,func_80193C04,0x80193C04,0x8
-asm/non_matchings/code/code_80192BE0/func_80193C24.s,func_80193C24,0x80193C24,0xE
-asm/non_matchings/code/code_80192BE0/func_80193C5C.s,func_80193C5C,0x80193C5C,0x16
-asm/non_matchings/code/code_80192BE0/func_80193CB4.s,func_80193CB4,0x80193CB4,0x15
-asm/non_matchings/code/code_80192BE0/func_80193D08.s,func_80193D08,0x80193D08,0x27
-asm/non_matchings/code/code_80192BE0/func_80193DA4.s,func_80193DA4,0x80193DA4,0x13
-asm/non_matchings/code/code_80192BE0/func_80193DF0.s,func_80193DF0,0x80193DF0,0x15
-asm/non_matchings/code/code_80192BE0/func_80193E44.s,func_80193E44,0x80193E44,0xA
-asm/non_matchings/code/code_80192BE0/func_80193E6C.s,func_80193E6C,0x80193E6C,0xC
-asm/non_matchings/code/code_80192BE0/func_80193E9C.s,func_80193E9C,0x80193E9C,0x3
-asm/non_matchings/code/code_80192BE0/func_80193EA8.s,func_80193EA8,0x80193EA8,0x76
-asm/non_matchings/code/code_80192BE0/func_80194080.s,func_80194080,0x80194080,0x8F
-asm/non_matchings/code/code_80192BE0/func_801942BC.s,func_801942BC,0x801942BC,0x12
-asm/non_matchings/code/code_80192BE0/func_80194304.s,func_80194304,0x80194304,0x9
-asm/non_matchings/code/code_80192BE0/func_80194328.s,func_80194328,0x80194328,0xD
-asm/non_matchings/code/code_80192BE0/func_8019435C.s,func_8019435C,0x8019435C,0x10
-asm/non_matchings/code/code_80192BE0/func_8019439C.s,func_8019439C,0x8019439C,0xD
-asm/non_matchings/code/code_80192BE0/func_801943D0.s,func_801943D0,0x801943D0,0xF
-asm/non_matchings/code/code_80192BE0/func_8019440C.s,func_8019440C,0x8019440C,0x47
-asm/non_matchings/code/code_80192BE0/func_80194528.s,func_80194528,0x80194528,0x8
-asm/non_matchings/code/code_80192BE0/func_80194548.s,func_80194548,0x80194548,0x8
-asm/non_matchings/code/code_80192BE0/func_80194568.s,func_80194568,0x80194568,0x40
-asm/non_matchings/code/code_80192BE0/AudioThread_NextRandom.s,AudioThread_NextRandom,0x80194668,0x1F
-asm/non_matchings/code/code_80192BE0/AudioThread_InitMesgQueues.s,AudioThread_InitMesgQueues,0x801946E4,0xB
+asm/non_matchings/code/audio_thread/AudioThread_Update.s,AudioThread_Update,0x80192BE0,0x8
+asm/non_matchings/code/audio_thread/AudioThread_UpdateImpl.s,AudioThread_UpdateImpl,0x80192C00,0x167
+asm/non_matchings/code/audio_thread/AudioThread_ProcessGlobalCmd.s,AudioThread_ProcessGlobalCmd,0x8019319C,0x14F
+asm/non_matchings/code/audio_thread/AudioThread_SetFadeOutTimer.s,AudioThread_SetFadeOutTimer,0x801936D8,0x15
+asm/non_matchings/code/audio_thread/AudioThread_SetFadeInTimer.s,AudioThread_SetFadeInTimer,0x8019372C,0x12
+asm/non_matchings/code/audio_thread/AudioThread_InitMesgQueuesInternal.s,AudioThread_InitMesgQueuesInternal,0x80193774,0x26
+asm/non_matchings/code/audio_thread/AudioThread_QueueCmd.s,AudioThread_QueueCmd,0x8019380C,0x13
+asm/non_matchings/code/audio_thread/AudioThread_QueueCmdF32.s,AudioThread_QueueCmdF32,0x80193858,0x9
+asm/non_matchings/code/audio_thread/AudioThread_QueueCmdS32.s,AudioThread_QueueCmdS32,0x8019387C,0x9
+asm/non_matchings/code/audio_thread/AudioThread_QueueCmdS8.s,AudioThread_QueueCmdS8,0x801938A0,0xC
+asm/non_matchings/code/audio_thread/AudioThread_QueueCmdU16.s,AudioThread_QueueCmdU16,0x801938D0,0xC
+asm/non_matchings/code/audio_thread/AudioThread_ScheduleProcessCmds.s,AudioThread_ScheduleProcessCmds,0x80193900,0x24
+asm/non_matchings/code/audio_thread/AudioThread_ResetCmdQueue.s,AudioThread_ResetCmdQueue,0x80193990,0x6
+asm/non_matchings/code/audio_thread/AudioThread_ProcessCmd.s,AudioThread_ProcessCmd,0x801939A8,0x51
+asm/non_matchings/code/audio_thread/AudioThread_ProcessCmds.s,AudioThread_ProcessCmds,0x80193AEC,0x2D
+asm/non_matchings/code/audio_thread/AudioThread_GetExternalLoadQueueMsg.s,AudioThread_GetExternalLoadQueueMsg,0x80193BA0,0x19
+asm/non_matchings/code/audio_thread/AudioThread_GetFontsForSequence.s,AudioThread_GetFontsForSequence,0x80193C04,0x8
+asm/non_matchings/code/audio_thread/AudioThread_GetSampleBankIdsOfFont.s,AudioThread_GetSampleBankIdsOfFont,0x80193C24,0xE
+asm/non_matchings/code/audio_thread/func_80193C5C.s,func_80193C5C,0x80193C5C,0x16
+asm/non_matchings/code/audio_thread/AudioThread_WaitForAudioResetQueueP.s,AudioThread_WaitForAudioResetQueueP,0x80193CB4,0x15
+asm/non_matchings/code/audio_thread/AudioThread_ResetAudioHeap.s,AudioThread_ResetAudioHeap,0x80193D08,0x27
+asm/non_matchings/code/audio_thread/AudioThread_PreNMIInternal.s,AudioThread_PreNMIInternal,0x80193DA4,0x13
+asm/non_matchings/code/audio_thread/AudioThread_GetChannelIO.s,AudioThread_GetChannelIO,0x80193DF0,0x15
+asm/non_matchings/code/audio_thread/AudioThread_GetSeqPlayerIO.s,AudioThread_GetSeqPlayerIO,0x80193E44,0xA
+asm/non_matchings/code/audio_thread/AudioThread_InitExternalPool.s,AudioThread_InitExternalPool,0x80193E6C,0xC
+asm/non_matchings/code/audio_thread/AudioThread_ResetExternalPool.s,AudioThread_ResetExternalPool,0x80193E9C,0x3
+asm/non_matchings/code/audio_thread/AudioThread_ProcessSeqPlayerCmd.s,AudioThread_ProcessSeqPlayerCmd,0x80193EA8,0x76
+asm/non_matchings/code/audio_thread/AudioThread_ProcessChannelCmd.s,AudioThread_ProcessChannelCmd,0x80194080,0x8F
+asm/non_matchings/code/audio_thread/AudioThread_Noop1Cmd.s,AudioThread_Noop1Cmd,0x801942BC,0x12
+asm/non_matchings/code/audio_thread/AudioThread_Noop1CmdZeroed.s,AudioThread_Noop1CmdZeroed,0x80194304,0x9
+asm/non_matchings/code/audio_thread/AudioThread_Noop2Cmd.s,AudioThread_Noop2Cmd,0x80194328,0xD
+asm/non_matchings/code/audio_thread/AudioThread_WaitForAudioTask.s,AudioThread_WaitForAudioTask,0x8019435C,0x10
+asm/non_matchings/code/audio_thread/AudioThread_GetSamplePosFromStart.s,AudioThread_GetSamplePosFromStart,0x8019439C,0xD
+asm/non_matchings/code/audio_thread/AudioThread_GetSamplePosUntilEnd.s,AudioThread_GetSamplePosUntilEnd,0x801943D0,0xF
+asm/non_matchings/code/audio_thread/AudioThread_GetSamplePos.s,AudioThread_GetSamplePos,0x8019440C,0x47
+asm/non_matchings/code/audio_thread/AudioThread_GetEnabledNotesCount.s,AudioThread_GetEnabledNotesCount,0x80194528,0x8
+asm/non_matchings/code/audio_thread/AudioThread_GetEnabledSampledNotesCount.s,AudioThread_GetEnabledSampledNotesCount,0x80194548,0x8
+asm/non_matchings/code/audio_thread/AudioThread_CountAndReleaseNotes.s,AudioThread_CountAndReleaseNotes,0x80194568,0x40
+asm/non_matchings/code/audio_thread/AudioThread_NextRandom.s,AudioThread_NextRandom,0x80194668,0x1F
+asm/non_matchings/code/audio_thread/AudioThread_InitMesgQueues.s,AudioThread_InitMesgQueues,0x801946E4,0xB
asm/non_matchings/code/code_80194710/Audio_InvalDCache.s,Audio_InvalDCache,0x80194710,0x10
asm/non_matchings/code/code_80194710/Audio_WritebackDCache.s,Audio_WritebackDCache,0x80194750,0x10
asm/non_matchings/code/code_80194710/osAiSetNextBuffer.s,osAiSetNextBuffer,0x80194790,0x1D
@@ -3283,42 +3283,42 @@ asm/non_matchings/code/audio_effects/AudioEffects_NoteVibratoInit.s,AudioEffects
asm/non_matchings/code/audio_effects/AudioEffects_NotePortamentoInit.s,AudioEffects_NotePortamentoInit,0x80197138,0xB
asm/non_matchings/code/audio_effects/AudioEffects_AdsrInit.s,AudioEffects_AdsrInit,0x80197164,0x9
asm/non_matchings/code/audio_effects/AudioEffects_AdsrUpdate.s,AudioEffects_AdsrUpdate,0x80197188,0xD2
-asm/non_matchings/code/audio_seqplayer/AudioSeq_GetScriptControlFlowArgument.s,AudioSeq_GetScriptControlFlowArgument,0x801974D0,0x1A
-asm/non_matchings/code/audio_seqplayer/AudioSeq_HandleScriptFlowControl.s,AudioSeq_HandleScriptFlowControl,0x80197538,0x77
-asm/non_matchings/code/audio_seqplayer/AudioSeq_InitSequenceChannel.s,AudioSeq_InitSequenceChannel,0x80197714,0x5B
-asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqChannelSetLayer.s,AudioSeq_SeqChannelSetLayer,0x80197880,0x56
-asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqLayerDisable.s,AudioSeq_SeqLayerDisable,0x801979D8,0x1F
-asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqLayerFree.s,AudioSeq_SeqLayerFree,0x80197A54,0x14
-asm/non_matchings/code/audio_seqplayer/AudioSeq_SequenceChannelDisable.s,AudioSeq_SequenceChannelDisable,0x80197AA4,0x1C
-asm/non_matchings/code/audio_seqplayer/AudioSeq_SequencePlayerSetupChannels.s,AudioSeq_SequencePlayerSetupChannels,0x80197B14,0x3E
-asm/non_matchings/code/audio_seqplayer/AudioSeq_SequencePlayerDisableChannels.s,AudioSeq_SequencePlayerDisableChannels,0x80197C0C,0x20
-asm/non_matchings/code/audio_seqplayer/AudioSeq_SequenceChannelEnable.s,AudioSeq_SequenceChannelEnable,0x80197C8C,0x26
-asm/non_matchings/code/audio_seqplayer/AudioSeq_SequencePlayerDisableAsFinished.s,AudioSeq_SequencePlayerDisableAsFinished,0x80197D24,0xA
-asm/non_matchings/code/audio_seqplayer/AudioSeq_SequencePlayerDisable.s,AudioSeq_SequencePlayerDisable,0x80197D4C,0x2F
-asm/non_matchings/code/audio_seqplayer/AudioSeq_AudioListPushBack.s,AudioSeq_AudioListPushBack,0x80197E08,0x10
-asm/non_matchings/code/audio_seqplayer/AudioSeq_AudioListPopBack.s,AudioSeq_AudioListPopBack,0x80197E48,0x10
-asm/non_matchings/code/audio_seqplayer/AudioSeq_InitLayerFreelist.s,AudioSeq_InitLayerFreelist,0x80197E88,0x28
-asm/non_matchings/code/audio_seqplayer/AudioSeq_ScriptReadU8.s,AudioSeq_ScriptReadU8,0x80197F28,0x5
-asm/non_matchings/code/audio_seqplayer/AudioSeq_ScriptReadS16.s,AudioSeq_ScriptReadS16,0x80197F3C,0xE
-asm/non_matchings/code/audio_seqplayer/AudioSeq_ScriptReadCompressedU16.s,AudioSeq_ScriptReadCompressedU16,0x80197F74,0x10
-asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqLayerProcessScript.s,AudioSeq_SeqLayerProcessScript,0x80197FB4,0x47
-asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqLayerProcessScriptStep1.s,AudioSeq_SeqLayerProcessScriptStep1,0x801980D0,0x23
-asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqLayerProcessScriptStep5.s,AudioSeq_SeqLayerProcessScriptStep5,0x8019815C,0x40
-asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqLayerProcessScriptStep2.s,AudioSeq_SeqLayerProcessScriptStep2,0x8019825C,0xF9
-asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqLayerProcessScriptStep4.s,AudioSeq_SeqLayerProcessScriptStep4,0x80198640,0x1A8
-asm/non_matchings/code/audio_seqplayer/AudioSeq_SeqLayerProcessScriptStep3.s,AudioSeq_SeqLayerProcessScriptStep3,0x80198CE0,0x105
-asm/non_matchings/code/audio_seqplayer/AudioSeq_SetChannelPriorities.s,AudioSeq_SetChannelPriorities,0x801990F4,0xC
-asm/non_matchings/code/audio_seqplayer/AudioSeq_GetInstrument.s,AudioSeq_GetInstrument,0x80199124,0x1D
-asm/non_matchings/code/audio_seqplayer/AudioSeq_SetInstrument.s,AudioSeq_SetInstrument,0x80199198,0x2B
-asm/non_matchings/code/audio_seqplayer/AudioSeq_SequenceChannelSetVolume.s,AudioSeq_SequenceChannelSetVolume,0x80199244,0x9
-asm/non_matchings/code/audio_seqplayer/AudioSeq_SequenceChannelProcessScript.s,AudioSeq_SequenceChannelProcessScript,0x80199268,0x395
-asm/non_matchings/code/audio_seqplayer/AudioSeq_SequencePlayerProcessSequence.s,AudioSeq_SequencePlayerProcessSequence,0x8019A0BC,0x260
-asm/non_matchings/code/audio_seqplayer/AudioSeq_ProcessSequences.s,AudioSeq_ProcessSequences,0x8019AA3C,0x2D
-asm/non_matchings/code/audio_seqplayer/AudioSeq_SkipForwardSequence.s,AudioSeq_SkipForwardSequence,0x8019AAF0,0x14
-asm/non_matchings/code/audio_seqplayer/AudioSeq_ResetSequencePlayer.s,AudioSeq_ResetSequencePlayer,0x8019AB40,0x34
-asm/non_matchings/code/audio_seqplayer/AudioSeq_InitSequencePlayerChannels.s,AudioSeq_InitSequencePlayerChannels,0x8019AC10,0x37
-asm/non_matchings/code/audio_seqplayer/AudioSeq_InitSequencePlayer.s,AudioSeq_InitSequencePlayer,0x8019ACEC,0x34
-asm/non_matchings/code/audio_seqplayer/AudioSeq_InitSequencePlayers.s,AudioSeq_InitSequencePlayers,0x8019ADBC,0x21
+asm/non_matchings/code/audio_seqplayer/AudioScript_GetScriptControlFlowArgument.s,AudioScript_GetScriptControlFlowArgument,0x801974D0,0x1A
+asm/non_matchings/code/audio_seqplayer/AudioScript_HandleScriptFlowControl.s,AudioScript_HandleScriptFlowControl,0x80197538,0x77
+asm/non_matchings/code/audio_seqplayer/AudioScript_InitSequenceChannel.s,AudioScript_InitSequenceChannel,0x80197714,0x5B
+asm/non_matchings/code/audio_seqplayer/AudioScript_SeqChannelSetLayer.s,AudioScript_SeqChannelSetLayer,0x80197880,0x56
+asm/non_matchings/code/audio_seqplayer/AudioScript_SeqLayerDisable.s,AudioScript_SeqLayerDisable,0x801979D8,0x1F
+asm/non_matchings/code/audio_seqplayer/AudioScript_SeqLayerFree.s,AudioScript_SeqLayerFree,0x80197A54,0x14
+asm/non_matchings/code/audio_seqplayer/AudioScript_SequenceChannelDisable.s,AudioScript_SequenceChannelDisable,0x80197AA4,0x1C
+asm/non_matchings/code/audio_seqplayer/AudioScript_SequencePlayerSetupChannels.s,AudioScript_SequencePlayerSetupChannels,0x80197B14,0x3E
+asm/non_matchings/code/audio_seqplayer/AudioScript_SequencePlayerDisableChannels.s,AudioScript_SequencePlayerDisableChannels,0x80197C0C,0x20
+asm/non_matchings/code/audio_seqplayer/AudioScript_SequenceChannelEnable.s,AudioScript_SequenceChannelEnable,0x80197C8C,0x26
+asm/non_matchings/code/audio_seqplayer/AudioScript_SequencePlayerDisableAsFinished.s,AudioScript_SequencePlayerDisableAsFinished,0x80197D24,0xA
+asm/non_matchings/code/audio_seqplayer/AudioScript_SequencePlayerDisable.s,AudioScript_SequencePlayerDisable,0x80197D4C,0x2F
+asm/non_matchings/code/audio_seqplayer/AudioScript_AudioListPushBack.s,AudioScript_AudioListPushBack,0x80197E08,0x10
+asm/non_matchings/code/audio_seqplayer/AudioScript_AudioListPopBack.s,AudioScript_AudioListPopBack,0x80197E48,0x10
+asm/non_matchings/code/audio_seqplayer/AudioScript_InitLayerFreelist.s,AudioScript_InitLayerFreelist,0x80197E88,0x28
+asm/non_matchings/code/audio_seqplayer/AudioScript_ScriptReadU8.s,AudioScript_ScriptReadU8,0x80197F28,0x5
+asm/non_matchings/code/audio_seqplayer/AudioScript_ScriptReadS16.s,AudioScript_ScriptReadS16,0x80197F3C,0xE
+asm/non_matchings/code/audio_seqplayer/AudioScript_ScriptReadCompressedU16.s,AudioScript_ScriptReadCompressedU16,0x80197F74,0x10
+asm/non_matchings/code/audio_seqplayer/AudioScript_SeqLayerProcessScript.s,AudioScript_SeqLayerProcessScript,0x80197FB4,0x47
+asm/non_matchings/code/audio_seqplayer/AudioScript_SeqLayerProcessScriptStep1.s,AudioScript_SeqLayerProcessScriptStep1,0x801980D0,0x23
+asm/non_matchings/code/audio_seqplayer/AudioScript_SeqLayerProcessScriptStep5.s,AudioScript_SeqLayerProcessScriptStep5,0x8019815C,0x40
+asm/non_matchings/code/audio_seqplayer/AudioScript_SeqLayerProcessScriptStep2.s,AudioScript_SeqLayerProcessScriptStep2,0x8019825C,0xF9
+asm/non_matchings/code/audio_seqplayer/AudioScript_SeqLayerProcessScriptStep4.s,AudioScript_SeqLayerProcessScriptStep4,0x80198640,0x1A8
+asm/non_matchings/code/audio_seqplayer/AudioScript_SeqLayerProcessScriptStep3.s,AudioScript_SeqLayerProcessScriptStep3,0x80198CE0,0x105
+asm/non_matchings/code/audio_seqplayer/AudioScript_SetChannelPriorities.s,AudioScript_SetChannelPriorities,0x801990F4,0xC
+asm/non_matchings/code/audio_seqplayer/AudioScript_GetInstrument.s,AudioScript_GetInstrument,0x80199124,0x1D
+asm/non_matchings/code/audio_seqplayer/AudioScript_SetInstrument.s,AudioScript_SetInstrument,0x80199198,0x2B
+asm/non_matchings/code/audio_seqplayer/AudioScript_SequenceChannelSetVolume.s,AudioScript_SequenceChannelSetVolume,0x80199244,0x9
+asm/non_matchings/code/audio_seqplayer/AudioScript_SequenceChannelProcessScript.s,AudioScript_SequenceChannelProcessScript,0x80199268,0x395
+asm/non_matchings/code/audio_seqplayer/AudioScript_SequencePlayerProcessSequence.s,AudioScript_SequencePlayerProcessSequence,0x8019A0BC,0x260
+asm/non_matchings/code/audio_seqplayer/AudioScript_ProcessSequences.s,AudioScript_ProcessSequences,0x8019AA3C,0x2D
+asm/non_matchings/code/audio_seqplayer/AudioScript_SkipForwardSequence.s,AudioScript_SkipForwardSequence,0x8019AAF0,0x14
+asm/non_matchings/code/audio_seqplayer/AudioScript_ResetSequencePlayer.s,AudioScript_ResetSequencePlayer,0x8019AB40,0x34
+asm/non_matchings/code/audio_seqplayer/AudioScript_InitSequencePlayerChannels.s,AudioScript_InitSequencePlayerChannels,0x8019AC10,0x37
+asm/non_matchings/code/audio_seqplayer/AudioScript_InitSequencePlayer.s,AudioScript_InitSequencePlayer,0x8019ACEC,0x34
+asm/non_matchings/code/audio_seqplayer/AudioScript_InitSequencePlayers.s,AudioScript_InitSequencePlayers,0x8019ADBC,0x21
asm/non_matchings/code/code_8019AE40/func_8019AE40.s,func_8019AE40,0x8019AE40,0x1C
asm/non_matchings/code/code_8019AEC0/func_8019AEC0.s,func_8019AEC0,0x8019AEC0,0x10
asm/non_matchings/code/code_8019AF00/AudioOcarina_ReadControllerInput.s,AudioOcarina_ReadControllerInput,0x8019AF00,0x16
@@ -3361,7 +3361,7 @@ asm/non_matchings/code/code_8019AF00/AudioOcarina_TerminaWallGenerateNotes.s,Aud
asm/non_matchings/code/code_8019AF00/AudioOcarina_MemoryGameInit.s,AudioOcarina_MemoryGameInit,0x8019D488,0x1C
asm/non_matchings/code/code_8019AF00/AudioOcarina_MemoryGameNextNote.s,AudioOcarina_MemoryGameNextNote,0x8019D4F8,0x42
asm/non_matchings/code/code_8019AF00/AudioOcarina_Update.s,AudioOcarina_Update,0x8019D600,0x56
-asm/non_matchings/code/code_8019AF00/AudioOcarina_PlayLongScarecrowAfterCredits.s,AudioOcarina_PlayLongScarecrowAfterCredits,0x8019D758,0x43
+asm/non_matchings/code/code_8019AF00/AudioOcarina_PlayLongScarecrowSong.s,AudioOcarina_PlayLongScarecrowSong,0x8019D758,0x43
asm/non_matchings/code/code_8019AF00/AudioOcarina_SetCustomSequence.s,AudioOcarina_SetCustomSequence,0x8019D864,0x14
asm/non_matchings/code/code_8019AF00/AudioOcarina_PlayCustomSequence.s,AudioOcarina_PlayCustomSequence,0x8019D8B4,0xC
asm/non_matchings/code/code_8019AF00/AudioOcarina_CreateCustomSequence.s,AudioOcarina_CreateCustomSequence,0x8019D8E4,0x191
@@ -3373,7 +3373,7 @@ asm/non_matchings/code/code_8019AF00/Audio_Noop3.s,Audio_Noop3,0x8019E00C,0x2
asm/non_matchings/code/code_8019AF00/Audio_Update.s,Audio_Update,0x8019E014,0x3A
asm/non_matchings/code/code_8019AF00/Audio_Noop4.s,Audio_Noop4,0x8019E0FC,0x2
asm/non_matchings/code/code_8019AF00/Audio_Noop5.s,Audio_Noop5,0x8019E104,0x3
-asm/non_matchings/code/code_8019AF00/func_8019E110.s,func_8019E110,0x8019E110,0xF
+asm/non_matchings/code/code_8019AF00/Audio_PlayMainBgm.s,Audio_PlayMainBgm,0x8019E110,0xF
asm/non_matchings/code/code_8019AF00/AudioSfx_ComputeVolume.s,AudioSfx_ComputeVolume,0x8019E14C,0x76
asm/non_matchings/code/code_8019AF00/AudioSfx_ComputeReverb.s,AudioSfx_ComputeReverb,0x8019E324,0x63
asm/non_matchings/code/code_8019AF00/AudioSfx_ComputePanSigned.s,AudioSfx_ComputePanSigned,0x8019E4B0,0x61
@@ -3417,10 +3417,10 @@ asm/non_matchings/code/code_8019AF00/Audio_PlaySfxForRiver.s,Audio_PlaySfxForRiv
asm/non_matchings/code/code_8019AF00/Audio_PlaySfxForWaterfall.s,Audio_PlaySfxForWaterfall,0x801A0048,0x29
asm/non_matchings/code/code_8019AF00/Audio_StepFreqLerp.s,Audio_StepFreqLerp,0x801A00EC,0xE
asm/non_matchings/code/code_8019AF00/func_801A0124.s,func_801A0124,0x801A0124,0x18
-asm/non_matchings/code/code_8019AF00/func_801A0184.s,func_801A0184,0x801A0184,0x10
-asm/non_matchings/code/code_8019AF00/func_801A01C4.s,func_801A01C4,0x801A01C4,0x10
+asm/non_matchings/code/code_8019AF00/Audio_SetBgmVolumeOff.s,Audio_SetBgmVolumeOff,0x801A0184,0x10
+asm/non_matchings/code/code_8019AF00/Audio_SetBgmVolumeOn.s,Audio_SetBgmVolumeOn,0x801A01C4,0x10
asm/non_matchings/code/code_8019AF00/func_801A0204.s,func_801A0204,0x801A0204,0xD
-asm/non_matchings/code/code_8019AF00/func_801A0238.s,func_801A0238,0x801A0238,0xD
+asm/non_matchings/code/code_8019AF00/Audio_SetMainBgmVolume.s,Audio_SetMainBgmVolume,0x801A0238,0xD
asm/non_matchings/code/code_8019AF00/Audio_SetGanonsTowerBgmVolumeLevel.s,Audio_SetGanonsTowerBgmVolumeLevel,0x801A026C,0x2B
asm/non_matchings/code/code_8019AF00/Audio_SetGanonsTowerBgmVolume.s,Audio_SetGanonsTowerBgmVolume,0x801A0318,0x4E
asm/non_matchings/code/code_8019AF00/Audio_LowerMainBgmVolume.s,Audio_LowerMainBgmVolume,0x801A0450,0x7
@@ -3459,12 +3459,12 @@ asm/non_matchings/code/code_8019AF00/Audio_StartMorningSceneSequence.s,Audio_Sta
asm/non_matchings/code/code_8019AF00/Audio_PlaySceneSequence.s,Audio_PlaySceneSequence,0x801A25E4,0x23
asm/non_matchings/code/code_8019AF00/Audio_StartSceneSequence.s,Audio_StartSceneSequence,0x801A2670,0x42
asm/non_matchings/code/code_8019AF00/Audio_UpdateSceneSequenceResumePoint.s,Audio_UpdateSceneSequenceResumePoint,0x801A2778,0x1C
-asm/non_matchings/code/code_8019AF00/func_801A27E8.s,func_801A27E8,0x801A27E8,0xD
-asm/non_matchings/code/code_8019AF00/func_801A281C.s,func_801A281C,0x801A281C,0x6E
-asm/non_matchings/code/code_8019AF00/func_801A29D4.s,func_801A29D4,0x801A29D4,0x79
-asm/non_matchings/code/code_8019AF00/func_801A2BB8.s,func_801A2BB8,0x801A2BB8,0x1A
-asm/non_matchings/code/code_8019AF00/func_801A2C20.s,func_801A2C20,0x801A2C20,0x9
-asm/non_matchings/code/code_8019AF00/func_801A2C44.s,func_801A2C44,0x801A2C44,0x11
+asm/non_matchings/code/code_8019AF00/Audio_PlayBgmForSongOfStorms.s,Audio_PlayBgmForSongOfStorms,0x801A27E8,0xD
+asm/non_matchings/code/code_8019AF00/Audio_ScaleTempoAndFreqForMainBgm.s,Audio_ScaleTempoAndFreqForMainBgm,0x801A281C,0x6E
+asm/non_matchings/code/code_8019AF00/Audio_SetSeqTempoAndFreq.s,Audio_SetSeqTempoAndFreq,0x801A29D4,0x79
+asm/non_matchings/code/code_8019AF00/Audio_PlaySubBgm.s,Audio_PlaySubBgm,0x801A2BB8,0x1A
+asm/non_matchings/code/code_8019AF00/Audio_StopSubBgm.s,Audio_StopSubBgm,0x801A2C20,0x9
+asm/non_matchings/code/code_8019AF00/Audio_IncreaseTempoForTimedMinigame.s,Audio_IncreaseTempoForTimedMinigame,0x801A2C44,0x11
asm/non_matchings/code/code_8019AF00/Audio_PlaySequenceInCutscene.s,Audio_PlaySequenceInCutscene,0x801A2C88,0x33
asm/non_matchings/code/code_8019AF00/Audio_StopSequenceInCutscene.s,Audio_StopSequenceInCutscene,0x801A2D54,0x23
asm/non_matchings/code/code_8019AF00/Audio_IsSequencePlaying.s,Audio_IsSequencePlaying,0x801A2DE0,0x1D
@@ -3510,7 +3510,7 @@ asm/non_matchings/code/code_8019AF00/Audio_SetSfxVolumeExceptSystemAndOcarinaBan
asm/non_matchings/code/code_8019AF00/func_801A4428.s,func_801A4428,0x801A4428,0x1F
asm/non_matchings/code/code_8019AF00/Audio_PreNMI.s,Audio_PreNMI,0x801A44A4,0x8
asm/non_matchings/code/code_8019AF00/Audio_ResetRequestedSceneSeqId.s,Audio_ResetRequestedSceneSeqId,0x801A44C4,0x4
-asm/non_matchings/code/code_8019AF00/func_801A44D4.s,func_801A44D4,0x801A44D4,0x89
+asm/non_matchings/code/code_8019AF00/Audio_ResetData.s,Audio_ResetData,0x801A44D4,0x89
asm/non_matchings/code/code_8019AF00/func_801A46F8.s,func_801A46F8,0x801A46F8,0x14
asm/non_matchings/code/code_8019AF00/func_801A4748.s,func_801A4748,0x801A4748,0x15
asm/non_matchings/code/code_8019AF00/func_801A479C.s,func_801A479C,0x801A479C,0x10
@@ -3520,32 +3520,32 @@ asm/non_matchings/code/code_8019AF00/Audio_PlayAmbience.s,Audio_PlayAmbience,0x8
asm/non_matchings/code/code_8019AF00/Audio_SetAmbienceRandomBend.s,Audio_SetAmbienceRandomBend,0x801A4B80,0x2C
asm/non_matchings/code/code_8019AF00/Audio_Init.s,Audio_Init,0x801A4C30,0x9
asm/non_matchings/code/code_8019AF00/AudioSfx_Init.s,AudioSfx_Init,0x801A4C54,0x2B
-asm/non_matchings/code/code_8019AF00/func_801A4D00.s,func_801A4D00,0x801A4D00,0x14
-asm/non_matchings/code/code_8019AF00/func_801A4D50.s,func_801A4D50,0x801A4D50,0x15
-asm/non_matchings/code/code_8019AF00/func_801A4DA4.s,func_801A4DA4,0x801A4DA4,0x14
-asm/non_matchings/code/code_8019AF00/func_801A4DF4.s,func_801A4DF4,0x801A4DF4,0x1C
-asm/non_matchings/code/code_8019AF00/func_801A4E64.s,func_801A4E64,0x801A4E64,0x13
-asm/non_matchings/code/code_8019AF00/func_801A4EB0.s,func_801A4EB0,0x801A4EB0,0x2
-asm/non_matchings/code/code_8019AF00/func_801A4EB8.s,func_801A4EB8,0x801A4EB8,0x48
-asm/non_matchings/code/code_8019AF00/func_801A4FD8.s,func_801A4FD8,0x801A4FD8,0x2A
-asm/non_matchings/code/code_8019AF00/func_801A5080.s,func_801A5080,0x801A5080,0x10
-asm/non_matchings/code/code_8019AF00/func_801A50C0.s,func_801A50C0,0x801A50C0,0x10
-asm/non_matchings/code/code_8019AF00/func_801A5100.s,func_801A5100,0x801A5100,0x3
-asm/non_matchings/code/code_8019AF00/func_801A510C.s,func_801A510C,0x801A510C,0x3
-asm/non_matchings/code/code_8019AF00/func_801A5118.s,func_801A5118,0x801A5118,0x36
-asm/non_matchings/code/code_801A51F0/func_801A51F0.s,func_801A51F0,0x801A51F0,0xE
-asm/non_matchings/code/code_801A51F0/func_801A5228.s,func_801A5228,0x801A5228,0x5A
-asm/non_matchings/code/code_801A51F0/func_801A5390.s,func_801A5390,0x801A5390,0x13
-asm/non_matchings/code/code_801A51F0/func_801A53DC.s,func_801A53DC,0x801A53DC,0x3
-asm/non_matchings/code/code_801A51F0/func_801A53E8.s,func_801A53E8,0x801A53E8,0xD
-asm/non_matchings/code/code_801A51F0/func_801A541C.s,func_801A541C,0x801A541C,0x1B
-asm/non_matchings/code/code_801A51F0/func_801A5488.s,func_801A5488,0x801A5488,0xF
-asm/non_matchings/code/code_801A51F0/func_801A54C4.s,func_801A54C4,0x801A54C4,0x3
-asm/non_matchings/code/code_801A51F0/func_801A54D0.s,func_801A54D0,0x801A54D0,0x6C
-asm/non_matchings/code/code_801A51F0/func_801A5680.s,func_801A5680,0x801A5680,0x62
-asm/non_matchings/code/code_801A51F0/func_801A5808.s,func_801A5808,0x801A5808,0x82
-asm/non_matchings/code/code_801A51F0/func_801A5A10.s,func_801A5A10,0x801A5A10,0x3
-asm/non_matchings/code/code_801A51F0/func_801A5A1C.s,func_801A5A1C,0x801A5A1C,0x69
+asm/non_matchings/code/code_8019AF00/Audio_InitSound.s,Audio_InitSound,0x801A4D00,0x14
+asm/non_matchings/code/code_8019AF00/Audio_ResetForAudioHeapStep3.s,Audio_ResetForAudioHeapStep3,0x801A4D50,0x15
+asm/non_matchings/code/code_8019AF00/Audio_ResetForAudioHeapStep2.s,Audio_ResetForAudioHeapStep2,0x801A4DA4,0x14
+asm/non_matchings/code/code_8019AF00/Audio_ResetForAudioHeapStep1.s,Audio_ResetForAudioHeapStep1,0x801A4DF4,0x1C
+asm/non_matchings/code/code_8019AF00/Audio_UnusedReset.s,Audio_UnusedReset,0x801A4E64,0x13
+asm/non_matchings/code/voice_external/func_801A4EB0.s,func_801A4EB0,0x801A4EB0,0x2
+asm/non_matchings/code/voice_external/func_801A4EB8.s,func_801A4EB8,0x801A4EB8,0x48
+asm/non_matchings/code/voice_external/func_801A4FD8.s,func_801A4FD8,0x801A4FD8,0x2A
+asm/non_matchings/code/voice_external/func_801A5080.s,func_801A5080,0x801A5080,0x10
+asm/non_matchings/code/voice_external/func_801A50C0.s,func_801A50C0,0x801A50C0,0x10
+asm/non_matchings/code/voice_external/func_801A5100.s,func_801A5100,0x801A5100,0x3
+asm/non_matchings/code/voice_external/func_801A510C.s,func_801A510C,0x801A510C,0x3
+asm/non_matchings/code/voice_external/func_801A5118.s,func_801A5118,0x801A5118,0x36
+asm/non_matchings/code/voice_internal/func_801A51F0.s,func_801A51F0,0x801A51F0,0xE
+asm/non_matchings/code/voice_internal/func_801A5228.s,func_801A5228,0x801A5228,0x5A
+asm/non_matchings/code/voice_internal/func_801A5390.s,func_801A5390,0x801A5390,0x13
+asm/non_matchings/code/voice_internal/func_801A53DC.s,func_801A53DC,0x801A53DC,0x3
+asm/non_matchings/code/voice_internal/func_801A53E8.s,func_801A53E8,0x801A53E8,0xD
+asm/non_matchings/code/voice_internal/func_801A541C.s,func_801A541C,0x801A541C,0x1B
+asm/non_matchings/code/voice_internal/func_801A5488.s,func_801A5488,0x801A5488,0xF
+asm/non_matchings/code/voice_internal/func_801A54C4.s,func_801A54C4,0x801A54C4,0x3
+asm/non_matchings/code/voice_internal/func_801A54D0.s,func_801A54D0,0x801A54D0,0x6C
+asm/non_matchings/code/voice_internal/func_801A5680.s,func_801A5680,0x801A5680,0x62
+asm/non_matchings/code/voice_internal/func_801A5808.s,func_801A5808,0x801A5808,0x82
+asm/non_matchings/code/voice_internal/AudioVoice_ResetData.s,AudioVoice_ResetData,0x801A5A10,0x3
+asm/non_matchings/code/voice_internal/func_801A5A1C.s,func_801A5A1C,0x801A5A1C,0x69
asm/non_matchings/code/code_801A5BD0/AudioSfx_MuteBanks.s,AudioSfx_MuteBanks,0x801A5BD0,0x16
asm/non_matchings/code/code_801A5BD0/AudioSfx_LowerBgmVolume.s,AudioSfx_LowerBgmVolume,0x801A5C28,0x19
asm/non_matchings/code/code_801A5BD0/AudioSfx_RestoreBgmVolume.s,AudioSfx_RestoreBgmVolume,0x801A5C8C,0x1C
@@ -3568,21 +3568,21 @@ asm/non_matchings/code/code_801A5BD0/AudioSfx_StepBankLerp.s,AudioSfx_StepBankLe
asm/non_matchings/code/code_801A5BD0/AudioSfx_ProcessActiveSfx.s,AudioSfx_ProcessActiveSfx,0x801A787C,0x1A
asm/non_matchings/code/code_801A5BD0/AudioSfx_IsPlaying.s,AudioSfx_IsPlaying,0x801A78E4,0x1A
asm/non_matchings/code/code_801A5BD0/AudioSfx_Reset.s,AudioSfx_Reset,0x801A794C,0x71
-asm/non_matchings/code/code_801A7B10/Audio_StartSequence.s,Audio_StartSequence,0x801A7B10,0x7D
-asm/non_matchings/code/code_801A7B10/Audio_StopSequence.s,Audio_StopSequence,0x801A7D04,0x20
-asm/non_matchings/code/code_801A7B10/func_801A7D84.s,func_801A7D84,0x801A7D84,0x309
-asm/non_matchings/code/code_801A7B10/Audio_QueueSeqCmd.s,Audio_QueueSeqCmd,0x801A89A8,0xA
-asm/non_matchings/code/code_801A7B10/func_801A89D0.s,func_801A89D0,0x801A89D0,0x20
-asm/non_matchings/code/code_801A7B10/Audio_GetActiveSequence.s,Audio_GetActiveSequence,0x801A8A50,0x1B
-asm/non_matchings/code/code_801A7B10/func_801A8ABC.s,func_801A8ABC,0x801A8ABC,0x16
-asm/non_matchings/code/code_801A7B10/func_801A8B14.s,func_801A8B14,0x801A8B14,0x6
-asm/non_matchings/code/code_801A7B10/func_801A8B2C.s,func_801A8B2C,0x801A8B2C,0x29
-asm/non_matchings/code/code_801A7B10/Audio_SetVolumeScale.s,Audio_SetVolumeScale,0x801A8BD0,0x63
-asm/non_matchings/code/code_801A7B10/func_801A8D5C.s,func_801A8D5C,0x801A8D5C,0x283
-asm/non_matchings/code/code_801A7B10/func_801A9768.s,func_801A9768,0x801A9768,0x31
-asm/non_matchings/code/code_801A7B10/func_801A982C.s,func_801A982C,0x801A982C,0x63
-asm/non_matchings/code/code_801A7B10/func_801A99B8.s,func_801A99B8,0x801A99B8,0x2F
-asm/non_matchings/code/code_801A7B10/func_801A9A74.s,func_801A9A74,0x801A9A74,0x27
+asm/non_matchings/code/sequence/AudioSeq_StartSequence.s,AudioSeq_StartSequence,0x801A7B10,0x7D
+asm/non_matchings/code/sequence/AudioSeq_StopSequence.s,AudioSeq_StopSequence,0x801A7D04,0x20
+asm/non_matchings/code/sequence/AudioSeq_ProcessSeqCmd.s,AudioSeq_ProcessSeqCmd,0x801A7D84,0x309
+asm/non_matchings/code/sequence/AudioSeq_QueueSeqCmd.s,AudioSeq_QueueSeqCmd,0x801A89A8,0xA
+asm/non_matchings/code/sequence/AudioSeq_ProcessSeqCmds.s,AudioSeq_ProcessSeqCmds,0x801A89D0,0x20
+asm/non_matchings/code/sequence/AudioSeq_GetActiveSeqId.s,AudioSeq_GetActiveSeqId,0x801A8A50,0x1B
+asm/non_matchings/code/sequence/AudioSeq_IsSeqCmdNotQueued.s,AudioSeq_IsSeqCmdNotQueued,0x801A8ABC,0x16
+asm/non_matchings/code/sequence/AudioSeq_ResetSequenceRequests.s,AudioSeq_ResetSequenceRequests,0x801A8B14,0x6
+asm/non_matchings/code/sequence/AudioSeq_ReplaceSeqCmdSetupOpVolRestore.s,AudioSeq_ReplaceSeqCmdSetupOpVolRestore,0x801A8B2C,0x29
+asm/non_matchings/code/sequence/AudioSeq_SetVolumeScale.s,AudioSeq_SetVolumeScale,0x801A8BD0,0x63
+asm/non_matchings/code/sequence/AudioSeq_UpdateActiveSequences.s,AudioSeq_UpdateActiveSequences,0x801A8D5C,0x283
+asm/non_matchings/code/sequence/AudioSeq_UpdateAudioHeapReset.s,AudioSeq_UpdateAudioHeapReset,0x801A9768,0x31
+asm/non_matchings/code/sequence/AudioSeq_ResetReverb.s,AudioSeq_ResetReverb,0x801A982C,0x63
+asm/non_matchings/code/sequence/AudioSeq_ResetActiveSequences.s,AudioSeq_ResetActiveSequences,0x801A99B8,0x2F
+asm/non_matchings/code/sequence/AudioSeq_ResetActiveSequencesAndVolume.s,AudioSeq_ResetActiveSequencesAndVolume,0x801A9A74,0x27
asm/non_matchings/code/jpegutils/JpegUtils_ProcessQuantizationTable.s,JpegUtils_ProcessQuantizationTable,0x801A9B10,0x1A
asm/non_matchings/code/jpegutils/JpegUtils_ParseHuffmanCodesLengths.s,JpegUtils_ParseHuffmanCodesLengths,0x801A9B78,0x21
asm/non_matchings/code/jpegutils/JpegUtils_GetHuffmanCodes.s,JpegUtils_GetHuffmanCodes,0x801A9BFC,0x1B
@@ -3598,4 +3598,4 @@ asm/non_matchings/code/jpegdecoder/JpegDecoder_ReadBits.s,JpegDecoder_ReadBits,0
asm/non_matchings/code/z_game_over/GameOver_Init.s,GameOver_Init,0x801AA610,0x5
asm/non_matchings/code/z_game_over/GameOver_FadeLights.s,GameOver_FadeLights,0x801AA624,0x1A
asm/non_matchings/code/z_game_over/GameOver_Update.s,GameOver_Update,0x801AA68C,0x105
-asm/non_matchings/code/z_construct/func_801AAAA0.s,func_801AAAA0,0x801AAAA0,0x4
+asm/non_matchings/code/z_construct/Regs_InitData.s,Regs_InitData,0x801AAAA0,0x4
diff --git a/tools/weekeventregconvert.py b/tools/weekeventregconvert.py
new file mode 100755
index 000000000..34b3ddc46
--- /dev/null
+++ b/tools/weekeventregconvert.py
@@ -0,0 +1,889 @@
+#!/usr/bin/env python3
+
+import argparse
+import re
+
+weekEventReg = {
+ ( 0 << 8) | 0x01: "WEEKEVENTREG_00_01",
+ ( 0 << 8) | 0x02: "WEEKEVENTREG_ENTERED_TERMINA_FIELD",
+ ( 0 << 8) | 0x04: "WEEKEVENTREG_ENTERED_IKANA_GRAVEYARD",
+ ( 0 << 8) | 0x08: "WEEKEVENTREG_ENTERED_ROMANI_RANCH",
+ ( 0 << 8) | 0x10: "WEEKEVENTREG_ENTERED_GORMAN_TRACK",
+ ( 0 << 8) | 0x20: "WEEKEVENTREG_ENTERED_MOUNTAIN_VILLAGE_WINTER",
+ ( 0 << 8) | 0x40: "WEEKEVENTREG_ENTERED_GORON_SHRINE",
+ ( 0 << 8) | 0x80: "WEEKEVENTREG_ENTERED_SNOWHEAD",
+ ( 1 << 8) | 0x01: "WEEKEVENTREG_ENTERED_SOUTHERN_SWAMP_POISONED",
+ ( 1 << 8) | 0x02: "WEEKEVENTREG_ENTERED_WOODFALL",
+ ( 1 << 8) | 0x04: "WEEKEVENTREG_ENTERED_DEKU_PALACE",
+ ( 1 << 8) | 0x08: "WEEKEVENTREG_ENTERED_GREAT_BAY_COAST",
+ ( 1 << 8) | 0x10: "WEEKEVENTREG_ENTERED_PIRATES_FORTRESS",
+ ( 1 << 8) | 0x20: "WEEKEVENTREG_ENTERED_ZORA_HALL",
+ ( 1 << 8) | 0x40: "WEEKEVENTREG_ENTERED_WATERFALL_RAPIDS",
+ ( 1 << 8) | 0x80: "WEEKEVENTREG_ENTERED_IKANA_CANYON",
+ ( 2 << 8) | 0x01: "WEEKEVENTREG_ENTERED_IKANA_CASTLE",
+ ( 2 << 8) | 0x02: "WEEKEVENTREG_ENTERED_STONE_TOWER",
+ ( 2 << 8) | 0x04: "WEEKEVENTREG_ENTERED_STONE_TOWER_INVERTED",
+ ( 2 << 8) | 0x08: "WEEKEVENTREG_ENTERED_EAST_CLOCK_TOWN",
+ ( 2 << 8) | 0x10: "WEEKEVENTREG_ENTERED_WEST_CLOCK_TOWN",
+ ( 2 << 8) | 0x20: "WEEKEVENTREG_ENTERED_NORTH_CLOCK_TOWN",
+ ( 2 << 8) | 0x40: "WEEKEVENTREG_ENTERED_WOODFALL_TEMPLE",
+ ( 2 << 8) | 0x80: "WEEKEVENTREG_ENTERED_SNOWHEAD_TEMPLE",
+ ( 3 << 8) | 0x01: "WEEKEVENTREG_ENTERED_PIRATES_FORTRESS_EXTERIOR",
+ ( 3 << 8) | 0x02: "WEEKEVENTREG_ENTERED_STONE_TOWER_TEMPLE",
+ ( 3 << 8) | 0x04: "WEEKEVENTREG_ENTERED_STONE_TOWER_TEMPLE_INVERTED",
+ ( 3 << 8) | 0x08: "WEEKEVENTREG_ENTERED_THE_MOON",
+ ( 3 << 8) | 0x10: "WEEKEVENTREG_ENTERED_MOON_DEKU_TRIAL",
+ ( 3 << 8) | 0x20: "WEEKEVENTREG_ENTERED_MOON_GORON_TRIAL",
+ ( 3 << 8) | 0x40: "WEEKEVENTREG_ENTERED_MOON_ZORA_TRIAL",
+ ( 3 << 8) | 0x80: "WEEKEVENTREG_03_80",
+ ( 4 << 8) | 0x01: "WEEKEVENTREG_04_01",
+ ( 4 << 8) | 0x02: "WEEKEVENTREG_04_02",
+ ( 4 << 8) | 0x04: "WEEKEVENTREG_04_04",
+ ( 4 << 8) | 0x08: "WEEKEVENTREG_04_08",
+ ( 4 << 8) | 0x10: "WEEKEVENTREG_04_10",
+ ( 4 << 8) | 0x20: "WEEKEVENTREG_04_20",
+ ( 4 << 8) | 0x40: "WEEKEVENTREG_04_40",
+ ( 4 << 8) | 0x80: "WEEKEVENTREG_04_80",
+ ( 5 << 8) | 0x01: "WEEKEVENTREG_05_01",
+ ( 5 << 8) | 0x02: "WEEKEVENTREG_05_02",
+ ( 5 << 8) | 0x04: "WEEKEVENTREG_05_04",
+ ( 5 << 8) | 0x08: "WEEKEVENTREG_05_08",
+ ( 5 << 8) | 0x10: "WEEKEVENTREG_05_10",
+ ( 5 << 8) | 0x20: "WEEKEVENTREG_05_20",
+ ( 5 << 8) | 0x40: "WEEKEVENTREG_05_40",
+ ( 5 << 8) | 0x80: "WEEKEVENTREG_05_80",
+ ( 6 << 8) | 0x01: "WEEKEVENTREG_06_01",
+ ( 6 << 8) | 0x02: "WEEKEVENTREG_06_02",
+ ( 6 << 8) | 0x04: "WEEKEVENTREG_06_04",
+ ( 6 << 8) | 0x08: "WEEKEVENTREG_06_08",
+ ( 6 << 8) | 0x10: "WEEKEVENTREG_06_10",
+ ( 6 << 8) | 0x20: "WEEKEVENTREG_06_20",
+ ( 6 << 8) | 0x40: "WEEKEVENTREG_06_40",
+ ( 6 << 8) | 0x80: "WEEKEVENTREG_06_80",
+ ( 7 << 8) | 0x01: "WEEKEVENTREG_07_01",
+ ( 7 << 8) | 0x02: "WEEKEVENTREG_07_02",
+ ( 7 << 8) | 0x04: "WEEKEVENTREG_07_04",
+ ( 7 << 8) | 0x08: "WEEKEVENTREG_07_08",
+ ( 7 << 8) | 0x10: "WEEKEVENTREG_07_10",
+ ( 7 << 8) | 0x20: "WEEKEVENTREG_07_20",
+ ( 7 << 8) | 0x40: "WEEKEVENTREG_07_40",
+ ( 7 << 8) | 0x80: "WEEKEVENTREG_ENTERED_WOODFALL_TEMPLE_PRISON",
+ ( 8 << 8) | 0x01: "WEEKEVENTREG_08_01",
+ ( 8 << 8) | 0x02: "WEEKEVENTREG_08_02",
+ ( 8 << 8) | 0x04: "WEEKEVENTREG_08_04",
+ ( 8 << 8) | 0x08: "WEEKEVENTREG_08_08",
+ ( 8 << 8) | 0x10: "WEEKEVENTREG_08_10",
+ ( 8 << 8) | 0x20: "WEEKEVENTREG_08_20",
+ ( 8 << 8) | 0x40: "WEEKEVENTREG_08_40",
+ ( 8 << 8) | 0x80: "WEEKEVENTREG_08_80",
+ ( 9 << 8) | 0x01: "WEEKEVENTREG_09_01",
+ ( 9 << 8) | 0x02: "WEEKEVENTREG_09_02",
+ ( 9 << 8) | 0x04: "WEEKEVENTREG_09_04",
+ ( 9 << 8) | 0x08: "WEEKEVENTREG_09_08",
+ ( 9 << 8) | 0x10: "WEEKEVENTREG_09_10",
+ ( 9 << 8) | 0x20: "WEEKEVENTREG_09_20",
+ ( 9 << 8) | 0x40: "WEEKEVENTREG_09_40",
+ ( 9 << 8) | 0x80: "WEEKEVENTREG_09_80",
+ (10 << 8) | 0x01: "WEEKEVENTREG_10_01",
+ (10 << 8) | 0x02: "WEEKEVENTREG_10_02",
+ (10 << 8) | 0x04: "WEEKEVENTREG_10_04",
+ (10 << 8) | 0x08: "WEEKEVENTREG_10_08",
+ (10 << 8) | 0x10: "WEEKEVENTREG_10_10",
+ (10 << 8) | 0x20: "WEEKEVENTREG_10_20",
+ (10 << 8) | 0x40: "WEEKEVENTREG_10_40",
+ (10 << 8) | 0x80: "WEEKEVENTREG_10_80",
+ (11 << 8) | 0x01: "WEEKEVENTREG_11_01",
+ (11 << 8) | 0x02: "WEEKEVENTREG_11_02",
+ (11 << 8) | 0x04: "WEEKEVENTREG_11_04",
+ (11 << 8) | 0x08: "WEEKEVENTREG_11_08",
+ (11 << 8) | 0x10: "WEEKEVENTREG_11_10",
+ (11 << 8) | 0x20: "WEEKEVENTREG_11_20",
+ (11 << 8) | 0x40: "WEEKEVENTREG_11_40",
+ (11 << 8) | 0x80: "WEEKEVENTREG_11_80",
+ (12 << 8) | 0x01: "WEEKEVENTREG_12_01",
+ (12 << 8) | 0x02: "WEEKEVENTREG_12_02",
+ (12 << 8) | 0x04: "WEEKEVENTREG_12_04",
+ (12 << 8) | 0x08: "WEEKEVENTREG_12_08",
+ (12 << 8) | 0x10: "WEEKEVENTREG_12_10",
+ (12 << 8) | 0x20: "WEEKEVENTREG_12_20",
+ (12 << 8) | 0x40: "WEEKEVENTREG_12_40",
+ (12 << 8) | 0x80: "WEEKEVENTREG_12_80",
+ (13 << 8) | 0x01: "WEEKEVENTREG_13_01",
+ (13 << 8) | 0x02: "WEEKEVENTREG_13_02",
+ (13 << 8) | 0x04: "WEEKEVENTREG_13_04",
+ (13 << 8) | 0x08: "WEEKEVENTREG_13_08",
+ (13 << 8) | 0x10: "WEEKEVENTREG_13_10",
+ (13 << 8) | 0x20: "WEEKEVENTREG_OCEANSIDE_SPIDER_HOUSE_BUYER_MOVED_IN",
+ (13 << 8) | 0x40: "WEEKEVENTREG_RECEIVED_OCEANSIDE_WALLET_UPGRADE",
+ (13 << 8) | 0x80: "WEEKEVENTREG_OCEANSIDE_SPIDER_HOUSE_COLLECTED_REWARD",
+ (14 << 8) | 0x01: "WEEKEVENTREG_14_01",
+ (14 << 8) | 0x02: "WEEKEVENTREG_14_02",
+ (14 << 8) | 0x04: "WEEKEVENTREG_14_04",
+ (14 << 8) | 0x08: "WEEKEVENTREG_DRANK_CHATEAU_ROMANI",
+ (14 << 8) | 0x10: "WEEKEVENTREG_14_10",
+ (14 << 8) | 0x20: "WEEKEVENTREG_14_20",
+ (14 << 8) | 0x40: "WEEKEVENTREG_14_40",
+ (14 << 8) | 0x80: "WEEKEVENTREG_14_80",
+ (15 << 8) | 0x01: "WEEKEVENTREG_15_01",
+ (15 << 8) | 0x02: "WEEKEVENTREG_15_02",
+ (15 << 8) | 0x04: "WEEKEVENTREG_15_04",
+ (15 << 8) | 0x08: "WEEKEVENTREG_15_08",
+ (15 << 8) | 0x10: "WEEKEVENTREG_15_10",
+ (15 << 8) | 0x20: "WEEKEVENTREG_15_20",
+ (15 << 8) | 0x40: "WEEKEVENTREG_15_40",
+ (15 << 8) | 0x80: "WEEKEVENTREG_15_80",
+ (16 << 8) | 0x01: "WEEKEVENTREG_16_01",
+ (16 << 8) | 0x02: "WEEKEVENTREG_16_02",
+ (16 << 8) | 0x04: "WEEKEVENTREG_16_04",
+ (16 << 8) | 0x08: "WEEKEVENTREG_16_08",
+ (16 << 8) | 0x10: "WEEKEVENTREG_16_10",
+ (16 << 8) | 0x20: "WEEKEVENTREG_16_20",
+ (16 << 8) | 0x40: "WEEKEVENTREG_16_40",
+ (16 << 8) | 0x80: "WEEKEVENTREG_16_80",
+ (17 << 8) | 0x01: "WEEKEVENTREG_17_01",
+ (17 << 8) | 0x02: "WEEKEVENTREG_17_02",
+ (17 << 8) | 0x04: "WEEKEVENTREG_17_04",
+ (17 << 8) | 0x08: "WEEKEVENTREG_17_08",
+ (17 << 8) | 0x10: "WEEKEVENTREG_17_10",
+ (17 << 8) | 0x20: "WEEKEVENTREG_17_20",
+ (17 << 8) | 0x40: "WEEKEVENTREG_17_40",
+ (17 << 8) | 0x80: "WEEKEVENTREG_17_80",
+ (18 << 8) | 0x01: "WEEKEVENTREG_18_01",
+ (18 << 8) | 0x02: "WEEKEVENTREG_18_02",
+ (18 << 8) | 0x04: "WEEKEVENTREG_18_04",
+ (18 << 8) | 0x08: "WEEKEVENTREG_18_08",
+ (18 << 8) | 0x10: "WEEKEVENTREG_18_10",
+ (18 << 8) | 0x20: "WEEKEVENTREG_18_20",
+ (18 << 8) | 0x40: "WEEKEVENTREG_18_40",
+ (18 << 8) | 0x80: "WEEKEVENTREG_18_80",
+ (19 << 8) | 0x01: "WEEKEVENTREG_19_01",
+ (19 << 8) | 0x02: "WEEKEVENTREG_19_02",
+ (19 << 8) | 0x04: "WEEKEVENTREG_19_04",
+ (19 << 8) | 0x08: "WEEKEVENTREG_19_08",
+ (19 << 8) | 0x10: "WEEKEVENTREG_19_10",
+ (19 << 8) | 0x20: "WEEKEVENTREG_19_20",
+ (19 << 8) | 0x40: "WEEKEVENTREG_19_40",
+ (19 << 8) | 0x80: "WEEKEVENTREG_19_80",
+ (20 << 8) | 0x01: "WEEKEVENTREG_20_01",
+ (20 << 8) | 0x02: "WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE",
+ (20 << 8) | 0x04: "WEEKEVENTREG_20_04",
+ (20 << 8) | 0x08: "WEEKEVENTREG_20_08",
+ (20 << 8) | 0x10: "WEEKEVENTREG_20_10",
+ (20 << 8) | 0x20: "WEEKEVENTREG_20_20",
+ (20 << 8) | 0x40: "WEEKEVENTREG_20_40",
+ (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) | 0x10: "WEEKEVENTREG_21_10",
+ (21 << 8) | 0x20: "WEEKEVENTREG_21_20",
+ (21 << 8) | 0x40: "WEEKEVENTREG_21_40",
+ (21 << 8) | 0x80: "WEEKEVENTREG_21_80",
+ (22 << 8) | 0x01: "WEEKEVENTREG_22_01",
+ (22 << 8) | 0x02: "WEEKEVENTREG_22_02",
+ (22 << 8) | 0x04: "WEEKEVENTREG_22_04",
+ (22 << 8) | 0x08: "WEEKEVENTREG_22_08",
+ (22 << 8) | 0x10: "WEEKEVENTREG_22_10",
+ (22 << 8) | 0x20: "WEEKEVENTREG_22_20",
+ (22 << 8) | 0x40: "WEEKEVENTREG_22_40",
+ (22 << 8) | 0x80: "WEEKEVENTREG_22_80",
+ (23 << 8) | 0x01: "WEEKEVENTREG_23_01",
+ (23 << 8) | 0x02: "WEEKEVENTREG_23_02",
+ (23 << 8) | 0x04: "WEEKEVENTREG_23_04",
+ (23 << 8) | 0x08: "WEEKEVENTREG_23_08",
+ (23 << 8) | 0x10: "WEEKEVENTREG_23_10",
+ (23 << 8) | 0x20: "WEEKEVENTREG_23_20",
+ (23 << 8) | 0x40: "WEEKEVENTREG_23_40",
+ (23 << 8) | 0x80: "WEEKEVENTREG_23_80",
+ (24 << 8) | 0x01: "WEEKEVENTREG_24_01",
+ (24 << 8) | 0x02: "WEEKEVENTREG_24_02",
+ (24 << 8) | 0x04: "WEEKEVENTREG_24_04",
+ (24 << 8) | 0x08: "WEEKEVENTREG_24_08",
+ (24 << 8) | 0x10: "WEEKEVENTREG_24_10",
+ (24 << 8) | 0x20: "WEEKEVENTREG_24_20",
+ (24 << 8) | 0x40: "WEEKEVENTREG_24_40",
+ (24 << 8) | 0x80: "WEEKEVENTREG_24_80",
+ (25 << 8) | 0x01: "WEEKEVENTREG_25_01",
+ (25 << 8) | 0x02: "WEEKEVENTREG_25_02",
+ (25 << 8) | 0x04: "WEEKEVENTREG_25_04",
+ (25 << 8) | 0x08: "WEEKEVENTREG_25_08",
+ (25 << 8) | 0x10: "WEEKEVENTREG_25_10",
+ (25 << 8) | 0x20: "WEEKEVENTREG_25_20",
+ (25 << 8) | 0x40: "WEEKEVENTREG_25_40",
+ (25 << 8) | 0x80: "WEEKEVENTREG_25_80",
+ (26 << 8) | 0x01: "WEEKEVENTREG_26_01",
+ (26 << 8) | 0x02: "WEEKEVENTREG_26_02",
+ (26 << 8) | 0x04: "WEEKEVENTREG_26_04",
+ (26 << 8) | 0x08: "WEEKEVENTREG_26_08",
+ (26 << 8) | 0x10: "WEEKEVENTREG_26_10",
+ (26 << 8) | 0x20: "WEEKEVENTREG_26_20",
+ (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) | 0x40: "WEEKEVENTREG_27_40",
+ (27 << 8) | 0x80: "WEEKEVENTREG_27_80",
+ (28 << 8) | 0x01: "WEEKEVENTREG_28_01",
+ (28 << 8) | 0x02: "WEEKEVENTREG_28_02",
+ (28 << 8) | 0x04: "WEEKEVENTREG_28_04",
+ (28 << 8) | 0x08: "WEEKEVENTREG_28_08",
+ (28 << 8) | 0x10: "WEEKEVENTREG_28_10",
+ (28 << 8) | 0x20: "WEEKEVENTREG_28_20",
+ (28 << 8) | 0x40: "WEEKEVENTREG_28_40",
+ (28 << 8) | 0x80: "WEEKEVENTREG_28_80",
+ (29 << 8) | 0x01: "WEEKEVENTREG_29_01",
+ (29 << 8) | 0x02: "WEEKEVENTREG_29_02",
+ (29 << 8) | 0x04: "WEEKEVENTREG_29_04",
+ (29 << 8) | 0x08: "WEEKEVENTREG_29_08",
+ (29 << 8) | 0x10: "WEEKEVENTREG_29_10",
+ (29 << 8) | 0x20: "WEEKEVENTREG_29_20",
+ (29 << 8) | 0x40: "WEEKEVENTREG_29_40",
+ (29 << 8) | 0x80: "WEEKEVENTREG_29_80",
+ (30 << 8) | 0x01: "WEEKEVENTREG_30_01",
+ (30 << 8) | 0x02: "WEEKEVENTREG_30_02",
+ (30 << 8) | 0x04: "WEEKEVENTREG_30_04",
+ (30 << 8) | 0x08: "WEEKEVENTREG_30_08",
+ (30 << 8) | 0x10: "WEEKEVENTREG_30_10",
+ (30 << 8) | 0x20: "WEEKEVENTREG_30_20",
+ (30 << 8) | 0x40: "WEEKEVENTREG_30_40",
+ (30 << 8) | 0x80: "WEEKEVENTREG_30_80",
+ (31 << 8) | 0x01: "WEEKEVENTREG_31_01",
+ (31 << 8) | 0x02: "WEEKEVENTREG_31_02",
+ (31 << 8) | 0x04: "WEEKEVENTREG_31_04",
+ (31 << 8) | 0x08: "WEEKEVENTREG_31_08",
+ (31 << 8) | 0x10: "WEEKEVENTREG_31_10",
+ (31 << 8) | 0x20: "WEEKEVENTREG_31_20",
+ (31 << 8) | 0x40: "WEEKEVENTREG_31_40",
+ (31 << 8) | 0x80: "WEEKEVENTREG_31_80",
+ (32 << 8) | 0x01: "WEEKEVENTREG_32_01",
+ (32 << 8) | 0x02: "WEEKEVENTREG_32_02",
+ (32 << 8) | 0x04: "WEEKEVENTREG_32_04",
+ (32 << 8) | 0x08: "WEEKEVENTREG_32_08",
+ (32 << 8) | 0x10: "WEEKEVENTREG_32_10",
+ (32 << 8) | 0x20: "WEEKEVENTREG_32_20",
+ (32 << 8) | 0x40: "WEEKEVENTREG_32_40",
+ (32 << 8) | 0x80: "WEEKEVENTREG_32_80",
+ (33 << 8) | 0x01: "WEEKEVENTREG_33_01",
+ (33 << 8) | 0x02: "WEEKEVENTREG_33_02",
+ (33 << 8) | 0x04: "WEEKEVENTREG_33_04",
+ (33 << 8) | 0x08: "WEEKEVENTREG_33_08",
+ (33 << 8) | 0x10: "WEEKEVENTREG_33_10",
+ (33 << 8) | 0x20: "WEEKEVENTREG_33_20",
+ (33 << 8) | 0x40: "WEEKEVENTREG_33_40",
+ (33 << 8) | 0x80: "WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE",
+ (34 << 8) | 0x01: "WEEKEVENTREG_34_01",
+ (34 << 8) | 0x02: "WEEKEVENTREG_34_02",
+ (34 << 8) | 0x04: "WEEKEVENTREG_34_04",
+ (34 << 8) | 0x08: "WEEKEVENTREG_SWAMP_SPIDER_HOUSE_TALKED",
+ (34 << 8) | 0x10: "WEEKEVENTREG_34_10",
+ (34 << 8) | 0x20: "WEEKEVENTREG_34_20",
+ (34 << 8) | 0x40: "WEEKEVENTREG_RECEIVED_MASK_OF_TRUTH",
+ (34 << 8) | 0x80: "WEEKEVENTREG_34_80",
+ (35 << 8) | 0x01: "WEEKEVENTREG_35_01",
+ (35 << 8) | 0x02: "WEEKEVENTREG_35_02",
+ (35 << 8) | 0x04: "WEEKEVENTREG_35_04",
+ (35 << 8) | 0x08: "WEEKEVENTREG_35_08",
+ (35 << 8) | 0x10: "WEEKEVENTREG_35_10",
+ (35 << 8) | 0x20: "WEEKEVENTREG_35_20",
+ (35 << 8) | 0x40: "WEEKEVENTREG_35_40",
+ (35 << 8) | 0x80: "WEEKEVENTREG_35_80",
+ (36 << 8) | 0x01: "WEEKEVENTREG_36_01",
+ (36 << 8) | 0x02: "WEEKEVENTREG_36_02",
+ (36 << 8) | 0x04: "WEEKEVENTREG_36_04",
+ (36 << 8) | 0x08: "WEEKEVENTREG_36_08",
+ (36 << 8) | 0x10: "WEEKEVENTREG_36_10",
+ (36 << 8) | 0x20: "WEEKEVENTREG_36_20",
+ (36 << 8) | 0x40: "WEEKEVENTREG_36_40",
+ (36 << 8) | 0x80: "WEEKEVENTREG_36_80",
+ (37 << 8) | 0x01: "WEEKEVENTREG_37_01",
+ (37 << 8) | 0x02: "WEEKEVENTREG_37_02",
+ (37 << 8) | 0x04: "WEEKEVENTREG_37_04",
+ (37 << 8) | 0x08: "WEEKEVENTREG_37_08",
+ (37 << 8) | 0x10: "WEEKEVENTREG_37_10",
+ (37 << 8) | 0x20: "WEEKEVENTREG_37_20",
+ (37 << 8) | 0x40: "WEEKEVENTREG_37_40",
+ (37 << 8) | 0x80: "WEEKEVENTREG_37_80",
+ (38 << 8) | 0x01: "WEEKEVENTREG_38_01",
+ (38 << 8) | 0x02: "WEEKEVENTREG_38_02",
+ (38 << 8) | 0x04: "WEEKEVENTREG_38_04",
+ (38 << 8) | 0x08: "WEEKEVENTREG_38_08",
+ (38 << 8) | 0x10: "WEEKEVENTREG_38_10",
+ (38 << 8) | 0x20: "WEEKEVENTREG_38_20",
+ (38 << 8) | 0x40: "WEEKEVENTREG_38_40",
+ (38 << 8) | 0x80: "WEEKEVENTREG_38_80",
+ (39 << 8) | 0x01: "WEEKEVENTREG_39_01",
+ (39 << 8) | 0x02: "WEEKEVENTREG_39_02",
+ (39 << 8) | 0x04: "WEEKEVENTREG_39_04",
+ (39 << 8) | 0x08: "WEEKEVENTREG_39_08",
+ (39 << 8) | 0x10: "WEEKEVENTREG_39_10",
+ (39 << 8) | 0x20: "WEEKEVENTREG_39_20",
+ (39 << 8) | 0x40: "WEEKEVENTREG_39_40",
+ (39 << 8) | 0x80: "WEEKEVENTREG_39_80",
+ (40 << 8) | 0x01: "WEEKEVENTREG_40_01",
+ (40 << 8) | 0x02: "WEEKEVENTREG_40_02",
+ (40 << 8) | 0x04: "WEEKEVENTREG_40_04",
+ (40 << 8) | 0x08: "WEEKEVENTREG_40_08",
+ (40 << 8) | 0x10: "WEEKEVENTREG_40_10",
+ (40 << 8) | 0x20: "WEEKEVENTREG_40_20",
+ (40 << 8) | 0x40: "WEEKEVENTREG_40_40",
+ (40 << 8) | 0x80: "WEEKEVENTREG_40_80",
+ (41 << 8) | 0x01: "WEEKEVENTREG_41_01",
+ (41 << 8) | 0x02: "WEEKEVENTREG_41_02",
+ (41 << 8) | 0x04: "WEEKEVENTREG_41_04",
+ (41 << 8) | 0x08: "WEEKEVENTREG_41_08",
+ (41 << 8) | 0x10: "WEEKEVENTREG_41_10",
+ (41 << 8) | 0x20: "WEEKEVENTREG_41_20",
+ (41 << 8) | 0x40: "WEEKEVENTREG_41_40",
+ (41 << 8) | 0x80: "WEEKEVENTREG_41_80",
+ (42 << 8) | 0x01: "WEEKEVENTREG_42_01",
+ (42 << 8) | 0x02: "WEEKEVENTREG_42_02",
+ (42 << 8) | 0x04: "WEEKEVENTREG_42_04",
+ (42 << 8) | 0x08: "WEEKEVENTREG_42_08",
+ (42 << 8) | 0x10: "WEEKEVENTREG_42_10",
+ (42 << 8) | 0x20: "WEEKEVENTREG_42_20",
+ (42 << 8) | 0x40: "WEEKEVENTREG_42_40",
+ (42 << 8) | 0x80: "WEEKEVENTREG_42_80",
+ (43 << 8) | 0x01: "WEEKEVENTREG_43_01",
+ (43 << 8) | 0x02: "WEEKEVENTREG_43_02",
+ (43 << 8) | 0x04: "WEEKEVENTREG_43_04",
+ (43 << 8) | 0x08: "WEEKEVENTREG_43_08",
+ (43 << 8) | 0x10: "WEEKEVENTREG_43_10",
+ (43 << 8) | 0x20: "WEEKEVENTREG_43_20",
+ (43 << 8) | 0x40: "WEEKEVENTREG_43_40",
+ (43 << 8) | 0x80: "WEEKEVENTREG_43_80",
+ (44 << 8) | 0x01: "WEEKEVENTREG_44_01",
+ (44 << 8) | 0x02: "WEEKEVENTREG_44_02",
+ (44 << 8) | 0x04: "WEEKEVENTREG_44_04",
+ (44 << 8) | 0x08: "WEEKEVENTREG_44_08",
+ (44 << 8) | 0x10: "WEEKEVENTREG_44_10",
+ (44 << 8) | 0x20: "WEEKEVENTREG_44_20",
+ (44 << 8) | 0x40: "WEEKEVENTREG_44_40",
+ (44 << 8) | 0x80: "WEEKEVENTREG_44_80",
+ (45 << 8) | 0x01: "WEEKEVENTREG_45_01",
+ (45 << 8) | 0x02: "WEEKEVENTREG_45_02",
+ (45 << 8) | 0x04: "WEEKEVENTREG_45_04",
+ (45 << 8) | 0x08: "WEEKEVENTREG_45_08",
+ (45 << 8) | 0x10: "WEEKEVENTREG_45_10",
+ (45 << 8) | 0x20: "WEEKEVENTREG_45_20",
+ (45 << 8) | 0x40: "WEEKEVENTREG_45_40",
+ (45 << 8) | 0x80: "WEEKEVENTREG_45_80",
+ (46 << 8) | 0x01: "WEEKEVENTREG_46_01",
+ (46 << 8) | 0x02: "WEEKEVENTREG_46_02",
+ (46 << 8) | 0x04: "WEEKEVENTREG_46_04",
+ (46 << 8) | 0x08: "WEEKEVENTREG_46_08",
+ (46 << 8) | 0x10: "WEEKEVENTREG_46_10",
+ (46 << 8) | 0x20: "WEEKEVENTREG_46_20",
+ (46 << 8) | 0x40: "WEEKEVENTREG_46_40",
+ (46 << 8) | 0x80: "WEEKEVENTREG_46_80",
+ (47 << 8) | 0x01: "WEEKEVENTREG_47_01",
+ (47 << 8) | 0x02: "WEEKEVENTREG_47_02",
+ (47 << 8) | 0x04: "WEEKEVENTREG_47_04",
+ (47 << 8) | 0x08: "WEEKEVENTREG_47_08",
+ (47 << 8) | 0x10: "WEEKEVENTREG_47_10",
+ (47 << 8) | 0x20: "WEEKEVENTREG_47_20",
+ (47 << 8) | 0x40: "WEEKEVENTREG_47_40",
+ (47 << 8) | 0x80: "WEEKEVENTREG_47_80",
+ (48 << 8) | 0x01: "WEEKEVENTREG_48_01",
+ (48 << 8) | 0x02: "WEEKEVENTREG_48_02",
+ (48 << 8) | 0x04: "WEEKEVENTREG_48_04",
+ (48 << 8) | 0x08: "WEEKEVENTREG_48_08",
+ (48 << 8) | 0x10: "WEEKEVENTREG_48_10",
+ (48 << 8) | 0x20: "WEEKEVENTREG_48_20",
+ (48 << 8) | 0x40: "WEEKEVENTREG_48_40",
+ (48 << 8) | 0x80: "WEEKEVENTREG_48_80",
+ (49 << 8) | 0x01: "WEEKEVENTREG_49_01",
+ (49 << 8) | 0x02: "WEEKEVENTREG_49_02",
+ (49 << 8) | 0x04: "WEEKEVENTREG_49_04",
+ (49 << 8) | 0x08: "WEEKEVENTREG_49_08",
+ (49 << 8) | 0x10: "WEEKEVENTREG_49_10",
+ (49 << 8) | 0x20: "WEEKEVENTREG_49_20",
+ (49 << 8) | 0x40: "WEEKEVENTREG_49_40",
+ (49 << 8) | 0x80: "WEEKEVENTREG_49_80",
+ (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) | 0x10: "WEEKEVENTREG_50_10",
+ (50 << 8) | 0x20: "WEEKEVENTREG_50_20",
+ (50 << 8) | 0x40: "WEEKEVENTREG_50_40",
+ (50 << 8) | 0x80: "WEEKEVENTREG_50_80",
+ (51 << 8) | 0x01: "WEEKEVENTREG_51_01",
+ (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) | 0x40: "WEEKEVENTREG_51_40",
+ (51 << 8) | 0x80: "WEEKEVENTREG_51_80",
+ (52 << 8) | 0x01: "WEEKEVENTREG_52_01",
+ (52 << 8) | 0x02: "WEEKEVENTREG_52_02",
+ (52 << 8) | 0x04: "WEEKEVENTREG_52_04",
+ (52 << 8) | 0x08: "WEEKEVENTREG_52_08",
+ (52 << 8) | 0x10: "WEEKEVENTREG_52_10",
+ (52 << 8) | 0x20: "WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE",
+ (52 << 8) | 0x40: "WEEKEVENTREG_52_40",
+ (52 << 8) | 0x80: "WEEKEVENTREG_52_80",
+ (53 << 8) | 0x01: "WEEKEVENTREG_53_01",
+ (53 << 8) | 0x02: "WEEKEVENTREG_53_02",
+ (53 << 8) | 0x04: "WEEKEVENTREG_53_04",
+ (53 << 8) | 0x08: "WEEKEVENTREG_53_08",
+ (53 << 8) | 0x10: "WEEKEVENTREG_53_10",
+ (53 << 8) | 0x20: "WEEKEVENTREG_53_20",
+ (53 << 8) | 0x40: "WEEKEVENTREG_53_40",
+ (53 << 8) | 0x80: "WEEKEVENTREG_53_80",
+ (54 << 8) | 0x01: "WEEKEVENTREG_54_01",
+ (54 << 8) | 0x02: "WEEKEVENTREG_54_02",
+ (54 << 8) | 0x04: "WEEKEVENTREG_54_04",
+ (54 << 8) | 0x08: "WEEKEVENTREG_54_08",
+ (54 << 8) | 0x10: "WEEKEVENTREG_54_10",
+ (54 << 8) | 0x20: "WEEKEVENTREG_54_20",
+ (54 << 8) | 0x40: "WEEKEVENTREG_54_40",
+ (54 << 8) | 0x80: "WEEKEVENTREG_54_80",
+ (55 << 8) | 0x01: "WEEKEVENTREG_55_01",
+ (55 << 8) | 0x02: "WEEKEVENTREG_55_02",
+ (55 << 8) | 0x04: "WEEKEVENTREG_55_04",
+ (55 << 8) | 0x08: "WEEKEVENTREG_55_08",
+ (55 << 8) | 0x10: "WEEKEVENTREG_55_10",
+ (55 << 8) | 0x20: "WEEKEVENTREG_55_20",
+ (55 << 8) | 0x40: "WEEKEVENTREG_55_40",
+ (55 << 8) | 0x80: "WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE",
+ (56 << 8) | 0x01: "WEEKEVENTREG_56_01",
+ (56 << 8) | 0x02: "WEEKEVENTREG_56_02",
+ (56 << 8) | 0x04: "WEEKEVENTREG_56_04",
+ (56 << 8) | 0x08: "WEEKEVENTREG_56_08",
+ (56 << 8) | 0x10: "WEEKEVENTREG_56_10",
+ (56 << 8) | 0x20: "WEEKEVENTREG_56_20",
+ (56 << 8) | 0x40: "WEEKEVENTREG_56_40",
+ (56 << 8) | 0x80: "WEEKEVENTREG_56_80",
+ (57 << 8) | 0x01: "WEEKEVENTREG_57_01",
+ (57 << 8) | 0x02: "WEEKEVENTREG_57_02",
+ (57 << 8) | 0x04: "WEEKEVENTREG_57_04",
+ (57 << 8) | 0x08: "WEEKEVENTREG_57_08",
+ (57 << 8) | 0x10: "WEEKEVENTREG_57_10",
+ (57 << 8) | 0x20: "WEEKEVENTREG_57_20",
+ (57 << 8) | 0x40: "WEEKEVENTREG_57_40",
+ (57 << 8) | 0x80: "WEEKEVENTREG_57_80",
+ (58 << 8) | 0x01: "WEEKEVENTREG_58_01",
+ (58 << 8) | 0x02: "WEEKEVENTREG_58_02",
+ (58 << 8) | 0x04: "WEEKEVENTREG_58_04",
+ (58 << 8) | 0x08: "WEEKEVENTREG_58_08",
+ (58 << 8) | 0x10: "WEEKEVENTREG_58_10",
+ (58 << 8) | 0x20: "WEEKEVENTREG_58_20",
+ (58 << 8) | 0x40: "WEEKEVENTREG_58_40",
+ (58 << 8) | 0x80: "WEEKEVENTREG_58_80",
+ (59 << 8) | 0x01: "WEEKEVENTREG_59_01",
+ (59 << 8) | 0x02: "WEEKEVENTREG_59_02",
+ (59 << 8) | 0x08: "WEEKEVENTREG_59_08",
+ (59 << 8) | 0x04: "WEEKEVENTREG_59_04",
+ (59 << 8) | 0x10: "WEEKEVENTREG_59_10",
+ (59 << 8) | 0x20: "WEEKEVENTREG_59_20",
+ (59 << 8) | 0x40: "WEEKEVENTREG_59_40",
+ (59 << 8) | 0x80: "WEEKEVENTREG_59_80",
+ (60 << 8) | 0x01: "WEEKEVENTREG_60_01",
+ (60 << 8) | 0x02: "WEEKEVENTREG_60_02",
+ (60 << 8) | 0x04: "WEEKEVENTREG_60_04",
+ (60 << 8) | 0x08: "WEEKEVENTREG_60_08",
+ (60 << 8) | 0x10: "WEEKEVENTREG_60_10",
+ (60 << 8) | 0x20: "WEEKEVENTREG_60_20",
+ (60 << 8) | 0x40: "WEEKEVENTREG_60_40",
+ (60 << 8) | 0x80: "WEEKEVENTREG_60_80",
+ (61 << 8) | 0x01: "WEEKEVENTREG_61_01",
+ (61 << 8) | 0x02: "WEEKEVENTREG_61_02",
+ (61 << 8) | 0x04: "WEEKEVENTREG_61_04",
+ (61 << 8) | 0x08: "WEEKEVENTREG_61_08",
+ (61 << 8) | 0x10: "WEEKEVENTREG_61_10",
+ (61 << 8) | 0x20: "WEEKEVENTREG_61_20",
+ (61 << 8) | 0x40: "WEEKEVENTREG_61_40",
+ (61 << 8) | 0x80: "WEEKEVENTREG_61_80",
+ (62 << 8) | 0x01: "WEEKEVENTREG_62_01",
+ (62 << 8) | 0x02: "WEEKEVENTREG_62_02",
+ (62 << 8) | 0x04: "WEEKEVENTREG_62_04",
+ (62 << 8) | 0x08: "WEEKEVENTREG_62_08",
+ (62 << 8) | 0x10: "WEEKEVENTREG_62_10",
+ (62 << 8) | 0x20: "WEEKEVENTREG_62_20",
+ (62 << 8) | 0x40: "WEEKEVENTREG_62_40",
+ (62 << 8) | 0x80: "WEEKEVENTREG_62_80",
+ (63 << 8) | 0x01: "WEEKEVENTREG_KICKOUT_WAIT",
+ (63 << 8) | 0x02: "WEEKEVENTREG_KICKOUT_TIME_PASSED",
+ (63 << 8) | 0x04: "WEEKEVENTREG_63_04",
+ (63 << 8) | 0x08: "WEEKEVENTREG_63_08",
+ (63 << 8) | 0x10: "WEEKEVENTREG_63_10",
+ (63 << 8) | 0x20: "WEEKEVENTREG_63_20",
+ (63 << 8) | 0x40: "WEEKEVENTREG_63_40",
+ (63 << 8) | 0x80: "WEEKEVENTREG_63_80",
+ (64 << 8) | 0x01: "WEEKEVENTREG_64_01",
+ (64 << 8) | 0x02: "WEEKEVENTREG_64_02",
+ (64 << 8) | 0x04: "WEEKEVENTREG_64_04",
+ (64 << 8) | 0x08: "WEEKEVENTREG_64_08",
+ (64 << 8) | 0x10: "WEEKEVENTREG_64_10",
+ (64 << 8) | 0x20: "WEEKEVENTREG_64_20",
+ (64 << 8) | 0x40: "WEEKEVENTREG_64_40",
+ (64 << 8) | 0x80: "WEEKEVENTREG_64_80",
+ (65 << 8) | 0x01: "WEEKEVENTREG_65_01",
+ (65 << 8) | 0x02: "WEEKEVENTREG_65_02",
+ (65 << 8) | 0x04: "WEEKEVENTREG_65_04",
+ (65 << 8) | 0x08: "WEEKEVENTREG_65_08",
+ (65 << 8) | 0x10: "WEEKEVENTREG_65_10",
+ (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",
+ (72 << 8) | 0x80: "WEEKEVENTREG_72_80",
+ (73 << 8) | 0x01: "WEEKEVENTREG_73_01",
+ (73 << 8) | 0x02: "WEEKEVENTREG_73_02",
+ (73 << 8) | 0x04: "WEEKEVENTREG_73_04",
+ (73 << 8) | 0x08: "WEEKEVENTREG_73_08",
+ (73 << 8) | 0x10: "WEEKEVENTREG_73_10",
+ (73 << 8) | 0x20: "WEEKEVENTREG_73_20",
+ (73 << 8) | 0x40: "WEEKEVENTREG_73_40",
+ (73 << 8) | 0x80: "WEEKEVENTREG_73_80",
+ (74 << 8) | 0x01: "WEEKEVENTREG_74_01",
+ (74 << 8) | 0x02: "WEEKEVENTREG_74_02",
+ (74 << 8) | 0x04: "WEEKEVENTREG_74_04",
+ (74 << 8) | 0x08: "WEEKEVENTREG_74_08",
+ (74 << 8) | 0x10: "WEEKEVENTREG_74_10",
+ (74 << 8) | 0x20: "WEEKEVENTREG_74_20",
+ (74 << 8) | 0x40: "WEEKEVENTREG_74_40",
+ (74 << 8) | 0x80: "WEEKEVENTREG_74_80",
+ (75 << 8) | 0x01: "WEEKEVENTREG_75_01",
+ (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) | 0x20: "WEEKEVENTREG_75_20",
+ (75 << 8) | 0x40: "WEEKEVENTREG_75_40",
+ (75 << 8) | 0x80: "WEEKEVENTREG_75_80",
+ (76 << 8) | 0x01: "WEEKEVENTREG_76_01",
+ (76 << 8) | 0x02: "WEEKEVENTREG_76_02",
+ (76 << 8) | 0x04: "WEEKEVENTREG_76_04",
+ (76 << 8) | 0x08: "WEEKEVENTREG_76_08",
+ (76 << 8) | 0x10: "WEEKEVENTREG_76_10",
+ (76 << 8) | 0x20: "WEEKEVENTREG_76_20",
+ (76 << 8) | 0x40: "WEEKEVENTREG_76_40",
+ (76 << 8) | 0x80: "WEEKEVENTREG_76_80",
+ (77 << 8) | 0x01: "WEEKEVENTREG_77_01",
+ (77 << 8) | 0x02: "WEEKEVENTREG_77_02",
+ (77 << 8) | 0x04: "WEEKEVENTREG_77_04",
+ (77 << 8) | 0x08: "WEEKEVENTREG_77_08",
+ (77 << 8) | 0x10: "WEEKEVENTREG_77_10",
+ (77 << 8) | 0x20: "WEEKEVENTREG_77_20",
+ (77 << 8) | 0x40: "WEEKEVENTREG_77_40",
+ (77 << 8) | 0x80: "WEEKEVENTREG_77_80",
+ (78 << 8) | 0x01: "WEEKEVENTREG_78_01",
+ (78 << 8) | 0x02: "WEEKEVENTREG_78_02",
+ (78 << 8) | 0x04: "WEEKEVENTREG_78_04",
+ (78 << 8) | 0x08: "WEEKEVENTREG_78_08",
+ (78 << 8) | 0x10: "WEEKEVENTREG_78_10",
+ (78 << 8) | 0x20: "WEEKEVENTREG_78_20",
+ (78 << 8) | 0x40: "WEEKEVENTREG_78_40",
+ (78 << 8) | 0x80: "WEEKEVENTREG_78_80",
+ (79 << 8) | 0x01: "WEEKEVENTREG_79_01",
+ (79 << 8) | 0x02: "WEEKEVENTREG_79_02",
+ (79 << 8) | 0x04: "WEEKEVENTREG_79_04",
+ (79 << 8) | 0x08: "WEEKEVENTREG_79_08",
+ (79 << 8) | 0x10: "WEEKEVENTREG_79_10",
+ (79 << 8) | 0x20: "WEEKEVENTREG_79_20",
+ (79 << 8) | 0x40: "WEEKEVENTREG_79_40",
+ (79 << 8) | 0x80: "WEEKEVENTREG_79_80",
+ (80 << 8) | 0x01: "WEEKEVENTREG_80_01",
+ (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) | 0x20: "WEEKEVENTREG_80_20",
+ (80 << 8) | 0x40: "WEEKEVENTREG_80_40",
+ (80 << 8) | 0x80: "WEEKEVENTREG_80_80",
+ (81 << 8) | 0x01: "WEEKEVENTREG_81_01",
+ (81 << 8) | 0x02: "WEEKEVENTREG_81_02",
+ (81 << 8) | 0x04: "WEEKEVENTREG_81_04",
+ (81 << 8) | 0x08: "WEEKEVENTREG_81_08",
+ (81 << 8) | 0x10: "WEEKEVENTREG_81_10",
+ (81 << 8) | 0x20: "WEEKEVENTREG_81_20",
+ (81 << 8) | 0x40: "WEEKEVENTREG_81_40",
+ (81 << 8) | 0x80: "WEEKEVENTREG_81_80",
+ (82 << 8) | 0x01: "WEEKEVENTREG_82_01",
+ (82 << 8) | 0x02: "WEEKEVENTREG_82_02",
+ (82 << 8) | 0x04: "WEEKEVENTREG_82_04",
+ (82 << 8) | 0x08: "WEEKEVENTREG_82_08",
+ (82 << 8) | 0x10: "WEEKEVENTREG_82_10",
+ (82 << 8) | 0x20: "WEEKEVENTREG_82_20",
+ (82 << 8) | 0x40: "WEEKEVENTREG_82_40",
+ (82 << 8) | 0x80: "WEEKEVENTREG_82_80",
+ (83 << 8) | 0x01: "WEEKEVENTREG_83_01",
+ (83 << 8) | 0x02: "WEEKEVENTREG_83_02",
+ (83 << 8) | 0x04: "WEEKEVENTREG_83_04",
+ (83 << 8) | 0x08: "WEEKEVENTREG_83_08",
+ (83 << 8) | 0x10: "WEEKEVENTREG_83_10",
+ (83 << 8) | 0x20: "WEEKEVENTREG_83_20",
+ (83 << 8) | 0x40: "WEEKEVENTREG_83_40",
+ (83 << 8) | 0x80: "WEEKEVENTREG_83_80",
+ (84 << 8) | 0x01: "WEEKEVENTREG_84_01",
+ (84 << 8) | 0x02: "WEEKEVENTREG_84_02",
+ (84 << 8) | 0x04: "WEEKEVENTREG_84_04",
+ (84 << 8) | 0x08: "WEEKEVENTREG_84_08",
+ (84 << 8) | 0x10: "WEEKEVENTREG_84_10",
+ (84 << 8) | 0x20: "WEEKEVENTREG_84_20",
+ (84 << 8) | 0x40: "WEEKEVENTREG_84_40",
+ (84 << 8) | 0x80: "WEEKEVENTREG_84_80",
+ (85 << 8) | 0x01: "WEEKEVENTREG_85_01",
+ (85 << 8) | 0x02: "WEEKEVENTREG_85_02",
+ (85 << 8) | 0x04: "WEEKEVENTREG_85_04",
+ (85 << 8) | 0x08: "WEEKEVENTREG_85_08",
+ (85 << 8) | 0x10: "WEEKEVENTREG_85_10",
+ (85 << 8) | 0x20: "WEEKEVENTREG_85_20",
+ (85 << 8) | 0x40: "WEEKEVENTREG_85_40",
+ (85 << 8) | 0x80: "WEEKEVENTREG_85_80",
+ (86 << 8) | 0x01: "WEEKEVENTREG_86_01",
+ (86 << 8) | 0x02: "WEEKEVENTREG_86_02",
+ (86 << 8) | 0x04: "WEEKEVENTREG_86_04",
+ (86 << 8) | 0x08: "WEEKEVENTREG_86_08",
+ (86 << 8) | 0x10: "WEEKEVENTREG_86_10",
+ (86 << 8) | 0x20: "WEEKEVENTREG_86_20",
+ (86 << 8) | 0x40: "WEEKEVENTREG_86_40",
+ (86 << 8) | 0x80: "WEEKEVENTREG_86_80",
+ (87 << 8) | 0x01: "WEEKEVENTREG_87_01",
+ (87 << 8) | 0x02: "WEEKEVENTREG_87_02",
+ (87 << 8) | 0x04: "WEEKEVENTREG_87_04",
+ (87 << 8) | 0x08: "WEEKEVENTREG_87_08",
+ (87 << 8) | 0x10: "WEEKEVENTREG_87_10",
+ (87 << 8) | 0x20: "WEEKEVENTREG_87_20",
+ (87 << 8) | 0x40: "WEEKEVENTREG_87_40",
+ (87 << 8) | 0x80: "WEEKEVENTREG_87_80",
+ (88 << 8) | 0x01: "WEEKEVENTREG_88_01",
+ (88 << 8) | 0x02: "WEEKEVENTREG_88_02",
+ (88 << 8) | 0x04: "WEEKEVENTREG_88_04",
+ (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",
+ (89 << 8) | 0x08: "WEEKEVENTREG_89_08",
+ (89 << 8) | 0x10: "WEEKEVENTREG_89_10",
+ (89 << 8) | 0x20: "WEEKEVENTREG_89_20",
+ (89 << 8) | 0x40: "WEEKEVENTREG_89_40",
+ (89 << 8) | 0x80: "WEEKEVENTREG_89_80",
+ (90 << 8) | 0x01: "WEEKEVENTREG_90_01",
+ (90 << 8) | 0x02: "WEEKEVENTREG_90_02",
+ (90 << 8) | 0x04: "WEEKEVENTREG_90_04",
+ (90 << 8) | 0x08: "WEEKEVENTREG_90_08",
+ (90 << 8) | 0x10: "WEEKEVENTREG_90_10",
+ (90 << 8) | 0x20: "WEEKEVENTREG_90_20",
+ (90 << 8) | 0x40: "WEEKEVENTREG_90_40",
+ (90 << 8) | 0x80: "WEEKEVENTREG_90_80",
+ (91 << 8) | 0x01: "WEEKEVENTREG_91_01",
+ (91 << 8) | 0x02: "WEEKEVENTREG_91_02",
+ (91 << 8) | 0x04: "WEEKEVENTREG_91_04",
+ (91 << 8) | 0x08: "WEEKEVENTREG_91_08",
+ (91 << 8) | 0x10: "WEEKEVENTREG_91_10",
+ (91 << 8) | 0x20: "WEEKEVENTREG_91_20",
+ (91 << 8) | 0x40: "WEEKEVENTREG_91_40",
+ (91 << 8) | 0x80: "WEEKEVENTREG_91_80",
+ (92 << 8) | 0x01: "WEEKEVENTREG_92_01",
+ (92 << 8) | 0x02: "WEEKEVENTREG_92_02",
+ (92 << 8) | 0x04: "WEEKEVENTREG_92_04",
+ (92 << 8) | 0x08: "WEEKEVENTREG_92_08",
+ (92 << 8) | 0x10: "WEEKEVENTREG_92_10",
+ (92 << 8) | 0x20: "WEEKEVENTREG_92_20",
+ (92 << 8) | 0x40: "WEEKEVENTREG_92_40",
+ (92 << 8) | 0x80: "WEEKEVENTREG_92_80",
+ (93 << 8) | 0x01: "WEEKEVENTREG_93_01",
+ (93 << 8) | 0x02: "WEEKEVENTREG_93_02",
+ (93 << 8) | 0x04: "WEEKEVENTREG_93_04",
+ (93 << 8) | 0x08: "WEEKEVENTREG_93_08",
+ (93 << 8) | 0x10: "WEEKEVENTREG_93_10",
+ (93 << 8) | 0x20: "WEEKEVENTREG_93_20",
+ (93 << 8) | 0x40: "WEEKEVENTREG_93_40",
+ (93 << 8) | 0x80: "WEEKEVENTREG_93_80",
+ (94 << 8) | 0x01: "WEEKEVENTREG_94_01",
+ (94 << 8) | 0x02: "WEEKEVENTREG_94_02",
+ (94 << 8) | 0x04: "WEEKEVENTREG_94_04",
+ (94 << 8) | 0x08: "WEEKEVENTREG_94_08",
+ (94 << 8) | 0x10: "WEEKEVENTREG_94_10",
+ (94 << 8) | 0x20: "WEEKEVENTREG_94_20",
+ (94 << 8) | 0x40: "WEEKEVENTREG_94_40",
+ (94 << 8) | 0x80: "WEEKEVENTREG_94_80",
+ (95 << 8) | 0x01: "WEEKEVENTREG_95_01",
+ (95 << 8) | 0x02: "WEEKEVENTREG_95_02",
+ (95 << 8) | 0x04: "WEEKEVENTREG_95_04",
+ (95 << 8) | 0x08: "WEEKEVENTREG_95_08",
+ (95 << 8) | 0x10: "WEEKEVENTREG_95_10",
+ (95 << 8) | 0x20: "WEEKEVENTREG_95_20",
+ (95 << 8) | 0x40: "WEEKEVENTREG_95_40",
+ (95 << 8) | 0x80: "WEEKEVENTREG_95_80",
+ (96 << 8) | 0x01: "WEEKEVENTREG_96_01",
+ (96 << 8) | 0x02: "WEEKEVENTREG_96_02",
+ (96 << 8) | 0x04: "WEEKEVENTREG_96_04",
+ (96 << 8) | 0x08: "WEEKEVENTREG_96_08",
+ (96 << 8) | 0x10: "WEEKEVENTREG_96_10",
+ (96 << 8) | 0x20: "WEEKEVENTREG_96_20",
+ (96 << 8) | 0x40: "WEEKEVENTREG_96_40",
+ (96 << 8) | 0x80: "WEEKEVENTREG_96_80",
+ (97 << 8) | 0x01: "WEEKEVENTREG_97_01",
+ (97 << 8) | 0x02: "WEEKEVENTREG_97_02",
+ (97 << 8) | 0x04: "WEEKEVENTREG_97_04",
+ (97 << 8) | 0x08: "WEEKEVENTREG_97_08",
+ (97 << 8) | 0x10: "WEEKEVENTREG_97_10",
+ (97 << 8) | 0x20: "WEEKEVENTREG_97_20",
+ (97 << 8) | 0x40: "WEEKEVENTREG_97_40",
+ (97 << 8) | 0x80: "WEEKEVENTREG_97_80",
+ (98 << 8) | 0x01: "WEEKEVENTREG_98_01",
+ (98 << 8) | 0x02: "WEEKEVENTREG_98_02",
+ (98 << 8) | 0x04: "WEEKEVENTREG_98_04",
+ (98 << 8) | 0x08: "WEEKEVENTREG_98_08",
+ (98 << 8) | 0x10: "WEEKEVENTREG_98_10",
+ (98 << 8) | 0x20: "WEEKEVENTREG_98_20",
+ (98 << 8) | 0x40: "WEEKEVENTREG_98_40",
+ (98 << 8) | 0x80: "WEEKEVENTREG_98_80",
+ (99 << 8) | 0x01: "WEEKEVENTREG_99_01",
+ (99 << 8) | 0x02: "WEEKEVENTREG_99_02",
+ (99 << 8) | 0x04: "WEEKEVENTREG_99_04",
+ (99 << 8) | 0x08: "WEEKEVENTREG_99_08",
+ (99 << 8) | 0x10: "WEEKEVENTREG_99_10",
+ (99 << 8) | 0x20: "WEEKEVENTREG_99_20",
+ (99 << 8) | 0x40: "WEEKEVENTREG_99_40",
+ (99 << 8) | 0x80: "WEEKEVENTREG_99_80",
+}
+
+def getFlagMacro(index: int, mask: int) -> str:
+ flag = (index << 8) | mask
+ if flag in weekEventReg:
+ return weekEventReg[flag]
+ return f"WEEKEVENTREG_{index:02}_{mask:02X}"
+
+def getCheckMacro(index: int, mask: int) -> str:
+ return f"CHECK_WEEKEVENTREG({getFlagMacro(index, mask)})"
+
+def getSetMacro(index: int, mask: int) -> str:
+ return f"SET_WEEKEVENTREG({getFlagMacro(index, mask)})"
+
+def getClearMacro(index: int, mask: int) -> str:
+ return f"CLEAR_WEEKEVENTREG({getFlagMacro(index, mask)})"
+
+NUMBER_PATTERN = r"(0[xX])?[0-9a-fA-F]+"
+
+def applyChange(fileContents: str, compiledRegex: re.Pattern, callback) -> str:
+ parsedContents = ""
+
+ match = compiledRegex.search(fileContents)
+ while match:
+ index = int(match.group("index"), 0)
+ mask = int(match.group("mask"), 0)
+
+ start, end = match.span()
+ parsedContents += fileContents[:start]
+ parsedContents += callback(index, mask)
+
+ fileContents = fileContents[end:]
+ match = compiledRegex.search(fileContents)
+
+ parsedContents += fileContents
+ return parsedContents
+
+
+def updateCheck(fileContents: str) -> str:
+ # gSaveContext.save.saveInfo.weekEventReg[86] & 2
+ checkRegex = re.compile(rf"gSaveContext.save.saveInfo.weekEventReg\[(?P{NUMBER_PATTERN})\]\s*\&\s*(?P{NUMBER_PATTERN})")
+
+ return applyChange(fileContents, checkRegex, getCheckMacro)
+
+def updateSet(fileContents: str) -> str:
+ # gSaveContext.save.saveInfo.weekEventReg[51] |= 0x10
+ setRegex = re.compile(rf"gSaveContext.save.saveInfo.weekEventReg\[(?P{NUMBER_PATTERN})\]\s*\|=\s*(?P{NUMBER_PATTERN})")
+
+ return applyChange(fileContents, setRegex, getSetMacro)
+
+def updateClear(fileContents: str) -> str:
+ # gSaveContext.save.saveInfo.weekEventReg[85] &= (u8)~0x80
+ clearRegex = re.compile(rf"gSaveContext.save.saveInfo.weekEventReg\[(?P{NUMBER_PATTERN})\]\s*\&=\s*(\(u8\))?~(?P{NUMBER_PATTERN})")
+
+ return applyChange(fileContents, clearRegex, getClearMacro)
+
+
+def read_file(filename):
+ with open(filename) as src_file:
+ return src_file.read()
+
+def write_file(filename, contents):
+ with open(filename, "w") as f:
+ f.write(contents)
+
+
+def main():
+ parser = argparse.ArgumentParser(description="Converts a weekEventReg access to a macro")
+
+ parser.add_argument("filename", help="Replace every occurrence of numeric weekEventReg on this file to the corresponding macro")
+ args = parser.parse_args()
+
+ fileContents = read_file(args.filename)
+
+ parsedContents = updateCheck(fileContents)
+ parsedContents = updateSet(parsedContents)
+ parsedContents = updateClear(parsedContents)
+
+ if fileContents != parsedContents:
+ write_file(args.filename, parsedContents)
+
+if __name__ == "__main__":
+ main()
diff --git a/undefined_syms.txt b/undefined_syms.txt
index beb36b0ef..e0a7e58be 100644
--- a/undefined_syms.txt
+++ b/undefined_syms.txt
@@ -131,6 +131,8 @@ D_80025D00 = 0x80025D00;
rspbootTextSize = 0x160;
rspbootTextEnd = rspbootTextStart + rspbootTextSize;
+aspMainTextEnd = aspMainTextStart + 0x1000;
+aspMainDataEnd = aspMainDataStart + 0x2E0;
// Segmented Addresses
@@ -564,67 +566,29 @@ D_06004240 = 0x06004240;
D_06003B08 = 0x06003B08;
D_06003E80 = 0x06003E80;
-// ovl_Bg_Fire_Wall
-
-D_06000040 = 0x06000040;
-
-// ovl_Bg_Fu_Mizu
-
-D_06002FC0 = 0x06002FC0;
-D_060037D8 = 0x060037D8;
-D_060037F8 = 0x060037F8;
-
// ovl_Bg_Haka_Bombwall
D_06001680 = 0x06001680;
-// ovl_Bg_Hakugin_Bombwall
-
-D_06009830 = 0x06009830;
-
-// ovl_Bg_Hakugin_Elvpole
-
-D_0600ACB8 = 0x0600ACB8;
-D_0600BF40 = 0x0600BF40;
-
// ovl_Bg_Ikana_Bombwall
D_06000288 = 0x06000288;
-// ovl_Bg_Ikana_Mirror
+// ovl_Bg_Keikoku_Spr
-D_060014B0 = 0x060014B0;
-D_06001678 = 0x06001678;
-D_06001880 = 0x06001880;
-D_06001AD8 = 0x06001AD8;
-D_06001E18 = 0x06001E18;
-D_06002358 = 0x06002358;
+D_06000100 = 0x06000100;
+D_060001F8 = 0x060001F8;
+D_060003F8 = 0x060003F8;
+D_06000500 = 0x06000500;
+D_060005F8 = 0x060005F8;
-// ovl_Bg_Kin2_Bombwall
+/* ovl_Bg_Lotus */
+D_06000A20 = 0x06000A20;
+D_06000040 = 0x06000040;
-D_06000128 = 0x06000128;
-D_060002C0 = 0x060002C0;
-D_06000360 = 0x06000360;
-D_06000490 = 0x06000490;
-
-// ovl_Bg_Kin2_Picture
-
-D_06000658 = 0x06000658;
-D_06000798 = 0x06000798;
-
-// ovl_Bg_Last_Bwall
-
-D_06000098 = 0x06000098;
-
-// ovl_Bg_Sinkai_Kabe
-
-D_06000048 = 0x06000048;
-
-// ovl_Bg_Umajump
-
-D_06001220 = 0x06001220;
-D_06001438 = 0x06001438;
-D_06001558 = 0x06001558;
+/* ovl_Bg_Tobira01 */
+D_060011C0 = 0x060011C0;
+D_06000088 = 0x06000088;
// ovl_Boss_01
@@ -677,14 +641,6 @@ D_06006E50 = 0x06006E50;
D_06007488 = 0x06007488;
D_06007908 = 0x06007908;
-// ovl_Boss_06
-
-D_06018BD0 = 0x06018BD0;
-D_06018CF0 = 0x06018CF0;
-D_06018DE0 = 0x06018DE0;
-D_06019360 = 0x06019360;
-D_060193B0 = 0x060193B0;
-
// ovl_Boss_07
D_06000194 = 0x06000194;
@@ -779,73 +735,25 @@ D_0600B5A0 = 0x0600B5A0;
D_06010C40 = 0x06010C40;
D_060129F0 = 0x060129F0;
-// ovl_Demo_Tre_Lgt
-
-D_06007D78 = 0x06007D78;
-
-// ovl_Dm_Ah
-
-D_06009E70 = 0x06009E70;
-
-// ovl_Dm_Al
-
-D_0600A0D8 = 0x0600A0D8;
-
-// ovl_Dm_Bal
-
-D_060005FC = 0x060005FC;
-D_06001804 = 0x06001804;
-D_0600A6D0 = 0x0600A6D0;
-
-// ovl_Dm_Char02
-
-D_0600AD68 = 0x0600AD68;
-
-// ovl_Dm_Char03
-
-D_06020550 = 0x06020550;
-
-// ovl_Dm_Char06
-
-D_060013A8 = 0x060013A8;
-D_06006868 = 0x06006868;
-
-// ovl_Dm_Char08
-
-D_06002328 = 0x06002328;
-D_06002470 = 0x06002470;
-D_06004E70 = 0x06004E70;
-D_0600E748 = 0x0600E748;
-
-// ovl_Dm_Char09
-
-D_0600005C = 0x0600005C;
-D_06001398 = 0x06001398;
-
// ovl_Dm_Tsg
D_06002D30 = 0x06002D30;
D_06011458 = 0x06011458;
-// ovl_Dm_Zl
+// ovl_Door_Spiral
-D_0600DE08 = 0x0600DE08;
-D_0600E038 = 0x0600E038;
-
-// ovl_Door_Warp1
-
-D_06003230 = 0x06003230;
-D_060044D8 = 0x060044D8;
-D_06004690 = 0x06004690;
-D_060057D8 = 0x060057D8;
-D_060058C8 = 0x060058C8;
-D_06007238 = 0x06007238;
-
-// ovl_Eff_Kamejima_Wave
-
-D_06000000 = 0x06000000;
-D_06000140 = 0x06000140;
-D_06001AF0 = 0x06001AF0;
+D_06000590 = 0x06000590;
+D_060007A8 = 0x060007A8;
+D_06000EA0 = 0x06000EA0;
+D_060012C0 = 0x060012C0;
+D_060014C8 = 0x060014C8;
+D_06002110 = 0x06002110;
+D_06004448 = 0x06004448;
+D_060051B8 = 0x060051B8;
+D_06006128 = 0x06006128;
+D_06009278 = 0x06009278;
+D_06012B70 = 0x06012B70;
+D_06013EA8 = 0x06013EA8;
// ovl_Eff_Stk
@@ -853,12 +761,6 @@ D_06008920 = 0x06008920;
D_06008A38 = 0x06008A38;
D_06009F60 = 0x06009F60;
-// ovl_Eff_Zoraband
-
-D_06000180 = 0x06000180;
-D_060002A8 = 0x060002A8;
-D_06000F38 = 0x06000F38;
-
// ovl_En_An
D_06000308 = 0x06000308;
@@ -872,25 +774,6 @@ D_06012618 = 0x06012618;
D_0600B380 = 0x0600B380;
-// ovl_En_Ani
-
-D_060007FC = 0x060007FC;
-D_06000C14 = 0x06000C14;
-D_060011CC = 0x060011CC;
-D_06001D48 = 0x06001D48;
-D_060027A0 = 0x060027A0;
-D_060028A0 = 0x060028A0;
-D_06009220 = 0x06009220;
-D_06009D34 = 0x06009D34;
-
-// ovl_En_Az
-
-D_06007438 = 0x06007438;
-D_0600C94C = 0x0600C94C;
-D_06017990 = 0x06017990;
-D_0601ABF0 = 0x0601ABF0;
-D_0601AD00 = 0x0601AD00;
-
// ovl_En_Bal
D_060005FC = 0x060005FC;
@@ -900,48 +783,6 @@ D_0600B604 = 0x0600B604;
D_0600CB78 = 0x0600CB78;
D_0600D530 = 0x0600D530;
-// ovl_En_Bat
-
-D_060000A0 = 0x060000A0;
-D_060000C8 = 0x060000C8;
-
-// ovl_En_Bee
-
-D_0600005C = 0x0600005C;
-D_06001398 = 0x06001398;
-
-// ovl_En_Bh
-
-D_06000074 = 0x06000074;
-D_06001E60 = 0x06001E60;
-
-// ovl_En_Bombal
-
-D_06000A00 = 0x06000A00;
-D_06000D78 = 0x06000D78;
-
-// ovl_En_Bombers2
-
-D_060064B8 = 0x060064B8;
-D_0600F82C = 0x0600F82C;
-
-// ovl_En_Bomjimb
-
-D_060064B8 = 0x060064B8;
-D_0600F82C = 0x0600F82C;
-
-// ovl_En_Box
-
-D_0600043C = 0x0600043C;
-D_060006F0 = 0x060006F0;
-D_06000A50 = 0x06000A50;
-D_06000DB0 = 0x06000DB0;
-D_060012E8 = 0x060012E8;
-D_06001850 = 0x06001850;
-D_06001D58 = 0x06001D58;
-D_060066A0 = 0x060066A0;
-D_060080E8 = 0x060080E8;
-
// ovl_En_Bsb
D_06000C50 = 0x06000C50;
@@ -949,15 +790,6 @@ D_06004894 = 0x06004894;
D_060086BC = 0x060086BC;
D_0600C3E0 = 0x0600C3E0;
-// ovl_En_Bubble
-
-D_06001000 = 0x06001000;
-
-// ovl_En_Crow
-
-D_060000F0 = 0x060000F0;
-D_060010C0 = 0x060010C0;
-
// ovl_En_Death
D_06000E64 = 0x06000E64;
@@ -979,30 +811,10 @@ D_0600CB2C = 0x0600CB2C;
D_0600CB84 = 0x0600CB84;
D_0600CBC0 = 0x0600CBC0;
-// ovl_En_Dekubaba
-
-D_06000208 = 0x06000208;
-D_060002B8 = 0x060002B8;
-D_060010F0 = 0x060010F0;
-D_06001330 = 0x06001330;
-D_06001828 = 0x06001828;
-D_06002A40 = 0x06002A40;
-D_06003070 = 0x06003070;
-
-// ovl_En_Demo_heishi
-
-D_06003BFC = 0x06003BFC;
-D_0600D640 = 0x0600D640;
-
// ovl_En_Dnh
D_06002950 = 0x06002950;
-// ovl_En_Ds2n
-
-D_06008038 = 0x06008038;
-D_06008170 = 0x06008170;
-
// ovl_En_Dt
D_0600112C = 0x0600112C;
@@ -1034,26 +846,6 @@ D_060009A0 = 0x060009A0;
D_06010240 = 0x06010240;
-// ovl_En_Fall2
-
-D_06005EF4 = 0x06005EF4;
-D_06005F10 = 0x06005F10;
-D_06008840 = 0x06008840;
-D_06008898 = 0x06008898;
-
-// ovl_En_Famos
-
-D_060000F8 = 0x060000F8;
-D_06003D38 = 0x06003D38;
-D_06003DC8 = 0x06003DC8;
-
-// ovl_En_Fishing
-
-D_060029C0 = 0x060029C0;
-D_0600007C = 0x0600007C;
-D_0600CFE0 = 0x0600CFE0;
-D_06011058 = 0x06011058;
-
// ovl_En_Ge2
D_0600030C = 0x0600030C;
@@ -1069,11 +861,54 @@ D_0600A344 = 0x0600A344;
D_06001EFC = 0x06001EFC;
D_0600A808 = 0x0600A808;
-// ovl_En_Hgo
+// ovl_En_Invadepoh
-D_0600B644 = 0x0600B644;
-D_0600F248 = 0x0600F248;
-D_06012A58 = 0x06012A58;
+D_06000080 = 0x06000080;
+D_060003B0 = 0x060003B0;
+D_06000550 = 0x06000550;
+D_06000560 = 0x06000560;
+D_06000608 = 0x06000608;
+D_060006C8 = 0x060006C8;
+D_06000720 = 0x06000720;
+D_06000998 = 0x06000998;
+D_06001560 = 0x06001560;
+D_06001674 = 0x06001674;
+D_06001BD8 = 0x06001BD8;
+D_06001D80 = 0x06001D80;
+D_060021C8 = 0x060021C8;
+D_06002A8C = 0x06002A8C;
+D_06004010 = 0x06004010;
+D_06004264 = 0x06004264;
+D_06004C30 = 0x06004C30;
+D_06004E50 = 0x06004E50;
+D_06004E98 = 0x06004E98;
+D_06007328 = 0x06007328;
+D_060080F0 = 0x060080F0;
+D_06009E58 = 0x06009E58;
+D_0600A174 = 0x0600A174;
+D_0600FFC8 = 0x0600FFC8;
+D_060107C8 = 0x060107C8;
+D_06010FC8 = 0x06010FC8;
+D_060117C8 = 0x060117C8;
+D_06011AD8 = 0x06011AD8;
+D_06011FC8 = 0x06011FC8;
+D_060122D8 = 0x060122D8;
+D_060127C8 = 0x060127C8;
+D_06012AD8 = 0x06012AD8;
+D_06012BC8 = 0x06012BC8;
+D_06012FC8 = 0x06012FC8;
+D_060132D8 = 0x060132D8;
+D_060133C8 = 0x060133C8;
+D_06013928 = 0x06013928;
+D_06013AD8 = 0x06013AD8;
+D_06014088 = 0x06014088;
+D_060142D8 = 0x060142D8;
+D_06014AD8 = 0x06014AD8;
+D_06014ED8 = 0x06014ED8;
+D_060152D8 = 0x060152D8;
+D_06015C28 = 0x06015C28;
+D_060156D8 = 0x060156D8;
+D_06016720 = 0x06016720;
// ovl_En_Invadepoh
@@ -1112,15 +947,6 @@ D_06012FC8 = 0x06012FC8;
D_06013928 = 0x06013928;
D_06016588 = 0x06016588;
-// ovl_En_Js
-
-D_06010880 = 0x06010880;
-D_06010CD8 = 0x06010CD8;
-D_060164B8 = 0x060164B8;
-D_06016F58 = 0x06016F58;
-D_0601764C = 0x0601764C;
-D_06017E98 = 0x06017E98;
-
// ovl_En_Jso
D_060081F4 = 0x060081F4;
@@ -1132,16 +958,6 @@ D_06002ED8 = 0x06002ED8;
D_06003168 = 0x06003168;
D_060081F4 = 0x060081F4;
-// ovl_En_Kaizoku
-
-D_060058B8 = 0x060058B8;
-D_0600D828 = 0x0600D828;
-
-// ovl_En_Kanban
-
-D_06000C30 = 0x06000C30;
-D_06001630 = 0x06001630;
-
// ovl_En_Kitan
D_06000CE8 = 0x06000CE8;
@@ -1208,22 +1024,6 @@ D_06021E34 = 0x06021E34;
D_06022728 = 0x06022728;
D_06022CAC = 0x06022CAC;
-// ovl_En_Lift_Nuts
-
-D_060029E8 = 0x060029E8;
-D_0600AC70 = 0x0600AC70;
-
-// ovl_En_Mag
-
-D_06000000 = 0x06000000;
-D_06009000 = 0x06009000;
-D_06009680 = 0x06009680;
-D_06009D00 = 0x06009D00;
-D_06010F40 = 0x06010F40;
-D_06011740 = 0x06011740;
-D_06011BC0 = 0x06011BC0;
-D_06011E48 = 0x06011E48;
-
// ovl_En_Mnk
D_06003584 = 0x06003584;
@@ -1235,21 +1035,6 @@ D_060105DC = 0x060105DC;
D_06019B88 = 0x06019B88;
D_0601D518 = 0x0601D518;
-// ovl_En_Nb
-
-D_06008C40 = 0x06008C40;
-
-// ovl_En_Neo_Reeba
-
-D_060001E4 = 0x060001E4;
-D_06001EE8 = 0x06001EE8;
-
-// ovl_En_Nwc
-
-D_060000E8 = 0x060000E8;
-D_060002E8 = 0x060002E8;
-D_06002530 = 0x06002530;
-
// ovl_En_Okuta
D_0600044C = 0x0600044C;
@@ -1261,16 +1046,6 @@ D_06003EE4 = 0x06003EE4;
D_06004204 = 0x06004204;
D_0600466C = 0x0600466C;
-// ovl_En_Osn
-
-D_060192A0 = 0x060192A0;
-D_060201BC = 0x060201BC;
-D_060202F0 = 0x060202F0;
-
-// ovl_En_Paper
-
-D_0600D5A0 = 0x0600D5A0;
-
// ovl_En_Po_Composer
D_0600188C = 0x0600188C;
@@ -1280,26 +1055,6 @@ D_06006F38 = 0x06006F38;
D_06006FD8 = 0x06006FD8;
D_06009930 = 0x06009930;
-// ovl_En_Pr2
-
-D_06003904 = 0x06003904;
-D_06004188 = 0x06004188;
-D_06004340 = 0x06004340;
-
-// ovl_En_Pst
-
-D_06001A80 = 0x06001A80;
-
-// ovl_En_Ru
-
-D_0600C700 = 0x0600C700;
-
-// ovl_En_Rz
-
-D_06003A20 = 0x06003A20;
-D_0600D768 = 0x0600D768;
-D_0600D8D8 = 0x0600D8D8;
-
// ovl_En_Slime
D_060004C0 = 0x060004C0;
@@ -1316,28 +1071,6 @@ D_06001AA0 = 0x06001AA0;
D_06000304 = 0x06000304;
-// ovl_En_Sth2
-
-D_060031F8 = 0x060031F8;
-
-// ovl_En_Stone_heishi
-
-D_06000630 = 0x06000630;
-D_06000768 = 0x06000768;
-D_06003BFC = 0x06003BFC;
-D_0600D640 = 0x0600D640;
-
-// ovl_En_Stop_heishi
-
-D_06006C18 = 0x06006C18;
-D_0600D640 = 0x0600D640;
-
-// ovl_En_S_Goro
-
-D_060091A8 = 0x060091A8;
-D_06011AC8 = 0x06011AC8;
-D_06012DE0 = 0x06012DE0;
-
// ovl_En_Takaraya
D_06000968 = 0x06000968;
@@ -1347,45 +1080,17 @@ D_06009890 = 0x06009890;
D_0600A280 = 0x0600A280;
D_0600AD98 = 0x0600AD98;
-// ovl_En_Tanron2
-
-D_06003450 = 0x06003450;
-D_060034C8 = 0x060034C8;
-D_06004510 = 0x06004510;
-D_06004550 = 0x06004550;
-
-// ovl_En_Tanron4
-
-D_06000168 = 0x06000168;
-D_06000E68 = 0x06000E68;
-
// ovl_En_Test3
D_0600CB60 = 0x0600CB60;
D_0600EDD0 = 0x0600EDD0;
D_0600F7EC = 0x0600F7EC;
-// ovl_En_Tg
-
-D_0600B0A0 = 0x0600B0A0;
-D_0600B0E0 = 0x0600B0E0;
-D_0600B2B0 = 0x0600B2B0;
-
-// ovl_En_Trt
-
-D_0600FEF0 = 0x0600FEF0;
-D_06000A44 = 0x06000A44;
-
// ovl_En_Tru
D_0601A820 = 0x0601A820;
D_0601A830 = 0x0601A830;
-// ovl_En_Twig
-
-D_060014C8 = 0x060014C8;
-D_06001C38 = 0x06001C38;
-
// ovl_En_Wdhand
D_060000F4 = 0x060000F4;
@@ -1406,21 +1111,15 @@ D_06000D94 = 0x06000D94;
D_06007650 = 0x06007650;
D_0600D658 = 0x0600D658;
-// ovl_Mir_Ray3
+// ovl_Item_B_Heart
-D_06000168 = 0x06000168;
-D_060003F8 = 0x060003F8;
-D_060004B0 = 0x060004B0;
+D_06001290 = 0x06001290;
+D_06001470 = 0x06001470;
-// ovl_Obj_Danpeilift
+// ovl_Obj_Boyo
-D_06000180 = 0x06000180;
-D_06000BA0 = 0x06000BA0;
-
-// ovl_Obj_Lift
-
-D_06000D10 = 0x06000D10;
-D_06000F00 = 0x06000F00;
+D_06000300 = 0x06000300;
+D_06000E88 = 0x06000E88;
// ovl_Obj_Mine
@@ -1433,15 +1132,6 @@ D_06002188 = 0x06002188;
D_06000B70 = 0x06000B70;
D_06000D60 = 0x06000D60;
-// ovl_Obj_Taru
-
-D_06000420 = 0x06000420;
-D_06000FC8 = 0x06000FC8;
-D_06001040 = 0x06001040;
-D_06001100 = 0x06001100;
-D_06001140 = 0x06001140;
-D_06001CB0 = 0x06001CB0;
-
// ovl_player_actor
D_06008860 = 0x06008860;