diff --git a/.clang-tidy b/.clang-tidy
index 4022a3f68..caf62ab7f 100644
--- a/.clang-tidy
+++ b/.clang-tidy
@@ -1,5 +1,9 @@
-Checks: '-*,readability-braces-around-statements'
+Checks: '-*,readability-braces-around-statements,readability-inconsistent-declaration-parameter-name'
WarningsAsErrors: ''
HeaderFilterRegex: '(src|include)\/.*\.h$'
FormatStyle: 'file'
CheckOptions:
+ # Require argument names to match exactly (instead of allowing a name to be a prefix/suffix of another)
+ # Note: 'true' is expected by clang-tidy 12+ but '1' is used for compatibility with older versions
+ - key: readability-inconsistent-declaration-parameter-name.Strict
+ value: 1
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/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/interface/icon_item_dungeon_static.xml b/assets/xml/interface/icon_item_dungeon_static.xml
new file mode 100644
index 000000000..04ba39338
--- /dev/null
+++ b/assets/xml/interface/icon_item_dungeon_static.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/interface/icon_item_field_static.xml b/assets/xml/interface/icon_item_field_static.xml
new file mode 100644
index 000000000..8fe3a9299
--- /dev/null
+++ b/assets/xml/interface/icon_item_field_static.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/interface/icon_item_jpn_static.xml b/assets/xml/interface/icon_item_jpn_static.xml
new file mode 100644
index 000000000..aff93d07e
--- /dev/null
+++ b/assets/xml/interface/icon_item_jpn_static.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/interface/parameter_static.xml b/assets/xml/interface/parameter_static.xml
index 7532a95b8..a2ab9e0c5 100644
--- a/assets/xml/interface/parameter_static.xml
+++ b/assets/xml/interface/parameter_static.xml
@@ -119,14 +119,15 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/gameplay_dangeon_keep.xml b/assets/xml/objects/gameplay_dangeon_keep.xml
index 79747cd18..11c36a65b 100644
--- a/assets/xml/objects/gameplay_dangeon_keep.xml
+++ b/assets/xml/objects/gameplay_dangeon_keep.xml
@@ -92,6 +92,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..16cbf0b85 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 @@
-
+
+
-
+
+
+
@@ -881,14 +884,17 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -926,16 +932,16 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
+
@@ -1033,14 +1039,14 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -1116,26 +1122,29 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1145,8 +1154,8 @@
-
-
+
+
@@ -1214,18 +1223,21 @@
-
+
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -1442,25 +1454,28 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1479,7 +1494,7 @@
-
+
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_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..259700dc8 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..75a8e7ca2 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 735d191f3..ab9699e84 100644
--- a/assets/xml/objects/object_bee.xml
+++ b/assets/xml/objects/object_bee.xml
@@ -1,28 +1,38 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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_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..b1f6cb417 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..ba04a3071 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..f949abcc7 100644
--- a/assets/xml/objects/object_botihasira.xml
+++ b/assets/xml/objects/object_botihasira.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/assets/xml/objects/object_box.xml b/assets/xml/objects/object_box.xml
index 4413ecd7a..be4f34b87 100644
--- a/assets/xml/objects/object_box.xml
+++ b/assets/xml/objects/object_box.xml
@@ -1,9 +1,9 @@
-
-
+
+
-
+
@@ -22,8 +22,8 @@
-
-
+
+
@@ -45,8 +45,8 @@
-
-
+
+
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_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..ad2336257 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_dkjail_obj.xml b/assets/xml/objects/object_dkjail_obj.xml
index 219181c6d..ada181475 100644
--- a/assets/xml/objects/object_dkjail_obj.xml
+++ b/assets/xml/objects/object_dkjail_obj.xml
@@ -1,6 +1,6 @@
-
+
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_eg.xml b/assets/xml/objects/object_eg.xml
index 9cda7f0a3..6aba85e62 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_fish.xml b/assets/xml/objects/object_fish.xml
index f01639fbf..4d9a86e51 100644
--- a/assets/xml/objects/object_fish.xml
+++ b/assets/xml/objects/object_fish.xml
@@ -43,17 +43,17 @@
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
@@ -74,11 +74,11 @@
-
-
+
+
-
-
+
+
@@ -95,11 +95,11 @@
-
-
+
+
-
-
+
+
@@ -144,15 +144,15 @@
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
diff --git a/assets/xml/objects/object_fusen.xml b/assets/xml/objects/object_fusen.xml
index 0ff9e9f6c..2e115b2b7 100644
--- a/assets/xml/objects/object_fusen.xml
+++ b/assets/xml/objects/object_fusen.xml
@@ -1,7 +1,7 @@
-
-
+
+
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_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_kamejima.xml b/assets/xml/objects/object_kamejima.xml
index e8368051d..cce285475 100644
--- a/assets/xml/objects/object_kamejima.xml
+++ b/assets/xml/objects/object_kamejima.xml
@@ -1,81 +1,99 @@
+
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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..23d3cf09c 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..48eef4dd9 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..a00c44db4 100644
--- a/assets/xml/objects/object_link_nuts.xml
+++ b/assets/xml/objects/object_link_nuts.xml
@@ -1,23 +1,24 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -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_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_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_umajump.xml b/assets/xml/objects/object_umajump.xml
index 6d86b4298..cec43c3a6 100644
--- a/assets/xml/objects/object_umajump.xml
+++ b/assets/xml/objects/object_umajump.xml
@@ -2,7 +2,7 @@
-
+
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_Dm_Char08.xml b/assets/xml/overlays/ovl_Dm_Char08.xml
new file mode 100644
index 000000000..4d96a8eb4
--- /dev/null
+++ b/assets/xml/overlays/ovl_Dm_Char08.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/overlays/ovl_En_Sth.xml b/assets/xml/overlays/ovl_En_Sth.xml
index 80393fc2d..51b29870d 100644
--- a/assets/xml/overlays/ovl_En_Sth.xml
+++ b/assets/xml/overlays/ovl_En_Sth.xml
@@ -2,13 +2,13 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
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/assets/xml/overlays/ovl_Oceff_Storm.xml b/assets/xml/overlays/ovl_Oceff_Storm.xml
new file mode 100644
index 000000000..6b8dc0228
--- /dev/null
+++ b/assets/xml/overlays/ovl_Oceff_Storm.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
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 149fba9ae..0aba4fa47 100644
--- a/docs/tools.md
+++ b/docs/tools.md
@@ -23,7 +23,7 @@
- [`tools/warnings_count/check_new_warnings.sh`](#toolswarnings_countcheck_new_warningssh)
- [`tools/warnings_count/update_current_warnings.sh`](#toolswarnings_countupdate_current_warningssh)
- [`fixle.sh`](#fixlesh)
- - [`format.sh`](#formatsh)
+ - [`format.py`](#formatpy)
- [External tools](#external-tools)
- [mips_to_c](#mips_to_c)
- [Permuter](#permuter)
@@ -196,9 +196,31 @@ If you have to add new warnings, **and have permission from the leads**, run thi
Fixes line endings in the repo to Linux style (LF), which is required for the build process to work. (You may be better off creating a new clone directly in Linux/WSL, though)
-### `format.sh`
+### `format.py`
-Formats all C files in the repo using `clang-format-11` (instructions on how to install this version are pinned in Discord if you can't get it from your package manager in the usual way). This will touch all files in the repo, so the next `make` will take longer.
+Formats all C files in the repo using `clang-format-11`, `clang-tidy`, and `clang-apply-replacements` (when multiprocessing). This will touch all files in the repo, so the next `make` will take longer.
+
+You can specify how many threads you would like this to run with by adding the `-jN` flag. Where N is the number of threads. By default this will run using 1 thread (i.e. `-j1`).
+
+`clang-11` is available in many native package managers, but if not try:
+
+Linux:
+Download llvm's setup script, run it, than install normally
+```bash
+wget https://apt.llvm.org/llvm.sh
+chmod +x llvm.sh
+sudo ./llvm.sh 11
+rm llvm.sh
+sudo apt install clang-format-11 clang-tidy-11 clang-apply-replacements-11
+```
+
+Mac:
+Install with brew, than create symlinks for `clang-tidy` and `clang-apply-replacements` to use properly
+```bash
+brew install llvm clang-format-11
+ln -s "$(brew --prefix llvm)/bin/clang-tidy" "/usr/local/bin/clang-tidy"
+ln -s "$(brew --prefix llvm)/bin/clang-apply-replacements" "/usr/local/bin/clang-apply-replacements"
+```
## External tools
diff --git a/docs/tutorial/advanced_control_flow.md b/docs/tutorial/advanced_control_flow.md
index 3ad2a9d4f..96ba7a43d 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,
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..68c90ef66 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,
@@ -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,
diff --git a/docs/tutorial/other_functions.md b/docs/tutorial/other_functions.md
index 255ae9eb4..1c8ba6b5b 100644
--- a/docs/tutorial/other_functions.md
+++ b/docs/tutorial/other_functions.md
@@ -401,7 +401,7 @@ There remains one thing we need to fix before trying to compile it, namely `*(&g
```C
/* 0x0EF8 */ u8 weekEventReg[100]; // "week_event_reg"
- /* 0x0F5C */ u32 mapsVisited; // "area_arrival"
+ /* 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.
diff --git a/format.py b/format.py
new file mode 100755
index 000000000..5b3cd3158
--- /dev/null
+++ b/format.py
@@ -0,0 +1,176 @@
+#!/usr/bin/env python3
+
+import argparse
+import glob
+import multiprocessing
+import os
+import re
+import shutil
+import subprocess
+import sys
+import tempfile
+from functools import partial
+from typing import List
+
+
+# clang-format, clang-tidy and clang-apply-replacements default version
+# Version 11 is used when available for more consistency between contributors
+CLANG_VER = 11
+
+# Clang-Format options (see .clang-format for rules applied)
+FORMAT_OPTS = "-i -style=file"
+
+# Clang-Tidy options (see .clang-tidy for checks enabled)
+TIDY_OPTS = "-p ."
+TIDY_FIX_OPTS = "--fix --fix-errors"
+
+# Clang-Apply-Replacements options (used for multiprocessing)
+APPLY_OPTS = ""
+
+# Compiler options used with Clang-Tidy
+# Normal warnings are disabled with -Wno-everything to focus only on tidying
+INCLUDES = "-Iinclude -Isrc -Ibuild -I."
+DEFINES = "-D_LANGUAGE_C -DNON_MATCHING"
+COMPILER_OPTS = f"-fno-builtin -std=gnu90 -m32 -Wno-everything {INCLUDES} {DEFINES}"
+
+
+def get_clang_executable(allowed_executables: List[str]):
+ for executable in allowed_executables:
+ try:
+ subprocess.check_call([executable, "--version"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
+ return executable
+ except FileNotFoundError or subprocess.CalledProcessError:
+ pass
+ return None
+
+
+def get_tidy_version(tidy_executable: str):
+ tidy_version_run = subprocess.run([tidy_executable, "--version"], stdout=subprocess.PIPE, universal_newlines=True)
+ match = re.search(r"LLVM version ([0-9]+)", tidy_version_run.stdout)
+ return int(match.group(1))
+
+
+CLANG_FORMAT = get_clang_executable([f"clang-format-{CLANG_VER}"])
+if CLANG_FORMAT is None:
+ sys.exit(f"Error: clang-format-{CLANG_VER} found")
+
+CLANG_TIDY = get_clang_executable([f"clang-tidy-{CLANG_VER}", "clang-tidy"])
+if CLANG_TIDY is None:
+ sys.exit(f"Error: neither clang-tidy-{CLANG_VER} nor clang-tidy found")
+
+CLANG_APPLY_REPLACEMENTS = get_clang_executable([f"clang-apply-replacements-{CLANG_VER}", "clang-apply-replacements"])
+
+# Try to detect the clang-tidy version and add --fix-notes for version 13+
+# This is used to ensure all fixes are applied properly in recent versions
+if get_tidy_version(CLANG_TIDY) >= 13:
+ TIDY_FIX_OPTS += " --fix-notes"
+
+
+def list_chunks(list: List, chunk_length: int):
+ for i in range(0, len(list), chunk_length):
+ yield list[i : i + chunk_length]
+
+
+def run_clang_format(files: List[str]):
+ exec_str = f"{CLANG_FORMAT} {FORMAT_OPTS} {' '.join(files)}"
+ subprocess.run(exec_str, shell=True)
+
+
+def run_clang_tidy(files: List[str]):
+ exec_str = f"{CLANG_TIDY} {TIDY_OPTS} {TIDY_FIX_OPTS} {' '.join(files)} -- {COMPILER_OPTS}"
+ subprocess.run(exec_str, shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
+
+
+def run_clang_tidy_with_export(tmp_dir: str, files: List[str]):
+ (handle, tmp_file) = tempfile.mkstemp(suffix=".yaml", dir=tmp_dir)
+ os.close(handle)
+
+ exec_str = f"{CLANG_TIDY} {TIDY_OPTS} --export-fixes={tmp_file} {' '.join(files)} -- {COMPILER_OPTS}"
+ subprocess.run(exec_str, shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
+
+
+def run_clang_apply_replacements(tmp_dir: str):
+ exec_str = f"{CLANG_APPLY_REPLACEMENTS} {APPLY_OPTS} {tmp_dir}"
+ subprocess.run(exec_str, shell=True)
+
+
+def add_final_new_line(file: str):
+ # https://backreference.org/2010/05/23/sanitizing-files-with-no-trailing-newline/index.html
+ # "gets the last character of the file pipes it into read, which will exit with a nonzero exit
+ # code if it encounters EOF before newline (so, if the last character of the file isn't a newline).
+ # If read exits nonzero, then append a newline onto the file using echo (if read exits 0,
+ # that satisfies the ||, so the echo command isn't run)." (https://stackoverflow.com/a/34865616)
+ exec_str = f"tail -c1 {file} | read -r _ || echo >> {file}"
+ subprocess.run(exec_str, shell=True)
+
+
+def format_files(src_files: List[str], extra_files: List[str], nb_jobs: int):
+ if nb_jobs != 1:
+ print(f"Formatting files with {nb_jobs} jobs")
+ else:
+ print(f"Formatting files with a single job (consider using -j to make this faster)")
+
+ # Format files in chunks to improve performance while still utilizing jobs
+ file_chunks = list(list_chunks(src_files, (len(src_files) // nb_jobs) + 1))
+
+ print("Running clang-format...")
+ # clang-format only applies changes in the given files, so it's safe to run in parallel
+ with multiprocessing.get_context("fork").Pool(nb_jobs) as pool:
+ pool.map(run_clang_format, file_chunks)
+
+ print("Running clang-tidy...")
+ if nb_jobs > 1:
+ # clang-tidy may apply changes in #included files, so when running it in parallel we use --export-fixes
+ # then we call clang-apply-replacements to apply all suggested fixes at the end
+ tmp_dir = tempfile.mkdtemp()
+
+ try:
+ with multiprocessing.get_context("fork").Pool(nb_jobs) as pool:
+ pool.map(partial(run_clang_tidy_with_export, tmp_dir), file_chunks)
+
+ run_clang_apply_replacements(tmp_dir)
+ finally:
+ shutil.rmtree(tmp_dir)
+ else:
+ run_clang_tidy(src_files)
+
+ print("Adding missing final new lines...")
+ # Adding final new lines is safe to do in parallel and can be applied to all types of files
+ with multiprocessing.get_context("fork").Pool(nb_jobs) as pool:
+ pool.map(add_final_new_line, src_files + extra_files)
+
+ print("Done formatting files.")
+
+
+def main():
+ parser = argparse.ArgumentParser(description="Format files in the codebase to enforce most style rules")
+ parser.add_argument("files", metavar="file", nargs="*")
+ parser.add_argument(
+ "-j",
+ dest="jobs",
+ type=int,
+ nargs="?",
+ default=1,
+ help="number of jobs to run (default: 1 without -j, number of cpus with -j)",
+ )
+ args = parser.parse_args()
+
+ nb_jobs = args.jobs or multiprocessing.cpu_count()
+ if nb_jobs > 1:
+ if CLANG_APPLY_REPLACEMENTS is None:
+ sys.exit(
+ f"Error: neither clang-apply-replacements-{CLANG_VER} nor clang-apply-replacements found (required to use -j)"
+ )
+
+ if args.files:
+ files = args.files
+ extra_files = []
+ else:
+ files = glob.glob("src/**/*.c", recursive=True)
+ extra_files = glob.glob("assets/**/*.xml", recursive=True)
+
+ format_files(files, extra_files, nb_jobs)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/format.sh b/format.sh
deleted file mode 100755
index 1c9389a9a..000000000
--- a/format.sh
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env bash
-
-FORMAT_VER="11"
-FORMAT_OPTS="-i -style=file"
-TIDY_OPTS="-p . --fix --fix-errors"
-COMPILER_OPTS="-fno-builtin -std=gnu90 -Iinclude -Isrc -D_LANGUAGE_C -DNON_MATCHING"
-
-# https://backreference.org/2010/05/23/sanitizing-files-with-no-trailing-newline/index.html
-# "gets the last character of the file pipes it into read, which will exit with a nonzero exit code if it encounters EOF before newline (so, if the last character of the file isn't a newline). If read exits nonzero, then append a newline onto the file using echo (if read exits 0, that satisfies the ||, so the echo command isn't run)." (https://stackoverflow.com/a/34865616)
-function add_final_newline () {
- for file in "$@"
- do
- tail -c1 $file | read -r _ || echo >> $file
- done
-}
-export -f add_final_newline
-
-shopt -s globstar
-
-if [ -z `command -v clang-format-${FORMAT_VER}` ]
-then
- echo "clang-format-${FORMAT_VER} not found. Exiting."
- exit 1
-fi
-
-if (( $# > 0 )); then
- echo "Formatting file(s) $*"
- echo "Running clang-format..."
- clang-format-${FORMAT_VER} ${FORMAT_OPTS} "$@"
- echo "Running clang-tidy..."
- clang-tidy ${TIDY_OPTS} "$@" -- ${COMPILER_OPTS} &> /dev/null
- echo "Adding missing final new lines..."
- add_final_newline "$@"
- echo "Done formatting file(s) $*"
- exit
-fi
-
-echo "Formatting C files. This will take a bit"
-echo "Running clang-format..."
-clang-format-${FORMAT_VER} ${FORMAT_OPTS} src/**/*.c
-echo "Running clang-tidy..."
-clang-tidy ${TIDY_OPTS} src/**/*.c -- ${COMPILER_OPTS} &> /dev/null
-echo "Adding missing final new lines..."
-find src/ -type f -name "*.c" -exec bash -c 'add_final_newline "$@"' bash {} +
-find assets/xml/ -type f -name "*.xml" -exec bash -c 'add_final_newline "$@"' bash {} +
-echo "Done formatting all files."
diff --git a/include/PR/gbi.h b/include/PR/gbi.h
index 2c29420ea..07fa0ac2c 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
@@ -3572,7 +3572,7 @@ _DW({ \
#define gDPLoadTextureBlock(pkt, timg, fmt, siz, width, height, \
pal, cms, cmt, masks, maskt, shifts, shiftt) \
-{ \
+_DW({ \
gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \
gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \
0 , cmt, maskt, shiftt, cms, masks, shifts); \
@@ -3588,7 +3588,7 @@ _DW({ \
gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \
((width)-1) << G_TEXTURE_IMAGE_FRAC, \
((height)-1) << G_TEXTURE_IMAGE_FRAC); \
-}
+})
#define gDPLoadTextureBlockYuv(pkt, timg, fmt, siz, width, height, \
pal, cms, cmt, masks, maskt, shifts, shiftt) \
@@ -4132,7 +4132,7 @@ _DW({ \
#define gDPLoadMultiTile(pkt, timg, tmem, rtile, 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), 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/color.h b/include/color.h
index b0b4d2cb0..d0cdb62f5 100644
--- a/include/color.h
+++ b/include/color.h
@@ -51,4 +51,6 @@ typedef union {
u16 rgba;
} Color_RGBA16;
+#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 39ad8880a..e9d0bafab 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -5,25 +5,25 @@
void bootproc(void);
void Idle_ThreadEntry(void* arg);
-void ViConfig_UpdateVi(u32 arg0);
+void ViConfig_UpdateVi(u32 mode);
void ViConfig_UpdateBlack(void);
-s32 DmaMgr_DmaRomToRam(u32 src, void* dst, size_t size);
-s32 DmaMgr_DmaHandler(OSPiHandle* piHandle, OSIoMesg* mb, s32 direction);
-DmaEntry* DmaMgr_FindDmaEntry(u32 vromAddr);
-u32 DmaMgr_TranslateVromToRom(u32 vromAddr);
-s32 DmaMgr_FindDmaIndex(u32 vromAddr);
-const char* func_800809F4(u32 param_1);
+s32 DmaMgr_DmaRomToRam(uintptr_t rom, void* ram, size_t size);
+s32 DmaMgr_DmaHandler(OSPiHandle* pihandle, OSIoMesg* mb, s32 direction);
+DmaEntry* DmaMgr_FindDmaEntry(uintptr_t vrom);
+u32 DmaMgr_TranslateVromToRom(uintptr_t vrom);
+s32 DmaMgr_FindDmaIndex(uintptr_t vrom);
+const char* func_800809F4(uintptr_t param_1);
void DmaMgr_ProcessMsg(DmaRequest* req);
void DmaMgr_ThreadEntry(void* arg);
-s32 DmaMgr_SendRequestImpl(DmaRequest* request, void* vramStart, uintptr_t vromStart, size_t size, UNK_TYPE4 unused, OSMesgQueue* callback, void* callbackMesg);
+s32 DmaMgr_SendRequestImpl(DmaRequest* request, void* vramStart, uintptr_t vromStart, size_t size, UNK_TYPE4 unused, OSMesgQueue* queue, void* msg);
s32 DmaMgr_SendRequest0(void* vramStart, uintptr_t vromStart, size_t size);
void DmaMgr_Start(void);
void DmaMgr_Stop(void);
void* Yaz0_FirstDMA(void);
void* Yaz0_NextDMA(void* curSrcPos);
-s32 Yaz0_DecompressImpl(u8* hdr, u8* dst);
-void Yaz0_Decompress(u32 romStart, void* dst, size_t size);
-void IrqMgr_AddClient(IrqMgr* irqmgr, IrqMgrClient* add, OSMesgQueue* msgQ);
+s32 Yaz0_DecompressImpl(u8* src, u8* dst);
+void Yaz0_Decompress(uintptr_t romStart, void* dst, size_t size);
+void IrqMgr_AddClient(IrqMgr* irqmgr, IrqMgrClient* client, OSMesgQueue* msgQueue);
void IrqMgr_RemoveClient(IrqMgr* irqmgr, IrqMgrClient* remove);
void IrqMgr_SendMesgForClient(IrqMgr* irqmgr, OSMesg msg);
void IrqMgr_JamMesgForClient(IrqMgr* irqmgr, OSMesg msg);
@@ -85,7 +85,7 @@ void Fault_HangupFaultClient(const char* arg0, char* arg1);
void Fault_AddHungupAndCrashImpl(const char* arg0, char* arg1);
void Fault_AddHungupAndCrash(const char* filename, u32 line);
void FaultDrawer_SetOsSyncPrintfEnabled(u32 enabled);
-void FaultDrawer_DrawRecImpl(s32 xstart, s32 ystart, s32 xend, s32 yend, u16 color);
+void FaultDrawer_DrawRecImpl(s32 xStart, s32 yStart, s32 xEnd, s32 yEnd, u16 color);
void FaultDrawer_DrawChar(char c);
s32 FaultDrawer_ColorToPrintColor(u16 color);
void FaultDrawer_UpdatePrintColor(void);
@@ -128,8 +128,8 @@ StackStatus StackCheck_GetState(StackEntry* entry);
u32 StackCheck_CheckAll(void);
u32 StackCheck_Check(StackEntry* entry);
-void MtxConv_F2L(Mtx* m1, MtxF* m2);
-void MtxConv_L2F(MtxF* m1, Mtx* m2);
+void MtxConv_F2L(Mtx* mtx, MtxF* mf);
+void MtxConv_L2F(MtxF* mtx, Mtx* mf);
void __assert(const char* file, u32 lineNum);
// void func_800862B4(void);
@@ -150,7 +150,7 @@ f32 func_80086814(f32 x);
// void func_80086AF0(void);
f32 func_80086B30(f32 y, f32 x);
// void func_80086C18(void);
-f32 func_80086C48(f32 param_1);
+f32 func_80086C48(f32 x);
// void func_80086C70(void);
f64 func_80086C7C(f64 param_1);
s32 func_80086C88(f32 param_1);
@@ -164,7 +164,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);
@@ -177,13 +177,13 @@ void Rand_Seed(u32 seed);
f32 Rand_ZeroOne(void);
f32 Rand_Centered(void);
void Rand_Seed_Variable(u32* rndNum, u32 seed);
-u32 Rand_Next_Variable(u32* param_1);
-f32 Rand_ZeroOne_Variable(u32* param_1);
-f32 Rand_Centered_Variable(u32* param_1);
+u32 Rand_Next_Variable(u32* rndNum);
+f32 Rand_ZeroOne_Variable(u32* rndNum);
+f32 Rand_Centered_Variable(u32* rndNum);
-void* proutSprintf(void* s, const char* buf, size_t n);
+void* proutSprintf(void* dst, const char* fmt, size_t size);
s32 vsprintf(char* dst, char* fmt, va_list args);
-s32 sprintf(char* s, char* fmt, ...);
+s32 sprintf(char* dst, char* fmt, ...);
s32 PrintUtils_VPrintf(PrintCallback* pfn, const char* fmt, va_list args);
s32 PrintUtils_Printf(PrintCallback* pfn, const char* fmt, ...);
void Sleep_Cycles(OSTime time);
@@ -194,7 +194,7 @@ void Sleep_Sec(u32 sec);
// void __osSetCause(void);
s32 osSendMesg(OSMesgQueue* mq, OSMesg msg, s32 flags);
s32 osPfsFreeBlocks(OSPfs* pfs, s32* leftoverBytes);
-void osViExtendVStart(u32 param_1);
+void osViExtendVStart(u32 a0);
void osStopThread(OSThread* t);
s32 osRecvMesg(OSMesgQueue* mq, OSMesg* msg, s32 flags);
OSIntMask osSetIntMask(OSIntMask im);
@@ -226,8 +226,8 @@ OSThread* __osPopThread(OSThread** param_1);
// void __osNop(void);
void __osDispatchThread(void);
void __osCleanupThread(void);
-void __osDequeueThread(OSThread** param_1, OSThread* param_2);
-void osDestroyThread(OSThread* puParm1);
+void __osDequeueThread(OSThread** queue, OSThread* t);
+void osDestroyThread(OSThread* t);
// void __osVoiceCheckResult(void);
void bzero(void* begin, s32 length);
@@ -236,13 +236,13 @@ void __osSiGetAccess(void);
void __osSiRelAccess(void);
s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data);
void __osContGetInitData(u8* pattern, OSContStatus* data);
-void __osPackRequestData(u8 cmd);
+void __osPackRequestData(u8 poll);
void osCreateThread(OSThread* t, OSId id, void* entry, void* arg, void* sp, OSPri p);
s32 osContStartReadData(OSMesgQueue* mq);
void osContGetReadData(OSContPad* data);
void __osPackReadData(void);
// void osVoiceGetReadData(void);
-uintptr_t osVirtualToPhysical(void* vaddr);
+uintptr_t osVirtualToPhysical(void* virtualAddress);
u32 __osGetSR(void);
void __osSetSR(u32 value);
void osWritebackDCache(void* vaddr, s32 nbytes);
@@ -256,7 +256,7 @@ s32 __osSpRawStartDma(s32 direction, void* devAddr, void* dramAddr, size_t size)
s32 __osSiRawStartDma(s32 direction, void* dramAddr);
s32 osEPiLinkHandle(OSPiHandle* handle);
void osViBlack(u8 active);
-s32 __osSiRawReadIo(u32 devAddr, u32* data);
+s32 __osSiRawReadIo(uintptr_t devAddr, u32* data);
OSId osGetThreadId(OSThread* t);
void osSpTaskYield(void);
s32 __osPfsGetNextPage(OSPfs* pfs, u8* bank, __OSInode* inode, __OSInodeUnit* page);
@@ -280,7 +280,7 @@ void __osPiGetAccess(void);
void __osPiRelAccess(void);
void __osDevMgrMain(void* arg);
// void func_8008C640(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_TYPE4 param_9, UNK_TYPE4 param_10, UNK_TYPE4 param_11, UNK_TYPE4 param_12, UNK_TYPE4 param_13, UNK_TYPE4 param_14, UNK_TYPE4 param_15, UNK_TYPE4 param_16, UNK_TYPE4 param_17, UNK_TYPE4 param_18);
-s32 __osPiRawStartDma(s32 direction, u32 devAddr, void* dramAddr, size_t size);
+s32 __osPiRawStartDma(s32 direction, uintptr_t devAddr, void* dramAddr, size_t size);
u16 __osSumcalc(u8* ptr, s32 length);
s32 __osIdCheckSum(u16* ptr, u16* checkSum, u16* idSum);
s32 __osRepairPackId(OSPfs* pfs, __OSPackId* badid, __OSPackId* newid);
@@ -292,12 +292,12 @@ void guMtxL2F(MtxF* m1, Mtx* m2);
u32 osGetMemSize(void);
s32 osPfsFindFile(OSPfs* pfs, u16 companyCode, u32 gameCode, u8* gameName, u8* extName, s32* fileNo);
void osSetEventMesg(OSEvent e, OSMesgQueue* mq, OSMesg m);
-f32 sqrtf(f32 __x);
+f32 sqrtf(f32 f);
s32 osAfterPreNMI(void);
s32 osContStartQuery(OSMesgQueue* mq);
void osContGetQuery(OSContStatus* data);
-void guLookAtHiliteF(float mf[4][4], LookAt* l, Hilite* h, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp, f32 xl1, f32 yl1, f32 zl1, f32 xl2, f32 yl2, f32 zl2, s32 twidth, s32 theight);
-void guLookAtHilite(Mtx* m, LookAt* l, Hilite* h, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp, f32 xl1, f32 yl1, f32 zl1, f32 xl2, f32 yl2, f32 zl2, s32 twidth, s32 theight);
+void guLookAtHiliteF(float mf[4][4], LookAt* l, Hilite* h, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp, f32 xl1, f32 yl1, f32 zl1, f32 xl2, f32 yl2, f32 zl2, s32 hiliteWidth, s32 hiliteHeight);
+void guLookAtHilite(Mtx* m, LookAt* l, Hilite* h, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp, f32 xl1, f32 yl1, f32 zl1, f32 xl2, f32 yl2, f32 zl2, s32 hiliteWidth, s32 hiliteHeight);
s32 _Printf(PrintCallback pfn, void* arg, const char* fmt, va_list ap);
void _Putfld(_Pft* px, va_list* pap, u8 code, u8* ac);
// void osVoiceClearDictionary(void);
@@ -305,9 +305,9 @@ void osUnmapTLBAll(void);
s32 osEPiStartDma(OSPiHandle* pihandle, OSIoMesg* mb, s32 direction);
// void __osVoiceContRead2(void);
u8 __osVoiceContDataCrc(u8* data, size_t numBytes);
-const char* strchr(const char* __s, s32 __c);
-size_t strlen(const char* __s);
-void* memcpy(void* __dest, const void* __src, size_t __n);
+const char* strchr(const char* s, s32 c);
+size_t strlen(const char* s);
+void* memcpy(void* s1, const void* s2, size_t n);
void osCreateMesgQueue(OSMesgQueue* mq, OSMesg* msq, s32 count);
void osInvalICache(void* vaddr, size_t nbytes);
void osInvalDCache(void* vaddr, size_t nbytes);
@@ -320,24 +320,24 @@ s32 __osSpDeviceBusy(void);
s32 __osSiDeviceBusy(void);
// void guMtxIdent(void);
s32 osJamMesg(OSMesgQueue* mq, OSMesg msg, s32 flag);
-void osSetThreadPri(OSThread* t, OSPri pri);
+void osSetThreadPri(OSThread* t, OSPri p);
OSPri osGetThreadPri(OSThread* t);
-s32 __osEPiRawReadIo(OSPiHandle* handle, u32 devAddr, u32* data);
+s32 __osEPiRawReadIo(OSPiHandle* handle, uintptr_t devAddr, u32* data);
void osViSwapBuffer(void* frameBufPtr);
-void guPositionF(float mf[4][4], f32 r, f32 p, f32 h, f32 s, f32 x, f32 y, f32 z);
-void guPosition(Mtx* m, f32 r, f32 p, f32 h, f32 s, f32 x, f32 y, f32 z);
-s32 __osEPiRawStartDma(OSPiHandle* handle, s32 direction, u32 cartAddr, void* dramAddr, size_t size);
+void guPositionF(float mf[4][4], f32 rot, f32 pitch, f32 yaw, f32 scale, f32 x, f32 y, f32 z);
+void guPosition(Mtx* m, f32 rot, f32 pitch, f32 yaw, f32 scale, f32 x, f32 y, f32 z);
+s32 __osEPiRawStartDma(OSPiHandle* handle, s32 direction, uintptr_t cartAddr, void* dramAddr, size_t size);
OSYieldResult osSpTaskYielded(OSTask* task);
s32 bcmp(void* __s1, void* __s2, size_t __n);
OSTime osGetTime(void);
-void guRotateF(float mf[4][4], f32 a, f32 x, f32 y, f32 z);
+void guRotateF(float m[4][4], f32 a, f32 x, f32 y, f32 z);
void guRotate(Mtx* m, f32 a, f32 x, f32 y, f32 z);
void __osSetGlobalIntMask(u32 mask);
// void osVoiceInit(void);
s32 __osContChannelReset(OSMesgQueue* mq, s32 channel);
// void __osVoiceSetADConverter(void);
s32 osAiSetFrequency(u32 frequency);
-s32 __osContRamRead(OSMesgQueue* mq, s32 channel, u16 address, u8* buffer);
+s32 __osContRamRead(OSMesgQueue* ctrlrqueue, s32 channel, u16 addr, u8* buffer);
// void __osVoiceContWrite20(void);
u8 __osContAddressCrc(u16 addr);
u8 __osContDataCrc(u8* data);
@@ -351,7 +351,7 @@ void bcopy(void* __src, void* __dest, size_t __n);
void __osResetGlobalIntMask(u32 mask);
// void osPfsDeleteFile(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
// void __osPfsReleasePages(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
-void guOrthoF(float mf[4][4], f32 l, f32 r, f32 b, f32 t, f32 n, f32 f, f32 scale);
+void guOrthoF(float m[4][4], f32 l, f32 r, f32 b, f32 t, f32 n, f32 f, f32 scale);
void guOrtho(Mtx* m, f32 l, f32 r, f32 b, f32 t, f32 n, f32 f, f32 scale);
OSIntMask __osDisableInt(void);
void __osRestoreInt(OSIntMask im);
@@ -359,13 +359,13 @@ void __osViInit(void);
void __osViSwapContext(void);
OSMesgQueue* osPiGetCmdQueue(void);
f32 cosf(f32 __x);
-s32 osEPiReadIo(OSPiHandle* pihandle, u32 devAddr, u32* data);
+s32 osEPiReadIo(OSPiHandle* handle, uintptr_t devAddr, u32* data);
void osViSetSpecialFeatures(u32 func);
s16 coss(u16 x);
void osSetTime(OSTime ticks);
// void osVoiceStopReadData(void);
void osViSetEvent(OSMesgQueue* mq, OSMesg m, u32 retraceCount);
-s32 osPfsIsPlug(OSMesgQueue* queue, u8* pattern);
+s32 osPfsIsPlug(OSMesgQueue* mq, u8* pattern);
// void __osPfsRequestData(void);
// void __osPfsGetInitData(void);
s32 __osVoiceGetStatus(OSMesgQueue* mq, s32 port, u8* status);
@@ -380,23 +380,23 @@ u32 __osGetFpcCsr(void);
// void __osPfsCheckRamArea(void);
// void osPfsChecker(void);
u32 osAiGetLength(void);
-s32 osEPiWriteIo(OSPiHandle* pihandle, u32 devAddr, u32 data);
+s32 osEPiWriteIo(OSPiHandle* handle, uintptr_t devAddr, u32 data);
void osMapTLBRdb(void);
void osYieldThread(void);
void guTranslate(Mtx* mtx, f32 x, f32 y, f32 z);
u32 __osGetCause(void);
s32 __osContRamWrite(OSMesgQueue* mq, s32 channel, u16 address, u8* buffer, s32 force);
-s32 __osEPiRawWriteIo(OSPiHandle* handle, u32 devAddr, u32 data);
+s32 __osEPiRawWriteIo(OSPiHandle* handle, uintptr_t devAddr, u32 data);
s32 osSetTimer(OSTimer* t, OSTime value, OSTime interval, OSMesgQueue* mq, OSMesg msg);
-void _Ldtob(_Pft* px, u8 code);
+void _Ldtob(_Pft* args, u8 type);
// void _Ldunscale(void);
void _Genld(_Pft* px, u8 code, u8* p, s16 nsig, s16 xexp);
ldiv_t ldiv(long numer, long denom);
lldiv_t lldiv(long long numer, long long denom);
-void _Litob(_Pft* px, u8 code);
-s32 __osSiRawWriteIo(u32 devAddr, u32 data);
+void _Litob(_Pft* args, u8 type);
+s32 __osSiRawWriteIo(uintptr_t devAddr, u32 data);
u32 __osSpGetStatus(void);
-void __osSpSetStatus(u32 value);
+void __osSpSetStatus(u32 data);
void osCreateViManager(OSPri pri);
// void viMgrMain(OSDevMgr* iParm1);
__OSViContext* __osViGetCurrentContext(void);
@@ -404,17 +404,17 @@ void osWritebackDCacheAll(void);
OSThread* __osGetCurrFaultedThread(void);
// void osVoiceMaskDictionary(void);
void guMtxF2L(float mf[4][4], Mtx* m);
-void osStartThread(OSThread* param_1);
+void osStartThread(OSThread* t);
void osViSetYScale(f32 value);
void osViSetXScale(f32 value);
long long __d_to_ll(double d);
long long __f_to_ll(float f);
unsigned long long __d_to_ull(double d);
unsigned long long __f_to_ull(float f);
-double __ll_to_d(long long l);
-float __ll_to_f(long long l);
-double __ull_to_d(unsigned long long l);
-float __ull_to_f(unsigned long long l);
+double __ll_to_d(long long s);
+float __ll_to_f(long long s);
+double __ull_to_d(unsigned long long u);
+float __ull_to_f(unsigned long long u);
// void osVoiceCheckWord(void);
// void osVoiceControlGain(void);
// void osVoiceStartReadData(void);
@@ -473,7 +473,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 angle, 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);
@@ -490,18 +490,18 @@ void Effect_DestroyAll(PlayState* play);
void EffectSS_Init(PlayState* play, s32 numEntries);
void EffectSS_Clear(PlayState* play);
EffectSs* EffectSS_GetTable(void);
-void EffectSS_Delete(EffectSs* param_1);
+void EffectSS_Delete(EffectSs* effectSs);
void EffectSS_ResetEntry(EffectSs* particle);
s32 EffectSS_FindFreeSpace(s32 priority, s32* tableEntry);
-void EffectSS_Copy(PlayState* play, EffectSs* particle);
-void EffectSs_Spawn(PlayState* play, s32 type, s32 priority, void* initParams);
+void EffectSS_Copy(PlayState* play, EffectSs* effectsSs);
+void EffectSs_Spawn(PlayState* play, s32 type, s32 priority, void* initData);
void EffectSS_UpdateParticle(PlayState* play, s32 index);
void EffectSS_UpdateAllParticles(PlayState* play);
void EffectSS_DrawParticle(PlayState* play, s32 index);
void EffectSS_DrawAllParticles(PlayState* play);
-s16 func_800B096C(s16 param_1, s16 param_2, s32 param_3);
-s16 func_800B09D0(s16 a0, s16 a1, f32 a2);
-u8 func_800B0A24(u8 a0, u8 a1, f32 a2);
+s16 func_800B096C(s16 arg0, s16 arg1, s32 arg2);
+s16 func_800B09D0(s16 arg0, s16 arg1, f32 arg2);
+u8 func_800B0A24(u8 arg0, u8 arg1, f32 arg2);
void EffectSs_DrawGEffect(PlayState* play, EffectSs* this, void* texture);
void EffectSsDust_Spawn(PlayState* play, u16 drawFlags, Vec3f* pos, Vec3f* velocity, Vec3f* accel, Color_RGBA8* primColor, Color_RGBA8* envColor, s16 scale, s16 scaleStep, s16 life, u8 updateMode);
void func_800B0DE0(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, Color_RGBA8* primColor, Color_RGBA8* envColor, s16 scale, s16 scaleStep);
@@ -530,10 +530,9 @@ void EffectSsKirakira_SpawnDispersed(PlayState* play, Vec3f* pos, Vec3f* velocit
// void EffectSsBomb2_SpawnFade(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4);
void EffectSsBomb2_SpawnLayered(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scaleStep);
// void EffectSsBlast_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, Color_RGBA8* param_5, Color_RGBA8* param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9, UNK_TYPE2 param_10);
-void EffectSsBlast_SpawnWhiteCustomScale(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale,
- s16 scaleStep, s16 life);
+void EffectSsBlast_SpawnWhiteCustomScale(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scaleStep, s16 life);
// void EffectSsBlast_SpawnShockwave(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_TYPE2 param_7);
-void EffectSsBlast_SpawnWhiteShockwave(PlayState* play, Vec3f* arg1, Vec3f* arg2, Vec3f* arg3);
+void EffectSsBlast_SpawnWhiteShockwave(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel);
// void EffectSsGSpk_SpawnAccel(UNK_TYPE4 uParm1, UNK_TYPE4 uParm2, Vec3f* pzParm3, Vec3f* pzParm4, Vec3f* param_5, Color_RGBA8* param_6, Color_RGBA8* param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9);
// void EffectSsGSpk_SpawnNoAccel(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, UNK_TYPE2 param_9);
void EffectSsGSpk_SpawnFuse(PlayState* play, Actor* actor, Vec3f* pos, Vec3f* velocity, Vec3f* accel);
@@ -550,28 +549,28 @@ 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 EffectSsSolderSrchBall_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16* playerDetected, s16 params);
+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 func_800B2B44(PlayState* play, Actor* actor, Vec3f* arg2, f32 arg3);
+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);
-void EffectSsDeadDb_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, Color_RGBA8* prim, Color_RGBA8* env, s16 scale, s16 scaleStep, s32 unk);
+void EffectSsDeadDb_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, Color_RGBA8* prim, Color_RGBA8* env, s16 scale, s16 scaleStep, s32 life);
void func_800B3030(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scaleStep, s32 colorIndex);
void EffectSsDeadDd_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, Color_RGBA8* prim, Color_RGBA8* env, s16 scale, s16 scaleStep, s16 alphaStep, s32 life);
// void EffectSsDeadDs_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE4 param_8);
@@ -580,8 +579,8 @@ void EffectSsIceSmoke_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f*
void EffectSsIceBlock_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale);
void FlagSet_Update(GameState* gameState);
void FlagSet_Draw(GameState* gameState);
-void Overlay_LoadGameState(GameStateOverlay* gameState);
-void Overlay_FreeGameState(GameStateOverlay* gameState);
+void Overlay_LoadGameState(GameStateOverlay* overlayEntry);
+void Overlay_FreeGameState(GameStateOverlay* overlayEntry);
void ActorShape_Init(ActorShape* actorShape, f32 yOffset, ActorShadowFunc shadowDraw, f32 shadowScale);
void ActorShadow_DrawCircle(Actor* actor, Lights* lights, PlayState* play);
@@ -620,7 +619,7 @@ 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);
@@ -648,7 +647,7 @@ f32 Actor_XZDistanceBetweenActors(Actor* actor1, Actor* actor2);
f32 Actor_XZDistanceToPoint(Actor* actor, Vec3f* point);
void Actor_OffsetOfPointInActorCoords(Actor* actor, Vec3f* offset, Vec3f* point);
f32 Actor_HeightDiff(Actor* actor1, Actor* actor2);
-void func_800B6F20(PlayState* play, Input* input, f32 arg2, s16 arg3);
+void func_800B6F20(PlayState* play, Input* input, f32 magnitude, s16 baseYaw);
f32 Player_GetHeight(Player* player);
f32 Player_GetRunSpeedLimit(Player* player);
s32 func_800B7118(Player* player);
@@ -657,7 +656,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);
@@ -667,7 +666,7 @@ 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_GetSlopeDirection(CollisionPoly* floorPoly, Vec3f* slopeNormal, s16* downwardSlopeYaw);
void Actor_UpdateBgCheckInfo(PlayState* play, Actor* actor, f32 wallCheckHeight, f32 wallCheckRadius, f32 ceilingCheckHeight, u32 flags);
Hilite* Hilite_DrawOpa(Vec3f* object, Vec3f* eye, Vec3f* lightDir, GraphicsContext* gfxCtx);
void func_800B8050(Actor* actor, PlayState* play, s32 flag);
@@ -678,13 +677,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);
@@ -692,10 +691,10 @@ 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_PickUp(Actor* actor, PlayState* play, GetItemId getItemId, f32 xzRange, f32 yRange);
+s32 Actor_PickUpNearby(Actor* actor, PlayState* play, GetItemId getItemId);
s32 Actor_LiftActor(Actor* actor, PlayState* play);
-s32 Actor_PickUpFar(Actor* actor, PlayState* play, s32 getItemId);
+s32 Actor_PickUpFar(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);
@@ -717,7 +716,7 @@ 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 index, 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_InitContext(PlayState* play, ActorContext* actorCtx, ActorEntry* actorEntry);
@@ -783,15 +782,15 @@ void ActorOverlayTable_Init(void);
void ActorOverlayTable_Cleanup(void);
void SSNode_SetValue(SSNode* node, s16* polyIndex, u16 next);
-void SSList_SetNull(SSList* head);
+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* vertex, Vec3f* vector);
-void BgCheck_Vec3fToVec3s(Vec3s* vertex, Vec3f* vector);
+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);
@@ -815,7 +814,7 @@ void BgCheck_Allocate(CollisionContext* colCtx, PlayState* play, CollisionHeader
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 chkDist, s32 arg9);
+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);
@@ -824,7 +823,7 @@ f32 BgCheck_EntityRaycastFloor3(CollisionContext* colCtx, CollisionPoly** outPol
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 chkDist);
+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);
@@ -839,15 +838,15 @@ s32 BgCheck_EntitySphVsWall4(CollisionContext* colCtx, Vec3f* posResult, Vec3f*
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 chkWall, s32 chkFloor, s32 chkCeil, s32 chkOneFace, s32* bgId);
-s32 BgCheck_CameraLineTest2(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 chkWall, s32 chkFloor, s32 chkCeil, s32 chkOneFace, s32* bgId);
-s32 BgCheck_EntityLineTest1(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 chkWall, s32 chkFloor, s32 chkCeil, s32 chkOneFace, s32* bgId);
-s32 BgCheck_EntityLineTest2(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 chkWall, s32 chkFloor, s32 chkCeil, s32 chkOneFace, s32* bgId, Actor* actor);
-s32 BgCheck_EntityLineTest3(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 chkWall, s32 chkFloor, s32 chkCeil, s32 chkOneFace, s32* bgId, Actor* actor, f32 chkDist);
-s32 BgCheck_ProjectileLineTest(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 chkWall, s32 chkFloor, s32 chkCeil, s32 chkOneFace, s32* bgId);
-s32 BgCheck_AnyLineTest1(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 chkOneFace);
-s32 BgCheck_AnyLineTest2(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 chkWall, s32 chkFloor, s32 chkCeil, s32 chkOneFace);
-s32 BgCheck_AnyLineTest3(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 chkWall, s32 chkFloor, s32 chkCeil, s32 chkOneFace, s32* bgId);
+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);
@@ -883,6 +882,7 @@ 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);
@@ -890,8 +890,8 @@ void BgCheck_ResetFlagsIfLoadedActor(PlayState* play, DynaCollisionContext* dyna
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* header);
-void CollisionHeader_GetVirtual(CollisionHeader* meshSegPtr, CollisionHeader** param_2);
+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);
@@ -931,7 +931,7 @@ 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);
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 surfaceChkDist, WaterBox** outWaterBox, s32* bgId);
+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);
@@ -939,18 +939,18 @@ 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 index, Actor* actor);
-void BgCheck2_UpdateActorYRotation(CollisionContext* colCtx, s32 index, Actor* actor);
-void BgCheck2_AttachToMesh(CollisionContext* colCtx, Actor* actor, s32 index);
-u32 BgCheck2_UpdateActorAttachedToMesh(CollisionContext* colCtx, s32 index, Actor* actor);
+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_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 index);
+void DynaPolyActor_SetRidingMovingStateByIndex(CollisionContext* colCtx, s32 bgId);
void DynaPolyActor_SetRidingRotatingState(DynaPolyActor* dynaActor);
-void DynaPolyActor_SetRidingRotatingStateByIndex(CollisionContext* colCtx, s32 index);
+void DynaPolyActor_SetRidingRotatingStateByIndex(CollisionContext* colCtx, s32 bgId);
void DynaPolyActor_SetSwitchPressedState(DynaPolyActor* dynaActor);
void DynaPolyActor_SetHeavySwitchPressedState(DynaPolyActor* dynaActor);
s32 DynaPolyActor_IsInRidingFallingState(DynaPolyActor* dynaActor);
@@ -960,115 +960,6 @@ s32 DynaPolyActor_IsInSwitchPressedState(DynaPolyActor* dynaActor);
s32 DynaPolyActor_IsInHeavySwitchPressedState(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,7 +975,7 @@ 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);
@@ -1102,17 +993,18 @@ s32 Camera_SetViewParam(Camera* camera, s32 viewFlag, void* param);
// 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);
@@ -1331,7 +1223,7 @@ s32 Flags_GetInfTable(s32 flag);
void Flags_SetInfTable(s32 flag);
s32 Actor_TrackNone(Vec3s* headRot, Vec3s* torsoRot);
s32 Actor_TrackPoint(Actor* actor, Vec3f* target, Vec3s* headRot, Vec3s* torsoRot);
-s32 Actor_TrackPlayerSetFocusHeight(PlayState* play, Actor* actor, Vec3s* headRot, Vec3s* torsoRot, f32 focusPosYAdj);
+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);
@@ -1371,7 +1263,7 @@ 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);
@@ -1491,9 +1383,9 @@ void func_800FD928(s32 param_1);
// 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 Environment_StopTime(void);
+void Environment_StartTime(void);
+u8 Environment_IsTimeStopped(void);
u32 func_800FE4B8(PlayState* play);
// void func_800FE590(void);
// void func_800FE5D0(void);
@@ -1577,8 +1469,8 @@ f32 Math_Vec3f_StepTo(Vec3f* start, Vec3f* target, f32 speed);
void Lib_Nop801004FC(void);
void* Lib_SegmentedToVirtual(void* ptr);
void* Lib_SegmentedToVirtualNull(void* ptr);
+void* Lib_VirtualToPhysical(void* ptr);
void* Lib_PhysicalToVirtual(void* ptr);
-void* Lib_PhysicalToVirtualNull(void* ptr);
void LifeMeter_Init(PlayState* play);
void LifeMeter_UpdateColors(PlayState* play);
s32 LifeMeter_SaveInterfaceHealth(PlayState* play);
@@ -1616,10 +1508,10 @@ void Lights_GlowCheck(PlayState* play);
void Lights_DrawGlow(PlayState* play);
void* ZeldaArena_Malloc(size_t size);
void* ZeldaArena_MallocR(size_t size);
-void* ZeldaArena_Realloc(void* oldPtr, size_t newSize);
-void ZeldaArena_Free(void* param_1);
+void* ZeldaArena_Realloc(void* ptr, size_t newSize);
+void ZeldaArena_Free(void* ptr);
void* ZeldaArena_Calloc(u32 num, size_t size);
-void ZeldaArena_GetSizes(size_t* maxFreeBlock, size_t* bytesFree, size_t* bytesAllocated);
+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();
@@ -1651,7 +1543,7 @@ void func_8010565C(PlayState* play, s32 num, void* segmentAddress);
void func_80105818(PlayState* play, s32 num, TransitionActorEntry* transitionActorList);
void MapDisp_Destroy(PlayState* play);
void func_80105B34(PlayState* play);
-void func_80105C40(s16 arg0);
+void func_80105C40(s16 room);
// void func_80105FE0(void);
// void func_80106408(void);
// void func_80106450(void);
@@ -1660,7 +1552,7 @@ s32 func_80106530(PlayState* play);
// void func_8010657C(void);
void func_80106644(PlayState* play, s32 x, s32 z, s32 rot);
// void func_8010683C(void);
-// void func_801068FC(void);
+void* func_801068FC(PlayState* play, void* heap, 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);
@@ -1669,8 +1561,8 @@ void func_80106644(PlayState* play, s32 x, s32 z, s32 rot);
// void func_80108558(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_80108A10(void);
// void func_80108A64(void);
-// void func_80108AF8(void);
-// void func_801090B0(void);
+void func_80108AF8(PlayState* play);
+s32 func_801090B0(s32 arg0);
s32 func_80109124(s16 arg0);
// void func_801091F0(void);
void func_80109428(PlayState* play);
@@ -1725,9 +1617,9 @@ s32 Map_IsInBossArea(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);
@@ -1779,7 +1671,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);
@@ -1802,27 +1694,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);
-// void func_8010CB80(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);
-Gfx* func_8010CD98(Gfx* displayListHead, void* 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* displayListHead, void* 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* displayListHead, void* texture, s16 textureWidth, s16 textureHeight, u16 i);
-// void func_8010DE38(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6);
-// 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 func_80110038(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 func_80112C0C(PlayState* play, u16 flag);
u8 Item_Give(PlayState* play, u8 item);
u8 Item_CheckObtainability(u8 item);
void Inventory_DeleteItem(s16 item, s16 slot);
@@ -1834,12 +1722,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);
@@ -1847,30 +1733,13 @@ 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);
@@ -1883,7 +1752,7 @@ s32 func_80122744(PlayState* play, struct_80122744_arg1* arg1, u32 arg2, Vec3s*
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);
@@ -1894,7 +1763,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* play);
+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);
@@ -1904,15 +1773,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 arg1);
-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* this);
-void func_80123D50(PlayState* play, Player* player, s32 itemId, s32 actionParam);
+void Player_SetEquipmentData(PlayState* play, Player* player);
+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);
@@ -1925,21 +1794,21 @@ 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_80124110(Player* player, PlayerItemAction itemAction);
s32 func_80124148(Player* player);
-s32 Player_ActionToMeleeWeapon(s32 actionParam);
+s32 Player_ActionToMeleeWeapon(PlayerItemAction itemAction);
s32 Player_GetMeleeWeaponHeld(Player* player);
s32 Player_IsHoldingTwoHandedWeapon(Player* player);
-s32 Player_ActionToBottle(Player* player, s32 actionParam);
+s32 Player_ActionToBottle(Player* player, PlayerItemAction itemAction);
s32 Player_GetBottleHeld(Player* Player);
-s32 Player_ActionToExplosive(Player* player, s32 actionParam);
+s32 Player_ActionToExplosive(Player* player, PlayerItemAction itemAction);
s32 Player_GetExplosiveHeld(Player* player);
-s32 func_80124278(Actor* actor, s32 arg1);
+s32 Player_ActionToSword(Actor* actor, PlayerItemAction itemAction);
s32 func_801242B4(Player* player);
-s32 Player_GetEnvTimerType(PlayState* play);
+s32 Player_GetEnvironmentalHazard(PlayState* play);
void func_80124420(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);
@@ -1949,7 +1818,7 @@ s32 func_801263FC(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s
s32 func_80126440(PlayState* play, ColliderQuad* collider, WeaponInfo* weaponInfo, Vec3f* arg3, Vec3f* arg4);
void Player_DrawGetItem(PlayState* play, Player* player);
void func_80126B8C(PlayState* play, Player* player);
-s32 func_80127438(PlayState* play, Player* player, s32 maskId);
+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);
@@ -2053,7 +1922,7 @@ void Inventory_ChangeEquipment(s16 value);
u8 Inventory_DeleteEquipment(PlayState* play, s16 equipment);
void Inventory_ChangeUpgrade(s16 upgrade, u32 value);
s32 Inventory_IsMapVisible(s16 sceneId);
-void Inventory_SetMapVisibility(s16 tingleIndex);
+void Inventory_SetWorldMapCloudVisibility(s16 tingleIndex);
void Inventory_SaveDekuPlaygroundHighScore(s16 timerId);
void Inventory_IncrementSkullTokenCount(s16 sceneIndex);
s16 Inventory_GetSkullTokenCount(s16 sceneIndex);
@@ -2061,7 +1930,7 @@ void Inventory_SaveLotteryCodeGuess(PlayState* play);
s32 Object_Spawn(ObjectContext* objectCtx, s16 id);
void Object_InitBank(GameState* gameState, ObjectContext* objectCtx);
void Object_UpdateBank(ObjectContext* objectCtx);
-s32 Object_GetIndex(ObjectContext* objectCtx, s16 id);
+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);
@@ -2095,7 +1964,7 @@ 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_HeaderCmdSetAreaVisitedFlag(PlayState* play, SceneCmd* cmd);
+void Scene_HeaderCmdSetRegionVisitedFlag(PlayState* play, SceneCmd* cmd);
void Scene_HeaderCmdAnimatedMaterials(PlayState* play, SceneCmd* cmd);
void Scene_SetExitFade(PlayState* play);
s32 Scene_ProcessHeader(PlayState* play, SceneCmd* header);
@@ -2107,7 +1976,7 @@ Gfx* AnimatedMat_TexScroll(PlayState* play, AnimatedMatTexScrollParams* params);
void AnimatedMat_DrawTexScroll(PlayState* play, s32 segment, void* params);
Gfx* AnimatedMat_TwoLayerTexScroll(PlayState* play, AnimatedMatTexScrollParams* params);
void AnimatedMat_DrawTwoTexScroll(PlayState* play, s32 segment, void* params);
-void AnimatedMat_SetColor(PlayState* play, s32 segment, F3DPrimColor* primColor, F3DEnvColor* envColor);
+void AnimatedMat_SetColor(PlayState* play, s32 segment, F3DPrimColor* primColorResult, F3DEnvColor* envColor);
void AnimatedMat_DrawColor(PlayState* play, s32 segment, void* params);
s32 AnimatedMat_Lerp(s32 min, s32 max, f32 norm);
void AnimatedMat_DrawColorLerp(PlayState* play, s32 segment, void* params);
@@ -2153,7 +2022,7 @@ void SkelAnime_DrawFlexLimbOpa(PlayState* play, s32 limbIndex, void** skeleton,
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 currentFrame, s32 limbCount, Vec3s* dst);
+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);
@@ -2172,8 +2041,8 @@ AnimationEntry* AnimationContext_AddEntry(AnimationContext* animationCtx, Animat
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* index);
-void AnimationContext_SetCopyFalse(PlayState* play, s32 vecCount, Vec3s* dst, Vec3s* src, u8* index);
+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);
@@ -2182,7 +2051,7 @@ 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 SkelAnime_InitLink(PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeader* skeletonHeaderSeg, LinkAnimationHeader* animation, s32 flags, void* jointTableBuffer, void* morphTableBuffer, s32 limbBufCount);
void LinkAnimation_SetUpdateFunction(SkelAnime* skelAnime);
s32 LinkAnimation_Update(PlayState* play, SkelAnime* skelAnime);
s32 LinkAnimation_Morph(PlayState* play, SkelAnime* skelAnime);
@@ -2199,15 +2068,15 @@ 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 frame);
-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_InterpJointMorph(PlayState* play, SkelAnime* skelAnime, f32 weight);
+void LinkAnimation_BlendToJoint(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation1, f32 frame1, LinkAnimationHeader* animation2, f32 frame2, f32 blendWeight, void* blendTableBuffer);
+void LinkAnimation_BlendToMorph(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation1, f32 frame1, LinkAnimationHeader* animation2, f32 frame2, f32 blendWeight, void* blendTableBuffer);
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* animationSeg);
+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);
@@ -2228,15 +2097,15 @@ 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* pos, s16 angle);
+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);
-void SkinMatrix_GetClear(MtxF** puParm1);
-void SkinMatrix_GetClear(MtxF** mf);
+void SkinMatrix_GetClear(MtxF** mfp);
+void SkinMatrix_GetClear(MtxF** mfp);
void SkinMatrix_MtxFCopy(MtxF* src, MtxF* dest);
s32 SkinMatrix_Invert(MtxF* src, MtxF* dest);
void SkinMatrix_SetScale(MtxF* mf, f32 x, f32 y, f32 z);
@@ -2272,7 +2141,7 @@ void func_80140E80(void* param_1);
// void func_80140EA0(void);
// 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);
@@ -2287,11 +2156,12 @@ void VisMono_Draw(VisMono* this, Gfx** gfxp);
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);
+
+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 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);
+void Skybox_Setup(GameState* gameState, SkyboxContext* skyboxCtx, s16 skyboxId);
+void func_80143324(PlayState* play, SkyboxContext* skyboxCtx, s16 skyboxId);
+void Skybox_Init(GameState* gameState, SkyboxContext* skyboxCtx, s16 skyboxId);
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);
@@ -2305,7 +2175,7 @@ void func_801477B4(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);
-void func_80148B98(PlayState* play, u8 bParm2);
+void func_80148B98(PlayState* play, u8 arg1);
// void func_80148CBC(void);
// void func_80148D64(void);
// void func_80149048(void);
@@ -2319,7 +2189,7 @@ void func_80149F74(PlayState* play, u32** ppuParm2);
// void func_8014AAD0(void);
void func_8014ADBC(PlayState* play, UNK_PTR puParm2);
// void func_8014C70C(void);
-void Message_LoadChar(PlayState* play, u16 codePointIndex, s32* offset, f32* arg3, s16 arg4);
+void Message_LoadChar(PlayState* play, u16 codePointIndex, s32* offset, f32* arg3, s16 decodedBufPos);
// void func_8014CCB4(void);
// void func_8014CDF0(void);
// void func_8014CFDC(void);
@@ -2332,7 +2202,7 @@ 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 func_80151A68(PlayState* play, u16 textId);
-void func_80151BB4(PlayState* play, u8 uParm2);
+void func_80151BB4(PlayState* play, u8 arg1);
// void func_80151C9C(void);
void func_80151DA4(PlayState* play, u16 arg2);
void func_80152434(PlayState* play, u16 arg2);
@@ -2357,7 +2227,7 @@ void Message_FindMessageNES(PlayState* play, u16 textId);
// void Message_LoadLocalizedRupeesNES(void);
// void Message_LoadRupeesNES(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5);
// void Message_LoadTimeNES(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
-// void Message_LoadAreaTextNES(void);
+// void Message_LoadOwlWarpTextNES(void);
// void func_80159438(void);
void func_8015966C(PlayState* play, UNK_PTR puParm2, UNK_TYPE arg3);
// void func_8015A144(void);
@@ -2398,8 +2268,8 @@ void KaleidoScopeCall_Init(PlayState* play);
void KaleidoScopeCall_Destroy(PlayState* play);
void KaleidoScopeCall_Update(PlayState* play);
void KaleidoScopeCall_Draw(PlayState* play);
-// void func_80163C90(void);
-// void func_80163D80(void);
+void Transition_Init(TransitionContext* transitionCtx);
+void Transition_Destroy(TransitionContext* transitionCtx);
// void func_80163DC0(void);
// void func_8016418C(void);
// void func_8016424C(void);
@@ -2417,19 +2287,22 @@ void* TransitionFade_Init(void* param_1);
// void TransitionFade_IsDone(void);
// void TransitionFade_SetColor(void);
// void TransitionFade_SetType(void);
-// void TransitionCircle_Start(void);
-// void TransitionCircle_Init(void);
-// void TransitionCircle_Destroy(void);
-// void TransitionCircle_Update(void);
-// void TransitionCircle_SetColor(void);
-// void TransitionCircle_SetType(void);
-void func_80164C14(Gfx** arg0, TexturePtr* arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, f32 arg6);
-// void TransitionCircle_Draw(void);
-// void TransitionCircle_IsDone(void);
-// void func_801651B0(void);
-// void func_80165224(void);
-// void func_80165288(void);
-// void func_8016537C(void);
+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);
+void* TransitionCircle_Init(void* thisx);
+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_Draw(void* thisx, Gfx** gfxp);
+s32 TransitionCircle_IsDone(void* thisx);
+void* TransitionOverlay_VramToRam(TransitionOverlay *overlayEntry, void* vramAddr);
+void TransitionOverlay_VramToRamArray(TransitionOverlay *overlayEntry, void** vramAddrs, s32 count);
+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);
@@ -2439,16 +2312,16 @@ 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_80165DCC(s32 arg0);
+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_Destroy(GameState* thisx);
-// void func_801663C4(void);
-// void func_80166644(void);
+void Play_CompressI8ToI5(void* srcI8, void* destI5, size_t size);
+void Play_DecompressI5ToI8(void* srcI5, void* destI8, size_t size);
// void func_801668B4(void);
void func_80166968(PlayState* play, Camera* camera);
void func_80166B30(PlayState* play);
@@ -2458,43 +2331,43 @@ void func_80167DE4(PlayState* play);
void Play_Draw(PlayState* play);
void func_80168DAC(PlayState* play);
void Play_Main(PlayState* play);
-s32 Play_InCsMode(PlayState* play);
+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);
-void Play_GetScreenPos(PlayState* play, Vec3f* worldPos, Vec3f* screenPos);
-s16 Play_CreateSubCamera(PlayState* play);
-s16 Play_GetActiveCamId(PlayState* play);
-s32 Play_ChangeCameraStatus(PlayState* play, s16 camId, s16 status);
-void Play_ClearCamera(PlayState* play, s16 camId);
-Camera* Play_GetCamera(PlayState* play, s16 camId);
-s32 Play_SetCameraAtEye(PlayState* play, s16 camId, Vec3f* at, Vec3f* eye);
-s32 Play_SetCameraAtEyeUp(PlayState* play, s16 camId, Vec3f* at, Vec3f* eye, Vec3f* up);
-s32 Play_SetCameraFov(PlayState* play, s16 camId, f32 fov);
-s32 Play_SetCameraRoll(PlayState* play, s16 camId, s16 roll);
-void Play_CopyCamera(PlayState* play, s16 dstCamId, s16 srcCamId);
-s32 func_80169A50(PlayState* play, s16 camId, Player* player, s16 setting);
-s32 Play_ChangeCameraSetting(PlayState* play, s16 camId, s16 setting);
-void func_80169AFC(PlayState* play, s16 camId, s16 arg2);
-u16 Play_GetActorCsCamSetting(PlayState* play, s32 csCamDataIndex);
-Vec3s* Play_GetActorCsCamFuncData(PlayState* play, s32 csCamDataIndex);
+void Play_GetScreenPos(PlayState* this, Vec3f* worldPos, Vec3f* screenPos);
+s16 Play_CreateSubCamera(PlayState* this);
+s16 Play_GetActiveCamId(PlayState* this);
+s32 Play_ChangeCameraStatus(PlayState* this, s16 camId, s16 status);
+void Play_ClearCamera(PlayState* this, s16 camId);
+Camera* Play_GetCamera(PlayState* this, s16 camId);
+s32 Play_SetCameraAtEye(PlayState* this, s16 camId, Vec3f* at, Vec3f* eye);
+s32 Play_SetCameraAtEyeUp(PlayState* this, s16 camId, Vec3f* at, Vec3f* eye, Vec3f* up);
+s32 Play_SetCameraFov(PlayState* this, s16 camId, f32 fov);
+s32 Play_SetCameraRoll(PlayState* this, s16 camId, s16 roll);
+void Play_CopyCamera(PlayState* this, s16 destCamId, s16 srcCamId);
+s32 func_80169A50(PlayState* this, s16 camId, Player* player, s16 setting);
+s32 Play_ChangeCameraSetting(PlayState* this, s16 camId, s16 setting);
+void func_80169AFC(PlayState* this, s16 camId, s16 timer);
+u16 Play_GetActorCsCamSetting(PlayState* this, s32 csCamDataIndex);
+Vec3s* Play_GetActorCsCamFuncData(PlayState* this, s32 csCamDataIndex);
s16 Play_GetOriginalSceneId(s16 sceneId);
-void Play_SaveCycleSceneFlags(GameState* gameState);
-void Play_SetRespawnData(GameState* gameState, s32 respawnNumber, u16 sceneSetup, s32 roomIndex, s32 playerParams, Vec3f* pos, s16 yaw);
-void Play_SetupRespawnPoint(GameState* gameState, s32 respawnNumber, s32 playerParams);
-void func_80169EFC(GameState* gameState);
-void func_80169F78(GameState* gameState);
-void func_80169FDC(GameState* gameState);
-s32 func_80169FFC(GameState* gameState);
-s32 FrameAdvance_IsEnabled(GameState* gameState);
-s32 func_8016A02C(GameState* gameState, Actor* actor, s16* yaw);
-s32 Play_IsUnderwater(PlayState* play, Vec3f* pos);
+void Play_SaveCycleSceneFlags(GameState* thisx);
+void Play_SetRespawnData(GameState* thisx, s32 respawnMode, u16 entrance, s32 roomIndex, s32 playerParams, Vec3f* pos, s16 yaw);
+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 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* gameState, s32 cutscene);
-void func_8016A268(GameState* gameState, s16 arg1, u8 arg2, u8 arg3, u8 arg4, u8 arg5);
+void Play_AssignPlayerActorCsIdsFromScene(GameState* thisx, s32 startActorCsId);
+void Play_FillScreen(GameState* gameState, s16 fillScreenOn, u8 red, u8 green, u8 blue, u8 alpha);
void Play_Init(GameState* gameState);
// 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);
@@ -2585,7 +2458,7 @@ void Game_Update(GameState* gameState);
void Game_IncrementFrameCount(GameState* gameState);
void GameState_InitArena(GameState* gameState, size_t size);
void GameState_Realloc(GameState* gameState, size_t size);
-void GameState_Init(GameState* gameState, GameStateFunc gameStateInit, GraphicsContext* gfxCtx);
+void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* gfxCtx);
void GameState_Destroy(GameState* gameState);
GameStateFunc GameState_GetInit(GameState* gameState);
size_t GameState_GetSize(GameState* gameState);
@@ -2674,9 +2547,11 @@ 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 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);
@@ -2691,7 +2566,7 @@ s32 func_80178A94(s32 param_1, s32 param_2);
// void func_80178D7C(void);
// void func_80178DAC(void);
void func_80178E3C(uintptr_t vrom, s32 id, void* dst, s32 size);
-// void func_80178E7C(void);
+void func_80178E7C(uintptr_t arg0, void* arg1, 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);
@@ -2802,11 +2677,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 opposite, f32 adjacent);
-s16 Math_Atan2S(f32 opposite, f32 adjacent);
-f32 Math_Atan2F(f32 opposite, f32 adjacent);
-s16 Math_FAtan2F(f32 adjacent, f32 opposite);
-f32 Math_Acot2F(f32 adjacent, f32 opposite);
+s16 Math_Atan2S(f32 y, f32 x);
+f32 Math_Atan2F(f32 y, f32 x);
+s16 Math_Atan2S_XY(f32 x, f32 y);
+f32 Math_Atan2F_XY(f32 x, f32 y);
u64* SysUcode_GetUCodeBoot(void);
size_t SysUcode_GetUCodeBootSize(void);
@@ -2839,9 +2713,7 @@ void func_801835EC(UNK_PTR arg0, UNK_PTR arg1);
// void func_80183B68(void);
s32 func_80183DE0(SkeletonInfo* skeletonInfo);
// void func_8018410C(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_8018450C(PlayState* play, SkeletonInfo* skeleton, Mtx* mtx,
- OverrideKeyframeDrawScaled overrideKeyframeDraw, PostKeyframeDrawScaled postKeyframeDraw,
- Actor* actor);
+void func_8018450C(PlayState* play, SkeletonInfo* skeleton, Mtx* mtx, OverrideKeyframeDrawScaled overrideKeyframeDraw, PostKeyframeDrawScaled postKeyframeDraw, Actor* actor);
// void func_801845A4(void);
// void func_801845C8(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
// void func_80184638(void);
@@ -2893,7 +2765,7 @@ s32 osFlashWriteBuffer(OSIoMesg* mb, s32 priority, void* dramAddr, OSMesgQueue*
s32 osFlashWriteArray(u32 pageNum);
s32 osFlashReadArray(OSIoMesg* mb, s32 priority, u32 pageNum, void* dramAddr, u32 pageCount, OSMesgQueue* mq);
-Acmd* AudioSynth_Update(Acmd* cmdStart, s32* numAbiCmds, s16* aiStart, s32 aiBufLen);
+Acmd* AudioSynth_Update(Acmd* abiCmdStart, s32* numAbiCmds, s16* aiBufStart, s32 numSamplesPerFrame);
void AudioHeap_DiscardFont(s32 fontId);
void* AudioHeap_WritebackDCache(void* addr, size_t size);
@@ -2913,15 +2785,15 @@ void* AudioHeap_SearchPermanentCache(s32 tableType, s32 id);
void* AudioHeap_AllocPermanent(s32 tableType, s32 id, size_t size);
void* AudioHeap_AllocSampleCache(size_t size, s32 sampleBankId, void* sampleAddr, s8 medium, s32 cache);
void AudioHeap_ApplySampleBankCache(s32 sampleBankId);
-void AudioHeap_SetReverbData(s32 reverbIndex, u32 dataType, s32 data, s32 flags);
+void AudioHeap_SetReverbData(s32 reverbIndex, u32 dataType, s32 data, s32 isFirstInit);
void AudioLoad_DecreaseSampleDmaTtls(void);
void* AudioLoad_DmaSampleData(uintptr_t devAddr, size_t size, s32 arg2, u8* dmaIndexRef, s32 medium);
void AudioLoad_InitSampleDmaBuffers(s32 numNotes);
s32 AudioLoad_IsFontLoadComplete(s32 fontId);
s32 AudioLoad_IsSeqLoadComplete(s32 seqId);
-void AudioLoad_SetFontLoadStatus(s32 fontId, s32 status);
-void AudioLoad_SetSeqLoadStatus(s32 seqId, s32 status);
+void AudioLoad_SetFontLoadStatus(s32 fontId, s32 loadStatus);
+void AudioLoad_SetSeqLoadStatus(s32 seqId, s32 loadStatus);
void AudioLoad_SyncLoadSeqParts(s32 seqId, s32 arg1, s32 arg2, OSMesgQueue* arg3);
s32 AudioLoad_SyncLoadInstrument(s32 fontId, s32 instId, s32 drumId);
void AudioLoad_AsyncLoadSeq(s32 seqId, s32 arg1, s32 retData, OSMesgQueue* retQueue);
@@ -2929,7 +2801,7 @@ void AudioLoad_AsyncLoadSampleBank(s32 sampleBankId, s32 arg1, s32 retData, OSMe
void AudioLoad_AsyncLoadFont(s32 fontId, s32 arg1, s32 retData, OSMesgQueue* retQueue);
u8* AudioLoad_GetFontsForSequence(s32 seqId, u32* outNumFonts);
void AudioLoad_DiscardSeqFonts(s32 seqId);
-void func_8018FA60(u32 tableType, u32 id, s32 arg2, s32 arg3);
+void func_8018FA60(u32 tableType, u32 id, s32 type, s32 data);
s32 AudioLoad_SyncInitSeqPlayer(s32 playerIndex, s32 seqId, s32 arg2);
s32 AudioLoad_SyncInitSeqPlayerSkipTicks(s32 playerIndex, s32 seqId, s32 skipTicks);
void AudioLoad_ProcessLoads(s32 resetStatus);
@@ -2944,39 +2816,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);
@@ -3018,7 +2869,7 @@ 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_InitSequencePlayerChannels(s32 seqPlayerIndex);
void AudioSeq_InitSequencePlayers(void);
void func_8019AE40(s32 param_1, s32 param_2, u32 param_3, s32 param_4);
@@ -3031,8 +2882,8 @@ void AudioOcarina_StartWithSongNoteLengths(u32 ocarinaFlags);
void AudioOcarina_StartDefault(u32 ocarinaFlags);
u8 func_8019B5AC(void);
void AudioOcarina_ResetAndReadInput(void);
-void AudioOcarina_SetOcarinaDisableTimer(u8 resetUnused, u8 resetDelay);
-u32 AudioOcarina_SetInstrument(u8 ocarinaInstrumentId);
+void AudioOcarina_SetOcarinaDisableTimer(u8 unused, u8 timer);
+void AudioOcarina_SetInstrument(u8 ocarinaInstrumentId);
void AudioOcarina_SetPlaybackSong(s8 songIndexPlusOne, u8 playbackState);
void AudioOcarina_SetRecordingState(u8 recordingState);
OcarinaStaff* AudioOcarina_GetRecordingStaff(void);
@@ -3054,19 +2905,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);
@@ -3076,8 +2927,8 @@ 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 func_801A0184(void);
+void func_801A01C4(void);
void func_801A0204(s8 seqId);
void func_801A0238(s32 arg0, s32 arg1);
// void Audio_SetGanonsTowerBgmVolumeLevel(void);
@@ -3125,7 +2976,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 fadeTimer, s8 ioPort, u8 ioData);
+void Audio_PlaySequenceWithSeqPlayerIO(s8 playerIndex, 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);
@@ -3136,9 +2987,9 @@ 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_801A3E38(u8 arg0);
// void func_801A3EC0(void);
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);
@@ -3147,7 +2998,7 @@ void Audio_SetCutsceneFlag(s8 flag);
void Audio_SetSpec(u32 specId);
void func_801A4058(UNK_TYPE arg0);
// void func_801A41C8(void);
-// void func_801A41F8(void);
+void func_801A41F8(UNK_TYPE arg0);
// void func_801A429C(void);
// void func_801A42C8(void);
// void func_801A4324(void);
diff --git a/include/gfxprint.h b/include/gfxprint.h
index e643b0504..b652cc132 100644
--- a/include/gfxprint.h
+++ b/include/gfxprint.h
@@ -29,21 +29,21 @@ typedef struct GfxPrint {
/* 0x14 */ UNK_TYPE1 unk_14[0x1C]; // unused
} GfxPrint; // size = 0x30
-void GfxPrint_Setup(GfxPrint* printer);
-void GfxPrint_SetColor(GfxPrint* printer, u32 r, u32 g, u32 b, u32 a);
-void GfxPrint_SetPosPx(GfxPrint* printer, s32 x, s32 y);
-void GfxPrint_SetPos(GfxPrint* printer, s32 x, s32 y);
-void GfxPrint_SetBasePosPx(GfxPrint* printer, s32 x, s32 y);
-void GfxPrint_PrintCharImpl(GfxPrint* printer, u8 c);
-void GfxPrint_PrintChar(GfxPrint* printer, u8 c);
-void GfxPrint_PrintStringWithSize(GfxPrint* printer, const void* buffer, size_t charSize, size_t charCount);
-void GfxPrint_PrintString(GfxPrint* printer, const char* str);
+void GfxPrint_Setup(GfxPrint* this);
+void GfxPrint_SetColor(GfxPrint* this, u32 r, u32 g, u32 b, u32 a);
+void GfxPrint_SetPosPx(GfxPrint* this, s32 x, s32 y);
+void GfxPrint_SetPos(GfxPrint* this, s32 x, s32 y);
+void GfxPrint_SetBasePosPx(GfxPrint* this, s32 x, s32 y);
+void GfxPrint_PrintCharImpl(GfxPrint* this, u8 c);
+void GfxPrint_PrintChar(GfxPrint* this, u8 c);
+void GfxPrint_PrintStringWithSize(GfxPrint* this, const void* buffer, size_t charSize, size_t charCount);
+void GfxPrint_PrintString(GfxPrint* this, const char* str);
void* GfxPrint_Callback(void* arg, const char* str, size_t size);
-void GfxPrint_Init(GfxPrint* printer);
+void GfxPrint_Init(GfxPrint* this);
void GfxPrint_Destroy(GfxPrint* printer);
-void GfxPrint_Open(GfxPrint* printer, Gfx* dList);
-Gfx* GfxPrint_Close(GfxPrint* printer);
-s32 GfxPrint_VPrintf(GfxPrint* printer, const char* fmt, va_list args);
-s32 GfxPrint_Printf(GfxPrint* printer, const char* fmt, ...);
+void GfxPrint_Open(GfxPrint* this, Gfx* dList);
+Gfx* GfxPrint_Close(GfxPrint* this);
+s32 GfxPrint_VPrintf(GfxPrint* this, const char* fmt, va_list args);
+s32 GfxPrint_Printf(GfxPrint* this, const char* fmt, ...);
#endif
diff --git a/include/initvars.h b/include/initvars.h
index 11a6719e9..50668a14c 100644
--- a/include/initvars.h
+++ b/include/initvars.h
@@ -34,580 +34,12 @@ 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;
+extern TransitionInit TransitionWipe3_InitVars;
+extern TransitionInit TransitionWipe4_InitVars;
+extern TransitionInit TransitionCircle_InitVars;
+extern TransitionInit TransitionWipe5_InitVars;
#endif
diff --git a/include/macros.h b/include/macros.h
index ad963153f..913ccac4a 100644
--- a/include/macros.h
+++ b/include/macros.h
@@ -48,10 +48,13 @@
#define DAY_LENGTH (CLOCK_TIME(24, 0))
#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))
@@ -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))
@@ -149,10 +152,4 @@ extern GraphicsContext* __gfxCtx;
#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/os.h b/include/os.h
index 838d8234a..6e34bd428 100644
--- a/include/os.h
+++ b/include/os.h
@@ -47,7 +47,7 @@ typedef struct {
/* 0x04 */ u16 transferMode;
/* 0x06 */ u16 blockNum;
/* 0x08 */ s32 sectorNum;
- /* 0x0C */ u32 devAddr;
+ /* 0x0C */ uintptr_t devAddr;
/* 0x10 */ u32 bmCtlShadow;
/* 0x14 */ u32 seqCtlShadow;
/* 0x18 */ __OSBlockInfo block[2];
@@ -62,7 +62,7 @@ typedef struct OSPiHandle {
/* 0x07 */ u8 relDuration;
/* 0x08 */ u8 pulse;
/* 0x09 */ u8 domain;
- /* 0x0C */ u32 baseAddress;
+ /* 0x0C */ uintptr_t baseAddress;
/* 0x10 */ u32 speed;
/* 0x14 */ __OSTranxInfo transferInfo;
} OSPiHandle; // size = 0x74
@@ -70,7 +70,7 @@ typedef struct OSPiHandle {
typedef struct {
/* 0x0 */ u8 type;
- /* 0x4 */ u32 address;
+ /* 0x4 */ uintptr_t address;
} OSPiInfo; // size = 0x8
@@ -97,8 +97,8 @@ typedef struct {
/* 0x08 */ OSMesgQueue* cmdQueue;
/* 0x0C */ OSMesgQueue* evtQueue;
/* 0x10 */ OSMesgQueue* acsQueue;
- /* 0x14 */ s32 (*piDmaCallback)(s32, u32, void*, size_t);
- /* 0x18 */ s32 (*epiDmaCallback)(OSPiHandle*, s32, u32, void*, size_t);
+ /* 0x14 */ s32 (*piDmaCallback)(s32, uintptr_t, void*, size_t);
+ /* 0x18 */ s32 (*epiDmaCallback)(OSPiHandle*, s32, uintptr_t, void*, size_t);
} OSDevMgr; // size = 0x1C
typedef u64 OSTime;
diff --git a/include/os_internal.h b/include/os_internal.h
index b4f98bffa..2d82b41a9 100644
--- a/include/os_internal.h
+++ b/include/os_internal.h
@@ -12,8 +12,8 @@ typedef struct {
/* 0x08 */ OSMesgQueue* cmdQueue;
/* 0x0C */ OSMesgQueue* eventQueue;
/* 0x10 */ OSMesgQueue* accessQueue;
- /* 0x14 */ s32 (*piDmaCallback)(s32, u32, void*, size_t);
- /* 0x18 */ s32 (*epiDmaCallback)(OSPiHandle*, s32, u32, void*, size_t);
+ /* 0x14 */ s32 (*piDmaCallback)(s32, uintptr_t, void*, size_t);
+ /* 0x18 */ s32 (*epiDmaCallback)(OSPiHandle*, s32, uintptr_t, void*, size_t);
} OSMgrArgs; // size = 0x1C
#endif
diff --git a/include/os_malloc.h b/include/os_malloc.h
index 6b1cceab5..6f6bbf900 100644
--- a/include/os_malloc.h
+++ b/include/os_malloc.h
@@ -29,7 +29,7 @@ void* __osMalloc(Arena* arena, size_t size);
void* __osMallocR(Arena* arena, size_t size);
void __osFree(Arena* arena, void* ptr);
void* __osRealloc(Arena* arena, void* ptr, size_t newSize);
-void __osGetSizes(Arena* arena, size_t* maxFreeBlock, size_t* bytesFree, size_t* bytesAllocated);
+void __osGetSizes(Arena* arena, size_t* outMaxFree, size_t* outFree, size_t* outAlloc);
s32 __osCheckArena(Arena* arena);
#endif
diff --git a/include/regs.h b/include/regs.h
index cf15b236a..b19131748 100644
--- a/include/regs.h
+++ b/include/regs.h
@@ -43,12 +43,42 @@
#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
+#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_UPDATE_RATE SREG(30)
-#define R_PAUSE_MENU_MODE SREG(94)
-#define R_C_UP_ICON_X YREG(88)
-#define R_C_UP_ICON_Y YREG(89)
+#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_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)
@@ -65,15 +95,28 @@
#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_MOON_CRASH_TIMER_Y XREG(80)
-#define R_MOON_CRASH_TIMER_X XREG(81)
-#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_B_LABEL_DD WREG(0)
#define R_OW_MINIMAP_X WREG(29)
#define R_OW_MINIMAP_Y WREG(30)
@@ -81,6 +124,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)
@@ -94,9 +138,4 @@
#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)
-
#endif
diff --git a/include/segment_symbols.h b/include/segment_symbols.h
index 1339c879c..ccb5488d1 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,147 +78,16 @@ 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)
+#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(Effect_Ss_Dust)
DECLARE_OVERLAY_SEGMENT(Effect_Ss_Kirakira)
DECLARE_OVERLAY_SEGMENT(Effect_Ss_Bomb2)
@@ -246,446 +117,14 @@ 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)
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)
diff --git a/include/sys_matrix.h b/include/sys_matrix.h
index 536322624..a471e4dde 100644
--- a/include/sys_matrix.h
+++ b/include/sys_matrix.h
@@ -29,7 +29,7 @@ MtxF* Matrix_GetCurrent(void);
/* Basic operations */
-void Matrix_Mult(MtxF* matrix, MatrixMode mode);
+void Matrix_Mult(MtxF* mf, MatrixMode mode);
void Matrix_Translate(f32 x, f32 y, f32 z, MatrixMode mode);
void Matrix_Scale(f32 x, f32 y, f32 z, MatrixMode mode);
void Matrix_RotateXS(s16 x, MatrixMode mode);
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/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/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 7618a325d..600fa8ecf 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"
@@ -358,10 +358,7 @@ 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];
@@ -412,7 +409,6 @@ extern EffectSsOverlay gParticleOverlayTable[39];
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;
@@ -429,396 +425,11 @@ extern Gfx D_801AEFA0[];
// 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 +444,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];
@@ -1018,281 +629,13 @@ extern MinimapList 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];
@@ -1309,11 +652,11 @@ 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 u8 gPlayerFormItemRestrictions[PLAYER_FORM_MAX][114];
extern s16 gPlayerFormObjectIndices[8];
extern RomFile gObjectTable[643];
extern SceneTableEntry gSceneTable[];
@@ -1324,13 +667,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 +678,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 +694,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,9 +807,7 @@ extern KaleidoMgrOverlay* gKaleidoMgrCurOvl;
// extern UNK_TYPE4 D_801D0BB0;
// extern UNK_TYPE1 D_801D0C80;
// extern UNK_TYPE1 D_801D0CB0;
-extern const TransitionInit TransitionFade_InitVars;
-// extern UNK_TYPE1 D_801D0D00;
-extern const TransitionInit TransitionCircle_InitVars;
+extern Gfx D_801D0D00[];
extern s32 gDbgCamEnabled;
// extern UNK_TYPE1 D_801D0D54;
// extern UNK_TYPE2 D_801D0D58;
@@ -1573,16 +907,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];
@@ -2703,7 +2032,7 @@ extern f32 D_801DE860;
extern f32 D_801DE864;
extern f32 D_801DE868;
extern f32 D_801DE884;
-extern TexturePtr gCircleTex;
+extern TexturePtr gCircleTex[];
extern f32 D_801DF090;
extern f32 D_801DF094;
extern f32 D_801DF0A0;
@@ -2959,7 +2288,6 @@ extern u8 gSoundFontTable[];
extern u8 gSequenceFontTable[];
extern u8 gSequenceTable[];
extern u8 gSampleBankTable[];
-extern u64 aspMainDataStart[];
// bss
// extern UNK_TYPE1 D_801ED890;
@@ -2997,7 +2325,6 @@ 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;
@@ -3136,18 +2463,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;
@@ -3467,11 +2783,11 @@ extern ActiveSequence gActiveSeqs[];
// 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);
+extern AudioContext gAudioCtx; // at 0x80200C70
+extern AudioCustomUpdateFunction gAudioCustomUpdateFunction;
+extern AudioCustomSeqFunction gAudioCustomSeqFunction;
+extern AudioCustomReverbFunction gAudioCustomReverbFunction;
+extern AudioCustomSynthFunction gAudioCustomSynthFunction;
// post-code buffers
extern u8 gGfxSPTaskYieldBuffer[OS_YIELD_DATA_SIZE];
@@ -3480,7 +2796,7 @@ extern GfxPool gGfxPools[2];
extern u8 gAudioHeap[0x138000];
extern u8 gSystemHeap[UNK_SIZE];
-extern u8 D_80780000[0x4600];
+extern u8 gPictoPhotoI8[PICTO_PHOTO_SIZE];
extern u8 D_80784600[0x56200];
extern u16 gFramebuffer0[SCREEN_HEIGHT][SCREEN_WIDTH];
diff --git a/include/z64.h b/include/z64.h
index 02f5c6c12..5d0639ef6 100644
--- a/include/z64.h
+++ b/include/z64.h
@@ -35,6 +35,7 @@
#include "z64cutscene.h"
#include "z64dma.h"
#include "z64effect.h"
+#include "z64interface.h"
#include "z64item.h"
#include "z64light.h"
#include "z64math.h"
@@ -111,17 +112,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;
@@ -397,10 +387,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 +403,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];
@@ -439,10 +429,10 @@ typedef struct {
/* 0x238 */ s16 cursorPoint[5];
/* 0x242 */ s16 cursorXIndex[5];
/* 0x24C */ s16 cursorYIndex[5];
- /* 0x256 */ s16 unk_256;
+ /* 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 +441,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 +453,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];
- /* 0x2C8 */ u16 unk_2C8;
- /* 0x2CA */ s16 unk_2CA;
+ /* 0x2BE */ s16 ocarinaButtonsY[5];
+ /* 0x2C8 */ u16 unk_2C8; // Uses PauseMenuPage 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 +484,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;
@@ -656,9 +544,9 @@ typedef struct {
typedef struct {
/* 0x000 */ View view;
- /* 0x168 */ void* skyboxStaticSegment[4];
- /* 0x178 */ void* skyboxPaletteStaticSegment;
- /* 0x17C */ Gfx* dListBuf;
+ /* 0x168 */ void* staticSegments[4];
+ /* 0x178 */ void* paletteStaticSegment;
+ /* 0x17C */ Gfx (*dListBuf)[150];
/* 0x180 */ Gfx* roomDL;
/* 0x184 */ Vtx* roomVtx;
/* 0x188 */ DmaRequest unk188;
@@ -735,7 +623,7 @@ typedef struct {
#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 {
+typedef enum TransitionMode {
/* 0 */ TRANS_MODE_OFF,
/* 1 */ TRANS_MODE_01,
/* 2 */ TRANS_MODE_02,
@@ -756,7 +644,7 @@ typedef enum {
/* 17 */ TRANS_MODE_17
} TransitionMode;
-typedef enum {
+typedef enum TransitionType {
/* 0 */ TRANS_TYPE_00,
/* 1 */ TRANS_TYPE_01,
/* 2 */ TRANS_TYPE_02,
@@ -1058,9 +946,9 @@ 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);
+ /* 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, LinkAnimationHeader* talkAnim, s32 animMode);
/* 0x1879C */ s16 playerActorCsIds[10];
/* 0x187B0 */ MtxF viewProjectionMtxF;
/* 0x187F0 */ Vec3f unk_187F0;
@@ -1078,7 +966,7 @@ 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;
@@ -1099,8 +987,10 @@ struct PlayState {
/* 0x18B4C */ PreRender pauseBgPreRender;
/* 0x18B9C */ char unk_18B9C[0x2B8];
/* 0x18E54 */ SceneTableEntry* loadedScene;
- /* 0x18E58 */ char unk_18E58[0x10];
- /* 0x18E68 */ s32 unk_18E68;
+ /* 0x18E58 */ char unk_18E58[0x4];
+ /* 0x18E5C */ TexturePtr pictoPhotoI8;
+ /* 0x18E60 */ char unk_18E60[0x8];
+ /* 0x18E68 */ void* unk_18E68;
/* 0x18E6C */ char unk_18E6C[0x3EC];
}; // size = 0x19258
diff --git a/include/z64actor.h b/include/z64actor.h
index b11078316..370b49e75 100644
--- a/include/z64actor.h
+++ b/include/z64actor.h
@@ -19,6 +19,7 @@ struct Lights;
struct CollisionPoly;
struct EnBox;
+struct EnTorch2;
typedef void(*ActorFunc)(struct Actor* this, struct PlayState* play);
@@ -105,8 +106,8 @@ typedef enum {
} AllocType;
typedef struct {
- /* 0x00 */ u32 vromStart;
- /* 0x04 */ u32 vromEnd;
+ /* 0x00 */ uintptr_t vromStart;
+ /* 0x04 */ uintptr_t vromEnd;
/* 0x08 */ void* vramStart;
/* 0x0C */ void* vramEnd;
/* 0x10 */ void* loadedRamAddr; // original name: "allocp"
@@ -208,7 +209,7 @@ typedef enum {
* 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)
+ * 0x200 : Only set/used by player, related to interacting with walls
*/
typedef struct {
@@ -224,7 +225,7 @@ typedef struct {
} DynaPolyActor; // size = 0x15C
-typedef enum {
+typedef enum Item00Type {
/* 0x00 */ ITEM00_RUPEE_GREEN,
/* 0x01 */ ITEM00_RUPEE_BLUE,
/* 0x02 */ ITEM00_RUPEE_RED,
@@ -288,8 +289,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 +319,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)
@@ -404,7 +414,7 @@ typedef struct ActorContext {
/* 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 +432,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,
diff --git a/include/z64animation.h b/include/z64animation.h
index b697dbfdf..272a4fb84 100644
--- a/include/z64animation.h
+++ b/include/z64animation.h
@@ -9,23 +9,26 @@
struct PlayState;
struct Actor;
struct SkelAnime;
+struct PlayerAnimationFrame;
#define LINK_ANIMETION_OFFSET(addr, offset) \
- (SEGMENT_ROM_START(link_animetion) + ((u32)addr & 0xFFFFFF) + ((u32)offset))
+ (SEGMENT_ROM_START(link_animetion) + ((uintptr_t)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 {
/* -1 */ ANIMTAPER_DECEL = -1,
@@ -168,7 +171,10 @@ typedef struct AnimationContext {
typedef struct {
/* 0x0 */ AnimationHeaderCommon common;
- /* 0x4 */ u32 segment;
+ /* 0x4 */ union {
+ void* segmentVoid;
+ struct PlayerAnimationFrame* segment;
+ };
} LinkAnimationHeader; // size = 0x8
typedef struct SkelAnime {
diff --git a/include/z64audio.h b/include/z64audio.h
index 264e8d9e3..bfb66a23a 100644
--- a/include/z64audio.h
+++ b/include/z64audio.h
@@ -1,26 +1,35 @@
#ifndef Z64_AUDIO_H
#define Z64_AUDIO_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 {
+ /* 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 +67,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 +366,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 +387,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 +400,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 +415,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 +447,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 +460,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 +488,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 +510,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 +522,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 +618,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 +997,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 +1010,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 +1040,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 +1052,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 {
@@ -1255,4 +1268,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..ad5d4c4fb 100644
--- a/include/z64bgcheck.h
+++ b/include/z64bgcheck.h
@@ -108,7 +108,7 @@ 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 struct {
@@ -122,7 +122,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
diff --git a/include/z64camera.h b/include/z64camera.h
index e3b3a4483..9c101bf73 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; // sp18-1C-20--24-26-28 // CutsceneCameraPoint?
+ /* 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..836fd3555 100644
--- a/include/z64collision_check.h
+++ b/include/z64collision_check.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/z64dma.h b/include/z64dma.h
index 3b17d04d0..92c0227f3 100644
--- a/include/z64dma.h
+++ b/include/z64dma.h
@@ -4,21 +4,21 @@
#include "ultra64.h"
typedef struct {
- /* 0x00 */ u32 vromAddr; // VROM address (source)
- /* 0x04 */ void* dramAddr; // DRAM address (destination)
- /* 0x08 */ u32 size; // File Transfer size
- /* 0x0C */ char* filename; // Filename for debugging
- /* 0x10 */ s32 line; // Line for debugging
- /* 0x14 */ s32 unk14;
+ /* 0x00 */ uintptr_t vromAddr; // VROM address (source)
+ /* 0x04 */ void* dramAddr; // DRAM address (destination)
+ /* 0x08 */ u32 size; // File Transfer size
+ /* 0x0C */ char* filename; // Filename for debugging
+ /* 0x10 */ s32 line; // Line for debugging
+ /* 0x14 */ s32 unk14;
/* 0x18 */ OSMesgQueue* notifyQueue; // Message queue for the notification message
- /* 0x1C */ OSMesg notifyMsg; // Completion notification message
+ /* 0x1C */ OSMesg notifyMsg; // Completion notification message
} DmaRequest; // size = 0x20
typedef struct {
- /* 0x0 */ u32 vromStart;
- /* 0x4 */ u32 vromEnd;
- /* 0x8 */ u32 romStart;
- /* 0xC */ u32 romEnd;
+ /* 0x0 */ uintptr_t vromStart;
+ /* 0x4 */ uintptr_t vromEnd;
+ /* 0x8 */ uintptr_t romStart;
+ /* 0xC */ uintptr_t romEnd;
} DmaEntry; // size = 0x10
#endif
diff --git a/include/z64effect.h b/include/z64effect.h
index b4574592a..727bf04d2 100644
--- a/include/z64effect.h
+++ b/include/z64effect.h
@@ -248,8 +248,8 @@ typedef struct {
} EffectSsInit; // size = 0x8
typedef struct {
- /* 0x00 */ u32 vromStart;
- /* 0x04 */ u32 vromEnd;
+ /* 0x00 */ uintptr_t vromStart;
+ /* 0x04 */ uintptr_t vromEnd;
/* 0x08 */ void* vramStart;
/* 0x0C */ void* vramEnd;
/* 0x10 */ void* loadedRamAddr;
diff --git a/include/z64interface.h b/include/z64interface.h
new file mode 100644
index 000000000..385f80835
--- /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 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 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 d8a2185cc..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,12 +68,29 @@ 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;
+typedef enum {
+ /* -1 */ DUNGEON_NONE = -1,
+ /* 0 */ DUNGEON_BOSS_KEY,
+ /* 1 */ DUNGEON_COMPASS,
+ /* 2 */ DUNGEON_MAP,
+ /* 3 */ DUNGEON_STRAY_FAIRIES,
+ /* 4 */ DUNGEON_FLOOR_INDEX_4, // Top Floor
+ /* 5 */ DUNGEON_FLOOR_INDEX_3,
+ /* 6 */ DUNGEON_FLOOR_INDEX_2,
+ /* 7 */ DUNGEON_FLOOR_INDEX_1,
+ /* 8 */ DUNGEON_FLOOR_INDEX_0 // Bottom Floor
+} DungeonItem;
+
typedef enum {
/* 0x00 */ SLOT_OCARINA,
/* 0x01 */ SLOT_BOW,
@@ -117,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,
@@ -231,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,
@@ -280,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,
@@ -345,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,
@@ -374,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,
@@ -404,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,
@@ -418,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,
@@ -430,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,
@@ -550,6 +593,6 @@ typedef enum {
/* 0x74 */ GID_PICTO_BOX,
/* 0x75 */ GID_MASK_FIERCE_DEITY,
/* 0x76 */ GID_MAX
-} GetItemDrawID;
+} GetItemDrawId;
#endif
diff --git a/include/z64light.h b/include/z64light.h
index df7c1b4fa..d9404ab4c 100644
--- a/include/z64light.h
+++ b/include/z64light.h
@@ -1,5 +1,5 @@
-#ifndef _Z64LIGHT_H_
-#define _Z64LIGHT_H_
+#ifndef Z64LIGHT_H
+#define Z64LIGHT_H
#include "ultra64.h"
#include "PR/gbi.h"
@@ -12,8 +12,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 fogFar;
} LightSettings; // size = 0x16
typedef struct {
diff --git a/include/z64map.h b/include/z64map.h
index 7ee0ded56..3e977ba73 100644
--- a/include/z64map.h
+++ b/include/z64map.h
@@ -39,7 +39,7 @@ typedef struct {
/* z_map_disp */
typedef struct {
- /* 0x00 */ MinimapList2* unk0; //unk0 -> sub1 -> s16[5]
+ /* 0x00 */ MinimapList* unk0;
/* 0x04 */ s32 curRoom;
/* 0x08 */ s16 unk8;
/* 0x0A */ s16 unkA;
@@ -106,9 +106,9 @@ void func_801098A0(s32, s32*);
s32 func_80109908(s32);
s32 func_80109A98(s32);
s32 func_80109AD8(s32);
-s32 func_801096D4(s32 arg0);
-void MapData_GetMapTexDim(s32 arg0, s32 *arg1, s32 *arg2);
-void func_801097C8(s32 arg0, s32* arg1, s32* arg2);
+s32 func_801096D4(s32 mapId);
+void MapData_GetMapTexDim(s32 mapId, s32* width, s32* height);
+void func_801097C8(s32 mapId, s32* arg1, s32* arg2);
void MapData_GetMapScale(s32 mapId, s32 *scale);
void func_80109D40(s32, s32*, s32*);
void func_80109DD8(s32, s32*, s32*);
diff --git a/include/z64message.h b/include/z64message.h
index 590074339..7d4723e7b 100644
--- a/include/z64message.h
+++ b/include/z64message.h
@@ -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..e800e9138 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
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..e99b261ce 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,
@@ -24,7 +25,7 @@ typedef enum {
/* 7 */ PLAYER_BOOTS_MAX
} PlayerBoots;
-typedef enum {
+typedef enum PlayerStrength {
/* 0 */ PLAYER_STRENGTH_DEKU,
/* 1 */ PLAYER_STRENGTH_HUMAN,
/* 2 */ PLAYER_STRENGTH_ZORA,
@@ -32,7 +33,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 +42,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 +72,102 @@ 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_KOKIRI,
+ /* 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_BOMB,
+ /* 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,
+ /* 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 {
+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 +184,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,9 +206,176 @@ 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_0,
+ /* 1 */ PLAYER_ANIMTYPE_1,
+ /* 2 */ PLAYER_ANIMTYPE_2,
+ /* 3 */ PLAYER_ANIMTYPE_3,
+ /* 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
+} 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 faceInfo;
+} PlayerAnimationFrame; // size = 0x10A
+
+#define PLAYER_LIMB_BUF_SIZE (ALIGN16(sizeof(PlayerAnimationFrame)) + 0xF)
+
+typedef struct PlayerAgeProperties {
+ /* 0x00 */ f32 unk_00; // ceilingCheckHeight?
+ /* 0x04 */ f32 shadowScale;
/* 0x08 */ f32 unk_08;
/* 0x0C */ f32 unk_0C;
/* 0x10 */ f32 unk_10;
@@ -211,15 +388,15 @@ typedef struct {
/* 0x2C */ f32 unk_2C;
/* 0x30 */ f32 unk_30;
/* 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;
@@ -240,12 +417,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 +438,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_6,
+ /* 0x07 */ PLAYER_CSMODE_7,
+ /* 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 +591,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 +645,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 +707,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 +731,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,7 +739,7 @@ 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)
@@ -432,13 +751,13 @@ typedef struct struct_80122744_arg1 {
#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 +781,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 +876,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,18 +928,18 @@ 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 unk_A86; // actorCutsceneIndex?
+ /* 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;
@@ -594,11 +947,11 @@ typedef struct Player {
/* 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 +961,16 @@ 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];
+ /* 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 getItemDrawId;
/* 0xB2B */ s8 unk_B2B;
/* 0xB2C */ f32 windSpeed;
/* 0xB30 */ s16 windAngleX;
@@ -630,8 +984,8 @@ 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;
@@ -639,15 +993,15 @@ typedef struct Player {
/* 0xB60 */ u16 unk_B60; // blast mask timer?
/* 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 +1009,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 +1018,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];
/* 0xD57 */ u8 unk_D57;
/* 0xD58 */ PlayerFuncD58 unk_D58;
/* 0xD5C */ s8 invincibilityTimer; // prevents damage when nonzero (positive = visible, counts towards zero each frame)
@@ -678,7 +1031,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 468f56793..a1272941d 100644
--- a/include/z64quake.h
+++ b/include/z64quake.h
@@ -42,7 +42,7 @@ u32 Quake_SetQuakeValues(s16 quakeIndex, s16 verticalMag, s16 horizontalMag, s16
u32 Quake_SetQuakeValues2(s16 quakeIndex, s16 isShakePerpendicular, Vec3s shakePlaneOffset);
s16 Quake_Add(Camera* camera, u32 type);
s16 Quake_Calc(Camera* camera, QuakeCamCalc* camData);
-u32 Quake_Remove(s16 quakeIndex);
+u32 Quake_Remove(s16 index);
s32 Quake_NumActiveQuakes(void);
void Quake_Init(void);
diff --git a/include/z64save.h b/include/z64save.h
index e0695511b..23b220dde 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;
@@ -239,7 +262,7 @@ typedef struct Save {
/* 0x000C */ u16 time; // "zelda_time"
/* 0x000E */ u16 owlSaveLocation;
/* 0x0010 */ s32 isNight; // "asahiru_fg"
- /* 0x0014 */ s32 daySpeed; // "change_zelda_time"
+ /* 0x0014 */ s32 timeSpeedOffset; // "change_zelda_time"
/* 0x0018 */ s32 day; // "totalday"
/* 0x001C */ s32 daysElapsed; // "eventday"
/* 0x0020 */ u8 playerForm; // "player_character"
@@ -272,8 +295,8 @@ typedef struct Save {
/* 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 mapsVisited; // "area_arrival"
- /* 0x0F60 */ u32 mapsVisible; // "cloud_clear"
+ /* 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];
@@ -298,7 +321,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 +334,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 +366,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;
@@ -390,6 +413,13 @@ 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)]
@@ -431,6 +461,10 @@ typedef enum SunsSongState {
#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) { \
@@ -463,6 +497,1013 @@ typedef enum SunsSongState {
#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))
+/**
+ * gSaveContext.save.weekEventReg
+ */
+
+#define PACK_WEEKEVENTREG_FLAG(index, mask) (((index) << 8) | (mask))
+
+#define WEEKEVENTREG_00_01 PACK_WEEKEVENTREG_FLAG(0, 0x01)
+#define WEEKEVENTREG_00_02 PACK_WEEKEVENTREG_FLAG(0, 0x02)
+#define WEEKEVENTREG_00_04 PACK_WEEKEVENTREG_FLAG(0, 0x04)
+#define WEEKEVENTREG_00_08 PACK_WEEKEVENTREG_FLAG(0, 0x08)
+#define WEEKEVENTREG_00_10 PACK_WEEKEVENTREG_FLAG(0, 0x10)
+#define WEEKEVENTREG_00_20 PACK_WEEKEVENTREG_FLAG(0, 0x20)
+#define WEEKEVENTREG_00_40 PACK_WEEKEVENTREG_FLAG(0, 0x40)
+#define WEEKEVENTREG_00_80 PACK_WEEKEVENTREG_FLAG(0, 0x80)
+#define WEEKEVENTREG_01_01 PACK_WEEKEVENTREG_FLAG(1, 0x01)
+#define WEEKEVENTREG_01_02 PACK_WEEKEVENTREG_FLAG(1, 0x02)
+#define WEEKEVENTREG_01_04 PACK_WEEKEVENTREG_FLAG(1, 0x04)
+#define WEEKEVENTREG_01_08 PACK_WEEKEVENTREG_FLAG(1, 0x08)
+#define WEEKEVENTREG_01_10 PACK_WEEKEVENTREG_FLAG(1, 0x10)
+#define WEEKEVENTREG_01_20 PACK_WEEKEVENTREG_FLAG(1, 0x20)
+#define WEEKEVENTREG_01_40 PACK_WEEKEVENTREG_FLAG(1, 0x40)
+#define WEEKEVENTREG_01_80 PACK_WEEKEVENTREG_FLAG(1, 0x80)
+#define WEEKEVENTREG_02_01 PACK_WEEKEVENTREG_FLAG(2, 0x01)
+#define WEEKEVENTREG_02_02 PACK_WEEKEVENTREG_FLAG(2, 0x02)
+#define WEEKEVENTREG_02_04 PACK_WEEKEVENTREG_FLAG(2, 0x04)
+#define WEEKEVENTREG_02_08 PACK_WEEKEVENTREG_FLAG(2, 0x08)
+#define WEEKEVENTREG_02_10 PACK_WEEKEVENTREG_FLAG(2, 0x10)
+#define WEEKEVENTREG_02_20 PACK_WEEKEVENTREG_FLAG(2, 0x20)
+#define WEEKEVENTREG_02_40 PACK_WEEKEVENTREG_FLAG(2, 0x40)
+#define WEEKEVENTREG_02_80 PACK_WEEKEVENTREG_FLAG(2, 0x80)
+#define WEEKEVENTREG_03_01 PACK_WEEKEVENTREG_FLAG(3, 0x01)
+#define WEEKEVENTREG_03_02 PACK_WEEKEVENTREG_FLAG(3, 0x02)
+#define WEEKEVENTREG_03_04 PACK_WEEKEVENTREG_FLAG(3, 0x04)
+#define WEEKEVENTREG_03_08 PACK_WEEKEVENTREG_FLAG(3, 0x08)
+#define WEEKEVENTREG_03_10 PACK_WEEKEVENTREG_FLAG(3, 0x10)
+#define WEEKEVENTREG_03_20 PACK_WEEKEVENTREG_FLAG(3, 0x20)
+#define WEEKEVENTREG_03_40 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)
+#define WEEKEVENTREG_07_80 PACK_WEEKEVENTREG_FLAG(7, 0x80)
+#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)
+#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)
+#define WEEKEVENTREG_13_20 PACK_WEEKEVENTREG_FLAG(13, 0x20)
+#define WEEKEVENTREG_13_40 PACK_WEEKEVENTREG_FLAG(13, 0x40)
+#define WEEKEVENTREG_13_80 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_20_02 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)
+
+// 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_33_80 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_34_08 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_34_40 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_52_20 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_55_80 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)
+#define WEEKEVENTREG_63_01 PACK_WEEKEVENTREG_FLAG(63, 0x01)
+#define WEEKEVENTREG_63_02 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)
+#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)
+
+#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)
+#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?"
+#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)
+#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.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))
+
+/**
+ * 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
+#define EVENTINF_34 0x34
+#define EVENTINF_35 0x35
+#define EVENTINF_36 0x36
+#define EVENTINF_37 0x37
+#define EVENTINF_40 0x40
+#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)))
+
+
typedef enum {
/* 0 */ DUNGEON_INDEX_WOODFALL_TEMPLE,
/* 1 */ DUNGEON_INDEX_SNOWHEAD_TEMPLE,
@@ -481,9 +1522,9 @@ void func_80144A94(SramContext* sramCtx);
void Sram_OpenSave(struct FileSelectState* fileSelect, SramContext* sramCtx);
void func_8014546C(SramContext* sramCtx);
void func_801457CC(struct FileSelectState* fileSelect, SramContext* sramCtx);
-void func_80146580(struct FileSelectState* fileSelect, SramContext* sramCtx, s32 fileNum);
-void func_80146628(struct FileSelectState* fileSelect, SramContext* sramCtx);
-void Sram_InitSave(struct FileSelectState* fileSelect, SramContext* sramCtx);
+void func_80146580(struct FileSelectState* fileSelect2, SramContext* sramCtx, s32 fileNum);
+void func_80146628(struct FileSelectState* fileSelect2, SramContext* sramCtx);
+void Sram_InitSave(struct FileSelectState* fileSelect2, SramContext* sramCtx);
void func_80146DF8(SramContext* sramCtx);
void Sram_InitSram(struct GameState* gameState, SramContext* sramCtx);
void Sram_Alloc(struct GameState* gameState, SramContext* sramCtx);
@@ -499,10 +1540,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 8fec51ad3..b61a04609 100644
--- a/include/z64scene.h
+++ b/include/z64scene.h
@@ -67,7 +67,7 @@ typedef struct {
typedef struct {
/* 0x0 */ u8 code;
- /* 0x1 */ u8 cUpElfMsgNum;
+ /* 0x1 */ u8 naviQuestHintFileId;
/* 0x4 */ u32 subKeepIndex;
} SCmdSpecialFiles; // size = 0x8
@@ -119,7 +119,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 +174,9 @@ typedef struct {
typedef struct {
/* 0x0 */ u8 code;
- /* 0x1 */ u8 cameraMovement;
- /* 0x4 */ u32 area;
-} SCmdMiscSettings; // size = 0x8
+ /* 0x1 */ u8 sceneCsCount;
+ /* 0x4 */ void* segment;
+} SCmdCutsceneList; // size = 0x8
typedef struct {
/* 0x0 */ u8 code;
@@ -186,9 +186,8 @@ typedef struct {
typedef struct {
/* 0x0 */ u8 code;
- /* 0x1 */ u8 data1;
- /* 0x4 */ u32 data2;
-} SCmdWorldMapVisited; // size = 0x8
+ /* 0x1 */ UNK_TYPE1 pad[7];
+} SCmdRegionVisited; // size = 0x8
typedef struct {
/* 0x0 */ u8 code;
@@ -290,7 +289,7 @@ typedef struct {
typedef struct {
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;
/* 0x6 */ Vec3s pos;
@@ -446,9 +445,9 @@ typedef struct {
} BackgroundRecord; // size = 0x1C
typedef struct {
- /* 0x0 */ s16 playerXMax;
+ /* 0x0 */ s16 playerXMax;
/* 0x2 */ s16 playerZMax;
- /* 0x4 */ s16 playerXMin;
+ /* 0x4 */ s16 playerXMin;
/* 0x6 */ s16 playerZMin;
/* 0x8 */ u32 opaqueDList;
/* 0xC */ u32 translucentDList;
@@ -459,7 +458,7 @@ typedef struct {
/* 0x1 */ u8 numEntries;
/* 0x4 */ u32 dListStart;
/* 0x8 */ u32 dListEnd;
-} MeshHeader2; // size = 0xC
+} MeshHeader2; // size = 0xC
typedef struct {
/* 0x0 */ u8 count; // number of points in the path
@@ -476,15 +475,10 @@ typedef struct {
/* 0x08 */ u16 unk8;
} MinimapEntry; // size = 0xA
-typedef struct {
- /* 0x00 */ MinimapEntry* entry;
- /* 0x04 */ s32 unk4;
-} MinimapList; // size = 0x8
-
typedef struct {
/* 0x00 */ MinimapEntry* entry;
/* 0x04 */ s16 scale;
-} MinimapList2; // size = 0x8
+} MinimapList; // size = 0x8
typedef struct {
/* 0x00 */ UNK_TYPE2 unk0;
@@ -528,9 +522,9 @@ typedef union {
/* Command: 0x14 */ SCmdEndMarker endMarker;
/* Command: 0x15 */ SCmdSoundSettings soundSettings;
/* Command: 0x16 */ SCmdEchoSettings echoSettings;
- /* Command: 0x17 */ SCmdMiscSettings miscSettings;
+ /* Command: 0x17 */ SCmdCutsceneList cutsceneList;
/* Command: 0x18 */ SCmdAltHeaders altHeaders;
- /* Command: 0x19 */ SCmdWorldMapVisited worldMapVisited;
+ /* Command: 0x19 */ SCmdRegionVisited regionVisited;
/* Command: 0x1A */ SCmdTextureAnimations textureAnimations;
/* Command: 0x1B */ SCmdCutsceneActorList cutsceneActorList;
/* Command: 0x1C */ SCmdMinimapSettings minimapSettings;
@@ -538,6 +532,49 @@ typedef union {
/* Command: 0x1E */ SCmdMinimapChests minimapChests;
} SceneCmd; // size = 0x8
+// Sets cursor point options on the world map
+typedef enum {
+ /* 0x0 */ REGION_GREAT_BAY,
+ /* 0x1 */ REGION_ZORA_HALL,
+ /* 0x2 */ REGION_ROMANI_RANCH,
+ /* 0x3 */ REGION_DEKU_PALACE,
+ /* 0x4 */ REGION_WOODFALL,
+ /* 0x5 */ REGION_CLOCK_TOWN,
+ /* 0x6 */ REGION_SNOWHEAD,
+ /* 0x7 */ REGION_IKANA_GRAVEYARD,
+ /* 0x8 */ REGION_IKANA_CANYON,
+ /* 0x9 */ REGION_GORON_VILLAGE,
+ /* 0xA */ REGION_STONE_TOWER,
+ /* 0xB */ REGION_MAX
+} RegionId;
+
+// Sets warp points for owl statues
+typedef enum {
+ /* 0x0 */ OWL_WARP_GREAT_BAY_COAST,
+ /* 0x1 */ OWL_WARP_ZORA_CAPE,
+ /* 0x2 */ OWL_WARP_SNOWHEAD,
+ /* 0x3 */ OWL_WARP_MOUNTAIN_VILLAGE,
+ /* 0x4 */ OWL_WARP_CLOCK_TOWN,
+ /* 0x5 */ OWL_WARP_MILK_ROAD,
+ /* 0x6 */ OWL_WARP_WOODFALL,
+ /* 0x7 */ OWL_WARP_SOUTHERN_SWAMP,
+ /* 0x8 */ OWL_WARP_IKANA_CANYON,
+ /* 0x9 */ OWL_WARP_STONE_TOWER,
+ /* 0xA */ OWL_WARP_ENTRANCE, // Special index for warping to the entrance of a scene
+ /* 0xB */ OWL_WARP_MAX
+} OwlWarpId;
+
+// Sets cloud visibility on the world map
+typedef enum {
+ /* 0 */ TINGLE_MAP_CLOCK_TOWN,
+ /* 1 */ TINGLE_MAP_WOODFALL,
+ /* 2 */ TINGLE_MAP_SNOWHEAD,
+ /* 3 */ TINGLE_MAP_ROMANI_RANCH,
+ /* 4 */ TINGLE_MAP_GREAT_BAY,
+ /* 5 */ TINGLE_MAP_STONE_TOWER,
+ /* 6 */ TINGLE_MAP_MAX
+} TingleMapId;
+
typedef enum {
/* 0x00 */ SCENE_20SICHITAI2, // Southern Swamp (Clear)
/* 0x01 */ SCENE_UNSET_1,
@@ -788,6 +825,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,
@@ -815,7 +860,7 @@ typedef enum {
/* 0x16 */ SCENE_CMD_ID_ECHO_SETTINGS,
/* 0x17 */ SCENE_CMD_ID_CUTSCENE_LIST,
/* 0x18 */ SCENE_CMD_ID_ALTERNATE_HEADER_LIST,
- /* 0x19 */ SCENE_CMD_ID_MISC_SETTINGS,
+ /* 0x19 */ SCENE_CMD_ID_SET_REGION_VISITED,
/* 0x1A */ SCENE_CMD_ID_ANIMATED_MATERIAL_LIST,
/* 0x1B */ SCENE_CMD_ID_ACTOR_CUTSCENE_LIST,
/* 0x1C */ SCENE_CMD_ID_MINIMAP_INFO,
@@ -845,8 +890,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) \
@@ -866,13 +911,13 @@ typedef enum {
{ SCENE_CMD_ID_OBJECT_LIST, numObjects, CMD_PTR(objectList) }
#define SCENE_CMD_LIGHT_LIST(numLights, lightList) \
- { SCENE_CMD_ID_LIGHT_LIST, numLights, CMD_PTR(lightList) }
+ { SCENE_CMD_ID_LIGHT_LIST, numLights, CMD_PTR(lightList) }
#define SCENE_CMD_PATH_LIST(pathList) \
{ SCENE_CMD_ID_PATH_LIST, 0, CMD_PTR(pathList) }
#define SCENE_CMD_TRANSITION_ACTOR_LIST(numTransitionActors, actorList) \
- { SCENE_CMD_ID_TRANSI_ACTOR_LIST, numTransitionActors, CMD_PTR(actorList) }
+ { SCENE_CMD_ID_TRANSI_ACTOR_LIST, numTransitionActors, CMD_PTR(actorList) }
#define SCENE_CMD_ENV_LIGHT_SETTINGS(numLightSettings, lightSettingsList) \
{ SCENE_CMD_ID_ENV_LIGHT_SETTINGS, numLightSettings, CMD_PTR(lightSettingsList) }
@@ -904,8 +949,9 @@ typedef enum {
#define SCENE_CMD_ALTERNATE_HEADER_LIST(alternateHeaderList) \
{ SCENE_CMD_ID_ALTERNATE_HEADER_LIST, 0, CMD_PTR(alternateHeaderList) }
-#define SCENE_CMD_MISC_SETTINGS() \
- { SCENE_CMD_ID_MISC_SETTINGS, 0, CMD_W(0) }
+#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) }
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/z64subs.h b/include/z64subs.h
index 9f0b5fea3..ca90cb232 100644
--- a/include/z64subs.h
+++ b/include/z64subs.h
@@ -100,7 +100,7 @@ void SubS_TimePathing_ComputeTargetPosXZ(f32* x, f32* z, f32 progress, s32 order
s32 SubS_TimePathing_Update(Path* path, f32* progress, s32* elapsedTime, s32 waypointTime, s32 totalTime, s32* waypoint, f32 knots[], Vec3f* targetPos, s32 timeSpeed);
void SubS_TimePathing_ComputeInitialY(struct PlayState* play, Path* path, s32 waypoint, Vec3f* targetPos);
-Path* SubS_GetAdditionalPath(struct PlayState* play, u8 pathIndex, s32 max);
+Path* SubS_GetAdditionalPath(struct PlayState* play, u8 pathIndex, s32 limit);
Actor* SubS_FindNearestActor(Actor* actor, struct PlayState* play, u8 actorCategory, s16 actorId);
@@ -122,7 +122,7 @@ void SubS_GenShadowTex(Vec3f bodyPartsPos[], Vec3f* worldPos, u8* tex, f32 tween
void SubS_DrawShadowTex(Actor* actor, struct GameState* gameState, u8* tex);
s16 SubS_ComputeTrackPointRot(s16* rot, s16 rotMax, s16 target, f32 slowness, f32 stepMin, f32 stepMax);
-s32 SubS_TrackPoint(Vec3f* point, Vec3f* focusPos, Vec3s* shapeRot, Vec3s* trackTarget, Vec3s* headRot, Vec3s* torsoRot, TrackOptionsSet* options);
+s32 SubS_TrackPoint(Vec3f* target, Vec3f* focusPos, Vec3s* shapeRot, Vec3s* trackTarget, Vec3s* headRot, Vec3s* torsoRot, TrackOptionsSet* options);
s32 SubS_AngleDiffLessEqual(s16 angleA, s16 threshold, s16 angleB);
@@ -130,7 +130,7 @@ Path* SubS_GetPathByIndex(struct PlayState* play, s16 pathIndex, s16 max);
s32 SubS_CopyPointFromPath(Path* path, s32 pointIndex, Vec3f* dst);
s16 SubS_GetDistSqAndOrientPoints(Vec3f* vecA, Vec3f* vecB, f32* distSq);
s32 SubS_MoveActorToPoint(Actor* actor, Vec3f* point, s16 rotStep);
-s16 SubS_GetDistSqAndOrientPath(Path* path, s32 pointIdx, Vec3f* pos, f32* distSq);
+s16 SubS_GetDistSqAndOrientPath(Path* path, s32 pointIndex, Vec3f* pos, f32* distSq);
s8 SubS_IsObjectLoaded(s8 index, struct PlayState* play);
s8 SubS_GetObjectIndex(s16 id, struct PlayState* play);
diff --git a/include/z64transition.h b/include/z64transition.h
index 9630b4a3f..45178ba8e 100644
--- a/include/z64transition.h
+++ b/include/z64transition.h
@@ -3,6 +3,8 @@
#include "ultra64.h"
+#define TC_SET_PARAMS (1 << 7)
+
typedef struct {
/* 0x00 */ void* (*init)(void* transition);
/* 0x04 */ void (*destroy)(void* transition);
@@ -15,16 +17,63 @@ typedef struct {
/* 0x20 */ s32 (*isDone)(void* transition);
} TransitionInit; // size = 0x24
+typedef struct {
+ union {
+ struct {
+ /* 0x00 */ u32 count : 8;
+ /* 0x00 */ uintptr_t addr : 24;
+ };
+ /* 0x00 */ u32 word;
+ } loadInfo;
+ /* 0x04 */ void* vramStart;
+ /* 0x08 */ void* vramEnd;
+ /* 0x0C */ uintptr_t vromStart;
+ /* 0x10 */ uintptr_t vromEnd;
+ /* 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
-extern const TransitionInit TransitionFade_InitVars;
+typedef enum {
+ /* 0 */ TRANSITION_CIRCLE_IN,
+ /* 1 */ TRANSITION_CIRCLE_OUT,
+} TransitionCircleDirection;
+
+#define FBDEMO_CIRCLE_GET_MASK_TYPE(type) (type & 1)
typedef struct {
- /* 0x00 */ char unk_0[0x20];
+ /* 0x00 */ Color_RGBA8_u32 color;
+ /* 0x04 */ f32 referenceRadius; // Reference for where to transition to
+ /* 0x08 */ f32 stepValue; // How fast the Transition is
+ /* 0x0C */ f32 startingRadius; // Radius value where transition will begin
+ /* 0x10 */ f32 targetRadius; // Final radius of transition circle
+ /* 0x14 */ u8 direction; // Direction the circle is transitioning ( In / Out )
+ /* 0x15 */ u8 maskType; // Positive / Negative mask type. Value of 0 will create a black circle
+ /* 0x16 */ u8 isDone; // Signals when Transition is done updating
+ /* 0x18 */ TexturePtr texture;
+ /* 0x1C */ u8 masks;
+ /* 0x1D */ u8 maskt;
+ /* 0x1E */ s8 unk_1E; // Set to 4 and never used
+ /* 0x1F */ s8 unk_1F; // Set to 0 and never used
} TransitionCircle; // size = 0x20
-extern const TransitionInit TransitionCircle_InitVars;
-
#endif
diff --git a/include/z_en_hy_code.h b/include/z_en_hy_code.h
index d272522c9..0620d35a0 100644
--- a/include/z_en_hy_code.h
+++ b/include/z_en_hy_code.h
@@ -79,7 +79,7 @@ s32 EnHy_ChangeAnim(SkelAnime* skelAnime, s16 animIndex);
EnDoor* EnHy_FindNearestDoor(Actor* actor, PlayState* play);
void EnHy_ChangeObjectAndAnim(EnHy* enHy, PlayState* play, s16 animIndex);
s32 EnHy_UpdateSkelAnime(EnHy* enHy, PlayState* play);
-void EnHy_Blink(EnHy* enHy, s32 arg1);
+void EnHy_Blink(EnHy* enHy, s32 eyeTexMaxIndex);
s32 EnHy_Init(EnHy* enHy, PlayState* play, FlexSkeletonHeader* skeletonHeaderSeg, s16 animIndex);
void func_800F0BB4(EnHy* enHy, PlayState* play, EnDoor* door, s16 arg3, s16 arg4);
s32 func_800F0CE4(EnHy* enHy, PlayState* play, ActorFunc draw, s16 arg3, s16 arg4, f32 arg5);
diff --git a/include/z_title_setup.h b/include/z_title_setup.h
index 685b87c79..41e3f52f8 100644
--- a/include/z_title_setup.h
+++ b/include/z_title_setup.h
@@ -4,7 +4,7 @@
#include "global.h"
void Setup_Destroy(GameState* gameState);
-void Setup_Init(GameState* gameState);
+void Setup_Init(GameState* thisx);
typedef struct {
/* 0x00 */ GameState state;
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 100e615cf..ba217e15b 100644
--- a/spec
+++ b/spec
@@ -293,14 +293,16 @@ beginseg
name "icon_item_field_static"
compress
romalign 0x1000
- include "build/baserom/icon_item_field_static.o"
+ include "build/assets/interface/icon_item_field_static/icon_item_field_static.o"
+ number 12
endseg
beginseg
name "icon_item_dungeon_static"
compress
romalign 0x1000
- include "build/baserom/icon_item_dungeon_static.o"
+ include "build/assets/interface/icon_item_dungeon_static/icon_item_dungeon_static.o"
+ number 12
endseg
beginseg
@@ -315,7 +317,8 @@ beginseg
name "icon_item_jpn_static"
compress
romalign 0x1000
- include "build/baserom/icon_item_jpn_static.o"
+ include "build/assets/interface/icon_item_jpn_static/icon_item_jpn_static.o"
+ number 13
endseg
beginseg
@@ -421,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"
@@ -448,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"
@@ -503,8 +503,6 @@ 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"
@@ -529,7 +527,8 @@ 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"
@@ -549,12 +548,10 @@ beginseg
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/data/code/code_801D0BB0.data.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/data/code/z_fbdemo_circle.data.o"
include "build/src/code/z_overlay.o"
include "build/src/code/z_play.o"
include "build/data/code/z_play.data.o"
@@ -583,6 +580,7 @@ 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/data/code/sys_cfb.bss.o"
include "build/src/code/sys_cmpdma.o"
include "build/data/code/sys_cmpdma.bss.o"
@@ -611,8 +609,7 @@ beginseg
include "build/src/code/audio/audio_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_thread.o"
include "build/src/code/audio/audio_dcache.o"
include "build/src/code/audio/aisetnextbuf.o"
include "build/src/code/audio/audio_playback.o"
@@ -1197,11 +1194,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
@@ -1285,8 +1278,7 @@ beginseg
name "ovl_Bg_Umajump"
compress
include "build/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.o"
- include "build/data/ovl_Bg_Umajump/ovl_Bg_Umajump.data.o"
- include "build/data/ovl_Bg_Umajump/ovl_Bg_Umajump.reloc.o"
+ include "build/src/overlays/actors/ovl_Bg_Umajump/ovl_Bg_Umajump_reloc.o"
endseg
beginseg
@@ -1938,8 +1930,7 @@ beginseg
name "ovl_Oceff_Storm"
compress
include "build/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.o"
- include "build/data/ovl_Oceff_Storm/ovl_Oceff_Storm.data.o"
- include "build/data/ovl_Oceff_Storm/ovl_Oceff_Storm.reloc.o"
+ include "build/src/overlays/actors/ovl_Oceff_Storm/ovl_Oceff_Storm_reloc.o"
endseg
beginseg
@@ -2277,8 +2268,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
@@ -2682,9 +2672,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
@@ -2960,8 +2948,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
@@ -3023,8 +3010,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
@@ -3108,8 +3094,7 @@ beginseg
name "ovl_Dm_Char08"
compress
include "build/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.o"
- include "build/data/ovl_Dm_Char08/ovl_Dm_Char08.data.o"
- include "build/data/ovl_Dm_Char08/ovl_Dm_Char08.reloc.o"
+ include "build/src/overlays/actors/ovl_Dm_Char08/ovl_Dm_Char08_reloc.o"
endseg
beginseg
@@ -3138,8 +3123,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
@@ -3248,8 +3232,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
@@ -3398,8 +3381,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
@@ -3464,8 +3446,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
@@ -3947,8 +3928,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
@@ -4039,8 +4019,7 @@ 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
@@ -4140,8 +4119,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
@@ -4176,11 +4154,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
@@ -4236,8 +4210,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
@@ -4314,8 +4287,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
@@ -4365,8 +4337,7 @@ beginseg
name "ovl_En_Stone_heishi"
compress
include "build/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.o"
- include "build/data/ovl_En_Stone_heishi/ovl_En_Stone_heishi.data.o"
- include "build/data/ovl_En_Stone_heishi/ovl_En_Stone_heishi.reloc.o"
+ include "build/src/overlays/actors/ovl_En_Stone_heishi/ovl_En_Stone_heishi_reloc.o"
endseg
beginseg
@@ -4443,11 +4414,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
@@ -4468,11 +4435,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
@@ -4719,8 +4682,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
@@ -4769,8 +4731,7 @@ beginseg
name "ovl_En_Bombal"
compress
include "build/src/overlays/actors/ovl_En_Bombal/z_en_bombal.o"
- include "build/data/ovl_En_Bombal/ovl_En_Bombal.data.o"
- include "build/data/ovl_En_Bombal/ovl_En_Bombal.reloc.o"
+ include "build/src/overlays/actors/ovl_En_Bombal/ovl_En_Bombal_reloc.o"
endseg
beginseg
diff --git a/src/boot_O2_g3/irqmgr.c b/src/boot_O2_g3/irqmgr.c
index f605dc327..b100f209d 100644
--- a/src/boot_O2_g3/irqmgr.c
+++ b/src/boot_O2_g3/irqmgr.c
@@ -5,22 +5,22 @@ volatile OSTime sIrqMgrResetTime = 0;
volatile OSTime sIrqMgrRetraceTime = 0;
s32 sIrqMgrRetraceCount = 0;
-void IrqMgr_AddClient(IrqMgr* irqmgr, IrqMgrClient* param_2, OSMesgQueue* param_3) {
+void IrqMgr_AddClient(IrqMgr* irqmgr, IrqMgrClient* client, OSMesgQueue* msgQueue) {
u32 saveMask;
saveMask = osSetIntMask(1);
- param_2->queue = param_3;
- param_2->next = irqmgr->callbacks;
- irqmgr->callbacks = param_2;
+ client->queue = msgQueue;
+ client->next = irqmgr->callbacks;
+ irqmgr->callbacks = client;
osSetIntMask(saveMask);
if (irqmgr->prenmiStage > 0) {
- osSendMesg(param_2->queue, &irqmgr->prenmiMsg.type, OS_MESG_NOBLOCK);
+ osSendMesg(client->queue, &irqmgr->prenmiMsg.type, OS_MESG_NOBLOCK);
}
if (irqmgr->prenmiStage > 1) {
- osSendMesg(param_2->queue, &irqmgr->nmiMsg.type, OS_MESG_NOBLOCK);
+ osSendMesg(client->queue, &irqmgr->nmiMsg.type, OS_MESG_NOBLOCK);
}
}
diff --git a/src/boot_O2_g3/yaz0.c b/src/boot_O2_g3/yaz0.c
index 5f8e5a0ed..63260e885 100644
--- a/src/boot_O2_g3/yaz0.c
+++ b/src/boot_O2_g3/yaz0.c
@@ -3,7 +3,7 @@
u8 sYaz0DataBuffer[0x400];
u8* sYaz0CurDataEnd;
-u32 sYaz0CurRomStart;
+uintptr_t sYaz0CurRomStart;
u32 sYaz0CurSize;
u8* sYaz0MaxPtr;
u8* D_8009BE20;
@@ -123,7 +123,7 @@ s32 Yaz0_DecompressImpl(u8* src, u8* dst) {
return 0;
}
-void Yaz0_Decompress(u32 romStart, void* dst, size_t size) {
+void Yaz0_Decompress(uintptr_t romStart, void* dst, size_t size) {
s32 status;
u32 pad;
char sp80[0x50];
diff --git a/src/boot_O2_g3/z_std_dma.c b/src/boot_O2_g3/z_std_dma.c
index 10d84dcb0..f4003de8f 100644
--- a/src/boot_O2_g3/z_std_dma.c
+++ b/src/boot_O2_g3/z_std_dma.c
@@ -1,4 +1,3 @@
-#include "prevent_bss_reordering.h"
#include "global.h"
u32 sDmaMgrDmaBuffSize = 0x2000;
@@ -60,7 +59,7 @@ s32 DmaMgr_DmaHandler(OSPiHandle* pihandle, OSIoMesg* mb, s32 direction) {
return osEPiStartDma(pihandle, mb, direction);
}
-DmaEntry* DmaMgr_FindDmaEntry(u32 vrom) {
+DmaEntry* DmaMgr_FindDmaEntry(uintptr_t vrom) {
DmaEntry* curr;
for (curr = dmadata; curr->vromEnd != 0; curr++) {
@@ -77,7 +76,7 @@ DmaEntry* DmaMgr_FindDmaEntry(u32 vrom) {
return NULL;
}
-u32 DmaMgr_TranslateVromToRom(u32 vrom) {
+u32 DmaMgr_TranslateVromToRom(uintptr_t vrom) {
DmaEntry* entry = DmaMgr_FindDmaEntry(vrom);
if (entry != NULL) {
@@ -95,7 +94,7 @@ u32 DmaMgr_TranslateVromToRom(u32 vrom) {
return -1;
}
-s32 DmaMgr_FindDmaIndex(u32 vrom) {
+s32 DmaMgr_FindDmaIndex(uintptr_t vrom) {
DmaEntry* entry = DmaMgr_FindDmaEntry(vrom);
if (entry != NULL) {
diff --git a/src/code/PreRender.c b/src/code/PreRender.c
index 46fd8ee6b..599f4c8d3 100644
--- a/src/code/PreRender.c
+++ b/src/code/PreRender.c
@@ -229,14 +229,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);
diff --git a/src/code/audio/audio_effects.c b/src/code/audio/audio_effects.c
index bc27a6e22..0dcdcda88 100644
--- a/src/code/audio/audio_effects.c
+++ b/src/code/audio/audio_effects.c
@@ -63,7 +63,7 @@ void AudioEffects_SequencePlayerProcessSound(SequencePlayer* seqPlayer) {
}
seqPlayer->fadeTimer--;
- if ((seqPlayer->fadeTimer == 0) && (seqPlayer->state == SEQPLAYER_STATE_2)) {
+ if ((seqPlayer->fadeTimer == 0) && (seqPlayer->state == SEQPLAYER_STATE_FADE_OUT)) {
AudioSeq_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/code/audio/audio_heap.c
index 8412220a3..d767f7de3 100644
--- a/src/code/audio/audio_heap.c
+++ b/src/code/audio/audio_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);
+ AudioSeq_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) {
+ AudioSeq_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++) {
+ AudioSeq_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++) {
+ for (i = 0; i < gAudioCtx.audioBufferParameters.numSequencePlayers; i++) {
AudioSeq_InitSequencePlayerChannels(i);
- AudioSeq_ResetSequencePlayer(&gAudioContext.seqPlayers[i]);
+ AudioSeq_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_init_params.c b/src/code/audio/audio_init_params.c
index 59c6658ac..6bba865e9 100644
--- a/src/code/audio/audio_init_params.c
+++ b/src/code/audio/audio_init_params.c
@@ -14,7 +14,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/audio_load.c b/src/code/audio/audio_load.c
index ccdc7488d..28c27d2cc 100644
--- a/src/code/audio/audio_load.c
+++ b/src/code/audio/audio_load.c
@@ -37,7 +37,7 @@ void* AudioLoad_SyncLoad(s32 tableType, u32 id, s32* didAllocate);
u32 AudioLoad_GetRealTableIndex(s32 tableType, u32 id);
void* AudioLoad_SearchCaches(s32 tableType, s32 id);
AudioTable* AudioLoad_GetLoadTable(s32 tableType);
-void AudioLoad_SyncDma(uintptr_t devAddr, u8* addr, size_t size, s32 medium);
+void AudioLoad_SyncDma(uintptr_t devAddr, u8* ramAddr, size_t size, s32 medium);
void AudioLoad_SyncDmaUnkMedium(uintptr_t devAddr, u8* addr, size_t size, s32 unkMediumParam);
s32 AudioLoad_Dma(OSIoMesg* mesg, u32 priority, s32 direction, uintptr_t devAddr, void* ramAddr, size_t size,
OSMesgQueue* reqQueue, s32 medium, const char* dmaFuncType);
@@ -92,38 +92,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 +137,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 +164,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 +182,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 +214,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 +229,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 +309,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 +321,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 +332,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 +383,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 +405,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 +431,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 +487,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 +513,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 +550,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,23 +563,23 @@ 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;
}
@@ -593,11 +587,11 @@ s32 AudioLoad_SyncInitSeqPlayerInternal(s32 playerIndex, s32 seqId, s32 arg2) {
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--;
}
@@ -630,7 +624,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 +645,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 +678,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 +774,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 +841,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 +871,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 +979,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 +1015,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 +1071,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 +1140,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 +1193,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 +1207,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 +1347,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 +1376,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 +1436,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 +1495,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 +1523,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 +1544,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 +1554,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 +1595,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 +1647,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 +1667,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 +1791,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 +1817,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 +1877,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 +1889,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 +1921,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 +1950,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 +1964,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 +1995,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 +2029,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 +2050,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 +2087,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 +2136,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 +2147,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 +2176,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/code/audio/audio_playback.c
index a7cc9a588..9f3c6f8ed 100644
--- a/src/code/audio/audio_playback.c
+++ b/src/code/audio/audio_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;
@@ -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;
+ AudioSeq_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;
}
@@ -729,22 +729,22 @@ 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;
}
@@ -862,7 +862,7 @@ 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;
}
@@ -958,9 +958,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 +968,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 +988,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 +1006,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/code/audio/audio_seqplayer.c
index bc5115f8f..a8c54420a 100644
--- a/src/code/audio/audio_seqplayer.c
+++ b/src/code/audio/audio_seqplayer.c
@@ -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)
@@ -269,14 +269,14 @@ s32 AudioSeq_HandleScriptFlowControl(SequencePlayer* seqPlayer, SeqScriptState*
void AudioSeq_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;
@@ -330,7 +330,7 @@ s32 AudioSeq_SeqChannelSetLayer(SequenceChannel* channel, s32 layerIndex) {
s32 pad;
if (channel->layers[layerIndex] == NULL) {
- layer = AudioSeq_AudioListPopBack(&gAudioContext.layerFreeList);
+ layer = AudioSeq_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;
@@ -384,7 +384,7 @@ s32 AudioSeq_SeqChannelSetLayer(SequenceChannel* channel, s32 layerIndex) {
void AudioSeq_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);
@@ -398,7 +398,7 @@ void AudioSeq_SeqLayerFree(SequenceChannel* channel, s32 layerIndex) {
SequenceLayer* layer = channel->layers[layerIndex];
if (layer != NULL) {
- AudioSeq_AudioListPushBack(&gAudioContext.layerFreeList, &layer->listItem);
+ AudioSeq_AudioListPushBack(&gAudioCtx.layerFreeList, &layer->listItem);
AudioSeq_SeqLayerDisable(layer);
channel->layers[layerIndex] = NULL;
}
@@ -484,10 +484,10 @@ 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;
}
}
@@ -520,15 +520,15 @@ void* AudioSeq_AudioListPopBack(AudioListItem* list) {
void AudioSeq_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;
+ AudioSeq_AudioListPushBack(&gAudioCtx.layerFreeList, &gAudioCtx.sequenceLayers[i].listItem);
}
}
@@ -562,9 +562,9 @@ 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;
}
@@ -590,7 +590,7 @@ void AudioSeq_SeqLayerProcessScript(SequenceLayer* layer) {
AudioSeq_SeqLayerProcessScriptStep5(layer, cmd);
}
- if (layer->stopSomething == true) {
+ if (layer->muted == true) {
if ((layer->note != NULL) || layer->continuousNotes) {
AudioPlayback_SeqLayerNoteDecay(layer);
}
@@ -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;
@@ -1036,12 +1036,12 @@ s32 AudioSeq_SeqLayerProcessScriptStep3(SequenceLayer* layer, s32 cmd) {
if (cmd == 0xC0) { // layer: delay
layer->delay = AudioSeq_ScriptReadCompressedU16(state);
- layer->stopSomething = true;
+ layer->muted = true;
layer->bit1 = false;
return PROCESS_SCRIPT_END;
}
- layer->stopSomething = false;
+ layer->muted = false;
if (channel->largeNotes == true) {
switch (cmd & 0xC0) {
@@ -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,14 +1124,14 @@ 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;
}
@@ -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)) {
@@ -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)) {
@@ -1559,9 +1559,9 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
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;
@@ -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;
@@ -1766,7 +1766,7 @@ 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
@@ -1792,26 +1792,26 @@ 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
@@ -1821,12 +1821,12 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
case 0x30: // channel: io write value 2
cmd = AudioSeq_ScriptReadU8(scriptState);
- seqPlayer->channels[lowBits]->soundScriptIO[cmd] = scriptState->value;
+ 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];
+ scriptState->value = seqPlayer->channels[lowBits]->seqScriptIO[cmd];
break;
}
}
@@ -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) {
@@ -1943,8 +1943,8 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
case 0xDD: // seqPlayer: set tempo
seqPlayer->tempo = AudioSeq_ScriptReadU8(seqScript) * TATUMS_PER_BEAT;
- if (seqPlayer->tempo > gAudioContext.tempoInternalToExternal) {
- seqPlayer->tempo = gAudioContext.tempoInternalToExternal;
+ if (seqPlayer->tempo > gAudioCtx.maxTempo) {
+ seqPlayer->tempo = gAudioCtx.maxTempo;
}
if ((s16)seqPlayer->tempo <= 0) {
@@ -1953,7 +1953,7 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
break;
case 0xDC: // seqPlayer: add tempo
- seqPlayer->unk_0C = (s8)AudioSeq_ScriptReadU8(seqScript) * TATUMS_PER_BEAT;
+ seqPlayer->tempoChange = (s8)AudioSeq_ScriptReadU8(seqScript) * TATUMS_PER_BEAT;
break;
case 0xDA: // seqPlayer: change volume
@@ -1961,14 +1961,14 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
temp = AudioSeq_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;
@@ -1979,13 +1979,13 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
case 0xDB: // seqPlayer: set volume
value = AudioSeq_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,7 +1993,7 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
}
break;
- case SEQPLAYER_STATE_2:
+ case SEQPLAYER_STATE_FADE_OUT:
break;
}
break;
@@ -2041,9 +2041,9 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
case 0xCE: // seqPlayer: random value
cmd = AudioSeq_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;
@@ -2104,7 +2104,7 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
cmd = AudioSeq_ScriptReadU8(seqScript);
if (cmd == 0xFF) {
cmd = seqPlayer->playerIndex;
- if (seqPlayer->state == SEQPLAYER_STATE_2) {
+ if (seqPlayer->state == SEQPLAYER_STATE_FADE_OUT) {
break;
}
}
@@ -2123,7 +2123,7 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
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,17 +2141,17 @@ 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;
@@ -2173,14 +2173,14 @@ void AudioSeq_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
cmd = AudioSeq_ScriptReadU8(seqScript);
temp = AudioSeq_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);
value = cmd;
temp = AudioSeq_ScriptReadU8(seqScript);
- AudioLoad_ScriptLoad(value, temp, &seqPlayer->soundScriptIO[cmdLowBits]);
+ AudioLoad_ScriptLoad(value, temp, &seqPlayer->seqScriptIO[cmdLowBits]);
break;
}
}
@@ -2198,11 +2198,10 @@ void AudioSeq_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);
AudioEffects_SequencePlayerProcessSound(seqPlayer);
@@ -2221,17 +2220,17 @@ void AudioSeq_SkipForwardSequence(SequencePlayer* seqPlayer) {
}
void AudioSeq_ResetSequencePlayer(SequencePlayer* seqPlayer) {
- s32 i;
+ s32 channelIndex;
AudioSeq_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,32 +2242,32 @@ 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++) {
+ AudioSeq_InitSequenceChannel(seqPlayer->channels[channelIndex]);
}
}
-void AudioSeq_InitSequencePlayerChannels(s32 playerIndex) {
+void AudioSeq_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]);
+ AudioSeq_InitSequenceChannel(seqPlayer->channels[channelIndex]);
}
}
@@ -2277,7 +2276,7 @@ void AudioSeq_InitSequencePlayer(SequencePlayer* seqPlayer) {
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;
@@ -2303,12 +2302,12 @@ void AudioSeq_InitSequencePlayers(void) {
AudioSeq_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++) {
+ AudioSeq_InitSequencePlayer(&gAudioCtx.seqPlayers[i]);
}
}
diff --git a/src/code/audio/audio_synthesis.c b/src/code/audio/audio_synthesis.c
index 17b3ff4be..057668f37 100644
--- a/src/code/audio/audio_synthesis.c
+++ b/src/code/audio/audio_synthesis.c
@@ -21,14 +21,14 @@ typedef enum {
/* 2 */ HAAS_EFFECT_DELAY_RIGHT // Delay right channel so that left channel is heard first
} HaasEffectDelaySide;
-Acmd* AudioSynth_SaveResampledReverbSamplesImpl(Acmd* cmd, u16 dmem, u16 arg2, uintptr_t arg3);
+Acmd* AudioSynth_SaveResampledReverbSamplesImpl(Acmd* cmd, u16 dmem, u16 size, uintptr_t startAddr);
Acmd* AudioSynth_LoadReverbSamplesImpl(Acmd* cmd, u16 dmem, u16 startPos, s32 size, SynthesisReverb* reverb);
Acmd* AudioSynth_SaveReverbSamplesImpl(Acmd* cmd, u16 dmem, u16 startPos, s32 size, SynthesisReverb* reverb);
Acmd* AudioSynth_ProcessSamples(s16* aiBuf, s32 numSamplesPerUpdate, Acmd* cmd, s32 updateIndex);
Acmd* AudioSynth_ProcessSample(s32 noteIndex, NoteSampleState* sampleState, NoteSynthesisState* synthState, s16* aiBuf,
s32 numSamplesPerUpdate, Acmd* cmd, s32 updateIndex);
-Acmd* AudioSynth_ApplySurroundEffect(Acmd* cmd, NoteSampleState* sampleState, NoteSynthesisState* synthState, s32 size,
- s32 dmem, s32 flags);
+Acmd* AudioSynth_ApplySurroundEffect(Acmd* cmd, NoteSampleState* sampleState, NoteSynthesisState* synthState,
+ s32 numSamplesPerUpdate, s32 haasDmem, s32 flags);
Acmd* AudioSynth_FinalResample(Acmd* cmd, NoteSynthesisState* synthState, s32 size, u16 pitch, u16 inpDmem,
s32 resampleFlags);
Acmd* AudioSynth_ProcessEnvelope(Acmd* cmd, NoteSampleState* sampleState, NoteSynthesisState* synthState,
@@ -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);
+ 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/code/audio/audio_thread.c b/src/code/audio/audio_thread.c
new file mode 100644
index 000000000..2b06281cc
--- /dev/null
+++ b/src/code/audio/audio_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);
+ AudioSeq_SkipForwardSequence(&gAudioCtx.seqPlayers[cmd->arg0]);
+ break;
+
+ case AUDIOCMD_OP_GLOBAL_DISABLE_SEQPLAYER:
+ if (gAudioCtx.seqPlayers[cmd->arg0].enabled) {
+ if (cmd->asInt == 0) {
+ AudioSeq_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) {
+ AudioSeq_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/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_8019AF00.c b/src/code/audio/code_8019AF00.c
index 98be41397..801e2b076 100644
--- a/src/code/audio/code_8019AF00.c
+++ b/src/code/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 fadeTimer, s8 arg3, u8 arg4);
+void Audio_PlaySequenceWithSeqPlayerIO(s8 playerIndex, 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,7 +2732,7 @@ 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));
@@ -2862,7 +2861,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 +2891,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 {
@@ -3311,7 +3309,7 @@ s32 AudioOcarina_MemoryGameNextNote(void) {
#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();
@@ -3399,9 +3397,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;
}
}
@@ -3753,9 +3751,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 +3813,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 +3848,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 +4049,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;
@@ -4307,16 +4305,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)
@@ -4356,27 +4354,23 @@ s32 Audio_SetGanonsTowerBgmVolume(u8 targetVolume) {
(u8)(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);
}
}
}
@@ -4447,9 +4441,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++;
@@ -4500,7 +4492,7 @@ void func_801A09D4(Vec3f* pos, f32 xzDistToPlayer) {
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);
+ AUDIOCMD_CHANNEL_SET_PAN(SEQ_PLAYER_BGM_MAIN, channelIndex, pan);
}
}
}
@@ -4556,7 +4548,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
@@ -4723,7 +4715,7 @@ void Audio_UpdateSceneSequenceResumePoint(void) {
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;
@@ -5091,7 +5083,7 @@ void Audio_StartAmbience(u16 initChannelMask, u16 initMuteChannelMask) {
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);
+ AUDIOCMD_GLOBAL_STOP_AUDIOCMDS();
}
if (Audio_GetActiveSequence(SEQ_PLAYER_BGM_SUB) == (NA_BGM_ENEMY | 0x800)) {
@@ -5139,13 +5131,13 @@ void Audio_PlayAmbience(u8 ambienceId) {
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;
}
@@ -5166,12 +5158,11 @@ void AudioSfx_Init(u16 fadeTimer) {
Audio_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")
diff --git a/src/code/audio/code_801A5BD0.c b/src/code/audio/code_801A5BD0.c
index d76970829..76597f5f3 100644
--- a/src/code/audio/code_801A5BD0.c
+++ b/src/code/audio/code_801A5BD0.c
@@ -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/audioMgr.c b/src/code/audioMgr.c
index ce21bda37..eca7ddd83 100644
--- a/src/code/audioMgr.c
+++ b/src/code/audioMgr.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) {
diff --git a/src/code/code_8012EC80.c b/src/code/code_8012EC80.c
index 278ef0830..fb6f0743d 100644
--- a/src/code/code_8012EC80.c
+++ b/src/code/code_8012EC80.c
@@ -96,7 +96,7 @@ u32 gGsFlagsShift[] = {
};
// TODO: use symbols for these icon textures once textures are properly in C
-void* gItemIcons[] = {
+TexturePtr gItemIcons[] = {
0x08000000, // ITEM_OCARINA
0x08001000, // ITEM_BOW
0x08002000, // ITEM_ARROW_FIRE
@@ -249,7 +249,7 @@ u8 gItemSlots[] = {
SLOT_LENS, // ITEM_LENS
SLOT_HOOKSHOT, // ITEM_HOOKSHOT
SLOT_SWORD_GREAT_FAIRY, // ITEM_SWORD_GREAT_FAIRY
- SLOT_BOTTLE_1, //
+ SLOT_BOTTLE_1, // ITEM_LONGSHOT
SLOT_BOTTLE_1, // ITEM_BOTTLE
SLOT_BOTTLE_1, // ITEM_POTION_RED
SLOT_BOTTLE_1, // ITEM_POTION_GREEN
@@ -365,8 +365,8 @@ s16 gItemPrices[] = {
};
// Used to map scene indexes to their region in Termina
-u16 gSceneIdsPerRegion[11][27] = {
- // Great Bay
+u16 gSceneIdsPerRegion[REGION_MAX][27] = {
+ // REGION_GREAT_BAY
{
SCENE_30GYOSON,
SCENE_LABO,
@@ -378,15 +378,15 @@ u16 gSceneIdsPerRegion[11][27] = {
SCENE_PIRATE,
SCENE_35TAKI,
SCENE_KINDAN2,
- -1,
+ 0xFFFF,
},
- // Zora Hall
+ // REGION_ZORA_HALL
{
SCENE_33ZORACITY,
SCENE_BANDROOM,
- -1,
+ 0xFFFF,
},
- // Romani Ranch
+ // REGION_ROMANI_RANCH
{
SCENE_F01,
SCENE_ROMANYMAE,
@@ -394,17 +394,17 @@ u16 gSceneIdsPerRegion[11][27] = {
SCENE_F01C,
SCENE_F01_B,
SCENE_KOEPONARACE,
- -1,
+ 0xFFFF,
},
- // Deku Palace
+ // REGION_DEKU_PALACE
{
SCENE_22DEKUCITY,
SCENE_DEKU_KING,
SCENE_26SARUNOMORI,
SCENE_DANPEI,
- -1,
+ 0xFFFF,
},
- // Southern Swamp
+ // REGION_WOODFALL
{
SCENE_20SICHITAI,
SCENE_20SICHITAI2,
@@ -412,21 +412,18 @@ u16 gSceneIdsPerRegion[11][27] = {
SCENE_WITCH_SHOP,
SCENE_21MITURINMAE,
SCENE_KINSTA1,
- -1,
+ 0xFFFF,
},
- // Clock Town
+ // REGION_CLOCK_TOWN
{
- SCENE_00KEIKOKU, SCENE_TENMON_DAI, SCENE_13HUBUKINOMITI,
- SCENE_24KEMONOMITI, SCENE_SYATEKI_MORI, SCENE_IKANAMAE,
- SCENE_TOWN, SCENE_SYATEKI_MIZU, SCENE_BOWLING,
- SCENE_TAKARAYA, SCENE_YADOYA, SCENE_SONCHONOIE,
- SCENE_MILK_BAR, SCENE_ICHIBA, SCENE_BOMYA,
- SCENE_AYASHIISHOP, SCENE_8ITEMSHOP, SCENE_DOUJOU,
- SCENE_POSTHOUSE, SCENE_TAKARAKUJI, SCENE_BACKTOWN,
- SCENE_CLOCKTOWER, SCENE_INSIDETOWER, SCENE_OKUJOU,
- SCENE_ALLEY, SCENE_DEKUTES, -1,
+ SCENE_00KEIKOKU, SCENE_TENMON_DAI, SCENE_13HUBUKINOMITI, SCENE_24KEMONOMITI, SCENE_SYATEKI_MORI,
+ SCENE_IKANAMAE, SCENE_TOWN, SCENE_SYATEKI_MIZU, SCENE_BOWLING, SCENE_TAKARAYA,
+ SCENE_YADOYA, SCENE_SONCHONOIE, SCENE_MILK_BAR, SCENE_ICHIBA, SCENE_BOMYA,
+ SCENE_AYASHIISHOP, SCENE_8ITEMSHOP, SCENE_DOUJOU, SCENE_POSTHOUSE, SCENE_TAKARAKUJI,
+ SCENE_BACKTOWN, SCENE_CLOCKTOWER, SCENE_INSIDETOWER, SCENE_OKUJOU, SCENE_ALLEY,
+ SCENE_DEKUTES, 0xFFFF,
},
- // Snowhead
+ // REGION_SNOWHEAD
{
SCENE_10YUKIYAMANOMURA,
SCENE_10YUKIYAMANOMURA2,
@@ -437,15 +434,15 @@ u16 gSceneIdsPerRegion[11][27] = {
SCENE_GORON_HAKA,
SCENE_17SETUGEN,
SCENE_17SETUGEN2,
- -1,
+ 0xFFFF,
},
- // Ikana Graveyard
+ // REGION_IKANA_GRAVEYARD
{
SCENE_BOTI,
SCENE_DANPEI2TEST,
- -1,
+ 0xFFFF,
},
- // Ikana Canyon
+ // REGION_IKANA_CANYON
{
SCENE_CASTLE,
SCENE_IKNINSIDE,
@@ -456,21 +453,21 @@ u16 gSceneIdsPerRegion[11][27] = {
SCENE_REDEAD,
SCENE_TOUGITES,
SCENE_HAKASHITA,
- -1,
+ 0xFFFF,
},
- // Goron Village
+ // REGION_GORON_VILLAGE
{
SCENE_11GORONNOSATO,
SCENE_11GORONNOSATO2,
SCENE_16GORON_HOUSE,
SCENE_GORONSHOP,
- -1,
+ 0xFFFF,
},
- // Stone Tower
+ // REGION_STONE_TOWER
{
SCENE_F40,
SCENE_F41,
- -1,
+ 0xFFFF,
},
};
@@ -553,9 +550,9 @@ s32 Inventory_IsMapVisible(s16 sceneId) {
return false;
}
-static u16 sSceneIdsPerTingleMap[6][12] = {
+static u16 sSceneIdsPerTingleMap[TINGLE_MAP_MAX][12] = {
{
- // Clock Town Tingle Map
+ // TINGLE_MAP_CLOCK_TOWN
SCENE_00KEIKOKU,
SCENE_BOTI,
SCENE_13HUBUKINOMITI,
@@ -566,20 +563,20 @@ static u16 sSceneIdsPerTingleMap[6][12] = {
SCENE_BACKTOWN,
SCENE_CLOCKTOWER,
SCENE_ALLEY,
- -1,
+ 0xFFFF,
},
{
- // Woodfall Tingle Map
+ // TINGLE_MAP_WOODFALL
SCENE_20SICHITAI,
SCENE_20SICHITAI2,
SCENE_21MITURINMAE,
SCENE_22DEKUCITY,
SCENE_DEKU_KING,
SCENE_KINSTA1,
- -1,
+ 0xFFFF,
},
{
- // Snowhead Tingle Map
+ // TINGLE_MAP_SNOWHEAD
SCENE_10YUKIYAMANOMURA,
SCENE_10YUKIYAMANOMURA2,
SCENE_11GORONNOSATO,
@@ -590,20 +587,20 @@ static u16 sSceneIdsPerTingleMap[6][12] = {
SCENE_GORONRACE,
SCENE_17SETUGEN,
SCENE_17SETUGEN2,
- -1,
+ 0xFFFF,
},
{
- // Romani Ranch Tingle Map
+ // TINGLE_MAP_ROMANI_RANCH
SCENE_F01,
SCENE_ROMANYMAE,
SCENE_OMOYA,
SCENE_F01C,
SCENE_F01_B,
SCENE_KOEPONARACE,
- -1,
+ 0xFFFF,
},
{
- // Great Bay Tingle Map
+ // TINGLE_MAP_GREAT_BAY
SCENE_30GYOSON,
SCENE_SINKAI,
SCENE_31MISAKI,
@@ -611,28 +608,28 @@ static u16 sSceneIdsPerTingleMap[6][12] = {
SCENE_KAIZOKU,
SCENE_33ZORACITY,
SCENE_35TAKI,
- -1,
+ 0xFFFF,
},
{
- // Stone Tower Tingle Map
+ // TINGLE_MAP_STONE_TOWER
SCENE_F40,
SCENE_F41,
SCENE_CASTLE,
SCENE_IKANA,
SCENE_REDEAD,
- -1,
+ 0xFFFF,
},
};
/**
- * Map visibility is achieved by purchasing a tingle map
+ * Removing clouds from the World Map is achieved by purchasing a tingle map
*/
-void Inventory_SetMapVisibility(s16 tingleIndex) {
+void Inventory_SetWorldMapCloudVisibility(s16 tingleIndex) {
s16 i = 0;
s16 index = 0;
u16(*tingleMapSceneIds)[] = &sSceneIdsPerTingleMap[tingleIndex];
- if ((tingleIndex >= 0) && (tingleIndex < 6)) {
+ if ((tingleIndex >= 0) && (tingleIndex < TINGLE_MAP_MAX)) {
while (true) {
if ((*tingleMapSceneIds)[i] == 0xFFFF) {
break;
@@ -664,22 +661,22 @@ void Inventory_SetMapVisibility(s16 tingleIndex) {
i++;
}
- if ((*tingleMapSceneIds) == sSceneIdsPerTingleMap[0]) {
- gSaveContext.save.mapsVisible |= 3;
- } else if ((*tingleMapSceneIds) == sSceneIdsPerTingleMap[1]) {
- gSaveContext.save.mapsVisible |= 0x1C;
- } else if ((*tingleMapSceneIds) == sSceneIdsPerTingleMap[2]) {
- gSaveContext.save.mapsVisible |= 0xE0;
- } else if ((*tingleMapSceneIds) == sSceneIdsPerTingleMap[3]) {
- gSaveContext.save.mapsVisible |= 0x100;
- } else if ((*tingleMapSceneIds) == sSceneIdsPerTingleMap[4]) {
- gSaveContext.save.mapsVisible |= 0x1E00;
- } else if ((*tingleMapSceneIds) == sSceneIdsPerTingleMap[5]) {
- gSaveContext.save.mapsVisible |= 0x6000;
+ if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_CLOCK_TOWN]) {
+ gSaveContext.save.worldMapCloudVisibility |= 3;
+ } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_WOODFALL]) {
+ gSaveContext.save.worldMapCloudVisibility |= 0x1C;
+ } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_SNOWHEAD]) {
+ gSaveContext.save.worldMapCloudVisibility |= 0xE0;
+ } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_ROMANI_RANCH]) {
+ gSaveContext.save.worldMapCloudVisibility |= 0x100;
+ } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_GREAT_BAY]) {
+ gSaveContext.save.worldMapCloudVisibility |= 0x1E00;
+ } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_STONE_TOWER]) {
+ gSaveContext.save.worldMapCloudVisibility |= 0x6000;
}
}
- XREG(95) = 0;
+ R_MINIMAP_DISABLED = false;
}
/**
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/game.c b/src/code/game.c
index 73352379f..b7069d312 100644
--- a/src/code/game.c
+++ b/src/code/game.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "system_malloc.h"
#include "z64rumble.h"
+#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
s32 gFramerateDivisor = 1;
f32 gFramerateDivisorF = 1.0f;
@@ -140,7 +141,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);
}
diff --git a/src/code/graph.c b/src/code/graph.c
index 869740e4b..8edc979d4 100644
--- a/src/code/graph.c
+++ b/src/code/graph.c
@@ -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;
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_math_atan.c b/src/code/sys_math_atan.c
index d68e1e293..72383b6b9 100644
--- a/src/code/sys_math_atan.c
+++ b/src/code/sys_math_atan.c
@@ -130,10 +130,12 @@ f32 Math_Atan2F(f32 y, f32 x) {
return Math_Atan2S(y, x) * (M_PI / 0x8000);
}
-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..f2ed19c38 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 */
diff --git a/src/code/title_setup.c b/src/code/title_setup.c
index dad3c6458..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;
@@ -23,26 +24,27 @@ void Setup_SetRegs(void) {
XREG(77) = 0x3C;
XREG(78) = 0x2F;
XREG(79) = 0x62;
- XREG(87) = 0;
+ R_PAUSE_OWLWARP_ALPHA = 0;
XREG(88) = 0x56;
XREG(89) = 0x258;
XREG(90) = 0x1C2;
- XREG(91) = 0;
- XREG(94) = 0;
- XREG(95) = 0;
- 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_STORY_FILL_SCREEN_ALPHA = 0;
+ R_REVERSE_FLOOR_INDEX = 0;
+ R_MINIMAP_DISABLED = false;
+
+ 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 fb449975d..a8a5f4cfe 100644
--- a/src/code/z_actor.c
+++ b/src/code/z_actor.c
@@ -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));
@@ -469,7 +469,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 +520,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) {
@@ -588,7 +589,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);
@@ -861,10 +862,11 @@ void TitleCard_Draw(GameState* gameState, TitleCardContext* titleCtx) {
OPEN_DISPS(gameState->gfxCtx);
- height = (width * height > TMEM_SIZE) ? TMEM_SIZE / width : height;
- spB4 = spB8 + (height * 4);
+ if (width * height > TMEM_SIZE) {
+ height = TMEM_SIZE / width;
+ }
- if (1) {}
+ spB4 = spB8 + (height * 4);
OVERLAY_DISP = func_8012C014(OVERLAY_DISP);
@@ -1025,7 +1027,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;
@@ -1060,7 +1062,7 @@ void Actor_SetScale(Actor* actor, f32 scale) {
}
void Actor_SetObjectDependency(PlayState* play, Actor* actor) {
- gSegments[0x06] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[actor->objBankIndex].segment);
+ gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[actor->objBankIndex].segment);
}
void Actor_Init(Actor* actor, PlayState* play) {
@@ -1290,7 +1292,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,8 +1303,7 @@ f32 Player_GetHeight(Player* player) {
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:
@@ -1313,9 +1314,9 @@ f32 Player_GetHeight(Player* player) {
}
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;
@@ -1323,17 +1324,17 @@ 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) {
@@ -1348,12 +1349,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) {
@@ -1363,7 +1364,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_6) && (player->csMode == PLAYER_CSMODE_0))) {
return false;
}
@@ -1373,7 +1374,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)) {
@@ -1488,11 +1489,11 @@ 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) {
@@ -1589,7 +1590,7 @@ void Actor_UpdateBgCheckInfo(PlayState* play, Actor* actor, f32 wallCheckHeight,
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;
@@ -1720,16 +1721,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);
}
@@ -1739,16 +1738,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);
}
@@ -1786,7 +1783,7 @@ 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 (player->targetedActor != NULL) {
if ((yaw > 0x4000) || ((actor->flags & ACTOR_FLAG_8000000))) {
return FLT_MAX;
}
@@ -1824,7 +1821,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;
@@ -1851,30 +1848,30 @@ s32 Actor_ProcessTalkRequest(Actor* actor, GameState* gameState) {
// Actor_PickUpExchange? Seems to be called with exchangeItemId -1 if the same actor used Actor_PickUp
// 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_100) || ((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);
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) {
@@ -1897,21 +1894,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_100) && (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;
@@ -1995,16 +1992,19 @@ s32 Actor_HasParent(Actor* actor, PlayState* play) {
* 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
*/
-s32 Actor_PickUp(Actor* actor, PlayState* play, s32 getItemId, f32 xzRange, f32 yRange) {
+s32 Actor_PickUp(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) < 0) {
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);
@@ -2026,7 +2026,7 @@ s32 Actor_PickUp(Actor* actor, PlayState* play, s32 getItemId, f32 xzRange, f32
return false;
}
-s32 Actor_PickUpNearby(Actor* actor, PlayState* play, s32 getItemId) {
+s32 Actor_PickUpNearby(Actor* actor, PlayState* play, GetItemId getItemId) {
return Actor_PickUp(actor, play, getItemId, 50.0f, 10.0f);
}
@@ -2034,7 +2034,7 @@ s32 Actor_LiftActor(Actor* actor, PlayState* play) {
return Actor_PickUpNearby(actor, play, GI_NONE);
}
-s32 Actor_PickUpFar(Actor* actor, PlayState* play, s32 getItemId) {
+s32 Actor_PickUpFar(Actor* actor, PlayState* play, GetItemId getItemId) {
return Actor_PickUp(actor, play, getItemId, 9999.9f, 9999.9f);
}
@@ -2061,11 +2061,15 @@ void func_800B8C20(Actor* actorA, Actor* actorB, PlayState* play) {
actorA->parent = NULL;
}
+/**
+ * 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 func_800B8C50(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;
}
}
@@ -2080,7 +2084,9 @@ 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);
@@ -2205,7 +2211,7 @@ void func_800B9098(Actor* actor) {
actor->audioFlags |= 0x40;
}
-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) {
if (func_800C99D4(&play->colCtx, polygon, bgId) == 8) {
return true;
}
@@ -2235,7 +2241,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));
@@ -2295,7 +2301,7 @@ void Actor_SpawnSetupActors(PlayState* play, ActorContext* actorCtx) {
}
if (!(phi_v0 & temp_fp) && (phi_v0 & actorCtx->unkC) &&
- (!(gSaveContext.eventInf[1] & 0x80) || !(phi_v0 & temp_s1) || !(actorEntry->id & 0x800))) {
+ (!CHECK_EVENTINF(EVENTINF_17) || !(phi_v0 & temp_s1) || !(actorEntry->id & 0x800))) {
Actor_SpawnEntry(&play->actorCtx, actorEntry, play);
}
actorEntry++;
@@ -2345,14 +2351,12 @@ Actor* Actor_UpdateActor(UpdateActor_Params* params) {
}
} else {
if (!Object_IsLoaded(&play->objectCtx, actor->objBankIndex)) {
- Actor_MarkForDeath(actor);
+ Actor_Kill(actor);
} else {
- s32 tmp = (params->unk_08 == 0);
-
if (((params->unk_08) && !(actor->flags & params->unk_08)) ||
- ((tmp = (params->unk_08 == 0)) &&
+ ((((!params->unk_08) != 0)) &&
(!(actor->flags & ACTOR_FLAG_100000) ||
- ((actor->category == ACTORCAT_EXPLOSIVES) && (params->player->stateFlags1 & 0x200))) &&
+ ((actor->category == ACTORCAT_EXPLOSIVES) && (params->player->stateFlags1 & PLAYER_STATE1_200))) &&
(params->unkC != 0) && (actor != params->unk10) && ((actor != params->player->heldActor)) &&
(actor->parent != ¶ms->player->actor))) {
CollisionCheck_ResetDamage(&actor->colChkInfo);
@@ -2366,13 +2370,13 @@ Actor* Actor_UpdateActor(UpdateActor_Params* params) {
actor->flags &= ~ACTOR_FLAG_1000000;
if ((DECR(actor->freezeTimer) == 0) && (actor->flags & params->unk_18)) {
- if (actor == params->player->unk_730) {
+ if (actor == params->player->targetedActor) {
actor->isTargeted = true;
} else {
actor->isTargeted = false;
}
- if ((actor->targetPriority != 0) && (params->player->unk_730 == 0)) {
+ if ((actor->targetPriority != 0) && (params->player->targetedActor == NULL)) {
actor->targetPriority = 0;
}
@@ -2394,9 +2398,35 @@ Actor* Actor_UpdateActor(UpdateActor_Params* params) {
return nextActor;
}
-u32 D_801AED58[] = {
- 0x100002C2, 0x100002C2, 0x00000200, 0x100006C2, 0x00000282, 0x300002C2,
- 0x10000282, 0x00000002, 0x300002C2, 0x100006C2, 0x00000002, 0x100002C2,
+u32 D_801AED58[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) {
@@ -2426,14 +2456,14 @@ void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) {
tmp = D_801AED58;
- if (player->stateFlags2 & 0x8000000) {
+ if (player->stateFlags2 & PLAYER_STATE2_8000000) {
params.unk_08 = 0x2000000;
} else {
params.unk_08 = 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.unk10 = player->talkActor;
} else {
params.unk10 = NULL;
}
@@ -2471,7 +2501,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);
@@ -2485,7 +2515,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);
}
@@ -2609,203 +2639,132 @@ s32 Actor_RecordUndrawnActor(PlayState* play, Actor* actor) {
}
void Actor_DrawLensOverlay(Gfx** gfxP, s32 lensMaskSize) {
- func_80164C14(gfxP, &gCircleTex, 4, 0, 6, 6, ((LENS_MASK_ACTIVE_SIZE - lensMaskSize) * 0.003f) + 1.0f);
+ TransitionCircle_LoadAndSetTexture(gfxP, gCircleTex, 4, 0, 6, 6,
+ ((LENS_MASK_ACTIVE_SIZE - lensMaskSize) * 0.003f) + 1.0f);
}
-#ifdef NON_EQUIVALENT
-void Actor_DrawLensActors(PlayState* play, s32 numActors, Actor** actors) {
+void Actor_DrawLensActors(PlayState* play, s32 numInvisibleActors, Actor** invisibleActors) {
+ s32 dbgVar1;
+ s32 dbgVar2;
s32 spB4;
+ Actor** invisibleActor;
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* spA8;
+ void* spA4;
+ GraphicsContext* gfxCtx = play->state.gfxCtx;
+ Gfx* tmp;
+ s32 pad[2];
- OPEN_DISPS(play->state.gfxCtx);
- // temp_s2 = play->state.gfxCtx;
+ dbgVar1 = true;
+ dbgVar2 = true;
- if (numActors > 0) {
- spAC = POLY_XLU_DISP;
- // sp34 = play + 0x18000;
+ if (dbgVar1) {
+ dbgVar1 = numInvisibleActors > 0;
+ }
+
+ OPEN_DISPS(gfxCtx);
+
+ if (dbgVar1) {
+ tmp = POLY_XLU_DISP;
+ spA8 = 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, spA8);
- func_80170200(&play->pauseBgPreRender, &spAC, __gfxCtx->zbuffer, (void*)spA4);
+ spAC = tmp;
+ func_80170200(&play->pauseBgPreRender, &spAC, spA8, spA4);
+ tmp = spAC;
+ }
- // spAC->words.w0 = 0xE7000000;
- // spAC->words.w1 = 0;
- // temp_s1_2 = spAC + 8;
- gDPPipeSync(spAC++);
+ gDPPipeSync(tmp++);
+ gDPSetPrimDepth(tmp++, 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(tmp++,
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(tmp++, 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,
+ gDPSetCombineLERP(tmp++, 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(tmp++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
}
- // spAC = phi_s1;
+ spAC = tmp;
Actor_DrawLensOverlay(&spAC, play->actorCtx.lensMaskSize);
- phi_s1_2 = func_801660B8(play, spAC);
+ tmp = func_801660B8(play, spAC);
- for (spB4 = 0; spB4 < numActors; spB4++, actors++) {
- Actor_Draw(play, *actors);
+ for (spB4 = 0, invisibleActor = invisibleActors; spB4 < numInvisibleActors; spB4++, invisibleActor++) {
+ POLY_XLU_DISP = tmp;
+ Actor_Draw(play, *invisibleActor);
+ tmp = POLY_XLU_DISP;
}
- // temp_s0_2 = &play->pauseBgPreRender;
+ if (dbgVar2) {
+ gDPPipeSync(tmp++);
- // phi_s1_2->words.w0 = 0xE7000000;
- // phi_s1_2->words.w1 = 0;
- // temp_s1_7 = phi_s1_2 + 8;
- gDPPipeSync(phi_s1_2++);
+ gDPSetOtherMode(tmp++,
+ 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(tmp++, 255, 255, 255, 0);
+ gDPSetPrimColor(tmp++, 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.unk5 == 0) {
+ gDPSetCombineMode(tmp++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ } else {
+ gDPSetCombineLERP(tmp++, 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(tmp++, 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);
+ spAC = tmp;
+ Actor_DrawLensOverlay(&spAC, play->actorCtx.lensMaskSize);
+ tmp = spAC;
- //}
+ gDPPipeSync(tmp++);
+ gDPSetBlendColor(tmp++, 255, 255, 255, 8);
+
+ gDPSetColorImage(tmp++, G_IM_FMT_RGBA, G_IM_SIZ_16b, play->pauseBgPreRender.width,
+ play->pauseBgPreRender.fbuf);
+
+ spAC = tmp;
+ func_8016FDB8(&play->pauseBgPreRender, &spAC, (void*)spA4, spA8, 1);
+ tmp = spAC;
}
- // 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 = tmp;
}
- // 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++);
+ tmp = OVERLAY_DISP;
- // temp_s1_16->words.w0 = 0xEF002C30;
- // temp_s1_16->words.w1 = 0x00504345;
- // temp_s1_17 = temp_s1_16 + 8;
- gDPSetOtherMode(spAC++,
+ gDPPipeSync(tmp++);
+
+ gDPSetOtherMode(tmp++,
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(tmp++, 1, TEXEL0, PRIMITIVE, 0, 1, TEXEL0, PRIMITIVE, 0, 1, TEXEL0, PRIMITIVE, 0, 1, TEXEL0,
PRIMITIVE, 0);
+ gDPSetPrimColor(tmp++, 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);
-
- Actor_DrawLensOverlay(&spAC, (s32)play->actorCtx.lensMaskSize);
-
+ spAC = tmp;
+ Actor_DrawLensOverlay(&spAC, 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);
@@ -2905,7 +2864,7 @@ 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 {
@@ -2942,7 +2901,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;
@@ -2966,7 +2925,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;
}
@@ -2995,7 +2954,7 @@ void func_800BA8B8(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;
}
@@ -3323,9 +3282,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) {
@@ -3366,7 +3325,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;
@@ -3375,7 +3334,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)) {
@@ -3386,7 +3345,7 @@ 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;
if (phi_s2_2) {
@@ -3728,7 +3687,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;
}
@@ -3741,7 +3700,7 @@ 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;
}
@@ -4229,19 +4188,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
@@ -4276,7 +4232,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_0) || 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);
@@ -4421,8 +4377,8 @@ void func_800BE33C(Vec3f* arg0, Vec3f* arg1, Vec3s* arg2, s32 arg3) {
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);
+ arg2->y = Math_Atan2S_XY(zDiff, xDiff);
+ arg2->x = Math_Atan2S_XY(sqrtf(SQ(xDiff) + SQ(zDiff)), yDiff);
}
void func_800BE3D0(Actor* actor, s16 angle, Vec3s* arg2) {
@@ -4584,7 +4540,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) {
@@ -4607,7 +4563,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;
@@ -4666,7 +4622,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) {
@@ -4697,7 +4653,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;
@@ -4715,7 +4671,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));
@@ -4737,7 +4693,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));
@@ -4749,7 +4705,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;
diff --git a/src/code/z_actor_dlftbls.c b/src/code/z_actor_dlftbls.c
index 77b6546ff..5d7f30ea8 100644
--- a/src/code/z_actor_dlftbls.c
+++ b/src/code/z_actor_dlftbls.c
@@ -1,712 +1,42 @@
#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
+
+ActorId gMaxActorId = 0;
FaultClient D_801ED930;
FaultAddrConvClient D_801ED940;
@@ -714,7 +44,7 @@ FaultAddrConvClient D_801ED940;
void ActorOverlayTable_FaultPrint(void* arg0, void* arg1) {
ActorOverlay* overlayEntry;
u32 overlaySize;
- s32 i;
+ ActorId i;
FaultDrawer_SetCharPad(-2, 0);
@@ -733,7 +63,7 @@ void ActorOverlayTable_FaultPrint(void* arg0, void* arg1) {
void* ActorOverlayTable_FaultAddrConv(void* arg0, void* arg1) {
u8* ptr = arg0;
ActorOverlay* overlayEntry = &gActorOverlayTable[0];
- s32 i;
+ ActorId i;
u8* ramStart;
u8* ramEnd;
size_t size;
diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c
index 7f4247b0d..eda6437af 100644
--- a/src/code/z_bgcheck.c
+++ b/src/code/z_bgcheck.c
@@ -72,17 +72,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 D_801EDA40;
void BgCheck_GetStaticLookupIndicesFromPos(CollisionContext* colCtx, Vec3f* pos, Vec3i* sector);
f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast);
@@ -281,7 +289,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 +388,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 +443,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 +492,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 +513,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 +568,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 +578,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 +709,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 +719,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 +761,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 +797,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 +807,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 +849,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 +915,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 +929,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,9 +952,8 @@ 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
SSNode* curNode;
@@ -934,16 +962,14 @@ s32 BgCheck_CheckLineAgainstSSList(StaticLineTest* arg0) {
f32 distSq;
BgLineVsPolyTest test; // sp50
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 +981,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 +1016,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 +1027,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 +1071,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 +1080,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 +1108,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;
@@ -1634,7 +1656,7 @@ 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)) {
@@ -1647,12 +1669,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 +1735,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) && func_800C9B68(colCtx, *outPoly, *outBgId)) {
yIntersect -= 1.0f;
}
return yIntersect;
@@ -1916,7 +1938,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,
@@ -1977,7 +1999,7 @@ 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;
}
@@ -2010,7 +2032,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 +2224,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];
@@ -2512,9 +2534,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;
@@ -2642,7 +2664,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;
@@ -2714,7 +2736,7 @@ s32 DynaPoly_SetBgActor(PlayState* play, DynaCollisionContext* dyna, Actor* acto
*/
DynaPolyActor* DynaPoly_GetActor(CollisionContext* colCtx, s32 bgId) {
if (!DynaPoly_IsBgIdBgActor(bgId) || !(colCtx->dyna.bgActorFlags[bgId] & 1) ||
- colCtx->dyna.bgActorFlags[bgId] & 2) {
+ (colCtx->dyna.bgActorFlags[bgId] & 2)) {
return NULL;
}
return (DynaPolyActor*)colCtx->dyna.bgActors[bgId].actor;
@@ -2881,20 +2903,20 @@ void DynaPoly_ExpandSRT(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s
if (dyna->bgActorFlags[bgId] & 4) {
return;
}
-
- if (!(DYNA_WATERBOX_MAX >= *waterBoxStartIndex + pbgdata->numWaterBoxes)) {
+ // if(&pos){} // fake but considerably improves match. commented out to stop warnings
+ 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);
@@ -2938,7 +2960,8 @@ void DynaPoly_ExpandSRT(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s
dyna->bgActors[bgId].curTransform.pos.x, dyna->bgActors[bgId].curTransform.pos.y,
dyna->bgActors[bgId].curTransform.pos.z);
- if (pbgdata->numVertices != 0 && pbgdata->numPolygons != 0) {
+ if ((pbgdata->numVertices != 0) && (pbgdata->numPolygons != 0)) {
+ s32 j;
numVtxInverse = 1.0f / pbgdata->numVertices;
newCenterPoint.x = newCenterPoint.y = newCenterPoint.z = 0.0f;
for (i = 0; i < pbgdata->numVertices; i++) {
@@ -2969,13 +2992,12 @@ void DynaPoly_ExpandSRT(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s
sphere->center.z = newCenterPoint.z;
newRadiusSq = -100.0f;
- for (i = 0; i < pbgdata->numVertices; i++) {
+ for (i = 0, j = *vtxStartIndex; i < pbgdata->numVertices; i++, j++) {
f32 radiusSq;
- s32 idx = *vtxStartIndex + i;
- newVtx.x = dyna->vtxList[idx].x;
- newVtx.y = dyna->vtxList[idx].y;
- newVtx.z = dyna->vtxList[idx].z;
+ 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;
@@ -3022,7 +3044,7 @@ void DynaPoly_ExpandSRT(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s
newPoly->normal.z = COLPOLY_SNORMAL(newNormal.z);
}
- newPoly->dist = -DOTXYZ(newNormal, dVtxList[vIA]);
+ newPoly->dist = func_80086D24(-DOTXYZ(newNormal, vtxA));
if (newNormal.y > 0.5f) {
s16 polyId = *polyStartIndex + i;
@@ -3039,21 +3061,22 @@ void DynaPoly_ExpandSRT(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s
}
}
- 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 = &dyna->waterBoxList.boxes[*waterBoxStartIndex + wi];
- BgCheck_CalcWaterboxDimensions(&spAC, &sp94, &sp7C, &waterBox->minPos, &waterBox->xLength,
- &waterBox->zLength);
- waterBox->properties = pbgdata->waterBoxes[wi].properties;
+ 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 = &dyna->waterBoxList.boxes[*waterBoxStartIndex + wi];
+ BgCheck_CalcWaterboxDimensions(&spAC, &sp94, &sp7C, &waterBox->minPos, &waterBox->xLength,
+ &waterBox->zLength);
+ waterBox->properties = pbgdata->waterBoxes[wi].properties;
+ }
}
-
*polyStartIndex += pbgdata->numPolygons;
*vtxStartIndex += pbgdata->numVertices;
*waterBoxStartIndex += pbgdata->numWaterBoxes;
@@ -3070,7 +3093,7 @@ void BgCheck_ResetFlagsIfLoadedActor(PlayState* play, DynaCollisionContext* dyna
for (i = 0; i < BG_ACTOR_MAX; i++) {
if ((dyna->bgActorFlags[i] & 1)) {
dynaActor = DynaPoly_GetActor(&play->colCtx, i);
- if (dynaActor != NULL && &dynaActor->actor == actor) {
+ if ((dynaActor != NULL) && (&dynaActor->actor == actor)) {
DynaPolyActor_ResetState((DynaPolyActor*)actor);
return;
}
@@ -3101,7 +3124,7 @@ void DynaPoly_Setup(PlayState* play, DynaCollisionContext* dyna) {
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) {
@@ -3181,8 +3204,8 @@ 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->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))) {
if (curNode->next == SS_NULL) {
break;
@@ -3192,7 +3215,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 +3225,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];
}
@@ -3250,8 +3273,8 @@ f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast) {
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 +3293,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,7 +3318,7 @@ 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;
}
@@ -3388,8 +3411,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 +3451,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 +3487,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 +3527,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 {
@@ -3566,7 +3589,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 +3598,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 +3647,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 +3667,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;
@@ -3733,8 +3756,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 {
@@ -3830,17 +3853,19 @@ s32 BgCheck_CheckLineAgainstDyna(CollisionContext* colCtx, u16 xpFlags, Vec3f* p
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 +3895,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 {
@@ -4016,7 +4040,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;
@@ -4256,7 +4280,7 @@ u32 func_800C9BB8(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
u16 SurfaceType_GetSfx(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
s32 id = func_800C9BB8(colCtx, poly, bgId);
- if (id < 0 || id > 14) {
+ if ((id < 0) || (id > 14)) {
return NA_SE_PL_WALK_GROUND - SFX_FLAG;
}
return sSurfaceTypeSfx[id];
@@ -4268,7 +4292,7 @@ u16 SurfaceType_GetSfx(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId)
s32 func_800C9C24(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId, s32 arg3) {
s32 id = func_800C9BB8(colCtx, poly, bgId);
- if (id < 0 || id > 14) {
+ if ((id < 0) || (id > 14)) {
return 0;
}
return D_801B46C0[id] & arg3;
@@ -4398,23 +4422,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 +4450,24 @@ 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] & 1) || (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;
}
}
}
@@ -4467,7 +4489,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 +4501,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 +4516,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 +4534,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)) {
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 +4563,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 +4629,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 +4638,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] & 1) || (colCtx->dyna.bgActorFlags[i] & 2)) {
+ 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..a8e9fbb80
--- /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,
+ /* -24 */ CAM_SET_SIDED,
+ /* -23 */ CAM_SET_BOAT_CRUISE,
+ /* -22 */ CAM_SET_NONE,
+ /* -21 */ CAM_SET_SUBJECTD,
+ /* -20 */ CAM_SET_NORMALD,
+ /* -19 */ CAM_SET_NONE,
+ /* -18 */ CAM_SET_NONE,
+ /* -17 */ CAM_SET_NONE,
+ /* -16 */ CAM_SET_WARP_PAD_ENTRANCE,
+ /* -15 */ CAM_SET_ATTENTION,
+ /* -14 */ CAM_SET_CONNECT0,
+ /* -13 */ CAM_SET_REMOTEBOMB,
+ /* -12 */ CAM_SET_NONE,
+ /* -11 */ CAM_SET_MASK_TRANSFORMATION,
+ /* -10 */ CAM_SET_LONG_CHEST_OPENING,
+ /* -9 */ CAM_SET_REBIRTH,
+ /* -8 */ CAM_SET_DEATH,
+ /* -7 */ CAM_SET_WARP_PAD_MOON,
+ /* -6 */ CAM_SET_NAVI,
+ /* -5 */ CAM_SET_ITEM3,
+ /* -4 */ CAM_SET_ITEM2,
+ /* -3 */ CAM_SET_ITEM1,
+ /* -2 */ CAM_SET_ITEM0,
+ /* -1 */ CAM_SET_STOP0,
+ /* 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..0e36f1c54 100644
--- a/src/code/z_collision_check.c
+++ b/src/code/z_collision_check.c
@@ -1,3 +1,4 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
Vec3f D_801EDE00;
diff --git a/src/code/z_debug_display.c b/src/code/z_debug_display.c
index a8b851ed7..f98b8636e 100644
--- a/src/code/z_debug_display.c
+++ b/src/code/z_debug_display.c
@@ -11,6 +11,7 @@ typedef void (*DebugDispObject_DrawFunc)(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;
@@ -102,24 +103,107 @@ void DebugDisplay_DrawPolygon(DebugDispObject* dispObj, void* arg1, PlayState* p
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_demo.c b/src/code/z_demo.c
index 1fa041be1..7d665e208 100644
--- a/src/code/z_demo.c
+++ b/src/code/z_demo.c
@@ -1,3 +1,4 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
#include "z64quake.h"
#include "z64rumble.h"
@@ -251,9 +252,9 @@ void Cutscene_Command_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdBase* c
break;
case 0x12:
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:
@@ -270,10 +271,10 @@ void Cutscene_Command_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdBase* c
gSaveContext.save.playerForm = PLAYER_FORM_DEKU;
break;
case 0x17:
- player->stateFlags2 |= 0x4000000;
+ player->stateFlags2 |= PLAYER_STATE2_4000000;
break;
case 0x18:
- player->stateFlags2 &= ~0x4000000;
+ player->stateFlags2 &= ~PLAYER_STATE2_4000000;
break;
case 0x19:
sCutsceneStoredPlayerForm = gSaveContext.save.playerForm;
@@ -325,10 +326,10 @@ void Cutscene_Command_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdBase* c
if (csCtx->frames != D_801BB15C) {
D_801BB15C = csCtx->frames;
- if (REG(15) != 0) {
- gSaveContext.save.time = ((void)0, gSaveContext.save.time) + (u16)REG(15);
+ 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;
@@ -597,7 +598,7 @@ void Cutscene_Command_Terminator(PlayState* play, CutsceneContext* csCtx, CsCmdB
switch (D_801F4DE2) {
case 0x1F:
- if (gSaveContext.save.weekEventReg[20] & 2) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02)) {
play->nextEntrance = ENTRANCE(WOODFALL_TEMPLE, 1);
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_03;
@@ -610,7 +611,7 @@ void Cutscene_Command_Terminator(PlayState* play, CutsceneContext* csCtx, CsCmdB
break;
case 0x44:
- if (gSaveContext.save.weekEventReg[33] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) {
play->nextEntrance = ENTRANCE(MOUNTAIN_VILLAGE_SPRING, 7);
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_03;
@@ -623,7 +624,7 @@ void Cutscene_Command_Terminator(PlayState* play, CutsceneContext* csCtx, CsCmdB
break;
case 0x5F:
- gSaveContext.save.weekEventReg[55] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_55_80);
play->nextEntrance = ENTRANCE(ZORA_CAPE, 8);
gSaveContext.nextCutsceneIndex = 0xFFF0;
play->transitionTrigger = TRANS_TRIGGER_START;
@@ -631,7 +632,7 @@ void Cutscene_Command_Terminator(PlayState* play, CutsceneContext* csCtx, CsCmdB
break;
case 0x36:
- gSaveContext.save.weekEventReg[52] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_52_20);
play->nextEntrance = ENTRANCE(IKANA_CANYON, 0);
gSaveContext.nextCutsceneIndex = 0xFFF1;
play->transitionTrigger = TRANS_TRIGGER_START;
@@ -990,7 +991,7 @@ void Cutscene_Command_Textbox(PlayState* play, CutsceneContext* csCtx, CsCmdText
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) &&
+ 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);
@@ -1481,6 +1482,7 @@ void func_800EDBE0(PlayState* play) {
} else if (!(((void)0,
gSaveContext.save.weekEventReg[(play->csCtx.sceneCsList[temp_v0_3].unk7 / 8)]) &
(1 << (play->csCtx.sceneCsList[temp_v0_3].unk7 % 8)))) {
+ // TODO: macros for this kind of weekEventReg access
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));
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_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_tire_mark.c b/src/code/z_eff_tire_mark.c
index 532e8e2fb..f19eb1289 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 != 50) || (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_old_init.c b/src/code/z_effect_soft_sprite_old_init.c
index bbdd528a4..4f24651d1 100644
--- a/src/code/z_effect_soft_sprite_old_init.c
+++ b/src/code/z_effect_soft_sprite_old_init.c
@@ -50,7 +50,7 @@ void EffectSs_DrawGEffect(PlayState* play, EffectSs* this, TexturePtr texture) {
SkinMatrix_SetScale(&mfScale, scale, scale, scale);
SkinMatrix_MtxFMtxFMult(&mfTrans, &play->billboardMtxF, &mfTrans11DA0);
SkinMatrix_MtxFMtxFMult(&mfTrans11DA0, &mfScale, &mfResult);
- gSegments[0x06] = PHYSICAL_TO_VIRTUAL(object);
+ gSegments[0x06] = VIRTUAL_TO_PHYSICAL(object);
gSPSegment(POLY_XLU_DISP++, 0x06, object);
mtx = SkinMatrix_MtxFToNewMtx(gfxCtx, &mfResult);
diff --git a/src/code/z_elf_message.c b/src/code/z_elf_message.c
index 11e4a2743..830824024 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) {
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 5e32e5c95..01ec9eca3 100644
--- a/src/code/z_en_hy_code.c
+++ b/src/code/z_en_hy_code.c
@@ -84,7 +84,7 @@ EnDoor* EnHy_FindNearestDoor(Actor* actor, PlayState* play) {
}
void EnHy_ChangeObjectAndAnim(EnHy* enHy, PlayState* play, s16 animIndex) {
- gSegments[6] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[enHy->animObjIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[enHy->animObjIndex].segment);
EnHy_ChangeAnim(&enHy->skelAnime, animIndex);
}
@@ -92,7 +92,7 @@ s32 EnHy_UpdateSkelAnime(EnHy* enHy, PlayState* play) {
s32 isUpdated = false;
if (enHy->actor.draw != NULL) {
- gSegments[6] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[enHy->animObjIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[enHy->animObjIndex].segment);
SkelAnime_Update(&enHy->skelAnime);
isUpdated = true;
}
@@ -119,7 +119,7 @@ s32 EnHy_Init(EnHy* enHy, PlayState* play, FlexSkeletonHeader* skeletonHeaderSeg
enHy->actor.objBankIndex = enHy->skelLowerObjIndex;
isInitialized = true;
ActorShape_Init(&enHy->actor.shape, 0.0f, NULL, 0.0f);
- gSegments[6] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[enHy->actor.objBankIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[enHy->actor.objBankIndex].segment);
SkelAnime_InitFlex(play, &enHy->skelAnime, skeletonHeaderSeg, NULL, enHy->jointTable, enHy->morphTable,
ENHY_LIMB_MAX);
EnHy_ChangeObjectAndAnim(enHy, play, animIndex);
@@ -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;
diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c
index 437728f0e..944e650a0 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;
}
}
@@ -358,7 +358,7 @@ 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);
}
}
@@ -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;
@@ -510,7 +510,7 @@ void EnItem00_Update(Actor* thisx, PlayState* play) {
Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 15.0f, 15.0f, 0x1D);
if (this->actor.floorHeight <= BGCHECK_Y_MIN) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
}
@@ -659,7 +659,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 +672,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 {
@@ -843,10 +843,10 @@ void EnItem00_DrawSprite(EnItem00* this, PlayState* play) {
CLOSE_DISPS(play->state.gfxCtx);
}
-void EnItem00_DrawHeartContainer(EnItem00* actor, PlayState* play) {
+void EnItem00_DrawHeartContainer(EnItem00* this, PlayState* play) {
s32 pad[2];
- if (Object_GetIndex(&play->objectCtx, OBJECT_GI_HEARTS) == actor->actor.objBankIndex) {
+ if (Object_GetIndex(&play->objectCtx, OBJECT_GI_HEARTS) == this->actor.objBankIndex) {
OPEN_DISPS(play->state.gfxCtx);
func_8012C2DC(play->state.gfxCtx);
diff --git a/src/code/z_fbdemo_circle.c b/src/code/z_fbdemo_circle.c
index a822262ee..2a8144ea4 100644
--- a/src/code/z_fbdemo_circle.c
+++ b/src/code/z_fbdemo_circle.c
@@ -1,19 +1,144 @@
#include "global.h"
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo_circle/TransitionCircle_Start.s")
+Gfx D_801D0D00[] = {
+ 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,
+ G_AC_THRESHOLD | G_ZS_PRIM | AA_EN | IM_RD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | FORCE_BL |
+ GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) |
+ GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)),
+ gsDPSetPrimColor(0, 255, 0, 0, 0, 1),
+ gsDPSetBlendColor(0, 0, 0, 1),
+ gsSPEndDisplayList(),
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo_circle/TransitionCircle_Init.s")
+//! @bug: TransitionCircle_Update should take an additional argument `s32 updateRate`
+TransitionInit TransitionCircle_InitVars = {
+ TransitionCircle_Init, TransitionCircle_Destroy, (void*)TransitionCircle_Update, TransitionCircle_Draw,
+ TransitionCircle_Start, TransitionCircle_SetType, TransitionCircle_SetColor, NULL,
+ TransitionCircle_IsDone,
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo_circle/TransitionCircle_Destroy.s")
+void TransitionCircle_Start(void* thisx) {
+ TransitionCircle* this = (TransitionCircle*)thisx;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo_circle/TransitionCircle_Update.s")
+ this->stepValue = 0.1f;
+ if (this->direction == TRANSITION_CIRCLE_IN) {
+ this->targetRadius = 0.0f;
+ this->startingRadius = 1.0f;
+ } else {
+ this->startingRadius = 0.0f;
+ this->targetRadius = 1.0f;
+ }
+ this->referenceRadius = this->startingRadius;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo_circle/TransitionCircle_SetColor.s")
+void* TransitionCircle_Init(void* thisx) {
+ TransitionCircle* this = (TransitionCircle*)thisx;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo_circle/TransitionCircle_SetType.s")
+ bzero(this, sizeof(TransitionCircle));
+ this->maskType = 1;
+ this->texture = gCircleTex;
+ this->masks = 6;
+ this->maskt = 6;
+ this->unk_1E = 4;
+ this->unk_1F = 0;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo_circle/func_80164C14.s")
+ return this;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo_circle/TransitionCircle_Draw.s")
+void TransitionCircle_Destroy(void* thisx) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo_circle/TransitionCircle_IsDone.s")
+void TransitionCircle_Update(void* thisx) {
+ TransitionCircle* this = (TransitionCircle*)thisx;
+
+ this->isDone = Math_StepToF(&this->referenceRadius, this->targetRadius, this->stepValue);
+}
+
+void TransitionCircle_SetColor(void* thisx, u32 color) {
+ TransitionCircle* this = (TransitionCircle*)thisx;
+
+ this->color.rgba = color;
+}
+
+void TransitionCircle_SetType(void* thisx, s32 type) {
+ TransitionCircle* this = (TransitionCircle*)thisx;
+
+ if (type & TC_SET_PARAMS) {
+ this->maskType = FBDEMO_CIRCLE_GET_MASK_TYPE(type);
+ } else if (type == 1) {
+ this->direction = TRANSITION_CIRCLE_OUT;
+ } else {
+ this->direction = TRANSITION_CIRCLE_IN;
+ }
+}
+
+void TransitionCircle_LoadAndSetTexture(Gfx** gfxp, TexturePtr texture, s32 fmt, s32 arg3, s32 masks, s32 maskt,
+ f32 arg6) {
+ Gfx* gfx = *gfxp;
+ s32 xh = D_801FBBCC;
+ s32 yh = D_801FBBCE;
+ s32 width = 1 << masks;
+ s32 height = 1 << maskt;
+ f32 s;
+ f32 t;
+ s32 dtdy;
+ s32 dsdx;
+
+ gDPLoadTextureBlock_4b(gfx++, texture, fmt, width, height, 0, G_TX_MIRROR | G_TX_CLAMP, G_TX_MIRROR | G_TX_CLAMP,
+ masks, maskt, G_TX_NOLOD, G_TX_NOLOD);
+ gDPSetTileSize(gfx++, G_TX_RENDERTILE, ((SCREEN_WIDTH / 2) - width) << 2, ((SCREEN_HEIGHT / 2) - height) << 2,
+ ((SCREEN_WIDTH / 2) + (width - 1)) << 2, ((SCREEN_HEIGHT / 2) + (height - 1)) << 2);
+
+ s = ((1.0f - (1.0f / arg6)) * (SCREEN_WIDTH / 2)) + 70.0f;
+ t = ((1.0f - (1.0f / arg6)) * (SCREEN_HEIGHT / 2)) + 50.0f;
+
+ if (s < -1023.0f) {
+ s = -1023.0f;
+ }
+ if (t < -1023.0f) {
+ t = -1023.0f;
+ }
+
+ if ((s <= -1023.0f) || (t <= -1023.0f)) {
+ dsdx = 0;
+ dtdy = 0;
+ } else {
+ dsdx = ((SCREEN_WIDTH - (2.0f * s)) / gScreenWidth) * (1 << 10);
+ dtdy = ((SCREEN_HEIGHT - (2.0f * t)) / gScreenHeight) * (1 << 10);
+ }
+
+ gSPTextureRectangle(gfx++, 0, 0, xh << 2, yh << 2, G_TX_RENDERTILE, (s32)(s * (1 << 5)), (s32)(t * (1 << 5)), dsdx,
+ dtdy);
+ gDPPipeSync(gfx++);
+
+ *gfxp = gfx;
+}
+
+void TransitionCircle_Draw(void* thisx, Gfx** gfxp) {
+ Gfx* gfx = *gfxp;
+ TransitionCircle* this = (TransitionCircle*)thisx;
+
+ gDPPipeSync(gfx++);
+ gSPDisplayList(gfx++, &D_801D0D00);
+ 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,
+ PRIM_LOD_FRAC, PRIMITIVE);
+ } else {
+ gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, 1, TEXEL0, PRIM_LOD_FRAC, PRIMITIVE, 0, 0, 0, PRIMITIVE, 1, TEXEL0,
+ PRIM_LOD_FRAC, PRIMITIVE);
+ }
+ TransitionCircle_LoadAndSetTexture(&gfx, this->texture, G_IM_FMT_I, 0, this->masks, this->maskt,
+ this->referenceRadius);
+ gDPPipeSync(gfx++);
+
+ *gfxp = gfx;
+}
+
+s32 TransitionCircle_IsDone(void* thisx) {
+ TransitionCircle* this = (TransitionCircle*)thisx;
+
+ return this->isDone;
+}
diff --git a/src/code/z_fbdemo_dlftbls.c b/src/code/z_fbdemo_dlftbls.c
index 7ebce9e69..9d3685a45 100644
--- a/src/code/z_fbdemo_dlftbls.c
+++ b/src/code/z_fbdemo_dlftbls.c
@@ -1,5 +1,54 @@
#include "global.h"
+#include "initvars.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"
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo_dlftbls/func_80163C90.s")
+#define TRANSITION_OVERLAY(name, filename) \
+ { \
+ { 0, 0 }, SEGMENT_START(ovl_##filename), SEGMENT_END(ovl_##filename), SEGMENT_ROM_START(ovl_##filename), \
+ SEGMENT_ROM_END(ovl_##filename), &name##_InitVars, sizeof(name) \
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_fbdemo_dlftbls/func_80163D80.s")
+#define TRANSITION_OVERLAY_INTERNAL(name) \
+ { { 0, 0 }, NULL, NULL, 0, 0, &name##_InitVars, sizeof(name) }
+
+#define TRANSITION_OVERLAY_UNSET \
+ { 0 }
+
+TransitionOverlay gTransitionOverlayTable[] = {
+ TRANSITION_OVERLAY_INTERNAL(TransitionFade), TRANSITION_OVERLAY(TransitionTriforce, fbdemo_triforce),
+ TRANSITION_OVERLAY(TransitionWipe1, fbdemo_wipe1), TRANSITION_OVERLAY(TransitionWipe3, fbdemo_wipe3),
+ TRANSITION_OVERLAY(TransitionWipe4, fbdemo_wipe4), TRANSITION_OVERLAY_INTERNAL(TransitionCircle),
+ TRANSITION_OVERLAY(TransitionWipe5, fbdemo_wipe5),
+};
+
+void Transition_Init(TransitionContext* transitionCtx) {
+ TransitionOverlay* overlayEntry;
+ ptrdiff_t relocOffset;
+ TransitionInit* initInfo[1];
+
+ overlayEntry = &gTransitionOverlayTable[transitionCtx->fbdemoType];
+ TransitionOverlay_Load(overlayEntry);
+
+ relocOffset = (uintptr_t)Lib_PhysicalToVirtual(overlayEntry->loadInfo.addr) - (uintptr_t)overlayEntry->vramStart;
+ initInfo[0] = NULL;
+ initInfo[0] = (overlayEntry->initInfo != NULL) ? (TransitionInit*)((uintptr_t)overlayEntry->initInfo + relocOffset)
+ : initInfo[0];
+
+ transitionCtx->init = initInfo[0]->init;
+ transitionCtx->destroy = initInfo[0]->destroy;
+ transitionCtx->start = initInfo[0]->start;
+ transitionCtx->isDone = initInfo[0]->isDone;
+ transitionCtx->draw = initInfo[0]->draw;
+ transitionCtx->update = initInfo[0]->update;
+ transitionCtx->setType = initInfo[0]->setType;
+ transitionCtx->setColor = initInfo[0]->setColor;
+ transitionCtx->setEnvColor = initInfo[0]->setEnvColor;
+}
+
+void Transition_Destroy(TransitionContext* transitionCtx) {
+ TransitionOverlay_Free(&gTransitionOverlayTable[transitionCtx->fbdemoType]);
+}
diff --git a/src/code/z_fireobj.c b/src/code/z_fireobj.c
index d0b88b3db..e4f014ffa 100644
--- a/src/code/z_fireobj.c
+++ b/src/code/z_fireobj.c
@@ -118,7 +118,7 @@ void FireObj_UpdateStateTransitions(PlayState* play, FireObj* fire) {
(waterY - fire->position.y > 6500.0f * fire->yScale)) {
FireObj_SetState(fire, fire->dynamicSizeStep, FIRE_STATE_3);
}
- if ((fire->flags & 2) && (player->itemActionParam == PLAYER_AP_STICK)) {
+ if ((fire->flags & 2) && (player->heldItemAction == PLAYER_IA_STICK)) {
Math_Vec3f_Diff(&player->meleeWeaponInfo[0].tip, &fire->position, &dist);
if (Math3D_LengthSquared(&dist) < 400.0f) {
sp40 = true;
diff --git a/src/code/z_game_over.c b/src/code/z_game_over.c
index 857250eec..5609a4727 100644
--- a/src/code/z_game_over.c
+++ b/src/code/z_game_over.c
@@ -29,7 +29,7 @@ void GameOver_Update(PlayState* play) {
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 &&
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_scope_call.c b/src/code/z_kaleido_scope_call.c
index 9cea42691..5ab466ddc 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_DONE) {
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_DONE) {
+ 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 0109dc4ab..dac0d8300 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,27 +29,29 @@ 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] = 0;
+ pauseCtx->worldMapPoints[i] = false;
}
- if (pauseCtx->state == 1) {
- for (i = 0; i < 11; i++) {
- if ((gSaveContext.save.mapsVisited >> i) & 1) {
- pauseCtx->worldMapPoints[i] = 1;
+ if (pauseCtx->state == PAUSE_STATE_OPENING_0) {
+ for (i = 0; i < REGION_MAX; i++) {
+ if ((gSaveContext.save.regionsVisited >> i) & 1) {
+ pauseCtx->worldMapPoints[i] = true;
}
}
} else {
- for (i = 9; i >= 0; i--) {
+ for (i = OWL_WARP_STONE_TOWER; i >= OWL_WARP_GREAT_BAY_COAST; i--) {
if ((gSaveContext.save.playerData.owlActivationFlags >> i) & 1) {
- pauseCtx->worldMapPoints[i] = 1;
+ pauseCtx->worldMapPoints[i] = true;
pauseCtx->cursorPoint[PAUSE_WORLD_MAP] = i;
}
}
@@ -57,9 +74,9 @@ void func_800F4A10(PlayState* play) {
YREG(21) = -0x0622;
YREG(22) = -0x0C44;
YREG(23) = 0x0622;
- YREG(24) = -0x0622;
- YREG(25) = -0x005A;
- YREG(26) = -0x3840;
+ R_PAUSE_WORLD_MAP_YAW = -0x622;
+ R_PAUSE_WORLD_MAP_Y_OFFSET = -90;
+ R_PAUSE_WORLD_MAP_DEPTH = -14400;
}
void KaleidoSetup_Update(PlayState* play) {
@@ -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 (!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,30 +133,30 @@ 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] = XREG(94) + 3;
+ pauseCtx->cursorPoint[PAUSE_MAP] = R_REVERSE_FLOOR_INDEX + (DUNGEON_FLOOR_INDEX_4 - 1);
pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_RIGHT;
pauseCtx->pageSwitchTimer = 0;
pauseCtx->cursorItem[PAUSE_ITEM] = PAUSE_ITEM_NONE;
- pauseCtx->cursorItem[PAUSE_MAP] = XREG(94) + 3;
+ pauseCtx->cursorItem[PAUSE_MAP] = R_REVERSE_FLOOR_INDEX + (DUNGEON_FLOOR_INDEX_4 - 1);
pauseCtx->cursorItem[PAUSE_QUEST] = PAUSE_ITEM_NONE;
pauseCtx->cursorItem[PAUSE_MASK] = PAUSE_ITEM_NONE;
pauseCtx->cursorSlot[PAUSE_ITEM] = 0;
- pauseCtx->cursorSlot[PAUSE_MAP] = XREG(94) + 3;
+ 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..919abbb1d 100644
--- a/src/code/z_kankyo.c
+++ b/src/code/z_kankyo.c
@@ -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 03e6c395c..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);
@@ -704,11 +704,29 @@ void* Lib_SegmentedToVirtual(void* ptr) {
void* Lib_SegmentedToVirtualNull(void* ptr) {
if (((uintptr_t)ptr >> 28) == 0) {
return ptr;
+ } else {
+ return SEGMENTED_TO_VIRTUAL(ptr);
}
-
- return SEGMENTED_TO_VIRTUAL(ptr);
}
+/*
+ * Converts a 32-bit virtual address (0x80XXXXXX) to a 24-bit physical address (0xXXXXXX). The NULL case accounts for
+ * the NULL virtual address being 0x00000000 and not 0x80000000. Used by transition overlays, which store their
+ * addresses in 24-bit fields.
+ */
+void* Lib_VirtualToPhysical(void* ptr) {
+ if (ptr == NULL) {
+ return NULL;
+ } else {
+ return (void*)VIRTUAL_TO_PHYSICAL(ptr);
+ }
+}
+
+/*
+ * Converts a 24-bit physical address (0xXXXXXX) to a 32-bit virtual address (0x80XXXXXX). The NULL case accounts for
+ * the NULL virtual address being 0x00000000 and not 0x80000000. Used by transition overlays, which store their
+ * addresses in 24-bit fields.
+ */
void* Lib_PhysicalToVirtual(void* ptr) {
if (ptr == NULL) {
return NULL;
@@ -716,11 +734,3 @@ void* Lib_PhysicalToVirtual(void* ptr) {
return (void*)PHYSICAL_TO_VIRTUAL(ptr);
}
}
-
-void* Lib_PhysicalToVirtualNull(void* ptr) {
- if (ptr == NULL) {
- return NULL;
- } else {
- return (void*)PHYSICAL_TO_VIRTUAL(ptr);
- }
-}
diff --git a/src/code/z_lifemeter.c b/src/code/z_lifemeter.c
index d2a3a254c..b123baab6 100644
--- a/src/code/z_lifemeter.c
+++ b/src/code/z_lifemeter.c
@@ -36,7 +36,7 @@ TexturePtr HeartDDTextures[] = {
void LifeMeter_Init(PlayState* play) {
InterfaceContext* interfaceCtx = &play->interfaceCtx;
- interfaceCtx->unkTimer = 320;
+ interfaceCtx->healthTimer = 320;
interfaceCtx->health = gSaveContext.save.playerData.health;
@@ -167,39 +167,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.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;
+ 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;
+ return true;
}
}
- return 0;
+ return false;
}
void LifeMeter_Draw(PlayState* play) {
@@ -230,6 +235,7 @@ void LifeMeter_Draw(PlayState* play) {
if ((gSaveContext.save.playerData.health % 0x10) == 0) {
fullHeartCount--;
}
+
offsetY = 0.0f;
offsetX = 0.0f;
curColorSet = -1;
@@ -376,12 +382,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 +406,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);
}
@@ -418,10 +425,8 @@ u32 LifeMeter_IsCritical(void) {
if (gSaveContext.save.playerData.healthCapacity <= 0x50) {
criticalThreshold = 0x10;
-
} else if (gSaveContext.save.playerData.healthCapacity <= 0xA0) {
criticalThreshold = 0x18;
-
} else if (gSaveContext.save.playerData.healthCapacity <= 0xF0) {
criticalThreshold = 0x20;
} else {
diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c
index a016e042a..2f446a62b 100644
--- a/src/code/z_map_disp.c
+++ b/src/code/z_map_disp.c
@@ -674,13 +674,13 @@ void func_8010534C(PlayState* play) {
D_801BEBB8.unk58 = 0;
}
-void func_8010549C(PlayState* globalCtx, void* segmentAddress) {
+void func_8010549C(PlayState* play, void* segmentAddress) {
MinimapEntry* var_v1;
MinimapList* temp_v0;
s32 i;
- if (Map_IsInBossArea(globalCtx) == 0) {
- D_801BEC1C = globalCtx->numRooms;
+ if (Map_IsInBossArea(play) == 0) {
+ D_801BEC1C = play->numRooms;
temp_v0 = Lib_SegmentedToVirtual(segmentAddress);
D_801BEC14 = *temp_v0;
var_v1 = Lib_SegmentedToVirtual(temp_v0->entry);
@@ -690,18 +690,18 @@ void func_8010549C(PlayState* globalCtx, void* segmentAddress) {
}
D_801BEC14.entry = D_801F5130;
- if (globalCtx->colCtx.colHeader != NULL) {
- D_801BEBB8.unk30 = globalCtx->colCtx.colHeader->minBounds.x;
- D_801BEBB8.unk32 = globalCtx->colCtx.colHeader->minBounds.z;
- D_801BEBB8.unk34 = globalCtx->colCtx.colHeader->maxBounds.x - globalCtx->colCtx.colHeader->minBounds.x;
- D_801BEBB8.unk36 = globalCtx->colCtx.colHeader->maxBounds.z - globalCtx->colCtx.colHeader->minBounds.z;
+ if (play->colCtx.colHeader != NULL) {
+ D_801BEBB8.unk30 = play->colCtx.colHeader->minBounds.x;
+ D_801BEBB8.unk32 = play->colCtx.colHeader->minBounds.z;
+ D_801BEBB8.unk34 = play->colCtx.colHeader->maxBounds.x - play->colCtx.colHeader->minBounds.x;
+ D_801BEBB8.unk36 = play->colCtx.colHeader->maxBounds.z - play->colCtx.colHeader->minBounds.z;
D_801BEBB8.unk38 = D_801BEBB8.unk30 + (D_801BEBB8.unk34 * 0.5f);
D_801BEBB8.unk3A = D_801BEBB8.unk32 + (D_801BEBB8.unk36 * 0.5f);
}
}
D_801BEBB8.unk0 = &D_801BEC14;
- func_80104F34(globalCtx);
- func_8010534C(globalCtx);
+ func_80104F34(play);
+ func_8010534C(play);
}
void func_8010565C(PlayState* play, s32 num, void* segmentAddress) {
@@ -1023,7 +1023,7 @@ void func_80106644(PlayState* play, s32 x, s32 z, s32 rot) {
}
if (((func_8010A0A4(play) == 0) || CHECK_DUNGEON_ITEM(1, gSaveContext.mapIndex)) &&
((func_8010A0A4(play) != 0) || Inventory_IsMapVisible(play->sceneId))) {
- if (play->interfaceCtx.unk_280 == 0) {
+ if (play->interfaceCtx.minigameState == 0) {
func_80105FE0(play, x, z, rot);
}
func_8010439C(play);
@@ -1056,7 +1056,7 @@ void MapDisp_DestroyIMap(PlayState* play) {
#ifdef NON_MATCHING
// alloc pause screen dungeon map
-void* func_801068FC(PlayState* play, void* heap) {
+void* func_801068FC(PlayState* play, void* heap, size_t size) {
void* heapNext; // sp3C
s32 temp_s2;
s32 temp_v0;
@@ -1479,13 +1479,11 @@ void func_80108124(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32
roomA = D_801F53B0[i].sides[0].room;
roomB = D_801F53B0[i].sides[1].room;
if (CHECK_DUNGEON_ITEM(2, gSaveContext.mapIndex) || (roomA < 0) ||
- (gSaveContext.save
- .permanentSceneFlags[Play_GetOriginalSceneId(func_80106D08(play->sceneId))]
+ (gSaveContext.save.permanentSceneFlags[Play_GetOriginalSceneId(func_80106D08(play->sceneId))]
.rooms &
(1 << roomA)) ||
(roomB < 0) ||
- (gSaveContext.save
- .permanentSceneFlags[Play_GetOriginalSceneId(func_80106D08(play->sceneId))]
+ (gSaveContext.save.permanentSceneFlags[Play_GetOriginalSceneId(func_80106D08(play->sceneId))]
.rooms &
(1 << roomB))) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
@@ -1562,7 +1560,7 @@ s32 func_80108A64(PlayState* play) {
if ((pauseCtx->state == 7) || ((pauseCtx->state >= 8) && (pauseCtx->state < 0x13))) {
return 1;
}
- if ((pauseCtx->state != 6) || (pauseCtx->unk_200 != 0)) {
+ if ((pauseCtx->state != 6) || (pauseCtx->mainState != 0)) {
return 1;
}
if (pauseCtx->alpha == 0) {
@@ -1607,8 +1605,7 @@ void func_80108AF8(PlayState* play) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 200, pauseCtx->alpha);
for (var_s1 = 0; var_s1 < D_801BEBB8.unk40; var_s1++) {
- if ((gSaveContext.save.permanentSceneFlags[Play_GetOriginalSceneId(func_80106D08(play->sceneId))]
- .unk_14 &
+ if ((gSaveContext.save.permanentSceneFlags[Play_GetOriginalSceneId(func_80106D08(play->sceneId))].unk_14 &
gBitFlags[4 - var_s1]) ||
CHECK_DUNGEON_ITEM2(2, spB4)) {
gDPLoadTextureBlock(POLY_OPA_DISP++, func_80108A10(D_801BEBB8.unk44 + var_s1), G_IM_FMT_IA, G_IM_SIZ_8b,
diff --git a/src/code/z_map_exp.c b/src/code/z_map_exp.c
index 8acf7569a..73ad47e60 100644
--- a/src/code/z_map_exp.c
+++ b/src/code/z_map_exp.c
@@ -226,8 +226,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,20 +239,20 @@ 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 |=
gBitFlags[FLOOR_INDEX_MAX - floor];
- XREG(94) = FLOOR_INDEX_MAX - floor;
+ R_REVERSE_FLOOR_INDEX = FLOOR_INDEX_MAX - floor;
if (interfaceCtx->mapRoomNum != sLastRoomNum) {
sLastRoomNum = interfaceCtx->mapRoomNum;
}
}
} else if (Map_IsInBossArea(play)) {
func_80105294();
- XREG(94) = FLOOR_INDEX_MAX - func_80105318();
+ R_REVERSE_FLOOR_INDEX = FLOOR_INDEX_MAX - func_80105318();
}
}
}
diff --git a/src/code/z_message.c b/src/code/z_message.c
index 94f1e5992..e3eb9839d 100644
--- a/src/code/z_message.c
+++ b/src/code/z_message.c
@@ -256,34 +256,33 @@ void func_8014CCB4(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3)
#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014D304.s")
-extern u16 D_801D0188[][9];
-extern s16 D_801D0250[];
+extern u16 D_801D0188[OWL_WARP_MAX][9];
+extern s16 D_801D0250[OWL_WARP_MAX];
void func_8014D62C(PlayState* play, s32* arg1, f32* arg2, s16* arg3) {
MessageContext* msgCtx = &play->msgCtx;
PauseContext* pauseCtx = &play->pauseCtx;
- s16 temp_s6;
+ s16 stringLimit;
s16 temp_s1 = *arg3;
s32 temp_s2 = *arg1;
f32 sp3C = *arg2;
- s16 phi_v0;
+ s16 owlWarpId;
s16 phi_s0;
- if ((func_8010A0A4(play) != 0) || (play->sceneId == SCENE_SECOM)) {
- phi_v0 = 0xA;
+ if (func_8010A0A4(play) || (play->sceneId == SCENE_SECOM)) {
+ owlWarpId = OWL_WARP_ENTRANCE;
} else {
- phi_v0 = pauseCtx->cursorPoint[PAUSE_WORLD_MAP];
+ owlWarpId = pauseCtx->cursorPoint[PAUSE_WORLD_MAP];
}
+ stringLimit = D_801D0250[owlWarpId];
- temp_s6 = D_801D0250[phi_v0];
-
- for (phi_s0 = 0; phi_s0 < temp_s6; phi_s0++, temp_s1++, temp_s2 += 0x80) {
- msgCtx->decodedBuffer.wchar[temp_s1] = D_801D0188[phi_v0][phi_s0];
- Font_LoadChar(play, D_801D0188[phi_v0][phi_s0], temp_s2);
+ for (phi_s0 = 0; phi_s0 < stringLimit; phi_s0++, temp_s1++, temp_s2 += 0x80) {
+ msgCtx->decodedBuffer.wchar[temp_s1] = D_801D0188[owlWarpId][phi_s0];
+ Font_LoadChar(play, D_801D0188[owlWarpId][phi_s0], temp_s2);
}
temp_s1--;
- sp3C += (temp_s6 - 1) * (16.0f * msgCtx->unk12098);
+ sp3C += (stringLimit - 1) * (16.0f * msgCtx->unk12098);
*arg3 = temp_s1;
*arg1 = temp_s2;
@@ -323,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);
@@ -371,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++;
}
@@ -392,11 +391,8 @@ 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]]);
diff --git a/src/code/z_message_nes.c b/src/code/z_message_nes.c
index fef293b46..759c3d611 100644
--- a/src/code/z_message_nes.c
+++ b/src/code/z_message_nes.c
@@ -17,31 +17,43 @@ u8 D_801D06F0[4][8] = { { "rupee(s)" }, //EN
// rupeesTextLength
u8 D_801D0710[4] = {8,8,5,8};
-//TextArea
-char D_801D0714[11][16] = {
- "Great Bay Coast",
- "Zora Cape",
- "Snowhead",
- "Mountain Village",
- "Clock Town",
- "Milk Road",
- "Woodfall",
- "Southern Swamp",
- "Ikana Canyon",
- "Stone Tower",
- "Entrance"
- };
+// sOwlWarpText
+char D_801D0714[OWL_WARP_MAX][16] = {
+ "Great Bay Coast", // OWL_WARP_GREAT_BAY_COAST
+ "Zora Cape", // OWL_WARP_ZORA_CAPE
+ "Snowhead", // OWL_WARP_SNOWHEAD
+ "Mountain Village", // OWL_WARP_MOUNTAIN_VILLAGE
+ "Clock Town", // OWL_WARP_CLOCK_TOWN
+ "Milk Road", // OWL_WARP_MILK_ROAD
+ "Woodfall", // OWL_WARP_WOODFALL
+ "Southern Swamp", // OWL_WARP_SOUTHERN_SWAMP
+ "Ikana Canyon", // OWL_WARP_IKANA_CANYON
+ "Stone Tower", // OWL_WARP_STONE_TOWER
+ "Entrance", // OWL_WARP_ENTRANCE
+};
-//TextAreaLength
-s16 D_801D07C4[11] = {15,9,8,16,10,9,8,14,12,11,8};
+// sOwlWarpTextLength
+s16 D_801D07C4[OWL_WARP_MAX] = {
+ 15, // OWL_WARP_GREAT_BAY_COAST
+ 9, // OWL_WARP_ZORA_CAPE
+ 8, // OWL_WARP_SNOWHEAD
+ 16, // OWL_WARP_MOUNTAIN_VILLAGE
+ 10, // OWL_WARP_CLOCK_TOWN
+ 9, // OWL_WARP_MILK_ROAD
+ 8, // OWL_WARP_WOODFALL
+ 14, // OWL_WARP_SOUTHERN_SWAMP
+ 12, // OWL_WARP_IKANA_CANYON
+ 11, // OWL_WARP_STONE_TOWER
+ 8, // OWL_WARP_ENTRANCE
+};
#endif
extern f32 D_801D0470[159];
extern u8 D_801D06F0[4][8];
extern u8 D_801D0710[4];
-extern u8 D_801D0714[11][16];
-extern s16 D_801D07C4[11];
+extern u8 D_801D0714[OWL_WARP_MAX][16];
+extern s16 D_801D07C4[OWL_WARP_MAX];
void Message_FindMessageNES(PlayState* play, u16 textId) {
MessageContext* msgCtx = &play->msgCtx;
@@ -200,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);
@@ -244,28 +252,28 @@ void Message_LoadTimeNES(PlayState* play, u8 arg1, s32* offset, f32* arg3, s16*
*arg3 = f;
}
-void Message_LoadAreaTextNES(PlayState* play, s32* offset, f32* arg2, s16* decodedBufPos) {
+void Message_LoadOwlWarpTextNES(PlayState* play, s32* offset, f32* arg2, s16* decodedBufPos) {
MessageContext* msgCtx = &play->msgCtx;
s16 p = *decodedBufPos;
s32 o = *offset;
f32 f = *arg2;
s16 i;
u8 currentChar;
- s16 currentArea;
+ s16 owlWarpId;
s16 stringLimit;
- if ((func_8010A0A4(play) != 0) || (play->sceneId == SCENE_SECOM)) {
- currentArea = 10;
+ if (func_8010A0A4(play) || (play->sceneId == SCENE_SECOM)) {
+ owlWarpId = OWL_WARP_ENTRANCE;
} else {
- currentArea = play->pauseCtx.cursorPoint[PAUSE_WORLD_MAP];
+ owlWarpId = play->pauseCtx.cursorPoint[PAUSE_WORLD_MAP];
}
- stringLimit = D_801D07C4[currentArea];
+ stringLimit = D_801D07C4[owlWarpId];
for (i = 0; i < stringLimit; i++) {
- msgCtx->decodedBuffer.schar[p] = D_801D0714[currentArea][i];
+ msgCtx->decodedBuffer.schar[p] = D_801D0714[owlWarpId][i];
currentChar = msgCtx->decodedBuffer.schar[p];
if (currentChar != ' ') {
- Font_LoadCharNES(play, D_801D0714[currentArea][i], o);
+ Font_LoadCharNES(play, D_801D0714[owlWarpId][i], o);
o += FONT_CHAR_TEX_SIZE;
}
currentChar = msgCtx->decodedBuffer.schar[p];
diff --git a/src/code/z_overlay.c b/src/code/z_overlay.c
index a358cefe6..2c8c8d6d7 100644
--- a/src/code/z_overlay.c
+++ b/src/code/z_overlay.c
@@ -1,14 +1,103 @@
+/**
+ * @file z_overlay.c
+ *
+ * Functions for handling transition overlays in memory
+ *
+ * Status codes returned from TransitionOverlay_Load and TransitionOverlay_Free:
+ *
+ * -1 : failed allocation or null reference
+ * 0 : successfully loaded/freed overlay
+ * 1 : successfully added/removed instance
+ * 2 : overlay is loaded but has no instances (?) TODO: Figure out why this exists
+ * 3 : internal overlay, so always loaded
+ */
+
#include "global.h"
#include "z64load.h"
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_overlay/func_801651B0.s")
+void* TransitionOverlay_VramToRam(TransitionOverlay* overlayEntry, void* vramAddr) {
+ void* loadedRamAddr = Lib_PhysicalToVirtual(overlayEntry->loadInfo.addr);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_overlay/func_80165224.s")
+ if ((loadedRamAddr != NULL) && (vramAddr >= overlayEntry->vramStart) && (vramAddr < overlayEntry->vramEnd)) {
+ return ((uintptr_t)loadedRamAddr - (uintptr_t)overlayEntry->vramStart) + (uintptr_t)vramAddr;
+ }
+ return vramAddr;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_overlay/func_80165288.s")
+void TransitionOverlay_VramToRamArray(TransitionOverlay* overlayEntry, void** vramAddrs, s32 count) {
+ s32 i;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_overlay/func_8016537C.s")
+ for (i = 0; i < count; i++) {
+ vramAddrs[i] = TransitionOverlay_VramToRam(overlayEntry, vramAddrs[i]);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_overlay/func_80165438.s")
+s32 TransitionOverlay_Load(TransitionOverlay* overlayEntry) {
+ s32 count;
+ void* loadedRamAddr;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_overlay/func_80165444.s")
+ if (overlayEntry->vromStart == 0) {
+ return 3;
+ }
+ if (Lib_PhysicalToVirtual(overlayEntry->loadInfo.addr) == NULL) {
+ loadedRamAddr = ZeldaArena_Malloc(VRAM_PTR_SIZE(overlayEntry));
+
+ if (loadedRamAddr == NULL) {
+ return -1;
+ }
+ Load2_LoadOverlay(overlayEntry->vromStart, overlayEntry->vromEnd, overlayEntry->vramStart,
+ overlayEntry->vramEnd, loadedRamAddr);
+ overlayEntry->loadInfo.addr = Lib_VirtualToPhysical(loadedRamAddr);
+ overlayEntry->loadInfo.count = 1;
+ return 0;
+ } else {
+ count = overlayEntry->loadInfo.count;
+ if (count != 0) {
+ count++;
+ overlayEntry->loadInfo.count = count;
+ if (count == 0) {
+ return 2;
+ } else {
+ return 1;
+ }
+ }
+ return 2;
+ }
+}
+
+s32 TransitionOverlay_Free(TransitionOverlay* overlayEntry) {
+ s32 count;
+ void* loadedRamAddr;
+
+ if (overlayEntry->vromStart == 0) {
+ return 3;
+ }
+ loadedRamAddr = Lib_PhysicalToVirtual(overlayEntry->loadInfo.addr);
+ if (loadedRamAddr != NULL) {
+ count = overlayEntry->loadInfo.count;
+ if (count != 0) {
+ count--;
+ overlayEntry->loadInfo.count = count;
+ if (count == 0) {
+ ZeldaArena_Free(loadedRamAddr);
+ overlayEntry->loadInfo.addr = Lib_VirtualToPhysical(NULL);
+ return 0;
+ }
+ return 1;
+ }
+ return 2;
+ }
+ return -1;
+}
+
+void TransitionOverlay_ClearLoadInfo(TransitionOverlay* overlayEntry) {
+ overlayEntry->loadInfo.word = 0; // Equivalent to overlayEntry->loadInfo.count = 0, overlayEntry->loadInfo.addr = 0;
+}
+
+void TransitionOverlay_SetSegment(TransitionOverlay* overlayEntry, void* vramStart, void* vramEnd, uintptr_t vromStart,
+ uintptr_t vromEnd) {
+ overlayEntry->vramStart = vramStart;
+ overlayEntry->vramEnd = vramEnd;
+ overlayEntry->vromStart = vromStart;
+ overlayEntry->vromEnd = vromEnd;
+}
diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c
index 4620dd816..cd4ffa67f 100644
--- a/src/code/z_parameter.c
+++ b/src/code/z_parameter.c
@@ -7,6 +7,13 @@
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
#include "overlays/actors/ovl_En_Mm3/z_en_mm3.h"
+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;
+
typedef struct {
/* 0x00 */ u8 scene;
/* 0x01 */ u8 flags1;
@@ -16,124 +23,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 +222,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 +243,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 +274,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 +934,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 +984,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.permanentSceneFlags); 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;
+ }
+}
void Interface_SetHudVisibility(u16 hudVisibility) {
if (gSaveContext.hudVisibility != hudVisibility) {
@@ -1141,13 +1774,50 @@ void Interface_UpdateHudAlphas(PlayState* play, s16 dimmingAlpha) {
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80110038.s")
+void func_80111CB4(PlayState* play);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80111CB4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_801129E4.s")
+void Interface_SetSceneRestrictions(PlayState* play) {
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ s16 i = 0;
+ u8 currentScene;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80112AF4.s")
+ 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);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80112AFC.s")
+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")
@@ -1172,7 +1842,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;
@@ -1203,7 +1875,7 @@ 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;
@@ -1446,7 +2118,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 +2127,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;
@@ -1674,7 +2346,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;
@@ -1797,12 +2469,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;
}
}
@@ -1898,6 +2570,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")
@@ -2045,8 +2718,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 +2737,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;
@@ -2142,8 +2813,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.save.playerData.magic -= magicToConsume;
@@ -2231,8 +2901,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();
}
@@ -2282,7 +2951,7 @@ 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)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) {
gSaveContext.save.playerData.magic =
((void)0, gSaveContext.save.playerData.magic) - ((void)0, gSaveContext.magicToConsume);
if (gSaveContext.save.playerData.magic <= 0) {
@@ -2295,7 +2964,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 +2976,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)) ||
+ ((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,19 +2998,19 @@ void Magic_Update(PlayState* play) {
interfaceCtx->magicConsumptionTimer--;
if (interfaceCtx->magicConsumptionTimer == 0) {
- if (!(gSaveContext.save.weekEventReg[14] & 8)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) {
gSaveContext.save.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)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) {
gSaveContext.save.playerData.magic -= 2;
}
if (gSaveContext.save.playerData.magic <= 0) {
@@ -2350,13 +3019,13 @@ void Magic_Update(PlayState* play) {
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->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)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) {
gSaveContext.save.playerData.magic--;
}
if (gSaveContext.save.playerData.magic <= 0) {
@@ -2366,19 +3035,19 @@ void Magic_Update(PlayState* play) {
}
}
}
- if (!(gSaveContext.save.weekEventReg[14] & 8)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) {
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 == 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 (!(gSaveContext.save.weekEventReg[14] & 8)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) {
gSaveContext.save.playerData.magic--;
}
if (gSaveContext.save.playerData.magic <= 0) {
@@ -2388,7 +3057,7 @@ void Magic_Update(PlayState* play) {
}
}
}
- if (!(gSaveContext.save.weekEventReg[14] & 8)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) {
Magic_FlashMeterBorder();
}
break;
@@ -2416,17 +3085,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,
@@ -2444,8 +3113,8 @@ void Magic_DrawMeter(PlayState* play) {
// 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)
@@ -2458,8 +3127,8 @@ void Magic_DrawMeter(PlayState* play) {
(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)
@@ -2479,6 +3148,7 @@ void Magic_DrawMeter(PlayState* play) {
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80116FD8.s")
+void func_801170B8(InterfaceContext* interfaceCtx);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_801170B8.s")
TexturePtr cUpLabelTextures[] = {
@@ -2491,6 +3161,7 @@ s16 startButtonLeftPos[] = {
s16 D_801BFAF4[] = { 0x1D, 0x1B };
s16 D_801BFAF8[] = { 0x1B, 0x1B };
+void func_80117100(PlayState* play);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80117100.s")
s16 D_801BFAFC[] = { 30, 24, 24, 24 };
@@ -2502,10 +3173,13 @@ s16 D_801BFB0C[] = { 0x23, 0x23, 0x33, 0x23 };
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80117BD0.s")
+void func_80118084(PlayState* play);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80118084.s")
+void func_80118890(PlayState* play);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80118890.s")
+void func_80118BA4(PlayState* play);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80118BA4.s")
extern TexturePtr D_08095AC0; // gMagicArrowEquipEffectTex
@@ -2513,19 +3187,553 @@ s16 D_801BFB14[] = { 255, 100, 255, 0 }; // magicArrowEffectsR
s16 D_801BFB1C[] = { 0, 100, 255, 0 }; // magicArrowEffectsG
s16 D_801BFB24[] = { 0, 255, 100, 0 }; // magicArrowEffectsB
+void func_80119030(PlayState* play);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80119030.s")
-s16 D_801BFB2C = 255;
+/**
+ * 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 == 3)) {
+ 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 +3759,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,52 +3767,560 @@ 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) {
@@ -2671,14 +4387,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 +4437,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,7 +4457,7 @@ 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;
@@ -2754,7 +4470,8 @@ void Interface_DrawTimers(PlayState* play) {
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 {
@@ -2844,7 +4561,7 @@ void Interface_DrawTimers(PlayState* play) {
gSaveContext.timerStates[sTimerId] = TIMER_STATE_COUNTING;
break;
- case TIMER_STATE_ENV_START:
+ case TIMER_STATE_ENV_HAZARD_START:
gSaveContext.timerCurTimes[sTimerId] = SECONDS_TO_TIMER(gSaveContext.save.playerData.health >> 1);
gSaveContext.timerDirections[sTimerId] = TIMER_COUNT_DOWN;
gSaveContext.timerTimeLimits[sTimerId] = gSaveContext.timerCurTimes[sTimerId];
@@ -2886,13 +4603,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);
}
@@ -2997,11 +4714,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,13 +4730,14 @@ 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))) &&
(sTimerBeepSfxSeconds != sTimerDigits[4])) {
@@ -3032,9 +4751,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,14 +4768,14 @@ 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]) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 50, 0, 255);
@@ -3081,7 +4800,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 +4808,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 +4817,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 +4842,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))) &&
@@ -3183,66 +4902,1196 @@ 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.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.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);
+ func_801170B8(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;
+ func_80172758(&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.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.playerData.rupees == CUR_CAPACITY(UPG_WALLET)) {
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 120, 255, 0, interfaceCtx->magicAlpha);
+ } else if (gSaveContext.save.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);
+
+ func_80117100(play);
+
+ if (player->transformation == ((void)0, gSaveContext.save.playerForm)) {
+ func_80118084(play);
+ }
+ func_80118890(play);
+
+ func_80118BA4(play);
+
+ func_80119030(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) {
+ func_80111CB4(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.playerData.health += 4;
+
+ if ((gSaveContext.save.playerData.health & 0xF) < 4) {
+ play_sound(NA_SE_SY_HP_RECOVER);
+ }
+
+ if (((void)0, gSaveContext.save.playerData.health) >= ((void)0, gSaveContext.save.playerData.healthCapacity)) {
+ gSaveContext.save.playerData.health = gSaveContext.save.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.playerData.rupees < CUR_CAPACITY(UPG_WALLET)) {
+ gSaveContext.rupeeAccumulator--;
+ gSaveContext.save.playerData.rupees++;
+ play_sound(NA_SE_SY_RUPY_COUNT);
+ } else {
+ // Max rupees
+ gSaveContext.save.playerData.rupees = CUR_CAPACITY(UPG_WALLET);
+ gSaveContext.rupeeAccumulator = 0;
+ }
+ } else if (gSaveContext.save.playerData.rupees != 0) {
+ if (gSaveContext.rupeeAccumulator <= -50) {
+ gSaveContext.rupeeAccumulator += 10;
+ gSaveContext.save.playerData.rupees -= 10;
+ if (gSaveContext.save.playerData.rupees < 0) {
+ gSaveContext.save.playerData.rupees = 0;
+ }
+ play_sound(NA_SE_SY_RUPY_COUNT);
+ } else {
+ gSaveContext.rupeeAccumulator++;
+ gSaveContext.save.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.playerData.isMagicAcquired) {
+ gSaveContext.save.playerData.isMagicAcquired = true;
+ }
+ gSaveContext.save.playerData.isDoubleMagicAcquired = true;
+ gSaveContext.save.playerData.magic = MAGIC_DOUBLE_METER;
+ gSaveContext.save.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.playerData.isMagicAcquired) {
+ gSaveContext.save.playerData.isMagicAcquired = true;
+ }
+ gSaveContext.save.playerData.isDoubleMagicAcquired = false;
+ gSaveContext.save.playerData.magic = MAGIC_NORMAL_METER;
+ gSaveContext.save.playerData.magicLevel = 0;
+ R_MAGIC_DBG_SET_UPGRADE = MAGIC_DBG_SET_UPGRADE_NO_ACTION;
+ }
+
+ if ((gSaveContext.save.playerData.isMagicAcquired) && (gSaveContext.save.playerData.magicLevel == 0)) {
+ // Prepare to step `magicCapacity` to full capacity
+ gSaveContext.save.playerData.magicLevel = gSaveContext.save.playerData.isDoubleMagicAcquired + 1;
+ gSaveContext.magicFillTarget = gSaveContext.save.playerData.magic;
+ gSaveContext.save.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.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_AllocEndAlign16(&play->state.heap, parameterStaticSize);
+ DmaMgr_SendRequest0(interfaceCtx->parameterSegment, SEGMENT_ROM_START(parameter_static), parameterStaticSize);
+
+ interfaceCtx->doActionSegment = THA_AllocEndAlign16(&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_AllocEndAlign16(&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_play.c b/src/code/z_play.c
index b34fdd77d..8f27a0bed 100644
--- a/src/code/z_play.c
+++ b/src/code/z_play.c
@@ -39,9 +39,9 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_Destroy.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_801663C4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_CompressI8ToI5.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80166644.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_DecompressI5ToI8.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_801668B4.s")
@@ -540,13 +540,13 @@ void Play_AssignPlayerActorCsIdsFromScene(GameState* thisx, s32 startActorCsId)
}
}
-// 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")
diff --git a/src/code/z_player_call.c b/src/code/z_player_call.c
index 8cd8207b7..a4ceeba95 100644
--- a/src/code/z_player_call.c
+++ b/src/code/z_player_call.c
@@ -14,7 +14,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 0888be7c5..d00325224 100644
--- a/src/code/z_player_lib.c
+++ b/src/code/z_player_lib.c
@@ -1,9 +1,37 @@
#include "global.h"
+#include "objects/gameplay_keep/gameplay_keep.h"
+
+#include "objects/object_link_boy/object_link_boy.h"
#include "objects/object_link_goron/object_link_goron.h"
#include "objects/object_link_zora/object_link_zora.h"
+#include "objects/object_link_nuts/object_link_nuts.h"
+#include "objects/object_link_child/object_link_child.h"
+#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"
void PlayerCall_Init(Actor* thisx, PlayState* play);
void PlayerCall_Destroy(Actor* thisx, PlayState* play);
@@ -17,19 +45,38 @@ 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];
+Vec3f D_801F59B0[2];
-extern s32 D_801F59E0;
+s32 D_801F59C8[2];
-extern Vec3f D_801F59E8;
+typedef struct {
+ /* 0x0 */ s16 unk_0;
+ /* 0x2 */ s16 unk_2;
+ /* 0x4 */ s16 unk_4;
+ /* 0x6 */ s16 unk_6;
+ /* 0x8 */ s16 unk_8;
+} struct_801F59D0; // size = 0xA
-void func_80127B64(struct_801F58B0 arg0[], UNK_TYPE arg1, Vec3f* arg2);
+struct_801F59D0 D_801F59D0;
+
+Vec3f* D_801F59DC;
+
+s32 D_801F59E0;
+
+s32 D_801F59E4;
+
+Vec3f D_801F59E8;
+
+s32 D_801F59F4;
+s32 D_801F59F8;
+
+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;
}
@@ -100,11 +147,9 @@ void func_801229A0(PlayState* play, Player* player) {
CLOSE_DISPS(play->state.gfxCtx);
}
-void func_801229EC(UNK_TYPE arg0, UNK_TYPE arg1) {
+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,
@@ -112,7 +157,6 @@ s16 sMaskObjectIds[PLAYER_MASK_MAX - 1] = {
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,
};
-#endif
// Load mask object?
/**
@@ -140,7 +184,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]);
}
}
}
@@ -197,14 +242,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 +282,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 +308,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,10 +325,10 @@ 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) {
+ if (player->doorType <= PLAYER_DOORTYPE_TALKING) {
ActorCutscene_SetIntentToPlay(0x7C);
} else {
ActorCutscene_SetIntentToPlay(0x7D);
@@ -315,33 +354,46 @@ void func_8012300C(PlayState* play, s32 arg1) {
player->unk_B2B = arg1;
}
-void func_8012301C(Player* player, PlayState* play2) {
+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[][18] = {
+ { 200, 666, 200, 700, 366, 200, 600, 175, 60, 800, 1000, -100, 600, 590, 800, 125, 300, 65 },
+ { 200, 1000, 300, 800, 500, 400, 800, 400, 120, 800, 550, -100, 600, 540, 750, 125, 400, 200 },
+ { 100, 1000, 300, 800, 250, 200, 800, 200, 90, 800, 350, -80, 600, 540, 750, 60, 200, 200 },
+ { 200, 1000, 300, 700, 550, 270, 600, 1000, 120, 800, 600, -100, 600, 590, 750, 125, 200, 130 },
+ { 200, 1000, 300, 700, 550, 270, 700, 300, 120, 800, 600, -100, 600, 590, 750, 125, 200, 130 },
+ { 200, 1000, 300, 700, 550, 270, 700, 300, 120, 800, 600, -100, 600, 590, 750, 125, 200, 130 },
+ { 200, 1000, 300, 700, 550, 270, 700, 200, 120, 800, 600, -140, 600, 590, 750, 125, 200, 130 },
+ { 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) {
@@ -403,8 +455,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 +472,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 +480,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.
@@ -478,27 +530,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 +558,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
+ 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 +714,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 +722,514 @@ 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_0, PLAYER_MODELTYPE_LH_OPEN, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_14,
+ PLAYER_MODELTYPE_WAIST },
+ /* PLAYER_MODELGROUP_4 */
+ { PLAYER_ANIMTYPE_0, 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_0, 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_0, PLAYER_MODELTYPE_LH_OPEN, PLAYER_MODELTYPE_RH_INSTRUMENT, PLAYER_MODELTYPE_SHEATH_14,
+ PLAYER_MODELTYPE_WAIST },
+ /* PLAYER_MODELGROUP_BOTTLE */
+ { PLAYER_ANIMTYPE_0, PLAYER_MODELTYPE_LH_BOTTLE, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_14,
+ PLAYER_MODELTYPE_WAIST },
+ /* PLAYER_MODELGROUP_13 */
+ { PLAYER_ANIMTYPE_0, PLAYER_MODELTYPE_LH_ONE_HAND_SWORD, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_15,
+ PLAYER_MODELTYPE_WAIST },
+ /* PLAYER_MODELGROUP_ZORA_FINS */
+ { PLAYER_ANIMTYPE_0, 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[PLAYER_SHIELD_MAX - 1][2] = {
+ { gLinkHumanRightHandHoldingHylianShieldDL, gLinkHumanRightHandHoldingHylianShieldDL },
+ { 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[][2] = {
+ { gLinkHumanHylianShieldWithMtxDL, gLinkHumanHylianShieldWithMtxDL },
+ { gLinkHumanMirrorShieldWithMtxDL, gLinkHumanMirrorShieldWithMtxDL },
+};
+
+Gfx* gPlayerSheathedSwords[][2] = {
+ { gLinkHumanSheathedKokiriSwordDL, gLinkHumanSheathedKokiriSwordDL },
+ { gLinkHumanSheathedRazorSwordDL, gLinkHumanSheathedRazorSwordDL },
+ { gLinkHumanSheathedGildedSwordDL, gLinkHumanSheathedGildedSwordDL },
+};
+
+Gfx* gPlayerSwordSheaths[][2] = {
+ { 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[][2] = {
+ { gLinkHumanLeftHandHoldingKokiriSwordDL, gLinkHumanLeftHandHoldingKokiriSwordDL },
+ { gLinkHumanLeftHandHoldingRazorSwordDL, gLinkHumanLeftHandHoldingRazorSwordDL },
+ { 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* D_801C0294[PLAYER_FORM_MAX] = {
+ gLinkFierceDeityLeftForearmDL, gLinkGoronLeftForearmDL, gLinkZoraLeftForearmDL,
+ gLinkDekuLeftForearmDL, gLinkHumanLeftForearmDL,
+};
+
+Gfx* D_801C02A8[PLAYER_FORM_MAX] = {
+ gLinkFierceDeityLeftHandDL, gLinkGoronLeftHandOpenDL, gLinkZoraLeftHandClosedDL,
+ gLinkDekuLeftHandDL, gLinkHumanLeftHandClosedDL,
+};
+
+Gfx* D_801C02BC[PLAYER_FORM_MAX] = {
+ gLinkFierceDeityRightShoulderDL, gLinkGoronRightShoulderDL, gLinkZoraRightShoulderDL,
+ gLinkDekuRightShoulderDL, gLinkHumanRightShoulderDL,
+};
+
+Gfx* D_801C02D0[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* D_801C02E4[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_0;
} 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_0;
}
}
@@ -649,19 +1237,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 +1257,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)) &&
+ (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 +1294,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 +1318,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 +1327,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,24 +1352,24 @@ 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;
+s32 func_80124110(Player* player, PlayerItemAction itemAction) {
+ s32 temp_v0 = itemAction - PLAYER_IA_FISHING_ROD;
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))) {
+ if (((itemAction - PLAYER_IA_FISHING_ROD) > (PLAYER_IA_FISHING_ROD - PLAYER_IA_FISHING_ROD)) &&
+ ((itemAction - PLAYER_IA_FISHING_ROD) < (PLAYER_IA_SWORD_GREAT_FAIRY - PLAYER_IA_FISHING_ROD))) {
return temp_v0;
}
}
@@ -790,36 +1378,36 @@ s32 func_80124110(Player* player, s32 actionParam) {
}
s32 func_80124148(Player* player) {
- return func_80124110(player, player->itemActionParam);
+ return func_80124110(player, player->heldItemAction);
}
-s32 Player_ActionToMeleeWeapon(s32 actionParam) {
- s32 weapon = actionParam - (PLAYER_AP_SWORD_KOKIRI - 1);
+s32 Player_ActionToMeleeWeapon(PlayerItemAction itemAction) {
+ s32 weapon = itemAction - (PLAYER_IA_SWORD_KOKIRI - 1);
- if ((weapon > 0) && (weapon <= (PLAYER_AP_ZORA_FINS - (PLAYER_AP_SWORD_KOKIRI - 1)))) {
+ if ((weapon > 0) && (weapon <= (PLAYER_IA_ZORA_FINS - (PLAYER_IA_SWORD_KOKIRI - 1)))) {
return weapon;
}
return 0;
}
s32 Player_GetMeleeWeaponHeld(Player* player) {
- return Player_ActionToMeleeWeapon(player->itemActionParam);
+ return Player_ActionToMeleeWeapon(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;
+s32 Player_ActionToBottle(Player* player, PlayerItemAction itemAction) {
+ s32 bottle = itemAction - PLAYER_IA_BOTTLE;
- // 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))) {
+ // Relies on bottle-related item actions to be contiguous
+ if ((bottle >= (PLAYER_IA_BOTTLE - PLAYER_IA_BOTTLE)) && (bottle <= (PLAYER_IA_BOTTLE_FAIRY - PLAYER_IA_BOTTLE))) {
return bottle;
}
@@ -827,14 +1415,14 @@ s32 Player_ActionToBottle(Player* player, s32 actionParam) {
}
s32 Player_GetBottleHeld(Player* Player) {
- return Player_ActionToBottle(Player, Player->itemActionParam);
+ return Player_ActionToBottle(Player, Player->heldItemAction);
}
-s32 Player_ActionToExplosive(Player* player, s32 actionParam) {
- s32 explosive = actionParam - PLAYER_AP_BOMB;
+s32 Player_ActionToExplosive(Player* player, PlayerItemAction itemAction) {
+ s32 explosive = itemAction - PLAYER_IA_BOMB;
- // Relies on explosive-related action params to be contiguous
- if ((explosive >= (PLAYER_AP_BOMB - PLAYER_AP_BOMB)) && (explosive <= (PLAYER_AP_BOMBCHU - PLAYER_AP_BOMB))) {
+ // Relies on explosive-related item actions to be contiguous
+ if ((explosive >= (PLAYER_IA_BOMB - PLAYER_IA_BOMB)) && (explosive <= (PLAYER_IA_BOMBCHU - PLAYER_IA_BOMB))) {
return explosive;
}
@@ -842,17 +1430,16 @@ s32 Player_ActionToExplosive(Player* player, s32 actionParam) {
}
s32 Player_GetExplosiveHeld(Player* player) {
- return Player_ActionToExplosive(player, player->itemActionParam);
+ return Player_ActionToExplosive(player, player->heldItemAction);
}
-// Convert actionParam to sword
-s32 func_80124278(Actor* actor, s32 actionParam) {
+s32 Player_ActionToSword(Actor* actor, PlayerItemAction itemAction) {
s32 sword = 0;
//! 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 = itemAction - PLAYER_IA_SWORD_KOKIRI, (sword >= PLAYER_IA_SWORD_KOKIRI - PLAYER_IA_SWORD_KOKIRI)) &&
+ (sword <= PLAYER_IA_SWORD_GREAT_FAIRY - PLAYER_IA_SWORD_KOKIRI))) {
return sword;
}
@@ -863,39 +1450,39 @@ 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;
+ 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;
+ 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;
}
+void func_80124420(Player* player);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80124420.s")
void func_80124618(struct_80124618 arg0[], f32 curFrame, Vec3f* arg2) {
@@ -911,7 +1498,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,16 +1510,185 @@ 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 } },
+};
+
+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 } },
+};
+
+Gfx gCullBackDList[] = {
+ gsSPSetGeometryMode(G_CULL_BACK),
+ gsSPEndDisplayList(),
+};
+Gfx gCullFrontDList[] = {
+ gsSPSetGeometryMode(G_CULL_FRONT),
+ gsSPEndDisplayList(),
+};
+
+TexturePtr sPlayerEyesTextures[] = {
+ gLinkHumanEyesOpenTex, gLinkHumanEyesHalfTex, gLinkHumanEyesClosedTex, gLinkHumanEyesRollRightTex,
+ gLinkHumanEyesRollLeftTex, gLinkHumanEyesRollUpTex, gLinkHumanEyesRollDownTex, object_link_child_Tex_003800,
+};
+
+TexturePtr sPlayerMouthTextures[] = {
+ gLinkHumanMouthClosedTex,
+ gLinkHumanMouthTeethTex,
+ gLinkHumanMouthAngryTex,
+ gLinkHumanMouthHappyTex,
+};
+
+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 = (jointTable[22].x & 0xF) - 1;
+ s32 mouthIndex = ((jointTable[22].x >> 4) & 0xF) - 1;
+ 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;
+ D_801F59E4 = 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 }, { 1156.0f, 0.0f, 0.0f }, { 1406.0f, 0.0f, 0.0f },
+ { 408.0f, 0.0f, 0.0f }, { 695.0f, 0.0f, 0.0f },
+};
+
+f32 D_801C08FC[PLAYER_FORM_MAX] = {
+ 1265.0f, 1056.0f, 1506.0f, 359.0f, 826.0f,
+};
+f32 D_801C0910[PLAYER_FORM_MAX] = {
+ 170.0416f, 133.63359f, 197.68358f, 16.646399f, 48.302498f,
+};
+f32 D_801C0924[PLAYER_FORM_MAX] = {
+ 10.019104f, 22.120003f, -29.12001f, 3.7582989f, -19.925102f,
+};
+f32 D_801C0938[PLAYER_FORM_MAX] = {
+ 5.0f, 4.0f, 1.0f, 1.0f, 3.0f,
+};
#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80124870.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80124CC4.s")
+void func_80124CC4(PlayState* play, Player* player, f32 arg2) {
+ static Vec3f D_801C094C = { -500.0f, -100.0f, 0.0f };
+ CollisionPoly* poly;
+ s32 bgId;
+ Vec3f sp7C;
+ Vec3f sp70;
+ Vec3f pos;
+ Vec3f sp58;
+ f32 sp54;
+ f32 scale;
+
+ D_801C094C.z = 0.0f;
+ Matrix_MultVec3f(&D_801C094C, &sp7C);
+ D_801C094C.z = arg2;
+ 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)) {
+ OPEN_DISPS(play->state.gfxCtx);
+
+ OVERLAY_DISP = Gfx_CallSetupDL(OVERLAY_DISP, 7);
+
+ SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, &pos, &sp58, &sp54);
+ if (sp54 < 200.0f) {
+ scale = 0.08f;
+ } else {
+ scale = (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++, gameplay_keep_DL_04F250);
+
+ 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;
@@ -968,7 +1723,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 +1731,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) {}
@@ -1067,14 +1822,11 @@ s32 func_801263FC(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s
#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80126440.s")
-extern u8 D_801C096C[PLAYER_SHIELD_MAX];
-#if 0
u8 D_801C096C[PLAYER_SHIELD_MAX] = {
COLTYPE_METAL,
COLTYPE_METAL,
COLTYPE_METAL,
};
-#endif
void func_801265C8(PlayState* play, Player* player, ColliderQuad* collider, Vec3f arg3[4]) {
if (player->stateFlags1 & PLAYER_STATE1_400000) {
@@ -1094,6 +1846,146 @@ void func_801265C8(PlayState* play, Player* player, ColliderQuad* collider, Vec3
}
}
+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[] = {
+ 0x0C,
+ 0x0F,
+};
+
+Gfx* D_801C0B20[] = {
+ object_mask_truth_DL_0001A0,
+ object_mask_kerfay_DL_000D40,
+ object_mask_yofukasi_DL_000490,
+ object_mask_rabit_DL_000610,
+ object_mask_ki_tan_DL_0004A0,
+ object_mask_json_DL_0004C0,
+ object_mask_romerny_DL_0007A0,
+ object_mask_zacho_DL_000700,
+ object_mask_posthat_DL_000290,
+ object_mask_meoto_DL_0005A0,
+ object_mask_bigelf_DL_0016F0,
+ object_mask_gibudo_DL_000250,
+ gDonGeroMaskDL,
+ object_mask_dancer_DL_000EF0,
+ object_mask_skj_DL_0009F0,
+ object_mask_stone_DL_000820,
+ object_mask_bree_DL_0003C0,
+ object_mask_bakuretu_DL_0005C0,
+ object_mask_bu_san_DL_000710,
+ object_mask_kyojin_DL_000380,
+ gameplay_keep_DL_00B260,
+ gameplay_keep_DL_005A10,
+ gameplay_keep_DL_005360,
+ gDekuMaskDL,
+ object_mask_boy_DL_000900,
+ object_mask_goron_DL_0014A0,
+ object_mask_zora_DL_000DB0,
+ object_mask_nuts_DL_001D90,
+};
+
+Vec3f D_801C0B90[] = {
+ { 950.0f, -800.0f, 300.0f },
+ { 950.0f, -800.0f, -300.0f },
+};
+
#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_8012669C.s")
void Player_DrawGetItemImpl(PlayState* play, Player* player, Vec3f* refPos, s32 drawIdPlusOne) {
@@ -1107,7 +1999,7 @@ void Player_DrawGetItemImpl(PlayState* play, Player* player, Vec3f* refPos, s32
OPEN_DISPS(play->state.gfxCtx);
- gSegments[6] = PHYSICAL_TO_VIRTUAL(player->giObjectSegment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(player->giObjectSegment);
gSPSegment(POLY_OPA_DISP++, 0x06, player->giObjectSegment);
gSPSegment(POLY_XLU_DISP++, 0x06, player->giObjectSegment);
@@ -1135,9 +2027,9 @@ 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;
@@ -1146,7 +2038,7 @@ void Player_DrawGetItem(PlayState* play, Player* player) {
Math_Vec3f_Copy(&refPos, &D_801F59E8);
}
- drawIdPlusOne = ABS_ALT(player->unk_B2A);
+ drawIdPlusOne = ABS_ALT(player->getItemDrawId);
Player_DrawGetItemImpl(play, player, &refPos, drawIdPlusOne);
}
}
@@ -1187,25 +2079,274 @@ void func_80127488(PlayState* play, Player* player, u8 alpha) {
}
void Player_DrawCouplesMask(PlayState* play, Player* player) {
- gSegments[0xA] = PHYSICAL_TO_VIRTUAL(player->maskObjectSegment);
+ gSegments[0xA] = VIRTUAL_TO_PHYSICAL(player->maskObjectSegment);
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, Actor* actor) {
+ 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;
+
+ for (i = 0; i < ARRAY_COUNT(D_801C0B90); i++) {
+ f32 scaleY = (D_801F59C8[i] / 400.0f) * 0.1f;
+
+ Matrix_MultVec3f(&D_801C0B90[i], &D_801F59B0[i]);
+
+ //! FAKE
+ if (1) {}
+
+ D_801F59B0[i].y += -10.0f * scaleY;
+
+ if (D_801F59C8[i] < 0x190) {
+ f32 scaleXZ = CLAMP_MAX(scaleY, 0.05f);
+
+ 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);
+
+ 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);
+
+ Matrix_Pop();
+
+ gfx = &gfx[6];
+ } else {
+ Player* player = (Player*)actor;
+ f32 temp_f0 = sqrtf(SQ(player->actor.velocity.x) + SQ(player->actor.velocity.z));
+ s16 phi_s0 = temp_f0 * 2000.0f;
+ f32 temp_f20;
+
+ bubbleVelocity.y = temp_f0 * 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 = temp_f0 * 0.2f;
+
+ if (temp_f20 > 4.0f) {
+ 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] -= 0x190;
+ }
+ }
+
+ 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->unk_B60 != 0) {
+ s32 alpha;
+
+ gSegments[0xA] = VIRTUAL_TO_PHYSICAL(player->maskObjectSegment);
+
+ AnimatedMat_DrawOpa(play, Lib_SegmentedToVirtual(&object_mask_bakuretu_Matanimheader_0011F8));
+
+ if (player->unk_B60 < 11) {
+ alpha = (player->unk_B60 / 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 {
+ /* 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 D_801C0CA8[] = {
+ { 255, 255, 255 }, { 80, 80, 255 }, { 136, 192, 255 }, { 136, 192, 255 }, { 184, 232, 232 }, { 248, 200, 0 },
+ { 255, 180, 0 }, { 0, 128, 0 }, { 252, 238, 0 }, { 131, 0, 174 }, { 64, 64, 32 }, { 0, 0, 255 },
+ { 255, 0, 255 }, { 255, 0, 255 }, { 255, 0, 0 }, { 0, 0, 255 }, { 0, 200, 0 }, { 255, 255, 255 },
+ { 255, 255, 255 }, { 255, 255, 255 }, { 80, 80, 255 },
+};
+
+Vec3f D_801C0CE8[PLAYER_FORM_MAX] = {
+ { 0.0f, 0.0f, 0.0f }, { 300.0f, 300.0f, -230.0f }, { 0.0f, 90.0f, -50.0f },
+ { 0.0f, 20.0f, -60.0f }, { 0.0f, 0.0f, 0.0f },
+};
+Vec3f D_801C0D24[PLAYER_FORM_MAX] = {
+ { 200.0f, 300.0f, 0.0f }, { 200.0f, 200.0f, 0.0f }, { 200.0f, 300.0f, 0.0f },
+ { 200.0f, 150.0f, 0.0f }, { 200.0f, 200.0f, 0.0f },
+};
+Vec3f D_801C0D60 = { 398.0f, 1419.0f, 244.0f };
+Vec3f D_801C0D6C = { 420.0f, 1210.0f, 380.0f };
+
+f32 D_801C0D78[] = {
+ 0.0f, // Player is not holding a melee weapon
+ 3000.0f, // PLAYER_IA_SWORD_KOKIRI
+ 3000.0f, // PLAYER_IA_SWORD_RAZOR
+ 4000.0f, // PLAYER_IA_SWORD_GILDED
+ 5500.0f, // PLAYER_IA_SWORD_GREAT_FAIRY
+ -1.0f, // PLAYER_IA_STICK
+ 2500.0f, // PLAYER_IA_ZORA_FINS
+};
+
+Gfx* D_801C0D94 = object_link_child_DL_017818;
+
+f32 D_801C0D98 = -35.0f;
+
+f32 D_801C0D9C = -395.0f;
+f32 D_801C0DA0 = 0.0f;
+
+f32 D_801C0DA4 = 0.0f;
+
+Vec3f D_801C0DA8[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 },
+};
+
+Vec3f D_801C0DD8 = { 50.0f, 800.0f, 0.0f };
+Vec3f D_801C0DE4 = { 50.0f, 850.0f, 0.0f };
+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,
+};
+
+Vec2f D_801C0E04[PLAYER_FORM_MAX] = {
+ { 140.0f, -130.0f }, { 0.0f, -200.0f }, { -160.0f, 0.0f }, { 220.0f, -200.0f }, { 0.0f, 0.0f },
+};
+
+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 D_801C0E40[PLAYER_FORM_MAX] = {
+ { 0.0f, 0.0f, 0.0f }, { -578.3f, -1100.9f, 0.0f }, { -189.5f, -594.87f, 0.0f },
+ { -570.0f, -812.0f, 0.0f }, { -230.0f, -520.0f, 0.0f },
+};
+Vec3f D_801C0E7C = { 1100.0f, -700.0f, 0.0f };
+
+// unused
+Vec3f D_801C0E88 = { 1600.0f, -1700.0f, -70.0f };
+
+Vec3f D_801C0E94 = { 1800.0f, -300.0f, 0.0f };
+Vec3f D_801C0EA0 = { 1300.0f, -400.0f, 0.0f };
+Vec3f D_801C0EAC = { 630.0f, 100.0f, -30.0f };
+Vec3s D_801C0EB8 = { 0, 0, 0x7FFF };
+
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/Player_DrawBunnyHood.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80127B64.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80127BE8.s")
+void func_80127DA4(PlayState* play, struct_801F58B0 arg1[], struct_80128388_arg1 arg2[], s32 arg3, Vec3f* arg4,
+ Vec3f* arg5, u32* arg6);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80127DA4.s")
+void func_80128388(struct_801F58B0 arg0[], struct_80128388_arg1 arg1[], s32 arg2, Mtx** arg3);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80128388.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801284A0.s")
+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[7], &player->bodyPartsPos[0], 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);
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80128640.s")
diff --git a/src/code/z_quake.c b/src/code/z_quake.c
index 964935ea1..b57012ce1 100644
--- a/src/code/z_quake.c
+++ b/src/code/z_quake.c
@@ -738,10 +738,10 @@ 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;
diff --git a/src/code/z_rcp.c b/src/code/z_rcp.c
index ace1cc4cd..39f09f1d4 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 */
@@ -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) && (D_801F6D10 < 2)) {
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 e198e95ed..eb615c409 100644
--- a/src/code/z_room.c
+++ b/src/code/z_room.c
@@ -105,7 +105,7 @@ s32 Room_HandleLoadCallbacks(PlayState* play, RoomContext* roomCtx) {
roomCtx->unk31 = 0;
roomCtx->curRoom.segment = roomCtx->activeRoomVram;
// TODO: Segment number enum
- gSegments[0x03] = PHYSICAL_TO_VIRTUAL(roomCtx->activeRoomVram);
+ gSegments[0x03] = VIRTUAL_TO_PHYSICAL(roomCtx->activeRoomVram);
Scene_ProcessHeader(play, (SceneCmd*)roomCtx->curRoom.segment);
func_80123140(play, GET_PLAYER(play));
@@ -130,7 +130,7 @@ s32 Room_HandleLoadCallbacks(PlayState* play, RoomContext* roomCtx) {
void Room_Draw(PlayState* play, Room* room, u32 flags) {
if (room->segment != NULL) {
// TODO: Segment number enum
- gSegments[0x03] = PHYSICAL_TO_VIRTUAL(room->segment);
+ gSegments[0x03] = VIRTUAL_TO_PHYSICAL(room->segment);
roomDrawFuncs[room->mesh->type0.type](play, room, flags);
}
return;
diff --git a/src/code/z_scene.c b/src/code/z_scene.c
index 419db5ac0..ac0770c80 100644
--- a/src/code/z_scene.c
+++ b/src/code/z_scene.c
@@ -52,7 +52,7 @@ void Object_InitBank(GameState* gameState, ObjectContext* objectCtx) {
objectCtx->spaceEnd = (void*)((u32)objectCtx->spaceStart + spaceSize);
objectCtx->mainKeepIndex = Object_Spawn(objectCtx, GAMEPLAY_KEEP);
- gSegments[0x04] = PHYSICAL_TO_VIRTUAL(objectCtx->status[objectCtx->mainKeepIndex].segment);
+ gSegments[0x04] = VIRTUAL_TO_PHYSICAL(objectCtx->status[objectCtx->mainKeepIndex].segment);
}
void Object_UpdateBank(ObjectContext* objectCtx) {
@@ -108,7 +108,7 @@ s32 Object_IsLoaded(ObjectContext* objectCtx, s32 index) {
void Object_LoadAll(ObjectContext* objectCtx) {
s32 i;
s32 id;
- u32 vromSize;
+ uintptr_t vromSize;
for (i = 0; i < objectCtx->num; i++) {
id = objectCtx->status[i].id;
@@ -124,7 +124,7 @@ void Object_LoadAll(ObjectContext* objectCtx) {
void* func_8012F73C(ObjectContext* objectCtx, s32 iParm2, s16 id) {
u32 addr;
- u32 vromSize;
+ uintptr_t vromSize;
RomFile* fileTableEntry;
objectCtx->status[iParm2].id = -id;
@@ -148,8 +148,9 @@ void Scene_HeaderCmdSpawnList(PlayState* play, SceneCmd* cmd) {
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 == 0x02) &&
+ (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);
@@ -216,7 +217,9 @@ void Scene_HeaderCmdEntranceList(PlayState* play, SceneCmd* cmd) {
// SceneTableEntry Header Command 0x07: Special Files
void Scene_HeaderCmdSpecialFiles(PlayState* play, SceneCmd* cmd) {
- static RomFile tatlMessageFiles[2] = {
+ // @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) },
};
@@ -224,11 +227,11 @@ void Scene_HeaderCmdSpecialFiles(PlayState* play, SceneCmd* cmd) {
if (cmd->specialFiles.subKeepIndex != 0) {
play->objectCtx.subKeepIndex = Object_Spawn(&play->objectCtx, cmd->specialFiles.subKeepIndex);
// TODO: Segment number enum?
- gSegments[0x05] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[play->objectCtx.subKeepIndex].segment);
+ 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_LoadScene(play, &naviQuestHintFiles[cmd->specialFiles.naviQuestHintFileId - 1]);
}
}
@@ -350,7 +353,7 @@ void Scene_LoadAreaTextures(PlayState* play, s32 fileIndex) {
{ SEGMENT_ROM_START(scene_texture_07), SEGMENT_ROM_END(scene_texture_07) },
{ SEGMENT_ROM_START(scene_texture_08), SEGMENT_ROM_END(scene_texture_08) },
};
- u32 vromStart = sceneTextureFiles[fileIndex].vromStart;
+ uintptr_t vromStart = sceneTextureFiles[fileIndex].vromStart;
size_t size = sceneTextureFiles[fileIndex].vromEnd - vromStart;
if (size != 0) {
@@ -375,30 +378,31 @@ void Scene_HeaderCmdSkyboxDisables(PlayState* play, SceneCmd* cmd) {
// SceneTableEntry Header Command 0x10: Time Settings
void Scene_HeaderCmdTimeSettings(PlayState* play, SceneCmd* cmd) {
- if (cmd->timeSettings.hour != 0xFF && cmd->timeSettings.min != 0xFF) {
+ 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.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.cutscene < 0xFFF0)) {
gSaveContext.skyboxTime = gSaveContext.save.time;
if ((gSaveContext.skyboxTime >= CLOCK_TIME(4, 0)) && (gSaveContext.skyboxTime < CLOCK_TIME(6, 30))) {
@@ -468,8 +472,8 @@ void Scene_HeaderCmdAltHeaderList(PlayState* play, SceneCmd* cmd) {
// SceneTableEntry Header Command 0x17: Cutscene List
void Scene_HeaderCmdCutsceneList(PlayState* play, SceneCmd* cmd) {
- play->csCtx.sceneCsCount = cmd->base.data1;
- play->csCtx.sceneCsList = Lib_SegmentedToVirtual(cmd->base.data2);
+ play->csCtx.sceneCsCount = cmd->cutsceneList.sceneCsCount;
+ play->csCtx.sceneCsList = Lib_SegmentedToVirtual(cmd->cutsceneList.segment);
}
// SceneTableEntry Header Command 0x1B: Actor Cutscene List
@@ -492,8 +496,8 @@ void Scene_HeaderCmdMiniMapCompassInfo(PlayState* play, SceneCmd* cmd) {
func_8010565C(play, cmd->minimapChests.num, cmd->minimapChests.segment);
}
-// SceneTableEntry Header Command 0x1A: Sets Area Visited Flag
-void Scene_HeaderCmdSetAreaVisitedFlag(PlayState* play, SceneCmd* cmd) {
+// SceneTableEntry Header Command 0x19: Sets Region Visited Flag
+void Scene_HeaderCmdSetRegionVisitedFlag(PlayState* play, SceneCmd* cmd) {
s16 j = 0;
s16 i = 0;
@@ -502,7 +506,7 @@ void Scene_HeaderCmdSetAreaVisitedFlag(PlayState* play, SceneCmd* cmd) {
i++;
j = 0;
- if (i == ARRAY_COUNT(gSceneIdsPerRegion)) {
+ if (i == REGION_MAX) {
break;
}
}
@@ -514,8 +518,9 @@ void Scene_HeaderCmdSetAreaVisitedFlag(PlayState* play, SceneCmd* cmd) {
j++;
}
- if (i < ARRAY_COUNT(gSceneIdsPerRegion)) {
- gSaveContext.save.mapsVisited = (gBitFlags[i] | gSaveContext.save.mapsVisited) | gSaveContext.save.mapsVisited;
+ if (i < REGION_MAX) {
+ gSaveContext.save.regionsVisited =
+ (gBitFlags[i] | gSaveContext.save.regionsVisited) | gSaveContext.save.regionsVisited;
}
}
@@ -561,7 +566,7 @@ s32 Scene_ProcessHeader(PlayState* play, SceneCmd* header) {
Scene_HeaderCmdEchoSetting,
Scene_HeaderCmdCutsceneList,
Scene_HeaderCmdAltHeaderList,
- Scene_HeaderCmdSetAreaVisitedFlag,
+ Scene_HeaderCmdSetRegionVisitedFlag,
Scene_HeaderCmdAnimatedMaterials,
Scene_HeaderCmdActorCutsceneList,
Scene_HeaderCmdMiniMap,
@@ -588,7 +593,7 @@ s32 Scene_ProcessHeader(PlayState* play, SceneCmd* header) {
}
/**
- * 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;
diff --git a/src/code/z_scene_proc.c b/src/code/z_scene_proc.c
index 8ddde8a82..67f503e58 100644
--- a/src/code/z_scene_proc.c
+++ b/src/code/z_scene_proc.c
@@ -113,23 +113,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);
}
@@ -459,8 +459,8 @@ void AnimatedMat_DrawStep(PlayState* play, AnimatedMaterial* matAnim, u32 step)
/**
* Draws an animated material with a step to only the OPA buffer.
*/
-void AnimatedMat_DrawStepOpa(PlayState* play, AnimatedMaterial* textures, u32 step) {
- AnimatedMat_DrawMain(play, textures, 1, step, 1);
+void AnimatedMat_DrawStepOpa(PlayState* play, AnimatedMaterial* matAnim, u32 step) {
+ AnimatedMat_DrawMain(play, matAnim, 1, step, 1);
}
/**
@@ -709,8 +709,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 +719,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 +779,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_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..21d8bde40 100644
--- a/src/code/z_shrink_window.c
+++ b/src/code/z_shrink_window.c
@@ -2,7 +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 8321a309e..318f49809 100644
--- a/src/code/z_skelanime.c
+++ b/src/code/z_skelanime.c
@@ -8,9 +8,9 @@ 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* pos, s16 angle);
+void SkelAnime_UpdateTranslation(SkelAnime* skelAnime, Vec3f* diff, s16 angle);
void LinkAnimation_Change(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation, f32 playSpeed,
- f32 frame, f32 frameCount, u8 animationMode, f32 morphFrames);
+ f32 startFrame, f32 endFrame, u8 mode, f32 morphFrames);
void SkelAnime_CopyFrameTable(SkelAnime* skelAnime, Vec3s* dst, Vec3s* src);
static AnimationEntryCallback sAnimationLoadDone[] = {
@@ -200,7 +200,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 +418,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 +560,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);
@@ -822,7 +822,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);
@@ -996,7 +996,7 @@ void AnimationContext_SetLoadFrame(PlayState* play, LinkAnimationHeader* animati
if (entry != NULL) {
LinkAnimationHeader* linkAnimHeader = Lib_SegmentedToVirtual(animation);
- u32 ram = frameTable;
+ uintptr_t ram = frameTable;
osCreateMesgQueue(&entry->data.load.msgQueue, &entry->data.load.msg, 1);
DmaMgr_SendRequestImpl(&entry->data.load.req, ram,
@@ -1187,7 +1187,7 @@ void AnimationContext_Update(PlayState* play, AnimationContext* animationCtx) {
* tables if not given.
*/
void SkelAnime_InitLink(PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeader* skeletonHeaderSeg,
- LinkAnimationHeader* animation, s32 flags, Vec3s* jointTable, Vec3s* morphTable,
+ LinkAnimationHeader* animation, s32 flags, void* jointTableBuffer, void* morphTableBuffer,
s32 limbBufCount) {
FlexSkeletonHeader* skeletonHeader;
s32 headerJointCount;
@@ -1216,12 +1216,12 @@ void SkelAnime_InitLink(PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeade
allocSize += 2;
}
- 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);
@@ -1443,12 +1443,12 @@ void LinkAnimation_InterpJointMorph(PlayState* play, SkelAnime* skelAnime, f32 w
* Requests loading frame data from the Link 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;
+ LinkAnimationHeader* 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);
@@ -1458,12 +1458,12 @@ void LinkAnimation_BlendToJoint(PlayState* play, SkelAnime* skelAnime, LinkAnima
* Requests loading frame data from the Link 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;
+ LinkAnimationHeader* 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);
diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c
index 6f9006146..94d0e69c3 100644
--- a/src/code/z_sram_NES.c
+++ b/src/code/z_sram_NES.c
@@ -131,16 +131,109 @@ u32 D_801C5FC0[SCENE_MAX][4] = {
{ 0, 0, 1, 0 }, // SCENE_ALLEY
};
-// Related to weekEventReg
+// 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.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,
+ /* 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 +268,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 };
@@ -232,16 +319,11 @@ void Sram_ClearHighscores(void) {
* 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,7 +336,7 @@ 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;
@@ -296,7 +378,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));
}
@@ -316,38 +398,38 @@ 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;
+ 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);
}
}
@@ -386,10 +468,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)) {
@@ -482,10 +564,8 @@ void Sram_IncrementDay(void) {
gSaveContext.save.bombersCaughtOrder[3] = 0;
gSaveContext.save.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,7 +587,7 @@ 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;
@@ -832,9 +912,9 @@ void Sram_InitDebugSave(void) {
Lib_MemCpy(&gSaveContext.save.inventory, &sSaveDebugInventory, sizeof(Inventory));
Lib_MemCpy(&gSaveContext.save.checksum, &sSaveDebugChecksum, sizeof(gSaveContext.save.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;
@@ -848,12 +928,9 @@ void Sram_InitDebugSave(void) {
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;
@@ -990,12 +1067,10 @@ 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_20_02)) {
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_33_80)) {
gSaveContext.save.entrance = ENTRANCE(MOUNTAIN_VILLAGE_SPRING, 8);
}
@@ -1561,8 +1636,7 @@ void Sram_SaveSpecialNewDay(PlayState* play) {
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);
diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c
index efc6774a7..8f412364d 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;
@@ -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;
}
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_vr_box.c b/src/code/z_vr_box.c
index 6dd46633c..907004a7a 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,114 +183,120 @@ 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;
- 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 1:
+ // 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->primR = 145;
+ skyboxCtx->primG = 120;
+ skyboxCtx->primB = 155;
- skyboxCtx->envR = 40;
- skyboxCtx->envG = 0;
- skyboxCtx->envB = 40;
+ skyboxCtx->envR = 40;
+ skyboxCtx->envG = 0;
+ skyboxCtx->envB = 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->rotZ = 3.15000009537f;
+ }
+ break;
+
+ case 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 1:
+ 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) {
+void Skybox_Init(GameState* gameState, SkyboxContext* skyboxCtx, s16 skyboxId) {
skyboxCtx->skyboxShouldDraw = 0;
skyboxCtx->rotX = skyboxCtx->rotY = skyboxCtx->rotZ = 0.0f;
- func_801431E8(gameState, skyboxCtx, skyType);
+ Skybox_Setup(gameState, skyboxCtx, skyboxId);
- if (skyType != 0) {
+ if (skyboxId != 0) {
skyboxCtx->dListBuf = THA_AllocEndAlign16(&gameState->heap, 0x3840);
- if (skyType == 5) {
+ if (skyboxId == 5) {
// Allocate enough space for the vertices for a 6 sided skybox (cube)
skyboxCtx->roomVtx = THA_AllocEndAlign16(&gameState->heap, sizeof(Vtx) * 32 * 6);
func_80143148(skyboxCtx, 6);
diff --git a/src/code/z_vr_box_draw.c b/src/code/z_vr_box_draw.c
index 326fcb3e2..88da288f0 100644
--- a/src/code/z_vr_box_draw.c
+++ b/src/code/z_vr_box_draw.c
@@ -25,7 +25,7 @@ void SkyboxDraw_Draw(SkyboxContext* skyboxCtx, GraphicsContext* gfxCtx, s16 skyb
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));
@@ -40,7 +40,7 @@ void SkyboxDraw_Draw(SkyboxContext* skyboxCtx, GraphicsContext* gfxCtx, s16 skyb
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,
@@ -49,13 +49,13 @@ void SkyboxDraw_Draw(SkyboxContext* skyboxCtx, GraphicsContext* gfxCtx, s16 skyb
gDPSetEnvColor(POLY_OPA_DISP++, skyboxCtx->envR, skyboxCtx->envG, skyboxCtx->envB, 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++);
diff --git a/src/libultra/flash/osFlash.c b/src/libultra/flash/osFlash.c
index edba06fc2..cd4420c4a 100644
--- a/src/libultra/flash/osFlash.c
+++ b/src/libultra/flash/osFlash.c
@@ -32,9 +32,9 @@ OSPiHandle* osFlashReInit(u8 latency, u8 pulse, u8 pageSize, u8 relDuration, u32
return &__osFlashHandler;
}
-void osFlashChange(u32 flash_num) {
- __osFlashHandler.baseAddress = RDRAM_UNCACHED | (FRAM_STATUS_REGISTER + (flash_num << 17));
- __osFlashHandler.type = 8 + flash_num;
+void osFlashChange(u32 flashNum) {
+ __osFlashHandler.baseAddress = RDRAM_UNCACHED | (FRAM_STATUS_REGISTER + (flashNum << 17));
+ __osFlashHandler.type = 8 + flashNum;
return;
}
diff --git a/src/libultra/io/epirawdma.c b/src/libultra/io/epirawdma.c
index fd7573151..aadd8ad5b 100644
--- a/src/libultra/io/epirawdma.c
+++ b/src/libultra/io/epirawdma.c
@@ -1,6 +1,6 @@
#include "global.h"
-s32 __osEPiRawStartDma(OSPiHandle* handle, s32 direction, u32 cartAddr, void* dramAddr, size_t size) {
+s32 __osEPiRawStartDma(OSPiHandle* handle, s32 direction, uintptr_t cartAddr, void* dramAddr, size_t size) {
s32 status;
OSPiHandle* curHandle;
diff --git a/src/libultra/io/sirawread.c b/src/libultra/io/sirawread.c
index 19327db49..7e3537603 100644
--- a/src/libultra/io/sirawread.c
+++ b/src/libultra/io/sirawread.c
@@ -1,6 +1,6 @@
#include "global.h"
-s32 __osSiRawReadIo(u32 devAddr, u32* data) {
+s32 __osSiRawReadIo(uintptr_t devAddr, u32* data) {
if (__osSiDeviceBusy()) {
return -1;
}
diff --git a/src/libultra/io/sirawwrite.c b/src/libultra/io/sirawwrite.c
index 040fdee0d..0f98b08c5 100644
--- a/src/libultra/io/sirawwrite.c
+++ b/src/libultra/io/sirawwrite.c
@@ -1,6 +1,6 @@
#include "global.h"
-s32 __osSiRawWriteIo(u32 devAddr, u32 data) {
+s32 __osSiRawWriteIo(uintptr_t devAddr, u32 data) {
if (__osSiDeviceBusy() != 0) {
return -1;
}
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..e3ac3e753 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_100) ||
+ (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_DistanceBetweenActors(&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.speedXZ, -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..41a3f25ec 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;
}
@@ -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..5c5cd0c87 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
@@ -166,7 +166,7 @@ void ArrowIce_Fly(ArrowIce* this, PlayState* play) {
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..b7918b5b4 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;
}
@@ -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..dcf37d848 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,
@@ -104,12 +104,12 @@ void BgAstrBombwall_Init(Actor* thisx, PlayState* play) {
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);
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..4f42a8b3c 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
@@ -15,6 +15,4 @@ typedef struct BgAstrBombwall {
/* 0x180 */ ColliderTrisElement colliderElements[2];
/* 0x238 */ s16 cutscenes[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..4c73987ec 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_33_80) || 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_55_80)) {
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_55_80)) {
+ 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..19cafc2bd 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,
@@ -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 &&
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..68b2d77d2 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,
@@ -174,7 +174,7 @@ void BgCtowerGear_UpdateOrgan(Actor* thisx, PlayState* play) {
func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
break;
case 3:
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
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..85dcb0aca 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,
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..c962cf8ef 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,
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..f2200e96f 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
@@ -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 8e0c025e2..d6819aa00 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
@@ -16,7 +16,7 @@
void BgDblueMovebg_Init(Actor* thisx, PlayState* play);
void BgDblueMovebg_Destroy(Actor* thisx, PlayState* play);
void BgDblueMovebg_Update(Actor* thisx, PlayState* play);
-void BgDblueMovebg_Draw(Actor* thisx, PlayState* play);
+void BgDblueMovebg_Draw(Actor* thisx, PlayState* play2);
void func_80A2A1E0(BgDblueMovebg* this, PlayState* play);
void func_80A2A32C(BgDblueMovebg* this, PlayState* play);
@@ -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,
@@ -167,7 +167,7 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) {
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;
@@ -238,7 +238,7 @@ 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;
@@ -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);
}
}
}
@@ -390,7 +390,7 @@ void func_80A2A32C(BgDblueMovebg* this, PlayState* play) {
this->unk_172 |= 8;
this->actionFunc = func_80A2A444;
} else {
- player->stateFlags2 &= ~0x10;
+ player->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
}
}
@@ -410,7 +410,7 @@ void func_80A2A444(BgDblueMovebg* this, PlayState* play) {
this->dyna.actor.shape.rot.y =
(s32)((this->unk_18C + temp_v0) * 0.1f * (0x10000 / 360.0f)) + 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,7 +420,7 @@ 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);
@@ -452,7 +452,7 @@ void func_80A2A688(BgDblueMovebg* this, PlayState* play) {
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);
}
}
@@ -498,7 +498,7 @@ void func_80A2A7F8(BgDblueMovebg* this, PlayState* play) {
this->dyna.actor.shape.rot.y =
(s32)((this->unk_18C + sp26) * 0.1f * (0x10000 / 360.0f)) + 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 +516,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;
@@ -565,12 +565,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 +632,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;
}
}
@@ -733,7 +733,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 +812,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..8fc016585 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
@@ -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..b4c97fdde 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,
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..5ab64495e 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
@@ -28,6 +28,4 @@ typedef struct BgDblueWaterfall {
/* 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..6ec845e2c 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;
+ ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ 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 (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
+ ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ this->fadeOutTimer = 50;
+ func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
+ Flags_SetSwitch(play, BG_DKJAIL_GET_SWITCH(&this->dyna.actor));
+ BgDkjailIvy_IvyCutEffects(this, play);
+ Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_GRASS_WALL_BROKEN);
+ BgDkjailIvy_SetupFadeOut(this);
+ } else {
+ ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ }
+}
-#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..71aa958dc 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,
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..4ae6a8ed7 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,
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..3a7916e7d 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,
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..40a981a6e 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,
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..5cb337238 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,
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..cfd9003ec 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,
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..331a6dfe5 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);
@@ -211,7 +218,7 @@ void BgHakaBombwall_EndCutscene(BgHakaBombwall* this, PlayState* play) {
this->csTimer--;
if (this->csTimer <= 0) {
ActorCutscene_Stop(this->dyna.actor.cutscene);
- Actor_MarkForDeath(&this->dyna.actor);
+ 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..412ea3a39 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,
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..a8d63c309 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,
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..3c607e0e2 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
@@ -13,6 +13,4 @@ typedef struct BgHakaTomb {
/* 0x160 */ s16 cutscenes[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..bde3c8540 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;
}
@@ -414,7 +414,7 @@ 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);
+ 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..0b8d2490b 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,
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..7f77b6645 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
@@ -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,
@@ -709,7 +709,7 @@ void BgHakuginPost_Init(Actor* thisx, PlayState* play) {
func_80A9CA94(this);
} else {
func_80A9AFB4(this, play, &D_80A9E028);
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
}
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..5a23fa070 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
@@ -70,6 +70,4 @@ typedef struct BgHakuginPost {
/* 0x186 */ s16 unk_186;
} 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..aa22dd8af 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,
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..164220b29 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
@@ -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..265490e52 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,
@@ -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..743213652 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,
@@ -178,8 +178,7 @@ void BgIcicle_Fall(BgIcicle* this, PlayState* play) {
func_800C6314(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);
@@ -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..9d249314a 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,
@@ -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;
}
@@ -297,7 +297,7 @@ void func_80B7F290(BgIkanaBlock* this, PlayState* play) {
Actor_PlaySfxAtPos(&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)) {
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..04f7f514b 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) {
@@ -349,14 +353,14 @@ void func_80BD5134(BgIkanaBombwall* this, PlayState* play) {
this->unk_1AC--;
if (this->unk_1AC <= 0) {
ActorCutscene_Stop(this->dyna.actor.cutscene);
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
} else if (this->dyna.actor.cutscene >= 0) {
if (ActorCutscene_GetCurrentIndex() != this->dyna.actor.cutscene) {
- Actor_MarkForDeath(&this->dyna.actor);
+ 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 4f1434dc2..678080ae1 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
@@ -12,7 +12,7 @@
#define THIS ((BgIkanaDharma*)thisx)
-void BgIkanaDharma_Init(Actor* thisx, PlayState* play);
+void BgIkanaDharma_Init(Actor* thisx, PlayState* play2);
void BgIkanaDharma_Destroy(Actor* thisx, PlayState* play);
void BgIkanaDharma_Update(Actor* thisx, PlayState* play);
void BgIkanaDharma_Draw(Actor* thisx, PlayState* play);
@@ -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,
@@ -204,13 +204,14 @@ void BgIkanaDharma_WaitForCutsceneToEnd(BgIkanaDharma* this, PlayState* play) {
}
}
- 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) {
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 cfa67eb1d..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
@@ -16,7 +16,7 @@
#define THIS ((BgIkanaMirror*)thisx)
-void BgIkanaMirror_Init(Actor* thisx, PlayState* play);
+void BgIkanaMirror_Init(Actor* thisx, PlayState* play2);
void BgIkanaMirror_Destroy(Actor* thisx, PlayState* play);
void BgIkanaMirror_Update(Actor* thisx, PlayState* play);
void BgIkanaMirror_Draw(Actor* thisx, PlayState* play);
@@ -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..27cecd05a 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,
@@ -648,9 +648,9 @@ void func_80B814B8(BgIkanaRotaryroom* this, PlayState* 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);
+ func_800B8E58(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);
+ func_800B8E58(player, NA_SE_VO_LI_TAKEN_AWAY + player->ageProperties->voiceSfxIdOffset);
play->unk_18845 = 1;
play_sound(NA_SE_OC_ABYSS);
this->actionFunc = NULL;
@@ -794,7 +794,7 @@ void func_80B819F0(Actor* thisx, 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, 7);
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_7);
}
func_80B81A64(this);
} else {
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..a7ba89cdc 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,
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..f9a9fcc37 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,
@@ -226,7 +226,8 @@ 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);
@@ -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..6016b2e44 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);
}
}
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..9cbfaec61 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,
@@ -53,7 +53,7 @@ void BgIknvDoukutu_Init(Actor* thisx, PlayState* play) {
this->actionFunc = func_80BD71BC;
this->csAction = 0x204;
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_52_20)) {
this->dyna.actor.draw = func_80BD7768;
this->actionFunc = func_80BD73D0;
play->envCtx.lightSettingOverride = 25;
@@ -69,8 +69,8 @@ void BgIknvDoukutu_Init(Actor* thisx, PlayState* play) {
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;
@@ -80,7 +80,7 @@ void BgIknvDoukutu_Init(Actor* thisx, PlayState* play) {
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;
}
}
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..f36393869 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
@@ -23,6 +23,4 @@ typedef struct BgIknvDoukutu {
/* 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..ba65baca4 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;
}
@@ -125,7 +125,7 @@ s32 func_80BD7CEC(BgIknvObj* this) {
}
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);
@@ -156,7 +156,7 @@ s32 func_80BD7E0C(BgIknvObj* this, s16 targetRotation, PlayState* play) {
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,7 +165,7 @@ 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)) {
+ if ((this->dyna.actor.home.rot.x == 1) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_58_80)) {
ActorCutscene_Stop(this->dyna.actor.cutscene);
this->dyna.actor.home.rot.x = 0;
}
@@ -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 9091948ae..4ed78d458 100644
--- a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c
+++ b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c
@@ -11,7 +11,7 @@
#define THIS ((BgIngate*)thisx)
-void BgIngate_Init(Actor* thisx, PlayState* play);
+void BgIngate_Init(Actor* thisx, PlayState* play2);
void BgIngate_Destroy(Actor* thisx, PlayState* play);
void BgIngate_Update(Actor* thisx, PlayState* play);
void BgIngate_Draw(Actor* thisx, PlayState* play);
@@ -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_7);
} 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;
@@ -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,18 +192,17 @@ 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_7);
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;
}
@@ -215,11 +214,11 @@ void func_80953F9C(BgIngate* this, PlayState* play) {
if (ActorCutscene_GetCurrentIndex() != this->unk16E) {
if (ActorCutscene_GetCurrentIndex() != -1) {
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();
@@ -232,7 +231,7 @@ void func_809541B8(BgIngate* this, PlayState* play) {
if ((player->transformation == PLAYER_FORM_HUMAN) && (player->actor.bgCheckFlags & 1) &&
(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_7);
this->dyna.actor.textId = 0x9E6;
Message_StartTextbox(play, this->dyna.actor.textId, NULL);
this->actionFunc = func_809543D4;
@@ -244,9 +243,9 @@ void func_809541B8(BgIngate* this, PlayState* play) {
}
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);
}
@@ -255,17 +254,17 @@ void func_809542A0(BgIngate* this, PlayState* play) {
play->transitionType = TRANS_TYPE_03;
gSaveContext.nextTransitionType = TRANS_TYPE_03;
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_6);
this->timePath = &play->setupPathList[this->timePath->unk1];
func_80953F14(this, play);
- func_800FE484();
+ Environment_StopTime();
}
}
}
@@ -281,17 +280,17 @@ void func_809543D4(BgIngate* this, PlayState* play) {
break;
case 0x9E5:
if (play->msgCtx.choiceIndex == 0) {
- func_800B7298(play, &this->dyna.actor, 6);
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_6);
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);
@@ -299,13 +298,13 @@ void func_809543D4(BgIngate* this, PlayState* play) {
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_6);
this->unk160 &= ~0x4;
this->actionFunc = func_809541B8;
- func_800FE498();
+ Environment_StartTime();
func_8019F230();
}
func_801477B4(play);
@@ -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_20_02)) {
+ 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..cc0befd19 100644
--- a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.h
+++ b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.h
@@ -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..1b1deb6c2 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,
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..12bfc0f3c 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,
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..8afd5d730 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
@@ -16,7 +16,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 = {
+ActorInit Bg_Keikoku_Spr_InitVars = {
ACTOR_BG_KEIKOKU_SPR,
ACTORCAT_PROP,
FLAGS,
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..2da4ddcee 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) {
@@ -205,7 +206,7 @@ void BgKin2Bombwall_EndCutscene(BgKin2Bombwall* this, PlayState* play) {
this->timer--;
if (this->timer <= 0) {
ActorCutscene_Stop(this->dyna.actor.cutscene);
- Actor_MarkForDeath(&this->dyna.actor);
+ 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 628ade7f1..dfb22deee 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,
@@ -120,19 +120,12 @@ static InitChainEntry sInitChain[] = {
};
s32 BgKin2Fence_CheckHitMask(BgKin2Fence* this) {
- ColliderJntSphElement* elements = this->collider.elements;
+ s32 i;
- if (elements[0].info.bumperFlags & BUMP_HIT) {
- return 0;
- }
- if (elements[1].info.bumperFlags & BUMP_HIT) {
- return 1;
- }
- if (elements[2].info.bumperFlags & BUMP_HIT) {
- return 2;
- }
- if (elements[3].info.bumperFlags & BUMP_HIT) {
- return 3;
+ for (i = 0; i < ARRAY_COUNT(this->colliderElements); i++) {
+ if (this->collider.elements[i].info.bumperFlags & BUMP_HIT) {
+ return i;
+ }
}
return -1;
}
@@ -157,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,
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..5892376ba 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);
+ func_800C62BC(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;
+ ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ BgKin2Picture_SetupPlayCutscene(this);
+ } else { // Gold Skulltula can be heard behind Skullkid's painting.
+ if (this->skulltulaNoiseTimer >= 0) {
+ if (this->skulltulaNoiseTimer == 0) {
+ Actor_PlaySfxAtPos(&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 (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
+ ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ this->cutsceneStarted = true;
+ BgKin2Picture_SetupShiver(this);
+ } else {
+ ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ }
+}
+
+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, 4);
+
+ if (this->dyna.actor.bgCheckFlags & 1) {
+ 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_PlaySfxAtPos(&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) {
+ ActorCutscene_Stop(this->dyna.actor.cutscene);
+ }
+
+ func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
+ Actor_PlaySfxAtPos(&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..6c30347ef 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,
@@ -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..f766fef78 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;
}
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 2b4c24381..d704adf86 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
@@ -25,7 +25,7 @@ typedef struct {
void BgLastBwall_Init(Actor* thisx, PlayState* play);
void BgLastBwall_Destroy(Actor* thisx, PlayState* play);
void BgLastBwall_Update(Actor* thisx, PlayState* play);
-void BgLastBwall_Draw(Actor* thisx, PlayState* play);
+void BgLastBwall_Draw(Actor* thisx, PlayState* play2);
void BgLastBwall_InitCollider(ColliderTrisInit* init, Vec3f* pos, Vec3s* rot, ColliderTris* collider,
BgLastBwallInitColliderStruct* arg4);
@@ -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,
@@ -153,15 +153,19 @@ void BgLastBwall_Init(Actor* thisx, PlayState* play) {
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->cutscenes, ARRAY_COUNT(this->cutscenes));
+ func_80C187E4(this);
}
void BgLastBwall_Destroy(Actor* thisx, PlayState* play) {
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..3fafc71ea 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
@@ -25,6 +25,4 @@ typedef struct BgLastBwall {
/* 0x23A */ s16 cutscenes[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..75e7b9e32 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,
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..20be54a2f 100644
--- a/src/overlays/actors/ovl_Bg_Lotus/z_bg_lotus.c
+++ b/src/overlays/actors/ovl_Bg_Lotus/z_bg_lotus.c
@@ -20,7 +20,7 @@ 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 = {
+ActorInit Bg_Lotus_InitVars = {
ACTOR_BG_LOTUS,
ACTORCAT_BG,
FLAGS,
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..540c21b0e 100644
--- a/src/overlays/actors/ovl_Bg_Lotus/z_bg_lotus.h
+++ b/src/overlays/actors/ovl_Bg_Lotus/z_bg_lotus.h
@@ -16,6 +16,4 @@ typedef struct BgLotus {
/* 0x168 */ s16 timer2;
} 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 4c0c109ea..497ed10ab 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
@@ -15,7 +15,7 @@
void BgNumaHana_Init(Actor* thisx, PlayState* play);
void BgNumaHana_Destroy(Actor* thisx, PlayState* play);
void BgNumaHana_Update(Actor* thisx, PlayState* play);
-void BgNumaHana_Draw(Actor* thisx, PlayState* play);
+void BgNumaHana_Draw(Actor* thisx, PlayState* play2);
void BgNumaHana_SetupDoNothing(BgNumaHana* this);
void BgNumaHana_DoNothing(BgNumaHana* this, PlayState* play);
@@ -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,
@@ -157,11 +157,11 @@ 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) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_01)) {
func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
this->petalZRotation = 0x2000;
@@ -219,7 +219,7 @@ void BgNumaHana_ClosedIdle(BgNumaHana* this, PlayState* play) {
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;
+ SET_WEEKEVENTREG(WEEKEVENTREG_12_01);
Flags_SetSwitch(play, BG_NUMA_HANA_SWITCH_FLAG(&this->dyna.actor));
BgNumaHana_SetupUnfoldInnerPetals(this);
} else {
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..fd71577cd 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
@@ -40,6 +40,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 5b17b190a..c038ed575 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
@@ -15,7 +15,7 @@
void BgOpenShutter_Init(Actor* thisx, PlayState* play);
void BgOpenShutter_Destroy(Actor* thisx, PlayState* play);
-void BgOpenShutter_Update(Actor* thisx, PlayState* play);
+void BgOpenShutter_Update(Actor* thisx, PlayState* play2);
void BgOpenShutter_Draw(Actor* thisx, PlayState* play);
void func_80ACAD88(BgOpenShutter* this, PlayState* play);
@@ -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,
@@ -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);
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..dbe935b3f 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,
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..2ec37cb7e 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,
@@ -67,7 +67,7 @@ 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);
@@ -82,14 +82,14 @@ void BgSinkaiKabe_Init(Actor* thisx, PlayState* play) {
}
} 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;
}
@@ -103,7 +103,7 @@ void BgSinkaiKabe_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.unk20, 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..abb341797 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
@@ -17,6 +17,4 @@ typedef struct BgSinkaiKabe {
/* 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..fb8d464c8 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,
@@ -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);
}
}
@@ -230,7 +230,7 @@ void func_809CE234(BgSpdweb* this, PlayState* play) {
if (this->unk_162 == 0) {
ActorCutscene_Stop(this->dyna.actor.cutscene);
- Actor_MarkForDeath(&this->dyna.actor);
+ 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;
@@ -311,7 +311,7 @@ void func_809CE4C8(BgSpdweb* this, PlayState* play) {
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) {
@@ -330,9 +330,9 @@ void func_809CE4C8(BgSpdweb* this, PlayState* play) {
if ((this->unk_161 != 0) ||
((DynaPolyActor_IsInRidingMovingState(&this->dyna) != 0) && (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) {
@@ -373,7 +373,7 @@ void func_809CE830(BgSpdweb* this, PlayState* play) {
if (ActorCutscene_GetLength(this->dyna.actor.cutscene) == -1) {
ActorCutscene_Stop(this->dyna.actor.cutscene);
}
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
@@ -450,7 +450,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);
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..d6617ef1c 100644
--- a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c
+++ b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c
@@ -16,7 +16,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 = {
+ActorInit Bg_Tobira01_InitVars = {
ACTOR_BG_TOBIRA01,
ACTORCAT_PROP,
FLAGS,
@@ -38,12 +38,12 @@ void BgTobira01_Open(BgTobira01* this, PlayState* play) {
ActorCutscene_Stop(0x7C);
} else if (ActorCutscene_GetCanPlayNext(cutsceneId)) {
ActorCutscene_StartAndSetUnkLinkFields(cutsceneId, &this->dyna.actor);
- gSaveContext.save.weekEventReg[88] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_88_40);
this->playCutscene = false;
} else {
ActorCutscene_SetIntentToPlay(cutsceneId);
}
- } else if (!(gSaveContext.save.weekEventReg[88] & 0x40) && (this->timer == 0) && (play->actorCtx.unk1F5 != 0) &&
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_88_40) && (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;
@@ -52,7 +52,7 @@ void BgTobira01_Open(BgTobira01* this, PlayState* play) {
prevTimer = this->timer;
- if (gSaveContext.save.weekEventReg[88] & 0x40) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_88_40)) {
this->timer++;
} else {
this->timer--;
@@ -67,8 +67,9 @@ void BgTobira01_Open(BgTobira01* this, PlayState* play) {
this->timer2 = 180;
}
- if (!(player->stateFlags1 & 0x40) && (gSaveContext.save.weekEventReg[88] & 0x40) && (DECR(this->timer2) == 0)) {
- gSaveContext.save.weekEventReg[88] &= (u8)~0x40;
+ if (!(player->stateFlags1 & PLAYER_STATE1_40) && CHECK_WEEKEVENTREG(WEEKEVENTREG_88_40) &&
+ (DECR(this->timer2) == 0)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_88_40);
}
}
@@ -78,7 +79,7 @@ void BgTobira01_Init(Actor* thisx, PlayState* play) {
DynaPolyActor_Init(&this->dyna, 1);
DynaPolyActor_LoadMesh(play, &this->dyna, &object_spot11_obj_Colheader_0011C0);
- gSaveContext.save.weekEventReg[88] &= (u8)~0x40;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_88_40);
Actor_SetScale(&this->dyna.actor, 1.0f);
this->timer2 = gSaveContext.save.isNight;
this->timer = 0;
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..14a5e1b8e 100644
--- a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.h
+++ b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.h
@@ -17,6 +17,4 @@ typedef struct BgTobira01 {
/* 0x16C */ s32 unk_16C; // unused besides being set to 0
} 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 894ced552..bef32aedd 100644
--- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c
+++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c
@@ -5,6 +5,7 @@
*/
#include "z_bg_umajump.h"
+#include "assets/objects/object_umajump/object_umajump.h"
#define FLAGS 0x00000000
@@ -13,9 +14,11 @@
void BgUmajump_Init(Actor* thisx, PlayState* play);
void BgUmajump_Destroy(Actor* thisx, PlayState* play);
void BgUmajump_Update(Actor* thisx, PlayState* play);
+void BgUmajump_Draw(Actor* thisx, PlayState* play);
-#if 0
-const ActorInit Bg_Umajump_InitVars = {
+void func_8091A5A0(Actor* thisx, PlayState* play);
+
+ActorInit Bg_Umajump_InitVars = {
ACTOR_BG_UMAJUMP,
ACTORCAT_PROP,
FLAGS,
@@ -27,34 +30,190 @@ const ActorInit Bg_Umajump_InitVars = {
(ActorFunc)NULL,
};
-// static InitChainEntry sInitChain[] = {
-static InitChainEntry D_8091A810[] = {
+static InitChainEntry sInitChain[] = {
ICHAIN_F32(uncullZoneScale, 1200, ICHAIN_CONTINUE),
ICHAIN_F32(uncullZoneDownward, 300, ICHAIN_CONTINUE),
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
};
-#endif
+void func_80919F30(BgUmajump* this, PlayState* play) {
+ if (this->rotationTimer >= 90) {
+ this->rotationTimer = 0;
+ }
-extern InitChainEntry D_8091A810[];
+ this->rotationTimer++;
+ this->dyna.actor.shape.yOffset =
+ Math_SinS((this->rotationTimer / 90.0f) * 0x10000) * (20.0f / this->dyna.actor.scale.y);
+}
-extern UNK_TYPE D_06001220;
-extern UNK_TYPE D_06001558;
+void BgUmajump_StopCutscene(BgUmajump* this, PlayState* play) {
+ if ((play->csCtx.frames >= 6) && !this->hasSoundPlayed) {
+ this->hasSoundPlayed = true;
+ play_sound(NA_SE_EV_KID_HORSE_NEIGH);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Umajump/func_80919F30.s")
+ if (play->csCtx.state == CS_STATE_0) {
+ ActorCutscene_Stop(this->dyna.actor.cutscene);
+ this->dyna.actor.update = Actor_Noop;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Umajump/func_80919FC8.s")
+void BgUmajump_PlayCutscene(BgUmajump* this, PlayState* play) {
+ if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
+ ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ SET_WEEKEVENTREG(WEEKEVENTREG_89_20);
+ this->actionFunc = BgUmajump_StopCutscene;
+ } else {
+ ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Umajump/func_8091A044.s")
+void BgUmajump_CheckDistance(BgUmajump* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Umajump/func_8091A0B8.s")
+ if ((this->horse != NULL) && (player != NULL) &&
+ (Math3D_XZDistance(this->horse->world.pos.x, this->horse->world.pos.z, player->actor.world.pos.x,
+ player->actor.world.pos.z) < 1400.0f)) {
+ this->actionFunc = BgUmajump_PlayCutscene;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Umajump/BgUmajump_Init.s")
+void BgUmajump_Init(Actor* thisx, PlayState* play) {
+ BgUmajump* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Umajump/BgUmajump_Destroy.s")
+ Actor_ProcessInitChain(thisx, sInitChain);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Umajump/BgUmajump_Update.s")
+ this->actionFunc = NULL;
+ this->horse = NULL;
+ this->hasSoundPlayed = false;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Umajump/func_8091A5A0.s")
+ DynaPolyActor_Init(&this->dyna, 0);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Umajump/func_8091A7B0.s")
+ this->objectIndex = BG_UMAJUMP_GET_OBJECT_INDEX(thisx);
+ thisx->params = BG_UMAJUMP_GET_FF(thisx);
+
+ if ((thisx->params == BG_UMAJUMP_TYPE_2)) {
+ if ((((play->sceneId == SCENE_F01) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_89_20)) &&
+ !CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) &&
+ (thisx->cutscene != -1)) {
+ this->actionFunc = BgUmajump_CheckDistance;
+ thisx->update = func_8091A5A0;
+ thisx->flags |= ACTOR_FLAG_10;
+ this->horse = SubS_FindActor(play, this->horse, ACTORCAT_BG, ACTOR_EN_HORSE);
+ } else {
+ thisx->update = Actor_Noop;
+ }
+ } else {
+ this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_UMAJUMP);
+
+ if (this->objectIndex < 0) {
+ 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_Kill(thisx);
+ }
+ }
+}
+
+void BgUmajump_Destroy(Actor* thisx, PlayState* play) {
+ BgUmajump* this = THIS;
+
+ DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
+}
+
+void BgUmajump_Update(Actor* thisx, PlayState* play) {
+ BgUmajump* this = THIS;
+
+ if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) {
+ this->dyna.actor.objBankIndex = this->objectIndex;
+ this->dyna.actor.draw = BgUmajump_Draw;
+
+ Actor_SetObjectDependency(play, &this->dyna.actor);
+
+ if (this->dyna.actor.params == BG_UMAJUMP_TYPE_5) {
+ 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 (!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)) {
+ DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558);
+ } else {
+ DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001438);
+ }
+
+ if (this->dyna.actor.params == BG_UMAJUMP_TYPE_1) {
+ this->rotationTimer = 0;
+ this->actionFunc = func_80919F30;
+ this->dyna.actor.update = func_8091A5A0;
+ } else if (this->dyna.actor.params == BG_UMAJUMP_TYPE_3) {
+ this->dyna.actor.update = func_8091A5A0;
+ } else if ((this->dyna.actor.params == BG_UMAJUMP_TYPE_5) || (this->dyna.actor.params == BG_UMAJUMP_TYPE_6)) {
+ if (this->dyna.actor.params == BG_UMAJUMP_TYPE_5) {
+ if ((this->dyna.bgId == BGACTOR_NEG_ONE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558);
+ }
+ } else if ((this->dyna.actor.params == BG_UMAJUMP_TYPE_6) && (this->dyna.bgId == BGACTOR_NEG_ONE) &&
+ (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) ||
+ ((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);
+ 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);
+ this->dyna.actor.update = Actor_Noop;
+ } else {
+ this->dyna.actor.update = Actor_Noop;
+ }
+ }
+}
+
+void func_8091A5A0(Actor* thisx, PlayState* play) {
+ BgUmajump* this = THIS;
+
+ if (this->actionFunc != NULL) {
+ this->actionFunc(this, play);
+ }
+
+ if ((this->dyna.actor.params == BG_UMAJUMP_TYPE_3) && CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) {
+ 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_Kill(&this->dyna.actor);
+ }
+
+ if (this->dyna.actor.params == BG_UMAJUMP_TYPE_5) {
+ 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) && !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) &&
+ (!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) && 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);
+ }
+ }
+}
+
+void BgUmajump_Draw(Actor* thisx, PlayState* play) {
+ BgUmajump* this = THIS;
+
+ if (this->dyna.bgId != BGACTOR_NEG_ONE) {
+ Gfx_DrawDListOpa(play, gHorseJumpFenceDL);
+ }
+}
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 22fe9ca44..62aaf6cb7 100644
--- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h
+++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h
@@ -3,13 +3,31 @@
#include "global.h"
+#define BG_UMAJUMP_GET_OBJECT_INDEX(thisx) (((thisx)->params >> 8) & 0xFF)
+#define BG_UMAJUMP_GET_FF(thisx) ((thisx)->params & 0xFF)
+
+typedef enum {
+ BG_UMAJUMP_TYPE_1 = 1,
+ BG_UMAJUMP_TYPE_2,
+ BG_UMAJUMP_TYPE_3,
+ BG_UMAJUMP_TYPE_4,
+ BG_UMAJUMP_TYPE_5,
+ BG_UMAJUMP_TYPE_6,
+} BgUmaJumpType;
+
struct BgUmajump;
+typedef void (*BgUmajumpActionFunc)(struct BgUmajump*, PlayState*);
+
typedef struct BgUmajump {
- /* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0x28];
+ /* 0x000 */ DynaPolyActor dyna;
+ /* 0x15C */ BgUmajumpActionFunc actionFunc;
+ /* 0x160 */ union {
+ s32 objectIndex;
+ s32 rotationTimer; // y rotation
+ };
+ /* 0x164 */ s32 hasSoundPlayed;
+ /* 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 b3ab79b20..f28c3cd34 100644
--- a/src/overlays/actors/ovl_Boss_02/z_boss_02.c
+++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.c
@@ -4,6 +4,7 @@
* Description: Twinmold
*/
+#include "prevent_bss_reordering.h"
#include "z_boss_02.h"
#include "z64rumble.h"
#include "z64shrink_window.h"
@@ -18,7 +19,7 @@
void Boss02_Init(Actor* thisx, PlayState* play);
void Boss02_Destroy(Actor* thisx, PlayState* play);
void Boss02_Twinmold_Update(Actor* thisx, PlayState* play);
-void Boss02_Twinmold_Draw(Actor* thisx, PlayState* play);
+void Boss02_Twinmold_Draw(Actor* thisx, PlayState* play2);
void func_809DAA74(Boss02* this, PlayState* play);
void func_809DAA98(Boss02* this, PlayState* play);
@@ -112,7 +113,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 +463,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 +551,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_52_20) && (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 +567,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 {
@@ -1097,7 +1098,7 @@ 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;
@@ -1336,8 +1337,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 +1348,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 +1358,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;
@@ -1396,7 +1395,7 @@ void Boss02_Twinmold_Draw(Actor* thisx, PlayState* play2) {
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 +1414,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);
@@ -1578,7 +1577,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 +1588,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,13 +1625,13 @@ 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) {
+ if (player->stateFlags1 & PLAYER_STATE1_100) {
Cutscene_Start(play, &play->csCtx);
this->subCamId = Play_CreateSubCamera(play);
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
@@ -1755,7 +1754,7 @@ void func_809DD934(Boss02* this, PlayState* play) {
this->subCamId = SUB_CAM_ID_DONE;
Cutscene_End(play, &play->csCtx);
this->actor.flags |= ACTOR_FLAG_1;
- player->stateFlags1 &= ~0x100;
+ player->stateFlags1 &= ~PLAYER_STATE1_100;
this->unk_1D70 = 0.01f;
func_80165690();
break;
@@ -1788,7 +1787,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 +1859,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 +1923,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;
@@ -1995,11 +1994,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 +2006,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,7 +2051,7 @@ 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_52_20) || ((u32)(KREG(13) + 15) >= this->unk_1D1C)) {
break;
}
Cutscene_Start(play, &play->csCtx);
@@ -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) {
@@ -2145,12 +2140,12 @@ void func_809DEAC4(Boss02* 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);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_6);
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;
@@ -2206,7 +2201,7 @@ void func_809DEAC4(Boss02* 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);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_6);
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 1c14d63bb..4c3b34fbb 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"
@@ -78,9 +73,9 @@
#define PLATFORM_HEIGHT 440.0f
#define WATER_HEIGHT 430.0f
-void Boss03_Init(Actor* thisx, PlayState* play);
+void Boss03_Init(Actor* thisx, PlayState* play2);
void Boss03_Destroy(Actor* thisx, PlayState* play);
-void Boss03_Update(Actor* thisx, PlayState* play);
+void Boss03_Update(Actor* thisx, PlayState* play2);
void Boss03_Draw(Actor* thisx, PlayState* play);
void func_809E344C(Boss03* this, PlayState* play);
@@ -279,7 +274,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,
@@ -454,11 +449,11 @@ void Boss03_Init(Actor* thisx, PlayState* play2) {
PlayState* play = play2;
Vec3f sp70;
- if (gSaveContext.save.weekEventReg[55] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) {
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;
}
@@ -520,8 +515,8 @@ 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);
@@ -580,10 +575,10 @@ 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);
@@ -669,9 +664,9 @@ 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);
@@ -689,7 +684,7 @@ void Boss03_ChasePlayer(Boss03* this, PlayState* play) {
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);
@@ -765,9 +760,9 @@ 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);
@@ -784,7 +779,7 @@ void Boss03_CatchPlayer(Boss03* this, PlayState* play) {
if (&this->actor == player->actor.parent) {
player->unk_AE8 = 101;
player->actor.parent = NULL;
- player->csMode = 0;
+ player->csMode = PLAYER_CSMODE_0;
func_80165690();
}
@@ -831,7 +826,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;
@@ -869,9 +864,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);
@@ -912,7 +907,7 @@ void Boss03_ChewPlayer(Boss03* this, PlayState* play) {
if (&this->actor == player->actor.parent) {
player->unk_AE8 = 101;
player->actor.parent = NULL;
- player->csMode = 0;
+ player->csMode = PLAYER_CSMODE_0;
func_80165690();
func_800B8D50(play, NULL, 10.0f, this->actor.shape.rot.y, 0.0f, 0x20);
}
@@ -1031,9 +1026,9 @@ 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;
@@ -1060,7 +1055,7 @@ void Boss03_Charge(Boss03* this, PlayState* play) {
// 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),
+ func_800B8D50(play, NULL, 7.0f, Math_Atan2S_XY(player->actor.world.pos.z, player->actor.world.pos.x),
7.0f, 0);
}
@@ -1150,7 +1145,7 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) {
case 0:
if (player->actor.world.pos.y < 1350.0f) {
Cutscene_Start(play, &play->csCtx);
- func_800B7298(play, &this->actor, 7);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_7);
this->subCamId = Play_CreateSubCamera(play);
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_ACTIVE);
@@ -1202,9 +1197,9 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) {
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)) {
@@ -1261,7 +1256,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;
@@ -1372,13 +1367,13 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) {
func_80169AFC(play, this->subCamId, 0);
Cutscene_End(play, &play->csCtx);
- func_800B7298(play, &this->actor, 6);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_6);
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;
}
@@ -1450,11 +1445,11 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) {
case 0:
if (ActorCutscene_GetCurrentIndex() == -1) {
Cutscene_Start(play, &play->csCtx);
- func_800B7298(play, &this->actor, 1);
+ 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)) {
@@ -1473,7 +1468,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;
@@ -1587,7 +1582,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);
@@ -1630,7 +1625,7 @@ void Boss03_DeathCutscene(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);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_6);
this->csState = 3;
func_80165690();
Boss03_PlayUnderwaterSfx(&this->actor.projectedPos, NA_SE_EN_KONB_INIT_OLD);
@@ -1664,7 +1659,7 @@ void Boss03_SpawnSmallFishesCutscene(Boss03* this, PlayState* play) {
case 0:
if (ActorCutscene_GetCurrentIndex() == -1) {
Cutscene_Start(play, &play->csCtx);
- func_800B7298(play, &this->actor, 1);
+ 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);
@@ -1684,7 +1679,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;
@@ -1725,7 +1720,7 @@ 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);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_6);
func_809E344C(this, play);
this->workTimer[WORK_TIMER_UNK1_A] = 50;
@@ -1755,7 +1750,7 @@ void Boss03_SetupStunned(Boss03* this, PlayState* play) {
if (&this->actor == player->actor.parent) {
player->unk_AE8 = 101;
player->actor.parent = NULL;
- player->csMode = 0;
+ player->csMode = PLAYER_CSMODE_0;
func_80165690();
}
@@ -1907,7 +1902,7 @@ void Boss03_UpdateCollision(Boss03* this, PlayState* play) {
if (&this->actor == player->actor.parent) {
player->unk_AE8 = 101;
player->actor.parent = NULL;
- player->csMode = 0;
+ player->csMode = PLAYER_CSMODE_0;
func_80165690();
}
@@ -2156,7 +2151,7 @@ void Boss03_SetObject(PlayState* play, s16 objectId) {
OPEN_DISPS(play->state.gfxCtx);
- gSegments[6] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[objectIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment);
gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[objectIndex].segment);
gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.status[objectIndex].segment);
@@ -2541,7 +2536,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) {
@@ -2574,7 +2569,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);
}
}
@@ -2594,7 +2589,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 8eb73d84d..0b59ff9ed 100644
--- a/src/overlays/actors/ovl_Boss_04/z_boss_04.c
+++ b/src/overlays/actors/ovl_Boss_04/z_boss_04.c
@@ -11,9 +11,9 @@
#define THIS ((Boss04*)thisx)
-void Boss04_Init(Actor* thisx, PlayState* play);
+void Boss04_Init(Actor* thisx, PlayState* play2);
void Boss04_Destroy(Actor* thisx, PlayState* play);
-void Boss04_Update(Actor* thisx, PlayState* play);
+void Boss04_Update(Actor* thisx, PlayState* play2);
void Boss04_Draw(Actor* thisx, PlayState* play);
void func_809EC544(Boss04* this);
@@ -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;
}
@@ -199,7 +199,7 @@ void Boss04_Init(Actor* thisx, PlayState* play2) {
this->actor.world.pos.z = this->unk_6F0;
Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 60.0f, 60.0f, 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,7 +252,7 @@ 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)) {
Actor* boss;
@@ -263,7 +263,7 @@ void func_809EC568(Boss04* this, PlayState* play) {
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_7);
player->actor.world.pos.x = this->unk_6E8;
player->actor.world.pos.z = this->unk_6F0 + 410.0f;
player->actor.shape.rot.y = 0x7FFF;
@@ -277,7 +277,7 @@ void func_809EC568(Boss04* this, PlayState* play) {
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;
}
@@ -313,7 +313,7 @@ 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;
}
@@ -390,9 +390,9 @@ void func_809EC568(Boss04* 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);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_6);
func_80165690();
- gSaveContext.eventInf[6] |= 1;
+ SET_EVENTINF(EVENTINF_60);
}
break;
}
@@ -559,7 +559,7 @@ void func_809ED2A0(Boss04* this, PlayState* play) {
}
if (this->unk_1FA == 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
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 3aadce42c..5dce58c4e 100644
--- a/src/overlays/actors/ovl_Boss_06/z_boss_06.c
+++ b/src/overlays/actors/ovl_Boss_06/z_boss_06.c
@@ -4,7 +4,6 @@
* Description: Igos du Ikana window - curtains and ray effects
*/
-#include "prevent_bss_reordering.h"
#include "z_boss_06.h"
#include "z64shrink_window.h"
#include "overlays/actors/ovl_En_Knight/z_en_knight.h"
@@ -18,7 +17,7 @@
void Boss06_Init(Actor* thisx, PlayState* play);
void Boss06_Destroy(Actor* thisx, PlayState* play);
void Boss06_Update(Actor* thisx, PlayState* play);
-void Boss06_Draw(Actor* thisx, PlayState* play);
+void Boss06_Draw(Actor* thisx, PlayState* play2);
void func_809F24A8(Boss06* this);
void func_809F24C8(Boss06* this, PlayState* play);
@@ -29,11 +28,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 +69,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 +101,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 +135,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 +182,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);
@@ -200,7 +199,7 @@ void func_809F24C8(Boss06* this, PlayState* play) {
}
Cutscene_Start(play, &play->csCtx);
- func_800B7298(play, &this->actor, 7);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_7);
this->subCamId = Play_CreateSubCamera(play);
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_ACTIVE);
@@ -213,7 +212,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;
}
@@ -240,7 +239,7 @@ void func_809F24C8(Boss06* this, PlayState* play) {
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;
}
@@ -333,7 +332,7 @@ void func_809F24C8(Boss06* 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);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_6);
D_809F4970->unk_151 = 0;
}
break;
@@ -382,7 +381,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 +641,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 +649,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..aa37e7b85 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,
@@ -52,10 +52,11 @@ void DemoGetitem_Init(Actor* thisx, PlayState* play) {
this->csAction = sCsActionIndices[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) {
@@ -82,17 +83,22 @@ void func_80A4FB68(DemoGetitem* this, PlayState* play2) {
this->actor.draw = DemoGetitem_Draw;
Cutscene_ActorTranslate(&this->actor, play, Cutscene_GetActorActionIndex(play, this->csAction));
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));
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..91c7dc97e 100644
--- a/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.h
+++ b/src/overlays/actors/ovl_Demo_Getitem/z_demo_getitem.h
@@ -17,6 +17,4 @@ typedef struct DemoGetitem {
/* 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..c1303efab 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;
@@ -454,7 +454,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 +484,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) {
@@ -639,7 +639,7 @@ void DemoKankyo_DrawMoonAndGiant(Actor* thisx, PlayState* play2) {
break;
}
- gSPDisplayList(POLY_XLU_DISP++, &gLightOrb1DL);
+ gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL);
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
@@ -651,7 +651,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..60f9e898b 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,
@@ -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..7b60ae951 100644
--- a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.h
+++ b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.h
@@ -37,6 +37,4 @@ typedef struct DemoSyoten {
/* 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..1a1f4ae22 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;
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..df179c6f6 100644
--- a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.h
+++ b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.h
@@ -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..f81713731 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,
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..57e462de1 100644
--- a/src/overlays/actors/ovl_Dm_Al/z_dm_al.h
+++ b/src/overlays/actors/ovl_Dm_Al/z_dm_al.h
@@ -21,6 +21,9 @@ typedef struct DmAl {
/* 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 5e03eb74c..d536425b0 100644
--- a/src/overlays/actors/ovl_Dm_An/z_dm_an.c
+++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.c
@@ -19,9 +19,9 @@ void DmAn_Update(Actor* thisx, PlayState* play);
void func_80C1C958(DmAn* this, PlayState* play);
void func_80C1CAB0(DmAn* this, PlayState* play);
void func_80C1CC80(DmAn* this, PlayState* play);
-void func_80C1D0B0(Actor* 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,
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..2001a8ba6 100644
--- a/src/overlays/actors/ovl_Dm_An/z_dm_an.h
+++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.h
@@ -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..b9c4cb33c 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,
@@ -59,18 +59,18 @@ void DmBal_Init(Actor* thisx, PlayState* play) {
Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 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) {
@@ -84,12 +84,12 @@ void func_80C1EAE8(DmBal* this, PlayState* play) {
D_80C1F2C0 = play->csCtx.actorActions[actionIndex]->action;
switch (play->csCtx.actorActions[actionIndex]->action) {
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:
@@ -98,34 +98,34 @@ void func_80C1EAE8(DmBal* this, PlayState* play) {
}
} else if (D_80C1F2C0 == 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);
this->actor.home.pos = this->actor.world.pos;
} else {
- this->unk_336 = 0;
+ this->keepEyesShut = false;
this->eyeIndex = 0;
D_80C1F2C0 = 0x63;
}
}
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 82e5157f6..43cc62603 100644
--- a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c
+++ b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c
@@ -15,12 +15,12 @@
void DmChar00_Init(Actor* thisx, PlayState* play);
void DmChar00_Destroy(Actor* thisx, PlayState* play);
void DmChar00_Update(Actor* thisx, PlayState* play);
-void DmChar00_Draw(Actor* thisx, PlayState* play);
+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,
@@ -528,7 +528,7 @@ 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)];
@@ -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:
@@ -912,7 +912,7 @@ 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) &&
((play->sceneId != SCENE_OPENINGDAN) || (gSaveContext.sceneLayer != 0) || (play->roomCtx.curRoom.num != 0) ||
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..62ee0cb40 100644
--- a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.h
+++ b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.h
@@ -28,6 +28,4 @@ typedef struct DmChar00 {
/* 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 2f715afed..069d829c1 100644
--- a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c
+++ b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c
@@ -14,7 +14,7 @@
void DmChar01_Init(Actor* thisx, PlayState* play);
void DmChar01_Destroy(Actor* thisx, PlayState* play);
-void DmChar01_Update(Actor* thisx, PlayState* play);
+void DmChar01_Update(Actor* thisx, PlayState* play2);
void DmChar01_Draw(Actor* thisx, PlayState* play);
void func_80AA8698(DmChar01* this, PlayState* play);
@@ -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_20_02)) {
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_20_02) || (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_20_02)) {
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,7 +180,7 @@ 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;
}
}
@@ -348,7 +348,7 @@ void func_80AA9020(DmChar01* this, PlayState* play) {
CsCmdActorAction* temp_v1 = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 135)];
if ((temp_v1->startFrame == play->csCtx.frames) && (temp_v1->action == 2)) {
- gSaveContext.save.weekEventReg[20] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_20_02);
this->actionFunc = func_80AA90AC;
}
}
@@ -406,18 +406,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 +451,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 +461,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..b618281c2 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,
@@ -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);
}
}
@@ -151,7 +151,7 @@ void DmChar02_Update(Actor* thisx, PlayState* play) {
Actor_PickUp(&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);
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..714913231 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;
@@ -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);
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..5c835152d 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,
@@ -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..0f0fcb6a1 100644
--- a/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.h
+++ b/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.h
@@ -20,6 +20,4 @@ typedef struct DmChar04 {
/* 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..7e368b9e3 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,
@@ -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:
@@ -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:
@@ -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:
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..0385a82d4 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_33_80);
Actor_SetScale(&this->actor, 1.0f);
this->alpha = 255;
DmChar06_SetupAction(this, func_80AAE6F0);
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 ed8625795..4129adfbe 100644
--- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c
+++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c
@@ -5,18 +5,53 @@
*/
#include "z_dm_char08.h"
+#include "objects/object_kamejima/object_kamejima.h"
#define FLAGS (ACTOR_FLAG_2000000)
#define THIS ((DmChar08*)thisx)
-void DmChar08_Init(Actor* thisx, PlayState* play);
+void DmChar08_Init(Actor* thisx, PlayState* play2);
void DmChar08_Destroy(Actor* thisx, PlayState* play);
void DmChar08_Update(Actor* thisx, PlayState* play);
void DmChar08_Draw(Actor* thisx, PlayState* play);
-#if 0
-const ActorInit Dm_Char08_InitVars = {
+void func_80AAFAC4(DmChar08* this, PlayState* play);
+void DmChar08_WaitForSong(DmChar08* this, PlayState* play);
+void func_80AAF8F4(DmChar08* this, PlayState* play);
+void func_80AAFAE4(DmChar08* this, PlayState* play);
+void DmChar08_DoNothing(DmChar08* this, PlayState* play);
+void func_80AAFA18(DmChar08* this, PlayState* play);
+void DmChar08_SetupAppearCs(DmChar08* this, PlayState* play);
+void func_80AAF884(DmChar08* this, PlayState* play);
+void func_80AAFB04(DmChar08* this, PlayState* play);
+void func_80AAFB94(DmChar08* this, PlayState* play);
+void func_80AAFE88(DmChar08* this, PlayState* play);
+void func_80AB023C(DmChar08* this, PlayState* play);
+void func_80AB01E8(DmChar08* this, PlayState* play);
+void DmChar08_SpawnBubbles(DmChar08* this, PlayState* play);
+void func_80AAFCCC(DmChar08* this, PlayState* play);
+
+typedef enum {
+ /* 0 */ TURTLE_EYEMODE_BLINK_LEFT,
+ /* 1 */ TURTLE_EYEMODE_BLINK_STRAIGHT,
+ /* 2 */ TURTLE_EYEMODE_CLOSED,
+ /* 3 */ TURTLE_EYEMODE_LOOK_STRAIGHT,
+ /* 4 */ TURTLE_EYEMODE_UNUSED,
+ /* 5 */ TURTLE_EYEMODE_LOOK_RIGHT,
+} EyeMode;
+
+typedef enum {
+ /* 0 */ TURTLE_ANIM_IDLE,
+ /* 1 */ TURTLE_ANIM_SWIM,
+ /* 2 */ TURTLE_ANIM_FLOAT,
+ /* 3 */ TURTLE_ANIM_SPEAK1,
+ /* 4 */ TURTLE_ANIM_COUGH,
+ /* 5 */ TURTLE_ANIM_SPEAK2,
+ /* 6 */ TURTLE_ANIM_YAWN,
+} TurtleAnimation;
+
+ActorInit Dm_Char08_InitVars = {
ACTOR_DM_CHAR08,
ACTORCAT_BG,
FLAGS,
@@ -28,71 +63,1061 @@ const ActorInit Dm_Char08_InitVars = {
(ActorFunc)DmChar08_Draw,
};
-// static InitChainEntry sInitChain[] = {
-static InitChainEntry D_80AB1764[] = {
+#include "overlays/ovl_Dm_Char08/ovl_Dm_Char08.c"
+
+static AnimationInfo sAnimationInfo[] = {
+ { &gTurtleIdleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f },
+ { &gTurtleSwimAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f },
+ { &gTurtleFloatAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f },
+ { &gTurtleSpeak1Anim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f },
+ { &gTurtleCoughAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f },
+ { &gTurtleSpeak2Anim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f },
+ { &gTurtleYawnAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f },
+};
+
+static InitChainEntry sInitChain[] = {
ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
ICHAIN_F32(uncullZoneScale, 4000, ICHAIN_CONTINUE),
ICHAIN_F32(uncullZoneDownward, 4000, ICHAIN_STOP),
};
-#endif
+void DmChar08_UpdateEyes(DmChar08* this) {
+ switch (this->eyeMode) {
+ case TURTLE_EYEMODE_BLINK_LEFT:
+ this->eyeIndex = 0;
+ if (this->blinkTimer > 0) {
+ this->blinkTimer--;
+ } else {
+ this->blinkTimer = 0;
+ }
+ if (this->blinkTimer < 4) {
+ this->eyeIndex = this->blinkTimer;
+ }
+ if (this->blinkTimer == 0) {
+ this->blinkTimer = Rand_S16Offset(30, 30);
+ }
+ break;
-extern InitChainEntry D_80AB1764[];
+ case TURTLE_EYEMODE_BLINK_STRAIGHT:
+ this->eyeIndex = 4;
+ if (this->blinkTimer > 0) {
+ this->blinkTimer--;
+ } else {
+ this->blinkTimer = 0;
+ }
+ if (this->blinkTimer < 4) {
+ this->eyeIndex = this->blinkTimer + 4;
+ }
+ if (this->blinkTimer == 0) {
+ this->blinkTimer = Rand_S16Offset(30, 30);
+ }
+ break;
-extern UNK_TYPE D_06002470;
-extern UNK_TYPE D_06004E70;
-extern UNK_TYPE D_0600E748;
+ case TURTLE_EYEMODE_CLOSED:
+ this->eyeIndex = 2;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/func_80AAF050.s")
+ case TURTLE_EYEMODE_LOOK_STRAIGHT:
+ this->eyeIndex = 4;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/func_80AAF15C.s")
+ case TURTLE_EYEMODE_LOOK_RIGHT:
+ this->eyeIndex = 8;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/DmChar08_Init.s")
+ default:
+ break;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/DmChar08_Destroy.s")
+void DmChar08_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animationInfo, u16 animIndex) {
+ f32 endFrame;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/func_80AAF610.s")
+ animationInfo += animIndex;
+ if (animationInfo->frameCount < 0.0f) {
+ endFrame = Animation_GetLastFrame(animationInfo->animation);
+ } else {
+ endFrame = animationInfo->frameCount;
+ }
+ Animation_Change(skelAnime, animationInfo->animation, animationInfo->playSpeed, animationInfo->startFrame, endFrame,
+ animationInfo->mode, animationInfo->morphFrames);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/func_80AAF79C.s")
+void DmChar08_Init(Actor* thisx, PlayState* play2) {
+ PlayState* play = play2;
+ DmChar08* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/func_80AAF884.s")
+ thisx->targetMode = 5;
+ this->eyeMode = TURTLE_EYEMODE_CLOSED;
+ thisx->targetArrowOffset = 120.0f;
+ ActorShape_Init(&thisx->shape, 0.0f, ActorShadow_DrawCircle, 24.0f);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gTurtleSkel, NULL, NULL, NULL, 0);
+ Actor_ProcessInitChain(thisx, sInitChain);
+ Actor_SetScale(thisx, 0.1f);
+ this->unk_1F4 = 0;
+ this->bubbleCount = 0;
+ this->unk_1FF = 0;
+ this->alpha = 0;
+ this->animIndex = TURTLE_ANIM_IDLE;
+ this->unk_1FC = 0xFFFF;
+ this->dynapolyInitialized = false;
+ this->targetYPos = thisx->world.pos.y;
+ this->unk_1F0 = 0.0f;
+ if (play->sceneId == SCENE_31MISAKI) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_20)) {
+ DynaPolyActor_Init(&this->dyna, 3);
+ DynaPolyActor_LoadMesh(play, &this->dyna, &gTurtleZoraCapeAwakeCol);
+ } else {
+ DynaPolyActor_Init(&this->dyna, 3);
+ DynaPolyActor_LoadMesh(play, &this->dyna, &gTurtleZoraCapeAsleepCol);
+ }
+ this->dynapolyInitialized = true;
+ } else if (play->sceneId == SCENE_SEA) {
+ DynaPolyActor_Init(&this->dyna, 3);
+ DynaPolyActor_LoadMesh(play, &this->dyna, &sTurtleGreatBayTempleCol);
+ this->dynapolyInitialized = true;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/func_80AAF8F4.s")
+ this->palmTree1 = Actor_Spawn(&play->actorCtx, play, ACTOR_OBJ_YASI, thisx->world.pos.x + -80.0f,
+ thisx->world.pos.y + 390.0f, thisx->world.pos.z, 0, 0, 0, 1);
+ this->palmTree2 = Actor_Spawn(&play->actorCtx, play, ACTOR_OBJ_YASI, thisx->world.pos.x + 68.0f,
+ thisx->world.pos.y + 368.0f, thisx->world.pos.z - 174.0f, 0, 0x7530, 0, 1);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/func_80AAFA18.s")
+ switch (play->sceneId) {
+ case SCENE_31MISAKI:
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_20)) {
+ thisx->world.pos.x = -6480.0f;
+ this->targetYPos = -120.0f;
+ thisx->world.pos.z = 1750.0f;
+ thisx->world.rot.x = 0;
+ thisx->world.rot.y = -0x7234;
+ thisx->world.rot.z = 0;
+ thisx->shape.rot.x = 0;
+ thisx->shape.rot.y = -0x7234;
+ thisx->shape.rot.z = 0;
+ this->unk_1F0 = 1.0f;
+ this->unk_1FF = 2;
+ this->animIndex = TURTLE_ANIM_FLOAT;
+ this->unk_203 = 0x63;
+ this->eyeMode = TURTLE_EYEMODE_BLINK_STRAIGHT;
+ this->unk_207 = 0;
+ this->unk_208 = 0;
+ thisx->flags |= ACTOR_FLAG_1;
+ if (gSaveContext.save.entrance == ENTRANCE(ZORA_CAPE, 8)) {
+ this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT;
+ this->actionFunc = func_80AAFAC4;
+ } else {
+ this->actionFunc = func_80AAF8F4;
+ }
+ } else {
+ this->actionFunc = DmChar08_WaitForSong;
+ }
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/func_80AAFAC4.s")
+ case SCENE_SEA:
+ this->unk_1FF = 2;
+ this->animIndex = TURTLE_ANIM_FLOAT;
+ this->unk_203 = 0x63;
+ this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT;
+ this->unk_207 = 0;
+ this->unk_208 = 0;
+ thisx->flags |= ACTOR_FLAG_1;
+ this->actionFunc = func_80AAFAE4;
+ this->unk_1F0 = 1.0f;
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/func_80AAFAE4.s")
+ case SCENE_KONPEKI_ENT:
+ this->unk_1FF = 2;
+ this->animIndex = TURTLE_ANIM_FLOAT;
+ this->unk_203 = 0x63;
+ this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT;
+ this->unk_207 = 0;
+ this->unk_208 = 0;
+ this->actionFunc = DmChar08_DoNothing;
+ this->unk_1F0 = 1.0f;
+ break;
+ }
+ DmChar08_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/func_80AAFB04.s")
+void DmChar08_Destroy(Actor* thisx, PlayState* play) {
+ DmChar08* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/func_80AAFB94.s")
+ if (this->dynapolyInitialized) {
+ DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/func_80AAFBA4.s")
+static s16 sSuccessSoundAlreadyPlayed = false;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/func_80AAFCCC.s")
+void DmChar08_WaitForSong(DmChar08* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+ Player* player2 = GET_PLAYER(play);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/func_80AAFE78.s")
+ if ((player2->stateFlags2 & PLAYER_STATE2_8000000) &&
+ ((player2->actor.world.pos.x > -5780.0f) && (player2->actor.world.pos.x < -5385.0f) &&
+ (player2->actor.world.pos.z > 1120.0f) && (player2->actor.world.pos.z < 2100.0f))) {
+ if (!sSuccessSoundAlreadyPlayed) {
+ play_sound(NA_SE_SY_TRE_BOX_APPEAR);
+ sSuccessSoundAlreadyPlayed = true;
+ }
+ } else {
+ sSuccessSoundAlreadyPlayed = false;
+ }
+ if ((player->transformation == PLAYER_FORM_ZORA) && (play->msgCtx.ocarinaMode == 3) &&
+ (play->msgCtx.lastPlayedSong == OCARINA_SONG_NEW_WAVE)) {
+ if ((player2->actor.world.pos.x > -5780.0f) && (player2->actor.world.pos.x < -5385.0f)) {
+ if ((player2->actor.world.pos.z > 1120.0f) && (player2->actor.world.pos.z < 2100.0f)) {
+ this->actionFunc = DmChar08_SetupAppearCs;
+ }
+ }
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/func_80AAFE88.s")
+void DmChar08_SetupAppearCs(DmChar08* this, PlayState* play) {
+ s16 cs1 = this->dyna.actor.cutscene;
+ s16 cs = ActorCutscene_GetAdditionalCutscene(
+ ActorCutscene_GetAdditionalCutscene(ActorCutscene_GetAdditionalCutscene(cs1)));
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/func_80AB01E8.s")
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_93_08)) {
+ cs1 = cs;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/func_80AB023C.s")
+ if (ActorCutscene_GetCanPlayNext(cs1)) {
+ ActorCutscene_Start(cs1, &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);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/func_80AB032C.s")
+void func_80AAF884(DmChar08* this, PlayState* play) {
+ if (play->csCtx.state == CS_STATE_0) {
+ DynaPolyActor_Init(&this->dyna, 3);
+ DynaPolyActor_LoadMesh(play, &this->dyna, &gTurtleZoraCapeAwakeCol);
+ this->dyna.actor.flags |= ACTOR_FLAG_1;
+ this->actionFunc = func_80AAF8F4;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/func_80AB096C.s")
+void func_80AAF8F4(DmChar08* this, PlayState* play) {
+ s32 pad;
+ f32 yOffset;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/func_80AB0A10.s")
+ if (fabsf(this->dyna.actor.xzDistToPlayer) < 200.0f) {
+ this->actionFunc = func_80AAFA18;
+ }
+ this->unk_1FA += 200;
+ yOffset = 50.0f;
+ yOffset *= Math_SinS(this->unk_1FA);
+ Math_SmoothStepToF(&this->dyna.actor.world.pos.x, -6400.0f, 0.2f, 2.0f, 0.1f);
+ Math_SmoothStepToF(&this->targetYPos, -180.0f + yOffset, 0.5f, 5.0f, 0.1f);
+ Math_SmoothStepToF(&this->dyna.actor.world.pos.z, 1750.0f, 0.5f, 20.0f, 0.1f);
+ Math_SmoothStepToS(&this->dyna.actor.world.rot.y, -0x7234, 0xA, 0xDC, 1);
+ Math_SmoothStepToS(&this->dyna.actor.shape.rot.y, -0x7234, 0xA, 0xDC, 1);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/DmChar08_Update.s")
+void func_80AAFA18(DmChar08* this, PlayState* play) {
+ s16 nextCs;
+ s16 nextCs2;
+ s16 nextCs1;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/func_80AB0E3C.s")
+ nextCs1 = ActorCutscene_GetAdditionalCutscene(this->dyna.actor.cutscene);
+ nextCs2 = nextCs1;
+ nextCs1 = ActorCutscene_GetAdditionalCutscene(nextCs1);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/func_80AB0E7C.s")
+ nextCs = CHECK_WEEKEVENTREG(WEEKEVENTREG_53_40) ? nextCs1 : nextCs2;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/func_80AB0F90.s")
+ if (ActorCutscene_GetCanPlayNext(nextCs) != 0) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_53_40);
+ ActorCutscene_Start(nextCs, &this->dyna.actor);
+ this->actionFunc = DmChar08_DoNothing;
+ } else {
+ ActorCutscene_SetIntentToPlay(nextCs);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Char08/DmChar08_Draw.s")
+void func_80AAFAC4(DmChar08* this, PlayState* play) {
+ if (play->csCtx.state == 0) {
+ this->actionFunc = func_80AAF8F4;
+ }
+}
+
+void func_80AAFAE4(DmChar08* this, PlayState* play) {
+ if (play->csCtx.state == 0) {
+ this->actionFunc = func_80AAFB04;
+ }
+}
+
+void func_80AAFB04(DmChar08* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+
+ if ((fabsf(this->dyna.actor.xzDistToPlayer) < 200.0f) && (player->actor.world.pos.y > 0.0f)) {
+ play->nextEntrance = ENTRANCE(ZORA_CAPE, 7);
+ play->transitionTrigger = TRANS_TRIGGER_START;
+ Scene_SetExitFade(play);
+ this->actionFunc = func_80AAFB94;
+ }
+}
+
+void func_80AAFB94(DmChar08* this, PlayState* play) {
+}
+
+Color_RGBA8 sLargeTurtleBubblePrimColor = { 250, 200, 250, 100 };
+Color_RGBA8 sLargeTurtleBubbleEnvColor = { 80, 80, 80, 0 };
+Vec3f sLargeTurtleBubbleAccel = { 0.0f, -0.8f, 0.0f };
+
+void DmChar08_SpawnBubbles(DmChar08* this, PlayState* play) {
+ s32 i;
+ Vec3f velocity;
+
+ velocity.x = (Rand_ZeroOne() - 0.5f) * 24.0f;
+ velocity.y = -5.2f;
+ velocity.z = 4.0f;
+ sLargeTurtleBubbleAccel.x = 0.0f;
+ sLargeTurtleBubbleAccel.y = 1.18f;
+ sLargeTurtleBubbleAccel.z = 0.0f;
+ for (i = 0; i < this->bubbleCount; i++) {
+ EffectSsDtBubble_SpawnCustomColor(play, &this->bubblePos, &velocity, &sLargeTurtleBubbleAccel,
+ &sLargeTurtleBubblePrimColor, &sLargeTurtleBubbleEnvColor,
+ Rand_S16Offset(80, 130), 30, 0);
+ }
+}
+
+void func_80AAFCCC(DmChar08* this, PlayState* play) {
+ switch (play->sceneId) {
+ case SCENE_31MISAKI:
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) {
+ switch (this->unk_206) {
+ case 0:
+ break;
+
+ case 1:
+ // Fire hookshot
+ Message_StartTextbox(play, 0x102A, &this->dyna.actor);
+ this->unk_206++;
+ break;
+
+ case 2:
+ // I know your name
+ if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) {
+ Message_StartTextbox(play, 0x102B, &this->dyna.actor);
+ this->unk_206 = 0;
+ }
+ break;
+ }
+ } else {
+ switch (this->unk_206) {
+ case 0:
+ break;
+
+ case 1:
+ // Going to the temple again
+ Message_StartTextbox(play, 0x103B, &this->dyna.actor);
+ this->unk_206++;
+ break;
+
+ case 2:
+ if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) {
+ func_801477B4(play);
+ this->unk_206 = 0;
+ }
+ break;
+ }
+ }
+ return;
+
+ case SCENE_SEA:
+ switch (this->unk_206) {
+ case 0:
+ break;
+
+ case 1:
+ Message_StartTextbox(play, 0x102E, &this->dyna.actor);
+ this->unk_206++;
+ break;
+
+ case 2:
+ if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) {
+ Message_StartTextbox(play, 0x102F, &this->dyna.actor);
+ this->unk_206 = 0;
+ }
+ break;
+ }
+ break;
+ }
+}
+
+void DmChar08_DoNothing(DmChar08* this, PlayState* play) {
+}
+
+void func_80AAFE88(DmChar08* this, PlayState* play) {
+ s32 actorActionIndex;
+ CsCmdActorAction* csAction;
+ 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) {
+ case 1:
+ this->animIndex = TURTLE_ANIM_IDLE;
+ break;
+
+ case 3:
+ this->bubbleCount = 2;
+ break;
+
+ case 4:
+ this->animIndex = TURTLE_ANIM_FLOAT;
+ break;
+
+ case 5:
+ this->animIndex = TURTLE_ANIM_SWIM;
+ break;
+
+ case 6:
+ this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT;
+ break;
+
+ case 7:
+ this->eyeMode = TURTLE_EYEMODE_CLOSED;
+ break;
+
+ case 8:
+ this->animIndex = TURTLE_ANIM_YAWN;
+ break;
+
+ case 9:
+ this->animIndex = TURTLE_ANIM_FLOAT;
+ break;
+
+ case 10:
+ this->animIndex = TURTLE_ANIM_COUGH;
+ break;
+
+ case 12:
+ this->animIndex = TURTLE_ANIM_SPEAK2;
+ break;
+
+ case 13:
+ this->bubbleCount = 0;
+ break;
+
+ case 14:
+ Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BIG_TORTOISE_ROLL);
+ this->animIndex = TURTLE_ANIM_FLOAT;
+ break;
+ }
+ }
+ switch (play->csCtx.actorActions[actorActionIndex]->action) {
+ 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);
+ if (phi_f12 > 1.0f) {
+ phi_f12 = 1.0f;
+ }
+
+ this->alpha = (1.0f - phi_f12) * 255.0f;
+ if (this->alpha < 6) {
+ this->unk_1FF = 2;
+ }
+
+ Cutscene_ActorTranslateAndYaw(&this->dyna.actor, play, actorActionIndex);
+ break;
+
+ case 5:
+ Cutscene_ActorTranslateAndYawSmooth(&this->dyna.actor, play, actorActionIndex);
+ 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);
+ this->dyna.actor.shape.rot.y = this->dyna.actor.world.rot.y;
+ break;
+
+ default:
+ Cutscene_ActorTranslateAndYaw(&this->dyna.actor, play, actorActionIndex);
+ break;
+ }
+ this->targetYPos = this->dyna.actor.world.pos.y;
+ if ((this->unk_1FF >= 2) || (play->csCtx.actorActions[actorActionIndex]->action == 2)) {
+ Math_SmoothStepToF(&this->unk_1F0, 1.0f, 0.02f, 0.1f, 0.00001f);
+ }
+ } else {
+ this->unk_1F6 = 99;
+ }
+}
+
+void func_80AB01E8(DmChar08* this, PlayState* play) {
+ if (this->animIndex != this->unk_203) {
+ this->unk_203 = this->animIndex;
+ DmChar08_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
+ }
+}
+
+void func_80AB023C(DmChar08* this, PlayState* play) {
+ if ((play->msgCtx.currentTextId != this->unk_1FC) && (play->msgCtx.currentTextId != 0)) {
+ this->unk_1FC = play->msgCtx.currentTextId;
+ this->unk_208 = 0;
+ switch (play->msgCtx.currentTextId) {
+ case 0x1025: // Slept well
+ this->unk_207 = 1;
+ break;
+
+ case 0x1026: // Time Flies
+ this->unk_207 = 2;
+ break;
+
+ case 0x1027: // See Everything
+ this->unk_207 = 3;
+ break;
+
+ case 0x1028: // No time
+ this->unk_207 = 4;
+ break;
+
+ case 0x1029: // Quick lets go
+ this->unk_207 = 10;
+ break;
+
+ case 0x102C: // Having trouble
+ this->unk_207 = 5;
+ break;
+
+ case 0x102D: // Ready, climb
+ this->unk_207 = 8;
+ break;
+
+ case 0x102A: // Fire hookshot
+ this->unk_207 = 6;
+ break;
+
+ case 0x102B: // I know your name
+ this->unk_207 = 2;
+ break;
+
+ case 0x102E: // Returning to shore
+ this->unk_207 = 9;
+ break;
+
+ case 0x102F: // It is okay to retreat
+ this->unk_207 = 7;
+ break;
+
+ case 0x103B: // Going to the temple again
+ this->unk_207 = 6;
+
+ break;
+ case 0x1030: // Return to sleep
+ this->unk_207 = 4;
+ break;
+ }
+ }
+}
+
+void func_80AB032C(DmChar08* this, PlayState* play) {
+ switch (this->unk_207) {
+ case 1:
+ switch (this->unk_208) {
+ case 0:
+ this->animIndex = TURTLE_ANIM_YAWN;
+ this->eyeMode = TURTLE_EYEMODE_CLOSED;
+ this->unk_208++;
+ break;
+
+ case 1:
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->animIndex = TURTLE_ANIM_FLOAT;
+ this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT;
+ this->unk_207 = 0;
+ this->unk_208 = 0;
+ }
+ break;
+ }
+ break;
+
+ case 2:
+ switch (this->unk_208) {
+ case 0:
+ this->animIndex = TURTLE_ANIM_COUGH;
+ this->eyeMode = TURTLE_EYEMODE_CLOSED;
+ this->unk_208++;
+ break;
+
+ case 1:
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->animIndex = TURTLE_ANIM_SPEAK1;
+ this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT;
+ this->unk_208++;
+ }
+ break;
+
+ case 2:
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->animIndex = TURTLE_ANIM_FLOAT;
+ this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT;
+ this->unk_207 = 0;
+ this->unk_208 = 0;
+ }
+ break;
+ }
+ break;
+
+ case 3:
+ case 4:
+ case 8:
+ switch (this->unk_208) {
+ case 0:
+ this->animIndex = TURTLE_ANIM_SPEAK1;
+ if (this->unk_207 >= 5) {
+ this->eyeMode = TURTLE_EYEMODE_CLOSED;
+ } else {
+ this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT;
+ }
+ this->unk_208 = 2;
+ break;
+
+ case 2:
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->animIndex = TURTLE_ANIM_SPEAK2;
+ this->eyeMode = TURTLE_EYEMODE_CLOSED;
+ this->unk_208++;
+ }
+ break;
+
+ case 3:
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ if (this->unk_207 != 4) {
+ this->animIndex = TURTLE_ANIM_FLOAT;
+ this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT;
+ this->unk_207 = 0;
+ this->unk_208 = 0;
+ } else {
+ this->animIndex = TURTLE_ANIM_SPEAK1;
+ this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT;
+ this->unk_208++;
+ }
+ }
+ break;
+
+ case 4:
+ case 5:
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->unk_208++;
+ }
+ break;
+
+ case 6:
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->animIndex = TURTLE_ANIM_FLOAT;
+ this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT;
+ this->unk_207 = 0;
+ this->unk_208 = 0;
+ }
+ break;
+ }
+ break;
+
+ case 5:
+ switch (this->unk_208) {
+ case 0:
+ this->animIndex = TURTLE_ANIM_SPEAK1;
+ this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT;
+ this->unk_208++;
+ break;
+
+ case 2:
+ case 3:
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->unk_208++;
+ }
+ break;
+
+ case 4:
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->animIndex = TURTLE_ANIM_SPEAK2;
+ this->eyeMode = TURTLE_EYEMODE_CLOSED;
+ this->unk_208++;
+ }
+ break;
+
+ case 5:
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->animIndex = TURTLE_ANIM_FLOAT;
+ this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT;
+ this->unk_207 = 0;
+ this->unk_208 = 0;
+ }
+ break;
+ }
+ break;
+
+ case 6:
+ switch (this->unk_208) {
+ case 0:
+ this->animIndex = TURTLE_ANIM_SPEAK1;
+ this->eyeMode = TURTLE_EYEMODE_LOOK_RIGHT;
+ this->unk_208++;
+ break;
+
+ case 1:
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->unk_208++;
+ }
+ break;
+
+ case 2:
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->animIndex = TURTLE_ANIM_FLOAT;
+ this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT;
+ this->unk_207 = 0;
+ this->unk_208 = 0;
+ }
+ break;
+ }
+ break;
+
+ case 7:
+ switch (this->unk_208) {
+ case 0:
+ this->animIndex = TURTLE_ANIM_SPEAK2;
+ this->eyeMode = TURTLE_EYEMODE_CLOSED;
+ this->unk_208++;
+ break;
+
+ case 1:
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->animIndex = TURTLE_ANIM_SPEAK1;
+ this->eyeMode = TURTLE_EYEMODE_CLOSED;
+ this->unk_208++;
+ }
+ break;
+
+ case 2:
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->animIndex = TURTLE_ANIM_FLOAT;
+ this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT;
+ this->unk_207 = 0;
+ this->unk_208 = 0;
+ }
+ break;
+ }
+ break;
+
+ case 9:
+ switch (this->unk_208) {
+ case 0:
+ this->animIndex = TURTLE_ANIM_SPEAK1;
+ this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT;
+ this->unk_208++;
+ break;
+
+ case 1:
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->unk_208++;
+ }
+ if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) {
+ this->unk_208 = 3;
+ }
+ break;
+
+ case 2:
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->animIndex = TURTLE_ANIM_FLOAT;
+ this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT;
+ this->unk_208++;
+ }
+ if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) {
+ this->unk_208 = 3;
+ }
+ break;
+
+ case 3:
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->animIndex = TURTLE_ANIM_COUGH;
+ this->eyeMode = TURTLE_EYEMODE_CLOSED;
+ this->unk_208++;
+ }
+ break;
+
+ case 4:
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->animIndex = TURTLE_ANIM_FLOAT;
+ this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT;
+ this->unk_207 = 0;
+ this->unk_208 = 0;
+ }
+ break;
+ }
+ break;
+ case 10:
+ switch (this->unk_208) {
+ case 0:
+ this->animIndex = TURTLE_ANIM_SPEAK1;
+ this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT;
+ this->unk_208++;
+ break;
+ case 1:
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->animIndex = TURTLE_ANIM_SPEAK2;
+ this->eyeMode = TURTLE_EYEMODE_CLOSED;
+ this->unk_208++;
+ }
+ break;
+ case 2:
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->animIndex = TURTLE_ANIM_SPEAK1;
+ this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT;
+ this->unk_208++;
+ }
+ break;
+ case 3:
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->animIndex = TURTLE_ANIM_FLOAT;
+ this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT;
+ this->unk_207 = 0;
+ this->unk_208 = 0;
+ }
+ break;
+ }
+ break;
+ }
+}
+
+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 ((this->animIndex == TURTLE_ANIM_SWIM) && Animation_OnFrame(&this->skelAnime, 16.0f)) {
+ Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_BIG_TORTOISE_SWIM);
+ }
+}
+
+void DmChar08_UpdateCollision(DmChar08* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+ f32 curFrame;
+ f32 phi_f2;
+ f32 phi_f0;
+ f32 phi_f12;
+ s32 i;
+
+ if (player->actor.world.pos.x > 0.0f) {
+ curFrame = this->skelAnime.curFrame;
+ if (curFrame <= 19.0f) {
+ phi_f12 = 19.0f;
+ phi_f2 = curFrame / 19.0f;
+ } else {
+ phi_f2 = (29.0f - curFrame) / 9.0f;
+ phi_f12 = 29.0f;
+ }
+
+ sTurtleGreatBayTempleCol.polyList = sTurtleGreatBayTempleColPolygons;
+
+ for (i = 0; i < ARRAY_COUNT(sTurtleGreatBayTempleColVertices); i++) {
+ sTurtleGreatBayTempleColVertices[i].x = sTurtleGreatBayTempleColVertices2[i].x;
+ }
+
+ sTurtleGreatBayTempleColVertices[0].y = (100.0f * phi_f2) + 900.0f;
+ sTurtleGreatBayTempleColVertices[1].y = (100.0f * phi_f2) + 900.0f;
+ sTurtleGreatBayTempleColVertices[2].y = (500.0f * phi_f2) + -200.0f;
+ sTurtleGreatBayTempleColVertices[3].y = (900.0f * phi_f2) + -800.0f;
+ sTurtleGreatBayTempleColVertices[5].y = 0x4B0;
+ sTurtleGreatBayTempleColVertices[9].y = 0x6A4;
+ } else {
+ phi_f0 = this->skelAnime.curFrame + 26.0f;
+ if (phi_f0 > 29.0f) {
+ phi_f12 = 29.0f;
+ phi_f0 -= 29.0f;
+ }
+
+ if (phi_f0 <= 18.0f) {
+ phi_f2 = phi_f0 / 18.0f;
+ } else {
+ phi_f2 = (29.0f - phi_f0) / 10.0f;
+ }
+
+ sTurtleGreatBayTempleCol.polyList = sTurtleGreatBayTempleColPolygons2;
+
+ for (i = 0; i < ARRAY_COUNT(sTurtleGreatBayTempleColVertices); i++) {
+ sTurtleGreatBayTempleColVertices[i].x = -sTurtleGreatBayTempleColVertices2[i].x;
+ }
+
+ sTurtleGreatBayTempleColVertices[0].y = (500.0f * phi_f2) + 720.0f;
+ sTurtleGreatBayTempleColVertices[1].y = (660.0f * phi_f2) + 420.0f;
+ sTurtleGreatBayTempleColVertices[2].y = (1130.0f * phi_f2) + -430.0f;
+ sTurtleGreatBayTempleColVertices[3].y = (1430.0f * phi_f2) + -1060.0f;
+ sTurtleGreatBayTempleColVertices[5].y = 0x4B0;
+ sTurtleGreatBayTempleColVertices[9].y = 0x6A4;
+ }
+ func_800C6554(play, &play->colCtx.dyna);
+}
+
+void DmChar08_Update(Actor* thisx, PlayState* play) {
+ DmChar08* this = THIS;
+
+ this->dyna.actor.focus.pos.x = this->focusPos.x;
+ this->dyna.actor.focus.pos.y = this->focusPos.y + this->dyna.actor.targetArrowOffset;
+ this->dyna.actor.focus.pos.z = this->focusPos.z;
+ this->dyna.actor.focus.rot.x = this->dyna.actor.world.rot.x;
+ this->dyna.actor.focus.rot.y = this->dyna.actor.world.rot.y;
+ this->dyna.actor.focus.rot.z = this->dyna.actor.world.rot.z;
+
+ if (Actor_ProcessTalkRequest(&this->dyna.actor, &play->state)) {
+ this->unk_206 = 1;
+ }
+
+ DmChar08_UpdateEyes(this);
+ this->actionFunc(this, play);
+ func_80AAFE88(this, play);
+ func_80AB023C(this, play);
+ func_80AB032C(this, play);
+ func_80AB01E8(this, play);
+ SkelAnime_Update(&this->skelAnime);
+ DmChar08_SpawnBubbles(this, 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);
+ } else {
+ func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
+ }
+ }
+ if (this->unk_1FF != 0) {
+ func_80AAFCCC(this, play);
+ func_800B8614(&this->dyna.actor, play, 400.0f);
+ }
+ func_80AB096C(this, play);
+ DmChar08_UpdateCollision(this, 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) &&
+ (limbIndex == TURTLE_LIMB_FRONT_RIGHT_UPPER_FLIPPER)) {
+ rot->z = -0x5E24;
+ }
+ return false;
+}
+
+void DmChar08_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
+ DmChar08* this = THIS;
+ Vec3f src;
+
+ if (limbIndex == TURTLE_LIMB_SHELL) {
+ src.x = 800.0f;
+ src.y = 2600.0f;
+ src.z = -800.0f;
+ Matrix_MultVec3f(&src, &this->tree1Pos);
+ src.x = 2600.0f;
+ src.y = 2500.0f;
+ src.z = 700.0f;
+ Matrix_MultVec3f(&src, &this->tree2Pos);
+ } else if (limbIndex == TURTLE_LIMB_LOWER_MOUTH) {
+ src.x = 1600.0f;
+ src.y = -200.0f;
+ src.z = 0.0f;
+ Matrix_MultVec3f(&src, &this->bubblePos);
+ } else if (limbIndex == TURTLE_LIMB_UPPER_MOUTH) {
+ src.x = 600.0f;
+ src.y = 700.0f;
+ src.z = 0.0f;
+ Matrix_MultVec3f(&src, &this->focusPos);
+ }
+}
+
+void DmChar08_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
+ DmChar08* this = THIS;
+ f32 one;
+
+ switch (limbIndex) {
+ case TURTLE_LIMB_SHELL:
+ break;
+
+ case TURTLE_LIMB_NECK:
+ Matrix_Pop();
+ one = 1.0f;
+ Matrix_Scale(((one - 0.7f) * this->unk_1F0) + 0.7f, ((one - 0.7f) * this->unk_1F0) + 0.7f, 1.0f,
+ MTXMODE_APPLY);
+ Matrix_Push();
+ break;
+
+ case TURTLE_LIMB_FRONT_LEFT_UPPER_FLIPPER:
+ case TURTLE_LIMB_FRONT_LEFT_LOWER_FLIPPER:
+ case TURTLE_LIMB_FRONT_RIGHT_UPPER_FLIPPER:
+ case TURTLE_LIMB_FRONT_RIGHT_LOWER_FLIPPER:
+ Matrix_Pop();
+ Matrix_Scale((this->unk_1F0 * 0.4f) + 0.6f, (this->unk_1F0 * 0.4f) + 0.6f, (this->unk_1F0 * 0.4f) + 0.6f,
+ MTXMODE_APPLY);
+ Matrix_Push();
+ break;
+
+ case TURTLE_LIMB_FRONT_LEFT_END_FLIPPER:
+ case TURTLE_LIMB_FRONT_RIGHT_END_FLIPPER:
+ Matrix_Scale((this->unk_1F0 * 0.4f) + 0.6f, (this->unk_1F0 * 0.4f) + 0.6f, (this->unk_1F0 * 0.4f) + 0.6f,
+ MTXMODE_APPLY);
+ break;
+
+ case TURTLE_TAIL_LIMB:
+ Matrix_Pop();
+ Matrix_Scale((this->unk_1F0 * 0.52f) + 0.48f, (this->unk_1F0 * 0.52f) + 0.48f,
+ (this->unk_1F0 * 0.52f) + 0.48f, MTXMODE_APPLY);
+ Matrix_Push();
+ break;
+
+ case TURTLE_LIMB_BACK_LEFT_FLIPPER:
+ case TURTLE_LIMB_BACK_RIGHT_FLIPPER:
+ Matrix_Scale((this->unk_1F0 * 0.55f) + 0.45f, (this->unk_1F0 * 0.2f) + 0.8f,
+ (this->unk_1F0 * 0.55f) + 0.45f, MTXMODE_APPLY);
+ break;
+ }
+}
+
+TexturePtr sBigTurtleEyeTextures[] = {
+ gTurtleEyeOpenLeftTex, gTurtleEyeHalfLeftTex, gTurtleEyeClosedTex,
+ gTurtleEyeHalfLeftTex, gTurtleEyeOpenStraightTex, gTurtleEyeHalfStraightTex,
+ gTurtleEyeClosedTex, gTurtleEyeHalfStraightTex, gTurtleEyeOpenRightTex,
+};
+
+void DmChar08_Draw(Actor* thisx, PlayState* play) {
+ s32 pad;
+ DmChar08* this = THIS;
+
+ OPEN_DISPS(play->state.gfxCtx);
+ func_8012C28C(play->state.gfxCtx);
+
+ 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)) {
+ SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
+ this->skelAnime.dListCount, DmChar08_OverrideLimbDraw, DmChar08_PostLimbDraw,
+ DmChar08_TransformLimbDraw, &this->dyna.actor);
+ this->palmTree1->world.pos.x = this->tree1Pos.x;
+ this->palmTree1->world.pos.y = this->tree1Pos.y;
+ this->palmTree1->world.pos.z = this->tree1Pos.z;
+ this->palmTree2->world.pos.x = this->tree2Pos.x;
+ this->palmTree2->world.pos.y = this->tree2Pos.y;
+ this->palmTree2->world.pos.z = this->tree2Pos.z;
+ }
+ if (this->unk_1FF == 0) {
+ Scene_SetRenderModeXlu(play, 0, 1);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, gTurtleAsleepDL);
+ } else if (this->unk_1FF == 1) {
+ func_8012C2DC(play->state.gfxCtx);
+ Scene_SetRenderModeXlu(play, 2, 2);
+ gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->alpha);
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, gTurtleAsleepDL);
+ }
+ CLOSE_DISPS(play->state.gfxCtx);
+}
diff --git a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.h b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.h
index 1718a9fb0..f339bceaa 100644
--- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.h
+++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.h
@@ -8,12 +8,36 @@ struct DmChar08;
typedef void (*DmChar08ActionFunc)(struct DmChar08*, PlayState*);
typedef struct DmChar08 {
- /* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0x5C];
+ /* 0x000 */ DynaPolyActor dyna;
+ /* 0x15C */ SkelAnime skelAnime;
/* 0x1A0 */ DmChar08ActionFunc actionFunc;
- /* 0x1A4 */ char unk_1A4[0x68];
+ /* 0x1A4 */ Actor* palmTree1;
+ /* 0x1A8 */ Actor* palmTree2;
+ /* 0x1AC */ Vec3f tree1Pos;
+ /* 0x1B8 */ Vec3f tree2Pos;
+ /* 0x1C4 */ Vec3f bubblePos;
+ /* 0x1D0 */ Vec3f focusPos;
+ /* 0x1DC */ UNK_TYPE1 unk_1DC[8];
+ /* 0x1E4 */ f32 targetYPos;
+ /* 0x1E8 */ UNK_TYPE1 unk_1E8[8];
+ /* 0x1F0 */ f32 unk_1F0;
+ /* 0x1F4 */ s16 unk_1F4;
+ /* 0x1F6 */ s16 unk_1F6;
+ /* 0x1F6 */ s16 blinkTimer;
+ /* 0x1FA */ s16 unk_1FA;
+ /* 0x1FC */ u16 unk_1FC;
+ /* 0x1FE */ u8 bubbleCount;
+ /* 0x1FF */ u8 unk_1FF;
+ /* 0x200 */ u8 eyeMode;
+ /* 0x201 */ u8 eyeIndex;
+ /* 0x202 */ u8 animIndex;
+ /* 0x203 */ u8 unk_203;
+ /* 0x204 */ UNK_TYPE1 unk_204;
+ /* 0x205 */ u8 alpha;
+ /* 0x206 */ u8 unk_206;
+ /* 0x207 */ u8 unk_207;
+ /* 0x208 */ u8 unk_208;
+ /* 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 8f02a8bb4..654bc6c07 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,
@@ -31,7 +31,7 @@ const ActorInit Dm_Char09_InitVars = {
};
static AnimationInfo sAnimationInfo[] = {
- { &object_bee_Anim_00005C, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
+ { &gBeeFlyingAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
};
void DmChar09_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animationInfo, u16 animIndex) {
@@ -53,8 +53,8 @@ void DmChar09_Init(Actor* thisx, PlayState* play) {
DmChar09* this = THIS;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 19.0f);
- SkelAnime_Init(play, &this->skelAnime, &object_bee_Skel_001398, &object_bee_Anim_00005C, this->jointTable,
- this->morphTable, OBJECT_BEE_LIMB_MAX);
+ SkelAnime_Init(play, &this->skelAnime, &gBeeSkel, &gBeeFlyingAnim, this->jointTable, this->morphTable,
+ OBJECT_BEE_LIMB_MAX);
DmChar09_ChangeAnim(&this->skelAnime, sAnimationInfo, 0);
Actor_SetScale(&this->actor, 0.01f);
this->unk_228 = Rand_ZeroOne() * 65535.0f;
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..dffe65975 100644
--- a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.h
+++ b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.h
@@ -34,6 +34,4 @@ typedef struct DmChar09 {
/* 0x22F */ u8 unk_22F;
} 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..5321abc92 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,
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..54db8d30f 100644
--- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h
+++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h
@@ -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..98f7bac48 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;
@@ -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;
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..3f35beea0 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];
+ /* 0x18C */ Vec3s jointTable[NB_LIMB_MAX];
+ /* 0x1BC */ Vec3s morphTable[NB_LIMB_MAX];
/* 0x1EC */ u8 unk1EC;
/* 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..db76db278 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,
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..3d9195413 100644
--- a/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.h
+++ b/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.h
@@ -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..25fee11db 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_00_10) | cREG(0)) {
+ Actor_Kill(&this->actor);
return;
}
@@ -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..11f2724de 100644
--- a/src/overlays/actors/ovl_Dm_Statue/z_dm_statue.c
+++ b/src/overlays/actors/ovl_Dm_Statue/z_dm_statue.c
@@ -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 2be56dda3..4f9d7d702 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,
@@ -311,7 +311,7 @@ void DmStk_LoadObjectForAnimation(DmStk* this, PlayState* play) {
}
if (objectIndex >= 0) {
- gSegments[6] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[objectIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment);
}
}
@@ -1017,7 +1017,7 @@ 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;
@@ -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;
@@ -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;
}
}
@@ -1172,7 +1172,7 @@ void DmStk_StartTelescopeCutscene(DmStk* this, PlayState* play) {
if (gSaveContext.save.day < 3) {
cutscene = dayOneAndTwoCutscene;
- } else if ((gSaveContext.save.weekEventReg[8] & 0x40) ||
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40) ||
((CURRENT_DAY == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0)))) {
cutscene = finalHoursCutscene;
} else {
@@ -1181,7 +1181,7 @@ void DmStk_StartTelescopeCutscene(DmStk* this, PlayState* play) {
if (ActorCutscene_GetCanPlayNext(cutscene)) {
ActorCutscene_Start(cutscene, &this->actor);
- func_800FE498();
+ Environment_StartTime();
this->actionFunc = DmStk_DoNothing;
} else {
ActorCutscene_SetIntentToPlay(cutscene);
@@ -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);
}
@@ -1420,7 +1420,7 @@ void DmStk_UpdateCutscenes(DmStk* this, PlayState* play) {
break;
case 25:
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
break;
case 26:
@@ -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;
}
@@ -1720,7 +1720,7 @@ void DmStk_ClockTower_IdleWithOcarina(DmStk* this, PlayState* play) {
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);
}
@@ -1816,9 +1816,10 @@ void DmStk_Update(Actor* thisx, PlayState* play) {
(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);
+ 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);
}
}
}
@@ -1909,13 +1910,13 @@ void DmStk_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot
(this->objectStk2ObjectIndex >= 0)) {
Matrix_Push();
Matrix_Scale(2.0f, 2.0f, 2.0f, MTXMODE_APPLY);
- gSegments[6] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[this->objectStk2ObjectIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->objectStk2ObjectIndex].segment);
gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->objectStk2ObjectIndex].segment);
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gSkullKidMajorasMaskCurseOverlayTexAnim));
Gfx_DrawDListOpa(play, gSkullKidMajorasMaskCurseOverlayDL);
- gSegments[6] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[this->objectStkObjectIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->objectStkObjectIndex].segment);
gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->objectStkObjectIndex].segment);
@@ -2027,7 +2028,7 @@ void DmStk_Draw(Actor* thisx, PlayState* play) {
return;
}
- gSegments[6] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[this->objectStkObjectIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->objectStkObjectIndex].segment);
OPEN_DISPS(play->state.gfxCtx);
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..f55321ef7 100644
--- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h
+++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h
@@ -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..ce1cc98f3 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,
@@ -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..a671fe3f2 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,
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..9086a052d 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,
@@ -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 {
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 75839ddd4..0a477df7e 100644
--- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c
+++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c
@@ -24,7 +24,7 @@
#define THIS ((DoorShutter*)thisx)
-void DoorShutter_Init(Actor* thisx, PlayState* play);
+void DoorShutter_Init(Actor* thisx, PlayState* play2);
void DoorShutter_Destroy(Actor* thisx, PlayState* play);
void DoorShutter_Update(Actor* thisx, PlayState* play);
@@ -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;
@@ -260,7 +260,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);
@@ -326,7 +327,7 @@ void func_808A0F88(DoorShutter* this, PlayState* play) {
} 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);
@@ -355,7 +356,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,18 +368,18 @@ 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;
+ player->doorType = PLAYER_DOORTYPE_TALKING;
this->actor.textId = 0x14FC;
}
} else if (this->unk_166 != 0) {
if (this->doorType == 5) {
- if (!CHECK_DUNGEON_ITEM(0, gSaveContext.mapIndex)) {
- player->doorType = -1;
+ if (!CHECK_DUNGEON_ITEM(DUNGEON_BOSS_KEY, gSaveContext.mapIndex)) {
+ 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;
@@ -453,7 +454,7 @@ s32 func_808A1478(DoorShutter* this, PlayState* play, f32 arg2) {
}
if ((this->unk_160 != -1) && (ActorCutscene_GetCurrentIndex() == this->unk_160)) {
- func_800B724C(play, &this->actor, 1);
+ func_800B724C(play, &this->actor, PLAYER_CSMODE_1);
}
}
@@ -477,7 +478,7 @@ void func_808A1548(DoorShutter* this, PlayState* play) {
} 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);
@@ -565,12 +566,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) {
func_801226E0(play, ((void)0, gSaveContext.respawn[RESPAWN_MODE_DOWN].data));
player->unk_A86 = -1;
- func_800B7298(play, NULL, 0x73);
+ func_800B7298(play, NULL, PLAYER_CSMODE_115);
}
}
}
@@ -621,8 +622,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_6);
}
DoorShutter_SetupDoor(this, play);
}
@@ -632,7 +633,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) {
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..c64d3d523 100644
--- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h
+++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h
@@ -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 123b58fa2..d7f77944f 100644
--- a/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c
+++ b/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c
@@ -67,7 +67,7 @@ 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 = {
+ActorInit Door_Spiral_InitVars = {
ACTOR_DOOR_SPIRAL,
ACTORCAT_DOOR,
FLAGS,
@@ -179,7 +179,7 @@ void DoorSpiral_Init(Actor* thisx, PlayState* play) {
s8 objBankId;
if (this->actor.room != play->transitionActors.list[transition].sides[0].room) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -191,7 +191,7 @@ void DoorSpiral_Init(Actor* thisx, PlayState* play) {
this->bankIndex = objBankId;
if (objBankId < 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -274,7 +274,7 @@ void DoorSpiral_Wait(DoorSpiral* this, PlayState* play) {
} else if (DoorSpiral_PlayerShouldClimb(this, play)) {
player = GET_PLAYER(play);
- player->doorType = 4;
+ player->doorType = PLAYER_DOORTYPE_STAIRCASE;
player->doorDirection = this->orientation;
player->doorActor = &this->actor;
transition = DOORSPIRAL_GET_TRANSITION_ID(&this->actor);
@@ -290,7 +290,7 @@ void DoorSpiral_Wait(DoorSpiral* this, PlayState* play) {
void DoorSpiral_PlayerClimb(DoorSpiral* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (!(player->stateFlags1 & 0x20000000)) {
+ if (!(player->stateFlags1 & PLAYER_STATE1_20000000)) {
DoorSpiral_SetupAction(this, DoorSpiral_WaitForObject);
this->shouldClimb = 0;
}
@@ -301,7 +301,8 @@ void DoorSpiral_Update(Actor* thisx, PlayState* play) {
s32 pad;
Player* player = GET_PLAYER(play);
- if ((!(player->stateFlags1 & 0x100004C0)) || (this->actionFunc == DoorSpiral_WaitForObject)) {
+ if (!(player->stateFlags1 & (PLAYER_STATE1_40 | PLAYER_STATE1_80 | PLAYER_STATE1_400 | PLAYER_STATE1_10000000)) ||
+ (this->actionFunc == DoorSpiral_WaitForObject)) {
this->actionFunc(this, play);
}
}
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..0f3e32a39 100644
--- a/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.h
+++ b/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.h
@@ -23,6 +23,4 @@ typedef struct DoorSpiral {
/* 0x14C */ DoorSpiralActionFunc actionFunc;
} 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..bc168d534 100644
--- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c
+++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c
@@ -49,7 +49,7 @@ void func_808BB8D4(DoorWarp1* this, PlayState* play, s32 arg2);
static s16 D_808BC000;
static f32 D_808BC004;
-const ActorInit Door_Warp1_InitVars = {
+ActorInit Door_Warp1_InitVars = {
ACTOR_DOOR_WARP1,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -75,7 +75,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 +163,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 +239,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 +270,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 {
@@ -344,7 +344,7 @@ 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_7);
Message_StartTextbox(play, 0xF2, &this->dyna.actor);
DoorWarp1_SetupAction(this, func_808B93A0);
}
@@ -360,14 +360,14 @@ void func_808B93A0(DoorWarp1* this, PlayState* play) {
func_801477B4(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_6);
DoorWarp1_SetupAction(this, func_808B94A4);
}
}
@@ -448,7 +448,7 @@ void func_808B977C(DoorWarp1* this, PlayState* 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;
@@ -599,7 +599,7 @@ void func_808B9F10(DoorWarp1* this, PlayState* play) {
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;
@@ -652,7 +652,7 @@ 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_07_80);
}
switch (phi_v0_2) {
@@ -710,8 +710,8 @@ void func_808BA10C(DoorWarp1* this, PlayState* play) {
} else {
switch (phi_v0_2) {
case 0:
- if (gSaveContext.save.weekEventReg[20] & 2) {
- gSaveContext.save.weekEventReg[7] |= 0x80;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_07_80);
play->nextEntrance = ENTRANCE(WOODFALL_TEMPLE, 1);
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_03;
@@ -726,7 +726,7 @@ void func_808BA10C(DoorWarp1* this, PlayState* play) {
break;
case 1:
- gSaveContext.save.weekEventReg[33] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_33_80);
play->nextEntrance = ENTRANCE(MOUNTAIN_VILLAGE_SPRING, 7);
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_03;
@@ -734,14 +734,14 @@ void func_808BA10C(DoorWarp1* this, PlayState* play) {
break;
case 3:
- if (gSaveContext.save.weekEventReg[55] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) {
play->nextEntrance = ENTRANCE(ZORA_CAPE, 9);
gSaveContext.nextCutsceneIndex = 0xFFF0;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_03;
gSaveContext.nextTransitionType = TRANS_TYPE_03;
} else {
- gSaveContext.save.weekEventReg[55] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_55_80);
play->nextEntrance = ENTRANCE(ZORA_CAPE, 8);
gSaveContext.nextCutsceneIndex = 0xFFF0;
play->transitionTrigger = TRANS_TRIGGER_START;
@@ -751,7 +751,7 @@ void func_808BA10C(DoorWarp1* this, PlayState* play) {
break;
case 2:
- gSaveContext.save.weekEventReg[52] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_52_20);
play->nextEntrance = ENTRANCE(IKANA_CANYON, 15);
gSaveContext.nextCutsceneIndex = 0xFFF2;
play->transitionTrigger = TRANS_TRIGGER_START;
@@ -886,14 +886,14 @@ 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;
if (ActorCutscene_GetCanPlayNext(cutscene)) {
ActorCutscene_Start(cutscene, &this->dyna.actor);
- gSaveContext.save.weekEventReg[86] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_86_80);
DoorWarp1_SetupAction(this, func_808BABF4);
} else {
ActorCutscene_SetIntentToPlay(cutscene);
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..076999e57 100644
--- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.h
+++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.h
@@ -56,6 +56,4 @@ typedef struct DoorWarp1 {
/* 0x208 */ u8 unk_208;
} 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..9174fafc0 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,
@@ -79,40 +79,41 @@ void func_80A4C5CC(EffChange* this, PlayState* play) {
f32 phi_fv0;
if (func_80183DE0(&this->skeletonInfo)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
ActorCutscene_Stop(0x7B);
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 (ActorCutscene_GetCurrentIndex() != 0x7B) {
+ if (ActorCutscene_GetCanPlayNext(0x7B)) {
+ ActorCutscene_Start(0x7B, &this->actor);
+ } else {
+ ActorCutscene_SetIntentToPlay(0x7B);
}
}
}
@@ -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 c517ad007..2833477e4 100644
--- a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c
+++ b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c
@@ -21,10 +21,10 @@ void func_80918D64(EffDust* this, PlayState* play);
void func_80918FE4(EffDust* this, PlayState* play);
void func_80919230(EffDust* this, PlayState* play);
-void func_80919768(Actor* thisx, PlayState* play);
-void func_809199FC(Actor* thisx, 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 83842569f..75ff275a1 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,
@@ -56,7 +57,7 @@ void EffKamejimaWave_Init(Actor* thisx, PlayState* play) {
this->actionFunc = func_80BCEC6C;
sVtxAlpha = 255;
}
- D_80BCF1C4 = Lib_SegmentedToVirtual(object_kamejima_Matanimheader_001AF0);
+ D_80BCF1C4 = Lib_SegmentedToVirtual(gTurtleWaveTexAnim);
}
void EffKamejimaWave_Destroy(Actor* thisx, PlayState* play) {
@@ -137,7 +138,7 @@ void EffKamejimaWave_Update(Actor* thisx, PlayState* play) {
}
void EffKamejimaWave_SetVtxAlpha(u8 alpha) {
- Vtx* vtx = Lib_SegmentedToVirtual(&object_kamejima_Vtx_000000);
+ Vtx* vtx = Lib_SegmentedToVirtual(&gTurtleWaveVtx);
vtx[2].v.cn[3] = alpha;
vtx[6].v.cn[3] = alpha;
@@ -165,7 +166,7 @@ void EffKamejimaWave_Draw(Actor* thisx, PlayState* play) {
AnimatedMat_Draw(play, D_80BCF1C4);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, primColor.r, primColor.g, primColor.b, 255);
gDPSetEnvColor(POLY_XLU_DISP++, envColor.r, envColor.g, envColor.b, 255);
- gSPDisplayList(POLY_XLU_DISP++, object_kamejima_DL_000140);
+ gSPDisplayList(POLY_XLU_DISP++, gTurtleWaveDL);
CLOSE_DISPS(play->state.gfxCtx);
}
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..0041f1e99 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,
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..89266d744 100644
--- a/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.h
+++ b/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.h
@@ -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..842ae4b9e 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,
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..3d7df7c27 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;
@@ -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..a29b226b0 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;
@@ -105,14 +105,16 @@ void func_8096EE64(ElfMsg2* this, PlayState* play) {
ActorCutscene_Stop(this->actor.cutscene);
}
}
+
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;
}
+
+ ElfMsg2_SetupAction(this, func_8096EF98);
} else if ((this->actor.cutscene != -1) && (ActorCutscene_GetCurrentIndex() != this->actor.cutscene)) {
if (ActorCutscene_GetCurrentIndex() == 0x7C) {
ActorCutscene_Stop(0x7C);
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..da6b29180 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;
@@ -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..7fbf402fa 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;
@@ -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..0ffb5c758 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,7 +147,7 @@ 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;
@@ -156,21 +156,21 @@ void ElfMsg6_Init(Actor* thisx, PlayState* play) {
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);
+ 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);
+ 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;
@@ -265,18 +265,18 @@ 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)) {
player->tatlTextId = -this->actor.textId;
@@ -299,23 +299,23 @@ 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;
}
@@ -330,8 +330,8 @@ void func_80BA1E30(ElfMsg6* this, PlayState* play) {
}
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;
}
@@ -339,10 +339,11 @@ void func_80BA1F80(ElfMsg6* this, PlayState* play) {
if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, NULL);
Flags_SetSwitch(play, ELFMSG6_SWITCHFLAG(&this->actor));
- Actor_MarkForDeath(&this->actor);
- } else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ Actor_Kill(&this->actor);
+ return;
}
+
+ ActorCutscene_SetIntentToPlay(this->actor.cutscene);
}
}
@@ -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..5ea851023 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,7 +554,7 @@ 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);
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..d2bdf0cee 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,
@@ -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;
}
}
@@ -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;
@@ -1085,7 +1085,7 @@ void func_80BEE73C(EnAkindonuts* this, PlayState* play) {
this->actionFunc = func_80BEF18C;
}
func_801477B4(play);
- } else if (itemActionParam < PLAYER_AP_NONE) {
+ } else if (itemAction <= PLAYER_IA_MINUS1) {
this->unk_33C = D_80BF04AC[params];
func_80151938(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;
}
@@ -1586,7 +1586,7 @@ void func_80BEFAF0(EnAkindonuts* this, PlayState* play) {
}
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;
}
}
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..72c932d0c 100644
--- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h
+++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h
@@ -50,6 +50,4 @@ typedef struct EnAkindonuts {
/* 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..da1cc7d7e 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;
@@ -410,7 +410,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 +451,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 +575,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 +659,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 +672,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 +699,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 +748,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 eda01c254..f76ebc4f3 100644
--- a/src/overlays/actors/ovl_En_Am/z_en_am.c
+++ b/src/overlays/actors/ovl_En_Am/z_en_am.c
@@ -35,9 +35,9 @@ void func_808B07A8(EnAm* this, PlayState* play);
void func_808B0820(EnAm* this);
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* actor);
+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,
@@ -437,7 +437,7 @@ 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);
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..8e98ae8a3 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
@@ -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);
}
}
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..a6624dc38 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) {
@@ -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;
@@ -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_7);
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_63_01);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02);
this->unk_2D2 |= 0x20;
func_800FD750(0x40);
play->nextEntrance = ENTRANCE(DOGGY_RACETRACK, 1);
@@ -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();
}
}
@@ -761,13 +763,13 @@ 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) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_20)) {
Actor_PickUp(&this->actor, play, GI_RUPEE_RED, 300.0f, 300.0f);
} else {
Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 300.0f, 300.0f);
@@ -779,12 +781,12 @@ 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_63_02)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02);
}
- if (gSaveContext.save.weekEventReg[63] & 1) {
- gSaveContext.save.weekEventReg[63] &= (u8)~1;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_01)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_01);
}
this->unk_210 = 0;
@@ -833,12 +835,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_63_02)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02);
}
- if (gSaveContext.save.weekEventReg[63] & 1) {
- gSaveContext.save.weekEventReg[63] &= (u8)~1;
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_01)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_01);
}
this->unk_210 = 0x354C;
@@ -876,7 +878,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;
@@ -967,7 +969,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_63_01);
}
Collider_DestroyCylinder(play, &this->collider);
}
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..2507b1728 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
@@ -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..b07e65de3 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,
@@ -170,7 +170,7 @@ 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;
}
@@ -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;
}
@@ -382,7 +382,7 @@ void func_8088ACE0(EnArrow* this, PlayState* play) {
}
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);
@@ -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.speedXZ, -this->actor.velocity.y);
}
}
@@ -516,7 +516,7 @@ void func_8088B630(EnArrow* this, PlayState* play) {
}
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);
}
}
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..d16dbd380 100644
--- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.h
+++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.h
@@ -53,6 +53,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..b4501ffa0 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,
@@ -282,7 +282,7 @@ 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;
}
@@ -334,7 +334,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;
}
@@ -376,10 +376,12 @@ 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 & 0x20) && // on or below 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);
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 3f35a5e35..bfefb5a85 100644
--- a/src/overlays/actors/ovl_En_Az/z_en_az.c
+++ b/src/overlays/actors/ovl_En_Az/z_en_az.c
@@ -18,16 +18,16 @@ typedef struct {
/* 0x4 */ f32 unk_4;
} struct_80A98F94; // size = 0x8
-void EnAz_Init(Actor* thisx, PlayState* play);
-void EnAz_Destroy(Actor* thisx, PlayState* play);
-void EnAz_Update(Actor* thisx, PlayState* play);
-void EnAz_Draw(Actor* thisx, PlayState* play);
+void EnAz_Init(Actor* thisx, PlayState* play2);
+void EnAz_Destroy(Actor* thisx, PlayState* play2);
+void EnAz_Update(Actor* thisx, PlayState* play2);
+void EnAz_Draw(Actor* thisx, PlayState* play2);
void func_80A982E0(PlayState* play, ActorPathing* actorPathing);
void func_80A98414(EnAz* this, PlayState* play);
s32 func_80A98DA4(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx);
void func_80A98E48(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx);
-void func_80A98EFC(EnAz* this, PlayState* play, u16 textId, s32 arg3, s32 arg4);
+void func_80A98EFC(EnAz* this, PlayState* play, u16 textId, s32 animIndex, s32 brotherAnimIndex);
void func_80A98F94(struct_80A98F94* yData, f32 frame, f32* yInterp);
void func_80A95C5C(EnAz* this, PlayState* play);
@@ -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,
@@ -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;
}
@@ -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;
@@ -698,7 +698,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 +707,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 +782,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 +866,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 +924,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 +943,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 +958,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 +992,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 +1044,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 +1065,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 +1096,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 +1109,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 +1188,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 +1205,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;
@@ -1337,7 +1337,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 {
@@ -1431,8 +1431,8 @@ 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);
}
@@ -1465,7 +1465,7 @@ 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;
@@ -1482,12 +1482,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 +1498,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);
}
@@ -1543,9 +1543,9 @@ 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;
@@ -1600,8 +1600,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;
}
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..2a219eb24 100644
--- a/src/overlays/actors/ovl_En_Az/z_en_az.h
+++ b/src/overlays/actors/ovl_En_Az/z_en_az.h
@@ -51,6 +51,4 @@ typedef struct EnAz {
/* 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..6040076f4 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;
@@ -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;
@@ -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));
}
}
@@ -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) &&
@@ -698,7 +698,7 @@ 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)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_40) && (DECR(this->sakonDeadTimer) == 0)) {
Audio_QueueSeqCmd(0x101400FF);
EnBaba_TriggerTransition(play, ENTRANCE(NORTH_CLOCK_TOWN, 7));
} else {
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..9017e0f89 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,
@@ -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) {
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..8812ae6d3 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) {
@@ -249,7 +247,7 @@ 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);
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..cee109c70 100644
--- a/src/overlays/actors/ovl_En_Bat/z_en_bat.c
+++ b/src/overlays/actors/ovl_En_Bat/z_en_bat.c
@@ -28,7 +28,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 +142,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;
}
@@ -369,7 +369,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;
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..c5657e385 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,
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 d141c6514..1b9538146 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);
@@ -262,8 +262,8 @@ s32 EnBba01_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f*
if (limbIndex == BBA_LIMB_RIGHT_LOWER_ARM_ROOT) {
OPEN_DISPS(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->enHy.headObjIndex].segment);
- gSegments[6] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[this->enHy.headObjIndex].segment);
- gSegments[6] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[this->enHy.skelLowerObjIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.headObjIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.skelLowerObjIndex].segment);
CLOSE_DISPS(play->state.gfxCtx);
}
if (limbIndex == BBA_LIMB_RIGHT_LOWER_ARM_ROOT) {
@@ -298,7 +298,7 @@ void EnBba01_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro
if (limbIndex == BBA_LIMB_HEAD) {
OPEN_DISPS(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->enHy.skelUpperObjIndex].segment);
- gSegments[0x06] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[this->enHy.skelUpperObjIndex].segment);
+ gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.skelUpperObjIndex].segment);
CLOSE_DISPS(play->state.gfxCtx);
}
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 b1e4db445..1dfc74a22 100644
--- a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c
+++ b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c
@@ -14,7 +14,7 @@
void EnBbfall_Init(Actor* thisx, PlayState* play);
void EnBbfall_Destroy(Actor* thisx, PlayState* play);
void EnBbfall_Update(Actor* thisx, PlayState* play);
-void EnBbfall_Draw(Actor* thisx, PlayState* play);
+void EnBbfall_Draw(Actor* thisx, PlayState* play2);
void EnBbfall_SetupWaitForPlayer(EnBbfall* this);
void EnBbfall_WaitForPlayer(EnBbfall* this, PlayState* play);
@@ -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,
@@ -466,12 +466,13 @@ 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;
}
}
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 0a0c6dd3f..cf8c5f68a 100644
--- a/src/overlays/actors/ovl_En_Bee/z_en_bee.c
+++ b/src/overlays/actors/ovl_En_Bee/z_en_bee.c
@@ -15,14 +15,14 @@ void EnBee_Destroy(Actor* thisx, PlayState* play);
void EnBee_Update(Actor* thisx, PlayState* play);
void EnBee_Draw(Actor* thisx, PlayState* play);
-void func_80B5A9E8(EnBee* this, PlayState* play);
-void func_80B5AC3C(EnBee* this, PlayState* play);
-void func_80B5A854(EnBee* this);
-void func_80B5ABC4(EnBee* this);
+void EnBee_SetupFlyIdle(EnBee* this);
+void EnBee_FlyIdle(EnBee* this, PlayState* play);
+void EnBee_SetupAttack(EnBee* this);
+void EnBee_Attack(EnBee* this, PlayState* play);
-s32 D_80B5B1F0 = 0;
+s32 sNumLoadedBees = 0;
-const ActorInit En_Bee_InitVars = {
+ActorInit En_Bee_InitVars = {
ACTOR_EN_BEE,
ACTORCAT_ENEMY,
FLAGS,
@@ -94,14 +94,14 @@ void EnBee_Init(Actor* thisx, PlayState* play) {
this->actor.colChkInfo.mass = 10;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 19.0f);
- SkelAnime_Init(play, &this->skelAnime, &object_bee_Skel_001398, &object_bee_Anim_00005C, this->morphTable,
- this->jointTable, OBJECT_BEE_LIMB_MAX);
+ SkelAnime_Init(play, &this->skelAnime, &gBeeSkel, &gBeeFlyingAnim, this->morphTable, this->jointTable,
+ OBJECT_BEE_LIMB_MAX);
this->actor.colChkInfo.health = 1;
this->actor.colChkInfo.damageTable = &sDamageTable;
this->actor.targetMode = 6;
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
- this->unk_218 = D_80B5B1F0;
- D_80B5B1F0++;
+ this->instanceId = sNumLoadedBees;
+ sNumLoadedBees++;
this->actor.shape.shadowScale = 12.0f;
if (ActorCutscene_GetCurrentIndex() != -1) {
@@ -109,7 +109,7 @@ void EnBee_Init(Actor* thisx, PlayState* play) {
}
this->actor.hintId = TATL_HINT_ID_GIANT_BEE;
- func_80B5A854(this);
+ EnBee_SetupFlyIdle(this);
}
void EnBee_Destroy(Actor* thisx, PlayState* play) {
@@ -118,121 +118,122 @@ void EnBee_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->collider);
}
-void func_80B5A854(EnBee* this) {
+void EnBee_SetupFlyIdle(EnBee* this) {
s32 pad;
- Vec3f sp48;
- s16 sp46;
+ Vec3f tempPos;
+ s16 yawOffset;
- Animation_Change(&this->skelAnime, &object_bee_Anim_00005C, 1.0f, 0.0f,
- Animation_GetLastFrame(&object_bee_Anim_00005C), 0, -10.0f);
- Math_Vec3f_Copy(&sp48, &this->actor.home.pos);
+ Animation_Change(&this->skelAnime, &gBeeFlyingAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gBeeFlyingAnim), 0, -10.0f);
+ Math_Vec3f_Copy(&tempPos, &this->actor.home.pos);
- sp46 = (this->unk_218 * 0x700) + 0x2000;
- sp48.x += Math_SinS(sp46) * 50.0f;
- sp48.y = Rand_ZeroFloat(50.0f) + (this->actor.floorHeight + 30.0f);
- sp48.z += Math_CosS(sp46) * 50.0f;
+ yawOffset = (this->instanceId * 0x700) + 0x2000;
+ tempPos.x += Math_SinS(yawOffset) * 50.0f;
+ tempPos.y = Rand_ZeroFloat(50.0f) + (this->actor.floorHeight + 30.0f);
+ tempPos.z += Math_CosS(yawOffset) * 50.0f;
- Math_Vec3f_Copy(&this->unk_21C[0], &sp48);
- Math_Vec3f_Copy(&sp48, &this->actor.home.pos);
+ Math_Vec3f_Copy(&this->targetPos[0], &tempPos);
+ Math_Vec3f_Copy(&tempPos, &this->actor.home.pos);
- sp48.x += Math_SinS(sp46 - 0x4000) * 50.0f;
- sp48.y = Rand_ZeroFloat(50.0f) + (this->actor.floorHeight + 30.0f);
- sp48.z += Math_CosS(sp46 - 0x4000) * 50.0f;
+ tempPos.x += Math_SinS(yawOffset - 0x4000) * 50.0f;
+ tempPos.y = Rand_ZeroFloat(50.0f) + (this->actor.floorHeight + 30.0f);
+ tempPos.z += Math_CosS(yawOffset - 0x4000) * 50.0f;
- Math_Vec3f_Copy(&this->unk_21C[1], &sp48);
+ Math_Vec3f_Copy(&this->targetPos[1], &tempPos);
- this->unk_204 = Rand_S16Offset(0x14, 0x1E);
- this->unk_208 = 0;
- this->actionFunc = func_80B5A9E8;
+ this->attackDelayTimer = Rand_S16Offset(20, 30);
+ this->isHostile = false;
+ this->actionFunc = EnBee_FlyIdle;
}
-void func_80B5A9E8(EnBee* this, PlayState* play) {
- Vec3f sp3C;
+void EnBee_FlyIdle(EnBee* this, PlayState* play) {
+ Vec3f nextPos;
s32 pad[2];
if ((this->actor.category != ACTORCAT_ENEMY) && (ActorCutscene_GetCurrentIndex() == -1)) {
func_800BC154(play, &play->actorCtx, &this->actor, ACTORCAT_ENEMY);
}
- Math_Vec3f_Copy(&sp3C, &this->unk_21C[this->unk_214]);
- sp3C.x += Math_SinS(this->unk_20C) * 30.0f;
- sp3C.z += Math_CosS(this->unk_20C) * 30.0f;
+ Math_Vec3f_Copy(&nextPos, &this->targetPos[this->posIndex]);
+ nextPos.x += Math_SinS(this->targetYaw) * 30.0f;
+ nextPos.z += Math_CosS(this->targetYaw) * 30.0f;
- if (!(this->unk_218 & 1)) {
- this->unk_20C += (s16)((s32)randPlusMinusPoint5Scaled(1000.0f) + 4000);
+ if ((this->instanceId % 2) == 0) {
+ this->targetYaw += (s16)((s32)randPlusMinusPoint5Scaled(1000.0f) + 4000);
} else {
- this->unk_20C -= (s16)((s32)randPlusMinusPoint5Scaled(1000.0f) + 4000);
+ this->targetYaw -= (s16)((s32)randPlusMinusPoint5Scaled(1000.0f) + 4000);
}
- this->unk_210 += 1000;
- this->actor.velocity.y = Math_SinS(this->unk_210);
+ this->flightHoverOffset += 1000;
+ this->actor.velocity.y = Math_SinS(this->flightHoverOffset);
- if (this->unk_20C > 0x10000) {
- this->unk_20C = 0;
- this->unk_214++;
- this->unk_214 &= 1;
+ if (this->targetYaw > 0x10000) {
+ this->targetYaw = 0;
+ this->posIndex++;
+ this->posIndex &= 1;
}
- Math_SmoothStepToS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &sp3C), 1, 0x7D0, 0);
+ 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);
- if ((this->unk_204 == 0) && (this->actor.params != 0)) {
- func_80B5ABC4(this);
+ if ((this->attackDelayTimer == 0) && (this->actor.params != BEE_BEHAVIOR_IDLE)) {
+ EnBee_SetupAttack(this);
}
}
-void func_80B5ABC4(EnBee* this) {
- Animation_Change(&this->skelAnime, &object_bee_Anim_00005C, 1.0f, 0.0f,
- Animation_GetLastFrame(&object_bee_Anim_00005C), 0, -10.0f);
- this->unk_208 = 1;
- this->actionFunc = func_80B5AC3C;
+void EnBee_SetupAttack(EnBee* this) {
+ Animation_Change(&this->skelAnime, &gBeeFlyingAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gBeeFlyingAnim), 0, -10.0f);
+ this->isHostile = true;
+ this->actionFunc = EnBee_Attack;
}
-void func_80B5AC3C(EnBee* this, PlayState* play) {
+void EnBee_Attack(EnBee* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- Vec3f sp88;
- f32 rnd;
- f32 phi_fs1;
+ Vec3f nextPos;
+ f32 rand;
+ f32 yawOffset;
s32 i;
- Math_Vec3f_Copy(&sp88, &player->actor.world.pos);
- phi_fs1 = (this->unk_218 * 0x700) + 0x2000;
+ Math_Vec3f_Copy(&nextPos, &player->actor.world.pos);
+ yawOffset = (this->instanceId * 0x700) + 0x2000;
for (i = 0; i < 2; i++) {
- rnd = randPlusMinusPoint5Scaled(20.0f);
- sp88.x += Math_SinS((this->actor.yawTowardsPlayer + ((f32)this->unk_20C)) + phi_fs1) * (rnd + 30.0f);
- sp88.y = (Math_SinS(this->unk_210) * 10.0f) + (player->actor.floorHeight + 40.0f);
- rnd = randPlusMinusPoint5Scaled(20.0f);
- sp88.z += Math_CosS((f32)this->actor.yawTowardsPlayer + this->unk_20C + phi_fs1) * (rnd + 30.0f);
- Math_Vec3f_Copy(&this->unk_21C[i], &sp88);
- phi_fs1 -= 16384.0f;
+ rand = randPlusMinusPoint5Scaled(20.0f);
+ nextPos.x += Math_SinS((f32)this->actor.yawTowardsPlayer + this->targetYaw + yawOffset) * (rand + 30.0f);
+ nextPos.y = (Math_SinS(this->flightHoverOffset) * 10.0f) + (player->actor.floorHeight + 40.0f);
+ rand = randPlusMinusPoint5Scaled(20.0f);
+
+ nextPos.z += Math_CosS((f32)this->actor.yawTowardsPlayer + this->targetYaw + yawOffset) * (rand + 30.0f);
+ Math_Vec3f_Copy(&this->targetPos[i], &nextPos);
+ yawOffset -= 0x4000;
}
- Math_Vec3f_Copy(&sp88, &this->unk_21C[this->unk_214]);
+ Math_Vec3f_Copy(&nextPos, &this->targetPos[this->posIndex]);
- if (!(this->unk_218 & 1)) {
- this->unk_20C += (this->unk_218 * 0x700) + (s32)randPlusMinusPoint5Scaled((this->unk_218 * 0x700) * 0.5f);
+ if ((this->instanceId % 2) == 0) {
+ this->targetYaw +=
+ (this->instanceId * 0x700) + (s32)randPlusMinusPoint5Scaled((this->instanceId * 0x700) * 0.5f);
} else {
- this->unk_20C -= (this->unk_218 * 0x700) + (s32)randPlusMinusPoint5Scaled((this->unk_218 * 0x700) * 0.5f);
+ this->targetYaw -=
+ (this->instanceId * 0x700) + (s32)randPlusMinusPoint5Scaled((this->instanceId * 0x700) * 0.5f);
}
- this->unk_210 += (s32)randPlusMinusPoint5Scaled(500.0f) + 1000;
+ this->flightHoverOffset += (s32)randPlusMinusPoint5Scaled(500.0f) + 1000;
- if (this->unk_20C > 0x10000) {
- this->unk_20C = 0;
- this->unk_214++;
- this->unk_214 &= 1;
+ if (this->targetYaw > 0x10000) {
+ this->targetYaw = 0;
+ this->posIndex++;
+ this->posIndex &= 1;
}
- Math_SmoothStepToS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &sp88), 1, 0x1388, 0);
- Math_ApproachF(&this->actor.world.pos.y, sp88.y, 0.3f, 3.0f);
+ 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);
}
-void func_80B5AF80(EnBee* this, PlayState* play) {
- if ((this->unk_206 == 0) && (this->collider.base.atFlags & AC_HIT)) {
+void EnBee_UpdateDamage(EnBee* this, PlayState* play) {
+ if ((this->sfxHitTimer == 0) && (this->collider.base.atFlags & AT_HIT)) {
AudioSfx_StopByPosAndId(&this->actor.projectedPos, NA_SE_EN_BEE_FLY - SFX_FLAG);
- this->unk_206 = 5;
+ this->sfxHitTimer = 5;
}
if (this->collider.base.acFlags & AC_HIT) {
@@ -242,7 +243,7 @@ void func_80B5AF80(EnBee* this, PlayState* play) {
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);
}
}
@@ -253,16 +254,16 @@ void EnBee_Update(Actor* thisx, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (this->actor.category == ACTORCAT_ENEMY) {
- if (this->unk_204 != 0) {
- this->unk_204--;
+ if (this->attackDelayTimer != 0) {
+ this->attackDelayTimer--;
}
- if (this->unk_206 != 0) {
- this->unk_206--;
+ if (this->sfxHitTimer != 0) {
+ this->sfxHitTimer--;
}
}
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BEE_FLY - SFX_FLAG);
- func_80B5AF80(this, play);
+ EnBee_UpdateDamage(this, play);
Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot);
Actor_SetFocus(&this->actor, 0.0f);
Actor_SetScale(&this->actor, 0.01f);
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 1638407ee..09d9ef931 100644
--- a/src/overlays/actors/ovl_En_Bee/z_en_bee.h
+++ b/src/overlays/actors/ovl_En_Bee/z_en_bee.h
@@ -8,24 +8,27 @@ struct EnBee;
typedef void (*EnBeeActionFunc)(struct EnBee*, PlayState*);
+typedef enum {
+ /* 0 */ BEE_BEHAVIOR_IDLE = 0,
+ /* 1 */ BEE_BEHAVIOR_ATTACK,
+} BeeBehaviorType;
+
typedef struct EnBee {
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ Vec3s morphTable[OBJECT_BEE_LIMB_MAX];
/* 0x1C4 */ Vec3s jointTable[OBJECT_BEE_LIMB_MAX];
/* 0x200 */ EnBeeActionFunc actionFunc;
- /* 0x204 */ s16 unk_204;
- /* 0x206 */ s16 unk_206;
- /* 0x208 */ s16 unk_208;
- /* 0x20C */ s32 unk_20C;
- /* 0x210 */ s32 unk_210;
- /* 0x214 */ s32 unk_214;
- /* 0x218 */ s32 unk_218;
- /* 0x21C */ Vec3f unk_21C[2];
+ /* 0x204 */ s16 attackDelayTimer;
+ /* 0x206 */ s16 sfxHitTimer;
+ /* 0x208 */ s16 isHostile; // set and not used
+ /* 0x20C */ s32 targetYaw;
+ /* 0x210 */ s32 flightHoverOffset;
+ /* 0x214 */ s32 posIndex;
+ /* 0x218 */ s32 instanceId;
+ /* 0x21C */ Vec3f targetPos[2];
/* 0x234 */ UNK_TYPE1 pad234[8];
/* 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..2aff9891d 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,
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..b995d77ea 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,
@@ -104,9 +104,9 @@ void EnBigokuta_Init(Actor* thisx, PlayState* play) {
CollisionCheck_SetInfo(&this->picto.actor.colChkInfo, NULL, &sColChkInfoInit);
this->cutscene = ActorCutscene_GetAdditionalCutscene(this->picto.actor.cutscene);
- if (gSaveContext.save.weekEventReg[20] & 2 ||
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_02) ||
((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);
@@ -377,11 +377,11 @@ void EnBigokuta_PlayDeathCutscene(EnBigokuta* this, PlayState* play) {
} else if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
ActorCutscene_Start(this->cutscene, &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_7);
} else {
player = GET_PLAYER(play);
- player->stateFlags1 |= 0x20;
+ player->stateFlags1 |= PLAYER_STATE1_20;
}
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
@@ -451,14 +451,14 @@ void EnBigokuta_PlayDeathEffects(EnBigokuta* this, PlayState* play) {
}
ActorCutscene_Stop(this->cutscene);
- Actor_MarkForDeath(&this->picto.actor);
+ 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_6);
} else {
Player* player = GET_PLAYER(play);
- player->stateFlags1 &= ~0x20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
}
}
@@ -517,7 +517,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..6bcfa79fb 100644
--- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.h
+++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.h
@@ -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..2c27a1801 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,
@@ -710,7 +710,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;
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 62e1df422..5398418f2 100644
--- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c
+++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c
@@ -12,8 +12,8 @@
#define THIS ((EnBigpo*)thisx)
-void EnBigpo_Init(Actor* thisx, PlayState* play);
-void EnBigpo_Destroy(Actor* thisx, PlayState* play);
+void EnBigpo_Init(Actor* thisx, PlayState* play2);
+void EnBigpo_Destroy(Actor* thisx, PlayState* play2);
void EnBigpo_Update(Actor* thisx, PlayState* play);
void EnBigpo_UpdateFire(Actor* thisx, PlayState* play);
@@ -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;
}
@@ -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
@@ -301,7 +300,7 @@ void EnBigpo_SetupSpawnCutscene(EnBigpo* this) {
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);
+ func_800B724C(play, &this->actor, PLAYER_CSMODE_7);
this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene);
if (this->actor.params == ENBIGPO_REGULAR) { // and SUMMONED, got switched earlier
EnBigpo_SpawnCutsceneStage1(this, play);
@@ -472,7 +471,7 @@ void EnBigpo_SpawnCutsceneStage8(EnBigpo* this, PlayState* play) {
} else { // ENBIGPO_REGULAR
ActorCutscene_Stop(this->actor.cutscene);
}
- func_800B724C(play, &this->actor, 6);
+ func_800B724C(play, &this->actor, PLAYER_CSMODE_6);
EnBigpo_SetupIdleFlying(this); // setup idle flying
}
}
@@ -819,8 +818,11 @@ 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);
EnBigpo_SetupScoopSoulLeaving(this);
@@ -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);
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 e56997051..9cf4b425b 100644
--- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c
+++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c
@@ -15,7 +15,7 @@
#define THIS ((EnBigslime*)thisx)
-void EnBigslime_Init(Actor* thisx, PlayState* play);
+void EnBigslime_Init(Actor* thisx, PlayState* play2);
void EnBigslime_Destroy(Actor* thisx, PlayState* play);
void EnBigslime_UpdateGekko(Actor* thisx, PlayState* play);
void EnBigslime_DrawGekko(Actor* thisx, PlayState* play);
@@ -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->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_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) {
@@ -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);
@@ -851,7 +849,7 @@ void EnBigslime_EndCutscene(EnBigslime* this, PlayState* play) {
this->subCamId = SUB_CAM_ID_DONE;
ActorCutscene_Stop(this->cutscene);
this->cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene);
- func_800B724C(play, &this->actor, 6);
+ func_800B724C(play, &this->actor, PLAYER_CSMODE_6);
}
}
@@ -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_7);
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);
}
}
@@ -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);
+ func_800B8E58(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;
@@ -1709,7 +1707,7 @@ void EnBigslime_WindupThrowPlayer(EnBigslime* this, PlayState* play) {
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;
}
@@ -2509,7 +2507,7 @@ void EnBigslime_Despawn(EnBigslime* this, PlayState* play) {
this->minislime[i]->actor.params = MINISLIME_DESPAWN;
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -2545,7 +2543,7 @@ void EnBigslime_PlayCutscene(EnBigslime* this, PlayState* play) {
} else if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
ActorCutscene_Start(this->cutscene, &this->actor);
if (this->actionFuncStored != EnBigslime_SquishFlat) {
- func_800B724C(play, &this->actor, 7);
+ func_800B724C(play, &this->actor, PLAYER_CSMODE_7);
}
this->subCamId = ActorCutscene_GetCurrentSubCamId(this->cutscene);
@@ -2986,16 +2984,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 +3012,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 +3131,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 +3145,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..52a29013c 100644
--- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h
+++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h
@@ -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..ed7b8c194 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;
@@ -357,7 +354,7 @@ void EnBji01_Init(Actor* thisx, PlayState* play) {
func_809CCE98(this, play);
break;
default:
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
break;
}
}
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..29afaf533 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
@@ -35,6 +35,4 @@ typedef struct EnBji01 {
/* 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..08070b61d 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;
@@ -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;
@@ -361,8 +362,7 @@ 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)) {
+ if (func_8010BF58(&this->actor, play, sMsgEventScript, this->msgEventCallback, &this->msgEventArg4)) {
this->actor.flags &= ~ACTOR_FLAG_100;
SubS_UpdateFlags(&this->stateFlags, 3, 7);
this->stateFlags &= ~TOILET_HAND_STATE_TALKING;
@@ -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,7 +399,7 @@ 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;
}
@@ -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..a25a33904 100644
--- a/src/overlays/actors/ovl_En_Bom/z_en_bom.c
+++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.c
@@ -32,7 +32,7 @@ typedef struct {
static PowderKegFuseSegment sPowderKegFuseSegments[16];
-const ActorInit En_Bom_InitVars = {
+ActorInit En_Bom_InitVars = {
ACTOR_EN_BOM,
ACTORCAT_EXPLOSIVES,
FLAGS,
@@ -228,8 +228,8 @@ void func_80871058(EnBom* this, PlayState* play) {
} else {
Vec3f* sp58;
u32 sp54 = func_800C99D4(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId);
- Vec3f sp48;
- s16 sp46;
+ Vec3f slopeNormal;
+ s16 downwardSlopeYaw;
f32 sp40;
f32 sp3C;
f32 sp38;
@@ -253,10 +253,10 @@ void func_80871058(EnBom* this, PlayState* play) {
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);
+ 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) ||
@@ -266,7 +266,7 @@ void func_80871058(EnBom* this, PlayState* play) {
} else {
this->actor.speedXZ = 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)) {
@@ -377,7 +377,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) {
@@ -433,12 +433,12 @@ void EnBom_Update(Actor* thisx, PlayState* play) {
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;
}
@@ -451,7 +451,7 @@ void EnBom_Update(Actor* thisx, PlayState* play) {
if (this->isPowderKeg) {
gSaveContext.powderKegTimer = 0;
}
- Actor_MarkForDeath(thisx);
+ Actor_Kill(thisx);
}
} else {
thisx->gravity = -1.2f;
@@ -678,9 +678,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 +718,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;
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..23218a183 100644
--- a/src/overlays/actors/ovl_En_Bom/z_en_bom.h
+++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.h
@@ -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..4a9876c79 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);
+ Actor_Kill(&this->actor);
}
func_809C52B4(this);
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -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);
}
}
}
@@ -202,8 +202,8 @@ void func_809C4BC4(EnBomBowlMan* this, PlayState* play) {
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;
}
@@ -337,13 +337,13 @@ void func_809C51B4(EnBomBowlMan* this, PlayState* play) {
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_86;
gSaveContext.nextTransitionType = TRANS_TYPE_03;
- gSaveContext.save.weekEventReg[75] &= (u8)~0x40;
+ 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);
}
}
}
@@ -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_7);
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);
@@ -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_6);
func_809C493C(this, 17, 1.0f);
func_809C59A4(this, play);
return;
@@ -435,7 +435,7 @@ 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_7);
this->actionFunc = func_809C5738;
return;
}
@@ -483,13 +483,14 @@ 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;
+ SET_WEEKEVENTREG(WEEKEVENTREG_84_80);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_83_04);
ActorCutscene_Stop(this->unk_2D6);
- Actor_MarkForDeath(&this->actor);
- } else {
- func_809C4B6C(this);
+ Actor_Kill(&this->actor);
+ return;
}
+
+ func_809C4B6C(this);
}
}
}
@@ -509,7 +510,7 @@ 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);
@@ -524,7 +525,7 @@ 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);
}
}
@@ -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);
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..fc911dd04 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
@@ -57,6 +57,4 @@ typedef struct EnBomBowlMan {
/* 0x02F8 */ 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..cbcc40211 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,
@@ -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);
}
}
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 b4ebb73e6..bcb7cb534 100644
--- a/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c
+++ b/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c
@@ -5,6 +5,8 @@
*/
#include "z_en_bombal.h"
+#include "assets/objects/object_fusen/object_fusen.h"
+#include "objects/gameplay_keep/gameplay_keep.h"
#define FLAGS (ACTOR_FLAG_10)
@@ -18,9 +20,12 @@ void EnBombal_Draw(Actor* thisx, PlayState* play);
void func_80C05B3C(EnBombal* this, PlayState* play);
void func_80C05C44(EnBombal* this, PlayState* play);
void func_80C05DE8(EnBombal* this, PlayState* play);
+void func_80C05B24(EnBombal* this);
+void EnBombal_InitEffects(EnBombal* this, Vec3f* pos, s16 fadeDelay);
+void EnBombal_UpdateEffects(EnBombal* this, PlayState* play);
+void EnBombal_DrawEffects(EnBombal*, PlayState*);
-#if 0
-const ActorInit En_Bombal_InitVars = {
+ActorInit En_Bombal_InitVars = {
ACTOR_EN_BOMBAL,
ACTORCAT_PROP,
FLAGS,
@@ -32,37 +37,243 @@ const ActorInit En_Bombal_InitVars = {
(ActorFunc)EnBombal_Draw,
};
-// static ColliderCylinderInit sCylinderInit = {
-static ColliderCylinderInit D_80C06460 = {
- { COLTYPE_NONE, AT_NONE, AC_ON | AC_TYPE_PLAYER, OC1_NONE, OC2_TYPE_2, COLSHAPE_CYLINDER, },
- { ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0x004138B0, 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_TYPE_2,
+ COLSHAPE_CYLINDER,
+ },
+ {
+ ELEMTYPE_UNK0,
+ { 0x00000000, 0x00, 0x00 },
+ { 0x004138B0, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_ON,
+ OCELEM_NONE,
+ },
{ 60, 90, -50, { 0, 0, 0 } },
};
-#endif
+void EnBombal_Init(Actor* thisx, PlayState* play) {
+ EnBombal* this = THIS;
-extern ColliderCylinderInit D_80C06460;
+ ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f);
+ this->actor.colChkInfo.mass = 0;
+ Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
+ this->actor.targetMode = 6;
+ this->actor.colChkInfo.health = 1;
+ this->scale = 0.1f;
+ this->cutscene = this->actor.cutscene;
+ func_80C05B24(this);
+}
-extern UNK_TYPE D_06000A00;
+void EnBombal_Destroy(Actor* thisx, PlayState* play) {
+ EnBombal* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bombal/EnBombal_Init.s")
+ Collider_DestroyCylinder(play, &this->collider);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bombal/EnBombal_Destroy.s")
+void func_80C05B24(EnBombal* this) {
+ this->isPopped = false;
+ this->actionFunc = func_80C05B3C;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bombal/func_80C05B24.s")
+void func_80C05B3C(EnBombal* this, PlayState* play) {
+ Player* player;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bombal/func_80C05B3C.s")
+ this->oscillationAngle += 1500.0f;
+ this->actor.velocity.y = Math_SinS(this->oscillationAngle);
+ Math_ApproachF(&this->scale, 0.1f, 0.3f, 0.01f);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bombal/func_80C05C44.s")
+ if (play->msgCtx.msgLength == 0) {
+ if (this->collider.base.acFlags & AC_HIT) {
+ player = GET_PLAYER(play);
+ this->collider.base.acFlags &= ~AC_HIT;
+ 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;
+ }
+ this->actionFunc = func_80C05C44;
+ }
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bombal/func_80C05DE8.s")
+void func_80C05C44(EnBombal* this, PlayState* play) {
+ s32 phi_s0 = false;
+ s32 i;
+ Vec3f pos;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bombal/EnBombal_Update.s")
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_40) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10) &&
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02)) {
+ if (ActorCutscene_GetCurrentIndex() == 0x7C) {
+ ActorCutscene_Stop(0x7C);
+ ActorCutscene_SetIntentToPlay(this->cutscene);
+ return;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bombal/EnBombal_Draw.s")
+ if (!ActorCutscene_GetCanPlayNext(this->cutscene)) {
+ ActorCutscene_SetIntentToPlay(this->cutscene);
+ } else {
+ ActorCutscene_StartAndSetUnkLinkFields(this->cutscene, &this->actor);
+ phi_s0 = true;
+ }
+ } else {
+ phi_s0 = true;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bombal/func_80C05F90.s")
+ if (phi_s0) {
+ Math_Vec3f_Copy(&pos, &this->actor.world.pos);
+ pos.y += 60.0f;
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, pos.x, pos.y, pos.z, 255, 255, 200,
+ CLEAR_TAG_LARGE_EXPLOSION);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bombal/func_80C060B8.s")
+ for (i = 0; i < 100; i++) {
+ EnBombal_InitEffects(this, &pos, 10);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bombal/func_80C06208.s")
+ SET_WEEKEVENTREG(WEEKEVENTREG_83_04);
+ Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_MUJURA_BALLOON_BROKEN);
+ this->timer = 30;
+ this->isPopped = true;
+ this->actionFunc = func_80C05DE8;
+ }
+}
+
+void func_80C05DE8(EnBombal* this, PlayState* play) {
+ if (this->timer == 0) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_40) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_73_10) &&
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_85_02)) {
+ ActorCutscene_Stop(this->cutscene);
+ }
+ Actor_Kill(&this->actor);
+ return;
+ }
+
+ if (this->timer < 10) {
+ this->actor.colChkInfo.health = 0;
+ }
+}
+
+void EnBombal_Update(Actor* thisx, PlayState* play) {
+ s32 pad;
+ EnBombal* this = THIS;
+
+ if (this->timer != 0) {
+ this->timer--;
+ }
+
+ this->actor.shape.rot.y = this->actor.world.rot.y;
+
+ Actor_SetFocus(&this->actor, 30.0f);
+ Actor_SetScale(&this->actor, this->scale);
+
+ this->actionFunc(this, play);
+
+ Actor_MoveWithGravity(&this->actor);
+ EnBombal_UpdateEffects(this, play);
+
+ if (!this->isPopped) {
+ Collider_UpdateCylinder(&this->actor, &this->collider);
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
+ }
+}
+
+void EnBombal_Draw(Actor* thisx, PlayState* play) {
+ EnBombal* this = THIS;
+
+ if (this->isPopped != true) {
+ Gfx_DrawDListOpa(play, gMajoraBalloonDL);
+ Gfx_DrawDListOpa(play, gMajoraBalloonKnotDL);
+ }
+ EnBombal_DrawEffects(this, play);
+}
+
+void EnBombal_InitEffects(EnBombal* this, Vec3f* pos, s16 fadeDelay) {
+ s16 i;
+ EnBombalEffect* sPtr = this->effects;
+
+ for (i = 0; i < ARRAY_COUNT(this->effects); i++, sPtr++) {
+ if (!sPtr->isEnabled) {
+ sPtr->isEnabled = true;
+ sPtr->pos = *pos;
+ sPtr->alphaFadeDelay = fadeDelay;
+ sPtr->alpha = 255;
+
+ sPtr->accel.x = (Rand_ZeroOne() - 0.5f) * 10.0f;
+ sPtr->accel.y = (Rand_ZeroOne() - 0.5f) * 10.0f;
+ sPtr->accel.z = (Rand_ZeroOne() - 0.5f) * 10.0f;
+
+ sPtr->velocity.x = Rand_ZeroOne() - 0.5f;
+ sPtr->velocity.y = Rand_ZeroOne() - 0.5f;
+ sPtr->velocity.z = Rand_ZeroOne() - 0.5f;
+
+ sPtr->scale = (Rand_ZeroFloat(1.0f) * 0.5f) + 2.0f;
+ return;
+ }
+ }
+}
+
+void EnBombal_UpdateEffects(EnBombal* this, PlayState* play) {
+ s32 i;
+ EnBombalEffect* sPtr = this->effects;
+
+ for (i = 0; i < ARRAY_COUNT(this->effects); i++, sPtr++) {
+ if (sPtr->isEnabled) {
+ sPtr->pos.x += sPtr->velocity.x;
+ sPtr->pos.y += sPtr->velocity.y;
+ sPtr->pos.z += sPtr->velocity.z;
+ sPtr->velocity.x += sPtr->accel.x;
+ sPtr->velocity.y += sPtr->accel.y;
+ sPtr->velocity.z += sPtr->accel.z;
+
+ if (sPtr->alphaFadeDelay != 0) {
+ sPtr->alphaFadeDelay--;
+ } else {
+ sPtr->alpha -= 10;
+ if (sPtr->alpha < 10) {
+ sPtr->isEnabled = 0;
+ }
+ }
+ }
+ }
+}
+
+void EnBombal_DrawEffects(EnBombal* this, PlayState* play) {
+ s16 i;
+ GraphicsContext* gfxCtx = play->state.gfxCtx;
+ EnBombalEffect* sPtr = this->effects;
+
+ OPEN_DISPS(gfxCtx);
+
+ func_8012C28C(gfxCtx);
+ func_8012C2DC(play->state.gfxCtx);
+
+ for (i = 0; i < ARRAY_COUNT(this->effects); i++, sPtr++) {
+ if (sPtr->isEnabled != 0) {
+ Matrix_Translate(sPtr->pos.x, sPtr->pos.y, sPtr->pos.z, MTXMODE_NEW);
+ Matrix_Scale(sPtr->scale, sPtr->scale, sPtr->scale, MTXMODE_APPLY);
+
+ POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x14);
+
+ gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(&gSun1Tex));
+
+ gSPDisplayList(POLY_XLU_DISP++, &gSunSparkleMaterialDL);
+
+ gDPPipeSync(POLY_XLU_DISP++);
+
+ 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);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, &gSunSparkleModelDL);
+ }
+ }
+ CLOSE_DISPS(gfxCtx);
+}
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 5731208a4..7c72f3eea 100644
--- a/src/overlays/actors/ovl_En_Bombal/z_en_bombal.h
+++ b/src/overlays/actors/ovl_En_Bombal/z_en_bombal.h
@@ -7,17 +7,27 @@ struct EnBombal;
typedef void (*EnBombalActionFunc)(struct EnBombal*, PlayState*);
+typedef struct EnBombalEffect {
+ /* 0x00 */ u8 isEnabled;
+ /* 0x04 */ Vec3f pos;
+ /* 0x10 */ UNK_TYPE4 unk10;
+ /* 0x14 */ s16 alpha;
+ /* 0x16 */ s16 alphaFadeDelay;
+ /* 0x18 */ Vec3f velocity;
+ /* 0x24 */ Vec3f accel;
+ /* 0x30 */ f32 scale;
+} EnBombalEffect;
+
typedef struct EnBombal {
- /* 0x0000 */ Actor actor;
- /* 0x0144 */ EnBombalActionFunc actionFunc;
- /* 0x0148 */ char unk148[0x4];
- /* 0x014C */ s16 unk_14C;
- /* 0x0150 */ f32 unk_150;
- /* 0x0154 */ char unk154[0x150];
- /* 0x02A4 */ Vec3f unk_2A4;
- /* 0x02B0 */ char unk2B0[0x2794];
+ /* 0x000 */ Actor actor;
+ /* 0x144 */ EnBombalActionFunc actionFunc;
+ /* 0x148 */ s16 timer;
+ /* 0x14A */ s16 isPopped;
+ /* 0x14C */ s16 cutscene;
+ /* 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..2ca62ef0a 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,19 +104,20 @@ 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,
@@ -130,19 +131,20 @@ void EnBombers_Init(Actor* thisx, PlayState* play) {
while (cs != -1) { bomBowlMan->unk_2CC[i] = cs; cs = ActorCutscene_GetAdditionalCutscene(cs); 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);
}
}
@@ -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 {
@@ -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) {
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..74575628f 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,7 +94,8 @@ 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;
@@ -102,7 +103,7 @@ void EnBombers2_Init(Actor* thisx, PlayState* play) {
}
this->cutscene = this->actor.cutscene;
if (this->cutscene == 0) {
- Actor_MarkForDeath(&this->actor);
+ 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;
}
@@ -329,7 +330,7 @@ void func_80C0520C(EnBombers2* this, PlayState* play) {
EnBombers2_ChangeAnim(this, 6, 1.0f);
this->unk_2A8 = 0;
this->unk_2C0 = 1;
- gSaveContext.save.weekEventReg[73] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_73_80);
ActorCutscene_Stop(this->cutscene);
this->unk_2AC = 1;
this->actor.textId = sTextIds[this->textIdIndex];
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..4a79e6615 100644
--- a/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.h
+++ b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.h
@@ -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 4a7ac1baf..0b5ffff54 100644
--- a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c
+++ b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c
@@ -12,7 +12,7 @@
#define THIS ((EnBombf*)thisx)
-void EnBombf_Init(Actor* thisx, PlayState* play);
+void EnBombf_Init(Actor* thisx, PlayState* play2);
void EnBombf_Destroy(Actor* thisx, PlayState* play);
void EnBombf_Update(Actor* thisx, PlayState* play);
void EnBombf_Draw(Actor* thisx, PlayState* play);
@@ -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,
@@ -163,7 +163,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;
}
} else if ((this->colliderCylinder.base.acFlags & AC_HIT) &&
((this->colliderCylinder.info.acHitInfo->toucher.dmgFlags & 0x13828) ||
@@ -200,7 +200,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;
}
}
@@ -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;
}
}
@@ -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);
}
}
@@ -439,8 +439,11 @@ 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) {
+ Actor_Kill(&this->actor);
+ return;
+ }
+
+ if (this->actor.bgCheckFlags & 0x40) {
this->actor.bgCheckFlags &= ~0x40;
Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOMB_DROP_WATER);
}
@@ -448,15 +451,15 @@ void EnBombf_Update(Actor* thisx, PlayState* play) {
}
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 6c5a6f235..126c293c3 100644
--- a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c
+++ b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c
@@ -39,10 +39,21 @@ void func_80C00168(EnBomjima* this, PlayState* play);
void func_80C00234(EnBomjima* this);
void func_80C00284(EnBomjima* this, PlayState* play);
+typedef enum EN_BOMJIMA_ACTION {
+ /* 0 */ EN_BOMJIMA_ACTION_0,
+ /* 1 */ EN_BOMJIMA_ACTION_1,
+ /* 2 */ EN_BOMJIMA_ACTION_2,
+ /* 3 */ EN_BOMJIMA_ACTION_3,
+ /* 4 */ EN_BOMJIMA_ACTION_4,
+ /* 5 */ EN_BOMJIMA_ACTION_5,
+ /* 6 */ EN_BOMJIMA_ACTION_6,
+ /* 7 */ EN_BOMJIMA_ACTION_7,
+} 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,
@@ -117,7 +128,7 @@ 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);
@@ -129,7 +140,7 @@ void EnBomjima_Init(Actor* thisx, PlayState* play) {
while (cs != -1) {
// clang-format off
- this->unk_2D4[i] = cs; cs = ActorCutscene_GetAdditionalCutscene(cs);
+ this->cutscenes[i] = cs; cs = ActorCutscene_GetAdditionalCutscene(cs);
// clang-format on
i++;
}
@@ -139,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);
}
}
@@ -166,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)) {
@@ -197,31 +208,31 @@ void func_80BFE32C(EnBomjima* this, PlayState* play, s32 arg2) {
}
}
-void func_80BFE494(EnBomjima* this, s32 arg1, f32 arg2) {
- this->unk_2EC = arg1;
- this->unk_2CC = Animation_GetLastFrame(sAnimations[arg1]);
- Animation_Change(&this->skelAnime, sAnimations[this->unk_2EC], arg2, 0.0f, this->unk_2CC, D_80C00AE4[this->unk_2EC],
- -4.0f);
+void func_80BFE494(EnBomjima* this, s32 animIndex, f32 playSpeed) {
+ this->animIndex = animIndex;
+ this->animLastFrame = Animation_GetLastFrame(sAnimations[animIndex]);
+ Animation_Change(&this->skelAnime, sAnimations[this->animIndex], playSpeed, 0.0f, this->animLastFrame,
+ D_80C00AE4[this->animIndex], -4.0f);
}
void func_80BFE524(EnBomjima* this) {
- if ((this->unk_2EC == 5) &&
+ 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);
}
- if ((this->unk_2EC == 18) &&
+ 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);
}
- if ((this->unk_2EC == 15) && Animation_OnFrame(&this->skelAnime, 15.0f)) {
+ if ((this->animIndex == 15) && Animation_OnFrame(&this->skelAnime, 15.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOMBERS_LAND);
}
- if ((this->unk_2EC == 6) && Animation_OnFrame(&this->skelAnime, 8.0f)) {
+ if ((this->animIndex == 6) && Animation_OnFrame(&this->skelAnime, 8.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_BOMBERS_LAND);
}
}
@@ -326,10 +337,11 @@ void func_80BFEA94(EnBomjima* this, PlayState* play) {
continue;
}
- this->unk_2F0 = (EnBombal*)actor;
+ this->bombal = (EnBombal*)actor;
Math_Vec3f_Copy(&this->unk_2B0, &actor->world.pos);
- if (this->unk_2F4 == 0) {
- this->unk_2F4 = this->unk_2F0->actor.cutscene;
+
+ if (this->bombalCutscene == 0) {
+ this->bombalCutscene = this->bombal->actor.cutscene;
}
func_80BFEB1C(this);
break;
@@ -339,7 +351,7 @@ void func_80BFEA94(EnBomjima* this, PlayState* play) {
void func_80BFEB1C(EnBomjima* this) {
func_80BFE494(this, 1, 1.0f);
func_80BFE65C(this);
- this->unk_2A0 = 0;
+ this->action = EN_BOMJIMA_ACTION_0;
this->actionFunc = func_80BFEB64;
}
@@ -350,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);
}
@@ -381,7 +393,7 @@ void func_80BFEB64(EnBomjima* this, PlayState* play) {
func_800B8614(&this->actor, play, 70.0f);
}
- if ((this->unk_2F0->actor.update == NULL) || (this->unk_2F0->actor.colChkInfo.health == 0)) {
+ if ((this->bombal->actor.update == NULL) || (this->bombal->actor.colChkInfo.health == 0)) {
func_80BFEFF0(this);
return;
}
@@ -394,14 +406,14 @@ void func_80BFEB64(EnBomjima* this, PlayState* play) {
break;
case 1:
- this->unk_2DC = Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_2F0->actor.world.pos);
+ 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);
}
if (this->unk_2C0 == 1) {
- s16 sp3E = Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_2F0->actor.world.pos);
+ s16 sp3E = Math_Vec3f_Yaw(&this->actor.world.pos, &this->bombal->actor.world.pos);
if (Rand_ZeroOne() < 0.5f) {
sp3E += 0x4000;
@@ -409,9 +421,9 @@ void func_80BFEB64(EnBomjima* this, PlayState* play) {
sp3E += 0xC000;
}
- sp40.x = (Math_SinS(sp3E) * (Rand_ZeroFloat(20.0f) + 40.0f)) + this->unk_2F0->actor.world.pos.x;
- sp40.y = this->unk_2F0->actor.world.pos.y - randPlusMinusPoint5Scaled(40.0f);
- sp40.z = (Math_CosS(sp3E) * (Rand_ZeroFloat(20.0f) + 40.0f)) + this->unk_2F0->actor.world.pos.z;
+ sp40.x = (Math_SinS(sp3E) * (Rand_ZeroFloat(20.0f) + 40.0f)) + this->bombal->actor.world.pos.x;
+ sp40.y = this->bombal->actor.world.pos.y - randPlusMinusPoint5Scaled(40.0f);
+ sp40.z = (Math_CosS(sp3E) * (Rand_ZeroFloat(20.0f) + 40.0f)) + this->bombal->actor.world.pos.z;
SoundSource_PlaySfxAtFixedWorldPos(play, &sp40, 50, NA_SE_EV_BOMBERS_SHOT_EXPLOSUIN);
EffectSsHitmark_SpawnFixedScale(play, 0, &sp40);
@@ -443,10 +455,10 @@ void func_80BFEB64(EnBomjima* this, PlayState* play) {
}
void func_80BFEFF0(EnBomjima* this) {
- this->unk_2F0 = NULL;
+ this->bombal = NULL;
func_80BFE494(this, 19, 1.0f);
func_80BFE65C(this);
- this->unk_2A0 = 1;
+ this->action = EN_BOMJIMA_ACTION_1;
this->actionFunc = func_80BFF03C;
}
@@ -455,25 +467,25 @@ void func_80BFF03C(EnBomjima* this, PlayState* play) {
if (ActorCutscene_GetCurrentIndex() == 0x7C) {
ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->unk_2D4[0]);
- } else if (!ActorCutscene_GetCanPlayNext(this->unk_2D4[0])) {
- ActorCutscene_SetIntentToPlay(this->unk_2D4[0]);
+ ActorCutscene_SetIntentToPlay(this->cutscenes[0]);
+ } else if (!ActorCutscene_GetCanPlayNext(this->cutscenes[0])) {
+ ActorCutscene_SetIntentToPlay(this->cutscenes[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->unk_2D4[0], &this->actor);
+ ActorCutscene_StartAndSetUnkLinkFields(this->cutscenes[0], &this->actor);
func_80BFF120(this);
}
}
void func_80BFF120(EnBomjima* this) {
func_80BFE65C(this);
- this->unk_2C4 = 30;
+ this->cutsceneTimer = 30;
func_80BFE494(this, 6, 1.0f);
- this->unk_2DE = 0;
- this->unk_2A0 = 2;
+ this->cutsceneEnded = false;
+ this->action = EN_BOMJIMA_ACTION_2;
this->actionFunc = func_80BFF174;
}
@@ -481,9 +493,9 @@ void func_80BFF174(EnBomjima* this, PlayState* play) {
f32 sp2C = this->skelAnime.curFrame;
Player* player = GET_PLAYER(play);
- if (this->unk_2C4 == 1) {
- ActorCutscene_Stop(this->unk_2D4[0]);
- this->unk_2DE = 1;
+ if (this->cutsceneTimer == 1) {
+ ActorCutscene_Stop(this->cutscenes[0]);
+ this->cutsceneEnded = true;
}
if (Text_GetFaceReaction(play, 0x11) != 0) {
@@ -498,19 +510,19 @@ void func_80BFF174(EnBomjima* this, PlayState* play) {
Math_SmoothStepToS(&this->actor.world.rot.y, this->unk_2DC, 1, 5000, 0);
- if ((this->unk_2CC <= sp2C) && (this->unk_2BC < 5)) {
+ if ((this->animLastFrame <= sp2C) && (this->unk_2BC < 5)) {
this->unk_2BC++;
- if (this->unk_2EC != 19) {
+ if (this->animIndex != 19) {
func_80BFE494(this, 19, 1.0f);
}
}
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 {
@@ -522,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 {
@@ -541,7 +553,7 @@ void func_80BFF174(EnBomjima* this, PlayState* play) {
func_80BFE32C(this, play, 1);
}
- if (this->unk_2DE != 0) {
+ if (this->cutsceneEnded != false) {
if (this->unk_2BC >= 5) {
func_80BFE67C(this, play);
}
@@ -551,22 +563,22 @@ void func_80BFF174(EnBomjima* this, PlayState* play) {
void func_80BFF3F0(EnBomjima* this) {
func_80BFE494(this, 15, 1.0f);
- this->unk_2A0 = 3;
+ this->action = EN_BOMJIMA_ACTION_3;
this->actionFunc = func_80BFF430;
}
void func_80BFF430(EnBomjima* this, PlayState* play) {
f32 curFrame = this->skelAnime.curFrame;
- if (this->unk_2CC <= curFrame) {
+ if (this->animLastFrame <= curFrame) {
EnBombal* bombal = (EnBombal*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOMBAL, this->unk_2B0.x,
this->unk_2B0.y, this->unk_2B0.z, 0, 0, 0, 0);
if (bombal != NULL) {
- bombal->unk_150 = 0.0f;
- bombal->unk_14C = this->unk_2F4;
+ bombal->scale = 0.0f;
+ bombal->cutscene = this->bombalCutscene;
Actor_ChangeFocus(&this->actor, play, &bombal->actor);
- gSaveContext.save.weekEventReg[83] &= (u8)~4;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_83_04);
func_80BFE65C(this);
func_801477B4(play);
this->actionFunc = func_80BFEA94;
@@ -576,7 +588,7 @@ void func_80BFF430(EnBomjima* this, PlayState* play) {
void func_80BFF4F4(EnBomjima* this) {
func_80BFE65C(this);
- this->unk_2A0 = 4;
+ this->action = EN_BOMJIMA_ACTION_4;
this->actionFunc = func_80BFF52C;
}
@@ -599,7 +611,7 @@ void func_80BFF52C(EnBomjima* this, PlayState* play) {
func_80151938(play, this->actor.textId);
play_sound(NA_SE_SY_FOUND);
func_80BFE494(this, 15, 1.0f);
- this->unk_2A0 = 5;
+ this->action = EN_BOMJIMA_ACTION_5;
this->actionFunc = func_80BFF6CC;
} else {
Player* player = GET_PLAYER(play);
@@ -623,7 +635,7 @@ void func_80BFF52C(EnBomjima* this, PlayState* play) {
void func_80BFF6CC(EnBomjima* this, PlayState* play) {
f32 curFrame = this->skelAnime.curFrame;
- if (this->unk_2CC <= curFrame) {
+ if (this->animLastFrame <= curFrame) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
func_801477B4(play);
func_80BFE494(this, 1, 1.0f);
@@ -635,7 +647,7 @@ void func_80BFF6CC(EnBomjima* this, PlayState* play) {
void func_80BFF754(EnBomjima* this, PlayState* play) {
Player* player = GET_PLAYER(play);
Vec3f spA0;
- EnBombal* temp_s3;
+ EnBomjima* bomjima;
s32 i;
f32 x;
f32 y;
@@ -643,12 +655,12 @@ void func_80BFF754(EnBomjima* this, PlayState* play) {
if (ActorCutscene_GetCurrentIndex() == 0x7C) {
ActorCutscene_Stop(0x7C);
- ActorCutscene_SetIntentToPlay(this->unk_2D4[1]);
+ ActorCutscene_SetIntentToPlay(this->cutscenes[1]);
return;
}
- if (!ActorCutscene_GetCanPlayNext(this->unk_2D4[1])) {
- ActorCutscene_SetIntentToPlay(this->unk_2D4[1]);
+ if (!ActorCutscene_GetCanPlayNext(this->cutscenes[1])) {
+ ActorCutscene_SetIntentToPlay(this->cutscenes[1]);
return;
}
@@ -663,9 +675,9 @@ void func_80BFF754(EnBomjima* this, PlayState* play) {
spA0.y += y * (2.0f + (i * 0.2f));
spA0.z += z * (2.0f + (i * 0.2f));
- temp_s3 = (EnBombal*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_BOMJIMA, spA0.x, spA0.y,
- spA0.z, 0, 0, 0, i + 32);
- if (temp_s3 != NULL) {
+ bomjima = (EnBomjima*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_BOMJIMA, spA0.x, spA0.y,
+ spA0.z, 0, 0, 0, i + 32);
+ if (bomjima != NULL) {
s32 index = (i * 2) - 2;
Math_Vec3f_Copy(&spA0, &this->actor.world.pos);
@@ -673,12 +685,12 @@ void func_80BFF754(EnBomjima* this, PlayState* play) {
spA0.x += Math_SinS(D_80C00AF8[(i * 2) - 2] + this->actor.world.rot.y) * D_80C00AF8[index + 1];
spA0.z += Math_CosS(D_80C00AF8[index] + this->actor.world.rot.y) * D_80C00AF8[index + 1];
- Math_Vec3f_Copy(&temp_s3->unk_2A4, &spA0);
+ Math_Vec3f_Copy(&bomjima->unk_2A4, &spA0);
}
}
D_80C009F0 = 0;
- ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D4[1], &this->actor);
+ ActorCutscene_StartAndSetUnkLinkFields(this->cutscenes[1], &this->actor);
this->actionFunc = func_80BFF9B0;
}
@@ -689,24 +701,24 @@ 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;
@@ -741,7 +753,7 @@ void func_80BFFB40(EnBomjima* this, PlayState* play) {
void func_80BFFBC4(EnBomjima* this, PlayState* play) {
f32 curFrame = this->skelAnime.curFrame;
- if ((this->unk_2EC != 1) && (this->unk_2CC <= curFrame)) {
+ if ((this->animIndex != 1) && (this->animLastFrame <= curFrame)) {
func_80BFE494(this, 1, 1.0f);
}
@@ -762,14 +774,14 @@ void func_80BFFBC4(EnBomjima* this, PlayState* play) {
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_86;
gSaveContext.nextTransitionType = TRANS_TYPE_03;
- ActorCutscene_Stop(this->unk_2D4[1]);
+ ActorCutscene_Stop(this->cutscenes[1]);
}
}
void func_80BFFCFC(EnBomjima* this) {
func_80BFE65C(this);
func_80BFE494(this, 18, 1.0f);
- this->unk_2A0 = 6;
+ this->action = EN_BOMJIMA_ACTION_6;
this->actionFunc = func_80BFFD48;
}
@@ -825,22 +837,22 @@ void func_80BFFF54(EnBomjima* this, PlayState* play) {
}
if (this->unk_2E4 != 4) {
- if ((this->unk_2EC != 0) && (this->unk_2CC <= curFrame)) {
+ if ((this->animIndex != 0) && (this->animLastFrame <= curFrame)) {
D_80C009F0++;
func_80BFE494(this, 0, 1.0f);
}
- } else if ((this->unk_2EC != 8) && (this->unk_2CC <= curFrame)) {
+ } else if ((this->animIndex != 8) && (this->animLastFrame <= curFrame)) {
func_80BFE494(this, 8, 1.0f);
D_80C009F4 = 1;
}
- if (this->unk_2EC == 8) {
+ if (this->animIndex == 8) {
if ((D_80C009F4 == 1) && Animation_OnFrame(&this->skelAnime, 7.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_HUMAN_BOUND);
D_80C009F4 = 2;
}
- if ((this->unk_2CC <= curFrame) && (this->unk_2C0 == 0)) {
+ if ((this->animLastFrame <= curFrame) && (this->unk_2C0 == 0)) {
this->unk_2C0 = 10;
}
@@ -853,7 +865,7 @@ void func_80BFFF54(EnBomjima* this, PlayState* play) {
void func_80C0011C(EnBomjima* this) {
func_80BFE65C(this);
func_80BFE494(this, 0, 1.0f);
- this->unk_2A0 = 7;
+ this->action = EN_BOMJIMA_ACTION_7;
this->actionFunc = func_80C00168;
}
@@ -894,8 +906,9 @@ void func_80C00284(EnBomjima* this, PlayState* play) {
f32 sp28 = this->skelAnime.curFrame;
Math_SmoothStepToS(&this->actor.world.rot.y, this->unk_2DC, 1, 5000, 0);
- if (((this->unk_2A0 == 0) || (this->unk_2C8 == 10) || (this->unk_2C8 == 11) || (this->unk_2CA == 1)) &&
- (this->unk_2CC <= sp28)) {
+ if (((this->action == EN_BOMJIMA_ACTION_0) || (this->unk_2C8 == 10) || (this->unk_2C8 == 11) ||
+ (this->unk_2CA == 1)) &&
+ (this->animLastFrame <= sp28)) {
if (!(this->unk_2BC & 1)) {
func_80BFE494(this, 3, 1.0f);
} else {
@@ -919,14 +932,15 @@ void func_80C00284(EnBomjima* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
this->collider.dim.radius = 10;
this->collider.dim.height = 30;
- if ((this->unk_2A0 == 4) || (this->unk_2CA == 1) || ((this->unk_2CA == 3) && (this->unk_2C8 >= 2))) {
+ 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->unk_2F0 == 0) || (this->unk_2F0->actor.update == NULL) ||
- (this->unk_2F0->actor.colChkInfo.health <= 0)) {
+ if ((this->bombal == 0) || (this->bombal->actor.update == NULL) ||
+ (this->bombal->actor.colChkInfo.health <= 0)) {
func_80BFF3F0(this);
} else {
func_80BFE65C(this);
@@ -941,7 +955,7 @@ void func_80C00284(EnBomjima* this, PlayState* play) {
switch (this->unk_2CA) {
case 0:
this->unk_28E = 0;
- if (this->unk_2A0 == 7) {
+ if (this->action == EN_BOMJIMA_ACTION_7) {
func_80C0011C(this);
} else {
func_80BFEB1C(this);
@@ -953,7 +967,7 @@ void func_80C00284(EnBomjima* this, PlayState* play) {
func_80BFE65C(this);
this->unk_28E = 0;
func_80BFE494(this, 1, 1.0f);
- this->unk_2A0 = 2;
+ this->action = EN_BOMJIMA_ACTION_2;
this->actionFunc = func_80BFF174;
return;
}
@@ -1008,8 +1022,8 @@ void EnBomjima_Update(Actor* thisx, PlayState* play) {
this->unk_2C6--;
}
- if (this->unk_2C4 != 0) {
- this->unk_2C4--;
+ if (this->cutsceneTimer != 0) {
+ this->cutsceneTimer--;
}
SkelAnime_Update(&this->skelAnime);
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 b247e03ea..6a434be42 100644
--- a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.h
+++ b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.h
@@ -26,7 +26,7 @@ typedef struct EnBomjima {
/* 0x296 */ UNK_TYPE1 unk296[4];
/* 0x29A */ s16 unk_29A;
/* 0x29C */ UNK_TYPE1 unk29C[4];
- /* 0x2A0 */ s16 unk_2A0;
+ /* 0x2A0 */ s16 action;
/* 0x2A2 */ s16 unk_2A2;
/* 0x2A4 */ Vec3f unk_2A4;
/* 0x2B0 */ Vec3f unk_2B0;
@@ -34,28 +34,26 @@ typedef struct EnBomjima {
/* 0x2BE */ s16 unk_2BE;
/* 0x2C0 */ s16 unk_2C0;
/* 0x2C2 */ s16 unk_2C2;
- /* 0x2C4 */ s16 unk_2C4;
+ /* 0x2C4 */ s16 cutsceneTimer;
/* 0x2C6 */ s16 unk_2C6;
/* 0x2C8 */ s16 unk_2C8;
/* 0x2CA */ s16 unk_2CA;
- /* 0x2CC */ f32 unk_2CC;
+ /* 0x2CC */ f32 animLastFrame;
/* 0x2D0 */ f32 unk_2D0;
- /* 0x2D4 */ s16 unk_2D4[2];
+ /* 0x2D4 */ s16 cutscenes[2];
/* 0x2D8 */ UNK_TYPE1 unk2D8[4]; // maybe a part of the above?
/* 0x2DC */ s16 unk_2DC;
- /* 0x2DE */ s16 unk_2DE;
+ /* 0x2DE */ s16 cutsceneEnded;
/* 0x2E0 */ s16 unk_2E0;
/* 0x2E2 */ s16 unk_2E2;
/* 0x2E4 */ s16 unk_2E4;
/* 0x2E6 */ s16 unk_2E6;
/* 0x2E8 */ s16 unk_2E8;
/* 0x2EA */ s16 unk_2EA;
- /* 0x2EC */ s32 unk_2EC;
- /* 0x2F0 */ EnBombal* unk_2F0;
- /* 0x2F4 */ s16 unk_2F4;
+ /* 0x2EC */ s32 animIndex;
+ /* 0x2F0 */ EnBombal* bombal;
+ /* 0x2F4 */ s16 bombalCutscene;
/* 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 25f5de3e1..c0033b103 100644
--- a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c
+++ b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c
@@ -14,7 +14,7 @@
void EnBomjimb_Init(Actor* thisx, PlayState* play);
void EnBomjimb_Destroy(Actor* thisx, PlayState* play);
-void EnBomjimb_Update(Actor* thisx, PlayState* play);
+void EnBomjimb_Update(Actor* thisx, PlayState* play2);
void EnBomjimb_Draw(Actor* thisx, PlayState* play);
void func_80C01494(EnBomjimb* this);
@@ -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;
}
@@ -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));
@@ -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;
@@ -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);
}
@@ -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;
@@ -698,35 +698,35 @@ void func_80C02740(EnBomjimb* this, PlayState* play) {
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;
@@ -765,7 +765,7 @@ void func_80C02A14(EnBomjimb* this, PlayState* play) {
func_80C02CA4(this, play);
} else {
if (this->unk_2CA == 8) {
- player->stateFlags1 &= ~0x10000000;
+ player->stateFlags1 &= ~PLAYER_STATE1_10000000;
}
func_80C01FD4(this);
}
@@ -781,7 +781,7 @@ void func_80C02BCC(EnBomjimb* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
func_801477B4(play);
this->unk_2C0 = 1;
- player->stateFlags1 &= ~0x10000000;
+ player->stateFlags1 &= ~PLAYER_STATE1_10000000;
}
} else if (this->actor.xzDistToPlayer > 200.0f) {
func_80C01494(this);
@@ -801,8 +801,8 @@ void func_80C02CA4(EnBomjimb* this, PlayState* play) {
play->transitionType = TRANS_TYPE_86;
gSaveContext.nextTransitionType = TRANS_TYPE_03;
}
- gSaveContext.save.weekEventReg[75] |= 0x40;
- gSaveContext.save.weekEventReg[83] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_75_40);
+ SET_WEEKEVENTREG(WEEKEVENTREG_83_04);
this->actionFunc = func_80C02DAC;
}
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..33af85b3e 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,
@@ -155,10 +155,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;
}
}
@@ -267,7 +267,7 @@ void func_808A2918(EnBoom* this, PlayState* play) {
sp7C->flags &= ~ACTOR_FLAG_2000;
}
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -286,7 +286,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..33dd4f69f 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);
@@ -434,9 +434,9 @@ void func_80868B74(EnBox* this, PlayState* play) {
this->unk_1A0++;
if ((this->cutsceneIdxA != -1) && ActorCutscene_GetCurrentIndex() == this->cutsceneIdxA) {
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) {
@@ -658,32 +658,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) {
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..9cb5af18d 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;
+ /* 0x1F4 */ struct_80867BDC_a0 unk_1F4;
/* 0x218 */ s16 cutsceneIdxA;
/* 0x21A */ s16 cutsceneIdxB;
/* 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..cbf9e9f3c 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,
@@ -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);
}
}
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..eb3365b83 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);
}
@@ -287,7 +287,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))) {
@@ -355,7 +356,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.speedXZ) < 1.8f) || (this->unk_252 > 0) ||
!(distSq < SQ(320.0f))) {
func_8091C748(this);
} else if ((distSq > SQ(240.0f)) &&
@@ -396,7 +397,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 b53f5f620..d32fe32ac 100644
--- a/src/overlays/actors/ovl_En_Cha/z_en_cha.c
+++ b/src/overlays/actors/ovl_En_Cha/z_en_cha.c
@@ -13,12 +13,12 @@
void EnCha_Init(Actor* thisx, PlayState* play);
void EnCha_Destroy(Actor* thisx, PlayState* play);
-void EnCha_Update(Actor* thisx, PlayState* play);
+void EnCha_Update(Actor* thisx, PlayState* play2);
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) {
@@ -83,16 +83,16 @@ void EnCha_Ring(EnCha* this, PlayState* play) {
}
void EnCha_Idle(EnCha* this, PlayState* play) {
- if (gSaveContext.save.weekEventReg[60] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_60_04)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_DOOR_BELL);
- gSaveContext.save.weekEventReg[60] &= (u8)~4;
+ 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);
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..bfc828194 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;
@@ -560,7 +560,7 @@ void EnClearTag_UpdateCamera(EnClearTag* this, PlayState* play) {
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;
@@ -586,7 +586,7 @@ void EnClearTag_UpdateCamera(EnClearTag* this, PlayState* play) {
mainCam->at = this->subCamAt;
func_80169AFC(play, this->subCamId, 0);
Cutscene_End(play, &play->csCtx);
- func_800B7298(play, &this->actor, 6);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_6);
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 889055ee8..876914a2a 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);
@@ -252,9 +252,9 @@ s32 EnCne01_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f*
if (limbIndex == CNE_LIMB_HEAD) {
OPEN_DISPS(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->enHy.headObjIndex].segment);
- gSegments[6] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[this->enHy.headObjIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.headObjIndex].segment);
*dList = gCneHeadBrownHairDL;
- gSegments[6] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[this->enHy.skelLowerObjIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.skelLowerObjIndex].segment);
CLOSE_DISPS(play->state.gfxCtx);
}
if (limbIndex == CNE_LIMB_HEAD) {
@@ -290,7 +290,7 @@ void EnCne01_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro
if (limbIndex == CNE_LIMB_RIGHT_FOOT) {
OPEN_DISPS(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->enHy.skelUpperObjIndex].segment);
- gSegments[0x06] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[this->enHy.skelUpperObjIndex].segment);
+ gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.skelUpperObjIndex].segment);
CLOSE_DISPS(play->state.gfxCtx);
}
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..63c83f0ea 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) {
@@ -123,14 +123,14 @@ void func_80AFDE00(EnColMan* this, PlayState* play) {
this->actor.speedXZ = 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)) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_56_02)) {
Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 40.0f, 40.0f);
} else {
Actor_PickUp(&this->actor, play, GI_RECOVERY_HEART, 40.0f, 40.0f);
@@ -139,8 +139,8 @@ void func_80AFDE00(EnColMan* this, PlayState* play) {
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);
}
}
@@ -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);
}
}
@@ -211,7 +211,7 @@ void func_80AFE25C(EnColMan* this, PlayState* play) {
}
Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_BOMB_EXPLOSION);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
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 902f01931..4e9040d83 100644
--- a/src/overlays/actors/ovl_En_Cow/z_en_cow.c
+++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.c
@@ -12,7 +12,7 @@
void EnCow_Init(Actor* thisx, PlayState* play);
void EnCow_Destroy(Actor* thisx, PlayState* play);
-void EnCow_Update(Actor* thisx, PlayState* play);
+void EnCow_Update(Actor* thisx, PlayState* play2);
void EnCow_Draw(Actor* thisx, PlayState* play);
void EnCow_TalkEnd(EnCow* this, PlayState* play);
@@ -24,10 +24,10 @@ void EnCow_Talk(EnCow* this, PlayState* play);
void EnCow_Idle(EnCow* this, PlayState* play);
void EnCow_DoTail(EnCow* this, PlayState* play);
-void EnCow_UpdateTail(Actor* this, PlayState* play);
-void EnCow_DrawTail(Actor* 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) {
@@ -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);
}
}
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..b9e1071fe 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,
@@ -349,7 +349,7 @@ void EnCrow_Damaged(EnCrow* this, PlayState* play) {
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);
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..2f2496f57 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,8 +176,8 @@ 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_0) && (play->sceneId == SCENE_12HAKUGINMAE) &&
+ (play->csCtx.currentCsIndex == 0) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_30_01)) {
if (!(this->unk_1CE & 0x10)) {
Flags_SetSwitch(play, 20);
this->unk_1CE |= (0x80 | 0x10);
@@ -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;
}
@@ -415,7 +415,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) {
@@ -522,7 +522,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_33_80)) {
SubS_UpdateFlags(&this->unk_1CE, 3, 7);
this->unk_1CE |= 0x80;
this->unk_1CD = 0xFF;
@@ -530,8 +530,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 +557,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);
}
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..4dc059c39 100644
--- a/src/overlays/actors/ovl_En_Dai/z_en_dai.h
+++ b/src/overlays/actors/ovl_En_Dai/z_en_dai.h
@@ -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..263b22ada 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,
@@ -88,12 +88,11 @@ void EnDaiku_Init(Actor* thisx, PlayState* play) {
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);
+ 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);
}
}
}
@@ -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;
}
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..fa161e9fd 100644
--- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h
+++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h
@@ -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..0e5e7a3ea 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);
@@ -309,11 +309,11 @@ void func_80BE6BC0(EnDaiku2* this, PlayState* play) {
} 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);
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..f13b89611 100644
--- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h
+++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h
@@ -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..93d495267 100644
--- a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c
+++ b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c
@@ -32,7 +32,7 @@ void func_808B3DA8(EnDekubaba* this, PlayState* play);
void func_808B3EE8(EnDekubaba* this, PlayState* play);
#if 0
-const ActorInit En_Dekubaba_InitVars = {
+ActorInit En_Dekubaba_InitVars = {
ACTOR_EN_DEKUBABA,
ACTORCAT_ENEMY,
FLAGS,
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..848f056bf 100644
--- a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.h
+++ b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.h
@@ -14,6 +14,4 @@ typedef struct EnDekubaba {
/* 0x18C */ char unk_18C[0x290];
} 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..6bc0fd8d1 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,
@@ -544,7 +544,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);
}
}
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..c6672b06e 100644
--- a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.h
+++ b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.h
@@ -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..2a4eb1553 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,
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..d9bebb404 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,
@@ -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);
}
}
@@ -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 RADF_TO_BINANG(Math_Atan2F_XY(diffZ, diffX));
}
/**
@@ -347,7 +349,7 @@ void EnDg_MoveAlongPath(EnDg* this, PlayState* play) {
Math_ApproachF(&this->actor.speedXZ, 3.5f, 0.2f, 1.0f);
}
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -430,7 +432,7 @@ void EnDg_UpdateTextId(EnDg* this) {
0x3538 + (gSaveContext.save.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.
@@ -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);
}
@@ -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);
@@ -992,7 +994,7 @@ 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);
} else {
@@ -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) {
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 bf2f5e7ce..643c167f0 100644
--- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c
+++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c
@@ -13,7 +13,7 @@
void EnDinofos_Init(Actor* thisx, PlayState* play);
void EnDinofos_Destroy(Actor* thisx, PlayState* play);
-void EnDinofos_Update(Actor* thisx, PlayState* play);
+void EnDinofos_Update(Actor* thisx, PlayState* play2);
void EnDinofos_Draw(Actor* thisx, PlayState* play);
void func_8089B834(EnDinofos* this, PlayState* play);
@@ -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,
@@ -369,7 +369,7 @@ void func_8089ABF4(EnDinofos* this, PlayState* play) {
this->subCamId = SUB_CAM_ID_DONE;
ActorCutscene_Stop(this->actor.cutscene);
if (this->actor.colChkInfo.health == 0) {
- func_800B724C(play, &this->actor, 6);
+ func_800B724C(play, &this->actor, PLAYER_CSMODE_6);
}
}
}
@@ -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;
@@ -1206,7 +1206,7 @@ void func_8089D318(EnDinofos* this, PlayState* play) {
if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
if (this->actor.colChkInfo.health == 0) {
ActorCutscene_Start(this->actor.cutscene, &this->actor);
- func_800B724C(play, &this->actor, 7);
+ func_800B724C(play, &this->actor, PLAYER_CSMODE_7);
} else {
ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
}
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 d663bcf74..615383a27 100644
--- a/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c
+++ b/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c
@@ -19,9 +19,9 @@ void EnDnb_Draw(Actor* thisx, PlayState* play);
s32 func_80A507C0(EnDnbUnkStruct* arg0, Vec3f arg1, Vec3f arg2, u8 arg3, f32 arg4, f32 arg5);
s32 func_80A5086C(EnDnbUnkStruct* arg0);
-s32 func_80A50950(EnDnbUnkStruct* arg0, PlayState* play);
+s32 func_80A50950(EnDnbUnkStruct* arg0, PlayState* play2);
-const ActorInit En_Dnb_InitVars = {
+ActorInit En_Dnb_InitVars = {
ACTOR_EN_DNB,
ACTORCAT_BG,
FLAGS,
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 50a027efa..ee035f06b 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,
@@ -171,7 +171,7 @@ s32 func_80A515C4(EnDnk* this) {
void func_80A51648(EnDnk* this, PlayState* play) {
if (SubS_IsObjectLoaded(this->unk_28E, play) == true) {
- gSegments[0x06] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[this->unk_28E].segment);
+ gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->unk_28E].segment);
this->actor.draw = func_80A52018;
this->actor.objBankIndex = this->unk_28E;
ActorShape_Init(&this->actor.shape, 0.0f, NULL, 18.0f);
@@ -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;
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..12e048955 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;
@@ -249,8 +249,8 @@ void EnDno_Init(Actor* thisx, PlayState* play) {
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,7 +307,7 @@ 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);
@@ -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) {
@@ -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;
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..470c82ee8 100644
--- a/src/overlays/actors/ovl_En_Dno/z_en_dno.h
+++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.h
@@ -50,6 +50,4 @@ typedef struct EnDno {
/* 0x468 */ u8 unk_468;
} 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..b504e9a11 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,38 +130,38 @@ 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);
}
- } 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);
}
- } 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);
}
if (Animation_OnFrame(&this->skelAnime, 22.0f)) {
Actor_PlaySfxAtPos(&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);
}
if (Animation_OnFrame(&this->skelAnime, 18.0f)) {
Actor_PlaySfxAtPos(&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)) {
if (Animation_OnFrame(&this->skelAnime, 7.0f) || Animation_OnFrame(&this->skelAnime, 15.0f)) {
Actor_PlaySfxAtPos(&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);
}
- } 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);
}
@@ -133,12 +170,12 @@ s32 func_80B3CA20(EnDnp* this) {
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 +191,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,10 +211,12 @@ 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);
+
+ //! FAKE
if (1) {};
Math_SmoothStepToS(&this->unk_330, pitch, 3, 0x2AA8, 0x1);
@@ -209,7 +248,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;
@@ -244,45 +283,50 @@ 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;
- if (!(gSaveContext.save.weekEventReg[29] & 0x40) && (play->sceneId == SCENE_MITURIN) &&
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_29_40) && (play->sceneId == SCENE_MITURIN) &&
(play->csCtx.currentCsIndex == 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) {
+ EnDnp_ChangeAnim(this, sCsAnimations[val]);
+ if (this->animIndex == EN_DNP_ANIM_CUTSCENE_IDLE) {
this->unk_322 |= 8;
} else {
this->unk_322 &= ~8;
}
- if (this->unk_340 == 19) {
+ if (this->animIndex == EN_DNP_ANIM_ANGRY_START) {
Actor_PlaySfxAtPos(&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)) &&
+ 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);
}
@@ -300,14 +344,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);
}
}
}
@@ -340,7 +387,7 @@ 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;
+ SET_WEEKEVENTREG(WEEKEVENTREG_23_20);
} else {
ActorCutscene_SetIntentToPlay(this->actor.cutscene);
}
@@ -350,16 +397,17 @@ 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);
@@ -367,19 +415,20 @@ void EnDnp_Init(Actor* thisx, PlayState* play) {
this->actor.world.rot.x = this->actor.shape.rot.x;
this->actor.cutscene = 0x10;
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);
}
}
@@ -409,10 +458,10 @@ void EnDnp_Update(Actor* thisx, PlayState* play) {
Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4);
sp2C = this->collider.dim.radius + 50;
sp28 = this->collider.dim.height + 30;
- if ((this->unk_322 & 0x400) && !(gSaveContext.save.weekEventReg[23] & 0x20)) {
+ if ((this->unk_322 & 0x400) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) {
Actor_PickUp(&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 +516,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 +530,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 +543,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..a41a63615 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,8 +23,8 @@ 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;
/* 0x328 */ s32 unk_328;
@@ -31,13 +32,11 @@ typedef struct EnDnp {
/* 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..021b94476 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,26 +60,26 @@ 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) {
@@ -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)) {
+ 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);
@@ -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;
@@ -459,7 +459,7 @@ void EnDnq_Update(Actor* thisx, PlayState* play) {
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..5afb8bdf8 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;
@@ -15,8 +16,8 @@ typedef struct EnDnq {
/* 0x190 */ ColliderCylinder collider;
/* 0x1DC */ u8 unk_1DC;
/* 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..714235b17 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,
@@ -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) {
@@ -359,14 +359,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 +397,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;
@@ -456,7 +456,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);
@@ -502,7 +502,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 +521,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) {
@@ -550,7 +550,7 @@ void EnDns_Update(Actor* thisx, PlayState* play) {
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);
+ 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..b54e49a6a 100644
--- a/src/overlays/actors/ovl_En_Dns/z_en_dns.h
+++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.h
@@ -57,6 +57,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 65e5417f3..d1ec4ea70 100644
--- a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c
+++ b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c
@@ -15,7 +15,7 @@
void EnDodongo_Init(Actor* thisx, PlayState* play);
void EnDodongo_Destroy(Actor* thisx, PlayState* play);
-void EnDodongo_Update(Actor* thisx, PlayState* play);
+void EnDodongo_Update(Actor* thisx, PlayState* play2);
void EnDodongo_Draw(Actor* thisx, PlayState* play);
void func_808773C4(EnDodongo* this);
@@ -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,
@@ -587,7 +587,7 @@ 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);
}
}
@@ -729,7 +729,7 @@ void func_80877E60(EnDodongo* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, 28.0f)) {
Actor_PlaySfxAtPos(&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;
@@ -823,7 +823,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 {
@@ -931,7 +931,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);
}
}
}
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 cf6d29fff..03da874f5 100644
--- a/src/overlays/actors/ovl_En_Door/z_en_door.c
+++ b/src/overlays/actors/ovl_En_Door/z_en_door.c
@@ -24,7 +24,7 @@
#define THIS ((EnDoor*)thisx)
-void EnDoor_Init(Actor* thisx, PlayState* play);
+void EnDoor_Init(Actor* thisx, PlayState* play2);
void EnDoor_Destroy(Actor* thisx, PlayState* play);
void EnDoor_Update(Actor* thisx, PlayState* play);
void EnDoor_Draw(Actor* thisx, PlayState* play);
@@ -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_52_20, 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;
}
}
@@ -465,7 +465,7 @@ 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;
@@ -475,12 +475,12 @@ void func_80866B20(EnDoor* this, PlayState* play) {
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]--;
Flags_SetSwitch(play, this->switchFlag);
@@ -491,25 +491,25 @@ void func_80866B20(EnDoor* this, PlayState* play) {
Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_DOOR_OPEN);
} else if (!Player_InCsMode(play)) {
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))) {
+ if (D_80867BC0 || ((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 (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;
+ 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;
@@ -528,16 +528,18 @@ 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;
- if (Schedule_RunScript(play, D_8086778C[this->switchFlag], &sp30) != 0) {
+ if (Schedule_RunScript(play, D_8086778C[this->switchFlag], &sp30)) {
this->dyna.actor.textId = sp30.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);
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 98e9d2b8f..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
@@ -11,7 +11,7 @@
#define THIS ((EnDoorEtc*)thisx)
-void EnDoorEtc_Init(Actor* thisx, PlayState* play);
+void EnDoorEtc_Init(Actor* thisx, PlayState* play2);
void EnDoorEtc_Destroy(Actor* thisx, PlayState* play);
void EnDoorEtc_Update(Actor* thisx, PlayState* play);
@@ -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..83b93cf52 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,
@@ -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_6);
this->state = DEEP_PYTHON_GRAB_STATE_GRABBED;
}
@@ -572,7 +572,7 @@ 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);
+ func_800B8E58((Player*)this, player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_DAMAGE_S);
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_UTSUBO_BITE);
CollisionCheck_GreenBlood(play, NULL, &player->actor.world.pos);
}
@@ -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) {
+ if (player->stateFlags2 & PLAYER_STATE2_80) {
player->unk_AE8 = 100;
}
@@ -684,43 +684,43 @@ void EnDragon_Dead(EnDragon* this, PlayState* play) {
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;
+ 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) {
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..cb2ab9490 100644
--- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h
+++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h
@@ -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..dfd97196a 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;
}
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..de26515fa 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 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..731497436 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,1344 @@ 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_PlaySfxAtPos(&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_PlaySfxAtPos(&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_8000000;
+ 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_8000000;
+ this->action = EYEGORE_ACTION_STAND;
+ Actor_PlaySfxAtPos(&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_PlaySfxAtPos(&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 = -func_80086B30(-nz * ny, 1.0f) * 0x8000 / M_PI;
+ rotToNorm.z = func_80086B30(-nx * ny, 1.0f) * 0x8000 / M_PI;
+
+ 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_PlaySfxAtPos(&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_PlaySfxAtPos(&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_PlaySfxAtPos(&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_PlaySfxAtPos(&this->actor, NA_SE_EN_EYEGOLE_DEAD);
+ this->actor.flags |= ACTOR_FLAG_8000000;
+ this->actor.flags &= ~ACTOR_FLAG_1;
+ this->actor.flags |= ACTOR_FLAG_100000;
+ this->actionFunc = EnEgol_StartDeathCutscene;
+ }
+ }
+}
+
+void EnEgol_StartDeathCutscene(EnEgol* this, PlayState* play) {
+ if (!ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
+ ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ } else {
+ ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene);
+ 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);
+ }
+ ActorCutscene_Stop(this->actor.cutscene);
+ Actor_Kill(&this->actor);
+ } else {
+ if (Animation_OnFrame(&this->skelAnime, 46.0f)) {
+ Actor_PlaySfxAtPos(&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_PlaySfxAtPos(&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, 0, 120, false, 40);
+ Actor_PlaySfxAtPos(&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, 0x4000, 255, false, 25);
+ Actor_PlaySfxAtPos(&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_PlaySfxAtPos(&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, 0x1D);
+ 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 = func_801660B8(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 c9b393980..54d5c3210 100644
--- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c
+++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c
@@ -11,7 +11,7 @@
#define THIS ((EnElf*)thisx)
-void EnElf_Init(Actor* thisx, PlayState* play);
+void EnElf_Init(Actor* thisx, PlayState* play2);
void EnElf_Destroy(Actor* thisx, PlayState* play);
void EnElf_Update(Actor* thisx, PlayState* play);
void EnElf_Draw(Actor* thisx, PlayState* play);
@@ -29,11 +29,11 @@ void func_8088E484(EnElf* this, PlayState* play);
void func_8088E850(EnElf* this, PlayState* play);
void func_8088EFA4(EnElf* this, PlayState* play);
void func_8088F214(EnElf* this, PlayState* play);
-void func_8088F5F4(EnElf* this, PlayState* play, s32 arg2);
+void func_8088F5F4(EnElf* this, PlayState* play, s32 sparkleLife);
void func_8089010C(Actor* thisx, PlayState* play);
-void func_808908D0(Vec3f* arg0, PlayState* play, u32 arg2);
+void func_808908D0(Vec3f* vec, PlayState* play, u32 action);
-const ActorInit En_Elf_InitVars = {
+ActorInit En_Elf_InitVars = {
ACTOR_EN_ELF,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -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);
}
}
@@ -358,7 +358,7 @@ void EnElf_Init(Actor* thisx, PlayState* play2) {
if ((gSaveContext.save.playerData.tatlTimer >= 25800) || (gSaveContext.save.playerData.tatlTimer < 3000)) {
gSaveContext.save.playerData.tatlTimer = 0;
}
- this->unk_266 = ElfMessage_GetFirstCycleHint(play);
+ this->unk_266 = QuestHint_GetTatlTextId(play);
break;
case 1:
@@ -420,7 +420,7 @@ void EnElf_Init(Actor* thisx, PlayState* play2) {
break;
case 8:
- Actor_MarkForDeath(thisx);
+ Actor_Kill(thisx);
return;
case 3:
@@ -565,17 +565,17 @@ void func_8088D9BC(EnElf* this, PlayState* play) {
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:
@@ -627,7 +627,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 +658,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;
}
@@ -717,9 +717,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,11 +762,11 @@ 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);
}
@@ -776,7 +776,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,8 +799,8 @@ 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);
}
@@ -823,9 +823,9 @@ 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);
}
@@ -844,13 +844,13 @@ 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;
}
@@ -872,7 +872,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);
}
@@ -915,11 +915,11 @@ void func_8088E850(EnElf* this, PlayState* play) {
}
} 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);
}
@@ -1085,10 +1085,10 @@ 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;
@@ -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,7 +1147,7 @@ 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);
}
@@ -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,7 +1195,7 @@ 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);
@@ -1204,25 +1204,25 @@ void func_8088F214(EnElf* this, PlayState* play) {
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);
}
- } 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;
}
}
@@ -1416,7 +1418,7 @@ void func_8088FE64(Actor* thisx, PlayState* play2) {
if (!gSaveContext.save.isNight) {
func_80151938(play, 0x248);
} else if ((gSaveContext.save.time < CLOCK_TIME(6, 0)) &&
- (gSaveContext.save.weekEventReg[74] & 0x20)) {
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_74_20)) {
func_80151938(play, 0x225);
} else {
func_80151938(play, 0x249);
@@ -1449,16 +1451,16 @@ 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;
}
- if ((player->tatlTextId == 0) && (player->unk_730 == NULL)) {
+ if ((player->tatlTextId == 0) && (player->targetedActor == NULL)) {
if ((gSaveContext.save.playerData.tatlTimer >= 600) && (gSaveContext.save.playerData.tatlTimer <= 3000)) {
- player->tatlTextId = ElfMessage_GetFirstCycleHint(play);
+ player->tatlTextId = QuestHint_GetTatlTextId(play);
}
}
@@ -1470,7 +1472,7 @@ 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;
}
@@ -1578,8 +1580,8 @@ void EnElf_Draw(Actor* thisx, PlayState* play) {
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);
+ (!(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 +1594,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));
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 e50fc13cd..12026b8b9 100644
--- a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c
+++ b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c
@@ -15,12 +15,12 @@
void EnElfbub_Init(Actor* thisx, PlayState* play);
void EnElfbub_Destroy(Actor* thisx, PlayState* play);
void EnElfbub_Update(Actor* thisx, PlayState* play);
-void EnElfbub_Draw(Actor* thisx, PlayState* play);
+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..169d56fdd 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,
@@ -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;
@@ -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) {
@@ -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) {
@@ -483,11 +485,11 @@ void func_80A3A610(EnElfgrp* this, PlayState* play) {
if (this->unk_144 > 0) {
player->actor.freezeTimer = 100;
- player->stateFlags1 |= 0x20000000;
+ player->stateFlags1 |= PLAYER_STATE1_20000000;
Actor_PlaySfxAtPos(&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 +501,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 +512,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;
@@ -558,7 +560,7 @@ 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;
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..803a66ac4 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,
@@ -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;
@@ -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);
@@ -293,7 +293,7 @@ void EnElforg_TurnInFairy(EnElforg* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
this->actor.shape.yOffset *= 0.9f;
this->actor.speedXZ = 5.0f;
- EnElforg_ApproachTargetYPosition(this, &player->bodyPartsPos[0]);
+ 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;
+ player->stateFlags1 &= ~PLAYER_STATE1_20000000;
+ Actor_Kill(&this->actor);
+ SET_WEEKEVENTREG(WEEKEVENTREG_08_80);
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);
- }
+ return;
+ }
+
+ 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);
}
}
}
@@ -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,7 +481,7 @@ 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;
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..2e6a44b64 100644
--- a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c
+++ b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c
@@ -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 b7c698376..656ec7936 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,
@@ -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;
}
@@ -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);
}
}
@@ -208,8 +208,8 @@ void EnEncount2_Update(Actor* thisx, PlayState* play) {
void EnEncount2_Draw(Actor* thisx, PlayState* play) {
EnEncount2* this = THIS;
if (this->isPopped != true) {
- Gfx_DrawDListOpa(play, object_fusen_DL_000A00);
- Gfx_DrawDListOpa(play, object_fusen_DL_000D78);
+ Gfx_DrawDListOpa(play, gMajoraBalloonDL);
+ Gfx_DrawDListOpa(play, gMajoraBalloonKnotDL);
}
EnEncount2_DrawEffects(this, play);
}
@@ -223,7 +223,7 @@ void EnEncount2_InitEffects(EnEncount2* this, Vec3f* pos, s16 fadeDelay) {
sPtr->isEnabled = true;
sPtr->pos = *pos;
sPtr->alphaFadeDelay = fadeDelay;
- sPtr->alpha = 0xFF;
+ sPtr->alpha = 255;
sPtr->accel.x = (Rand_ZeroOne() - 0.5f) * 10.0f;
sPtr->accel.y = (Rand_ZeroOne() - 0.5f) * 10.0f;
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..869d8681e 100644
--- a/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c
+++ b/src/overlays/actors/ovl_En_Encount3/z_en_encount3.c
@@ -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..311668bfe 100644
--- a/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c
+++ b/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c
@@ -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..6cdf54d70 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,
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..2650ad156 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,
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..8dcc12199 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,
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..333bbc918 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,
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..ee62798f1 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,
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..8f19fe9f8 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,
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..c55ab5272 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,250 @@ 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.speedXZ = 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.speedXZ = 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 & 1) && (this->actor.velocity.y < 0.0f)) || (this->collider.base.atFlags & 4)) {
+ this->collider.base.atFlags &= ~4;
+ 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.speedXZ *= 0.3f;
+ this->actor.shape.shadowScale = 0.0f;
+ this->inactive = true;
+ this->timer = 50;
+ Actor_PlaySfxAtPos(&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, 0x1C);
+ }
+ 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(this->rot.x * (M_PI / 180.0f));
+ Matrix_RotateYF(this->rot.y * (M_PI / 180.0f), MTXMODE_APPLY);
+ Matrix_RotateZF(this->rot.z * (M_PI / 180.0f), 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..32a4b7c82 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;
@@ -324,9 +324,9 @@ void EnFall_CrashingMoon_HandleGiantsCutscene(EnFall* this, PlayState* play) {
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 (CHECK_WEEKEVENTREG(WEEKEVENTREG_93_04)) {
if (ActorCutscene_GetCanPlayNext(0xC)) {
ActorCutscene_Start(0xC, &this->actor);
sGiantsCutsceneState++;
@@ -335,7 +335,7 @@ void EnFall_CrashingMoon_HandleGiantsCutscene(EnFall* this, PlayState* play) {
}
} else if (ActorCutscene_GetCanPlayNext(0xB)) {
ActorCutscene_Start(0xB, &this->actor);
- gSaveContext.save.weekEventReg[93] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_93_04);
sGiantsCutsceneState++;
} else {
ActorCutscene_SetIntentToPlay(0xB);
@@ -518,8 +518,8 @@ void EnFall_MoonsTear_Fall(EnFall* this, PlayState* play) {
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;
+ 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,
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..33cf9a64d 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,
@@ -158,7 +158,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..41f064498 100644
--- a/src/overlays/actors/ovl_En_Fall2/z_en_fall2.h
+++ b/src/overlays/actors/ovl_En_Fall2/z_en_fall2.h
@@ -20,6 +20,4 @@ typedef struct EnFall2 {
/* 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..27dcabc23 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,
@@ -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);
}
}
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..6a4c357d9 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,
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 3ac02d9c9..5cdcd99fe 100644
--- a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c
+++ b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c
@@ -14,7 +14,7 @@
void EnFirefly_Init(Actor* thisx, PlayState* play);
void EnFirefly_Destroy(Actor* thisx, PlayState* play);
-void EnFirefly_Update(Actor* thisx, PlayState* play);
+void EnFirefly_Update(Actor* thisx, PlayState* play2);
void EnFirefly_Draw(Actor* thisx, PlayState* play);
void EnFirefly_FlyIdle(EnFirefly* this, PlayState* play);
@@ -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,
@@ -411,7 +411,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);
}
}
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 d5dc5469a..5f9bbb2da 100644
--- a/src/overlays/actors/ovl_En_Fish/z_en_fish.c
+++ b/src/overlays/actors/ovl_En_Fish/z_en_fish.c
@@ -12,7 +12,7 @@
#define THIS ((EnFish*)thisx)
void EnFish_Init(Actor* thisx, PlayState* play);
-void EnFish_Destroy(Actor* thisx, PlayState* play);
+void EnFish_Destroy(Actor* thisx, PlayState* play2);
void EnFish_Update(Actor* thisx, PlayState* play);
void EnFish_Draw(Actor* thisx, PlayState* play);
@@ -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,
@@ -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);
}
}
@@ -582,8 +582,11 @@ 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 {
@@ -655,7 +658,7 @@ void func_8091ED70(Actor* thisx, PlayState* play) {
}
if (this->unk_240 <= 0) {
- Actor_MarkForDeath(thisx);
+ Actor_Kill(thisx);
}
}
@@ -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;
}
@@ -878,10 +881,11 @@ 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);
}
@@ -892,7 +896,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..528eeb40c 100644
--- a/src/overlays/actors/ovl_En_Fish/z_en_fish.h
+++ b/src/overlays/actors/ovl_En_Fish/z_en_fish.h
@@ -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 6b8ae91aa..c7dd18369 100644
--- a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c
+++ b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c
@@ -16,7 +16,7 @@
void EnFish2_Init(Actor* thisx, PlayState* play);
void EnFish2_Destroy(Actor* thisx, PlayState* play);
-void EnFish2_Update(Actor* thisx, PlayState* play);
+void EnFish2_Update(Actor* thisx, PlayState* play2);
void EnFish2_Draw(Actor* thisx, PlayState* play);
void func_80B28B5C(EnFish2* this);
@@ -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,
@@ -163,27 +163,27 @@ 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;
}
}
@@ -527,7 +527,7 @@ void func_80B2951C(EnFish2* this) {
this->unk_2B4 = 10;
this->actor.speedXZ = 3.0f;
- Actor_MarkForDeath(this->unk_350);
+ Actor_Kill(this->unk_350);
this->unk_350 = NULL;
D_80B2B2F4 = &this->actor;
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DODO_M_EAT);
@@ -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) {
@@ -806,7 +806,7 @@ void func_80B2A094(EnFish2* this, PlayState* play) {
if (D_80B2B2EC != 0) {
D_80B2B2EC++;
if (D_80B2B2EC > 200) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
ActorCutscene_Stop(this->unk_2BA[0]);
return;
}
@@ -863,7 +863,7 @@ void func_80B2A23C(EnFish2* this, PlayState* play) {
D_80B2B2E0 = D_80B2B2EC = D_80B2B2E4 = 0;
D_80B2B2F4 = NULL;
ActorCutscene_Stop(this->unk_2BA[0]);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -890,12 +890,12 @@ void func_80B2A498(EnFish2* this, PlayState* play) {
temp_v0->speedXZ = 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;
+ 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);
}
}
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..49941d67e 100644
--- a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.h
+++ b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.h
@@ -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 baa65bfa3..6d75abddb 100644
--- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c
+++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c
@@ -4,6 +4,7 @@
* 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"
@@ -16,12 +17,12 @@
#define WATER_SURFACE_Y(play) play->colCtx.colHeader->waterBoxes->minPos.y
-void EnFishing_Init(Actor* thisx, PlayState* play);
-void EnFishing_Destroy(Actor* thisx, PlayState* play);
-void EnFishing_UpdateFish(Actor* thisx, PlayState* play);
+void EnFishing_Init(Actor* thisx, PlayState* play2);
+void EnFishing_Destroy(Actor* thisx, PlayState* play2);
+void EnFishing_UpdateFish(Actor* thisx, PlayState* play2);
void EnFishing_DrawFish(Actor* thisx, PlayState* play);
-void EnFishing_UpdateOwner(Actor* thisx, PlayState* play);
+void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2);
void EnFishing_DrawOwner(Actor* thisx, PlayState* play);
typedef struct {
@@ -201,7 +202,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,
@@ -846,7 +847,7 @@ 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;
@@ -1158,7 +1159,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 +1171,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 +1181,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 +1194,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 +1204,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 +1221,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 +1231,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 +1243,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 +1267,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 +1279,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 +1290,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 +1300,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 +1318,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++;
}
@@ -1481,9 +1482,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 +1518,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 +1560,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);
@@ -1680,9 +1681,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 +1711,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 +1722,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 +1739,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);
}
}
}
@@ -1850,7 +1851,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 +1879,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 +1889,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 +2152,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;
}
@@ -2214,7 +2215,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));
@@ -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;
@@ -2963,10 +2964,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)) {
@@ -3847,9 +3848,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;
@@ -3865,7 +3869,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) {
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;
@@ -4250,7 +4254,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 +4266,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 +4355,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 +4368,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 +4380,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 +4390,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,7 +4402,7 @@ 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++;
}
@@ -4411,7 +4415,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++, gFishingLilyPadVtxDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFishingLilyPadModelDL);
}
}
@@ -4423,7 +4427,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 +4438,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 +4561,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,7 +4654,7 @@ 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++;
}
@@ -4663,7 +4667,7 @@ void EnFishing_DrawGroupFishes(PlayState* play) {
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++;
@@ -5176,7 +5180,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;
@@ -5286,7 +5290,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
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;
@@ -5313,7 +5317,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
func_80169AFC(play, sSubCamId, 0);
Cutscene_End(play, &play->csCtx);
- func_800B7298(play, &this->actor, 6);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_6);
D_8090CD4C = 0;
sSubCamId = SUB_CAM_ID_DONE;
D_8090CD50 = 30;
@@ -5327,7 +5331,7 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
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;
@@ -5414,7 +5418,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); // arg2 changed from 7 to 6 in MM
+ func_800B7298(play, &this->actor,
+ PLAYER_CSMODE_6); // arg2 changed from PLAYER_CSMODE_7 to PLAYER_CSMODE_6 in MM
D_8090CD4C = 0;
sSubCamId = SUB_CAM_ID_DONE;
player->unk_B28 = -5;
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 411d83712..3ad6809dc 100644
--- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c
+++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c
@@ -10,7 +10,7 @@
#define THIS ((EnFloormas*)thisx)
-void EnFloormas_Init(Actor* thisx, PlayState* play);
+void EnFloormas_Init(Actor* thisx, PlayState* play2);
void EnFloormas_Destroy(Actor* thisx, PlayState* play);
void EnFloormas_Update(Actor* thisx, PlayState* play);
void EnFloormas_Draw(Actor* thisx, PlayState* play);
@@ -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,
@@ -178,7 +178,7 @@ void EnFloormas_Init(Actor* thisx, PlayState* play2) {
&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);
if (this->actor.parent == NULL) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -186,8 +186,8 @@ void EnFloormas_Init(Actor* thisx, PlayState* play2) {
this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0,
params + 0x10, -1, this->actor.unk20, 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;
}
@@ -719,7 +719,7 @@ void func_808D217C(EnFloormas* this, Player* player) {
this->actor.speedXZ = 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;
@@ -762,7 +762,7 @@ void func_808D22C8(EnFloormas* this, PlayState* play) {
this->actor.speedXZ = -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);
+ func_800B8E58(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);
@@ -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,7 +917,7 @@ 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) {
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..0fa23e71a 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;
}
@@ -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;
}
@@ -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;
@@ -801,7 +801,7 @@ void EnFsn_BeginInteraction(EnFsn* this, PlayState* play) {
ActorCutscene_StartAndSetFlag(this->cutscene, &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 {
@@ -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) {
@@ -934,7 +934,7 @@ void EnFsn_DeterminePrice(EnFsn* this, PlayState* play) {
}
this->actor.textId = player->actor.textId;
func_801477B4(play);
- } else if (itemActionParam < PLAYER_AP_NONE) {
+ } else if (itemAction <= PLAYER_IA_MINUS1) {
if (CURRENT_DAY == 3) {
this->actor.textId = 0x29DF;
} else {
@@ -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,7 +997,7 @@ 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);
}
this->actionFunc = EnFsn_SetupResumeInteraction;
} else if (this->isSelling == true) {
@@ -1038,7 +1038,7 @@ void EnFsn_ResumeInteraction(EnFsn* this, PlayState* 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);
}
}
@@ -1052,7 +1052,7 @@ void EnFsn_ResumeShoppingInteraction(EnFsn* this, PlayState* play) {
} 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;
@@ -1103,7 +1103,7 @@ 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) {
@@ -1145,7 +1145,7 @@ 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);
@@ -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:
@@ -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);
}
@@ -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..35b654c3d 100644
--- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.h
+++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.h
@@ -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..041cadaa7 100644
--- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c
+++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c
@@ -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_63_01);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_08_01);
Collider_DestroyCylinder(play, &this->collider);
}
@@ -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);
@@ -532,10 +532,10 @@ void func_80962660(EnFu* this, PlayState* play) {
break;
case 0x287D:
- gSaveContext.save.weekEventReg[63] |= 1;
- gSaveContext.save.weekEventReg[63] &= (u8)~2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_63_01);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02);
func_801477B4(play);
- player->stateFlags1 |= 0x20;
+ player->stateFlags1 |= PLAYER_STATE1_20;
this->unk_53C = 0;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
func_801A2BB8(NA_BGM_TIMED_MINI_GAME);
@@ -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_63_01);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02);
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);
@@ -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) {
@@ -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;
@@ -778,9 +778,9 @@ void func_80962F4C(EnFu* this, PlayState* play) {
if ((!DynaPolyActor_IsInRidingRotatingState((DynaPolyActor*)this->actor.child) &&
(player->actor.bgCheckFlags & 1)) ||
(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);
@@ -800,7 +800,7 @@ void func_80962F4C(EnFu* this, PlayState* play) {
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;
@@ -848,7 +848,7 @@ void func_80963350(EnFu* this, PlayState* play) {
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,7 +878,7 @@ 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)) {
+ } else if ((this->unk_552 == 0x2880) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_80)) {
Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f);
} else {
Actor_PickUp(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f);
@@ -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;
@@ -1174,7 +1174,7 @@ 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;
} else {
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..b232210f5 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,
@@ -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;
}
@@ -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..6f9706a2b 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,
@@ -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;
}
@@ -192,7 +192,7 @@ void func_80ACE718(EnFuMato* this, PlayState* play) {
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);
}
}
@@ -352,7 +352,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);
}
}
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..f7d1d7cd1 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,
@@ -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);
}
}
@@ -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..55dc23737 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);
}
}
@@ -228,23 +231,23 @@ void EnGakufu_PlayRewardCutscene(EnGakufu* this, PlayState* play) {
/**
* 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..40c3d5c05 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,
@@ -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;
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..d6643dbeb 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,7 +159,7 @@ u16 func_80B0F7FC(EnGb2* this) {
return 0x14D1;
case 0x14D1:
- if (gSaveContext.eventInf[4] & 0x80) {
+ if (CHECK_EVENTINF(EVENTINF_47)) {
return 0x14E4;
}
@@ -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;
@@ -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 {
@@ -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_7);
this->actionFunc = func_80B11344;
break;
@@ -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) {
@@ -507,8 +507,8 @@ void func_80B10344(EnGb2* this, PlayState* play) {
if (gSaveContext.save.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 {
@@ -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_7);
this->actionFunc = func_80B11344;
}
break;
@@ -617,7 +617,7 @@ void func_80B10868(EnGb2* this, PlayState* play) {
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,7 +626,7 @@ 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);
}
@@ -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);
+ Actor_Kill(&this->actor);
break;
case ENGB2_7_2:
ActorCutscene_Stop(this->unk_282[this->unk_290]);
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;
}
}
@@ -706,9 +707,9 @@ 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;
@@ -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_52_20)) {
+ 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;
}
@@ -929,17 +930,17 @@ void EnGb2_Init(Actor* thisx, PlayState* play) {
this->unk_290 = 0;
this->unk_282[0] = this->actor.cutscene;
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..ec3b379a1 100644
--- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h
+++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h
@@ -38,6 +38,4 @@ typedef struct EnGb2 {
/* 0x290 */ s16 unk_290;
} 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 ad0d3de24..cbc8511b7 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,
@@ -73,10 +73,10 @@ typedef enum {
} GerudoWhiteAnimations;
void EnGe1_ChangeAnim(EnGe1* this, s16 animIndex, u8 mode, f32 morphFrames);
-void EnGe1_ShadowDraw(Actor* actor, Lights* lights, PlayState* play);
+void EnGe1_ShadowDraw(Actor* thisx, Lights* lights, PlayState* play);
void EnGe1_Wait(EnGe1* this, PlayState* play);
void EnGe1_PerformCutsceneActions(EnGe1* this, PlayState* play);
-s32 EnGe1_ValidatePictograph(PlayState* play, Actor* this);
+s32 EnGe1_ValidatePictograph(PlayState* play, Actor* thisx);
void EnGe1_Init(Actor* thisx, PlayState* play) {
EnGe1* this = THIS;
@@ -308,7 +308,7 @@ void EnGe1_PerformCutsceneActions(EnGe1* this, PlayState* play) {
break;
case 7:
- Actor_MarkForDeath(&this->picto.actor);
+ Actor_Kill(&this->picto.actor);
break;
// Twister cutscene
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..5388a1186 100644
--- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.h
+++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.h
@@ -40,6 +40,4 @@ typedef struct EnGe1 {
/* 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..4659c4aa9 100644
--- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c
+++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c
@@ -27,7 +27,7 @@ void func_80B8C644(EnGe2* this, PlayState* play);
void func_80B8C9B8(EnGe2* this, PlayState* play);
#if 0
-const ActorInit En_Ge2_InitVars = {
+ActorInit En_Ge2_InitVars = {
ACTOR_EN_GE2,
ACTORCAT_NPC,
FLAGS,
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..0558166db 100644
--- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.h
+++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.h
@@ -13,6 +13,4 @@ typedef struct EnGe2 {
/* 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..1da6c1a61 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,
@@ -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;
@@ -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,7 +464,7 @@ 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];
Message_StartTextbox(play, this->unk_496, &this->actor);
@@ -656,9 +656,9 @@ void func_80BB2B1C(EnGeg* this, PlayState* play) {
if (ActorCutscene_GetCurrentIndex() != this->unk_49C[4]) {
if (ActorCutscene_GetCanPlayNext(this->unk_498)) {
- gSaveContext.save.weekEventReg[37] |= 8;
+ 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);
@@ -798,7 +798,7 @@ 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;
}
@@ -839,7 +839,7 @@ void func_80BB3318(EnGeg* this, PlayState* play) {
if (ActorCutscene_GetCurrentIndex() != this->unk_49C[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);
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);
}
}
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..ea29fd6cf 100644
--- a/src/overlays/actors/ovl_En_Geg/z_en_geg.h
+++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.h
@@ -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..a6c2a31ec 100644
--- a/src/overlays/actors/ovl_En_Gg/z_en_gg.c
+++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.c
@@ -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_80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_19_80))) {
Math_SmoothStepToS(&this->unk_2E8, pitch, 4, 0x2AA8, 1);
} else {
Math_SmoothStepToS(&this->unk_2E8, 0, 4, 0x2AA8, 1);
@@ -212,7 +212,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,7 +225,7 @@ 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 == 0)) {
func_80B359DC(this, play);
}
@@ -236,7 +236,7 @@ void func_80B35450(EnGg* this, PlayState* 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)) {
@@ -319,7 +319,7 @@ void func_80B35634(EnGg* this, PlayState* play) {
break;
case 8:
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
default:
@@ -390,18 +390,18 @@ 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;
}
@@ -530,7 +530,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 +554,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 +607,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,7 +647,7 @@ 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;
}
@@ -660,9 +660,9 @@ 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;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_04);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_08);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_20_10);
this->actor.flags &= ~ACTOR_FLAG_80;
this->unk_310 = this->actor.home.pos.y;
this->unk_2DC = this->actor.cutscene;
@@ -690,7 +690,7 @@ void EnGg_Update(Actor* thisx, PlayState* play) {
this->actor.flags &= ~ACTOR_FLAG_1;
}
- if (gSaveContext.save.weekEventReg[19] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_80)) {
if (play->csCtx.state == 0) {
this->actor.flags |= ACTOR_FLAG_1;
} else {
@@ -708,10 +708,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_80) ||
(this->unk_308 == 1))) {
- gSaveContext.save.weekEventReg[91] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_91_10);
}
this->actionFunc(this, play);
@@ -789,7 +789,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]));
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..cb9f9e7cb 100644
--- a/src/overlays/actors/ovl_En_Gg/z_en_gg.h
+++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.h
@@ -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 a9aaedaa1..6da3b1378 100644
--- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c
+++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c
@@ -11,7 +11,7 @@
#define THIS ((EnGg2*)thisx)
-void EnGg2_Init(Actor* thisx, PlayState* play);
+void EnGg2_Init(Actor* thisx, PlayState* play2);
void EnGg2_Destroy(Actor* thisx, PlayState* play);
void EnGg2_Update(Actor* thisx, PlayState* play);
void EnGg2_Draw(Actor* thisx, PlayState* play);
@@ -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;
@@ -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,17 +240,17 @@ 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);
}
}
}
@@ -356,12 +356,12 @@ 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;
}
@@ -381,37 +381,37 @@ void EnGg2_Init(Actor* thisx, PlayState* play2) {
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);
}
}
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..f91310775 100644
--- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h
+++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h
@@ -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..dbd180359 100644
--- a/src/overlays/actors/ovl_En_Giant/z_en_giant.c
+++ b/src/overlays/actors/ovl_En_Giant/z_en_giant.c
@@ -72,7 +72,7 @@ typedef enum {
/* 15 */ GIANT_CS_ACTION_HOLDING_UP_MOON_IN_CLOCK_TOWER
} GiantCsActionIndex;
-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;
@@ -183,8 +183,8 @@ void EnGiant_Init(Actor* thisx, PlayState* play) {
}
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;
}
@@ -210,7 +210,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);
}
}
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..9ce182a98 100644
--- a/src/overlays/actors/ovl_En_Giant/z_en_giant.h
+++ b/src/overlays/actors/ovl_En_Giant/z_en_giant.h
@@ -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..88d55dc14 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,
@@ -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 {
@@ -165,18 +165,18 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) {
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;
+ !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;
+ !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;
+ 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)) {
@@ -524,14 +524,14 @@ 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)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_10_08)) {
Actor_PickUp(&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);
}
} 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)) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_59_08)) {
Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f);
} else {
Actor_PickUp(&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);
}
}
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..65df46284 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,
@@ -160,14 +160,14 @@ 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)) {
+ 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;
}
@@ -205,13 +205,13 @@ s32 EnGirlA_CanBuyPotionGreen(PlayState* play, EnGirlA* this) {
}
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) {
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..6f2f3c09c 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;
@@ -247,11 +247,11 @@ 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;
}
@@ -442,7 +442,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;
@@ -630,7 +630,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;
}
@@ -810,7 +810,7 @@ void func_80B51EA4(EnGk* this, PlayState* play) {
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);
+ Actor_Kill(&this->actor);
} else {
this->unk_1EC++;
}
@@ -829,7 +829,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 {
@@ -847,7 +847,7 @@ void func_80B5202C(EnGk* this, PlayState* 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);
@@ -895,7 +895,7 @@ void func_80B5227C(EnGk* this, PlayState* play) {
func_800B14D4(play, 20.0f, &this->actor.home.pos);
this->unk_350 = 60;
if (!(this->unk_1E4 & 0x80)) {
- gSaveContext.save.weekEventReg[22] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_22_04);
}
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GOLON_SIT_IMT);
this->unk_350 = 0x4000;
@@ -906,7 +906,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 +955,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,7 +964,7 @@ 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 {
@@ -985,7 +985,7 @@ void func_80B525E0(EnGk* this, PlayState* play) {
void func_80B52654(EnGk* this, PlayState* play) {
this->unk_350 += 0x400;
if ((this->unk_1E4 & 0x80) && (play->csCtx.frames == 250)) {
- gSaveContext.save.weekEventReg[22] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_22_04);
}
this->unk_354 = Math_SinS(this->unk_350) * 0.006f * 0.06f;
@@ -1020,14 +1020,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->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_33_80)) {
if (gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 1)) {
this->actionFunc = func_80B51760;
} else if (gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 2)) {
@@ -1036,21 +1036,21 @@ 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->actor.flags |= ACTOR_FLAG_10;
@@ -1074,7 +1074,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);
@@ -1233,7 +1233,7 @@ void EnGk_Draw(Actor* thisx, PlayState* play) {
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);
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..bebe6c6c9 100644
--- a/src/overlays/actors/ovl_En_Gk/z_en_gk.h
+++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.h
@@ -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..01146c0cf 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,
@@ -463,7 +463,7 @@ s32 func_8094E52C(EnGm* this, PlayState* play) {
}
case 2:
- if (!(gSaveContext.save.weekEventReg[86] & 0x40) && (this->unk_3E0 == 2)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_86_40) && (this->unk_3E0 == 2)) {
ActorCutscene_Stop(sp2A);
} else {
Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)), &this->actor);
@@ -632,8 +632,8 @@ 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;
}
@@ -739,14 +739,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;
}
@@ -860,7 +860,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 +892,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) {
@@ -1105,7 +1105,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 +1137,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 +1181,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 +1352,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 +1412,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;
@@ -1582,7 +1582,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))) {
@@ -1665,7 +1665,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,7 +1711,7 @@ 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);
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..3bed5335a 100644
--- a/src/overlays/actors/ovl_En_Gm/z_en_gm.h
+++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.h
@@ -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..e1250dbc6 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,7 +538,7 @@ 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) &&
+ (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04) && (play->sceneId == SCENE_16GORON_HOUSE) &&
(gSaveContext.sceneLayer == 0) && (this->unk_3EC == 0) && (play->csCtx.currentCsIndex == 1))) {
ret = true;
}
@@ -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--;
}
@@ -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,7 +988,7 @@ 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;
@@ -1178,7 +1178,7 @@ s32 func_80A13B1C(EnGo* this, PlayState* play) {
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;
@@ -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_33_80))) {
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);
}
}
@@ -1414,7 +1414,7 @@ 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))) {
+ !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;
}
}
@@ -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;
@@ -1816,7 +1816,7 @@ void func_80A153FC(EnGo* this, PlayState* play) {
}
s32* func_80A15684(EnGo* this, PlayState* play) {
- static s32 D_80A16704[] = {
+ static s32* D_80A16704[] = {
D_80A16100,
D_80A16164,
};
@@ -1929,10 +1929,10 @@ 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) &&
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..fd4876430 100644
--- a/src/overlays/actors/ovl_En_Go/z_en_go.h
+++ b/src/overlays/actors/ovl_En_Go/z_en_go.h
@@ -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..98d27f735 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,
@@ -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;
}
@@ -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) {
@@ -1264,7 +1264,7 @@ 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);
if (((this->actor.home.rot.z & 3) == 1) || ((this->actor.home.rot.z & 3) == 2)) {
@@ -1292,7 +1292,7 @@ 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);
if (((this->actor.home.rot.z & 3) == 1) || ((this->actor.home.rot.z & 3) == 2)) {
@@ -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);
}
}
@@ -1434,7 +1434,8 @@ void EnGoroiwa_Update(Actor* thisx, PlayState* play) {
u32 temp_v0_2;
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--;
}
@@ -1515,7 +1516,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..eb7948ffb 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,
@@ -390,7 +390,7 @@ 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 {
@@ -782,8 +782,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 +840,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);
}
}
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..93d7e3f88 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,
@@ -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);
}
}
@@ -372,7 +372,7 @@ void func_809984F4(EnGs* this, PlayState* play) {
}
} while (gossipStone != NULL);
- func_800B7298(play, &this->actor, 7);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_7);
this->actionFunc = func_809985B8;
}
@@ -459,29 +459,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;
}
@@ -871,7 +871,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 +881,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);
}
}
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..51e899fcc 100644
--- a/src/overlays/actors/ovl_En_Gs/z_en_gs.h
+++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.h
@@ -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..b13bca1dd 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;
}
@@ -234,7 +234,7 @@ void func_80ABB590(EnGuardNuts* this, PlayState* play) {
if (D_80ABBE38[this->guardTextIndex] == 2) {
func_801477B4(play);
D_80ABBE20 = 2;
- gSaveContext.save.weekEventReg[12] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_12_40);
EnGuardNuts_Burrow(this, play);
} else {
this->guardTextIndex++;
@@ -300,7 +300,7 @@ 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);
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..f7eddbe6f 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,
@@ -88,12 +88,12 @@ void EnGuruguru_Init(Actor* thisx, PlayState* play) {
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;
}
}
@@ -212,16 +212,16 @@ void func_80BC7068(EnGuruguru* this, PlayState* 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);
@@ -295,9 +295,9 @@ 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);
@@ -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;
}
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..0e1d2f050 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,
@@ -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);
@@ -352,7 +353,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 0f016f300..507bf9deb 100644
--- a/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c
+++ b/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c
@@ -11,8 +11,8 @@
#define THIS ((EnHanabi*)thisx)
-void EnHanabi_Init(Actor* thisx, PlayState* play);
-void EnHanabi_Destroy(Actor* thisx, PlayState* play);
+void EnHanabi_Init(Actor* thisx, PlayState* play2);
+void EnHanabi_Destroy(Actor* thisx, PlayState* play2);
void EnHanabi_Update(Actor* thisx, PlayState* play);
void func_80B23894(EnHanabi* this, PlayState* play);
@@ -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,
@@ -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);
}
}
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..756f37eb8 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,17 +72,15 @@ 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);
}
}
@@ -152,22 +150,23 @@ 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, 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);
}
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..e100a2de3 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,17 +119,17 @@ 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;
@@ -120,13 +137,13 @@ void EnHg_Init(Actor* thisx, PlayState* play) {
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_52_20)) {
+ Actor_Kill(&this->actor);
}
this->actor.targetMode = 1;
this->actor.colChkInfo.health = 0;
@@ -138,7 +155,7 @@ void EnHg_Init(Actor* thisx, PlayState* play) {
this->cutscenes[i] = currentCutscene;
currentCutscene = ActorCutscene_GetAdditionalCutscene(currentCutscene);
}
- func_80BCF354(this);
+ EnHg_SetupWait(this);
}
void EnHg_Destroy(Actor* thisx, PlayState* play) {
@@ -147,16 +164,16 @@ 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);
+ EnHg_SetupChasePlayer(this);
}
if ((gSaveContext.sceneLayer == 0) && (play->csCtx.currentCsIndex == 0) &&
((play->csCtx.frames == 20) || (play->csCtx.frames == 60))) {
@@ -165,17 +182,17 @@ void func_80BCF398(EnHg* this, PlayState* play) {
}
}
-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) {
+ 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,53 +241,53 @@ 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 (ActorCutscene_GetCanPlayNext(this->cutscenes[this->cutsceneIndex])) {
+ ActorCutscene_Start(this->cutscenes[this->cutsceneIndex], &this->actor);
+ EnHg_SetupCsAction(this);
} else {
if (ActorCutscene_GetCurrentIndex() == 0x7C) {
ActorCutscene_Stop(0x7C);
}
- ActorCutscene_SetIntentToPlay(this->cutscenes[this->unk218]);
+ ActorCutscene_SetIntentToPlay(this->cutscenes[this->cutsceneIndex]);
}
}
-void func_80BCF93C(EnHg* this) {
+void EnHg_SetupCsAction(EnHg* this) {
this->cutscenes[3] = 0x63;
this->cutscenes[2] = 0;
- this->actionFunc = func_80BCF95C;
+ this->actionFunc = EnHg_HandleCsAction;
}
-void func_80BCF95C(EnHg* this, PlayState* play) {
+void EnHg_HandleCsAction(EnHg* this, PlayState* play) {
if (Cutscene_CheckActorAction(play, 484)) {
s32 actionIndex = Cutscene_GetActorActionIndex(play, 484);
@@ -278,109 +296,128 @@ void func_80BCF95C(EnHg* this, PlayState* play) {
switch (play->csCtx.actorActions[actionIndex]->action) {
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->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->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->animIndex = HG_ANIM_PANIC;
+ if ((this->cutsceneIndex == HG_CS_GET_MASK) || (this->cutsceneIndex == 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->cutsceneIndex == HG_CS_FIRST_ENCOUNTER) ||
+ (this->cutsceneIndex == HG_CS_SUBSEQUENT_ENCOUNTER)) {
func_800B9010(&this->actor, NA_SE_EN_HALF_REDEAD_SCREAME - SFX_FLAG);
}
break;
}
+
Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex);
return;
+
} else if (play->csCtx.state == 0) {
- func_80BCF354(this);
+ EnHg_SetupWait(this);
}
+
this->cutscenes[3] = 0x63;
}
-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->cutsceneIndex = HG_CS_SONG_OF_HEALING;
+ } else {
+ this->cutsceneIndex = 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->cutsceneIndex = HG_CS_FIRST_ENCOUNTER;
} else {
- this->unk218 = 1;
+ this->cutsceneIndex = 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 +426,10 @@ void EnHg_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
SkelAnime_Update(&this->skelAnime);
- func_80BCF7D8(this, play);
- func_80BCFC0C(this, play);
+ EnHg_UpdateCollision(this, play);
+ EnHg_WaitForPlayerAction(this, play);
Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 25.0f, 0.0f, 5);
- func_80BCF778(this, play);
+ EnHg_PlayRedeadSfx(this, play);
}
s32 EnHg_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
@@ -401,9 +438,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 +452,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..1211a4cf3 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 cutsceneIndex;
/* 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];
} 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..f7a9df82a 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_52_20)) {
+ 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,109 +212,128 @@ 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);
+ EnHgo_SetupTalk(this);
break;
}
}
}
-s32 func_80BD0898(EnHgo* this, PlayState* play) {
+s32 EnHgo_HandleCsAction(EnHgo* this, PlayState* play) {
s32 actionIndex;
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;
+ if (this->csAction != play->csCtx.actorActions[actionIndex]->action) {
+ this->csAction = play->csCtx.actorActions[actionIndex]->action;
switch (play->csCtx.actorActions[actionIndex]->action) {
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);
}
}
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);
}
}
@@ -306,30 +341,32 @@ s32 func_80BD0898(EnHgo* this, PlayState* play) {
Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex);
return true;
}
- if ((play->csCtx.state == 0) && (((gSaveContext.save.weekEventReg[75]) & 0x20)) &&
- (this->actionFunc == func_80BD0410)) {
+
+ if ((play->csCtx.state == CS_STATE_0) && 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->csAction = 0x63;
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..6882c1127 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 csAction;
} 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..d8df99887 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,12 +95,12 @@ 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;
}
@@ -147,7 +147,7 @@ void func_80BDB2B8(EnHiddenNuts* this, PlayState* play) {
Actor_PlaySfxAtPos(&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;
@@ -313,7 +313,7 @@ void func_80BDBA28(EnHiddenNuts* this, PlayState* play) {
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;
@@ -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);
}
}
}
@@ -402,7 +402,7 @@ void func_80BDBED4(EnHiddenNuts* this, PlayState* play) {
Actor_PlaySfxAtPos(&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);
}
}
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..e40a89193 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
@@ -33,6 +33,4 @@ typedef struct EnHiddenNuts {
/* 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..c07bbc5da 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,
@@ -330,7 +330,7 @@ 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) {
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 40f1e7d08..df8b29e97 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,
@@ -155,7 +155,7 @@ void EnHoll_VisibleIdle(EnHoll* this, PlayState* play) {
u32 zActorBitmask = D_801AED48[EN_HOLL_GET_Z_ACTOR_BITMASK_INDEX(&this->actor)];
if (!(actorCtxBitmask & zActorBitmask)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
if (this == sInstancePlayingSound) {
@@ -310,7 +310,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 a9b233aa5..5ffc364c3 100644
--- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c
+++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c
@@ -15,9 +15,9 @@
#define THIS ((EnHorse*)thisx)
-void EnHorse_Init(Actor* thisx, PlayState* play);
+void EnHorse_Init(Actor* thisx, PlayState* play2);
void EnHorse_Destroy(Actor* thisx, PlayState* play);
-void EnHorse_Update(Actor* thisx, PlayState* play);
+void EnHorse_Update(Actor* thisx, PlayState* play2);
void EnHorse_Draw(Actor* thisx, PlayState* play);
void func_8087D540(Actor* thisx, PlayState* play);
@@ -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,
@@ -674,7 +674,7 @@ s32 EnHorse_PlayerCanMove(EnHorse* this, PlayState* play) {
(((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)) {
+ (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,8 +792,8 @@ 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;
}
@@ -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);
@@ -1131,6 +1131,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);
@@ -1569,7 +1570,7 @@ void EnHorse_Stopping(EnHorse* this, PlayState* play) {
if ((this->stateFlags & ENHORSE_STOPPING_NEIGH_SOUND) && (this->skin.skelAnime.curFrame > 29.0f)) {
this->actor.speedXZ = 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);
@@ -2471,7 +2472,7 @@ void func_808819D8(EnHorse* this, PlayState* play) {
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,
@@ -2916,22 +2917,23 @@ 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)) {
+ if (((this->hbaFlags & 1) || (this->hbaTimer > 45)) && (sp28 != 1) &&
+ (gSaveContext.minigameStatus != MINIGAME_STATUS_END)) {
gSaveContext.save.cutscene = 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);
}
@@ -3271,7 +3273,7 @@ void func_80884604(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
}
void func_808846B4(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
void func_808846DC(EnHorse* this, PlayState* play, CsCmdActorAction* action) {
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..e97deee04 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) {
+ } 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);
+ } else if (GET_WEEKEVENTREG_RACE_FLAGS == WEEKEVENTREG_RACE_FLAG_4) {
+ SET_WEEKEVENTREG_RACE_FLAGS(WEEKEVENTREG_RACE_FLAG_3);
play->transitionType = TRANS_TYPE_02;
gSaveContext.nextTransitionType = TRANS_TYPE_02;
}
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;
@@ -252,7 +252,7 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) {
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;
}
@@ -285,7 +285,7 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) {
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;
}
@@ -318,7 +318,7 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) {
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;
}
@@ -347,7 +347,7 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) {
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..a10504720 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,
@@ -345,7 +345,7 @@ void func_808DF194(EnHorseLinkChild* this, PlayState* play) {
sp4C = SkelAnime_Update(&this->skin.skelAnime);
if ((sp4C != 0) || (this->unk_148 == 1) || (this->unk_148 == 0)) {
- if ((gSaveContext.save.weekEventReg[1] & 0x20)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_01_20)) {
f32 sp44 = Math3D_Distance(&this->actor.world.pos, &this->actor.home.pos);
s32 pad;
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..2eb1c71a6 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,
@@ -162,7 +162,7 @@ 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) {
@@ -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_7);
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);
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..2468e5961 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,
@@ -372,7 +372,7 @@ s32 func_80BF17BC(EnIg* this, PlayState* play) {
case 1:
case 3:
- if (!(gSaveContext.save.weekEventReg[75] & 0x10) && (this->unk_3F6 == 3)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_10) && (this->unk_3F6 == 3)) {
ActorCutscene_Stop(sp2A);
this->unk_3F6 = 5;
} else {
@@ -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)) {
@@ -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,7 +950,7 @@ 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);
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 ffd45eaf9..4188f44c4 100644
--- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c
+++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c
@@ -13,7 +13,7 @@
void EnIk_Init(Actor* thisx, PlayState* play);
void EnIk_Destroy(Actor* thisx, PlayState* play);
-void EnIk_Update(Actor* thisx, PlayState* play);
+void EnIk_Update(Actor* thisx, PlayState* play2);
void EnIk_Draw(Actor* thisx, PlayState* play);
void EnIk_Thaw(EnIk* this, PlayState* play);
@@ -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,
@@ -694,7 +694,7 @@ 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);
+ Actor_Kill(&this->actor);
}
}
} else if (Animation_OnFrame(&this->skelAnime, 23.0f)) {
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..a51cae556 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,
@@ -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);
@@ -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,30 +352,30 @@ 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) {
+ if (this->unk4B0 == WEEKEVENTREG_RACE_FLAG_2) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_IN_LOST);
} else {
Actor_PlaySfxAtPos(&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);
}
}
@@ -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);
}
}
@@ -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);
}
}
@@ -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;
@@ -578,7 +578,7 @@ s32 func_808F4150(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx)
func_8019F208();
if (gSaveContext.save.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);
@@ -604,7 +604,7 @@ s32 func_808F4270(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx,
func_8019F208();
if (gSaveContext.save.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;
@@ -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->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;
}
@@ -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:
@@ -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->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,7 +1078,7 @@ 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;
}
@@ -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;
}
@@ -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,7 +1334,7 @@ void func_808F5C98(EnIn* this, PlayState* play) {
}
}
if (this->unk4A8 == 2) {
- if (this->unk4B0 == RACE_FLAG_2) {
+ if (this->unk4B0 == WEEKEVENTREG_RACE_FLAG_2) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_IN_LOST);
} else {
Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_IN_JOY0);
@@ -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 {
@@ -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..9eae19437 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,
@@ -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;
}
@@ -355,7 +355,7 @@ void func_8091B440(EnInsect* this, PlayState* play) {
}
if (this->unk_312 <= 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -436,7 +436,7 @@ void func_8091B984(EnInsect* this, PlayState* play) {
}
if (this->unk_312 <= 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
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 2050c7316..2c6a15737 100644
--- a/src/overlays/actors/ovl_En_Invadepoh/z_en_invadepoh.c
+++ b/src/overlays/actors/ovl_En_Invadepoh/z_en_invadepoh.c
@@ -170,7 +170,7 @@ void func_80B4BA30(Actor* thisx, PlayState* play);
void func_80B4C568(Actor* thisx, PlayState* play);
void func_80B4CFFC(Actor* thisx, PlayState* play);
void func_80B46184(unkStruct80B50350* unkStruct);
-s32 func_80B450C0(f32* arg0, f32* arg1, f32 arg2, f32 arg3, f32 arg4);
+s32 func_80B450C0(f32* x1, f32* z1, f32 x2, f32 z2, f32 speed);
s32 func_80B4516C(EnInvadepoh* this);
void func_80B45A4C(EnInvadePohStruct* s, unkstructInvadepoh4** u);
void func_80B45A94(EnInvadePohStruct* s, unkstructInvadepoh4** u);
@@ -178,7 +178,7 @@ void func_80B45B1C(EnInvadePohStruct* s, unkstructInvadepoh4** u);
extern s32 D_801BDA9C;
-const ActorInit En_Invadepoh_InitVars = {
+ActorInit En_Invadepoh_InitVars = {
ACTOR_EN_INVADEPOH,
ACTORCAT_PROP,
FLAGS,
@@ -830,7 +830,7 @@ s32 func_80B440B8(EnInvadepoh* this, f32 arg1, f32 arg2) {
sp40 = temp_a3->x - sp48->x;
sp3C = temp_a3->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;
@@ -1160,8 +1160,8 @@ s32 func_80B44C80(EnInvadepoh* this, PlayState* play) {
}
Math_SmoothStepToS(&this->actor.world.rot.y,
- Math_FAtan2F(((sp60.z + temp_f0_2) * 0.9f) + sp6C.z, ((sp60.x + temp_f0_3) * 0.9f) + sp6C.x), 4,
- 0xFA0, 0x64);
+ Math_Atan2S_XY(((sp60.z + temp_f0_2) * 0.9f) + sp6C.z, ((sp60.x + temp_f0_3) * 0.9f) + sp6C.x),
+ 4, 0xFA0, 0x64);
Actor_MoveWithGravity(&this->actor);
if (func_80B440B8(this, 50.0f, 15.0f)) {
phi_v0 = 4;
@@ -1283,7 +1283,7 @@ void func_80B451A0(EnInvadepoh* this, PlayState* play) {
}
if (D_80B4E940 == 0) {
- if (gSaveContext.save.weekEventReg[22] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
D_80B4E940 = 3;
} else {
D_80B4E940 = 4;
@@ -1688,7 +1688,7 @@ void EnInvadepoh_InitAlien(EnInvadepoh* this, PlayState* play) {
}
this->bankIndex = Object_GetIndex(&play->objectCtx, OBJECT_UCH);
if (this->bankIndex < 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -1698,7 +1698,7 @@ void EnInvadepoh_InitParentCow(EnInvadepoh* this, PlayState* play) {
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_INVADEPOH, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0x30);
this->bankIndex = Object_GetIndex(&play->objectCtx, OBJECT_COW);
if (this->bankIndex < 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -1707,7 +1707,7 @@ void EnInvadepoh_InitChildCow(EnInvadepoh* this, PlayState* play) {
this->actor.update = func_80B481C4;
this->bankIndex = Object_GetIndex(&play->objectCtx, OBJECT_COW);
if (this->bankIndex < 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -1743,27 +1743,28 @@ void EnInvadepoh_InitRomani(EnInvadepoh* this, PlayState* play) {
this->bankIndex = Object_GetIndex(&play->objectCtx, OBJECT_MA1);
if (this->bankIndex < 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
+
if (temp == 5) {
- if (gSaveContext.save.weekEventReg[22] & 1) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ Actor_Kill(&this->actor);
return;
}
} else if (temp == 7) {
if (gSaveContext.save.time < CLOCK_TIME(6, 0) && gSaveContext.save.time >= CLOCK_TIME(2, 15)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
} else if (temp != 8) {
if (temp == 9) {
if (gSaveContext.save.entrance != ENTRANCE(ROMANI_RANCH, 6)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
} else if (temp == 0xC) {
- if (!(gSaveContext.save.weekEventReg[22] & 1)) {
- Actor_MarkForDeath(&this->actor);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ Actor_Kill(&this->actor);
}
D_80B503F4 = this;
}
@@ -1784,7 +1785,7 @@ void func_80B468B4(EnInvadepoh* this, PlayState* play) {
this->actor.world.pos.y += 1500.0f;
func_80B49628(this);
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -1799,7 +1800,7 @@ void EnInvadepoh_InitDog(EnInvadepoh* this, PlayState* play) {
ActorShape_Init(&this->actor.shape, 0, ActorShadow_DrawCircle, 24.0f);
this->bankIndex = Object_GetIndex(&play->objectCtx, OBJECT_DOG);
if (this->bankIndex < 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -1815,10 +1816,10 @@ void EnInvadepoh_InitCremia(EnInvadepoh* this, PlayState* play) {
ActorShape_Init(&this->actor.shape, 0, ActorShadow_DrawCircle, 18.0f);
this->bankIndex = Object_GetIndex(&play->objectCtx, OBJECT_MA2);
if (this->bankIndex < 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
- if (!(gSaveContext.save.weekEventReg[22] & 1)) {
- Actor_MarkForDeath(&this->actor);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
+ Actor_Kill(&this->actor);
}
D_80B503F8 = this;
}
@@ -1954,7 +1955,7 @@ void func_80B46FA8(EnInvadepoh* this, PlayState* play) {
s32 i;
if ((gSaveContext.save.time < CLOCK_TIME(6, 0)) && (gSaveContext.save.time >= CLOCK_TIME(5, 15))) {
- gSaveContext.save.weekEventReg[22] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_22_01);
func_80B47064(this);
} else {
func_80B457A0(this);
@@ -2039,7 +2040,7 @@ void 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;
+ SET_WEEKEVENTREG(WEEKEVENTREG_89_10);
func_80B47304(this);
}
@@ -2297,7 +2298,7 @@ void func_80B47BAC(Actor* thisx, PlayState* play) {
func_80B47568(this);
}
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
}
@@ -2313,7 +2314,7 @@ void func_80B47D30(Actor* thisx, PlayState* play) {
thisx->gravity = 0.0f;
func_80B47830(this);
} else if ((this->actionFunc == func_80B474DC) || (this->actionFunc == func_80B473E4)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
} else if (this->collider.base.acFlags & AC_HIT) {
@@ -2376,7 +2377,7 @@ void func_80B48060(Actor* thisx, PlayState* play) {
MtxF unkMtx;
if (D_80B503F0 == NULL || this->actor.parent == NULL) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -2416,7 +2417,7 @@ void func_80B4827C(Actor* thisx, PlayState* play) {
EnInvadepoh* this = THIS;
if (D_80B503F0 == NULL || this->actor.parent == NULL) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -2534,7 +2535,7 @@ void func_80B4873C(Actor* thisx, PlayState* play) {
AlienBehaviorInfo* substruct = &this->behaviorInfo;
if (this->actor.parent == NULL) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
this->actionFunc(this, play);
@@ -2940,7 +2941,7 @@ void func_80B4994C(EnInvadepoh* this, PlayState* play) {
if (this->actionTimer > 0) {
this->actionTimer--;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -3015,7 +3016,7 @@ void func_80B49C38(EnInvadepoh* this, PlayState* play) {
if (this->unk378 == 0) {
temp_v0_2 = func_800FE620(play);
if (temp_v0_2 > 0) {
- temp_v0_2 = (REG(15) * -16.0f / temp_v0_2) - 0.5f;
+ temp_v0_2 = (R_TIME_SPEED * -16.0f / temp_v0_2) - 0.5f;
this->unk378 = func_80B45550(this, play, SQ(80.0f), temp_v0_2);
}
}
@@ -3030,7 +3031,7 @@ void func_80B49C38(EnInvadepoh* this, PlayState* play) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_ROMANI_WALK);
}
if (this->clockTime >= 0.9999f) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -3059,7 +3060,7 @@ void func_80B49DFC(EnInvadepoh* this, PlayState* play) {
substruct->unk26.y = CLAMP(temp_v1, -0x1F40, 0x1F40);
if (Actor_TextboxIsClosing(&this->actor, play)) {
if (this->actor.textId == 0x332D) {
- gSaveContext.save.weekEventReg[54] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_54_10);
this->actor.textId = 0x332E;
}
func_80B49BD0(this);
@@ -3084,8 +3085,8 @@ void func_80B49F88(Actor* thisx, PlayState* play) {
func_80B44C24(this, play);
func_80B43F0C(this);
func_80B4516C(this);
- if (0x20 & gSaveContext.save.weekEventReg[21]) {
- if (gSaveContext.save.weekEventReg[54] & 0x10) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_21_20)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_10)) {
this->actor.textId = 0x332E;
} else {
this->actor.textId = 0x332D;
@@ -3103,7 +3104,7 @@ void func_80B49F88(Actor* thisx, PlayState* play) {
this->actor.draw = func_80B4E324;
func_80B49BD0(this);
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
}
@@ -3286,7 +3287,7 @@ void func_80B4A81C(EnInvadepoh* this, PlayState* play) {
if (Actor_TextboxIsClosing(&this->actor, play)) {
if (this->actor.textId == 0x332D) {
- gSaveContext.save.weekEventReg[54] |= 0x10;
+ SET_WEEKEVENTREG(WEEKEVENTREG_54_10);
this->actor.textId = 0x332E;
}
if (this->pathIndex == this->endPoint) {
@@ -3325,8 +3326,8 @@ void func_80B4A9C8(Actor* thisx, PlayState* play) {
func_80B43F0C(this);
func_800B4AEC(play, &this->actor, 50.0f);
func_80B4516C(this);
- if (gSaveContext.save.weekEventReg[21] & 0x20) {
- if (gSaveContext.save.weekEventReg[54] & 0x10) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_21_20)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_10)) {
this->actor.textId = 0x332E;
} else {
this->actor.textId = 0x332D;
@@ -3374,7 +3375,7 @@ void func_80B4ACDC(EnInvadepoh* this) {
}
void func_80B4ACF0(EnInvadepoh* this, PlayState* play) {
- if (gSaveContext.save.weekEventReg[22] & 1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) {
this->actor.draw = func_80B4E324;
this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8);
func_80B4AD3C(this);
@@ -3402,7 +3403,7 @@ void func_80B4ADB8(EnInvadepoh* this) {
void func_80B4ADCC(EnInvadepoh* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
if (this->textId == 0x3331) {
- if (gSaveContext.save.weekEventReg[22] & 2) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_02)) {
EnInvadepoh_SetTextID(this, play, 0x3334);
func_80151BB4(play, 0x1D);
func_80151BB4(play, 5);
@@ -3434,7 +3435,7 @@ void func_80B4AEDC(EnInvadepoh* this, PlayState* play) {
}
if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL;
- gSaveContext.save.weekEventReg[22] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_22_02);
func_80B4AF80(this);
} else {
Actor_PickUp(&this->actor, play, GI_MILK_BOTTLE, 2000.0f, 2000.0f);
@@ -3453,7 +3454,7 @@ void func_80B4AF94(EnInvadepoh* this, PlayState* play) {
func_80151BB4(play, 5);
func_80B4ADB8(this);
} else {
- func_800B85E0(&this->actor, play, 2000.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 2000.0f, PLAYER_IA_MINUS1);
}
}
@@ -3654,7 +3655,7 @@ void func_80B4B8BC(Actor* thisx, PlayState* play) {
} else if (D_80B4E940 == 1) {
this->actor.update = func_80B4BA30;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
if (!this) {}
}
}
@@ -3788,7 +3789,7 @@ void func_80B4BC4C(EnInvadepoh* this, PlayState* play) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_ROMANI_WALK);
}
if (gSaveContext.save.time > CLOCK_TIME(20, 15)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else if ((temp_t6 != NULL) && (temp_t6->actionFunc == func_80B4CB0C)) {
func_80B4C1BC(this);
}
@@ -3892,7 +3893,7 @@ void func_80B4C3A0(Actor* thisx, PlayState* play) {
this->actor.draw = func_80B4E7BC;
func_80B4BBE0(this);
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
}
@@ -3967,7 +3968,7 @@ void func_80B4C730(EnInvadepoh* this, PlayState* play) {
if (this->unk378 == 0) {
temp_v0_2 = func_800FE620(play);
if (temp_v0_2 > 0) {
- temp_v0_2 = (REG(15) * -23.0f / temp_v0_2) - 0.5f;
+ temp_v0_2 = (R_TIME_SPEED * -23.0f / temp_v0_2) - 0.5f;
this->unk378 = func_80B45550(this, play, SQ(80.0f), temp_v0_2);
}
}
@@ -4003,7 +4004,7 @@ void func_80B4C730(EnInvadepoh* this, PlayState* play) {
}
if (this->clockTime >= 0.9999f) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -4101,7 +4102,7 @@ void func_80B4CE54(Actor* thisx, PlayState* play) {
this->actor.draw = func_80B4E324;
func_80B4C6C8(this);
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
}
@@ -4168,7 +4169,7 @@ void func_80B4D290(EnInvadepoh* this, PlayState* play) {
f32 sp28;
if (D_80B503F0 == NULL) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -4190,7 +4191,7 @@ void func_80B4D290(EnInvadepoh* this, PlayState* play) {
}
if (sp28 < 5.0f) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -4257,7 +4258,7 @@ void func_80B4D480(EnInvadepoh* this, PlayState* play) {
}
if ((this->actionTimer <= 0) || sp2C) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -4525,7 +4526,7 @@ void func_80B4E3F0(Actor* thisx, PlayState* play) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
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 (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/z_en_invadepoh.h b/src/overlays/actors/ovl_En_Invadepoh/z_en_invadepoh.h
index cafae5f23..061d9c326 100644
--- a/src/overlays/actors/ovl_En_Invadepoh/z_en_invadepoh.h
+++ b/src/overlays/actors/ovl_En_Invadepoh/z_en_invadepoh.h
@@ -152,6 +152,4 @@ typedef struct EnInvadepoh {
/* 0x3BC */ s8 unk3BC;
} EnInvadepoh; // size = 0x3C0
-extern const ActorInit En_Invadepoh_InitVars;
-
#endif // Z_EN_INVADEPOH_H
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..70f77b18a 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,
@@ -86,7 +86,7 @@ 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) {
@@ -100,7 +100,7 @@ void EnInvisibleRuppe_Init(Actor* thisx, PlayState* play) {
}
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..5b6f6ca64 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
@@ -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 57c18ad7b..f911bc4f4 100644
--- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c
+++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c
@@ -16,7 +16,7 @@
#define THIS ((EnIshi*)thisx)
void EnIshi_Init(Actor* thisx, PlayState* play);
-void EnIshi_Destroy(Actor* thisx, PlayState* play);
+void EnIshi_Destroy(Actor* thisx, PlayState* play2);
void EnIshi_Update(Actor* thisx, PlayState* play);
void func_8095D804(Actor* thisx, PlayState* play);
@@ -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,
@@ -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);
}
@@ -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;
}
@@ -604,7 +604,7 @@ void func_8095EBDC(EnIshi* this, PlayState* play) {
Rumble_Request(this->actor.xyzDistToPlayerSq, 255, 20, 150);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -682,9 +682,9 @@ void func_8095F180(EnIshi* this) {
void func_8095F194(EnIshi* this, PlayState* play) {
if (this->actor.cutscene < 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
} else if (ActorCutscene_GetCurrentIndex() != this->actor.cutscene) {
- Actor_MarkForDeath(&this->actor);
+ 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..39a28c4bd 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,7 +385,7 @@ 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);
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..03cc41f20 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,
@@ -94,7 +94,7 @@ s32 EnJcMato_CheckForHit(EnJcMato* this, PlayState* play) {
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;
+ 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..e7c2ad78d 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,
@@ -214,7 +214,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 RADF_TO_BINANG(Math_Atan2F_XY(diffZ, diffX));
}
s32 EnJg_ReachedPoint(EnJg* this, Path* path, s32 pointIndex) {
@@ -493,14 +493,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);
@@ -632,7 +632,7 @@ void EnJg_LullabyIntroCutsceneAction(EnJg* this, PlayState* play) {
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;
@@ -700,7 +700,7 @@ void EnJg_LullabyIntroCutsceneAction(EnJg* this, PlayState* play) {
} else {
this->csAction = 99;
this->freezeTimer = 1000;
- gSaveContext.save.weekEventReg[24] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_24_40);
this->actionFunc = EnJg_Idle;
}
}
@@ -830,7 +830,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 +848,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 +858,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 +868,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
}
@@ -908,9 +908,9 @@ void EnJg_CheckIfTalkingToPlayerAndHandleFreezeTimer(EnJg* this, PlayState* play
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);
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..757a8bd86 100644
--- a/src/overlays/actors/ovl_En_Jg/z_en_jg.h
+++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.h
@@ -40,6 +40,4 @@ typedef struct EnJg {
/* 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..92e918c5d 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,7 +189,7 @@ 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) &&
+ if ((player->actor.bgCheckFlags & 1) && !(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);
@@ -282,11 +282,11 @@ void func_80C14044(EnJgameTsn* this, PlayState* play) {
void func_80C1410C(EnJgameTsn* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- player->stateFlags1 |= 0x20;
+ player->stateFlags1 |= PLAYER_STATE1_20;
func_801A2BB8(0x25);
- play->interfaceCtx.unk_280 = 1;
- func_80112AFC(play);
- gSaveContext.save.weekEventReg[90] |= 0x20;
+ 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 +294,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;
}
}
@@ -338,7 +338,7 @@ void func_80C14230(EnJgameTsn* this, PlayState* play) {
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();
func_80C14030(this);
@@ -346,7 +346,7 @@ void func_80C14230(EnJgameTsn* this, PlayState* play) {
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();
func_80C14030(this);
@@ -355,7 +355,7 @@ void func_80C14230(EnJgameTsn* this, PlayState* play) {
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();
func_80C14030(this);
@@ -379,11 +379,11 @@ 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) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_82_10)) {
Actor_PickUp(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f);
} else {
Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f);
@@ -478,9 +478,9 @@ void func_80C147B4(EnJgameTsn* this, PlayState* play) {
case 0x10A0:
case 0x10A1:
func_801477B4(play);
- gSaveContext.minigameState = 3;
+ 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;
@@ -563,14 +563,14 @@ s32 func_80C14BCC(EnJgameTsn* this, PlayState* play) {
if (phi_s3 == this->unk_218) {
Actor_PlaySfxAtPos(&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);
*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);
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..d36bbb6c3 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,
};
@@ -112,9 +112,9 @@ void EnJs_Init(Actor* thisx, PlayState* play) {
Animation_PlayLoop(&this->skelAnime, &gMoonChildSittingAnim);
func_8016566C(0x3C);
- 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;
@@ -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;
}
}
}
@@ -529,34 +529,36 @@ 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) {
+ if (itemAction > PLAYER_IA_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_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) {
+
+ if (itemAction <= PLAYER_IA_MINUS1) {
func_80151938(play, 0x2216);
}
}
@@ -606,7 +608,7 @@ void func_80969898(EnJs* this, PlayState* play) {
case 0x2210:
case 0x2211:
case 0x2212:
- player->exchangeItemId = PLAYER_AP_NONE;
+ player->exchangeItemId = PLAYER_IA_NONE;
func_80151938(play, 0xFF);
this->actionFunc = func_80969748;
break;
@@ -675,34 +677,37 @@ 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) {
+
+ if (itemAction > PLAYER_IA_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_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) {
+
+ if (itemAction <= PLAYER_IA_MINUS1) {
func_80151938(play, 0x221E);
}
}
@@ -760,7 +765,7 @@ void func_80969DA4(EnJs* this, PlayState* play) {
}
break;
case 0x2222:
- player->exchangeItemId = PLAYER_AP_NONE;
+ player->exchangeItemId = PLAYER_IA_NONE;
func_80151938(play, play->msgCtx.currentTextId + 1);
break;
case 0x2223:
@@ -786,7 +791,7 @@ void func_80969DA4(EnJs* this, PlayState* play) {
case 0x221D:
case 0x2220:
case 0x2221:
- player->exchangeItemId = PLAYER_AP_NONE;
+ player->exchangeItemId = PLAYER_IA_NONE;
func_80151938(play, 0xFF);
this->actionFunc = func_80969C54;
break;
@@ -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,7 +870,7 @@ 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);
}
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..4508e4944 100644
--- a/src/overlays/actors/ovl_En_Js/z_en_js.h
+++ b/src/overlays/actors/ovl_En_Js/z_en_js.h
@@ -29,6 +29,4 @@ typedef struct EnJs {
/* 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..da327642b 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,2001 @@ 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_8000000;
+ 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->unk_2D6 = this->picto.actor.cutscene;
+ 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 & 8) && (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 & 8) && (sp32 < 0x2EE0)) || (explosiveActor->id == ACTOR_EN_BOM_CHU)) {
+ if ((explosiveActor->id == ACTOR_EN_BOM_CHU) &&
+ (Actor_DistanceBetweenActors(&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, PICTOGRAPH_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, PICTOGRAPH_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 (!ActorCutscene_GetCanPlayNext(this->unk_2D6)) {
+ ActorCutscene_SetIntentToPlay(this->unk_2D6);
+ return;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kaizoku/func_80B88278.s")
+ ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D6, &this->picto.actor);
+ func_800B7298(play, &this->picto.actor, 0x15);
+ this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene);
+ 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.speedXZ = 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;
+ func_801A0238(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)) {
+ func_801477B4(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 & 1) {
+ 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_PlaySfxAtPos(&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)) {
+ func_801477B4(play);
+ this->unk_598 = 0;
+ this->unk_59C++;
+ func_801A0238(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_PlaySfxAtPos(&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);
+ ActorCutscene_Stop(this->unk_2D6);
+ this->unk_59C = 0;
+ this->subCamId = 0;
+ this->picto.actor.flags &= ~ACTOR_FLAG_100000;
+ this->picto.actor.flags &= ~ACTOR_FLAG_8000000;
+ 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 (!ActorCutscene_GetCanPlayNext(this->unk_2D6)) {
+ ActorCutscene_SetIntentToPlay(this->unk_2D6);
+ return;
+ }
+ ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D6, &this->picto.actor);
+ }
+
+ func_800B7298(play, &this->picto.actor, 0x60);
+ this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene);
+ 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.speedXZ = 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_PlaySfxAtPos(&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)) {
+ func_801477B4(play);
+ func_800B7298(play, &this->picto.actor, 6);
+ ActorCutscene_Stop(this->unk_2D6);
+ 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_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_PIRATE_DAMM_BREATH);
+ this->unk_2D9 = 1;
+ } else {
+ Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_PIRATE_BREATH);
+ }
+ }
+
+ if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
+ func_801477B4(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_PlaySfxAtPos(&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);
+ ActorCutscene_Stop(this->unk_2D6);
+ 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.speedXZ = 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.speedXZ = -10.0f;
+ } else if (Math_SinS(player->actor.shape.rot.y - this->picto.actor.shape.rot.y) < 0.0f) {
+ this->picto.actor.speedXZ = 10.0f;
+ } else if (Rand_ZeroOne() > 0.5f) {
+ this->picto.actor.speedXZ = 10.0f;
+ } else {
+ this->picto.actor.speedXZ = -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 & 8) ||
+ !Actor_TestFloorInDirection(&this->picto.actor, play, this->picto.actor.speedXZ,
+ this->picto.actor.shape.rot.y + 0x4000)) {
+ if (this->picto.actor.bgCheckFlags & 8) {
+ if (this->picto.actor.speedXZ >= 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.speedXZ *= -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_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_GERUDOFT_WALK);
+ }
+
+ if (!(play->gameplayFrames & 0x5F)) {
+ Actor_PlaySfxAtPos(&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.speedXZ >= 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.speedXZ = 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.speedXZ = 6.5f;
+ this->picto.actor.velocity.y = 15.0f;
+ Actor_PlaySfxAtPos(&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 & 3)) {
+ 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.speedXZ = 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.speedXZ = -8.0f;
+ Actor_PlaySfxAtPos(&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_PlaySfxAtPos(&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.speedXZ = 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.speedXZ = 0.0f;
+
+ if (Animation_OnFrame(&this->skelAnime, 1.0f)) {
+ Actor_PlaySfxAtPos(&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.speedXZ = 10.0f;
+ this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y = this->picto.actor.yawTowardsPlayer;
+ Actor_PlaySfxAtPos(&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.speedXZ = 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_PlaySfxAtPos(&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.speedXZ, -8.0f, 1.0f, 1.5f);
+ } else if (this->picto.actor.xzDistToPlayer > 55.0f) {
+ Math_ApproachF(&this->picto.actor.speedXZ, 8.0f, 1.0f, 1.5f);
+ } else {
+ Math_ApproachZeroF(&this->picto.actor.speedXZ, 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_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_PIRATE_BREATH);
+ }
+
+ if ((this->skelAnime.curFrame != 0.0f) && ((sp30 < 0 && sp2C > 0) || (sp30 < 4 && sp2C >= 5))) {
+ Actor_PlaySfxAtPos(&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_PlaySfxAtPos(&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.speedXZ = 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.speedXZ = 10.0f;
+ Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_PIRATE_ATTACK);
+ } else if (Animation_OnFrame(&this->skelAnime, 21.0f)) {
+ this->picto.actor.speedXZ = 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.speedXZ = 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.speedXZ -= 0.25f;
+ if (this->picto.actor.speedXZ < -8.0f) {
+ this->picto.actor.speedXZ = -8.0f;
+ }
+ } else if (Math_SinS((sp2A - this->picto.actor.shape.rot.y)) < 0.0f) {
+ this->picto.actor.speedXZ += 0.25f;
+ if (this->picto.actor.speedXZ > 8.0f) {
+ this->picto.actor.speedXZ = 8.0f;
+ }
+ }
+
+ if ((this->picto.actor.bgCheckFlags & 8) ||
+ !Actor_TestFloorInDirection(&this->picto.actor, play, this->picto.actor.speedXZ,
+ this->picto.actor.shape.rot.y + 0x4000)) {
+
+ if (this->picto.actor.bgCheckFlags & 8) {
+ if (this->picto.actor.speedXZ >= 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.speedXZ *= -0.8f;
+ yaw = 0;
+ }
+
+ if (ABS_ALT(yaw) > 0x4000) {
+ this->picto.actor.speedXZ *= -0.8f;
+ if (this->picto.actor.speedXZ < 0.0f) {
+ this->picto.actor.speedXZ -= 0.5f;
+ } else {
+ this->picto.actor.speedXZ += 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_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_GERUDOFT_WALK);
+ }
+ }
+
+ if (!(play->gameplayFrames & 0x5F)) {
+ Actor_PlaySfxAtPos(&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 & 1) {
+ this->picto.actor.speedXZ = 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_PlaySfxAtPos(&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 & 2) {
+ this->picto.actor.speedXZ = 0.0f;
+ }
+
+ if (this->picto.actor.bgCheckFlags & 1) {
+ if (this->picto.actor.speedXZ < 0.0f) {
+ this->picto.actor.speedXZ += 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 & 1)) {
+ 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.speedXZ = 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_PlaySfxAtPos(&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 & 8) {
+ 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.speedXZ = 0.0f;
+ this->unk_2D8 = 1;
+ func_800B7298(play, &this->picto.actor, 0x7B);
+ Enemy_StartFinishingBlow(play, &this->picto.actor);
+ Actor_PlaySfxAtPos(&this->picto.actor, NA_SE_EN_PIRATE_DEAD);
+ this->picto.actor.flags |= ACTOR_FLAG_8000000;
+ 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 & 2) {
+ this->picto.actor.speedXZ = 0.0f;
+ }
+
+ if (this->picto.actor.bgCheckFlags & 1) {
+ Math_SmoothStepToF(&this->picto.actor.speedXZ, 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 (!ActorCutscene_GetCanPlayNext(this->unk_2D6)) {
+ ActorCutscene_SetIntentToPlay(this->unk_2D6);
+ return;
+ }
+ ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D6, &this->picto.actor);
+ this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene);
+ }
+
+ 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_PlaySfxAtPos(&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.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.playerData.health <= 0x10) && (this->action != KAIZOKU_ACTION_16)) {
+ this->unk_2D0 = 2;
+ this->subCamId = 0;
+ this->picto.actor.flags |= ACTOR_FLAG_100000;
+
+ if (!ActorCutscene_GetCanPlayNext(this->unk_2D6)) {
+ ActorCutscene_SetIntentToPlay(this->unk_2D6);
+ this->actionFunc = func_80B86804;
+ } else {
+ ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D6, &this->picto.actor);
+ this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene);
+ 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.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 (!ActorCutscene_GetCanPlayNext(this->unk_2D6)) {
+ ActorCutscene_SetIntentToPlay(this->unk_2D6);
+ this->actionFunc = func_80B86804;
+ } else {
+ ActorCutscene_StartAndSetUnkLinkFields(this->unk_2D6, &this->picto.actor);
+ this->subCamId = ActorCutscene_GetCurrentSubCamId(this->picto.actor.cutscene);
+ 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 & 8) && (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, 0, 120, 0, 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, 0x4000, 255, 0, 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_PlaySfxAtPos(&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 & 1) {
+ 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, 0x1F);
+ 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..ad161088e 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 unk_2D6;
+ /* 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..0346749a9 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,
@@ -177,14 +177,14 @@ void EnKakasi_Init(Actor* thisx, PlayState* play) {
}
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);
@@ -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,7 +409,7 @@ 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;
}
@@ -418,7 +418,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* 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_6);
}
// after timeskip
@@ -445,7 +445,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) {
} 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);
+ func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_4);
if (ActorCutscene_GetCurrentIndex() == 0x7C) {
ActorCutscene_Stop(0x7C);
ActorCutscene_SetIntentToPlay(this->actorCutscenes[0]);
@@ -675,7 +675,7 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) {
if (this->unk190 == 0) {
func_801477B4(play);
- func_800B7298(play, &this->picto.actor, 0x56);
+ 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;
@@ -711,7 +711,7 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) {
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);
+ func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_86);
this->unkState1A8 = 1;
}
@@ -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_7);
this->picto.actor.textId = 0x1649;
if (this->animIndex != ENKAKASI_ANIM_ARMS_CROSSED_ROCKING) {
EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_ARMS_CROSSED_ROCKING);
@@ -916,7 +916,7 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) {
this->unk190++;
this->unk204 = 0xA;
if (this->unk190 == 0xE) {
- func_800B7298(play, &this->picto.actor, 0x49);
+ func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_73);
func_80165690();
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);
+ //! FAKE
if (0) {}
+
if (gSaveContext.save.time > CLOCK_TIME(18, 0) || gSaveContext.save.time < CLOCK_TIME(6, 0)) {
gSaveContext.save.time = CLOCK_TIME(6, 0);
gSaveContext.respawnFlag = -4;
- 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;
}
@@ -1011,8 +1013,8 @@ void EnKakasi_DiggingAway(EnKakasi* this, PlayState* play) {
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);
+ SET_WEEKEVENTREG(WEEKEVENTREG_79_08);
+ func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_6);
ActorCutscene_Stop(this->actorCutscenes[0]);
this->aboveGroundStatus = ENKAKASI_ABOVE_GROUND_TYPE;
this->songSummonDist = 80.0f;
@@ -1029,7 +1031,7 @@ void EnKakasi_SetupIdleUnderground(EnKakasi* this) {
}
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;
play->msgCtx.ocarinaMode = 4;
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..c278ef050 100644
--- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.h
+++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.h
@@ -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..6e021186f 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,
@@ -197,7 +197,7 @@ void func_80AD70EC(EnKame* this, PlayState* play) {
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)) {
@@ -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;
@@ -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 {
@@ -600,7 +600,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;
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..54df1bcd7 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,
@@ -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;
}
@@ -673,7 +673,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;
@@ -852,7 +852,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 +876,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 46a1adfd5..46ad2c30b 100644
--- a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c
+++ b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c
@@ -15,7 +15,7 @@
void EnKarebaba_Init(Actor* thisx, PlayState* play);
void EnKarebaba_Destroy(Actor* thisx, PlayState* play);
-void EnKarebaba_Update(Actor* thisx, PlayState* play);
+void EnKarebaba_Update(Actor* thisx, PlayState* play2);
void EnKarebaba_Draw(Actor* thisx, PlayState* play);
void func_808F155C(EnKarebaba* this);
@@ -40,7 +40,7 @@ void func_808F238C(EnKarebaba* this);
void func_808F241C(EnKarebaba* this, PlayState* play);
void func_808F254C(EnKarebaba* this, PlayState* play);
-const ActorInit En_Karebaba_InitVars = {
+ActorInit En_Karebaba_InitVars = {
ACTOR_EN_KAREBABA,
ACTORCAT_ENEMY,
FLAGS,
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..5063a8dbe 100644
--- a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.h
+++ b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.h
@@ -30,6 +30,4 @@ typedef struct EnKarebaba {
/* 0x27C */ ColliderCylinder collider2;
} 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..d2847a39d 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,
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..c02b00b5a 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
@@ -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,12 +117,12 @@ 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);
@@ -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) {
@@ -281,7 +281,7 @@ void func_80B269A4(EnKendoJs* this, PlayState* play) {
case 0x2719:
func_801477B4(play);
- player->stateFlags1 |= 0x20;
+ player->stateFlags1 |= PLAYER_STATE1_20;
func_80B2701C(this);
break;
@@ -297,14 +297,14 @@ void func_80B269A4(EnKendoJs* this, PlayState* play) {
case 0x273B:
func_801477B4(play);
- func_80112AFC(play);
- player->stateFlags1 |= 0x20;
+ Interface_InitMinigame(play);
+ player->stateFlags1 |= PLAYER_STATE1_20;
func_80B273D0(this);
break;
case 0x272D:
func_801477B4(play);
- gSaveContext.minigameState = 3;
+ gSaveContext.minigameStatus = MINIGAME_STATUS_END;
func_80B276C4(this);
func_80B276D8(this, play);
break;
@@ -334,10 +334,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 +358,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 +379,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 +393,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 +407,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 +420,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 +434,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;
}
@@ -488,7 +492,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 +504,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;
@@ -520,7 +524,7 @@ void func_80B27188(EnKendoJs* this, PlayState* play) {
}
this->unk_286 = 2;
func_801477B4(play);
- player->stateFlags1 &= ~0x20;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
}
} else if (this->unk_286 == 2) {
this->unk_286 = 1;
@@ -531,14 +535,14 @@ void func_80B27188(EnKendoJs* this, PlayState* play) {
case 0:
this->unk_286 = 0;
Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
- player->stateFlags1 |= 0x20;
+ player->stateFlags1 |= PLAYER_STATE1_20;
func_80B26EB4(this, play);
break;
case 1:
Actor_PlaySfxAtPos(&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 +565,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 +587,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 +604,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,14 +625,14 @@ 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);
this->unk_28E = 0;
@@ -644,7 +648,7 @@ 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)) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_63_20)) {
Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 800.0f, 100.0f);
} else {
Actor_PickUp(&this->actor, play, GI_RUPEE_RED, 800.0f, 100.0f);
@@ -659,8 +663,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,7 +672,7 @@ 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);
}
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..f188e1df0 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,
@@ -58,10 +58,10 @@ 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_33_80)) {
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 +78,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);
@@ -496,7 +496,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 +518,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) {
+ if (itemAction > PLAYER_IA_NONE) {
func_801477B4(play);
- if (itemActionParam == PLAYER_AP_BOTTLE_GOLD_DUST) {
+ if (itemAction == PLAYER_IA_BOTTLE_GOLD_DUST) {
if (this->unk_29C & 0x10) {
this->actor.textId = 0xC55;
player->actor.textId = 0xC55;
@@ -547,7 +547,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 +564,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;
}
}
@@ -586,7 +586,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,7 +595,7 @@ 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);
}
@@ -743,8 +743,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);
+ player->exchangeItemId = PLAYER_IA_NONE;
this->unk_29C &= ~0x8;
play->msgCtx.msgLength = 0;
func_80B41368(this, play, 4);
@@ -759,7 +759,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);
@@ -831,7 +831,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);
@@ -870,7 +870,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) {
@@ -948,7 +948,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);
}
}
@@ -1054,7 +1054,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 +1062,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;
@@ -1149,10 +1149,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..d9423783d 100644
--- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h
+++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h
@@ -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..511a5dc46 100644
--- a/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c
+++ b/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c
@@ -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,
@@ -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;
}
}
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 9d0c41295..eaf5ea96a 100644
--- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c
+++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c
@@ -15,7 +15,7 @@
void EnKusa_Init(Actor* thisx, PlayState* play);
void EnKusa_Destroy(Actor* thisx, PlayState* play);
-void EnKusa_Update(Actor* thisx, PlayState* play);
+void EnKusa_Update(Actor* thisx, PlayState* play2);
s32 EnKusa_SnapToFloor(EnKusa* this, PlayState* play, f32 yOffset);
void EnKusa_DropCollectible(EnKusa* this, PlayState* play);
@@ -57,7 +57,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,
@@ -385,7 +385,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 +394,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 +470,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;
@@ -560,7 +560,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:
@@ -699,7 +699,7 @@ void EnKusa_DrawBush(Actor* thisx, PlayState* play2) {
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 +711,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);
}
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..626ab3f3b 100644
--- a/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c
+++ b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c
@@ -44,16 +44,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 +85,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;
@@ -136,7 +136,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;
}
@@ -379,7 +379,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;
@@ -878,18 +878,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);
}
}
@@ -1096,7 +1097,7 @@ void func_80A5DC98(EnKusa2* this, PlayState* play) {
} else if (this->unk_1CA > 0) {
this->unk_1CA--;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
}
@@ -1241,7 +1242,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);
}
}
@@ -1273,7 +1274,7 @@ void func_80A5E4BC(EnKusa2* this, PlayState* play) {
this->unk_1CF -= 15;
if (this->unk_1CF <= 15) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -1342,7 +1343,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);
}
@@ -1355,7 +1356,7 @@ void EnKusa2_Draw(Actor* thisx, PlayState* play) {
(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 +1370,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..f6647cc0b 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, 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_PlaySfxAtPos(&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_PlaySfxAtPos(&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.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.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:
+ func_801477B4(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:
+ func_801477B4(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:
+ func_801477B4(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:
+ func_801477B4(play);
+ func_80AEB584(this);
+ func_80AEB598(this, play);
+ break;
+
+ case 0x27F5:
+ func_801477B4(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_PlaySfxAtPos(&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.speedXZ = 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.speedXZ);
+ 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) {
+ func_801A2BB8(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.speedXZ = 2.0f;
+ gSaveContext.eventInf[3] |= 0x10;
+ Interface_StartTimer(4, 0);
+ func_80AE9B4C(1, 2);
+ Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_FOUND);
+ func_80AEB280(this);
+ }
+}
+
+void func_80AEB1C8(EnLiftNuts* this) {
+ this->actor.speedXZ = 2.0f;
+ gSaveContext.eventInf[3] |= 0x10;
+ 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 & 1) && (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.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.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) {
+ gSaveContext.eventInf[3] &= (u8)~0x10;
+ 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_02;
+ }
+ 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_PickUp(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f);
+ } else {
+ Actor_PickUp(&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, -1);
+ }
+}
+
+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, 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..b988fcce3 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,
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..ac376bb16 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,
@@ -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;
}
@@ -300,7 +300,7 @@ void EnLookNuts_SendPlayerToSpawn(EnLookNuts* this, PlayState* play) {
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 fbfb17040..3d97839a0 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
@@ -16,7 +16,7 @@
void EnMThunder_Init(Actor* thisx, PlayState* play);
void EnMThunder_Destroy(Actor* thisx, PlayState* play);
void EnMThunder_Update(Actor* thisx, PlayState* play);
-void EnMThunder_Draw(Actor* thisx, PlayState* play);
+void EnMThunder_Draw(Actor* thisx, PlayState* play2);
void EnMThunder_UnkType_Update(Actor* thisx, PlayState* play);
@@ -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,
@@ -136,14 +136,14 @@ void EnMThunder_Init(Actor* thisx, PlayState* play) {
&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..93f33cfed 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,
@@ -200,7 +200,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 +238,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
@@ -347,7 +347,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 +372,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 +388,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 {
@@ -596,14 +596,14 @@ void EnMa4_ChooseNextDialogue(EnMa4* this, PlayState* play) {
this->textId = 0x334C;
} else {
func_801477B4(play);
- player->stateFlags1 |= 0x20;
+ 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);
@@ -688,20 +688,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 +709,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,7 +726,7 @@ 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);
@@ -736,7 +736,7 @@ 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 {
@@ -827,8 +827,8 @@ void EnMa4_EponasSongCs(EnMa4* this, PlayState* play) {
} else {
Player* player = GET_PLAYER(play);
- player->stateFlags1 |= 0x20;
- func_800B85E0(&this->actor, play, 200.0f, PLAYER_AP_MINUS1);
+ player->stateFlags1 |= PLAYER_STATE1_20;
+ func_800B85E0(&this->actor, play, 200.0f, PLAYER_IA_MINUS1);
D_80AC0260 = 99;
this->hasBow = true;
EnMa4_SetupEndEponasSongCs(this);
@@ -844,13 +844,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);
}
}
@@ -873,7 +873,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 +881,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 +895,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)) {
@@ -929,7 +929,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 +937,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);
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..3ac405b00 100644
--- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.h
+++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.h
@@ -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..c9ba0f34d 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;
}
@@ -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);
@@ -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);
}
}
@@ -1046,8 +1040,7 @@ void EnMaYto_WarmFuzzyFeelingCs(EnMaYto* this, PlayState* play) {
break;
case 2:
- // Attempted Cremia Cart Ride
- gSaveContext.save.weekEventReg[14] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_14_01);
EnMaYto_ChangeAnim(this, 18);
break;
@@ -1075,7 +1068,7 @@ 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_800B7298(play, &this->actor, PLAYER_CSMODE_7);
func_801477B4(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);
@@ -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;
}
}
@@ -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..0955cd8e8 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
@@ -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..64a6d138c 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,
@@ -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);
@@ -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;
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..eb700d8c2 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
@@ -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..3a72258cc 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,
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..65e3d8b38 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);
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..f459a6a41 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;
@@ -112,24 +106,23 @@ void EnMinifrog_Init(Actor* thisx, PlayState* play) {
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; // "Ah! Don Gero! It has been so long."
+ 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;
@@ -270,16 +262,14 @@ void EnMinifrog_ReturnFrogCutscene(EnMinifrog* this, PlayState* play) {
func_80151938(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
+ case 0xD82: // "What has brought you all this way?"
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) {
func_80151938(play, 0xD83); // "Could it be... Has spring finally come to the mountains?"
} else {
func_80151938(play, 0xD86); // "Could it be... You came all this way looking for me?"
}
- 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."
@@ -293,7 +283,7 @@ void EnMinifrog_ReturnFrogCutscene(EnMinifrog* this, PlayState* play) {
}
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
}
@@ -475,7 +465,7 @@ void EnMinifrog_EndChoir(EnMinifrog* this, PlayState* play) {
Message_StartTextbox(play, 0xD7E, &this->actor); // "Let us do it again sometime."
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,7 +476,7 @@ 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);
}
@@ -520,7 +510,7 @@ void EnMinifrog_YellowFrogDialog(EnMinifrog* this, PlayState* play) {
// you've lost a little weight..."
func_80151938(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
@@ -534,11 +524,11 @@ void EnMinifrog_YellowFrogDialog(EnMinifrog* this, PlayState* play) {
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
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_35_80)) { // Obtained Heart Piece
func_80151938(play, 0xD7E);
} else {
func_80151938(play, 0xD7D); // Get Heart Piece
- gSaveContext.save.weekEventReg[35] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_35_80);
}
break;
case 0xD7D: // "This is how deeply we were moved by your spectacular conducting..."
@@ -567,7 +557,7 @@ 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
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_34_01)) {
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..."
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..1ab5f2cc6 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,
@@ -621,7 +621,7 @@ 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) {
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..894d73a6f 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,
@@ -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_55_80)) {
textId = 0xFBC;
} else {
textId = 0xFBB;
@@ -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_55_80)) {
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_55_80)) {
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_55_80)) {
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;
@@ -283,12 +283,12 @@ void func_80959A24(EnMk* this, PlayState* play) {
break;
case 0xFA2:
- if (gSaveContext.save.weekEventReg[55] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) {
func_801477B4(play);
this->actionFunc = func_80959E18;
- break;
+ } else {
+ func_80151938(play, play->msgCtx.currentTextId + 1);
}
- func_80151938(play, play->msgCtx.currentTextId + 1);
break;
case 0xFA5:
@@ -308,30 +308,30 @@ void func_80959A24(EnMk* this, PlayState* play) {
break;
case 0xFA0:
- gSaveContext.save.weekEventReg[19] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_19_04);
func_80151938(play, 0xFA1);
break;
case 0xFA8:
- gSaveContext.save.weekEventReg[19] |= 8;
- if (gSaveContext.save.weekEventReg[55] & 0x80) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_19_08);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) {
func_80151938(play, 0xFBD);
- break;
+ } else {
+ func_80151938(play, 0xFA9);
}
- func_80151938(play, 0xFA9);
break;
case 0xFAC:
- gSaveContext.save.weekEventReg[19] |= 0x10;
- if (gSaveContext.save.weekEventReg[55] & 0x80) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_19_10);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) {
func_80151938(play, 0xFBE);
- break;
+ } else {
+ func_80151938(play, 0xFAD);
}
- func_80151938(play, 0xFAD);
break;
case 0xFB1:
- gSaveContext.save.weekEventReg[19] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_19_20);
func_801477B4(play);
this->actionFunc = func_80959E18;
break;
@@ -365,7 +365,7 @@ 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);
}
}
@@ -373,7 +373,7 @@ 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 (CHECK_WEEKEVENTREG(WEEKEVENTREG_20_40)) {
this->unk_27A &= ~1;
this->actionFunc = func_80959774;
this->actor.home.rot.y += 0x4E20;
@@ -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;
@@ -413,7 +413,7 @@ void func_80959E18(EnMk* this, PlayState* play) {
this->actionFunc = func_80959D28;
if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) {
this->actor.cutscene = this->unk_276[0];
- gSaveContext.save.weekEventReg[20] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_20_40);
Item_Give(play, ITEM_SONG_NOVA);
} else {
this->actor.cutscene = this->unk_276[1];
@@ -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 {
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..bbf126f4e 100644
--- a/src/overlays/actors/ovl_En_Mk/z_en_mk.h
+++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.h
@@ -21,6 +21,4 @@ typedef struct EnMk {
/* 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..cbbaffca9 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,
@@ -487,7 +487,7 @@ void func_80A4EF74(EnMkk* this, PlayState* play) {
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..d9b0bf507 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);
@@ -114,8 +114,8 @@ void func_80965D3C(EnMm* this, PlayState* play) {
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;
@@ -143,15 +143,15 @@ void func_80965DB4(EnMm* this, PlayState* play) {
} 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;
+ 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);
+ this->actor.world.rot.y = Math_Atan2S_XY(temp_f12, temp_f14);
}
if (!Math_StepToF(&this->actor.speedXZ, 0.0f, 1.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..14c8d1170 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,
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..3e58691cc 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,
@@ -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_63_01);
Collider_DestroyCylinder(play, &this->collider);
}
@@ -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_63_02)) {
Message_StartTextbox(play, 0x279B, &this->actor);
this->unk_2B4 = 0x279B;
func_80151BB4(play, 0xB);
@@ -341,7 +341,7 @@ 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 {
@@ -351,8 +351,8 @@ void func_80A6F9DC(EnMm3* this, PlayState* 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_63_01);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02);
func_80A6F270(this);
}
}
@@ -374,8 +374,8 @@ 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;
+ SET_WEEKEVENTREG(WEEKEVENTREG_63_01);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02);
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);
@@ -425,12 +425,12 @@ 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) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_77_01)) {
Actor_PickUp(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f);
} else {
Actor_PickUp(&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);
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..6aac1355d 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,
@@ -149,7 +149,7 @@ 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);
@@ -161,7 +161,7 @@ void EnMs_TalkAfterPurchase(EnMs* this, PlayState* play) {
func_80151938(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..a077ee1bf 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;
@@ -234,7 +234,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_33_80)) {
// Spring
gSaveContext.nextCutsceneIndex = 0xFFF0;
} else {
@@ -255,7 +255,7 @@ 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);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_7);
Audio_QueueSeqCmd(0x101400FF);
this->actionFunc = EnMttag_PotentiallyRestartRace;
}
@@ -266,7 +266,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_7);
this->actionFunc = EnMttag_HandleCantWinChoice;
}
@@ -288,7 +288,7 @@ void EnMttag_ShowIntroCutscene(EnMttag* this, PlayState* play) {
*/
void EnMttag_WaitForIntroCutsceneToEnd(EnMttag* this, PlayState* play) {
if (ActorCutscene_GetCurrentIndex() != this->actor.cutscene) {
- gSaveContext.save.weekEventReg[12] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_12_02);
this->actionFunc = EnMttag_RaceStart;
}
}
@@ -311,17 +311,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;
+ play->interfaceCtx.minigameState = MINIGAME_STATE_COUNTDOWN_SETUP_3;
Audio_QueueSeqCmd(NA_BGM_GORON_RACE | 0x8000);
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;
}
}
@@ -363,14 +363,14 @@ void EnMttag_Race(EnMttag* this, PlayState* play) {
play_sound(NA_SE_SY_START_SHOT);
Audio_QueueSeqCmd(NA_BGM_GORON_GOAL | 0x8000);
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);
this->timer = 55;
- gSaveContext.eventInf[1] |= 4;
+ SET_EVENTINF(EVENTINF_12);
this->actionFunc = EnMttag_RaceFinish;
} else {
playerCheatStatus = EnMttag_CheckPlayerCheatStatus(playerPos);
@@ -382,10 +382,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,7 +396,7 @@ 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);
} else {
@@ -404,7 +404,7 @@ void EnMttag_RaceFinish(EnMttag* this, PlayState* play) {
EnMttag_ExitRace(play, TRANS_TYPE_02, TRANS_TYPE_02);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -420,7 +420,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_33_80)) {
// Spring
gSaveContext.nextCutsceneIndex = 0xFFF0;
} else {
@@ -432,18 +432,18 @@ void EnMttag_PotentiallyRestartRace(EnMttag* this, PlayState* play) {
play->transitionType = TRANS_TYPE_02;
gSaveContext.nextTransitionType = TRANS_TYPE_02;
func_801477B4(play);
- func_800B7298(play, &this->actor, 7);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_7);
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);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -458,18 +458,19 @@ void EnMttag_HandleCantWinChoice(EnMttag* this, PlayState* play) {
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;
+ CLEAR_EVENTINF(EVENTINF_13);
+ SET_EVENTINF(EVENTINF_12);
+ Actor_Kill(&this->actor);
+ return;
}
+
+ // Keep racing
+ func_8019F208();
+ func_801477B4(play);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_6);
+ CLEAR_EVENTINF(EVENTINF_13);
+ this->timer = 100;
+ this->actionFunc = EnMttag_Race;
}
}
@@ -479,16 +480,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 +497,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..c10244e55 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,
@@ -658,7 +658,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);
}
@@ -816,8 +816,11 @@ 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 & 0x20) {
func_80A6AAA4(this);
} else if (this->actor.bgCheckFlags & 1) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_GERUDOFT_WALK);
@@ -1038,7 +1041,7 @@ void func_80A6AE7C(EnMushi2* this, PlayState* play) {
}
if (this->unk_368 <= 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -1105,7 +1108,7 @@ void func_80A6B0D8(EnMushi2* this, PlayState* play) {
func_80A6A094(this);
func_80A6A0D8(this);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -1123,7 +1126,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;
}
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 69861434b..f9d17ca96 100644
--- a/src/overlays/actors/ovl_En_Muto/z_en_muto.c
+++ b/src/overlays/actors/ovl_En_Muto/z_en_muto.c
@@ -13,7 +13,7 @@
void EnMuto_Init(Actor* thisx, PlayState* play);
void EnMuto_Destroy(Actor* thisx, PlayState* play);
-void EnMuto_Update(Actor* thisx, PlayState* play);
+void EnMuto_Update(Actor* thisx, PlayState* play2);
void EnMuto_Draw(Actor* thisx, PlayState* play);
void EnMuto_ChangeAnim(EnMuto* this, s32 animIndex);
@@ -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) {
@@ -202,10 +202,10 @@ void EnMuto_InDialogue(EnMuto* this, PlayState* play) {
func_801477B4(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;
}
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..385325080 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 index) {
+ s32 ret = false;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BC0978.s")
+ if (ActorCutscene_GetCurrentIndex() == 0x7C) {
+ ActorCutscene_Stop(0x7C);
+ ActorCutscene_SetIntentToPlay(index);
+ } else if (ActorCutscene_GetCanPlayNext(index)) {
+ ActorCutscene_StartAndSetUnkLinkFields(index, &this->actor);
+ ret = true;
+ } else {
+ ActorCutscene_SetIntentToPlay(index);
+ }
-#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 arg1) {
+ s16 cutscene = this->actor.cutscene;
+ s32 i;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BC0C0C.s")
+ for (i = 0; i < arg1; i++) {
+ cutscene = ActorCutscene_GetAdditionalCutscene(cutscene);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nb/func_80BC0C80.s")
+ return cutscene;
+}
-#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 cutscene = 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, cutscene)) {
+ break;
+ }
+ // fallthrough
+ case ENNB_BEHAVIOUR_2:
+ case ENNB_BEHAVIOUR_4:
+ case ENNB_BEHAVIOUR_6:
+ case ENNB_BEHAVIOUR_8:
+ Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(cutscene)), &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, ActorCutscene_GetCurrentSubCamId(cutscene)),
+ 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:
+ ActorCutscene_Stop(cutscene);
+ 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 (gSaveContext.eventInf[4] & 4) {
+ // 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 (!(gSaveContext.eventInf[4] & 4)) {
+ 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_02;
+ gSaveContext.nextTransitionType = TRANS_TYPE_06;
+ gSaveContext.eventInf[4] |= 8;
+ break;
+ }
+
+ return ret;
+}
+
+u8* func_80BC045C(EnNb* this, PlayState* play) {
+ if (gSaveContext.eventInf[4] & 8) {
+ 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 (!(gSaveContext.eventInf[4] & 8)) {
+ 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 (gSaveContext.eventInf[4] & 8) {
+ 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 (gSaveContext.eventInf[4] & 8) {
+ gSaveContext.eventInf[4] &= (u8)~4;
+ gSaveContext.eventInf[4] &= (u8)~8;
+ }
+
+ 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 (gSaveContext.eventInf[4] & 8) {
+ SubS_UpdateFlags(&this->stateFlags, EN_NB_FLAG_4, EN_NB_FLAG_1 | EN_NB_FLAG_2 | EN_NB_FLAG_4);
+ } else {
+ gSaveContext.eventInf[4] &= (u8)~4;
+ gSaveContext.eventInf[4] &= (u8)~8;
+ }
+
+ 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 ((ActorCutscene_GetCurrentIndex() == -1) && (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..86099a214 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,
@@ -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) {
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..abaf6c3e0 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,
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..1c9212a63 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,
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 36fea369b..ad872cd21 100644
--- a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c
+++ b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c
@@ -14,12 +14,12 @@
void EnNutsball_Init(Actor* thisx, PlayState* play);
void EnNutsball_Destroy(Actor* thisx, PlayState* play);
-void EnNutsball_Update(Actor* thisx, PlayState* play);
+void EnNutsball_Update(Actor* thisx, PlayState* play2);
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,
@@ -97,13 +97,14 @@ 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) ||
@@ -125,11 +126,11 @@ 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);
}
}
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 2f842c8ae..74ac78b5f 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;
}
@@ -242,14 +240,14 @@ void EnNwc_CheckFound(EnNwc* this, PlayState* play) {
void EnNwc_LoadNiwSkeleton(EnNwc* this, PlayState* play) {
if (Object_IsLoaded(&play->objectCtx, this->niwObjectIndex)) {
- gSegments[6] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[this->niwObjectIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->niwObjectIndex].segment);
SkelAnime_InitFlex(play, &this->niwSkeleton, &gNiwSkeleton, &gNiwIdleAnim, this->jointTable, this->morphTable,
NIW_LIMB_MAX);
Animation_Change(&this->niwSkeleton, &gNiwIdleAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gNiwIdleAnim),
ANIMMODE_LOOP, 0.0f);
- gSegments[6] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[this->nwcObjectIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->nwcObjectIndex].segment);
this->state = NWC_STATE_NIW_LOADED;
EnNwc_ToggleState(this);
}
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..d4d3db017 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
@@ -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,
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..df18de3e7 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,
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..ac3c5ef6b 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,
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..0358911d3 100644
--- a/src/overlays/actors/ovl_En_Osk/z_en_osk.h
+++ b/src/overlays/actors/ovl_En_Osk/z_en_osk.h
@@ -24,6 +24,4 @@ typedef struct EnOsk {
/* 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..7df9d843d 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,225 +187,265 @@ 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 (this->stateFlags & OSN_STATE_SPECIAL_CONVERSTATION) {
+ this->stateFlags |= OSN_STATE_END_CONVERSATION;
if ((gSaveContext.save.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)) &&
@@ -361,70 +458,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 +532,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 +662,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,24 +673,24 @@ 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) {
+void EnOsn_InitCutscene(EnOsn* this) {
this->cutscene = this->actor.cutscene;
if ((gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) ||
(INV_CONTENT(ITEM_MASK_DEKU) == ITEM_MASK_DEKU)) {
@@ -604,147 +703,170 @@ void func_80AD1398(EnOsn* this) {
}
}
-void func_80AD144C(EnOsn* this, PlayState* play) {
- u32 sp1C = Flags_GetSwitch(play, 0);
+void EnOsn_ChooseAction(EnOsn* this, PlayState* play) {
+ u32 isFlagSet = Flags_GetSwitch(play, 0);
+
this->cutscene = this->actor.cutscene;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
- if (sp1C == 0) {
- this->actionFunc = func_80AD16A8;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, OSN_ANIM_IDLE);
+ if (!isFlagSet) {
+ this->actionFunc = EnOsn_HandleCsAction;
} else {
- this->actionFunc = func_80AD14C8;
+ this->actionFunc = EnOsn_Idle;
}
}
-void func_80AD14C8(EnOsn* this, PlayState* play) {
- s16 temp_v1 = this->actor.yawTowardsPlayer - this->actor.shape.rot.y;
+void EnOsn_Idle(EnOsn* this, PlayState* play) {
+ s16 yaw = this->actor.yawTowardsPlayer - this->actor.shape.rot.y;
- if (gSaveContext.save.inventory.items[SLOT_OCARINA] != ITEM_NONE && !CHECK_QUEST_ITEM(QUEST_SONG_HEALING)) {
+ 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)) {
+ 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->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);
- }
+ } 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 func_80AD1634(EnOsn* this, PlayState* play) {
+void EnOsn_StartCutscene(EnOsn* this, PlayState* play) {
if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
ActorCutscene_Start(this->cutscene, &this->actor);
- this->actionFunc = func_80AD16A8;
- return;
+ this->actionFunc = EnOsn_HandleCsAction;
+ } else {
+ if (ActorCutscene_GetCurrentIndex() == 0x7C) {
+ ActorCutscene_Stop(0x7C);
+ }
+ ActorCutscene_SetIntentToPlay(this->cutscene);
}
- if (ActorCutscene_GetCurrentIndex() == 0x7C) {
- ActorCutscene_Stop(0x7C);
- }
- ActorCutscene_SetIntentToPlay(this->cutscene);
}
-void func_80AD16A8(EnOsn* this, PlayState* play) {
+void EnOsn_HandleCsAction(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;
+ this->shouldRotateHead = false;
+ if (this->csAction != play->csCtx.actorActions[actionIndex]->action) {
+ this->csAction = play->csCtx.actorActions[actionIndex]->action;
switch (play->csCtx.actorActions[actionIndex]->action) {
case 1:
- this->unk_1EC = 2;
+ this->animIndex = OSN_ANIM_BOWING;
break;
+
case 2:
- this->unk_1EC = 1;
+ this->animIndex = OSN_ANIM_ARMS_OUT;
break;
+
case 3:
- this->unk_1EC = 7;
+ this->animIndex = OSN_ANIM_SHAKE_HEAD;
break;
+
case 4:
- this->unk_1EC = 3;
+ this->animIndex = OSN_ANIM_REMINISCE;
break;
+
case 5:
- this->unk_1EC = 6;
+ this->animIndex = OSN_ANIM_THINK;
break;
+
case 6:
- this->unk_1EC = 5;
+ this->animIndex = OSN_ANIM_BELIEVE;
break;
+
case 7:
- this->unk_1EC = 4;
+ this->animIndex = OSN_ANIM_HANDS_CLASPED;
break;
+
case 8:
- this->unk_1EC = 0;
+ this->animIndex = OSN_ANIM_IDLE;
break;
+
case 10:
- this->unk_1EC = 8;
+ this->animIndex = OSN_ANIM_ORGAN_TALK;
break;
+
case 11:
- this->unk_1EC = 9;
+ this->animIndex = OSN_ANIM_ORGAN_PLAY;
break;
+
case 13:
- this->unk_1EC = 0xA;
+ this->animIndex = OSN_ANIM_SHAKE;
break;
+
case 15:
- this->unk_1EC = 0xB;
+ this->animIndex = OSN_ANIM_CHOKE;
break;
+
case 16:
- this->unk_1EC = 0xC;
+ this->animIndex = OSN_ANIM_DESPAIR;
break;
+
case 17:
- this->unk_1EC = 0xD;
+ this->animIndex = OSN_ANIM_FAST_BOWS;
break;
+
case 18:
- this->unk_1EC = 0xE;
+ this->animIndex = OSN_ANIM_HAND_OUT;
break;
+
case 19:
- this->unk_1EC = 0x11;
+ this->animIndex = OSN_ANIM_MASK_LOOK_AT;
break;
+
case 20:
- this->unk_1EC = 0x12;
+ this->animIndex = OSN_ANIM_TURN_AROUND_START;
break;
+
case 21:
- this->unk_1EC = 0x14;
+ this->animIndex = OSN_ANIM_WALK_AWAY;
break;
+
case 22:
- this->unk_1EC = 0x15;
+ this->animIndex = OSN_ANIM_MASK_LOOK_FROM_START;
break;
+
case 23:
- this->unk_1EC = 0x17;
+ this->animIndex = OSN_ANIM_HAND_OUT_2;
break;
+
case 24:
- this->unk_1EC = 0x18;
+ this->animIndex = OSN_ANIM_WALK_AWAY_END;
break;
+
default:
- this->unk_1EC = 0;
+ this->animIndex = OSN_ANIM_IDLE;
break;
}
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->unk_1EC);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex);
}
- if ((this->unk_1EC == 5) && (play->sceneId == SCENE_SPOT00) && (gSaveContext.sceneLayer == 0xB) &&
- (play->csCtx.frames == 400)) {
+ if ((this->animIndex == OSN_ANIM_BELIEVE) && (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->animIndex == OSN_ANIM_TURN_AROUND_START) {
+ EnOsn_TurnAround(this);
}
- if (this->unk_1EC == 0x15) {
- func_80AD0A24(this);
+
+ if (this->animIndex == OSN_ANIM_MASK_LOOK_FROM_START) {
+ EnOsn_LookFromMask(this);
}
- if (this->unk_1EC == 0x18) {
- func_80AD0AB0(this);
+
+ if (this->animIndex == OSN_ANIM_WALK_AWAY_END) {
+ EnOsn_FadeOut(this);
}
- if ((this->unk_1EC == 0x14) &&
+
+ 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)))) {
@@ -752,28 +874,28 @@ void func_80AD16A8(EnOsn* this, PlayState* play) {
}
Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex);
} else {
- this->unk_1F0 = 1;
- this->unk_1ED = 0x63;
- func_80AD144C(this, play);
+ this->shouldRotateHead = true;
+ this->csAction = 0x63;
+ EnOsn_ChooseAction(this, play);
}
}
-void func_80AD19A0(EnOsn* this, PlayState* 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->unk_1EA & 0x20) {
- this->unk_1EA &= ~0x20;
+ if (this->stateFlags & OSN_STATE_END_CONVERSATION) {
+ this->stateFlags &= ~OSN_STATE_END_CONVERSATION;
play->msgCtx.msgMode = 0x43;
play->msgCtx.stateTimer = 4;
- this->actionFunc = func_80AD14C8;
+ this->actionFunc = EnOsn_Idle;
} else {
- func_80AD10FC(this, play);
+ EnOsn_HandleConversation(this, play);
}
}
}
-void EnOsn_Idle(EnOsn* this, PlayState* play) {
+void EnOsn_DoNothing(EnOsn* this, PlayState* play) {
}
void EnOsn_Init(Actor* thisx, PlayState* play) {
@@ -782,55 +904,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 +966,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 +1002,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 +1055,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..638f31e4e 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;
+ /* 0x1EA */ u16 stateFlags;
+ /* 0x1EC */ u8 animIndex;
+ /* 0x1ED */ u8 csAction;
/* 0x1EE */ s16 cutscene;
- /* 0x1F0 */ u8 unk_1F0;
+ /* 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..d1f7dbec9 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;
@@ -266,14 +266,14 @@ void EnOssan_Init(Actor* thisx, PlayState* play) {
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)) {
+ 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,7 +306,7 @@ 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) {
@@ -339,7 +339,7 @@ s32 EnOssan_TestCancelOption(EnOssan* this, PlayState* play, Input* input) {
}
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 {
@@ -350,7 +350,7 @@ 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);
+ func_8011552C(play, DO_ACTION_DECIDE);
this->stickRightPrompt.isEnabled = true;
this->stickLeftPrompt.isEnabled = true;
}
@@ -366,7 +366,7 @@ 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) {
@@ -603,7 +603,7 @@ s32 EnOssan_FacingShopkeeperDialogResult(EnOssan* this, PlayState* play) {
}
EnOssan_SetupAction(this, EnOssan_TalkToShopkeeper);
func_80151938(play, sTalkOptionTextIds[this->actor.params]);
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
this->stickLeftPrompt.isEnabled = false;
this->stickRightPrompt.isEnabled = false;
return true;
@@ -630,7 +630,7 @@ void EnOssan_FaceShopkeeper(EnOssan* this, PlayState* play) {
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);
}
@@ -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) {
@@ -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) {
@@ -984,7 +984,7 @@ void EnOssan_SetupBuyItemWithFanfare(PlayState* play, EnOssan* this) {
Actor_PickUp(&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);
@@ -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:
@@ -1109,7 +1109,7 @@ void EnOssan_SetupItemPurchased(EnOssan* this, PlayState* play) {
this->cutscene = this->lookToShopkeeperCutscene;
ActorCutscene_SetIntentToPlay(this->cutscene);
}
- 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);
}
}
@@ -1160,7 +1160,7 @@ void EnOssan_ItemPurchased(EnOssan* this, PlayState* play) {
if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_STOPPED) {
if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
- player->stateFlags2 |= 0x20000000;
+ player->stateFlags2 |= PLAYER_STATE2_20000000;
EnOssan_SetupAction(this, EnOssan_ContinueShopping);
this->cutsceneState = ENOSSAN_CUTSCENESTATE_PLAYING;
} else {
@@ -1174,7 +1174,7 @@ void EnOssan_ItemPurchased(EnOssan* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
func_80151938(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;
}
}
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..a4787cc14 100644
--- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.h
+++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.h
@@ -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..e2490bb8d 100644
--- a/src/overlays/actors/ovl_En_Ot/z_en_ot.c
+++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.c
@@ -59,11 +59,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,
@@ -180,7 +180,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 +195,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 +219,7 @@ void EnOt_Init(Actor* thisx, PlayState* play) {
break;
case 1:
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
break;
}
break;
@@ -230,7 +230,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 +250,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,7 +264,7 @@ void EnOt_Init(Actor* thisx, PlayState* play) {
break;
case 3:
- if (!(gSaveContext.save.weekEventReg[26] & 8)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_26_08)) {
this->actor.flags |= ACTOR_FLAG_8000000;
this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8);
Actor_SetScale(&this->actor, 0.0064999997f);
@@ -274,7 +274,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;
}
@@ -376,11 +376,11 @@ 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);
this->actionFunc = func_80B5C1CC;
@@ -482,8 +482,8 @@ 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);
}
}
@@ -505,7 +505,7 @@ void func_80B5C6DC(EnOt* this, PlayState* play) {
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]);
@@ -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)) {
@@ -556,7 +556,7 @@ 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;
+ SET_WEEKEVENTREG(WEEKEVENTREG_25_04);
func_80B5CAD0(this, play);
}
}
@@ -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);
}
}
@@ -629,7 +629,7 @@ void func_80B5CCA0(EnOt* this, PlayState* play) {
if (SubS_StartActorCutscene(&this->actor, this->cutscenes[0], 0x7C, 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;
@@ -666,7 +666,7 @@ void func_80B5CD40(EnOt* this, PlayState* play) {
if (Message_ShouldAdvance(play) && (play->msgCtx.currentTextId == 0x1069)) {
this->unk_32C |= 4;
ActorCutscene_Stop(this->cutscenes[0]);
- player->stateFlags2 &= ~0x20000000;
+ player->stateFlags2 &= ~PLAYER_STATE2_20000000;
func_80B5CE6C(this, play);
}
break;
@@ -693,7 +693,7 @@ 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)) {
@@ -701,7 +701,7 @@ void func_80B5CEC8(EnOt* this, PlayState* play) {
}
}
- 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 +754,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;
@@ -985,8 +985,8 @@ 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);
@@ -998,7 +998,7 @@ void func_80B5DB6C(Actor* thisx, PlayState* play) {
} 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;
}
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..7e8d7f651 100644
--- a/src/overlays/actors/ovl_En_Ot/z_en_ot.h
+++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.h
@@ -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..8d7b92b69 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,
@@ -151,21 +151,21 @@ void EnOwl_Init(Actor* thisx, PlayState* play) {
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);
+ 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;
@@ -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;
}
@@ -429,7 +429,7 @@ void func_8095B1E4(EnOwl* this, PlayState* play) {
}
if (this->actor.xzDistToPlayer > 6000.0f) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -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;
@@ -505,7 +505,7 @@ void func_8095B574(EnOwl* this, PlayState* play) {
this->unk_406 = 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;
}
@@ -613,10 +613,10 @@ void func_8095BA84(EnOwl* this, PlayState* play) {
switch (play->msgCtx.choiceIndex) {
case 0:
func_8019F208();
- if (gSaveContext.save.weekEventReg[9] & 0x40) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_09_40)) {
func_80151938(play, 0xBF4);
} else {
- gSaveContext.save.weekEventReg[9] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_09_40);
func_80151938(play, 0xBED);
}
break;
@@ -649,7 +649,7 @@ void func_8095BA84(EnOwl* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
switch (play->msgCtx.currentTextId) {
case 0xBEA:
- gSaveContext.save.weekEventReg[9] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_09_20);
func_80151938(play, 0xBEB);
break;
@@ -718,11 +718,11 @@ void func_8095BE0C(EnOwl* this, PlayState* play) {
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,7 +740,7 @@ 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);
@@ -1066,13 +1066,13 @@ 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;
}
@@ -1083,7 +1083,7 @@ void func_8095CCF4(Actor* thisx, PlayState* play) {
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..033857886 100644
--- a/src/overlays/actors/ovl_En_Owl/z_en_owl.h
+++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.h
@@ -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..2b0aae48a 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_52_20) ||
+ 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);
@@ -290,7 +292,7 @@ void func_80BD8964(EnPamera* this, PlayState* play) {
if (Math_Vec3f_StepTo(&this->actor.world.pos, &vec, 1.0f) < 5.0f) {
this->actor.speedXZ = 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);
}
@@ -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_52_20)) {
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,7 @@ 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_52_20) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20))) {
func_80BD93CC(this, 1, 0);
Message_StartTextbox(play, 0x158E, &this->actor);
this->unk_324 = 0x158E;
@@ -729,7 +731,7 @@ s32 func_80BD9CB8(EnPamera* this, PlayState* play) {
this->setupFunc(this, play);
return 1;
}
- if ((play->csCtx.state == 0) && (gSaveContext.save.weekEventReg[75] & 0x20)) {
+ if ((play->csCtx.state == 0) && 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);
@@ -853,11 +855,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 +868,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..34f18e815 100644
--- a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.h
+++ b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.h
@@ -37,6 +37,4 @@ typedef struct EnPamera {
/* 0x326 */ u16 unk_326;
} 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..82b424657 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);
}
}
@@ -344,7 +342,7 @@ void EnPametfrog_StopCutscene(EnPametfrog* this, PlayState* play) {
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);
+ func_800B724C(play, &this->actor, PLAYER_CSMODE_6);
}
}
@@ -986,7 +984,7 @@ 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);
}
}
@@ -1007,7 +1005,7 @@ 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);
+ func_800B724C(play, &this->actor, PLAYER_CSMODE_7);
if (this->actor.colChkInfo.health == 0) {
if (this->actor.params == GEKKO_PRE_SNAPPER) {
EnPametfrog_SetupCallSnapper(this, play);
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..9ae2f76df 100644
--- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h
+++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h
@@ -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..a3f158cbd 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;
+ this->windForce = sUnitVecZ;
Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
- func_80C1F46C(this);
+ 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..527a91b3d 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,
@@ -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 02e660f14..3e2fdcfac 100644
--- a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c
+++ b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c
@@ -15,7 +15,7 @@
void EnPeehat_Init(Actor* thisx, PlayState* play);
void EnPeehat_Destroy(Actor* thisx, PlayState* play);
-void EnPeehat_Update(Actor* thisx, PlayState* play);
+void EnPeehat_Update(Actor* thisx, PlayState* play2);
void EnPeehat_Draw(Actor* thisx, PlayState* play);
void func_80897498(EnPeehat* this);
@@ -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,
@@ -438,7 +438,7 @@ void func_80897A94(EnPeehat* this, PlayState* play) {
if (!(this->actor.bgCheckFlags & 1)) {
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) {
@@ -588,7 +588,7 @@ void func_80898338(EnPeehat* this, PlayState* play) {
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);
}
@@ -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);
}
}
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..c2846a26b 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++;
}
@@ -842,7 +842,7 @@ s32 func_80AF81E8(EnPm* this, PlayState* play) {
case 1:
case 3:
case 5:
- if ((gSaveContext.save.weekEventReg[86] & 8) && (this->unk_378 == 3)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_86_08) && (this->unk_378 == 3)) {
ActorCutscene_Stop(sp2A);
} else {
Camera_SetTargetActor(Play_GetCamera(play, ActorCutscene_GetCurrentSubCamId(sp2A)), &this->actor);
@@ -1103,31 +1103,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 +1133,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 +1168,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 +1259,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;
@@ -1341,7 +1339,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 +1378,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);
}
@@ -1457,10 +1455,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 +1479,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 +1566,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;
@@ -1780,11 +1778,9 @@ s32 func_80AF9E7C(EnPm* this, PlayState* play) {
}
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 +1794,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:
@@ -1991,7 +1987,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;
@@ -2120,7 +2116,7 @@ void EnPm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
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..a9fcf95e3 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
@@ -25,7 +25,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,
@@ -111,7 +111,7 @@ void EnPoFusen_Init(Actor* thisx, PlayState* play) {
Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 0x4);
if (!EnPoFusen_CheckParent(this, play)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
heightTemp = this->actor.floorHeight + 90.0f;
@@ -238,7 +238,7 @@ 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_Kill(&this->actor);
}
void EnPoFusen_InitFuse(EnPoFusen* this) {
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..740d65968 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
@@ -30,6 +30,4 @@ typedef struct EnPoFusen {
/* 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..a89a55d9e 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,
@@ -714,10 +714,11 @@ 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) {
@@ -734,15 +735,15 @@ void EnPoSisters_SpawnMegClones(EnPoSisters* this, PlayState* play) {
// 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);
}
}
@@ -793,7 +794,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);
}
}
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..5e549c4d7 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
@@ -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 dde6236b5..f1b0f74d4 100644
--- a/src/overlays/actors/ovl_En_Poh/z_en_poh.c
+++ b/src/overlays/actors/ovl_En_Poh/z_en_poh.c
@@ -13,7 +13,7 @@
void EnPoh_Init(Actor* thisx, PlayState* play);
void EnPoh_Destroy(Actor* thisx, PlayState* play);
-void EnPoh_Update(Actor* thisx, PlayState* play);
+void EnPoh_Update(Actor* thisx, PlayState* play2);
void EnPoh_Draw(Actor* thisx, PlayState* play);
void func_80B2CAA4(EnPoh* this, PlayState* play);
@@ -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,
@@ -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;
}
@@ -687,7 +687,7 @@ void func_80B2E3B0(EnPoh* this) {
void func_80B2E3F8(EnPoh* this, PlayState* play) {
func_80B2DDF8(this, -13);
if (this->unk_197 == 0) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
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..fad487e62 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,
@@ -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);
}
}
@@ -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;
@@ -1225,7 +1225,7 @@ void EnPp_BodyPart_Move(EnPp* this, PlayState* play) {
}
if ((this->timer == 0) || (this->actor.bgCheckFlags & 1)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
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 724b2c19f..5068c96ee 100644
--- a/src/overlays/actors/ovl_En_Pr/z_en_pr.c
+++ b/src/overlays/actors/ovl_En_Pr/z_en_pr.c
@@ -12,7 +12,7 @@
#define THIS ((EnPr*)thisx)
-void EnPr_Init(Actor* thisx, PlayState* play);
+void EnPr_Init(Actor* thisx, PlayState* play2);
void EnPr_Destroy(Actor* thisx, PlayState* play);
void EnPr_Update(Actor* thisx, PlayState* play);
void EnPr_Draw(Actor* thisx, PlayState* play);
@@ -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,
@@ -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)) {
@@ -345,10 +345,10 @@ void func_80A32B20(EnPr* this, PlayState* play) {
this->actor.speedXZ = 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;
func_80A32854(this);
@@ -375,14 +375,14 @@ 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;
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))) {
@@ -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,7 +463,7 @@ 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;
}
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..0cc6dc134 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 {
@@ -174,7 +174,7 @@ void EnPr2_Init(Actor* thisx, PlayState* play) {
Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 20.0f, 20.0f, 0x1D);
if (!(this->actor.bgCheckFlags & 0x60)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -206,7 +206,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;
@@ -277,7 +277,7 @@ void func_80A745FC(EnPr2* this, PlayState* play) {
}
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);
@@ -337,7 +337,7 @@ void func_80A748E8(EnPr2* this, PlayState* play) {
this->actor.speedXZ = 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 +356,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);
}
@@ -446,7 +446,7 @@ 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;
}
@@ -455,7 +455,7 @@ void func_80A74E90(EnPr2* this, PlayState* play) {
this->actor.speedXZ = 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);
@@ -558,7 +558,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 +601,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);
}
}
}
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..dad8fc126 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,
@@ -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;
@@ -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,7 +353,7 @@ 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);
}
@@ -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);
}
}
}
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..c49852746 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;
}
}
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 66b2a0a1e..0caa2f8ca 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);
@@ -28,7 +30,7 @@ void EnRacedog_CalculateFinalStretchTargetSpeed(EnRacedog* this);
void EnRacedog_UpdateRaceVariables(EnRacedog* this);
void EnRacedog_CheckForFinish(EnRacedog* this);
void EnRacedog_UpdateRunAnimationPlaySpeed(EnRacedog* this);
-s32 EnRacedog_IsOverFinishLine(EnRacedog* this, Vec2f* arg1);
+s32 EnRacedog_IsOverFinishLine(EnRacedog* this, Vec2f* finishLineCoordinates);
void EnRacedog_SpawnFloorDustRing(EnRacedog* this, PlayState* play);
void EnRacedog_PlaySfxWalk(EnRacedog* this);
@@ -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,
@@ -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 RADF_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;
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..8421b20ac 100644
--- a/src/overlays/actors/ovl_En_Raf/z_en_raf.c
+++ b/src/overlays/actors/ovl_En_Raf/z_en_raf.c
@@ -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_IsInRidingMovingState(&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;
@@ -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);
@@ -430,9 +430,9 @@ void EnRaf_Chew(EnRaf* this, PlayState* play) {
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);
+ func_800B8E58((Player*)this, 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;
@@ -700,7 +700,7 @@ 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;
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..073f2045a 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,7 +277,7 @@ 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);
@@ -635,7 +635,7 @@ void func_80B71BB8(EnRailSkb* this, PlayState* play) {
}
if (this->actor.bgCheckFlags & 2) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
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 58ab51cf8..50a203c81 100644
--- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c
+++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c
@@ -35,7 +35,8 @@ void EnRailgibud_Damage(EnRailgibud* this, PlayState* play);
void EnRailgibud_Stunned(EnRailgibud* this, PlayState* play);
void EnRailgibud_SetupDead(EnRailgibud* this);
void EnRailgibud_Dead(EnRailgibud* this, PlayState* play);
-void EnRailgibud_SpawnDust(PlayState* play, Vec3f* vec, f32 arg2, s32 arg3, s16 arg4, s16 arg5);
+void EnRailgibud_SpawnDust(PlayState* play, Vec3f* basePos, f32 randomnessScale, s32 dustCount, s16 dustScale,
+ s16 scaleStep);
void EnRailgibud_TurnTowardsPlayer(EnRailgibud* this, PlayState* play);
s32 EnRailgibud_PlayerInRangeWithCorrectState(EnRailgibud* this, PlayState* play);
s32 EnRailgibud_PlayerOutOfRange(EnRailgibud* this, PlayState* play);
@@ -83,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,
@@ -271,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);
@@ -437,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;
@@ -449,7 +450,7 @@ 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);
Rumble_Request(this->actor.xzDistToPlayer, 240, 1, 12);
@@ -462,9 +463,9 @@ void EnRailgibud_Grab(EnRailgibud* this, PlayState* play) {
Actor_PlaySfxAtPos(&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;
}
@@ -629,7 +630,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
@@ -749,9 +750,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_DistanceToPoint(&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;
}
@@ -1114,7 +1116,7 @@ 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);
@@ -1165,7 +1167,7 @@ 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);
}
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..cf06d1996 100644
--- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h
+++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h
@@ -55,6 +55,4 @@ typedef struct EnRailgibud {
/* 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..da0b27e6d 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,
@@ -762,7 +762,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);
}
}
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..3e46c9f04 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,
@@ -654,8 +654,9 @@ void EnRd_WalkToPlayer(EnRd* this, PlayState* 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 (!(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;
@@ -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,
@@ -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);
+ func_800B8E58(player, player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_DAMAGE_S);
}
break;
@@ -1068,7 +1069,7 @@ 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--;
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..051cc8b33 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)
}
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..7f6d39886 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,
@@ -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;
@@ -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;
@@ -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);
}
}
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..0fd1007d0 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;
}
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 4a61e62b9..6c7ac273c 100644
--- a/src/overlays/actors/ovl_En_Rr/z_en_rr.c
+++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.c
@@ -15,7 +15,7 @@
void EnRr_Init(Actor* thisx, PlayState* play);
void EnRr_Destroy(Actor* thisx, PlayState* play);
void EnRr_Update(Actor* thisx, PlayState* play);
-void EnRr_Draw(Actor* thisx, PlayState* play);
+void EnRr_Draw(Actor* thisx, PlayState* play2);
void func_808FAF94(EnRr* this, PlayState* play);
void func_808FB088(EnRr* this, PlayState* play);
@@ -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,
@@ -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;
@@ -571,7 +571,8 @@ 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)) {
@@ -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;
@@ -809,7 +813,7 @@ void EnRr_Update(Actor* thisx, PlayState* 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 +874,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 +912,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 +923,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..042f2e46f 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,
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 66db63c65..f77993e5d 100644
--- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c
+++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c
@@ -17,7 +17,7 @@ enum {
ENRUPPECROW_EFFECT_LIGHT = 20,
};
-void EnRuppecrow_Init(Actor* thisx, PlayState* play);
+void EnRuppecrow_Init(Actor* thisx, PlayState* play2);
void EnRuppecrow_Destroy(Actor* thisx, PlayState* play);
void EnRuppecrow_Update(Actor* thisx, PlayState* play);
void EnRuppecrow_Draw(Actor* thisx, PlayState* play);
@@ -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,
@@ -240,7 +240,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 +257,7 @@ void EnRuppecrow_UpdateRupees(EnRuppecrow* this) {
for (rupeeIndex = 0; rupeeIndex < ENRUPPECROW_RUPEE_COUNT; rupeeIndex++) {
rupee = this->rupees[rupeeIndex];
if (rupee != NULL && rupee->unk152 == 0) {
- Actor_MarkForDeath(&rupee->actor);
+ Actor_Kill(&rupee->actor);
}
}
}
@@ -268,7 +268,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;
@@ -407,7 +407,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 +417,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;
@@ -507,7 +507,7 @@ void EnRuppecrow_HandleSong(EnRuppecrow* this, PlayState* play) {
this->actionFunc = EnRuppecrow_HandleSongCutscene;
}
- if (player->stateFlags2 & 0x8000000) {
+ if (player->stateFlags2 & PLAYER_STATE2_8000000) {
Math_ApproachF(&this->actor.speedXZ, 0.0f, 0.1f, 1.0f);
} else {
Math_ApproachF(&this->actor.speedXZ, 6.0f, 0.1f, 0.1f);
@@ -577,7 +577,7 @@ void EnRuppecrow_FlyToDespawn(EnRuppecrow* this, PlayState* play) {
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;
@@ -614,7 +614,7 @@ void EnRuppecrow_FallToDespawn(EnRuppecrow* this, PlayState* play) {
0x0);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 0xB, NA_SE_EN_EXTINCT);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
}
@@ -643,7 +643,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..108d88023 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,647 @@ 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 tempCutscene = this->actor.cutscene;
+ s32 i;
-extern ColliderCylinderInit D_80BFCCF4;
+ 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);
+ }
+ }
-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->csAction = 0x226;
+ } else { // EN_RZ_MARILLA
+ this->csAction = 0x227;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Rz/func_80BFBC78.s")
+ this->actionIndex = 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 LinkAnimationHeader* sLinkAnimations[] = {
+ &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(sLinkAnimations[animIndex - ARRAY_COUNT(sJudoAnimations)]);
+ if (animMode == ANIMMODE_LOOP) {
+ LinkAnimation_Change(play, &this->skelAnime, sLinkAnimations[animIndex - ARRAY_COUNT(sJudoAnimations)],
+ 2.0f / 3.0f, 0.0f, endFrame, ANIMMODE_LOOP, morphFrames);
+ } else {
+ LinkAnimation_Change(play, &this->skelAnime, sLinkAnimations[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 LinkAnimation_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 action;
+
+ 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_CheckActorAction(play, this->csAction)) {
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, this->csAction));
+ action = play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, this->csAction)]->action;
+ if (this->actionIndex != action) {
+ this->actionIndex = action;
+ switch (this->actionIndex) {
+ 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.cutscene == -1) {
+ Message_StartTextbox(play, 0x2925, &this->actor);
+ this->actionFunc = func_80BFC078;
+ } else if (ActorCutscene_GetCurrentIndex() == 0x7C) {
+ ActorCutscene_Stop(0x7C);
+ ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ return false;
+ } else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
+ ActorCutscene_Start(this->actor.cutscene, &this->actor);
+ return true;
+ } else {
+ ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ }
+ 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:
+ func_80151938(play, play->msgCtx.currentTextId + 1);
+ SET_WEEKEVENTREG(WEEKEVENTREG_77_04);
+ break;
+
+ default:
+ func_801477B4(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_PickUp(&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)) {
+ func_801477B4(play);
+ Actor_PickUp(&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.cutscene = this->cutscenes[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.cutscene = this->cutscenes[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)) {
+ func_801477B4(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)) {
+ func_801477B4(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.speedXZ = 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.speedXZ = 0.0f;
+ func_80BFB9E4(play, this, EN_RZ_ANIM_THINKING);
+}
+
+void EnRz_Walk(EnRz* this, PlayState* play) {
+ EnRz_UpdateSkelAnime(this, play);
+ this->actor.speedXZ = 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.speedXZ = 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, 5);
+
+ 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..38a7088e8 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 csAction;
+ /* 0x428 */ u16 actionIndex;
+ /* 0x42A */ s16 cutscenes[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 ccc11a002..cc3cd2455 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;
@@ -771,7 +771,7 @@ void EnSGoro_UpdateSleeping(EnSGoro* this, PlayState* play) {
Actor_PlaySfxAtPos(&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;
}
@@ -788,7 +788,7 @@ s32 EnSGoro_UpdateCheerAnimation(EnSGoro* this, PlayState* play) {
if (((EnJg*)this->otherGoron)->flags & 1) {
this->loadedObjIndex = Object_GetIndex(&play->objectCtx, OBJECT_TAISOU);
if (this->loadedObjIndex >= 0) {
- gSegments[6] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[this->loadedObjIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->loadedObjIndex].segment);
this->animInfoIndex = EN_S_GORO_ANIM_TAISOU_CHEER;
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animInfoIndex);
return true;
@@ -797,7 +797,7 @@ s32 EnSGoro_UpdateCheerAnimation(EnSGoro* this, PlayState* play) {
} else if ((this->animInfoIndex == EN_S_GORO_ANIM_TAISOU_CHEER) && !(((EnJg*)this->otherGoron)->flags & 1)) {
this->loadedObjIndex = Object_GetIndex(&play->objectCtx, OBJECT_OF1D_MAP);
if (this->loadedObjIndex >= 0) {
- gSegments[6] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[this->loadedObjIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->loadedObjIndex].segment);
this->animInfoIndex = EN_S_GORO_ANIM_IDLE_STAND;
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animInfoIndex);
this->skelAnime.curFrame = this->skelAnime.endFrame;
@@ -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;
}
}
@@ -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;
@@ -1329,7 +1329,7 @@ void EnSGoro_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 5);
- gSegments[6] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[this->loadedObjIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->loadedObjIndex].segment);
SkelAnime_Update(&this->skelAnime);
if (this->animInfoIndex != EN_S_GORO_ANIM_SLEEPY) {
EnSGoro_UpdateAttentionTarget(this, play);
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..868b48923 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,
@@ -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, 5);
+ 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..fa017af87 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,
@@ -73,38 +73,38 @@ void EnScRuppe_UpdateCollision(EnScRuppe* this, PlayState* play) {
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;
@@ -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;
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..b37190ee1 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;
@@ -244,7 +250,7 @@ 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++;
}
@@ -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..4f8207046 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,
@@ -170,7 +170,7 @@ void func_80BCAE78(EnScopenuts* this, PlayState* play) {
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;
}
@@ -239,8 +239,8 @@ 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);
+ SET_WEEKEVENTREG(WEEKEVENTREG_52_40);
+ Actor_Kill(&this->actor);
}
}
@@ -368,7 +368,7 @@ 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);
@@ -594,7 +594,7 @@ 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;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_52_40);
this->actionFunc = func_80BCC288;
} else {
this->unk_334++;
@@ -626,7 +626,7 @@ void func_80BCBFFC(EnScopenuts* this, PlayState* play) {
}
void func_80BCC288(EnScopenuts* this, PlayState* play) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
s32 func_80BCC2AC(EnScopenuts* this, Path* path, s32 arg2_) {
@@ -684,9 +684,8 @@ 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.inventory.items[ITEM_OCARINA] == ITEM_NONE)) {
+ Actor_Kill(&this->actor);
return;
}
@@ -705,21 +704,21 @@ void EnScopenuts_Init(Actor* thisx, PlayState* play) {
this->actor.speedXZ = 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;
@@ -732,10 +731,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..5ea0d15eb 100644
--- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.h
+++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.h
@@ -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..88fab3298 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,24 @@ 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.skullTokenCount & 0xFFFF)) >= 30)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_13_20);
+ }
+
+ 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 +106,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);
}
}
}
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..fb4ad7e60 100644
--- a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.h
+++ b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.h
@@ -26,6 +26,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..b16153a53 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,
@@ -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,15 +417,16 @@ 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];
@@ -433,7 +434,7 @@ void func_80ADB924(EnSellnuts* this, PlayState* play) {
this->actionFunc = func_80ADB0D8;
}
func_801477B4(play);
- } else if (item < PLAYER_AP_NONE) {
+ } else if (itemAction <= PLAYER_IA_MINUS1) {
this->unk_340 = D_80ADD920[this->unk_33A];
func_80151938(play, this->unk_340);
this->actionFunc = func_80ADB0D8;
@@ -472,14 +473,14 @@ 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);
@@ -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;
}
@@ -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) {
@@ -835,8 +836,8 @@ void func_80ADCA64(EnSellnuts* this, PlayState* play) {
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);
+ 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;
@@ -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);
@@ -969,9 +970,9 @@ void EnSellnuts_Init(Actor* thisx, PlayState* play) {
this->unk_36C = 0.01f;
this->actor.speedXZ = 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..b9793a6d3 100644
--- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.h
+++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.h
@@ -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..d606e17f4 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;
@@ -258,8 +258,8 @@ 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_7);
play->nextEntrance = ENTRANCE(SOUTHERN_SWAMP_POISONED, 6);
gSaveContext.nextCutsceneIndex = 0;
play->transitionTrigger = TRANS_TRIGGER_START;
@@ -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..5f7e111a4 100644
--- a/src/overlays/actors/ovl_En_Si/z_en_si.c
+++ b/src/overlays/actors/ovl_En_Si/z_en_si.c
@@ -19,7 +19,7 @@ void func_8098CB70(EnSi* this, PlayState* play);
void func_8098CBDC(EnSi* this, PlayState* play);
#if 0
-const ActorInit En_Si_InitVars = {
+ActorInit En_Si_InitVars = {
ACTOR_EN_SI,
ACTORCAT_ITEMACTION,
FLAGS,
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..b401e5e6a 100644
--- a/src/overlays/actors/ovl_En_Si/z_en_si.h
+++ b/src/overlays/actors/ovl_En_Si/z_en_si.h
@@ -13,6 +13,4 @@ typedef struct EnSi {
/* 0x148 */ char unk_148[0x58];
} 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..bb1fb7e0b 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,
@@ -555,7 +555,7 @@ 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);
}
}
@@ -800,14 +800,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);
}
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..2b8e5f4c6 100644
--- a/src/overlays/actors/ovl_En_Slime/z_en_slime.c
+++ b/src/overlays/actors/ovl_En_Slime/z_en_slime.c
@@ -33,7 +33,7 @@ void func_80A30C2C(EnSlime* this, PlayState* play);
void func_80A30CEC(EnSlime* this, PlayState* play);
#if 0
-const ActorInit En_Slime_InitVars = {
+ActorInit En_Slime_InitVars = {
ACTOR_EN_SLIME,
ACTORCAT_ENEMY,
FLAGS,
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..0381a592a 100644
--- a/src/overlays/actors/ovl_En_Slime/z_en_slime.h
+++ b/src/overlays/actors/ovl_En_Slime/z_en_slime.h
@@ -13,6 +13,4 @@ typedef struct EnSlime {
/* 0x148 */ char unk_148[0xC0];
} EnSlime; // size = 0x208
-extern const ActorInit En_Slime_InitVars;
-
#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..994115f89 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,
@@ -211,14 +211,14 @@ void EnSnowman_Init(Actor* thisx, PlayState* play) {
EN_SNOWMAN_TYPE_SPLIT, -1, thisx->unk20, 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;
}
@@ -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)) {
@@ -439,7 +439,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);
@@ -529,7 +529,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;
@@ -634,11 +634,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);
}
}
@@ -765,7 +765,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 +788,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 +801,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);
}
/**
@@ -1025,7 +1025,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)) {
@@ -1040,8 +1040,8 @@ void EnSnowman_Update(Actor* thisx, PlayState* play) {
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 {
@@ -1095,25 +1095,26 @@ 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, 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);
}
/**
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 b69877758..035bc2bfa 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_33_80)) {
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);
@@ -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);
@@ -474,7 +494,7 @@ s32 EnSob1_TestCancelOption(EnSob1* this, PlayState* play, Input* input) {
}
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 {
@@ -485,7 +505,7 @@ 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);
+ func_8011552C(play, DO_ACTION_DECIDE);
this->stickLeftPrompt.isEnabled = false;
this->stickRightPrompt.isEnabled = true;
}
@@ -494,7 +514,7 @@ 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);
+ func_8011552C(play, DO_ACTION_DECIDE);
this->stickLeftPrompt.isEnabled = false;
this->stickRightPrompt.isEnabled = false;
}
@@ -533,7 +553,7 @@ void EnSob1_Idle(EnSob1* this, PlayState* play) {
ActorCutscene_SetIntentToPlay(this->cutscene);
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) {
@@ -660,7 +680,7 @@ void EnSob1_FaceShopkeeper(EnSob1* this, PlayState* play) {
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);
}
@@ -790,7 +810,7 @@ void EnSob1_Walking(EnSob1* this, PlayState* play) {
ActorCutscene_SetIntentToPlay(this->cutscene);
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;
@@ -810,7 +830,7 @@ void EnSob1_ItemPurchased(EnSob1* this, PlayState* play) {
if (this->cutsceneState == ENSOB1_CUTSCENESTATE_STOPPED) {
if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
- player->stateFlags2 |= 0x20000000;
+ player->stateFlags2 |= PLAYER_STATE2_20000000;
EnSob1_SetupAction(this, EnSob1_ContinueShopping);
this->cutsceneState = ENSOB1_CUTSCENESTATE_PLAYING;
} else {
@@ -824,7 +844,7 @@ void EnSob1_ItemPurchased(EnSob1* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
func_80151938(play, 0x647);
} else {
- func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
}
}
@@ -913,7 +933,7 @@ 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;
@@ -932,7 +952,7 @@ void EnSob1_SetupBuyItemWithFanfare(PlayState* play, EnSob1* this) {
Actor_PickUp(&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);
@@ -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:
@@ -1080,7 +1100,7 @@ void EnSob1_SetupItemPurchased(EnSob1* this, PlayState* play) {
this->cutscene = this->lookToShopkeeperCutscene;
ActorCutscene_SetIntentToPlay(this->cutscene);
}
- 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,7 +1286,7 @@ 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 RADF_TO_BINANG(Math_Atan2F_XY(diffZ, diffX));
}
void EnSob1_GetCutscenes(EnSob1* this) {
@@ -1305,7 +1325,7 @@ void EnSob1_Blink(EnSob1* this) {
}
void EnSob1_ChangeObject(EnSob1* this, PlayState* play) {
- gSegments[0x06] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[this->shopkeeperAnimObjIndex].segment);
+ gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->shopkeeperAnimObjIndex].segment);
}
s32 EnSob1_AreObjectsLoaded(EnSob1* this, PlayState* play) {
@@ -1323,7 +1343,7 @@ s32 EnSob1_AreObjectsLoaded(EnSob1* this, PlayState* play) {
void EnSob1_ZoraShopkeeper_Init(EnSob1* this, PlayState* play) {
SkelAnime_InitFlex(play, &this->skelAnime, &gZoraSkel, NULL, this->jointTable, this->morphTable, ZORA_LIMB_MAX);
- gSegments[6] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[this->shopkeeperAnimObjIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->shopkeeperAnimObjIndex].segment);
Animation_Change(&this->skelAnime, &gZoraShopkeeperAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gZoraShopkeeperAnim),
ANIMMODE_LOOP, 0.0f);
this->actor.draw = EnSob1_ZoraShopkeeper_Draw;
@@ -1332,7 +1352,7 @@ void EnSob1_ZoraShopkeeper_Init(EnSob1* this, PlayState* play) {
void EnSob1_GoronShopkeeper_Init(EnSob1* this, PlayState* play) {
SkelAnime_InitFlex(play, &this->skelAnime, &gGoronSkel, NULL, this->jointTable, this->morphTable, GORON_LIMB_MAX);
- gSegments[6] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[this->shopkeeperAnimObjIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->shopkeeperAnimObjIndex].segment);
Animation_Change(&this->skelAnime, &gGoronShopkeeperAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gGoronShopkeeperAnim),
ANIMMODE_LOOP, 0.0f);
this->actor.draw = EnSob1_GoronShopkeeper_Draw;
@@ -1361,7 +1381,7 @@ 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;
}
@@ -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..eee86c112 100644
--- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.h
+++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.h
@@ -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..7494695fa 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,
@@ -655,7 +655,7 @@ void EnSsh_Init(Actor* thisx, PlayState* play) {
this->initialYaw = this->actor.world.rot.y;
EnSsh_SetupAction(this, EnSsh_Start);
if (Inventory_GetSkullTokenCount(play->sceneId) >= 30) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -708,11 +708,11 @@ void EnSsh_Talk(EnSsh* this, PlayState* play) {
void func_809756D0(EnSsh* this, PlayState* play) {
u16 phi_a1;
- if (gSaveContext.save.weekEventReg[34] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_34_08)) {
phi_a1 = 0x914;
} else {
phi_a1 = 0x910;
- gSaveContext.save.weekEventReg[34] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_34_08);
}
Message_StartTextbox(play, phi_a1, &this->actor);
}
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..094c63f7e 100644
--- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.h
+++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.h
@@ -56,6 +56,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..14e0c1cb5 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,
@@ -822,7 +822,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 +839,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) {
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..5d1bd1471 100644
--- a/src/overlays/actors/ovl_En_Sth/z_en_sth.c
+++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.c
@@ -27,7 +27,7 @@ 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,
@@ -107,7 +107,7 @@ void EnSth_Init(Actor* thisx, PlayState* play) {
this->actor.flags |= (ACTOR_FLAG_10 | ACTOR_FLAG_20);
this->actionFunc = func_80B67958;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
break;
@@ -116,17 +116,17 @@ void EnSth_Init(Actor* thisx, PlayState* play) {
if (Inventory_GetSkullTokenCount(play->sceneId) >= 30) {
this->actionFunc = func_80B67DA0;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
this->actor.textId = 0;
- if (!(gSaveContext.save.weekEventReg[34] & 0x40) || !(gSaveContext.save.weekEventReg[34] & 8)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_34_40) || !CHECK_WEEKEVENTREG(WEEKEVENTREG_34_08)) {
this->unk_29C |= 1;
}
break;
case ENSTH_F_3:
if ((gSaveContext.save.skullTokenCount & 0xFFFF) >= 30) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
this->actionFunc = func_80B678A8;
@@ -136,20 +136,20 @@ void EnSth_Init(Actor* thisx, PlayState* play) {
break;
case ENSTH_F_4:
- if (gSaveContext.save.weekEventReg[13] & 0x20) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_20)) {
+ Actor_Kill(&this->actor);
return;
}
this->actor.textId = 0;
this->actionFunc = func_80B677BC;
- if (gSaveContext.save.weekEventReg[13] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_80)) {
this->unk_29C |= 2;
}
break;
case ENSTH_F_5:
- if (!(gSaveContext.save.weekEventReg[13] & 0x20) || (Inventory_GetSkullTokenCount(play->sceneId) < 30)) {
- Actor_MarkForDeath(&this->actor);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_13_20) || (Inventory_GetSkullTokenCount(play->sceneId) < 30)) {
+ Actor_Kill(&this->actor);
return;
}
this->actionFunc = func_80B67208;
@@ -258,7 +258,7 @@ void func_80B67348(EnSth* this, PlayState* play) {
break;
case 5:
- if (gSaveContext.save.weekEventReg[13] & 0x40) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_40)) {
phi_a1 = 0x113D;
} else {
phi_a1 = 0x113C;
@@ -266,7 +266,7 @@ void func_80B67348(EnSth* this, PlayState* play) {
break;
default:
- if (gSaveContext.save.weekEventReg[13] & 0x40) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_40)) {
phi_a1 = 0x1142;
} else {
phi_a1 = 0x1141;
@@ -275,7 +275,7 @@ void func_80B67348(EnSth* this, PlayState* play) {
}
Message_StartTextbox(play, phi_a1, &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);
}
}
@@ -286,7 +286,7 @@ void func_80B67458(EnSth* this, PlayState* play) {
this->actor.parent = NULL;
this->actionFunc = func_80B67348;
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);
} else {
@@ -331,14 +331,14 @@ void func_80B67540(EnSth* this, PlayState* play) {
break;
case 0x1136:
- gSaveContext.save.weekEventReg[13] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_13_80);
switch (sp2C) {
case 0:
- if (gSaveContext.save.weekEventReg[13] & 0x40) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_40)) {
this->actor.home.rot.z = 6;
} else {
- gSaveContext.save.weekEventReg[13] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_13_40);
switch (CUR_UPG_VALUE(UPG_WALLET)) {
case 0:
this->actor.home.rot.z = 8;
@@ -433,14 +433,14 @@ void func_80B67958(EnSth* this, PlayState* play) {
void func_80B67984(EnSth* this, PlayState* play) {
u16 sp1E;
- if (gSaveContext.save.weekEventReg[34] & 0x10) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_34_10)) {
sp1E = 0x903;
func_80B670A4(this, 2);
- } else if (gSaveContext.save.weekEventReg[34] & 0x20) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_34_20)) {
sp1E = 0x90F;
func_80B670A4(this, 2);
- } else if (gSaveContext.save.weekEventReg[34] & 0x40) {
- if (!(gSaveContext.save.weekEventReg[34] & 8)) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_34_40)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_34_08)) {
sp1E = 0x91B;
} else {
sp1E = 0x918;
@@ -453,11 +453,11 @@ void func_80B67984(EnSth* this, PlayState* play) {
} else {
sp1E = 0x916;
}
- } else if (gSaveContext.save.weekEventReg[34] & 2) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_34_02)) {
sp1E = 0x8FF;
} else {
sp1E = 0x8FC;
- gSaveContext.save.weekEventReg[34] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_34_02);
}
Message_StartTextbox(play, sp1E, &this->actor);
}
@@ -467,10 +467,10 @@ void func_80B67AB4(EnSth* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
this->actionFunc = func_80B67C1C;
- gSaveContext.save.weekEventReg[34] |= 0x40;
+ SET_WEEKEVENTREG(WEEKEVENTREG_34_40);
Message_StartTextbox(play, 0x918, &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);
}
}
@@ -481,10 +481,10 @@ void func_80B67B50(EnSth* this, PlayState* play) {
this->actor.parent = NULL;
this->actionFunc = func_80B67AB4;
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;
+ SET_WEEKEVENTREG(WEEKEVENTREG_34_08);
Actor_PickUp(&this->actor, play, GI_MASK_TRUTH, 10000.0f, 50.0f);
}
}
@@ -524,8 +524,8 @@ void func_80B67C1C(EnSth* this, PlayState* play) {
break;
case 0x91A:
- gSaveContext.save.weekEventReg[34] |= 0x40;
- gSaveContext.save.weekEventReg[34] &= (u8)~8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_34_40);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_34_08);
case 0x902:
case 0x903:
@@ -579,8 +579,8 @@ void EnSth_Update(Actor* thisx, PlayState* play) {
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)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_34_10) || CHECK_WEEKEVENTREG(WEEKEVENTREG_34_20) ||
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_34_40) || (Inventory_GetSkullTokenCount(play->sceneId) >= 30)) {
func_80B670A4(this, 3);
}
} else {
@@ -598,7 +598,7 @@ void EnSth_Update(Actor* thisx, PlayState* play) {
break;
case ENSTH_F_4:
- if (gSaveContext.save.weekEventReg[13] & 0x80) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_80)) {
func_80B670A4(this, 5);
} else {
func_80B670A4(this, 5);
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..857b92505 100644
--- a/src/overlays/actors/ovl_En_Sth/z_en_sth.h
+++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.h
@@ -32,6 +32,4 @@ typedef struct EnSth {
/* 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..ac615a8dd 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;
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..265332ffd 100644
--- a/src/overlays/actors/ovl_En_Sth2/z_en_sth2.h
+++ b/src/overlays/actors/ovl_En_Sth2/z_en_sth2.h
@@ -18,6 +18,4 @@ typedef struct EnSth2 {
/* 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 fe4882947..36dd9398e 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
@@ -17,13 +17,17 @@ void EnStoneheishi_Draw(Actor* thisx, PlayState* play);
void func_80BC9560(EnStoneheishi* this, PlayState* play);
void func_80BC9680(EnStoneheishi* this, PlayState* play);
-void func_80BC9908(EnStoneheishi* this, PlayState* play);
-void func_80BC9A2C(EnStoneheishi* this, PlayState* play);
+void EnStoneheishi_CheckGivenItem(EnStoneheishi* this, PlayState* play);
+void EnStoneheishi_DrinkBottleProcess(EnStoneheishi* this, PlayState* play);
void func_80BC9D28(EnStoneheishi* this, PlayState* play);
void func_80BC9E50(EnStoneheishi* this, PlayState* play);
+void func_80BC94B0(EnStoneheishi* this);
+void func_80BC9660(EnStoneheishi* this);
+void EnStoneheishi_SetupCheckGivenItem(EnStoneheishi*);
+void EnStoneheishi_GiveItemReward(EnStoneheishi* this, PlayState* play);
+void EnStoneheishi_SetupDrinkBottleProcess(EnStoneheishi* this);
-#if 0
-const ActorInit En_Stone_heishi_InitVars = {
+ActorInit En_Stone_heishi_InitVars = {
ACTOR_EN_STONE_HEISHI,
ACTORCAT_NPC,
FLAGS,
@@ -35,54 +39,497 @@ const ActorInit En_Stone_heishi_InitVars = {
(ActorFunc)EnStoneheishi_Draw,
};
-// static ColliderCylinderInit sCylinderInit = {
-static ColliderCylinderInit D_80BCA3A0 = {
- { 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,
+ },
{ 15, 70, 0, { 0, 0, 0 } },
};
-#endif
+static u16 sEnStoneHeishiTextIds[] = { 0x1473, 0x1474, 0x1475, 0x1476, 0x1477, 0x1478, 0x1479, 0x147A, 0x1472 };
-extern ColliderCylinderInit D_80BCA3A0;
+static AnimationHeader* sAnimations[] = {
+ &gSoldierStandHandOnHip, &gSoldierDrink, &gSoldierCheerWithSpear, &gSoldierWave,
+ &gSoldierSitAndReach, &gSoldierDrink, &gSoldierStandUp,
+};
-extern UNK_TYPE D_06000768;
-extern UNK_TYPE D_06003BFC;
+static u8 sAnimationModes[] = {
+ ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE,
+};
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stone_heishi/EnStoneheishi_Init.s")
+typedef enum {
+ /* 0 */ EN_STONE_ACTION_0,
+ /* 1 */ EN_STONE_ACTION_1,
+ /* 2 */ EN_STONE_ACTION_CHECK_ITEM,
+ /* 3 */ EN_STONE_ACTION_DRINK_BOTTLE,
+ /* 4 */ EN_STONE_ACTION_4
+} EnStoneHeishiAction;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stone_heishi/EnStoneheishi_Destroy.s")
+typedef enum {
+ /* 0 */ EN_STONE_DRINK_BOTTLE_INITIAL,
+ /* 1 */ EN_STONE_DRINK_BOTTLE_DRINKING,
+ /* 2 */ EN_STONE_DRINK_BOTTLE_EMPTY,
+ /* 3 */ EN_STONE_DRINK_BOTTLE_STAND_UP,
+ /* 4 */ EN_STONE_DRINK_BOTTLE_STANDING
+} EnStoneHeishiDrinkBottle;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stone_heishi/func_80BC935C.s")
+typedef enum {
+ /* 0 */ EN_STONE_BOTTLE_NONE,
+ /* 1 */ EN_STONE_BOTTLE_RED_POTION,
+ /* 2 */ EN_STONE_BOTTLE_EMPTY,
+ /* 3 */ EN_STONE_BOTTLE_BLUE_POTION,
+} EnStoneHeishiBottle;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stone_heishi/func_80BC941C.s")
+typedef enum {
+ /* 0 */ EN_STONE_HEISHI_ANIM_STAND_HAND_ON_HIP,
+ /* 1 */ EN_STONE_HEISHI_ANIM_DRINK_1,
+ /* 2 */ EN_STONE_HEISHI_ANIM_CHEER_WITH_SPEAR,
+ /* 3 */ EN_STONE_HEISHI_ANIM_WAVE,
+ /* 4 */ EN_STONE_HEISHI_ANIM_SIT_AND_REACH,
+ /* 5 */ EN_STONE_HEISHI_ANIM_DRINK_2,
+ /* 6 */ EN_STONE_HEISHI_ANIM_STAND_UP,
+} EnStoneHeishiAnimations;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stone_heishi/func_80BC94B0.s")
+void EnStoneheishi_Init(Actor* thisx, PlayState* play) {
+ EnStoneheishi* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stone_heishi/func_80BC9560.s")
+ ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gSoldierSkel, &gSoldierWave, this->jointTable, this->morphTable,
+ SOLDIER_LIMB_MAX);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stone_heishi/func_80BC9660.s")
+ this->actor.colChkInfo.mass = MASS_IMMOVABLE;
+ this->actor.targetMode = 6;
+ this->actor.gravity = -3.0f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stone_heishi/func_80BC9680.s")
+ Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stone_heishi/func_80BC98EC.s")
+ this->collider.dim.radius = 40;
+ this->collider.dim.height = 40;
+ this->collider.dim.yShift = 0;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stone_heishi/func_80BC9908.s")
+ func_80BC94B0(this);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stone_heishi/func_80BC9A10.s")
+void EnStoneheishi_Destroy(Actor* thisx, PlayState* play) {
+ EnStoneheishi* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stone_heishi/func_80BC9A2C.s")
+ Collider_DestroyCylinder(play, &this->collider);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stone_heishi/func_80BC9C88.s")
+void EnStoneheishi_ChangeAnim(EnStoneheishi* this, s32 animIndex) {
+ f32 startFrame = 0.0f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stone_heishi/func_80BC9D28.s")
+ this->animIndex = animIndex;
+ this->endFrame = Animation_GetLastFrame(sAnimations[animIndex]);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stone_heishi/func_80BC9E50.s")
+ // This will never pass since this animation index is never used.
+ if (animIndex == EN_STONE_HEISHI_ANIM_DRINK_2) {
+ startFrame = 55.0f;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stone_heishi/EnStoneheishi_Update.s")
+ Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, startFrame, this->endFrame,
+ sAnimationModes[this->animIndex], -10.0f);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stone_heishi/func_80BCA0AC.s")
+void EnStoneheishi_TrackPlayer(EnStoneheishi* this) {
+ s32 yawDiff = ABS_ALT((s16)(this->actor.yawTowardsPlayer - this->actor.world.rot.y));
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stone_heishi/func_80BCA104.s")
+ this->targetHeadRot.y = 0;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Stone_heishi/EnStoneheishi_Draw.s")
+ if ((this->actor.xzDistToPlayer < 200.0f) && (yawDiff < 0x4E20)) {
+ this->targetHeadRot.y = this->actor.yawTowardsPlayer - this->actor.world.rot.y;
+ if (this->targetHeadRot.y > 0x2710) {
+ this->targetHeadRot.y = 0x2710;
+ } else if (this->targetHeadRot.y < -0x2710) {
+ this->targetHeadRot.y = -0x2710;
+ }
+ }
+}
+
+void func_80BC94B0(EnStoneheishi* this) {
+ this->textIdIndex = 0;
+ 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;
+ } else { // Initial configuration
+ EnStoneheishi_ChangeAnim(this, EN_STONE_HEISHI_ANIM_WAVE);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_41_80)) {
+ this->textIdIndex = 2;
+ }
+ }
+ this->actor.textId = sEnStoneHeishiTextIds[this->textIdIndex];
+ this->action = EN_STONE_ACTION_0;
+ this->actionFunc = func_80BC9560;
+}
+
+void func_80BC9560(EnStoneheishi* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
+ s32 yawDiff;
+
+ if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
+ func_80BC9660(this);
+ return;
+ }
+
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_41_40) && (play->actorCtx.lensMaskSize != 100)) {
+ this->actor.flags |= ACTOR_FLAG_8000000;
+ return;
+ }
+
+ SkelAnime_Update(&this->skelAnime);
+
+ this->actor.flags &= ~ACTOR_FLAG_8000000;
+
+ yawDiff = ABS_ALT((s16)(this->actor.yawTowardsPlayer - this->actor.world.rot.y));
+
+ if ((yawDiff <= 0x18F0) && !(player->stateFlags1 & PLAYER_STATE1_800000)) {
+ func_800B8614(&this->actor, play, 70.0f);
+ }
+}
+
+void func_80BC9660(EnStoneheishi* this) {
+ this->textIdSet = false;
+ this->action = EN_STONE_ACTION_1;
+ this->actionFunc = func_80BC9680;
+}
+
+void func_80BC9680(EnStoneheishi* this, PlayState* play) {
+ f32 currentFrame = this->skelAnime.curFrame;
+
+ if ((this->textIdIndex == 0) || (this->textIdIndex == 2)) {
+ if (this->animIndex != EN_STONE_HEISHI_ANIM_SIT_AND_REACH) {
+ if (fabsf(this->headRot.x - this->targetHeadRot.x) < 50.0f) {
+ EnStoneheishi_ChangeAnim(this, EN_STONE_HEISHI_ANIM_SIT_AND_REACH);
+ }
+ return;
+ }
+ } else if (this->textIdIndex == 3) {
+ if (this->animIndex != EN_STONE_HEISHI_ANIM_WAVE) {
+ if ((this->timer == 0) && (fabsf(this->headRot.x - this->targetHeadRot.x) < 50.0f)) {
+ EnStoneheishi_ChangeAnim(this, EN_STONE_HEISHI_ANIM_WAVE);
+ }
+ return;
+ } else if (!this->textIdSet && (this->endFrame <= currentFrame)) {
+ Player* player = GET_PLAYER(play);
+
+ this->textIdSet = true;
+ player->actor.textId = sEnStoneHeishiTextIds[this->textIdIndex];
+
+ func_80151938(play, sEnStoneHeishiTextIds[this->textIdIndex]);
+ func_80151BB4(play, 0x12);
+ }
+ }
+
+ SkelAnime_Update(&this->skelAnime);
+
+ if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
+ func_801477B4(play);
+
+ if (this->textIdIndex == 2) {
+ func_80151938(play, 0xFF);
+ EnStoneheishi_SetupCheckGivenItem(this);
+ } else if (this->textIdIndex == 3) {
+ func_80BC94B0(this);
+ } else if (this->textIdIndex == 6) {
+ EnStoneheishi_GiveItemReward(this, play);
+ } else {
+ if (this->textIdIndex < 7) {
+ this->textIdIndex++;
+ } else {
+ func_80151BB4(play, 0x12);
+ func_80BC94B0(this);
+ return;
+ }
+ func_80151938(play, sEnStoneHeishiTextIds[this->textIdIndex]);
+ }
+ }
+}
+
+void EnStoneheishi_SetupCheckGivenItem(EnStoneheishi* this) {
+ this->action = EN_STONE_ACTION_CHECK_ITEM;
+ this->actionFunc = EnStoneheishi_CheckGivenItem;
+}
+
+void EnStoneheishi_CheckGivenItem(EnStoneheishi* this, PlayState* play) {
+ PlayerItemAction itemAction;
+
+ SkelAnime_Update(&this->skelAnime);
+
+ if (Message_GetState(&play->msgCtx) == TEXT_STATE_16) {
+ itemAction = func_80123810(play);
+
+ if (itemAction > PLAYER_IA_NONE) {
+ this->timer = 40;
+ func_801477B4(play);
+
+ if ((itemAction == PLAYER_IA_BOTTLE_POTION_RED) || (itemAction == PLAYER_IA_BOTTLE_POTION_BLUE)) {
+ this->playerGivesBluePotion = false;
+ if (itemAction == PLAYER_IA_BOTTLE_POTION_BLUE) {
+ this->playerGivesBluePotion = true;
+ }
+ EnStoneheishi_SetupDrinkBottleProcess(this);
+ } else {
+ Player* player = GET_PLAYER(play);
+
+ this->textIdIndex = 3;
+ player->actor.textId = 0;
+ SET_WEEKEVENTREG(WEEKEVENTREG_41_80);
+ this->action = EN_STONE_ACTION_1;
+ this->actionFunc = func_80BC9680;
+ }
+ } else if (itemAction <= PLAYER_IA_MINUS1) {
+ func_801477B4(play);
+ func_80151BB4(play, 0x12);
+ func_80BC94B0(this);
+ }
+ }
+}
+
+void EnStoneheishi_SetupDrinkBottleProcess(EnStoneheishi* this) {
+ this->action = EN_STONE_ACTION_DRINK_BOTTLE;
+ this->actionFunc = EnStoneheishi_DrinkBottleProcess;
+}
+
+void EnStoneheishi_DrinkBottleProcess(EnStoneheishi* this, PlayState* play) {
+ f32 currentFrame = this->skelAnime.curFrame;
+ Player* player = GET_PLAYER(play);
+
+ SkelAnime_Update(&this->skelAnime);
+
+ switch (this->drinkBottleState) {
+ case EN_STONE_DRINK_BOTTLE_INITIAL:
+ if (this->timer == 0) {
+ this->textIdIndex = 4;
+ func_80151938(play, sEnStoneHeishiTextIds[this->textIdIndex]);
+ player->actor.textId = sEnStoneHeishiTextIds[this->textIdIndex];
+ this->drinkBottleState++;
+ }
+
+ default:
+ break;
+
+ case EN_STONE_DRINK_BOTTLE_DRINKING:
+ if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
+ Player* player = GET_PLAYER(play);
+
+ play->msgCtx.msgLength = 0;
+ player->actor.textId = 0;
+ player->exchangeItemId = PLAYER_IA_NONE;
+ this->bottleDisplay = EN_STONE_BOTTLE_RED_POTION;
+
+ if (this->playerGivesBluePotion) {
+ this->bottleDisplay = EN_STONE_BOTTLE_BLUE_POTION;
+ }
+
+ Player_SetModels(player, 3);
+ EnStoneheishi_ChangeAnim(this, EN_STONE_HEISHI_ANIM_DRINK_1);
+ this->timer = 30;
+ this->drinkBottleState++;
+ }
+ break;
+
+ case EN_STONE_DRINK_BOTTLE_EMPTY:
+ 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);
+ Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE);
+ }
+ } else {
+ this->drinkBottleState++;
+ }
+ break;
+
+ case EN_STONE_DRINK_BOTTLE_STAND_UP:
+ if (this->endFrame <= currentFrame) {
+ Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900);
+ this->bottleDisplay = EN_STONE_BOTTLE_NONE;
+ EnStoneheishi_ChangeAnim(this, EN_STONE_HEISHI_ANIM_STAND_UP);
+ this->drinkBottleState++;
+ }
+ break;
+
+ case EN_STONE_DRINK_BOTTLE_STANDING:
+ if (this->endFrame <= currentFrame) {
+ this->textIdIndex = 5;
+ func_80151938(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;
+ this->actionFunc = func_80BC9680;
+ }
+ break;
+ }
+}
+
+void EnStoneheishi_GiveItemReward(EnStoneheishi* this, PlayState* play) {
+ func_801477B4(play);
+
+ if (INV_CONTENT(ITEM_MASK_STONE) == ITEM_MASK_STONE) {
+ Actor_PickUp(&this->actor, play, GI_RUPEE_BLUE, 300.0f, 300.0f);
+ } else {
+ Actor_PickUp(&this->actor, play, GI_MASK_STONE, 300.0f, 300.0f);
+ }
+
+ this->action = EN_STONE_ACTION_4;
+ this->actionFunc = func_80BC9D28;
+}
+
+void func_80BC9D28(EnStoneheishi* this, PlayState* play) {
+ SkelAnime_Update(&this->skelAnime);
+
+ if (Actor_HasParent(&this->actor, play)) {
+ this->actor.parent = NULL;
+ this->textIdIndex++;
+ this->actor.textId = sEnStoneHeishiTextIds[this->textIdIndex];
+ SET_WEEKEVENTREG(WEEKEVENTREG_41_40);
+ Actor_ProcessTalkRequest(&this->actor, &play->state);
+ 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);
+ } else {
+ Actor_PickUp(&this->actor, play, GI_MASK_STONE, 300.0f, 300.0f);
+ }
+}
+
+void func_80BC9E50(EnStoneheishi* this, PlayState* play) {
+ SkelAnime_Update(&this->skelAnime);
+
+ if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
+ func_80151BB4(play, 0x35);
+ func_80151BB4(play, 0x12);
+ this->action = EN_STONE_ACTION_1;
+ this->actionFunc = func_80BC9680;
+ } else {
+ func_800B8500(&this->actor, play, 400.0f, 400.0f, PLAYER_IA_MINUS1);
+ }
+}
+
+void EnStoneheishi_Update(Actor* thisx, PlayState* play) {
+ s32 pad;
+ EnStoneheishi* this = THIS;
+ Player* player = GET_PLAYER(play);
+
+ if (this->timer != 0) {
+ this->timer--;
+ }
+
+ 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_SetScale(&this->actor, 0.01f);
+
+ 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)) ||
+ (this->action == EN_STONE_ACTION_CHECK_ITEM)) ||
+ ((this->action == EN_STONE_ACTION_DRINK_BOTTLE) &&
+ (this->drinkBottleState <= EN_STONE_DRINK_BOTTLE_DRINKING)))) {
+ EnStoneheishi_TrackPlayer(this);
+ } else {
+ this->targetHeadRot.y = 0;
+ }
+
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_41_40)) {
+ Actor_SetFocus(&this->actor, 30.0f);
+ } else {
+ Actor_SetFocus(&this->actor, 60.0f);
+ }
+
+ Math_SmoothStepToS(&this->headRot.y, this->targetHeadRot.y, 1, 0xBB8, 0);
+ Math_SmoothStepToS(&this->headRot.x, this->targetHeadRot.x, 1, 0x3E8, 0);
+
+ Collider_UpdateCylinder(&this->actor, &this->collider);
+ CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
+ }
+}
+
+s32 EnStoneheishi_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx,
+ Gfx** gfxp) {
+ EnStoneheishi* this = THIS;
+
+ if (limbIndex == SOLDIER_LIMB_HEAD) {
+ rot->x += this->headRot.y;
+ rot->y += this->headRot.x;
+ rot->z += this->headRot.z;
+ }
+
+ return false;
+}
+
+void EnStoneheishi_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx, Gfx** gfxp) {
+ static Vec3f sLeftHandPos = { 0.0f, 0.0f, 0.0f };
+ EnStoneheishi* this = THIS;
+ Gfx* gfx;
+
+ if ((limbIndex == SOLDIER_LIMB_LEFT_HAND) && (this->bottleDisplay != EN_STONE_BOTTLE_NONE)) {
+ gfx = func_8012C2B4(*gfxp);
+
+ sLeftHandPos.x = 320.0f;
+ sLeftHandPos.y = 210.0f;
+ sLeftHandPos.z = 440.0f;
+
+ Matrix_Translate(sLeftHandPos.x, sLeftHandPos.y, sLeftHandPos.z, MTXMODE_APPLY);
+
+ gDPPipeSync(gfx++);
+
+ Matrix_RotateYS(-0x1770, MTXMODE_APPLY);
+ Matrix_RotateXS(0x7D0, MTXMODE_APPLY);
+ Matrix_RotateZS(-0x7530, MTXMODE_APPLY);
+
+ if (this->bottleDisplay != EN_STONE_BOTTLE_EMPTY) {
+ if (this->bottleDisplay == EN_STONE_BOTTLE_BLUE_POTION) {
+ gDPSetEnvColor(gfx++, 0, 0, 200, 0); // Blue Potion
+ } else {
+ gDPSetEnvColor(gfx++, 200, 0, 0, 0); // Red Potion
+ }
+ gSPMatrix(gfx++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(gfx++, gSoldierBottleContentsDL);
+ }
+
+ gSPMatrix(gfx++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(gfx++, gSoldierBottleDL);
+
+ *gfxp = gfx++;
+ }
+}
+
+void EnStoneheishi_Draw(Actor* thisx, PlayState* play) {
+ EnStoneheishi* this = THIS;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_41_40)) {
+ func_8012C2DC(play->state.gfxCtx);
+
+ POLY_XLU_DISP =
+ SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
+ EnStoneheishi_OverrideLimbDraw, EnStoneheishi_PostLimbDraw, &this->actor, POLY_XLU_DISP);
+ } else {
+ func_8012C28C(play->state.gfxCtx);
+
+ POLY_OPA_DISP =
+ SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
+ EnStoneheishi_OverrideLimbDraw, EnStoneheishi_PostLimbDraw, &this->actor, POLY_OPA_DISP);
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
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 f4eb8e5f2..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
@@ -2,6 +2,7 @@
#define Z_EN_STONE_HEISHI_H
#include "global.h"
+#include "assets/objects/object_sdn/object_sdn.h"
struct EnStoneheishi;
@@ -9,11 +10,22 @@ typedef void (*EnStoneheishiActionFunc)(struct EnStoneheishi*, PlayState*);
typedef struct EnStoneheishi {
/* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0x110];
+ /* 0x144 */ SkelAnime skelAnime;
+ /* 0x188 */ Vec3s jointTable[SOLDIER_LIMB_MAX];
+ /* 0x1EE */ Vec3s morphTable[SOLDIER_LIMB_MAX];
/* 0x254 */ EnStoneheishiActionFunc actionFunc;
- /* 0x258 */ char unk_258[0x6C];
+ /* 0x258 */ Vec3s headRot;
+ /* 0x25E */ Vec3s targetHeadRot;
+ /* 0x264 */ s32 animIndex;
+ /* 0x268 */ s16 timer;
+ /* 0x26A */ s16 drinkBottleState;
+ /* 0x26C */ f32 endFrame;
+ /* 0x270 */ s16 action;
+ /* 0x272 */ s16 textIdIndex;
+ /* 0x274 */ s16 textIdSet;
+ /* 0x276 */ u8 bottleDisplay;
+ /* 0x277 */ u8 playerGivesBluePotion;
+ /* 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..c4d56b70a 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
@@ -20,7 +20,7 @@ void func_80AE7F34(EnStopheishi* this, PlayState* play);
void func_80AE85C4(EnStopheishi* this, PlayState* play);
#if 0
-const ActorInit En_Stop_heishi_InitVars = {
+ActorInit En_Stop_heishi_InitVars = {
ACTOR_EN_STOP_HEISHI,
ACTORCAT_NPC,
FLAGS,
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..8e27f1c36 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
@@ -14,6 +14,4 @@ typedef struct EnStopheishi {
/* 0x258 */ char unk_258[0x90];
} 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..93c93eef9 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),
@@ -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) {
@@ -364,7 +364,7 @@ void func_80BAAB78(EnSuttari* this, PlayState* play) {
} 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;
@@ -456,7 +456,7 @@ void func_80BAAFDC(EnSuttari* this, PlayState* play) {
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;
}
@@ -489,7 +489,7 @@ void func_80BAB1A0(EnSuttari* this, PlayState* play) {
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 RADF_TO_BINANG(Math_Atan2F_XY(diffZ, diffX));
}
s32 func_80BAB758(EnSuttari* this, Path* path, s32 arg2) {
@@ -858,12 +858,12 @@ 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 (!CHECK_WEEKEVENTREG(WEEKEVENTREG_83_04) && !(this->flags1 & 0x1000)) {
if (ActorCutscene_GetCanPlayNext(this->cutscenes[0])) {
ActorCutscene_Start(this->cutscenes[0], &this->actor);
- if (!(player->stateFlags1 & 0x10000000)) {
+ if (!(player->stateFlags1 & PLAYER_STATE1_10000000)) {
this->flags2 |= 0x10;
- player->stateFlags1 |= 0x10000000;
+ player->stateFlags1 |= PLAYER_STATE1_10000000;
}
this->flags1 |= 0x1000;
this->flags2 |= 2;
@@ -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,11 +963,11 @@ 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]);
@@ -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,8 +988,8 @@ 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;
@@ -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) {
@@ -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,7 +1116,7 @@ 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;
} else if (Player_GetMask(play) != PLAYER_MASK_STONE) {
@@ -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;
@@ -1201,7 +1201,7 @@ 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;
} else {
@@ -1209,7 +1209,7 @@ void func_80BAD380(EnSuttari* this, PlayState* play) {
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]);
play->msgCtx.msgMode = 0x43;
@@ -1220,18 +1220,18 @@ 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;
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);
@@ -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);
@@ -1401,7 +1401,7 @@ void func_80BADD0C(EnSuttari* this, PlayState* play) {
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);
@@ -1434,7 +1434,7 @@ 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) {
@@ -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);
@@ -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)) {
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..669cf549e 100644
--- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.h
+++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.h
@@ -60,6 +60,4 @@ typedef struct EnSuttari {
/* 0x45A */ s16 cutsceneIdx;
} 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..d8dd72923 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,
@@ -738,7 +738,7 @@ 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)) {
+ if ((player->stateFlags1 & PLAYER_STATE1_200000) && (this->actor.xyzDistToPlayerSq < 8000.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALWALL_LAUGH);
Math_Vec3f_Copy(&this->unk_374, &player->actor.world.pos);
this->unk_410 &= ~0x20;
@@ -761,7 +761,7 @@ 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);
@@ -794,7 +794,7 @@ void func_808DA578(EnSw* this, PlayState* play) {
if ((this->actor.speedXZ == 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) {
@@ -825,7 +825,7 @@ void func_808DA6FC(EnSw* this, PlayState* play) {
if ((this->actor.speedXZ == 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 {
@@ -916,7 +916,7 @@ 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);
@@ -967,7 +967,7 @@ void func_808DACF4(EnSw* this, PlayState* play) {
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 {
@@ -1023,7 +1023,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 +1038,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);
}
@@ -1210,7 +1210,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 f3bce9c4f..1a2f8b685 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
@@ -11,7 +11,7 @@
#define THIS ((EnSyatekiCrow*)thisx)
-void EnSyatekiCrow_Init(Actor* thisx, PlayState* play);
+void EnSyatekiCrow_Init(Actor* thisx, PlayState* play2);
void EnSyatekiCrow_Destroy(Actor* thisx, PlayState* play);
void EnSyatekiCrow_Update(Actor* thisx, PlayState* play);
void EnSyatekiCrow_Draw(Actor* thisx, 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;
}
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 5e6f5925a..601095cfd 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
@@ -12,7 +12,7 @@
#define THIS ((EnSyatekiDekunuts*)thisx)
-void EnSyatekiDekunuts_Init(Actor* thisx, PlayState* play);
+void EnSyatekiDekunuts_Init(Actor* thisx, PlayState* play2);
void EnSyatekiDekunuts_Destroy(Actor* thisx, PlayState* play);
void EnSyatekiDekunuts_Update(Actor* thisx, PlayState* play);
void EnSyatekiDekunuts_Draw(Actor* thisx, PlayState* play);
@@ -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;
}
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..759e97206 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
@@ -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_63_01);
}
/**
@@ -334,19 +334,19 @@ void EnSyatekiMan_Swamp_HandleChoice(EnSyatekiMan* this, PlayState* play) {
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_63_01);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02);
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,8 +399,8 @@ 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;
@@ -408,13 +408,13 @@ void EnSyatekiMan_Swamp_HandleNormalMessage(EnSyatekiMan* this, PlayState* play)
break;
case 0xA32: // You have to try harder!
- if (gSaveContext.save.weekEventReg[63] & 2) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_02)) {
func_801477B4(play);
- player->stateFlags1 &= ~0x20;
- gSaveContext.save.weekEventReg[63] &= (u8)~1;
- gSaveContext.save.weekEventReg[63] &= (u8)~2;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_01);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02);
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_63_01);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02);
this->actionFunc = EnSyatekiMan_Swamp_Idle;
this->shootingGameState = SG_GAME_STATE_NONE;
}
@@ -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_63_01);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02);
}
} 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_63_01);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02);
this->actionFunc = EnSyatekiMan_Town_MovePlayerAndSayHighScore;
}
break;
@@ -759,7 +759,7 @@ 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);
@@ -767,10 +767,10 @@ void EnSyatekiMan_Town_HandleNormalMessage(EnSyatekiMan* this, PlayState* play)
break;
case 0x401: // You got [score]? Oh, that's too bad...
- if (gSaveContext.save.weekEventReg[63] & 2) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_02)) {
func_801477B4(play);
- gSaveContext.save.weekEventReg[63] &= (u8)~1;
- gSaveContext.save.weekEventReg[63] &= (u8)~2;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_01);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02);
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) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_02)) {
func_801477B4(play);
- gSaveContext.save.weekEventReg[63] &= (u8)~1;
- gSaveContext.save.weekEventReg[63] &= (u8)~2;
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_01);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02);
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_63_01);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02);
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
this->actionFunc = EnSyatekiMan_Town_Idle;
this->shootingGameState = SG_GAME_STATE_NONE;
}
@@ -862,20 +862,20 @@ 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)) {
+ if ((CUR_UPG_VALUE(UPG_QUIVER) < 3) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_10)) {
Actor_PickUp(&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)) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_32_02)) {
Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f);
} else {
Actor_PickUp(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f);
@@ -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,12 +932,12 @@ 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)) {
+ if ((CUR_UPG_VALUE(UPG_QUIVER) < 3) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_20)) {
Actor_PickUp(&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);
}
- } else if (!(gSaveContext.save.weekEventReg[32] & 4)) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_32_04)) {
Actor_PickUp(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f);
} else {
Actor_PickUp(&this->actor, play, GI_RUPEE_HUGE, 500.0f, 100.0f);
@@ -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_63_01);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02);
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,13 +1005,13 @@ 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;
+ player->stateFlags1 &= ~PLAYER_STATE1_20;
Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_FOUND);
this->dekuScrubFlags = (1 << 4) | (1 << 3) | (1 << 2) | (1 << 1) | (1 << 0);
this->guayFlags = 0;
@@ -1076,7 +1076,7 @@ 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();
this->actionFunc = EnSyatekiMan_Swamp_EndGame;
@@ -1085,12 +1085,12 @@ 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();
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_63_02)) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_01);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_63_02);
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,7 +1166,7 @@ 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);
sBonusTimer = 0;
@@ -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;
@@ -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();
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..162a6d718 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
@@ -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;
}
@@ -370,7 +370,7 @@ void EnSyatekiOkuta_Update(Actor* thisx, PlayState* 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++;
+ play->interfaceCtx.minigamePoints++;
syatekiMan->score++;
syatekiMan->perGameVar2.octorokHitType = SG_OCTO_HIT_TYPE_RED;
} else {
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 c9caedf01..20871efb2 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
@@ -13,7 +13,7 @@
void EnSyatekiWf_Init(Actor* thisx, PlayState* play);
void EnSyatekiWf_Destroy(Actor* thisx, PlayState* play);
-void EnSyatekiWf_Update(Actor* thisx, PlayState* play);
+void EnSyatekiWf_Update(Actor* thisx, PlayState* play2);
void EnSyatekiWf_Draw(Actor* thisx, PlayState* play);
void func_80A201CC(EnSyatekiWf* this);
@@ -101,7 +101,7 @@ static Vec3f D_80A20EDC = { 0.0f, 20.0f, 0.0f };
static Vec3f D_80A20EE8 = { 0.0f, 0.0f, 0.0f };
-const ActorInit En_Syateki_Wf_InitVars = {
+ActorInit En_Syateki_Wf_InitVars = {
ACTOR_EN_SYATEKI_WF,
ACTORCAT_ENEMY,
FLAGS,
@@ -156,7 +156,7 @@ void EnSyatekiWf_Init(Actor* thisx, PlayState* play) {
}
if (path == NULL) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
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..56770952f 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
@@ -35,6 +35,4 @@ typedef struct EnSyatekiWf {
/* 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..abd7c100c 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) {
@@ -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,7 +551,7 @@ 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);
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..a84059634 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);
@@ -407,7 +407,7 @@ 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);
Rumble_Request(this->actor.xzDistToPlayer, 240, 1, 12);
@@ -420,9 +420,9 @@ void EnTalkGibud_Grab(EnTalkGibud* this, PlayState* play) {
Actor_PlaySfxAtPos(&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;
}
@@ -703,10 +703,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 +723,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;
@@ -751,7 +752,7 @@ void EnTalkGibud_CheckPresentedItem(EnTalkGibud* this, PlayState* play) {
break;
}
func_801477B4(play);
- } else if (this->itemActionParam < PLAYER_AP_NONE) {
+ } else if (this->itemAction <= PLAYER_IA_MINUS1) {
Message_StartTextbox(play, 0x1389, &this->actor);
this->textId = 0x1389;
}
@@ -787,7 +788,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 +823,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);
}
- 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 +869,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);
}
}
@@ -895,8 +896,9 @@ 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))) {
+ !(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;
}
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 d45cc854c..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;
@@ -406,6 +406,8 @@ void func_80BB5AAC(EnTanron1* this, PlayState* play) {
Matrix_RotateXS(ptr->unk_18 * -1, MTXMODE_APPLY);
Matrix_Scale(1.0f, ptr->unk_2C, 1.0f, MTXMODE_APPLY);
+ if (1) {}
+
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, ovl_En_Tanron1_DL_001900);
}
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 542a564f5..332560403 100644
--- a/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c
+++ b/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c
@@ -16,7 +16,7 @@
void EnTanron2_Init(Actor* thisx, PlayState* play);
void EnTanron2_Destroy(Actor* thisx, PlayState* play);
void EnTanron2_Update(Actor* thisx, PlayState* play);
-void EnTanron2_Draw(Actor* thisx, PlayState* play);
+void EnTanron2_Draw(Actor* thisx, PlayState* play2);
void func_80BB69C0(EnTanron2* this);
void func_80BB69FC(EnTanron2* this, PlayState* play);
@@ -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);
@@ -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;
@@ -428,8 +428,8 @@ void func_80BB7578(EnTanron2* this, PlayState* play) {
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;
+ if ((player->targetedActor != NULL) && (&this->actor != player->targetedActor)) {
+ player->targetedActor = &this->actor;
play->actorCtx.targetContext.arrowPointedActor = &this->actor;
play->actorCtx.targetContext.targetedActor = &this->actor;
}
@@ -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..d991ab323 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,
@@ -211,7 +211,7 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) {
// 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;
}
@@ -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;
@@ -259,9 +259,9 @@ 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);
@@ -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,8 +343,8 @@ 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);
@@ -354,7 +354,7 @@ 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) {
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 e68ca1b3a..b53343931 100644
--- a/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c
+++ b/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c
@@ -10,7 +10,7 @@
#define THIS ((EnTanron4*)thisx)
-void EnTanron4_Init(Actor* thisx, PlayState* play);
+void EnTanron4_Init(Actor* thisx, PlayState* play2);
void EnTanron4_Destroy(Actor* thisx, PlayState* play);
void EnTanron4_Update(Actor* thisx, PlayState* play);
void EnTanron4_Draw(Actor* thisx, PlayState* play);
@@ -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,
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 45f88ffb7..c052c3309 100644
--- a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c
+++ b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c
@@ -15,15 +15,15 @@
void EnTanron5_Init(Actor* thisx, PlayState* play);
void EnTanron5_Destroy(Actor* thisx, PlayState* play);
-void EnTanron5_Update(Actor* thisx, PlayState* play);
+void EnTanron5_Update(Actor* thisx, PlayState* play2);
void EnTanron5_Draw(Actor* thisx, PlayState* play);
-void func_80BE5818(Actor* thisx, PlayState* play);
+void func_80BE5818(Actor* thisx, PlayState* play2);
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;
}
@@ -201,7 +201,7 @@ 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);
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 {
@@ -406,13 +406,13 @@ 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) {
@@ -435,7 +435,7 @@ void func_80BE5818(Actor* thisx, PlayState* play2) {
}
this->unk_1A0++;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
} else {
@@ -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..4faa072f9 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,
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 af2824c69..7f0a3e971 100644
--- a/src/overlays/actors/ovl_En_Test/z_en_test.c
+++ b/src/overlays/actors/ovl_En_Test/z_en_test.c
@@ -11,12 +11,12 @@
#define THIS ((EnTest*)thisx)
-void EnTest_Init(Actor* thisx, PlayState* play);
+void EnTest_Init(Actor* thisx, PlayState* play2);
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,
@@ -175,7 +175,7 @@ void EnTest_Init(Actor* thisx, PlayState* play2) {
thisx->floorHeight = BgCheck_EntityRaycastFloor3(&play->colCtx, &thisx->floorPoly, &sp34, &thisx->world.pos);
if ((thisx->floorPoly == NULL) || (thisx->floorHeight == BGCHECK_Y_MIN)) {
- Actor_MarkForDeath(thisx);
+ Actor_Kill(thisx);
return;
}
@@ -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,7 +250,7 @@ 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) {
@@ -263,11 +263,11 @@ void EnTest_Draw(Actor* thisx, PlayState* play) {
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..2b8d62993 100644
--- a/src/overlays/actors/ovl_En_Test/z_en_test.h
+++ b/src/overlays/actors/ovl_En_Test/z_en_test.h
@@ -28,6 +28,4 @@ typedef struct EnTest {
/* 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..257aea283 100644
--- a/src/overlays/actors/ovl_En_Test2/z_en_test2.c
+++ b/src/overlays/actors/ovl_En_Test2/z_en_test2.c
@@ -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)) {
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..dade95ee3 100644
--- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c
+++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c
@@ -4,18 +4,172 @@
* Description: Kafei
*/
+#include "prevent_bss_reordering.h"
#include "z_en_test3.h"
+#include "objects/object_test3/object_test3.h"
+#include "overlays/actors/ovl_En_Door/z_en_door.h"
+#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 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 +181,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) {
+ func_801477B4(play);
+ } else if (textId) { // != 0
+ func_80151938(play, textId);
+ }
+ if (textId == 0x296B) {
+ LinkAnimation_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 (ActorCutscene_GetCanPlayNext(this->unk_D8D)) {
+ ActorCutscene_StartAndSetUnkLinkFields(this->unk_D8D, &this->player.actor);
+ return true;
+ } else {
+ ActorCutscene_SetIntentToPlay(this->unk_D8D);
+ 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) {
+ ActorCutscene_Stop(0x7C);
+ ActorCutscene_SetIntentToPlay(this->unk_D8D);
+ 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) {
+ ActorCutscene_Stop(this->unk_D8D);
+ this->unk_D8D = 0x7C;
+ ActorCutscene_SetIntentToPlay(this->unk_D8D);
+ 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.unk_A86 = -1;
+ 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 != 0) {
+ play->startPlayerCutscene(play, &this->player, 6);
+ }
+}
-#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_XZDistanceBetweenActors(&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.unk_A86 = -1;
+ 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->unk_D8D = this->player.actor.cutscene;
+}
+
+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->unk_D8D = this->player.actor.cutscene;
+}
+
+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);
+ ActorCutscene_SetReturnCamera(this->subCamId);
+ play->startPlayerCutscene(play, &this->player, 7);
+ }
+ 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_YawBetweenActors(&this->player.actor, postActor);
+ }
+ play->startPlayerCutscene(play, &this->player, 0x61);
+ 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, 0x15);
+ }
+ } 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->unk_D8D = this->player.actor.cutscene;
+ this->player.actor.textId = this->unk_D78->textId;
+ }
+ } else if (D_80A41D20 == 1) {
+ if (this->unk_D8D >= 0) {
+ if (func_80A3E9DC(this, play)) {
+ this->unk_D8D = -1;
+ Environment_StopTime();
+ }
+ } else if ((play->actorCtx.flags & ACTORCTX_FLAG_6) || (play->actorCtx.flags & ACTORCTX_FLAG_5)) {
+ this->unk_D8D = ActorCutscene_GetAdditionalCutscene(this->player.actor.cutscene);
+ SET_WEEKEVENTREG(WEEKEVENTREG_90_02);
+ if (play->actorCtx.flags & ACTORCTX_FLAG_5) {
+ this->unk_D8D = ActorCutscene_GetAdditionalCutscene(this->unk_D8D);
+ }
+ Audio_QueueSeqCmd(NA_BGM_STOP | 0x10000);
+ D_80A41D20 = 2;
+ } else {
+ func_80A3F73C(this, play);
+ }
+ } else if ((D_80A41D20 == 2) && func_80A3E9DC(this, play)) {
+ ActorCutscene_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->unk_D8D = ActorCutscene_GetAdditionalCutscene(this->player.actor.cutscene);
+ 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) {
+ ActorCutscene_Stop(this->unk_D8D);
+ 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->unk_D8D = this->player.actor.cutscene;
+ if (play->roomCtx.curRoom.num == 2) {
+ this->unk_D8D = ActorCutscene_GetAdditionalCutscene(this->unk_D8D);
+ }
+ 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, 0x6E);
+ }
+ 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);
+ ActorCutscene_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_CheckActorAction(play, 0x1FA) &&
+ !((this->player.actor.category == ACTORCAT_PLAYER) &&
+ ((play->actorCtx.flags & ACTORCTX_FLAG_5) || (play->actorCtx.flags & ACTORCTX_FLAG_4)))) {
+ if (this->player.csMode != 5) {
+ play->startPlayerCutscene(play, &this->player, 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, 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.unk_AAC.z;
+ rot->y -= this->player.unk_AAC.y;
+ rot->z += this->player.unk_AAC.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.unk_AB2.y != 0) {
+ Matrix_RotateYS(this->player.unk_AB2.y, MTXMODE_APPLY);
+ }
+ Matrix_RotateXS(this->player.unk_AB2.x, MTXMODE_APPLY);
+ if (this->player.unk_AB2.z != 0) {
+ Matrix_RotateZS(this->player.unk_AB2.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.getItemDrawId - 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 {
+ func_80128B74(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 = func_801660B8(play, POLY_OPA_DISP);
+ }
+ if ((this->player.getItemDrawId - 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..a4f1ff659 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 unk_D8D;
+ /* 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..1dcb6ccb4 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,
@@ -58,7 +59,7 @@ void func_80A41D70(EnTest4* this, PlayState* play) {
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);
@@ -70,7 +71,7 @@ void func_80A41D70(EnTest4* this, PlayState* play) {
this->actionFunc = func_80A42F20;
sCurrentCs = sCutscenes[this->unk_144];
this->transitionCsTimer = 0;
- gSaveContext.eventInf[1] |= 0x80;
+ SET_EVENTINF(EVENTINF_17);
} else if (this->unk_144 == 0) {
play_sound(NA_SE_EV_CHICKEN_CRY_M);
} else {
@@ -94,7 +95,7 @@ void func_80A41FA4(EnTest4* this, PlayState* play) {
} else if ((sCutscenes[this->unk_144] < 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);
@@ -107,7 +108,7 @@ void func_80A41FA4(EnTest4* this, PlayState* play) {
this->actionFunc = func_80A42F20;
sCurrentCs = sCutscenes[this->unk_144];
this->transitionCsTimer = 0;
- gSaveContext.eventInf[1] |= 0x80;
+ SET_EVENTINF(EVENTINF_17);
} else if (this->unk_144 == 0) {
play_sound(NA_SE_EV_CHICKEN_CRY_M);
} else {
@@ -297,15 +298,15 @@ void EnTest4_Init(Actor* thisx, PlayState* play) {
if (temp_v0 >= 0) {
ActorCutscene* temp_v0_2 = ActorCutscene_GetCutscene(sCutscenes[0]);
- gSaveContext.eventInf[5] |= 0x4;
+ SET_EVENTINF(EVENTINF_52);
sCutscenes[1] = temp_v0_2->additionalCutscene;
} else {
- gSaveContext.eventInf[5] &= (u8)~0x4;
+ CLEAR_EVENTINF(EVENTINF_52);
sCutscenes[1] = sCutscenes[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;
@@ -319,7 +320,7 @@ void EnTest4_Init(Actor* thisx, PlayState* play) {
SET_NEXT_GAMESTATE(&play->state, DayTelop_Init, sizeof(DayTelopState));
this->unk_144 = 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;
@@ -333,7 +334,7 @@ void EnTest4_Init(Actor* thisx, PlayState* play) {
func_80A41D70(this, play);
if ((gSaveContext.cutsceneTrigger == 0) && (sCutscenes[this->unk_144] >= 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))) {
@@ -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;
+ Actor_Kill(&this->actor);
+ SET_EVENTINF(EVENTINF_17);
} else if (((sCutscenes[this->unk_144] < 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,13 +413,13 @@ 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;
+ player->stateFlags1 |= PLAYER_STATE1_200;
this->unk_146 = gSaveContext.save.time;
} else {
if (this->unk_144 == 0) {
@@ -441,9 +442,9 @@ void func_80A42AB8(EnTest4* this, PlayState* play) {
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);
@@ -456,8 +457,8 @@ 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);
+ player->stateFlags1 |= PLAYER_STATE1_200;
+ Actor_Kill(&this->actor);
}
func_80A42198(this);
} else {
@@ -494,7 +495,7 @@ 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;
@@ -507,8 +508,9 @@ void func_80A42F20(EnTest4* this, PlayState* play) {
if (sCurrentCs >= 0) {
ActorCutscene_Stop(sCurrentCs);
}
+
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..0a372f245 100644
--- a/src/overlays/actors/ovl_En_Test4/z_en_test4.h
+++ b/src/overlays/actors/ovl_En_Test4/z_en_test4.h
@@ -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 57db36ea6..83451fa02 100644
--- a/src/overlays/actors/ovl_En_Test5/z_en_test5.c
+++ b/src/overlays/actors/ovl_En_Test5/z_en_test5.c
@@ -10,13 +10,13 @@
#define THIS ((EnTest5*)thisx)
-void EnTest5_Init(Actor* thisx, PlayState* play);
+void EnTest5_Init(Actor* thisx, PlayState* play2);
void EnTest5_Destroy(Actor* thisx, PlayState* play);
-void EnTest5_Update(Actor* thisx, PlayState* play);
+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;
}
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 23dccca0f..c0915fce6 100644
--- a/src/overlays/actors/ovl_En_Test6/z_en_test6.c
+++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.c
@@ -12,8 +12,8 @@
#define THIS ((EnTest6*)thisx)
-void EnTest6_Init(Actor* thisx, PlayState* play);
-void EnTest6_Destroy(Actor* thisx, PlayState* play);
+void EnTest6_Init(Actor* thisx, PlayState* play2);
+void EnTest6_Destroy(Actor* thisx, PlayState* play2);
void EnTest6_Update(Actor* thisx, PlayState* play);
void EnTest6_Draw(Actor* thisx, PlayState* play);
@@ -42,7 +42,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,
@@ -125,7 +125,7 @@ void func_80A90730(EnTest6* this, PlayState* play) {
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 +134,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 +144,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 +154,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 +162,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;
@@ -240,8 +240,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 +253,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);
@@ -302,7 +302,7 @@ 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);
+ Actor_Kill(&this->actor);
return;
}
@@ -395,10 +395,10 @@ void func_80A916F0(EnTest6* this, PlayState* play) {
player->actor.freezeTimer = 0;
play->unk_18844 = 0;
ActorCutscene_Stop(play->playerActorCsIds[8]);
- func_800B7298(play, NULL, 6);
+ func_800B7298(play, NULL, PLAYER_CSMODE_6);
func_80A90C34();
Distortion_ClearType(DISTORTION_TYPE_5);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
void func_80A91760(EnTest6* this, PlayState* play) {
@@ -537,22 +537,22 @@ void func_80A91760(EnTest6* this, PlayState* play) {
}
if (this->unk_286 != 0) {
- func_800B7298(play, NULL, 7);
+ func_800B7298(play, NULL, PLAYER_CSMODE_7);
} 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);
}
}
@@ -616,10 +616,10 @@ void func_80A92118(EnTest6* this, PlayState* play) {
player->actor.freezeTimer = 0;
play->unk_18844 = 0;
ActorCutscene_Stop(play->playerActorCsIds[8]);
- func_800B7298(play, NULL, 6);
+ func_800B7298(play, NULL, PLAYER_CSMODE_6);
func_80A90C34();
Distortion_ClearType(DISTORTION_TYPE_5);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
void func_80A92188(EnTest6* this, PlayState* play) {
@@ -722,7 +722,7 @@ void func_80A92188(EnTest6* this, PlayState* play) {
case 1:
func_80A90C34();
- if (gSaveContext.eventInf[5] & 4) {
+ if (CHECK_EVENTINF(EVENTINF_52)) {
this->unk_274 = 9;
}
break;
@@ -764,23 +764,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_7);
break;
case 14:
@@ -972,14 +972,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;
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;
}
@@ -1053,7 +1053,8 @@ 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;
@@ -1272,7 +1273,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,
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..ec06afb91 100644
--- a/src/overlays/actors/ovl_En_Test6/z_en_test6.h
+++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.h
@@ -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 e1223cddb..43facd831 100644
--- a/src/overlays/actors/ovl_En_Test7/z_en_test7.c
+++ b/src/overlays/actors/ovl_En_Test7/z_en_test7.c
@@ -11,7 +11,7 @@
#define THIS ((EnTest7*)thisx)
-void EnTest7_Init(Actor* thisx, PlayState* play);
+void EnTest7_Init(Actor* thisx, PlayState* play2);
void EnTest7_Destroy(Actor* thisx, PlayState* play);
void EnTest7_Update(Actor* thisx, PlayState* play);
void EnTest7_Draw(Actor* thisx, PlayState* play);
@@ -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,
@@ -413,12 +413,12 @@ void EnTest7_Init(Actor* thisx, PlayState* play2) {
}
if (play->playerActorCsIds[8] == -1) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
ActorCutscene_SetIntentToPlay(play->playerActorCsIds[8]);
- player2->stateFlags1 |= 0x20;
+ 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);
@@ -594,11 +594,11 @@ 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;
+ 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 = 0;
this->unk_144 &= ~4;
func_80AF082C(this, func_80AF21E8);
@@ -612,13 +612,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,10 +667,10 @@ 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_20_02)) {
play->nextEntrance = ENTRANCE(SOUTHERN_SWAMP_CLEARED, 10);
} else if ((play->nextEntrance == ENTRANCE(MOUNTAIN_VILLAGE_WINTER, 8)) &&
- (gSaveContext.save.weekEventReg[33] & 0x80)) {
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_33_80)) {
play->nextEntrance = ENTRANCE(MOUNTAIN_VILLAGE_SPRING, 8);
}
}
@@ -759,7 +759,7 @@ 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) {
@@ -911,7 +911,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 +919,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 +957,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..947f97b62 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,
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 dd4890d53..58f44d468 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)
@@ -12,7 +13,7 @@
void EnThiefbird_Init(Actor* thisx, PlayState* play);
void EnThiefbird_Destroy(Actor* thisx, PlayState* play);
-void EnThiefbird_Update(Actor* thisx, PlayState* play);
+void EnThiefbird_Update(Actor* thisx, PlayState* play2);
void EnThiefbird_Draw(Actor* thisx, PlayState* play);
void func_80C11538(EnThiefbird* this);
@@ -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;
@@ -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);
}
}
@@ -561,9 +572,9 @@ 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 & 1) || (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);
@@ -657,7 +668,7 @@ void func_80C11DF0(EnThiefbird* this, PlayState* play) {
}
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -830,7 +841,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);
}
}
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..4e09f01a9 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
@@ -30,7 +30,7 @@ void func_80ACA724(EnTimeTag* this, PlayState* play);
void func_80ACA7C4(EnTimeTag* this, PlayState* play);
void func_80ACA840(EnTimeTag* this, PlayState* play);
-const ActorInit En_Time_Tag_InitVars = {
+ActorInit En_Time_Tag_InitVars = {
ACTOR_EN_TIME_TAG,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -49,8 +49,8 @@ void EnTimeTag_Init(Actor* thisx, PlayState* play) {
switch (ENTIMETAG_GET_E000(&this->actor)) {
case 4:
- if ((gSaveContext.save.weekEventReg[8] & 0x40) || (CURRENT_DAY != 3)) {
- Actor_MarkForDeath(&this->actor);
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40) || (CURRENT_DAY != 3)) {
+ Actor_Kill(&this->actor);
return;
}
this->actor.home.rot.x = 0;
@@ -91,9 +91,9 @@ void func_80AC9FE4(EnTimeTag* this, PlayState* play) {
ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
this->actionFunc = func_80AC9FD4;
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);
@@ -273,8 +273,8 @@ void func_80ACA724(EnTimeTag* this, PlayState* play) {
}
void func_80ACA7C4(EnTimeTag* this, PlayState* play) {
- if (!(gSaveContext.save.weekEventReg[63] & 1) && !(gSaveContext.save.weekEventReg[63] & 2)) {
- func_800B7298(play, &this->actor, 7);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_63_01) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_63_02)) {
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_7);
Message_StartTextbox(play, ENTIMETAG_GET_1FE0(&this->actor) + 0x1883, NULL);
this->actionFunc = func_80ACA724;
}
@@ -287,15 +287,15 @@ void func_80ACA840(EnTimeTag* this, PlayState* play) {
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) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_01)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_63_02)) {
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;
+ SET_WEEKEVENTREG(WEEKEVENTREG_63_02);
}
} 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);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_7);
Message_StartTextbox(play, ENTIMETAG_GET_1FE0(&this->actor) + 0x1883, NULL);
this->actionFunc = func_80ACA724;
}
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..ed6b611e4 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
@@ -17,6 +17,4 @@ typedef struct EnTimeTag {
/* 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..eb005b224 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,
@@ -668,12 +668,13 @@ 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;
}
}
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..4b87634a3 100644
--- a/src/overlays/actors/ovl_En_Tite/z_en_tite.h
+++ b/src/overlays/actors/ovl_En_Tite/z_en_tite.h
@@ -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..1bdc92b4a 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;
}
@@ -252,7 +252,7 @@ void EnTk_Init(Actor* thisx, PlayState* play) {
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;
}
}
@@ -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)) {
@@ -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);
@@ -595,7 +595,7 @@ void func_80AED610(EnTk* this, PlayState* play) {
case 0x1413:
Rupees_ChangeBy(30);
- gSaveContext.save.weekEventReg[60] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_60_02);
func_80151938(play, 0x13FF);
break;
@@ -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,10 +696,10 @@ 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);
}
}
@@ -735,7 +735,7 @@ void func_80AEDD4C(EnTk* this, PlayState* play) {
if (this->unk_2E8 <= 0) {
ActorCutscene_Stop(this->cutscenes[1]);
func_801477B4(play);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -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;
@@ -863,7 +863,7 @@ void func_80AEDF5C(EnTk* this, PlayState* play) {
break;
case 0x140A:
- gSaveContext.save.weekEventReg[52] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_52_80);
case 0x140B:
func_80AEE784(this, play);
@@ -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_YawToPoint(&this->actor, &sp30.unk_00->world.pos);
+ this->actionFunc = func_80AEE414;
}
void func_80AEE414(EnTk* this, PlayState* play) {
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..42a8aa96a 100644
--- a/src/overlays/actors/ovl_En_Tk/z_en_tk.h
+++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.h
@@ -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 2cb3cb193..75f966a3c 100644
--- a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c
+++ b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c
@@ -14,12 +14,12 @@
void EnTorch2_Init(Actor* thisx, PlayState* play);
void EnTorch2_Destroy(Actor* thisx, PlayState* play);
void EnTorch2_Update(Actor* thisx, PlayState* play);
-void EnTorch2_Draw(Actor* thisx, PlayState* play);
+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,11 +58,7 @@ 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) {
@@ -87,9 +83,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) {
@@ -153,17 +149,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..aefa6383f 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,7 +186,7 @@ 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);
@@ -258,7 +258,7 @@ void func_80BA39C8(EnToto* this, PlayState* play) {
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);
@@ -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);
@@ -357,7 +357,7 @@ 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_7);
}
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_6);
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,7 +480,7 @@ 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_6);
return 1;
}
return 0;
@@ -510,7 +510,7 @@ 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;
@@ -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);
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..3c95a7dbb 100644
--- a/src/overlays/actors/ovl_En_Toto/z_en_toto.h
+++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.h
@@ -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..caceb62bd 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,
@@ -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;
}
@@ -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;
@@ -253,7 +253,7 @@ s32 EnTrt_TestCancelOption(EnTrt* this, PlayState* play, Input* input) {
}
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 {
@@ -263,7 +263,7 @@ void EnTrt_SetupStartShopping(PlayState* play, EnTrt* this, u8 skipHello) {
void EnTrt_StartShopping(PlayState* play, EnTrt* this) {
func_80151938(play, 0x83E);
- func_8011552C(play, 6);
+ func_8011552C(play, DO_ACTION_DECIDE);
this->stickLeftPrompt.isEnabled = false;
this->stickRightPrompt.isEnabled = true;
this->actionFunc = EnTrt_FaceShopkeeper;
@@ -341,15 +341,15 @@ void EnTrt_GetMushroom(EnTrt* this, PlayState* play) {
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);
break;
case 0x888:
this->textId = 0x889;
@@ -375,7 +375,7 @@ 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);
this->actionFunc = EnTrt_SetupItemGiven;
} else {
Actor_PickUp(&this->actor, play, GI_RUPEE_RED, 300.0f, 300.0f);
@@ -400,7 +400,7 @@ 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);
this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED;
@@ -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,13 +446,13 @@ 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) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_10)) {
Actor_PickUp(&this->actor, play, GI_POTION_RED, 300.0f, 300.0f);
} else {
Actor_PickUp(&this->actor, play, GI_POTION_RED_BOTTLE, 300.0f, 300.0f);
@@ -467,7 +467,7 @@ void EnTrt_GivenRedPotionForKoume(EnTrt* this, PlayState* play) {
if (this->cutsceneState == ENTRT_CUTSCENESTATE_STOPPED) {
if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
- player->stateFlags2 |= 0x20000000;
+ player->stateFlags2 |= PLAYER_STATE2_20000000;
//! @bug: EnTrt_ContinueShopping gets overwritten by EnTrt_ItemGiven
this->actionFunc = EnTrt_ContinueShopping;
this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING;
@@ -479,7 +479,7 @@ void EnTrt_GivenRedPotionForKoume(EnTrt* this, PlayState* play) {
ActorCutscene_SetIntentToPlay(this->cutscene);
}
}
- func_800B85E0(&this->actor, play, 400.0f, PLAYER_AP_MINUS1);
+ func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1);
this->actionFunc = EnTrt_ItemGiven;
}
}
@@ -532,7 +532,7 @@ void EnTrt_FaceShopkeeper(EnTrt* this, PlayState* play) {
ActorCutscene_SetIntentToPlay(this->cutscene);
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);
}
@@ -634,7 +634,7 @@ 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) {
@@ -652,7 +652,7 @@ void EnTrt_SetupBuyItemWithFanfare(PlayState* play, EnTrt* this) {
Actor_PickUp(&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;
@@ -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:
@@ -753,7 +753,7 @@ void EnTrt_SelectItem(EnTrt* this, PlayState* play) {
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;
@@ -797,7 +797,7 @@ void EnTrt_IdleSleeping(EnTrt* this, PlayState* play) {
ActorCutscene_SetIntentToPlay(this->cutscene);
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)) &&
@@ -838,7 +838,7 @@ void EnTrt_IdleAwake(EnTrt* this, PlayState* play) {
ActorCutscene_SetIntentToPlay(this->cutscene);
this->cutsceneState = ENTRT_CUTSCENESTATE_WAITING;
}
- player->stateFlags2 |= 0x20000000;
+ player->stateFlags2 |= PLAYER_STATE2_20000000;
if (player->transformation == PLAYER_FORM_HUMAN) {
this->flags |= ENTRT_MET;
}
@@ -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;
@@ -952,7 +952,7 @@ 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);
this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED;
@@ -961,7 +961,7 @@ void EnTrt_TryToGiveRedPotionAfterSurprised(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;
}
@@ -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;
}
@@ -999,7 +999,7 @@ void EnTrt_ItemGiven(EnTrt* this, PlayState* play) {
if (this->cutsceneState == ENTRT_CUTSCENESTATE_STOPPED) {
if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
ActorCutscene_StartAndSetFlag(this->cutscene, &this->actor);
- player->stateFlags2 |= 0x20000000;
+ player->stateFlags2 |= PLAYER_STATE2_20000000;
this->actionFunc = EnTrt_ContinueShopping;
this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING;
} else {
@@ -1031,7 +1031,7 @@ void EnTrt_ItemGiven(EnTrt* this, PlayState* play) {
}
func_80151938(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_20_02)) {
play->nextEntrance = ENTRANCE(SOUTHERN_SWAMP_CLEARED, 5);
} else {
play->nextEntrance = ENTRANCE(SOUTHERN_SWAMP_POISONED, 5);
@@ -1104,7 +1104,7 @@ void EnTrt_SetupItemGiven(EnTrt* this, PlayState* play) {
this->cutscene = this->lookToShopkeeperCutscene;
ActorCutscene_SetIntentToPlay(this->cutscene);
}
- 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,7 +1380,7 @@ 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)) {
@@ -1391,16 +1391,16 @@ void EnTrt_TalkToShopkeeper(EnTrt* this, PlayState* play) {
}
}
} 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) {
@@ -1412,7 +1412,7 @@ void EnTrt_TalkToShopkeeper(EnTrt* this, PlayState* play) {
this->actionFunc = EnTrt_Goodbye;
}
func_801477B4(play);
- } else if (itemGiven < PLAYER_AP_NONE) {
+ } else if (itemAction <= PLAYER_IA_MINUS1) {
if (this->flags & ENTRT_GIVEN_MUSHROOM) {
this->textId = 0x88B;
} else {
@@ -1427,7 +1427,7 @@ 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);
+ func_8011552C(play, DO_ACTION_DECIDE);
this->stickLeftPrompt.isEnabled = false;
this->stickRightPrompt.isEnabled = false;
}
@@ -1463,7 +1463,7 @@ void EnTrt_LookToShopkeeperFromShelf(EnTrt* this, PlayState* play) {
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 {
@@ -1479,7 +1479,7 @@ void EnTrt_InitShop(EnTrt* this, PlayState* 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;
}
@@ -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..c81032af5 100644
--- a/src/overlays/actors/ovl_En_Trt/z_en_trt.h
+++ b/src/overlays/actors/ovl_En_Trt/z_en_trt.h
@@ -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..4018a5021 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;
@@ -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) {
@@ -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,13 +410,13 @@ 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) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_10)) {
Actor_PickUp(&this->actor, play, GI_POTION_RED, 300.0f, 300.0f);
} else {
Actor_PickUp(&this->actor, play, GI_POTION_RED_BOTTLE, 300.0f, 300.0f);
@@ -468,7 +468,7 @@ void func_80AD4298(EnTrt2* this, PlayState* play) {
if (ActorCutscene_GetCanPlayNext(this->unk_3DA)) {
ActorCutscene_StartAndSetUnkLinkFields(this->unk_3DA, &this->actor);
- player->stateFlags1 |= 0x20;
+ player->stateFlags1 |= PLAYER_STATE1_20;
this->unk_3B2 = 6;
} else {
if (ActorCutscene_GetCurrentIndex() == 0x7C) {
@@ -481,8 +481,8 @@ void func_80AD4298(EnTrt2* this, PlayState* play) {
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) {
@@ -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 RADF_TO_BINANG(Math_Atan2F_XY(phi_f12, phi_f14));
}
f32 func_80AD49B8(Path* path, s32 arg1, Vec3f* arg2, Vec3s* arg3) {
@@ -742,34 +742,34 @@ void func_80AD4DB4(EnTrt2* this, PlayState* play) {
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) {
@@ -850,9 +850,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..44c2565f7 100644
--- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.h
+++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.h
@@ -41,6 +41,4 @@ typedef struct EnTrt2 {
/* 0x3DA */ s16 unk_3DA;
} 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..733ea0c57 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;
}
@@ -770,7 +770,7 @@ s32 func_80A875AC(Actor* thisx, PlayState* play) {
switch (this->unk_364) {
case 0:
- if ((this->unk_34E & 0x40) || (gSaveContext.save.weekEventReg[16] & 0x10)) {
+ if ((this->unk_34E & 0x40) || CHECK_WEEKEVENTREG(WEEKEVENTREG_16_10)) {
this->unk_374 = this->actor.cutscene;
this->unk_364++;
} else {
@@ -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;
@@ -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,7 +913,7 @@ 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);
}
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KOUME_DRINK);
} else if (Animation_OnFrame(&this->skelAnime, 90.0f)) {
@@ -955,7 +956,7 @@ 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++;
@@ -967,7 +968,7 @@ s32 func_80A87B48(Actor* thisx, PlayState* play) {
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;
@@ -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;
@@ -1105,12 +1106,12 @@ void func_80A881E0(EnTru* this, PlayState* play) {
ActorCutscene_Stop(ActorCutscene_GetCurrentIndex());
}
- 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);
}
@@ -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,10 +1148,10 @@ 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;
@@ -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..48964b555 100644
--- a/src/overlays/actors/ovl_En_Tru/z_en_tru.h
+++ b/src/overlays/actors/ovl_En_Tru/z_en_tru.h
@@ -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..e51af14ae 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,
@@ -185,7 +185,7 @@ s32 func_80B761FC(EnTruMt* this, PlayState* play) {
this->unk_3A4 = 0;
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KOUME_DAMAGE2);
}
- play->interfaceCtx.unk_25E = 1;
+ play->interfaceCtx.minigameHiddenPoints = 1;
Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 25);
return 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;
@@ -342,20 +342,20 @@ void func_80B76924(EnTruMt* this) {
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;
+ SET_EVENTINF(EVENTINF_36);
+ SET_EVENTINF(EVENTINF_40);
+ player->stateFlags3 &= ~PLAYER_STATE3_400;
this->actor.speedXZ = 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;
+ 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);
@@ -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;
}
@@ -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..a9631d96b 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_55_80)) {
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_55_80)) {
+ 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;
@@ -208,14 +208,14 @@ void func_80AE0010(EnTsn* this, PlayState* play) {
case 0x1082:
Animation_MorphToLoop(&this->skelAnime, &object_tsn_Anim_0092FC, -10.0f);
- gSaveContext.save.weekEventReg[25] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_25_80);
func_801477B4(play);
this->actionFunc = func_80AE0304;
this->actor.textId = 0;
break;
case 0x1083:
- gSaveContext.save.weekEventReg[25] |= 0x80;
+ SET_WEEKEVENTREG(WEEKEVENTREG_25_80);
func_801477B4(play);
this->actionFunc = func_80AE0304;
this->actor.textId = 0;
@@ -233,7 +233,7 @@ void func_80AE0010(EnTsn* this, PlayState* play) {
case 0x1089:
case 0x1093:
- gSaveContext.save.weekEventReg[26] |= 1;
+ SET_WEEKEVENTREG(WEEKEVENTREG_26_01);
func_801477B4(play);
Animation_MorphToLoop(&this->skelAnime, &object_tsn_Anim_0092FC, -10.0f);
this->actionFunc = func_80AE0304;
@@ -246,7 +246,7 @@ void func_80AE0010(EnTsn* this, PlayState* play) {
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);
Animation_MorphToLoop(&this->skelAnime, &object_tsn_Anim_0092FC, -10.0f);
@@ -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);
}
}
@@ -311,19 +311,20 @@ 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) {
+ if (itemAction > PLAYER_IA_NONE) {
func_801477B4(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)) {
player->actor.textId = 0x107B;
@@ -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,7 +356,7 @@ void func_80AE04FC(EnTsn* this, PlayState* play) {
return;
}
- if (sp24 < 0) {
+ if (itemAction <= PLAYER_IA_MINUS1) {
func_80151938(play, 0x1078);
Animation_MorphToLoop(&this->unk_1D8->skelAnime, &object_tsn_Anim_001198, -10.0f);
this->actionFunc = func_80AE0704;
@@ -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) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_25_40)) {
func_80151938(play, 0x1074);
} else {
func_80151938(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;
@@ -426,7 +427,7 @@ void func_80AE0704(EnTsn* this, PlayState* play) {
case 0x107C:
if (Inventory_HasEmptyBottle()) {
- gSaveContext.save.weekEventReg[26] |= 8;
+ SET_WEEKEVENTREG(WEEKEVENTREG_26_08);
func_801477B4(play);
this->actionFunc = func_80AE0460;
func_80AE0460(this, play);
@@ -463,7 +464,7 @@ void func_80AE0704(EnTsn* this, PlayState* play) {
case 0x108A:
case 0x1091:
- gSaveContext.save.weekEventReg[26] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_26_04);
func_80151938(play, play->msgCtx.currentTextId + 1);
this->unk_220 |= 2;
this->actor.textId = 0x1091;
@@ -478,7 +479,7 @@ void func_80AE0704(EnTsn* this, PlayState* play) {
break;
case 0x1092:
- if (gSaveContext.save.weekEventReg[26] & 8) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_26_08)) {
func_80AE0698(this, play);
} else {
func_80151938(play, 0x10A7);
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..4f7b8b720 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,
@@ -177,7 +177,7 @@ void EnTuboTrap_HandleImpact(EnTuboTrap* this, PlayState* play) {
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,7 +209,7 @@ 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;
}
}
@@ -218,7 +218,7 @@ void EnTuboTrap_HandleImpact(EnTuboTrap* this, PlayState* play) {
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);
}
}
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 5df9cee3c..5843357ee 100644
--- a/src/overlays/actors/ovl_En_Twig/z_en_twig.c
+++ b/src/overlays/actors/ovl_En_Twig/z_en_twig.c
@@ -11,10 +11,10 @@
#define THIS ((EnTwig*)thisx)
-void EnTwig_Init(Actor* thisx, PlayState* play);
-void EnTwig_Destroy(Actor* thisx, PlayState* play);
-void EnTwig_Update(Actor* this, PlayState* play);
-void EnTwig_Draw(EnTwig* this, PlayState* play);
+void EnTwig_Init(Actor* thisx, PlayState* play2);
+void EnTwig_Destroy(Actor* thisx, PlayState* play2);
+void EnTwig_Update(Actor* thisx, PlayState* play2);
+void EnTwig_Draw(Actor* thisx, PlayState* play);
void func_80AC0A54(EnTwig* this, PlayState* play);
void func_80AC0A6C(EnTwig* this, PlayState* play);
@@ -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,
@@ -70,23 +70,23 @@ void EnTwig_Init(Actor* thisx, PlayState* play2) {
this->dyna.actor.bgCheckFlags |= 0x400;
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);
@@ -198,7 +198,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 +213,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;
@@ -227,7 +227,7 @@ void EnTwig_Update(Actor* thisx, PlayState* play2) {
this->actionFunc(this, play);
}
-void EnTwig_Draw(EnTwig* thisx, PlayState* play) {
+void EnTwig_Draw(Actor* thisx, PlayState* play) {
EnTwig* this = THIS;
switch (this->unk_160) {
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..50109f887 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,
@@ -398,7 +398,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);
}
}
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..74bd4fec6 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;
}
@@ -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 & 1) ||
((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);
@@ -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);
@@ -376,7 +377,7 @@ void EnWallmas_ReturnToCeiling(EnWallmas* this, PlayState* play) {
if (this->actor.playerHeightRel < -900.0f) {
if (WALLMASTER_GET_TYPE(&this->actor) == WALLMASTER_TYPE_FLAG) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -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;
@@ -458,14 +459,14 @@ void EnWallmas_SetupTakePlayer(EnWallmas* this, PlayState* play) {
this->actor.speedXZ = 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);
+ func_800B8E58(player, player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_DAMAGE_S);
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_FALL_CATCH);
}
@@ -479,9 +480,9 @@ 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);
+ func_800B8E58(player, player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_TAKEN_AWAY);
}
if (this->timer == 0) {
@@ -490,8 +491,7 @@ void EnWallmas_TakePlayer(EnWallmas* this, PlayState* play) {
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);
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..32038c411 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,
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..77b857c14 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
@@ -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,7 +126,7 @@ 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_7);
this->actionFunc = EnWarpTag_RespawnPlayer;
ActorCutscene_Stop(ActorCutscene_GetCurrentIndex());
@@ -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,9 +201,9 @@ 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?
@@ -264,7 +264,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 fc1ad7279..94890bd39 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
@@ -22,15 +22,15 @@
void EnWaterEffect_Init(Actor* thisx, PlayState* play);
void EnWaterEffect_Destroy(Actor* thisx, PlayState* play);
-void EnWaterEffect_Update(Actor* thisx, PlayState* play);
-void EnWaterEffect_Draw(Actor* thisx, PlayState* play);
+void EnWaterEffect_Update(Actor* thisx, PlayState* play2);
+void EnWaterEffect_Draw(Actor* thisx, PlayState* play2);
void func_80A59C04(Actor* thisx, PlayState* play2);
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,
@@ -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);
+ func_800B8E58(player, player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_DEMO_DAMAGE);
}
}
@@ -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..7ddd539e7 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_52_20)) {
+ Actor_Kill(&this->actor);
}
EnWeatherTag_SetupAction(this, func_80966B08);
break;
@@ -214,15 +214,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
@@ -486,9 +486,10 @@ void EnWeatherTag_Update(Actor* thisx, PlayState* play) {
(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);
+ 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..bc505ee53 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,
@@ -309,7 +309,7 @@ void EnWf_Init(Actor* thisx, PlayState* play) {
}
if (Flags_GetClear(play, this->actor.room)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -1181,7 +1181,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;
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..ee2f3d158 100644
--- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c
+++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c
@@ -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;
}
@@ -1183,7 +1183,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);
}
@@ -1519,7 +1519,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..f2d88759e 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
@@ -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 eea112f89..4ed3333fd 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
@@ -14,8 +14,8 @@
void EnWizFire_Init(Actor* thisx, PlayState* play);
void EnWizFire_Destroy(Actor* thisx, PlayState* play);
-void EnWizFire_Update(Actor* thisx, PlayState* play);
-void EnWizFire_Draw(Actor* thisx, PlayState* play);
+void EnWizFire_Update(Actor* thisx, PlayState* play2);
+void EnWizFire_Draw(Actor* thisx, PlayState* play2);
void EnWiz_SetupMoveMagicProjectile(EnWizFire* this, PlayState* play);
void EnWiz_MoveMagicProjectile(EnWizFire* this, PlayState* play);
@@ -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,
@@ -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;
}
@@ -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);
}
}
}
@@ -636,7 +636,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 67faa1f3c..ba63b3021 100644
--- a/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c
+++ b/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c
@@ -13,7 +13,7 @@
void EnWood02_Init(Actor* thisx, PlayState* play);
void EnWood02_Destroy(Actor* thisx, PlayState* play);
-void EnWood02_Update(Actor* thisx, PlayState* play);
+void EnWood02_Update(Actor* thisx, PlayState* play2);
void EnWood02_Draw(Actor* thisx, PlayState* play);
/**
@@ -38,7 +38,7 @@ typedef enum {
static f32 sSpawnCos;
static f32 sSpawnSin;
-const ActorInit En_Wood02_InitVars = {
+ActorInit En_Wood02_InitVars = {
ACTOR_EN_WOOD02,
ACTORCAT_PROP,
FLAGS,
@@ -312,7 +312,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 +374,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;
@@ -449,7 +449,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..2310a2eef 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,
@@ -84,7 +84,7 @@ void EnYb_Init(Actor* thisx, PlayState* play) {
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);
@@ -120,9 +120,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);
}
}
@@ -250,7 +249,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 +262,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,7 +274,7 @@ 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);
}
@@ -292,7 +291,7 @@ void EnYb_Talk(EnYb* this, PlayState* play) {
case 0x147D: // I am counting on you
func_801477B4(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) {
@@ -326,7 +325,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 +340,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,10 +371,10 @@ 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);
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..a16b828f9 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,
@@ -185,7 +185,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);
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..58dd246d8 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,
@@ -114,14 +114,14 @@ void EnZob_Init(Actor* thisx, PlayState* play) {
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_55_80)) {
+ 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_55_80)) {
+ 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);
@@ -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;
@@ -473,7 +473,7 @@ void func_80BA0374(EnZob* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
switch (play->msgCtx.currentTextId) {
case 0x11F8:
- gSaveContext.save.weekEventReg[30] |= 2;
+ SET_WEEKEVENTREG(WEEKEVENTREG_30_02);
func_80151938(play, 0x11F9);
break;
@@ -525,7 +525,7 @@ void func_80BA0374(EnZob* this, PlayState* play) {
func_801477B4(play);
this->actionFunc = func_80BA0318;
player->unk_A90 = &this->actor;
- player->stateFlags3 |= 0x20;
+ player->stateFlags3 |= PLAYER_STATE3_20;
break;
}
}
@@ -565,7 +565,7 @@ 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);
}
@@ -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);
}
@@ -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;
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..25ce14fdc 100644
--- a/src/overlays/actors/ovl_En_Zob/z_en_zob.h
+++ b/src/overlays/actors/ovl_En_Zob/z_en_zob.h
@@ -32,6 +32,4 @@ typedef struct EnZob {
/* 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..9c7e7e6b5 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 (gSaveContext.save.weekEventReg[78] & 1) {
+ this->actionFunc = func_80BAFDB4;
+ EnZod_ChangeAnim(this, ENZOD_ANIM_PLAYING_VIVACE, ANIMMODE_ONCE);
+ this->actor.flags |= ACTOR_FLAG_10;
+ ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ break;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zod/func_80BAF3E0.s")
+ this->actionFunc = func_80BAFB84;
+ if (!(gSaveContext.save.weekEventReg[55] & 0x80)) {
+ 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 (gSaveContext.save.weekEventReg[55] & 0x80) {
+ 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 (gSaveContext.save.weekEventReg[32] & 8) {
+ textId = 0x1229;
+ } else {
+ gSaveContext.save.weekEventReg[32] |= 8;
+ }
+ } else if (this->stateFlags & TIJO_STATE_1) {
+ textId = 0x1225;
+ } else {
+ textId = 0x1219;
+ if (gSaveContext.save.weekEventReg[32] & 0x10) {
+ textId = 0x1226;
+ } else {
+ gSaveContext.save.weekEventReg[32] |= 0x10;
+ }
+ 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();
+ func_80151938(play, 0x1220);
+ break;
+
+ case 1:
+ func_8019F230();
+ func_80151938(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:
+ func_80151938(play, play->msgCtx.currentTextId + 1);
+ break;
+
+ case 0x1219:
+ func_80151938(play, play->msgCtx.currentTextId + 1);
+ this->nextAnimIndex = ENZOD_ANIM_ARMS_FOLDED;
+ break;
+
+ case 0x121D:
+ func_80151938(play, play->msgCtx.currentTextId + 1);
+ this->nextAnimIndex = ENZOD_ANIM_READY_TO_PLAY;
+ break;
+
+ case 0x1223:
+ func_80151938(play, play->msgCtx.currentTextId + 1);
+ this->nextAnimIndex = ENZOD_ANIM_PLAYING_VIVACE;
+ break;
+
+ case 0x121E:
+ case 0x1226:
+ func_80151938(play, 0x121F);
+ this->nextAnimIndex = ENZOD_ANIM_READY_TO_PLAY;
+ break;
+
+ default:
+ func_801477B4(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 (gSaveContext.save.weekEventReg[79] & 1) {
+ textId = 0x1253;
+ } else {
+ textId = 0x1251;
+ if (gSaveContext.save.weekEventReg[78] & 0x20) {
+ textId = 0x1252;
+ } else {
+ gSaveContext.save.weekEventReg[78] |= 0x20;
+ }
+ }
+ } 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)) {
+ func_801477B4(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 (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
+ ActorCutscene_Start(this->actor.cutscene, &this->actor);
+ this->actor.cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene);
+ if (this->actor.cutscene == -1) {
+ this->actionFunc = EnZod_DoNothing;
+ play->nextEntrance = play->setupExitList[ENZOD_GET_ENTRANCE_INDEX(&this->actor)];
+ play->transitionType = TRANS_TYPE_05;
+ play->transitionTrigger = TRANS_TRIGGER_START;
+ gSaveContext.save.weekEventReg[78] &= (u8)~1;
+ } else {
+ ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ }
+ } else {
+ ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ }
+}
+
+void EnZod_SetupRehearse(EnZod* this, PlayState* play) {
+ EnZod_UpdateAnimation(this);
+ if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) {
+ func_801477B4(play);
+ EnZod_ChangeAnim(this, ENZOD_ANIM_PLAYING_LENTO, ANIMMODE_ONCE);
+ this->actionFunc = EnZod_Rehearse;
+ ActorCutscene_Stop(this->actor.cutscene);
+ this->actor.cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene);
+ ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ gSaveContext.save.weekEventReg[79] |= 1;
+ Audio_QueueSeqCmd(NA_BGM_INDIGO_GO_SESSION | 0x8000);
+ }
+}
+
+void func_80BAFDB4(EnZod* this, PlayState* play) {
+ EnZod_UpdateAnimation(this);
+ if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
+ ActorCutscene_Start(this->actor.cutscene, &this->actor);
+ func_800B7298(play, NULL, 0x44);
+ Message_StartTextbox(play, 0x103A, &this->actor);
+ this->actionFunc = EnZod_SetupRehearse;
+ } else {
+ ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ }
+}
+
+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_CheckActorAction(play, 0x203)) {
+ if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x203)]->action == 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_CheckActorAction(play, 0x203) &&
+ (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x203)]->action == 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, 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 = func_801660B8(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..a165d91fe 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,
@@ -207,7 +207,7 @@ void EnZog_Init(Actor* thisx, PlayState* play) {
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);
+ Actor_Kill(&this->actor);
return;
}
@@ -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 {
@@ -601,10 +601,10 @@ 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);
}
@@ -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)) {
@@ -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;
@@ -876,7 +876,7 @@ void func_80B94E34(EnZog* this, PlayState* play) {
if ((player->actor.speedXZ > 3.0f) && (this->unk_324 == 0)) {
this->unk_324 = 25;
- func_800B8E58(player, player->ageProperties->unk_92 + NA_SE_VO_LI_PUSH);
+ func_800B8E58(player, player->ageProperties->voiceSfxIdOffset + NA_SE_VO_LI_PUSH);
}
}
this->actor.speedXZ *= 0.3f;
@@ -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);
@@ -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);
}
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..9971d77fa 100644
--- a/src/overlays/actors/ovl_En_Zog/z_en_zog.h
+++ b/src/overlays/actors/ovl_En_Zog/z_en_zog.h
@@ -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..2f6f0e791 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,
@@ -98,14 +98,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 +118,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 +131,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;
@@ -335,7 +335,7 @@ 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);
@@ -405,8 +405,8 @@ void func_80B32390(EnZoraegg* this, PlayState* play) {
if (temp_v0 != NULL) {
ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, temp_v0);
- gSaveContext.eventInf[3] |= 8;
- Actor_MarkForDeath(&this->actor);
+ 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)) &&
@@ -475,7 +475,7 @@ void func_80B326F4(EnZoraegg* this, PlayState* play) {
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);
@@ -556,13 +556,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;
}
@@ -571,7 +571,7 @@ 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);
+ Actor_Kill(&this->actor);
}
}
@@ -584,7 +584,7 @@ void func_80B32BB8(EnZoraegg* this, PlayState* play) {
}
if (Cutscene_CheckActorAction(play, 0x1C9)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
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..f36f77c2b 100644
--- a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h
+++ b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h
@@ -59,6 +59,4 @@ typedef struct EnZoraegg {
/* 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 1b7be4e0b..ba37c3ffe 100644
--- a/src/overlays/actors/ovl_En_Zos/z_en_zos.c
+++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.c
@@ -15,7 +15,7 @@ void EnZos_Destroy(Actor* thisx, PlayState* play);
void EnZos_Update(Actor* thisx, PlayState* play);
void EnZos_Draw(Actor* thisx, PlayState* play);
-void EnZos_ChangeAnim(EnZos* this, s16 arg1, u8 arg2);
+void EnZos_ChangeAnim(EnZos* this, s16 animIndex, u8 animMode);
void func_80BBB2C4(EnZos* this, PlayState* play);
void func_80BBB354(EnZos* this, PlayState* play);
void func_80BBB4CC(EnZos* this, PlayState* play);
@@ -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_55_80)) {
+ 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_55_80)) {
+ 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,11 +264,11 @@ 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;
@@ -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) {
+ itemAction = func_80123810(play);
+
+ if (itemAction > PLAYER_IA_NONE) {
func_801477B4(play);
- if (sp24 == 25) {
+ 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) {
+ } else if (itemAction <= PLAYER_IA_MINUS1) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_39_08)) {
func_80151938(play, 0x1241);
} else {
func_80151938(play, 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;
}
@@ -502,12 +503,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,7 +526,7 @@ 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);
}
}
@@ -534,7 +535,7 @@ void func_80BBBD5C(EnZos* this, PlayState* play) {
if (!Cutscene_CheckActorAction(play, 0x1F5)) {
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);
}
}
@@ -571,9 +572,9 @@ void func_80BBBDE0(EnZos* this, PlayState* play) {
}
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 +587,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 {
@@ -653,7 +654,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);
}
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..e3ede7b28 100644
--- a/src/overlays/actors/ovl_En_Zos/z_en_zos.h
+++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.h
@@ -31,6 +31,4 @@ typedef struct EnZos {
/* 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 bced0c6f3..417a6388e 100644
--- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c
+++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c
@@ -12,7 +12,7 @@
#define THIS ((EnZot*)thisx)
-void EnZot_Init(Actor* thisx, PlayState* play);
+void EnZot_Init(Actor* thisx, PlayState* play2);
void EnZot_Destroy(Actor* thisx, PlayState* play);
void EnZot_Update(Actor* thisx, PlayState* play);
void EnZot_Draw(Actor* thisx, PlayState* play);
@@ -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_55_80)) {
+ 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_55_80)) {
+ Actor_Kill(&this->actor);
}
break;
@@ -220,8 +220,8 @@ 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_55_80)) {
+ Actor_Kill(&this->actor);
}
}
@@ -230,7 +230,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);
}
}
@@ -362,17 +362,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);
@@ -410,35 +410,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);
@@ -516,7 +516,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);
}
}
@@ -553,14 +553,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 +588,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;
}
@@ -786,7 +786,7 @@ void func_80B97E4C(EnZot* this, PlayState* 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:
@@ -803,7 +803,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;
@@ -837,35 +837,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 +877,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 +931,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,22 +941,23 @@ 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);
}
}
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) {
+ itemAction = func_80123810(play);
+
+ if (itemAction > PLAYER_IA_NONE) {
func_801477B4(play);
- if ((itemActionParam == PLAYER_AP_PICTO_BOX) && CHECK_QUEST_ITEM(QUEST_PICTOGRAPH) &&
+ if ((itemAction == PLAYER_IA_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)) {
player->actor.textId = 0x12AE;
@@ -968,7 +969,7 @@ void func_80B985EC(EnZot* this, PlayState* play) {
player->actor.textId = 0x12AB;
}
this->actionFunc = func_80B98728;
- } else if (itemActionParam < PLAYER_AP_NONE) {
+ } else if (itemAction <= PLAYER_IA_MINUS1) {
func_80151938(play, 0x12AB);
this->actionFunc = func_80B98728;
}
@@ -1076,17 +1077,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);
}
@@ -1104,14 +1105,14 @@ void func_80B98AD0(EnZot* this, PlayState* play) {
case 0x12B8:
func_801477B4(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);
this->actionFunc = func_80B98CA8;
- gSaveContext.save.weekEventReg[41] |= 0x20;
+ SET_WEEKEVENTREG(WEEKEVENTREG_41_20);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF);
break;
@@ -1126,7 +1127,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 +1160,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 +1169,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 +1189,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;
}
@@ -1254,17 +1255,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);
}
@@ -1345,11 +1346,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..851214b5d 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,
@@ -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_55_80)) {
+ 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_55_80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_53_20)) {
+ Actor_Kill(&this->picto.actor);
}
break;
}
@@ -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;
@@ -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;
@@ -426,7 +426,7 @@ void func_80BD1DB8(EnZov* this, PlayState* play) {
play->nextEntrance = play->setupExitList[ENZOV_GET_FE00(&this->picto.actor)];
play->transitionType = TRANS_TYPE_05;
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);
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..a5e217ca3 100644
--- a/src/overlays/actors/ovl_En_Zov/z_en_zov.h
+++ b/src/overlays/actors/ovl_En_Zov/z_en_zov.h
@@ -36,6 +36,4 @@ typedef struct EnZov {
/* 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..7e3709162 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_55_80)) {
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_55_80)) {
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;
@@ -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..c4d72a8f1 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
@@ -18,7 +18,7 @@ void ItemBHeart_Draw(Actor* thisx, PlayState* play);
void func_808BCF54(ItemBHeart* this, PlayState* play);
-const ActorInit Item_B_Heart_InitVars = {
+ActorInit Item_B_Heart_InitVars = {
ACTOR_ITEM_B_HEART,
ACTORCAT_BOSS,
FLAGS,
@@ -41,7 +41,7 @@ void ItemBHeart_Init(Actor* thisx, PlayState* play) {
ItemBHeart* this = THIS;
if (Flags_GetCollectible(play, 0x1F)) {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -68,10 +68,11 @@ void ItemBHeart_Update(Actor* thisx, PlayState* 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);
+ Actor_Kill(&this->actor);
+ return;
}
+
+ Actor_PickUp(&this->actor, play, GI_HEART_CONTAINER, 30.0f, 80.0f);
}
}
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..f7ff62fa9 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
@@ -12,6 +12,4 @@ typedef struct ItemBHeart {
/* 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..e327dc3f4 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_PickUp(&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..a552e35ab 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,
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..acea3daf1 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,
@@ -184,10 +184,10 @@ void func_80ACBC8C(ObjAqua* this, PlayState* play) {
} 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 +207,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 +232,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);
}
}
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 9b31c22ca..565c99504 100644
--- a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c
+++ b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c
@@ -13,7 +13,7 @@
void ObjArmos_Init(Actor* thisx, PlayState* play);
void ObjArmos_Destroy(Actor* thisx, PlayState* play);
-void ObjArmos_Update(Actor* thisx, PlayState* play);
+void ObjArmos_Update(Actor* thisx, PlayState* play2);
void ObjArmos_Draw(Actor* thisx, PlayState* play);
void func_809A54B4(ObjArmos* this);
@@ -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,
@@ -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;
}
}
@@ -289,7 +289,7 @@ void func_809A562C(ObjArmos* this, PlayState* play) {
sp20 = true;
}
- player->stateFlags2 &= ~0x10;
+ player->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
if (!sp20) {
@@ -309,7 +309,7 @@ void func_809A57D8(ObjArmos* this) {
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;
}
}
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..2e9453005 100644
--- a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h
+++ b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h
@@ -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..35f37d5d8 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,
@@ -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];
@@ -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));
}
@@ -590,7 +591,7 @@ void func_809381C4(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);
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_1);
}
this->unk_1E4 = 2;
func_80938284(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;
@@ -744,7 +748,7 @@ 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);
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_1);
}
this->unk_1B4 = 36;
func_80937130(this);
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..f8534afea 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,
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..4b7e9f471 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;
}
@@ -285,7 +285,7 @@ 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);
+ 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..437f0c234 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;
}
@@ -62,7 +62,7 @@ void ObjBlockstop_TryPlayCutscene(ObjBlockstop* this, PlayState* play) {
if (ActorCutscene_GetLength(this->actor.cutscene) != -1) {
ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
}
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
ActorCutscene_SetIntentToPlay(this->actor.cutscene);
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 0380b338d..c48ff332c 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* play);
+void func_80B9B428(Actor* thisx, PlayState* play2);
-const ActorInit Obj_Boat_InitVars = {
+ActorInit Obj_Boat_InitVars = {
ACTOR_OBJ_BOAT,
ACTORCAT_BG,
FLAGS,
@@ -124,7 +124,7 @@ void ObjBoat_Update(Actor* thisx, PlayState* play) {
sp3C = this->unk_15D * (OBJBOAT_GET_4000(thisx) ? 5.0f : 3.0f);
}
}
- if (player->csMode != 0x1A) {
+ if (player->csMode != PLAYER_CSMODE_26) {
Math_ScaledStepToS(&this->dyna.actor.shape.rot.y, sp3A, (s16)(s32)(fabsf(this->dyna.actor.speedXZ) * 40.0f));
this->dyna.actor.world.rot.y = this->dyna.actor.shape.rot.y;
Math_StepToF(&this->dyna.actor.speedXZ, sp3C, 0.05f);
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..795c50689 100644
--- a/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.h
+++ b/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.h
@@ -20,6 +20,4 @@ typedef struct ObjBoat {
/* 0x164 */ Vec3s* unk_164;
} 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..cfecbdad0 100644
--- a/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.c
+++ b/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.c
@@ -18,7 +18,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 = {
+ActorInit Obj_Boyo_InitVars = {
ACTOR_OBJ_BOYO,
ACTORCAT_PROP,
FLAGS,
@@ -82,7 +82,7 @@ void ObjBoyo_UpdatePlayerBumpValues(ObjBoyo* this, Player* target) {
void ObjBoyo_UpdatePirateBumpValues(ObjBoyo* src, EnKaizoku* target) {
target->unk_2F0 = 30.0f;
- target->unk_2F4 = Actor_YawBetweenActors(&src->actor, &target->actor);
+ target->unk_2F4 = Actor_YawBetweenActors(&src->actor, &target->picto.actor);
}
void ObjBoyo_UpdateBombBumpValues(ObjBoyo* src, EnBom* target) {
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..dcff2a893 100644
--- a/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.h
+++ b/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.h
@@ -28,6 +28,4 @@ typedef struct ObjBoyo {
/* 0x1AC */ s16 unk_1AC;
} 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 8e555a19f..27f5cc273 100644
--- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c
+++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c
@@ -25,10 +25,10 @@ void ObjChan_Destroy(Actor* thisx, PlayState* play);
void ObjChan_Update(Actor* thisx, PlayState* play);
void ObjChan_Draw(Actor* thisx, PlayState* play);
-void ObjChan_ChandelierAction(ObjChan* this, 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;
@@ -169,7 +169,7 @@ 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;
}
@@ -184,7 +184,7 @@ void ObjChan_InitChandelier(ObjChan* this2, PlayState* play) {
temp_v0->myPotIndex = i;
temp_v0->actor.cutscene = this->actor.cutscene;
} else {
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
}
@@ -310,14 +310,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);
}
}
- 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..f08f18adf 100644
--- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.h
+++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.h
@@ -57,6 +57,4 @@ typedef struct ObjChan {
/* 0x1E0 */ s16 cutscenes[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..0c888a4ac 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,
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..b03344708 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,
@@ -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;
@@ -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);
+ func_800B7298(play, &this->actor, PLAYER_CSMODE_4);
}
}
}
@@ -529,12 +529,12 @@ void ObjComb_Update(Actor* thisx, PlayState* play) {
if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
if (this->actor.cutscene >= 0) {
- func_800B7298(play, &this->actor, 1);
+ 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;
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..9daa20bad 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,
@@ -57,23 +57,24 @@ void ObjDanpeilift_Init(Actor* thisx, PlayState* play) {
DynaPolyActor_Init(&this->dyna, 1);
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;
}
}
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..392d5d4ca 100644
--- a/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.h
+++ b/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.h
@@ -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..060e793ca 100644
--- a/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c
+++ b/src/overlays/actors/ovl_Obj_Demo/z_obj_demo.c
@@ -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) {
@@ -96,7 +96,7 @@ void func_80983704(ObjDemo* this, PlayState* play) {
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);
@@ -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 77b704a6c..fce6d99ec 100644
--- a/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c
+++ b/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c
@@ -22,13 +22,13 @@ void func_80B13170(ObjDhouse* this, PlayState* play, ObjDhouseStruct1* ptr, ObjD
void func_80B13908(ObjDhouse* this);
void func_80B1391C(ObjDhouse* this, PlayState* play);
void func_80B1392C(ObjDhouse* this);
-void func_80B13940(ObjDhouse* this, PlayState* play);
+void func_80B13940(ObjDhouse* this, PlayState* play2);
void func_80B139D8(ObjDhouse* this);
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,
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..9b6c81266 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,
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..01675c173 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;
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..f0eaaf25a 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,
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..21e0f8f27 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,6 @@ typedef struct ObjDriftice {
/* 0x24C */ s32 unk_24C;
} ObjDriftice; // size = 0x250
-extern const ActorInit Obj_Driftice_InitVars;
+extern 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..ceedeb6c4 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);
@@ -159,7 +159,8 @@ void ObjEtcetera_Idle(ObjEtcetera* this, PlayState* play) {
// 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.speedXZ > 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;
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..a4c4e21d2 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,
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 79961ad82..49e8ac934 100644
--- a/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c
+++ b/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c
@@ -12,8 +12,8 @@
#define THIS ((ObjFlowerpot*)thisx)
void ObjFlowerpot_Init(Actor* thisx, PlayState* play);
-void ObjFlowerpot_Destroy(Actor* thisx, PlayState* play);
-void ObjFlowerpot_Update(Actor* thisx, PlayState* play);
+void ObjFlowerpot_Destroy(Actor* thisx, PlayState* play2);
+void ObjFlowerpot_Update(Actor* thisx, PlayState* play2);
void ObjFlowerpot_Draw(Actor* thisx, PlayState* play);
void func_80A1C818(ObjFlowerpot* this);
@@ -31,7 +31,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,
@@ -464,7 +464,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 +475,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)) {
@@ -610,7 +610,7 @@ void func_80A1CEF4(ObjFlowerpot* this2, PlayState* play) {
}
func_80A1BA44(this, play);
func_80A1B994(this, play);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -624,7 +624,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;
}
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..0581706d5 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,7 +59,7 @@ 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);
} else {
@@ -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 {
@@ -159,9 +159,9 @@ void ObjGhaka_Init(Actor* thisx, PlayState* play) {
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);
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..3414aaafa 100644
--- a/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c
+++ b/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c
@@ -26,7 +26,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,
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..9872fb0b7 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,
@@ -347,7 +347,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 +356,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..9c38849c9 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,
@@ -120,13 +120,13 @@ void ObjHakaisi_Init(Actor* thisx, PlayState* play) {
}
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);
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,
@@ -406,7 +406,7 @@ void func_80B15330(ObjHakaisi* this, PlayState* play) {
if (this->dyna.actor.bgCheckFlags & 2) {
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);
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..ed5341a82 100644
--- a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h
+++ b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.h
@@ -24,6 +24,4 @@ typedef struct ObjHakaisi {
/* 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..752b669cf 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,
@@ -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 72aaa3e12..e3972be18 100644
--- a/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c
+++ b/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c
@@ -16,17 +16,17 @@ void ObjHgdoor_Destroy(Actor* thisx, PlayState* play);
void ObjHgdoor_Update(Actor* thisx, PlayState* play);
void ObjHgdoor_Draw(Actor* thisx, PlayState* play);
-void ObjHgdoor_SetupCheckShouldOpen(ObjHgdoor* this);
-void ObjHgdoor_CheckShouldOpen(ObjHgdoor* this, PlayState* play);
-void func_80BD42AC(ObjHgdoor* this);
-void func_80BD42C0(ObjHgdoor* this, PlayState* play);
-void func_80BD433C(ObjHgdoor* this);
-void func_80BD4358(ObjHgdoor* this, PlayState* play);
-void func_80BD4460(ObjHgdoor* this);
-void func_80BD4478(ObjHgdoor* this, PlayState* play);
-s32 func_80BD44D0(ObjHgdoor* this, PlayState* play);
+void ObjHgdoor_SetupIdle(ObjHgdoor* this);
+void ObjHgdoor_Idle(ObjHgdoor* this, PlayState* play);
+void ObjHgdoor_SetupCutscene(ObjHgdoor* this);
+void ObjHgdoor_PlayCutscene(ObjHgdoor* this, PlayState* play);
+void ObjHgdoor_SetupCsAction(ObjHgdoor* this);
+void ObjHgdoor_HandleCsAction(ObjHgdoor* this, PlayState* play);
+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,
@@ -38,9 +38,7 @@ const ActorInit Obj_Hgdoor_InitVars = {
(ActorFunc)ObjHgdoor_Draw,
};
-static s16 D_80BD4690 = 0;
-static s32 unused = 0;
-static s32 unused2 = 0;
+static s16 sOpenFlag = 0;
void ObjHgdoor_SetChild(ObjHgdoor* this, PlayState* play) {
Actor* actorIterator = play->actorCtx.actorLists[ACTORCAT_PROP].first;
@@ -82,7 +80,7 @@ void ObjHgdoor_Init(Actor* thisx, PlayState* play) {
this->rotation = 0;
this->timer = 0;
this->cutscene = this->dyna.actor.cutscene;
- ObjHgdoor_SetupCheckShouldOpen(this);
+ ObjHgdoor_SetupIdle(this);
}
void ObjHgdoor_Destroy(Actor* thisx, PlayState* play) {
@@ -91,29 +89,29 @@ void ObjHgdoor_Destroy(Actor* thisx, PlayState* play) {
DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
}
-void ObjHgdoor_SetupCheckShouldOpen(ObjHgdoor* this) {
- this->actionFunc = ObjHgdoor_CheckShouldOpen;
+void ObjHgdoor_SetupIdle(ObjHgdoor* this) {
+ this->actionFunc = ObjHgdoor_Idle;
}
-void ObjHgdoor_CheckShouldOpen(ObjHgdoor* this, PlayState* play) {
- if (!(gSaveContext.save.weekEventReg[75] & 0x20) && !(gSaveContext.save.weekEventReg[52] & 0x20) &&
+void ObjHgdoor_Idle(ObjHgdoor* this, PlayState* play) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_20) &&
(this->dyna.actor.xzDistToPlayer < 100.0f) && (this->dyna.actor.playerHeightRel < 40.0f) &&
OBJHGDOOR_IS_RIGHT_DOOR(&this->dyna.actor)) {
ObjHgdoor_SetChild(this, play);
ObjHgdoor_SetParent(this, play);
- func_80BD42AC(this);
+ ObjHgdoor_SetupCutscene(this);
}
}
-void func_80BD42AC(ObjHgdoor* this) {
- this->actionFunc = func_80BD42C0;
+void ObjHgdoor_SetupCutscene(ObjHgdoor* this) {
+ this->actionFunc = ObjHgdoor_PlayCutscene;
}
-void func_80BD42C0(ObjHgdoor* this, PlayState* play) {
+void ObjHgdoor_PlayCutscene(ObjHgdoor* this, PlayState* play) {
if (ActorCutscene_GetCanPlayNext(this->cutscene)) {
ActorCutscene_Start(this->cutscene, &this->dyna.actor);
- func_80BD433C(this);
- func_80BD433C((ObjHgdoor*)this->dyna.actor.child);
+ ObjHgdoor_SetupCsAction(this);
+ ObjHgdoor_SetupCsAction((ObjHgdoor*)this->dyna.actor.child);
} else {
if (ActorCutscene_GetCurrentIndex() == 0x7C) {
ActorCutscene_Stop(0x7C);
@@ -122,50 +120,58 @@ void func_80BD42C0(ObjHgdoor* this, PlayState* play) {
}
}
-void func_80BD433C(ObjHgdoor* this) {
- this->unk166 = 0x63;
- this->actionFunc = func_80BD4358;
+void ObjHgdoor_SetupCsAction(ObjHgdoor* this) {
+ this->csAction = 0x63;
+ this->actionFunc = ObjHgdoor_HandleCsAction;
}
-void func_80BD4358(ObjHgdoor* this, PlayState* play) {
+void ObjHgdoor_HandleCsAction(ObjHgdoor* this, PlayState* play) {
s32 actionIndex;
if (Cutscene_CheckActorAction(play, 483)) {
actionIndex = Cutscene_GetActorActionIndex(play, 483);
- if (this->unk166 != play->csCtx.actorActions[actionIndex]->action) {
- this->unk166 = play->csCtx.actorActions[actionIndex]->action;
+ if (this->csAction != play->csCtx.actorActions[actionIndex]->action) {
+ this->csAction = play->csCtx.actorActions[actionIndex]->action;
switch (play->csCtx.actorActions[actionIndex]->action) {
case 1:
Actor_PlaySfxAtPos(&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;
}
- D_80BD4690 = 1;
+ sOpenFlag = 1;
break;
+
case 2:
break;
}
}
- if ((D_80BD4690 == 1) && (func_80BD44D0(this, play))) {
- func_80BD4460(this);
+ if ((sOpenFlag == 1) && ObjHgdoor_Rotate(this, play)) {
+ ObjHgdoor_SetupStopCs(this);
}
} else {
- this->unk166 = 0x63;
+ this->csAction = 0x63;
}
}
-void func_80BD4460(ObjHgdoor* this) {
+void ObjHgdoor_SetupStopCs(ObjHgdoor* this) {
this->timer = 0;
- this->actionFunc = func_80BD4478;
+ this->actionFunc = ObjHgdoor_StopCs;
}
-void func_80BD4478(ObjHgdoor* this, PlayState* play) {
- if (this->timer++ > 80 && !ActorCutscene_GetCanPlayNext(this->cutscene)) {
- ActorCutscene_Stop(this->cutscene);
+void ObjHgdoor_StopCs(ObjHgdoor* this, PlayState* play) {
+ if (this->timer++ > 80) {
+ if (!ActorCutscene_GetCanPlayNext(this->cutscene)) {
+ ActorCutscene_Stop(this->cutscene);
+ }
}
}
-s32 func_80BD44D0(ObjHgdoor* this, PlayState* play) {
+/**
+ * @brief Function to increment the rotation angle of the door
+ *
+ * @return true when door is fully open, false otherwise
+ */
+s32 ObjHgdoor_Rotate(ObjHgdoor* this, PlayState* play) {
if (this->rotation < 0x5555) {
this->rotation += 0x1388;
} else {
@@ -175,7 +181,7 @@ s32 func_80BD44D0(ObjHgdoor* this, PlayState* play) {
return false;
}
-void func_80BD4500(ObjHgdoor* this) {
+void ObjHgdoor_Open(ObjHgdoor* this) {
this->dyna.actor.shape.rot.y = this->dyna.actor.home.rot.y;
if (OBJHGDOOR_IS_RIGHT_DOOR(&this->dyna.actor)) {
this->dyna.actor.shape.rot.y += this->rotation;
@@ -188,7 +194,7 @@ void ObjHgdoor_Update(Actor* thisx, PlayState* play) {
ObjHgdoor* this = THIS;
this->actionFunc(this, play);
- func_80BD4500(this);
+ ObjHgdoor_Open(this);
}
void ObjHgdoor_Draw(Actor* thisx, PlayState* play) {
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 803236ac1..7172952bb 100644
--- a/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.h
+++ b/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.h
@@ -16,9 +16,7 @@ typedef struct ObjHgdoor {
/* 0x160 */ s16 cutscene;
/* 0x162 */ s16 rotation;
/* 0x164 */ s16 timer;
- /* 0x166 */ u16 unk166;
+ /* 0x166 */ u16 csAction;
} 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..ae047f029 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,
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 38f3164e3..cade13522 100644
--- a/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c
+++ b/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c
@@ -14,7 +14,7 @@
#define THIS ((ObjHugebombiwa*)thisx)
void ObjHugebombiwa_Init(Actor* thisx, PlayState* play);
-void ObjHugebombiwa_Destroy(Actor* thisx, PlayState* play);
+void ObjHugebombiwa_Destroy(Actor* thisx, PlayState* play2);
void ObjHugebombiwa_Update(Actor* thisx, PlayState* play);
void ObjHugebombiwa_Draw(Actor* thisx, PlayState* play);
@@ -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;
}
@@ -412,7 +412,7 @@ void func_80A54CEC(ObjHugebombiwa* this, PlayState* play) {
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))) {
@@ -524,7 +524,7 @@ 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);
+ Actor_Kill(&this->actor);
}
}
@@ -620,7 +620,7 @@ 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);
+ 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..a861e9e63 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,
@@ -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;
@@ -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;
}
@@ -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;
}
@@ -574,7 +574,7 @@ void func_80B9D714(ObjHunsui* this, PlayState* play) {
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;
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..14a2eea62 100644
--- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h
+++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h
@@ -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..13f49fd1f 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_33_80))) {
+ 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--;
}
@@ -269,12 +269,13 @@ void func_80931E58(ObjIcePoly* this, PlayState* play) {
ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &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_PlaySfxAtPos(&this->actor, NA_SE_EV_ICE_MELT);
+ this->actionFunc = func_80931EEC;
} else {
ActorCutscene_SetIntentToPlay(this->actor.cutscene);
}
@@ -330,7 +331,7 @@ void func_80931EEC(ObjIcePoly* this, PlayState* play) {
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..8c88c35ee 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,
@@ -849,7 +849,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;
}
@@ -921,7 +921,7 @@ void ObjIceblock_Init(Actor* thisx, PlayState* play) {
}
DynaPolyActor_Init(&this->dyna, 1);
- DynaPolyActor_LoadMesh(play, &this->dyna, &gIceBlockDynaColHeader);
+ DynaPolyActor_LoadMesh(play, &this->dyna, &gIceBlockCol);
func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit);
@@ -1208,7 +1208,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_7);
this->unk_1B0 |= 1;
}
@@ -1254,7 +1254,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_6);
}
if (isBool) {
@@ -1410,7 +1410,7 @@ void func_80A266E0(ObjIceblock* this, PlayState* play) {
func_80A2508C(this, play);
if (sp20) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
}
}
@@ -1453,7 +1453,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_6);
}
func_80A266C4(this);
}
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 33de74100..0f4f83503 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
@@ -11,12 +11,12 @@
#define THIS ((ObjJgGakki*)thisx)
-void ObjJgGakki_Init(Actor* thisx, PlayState* play);
+void ObjJgGakki_Init(Actor* thisx, PlayState* play2);
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,
@@ -42,7 +42,7 @@ void ObjJgGakki_Init(Actor* thisx, PlayState* play2) {
} 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..3942fff76 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,
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 e2a71db92..36927b262 100644
--- a/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c
+++ b/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c
@@ -12,8 +12,8 @@
#define THIS ((ObjKibako*)thisx)
-void ObjKibako_Init(Actor* thisx, PlayState* play);
-void ObjKibako_Destroy(Actor* thisx, PlayState* play);
+void ObjKibako_Init(Actor* thisx, PlayState* play2);
+void ObjKibako_Destroy(Actor* thisx, PlayState* play2);
void ObjKibako_Update(Actor* thisx, PlayState* play);
void ObjKibako_Draw(Actor* thisx, PlayState* play);
@@ -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,
@@ -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;
@@ -284,12 +284,12 @@ void ObjKibako_Idle(ObjKibako* this, PlayState* 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);
@@ -388,14 +388,14 @@ void ObjKibako_Thrown(ObjKibako* this, PlayState* play) {
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) {
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;
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..06af2a8e3 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,
@@ -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) {
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..9c9215b24 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,7 +49,7 @@ 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);
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..9ceff660e 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,
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..aff88964b 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,
@@ -102,14 +102,15 @@ void ObjLift_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.home.rot.z = this->dyna.actor.world.rot.z = this->dyna.actor.shape.rot.z;
DynaPolyActor_Init(&this->dyna, 1);
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) {
@@ -196,7 +197,7 @@ void func_8093DA48(ObjLift* this, PlayState* play) {
func_800C62BC(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);
}
}
}
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..16a628fa2 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) {
@@ -167,8 +168,11 @@ void func_80AF3C34(ObjLightblock* this, PlayState* play) {
if (this->timer <= 0) {
temp_a0 = this->dyna.actor.cutscene;
ActorCutscene_Stop(temp_a0);
- Actor_MarkForDeath(&this->dyna.actor);
- } else if (this->timer <= 60) {
+ Actor_Kill(&this->dyna.actor);
+ return;
+ }
+
+ if (this->timer <= 60) {
if (this->alpha > 40) {
this->alpha -= 40;
} else {
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..f2946d536 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);
}
}
@@ -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) {
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..6620c5116 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,
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..c46821ac1 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);
@@ -130,7 +130,7 @@ 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);
+ func_800B7298(play, thisx, PLAYER_CSMODE_4);
}
func_8099FB64(thisx, play);
thisx->update = Actor_Noop;
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 99745be7c..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
@@ -13,10 +13,10 @@
void ObjMilkBin_Init(Actor* thisx, PlayState* play);
void ObjMilkBin_Destroy(Actor* thisx, PlayState* play);
-void ObjMilkBin_Update(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..18c36f87e 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,
@@ -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..e2750e639 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_52_20)) {
+ Actor_Kill(&this->actor);
}
func_80C06D90(this, play);
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..815c15af8 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;
@@ -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..933ea06d2 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,
@@ -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;
}
@@ -328,7 +328,7 @@ void func_80BA2C94(ObjNozoki* this, PlayState* play) {
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);
@@ -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..4c4b74916 100644
--- a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.h
+++ b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.h
@@ -24,6 +24,4 @@ typedef struct ObjNozoki {
/* 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..3a25ef402 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,
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..1d7762c44 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,
@@ -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;
}
}
@@ -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;
@@ -508,7 +508,7 @@ void ObjOshihiki_Push(ObjOshihiki* this, PlayState* 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;
@@ -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);
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..ee26937da 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_20_02)) {
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..3aca23bca 100644
--- a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c
+++ b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c
@@ -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,
@@ -268,7 +268,7 @@ void func_809A3A74(ObjPzlblock* this, PlayState* play) {
}
}
- GET_PLAYER(play)->stateFlags2 &= ~0x10;
+ GET_PLAYER(play)->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
}
}
@@ -299,7 +299,7 @@ void func_809A3BC0(ObjPzlblock* this, PlayState* play) {
sp20 = 1;
}
- player->stateFlags2 &= ~0x10;
+ player->stateFlags2 &= ~PLAYER_STATE2_10;
this->dyna.pushForce = 0.0f;
if (sp20 == 0) {
func_809A3A48(this);
@@ -318,7 +318,7 @@ void func_809A3D1C(ObjPzlblock* this) {
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;
}
}
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..27a038860 100644
--- a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h
+++ b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h
@@ -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 23ca0872d..d0a705cf2 100644
--- a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c
+++ b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c
@@ -22,13 +22,13 @@ void ObjRaillift_DrawDekuFlowerPlatform(Actor* thisx, PlayState* play);
void ObjRaillift_DoNothing(ObjRaillift* this, PlayState* play);
void ObjRaillift_Idle(ObjRaillift* this, PlayState* play);
-void ObjRaillift_UpdatePosition(ObjRaillift* this, s32 arg1);
+void ObjRaillift_UpdatePosition(ObjRaillift* this, s32 index);
void ObjRaillift_StartCutscene(ObjRaillift* this, PlayState* play);
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,
@@ -49,8 +49,8 @@ static InitChainEntry sInitChain[] = {
static CollisionHeader* sColHeaders[] = { &object_raillift_Colheader_004FF8, &object_raillift_Colheader_0048D0 };
-void ObjRaillift_UpdatePosition(ObjRaillift* this, s32 idx) {
- Math_Vec3s_ToVec3f(&this->dyna.actor.world.pos, &this->points[idx]);
+void ObjRaillift_UpdatePosition(ObjRaillift* this, s32 index) {
+ Math_Vec3s_ToVec3f(&this->dyna.actor.world.pos, &this->points[index]);
}
void ObjRaillift_Init(Actor* thisx, PlayState* play) {
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..41b7a821e 100644
--- a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h
+++ b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h
@@ -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..154f662f8 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,
@@ -69,7 +69,7 @@ void func_80973D3C(ObjRoomtimer* this, PlayState* play) {
} 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);
}
}
@@ -80,10 +80,11 @@ void func_80973DE0(ObjRoomtimer* this, PlayState* play) {
if (ActorCutscene_GetLength(this->actor.cutscene) != -1) {
ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
}
- Actor_MarkForDeath(&this->actor);
- } else {
- ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ Actor_Kill(&this->actor);
+ return;
}
+
+ ActorCutscene_SetIntentToPlay(this->actor.cutscene);
}
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..ce18a68b0 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,
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..6a469eea0 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;
}
@@ -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_7);
this->unk_1C1 |= 1;
}
@@ -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_6);
}
func_80A21F74(this, play);
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..068be3ea0 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,
@@ -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);
}
}
@@ -621,7 +621,7 @@ void func_80B04648(ObjSnowball* this, PlayState* play) {
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);
@@ -725,7 +725,7 @@ void func_80B047C0(ObjSnowball* this, PlayState* play) {
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..d62002e73 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,
@@ -365,7 +365,7 @@ void func_80B39C9C(ObjSnowball2* this, PlayState* play) {
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)) {
@@ -464,7 +464,7 @@ void func_80B3A13C(ObjSnowball2* this, PlayState* play) {
func_80B38E88(this, play);
func_80B39108(this, play);
func_80B39B5C(this, play);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
return;
}
@@ -570,7 +570,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..4708062da 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;
}
@@ -679,7 +679,7 @@ 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);
+ func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_1);
}
Flags_SetSwitch(play, OBJSPIDERTENT_GET_7F00(&this->dyna.actor));
func_80B30AD4(this);
@@ -792,7 +792,7 @@ void func_80B30AF8(ObjSpidertent* this, PlayState* play) {
}
} else if (this->unk_3C1 <= 0) {
ActorCutscene_Stop(this->dyna.actor.cutscene);
- Actor_MarkForDeath(&this->dyna.actor);
+ 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 0db945c96..83959e168 100644
--- a/src/overlays/actors/ovl_Obj_Spinyroll/z_obj_spinyroll.c
+++ b/src/overlays/actors/ovl_Obj_Spinyroll/z_obj_spinyroll.c
@@ -13,7 +13,7 @@
void ObjSpinyroll_Init(Actor* thisx, PlayState* play);
void ObjSpinyroll_Destroy(Actor* thisx, PlayState* play);
-void ObjSpinyroll_Update(Actor* thisx, PlayState* play);
+void ObjSpinyroll_Update(Actor* thisx, PlayState* play2);
void ObjSpinyroll_Draw(Actor* thisx, PlayState* play);
void func_80A1E9C4(ObjSpinyroll* this);
@@ -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,
@@ -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;
}
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..ada5eadd3 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,
@@ -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);
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..578244237 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,
@@ -65,7 +65,7 @@ void func_80C253D0(ObjSwprize* this, PlayState* play) {
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->world.rot.y = Math_Atan2S_XY(sp78.z, sp78.x) + D_80C257F8[i];
} else {
collectible->world.rot.y = i * (0x10000 / 3);
}
@@ -76,7 +76,7 @@ void func_80C253D0(ObjSwprize* this, PlayState* play) {
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->world.rot.y = Math_Atan2S_XY(sp78.z, sp78.x);
}
}
}
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 7625b403f..96716d107 100644
--- a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c
+++ b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c
@@ -15,10 +15,10 @@
void ObjSyokudai_Init(Actor* thisx, PlayState* play);
void ObjSyokudai_Destroy(Actor* thisx, PlayState* play);
-void ObjSyokudai_Update(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,
@@ -196,7 +196,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);
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..791564b57 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,
@@ -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);
}
@@ -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);
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;
}
+
+ ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
}
void ObjTaru_Update(Actor* thisx, PlayState* play) {
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 bd5c16413..306ca7029 100644
--- a/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.c
+++ b/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.c
@@ -12,7 +12,7 @@
#define THIS ((ObjToge*)thisx)
void ObjToge_Init(Actor* thisx, PlayState* play);
-void ObjToge_Destroy(Actor* thisx, PlayState* play);
+void ObjToge_Destroy(Actor* thisx, PlayState* play2);
void ObjToge_Update(Actor* thisx, PlayState* play);
void ObjToge_Draw(Actor* thisx, PlayState* play);
@@ -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;
}
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..694a5ac59 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,
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..704bc58c3 100644
--- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c
+++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c
@@ -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,
@@ -128,7 +128,7 @@ void ObjTokeidai_ExteriorGear_Init(ObjTokeidai* this, PlayState* play) {
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;
}
@@ -441,7 +441,7 @@ void ObjTokeidai_TerminaFieldWalls_Idle(ObjTokeidai* this, PlayState* play) {
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;
+ SET_WEEKEVENTREG(WEEKEVENTREG_08_40);
if (((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) &&
(play->csCtx.currentCsIndex == 0)) ||
((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 2) &&
@@ -453,7 +453,8 @@ void ObjTokeidai_TowerOpening_EndCutscene(ObjTokeidai* this, PlayState* play) {
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) {
+ if (gSaveContext.respawn[RESPAWN_MODE_RETURN].playerParams ==
+ PLAYER_PARAMS(0xFF, PLAYER_INITMODE_TELESCOPE)) {
gSaveContext.nextTransitionType = TRANS_TYPE_21;
} else {
gSaveContext.nextTransitionType = TRANS_TYPE_02;
@@ -588,7 +589,7 @@ 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)) {
+ CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40)) {
this->actionFunc = ObjTokeidai_TowerOpening_RaiseTower;
}
}
@@ -610,8 +611,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;
@@ -686,7 +687,7 @@ 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;
}
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..4dcfd4f74 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,
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 9d635d7eb..33b493237 100644
--- a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c
+++ b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c
@@ -15,9 +15,9 @@
#define THIS ((ObjTsubo*)thisx)
void ObjTsubo_Init(Actor* thisx, PlayState* play);
-void ObjTsubo_Destroy(Actor* thisx, PlayState* play);
+void ObjTsubo_Destroy(Actor* thisx, PlayState* play2);
void ObjTsubo_Update(Actor* thisx, PlayState* play);
-void ObjTsubo_Draw(Actor* thisx, PlayState* play);
+void ObjTsubo_Draw(Actor* thisx, PlayState* play2);
void ObjTsubo_PotBreak1(ObjTsubo* this, PlayState* play);
void ObjTsubo_RacePotBreak1(ObjTsubo* this, PlayState* play);
@@ -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,
@@ -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) {
@@ -485,7 +486,7 @@ 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);
}
@@ -576,10 +577,11 @@ 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;
}
+
+ func_809291DC(this);
} else if (this->actor.bgCheckFlags & 0x40) {
typeData->breakPot2(this, play);
if (type == OBJ_TSUBO_TYPE_3) {
@@ -590,10 +592,11 @@ 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);
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 7cb4f310f..2a819b791 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
*/
@@ -58,10 +58,10 @@ void ObjUm_Update(Actor* thisx, PlayState* play);
void ObjUm_Draw(Actor* thisx, PlayState* play);
void ObjUm_DefaultAnim(ObjUm* this, PlayState* play);
-void ObjUm_ChangeAnim(ObjUm* this, PlayState* play, ObjUmAnimation index);
+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,
@@ -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);
@@ -768,7 +768,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) {
}
if (this->dyna.bgId == BGCHECK_SCENE) {
- Actor_MarkForDeath(&this->dyna.actor);
+ Actor_Kill(&this->dyna.actor);
return;
}
@@ -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,11 +828,11 @@ 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;
@@ -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 {
@@ -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);
}
@@ -1138,7 +1138,7 @@ 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) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_31_80)) {
ActorCutscene_Stop(this->dyna.actor.cutscene);
play->nextEntrance = ENTRANCE(MILK_ROAD, 5);
play->transitionType = TRANS_TYPE_64;
@@ -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;
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;
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;
@@ -1545,10 +1545,10 @@ 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)) {
+ if ((ObjUm_UpdatePath(this, play) == OBJUM_PATH_STATE_4) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_02)) {
ActorCutscene_Stop(this->dyna.actor.cutscene);
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;
@@ -1823,7 +1823,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..24e816644 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,
@@ -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);
}
}
@@ -166,7 +166,7 @@ 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++;
}
@@ -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..2abc2a38b 100644
--- a/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.h
+++ b/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.h
@@ -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..4b0a797f6 100644
--- a/src/overlays/actors/ovl_Obj_Visiblock/z_obj_visiblock.c
+++ b/src/overlays/actors/ovl_Obj_Visiblock/z_obj_visiblock.c
@@ -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 6740cc684..b7a1e59be 100644
--- a/src/overlays/actors/ovl_Obj_Vspinyroll/z_obj_vspinyroll.c
+++ b/src/overlays/actors/ovl_Obj_Vspinyroll/z_obj_vspinyroll.c
@@ -13,7 +13,7 @@
void ObjVspinyroll_Init(Actor* thisx, PlayState* play);
void ObjVspinyroll_Destroy(Actor* thisx, PlayState* play);
-void ObjVspinyroll_Update(Actor* thisx, PlayState* play);
+void ObjVspinyroll_Update(Actor* thisx, PlayState* play2);
void ObjVspinyroll_Draw(Actor* thisx, PlayState* play);
void func_80A3CEC4(ObjVspinyroll* this);
@@ -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,
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 ea9b35f5c..3fa3260fd 100644
--- a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c
+++ b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c
@@ -15,14 +15,14 @@
void ObjWarpstone_Init(Actor* thisx, PlayState* play);
void ObjWarpstone_Destroy(Actor* thisx, PlayState* play);
void ObjWarpstone_Update(Actor* thisx, PlayState* play);
-void ObjWarpstone_Draw(Actor* thisx, PlayState* play);
+void ObjWarpstone_Draw(Actor* thisx, PlayState* play2);
void ObjWarpstone_SetupAction(ObjWarpstone* this, ObjWarpstoneActionFunc actionFunc);
s32 ObjWarpstone_ClosedIdle(ObjWarpstone* this, PlayState* play);
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,
@@ -181,11 +181,11 @@ void ObjWarpstone_Draw(Actor* thisx, PlayState* play2) {
gDPSetEnvColor(POLY_XLU_DISP++, 100, 200, 0, 255);
Matrix_RotateZF((((play->gameplayFrames * 1500) & 0xFFFF) * M_PI) / 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++, gOwlStatueWhiteFlashDL);
+ gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL);
Matrix_Pop();
Matrix_RotateZF((~((play->gameplayFrames * 1200) & 0xFFFF) * M_PI) / 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++, 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..a2db609d6 100644
--- a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.h
+++ b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.h
@@ -26,8 +26,6 @@ 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)])
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..184fed3d6 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,9 +41,12 @@ 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);
}
}
@@ -69,7 +72,7 @@ void func_808A7AAC(ObjWturn* this, PlayState* play) {
ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
func_8016566C(140);
this->subCamId = ActorCutscene_GetCurrentSubCamId(this->actor.cutscene);
- func_800B7298(play, &this->actor, 21);
+ 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,7 +96,7 @@ 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_800B7298(play, &this->actor, PLAYER_CSMODE_84);
func_800B8E58(player, NA_SE_VO_NAVY_ENEMY);
this->unk_14A = 0;
func_80165690();
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..9399940d8 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,
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..9d35288c5 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_PlaySfxAtPos(&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 cutscene = this->dyna.actor.cutscene;
+
+ if (this->openTimer == 0) {
+ if ((cutscene >= 0) && !ActorCutscene_GetCanPlayNext(cutscene)) {
+ ActorCutscene_SetIntentToPlay(cutscene);
+ } else if (cutscene >= 0) {
+ ActorCutscene_StartAndSetUnkLinkFields(cutscene, &this->dyna.actor);
+ this->openTimer = -1;
+ } else {
+ ObjY2shutter_SetupOpen(this, info, shutterType);
+ }
+ } else if (this->openTimer < 0) {
+ if (func_800F22C4(cutscene, &this->dyna.actor)) {
+ 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_PlaySfxAtPos(&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_PlaySfxAtPos(&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 68ee9d27f..96d76f807 100644
--- a/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c
+++ b/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c
@@ -15,13 +15,11 @@ void OceffStorm_Destroy(Actor* thisx, PlayState* play);
void OceffStorm_Update(Actor* thisx, PlayState* play);
void OceffStorm_Draw(Actor* thisx, PlayState* play);
-void func_80981928(OceffStorm* this, PlayState* play);
+void OceffStorm_DefaultAction(OceffStorm* this, PlayState* play);
void func_80981B48(OceffStorm* this, PlayState* play);
+void OceffStorm_Draw2(Actor* thisx, PlayState* play);
-void OceffStorm_SetupAction(OceffStorm* this, OceffStormActionFunc actionFunc);
-
-#if 0
-const ActorInit Oceff_Storm_InitVars = {
+ActorInit Oceff_Storm_InitVars = {
ACTOR_OCEFF_STORM,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -33,22 +31,194 @@ const ActorInit Oceff_Storm_InitVars = {
(ActorFunc)OceffStorm_Draw,
};
-#endif
+void OceffStorm_SetupAction(OceffStorm* this, OceffStormActionFunc actionFunc) {
+ this->actionFunc = actionFunc;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Oceff_Storm/OceffStorm_SetupAction.s")
+s32 func_8098176C(PlayState* play) {
+ s32 ret = false;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Oceff_Storm/func_8098176C.s")
+ switch (play->sceneId) {
+ case SCENE_13HUBUKINOMITI:
+ case SCENE_11GORONNOSATO:
+ case SCENE_10YUKIYAMANOMURA:
+ case SCENE_14YUKIDAMANOMITI:
+ case SCENE_12HAKUGINMAE:
+ case SCENE_17SETUGEN:
+ case SCENE_GORONRACE:
+ if (gSaveContext.sceneLayer == 0) {
+ ret = true;
+ }
+ break;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Oceff_Storm/OceffStorm_Init.s")
+ case SCENE_10YUKIYAMANOMURA2:
+ if (gSaveContext.sceneLayer == 1) {
+ ret = true;
+ }
+ break;
+ }
+ return ret;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Oceff_Storm/OceffStorm_Destroy.s")
+void OceffStorm_Init(Actor* thisx, PlayState* play) {
+ s32 pad[2];
+ Player* player = GET_PLAYER(play);
+ OceffStorm* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Oceff_Storm/func_80981928.s")
+ OceffStorm_SetupAction(this, OceffStorm_DefaultAction);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Oceff_Storm/func_80981B48.s")
+ this->posYOffAdd = 0;
+ this->counter = 0;
+ this->primColorAlpha = 0;
+ this->vtxAlpha = 0;
+ this->actor.scale.y = 0.0f;
+ this->actor.scale.z = 0.0f;
+ this->actor.scale.x = 0.0f;
+ this->posYOff = this->posYOffAdd;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Oceff_Storm/OceffStorm_Update.s")
+ if (this->actor.params == OCEFF_STORM_ACTION_PARAM_1) {
+ OceffStorm_SetupAction(this, func_80981B48);
+ this->actor.draw = OceffStorm_Draw2;
+ } else {
+ this->actor.world.pos.y = player->actor.world.pos.y;
+ this->actor.world.pos.x = player->bodyPartsPos[0].x;
+ this->actor.world.pos.z = player->bodyPartsPos[0].z;
+ gSaveContext.jinxTimer = 0;
+ if ((play->interfaceCtx.restrictions.songOfStorms == 0) && !func_8098176C(play)) {
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_OKARINA_EFFECT, this->actor.world.pos.x,
+ this->actor.world.pos.y - 30.0f, this->actor.world.pos.z, 0, 0, 0, 1);
+ }
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Oceff_Storm/func_80981BB8.s")
+void OceffStorm_Destroy(Actor* thisx, PlayState* play) {
+ OceffStorm* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Oceff_Storm/OceffStorm_Draw.s")
+ Magic_Reset(play);
+}
+
+void OceffStorm_DefaultAction(OceffStorm* this, PlayState* play) {
+ f32 cylinderScale;
+
+ switch (gSaveContext.save.playerForm) {
+ default:
+ cylinderScale = 1.0f;
+ break;
+
+ case PLAYER_FORM_DEKU:
+ cylinderScale = 1.3f;
+ break;
+
+ case PLAYER_FORM_ZORA:
+ cylinderScale = 1.2f;
+ break;
+
+ case PLAYER_FORM_GORON:
+ cylinderScale = 2.0f;
+ break;
+ }
+
+ if (this->counter < 10) {
+ this->primColorAlpha = (s8)(this->counter * 10.0f);
+ } else if (this->counter > 60) {
+ this->primColorAlpha = (s8)((70 - this->counter) * 10.0f);
+ } else {
+ this->primColorAlpha = 100;
+ }
+
+ if ((this->counter < 10) || (this->counter >= 60)) {
+ this->vtxAlpha = 0;
+ } else if (this->counter <= 40) {
+ if (this->vtxAlpha <= 200) {
+ this->vtxAlpha += 10;
+ }
+ this->actor.scale.x = this->actor.scale.z = 0.4f * cylinderScale;
+ this->actor.scale.y = 0.3f;
+ } else if (this->counter > 40) {
+ this->vtxAlpha = (60 - this->counter) * 10;
+ } else {
+ this->actor.scale.x = this->actor.scale.z = 0.4f * cylinderScale;
+ this->vtxAlpha = -1;
+ }
+
+ if (this->counter > 40) {
+ this->actor.world.pos.y += this->posYOff * 0.01f;
+ this->posYOff += this->posYOffAdd;
+ this->posYOffAdd += 10;
+ }
+
+ if (this->counter < 70) {
+ this->counter++;
+ } else {
+ Actor_Kill(&this->actor);
+ }
+}
+
+void func_80981B48(OceffStorm* this, PlayState* play) {
+ if (this->primColorAlpha < 100) {
+ this->primColorAlpha += 5;
+ }
+ //! @bug Actor_Kill is never called so the actor will stay alive forever
+}
+
+void OceffStorm_Update(Actor* thisx, PlayState* play) {
+ OceffStorm* this = THIS;
+
+ this->actor.shape.rot.y = Camera_GetCamDirYaw(GET_ACTIVE_CAM(play));
+ this->actionFunc(this, play);
+}
+
+#include "assets/overlays/ovl_Oceff_Storm/ovl_Oceff_Storm.c"
+
+void OceffStorm_Draw2(Actor* thisx, PlayState* play) {
+ s32 scroll = play->state.frames & 0xFFF;
+ OceffStorm* this = THIS;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ gDPPipeSync(POLY_XLU_DISP++);
+
+ POLY_XLU_DISP = func_8012C3A4(POLY_XLU_DISP);
+
+ gDPSetAlphaDither(POLY_XLU_DISP++, G_AD_NOISE);
+ gDPSetColorDither(POLY_XLU_DISP++, G_CD_NOISE);
+
+ gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 200, 200, 150, this->primColorAlpha);
+
+ gSPDisplayList(POLY_XLU_DISP++, &sSongOfStormsMaterialDL);
+ gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, scroll * 8, scroll * 4, 64,
+ 64, 1, scroll * 4, scroll * 4, 64, 64));
+ gSPTextureRectangle(POLY_XLU_DISP++, 0, 0, SCREEN_WIDTH << 2, SCREEN_HEIGHT << 2, G_TX_RENDERTILE, 0, 0,
+ (s32)(0.13671875 * (1 << 10)), (s32)(-0.13671875 * (1 << 10)));
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void OceffStorm_Draw(Actor* thisx, PlayState* play) {
+ u32 scroll = play->state.frames & 0xFFF;
+ OceffStorm* this = (OceffStorm*)thisx;
+ Vtx* vtxPtr = sSongOfStormsCylinderVtx;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C2DC(play->state.gfxCtx);
+
+ gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 255, 200, 255);
+ gDPSetEnvColor(POLY_XLU_DISP++, 150, 150, 0, 128);
+ gDPSetAlphaDither(POLY_XLU_DISP++, G_AD_NOISE);
+ gDPSetColorDither(POLY_XLU_DISP++, G_CD_NOISE);
+
+ vtxPtr[0].v.cn[3] = vtxPtr[6].v.cn[3] = vtxPtr[16].v.cn[3] = vtxPtr[25].v.cn[3] = this->vtxAlpha >> 1;
+ vtxPtr[10].v.cn[3] = vtxPtr[22].v.cn[3] = this->vtxAlpha;
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ gSPDisplayList(POLY_XLU_DISP++, &sSongOfStormsCylinderMaterialDL);
+ gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, scroll * 4, (0 - scroll) * 8,
+ 32, 32, 1, scroll * 8, (0 - scroll) * 12, 32, 32));
+ gSPDisplayList(POLY_XLU_DISP++, &sSongOfStormsCylinderModelDL);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+
+ OceffStorm_Draw2(&this->actor, play);
+}
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 460ede844..87a67191c 100644
--- a/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.h
+++ b/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.h
@@ -9,10 +9,16 @@ typedef void (*OceffStormActionFunc)(struct OceffStorm*, PlayState*);
typedef struct OceffStorm {
/* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0x8];
+ /* 0x144 */ u16 counter;
+ /* 0x146 */ u8 primColorAlpha;
+ /* 0x147 */ u8 vtxAlpha;
+ /* 0x148 */ s16 posYOff;
+ /* 0x14A */ s16 posYOffAdd;
/* 0x14C */ OceffStormActionFunc actionFunc;
} OceffStorm; // size = 0x150
-extern const ActorInit Oceff_Storm_InitVars;
+typedef enum {
+ /* 1 */ OCEFF_STORM_ACTION_PARAM_1 = 1
+} OceffStormActionParams;
#endif // Z_OCEFF_STORM_H
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..0d0db6385 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);
}
}
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 093261344..74e711cfa 100644
--- a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c
+++ b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c
@@ -17,9 +17,9 @@ void ShotSun_Destroy(Actor* thisx, PlayState* play);
void ShotSun_Update(Actor* thisx, PlayState* play);
void ShotSun_UpdateForOcarina(ShotSun* this, PlayState* play);
-void ShotSun_UpdateHyliaSun(ShotSun* this, PlayState* play2);
+void ShotSun_UpdateHyliaSun(ShotSun* this, PlayState* play);
-const ActorInit Shot_Sun_InitVars = {
+ActorInit Shot_Sun_InitVars = {
ACTOR_SHOT_SUN,
ACTORCAT_PROP,
FLAGS,
@@ -98,7 +98,7 @@ 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);
}
}
@@ -164,12 +164,16 @@ void ShotSun_UpdateHyliaSun(ShotSun* this, PlayState* play) {
}
}
- 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..8c1e98bed 100644
--- a/src/overlays/actors/ovl_TG_Sw/z_tg_sw.c
+++ b/src/overlays/actors/ovl_TG_Sw/z_tg_sw.c
@@ -18,7 +18,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,
@@ -84,7 +84,7 @@ void TGSw_ActionExecuteOneShot(TGSw* this, PlayState* play) {
actor = actor->next;
} while (actor != NULL);
- Actor_MarkForDeath(&this->actor);
+ Actor_Kill(&this->actor);
}
void TGSw_Init(Actor* thisx, PlayState* play) {
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_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_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_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 bd8a40ed8..3298b2ab3 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
@@ -14,7 +14,7 @@
#define PARAMS ((EffectSsBubbleInitParams*)initParamsx)
u32 EffectSsBubble_Init(PlayState* play, u32 index, EffectSs* this, void* initParamsx);
-void EffectSsBubble_Update(PlayState* play, u32 index, EffectSs* this);
+void EffectSsBubble_Update(PlayState* play2, u32 index, EffectSs* this);
void EffectSsBubble_Draw(PlayState* play, u32 index, EffectSs* this);
const EffectSsInit Effect_Ss_Bubble_InitVars = {
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_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_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_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_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_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_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_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..1108e61ce 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
@@ -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_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 e33b486f4..bf21a8741 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
@@ -37,7 +37,7 @@ u32 EffectSsExtra_Init(PlayState* play, u32 index, EffectSs* this, void* initPar
if ((objIndex >= 0) && (Object_IsLoaded(&play->objectCtx, objIndex))) {
void* segBackup = gSegments[6];
- gSegments[6] = PHYSICAL_TO_VIRTUAL(play->objectCtx.status[objIndex].segment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIndex].segment);
this->pos = params->pos;
this->velocity = params->velocity;
@@ -66,7 +66,7 @@ void EffectSsExtra_Draw(PlayState* play, u32 index, EffectSs* this) {
OPEN_DISPS(play->state.gfxCtx);
- gSegments[6] = PHYSICAL_TO_VIRTUAL(storedSegment);
+ gSegments[6] = VIRTUAL_TO_PHYSICAL(storedSegment);
gSPSegment(POLY_XLU_DISP++, 0x06, storedSegment);
@@ -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_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..b81ccf594 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
@@ -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_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_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_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_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_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_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_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_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..52561fea2 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
@@ -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_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_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_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_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_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_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..c5c058cc3 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
@@ -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_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_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_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..1c6d53e7f 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
@@ -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/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 4584cfab2..00e7cfabd 100644
--- a/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.c
+++ b/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.c
@@ -16,7 +16,7 @@ void TransitionTriforce_SetType(void* thisx, s32 type);
void TransitionTriforce_SetColor(void* thisx, u32 color);
s32 TransitionTriforce_IsDone(void* thisx);
-const TransitionInit TransitionTriforce_InitVars = {
+TransitionInit TransitionTriforce_InitVars = {
TransitionTriforce_Init, TransitionTriforce_Destroy, TransitionTriforce_Update, TransitionTriforce_Draw,
TransitionTriforce_Start, TransitionTriforce_SetType, TransitionTriforce_SetColor, NULL,
TransitionTriforce_IsDone,
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 2637b32cf..06d807a08 100644
--- a/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.h
+++ b/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.h
@@ -28,6 +28,4 @@ typedef struct {
/* 0x060 */ Mtx modelView[2][3];
} TransitionTriforce; // size = 0x1E0
-extern const TransitionInit TransitionTriforce_InitVars;
-
#endif
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 560d341f2..ed12d400e 100644
--- a/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.c
+++ b/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.c
@@ -17,7 +17,7 @@ void TransitionWipe1_SetEnvColor(void* thisx, u32 color);
s32 TransitionWipe1_IsDone(void* thisx);
#if 0
-const TransitionInit TransitionWipe1_InitVars = {
+TransitionInit TransitionWipe1_InitVars = {
TransitionWipe1_Init,
TransitionWipe1_Destroy,
TransitionWipe1_Update,
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 fe70e724b..971940bb2 100644
--- a/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.h
+++ b/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.h
@@ -7,6 +7,4 @@ typedef struct {
/* 0x0000 */ char unk_0[0x218];
} TransitionWipe1; // size = 0x218
-extern const TransitionInit TransitionWipe1_InitVars;
-
#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 bbd488642..c33f3c8c7 100644
--- a/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c
+++ b/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c
@@ -17,7 +17,7 @@ void TransitionWipe3_SetEnvColor(void* thisx, u32 color);
s32 TransitionWipe3_IsDone(void* thisx);
#if 0
-const TransitionInit TransitionWipe3_InitVars = {
+TransitionInit TransitionWipe3_InitVars = {
TransitionWipe3_Init,
TransitionWipe3_Destroy,
TransitionWipe3_Update,
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 f74f86a61..8fed0dcfe 100644
--- a/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h
+++ b/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h
@@ -7,6 +7,4 @@ typedef struct {
/* 0x0000 */ char unk_0[0x120];
} TransitionWipe3; // size = 0x120
-extern const TransitionInit TransitionWipe3_InitVars;
-
#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 49dd027c8..e91d8ab5e 100644
--- a/src/overlays/fbdemos/ovl_fbdemo_wipe4/z_fbdemo_wipe4.c
+++ b/src/overlays/fbdemos/ovl_fbdemo_wipe4/z_fbdemo_wipe4.c
@@ -17,7 +17,7 @@ void TransitionWipe4_SetEnvColor(void* thisx, u32 color);
s32 TransitionWipe4_IsDone(void* thisx);
#if 0
-const TransitionInit TransitionWipe4_InitVars = {
+TransitionInit TransitionWipe4_InitVars = {
TransitionWipe4_Init,
TransitionWipe4_Destroy,
TransitionWipe4_Update,
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 60296230e..8a677c2a4 100644
--- a/src/overlays/fbdemos/ovl_fbdemo_wipe4/z_fbdemo_wipe4.h
+++ b/src/overlays/fbdemos/ovl_fbdemo_wipe4/z_fbdemo_wipe4.h
@@ -7,6 +7,4 @@ typedef struct {
/* 0x0000 */ char unk_0[0x28];
} TransitionWipe4; // size = 0x28
-extern const TransitionInit TransitionWipe4_InitVars;
-
#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 87f5638ac..a4b0cfa74 100644
--- a/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c
+++ b/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c
@@ -6,6 +6,8 @@
#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 +18,129 @@ void TransitionWipe5_SetColor(void* thisx, u32 color);
void TransitionWipe5_SetEnvColor(void* thisx, u32 color);
s32 TransitionWipe5_IsDone(void* thisx);
-#if 0
-const TransitionInit TransitionWipe5_InitVars = {
- TransitionWipe5_Init,
- TransitionWipe5_Destroy,
- TransitionWipe5_Update,
- TransitionWipe5_Draw,
- TransitionWipe5_Start,
- TransitionWipe5_SetType,
- TransitionWipe5_SetColor,
- TransitionWipe5_SetEnvColor,
- TransitionWipe5_IsDone,
+TransitionInit TransitionWipe5_InitVars = {
+ 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 == 1) {
+ 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 d8ffe0616..d5cd9137d 100644
--- a/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.h
+++ b/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.h
@@ -4,9 +4,14 @@
#include "global.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
-extern const TransitionInit TransitionWipe5_InitVars;
-
#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_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..c56cc4bbb 100644
--- a/src/overlays/gamestates/ovl_opening/z_opening.c
+++ b/src/overlays/gamestates/ovl_opening/z_opening.c
@@ -12,7 +12,7 @@ void TitleSetup_SetupTitleScreen(TitleSetupState* this) {
static s32 sOpeningEntrances[] = { ENTRANCE(CUTSCENE, 0), ENTRANCE(CUTSCENE, 1) };
static s32 sOpeningCutscenes[] = { 0xFFFA, 0xFFFA };
- gSaveContext.eventInf[1] &= (u8)~0x80;
+ CLEAR_EVENTINF(EVENTINF_17);
gSaveContext.gameMode = 1;
Sram_InitNewSave();
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..461192d48 100644
--- a/src/overlays/gamestates/ovl_select/z_select.c
+++ b/src/overlays/gamestates/ovl_select/z_select.c
@@ -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);
@@ -994,7 +994,7 @@ 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_PrintAgeSetting(this, printer, GET_PLAYER_FORM);
MapSelect_PrintCutsceneSetting(this, printer, ((void)0, gSaveContext.save.cutscene));
POLY_OPA_DISP = GfxPrint_Close(printer);
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/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..b8858b7ca 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
@@ -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);
@@ -894,10 +894,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);
+ CUR_FORM_EQUIP(EQUIP_SLOT_B) = value + (ITEM_SWORD_KOKIRI - 1);
gSaveContext.save.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,7 +909,7 @@ 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);
+ CUR_FORM_EQUIP(EQUIP_SLOT_B) = value + (ITEM_SWORD_KOKIRI - 1);
gSaveContext.save.playerData.swordHealth = 100;
}
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..d1a358e75 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);
}
@@ -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 ((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,20 +309,21 @@ 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.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) {
KaleidoScope_DrawAmmoCount(pauseCtx, play->state.gfxCtx,
@@ -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];
}
@@ -561,7 +565,7 @@ 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]];
@@ -571,7 +575,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
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 6e23e8f6f..87acfaa6c 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
@@ -1,108 +1,977 @@
/*
* File: z_kaleido_map.c
* Overlay: ovl_kaleido_scope
- * Description:
+ * Description: Pause Menu: Map Page
*/
#include "z_kaleido_scope.h"
+#include "interface/parameter_static/parameter_static.h"
+#include "interface/icon_item_field_static/icon_item_field_static.h"
+#include "interface/icon_item_dungeon_static/icon_item_dungeon_static.h"
+#include "interface/icon_item_jpn_static/icon_item_jpn_static.h"
-extern UNK_TYPE D_02001360;
-extern UNK_TYPE D_020044A0;
-extern UNK_TYPE D_02004AA0;
-extern UNK_TYPE D_0200B998;
-extern UNK_TYPE D_08062000;
-extern UNK_TYPE D_08064340;
-extern UNK_TYPE D_0B000000;
-extern UNK_TYPE D_0C000000;
-extern UNK_TYPE D_0C006C00;
+extern s16 D_8082B7F0[];
+extern s16 D_8082B838[];
-s32 D_8082B4A0[] = { 0x09003600, 0x09003F00, 0x09004800 };
+extern TexturePtr D_09007500; // gPlayerFaceIcon
-s32 D_8082B4AC[] = {
- 0x0D000000,
- 0x0D000800,
- 0x0D001000,
- 0x0D001800,
+#define WORLD_MAP_IMAGE_TEX_WIDTH 216
+#define WORLD_MAP_IMAGE_TEX_HEIGHT 128
+
+void KaleidoScope_DrawDungeonStrayFairyCount(PlayState* play) {
+ s16 counterDigits[2];
+ s16 rectLeft;
+ s16 digitIndex;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ // Get digits for max number of stray fairies
+ counterDigits[1] = 15;
+ counterDigits[0] = counterDigits[1] / 10;
+ counterDigits[1] -= (s16)(counterDigits[0] * 10);
+
+ // Draw max number of stray fairies
+ for (rectLeft = 116, digitIndex = 0; digitIndex < 2; digitIndex++, rectLeft += 8) {
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, 255);
+
+ 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);
+
+ gSPTextureRectangle(POLY_OPA_DISP++, rectLeft * 4, 145 << 2, (rectLeft + 8) * 4, 161 << 2, G_TX_RENDERTILE, 0,
+ 0, 1 << 10, 1 << 10);
+ }
+
+ // Draw Counter slash
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, 255);
+
+ POLY_OPA_DISP =
+ 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);
+
+ gSPTextureRectangle(POLY_OPA_DISP++, 106 << 2, 145 << 2, 114 << 2, 161 << 2, G_TX_RENDERTILE, 0, 0, 1 << 10,
+ 1 << 10);
+
+ // Get digits for current number of stray fairies collected
+ counterDigits[1] = gSaveContext.save.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex];
+ counterDigits[0] = counterDigits[1] / 10;
+ counterDigits[1] -= (s16)(counterDigits[0] * 10);
+
+ // Draw digits for current number of stray fairies collected
+ for (rectLeft = 88, digitIndex = 0; digitIndex < 2; digitIndex++, rectLeft += 8) {
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, 255);
+
+ 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);
+
+ gSPTextureRectangle(POLY_OPA_DISP++, rectLeft * 4, 145 << 2, (rectLeft + 8) * 4, 161 << 2, G_TX_RENDERTILE, 0,
+ 0, 1 << 10, 1 << 10);
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+TexturePtr sDungeonItemTextures[] = {
+ 0x09003600, // `gBossKeyIconTex`: DUNGEON_BOSS_KEY
+ 0x09003F00, // `gCompassIconTex`: DUNGEON_COMPASS
+ 0x09004800, // `gDungeonMapIconTex`: DUNGEON_MAP
};
-s16 D_8082B4BC[] = {
- 0x0043,
- 0x0051,
- 0x005F,
- 0x006D,
+TexturePtr sDungeonTitleTextures[] = {
+ gPauseWoodfallTitleENGTex, // DUNGEON_INDEX_WOODFALL_TEMPLE
+ gPauseSnowheadTitleENGTex, // DUNGEON_INDEX_SNOWHEAD_TEMPLE
+ gPauseGreatBayTitleENGTex, // DUNGEON_INDEX_GREAT_BAY_TEMPLE
+ gPauseStoneTowerTitleENGTex, // DUNGEON_INDEX_STONE_TOWER_TEMPLE
};
-s16 D_8082B4C4 = 0x7B;
-s16 D_8082B4C8 = 30;
-s16 D_8082B4CC = 0;
-s16 D_8082B4D0 = 0xF;
-s16 D_8082B4D4 = 0;
-s16 D_8082B4D8 = 0xFF;
-f32 D_8082B4DC = 100.0f;
+s16 sDungeonMapFloorIconPosY[] = { 67, 81, 95, 109, 123 };
-s32 D_8082B4E0[] = {
- 0x02008998, 0x0C001B80, 0x02008998, 0x0C001B80, 0x02009598, 0x0C002780, 0x02009598, 0x0C002780,
- 0x0200A198, 0x0C003380, 0x0200A198, 0x0C003380, 0x0200AD98, 0x0C003F80, 0x0200AD98, 0x0C003F80,
+void KaleidoScope_DrawDungeonMap(PlayState* play) {
+ static s16 sStrayFairyIconTimer = 30;
+ static s16 sStrayFairyIconIndex = 0;
+ static s16 sStrayFairyIconAlphaScaleTimer = 15;
+ static s16 sStrayFairyIconAlphaScaleState = 0;
+ static s16 sStrayFairyIconAlpha = 255;
+ static f32 sStrayFairyIconScale = 100.0f;
+ static TexturePtr sStrayFairyIconTextures[][4] = {
+ // DUNGEON_INDEX_WOODFALL_TEMPLE
+ { gStrayFairyWoodfallIconTex, gDungeonStrayFairyWoodfallIconTex, gStrayFairyWoodfallIconTex,
+ gDungeonStrayFairyWoodfallIconTex },
+ // DUNGEON_INDEX_SNOWHEAD_TEMPLE
+ { gStrayFairySnowheadIconTex, gDungeonStrayFairySnowheadIconTex, gStrayFairySnowheadIconTex,
+ gDungeonStrayFairySnowheadIconTex },
+ // DUNGEON_INDEX_GREAT_BAY_TEMPLE
+ { gStrayFairyGreatBayIconTex, gDungeonStrayFairyGreatBayIconTex, gStrayFairyGreatBayIconTex,
+ gDungeonStrayFairyGreatBayIconTex },
+ // DUNGEON_INDEX_STONE_TOWER_TEMPLE
+ { gStrayFairyStoneTowerIconTex, gDungeonStrayFairyStoneTowerIconTex, gStrayFairyStoneTowerIconTex,
+ gDungeonStrayFairyStoneTowerIconTex },
+ };
+ static u8 sStrayFairyIconPrimColors[][3] = {
+ { 255, 110, 160 }, // DUNGEON_INDEX_WOODFALL_TEMPLE
+ { 90, 255, 100 }, // DUNGEON_INDEX_SNOWHEAD_TEMPLE
+ { 120, 255, 255 }, // DUNGEON_INDEX_GREAT_BAY_TEMPLE
+ { 245, 245, 90 }, // DUNGEON_INDEX_STONE_TOWER_TEMPLE
+ };
+ static u8 sStrayFairyIconEnvColors[][3] = {
+ { 255, 255, 255 }, // DUNGEON_INDEX_WOODFALL_TEMPLE
+ { 255, 255, 255 }, // DUNGEON_INDEX_SNOWHEAD_TEMPLE
+ { 255, 255, 255 }, // DUNGEON_INDEX_GREAT_BAY_TEMPLE
+ { 225, 170, 0 }, // DUNGEON_INDEX_STONE_TOWER_TEMPLE
+ };
+ static s32 sStrayFairyIconRectS[] = {
+ 1 << 10, // mirror texture horizontally
+ 0, // default
+ 0, // default
+ 0 // default
+ };
+ PauseContext* pauseCtx = &play->pauseCtx;
+ s16 i;
+ s16 j;
+ f32 scale;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ j = 72 + (pauseCtx->cursorSlot[PAUSE_MAP] * 4);
+ KaleidoScope_SetCursorVtx(pauseCtx, j, pauseCtx->mapPageVtx);
+
+ pauseCtx->cursorItem[PAUSE_MAP] = PAUSE_ITEM_NONE;
+ if (pauseCtx->cursorSpecialPos == 0) {
+ if (pauseCtx->cursorPoint[PAUSE_MAP] <= DUNGEON_STRAY_FAIRIES) {
+ pauseCtx->cursorItem[PAUSE_MAP] = ITEM_KEY_BOSS + pauseCtx->cursorPoint[PAUSE_MAP];
+ }
+ pauseCtx->cursorSlot[PAUSE_MAP] = pauseCtx->cursorPoint[PAUSE_MAP];
+ }
+
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[60], 16, 0);
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
+ gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA);
+
+ POLY_OPA_DISP =
+ Gfx_DrawTexQuadIA8(POLY_OPA_DISP, sDungeonTitleTextures[((void)0, gSaveContext.dungeonIndex)], 128, 16, 0);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+
+ // 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->mainState == PAUSE_MAIN_STATE_IDLE)) {
+ // If (pauseCtx->state == PAUSE_STATE_MAIN), then the other conditions are redundant and
+ // always return true
+ 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) {
+ sStrayFairyIconAlpha -= 6;
+ sStrayFairyIconScale -= 1.0f;
+ } else {
+ sStrayFairyIconAlpha += 6;
+ sStrayFairyIconScale += 1.0f;
+ }
+
+ sStrayFairyIconAlphaScaleTimer--;
+ if (sStrayFairyIconAlphaScaleTimer == 0) {
+ sStrayFairyIconAlphaScaleState ^= 1;
+ sStrayFairyIconAlphaScaleTimer = 15;
+ }
+
+ func_8012C8AC(play->state.gfxCtx);
+
+ gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0,
+ PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE,
+ 0);
+
+ gDPSetPrimColor(
+ POLY_OPA_DISP++, 0, 0, sStrayFairyIconPrimColors[((void)0, gSaveContext.dungeonIndex)][0],
+ sStrayFairyIconPrimColors[((void)0, gSaveContext.dungeonIndex)][1],
+ sStrayFairyIconPrimColors[((void)0, gSaveContext.dungeonIndex)][2], sStrayFairyIconAlpha);
+ gDPSetEnvColor(POLY_OPA_DISP++, sStrayFairyIconEnvColors[((void)0, gSaveContext.dungeonIndex)][0],
+ sStrayFairyIconEnvColors[((void)0, gSaveContext.dungeonIndex)][1],
+ sStrayFairyIconEnvColors[((void)0, gSaveContext.dungeonIndex)][2], 0);
+
+ scale = sStrayFairyIconScale / 100.0f;
+
+ Matrix_Translate(-83.0f, -29.0f, -128.0f, MTXMODE_NEW);
+ 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);
+
+ pauseCtx->mapPageVtx[76].v.ob[0] = pauseCtx->mapPageVtx[78].v.ob[0] = -16;
+
+ pauseCtx->mapPageVtx[77].v.ob[0] = pauseCtx->mapPageVtx[79].v.ob[0] =
+ pauseCtx->mapPageVtx[76].v.ob[0] + 32;
+
+ pauseCtx->mapPageVtx[76].v.ob[1] = pauseCtx->mapPageVtx[77].v.ob[1] = 12;
+
+ pauseCtx->mapPageVtx[78].v.ob[1] = pauseCtx->mapPageVtx[79].v.ob[1] =
+ pauseCtx->mapPageVtx[76].v.ob[1] - 24;
+
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[76], 4, 0);
+
+ POLY_OPA_DISP =
+ Gfx_DrawTexQuad4b(POLY_OPA_DISP, gStrayFairyGlowingCircleIconTex, G_IM_FMT_I, 32, 24, 0);
+ KaleidoScope_SetView(pauseCtx, pauseCtx->eye.x, pauseCtx->eye.y, pauseCtx->eye.z);
+ func_8012C628(play->state.gfxCtx);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, sStrayFairyIconAlpha);
+
+ sStrayFairyIconTimer--;
+
+ if (sStrayFairyIconTimer == 0) {
+ sStrayFairyIconIndex = (sStrayFairyIconIndex + 1) & 3;
+ sStrayFairyIconTimer = 34;
+ }
+
+ gDPLoadTextureBlock(
+ POLY_OPA_DISP++,
+ sStrayFairyIconTextures[((void)0, gSaveContext.dungeonIndex)][sStrayFairyIconIndex],
+ G_IM_FMT_RGBA, G_IM_SIZ_32b, 32, 24, 0, G_TX_MIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 5,
+ G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ gSPTextureRectangle(POLY_OPA_DISP++, 54 << 2, 140 << 2, 86 << 2, 164 << 2, G_TX_RENDERTILE,
+ sStrayFairyIconRectS[sStrayFairyIconIndex], 0, 1 << 10, 1 << 10);
+
+ KaleidoScope_DrawDungeonStrayFairyCount(play);
+ func_8012C8AC(play->state.gfxCtx);
+ }
+ }
+ } else if (CHECK_DUNGEON_ITEM(i, gSaveContext.dungeonIndex)) {
+ gDPLoadTextureBlock(POLY_OPA_DISP++, sDungeonItemTextures[i], 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);
+
+ gSP1Quadrangle(POLY_OPA_DISP++, j, j + 2, j + 3, j + 1, 0);
+ }
+ }
+
+ func_80108AF8(play);
+
+ 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 == 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 =
+ 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 = 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);
+
+ func_8012C8AC(play->state.gfxCtx);
+ }
+ }
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_BILERP);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void KaleidoScope_UpdateDungeonCursor(PlayState* play) {
+ s32 pad;
+ PauseContext* pauseCtx = &play->pauseCtx;
+ MessageContext* msgCtx = &play->msgCtx;
+ s16 i;
+ s16 oldCursorPoint;
+
+ 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;
+ if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) {
+ func_80821A04(play);
+ pauseCtx->cursorXIndex[PAUSE_MAP] = 0;
+ pauseCtx->cursorSlot[PAUSE_MAP] = pauseCtx->unk_256;
+ pauseCtx->cursorPoint[PAUSE_MAP] = pauseCtx->unk_256;
+ } else if (pauseCtx->cursorSpecialPos == 0) {
+ if (pauseCtx->cursorXIndex[PAUSE_MAP] == 0) {
+ pauseCtx->cursorXIndex[PAUSE_MAP] = 1;
+ pauseCtx->cursorPoint[PAUSE_MAP] = DUNGEON_STRAY_FAIRIES;
+ } else {
+ if (pauseCtx->cursorPoint[PAUSE_MAP] == DUNGEON_STRAY_FAIRIES) {
+ pauseCtx->cursorPoint[PAUSE_MAP] = DUNGEON_NONE;
+ }
+
+ while (true) {
+ pauseCtx->cursorPoint[PAUSE_MAP]++;
+ if (pauseCtx->cursorPoint[PAUSE_MAP] == DUNGEON_STRAY_FAIRIES) {
+ KaleidoScope_MoveCursorToSpecialPos(play, PAUSE_CURSOR_PAGE_RIGHT);
+ break;
+ }
+ if (CHECK_DUNGEON_ITEM(pauseCtx->cursorPoint[PAUSE_MAP], gSaveContext.dungeonIndex)) {
+ break;
+ }
+ }
+ }
+ }
+ } else if (pauseCtx->stickAdjX < -30) {
+ pauseCtx->unk_298 = 4.0f;
+ if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) {
+ func_80821A04(play);
+ pauseCtx->cursorXIndex[PAUSE_MAP] = 1;
+ pauseCtx->cursorPoint[PAUSE_MAP] = DUNGEON_MAP;
+ if (!CHECK_DUNGEON_ITEM(DUNGEON_MAP, gSaveContext.dungeonIndex)) {
+ pauseCtx->cursorPoint[PAUSE_MAP]--; // DUNGEON_COMPASS
+ if (!CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, gSaveContext.dungeonIndex)) {
+ pauseCtx->cursorPoint[PAUSE_MAP]--; // DUNGEON_BOSS_KEY
+ if (!CHECK_DUNGEON_ITEM(DUNGEON_BOSS_KEY, gSaveContext.dungeonIndex)) {
+ pauseCtx->cursorSlot[PAUSE_MAP] = DUNGEON_STRAY_FAIRIES;
+ pauseCtx->cursorPoint[PAUSE_MAP] = DUNGEON_STRAY_FAIRIES;
+ }
+ }
+ } else {
+ pauseCtx->cursorSlot[PAUSE_MAP] = pauseCtx->cursorPoint[PAUSE_MAP];
+ }
+ } else if (pauseCtx->cursorSpecialPos == 0) {
+ if (pauseCtx->cursorXIndex[PAUSE_MAP] == 0) {
+ KaleidoScope_MoveCursorToSpecialPos(play, PAUSE_CURSOR_PAGE_LEFT);
+ } else if (pauseCtx->cursorPoint[PAUSE_MAP] == DUNGEON_STRAY_FAIRIES) {
+ pauseCtx->cursorXIndex[PAUSE_MAP] = 0;
+ pauseCtx->cursorSlot[PAUSE_MAP] = pauseCtx->unk_256;
+ pauseCtx->cursorPoint[PAUSE_MAP] = pauseCtx->unk_256;
+ } else {
+ while (true) {
+ pauseCtx->cursorPoint[PAUSE_MAP]--;
+ if (pauseCtx->cursorPoint[PAUSE_MAP] <= DUNGEON_NONE) {
+ pauseCtx->cursorSlot[PAUSE_MAP] = DUNGEON_STRAY_FAIRIES;
+ pauseCtx->cursorPoint[PAUSE_MAP] = DUNGEON_STRAY_FAIRIES;
+ break;
+ }
+ if (CHECK_DUNGEON_ITEM(pauseCtx->cursorPoint[PAUSE_MAP], gSaveContext.dungeonIndex)) {
+ break;
+ }
+ }
+ }
+ }
+ } 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 &
+ gBitFlags[i]) ||
+ func_801090B0(FLOOR_INDEX_MAX - i)) {
+ pauseCtx->cursorPoint[PAUSE_MAP] = i + DUNGEON_FLOOR_INDEX_4;
+ pauseCtx->unk_298 = 4.0f;
+ break;
+ }
+ }
+ } else if (pauseCtx->cursorPoint[PAUSE_MAP] == DUNGEON_STRAY_FAIRIES) {
+ pauseCtx->cursorXIndex[PAUSE_MAP] = 0;
+ pauseCtx->cursorSlot[PAUSE_MAP] = pauseCtx->unk_256;
+ pauseCtx->cursorPoint[PAUSE_MAP] = pauseCtx->unk_256;
+ } else {
+ pauseCtx->cursorSlot[PAUSE_MAP] = DUNGEON_STRAY_FAIRIES;
+ pauseCtx->cursorPoint[PAUSE_MAP] = DUNGEON_STRAY_FAIRIES;
+ }
+ } else if ((pauseCtx->cursorSpecialPos == 0) && (pauseCtx->stickAdjY < -30)) {
+ if ((pauseCtx->cursorPoint[PAUSE_MAP] >= DUNGEON_FLOOR_INDEX_4) &&
+ (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 &
+ gBitFlags[i]) ||
+ func_801090B0(FLOOR_INDEX_MAX - i)) {
+ pauseCtx->cursorPoint[PAUSE_MAP] = i + DUNGEON_FLOOR_INDEX_4;
+ pauseCtx->unk_298 = 4.0f;
+ break;
+ }
+ }
+
+ } else if (pauseCtx->cursorXIndex[PAUSE_MAP] == 0) {
+ pauseCtx->cursorXIndex[PAUSE_MAP] = 1;
+ pauseCtx->cursorPoint[PAUSE_MAP] = DUNGEON_STRAY_FAIRIES;
+ } else {
+ if (pauseCtx->cursorPoint[PAUSE_MAP] == DUNGEON_STRAY_FAIRIES) {
+ pauseCtx->cursorPoint[PAUSE_MAP] = DUNGEON_NONE;
+ }
+
+ while (true) {
+ pauseCtx->cursorPoint[PAUSE_MAP]++;
+ if (pauseCtx->cursorPoint[PAUSE_MAP] == DUNGEON_FLOOR_INDEX_4) {
+ KaleidoScope_MoveCursorToSpecialPos(play, PAUSE_CURSOR_PAGE_RIGHT);
+ break;
+ }
+ if (CHECK_DUNGEON_ITEM(pauseCtx->cursorPoint[PAUSE_MAP], gSaveContext.dungeonIndex)) {
+ break;
+ }
+ }
+ }
+ }
+ if ((pauseCtx->cursorPoint[PAUSE_MAP] <= DUNGEON_STRAY_FAIRIES) && (pauseCtx->cursorSpecialPos == 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);
+ }
+ } 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);
+ }
+
+ if ((pauseCtx->cursorXIndex[PAUSE_MAP] == 0) && (pauseCtx->cursorSpecialPos == 0)) {
+ pauseCtx->unk_256 = pauseCtx->cursorPoint[PAUSE_MAP];
+ }
+
+ if (pauseCtx->cursorSpecialPos == 0) {
+ if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) && (msgCtx->msgLength == 0) &&
+ (pauseCtx->cursorPoint[PAUSE_MAP] == DUNGEON_STRAY_FAIRIES)) {
+ pauseCtx->itemDescriptionOn = true;
+ func_801514B0(play, 0x17AF, 1);
+ } else if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) && (msgCtx->msgLength == 0) &&
+ CHECK_DUNGEON_ITEM(pauseCtx->cursorPoint[PAUSE_MAP], gSaveContext.dungeonIndex)) {
+ pauseCtx->itemDescriptionOn = true;
+ func_801514B0(play, 0x17AC + pauseCtx->cursorPoint[PAUSE_MAP], 1);
+ }
+ }
+
+ if (oldCursorPoint != pauseCtx->cursorPoint[PAUSE_MAP]) {
+ play_sound(NA_SE_SY_CURSOR);
+ }
+ }
+ }
+}
+
+TexturePtr sCloudTextures[] = {
+ gWorldMapClockTownCloud1Tex, // TINGLE_MAP_CLOCK_TOWN
+ gWorldMapClockTownCloud2Tex, // TINGLE_MAP_CLOCK_TOWN
+ gWorldMapWoodfallCloud1Tex, // TINGLE_MAP_WOODFALL
+ gWorldMapWoodfallCloud2Tex, // TINGLE_MAP_WOODFALL
+ gWorldMapWoodfallCloud3Tex, // TINGLE_MAP_WOODFALL
+ gWorldMapSnowheadCloud1Tex, // TINGLE_MAP_SNOWHEAD
+ gWorldMapSnowheadCloud2Tex, // TINGLE_MAP_SNOWHEAD
+ gWorldMapSnowheadCloud3Tex, // TINGLE_MAP_SNOWHEAD
+ gWorldMapRomaniRanchCloudTex, // TINGLE_MAP_ROMANI_RANCH
+ gWorldMapGreatBayCloud1Tex, // TINGLE_MAP_GREAT_BAY
+ gWorldMapGreatBayCloud2Tex, // TINGLE_MAP_GREAT_BAY
+ gWorldMapGreatBayCloud3Tex, // TINGLE_MAP_GREAT_BAY
+ gWorldMapGreatBayCloud4Tex, // TINGLE_MAP_GREAT_BAY
+ gWorldMapStoneTowerCloud1Tex, // TINGLE_MAP_STONE_TOWER
+ gWorldMapStoneTowerCloud2Tex, // TINGLE_MAP_STONE_TOWER
};
-s32 D_8082B520[] = {
- 0xFF6EA05A,
- 0xFF6478FF,
- 0xFFF5F55A,
+s16 sWorldMapDotPrimColors[][3] = {
+ { 0, 0, 255 },
+ { 255, 255, 0 },
+};
+s16 sWorldMapDotEnvColors[][3] = {
+ { 255, 255, 0 },
+ { 0, 0, 255 },
};
-s32 D_8082B52C[] = {
- 0xFFFFFFFF,
- 0xFFFFFFFF,
- 0xFFE1AA00,
+s16 sWorldMapCursorsRectLeft[REGION_MAX] = {
+ 86, // REGION_GREAT_BAY
+ 104, // REGION_ZORA_HALL
+ 145, // REGION_ROMANI_RANCH
+ 153, // REGION_DEKU_PALACE
+ 163, // REGION_WOODFALL
+ 159, // REGION_CLOCK_TOWN
+ 157, // REGION_SNOWHEAD
+ 199, // REGION_IKANA_GRAVEYARD
+ 208, // REGION_IKANA_CANYON
+ 210, // REGION_GORON_VILLAGE
+ 218, // REGION_STONE_TOWER
};
-s32 D_8082B538[] = {
- 0x00000400,
- 0x00000000,
- 0x00000000,
- 0x00000000,
+s16 sWorldMapCursorsRectTop[REGION_MAX] = {
+ 127, // REGION_GREAT_BAY
+ 153, // REGION_ZORA_HALL
+ 138, // REGION_ROMANI_RANCH
+ 171, // REGION_DEKU_PALACE
+ 146, // REGION_WOODFALL
+ 119, // REGION_CLOCK_TOWN
+ 77, // REGION_SNOWHEAD
+ 106, // REGION_IKANA_GRAVEYARD
+ 120, // REGION_IKANA_CANYON
+ 73, // REGION_GORON_VILLAGE
+ 99, // REGION_STONE_TOWER
};
-s16 D_8082B548[] = {
- 0x0C00, 0x8418, 0x0C00, 0x9098, 0x0C01, 0x2898, 0x0C01, 0x35D8, 0x0C01, 0x4318,
- 0x0C00, 0xDE58, 0x0C00, 0xEB58, 0x0C00, 0xFAA8, 0x0C00, 0x9858, 0x0C00, 0x9E58,
- 0x0C00, 0xAE58, 0x0C00, 0xBE58, 0x0C00, 0xCE58, 0x0C01, 0x09F8, 0x0C01, 0x1958,
+s16 sGreatFairySpawnRegions[] = {
+ REGION_CLOCK_TOWN, REGION_WOODFALL, REGION_SNOWHEAD, REGION_GREAT_BAY, REGION_IKANA_CANYON,
+ REGION_CLOCK_TOWN, REGION_WOODFALL, REGION_SNOWHEAD, REGION_GREAT_BAY, REGION_IKANA_CANYON,
};
-s16 D_8082B584[] = {
- 0x0000, 0x0000, 0x00FF, 0x00FF, 0x00FF, 0x0000,
+void KaleidoScope_DrawWorldMap(PlayState* play) {
+ s16 sceneId;
+ s16 t;
+ s16 n;
+ s16 j;
+ s16 k;
+ s16 i;
+ PauseContext* pauseCtx = &play->pauseCtx;
+ s16 rectLeft;
+ s16 rectRight;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ KaleidoScope_SetCursorVtx(pauseCtx, pauseCtx->cursorSlot[PAUSE_MAP] * 4, pauseCtx->mapPageVtx);
+
+ // Draw the world map image
+ 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.
+ // 8 is chosen because it is smaller than `TMEM_SIZE / 2 / textureWidth` and divides the texture's height.
+ // Each loaded chunk must have `size <= TMEM_SIZE / 2`
+ // because the texture is color-indexed, so the TLUT uses the other half of TMEM.
+
+ func_8012C628(play->state.gfxCtx);
+
+ gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_POINT);
+ gDPLoadTLUT_pal256(POLY_OPA_DISP++, gWorldMapImageTLUT);
+ gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_RGBA16);
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
+
+ // Process the 128 rows of pixels for gWorldMapImageTex, 8 rows at a time over 16 iterations
+ // Loop over yPos (t), textureIndex (j)
+ for (t = 62, j = 0; j < 16; j++, t += 8) {
+ gDPLoadTextureBlock(POLY_OPA_DISP++, (u8*)gWorldMapImageTex + j * (WORLD_MAP_IMAGE_TEX_WIDTH * 8),
+ G_IM_FMT_CI, G_IM_SIZ_8b, WORLD_MAP_IMAGE_TEX_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);
+
+ rectLeft = 51 << 2;
+ rectRight = rectLeft + (WORLD_MAP_IMAGE_TEX_WIDTH << 2);
+ gSPTextureRectangle(POLY_OPA_DISP++, rectLeft, t << 2, rectRight, (t << 2) + (8 << 2), G_TX_RENDERTILE, 0,
+ 0, 1 << 10, 1 << 10);
+ }
+
+ func_8012C8AC(play->state.gfxCtx);
+
+ } else {
+ // Draw the world map angled
+ // Because it is at an angle, vertices are used to place it.
+ // The structure of the loops here is to satisfy the constraints of both TMEM and the size of the vertex cache.
+ // - Each loop iteration loads 9 rows, because 9 is the largest number smaller than
+ // `TMEM_SIZE / 2 / textureWidth`.
+ // - Each loop is at most 8 iterations long because each row uses 4 vertices and the vertex cache has size
+ // `32 = 8 * 4`.
+ // .
+ // Hence there is one loop of length 8, one of length 6, and then the remaining `128 - (8 + 6) * 9 = 2` rows are
+ // drawn at the end.
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_POINT);
+ gDPLoadTLUT_pal256(POLY_OPA_DISP++, gWorldMapImageTLUT);
+ gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_RGBA16);
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
+
+ // Set the vertices for the first 8 quads attached to the world map texture.
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[204], 8 * 4, 0);
+
+ // Process the first 72 rows of pixels for gWorldMapImageTex, 9 rows at a time over 8 iterations
+ // Loop over quadIndex of this loop (i), quadIndex of the entire texture (k), vtxIndex (j)
+ for (i = 0, k = 0, j = 0; i < 8; i++, k++, j += 4) {
+ gDPLoadTextureBlock(POLY_OPA_DISP++, (u8*)gWorldMapImageTex + k * (WORLD_MAP_IMAGE_TEX_WIDTH * 9),
+ G_IM_FMT_CI, G_IM_SIZ_8b, WORLD_MAP_IMAGE_TEX_WIDTH, 9, 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++, j, j + 2, j + 3, j + 1, 0);
+ }
+
+ // Set the vertices for the last 7 quads attached to the world map texture:
+ // 6 quads with a height of 9, 1 quad with a height of 2
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[236], (6 + 1) * 4, 0);
+
+ // Process the next 54 rows of pixels for gWorldMapImageTex, 9 rows at a time over 6 iterations
+ // Loop over quadIndex of this loop (i), quadIndex of the entire texture (k), vtxIndex (j)
+ for (i = 0, j = 0; i < 6; i++, k++, j += 4) {
+ gDPLoadTextureBlock(POLY_OPA_DISP++, (u8*)gWorldMapImageTex + k * (WORLD_MAP_IMAGE_TEX_WIDTH * 9),
+ G_IM_FMT_CI, G_IM_SIZ_8b, WORLD_MAP_IMAGE_TEX_WIDTH, 9, 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++, j, j + 2, j + 3, j + 1, 0);
+ }
+
+ // Process the last 2 rows of pixels for gWorldMapImageTex
+ gDPLoadTextureBlock(POLY_OPA_DISP++, (u8*)gWorldMapImageTex + k * (WORLD_MAP_IMAGE_TEX_WIDTH * 9), G_IM_FMT_CI,
+ G_IM_SIZ_8b, WORLD_MAP_IMAGE_TEX_WIDTH, 2, 0, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+
+ gSP1Quadrangle(POLY_OPA_DISP++, j, j + 2, j + 3, j + 1, 0);
+ }
+
+ func_8012C8AC(play->state.gfxCtx);
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_BILERP);
+
+ gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE,
+ ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 215, 235, 235, pauseCtx->alpha);
+ gDPSetEnvColor(POLY_OPA_DISP++, 40, 60, 100, 0);
+
+ // 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])) {
+
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[60 + n * 4], 4, 0);
+
+ POLY_OPA_DISP = Gfx_DrawTexQuadIA8(POLY_OPA_DISP, sCloudTextures[n], D_8082B7F0[n], D_8082B838[n], 0);
+ }
+ }
+
+ 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);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, R_PAUSE_OWLWARP_ALPHA);
+ gDPFillRectangle(POLY_OPA_DISP++, 50, 62, 270, 190);
+ }
+
+ func_8012C8AC(play->state.gfxCtx);
+
+ 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,
+ G_TX_NOLOD);
+ gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
+ PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sWorldMapDotPrimColors[0][0], sWorldMapDotPrimColors[0][1],
+ sWorldMapDotPrimColors[0][2], pauseCtx->alpha);
+ gDPSetEnvColor(POLY_OPA_DISP++, sWorldMapDotEnvColors[0][0], sWorldMapDotEnvColors[0][1],
+ sWorldMapDotEnvColors[0][2], 0);
+
+ if (R_PAUSE_DBG_MAP_CLOUD_ON) {
+ gSaveContext.save.worldMapCloudVisibility |= (u16)~0x8000;
+
+ pauseCtx->mapPageVtx[120].v.ob[0] = pauseCtx->mapPageVtx[122].v.ob[0] = R_PAUSE_DBG_MAP_CLOUD_X;
+
+ pauseCtx->mapPageVtx[121].v.ob[0] = pauseCtx->mapPageVtx[123].v.ob[0] =
+ pauseCtx->mapPageVtx[120].v.ob[0] + 8;
+
+ pauseCtx->mapPageVtx[120].v.ob[1] = pauseCtx->mapPageVtx[121].v.ob[1] = R_PAUSE_DBG_MAP_CLOUD_Y;
+
+ pauseCtx->mapPageVtx[122].v.ob[1] = pauseCtx->mapPageVtx[123].v.ob[1] =
+ pauseCtx->mapPageVtx[120].v.ob[1] - 8;
+ }
+
+ // Loop over RegionId (i), unused vtxIndex (j), unused (k)
+ for (i = 0, j = 0; i < REGION_MAX; i++, k++, j += 4) {
+ if (pauseCtx->worldMapPoints[i]) {
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[120 + i * 4], 4, 0);
+ gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0);
+ }
+ }
+
+ } else {
+ // Selecting an owl warp
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPLoadTextureBlock(POLY_OPA_DISP++, gWorldMapOwlFaceTex, G_IM_FMT_RGBA, G_IM_SIZ_32b, 24, 12, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
+
+ if (R_PAUSE_DBG_MAP_CLOUD_ON) {
+ gSaveContext.save.worldMapCloudVisibility |= (u16)~0x8000;
+
+ pauseCtx->mapPageVtx[164].v.ob[0] = pauseCtx->mapPageVtx[166].v.ob[0] = R_PAUSE_DBG_MAP_CLOUD_X;
+
+ pauseCtx->mapPageVtx[165].v.ob[0] = pauseCtx->mapPageVtx[167].v.ob[0] =
+ pauseCtx->mapPageVtx[164].v.ob[0] + 24;
+
+ pauseCtx->mapPageVtx[164].v.ob[1] = pauseCtx->mapPageVtx[165].v.ob[1] = R_PAUSE_DBG_MAP_CLOUD_Y;
+
+ pauseCtx->mapPageVtx[166].v.ob[1] = pauseCtx->mapPageVtx[167].v.ob[1] =
+ pauseCtx->mapPageVtx[164].v.ob[1] - 12;
+ }
+
+ // Loop over OwlWarpId (i), unused vtxIndex (j), unused (k)
+ for (i = 0, j = 0; i < OWL_WARP_ENTRANCE; i++, k++, j += 4) {
+ if (pauseCtx->worldMapPoints[i]) {
+ gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[164 + i * 4], 4, 0);
+ gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0);
+ }
+ }
+ }
+
+ // Find and draw Player's face at the current region based on the current scene
+ // If (pauseCtx->state == PAUSE_STATE_MAIN), then the other pauseCtx->state conditions are redundant
+ // and always return true
+ 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;
+
+ sceneId = play->sceneId;
+
+ // Map grottos/shrines to sceneId's to be used in different regions
+ if (sceneId == SCENE_KAKUSIANA) {
+ if (play->roomCtx.curRoom.num == 5) {
+ sceneId = SCENE_11GORONNOSATO;
+ } else if ((play->roomCtx.curRoom.num == 6) || (play->roomCtx.curRoom.num == 8) ||
+ (play->roomCtx.curRoom.num == 12)) {
+ sceneId = SCENE_22DEKUCITY;
+ } else {
+ sceneId = Entrance_GetSceneIdAbsolute(((void)0, gSaveContext.respawn[RESPAWN_MODE_UNK_3].entrance));
+ }
+ }
+
+ // Find the regionId that player is currently in
+ // Loop over regionId (n) and regionIdIndex (j)
+ while (true) {
+ if ((gSceneIdsPerRegion[n][j] == 0xFFFF)) {
+ n++;
+ j = 0;
+ if (n == REGION_MAX) {
+ n = 0;
+
+ // Special case for fairy fountains
+ if (sceneId == SCENE_YOUSEI_IZUMI) {
+ j = play->curSpawn;
+ n = sGreatFairySpawnRegions[j];
+ break;
+ }
+
+ while (true) {
+ if (gSceneIdsPerRegion[n][j] == 0xFFFF) {
+ n++;
+ if (n == REGION_MAX) {
+ break;
+ }
+ j = 0;
+ if (Entrance_GetSceneIdAbsolute(
+ ((void)0, gSaveContext.respawn[RESPAWN_MODE_UNK_3].entrance)) ==
+ gSceneIdsPerRegion[n][j]) {
+ break;
+ }
+ }
+ j++;
+ }
+ break;
+ }
+ }
+
+ if (sceneId == gSceneIdsPerRegion[n][j]) {
+ break;
+ }
+ j++;
+ }
+
+ // Draw Player's face at the current region
+ if (n != REGION_MAX) {
+ KaleidoScope_SetView(pauseCtx, pauseCtx->eye.x, pauseCtx->eye.y, pauseCtx->eye.z);
+ func_8012C628(play->state.gfxCtx);
+
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
+
+ POLY_OPA_DISP = Gfx_DrawTexRectRGBA16(POLY_OPA_DISP, &D_09007500, 16, 16, sWorldMapCursorsRectLeft[n],
+ sWorldMapCursorsRectTop[n], 16, 16, 1 << 10, 1 << 10);
+ }
+ }
+
+ gDPPipeSync(POLY_OPA_DISP++);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+u16 sOwlWarpPauseItems[] = {
+ 0xAF, // OWL_WARP_GREAT_BAY_COAST
+ 0xB3, // OWL_WARP_ZORA_CAPE
+ 0xAA, // OWL_WARP_SNOWHEAD
+ 0xB1, // OWL_WARP_MOUNTAIN_VILLAGE
+ 0xA9, // OWL_WARP_CLOCK_TOWN
+ 0xB2, // OWL_WARP_MILK_ROAD
+ 0xA8, // OWL_WARP_WOODFALL
+ 0xB0, // OWL_WARP_SOUTHERN_SWAMP
+ 0xAC, // OWL_WARP_IKANA_CANYON
+ 0xAE, // OWL_WARP_STONE_TOWER
};
-s16 D_8082B590[] = {
- 0x00FF, 0x00FF, 0x0000, 0x0000, 0x0000, 0x00FF,
-};
+void KaleidoScope_UpdateWorldMapCursor(PlayState* play) {
+ static u16 sStickAdjTimer = 0; // unused timer that counts up every frame. Resets on reading a stickAdj.
+ PauseContext* pauseCtx = &play->pauseCtx;
+ s16 oldCursorPoint;
-s16 D_8082B59C[] = {
- 0x0056, 0x0068, 0x0091, 0x0099, 0x00A3, 0x009F, 0x009D, 0x00C7, 0x00D0, 0x00D2, 0x00DA, 0x0000,
-};
+ 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];
-s16 D_8082B5B4[] = {
- 0x007F, 0x0099, 0x008A, 0x00AB, 0x0092, 0x0077, 0x004D, 0x006A, 0x0078, 0x0049, 0x0063, 0x0000,
-};
+ 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);
+ }
-s16 D_8082B5CC[] = {
- 0x0005, 0x0004, 0x0006, 0x0000, 0x0008, 0x0005, 0x0004, 0x0006, 0x0000, 0x0008,
-};
+ if (pauseCtx->cursorSpecialPos == 0) {
+ if (pauseCtx->stickAdjX > 30) {
+ pauseCtx->unk_298 = 4.0f;
+ sStickAdjTimer = 0;
-u16 D_8082B5E0[] = {
- 0xAF, 0xB3, 0xAA, 0xB1, 0xA9, 0xB2, 0xA8, 0xB0, 0xAC, 0xAE,
-};
-u16 D_8082B5F4 = 0;
+ while (true) {
+ pauseCtx->cursorPoint[PAUSE_WORLD_MAP]++;
+ if (pauseCtx->cursorPoint[PAUSE_WORLD_MAP] >= REGION_MAX) {
+ KaleidoScope_MoveCursorToSpecialPos(play, PAUSE_CURSOR_PAGE_RIGHT);
+ pauseCtx->cursorItem[PAUSE_MAP] = PAUSE_ITEM_NONE;
+ break;
+ }
+ if (pauseCtx->worldMapPoints[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]]) {
+ break;
+ }
+ }
+ } else if (pauseCtx->stickAdjX < -30) {
+ pauseCtx->unk_298 = 4.0f;
+ sStickAdjTimer = 0;
-s32 D_8082B5F8[] = { 0, 0 };
+ while (true) {
+ pauseCtx->cursorPoint[PAUSE_WORLD_MAP]--;
+ if (pauseCtx->cursorPoint[PAUSE_WORLD_MAP] < REGION_GREAT_BAY) {
+ KaleidoScope_MoveCursorToSpecialPos(play, PAUSE_CURSOR_PAGE_LEFT);
+ pauseCtx->cursorItem[PAUSE_MAP] = PAUSE_ITEM_NONE;
+ break;
+ }
+ if (pauseCtx->worldMapPoints[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]]) {
+ break;
+ }
+ }
+ } else {
+ sStickAdjTimer++;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_8081D240.s")
+ if (pauseCtx->cursorSpecialPos == 0) {
+ pauseCtx->cursorItem[PAUSE_MAP] = pauseCtx->cursorPoint[PAUSE_WORLD_MAP];
+ // Used as cursor vtxIndex
+ pauseCtx->cursorSlot[PAUSE_MAP] = 31 + pauseCtx->cursorPoint[PAUSE_WORLD_MAP];
+ }
+ } else {
+ pauseCtx->cursorItem[PAUSE_MAP] = PAUSE_ITEM_NONE;
+ if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) {
+ if (pauseCtx->stickAdjX > 30) {
+ pauseCtx->cursorPoint[PAUSE_WORLD_MAP] = -1;
+ pauseCtx->cursorSpecialPos = 0;
+ pauseCtx->unk_298 = 4.0f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_8081D6DC.s")
+ while (true) {
+ pauseCtx->cursorPoint[PAUSE_WORLD_MAP]++;
+ if (pauseCtx->cursorPoint[PAUSE_WORLD_MAP] > REGION_STONE_TOWER) {
+ KaleidoScope_MoveCursorToSpecialPos(play, PAUSE_CURSOR_PAGE_RIGHT);
+ pauseCtx->cursorItem[PAUSE_MAP] = PAUSE_ITEM_NONE;
+ break;
+ }
+ if (pauseCtx->worldMapPoints[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]]) {
+ break;
+ }
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_8081E118.s")
+ if (pauseCtx->cursorSpecialPos == 0) {
+ pauseCtx->cursorItem[PAUSE_MAP] = pauseCtx->cursorPoint[PAUSE_WORLD_MAP];
+ // Used as cursor vtxIndex
+ pauseCtx->cursorSlot[PAUSE_MAP] = 31 + pauseCtx->cursorPoint[PAUSE_WORLD_MAP];
+ }
+ play_sound(NA_SE_SY_CURSOR);
+ sStickAdjTimer = 0;
+ }
+ } else if (pauseCtx->stickAdjX < -30) {
+ pauseCtx->cursorPoint[PAUSE_WORLD_MAP] = 11;
+ pauseCtx->cursorSpecialPos = 0;
+ pauseCtx->unk_298 = 4.0f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_8081E7D8.s")
+ while (true) {
+ pauseCtx->cursorPoint[PAUSE_WORLD_MAP]--;
+ if (pauseCtx->cursorPoint[PAUSE_WORLD_MAP] < 0) {
+ KaleidoScope_MoveCursorToSpecialPos(play, PAUSE_CURSOR_PAGE_LEFT);
+ pauseCtx->cursorItem[PAUSE_MAP] = PAUSE_ITEM_NONE;
+ break;
+ }
+ if (pauseCtx->worldMapPoints[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]]) {
+ break;
+ }
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_8081FB1C.s")
+ if (pauseCtx->cursorSpecialPos == 0) {
+ pauseCtx->cursorItem[PAUSE_MAP] = pauseCtx->cursorPoint[PAUSE_WORLD_MAP];
+ // Used as cursor vtxIndex
+ pauseCtx->cursorSlot[PAUSE_MAP] = 31 + pauseCtx->cursorPoint[PAUSE_WORLD_MAP];
+ }
+ play_sound(NA_SE_SY_CURSOR);
+ sStickAdjTimer = 0;
+ }
+ }
+
+ if (!pauseCtx->worldMapPoints[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]]) {
+ pauseCtx->cursorItem[PAUSE_MAP] = PAUSE_ITEM_NONE;
+ }
+ if (oldCursorPoint != pauseCtx->cursorPoint[PAUSE_WORLD_MAP]) {
+ play_sound(NA_SE_SY_CURSOR);
+ }
+ } 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) {
+ pauseCtx->unk_298 = 4.0f;
+ sStickAdjTimer = 0;
+ do {
+ pauseCtx->cursorPoint[PAUSE_WORLD_MAP]++;
+ if (pauseCtx->cursorPoint[PAUSE_WORLD_MAP] > OWL_WARP_STONE_TOWER) {
+ pauseCtx->cursorPoint[PAUSE_WORLD_MAP] = OWL_WARP_GREAT_BAY_COAST;
+ }
+ } while (!pauseCtx->worldMapPoints[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]]);
+ } else if (pauseCtx->stickAdjX < -30) {
+ pauseCtx->unk_298 = 4.0f;
+ sStickAdjTimer = 0;
+ do {
+ pauseCtx->cursorPoint[PAUSE_WORLD_MAP]--;
+ if (pauseCtx->cursorPoint[PAUSE_WORLD_MAP] < OWL_WARP_GREAT_BAY_COAST) {
+ pauseCtx->cursorPoint[PAUSE_WORLD_MAP] = OWL_WARP_STONE_TOWER;
+ }
+ } while (!pauseCtx->worldMapPoints[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]]);
+ } else {
+ sStickAdjTimer++;
+ }
+
+ //! TODO: Is the `0xA4` here related to `0xA3` being the last recored item in the `ItemId` enum?
+ pauseCtx->cursorItem[PAUSE_MAP] = sOwlWarpPauseItems[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]] - 0xA4;
+ // Used as cursor vtxIndex
+ pauseCtx->cursorSlot[PAUSE_MAP] = 31 + pauseCtx->cursorPoint[PAUSE_WORLD_MAP];
+
+ if (oldCursorPoint != pauseCtx->cursorPoint[PAUSE_WORLD_MAP]) {
+ play_sound(NA_SE_SY_CURSOR);
+ }
+ }
+}
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..219ecd7a9 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);
}
}
}
@@ -223,7 +223,7 @@ void KaleidoScope_DrawMaskSelect(PlayState* play) {
if (((void)0, gSaveContext.save.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,7 +257,7 @@ void KaleidoScope_DrawMaskSelect(PlayState* play) {
}
gSPVertex(POLY_OPA_DISP++, &pauseCtx->maskVtx[j + 0], 4, 0);
- KaleidoScope_DrawQuadTextureRGBA32(
+ KaleidoScope_DrawTexQuadRGBA32(
play->state.gfxCtx, gItemIcons[((void)0, gSaveContext.save.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];
@@ -497,7 +497,7 @@ 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];
@@ -513,7 +513,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 +533,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 +566,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 +585,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 +594,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 +613,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 +796,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 94724154f..7349db241 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_DONE, // 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,9 +147,20 @@ typedef enum {
// NES
void KaleidoScope_MoveCursorToSpecialPos(PlayState* play, s16 cursorSpecialPos);
-void KaleidoScope_DrawQuadTextureRGBA32(GraphicsContext* gfxCtx, void* texture, u16 width, u16 height, u16 point);
+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
+void KaleidoScope_DrawDungeonMap(PlayState* play);
+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);
@@ -65,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 3b3de5937..a56afd71b 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) {
+ func_80178E3C(SEGMENT_ROM_START(map_name_static), texIndex, segment, 0x400);
+}
-s32 D_8082BE9C = 0;
+void func_8082192C(void* segment, u32 texIndex) {
+ func_80178E3C(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) {
+ func_80178E3C(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,17 +489,20 @@ 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/func_808259D4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_SetView.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80825A50.s")
@@ -359,8 +516,964 @@ 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
+ func_80112C0C(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);
+ func_80178E7C((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);
+ func_80178E7C((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.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);
+ func_80178E7C(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);
+ func_80178E7C(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++;
+ }
+ 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.playerData.savedSceneId = play->sceneId;
+ gSaveContext.save.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_02;
+ gSaveContext.save.playerData.health = 0x30;
+ Audio_SetSpec(0xA);
+ gSaveContext.healthAccumulator = 0;
+ gSaveContext.magicState = MAGIC_STATE_IDLE;
+ gSaveContext.magicFlag = 0;
+ gSaveContext.magicCapacity = 0;
+ gSaveContext.magicFillTarget = gSaveContext.save.playerData.magic;
+ gSaveContext.save.playerData.magicLevel = 0;
+ gSaveContext.save.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);
+ func_80178E7C(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];
+
+ func_80110038(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_DONE) && (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..3144cab20 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 = 5786abbdd2d0fd14907e03575a0bd972c1fe9b28
+ parent = e451a103ba5d14af3dd14acfa54a6b4999fd951f
method = merge
- cmdver = 0.4.3
+ cmdver = 0.4.5
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/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/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/check_format.sh b/tools/check_format.sh
index d8119e743..1195a9c59 100755
--- a/tools/check_format.sh
+++ b/tools/check_format.sh
@@ -1,7 +1,7 @@
#!/bin/bash
STATUSOLD=`git status --porcelain`
-./format.sh
+./format.py -j
if [ $? -ne 0 ]
then
echo "Formatter failed. Exiting."
@@ -12,7 +12,7 @@ STATUSNEW=`git status --porcelain`
if [ "${STATUSOLD}" != "${STATUSNEW}" ];
then
echo ""
- echo "Misformatted files found. Run ./format.sh and verify codegen is not impacted."
+ echo "Misformatted files found. Run ./format.py and verify codegen is not impacted."
echo ""
diff --unified=0 --label "Old git status" <(echo "${STATUSOLD}") --label "New git status" <(echo "${STATUSNEW}")
echo ""
diff --git a/tools/disasm/files.txt b/tools/disasm/files.txt
index 0007bb8b1..7ed8ced9d 100644
--- a/tools/disasm/files.txt
+++ b/tools/disasm/files.txt
@@ -428,6 +428,7 @@
0x8013EC10 : "z_rumble",
0x8013EE60 : "z_view",
0x80140260 : "z_vimode",
+ 0x80140CE0 : "code_80140CE0",
0x80140E80 : "code_80140E80",
0x801418B0 : "z_vismono",
0x801420C0 : "code_801420C0",
@@ -464,6 +465,7 @@
0x80174F10 : "padmgr",
0x80176280 : "sched",
0x80177390 : "speed_meter",
+ 0x801780F0 : "su_mtx",
0x80178750 : "sys_cmpdma",
0x80178F30 : "sys_initial_check",
0x80179300 : "sys_math",
@@ -482,7 +484,7 @@
0x801877D0 : "audio_synthesis",
0x8018B0F0 : "audio_heap",
0x8018EB60 : "audio_load",
- 0x80192BE0 : "code_80192BE0",
+ 0x80192BE0 : "audio_thread",
0x80194710 : "audio_dcache",
0x80194790 : "aisetnextbuf",
0x80194930 : "audio_playback",
@@ -506,7 +508,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",
@@ -559,7 +561,7 @@
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",
@@ -587,7 +589,7 @@
0x801D2E80 : "audio_data",
0x801D5FB0 : "audio_synthesis",
0x801D5FE0 : "audio_load",
- 0x801D5FF0 : "code_80192BE0",
+ 0x801D5FF0 : "audio_thread",
0x801D6010 : "aisetnextbuf",
0x801D6190 : "audio_effects",
0x801D61A0 : "audio_seqplayer",
@@ -671,7 +673,7 @@
0x801E0280 : "audio_synthesis",
0x801E02B0 : "audio_heap",
0x801E0300 : "audio_load",
- 0x801E0390 : "code_80192BE0",
+ 0x801E0390 : "audio_thread",
0x801E04E0 : "audio_playback",
0x801E0510 : "audio_effects",
0x801E0540 : "audio_seqplayer",
diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt
index a3ae48657..3c1a5d177 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",),
@@ -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",),
@@ -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",),
@@ -1525,8 +1525,8 @@
0x800E9564:("DebugDisplay_DrawObjects",),
0x800E95F4:("DebugDisplay_DrawSpriteI8",),
0x800E97D8:("DebugDisplay_DrawPolygon",),
- 0x800E992C:("func_800E992C",),
- 0x800E99B0:("func_800E99B0",),
+ 0x800E992C:("DebugDisplay_DrawPath",),
+ 0x800E99B0:("DebugDisplay_PathDisplayList",),
0x800E9C90:("func_800E9C90",),
0x800E9CA0:("func_800E9CA0",),
0x800E9CFC:("func_800E9CFC",),
@@ -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",),
@@ -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",),
@@ -1854,8 +1854,8 @@
0x801004FC:("Lib_Nop801004FC",),
0x80100504:("Lib_SegmentedToVirtual",),
0x8010053C:("Lib_SegmentedToVirtualNull",),
- 0x80100584:("Lib_PhysicalToVirtual",),
- 0x801005A0:("Lib_PhysicalToVirtualNull",),
+ 0x80100584:("Lib_VirtualToPhysical",),
+ 0x801005A0:("Lib_PhysicalToVirtual",),
0x801005C0:("LifeMeter_Init",),
0x8010069C:("LifeMeter_UpdateColors",),
0x80100A80:("func_80100A80",),
@@ -2083,32 +2083,32 @@
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",),
+ 0x801129E4:("Interface_SetSceneRestrictions",),
+ 0x80112AF4:("Interface_Noop",),
+ 0x80112AFC:("Interface_InitMinigame",),
0x80112B40:("Interface_LoadItemIconImpl",),
0x80112BE4:("Interface_LoadItemIcon",),
0x80112C0C:("func_80112C0C",),
@@ -2150,23 +2150,23 @@
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",),
+ 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",),
@@ -2230,12 +2230,12 @@
0x8012420C:("Player_GetBottleHeld",),
0x8012422C:("Player_ActionToExplosive",),
0x80124258:("Player_GetExplosiveHeld",),
- 0x80124278:("func_80124278",),
+ 0x80124278:("Player_ActionToSword",),
0x801242B4:("func_801242B4",),
- 0x801242DC:("Player_GetEnvTimerType",),
+ 0x801242DC:("Player_GetEnvironmentalHazard",),
0x80124420:("func_80124420",),
0x80124618:("func_80124618",),
- 0x801246F4:("func_801246F4",),
+ 0x801246F4:("Player_DrawImpl",),
0x80124870:("func_80124870",),
0x80124CC4:("func_80124CC4",),
0x80124F18:("func_80124F18",),
@@ -2263,14 +2263,14 @@
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",),
0x80127DA4:("func_80127DA4",),
0x80128388:("func_80128388",),
- 0x801284A0:("func_801284A0",),
+ 0x801284A0:("Player_DrawGreatFairysMask",),
0x80128640:("func_80128640",),
0x80128B74:("func_80128B74",),
0x80128BD0:("func_80128BD0",),
@@ -2410,7 +2410,7 @@
0x8012ED78:("Inventory_DeleteEquipment",),
0x8012EDE8:("Inventory_ChangeUpgrade",),
0x8012EE34:("Inventory_IsMapVisible",),
- 0x8012EF0C:("Inventory_SetMapVisibility",),
+ 0x8012EF0C:("Inventory_SetWorldMapCloudVisibility",),
0x8012F0EC:("Inventory_SaveDekuPlaygroundHighScore",),
0x8012F1BC:("Inventory_IncrementSkullTokenCount",),
0x8012F22C:("Inventory_GetSkullTokenCount",),
@@ -2452,7 +2452,7 @@
0x80130540:("Scene_HeaderCmdMiniMap",),
0x80130578:("Scene_HeaderCmd1D",),
0x80130588:("Scene_HeaderCmdMiniMapCompassInfo",),
- 0x801305B0:("Scene_HeaderCmdSetAreaVisitedFlag",),
+ 0x801305B0:("Scene_HeaderCmdSetRegionVisitedFlag",),
0x80130674:("Scene_HeaderCmdAnimatedMaterials",),
0x801306A4:("Scene_SetExitFade",),
0x801306E8:("Scene_ProcessHeader",),
@@ -2780,9 +2780,9 @@
0x80142100:("func_80142100",),
0x80142440:("func_80142440",),
0x80143148:("func_80143148",),
- 0x801431E8:("func_801431E8",),
+ 0x801431E8:("Skybox_Setup",),
0x80143324:("func_80143324",),
- 0x801434E4:("func_801434E4",),
+ 0x801434E4:("Skybox_Init",),
0x801435A0:("SkyboxDraw_UpdateMatrix",),
0x80143624:("SkyboxDraw_SetColors",),
0x80143668:("SkyboxDraw_Draw",),
@@ -2880,7 +2880,7 @@
0x80158C04:("Message_LoadLocalizedRupeesNES",),
0x80158D98:("Message_LoadRupeesNES",),
0x80158FB0:("Message_LoadTimeNES",),
- 0x8015926C:("Message_LoadAreaTextNES",),
+ 0x8015926C:("Message_LoadOwlWarpTextNES",),
0x80159438:("func_80159438",),
0x8015966C:("func_8015966C",),
0x8015B198:("func_8015B198",),
@@ -2936,8 +2936,8 @@
0x80163A38:("KaleidoScopeCall_Destroy",),
0x80163A58:("KaleidoScopeCall_Update",),
0x80163C0C:("KaleidoScopeCall_Draw",),
- 0x80163C90:("func_80163C90",),
- 0x80163D80:("func_80163D80",),
+ 0x80163C90:("Transition_Init",),
+ 0x80163D80:("Transition_Destroy",),
0x80163DC0:("func_80163DC0",),
0x8016418C:("func_8016418C",),
0x8016424C:("func_8016424C",),
@@ -2964,12 +2964,12 @@
0x80164C14:("func_80164C14",),
0x80165044:("TransitionCircle_Draw",),
0x80165198:("TransitionCircle_IsDone",),
- 0x801651B0:("func_801651B0",),
- 0x80165224:("func_80165224",),
- 0x80165288:("func_80165288",),
- 0x8016537C:("func_8016537C",),
- 0x80165438:("func_80165438",),
- 0x80165444:("func_80165444",),
+ 0x801651B0:("TransitionOverlay_VramToRam",),
+ 0x80165224:("TransitionOverlay_VramToRamArray",),
+ 0x80165288:("TransitionOverlay_Load",),
+ 0x8016537C:("TransitionOverlay_Free",),
+ 0x80165438:("TransitionOverlay_ClearLoadInfo",),
+ 0x80165444:("TransitionOverlay_SetSegment",),
0x80165460:("func_80165460",),
0x80165608:("func_80165608",),
0x80165630:("func_80165630",),
@@ -2987,8 +2987,8 @@
0x80166060:("func_80166060",),
0x801660B8:("func_801660B8",),
0x8016613C:("Play_Destroy",),
- 0x801663C4:("func_801663C4",),
- 0x80166644:("func_80166644",),
+ 0x801663C4:("Play_CompressI8ToI5",),
+ 0x80166644:("Play_DecompressI5ToI8",),
0x801668B4:("func_801668B4",),
0x80166968:("func_80166968",),
0x80166B30:("func_80166B30",),
@@ -3038,7 +3038,7 @@
0x8016A0AC:("Play_IsUnderwater",),
0x8016A168:("Play_IsDebugCamEnabled",),
0x8016A178:("Play_AssignPlayerActorCsIdsFromScene",),
- 0x8016A268:("func_8016A268",),
+ 0x8016A268:("Play_FillScreen",),
0x8016A2C8:("Play_Init",),
0x8016AC10:("func_8016AC10",),
0x8016AE1C:("func_8016AE1C",),
@@ -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",),
@@ -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",),
@@ -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",),
@@ -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",),
@@ -4209,11 +4209,11 @@
0x8081B6EC:("KaleidoScope_DrawItemSelect",),
0x8081BCA8:("KaleidoScope_UpdateItemCursor",),
0x8081C684:("KaleidoScope_UpdateItemEquip",),
- 0x8081D240:("func_8081D240",),
- 0x8081D6DC:("func_8081D6DC",),
- 0x8081E118:("func_8081E118",),
- 0x8081E7D8:("func_8081E7D8",),
- 0x8081FB1C:("func_8081FB1C",),
+ 0x8081D240:("KaleidoScope_DrawDungeonStrayFairyCount",),
+ 0x8081D6DC:("KaleidoScope_DrawDungeonMap",),
+ 0x8081E118:("KaleidoScope_UpdateDungeonCursor",),
+ 0x8081E7D8:("KaleidoScope_DrawWorldMap",),
+ 0x8081FB1C:("KaleidoScope_UpdateWorldMapCursor",),
0x8081FF80:("KaleidoScope_DrawMaskSelect",),
0x808204AC:("KaleidoScope_UpdateMaskCursor",),
0x80820FA4:("KaleidoScope_UpdateMaskEquip",),
@@ -4223,26 +4223,26 @@
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",),
- 0x808259D4:("func_808259D4",),
+ 0x808256E4:("KaleidoScope_UpdateOwlWarpNamePanel",),
+ 0x8082585C:("KaleidoScope_UpdateSwitchPage",),
+ 0x808259D4:("KaleidoScope_SetView",),
0x80825A50:("func_80825A50",),
0x80825E28:("func_80825E28",),
0x808274DC:("func_808274DC",),
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",),
@@ -6903,14 +6903,14 @@
0x809199FC:("func_809199FC",),
0x80919D68:("EffDust_Draw",),
0x80919F30:("func_80919F30",),
- 0x80919FC8:("func_80919FC8",),
- 0x8091A044:("func_8091A044",),
- 0x8091A0B8:("func_8091A0B8",),
+ 0x80919FC8:("BgUmajump_StopCutscene",),
+ 0x8091A044:("BgUmajump_PlayCutscene",),
+ 0x8091A0B8:("BgUmajump_CheckDistance",),
0x8091A124:("BgUmajump_Init",),
0x8091A2D8:("BgUmajump_Destroy",),
0x8091A30C:("BgUmajump_Update",),
0x8091A5A0:("func_8091A5A0",),
- 0x8091A7B0:("func_8091A7B0",),
+ 0x8091A7B0:("BgUmajump_Draw",),
0x8091A8A0:("func_8091A8A0",),
0x8091A8C4:("EnInsect_XZDistanceSquared",),
0x8091A8F4:("EnInsect_InBottleRange",),
@@ -8245,10 +8245,10 @@
0x8098176C:("func_8098176C",),
0x809817E4:("OceffStorm_Init",),
0x80981904:("OceffStorm_Destroy",),
- 0x80981928:("func_80981928",),
+ 0x80981928:("OceffStorm_DefaultAction",),
0x80981B48:("func_80981B48",),
0x80981B68:("OceffStorm_Update",),
- 0x80981BB8:("func_80981BB8",),
+ 0x80981BB8:("OceffStorm_Draw2",),
0x80981D68:("OceffStorm_Draw",),
0x80983520:("ObjDemo_Init",),
0x80983634:("func_80983634",),
@@ -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",),
@@ -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",),
@@ -11629,12 +11629,12 @@
0x80AAEABC:("DmChar07_DoNothing",),
0x80AAEACC:("DmChar07_Update",),
0x80AAEAF0:("DmChar07_Draw",),
- 0x80AAF050:("func_80AAF050",),
- 0x80AAF15C:("func_80AAF15C",),
+ 0x80AAF050:("DmChar08_UpdateEyes",),
+ 0x80AAF15C:("DmChar08_ChangeAnimation",),
0x80AAF1F8:("DmChar08_Init",),
0x80AAF5D8:("DmChar08_Destroy",),
- 0x80AAF610:("func_80AAF610",),
- 0x80AAF79C:("func_80AAF79C",),
+ 0x80AAF610:("DmChar08_WaitForSong",),
+ 0x80AAF79C:("DmChar08_SetupAppearCs",),
0x80AAF884:("func_80AAF884",),
0x80AAF8F4:("func_80AAF8F4",),
0x80AAFA18:("func_80AAFA18",),
@@ -11642,19 +11642,19 @@
0x80AAFAE4:("func_80AAFAE4",),
0x80AAFB04:("func_80AAFB04",),
0x80AAFB94:("func_80AAFB94",),
- 0x80AAFBA4:("func_80AAFBA4",),
+ 0x80AAFBA4:("DmChar08_SpawnBubbles",),
0x80AAFCCC:("func_80AAFCCC",),
- 0x80AAFE78:("func_80AAFE78",),
+ 0x80AAFE78:("DmChar08_DoNothing",),
0x80AAFE88:("func_80AAFE88",),
0x80AB01E8:("func_80AB01E8",),
0x80AB023C:("func_80AB023C",),
0x80AB032C:("func_80AB032C",),
0x80AB096C:("func_80AB096C",),
- 0x80AB0A10:("func_80AB0A10",),
+ 0x80AB0A10:("DmChar08_UpdateCollision",),
0x80AB0CC8:("DmChar08_Update",),
- 0x80AB0E3C:("func_80AB0E3C",),
- 0x80AB0E7C:("func_80AB0E7C",),
- 0x80AB0F90:("func_80AB0F90",),
+ 0x80AB0E3C:("DmChar08_OverrideLimbDraw",),
+ 0x80AB0E7C:("DmChar08_PostLimbDraw",),
+ 0x80AB0F90:("DmChar08_TransformLimbDraw",),
0x80AB1124:("DmChar08_Draw",),
0x80AB1E10:("DmChar09_ChangeAnim",),
0x80AB1EAC:("DmChar09_Init",),
@@ -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",),
@@ -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",),
@@ -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",),
@@ -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",),
@@ -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,10 +14698,10 @@
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",),
@@ -14954,7 +14954,7 @@
0x80B9A8E8:("ObjY2lift_Draw",),
0x80B9A980:("ObjY2shutter_Init",),
0x80B9A9EC:("ObjY2shutter_Destroy",),
- 0x80B9AA20:("func_80B9AA20",),
+ 0x80B9AA20:("ObjY2shutter_SetupOpen",),
0x80B9AA54:("ObjY2shutter_Update",),
0x80B9AE00:("ObjY2shutter_Draw",),
0x80B9AF50:("func_80B9AF50",),
@@ -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",),
@@ -15595,22 +15595,22 @@
0x80BC7BBC:("OceffWipe5_Draw",),
0x80BC9270:("EnStoneheishi_Init",),
0x80BC9330:("EnStoneheishi_Destroy",),
- 0x80BC935C:("func_80BC935C",),
- 0x80BC941C:("func_80BC941C",),
+ 0x80BC935C:("EnStoneheishi_ChangeAnim",),
+ 0x80BC941C:("EnStoneheishi_TrackPlayer",),
0x80BC94B0:("func_80BC94B0",),
0x80BC9560:("func_80BC9560",),
0x80BC9660:("func_80BC9660",),
0x80BC9680:("func_80BC9680",),
- 0x80BC98EC:("func_80BC98EC",),
- 0x80BC9908:("func_80BC9908",),
- 0x80BC9A10:("func_80BC9A10",),
- 0x80BC9A2C:("func_80BC9A2C",),
- 0x80BC9C88:("func_80BC9C88",),
+ 0x80BC98EC:("EnStoneheishi_SetupCheckGivenItem",),
+ 0x80BC9908:("EnStoneheishi_CheckGivenItem",),
+ 0x80BC9A10:("EnStoneheishi_SetupDrinkBottleProcess",),
+ 0x80BC9A2C:("EnStoneheishi_DrinkBottleProcess",),
+ 0x80BC9C88:("EnStoneheishi_GiveItemReward",),
0x80BC9D28:("func_80BC9D28",),
0x80BC9E50:("func_80BC9E50",),
0x80BC9EE4:("EnStoneheishi_Update",),
- 0x80BCA0AC:("func_80BCA0AC",),
- 0x80BCA104:("func_80BCA104",),
+ 0x80BCA0AC:("EnStoneheishi_OverrideLimbDraw",),
+ 0x80BCA104:("EnStoneheishi_PostLimbDraw",),
0x80BCA2AC:("EnStoneheishi_Draw",),
0x80BCA5A0:("OceffWipe6_Init",),
0x80BCA5F8:("OceffWipe6_Destroy",),
@@ -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",),
@@ -15765,16 +15765,16 @@
0x80BD40D0:("func_80BD40D0",),
0x80BD4108:("ObjHgdoor_Init",),
0x80BD41B4:("ObjHgdoor_Destroy",),
- 0x80BD41E8:("ObjHgdoor_SetupCheckShouldOpen",),
- 0x80BD41FC:("ObjHgdoor_CheckShouldOpen",),
- 0x80BD42AC:("func_80BD42AC",),
- 0x80BD42C0:("func_80BD42C0",),
- 0x80BD433C:("func_80BD433C",),
- 0x80BD4358:("func_80BD4358",),
- 0x80BD4460:("func_80BD4460",),
- 0x80BD4478:("func_80BD4478",),
- 0x80BD44D0:("func_80BD44D0",),
- 0x80BD4500:("func_80BD4500",),
+ 0x80BD41E8:("ObjHgdoor_SetupIdle",),
+ 0x80BD41FC:("ObjHgdoor_Idle",),
+ 0x80BD42AC:("ObjHgdoor_SetupCutscene",),
+ 0x80BD42C0:("ObjHgdoor_PlayCutscene",),
+ 0x80BD433C:("ObjHgdoor_SetupCsAction",),
+ 0x80BD4358:("ObjHgdoor_HandleCsAction",),
+ 0x80BD4460:("ObjHgdoor_SetupStopCs",),
+ 0x80BD4478:("ObjHgdoor_StopCs",),
+ 0x80BD44D0:("ObjHgdoor_Rotate",),
+ 0x80BD4500:("ObjHgdoor_Open",),
0x80BD4540:("ObjHgdoor_Update",),
0x80BD4570:("ObjHgdoor_Draw",),
0x80BD4720:("func_80BD4720",),
@@ -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",),
@@ -16552,9 +16552,9 @@
0x80C05DE8:("func_80C05DE8",),
0x80C05E7C:("EnBombal_Update",),
0x80C05F30:("EnBombal_Draw",),
- 0x80C05F90:("func_80C05F90",),
- 0x80C060B8:("func_80C060B8",),
- 0x80C06208:("func_80C06208",),
+ 0x80C05F90:("EnBombal_InitEffects",),
+ 0x80C060B8:("EnBombal_UpdateEffects",),
+ 0x80C06208:("EnBombal_DrawEffects",),
0x80C06510:("ObjMoonStone_Init",),
0x80C0661C:("ObjMoonStone_Destroy",),
0x80C0662C:("func_80C0662C",),
@@ -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 53ef5a8b7..285cb4992 100644
--- a/tools/disasm/variables.txt
+++ b/tools/disasm/variables.txt
@@ -454,87 +454,100 @@
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 +573,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 +678,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 +747,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),
@@ -959,9 +971,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),
@@ -1048,8 +1060,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),
@@ -1059,7 +1071,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),
@@ -1073,7 +1085,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),
@@ -1092,12 +1104,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),
@@ -1112,11 +1124,11 @@
0x801BFB14:("D_801BFB14","UNK_TYPE1","",0x1),
0x801BFB1C:("D_801BFB1C","UNK_TYPE1","",0x1),
0x801BFB24:("D_801BFB24","UNK_TYPE1","",0x1),
- 0x801BFB2C:("D_801BFB2C","UNK_TYPE2","",0x2),
+ 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),
@@ -1135,63 +1147,63 @@
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","UNK_TYPE1","",0x1),
+ 0x801C00BC:("gPlayerSheathedSwords","UNK_TYPE1","",0x1),
+ 0x801C00D4:("gPlayerSwordSheaths","UNK_TYPE1","",0x1),
+ 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),
+ 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:("D_801C0294","UNK_TYPE1","",0x1),
0x801C02A8:("D_801C02A8","UNK_TYPE1","",0x1),
0x801C02BC:("D_801C02BC","UNK_TYPE1","",0x1),
@@ -1233,11 +1245,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),
@@ -1329,7 +1341,7 @@
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),
@@ -1928,11 +1940,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),
@@ -1976,7 +1986,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),
@@ -2222,13 +2232,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),
@@ -3846,26 +3856,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),
@@ -3984,17 +3982,17 @@
0x801F56B0:("D_801F56B0","T_801F56B0","",0x188),
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),
+ 0x801F59B0:("D_801F59B0","Vec3f","[2]",0x18),
+ 0x801F59C8:("D_801F59C8","s32","[2]",0x8),
+ 0x801F59D0:("D_801F59D0","struct_801F59D0","",0x0A),
+ 0x801F59DC:("D_801F59DC","Vec3f*","",0x4),
+ 0x801F59E0:("D_801F59E0","s32","",0x4),
+ 0x801F59E4:("D_801F59E4","s32","",0x4),
0x801F59E8:("D_801F59E8","Vec3f","",0xC),
- 0x801F59F4:("D_801F59F4","UNK_TYPE1","",0x1),
- 0x801F59F8:("D_801F59F8","UNK_TYPE1","",0x1),
+ 0x801F59F4:("D_801F59F4","s32","",0x4),
+ 0x801F59F8:("D_801F59F8","s32","",0x4),
0x801F5A00:("sQuakeRequest","QuakeRequest","[4]",0x90),
0x801F5A90:("sDistortionRequest","DistortionRequest","",0xc),
0x801F5AA0:("sMatAnimStep","s32","",0x4),
@@ -4334,11 +4332,11 @@
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),
+ 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),
@@ -4349,7 +4347,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),
@@ -4641,32 +4639,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),
@@ -4684,28 +4682,28 @@
0x8082B484:("sCButtonPosX","UNK_TYPE1","",0x1),
0x8082B48C:("sCButtonPosY","UNK_TYPE1","",0x1),
0x8082B494:("sEquipMagicArrowBowSlotHoldTimer","UNK_TYPE2","",0x2),
- 0x8082B4A0:("D_8082B4A0","UNK_TYPE4","",0x4),
- 0x8082B4AC:("D_8082B4AC","UNK_TYPE1","",0x1),
- 0x8082B4BC:("D_8082B4BC","UNK_TYPE1","",0x1),
+ 0x8082B4A0:("sDungeonItemTextures","UNK_TYPE4","",0x4),
+ 0x8082B4AC:("sDungeonTitleTextures","UNK_TYPE1","",0x1),
+ 0x8082B4BC:("sDungeonMapFloorIconPosY","UNK_TYPE1","",0x1),
0x8082B4C4:("D_8082B4C4","UNK_TYPE1","",0x1),
- 0x8082B4C8:("D_8082B4C8","UNK_TYPE2","",0x2),
- 0x8082B4CC:("D_8082B4CC","UNK_TYPE2","",0x2),
- 0x8082B4D0:("D_8082B4D0","UNK_TYPE2","",0x2),
- 0x8082B4D4:("D_8082B4D4","UNK_TYPE2","",0x2),
- 0x8082B4D8:("D_8082B4D8","UNK_TYPE2","",0x2),
- 0x8082B4DC:("D_8082B4DC","f32","",0x4),
- 0x8082B4E0:("D_8082B4E0","UNK_TYPE1","",0x1),
- 0x8082B520:("D_8082B520","UNK_TYPE1","",0x1),
- 0x8082B52C:("D_8082B52C","UNK_TYPE1","",0x1),
- 0x8082B538:("D_8082B538","UNK_TYPE1","",0x1),
- 0x8082B548:("D_8082B548","s16","[30]",0x3C),
- 0x8082B584:("D_8082B584","UNK_TYPE2","",0x2),
- 0x8082B590:("D_8082B590","UNK_TYPE2","",0x2),
- 0x8082B59C:("D_8082B59C","UNK_TYPE1","",0x1),
- 0x8082B5B4:("D_8082B5B4","UNK_TYPE1","",0x1),
- 0x8082B5CC:("D_8082B5CC","UNK_TYPE1","",0x1),
- 0x8082B5E0:("D_8082B5E0","UNK_TYPE1","",0x1),
- 0x8082B5F4:("D_8082B5F4","UNK_TYPE2","",0x2),
+ 0x8082B4C8:("sStrayFairyIconTimer","UNK_TYPE2","",0x2),
+ 0x8082B4CC:("sStrayFairyIconIndex","UNK_TYPE2","",0x2),
+ 0x8082B4D0:("sStrayFairyIconAlphaScaleTimer","UNK_TYPE2","",0x2),
+ 0x8082B4D4:("sStrayFairyIconAlphaScaleState","UNK_TYPE2","",0x2),
+ 0x8082B4D8:("sStrayFairyIconAlpha","UNK_TYPE2","",0x2),
+ 0x8082B4DC:("sStrayFairyIconScale","f32","",0x4),
+ 0x8082B4E0:("sStrayFairyIconTextures","UNK_TYPE1","",0x1),
+ 0x8082B520:("sStrayFairyIconPrimColors","UNK_TYPE1","",0x1),
+ 0x8082B52C:("sStrayFairyIconEnvColors","UNK_TYPE1","",0x1),
+ 0x8082B538:("sStrayFairyIconRectS","UNK_TYPE1","",0x1),
+ 0x8082B548:("sCloudTextures","s16","[30]",0x3C),
+ 0x8082B584:("sWorldMapDotPrimColors","UNK_TYPE2","",0x2),
+ 0x8082B590:("sWorldMapDotEnvColors","UNK_TYPE2","",0x2),
+ 0x8082B59C:("sWorldMapCursorsRectLeft","UNK_TYPE1","",0x1),
+ 0x8082B5B4:("sWorldMapCursorsRectTop","UNK_TYPE1","",0x1),
+ 0x8082B5CC:("sGreatFairySpawnRegions","UNK_TYPE1","",0x1),
+ 0x8082B5E0:("sOwlWarpPauseItems","UNK_TYPE1","",0x1),
+ 0x8082B5F4:("sStickAdjTimer","UNK_TYPE2","",0x2),
0x8082B600:("sMaskEquipState","UNK_TYPE2","",0x2),
0x8082B604:("sMaskEquipMagicArrowSlotHoldTimer","UNK_TYPE2","",0x2),
0x8082B608:("sMaskEquipAnimTimer","UNK_TYPE2","",0x2),
@@ -4724,32 +4722,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),
@@ -4789,10 +4787,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),
@@ -4804,15 +4802,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),
@@ -4929,7 +4927,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),
@@ -11448,7 +11446,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),
@@ -12640,21 +12638,21 @@
0x80AAE960:("Dm_Char06_InitVars","UNK_TYPE1","",0x1),
0x80AAEFF0:("Dm_Char07_InitVars","UNK_TYPE1","",0x1),
0x80AB1370:("Dm_Char08_InitVars","UNK_TYPE1","",0x1),
- 0x80AB1390:("D_80AB1390","UNK_TYPE1","",0x1),
- 0x80AB1398:("D_80AB1398","UNK_TYPE1","",0x1),
- 0x80AB13A0:("D_80AB13A0","UNK_TYPE1","",0x1),
- 0x80AB14D0:("D_80AB14D0","UNK_TYPE1","",0x1),
- 0x80AB1600:("D_80AB1600","UNK_TYPE2","",0x2),
- 0x80AB1648:("D_80AB1648","UNK_TYPE2","",0x2),
- 0x80AB1690:("D_80AB1690","UNK_TYPE1","",0x1),
+ 0x80AB1390:("D_80AB1390","CamData","",0x8),
+ 0x80AB1398:("D_80AB1398","SurfaceType","",0x8),
+ 0x80AB13A0:("D_80AB13A0","CollisionPoly","19",0xCC),
+ 0x80AB14D0:("sTurtleGreatBayTempleColPolygons2","CollisionPoly[]","19",0xCC),
+ 0x80AB1600:("D_80AB1600","Vec3s[]","12",0x48),
+ 0x80AB1648:("D_80AB1648","Vec3s[]","12",0x48),
+ 0x80AB1690:("sTurtleGreatBayTempleCol","CollisionHeader","",0x2C),
0x80AB16A8:("D_80AB16A8","UNK_PTR","",0x4),
- 0x80AB16BC:("D_80AB16BC","UNK_TYPE1","",0x1),
- 0x80AB1764:("D_80AB1764","UNK_TYPE1","",0x1),
- 0x80AB1770:("D_80AB1770","UNK_TYPE2","",0x2),
- 0x80AB1774:("D_80AB1774","UNK_TYPE1","",0x1),
- 0x80AB1778:("D_80AB1778","UNK_TYPE1","",0x1),
- 0x80AB177C:("D_80AB177C","UNK_TYPE4","",0x4),
- 0x80AB1788:("D_80AB1788","UNK_TYPE1","",0x1),
+ 0x80AB16BC:("sLargeTurtleAnimationInfo","AnimationInfo[]","0x7",0xE0),
+ 0x80AB1764:("sInitChain","InitChainEntry","",0x1),
+ 0x80AB1770:("D_80AB1770","s16","",0x2),
+ 0x80AB1774:("sLargeTurtleBubblePrimColor","Color_RGBA8","",0x4),
+ 0x80AB1778:("sLargeTurtleBubbleEnvColor","Color_RGBA8","",0x4),
+ 0x80AB177C:("sLargeTurtleBubbelAccel","Vec3f","",0xC),
+ 0x80AB1788:("sLargeTurtleEyeTextures","TexturePtr","9",0x1),
0x80AB17B0:("jtbl_80AB17B0","UNK_PTR","",0x4),
0x80AB17C8:("D_80AB17C8","f32","",0x4),
0x80AB17CC:("D_80AB17CC","f32","",0x4),
@@ -14259,8 +14257,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),
@@ -14286,7 +14284,7 @@
0x80B3FE50:("D_80B3FE50","f32","",0x4),
0x80B3FE54:("D_80B3FE54","f32","",0x4),
0x80B3FE58:("D_80B3FE58","UNK_TYPE1","",0x1),
- 0x80B3FE70:("D_80B3FE70","UNK_TYPE1","",0x1),
+ 0x80B3FE70:("sEyeTextures","TexturePtr[]","0x9",0x4),
0x80B3FE90:("D_80B3FE90","f32","",0x4),
0x80B3FE94:("D_80B3FE94","f32","",0x4),
0x80B40760:("Bg_Goron_Oyu_InitVars","UNK_TYPE1","",0x1),
@@ -15297,11 +15295,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),
@@ -15611,7 +15605,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),
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/ido_recomp/linux/5.3/as0 b/tools/ido_recomp/linux/5.3/as0
new file mode 100755
index 000000000..15c169107
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..1a24f18b2 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..65f0d1b2d 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..cbb4f9d44 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..119d2817b 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..4091986a8
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..653ff37df
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..4b00ffa36
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..d5ba32fbd 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..17d9d3d5d
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..e9ef71c63
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..475079063 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..6c68698f3 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..2b52669de 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..340a282c9 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..3752698d8
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..2b76d0c18
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..03d68a8f2
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..feef7f749 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..090200ab5
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..46e69e09b 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..f723cc5c1 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..d583c6b5b 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..92f76465a 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..7be477312 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..e69611f41 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..2bcce1cd6 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..7fdf06e8d 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..e9b8cbe62 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..cb28e320c 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..cdb4f9121
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..93370b495 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..96d45690b 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..a9f0b56fc 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..801337b48 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..620e624f0
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..a7826480f
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..0f1978051 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..528151499 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..cc539bdb1
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..10c16ca69
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..0ddac02bb 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..fdbaea21d 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..abe1063c6 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..be08a43c9 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..b01b5c335
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..34cad1400
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..3ce31e0cb
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..c1fb98c0d 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..d179f1e13
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..1a375d73e
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..4778d2db6 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..887b7cc49 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..6f5fd9e8d 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..fcc03538c 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..9fb3a3f4f
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..4a0cc8fe2
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..7cc0b1be6
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..4fbd1ab57 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..5c0da6fe6
Binary files /dev/null and b/tools/ido_recomp/windows/7.1/usplit.exe differ
diff --git a/tools/namefixer.py b/tools/namefixer.py
index a5d13493b..198116315 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,6 +114,7 @@ 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",
"func_800BDFC0": "Gfx_DrawDListOpa",
@@ -148,6 +149,7 @@ wordReplace = {
"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_801A2E54": "Audio_PlayBgm_StorePrevBgm",
@@ -296,6 +298,7 @@ wordReplace = {
"func_800B86C8": "Actor_ChangeFocus",
"func_800B90F4": "Actor_DeactivateLens",
"func_800BC770": "Actor_AddQuake",
+ "func_800DF840": "Camera_ChangeMode",
"zelda_malloc": "ZeldaArena_Malloc",
"zelda_mallocR": "ZeldaArena_MallocR",
"zelda_realloc": "ZeldaArena_Realloc",
@@ -496,6 +499,9 @@ wordReplace = {
"func_80169E6C": "Play_SetupRespawnPoint",
"func_8016A0AC": "Play_IsUnderwater",
"func_801690CC": "Play_InCsMode",
+ "func_801129E4": "Interface_SetSceneRestrictions",
+ "func_8011B4E0": "Interface_SetPerfectLetters",
+ "func_80112AFC": "Interface_InitMinigame",
"func_8010E9F0": "Interface_StartTimer",
"func_8010EA9C": "Interface_StartPostmanTimer",
"func_80121F94": "Interface_Destroy",
@@ -525,6 +531,9 @@ 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",
@@ -597,7 +606,7 @@ wordReplace = {
"func_80158C04": "Message_LoadLocalizedRupeesNES",
"func_80158D98": "Message_LoadRupeesNES",
"func_80158FB0": "Message_LoadTimeNES",
- "func_8015926C": "Message_LoadAreaTextNES",
+ "func_8015926C": "Message_LoadOwlWarpTextNES",
"func_8015E750": "Message_FindCreditsMessage",
"func_80133038": "Schedule_RunScript",
@@ -605,6 +614,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 +624,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",
@@ -684,7 +695,8 @@ wordReplace = {
"gSaveContext.equippedMask": "gSaveContext.save.equippedMask",
"gSaveContext.entranceIndex": "gSaveContext.save.entrance",
"gSaveContext.time": "gSaveContext.save.time",
- "gSaveContext.unk_14": "gSaveContext.save.daySpeed",
+ "gSaveContext.save.daySpeed": "gSaveContext.save.timeSpeedOffset",
+ "gSaveContext.unk_14": "gSaveContext.save.timeSpeedOffset",
"gSaveContext.unk_FE6": "gSaveContext.save.bombersCaughtNum",
"gSaveContext.unk_FE7": "gSaveContext.save.bombersCaughtOrder",
"gSaveContext.linkAge": "gSaveContext.save.linkAge",
@@ -698,6 +710,7 @@ wordReplace = {
"gSaveContext.equips": "gSaveContext.save.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",
@@ -708,6 +721,8 @@ wordReplace = {
"gSaveContext.sceneSetupIndex": "gSaveContext.sceneLayer",
"gSaveContext.seqIndex": "gSaveContext.seqId",
"gSaveContext.nightSeqIndex": "gSaveContext.ambienceId",
+ "gSaveContext.minigameState": "gSaveContext.minigameStatus",
+ "gSaveContext.unk_3F3C": "gSaveContext.minigameHiddenScore",
"player->unk_A87": "player->exchangeItemId",
"player->leftHandActor": "player->heldActor",
@@ -722,6 +737,18 @@ wordReplace = {
"player->swordAnimation": "player->meleeWeaponAnimation",
"player->swordState": "player->meleeWeaponState",
"player->swordInfo": "player->meleeWeaponInfo",
+ "player->itemActionParam": "player->heldItemAction",
+ "player->heldItemActionParam": "player->itemAction",
+ "player->unk_A9C": "player->secretRumbleCharge",
+ "player->unk_AA0": "player->closestSecretDistSq",
+ "player->unk_B68": "player->fallStartHeight",
+ "player->unk_B6A": "player->fallDistance",
+ "player->targetActor": "player->talkActor",
+ "player->targetActorDistance": "player->talkActorDistance",
+ "player->unk_730": "player->targetedActor",
+ "player->ageProperties->unk_92": "player->ageProperties->voiceSfxIdOffset",
+ "player->ageProperties->unk_94": "player->ageProperties->surfaceSfxIdOffset",
+
"csCtx.npcActions": "csCtx.actorActions",
"csCtx->npcActions": "csCtx->actorActions",
"csCtx.unk_12": "csCtx.currentCsIndex",
@@ -734,6 +761,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 +782,7 @@ wordReplace = {
"play->actorCtx.unk4": "play->actorCtx.lensMaskSize",
"play->nextEntranceIndex": "play->nextEntrance",
"play->sceneNum": "play->sceneId",
+ "play->pauseCtx.unk_1F0": "play->pauseCtx.bombersNotebookOpen",
"gSaveContext.unk_3DC8": "gSaveContext.timerOsTime",
"gSaveContext.unk_3DD0": "gSaveContext.timerStates",
@@ -766,13 +801,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 +812,23 @@ 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",
+ "ACTORCTX_FLAG_2": "ACTORCTX_FLAG_PICTO_BOX_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",
# 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 bf61be341..691913cdc 100644
--- a/tools/permuter_settings.toml
+++ b/tools/permuter_settings.toml
@@ -1,3 +1,5 @@
+compiler_type = "ido"
+
[preserve_macros]
"g[DS]P.*" = "void"
"gs[DS]P.*" = "void"
@@ -18,6 +20,17 @@ CLOCK_TIME = "int"
CURRENT_DAY = "int"
CHECK_NEWF = "int"
NULL = "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/sizes/code_functions.csv b/tools/sizes/code_functions.csv
index 9db0c0308..afb03d3b7 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
@@ -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
@@ -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
@@ -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
@@ -1368,8 +1368,8 @@ asm/non_matchings/code/z_lib/Math_Vec3f_StepTo.s,Math_Vec3f_StepTo,0x80100448,0x
asm/non_matchings/code/z_lib/Lib_Nop801004FC.s,Lib_Nop801004FC,0x801004FC,0x2
asm/non_matchings/code/z_lib/Lib_SegmentedToVirtual.s,Lib_SegmentedToVirtual,0x80100504,0xE
asm/non_matchings/code/z_lib/Lib_SegmentedToVirtualNull.s,Lib_SegmentedToVirtualNull,0x8010053C,0x12
-asm/non_matchings/code/z_lib/Lib_PhysicalToVirtual.s,Lib_PhysicalToVirtual,0x80100584,0x7
-asm/non_matchings/code/z_lib/Lib_PhysicalToVirtualNull.s,Lib_PhysicalToVirtualNull,0x801005A0,0x8
+asm/non_matchings/code/z_lib/Lib_VirtualToPhysical.s,Lib_VirtualToPhysical,0x80100584,0x7
+asm/non_matchings/code/z_lib/Lib_PhysicalToVirtual.s,Lib_PhysicalToVirtual,0x801005A0,0x8
asm/non_matchings/code/z_lifemeter/LifeMeter_Init.s,LifeMeter_Init,0x801005C0,0x37
asm/non_matchings/code/z_lifemeter/LifeMeter_UpdateColors.s,LifeMeter_UpdateColors,0x8010069C,0xF9
asm/non_matchings/code/z_lifemeter/func_80100A80.s,func_80100A80,0x80100A80,0x8
@@ -1597,32 +1597,32 @@ 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_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
@@ -1664,23 +1664,23 @@ asm/non_matchings/code/z_parameter/func_80118084.s,func_80118084,0x80118084,0x20
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_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
@@ -1744,12 +1744,12 @@ asm/non_matchings/code/z_player_lib/Player_ActionToBottle.s,Player_ActionToBottl
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_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_ActionToSword.s,Player_ActionToSword,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/Player_GetEnvironmentalHazard.s,Player_GetEnvironmentalHazard,0x801242DC,0x51
asm/non_matchings/code/z_player_lib/func_80124420.s,func_80124420,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/Player_DrawImpl.s,Player_DrawImpl,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/func_80124F18.s,func_80124F18,0x80124F18,0x36
@@ -1777,14 +1777,14 @@ 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/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
@@ -1924,7 +1924,7 @@ asm/non_matchings/code/code_8012EC80/Inventory_ChangeEquipment.s,Inventory_Chang
asm/non_matchings/code/code_8012EC80/Inventory_DeleteEquipment.s,Inventory_DeleteEquipment,0x8012ED78,0x1C
asm/non_matchings/code/code_8012EC80/Inventory_ChangeUpgrade.s,Inventory_ChangeUpgrade,0x8012EDE8,0x13
asm/non_matchings/code/code_8012EC80/Inventory_IsMapVisible.s,Inventory_IsMapVisible,0x8012EE34,0x36
-asm/non_matchings/code/code_8012EC80/Inventory_SetMapVisibility.s,Inventory_SetMapVisibility,0x8012EF0C,0x78
+asm/non_matchings/code/code_8012EC80/Inventory_SetWorldMapCloudVisibility.s,Inventory_SetWorldMapCloudVisibility,0x8012EF0C,0x78
asm/non_matchings/code/code_8012EC80/Inventory_SaveDekuPlaygroundHighScore.s,Inventory_SaveDekuPlaygroundHighScore,0x8012F0EC,0x34
asm/non_matchings/code/code_8012EC80/Inventory_IncrementSkullTokenCount.s,Inventory_IncrementSkullTokenCount,0x8012F1BC,0x1C
asm/non_matchings/code/code_8012EC80/Inventory_GetSkullTokenCount.s,Inventory_GetSkullTokenCount,0x8012F22C,0x13
@@ -1966,7 +1966,7 @@ asm/non_matchings/code/z_scene/Scene_HeaderCmdActorCutsceneList.s,Scene_HeaderCm
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_HeaderCmdSetAreaVisitedFlag.s,Scene_HeaderCmdSetAreaVisitedFlag,0x801305B0,0x31
+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_SetExitFade.s,Scene_SetExitFade,0x801306A4,0x11
asm/non_matchings/code/z_scene/Scene_ProcessHeader.s,Scene_ProcessHeader,0x801306E8,0x20
@@ -2294,9 +2294,9 @@ asm/non_matchings/code/code_801420C0/func_801420F4.s,func_801420F4,0x801420F4,0x
asm/non_matchings/code/code_801420C0/func_80142100.s,func_80142100,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
@@ -2394,7 +2394,7 @@ asm/non_matchings/code/z_message_nes/Message_LoadPluralRupeesNES.s,Message_LoadP
asm/non_matchings/code/z_message_nes/Message_LoadLocalizedRupeesNES.s,Message_LoadLocalizedRupeesNES,0x80158C04,0x65
asm/non_matchings/code/z_message_nes/Message_LoadRupeesNES.s,Message_LoadRupeesNES,0x80158D98,0x86
asm/non_matchings/code/z_message_nes/Message_LoadTimeNES.s,Message_LoadTimeNES,0x80158FB0,0xAF
-asm/non_matchings/code/z_message_nes/Message_LoadAreaTextNES.s,Message_LoadAreaTextNES,0x8015926C,0x73
+asm/non_matchings/code/z_message_nes/Message_LoadOwlWarpTextNES.s,Message_LoadOwlWarpTextNES,0x8015926C,0x73
asm/non_matchings/code/z_message_nes/func_80159438.s,func_80159438,0x80159438,0x8D
asm/non_matchings/code/z_message_nes/func_8015966C.s,func_8015966C,0x8015966C,0x6CB
asm/non_matchings/code/z_message_nes/func_8015B198.s,func_8015B198,0x8015B198,0xD6E
@@ -2450,8 +2450,8 @@ asm/non_matchings/code/z_kaleido_scope_call/func_801639EC.s,func_801639EC,0x8016
asm/non_matchings/code/z_kaleido_scope_call/func_80163A38.s,func_80163A38,0x80163A38,0x8
asm/non_matchings/code/z_kaleido_scope_call/func_80163A58.s,func_80163A58,0x80163A58,0x6D
asm/non_matchings/code/z_kaleido_scope_call/func_80163C0C.s,func_80163C0C,0x80163C0C,0x21
-asm/non_matchings/code/z_fbdemo_dlftbls/func_80163C90.s,func_80163C90,0x80163C90,0x3C
-asm/non_matchings/code/z_fbdemo_dlftbls/func_80163D80.s,func_80163D80,0x80163D80,0x10
+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
@@ -2478,12 +2478,12 @@ asm/non_matchings/code/z_fbdemo_circle/TransitionCircle_SetType.s,TransitionCirc
asm/non_matchings/code/z_fbdemo_circle/func_80164C14.s,func_80164C14,0x80164C14,0x10C
asm/non_matchings/code/z_fbdemo_circle/TransitionCircle_Draw.s,TransitionCircle_Draw,0x80165044,0x55
asm/non_matchings/code/z_fbdemo_circle/TransitionCircle_IsDone.s,TransitionCircle_IsDone,0x80165198,0x6
-asm/non_matchings/code/z_overlay/func_801651B0.s,func_801651B0,0x801651B0,0x1D
-asm/non_matchings/code/z_overlay/func_80165224.s,func_80165224,0x80165224,0x19
-asm/non_matchings/code/z_overlay/func_80165288.s,func_80165288,0x80165288,0x3D
-asm/non_matchings/code/z_overlay/func_8016537C.s,func_8016537C,0x8016537C,0x2F
-asm/non_matchings/code/z_overlay/func_80165438.s,func_80165438,0x80165438,0x3
-asm/non_matchings/code/z_overlay/func_80165444.s,func_80165444,0x80165444,0x7
+asm/non_matchings/code/z_overlay/TransitionOverlay_VramToRam.s,TransitionOverlay_VramToRam,0x801651B0,0x1D
+asm/non_matchings/code/z_overlay/TransitionOverlay_VramToRamArray.s,TransitionOverlay_VramToRamArray,0x80165224,0x19
+asm/non_matchings/code/z_overlay/TransitionOverlay_Load.s,TransitionOverlay_Load,0x80165288,0x3D
+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
@@ -2501,8 +2501,8 @@ 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_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/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/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
@@ -2552,7 +2552,7 @@ 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
@@ -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
@@ -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
diff --git a/tools/weekeventregconvert.py b/tools/weekeventregconvert.py
new file mode 100755
index 000000000..e2092e595
--- /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_00_02",
+ ( 0 << 8) | 0x04: "WEEKEVENTREG_00_04",
+ ( 0 << 8) | 0x08: "WEEKEVENTREG_00_08",
+ ( 0 << 8) | 0x10: "WEEKEVENTREG_00_10",
+ ( 0 << 8) | 0x20: "WEEKEVENTREG_00_20",
+ ( 0 << 8) | 0x40: "WEEKEVENTREG_00_40",
+ ( 0 << 8) | 0x80: "WEEKEVENTREG_00_80",
+ ( 1 << 8) | 0x01: "WEEKEVENTREG_01_01",
+ ( 1 << 8) | 0x02: "WEEKEVENTREG_01_02",
+ ( 1 << 8) | 0x04: "WEEKEVENTREG_01_04",
+ ( 1 << 8) | 0x08: "WEEKEVENTREG_01_08",
+ ( 1 << 8) | 0x10: "WEEKEVENTREG_01_10",
+ ( 1 << 8) | 0x20: "WEEKEVENTREG_01_20",
+ ( 1 << 8) | 0x40: "WEEKEVENTREG_01_40",
+ ( 1 << 8) | 0x80: "WEEKEVENTREG_01_80",
+ ( 2 << 8) | 0x01: "WEEKEVENTREG_02_01",
+ ( 2 << 8) | 0x02: "WEEKEVENTREG_02_02",
+ ( 2 << 8) | 0x04: "WEEKEVENTREG_02_04",
+ ( 2 << 8) | 0x08: "WEEKEVENTREG_02_08",
+ ( 2 << 8) | 0x10: "WEEKEVENTREG_02_10",
+ ( 2 << 8) | 0x20: "WEEKEVENTREG_02_20",
+ ( 2 << 8) | 0x40: "WEEKEVENTREG_02_40",
+ ( 2 << 8) | 0x80: "WEEKEVENTREG_02_80",
+ ( 3 << 8) | 0x01: "WEEKEVENTREG_03_01",
+ ( 3 << 8) | 0x02: "WEEKEVENTREG_03_02",
+ ( 3 << 8) | 0x04: "WEEKEVENTREG_03_04",
+ ( 3 << 8) | 0x08: "WEEKEVENTREG_03_08",
+ ( 3 << 8) | 0x10: "WEEKEVENTREG_03_10",
+ ( 3 << 8) | 0x20: "WEEKEVENTREG_03_20",
+ ( 3 << 8) | 0x40: "WEEKEVENTREG_03_40",
+ ( 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_07_80",
+ ( 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_13_20",
+ (13 << 8) | 0x40: "WEEKEVENTREG_13_40",
+ (13 << 8) | 0x80: "WEEKEVENTREG_13_80",
+ (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_20_02",
+ (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_33_80",
+ (34 << 8) | 0x01: "WEEKEVENTREG_34_01",
+ (34 << 8) | 0x02: "WEEKEVENTREG_34_02",
+ (34 << 8) | 0x04: "WEEKEVENTREG_34_04",
+ (34 << 8) | 0x08: "WEEKEVENTREG_34_08",
+ (34 << 8) | 0x10: "WEEKEVENTREG_34_10",
+ (34 << 8) | 0x20: "WEEKEVENTREG_34_20",
+ (34 << 8) | 0x40: "WEEKEVENTREG_34_40",
+ (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_52_20",
+ (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_55_80",
+ (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_63_01",
+ (63 << 8) | 0x02: "WEEKEVENTREG_63_02",
+ (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.weekEventReg[86] & 2
+ checkRegex = re.compile(rf"gSaveContext.save.weekEventReg\[(?P{NUMBER_PATTERN})\]\s*\&\s*(?P{NUMBER_PATTERN})")
+
+ return applyChange(fileContents, checkRegex, getCheckMacro)
+
+def updateSet(fileContents: str) -> str:
+ # gSaveContext.save.weekEventReg[51] |= 0x10
+ setRegex = re.compile(rf"gSaveContext.save.weekEventReg\[(?P{NUMBER_PATTERN})\]\s*\|=\s*(?P{NUMBER_PATTERN})")
+
+ return applyChange(fileContents, setRegex, getSetMacro)
+
+def updateClear(fileContents: str) -> str:
+ # gSaveContext.save.weekEventReg[85] &= (u8)~0x80
+ clearRegex = re.compile(rf"gSaveContext.save.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 073840341..649b781ce 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,68 +566,14 @@ 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
-
-D_060014B0 = 0x060014B0;
-D_06001678 = 0x06001678;
-D_06001880 = 0x06001880;
-D_06001AD8 = 0x06001AD8;
-D_06001E18 = 0x06001E18;
-D_06002358 = 0x06002358;
-
-// ovl_Bg_Kin2_Bombwall
-
-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_Boss_01
D_06000C44 = 0x06000C44;
@@ -677,14 +625,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,86 +719,17 @@ 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
-
-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;
-
// ovl_Eff_Stk
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 +743,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 +752,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 +759,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;
@@ -989,20 +790,10 @@ 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 +825,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,12 +840,6 @@ D_0600A344 = 0x0600A344;
D_06001EFC = 0x06001EFC;
D_0600A808 = 0x0600A808;
-// ovl_En_Hgo
-
-D_0600B644 = 0x0600B644;
-D_0600F248 = 0x0600F248;
-D_06012A58 = 0x06012A58;
-
// ovl_En_Invadepoh_Demo
D_06000080 = 0x06000080;
@@ -1091,15 +856,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;
@@ -1111,16 +867,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;
@@ -1187,22 +933,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;
@@ -1214,21 +944,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;
@@ -1240,16 +955,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;
@@ -1259,26 +964,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;
@@ -1295,28 +980,11 @@ 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;
@@ -1326,45 +994,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;
@@ -1385,22 +1025,6 @@ D_06000D94 = 0x06000D94;
D_06007650 = 0x06007650;
D_0600D658 = 0x0600D658;
-// ovl_Mir_Ray3
-
-D_06000168 = 0x06000168;
-D_060003F8 = 0x060003F8;
-D_060004B0 = 0x060004B0;
-
-// ovl_Obj_Danpeilift
-
-D_06000180 = 0x06000180;
-D_06000BA0 = 0x06000BA0;
-
-// ovl_Obj_Lift
-
-D_06000D10 = 0x06000D10;
-D_06000F00 = 0x06000F00;
-
// ovl_Obj_Mine
D_06000030 = 0x06000030;
@@ -1412,15 +1036,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;